From 08897747364ceb7d8ed4c42675ba727318b05371 Mon Sep 17 00:00:00 2001 From: Oliver Tale-Yazdi Date: Fri, 19 Aug 2022 15:41:05 +0200 Subject: [PATCH 001/148] Co #12059: Revert "Auto-incremental CollectionId" (#1557) * Remove try_increment_id weight info Signed-off-by: Oliver Tale-Yazdi * update lockfile for {"polkadot", "substrate"} Signed-off-by: Oliver Tale-Yazdi Co-authored-by: parity-processbot <> --- Cargo.lock | 358 +++++++++--------- .../statemine/src/weights/pallet_uniques.rs | 7 - .../statemint/src/weights/pallet_uniques.rs | 7 - .../westmint/src/weights/pallet_uniques.rs | 7 - 4 files changed, 179 insertions(+), 200 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1aa1acd5b40..383408b8b75 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -451,7 +451,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "beefy-primitives", @@ -487,7 +487,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -507,7 +507,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "beefy-primitives", "sp-api", @@ -516,7 +516,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "parity-scale-codec", "scale-info", @@ -2777,7 +2777,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "parity-scale-codec", ] @@ -2795,7 +2795,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support", "frame-system", @@ -2818,7 +2818,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "Inflector", "chrono", @@ -2869,7 +2869,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2880,7 +2880,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2896,7 +2896,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support", "frame-system", @@ -2924,7 +2924,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "bitflags", "frame-metadata", @@ -2955,7 +2955,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -2967,7 +2967,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2979,7 +2979,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "proc-macro2", "quote", @@ -2989,7 +2989,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support", "log", @@ -3006,7 +3006,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -3021,7 +3021,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "parity-scale-codec", "sp-api", @@ -3030,7 +3030,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support", "sp-api", @@ -5410,7 +5410,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5431,7 +5431,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support", "frame-system", @@ -5448,7 +5448,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5462,7 +5462,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support", "frame-system", @@ -5478,7 +5478,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support", "frame-system", @@ -5494,7 +5494,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support", "frame-system", @@ -5509,7 +5509,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5533,7 +5533,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5553,7 +5553,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5568,7 +5568,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "beefy-primitives", "frame-support", @@ -5584,7 +5584,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -5607,7 +5607,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5625,7 +5625,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5670,7 +5670,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5687,7 +5687,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "bitflags", "frame-benchmarking", @@ -5715,7 +5715,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "bitflags", "parity-scale-codec", @@ -5730,7 +5730,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "proc-macro2", "quote", @@ -5740,7 +5740,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5757,7 +5757,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5770,7 +5770,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5786,7 +5786,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5809,7 +5809,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5822,7 +5822,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5840,7 +5840,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5855,7 +5855,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5878,7 +5878,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5894,7 +5894,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5914,7 +5914,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5931,7 +5931,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5948,7 +5948,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5966,7 +5966,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5981,7 +5981,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5996,7 +5996,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support", "frame-system", @@ -6013,7 +6013,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6032,7 +6032,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "parity-scale-codec", "sp-api", @@ -6042,7 +6042,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support", "frame-system", @@ -6059,7 +6059,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6082,7 +6082,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6098,7 +6098,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6113,7 +6113,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support", "frame-system", @@ -6127,7 +6127,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6142,7 +6142,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6158,7 +6158,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support", "frame-system", @@ -6179,7 +6179,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6195,7 +6195,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support", "frame-system", @@ -6209,7 +6209,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6232,7 +6232,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6243,7 +6243,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "log", "sp-arithmetic", @@ -6252,7 +6252,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support", "frame-system", @@ -6281,7 +6281,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6299,7 +6299,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6318,7 +6318,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-support", "frame-system", @@ -6334,7 +6334,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6349,7 +6349,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6360,7 +6360,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6377,7 +6377,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6392,7 +6392,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6408,7 +6408,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-benchmarking", "frame-support", @@ -8899,7 +8899,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9274,7 +9274,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "log", "sp-core", @@ -9285,7 +9285,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "futures", "futures-timer", @@ -9312,7 +9312,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "futures", "futures-timer", @@ -9335,7 +9335,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9351,7 +9351,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9368,7 +9368,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9379,7 +9379,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "chrono", "clap 3.2.17", @@ -9418,7 +9418,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "fnv", "futures", @@ -9446,7 +9446,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "hash-db", "kvdb", @@ -9471,7 +9471,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "futures", @@ -9495,7 +9495,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "futures", @@ -9524,7 +9524,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "fork-tree", @@ -9566,7 +9566,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "futures", "jsonrpsee", @@ -9588,7 +9588,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9601,7 +9601,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "futures", @@ -9626,7 +9626,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9653,7 +9653,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "environmental", "parity-scale-codec", @@ -9669,7 +9669,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "log", "parity-scale-codec", @@ -9684,7 +9684,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9704,7 +9704,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "ahash", "async-trait", @@ -9745,7 +9745,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "finality-grandpa", "futures", @@ -9766,7 +9766,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "ansi_term", "futures", @@ -9783,7 +9783,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "hex", @@ -9798,7 +9798,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "asynchronous-codec", @@ -9847,7 +9847,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "bitflags", @@ -9868,7 +9868,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "ahash", "futures", @@ -9886,7 +9886,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "futures", "hex", @@ -9907,7 +9907,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "fork-tree", "futures", @@ -9935,7 +9935,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "bytes", "fnv", @@ -9964,7 +9964,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "futures", "libp2p", @@ -9977,7 +9977,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -9986,7 +9986,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "futures", "hash-db", @@ -10016,7 +10016,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "futures", "jsonrpsee", @@ -10039,7 +10039,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "futures", "jsonrpsee", @@ -10052,7 +10052,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "directories", @@ -10119,7 +10119,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "log", "parity-scale-codec", @@ -10133,7 +10133,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10152,7 +10152,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "futures", "libc", @@ -10171,7 +10171,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "chrono", "futures", @@ -10189,7 +10189,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "ansi_term", "atty", @@ -10220,7 +10220,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10231,7 +10231,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "futures", "futures-timer", @@ -10257,7 +10257,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "futures", "log", @@ -10270,7 +10270,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "futures", "futures-timer", @@ -10793,7 +10793,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "hash-db", "log", @@ -10811,7 +10811,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "blake2", "proc-macro-crate", @@ -10823,7 +10823,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "parity-scale-codec", "scale-info", @@ -10836,7 +10836,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "integer-sqrt", "num-traits", @@ -10851,7 +10851,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "parity-scale-codec", "scale-info", @@ -10864,7 +10864,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "parity-scale-codec", @@ -10876,7 +10876,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "parity-scale-codec", "sp-api", @@ -10888,7 +10888,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "futures", "log", @@ -10906,7 +10906,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "futures", @@ -10925,7 +10925,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "parity-scale-codec", @@ -10943,7 +10943,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "merlin", @@ -10966,7 +10966,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "parity-scale-codec", "scale-info", @@ -10980,7 +10980,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "parity-scale-codec", "scale-info", @@ -10993,7 +10993,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "base58", "bitflags", @@ -11039,7 +11039,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "blake2", "byteorder", @@ -11053,7 +11053,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "proc-macro2", "quote", @@ -11064,7 +11064,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11073,7 +11073,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "proc-macro2", "quote", @@ -11083,7 +11083,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "environmental", "parity-scale-codec", @@ -11094,7 +11094,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "finality-grandpa", "log", @@ -11112,7 +11112,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11126,7 +11126,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "bytes", "futures", @@ -11152,7 +11152,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "lazy_static", "sp-core", @@ -11163,7 +11163,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "futures", @@ -11180,7 +11180,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "thiserror", "zstd", @@ -11189,7 +11189,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "log", "parity-scale-codec", @@ -11204,7 +11204,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "parity-scale-codec", "scale-info", @@ -11218,7 +11218,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "sp-api", "sp-core", @@ -11228,7 +11228,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "backtrace", "lazy_static", @@ -11238,7 +11238,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "rustc-hash", "serde", @@ -11248,7 +11248,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "either", "hash256-std-hasher", @@ -11270,7 +11270,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11288,7 +11288,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "Inflector", "proc-macro-crate", @@ -11300,7 +11300,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "log", "parity-scale-codec", @@ -11314,7 +11314,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "serde", "serde_json", @@ -11323,7 +11323,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "parity-scale-codec", "scale-info", @@ -11337,7 +11337,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "parity-scale-codec", "scale-info", @@ -11348,7 +11348,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "hash-db", "log", @@ -11370,12 +11370,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11388,7 +11388,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "log", "sp-core", @@ -11401,7 +11401,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "futures-timer", @@ -11417,7 +11417,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "parity-scale-codec", "sp-std", @@ -11429,7 +11429,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "sp-api", "sp-runtime", @@ -11438,7 +11438,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "log", @@ -11454,7 +11454,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "ahash", "hash-db", @@ -11477,7 +11477,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11494,7 +11494,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11505,7 +11505,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "impl-trait-for-tuples", "log", @@ -11764,7 +11764,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "platforms", ] @@ -11772,7 +11772,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11793,7 +11793,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "futures-util", "hyper", @@ -11806,7 +11806,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "jsonrpsee", "log", @@ -11827,7 +11827,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "async-trait", "futures", @@ -11853,7 +11853,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11863,7 +11863,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11874,7 +11874,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "ansi_term", "build-helper", @@ -12409,7 +12409,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#00cc5f104176fac6f5a624bced22a2192c7c0470" +source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" dependencies = [ "clap 3.2.17", "jsonrpsee", diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs index a49c1795c28..ea3943cc734 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs @@ -214,13 +214,6 @@ impl pallet_uniques::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } - // Done by hand to satisfy master branch - // This will be regenerated for the next release - fn try_increment_id() -> Weight { - (20_000_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn clear_collection_metadata() -> Weight { diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs index c421cf9ba34..ed9e2b98f88 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs @@ -214,13 +214,6 @@ impl pallet_uniques::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } - // Done by hand to satisfy master branch - // This will be regenerated for the next release - fn try_increment_id() -> Weight { - (20_000_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn clear_collection_metadata() -> Weight { diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs index 66c0587c12c..fd90132bf02 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs @@ -214,13 +214,6 @@ impl pallet_uniques::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } - // Done by hand to satisfy master branch - // This will be regenerated for the next release - fn try_increment_id() -> Weight { - (20_000_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn clear_collection_metadata() -> Weight { From d2f232f1043c1024ddc300bc43cd1f79bebce40a Mon Sep 17 00:00:00 2001 From: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> Date: Mon, 22 Aug 2022 13:30:10 +0200 Subject: [PATCH 002/148] [ci] Weights PR for master and client on cumulus (#1553) * [ci] Weights PR for master and client on cumulus * add 4th pr creation to benchmarks-statemint * rename benchmarks-statemint to benchmarks-assets --- .gitlab-ci.yml | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fb8e950bcc3..8303f84791a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -326,7 +326,7 @@ benchmarks-build: - git commit -m "[benchmarks] pr with weights" - git push origin $BRANCHNAME -benchmarks-statemint: +benchmarks-assets: stage: benchmarks-run before_script: - *rust-info-script @@ -339,9 +339,24 @@ benchmarks-statemint: - ./scripts/benchmarks-ci.sh assets westmint ./artifacts - export BRANCHNAME="weights-statemint-${CI_COMMIT_BRANCH}" - *git-commit-push - # create PR + # create PR to release-parachains-v* branch + - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} + -d '{"title":"[benchmarks] Update weights for statemine/t","body":"This PR is generated automatically by CI.","head":"'${BRANCHNAME}'","base":"'${CI_COMMIT_BRANCH}'"}' + -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls + # create PR to master + - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} + -d '{"title":"[benchmarks] Update weights for statemine/t","body":"This PR is generated automatically by CI.","head":"'${BRANCHNAME}'","base":"master"}' + -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls + # create PR to a branch with version number (e.g. v0.9.270) and release-v* (e.g. release-v0.9.270) + # transform release-parachains-v9270 to v0.9.270 + - export BASEBRANCH=$(echo ${CI_COMMIT_BRANCH} | cut -d "-" -f 3 | sed -e "s/\(.\)\(.\)\(...\)/\10.\2.\3/") + # create PR to v* branch + - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} + -d '{"title":"[benchmarks] Update weights for statemine/t","body":"This PR is generated automatically by CI.","head":"'${BRANCHNAME}'","base":"'${BASEBRANCH}'"}' + -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls + # create PR to release-v* branch - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} - -d '{"title":"[benchmarks] Update weights for statemine/t","body":"This PR is generated automatically by CI.","head":"'$BRANCHNAME'","base":"'${CI_COMMIT_BRANCH}'"}' + -d '{"title":"[benchmarks] Update weights for statemine/t","body":"This PR is generated automatically by CI.","head":"'${BRANCHNAME}'","base":"'release-${BASEBRANCH}'"}' -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls after_script: - rm -rf .git/config @@ -368,13 +383,13 @@ benchmarks-collectives: tags: - weights -publish-benchmarks-statemint-s3: &publish-benchmarks +publish-benchmarks-assets-s3: &publish-benchmarks stage: publish <<: *kubernetes-env image: paritytech/awscli:latest <<: *benchmarks-refs needs: - - job: benchmarks-statemint + - job: benchmarks-assets artifacts: true variables: GIT_STRATEGY: none From bd41e3f11887ea2f55fc37be71ff652923388e03 Mon Sep 17 00:00:00 2001 From: Javier Viola Date: Mon, 22 Aug 2022 11:20:58 -0300 Subject: [PATCH 003/148] chore: bump zombienet version (#1560) --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8303f84791a..78a189fbce5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -29,7 +29,7 @@ variables: CI_IMAGE: "paritytech/ci-linux:production" DOCKER_OS: "debian:stretch" ARCH: "x86_64" - ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.2.53" + ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.2.56" .collect-artifacts: &collect-artifacts artifacts: From 09bbdd514349ca7e0e071bea27d4ab392ec6866f Mon Sep 17 00:00:00 2001 From: Sergejs Kostjucenko <85877331+sergejparity@users.noreply.github.com> Date: Tue, 23 Aug 2022 11:35:02 +0300 Subject: [PATCH 004/148] pin gha versions (#1566) --- .github/workflows/docs.yml | 4 ++-- .github/workflows/release-30_create-draft.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 8d0d6bd0a78..b2888f12471 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -18,7 +18,7 @@ jobs: run: rustup show - name: Rust cache - uses: Swatinem/rust-cache@v1 + uses: Swatinem/rust-cache@6720f05bc48b77f96918929a9019fb2203ff71f8 # v2.0.0 - name: Build rustdocs run: SKIP_WASM_BUILD=1 cargo doc --all --no-deps @@ -27,7 +27,7 @@ jobs: run: echo "" > ./target/doc/index.html - name: Deploy documentation - uses: peaceiris/actions-gh-pages@v3 + uses: peaceiris/actions-gh-pages@068dc23d9710f1ba62e86896f84735d869951305 # v3.8.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_branch: gh-pages diff --git a/.github/workflows/release-30_create-draft.yml b/.github/workflows/release-30_create-draft.yml index 709f040c4a7..2869aa5344e 100644 --- a/.github/workflows/release-30_create-draft.yml +++ b/.github/workflows/release-30_create-draft.yml @@ -192,7 +192,7 @@ jobs: - name: Create draft release id: create-release - uses: actions/create-release@v1 + uses: actions/create-release@0cb9c9b65d5d1901c1f53e5e66eaf4afd303e70e # v1.1.4 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: @@ -258,7 +258,7 @@ jobs: mv "$(sed -E 's/-(.*)/_\1/' <<< ${{ matrix.runtime }})_runtime.compact.compressed.wasm" "${{ matrix.runtime }}_runtime.compact.compressed.wasm" || true - name: Upload compressed ${{ matrix.runtime }} wasm - uses: actions/upload-release-asset@v1 + uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: From 711769e0ea4271de60c335b51b4e1c95e9ddd281 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Aug 2022 22:56:46 +0200 Subject: [PATCH 005/148] Bump serde from 1.0.143 to 1.0.144 (#1565) Bumps [serde](https://github.com/serde-rs/serde) from 1.0.143 to 1.0.144. - [Release notes](https://github.com/serde-rs/serde/releases) - [Commits](https://github.com/serde-rs/serde/compare/v1.0.143...v1.0.144) --- updated-dependencies: - dependency-name: serde dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- pallets/aura-ext/Cargo.toml | 2 +- pallets/collator-selection/Cargo.toml | 2 +- pallets/parachain-system/Cargo.toml | 2 +- pallets/xcm/Cargo.toml | 2 +- parachain-template/node/Cargo.toml | 2 +- parachain-template/runtime/Cargo.toml | 2 +- parachains/pallets/parachain-info/Cargo.toml | 2 +- parachains/pallets/ping/Cargo.toml | 2 +- parachains/runtimes/assets/statemine/Cargo.toml | 2 +- parachains/runtimes/assets/statemint/Cargo.toml | 2 +- parachains/runtimes/assets/westmint/Cargo.toml | 2 +- .../runtimes/collectives/collectives-polkadot/Cargo.toml | 2 +- parachains/runtimes/contracts/contracts-rococo/Cargo.toml | 2 +- parachains/runtimes/starters/seedling/Cargo.toml | 2 +- parachains/runtimes/starters/shell/Cargo.toml | 2 +- parachains/runtimes/testing/penpal/Cargo.toml | 2 +- parachains/runtimes/testing/rococo-parachain/Cargo.toml | 2 +- polkadot-parachain/Cargo.toml | 2 +- test/runtime/Cargo.toml | 2 +- test/service/Cargo.toml | 2 +- 21 files changed, 24 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 383408b8b75..dbb02543cdb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10479,9 +10479,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.143" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e8e5d5b70924f74ff5c6d64d9a5acd91422117c60f48c4e07855238a254553" +checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" dependencies = [ "serde_derive", ] @@ -10498,9 +10498,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.143" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3d8e8de557aee63c26b85b947f5e59b690d0454c753f3adeb5cd7835ab88391" +checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" dependencies = [ "proc-macro2", "quote", diff --git a/pallets/aura-ext/Cargo.toml b/pallets/aura-ext/Cargo.toml index f51e4f69866..30f5214a926 100644 --- a/pallets/aura-ext/Cargo.toml +++ b/pallets/aura-ext/Cargo.toml @@ -8,7 +8,7 @@ description = "AURA consensus extension pallet for parachains" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } # Substrate frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/pallets/collator-selection/Cargo.toml b/pallets/collator-selection/Cargo.toml index b82d11088b7..4ed02a07c51 100644 --- a/pallets/collator-selection/Cargo.toml +++ b/pallets/collator-selection/Cargo.toml @@ -17,7 +17,7 @@ log = { version = "0.4.17", default-features = false } codec = { default-features = false, features = ["derive"], package = "parity-scale-codec", version = "3.0.0" } rand = { version = "0.8.5", features = ["std_rng"], default-features = false } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -serde = { version = "1.0.143", default-features = false } +serde = { version = "1.0.144", default-features = false } sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/pallets/parachain-system/Cargo.toml b/pallets/parachain-system/Cargo.toml index e3e0e965a9b..16fdfe1af90 100644 --- a/pallets/parachain-system/Cargo.toml +++ b/pallets/parachain-system/Cargo.toml @@ -12,7 +12,7 @@ environmental = { version = "1.1.2", default-features = false } impl-trait-for-tuples = "0.2.1" log = { version = "0.4.17", default-features = false } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } # Substrate frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/pallets/xcm/Cargo.toml b/pallets/xcm/Cargo.toml index aa8ab7f7892..6ea825c07fc 100644 --- a/pallets/xcm/Cargo.toml +++ b/pallets/xcm/Cargo.toml @@ -7,7 +7,7 @@ version = "0.1.0" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/parachain-template/node/Cargo.toml b/parachain-template/node/Cargo.toml index 5114917efa1..2dad3ab4e58 100644 --- a/parachain-template/node/Cargo.toml +++ b/parachain-template/node/Cargo.toml @@ -14,7 +14,7 @@ clap = { version = "3.2.17", features = ["derive"] } derive_more = "0.99.2" log = "0.4.17" codec = { package = "parity-scale-codec", version = "3.0.0" } -serde = { version = "1.0.143", features = ["derive"] } +serde = { version = "1.0.144", features = ["derive"] } hex-literal = "0.3.4" jsonrpsee = { version = "0.15.1", features = ["server"] } diff --git a/parachain-template/runtime/Cargo.toml b/parachain-template/runtime/Cargo.toml index 791c32f7041..12d25abbe1d 100644 --- a/parachain-template/runtime/Cargo.toml +++ b/parachain-template/runtime/Cargo.toml @@ -19,7 +19,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } smallvec = "1.9.0" # Local diff --git a/parachains/pallets/parachain-info/Cargo.toml b/parachains/pallets/parachain-info/Cargo.toml index b1b15f5a144..3544ba4f795 100644 --- a/parachains/pallets/parachain-info/Cargo.toml +++ b/parachains/pallets/parachain-info/Cargo.toml @@ -7,7 +7,7 @@ version = "0.1.0" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/parachains/pallets/ping/Cargo.toml b/parachains/pallets/ping/Cargo.toml index c3ad055c60f..4e97fcb6b8b 100644 --- a/parachains/pallets/ping/Cargo.toml +++ b/parachains/pallets/ping/Cargo.toml @@ -7,7 +7,7 @@ version = "0.1.0" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/parachains/runtimes/assets/statemine/Cargo.toml b/parachains/runtimes/assets/statemine/Cargo.toml index a73e694dcb2..78f540c2796 100644 --- a/parachains/runtimes/assets/statemine/Cargo.toml +++ b/parachains/runtimes/assets/statemine/Cargo.toml @@ -10,7 +10,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } smallvec = "1.9.0" # Substrate diff --git a/parachains/runtimes/assets/statemint/Cargo.toml b/parachains/runtimes/assets/statemint/Cargo.toml index 48c465fde70..c1f469a4f97 100644 --- a/parachains/runtimes/assets/statemint/Cargo.toml +++ b/parachains/runtimes/assets/statemint/Cargo.toml @@ -9,7 +9,7 @@ description = "Statemint parachain runtime" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } smallvec = "1.9.0" diff --git a/parachains/runtimes/assets/westmint/Cargo.toml b/parachains/runtimes/assets/westmint/Cargo.toml index e9b6091a3c3..477e414d95b 100644 --- a/parachains/runtimes/assets/westmint/Cargo.toml +++ b/parachains/runtimes/assets/westmint/Cargo.toml @@ -10,7 +10,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } smallvec = "1.9.0" # Substrate diff --git a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml index 96db205d2eb..f8d7453c965 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml +++ b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml @@ -9,7 +9,7 @@ description = "Polkadot Collectives Parachain Runtime" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } smallvec = "1.6.1" diff --git a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml index 1a90e6128b5..513d31f3314 100644 --- a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml +++ b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml @@ -15,7 +15,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } smallvec = "1.9.0" # Substrate diff --git a/parachains/runtimes/starters/seedling/Cargo.toml b/parachains/runtimes/starters/seedling/Cargo.toml index 693ed3f84bd..0d01f36bd38 100644 --- a/parachains/runtimes/starters/seedling/Cargo.toml +++ b/parachains/runtimes/starters/seedling/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } log = { version = "0.4.14", default-features = false } scale-info = { version = "2.0.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } # Substrate frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/parachains/runtimes/starters/shell/Cargo.toml b/parachains/runtimes/starters/shell/Cargo.toml index a270d188480..826e43bdc68 100644 --- a/parachains/runtimes/starters/shell/Cargo.toml +++ b/parachains/runtimes/starters/shell/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } # Substrate frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/parachains/runtimes/testing/penpal/Cargo.toml b/parachains/runtimes/testing/penpal/Cargo.toml index f8be17e3ec1..168de417004 100644 --- a/parachains/runtimes/testing/penpal/Cargo.toml +++ b/parachains/runtimes/testing/penpal/Cargo.toml @@ -19,7 +19,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.16", default-features = false } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } smallvec = "1.9.0" # Substrate diff --git a/parachains/runtimes/testing/rococo-parachain/Cargo.toml b/parachains/runtimes/testing/rococo-parachain/Cargo.toml index 40a506b0236..2904940f34b 100644 --- a/parachains/runtimes/testing/rococo-parachain/Cargo.toml +++ b/parachains/runtimes/testing/rococo-parachain/Cargo.toml @@ -9,7 +9,7 @@ description = "Simple runtime used by the rococo parachain(s)" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } # Substrate frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index 80b39cfb1cd..9822b10224b 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -13,7 +13,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0" } futures = "0.3.23" hex-literal = "0.3.4" log = "0.4.17" -serde = { version = "1.0.143", features = ["derive"] } +serde = { version = "1.0.144", features = ["derive"] } # Local rococo-parachain-runtime = { path = "../parachains/runtimes/testing/rococo-parachain" } diff --git a/test/runtime/Cargo.toml b/test/runtime/Cargo.toml index 69808cf2ac9..42b78f935a3 100644 --- a/test/runtime/Cargo.toml +++ b/test/runtime/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -serde = { version = "1.0.143", optional = true, features = ["derive"] } +serde = { version = "1.0.144", optional = true, features = ["derive"] } # Substrate frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index e53cfb35bc3..26c9401d31f 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -15,7 +15,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0" } criterion = { version = "0.3.6", features = [ "async_tokio" ] } jsonrpsee = { version = "0.15.1", features = ["server"] } rand = "0.8.5" -serde = { version = "1.0.143", features = ["derive"] } +serde = { version = "1.0.144", features = ["derive"] } tokio = { version = "1.19.2", features = ["macros"] } tracing = "0.1.36" url = "2.2.2" From 8637376efebe36017a0098cb22a531d283754bf2 Mon Sep 17 00:00:00 2001 From: Squirrel Date: Wed, 24 Aug 2022 12:37:22 +0100 Subject: [PATCH 006/148] shell and seedling did not build (#1567) * shell and seedling did not build (even though CI was green). Time for more CI. * let's just fix the build in this PR * Update parachains/runtimes/starters/shell/Cargo.toml No need to rem this out as we're not testing the new CI changes in this PR. --- parachains/runtimes/starters/seedling/Cargo.toml | 1 + parachains/runtimes/starters/shell/Cargo.toml | 1 + 2 files changed, 2 insertions(+) diff --git a/parachains/runtimes/starters/seedling/Cargo.toml b/parachains/runtimes/starters/seedling/Cargo.toml index 0d01f36bd38..430ef29a1f2 100644 --- a/parachains/runtimes/starters/seedling/Cargo.toml +++ b/parachains/runtimes/starters/seedling/Cargo.toml @@ -65,4 +65,5 @@ std = [ "cumulus-pallet-solo-to-para/std", "cumulus-primitives-core/std", "parachain-info/std", + "parachains-common/std", ] diff --git a/parachains/runtimes/starters/shell/Cargo.toml b/parachains/runtimes/starters/shell/Cargo.toml index 826e43bdc68..6a351cb5c26 100644 --- a/parachains/runtimes/starters/shell/Cargo.toml +++ b/parachains/runtimes/starters/shell/Cargo.toml @@ -74,6 +74,7 @@ std = [ "cumulus-primitives-core/std", "cumulus-primitives-utility/std", "parachain-info/std", + "parachains-common/std", ] try-runtime = [ "frame-executive/try-runtime", From 05abc1a38a27658732fce8798c5d251d898bae11 Mon Sep 17 00:00:00 2001 From: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> Date: Wed, 24 Aug 2022 15:54:40 +0200 Subject: [PATCH 007/148] [ci] add auto cargo-fmt (#1562) * [WIP][ci] add auto cargo-fmt * [ci] Apply cargo-fmt * use fmt nightly * [ci] Apply cargo-fmt * add comment to cargo-fmt and remove fmt gha Co-authored-by: paritytech-ci --- .github/workflows/quick-check.yml | 40 ------------------------------- .gitlab-ci.yml | 36 ++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 40 deletions(-) delete mode 100644 .github/workflows/quick-check.yml diff --git a/.github/workflows/quick-check.yml b/.github/workflows/quick-check.yml deleted file mode 100644 index 5026aeaf091..00000000000 --- a/.github/workflows/quick-check.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Quick check Formatting - -on: - push: - branches: - - "*" - pull_request: - types: [opened, synchronize, reopened, ready_for_review] - -jobs: - quick_check: - strategy: - matrix: - os: ["ubuntu-latest"] - runs-on: ${{ matrix.os }} - steps: - - name: Install Rust nightly toolchain - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: nightly - override: true - components: clippy, rustfmt - - - name: Cache Dependencies & Build Outputs - uses: actions/cache@v3 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-${{ matrix.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - - - uses: actions/checkout@v3 - - - name: Cargo fmt - uses: actions-rs/cargo@v1 - with: - command: fmt - args: --all -- --check diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 78a189fbce5..c4d0ad28ed4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -69,6 +69,11 @@ variables: - if: $CI_COMMIT_REF_NAME =~ /^release-parachains-v[0-9].*$/ # i.e. release-parachains-v1.0, release-parachains-v2.1rc1, release-parachains-v3000 - if: $CI_COMMIT_REF_NAME =~ /^polkadot-v[0-9]+\.[0-9]+.*$/ # i.e. polkadot-v1.0.99, polkadot-v2.1rc1 +.pr-refs: &pr-refs + # these jobs run always* + rules: + - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs + .publish-refs: &publish-refs rules: - if: $CI_COMMIT_REF_NAME == "master" @@ -107,6 +112,23 @@ variables: tags: - kubernetes-parity-build +#### stage: .pre + +# checks code format and fails if formatting is required +# the code will be formatted automatically and the pipeline will be restarted +cargo-fmt: + stage: .pre + <<: *pr-refs + <<: *kubernetes-env + before_script: + - echo PROJECT_NAME=$CI_PROJECT_NAME > fmt.env + - echo PR_BRANCH_NAME=$(curl -s https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls/${CI_COMMIT_REF_NAME} | jq -r ".head.ref") >> fmt.env + script: + - cargo +nightly fmt --check + artifacts: + reports: + dotenv: fmt.env + #### stage: test test-linux-stable: @@ -601,3 +623,17 @@ cancel-pipeline: project: "parity/infrastructure/ci_cd/pipeline-stopper" # remove branch, when pipeline-stopper for substrate and polakdot is updated to the same branch branch: "as-improve" + +# this job will automatically format code and rerun pipeline if cargo-fmt job fails +auto-fmt: + stage: .post + rules: + - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs + when: on_failure + needs: + - job: cargo-fmt + variables: + PROJECT_NAME: "${CI_PROJECT_NAME}" + PR_BRANCH_NAME: "${PR_BRANCH_NAME}" + trigger: + project: "parity/infrastructure/ci_cd/auto-fmt" From 4e53da1c7226b44d209933179c9cd4a36061806f Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Wed, 24 Aug 2022 22:30:41 +0800 Subject: [PATCH 008/148] Fixes --- primitives/utility/src/lib.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/primitives/utility/src/lib.rs b/primitives/utility/src/lib.rs index 38d08381723..2c19674bc77 100644 --- a/primitives/utility/src/lib.rs +++ b/primitives/utility/src/lib.rs @@ -292,6 +292,9 @@ impl< let ok = FungiblesMutateAdapter::deposit_asset( &revenue, &(X1(AccountId32 { network: None, id: receiver.into() }).into()), + // We aren't able to track the XCM that initiated the fee deposit, so we create a + // fake message hash here + &XcmContext::with_message_hash([0; 32]), ) .is_ok(); From 9ee4759fcf4bdae2d6dbeef6bb4b8cd29a9f3dbf Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Wed, 24 Aug 2022 22:42:49 +0800 Subject: [PATCH 009/148] Fixes --- parachains/common/src/xcm_config.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/parachains/common/src/xcm_config.rs b/parachains/common/src/xcm_config.rs index d56876d60ca..c0a71718bb4 100644 --- a/parachains/common/src/xcm_config.rs +++ b/parachains/common/src/xcm_config.rs @@ -23,7 +23,7 @@ where { fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + message: &mut [Instruction], max_weight: Weight, weight_credit: &mut Weight, ) -> Result<(), ()> { @@ -37,7 +37,7 @@ pub struct DenyReserveTransferToRelayChain; impl ShouldExecute for DenyReserveTransferToRelayChain { fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + message: &mut [Instruction], _max_weight: Weight, _weight_credit: &mut Weight, ) -> Result<(), ()> { From 187c47a6828ca674b46b913e4e60279853af6a2f Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Wed, 24 Aug 2022 22:45:57 +0800 Subject: [PATCH 010/148] Add CallDispatcher --- parachain-template/runtime/src/xcm_config.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/parachain-template/runtime/src/xcm_config.rs b/parachain-template/runtime/src/xcm_config.rs index 48b1e9ce708..007c1d55acf 100644 --- a/parachain-template/runtime/src/xcm_config.rs +++ b/parachain-template/runtime/src/xcm_config.rs @@ -188,6 +188,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; + type CallDispatcher = Call; } /// No local origins on this chain are allowed to dispatch XCM sends/executions. From bd3ce91d85338e694a490131ccf3773fd2362f5b Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Wed, 24 Aug 2022 23:03:03 +0800 Subject: [PATCH 011/148] Fixes --- parachain-template/runtime/src/xcm_config.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/parachain-template/runtime/src/xcm_config.rs b/parachain-template/runtime/src/xcm_config.rs index 007c1d55acf..ccbb6eb99d5 100644 --- a/parachain-template/runtime/src/xcm_config.rs +++ b/parachain-template/runtime/src/xcm_config.rs @@ -104,7 +104,7 @@ where { fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + message: &mut [Instruction], max_weight: Weight, weight_credit: &mut Weight, ) -> Result<(), ()> { @@ -118,11 +118,11 @@ pub struct DenyReserveTransferToRelayChain; impl ShouldExecute for DenyReserveTransferToRelayChain { fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + message: &mut [Instruction], _max_weight: Weight, _weight_credit: &mut Weight, ) -> Result<(), ()> { - if message.0.iter().any(|inst| { + if message.iter().any(|inst| { matches!( inst, InitiateReserveWithdraw { @@ -141,7 +141,7 @@ impl ShouldExecute for DenyReserveTransferToRelayChain { // An unexpected reserve transfer has arrived from the Relay Chain. Generally, `IsReserve` // should not allow this, but we just log it here. if matches!(origin, MultiLocation { parents: 1, interior: Here }) && - message.0.iter().any(|inst| matches!(inst, ReserveAssetDeposited { .. })) + message.iter().any(|inst| matches!(inst, ReserveAssetDeposited { .. })) { log::warn!( target: "xcm::barriers", From ad1cbecabd70495aa2891785aba843cdf8907026 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Wed, 24 Aug 2022 23:15:56 +0800 Subject: [PATCH 012/148] Fixes --- parachains/common/src/xcm_config.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/parachains/common/src/xcm_config.rs b/parachains/common/src/xcm_config.rs index c0a71718bb4..bfcaa9d49e8 100644 --- a/parachains/common/src/xcm_config.rs +++ b/parachains/common/src/xcm_config.rs @@ -41,7 +41,7 @@ impl ShouldExecute for DenyReserveTransferToRelayChain { _max_weight: Weight, _weight_credit: &mut Weight, ) -> Result<(), ()> { - if message.0.iter().any(|inst| { + if message.iter().any(|inst| { matches!( inst, InitiateReserveWithdraw { @@ -60,7 +60,7 @@ impl ShouldExecute for DenyReserveTransferToRelayChain { // An unexpected reserve transfer has arrived from the Relay Chain. Generally, `IsReserve` // should not allow this, but we just log it here. if matches!(origin, MultiLocation { parents: 1, interior: Here }) && - message.0.iter().any(|inst| matches!(inst, ReserveAssetDeposited { .. })) + message.iter().any(|inst| matches!(inst, ReserveAssetDeposited { .. })) { log::warn!( target: "xcm::barrier", From 5a34514967e0d9b6f82d75d8634f9d51f6f7aaaf Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 25 Aug 2022 00:17:33 +0800 Subject: [PATCH 013/148] Fixes --- .../assets/statemine/src/xcm_config.rs | 1 + .../assets/statemint/src/xcm_config.rs | 1 + .../assets/westmint/src/xcm_config.rs | 1 + .../collectives-polkadot/src/xcm_config.rs | 26 ++++++++++---- .../contracts-rococo/src/xcm_config.rs | 1 + .../runtimes/starters/shell/src/xcm_config.rs | 1 + .../runtimes/testing/penpal/src/xcm_config.rs | 35 +++++++++++++------ 7 files changed, 49 insertions(+), 17 deletions(-) diff --git a/parachains/runtimes/assets/statemine/src/xcm_config.rs b/parachains/runtimes/assets/statemine/src/xcm_config.rs index 03aca7ded13..2b5598fce16 100644 --- a/parachains/runtimes/assets/statemine/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemine/src/xcm_config.rs @@ -208,6 +208,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; + type CallDispatcher = Call; } /// Converts a local signed origin into an XCM multilocation. diff --git a/parachains/runtimes/assets/statemint/src/xcm_config.rs b/parachains/runtimes/assets/statemint/src/xcm_config.rs index 5d34e56b43b..ce6fd6c29b2 100644 --- a/parachains/runtimes/assets/statemint/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemint/src/xcm_config.rs @@ -184,6 +184,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; + type CallDispatcher = Call; } /// Converts a local signed origin into an XCM multilocation. diff --git a/parachains/runtimes/assets/westmint/src/xcm_config.rs b/parachains/runtimes/assets/westmint/src/xcm_config.rs index 01d2c33ab79..c94feb50d75 100644 --- a/parachains/runtimes/assets/westmint/src/xcm_config.rs +++ b/parachains/runtimes/assets/westmint/src/xcm_config.rs @@ -204,6 +204,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; + type CallDispatcher = Call; } /// Local origins on this chain are allowed to dispatch XCM sends/executions. diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs index 78f5b224f8d..1d927fd3f57 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs @@ -19,7 +19,7 @@ use super::{ }; use frame_support::{ match_types, parameter_types, - traits::{Everything, Nothing}, + traits::{ConstU32, Everything, Nothing}, weights::Weight, }; use pallet_xcm::XcmPassthrough; @@ -43,8 +43,8 @@ parameter_types! { pub const DotLocation: MultiLocation = MultiLocation::parent(); pub const RelayNetwork: NetworkId = NetworkId::Polkadot; pub RelayChainOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into(); - pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); - pub const Local: MultiLocation = Here.into(); + pub UniversalLocation: InteriorMultiLocation = X1(Parachain(ParachainInfo::parachain_id().into())); + pub const Local: MultiLocation = Here.into_location(); pub CheckingAccount: AccountId = PolkadotXcm::check_account(); } @@ -102,6 +102,7 @@ parameter_types! { // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. pub UnitWeightCost: Weight = 1_000_000_000; pub const MaxInstructions: u32 = 100; + pub const MaxAssetsIntoHolding: u32 = 64; } match_types! { @@ -141,7 +142,7 @@ impl xcm_executor::Config for XcmConfig { // where allowed (e.g. with the Relay Chain). type IsReserve = (); type IsTeleporter = NativeAsset; // <- should be enough to allow teleportation of DOT - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type Barrier = Barrier; type Weigher = FixedWeightBounds; type Trader = @@ -150,6 +151,14 @@ impl xcm_executor::Config for XcmConfig { type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; type SubscriptionService = PolkadotXcm; + type PalletInstancesInfo = (); + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type AssetLocker = (); + type AssetExchanger = (); + type FeeManager = (); + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = Call; } /// Converts a local signed origin into an XCM multilocation. @@ -160,7 +169,7 @@ pub type LocalOriginToLocation = SignedToAccountId32, + cumulus_primitives_utility::ParentAsUmp, // ..and XCMP to communicate with the sibling chains. XcmpQueue, ); @@ -178,11 +187,16 @@ impl pallet_xcm::Config for Runtime { type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Nothing; // This parachain is not meant as a reserve location. type Weigher = FixedWeightBounds; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type Origin = Origin; type Call = Call; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; + type Currency = Balances; + type CurrencyMatcher = (); + type TrustedLockers = (); + type SovereignAccountOf = LocationToAccountId; + type MaxLockers = ConstU32<8>; } impl cumulus_pallet_xcm::Config for Runtime { diff --git a/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs b/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs index 8252800ac60..8b30214daf8 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs @@ -157,6 +157,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; + type CallDispatcher = Call; } /// Converts a local signed origin into an XCM multilocation. diff --git a/parachains/runtimes/starters/shell/src/xcm_config.rs b/parachains/runtimes/starters/shell/src/xcm_config.rs index 370d6f9d8bb..af846f7181f 100644 --- a/parachains/runtimes/starters/shell/src/xcm_config.rs +++ b/parachains/runtimes/starters/shell/src/xcm_config.rs @@ -74,6 +74,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; + type CallDispatcher = Call; } impl cumulus_pallet_xcm::Config for Runtime { diff --git a/parachains/runtimes/testing/penpal/src/xcm_config.rs b/parachains/runtimes/testing/penpal/src/xcm_config.rs index 3fb2192cd7a..36ce4954838 100644 --- a/parachains/runtimes/testing/penpal/src/xcm_config.rs +++ b/parachains/runtimes/testing/penpal/src/xcm_config.rs @@ -30,7 +30,7 @@ use frame_support::{ log, match_types, parameter_types, traits::{ fungibles::{self, Balanced, CreditOf}, - Contains, Everything, Get, Nothing, + ConstU32, Contains, Everything, Get, Nothing, }, weights::Weight, }; @@ -43,11 +43,10 @@ use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, AsPrefixedGeneralIndex, - ConvertedConcreteAssetId, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, - FungiblesAdapter, IsConcrete, LocationInverter, NativeAsset, ParentIsPreset, - RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, - SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, - UsingComponents, + ConvertedAssetId, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, FungiblesAdapter, + IsConcrete, LocationInverter, NativeAsset, ParentIsPreset, RelayChainAsNative, + SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, + SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, }; use xcm_executor::{ traits::{FilterAssetLocation, JustTry, ShouldExecute}, @@ -58,7 +57,7 @@ parameter_types! { pub const RelayLocation: MultiLocation = MultiLocation::parent(); pub const RelayNetwork: NetworkId = NetworkId::Any; pub RelayChainOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into(); - pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); + pub UniversalLocation: InteriorMultiLocation = X1(Parachain(ParachainInfo::parachain_id().into())); } /// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used @@ -92,7 +91,7 @@ pub type FungiblesTransactor = FungiblesAdapter< // Use this fungibles implementation: Assets, // Use this currency when it is a fungible asset matching the given location or name: - ConvertedConcreteAssetId< + ConvertedAssetId< AssetIdPalletAssets, Balance, AsPrefixedGeneralIndex, @@ -137,6 +136,7 @@ parameter_types! { // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. pub UnitWeightCost: Weight = 1_000_000_000; pub const MaxInstructions: u32 = 100; + pub const MaxAssetsIntoHolding: u32 = 64; } match_types! { @@ -328,7 +328,7 @@ impl xcm_executor::Config for XcmConfig { type OriginConverter = XcmOriginToTransactDispatchOrigin; type IsReserve = MultiNativeAsset; // TODO: maybe needed to be replaced by Reserves type IsTeleporter = NativeAsset; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type Barrier = Barrier; type Weigher = FixedWeightBounds; type Trader = @@ -337,6 +337,14 @@ impl xcm_executor::Config for XcmConfig { type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; type SubscriptionService = PolkadotXcm; + type PalletInstancesInfo = (); + type MaxAssetsIntoHolding = MaxAssetsIntoHolding; + type AssetLocker = (); + type AssetExchanger = (); + type FeeManager = (); + type MessageExporter = (); + type UniversalAliases = Nothing; + type CallDispatcher = Call; } /// No local origins on this chain are allowed to dispatch XCM sends/executions. @@ -346,7 +354,7 @@ pub type LocalOriginToLocation = SignedToAccountId32, + cumulus_primitives_utility::ParentAsUmp, // ..and XCMP to communicate with the sibling chains. XcmpQueue, ); @@ -363,13 +371,18 @@ impl pallet_xcm::Config for Runtime { type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; type Weigher = FixedWeightBounds; - type LocationInverter = LocationInverter; + type UniversalLocation = UniversalLocation; type Origin = Origin; type Call = Call; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; // ^ Override for AdvertisedXcmVersion default type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; + type Currency = Balances; + type CurrencyMatcher = (); + type TrustedLockers = (); + type SovereignAccountOf = LocationToAccountId; + type MaxLockers = ConstU32<8>; } impl cumulus_pallet_xcm::Config for Runtime { From 67c99fdc4bf49df8e9e24f932eb239bdcbb26dc0 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 25 Aug 2022 00:36:04 +0800 Subject: [PATCH 014/148] Fixes --- parachains/runtimes/testing/rococo-parachain/src/lib.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/parachains/runtimes/testing/rococo-parachain/src/lib.rs index 4b00ff86c41..94948ddc5cb 100644 --- a/parachains/runtimes/testing/rococo-parachain/src/lib.rs +++ b/parachains/runtimes/testing/rococo-parachain/src/lib.rs @@ -79,7 +79,7 @@ use xcm_builder::{ SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, }; -use xcm_executor::{Config, XcmExecutor}; +use xcm_executor::XcmExecutor; pub type SessionHandlers = (); @@ -399,7 +399,7 @@ parameter_types! { pub type Reserves = (NativeAsset, AssetsFrom); pub struct XcmConfig; -impl Config for XcmConfig { +impl xcm_executor::Config for XcmConfig { type Call = Call; type XcmSender = XcmRouter; // How to withdraw and deposit an asset. @@ -422,6 +422,7 @@ impl Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; + type CallDispatcher = Call; } /// Local origins on this chain are allowed to dispatch XCM sends/executions. From 1fc2cb4bd2dcf7adc0ad8d973742a143d6580805 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 25 Aug 2022 00:49:38 +0800 Subject: [PATCH 015/148] Fixes --- .../collectives/collectives-polkadot/src/xcm_config.rs | 4 ++-- parachains/runtimes/testing/penpal/src/xcm_config.rs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs index 1d927fd3f57..fd6a29476fd 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs @@ -32,8 +32,8 @@ use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, CurrencyAdapter, EnsureXcmOrigin, - FixedWeightBounds, IsConcrete, LocationInverter, NativeAsset, ParentAsSuperuser, - ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, + FixedWeightBounds, IsConcrete, NativeAsset, ParentAsSuperuser, ParentIsPreset, + RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, }; diff --git a/parachains/runtimes/testing/penpal/src/xcm_config.rs b/parachains/runtimes/testing/penpal/src/xcm_config.rs index 36ce4954838..97b53a9b72f 100644 --- a/parachains/runtimes/testing/penpal/src/xcm_config.rs +++ b/parachains/runtimes/testing/penpal/src/xcm_config.rs @@ -44,9 +44,9 @@ use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, AsPrefixedGeneralIndex, ConvertedAssetId, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, FungiblesAdapter, - IsConcrete, LocationInverter, NativeAsset, ParentIsPreset, RelayChainAsNative, - SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, - SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, + IsConcrete, NativeAsset, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, + SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, + SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, }; use xcm_executor::{ traits::{FilterAssetLocation, JustTry, ShouldExecute}, From 0f3f8b8623150ebf6b9410d6b05363dc2277acd8 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 25 Aug 2022 01:01:51 +0800 Subject: [PATCH 016/148] Fixes --- .../runtimes/collectives/collectives-polkadot/src/impls.rs | 2 +- parachains/runtimes/collectives/collectives-polkadot/src/lib.rs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs b/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs index 4f821802172..da901ae0c33 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs @@ -65,7 +65,7 @@ where ::Origin::signed(temp_account.into()), Box::new(Parent.into()), Box::new( - Junction::AccountId32 { network: NetworkId::Any, id: treasury_acc.into() } + Junction::AccountId32 { network: None, id: treasury_acc.into() } .into() .into(), ), diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs index cd947446e26..07a5239872d 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs @@ -367,6 +367,7 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { type ControllerOrigin = RootOrExecutiveSimpleMajority; type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; type WeightInfo = weights::cumulus_pallet_xcmp_queue::WeightInfo; + type PriceForSiblingDelivery = (); } impl cumulus_pallet_dmp_queue::Config for Runtime { From 57e44204d591c227dccdd8366d08cf12e680165e Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 25 Aug 2022 01:16:01 +0800 Subject: [PATCH 017/148] Fixes --- .../runtimes/collectives/collectives-polkadot/src/impls.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs b/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs index da901ae0c33..34656f46e1a 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs @@ -21,7 +21,7 @@ use frame_support::{ }; use pallet_alliance::{ProposalIndex, ProposalProvider}; use sp_std::{boxed::Box, marker::PhantomData}; -use xcm::latest::{Fungibility, Junction, NetworkId, Parent}; +use xcm::latest::{Fungibility, Junction, Parent}; type AccountIdOf = ::AccountId; @@ -66,7 +66,7 @@ where Box::new(Parent.into()), Box::new( Junction::AccountId32 { network: None, id: treasury_acc.into() } - .into() + .into_location() .into(), ), Box::new((Parent, imbalance).into()), From d1230e3d77f8696a1928792bf7412380e5a982a8 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 25 Aug 2022 01:39:43 +0800 Subject: [PATCH 018/148] Fixes --- parachains/runtimes/assets/westmint/src/xcm_config.rs | 2 +- parachains/runtimes/testing/penpal/src/xcm_config.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/parachains/runtimes/assets/westmint/src/xcm_config.rs b/parachains/runtimes/assets/westmint/src/xcm_config.rs index c94feb50d75..3d5f6f9b804 100644 --- a/parachains/runtimes/assets/westmint/src/xcm_config.rs +++ b/parachains/runtimes/assets/westmint/src/xcm_config.rs @@ -179,7 +179,7 @@ impl xcm_executor::Config for XcmConfig { WeightToFee, pallet_assets::BalanceToAssetBalance, >, - ConvertedConcreteAssetId< + ConvertedConcreteId< AssetId, Balance, AsPrefixedGeneralIndex, diff --git a/parachains/runtimes/testing/penpal/src/xcm_config.rs b/parachains/runtimes/testing/penpal/src/xcm_config.rs index 97b53a9b72f..314faf38a64 100644 --- a/parachains/runtimes/testing/penpal/src/xcm_config.rs +++ b/parachains/runtimes/testing/penpal/src/xcm_config.rs @@ -43,7 +43,7 @@ use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, AsPrefixedGeneralIndex, - ConvertedAssetId, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, FungiblesAdapter, + ConvertedConcreteId, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, FungiblesAdapter, IsConcrete, NativeAsset, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, @@ -91,7 +91,7 @@ pub type FungiblesTransactor = FungiblesAdapter< // Use this fungibles implementation: Assets, // Use this currency when it is a fungible asset matching the given location or name: - ConvertedAssetId< + ConvertedConcreteId< AssetIdPalletAssets, Balance, AsPrefixedGeneralIndex, From 3ba852b3bfb2f45c6b3d63f5215582b66f4412d7 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 25 Aug 2022 02:11:44 +0800 Subject: [PATCH 019/148] Fixes --- parachains/runtimes/assets/statemine/src/xcm_config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parachains/runtimes/assets/statemine/src/xcm_config.rs b/parachains/runtimes/assets/statemine/src/xcm_config.rs index 2b5598fce16..f79eca94b3a 100644 --- a/parachains/runtimes/assets/statemine/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemine/src/xcm_config.rs @@ -183,7 +183,7 @@ impl xcm_executor::Config for XcmConfig { WeightToFee, pallet_assets::BalanceToAssetBalance, >, - ConvertedConcreteAssetId< + ConvertedConcreteId< AssetId, Balance, AsPrefixedGeneralIndex, From 31accbd975a6f858e633bec03cd441b7042cf8ed Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 25 Aug 2022 16:38:08 +0800 Subject: [PATCH 020/148] Fixes --- .../runtimes/testing/penpal/src/xcm_config.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/parachains/runtimes/testing/penpal/src/xcm_config.rs b/parachains/runtimes/testing/penpal/src/xcm_config.rs index 314faf38a64..c2ea08a8d3d 100644 --- a/parachains/runtimes/testing/penpal/src/xcm_config.rs +++ b/parachains/runtimes/testing/penpal/src/xcm_config.rs @@ -30,7 +30,7 @@ use frame_support::{ log, match_types, parameter_types, traits::{ fungibles::{self, Balanced, CreditOf}, - ConstU32, Contains, Everything, Get, Nothing, + ConstU32, Contains, ContainsPair, Everything, Get, Nothing, }, weights::Weight, }; @@ -49,7 +49,7 @@ use xcm_builder::{ SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, }; use xcm_executor::{ - traits::{FilterAssetLocation, JustTry, ShouldExecute}, + traits::{JustTry, ShouldExecute}, XcmExecutor, }; @@ -164,7 +164,7 @@ where { fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + message: &mut [Instruction], max_weight: Weight, weight_credit: &mut Weight, ) -> Result<(), ()> { @@ -178,11 +178,11 @@ pub struct DenyReserveTransferToRelayChain; impl ShouldExecute for DenyReserveTransferToRelayChain { fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + message: &mut [Instruction], _max_weight: Weight, _weight_credit: &mut Weight, ) -> Result<(), ()> { - if message.0.iter().any(|inst| { + if message.iter().any(|inst| { matches!( inst, InitiateReserveWithdraw { @@ -200,7 +200,7 @@ impl ShouldExecute for DenyReserveTransferToRelayChain { // allow reserve transfers to arrive from relay chain if matches!(origin, MultiLocation { parents: 1, interior: Here }) && - message.0.iter().any(|inst| matches!(inst, ReserveAssetDeposited { .. })) + message.iter().any(|inst| matches!(inst, ReserveAssetDeposited { .. })) { log::warn!( target: "xcm::barriers", @@ -233,8 +233,8 @@ pub type AccountIdOf = ::AccountId; /// Asset filter that allows all assets from a certain location. pub struct AssetsFrom(PhantomData); -impl> FilterAssetLocation for AssetsFrom { - fn filter_asset_location(asset: &MultiAsset, origin: &MultiLocation) -> bool { +impl> ContainsPair for AssetsFrom { + fn contains(asset: &MultiAsset, origin: &MultiLocation) -> bool { let loc = T::get(); &loc == origin && matches!(asset, MultiAsset { id: AssetId::Concrete(asset_loc), fun: Fungible(_a) } @@ -297,7 +297,7 @@ impl Reserve for MultiAsset { /// A `FilterAssetLocation` implementation. Filters multi native assets whose /// reserve is same with `origin`. pub struct MultiNativeAsset; -impl FilterAssetLocation for MultiNativeAsset { +impl ContainsPair for MultiNativeAsset { fn filter_asset_location(asset: &MultiAsset, origin: &MultiLocation) -> bool { if let Some(ref reserve) = asset.reserve() { if reserve == origin { From 004f0449f46664619095e8b5303dfeea95d72235 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 25 Aug 2022 16:57:51 +0800 Subject: [PATCH 021/148] Fixes --- parachains/runtimes/testing/penpal/src/xcm_config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parachains/runtimes/testing/penpal/src/xcm_config.rs b/parachains/runtimes/testing/penpal/src/xcm_config.rs index c2ea08a8d3d..c2ea98591b8 100644 --- a/parachains/runtimes/testing/penpal/src/xcm_config.rs +++ b/parachains/runtimes/testing/penpal/src/xcm_config.rs @@ -298,7 +298,7 @@ impl Reserve for MultiAsset { /// reserve is same with `origin`. pub struct MultiNativeAsset; impl ContainsPair for MultiNativeAsset { - fn filter_asset_location(asset: &MultiAsset, origin: &MultiLocation) -> bool { + fn contains(asset: &MultiAsset, origin: &MultiLocation) -> bool { if let Some(ref reserve) = asset.reserve() { if reserve == origin { return true From bee34ba3f96139a07d2147946ed241351a80017c Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 25 Aug 2022 18:13:24 +0800 Subject: [PATCH 022/148] Fixes --- parachains/runtimes/testing/penpal/src/xcm_config.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/parachains/runtimes/testing/penpal/src/xcm_config.rs b/parachains/runtimes/testing/penpal/src/xcm_config.rs index c2ea98591b8..25d72572012 100644 --- a/parachains/runtimes/testing/penpal/src/xcm_config.rs +++ b/parachains/runtimes/testing/penpal/src/xcm_config.rs @@ -55,7 +55,7 @@ use xcm_executor::{ parameter_types! { pub const RelayLocation: MultiLocation = MultiLocation::parent(); - pub const RelayNetwork: NetworkId = NetworkId::Any; + pub const RelayNetwork: Option = None; pub RelayChainOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into(); pub UniversalLocation: InteriorMultiLocation = X1(Parachain(ParachainInfo::parachain_id().into())); } @@ -388,4 +388,5 @@ impl pallet_xcm::Config for Runtime { impl cumulus_pallet_xcm::Config for Runtime { type Event = Event; type XcmExecutor = XcmExecutor; + type PriceForSiblingDelivery = (); } From 5c54d38b428f02e9137924bdf32efd155810dfec Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 25 Aug 2022 18:50:29 +0800 Subject: [PATCH 023/148] Fixes --- parachains/runtimes/testing/penpal/src/lib.rs | 1 + parachains/runtimes/testing/penpal/src/xcm_config.rs | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/parachains/runtimes/testing/penpal/src/lib.rs b/parachains/runtimes/testing/penpal/src/lib.rs index f0f2cb2a767..4842cc6a75c 100644 --- a/parachains/runtimes/testing/penpal/src/lib.rs +++ b/parachains/runtimes/testing/penpal/src/lib.rs @@ -435,6 +435,7 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { type ControllerOrigin = EnsureRoot; type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; type WeightInfo = (); + type PriceForSiblingDelivery = (); } impl cumulus_pallet_dmp_queue::Config for Runtime { diff --git a/parachains/runtimes/testing/penpal/src/xcm_config.rs b/parachains/runtimes/testing/penpal/src/xcm_config.rs index 25d72572012..31b5cc7848f 100644 --- a/parachains/runtimes/testing/penpal/src/xcm_config.rs +++ b/parachains/runtimes/testing/penpal/src/xcm_config.rs @@ -388,5 +388,4 @@ impl pallet_xcm::Config for Runtime { impl cumulus_pallet_xcm::Config for Runtime { type Event = Event; type XcmExecutor = XcmExecutor; - type PriceForSiblingDelivery = (); } From 516669814078a308e8de659979aa0f97e8d67eff Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 25 Aug 2022 21:18:07 +0800 Subject: [PATCH 024/148] Fixes --- pallets/xcmp-queue/src/mock.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/pallets/xcmp-queue/src/mock.rs b/pallets/xcmp-queue/src/mock.rs index 62d56bfbfb8..bd30f52fb27 100644 --- a/pallets/xcmp-queue/src/mock.rs +++ b/pallets/xcmp-queue/src/mock.rs @@ -162,6 +162,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; + type CallDispatcher = Call; } pub type XcmRouter = ( From 77953dc75c7fd2e70576611130fccb5441305b40 Mon Sep 17 00:00:00 2001 From: Muharem Ismailov Date: Mon, 29 Aug 2022 23:39:27 +0200 Subject: [PATCH 025/148] Collectives runtime: alliance pallet upgrade introducing new retirement notice feature (#1573) * support retirement notice feature * [ci] Apply cargo-fmt * use primitive const * update lockfile for {"substrate", "polkadot"} Co-authored-by: paritytech-ci Co-authored-by: parity-processbot <> --- Cargo.lock | 708 +++++++++--------- .../collectives-polkadot/src/lib.rs | 14 +- 2 files changed, 373 insertions(+), 349 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dbb02543cdb..b63f24e3b5e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -451,7 +451,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "beefy-primitives", @@ -487,7 +487,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -507,7 +507,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "beefy-primitives", "sp-api", @@ -516,7 +516,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "parity-scale-codec", "scale-info", @@ -841,6 +841,15 @@ dependencies = [ "nom", ] +[[package]] +name = "cfg-expr" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" +dependencies = [ + "smallvec", +] + [[package]] name = "cfg-if" version = "0.1.10" @@ -1051,7 +1060,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-runtime-common", "polkadot-runtime-constants", "scale-info", @@ -1150,7 +1159,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-runtime-common", "scale-info", "serde", @@ -1653,7 +1662,7 @@ dependencies = [ "parking_lot 0.12.1", "polkadot-client", "polkadot-node-primitives", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-primitives", "polkadot-service", "polkadot-test-client", @@ -1784,7 +1793,7 @@ dependencies = [ "log", "pallet-balances", "parity-scale-codec", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "sc-client-api", "scale-info", "serde", @@ -1903,7 +1912,7 @@ dependencies = [ "frame-support", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-primitives", "sp-api", "sp-runtime", @@ -1959,7 +1968,7 @@ dependencies = [ "log", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-primitives", "sp-runtime", "sp-std", @@ -2062,7 +2071,7 @@ dependencies = [ "pallet-balances", "pallet-transaction-payment", "parity-scale-codec", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-primitives", "sc-block-builder", "sc-consensus", @@ -2777,7 +2786,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "parity-scale-codec", ] @@ -2795,7 +2804,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support", "frame-system", @@ -2818,7 +2827,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "Inflector", "chrono", @@ -2869,7 +2878,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2880,7 +2889,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2896,7 +2905,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support", "frame-system", @@ -2924,7 +2933,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "bitflags", "frame-metadata", @@ -2955,10 +2964,12 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "Inflector", + "cfg-expr", "frame-support-procedural-tools", + "itertools", "proc-macro2", "quote", "syn", @@ -2967,7 +2978,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2979,7 +2990,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "proc-macro2", "quote", @@ -2989,7 +3000,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support", "log", @@ -3006,7 +3017,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -3021,7 +3032,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "parity-scale-codec", "sp-api", @@ -3030,7 +3041,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support", "sp-api", @@ -3631,9 +3642,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c6392766afd7964e2531940894cffe4bd8d7d17dbc3c1c4857040fd4b33bdb3" +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ "autocfg", "hashbrown 0.12.3", @@ -3903,8 +3914,8 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "beefy-primitives", "bitvec", @@ -3996,8 +4007,8 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "frame-support", "polkadot-primitives", @@ -5356,7 +5367,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "async-trait", "dyn-clonable", @@ -5372,7 +5383,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "expander 0.0.6", "itertools", @@ -5410,7 +5421,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -5431,7 +5442,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support", "frame-system", @@ -5448,7 +5459,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -5462,7 +5473,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support", "frame-system", @@ -5478,7 +5489,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support", "frame-system", @@ -5494,7 +5505,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support", "frame-system", @@ -5509,7 +5520,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -5533,7 +5544,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5553,7 +5564,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -5568,7 +5579,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "beefy-primitives", "frame-support", @@ -5584,7 +5595,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -5607,7 +5618,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -5625,7 +5636,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -5670,7 +5681,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -5687,7 +5698,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "bitflags", "frame-benchmarking", @@ -5715,7 +5726,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "bitflags", "parity-scale-codec", @@ -5730,7 +5741,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "proc-macro2", "quote", @@ -5740,7 +5751,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5757,7 +5768,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5770,7 +5781,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -5786,7 +5797,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5809,7 +5820,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5822,7 +5833,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -5840,7 +5851,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -5855,7 +5866,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -5878,7 +5889,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5894,7 +5905,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -5914,7 +5925,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -5931,7 +5942,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -5948,7 +5959,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5966,7 +5977,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5981,7 +5992,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -5996,7 +6007,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support", "frame-system", @@ -6013,7 +6024,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6032,7 +6043,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "parity-scale-codec", "sp-api", @@ -6042,7 +6053,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support", "frame-system", @@ -6059,7 +6070,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6082,7 +6093,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -6098,7 +6109,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -6113,7 +6124,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support", "frame-system", @@ -6127,7 +6138,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -6142,7 +6153,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -6158,7 +6169,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support", "frame-system", @@ -6179,7 +6190,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -6195,7 +6206,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support", "frame-system", @@ -6209,7 +6220,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6232,7 +6243,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6243,7 +6254,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "log", "sp-arithmetic", @@ -6252,7 +6263,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support", "frame-system", @@ -6281,7 +6292,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -6299,7 +6310,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -6318,7 +6329,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-support", "frame-system", @@ -6334,7 +6345,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6349,7 +6360,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6360,7 +6371,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -6377,7 +6388,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -6392,7 +6403,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -6408,7 +6419,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-benchmarking", "frame-support", @@ -6422,8 +6433,8 @@ dependencies = [ [[package]] name = "pallet-xcm" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "frame-support", "frame-system", @@ -6440,8 +6451,8 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "frame-benchmarking", "frame-support", @@ -6493,7 +6504,7 @@ dependencies = [ "parachain-template-runtime", "parity-scale-codec", "polkadot-cli", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-primitives", "polkadot-service", "sc-basic-authorship", @@ -6569,7 +6580,7 @@ dependencies = [ "pallet-xcm", "parachain-info", "parity-scale-codec", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-runtime-common", "scale-info", "serde", @@ -6835,7 +6846,7 @@ dependencies = [ "parachain-info", "parachains-common", "parity-scale-codec", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-primitives", "polkadot-runtime-common", "scale-info", @@ -6998,8 +7009,8 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7013,8 +7024,8 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7027,8 +7038,8 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "derive_more", "fatality", @@ -7050,8 +7061,8 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "fatality", "futures", @@ -7071,8 +7082,8 @@ dependencies = [ [[package]] name = "polkadot-cli" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "clap 3.2.17", "frame-benchmarking-cli", @@ -7097,8 +7108,8 @@ dependencies = [ [[package]] name = "polkadot-client" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7138,8 +7149,8 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "always-assert", "fatality", @@ -7159,8 +7170,8 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7172,8 +7183,8 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "derive_more", "fatality", @@ -7195,8 +7206,8 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7209,8 +7220,8 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "futures", "futures-timer", @@ -7229,8 +7240,8 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "always-assert", "async-trait", @@ -7253,8 +7264,8 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "futures", "parity-scale-codec", @@ -7271,8 +7282,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "bitvec", "derive_more", @@ -7300,8 +7311,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "bitvec", "futures", @@ -7320,8 +7331,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "bitvec", "fatality", @@ -7339,8 +7350,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7354,8 +7365,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "async-trait", "futures", @@ -7364,7 +7375,7 @@ dependencies = [ "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-util", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-primitives", "sp-maybe-compressed-blob", "tracing-gum", @@ -7372,8 +7383,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7387,8 +7398,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "futures", "futures-timer", @@ -7404,8 +7415,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "fatality", "futures", @@ -7423,8 +7434,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "async-trait", "futures", @@ -7440,8 +7451,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "bitvec", "fatality", @@ -7458,8 +7469,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "always-assert", "assert_matches", @@ -7471,7 +7482,7 @@ dependencies = [ "pin-project", "polkadot-core-primitives", "polkadot-node-subsystem-util", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "rand 0.8.5", "rayon", "sc-executor", @@ -7490,8 +7501,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "futures", "polkadot-node-primitives", @@ -7506,8 +7517,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "futures", "memory-lru", @@ -7522,8 +7533,8 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "async-std", "lazy_static", @@ -7540,8 +7551,8 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "bs58", "futures", @@ -7559,8 +7570,8 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "async-trait", "derive_more", @@ -7581,13 +7592,13 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "bounded-vec", "futures", "parity-scale-codec", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-primitives", "schnorrkel", "serde", @@ -7603,8 +7614,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7613,8 +7624,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "async-trait", "futures", @@ -7631,8 +7642,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "async-trait", "derive_more", @@ -7654,8 +7665,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "async-trait", "derive_more", @@ -7687,8 +7698,8 @@ dependencies = [ [[package]] name = "polkadot-overseer" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "async-trait", "futures", @@ -7710,8 +7721,8 @@ dependencies = [ [[package]] name = "polkadot-parachain" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "derive_more", "frame-support", @@ -7758,7 +7769,7 @@ dependencies = [ "parity-scale-codec", "penpal-runtime", "polkadot-cli", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-primitives", "polkadot-service", "rococo-parachain-runtime", @@ -7810,8 +7821,8 @@ dependencies = [ [[package]] name = "polkadot-performance-test" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7825,8 +7836,8 @@ dependencies = [ [[package]] name = "polkadot-primitives" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "bitvec", "frame-system", @@ -7834,7 +7845,7 @@ dependencies = [ "parity-scale-codec", "parity-util-mem", "polkadot-core-primitives", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "scale-info", "serde", "sp-api", @@ -7855,8 +7866,8 @@ dependencies = [ [[package]] name = "polkadot-rpc" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7887,8 +7898,8 @@ dependencies = [ [[package]] name = "polkadot-runtime" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "beefy-primitives", "bitvec", @@ -7922,6 +7933,7 @@ dependencies = [ "pallet-multisig", "pallet-nomination-pools", "pallet-nomination-pools-benchmarking", + "pallet-nomination-pools-runtime-api", "pallet-offences", "pallet-offences-benchmarking", "pallet-preimage", @@ -7974,8 +7986,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "beefy-primitives", "bitvec", @@ -8021,8 +8033,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "frame-support", "polkadot-primitives", @@ -8033,8 +8045,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "bs58", "parity-scale-codec", @@ -8045,8 +8057,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "bitflags", "bitvec", @@ -8088,8 +8100,8 @@ dependencies = [ [[package]] name = "polkadot-service" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "async-trait", "beefy-gadget", @@ -8134,7 +8146,7 @@ dependencies = [ "polkadot-node-subsystem-types", "polkadot-node-subsystem-util", "polkadot-overseer", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-primitives", "polkadot-rpc", "polkadot-runtime", @@ -8192,8 +8204,8 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8213,8 +8225,8 @@ dependencies = [ [[package]] name = "polkadot-statement-table" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8223,8 +8235,8 @@ dependencies = [ [[package]] name = "polkadot-test-client" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8248,8 +8260,8 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "beefy-primitives", "bitvec", @@ -8276,7 +8288,7 @@ dependencies = [ "pallet-vesting", "pallet-xcm", "parity-scale-codec", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", @@ -8309,8 +8321,8 @@ dependencies = [ [[package]] name = "polkadot-test-service" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "frame-benchmarking", "frame-system", @@ -8322,7 +8334,7 @@ dependencies = [ "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-overseer", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-primitives", "polkadot-rpc", "polkadot-runtime-common", @@ -8455,7 +8467,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8899,7 +8911,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -8997,7 +9009,7 @@ dependencies = [ "parachain-info", "parachains-common", "parity-scale-codec", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "scale-info", "serde", "sp-api", @@ -9020,8 +9032,8 @@ dependencies = [ [[package]] name = "rococo-runtime" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9057,7 +9069,7 @@ dependencies = [ "pallet-utility", "pallet-xcm", "parity-scale-codec", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", @@ -9089,8 +9101,8 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "frame-support", "polkadot-primitives", @@ -9274,7 +9286,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "log", "sp-core", @@ -9285,7 +9297,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "futures", "futures-timer", @@ -9297,7 +9309,6 @@ dependencies = [ "prost-build", "rand 0.7.3", "sc-client-api", - "sc-network", "sc-network-common", "sp-api", "sp-authority-discovery", @@ -9312,7 +9323,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "futures", "futures-timer", @@ -9335,7 +9346,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9351,13 +9362,13 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", "parity-scale-codec", "sc-chain-spec-derive", - "sc-network", + "sc-network-common", "sc-telemetry", "serde", "serde_json", @@ -9368,7 +9379,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9379,7 +9390,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "chrono", "clap 3.2.17", @@ -9418,7 +9429,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "fnv", "futures", @@ -9446,7 +9457,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "hash-db", "kvdb", @@ -9471,7 +9482,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "futures", @@ -9495,7 +9506,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "futures", @@ -9524,7 +9535,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "fork-tree", @@ -9566,7 +9577,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "futures", "jsonrpsee", @@ -9588,7 +9599,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9601,7 +9612,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "futures", @@ -9626,7 +9637,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9653,7 +9664,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "environmental", "parity-scale-codec", @@ -9669,7 +9680,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "log", "parity-scale-codec", @@ -9684,7 +9695,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9692,6 +9703,7 @@ dependencies = [ "once_cell", "parity-scale-codec", "parity-wasm 0.42.2", + "rustix 0.33.7", "rustix 0.35.7", "sc-allocator", "sc-executor-common", @@ -9704,7 +9716,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "ahash", "async-trait", @@ -9745,7 +9757,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "finality-grandpa", "futures", @@ -9766,7 +9778,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "ansi_term", "futures", @@ -9783,7 +9795,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "hex", @@ -9798,7 +9810,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "asynchronous-codec", @@ -9847,7 +9859,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "bitflags", @@ -9858,6 +9870,7 @@ dependencies = [ "prost-build", "sc-consensus", "sc-peerset", + "serde", "smallvec", "sp-consensus", "sp-finality-grandpa", @@ -9868,7 +9881,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "ahash", "futures", @@ -9876,8 +9889,8 @@ dependencies = [ "libp2p", "log", "lru 0.7.7", - "sc-network", "sc-network-common", + "sc-peerset", "sp-runtime", "substrate-prometheus-endpoint", "tracing", @@ -9886,7 +9899,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "futures", "hex", @@ -9907,7 +9920,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "fork-tree", "futures", @@ -9935,7 +9948,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "bytes", "fnv", @@ -9944,14 +9957,15 @@ dependencies = [ "hex", "hyper", "hyper-rustls", + "libp2p", "num_cpus", "once_cell", "parity-scale-codec", "parking_lot 0.12.1", "rand 0.7.3", "sc-client-api", - "sc-network", "sc-network-common", + "sc-peerset", "sc-utils", "sp-api", "sp-core", @@ -9964,7 +9978,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "futures", "libp2p", @@ -9977,7 +9991,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -9986,7 +10000,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "futures", "hash-db", @@ -10016,7 +10030,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "futures", "jsonrpsee", @@ -10039,7 +10053,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "futures", "jsonrpsee", @@ -10052,7 +10066,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "directories", @@ -10119,7 +10133,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "log", "parity-scale-codec", @@ -10133,7 +10147,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10152,7 +10166,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "futures", "libc", @@ -10171,7 +10185,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "chrono", "futures", @@ -10189,7 +10203,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "ansi_term", "atty", @@ -10220,7 +10234,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10231,7 +10245,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "futures", "futures-timer", @@ -10257,7 +10271,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "futures", "log", @@ -10270,7 +10284,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "futures", "futures-timer", @@ -10509,9 +10523,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.81" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" +checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" dependencies = [ "itoa 1.0.1", "ryu", @@ -10716,8 +10730,8 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "enumn", "parity-scale-codec", @@ -10793,7 +10807,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "hash-db", "log", @@ -10811,7 +10825,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "blake2", "proc-macro-crate", @@ -10823,7 +10837,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "parity-scale-codec", "scale-info", @@ -10836,7 +10850,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "integer-sqrt", "num-traits", @@ -10851,7 +10865,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "parity-scale-codec", "scale-info", @@ -10864,7 +10878,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "parity-scale-codec", @@ -10876,7 +10890,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "parity-scale-codec", "sp-api", @@ -10888,7 +10902,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "futures", "log", @@ -10906,7 +10920,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "futures", @@ -10925,7 +10939,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "parity-scale-codec", @@ -10943,7 +10957,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "merlin", @@ -10966,7 +10980,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "parity-scale-codec", "scale-info", @@ -10980,7 +10994,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "parity-scale-codec", "scale-info", @@ -10993,7 +11007,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "base58", "bitflags", @@ -11039,7 +11053,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "blake2", "byteorder", @@ -11053,7 +11067,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "proc-macro2", "quote", @@ -11064,7 +11078,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11073,7 +11087,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "proc-macro2", "quote", @@ -11083,7 +11097,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "environmental", "parity-scale-codec", @@ -11094,7 +11108,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "finality-grandpa", "log", @@ -11112,7 +11126,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11126,7 +11140,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "bytes", "futures", @@ -11152,7 +11166,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "lazy_static", "sp-core", @@ -11163,7 +11177,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "futures", @@ -11180,7 +11194,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "thiserror", "zstd", @@ -11189,7 +11203,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "log", "parity-scale-codec", @@ -11204,7 +11218,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "parity-scale-codec", "scale-info", @@ -11218,7 +11232,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "sp-api", "sp-core", @@ -11228,7 +11242,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "backtrace", "lazy_static", @@ -11238,7 +11252,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "rustc-hash", "serde", @@ -11248,7 +11262,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "either", "hash256-std-hasher", @@ -11270,7 +11284,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11288,7 +11302,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "Inflector", "proc-macro-crate", @@ -11300,7 +11314,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "log", "parity-scale-codec", @@ -11314,7 +11328,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "serde", "serde_json", @@ -11323,7 +11337,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "parity-scale-codec", "scale-info", @@ -11337,7 +11351,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "parity-scale-codec", "scale-info", @@ -11348,7 +11362,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "hash-db", "log", @@ -11370,12 +11384,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11388,7 +11402,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "log", "sp-core", @@ -11401,7 +11415,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "futures-timer", @@ -11417,7 +11431,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "parity-scale-codec", "sp-std", @@ -11429,7 +11443,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "sp-api", "sp-runtime", @@ -11438,7 +11452,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "log", @@ -11454,7 +11468,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "ahash", "hash-db", @@ -11477,7 +11491,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11494,7 +11508,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11505,7 +11519,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "impl-trait-for-tuples", "log", @@ -11586,7 +11600,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-runtime-common", "scale-info", "serde", @@ -11652,7 +11666,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-runtime-common", "polkadot-runtime-constants", "scale-info", @@ -11764,7 +11778,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "platforms", ] @@ -11772,7 +11786,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11793,7 +11807,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "futures-util", "hyper", @@ -11806,7 +11820,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "jsonrpsee", "log", @@ -11827,7 +11841,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "async-trait", "futures", @@ -11853,7 +11867,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11863,7 +11877,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11874,7 +11888,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "ansi_term", "build-helper", @@ -11981,8 +11995,8 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "frame-support", "polkadot-primitives", @@ -12270,8 +12284,8 @@ dependencies = [ [[package]] name = "tracing-gum" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12281,8 +12295,8 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12409,7 +12423,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b7d2cb5c2dbfbc49cb3c06f6198daa60b04f16c0" +source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "clap 3.2.17", "jsonrpsee", @@ -12986,8 +13000,8 @@ dependencies = [ [[package]] name = "westend-runtime" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "beefy-primitives", "bitvec", @@ -13041,7 +13055,7 @@ dependencies = [ "pallet-xcm", "pallet-xcm-benchmarks", "parity-scale-codec", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", @@ -13075,8 +13089,8 @@ dependencies = [ [[package]] name = "westend-runtime-constants" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "frame-support", "polkadot-primitives", @@ -13128,7 +13142,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "polkadot-runtime-common", "scale-info", "serde", @@ -13360,8 +13374,8 @@ dependencies = [ [[package]] name = "xcm" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13374,15 +13388,15 @@ dependencies = [ [[package]] name = "xcm-builder" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "frame-support", "frame-system", "log", "pallet-transaction-payment", "parity-scale-codec", - "polkadot-parachain 0.9.27", + "polkadot-parachain 0.9.28", "scale-info", "sp-arithmetic", "sp-io", @@ -13394,8 +13408,8 @@ dependencies = [ [[package]] name = "xcm-executor" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "frame-benchmarking", "frame-support", @@ -13412,8 +13426,8 @@ dependencies = [ [[package]] name = "xcm-procedural" -version = "0.9.27" -source = "git+https://github.com/paritytech/polkadot?branch=master#160bb845e3e3ef209fec15199ac54b755425cce1" +version = "0.9.28" +source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ "Inflector", "proc-macro2", diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs index cd947446e26..63cdc10fed3 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs @@ -423,9 +423,10 @@ impl pallet_collator_selection::Config for Runtime { type WeightInfo = weights::pallet_collator_selection::WeightInfo; } -parameter_types! { - pub const AllianceMotionDuration: BlockNumber = 5 * DAYS; +pub const ALLIANCE_MOTION_DURATION: BlockNumber = 5 * DAYS; +parameter_types! { + pub const AllianceMotionDuration: BlockNumber = ALLIANCE_MOTION_DURATION; } pub const ALLIANCE_MAX_PROPOSALS: u32 = 100; pub const ALLIANCE_MAX_MEMBERS: u32 = 100; @@ -451,6 +452,9 @@ parameter_types! { // account used to temporarily deposit slashed imbalance before teleporting pub SlashedImbalanceAccId: AccountId = constants::account::SLASHED_IMBALANCE_ACC_ID.into(); pub RelayTreasuryAccId: AccountId = constants::account::RELAY_TREASURY_PALL_ID.into_account_truncating(); + // The number of blocks a member must wait between giving a retirement notice and retiring. + // Supposed to be greater than time required to `kick_member` with alliance motion. + pub const AllianceRetirementPeriod: BlockNumber = (90 * DAYS) + ALLIANCE_MOTION_DURATION; } impl pallet_alliance::Config for Runtime { @@ -463,6 +467,7 @@ impl pallet_alliance::Config for Runtime { type Slashed = ToParentTreasury; type InitializeMembers = AllianceMotion; type MembershipChanged = AllianceMotion; + type RetirementPeriod = AllianceRetirementPeriod; type IdentityVerifier = (); // Don't block accounts on identity criteria type ProposalProvider = AllianceProposalProvider; type MaxProposals = ConstU32; @@ -549,8 +554,13 @@ pub type Executive = frame_executive::Executive< frame_system::ChainContext, Runtime, AllPalletsWithSystem, + Migrations, >; +// All migrations executed on runtime upgrade as a nested tuple of types implementing `OnRuntimeUpgrade`. +// Included migrations must be idempotent. +type Migrations = (pallet_alliance::migration::Migration,); + #[cfg(feature = "runtime-benchmarks")] #[macro_use] extern crate frame_benchmarking; From 0168ae7120f126bd9d7edc8832dfa1e062de7aa0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Aug 2022 11:01:07 +0200 Subject: [PATCH 026/148] Bump futures from 0.3.23 to 0.3.24 (#1578) Bumps [futures](https://github.com/rust-lang/futures-rs) from 0.3.23 to 0.3.24. - [Release notes](https://github.com/rust-lang/futures-rs/releases) - [Changelog](https://github.com/rust-lang/futures-rs/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-lang/futures-rs/compare/0.3.23...0.3.24) --- updated-dependencies: - dependency-name: futures dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 36 +++++++++---------- client/consensus/aura/Cargo.toml | 2 +- client/consensus/common/Cargo.toml | 2 +- client/consensus/relay-chain/Cargo.toml | 2 +- client/network/Cargo.toml | 2 +- client/pov-recovery/Cargo.toml | 2 +- .../Cargo.toml | 2 +- client/relay-chain-interface/Cargo.toml | 2 +- client/relay-chain-rpc-interface/Cargo.toml | 2 +- polkadot-parachain/Cargo.toml | 2 +- primitives/timestamp/Cargo.toml | 2 +- test/service/Cargo.toml | 2 +- 12 files changed, 29 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b63f24e3b5e..5800ba1aef3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3091,9 +3091,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab30e97ab6aacfe635fad58f22c2bb06c8b685f7421eb1e064a729e2a5f481fa" +checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c" dependencies = [ "futures-channel", "futures-core", @@ -3106,9 +3106,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bfc52cbddcfd745bf1740338492bb0bd83d76c67b445f91c5fb29fae29ecaa1" +checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" dependencies = [ "futures-core", "futures-sink", @@ -3116,15 +3116,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2acedae88d38235936c3922476b10fced7b2b68136f5e3c03c2d5be348a1115" +checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" [[package]] name = "futures-executor" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d11aa21b5b587a64682c0094c2bdd4df0076c5324961a40cc3abd7f37930528" +checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab" dependencies = [ "futures-core", "futures-task", @@ -3134,9 +3134,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93a66fc6d035a26a3ae255a6d2bca35eda63ae4c5512bef54449113f7a1228e5" +checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" [[package]] name = "futures-lite" @@ -3155,9 +3155,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0db9cce532b0eae2ccf2766ab246f114b56b9cf6d445e00c2549fbc100ca045d" +checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17" dependencies = [ "proc-macro2", "quote", @@ -3177,15 +3177,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca0bae1fe9752cf7fd9b0064c674ae63f97b37bc714d745cbde0afb7ec4e6765" +checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56" [[package]] name = "futures-task" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "842fc63b931f4056a24d59de13fb1272134ce261816e063e634ad0c15cdc5306" +checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1" [[package]] name = "futures-timer" @@ -3195,9 +3195,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0828a5471e340229c11c77ca80017937ce3c58cb788a17e5f1c2d5c485a9577" +checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" dependencies = [ "futures-channel", "futures-core", diff --git a/client/consensus/aura/Cargo.toml b/client/consensus/aura/Cargo.toml index e4c459e48f1..9e3118c846c 100644 --- a/client/consensus/aura/Cargo.toml +++ b/client/consensus/aura/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" [dependencies] async-trait = "0.1.57" codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ] } -futures = "0.3.23" +futures = "0.3.24" tracing = "0.1.36" # Substrate diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index bddbf56f4ec..633d3630bc1 100644 --- a/client/consensus/common/Cargo.toml +++ b/client/consensus/common/Cargo.toml @@ -9,7 +9,7 @@ edition = "2021" async-trait = "0.1.57" codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ] } dyn-clone = "1.0.9" -futures = "0.3.23" +futures = "0.3.24" tracing = "0.1.36" # Substrate diff --git a/client/consensus/relay-chain/Cargo.toml b/client/consensus/relay-chain/Cargo.toml index e9d0dae40fb..e86e9d99f5b 100644 --- a/client/consensus/relay-chain/Cargo.toml +++ b/client/consensus/relay-chain/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] async-trait = "0.1.57" -futures = "0.3.23" +futures = "0.3.24" parking_lot = "0.12.1" tracing = "0.1.36" diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index b4b1704a7d8..fdfa15e5af0 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -9,7 +9,7 @@ edition = "2021" async-trait = "0.1.57" codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ] } derive_more = "0.99.2" -futures = "0.3.23" +futures = "0.3.24" futures-timer = "3.0.2" parking_lot = "0.12.1" tracing = "0.1.36" diff --git a/client/pov-recovery/Cargo.toml b/client/pov-recovery/Cargo.toml index 73920c61013..da6147b173b 100644 --- a/client/pov-recovery/Cargo.toml +++ b/client/pov-recovery/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ] } -futures = "0.3.23" +futures = "0.3.24" futures-timer = "3.0.2" rand = "0.8.5" tracing = "0.1.36" diff --git a/client/relay-chain-inprocess-interface/Cargo.toml b/client/relay-chain-inprocess-interface/Cargo.toml index 612b56c0ad8..d2ae9ca1556 100644 --- a/client/relay-chain-inprocess-interface/Cargo.toml +++ b/client/relay-chain-inprocess-interface/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] async-trait = "0.1.57" -futures = "0.3.23" +futures = "0.3.24" futures-timer = "3.0.2" tracing = "0.1.36" diff --git a/client/relay-chain-interface/Cargo.toml b/client/relay-chain-interface/Cargo.toml index 49cf0bf3800..474480f2ea7 100644 --- a/client/relay-chain-interface/Cargo.toml +++ b/client/relay-chain-interface/Cargo.toml @@ -17,7 +17,7 @@ sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "mas sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -futures = "0.3.23" +futures = "0.3.24" parking_lot = "0.12.1" derive_more = "0.99.2" async-trait = "0.1.57" diff --git a/client/relay-chain-rpc-interface/Cargo.toml b/client/relay-chain-rpc-interface/Cargo.toml index 34f49a69f83..38e1c37ad5f 100644 --- a/client/relay-chain-rpc-interface/Cargo.toml +++ b/client/relay-chain-rpc-interface/Cargo.toml @@ -20,7 +20,7 @@ sp-storage = { git = "https://github.com/paritytech/substrate", branch = "master sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "master" } tokio = { version = "1.19.2", features = ["sync"] } -futures = "0.3.23" +futures = "0.3.24" futures-timer = "3.0.2" parity-scale-codec = "3.1.5" parking_lot = "0.12.1" diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index 9822b10224b..ab241a07c93 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -10,7 +10,7 @@ description = "Runs a polkadot parachain node which could be a collator." async-trait = "0.1.57" clap = { version = "3.2.17", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } -futures = "0.3.23" +futures = "0.3.24" hex-literal = "0.3.4" log = "0.4.17" serde = { version = "1.0.144", features = ["derive"] } diff --git a/primitives/timestamp/Cargo.toml b/primitives/timestamp/Cargo.toml index 23d0f5a7db6..88414029883 100644 --- a/primitives/timestamp/Cargo.toml +++ b/primitives/timestamp/Cargo.toml @@ -7,7 +7,7 @@ description = "Provides timestamp related functionality for parachains." [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "derive" ] } -futures = "0.3.23" +futures = "0.3.24" # Substrate sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index 26c9401d31f..85974e67d8c 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -72,7 +72,7 @@ cumulus-test-relay-validation-worker-provider = { path = "../relay-validation-wo cumulus-test-runtime = { path = "../runtime" } [dev-dependencies] -futures = "0.3.23" +futures = "0.3.24" portpicker = "0.1.1" # Polkadot dependencies From f418162cc0840a7bed47b90562084b12bf60f8d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Aug 2022 09:28:01 +0000 Subject: [PATCH 027/148] Bump clap from 3.2.17 to 3.2.18 (#1577) Bumps [clap](https://github.com/clap-rs/clap) from 3.2.17 to 3.2.18. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/v3.2.18/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/v3.2.17...v3.2.18) --- updated-dependencies: - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 24 ++++++++++++------------ client/cli/Cargo.toml | 2 +- parachain-template/node/Cargo.toml | 2 +- polkadot-parachain/Cargo.toml | 2 +- test/service/Cargo.toml | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5800ba1aef3..49b507b615c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -961,9 +961,9 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.17" +version = "3.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29e724a68d9319343bb3328c9cc2dfde263f4b3142ee1059a9980580171c954b" +checksum = "b15f2ea93df33549dbe2e8eecd1ca55269d63ae0b3ba1f55db030817d1c2867f" dependencies = [ "atty", "bitflags", @@ -978,9 +978,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "3.2.17" +version = "3.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13547f7012c01ab4a0e8f8967730ada8f9fdf419e8b6c792788f39cf4e46eefa" +checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" dependencies = [ "heck", "proc-macro-error", @@ -1532,7 +1532,7 @@ dependencies = [ name = "cumulus-client-cli" version = "0.1.0" dependencies = [ - "clap 3.2.17", + "clap 3.2.18", "parity-scale-codec", "sc-chain-spec", "sc-cli", @@ -2146,7 +2146,7 @@ name = "cumulus-test-service" version = "0.1.0" dependencies = [ "async-trait", - "clap 3.2.17", + "clap 3.2.18", "criterion", "cumulus-client-cli", "cumulus-client-consensus-common", @@ -2831,7 +2831,7 @@ source = "git+https://github.com/paritytech/substrate?branch=master#5cdb05404998 dependencies = [ "Inflector", "chrono", - "clap 3.2.17", + "clap 3.2.18", "comfy-table", "frame-benchmarking", "frame-support", @@ -6482,7 +6482,7 @@ dependencies = [ name = "parachain-template-node" version = "0.1.0" dependencies = [ - "clap 3.2.17", + "clap 3.2.18", "cumulus-client-cli", "cumulus-client-collator", "cumulus-client-consensus-aura", @@ -7085,7 +7085,7 @@ name = "polkadot-cli" version = "0.9.28" source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ - "clap 3.2.17", + "clap 3.2.18", "frame-benchmarking-cli", "futures", "log", @@ -7742,7 +7742,7 @@ version = "0.9.230" dependencies = [ "assert_cmd", "async-trait", - "clap 3.2.17", + "clap 3.2.18", "collectives-polkadot-runtime", "contracts-rococo-runtime", "cumulus-client-cli", @@ -9393,7 +9393,7 @@ version = "0.10.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "chrono", - "clap 3.2.17", + "clap 3.2.18", "fdlimit", "futures", "hex", @@ -12425,7 +12425,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ - "clap 3.2.17", + "clap 3.2.18", "jsonrpsee", "log", "parity-scale-codec", diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index 39e7c33f830..534f55254e1 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2021" [dependencies] -clap = { version = "3.2.17", features = ["derive", "deprecated"] } +clap = { version = "3.2.18", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } url = "2.2.2" diff --git a/parachain-template/node/Cargo.toml b/parachain-template/node/Cargo.toml index 2dad3ab4e58..fa344fa4431 100644 --- a/parachain-template/node/Cargo.toml +++ b/parachain-template/node/Cargo.toml @@ -10,7 +10,7 @@ edition = "2021" build = "build.rs" [dependencies] -clap = { version = "3.2.17", features = ["derive"] } +clap = { version = "3.2.18", features = ["derive"] } derive_more = "0.99.2" log = "0.4.17" codec = { package = "parity-scale-codec", version = "3.0.0" } diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index ab241a07c93..ca18bf0a09a 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -8,7 +8,7 @@ description = "Runs a polkadot parachain node which could be a collator." [dependencies] async-trait = "0.1.57" -clap = { version = "3.2.17", features = ["derive", "deprecated"] } +clap = { version = "3.2.18", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } futures = "0.3.24" hex-literal = "0.3.4" diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index 85974e67d8c..eb835386ed1 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -10,7 +10,7 @@ path = "src/main.rs" [dependencies] async-trait = "0.1.57" -clap = { version = "3.2.17", features = ["derive", "deprecated"] } +clap = { version = "3.2.18", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } criterion = { version = "0.3.6", features = [ "async_tokio" ] } jsonrpsee = { version = "0.15.1", features = ["server"] } From 8fbecbf9bccbf78ebafbf6fb060173beb77cde98 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Aug 2022 09:14:45 +0000 Subject: [PATCH 028/148] Bump clap from 3.2.18 to 3.2.19 (#1580) Bumps [clap](https://github.com/clap-rs/clap) from 3.2.18 to 3.2.19. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/v3.2.19/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/v3.2.18...v3.2.19) --- updated-dependencies: - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 20 ++++++++++---------- client/cli/Cargo.toml | 2 +- parachain-template/node/Cargo.toml | 2 +- polkadot-parachain/Cargo.toml | 2 +- test/service/Cargo.toml | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 49b507b615c..b4620b5e91a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -961,9 +961,9 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.18" +version = "3.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15f2ea93df33549dbe2e8eecd1ca55269d63ae0b3ba1f55db030817d1c2867f" +checksum = "68d43934757334b5c0519ff882e1ab9647ac0258b47c24c4f490d78e42697fd5" dependencies = [ "atty", "bitflags", @@ -1532,7 +1532,7 @@ dependencies = [ name = "cumulus-client-cli" version = "0.1.0" dependencies = [ - "clap 3.2.18", + "clap 3.2.19", "parity-scale-codec", "sc-chain-spec", "sc-cli", @@ -2146,7 +2146,7 @@ name = "cumulus-test-service" version = "0.1.0" dependencies = [ "async-trait", - "clap 3.2.18", + "clap 3.2.19", "criterion", "cumulus-client-cli", "cumulus-client-consensus-common", @@ -2831,7 +2831,7 @@ source = "git+https://github.com/paritytech/substrate?branch=master#5cdb05404998 dependencies = [ "Inflector", "chrono", - "clap 3.2.18", + "clap 3.2.19", "comfy-table", "frame-benchmarking", "frame-support", @@ -6482,7 +6482,7 @@ dependencies = [ name = "parachain-template-node" version = "0.1.0" dependencies = [ - "clap 3.2.18", + "clap 3.2.19", "cumulus-client-cli", "cumulus-client-collator", "cumulus-client-consensus-aura", @@ -7085,7 +7085,7 @@ name = "polkadot-cli" version = "0.9.28" source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" dependencies = [ - "clap 3.2.18", + "clap 3.2.19", "frame-benchmarking-cli", "futures", "log", @@ -7742,7 +7742,7 @@ version = "0.9.230" dependencies = [ "assert_cmd", "async-trait", - "clap 3.2.18", + "clap 3.2.19", "collectives-polkadot-runtime", "contracts-rococo-runtime", "cumulus-client-cli", @@ -9393,7 +9393,7 @@ version = "0.10.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ "chrono", - "clap 3.2.18", + "clap 3.2.19", "fdlimit", "futures", "hex", @@ -12425,7 +12425,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" dependencies = [ - "clap 3.2.18", + "clap 3.2.19", "jsonrpsee", "log", "parity-scale-codec", diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index 534f55254e1..0e01100ba38 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2021" [dependencies] -clap = { version = "3.2.18", features = ["derive", "deprecated"] } +clap = { version = "3.2.19", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } url = "2.2.2" diff --git a/parachain-template/node/Cargo.toml b/parachain-template/node/Cargo.toml index fa344fa4431..ba7df2c7665 100644 --- a/parachain-template/node/Cargo.toml +++ b/parachain-template/node/Cargo.toml @@ -10,7 +10,7 @@ edition = "2021" build = "build.rs" [dependencies] -clap = { version = "3.2.18", features = ["derive"] } +clap = { version = "3.2.19", features = ["derive"] } derive_more = "0.99.2" log = "0.4.17" codec = { package = "parity-scale-codec", version = "3.0.0" } diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index ca18bf0a09a..2431884628a 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -8,7 +8,7 @@ description = "Runs a polkadot parachain node which could be a collator." [dependencies] async-trait = "0.1.57" -clap = { version = "3.2.18", features = ["derive", "deprecated"] } +clap = { version = "3.2.19", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } futures = "0.3.24" hex-literal = "0.3.4" diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index eb835386ed1..57fbfe9cfb5 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -10,7 +10,7 @@ path = "src/main.rs" [dependencies] async-trait = "0.1.57" -clap = { version = "3.2.18", features = ["derive", "deprecated"] } +clap = { version = "3.2.19", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } criterion = { version = "0.3.6", features = [ "async_tokio" ] } jsonrpsee = { version = "0.15.1", features = ["server"] } From 1ab196df492812b756e7f37032c3aeb5e78eab1f Mon Sep 17 00:00:00 2001 From: Roman Useinov Date: Wed, 31 Aug 2022 13:27:14 +0200 Subject: [PATCH 029/148] [Feature] Limit collectives teleports to DOT (#1579) * [Feature] Limit collectives teleports to DOT * Update pallets/xcm/src/lib.rs Co-authored-by: Keith Yeung * fix review comments * Update parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs Co-authored-by: Chevdor * [ci] Apply cargo-fmt Co-authored-by: Keith Yeung Co-authored-by: Chevdor Co-authored-by: paritytech-ci --- parachains/common/src/xcm_config.rs | 14 +++++++++++++- .../collectives-polkadot/src/xcm_config.rs | 9 +++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/parachains/common/src/xcm_config.rs b/parachains/common/src/xcm_config.rs index d56876d60ca..aba8ffa29dd 100644 --- a/parachains/common/src/xcm_config.rs +++ b/parachains/common/src/xcm_config.rs @@ -5,8 +5,9 @@ use frame_support::{ traits::{fungibles::Inspect, tokens::BalanceConversion}, weights::{Weight, WeightToFee, WeightToFeePolynomial}, }; +use sp_runtime::traits::Get; use xcm::latest::prelude::*; -use xcm_executor::traits::ShouldExecute; +use xcm_executor::traits::{FilterAssetLocation, ShouldExecute}; //TODO: move DenyThenTry to polkadot's xcm module. /// Deny executing the XCM if it matches any of the Deny filter regardless of anything else. @@ -107,3 +108,14 @@ where Ok(asset_amount) } } + +/// Accepts an asset if it is a native asset from a particular `MultiLocation`. +pub struct ConcreteNativeAssetFrom(PhantomData); +impl> FilterAssetLocation for ConcreteNativeAssetFrom { + fn filter_asset_location(asset: &MultiAsset, origin: &MultiLocation) -> bool { + log::trace!(target: "xcm::filter_asset_location", + "ConcreteNativeAsset asset: {:?}, origin: {:?}, location: {:?}", + asset, origin, Location::get()); + matches!(asset.id, Concrete(ref id) if id == origin && origin == &Location::get()) + } +} diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs index 78f5b224f8d..09869b67e72 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs @@ -25,15 +25,15 @@ use frame_support::{ use pallet_xcm::XcmPassthrough; use parachains_common::{ impls::ToStakingPot, - xcm_config::{DenyReserveTransferToRelayChain, DenyThenTry}, + xcm_config::{ConcreteNativeAssetFrom, DenyReserveTransferToRelayChain, DenyThenTry}, }; use polkadot_parachain::primitives::Sibling; use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, CurrencyAdapter, EnsureXcmOrigin, - FixedWeightBounds, IsConcrete, LocationInverter, NativeAsset, ParentAsSuperuser, - ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, + FixedWeightBounds, IsConcrete, LocationInverter, ParentAsSuperuser, ParentIsPreset, + RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, }; @@ -140,7 +140,8 @@ impl xcm_executor::Config for XcmConfig { // Collectives does not recognize a reserve location for any asset. Users must teleport DOT // where allowed (e.g. with the Relay Chain). type IsReserve = (); - type IsTeleporter = NativeAsset; // <- should be enough to allow teleportation of DOT + /// Only allow teleportation of DOT. + type IsTeleporter = ConcreteNativeAssetFrom; type LocationInverter = LocationInverter; type Barrier = Barrier; type Weigher = FixedWeightBounds; From 3fb9c8a7beb8fb0fc31ea3335f8483d8086f60c8 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Wed, 31 Aug 2022 13:24:42 +0100 Subject: [PATCH 030/148] Companion for Weight v1.5 (#1581) * cargo test -p cumulus-primitives-utility * cargo test -p cumulus-pallet-xcmp-queue * cargo test -p cumulus-pallet-xcm * cargo test -p cumulus-pallet-dmp-queue * cargo test -p pallet-template * cargo test -p cumulus-test-runtime * fix weights * fix more weights * cargo test -p parachains-common * cargo test -p parachain-template-runtime * fix weights import * cargo test -p collectives-polkadot-runtime * cargo test -p contracts-rococo-runtime * more * unused * fixes * Update benchmarking.rs * Update lib.rs * Update lib.rs * fix * fix bug in conversion * update lockfile for {"polkadot", "substrate"} Co-authored-by: parity-processbot <> --- Cargo.lock | 497 +++++++++--------- pallets/collator-selection/src/weights.rs | 146 +++-- pallets/dmp-queue/src/lib.rs | 148 +++--- pallets/parachain-system/src/lib.rs | 6 +- pallets/parachain-system/src/migration.rs | 2 +- pallets/parachain-system/src/tests.rs | 8 +- pallets/solo-to-para/src/lib.rs | 2 +- pallets/xcm/src/lib.rs | 12 +- pallets/xcmp-queue/src/benchmarking.rs | 2 +- pallets/xcmp-queue/src/lib.rs | 61 ++- pallets/xcmp-queue/src/migration.rs | 12 +- pallets/xcmp-queue/src/mock.rs | 2 +- pallets/xcmp-queue/src/tests.rs | 65 ++- pallets/xcmp-queue/src/weights.rs | 26 +- .../pallets/template/src/lib.rs | 4 +- parachain-template/runtime/src/lib.rs | 8 +- .../runtime/src/weights/block_weights.rs | 2 +- .../runtime/src/weights/extrinsic_weights.rs | 2 +- .../runtime/src/weights/paritydb_weights.rs | 4 +- .../runtime/src/weights/rocksdb_weights.rs | 4 +- parachain-template/runtime/src/xcm_config.rs | 13 +- parachains/common/src/lib.rs | 2 +- parachains/common/src/xcm_config.rs | 10 +- .../assets/statemine/src/constants.rs | 2 +- .../runtimes/assets/statemine/src/lib.rs | 4 +- .../statemine/src/weights/block_weights.rs | 2 +- .../src/weights/cumulus_pallet_xcmp_queue.rs | 14 +- .../src/weights/extrinsic_weights.rs | 2 +- .../statemine/src/weights/frame_system.rs | 32 +- .../statemine/src/weights/pallet_assets.rs | 158 +++--- .../statemine/src/weights/pallet_balances.rs | 44 +- .../src/weights/pallet_collator_selection.rs | 52 +- .../statemine/src/weights/pallet_multisig.rs | 88 ++-- .../statemine/src/weights/pallet_proxy.rs | 88 ++-- .../statemine/src/weights/pallet_session.rs | 14 +- .../statemine/src/weights/pallet_timestamp.rs | 10 +- .../statemine/src/weights/pallet_uniques.rs | 178 +++---- .../statemine/src/weights/pallet_utility.rs | 18 +- .../statemine/src/weights/paritydb_weights.rs | 4 +- .../statemine/src/weights/rocksdb_weights.rs | 4 +- .../assets/statemine/src/xcm_config.rs | 3 +- .../runtimes/assets/statemine/tests/tests.rs | 17 +- .../assets/statemint/src/constants.rs | 2 +- .../runtimes/assets/statemint/src/lib.rs | 4 +- .../statemint/src/weights/block_weights.rs | 2 +- .../src/weights/cumulus_pallet_xcmp_queue.rs | 14 +- .../src/weights/extrinsic_weights.rs | 2 +- .../statemint/src/weights/frame_system.rs | 32 +- .../statemint/src/weights/pallet_assets.rs | 164 +++--- .../statemint/src/weights/pallet_balances.rs | 44 +- .../src/weights/pallet_collator_selection.rs | 52 +- .../statemint/src/weights/pallet_multisig.rs | 88 ++-- .../statemint/src/weights/pallet_proxy.rs | 88 ++-- .../statemint/src/weights/pallet_session.rs | 14 +- .../statemint/src/weights/pallet_timestamp.rs | 10 +- .../statemint/src/weights/pallet_uniques.rs | 178 +++---- .../statemint/src/weights/pallet_utility.rs | 18 +- .../statemint/src/weights/paritydb_weights.rs | 4 +- .../statemint/src/weights/rocksdb_weights.rs | 4 +- .../assets/statemint/src/xcm_config.rs | 3 +- .../runtimes/assets/statemint/tests/tests.rs | 6 +- .../runtimes/assets/westmint/src/constants.rs | 2 +- .../runtimes/assets/westmint/src/lib.rs | 4 +- .../westmint/src/weights/block_weights.rs | 2 +- .../src/weights/cumulus_pallet_xcmp_queue.rs | 14 +- .../westmint/src/weights/extrinsic_weights.rs | 2 +- .../westmint/src/weights/frame_system.rs | 32 +- .../westmint/src/weights/pallet_assets.rs | 162 +++--- .../westmint/src/weights/pallet_balances.rs | 44 +- .../src/weights/pallet_collator_selection.rs | 52 +- .../westmint/src/weights/pallet_multisig.rs | 88 ++-- .../westmint/src/weights/pallet_proxy.rs | 88 ++-- .../westmint/src/weights/pallet_session.rs | 14 +- .../westmint/src/weights/pallet_timestamp.rs | 10 +- .../westmint/src/weights/pallet_uniques.rs | 178 +++---- .../westmint/src/weights/pallet_utility.rs | 18 +- .../westmint/src/weights/paritydb_weights.rs | 4 +- .../westmint/src/weights/rocksdb_weights.rs | 4 +- .../assets/westmint/src/xcm_config.rs | 3 +- .../runtimes/assets/westmint/tests/tests.rs | 17 +- .../collectives-polkadot/src/constants.rs | 2 +- .../collectives-polkadot/src/lib.rs | 4 +- .../src/weights/block_weights.rs | 2 +- .../src/weights/cumulus_pallet_xcmp_queue.rs | 14 +- .../src/weights/extrinsic_weights.rs | 2 +- .../src/weights/frame_system.rs | 32 +- .../src/weights/pallet_alliance.rs | 154 +++--- .../src/weights/pallet_balances.rs | 44 +- .../src/weights/pallet_collator_selection.rs | 52 +- .../src/weights/pallet_multisig.rs | 88 ++-- .../src/weights/pallet_proxy.rs | 88 ++-- .../src/weights/pallet_session.rs | 14 +- .../src/weights/pallet_timestamp.rs | 10 +- .../src/weights/pallet_utility.rs | 18 +- .../src/weights/paritydb_weights.rs | 4 +- .../src/weights/rocksdb_weights.rs | 4 +- .../collectives-polkadot/src/xcm_config.rs | 3 +- .../contracts-rococo/src/constants.rs | 2 +- .../contracts-rococo/src/contracts.rs | 6 +- .../contracts/contracts-rococo/src/lib.rs | 18 +- .../src/weights/block_weights.rs | 2 +- .../src/weights/extrinsic_weights.rs | 2 +- .../src/weights/paritydb_weights.rs | 4 +- .../src/weights/rocksdb_weights.rs | 4 +- .../contracts-rococo/src/xcm_config.rs | 3 +- .../runtimes/starters/seedling/src/lib.rs | 2 +- parachains/runtimes/starters/shell/src/lib.rs | 4 +- .../runtimes/starters/shell/src/xcm_config.rs | 4 +- parachains/runtimes/testing/penpal/src/lib.rs | 8 +- .../penpal/src/weights/block_weights.rs | 2 +- .../penpal/src/weights/extrinsic_weights.rs | 2 +- .../penpal/src/weights/paritydb_weights.rs | 4 +- .../penpal/src/weights/rocksdb_weights.rs | 4 +- .../runtimes/testing/penpal/src/xcm_config.rs | 13 +- .../testing/rococo-parachain/src/lib.rs | 8 +- primitives/utility/src/lib.rs | 13 +- test/runtime/src/lib.rs | 5 +- test/service/src/lib.rs | 6 +- 118 files changed, 2005 insertions(+), 1885 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b4620b5e91a..b89b017b44f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -451,7 +451,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "beefy-primitives", @@ -487,7 +487,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -507,7 +507,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "beefy-primitives", "sp-api", @@ -516,7 +516,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "parity-scale-codec", "scale-info", @@ -2786,7 +2786,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "parity-scale-codec", ] @@ -2804,7 +2804,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -2827,7 +2827,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "Inflector", "chrono", @@ -2878,7 +2878,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2889,7 +2889,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2905,7 +2905,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -2933,7 +2933,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "bitflags", "frame-metadata", @@ -2964,7 +2964,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "Inflector", "cfg-expr", @@ -2978,7 +2978,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2990,7 +2990,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "proc-macro2", "quote", @@ -3000,7 +3000,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "log", @@ -3017,7 +3017,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -3032,7 +3032,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "parity-scale-codec", "sp-api", @@ -3041,7 +3041,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "sp-api", @@ -3915,7 +3915,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "beefy-primitives", "bitvec", @@ -4008,7 +4008,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "frame-support", "polkadot-primitives", @@ -5367,7 +5367,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "async-trait", "dyn-clonable", @@ -5383,7 +5383,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "expander 0.0.6", "itertools", @@ -5421,7 +5421,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5442,7 +5442,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -5459,7 +5459,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5473,7 +5473,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -5489,7 +5489,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -5505,7 +5505,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -5520,7 +5520,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5544,7 +5544,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5564,7 +5564,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5579,7 +5579,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "beefy-primitives", "frame-support", @@ -5595,7 +5595,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -5618,7 +5618,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5636,7 +5636,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5681,7 +5681,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5698,7 +5698,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "bitflags", "frame-benchmarking", @@ -5726,7 +5726,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "bitflags", "parity-scale-codec", @@ -5741,7 +5741,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "proc-macro2", "quote", @@ -5751,7 +5751,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5768,7 +5768,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5781,7 +5781,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5797,7 +5797,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5820,7 +5820,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5833,7 +5833,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5851,7 +5851,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5866,7 +5866,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5889,7 +5889,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5905,7 +5905,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5925,7 +5925,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5942,7 +5942,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5959,7 +5959,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5977,7 +5977,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5992,7 +5992,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -6007,7 +6007,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -6024,7 +6024,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6043,7 +6043,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "parity-scale-codec", "sp-api", @@ -6053,7 +6053,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -6070,7 +6070,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6093,7 +6093,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -6109,7 +6109,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -6124,7 +6124,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -6138,7 +6138,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -6153,7 +6153,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -6169,7 +6169,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -6190,7 +6190,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -6206,7 +6206,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -6220,7 +6220,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6243,7 +6243,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6254,7 +6254,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "log", "sp-arithmetic", @@ -6263,7 +6263,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -6292,7 +6292,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -6310,7 +6310,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -6329,7 +6329,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -6345,7 +6345,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6360,7 +6360,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6371,7 +6371,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -6388,7 +6388,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -6403,7 +6403,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -6419,7 +6419,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -6434,7 +6434,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "frame-support", "frame-system", @@ -6452,7 +6452,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "frame-benchmarking", "frame-support", @@ -7010,7 +7010,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7025,7 +7025,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7039,7 +7039,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "derive_more", "fatality", @@ -7062,7 +7062,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "fatality", "futures", @@ -7083,7 +7083,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "clap 3.2.19", "frame-benchmarking-cli", @@ -7109,7 +7109,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7150,7 +7150,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "always-assert", "fatality", @@ -7171,7 +7171,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7184,7 +7184,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "derive_more", "fatality", @@ -7207,7 +7207,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7221,7 +7221,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "futures", "futures-timer", @@ -7241,7 +7241,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "always-assert", "async-trait", @@ -7265,7 +7265,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "futures", "parity-scale-codec", @@ -7283,7 +7283,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "bitvec", "derive_more", @@ -7312,7 +7312,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "bitvec", "futures", @@ -7332,7 +7332,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "bitvec", "fatality", @@ -7351,7 +7351,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7366,7 +7366,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "async-trait", "futures", @@ -7384,7 +7384,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7399,7 +7399,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "futures", "futures-timer", @@ -7416,7 +7416,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "fatality", "futures", @@ -7435,7 +7435,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "async-trait", "futures", @@ -7452,7 +7452,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "bitvec", "fatality", @@ -7470,7 +7470,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "always-assert", "assert_matches", @@ -7502,7 +7502,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "futures", "polkadot-node-primitives", @@ -7518,7 +7518,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "futures", "memory-lru", @@ -7534,7 +7534,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "async-std", "lazy_static", @@ -7552,7 +7552,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "bs58", "futures", @@ -7571,7 +7571,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "async-trait", "derive_more", @@ -7593,7 +7593,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "bounded-vec", "futures", @@ -7615,7 +7615,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7625,7 +7625,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "async-trait", "futures", @@ -7643,7 +7643,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "async-trait", "derive_more", @@ -7666,7 +7666,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "async-trait", "derive_more", @@ -7699,7 +7699,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "async-trait", "futures", @@ -7722,7 +7722,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "derive_more", "frame-support", @@ -7822,7 +7822,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7837,7 +7837,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "bitvec", "frame-system", @@ -7867,7 +7867,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7899,7 +7899,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "beefy-primitives", "bitvec", @@ -7987,7 +7987,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "beefy-primitives", "bitvec", @@ -8034,7 +8034,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "frame-support", "polkadot-primitives", @@ -8046,7 +8046,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "bs58", "parity-scale-codec", @@ -8058,7 +8058,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "bitflags", "bitvec", @@ -8101,11 +8101,12 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "async-trait", "beefy-gadget", "beefy-primitives", + "frame-support", "frame-system-rpc-runtime-api", "futures", "hex-literal", @@ -8205,7 +8206,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8226,7 +8227,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8236,7 +8237,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8261,7 +8262,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "beefy-primitives", "bitvec", @@ -8322,7 +8323,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "frame-benchmarking", "frame-system", @@ -8467,7 +8468,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8911,7 +8912,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9033,7 +9034,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9102,7 +9103,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "frame-support", "polkadot-primitives", @@ -9286,7 +9287,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "log", "sp-core", @@ -9297,7 +9298,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures", "futures-timer", @@ -9323,7 +9324,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures", "futures-timer", @@ -9346,7 +9347,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9362,7 +9363,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9379,7 +9380,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9390,7 +9391,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "chrono", "clap 3.2.19", @@ -9429,7 +9430,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "fnv", "futures", @@ -9457,7 +9458,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "hash-db", "kvdb", @@ -9482,7 +9483,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "futures", @@ -9506,7 +9507,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "futures", @@ -9535,7 +9536,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "fork-tree", @@ -9577,7 +9578,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures", "jsonrpsee", @@ -9599,7 +9600,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9612,7 +9613,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "futures", @@ -9637,7 +9638,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9664,7 +9665,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "environmental", "parity-scale-codec", @@ -9680,7 +9681,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "log", "parity-scale-codec", @@ -9695,7 +9696,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9716,7 +9717,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "ahash", "async-trait", @@ -9757,7 +9758,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "finality-grandpa", "futures", @@ -9778,7 +9779,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "ansi_term", "futures", @@ -9795,7 +9796,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "hex", @@ -9810,7 +9811,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "asynchronous-codec", @@ -9859,7 +9860,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "bitflags", @@ -9881,7 +9882,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "ahash", "futures", @@ -9899,7 +9900,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures", "hex", @@ -9920,7 +9921,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "fork-tree", "futures", @@ -9948,7 +9949,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "bytes", "fnv", @@ -9978,7 +9979,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures", "libp2p", @@ -9991,7 +9992,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10000,7 +10001,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures", "hash-db", @@ -10030,7 +10031,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures", "jsonrpsee", @@ -10053,7 +10054,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures", "jsonrpsee", @@ -10066,7 +10067,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "directories", @@ -10133,7 +10134,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "log", "parity-scale-codec", @@ -10147,7 +10148,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10166,7 +10167,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures", "libc", @@ -10185,7 +10186,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "chrono", "futures", @@ -10203,7 +10204,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "ansi_term", "atty", @@ -10234,7 +10235,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10245,7 +10246,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures", "futures-timer", @@ -10271,7 +10272,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures", "log", @@ -10284,7 +10285,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures", "futures-timer", @@ -10731,7 +10732,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "enumn", "parity-scale-codec", @@ -10807,7 +10808,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "hash-db", "log", @@ -10825,7 +10826,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "blake2", "proc-macro-crate", @@ -10837,7 +10838,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "parity-scale-codec", "scale-info", @@ -10850,7 +10851,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "integer-sqrt", "num-traits", @@ -10865,7 +10866,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "parity-scale-codec", "scale-info", @@ -10878,7 +10879,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "parity-scale-codec", @@ -10890,7 +10891,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "parity-scale-codec", "sp-api", @@ -10902,7 +10903,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures", "log", @@ -10920,7 +10921,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "futures", @@ -10939,7 +10940,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "parity-scale-codec", @@ -10957,7 +10958,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "merlin", @@ -10980,7 +10981,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "parity-scale-codec", "scale-info", @@ -10994,7 +10995,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "parity-scale-codec", "scale-info", @@ -11007,7 +11008,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "base58", "bitflags", @@ -11053,7 +11054,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "blake2", "byteorder", @@ -11067,7 +11068,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "proc-macro2", "quote", @@ -11078,7 +11079,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11087,7 +11088,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "proc-macro2", "quote", @@ -11097,7 +11098,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "environmental", "parity-scale-codec", @@ -11108,7 +11109,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "finality-grandpa", "log", @@ -11126,7 +11127,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11140,7 +11141,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "bytes", "futures", @@ -11166,7 +11167,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "lazy_static", "sp-core", @@ -11177,7 +11178,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "futures", @@ -11194,7 +11195,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "thiserror", "zstd", @@ -11203,7 +11204,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "log", "parity-scale-codec", @@ -11218,7 +11219,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "parity-scale-codec", "scale-info", @@ -11232,7 +11233,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "sp-api", "sp-core", @@ -11242,7 +11243,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "backtrace", "lazy_static", @@ -11252,7 +11253,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "rustc-hash", "serde", @@ -11262,7 +11263,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "either", "hash256-std-hasher", @@ -11284,7 +11285,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11302,7 +11303,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "Inflector", "proc-macro-crate", @@ -11314,7 +11315,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "log", "parity-scale-codec", @@ -11328,7 +11329,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "serde", "serde_json", @@ -11337,7 +11338,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "parity-scale-codec", "scale-info", @@ -11351,7 +11352,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "parity-scale-codec", "scale-info", @@ -11362,7 +11363,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "hash-db", "log", @@ -11384,12 +11385,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11402,7 +11403,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "log", "sp-core", @@ -11415,7 +11416,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "futures-timer", @@ -11431,7 +11432,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "parity-scale-codec", "sp-std", @@ -11443,7 +11444,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "sp-api", "sp-runtime", @@ -11452,7 +11453,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "log", @@ -11468,7 +11469,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "ahash", "hash-db", @@ -11491,7 +11492,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11508,7 +11509,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11519,7 +11520,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "impl-trait-for-tuples", "log", @@ -11778,7 +11779,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "platforms", ] @@ -11786,7 +11787,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11807,7 +11808,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures-util", "hyper", @@ -11820,7 +11821,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "jsonrpsee", "log", @@ -11841,7 +11842,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "futures", @@ -11867,7 +11868,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11877,7 +11878,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11888,7 +11889,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "ansi_term", "build-helper", @@ -11996,7 +11997,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "frame-support", "polkadot-primitives", @@ -12285,7 +12286,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12296,7 +12297,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12423,7 +12424,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5cdb054049980eecb449c36a7ccfe4990329c494" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "clap 3.2.19", "jsonrpsee", @@ -13001,7 +13002,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "beefy-primitives", "bitvec", @@ -13090,7 +13091,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "frame-support", "polkadot-primitives", @@ -13375,7 +13376,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13389,7 +13390,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "frame-support", "frame-system", @@ -13409,7 +13410,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "frame-benchmarking", "frame-support", @@ -13427,7 +13428,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#99d6b557c0594a35198be84d03833e5af692d109" +source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" dependencies = [ "Inflector", "proc-macro2", diff --git a/pallets/collator-selection/src/weights.rs b/pallets/collator-selection/src/weights.rs index 513e780834a..fa99567734f 100644 --- a/pallets/collator-selection/src/weights.rs +++ b/pallets/collator-selection/src/weights.rs @@ -20,7 +20,7 @@ use frame_support::{ traits::Get, - weights::{constants::RocksDbWeight, Weight}, + weights::{constants::RocksDbWeight, RefTimeWeight, Weight}, }; use sp_std::marker::PhantomData; @@ -39,91 +39,143 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { fn set_invulnerables(b: u32) -> Weight { - (18_563_000 as Weight) + Weight::from_ref_time(18_563_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((68_000 as Weight).saturating_mul(b as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add( + Weight::from_ref_time(68_000 as RefTimeWeight) + .scalar_saturating_mul(b as RefTimeWeight), + ) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } fn set_desired_candidates() -> Weight { - (16_363_000 as Weight).saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(16_363_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } fn set_candidacy_bond() -> Weight { - (16_840_000 as Weight).saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(16_840_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } fn register_as_candidate(c: u32) -> Weight { - (71_196_000 as Weight) + Weight::from_ref_time(71_196_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((198_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add( + Weight::from_ref_time(198_000 as RefTimeWeight) + .scalar_saturating_mul(c as RefTimeWeight), + ) + .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } fn leave_intent(c: u32) -> Weight { - (55_336_000 as Weight) + Weight::from_ref_time(55_336_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((151_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add( + Weight::from_ref_time(151_000 as RefTimeWeight) + .scalar_saturating_mul(c as RefTimeWeight), + ) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } fn note_author() -> Weight { - (71_461_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(71_461_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } fn new_session(r: u32, c: u32) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_010_000 - .saturating_add((109_961_000 as Weight).saturating_mul(r as Weight)) + .saturating_add( + Weight::from_ref_time(109_961_000 as RefTimeWeight) + .scalar_saturating_mul(r as RefTimeWeight), + ) // Standard Error: 1_010_000 - .saturating_add((151_952_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(r as Weight))) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(r as Weight))) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(c as Weight))) + .saturating_add( + Weight::from_ref_time(151_952_000 as RefTimeWeight) + .scalar_saturating_mul(c as RefTimeWeight), + ) + .saturating_add( + T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight)), + ) + .saturating_add( + T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight)), + ) + .saturating_add( + T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(r as RefTimeWeight)), + ) + .saturating_add( + T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight)), + ) } } // For backwards compatibility and tests impl WeightInfo for () { fn set_invulnerables(b: u32) -> Weight { - (18_563_000 as Weight) + Weight::from_ref_time(18_563_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((68_000 as Weight).saturating_mul(b as Weight)) - .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + .saturating_add( + Weight::from_ref_time(68_000 as RefTimeWeight) + .scalar_saturating_mul(b as RefTimeWeight), + ) + .saturating_add(RocksDbWeight::get().writes(1 as RefTimeWeight)) } fn set_desired_candidates() -> Weight { - (16_363_000 as Weight).saturating_add(RocksDbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(16_363_000 as RefTimeWeight) + .saturating_add(RocksDbWeight::get().writes(1 as RefTimeWeight)) } fn set_candidacy_bond() -> Weight { - (16_840_000 as Weight).saturating_add(RocksDbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(16_840_000 as RefTimeWeight) + .saturating_add(RocksDbWeight::get().writes(1 as RefTimeWeight)) } fn register_as_candidate(c: u32) -> Weight { - (71_196_000 as Weight) + Weight::from_ref_time(71_196_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((198_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(RocksDbWeight::get().reads(4 as Weight)) - .saturating_add(RocksDbWeight::get().writes(2 as Weight)) + .saturating_add( + Weight::from_ref_time(198_000 as RefTimeWeight) + .scalar_saturating_mul(c as RefTimeWeight), + ) + .saturating_add(RocksDbWeight::get().reads(4 as RefTimeWeight)) + .saturating_add(RocksDbWeight::get().writes(2 as RefTimeWeight)) } fn leave_intent(c: u32) -> Weight { - (55_336_000 as Weight) + Weight::from_ref_time(55_336_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((151_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(RocksDbWeight::get().reads(1 as Weight)) - .saturating_add(RocksDbWeight::get().writes(2 as Weight)) + .saturating_add( + Weight::from_ref_time(151_000 as RefTimeWeight) + .scalar_saturating_mul(c as RefTimeWeight), + ) + .saturating_add(RocksDbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(RocksDbWeight::get().writes(2 as RefTimeWeight)) } fn note_author() -> Weight { - (71_461_000 as Weight) - .saturating_add(RocksDbWeight::get().reads(3 as Weight)) - .saturating_add(RocksDbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(71_461_000 as RefTimeWeight) + .saturating_add(RocksDbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(RocksDbWeight::get().writes(4 as RefTimeWeight)) } fn new_session(r: u32, c: u32) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_010_000 - .saturating_add((109_961_000 as Weight).saturating_mul(r as Weight)) + .saturating_add( + Weight::from_ref_time(109_961_000 as RefTimeWeight) + .scalar_saturating_mul(r as RefTimeWeight), + ) // Standard Error: 1_010_000 - .saturating_add((151_952_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(r as Weight))) - .saturating_add(RocksDbWeight::get().reads((2 as Weight).saturating_mul(c as Weight))) - .saturating_add(RocksDbWeight::get().writes((2 as Weight).saturating_mul(r as Weight))) - .saturating_add(RocksDbWeight::get().writes((2 as Weight).saturating_mul(c as Weight))) + .saturating_add( + Weight::from_ref_time(151_952_000 as RefTimeWeight) + .scalar_saturating_mul(c as RefTimeWeight), + ) + .saturating_add( + RocksDbWeight::get().reads((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight)), + ) + .saturating_add( + RocksDbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight)), + ) + .saturating_add( + RocksDbWeight::get() + .writes((2 as RefTimeWeight).saturating_mul(r as RefTimeWeight)), + ) + .saturating_add( + RocksDbWeight::get() + .writes((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight)), + ) } } diff --git a/pallets/dmp-queue/src/lib.rs b/pallets/dmp-queue/src/lib.rs index a811bf54054..838368b76df 100644 --- a/pallets/dmp-queue/src/lib.rs +++ b/pallets/dmp-queue/src/lib.rs @@ -140,7 +140,7 @@ pub mod pallet { /// /// Events: /// - `OverweightServiced`: On success. - #[pallet::weight(weight_limit.saturating_add(1_000_000))] + #[pallet::weight(weight_limit.saturating_add(Weight::from_ref_time(1_000_000)))] pub fn service_overweight( origin: OriginFor, index: OverweightIndex, @@ -153,7 +153,7 @@ pub mod pallet { .map_err(|_| Error::::OverLimit)?; Overweight::::remove(index); Self::deposit_event(Event::OverweightServiced { overweight_index: index, weight_used }); - Ok(Some(weight_used.saturating_add(1_000_000)).into()) + Ok(Some(weight_used.saturating_add(Weight::from_ref_time(1_000_000))).into()) } } @@ -189,7 +189,7 @@ pub mod pallet { /// Exactly equivalent to `service_queue` but expects a mutable `page_index` to be passed /// in and any changes stored. fn do_service_queue(limit: Weight, page_index: &mut PageIndexData) -> Weight { - let mut used = 0; + let mut used = Weight::new(); while page_index.begin_used < page_index.end_used { let page = Pages::::take(page_index.begin_used); for (i, &(sent_at, ref data)) in page.iter().enumerate() { @@ -232,19 +232,19 @@ pub mod pallet { match maybe_msg { Err(_) => { Self::deposit_event(Event::InvalidFormat { message_id }); - Ok(0) + Ok(Weight::zero()) }, Ok(Err(())) => { Self::deposit_event(Event::UnsupportedVersion { message_id }); - Ok(0) + Ok(Weight::zero()) }, Ok(Ok(x)) => { - let outcome = T::XcmExecutor::execute_xcm(Parent, x, limit); + let outcome = T::XcmExecutor::execute_xcm(Parent, x, limit.ref_time()); match outcome { Outcome::Error(XcmError::WeightLimitReached(required)) => - Err((message_id, required)), + Err((message_id, Weight::from_ref_time(required))), outcome => { - let weight_used = outcome.weight_used(); + let weight_used = Weight::from_ref_time(outcome.weight_used()); Self::deposit_event(Event::ExecutedDownward { message_id, outcome }); Ok(weight_used) }, @@ -349,7 +349,7 @@ mod tests { }; use sp_version::RuntimeVersion; use std::cell::RefCell; - use xcm::latest::{MultiLocation, OriginKind}; + use xcm::latest::{MultiLocation, OriginKind, Weight as XCMWeight}; type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; type Block = frame_system::mocking::MockBlock; @@ -379,8 +379,8 @@ mod tests { state_version: 1, }; pub const ParachainId: ParaId = ParaId::new(200); - pub const ReservedXcmpWeight: Weight = 0; - pub const ReservedDmpWeight: Weight = 0; + pub const ReservedXcmpWeight: Weight = Weight::zero(); + pub const ReservedDmpWeight: Weight = Weight::zero(); } type AccountId = u64; @@ -429,8 +429,8 @@ mod tests { fn execute_xcm_in_credit( _origin: impl Into, message: Xcm, - weight_limit: Weight, - _credit: Weight, + weight_limit: XCMWeight, + _credit: XCMWeight, ) -> Outcome { let o = match (message.0.len(), &message.0.first()) { (1, Some(Transact { require_weight_at_most, .. })) => { @@ -478,7 +478,7 @@ mod tests { DmpQueue::handle_dmp_messages(iter, limit) } - fn msg(weight: Weight) -> Xcm { + fn msg(weight: XCMWeight) -> Xcm { Xcm(vec![Transact { origin_type: OriginKind::Native, require_weight_at_most: weight, @@ -486,11 +486,11 @@ mod tests { }]) } - fn msg_complete(weight: Weight) -> (Xcm, Outcome) { + fn msg_complete(weight: XCMWeight) -> (Xcm, Outcome) { (msg(weight), Outcome::Complete(weight)) } - fn msg_limit_reached(weight: Weight) -> (Xcm, Outcome) { + fn msg_limit_reached(weight: XCMWeight) -> (Xcm, Outcome) { (msg(weight), Outcome::Error(XcmError::WeightLimitReached(weight))) } @@ -511,8 +511,8 @@ mod tests { #[test] fn basic_setup_works() { new_test_ext().execute_with(|| { - let weight_used = handle_messages(&[], 1000); - assert_eq!(weight_used, 0); + let weight_used = handle_messages(&[], Weight::from_ref_time(1000)); + assert_eq!(weight_used, Weight::zero()); assert_eq!(take_trace(), Vec::new()); assert!(queue_is_empty()); }); @@ -522,8 +522,8 @@ mod tests { fn service_inline_complete_works() { new_test_ext().execute_with(|| { let incoming = vec![msg(1000), msg(1001)]; - let weight_used = handle_messages(&incoming, 2500); - assert_eq!(weight_used, 2001); + let weight_used = handle_messages(&incoming, Weight::from_ref_time(2500)); + assert_eq!(weight_used, Weight::from_ref_time(2001)); assert_eq!(take_trace(), vec![msg_complete(1000), msg_complete(1001)]); assert!(queue_is_empty()); }); @@ -534,8 +534,8 @@ mod tests { new_test_ext().execute_with(|| { let enqueued = vec![msg(1000), msg(1001), msg(1002)]; enqueue(&enqueued); - let weight_used = handle_messages(&[], 2500); - assert_eq!(weight_used, 2001); + let weight_used = handle_messages(&[], Weight::from_ref_time(2500)); + assert_eq!(weight_used, Weight::from_ref_time(2001)); assert_eq!( take_trace(), vec![msg_complete(1000), msg_complete(1001), msg_limit_reached(1002),] @@ -547,8 +547,8 @@ mod tests { fn enqueue_works() { new_test_ext().execute_with(|| { let incoming = vec![msg(1000), msg(1001), msg(1002)]; - let weight_used = handle_messages(&incoming, 999); - assert_eq!(weight_used, 0); + let weight_used = handle_messages(&incoming, Weight::from_ref_time(999)); + assert_eq!(weight_used, Weight::zero()); assert_eq!( PageIndex::::get(), PageIndexData { begin_used: 0, end_used: 1, overweight_count: 0 } @@ -556,15 +556,15 @@ mod tests { assert_eq!(Pages::::get(0).len(), 3); assert_eq!(take_trace(), vec![msg_limit_reached(1000)]); - let weight_used = handle_messages(&[], 2500); - assert_eq!(weight_used, 2001); + let weight_used = handle_messages(&[], Weight::from_ref_time(2500)); + assert_eq!(weight_used, Weight::from_ref_time(2001)); assert_eq!( take_trace(), vec![msg_complete(1000), msg_complete(1001), msg_limit_reached(1002),] ); - let weight_used = handle_messages(&[], 2500); - assert_eq!(weight_used, 1002); + let weight_used = handle_messages(&[], Weight::from_ref_time(2500)); + assert_eq!(weight_used, Weight::from_ref_time(1002)); assert_eq!(take_trace(), vec![msg_complete(1002),]); assert!(queue_is_empty()); }); @@ -574,14 +574,14 @@ mod tests { fn service_inline_then_enqueue_works() { new_test_ext().execute_with(|| { let incoming = vec![msg(1000), msg(1001), msg(1002)]; - let weight_used = handle_messages(&incoming, 1500); - assert_eq!(weight_used, 1000); + let weight_used = handle_messages(&incoming, Weight::from_ref_time(1500)); + assert_eq!(weight_used, Weight::from_ref_time(1000)); assert_eq!(pages_queued(), 1); assert_eq!(Pages::::get(0).len(), 2); assert_eq!(take_trace(), vec![msg_complete(1000), msg_limit_reached(1001),]); - let weight_used = handle_messages(&[], 2500); - assert_eq!(weight_used, 2003); + let weight_used = handle_messages(&[], Weight::from_ref_time(2500)); + assert_eq!(weight_used, Weight::from_ref_time(2003)); assert_eq!(take_trace(), vec![msg_complete(1001), msg_complete(1002),]); assert!(queue_is_empty()); }); @@ -593,8 +593,8 @@ mod tests { let enqueued = vec![msg(1000), msg(1001)]; let incoming = vec![msg(1002), msg(1003)]; enqueue(&enqueued); - let weight_used = handle_messages(&incoming, 5000); - assert_eq!(weight_used, 4006); + let weight_used = handle_messages(&incoming, Weight::from_ref_time(5000)); + assert_eq!(weight_used, Weight::from_ref_time(4006)); assert_eq!( take_trace(), vec![ @@ -614,19 +614,19 @@ mod tests { let enqueued = vec![msg(1000), msg(10001)]; let incoming = vec![msg(1002), msg(1003)]; enqueue(&enqueued); - let weight_used = handle_messages(&incoming, 5000); - assert_eq!(weight_used, 1000); + let weight_used = handle_messages(&incoming, Weight::from_ref_time(5000)); + assert_eq!(weight_used, Weight::from_ref_time(1000)); assert_eq!(take_trace(), vec![msg_complete(1000), msg_limit_reached(10001),]); assert_eq!(pages_queued(), 2); // 5000 is not enough to process the 10001 blocker, so nothing happens. - let weight_used = handle_messages(&[], 5000); - assert_eq!(weight_used, 0); + let weight_used = handle_messages(&[], Weight::from_ref_time(5000)); + assert_eq!(weight_used, Weight::zero()); assert_eq!(take_trace(), vec![msg_limit_reached(10001),]); // 20000 is now enough to process everything. - let weight_used = handle_messages(&[], 20000); - assert_eq!(weight_used, 12006); + let weight_used = handle_messages(&[], Weight::from_ref_time(20000)); + assert_eq!(weight_used, Weight::from_ref_time(12006)); assert_eq!( take_trace(), vec![msg_complete(10001), msg_complete(1002), msg_complete(1003),] @@ -641,8 +641,8 @@ mod tests { let enqueued = vec![msg(1000), msg(1001)]; let incoming = vec![msg(10002), msg(1003)]; enqueue(&enqueued); - let weight_used = handle_messages(&incoming, 5000); - assert_eq!(weight_used, 2001); + let weight_used = handle_messages(&incoming, Weight::from_ref_time(5000)); + assert_eq!(weight_used, Weight::from_ref_time(2001)); assert_eq!( take_trace(), vec![msg_complete(1000), msg_complete(1001), msg_limit_reached(10002),] @@ -650,8 +650,8 @@ mod tests { assert_eq!(pages_queued(), 1); // 20000 is now enough to process everything. - let weight_used = handle_messages(&[], 20000); - assert_eq!(weight_used, 11005); + let weight_used = handle_messages(&[], Weight::from_ref_time(20000)); + assert_eq!(weight_used, Weight::from_ref_time(11005)); assert_eq!(take_trace(), vec![msg_complete(10002), msg_complete(1003),]); assert!(queue_is_empty()); }); @@ -663,8 +663,8 @@ mod tests { let enqueued = vec![msg(1000), msg(1001)]; let incoming = vec![msg(1002), msg(10003)]; enqueue(&enqueued); - let weight_used = handle_messages(&incoming, 5000); - assert_eq!(weight_used, 3003); + let weight_used = handle_messages(&incoming, Weight::from_ref_time(5000)); + assert_eq!(weight_used, Weight::from_ref_time(3003)); assert_eq!( take_trace(), vec![ @@ -677,8 +677,8 @@ mod tests { assert_eq!(pages_queued(), 1); // 20000 is now enough to process everything. - let weight_used = handle_messages(&[], 20000); - assert_eq!(weight_used, 10003); + let weight_used = handle_messages(&[], Weight::from_ref_time(20000)); + assert_eq!(weight_used, Weight::from_ref_time(10003)); assert_eq!(take_trace(), vec![msg_complete(10003),]); assert!(queue_is_empty()); }); @@ -689,20 +689,20 @@ mod tests { new_test_ext().execute_with(|| { let enqueued = vec![msg(1000), msg(1001)]; enqueue(&enqueued); - let weight_used = handle_messages(&vec![msg(1002)], 1500); - assert_eq!(weight_used, 1000); + let weight_used = handle_messages(&vec![msg(1002)], Weight::from_ref_time(1500)); + assert_eq!(weight_used, Weight::from_ref_time(1000)); assert_eq!(take_trace(), vec![msg_complete(1000), msg_limit_reached(1001),]); assert_eq!(pages_queued(), 2); assert_eq!(PageIndex::::get().begin_used, 0); - let weight_used = handle_messages(&vec![msg(1003)], 1500); - assert_eq!(weight_used, 1001); + let weight_used = handle_messages(&vec![msg(1003)], Weight::from_ref_time(1500)); + assert_eq!(weight_used, Weight::from_ref_time(1001)); assert_eq!(take_trace(), vec![msg_complete(1001), msg_limit_reached(1002),]); assert_eq!(pages_queued(), 2); assert_eq!(PageIndex::::get().begin_used, 1); - let weight_used = handle_messages(&vec![msg(1004)], 1500); - assert_eq!(weight_used, 1002); + let weight_used = handle_messages(&vec![msg(1004)], Weight::from_ref_time(1500)); + assert_eq!(weight_used, Weight::from_ref_time(1002)); assert_eq!(take_trace(), vec![msg_complete(1002), msg_limit_reached(1003),]); assert_eq!(pages_queued(), 2); assert_eq!(PageIndex::::get().begin_used, 2); @@ -713,11 +713,11 @@ mod tests { fn overweight_should_not_block_queue() { new_test_ext().execute_with(|| { // Set the overweight threshold to 9999. - Configuration::::put(ConfigData { max_individual: 9999 }); + Configuration::::put(ConfigData { max_individual: Weight::from_ref_time(9999) }); let incoming = vec![msg(1000), msg(10001), msg(1002)]; - let weight_used = handle_messages(&incoming, 2500); - assert_eq!(weight_used, 2002); + let weight_used = handle_messages(&incoming, Weight::from_ref_time(2500)); + assert_eq!(weight_used, Weight::from_ref_time(2002)); assert!(queue_is_empty()); assert_eq!( take_trace(), @@ -732,37 +732,43 @@ mod tests { fn overweights_should_be_manually_executable() { new_test_ext().execute_with(|| { // Set the overweight threshold to 9999. - Configuration::::put(ConfigData { max_individual: 9999 }); + Configuration::::put(ConfigData { max_individual: Weight::from_ref_time(9999) }); let incoming = vec![msg(10000)]; - let weight_used = handle_messages(&incoming, 2500); - assert_eq!(weight_used, 0); + let weight_used = handle_messages(&incoming, Weight::from_ref_time(2500)); + assert_eq!(weight_used, Weight::zero()); assert_eq!(take_trace(), vec![msg_limit_reached(10000)]); assert_eq!(overweights(), vec![0]); - assert_noop!(DmpQueue::service_overweight(Origin::signed(1), 0, 20000), BadOrigin); assert_noop!( - DmpQueue::service_overweight(Origin::root(), 1, 20000), + DmpQueue::service_overweight(Origin::signed(1), 0, Weight::from_ref_time(20000)), + BadOrigin + ); + assert_noop!( + DmpQueue::service_overweight(Origin::root(), 1, Weight::from_ref_time(20000)), Error::::Unknown ); assert_noop!( - DmpQueue::service_overweight(Origin::root(), 0, 9999), + DmpQueue::service_overweight(Origin::root(), 0, Weight::from_ref_time(9999)), Error::::OverLimit ); assert_eq!(take_trace(), vec![msg_limit_reached(10000)]); - let base_weight = super::Call::::service_overweight { index: 0, weight_limit: 0 } - .get_dispatch_info() - .weight; + let base_weight = + super::Call::::service_overweight { index: 0, weight_limit: Weight::zero() } + .get_dispatch_info() + .weight; use frame_support::weights::GetDispatchInfo; - let info = DmpQueue::service_overweight(Origin::root(), 0, 20000).unwrap(); + let info = + DmpQueue::service_overweight(Origin::root(), 0, Weight::from_ref_time(20000)) + .unwrap(); let actual_weight = info.actual_weight.unwrap(); - assert_eq!(actual_weight, base_weight + 10000); + assert_eq!(actual_weight, base_weight + Weight::from_ref_time(10000)); assert_eq!(take_trace(), vec![msg_complete(10000)]); assert!(overweights().is_empty()); assert_noop!( - DmpQueue::service_overweight(Origin::root(), 0, 20000), + DmpQueue::service_overweight(Origin::root(), 0, Weight::from_ref_time(20000)), Error::::Unknown ); }); @@ -775,8 +781,8 @@ mod tests { enqueue(&vec![msg(1002), msg(1003)]); enqueue(&vec![msg(1004), msg(1005)]); - let weight_used = DmpQueue::on_idle(1, 6000); - assert_eq!(weight_used, 5010); + let weight_used = DmpQueue::on_idle(1, Weight::from_ref_time(6000)); + assert_eq!(weight_used, Weight::from_ref_time(5010)); assert_eq!( take_trace(), vec![ diff --git a/pallets/parachain-system/src/lib.rs b/pallets/parachain-system/src/lib.rs index b9056d5dcad..f897d5943bc 100644 --- a/pallets/parachain-system/src/lib.rs +++ b/pallets/parachain-system/src/lib.rs @@ -269,7 +269,7 @@ pub mod pallet { } fn on_initialize(_n: T::BlockNumber) -> Weight { - let mut weight = 0; + let mut weight = Weight::new(); // To prevent removing `NewValidationCode` that was set by another `on_initialize` // like for example from scheduler, we only kill the storage entry if it was not yet @@ -416,7 +416,7 @@ pub mod pallet { ::on_validation_data(&vfp); // TODO: This is more than zero, but will need benchmarking to figure out what. - let mut total_weight = 0; + let mut total_weight = Weight::zero(); total_weight += Self::process_inbound_downward_messages( relevant_messaging_state.dmq_mqc_head, downward_messages, @@ -808,7 +808,7 @@ impl Pallet { let dm_count = downward_messages.len() as u32; let mut dmq_head = >::get(); - let mut weight_used = 0; + let mut weight_used = Weight::new(); if dm_count != 0 { Self::deposit_event(Event::DownwardMessagesReceived { count: dm_count }); let max_weight = diff --git a/pallets/parachain-system/src/migration.rs b/pallets/parachain-system/src/migration.rs index b3738d21512..4826ec741dd 100644 --- a/pallets/parachain-system/src/migration.rs +++ b/pallets/parachain-system/src/migration.rs @@ -25,7 +25,7 @@ pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); /// Call this during the next runtime upgrade for this module. pub fn on_runtime_upgrade() -> Weight { - let mut weight: Weight = 0; + let mut weight: Weight = Weight::new(); if StorageVersion::get::>() == 0 { weight = weight diff --git a/pallets/parachain-system/src/tests.rs b/pallets/parachain-system/src/tests.rs index 65896fa9b29..9e3fa908e30 100755 --- a/pallets/parachain-system/src/tests.rs +++ b/pallets/parachain-system/src/tests.rs @@ -69,8 +69,8 @@ parameter_types! { state_version: 1, }; pub const ParachainId: ParaId = ParaId::new(200); - pub const ReservedXcmpWeight: Weight = 0; - pub const ReservedDmpWeight: Weight = 0; + pub const ReservedXcmpWeight: Weight = Weight::zero(); + pub const ReservedDmpWeight: Weight = Weight::zero(); } impl frame_system::Config for Test { type Origin = Origin; @@ -155,7 +155,7 @@ impl DmpMessageHandler for SaveIntoThreadLocal { for i in iter { m.borrow_mut().push(i); } - 0 + Weight::zero() }) } } @@ -169,7 +169,7 @@ impl XcmpMessageHandler for SaveIntoThreadLocal { for (sender, sent_at, message) in iter { m.borrow_mut().push((sender, sent_at, message.to_vec())); } - 0 + Weight::zero() }) } } diff --git a/pallets/solo-to-para/src/lib.rs b/pallets/solo-to-para/src/lib.rs index 202d91cae9a..8a0b7dd2f22 100644 --- a/pallets/solo-to-para/src/lib.rs +++ b/pallets/solo-to-para/src/lib.rs @@ -169,7 +169,7 @@ pub mod pallet { if *who == root_account { Ok(ValidTransaction { - priority: info.weight as TransactionPriority, + priority: info.weight.ref_time() as TransactionPriority, longevity: TransactionLongevity::max_value(), propagate: true, ..Default::default() diff --git a/pallets/xcm/src/lib.rs b/pallets/xcm/src/lib.rs index 9659e65b7ff..d33e3c669d0 100644 --- a/pallets/xcm/src/lib.rs +++ b/pallets/xcm/src/lib.rs @@ -111,7 +111,7 @@ impl DmpMessageHandler for UnlimitedDmpExecution { iter: impl Iterator)>, limit: Weight, ) -> Weight { - let mut used = 0; + let mut used = Weight::new(); for (_sent_at, data) in iter { let id = sp_io::hashing::twox_64(&data[..]); let msg = VersionedXcm::::decode_all_with_depth_limit( @@ -123,8 +123,8 @@ impl DmpMessageHandler for UnlimitedDmpExecution { Err(_) => Pallet::::deposit_event(Event::InvalidFormat(id)), Ok(Err(())) => Pallet::::deposit_event(Event::UnsupportedVersion(id)), Ok(Ok(x)) => { - let outcome = T::XcmExecutor::execute_xcm(Parent, x, limit); - used += outcome.weight_used(); + let outcome = T::XcmExecutor::execute_xcm(Parent, x, limit.ref_time()); + used += Weight::from_ref_time(outcome.weight_used()); Pallet::::deposit_event(Event::ExecutedDownward(id, outcome)); }, } @@ -144,7 +144,7 @@ impl DmpMessageHandler for LimitAndDropDmpExecution { iter: impl Iterator)>, limit: Weight, ) -> Weight { - let mut used = 0; + let mut used = Weight::new(); for (_sent_at, data) in iter { let id = sp_io::hashing::twox_64(&data[..]); let msg = VersionedXcm::::decode_all_with_depth_limit( @@ -157,8 +157,8 @@ impl DmpMessageHandler for LimitAndDropDmpExecution { Ok(Err(())) => Pallet::::deposit_event(Event::UnsupportedVersion(id)), Ok(Ok(x)) => { let weight_limit = limit.saturating_sub(used); - let outcome = T::XcmExecutor::execute_xcm(Parent, x, weight_limit); - used += outcome.weight_used(); + let outcome = T::XcmExecutor::execute_xcm(Parent, x, weight_limit.ref_time()); + used += Weight::from_ref_time(outcome.weight_used()); Pallet::::deposit_event(Event::ExecutedDownward(id, outcome)); }, } diff --git a/pallets/xcmp-queue/src/benchmarking.rs b/pallets/xcmp-queue/src/benchmarking.rs index 29245870a3a..5ac78bee763 100644 --- a/pallets/xcmp-queue/src/benchmarking.rs +++ b/pallets/xcmp-queue/src/benchmarking.rs @@ -22,7 +22,7 @@ use frame_system::RawOrigin; benchmarks! { set_config_with_u32 {}: update_resume_threshold(RawOrigin::Root, 100) - set_config_with_weight {}: update_weight_restrict_decay(RawOrigin::Root, 3_000_000 as Weight) + set_config_with_weight {}: update_weight_restrict_decay(RawOrigin::Root, Weight::from_ref_time(3_000_000)) } impl_benchmark_test_suite!(Pallet, crate::mock::new_test_ext(), crate::mock::Test); diff --git a/pallets/xcmp-queue/src/lib.rs b/pallets/xcmp-queue/src/lib.rs index 2b1bdac2b8b..85e1ea7cfea 100644 --- a/pallets/xcmp-queue/src/lib.rs +++ b/pallets/xcmp-queue/src/lib.rs @@ -130,7 +130,7 @@ pub mod pallet { /// /// Events: /// - `OverweightServiced`: On success. - #[pallet::weight((weight_limit.saturating_add(1_000_000), DispatchClass::Operational,))] + #[pallet::weight((weight_limit.saturating_add(Weight::from_ref_time(1_000_000)), DispatchClass::Operational,))] pub fn service_overweight( origin: OriginFor, index: OverweightIndex, @@ -149,7 +149,7 @@ pub mod pallet { .map_err(|_| Error::::WeightOverLimit)?; Overweight::::remove(index); Self::deposit_event(Event::OverweightServiced { index, used }); - Ok(Some(used.saturating_add(1_000_000)).into()) + Ok(Some(used.saturating_add(Weight::from_ref_time(1_000_000))).into()) } /// Suspends all XCM executions for the XCMP queue, regardless of the sender's origin. @@ -449,8 +449,8 @@ impl Default for QueueConfigData { suspend_threshold: 2, drop_threshold: 5, resume_threshold: 1, - threshold_weight: 100_000, - weight_restrict_decay: 2, + threshold_weight: Weight::from_ref_time(100_000), + weight_restrict_decay: Weight::from_ref_time(2), xcmp_max_individual_weight: 20 * WEIGHT_PER_MILLIS, } } @@ -605,15 +605,28 @@ impl Pallet { Ok(xcm) => { let location = (1, Parachain(sender.into())); - match T::XcmExecutor::execute_xcm(location, xcm, max_weight) { - Outcome::Error(e) => - (Err(e), Event::Fail { message_hash: Some(hash), error: e, weight: 0 }), - Outcome::Complete(w) => - (Ok(w), Event::Success { message_hash: Some(hash), weight: w }), + match T::XcmExecutor::execute_xcm(location, xcm, max_weight.ref_time()) { + Outcome::Error(e) => ( + Err(e), + Event::Fail { message_hash: Some(hash), error: e, weight: Weight::zero() }, + ), + Outcome::Complete(w) => ( + Ok(Weight::from_ref_time(w)), + Event::Success { + message_hash: Some(hash), + weight: Weight::from_ref_time(w), + }, + ), // As far as the caller is concerned, this was dispatched without error, so // we just report the weight used. - Outcome::Incomplete(w, e) => - (Ok(w), Event::Fail { message_hash: Some(hash), error: e, weight: w }), + Outcome::Incomplete(w, e) => ( + Ok(Weight::from_ref_time(w)), + Event::Fail { + message_hash: Some(hash), + error: e, + weight: Weight::from_ref_time(w), + }, + ), } }, Err(()) => @@ -632,7 +645,7 @@ impl Pallet { let data = >::get(sender, sent_at); let mut last_remaining_fragments; let mut remaining_fragments = &data[..]; - let mut weight_used = 0; + let mut weight_used = Weight::zero(); match format { XcmpMessageFormat::ConcatenatedVersionedXcm => { while !remaining_fragments.is_empty() { @@ -645,7 +658,7 @@ impl Pallet { match Self::handle_xcm_message(sender, sent_at, xcm, weight) { Ok(used) => weight_used = weight_used.saturating_add(used), Err(XcmError::WeightLimitReached(required)) - if required > max_individual_weight => + if required > max_individual_weight.ref_time() => { // overweight - add to overweight queue and continue with message // execution consuming the message. @@ -654,12 +667,16 @@ impl Pallet { .saturating_sub(remaining_fragments.len()); let overweight_xcm = last_remaining_fragments[..msg_len].to_vec(); let index = Self::stash_overweight(sender, sent_at, overweight_xcm); - let e = - Event::OverweightEnqueued { sender, sent_at, index, required }; + let e = Event::OverweightEnqueued { + sender, + sent_at, + index, + required: Weight::from_ref_time(required), + }; Self::deposit_event(e); }, Err(XcmError::WeightLimitReached(required)) - if required <= max_weight => + if required <= max_weight.ref_time() => { // That message didn't get processed this time because of being // too heavy. We leave it around for next time and bail. @@ -766,7 +783,7 @@ impl Pallet { let mut status = >::get(); // <- sorted. if status.is_empty() { - return 0 + return Weight::zero() } let QueueConfigData { @@ -778,8 +795,8 @@ impl Pallet { } = >::get(); let mut shuffled = Self::create_shuffle(status.len()); - let mut weight_used = 0; - let mut weight_available = 0; + let mut weight_used = Weight::new(); + let mut weight_available = Weight::new(); // We don't want the possibility of a chain sending a series of really heavy messages and // tying up the block's execution time from other chains. Therefore we execute any remaining @@ -813,7 +830,7 @@ impl Pallet { // on the first round to unlocking everything, then we do so. if shuffle_index < status.len() { weight_available += - (max_weight - weight_available) / (weight_restrict_decay + 1); + (max_weight - weight_available) / (weight_restrict_decay.ref_time() + 1); if weight_available + threshold_weight > max_weight { weight_available = max_weight; } @@ -824,7 +841,7 @@ impl Pallet { let weight_processed = if status[index].message_metadata.is_empty() { debug_assert!(false, "channel exists in status; there must be messages; qed"); - 0 + Weight::zero() } else { // Process up to one block's worth for now. let weight_remaining = weight_available.saturating_sub(weight_used); @@ -854,7 +871,7 @@ impl Pallet { // other channels a look in. If we've still not unlocked all weight, then we set them // up for processing a second time anyway. if !status[index].message_metadata.is_empty() && - (weight_processed > 0 || weight_available != max_weight) + (weight_processed > Weight::zero() || weight_available != max_weight) { if shuffle_index + 1 == shuffled.len() { // Only this queue left. Just run around this loop once more. diff --git a/pallets/xcmp-queue/src/migration.rs b/pallets/xcmp-queue/src/migration.rs index db5833e2df7..77da447e8d1 100644 --- a/pallets/xcmp-queue/src/migration.rs +++ b/pallets/xcmp-queue/src/migration.rs @@ -25,7 +25,7 @@ pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); /// Migrates the pallet storage to the most recent version, checking and setting the /// `StorageVersion`. pub fn migrate_to_latest() -> Weight { - let mut weight = 0; + let mut weight = Weight::new(); if StorageVersion::get::>() == 0 { weight += migrate_to_v1::(); @@ -54,8 +54,8 @@ mod v0 { suspend_threshold: 2, drop_threshold: 5, resume_threshold: 1, - threshold_weight: 100_000, - weight_restrict_decay: 2, + threshold_weight: Weight::from_ref_time(100_000), + weight_restrict_decay: Weight::from_ref_time(2), } } } @@ -102,8 +102,8 @@ mod tests { suspend_threshold: 5, drop_threshold: 12, resume_threshold: 3, - threshold_weight: 333_333, - weight_restrict_decay: 1, + threshold_weight: Weight::from_ref_time(333_333), + weight_restrict_decay: Weight::one(), }; new_test_ext().execute_with(|| { @@ -122,7 +122,7 @@ mod tests { assert_eq!(v0.resume_threshold, v1.resume_threshold); assert_eq!(v0.threshold_weight, v1.threshold_weight); assert_eq!(v0.weight_restrict_decay, v1.weight_restrict_decay); - assert_eq!(v1.xcmp_max_individual_weight, 20_000_000_000); + assert_eq!(v1.xcmp_max_individual_weight, Weight::from_ref_time(20_000_000_000)); }); } } diff --git a/pallets/xcmp-queue/src/mock.rs b/pallets/xcmp-queue/src/mock.rs index 60aff179b82..9d945314e39 100644 --- a/pallets/xcmp-queue/src/mock.rs +++ b/pallets/xcmp-queue/src/mock.rs @@ -116,7 +116,7 @@ impl cumulus_pallet_parachain_system::Config for Test { parameter_types! { pub const RelayChain: MultiLocation = MultiLocation::parent(); pub Ancestry: MultiLocation = X1(Parachain(1u32.into())).into(); - pub UnitWeightCost: Weight = 1_000_000; + pub UnitWeightCost: u64 = 1_000_000; pub const MaxInstructions: u32 = 100; } diff --git a/pallets/xcmp-queue/src/tests.rs b/pallets/xcmp-queue/src/tests.rs index 62e674004ec..de0ab7e6126 100644 --- a/pallets/xcmp-queue/src/tests.rs +++ b/pallets/xcmp-queue/src/tests.rs @@ -26,7 +26,7 @@ fn one_message_does_not_panic() { let messages = vec![(Default::default(), 1u32.into(), message_format.as_slice())]; // This shouldn't cause a panic - XcmpQueue::handle_xcmp_messages(messages.into_iter(), Weight::max_value()); + XcmpQueue::handle_xcmp_messages(messages.into_iter(), Weight::MAX); }) } @@ -43,7 +43,12 @@ fn bad_message_is_handled() { InboundXcmpMessages::::insert(ParaId::from(1000), 1, bad_data); let format = XcmpMessageFormat::ConcatenatedEncodedBlob; // This should exit with an error. - XcmpQueue::process_xcmp_message(1000.into(), (1, format), 10_000_000_000, 10_000_000_000); + XcmpQueue::process_xcmp_message( + 1000.into(), + (1, format), + Weight::from_ref_time(10_000_000_000), + Weight::from_ref_time(10_000_000_000), + ); }); } @@ -61,7 +66,12 @@ fn handle_blob_message() { ]; InboundXcmpMessages::::insert(ParaId::from(1000), 1, bad_data); let format = XcmpMessageFormat::ConcatenatedEncodedBlob; - XcmpQueue::process_xcmp_message(1000.into(), (1, format), 10_000_000_000, 10_000_000_000); + XcmpQueue::process_xcmp_message( + 1000.into(), + (1, format), + Weight::from_ref_time(10_000_000_000), + Weight::from_ref_time(10_000_000_000), + ); }); } @@ -73,7 +83,12 @@ fn handle_invalid_data() { let data = Xcm::(vec![]).encode(); InboundXcmpMessages::::insert(ParaId::from(1000), 1, data); let format = XcmpMessageFormat::ConcatenatedVersionedXcm; - XcmpQueue::process_xcmp_message(1000.into(), (1, format), 10_000_000_000, 10_000_000_000); + XcmpQueue::process_xcmp_message( + 1000.into(), + (1, format), + Weight::from_ref_time(10_000_000_000), + Weight::from_ref_time(10_000_000_000), + ); }); } @@ -81,7 +96,7 @@ fn handle_invalid_data() { fn service_overweight_unknown() { new_test_ext().execute_with(|| { assert_noop!( - XcmpQueue::service_overweight(Origin::root(), 0, 1000), + XcmpQueue::service_overweight(Origin::root(), 0, Weight::from_ref_time(1000)), Error::::BadOverweightIndex, ); }); @@ -93,7 +108,10 @@ fn service_overweight_bad_xcm_format() { let bad_xcm = vec![255]; Overweight::::insert(0, (ParaId::from(1000), 0, bad_xcm)); - assert_noop!(XcmpQueue::service_overweight(Origin::root(), 0, 1000), Error::::BadXcm); + assert_noop!( + XcmpQueue::service_overweight(Origin::root(), 0, Weight::from_ref_time(1000)), + Error::::BadXcm + ); }); } @@ -108,7 +126,7 @@ fn suspend_xcm_execution_works() { let messages = vec![(ParaId::from(999), 1u32.into(), message_format.as_slice())]; // This should have executed the incoming XCM, because it came from a system parachain - XcmpQueue::handle_xcmp_messages(messages.into_iter(), Weight::max_value()); + XcmpQueue::handle_xcmp_messages(messages.into_iter(), Weight::MAX); let queued_xcm = InboundXcmpMessages::::get(ParaId::from(999), 1u32); assert!(queued_xcm.is_empty()); @@ -116,7 +134,7 @@ fn suspend_xcm_execution_works() { let messages = vec![(ParaId::from(2000), 1u32.into(), message_format.as_slice())]; // This shouldn't have executed the incoming XCM - XcmpQueue::handle_xcmp_messages(messages.into_iter(), Weight::max_value()); + XcmpQueue::handle_xcmp_messages(messages.into_iter(), Weight::MAX); let queued_xcm = InboundXcmpMessages::::get(ParaId::from(2000), 1u32); assert_eq!(queued_xcm, xcm); @@ -166,12 +184,21 @@ fn update_resume_threshold_works() { fn update_threshold_weight_works() { new_test_ext().execute_with(|| { let data: QueueConfigData = >::get(); - assert_eq!(data.threshold_weight, 100_000); - assert_ok!(XcmpQueue::update_threshold_weight(Origin::root(), 10_000)); - assert_noop!(XcmpQueue::update_threshold_weight(Origin::signed(5), 10_000_000), BadOrigin); + assert_eq!(data.threshold_weight, Weight::from_ref_time(100_000)); + assert_ok!(XcmpQueue::update_threshold_weight( + Origin::root(), + Weight::from_ref_time(10_000) + )); + assert_noop!( + XcmpQueue::update_threshold_weight( + Origin::signed(5), + Weight::from_ref_time(10_000_000) + ), + BadOrigin + ); let data: QueueConfigData = >::get(); - assert_eq!(data.threshold_weight, 10_000); + assert_eq!(data.threshold_weight, Weight::from_ref_time(10_000)); }); } @@ -179,12 +206,18 @@ fn update_threshold_weight_works() { fn update_weight_restrict_decay_works() { new_test_ext().execute_with(|| { let data: QueueConfigData = >::get(); - assert_eq!(data.weight_restrict_decay, 2); - assert_ok!(XcmpQueue::update_weight_restrict_decay(Origin::root(), 5)); - assert_noop!(XcmpQueue::update_weight_restrict_decay(Origin::signed(6), 4), BadOrigin); + assert_eq!(data.weight_restrict_decay, Weight::from_ref_time(2)); + assert_ok!(XcmpQueue::update_weight_restrict_decay( + Origin::root(), + Weight::from_ref_time(5) + )); + assert_noop!( + XcmpQueue::update_weight_restrict_decay(Origin::signed(6), Weight::from_ref_time(4)), + BadOrigin + ); let data: QueueConfigData = >::get(); - assert_eq!(data.weight_restrict_decay, 5); + assert_eq!(data.weight_restrict_decay, Weight::from_ref_time(5)); }); } diff --git a/pallets/xcmp-queue/src/weights.rs b/pallets/xcmp-queue/src/weights.rs index 559ff644e8a..0124804a80d 100644 --- a/pallets/xcmp-queue/src/weights.rs +++ b/pallets/xcmp-queue/src/weights.rs @@ -3,7 +3,7 @@ use frame_support::{ traits::Get, - weights::{constants::RocksDbWeight, Weight}, + weights::{constants::RocksDbWeight, RefTimeWeight, Weight}, }; use sp_std::marker::PhantomData; @@ -18,31 +18,31 @@ pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - (2_717_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(2_717_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - (2_717_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(2_717_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } } impl WeightInfo for () { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - (2_717_000 as Weight) - .saturating_add(RocksDbWeight::get().reads(1 as Weight)) - .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(2_717_000 as RefTimeWeight) + .saturating_add(RocksDbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(RocksDbWeight::get().writes(1 as RefTimeWeight)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - (2_717_000 as Weight) - .saturating_add(RocksDbWeight::get().reads(1 as Weight)) - .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(2_717_000 as RefTimeWeight) + .saturating_add(RocksDbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(RocksDbWeight::get().writes(1 as RefTimeWeight)) } } diff --git a/parachain-template/pallets/template/src/lib.rs b/parachain-template/pallets/template/src/lib.rs index 0afd7c6d72e..36a07d2c5e7 100644 --- a/parachain-template/pallets/template/src/lib.rs +++ b/parachain-template/pallets/template/src/lib.rs @@ -67,7 +67,7 @@ pub mod pallet { impl Pallet { /// An example dispatchable that takes a singles value as a parameter, writes the value to /// storage and emits an event. This function must be dispatched by a signed extrinsic. - #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] + #[pallet::weight(Weight::from_ref_time(10_000) + T::DbWeight::get().writes(1))] pub fn do_something(origin: OriginFor, something: u32) -> DispatchResultWithPostInfo { // Check that the extrinsic was signed and get the signer. // This function will return an error if the extrinsic is not signed. @@ -84,7 +84,7 @@ pub mod pallet { } /// An example dispatchable that may throw a custom error. - #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))] + #[pallet::weight(Weight::from_ref_time(10_000) + T::DbWeight::get().reads_writes(1,1))] pub fn cause_error(origin: OriginFor) -> DispatchResultWithPostInfo { let _who = ensure_signed(origin)?; diff --git a/parachain-template/runtime/src/lib.rs b/parachain-template/runtime/src/lib.rs index 56bfe43a160..dee56fea42c 100644 --- a/parachain-template/runtime/src/lib.rs +++ b/parachain-template/runtime/src/lib.rs @@ -135,7 +135,7 @@ impl WeightToFeePolynomial for WeightToFee { // in Rococo, extrinsic base weight (smallest non-zero weight) is mapped to 1 MILLIUNIT: // in our template, we map to 1/10 of that, or 1/10 MILLIUNIT let p = MILLIUNIT / 10; - let q = 100 * Balance::from(ExtrinsicBaseWeight::get()); + let q = 100 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); smallvec![WeightToFeeCoefficient { degree: 1, negative: false, @@ -214,7 +214,7 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(5); const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for 0.5 of a second of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND / 2; +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.scalar_div(2); /// The version information used to identify this runtime when compiled natively. #[cfg(feature = "std")] @@ -363,8 +363,8 @@ impl pallet_transaction_payment::Config for Runtime { } parameter_types! { - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4; - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4; + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); } impl cumulus_pallet_parachain_system::Config for Runtime { diff --git a/parachain-template/runtime/src/weights/block_weights.rs b/parachain-template/runtime/src/weights/block_weights.rs index 4db90f0c020..c171a1fdd71 100644 --- a/parachain-template/runtime/src/weights/block_weights.rs +++ b/parachain-template/runtime/src/weights/block_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = 5_000_000 * constants::WEIGHT_PER_NANOS; + pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(5_000_000); } #[cfg(test)] diff --git a/parachain-template/runtime/src/weights/extrinsic_weights.rs b/parachain-template/runtime/src/weights/extrinsic_weights.rs index 158ba99c6a4..6e162888356 100644 --- a/parachain-template/runtime/src/weights/extrinsic_weights.rs +++ b/parachain-template/runtime/src/weights/extrinsic_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = 125_000 * constants::WEIGHT_PER_NANOS; + pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(125_000); } #[cfg(test)] diff --git a/parachain-template/runtime/src/weights/paritydb_weights.rs b/parachain-template/runtime/src/weights/paritydb_weights.rs index 843823c1bf3..8083ccb4001 100644 --- a/parachain-template/runtime/src/weights/paritydb_weights.rs +++ b/parachain-template/runtime/src/weights/paritydb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights /// are available for brave runtime engineers who may want to try this out as default. pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 8_000 * constants::WEIGHT_PER_NANOS, - write: 50_000 * constants::WEIGHT_PER_NANOS, + read: 8_000 * constants::WEIGHT_PER_NANOS.ref_time(), + write: 50_000 * constants::WEIGHT_PER_NANOS.ref_time(), }; } diff --git a/parachain-template/runtime/src/weights/rocksdb_weights.rs b/parachain-template/runtime/src/weights/rocksdb_weights.rs index 05e06b0eabe..1db87f143f3 100644 --- a/parachain-template/runtime/src/weights/rocksdb_weights.rs +++ b/parachain-template/runtime/src/weights/rocksdb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout /// the runtime. pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000 * constants::WEIGHT_PER_NANOS, - write: 100_000 * constants::WEIGHT_PER_NANOS, + read: 25_000 * constants::WEIGHT_PER_NANOS.ref_time(), + write: 100_000 * constants::WEIGHT_PER_NANOS.ref_time(), }; } diff --git a/parachain-template/runtime/src/xcm_config.rs b/parachain-template/runtime/src/xcm_config.rs index 2ec84d18871..f01b7166ea2 100644 --- a/parachain-template/runtime/src/xcm_config.rs +++ b/parachain-template/runtime/src/xcm_config.rs @@ -6,12 +6,11 @@ use core::marker::PhantomData; use frame_support::{ log, match_types, parameter_types, traits::{Everything, Nothing}, - weights::Weight, }; use pallet_xcm::XcmPassthrough; use polkadot_parachain::primitives::Sibling; use polkadot_runtime_common::impls::ToAuthor; -use xcm::latest::prelude::*; +use xcm::latest::{prelude::*, Weight as XCMWeight}; use xcm_builder::{ AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, IsConcrete, LocationInverter, NativeAsset, ParentIsPreset, @@ -77,7 +76,7 @@ pub type XcmOriginToTransactDispatchOrigin = ( parameter_types! { // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. - pub UnitWeightCost: Weight = 1_000_000_000; + pub UnitWeightCost: u64 = 1_000_000_000; pub const MaxInstructions: u32 = 100; } @@ -104,8 +103,8 @@ where fn should_execute( origin: &MultiLocation, message: &mut Xcm, - max_weight: Weight, - weight_credit: &mut Weight, + max_weight: XCMWeight, + weight_credit: &mut XCMWeight, ) -> Result<(), ()> { Deny::should_execute(origin, message, max_weight, weight_credit)?; Allow::should_execute(origin, message, max_weight, weight_credit) @@ -118,8 +117,8 @@ impl ShouldExecute for DenyReserveTransferToRelayChain { fn should_execute( origin: &MultiLocation, message: &mut Xcm, - _max_weight: Weight, - _weight_credit: &mut Weight, + _max_weight: XCMWeight, + _weight_credit: &mut XCMWeight, ) -> Result<(), ()> { if message.0.iter().any(|inst| { matches!( diff --git a/parachains/common/src/lib.rs b/parachains/common/src/lib.rs index fcec189a210..61a511fb965 100644 --- a/parachains/common/src/lib.rs +++ b/parachains/common/src/lib.rs @@ -92,7 +92,7 @@ mod constants { pub const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for 0.5 seconds of compute with a 6 second average block time. - pub const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND / 2; + pub const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.scalar_div(2); } /// Opaque types. These are used by the CLI to instantiate machinery that don't need to know diff --git a/parachains/common/src/xcm_config.rs b/parachains/common/src/xcm_config.rs index aba8ffa29dd..7f796666d81 100644 --- a/parachains/common/src/xcm_config.rs +++ b/parachains/common/src/xcm_config.rs @@ -6,7 +6,7 @@ use frame_support::{ weights::{Weight, WeightToFee, WeightToFeePolynomial}, }; use sp_runtime::traits::Get; -use xcm::latest::prelude::*; +use xcm::latest::{prelude::*, Weight as XCMWeight}; use xcm_executor::traits::{FilterAssetLocation, ShouldExecute}; //TODO: move DenyThenTry to polkadot's xcm module. @@ -25,8 +25,8 @@ where fn should_execute( origin: &MultiLocation, message: &mut Xcm, - max_weight: Weight, - weight_credit: &mut Weight, + max_weight: XCMWeight, + weight_credit: &mut XCMWeight, ) -> Result<(), ()> { Deny::should_execute(origin, message, max_weight, weight_credit)?; Allow::should_execute(origin, message, max_weight, weight_credit) @@ -39,8 +39,8 @@ impl ShouldExecute for DenyReserveTransferToRelayChain { fn should_execute( origin: &MultiLocation, message: &mut Xcm, - _max_weight: Weight, - _weight_credit: &mut Weight, + _max_weight: XCMWeight, + _weight_credit: &mut XCMWeight, ) -> Result<(), ()> { if message.0.iter().any(|inst| { matches!( diff --git a/parachains/runtimes/assets/statemine/src/constants.rs b/parachains/runtimes/assets/statemine/src/constants.rs index fabc09d017a..6dccf0089ca 100644 --- a/parachains/runtimes/assets/statemine/src/constants.rs +++ b/parachains/runtimes/assets/statemine/src/constants.rs @@ -61,7 +61,7 @@ pub mod fee { // in Kusama, extrinsic base weight (smallest non-zero weight) is mapped to 1/10 CENT: // in Statemine, we map to 1/10 of that, or 1/100 CENT let p = super::currency::CENTS; - let q = 100 * Balance::from(ExtrinsicBaseWeight::get()); + let q = 100 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); smallvec![WeightToFeeCoefficient { degree: 1, negative: false, diff --git a/parachains/runtimes/assets/statemine/src/lib.rs b/parachains/runtimes/assets/statemine/src/lib.rs index 9bbfabea2fa..ebb7bd00d5d 100644 --- a/parachains/runtimes/assets/statemine/src/lib.rs +++ b/parachains/runtimes/assets/statemine/src/lib.rs @@ -407,8 +407,8 @@ impl pallet_proxy::Config for Runtime { } parameter_types! { - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4; - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4; + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); } impl cumulus_pallet_parachain_system::Config for Runtime { diff --git a/parachains/runtimes/assets/statemine/src/weights/block_weights.rs b/parachains/runtimes/assets/statemine/src/weights/block_weights.rs index 4db90f0c020..c171a1fdd71 100644 --- a/parachains/runtimes/assets/statemine/src/weights/block_weights.rs +++ b/parachains/runtimes/assets/statemine/src/weights/block_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = 5_000_000 * constants::WEIGHT_PER_NANOS; + pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(5_000_000); } #[cfg(test)] diff --git a/parachains/runtimes/assets/statemine/src/weights/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/assets/statemine/src/weights/cumulus_pallet_xcmp_queue.rs index fe16b470b1e..862bbcf3c1c 100644 --- a/parachains/runtimes/assets/statemine/src/weights/cumulus_pallet_xcmp_queue.rs +++ b/parachains/runtimes/assets/statemine/src/weights/cumulus_pallet_xcmp_queue.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `cumulus_pallet_xcmp_queue`. @@ -48,14 +48,14 @@ pub struct WeightInfo(PhantomData); impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - (5_634_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(5_634_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - (5_559_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(5_559_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs b/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs index 158ba99c6a4..6e162888356 100644 --- a/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = 125_000 * constants::WEIGHT_PER_NANOS; + pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(125_000); } #[cfg(test)] diff --git a/parachains/runtimes/assets/statemine/src/weights/frame_system.rs b/parachains/runtimes/assets/statemine/src/weights/frame_system.rs index 58e679ffb89..809da49b4ae 100644 --- a/parachains/runtimes/assets/statemine/src/weights/frame_system.rs +++ b/parachains/runtimes/assets/statemine/src/weights/frame_system.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `frame_system`. @@ -48,43 +48,43 @@ pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. fn remark(_b: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(b as Weight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) fn set_heap_pages() -> Weight { - (5_461_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(5_461_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn set_storage(i: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((622_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + .saturating_add(Weight::from_ref_time(622_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn kill_storage(i: u32, ) -> Weight { - (351_000 as Weight) + Weight::from_ref_time(351_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((513_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + .saturating_add(Weight::from_ref_time(513_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `p` is `[1, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((1_054_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(p as Weight))) + .saturating_add(Weight::from_ref_time(1_054_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(p as RefTimeWeight))) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs index 5e6847175de..fa7cc632645 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_assets`. @@ -48,15 +48,15 @@ pub struct WeightInfo(PhantomData); impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:1) fn create() -> Weight { - (26_670_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(26_670_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) fn force_create() -> Weight { - (15_063_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(15_063_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:5002 w:5001) @@ -67,165 +67,165 @@ impl pallet_assets::WeightInfo for WeightInfo { /// The range of component `s` is `[0, 5000]`. /// The range of component `a` is `[0, 500]`. fn destroy(c: u32, s: u32, a: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 46_000 - .saturating_add((16_382_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(Weight::from_ref_time(16_382_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) // Standard Error: 46_000 - .saturating_add((19_187_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(19_187_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 465_000 - .saturating_add((16_818_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(s as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(s as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(a as Weight))) + .saturating_add(Weight::from_ref_time(16_818_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) + .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(s as RefTimeWeight))) + .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(s as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn mint() -> Weight { - (29_655_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(29_655_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn burn() -> Weight { - (33_648_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(33_648_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - (47_414_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(47_414_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - (39_871_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(39_871_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn force_transfer() -> Weight { - (47_454_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(47_454_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn freeze() -> Weight { - (20_827_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(20_827_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn thaw() -> Weight { - (21_249_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(21_249_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) fn freeze_asset() -> Weight { - (17_775_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_775_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) fn thaw_asset() -> Weight { - (17_917_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_917_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Metadata (r:1 w:0) fn transfer_ownership() -> Weight { - (18_724_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(18_724_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) fn set_team() -> Weight { - (17_448_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_448_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn set_metadata(_n: u32, _s: u32, ) -> Weight { - (31_859_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(31_859_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn clear_metadata() -> Weight { - (31_293_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(31_293_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn force_set_metadata(_n: u32, _s: u32, ) -> Weight { - (19_595_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(19_595_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn force_clear_metadata() -> Weight { - (31_366_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(31_366_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) fn force_asset_status() -> Weight { - (16_884_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(16_884_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn approve_transfer() -> Weight { - (34_730_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(34_730_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Assets Approvals (r:1 w:1) // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_approved() -> Weight { - (59_797_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) + Weight::from_ref_time(59_797_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(5 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn cancel_approval() -> Weight { - (35_178_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(35_178_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn force_cancel_approval() -> Weight { - (36_840_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(36_840_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs index 346712c553d..0acb50fc169 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. @@ -48,44 +48,44 @@ pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - (41_804_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(41_804_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - (31_899_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(31_899_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { - (20_638_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(20_638_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { - (24_081_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(24_081_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { - (41_357_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(41_357_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { - (37_382_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(37_382_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { - (18_476_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(18_476_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs index d7aaeceeefa..aa51ad7e366 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_collator_selection`. @@ -50,21 +50,21 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection Invulnerables (r:0 w:1) /// The range of component `b` is `[1, 100]`. fn set_invulnerables(b: u32, ) -> Weight { - (8_196_000 as Weight) + Weight::from_ref_time(8_196_000 as RefTimeWeight) // Standard Error: 3_000 - .saturating_add((3_354_000 as Weight).saturating_mul(b as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(3_354_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(b as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: CollatorSelection DesiredCandidates (r:0 w:1) fn set_desired_candidates() -> Weight { - (9_141_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(9_141_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: CollatorSelection CandidacyBond (r:0 w:1) fn set_candidacy_bond() -> Weight { - (9_554_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(9_554_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection DesiredCandidates (r:1 w:0) @@ -74,29 +74,29 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[1, 1000]`. fn register_as_candidate(c: u32, ) -> Weight { - (55_660_000 as Weight) + Weight::from_ref_time(55_660_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((103_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(103_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[6, 1000]`. fn leave_intent(c: u32, ) -> Weight { - (56_380_000 as Weight) + Weight::from_ref_time(56_380_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((113_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(113_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: System Account (r:2 w:2) // Storage: System BlockWeight (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) fn note_author() -> Weight { - (31_852_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(31_852_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:1000 w:1) @@ -106,13 +106,13 @@ impl pallet_collator_selection::WeightInfo for WeightIn /// The range of component `r` is `[1, 1000]`. /// The range of component `c` is `[1, 1000]`. fn new_session(r: u32, c: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 2_076_000 - .saturating_add((10_780_000 as Weight).saturating_mul(r as Weight)) + .saturating_add(Weight::from_ref_time(10_780_000 as RefTimeWeight).scalar_saturating_mul(r as RefTimeWeight)) // Standard Error: 2_076_000 - .saturating_add((55_238_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(r as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(c as Weight))) + .saturating_add(Weight::from_ref_time(55_238_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs index 9a6bd8b4b35..b37819dfdcb 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_multisig`. @@ -48,22 +48,22 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - (18_001_000 as Weight) + Weight::from_ref_time(18_001_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - (35_223_000 as Weight) + Weight::from_ref_time(35_223_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((118_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(118_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -71,38 +71,38 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - (39_275_000 as Weight) + Weight::from_ref_time(39_275_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((92_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(92_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - (24_703_000 as Weight) + Weight::from_ref_time(24_703_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((96_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(96_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - (38_375_000 as Weight) + Weight::from_ref_time(38_375_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((100_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(100_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -110,53 +110,53 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - (46_964_000 as Weight) + Weight::from_ref_time(46_964_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((143_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(143_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((3_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - (34_450_000 as Weight) + Weight::from_ref_time(34_450_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((117_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - (22_051_000 as Weight) + Weight::from_ref_time(22_051_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((117_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_complete(s: u32, ) -> Weight { - (69_763_000 as Weight) + Weight::from_ref_time(69_763_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((162_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + .saturating_add(Weight::from_ref_time(162_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - (53_182_000 as Weight) + Weight::from_ref_time(53_182_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((129_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(129_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs index d764987b4b3..80b0e84de6f 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. @@ -49,10 +49,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:0) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - (18_075_000 as Weight) + Weight::from_ref_time(18_075_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((92_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(Weight::from_ref_time(92_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -60,39 +60,39 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - (35_722_000 as Weight) + Weight::from_ref_time(35_722_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((180_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(180_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((85_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn remove_announcement(a: u32, p: u32, ) -> Weight { - (25_193_000 as Weight) + Weight::from_ref_time(25_193_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((185_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(185_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 1_000 - .saturating_add((23_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(23_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, p: u32, ) -> Weight { - (25_123_000 as Weight) + Weight::from_ref_time(25_123_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((190_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(190_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 1_000 - .saturating_add((21_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(21_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -100,58 +100,58 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - (32_582_000 as Weight) + Weight::from_ref_time(32_582_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((200_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(200_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((93_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(93_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - (28_173_000 as Weight) + Weight::from_ref_time(28_173_000 as RefTimeWeight) // Standard Error: 3_000 - .saturating_add((112_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(112_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - (28_247_000 as Weight) + Weight::from_ref_time(28_247_000 as RefTimeWeight) // Standard Error: 3_000 - .saturating_add((118_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(118_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - (23_821_000 as Weight) + Weight::from_ref_time(23_821_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((85_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn anonymous(p: u32, ) -> Weight { - (31_472_000 as Weight) + Weight::from_ref_time(31_472_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((21_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(21_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. fn kill_anonymous(p: u32, ) -> Weight { - (24_620_000 as Weight) + Weight::from_ref_time(24_620_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((85_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs index 973fd7d4dc4..cddb0408c51 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. @@ -49,15 +49,15 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:1 w:1) fn set_keys() -> Weight { - (16_555_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(16_555_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:1) fn purge_keys() -> Weight { - (13_554_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(13_554_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs index c2757b04d58..9b838b6f8c6 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. @@ -48,11 +48,11 @@ pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { // Storage: Timestamp Now (r:1 w:1) fn set() -> Weight { - (6_818_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(6_818_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } fn on_finalize() -> Weight { - (2_431_000 as Weight) + Weight::from_ref_time(2_431_000 as RefTimeWeight) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs index ea3943cc734..ec0044fd371 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs @@ -43,7 +43,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_uniques`. @@ -53,17 +53,17 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn create() -> Weight { - (28_358_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(28_358_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques NextCollectionId (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_create() -> Weight { - (17_824_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(17_824_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:0) @@ -77,191 +77,191 @@ impl pallet_uniques::WeightInfo for WeightInfo { /// The range of component `m` is `[0, 1000]`. /// The range of component `a` is `[0, 1000]`. fn destroy(n: u32, m: u32, a: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 17_000 - .saturating_add((10_592_000 as Weight).saturating_mul(n as Weight)) + .saturating_add(Weight::from_ref_time(10_592_000 as RefTimeWeight).scalar_saturating_mul(n as RefTimeWeight)) // Standard Error: 17_000 - .saturating_add((1_658_000 as Weight).saturating_mul(m as Weight)) + .saturating_add(Weight::from_ref_time(1_658_000 as RefTimeWeight).scalar_saturating_mul(m as RefTimeWeight)) // Standard Error: 17_000 - .saturating_add((1_593_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(n as Weight))) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(n as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(m as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(a as Weight))) + .saturating_add(Weight::from_ref_time(1_593_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(n as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(n as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(m as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques CollectionMaxSupply (r:1 w:0) // Storage: Uniques Account (r:0 w:1) fn mint() -> Weight { - (36_742_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + Weight::from_ref_time(36_742_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:1) // Storage: Uniques ItemPriceOf (r:0 w:1) fn burn() -> Weight { - (37_124_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(37_124_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:2) // Storage: Uniques ItemPriceOf (r:0 w:1) fn transfer() -> Weight { - (28_961_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(28_961_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:100 w:100) /// The range of component `i` is `[0, 5000]`. fn redeposit(i: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 15_000 - .saturating_add((12_880_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + .saturating_add(Weight::from_ref_time(12_880_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn freeze() -> Weight { - (21_658_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(21_658_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn thaw() -> Weight { - (21_980_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(21_980_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) fn freeze_collection() -> Weight { - (17_123_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_123_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) fn thaw_collection() -> Weight { - (17_398_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_398_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:2) fn transfer_ownership() -> Weight { - (25_473_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(25_473_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) fn set_team() -> Weight { - (17_970_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_970_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_item_status() -> Weight { - (20_781_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(20_781_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn set_attribute() -> Weight { - (42_652_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(42_652_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn clear_attribute() -> Weight { - (41_166_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(41_166_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn set_metadata() -> Weight { - (35_471_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(35_471_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn clear_metadata() -> Weight { - (35_110_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(35_110_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn set_collection_metadata() -> Weight { - (33_536_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(33_536_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn clear_collection_metadata() -> Weight { - (31_913_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(31_913_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn approve_transfer() -> Weight { - (23_536_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(23_536_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn cancel_approval() -> Weight { - (23_748_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(23_748_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) fn set_accept_ownership() -> Weight { - (20_712_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(20_712_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques CollectionMaxSupply (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn set_collection_max_supply() -> Weight { - (20_245_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(20_245_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Asset (r:1 w:0) // Storage: Uniques ItemPriceOf (r:0 w:1) fn set_price() -> Weight { - (20_065_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(20_065_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques ItemPriceOf (r:1 w:1) // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Account (r:0 w:2) fn buy_item() -> Weight { - (40_638_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(40_638_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs index 2df9b898484..97ac89aee2e 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_utility`. @@ -48,26 +48,26 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - (22_923_000 as Weight) + Weight::from_ref_time(22_923_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((3_526_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(Weight::from_ref_time(3_526_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) } fn as_derivative() -> Weight { - (5_220_000 as Weight) + Weight::from_ref_time(5_220_000 as RefTimeWeight) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - (20_953_000 as Weight) + Weight::from_ref_time(20_953_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((3_698_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(Weight::from_ref_time(3_698_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) } fn dispatch_as() -> Weight { - (12_087_000 as Weight) + Weight::from_ref_time(12_087_000 as RefTimeWeight) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - (10_076_000 as Weight) + Weight::from_ref_time(10_076_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((3_546_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(Weight::from_ref_time(3_546_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/paritydb_weights.rs b/parachains/runtimes/assets/statemine/src/weights/paritydb_weights.rs index 843823c1bf3..8083ccb4001 100644 --- a/parachains/runtimes/assets/statemine/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/assets/statemine/src/weights/paritydb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights /// are available for brave runtime engineers who may want to try this out as default. pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 8_000 * constants::WEIGHT_PER_NANOS, - write: 50_000 * constants::WEIGHT_PER_NANOS, + read: 8_000 * constants::WEIGHT_PER_NANOS.ref_time(), + write: 50_000 * constants::WEIGHT_PER_NANOS.ref_time(), }; } diff --git a/parachains/runtimes/assets/statemine/src/weights/rocksdb_weights.rs b/parachains/runtimes/assets/statemine/src/weights/rocksdb_weights.rs index 05e06b0eabe..1db87f143f3 100644 --- a/parachains/runtimes/assets/statemine/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/assets/statemine/src/weights/rocksdb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout /// the runtime. pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000 * constants::WEIGHT_PER_NANOS, - write: 100_000 * constants::WEIGHT_PER_NANOS, + read: 25_000 * constants::WEIGHT_PER_NANOS.ref_time(), + write: 100_000 * constants::WEIGHT_PER_NANOS.ref_time(), }; } diff --git a/parachains/runtimes/assets/statemine/src/xcm_config.rs b/parachains/runtimes/assets/statemine/src/xcm_config.rs index 3875cf7901b..4203f1a54f0 100644 --- a/parachains/runtimes/assets/statemine/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemine/src/xcm_config.rs @@ -20,7 +20,6 @@ use super::{ use frame_support::{ match_types, parameter_types, traits::{Everything, Nothing, PalletInfoAccess}, - weights::Weight, }; use pallet_xcm::XcmPassthrough; use parachains_common::{ @@ -130,7 +129,7 @@ pub type XcmOriginToTransactDispatchOrigin = ( parameter_types! { // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. - pub UnitWeightCost: Weight = 1_000_000_000; + pub UnitWeightCost: u64 = 1_000_000_000; pub const MaxInstructions: u32 = 100; pub XcmAssetFeesReceiver: Option = Authorship::author(); } diff --git a/parachains/runtimes/assets/statemine/tests/tests.rs b/parachains/runtimes/assets/statemine/tests/tests.rs index c99debbced4..974f89ec1ee 100644 --- a/parachains/runtimes/assets/statemine/tests/tests.rs +++ b/parachains/runtimes/assets/statemine/tests/tests.rs @@ -1,6 +1,8 @@ use asset_test_utils::{ExtBuilder, RuntimeHelper}; use frame_support::{ - assert_noop, assert_ok, traits::PalletInfo, weights::WeightToFee as WeightToFeeT, + assert_noop, assert_ok, + traits::PalletInfo, + weights::{Weight, WeightToFee as WeightToFeeT}, }; use parachains_common::{AccountId, AuraId}; pub use statemine_runtime::{ @@ -49,7 +51,7 @@ fn test_asset_xcm_trader() { let bought = 4_000_000_000u64; // lets calculate amount needed - let amount_needed = WeightToFee::weight_to_fee(&bought); + let amount_needed = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); let asset_multilocation = MultiLocation::new( 0, @@ -130,7 +132,7 @@ fn test_asset_xcm_trader_with_refund() { ); // lets calculate amount needed - let amount_bought = WeightToFee::weight_to_fee(&bought); + let amount_bought = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); let asset: MultiAsset = (asset_multilocation.clone(), amount_bought).into(); @@ -144,7 +146,8 @@ fn test_asset_xcm_trader_with_refund() { let weight_used = bought / 2; // Make sure refurnd works. - let amount_refunded = WeightToFee::weight_to_fee(&(bought - weight_used)); + let amount_refunded = + WeightToFee::weight_to_fee(&Weight::from_ref_time(bought - weight_used)); assert_eq!( trader.refund_weight(bought - weight_used), @@ -155,7 +158,7 @@ fn test_asset_xcm_trader_with_refund() { drop(trader); // We only should have paid for half of the bought weight - let fees_paid = WeightToFee::weight_to_fee(&weight_used); + let fees_paid = WeightToFee::weight_to_fee(&Weight::from_ref_time(weight_used)); assert_eq!( Assets::balance(1, AccountId::from(ALICE)), @@ -207,7 +210,7 @@ fn test_asset_xcm_trader_refund_not_possible_since_amount_less_than_ed() { ), ); - let amount_bought = WeightToFee::weight_to_fee(&bought); + let amount_bought = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); assert!( amount_bought < ExistentialDeposit::get(), @@ -267,7 +270,7 @@ fn test_that_buying_ed_refund_does_not_refund() { ), ); - let amount_bought = WeightToFee::weight_to_fee(&bought); + let amount_bought = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); assert!( amount_bought < ExistentialDeposit::get(), diff --git a/parachains/runtimes/assets/statemint/src/constants.rs b/parachains/runtimes/assets/statemint/src/constants.rs index 17624fded97..ef3a545d15e 100644 --- a/parachains/runtimes/assets/statemint/src/constants.rs +++ b/parachains/runtimes/assets/statemint/src/constants.rs @@ -61,7 +61,7 @@ pub mod fee { // in Polkadot, extrinsic base weight (smallest non-zero weight) is mapped to 1/10 CENT: // in Statemint, we map to 1/10 of that, or 1/100 CENT let p = super::currency::CENTS; - let q = 100 * Balance::from(ExtrinsicBaseWeight::get()); + let q = 100 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); smallvec![WeightToFeeCoefficient { degree: 1, negative: false, diff --git a/parachains/runtimes/assets/statemint/src/lib.rs b/parachains/runtimes/assets/statemint/src/lib.rs index be579e1215e..f9ceaba944c 100644 --- a/parachains/runtimes/assets/statemint/src/lib.rs +++ b/parachains/runtimes/assets/statemint/src/lib.rs @@ -437,8 +437,8 @@ impl pallet_proxy::Config for Runtime { } parameter_types! { - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4; - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4; + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); } impl cumulus_pallet_parachain_system::Config for Runtime { diff --git a/parachains/runtimes/assets/statemint/src/weights/block_weights.rs b/parachains/runtimes/assets/statemint/src/weights/block_weights.rs index 4db90f0c020..c171a1fdd71 100644 --- a/parachains/runtimes/assets/statemint/src/weights/block_weights.rs +++ b/parachains/runtimes/assets/statemint/src/weights/block_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = 5_000_000 * constants::WEIGHT_PER_NANOS; + pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(5_000_000); } #[cfg(test)] diff --git a/parachains/runtimes/assets/statemint/src/weights/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/assets/statemint/src/weights/cumulus_pallet_xcmp_queue.rs index a51fb710eac..c6c95112065 100644 --- a/parachains/runtimes/assets/statemint/src/weights/cumulus_pallet_xcmp_queue.rs +++ b/parachains/runtimes/assets/statemint/src/weights/cumulus_pallet_xcmp_queue.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `cumulus_pallet_xcmp_queue`. @@ -48,14 +48,14 @@ pub struct WeightInfo(PhantomData); impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - (5_192_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(5_192_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - (5_363_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(5_363_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs b/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs index 158ba99c6a4..6e162888356 100644 --- a/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = 125_000 * constants::WEIGHT_PER_NANOS; + pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(125_000); } #[cfg(test)] diff --git a/parachains/runtimes/assets/statemint/src/weights/frame_system.rs b/parachains/runtimes/assets/statemint/src/weights/frame_system.rs index 794cdbe1b66..3d338ac8360 100644 --- a/parachains/runtimes/assets/statemint/src/weights/frame_system.rs +++ b/parachains/runtimes/assets/statemint/src/weights/frame_system.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `frame_system`. @@ -48,43 +48,43 @@ pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. fn remark(_b: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(b as Weight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) fn set_heap_pages() -> Weight { - (5_446_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(5_446_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn set_storage(i: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((626_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + .saturating_add(Weight::from_ref_time(626_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn kill_storage(i: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((515_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + .saturating_add(Weight::from_ref_time(515_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `p` is `[1, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((1_052_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(p as Weight))) + .saturating_add(Weight::from_ref_time(1_052_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(p as RefTimeWeight))) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs index 4aea74e75c4..d3aaeb66309 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_assets`. @@ -48,15 +48,15 @@ pub struct WeightInfo(PhantomData); impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:1) fn create() -> Weight { - (26_226_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(26_226_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) fn force_create() -> Weight { - (15_357_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(15_357_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:5002 w:5001) @@ -67,171 +67,171 @@ impl pallet_assets::WeightInfo for WeightInfo { /// The range of component `s` is `[0, 5000]`. /// The range of component `a` is `[0, 500]`. fn destroy(c: u32, s: u32, a: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 45_000 - .saturating_add((15_904_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(Weight::from_ref_time(15_904_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) // Standard Error: 45_000 - .saturating_add((18_803_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(18_803_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 450_000 - .saturating_add((17_017_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(s as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(s as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(a as Weight))) + .saturating_add(Weight::from_ref_time(17_017_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) + .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(s as RefTimeWeight))) + .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(s as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn mint() -> Weight { - (29_616_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(29_616_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn burn() -> Weight { - (33_496_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(33_496_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - (46_790_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(46_790_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - (39_769_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(39_769_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn force_transfer() -> Weight { - (47_200_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(47_200_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn freeze() -> Weight { - (20_873_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(20_873_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn thaw() -> Weight { - (21_228_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(21_228_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) fn freeze_asset() -> Weight { - (17_685_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_685_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) fn thaw_asset() -> Weight { - (17_542_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_542_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Metadata (r:1 w:0) fn transfer_ownership() -> Weight { - (18_639_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(18_639_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) fn set_team() -> Weight { - (17_135_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_135_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn set_metadata(n: u32, s: u32, ) -> Weight { - (31_324_000 as Weight) + Weight::from_ref_time(31_324_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(n as Weight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(n as RefTimeWeight)) // Standard Error: 0 - .saturating_add((3_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn clear_metadata() -> Weight { - (31_340_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(31_340_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn force_set_metadata(_n: u32, s: u32, ) -> Weight { - (18_756_000 as Weight) + Weight::from_ref_time(18_756_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn force_clear_metadata() -> Weight { - (31_427_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(31_427_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) fn force_asset_status() -> Weight { - (16_930_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(16_930_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn approve_transfer() -> Weight { - (34_492_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(34_492_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Assets Approvals (r:1 w:1) // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_approved() -> Weight { - (60_098_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) + Weight::from_ref_time(60_098_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(5 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn cancel_approval() -> Weight { - (35_630_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(35_630_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn force_cancel_approval() -> Weight { - (37_399_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(37_399_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs index 66e621a74a2..53b853de67b 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. @@ -48,44 +48,44 @@ pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - (41_006_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(41_006_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - (31_329_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(31_329_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { - (21_075_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(21_075_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { - (24_413_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(24_413_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { - (41_434_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(41_434_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { - (37_653_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(37_653_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { - (18_701_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(18_701_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs index ceb63443192..e1f319163c7 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_collator_selection`. @@ -50,21 +50,21 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection Invulnerables (r:0 w:1) /// The range of component `b` is `[1, 100]`. fn set_invulnerables(b: u32, ) -> Weight { - (8_587_000 as Weight) + Weight::from_ref_time(8_587_000 as RefTimeWeight) // Standard Error: 3_000 - .saturating_add((3_304_000 as Weight).saturating_mul(b as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(3_304_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(b as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: CollatorSelection DesiredCandidates (r:0 w:1) fn set_desired_candidates() -> Weight { - (9_027_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(9_027_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: CollatorSelection CandidacyBond (r:0 w:1) fn set_candidacy_bond() -> Weight { - (9_244_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(9_244_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection DesiredCandidates (r:1 w:0) @@ -74,29 +74,29 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[1, 1000]`. fn register_as_candidate(c: u32, ) -> Weight { - (60_984_000 as Weight) + Weight::from_ref_time(60_984_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((89_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(89_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[6, 1000]`. fn leave_intent(c: u32, ) -> Weight { - (49_046_000 as Weight) + Weight::from_ref_time(49_046_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((118_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(118_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: System Account (r:2 w:2) // Storage: System BlockWeight (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) fn note_author() -> Weight { - (32_269_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(32_269_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:1000 w:1) @@ -106,13 +106,13 @@ impl pallet_collator_selection::WeightInfo for WeightIn /// The range of component `r` is `[1, 1000]`. /// The range of component `c` is `[1, 1000]`. fn new_session(r: u32, c: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_992_000 - .saturating_add((10_521_000 as Weight).saturating_mul(r as Weight)) + .saturating_add(Weight::from_ref_time(10_521_000 as RefTimeWeight).scalar_saturating_mul(r as RefTimeWeight)) // Standard Error: 1_992_000 - .saturating_add((53_162_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(r as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(c as Weight))) + .saturating_add(Weight::from_ref_time(53_162_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs index cd0c8b42a26..b2c6c147508 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_multisig`. @@ -48,22 +48,22 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - (17_175_000 as Weight) + Weight::from_ref_time(17_175_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - (35_937_000 as Weight) + Weight::from_ref_time(35_937_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((97_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(97_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -71,38 +71,38 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - (37_468_000 as Weight) + Weight::from_ref_time(37_468_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((89_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(89_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - (25_557_000 as Weight) + Weight::from_ref_time(25_557_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((83_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(83_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - (38_127_000 as Weight) + Weight::from_ref_time(38_127_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((88_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(88_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -110,53 +110,53 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - (47_383_000 as Weight) + Weight::from_ref_time(47_383_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((127_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(127_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((3_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - (33_472_000 as Weight) + Weight::from_ref_time(33_472_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((102_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(102_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - (21_612_000 as Weight) + Weight::from_ref_time(21_612_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((119_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(119_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_complete(s: u32, ) -> Weight { - (68_168_000 as Weight) + Weight::from_ref_time(68_168_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((157_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + .saturating_add(Weight::from_ref_time(157_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - (52_748_000 as Weight) + Weight::from_ref_time(52_748_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((117_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs index 1b968ae885a..3591374e04e 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. @@ -49,10 +49,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:0) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - (17_582_000 as Weight) + Weight::from_ref_time(17_582_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((77_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(Weight::from_ref_time(77_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -60,39 +60,39 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - (34_603_000 as Weight) + Weight::from_ref_time(34_603_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((169_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(169_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((87_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(87_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn remove_announcement(a: u32, p: u32, ) -> Weight { - (24_496_000 as Weight) + Weight::from_ref_time(24_496_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((179_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(179_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 1_000 - .saturating_add((25_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(25_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, p: u32, ) -> Weight { - (24_237_000 as Weight) + Weight::from_ref_time(24_237_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((181_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(181_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 1_000 - .saturating_add((29_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(29_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -100,58 +100,58 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - (32_065_000 as Weight) + Weight::from_ref_time(32_065_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((166_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(166_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((91_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(91_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - (27_168_000 as Weight) + Weight::from_ref_time(27_168_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((117_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - (27_233_000 as Weight) + Weight::from_ref_time(27_233_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((121_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(121_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - (23_010_000 as Weight) + Weight::from_ref_time(23_010_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((95_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(95_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn anonymous(p: u32, ) -> Weight { - (30_378_000 as Weight) + Weight::from_ref_time(30_378_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((16_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(16_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. fn kill_anonymous(p: u32, ) -> Weight { - (23_977_000 as Weight) + Weight::from_ref_time(23_977_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((76_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(76_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs index 5f5a8eea98a..ec0e46647d0 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. @@ -49,15 +49,15 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:1 w:1) fn set_keys() -> Weight { - (16_170_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(16_170_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:1) fn purge_keys() -> Weight { - (13_246_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(13_246_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs index ffb87994147..5140207b912 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. @@ -48,11 +48,11 @@ pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { // Storage: Timestamp Now (r:1 w:1) fn set() -> Weight { - (6_737_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(6_737_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } fn on_finalize() -> Weight { - (2_329_000 as Weight) + Weight::from_ref_time(2_329_000 as RefTimeWeight) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs index ed9e2b98f88..e25c16b6a34 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs @@ -43,7 +43,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_uniques`. @@ -53,17 +53,17 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn create() -> Weight { - (27_424_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(27_424_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques NextCollectionId (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_create() -> Weight { - (17_098_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(17_098_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:0) @@ -77,191 +77,191 @@ impl pallet_uniques::WeightInfo for WeightInfo { /// The range of component `m` is `[0, 1000]`. /// The range of component `a` is `[0, 1000]`. fn destroy(n: u32, m: u32, a: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 18_000 - .saturating_add((10_919_000 as Weight).saturating_mul(n as Weight)) + .saturating_add(Weight::from_ref_time(10_919_000 as RefTimeWeight).scalar_saturating_mul(n as RefTimeWeight)) // Standard Error: 18_000 - .saturating_add((1_679_000 as Weight).saturating_mul(m as Weight)) + .saturating_add(Weight::from_ref_time(1_679_000 as RefTimeWeight).scalar_saturating_mul(m as RefTimeWeight)) // Standard Error: 18_000 - .saturating_add((1_463_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(n as Weight))) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(n as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(m as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(a as Weight))) + .saturating_add(Weight::from_ref_time(1_463_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(n as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(n as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(m as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques CollectionMaxSupply (r:1 w:0) // Storage: Uniques Account (r:0 w:1) fn mint() -> Weight { - (36_329_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + Weight::from_ref_time(36_329_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:1) // Storage: Uniques ItemPriceOf (r:0 w:1) fn burn() -> Weight { - (36_746_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(36_746_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:2) // Storage: Uniques ItemPriceOf (r:0 w:1) fn transfer() -> Weight { - (28_916_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(28_916_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:100 w:100) /// The range of component `i` is `[0, 5000]`. fn redeposit(i: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 15_000 - .saturating_add((12_745_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + .saturating_add(Weight::from_ref_time(12_745_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn freeze() -> Weight { - (21_813_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(21_813_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn thaw() -> Weight { - (22_088_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(22_088_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) fn freeze_collection() -> Weight { - (17_184_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_184_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) fn thaw_collection() -> Weight { - (17_311_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_311_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:2) fn transfer_ownership() -> Weight { - (25_174_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(25_174_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) fn set_team() -> Weight { - (17_879_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_879_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_item_status() -> Weight { - (20_491_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(20_491_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn set_attribute() -> Weight { - (42_444_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(42_444_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn clear_attribute() -> Weight { - (41_217_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(41_217_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn set_metadata() -> Weight { - (34_559_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(34_559_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn clear_metadata() -> Weight { - (34_863_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(34_863_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn set_collection_metadata() -> Weight { - (33_199_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(33_199_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn clear_collection_metadata() -> Weight { - (31_472_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(31_472_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn approve_transfer() -> Weight { - (23_618_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(23_618_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn cancel_approval() -> Weight { - (23_507_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(23_507_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) fn set_accept_ownership() -> Weight { - (21_120_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(21_120_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques CollectionMaxSupply (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn set_collection_max_supply() -> Weight { - (20_664_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(20_664_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Asset (r:1 w:0) // Storage: Uniques ItemPriceOf (r:0 w:1) fn set_price() -> Weight { - (19_938_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(19_938_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques ItemPriceOf (r:1 w:1) // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Account (r:0 w:2) fn buy_item() -> Weight { - (39_254_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(39_254_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs index e1bade93863..e462d30217a 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_utility`. @@ -48,26 +48,26 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - (30_959_000 as Weight) + Weight::from_ref_time(30_959_000 as RefTimeWeight) // Standard Error: 6_000 - .saturating_add((3_220_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(Weight::from_ref_time(3_220_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) } fn as_derivative() -> Weight { - (4_732_000 as Weight) + Weight::from_ref_time(4_732_000 as RefTimeWeight) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - (16_465_000 as Weight) + Weight::from_ref_time(16_465_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((3_364_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(Weight::from_ref_time(3_364_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) } fn dispatch_as() -> Weight { - (11_903_000 as Weight) + Weight::from_ref_time(11_903_000 as RefTimeWeight) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - (22_621_000 as Weight) + Weight::from_ref_time(22_621_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((3_147_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(Weight::from_ref_time(3_147_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/paritydb_weights.rs b/parachains/runtimes/assets/statemint/src/weights/paritydb_weights.rs index 843823c1bf3..8083ccb4001 100644 --- a/parachains/runtimes/assets/statemint/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/assets/statemint/src/weights/paritydb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights /// are available for brave runtime engineers who may want to try this out as default. pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 8_000 * constants::WEIGHT_PER_NANOS, - write: 50_000 * constants::WEIGHT_PER_NANOS, + read: 8_000 * constants::WEIGHT_PER_NANOS.ref_time(), + write: 50_000 * constants::WEIGHT_PER_NANOS.ref_time(), }; } diff --git a/parachains/runtimes/assets/statemint/src/weights/rocksdb_weights.rs b/parachains/runtimes/assets/statemint/src/weights/rocksdb_weights.rs index 05e06b0eabe..1db87f143f3 100644 --- a/parachains/runtimes/assets/statemint/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/assets/statemint/src/weights/rocksdb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout /// the runtime. pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000 * constants::WEIGHT_PER_NANOS, - write: 100_000 * constants::WEIGHT_PER_NANOS, + read: 25_000 * constants::WEIGHT_PER_NANOS.ref_time(), + write: 100_000 * constants::WEIGHT_PER_NANOS.ref_time(), }; } diff --git a/parachains/runtimes/assets/statemint/src/xcm_config.rs b/parachains/runtimes/assets/statemint/src/xcm_config.rs index abfe9bb9865..ca9aea57055 100644 --- a/parachains/runtimes/assets/statemint/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemint/src/xcm_config.rs @@ -20,7 +20,6 @@ use super::{ use frame_support::{ match_types, parameter_types, traits::{Everything, Nothing, PalletInfoAccess}, - weights::Weight, }; use pallet_xcm::XcmPassthrough; use parachains_common::{ @@ -127,7 +126,7 @@ pub type XcmOriginToTransactDispatchOrigin = ( parameter_types! { // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. - pub UnitWeightCost: Weight = 1_000_000_000; + pub UnitWeightCost: u64 = 1_000_000_000; pub const MaxInstructions: u32 = 100; pub XcmAssetFeesReceiver: Option = Authorship::author(); } diff --git a/parachains/runtimes/assets/statemint/tests/tests.rs b/parachains/runtimes/assets/statemint/tests/tests.rs index 518936210f2..77cb45c1cc5 100644 --- a/parachains/runtimes/assets/statemint/tests/tests.rs +++ b/parachains/runtimes/assets/statemint/tests/tests.rs @@ -1,6 +1,8 @@ use asset_test_utils::{ExtBuilder, RuntimeHelper}; use frame_support::{ - assert_noop, assert_ok, traits::PalletInfo, weights::WeightToFee as WeightToFeeT, + assert_noop, assert_ok, + traits::PalletInfo, + weights::{Weight, WeightToFee as WeightToFeeT}, }; use parachains_common::{AccountId, StatemintAuraId as AuraId}; pub use statemint_runtime::{ @@ -44,7 +46,7 @@ fn test_asset_xcm_trader_does_not_work_in_statemine() { let bought = 400_000_000_000u64; // lets calculate amount needed - let amount_needed = WeightToFee::weight_to_fee(&bought); + let amount_needed = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); let asset_multilocation = MultiLocation::new( 0, diff --git a/parachains/runtimes/assets/westmint/src/constants.rs b/parachains/runtimes/assets/westmint/src/constants.rs index 032ed5c1f4a..8a94ad2ad9f 100644 --- a/parachains/runtimes/assets/westmint/src/constants.rs +++ b/parachains/runtimes/assets/westmint/src/constants.rs @@ -61,7 +61,7 @@ pub mod fee { // in Polkadot, extrinsic base weight (smallest non-zero weight) is mapped to 1/10 CENT: // in Statemint, we map to 1/10 of that, or 1/100 CENT let p = super::currency::CENTS; - let q = 100 * Balance::from(ExtrinsicBaseWeight::get()); + let q = 100 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); smallvec![WeightToFeeCoefficient { degree: 1, negative: false, diff --git a/parachains/runtimes/assets/westmint/src/lib.rs b/parachains/runtimes/assets/westmint/src/lib.rs index a67de1fc01e..52a562cfd00 100644 --- a/parachains/runtimes/assets/westmint/src/lib.rs +++ b/parachains/runtimes/assets/westmint/src/lib.rs @@ -402,8 +402,8 @@ impl pallet_proxy::Config for Runtime { } parameter_types! { - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4; - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4; + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); } impl cumulus_pallet_parachain_system::Config for Runtime { diff --git a/parachains/runtimes/assets/westmint/src/weights/block_weights.rs b/parachains/runtimes/assets/westmint/src/weights/block_weights.rs index 4db90f0c020..c171a1fdd71 100644 --- a/parachains/runtimes/assets/westmint/src/weights/block_weights.rs +++ b/parachains/runtimes/assets/westmint/src/weights/block_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = 5_000_000 * constants::WEIGHT_PER_NANOS; + pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(5_000_000); } #[cfg(test)] diff --git a/parachains/runtimes/assets/westmint/src/weights/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/assets/westmint/src/weights/cumulus_pallet_xcmp_queue.rs index 1fff43c3333..5529dac90d8 100644 --- a/parachains/runtimes/assets/westmint/src/weights/cumulus_pallet_xcmp_queue.rs +++ b/parachains/runtimes/assets/westmint/src/weights/cumulus_pallet_xcmp_queue.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `cumulus_pallet_xcmp_queue`. @@ -48,14 +48,14 @@ pub struct WeightInfo(PhantomData); impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - (5_463_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(5_463_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - (5_221_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(5_221_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs b/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs index 158ba99c6a4..6e162888356 100644 --- a/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = 125_000 * constants::WEIGHT_PER_NANOS; + pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(125_000); } #[cfg(test)] diff --git a/parachains/runtimes/assets/westmint/src/weights/frame_system.rs b/parachains/runtimes/assets/westmint/src/weights/frame_system.rs index 1c3947980e7..be46954f69c 100644 --- a/parachains/runtimes/assets/westmint/src/weights/frame_system.rs +++ b/parachains/runtimes/assets/westmint/src/weights/frame_system.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `frame_system`. @@ -48,43 +48,43 @@ pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. fn remark(_b: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(b as Weight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) fn set_heap_pages() -> Weight { - (5_726_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(5_726_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn set_storage(i: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((616_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + .saturating_add(Weight::from_ref_time(616_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn kill_storage(i: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((519_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + .saturating_add(Weight::from_ref_time(519_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `p` is `[1, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((1_067_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(p as Weight))) + .saturating_add(Weight::from_ref_time(1_067_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(p as RefTimeWeight))) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs index ea6cfd174da..14f311be36f 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_assets`. @@ -48,15 +48,15 @@ pub struct WeightInfo(PhantomData); impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:1) fn create() -> Weight { - (25_905_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(25_905_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) fn force_create() -> Weight { - (14_977_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(14_977_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:5002 w:5001) @@ -67,169 +67,169 @@ impl pallet_assets::WeightInfo for WeightInfo { /// The range of component `s` is `[0, 5000]`. /// The range of component `a` is `[0, 500]`. fn destroy(c: u32, s: u32, a: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 46_000 - .saturating_add((16_133_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(Weight::from_ref_time(16_133_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) // Standard Error: 46_000 - .saturating_add((18_915_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(18_915_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 464_000 - .saturating_add((16_795_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(s as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(s as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(a as Weight))) + .saturating_add(Weight::from_ref_time(16_795_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) + .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(s as RefTimeWeight))) + .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(s as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn mint() -> Weight { - (29_903_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(29_903_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn burn() -> Weight { - (34_384_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(34_384_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - (48_218_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(48_218_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - (40_558_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(40_558_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn force_transfer() -> Weight { - (48_330_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(48_330_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn freeze() -> Weight { - (21_218_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(21_218_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn thaw() -> Weight { - (21_227_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(21_227_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) fn freeze_asset() -> Weight { - (17_906_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_906_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) fn thaw_asset() -> Weight { - (17_669_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_669_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Metadata (r:1 w:0) fn transfer_ownership() -> Weight { - (18_756_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(18_756_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) fn set_team() -> Weight { - (17_203_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_203_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn set_metadata(_n: u32, s: u32, ) -> Weight { - (31_757_000 as Weight) + Weight::from_ref_time(31_757_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((3_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn clear_metadata() -> Weight { - (31_669_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(31_669_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn force_set_metadata(_n: u32, s: u32, ) -> Weight { - (18_566_000 as Weight) + Weight::from_ref_time(18_566_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn force_clear_metadata() -> Weight { - (31_467_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(31_467_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) fn force_asset_status() -> Weight { - (16_275_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(16_275_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn approve_transfer() -> Weight { - (34_436_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(34_436_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Assets Approvals (r:1 w:1) // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_approved() -> Weight { - (60_445_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) + Weight::from_ref_time(60_445_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(5 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn cancel_approval() -> Weight { - (35_819_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(35_819_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn force_cancel_approval() -> Weight { - (36_535_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(36_535_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs index 14aa8f1ca7d..b76ea1e7e61 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. @@ -48,44 +48,44 @@ pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - (40_330_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(40_330_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - (30_938_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(30_938_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { - (20_284_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(20_284_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { - (24_018_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(24_018_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { - (40_970_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(40_970_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { - (36_243_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(36_243_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { - (18_374_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(18_374_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs index 244ba48e355..6bee9003f9f 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_collator_selection`. @@ -50,21 +50,21 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection Invulnerables (r:0 w:1) /// The range of component `b` is `[1, 100]`. fn set_invulnerables(b: u32, ) -> Weight { - (6_669_000 as Weight) + Weight::from_ref_time(6_669_000 as RefTimeWeight) // Standard Error: 3_000 - .saturating_add((3_218_000 as Weight).saturating_mul(b as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(3_218_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(b as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: CollatorSelection DesiredCandidates (r:0 w:1) fn set_desired_candidates() -> Weight { - (8_348_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(8_348_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: CollatorSelection CandidacyBond (r:0 w:1) fn set_candidacy_bond() -> Weight { - (8_592_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(8_592_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection DesiredCandidates (r:1 w:0) @@ -74,29 +74,29 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[1, 1000]`. fn register_as_candidate(c: u32, ) -> Weight { - (55_542_000 as Weight) + Weight::from_ref_time(55_542_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((92_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(92_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[2, 1000]`. fn leave_intent(c: u32, ) -> Weight { - (52_080_000 as Weight) + Weight::from_ref_time(52_080_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((109_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: System Account (r:2 w:2) // Storage: System BlockWeight (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) fn note_author() -> Weight { - (31_546_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(31_546_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:1000 w:1) @@ -106,13 +106,13 @@ impl pallet_collator_selection::WeightInfo for WeightIn /// The range of component `r` is `[1, 1000]`. /// The range of component `c` is `[1, 1000]`. fn new_session(r: u32, c: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_895_000 - .saturating_add((9_941_000 as Weight).saturating_mul(r as Weight)) + .saturating_add(Weight::from_ref_time(9_941_000 as RefTimeWeight).scalar_saturating_mul(r as RefTimeWeight)) // Standard Error: 1_895_000 - .saturating_add((50_628_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(r as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(c as Weight))) + .saturating_add(Weight::from_ref_time(50_628_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs index cc762c46240..ab8bf52813d 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_multisig`. @@ -48,22 +48,22 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - (17_854_000 as Weight) + Weight::from_ref_time(17_854_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - (36_613_000 as Weight) + Weight::from_ref_time(36_613_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((96_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(96_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -71,38 +71,38 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - (40_039_000 as Weight) + Weight::from_ref_time(40_039_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((72_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(72_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - (26_059_000 as Weight) + Weight::from_ref_time(26_059_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((82_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(82_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - (38_292_000 as Weight) + Weight::from_ref_time(38_292_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((90_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(90_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -110,53 +110,53 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - (47_468_000 as Weight) + Weight::from_ref_time(47_468_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((129_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(129_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - (33_492_000 as Weight) + Weight::from_ref_time(33_492_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((110_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(110_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - (22_147_000 as Weight) + Weight::from_ref_time(22_147_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((113_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(113_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_complete(s: u32, ) -> Weight { - (66_106_000 as Weight) + Weight::from_ref_time(66_106_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((161_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + .saturating_add(Weight::from_ref_time(161_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - (52_566_000 as Weight) + Weight::from_ref_time(52_566_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((117_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs index 8ec439c9ae8..4268eb2f1ba 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. @@ -49,10 +49,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:0) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - (18_084_000 as Weight) + Weight::from_ref_time(18_084_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((83_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(Weight::from_ref_time(83_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -60,39 +60,39 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - (35_619_000 as Weight) + Weight::from_ref_time(35_619_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((172_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(172_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((89_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(89_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn remove_announcement(a: u32, p: u32, ) -> Weight { - (24_774_000 as Weight) + Weight::from_ref_time(24_774_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((190_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(190_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((33_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(33_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, p: u32, ) -> Weight { - (25_855_000 as Weight) + Weight::from_ref_time(25_855_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((160_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(160_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 1_000 - .saturating_add((15_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(15_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -100,58 +100,58 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - (32_874_000 as Weight) + Weight::from_ref_time(32_874_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((172_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(172_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((97_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(97_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - (28_312_000 as Weight) + Weight::from_ref_time(28_312_000 as RefTimeWeight) // Standard Error: 4_000 - .saturating_add((105_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(105_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - (28_197_000 as Weight) + Weight::from_ref_time(28_197_000 as RefTimeWeight) // Standard Error: 4_000 - .saturating_add((121_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(121_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - (23_659_000 as Weight) + Weight::from_ref_time(23_659_000 as RefTimeWeight) // Standard Error: 8_000 - .saturating_add((106_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(106_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn anonymous(p: u32, ) -> Weight { - (31_575_000 as Weight) + Weight::from_ref_time(31_575_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((35_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(35_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. fn kill_anonymous(p: u32, ) -> Weight { - (24_640_000 as Weight) + Weight::from_ref_time(24_640_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((80_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(80_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs index 949e1c64efa..9463c5747e2 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. @@ -49,15 +49,15 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:1 w:1) fn set_keys() -> Weight { - (16_457_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(16_457_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:1) fn purge_keys() -> Weight { - (13_585_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(13_585_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs index 296a565fcbb..a09dc7cf368 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. @@ -48,11 +48,11 @@ pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { // Storage: Timestamp Now (r:1 w:1) fn set() -> Weight { - (6_762_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(6_762_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } fn on_finalize() -> Weight { - (2_387_000 as Weight) + Weight::from_ref_time(2_387_000 as RefTimeWeight) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs index fd90132bf02..031dd20d1c1 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs @@ -43,7 +43,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_uniques`. @@ -53,17 +53,17 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn create() -> Weight { - (27_462_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(27_462_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques NextCollectionId (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_create() -> Weight { - (16_480_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(16_480_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:0) @@ -77,191 +77,191 @@ impl pallet_uniques::WeightInfo for WeightInfo { /// The range of component `m` is `[0, 1000]`. /// The range of component `a` is `[0, 1000]`. fn destroy(n: u32, m: u32, a: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 18_000 - .saturating_add((10_956_000 as Weight).saturating_mul(n as Weight)) + .saturating_add(Weight::from_ref_time(10_956_000 as RefTimeWeight).scalar_saturating_mul(n as RefTimeWeight)) // Standard Error: 18_000 - .saturating_add((1_654_000 as Weight).saturating_mul(m as Weight)) + .saturating_add(Weight::from_ref_time(1_654_000 as RefTimeWeight).scalar_saturating_mul(m as RefTimeWeight)) // Standard Error: 18_000 - .saturating_add((1_572_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(n as Weight))) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(n as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(m as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(a as Weight))) + .saturating_add(Weight::from_ref_time(1_572_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(n as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(n as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(m as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques CollectionMaxSupply (r:1 w:0) // Storage: Uniques Account (r:0 w:1) fn mint() -> Weight { - (36_074_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + Weight::from_ref_time(36_074_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:1) // Storage: Uniques ItemPriceOf (r:0 w:1) fn burn() -> Weight { - (37_583_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(37_583_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:2) // Storage: Uniques ItemPriceOf (r:0 w:1) fn transfer() -> Weight { - (28_134_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(28_134_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:100 w:100) /// The range of component `i` is `[0, 5000]`. fn redeposit(i: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 16_000 - .saturating_add((12_715_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + .saturating_add(Weight::from_ref_time(12_715_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn freeze() -> Weight { - (21_019_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(21_019_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn thaw() -> Weight { - (21_907_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(21_907_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) fn freeze_collection() -> Weight { - (16_894_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(16_894_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) fn thaw_collection() -> Weight { - (16_650_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(16_650_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:2) fn transfer_ownership() -> Weight { - (25_095_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(25_095_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) fn set_team() -> Weight { - (17_428_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_428_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_item_status() -> Weight { - (20_018_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(20_018_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn set_attribute() -> Weight { - (41_955_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(41_955_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn clear_attribute() -> Weight { - (40_201_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(40_201_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn set_metadata() -> Weight { - (33_630_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(33_630_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn clear_metadata() -> Weight { - (34_054_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(34_054_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn set_collection_metadata() -> Weight { - (33_283_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(33_283_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn clear_collection_metadata() -> Weight { - (31_298_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(31_298_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn approve_transfer() -> Weight { - (22_430_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(22_430_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn cancel_approval() -> Weight { - (23_005_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(23_005_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) fn set_accept_ownership() -> Weight { - (20_468_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(20_468_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques CollectionMaxSupply (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn set_collection_max_supply() -> Weight { - (19_948_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(19_948_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Asset (r:1 w:0) // Storage: Uniques ItemPriceOf (r:0 w:1) fn set_price() -> Weight { - (19_487_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(19_487_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques ItemPriceOf (r:1 w:1) // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Account (r:0 w:2) fn buy_item() -> Weight { - (39_973_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(39_973_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs index d8b3e0e1f3b..204fb572d9a 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_utility`. @@ -48,26 +48,26 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - (14_433_000 as Weight) + Weight::from_ref_time(14_433_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((3_315_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(Weight::from_ref_time(3_315_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) } fn as_derivative() -> Weight { - (5_234_000 as Weight) + Weight::from_ref_time(5_234_000 as RefTimeWeight) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - (16_023_000 as Weight) + Weight::from_ref_time(16_023_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((3_466_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(Weight::from_ref_time(3_466_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) } fn dispatch_as() -> Weight { - (12_588_000 as Weight) + Weight::from_ref_time(12_588_000 as RefTimeWeight) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - (16_094_000 as Weight) + Weight::from_ref_time(16_094_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((3_280_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(Weight::from_ref_time(3_280_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/paritydb_weights.rs b/parachains/runtimes/assets/westmint/src/weights/paritydb_weights.rs index 843823c1bf3..8083ccb4001 100644 --- a/parachains/runtimes/assets/westmint/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/assets/westmint/src/weights/paritydb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights /// are available for brave runtime engineers who may want to try this out as default. pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 8_000 * constants::WEIGHT_PER_NANOS, - write: 50_000 * constants::WEIGHT_PER_NANOS, + read: 8_000 * constants::WEIGHT_PER_NANOS.ref_time(), + write: 50_000 * constants::WEIGHT_PER_NANOS.ref_time(), }; } diff --git a/parachains/runtimes/assets/westmint/src/weights/rocksdb_weights.rs b/parachains/runtimes/assets/westmint/src/weights/rocksdb_weights.rs index 05e06b0eabe..1db87f143f3 100644 --- a/parachains/runtimes/assets/westmint/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/assets/westmint/src/weights/rocksdb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout /// the runtime. pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000 * constants::WEIGHT_PER_NANOS, - write: 100_000 * constants::WEIGHT_PER_NANOS, + read: 25_000 * constants::WEIGHT_PER_NANOS.ref_time(), + write: 100_000 * constants::WEIGHT_PER_NANOS.ref_time(), }; } diff --git a/parachains/runtimes/assets/westmint/src/xcm_config.rs b/parachains/runtimes/assets/westmint/src/xcm_config.rs index 4a2daa3380e..16d5b84b070 100644 --- a/parachains/runtimes/assets/westmint/src/xcm_config.rs +++ b/parachains/runtimes/assets/westmint/src/xcm_config.rs @@ -20,7 +20,6 @@ use super::{ use frame_support::{ match_types, parameter_types, traits::{Everything, PalletInfoAccess}, - weights::Weight, }; use pallet_xcm::XcmPassthrough; use parachains_common::{ @@ -131,7 +130,7 @@ pub type XcmOriginToTransactDispatchOrigin = ( parameter_types! { // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. - pub UnitWeightCost: Weight = 1_000_000_000; + pub UnitWeightCost: u64 = 1_000_000_000; pub const MaxInstructions: u32 = 100; pub XcmAssetFeesReceiver: Option = Authorship::author(); } diff --git a/parachains/runtimes/assets/westmint/tests/tests.rs b/parachains/runtimes/assets/westmint/tests/tests.rs index a967c85add3..1bd8f7c5ec8 100644 --- a/parachains/runtimes/assets/westmint/tests/tests.rs +++ b/parachains/runtimes/assets/westmint/tests/tests.rs @@ -1,6 +1,8 @@ use asset_test_utils::{ExtBuilder, RuntimeHelper}; use frame_support::{ - assert_noop, assert_ok, traits::PalletInfo, weights::WeightToFee as WeightToFeeT, + assert_noop, assert_ok, + traits::PalletInfo, + weights::{Weight, WeightToFee as WeightToFeeT}, }; use parachains_common::{AccountId, AuraId}; pub use westmint_runtime::{ @@ -50,7 +52,7 @@ fn test_asset_xcm_trader() { let bought = 4_000_000_000u64; // lets calculate amount needed - let amount_needed = WeightToFee::weight_to_fee(&bought); + let amount_needed = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); let asset_multilocation = MultiLocation::new( 0, @@ -130,7 +132,7 @@ fn test_asset_xcm_trader_with_refund() { ); // lets calculate amount needed - let amount_bought = WeightToFee::weight_to_fee(&bought); + let amount_bought = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); let asset: MultiAsset = (asset_multilocation.clone(), amount_bought).into(); @@ -144,7 +146,8 @@ fn test_asset_xcm_trader_with_refund() { let weight_used = bought / 2; // Make sure refurnd works. - let amount_refunded = WeightToFee::weight_to_fee(&(bought - weight_used)); + let amount_refunded = + WeightToFee::weight_to_fee(&Weight::from_ref_time(bought - weight_used)); assert_eq!( trader.refund_weight(bought - weight_used), @@ -155,7 +158,7 @@ fn test_asset_xcm_trader_with_refund() { drop(trader); // We only should have paid for half of the bought weight - let fees_paid = WeightToFee::weight_to_fee(&weight_used); + let fees_paid = WeightToFee::weight_to_fee(&Weight::from_ref_time(weight_used)); assert_eq!( Assets::balance(1, AccountId::from(ALICE)), @@ -207,7 +210,7 @@ fn test_asset_xcm_trader_refund_not_possible_since_amount_less_than_ed() { ), ); - let amount_bought = WeightToFee::weight_to_fee(&bought); + let amount_bought = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); assert!( amount_bought < ExistentialDeposit::get(), @@ -266,7 +269,7 @@ fn test_that_buying_ed_refund_does_not_refund() { ), ); - let amount_bought = WeightToFee::weight_to_fee(&bought); + let amount_bought = WeightToFee::weight_to_fee(&Weight::from_ref_time(bought)); assert!( amount_bought < ExistentialDeposit::get(), diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/constants.rs b/parachains/runtimes/collectives/collectives-polkadot/src/constants.rs index 38853ae7e94..cc41d5c6378 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/constants.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/constants.rs @@ -71,7 +71,7 @@ pub mod fee { // in Polkadot, extrinsic base weight (smallest non-zero weight) is mapped to 1/10 CENT: // in a parachain, we map to 1/10 of that, or 1/100 CENT let p = super::currency::CENTS; - let q = 100 * Balance::from(ExtrinsicBaseWeight::get()); + let q = 100 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); smallvec![WeightToFeeCoefficient { degree: 1, negative: false, diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs index 63cdc10fed3..bc256d3a5f7 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs @@ -338,8 +338,8 @@ impl pallet_proxy::Config for Runtime { } parameter_types! { - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4; - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4; + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); } impl cumulus_pallet_parachain_system::Config for Runtime { diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs index 4db90f0c020..c171a1fdd71 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = 5_000_000 * constants::WEIGHT_PER_NANOS; + pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(5_000_000); } #[cfg(test)] diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs index affda8a2915..334eef4e0f2 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `cumulus_pallet_xcmp_queue`. @@ -48,14 +48,14 @@ pub struct WeightInfo(PhantomData); impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - (5_294_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(5_294_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - (5_180_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(5_180_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs index 158ba99c6a4..6e162888356 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = 125_000 * constants::WEIGHT_PER_NANOS; + pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(125_000); } #[cfg(test)] diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs index 69a9db7d683..2611ff4c722 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `frame_system`. @@ -48,43 +48,43 @@ pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. fn remark(_b: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(b as Weight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) fn set_heap_pages() -> Weight { - (5_069_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(5_069_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn set_storage(i: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((624_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + .saturating_add(Weight::from_ref_time(624_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn kill_storage(i: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((530_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + .saturating_add(Weight::from_ref_time(530_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `p` is `[1, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((1_059_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(p as Weight))) + .saturating_add(Weight::from_ref_time(1_059_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(p as RefTimeWeight))) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs index bfa9e3e35b9..ecbda4eb2f6 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_alliance`. @@ -56,24 +56,24 @@ impl pallet_alliance::WeightInfo for WeightInfo { /// The range of component `y` is `[0, 90]`. /// The range of component `p` is `[1, 100]`. fn propose_proposed(_b: u32, _x: u32, _y: u32, p: u32, ) -> Weight { - (53_023_000 as Weight) + Weight::from_ref_time(53_023_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((132_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + .saturating_add(Weight::from_ref_time(132_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Alliance Members (r:2 w:0) // Storage: AllianceMotion Voting (r:1 w:1) /// The range of component `x` is `[3, 10]`. /// The range of component `y` is `[2, 90]`. fn vote(x: u32, y: u32, ) -> Weight { - (33_003_000 as Weight) + Weight::from_ref_time(33_003_000 as RefTimeWeight) // Standard Error: 106_000 - .saturating_add((312_000 as Weight).saturating_mul(x as Weight)) + .saturating_add(Weight::from_ref_time(312_000 as RefTimeWeight).scalar_saturating_mul(x as RefTimeWeight)) // Standard Error: 4_000 - .saturating_add((82_000 as Weight).saturating_mul(y as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(82_000 as RefTimeWeight).scalar_saturating_mul(y as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Alliance Members (r:1 w:0) // Storage: AllianceMotion ProposalOf (r:1 w:1) @@ -81,11 +81,11 @@ impl pallet_alliance::WeightInfo for WeightInfo { // Storage: AllianceMotion Voting (r:0 w:1) /// The range of component `p` is `[1, 100]`. fn veto(p: u32, ) -> Weight { - (27_289_000 as Weight) + Weight::from_ref_time(27_289_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((131_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + .saturating_add(Weight::from_ref_time(131_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Alliance Members (r:1 w:0) // Storage: AllianceMotion Voting (r:1 w:1) @@ -96,15 +96,15 @@ impl pallet_alliance::WeightInfo for WeightInfo { /// The range of component `y` is `[2, 90]`. /// The range of component `p` is `[1, 100]`. fn close_early_disapproved(x: u32, y: u32, p: u32, ) -> Weight { - (31_884_000 as Weight) + Weight::from_ref_time(31_884_000 as RefTimeWeight) // Standard Error: 72_000 - .saturating_add((358_000 as Weight).saturating_mul(x as Weight)) + .saturating_add(Weight::from_ref_time(358_000 as RefTimeWeight).scalar_saturating_mul(x as RefTimeWeight)) // Standard Error: 3_000 - .saturating_add((109_000 as Weight).saturating_mul(y as Weight)) + .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).scalar_saturating_mul(y as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((109_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Alliance Members (r:1 w:0) // Storage: AllianceMotion Voting (r:1 w:1) @@ -116,17 +116,17 @@ impl pallet_alliance::WeightInfo for WeightInfo { /// The range of component `y` is `[2, 90]`. /// The range of component `p` is `[1, 100]`. fn close_early_approved(b: u32, x: u32, y: u32, p: u32, ) -> Weight { - (43_205_000 as Weight) + Weight::from_ref_time(43_205_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(b as Weight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) // Standard Error: 73_000 - .saturating_add((123_000 as Weight).saturating_mul(x as Weight)) + .saturating_add(Weight::from_ref_time(123_000 as RefTimeWeight).scalar_saturating_mul(x as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((91_000 as Weight).saturating_mul(y as Weight)) + .saturating_add(Weight::from_ref_time(91_000 as RefTimeWeight).scalar_saturating_mul(y as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((114_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + .saturating_add(Weight::from_ref_time(114_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Alliance Members (r:1 w:0) // Storage: AllianceMotion Voting (r:1 w:1) @@ -139,15 +139,15 @@ impl pallet_alliance::WeightInfo for WeightInfo { /// The range of component `y` is `[2, 90]`. /// The range of component `p` is `[1, 100]`. fn close_disapproved(x: u32, y: u32, p: u32, ) -> Weight { - (49_769_000 as Weight) + Weight::from_ref_time(49_769_000 as RefTimeWeight) // Standard Error: 69_000 - .saturating_add((352_000 as Weight).saturating_mul(x as Weight)) + .saturating_add(Weight::from_ref_time(352_000 as RefTimeWeight).scalar_saturating_mul(x as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((81_000 as Weight).saturating_mul(y as Weight)) + .saturating_add(Weight::from_ref_time(81_000 as RefTimeWeight).scalar_saturating_mul(y as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((100_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + .saturating_add(Weight::from_ref_time(100_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Alliance Members (r:1 w:0) // Storage: AllianceMotion Voting (r:1 w:1) @@ -160,15 +160,15 @@ impl pallet_alliance::WeightInfo for WeightInfo { /// The range of component `y` is `[2, 90]`. /// The range of component `p` is `[1, 100]`. fn close_approved(b: u32, _x: u32, y: u32, p: u32, ) -> Weight { - (40_901_000 as Weight) + Weight::from_ref_time(40_901_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((3_000 as Weight).saturating_mul(b as Weight)) + .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((79_000 as Weight).saturating_mul(y as Weight)) + .saturating_add(Weight::from_ref_time(79_000 as RefTimeWeight).scalar_saturating_mul(y as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((102_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + .saturating_add(Weight::from_ref_time(102_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Alliance Members (r:3 w:3) // Storage: AllianceMotion Members (r:1 w:1) @@ -176,55 +176,55 @@ impl pallet_alliance::WeightInfo for WeightInfo { /// The range of component `y` is `[0, 90]`. /// The range of component `z` is `[0, 100]`. fn init_members(_x: u32, y: u32, z: u32, ) -> Weight { - (39_647_000 as Weight) + Weight::from_ref_time(39_647_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((123_000 as Weight).saturating_mul(y as Weight)) + .saturating_add(Weight::from_ref_time(123_000 as RefTimeWeight).scalar_saturating_mul(y as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((116_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + .saturating_add(Weight::from_ref_time(116_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Alliance Rule (r:0 w:1) fn set_rule() -> Weight { - (14_689_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(14_689_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Alliance Announcements (r:1 w:1) fn announce() -> Weight { - (15_988_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(15_988_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Alliance Announcements (r:1 w:1) fn remove_announcement() -> Weight { - (16_823_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(16_823_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Alliance UnscrupulousAccounts (r:1 w:0) // Storage: Alliance Members (r:4 w:1) // Storage: System Account (r:1 w:1) // Storage: Alliance DepositOf (r:0 w:1) fn join_alliance() -> Weight { - (46_340_000 as Weight) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + Weight::from_ref_time(46_340_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Alliance Members (r:4 w:1) // Storage: Alliance UnscrupulousAccounts (r:1 w:0) fn nominate_ally() -> Weight { - (36_225_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(36_225_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Alliance Members (r:3 w:2) // Storage: AllianceMotion Proposals (r:1 w:0) // Storage: AllianceMotion Members (r:0 w:1) // Storage: AllianceMotion Prime (r:0 w:1) fn elevate_ally() -> Weight { - (30_236_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(30_236_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: Alliance UpForKicking (r:1 w:0) // Storage: Alliance Members (r:3 w:1) @@ -234,9 +234,9 @@ impl pallet_alliance::WeightInfo for WeightInfo { // Storage: AllianceMotion Members (r:0 w:1) // Storage: AllianceMotion Prime (r:0 w:1) fn retire() -> Weight { - (44_311_000 as Weight) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) + Weight::from_ref_time(44_311_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(7 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(5 as RefTimeWeight)) } // Storage: Alliance Members (r:3 w:1) // Storage: AllianceMotion Proposals (r:1 w:0) @@ -246,34 +246,34 @@ impl pallet_alliance::WeightInfo for WeightInfo { // Storage: AllianceMotion Prime (r:0 w:1) // Storage: Alliance UpForKicking (r:0 w:1) fn kick_member() -> Weight { - (46_112_000 as Weight) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(6 as Weight)) + Weight::from_ref_time(46_112_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(6 as RefTimeWeight)) } // Storage: Alliance UnscrupulousAccounts (r:1 w:1) // Storage: Alliance UnscrupulousWebsites (r:1 w:1) /// The range of component `n` is `[1, 100]`. /// The range of component `l` is `[1, 255]`. fn add_unscrupulous_items(n: u32, l: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((1_300_000 as Weight).saturating_mul(n as Weight)) + .saturating_add(Weight::from_ref_time(1_300_000 as RefTimeWeight).scalar_saturating_mul(n as RefTimeWeight)) // Standard Error: 1_000 - .saturating_add((125_000 as Weight).saturating_mul(l as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(125_000 as RefTimeWeight).scalar_saturating_mul(l as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Alliance UnscrupulousAccounts (r:1 w:1) // Storage: Alliance UnscrupulousWebsites (r:1 w:1) /// The range of component `n` is `[1, 100]`. /// The range of component `l` is `[1, 255]`. fn remove_unscrupulous_items(n: u32, l: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 197_000 - .saturating_add((34_156_000 as Weight).saturating_mul(n as Weight)) + .saturating_add(Weight::from_ref_time(34_156_000 as RefTimeWeight).scalar_saturating_mul(n as RefTimeWeight)) // Standard Error: 87_000 - .saturating_add((7_042_000 as Weight).saturating_mul(l as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(7_042_000 as RefTimeWeight).scalar_saturating_mul(l as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs index 6d97bd946ee..b3bb1dd2135 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. @@ -48,44 +48,44 @@ pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - (39_576_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(39_576_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - (30_212_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(30_212_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { - (19_428_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(19_428_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { - (22_526_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(22_526_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { - (38_737_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(38_737_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { - (35_648_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(35_648_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { - (17_197_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(17_197_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs index 9213c294ced..251d664e393 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_collator_selection`. @@ -50,21 +50,21 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection Invulnerables (r:0 w:1) /// The range of component `b` is `[1, 100]`. fn set_invulnerables(b: u32, ) -> Weight { - (7_128_000 as Weight) + Weight::from_ref_time(7_128_000 as RefTimeWeight) // Standard Error: 4_000 - .saturating_add((3_105_000 as Weight).saturating_mul(b as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(3_105_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(b as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: CollatorSelection DesiredCandidates (r:0 w:1) fn set_desired_candidates() -> Weight { - (7_922_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(7_922_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: CollatorSelection CandidacyBond (r:0 w:1) fn set_candidacy_bond() -> Weight { - (8_226_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(8_226_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection DesiredCandidates (r:1 w:0) @@ -74,29 +74,29 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[1, 1000]`. fn register_as_candidate(c: u32, ) -> Weight { - (56_086_000 as Weight) + Weight::from_ref_time(56_086_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((93_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(93_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[6, 1000]`. fn leave_intent(c: u32, ) -> Weight { - (58_436_000 as Weight) + Weight::from_ref_time(58_436_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((102_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(102_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: System Account (r:2 w:2) // Storage: System BlockWeight (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) fn note_author() -> Weight { - (29_654_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + Weight::from_ref_time(29_654_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:1000 w:1) @@ -106,13 +106,13 @@ impl pallet_collator_selection::WeightInfo for WeightIn /// The range of component `r` is `[1, 1000]`. /// The range of component `c` is `[1, 1000]`. fn new_session(r: u32, c: u32, ) -> Weight { - (0 as Weight) + Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_911_000 - .saturating_add((9_907_000 as Weight).saturating_mul(r as Weight)) + .saturating_add(Weight::from_ref_time(9_907_000 as RefTimeWeight).scalar_saturating_mul(r as RefTimeWeight)) // Standard Error: 1_911_000 - .saturating_add((50_916_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(r as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(c as Weight))) + .saturating_add(Weight::from_ref_time(50_916_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs index 57cee1a56cb..9ab03863a00 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_multisig`. @@ -48,22 +48,22 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - (17_905_000 as Weight) + Weight::from_ref_time(17_905_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - (34_787_000 as Weight) + Weight::from_ref_time(34_787_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((105_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(105_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -71,38 +71,38 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - (38_845_000 as Weight) + Weight::from_ref_time(38_845_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((75_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(75_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - (25_600_000 as Weight) + Weight::from_ref_time(25_600_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((76_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(76_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - (36_944_000 as Weight) + Weight::from_ref_time(36_944_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((95_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(95_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -110,53 +110,53 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - (46_014_000 as Weight) + Weight::from_ref_time(46_014_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((126_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(Weight::from_ref_time(126_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - (31_616_000 as Weight) + Weight::from_ref_time(31_616_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((117_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - (20_862_000 as Weight) + Weight::from_ref_time(20_862_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add((109_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_complete(s: u32, ) -> Weight { - (64_311_000 as Weight) + Weight::from_ref_time(64_311_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add((164_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + .saturating_add(Weight::from_ref_time(164_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - (51_181_000 as Weight) + Weight::from_ref_time(51_181_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((110_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(110_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs index cfad3df2b9e..79afbf6a128 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. @@ -49,10 +49,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:0) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - (16_628_000 as Weight) + Weight::from_ref_time(16_628_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((90_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(Weight::from_ref_time(90_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -60,39 +60,39 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - (33_846_000 as Weight) + Weight::from_ref_time(33_846_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((175_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(175_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 3_000 - .saturating_add((88_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(88_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn remove_announcement(a: u32, p: u32, ) -> Weight { - (23_633_000 as Weight) + Weight::from_ref_time(23_633_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((184_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(184_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((29_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(29_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, p: u32, ) -> Weight { - (24_121_000 as Weight) + Weight::from_ref_time(24_121_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((177_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(177_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((15_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(15_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -100,58 +100,58 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - (31_509_000 as Weight) + Weight::from_ref_time(31_509_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((172_000 as Weight).saturating_mul(a as Weight)) + .saturating_add(Weight::from_ref_time(172_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add((86_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(Weight::from_ref_time(86_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - (26_168_000 as Weight) + Weight::from_ref_time(26_168_000 as RefTimeWeight) // Standard Error: 4_000 - .saturating_add((127_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(127_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - (26_306_000 as Weight) + Weight::from_ref_time(26_306_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((131_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(131_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - (22_287_000 as Weight) + Weight::from_ref_time(22_287_000 as RefTimeWeight) // Standard Error: 3_000 - .saturating_add((85_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn anonymous(p: u32, ) -> Weight { - (29_260_000 as Weight) + Weight::from_ref_time(29_260_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((38_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(38_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. fn kill_anonymous(p: u32, ) -> Weight { - (23_012_000 as Weight) + Weight::from_ref_time(23_012_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((97_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(Weight::from_ref_time(97_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs index 14b53f1e6e3..f090d83650f 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. @@ -49,15 +49,15 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:1 w:1) fn set_keys() -> Weight { - (15_802_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(15_802_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:1) fn purge_keys() -> Weight { - (12_925_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + Weight::from_ref_time(12_925_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs index 08a237a62cf..b3d37bdc773 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. @@ -48,11 +48,11 @@ pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { // Storage: Timestamp Now (r:1 w:1) fn set() -> Weight { - (6_170_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + Weight::from_ref_time(6_170_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } fn on_finalize() -> Weight { - (2_177_000 as Weight) + Weight::from_ref_time(2_177_000 as RefTimeWeight) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs index 3cf818490b6..5e57bdda111 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_utility`. @@ -48,26 +48,26 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - (13_398_000 as Weight) + Weight::from_ref_time(13_398_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((3_159_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(Weight::from_ref_time(3_159_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) } fn as_derivative() -> Weight { - (4_668_000 as Weight) + Weight::from_ref_time(4_668_000 as RefTimeWeight) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - (10_742_000 as Weight) + Weight::from_ref_time(10_742_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((3_375_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(Weight::from_ref_time(3_375_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) } fn dispatch_as() -> Weight { - (11_022_000 as Weight) + Weight::from_ref_time(11_022_000 as RefTimeWeight) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - (14_280_000 as Weight) + Weight::from_ref_time(14_280_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add((3_150_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(Weight::from_ref_time(3_150_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs index 843823c1bf3..8083ccb4001 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// `ParityDB` can be enabled with a feature flag, but is still experimental. These weights /// are available for brave runtime engineers who may want to try this out as default. pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 8_000 * constants::WEIGHT_PER_NANOS, - write: 50_000 * constants::WEIGHT_PER_NANOS, + read: 8_000 * constants::WEIGHT_PER_NANOS.ref_time(), + write: 50_000 * constants::WEIGHT_PER_NANOS.ref_time(), }; } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs index 05e06b0eabe..1db87f143f3 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs @@ -25,8 +25,8 @@ pub mod constants { /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout /// the runtime. pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000 * constants::WEIGHT_PER_NANOS, - write: 100_000 * constants::WEIGHT_PER_NANOS, + read: 25_000 * constants::WEIGHT_PER_NANOS.ref_time(), + write: 100_000 * constants::WEIGHT_PER_NANOS.ref_time(), }; } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs index 09869b67e72..f728a6d9cbc 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs @@ -20,7 +20,6 @@ use super::{ use frame_support::{ match_types, parameter_types, traits::{Everything, Nothing}, - weights::Weight, }; use pallet_xcm::XcmPassthrough; use parachains_common::{ @@ -100,7 +99,7 @@ pub type XcmOriginToTransactDispatchOrigin = ( parameter_types! { // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. - pub UnitWeightCost: Weight = 1_000_000_000; + pub UnitWeightCost: u64 = 1_000_000_000; pub const MaxInstructions: u32 = 100; } diff --git a/parachains/runtimes/contracts/contracts-rococo/src/constants.rs b/parachains/runtimes/contracts/contracts-rococo/src/constants.rs index fabc09d017a..6dccf0089ca 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/constants.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/constants.rs @@ -61,7 +61,7 @@ pub mod fee { // in Kusama, extrinsic base weight (smallest non-zero weight) is mapped to 1/10 CENT: // in Statemine, we map to 1/10 of that, or 1/100 CENT let p = super::currency::CENTS; - let q = 100 * Balance::from(ExtrinsicBaseWeight::get()); + let q = 100 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); smallvec![WeightToFeeCoefficient { degree: 1, negative: false, diff --git a/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs b/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs index 47d8369d807..5f3d5310b8e 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs @@ -26,9 +26,9 @@ parameter_types! { RuntimeBlockWeights::get().max_block; // The weight needed for decoding the queue should be less or equal than a fifth // of the overall weight dedicated to the lazy deletion. - pub DeletionQueueDepth: u32 = ((DeletionWeightLimit::get() / ( - ::WeightInfo::on_initialize_per_queue_item(1) - - ::WeightInfo::on_initialize_per_queue_item(0) + pub DeletionQueueDepth: u32 = ((DeletionWeightLimit::get().ref_time() / ( + ::WeightInfo::on_initialize_per_queue_item(1).ref_time() - + ::WeightInfo::on_initialize_per_queue_item(0).ref_time() )) / 5) as u32; pub MySchedule: Schedule = Default::default(); } diff --git a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index 7b9ae48d505..b3740451807 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -49,7 +49,7 @@ use constants::{currency::*, fee::WeightToFee}; use frame_support::{ construct_runtime, parameter_types, traits::{ConstU128, ConstU16, ConstU32, ConstU64, ConstU8, Everything}, - weights::{ConstantMultiplier, DispatchClass}, + weights::{ConstantMultiplier, DispatchClass, Weight}, PalletId, }; use frame_system::limits::{BlockLength, BlockWeights}; @@ -64,9 +64,6 @@ use xcm_config::CollatorSelectionUpdateOrigin; #[cfg(any(feature = "std", test))] pub use sp_runtime::BuildStorage; -#[cfg(feature = "try-runtime")] -use frame_support::weights::Weight; - // Polkadot imports use polkadot_runtime_common::{BlockHashCount, SlowAdjustingFeeUpdate}; @@ -245,15 +242,20 @@ impl pallet_utility::Config for Runtime { type WeightInfo = pallet_utility::weights::SubstrateWeight; } +parameter_types! { + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); +} + impl cumulus_pallet_parachain_system::Config for Runtime { type Event = Event; type OnSystemEvent = (); type SelfParaId = parachain_info::Pallet; type DmpMessageHandler = DmpQueue; - type ReservedDmpWeight = ConstU64<{ MAXIMUM_BLOCK_WEIGHT / 4 }>; + type ReservedDmpWeight = ReservedDmpWeight; type OutboundXcmpMessageSource = XcmpQueue; type XcmpMessageHandler = XcmpQueue; - type ReservedXcmpWeight = ConstU64<{ MAXIMUM_BLOCK_WEIGHT / 4 }>; + type ReservedXcmpWeight = ReservedXcmpWeight; type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; } @@ -515,7 +517,7 @@ impl pallet_contracts_rpc_runtime_api::ContractsApi( origin: &MultiLocation, message: &mut Xcm, - max_weight: Weight, - weight_credit: &mut Weight, + max_weight: XCMWeight, + weight_credit: &mut XCMWeight, ) -> Result<(), ()> { Deny::should_execute(origin, message, max_weight, weight_credit)?; Allow::should_execute(origin, message, max_weight, weight_credit) @@ -179,8 +178,8 @@ impl ShouldExecute for DenyReserveTransferToRelayChain { fn should_execute( origin: &MultiLocation, message: &mut Xcm, - _max_weight: Weight, - _weight_credit: &mut Weight, + _max_weight: XCMWeight, + _weight_credit: &mut XCMWeight, ) -> Result<(), ()> { if message.0.iter().any(|inst| { matches!( diff --git a/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/parachains/runtimes/testing/rococo-parachain/src/lib.rs index cc123ddb2e2..f0729485f51 100644 --- a/parachains/runtimes/testing/rococo-parachain/src/lib.rs +++ b/parachains/runtimes/testing/rococo-parachain/src/lib.rs @@ -132,7 +132,7 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND / 2; +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.scalar_div(2); parameter_types! { pub const BlockHashCount: BlockNumber = 250; @@ -254,8 +254,8 @@ impl pallet_sudo::Config for Runtime { } parameter_types! { - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4; - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4; + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); } impl cumulus_pallet_parachain_system::Config for Runtime { @@ -358,7 +358,7 @@ pub type XcmOriginToTransactDispatchOrigin = ( parameter_types! { // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. - pub UnitWeightCost: Weight = 1_000_000_000; + pub UnitWeightCost: u64 = 1_000_000_000; // One ROC buys 1 second of weight. pub const WeightPrice: (MultiLocation, u128) = (MultiLocation::parent(), ROC); pub const MaxInstructions: u32 = 100; diff --git a/primitives/utility/src/lib.rs b/primitives/utility/src/lib.rs index ea7a81f327d..2ed99394a6c 100644 --- a/primitives/utility/src/lib.rs +++ b/primitives/utility/src/lib.rs @@ -28,7 +28,10 @@ use frame_support::{ use sp_runtime::{traits::Saturating, SaturatedConversion}; use sp_std::marker::PhantomData; -use xcm::{latest::prelude::*, WrapVersion}; +use xcm::{ + latest::{prelude::*, Weight as XCMWeight}, + WrapVersion, +}; use xcm_builder::TakeRevenue; use xcm_executor::traits::{MatchesFungibles, TransactAsset, WeightTrader}; /// Xcm router which recognises the `Parent` destination and handles it by sending the message into @@ -105,7 +108,7 @@ impl< // If everything goes well, we charge. fn buy_weight( &mut self, - weight: Weight, + weight: XCMWeight, payment: xcm_executor::Assets, ) -> Result { log::trace!(target: "xcm::weight", "TakeFirstAssetTrader::buy_weight weight: {:?}, payment: {:?}", weight, payment); @@ -115,6 +118,8 @@ impl< return Err(XcmError::NotWithdrawable) } + let weight = Weight::from_ref_time(weight); + // We take the very first multiasset from payment let multiassets: MultiAssets = payment.clone().into(); @@ -155,14 +160,14 @@ impl< Ok(unused) } - fn refund_weight(&mut self, weight: Weight) -> Option { + fn refund_weight(&mut self, weight: XCMWeight) -> Option { log::trace!(target: "xcm::weight", "TakeFirstAssetTrader::refund_weight weight: {:?}", weight); if let Some(AssetTraderRefunder { mut weight_outstanding, outstanding_concrete_asset: MultiAsset { id, fun }, }) = self.0.clone() { - let weight = weight.min(weight_outstanding); + let weight = Weight::from_ref_time(weight).min(weight_outstanding); // Get the local asset id in which we can refund fees let (local_asset_id, outstanding_balance) = diff --git a/test/runtime/src/lib.rs b/test/runtime/src/lib.rs index b6567887cdd..7feb25aa26a 100644 --- a/test/runtime/src/lib.rs +++ b/test/runtime/src/lib.rs @@ -138,7 +138,7 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND / 2; +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.scalar_div(2); parameter_types! { pub const BlockHashCount: BlockNumber = 250; @@ -348,8 +348,7 @@ pub struct TestOnRuntimeUpgrade; impl OnRuntimeUpgrade for TestOnRuntimeUpgrade { fn on_runtime_upgrade() -> frame_support::weights::Weight { assert_eq!(sp_io::storage::get(TEST_RUNTIME_UPGRADE_KEY), Some(vec![1, 2, 3, 4].into())); - - 1 + Weight::one() } } diff --git a/test/service/src/lib.rs b/test/service/src/lib.rs index 9132983e3eb..c0a0067ec30 100644 --- a/test/service/src/lib.rs +++ b/test/service/src/lib.rs @@ -28,6 +28,7 @@ use std::{ }; use url::Url; +use crate::runtime::Weight; use cumulus_client_cli::CollatorOptions; use cumulus_client_consensus_common::{ParachainCandidate, ParachainConsensus}; use cumulus_client_network::BlockAnnounceValidator; @@ -717,7 +718,10 @@ impl TestNode { let call = frame_system::Call::set_code { code: validation }; self.send_extrinsic( - runtime::SudoCall::sudo_unchecked_weight { call: Box::new(call.into()), weight: 1_000 }, + runtime::SudoCall::sudo_unchecked_weight { + call: Box::new(call.into()), + weight: Weight::from_ref_time(1_000), + }, Sr25519Keyring::Alice, ) .await From 99430a508da1ac7da47994058d3b114a69c6ab6d Mon Sep 17 00:00:00 2001 From: Roman Useinov Date: Thu, 1 Sep 2022 11:39:01 +0200 Subject: [PATCH 031/148] [Feature] Add XCM benchmark weights to Statemint and Statemine (#1454) * [Feature] Add XCM benchmarark weights to Statemint and Statemine * add xcm-bench-template * add polkadot xcm bench pallet to statemint * Sample benchmarking that compiles * add benches to the module * Remove batches assertion and whitelist ActiveConfig * ".git/.scripts/bench-bot.sh" xcm statemint assets pallet_xcm_benchmarks::generic * ".git/.scripts/bench-bot.sh" xcm statemint assets pallet_xcm_benchmarks::generic * fix benchmarks * fix get_multi_asset * fmt and more bench fixes * reformat * move Xcm type definitions * define types twice * remove commented out lines * define Xcm bench types globally * test use * fix semi * make sure the type definittion is properly documented * tweak TrustedTeleporter/Reserve * use dots as asset * copy benchmarks over, fix the ci script * remove extra asset * ".git/.scripts/bench-bot.sh" xcm statemint assets pallet_xcm_benchmarks::generic * benchmarks setup for statemint/e and westmint * ".git/.scripts/bench-bot.sh" xcm statemint assets pallet_xcm_benchmarks::fungible * ".git/.scripts/bench-bot.sh" xcm statemine assets pallet_xcm_benchmarks::generic * ".git/.scripts/bench-bot.sh" xcm statemine assets pallet_xcm_benchmarks::fungible * remove a check * ".git/.scripts/bench-bot.sh" xcm westmint assets pallet_xcm_benchmarks::fungible * ".git/.scripts/bench-bot.sh" xcm westmint assets pallet_xcm_benchmarks::generic * implement WeightInfoBounds for all the asset runtimes * update Cargo.lock * fix Muharem's comments * ".git/.scripts/bench-bot.sh" xcm statemint assets pallet_xcm_benchmarks::generic * Update parachains/runtimes/assets/statemint/src/lib.rs Co-authored-by: Oliver Tale-Yazdi * fix some review comments * fix file headers * more fixes to licenses and such * fix another inconsistency * Extend weights template Signed-off-by: Oliver Tale-Yazdi * remove a placeholder * remove redundant overrides * ".git/.scripts/bench-bot.sh" xcm statemint assets pallet_xcm_benchmarks::fungible * Update benchmarking.rs * remove redundant bench * fix * ".git/.scripts/bench-bot.sh" xcm statemint assets pallet_xcm_benchmarks::generic * Update pallets/xcm-benchmarks/src/fungible/mock.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * remove TODO's * remove local xcm-benchmark-pallet impl * disable CheckedAccount in benches * update template * fix up imports * fix xcm * fix the template Signed-off-by: Oliver Tale-Yazdi Co-authored-by: command-bot <> Co-authored-by: Oliver Tale-Yazdi Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> --- Cargo.lock | 3 + .../runtimes/assets/statemine/Cargo.toml | 2 + .../runtimes/assets/statemine/src/lib.rs | 105 +++++++++- .../assets/statemine/src/weights/mod.rs | 1 + .../assets/statemine/src/weights/xcm/mod.rs | 182 ++++++++++++++++++ .../xcm/pallet_xcm_benchmarks_fungible.rs | 107 ++++++++++ .../xcm/pallet_xcm_benchmarks_generic.rs | 137 +++++++++++++ .../assets/statemine/src/xcm_config.rs | 19 +- .../runtimes/assets/statemint/Cargo.toml | 2 + .../runtimes/assets/statemint/src/lib.rs | 104 +++++++++- .../assets/statemint/src/weights/mod.rs | 1 + .../assets/statemint/src/weights/xcm/mod.rs | 182 ++++++++++++++++++ .../xcm/pallet_xcm_benchmarks_fungible.rs | 108 +++++++++++ .../xcm/pallet_xcm_benchmarks_generic.rs | 138 +++++++++++++ .../assets/statemint/src/xcm_config.rs | 18 +- .../runtimes/assets/westmint/Cargo.toml | 2 + .../runtimes/assets/westmint/src/lib.rs | 104 +++++++++- .../assets/westmint/src/weights/mod.rs | 1 + .../assets/westmint/src/weights/xcm/mod.rs | 182 ++++++++++++++++++ .../xcm/pallet_xcm_benchmarks_fungible.rs | 107 ++++++++++ .../xcm/pallet_xcm_benchmarks_generic.rs | 137 +++++++++++++ .../assets/westmint/src/xcm_config.rs | 18 +- scripts/benchmarks-ci.sh | 12 +- templates/xcm-bench-template.hbs | 68 +++++++ 24 files changed, 1704 insertions(+), 36 deletions(-) create mode 100644 parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs create mode 100644 parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs create mode 100644 parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs create mode 100644 parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs create mode 100644 parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs create mode 100644 parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs create mode 100644 parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs create mode 100644 parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs create mode 100644 parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs create mode 100644 templates/xcm-bench-template.hbs diff --git a/Cargo.lock b/Cargo.lock index b89b017b44f..1dd64620670 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11597,6 +11597,7 @@ dependencies = [ "pallet-uniques", "pallet-utility", "pallet-xcm", + "pallet-xcm-benchmarks", "parachain-info", "parachains-common", "parity-scale-codec", @@ -11663,6 +11664,7 @@ dependencies = [ "pallet-uniques", "pallet-utility", "pallet-xcm", + "pallet-xcm-benchmarks", "parachain-info", "parachains-common", "parity-scale-codec", @@ -13139,6 +13141,7 @@ dependencies = [ "pallet-uniques", "pallet-utility", "pallet-xcm", + "pallet-xcm-benchmarks", "parachain-info", "parachains-common", "parity-scale-codec", diff --git a/parachains/runtimes/assets/statemine/Cargo.toml b/parachains/runtimes/assets/statemine/Cargo.toml index 78f540c2796..63e3cf1b1bc 100644 --- a/parachains/runtimes/assets/statemine/Cargo.toml +++ b/parachains/runtimes/assets/statemine/Cargo.toml @@ -71,6 +71,7 @@ cumulus-primitives-utility = { path = "../../../../primitives/utility", default- pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } +pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", branch = "master", default-features = false, optional = true } [dev-dependencies] @@ -101,6 +102,7 @@ runtime-benchmarks = [ "cumulus-pallet-session-benchmarking/runtime-benchmarks", "pallet-collator-selection/runtime-benchmarks", "cumulus-pallet-xcmp-queue/runtime-benchmarks", + "pallet-xcm-benchmarks", ] try-runtime = [ "frame-executive/try-runtime", diff --git a/parachains/runtimes/assets/statemine/src/lib.rs b/parachains/runtimes/assets/statemine/src/lib.rs index ebb7bd00d5d..f33c85bbaf0 100644 --- a/parachains/runtimes/assets/statemine/src/lib.rs +++ b/parachains/runtimes/assets/statemine/src/lib.rs @@ -638,6 +638,10 @@ mod benches { [pallet_timestamp, Timestamp] [pallet_collator_selection, CollatorSelection] [cumulus_pallet_xcmp_queue, XcmpQueue] + // XCM + // NOTE: Make sure you point to the individual modules below. + [pallet_xcm_benchmarks::fungible, XcmBalances] + [pallet_xcm_benchmarks::generic, XcmGeneric] ); } @@ -789,6 +793,12 @@ impl_runtime_apis! { use frame_system_benchmarking::Pallet as SystemBench; use cumulus_pallet_session_benchmarking::Pallet as SessionBench; + // This is defined once again in dispatch_benchmark, because list_benchmarks! + // and add_benchmarks! are macros exported by define_benchmarks! macros and those types + // are referenced in that call. + type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; + type XcmGeneric = pallet_xcm_benchmarks::generic::Pallet::; + let mut list = Vec::::new(); list_benchmarks!(list, extra); @@ -799,7 +809,8 @@ impl_runtime_apis! { fn dispatch_benchmark( config: frame_benchmarking::BenchmarkConfig ) -> Result, sp_runtime::RuntimeString> { - use frame_benchmarking::{Benchmarking, BenchmarkBatch, TrackedStorageKey}; + use frame_benchmarking::{Benchmarking, BenchmarkBatch, BenchmarkError, + TrackedStorageKey}; use frame_system_benchmarking::Pallet as SystemBench; impl frame_system_benchmarking::Config for Runtime {} @@ -807,6 +818,95 @@ impl_runtime_apis! { use cumulus_pallet_session_benchmarking::Pallet as SessionBench; impl cumulus_pallet_session_benchmarking::Config for Runtime {} + use xcm::latest::prelude::*; + use xcm_config::KsmLocation; + use pallet_xcm_benchmarks::asset_instance_from; + + impl pallet_xcm_benchmarks::Config for Runtime { + type XcmConfig = xcm_config::XcmConfig; + type AccountIdConverter = xcm_config::LocationToAccountId; + fn valid_destination() -> Result { + Ok(KsmLocation::get()) + } + fn worst_case_holding() -> MultiAssets { + // A mix of fungible, non-fungible, and concrete assets. + const HOLDING_FUNGIBLES: u32 = 100; + const HOLDING_NON_FUNGIBLES: u32 = 100; + let fungibles_amount: u128 = 100; + let mut assets = (0..HOLDING_FUNGIBLES) + .map(|i| { + MultiAsset { + id: Concrete(GeneralIndex(i as u128).into()), + fun: Fungible(fungibles_amount * i as u128), + } + .into() + }) + .chain(core::iter::once(MultiAsset { id: Concrete(Here.into()), fun: Fungible(u128::MAX) })) + .chain((0..HOLDING_NON_FUNGIBLES).map(|i| MultiAsset { + id: Concrete(GeneralIndex(i as u128).into()), + fun: NonFungible(asset_instance_from(i)), + })) + .collect::>(); + + assets.push(MultiAsset{ + id: Concrete(KsmLocation::get()), + fun: Fungible(1_000_000 * UNITS), + }); + assets.into() + } + } + + parameter_types! { + pub const TrustedTeleporter: Option<(MultiLocation, MultiAsset)> = Some(( + KsmLocation::get(), + MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(KsmLocation::get()) }, + )); + pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = None; + pub const CheckedAccount: Option = None; + + } + + impl pallet_xcm_benchmarks::fungible::Config for Runtime { + type TransactAsset = Balances; + + type CheckedAccount = CheckedAccount; + type TrustedTeleporter = TrustedTeleporter; + type TrustedReserve = TrustedReserve; + + fn get_multi_asset() -> MultiAsset { + MultiAsset { + id: Concrete(KsmLocation::get()), + fun: Fungible(1 * UNITS), + } + } + } + + impl pallet_xcm_benchmarks::generic::Config for Runtime { + type Call = Call; + + fn worst_case_response() -> (u64, Response) { + (0u64, Response::Version(Default::default())) + } + + fn transact_origin() -> Result { + Ok(KsmLocation::get()) + } + + fn subscribe_origin() -> Result { + Ok(KsmLocation::get()) + } + + fn claimable_asset() -> Result<(MultiLocation, MultiLocation, MultiAssets), BenchmarkError> { + let origin = KsmLocation::get(); + let assets: MultiAssets = (Concrete(KsmLocation::get()), 1_000 * UNITS).into(); + let ticket = MultiLocation { parents: 0, interior: Here }; + Ok((origin, ticket, assets)) + } + } + + type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; + type XcmGeneric = pallet_xcm_benchmarks::generic::Pallet::; + let whitelist: Vec = vec![ // Block Number hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(), @@ -818,13 +918,14 @@ impl_runtime_apis! { hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(), // System Events hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(), + //TODO: use from relay_well_known_keys::ACTIVE_CONFIG + hex_literal::hex!("06de3d8a54d27e44a9d5ce189618f22db4b49d95320d9021994c850f25b8e385").to_vec().into(), ]; let mut batches = Vec::::new(); let params = (&config, &whitelist); add_benchmarks!(params, batches); - if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) } Ok(batches) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/mod.rs b/parachains/runtimes/assets/statemine/src/weights/mod.rs index bfe3c7bba5f..080584f2cfa 100644 --- a/parachains/runtimes/assets/statemine/src/weights/mod.rs +++ b/parachains/runtimes/assets/statemine/src/weights/mod.rs @@ -13,6 +13,7 @@ pub mod pallet_uniques; pub mod pallet_utility; pub mod paritydb_weights; pub mod rocksdb_weights; +pub mod xcm; pub use block_weights::constants::BlockExecutionWeight; pub use extrinsic_weights::constants::ExtrinsicBaseWeight; diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs new file mode 100644 index 00000000000..10d4e18902f --- /dev/null +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs @@ -0,0 +1,182 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus 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 Cumulus. If not, see . + +mod pallet_xcm_benchmarks_fungible; +mod pallet_xcm_benchmarks_generic; + +use crate::Runtime; +use frame_support::weights::Weight; +use pallet_xcm_benchmarks_fungible::WeightInfo as XcmFungibleWeight; +use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; +use sp_std::prelude::*; +use xcm::{ + latest::{prelude::*, Weight as XCMWeight}, + DoubleEncoded, +}; + +trait WeighMultiAssets { + fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight; +} + +const MAX_ASSETS: u32 = 100; + +impl WeighMultiAssets for MultiAssetFilter { + fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { + let weight = match self { + Self::Definite(assets) => + weight.scalar_saturating_mul(assets.inner().into_iter().count() as u64), + Self::Wild(_) => weight.scalar_saturating_mul(MAX_ASSETS as u64), + }; + weight.ref_time() + } +} + +impl WeighMultiAssets for MultiAssets { + fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { + weight.scalar_saturating_mul(self.inner().into_iter().count() as u64).ref_time() + } +} + +pub struct StatemineXcmWeight(core::marker::PhantomData); +impl XcmWeightInfo for StatemineXcmWeight { + fn withdraw_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::withdraw_asset()) + } + // Currently there is no trusted reserve + fn reserve_asset_deposited(_assets: &MultiAssets) -> XCMWeight { + unimplemented!() + } + fn receive_teleported_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::receive_teleported_asset()) + } + fn query_response(_query_id: &u64, _response: &Response, _max_weight: &u64) -> XCMWeight { + XcmGeneric::::query_response().ref_time() + } + fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::transfer_asset()) + } + fn transfer_reserve_asset( + assets: &MultiAssets, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::transfer_reserve_asset()) + } + fn transact( + _origin_type: &OriginKind, + _require_weight_at_most: &u64, + _call: &DoubleEncoded, + ) -> XCMWeight { + XcmGeneric::::transact().ref_time() + } + fn hrmp_new_channel_open_request( + _sender: &u32, + _max_message_size: &u32, + _max_capacity: &u32, + ) -> XCMWeight { + // XCM Executor does not currently support HRMP channel operations + Weight::MAX.ref_time() + } + fn hrmp_channel_accepted(_recipient: &u32) -> XCMWeight { + // XCM Executor does not currently support HRMP channel operations + Weight::MAX.ref_time() + } + fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> XCMWeight { + // XCM Executor does not currently support HRMP channel operations + Weight::MAX.ref_time() + } + fn clear_origin() -> XCMWeight { + XcmGeneric::::clear_origin().ref_time() + } + fn descend_origin(_who: &InteriorMultiLocation) -> XCMWeight { + XcmGeneric::::descend_origin().ref_time() + } + fn report_error( + _query_id: &QueryId, + _dest: &MultiLocation, + _max_response_weight: &u64, + ) -> XCMWeight { + XcmGeneric::::report_error().ref_time() + } + + fn deposit_asset( + assets: &MultiAssetFilter, + _max_assets: &u32, + _dest: &MultiLocation, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()) + } + fn deposit_reserve_asset( + assets: &MultiAssetFilter, + _max_assets: &u32, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) + } + fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { + Weight::MAX.ref_time() + } + fn initiate_reserve_withdraw( + assets: &MultiAssetFilter, + _reserve: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmGeneric::::initiate_reserve_withdraw()) + } + fn initiate_teleport( + assets: &MultiAssetFilter, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()) + } + fn query_holding( + _query_id: &u64, + _dest: &MultiLocation, + _assets: &MultiAssetFilter, + _max_response_weight: &u64, + ) -> XCMWeight { + XcmGeneric::::query_holding().ref_time() + } + fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> XCMWeight { + XcmGeneric::::buy_execution().ref_time() + } + fn refund_surplus() -> XCMWeight { + XcmGeneric::::refund_surplus().ref_time() + } + fn set_error_handler(_xcm: &Xcm) -> XCMWeight { + XcmGeneric::::set_error_handler().ref_time() + } + fn set_appendix(_xcm: &Xcm) -> XCMWeight { + XcmGeneric::::set_appendix().ref_time() + } + fn clear_error() -> XCMWeight { + XcmGeneric::::clear_error().ref_time() + } + fn claim_asset(_assets: &MultiAssets, _ticket: &MultiLocation) -> XCMWeight { + XcmGeneric::::claim_asset().ref_time() + } + fn trap(_code: &u64) -> XCMWeight { + XcmGeneric::::trap().ref_time() + } + fn subscribe_version(_query_id: &QueryId, _max_response_weight: &u64) -> XCMWeight { + XcmGeneric::::subscribe_version().ref_time() + } + fn unsubscribe_version() -> XCMWeight { + XcmGeneric::::unsubscribe_version().ref_time() + } +} diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs new file mode 100644 index 00000000000..9df4a3c5490 --- /dev/null +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -0,0 +1,107 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus 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 Cumulus. If not, see . + + +//! Autogenerated weights for `pallet_xcm_benchmarks::fungible` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-08-17, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 + +// Executed Command: +// /home/benchbot/cargo_target_dir/production/polkadot-parachain +// benchmark +// pallet +// --steps=50 +// --repeat=20 +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --pallet=pallet_xcm_benchmarks::fungible +// --chain=statemine-dev +// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json +// --header=./file_header.txt +// --template=./templates/xcm-bench-template.hbs +// --output=./parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use sp_std::marker::PhantomData; + +/// Weights for `pallet_xcm_benchmarks::fungible`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + // Storage: System Account (r:1 w:1) + pub(crate) fn withdraw_asset() -> Weight { + Weight::from_ref_time(29_190_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + } + // Storage: System Account (r:2 w:2) + pub(crate) fn transfer_asset() -> Weight { + Weight::from_ref_time(34_102_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + } + // Storage: System Account (r:2 w:2) + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn transfer_reserve_asset() -> Weight { + Weight::from_ref_time(49_386_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(8 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + } + pub(crate) fn receive_teleported_asset() -> Weight { + Weight::from_ref_time(4_937_000 as RefTimeWeight) + } + // Storage: System Account (r:1 w:1) + pub(crate) fn deposit_asset() -> Weight { + Weight::from_ref_time(30_853_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + } + // Storage: System Account (r:1 w:1) + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn deposit_reserve_asset() -> Weight { + Weight::from_ref_time(45_866_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(7 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn initiate_teleport() -> Weight { + Weight::from_ref_time(23_964_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + } +} diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs new file mode 100644 index 00000000000..72237c90e96 --- /dev/null +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -0,0 +1,137 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus 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 Cumulus. If not, see . + + +//! Autogenerated weights for `pallet_xcm_benchmarks::generic` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-08-17, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 + +// Executed Command: +// /home/benchbot/cargo_target_dir/production/polkadot-parachain +// benchmark +// pallet +// --steps=50 +// --repeat=20 +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --pallet=pallet_xcm_benchmarks::generic +// --chain=statemine-dev +// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json +// --header=./file_header.txt +// --template=./templates/xcm-bench-template.hbs +// --output=./parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use sp_std::marker::PhantomData; + +/// Weights for `pallet_xcm_benchmarks::generic`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn query_holding() -> Weight { + Weight::from_ref_time(694_466_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + } + pub(crate) fn buy_execution() -> Weight { + Weight::from_ref_time(7_095_000 as RefTimeWeight) + } + // Storage: PolkadotXcm Queries (r:1 w:0) + pub(crate) fn query_response() -> Weight { + Weight::from_ref_time(13_270_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + } + pub(crate) fn transact() -> Weight { + Weight::from_ref_time(16_375_000 as RefTimeWeight) + } + pub(crate) fn refund_surplus() -> Weight { + Weight::from_ref_time(7_319_000 as RefTimeWeight) + } + pub(crate) fn set_error_handler() -> Weight { + Weight::from_ref_time(3_515_000 as RefTimeWeight) + } + pub(crate) fn set_appendix() -> Weight { + Weight::from_ref_time(3_501_000 as RefTimeWeight) + } + pub(crate) fn clear_error() -> Weight { + Weight::from_ref_time(3_459_000 as RefTimeWeight) + } + pub(crate) fn descend_origin() -> Weight { + Weight::from_ref_time(4_319_000 as RefTimeWeight) + } + pub(crate) fn clear_origin() -> Weight { + Weight::from_ref_time(3_511_000 as RefTimeWeight) + } + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn report_error() -> Weight { + Weight::from_ref_time(13_284_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + } + // Storage: PolkadotXcm AssetTraps (r:1 w:1) + pub(crate) fn claim_asset() -> Weight { + Weight::from_ref_time(7_985_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + } + pub(crate) fn trap() -> Weight { + Weight::from_ref_time(3_515_000 as RefTimeWeight) + } + // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn subscribe_version() -> Weight { + Weight::from_ref_time(16_657_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + } + // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) + pub(crate) fn unsubscribe_version() -> Weight { + Weight::from_ref_time(5_622_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn initiate_reserve_withdraw() -> Weight { + Weight::from_ref_time(878_786_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + } +} diff --git a/parachains/runtimes/assets/statemine/src/xcm_config.rs b/parachains/runtimes/assets/statemine/src/xcm_config.rs index 4203f1a54f0..d8f59ffcb69 100644 --- a/parachains/runtimes/assets/statemine/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemine/src/xcm_config.rs @@ -34,11 +34,11 @@ use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, AsPrefixedGeneralIndex, - ConvertedConcreteAssetId, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, - FungiblesAdapter, IsConcrete, LocationInverter, NativeAsset, ParentAsSuperuser, ParentIsPreset, - RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, - SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, - UsingComponents, + ConvertedConcreteAssetId, CurrencyAdapter, EnsureXcmOrigin, FungiblesAdapter, IsConcrete, + LocationInverter, NativeAsset, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, + SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, + SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, + WeightInfoBounds, }; use xcm_executor::{traits::JustTry, XcmExecutor}; @@ -128,8 +128,6 @@ pub type XcmOriginToTransactDispatchOrigin = ( ); parameter_types! { - // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. - pub UnitWeightCost: u64 = 1_000_000_000; pub const MaxInstructions: u32 = 100; pub XcmAssetFeesReceiver: Option = Authorship::author(); } @@ -172,7 +170,8 @@ impl xcm_executor::Config for XcmConfig { type IsTeleporter = NativeAsset; // <- should be enough to allow teleportation of KSM type LocationInverter = LocationInverter; type Barrier = Barrier; - type Weigher = FixedWeightBounds; + type Weigher = + WeightInfoBounds, Call, MaxInstructions>; type Trader = ( UsingComponents>, cumulus_primitives_utility::TakeFirstAssetTrader< @@ -227,7 +226,9 @@ impl pallet_xcm::Config for Runtime { type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; - type Weigher = FixedWeightBounds; + type Weigher = + WeightInfoBounds, Call, MaxInstructions>; + type LocationInverter = LocationInverter; type Origin = Origin; type Call = Call; diff --git a/parachains/runtimes/assets/statemint/Cargo.toml b/parachains/runtimes/assets/statemint/Cargo.toml index c1f469a4f97..186b4839ea8 100644 --- a/parachains/runtimes/assets/statemint/Cargo.toml +++ b/parachains/runtimes/assets/statemint/Cargo.toml @@ -71,6 +71,7 @@ cumulus-primitives-utility = { path = "../../../../primitives/utility", default- pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } +pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", branch = "master", default-features = false, optional = true } [dev-dependencies] hex-literal = "0.3.4" @@ -100,6 +101,7 @@ runtime-benchmarks = [ "cumulus-pallet-session-benchmarking/runtime-benchmarks", "pallet-collator-selection/runtime-benchmarks", "cumulus-pallet-xcmp-queue/runtime-benchmarks", + "pallet-xcm-benchmarks", ] try-runtime = [ "frame-executive/try-runtime", diff --git a/parachains/runtimes/assets/statemint/src/lib.rs b/parachains/runtimes/assets/statemint/src/lib.rs index f9ceaba944c..715d1016563 100644 --- a/parachains/runtimes/assets/statemint/src/lib.rs +++ b/parachains/runtimes/assets/statemint/src/lib.rs @@ -667,6 +667,10 @@ mod benches { [pallet_timestamp, Timestamp] [pallet_collator_selection, CollatorSelection] [cumulus_pallet_xcmp_queue, XcmpQueue] + // XCM + // NOTE: Make sure you point to the individual modules below. + [pallet_xcm_benchmarks::fungible, XcmBalances] + [pallet_xcm_benchmarks::generic, XcmGeneric] ); } @@ -813,11 +817,18 @@ impl_runtime_apis! { Vec, Vec, ) { + use frame_benchmarking::{Benchmarking, BenchmarkList}; use frame_support::traits::StorageInfoTrait; use frame_system_benchmarking::Pallet as SystemBench; use cumulus_pallet_session_benchmarking::Pallet as SessionBench; + // This is defined once again in dispatch_benchmark, because list_benchmarks! + // and add_benchmarks! are macros exported by define_benchmarks! macros and those types + // are referenced in that call. + type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; + type XcmGeneric = pallet_xcm_benchmarks::generic::Pallet::; + let mut list = Vec::::new(); list_benchmarks!(list, extra); @@ -828,7 +839,7 @@ impl_runtime_apis! { fn dispatch_benchmark( config: frame_benchmarking::BenchmarkConfig ) -> Result, sp_runtime::RuntimeString> { - use frame_benchmarking::{Benchmarking, BenchmarkBatch, TrackedStorageKey}; + use frame_benchmarking::{Benchmarking, BenchmarkBatch, TrackedStorageKey, BenchmarkError}; use frame_system_benchmarking::Pallet as SystemBench; impl frame_system_benchmarking::Config for Runtime {} @@ -836,6 +847,94 @@ impl_runtime_apis! { use cumulus_pallet_session_benchmarking::Pallet as SessionBench; impl cumulus_pallet_session_benchmarking::Config for Runtime {} + use xcm::latest::prelude::*; + use xcm_config::DotLocation; + use pallet_xcm_benchmarks::asset_instance_from; + + impl pallet_xcm_benchmarks::Config for Runtime { + type XcmConfig = xcm_config::XcmConfig; + type AccountIdConverter = xcm_config::LocationToAccountId; + fn valid_destination() -> Result { + Ok(DotLocation::get()) + } + fn worst_case_holding() -> MultiAssets { + // A mix of fungible, non-fungible, and concrete assets. + const HOLDING_FUNGIBLES: u32 = 100; + const HOLDING_NON_FUNGIBLES: u32 = 100; + let fungibles_amount: u128 = 100; + let mut assets = (0..HOLDING_FUNGIBLES) + .map(|i| { + MultiAsset { + id: Concrete(GeneralIndex(i as u128).into()), + fun: Fungible(fungibles_amount * i as u128), + } + .into() + }) + .chain(core::iter::once(MultiAsset { id: Concrete(Here.into()), fun: Fungible(u128::MAX) })) + .chain((0..HOLDING_NON_FUNGIBLES).map(|i| MultiAsset { + id: Concrete(GeneralIndex(i as u128).into()), + fun: NonFungible(asset_instance_from(i)), + })) + .collect::>(); + + assets.push(MultiAsset{ + id: Concrete(DotLocation::get()), + fun: Fungible(1_000_000 * UNITS), + }); + assets.into() + } + } + + parameter_types! { + pub const TrustedTeleporter: Option<(MultiLocation, MultiAsset)> = Some(( + DotLocation::get(), + MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(DotLocation::get()) }, + )); + pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = None; + pub const CheckedAccount: Option = None; + } + + impl pallet_xcm_benchmarks::fungible::Config for Runtime { + type TransactAsset = Balances; + + type CheckedAccount = CheckedAccount; + type TrustedTeleporter = TrustedTeleporter; + type TrustedReserve = TrustedReserve; + + fn get_multi_asset() -> MultiAsset { + MultiAsset { + id: Concrete(DotLocation::get()), + fun: Fungible(1 * UNITS), + } + } + } + + impl pallet_xcm_benchmarks::generic::Config for Runtime { + type Call = Call; + + fn worst_case_response() -> (u64, Response) { + (0u64, Response::Version(Default::default())) + } + + fn transact_origin() -> Result { + Ok(DotLocation::get()) + } + + fn subscribe_origin() -> Result { + Ok(DotLocation::get()) + } + + fn claimable_asset() -> Result<(MultiLocation, MultiLocation, MultiAssets), BenchmarkError> { + let origin = DotLocation::get(); + let assets: MultiAssets = (Concrete(DotLocation::get()), 1_000 * UNITS).into(); + let ticket = MultiLocation { parents: 0, interior: Here }; + Ok((origin, ticket, assets)) + } + } + + type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; + type XcmGeneric = pallet_xcm_benchmarks::generic::Pallet::; + let whitelist: Vec = vec![ // Block Number hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(), @@ -847,13 +946,14 @@ impl_runtime_apis! { hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(), // System Events hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(), + //TODO: use from relay_well_known_keys::ACTIVE_CONFIG + hex_literal::hex!("06de3d8a54d27e44a9d5ce189618f22db4b49d95320d9021994c850f25b8e385").to_vec().into(), ]; let mut batches = Vec::::new(); let params = (&config, &whitelist); add_benchmarks!(params, batches); - if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) } Ok(batches) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/mod.rs b/parachains/runtimes/assets/statemint/src/weights/mod.rs index bfe3c7bba5f..080584f2cfa 100644 --- a/parachains/runtimes/assets/statemint/src/weights/mod.rs +++ b/parachains/runtimes/assets/statemint/src/weights/mod.rs @@ -13,6 +13,7 @@ pub mod pallet_uniques; pub mod pallet_utility; pub mod paritydb_weights; pub mod rocksdb_weights; +pub mod xcm; pub use block_weights::constants::BlockExecutionWeight; pub use extrinsic_weights::constants::ExtrinsicBaseWeight; diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs new file mode 100644 index 00000000000..438b1742e1f --- /dev/null +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs @@ -0,0 +1,182 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus 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 Cumulus. If not, see . + +mod pallet_xcm_benchmarks_fungible; +mod pallet_xcm_benchmarks_generic; + +use crate::Runtime; +use frame_support::weights::Weight; +use pallet_xcm_benchmarks_fungible::WeightInfo as XcmFungibleWeight; +use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; +use sp_std::prelude::*; +use xcm::{ + latest::{prelude::*, Weight as XCMWeight}, + DoubleEncoded, +}; + +trait WeighMultiAssets { + fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight; +} + +const MAX_ASSETS: u32 = 100; + +impl WeighMultiAssets for MultiAssetFilter { + fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { + let weight = match self { + Self::Definite(assets) => + weight.scalar_saturating_mul(assets.inner().into_iter().count() as u64), + Self::Wild(_) => weight.scalar_saturating_mul(MAX_ASSETS as u64), + }; + weight.ref_time() + } +} + +impl WeighMultiAssets for MultiAssets { + fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { + weight.scalar_saturating_mul(self.inner().into_iter().count() as u64).ref_time() + } +} + +pub struct StatemintXcmWeight(core::marker::PhantomData); +impl XcmWeightInfo for StatemintXcmWeight { + fn withdraw_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::withdraw_asset()) + } + // Currently there is no trusted reserve + fn reserve_asset_deposited(_assets: &MultiAssets) -> XCMWeight { + unimplemented!() + } + fn receive_teleported_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::receive_teleported_asset()) + } + fn query_response(_query_id: &u64, _response: &Response, _max_weight: &u64) -> XCMWeight { + XcmGeneric::::query_response().ref_time() + } + fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::transfer_asset()) + } + fn transfer_reserve_asset( + assets: &MultiAssets, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::transfer_reserve_asset()) + } + fn transact( + _origin_type: &OriginKind, + _require_weight_at_most: &u64, + _call: &DoubleEncoded, + ) -> XCMWeight { + XcmGeneric::::transact().ref_time() + } + fn hrmp_new_channel_open_request( + _sender: &u32, + _max_message_size: &u32, + _max_capacity: &u32, + ) -> XCMWeight { + // XCM Executor does not currently support HRMP channel operations + Weight::MAX.ref_time() + } + fn hrmp_channel_accepted(_recipient: &u32) -> XCMWeight { + // XCM Executor does not currently support HRMP channel operations + Weight::MAX.ref_time() + } + fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> XCMWeight { + // XCM Executor does not currently support HRMP channel operations + Weight::MAX.ref_time() + } + fn clear_origin() -> XCMWeight { + XcmGeneric::::clear_origin().ref_time() + } + fn descend_origin(_who: &InteriorMultiLocation) -> XCMWeight { + XcmGeneric::::descend_origin().ref_time() + } + fn report_error( + _query_id: &QueryId, + _dest: &MultiLocation, + _max_response_weight: &u64, + ) -> XCMWeight { + XcmGeneric::::report_error().ref_time() + } + + fn deposit_asset( + assets: &MultiAssetFilter, + _max_assets: &u32, + _dest: &MultiLocation, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()) + } + fn deposit_reserve_asset( + assets: &MultiAssetFilter, + _max_assets: &u32, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) + } + fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { + Weight::MAX.ref_time() + } + fn initiate_reserve_withdraw( + assets: &MultiAssetFilter, + _reserve: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmGeneric::::initiate_reserve_withdraw()) + } + fn initiate_teleport( + assets: &MultiAssetFilter, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()) + } + fn query_holding( + _query_id: &u64, + _dest: &MultiLocation, + _assets: &MultiAssetFilter, + _max_response_weight: &u64, + ) -> XCMWeight { + XcmGeneric::::query_holding().ref_time() + } + fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> XCMWeight { + XcmGeneric::::buy_execution().ref_time() + } + fn refund_surplus() -> XCMWeight { + XcmGeneric::::refund_surplus().ref_time() + } + fn set_error_handler(_xcm: &Xcm) -> XCMWeight { + XcmGeneric::::set_error_handler().ref_time() + } + fn set_appendix(_xcm: &Xcm) -> XCMWeight { + XcmGeneric::::set_appendix().ref_time() + } + fn clear_error() -> XCMWeight { + XcmGeneric::::clear_error().ref_time() + } + fn claim_asset(_assets: &MultiAssets, _ticket: &MultiLocation) -> XCMWeight { + XcmGeneric::::claim_asset().ref_time() + } + fn trap(_code: &u64) -> XCMWeight { + XcmGeneric::::trap().ref_time() + } + fn subscribe_version(_query_id: &QueryId, _max_response_weight: &u64) -> XCMWeight { + XcmGeneric::::subscribe_version().ref_time() + } + fn unsubscribe_version() -> XCMWeight { + XcmGeneric::::unsubscribe_version().ref_time() + } +} diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs new file mode 100644 index 00000000000..8bcdcc3b039 --- /dev/null +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -0,0 +1,108 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus 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 Cumulus. If not, see . + + +//! Autogenerated weights for `pallet_xcm_benchmarks::fungible` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-08-25, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm3`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 + +// Executed Command: +// /home/benchbot/cargo_target_dir/production/polkadot-parachain +// benchmark +// pallet +// --steps=50 +// --repeat=20 +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --pallet=pallet_xcm_benchmarks::fungible +// --chain=statemint-dev +// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json +// --header=./file_header.txt +// --template=./templates/xcm-bench-template.hbs +// --output=./parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use sp_std::marker::PhantomData; + +/// Weights for `pallet_xcm_benchmarks::fungible`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + // Storage: System Account (r:1 w:1) + pub(crate) fn withdraw_asset() -> Weight { + Weight::from_ref_time(34_002_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + } + // Storage: System Account (r:2 w:2) + pub(crate) fn transfer_asset() -> Weight { + Weight::from_ref_time(38_285_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + } + // Storage: System Account (r:2 w:2) + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn transfer_reserve_asset() -> Weight { + Weight::from_ref_time(55_068_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(8 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + } + pub(crate) fn receive_teleported_asset() -> Weight { + Weight::from_ref_time(7_796_000 as RefTimeWeight) + } + // Storage: System Account (r:1 w:1) + pub(crate) fn deposit_asset() -> Weight { + Weight::from_ref_time(35_092_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + } + // Storage: System Account (r:1 w:1) + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn deposit_reserve_asset() -> Weight { + Weight::from_ref_time(50_590_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(7 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn initiate_teleport() -> Weight { + Weight::from_ref_time(27_220_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + } +} diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs new file mode 100644 index 00000000000..2c42c5619ba --- /dev/null +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -0,0 +1,138 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus 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 Cumulus. If not, see . + + +//! Autogenerated weights for `pallet_xcm_benchmarks::generic` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-08-25, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm3`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 + +// Executed Command: +// /home/benchbot/cargo_target_dir/production/polkadot-parachain +// benchmark +// pallet +// --steps=50 +// --repeat=20 +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --pallet=pallet_xcm_benchmarks::generic +// --chain=statemint-dev +// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json +// --header=./file_header.txt +// --template=./templates/xcm-bench-template.hbs +// --output=./parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use sp_std::marker::PhantomData; + +/// Weights for `pallet_xcm_benchmarks::generic`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn query_holding() -> Weight { + Weight::from_ref_time(682_639_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + } + pub(crate) fn buy_execution() -> Weight { + Weight::from_ref_time(9_272_000 as RefTimeWeight) + } + // Storage: PolkadotXcm Queries (r:1 w:0) + pub(crate) fn query_response() -> Weight { + Weight::from_ref_time(17_084_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + } + pub(crate) fn transact() -> Weight { + Weight::from_ref_time(20_265_000 as RefTimeWeight) + } + pub(crate) fn refund_surplus() -> Weight { + Weight::from_ref_time(9_422_000 as RefTimeWeight) + } + pub(crate) fn set_error_handler() -> Weight { + Weight::from_ref_time(5_545_000 as RefTimeWeight) + } + pub(crate) fn set_appendix() -> Weight { + Weight::from_ref_time(5_450_000 as RefTimeWeight) + } + pub(crate) fn clear_error() -> Weight { + Weight::from_ref_time(5_519_000 as RefTimeWeight) + } + pub(crate) fn descend_origin() -> Weight { + Weight::from_ref_time(6_398_000 as RefTimeWeight) + } + pub(crate) fn clear_origin() -> Weight { + Weight::from_ref_time(5_498_000 as RefTimeWeight) + } + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn report_error() -> Weight { + Weight::from_ref_time(15_784_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + } + // Storage: PolkadotXcm AssetTraps (r:1 w:1) + pub(crate) fn claim_asset() -> Weight { + Weight::from_ref_time(11_861_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + } + pub(crate) fn trap() -> Weight { + Weight::from_ref_time(5_462_000 as RefTimeWeight) + } + // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn subscribe_version() -> Weight { + Weight::from_ref_time(18_997_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + } + // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) + pub(crate) fn unsubscribe_version() -> Weight { + Weight::from_ref_time(8_684_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn initiate_reserve_withdraw() -> Weight { + Weight::from_ref_time(883_121_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + } +} diff --git a/parachains/runtimes/assets/statemint/src/xcm_config.rs b/parachains/runtimes/assets/statemint/src/xcm_config.rs index ca9aea57055..a8bf77b6d34 100644 --- a/parachains/runtimes/assets/statemint/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemint/src/xcm_config.rs @@ -31,11 +31,11 @@ use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, AsPrefixedGeneralIndex, - ConvertedConcreteAssetId, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, - FungiblesAdapter, IsConcrete, LocationInverter, NativeAsset, ParentAsSuperuser, ParentIsPreset, - RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, - SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, - UsingComponents, + ConvertedConcreteAssetId, CurrencyAdapter, EnsureXcmOrigin, FungiblesAdapter, IsConcrete, + LocationInverter, NativeAsset, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, + SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, + SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, + WeightInfoBounds, }; use xcm_executor::{traits::JustTry, XcmExecutor}; @@ -125,8 +125,6 @@ pub type XcmOriginToTransactDispatchOrigin = ( ); parameter_types! { - // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. - pub UnitWeightCost: u64 = 1_000_000_000; pub const MaxInstructions: u32 = 100; pub XcmAssetFeesReceiver: Option = Authorship::author(); } @@ -169,7 +167,8 @@ impl xcm_executor::Config for XcmConfig { type IsTeleporter = NativeAsset; // <- should be enough to allow teleportation of DOT type LocationInverter = LocationInverter; type Barrier = Barrier; - type Weigher = FixedWeightBounds; + type Weigher = + WeightInfoBounds, Call, MaxInstructions>; type Trader = UsingComponents>; type ResponseHandler = PolkadotXcm; @@ -203,7 +202,8 @@ impl pallet_xcm::Config for Runtime { type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; - type Weigher = FixedWeightBounds; + type Weigher = + WeightInfoBounds, Call, MaxInstructions>; type LocationInverter = LocationInverter; type Origin = Origin; type Call = Call; diff --git a/parachains/runtimes/assets/westmint/Cargo.toml b/parachains/runtimes/assets/westmint/Cargo.toml index 477e414d95b..2133accf0e2 100644 --- a/parachains/runtimes/assets/westmint/Cargo.toml +++ b/parachains/runtimes/assets/westmint/Cargo.toml @@ -71,6 +71,7 @@ cumulus-primitives-utility = { path = "../../../../primitives/utility", default- pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } +pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", branch = "master", default-features = false, optional = true } [dev-dependencies] hex-literal = "0.3.4" @@ -100,6 +101,7 @@ runtime-benchmarks = [ "cumulus-pallet-session-benchmarking/runtime-benchmarks", "pallet-collator-selection/runtime-benchmarks", "cumulus-pallet-xcmp-queue/runtime-benchmarks", + "pallet-xcm-benchmarks", ] try-runtime = [ "frame-executive/try-runtime", diff --git a/parachains/runtimes/assets/westmint/src/lib.rs b/parachains/runtimes/assets/westmint/src/lib.rs index 52a562cfd00..1782fee9f71 100644 --- a/parachains/runtimes/assets/westmint/src/lib.rs +++ b/parachains/runtimes/assets/westmint/src/lib.rs @@ -628,6 +628,10 @@ mod benches { [pallet_timestamp, Timestamp] [pallet_collator_selection, CollatorSelection] [cumulus_pallet_xcmp_queue, XcmpQueue] + // XCM + // NOTE: Make sure you point to the individual modules below. + [pallet_xcm_benchmarks::fungible, XcmBalances] + [pallet_xcm_benchmarks::generic, XcmGeneric] ); } @@ -779,6 +783,12 @@ impl_runtime_apis! { use frame_system_benchmarking::Pallet as SystemBench; use cumulus_pallet_session_benchmarking::Pallet as SessionBench; + // This is defined once again in dispatch_benchmark, because list_benchmarks! + // and add_benchmarks! are macros exported by define_benchmarks! macros and those types + // are referenced in that call. + type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; + type XcmGeneric = pallet_xcm_benchmarks::generic::Pallet::; + let mut list = Vec::::new(); list_benchmarks!(list, extra); @@ -789,7 +799,7 @@ impl_runtime_apis! { fn dispatch_benchmark( config: frame_benchmarking::BenchmarkConfig ) -> Result, sp_runtime::RuntimeString> { - use frame_benchmarking::{Benchmarking, BenchmarkBatch, TrackedStorageKey}; + use frame_benchmarking::{Benchmarking, BenchmarkBatch, TrackedStorageKey, BenchmarkError}; use frame_system_benchmarking::Pallet as SystemBench; impl frame_system_benchmarking::Config for Runtime {} @@ -797,6 +807,95 @@ impl_runtime_apis! { use cumulus_pallet_session_benchmarking::Pallet as SessionBench; impl cumulus_pallet_session_benchmarking::Config for Runtime {} + use xcm::latest::prelude::*; + use xcm_config::WestendLocation; + use pallet_xcm_benchmarks::asset_instance_from; + + impl pallet_xcm_benchmarks::Config for Runtime { + type XcmConfig = xcm_config::XcmConfig; + type AccountIdConverter = xcm_config::LocationToAccountId; + fn valid_destination() -> Result { + Ok(WestendLocation::get()) + } + fn worst_case_holding() -> MultiAssets { + // A mix of fungible, non-fungible, and concrete assets. + const HOLDING_FUNGIBLES: u32 = 100; + const HOLDING_NON_FUNGIBLES: u32 = 100; + let fungibles_amount: u128 = 100; + let mut assets = (0..HOLDING_FUNGIBLES) + .map(|i| { + MultiAsset { + id: Concrete(GeneralIndex(i as u128).into()), + fun: Fungible(fungibles_amount * i as u128), + } + .into() + }) + .chain(core::iter::once(MultiAsset { id: Concrete(Here.into()), fun: Fungible(u128::MAX) })) + .chain((0..HOLDING_NON_FUNGIBLES).map(|i| MultiAsset { + id: Concrete(GeneralIndex(i as u128).into()), + fun: NonFungible(asset_instance_from(i)), + })) + .collect::>(); + + assets.push(MultiAsset{ + id: Concrete(WestendLocation::get()), + fun: Fungible(1_000_000 * UNITS), + }); + assets.into() + } + } + + parameter_types! { + pub const TrustedTeleporter: Option<(MultiLocation, MultiAsset)> = Some(( + WestendLocation::get(), + MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(WestendLocation::get()) }, + )); + pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = None; + pub const CheckedAccount: Option = None; + + } + + impl pallet_xcm_benchmarks::fungible::Config for Runtime { + type TransactAsset = Balances; + + type CheckedAccount = CheckedAccount; + type TrustedTeleporter = TrustedTeleporter; + type TrustedReserve = TrustedReserve; + + fn get_multi_asset() -> MultiAsset { + MultiAsset { + id: Concrete(WestendLocation::get()), + fun: Fungible(1 * UNITS), + } + } + } + + impl pallet_xcm_benchmarks::generic::Config for Runtime { + type Call = Call; + + fn worst_case_response() -> (u64, Response) { + (0u64, Response::Version(Default::default())) + } + + fn transact_origin() -> Result { + Ok(WestendLocation::get()) + } + + fn subscribe_origin() -> Result { + Ok(WestendLocation::get()) + } + + fn claimable_asset() -> Result<(MultiLocation, MultiLocation, MultiAssets), BenchmarkError> { + let origin = WestendLocation::get(); + let assets: MultiAssets = (Concrete(WestendLocation::get()), 1_000 * UNITS).into(); + let ticket = MultiLocation { parents: 0, interior: Here }; + Ok((origin, ticket, assets)) + } + } + + type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; + type XcmGeneric = pallet_xcm_benchmarks::generic::Pallet::; + let whitelist: Vec = vec![ // Block Number hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(), @@ -808,13 +907,14 @@ impl_runtime_apis! { hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(), // System Events hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(), + //TODO: use from relay_well_known_keys::ACTIVE_CONFIG + hex_literal::hex!("06de3d8a54d27e44a9d5ce189618f22db4b49d95320d9021994c850f25b8e385").to_vec().into(), ]; let mut batches = Vec::::new(); let params = (&config, &whitelist); add_benchmarks!(params, batches); - if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) } Ok(batches) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/mod.rs b/parachains/runtimes/assets/westmint/src/weights/mod.rs index bfe3c7bba5f..080584f2cfa 100644 --- a/parachains/runtimes/assets/westmint/src/weights/mod.rs +++ b/parachains/runtimes/assets/westmint/src/weights/mod.rs @@ -13,6 +13,7 @@ pub mod pallet_uniques; pub mod pallet_utility; pub mod paritydb_weights; pub mod rocksdb_weights; +pub mod xcm; pub use block_weights::constants::BlockExecutionWeight; pub use extrinsic_weights::constants::ExtrinsicBaseWeight; diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs new file mode 100644 index 00000000000..2254b4e66cd --- /dev/null +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs @@ -0,0 +1,182 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus 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 Cumulus. If not, see . + +mod pallet_xcm_benchmarks_fungible; +mod pallet_xcm_benchmarks_generic; + +use crate::Runtime; +use frame_support::weights::Weight; +use pallet_xcm_benchmarks_fungible::WeightInfo as XcmFungibleWeight; +use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; +use sp_std::prelude::*; +use xcm::{ + latest::{prelude::*, Weight as XCMWeight}, + DoubleEncoded, +}; + +trait WeighMultiAssets { + fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight; +} + +const MAX_ASSETS: u32 = 100; + +impl WeighMultiAssets for MultiAssetFilter { + fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { + let weight = match self { + Self::Definite(assets) => + weight.scalar_saturating_mul(assets.inner().into_iter().count() as u64), + Self::Wild(_) => weight.scalar_saturating_mul(MAX_ASSETS as u64), + }; + weight.ref_time() + } +} + +impl WeighMultiAssets for MultiAssets { + fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { + weight.scalar_saturating_mul(self.inner().into_iter().count() as u64).ref_time() + } +} + +pub struct WestmintXcmWeight(core::marker::PhantomData); +impl XcmWeightInfo for WestmintXcmWeight { + fn withdraw_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::withdraw_asset()) + } + // Currently there is no trusted reserve + fn reserve_asset_deposited(_assets: &MultiAssets) -> XCMWeight { + unimplemented!() + } + fn receive_teleported_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::receive_teleported_asset()) + } + fn query_response(_query_id: &u64, _response: &Response, _max_weight: &u64) -> XCMWeight { + XcmGeneric::::query_response().ref_time() + } + fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::transfer_asset()) + } + fn transfer_reserve_asset( + assets: &MultiAssets, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::transfer_reserve_asset()) + } + fn transact( + _origin_type: &OriginKind, + _require_weight_at_most: &u64, + _call: &DoubleEncoded, + ) -> XCMWeight { + XcmGeneric::::transact().ref_time() + } + fn hrmp_new_channel_open_request( + _sender: &u32, + _max_message_size: &u32, + _max_capacity: &u32, + ) -> XCMWeight { + // XCM Executor does not currently support HRMP channel operations + Weight::MAX.ref_time() + } + fn hrmp_channel_accepted(_recipient: &u32) -> XCMWeight { + // XCM Executor does not currently support HRMP channel operations + Weight::MAX.ref_time() + } + fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> XCMWeight { + // XCM Executor does not currently support HRMP channel operations + Weight::MAX.ref_time() + } + fn clear_origin() -> XCMWeight { + XcmGeneric::::clear_origin().ref_time() + } + fn descend_origin(_who: &InteriorMultiLocation) -> XCMWeight { + XcmGeneric::::descend_origin().ref_time() + } + fn report_error( + _query_id: &QueryId, + _dest: &MultiLocation, + _max_response_weight: &u64, + ) -> XCMWeight { + XcmGeneric::::report_error().ref_time() + } + + fn deposit_asset( + assets: &MultiAssetFilter, + _max_assets: &u32, + _dest: &MultiLocation, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()) + } + fn deposit_reserve_asset( + assets: &MultiAssetFilter, + _max_assets: &u32, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) + } + fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { + Weight::MAX.ref_time() + } + fn initiate_reserve_withdraw( + assets: &MultiAssetFilter, + _reserve: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmGeneric::::initiate_reserve_withdraw()) + } + fn initiate_teleport( + assets: &MultiAssetFilter, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> XCMWeight { + assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()) + } + fn query_holding( + _query_id: &u64, + _dest: &MultiLocation, + _assets: &MultiAssetFilter, + _max_response_weight: &u64, + ) -> XCMWeight { + XcmGeneric::::query_holding().ref_time() + } + fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> XCMWeight { + XcmGeneric::::buy_execution().ref_time() + } + fn refund_surplus() -> XCMWeight { + XcmGeneric::::refund_surplus().ref_time() + } + fn set_error_handler(_xcm: &Xcm) -> XCMWeight { + XcmGeneric::::set_error_handler().ref_time() + } + fn set_appendix(_xcm: &Xcm) -> XCMWeight { + XcmGeneric::::set_appendix().ref_time() + } + fn clear_error() -> XCMWeight { + XcmGeneric::::clear_error().ref_time() + } + fn claim_asset(_assets: &MultiAssets, _ticket: &MultiLocation) -> XCMWeight { + XcmGeneric::::claim_asset().ref_time() + } + fn trap(_code: &u64) -> XCMWeight { + XcmGeneric::::trap().ref_time() + } + fn subscribe_version(_query_id: &QueryId, _max_response_weight: &u64) -> XCMWeight { + XcmGeneric::::subscribe_version().ref_time() + } + fn unsubscribe_version() -> XCMWeight { + XcmGeneric::::unsubscribe_version().ref_time() + } +} diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs new file mode 100644 index 00000000000..6cc7e3e48e6 --- /dev/null +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -0,0 +1,107 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus 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 Cumulus. If not, see . + + +//! Autogenerated weights for `pallet_xcm_benchmarks::fungible` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-08-17, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 + +// Executed Command: +// /home/benchbot/cargo_target_dir/production/polkadot-parachain +// benchmark +// pallet +// --steps=50 +// --repeat=20 +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --pallet=pallet_xcm_benchmarks::fungible +// --chain=westmint-dev +// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json +// --header=./file_header.txt +// --template=./templates/xcm-bench-template.hbs +// --output=./parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use sp_std::marker::PhantomData; + +/// Weights for `pallet_xcm_benchmarks::fungible`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + // Storage: System Account (r:1 w:1) + pub(crate) fn withdraw_asset() -> Weight { + Weight::from_ref_time(28_725_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + } + // Storage: System Account (r:2 w:2) + pub(crate) fn transfer_asset() -> Weight { + Weight::from_ref_time(33_865_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + } + // Storage: System Account (r:2 w:2) + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn transfer_reserve_asset() -> Weight { + Weight::from_ref_time(48_839_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(8 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + } + pub(crate) fn receive_teleported_asset() -> Weight { + Weight::from_ref_time(4_849_000 as RefTimeWeight) + } + // Storage: System Account (r:1 w:1) + pub(crate) fn deposit_asset() -> Weight { + Weight::from_ref_time(29_778_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + } + // Storage: System Account (r:1 w:1) + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn deposit_reserve_asset() -> Weight { + Weight::from_ref_time(45_355_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(7 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn initiate_teleport() -> Weight { + Weight::from_ref_time(23_451_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + } +} diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs new file mode 100644 index 00000000000..1922a3ab4cf --- /dev/null +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -0,0 +1,137 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus 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 Cumulus. If not, see . + + +//! Autogenerated weights for `pallet_xcm_benchmarks::generic` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-08-17, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 + +// Executed Command: +// /home/benchbot/cargo_target_dir/production/polkadot-parachain +// benchmark +// pallet +// --steps=50 +// --repeat=20 +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --pallet=pallet_xcm_benchmarks::generic +// --chain=westmint-dev +// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json +// --header=./file_header.txt +// --template=./templates/xcm-bench-template.hbs +// --output=./parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use sp_std::marker::PhantomData; + +/// Weights for `pallet_xcm_benchmarks::generic`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn query_holding() -> Weight { + Weight::from_ref_time(676_316_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + } + pub(crate) fn buy_execution() -> Weight { + Weight::from_ref_time(7_030_000 as RefTimeWeight) + } + // Storage: PolkadotXcm Queries (r:1 w:0) + pub(crate) fn query_response() -> Weight { + Weight::from_ref_time(12_574_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + } + pub(crate) fn transact() -> Weight { + Weight::from_ref_time(15_764_000 as RefTimeWeight) + } + pub(crate) fn refund_surplus() -> Weight { + Weight::from_ref_time(7_200_000 as RefTimeWeight) + } + pub(crate) fn set_error_handler() -> Weight { + Weight::from_ref_time(3_310_000 as RefTimeWeight) + } + pub(crate) fn set_appendix() -> Weight { + Weight::from_ref_time(3_260_000 as RefTimeWeight) + } + pub(crate) fn clear_error() -> Weight { + Weight::from_ref_time(3_277_000 as RefTimeWeight) + } + pub(crate) fn descend_origin() -> Weight { + Weight::from_ref_time(3_913_000 as RefTimeWeight) + } + pub(crate) fn clear_origin() -> Weight { + Weight::from_ref_time(3_354_000 as RefTimeWeight) + } + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn report_error() -> Weight { + Weight::from_ref_time(13_028_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + } + // Storage: PolkadotXcm AssetTraps (r:1 w:1) + pub(crate) fn claim_asset() -> Weight { + Weight::from_ref_time(7_739_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + } + pub(crate) fn trap() -> Weight { + Weight::from_ref_time(3_351_000 as RefTimeWeight) + } + // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn subscribe_version() -> Weight { + Weight::from_ref_time(16_051_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + } + // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) + pub(crate) fn unsubscribe_version() -> Weight { + Weight::from_ref_time(5_477_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn initiate_reserve_withdraw() -> Weight { + Weight::from_ref_time(874_435_000 as RefTimeWeight) + .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + } +} diff --git a/parachains/runtimes/assets/westmint/src/xcm_config.rs b/parachains/runtimes/assets/westmint/src/xcm_config.rs index 16d5b84b070..94a6ba6528a 100644 --- a/parachains/runtimes/assets/westmint/src/xcm_config.rs +++ b/parachains/runtimes/assets/westmint/src/xcm_config.rs @@ -34,11 +34,11 @@ use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, AsPrefixedGeneralIndex, - ConvertedConcreteAssetId, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, - FungiblesAdapter, IsConcrete, LocationInverter, NativeAsset, ParentAsSuperuser, ParentIsPreset, - RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, - SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, - UsingComponents, + ConvertedConcreteAssetId, CurrencyAdapter, EnsureXcmOrigin, FungiblesAdapter, IsConcrete, + LocationInverter, NativeAsset, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, + SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, + SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, + WeightInfoBounds, }; use xcm_executor::{traits::JustTry, XcmExecutor}; @@ -129,8 +129,6 @@ pub type XcmOriginToTransactDispatchOrigin = ( ); parameter_types! { - // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. - pub UnitWeightCost: u64 = 1_000_000_000; pub const MaxInstructions: u32 = 100; pub XcmAssetFeesReceiver: Option = Authorship::author(); } @@ -169,7 +167,8 @@ impl xcm_executor::Config for XcmConfig { type IsTeleporter = NativeAsset; // <- should be enough to allow teleportation of WND type LocationInverter = LocationInverter; type Barrier = Barrier; - type Weigher = FixedWeightBounds; + type Weigher = + WeightInfoBounds, Call, MaxInstructions>; type Trader = ( UsingComponents>, cumulus_primitives_utility::TakeFirstAssetTrader< @@ -220,7 +219,8 @@ impl pallet_xcm::Config for Runtime { type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; - type Weigher = FixedWeightBounds; + type Weigher = + WeightInfoBounds, Call, MaxInstructions>; type LocationInverter = LocationInverter; type Origin = Origin; type Call = Call; diff --git a/scripts/benchmarks-ci.sh b/scripts/benchmarks-ci.sh index ff87c643a09..6ac63e9ab34 100755 --- a/scripts/benchmarks-ci.sh +++ b/scripts/benchmarks-ci.sh @@ -22,6 +22,8 @@ if [[ $runtimeName == "statemint" ]] || [[ $runtimeName == "statemine" ]] || [[ pallet_uniques cumulus_pallet_xcmp_queue frame_system + pallet_xcm_benchmarks::generic + pallet_xcm_benchmarks::fungible ) elif [[ $runtimeName == "collectives-polkadot" ]]; then pallets=( @@ -44,6 +46,11 @@ fi for pallet in ${pallets[@]} do + # a little hack for xcm benchmarks + output_file="${pallet//::/_}" + if [[ "$pallet" == *"xcm"* ]]; then + output_file="xcm/$output_file" + fi $artifactsDir/polkadot-parachain benchmark pallet \ --chain=$benchmarkRuntimeName \ --execution=wasm \ @@ -53,7 +60,6 @@ do --steps=$steps \ --repeat=$repeat \ --json \ - --header=./file_header.txt \ - --output=$benchmarkOutput >> $artifactsDir/${pallet}_benchmark.json - + --header=./file_header.txt \ + --output="${benchmarkOutput}/${output_file}.rs" >> $artifactsDir/${pallet}_benchmark.json done diff --git a/templates/xcm-bench-template.hbs b/templates/xcm-bench-template.hbs new file mode 100644 index 00000000000..31cfef0d93e --- /dev/null +++ b/templates/xcm-bench-template.hbs @@ -0,0 +1,68 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus 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 Cumulus. If not, see . + + +//! Autogenerated weights for `{{pallet}}` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION {{version}} +//! DATE: {{date}}, STEPS: `{{cmd.steps}}`, REPEAT: {{cmd.repeat}}, LOW RANGE: `{{cmd.lowest_range_values}}`, HIGH RANGE: `{{cmd.highest_range_values}}` +//! HOSTNAME: `{{hostname}}`, CPU: `{{cpuname}}` +//! EXECUTION: {{cmd.execution}}, WASM-EXECUTION: {{cmd.wasm_execution}}, CHAIN: {{cmd.chain}}, DB CACHE: {{cmd.db_cache}} + +// Executed Command: +{{#each args as |arg|}} +// {{arg}} +{{/each}} + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use sp_std::marker::PhantomData; + +/// Weights for `{{pallet}}`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + {{#each benchmarks as |benchmark|}} + {{#each benchmark.comments as |comment|}} + // {{comment}} + {{/each}} + pub(crate) fn {{benchmark.name~}} + ( + {{~#each benchmark.components as |c| ~}} + {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} + ) -> Weight { + Weight::from_ref_time({{underscore benchmark.base_weight}} as RefTimeWeight) + {{#each benchmark.component_weight as |cw|}} + // Standard Error: {{underscore cw.error}} + .saturating_add(Weight::from_ref_time({{underscore cw.slope}}).scalar_saturating_mul({{cw.name}} as RefTimeWeight)) + {{/each}} + {{#if (ne benchmark.base_reads "0")}} + .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}} as RefTimeWeight)) + {{/if}} + {{#each benchmark.component_reads as |cr|}} + .saturating_add(T::DbWeight::get().reads(({{cr.slope}} as RefTimeWeight).scalar_saturating_mul({{cr.name}} as RefTimeWeight))) + {{/each}} + {{#if (ne benchmark.base_writes "0")}} + .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}} as RefTimeWeight)) + {{/if}} + {{#each benchmark.component_writes as |cw|}} + .saturating_add(T::DbWeight::get().writes(({{cw.slope}} as RefTimeWeight).scalar_saturating_mul({{cw.name}} as RefTimeWeight))) + {{/each}} + } + {{/each}} +} From 8679e4206893c693b58e387ae3e15158a5b7406d Mon Sep 17 00:00:00 2001 From: Muharem Ismailov Date: Thu, 1 Sep 2022 19:20:08 +0200 Subject: [PATCH 032/148] Update Cumulus to Latest Substrate and Polkadot Master (#1551) * proposal provider impl for proposals func * rustfmt * impl proposals_count fn * update lockfile for {"substrate", "polkadot"} * cargo update pallet-alliance * cargo update deps * fix for https://github.com/paritytech/substrate/commit/324a18e3c5cbf333672c54f9367f530ea976928d * update lockfile for {"substrate", "polkadot"} * fix try runtime feature flags * update log target Co-authored-by: parity-processbot <> Co-authored-by: Shawn Tabrizi --- Cargo.lock | 501 +++++++++--------- pallets/aura-ext/Cargo.toml | 1 + pallets/dmp-queue/Cargo.toml | 1 + pallets/parachain-system/Cargo.toml | 2 + pallets/solo-to-para/Cargo.toml | 1 + pallets/xcm/Cargo.toml | 1 + pallets/xcmp-queue/Cargo.toml | 1 + parachain-template/runtime/Cargo.toml | 17 + parachain-template/runtime/src/lib.rs | 11 +- parachains/pallets/parachain-info/Cargo.toml | 1 + .../runtimes/assets/statemine/Cargo.toml | 21 + .../runtimes/assets/statemine/src/lib.rs | 11 +- .../runtimes/assets/statemint/Cargo.toml | 21 + .../runtimes/assets/statemint/src/lib.rs | 11 +- .../runtimes/assets/westmint/Cargo.toml | 21 + .../runtimes/assets/westmint/src/lib.rs | 11 +- .../collectives-polkadot/Cargo.toml | 21 + .../collectives-polkadot/src/impls.rs | 10 +- .../collectives-polkadot/src/lib.rs | 11 +- .../contracts/contracts-rococo/Cargo.toml | 20 + .../contracts/contracts-rococo/src/lib.rs | 11 +- parachains/runtimes/testing/penpal/Cargo.toml | 18 + parachains/runtimes/testing/penpal/src/lib.rs | 13 +- 23 files changed, 473 insertions(+), 264 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1dd64620670..6c1231f1507 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -451,7 +451,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "beefy-primitives", @@ -487,7 +487,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -507,7 +507,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "beefy-primitives", "sp-api", @@ -516,7 +516,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "parity-scale-codec", "scale-info", @@ -2786,7 +2786,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "parity-scale-codec", ] @@ -2804,7 +2804,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support", "frame-system", @@ -2827,7 +2827,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "Inflector", "chrono", @@ -2878,7 +2878,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2889,7 +2889,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2905,10 +2905,11 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support", "frame-system", + "frame-try-runtime", "parity-scale-codec", "scale-info", "sp-core", @@ -2933,7 +2934,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "bitflags", "frame-metadata", @@ -2964,7 +2965,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "Inflector", "cfg-expr", @@ -2978,7 +2979,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2990,7 +2991,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "proc-macro2", "quote", @@ -3000,7 +3001,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support", "log", @@ -3017,7 +3018,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -3032,7 +3033,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "parity-scale-codec", "sp-api", @@ -3041,9 +3042,10 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support", + "parity-scale-codec", "sp-api", "sp-runtime", "sp-std", @@ -3915,7 +3917,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "beefy-primitives", "bitvec", @@ -4008,7 +4010,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "frame-support", "polkadot-primitives", @@ -5367,7 +5369,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "async-trait", "dyn-clonable", @@ -5383,7 +5385,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "expander 0.0.6", "itertools", @@ -5421,7 +5423,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -5442,7 +5444,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support", "frame-system", @@ -5459,7 +5461,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -5473,7 +5475,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support", "frame-system", @@ -5489,7 +5491,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support", "frame-system", @@ -5505,7 +5507,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support", "frame-system", @@ -5520,7 +5522,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -5544,7 +5546,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5564,7 +5566,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -5579,7 +5581,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "beefy-primitives", "frame-support", @@ -5595,7 +5597,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -5618,7 +5620,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -5636,7 +5638,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -5681,7 +5683,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -5698,7 +5700,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "bitflags", "frame-benchmarking", @@ -5726,7 +5728,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "bitflags", "parity-scale-codec", @@ -5741,7 +5743,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "proc-macro2", "quote", @@ -5751,7 +5753,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5768,7 +5770,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5781,7 +5783,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -5797,7 +5799,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5820,7 +5822,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5833,7 +5835,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -5851,7 +5853,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -5866,7 +5868,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -5889,7 +5891,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5905,7 +5907,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -5925,7 +5927,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -5942,7 +5944,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -5959,7 +5961,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5977,7 +5979,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5992,7 +5994,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -6007,7 +6009,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support", "frame-system", @@ -6024,7 +6026,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6043,7 +6045,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "parity-scale-codec", "sp-api", @@ -6053,7 +6055,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support", "frame-system", @@ -6070,7 +6072,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6093,7 +6095,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -6109,7 +6111,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -6124,7 +6126,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support", "frame-system", @@ -6138,7 +6140,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -6153,7 +6155,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -6169,7 +6171,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support", "frame-system", @@ -6190,7 +6192,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -6206,7 +6208,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support", "frame-system", @@ -6220,7 +6222,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6243,7 +6245,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6254,7 +6256,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "log", "sp-arithmetic", @@ -6263,7 +6265,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support", "frame-system", @@ -6292,7 +6294,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -6310,7 +6312,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -6329,7 +6331,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-support", "frame-system", @@ -6345,7 +6347,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6360,7 +6362,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6371,7 +6373,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -6388,7 +6390,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -6403,7 +6405,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -6419,7 +6421,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-benchmarking", "frame-support", @@ -6434,7 +6436,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "frame-support", "frame-system", @@ -6452,7 +6454,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "frame-benchmarking", "frame-support", @@ -7010,7 +7012,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7025,7 +7027,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7039,7 +7041,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "derive_more", "fatality", @@ -7062,7 +7064,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "fatality", "futures", @@ -7083,7 +7085,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "clap 3.2.19", "frame-benchmarking-cli", @@ -7109,7 +7111,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7150,7 +7152,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "always-assert", "fatality", @@ -7171,7 +7173,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7184,7 +7186,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "derive_more", "fatality", @@ -7207,7 +7209,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7221,7 +7223,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "futures", "futures-timer", @@ -7241,7 +7243,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "always-assert", "async-trait", @@ -7265,7 +7267,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "futures", "parity-scale-codec", @@ -7283,7 +7285,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "bitvec", "derive_more", @@ -7312,7 +7314,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "bitvec", "futures", @@ -7332,7 +7334,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "bitvec", "fatality", @@ -7351,7 +7353,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7366,7 +7368,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "async-trait", "futures", @@ -7384,7 +7386,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7399,7 +7401,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "futures", "futures-timer", @@ -7416,7 +7418,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "fatality", "futures", @@ -7435,7 +7437,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "async-trait", "futures", @@ -7452,7 +7454,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "bitvec", "fatality", @@ -7470,7 +7472,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "always-assert", "assert_matches", @@ -7502,7 +7504,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "futures", "polkadot-node-primitives", @@ -7518,7 +7520,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "futures", "memory-lru", @@ -7534,7 +7536,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "async-std", "lazy_static", @@ -7552,7 +7554,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "bs58", "futures", @@ -7571,7 +7573,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "async-trait", "derive_more", @@ -7593,7 +7595,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "bounded-vec", "futures", @@ -7615,7 +7617,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7625,7 +7627,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "async-trait", "futures", @@ -7643,7 +7645,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "async-trait", "derive_more", @@ -7666,7 +7668,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "async-trait", "derive_more", @@ -7699,7 +7701,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "async-trait", "futures", @@ -7722,7 +7724,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "derive_more", "frame-support", @@ -7822,7 +7824,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7837,7 +7839,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "bitvec", "frame-system", @@ -7867,7 +7869,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7899,7 +7901,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "beefy-primitives", "bitvec", @@ -7987,7 +7989,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "beefy-primitives", "bitvec", @@ -8034,7 +8036,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "frame-support", "polkadot-primitives", @@ -8046,7 +8048,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "bs58", "parity-scale-codec", @@ -8058,7 +8060,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "bitflags", "bitvec", @@ -8101,7 +8103,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "async-trait", "beefy-gadget", @@ -8206,7 +8208,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8227,7 +8229,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8237,7 +8239,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8262,7 +8264,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "beefy-primitives", "bitvec", @@ -8323,7 +8325,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "frame-benchmarking", "frame-system", @@ -8468,7 +8470,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8912,7 +8914,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9034,7 +9036,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9103,7 +9105,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "frame-support", "polkadot-primitives", @@ -9287,7 +9289,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "log", "sp-core", @@ -9298,8 +9300,9 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ + "async-trait", "futures", "futures-timer", "ip_network", @@ -9324,7 +9327,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "futures", "futures-timer", @@ -9347,7 +9350,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9363,7 +9366,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9380,7 +9383,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9391,7 +9394,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "chrono", "clap 3.2.19", @@ -9430,7 +9433,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "fnv", "futures", @@ -9458,7 +9461,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "hash-db", "kvdb", @@ -9483,7 +9486,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "futures", @@ -9507,7 +9510,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "futures", @@ -9536,7 +9539,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "fork-tree", @@ -9578,7 +9581,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "futures", "jsonrpsee", @@ -9600,7 +9603,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9613,7 +9616,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "futures", @@ -9638,7 +9641,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9665,7 +9668,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "environmental", "parity-scale-codec", @@ -9681,7 +9684,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "log", "parity-scale-codec", @@ -9696,7 +9699,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9717,7 +9720,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "ahash", "async-trait", @@ -9758,7 +9761,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "finality-grandpa", "futures", @@ -9779,7 +9782,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "ansi_term", "futures", @@ -9796,7 +9799,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "hex", @@ -9811,7 +9814,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "asynchronous-codec", @@ -9860,7 +9863,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "bitflags", @@ -9873,6 +9876,7 @@ dependencies = [ "sc-peerset", "serde", "smallvec", + "sp-blockchain", "sp-consensus", "sp-finality-grandpa", "sp-runtime", @@ -9882,7 +9886,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "ahash", "futures", @@ -9900,7 +9904,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "futures", "hex", @@ -9921,7 +9925,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "fork-tree", "futures", @@ -9949,7 +9953,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "bytes", "fnv", @@ -9979,7 +9983,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "futures", "libp2p", @@ -9992,7 +9996,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10001,7 +10005,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "futures", "hash-db", @@ -10031,7 +10035,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "futures", "jsonrpsee", @@ -10054,7 +10058,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "futures", "jsonrpsee", @@ -10067,7 +10071,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "directories", @@ -10134,7 +10138,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "log", "parity-scale-codec", @@ -10148,7 +10152,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10167,7 +10171,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "futures", "libc", @@ -10186,7 +10190,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "chrono", "futures", @@ -10204,7 +10208,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "ansi_term", "atty", @@ -10235,7 +10239,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10246,7 +10250,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "futures", "futures-timer", @@ -10272,7 +10276,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "futures", "log", @@ -10285,7 +10289,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "futures", "futures-timer", @@ -10732,7 +10736,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "enumn", "parity-scale-codec", @@ -10808,7 +10812,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "hash-db", "log", @@ -10826,7 +10830,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "blake2", "proc-macro-crate", @@ -10838,7 +10842,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "parity-scale-codec", "scale-info", @@ -10851,7 +10855,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "integer-sqrt", "num-traits", @@ -10866,7 +10870,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "parity-scale-codec", "scale-info", @@ -10879,7 +10883,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "parity-scale-codec", @@ -10891,7 +10895,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "parity-scale-codec", "sp-api", @@ -10903,7 +10907,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "futures", "log", @@ -10921,7 +10925,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "futures", @@ -10940,7 +10944,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "parity-scale-codec", @@ -10958,7 +10962,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "merlin", @@ -10981,7 +10985,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "parity-scale-codec", "scale-info", @@ -10995,7 +10999,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "parity-scale-codec", "scale-info", @@ -11008,7 +11012,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "base58", "bitflags", @@ -11054,7 +11058,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "blake2", "byteorder", @@ -11068,7 +11072,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "proc-macro2", "quote", @@ -11079,7 +11083,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11088,7 +11092,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "proc-macro2", "quote", @@ -11098,7 +11102,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "environmental", "parity-scale-codec", @@ -11109,7 +11113,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "finality-grandpa", "log", @@ -11127,7 +11131,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11141,7 +11145,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "bytes", "futures", @@ -11167,7 +11171,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "lazy_static", "sp-core", @@ -11178,7 +11182,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "futures", @@ -11195,7 +11199,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "thiserror", "zstd", @@ -11204,7 +11208,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "log", "parity-scale-codec", @@ -11219,7 +11223,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "parity-scale-codec", "scale-info", @@ -11233,7 +11237,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "sp-api", "sp-core", @@ -11243,7 +11247,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "backtrace", "lazy_static", @@ -11253,7 +11257,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "rustc-hash", "serde", @@ -11263,7 +11267,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "either", "hash256-std-hasher", @@ -11285,7 +11289,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11303,7 +11307,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "Inflector", "proc-macro-crate", @@ -11315,7 +11319,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "log", "parity-scale-codec", @@ -11329,7 +11333,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "serde", "serde_json", @@ -11338,7 +11342,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "parity-scale-codec", "scale-info", @@ -11352,7 +11356,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "parity-scale-codec", "scale-info", @@ -11363,7 +11367,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "hash-db", "log", @@ -11385,12 +11389,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11403,7 +11407,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "log", "sp-core", @@ -11416,7 +11420,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "futures-timer", @@ -11432,7 +11436,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "parity-scale-codec", "sp-std", @@ -11444,7 +11448,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "sp-api", "sp-runtime", @@ -11453,7 +11457,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "log", @@ -11469,7 +11473,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "ahash", "hash-db", @@ -11492,7 +11496,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11509,7 +11513,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11520,7 +11524,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "impl-trait-for-tuples", "log", @@ -11781,7 +11785,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "platforms", ] @@ -11789,7 +11793,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11810,7 +11814,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "futures-util", "hyper", @@ -11823,7 +11827,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "jsonrpsee", "log", @@ -11844,7 +11848,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "async-trait", "futures", @@ -11870,7 +11874,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11880,7 +11884,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11891,7 +11895,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "ansi_term", "build-helper", @@ -11999,7 +12003,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "frame-support", "polkadot-primitives", @@ -12288,7 +12292,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12299,7 +12303,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12426,9 +12430,10 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" dependencies = [ "clap 3.2.19", + "frame-try-runtime", "jsonrpsee", "log", "parity-scale-codec", @@ -13004,7 +13009,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "beefy-primitives", "bitvec", @@ -13093,7 +13098,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "frame-support", "polkadot-primitives", @@ -13379,7 +13384,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13393,7 +13398,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "frame-support", "frame-system", @@ -13413,7 +13418,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "frame-benchmarking", "frame-support", @@ -13431,7 +13436,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#2eb7672905d99971fc11ad7ff4d57e68967401d2" +source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" dependencies = [ "Inflector", "proc-macro2", diff --git a/pallets/aura-ext/Cargo.toml b/pallets/aura-ext/Cargo.toml index 30f5214a926..593ad831387 100644 --- a/pallets/aura-ext/Cargo.toml +++ b/pallets/aura-ext/Cargo.toml @@ -40,3 +40,4 @@ std = [ "sp-runtime/std", "sp-std/std", ] +try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/dmp-queue/Cargo.toml b/pallets/dmp-queue/Cargo.toml index 846bf801ca5..9c199f3d9f4 100644 --- a/pallets/dmp-queue/Cargo.toml +++ b/pallets/dmp-queue/Cargo.toml @@ -42,3 +42,4 @@ std = [ "xcm/std", "cumulus-primitives-core/std", ] +try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/parachain-system/Cargo.toml b/pallets/parachain-system/Cargo.toml index 16fdfe1af90..15f4be3dabe 100644 --- a/pallets/parachain-system/Cargo.toml +++ b/pallets/parachain-system/Cargo.toml @@ -78,3 +78,5 @@ std = [ runtime-benchmarks = [ "sp-runtime/runtime-benchmarks" ] + +try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/solo-to-para/Cargo.toml b/pallets/solo-to-para/Cargo.toml index 6a234f49b89..298699ae158 100644 --- a/pallets/solo-to-para/Cargo.toml +++ b/pallets/solo-to-para/Cargo.toml @@ -37,3 +37,4 @@ std = [ "sp-runtime/std", "sp-std/std", ] +try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/xcm/Cargo.toml b/pallets/xcm/Cargo.toml index 6ea825c07fc..16f57d81abf 100644 --- a/pallets/xcm/Cargo.toml +++ b/pallets/xcm/Cargo.toml @@ -31,3 +31,4 @@ std = [ "frame-support/std", "frame-system/std", ] +try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/xcmp-queue/Cargo.toml b/pallets/xcmp-queue/Cargo.toml index 06df5006707..0d4f83757ac 100644 --- a/pallets/xcmp-queue/Cargo.toml +++ b/pallets/xcmp-queue/Cargo.toml @@ -59,3 +59,4 @@ runtime-benchmarks = [ "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", ] +try-runtime = ["frame-support/try-runtime"] diff --git a/parachain-template/runtime/Cargo.toml b/parachain-template/runtime/Cargo.toml index 12d25abbe1d..145c09fcc34 100644 --- a/parachain-template/runtime/Cargo.toml +++ b/parachain-template/runtime/Cargo.toml @@ -145,6 +145,23 @@ runtime-benchmarks = [ ] try-runtime = [ + "cumulus-pallet-aura-ext/try-runtime", + "cumulus-pallet-dmp-queue/try-runtime", + "cumulus-pallet-parachain-system/try-runtime", + "cumulus-pallet-xcm/try-runtime", + "cumulus-pallet-xcmp-queue/try-runtime", "frame-executive/try-runtime", + "frame-system/try-runtime", "frame-try-runtime", + "pallet-aura/try-runtime", + "pallet-authorship/try-runtime", + "pallet-balances/try-runtime", + "pallet-collator-selection/try-runtime", + "pallet-session/try-runtime", + "pallet-sudo/try-runtime", + "pallet-template/try-runtime", + "pallet-timestamp/try-runtime", + "pallet-transaction-payment/try-runtime", + "pallet-xcm/try-runtime", + "parachain-info/try-runtime", ] diff --git a/parachain-template/runtime/src/lib.rs b/parachain-template/runtime/src/lib.rs index dee56fea42c..d7a888a55c0 100644 --- a/parachain-template/runtime/src/lib.rs +++ b/parachain-template/runtime/src/lib.rs @@ -644,8 +644,15 @@ impl_runtime_apis! { (weight, RuntimeBlockWeights::get().max_block) } - fn execute_block_no_check(block: Block) -> Weight { - Executive::execute_block_no_check(block) + fn execute_block(block: Block, state_root_check: bool, select: frame_try_runtime::TryStateSelect) -> Weight { + log::info!( + target: "runtime::parachain-template", "try-runtime: executing block #{} ({:?}) / root checks: {:?} / sanity-checks: {:?}", + block.header.number, + block.header.hash(), + state_root_check, + select, + ); + Executive::try_execute_block(block, state_root_check, select).expect("try_execute_block failed") } } diff --git a/parachains/pallets/parachain-info/Cargo.toml b/parachains/pallets/parachain-info/Cargo.toml index 3544ba4f795..0fa54dcc721 100644 --- a/parachains/pallets/parachain-info/Cargo.toml +++ b/parachains/pallets/parachain-info/Cargo.toml @@ -24,3 +24,4 @@ std = [ "frame-support/std", "frame-system/std", ] +try-runtime = ["frame-support/try-runtime"] diff --git a/parachains/runtimes/assets/statemine/Cargo.toml b/parachains/runtimes/assets/statemine/Cargo.toml index 63e3cf1b1bc..a6313d4d274 100644 --- a/parachains/runtimes/assets/statemine/Cargo.toml +++ b/parachains/runtimes/assets/statemine/Cargo.toml @@ -105,8 +105,29 @@ runtime-benchmarks = [ "pallet-xcm-benchmarks", ] try-runtime = [ + "cumulus-pallet-aura-ext/try-runtime", + "cumulus-pallet-dmp-queue/try-runtime", + "cumulus-pallet-parachain-system/try-runtime", + "cumulus-pallet-xcm/try-runtime", + "cumulus-pallet-xcmp-queue/try-runtime", "frame-executive/try-runtime", + "frame-system/try-runtime", "frame-try-runtime", + "pallet-asset-tx-payment/try-runtime", + "pallet-assets/try-runtime", + "pallet-aura/try-runtime", + "pallet-authorship/try-runtime", + "pallet-balances/try-runtime", + "pallet-collator-selection/try-runtime", + "pallet-multisig/try-runtime", + "pallet-proxy/try-runtime", + "pallet-session/try-runtime", + "pallet-timestamp/try-runtime", + "pallet-transaction-payment/try-runtime", + "pallet-uniques/try-runtime", + "pallet-utility/try-runtime", + "pallet-xcm/try-runtime", + "parachain-info/try-runtime", ] std = [ "codec/std", diff --git a/parachains/runtimes/assets/statemine/src/lib.rs b/parachains/runtimes/assets/statemine/src/lib.rs index f33c85bbaf0..ea77c717a12 100644 --- a/parachains/runtimes/assets/statemine/src/lib.rs +++ b/parachains/runtimes/assets/statemine/src/lib.rs @@ -777,8 +777,15 @@ impl_runtime_apis! { (weight, RuntimeBlockWeights::get().max_block) } - fn execute_block_no_check(block: Block) -> Weight { - Executive::execute_block_no_check(block) + fn execute_block(block: Block, state_root_check: bool, select: frame_try_runtime::TryStateSelect) -> Weight { + log::info!( + target: "runtime::statemine", "try-runtime: executing block #{} ({:?}) / root checks: {:?} / sanity-checks: {:?}", + block.header.number, + block.header.hash(), + state_root_check, + select, + ); + Executive::try_execute_block(block, state_root_check, select).expect("try_execute_block failed") } } diff --git a/parachains/runtimes/assets/statemint/Cargo.toml b/parachains/runtimes/assets/statemint/Cargo.toml index 186b4839ea8..1420852d9ec 100644 --- a/parachains/runtimes/assets/statemint/Cargo.toml +++ b/parachains/runtimes/assets/statemint/Cargo.toml @@ -104,8 +104,29 @@ runtime-benchmarks = [ "pallet-xcm-benchmarks", ] try-runtime = [ + "cumulus-pallet-aura-ext/try-runtime", + "cumulus-pallet-dmp-queue/try-runtime", + "cumulus-pallet-parachain-system/try-runtime", + "cumulus-pallet-xcm/try-runtime", + "cumulus-pallet-xcmp-queue/try-runtime", "frame-executive/try-runtime", + "frame-system/try-runtime", "frame-try-runtime", + "pallet-asset-tx-payment/try-runtime", + "pallet-assets/try-runtime", + "pallet-aura/try-runtime", + "pallet-authorship/try-runtime", + "pallet-balances/try-runtime", + "pallet-collator-selection/try-runtime", + "pallet-multisig/try-runtime", + "pallet-proxy/try-runtime", + "pallet-session/try-runtime", + "pallet-timestamp/try-runtime", + "pallet-transaction-payment/try-runtime", + "pallet-uniques/try-runtime", + "pallet-utility/try-runtime", + "pallet-xcm/try-runtime", + "parachain-info/try-runtime", ] std = [ "codec/std", diff --git a/parachains/runtimes/assets/statemint/src/lib.rs b/parachains/runtimes/assets/statemint/src/lib.rs index 715d1016563..d33edf7dbc7 100644 --- a/parachains/runtimes/assets/statemint/src/lib.rs +++ b/parachains/runtimes/assets/statemint/src/lib.rs @@ -806,8 +806,15 @@ impl_runtime_apis! { (weight, RuntimeBlockWeights::get().max_block) } - fn execute_block_no_check(block: Block) -> Weight { - Executive::execute_block_no_check(block) + fn execute_block(block: Block, state_root_check: bool, select: frame_try_runtime::TryStateSelect) -> Weight { + log::info!( + target: "runtime::statemint", "try-runtime: executing block #{} ({:?}) / root checks: {:?} / sanity-checks: {:?}", + block.header.number, + block.header.hash(), + state_root_check, + select, + ); + Executive::try_execute_block(block, state_root_check, select).expect("try_execute_block failed") } } diff --git a/parachains/runtimes/assets/westmint/Cargo.toml b/parachains/runtimes/assets/westmint/Cargo.toml index 2133accf0e2..c3fe0925523 100644 --- a/parachains/runtimes/assets/westmint/Cargo.toml +++ b/parachains/runtimes/assets/westmint/Cargo.toml @@ -104,8 +104,29 @@ runtime-benchmarks = [ "pallet-xcm-benchmarks", ] try-runtime = [ + "cumulus-pallet-aura-ext/try-runtime", + "cumulus-pallet-dmp-queue/try-runtime", + "cumulus-pallet-parachain-system/try-runtime", + "cumulus-pallet-xcm/try-runtime", + "cumulus-pallet-xcmp-queue/try-runtime", "frame-executive/try-runtime", + "frame-system/try-runtime", "frame-try-runtime", + "pallet-asset-tx-payment/try-runtime", + "pallet-assets/try-runtime", + "pallet-aura/try-runtime", + "pallet-authorship/try-runtime", + "pallet-balances/try-runtime", + "pallet-collator-selection/try-runtime", + "pallet-multisig/try-runtime", + "pallet-proxy/try-runtime", + "pallet-session/try-runtime", + "pallet-timestamp/try-runtime", + "pallet-transaction-payment/try-runtime", + "pallet-uniques/try-runtime", + "pallet-utility/try-runtime", + "pallet-xcm/try-runtime", + "parachain-info/try-runtime", ] std = [ "codec/std", diff --git a/parachains/runtimes/assets/westmint/src/lib.rs b/parachains/runtimes/assets/westmint/src/lib.rs index 1782fee9f71..19d0f3135cc 100644 --- a/parachains/runtimes/assets/westmint/src/lib.rs +++ b/parachains/runtimes/assets/westmint/src/lib.rs @@ -767,8 +767,15 @@ impl_runtime_apis! { (weight, RuntimeBlockWeights::get().max_block) } - fn execute_block_no_check(block: Block) -> Weight { - Executive::execute_block_no_check(block) + fn execute_block(block: Block, state_root_check: bool, select: frame_try_runtime::TryStateSelect) -> Weight { + log::info!( + target: "runtime::westmint", "try-runtime: executing block #{} ({:?}) / root checks: {:?} / sanity-checks: {:?}", + block.header.number, + block.header.hash(), + state_root_check, + select, + ); + Executive::try_execute_block(block, state_root_check, select).expect("try_execute_block failed") } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml index f8d7453c965..3bef7d21fe3 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml +++ b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml @@ -100,8 +100,29 @@ runtime-benchmarks = [ "cumulus-pallet-xcmp-queue/runtime-benchmarks", ] try-runtime = [ + "cumulus-pallet-aura-ext/try-runtime", + "cumulus-pallet-dmp-queue/try-runtime", + "cumulus-pallet-parachain-system/try-runtime", + "cumulus-pallet-xcm/try-runtime", + "cumulus-pallet-xcmp-queue/try-runtime", "frame-executive/try-runtime", + "frame-system/try-runtime", "frame-try-runtime", + "pallet-alliance/try-runtime", + "pallet-aura/try-runtime", + "pallet-authorship/try-runtime", + "pallet-balances/try-runtime", + "pallet-collective/try-runtime", + "pallet-collator-selection/try-runtime", + "pallet-multisig/try-runtime", + "pallet-proxy/try-runtime", + "pallet-session/try-runtime", + "pallet-sudo/try-runtime", + "pallet-timestamp/try-runtime", + "pallet-transaction-payment/try-runtime", + "pallet-utility/try-runtime", + "pallet-xcm/try-runtime", + "parachain-info/try-runtime", ] std = [ "codec/std", diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs b/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs index 4f821802172..941d2703348 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs @@ -20,7 +20,7 @@ use frame_support::{ weights::Weight, }; use pallet_alliance::{ProposalIndex, ProposalProvider}; -use sp_std::{boxed::Box, marker::PhantomData}; +use sp_std::{marker::PhantomData, prelude::*}; use xcm::latest::{Fungibility, Junction, NetworkId, Parent}; type AccountIdOf = ::AccountId; @@ -134,4 +134,12 @@ where fn proposal_of(proposal_hash: HashOf) -> Option> { pallet_collective::Pallet::::proposal_of(proposal_hash) } + + fn proposals() -> Vec> { + pallet_collective::Pallet::::proposals().into_inner() + } + + fn proposals_count() -> u32 { + pallet_collective::Proposals::::decode_len().unwrap_or(0) as u32 + } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs index bc256d3a5f7..85a1ad72a59 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs @@ -697,8 +697,15 @@ impl_runtime_apis! { (weight, RuntimeBlockWeights::get().max_block) } - fn execute_block_no_check(block: Block) -> Weight { - Executive::execute_block_no_check(block) + fn execute_block(block: Block, state_root_check: bool, select: frame_try_runtime::TryStateSelect) -> Weight { + log::info!( + target: "runtime::collectives-polkadot", "try-runtime: executing block #{} ({:?}) / root checks: {:?} / sanity-checks: {:?}", + block.header.number, + block.header.hash(), + state_root_check, + select, + ); + Executive::try_execute_block(block, state_root_check, select).expect("try_execute_block failed") } } diff --git a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml index 513d31f3314..379156f4260 100644 --- a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml +++ b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml @@ -162,6 +162,26 @@ runtime-benchmarks = [ ] try-runtime = [ + "cumulus-pallet-aura-ext/try-runtime", + "cumulus-pallet-dmp-queue/try-runtime", + "cumulus-pallet-parachain-system/try-runtime", + "cumulus-pallet-xcm/try-runtime", + "cumulus-pallet-xcmp-queue/try-runtime", "frame-executive/try-runtime", + "frame-system/try-runtime", "frame-try-runtime", + "pallet-aura/try-runtime", + "pallet-authorship/try-runtime", + "pallet-balances/try-runtime", + "pallet-collator-selection/try-runtime", + "pallet-contracts/try-runtime", + "pallet-multisig/try-runtime", + "pallet-randomness-collective-flip/try-runtime", + "pallet-session/try-runtime", + "pallet-sudo/try-runtime", + "pallet-timestamp/try-runtime", + "pallet-transaction-payment/try-runtime", + "pallet-utility/try-runtime", + "pallet-xcm/try-runtime", + "parachain-info/try-runtime", ] diff --git a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index b3740451807..b8849fa6f65 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -569,8 +569,15 @@ impl pallet_contracts_rpc_runtime_api::ContractsApi Weight { - Executive::execute_block_no_check(block) + fn execute_block(block: Block, state_root_check: bool, select: frame_try_runtime::TryStateSelect) -> Weight { + log::info!( + target: "runtime::contracts", "try-runtime: executing block #{} ({:?}) / root checks: {:?} / sanity-checks: {:?}", + block.header.number, + block.header.hash(), + state_root_check, + select, + ); + Executive::try_execute_block(block, state_root_check, select).expect("try_execute_block failed") } } diff --git a/parachains/runtimes/testing/penpal/Cargo.toml b/parachains/runtimes/testing/penpal/Cargo.toml index 168de417004..0725eb477e0 100644 --- a/parachains/runtimes/testing/penpal/Cargo.toml +++ b/parachains/runtimes/testing/penpal/Cargo.toml @@ -147,6 +147,24 @@ runtime-benchmarks = [ ] try-runtime = [ + "cumulus-pallet-aura-ext/try-runtime", + "cumulus-pallet-dmp-queue/try-runtime", + "cumulus-pallet-parachain-system/try-runtime", + "cumulus-pallet-xcm/try-runtime", + "cumulus-pallet-xcmp-queue/try-runtime", "frame-executive/try-runtime", + "frame-system/try-runtime", "frame-try-runtime", + "pallet-aura/try-runtime", + "pallet-authorship/try-runtime", + "pallet-balances/try-runtime", + "pallet-collator-selection/try-runtime", + "pallet-session/try-runtime", + "pallet-sudo/try-runtime", + "pallet-timestamp/try-runtime", + "pallet-transaction-payment/try-runtime", + "pallet-assets/try-runtime", + "pallet-asset-tx-payment/try-runtime", + "pallet-xcm/try-runtime", + "parachain-info/try-runtime", ] diff --git a/parachains/runtimes/testing/penpal/src/lib.rs b/parachains/runtimes/testing/penpal/src/lib.rs index f98583a9d1d..528c1fa01de 100644 --- a/parachains/runtimes/testing/penpal/src/lib.rs +++ b/parachains/runtimes/testing/penpal/src/lib.rs @@ -694,13 +694,20 @@ impl_runtime_apis! { #[cfg(feature = "try-runtime")] impl frame_try_runtime::TryRuntime for Runtime { fn on_runtime_upgrade() -> (Weight, Weight) { - log::info!("try-runtime::on_runtime_upgrade parachain-template."); + log::info!("try-runtime::on_runtime_upgrade penpal."); let weight = Executive::try_runtime_upgrade().unwrap(); (weight, RuntimeBlockWeights::get().max_block) } - fn execute_block_no_check(block: Block) -> Weight { - Executive::execute_block_no_check(block) + fn execute_block(block: Block, state_root_check: bool, select: frame_try_runtime::TryStateSelect) -> Weight { + log::info!( + target: "runtime::penpal", "try-runtime: executing block #{} ({:?}) / root checks: {:?} / sanity-checks: {:?}", + block.header.number, + block.header.hash(), + state_root_check, + select, + ); + Executive::try_execute_block(block, state_root_check, select).expect("try_execute_block failed") } } From 9faf9b1e4f3615d11a0466c4e0a0b3546bd618c1 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Thu, 1 Sep 2022 20:25:05 +0100 Subject: [PATCH 033/148] Companion for Weight v1.5 Follow Up (#1584) * fixes * oopsie * [ci] Apply cargo-fmt * fixes * [ci] Apply cargo-fmt * fixes * fix cumulus template * fix merge * update lockfile for {"polkadot", "substrate"} Co-authored-by: paritytech-ci Co-authored-by: parity-processbot <> --- Cargo.lock | 496 +++++++++--------- pallets/collator-selection/src/weights.rs | 26 +- pallets/dmp-queue/src/lib.rs | 4 +- pallets/parachain-system/src/lib.rs | 4 +- pallets/parachain-system/src/migration.rs | 2 +- pallets/xcm/src/lib.rs | 4 +- pallets/xcmp-queue/src/lib.rs | 6 +- pallets/xcmp-queue/src/migration.rs | 4 +- pallets/xcmp-queue/src/tests.rs | 11 +- parachain-template/runtime/src/lib.rs | 6 +- .../runtime/src/weights/block_weights.rs | 9 +- .../runtime/src/weights/extrinsic_weights.rs | 4 +- parachains/common/src/lib.rs | 2 +- .../runtimes/assets/statemine/src/lib.rs | 4 +- .../statemine/src/weights/block_weights.rs | 9 +- .../src/weights/extrinsic_weights.rs | 4 +- .../statemine/src/weights/frame_system.rs | 8 +- .../statemine/src/weights/pallet_assets.rs | 6 +- .../src/weights/pallet_collator_selection.rs | 10 +- .../statemine/src/weights/pallet_multisig.rs | 30 +- .../statemine/src/weights/pallet_proxy.rs | 28 +- .../statemine/src/weights/pallet_uniques.rs | 8 +- .../statemine/src/weights/pallet_utility.rs | 6 +- .../assets/statemine/src/weights/xcm/mod.rs | 6 +- .../runtimes/assets/statemint/src/lib.rs | 4 +- .../statemint/src/weights/block_weights.rs | 9 +- .../src/weights/extrinsic_weights.rs | 4 +- .../statemint/src/weights/frame_system.rs | 8 +- .../statemint/src/weights/pallet_assets.rs | 12 +- .../src/weights/pallet_collator_selection.rs | 10 +- .../statemint/src/weights/pallet_multisig.rs | 30 +- .../statemint/src/weights/pallet_proxy.rs | 28 +- .../statemint/src/weights/pallet_uniques.rs | 8 +- .../statemint/src/weights/pallet_utility.rs | 6 +- .../assets/statemint/src/weights/xcm/mod.rs | 6 +- .../runtimes/assets/westmint/src/lib.rs | 4 +- .../westmint/src/weights/block_weights.rs | 9 +- .../westmint/src/weights/extrinsic_weights.rs | 4 +- .../westmint/src/weights/frame_system.rs | 8 +- .../westmint/src/weights/pallet_assets.rs | 10 +- .../src/weights/pallet_collator_selection.rs | 10 +- .../westmint/src/weights/pallet_multisig.rs | 30 +- .../westmint/src/weights/pallet_proxy.rs | 28 +- .../westmint/src/weights/pallet_uniques.rs | 8 +- .../westmint/src/weights/pallet_utility.rs | 6 +- .../assets/westmint/src/weights/xcm/mod.rs | 6 +- .../collectives-polkadot/src/lib.rs | 4 +- .../src/weights/block_weights.rs | 9 +- .../src/weights/extrinsic_weights.rs | 4 +- .../src/weights/frame_system.rs | 8 +- .../src/weights/pallet_alliance.rs | 46 +- .../src/weights/pallet_collator_selection.rs | 10 +- .../src/weights/pallet_multisig.rs | 30 +- .../src/weights/pallet_proxy.rs | 28 +- .../src/weights/pallet_utility.rs | 6 +- .../contracts/contracts-rococo/src/lib.rs | 4 +- .../src/weights/block_weights.rs | 9 +- .../src/weights/extrinsic_weights.rs | 4 +- .../runtimes/starters/seedling/src/lib.rs | 2 +- parachains/runtimes/starters/shell/src/lib.rs | 4 +- parachains/runtimes/testing/penpal/src/lib.rs | 6 +- .../penpal/src/weights/block_weights.rs | 9 +- .../penpal/src/weights/extrinsic_weights.rs | 4 +- .../testing/rococo-parachain/src/lib.rs | 6 +- templates/xcm-bench-template.hbs | 6 +- test/runtime/src/lib.rs | 4 +- 66 files changed, 583 insertions(+), 565 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6c1231f1507..bf7a1e5c2f6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -451,7 +451,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "beefy-primitives", @@ -487,7 +487,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -507,7 +507,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "beefy-primitives", "sp-api", @@ -516,7 +516,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "parity-scale-codec", "scale-info", @@ -2786,7 +2786,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "parity-scale-codec", ] @@ -2804,7 +2804,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support", "frame-system", @@ -2827,7 +2827,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "Inflector", "chrono", @@ -2878,7 +2878,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2889,7 +2889,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2905,7 +2905,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support", "frame-system", @@ -2934,7 +2934,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "bitflags", "frame-metadata", @@ -2965,7 +2965,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "Inflector", "cfg-expr", @@ -2979,7 +2979,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2991,7 +2991,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "proc-macro2", "quote", @@ -3001,7 +3001,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support", "log", @@ -3018,7 +3018,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -3033,7 +3033,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "parity-scale-codec", "sp-api", @@ -3042,7 +3042,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support", "parity-scale-codec", @@ -3917,7 +3917,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "beefy-primitives", "bitvec", @@ -4010,7 +4010,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "frame-support", "polkadot-primitives", @@ -5369,7 +5369,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "async-trait", "dyn-clonable", @@ -5385,7 +5385,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "expander 0.0.6", "itertools", @@ -5423,7 +5423,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -5444,7 +5444,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support", "frame-system", @@ -5461,7 +5461,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -5475,7 +5475,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support", "frame-system", @@ -5491,7 +5491,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support", "frame-system", @@ -5507,7 +5507,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support", "frame-system", @@ -5522,7 +5522,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -5546,7 +5546,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5566,7 +5566,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -5581,7 +5581,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "beefy-primitives", "frame-support", @@ -5597,7 +5597,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -5620,7 +5620,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -5638,7 +5638,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -5683,7 +5683,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -5700,7 +5700,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "bitflags", "frame-benchmarking", @@ -5728,7 +5728,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "bitflags", "parity-scale-codec", @@ -5743,7 +5743,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "proc-macro2", "quote", @@ -5753,7 +5753,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5770,7 +5770,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5783,7 +5783,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -5799,7 +5799,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5822,7 +5822,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5835,7 +5835,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -5853,7 +5853,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -5868,7 +5868,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -5891,7 +5891,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5907,7 +5907,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -5927,7 +5927,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -5944,7 +5944,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -5961,7 +5961,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5979,7 +5979,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5994,7 +5994,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -6009,7 +6009,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support", "frame-system", @@ -6026,7 +6026,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6045,7 +6045,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "parity-scale-codec", "sp-api", @@ -6055,7 +6055,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support", "frame-system", @@ -6072,7 +6072,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6095,7 +6095,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -6111,7 +6111,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -6126,7 +6126,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support", "frame-system", @@ -6140,7 +6140,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -6155,7 +6155,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -6171,7 +6171,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support", "frame-system", @@ -6192,7 +6192,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -6208,7 +6208,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support", "frame-system", @@ -6222,7 +6222,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6245,7 +6245,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6256,7 +6256,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "log", "sp-arithmetic", @@ -6265,7 +6265,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support", "frame-system", @@ -6294,7 +6294,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -6312,7 +6312,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -6331,7 +6331,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-support", "frame-system", @@ -6347,7 +6347,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6362,7 +6362,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6373,7 +6373,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -6390,7 +6390,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -6405,7 +6405,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -6421,7 +6421,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-benchmarking", "frame-support", @@ -6436,7 +6436,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "frame-support", "frame-system", @@ -6454,7 +6454,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "frame-benchmarking", "frame-support", @@ -7012,7 +7012,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7027,7 +7027,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7041,7 +7041,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "derive_more", "fatality", @@ -7064,7 +7064,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "fatality", "futures", @@ -7085,7 +7085,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "clap 3.2.19", "frame-benchmarking-cli", @@ -7111,7 +7111,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7152,7 +7152,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "always-assert", "fatality", @@ -7173,7 +7173,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7186,7 +7186,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "derive_more", "fatality", @@ -7209,7 +7209,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7223,7 +7223,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "futures", "futures-timer", @@ -7243,7 +7243,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "always-assert", "async-trait", @@ -7267,7 +7267,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "futures", "parity-scale-codec", @@ -7285,7 +7285,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "bitvec", "derive_more", @@ -7314,7 +7314,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "bitvec", "futures", @@ -7334,7 +7334,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "bitvec", "fatality", @@ -7353,7 +7353,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7368,7 +7368,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "async-trait", "futures", @@ -7386,7 +7386,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7401,7 +7401,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "futures", "futures-timer", @@ -7418,7 +7418,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "fatality", "futures", @@ -7437,7 +7437,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "async-trait", "futures", @@ -7454,7 +7454,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "bitvec", "fatality", @@ -7472,7 +7472,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "always-assert", "assert_matches", @@ -7504,7 +7504,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "futures", "polkadot-node-primitives", @@ -7520,7 +7520,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "futures", "memory-lru", @@ -7536,7 +7536,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "async-std", "lazy_static", @@ -7554,7 +7554,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "bs58", "futures", @@ -7573,7 +7573,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "async-trait", "derive_more", @@ -7595,7 +7595,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "bounded-vec", "futures", @@ -7617,7 +7617,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7627,7 +7627,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "async-trait", "futures", @@ -7645,7 +7645,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "async-trait", "derive_more", @@ -7668,7 +7668,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "async-trait", "derive_more", @@ -7701,7 +7701,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "async-trait", "futures", @@ -7724,7 +7724,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "derive_more", "frame-support", @@ -7824,7 +7824,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7839,7 +7839,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "bitvec", "frame-system", @@ -7869,7 +7869,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7901,7 +7901,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "beefy-primitives", "bitvec", @@ -7989,7 +7989,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "beefy-primitives", "bitvec", @@ -8036,7 +8036,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "frame-support", "polkadot-primitives", @@ -8048,7 +8048,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "bs58", "parity-scale-codec", @@ -8060,7 +8060,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "bitflags", "bitvec", @@ -8103,7 +8103,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "async-trait", "beefy-gadget", @@ -8208,7 +8208,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8229,7 +8229,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8239,7 +8239,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8264,7 +8264,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "beefy-primitives", "bitvec", @@ -8325,7 +8325,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "frame-benchmarking", "frame-system", @@ -8470,7 +8470,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8914,7 +8914,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9036,7 +9036,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9105,7 +9105,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "frame-support", "polkadot-primitives", @@ -9289,7 +9289,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "log", "sp-core", @@ -9300,7 +9300,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "futures", @@ -9327,7 +9327,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "futures", "futures-timer", @@ -9350,7 +9350,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9366,7 +9366,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9383,7 +9383,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9394,7 +9394,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "chrono", "clap 3.2.19", @@ -9433,7 +9433,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "fnv", "futures", @@ -9461,7 +9461,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "hash-db", "kvdb", @@ -9486,7 +9486,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "futures", @@ -9510,7 +9510,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "futures", @@ -9539,7 +9539,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "fork-tree", @@ -9581,7 +9581,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "futures", "jsonrpsee", @@ -9603,7 +9603,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9616,7 +9616,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "futures", @@ -9641,7 +9641,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9668,7 +9668,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "environmental", "parity-scale-codec", @@ -9684,7 +9684,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "log", "parity-scale-codec", @@ -9699,7 +9699,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9720,7 +9720,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "ahash", "async-trait", @@ -9761,7 +9761,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "finality-grandpa", "futures", @@ -9782,7 +9782,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "ansi_term", "futures", @@ -9799,7 +9799,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "hex", @@ -9814,7 +9814,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "asynchronous-codec", @@ -9863,7 +9863,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "bitflags", @@ -9886,7 +9886,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "ahash", "futures", @@ -9904,7 +9904,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "futures", "hex", @@ -9925,7 +9925,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "fork-tree", "futures", @@ -9953,7 +9953,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "bytes", "fnv", @@ -9983,7 +9983,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "futures", "libp2p", @@ -9996,7 +9996,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10005,7 +10005,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "futures", "hash-db", @@ -10035,7 +10035,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "futures", "jsonrpsee", @@ -10058,7 +10058,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "futures", "jsonrpsee", @@ -10071,7 +10071,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "directories", @@ -10138,7 +10138,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "log", "parity-scale-codec", @@ -10152,7 +10152,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10171,7 +10171,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "futures", "libc", @@ -10190,7 +10190,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "chrono", "futures", @@ -10208,7 +10208,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "ansi_term", "atty", @@ -10239,7 +10239,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10250,7 +10250,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "futures", "futures-timer", @@ -10276,7 +10276,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "futures", "log", @@ -10289,7 +10289,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "futures", "futures-timer", @@ -10736,7 +10736,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "enumn", "parity-scale-codec", @@ -10812,7 +10812,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "hash-db", "log", @@ -10830,7 +10830,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "blake2", "proc-macro-crate", @@ -10842,7 +10842,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "parity-scale-codec", "scale-info", @@ -10855,7 +10855,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "integer-sqrt", "num-traits", @@ -10870,7 +10870,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "parity-scale-codec", "scale-info", @@ -10883,7 +10883,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "parity-scale-codec", @@ -10895,7 +10895,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "parity-scale-codec", "sp-api", @@ -10907,7 +10907,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "futures", "log", @@ -10925,7 +10925,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "futures", @@ -10944,7 +10944,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "parity-scale-codec", @@ -10962,7 +10962,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "merlin", @@ -10985,7 +10985,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "parity-scale-codec", "scale-info", @@ -10999,7 +10999,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "parity-scale-codec", "scale-info", @@ -11012,7 +11012,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "base58", "bitflags", @@ -11058,7 +11058,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "blake2", "byteorder", @@ -11072,7 +11072,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "proc-macro2", "quote", @@ -11083,7 +11083,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11092,7 +11092,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "proc-macro2", "quote", @@ -11102,7 +11102,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "environmental", "parity-scale-codec", @@ -11113,7 +11113,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "finality-grandpa", "log", @@ -11131,7 +11131,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11145,7 +11145,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "bytes", "futures", @@ -11171,7 +11171,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "lazy_static", "sp-core", @@ -11182,7 +11182,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "futures", @@ -11199,7 +11199,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "thiserror", "zstd", @@ -11208,7 +11208,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "log", "parity-scale-codec", @@ -11223,7 +11223,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "parity-scale-codec", "scale-info", @@ -11237,7 +11237,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "sp-api", "sp-core", @@ -11247,7 +11247,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "backtrace", "lazy_static", @@ -11257,7 +11257,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "rustc-hash", "serde", @@ -11267,7 +11267,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "either", "hash256-std-hasher", @@ -11289,7 +11289,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11307,7 +11307,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "Inflector", "proc-macro-crate", @@ -11319,7 +11319,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "log", "parity-scale-codec", @@ -11333,7 +11333,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "serde", "serde_json", @@ -11342,7 +11342,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "parity-scale-codec", "scale-info", @@ -11356,7 +11356,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "parity-scale-codec", "scale-info", @@ -11367,7 +11367,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "hash-db", "log", @@ -11389,12 +11389,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11407,7 +11407,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "log", "sp-core", @@ -11420,7 +11420,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "futures-timer", @@ -11436,7 +11436,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "parity-scale-codec", "sp-std", @@ -11448,7 +11448,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "sp-api", "sp-runtime", @@ -11457,7 +11457,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "log", @@ -11473,7 +11473,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "ahash", "hash-db", @@ -11496,7 +11496,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11513,7 +11513,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11524,7 +11524,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "impl-trait-for-tuples", "log", @@ -11785,7 +11785,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "platforms", ] @@ -11793,7 +11793,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11814,7 +11814,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "futures-util", "hyper", @@ -11827,7 +11827,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "jsonrpsee", "log", @@ -11848,7 +11848,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "async-trait", "futures", @@ -11874,7 +11874,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11884,7 +11884,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11895,7 +11895,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "ansi_term", "build-helper", @@ -12003,7 +12003,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "frame-support", "polkadot-primitives", @@ -12292,7 +12292,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12303,7 +12303,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12430,7 +12430,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5b0f999d6be8a29e4d6adfdfb22c314292f1d318" +source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" dependencies = [ "clap 3.2.19", "frame-try-runtime", @@ -13009,7 +13009,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "beefy-primitives", "bitvec", @@ -13098,7 +13098,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "frame-support", "polkadot-primitives", @@ -13384,7 +13384,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13398,7 +13398,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "frame-support", "frame-system", @@ -13418,7 +13418,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "frame-benchmarking", "frame-support", @@ -13436,7 +13436,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#e9c2bd2112e0a374c19ebeee7af4211f12baf9b5" +source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" dependencies = [ "Inflector", "proc-macro2", diff --git a/pallets/collator-selection/src/weights.rs b/pallets/collator-selection/src/weights.rs index fa99567734f..95c53b26769 100644 --- a/pallets/collator-selection/src/weights.rs +++ b/pallets/collator-selection/src/weights.rs @@ -42,8 +42,7 @@ impl WeightInfo for SubstrateWeight { Weight::from_ref_time(18_563_000 as RefTimeWeight) // Standard Error: 0 .saturating_add( - Weight::from_ref_time(68_000 as RefTimeWeight) - .scalar_saturating_mul(b as RefTimeWeight), + Weight::from_ref_time(68_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight), ) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -59,8 +58,7 @@ impl WeightInfo for SubstrateWeight { Weight::from_ref_time(71_196_000 as RefTimeWeight) // Standard Error: 0 .saturating_add( - Weight::from_ref_time(198_000 as RefTimeWeight) - .scalar_saturating_mul(c as RefTimeWeight), + Weight::from_ref_time(198_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight), ) .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) @@ -69,8 +67,7 @@ impl WeightInfo for SubstrateWeight { Weight::from_ref_time(55_336_000 as RefTimeWeight) // Standard Error: 0 .saturating_add( - Weight::from_ref_time(151_000 as RefTimeWeight) - .scalar_saturating_mul(c as RefTimeWeight), + Weight::from_ref_time(151_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight), ) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) @@ -85,12 +82,12 @@ impl WeightInfo for SubstrateWeight { // Standard Error: 1_010_000 .saturating_add( Weight::from_ref_time(109_961_000 as RefTimeWeight) - .scalar_saturating_mul(r as RefTimeWeight), + .saturating_mul(r as RefTimeWeight), ) // Standard Error: 1_010_000 .saturating_add( Weight::from_ref_time(151_952_000 as RefTimeWeight) - .scalar_saturating_mul(c as RefTimeWeight), + .saturating_mul(c as RefTimeWeight), ) .saturating_add( T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight)), @@ -113,8 +110,7 @@ impl WeightInfo for () { Weight::from_ref_time(18_563_000 as RefTimeWeight) // Standard Error: 0 .saturating_add( - Weight::from_ref_time(68_000 as RefTimeWeight) - .scalar_saturating_mul(b as RefTimeWeight), + Weight::from_ref_time(68_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight), ) .saturating_add(RocksDbWeight::get().writes(1 as RefTimeWeight)) } @@ -130,8 +126,7 @@ impl WeightInfo for () { Weight::from_ref_time(71_196_000 as RefTimeWeight) // Standard Error: 0 .saturating_add( - Weight::from_ref_time(198_000 as RefTimeWeight) - .scalar_saturating_mul(c as RefTimeWeight), + Weight::from_ref_time(198_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight), ) .saturating_add(RocksDbWeight::get().reads(4 as RefTimeWeight)) .saturating_add(RocksDbWeight::get().writes(2 as RefTimeWeight)) @@ -140,8 +135,7 @@ impl WeightInfo for () { Weight::from_ref_time(55_336_000 as RefTimeWeight) // Standard Error: 0 .saturating_add( - Weight::from_ref_time(151_000 as RefTimeWeight) - .scalar_saturating_mul(c as RefTimeWeight), + Weight::from_ref_time(151_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight), ) .saturating_add(RocksDbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(RocksDbWeight::get().writes(2 as RefTimeWeight)) @@ -156,12 +150,12 @@ impl WeightInfo for () { // Standard Error: 1_010_000 .saturating_add( Weight::from_ref_time(109_961_000 as RefTimeWeight) - .scalar_saturating_mul(r as RefTimeWeight), + .saturating_mul(r as RefTimeWeight), ) // Standard Error: 1_010_000 .saturating_add( Weight::from_ref_time(151_952_000 as RefTimeWeight) - .scalar_saturating_mul(c as RefTimeWeight), + .saturating_mul(c as RefTimeWeight), ) .saturating_add( RocksDbWeight::get().reads((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight)), diff --git a/pallets/dmp-queue/src/lib.rs b/pallets/dmp-queue/src/lib.rs index 838368b76df..842db97fd57 100644 --- a/pallets/dmp-queue/src/lib.rs +++ b/pallets/dmp-queue/src/lib.rs @@ -43,7 +43,7 @@ pub struct ConfigData { impl Default for ConfigData { fn default() -> Self { Self { - max_individual: 10 * WEIGHT_PER_MILLIS, // 10 ms of execution time maximum by default + max_individual: 10u64 * WEIGHT_PER_MILLIS, // 10 ms of execution time maximum by default } } } @@ -189,7 +189,7 @@ pub mod pallet { /// Exactly equivalent to `service_queue` but expects a mutable `page_index` to be passed /// in and any changes stored. fn do_service_queue(limit: Weight, page_index: &mut PageIndexData) -> Weight { - let mut used = Weight::new(); + let mut used = Weight::zero(); while page_index.begin_used < page_index.end_used { let page = Pages::::take(page_index.begin_used); for (i, &(sent_at, ref data)) in page.iter().enumerate() { diff --git a/pallets/parachain-system/src/lib.rs b/pallets/parachain-system/src/lib.rs index f897d5943bc..ee2564b2fa5 100644 --- a/pallets/parachain-system/src/lib.rs +++ b/pallets/parachain-system/src/lib.rs @@ -269,7 +269,7 @@ pub mod pallet { } fn on_initialize(_n: T::BlockNumber) -> Weight { - let mut weight = Weight::new(); + let mut weight = Weight::zero(); // To prevent removing `NewValidationCode` that was set by another `on_initialize` // like for example from scheduler, we only kill the storage entry if it was not yet @@ -808,7 +808,7 @@ impl Pallet { let dm_count = downward_messages.len() as u32; let mut dmq_head = >::get(); - let mut weight_used = Weight::new(); + let mut weight_used = Weight::zero(); if dm_count != 0 { Self::deposit_event(Event::DownwardMessagesReceived { count: dm_count }); let max_weight = diff --git a/pallets/parachain-system/src/migration.rs b/pallets/parachain-system/src/migration.rs index 4826ec741dd..f5eff920ae1 100644 --- a/pallets/parachain-system/src/migration.rs +++ b/pallets/parachain-system/src/migration.rs @@ -25,7 +25,7 @@ pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); /// Call this during the next runtime upgrade for this module. pub fn on_runtime_upgrade() -> Weight { - let mut weight: Weight = Weight::new(); + let mut weight: Weight = Weight::zero(); if StorageVersion::get::>() == 0 { weight = weight diff --git a/pallets/xcm/src/lib.rs b/pallets/xcm/src/lib.rs index d33e3c669d0..f3adaae3db0 100644 --- a/pallets/xcm/src/lib.rs +++ b/pallets/xcm/src/lib.rs @@ -111,7 +111,7 @@ impl DmpMessageHandler for UnlimitedDmpExecution { iter: impl Iterator)>, limit: Weight, ) -> Weight { - let mut used = Weight::new(); + let mut used = Weight::zero(); for (_sent_at, data) in iter { let id = sp_io::hashing::twox_64(&data[..]); let msg = VersionedXcm::::decode_all_with_depth_limit( @@ -144,7 +144,7 @@ impl DmpMessageHandler for LimitAndDropDmpExecution { iter: impl Iterator)>, limit: Weight, ) -> Weight { - let mut used = Weight::new(); + let mut used = Weight::zero(); for (_sent_at, data) in iter { let id = sp_io::hashing::twox_64(&data[..]); let msg = VersionedXcm::::decode_all_with_depth_limit( diff --git a/pallets/xcmp-queue/src/lib.rs b/pallets/xcmp-queue/src/lib.rs index 85e1ea7cfea..f19f40cb691 100644 --- a/pallets/xcmp-queue/src/lib.rs +++ b/pallets/xcmp-queue/src/lib.rs @@ -451,7 +451,7 @@ impl Default for QueueConfigData { resume_threshold: 1, threshold_weight: Weight::from_ref_time(100_000), weight_restrict_decay: Weight::from_ref_time(2), - xcmp_max_individual_weight: 20 * WEIGHT_PER_MILLIS, + xcmp_max_individual_weight: 20u64 * WEIGHT_PER_MILLIS, } } } @@ -795,8 +795,8 @@ impl Pallet { } = >::get(); let mut shuffled = Self::create_shuffle(status.len()); - let mut weight_used = Weight::new(); - let mut weight_available = Weight::new(); + let mut weight_used = Weight::zero(); + let mut weight_available = Weight::zero(); // We don't want the possibility of a chain sending a series of really heavy messages and // tying up the block's execution time from other chains. Therefore we execute any remaining diff --git a/pallets/xcmp-queue/src/migration.rs b/pallets/xcmp-queue/src/migration.rs index 77da447e8d1..bedd5ffd6ea 100644 --- a/pallets/xcmp-queue/src/migration.rs +++ b/pallets/xcmp-queue/src/migration.rs @@ -25,7 +25,7 @@ pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); /// Migrates the pallet storage to the most recent version, checking and setting the /// `StorageVersion`. pub fn migrate_to_latest() -> Weight { - let mut weight = Weight::new(); + let mut weight = Weight::zero(); if StorageVersion::get::>() == 0 { weight += migrate_to_v1::(); @@ -103,7 +103,7 @@ mod tests { drop_threshold: 12, resume_threshold: 3, threshold_weight: Weight::from_ref_time(333_333), - weight_restrict_decay: Weight::one(), + weight_restrict_decay: Weight::from_ref_time(1), }; new_test_ext().execute_with(|| { diff --git a/pallets/xcmp-queue/src/tests.rs b/pallets/xcmp-queue/src/tests.rs index de0ab7e6126..d3660ffe22b 100644 --- a/pallets/xcmp-queue/src/tests.rs +++ b/pallets/xcmp-queue/src/tests.rs @@ -225,17 +225,20 @@ fn update_weight_restrict_decay_works() { fn update_xcmp_max_individual_weight() { new_test_ext().execute_with(|| { let data: QueueConfigData = >::get(); - assert_eq!(data.xcmp_max_individual_weight, 20 * WEIGHT_PER_MILLIS); + assert_eq!(data.xcmp_max_individual_weight, 20u64 * WEIGHT_PER_MILLIS); assert_ok!(XcmpQueue::update_xcmp_max_individual_weight( Origin::root(), - 30 * WEIGHT_PER_MILLIS + 30u64 * WEIGHT_PER_MILLIS )); assert_noop!( - XcmpQueue::update_xcmp_max_individual_weight(Origin::signed(3), 10 * WEIGHT_PER_MILLIS), + XcmpQueue::update_xcmp_max_individual_weight( + Origin::signed(3), + 10u64 * WEIGHT_PER_MILLIS + ), BadOrigin ); let data: QueueConfigData = >::get(); - assert_eq!(data.xcmp_max_individual_weight, 30 * WEIGHT_PER_MILLIS); + assert_eq!(data.xcmp_max_individual_weight, 30u64 * WEIGHT_PER_MILLIS); }); } diff --git a/parachain-template/runtime/src/lib.rs b/parachain-template/runtime/src/lib.rs index d7a888a55c0..bd56bcac635 100644 --- a/parachain-template/runtime/src/lib.rs +++ b/parachain-template/runtime/src/lib.rs @@ -214,7 +214,7 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(5); const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for 0.5 of a second of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.scalar_div(2); +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2); /// The version information used to identify this runtime when compiled natively. #[cfg(feature = "std")] @@ -363,8 +363,8 @@ impl pallet_transaction_payment::Config for Runtime { } parameter_types! { - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); } impl cumulus_pallet_parachain_system::Config for Runtime { diff --git a/parachain-template/runtime/src/weights/block_weights.rs b/parachain-template/runtime/src/weights/block_weights.rs index c171a1fdd71..7d4a931bd12 100644 --- a/parachain-template/runtime/src/weights/block_weights.rs +++ b/parachain-template/runtime/src/weights/block_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(5_000_000); + pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(5_000_000); } #[cfg(test)] @@ -38,9 +38,12 @@ pub mod constants { let w = super::constants::BlockExecutionWeight::get(); // At least 100 µs. - assert!(w >= 100 * constants::WEIGHT_PER_MICROS, "Weight should be at least 100 µs."); + assert!( + w >= 100u64 * constants::WEIGHT_PER_MICROS, + "Weight should be at least 100 µs." + ); // At most 50 ms. - assert!(w <= 50 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); + assert!(w <= 50u64 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); } } } diff --git a/parachain-template/runtime/src/weights/extrinsic_weights.rs b/parachain-template/runtime/src/weights/extrinsic_weights.rs index 6e162888356..6c6b4a497d8 100644 --- a/parachain-template/runtime/src/weights/extrinsic_weights.rs +++ b/parachain-template/runtime/src/weights/extrinsic_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(125_000); + pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(125_000); } #[cfg(test)] @@ -38,7 +38,7 @@ pub mod constants { let w = super::constants::ExtrinsicBaseWeight::get(); // At least 10 µs. - assert!(w >= 10 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); + assert!(w >= 10u64 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); // At most 1 ms. assert!(w <= constants::WEIGHT_PER_MILLIS, "Weight should be at most 1 ms."); } diff --git a/parachains/common/src/lib.rs b/parachains/common/src/lib.rs index 61a511fb965..478e405e79d 100644 --- a/parachains/common/src/lib.rs +++ b/parachains/common/src/lib.rs @@ -92,7 +92,7 @@ mod constants { pub const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for 0.5 seconds of compute with a 6 second average block time. - pub const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.scalar_div(2); + pub const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2); } /// Opaque types. These are used by the CLI to instantiate machinery that don't need to know diff --git a/parachains/runtimes/assets/statemine/src/lib.rs b/parachains/runtimes/assets/statemine/src/lib.rs index ea77c717a12..ac03932a612 100644 --- a/parachains/runtimes/assets/statemine/src/lib.rs +++ b/parachains/runtimes/assets/statemine/src/lib.rs @@ -407,8 +407,8 @@ impl pallet_proxy::Config for Runtime { } parameter_types! { - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); } impl cumulus_pallet_parachain_system::Config for Runtime { diff --git a/parachains/runtimes/assets/statemine/src/weights/block_weights.rs b/parachains/runtimes/assets/statemine/src/weights/block_weights.rs index c171a1fdd71..7d4a931bd12 100644 --- a/parachains/runtimes/assets/statemine/src/weights/block_weights.rs +++ b/parachains/runtimes/assets/statemine/src/weights/block_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(5_000_000); + pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(5_000_000); } #[cfg(test)] @@ -38,9 +38,12 @@ pub mod constants { let w = super::constants::BlockExecutionWeight::get(); // At least 100 µs. - assert!(w >= 100 * constants::WEIGHT_PER_MICROS, "Weight should be at least 100 µs."); + assert!( + w >= 100u64 * constants::WEIGHT_PER_MICROS, + "Weight should be at least 100 µs." + ); // At most 50 ms. - assert!(w <= 50 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); + assert!(w <= 50u64 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); } } } diff --git a/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs b/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs index 6e162888356..6c6b4a497d8 100644 --- a/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(125_000); + pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(125_000); } #[cfg(test)] @@ -38,7 +38,7 @@ pub mod constants { let w = super::constants::ExtrinsicBaseWeight::get(); // At least 10 µs. - assert!(w >= 10 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); + assert!(w >= 10u64 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); // At most 1 ms. assert!(w <= constants::WEIGHT_PER_MILLIS, "Weight should be at most 1 ms."); } diff --git a/parachains/runtimes/assets/statemine/src/weights/frame_system.rs b/parachains/runtimes/assets/statemine/src/weights/frame_system.rs index 809da49b4ae..d67ab58fce5 100644 --- a/parachains/runtimes/assets/statemine/src/weights/frame_system.rs +++ b/parachains/runtimes/assets/statemine/src/weights/frame_system.rs @@ -54,7 +54,7 @@ impl frame_system::WeightInfo for WeightInfo { fn remark_with_event(b: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) @@ -68,7 +68,7 @@ impl frame_system::WeightInfo for WeightInfo { fn set_storage(i: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(622_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(622_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) @@ -76,7 +76,7 @@ impl frame_system::WeightInfo for WeightInfo { fn kill_storage(i: u32, ) -> Weight { Weight::from_ref_time(351_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(513_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(513_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) @@ -84,7 +84,7 @@ impl frame_system::WeightInfo for WeightInfo { fn kill_prefix(p: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(1_054_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_054_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(p as RefTimeWeight))) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs index fa7cc632645..ba8da59d550 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs @@ -69,11 +69,11 @@ impl pallet_assets::WeightInfo for WeightInfo { fn destroy(c: u32, s: u32, a: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 46_000 - .saturating_add(Weight::from_ref_time(16_382_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(16_382_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) // Standard Error: 46_000 - .saturating_add(Weight::from_ref_time(19_187_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(19_187_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 465_000 - .saturating_add(Weight::from_ref_time(16_818_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(16_818_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(s as RefTimeWeight))) diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs index aa51ad7e366..ecffa07fac8 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs @@ -52,7 +52,7 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn set_invulnerables(b: u32, ) -> Weight { Weight::from_ref_time(8_196_000 as RefTimeWeight) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(3_354_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_354_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(b as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -76,7 +76,7 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn register_as_candidate(c: u32, ) -> Weight { Weight::from_ref_time(55_660_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(103_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(103_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -86,7 +86,7 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn leave_intent(c: u32, ) -> Weight { Weight::from_ref_time(56_380_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(113_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(113_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -108,9 +108,9 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn new_session(r: u32, c: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 2_076_000 - .saturating_add(Weight::from_ref_time(10_780_000 as RefTimeWeight).scalar_saturating_mul(r as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(10_780_000 as RefTimeWeight).saturating_mul(r as RefTimeWeight)) // Standard Error: 2_076_000 - .saturating_add(Weight::from_ref_time(55_238_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(55_238_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs index b37819dfdcb..c490fd88dbe 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs @@ -50,7 +50,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_threshold_1(z: u32, ) -> Weight { Weight::from_ref_time(18_001_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) @@ -59,9 +59,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_create(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(35_223_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(118_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(118_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -73,9 +73,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_create_store(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(39_275_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(92_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(92_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -85,9 +85,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_approve(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(24_703_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(96_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(96_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -98,9 +98,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(38_375_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(100_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(100_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -112,9 +112,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_complete(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(46_964_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(143_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(143_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } @@ -124,7 +124,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn approve_as_multi_create(s: u32, ) -> Weight { Weight::from_ref_time(34_450_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -134,7 +134,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn approve_as_multi_approve(s: u32, ) -> Weight { Weight::from_ref_time(22_051_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -145,7 +145,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn approve_as_multi_complete(s: u32, ) -> Weight { Weight::from_ref_time(69_763_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(162_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(162_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } @@ -155,7 +155,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn cancel_as_multi(s: u32, ) -> Weight { Weight::from_ref_time(53_182_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(129_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(129_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs index 80b0e84de6f..ee440b25efc 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs @@ -51,7 +51,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn proxy(p: u32, ) -> Weight { Weight::from_ref_time(18_075_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(92_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(92_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:0) @@ -62,9 +62,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn proxy_announced(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(35_722_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(180_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(180_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -75,9 +75,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn remove_announcement(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(25_193_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(185_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(185_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(23_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(23_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -88,9 +88,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn reject_announcement(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(25_123_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(190_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(190_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(21_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(21_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -102,9 +102,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn announce(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(32_582_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(200_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(200_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(93_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(93_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -113,7 +113,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn add_proxy(p: u32, ) -> Weight { Weight::from_ref_time(28_173_000 as RefTimeWeight) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(112_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(112_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -122,7 +122,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn remove_proxy(p: u32, ) -> Weight { Weight::from_ref_time(28_247_000 as RefTimeWeight) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(118_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(118_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -131,7 +131,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn remove_proxies(p: u32, ) -> Weight { Weight::from_ref_time(23_821_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -141,7 +141,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn anonymous(p: u32, ) -> Weight { Weight::from_ref_time(31_472_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(21_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(21_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -150,7 +150,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn kill_anonymous(p: u32, ) -> Weight { Weight::from_ref_time(24_620_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs index ec0044fd371..64af724e634 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs @@ -79,11 +79,11 @@ impl pallet_uniques::WeightInfo for WeightInfo { fn destroy(n: u32, m: u32, a: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 17_000 - .saturating_add(Weight::from_ref_time(10_592_000 as RefTimeWeight).scalar_saturating_mul(n as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(10_592_000 as RefTimeWeight).saturating_mul(n as RefTimeWeight)) // Standard Error: 17_000 - .saturating_add(Weight::from_ref_time(1_658_000 as RefTimeWeight).scalar_saturating_mul(m as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_658_000 as RefTimeWeight).saturating_mul(m as RefTimeWeight)) // Standard Error: 17_000 - .saturating_add(Weight::from_ref_time(1_593_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_593_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(n as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) @@ -124,7 +124,7 @@ impl pallet_uniques::WeightInfo for WeightInfo { fn redeposit(i: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 15_000 - .saturating_add(Weight::from_ref_time(12_880_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(12_880_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs index 97ac89aee2e..fbe8faef7dd 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs @@ -50,7 +50,7 @@ impl pallet_utility::WeightInfo for WeightInfo { fn batch(c: u32, ) -> Weight { Weight::from_ref_time(22_923_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(3_526_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_526_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) } fn as_derivative() -> Weight { Weight::from_ref_time(5_220_000 as RefTimeWeight) @@ -59,7 +59,7 @@ impl pallet_utility::WeightInfo for WeightInfo { fn batch_all(c: u32, ) -> Weight { Weight::from_ref_time(20_953_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_698_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_698_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) } fn dispatch_as() -> Weight { Weight::from_ref_time(12_087_000 as RefTimeWeight) @@ -68,6 +68,6 @@ impl pallet_utility::WeightInfo for WeightInfo { fn force_batch(c: u32, ) -> Weight { Weight::from_ref_time(10_076_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_546_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_546_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs index 10d4e18902f..e52a0468098 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs @@ -37,8 +37,8 @@ impl WeighMultiAssets for MultiAssetFilter { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { let weight = match self { Self::Definite(assets) => - weight.scalar_saturating_mul(assets.inner().into_iter().count() as u64), - Self::Wild(_) => weight.scalar_saturating_mul(MAX_ASSETS as u64), + weight.saturating_mul(assets.inner().into_iter().count() as u64), + Self::Wild(_) => weight.saturating_mul(MAX_ASSETS as u64), }; weight.ref_time() } @@ -46,7 +46,7 @@ impl WeighMultiAssets for MultiAssetFilter { impl WeighMultiAssets for MultiAssets { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - weight.scalar_saturating_mul(self.inner().into_iter().count() as u64).ref_time() + weight.saturating_mul(self.inner().into_iter().count() as u64).ref_time() } } diff --git a/parachains/runtimes/assets/statemint/src/lib.rs b/parachains/runtimes/assets/statemint/src/lib.rs index d33edf7dbc7..67cb5a98330 100644 --- a/parachains/runtimes/assets/statemint/src/lib.rs +++ b/parachains/runtimes/assets/statemint/src/lib.rs @@ -437,8 +437,8 @@ impl pallet_proxy::Config for Runtime { } parameter_types! { - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); } impl cumulus_pallet_parachain_system::Config for Runtime { diff --git a/parachains/runtimes/assets/statemint/src/weights/block_weights.rs b/parachains/runtimes/assets/statemint/src/weights/block_weights.rs index c171a1fdd71..7d4a931bd12 100644 --- a/parachains/runtimes/assets/statemint/src/weights/block_weights.rs +++ b/parachains/runtimes/assets/statemint/src/weights/block_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(5_000_000); + pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(5_000_000); } #[cfg(test)] @@ -38,9 +38,12 @@ pub mod constants { let w = super::constants::BlockExecutionWeight::get(); // At least 100 µs. - assert!(w >= 100 * constants::WEIGHT_PER_MICROS, "Weight should be at least 100 µs."); + assert!( + w >= 100u64 * constants::WEIGHT_PER_MICROS, + "Weight should be at least 100 µs." + ); // At most 50 ms. - assert!(w <= 50 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); + assert!(w <= 50u64 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); } } } diff --git a/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs b/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs index 6e162888356..6c6b4a497d8 100644 --- a/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(125_000); + pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(125_000); } #[cfg(test)] @@ -38,7 +38,7 @@ pub mod constants { let w = super::constants::ExtrinsicBaseWeight::get(); // At least 10 µs. - assert!(w >= 10 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); + assert!(w >= 10u64 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); // At most 1 ms. assert!(w <= constants::WEIGHT_PER_MILLIS, "Weight should be at most 1 ms."); } diff --git a/parachains/runtimes/assets/statemint/src/weights/frame_system.rs b/parachains/runtimes/assets/statemint/src/weights/frame_system.rs index 3d338ac8360..9b702467502 100644 --- a/parachains/runtimes/assets/statemint/src/weights/frame_system.rs +++ b/parachains/runtimes/assets/statemint/src/weights/frame_system.rs @@ -54,7 +54,7 @@ impl frame_system::WeightInfo for WeightInfo { fn remark_with_event(b: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) @@ -68,7 +68,7 @@ impl frame_system::WeightInfo for WeightInfo { fn set_storage(i: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(626_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(626_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) @@ -76,7 +76,7 @@ impl frame_system::WeightInfo for WeightInfo { fn kill_storage(i: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(515_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(515_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) @@ -84,7 +84,7 @@ impl frame_system::WeightInfo for WeightInfo { fn kill_prefix(p: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(1_052_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_052_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(p as RefTimeWeight))) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs index d3aaeb66309..8718fa64c9e 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs @@ -69,11 +69,11 @@ impl pallet_assets::WeightInfo for WeightInfo { fn destroy(c: u32, s: u32, a: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 45_000 - .saturating_add(Weight::from_ref_time(15_904_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(15_904_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) // Standard Error: 45_000 - .saturating_add(Weight::from_ref_time(18_803_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(18_803_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 450_000 - .saturating_add(Weight::from_ref_time(17_017_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(17_017_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(s as RefTimeWeight))) @@ -167,9 +167,9 @@ impl pallet_assets::WeightInfo for WeightInfo { fn set_metadata(n: u32, s: u32, ) -> Weight { Weight::from_ref_time(31_324_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(n as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(n as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -187,7 +187,7 @@ impl pallet_assets::WeightInfo for WeightInfo { fn force_set_metadata(_n: u32, s: u32, ) -> Weight { Weight::from_ref_time(18_756_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs index e1f319163c7..ba677a4521d 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs @@ -52,7 +52,7 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn set_invulnerables(b: u32, ) -> Weight { Weight::from_ref_time(8_587_000 as RefTimeWeight) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(3_304_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_304_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(b as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -76,7 +76,7 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn register_as_candidate(c: u32, ) -> Weight { Weight::from_ref_time(60_984_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(89_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(89_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -86,7 +86,7 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn leave_intent(c: u32, ) -> Weight { Weight::from_ref_time(49_046_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(118_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(118_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -108,9 +108,9 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn new_session(r: u32, c: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_992_000 - .saturating_add(Weight::from_ref_time(10_521_000 as RefTimeWeight).scalar_saturating_mul(r as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(10_521_000 as RefTimeWeight).saturating_mul(r as RefTimeWeight)) // Standard Error: 1_992_000 - .saturating_add(Weight::from_ref_time(53_162_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(53_162_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs index b2c6c147508..8bd84edb8dd 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs @@ -50,7 +50,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_threshold_1(z: u32, ) -> Weight { Weight::from_ref_time(17_175_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) @@ -59,9 +59,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_create(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(35_937_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(97_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(97_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -73,9 +73,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_create_store(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(37_468_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(89_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(89_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -85,9 +85,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_approve(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(25_557_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(83_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(83_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -98,9 +98,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(38_127_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(88_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(88_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -112,9 +112,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_complete(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(47_383_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(127_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(127_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } @@ -124,7 +124,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn approve_as_multi_create(s: u32, ) -> Weight { Weight::from_ref_time(33_472_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(102_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(102_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -134,7 +134,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn approve_as_multi_approve(s: u32, ) -> Weight { Weight::from_ref_time(21_612_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(119_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(119_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -145,7 +145,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn approve_as_multi_complete(s: u32, ) -> Weight { Weight::from_ref_time(68_168_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(157_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(157_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } @@ -155,7 +155,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn cancel_as_multi(s: u32, ) -> Weight { Weight::from_ref_time(52_748_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs index 3591374e04e..7def013522c 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs @@ -51,7 +51,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn proxy(p: u32, ) -> Weight { Weight::from_ref_time(17_582_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(77_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(77_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:0) @@ -62,9 +62,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn proxy_announced(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(34_603_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(169_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(169_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(87_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(87_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -75,9 +75,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn remove_announcement(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(24_496_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(179_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(179_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(25_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(25_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -88,9 +88,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn reject_announcement(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(24_237_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(181_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(181_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(29_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(29_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -102,9 +102,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn announce(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(32_065_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(166_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(166_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(91_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(91_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -113,7 +113,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn add_proxy(p: u32, ) -> Weight { Weight::from_ref_time(27_168_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -122,7 +122,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn remove_proxy(p: u32, ) -> Weight { Weight::from_ref_time(27_233_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(121_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(121_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -131,7 +131,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn remove_proxies(p: u32, ) -> Weight { Weight::from_ref_time(23_010_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(95_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(95_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -141,7 +141,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn anonymous(p: u32, ) -> Weight { Weight::from_ref_time(30_378_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(16_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(16_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -150,7 +150,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn kill_anonymous(p: u32, ) -> Weight { Weight::from_ref_time(23_977_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(76_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(76_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs index e25c16b6a34..3e59ddb6bf8 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs @@ -79,11 +79,11 @@ impl pallet_uniques::WeightInfo for WeightInfo { fn destroy(n: u32, m: u32, a: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(10_919_000 as RefTimeWeight).scalar_saturating_mul(n as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(10_919_000 as RefTimeWeight).saturating_mul(n as RefTimeWeight)) // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(1_679_000 as RefTimeWeight).scalar_saturating_mul(m as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_679_000 as RefTimeWeight).saturating_mul(m as RefTimeWeight)) // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(1_463_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_463_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(n as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) @@ -124,7 +124,7 @@ impl pallet_uniques::WeightInfo for WeightInfo { fn redeposit(i: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 15_000 - .saturating_add(Weight::from_ref_time(12_745_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(12_745_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs index e462d30217a..b388ff4a518 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs @@ -50,7 +50,7 @@ impl pallet_utility::WeightInfo for WeightInfo { fn batch(c: u32, ) -> Weight { Weight::from_ref_time(30_959_000 as RefTimeWeight) // Standard Error: 6_000 - .saturating_add(Weight::from_ref_time(3_220_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_220_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) } fn as_derivative() -> Weight { Weight::from_ref_time(4_732_000 as RefTimeWeight) @@ -59,7 +59,7 @@ impl pallet_utility::WeightInfo for WeightInfo { fn batch_all(c: u32, ) -> Weight { Weight::from_ref_time(16_465_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_364_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_364_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) } fn dispatch_as() -> Weight { Weight::from_ref_time(11_903_000 as RefTimeWeight) @@ -68,6 +68,6 @@ impl pallet_utility::WeightInfo for WeightInfo { fn force_batch(c: u32, ) -> Weight { Weight::from_ref_time(22_621_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(3_147_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_147_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs index 438b1742e1f..ad9123676b8 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs @@ -37,8 +37,8 @@ impl WeighMultiAssets for MultiAssetFilter { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { let weight = match self { Self::Definite(assets) => - weight.scalar_saturating_mul(assets.inner().into_iter().count() as u64), - Self::Wild(_) => weight.scalar_saturating_mul(MAX_ASSETS as u64), + weight.saturating_mul(assets.inner().into_iter().count() as u64), + Self::Wild(_) => weight.saturating_mul(MAX_ASSETS as u64), }; weight.ref_time() } @@ -46,7 +46,7 @@ impl WeighMultiAssets for MultiAssetFilter { impl WeighMultiAssets for MultiAssets { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - weight.scalar_saturating_mul(self.inner().into_iter().count() as u64).ref_time() + weight.saturating_mul(self.inner().into_iter().count() as u64).ref_time() } } diff --git a/parachains/runtimes/assets/westmint/src/lib.rs b/parachains/runtimes/assets/westmint/src/lib.rs index 19d0f3135cc..9e882809fe6 100644 --- a/parachains/runtimes/assets/westmint/src/lib.rs +++ b/parachains/runtimes/assets/westmint/src/lib.rs @@ -402,8 +402,8 @@ impl pallet_proxy::Config for Runtime { } parameter_types! { - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); } impl cumulus_pallet_parachain_system::Config for Runtime { diff --git a/parachains/runtimes/assets/westmint/src/weights/block_weights.rs b/parachains/runtimes/assets/westmint/src/weights/block_weights.rs index c171a1fdd71..7d4a931bd12 100644 --- a/parachains/runtimes/assets/westmint/src/weights/block_weights.rs +++ b/parachains/runtimes/assets/westmint/src/weights/block_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(5_000_000); + pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(5_000_000); } #[cfg(test)] @@ -38,9 +38,12 @@ pub mod constants { let w = super::constants::BlockExecutionWeight::get(); // At least 100 µs. - assert!(w >= 100 * constants::WEIGHT_PER_MICROS, "Weight should be at least 100 µs."); + assert!( + w >= 100u64 * constants::WEIGHT_PER_MICROS, + "Weight should be at least 100 µs." + ); // At most 50 ms. - assert!(w <= 50 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); + assert!(w <= 50u64 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); } } } diff --git a/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs b/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs index 6e162888356..6c6b4a497d8 100644 --- a/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(125_000); + pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(125_000); } #[cfg(test)] @@ -38,7 +38,7 @@ pub mod constants { let w = super::constants::ExtrinsicBaseWeight::get(); // At least 10 µs. - assert!(w >= 10 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); + assert!(w >= 10u64 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); // At most 1 ms. assert!(w <= constants::WEIGHT_PER_MILLIS, "Weight should be at most 1 ms."); } diff --git a/parachains/runtimes/assets/westmint/src/weights/frame_system.rs b/parachains/runtimes/assets/westmint/src/weights/frame_system.rs index be46954f69c..b659f0a52f3 100644 --- a/parachains/runtimes/assets/westmint/src/weights/frame_system.rs +++ b/parachains/runtimes/assets/westmint/src/weights/frame_system.rs @@ -54,7 +54,7 @@ impl frame_system::WeightInfo for WeightInfo { fn remark_with_event(b: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) @@ -68,7 +68,7 @@ impl frame_system::WeightInfo for WeightInfo { fn set_storage(i: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(616_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(616_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) @@ -76,7 +76,7 @@ impl frame_system::WeightInfo for WeightInfo { fn kill_storage(i: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(519_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(519_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) @@ -84,7 +84,7 @@ impl frame_system::WeightInfo for WeightInfo { fn kill_prefix(p: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(1_067_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_067_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(p as RefTimeWeight))) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs index 14f311be36f..49edfdfd0e0 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs @@ -69,11 +69,11 @@ impl pallet_assets::WeightInfo for WeightInfo { fn destroy(c: u32, s: u32, a: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 46_000 - .saturating_add(Weight::from_ref_time(16_133_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(16_133_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) // Standard Error: 46_000 - .saturating_add(Weight::from_ref_time(18_915_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(18_915_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 464_000 - .saturating_add(Weight::from_ref_time(16_795_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(16_795_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(s as RefTimeWeight))) @@ -167,7 +167,7 @@ impl pallet_assets::WeightInfo for WeightInfo { fn set_metadata(_n: u32, s: u32, ) -> Weight { Weight::from_ref_time(31_757_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -185,7 +185,7 @@ impl pallet_assets::WeightInfo for WeightInfo { fn force_set_metadata(_n: u32, s: u32, ) -> Weight { Weight::from_ref_time(18_566_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs index 6bee9003f9f..240ec68e019 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs @@ -52,7 +52,7 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn set_invulnerables(b: u32, ) -> Weight { Weight::from_ref_time(6_669_000 as RefTimeWeight) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(3_218_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_218_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(b as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -76,7 +76,7 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn register_as_candidate(c: u32, ) -> Weight { Weight::from_ref_time(55_542_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(92_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(92_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -86,7 +86,7 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn leave_intent(c: u32, ) -> Weight { Weight::from_ref_time(52_080_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -108,9 +108,9 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn new_session(r: u32, c: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_895_000 - .saturating_add(Weight::from_ref_time(9_941_000 as RefTimeWeight).scalar_saturating_mul(r as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(9_941_000 as RefTimeWeight).saturating_mul(r as RefTimeWeight)) // Standard Error: 1_895_000 - .saturating_add(Weight::from_ref_time(50_628_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(50_628_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs index ab8bf52813d..3d8474e18e1 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs @@ -50,7 +50,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_threshold_1(z: u32, ) -> Weight { Weight::from_ref_time(17_854_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) @@ -59,9 +59,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_create(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(36_613_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(96_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(96_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -73,9 +73,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_create_store(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(40_039_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(72_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(72_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -85,9 +85,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_approve(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(26_059_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(82_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(82_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -98,9 +98,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(38_292_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(90_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(90_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -112,9 +112,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_complete(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(47_468_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(129_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(129_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } @@ -124,7 +124,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn approve_as_multi_create(s: u32, ) -> Weight { Weight::from_ref_time(33_492_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(110_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(110_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -134,7 +134,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn approve_as_multi_approve(s: u32, ) -> Weight { Weight::from_ref_time(22_147_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(113_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(113_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -145,7 +145,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn approve_as_multi_complete(s: u32, ) -> Weight { Weight::from_ref_time(66_106_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(161_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(161_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } @@ -155,7 +155,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn cancel_as_multi(s: u32, ) -> Weight { Weight::from_ref_time(52_566_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs index 4268eb2f1ba..1bd7ce2b45b 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs @@ -51,7 +51,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn proxy(p: u32, ) -> Weight { Weight::from_ref_time(18_084_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(83_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(83_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:0) @@ -62,9 +62,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn proxy_announced(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(35_619_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(172_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(172_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(89_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(89_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -75,9 +75,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn remove_announcement(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(24_774_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(190_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(190_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(33_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(33_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -88,9 +88,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn reject_announcement(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(25_855_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(160_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(160_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(15_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(15_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -102,9 +102,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn announce(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(32_874_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(172_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(172_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(97_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(97_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -113,7 +113,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn add_proxy(p: u32, ) -> Weight { Weight::from_ref_time(28_312_000 as RefTimeWeight) // Standard Error: 4_000 - .saturating_add(Weight::from_ref_time(105_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(105_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -122,7 +122,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn remove_proxy(p: u32, ) -> Weight { Weight::from_ref_time(28_197_000 as RefTimeWeight) // Standard Error: 4_000 - .saturating_add(Weight::from_ref_time(121_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(121_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -131,7 +131,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn remove_proxies(p: u32, ) -> Weight { Weight::from_ref_time(23_659_000 as RefTimeWeight) // Standard Error: 8_000 - .saturating_add(Weight::from_ref_time(106_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(106_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -141,7 +141,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn anonymous(p: u32, ) -> Weight { Weight::from_ref_time(31_575_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(35_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(35_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -150,7 +150,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn kill_anonymous(p: u32, ) -> Weight { Weight::from_ref_time(24_640_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(80_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(80_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs index 031dd20d1c1..365e23a8e98 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs @@ -79,11 +79,11 @@ impl pallet_uniques::WeightInfo for WeightInfo { fn destroy(n: u32, m: u32, a: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(10_956_000 as RefTimeWeight).scalar_saturating_mul(n as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(10_956_000 as RefTimeWeight).saturating_mul(n as RefTimeWeight)) // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(1_654_000 as RefTimeWeight).scalar_saturating_mul(m as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_654_000 as RefTimeWeight).saturating_mul(m as RefTimeWeight)) // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(1_572_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_572_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(n as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) @@ -124,7 +124,7 @@ impl pallet_uniques::WeightInfo for WeightInfo { fn redeposit(i: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 16_000 - .saturating_add(Weight::from_ref_time(12_715_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(12_715_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs index 204fb572d9a..49970ae17e4 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs @@ -50,7 +50,7 @@ impl pallet_utility::WeightInfo for WeightInfo { fn batch(c: u32, ) -> Weight { Weight::from_ref_time(14_433_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_315_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_315_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) } fn as_derivative() -> Weight { Weight::from_ref_time(5_234_000 as RefTimeWeight) @@ -59,7 +59,7 @@ impl pallet_utility::WeightInfo for WeightInfo { fn batch_all(c: u32, ) -> Weight { Weight::from_ref_time(16_023_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_466_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_466_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) } fn dispatch_as() -> Weight { Weight::from_ref_time(12_588_000 as RefTimeWeight) @@ -68,6 +68,6 @@ impl pallet_utility::WeightInfo for WeightInfo { fn force_batch(c: u32, ) -> Weight { Weight::from_ref_time(16_094_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_280_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_280_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs index 2254b4e66cd..52f643d8f5e 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs @@ -37,8 +37,8 @@ impl WeighMultiAssets for MultiAssetFilter { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { let weight = match self { Self::Definite(assets) => - weight.scalar_saturating_mul(assets.inner().into_iter().count() as u64), - Self::Wild(_) => weight.scalar_saturating_mul(MAX_ASSETS as u64), + weight.saturating_mul(assets.inner().into_iter().count() as u64), + Self::Wild(_) => weight.saturating_mul(MAX_ASSETS as u64), }; weight.ref_time() } @@ -46,7 +46,7 @@ impl WeighMultiAssets for MultiAssetFilter { impl WeighMultiAssets for MultiAssets { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - weight.scalar_saturating_mul(self.inner().into_iter().count() as u64).ref_time() + weight.saturating_mul(self.inner().into_iter().count() as u64).ref_time() } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs index 85a1ad72a59..4343e36718b 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs @@ -338,8 +338,8 @@ impl pallet_proxy::Config for Runtime { } parameter_types! { - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); } impl cumulus_pallet_parachain_system::Config for Runtime { diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs index c171a1fdd71..7d4a931bd12 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(5_000_000); + pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(5_000_000); } #[cfg(test)] @@ -38,9 +38,12 @@ pub mod constants { let w = super::constants::BlockExecutionWeight::get(); // At least 100 µs. - assert!(w >= 100 * constants::WEIGHT_PER_MICROS, "Weight should be at least 100 µs."); + assert!( + w >= 100u64 * constants::WEIGHT_PER_MICROS, + "Weight should be at least 100 µs." + ); // At most 50 ms. - assert!(w <= 50 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); + assert!(w <= 50u64 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); } } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs index 6e162888356..6c6b4a497d8 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(125_000); + pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(125_000); } #[cfg(test)] @@ -38,7 +38,7 @@ pub mod constants { let w = super::constants::ExtrinsicBaseWeight::get(); // At least 10 µs. - assert!(w >= 10 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); + assert!(w >= 10u64 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); // At most 1 ms. assert!(w <= constants::WEIGHT_PER_MILLIS, "Weight should be at most 1 ms."); } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs index 2611ff4c722..cbb817875e4 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs @@ -54,7 +54,7 @@ impl frame_system::WeightInfo for WeightInfo { fn remark_with_event(b: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) @@ -68,7 +68,7 @@ impl frame_system::WeightInfo for WeightInfo { fn set_storage(i: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(624_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(624_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) @@ -76,7 +76,7 @@ impl frame_system::WeightInfo for WeightInfo { fn kill_storage(i: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(530_000 as RefTimeWeight).scalar_saturating_mul(i as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(530_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) } // Storage: Skipped Metadata (r:0 w:0) @@ -84,7 +84,7 @@ impl frame_system::WeightInfo for WeightInfo { fn kill_prefix(p: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(1_059_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_059_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(p as RefTimeWeight))) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs index ecbda4eb2f6..c31d53eec27 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs @@ -58,7 +58,7 @@ impl pallet_alliance::WeightInfo for WeightInfo { fn propose_proposed(_b: u32, _x: u32, _y: u32, p: u32, ) -> Weight { Weight::from_ref_time(53_023_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(132_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(132_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } @@ -69,9 +69,9 @@ impl pallet_alliance::WeightInfo for WeightInfo { fn vote(x: u32, y: u32, ) -> Weight { Weight::from_ref_time(33_003_000 as RefTimeWeight) // Standard Error: 106_000 - .saturating_add(Weight::from_ref_time(312_000 as RefTimeWeight).scalar_saturating_mul(x as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(312_000 as RefTimeWeight).saturating_mul(x as RefTimeWeight)) // Standard Error: 4_000 - .saturating_add(Weight::from_ref_time(82_000 as RefTimeWeight).scalar_saturating_mul(y as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(82_000 as RefTimeWeight).saturating_mul(y as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -83,7 +83,7 @@ impl pallet_alliance::WeightInfo for WeightInfo { fn veto(p: u32, ) -> Weight { Weight::from_ref_time(27_289_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(131_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(131_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } @@ -98,11 +98,11 @@ impl pallet_alliance::WeightInfo for WeightInfo { fn close_early_disapproved(x: u32, y: u32, p: u32, ) -> Weight { Weight::from_ref_time(31_884_000 as RefTimeWeight) // Standard Error: 72_000 - .saturating_add(Weight::from_ref_time(358_000 as RefTimeWeight).scalar_saturating_mul(x as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(358_000 as RefTimeWeight).saturating_mul(x as RefTimeWeight)) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).scalar_saturating_mul(y as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).saturating_mul(y as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } @@ -118,13 +118,13 @@ impl pallet_alliance::WeightInfo for WeightInfo { fn close_early_approved(b: u32, x: u32, y: u32, p: u32, ) -> Weight { Weight::from_ref_time(43_205_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) // Standard Error: 73_000 - .saturating_add(Weight::from_ref_time(123_000 as RefTimeWeight).scalar_saturating_mul(x as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(123_000 as RefTimeWeight).saturating_mul(x as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(91_000 as RefTimeWeight).scalar_saturating_mul(y as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(91_000 as RefTimeWeight).saturating_mul(y as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(114_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(114_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } @@ -141,11 +141,11 @@ impl pallet_alliance::WeightInfo for WeightInfo { fn close_disapproved(x: u32, y: u32, p: u32, ) -> Weight { Weight::from_ref_time(49_769_000 as RefTimeWeight) // Standard Error: 69_000 - .saturating_add(Weight::from_ref_time(352_000 as RefTimeWeight).scalar_saturating_mul(x as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(352_000 as RefTimeWeight).saturating_mul(x as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(81_000 as RefTimeWeight).scalar_saturating_mul(y as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(81_000 as RefTimeWeight).saturating_mul(y as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(100_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(100_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } @@ -162,11 +162,11 @@ impl pallet_alliance::WeightInfo for WeightInfo { fn close_approved(b: u32, _x: u32, y: u32, p: u32, ) -> Weight { Weight::from_ref_time(40_901_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(79_000 as RefTimeWeight).scalar_saturating_mul(y as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(79_000 as RefTimeWeight).saturating_mul(y as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(102_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(102_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } @@ -178,9 +178,9 @@ impl pallet_alliance::WeightInfo for WeightInfo { fn init_members(_x: u32, y: u32, z: u32, ) -> Weight { Weight::from_ref_time(39_647_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(123_000 as RefTimeWeight).scalar_saturating_mul(y as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(123_000 as RefTimeWeight).saturating_mul(y as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(116_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(116_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) } @@ -257,9 +257,9 @@ impl pallet_alliance::WeightInfo for WeightInfo { fn add_unscrupulous_items(n: u32, l: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(1_300_000 as RefTimeWeight).scalar_saturating_mul(n as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_300_000 as RefTimeWeight).saturating_mul(n as RefTimeWeight)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(125_000 as RefTimeWeight).scalar_saturating_mul(l as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(125_000 as RefTimeWeight).saturating_mul(l as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -270,9 +270,9 @@ impl pallet_alliance::WeightInfo for WeightInfo { fn remove_unscrupulous_items(n: u32, l: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 197_000 - .saturating_add(Weight::from_ref_time(34_156_000 as RefTimeWeight).scalar_saturating_mul(n as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(34_156_000 as RefTimeWeight).saturating_mul(n as RefTimeWeight)) // Standard Error: 87_000 - .saturating_add(Weight::from_ref_time(7_042_000 as RefTimeWeight).scalar_saturating_mul(l as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(7_042_000 as RefTimeWeight).saturating_mul(l as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs index 251d664e393..0b11b4e86ad 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs @@ -52,7 +52,7 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn set_invulnerables(b: u32, ) -> Weight { Weight::from_ref_time(7_128_000 as RefTimeWeight) // Standard Error: 4_000 - .saturating_add(Weight::from_ref_time(3_105_000 as RefTimeWeight).scalar_saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_105_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(b as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -76,7 +76,7 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn register_as_candidate(c: u32, ) -> Weight { Weight::from_ref_time(56_086_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(93_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(93_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -86,7 +86,7 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn leave_intent(c: u32, ) -> Weight { Weight::from_ref_time(58_436_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(102_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(102_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -108,9 +108,9 @@ impl pallet_collator_selection::WeightInfo for WeightIn fn new_session(r: u32, c: u32, ) -> Weight { Weight::from_ref_time(0 as RefTimeWeight) // Standard Error: 1_911_000 - .saturating_add(Weight::from_ref_time(9_907_000 as RefTimeWeight).scalar_saturating_mul(r as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(9_907_000 as RefTimeWeight).saturating_mul(r as RefTimeWeight)) // Standard Error: 1_911_000 - .saturating_add(Weight::from_ref_time(50_916_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(50_916_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight))) .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs index 9ab03863a00..2da4037684b 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs @@ -50,7 +50,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_threshold_1(z: u32, ) -> Weight { Weight::from_ref_time(17_905_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) @@ -59,9 +59,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_create(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(34_787_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(105_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(105_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -73,9 +73,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_create_store(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(38_845_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(75_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(75_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -85,9 +85,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_approve(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(25_600_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(76_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(76_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -98,9 +98,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(36_944_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(95_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(95_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -112,9 +112,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn as_multi_complete(s: u32, z: u32, ) -> Weight { Weight::from_ref_time(46_014_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(126_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(126_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).scalar_saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } @@ -124,7 +124,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn approve_as_multi_create(s: u32, ) -> Weight { Weight::from_ref_time(31_616_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -134,7 +134,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn approve_as_multi_approve(s: u32, ) -> Weight { Weight::from_ref_time(20_862_000 as RefTimeWeight) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -145,7 +145,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn approve_as_multi_complete(s: u32, ) -> Weight { Weight::from_ref_time(64_311_000 as RefTimeWeight) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(164_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(164_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) } @@ -155,7 +155,7 @@ impl pallet_multisig::WeightInfo for WeightInfo { fn cancel_as_multi(s: u32, ) -> Weight { Weight::from_ref_time(51_181_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(110_000 as RefTimeWeight).scalar_saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(110_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs index 79afbf6a128..534a8d1a0a6 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs @@ -51,7 +51,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn proxy(p: u32, ) -> Weight { Weight::from_ref_time(16_628_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(90_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(90_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) } // Storage: Proxy Proxies (r:1 w:0) @@ -62,9 +62,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn proxy_announced(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(33_846_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(175_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(175_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(88_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(88_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -75,9 +75,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn remove_announcement(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(23_633_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(184_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(184_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(29_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(29_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -88,9 +88,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn reject_announcement(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(24_121_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(177_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(177_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(15_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(15_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -102,9 +102,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn announce(a: u32, p: u32, ) -> Weight { Weight::from_ref_time(31_509_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(172_000 as RefTimeWeight).scalar_saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(172_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(86_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(86_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) } @@ -113,7 +113,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn add_proxy(p: u32, ) -> Weight { Weight::from_ref_time(26_168_000 as RefTimeWeight) // Standard Error: 4_000 - .saturating_add(Weight::from_ref_time(127_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(127_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -122,7 +122,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn remove_proxy(p: u32, ) -> Weight { Weight::from_ref_time(26_306_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(131_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(131_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -131,7 +131,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn remove_proxies(p: u32, ) -> Weight { Weight::from_ref_time(22_287_000 as RefTimeWeight) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -141,7 +141,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn anonymous(p: u32, ) -> Weight { Weight::from_ref_time(29_260_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(38_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(38_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } @@ -150,7 +150,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { fn kill_anonymous(p: u32, ) -> Weight { Weight::from_ref_time(23_012_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(97_000 as RefTimeWeight).scalar_saturating_mul(p as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(97_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs index 5e57bdda111..1c5457a67b2 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs @@ -50,7 +50,7 @@ impl pallet_utility::WeightInfo for WeightInfo { fn batch(c: u32, ) -> Weight { Weight::from_ref_time(13_398_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_159_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_159_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) } fn as_derivative() -> Weight { Weight::from_ref_time(4_668_000 as RefTimeWeight) @@ -59,7 +59,7 @@ impl pallet_utility::WeightInfo for WeightInfo { fn batch_all(c: u32, ) -> Weight { Weight::from_ref_time(10_742_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_375_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_375_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) } fn dispatch_as() -> Weight { Weight::from_ref_time(11_022_000 as RefTimeWeight) @@ -68,6 +68,6 @@ impl pallet_utility::WeightInfo for WeightInfo { fn force_batch(c: u32, ) -> Weight { Weight::from_ref_time(14_280_000 as RefTimeWeight) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_150_000 as RefTimeWeight).scalar_saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_150_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) } } diff --git a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index b8849fa6f65..464272ef9ff 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -243,8 +243,8 @@ impl pallet_utility::Config for Runtime { } parameter_types! { - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); } impl cumulus_pallet_parachain_system::Config for Runtime { diff --git a/parachains/runtimes/contracts/contracts-rococo/src/weights/block_weights.rs b/parachains/runtimes/contracts/contracts-rococo/src/weights/block_weights.rs index c171a1fdd71..7d4a931bd12 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/weights/block_weights.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/weights/block_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(5_000_000); + pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(5_000_000); } #[cfg(test)] @@ -38,9 +38,12 @@ pub mod constants { let w = super::constants::BlockExecutionWeight::get(); // At least 100 µs. - assert!(w >= 100 * constants::WEIGHT_PER_MICROS, "Weight should be at least 100 µs."); + assert!( + w >= 100u64 * constants::WEIGHT_PER_MICROS, + "Weight should be at least 100 µs." + ); // At most 50 ms. - assert!(w <= 50 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); + assert!(w <= 50u64 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); } } } diff --git a/parachains/runtimes/contracts/contracts-rococo/src/weights/extrinsic_weights.rs b/parachains/runtimes/contracts/contracts-rococo/src/weights/extrinsic_weights.rs index 6e162888356..6c6b4a497d8 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/weights/extrinsic_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(125_000); + pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(125_000); } #[cfg(test)] @@ -38,7 +38,7 @@ pub mod constants { let w = super::constants::ExtrinsicBaseWeight::get(); // At least 10 µs. - assert!(w >= 10 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); + assert!(w >= 10u64 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); // At most 1 ms. assert!(w <= constants::WEIGHT_PER_MILLIS, "Weight should be at most 1 ms."); } diff --git a/parachains/runtimes/starters/seedling/src/lib.rs b/parachains/runtimes/starters/seedling/src/lib.rs index b0499882ec6..c1c26a32ed6 100644 --- a/parachains/runtimes/starters/seedling/src/lib.rs +++ b/parachains/runtimes/starters/seedling/src/lib.rs @@ -83,7 +83,7 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.scalar_div(2); +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2); parameter_types! { pub const BlockHashCount: BlockNumber = 250; diff --git a/parachains/runtimes/starters/shell/src/lib.rs b/parachains/runtimes/starters/shell/src/lib.rs index 7e82fa37e76..31a95e20d95 100644 --- a/parachains/runtimes/starters/shell/src/lib.rs +++ b/parachains/runtimes/starters/shell/src/lib.rs @@ -90,7 +90,7 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.scalar_div(2); +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2); parameter_types! { pub const BlockHashCount: BlockNumber = 250; @@ -160,7 +160,7 @@ impl frame_system::Config for Runtime { parameter_types! { // We do anything the parent chain tells us in this runtime. - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(2); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(2); } impl cumulus_pallet_parachain_system::Config for Runtime { diff --git a/parachains/runtimes/testing/penpal/src/lib.rs b/parachains/runtimes/testing/penpal/src/lib.rs index 528c1fa01de..4789e1240c4 100644 --- a/parachains/runtimes/testing/penpal/src/lib.rs +++ b/parachains/runtimes/testing/penpal/src/lib.rs @@ -227,7 +227,7 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(5); const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for 0.5 of a second of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.scalar_div(2); +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2); /// The version information used to identify this runtime when compiled natively. #[cfg(feature = "std")] @@ -406,8 +406,8 @@ impl pallet_assets::Config for Runtime { } parameter_types! { - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); } impl cumulus_pallet_parachain_system::Config for Runtime { diff --git a/parachains/runtimes/testing/penpal/src/weights/block_weights.rs b/parachains/runtimes/testing/penpal/src/weights/block_weights.rs index c171a1fdd71..7d4a931bd12 100644 --- a/parachains/runtimes/testing/penpal/src/weights/block_weights.rs +++ b/parachains/runtimes/testing/penpal/src/weights/block_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Importing a block with 0 Extrinsics. - pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(5_000_000); + pub const BlockExecutionWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(5_000_000); } #[cfg(test)] @@ -38,9 +38,12 @@ pub mod constants { let w = super::constants::BlockExecutionWeight::get(); // At least 100 µs. - assert!(w >= 100 * constants::WEIGHT_PER_MICROS, "Weight should be at least 100 µs."); + assert!( + w >= 100u64 * constants::WEIGHT_PER_MICROS, + "Weight should be at least 100 µs." + ); // At most 50 ms. - assert!(w <= 50 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); + assert!(w <= 50u64 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); } } } diff --git a/parachains/runtimes/testing/penpal/src/weights/extrinsic_weights.rs b/parachains/runtimes/testing/penpal/src/weights/extrinsic_weights.rs index 6e162888356..6c6b4a497d8 100644 --- a/parachains/runtimes/testing/penpal/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/testing/penpal/src/weights/extrinsic_weights.rs @@ -23,7 +23,7 @@ pub mod constants { parameter_types! { /// Executing a NO-OP `System::remarks` Extrinsic. - pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.scalar_saturating_mul(125_000); + pub const ExtrinsicBaseWeight: Weight = constants::WEIGHT_PER_NANOS.saturating_mul(125_000); } #[cfg(test)] @@ -38,7 +38,7 @@ pub mod constants { let w = super::constants::ExtrinsicBaseWeight::get(); // At least 10 µs. - assert!(w >= 10 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); + assert!(w >= 10u64 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); // At most 1 ms. assert!(w <= constants::WEIGHT_PER_MILLIS, "Weight should be at most 1 ms."); } diff --git a/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/parachains/runtimes/testing/rococo-parachain/src/lib.rs index f0729485f51..3515e320308 100644 --- a/parachains/runtimes/testing/rococo-parachain/src/lib.rs +++ b/parachains/runtimes/testing/rococo-parachain/src/lib.rs @@ -132,7 +132,7 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.scalar_div(2); +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2); parameter_types! { pub const BlockHashCount: BlockNumber = 250; @@ -254,8 +254,8 @@ impl pallet_sudo::Config for Runtime { } parameter_types! { - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.scalar_div(4); + pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); + pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); } impl cumulus_pallet_parachain_system::Config for Runtime { diff --git a/templates/xcm-bench-template.hbs b/templates/xcm-bench-template.hbs index 31cfef0d93e..f7faa6e8f26 100644 --- a/templates/xcm-bench-template.hbs +++ b/templates/xcm-bench-template.hbs @@ -49,19 +49,19 @@ impl WeightInfo { Weight::from_ref_time({{underscore benchmark.base_weight}} as RefTimeWeight) {{#each benchmark.component_weight as |cw|}} // Standard Error: {{underscore cw.error}} - .saturating_add(Weight::from_ref_time({{underscore cw.slope}}).scalar_saturating_mul({{cw.name}} as RefTimeWeight)) + .saturating_add(Weight::from_ref_time({{underscore cw.slope}}).saturating_mul({{cw.name}} as RefTimeWeight)) {{/each}} {{#if (ne benchmark.base_reads "0")}} .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}} as RefTimeWeight)) {{/if}} {{#each benchmark.component_reads as |cr|}} - .saturating_add(T::DbWeight::get().reads(({{cr.slope}} as RefTimeWeight).scalar_saturating_mul({{cr.name}} as RefTimeWeight))) + .saturating_add(T::DbWeight::get().reads(({{cr.slope}} as RefTimeWeight).saturating_mul({{cr.name}} as RefTimeWeight))) {{/each}} {{#if (ne benchmark.base_writes "0")}} .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}} as RefTimeWeight)) {{/if}} {{#each benchmark.component_writes as |cw|}} - .saturating_add(T::DbWeight::get().writes(({{cw.slope}} as RefTimeWeight).scalar_saturating_mul({{cw.name}} as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes(({{cw.slope}} as RefTimeWeight).saturating_mul({{cw.name}} as RefTimeWeight))) {{/each}} } {{/each}} diff --git a/test/runtime/src/lib.rs b/test/runtime/src/lib.rs index 7feb25aa26a..225b874f363 100644 --- a/test/runtime/src/lib.rs +++ b/test/runtime/src/lib.rs @@ -138,7 +138,7 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.scalar_div(2); +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2); parameter_types! { pub const BlockHashCount: BlockNumber = 250; @@ -348,7 +348,7 @@ pub struct TestOnRuntimeUpgrade; impl OnRuntimeUpgrade for TestOnRuntimeUpgrade { fn on_runtime_upgrade() -> frame_support::weights::Weight { assert_eq!(sp_io::storage::get(TEST_RUNTIME_UPGRADE_KEY), Some(vec![1, 2, 3, 4].into())); - Weight::one() + Weight::from_ref_time(1) } } From 2b9816ec418638eef563ab7c5f51e63daec43e2c Mon Sep 17 00:00:00 2001 From: Squirrel Date: Fri, 2 Sep 2022 10:17:43 +0100 Subject: [PATCH 034/148] 9270 Backport of Align versions for runtimes (#1517) (#1574) * Align versions for runtimes (#1517) * update cargo lock Co-authored-by: Branislav Kontur --- Cargo.lock | 2 +- parachains/runtimes/testing/penpal/Cargo.toml | 2 +- parachains/runtimes/testing/penpal/src/lib.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bf7a1e5c2f6..fd999311373 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6813,7 +6813,7 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "penpal-runtime" -version = "0.1.0" +version = "0.9.27" dependencies = [ "cumulus-pallet-aura-ext", "cumulus-pallet-dmp-queue", diff --git a/parachains/runtimes/testing/penpal/Cargo.toml b/parachains/runtimes/testing/penpal/Cargo.toml index 0725eb477e0..dfa7b160b12 100644 --- a/parachains/runtimes/testing/penpal/Cargo.toml +++ b/parachains/runtimes/testing/penpal/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "penpal-runtime" -version = "0.1.0" +version = "0.9.27" authors = ["Anonymous"] description = "A parachain for communication back and forth with XCM of assets and uniques." license = "Unlicense" diff --git a/parachains/runtimes/testing/penpal/src/lib.rs b/parachains/runtimes/testing/penpal/src/lib.rs index 4789e1240c4..9ac07369df8 100644 --- a/parachains/runtimes/testing/penpal/src/lib.rs +++ b/parachains/runtimes/testing/penpal/src/lib.rs @@ -186,7 +186,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("penpal-parachain"), impl_name: create_runtime_str!("penpal-parachain"), authoring_version: 1, - spec_version: 1, + spec_version: 9270, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, From c047b3f5b48d8ef5c4016375848671c0b8df9591 Mon Sep 17 00:00:00 2001 From: Javier Viola Date: Fri, 2 Sep 2022 11:06:58 -0300 Subject: [PATCH 035/148] bump zombienet version, support new weights (#1589) --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c4d0ad28ed4..4ef5fb8df88 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -29,7 +29,7 @@ variables: CI_IMAGE: "paritytech/ci-linux:production" DOCKER_OS: "debian:stretch" ARCH: "x86_64" - ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.2.56" + ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.2.59" .collect-artifacts: &collect-artifacts artifacts: From e0f97c7cbe534e98003290a8d41263de01ac1b50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Fri, 2 Sep 2022 19:33:17 +0200 Subject: [PATCH 036/148] Companion for https://github.com/paritytech/substrate/pull/12147 (#1587) * Companion for https://github.com/paritytech/substrate/pull/12147 * update lockfile for {"substrate", "polkadot"} * Fix tests Co-authored-by: parity-processbot <> --- Cargo.lock | 496 +++++++++--------- parachain-template/node/src/command.rs | 2 +- polkadot-parachain/src/command.rs | 2 +- polkadot-parachain/tests/common.rs | 6 +- polkadot-parachain/tests/purge_chain_works.rs | 3 +- test/service/src/cli.rs | 2 +- 6 files changed, 258 insertions(+), 253 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fd999311373..eddfdce386c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -451,7 +451,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "beefy-primitives", @@ -487,7 +487,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -507,7 +507,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "beefy-primitives", "sp-api", @@ -516,7 +516,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "parity-scale-codec", "scale-info", @@ -2786,7 +2786,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "parity-scale-codec", ] @@ -2804,7 +2804,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-support", "frame-system", @@ -2827,7 +2827,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "Inflector", "chrono", @@ -2878,7 +2878,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2889,7 +2889,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2905,7 +2905,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-support", "frame-system", @@ -2934,7 +2934,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "bitflags", "frame-metadata", @@ -2965,7 +2965,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "Inflector", "cfg-expr", @@ -2979,7 +2979,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2991,7 +2991,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "proc-macro2", "quote", @@ -3001,7 +3001,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-support", "log", @@ -3018,7 +3018,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -3033,7 +3033,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "parity-scale-codec", "sp-api", @@ -3042,7 +3042,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-support", "parity-scale-codec", @@ -3917,7 +3917,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "beefy-primitives", "bitvec", @@ -4010,7 +4010,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "frame-support", "polkadot-primitives", @@ -5369,7 +5369,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "async-trait", "dyn-clonable", @@ -5385,7 +5385,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "expander 0.0.6", "itertools", @@ -5423,7 +5423,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5444,7 +5444,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -5461,7 +5461,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -5475,7 +5475,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -5491,7 +5491,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-support", "frame-system", @@ -5507,7 +5507,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-support", "frame-system", @@ -5522,7 +5522,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -5546,7 +5546,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5566,7 +5566,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -5581,7 +5581,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "beefy-primitives", "frame-support", @@ -5597,7 +5597,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -5620,7 +5620,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -5638,7 +5638,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -5683,7 +5683,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -5700,7 +5700,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "bitflags", "frame-benchmarking", @@ -5728,7 +5728,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "bitflags", "parity-scale-codec", @@ -5743,7 +5743,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "proc-macro2", "quote", @@ -5753,7 +5753,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5770,7 +5770,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5783,7 +5783,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -5799,7 +5799,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5822,7 +5822,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5835,7 +5835,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -5853,7 +5853,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -5868,7 +5868,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -5891,7 +5891,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5907,7 +5907,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -5927,7 +5927,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -5944,7 +5944,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -5961,7 +5961,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5979,7 +5979,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5994,7 +5994,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -6009,7 +6009,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-support", "frame-system", @@ -6026,7 +6026,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6045,7 +6045,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "parity-scale-codec", "sp-api", @@ -6055,7 +6055,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-support", "frame-system", @@ -6072,7 +6072,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6095,7 +6095,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -6111,7 +6111,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -6126,7 +6126,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-support", "frame-system", @@ -6140,7 +6140,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -6155,7 +6155,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -6171,7 +6171,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-support", "frame-system", @@ -6192,7 +6192,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -6208,7 +6208,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-support", "frame-system", @@ -6222,7 +6222,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6245,7 +6245,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6256,7 +6256,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "log", "sp-arithmetic", @@ -6265,7 +6265,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-support", "frame-system", @@ -6294,7 +6294,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -6312,7 +6312,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -6331,7 +6331,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-support", "frame-system", @@ -6347,7 +6347,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6362,7 +6362,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6373,7 +6373,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -6390,7 +6390,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "frame-benchmarking", "frame-support", @@ -6405,7 +6405,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -6421,7 +6421,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-benchmarking", "frame-support", @@ -6436,7 +6436,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "frame-support", "frame-system", @@ -6454,7 +6454,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "frame-benchmarking", "frame-support", @@ -7012,7 +7012,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7027,7 +7027,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7041,7 +7041,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "derive_more", "fatality", @@ -7064,7 +7064,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "fatality", "futures", @@ -7085,7 +7085,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "clap 3.2.19", "frame-benchmarking-cli", @@ -7111,7 +7111,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7152,7 +7152,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "always-assert", "fatality", @@ -7173,7 +7173,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7186,7 +7186,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "derive_more", "fatality", @@ -7209,7 +7209,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7223,7 +7223,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "futures", "futures-timer", @@ -7243,7 +7243,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "always-assert", "async-trait", @@ -7267,7 +7267,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "futures", "parity-scale-codec", @@ -7285,7 +7285,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "bitvec", "derive_more", @@ -7314,7 +7314,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "bitvec", "futures", @@ -7334,7 +7334,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "bitvec", "fatality", @@ -7353,7 +7353,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7368,7 +7368,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "async-trait", "futures", @@ -7386,7 +7386,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7401,7 +7401,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "futures", "futures-timer", @@ -7418,7 +7418,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "fatality", "futures", @@ -7437,7 +7437,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "async-trait", "futures", @@ -7454,7 +7454,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "bitvec", "fatality", @@ -7472,7 +7472,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "always-assert", "assert_matches", @@ -7504,7 +7504,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "futures", "polkadot-node-primitives", @@ -7520,7 +7520,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "futures", "memory-lru", @@ -7536,7 +7536,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "async-std", "lazy_static", @@ -7554,7 +7554,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "bs58", "futures", @@ -7573,7 +7573,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "async-trait", "derive_more", @@ -7595,7 +7595,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "bounded-vec", "futures", @@ -7617,7 +7617,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7627,7 +7627,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "async-trait", "futures", @@ -7645,7 +7645,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "async-trait", "derive_more", @@ -7668,7 +7668,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "async-trait", "derive_more", @@ -7701,7 +7701,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "async-trait", "futures", @@ -7724,7 +7724,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "derive_more", "frame-support", @@ -7824,7 +7824,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7839,7 +7839,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "bitvec", "frame-system", @@ -7869,7 +7869,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7901,7 +7901,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "beefy-primitives", "bitvec", @@ -7989,7 +7989,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "beefy-primitives", "bitvec", @@ -8036,7 +8036,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "frame-support", "polkadot-primitives", @@ -8048,7 +8048,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "bs58", "parity-scale-codec", @@ -8060,7 +8060,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "bitflags", "bitvec", @@ -8103,7 +8103,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "async-trait", "beefy-gadget", @@ -8208,7 +8208,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8229,7 +8229,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8239,7 +8239,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8264,7 +8264,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "beefy-primitives", "bitvec", @@ -8325,7 +8325,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "frame-benchmarking", "frame-system", @@ -8470,7 +8470,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8914,7 +8914,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9036,7 +9036,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9105,7 +9105,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "frame-support", "polkadot-primitives", @@ -9289,7 +9289,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "log", "sp-core", @@ -9300,7 +9300,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "futures", @@ -9327,7 +9327,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "futures", "futures-timer", @@ -9350,7 +9350,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9366,7 +9366,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9383,7 +9383,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9394,7 +9394,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "chrono", "clap 3.2.19", @@ -9433,7 +9433,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "fnv", "futures", @@ -9461,7 +9461,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "hash-db", "kvdb", @@ -9486,7 +9486,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "futures", @@ -9510,7 +9510,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "futures", @@ -9539,7 +9539,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "fork-tree", @@ -9581,7 +9581,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "futures", "jsonrpsee", @@ -9603,7 +9603,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9616,7 +9616,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "futures", @@ -9641,7 +9641,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9668,7 +9668,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "environmental", "parity-scale-codec", @@ -9684,7 +9684,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "log", "parity-scale-codec", @@ -9699,7 +9699,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9720,7 +9720,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "ahash", "async-trait", @@ -9761,7 +9761,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "finality-grandpa", "futures", @@ -9782,7 +9782,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "ansi_term", "futures", @@ -9799,7 +9799,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "hex", @@ -9814,7 +9814,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "asynchronous-codec", @@ -9863,7 +9863,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "bitflags", @@ -9886,7 +9886,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "ahash", "futures", @@ -9904,7 +9904,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "futures", "hex", @@ -9925,7 +9925,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "fork-tree", "futures", @@ -9953,7 +9953,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "bytes", "fnv", @@ -9983,7 +9983,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "futures", "libp2p", @@ -9996,7 +9996,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10005,7 +10005,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "futures", "hash-db", @@ -10035,7 +10035,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "futures", "jsonrpsee", @@ -10058,7 +10058,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "futures", "jsonrpsee", @@ -10071,7 +10071,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "directories", @@ -10138,7 +10138,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "log", "parity-scale-codec", @@ -10152,7 +10152,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10171,7 +10171,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "futures", "libc", @@ -10190,7 +10190,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "chrono", "futures", @@ -10208,7 +10208,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "ansi_term", "atty", @@ -10239,7 +10239,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10250,7 +10250,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "futures", "futures-timer", @@ -10276,7 +10276,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "futures", "log", @@ -10289,7 +10289,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "futures", "futures-timer", @@ -10736,7 +10736,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "enumn", "parity-scale-codec", @@ -10812,7 +10812,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "hash-db", "log", @@ -10830,7 +10830,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "blake2", "proc-macro-crate", @@ -10842,7 +10842,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "parity-scale-codec", "scale-info", @@ -10855,7 +10855,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "integer-sqrt", "num-traits", @@ -10870,7 +10870,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "parity-scale-codec", "scale-info", @@ -10883,7 +10883,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "parity-scale-codec", @@ -10895,7 +10895,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "parity-scale-codec", "sp-api", @@ -10907,7 +10907,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "futures", "log", @@ -10925,7 +10925,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "futures", @@ -10944,7 +10944,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "async-trait", "parity-scale-codec", @@ -10962,7 +10962,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "merlin", @@ -10985,7 +10985,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "parity-scale-codec", "scale-info", @@ -10999,7 +10999,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "parity-scale-codec", "scale-info", @@ -11012,7 +11012,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "base58", "bitflags", @@ -11058,7 +11058,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "blake2", "byteorder", @@ -11072,7 +11072,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "proc-macro2", "quote", @@ -11083,7 +11083,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11092,7 +11092,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "proc-macro2", "quote", @@ -11102,7 +11102,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "environmental", "parity-scale-codec", @@ -11113,7 +11113,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "finality-grandpa", "log", @@ -11131,7 +11131,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11145,7 +11145,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "bytes", "futures", @@ -11171,7 +11171,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "lazy_static", "sp-core", @@ -11182,7 +11182,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "futures", @@ -11199,7 +11199,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "thiserror", "zstd", @@ -11208,7 +11208,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "log", "parity-scale-codec", @@ -11223,7 +11223,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "parity-scale-codec", "scale-info", @@ -11237,7 +11237,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "sp-api", "sp-core", @@ -11247,7 +11247,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "backtrace", "lazy_static", @@ -11257,7 +11257,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "rustc-hash", "serde", @@ -11267,7 +11267,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "either", "hash256-std-hasher", @@ -11289,7 +11289,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11307,7 +11307,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "Inflector", "proc-macro-crate", @@ -11319,7 +11319,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "log", "parity-scale-codec", @@ -11333,7 +11333,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "serde", "serde_json", @@ -11342,7 +11342,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "parity-scale-codec", "scale-info", @@ -11356,7 +11356,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "parity-scale-codec", "scale-info", @@ -11367,7 +11367,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "hash-db", "log", @@ -11389,12 +11389,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11407,7 +11407,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "log", "sp-core", @@ -11420,7 +11420,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "futures-timer", @@ -11436,7 +11436,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "parity-scale-codec", "sp-std", @@ -11448,7 +11448,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "sp-api", "sp-runtime", @@ -11457,7 +11457,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "log", @@ -11473,7 +11473,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "ahash", "hash-db", @@ -11496,7 +11496,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11513,7 +11513,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11524,7 +11524,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "impl-trait-for-tuples", "log", @@ -11785,7 +11785,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "platforms", ] @@ -11793,7 +11793,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11814,7 +11814,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "futures-util", "hyper", @@ -11827,7 +11827,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "jsonrpsee", "log", @@ -11848,7 +11848,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "async-trait", "futures", @@ -11874,7 +11874,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11884,7 +11884,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11895,7 +11895,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "ansi_term", "build-helper", @@ -12003,7 +12003,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "frame-support", "polkadot-primitives", @@ -12292,7 +12292,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12303,7 +12303,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12430,7 +12430,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ed12e6065c505a5225e2156985a75d1fb75fa0a4" +source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" dependencies = [ "clap 3.2.19", "frame-try-runtime", @@ -13009,7 +13009,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "beefy-primitives", "bitvec", @@ -13098,7 +13098,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "frame-support", "polkadot-primitives", @@ -13384,7 +13384,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13398,7 +13398,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "frame-support", "frame-system", @@ -13418,7 +13418,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "frame-benchmarking", "frame-support", @@ -13436,7 +13436,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#de9e147695b9f1be8bd44e07861a31e483c8343a" +source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" dependencies = [ "Inflector", "proc-macro2", diff --git a/parachain-template/node/src/command.rs b/parachain-template/node/src/command.rs index 735af3e42ab..d1eebd127d8 100644 --- a/parachain-template/node/src/command.rs +++ b/parachain-template/node/src/command.rs @@ -348,7 +348,7 @@ impl CliConfiguration for RelayChainCli { fn base_path(&self) -> Result> { Ok(self .shared_params() - .base_path() + .base_path()? .or_else(|| self.base_path.clone().map(Into::into))) } diff --git a/polkadot-parachain/src/command.rs b/polkadot-parachain/src/command.rs index 18050c037bf..e07a8cfed54 100644 --- a/polkadot-parachain/src/command.rs +++ b/polkadot-parachain/src/command.rs @@ -781,7 +781,7 @@ impl CliConfiguration for RelayChainCli { fn base_path(&self) -> Result> { Ok(self .shared_params() - .base_path() + .base_path()? .or_else(|| self.base_path.clone().map(Into::into))) } diff --git a/polkadot-parachain/tests/common.rs b/polkadot-parachain/tests/common.rs index 7b9dffae386..1d3d710c83d 100644 --- a/polkadot-parachain/tests/common.rs +++ b/polkadot-parachain/tests/common.rs @@ -117,6 +117,7 @@ pub fn find_ws_url_from_output(read: impl Read + Send) -> (String, String) { line.expect("failed to obtain next line from stdout for WS address discovery"); data.push_str(&line); + data.push_str("\n"); // does the line contain our port (we expect this specific output from substrate). let sock_addr = match line.split_once("Running JSON-RPC WS server: addr=") { @@ -126,7 +127,10 @@ pub fn find_ws_url_from_output(read: impl Read + Send) -> (String, String) { Some(format!("ws://{}", sock_addr)) }) - .expect("We should get a WebSocket address"); + .unwrap_or_else(|| { + eprintln!("Output:\n{}", data); + panic!("We should get a WebSocket address") + }); (ws_url, data) } diff --git a/polkadot-parachain/tests/purge_chain_works.rs b/polkadot-parachain/tests/purge_chain_works.rs index acde3faa50b..34a51dcff84 100644 --- a/polkadot-parachain/tests/purge_chain_works.rs +++ b/polkadot-parachain/tests/purge_chain_works.rs @@ -28,8 +28,9 @@ async fn purge_chain_works() { // Check that both databases are deleted let base_dir = tempdir().expect("could not create a temp dir"); + let base_dir_path = format!("{}/polkadot", base_dir.path().display()); - let args = &["--", "--dev"]; + let args = &["--", "--dev", "-d", &base_dir_path]; common::run_node_for_a_while(base_dir.path(), args, SIGINT).await; diff --git a/test/service/src/cli.rs b/test/service/src/cli.rs index 43065160872..40b63798856 100644 --- a/test/service/src/cli.rs +++ b/test/service/src/cli.rs @@ -137,7 +137,7 @@ impl CliConfiguration for RelayChainCli { fn base_path(&self) -> CliResult> { Ok(self .shared_params() - .base_path() + .base_path()? .or_else(|| self.base_path.clone().map(Into::into))) } From d94cb49e1cb726b3b5a0936ab016395ad5e229c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Sep 2022 21:13:59 +0200 Subject: [PATCH 037/148] Bump thiserror from 1.0.32 to 1.0.33 (#1586) Bumps [thiserror](https://github.com/dtolnay/thiserror) from 1.0.32 to 1.0.33. - [Release notes](https://github.com/dtolnay/thiserror/releases) - [Commits](https://github.com/dtolnay/thiserror/compare/1.0.32...1.0.33) --- updated-dependencies: - dependency-name: thiserror dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- client/relay-chain-interface/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index eddfdce386c..67b629f6e20 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12029,18 +12029,18 @@ checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" [[package]] name = "thiserror" -version = "1.0.32" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5f6586b7f764adc0231f4c79be7b920e766bb2f3e51b3661cdb263828f19994" +checksum = "3d0a539a918745651435ac7db7a18761589a94cd7e94cd56999f828bf73c8a57" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.32" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12bafc5b54507e0149cdf1b145a5d80ab80a90bcd9275df43d4fff68460f6c21" +checksum = "c251e90f708e16c49a16f4917dc2131e75222b72edfa9cb7f7c58ae56aae0c09" dependencies = [ "proc-macro2", "quote", diff --git a/client/relay-chain-interface/Cargo.toml b/client/relay-chain-interface/Cargo.toml index 474480f2ea7..f33f9829f81 100644 --- a/client/relay-chain-interface/Cargo.toml +++ b/client/relay-chain-interface/Cargo.toml @@ -21,6 +21,6 @@ futures = "0.3.24" parking_lot = "0.12.1" derive_more = "0.99.2" async-trait = "0.1.57" -thiserror = "1.0.32" +thiserror = "1.0.33" jsonrpsee-core = "0.15.1" parity-scale-codec = "3.1.5" From 4a7a2a85b2522c21dd016024c3159dc4d6620d8e Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Sat, 3 Sep 2022 03:36:55 +0800 Subject: [PATCH 038/148] Companion for paritytech/substrate#12157 (#1590) * Remove RefTimeWeight * [ci] Apply cargo-fmt * update lockfile for {"substrate", "polkadot"} Co-authored-by: paritytech-ci Co-authored-by: parity-processbot <> --- Cargo.lock | 496 +++++++++--------- pallets/collator-selection/src/weights.rs | 142 ++--- pallets/xcmp-queue/src/weights.rs | 26 +- .../src/weights/cumulus_pallet_xcmp_queue.rs | 14 +- .../statemine/src/weights/frame_system.rs | 32 +- .../statemine/src/weights/pallet_assets.rs | 158 +++--- .../statemine/src/weights/pallet_balances.rs | 44 +- .../src/weights/pallet_collator_selection.rs | 52 +- .../statemine/src/weights/pallet_multisig.rs | 88 ++-- .../statemine/src/weights/pallet_proxy.rs | 88 ++-- .../statemine/src/weights/pallet_session.rs | 14 +- .../statemine/src/weights/pallet_timestamp.rs | 10 +- .../statemine/src/weights/pallet_uniques.rs | 178 +++---- .../statemine/src/weights/pallet_utility.rs | 18 +- .../xcm/pallet_xcm_benchmarks_fungible.rs | 40 +- .../xcm/pallet_xcm_benchmarks_generic.rs | 58 +- .../src/weights/cumulus_pallet_xcmp_queue.rs | 14 +- .../statemint/src/weights/frame_system.rs | 32 +- .../statemint/src/weights/pallet_assets.rs | 164 +++--- .../statemint/src/weights/pallet_balances.rs | 44 +- .../src/weights/pallet_collator_selection.rs | 52 +- .../statemint/src/weights/pallet_multisig.rs | 88 ++-- .../statemint/src/weights/pallet_proxy.rs | 88 ++-- .../statemint/src/weights/pallet_session.rs | 14 +- .../statemint/src/weights/pallet_timestamp.rs | 10 +- .../statemint/src/weights/pallet_uniques.rs | 178 +++---- .../statemint/src/weights/pallet_utility.rs | 18 +- .../xcm/pallet_xcm_benchmarks_fungible.rs | 40 +- .../xcm/pallet_xcm_benchmarks_generic.rs | 58 +- .../src/weights/cumulus_pallet_xcmp_queue.rs | 14 +- .../westmint/src/weights/frame_system.rs | 32 +- .../westmint/src/weights/pallet_assets.rs | 162 +++--- .../westmint/src/weights/pallet_balances.rs | 44 +- .../src/weights/pallet_collator_selection.rs | 52 +- .../westmint/src/weights/pallet_multisig.rs | 88 ++-- .../westmint/src/weights/pallet_proxy.rs | 88 ++-- .../westmint/src/weights/pallet_session.rs | 14 +- .../westmint/src/weights/pallet_timestamp.rs | 10 +- .../westmint/src/weights/pallet_uniques.rs | 178 +++---- .../westmint/src/weights/pallet_utility.rs | 18 +- .../xcm/pallet_xcm_benchmarks_fungible.rs | 40 +- .../xcm/pallet_xcm_benchmarks_generic.rs | 58 +- .../src/weights/cumulus_pallet_xcmp_queue.rs | 14 +- .../src/weights/frame_system.rs | 32 +- .../src/weights/pallet_alliance.rs | 154 +++--- .../src/weights/pallet_balances.rs | 44 +- .../src/weights/pallet_collator_selection.rs | 52 +- .../src/weights/pallet_multisig.rs | 88 ++-- .../src/weights/pallet_proxy.rs | 88 ++-- .../src/weights/pallet_session.rs | 14 +- .../src/weights/pallet_timestamp.rs | 10 +- .../src/weights/pallet_utility.rs | 18 +- templates/xcm-bench-template.hbs | 14 +- 53 files changed, 1770 insertions(+), 1814 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 67b629f6e20..eee876955b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -451,7 +451,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "beefy-primitives", @@ -487,7 +487,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -507,7 +507,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "beefy-primitives", "sp-api", @@ -516,7 +516,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "parity-scale-codec", "scale-info", @@ -2786,7 +2786,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "parity-scale-codec", ] @@ -2804,7 +2804,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support", "frame-system", @@ -2827,7 +2827,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "Inflector", "chrono", @@ -2878,7 +2878,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2889,7 +2889,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2905,7 +2905,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support", "frame-system", @@ -2934,7 +2934,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "bitflags", "frame-metadata", @@ -2965,7 +2965,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "Inflector", "cfg-expr", @@ -2979,7 +2979,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2991,7 +2991,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "proc-macro2", "quote", @@ -3001,7 +3001,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support", "log", @@ -3018,7 +3018,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -3033,7 +3033,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "parity-scale-codec", "sp-api", @@ -3042,7 +3042,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support", "parity-scale-codec", @@ -3917,7 +3917,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "beefy-primitives", "bitvec", @@ -4010,7 +4010,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "frame-support", "polkadot-primitives", @@ -5369,7 +5369,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "async-trait", "dyn-clonable", @@ -5385,7 +5385,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "expander 0.0.6", "itertools", @@ -5423,7 +5423,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -5444,7 +5444,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support", "frame-system", @@ -5461,7 +5461,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -5475,7 +5475,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support", "frame-system", @@ -5491,7 +5491,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support", "frame-system", @@ -5507,7 +5507,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support", "frame-system", @@ -5522,7 +5522,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -5546,7 +5546,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5566,7 +5566,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -5581,7 +5581,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "beefy-primitives", "frame-support", @@ -5597,7 +5597,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -5620,7 +5620,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -5638,7 +5638,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -5683,7 +5683,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -5700,7 +5700,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "bitflags", "frame-benchmarking", @@ -5728,7 +5728,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "bitflags", "parity-scale-codec", @@ -5743,7 +5743,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "proc-macro2", "quote", @@ -5753,7 +5753,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5770,7 +5770,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5783,7 +5783,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -5799,7 +5799,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5822,7 +5822,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5835,7 +5835,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -5853,7 +5853,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -5868,7 +5868,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -5891,7 +5891,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5907,7 +5907,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -5927,7 +5927,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -5944,7 +5944,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -5961,7 +5961,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5979,7 +5979,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5994,7 +5994,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -6009,7 +6009,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support", "frame-system", @@ -6026,7 +6026,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6045,7 +6045,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "parity-scale-codec", "sp-api", @@ -6055,7 +6055,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support", "frame-system", @@ -6072,7 +6072,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6095,7 +6095,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -6111,7 +6111,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -6126,7 +6126,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support", "frame-system", @@ -6140,7 +6140,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -6155,7 +6155,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -6171,7 +6171,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support", "frame-system", @@ -6192,7 +6192,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -6208,7 +6208,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support", "frame-system", @@ -6222,7 +6222,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6245,7 +6245,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6256,7 +6256,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "log", "sp-arithmetic", @@ -6265,7 +6265,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support", "frame-system", @@ -6294,7 +6294,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -6312,7 +6312,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -6331,7 +6331,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-support", "frame-system", @@ -6347,7 +6347,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6362,7 +6362,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6373,7 +6373,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -6390,7 +6390,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -6405,7 +6405,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -6421,7 +6421,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-benchmarking", "frame-support", @@ -6436,7 +6436,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "frame-support", "frame-system", @@ -6454,7 +6454,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "frame-benchmarking", "frame-support", @@ -7012,7 +7012,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7027,7 +7027,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7041,7 +7041,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "derive_more", "fatality", @@ -7064,7 +7064,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "fatality", "futures", @@ -7085,7 +7085,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "clap 3.2.19", "frame-benchmarking-cli", @@ -7111,7 +7111,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7152,7 +7152,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "always-assert", "fatality", @@ -7173,7 +7173,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7186,7 +7186,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "derive_more", "fatality", @@ -7209,7 +7209,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7223,7 +7223,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "futures", "futures-timer", @@ -7243,7 +7243,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "always-assert", "async-trait", @@ -7267,7 +7267,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "futures", "parity-scale-codec", @@ -7285,7 +7285,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "bitvec", "derive_more", @@ -7314,7 +7314,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "bitvec", "futures", @@ -7334,7 +7334,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "bitvec", "fatality", @@ -7353,7 +7353,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7368,7 +7368,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "async-trait", "futures", @@ -7386,7 +7386,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7401,7 +7401,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "futures", "futures-timer", @@ -7418,7 +7418,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "fatality", "futures", @@ -7437,7 +7437,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "async-trait", "futures", @@ -7454,7 +7454,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "bitvec", "fatality", @@ -7472,7 +7472,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "always-assert", "assert_matches", @@ -7504,7 +7504,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "futures", "polkadot-node-primitives", @@ -7520,7 +7520,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "futures", "memory-lru", @@ -7536,7 +7536,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "async-std", "lazy_static", @@ -7554,7 +7554,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "bs58", "futures", @@ -7573,7 +7573,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "async-trait", "derive_more", @@ -7595,7 +7595,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "bounded-vec", "futures", @@ -7617,7 +7617,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7627,7 +7627,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "async-trait", "futures", @@ -7645,7 +7645,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "async-trait", "derive_more", @@ -7668,7 +7668,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "async-trait", "derive_more", @@ -7701,7 +7701,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "async-trait", "futures", @@ -7724,7 +7724,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "derive_more", "frame-support", @@ -7824,7 +7824,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7839,7 +7839,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "bitvec", "frame-system", @@ -7869,7 +7869,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7901,7 +7901,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "beefy-primitives", "bitvec", @@ -7989,7 +7989,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "beefy-primitives", "bitvec", @@ -8036,7 +8036,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "frame-support", "polkadot-primitives", @@ -8048,7 +8048,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "bs58", "parity-scale-codec", @@ -8060,7 +8060,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "bitflags", "bitvec", @@ -8103,7 +8103,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "async-trait", "beefy-gadget", @@ -8208,7 +8208,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8229,7 +8229,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8239,7 +8239,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8264,7 +8264,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "beefy-primitives", "bitvec", @@ -8325,7 +8325,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "frame-benchmarking", "frame-system", @@ -8470,7 +8470,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8914,7 +8914,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9036,7 +9036,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9105,7 +9105,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "frame-support", "polkadot-primitives", @@ -9289,7 +9289,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "log", "sp-core", @@ -9300,7 +9300,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "futures", @@ -9327,7 +9327,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "futures", "futures-timer", @@ -9350,7 +9350,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9366,7 +9366,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9383,7 +9383,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9394,7 +9394,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "chrono", "clap 3.2.19", @@ -9433,7 +9433,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "fnv", "futures", @@ -9461,7 +9461,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "hash-db", "kvdb", @@ -9486,7 +9486,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "futures", @@ -9510,7 +9510,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "futures", @@ -9539,7 +9539,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "fork-tree", @@ -9581,7 +9581,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "futures", "jsonrpsee", @@ -9603,7 +9603,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9616,7 +9616,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "futures", @@ -9641,7 +9641,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9668,7 +9668,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "environmental", "parity-scale-codec", @@ -9684,7 +9684,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "log", "parity-scale-codec", @@ -9699,7 +9699,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9720,7 +9720,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "ahash", "async-trait", @@ -9761,7 +9761,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "finality-grandpa", "futures", @@ -9782,7 +9782,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "ansi_term", "futures", @@ -9799,7 +9799,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "hex", @@ -9814,7 +9814,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "asynchronous-codec", @@ -9863,7 +9863,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "bitflags", @@ -9886,7 +9886,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "ahash", "futures", @@ -9904,7 +9904,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "futures", "hex", @@ -9925,7 +9925,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "fork-tree", "futures", @@ -9953,7 +9953,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "bytes", "fnv", @@ -9983,7 +9983,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "futures", "libp2p", @@ -9996,7 +9996,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10005,7 +10005,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "futures", "hash-db", @@ -10035,7 +10035,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "futures", "jsonrpsee", @@ -10058,7 +10058,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "futures", "jsonrpsee", @@ -10071,7 +10071,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "directories", @@ -10138,7 +10138,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "log", "parity-scale-codec", @@ -10152,7 +10152,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10171,7 +10171,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "futures", "libc", @@ -10190,7 +10190,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "chrono", "futures", @@ -10208,7 +10208,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "ansi_term", "atty", @@ -10239,7 +10239,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10250,7 +10250,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "futures", "futures-timer", @@ -10276,7 +10276,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "futures", "log", @@ -10289,7 +10289,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "futures", "futures-timer", @@ -10736,7 +10736,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "enumn", "parity-scale-codec", @@ -10812,7 +10812,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "hash-db", "log", @@ -10830,7 +10830,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "blake2", "proc-macro-crate", @@ -10842,7 +10842,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "parity-scale-codec", "scale-info", @@ -10855,7 +10855,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "integer-sqrt", "num-traits", @@ -10870,7 +10870,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "parity-scale-codec", "scale-info", @@ -10883,7 +10883,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "parity-scale-codec", @@ -10895,7 +10895,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "parity-scale-codec", "sp-api", @@ -10907,7 +10907,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "futures", "log", @@ -10925,7 +10925,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "futures", @@ -10944,7 +10944,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "parity-scale-codec", @@ -10962,7 +10962,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "merlin", @@ -10985,7 +10985,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "parity-scale-codec", "scale-info", @@ -10999,7 +10999,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "parity-scale-codec", "scale-info", @@ -11012,7 +11012,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "base58", "bitflags", @@ -11058,7 +11058,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "blake2", "byteorder", @@ -11072,7 +11072,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "proc-macro2", "quote", @@ -11083,7 +11083,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11092,7 +11092,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "proc-macro2", "quote", @@ -11102,7 +11102,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "environmental", "parity-scale-codec", @@ -11113,7 +11113,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "finality-grandpa", "log", @@ -11131,7 +11131,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11145,7 +11145,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "bytes", "futures", @@ -11171,7 +11171,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "lazy_static", "sp-core", @@ -11182,7 +11182,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "futures", @@ -11199,7 +11199,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "thiserror", "zstd", @@ -11208,7 +11208,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "log", "parity-scale-codec", @@ -11223,7 +11223,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "parity-scale-codec", "scale-info", @@ -11237,7 +11237,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "sp-api", "sp-core", @@ -11247,7 +11247,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "backtrace", "lazy_static", @@ -11257,7 +11257,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "rustc-hash", "serde", @@ -11267,7 +11267,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "either", "hash256-std-hasher", @@ -11289,7 +11289,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11307,7 +11307,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "Inflector", "proc-macro-crate", @@ -11319,7 +11319,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "log", "parity-scale-codec", @@ -11333,7 +11333,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "serde", "serde_json", @@ -11342,7 +11342,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "parity-scale-codec", "scale-info", @@ -11356,7 +11356,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "parity-scale-codec", "scale-info", @@ -11367,7 +11367,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "hash-db", "log", @@ -11389,12 +11389,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11407,7 +11407,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "log", "sp-core", @@ -11420,7 +11420,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "futures-timer", @@ -11436,7 +11436,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "parity-scale-codec", "sp-std", @@ -11448,7 +11448,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "sp-api", "sp-runtime", @@ -11457,7 +11457,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "log", @@ -11473,7 +11473,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "ahash", "hash-db", @@ -11496,7 +11496,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11513,7 +11513,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11524,7 +11524,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "impl-trait-for-tuples", "log", @@ -11785,7 +11785,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "platforms", ] @@ -11793,7 +11793,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11814,7 +11814,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "futures-util", "hyper", @@ -11827,7 +11827,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "jsonrpsee", "log", @@ -11848,7 +11848,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "async-trait", "futures", @@ -11874,7 +11874,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11884,7 +11884,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0246883c404d498090f33e795feb8075fa8d3b6b" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11895,7 +11895,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "ansi_term", "build-helper", @@ -12003,7 +12003,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "frame-support", "polkadot-primitives", @@ -12292,7 +12292,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12303,7 +12303,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12430,7 +12430,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e986f05062a5c7a8608967febcd5c1d2bb02eb40" +source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "clap 3.2.19", "frame-try-runtime", @@ -13009,7 +13009,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "beefy-primitives", "bitvec", @@ -13098,7 +13098,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "frame-support", "polkadot-primitives", @@ -13384,7 +13384,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13398,7 +13398,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "frame-support", "frame-system", @@ -13418,7 +13418,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "frame-benchmarking", "frame-support", @@ -13436,7 +13436,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#00f873119c8491a5d188d5aa3050035180f7e5e3" +source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ "Inflector", "proc-macro2", diff --git a/pallets/collator-selection/src/weights.rs b/pallets/collator-selection/src/weights.rs index 95c53b26769..66292751b97 100644 --- a/pallets/collator-selection/src/weights.rs +++ b/pallets/collator-selection/src/weights.rs @@ -20,7 +20,7 @@ use frame_support::{ traits::Get, - weights::{constants::RocksDbWeight, RefTimeWeight, Weight}, + weights::{constants::RocksDbWeight, Weight}, }; use sp_std::marker::PhantomData; @@ -39,137 +39,93 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { fn set_invulnerables(b: u32) -> Weight { - Weight::from_ref_time(18_563_000 as RefTimeWeight) + Weight::from_ref_time(18_563_000 as u64) // Standard Error: 0 - .saturating_add( - Weight::from_ref_time(68_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight), - ) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(68_000 as u64).saturating_mul(b as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } fn set_desired_candidates() -> Weight { - Weight::from_ref_time(16_363_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(16_363_000 as u64).saturating_add(T::DbWeight::get().writes(1 as u64)) } fn set_candidacy_bond() -> Weight { - Weight::from_ref_time(16_840_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(16_840_000 as u64).saturating_add(T::DbWeight::get().writes(1 as u64)) } fn register_as_candidate(c: u32) -> Weight { - Weight::from_ref_time(71_196_000 as RefTimeWeight) + Weight::from_ref_time(71_196_000 as u64) // Standard Error: 0 - .saturating_add( - Weight::from_ref_time(198_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight), - ) - .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(198_000 as u64).saturating_mul(c as u64)) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } fn leave_intent(c: u32) -> Weight { - Weight::from_ref_time(55_336_000 as RefTimeWeight) + Weight::from_ref_time(55_336_000 as u64) // Standard Error: 0 - .saturating_add( - Weight::from_ref_time(151_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight), - ) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(151_000 as u64).saturating_mul(c as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } fn note_author() -> Weight { - Weight::from_ref_time(71_461_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(71_461_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } fn new_session(r: u32, c: u32) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 1_010_000 - .saturating_add( - Weight::from_ref_time(109_961_000 as RefTimeWeight) - .saturating_mul(r as RefTimeWeight), - ) + .saturating_add(Weight::from_ref_time(109_961_000 as u64).saturating_mul(r as u64)) // Standard Error: 1_010_000 - .saturating_add( - Weight::from_ref_time(151_952_000 as RefTimeWeight) - .saturating_mul(c as RefTimeWeight), - ) - .saturating_add( - T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight)), - ) - .saturating_add( - T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight)), - ) - .saturating_add( - T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(r as RefTimeWeight)), - ) - .saturating_add( - T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight)), - ) + .saturating_add(Weight::from_ref_time(151_952_000 as u64).saturating_mul(c as u64)) + .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(r as u64))) + .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) + .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(r as u64))) + .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(c as u64))) } } // For backwards compatibility and tests impl WeightInfo for () { fn set_invulnerables(b: u32) -> Weight { - Weight::from_ref_time(18_563_000 as RefTimeWeight) + Weight::from_ref_time(18_563_000 as u64) // Standard Error: 0 - .saturating_add( - Weight::from_ref_time(68_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight), - ) - .saturating_add(RocksDbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(68_000 as u64).saturating_mul(b as u64)) + .saturating_add(RocksDbWeight::get().writes(1 as u64)) } fn set_desired_candidates() -> Weight { - Weight::from_ref_time(16_363_000 as RefTimeWeight) - .saturating_add(RocksDbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(16_363_000 as u64) + .saturating_add(RocksDbWeight::get().writes(1 as u64)) } fn set_candidacy_bond() -> Weight { - Weight::from_ref_time(16_840_000 as RefTimeWeight) - .saturating_add(RocksDbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(16_840_000 as u64) + .saturating_add(RocksDbWeight::get().writes(1 as u64)) } fn register_as_candidate(c: u32) -> Weight { - Weight::from_ref_time(71_196_000 as RefTimeWeight) + Weight::from_ref_time(71_196_000 as u64) // Standard Error: 0 - .saturating_add( - Weight::from_ref_time(198_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight), - ) - .saturating_add(RocksDbWeight::get().reads(4 as RefTimeWeight)) - .saturating_add(RocksDbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(198_000 as u64).saturating_mul(c as u64)) + .saturating_add(RocksDbWeight::get().reads(4 as u64)) + .saturating_add(RocksDbWeight::get().writes(2 as u64)) } fn leave_intent(c: u32) -> Weight { - Weight::from_ref_time(55_336_000 as RefTimeWeight) + Weight::from_ref_time(55_336_000 as u64) // Standard Error: 0 - .saturating_add( - Weight::from_ref_time(151_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight), - ) - .saturating_add(RocksDbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(RocksDbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(151_000 as u64).saturating_mul(c as u64)) + .saturating_add(RocksDbWeight::get().reads(1 as u64)) + .saturating_add(RocksDbWeight::get().writes(2 as u64)) } fn note_author() -> Weight { - Weight::from_ref_time(71_461_000 as RefTimeWeight) - .saturating_add(RocksDbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(RocksDbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(71_461_000 as u64) + .saturating_add(RocksDbWeight::get().reads(3 as u64)) + .saturating_add(RocksDbWeight::get().writes(4 as u64)) } fn new_session(r: u32, c: u32) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 1_010_000 - .saturating_add( - Weight::from_ref_time(109_961_000 as RefTimeWeight) - .saturating_mul(r as RefTimeWeight), - ) + .saturating_add(Weight::from_ref_time(109_961_000 as u64).saturating_mul(r as u64)) // Standard Error: 1_010_000 - .saturating_add( - Weight::from_ref_time(151_952_000 as RefTimeWeight) - .saturating_mul(c as RefTimeWeight), - ) - .saturating_add( - RocksDbWeight::get().reads((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight)), - ) - .saturating_add( - RocksDbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight)), - ) - .saturating_add( - RocksDbWeight::get() - .writes((2 as RefTimeWeight).saturating_mul(r as RefTimeWeight)), - ) - .saturating_add( - RocksDbWeight::get() - .writes((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight)), - ) + .saturating_add(Weight::from_ref_time(151_952_000 as u64).saturating_mul(c as u64)) + .saturating_add(RocksDbWeight::get().reads((1 as u64).saturating_mul(r as u64))) + .saturating_add(RocksDbWeight::get().reads((2 as u64).saturating_mul(c as u64))) + .saturating_add(RocksDbWeight::get().writes((2 as u64).saturating_mul(r as u64))) + .saturating_add(RocksDbWeight::get().writes((2 as u64).saturating_mul(c as u64))) } } diff --git a/pallets/xcmp-queue/src/weights.rs b/pallets/xcmp-queue/src/weights.rs index 0124804a80d..41a3d812fb2 100644 --- a/pallets/xcmp-queue/src/weights.rs +++ b/pallets/xcmp-queue/src/weights.rs @@ -3,7 +3,7 @@ use frame_support::{ traits::Get, - weights::{constants::RocksDbWeight, RefTimeWeight, Weight}, + weights::{constants::RocksDbWeight, Weight}, }; use sp_std::marker::PhantomData; @@ -18,31 +18,31 @@ pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - Weight::from_ref_time(2_717_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(2_717_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - Weight::from_ref_time(2_717_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(2_717_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } } impl WeightInfo for () { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - Weight::from_ref_time(2_717_000 as RefTimeWeight) - .saturating_add(RocksDbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(RocksDbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(2_717_000 as u64) + .saturating_add(RocksDbWeight::get().reads(1 as u64)) + .saturating_add(RocksDbWeight::get().writes(1 as u64)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - Weight::from_ref_time(2_717_000 as RefTimeWeight) - .saturating_add(RocksDbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(RocksDbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(2_717_000 as u64) + .saturating_add(RocksDbWeight::get().reads(1 as u64)) + .saturating_add(RocksDbWeight::get().writes(1 as u64)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/assets/statemine/src/weights/cumulus_pallet_xcmp_queue.rs index 862bbcf3c1c..16a431d8b18 100644 --- a/parachains/runtimes/assets/statemine/src/weights/cumulus_pallet_xcmp_queue.rs +++ b/parachains/runtimes/assets/statemine/src/weights/cumulus_pallet_xcmp_queue.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `cumulus_pallet_xcmp_queue`. @@ -48,14 +48,14 @@ pub struct WeightInfo(PhantomData); impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - Weight::from_ref_time(5_634_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(5_634_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - Weight::from_ref_time(5_559_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(5_559_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/frame_system.rs b/parachains/runtimes/assets/statemine/src/weights/frame_system.rs index d67ab58fce5..73e8820614c 100644 --- a/parachains/runtimes/assets/statemine/src/weights/frame_system.rs +++ b/parachains/runtimes/assets/statemine/src/weights/frame_system.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `frame_system`. @@ -48,43 +48,43 @@ pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. fn remark(_b: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(b as u64)) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) fn set_heap_pages() -> Weight { - Weight::from_ref_time(5_461_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(5_461_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn set_storage(i: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(622_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(622_000 as u64).saturating_mul(i as u64)) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn kill_storage(i: u32, ) -> Weight { - Weight::from_ref_time(351_000 as RefTimeWeight) + Weight::from_ref_time(351_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(513_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(513_000 as u64).saturating_mul(i as u64)) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `p` is `[1, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(1_054_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(p as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(1_054_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(p as u64))) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs index ba8da59d550..8b9097bef4a 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_assets`. @@ -48,15 +48,15 @@ pub struct WeightInfo(PhantomData); impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:1) fn create() -> Weight { - Weight::from_ref_time(26_670_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(26_670_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn force_create() -> Weight { - Weight::from_ref_time(15_063_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(15_063_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:5002 w:5001) @@ -67,165 +67,165 @@ impl pallet_assets::WeightInfo for WeightInfo { /// The range of component `s` is `[0, 5000]`. /// The range of component `a` is `[0, 500]`. fn destroy(c: u32, s: u32, a: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 46_000 - .saturating_add(Weight::from_ref_time(16_382_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(16_382_000 as u64).saturating_mul(c as u64)) // Standard Error: 46_000 - .saturating_add(Weight::from_ref_time(19_187_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(19_187_000 as u64).saturating_mul(s as u64)) // Standard Error: 465_000 - .saturating_add(Weight::from_ref_time(16_818_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) - .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(s as RefTimeWeight))) - .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(s as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(16_818_000 as u64).saturating_mul(a as u64)) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) + .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(s as u64))) + .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(a as u64))) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(c as u64))) + .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(s as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(a as u64))) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn mint() -> Weight { - Weight::from_ref_time(29_655_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(29_655_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn burn() -> Weight { - Weight::from_ref_time(33_648_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(33_648_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(47_414_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(47_414_000 as u64) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(39_871_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(39_871_000 as u64) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn force_transfer() -> Weight { - Weight::from_ref_time(47_454_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(47_454_000 as u64) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn freeze() -> Weight { - Weight::from_ref_time(20_827_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(20_827_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn thaw() -> Weight { - Weight::from_ref_time(21_249_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(21_249_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn freeze_asset() -> Weight { - Weight::from_ref_time(17_775_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_775_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn thaw_asset() -> Weight { - Weight::from_ref_time(17_917_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_917_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Metadata (r:1 w:0) fn transfer_ownership() -> Weight { - Weight::from_ref_time(18_724_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(18_724_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(17_448_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_448_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn set_metadata(_n: u32, _s: u32, ) -> Weight { - Weight::from_ref_time(31_859_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(31_859_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(31_293_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(31_293_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn force_set_metadata(_n: u32, _s: u32, ) -> Weight { - Weight::from_ref_time(19_595_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(19_595_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn force_clear_metadata() -> Weight { - Weight::from_ref_time(31_366_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(31_366_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn force_asset_status() -> Weight { - Weight::from_ref_time(16_884_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(16_884_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(34_730_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(34_730_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Approvals (r:1 w:1) // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_approved() -> Weight { - Weight::from_ref_time(59_797_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(5 as RefTimeWeight)) + Weight::from_ref_time(59_797_000 as u64) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(5 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(35_178_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(35_178_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn force_cancel_approval() -> Weight { - Weight::from_ref_time(36_840_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(36_840_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs index 0acb50fc169..20a24494aaf 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. @@ -48,44 +48,44 @@ pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(41_804_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(41_804_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(31_899_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(31_899_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { - Weight::from_ref_time(20_638_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(20_638_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { - Weight::from_ref_time(24_081_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(24_081_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { - Weight::from_ref_time(41_357_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(41_357_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { - Weight::from_ref_time(37_382_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(37_382_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { - Weight::from_ref_time(18_476_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(18_476_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs index ecffa07fac8..ee9bf010d76 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_collator_selection`. @@ -50,21 +50,21 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection Invulnerables (r:0 w:1) /// The range of component `b` is `[1, 100]`. fn set_invulnerables(b: u32, ) -> Weight { - Weight::from_ref_time(8_196_000 as RefTimeWeight) + Weight::from_ref_time(8_196_000 as u64) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(3_354_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(b as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_354_000 as u64).saturating_mul(b as u64)) + .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection DesiredCandidates (r:0 w:1) fn set_desired_candidates() -> Weight { - Weight::from_ref_time(9_141_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(9_141_000 as u64) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection CandidacyBond (r:0 w:1) fn set_candidacy_bond() -> Weight { - Weight::from_ref_time(9_554_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(9_554_000 as u64) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection DesiredCandidates (r:1 w:0) @@ -74,29 +74,29 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[1, 1000]`. fn register_as_candidate(c: u32, ) -> Weight { - Weight::from_ref_time(55_660_000 as RefTimeWeight) + Weight::from_ref_time(55_660_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(103_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(103_000 as u64).saturating_mul(c as u64)) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[6, 1000]`. fn leave_intent(c: u32, ) -> Weight { - Weight::from_ref_time(56_380_000 as RefTimeWeight) + Weight::from_ref_time(56_380_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(113_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(113_000 as u64).saturating_mul(c as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:2 w:2) // Storage: System BlockWeight (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) fn note_author() -> Weight { - Weight::from_ref_time(31_852_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(31_852_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:1000 w:1) @@ -106,13 +106,13 @@ impl pallet_collator_selection::WeightInfo for WeightIn /// The range of component `r` is `[1, 1000]`. /// The range of component `c` is `[1, 1000]`. fn new_session(r: u32, c: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 2_076_000 - .saturating_add(Weight::from_ref_time(10_780_000 as RefTimeWeight).saturating_mul(r as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(10_780_000 as u64).saturating_mul(r as u64)) // Standard Error: 2_076_000 - .saturating_add(Weight::from_ref_time(55_238_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(55_238_000 as u64).saturating_mul(c as u64)) + .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(r as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(c as u64))) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs index c490fd88dbe..10bd872e7b5 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_multisig`. @@ -48,22 +48,22 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - Weight::from_ref_time(18_001_000 as RefTimeWeight) + Weight::from_ref_time(18_001_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(35_223_000 as RefTimeWeight) + Weight::from_ref_time(35_223_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(118_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(118_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -71,38 +71,38 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(39_275_000 as RefTimeWeight) + Weight::from_ref_time(39_275_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(92_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(92_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(24_703_000 as RefTimeWeight) + Weight::from_ref_time(24_703_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(96_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(96_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(38_375_000 as RefTimeWeight) + Weight::from_ref_time(38_375_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(100_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(100_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -110,53 +110,53 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(46_964_000 as RefTimeWeight) + Weight::from_ref_time(46_964_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(143_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(143_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - Weight::from_ref_time(34_450_000 as RefTimeWeight) + Weight::from_ref_time(34_450_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(117_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - Weight::from_ref_time(22_051_000 as RefTimeWeight) + Weight::from_ref_time(22_051_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(117_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_complete(s: u32, ) -> Weight { - Weight::from_ref_time(69_763_000 as RefTimeWeight) + Weight::from_ref_time(69_763_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(162_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(162_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - Weight::from_ref_time(53_182_000 as RefTimeWeight) + Weight::from_ref_time(53_182_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(129_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(129_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs index ee440b25efc..55b51e8c7ce 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. @@ -49,10 +49,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:0) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - Weight::from_ref_time(18_075_000 as RefTimeWeight) + Weight::from_ref_time(18_075_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(92_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(92_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -60,39 +60,39 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(35_722_000 as RefTimeWeight) + Weight::from_ref_time(35_722_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(180_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(180_000 as u64).saturating_mul(a as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(85_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn remove_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(25_193_000 as RefTimeWeight) + Weight::from_ref_time(25_193_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(185_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(185_000 as u64).saturating_mul(a as u64)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(23_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(23_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(25_123_000 as RefTimeWeight) + Weight::from_ref_time(25_123_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(190_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(190_000 as u64).saturating_mul(a as u64)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(21_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(21_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -100,58 +100,58 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(32_582_000 as RefTimeWeight) + Weight::from_ref_time(32_582_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(200_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(200_000 as u64).saturating_mul(a as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(93_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(93_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(28_173_000 as RefTimeWeight) + Weight::from_ref_time(28_173_000 as u64) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(112_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(112_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(28_247_000 as RefTimeWeight) + Weight::from_ref_time(28_247_000 as u64) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(118_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(118_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - Weight::from_ref_time(23_821_000 as RefTimeWeight) + Weight::from_ref_time(23_821_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(85_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn anonymous(p: u32, ) -> Weight { - Weight::from_ref_time(31_472_000 as RefTimeWeight) + Weight::from_ref_time(31_472_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(21_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(21_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. fn kill_anonymous(p: u32, ) -> Weight { - Weight::from_ref_time(24_620_000 as RefTimeWeight) + Weight::from_ref_time(24_620_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(85_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs index cddb0408c51..172660abd72 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. @@ -49,15 +49,15 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:1 w:1) fn set_keys() -> Weight { - Weight::from_ref_time(16_555_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(16_555_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:1) fn purge_keys() -> Weight { - Weight::from_ref_time(13_554_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(13_554_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs index 9b838b6f8c6..0ee1456f7c6 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. @@ -48,11 +48,11 @@ pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { // Storage: Timestamp Now (r:1 w:1) fn set() -> Weight { - Weight::from_ref_time(6_818_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(6_818_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } fn on_finalize() -> Weight { - Weight::from_ref_time(2_431_000 as RefTimeWeight) + Weight::from_ref_time(2_431_000 as u64) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs index 64af724e634..133f267e948 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs @@ -43,7 +43,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_uniques`. @@ -53,17 +53,17 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn create() -> Weight { - Weight::from_ref_time(28_358_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(28_358_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques NextCollectionId (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_create() -> Weight { - Weight::from_ref_time(17_824_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(17_824_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:0) @@ -77,191 +77,191 @@ impl pallet_uniques::WeightInfo for WeightInfo { /// The range of component `m` is `[0, 1000]`. /// The range of component `a` is `[0, 1000]`. fn destroy(n: u32, m: u32, a: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 17_000 - .saturating_add(Weight::from_ref_time(10_592_000 as RefTimeWeight).saturating_mul(n as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(10_592_000 as u64).saturating_mul(n as u64)) // Standard Error: 17_000 - .saturating_add(Weight::from_ref_time(1_658_000 as RefTimeWeight).saturating_mul(m as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_658_000 as u64).saturating_mul(m as u64)) // Standard Error: 17_000 - .saturating_add(Weight::from_ref_time(1_593_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(n as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(n as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(m as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(1_593_000 as u64).saturating_mul(a as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(n as u64))) + .saturating_add(T::DbWeight::get().writes(4 as u64)) + .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(n as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(m as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(a as u64))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques CollectionMaxSupply (r:1 w:0) // Storage: Uniques Account (r:0 w:1) fn mint() -> Weight { - Weight::from_ref_time(36_742_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + Weight::from_ref_time(36_742_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:1) // Storage: Uniques ItemPriceOf (r:0 w:1) fn burn() -> Weight { - Weight::from_ref_time(37_124_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(37_124_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:2) // Storage: Uniques ItemPriceOf (r:0 w:1) fn transfer() -> Weight { - Weight::from_ref_time(28_961_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(28_961_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:100 w:100) /// The range of component `i` is `[0, 5000]`. fn redeposit(i: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 15_000 - .saturating_add(Weight::from_ref_time(12_880_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(12_880_000 as u64).saturating_mul(i as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(i as u64))) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn freeze() -> Weight { - Weight::from_ref_time(21_658_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(21_658_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn thaw() -> Weight { - Weight::from_ref_time(21_980_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(21_980_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) fn freeze_collection() -> Weight { - Weight::from_ref_time(17_123_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_123_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) fn thaw_collection() -> Weight { - Weight::from_ref_time(17_398_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_398_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:2) fn transfer_ownership() -> Weight { - Weight::from_ref_time(25_473_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(25_473_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Uniques Class (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(17_970_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_970_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_item_status() -> Weight { - Weight::from_ref_time(20_781_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(20_781_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn set_attribute() -> Weight { - Weight::from_ref_time(42_652_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(42_652_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn clear_attribute() -> Weight { - Weight::from_ref_time(41_166_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(41_166_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn set_metadata() -> Weight { - Weight::from_ref_time(35_471_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(35_471_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(35_110_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(35_110_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn set_collection_metadata() -> Weight { - Weight::from_ref_time(33_536_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(33_536_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn clear_collection_metadata() -> Weight { - Weight::from_ref_time(31_913_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(31_913_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(23_536_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(23_536_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(23_748_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(23_748_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) fn set_accept_ownership() -> Weight { - Weight::from_ref_time(20_712_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(20_712_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques CollectionMaxSupply (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn set_collection_max_supply() -> Weight { - Weight::from_ref_time(20_245_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(20_245_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Asset (r:1 w:0) // Storage: Uniques ItemPriceOf (r:0 w:1) fn set_price() -> Weight { - Weight::from_ref_time(20_065_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(20_065_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques ItemPriceOf (r:1 w:1) // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Account (r:0 w:2) fn buy_item() -> Weight { - Weight::from_ref_time(40_638_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(40_638_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs index fbe8faef7dd..83244ffacab 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_utility`. @@ -48,26 +48,26 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - Weight::from_ref_time(22_923_000 as RefTimeWeight) + Weight::from_ref_time(22_923_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(3_526_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_526_000 as u64).saturating_mul(c as u64)) } fn as_derivative() -> Weight { - Weight::from_ref_time(5_220_000 as RefTimeWeight) + Weight::from_ref_time(5_220_000 as u64) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - Weight::from_ref_time(20_953_000 as RefTimeWeight) + Weight::from_ref_time(20_953_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_698_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_698_000 as u64).saturating_mul(c as u64)) } fn dispatch_as() -> Weight { - Weight::from_ref_time(12_087_000 as RefTimeWeight) + Weight::from_ref_time(12_087_000 as u64) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - Weight::from_ref_time(10_076_000 as RefTimeWeight) + Weight::from_ref_time(10_076_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_546_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_546_000 as u64).saturating_mul(c as u64)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs index 9df4a3c5490..85bf47886a1 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -42,7 +42,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weights for `pallet_xcm_benchmarks::fungible`. @@ -50,15 +50,15 @@ pub struct WeightInfo(PhantomData); impl WeightInfo { // Storage: System Account (r:1 w:1) pub(crate) fn withdraw_asset() -> Weight { - Weight::from_ref_time(29_190_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(29_190_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) pub(crate) fn transfer_asset() -> Weight { - Weight::from_ref_time(34_102_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(34_102_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:2 w:2) // Storage: ParachainInfo ParachainId (r:1 w:0) @@ -68,18 +68,18 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn transfer_reserve_asset() -> Weight { - Weight::from_ref_time(49_386_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(8 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(49_386_000 as u64) + .saturating_add(T::DbWeight::get().reads(8 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } pub(crate) fn receive_teleported_asset() -> Weight { - Weight::from_ref_time(4_937_000 as RefTimeWeight) + Weight::from_ref_time(4_937_000 as u64) } // Storage: System Account (r:1 w:1) pub(crate) fn deposit_asset() -> Weight { - Weight::from_ref_time(30_853_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(30_853_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) // Storage: ParachainInfo ParachainId (r:1 w:0) @@ -89,9 +89,9 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn deposit_reserve_asset() -> Weight { - Weight::from_ref_time(45_866_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(7 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + Weight::from_ref_time(45_866_000 as u64) + .saturating_add(T::DbWeight::get().reads(7 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: ParachainInfo ParachainId (r:1 w:0) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -100,8 +100,8 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_teleport() -> Weight { - Weight::from_ref_time(23_964_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(23_964_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 72237c90e96..6a9f36b7684 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -42,7 +42,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weights for `pallet_xcm_benchmarks::generic`. @@ -55,38 +55,38 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn query_holding() -> Weight { - Weight::from_ref_time(694_466_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(694_466_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } pub(crate) fn buy_execution() -> Weight { - Weight::from_ref_time(7_095_000 as RefTimeWeight) + Weight::from_ref_time(7_095_000 as u64) } // Storage: PolkadotXcm Queries (r:1 w:0) pub(crate) fn query_response() -> Weight { - Weight::from_ref_time(13_270_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + Weight::from_ref_time(13_270_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) } pub(crate) fn transact() -> Weight { - Weight::from_ref_time(16_375_000 as RefTimeWeight) + Weight::from_ref_time(16_375_000 as u64) } pub(crate) fn refund_surplus() -> Weight { - Weight::from_ref_time(7_319_000 as RefTimeWeight) + Weight::from_ref_time(7_319_000 as u64) } pub(crate) fn set_error_handler() -> Weight { - Weight::from_ref_time(3_515_000 as RefTimeWeight) + Weight::from_ref_time(3_515_000 as u64) } pub(crate) fn set_appendix() -> Weight { - Weight::from_ref_time(3_501_000 as RefTimeWeight) + Weight::from_ref_time(3_501_000 as u64) } pub(crate) fn clear_error() -> Weight { - Weight::from_ref_time(3_459_000 as RefTimeWeight) + Weight::from_ref_time(3_459_000 as u64) } pub(crate) fn descend_origin() -> Weight { - Weight::from_ref_time(4_319_000 as RefTimeWeight) + Weight::from_ref_time(4_319_000 as u64) } pub(crate) fn clear_origin() -> Weight { - Weight::from_ref_time(3_511_000 as RefTimeWeight) + Weight::from_ref_time(3_511_000 as u64) } // Storage: PolkadotXcm SupportedVersion (r:1 w:0) // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) @@ -94,18 +94,18 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn report_error() -> Weight { - Weight::from_ref_time(13_284_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(13_284_000 as u64) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: PolkadotXcm AssetTraps (r:1 w:1) pub(crate) fn claim_asset() -> Weight { - Weight::from_ref_time(7_985_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(7_985_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } pub(crate) fn trap() -> Weight { - Weight::from_ref_time(3_515_000 as RefTimeWeight) + Weight::from_ref_time(3_515_000 as u64) } // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -114,14 +114,14 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn subscribe_version() -> Weight { - Weight::from_ref_time(16_657_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + Weight::from_ref_time(16_657_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) pub(crate) fn unsubscribe_version() -> Weight { - Weight::from_ref_time(5_622_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(5_622_000 as u64) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: ParachainInfo ParachainId (r:1 w:0) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -130,8 +130,8 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_reserve_withdraw() -> Weight { - Weight::from_ref_time(878_786_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(878_786_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/assets/statemint/src/weights/cumulus_pallet_xcmp_queue.rs index c6c95112065..40fa7ad4602 100644 --- a/parachains/runtimes/assets/statemint/src/weights/cumulus_pallet_xcmp_queue.rs +++ b/parachains/runtimes/assets/statemint/src/weights/cumulus_pallet_xcmp_queue.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `cumulus_pallet_xcmp_queue`. @@ -48,14 +48,14 @@ pub struct WeightInfo(PhantomData); impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - Weight::from_ref_time(5_192_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(5_192_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - Weight::from_ref_time(5_363_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(5_363_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/frame_system.rs b/parachains/runtimes/assets/statemint/src/weights/frame_system.rs index 9b702467502..a1c577d6d91 100644 --- a/parachains/runtimes/assets/statemint/src/weights/frame_system.rs +++ b/parachains/runtimes/assets/statemint/src/weights/frame_system.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `frame_system`. @@ -48,43 +48,43 @@ pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. fn remark(_b: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(b as u64)) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) fn set_heap_pages() -> Weight { - Weight::from_ref_time(5_446_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(5_446_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn set_storage(i: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(626_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(626_000 as u64).saturating_mul(i as u64)) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn kill_storage(i: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(515_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(515_000 as u64).saturating_mul(i as u64)) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `p` is `[1, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(1_052_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(p as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(1_052_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(p as u64))) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs index 8718fa64c9e..f0c00312530 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_assets`. @@ -48,15 +48,15 @@ pub struct WeightInfo(PhantomData); impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:1) fn create() -> Weight { - Weight::from_ref_time(26_226_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(26_226_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn force_create() -> Weight { - Weight::from_ref_time(15_357_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(15_357_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:5002 w:5001) @@ -67,171 +67,171 @@ impl pallet_assets::WeightInfo for WeightInfo { /// The range of component `s` is `[0, 5000]`. /// The range of component `a` is `[0, 500]`. fn destroy(c: u32, s: u32, a: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 45_000 - .saturating_add(Weight::from_ref_time(15_904_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(15_904_000 as u64).saturating_mul(c as u64)) // Standard Error: 45_000 - .saturating_add(Weight::from_ref_time(18_803_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(18_803_000 as u64).saturating_mul(s as u64)) // Standard Error: 450_000 - .saturating_add(Weight::from_ref_time(17_017_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) - .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(s as RefTimeWeight))) - .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(s as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(17_017_000 as u64).saturating_mul(a as u64)) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) + .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(s as u64))) + .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(a as u64))) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(c as u64))) + .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(s as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(a as u64))) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn mint() -> Weight { - Weight::from_ref_time(29_616_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(29_616_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn burn() -> Weight { - Weight::from_ref_time(33_496_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(33_496_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(46_790_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(46_790_000 as u64) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(39_769_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(39_769_000 as u64) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn force_transfer() -> Weight { - Weight::from_ref_time(47_200_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(47_200_000 as u64) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn freeze() -> Weight { - Weight::from_ref_time(20_873_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(20_873_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn thaw() -> Weight { - Weight::from_ref_time(21_228_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(21_228_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn freeze_asset() -> Weight { - Weight::from_ref_time(17_685_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_685_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn thaw_asset() -> Weight { - Weight::from_ref_time(17_542_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_542_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Metadata (r:1 w:0) fn transfer_ownership() -> Weight { - Weight::from_ref_time(18_639_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(18_639_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(17_135_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_135_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn set_metadata(n: u32, s: u32, ) -> Weight { - Weight::from_ref_time(31_324_000 as RefTimeWeight) + Weight::from_ref_time(31_324_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(n as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(n as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(31_340_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(31_340_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn force_set_metadata(_n: u32, s: u32, ) -> Weight { - Weight::from_ref_time(18_756_000 as RefTimeWeight) + Weight::from_ref_time(18_756_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn force_clear_metadata() -> Weight { - Weight::from_ref_time(31_427_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(31_427_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn force_asset_status() -> Weight { - Weight::from_ref_time(16_930_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(16_930_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(34_492_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(34_492_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Approvals (r:1 w:1) // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_approved() -> Weight { - Weight::from_ref_time(60_098_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(5 as RefTimeWeight)) + Weight::from_ref_time(60_098_000 as u64) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(5 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(35_630_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(35_630_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn force_cancel_approval() -> Weight { - Weight::from_ref_time(37_399_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(37_399_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs index 53b853de67b..87359fbd4e8 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. @@ -48,44 +48,44 @@ pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(41_006_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(41_006_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(31_329_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(31_329_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { - Weight::from_ref_time(21_075_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(21_075_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { - Weight::from_ref_time(24_413_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(24_413_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { - Weight::from_ref_time(41_434_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(41_434_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { - Weight::from_ref_time(37_653_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(37_653_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { - Weight::from_ref_time(18_701_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(18_701_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs index ba677a4521d..d4e2c46ecbd 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_collator_selection`. @@ -50,21 +50,21 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection Invulnerables (r:0 w:1) /// The range of component `b` is `[1, 100]`. fn set_invulnerables(b: u32, ) -> Weight { - Weight::from_ref_time(8_587_000 as RefTimeWeight) + Weight::from_ref_time(8_587_000 as u64) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(3_304_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(b as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_304_000 as u64).saturating_mul(b as u64)) + .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection DesiredCandidates (r:0 w:1) fn set_desired_candidates() -> Weight { - Weight::from_ref_time(9_027_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(9_027_000 as u64) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection CandidacyBond (r:0 w:1) fn set_candidacy_bond() -> Weight { - Weight::from_ref_time(9_244_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(9_244_000 as u64) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection DesiredCandidates (r:1 w:0) @@ -74,29 +74,29 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[1, 1000]`. fn register_as_candidate(c: u32, ) -> Weight { - Weight::from_ref_time(60_984_000 as RefTimeWeight) + Weight::from_ref_time(60_984_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(89_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(89_000 as u64).saturating_mul(c as u64)) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[6, 1000]`. fn leave_intent(c: u32, ) -> Weight { - Weight::from_ref_time(49_046_000 as RefTimeWeight) + Weight::from_ref_time(49_046_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(118_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(118_000 as u64).saturating_mul(c as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:2 w:2) // Storage: System BlockWeight (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) fn note_author() -> Weight { - Weight::from_ref_time(32_269_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(32_269_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:1000 w:1) @@ -106,13 +106,13 @@ impl pallet_collator_selection::WeightInfo for WeightIn /// The range of component `r` is `[1, 1000]`. /// The range of component `c` is `[1, 1000]`. fn new_session(r: u32, c: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 1_992_000 - .saturating_add(Weight::from_ref_time(10_521_000 as RefTimeWeight).saturating_mul(r as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(10_521_000 as u64).saturating_mul(r as u64)) // Standard Error: 1_992_000 - .saturating_add(Weight::from_ref_time(53_162_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(53_162_000 as u64).saturating_mul(c as u64)) + .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(r as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(c as u64))) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs index 8bd84edb8dd..1f543e13402 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_multisig`. @@ -48,22 +48,22 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - Weight::from_ref_time(17_175_000 as RefTimeWeight) + Weight::from_ref_time(17_175_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(35_937_000 as RefTimeWeight) + Weight::from_ref_time(35_937_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(97_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(97_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -71,38 +71,38 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(37_468_000 as RefTimeWeight) + Weight::from_ref_time(37_468_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(89_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(89_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(25_557_000 as RefTimeWeight) + Weight::from_ref_time(25_557_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(83_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(83_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(38_127_000 as RefTimeWeight) + Weight::from_ref_time(38_127_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(88_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(88_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -110,53 +110,53 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(47_383_000 as RefTimeWeight) + Weight::from_ref_time(47_383_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(127_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(127_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - Weight::from_ref_time(33_472_000 as RefTimeWeight) + Weight::from_ref_time(33_472_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(102_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(102_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - Weight::from_ref_time(21_612_000 as RefTimeWeight) + Weight::from_ref_time(21_612_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(119_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(119_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_complete(s: u32, ) -> Weight { - Weight::from_ref_time(68_168_000 as RefTimeWeight) + Weight::from_ref_time(68_168_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(157_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(157_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - Weight::from_ref_time(52_748_000 as RefTimeWeight) + Weight::from_ref_time(52_748_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(117_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs index 7def013522c..1f07febb57a 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. @@ -49,10 +49,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:0) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - Weight::from_ref_time(17_582_000 as RefTimeWeight) + Weight::from_ref_time(17_582_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(77_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(77_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -60,39 +60,39 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(34_603_000 as RefTimeWeight) + Weight::from_ref_time(34_603_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(169_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(169_000 as u64).saturating_mul(a as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(87_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(87_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn remove_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(24_496_000 as RefTimeWeight) + Weight::from_ref_time(24_496_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(179_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(179_000 as u64).saturating_mul(a as u64)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(25_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(25_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(24_237_000 as RefTimeWeight) + Weight::from_ref_time(24_237_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(181_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(181_000 as u64).saturating_mul(a as u64)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(29_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(29_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -100,58 +100,58 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(32_065_000 as RefTimeWeight) + Weight::from_ref_time(32_065_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(166_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(166_000 as u64).saturating_mul(a as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(91_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(91_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(27_168_000 as RefTimeWeight) + Weight::from_ref_time(27_168_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(117_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(27_233_000 as RefTimeWeight) + Weight::from_ref_time(27_233_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(121_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(121_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - Weight::from_ref_time(23_010_000 as RefTimeWeight) + Weight::from_ref_time(23_010_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(95_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(95_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn anonymous(p: u32, ) -> Weight { - Weight::from_ref_time(30_378_000 as RefTimeWeight) + Weight::from_ref_time(30_378_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(16_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(16_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. fn kill_anonymous(p: u32, ) -> Weight { - Weight::from_ref_time(23_977_000 as RefTimeWeight) + Weight::from_ref_time(23_977_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(76_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(76_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs index ec0e46647d0..2271b8622bf 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. @@ -49,15 +49,15 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:1 w:1) fn set_keys() -> Weight { - Weight::from_ref_time(16_170_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(16_170_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:1) fn purge_keys() -> Weight { - Weight::from_ref_time(13_246_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(13_246_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs index 5140207b912..37330043a2b 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. @@ -48,11 +48,11 @@ pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { // Storage: Timestamp Now (r:1 w:1) fn set() -> Weight { - Weight::from_ref_time(6_737_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(6_737_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } fn on_finalize() -> Weight { - Weight::from_ref_time(2_329_000 as RefTimeWeight) + Weight::from_ref_time(2_329_000 as u64) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs index 3e59ddb6bf8..c50d6c653b0 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs @@ -43,7 +43,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_uniques`. @@ -53,17 +53,17 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn create() -> Weight { - Weight::from_ref_time(27_424_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(27_424_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques NextCollectionId (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_create() -> Weight { - Weight::from_ref_time(17_098_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(17_098_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:0) @@ -77,191 +77,191 @@ impl pallet_uniques::WeightInfo for WeightInfo { /// The range of component `m` is `[0, 1000]`. /// The range of component `a` is `[0, 1000]`. fn destroy(n: u32, m: u32, a: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(10_919_000 as RefTimeWeight).saturating_mul(n as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(10_919_000 as u64).saturating_mul(n as u64)) // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(1_679_000 as RefTimeWeight).saturating_mul(m as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_679_000 as u64).saturating_mul(m as u64)) // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(1_463_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(n as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(n as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(m as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(1_463_000 as u64).saturating_mul(a as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(n as u64))) + .saturating_add(T::DbWeight::get().writes(4 as u64)) + .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(n as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(m as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(a as u64))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques CollectionMaxSupply (r:1 w:0) // Storage: Uniques Account (r:0 w:1) fn mint() -> Weight { - Weight::from_ref_time(36_329_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + Weight::from_ref_time(36_329_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:1) // Storage: Uniques ItemPriceOf (r:0 w:1) fn burn() -> Weight { - Weight::from_ref_time(36_746_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(36_746_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:2) // Storage: Uniques ItemPriceOf (r:0 w:1) fn transfer() -> Weight { - Weight::from_ref_time(28_916_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(28_916_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:100 w:100) /// The range of component `i` is `[0, 5000]`. fn redeposit(i: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 15_000 - .saturating_add(Weight::from_ref_time(12_745_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(12_745_000 as u64).saturating_mul(i as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(i as u64))) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn freeze() -> Weight { - Weight::from_ref_time(21_813_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(21_813_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn thaw() -> Weight { - Weight::from_ref_time(22_088_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(22_088_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) fn freeze_collection() -> Weight { - Weight::from_ref_time(17_184_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_184_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) fn thaw_collection() -> Weight { - Weight::from_ref_time(17_311_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_311_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:2) fn transfer_ownership() -> Weight { - Weight::from_ref_time(25_174_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(25_174_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Uniques Class (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(17_879_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_879_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_item_status() -> Weight { - Weight::from_ref_time(20_491_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(20_491_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn set_attribute() -> Weight { - Weight::from_ref_time(42_444_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(42_444_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn clear_attribute() -> Weight { - Weight::from_ref_time(41_217_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(41_217_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn set_metadata() -> Weight { - Weight::from_ref_time(34_559_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(34_559_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(34_863_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(34_863_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn set_collection_metadata() -> Weight { - Weight::from_ref_time(33_199_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(33_199_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn clear_collection_metadata() -> Weight { - Weight::from_ref_time(31_472_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(31_472_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(23_618_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(23_618_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(23_507_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(23_507_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) fn set_accept_ownership() -> Weight { - Weight::from_ref_time(21_120_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(21_120_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques CollectionMaxSupply (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn set_collection_max_supply() -> Weight { - Weight::from_ref_time(20_664_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(20_664_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Asset (r:1 w:0) // Storage: Uniques ItemPriceOf (r:0 w:1) fn set_price() -> Weight { - Weight::from_ref_time(19_938_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(19_938_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques ItemPriceOf (r:1 w:1) // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Account (r:0 w:2) fn buy_item() -> Weight { - Weight::from_ref_time(39_254_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(39_254_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs index b388ff4a518..9c6fece01af 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_utility`. @@ -48,26 +48,26 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - Weight::from_ref_time(30_959_000 as RefTimeWeight) + Weight::from_ref_time(30_959_000 as u64) // Standard Error: 6_000 - .saturating_add(Weight::from_ref_time(3_220_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_220_000 as u64).saturating_mul(c as u64)) } fn as_derivative() -> Weight { - Weight::from_ref_time(4_732_000 as RefTimeWeight) + Weight::from_ref_time(4_732_000 as u64) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - Weight::from_ref_time(16_465_000 as RefTimeWeight) + Weight::from_ref_time(16_465_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_364_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_364_000 as u64).saturating_mul(c as u64)) } fn dispatch_as() -> Weight { - Weight::from_ref_time(11_903_000 as RefTimeWeight) + Weight::from_ref_time(11_903_000 as u64) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - Weight::from_ref_time(22_621_000 as RefTimeWeight) + Weight::from_ref_time(22_621_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(3_147_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_147_000 as u64).saturating_mul(c as u64)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs index 8bcdcc3b039..e7d6c954dce 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -43,7 +43,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weights for `pallet_xcm_benchmarks::fungible`. @@ -51,15 +51,15 @@ pub struct WeightInfo(PhantomData); impl WeightInfo { // Storage: System Account (r:1 w:1) pub(crate) fn withdraw_asset() -> Weight { - Weight::from_ref_time(34_002_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(34_002_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) pub(crate) fn transfer_asset() -> Weight { - Weight::from_ref_time(38_285_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(38_285_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:2 w:2) // Storage: ParachainInfo ParachainId (r:1 w:0) @@ -69,18 +69,18 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn transfer_reserve_asset() -> Weight { - Weight::from_ref_time(55_068_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(8 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(55_068_000 as u64) + .saturating_add(T::DbWeight::get().reads(8 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } pub(crate) fn receive_teleported_asset() -> Weight { - Weight::from_ref_time(7_796_000 as RefTimeWeight) + Weight::from_ref_time(7_796_000 as u64) } // Storage: System Account (r:1 w:1) pub(crate) fn deposit_asset() -> Weight { - Weight::from_ref_time(35_092_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(35_092_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) // Storage: ParachainInfo ParachainId (r:1 w:0) @@ -90,9 +90,9 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn deposit_reserve_asset() -> Weight { - Weight::from_ref_time(50_590_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(7 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + Weight::from_ref_time(50_590_000 as u64) + .saturating_add(T::DbWeight::get().reads(7 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: ParachainInfo ParachainId (r:1 w:0) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -101,8 +101,8 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_teleport() -> Weight { - Weight::from_ref_time(27_220_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(27_220_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 2c42c5619ba..7af8b8b280b 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -43,7 +43,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weights for `pallet_xcm_benchmarks::generic`. @@ -56,38 +56,38 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn query_holding() -> Weight { - Weight::from_ref_time(682_639_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(682_639_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } pub(crate) fn buy_execution() -> Weight { - Weight::from_ref_time(9_272_000 as RefTimeWeight) + Weight::from_ref_time(9_272_000 as u64) } // Storage: PolkadotXcm Queries (r:1 w:0) pub(crate) fn query_response() -> Weight { - Weight::from_ref_time(17_084_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + Weight::from_ref_time(17_084_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) } pub(crate) fn transact() -> Weight { - Weight::from_ref_time(20_265_000 as RefTimeWeight) + Weight::from_ref_time(20_265_000 as u64) } pub(crate) fn refund_surplus() -> Weight { - Weight::from_ref_time(9_422_000 as RefTimeWeight) + Weight::from_ref_time(9_422_000 as u64) } pub(crate) fn set_error_handler() -> Weight { - Weight::from_ref_time(5_545_000 as RefTimeWeight) + Weight::from_ref_time(5_545_000 as u64) } pub(crate) fn set_appendix() -> Weight { - Weight::from_ref_time(5_450_000 as RefTimeWeight) + Weight::from_ref_time(5_450_000 as u64) } pub(crate) fn clear_error() -> Weight { - Weight::from_ref_time(5_519_000 as RefTimeWeight) + Weight::from_ref_time(5_519_000 as u64) } pub(crate) fn descend_origin() -> Weight { - Weight::from_ref_time(6_398_000 as RefTimeWeight) + Weight::from_ref_time(6_398_000 as u64) } pub(crate) fn clear_origin() -> Weight { - Weight::from_ref_time(5_498_000 as RefTimeWeight) + Weight::from_ref_time(5_498_000 as u64) } // Storage: PolkadotXcm SupportedVersion (r:1 w:0) // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) @@ -95,18 +95,18 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn report_error() -> Weight { - Weight::from_ref_time(15_784_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(15_784_000 as u64) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: PolkadotXcm AssetTraps (r:1 w:1) pub(crate) fn claim_asset() -> Weight { - Weight::from_ref_time(11_861_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(11_861_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } pub(crate) fn trap() -> Weight { - Weight::from_ref_time(5_462_000 as RefTimeWeight) + Weight::from_ref_time(5_462_000 as u64) } // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -115,14 +115,14 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn subscribe_version() -> Weight { - Weight::from_ref_time(18_997_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + Weight::from_ref_time(18_997_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) pub(crate) fn unsubscribe_version() -> Weight { - Weight::from_ref_time(8_684_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(8_684_000 as u64) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: ParachainInfo ParachainId (r:1 w:0) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -131,8 +131,8 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_reserve_withdraw() -> Weight { - Weight::from_ref_time(883_121_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(883_121_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/assets/westmint/src/weights/cumulus_pallet_xcmp_queue.rs index 5529dac90d8..4df6a114f95 100644 --- a/parachains/runtimes/assets/westmint/src/weights/cumulus_pallet_xcmp_queue.rs +++ b/parachains/runtimes/assets/westmint/src/weights/cumulus_pallet_xcmp_queue.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `cumulus_pallet_xcmp_queue`. @@ -48,14 +48,14 @@ pub struct WeightInfo(PhantomData); impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - Weight::from_ref_time(5_463_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(5_463_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - Weight::from_ref_time(5_221_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(5_221_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/frame_system.rs b/parachains/runtimes/assets/westmint/src/weights/frame_system.rs index b659f0a52f3..f1cc1a39d92 100644 --- a/parachains/runtimes/assets/westmint/src/weights/frame_system.rs +++ b/parachains/runtimes/assets/westmint/src/weights/frame_system.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `frame_system`. @@ -48,43 +48,43 @@ pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. fn remark(_b: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(b as u64)) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) fn set_heap_pages() -> Weight { - Weight::from_ref_time(5_726_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(5_726_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn set_storage(i: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(616_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(616_000 as u64).saturating_mul(i as u64)) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn kill_storage(i: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(519_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(519_000 as u64).saturating_mul(i as u64)) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `p` is `[1, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(1_067_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(p as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(1_067_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(p as u64))) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs index 49edfdfd0e0..5a9324262b0 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_assets`. @@ -48,15 +48,15 @@ pub struct WeightInfo(PhantomData); impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:1) fn create() -> Weight { - Weight::from_ref_time(25_905_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(25_905_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn force_create() -> Weight { - Weight::from_ref_time(14_977_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(14_977_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:5002 w:5001) @@ -67,169 +67,169 @@ impl pallet_assets::WeightInfo for WeightInfo { /// The range of component `s` is `[0, 5000]`. /// The range of component `a` is `[0, 500]`. fn destroy(c: u32, s: u32, a: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 46_000 - .saturating_add(Weight::from_ref_time(16_133_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(16_133_000 as u64).saturating_mul(c as u64)) // Standard Error: 46_000 - .saturating_add(Weight::from_ref_time(18_915_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(18_915_000 as u64).saturating_mul(s as u64)) // Standard Error: 464_000 - .saturating_add(Weight::from_ref_time(16_795_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) - .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(s as RefTimeWeight))) - .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(s as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(16_795_000 as u64).saturating_mul(a as u64)) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) + .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(s as u64))) + .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(a as u64))) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(c as u64))) + .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(s as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(a as u64))) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn mint() -> Weight { - Weight::from_ref_time(29_903_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(29_903_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn burn() -> Weight { - Weight::from_ref_time(34_384_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(34_384_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(48_218_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(48_218_000 as u64) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(40_558_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(40_558_000 as u64) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn force_transfer() -> Weight { - Weight::from_ref_time(48_330_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(48_330_000 as u64) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn freeze() -> Weight { - Weight::from_ref_time(21_218_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(21_218_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn thaw() -> Weight { - Weight::from_ref_time(21_227_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(21_227_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn freeze_asset() -> Weight { - Weight::from_ref_time(17_906_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_906_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn thaw_asset() -> Weight { - Weight::from_ref_time(17_669_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_669_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Metadata (r:1 w:0) fn transfer_ownership() -> Weight { - Weight::from_ref_time(18_756_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(18_756_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(17_203_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_203_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn set_metadata(_n: u32, s: u32, ) -> Weight { - Weight::from_ref_time(31_757_000 as RefTimeWeight) + Weight::from_ref_time(31_757_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(31_669_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(31_669_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn force_set_metadata(_n: u32, s: u32, ) -> Weight { - Weight::from_ref_time(18_566_000 as RefTimeWeight) + Weight::from_ref_time(18_566_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn force_clear_metadata() -> Weight { - Weight::from_ref_time(31_467_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(31_467_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn force_asset_status() -> Weight { - Weight::from_ref_time(16_275_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(16_275_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(34_436_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(34_436_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Approvals (r:1 w:1) // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_approved() -> Weight { - Weight::from_ref_time(60_445_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(5 as RefTimeWeight)) + Weight::from_ref_time(60_445_000 as u64) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(5 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(35_819_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(35_819_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn force_cancel_approval() -> Weight { - Weight::from_ref_time(36_535_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(36_535_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs index b76ea1e7e61..6953a52f213 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. @@ -48,44 +48,44 @@ pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(40_330_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(40_330_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(30_938_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(30_938_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { - Weight::from_ref_time(20_284_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(20_284_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { - Weight::from_ref_time(24_018_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(24_018_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { - Weight::from_ref_time(40_970_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(40_970_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { - Weight::from_ref_time(36_243_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(36_243_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { - Weight::from_ref_time(18_374_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(18_374_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs index 240ec68e019..ba0d3b311a2 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_collator_selection`. @@ -50,21 +50,21 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection Invulnerables (r:0 w:1) /// The range of component `b` is `[1, 100]`. fn set_invulnerables(b: u32, ) -> Weight { - Weight::from_ref_time(6_669_000 as RefTimeWeight) + Weight::from_ref_time(6_669_000 as u64) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(3_218_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(b as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_218_000 as u64).saturating_mul(b as u64)) + .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection DesiredCandidates (r:0 w:1) fn set_desired_candidates() -> Weight { - Weight::from_ref_time(8_348_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(8_348_000 as u64) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection CandidacyBond (r:0 w:1) fn set_candidacy_bond() -> Weight { - Weight::from_ref_time(8_592_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(8_592_000 as u64) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection DesiredCandidates (r:1 w:0) @@ -74,29 +74,29 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[1, 1000]`. fn register_as_candidate(c: u32, ) -> Weight { - Weight::from_ref_time(55_542_000 as RefTimeWeight) + Weight::from_ref_time(55_542_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(92_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(92_000 as u64).saturating_mul(c as u64)) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[2, 1000]`. fn leave_intent(c: u32, ) -> Weight { - Weight::from_ref_time(52_080_000 as RefTimeWeight) + Weight::from_ref_time(52_080_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(109_000 as u64).saturating_mul(c as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:2 w:2) // Storage: System BlockWeight (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) fn note_author() -> Weight { - Weight::from_ref_time(31_546_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(31_546_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:1000 w:1) @@ -106,13 +106,13 @@ impl pallet_collator_selection::WeightInfo for WeightIn /// The range of component `r` is `[1, 1000]`. /// The range of component `c` is `[1, 1000]`. fn new_session(r: u32, c: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 1_895_000 - .saturating_add(Weight::from_ref_time(9_941_000 as RefTimeWeight).saturating_mul(r as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(9_941_000 as u64).saturating_mul(r as u64)) // Standard Error: 1_895_000 - .saturating_add(Weight::from_ref_time(50_628_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(50_628_000 as u64).saturating_mul(c as u64)) + .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(r as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(c as u64))) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs index 3d8474e18e1..79445836408 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_multisig`. @@ -48,22 +48,22 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - Weight::from_ref_time(17_854_000 as RefTimeWeight) + Weight::from_ref_time(17_854_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(36_613_000 as RefTimeWeight) + Weight::from_ref_time(36_613_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(96_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(96_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -71,38 +71,38 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(40_039_000 as RefTimeWeight) + Weight::from_ref_time(40_039_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(72_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(72_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(26_059_000 as RefTimeWeight) + Weight::from_ref_time(26_059_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(82_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(82_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(38_292_000 as RefTimeWeight) + Weight::from_ref_time(38_292_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(90_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(90_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -110,53 +110,53 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(47_468_000 as RefTimeWeight) + Weight::from_ref_time(47_468_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(129_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(129_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - Weight::from_ref_time(33_492_000 as RefTimeWeight) + Weight::from_ref_time(33_492_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(110_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(110_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - Weight::from_ref_time(22_147_000 as RefTimeWeight) + Weight::from_ref_time(22_147_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(113_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(113_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_complete(s: u32, ) -> Weight { - Weight::from_ref_time(66_106_000 as RefTimeWeight) + Weight::from_ref_time(66_106_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(161_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(161_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - Weight::from_ref_time(52_566_000 as RefTimeWeight) + Weight::from_ref_time(52_566_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(117_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs index 1bd7ce2b45b..fc72d28e915 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. @@ -49,10 +49,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:0) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - Weight::from_ref_time(18_084_000 as RefTimeWeight) + Weight::from_ref_time(18_084_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(83_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(83_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -60,39 +60,39 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(35_619_000 as RefTimeWeight) + Weight::from_ref_time(35_619_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(172_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(172_000 as u64).saturating_mul(a as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(89_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(89_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn remove_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(24_774_000 as RefTimeWeight) + Weight::from_ref_time(24_774_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(190_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(190_000 as u64).saturating_mul(a as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(33_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(33_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(25_855_000 as RefTimeWeight) + Weight::from_ref_time(25_855_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(160_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(160_000 as u64).saturating_mul(a as u64)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(15_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(15_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -100,58 +100,58 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(32_874_000 as RefTimeWeight) + Weight::from_ref_time(32_874_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(172_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(172_000 as u64).saturating_mul(a as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(97_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(97_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(28_312_000 as RefTimeWeight) + Weight::from_ref_time(28_312_000 as u64) // Standard Error: 4_000 - .saturating_add(Weight::from_ref_time(105_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(105_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(28_197_000 as RefTimeWeight) + Weight::from_ref_time(28_197_000 as u64) // Standard Error: 4_000 - .saturating_add(Weight::from_ref_time(121_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(121_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - Weight::from_ref_time(23_659_000 as RefTimeWeight) + Weight::from_ref_time(23_659_000 as u64) // Standard Error: 8_000 - .saturating_add(Weight::from_ref_time(106_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(106_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn anonymous(p: u32, ) -> Weight { - Weight::from_ref_time(31_575_000 as RefTimeWeight) + Weight::from_ref_time(31_575_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(35_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(35_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. fn kill_anonymous(p: u32, ) -> Weight { - Weight::from_ref_time(24_640_000 as RefTimeWeight) + Weight::from_ref_time(24_640_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(80_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(80_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs index 9463c5747e2..020535b5a36 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. @@ -49,15 +49,15 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:1 w:1) fn set_keys() -> Weight { - Weight::from_ref_time(16_457_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(16_457_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:1) fn purge_keys() -> Weight { - Weight::from_ref_time(13_585_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(13_585_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs index a09dc7cf368..749d60095de 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. @@ -48,11 +48,11 @@ pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { // Storage: Timestamp Now (r:1 w:1) fn set() -> Weight { - Weight::from_ref_time(6_762_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(6_762_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } fn on_finalize() -> Weight { - Weight::from_ref_time(2_387_000 as RefTimeWeight) + Weight::from_ref_time(2_387_000 as u64) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs index 365e23a8e98..ebc8c3e49c9 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs @@ -43,7 +43,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_uniques`. @@ -53,17 +53,17 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn create() -> Weight { - Weight::from_ref_time(27_462_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(27_462_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques NextCollectionId (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_create() -> Weight { - Weight::from_ref_time(16_480_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(16_480_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:0) @@ -77,191 +77,191 @@ impl pallet_uniques::WeightInfo for WeightInfo { /// The range of component `m` is `[0, 1000]`. /// The range of component `a` is `[0, 1000]`. fn destroy(n: u32, m: u32, a: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(10_956_000 as RefTimeWeight).saturating_mul(n as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(10_956_000 as u64).saturating_mul(n as u64)) // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(1_654_000 as RefTimeWeight).saturating_mul(m as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_654_000 as u64).saturating_mul(m as u64)) // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(1_572_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(n as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((2 as RefTimeWeight).saturating_mul(n as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(m as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(a as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(1_572_000 as u64).saturating_mul(a as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(n as u64))) + .saturating_add(T::DbWeight::get().writes(4 as u64)) + .saturating_add(T::DbWeight::get().writes((2 as u64).saturating_mul(n as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(m as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(a as u64))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques CollectionMaxSupply (r:1 w:0) // Storage: Uniques Account (r:0 w:1) fn mint() -> Weight { - Weight::from_ref_time(36_074_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + Weight::from_ref_time(36_074_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:1) // Storage: Uniques ItemPriceOf (r:0 w:1) fn burn() -> Weight { - Weight::from_ref_time(37_583_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(37_583_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Account (r:0 w:2) // Storage: Uniques ItemPriceOf (r:0 w:1) fn transfer() -> Weight { - Weight::from_ref_time(28_134_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(28_134_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques Asset (r:100 w:100) /// The range of component `i` is `[0, 5000]`. fn redeposit(i: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 16_000 - .saturating_add(Weight::from_ref_time(12_715_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(12_715_000 as u64).saturating_mul(i as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(i as u64))) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn freeze() -> Weight { - Weight::from_ref_time(21_019_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(21_019_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn thaw() -> Weight { - Weight::from_ref_time(21_907_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(21_907_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) fn freeze_collection() -> Weight { - Weight::from_ref_time(16_894_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(16_894_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) fn thaw_collection() -> Weight { - Weight::from_ref_time(16_650_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(16_650_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:2) fn transfer_ownership() -> Weight { - Weight::from_ref_time(25_095_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(25_095_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Uniques Class (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(17_428_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_428_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_item_status() -> Weight { - Weight::from_ref_time(20_018_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(20_018_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn set_attribute() -> Weight { - Weight::from_ref_time(41_955_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(41_955_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn clear_attribute() -> Weight { - Weight::from_ref_time(40_201_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(40_201_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn set_metadata() -> Weight { - Weight::from_ref_time(33_630_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(33_630_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(34_054_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(34_054_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn set_collection_metadata() -> Weight { - Weight::from_ref_time(33_283_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(33_283_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn clear_collection_metadata() -> Weight { - Weight::from_ref_time(31_298_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(31_298_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(22_430_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(22_430_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(23_005_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(23_005_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) fn set_accept_ownership() -> Weight { - Weight::from_ref_time(20_468_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(20_468_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques CollectionMaxSupply (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn set_collection_max_supply() -> Weight { - Weight::from_ref_time(19_948_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(19_948_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Asset (r:1 w:0) // Storage: Uniques ItemPriceOf (r:0 w:1) fn set_price() -> Weight { - Weight::from_ref_time(19_487_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(19_487_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques ItemPriceOf (r:1 w:1) // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Account (r:0 w:2) fn buy_item() -> Weight { - Weight::from_ref_time(39_973_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(39_973_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs index 49970ae17e4..dc441f1e89a 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_utility`. @@ -48,26 +48,26 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - Weight::from_ref_time(14_433_000 as RefTimeWeight) + Weight::from_ref_time(14_433_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_315_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_315_000 as u64).saturating_mul(c as u64)) } fn as_derivative() -> Weight { - Weight::from_ref_time(5_234_000 as RefTimeWeight) + Weight::from_ref_time(5_234_000 as u64) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - Weight::from_ref_time(16_023_000 as RefTimeWeight) + Weight::from_ref_time(16_023_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_466_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_466_000 as u64).saturating_mul(c as u64)) } fn dispatch_as() -> Weight { - Weight::from_ref_time(12_588_000 as RefTimeWeight) + Weight::from_ref_time(12_588_000 as u64) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - Weight::from_ref_time(16_094_000 as RefTimeWeight) + Weight::from_ref_time(16_094_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_280_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_280_000 as u64).saturating_mul(c as u64)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs index 6cc7e3e48e6..e5c63a23e4d 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -42,7 +42,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weights for `pallet_xcm_benchmarks::fungible`. @@ -50,15 +50,15 @@ pub struct WeightInfo(PhantomData); impl WeightInfo { // Storage: System Account (r:1 w:1) pub(crate) fn withdraw_asset() -> Weight { - Weight::from_ref_time(28_725_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(28_725_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) pub(crate) fn transfer_asset() -> Weight { - Weight::from_ref_time(33_865_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(33_865_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:2 w:2) // Storage: ParachainInfo ParachainId (r:1 w:0) @@ -68,18 +68,18 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn transfer_reserve_asset() -> Weight { - Weight::from_ref_time(48_839_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(8 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(48_839_000 as u64) + .saturating_add(T::DbWeight::get().reads(8 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } pub(crate) fn receive_teleported_asset() -> Weight { - Weight::from_ref_time(4_849_000 as RefTimeWeight) + Weight::from_ref_time(4_849_000 as u64) } // Storage: System Account (r:1 w:1) pub(crate) fn deposit_asset() -> Weight { - Weight::from_ref_time(29_778_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(29_778_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) // Storage: ParachainInfo ParachainId (r:1 w:0) @@ -89,9 +89,9 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn deposit_reserve_asset() -> Weight { - Weight::from_ref_time(45_355_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(7 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + Weight::from_ref_time(45_355_000 as u64) + .saturating_add(T::DbWeight::get().reads(7 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: ParachainInfo ParachainId (r:1 w:0) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -100,8 +100,8 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_teleport() -> Weight { - Weight::from_ref_time(23_451_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(23_451_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 1922a3ab4cf..80aff062d20 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -42,7 +42,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weights for `pallet_xcm_benchmarks::generic`. @@ -55,38 +55,38 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn query_holding() -> Weight { - Weight::from_ref_time(676_316_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(676_316_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } pub(crate) fn buy_execution() -> Weight { - Weight::from_ref_time(7_030_000 as RefTimeWeight) + Weight::from_ref_time(7_030_000 as u64) } // Storage: PolkadotXcm Queries (r:1 w:0) pub(crate) fn query_response() -> Weight { - Weight::from_ref_time(12_574_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + Weight::from_ref_time(12_574_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) } pub(crate) fn transact() -> Weight { - Weight::from_ref_time(15_764_000 as RefTimeWeight) + Weight::from_ref_time(15_764_000 as u64) } pub(crate) fn refund_surplus() -> Weight { - Weight::from_ref_time(7_200_000 as RefTimeWeight) + Weight::from_ref_time(7_200_000 as u64) } pub(crate) fn set_error_handler() -> Weight { - Weight::from_ref_time(3_310_000 as RefTimeWeight) + Weight::from_ref_time(3_310_000 as u64) } pub(crate) fn set_appendix() -> Weight { - Weight::from_ref_time(3_260_000 as RefTimeWeight) + Weight::from_ref_time(3_260_000 as u64) } pub(crate) fn clear_error() -> Weight { - Weight::from_ref_time(3_277_000 as RefTimeWeight) + Weight::from_ref_time(3_277_000 as u64) } pub(crate) fn descend_origin() -> Weight { - Weight::from_ref_time(3_913_000 as RefTimeWeight) + Weight::from_ref_time(3_913_000 as u64) } pub(crate) fn clear_origin() -> Weight { - Weight::from_ref_time(3_354_000 as RefTimeWeight) + Weight::from_ref_time(3_354_000 as u64) } // Storage: PolkadotXcm SupportedVersion (r:1 w:0) // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) @@ -94,18 +94,18 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn report_error() -> Weight { - Weight::from_ref_time(13_028_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(13_028_000 as u64) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: PolkadotXcm AssetTraps (r:1 w:1) pub(crate) fn claim_asset() -> Weight { - Weight::from_ref_time(7_739_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(7_739_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } pub(crate) fn trap() -> Weight { - Weight::from_ref_time(3_351_000 as RefTimeWeight) + Weight::from_ref_time(3_351_000 as u64) } // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -114,14 +114,14 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn subscribe_version() -> Weight { - Weight::from_ref_time(16_051_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + Weight::from_ref_time(16_051_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) pub(crate) fn unsubscribe_version() -> Weight { - Weight::from_ref_time(5_477_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(5_477_000 as u64) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: ParachainInfo ParachainId (r:1 w:0) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -130,8 +130,8 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_reserve_withdraw() -> Weight { - Weight::from_ref_time(874_435_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(874_435_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs index 334eef4e0f2..a1a6c309aef 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `cumulus_pallet_xcmp_queue`. @@ -48,14 +48,14 @@ pub struct WeightInfo(PhantomData); impl cumulus_pallet_xcmp_queue::WeightInfo for WeightInfo { // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_u32() -> Weight { - Weight::from_ref_time(5_294_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(5_294_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: XcmpQueue QueueConfig (r:1 w:1) fn set_config_with_weight() -> Weight { - Weight::from_ref_time(5_180_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(5_180_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs index cbb817875e4..bd1bec80950 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/frame_system.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `frame_system`. @@ -48,43 +48,43 @@ pub struct WeightInfo(PhantomData); impl frame_system::WeightInfo for WeightInfo { /// The range of component `b` is `[0, 3932160]`. fn remark(_b: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(b as u64)) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) fn set_heap_pages() -> Weight { - Weight::from_ref_time(5_069_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(5_069_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn set_storage(i: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(624_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(624_000 as u64).saturating_mul(i as u64)) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn kill_storage(i: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(530_000 as RefTimeWeight).saturating_mul(i as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(i as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(530_000 as u64).saturating_mul(i as u64)) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `p` is `[1, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(1_059_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(p as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(1_059_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(p as u64))) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs index c31d53eec27..e7528d5c3d9 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_alliance.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_alliance`. @@ -56,24 +56,24 @@ impl pallet_alliance::WeightInfo for WeightInfo { /// The range of component `y` is `[0, 90]`. /// The range of component `p` is `[1, 100]`. fn propose_proposed(_b: u32, _x: u32, _y: u32, p: u32, ) -> Weight { - Weight::from_ref_time(53_023_000 as RefTimeWeight) + Weight::from_ref_time(53_023_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(132_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(132_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Alliance Members (r:2 w:0) // Storage: AllianceMotion Voting (r:1 w:1) /// The range of component `x` is `[3, 10]`. /// The range of component `y` is `[2, 90]`. fn vote(x: u32, y: u32, ) -> Weight { - Weight::from_ref_time(33_003_000 as RefTimeWeight) + Weight::from_ref_time(33_003_000 as u64) // Standard Error: 106_000 - .saturating_add(Weight::from_ref_time(312_000 as RefTimeWeight).saturating_mul(x as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(312_000 as u64).saturating_mul(x as u64)) // Standard Error: 4_000 - .saturating_add(Weight::from_ref_time(82_000 as RefTimeWeight).saturating_mul(y as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(82_000 as u64).saturating_mul(y as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Alliance Members (r:1 w:0) // Storage: AllianceMotion ProposalOf (r:1 w:1) @@ -81,11 +81,11 @@ impl pallet_alliance::WeightInfo for WeightInfo { // Storage: AllianceMotion Voting (r:0 w:1) /// The range of component `p` is `[1, 100]`. fn veto(p: u32, ) -> Weight { - Weight::from_ref_time(27_289_000 as RefTimeWeight) + Weight::from_ref_time(27_289_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(131_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(131_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Alliance Members (r:1 w:0) // Storage: AllianceMotion Voting (r:1 w:1) @@ -96,15 +96,15 @@ impl pallet_alliance::WeightInfo for WeightInfo { /// The range of component `y` is `[2, 90]`. /// The range of component `p` is `[1, 100]`. fn close_early_disapproved(x: u32, y: u32, p: u32, ) -> Weight { - Weight::from_ref_time(31_884_000 as RefTimeWeight) + Weight::from_ref_time(31_884_000 as u64) // Standard Error: 72_000 - .saturating_add(Weight::from_ref_time(358_000 as RefTimeWeight).saturating_mul(x as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(358_000 as u64).saturating_mul(x as u64)) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).saturating_mul(y as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(109_000 as u64).saturating_mul(y as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(109_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Alliance Members (r:1 w:0) // Storage: AllianceMotion Voting (r:1 w:1) @@ -116,17 +116,17 @@ impl pallet_alliance::WeightInfo for WeightInfo { /// The range of component `y` is `[2, 90]`. /// The range of component `p` is `[1, 100]`. fn close_early_approved(b: u32, x: u32, y: u32, p: u32, ) -> Weight { - Weight::from_ref_time(43_205_000 as RefTimeWeight) + Weight::from_ref_time(43_205_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(b as u64)) // Standard Error: 73_000 - .saturating_add(Weight::from_ref_time(123_000 as RefTimeWeight).saturating_mul(x as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(123_000 as u64).saturating_mul(x as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(91_000 as RefTimeWeight).saturating_mul(y as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(91_000 as u64).saturating_mul(y as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(114_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(114_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Alliance Members (r:1 w:0) // Storage: AllianceMotion Voting (r:1 w:1) @@ -139,15 +139,15 @@ impl pallet_alliance::WeightInfo for WeightInfo { /// The range of component `y` is `[2, 90]`. /// The range of component `p` is `[1, 100]`. fn close_disapproved(x: u32, y: u32, p: u32, ) -> Weight { - Weight::from_ref_time(49_769_000 as RefTimeWeight) + Weight::from_ref_time(49_769_000 as u64) // Standard Error: 69_000 - .saturating_add(Weight::from_ref_time(352_000 as RefTimeWeight).saturating_mul(x as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(352_000 as u64).saturating_mul(x as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(81_000 as RefTimeWeight).saturating_mul(y as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(81_000 as u64).saturating_mul(y as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(100_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(100_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Alliance Members (r:1 w:0) // Storage: AllianceMotion Voting (r:1 w:1) @@ -160,15 +160,15 @@ impl pallet_alliance::WeightInfo for WeightInfo { /// The range of component `y` is `[2, 90]`. /// The range of component `p` is `[1, 100]`. fn close_approved(b: u32, _x: u32, y: u32, p: u32, ) -> Weight { - Weight::from_ref_time(40_901_000 as RefTimeWeight) + Weight::from_ref_time(40_901_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_000 as u64).saturating_mul(b as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(79_000 as RefTimeWeight).saturating_mul(y as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(79_000 as u64).saturating_mul(y as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(102_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(102_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Alliance Members (r:3 w:3) // Storage: AllianceMotion Members (r:1 w:1) @@ -176,55 +176,55 @@ impl pallet_alliance::WeightInfo for WeightInfo { /// The range of component `y` is `[0, 90]`. /// The range of component `z` is `[0, 100]`. fn init_members(_x: u32, y: u32, z: u32, ) -> Weight { - Weight::from_ref_time(39_647_000 as RefTimeWeight) + Weight::from_ref_time(39_647_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(123_000 as RefTimeWeight).saturating_mul(y as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(123_000 as u64).saturating_mul(y as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(116_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(116_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Alliance Rule (r:0 w:1) fn set_rule() -> Weight { - Weight::from_ref_time(14_689_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(14_689_000 as u64) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Alliance Announcements (r:1 w:1) fn announce() -> Weight { - Weight::from_ref_time(15_988_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(15_988_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Alliance Announcements (r:1 w:1) fn remove_announcement() -> Weight { - Weight::from_ref_time(16_823_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(16_823_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Alliance UnscrupulousAccounts (r:1 w:0) // Storage: Alliance Members (r:4 w:1) // Storage: System Account (r:1 w:1) // Storage: Alliance DepositOf (r:0 w:1) fn join_alliance() -> Weight { - Weight::from_ref_time(46_340_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + Weight::from_ref_time(46_340_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Alliance Members (r:4 w:1) // Storage: Alliance UnscrupulousAccounts (r:1 w:0) fn nominate_ally() -> Weight { - Weight::from_ref_time(36_225_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(36_225_000 as u64) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Alliance Members (r:3 w:2) // Storage: AllianceMotion Proposals (r:1 w:0) // Storage: AllianceMotion Members (r:0 w:1) // Storage: AllianceMotion Prime (r:0 w:1) fn elevate_ally() -> Weight { - Weight::from_ref_time(30_236_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(4 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(30_236_000 as u64) + .saturating_add(T::DbWeight::get().reads(4 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Alliance UpForKicking (r:1 w:0) // Storage: Alliance Members (r:3 w:1) @@ -234,9 +234,9 @@ impl pallet_alliance::WeightInfo for WeightInfo { // Storage: AllianceMotion Members (r:0 w:1) // Storage: AllianceMotion Prime (r:0 w:1) fn retire() -> Weight { - Weight::from_ref_time(44_311_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(7 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(5 as RefTimeWeight)) + Weight::from_ref_time(44_311_000 as u64) + .saturating_add(T::DbWeight::get().reads(7 as u64)) + .saturating_add(T::DbWeight::get().writes(5 as u64)) } // Storage: Alliance Members (r:3 w:1) // Storage: AllianceMotion Proposals (r:1 w:0) @@ -246,34 +246,34 @@ impl pallet_alliance::WeightInfo for WeightInfo { // Storage: AllianceMotion Prime (r:0 w:1) // Storage: Alliance UpForKicking (r:0 w:1) fn kick_member() -> Weight { - Weight::from_ref_time(46_112_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(6 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(6 as RefTimeWeight)) + Weight::from_ref_time(46_112_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(6 as u64)) } // Storage: Alliance UnscrupulousAccounts (r:1 w:1) // Storage: Alliance UnscrupulousWebsites (r:1 w:1) /// The range of component `n` is `[1, 100]`. /// The range of component `l` is `[1, 255]`. fn add_unscrupulous_items(n: u32, l: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(1_300_000 as RefTimeWeight).saturating_mul(n as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_300_000 as u64).saturating_mul(n as u64)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(125_000 as RefTimeWeight).saturating_mul(l as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(125_000 as u64).saturating_mul(l as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Alliance UnscrupulousAccounts (r:1 w:1) // Storage: Alliance UnscrupulousWebsites (r:1 w:1) /// The range of component `n` is `[1, 100]`. /// The range of component `l` is `[1, 255]`. fn remove_unscrupulous_items(n: u32, l: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 197_000 - .saturating_add(Weight::from_ref_time(34_156_000 as RefTimeWeight).saturating_mul(n as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(34_156_000 as u64).saturating_mul(n as u64)) // Standard Error: 87_000 - .saturating_add(Weight::from_ref_time(7_042_000 as RefTimeWeight).saturating_mul(l as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(7_042_000 as u64).saturating_mul(l as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs index b3bb1dd2135..a7d82a458a8 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_balances.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. @@ -48,44 +48,44 @@ pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(39_576_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(39_576_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(30_212_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(30_212_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { - Weight::from_ref_time(19_428_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(19_428_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { - Weight::from_ref_time(22_526_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(22_526_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { - Weight::from_ref_time(38_737_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(38_737_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { - Weight::from_ref_time(35_648_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(35_648_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { - Weight::from_ref_time(17_197_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(17_197_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs index 0b11b4e86ad..560a8438016 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_collator_selection.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_collator_selection`. @@ -50,21 +50,21 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection Invulnerables (r:0 w:1) /// The range of component `b` is `[1, 100]`. fn set_invulnerables(b: u32, ) -> Weight { - Weight::from_ref_time(7_128_000 as RefTimeWeight) + Weight::from_ref_time(7_128_000 as u64) // Standard Error: 4_000 - .saturating_add(Weight::from_ref_time(3_105_000 as RefTimeWeight).saturating_mul(b as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((1 as RefTimeWeight).saturating_mul(b as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_105_000 as u64).saturating_mul(b as u64)) + .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection DesiredCandidates (r:0 w:1) fn set_desired_candidates() -> Weight { - Weight::from_ref_time(7_922_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(7_922_000 as u64) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection CandidacyBond (r:0 w:1) fn set_candidacy_bond() -> Weight { - Weight::from_ref_time(8_226_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(8_226_000 as u64) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection DesiredCandidates (r:1 w:0) @@ -74,29 +74,29 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[1, 1000]`. fn register_as_candidate(c: u32, ) -> Weight { - Weight::from_ref_time(56_086_000 as RefTimeWeight) + Weight::from_ref_time(56_086_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(93_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(5 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(93_000 as u64).saturating_mul(c as u64)) + .saturating_add(T::DbWeight::get().reads(5 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[6, 1000]`. fn leave_intent(c: u32, ) -> Weight { - Weight::from_ref_time(58_436_000 as RefTimeWeight) + Weight::from_ref_time(58_436_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(102_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(102_000 as u64).saturating_mul(c as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:2 w:2) // Storage: System BlockWeight (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) fn note_author() -> Weight { - Weight::from_ref_time(29_654_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(4 as RefTimeWeight)) + Weight::from_ref_time(29_654_000 as u64) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: CollatorSelection Candidates (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:1000 w:1) @@ -106,13 +106,13 @@ impl pallet_collator_selection::WeightInfo for WeightIn /// The range of component `r` is `[1, 1000]`. /// The range of component `c` is `[1, 1000]`. fn new_session(r: u32, c: u32, ) -> Weight { - Weight::from_ref_time(0 as RefTimeWeight) + Weight::from_ref_time(0 as u64) // Standard Error: 1_911_000 - .saturating_add(Weight::from_ref_time(9_907_000 as RefTimeWeight).saturating_mul(r as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(9_907_000 as u64).saturating_mul(r as u64)) // Standard Error: 1_911_000 - .saturating_add(Weight::from_ref_time(50_916_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads((2 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(r as RefTimeWeight))) - .saturating_add(T::DbWeight::get().writes((1 as RefTimeWeight).saturating_mul(c as RefTimeWeight))) + .saturating_add(Weight::from_ref_time(50_916_000 as u64).saturating_mul(c as u64)) + .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(r as u64))) + .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(c as u64))) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs index 2da4037684b..2c14a8c971c 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_multisig`. @@ -48,22 +48,22 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - Weight::from_ref_time(17_905_000 as RefTimeWeight) + Weight::from_ref_time(17_905_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(34_787_000 as RefTimeWeight) + Weight::from_ref_time(34_787_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(105_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(105_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -71,38 +71,38 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(38_845_000 as RefTimeWeight) + Weight::from_ref_time(38_845_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(75_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(75_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(25_600_000 as RefTimeWeight) + Weight::from_ref_time(25_600_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(76_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(76_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(36_944_000 as RefTimeWeight) + Weight::from_ref_time(36_944_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(95_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(95_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) @@ -110,53 +110,53 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(46_014_000 as RefTimeWeight) + Weight::from_ref_time(46_014_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(126_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(126_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as RefTimeWeight).saturating_mul(z as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - Weight::from_ref_time(31_616_000 as RefTimeWeight) + Weight::from_ref_time(31_616_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(117_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(117_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - Weight::from_ref_time(20_862_000 as RefTimeWeight) + Weight::from_ref_time(20_862_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(109_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(109_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_complete(s: u32, ) -> Weight { - Weight::from_ref_time(64_311_000 as RefTimeWeight) + Weight::from_ref_time(64_311_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(164_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(3 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(164_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - Weight::from_ref_time(51_181_000 as RefTimeWeight) + Weight::from_ref_time(51_181_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(110_000 as RefTimeWeight).saturating_mul(s as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(110_000 as u64).saturating_mul(s as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs index 534a8d1a0a6..eb316a08649 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. @@ -49,10 +49,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:0) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - Weight::from_ref_time(16_628_000 as RefTimeWeight) + Weight::from_ref_time(16_628_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(90_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(90_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -60,39 +60,39 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(33_846_000 as RefTimeWeight) + Weight::from_ref_time(33_846_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(175_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(175_000 as u64).saturating_mul(a as u64)) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(88_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(88_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn remove_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(23_633_000 as RefTimeWeight) + Weight::from_ref_time(23_633_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(184_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(184_000 as u64).saturating_mul(a as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(29_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(29_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Announcements (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(24_121_000 as RefTimeWeight) + Weight::from_ref_time(24_121_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(177_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(177_000 as u64).saturating_mul(a as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(15_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(15_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Proxies (r:1 w:0) // Storage: Proxy Announcements (r:1 w:1) @@ -100,58 +100,58 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(31_509_000 as RefTimeWeight) + Weight::from_ref_time(31_509_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(172_000 as RefTimeWeight).saturating_mul(a as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(172_000 as u64).saturating_mul(a as u64)) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(86_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(3 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(86_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(3 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(26_168_000 as RefTimeWeight) + Weight::from_ref_time(26_168_000 as u64) // Standard Error: 4_000 - .saturating_add(Weight::from_ref_time(127_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(127_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(26_306_000 as RefTimeWeight) + Weight::from_ref_time(26_306_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(131_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(131_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - Weight::from_ref_time(22_287_000 as RefTimeWeight) + Weight::from_ref_time(22_287_000 as u64) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(85_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(85_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn anonymous(p: u32, ) -> Weight { - Weight::from_ref_time(29_260_000 as RefTimeWeight) + Weight::from_ref_time(29_260_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(38_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(38_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. fn kill_anonymous(p: u32, ) -> Weight { - Weight::from_ref_time(23_012_000 as RefTimeWeight) + Weight::from_ref_time(23_012_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(97_000 as RefTimeWeight).saturating_mul(p as RefTimeWeight)) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(97_000 as u64).saturating_mul(p as u64)) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs index f090d83650f..9d8a97c13d5 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_session.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. @@ -49,15 +49,15 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:1 w:1) fn set_keys() -> Weight { - Weight::from_ref_time(15_802_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(2 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(15_802_000 as u64) + .saturating_add(T::DbWeight::get().reads(2 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:1) fn purge_keys() -> Weight { - Weight::from_ref_time(12_925_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(2 as RefTimeWeight)) + Weight::from_ref_time(12_925_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs index b3d37bdc773..ec3ef62a08f 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_timestamp.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. @@ -48,11 +48,11 @@ pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { // Storage: Timestamp Now (r:1 w:1) fn set() -> Weight { - Weight::from_ref_time(6_170_000 as RefTimeWeight) - .saturating_add(T::DbWeight::get().reads(1 as RefTimeWeight)) - .saturating_add(T::DbWeight::get().writes(1 as RefTimeWeight)) + Weight::from_ref_time(6_170_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) } fn on_finalize() -> Weight { - Weight::from_ref_time(2_177_000 as RefTimeWeight) + Weight::from_ref_time(2_177_000 as u64) } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs index 1c5457a67b2..3d1301e8384 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_utility.rs @@ -40,7 +40,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_utility`. @@ -48,26 +48,26 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - Weight::from_ref_time(13_398_000 as RefTimeWeight) + Weight::from_ref_time(13_398_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_159_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_159_000 as u64).saturating_mul(c as u64)) } fn as_derivative() -> Weight { - Weight::from_ref_time(4_668_000 as RefTimeWeight) + Weight::from_ref_time(4_668_000 as u64) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - Weight::from_ref_time(10_742_000 as RefTimeWeight) + Weight::from_ref_time(10_742_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_375_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_375_000 as u64).saturating_mul(c as u64)) } fn dispatch_as() -> Weight { - Weight::from_ref_time(11_022_000 as RefTimeWeight) + Weight::from_ref_time(11_022_000 as u64) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - Weight::from_ref_time(14_280_000 as RefTimeWeight) + Weight::from_ref_time(14_280_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_150_000 as RefTimeWeight).saturating_mul(c as RefTimeWeight)) + .saturating_add(Weight::from_ref_time(3_150_000 as u64).saturating_mul(c as u64)) } } diff --git a/templates/xcm-bench-template.hbs b/templates/xcm-bench-template.hbs index f7faa6e8f26..3c9deb44606 100644 --- a/templates/xcm-bench-template.hbs +++ b/templates/xcm-bench-template.hbs @@ -31,7 +31,7 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::{RefTimeWeight, Weight}}; +use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; /// Weights for `{{pallet}}`. @@ -46,22 +46,22 @@ impl WeightInfo { {{~#each benchmark.components as |c| ~}} {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} ) -> Weight { - Weight::from_ref_time({{underscore benchmark.base_weight}} as RefTimeWeight) + Weight::from_ref_time({{underscore benchmark.base_weight}} as u64) {{#each benchmark.component_weight as |cw|}} // Standard Error: {{underscore cw.error}} - .saturating_add(Weight::from_ref_time({{underscore cw.slope}}).saturating_mul({{cw.name}} as RefTimeWeight)) + .saturating_add(Weight::from_ref_time({{underscore cw.slope}}).saturating_mul({{cw.name}} as u64)) {{/each}} {{#if (ne benchmark.base_reads "0")}} - .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}} as RefTimeWeight)) + .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}} as u64)) {{/if}} {{#each benchmark.component_reads as |cr|}} - .saturating_add(T::DbWeight::get().reads(({{cr.slope}} as RefTimeWeight).saturating_mul({{cr.name}} as RefTimeWeight))) + .saturating_add(T::DbWeight::get().reads(({{cr.slope}} as u64).saturating_mul({{cr.name}} as u64))) {{/each}} {{#if (ne benchmark.base_writes "0")}} - .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}} as RefTimeWeight)) + .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}} as u64)) {{/if}} {{#each benchmark.component_writes as |cw|}} - .saturating_add(T::DbWeight::get().writes(({{cw.slope}} as RefTimeWeight).saturating_mul({{cw.name}} as RefTimeWeight))) + .saturating_add(T::DbWeight::get().writes(({{cw.slope}} as u64).saturating_mul({{cw.name}} as u64))) {{/each}} } {{/each}} From 713a85dd1629147350f87b6d2894951916ed2288 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Sep 2022 00:03:13 +0200 Subject: [PATCH 039/148] Bump clap from 3.2.19 to 3.2.20 (#1591) Bumps [clap](https://github.com/clap-rs/clap) from 3.2.19 to 3.2.20. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/v3.2.20/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/v3.2.19...v3.2.20) --- updated-dependencies: - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 20 ++++++++++---------- client/cli/Cargo.toml | 2 +- parachain-template/node/Cargo.toml | 2 +- polkadot-parachain/Cargo.toml | 2 +- test/service/Cargo.toml | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index eee876955b6..d0e3ee2a50d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -961,9 +961,9 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.19" +version = "3.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68d43934757334b5c0519ff882e1ab9647ac0258b47c24c4f490d78e42697fd5" +checksum = "23b71c3ce99b7611011217b366d923f1d0a7e07a92bb2dbf1e84508c673ca3bd" dependencies = [ "atty", "bitflags", @@ -1532,7 +1532,7 @@ dependencies = [ name = "cumulus-client-cli" version = "0.1.0" dependencies = [ - "clap 3.2.19", + "clap 3.2.20", "parity-scale-codec", "sc-chain-spec", "sc-cli", @@ -2146,7 +2146,7 @@ name = "cumulus-test-service" version = "0.1.0" dependencies = [ "async-trait", - "clap 3.2.19", + "clap 3.2.20", "criterion", "cumulus-client-cli", "cumulus-client-consensus-common", @@ -2831,7 +2831,7 @@ source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e dependencies = [ "Inflector", "chrono", - "clap 3.2.19", + "clap 3.2.20", "comfy-table", "frame-benchmarking", "frame-support", @@ -6484,7 +6484,7 @@ dependencies = [ name = "parachain-template-node" version = "0.1.0" dependencies = [ - "clap 3.2.19", + "clap 3.2.20", "cumulus-client-cli", "cumulus-client-collator", "cumulus-client-consensus-aura", @@ -7087,7 +7087,7 @@ name = "polkadot-cli" version = "0.9.28" source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" dependencies = [ - "clap 3.2.19", + "clap 3.2.20", "frame-benchmarking-cli", "futures", "log", @@ -7744,7 +7744,7 @@ version = "0.9.230" dependencies = [ "assert_cmd", "async-trait", - "clap 3.2.19", + "clap 3.2.20", "collectives-polkadot-runtime", "contracts-rococo-runtime", "cumulus-client-cli", @@ -9397,7 +9397,7 @@ version = "0.10.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ "chrono", - "clap 3.2.19", + "clap 3.2.20", "fdlimit", "futures", "hex", @@ -12432,7 +12432,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" dependencies = [ - "clap 3.2.19", + "clap 3.2.20", "frame-try-runtime", "jsonrpsee", "log", diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index 0e01100ba38..422764955d2 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2021" [dependencies] -clap = { version = "3.2.19", features = ["derive", "deprecated"] } +clap = { version = "3.2.20", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } url = "2.2.2" diff --git a/parachain-template/node/Cargo.toml b/parachain-template/node/Cargo.toml index ba7df2c7665..6f6a9fac71d 100644 --- a/parachain-template/node/Cargo.toml +++ b/parachain-template/node/Cargo.toml @@ -10,7 +10,7 @@ edition = "2021" build = "build.rs" [dependencies] -clap = { version = "3.2.19", features = ["derive"] } +clap = { version = "3.2.20", features = ["derive"] } derive_more = "0.99.2" log = "0.4.17" codec = { package = "parity-scale-codec", version = "3.0.0" } diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index 2431884628a..f85f0b18df8 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -8,7 +8,7 @@ description = "Runs a polkadot parachain node which could be a collator." [dependencies] async-trait = "0.1.57" -clap = { version = "3.2.19", features = ["derive", "deprecated"] } +clap = { version = "3.2.20", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } futures = "0.3.24" hex-literal = "0.3.4" diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index 57fbfe9cfb5..901ddd4be4a 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -10,7 +10,7 @@ path = "src/main.rs" [dependencies] async-trait = "0.1.57" -clap = { version = "3.2.19", features = ["derive", "deprecated"] } +clap = { version = "3.2.20", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } criterion = { version = "0.3.6", features = [ "async_tokio" ] } jsonrpsee = { version = "0.15.1", features = ["server"] } From deaf3e4535d58ff7753d2cf43647632e1f1cb67d Mon Sep 17 00:00:00 2001 From: Squirrel Date: Mon, 5 Sep 2022 14:49:07 +0100 Subject: [PATCH 040/148] Update Integration tests Statemine & Statemint (#1526) (#1575) Co-authored-by: Ignacio Palacios --- .../statemine/xcm/0_init.yml | 4 +- .../statemine/xcm/3_hrmp-open-channels.yml | 8 +- .../statemine/xcm/4_hrmp.yml | 20 +-- .../statemint/xcm/0_init.yml | 4 +- .../statemint/xcm/3_hrmp-open-channels.yml | 8 +- .../statemint/xcm/4_hrmp.yml | 141 +----------------- 6 files changed, 29 insertions(+), 156 deletions(-) diff --git a/parachains/integration-tests/statemine/xcm/0_init.yml b/parachains/integration-tests/statemine/xcm/0_init.yml index 6f0db4cd61e..b9640517719 100644 --- a/parachains/integration-tests/statemine/xcm/0_init.yml +++ b/parachains/integration-tests/statemine/xcm/0_init.yml @@ -56,7 +56,7 @@ tests: ] events: - name: sudo.Sudid - attributes: + attribute: type: Result value: Ok - name: xcmPallet.SupportedVersionChanged @@ -82,7 +82,7 @@ tests: ] events: - name: sudo.Sudid - attributes: + attribute: type: Result value: Ok - name: xcmPallet.SupportedVersionChanged diff --git a/parachains/integration-tests/statemine/xcm/3_hrmp-open-channels.yml b/parachains/integration-tests/statemine/xcm/3_hrmp-open-channels.yml index 0745c307428..ee4b946cb48 100644 --- a/parachains/integration-tests/statemine/xcm/3_hrmp-open-channels.yml +++ b/parachains/integration-tests/statemine/xcm/3_hrmp-open-channels.yml @@ -200,10 +200,10 @@ tests: - name: polkadotXcm.Sent - name: ump.ExecutedUpward chain: *relay_chain - attributes: + attribute: type: XcmV2TraitsOutcome isComplete: true - value: 4,000,000 + value: 1,160,892,000 - name: hrmp.OpenChannelRequested chain: *relay_chain - queries: @@ -394,9 +394,9 @@ tests: - name: polkadotXcm.Sent - name: ump.ExecutedUpward chain: *relay_chain - attributes: + attribute: type: XcmV2TraitsOutcome isComplete: true - value: 4,000,000 + value: 1,160,892,000 - name: hrmp.OpenChannelAccepted chain: *relay_chain diff --git a/parachains/integration-tests/statemine/xcm/4_hrmp.yml b/parachains/integration-tests/statemine/xcm/4_hrmp.yml index a8b79ed3b9e..febec32af73 100644 --- a/parachains/integration-tests/statemine/xcm/4_hrmp.yml +++ b/parachains/integration-tests/statemine/xcm/4_hrmp.yml @@ -165,16 +165,16 @@ tests: ] events: - name: polkadotXcm.Attempted - attributes: + attribute: type: XcmV2TraitsOutcome isComplete: true value: 1,000,000,000 - name: assets.Transferred - attributes: + attribute: type: AccountId32 value: *pp_sovereign_sibl - name: assets.Transferred - attributes: + attribute: type: u128 value: *amount_to_send @@ -212,16 +212,16 @@ tests: ] events: - name: polkadotXcm.Attempted - attributes: + attribute: type: XcmV2TraitsOutcome isComplete: true value: 1,000,000,000 - name: balances.Endowed - attributes: + attribute: type: AccountId32 value: *pp_sovereign_sibl - name: balances.Endowed - attributes: + attribute: type: u128 value: *amount @@ -278,17 +278,17 @@ tests: - name: polkadotXcm.Sent - name: assets.Burned chain: *assets_parachain - attributes: + attribute: type: AccountId32 value: *pp_sovereign_sibl - name: assets.Issued chain: *assets_parachain - attributes: + attribute: type: u32 value: *asset_id - name: system.Remarked chain: *assets_parachain - attributes: + attribute: type: AccountId32 value: *pp_sovereign_sibl - queries: @@ -348,6 +348,6 @@ tests: events: - name: xcmpQueue.Fail chain: *assets_parachain - attributes: + attribute: type: XcmV2TraitsError value: FailedToTransactAsset diff --git a/parachains/integration-tests/statemint/xcm/0_init.yml b/parachains/integration-tests/statemint/xcm/0_init.yml index 6f0db4cd61e..b9640517719 100644 --- a/parachains/integration-tests/statemint/xcm/0_init.yml +++ b/parachains/integration-tests/statemint/xcm/0_init.yml @@ -56,7 +56,7 @@ tests: ] events: - name: sudo.Sudid - attributes: + attribute: type: Result value: Ok - name: xcmPallet.SupportedVersionChanged @@ -82,7 +82,7 @@ tests: ] events: - name: sudo.Sudid - attributes: + attribute: type: Result value: Ok - name: xcmPallet.SupportedVersionChanged diff --git a/parachains/integration-tests/statemint/xcm/3_hrmp-open-channels.yml b/parachains/integration-tests/statemint/xcm/3_hrmp-open-channels.yml index c8d1d852908..a164ce9c98d 100644 --- a/parachains/integration-tests/statemint/xcm/3_hrmp-open-channels.yml +++ b/parachains/integration-tests/statemint/xcm/3_hrmp-open-channels.yml @@ -198,10 +198,10 @@ tests: - name: polkadotXcm.Sent - name: ump.ExecutedUpward chain: *relay_chain - attributes: + attribute: type: XcmV2TraitsOutcome isComplete: true - value: 4,000,000 + value: 4,000,000,000 - name: hrmp.OpenChannelRequested chain: *relay_chain - queries: @@ -392,9 +392,9 @@ tests: - name: polkadotXcm.Sent - name: ump.ExecutedUpward chain: *relay_chain - attributes: + attribute: type: XcmV2TraitsOutcome isComplete: true - value: 4,000,000 + value: 4,000,000,000 - name: hrmp.OpenChannelAccepted chain: *relay_chain diff --git a/parachains/integration-tests/statemint/xcm/4_hrmp.yml b/parachains/integration-tests/statemint/xcm/4_hrmp.yml index 94783d5ed79..b6e5d4ff9d6 100644 --- a/parachains/integration-tests/statemint/xcm/4_hrmp.yml +++ b/parachains/integration-tests/statemint/xcm/4_hrmp.yml @@ -33,7 +33,7 @@ settings: suff_asset_fungible: &ap_suff_asset_fungible { id: *suff_asset, fun: { fungible: *weight_at_most }} suff_asset_fungible_fail: &ap_suff_asset_fungible_fail { id: *suff_asset_fail, fun: { fungible: *weight_at_most }} penpal_parachain: - sovereign_account: &pp_sovereign_sibl FBeL7EAeUroLWXW1yfKboiqTqVfbRBcsUKd6QqVf4kGBySS + sovereign_account: &pp_sovereign_sibl 13cKp89Msu7M2PiaCuuGr1BzAsD5V3vaVbDMs3YtjMZHdGwR signer: &pp_signer //Alice penpal_parachain_account: &pp_acc '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d' decodedCalls: @@ -164,16 +164,16 @@ tests: ] events: - name: polkadotXcm.Attempted - attributes: + attribute: type: XcmV2TraitsOutcome isComplete: true value: 1,000,000,000 - name: assets.Transferred - attributes: + attribute: type: AccountId32 value: *pp_sovereign_sibl - name: assets.Transferred - attributes: + attribute: type: u128 value: *amount_to_send @@ -211,142 +211,15 @@ tests: ] events: - name: polkadotXcm.Attempted - attributes: + attribute: type: XcmV2TraitsOutcome isComplete: true value: 1,000,000,000 - name: balances.Endowed - attributes: + attribute: type: AccountId32 value: *pp_sovereign_sibl - name: balances.Endowed - attributes: + attribute: type: u128 value: *amount - - - name: polkadotXcm.send( system.remarkWithEvent() ) | Penpal Parachain -> Assets Parachain - before: - - name: Get the asset balance of the Penpal Parachain Sovereign account in Assets Parachain - actions: - - queries: - assets_balance_pp_sovereign_before: - chain: *assets_parachain - pallet: assets - call: account - args: [ - *asset_id, - *pp_sovereign_sibl - ] - its: - - name: Penpal Parachain should be able to send XCM message paying its fee with sufficient asset[2] in Assets Parachain - actions: - - extrinsics: - - chain: *penpal_parachain - signer: *pp_signer - sudo: true - pallet: polkadotXcm - call: send - args: [ - *ap_dest_routed, # destination - { - v2: [ #message - { - WithdrawAsset: [*ap_suff_asset_fungible] - }, - { - BuyExecution: { - fees: *ap_suff_asset_fungible, - weightLimit: Unlimited - } - }, - { - Transact: { - originType: SovereignAccount, - requireWeightAtMost: *weight_at_most, - call: $system_remark_with_event - } - } - ] - } - ] - events: - - name: sudo.Sudid - attribute: - type: Result - value: Ok - - name: polkadotXcm.Sent - - name: assets.Burned - chain: *assets_parachain - attributes: - type: AccountId32 - value: *pp_sovereign_sibl - - name: assets.Issued - chain: *assets_parachain - attributes: - type: u32 - value: *asset_id - - name: system.Remarked - chain: *assets_parachain - attributes: - type: AccountId32 - value: *pp_sovereign_sibl - - queries: - assets_balance_pp_sovereign_after: - chain: *assets_parachain - pallet: assets - call: account - args: [ - *asset_id, - *pp_sovereign_sibl - ] - - - name: Should reduce the asset[2] balance of the Penpal Parachain's SovereignAccount in the Assets Parachain - actions: - - asserts: - assetsDecreased: - args: [ - { - balances: { - before: $assets_balance_pp_sovereign_before, - after: $assets_balance_pp_sovereign_after, - }, - } - ] - - - name: Penpal Parachain SHOULD NOT be able to send XCM message paying its fee with sufficient asset[3] if not balance - actions: - - extrinsics: - - chain: *penpal_parachain - signer: *pp_signer - sudo: true - pallet: polkadotXcm - call: send - args: [ - *ap_dest_routed, # destination - { - v2: [ #message - { - WithdrawAsset: [*ap_suff_asset_fungible_fail] - }, - { - BuyExecution: { - fees: *ap_suff_asset_fungible_fail, - weightLimit: Unlimited - } - }, - { - Transact: { - originType: SovereignAccount, - requireWeightAtMost: *weight_at_most, - call: $system_remark_with_event - } - } - ] - } - ] - events: - - name: xcmpQueue.Fail - chain: *assets_parachain - attributes: - type: XcmV2TraitsError - value: FailedToTransactAsset From 55f8b7a7a71a19ff70fa1e3cf6bdf8547b916ff0 Mon Sep 17 00:00:00 2001 From: Muharem Ismailov Date: Mon, 5 Sep 2022 17:33:26 +0200 Subject: [PATCH 041/148] Companion for substrate#12179 (#1593) * remove funcs not included in ProposalProvider trait anymore * update lockfile for {"polkadot", "substrate"} Co-authored-by: parity-processbot <> --- Cargo.lock | 496 +++++++++--------- .../collectives-polkadot/src/impls.rs | 8 - 2 files changed, 248 insertions(+), 256 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d0e3ee2a50d..9a986ab8ac5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -451,7 +451,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "beefy-primitives", @@ -487,7 +487,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -507,7 +507,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "beefy-primitives", "sp-api", @@ -516,7 +516,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "parity-scale-codec", "scale-info", @@ -2786,7 +2786,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "parity-scale-codec", ] @@ -2804,7 +2804,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support", "frame-system", @@ -2827,7 +2827,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "Inflector", "chrono", @@ -2878,7 +2878,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2889,7 +2889,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2905,7 +2905,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support", "frame-system", @@ -2934,7 +2934,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "bitflags", "frame-metadata", @@ -2965,7 +2965,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "Inflector", "cfg-expr", @@ -2979,7 +2979,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2991,7 +2991,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "proc-macro2", "quote", @@ -3001,7 +3001,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support", "log", @@ -3018,7 +3018,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -3033,7 +3033,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "parity-scale-codec", "sp-api", @@ -3042,7 +3042,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support", "parity-scale-codec", @@ -3917,7 +3917,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "beefy-primitives", "bitvec", @@ -4010,7 +4010,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "frame-support", "polkadot-primitives", @@ -5369,7 +5369,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "async-trait", "dyn-clonable", @@ -5385,7 +5385,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "expander 0.0.6", "itertools", @@ -5423,7 +5423,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -5444,7 +5444,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support", "frame-system", @@ -5461,7 +5461,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -5475,7 +5475,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support", "frame-system", @@ -5491,7 +5491,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support", "frame-system", @@ -5507,7 +5507,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support", "frame-system", @@ -5522,7 +5522,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -5546,7 +5546,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5566,7 +5566,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -5581,7 +5581,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "beefy-primitives", "frame-support", @@ -5597,7 +5597,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -5620,7 +5620,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -5638,7 +5638,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -5683,7 +5683,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -5700,7 +5700,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "bitflags", "frame-benchmarking", @@ -5728,7 +5728,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "bitflags", "parity-scale-codec", @@ -5743,7 +5743,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "proc-macro2", "quote", @@ -5753,7 +5753,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5770,7 +5770,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5783,7 +5783,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -5799,7 +5799,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5822,7 +5822,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5835,7 +5835,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -5853,7 +5853,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -5868,7 +5868,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -5891,7 +5891,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5907,7 +5907,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -5927,7 +5927,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -5944,7 +5944,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -5961,7 +5961,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5979,7 +5979,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5994,7 +5994,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -6009,7 +6009,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support", "frame-system", @@ -6026,7 +6026,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6045,7 +6045,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "parity-scale-codec", "sp-api", @@ -6055,7 +6055,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support", "frame-system", @@ -6072,7 +6072,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6095,7 +6095,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -6111,7 +6111,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -6126,7 +6126,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support", "frame-system", @@ -6140,7 +6140,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -6155,7 +6155,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -6171,7 +6171,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support", "frame-system", @@ -6192,7 +6192,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -6208,7 +6208,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support", "frame-system", @@ -6222,7 +6222,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6245,7 +6245,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6256,7 +6256,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "log", "sp-arithmetic", @@ -6265,7 +6265,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support", "frame-system", @@ -6294,7 +6294,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -6312,7 +6312,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -6331,7 +6331,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-support", "frame-system", @@ -6347,7 +6347,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6362,7 +6362,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6373,7 +6373,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -6390,7 +6390,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -6405,7 +6405,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -6421,7 +6421,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-benchmarking", "frame-support", @@ -6436,7 +6436,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "frame-support", "frame-system", @@ -6454,7 +6454,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "frame-benchmarking", "frame-support", @@ -7012,7 +7012,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7027,7 +7027,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7041,7 +7041,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "derive_more", "fatality", @@ -7064,7 +7064,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "fatality", "futures", @@ -7085,7 +7085,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "clap 3.2.20", "frame-benchmarking-cli", @@ -7111,7 +7111,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7152,7 +7152,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "always-assert", "fatality", @@ -7173,7 +7173,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7186,7 +7186,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "derive_more", "fatality", @@ -7209,7 +7209,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7223,7 +7223,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "futures", "futures-timer", @@ -7243,7 +7243,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "always-assert", "async-trait", @@ -7267,7 +7267,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "futures", "parity-scale-codec", @@ -7285,7 +7285,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "bitvec", "derive_more", @@ -7314,7 +7314,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "bitvec", "futures", @@ -7334,7 +7334,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "bitvec", "fatality", @@ -7353,7 +7353,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7368,7 +7368,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "async-trait", "futures", @@ -7386,7 +7386,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7401,7 +7401,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "futures", "futures-timer", @@ -7418,7 +7418,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "fatality", "futures", @@ -7437,7 +7437,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "async-trait", "futures", @@ -7454,7 +7454,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "bitvec", "fatality", @@ -7472,7 +7472,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "always-assert", "assert_matches", @@ -7504,7 +7504,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "futures", "polkadot-node-primitives", @@ -7520,7 +7520,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "futures", "memory-lru", @@ -7536,7 +7536,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "async-std", "lazy_static", @@ -7554,7 +7554,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "bs58", "futures", @@ -7573,7 +7573,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "async-trait", "derive_more", @@ -7595,7 +7595,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "bounded-vec", "futures", @@ -7617,7 +7617,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7627,7 +7627,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "async-trait", "futures", @@ -7645,7 +7645,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "async-trait", "derive_more", @@ -7668,7 +7668,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "async-trait", "derive_more", @@ -7701,7 +7701,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "async-trait", "futures", @@ -7724,7 +7724,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "derive_more", "frame-support", @@ -7824,7 +7824,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7839,7 +7839,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "bitvec", "frame-system", @@ -7869,7 +7869,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7901,7 +7901,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "beefy-primitives", "bitvec", @@ -7989,7 +7989,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "beefy-primitives", "bitvec", @@ -8036,7 +8036,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "frame-support", "polkadot-primitives", @@ -8048,7 +8048,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "bs58", "parity-scale-codec", @@ -8060,7 +8060,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "bitflags", "bitvec", @@ -8103,7 +8103,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "async-trait", "beefy-gadget", @@ -8208,7 +8208,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8229,7 +8229,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8239,7 +8239,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8264,7 +8264,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "beefy-primitives", "bitvec", @@ -8325,7 +8325,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "frame-benchmarking", "frame-system", @@ -8470,7 +8470,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8914,7 +8914,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9036,7 +9036,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9105,7 +9105,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "frame-support", "polkadot-primitives", @@ -9289,7 +9289,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "log", "sp-core", @@ -9300,7 +9300,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "futures", @@ -9327,7 +9327,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "futures", "futures-timer", @@ -9350,7 +9350,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9366,7 +9366,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9383,7 +9383,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9394,7 +9394,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "chrono", "clap 3.2.20", @@ -9433,7 +9433,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "fnv", "futures", @@ -9461,7 +9461,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "hash-db", "kvdb", @@ -9486,7 +9486,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "futures", @@ -9510,7 +9510,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "futures", @@ -9539,7 +9539,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "fork-tree", @@ -9581,7 +9581,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "futures", "jsonrpsee", @@ -9603,7 +9603,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9616,7 +9616,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "futures", @@ -9641,7 +9641,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9668,7 +9668,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "environmental", "parity-scale-codec", @@ -9684,7 +9684,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "log", "parity-scale-codec", @@ -9699,7 +9699,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9720,7 +9720,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "ahash", "async-trait", @@ -9761,7 +9761,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "finality-grandpa", "futures", @@ -9782,7 +9782,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "ansi_term", "futures", @@ -9799,7 +9799,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "hex", @@ -9814,7 +9814,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "asynchronous-codec", @@ -9863,7 +9863,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "bitflags", @@ -9886,7 +9886,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "ahash", "futures", @@ -9904,7 +9904,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "futures", "hex", @@ -9925,7 +9925,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "fork-tree", "futures", @@ -9953,7 +9953,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "bytes", "fnv", @@ -9983,7 +9983,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "futures", "libp2p", @@ -9996,7 +9996,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10005,7 +10005,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "futures", "hash-db", @@ -10035,7 +10035,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "futures", "jsonrpsee", @@ -10058,7 +10058,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "futures", "jsonrpsee", @@ -10071,7 +10071,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "directories", @@ -10138,7 +10138,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "log", "parity-scale-codec", @@ -10152,7 +10152,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10171,7 +10171,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "futures", "libc", @@ -10190,7 +10190,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "chrono", "futures", @@ -10208,7 +10208,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "ansi_term", "atty", @@ -10239,7 +10239,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10250,7 +10250,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "futures", "futures-timer", @@ -10276,7 +10276,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "futures", "log", @@ -10289,7 +10289,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "futures", "futures-timer", @@ -10736,7 +10736,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "enumn", "parity-scale-codec", @@ -10812,7 +10812,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "hash-db", "log", @@ -10830,7 +10830,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "blake2", "proc-macro-crate", @@ -10842,7 +10842,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "parity-scale-codec", "scale-info", @@ -10855,7 +10855,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "integer-sqrt", "num-traits", @@ -10870,7 +10870,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "parity-scale-codec", "scale-info", @@ -10883,7 +10883,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "parity-scale-codec", @@ -10895,7 +10895,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "parity-scale-codec", "sp-api", @@ -10907,7 +10907,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "futures", "log", @@ -10925,7 +10925,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "futures", @@ -10944,7 +10944,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "parity-scale-codec", @@ -10962,7 +10962,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "merlin", @@ -10985,7 +10985,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "parity-scale-codec", "scale-info", @@ -10999,7 +10999,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "parity-scale-codec", "scale-info", @@ -11012,7 +11012,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "base58", "bitflags", @@ -11058,7 +11058,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "blake2", "byteorder", @@ -11072,7 +11072,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "proc-macro2", "quote", @@ -11083,7 +11083,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11092,7 +11092,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "proc-macro2", "quote", @@ -11102,7 +11102,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "environmental", "parity-scale-codec", @@ -11113,7 +11113,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "finality-grandpa", "log", @@ -11131,7 +11131,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11145,7 +11145,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "bytes", "futures", @@ -11171,7 +11171,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "lazy_static", "sp-core", @@ -11182,7 +11182,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "futures", @@ -11199,7 +11199,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "thiserror", "zstd", @@ -11208,7 +11208,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "log", "parity-scale-codec", @@ -11223,7 +11223,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "parity-scale-codec", "scale-info", @@ -11237,7 +11237,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "sp-api", "sp-core", @@ -11247,7 +11247,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "backtrace", "lazy_static", @@ -11257,7 +11257,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "rustc-hash", "serde", @@ -11267,7 +11267,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "either", "hash256-std-hasher", @@ -11289,7 +11289,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11307,7 +11307,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "Inflector", "proc-macro-crate", @@ -11319,7 +11319,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "log", "parity-scale-codec", @@ -11333,7 +11333,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "serde", "serde_json", @@ -11342,7 +11342,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "parity-scale-codec", "scale-info", @@ -11356,7 +11356,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "parity-scale-codec", "scale-info", @@ -11367,7 +11367,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "hash-db", "log", @@ -11389,12 +11389,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11407,7 +11407,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "log", "sp-core", @@ -11420,7 +11420,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "futures-timer", @@ -11436,7 +11436,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "parity-scale-codec", "sp-std", @@ -11448,7 +11448,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "sp-api", "sp-runtime", @@ -11457,7 +11457,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "log", @@ -11473,7 +11473,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "ahash", "hash-db", @@ -11496,7 +11496,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11513,7 +11513,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11524,7 +11524,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "impl-trait-for-tuples", "log", @@ -11785,7 +11785,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "platforms", ] @@ -11793,7 +11793,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11814,7 +11814,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "futures-util", "hyper", @@ -11827,7 +11827,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "jsonrpsee", "log", @@ -11848,7 +11848,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "async-trait", "futures", @@ -11874,7 +11874,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11884,7 +11884,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11895,7 +11895,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "ansi_term", "build-helper", @@ -12003,7 +12003,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "frame-support", "polkadot-primitives", @@ -12292,7 +12292,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12303,7 +12303,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12430,7 +12430,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#82b538e3ae6e035b39a3ac8f069c9fb06757b6ac" +source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" dependencies = [ "clap 3.2.20", "frame-try-runtime", @@ -13009,7 +13009,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "beefy-primitives", "bitvec", @@ -13098,7 +13098,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "frame-support", "polkadot-primitives", @@ -13384,7 +13384,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13398,7 +13398,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "frame-support", "frame-system", @@ -13418,7 +13418,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "frame-benchmarking", "frame-support", @@ -13436,7 +13436,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#88798fb029dfe745d753275514029a9e5c19673e" +source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" dependencies = [ "Inflector", "proc-macro2", diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs b/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs index 941d2703348..6810267a679 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs @@ -134,12 +134,4 @@ where fn proposal_of(proposal_hash: HashOf) -> Option> { pallet_collective::Pallet::::proposal_of(proposal_hash) } - - fn proposals() -> Vec> { - pallet_collective::Pallet::::proposals().into_inner() - } - - fn proposals_count() -> u32 { - pallet_collective::Proposals::::decode_len().unwrap_or(0) as u32 - } } From 465abc2d10c4a502e801652778928c01dc078c03 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Sep 2022 19:36:08 +0200 Subject: [PATCH 042/148] Bump tokio from 1.19.2 to 1.21.0 (#1592) Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.19.2 to 1.21.0. - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.19.2...tokio-1.21.0) --- updated-dependencies: - dependency-name: tokio dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 31 ++++----------------- client/network/Cargo.toml | 2 +- client/pov-recovery/Cargo.toml | 2 +- client/relay-chain-rpc-interface/Cargo.toml | 2 +- polkadot-parachain/Cargo.toml | 2 +- test/service/Cargo.toml | 2 +- 6 files changed, 11 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9a986ab8ac5..cffe516ae6c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4957,25 +4957,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" dependencies = [ "libc", "log", - "miow", - "ntapi", "wasi 0.11.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi", + "windows-sys 0.36.1", ] [[package]] @@ -5223,15 +5212,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "ntapi" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" -dependencies = [ - "winapi", -] - [[package]] name = "num-bigint" version = "0.2.6" @@ -12152,10 +12132,11 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.19.2" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" +checksum = "89797afd69d206ccd11fb0ea560a44bbb87731d020670e79416d442919257d42" dependencies = [ + "autocfg", "bytes", "libc", "memchr", diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index fdfa15e5af0..acbef329559 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -33,7 +33,7 @@ cumulus-relay-chain-interface = { path = "../relay-chain-interface" } [dev-dependencies] portpicker = "0.1.1" -tokio = { version = "1.19.2", features = ["macros"] } +tokio = { version = "1.21.0", features = ["macros"] } url = "2.2.2" # Substrate diff --git a/client/pov-recovery/Cargo.toml b/client/pov-recovery/Cargo.toml index da6147b173b..89c5f4e2a2d 100644 --- a/client/pov-recovery/Cargo.toml +++ b/client/pov-recovery/Cargo.toml @@ -31,7 +31,7 @@ cumulus-primitives-core = { path = "../../primitives/core" } cumulus-relay-chain-interface = {path = "../relay-chain-interface"} [dev-dependencies] -tokio = { version = "1.19.2", features = ["macros"] } +tokio = { version = "1.21.0", features = ["macros"] } # Cumulus cumulus-test-service = { path = "../../test/service" } diff --git a/client/relay-chain-rpc-interface/Cargo.toml b/client/relay-chain-rpc-interface/Cargo.toml index 38e1c37ad5f..626f1295f5e 100644 --- a/client/relay-chain-rpc-interface/Cargo.toml +++ b/client/relay-chain-rpc-interface/Cargo.toml @@ -18,7 +18,7 @@ sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = " sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-storage = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -tokio = { version = "1.19.2", features = ["sync"] } +tokio = { version = "1.21.0", features = ["sync"] } futures = "0.3.24" futures-timer = "3.0.2" diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index f85f0b18df8..b1b7ecf9218 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -94,7 +94,7 @@ substrate-build-script-utils = { git = "https://github.com/paritytech/substrate" assert_cmd = "2.0" nix = "0.25" tempfile = "3.3.0" -tokio = { version = "1.19.2", features = ["macros", "time", "parking_lot"] } +tokio = { version = "1.21.0", features = ["macros", "time", "parking_lot"] } wait-timeout = "0.2" # purge_chain_works works with rococo-local and needs to allow this polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "master", features = ["rococo-native"] } diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index 901ddd4be4a..d2fec695562 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -16,7 +16,7 @@ criterion = { version = "0.3.6", features = [ "async_tokio" ] } jsonrpsee = { version = "0.15.1", features = ["server"] } rand = "0.8.5" serde = { version = "1.0.144", features = ["derive"] } -tokio = { version = "1.19.2", features = ["macros"] } +tokio = { version = "1.21.0", features = ["macros"] } tracing = "0.1.36" url = "2.2.2" From c2d9753b25371e5e86e5348829eb2d80d0a7e560 Mon Sep 17 00:00:00 2001 From: Muharem Ismailov Date: Tue, 6 Sep 2022 09:53:17 +0200 Subject: [PATCH 043/148] fix release report generation script (#1597) --- scripts/ci/changelog/bin/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/ci/changelog/bin/changelog b/scripts/ci/changelog/bin/changelog index 97d10dff94b..e4501b2f774 100755 --- a/scripts/ci/changelog/bin/changelog +++ b/scripts/ci/changelog/bin/changelog @@ -124,8 +124,8 @@ else { name: "statemine", data: $srtool_statemine[0] }, { name: "statemint", data: $srtool_statemint[0] }, { name: "rococo", data: $srtool_rococo_parachain[0] }, - { name: "contracts", data: $srtool_contracts_rococo[0] } - { name: "polkadot-collectives", data: $srtool_polkadot_collectives[0] }, + { name: "contracts", data: $srtool_contracts_rococo[0] }, + { name: "polkadot-collectives", data: $srtool_polkadot_collectives[0] } ] }\' > context.json', cumulus_data, substrate_data, From c4c7fa0929cbf59b30aa9510ee31f3ec1b580923 Mon Sep 17 00:00:00 2001 From: Muharem Ismailov Date: Tue, 6 Sep 2022 13:40:16 +0200 Subject: [PATCH 044/148] fix release report generation script (#1599) --- scripts/ci/changelog/bin/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ci/changelog/bin/changelog b/scripts/ci/changelog/bin/changelog index e4501b2f774..1f3de939d0a 100755 --- a/scripts/ci/changelog/bin/changelog +++ b/scripts/ci/changelog/bin/changelog @@ -76,7 +76,7 @@ else logger.debug("Re-using:#{substrate_data}") end -POLKADOT_COLLECTIVES_DIGEST = ENV['SHELL_DIGEST'] || 'digests/polkadot-collectives-srtool-digest.json' +POLKADOT_COLLECTIVES_DIGEST = ENV['COLLECTIVES_POLKADOT_DIGEST'] || 'digests/polkadot-collectives-srtool-digest.json' SHELL_DIGEST = ENV['SHELL_DIGEST'] || 'digests/shell-srtool-digest.json' WESTMINT_DIGEST = ENV['WESTMINT_DIGEST'] || 'digests/westmint-srtool-digest.json' STATEMINE_DIGEST = ENV['STATEMINE_DIGEST'] || 'digests/statemine-srtool-digest.json' From a7ef2bf6e4e4578b57422ab112727b5b91ac0021 Mon Sep 17 00:00:00 2001 From: Frederik Gartenmeister Date: Wed, 7 Sep 2022 00:22:50 +0200 Subject: [PATCH 045/148] Add features (#1602) --- client/relay-chain-inprocess-interface/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/relay-chain-inprocess-interface/Cargo.toml b/client/relay-chain-inprocess-interface/Cargo.toml index d2ae9ca1556..c8d5b93a2d0 100644 --- a/client/relay-chain-inprocess-interface/Cargo.toml +++ b/client/relay-chain-inprocess-interface/Cargo.toml @@ -26,7 +26,7 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "master" } # Polkadot -polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "master", default-features = false } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "master", default-features = false, features = ["cli"] } polkadot-client = { git = "https://github.com/paritytech/polkadot", branch = "master" } polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "master" } From 6a6d3b5c7267e771a550aed98f70777a7bdcb710 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Sep 2022 16:43:45 +0200 Subject: [PATCH 046/148] Bump thiserror from 1.0.33 to 1.0.34 (#1596) Bumps [thiserror](https://github.com/dtolnay/thiserror) from 1.0.33 to 1.0.34. - [Release notes](https://github.com/dtolnay/thiserror/releases) - [Commits](https://github.com/dtolnay/thiserror/compare/1.0.33...1.0.34) --- updated-dependencies: - dependency-name: thiserror dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- client/relay-chain-interface/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cffe516ae6c..3bcd028af8f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12009,18 +12009,18 @@ checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" [[package]] name = "thiserror" -version = "1.0.33" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d0a539a918745651435ac7db7a18761589a94cd7e94cd56999f828bf73c8a57" +checksum = "8c1b05ca9d106ba7d2e31a9dab4a64e7be2cce415321966ea3132c49a656e252" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.33" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c251e90f708e16c49a16f4917dc2131e75222b72edfa9cb7f7c58ae56aae0c09" +checksum = "e8f2591983642de85c921015f3f070c665a197ed69e417af436115e3a1407487" dependencies = [ "proc-macro2", "quote", diff --git a/client/relay-chain-interface/Cargo.toml b/client/relay-chain-interface/Cargo.toml index f33f9829f81..288d9d52861 100644 --- a/client/relay-chain-interface/Cargo.toml +++ b/client/relay-chain-interface/Cargo.toml @@ -21,6 +21,6 @@ futures = "0.3.24" parking_lot = "0.12.1" derive_more = "0.99.2" async-trait = "0.1.57" -thiserror = "1.0.33" +thiserror = "1.0.34" jsonrpsee-core = "0.15.1" parity-scale-codec = "3.1.5" From 5576fe4e3cd2857867fd04ffbaddaa38e1b5ffaa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Sep 2022 23:55:59 +0200 Subject: [PATCH 047/148] Bump url from 2.2.2 to 2.3.0 (#1604) Bumps [url](https://github.com/servo/rust-url) from 2.2.2 to 2.3.0. - [Release notes](https://github.com/servo/rust-url/releases) - [Commits](https://github.com/servo/rust-url/compare/v2.2.2...v2.3.0) --- updated-dependencies: - dependency-name: url dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 5 ++--- client/cli/Cargo.toml | 2 +- client/network/Cargo.toml | 2 +- client/relay-chain-rpc-interface/Cargo.toml | 2 +- test/service/Cargo.toml | 2 +- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3bcd028af8f..572b9358116 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12548,13 +12548,12 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.2.2" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "22fe195a4f217c25b25cb5058ced57059824a678474874038dc88d211bf508d3" dependencies = [ "form_urlencoded", "idna", - "matches", "percent-encoding", ] diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index 422764955d2..b863a0d9830 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] clap = { version = "3.2.20", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } -url = "2.2.2" +url = "2.3.0" # Substrate sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index acbef329559..d40981673b0 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -34,7 +34,7 @@ cumulus-relay-chain-interface = { path = "../relay-chain-interface" } [dev-dependencies] portpicker = "0.1.1" tokio = { version = "1.21.0", features = ["macros"] } -url = "2.2.2" +url = "2.3.0" # Substrate sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/client/relay-chain-rpc-interface/Cargo.toml b/client/relay-chain-rpc-interface/Cargo.toml index 626f1295f5e..fd14a02dbf5 100644 --- a/client/relay-chain-rpc-interface/Cargo.toml +++ b/client/relay-chain-rpc-interface/Cargo.toml @@ -27,5 +27,5 @@ parking_lot = "0.12.1" jsonrpsee = { version = "0.15.1", features = ["ws-client"] } tracing = "0.1.36" async-trait = "0.1.57" -url = "2.2.2" +url = "2.3.0" backoff = { version = "0.4.0", features = ["tokio"] } diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index d2fec695562..a05ac42f3f8 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -18,7 +18,7 @@ rand = "0.8.5" serde = { version = "1.0.144", features = ["derive"] } tokio = { version = "1.21.0", features = ["macros"] } tracing = "0.1.36" -url = "2.2.2" +url = "2.3.0" # Substrate frame-system = { git = "https://github.com/paritytech/substrate", branch = "master" } From 6c27ce26f19678c7f79f0784481240e2bfde945d Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 8 Sep 2022 13:29:53 +0800 Subject: [PATCH 048/148] Companion for paritytech/substrate#12183 (#1601) * Companion for paritytech/substrate#12183 * Fixes * Update pallets/xcmp-queue/src/lib.rs * Update pallets/xcmp-queue/src/lib.rs * update lockfile for {"substrate", "polkadot"} Co-authored-by: parity-processbot <> --- Cargo.lock | 496 +++++++++--------- pallets/dmp-queue/src/lib.rs | 2 +- pallets/xcmp-queue/src/lib.rs | 6 +- .../runtime/src/weights/block_weights.rs | 7 +- .../runtime/src/weights/extrinsic_weights.rs | 10 +- .../runtime/src/weights/paritydb_weights.rs | 8 +- .../runtime/src/weights/rocksdb_weights.rs | 8 +- .../statemine/src/weights/block_weights.rs | 7 +- .../src/weights/extrinsic_weights.rs | 10 +- .../statemine/src/weights/paritydb_weights.rs | 8 +- .../statemine/src/weights/rocksdb_weights.rs | 8 +- .../statemint/src/weights/block_weights.rs | 7 +- .../src/weights/extrinsic_weights.rs | 10 +- .../statemint/src/weights/paritydb_weights.rs | 8 +- .../statemint/src/weights/rocksdb_weights.rs | 8 +- .../westmint/src/weights/block_weights.rs | 7 +- .../westmint/src/weights/extrinsic_weights.rs | 10 +- .../westmint/src/weights/paritydb_weights.rs | 8 +- .../westmint/src/weights/rocksdb_weights.rs | 8 +- .../src/weights/block_weights.rs | 7 +- .../src/weights/extrinsic_weights.rs | 10 +- .../src/weights/paritydb_weights.rs | 8 +- .../src/weights/rocksdb_weights.rs | 8 +- .../src/weights/block_weights.rs | 7 +- .../src/weights/extrinsic_weights.rs | 10 +- .../src/weights/paritydb_weights.rs | 8 +- .../src/weights/rocksdb_weights.rs | 8 +- .../penpal/src/weights/block_weights.rs | 7 +- .../penpal/src/weights/extrinsic_weights.rs | 10 +- .../penpal/src/weights/paritydb_weights.rs | 8 +- .../penpal/src/weights/rocksdb_weights.rs | 8 +- 31 files changed, 399 insertions(+), 336 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 572b9358116..db1b6f1edb9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -451,7 +451,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "beefy-primitives", @@ -487,7 +487,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -507,7 +507,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "beefy-primitives", "sp-api", @@ -516,7 +516,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "parity-scale-codec", "scale-info", @@ -2786,7 +2786,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "parity-scale-codec", ] @@ -2804,7 +2804,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support", "frame-system", @@ -2827,7 +2827,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "Inflector", "chrono", @@ -2878,7 +2878,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2889,7 +2889,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2905,7 +2905,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support", "frame-system", @@ -2934,7 +2934,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "bitflags", "frame-metadata", @@ -2965,7 +2965,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "Inflector", "cfg-expr", @@ -2979,7 +2979,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2991,7 +2991,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "proc-macro2", "quote", @@ -3001,7 +3001,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support", "log", @@ -3018,7 +3018,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -3033,7 +3033,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "parity-scale-codec", "sp-api", @@ -3042,7 +3042,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support", "parity-scale-codec", @@ -3917,7 +3917,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "beefy-primitives", "bitvec", @@ -4010,7 +4010,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "frame-support", "polkadot-primitives", @@ -5349,7 +5349,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "async-trait", "dyn-clonable", @@ -5365,7 +5365,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "expander 0.0.6", "itertools", @@ -5403,7 +5403,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -5424,7 +5424,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support", "frame-system", @@ -5441,7 +5441,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -5455,7 +5455,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support", "frame-system", @@ -5471,7 +5471,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support", "frame-system", @@ -5487,7 +5487,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support", "frame-system", @@ -5502,7 +5502,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -5526,7 +5526,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5546,7 +5546,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -5561,7 +5561,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "beefy-primitives", "frame-support", @@ -5577,7 +5577,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -5600,7 +5600,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -5618,7 +5618,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -5663,7 +5663,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -5680,7 +5680,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "bitflags", "frame-benchmarking", @@ -5708,7 +5708,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "bitflags", "parity-scale-codec", @@ -5723,7 +5723,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "proc-macro2", "quote", @@ -5733,7 +5733,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5750,7 +5750,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5763,7 +5763,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -5779,7 +5779,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5802,7 +5802,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5815,7 +5815,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -5833,7 +5833,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -5848,7 +5848,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -5871,7 +5871,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5887,7 +5887,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -5907,7 +5907,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -5924,7 +5924,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -5941,7 +5941,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5959,7 +5959,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5974,7 +5974,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -5989,7 +5989,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support", "frame-system", @@ -6006,7 +6006,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6025,7 +6025,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "parity-scale-codec", "sp-api", @@ -6035,7 +6035,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support", "frame-system", @@ -6052,7 +6052,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6075,7 +6075,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -6091,7 +6091,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -6106,7 +6106,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support", "frame-system", @@ -6120,7 +6120,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -6135,7 +6135,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -6151,7 +6151,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support", "frame-system", @@ -6172,7 +6172,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -6188,7 +6188,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support", "frame-system", @@ -6202,7 +6202,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6225,7 +6225,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6236,7 +6236,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "log", "sp-arithmetic", @@ -6245,7 +6245,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support", "frame-system", @@ -6274,7 +6274,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -6292,7 +6292,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -6311,7 +6311,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-support", "frame-system", @@ -6327,7 +6327,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6342,7 +6342,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6353,7 +6353,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -6370,7 +6370,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -6385,7 +6385,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -6401,7 +6401,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-benchmarking", "frame-support", @@ -6416,7 +6416,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "frame-support", "frame-system", @@ -6434,7 +6434,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "frame-benchmarking", "frame-support", @@ -6992,7 +6992,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7007,7 +7007,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7021,7 +7021,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "derive_more", "fatality", @@ -7044,7 +7044,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "fatality", "futures", @@ -7065,7 +7065,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "clap 3.2.20", "frame-benchmarking-cli", @@ -7091,7 +7091,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7132,7 +7132,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "always-assert", "fatality", @@ -7153,7 +7153,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7166,7 +7166,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "derive_more", "fatality", @@ -7189,7 +7189,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7203,7 +7203,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "futures", "futures-timer", @@ -7223,7 +7223,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "always-assert", "async-trait", @@ -7247,7 +7247,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "futures", "parity-scale-codec", @@ -7265,7 +7265,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "bitvec", "derive_more", @@ -7294,7 +7294,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "bitvec", "futures", @@ -7314,7 +7314,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "bitvec", "fatality", @@ -7333,7 +7333,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7348,7 +7348,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "async-trait", "futures", @@ -7366,7 +7366,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7381,7 +7381,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "futures", "futures-timer", @@ -7398,7 +7398,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "fatality", "futures", @@ -7417,7 +7417,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "async-trait", "futures", @@ -7434,7 +7434,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "bitvec", "fatality", @@ -7452,7 +7452,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "always-assert", "assert_matches", @@ -7484,7 +7484,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "futures", "polkadot-node-primitives", @@ -7500,7 +7500,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "futures", "memory-lru", @@ -7516,7 +7516,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "async-std", "lazy_static", @@ -7534,7 +7534,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "bs58", "futures", @@ -7553,7 +7553,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "async-trait", "derive_more", @@ -7575,7 +7575,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "bounded-vec", "futures", @@ -7597,7 +7597,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7607,7 +7607,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "async-trait", "futures", @@ -7625,7 +7625,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "async-trait", "derive_more", @@ -7648,7 +7648,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "async-trait", "derive_more", @@ -7681,7 +7681,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "async-trait", "futures", @@ -7704,7 +7704,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "derive_more", "frame-support", @@ -7804,7 +7804,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7819,7 +7819,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "bitvec", "frame-system", @@ -7849,7 +7849,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7881,7 +7881,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "beefy-primitives", "bitvec", @@ -7969,7 +7969,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "beefy-primitives", "bitvec", @@ -8016,7 +8016,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "frame-support", "polkadot-primitives", @@ -8028,7 +8028,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "bs58", "parity-scale-codec", @@ -8040,7 +8040,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "bitflags", "bitvec", @@ -8083,7 +8083,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "async-trait", "beefy-gadget", @@ -8188,7 +8188,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8209,7 +8209,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8219,7 +8219,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8244,7 +8244,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "beefy-primitives", "bitvec", @@ -8305,7 +8305,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "frame-benchmarking", "frame-system", @@ -8450,7 +8450,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8894,7 +8894,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9016,7 +9016,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9085,7 +9085,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "frame-support", "polkadot-primitives", @@ -9269,7 +9269,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "log", "sp-core", @@ -9280,7 +9280,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "futures", @@ -9307,7 +9307,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "futures", "futures-timer", @@ -9330,7 +9330,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9346,7 +9346,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9363,7 +9363,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9374,7 +9374,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "chrono", "clap 3.2.20", @@ -9413,7 +9413,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "fnv", "futures", @@ -9441,7 +9441,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "hash-db", "kvdb", @@ -9466,7 +9466,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "futures", @@ -9490,7 +9490,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "futures", @@ -9519,7 +9519,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "fork-tree", @@ -9561,7 +9561,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "futures", "jsonrpsee", @@ -9583,7 +9583,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9596,7 +9596,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "futures", @@ -9621,7 +9621,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9648,7 +9648,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "environmental", "parity-scale-codec", @@ -9664,7 +9664,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "log", "parity-scale-codec", @@ -9679,7 +9679,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9700,7 +9700,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "ahash", "async-trait", @@ -9741,7 +9741,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "finality-grandpa", "futures", @@ -9762,7 +9762,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "ansi_term", "futures", @@ -9779,7 +9779,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "hex", @@ -9794,7 +9794,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "asynchronous-codec", @@ -9843,7 +9843,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "bitflags", @@ -9866,7 +9866,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "ahash", "futures", @@ -9884,7 +9884,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "futures", "hex", @@ -9905,7 +9905,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "fork-tree", "futures", @@ -9933,7 +9933,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "bytes", "fnv", @@ -9963,7 +9963,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "futures", "libp2p", @@ -9976,7 +9976,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -9985,7 +9985,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "futures", "hash-db", @@ -10015,7 +10015,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "futures", "jsonrpsee", @@ -10038,7 +10038,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "futures", "jsonrpsee", @@ -10051,7 +10051,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "directories", @@ -10118,7 +10118,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "log", "parity-scale-codec", @@ -10132,7 +10132,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10151,7 +10151,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "futures", "libc", @@ -10170,7 +10170,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "chrono", "futures", @@ -10188,7 +10188,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "ansi_term", "atty", @@ -10219,7 +10219,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10230,7 +10230,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "futures", "futures-timer", @@ -10256,7 +10256,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "futures", "log", @@ -10269,7 +10269,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "futures", "futures-timer", @@ -10716,7 +10716,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "enumn", "parity-scale-codec", @@ -10792,7 +10792,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "hash-db", "log", @@ -10810,7 +10810,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "blake2", "proc-macro-crate", @@ -10822,7 +10822,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "parity-scale-codec", "scale-info", @@ -10835,7 +10835,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "integer-sqrt", "num-traits", @@ -10850,7 +10850,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "parity-scale-codec", "scale-info", @@ -10863,7 +10863,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "parity-scale-codec", @@ -10875,7 +10875,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "parity-scale-codec", "sp-api", @@ -10887,7 +10887,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "futures", "log", @@ -10905,7 +10905,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "futures", @@ -10924,7 +10924,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "parity-scale-codec", @@ -10942,7 +10942,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "merlin", @@ -10965,7 +10965,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "parity-scale-codec", "scale-info", @@ -10979,7 +10979,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "parity-scale-codec", "scale-info", @@ -10992,7 +10992,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "base58", "bitflags", @@ -11038,7 +11038,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "blake2", "byteorder", @@ -11052,7 +11052,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "proc-macro2", "quote", @@ -11063,7 +11063,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11072,7 +11072,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "proc-macro2", "quote", @@ -11082,7 +11082,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "environmental", "parity-scale-codec", @@ -11093,7 +11093,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "finality-grandpa", "log", @@ -11111,7 +11111,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11125,7 +11125,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "bytes", "futures", @@ -11151,7 +11151,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "lazy_static", "sp-core", @@ -11162,7 +11162,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "futures", @@ -11179,7 +11179,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "thiserror", "zstd", @@ -11188,7 +11188,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "log", "parity-scale-codec", @@ -11203,7 +11203,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "parity-scale-codec", "scale-info", @@ -11217,7 +11217,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "sp-api", "sp-core", @@ -11227,7 +11227,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "backtrace", "lazy_static", @@ -11237,7 +11237,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "rustc-hash", "serde", @@ -11247,7 +11247,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "either", "hash256-std-hasher", @@ -11269,7 +11269,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11287,7 +11287,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "Inflector", "proc-macro-crate", @@ -11299,7 +11299,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "log", "parity-scale-codec", @@ -11313,7 +11313,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "serde", "serde_json", @@ -11322,7 +11322,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "parity-scale-codec", "scale-info", @@ -11336,7 +11336,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "parity-scale-codec", "scale-info", @@ -11347,7 +11347,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "hash-db", "log", @@ -11369,12 +11369,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11387,7 +11387,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "log", "sp-core", @@ -11400,7 +11400,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "futures-timer", @@ -11416,7 +11416,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "parity-scale-codec", "sp-std", @@ -11428,7 +11428,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "sp-api", "sp-runtime", @@ -11437,7 +11437,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "log", @@ -11453,7 +11453,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "ahash", "hash-db", @@ -11476,7 +11476,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11493,7 +11493,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11504,7 +11504,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "impl-trait-for-tuples", "log", @@ -11765,7 +11765,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "platforms", ] @@ -11773,7 +11773,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11794,7 +11794,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "futures-util", "hyper", @@ -11807,7 +11807,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "jsonrpsee", "log", @@ -11828,7 +11828,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "async-trait", "futures", @@ -11854,7 +11854,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11864,7 +11864,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11875,7 +11875,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "ansi_term", "build-helper", @@ -11983,7 +11983,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "frame-support", "polkadot-primitives", @@ -12273,7 +12273,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12284,7 +12284,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12411,7 +12411,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5f18a8b729894d0dcc34d6a7c269d62aa593d910" +source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" dependencies = [ "clap 3.2.20", "frame-try-runtime", @@ -12989,7 +12989,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "beefy-primitives", "bitvec", @@ -13078,7 +13078,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "frame-support", "polkadot-primitives", @@ -13364,7 +13364,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13378,7 +13378,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "frame-support", "frame-system", @@ -13398,7 +13398,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "frame-benchmarking", "frame-support", @@ -13416,7 +13416,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#054f0c6f869acdad62d0d414c1aae39386afbf3d" +source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" dependencies = [ "Inflector", "proc-macro2", diff --git a/pallets/dmp-queue/src/lib.rs b/pallets/dmp-queue/src/lib.rs index 842db97fd57..d27455079d1 100644 --- a/pallets/dmp-queue/src/lib.rs +++ b/pallets/dmp-queue/src/lib.rs @@ -287,7 +287,7 @@ pub mod pallet { Err((message_id, required_weight)) => // Too much weight required right now. { - if required_weight > config.max_individual { + if required_weight.any_gt(config.max_individual) { // overweight - add to overweight queue and continue with // message execution. let overweight_index = page_index.overweight_count; diff --git a/pallets/xcmp-queue/src/lib.rs b/pallets/xcmp-queue/src/lib.rs index f19f40cb691..f3dc23a3483 100644 --- a/pallets/xcmp-queue/src/lib.rs +++ b/pallets/xcmp-queue/src/lib.rs @@ -808,7 +808,7 @@ impl Pallet { let mut shuffle_index = 0; while shuffle_index < shuffled.len() && - max_weight.saturating_sub(weight_used) >= threshold_weight + max_weight.saturating_sub(weight_used).all_gte(threshold_weight) { let index = shuffled[shuffle_index]; let sender = status[index].sender; @@ -831,7 +831,7 @@ impl Pallet { if shuffle_index < status.len() { weight_available += (max_weight - weight_available) / (weight_restrict_decay.ref_time() + 1); - if weight_available + threshold_weight > max_weight { + if (weight_available + threshold_weight).any_gt(max_weight) { weight_available = max_weight; } } else { @@ -871,7 +871,7 @@ impl Pallet { // other channels a look in. If we've still not unlocked all weight, then we set them // up for processing a second time anyway. if !status[index].message_metadata.is_empty() && - (weight_processed > Weight::zero() || weight_available != max_weight) + (weight_processed.any_gt(Weight::zero()) || weight_available != max_weight) { if shuffle_index + 1 == shuffled.len() { // Only this queue left. Just run around this loop once more. diff --git a/parachain-template/runtime/src/weights/block_weights.rs b/parachain-template/runtime/src/weights/block_weights.rs index 7d4a931bd12..c004307336d 100644 --- a/parachain-template/runtime/src/weights/block_weights.rs +++ b/parachain-template/runtime/src/weights/block_weights.rs @@ -39,11 +39,14 @@ pub mod constants { // At least 100 µs. assert!( - w >= 100u64 * constants::WEIGHT_PER_MICROS, + w.ref_time() >= 100u64 * constants::WEIGHT_PER_MICROS.ref_time(), "Weight should be at least 100 µs." ); // At most 50 ms. - assert!(w <= 50u64 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); + assert!( + w.ref_time() <= 50u64 * constants::WEIGHT_PER_MILLIS.ref_time(), + "Weight should be at most 50 ms." + ); } } } diff --git a/parachain-template/runtime/src/weights/extrinsic_weights.rs b/parachain-template/runtime/src/weights/extrinsic_weights.rs index 6c6b4a497d8..3ce6b73d584 100644 --- a/parachain-template/runtime/src/weights/extrinsic_weights.rs +++ b/parachain-template/runtime/src/weights/extrinsic_weights.rs @@ -38,9 +38,15 @@ pub mod constants { let w = super::constants::ExtrinsicBaseWeight::get(); // At least 10 µs. - assert!(w >= 10u64 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); + assert!( + w.ref_time() >= 10u64 * constants::WEIGHT_PER_MICROS.ref_time(), + "Weight should be at least 10 µs." + ); // At most 1 ms. - assert!(w <= constants::WEIGHT_PER_MILLIS, "Weight should be at most 1 ms."); + assert!( + w.ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + "Weight should be at most 1 ms." + ); } } } diff --git a/parachain-template/runtime/src/weights/paritydb_weights.rs b/parachain-template/runtime/src/weights/paritydb_weights.rs index 8083ccb4001..dca7d348310 100644 --- a/parachain-template/runtime/src/weights/paritydb_weights.rs +++ b/parachain-template/runtime/src/weights/paritydb_weights.rs @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1) >= constants::WEIGHT_PER_MICROS, + W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1) >= constants::WEIGHT_PER_MICROS, + W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1) <= constants::WEIGHT_PER_MILLIS, + W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1) <= constants::WEIGHT_PER_MILLIS, + W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Write weight should be at most 1 ms." ); } diff --git a/parachain-template/runtime/src/weights/rocksdb_weights.rs b/parachain-template/runtime/src/weights/rocksdb_weights.rs index 1db87f143f3..87867ebfe17 100644 --- a/parachain-template/runtime/src/weights/rocksdb_weights.rs +++ b/parachain-template/runtime/src/weights/rocksdb_weights.rs @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1) >= constants::WEIGHT_PER_MICROS, + W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1) >= constants::WEIGHT_PER_MICROS, + W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1) <= constants::WEIGHT_PER_MILLIS, + W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1) <= constants::WEIGHT_PER_MILLIS, + W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/assets/statemine/src/weights/block_weights.rs b/parachains/runtimes/assets/statemine/src/weights/block_weights.rs index 7d4a931bd12..c004307336d 100644 --- a/parachains/runtimes/assets/statemine/src/weights/block_weights.rs +++ b/parachains/runtimes/assets/statemine/src/weights/block_weights.rs @@ -39,11 +39,14 @@ pub mod constants { // At least 100 µs. assert!( - w >= 100u64 * constants::WEIGHT_PER_MICROS, + w.ref_time() >= 100u64 * constants::WEIGHT_PER_MICROS.ref_time(), "Weight should be at least 100 µs." ); // At most 50 ms. - assert!(w <= 50u64 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); + assert!( + w.ref_time() <= 50u64 * constants::WEIGHT_PER_MILLIS.ref_time(), + "Weight should be at most 50 ms." + ); } } } diff --git a/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs b/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs index 6c6b4a497d8..3ce6b73d584 100644 --- a/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/assets/statemine/src/weights/extrinsic_weights.rs @@ -38,9 +38,15 @@ pub mod constants { let w = super::constants::ExtrinsicBaseWeight::get(); // At least 10 µs. - assert!(w >= 10u64 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); + assert!( + w.ref_time() >= 10u64 * constants::WEIGHT_PER_MICROS.ref_time(), + "Weight should be at least 10 µs." + ); // At most 1 ms. - assert!(w <= constants::WEIGHT_PER_MILLIS, "Weight should be at most 1 ms."); + assert!( + w.ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + "Weight should be at most 1 ms." + ); } } } diff --git a/parachains/runtimes/assets/statemine/src/weights/paritydb_weights.rs b/parachains/runtimes/assets/statemine/src/weights/paritydb_weights.rs index 8083ccb4001..dca7d348310 100644 --- a/parachains/runtimes/assets/statemine/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/assets/statemine/src/weights/paritydb_weights.rs @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1) >= constants::WEIGHT_PER_MICROS, + W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1) >= constants::WEIGHT_PER_MICROS, + W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1) <= constants::WEIGHT_PER_MILLIS, + W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1) <= constants::WEIGHT_PER_MILLIS, + W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/assets/statemine/src/weights/rocksdb_weights.rs b/parachains/runtimes/assets/statemine/src/weights/rocksdb_weights.rs index 1db87f143f3..87867ebfe17 100644 --- a/parachains/runtimes/assets/statemine/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/assets/statemine/src/weights/rocksdb_weights.rs @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1) >= constants::WEIGHT_PER_MICROS, + W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1) >= constants::WEIGHT_PER_MICROS, + W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1) <= constants::WEIGHT_PER_MILLIS, + W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1) <= constants::WEIGHT_PER_MILLIS, + W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/assets/statemint/src/weights/block_weights.rs b/parachains/runtimes/assets/statemint/src/weights/block_weights.rs index 7d4a931bd12..c004307336d 100644 --- a/parachains/runtimes/assets/statemint/src/weights/block_weights.rs +++ b/parachains/runtimes/assets/statemint/src/weights/block_weights.rs @@ -39,11 +39,14 @@ pub mod constants { // At least 100 µs. assert!( - w >= 100u64 * constants::WEIGHT_PER_MICROS, + w.ref_time() >= 100u64 * constants::WEIGHT_PER_MICROS.ref_time(), "Weight should be at least 100 µs." ); // At most 50 ms. - assert!(w <= 50u64 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); + assert!( + w.ref_time() <= 50u64 * constants::WEIGHT_PER_MILLIS.ref_time(), + "Weight should be at most 50 ms." + ); } } } diff --git a/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs b/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs index 6c6b4a497d8..3ce6b73d584 100644 --- a/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/assets/statemint/src/weights/extrinsic_weights.rs @@ -38,9 +38,15 @@ pub mod constants { let w = super::constants::ExtrinsicBaseWeight::get(); // At least 10 µs. - assert!(w >= 10u64 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); + assert!( + w.ref_time() >= 10u64 * constants::WEIGHT_PER_MICROS.ref_time(), + "Weight should be at least 10 µs." + ); // At most 1 ms. - assert!(w <= constants::WEIGHT_PER_MILLIS, "Weight should be at most 1 ms."); + assert!( + w.ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + "Weight should be at most 1 ms." + ); } } } diff --git a/parachains/runtimes/assets/statemint/src/weights/paritydb_weights.rs b/parachains/runtimes/assets/statemint/src/weights/paritydb_weights.rs index 8083ccb4001..dca7d348310 100644 --- a/parachains/runtimes/assets/statemint/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/assets/statemint/src/weights/paritydb_weights.rs @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1) >= constants::WEIGHT_PER_MICROS, + W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1) >= constants::WEIGHT_PER_MICROS, + W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1) <= constants::WEIGHT_PER_MILLIS, + W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1) <= constants::WEIGHT_PER_MILLIS, + W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/assets/statemint/src/weights/rocksdb_weights.rs b/parachains/runtimes/assets/statemint/src/weights/rocksdb_weights.rs index 1db87f143f3..87867ebfe17 100644 --- a/parachains/runtimes/assets/statemint/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/assets/statemint/src/weights/rocksdb_weights.rs @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1) >= constants::WEIGHT_PER_MICROS, + W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1) >= constants::WEIGHT_PER_MICROS, + W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1) <= constants::WEIGHT_PER_MILLIS, + W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1) <= constants::WEIGHT_PER_MILLIS, + W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/assets/westmint/src/weights/block_weights.rs b/parachains/runtimes/assets/westmint/src/weights/block_weights.rs index 7d4a931bd12..c004307336d 100644 --- a/parachains/runtimes/assets/westmint/src/weights/block_weights.rs +++ b/parachains/runtimes/assets/westmint/src/weights/block_weights.rs @@ -39,11 +39,14 @@ pub mod constants { // At least 100 µs. assert!( - w >= 100u64 * constants::WEIGHT_PER_MICROS, + w.ref_time() >= 100u64 * constants::WEIGHT_PER_MICROS.ref_time(), "Weight should be at least 100 µs." ); // At most 50 ms. - assert!(w <= 50u64 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); + assert!( + w.ref_time() <= 50u64 * constants::WEIGHT_PER_MILLIS.ref_time(), + "Weight should be at most 50 ms." + ); } } } diff --git a/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs b/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs index 6c6b4a497d8..3ce6b73d584 100644 --- a/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/assets/westmint/src/weights/extrinsic_weights.rs @@ -38,9 +38,15 @@ pub mod constants { let w = super::constants::ExtrinsicBaseWeight::get(); // At least 10 µs. - assert!(w >= 10u64 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); + assert!( + w.ref_time() >= 10u64 * constants::WEIGHT_PER_MICROS.ref_time(), + "Weight should be at least 10 µs." + ); // At most 1 ms. - assert!(w <= constants::WEIGHT_PER_MILLIS, "Weight should be at most 1 ms."); + assert!( + w.ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + "Weight should be at most 1 ms." + ); } } } diff --git a/parachains/runtimes/assets/westmint/src/weights/paritydb_weights.rs b/parachains/runtimes/assets/westmint/src/weights/paritydb_weights.rs index 8083ccb4001..dca7d348310 100644 --- a/parachains/runtimes/assets/westmint/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/assets/westmint/src/weights/paritydb_weights.rs @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1) >= constants::WEIGHT_PER_MICROS, + W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1) >= constants::WEIGHT_PER_MICROS, + W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1) <= constants::WEIGHT_PER_MILLIS, + W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1) <= constants::WEIGHT_PER_MILLIS, + W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/assets/westmint/src/weights/rocksdb_weights.rs b/parachains/runtimes/assets/westmint/src/weights/rocksdb_weights.rs index 1db87f143f3..87867ebfe17 100644 --- a/parachains/runtimes/assets/westmint/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/assets/westmint/src/weights/rocksdb_weights.rs @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1) >= constants::WEIGHT_PER_MICROS, + W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1) >= constants::WEIGHT_PER_MICROS, + W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1) <= constants::WEIGHT_PER_MILLIS, + W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1) <= constants::WEIGHT_PER_MILLIS, + W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs index 7d4a931bd12..c004307336d 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/block_weights.rs @@ -39,11 +39,14 @@ pub mod constants { // At least 100 µs. assert!( - w >= 100u64 * constants::WEIGHT_PER_MICROS, + w.ref_time() >= 100u64 * constants::WEIGHT_PER_MICROS.ref_time(), "Weight should be at least 100 µs." ); // At most 50 ms. - assert!(w <= 50u64 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); + assert!( + w.ref_time() <= 50u64 * constants::WEIGHT_PER_MILLIS.ref_time(), + "Weight should be at most 50 ms." + ); } } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs index 6c6b4a497d8..3ce6b73d584 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/extrinsic_weights.rs @@ -38,9 +38,15 @@ pub mod constants { let w = super::constants::ExtrinsicBaseWeight::get(); // At least 10 µs. - assert!(w >= 10u64 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); + assert!( + w.ref_time() >= 10u64 * constants::WEIGHT_PER_MICROS.ref_time(), + "Weight should be at least 10 µs." + ); // At most 1 ms. - assert!(w <= constants::WEIGHT_PER_MILLIS, "Weight should be at most 1 ms."); + assert!( + w.ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + "Weight should be at most 1 ms." + ); } } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs index 8083ccb4001..dca7d348310 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/paritydb_weights.rs @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1) >= constants::WEIGHT_PER_MICROS, + W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1) >= constants::WEIGHT_PER_MICROS, + W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1) <= constants::WEIGHT_PER_MILLIS, + W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1) <= constants::WEIGHT_PER_MILLIS, + W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs index 1db87f143f3..87867ebfe17 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/rocksdb_weights.rs @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1) >= constants::WEIGHT_PER_MICROS, + W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1) >= constants::WEIGHT_PER_MICROS, + W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1) <= constants::WEIGHT_PER_MILLIS, + W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1) <= constants::WEIGHT_PER_MILLIS, + W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/contracts/contracts-rococo/src/weights/block_weights.rs b/parachains/runtimes/contracts/contracts-rococo/src/weights/block_weights.rs index 7d4a931bd12..c004307336d 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/weights/block_weights.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/weights/block_weights.rs @@ -39,11 +39,14 @@ pub mod constants { // At least 100 µs. assert!( - w >= 100u64 * constants::WEIGHT_PER_MICROS, + w.ref_time() >= 100u64 * constants::WEIGHT_PER_MICROS.ref_time(), "Weight should be at least 100 µs." ); // At most 50 ms. - assert!(w <= 50u64 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); + assert!( + w.ref_time() <= 50u64 * constants::WEIGHT_PER_MILLIS.ref_time(), + "Weight should be at most 50 ms." + ); } } } diff --git a/parachains/runtimes/contracts/contracts-rococo/src/weights/extrinsic_weights.rs b/parachains/runtimes/contracts/contracts-rococo/src/weights/extrinsic_weights.rs index 6c6b4a497d8..3ce6b73d584 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/weights/extrinsic_weights.rs @@ -38,9 +38,15 @@ pub mod constants { let w = super::constants::ExtrinsicBaseWeight::get(); // At least 10 µs. - assert!(w >= 10u64 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); + assert!( + w.ref_time() >= 10u64 * constants::WEIGHT_PER_MICROS.ref_time(), + "Weight should be at least 10 µs." + ); // At most 1 ms. - assert!(w <= constants::WEIGHT_PER_MILLIS, "Weight should be at most 1 ms."); + assert!( + w.ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + "Weight should be at most 1 ms." + ); } } } diff --git a/parachains/runtimes/contracts/contracts-rococo/src/weights/paritydb_weights.rs b/parachains/runtimes/contracts/contracts-rococo/src/weights/paritydb_weights.rs index 8083ccb4001..dca7d348310 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/weights/paritydb_weights.rs @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1) >= constants::WEIGHT_PER_MICROS, + W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1) >= constants::WEIGHT_PER_MICROS, + W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1) <= constants::WEIGHT_PER_MILLIS, + W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1) <= constants::WEIGHT_PER_MILLIS, + W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/contracts/contracts-rococo/src/weights/rocksdb_weights.rs b/parachains/runtimes/contracts/contracts-rococo/src/weights/rocksdb_weights.rs index 1db87f143f3..87867ebfe17 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/weights/rocksdb_weights.rs @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1) >= constants::WEIGHT_PER_MICROS, + W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1) >= constants::WEIGHT_PER_MICROS, + W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1) <= constants::WEIGHT_PER_MILLIS, + W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1) <= constants::WEIGHT_PER_MILLIS, + W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/testing/penpal/src/weights/block_weights.rs b/parachains/runtimes/testing/penpal/src/weights/block_weights.rs index 7d4a931bd12..c004307336d 100644 --- a/parachains/runtimes/testing/penpal/src/weights/block_weights.rs +++ b/parachains/runtimes/testing/penpal/src/weights/block_weights.rs @@ -39,11 +39,14 @@ pub mod constants { // At least 100 µs. assert!( - w >= 100u64 * constants::WEIGHT_PER_MICROS, + w.ref_time() >= 100u64 * constants::WEIGHT_PER_MICROS.ref_time(), "Weight should be at least 100 µs." ); // At most 50 ms. - assert!(w <= 50u64 * constants::WEIGHT_PER_MILLIS, "Weight should be at most 50 ms."); + assert!( + w.ref_time() <= 50u64 * constants::WEIGHT_PER_MILLIS.ref_time(), + "Weight should be at most 50 ms." + ); } } } diff --git a/parachains/runtimes/testing/penpal/src/weights/extrinsic_weights.rs b/parachains/runtimes/testing/penpal/src/weights/extrinsic_weights.rs index 6c6b4a497d8..3ce6b73d584 100644 --- a/parachains/runtimes/testing/penpal/src/weights/extrinsic_weights.rs +++ b/parachains/runtimes/testing/penpal/src/weights/extrinsic_weights.rs @@ -38,9 +38,15 @@ pub mod constants { let w = super::constants::ExtrinsicBaseWeight::get(); // At least 10 µs. - assert!(w >= 10u64 * constants::WEIGHT_PER_MICROS, "Weight should be at least 10 µs."); + assert!( + w.ref_time() >= 10u64 * constants::WEIGHT_PER_MICROS.ref_time(), + "Weight should be at least 10 µs." + ); // At most 1 ms. - assert!(w <= constants::WEIGHT_PER_MILLIS, "Weight should be at most 1 ms."); + assert!( + w.ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), + "Weight should be at most 1 ms." + ); } } } diff --git a/parachains/runtimes/testing/penpal/src/weights/paritydb_weights.rs b/parachains/runtimes/testing/penpal/src/weights/paritydb_weights.rs index 8083ccb4001..dca7d348310 100644 --- a/parachains/runtimes/testing/penpal/src/weights/paritydb_weights.rs +++ b/parachains/runtimes/testing/penpal/src/weights/paritydb_weights.rs @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1) >= constants::WEIGHT_PER_MICROS, + W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1) >= constants::WEIGHT_PER_MICROS, + W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1) <= constants::WEIGHT_PER_MILLIS, + W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1) <= constants::WEIGHT_PER_MILLIS, + W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Write weight should be at most 1 ms." ); } diff --git a/parachains/runtimes/testing/penpal/src/weights/rocksdb_weights.rs b/parachains/runtimes/testing/penpal/src/weights/rocksdb_weights.rs index 1db87f143f3..87867ebfe17 100644 --- a/parachains/runtimes/testing/penpal/src/weights/rocksdb_weights.rs +++ b/parachains/runtimes/testing/penpal/src/weights/rocksdb_weights.rs @@ -42,20 +42,20 @@ pub mod constants { fn sane() { // At least 1 µs. assert!( - W::get().reads(1) >= constants::WEIGHT_PER_MICROS, + W::get().reads(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1) >= constants::WEIGHT_PER_MICROS, + W::get().writes(1).ref_time() >= constants::WEIGHT_PER_MICROS.ref_time(), "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1) <= constants::WEIGHT_PER_MILLIS, + W::get().reads(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1) <= constants::WEIGHT_PER_MILLIS, + W::get().writes(1).ref_time() <= constants::WEIGHT_PER_MILLIS.ref_time(), "Write weight should be at most 1 ms." ); } From 2e5aafe399195029b475a41400c62c1df7dbf4a2 Mon Sep 17 00:00:00 2001 From: Amar Singh Date: Thu, 8 Sep 2022 04:38:56 -0400 Subject: [PATCH 049/148] Mock epoch index and randomness in SproofBuilder (for testing) (#1594) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * minimal babe randomness in sproof builder * fix indexing * fix index and clean comment * use current para block for epoch and randomness * epoch is para block randomness is relay block * fix * make more configurable but keep defaults * fix export * fix * flatten * better field names * Update primitives/parachain-inherent/src/mock.rs * Update primitives/parachain-inherent/src/mock.rs * FMT * FIX * fmt * Update primitives/parachain-inherent/src/mock.rs Co-authored-by: Bastian Köcher Co-authored-by: Bastian Köcher --- primitives/parachain-inherent/src/mock.rs | 36 +++++++++++++++++++++-- test/relay-sproof-builder/src/lib.rs | 6 ++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/primitives/parachain-inherent/src/mock.rs b/primitives/parachain-inherent/src/mock.rs index e69b0a80911..e4ca16414c1 100644 --- a/primitives/parachain-inherent/src/mock.rs +++ b/primitives/parachain-inherent/src/mock.rs @@ -42,7 +42,7 @@ use cumulus_test_relay_sproof_builder::RelayStateSproofBuilder; /// in addition to the messages themselves, you must provide some information about /// your parachain's configuration in order to mock the MQC heads properly. /// See [`MockXcmConfig`] for more information -pub struct MockValidationDataInherentDataProvider { +pub struct MockValidationDataInherentDataProvider { /// The current block number of the local block chain (the parachain) pub current_para_block: u32, /// The relay block in which this parachain appeared to start. This will be the relay block @@ -51,6 +51,11 @@ pub struct MockValidationDataInherentDataProvider { /// The number of relay blocks that elapses between each parablock. Probably set this to 1 or 2 /// to simulate optimistic or realistic relay chain behavior. pub relay_blocks_per_para_block: u32, + /// Number of parachain blocks per relay chain epoch + /// Mock epoch is computed by dividing `current_para_block` by this value. + pub para_blocks_per_relay_epoch: u32, + /// Function to mock BABE one epoch ago randomness + pub relay_randomness_config: R, /// XCM messages and associated configuration information. pub xcm_config: MockXcmConfig, /// Inbound downward XCM messages to be injected into the block. @@ -59,6 +64,20 @@ pub struct MockValidationDataInherentDataProvider { pub raw_horizontal_messages: Vec<(ParaId, Vec)>, } +pub trait GenerateRandomness { + fn generate_randomness(&self, input: I) -> relay_chain::Hash; +} + +impl GenerateRandomness for () { + /// Default implementation uses relay epoch as randomness value + /// A more seemingly random implementation may hash the relay epoch instead + fn generate_randomness(&self, input: u64) -> relay_chain::Hash { + let mut mock_randomness: [u8; 32] = [0u8; 32]; + mock_randomness[..8].copy_from_slice(&input.to_be_bytes()); + mock_randomness.into() + } +} + /// Parameters for how the Mock inherent data provider should inject XCM messages. /// In addition to the messages themselves, some information about the parachain's /// configuration is also required so that the MQC heads can be read out of the @@ -130,7 +149,9 @@ impl MockXcmConfig { } #[async_trait::async_trait] -impl InherentDataProvider for MockValidationDataInherentDataProvider { +impl> InherentDataProvider + for MockValidationDataInherentDataProvider +{ fn provide_inherent_data( &self, inherent_data: &mut InherentData, @@ -178,6 +199,17 @@ impl InherentDataProvider for MockValidationDataInherentDataProvider { sproof_builder.upsert_inbound_channel(*para_id).mqc_head = Some(channel_mqc.head()); } + // Epoch is set equal to current para block / blocks per epoch + sproof_builder.current_epoch = if self.para_blocks_per_relay_epoch == 0 { + // do not divide by 0 => set epoch to para block number + self.current_para_block.into() + } else { + (self.current_para_block / self.para_blocks_per_relay_epoch).into() + }; + // Randomness is set by randomness generator + sproof_builder.randomness = + self.relay_randomness_config.generate_randomness(self.current_para_block.into()); + let (relay_parent_storage_root, proof) = sproof_builder.into_state_root_and_proof(); inherent_data.put_data( diff --git a/test/relay-sproof-builder/src/lib.rs b/test/relay-sproof-builder/src/lib.rs index 1faa37a1478..5c2a1a1063f 100644 --- a/test/relay-sproof-builder/src/lib.rs +++ b/test/relay-sproof-builder/src/lib.rs @@ -44,6 +44,7 @@ pub struct RelayStateSproofBuilder { pub hrmp_channels: BTreeMap, pub current_slot: relay_chain::v2::Slot, pub current_epoch: u64, + pub randomness: relay_chain::Hash, } impl Default for RelayStateSproofBuilder { @@ -69,6 +70,7 @@ impl Default for RelayStateSproofBuilder { hrmp_channels: BTreeMap::new(), current_slot: 0.into(), current_epoch: 0u64, + randomness: relay_chain::Hash::default(), } } } @@ -156,6 +158,10 @@ impl RelayStateSproofBuilder { insert(relay_chain::well_known_keys::hrmp_channels(channel), metadata.encode()); } insert(relay_chain::well_known_keys::EPOCH_INDEX.to_vec(), self.current_epoch.encode()); + insert( + relay_chain::well_known_keys::ONE_EPOCH_AGO_RANDOMNESS.to_vec(), + self.randomness.encode(), + ); insert(relay_chain::well_known_keys::CURRENT_SLOT.to_vec(), self.current_slot.encode()); } From f15d900b28075423004139c445fbec78d5e7a7c8 Mon Sep 17 00:00:00 2001 From: Muharem Ismailov Date: Fri, 9 Sep 2022 10:32:30 +0200 Subject: [PATCH 050/148] Common version pattern for Collectives runtime (#1606) --- parachains/runtimes/collectives/collectives-polkadot/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs index 4343e36718b..6fcf134a638 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs @@ -100,7 +100,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("collectives"), impl_name: create_runtime_str!("collectives"), authoring_version: 1, - spec_version: 102, + spec_version: 9230, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 0, From f120de2743a19306c691c00bd74e789114001520 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 10 Sep 2022 22:23:34 +0200 Subject: [PATCH 051/148] Bump url from 2.3.0 to 2.3.1 (#1608) Bumps [url](https://github.com/servo/rust-url) from 2.3.0 to 2.3.1. - [Release notes](https://github.com/servo/rust-url/releases) - [Commits](https://github.com/servo/rust-url/compare/v2.3.0...v2.3.1) --- updated-dependencies: - dependency-name: url dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 27 ++++++++++++++------- client/cli/Cargo.toml | 2 +- client/network/Cargo.toml | 2 +- client/relay-chain-rpc-interface/Cargo.toml | 2 +- test/service/Cargo.toml | 2 +- 5 files changed, 22 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index db1b6f1edb9..83b8e3b10a8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2793,11 +2793,10 @@ dependencies = [ [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" dependencies = [ - "matches", "percent-encoding", ] @@ -3585,6 +3584,16 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "if-addrs" version = "0.7.0" @@ -6854,9 +6863,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" @@ -12372,7 +12381,7 @@ dependencies = [ "futures-channel", "futures-io", "futures-util", - "idna", + "idna 0.2.3", "ipnet", "lazy_static", "log", @@ -12548,12 +12557,12 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22fe195a4f217c25b25cb5058ced57059824a678474874038dc88d211bf508d3" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", - "idna", + "idna 0.3.0", "percent-encoding", ] diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index b863a0d9830..1f74ca3311f 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] clap = { version = "3.2.20", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } -url = "2.3.0" +url = "2.3.1" # Substrate sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index d40981673b0..13dc0947b38 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -34,7 +34,7 @@ cumulus-relay-chain-interface = { path = "../relay-chain-interface" } [dev-dependencies] portpicker = "0.1.1" tokio = { version = "1.21.0", features = ["macros"] } -url = "2.3.0" +url = "2.3.1" # Substrate sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/client/relay-chain-rpc-interface/Cargo.toml b/client/relay-chain-rpc-interface/Cargo.toml index fd14a02dbf5..e1c3b2bebf6 100644 --- a/client/relay-chain-rpc-interface/Cargo.toml +++ b/client/relay-chain-rpc-interface/Cargo.toml @@ -27,5 +27,5 @@ parking_lot = "0.12.1" jsonrpsee = { version = "0.15.1", features = ["ws-client"] } tracing = "0.1.36" async-trait = "0.1.57" -url = "2.3.0" +url = "2.3.1" backoff = { version = "0.4.0", features = ["tokio"] } diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index a05ac42f3f8..ba581d6c874 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -18,7 +18,7 @@ rand = "0.8.5" serde = { version = "1.0.144", features = ["derive"] } tokio = { version = "1.21.0", features = ["macros"] } tracing = "0.1.36" -url = "2.3.0" +url = "2.3.1" # Substrate frame-system = { git = "https://github.com/paritytech/substrate", branch = "master" } From 51eb6478268b38977f1ff8aea2d943e4bf05f295 Mon Sep 17 00:00:00 2001 From: Muharem Ismailov Date: Mon, 12 Sep 2022 12:12:06 +0200 Subject: [PATCH 052/148] runtimes version to 9290 (#1612) * runtimes version to 9290 * No need to bump shell Co-authored-by: Giles Cope --- parachains/runtimes/assets/statemine/src/lib.rs | 2 +- parachains/runtimes/assets/statemint/src/lib.rs | 2 +- parachains/runtimes/assets/westmint/src/lib.rs | 2 +- parachains/runtimes/collectives/collectives-polkadot/src/lib.rs | 2 +- parachains/runtimes/contracts/contracts-rococo/src/lib.rs | 2 +- parachains/runtimes/starters/seedling/src/lib.rs | 2 +- parachains/runtimes/testing/penpal/src/lib.rs | 2 +- parachains/runtimes/testing/rococo-parachain/src/lib.rs | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/parachains/runtimes/assets/statemine/src/lib.rs b/parachains/runtimes/assets/statemine/src/lib.rs index ac03932a612..8de270a6455 100644 --- a/parachains/runtimes/assets/statemine/src/lib.rs +++ b/parachains/runtimes/assets/statemine/src/lib.rs @@ -85,7 +85,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("statemine"), impl_name: create_runtime_str!("statemine"), authoring_version: 1, - spec_version: 9230, + spec_version: 9290, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 7, diff --git a/parachains/runtimes/assets/statemint/src/lib.rs b/parachains/runtimes/assets/statemint/src/lib.rs index 67cb5a98330..02a04b3ed06 100644 --- a/parachains/runtimes/assets/statemint/src/lib.rs +++ b/parachains/runtimes/assets/statemint/src/lib.rs @@ -115,7 +115,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("statemint"), impl_name: create_runtime_str!("statemint"), authoring_version: 1, - spec_version: 9230, + spec_version: 9290, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 7, diff --git a/parachains/runtimes/assets/westmint/src/lib.rs b/parachains/runtimes/assets/westmint/src/lib.rs index 9e882809fe6..6482e5a1b05 100644 --- a/parachains/runtimes/assets/westmint/src/lib.rs +++ b/parachains/runtimes/assets/westmint/src/lib.rs @@ -83,7 +83,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("westmint"), impl_name: create_runtime_str!("westmint"), authoring_version: 1, - spec_version: 9230, + spec_version: 9290, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 7, diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs index 6fcf134a638..cd7701481c4 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs @@ -100,7 +100,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("collectives"), impl_name: create_runtime_str!("collectives"), authoring_version: 1, - spec_version: 9230, + spec_version: 9290, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 0, diff --git a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index 464272ef9ff..ff0271775be 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -113,7 +113,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("contracts-rococo"), impl_name: create_runtime_str!("contracts-rococo"), authoring_version: 1, - spec_version: 9230, + spec_version: 9290, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/parachains/runtimes/starters/seedling/src/lib.rs b/parachains/runtimes/starters/seedling/src/lib.rs index c1c26a32ed6..8c34141c331 100644 --- a/parachains/runtimes/starters/seedling/src/lib.rs +++ b/parachains/runtimes/starters/seedling/src/lib.rs @@ -63,7 +63,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("seedling"), impl_name: create_runtime_str!("seedling"), authoring_version: 1, - spec_version: 9230, + spec_version: 9290, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/parachains/runtimes/testing/penpal/src/lib.rs b/parachains/runtimes/testing/penpal/src/lib.rs index 9ac07369df8..ba91d29aa72 100644 --- a/parachains/runtimes/testing/penpal/src/lib.rs +++ b/parachains/runtimes/testing/penpal/src/lib.rs @@ -186,7 +186,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("penpal-parachain"), impl_name: create_runtime_str!("penpal-parachain"), authoring_version: 1, - spec_version: 9270, + spec_version: 9290, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/parachains/runtimes/testing/rococo-parachain/src/lib.rs index 3515e320308..6606e465703 100644 --- a/parachains/runtimes/testing/rococo-parachain/src/lib.rs +++ b/parachains/runtimes/testing/rococo-parachain/src/lib.rs @@ -94,7 +94,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("test-parachain"), impl_name: create_runtime_str!("test-parachain"), authoring_version: 1, - spec_version: 9230, + spec_version: 9290, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, From b43bc58cb6bc165cab571b6ecb34b72843902f5a Mon Sep 17 00:00:00 2001 From: Sergej Sakac <73715684+Szegoo@users.noreply.github.com> Date: Tue, 13 Sep 2022 01:55:33 +0200 Subject: [PATCH 053/148] Companion for #11981 (#1563) * Companion for #11981 * rename * Event to RuntimeEvent in imports * missed rename * undo * revert * rename type Call & Event * commit * ... * fix * fix errors * fixes * fmt * fix imports * final fix? * fmt * fix? * fixes after merge * small fix * cargo update -p polkadot-runtime-common * cargo +nightly fmt * update lockfile for {"polkadot", "substrate"} * fix Co-authored-by: Shawn Tabrizi Co-authored-by: parity-processbot <> --- Cargo.lock | 954 +++++++++--------- .../collator-selection/src/benchmarking.rs | 4 +- pallets/collator-selection/src/lib.rs | 2 +- pallets/collator-selection/src/mock.rs | 10 +- pallets/dmp-queue/src/lib.rs | 24 +- pallets/parachain-system/src/lib.rs | 2 +- pallets/parachain-system/src/tests.rs | 12 +- pallets/solo-to-para/src/lib.rs | 6 +- pallets/xcm/src/lib.rs | 12 +- pallets/xcmp-queue/src/lib.rs | 12 +- pallets/xcmp-queue/src/mock.rs | 14 +- pallets/xcmp-queue/src/tests.rs | 6 +- .../pallets/template/src/lib.rs | 2 +- .../pallets/template/src/mock.rs | 6 +- parachain-template/runtime/src/lib.rs | 31 +- parachain-template/runtime/src/xcm_config.rs | 25 +- parachains/common/src/impls.rs | 12 +- parachains/common/src/xcm_config.rs | 8 +- parachains/pallets/ping/src/lib.rs | 8 +- .../runtimes/assets/statemine/src/lib.rs | 141 +-- .../assets/statemine/src/xcm_config.rs | 26 +- .../runtimes/assets/statemint/src/lib.rs | 141 +-- .../assets/statemint/src/xcm_config.rs | 26 +- .../runtimes/assets/westmint/src/lib.rs | 141 +-- .../assets/westmint/src/xcm_config.rs | 26 +- .../collectives-polkadot/src/lib.rs | 65 +- .../collectives-polkadot/src/xcm_config.rs | 16 +- .../contracts-rococo/src/contracts.rs | 8 +- .../contracts/contracts-rococo/src/lib.rs | 37 +- .../contracts-rococo/src/xcm_config.rs | 20 +- .../runtimes/starters/seedling/src/lib.rs | 17 +- parachains/runtimes/starters/shell/src/lib.rs | 13 +- .../runtimes/starters/shell/src/xcm_config.rs | 8 +- parachains/runtimes/testing/penpal/src/lib.rs | 37 +- .../runtimes/testing/penpal/src/xcm_config.rs | 24 +- .../testing/rococo-parachain/src/lib.rs | 47 +- test/client/src/lib.rs | 10 +- test/runtime/src/lib.rs | 21 +- test/service/src/lib.rs | 4 +- 39 files changed, 1020 insertions(+), 958 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 83b8e3b10a8..7abe9f28c50 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -451,7 +451,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "beefy-primitives", @@ -487,7 +487,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -507,7 +507,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "beefy-primitives", "sp-api", @@ -516,7 +516,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "parity-scale-codec", "scale-info", @@ -1060,7 +1060,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-runtime-common", "polkadot-runtime-constants", "scale-info", @@ -1159,7 +1159,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-runtime-common", "scale-info", "serde", @@ -1233,18 +1233,18 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.85.3" +version = "0.87.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "749d0d6022c9038dccf480bdde2a38d435937335bf2bb0f14e815d94517cdce8" +checksum = "9f91425bea5a5ac6d76b788477064944a7e21f0e240fd93f6f368a774a3efdd1" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.85.3" +version = "0.87.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94370cc7b37bf652ccd8bb8f09bd900997f7ccf97520edfc75554bb5c4abbea" +checksum = "8b83b4bbf7bc96db77b7b5b5e41fafc4001536e9f0cbfd702ed7d4d8f848dc06" dependencies = [ "cranelift-bforest", "cranelift-codegen-meta", @@ -1260,33 +1260,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.85.3" +version = "0.87.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a3cea8fdab90e44018c5b9a1dfd460d8ee265ac354337150222a354628bdb6" +checksum = "da02e8fff048c381b313a3dfef4deb2343976fb6d7acc8e7d9c86d4c93e3fa06" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.85.3" +version = "0.87.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac72f76f2698598951ab26d8c96eaa854810e693e7dd52523958b5909fde6b2" +checksum = "9abc2a06e8fc29e36660ebbc9e2503e18a051057072acbb1e75e7f7cf19cb95e" [[package]] name = "cranelift-entity" -version = "0.85.3" +version = "0.87.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09eaeacfcd2356fe0e66b295e8f9d59fdd1ac3ace53ba50de14d628ec902f72d" +checksum = "aeced7874890fc25d85cacc5e626c4d67931c7c25aad1c2ad521684744c1ff5c" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.85.3" +version = "0.87.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dba69c9980d5ffd62c18a2bde927855fcd7c8dc92f29feaf8636052662cbd99c" +checksum = "fc1d301ccad6fce05d9c9793d433d225fafdd57661b98d268d8d162e9291ff2e" dependencies = [ "cranelift-codegen", "log", @@ -1296,15 +1296,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.85.3" +version = "0.87.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2920dc1e05cac40304456ed3301fde2c09bd6a9b0210bcfa2f101398d628d5b" +checksum = "bd7b100db19320848986b4df1da19501dbddeb706a799f502222f72f889b0fab" [[package]] name = "cranelift-native" -version = "0.85.3" +version = "0.87.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04dfa45f9b2a6f587c564d6b63388e00cd6589d2df6ea2758cf79e1a13285e6" +checksum = "7be18d8b976cddc822e52343f328b7593d26dd2f1aeadd90da071596a210d524" dependencies = [ "cranelift-codegen", "libc", @@ -1313,9 +1313,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.85.3" +version = "0.87.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31a46513ae6f26f3f267d8d75b5373d555fbbd1e68681f348d99df43f747ec54" +checksum = "2f9e48bb632a2e189b38a9fa89fa5a6eea687a5a4c613bbef7c2b7522c3ad0e0" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1662,7 +1662,7 @@ dependencies = [ "parking_lot 0.12.1", "polkadot-client", "polkadot-node-primitives", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-primitives", "polkadot-service", "polkadot-test-client", @@ -1793,7 +1793,7 @@ dependencies = [ "log", "pallet-balances", "parity-scale-codec", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "sc-client-api", "scale-info", "serde", @@ -1912,7 +1912,7 @@ dependencies = [ "frame-support", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-primitives", "sp-api", "sp-runtime", @@ -1968,7 +1968,7 @@ dependencies = [ "log", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-primitives", "sp-runtime", "sp-std", @@ -2071,7 +2071,7 @@ dependencies = [ "pallet-balances", "pallet-transaction-payment", "parity-scale-codec", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-primitives", "sc-block-builder", "sc-consensus", @@ -2786,7 +2786,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "parity-scale-codec", ] @@ -2803,7 +2803,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support", "frame-system", @@ -2826,7 +2826,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "Inflector", "chrono", @@ -2877,7 +2877,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2888,7 +2888,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2904,7 +2904,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support", "frame-system", @@ -2933,7 +2933,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "bitflags", "frame-metadata", @@ -2964,7 +2964,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "Inflector", "cfg-expr", @@ -2978,7 +2978,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2990,7 +2990,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "proc-macro2", "quote", @@ -3000,7 +3000,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support", "log", @@ -3017,7 +3017,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -3032,7 +3032,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "parity-scale-codec", "sp-api", @@ -3041,7 +3041,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support", "parity-scale-codec", @@ -3686,12 +3686,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "io-lifetimes" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec58677acfea8a15352d42fc87d11d63596ade9239e0a7c9352914417515dbe6" - [[package]] name = "io-lifetimes" version = "0.7.2" @@ -3925,8 +3919,8 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "beefy-primitives", "bitvec", @@ -4018,8 +4012,8 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "frame-support", "polkadot-primitives", @@ -4734,12 +4728,6 @@ dependencies = [ "statrs", ] -[[package]] -name = "linux-raw-sys" -version = "0.0.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5284f00d480e1c39af34e72f8ad60b94f47007e3481cd3b731c1d67190ddc7b7" - [[package]] name = "linux-raw-sys" version = "0.0.46" @@ -4865,11 +4853,11 @@ checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] name = "memfd" -version = "0.4.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6627dc657574b49d6ad27105ed671822be56e0d2547d413bfbf3e8d8fa92e7a" +checksum = "480b5a5de855d11ff13195950bdc8b98b5e942ef47afc447f6615cdcc4e15d80" dependencies = [ - "libc", + "rustix", ] [[package]] @@ -4921,9 +4909,9 @@ dependencies = [ [[package]] name = "memory_units" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" +checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" [[package]] name = "merlin" @@ -4976,12 +4964,6 @@ dependencies = [ "windows-sys 0.36.1", ] -[[package]] -name = "more-asserts" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" - [[package]] name = "multiaddr" version = "0.14.0" @@ -5232,6 +5214,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-complex" version = "0.4.0" @@ -5268,7 +5261,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" dependencies = [ "autocfg", - "num-bigint", + "num-bigint 0.2.6", "num-integer", "num-traits", ] @@ -5280,6 +5273,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" dependencies = [ "autocfg", + "num-bigint 0.4.3", "num-integer", "num-traits", ] @@ -5315,12 +5309,12 @@ dependencies = [ [[package]] name = "object" -version = "0.28.4" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424" +checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" dependencies = [ "crc32fast", - "hashbrown 0.11.2", + "hashbrown 0.12.3", "indexmap", "memchr", ] @@ -5358,7 +5352,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "async-trait", "dyn-clonable", @@ -5374,7 +5368,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "expander 0.0.6", "itertools", @@ -5412,7 +5406,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5433,7 +5427,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support", "frame-system", @@ -5450,7 +5444,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5464,7 +5458,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support", "frame-system", @@ -5480,7 +5474,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support", "frame-system", @@ -5496,7 +5490,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support", "frame-system", @@ -5511,7 +5505,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5535,7 +5529,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5555,7 +5549,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5570,7 +5564,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "beefy-primitives", "frame-support", @@ -5586,7 +5580,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -5609,7 +5603,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5627,7 +5621,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5672,7 +5666,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5689,7 +5683,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "bitflags", "frame-benchmarking", @@ -5717,7 +5711,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "bitflags", "parity-scale-codec", @@ -5732,7 +5726,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "proc-macro2", "quote", @@ -5742,7 +5736,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5759,7 +5753,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5772,7 +5766,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5788,7 +5782,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5811,7 +5805,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5824,7 +5818,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5842,7 +5836,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5857,7 +5851,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5880,7 +5874,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5896,7 +5890,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5916,7 +5910,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5933,7 +5927,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5950,7 +5944,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5968,7 +5962,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5983,7 +5977,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5998,7 +5992,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support", "frame-system", @@ -6015,7 +6009,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6034,7 +6028,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "parity-scale-codec", "sp-api", @@ -6044,7 +6038,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support", "frame-system", @@ -6061,7 +6055,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6084,7 +6078,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -6100,7 +6094,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -6115,7 +6109,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support", "frame-system", @@ -6129,7 +6123,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -6144,7 +6138,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -6160,7 +6154,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support", "frame-system", @@ -6181,7 +6175,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -6197,7 +6191,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support", "frame-system", @@ -6211,7 +6205,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6234,7 +6228,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6245,7 +6239,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "log", "sp-arithmetic", @@ -6254,7 +6248,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support", "frame-system", @@ -6283,7 +6277,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -6301,7 +6295,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -6320,7 +6314,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-support", "frame-system", @@ -6336,7 +6330,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6351,7 +6345,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6362,7 +6356,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -6379,7 +6373,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -6394,7 +6388,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -6410,7 +6404,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-benchmarking", "frame-support", @@ -6424,8 +6418,8 @@ dependencies = [ [[package]] name = "pallet-xcm" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "frame-support", "frame-system", @@ -6442,8 +6436,8 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "frame-benchmarking", "frame-support", @@ -6495,7 +6489,7 @@ dependencies = [ "parachain-template-runtime", "parity-scale-codec", "polkadot-cli", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-primitives", "polkadot-service", "sc-basic-authorship", @@ -6571,7 +6565,7 @@ dependencies = [ "pallet-xcm", "parachain-info", "parity-scale-codec", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-runtime-common", "scale-info", "serde", @@ -6712,9 +6706,9 @@ dependencies = [ [[package]] name = "parity-wasm" -version = "0.42.2" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be5e13c266502aadf83426d87d81a0f5d1ef45b8027f5a471c360abfe4bfae92" +checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" [[package]] name = "parking" @@ -6837,7 +6831,7 @@ dependencies = [ "parachain-info", "parachains-common", "parity-scale-codec", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-primitives", "polkadot-runtime-common", "scale-info", @@ -7000,8 +6994,8 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7015,8 +7009,8 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7029,8 +7023,8 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "derive_more", "fatality", @@ -7052,8 +7046,8 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "fatality", "futures", @@ -7073,8 +7067,8 @@ dependencies = [ [[package]] name = "polkadot-cli" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "clap 3.2.20", "frame-benchmarking-cli", @@ -7099,8 +7093,8 @@ dependencies = [ [[package]] name = "polkadot-client" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7140,8 +7134,8 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "always-assert", "fatality", @@ -7161,8 +7155,8 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7174,8 +7168,8 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "derive_more", "fatality", @@ -7197,8 +7191,8 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7211,8 +7205,8 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "futures", "futures-timer", @@ -7231,8 +7225,8 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "always-assert", "async-trait", @@ -7255,8 +7249,8 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "futures", "parity-scale-codec", @@ -7273,8 +7267,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "bitvec", "derive_more", @@ -7302,8 +7296,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "bitvec", "futures", @@ -7322,8 +7316,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "bitvec", "fatality", @@ -7341,8 +7335,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7356,8 +7350,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "async-trait", "futures", @@ -7366,7 +7360,7 @@ dependencies = [ "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-util", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-primitives", "sp-maybe-compressed-blob", "tracing-gum", @@ -7374,8 +7368,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7389,8 +7383,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "futures", "futures-timer", @@ -7406,8 +7400,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "fatality", "futures", @@ -7425,8 +7419,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "async-trait", "futures", @@ -7442,8 +7436,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "bitvec", "fatality", @@ -7460,8 +7454,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "always-assert", "assert_matches", @@ -7473,7 +7467,7 @@ dependencies = [ "pin-project", "polkadot-core-primitives", "polkadot-node-subsystem-util", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "rand 0.8.5", "rayon", "sc-executor", @@ -7492,8 +7486,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "futures", "polkadot-node-primitives", @@ -7508,8 +7502,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "futures", "memory-lru", @@ -7524,8 +7518,8 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "async-std", "lazy_static", @@ -7542,8 +7536,8 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "bs58", "futures", @@ -7561,8 +7555,8 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "async-trait", "derive_more", @@ -7583,13 +7577,13 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "bounded-vec", "futures", "parity-scale-codec", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-primitives", "schnorrkel", "serde", @@ -7605,8 +7599,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7615,8 +7609,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "async-trait", "futures", @@ -7633,8 +7627,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "async-trait", "derive_more", @@ -7656,8 +7650,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "async-trait", "derive_more", @@ -7689,8 +7683,8 @@ dependencies = [ [[package]] name = "polkadot-overseer" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "async-trait", "futures", @@ -7712,8 +7706,8 @@ dependencies = [ [[package]] name = "polkadot-parachain" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "derive_more", "frame-support", @@ -7760,7 +7754,7 @@ dependencies = [ "parity-scale-codec", "penpal-runtime", "polkadot-cli", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-primitives", "polkadot-service", "rococo-parachain-runtime", @@ -7812,8 +7806,8 @@ dependencies = [ [[package]] name = "polkadot-performance-test" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7827,8 +7821,8 @@ dependencies = [ [[package]] name = "polkadot-primitives" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "bitvec", "frame-system", @@ -7836,7 +7830,7 @@ dependencies = [ "parity-scale-codec", "parity-util-mem", "polkadot-core-primitives", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "scale-info", "serde", "sp-api", @@ -7857,8 +7851,8 @@ dependencies = [ [[package]] name = "polkadot-rpc" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7889,8 +7883,8 @@ dependencies = [ [[package]] name = "polkadot-runtime" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "beefy-primitives", "bitvec", @@ -7977,8 +7971,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "beefy-primitives", "bitvec", @@ -8024,8 +8018,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "frame-support", "polkadot-primitives", @@ -8036,8 +8030,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "bs58", "parity-scale-codec", @@ -8048,8 +8042,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "bitflags", "bitvec", @@ -8091,8 +8085,8 @@ dependencies = [ [[package]] name = "polkadot-service" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "async-trait", "beefy-gadget", @@ -8138,7 +8132,7 @@ dependencies = [ "polkadot-node-subsystem-types", "polkadot-node-subsystem-util", "polkadot-overseer", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-primitives", "polkadot-rpc", "polkadot-runtime", @@ -8196,8 +8190,8 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8217,8 +8211,8 @@ dependencies = [ [[package]] name = "polkadot-statement-table" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8227,8 +8221,8 @@ dependencies = [ [[package]] name = "polkadot-test-client" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8252,8 +8246,8 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "beefy-primitives", "bitvec", @@ -8280,7 +8274,7 @@ dependencies = [ "pallet-vesting", "pallet-xcm", "parity-scale-codec", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", @@ -8313,8 +8307,8 @@ dependencies = [ [[package]] name = "polkadot-test-service" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "frame-benchmarking", "frame-system", @@ -8326,7 +8320,7 @@ dependencies = [ "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-overseer", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-primitives", "polkadot-rpc", "polkadot-runtime-common", @@ -8459,7 +8453,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8852,9 +8846,9 @@ dependencies = [ [[package]] name = "regalloc2" -version = "0.2.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a8d23b35d7177df3b9d31ed8a9ab4bf625c668be77a319d4f5efd4a5257701c" +checksum = "d43a209257d978ef079f3d446331d0f1794f5e0fc19b306a199983857833a779" dependencies = [ "fxhash", "log", @@ -8888,22 +8882,10 @@ version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" -[[package]] -name = "region" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877e54ea2adcd70d80e9179344c97f93ef0dffd6b03e1f4529e6e83ab2fa9ae0" -dependencies = [ - "bitflags", - "libc", - "mach", - "winapi", -] - [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9001,7 +8983,7 @@ dependencies = [ "parachain-info", "parachains-common", "parity-scale-codec", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "scale-info", "serde", "sp-api", @@ -9024,8 +9006,8 @@ dependencies = [ [[package]] name = "rococo-runtime" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9043,25 +9025,39 @@ dependencies = [ "pallet-balances", "pallet-beefy", "pallet-beefy-mmr", + "pallet-bounties", + "pallet-child-bounties", "pallet-collective", + "pallet-democracy", + "pallet-elections-phragmen", + "pallet-gilt", "pallet-grandpa", + "pallet-identity", "pallet-im-online", "pallet-indices", "pallet-membership", "pallet-mmr", "pallet-multisig", "pallet-offences", + "pallet-preimage", "pallet-proxy", + "pallet-recovery", + "pallet-scheduler", "pallet-session", + "pallet-society", "pallet-staking", "pallet-sudo", "pallet-timestamp", + "pallet-tips", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", + "pallet-treasury", "pallet-utility", + "pallet-vesting", "pallet-xcm", + "pallet-xcm-benchmarks", "parity-scale-codec", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", @@ -9085,6 +9081,7 @@ dependencies = [ "sp-std", "sp-transaction-pool", "sp-version", + "static_assertions", "substrate-wasm-builder", "xcm", "xcm-builder", @@ -9093,8 +9090,8 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "frame-support", "polkadot-primitives", @@ -9166,29 +9163,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.33.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938a344304321a9da4973b9ff4f9f8db9caf4597dfd9dda6a60b523340a0fff0" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes 0.5.3", - "libc", - "linux-raw-sys 0.0.42", - "winapi", -] - -[[package]] -name = "rustix" -version = "0.35.7" +version = "0.35.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51cc38aa10f6bbb377ed28197aa052aa4e2b762c22be9d3153d01822587e787" +checksum = "72c825b8aa8010eb9ee99b75f05e10180b9278d161583034d7574c9d617aeada" dependencies = [ "bitflags", "errno", - "io-lifetimes 0.7.2", + "io-lifetimes", "libc", - "linux-raw-sys 0.0.46", + "linux-raw-sys", "windows-sys 0.36.1", ] @@ -9278,7 +9261,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "log", "sp-core", @@ -9289,7 +9272,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "futures", @@ -9316,7 +9299,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "futures", "futures-timer", @@ -9339,7 +9322,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9355,7 +9338,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9372,7 +9355,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9383,7 +9366,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "chrono", "clap 3.2.20", @@ -9422,7 +9405,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "fnv", "futures", @@ -9450,7 +9433,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "hash-db", "kvdb", @@ -9475,7 +9458,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "futures", @@ -9499,7 +9482,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "futures", @@ -9528,14 +9511,14 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "fork-tree", "futures", "log", "merlin", - "num-bigint", + "num-bigint 0.2.6", "num-rational 0.2.4", "num-traits", "parity-scale-codec", @@ -9570,7 +9553,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "futures", "jsonrpsee", @@ -9592,7 +9575,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9605,7 +9588,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "futures", @@ -9630,7 +9613,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9657,7 +9640,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "environmental", "parity-scale-codec", @@ -9673,7 +9656,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "log", "parity-scale-codec", @@ -9688,16 +9671,15 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "cfg-if 1.0.0", "libc", "log", "once_cell", "parity-scale-codec", - "parity-wasm 0.42.2", - "rustix 0.33.7", - "rustix 0.35.7", + "parity-wasm 0.45.0", + "rustix", "sc-allocator", "sc-executor-common", "sp-runtime-interface", @@ -9709,7 +9691,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "ahash", "async-trait", @@ -9750,7 +9732,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "finality-grandpa", "futures", @@ -9771,7 +9753,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "ansi_term", "futures", @@ -9788,7 +9770,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "hex", @@ -9803,7 +9785,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "asynchronous-codec", @@ -9852,7 +9834,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "bitflags", @@ -9875,7 +9857,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "ahash", "futures", @@ -9893,7 +9875,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "futures", "hex", @@ -9914,7 +9896,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "fork-tree", "futures", @@ -9942,7 +9924,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "bytes", "fnv", @@ -9972,7 +9954,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "futures", "libp2p", @@ -9985,7 +9967,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -9994,7 +9976,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "futures", "hash-db", @@ -10024,7 +10006,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "futures", "jsonrpsee", @@ -10047,7 +10029,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "futures", "jsonrpsee", @@ -10060,7 +10042,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "directories", @@ -10127,7 +10109,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "log", "parity-scale-codec", @@ -10141,7 +10123,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10160,7 +10142,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "futures", "libc", @@ -10179,7 +10161,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "chrono", "futures", @@ -10197,7 +10179,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "ansi_term", "atty", @@ -10228,7 +10210,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10239,7 +10221,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "futures", "futures-timer", @@ -10265,7 +10247,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "futures", "log", @@ -10278,7 +10260,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "futures", "futures-timer", @@ -10724,8 +10706,8 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "enumn", "parity-scale-codec", @@ -10801,7 +10783,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "hash-db", "log", @@ -10819,7 +10801,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "blake2", "proc-macro-crate", @@ -10831,7 +10813,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "parity-scale-codec", "scale-info", @@ -10844,7 +10826,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "integer-sqrt", "num-traits", @@ -10859,7 +10841,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "parity-scale-codec", "scale-info", @@ -10872,7 +10854,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "parity-scale-codec", @@ -10884,7 +10866,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "parity-scale-codec", "sp-api", @@ -10896,7 +10878,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "futures", "log", @@ -10914,7 +10896,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "futures", @@ -10933,7 +10915,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "parity-scale-codec", @@ -10951,7 +10933,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "merlin", @@ -10974,7 +10956,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "parity-scale-codec", "scale-info", @@ -10988,7 +10970,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "parity-scale-codec", "scale-info", @@ -11001,7 +10983,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "base58", "bitflags", @@ -11047,7 +11029,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "blake2", "byteorder", @@ -11061,7 +11043,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "proc-macro2", "quote", @@ -11072,7 +11054,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11081,7 +11063,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "proc-macro2", "quote", @@ -11091,7 +11073,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "environmental", "parity-scale-codec", @@ -11102,7 +11084,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "finality-grandpa", "log", @@ -11120,7 +11102,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11134,7 +11116,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "bytes", "futures", @@ -11160,7 +11142,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "lazy_static", "sp-core", @@ -11171,7 +11153,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "futures", @@ -11188,7 +11170,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "thiserror", "zstd", @@ -11197,7 +11179,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "log", "parity-scale-codec", @@ -11212,7 +11194,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "parity-scale-codec", "scale-info", @@ -11226,7 +11208,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "sp-api", "sp-core", @@ -11236,7 +11218,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "backtrace", "lazy_static", @@ -11246,7 +11228,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "rustc-hash", "serde", @@ -11256,7 +11238,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "either", "hash256-std-hasher", @@ -11278,7 +11260,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11296,7 +11278,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "Inflector", "proc-macro-crate", @@ -11308,7 +11290,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "log", "parity-scale-codec", @@ -11322,7 +11304,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "serde", "serde_json", @@ -11331,7 +11313,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "parity-scale-codec", "scale-info", @@ -11345,7 +11327,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "parity-scale-codec", "scale-info", @@ -11356,7 +11338,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "hash-db", "log", @@ -11378,12 +11360,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11396,7 +11378,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "log", "sp-core", @@ -11409,7 +11391,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "futures-timer", @@ -11425,7 +11407,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "parity-scale-codec", "sp-std", @@ -11437,7 +11419,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "sp-api", "sp-runtime", @@ -11446,7 +11428,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "log", @@ -11462,7 +11444,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "ahash", "hash-db", @@ -11485,11 +11467,11 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "impl-serde", "parity-scale-codec", - "parity-wasm 0.42.2", + "parity-wasm 0.45.0", "scale-info", "serde", "sp-core-hashing-proc-macro", @@ -11502,7 +11484,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11513,7 +11495,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "impl-trait-for-tuples", "log", @@ -11531,9 +11513,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "ss58-registry" -version = "1.18.0" +version = "1.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceb8b72a924ccfe7882d0e26144c114503760a4d1248bb5cd06c8ab2d55404cc" +checksum = "b0837b5d62f42082c9d56cd946495ae273a3c68083b637b9153341d5e465146d" dependencies = [ "Inflector", "num-format", @@ -11595,7 +11577,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-runtime-common", "scale-info", "serde", @@ -11662,7 +11644,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-runtime-common", "polkadot-runtime-constants", "scale-info", @@ -11774,7 +11756,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "platforms", ] @@ -11782,7 +11764,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11803,7 +11785,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "futures-util", "hyper", @@ -11816,7 +11798,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "jsonrpsee", "log", @@ -11837,7 +11819,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "async-trait", "futures", @@ -11863,7 +11845,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11873,7 +11855,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11884,7 +11866,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "ansi_term", "build-helper", @@ -11991,8 +11973,8 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "frame-support", "polkadot-primitives", @@ -12281,8 +12263,8 @@ dependencies = [ [[package]] name = "tracing-gum" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12292,8 +12274,8 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12420,7 +12402,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#26193945883c773f2f14f976da3c3bd11dc0eb79" +source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" dependencies = [ "clap 3.2.20", "frame-try-runtime", @@ -12733,11 +12715,11 @@ dependencies = [ [[package]] name = "wasm-instrument" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "962e5b0401bbb6c887f54e69b8c496ea36f704df65db73e81fd5ff8dc3e63a9f" +checksum = "8bca81f5279342b38b17d9acbf007a46ddeb73144e2bd5f0a21bfa9fc5d4ab3e" dependencies = [ - "parity-wasm 0.42.2", + "parity-wasm 0.45.0", ] [[package]] @@ -12757,58 +12739,63 @@ dependencies = [ [[package]] name = "wasmi" -version = "0.9.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca00c5147c319a8ec91ec1a0edbec31e566ce2c9cc93b3f9bb86a9efd0eb795d" +checksum = "fc13b3c219ca9aafeec59150d80d89851df02e0061bc357b4d66fc55a8d38787" dependencies = [ - "downcast-rs", - "libc", - "libm", - "memory_units", - "num-rational 0.2.4", - "num-traits", - "parity-wasm 0.42.2", + "parity-wasm 0.45.0", "wasmi-validation", + "wasmi_core", ] [[package]] name = "wasmi-validation" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "165343ecd6c018fc09ebcae280752702c9a2ef3e6f8d02f1cfcbdb53ef6d7937" +checksum = "91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b" dependencies = [ - "parity-wasm 0.42.2", + "parity-wasm 0.45.0", +] + +[[package]] +name = "wasmi_core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a088e8c4c59c6f2b9eae169bf86328adccc477c00b56d3661e3e9fb397b184" +dependencies = [ + "downcast-rs", + "libm", + "memory_units", + "num-rational 0.4.0", + "num-traits", ] [[package]] name = "wasmparser" -version = "0.85.0" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "570460c58b21e9150d2df0eaaedbb7816c34bcec009ae0dcc976e40ba81463e7" +checksum = "fb8cf7dd82407fe68161bedcd57fde15596f32ebf6e9b3bdbf3ae1da20e38e5e" dependencies = [ "indexmap", ] [[package]] name = "wasmtime" -version = "0.38.3" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f50eadf868ab6a04b7b511460233377d0bfbb92e417b2f6a98b98fef2e098f5" +checksum = "a020a3f6587fa7a7d98a021156177735ebb07212a6239a85ab5f14b2f728508f" dependencies = [ "anyhow", - "backtrace", "bincode", "cfg-if 1.0.0", "indexmap", - "lazy_static", "libc", "log", - "object 0.28.4", + "object 0.29.0", "once_cell", "paste", "psm", "rayon", - "region", "serde", "target-lexicon", "wasmparser", @@ -12817,14 +12804,23 @@ dependencies = [ "wasmtime-environ", "wasmtime-jit", "wasmtime-runtime", - "winapi", + "windows-sys 0.36.1", +] + +[[package]] +name = "wasmtime-asm-macros" +version = "0.40.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed4ada1fdd4d9a2aa37be652abcc31ae3188ad0efcefb4571ef4f785be2d777" +dependencies = [ + "cfg-if 1.0.0", ] [[package]] name = "wasmtime-cache" -version = "0.38.3" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1df23c642e1376892f3b72f311596976979cbf8b85469680cdd3a8a063d12a2" +checksum = "d96a03a5732ef39b83943d9d72de8ac2d58623d3bfaaea4d9a92aea5fcd9acf5" dependencies = [ "anyhow", "base64", @@ -12832,19 +12828,19 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.33.7", + "rustix", "serde", "sha2 0.9.8", "toml", - "winapi", + "windows-sys 0.36.1", "zstd", ] [[package]] name = "wasmtime-cranelift" -version = "0.38.3" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f264ff6b4df247d15584f2f53d009fbc90032cfdc2605b52b961bffc71b6eccd" +checksum = "1fc59c28fe895112db09e262fb9c483f9e7b82c78a82a6ded69567ccc0e9795b" dependencies = [ "anyhow", "cranelift-codegen", @@ -12854,8 +12850,7 @@ dependencies = [ "cranelift-wasm", "gimli", "log", - "more-asserts", - "object 0.28.4", + "object 0.29.0", "target-lexicon", "thiserror", "wasmparser", @@ -12864,17 +12859,16 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "0.38.3" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "839d2820e4b830f4b9e7aa08d4c0acabf4a5036105d639f6dfa1c6891c73bdc6" +checksum = "11086e573d2635a45ac0d44697a8e4586e058cf1b190f76bea466ca2ec36c30a" dependencies = [ "anyhow", "cranelift-entity", "gimli", "indexmap", "log", - "more-asserts", - "object 0.28.4", + "object 0.29.0", "serde", "target-lexicon", "thiserror", @@ -12884,9 +12878,9 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "0.38.3" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef0a0bcbfa18b946d890078ba0e1bc76bcc53eccfb40806c0020ec29dcd1bd49" +checksum = "d5444a78b74144718633f8642eccd7c4858f4c6f0c98ae6a3668998adf177ba2" dependencies = [ "addr2line", "anyhow", @@ -12895,38 +12889,36 @@ dependencies = [ "cpp_demangle", "gimli", "log", - "object 0.28.4", - "region", + "object 0.29.0", "rustc-demangle", - "rustix 0.33.7", + "rustix", "serde", "target-lexicon", "thiserror", "wasmtime-environ", "wasmtime-jit-debug", "wasmtime-runtime", - "winapi", + "windows-sys 0.36.1", ] [[package]] name = "wasmtime-jit-debug" -version = "0.38.3" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4779d976206c458edd643d1ac622b6c37e4a0800a8b1d25dfbf245ac2f2cac" +checksum = "c2bf6a667d2a29b2b0ed42bcf7564f00c595d92c24acb4d241c7c4d950b1910c" dependencies = [ - "lazy_static", - "object 0.28.4", - "rustix 0.33.7", + "object 0.29.0", + "once_cell", + "rustix", ] [[package]] name = "wasmtime-runtime" -version = "0.38.3" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7eb6ffa169eb5dcd18ac9473c817358cd57bc62c244622210566d473397954a" +checksum = "ee064ce7b563cc201cdf3bb1cc4b233f386d8c57a96e55f4c4afe6103f4bd6a1" dependencies = [ "anyhow", - "backtrace", "cc", "cfg-if 1.0.0", "indexmap", @@ -12935,21 +12927,21 @@ dependencies = [ "mach", "memfd", "memoffset", - "more-asserts", + "paste", "rand 0.8.5", - "region", - "rustix 0.33.7", + "rustix", "thiserror", + "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", - "winapi", + "windows-sys 0.36.1", ] [[package]] name = "wasmtime-types" -version = "0.38.3" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d932b0ac5336f7308d869703dd225610a6a3aeaa8e968c52b43eed96cefb1c2" +checksum = "01e104bd9e625181d53ead85910bbc0863aa5f0c6ef96836fe9a5cc65da11b69" dependencies = [ "cranelift-entity", "serde", @@ -12997,8 +12989,8 @@ dependencies = [ [[package]] name = "westend-runtime" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "beefy-primitives", "bitvec", @@ -13052,7 +13044,7 @@ dependencies = [ "pallet-xcm", "pallet-xcm-benchmarks", "parity-scale-codec", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", @@ -13086,8 +13078,8 @@ dependencies = [ [[package]] name = "westend-runtime-constants" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "frame-support", "polkadot-primitives", @@ -13140,7 +13132,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "polkadot-runtime-common", "scale-info", "serde", @@ -13372,8 +13364,8 @@ dependencies = [ [[package]] name = "xcm" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13386,15 +13378,15 @@ dependencies = [ [[package]] name = "xcm-builder" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "frame-support", "frame-system", "log", "pallet-transaction-payment", "parity-scale-codec", - "polkadot-parachain 0.9.28", + "polkadot-parachain 0.9.29", "scale-info", "sp-arithmetic", "sp-io", @@ -13406,8 +13398,8 @@ dependencies = [ [[package]] name = "xcm-executor" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "frame-benchmarking", "frame-support", @@ -13424,8 +13416,8 @@ dependencies = [ [[package]] name = "xcm-procedural" -version = "0.9.28" -source = "git+https://github.com/paritytech/polkadot?branch=master#850d1f5a819de5a9bf52a149ffd8b7d584ba1076" +version = "0.9.29" +source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" dependencies = [ "Inflector", "proc-macro2", diff --git a/pallets/collator-selection/src/benchmarking.rs b/pallets/collator-selection/src/benchmarking.rs index a08b2c7a43d..f5467fbd09a 100644 --- a/pallets/collator-selection/src/benchmarking.rs +++ b/pallets/collator-selection/src/benchmarking.rs @@ -44,9 +44,9 @@ macro_rules! whitelist { }; } -fn assert_last_event(generic_event: ::Event) { +fn assert_last_event(generic_event: ::RuntimeEvent) { let events = frame_system::Pallet::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); // compare to the last event record let EventRecord { event, .. } = &events[events.len() - 1]; assert_eq!(event, &system_event); diff --git a/pallets/collator-selection/src/lib.rs b/pallets/collator-selection/src/lib.rs index 918ec95a3d4..e2e8e95f9a0 100644 --- a/pallets/collator-selection/src/lib.rs +++ b/pallets/collator-selection/src/lib.rs @@ -112,7 +112,7 @@ pub mod pallet { #[pallet::config] pub trait Config: frame_system::Config { /// Overarching event type. - type Event: From> + IsType<::Event>; + type RuntimeEvent: From> + IsType<::RuntimeEvent>; /// The currency mechanism. type Currency: ReservableCurrency; diff --git a/pallets/collator-selection/src/mock.rs b/pallets/collator-selection/src/mock.rs index a3aa8a20cca..deac932ac21 100644 --- a/pallets/collator-selection/src/mock.rs +++ b/pallets/collator-selection/src/mock.rs @@ -60,7 +60,7 @@ impl system::Config for Test { type BlockLength = (); type DbWeight = (); type Origin = Origin; - type Call = Call; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -68,7 +68,7 @@ impl system::Config for Test { type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = BlockHashCount; type Version = (); type PalletInfo = PalletInfo; @@ -88,7 +88,7 @@ parameter_types! { impl pallet_balances::Config for Test { type Balance = u64; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DustRemoval = (); type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; @@ -171,7 +171,7 @@ parameter_types! { } impl pallet_session::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ValidatorId = ::AccountId; // we don't have stash and controller, thus we don't need the convert as well. type ValidatorIdOf = IdentityCollator; @@ -207,7 +207,7 @@ impl ValidatorRegistration for IsRegistered { } impl Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Currency = Balances; type UpdateOrigin = EnsureSignedBy; type PotId = PotId; diff --git a/pallets/dmp-queue/src/lib.rs b/pallets/dmp-queue/src/lib.rs index d27455079d1..bf1141bb58f 100644 --- a/pallets/dmp-queue/src/lib.rs +++ b/pallets/dmp-queue/src/lib.rs @@ -84,9 +84,9 @@ pub mod pallet { #[pallet::config] pub trait Config: frame_system::Config { /// The overarching event type. - type Event: From> + IsType<::Event>; + type RuntimeEvent: From> + IsType<::RuntimeEvent>; - type XcmExecutor: ExecuteXcm; + type XcmExecutor: ExecuteXcm; /// Origin which is allowed to execute overweight messages. type ExecuteOverweightOrigin: EnsureOrigin; @@ -224,11 +224,11 @@ pub mod pallet { mut data: &[u8], ) -> Result { let message_id = sp_io::hashing::blake2_256(data); - let maybe_msg = VersionedXcm::::decode_all_with_depth_limit( + let maybe_msg = VersionedXcm::::decode_all_with_depth_limit( MAX_XCM_DECODE_DEPTH, &mut data, ) - .map(Xcm::::try_from); + .map(Xcm::::try_from); match maybe_msg { Err(_) => { Self::deposit_event(Event::InvalidFormat { message_id }); @@ -353,7 +353,7 @@ mod tests { type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; type Block = frame_system::mocking::MockBlock; - type Xcm = xcm::latest::Xcm; + type Xcm = xcm::latest::Xcm; frame_support::construct_runtime!( pub enum Test where @@ -387,7 +387,7 @@ mod tests { impl frame_system::Config for Test { type Origin = Origin; - type Call = Call; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -395,7 +395,7 @@ mod tests { type AccountId = AccountId; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = BlockHashCount; type BlockLength = (); type BlockWeights = (); @@ -425,7 +425,7 @@ mod tests { } pub struct MockExec; - impl ExecuteXcm for MockExec { + impl ExecuteXcm for MockExec { fn execute_xcm_in_credit( _origin: impl Into, message: Xcm, @@ -449,7 +449,7 @@ mod tests { } impl Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = MockExec; type ExecuteOverweightOrigin = frame_system::EnsureRoot; } @@ -465,7 +465,7 @@ mod tests { index.end_used, enqueued .iter() - .map(|m| (0, VersionedXcm::::from(m.clone()).encode())) + .map(|m| (0, VersionedXcm::::from(m.clone()).encode())) .collect::>(), ); index.end_used += 1; @@ -474,7 +474,9 @@ mod tests { } fn handle_messages(incoming: &[Xcm], limit: Weight) -> Weight { - let iter = incoming.iter().map(|m| (0, VersionedXcm::::from(m.clone()).encode())); + let iter = incoming + .iter() + .map(|m| (0, VersionedXcm::::from(m.clone()).encode())); DmpQueue::handle_dmp_messages(iter, limit) } diff --git a/pallets/parachain-system/src/lib.rs b/pallets/parachain-system/src/lib.rs index ee2564b2fa5..b8e15d6e6a6 100644 --- a/pallets/parachain-system/src/lib.rs +++ b/pallets/parachain-system/src/lib.rs @@ -147,7 +147,7 @@ pub mod pallet { #[pallet::config] pub trait Config: frame_system::Config> { /// The overarching event type. - type Event: From> + IsType<::Event>; + type RuntimeEvent: From> + IsType<::RuntimeEvent>; /// Something which can be notified when the validation data is set. type OnSystemEvent: OnSystemEvent; diff --git a/pallets/parachain-system/src/tests.rs b/pallets/parachain-system/src/tests.rs index 9e3fa908e30..5bb3c965e6c 100755 --- a/pallets/parachain-system/src/tests.rs +++ b/pallets/parachain-system/src/tests.rs @@ -74,7 +74,7 @@ parameter_types! { } impl frame_system::Config for Test { type Origin = Origin; - type Call = Call; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -82,7 +82,7 @@ impl frame_system::Config for Test { type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = BlockHashCount; type BlockLength = (); type BlockWeights = (); @@ -99,7 +99,7 @@ impl frame_system::Config for Test { type MaxConsumers = frame_support::traits::ConstU32<16>; } impl Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnSystemEvent = (); type SelfParaId = ParachainId; type OutboundXcmpMessageSource = FromThreadLocal; @@ -403,7 +403,7 @@ fn events() { let events = System::events(); assert_eq!( events[0].event, - Event::ParachainSystem(crate::Event::ValidationFunctionStored.into()) + RuntimeEvent::ParachainSystem(crate::Event::ValidationFunctionStored.into()) ); }, ) @@ -414,7 +414,7 @@ fn events() { let events = System::events(); assert_eq!( events[0].event, - Event::ParachainSystem( + RuntimeEvent::ParachainSystem( crate::Event::ValidationFunctionApplied { relay_chain_block_num: 1234 } .into() ) @@ -490,7 +490,7 @@ fn aborted_upgrade() { let events = System::events(); assert_eq!( events[0].event, - Event::ParachainSystem(crate::Event::ValidationFunctionDiscarded.into()) + RuntimeEvent::ParachainSystem(crate::Event::ValidationFunctionDiscarded.into()) ); }, ); diff --git a/pallets/solo-to-para/src/lib.rs b/pallets/solo-to-para/src/lib.rs index 8a0b7dd2f22..bea78d25d4d 100644 --- a/pallets/solo-to-para/src/lib.rs +++ b/pallets/solo-to-para/src/lib.rs @@ -40,7 +40,7 @@ pub mod pallet { pub trait Config: frame_system::Config + parachain_system::Config + pallet_sudo::Config { - type Event: From + IsType<::Event>; + type RuntimeEvent: From + IsType<::RuntimeEvent>; } #[pallet::pallet] @@ -133,10 +133,10 @@ pub mod pallet { impl SignedExtension for CheckSudo where - ::Call: Dispatchable, + ::RuntimeCall: Dispatchable, { type AccountId = T::AccountId; - type Call = ::Call; + type Call = ::RuntimeCall; type AdditionalSigned = (); type Pre = (); const IDENTIFIER: &'static str = "CheckSudo"; diff --git a/pallets/xcm/src/lib.rs b/pallets/xcm/src/lib.rs index f3adaae3db0..9d9c656e84b 100644 --- a/pallets/xcm/src/lib.rs +++ b/pallets/xcm/src/lib.rs @@ -48,9 +48,9 @@ pub mod pallet { #[pallet::config] pub trait Config: frame_system::Config { /// The overarching event type. - type Event: From> + IsType<::Event>; + type RuntimeEvent: From> + IsType<::RuntimeEvent>; - type XcmExecutor: ExecuteXcm; + type XcmExecutor: ExecuteXcm; } #[pallet::error] @@ -114,11 +114,11 @@ impl DmpMessageHandler for UnlimitedDmpExecution { let mut used = Weight::zero(); for (_sent_at, data) in iter { let id = sp_io::hashing::twox_64(&data[..]); - let msg = VersionedXcm::::decode_all_with_depth_limit( + let msg = VersionedXcm::::decode_all_with_depth_limit( MAX_XCM_DECODE_DEPTH, &mut data.as_slice(), ) - .map(Xcm::::try_from); + .map(Xcm::::try_from); match msg { Err(_) => Pallet::::deposit_event(Event::InvalidFormat(id)), Ok(Err(())) => Pallet::::deposit_event(Event::UnsupportedVersion(id)), @@ -147,11 +147,11 @@ impl DmpMessageHandler for LimitAndDropDmpExecution { let mut used = Weight::zero(); for (_sent_at, data) in iter { let id = sp_io::hashing::twox_64(&data[..]); - let msg = VersionedXcm::::decode_all_with_depth_limit( + let msg = VersionedXcm::::decode_all_with_depth_limit( MAX_XCM_DECODE_DEPTH, &mut data.as_slice(), ) - .map(Xcm::::try_from); + .map(Xcm::::try_from); match msg { Err(_) => Pallet::::deposit_event(Event::InvalidFormat(id)), Ok(Err(())) => Pallet::::deposit_event(Event::UnsupportedVersion(id)), diff --git a/pallets/xcmp-queue/src/lib.rs b/pallets/xcmp-queue/src/lib.rs index f3dc23a3483..bd48fa7c993 100644 --- a/pallets/xcmp-queue/src/lib.rs +++ b/pallets/xcmp-queue/src/lib.rs @@ -78,10 +78,10 @@ pub mod pallet { #[pallet::config] pub trait Config: frame_system::Config { - type Event: From> + IsType<::Event>; + type RuntimeEvent: From> + IsType<::RuntimeEvent>; /// Something to execute an XCM message. We need this to service the XCMoXCMP queue. - type XcmExecutor: ExecuteXcm; + type XcmExecutor: ExecuteXcm; /// Information on the avaialble XCMP channels. type ChannelInfo: GetChannelInfo; @@ -140,7 +140,7 @@ pub mod pallet { let (sender, sent_at, data) = Overweight::::get(index).ok_or(Error::::BadOverweightIndex)?; - let xcm = VersionedXcm::::decode_all_with_depth_limit( + let xcm = VersionedXcm::::decode_all_with_depth_limit( MAX_XCM_DECODE_DEPTH, &mut data.as_slice(), ) @@ -596,12 +596,12 @@ impl Pallet { fn handle_xcm_message( sender: ParaId, _sent_at: RelayBlockNumber, - xcm: VersionedXcm, + xcm: VersionedXcm, max_weight: Weight, ) -> Result { let hash = Encode::using_encoded(&xcm, T::Hashing::hash); log::debug!("Processing XCMP-XCM: {:?}", &hash); - let (result, event) = match Xcm::::try_from(xcm) { + let (result, event) = match Xcm::::try_from(xcm) { Ok(xcm) => { let location = (1, Parachain(sender.into())); @@ -650,7 +650,7 @@ impl Pallet { XcmpMessageFormat::ConcatenatedVersionedXcm => { while !remaining_fragments.is_empty() { last_remaining_fragments = remaining_fragments; - if let Ok(xcm) = VersionedXcm::::decode_with_depth_limit( + if let Ok(xcm) = VersionedXcm::::decode_with_depth_limit( MAX_XCM_DECODE_DEPTH, &mut remaining_fragments, ) { diff --git a/pallets/xcmp-queue/src/mock.rs b/pallets/xcmp-queue/src/mock.rs index 9d945314e39..cc591c37fcd 100644 --- a/pallets/xcmp-queue/src/mock.rs +++ b/pallets/xcmp-queue/src/mock.rs @@ -63,7 +63,7 @@ impl frame_system::Config for Test { type BlockLength = (); type DbWeight = (); type Origin = Origin; - type Call = Call; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -71,7 +71,7 @@ impl frame_system::Config for Test { type AccountId = AccountId; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = BlockHashCount; type Version = (); type PalletInfo = PalletInfo; @@ -91,7 +91,7 @@ parameter_types! { impl pallet_balances::Config for Test { type Balance = u64; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DustRemoval = (); type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; @@ -102,7 +102,7 @@ impl pallet_balances::Config for Test { } impl cumulus_pallet_parachain_system::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnSystemEvent = (); type SelfParaId = (); type OutboundXcmpMessageSource = XcmpQueue; @@ -138,7 +138,7 @@ pub type LocationToAccountId = (ParentIsPreset,); pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { - type Call = Call; + type RuntimeCall = RuntimeCall; type XcmSender = XcmRouter; // How to withdraw and deposit an asset. type AssetTransactor = LocalAssetTransactor; @@ -147,7 +147,7 @@ impl xcm_executor::Config for XcmConfig { type IsTeleporter = NativeAsset; type LocationInverter = LocationInverter; type Barrier = (); - type Weigher = FixedWeightBounds; + type Weigher = FixedWeightBounds; type Trader = (); type ResponseHandler = (); type AssetTrap = (); @@ -183,7 +183,7 @@ impl ConvertOrigin for SystemParachainAsSuperuser; type ChannelInfo = ParachainSystem; type VersionWrapper = (); diff --git a/pallets/xcmp-queue/src/tests.rs b/pallets/xcmp-queue/src/tests.rs index d3660ffe22b..9d5288ce439 100644 --- a/pallets/xcmp-queue/src/tests.rs +++ b/pallets/xcmp-queue/src/tests.rs @@ -16,7 +16,7 @@ use super::*; use cumulus_primitives_core::XcmpMessageHandler; use frame_support::{assert_noop, assert_ok}; -use mock::{new_test_ext, Call, Origin, Test, XcmpQueue}; +use mock::{new_test_ext, Origin, RuntimeCall, Test, XcmpQueue}; use sp_runtime::traits::BadOrigin; #[test] @@ -120,7 +120,9 @@ fn suspend_xcm_execution_works() { new_test_ext().execute_with(|| { QueueSuspended::::put(true); - let xcm = VersionedXcm::from(Xcm::(vec![Instruction::::ClearOrigin])).encode(); + let xcm = + VersionedXcm::from(Xcm::(vec![Instruction::::ClearOrigin])) + .encode(); let mut message_format = XcmpMessageFormat::ConcatenatedVersionedXcm.encode(); message_format.extend(xcm.clone()); let messages = vec![(ParaId::from(999), 1u32.into(), message_format.as_slice())]; diff --git a/parachain-template/pallets/template/src/lib.rs b/parachain-template/pallets/template/src/lib.rs index 36a07d2c5e7..18d94bedb98 100644 --- a/parachain-template/pallets/template/src/lib.rs +++ b/parachain-template/pallets/template/src/lib.rs @@ -23,7 +23,7 @@ pub mod pallet { #[pallet::config] pub trait Config: frame_system::Config { /// Because this pallet emits events, it depends on the runtime's definition of an event. - type Event: From> + IsType<::Event>; + type RuntimeEvent: From> + IsType<::RuntimeEvent>; } #[pallet::pallet] diff --git a/parachain-template/pallets/template/src/mock.rs b/parachain-template/pallets/template/src/mock.rs index 917356c1d9e..5debcc4a1c3 100644 --- a/parachain-template/pallets/template/src/mock.rs +++ b/parachain-template/pallets/template/src/mock.rs @@ -33,7 +33,7 @@ impl system::Config for Test { type BlockLength = (); type DbWeight = (); type Origin = Origin; - type Call = Call; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -41,7 +41,7 @@ impl system::Config for Test { type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = BlockHashCount; type Version = (); type PalletInfo = PalletInfo; @@ -55,7 +55,7 @@ impl system::Config for Test { } impl pallet_template::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; } // Build genesis storage according to the mock runtime. diff --git a/parachain-template/runtime/src/lib.rs b/parachain-template/runtime/src/lib.rs index bd56bcac635..aa5b6805c1d 100644 --- a/parachain-template/runtime/src/lib.rs +++ b/parachain-template/runtime/src/lib.rs @@ -104,10 +104,11 @@ pub type SignedExtra = ( ); /// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; +pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< @@ -258,7 +259,7 @@ impl frame_system::Config for Runtime { /// The identifier used to distinguish between accounts. type AccountId = AccountId; /// The aggregated dispatch type that is available for extrinsics. - type Call = Call; + type RuntimeCall = RuntimeCall; /// The lookup mechanism to get account ID from whatever is passed in dispatchers. type Lookup = AccountIdLookup; /// The index type for storing how many extrinsics an account has signed. @@ -272,7 +273,7 @@ impl frame_system::Config for Runtime { /// The header type. type Header = generic::Header; /// The ubiquitous event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; /// The ubiquitous origin type. type Origin = Origin; /// Maximum number of block number to block hash mappings to keep (oldest pruned first). @@ -338,7 +339,7 @@ impl pallet_balances::Config for Runtime { /// The type for recording an account's balance. type Balance = Balance; /// The ubiquitous event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DustRemoval = (); type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; @@ -354,7 +355,7 @@ parameter_types! { } impl pallet_transaction_payment::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter; type WeightToFee = WeightToFee; type LengthToFee = ConstantMultiplier; @@ -368,7 +369,7 @@ parameter_types! { } impl cumulus_pallet_parachain_system::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnSystemEvent = (); type SelfParaId = parachain_info::Pallet; type OutboundXcmpMessageSource = XcmpQueue; @@ -384,7 +385,7 @@ impl parachain_info::Config for Runtime {} impl cumulus_pallet_aura_ext::Config for Runtime {} impl cumulus_pallet_xcmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ChannelInfo = ParachainSystem; type VersionWrapper = (); @@ -395,7 +396,7 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { } impl cumulus_pallet_dmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ExecuteOverweightOrigin = EnsureRoot; } @@ -407,7 +408,7 @@ parameter_types! { } impl pallet_session::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ValidatorId = ::AccountId; // we don't have stash and controller, thus we don't need the convert as well. type ValidatorIdOf = pallet_collator_selection::IdentityCollator; @@ -439,7 +440,7 @@ parameter_types! { pub type CollatorSelectionUpdateOrigin = EnsureRoot; impl pallet_collator_selection::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Currency = Balances; type UpdateOrigin = CollatorSelectionUpdateOrigin; type PotId = PotId; @@ -456,7 +457,7 @@ impl pallet_collator_selection::Config for Runtime { /// Configure the pallet template in pallets/template. impl pallet_template::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; } // Create the runtime by composing the FRAME pallets that were previously configured. @@ -613,17 +614,17 @@ impl_runtime_apis! { } } - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi for Runtime { fn query_call_info( - call: Call, + call: RuntimeCall, len: u32, ) -> pallet_transaction_payment::RuntimeDispatchInfo { TransactionPayment::query_call_info(call, len) } fn query_call_fee_details( - call: Call, + call: RuntimeCall, len: u32, ) -> pallet_transaction_payment::FeeDetails { TransactionPayment::query_call_fee_details(call, len) diff --git a/parachain-template/runtime/src/xcm_config.rs b/parachain-template/runtime/src/xcm_config.rs index f01b7166ea2..fb2e59bb9a2 100644 --- a/parachain-template/runtime/src/xcm_config.rs +++ b/parachain-template/runtime/src/xcm_config.rs @@ -1,6 +1,6 @@ use super::{ - AccountId, Balances, Call, Event, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, - WeightToFee, XcmpQueue, + AccountId, Balances, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, + RuntimeEvent, WeightToFee, XcmpQueue, }; use core::marker::PhantomData; use frame_support::{ @@ -100,9 +100,9 @@ where Deny: ShouldExecute, Allow: ShouldExecute, { - fn should_execute( + fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + message: &mut Xcm, max_weight: XCMWeight, weight_credit: &mut XCMWeight, ) -> Result<(), ()> { @@ -114,9 +114,10 @@ where // See issue #5233 pub struct DenyReserveTransferToRelayChain; impl ShouldExecute for DenyReserveTransferToRelayChain { - fn should_execute( + fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + + message: &mut Xcm, _max_weight: XCMWeight, _weight_credit: &mut XCMWeight, ) -> Result<(), ()> { @@ -163,7 +164,7 @@ pub type Barrier = DenyThenTry< pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { - type Call = Call; + type RuntimeCall = RuntimeCall; type XcmSender = XcmRouter; // How to withdraw and deposit an asset. type AssetTransactor = LocalAssetTransactor; @@ -172,7 +173,7 @@ impl xcm_executor::Config for XcmConfig { type IsTeleporter = (); // Teleporting is disabled. type LocationInverter = LocationInverter; type Barrier = Barrier; - type Weigher = FixedWeightBounds; + type Weigher = FixedWeightBounds; type Trader = UsingComponents>; type ResponseHandler = PolkadotXcm; @@ -194,7 +195,7 @@ pub type XcmRouter = ( ); impl pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; type ExecuteXcmOrigin = EnsureXcmOrigin; @@ -204,10 +205,10 @@ impl pallet_xcm::Config for Runtime { type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Nothing; - type Weigher = FixedWeightBounds; + type Weigher = FixedWeightBounds; type LocationInverter = LocationInverter; type Origin = Origin; - type Call = Call; + type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; // ^ Override for AdvertisedXcmVersion default @@ -215,6 +216,6 @@ impl pallet_xcm::Config for Runtime { } impl cumulus_pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; } diff --git a/parachains/common/src/impls.rs b/parachains/common/src/impls.rs index 4a2411c2cf3..c58e32a67e2 100644 --- a/parachains/common/src/impls.rs +++ b/parachains/common/src/impls.rs @@ -41,7 +41,7 @@ where R: pallet_balances::Config + pallet_collator_selection::Config, AccountIdOf: From + Into, - ::Event: From>, + ::RuntimeEvent: From>, { fn on_nonzero_unbalanced(amount: NegativeImbalance) { let staking_pot = >::account_id(); @@ -57,7 +57,7 @@ where R: pallet_balances::Config + pallet_collator_selection::Config, AccountIdOf: From + Into, - ::Event: From>, + ::RuntimeEvent: From>, { fn on_unbalanceds(mut fees_then_tips: impl Iterator>) { if let Some(mut fees) = fees_then_tips.next() { @@ -156,13 +156,13 @@ mod tests { type Origin = Origin; type Index = u64; type BlockNumber = u64; - type Call = Call; + type RuntimeCall = RuntimeCall; type Hash = H256; type Hashing = BlakeTwo256; type AccountId = AccountId; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = BlockHashCount; type BlockLength = BlockLength; type BlockWeights = (); @@ -180,7 +180,7 @@ mod tests { impl pallet_balances::Config for Test { type Balance = u64; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DustRemoval = (); type ExistentialDeposit = (); type AccountStore = System; @@ -215,7 +215,7 @@ mod tests { } impl pallet_collator_selection::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Currency = Balances; type UpdateOrigin = EnsureRoot; type PotId = PotId; diff --git a/parachains/common/src/xcm_config.rs b/parachains/common/src/xcm_config.rs index 7f796666d81..b9ae5ef87ce 100644 --- a/parachains/common/src/xcm_config.rs +++ b/parachains/common/src/xcm_config.rs @@ -22,9 +22,9 @@ where Deny: ShouldExecute, Allow: ShouldExecute, { - fn should_execute( + fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + message: &mut Xcm, max_weight: XCMWeight, weight_credit: &mut XCMWeight, ) -> Result<(), ()> { @@ -36,9 +36,9 @@ where // See issue #5233 pub struct DenyReserveTransferToRelayChain; impl ShouldExecute for DenyReserveTransferToRelayChain { - fn should_execute( + fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + message: &mut Xcm, _max_weight: XCMWeight, _weight_credit: &mut XCMWeight, ) -> Result<(), ()> { diff --git a/parachains/pallets/ping/src/lib.rs b/parachains/pallets/ping/src/lib.rs index 9d325d91455..5e20a94c078 100644 --- a/parachains/pallets/ping/src/lib.rs +++ b/parachains/pallets/ping/src/lib.rs @@ -47,13 +47,13 @@ pub mod pallet { #[pallet::config] pub trait Config: frame_system::Config { /// The overarching event type. - type Event: From> + IsType<::Event>; + type RuntimeEvent: From> + IsType<::RuntimeEvent>; type Origin: From<::Origin> + Into::Origin>>; /// The overarching call type; we assume sibling chains use the same type. - type Call: From> + Encode; + type RuntimeCall: From> + Encode; type XcmSender: SendXcm; } @@ -108,7 +108,7 @@ pub mod pallet { Xcm(vec![Transact { origin_type: OriginKind::Native, require_weight_at_most: 1_000, - call: ::Call::from(Call::::ping { + call: ::RuntimeCall::from(Call::::ping { seq, payload: payload.clone().to_vec(), }) @@ -198,7 +198,7 @@ pub mod pallet { Xcm(vec![Transact { origin_type: OriginKind::Native, require_weight_at_most: 1_000, - call: ::Call::from(Call::::pong { + call: ::RuntimeCall::from(Call::::pong { seq, payload: payload.clone(), }) diff --git a/parachains/runtimes/assets/statemine/src/lib.rs b/parachains/runtimes/assets/statemine/src/lib.rs index 8de270a6455..579eafb82a0 100644 --- a/parachains/runtimes/assets/statemine/src/lib.rs +++ b/parachains/runtimes/assets/statemine/src/lib.rs @@ -129,14 +129,14 @@ impl frame_system::Config for Runtime { type BlockWeights = RuntimeBlockWeights; type BlockLength = RuntimeBlockLength; type AccountId = AccountId; - type Call = Call; + type RuntimeCall = RuntimeCall; type Lookup = AccountIdLookup; type Index = Index; type BlockNumber = BlockNumber; type Hash = Hash; type Hashing = BlakeTwo256; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Origin = Origin; type BlockHashCount = BlockHashCount; type DbWeight = RocksDbWeight; @@ -185,7 +185,7 @@ impl pallet_balances::Config for Runtime { /// The type for recording an account's balance. type Balance = Balance; /// The ubiquitous event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DustRemoval = (); type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; @@ -201,7 +201,7 @@ parameter_types! { } impl pallet_transaction_payment::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter>; type WeightToFee = WeightToFee; @@ -227,7 +227,7 @@ pub type AssetsForceOrigin = EitherOfDiverse, EnsureXcm>>; impl pallet_assets::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Balance = Balance; type AssetId = AssetId; type Currency = Balances; @@ -252,8 +252,8 @@ parameter_types! { } impl pallet_multisig::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type Currency = Balances; type DepositBase = DepositBase; type DepositFactor = DepositFactor; @@ -262,8 +262,8 @@ impl pallet_multisig::Config for Runtime { } impl pallet_utility::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type PalletsOrigin = OriginCaller; type WeightInfo = weights::pallet_utility::WeightInfo; } @@ -315,65 +315,75 @@ impl Default for ProxyType { Self::Any } } -impl InstanceFilter for ProxyType { - fn filter(&self, c: &Call) -> bool { +impl InstanceFilter for ProxyType { + fn filter(&self, c: &RuntimeCall) -> bool { match self { ProxyType::Any => true, - ProxyType::NonTransfer => - !matches!(c, Call::Balances { .. } | Call::Assets { .. } | Call::Uniques { .. }), + ProxyType::NonTransfer => !matches!( + c, + RuntimeCall::Balances { .. } | + RuntimeCall::Assets { .. } | + RuntimeCall::Uniques { .. } + ), ProxyType::CancelProxy => matches!( c, - Call::Proxy(pallet_proxy::Call::reject_announcement { .. }) | - Call::Utility { .. } | Call::Multisig { .. } + RuntimeCall::Proxy(pallet_proxy::Call::reject_announcement { .. }) | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } ), ProxyType::Assets => { matches!( c, - Call::Assets { .. } | - Call::Utility { .. } | Call::Multisig { .. } | - Call::Uniques { .. } + RuntimeCall::Assets { .. } | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } | + RuntimeCall::Uniques { .. } ) }, ProxyType::AssetOwner => matches!( c, - Call::Assets(pallet_assets::Call::create { .. }) | - Call::Assets(pallet_assets::Call::destroy { .. }) | - Call::Assets(pallet_assets::Call::transfer_ownership { .. }) | - Call::Assets(pallet_assets::Call::set_team { .. }) | - Call::Assets(pallet_assets::Call::set_metadata { .. }) | - Call::Assets(pallet_assets::Call::clear_metadata { .. }) | - Call::Uniques(pallet_uniques::Call::create { .. }) | - Call::Uniques(pallet_uniques::Call::destroy { .. }) | - Call::Uniques(pallet_uniques::Call::transfer_ownership { .. }) | - Call::Uniques(pallet_uniques::Call::set_team { .. }) | - Call::Uniques(pallet_uniques::Call::set_metadata { .. }) | - Call::Uniques(pallet_uniques::Call::set_attribute { .. }) | - Call::Uniques(pallet_uniques::Call::set_collection_metadata { .. }) | - Call::Uniques(pallet_uniques::Call::clear_metadata { .. }) | - Call::Uniques(pallet_uniques::Call::clear_attribute { .. }) | - Call::Uniques(pallet_uniques::Call::clear_collection_metadata { .. }) | - Call::Uniques(pallet_uniques::Call::set_collection_max_supply { .. }) | - Call::Utility { .. } | Call::Multisig { .. } + RuntimeCall::Assets(pallet_assets::Call::create { .. }) | + RuntimeCall::Assets(pallet_assets::Call::destroy { .. }) | + RuntimeCall::Assets(pallet_assets::Call::transfer_ownership { .. }) | + RuntimeCall::Assets(pallet_assets::Call::set_team { .. }) | + RuntimeCall::Assets(pallet_assets::Call::set_metadata { .. }) | + RuntimeCall::Assets(pallet_assets::Call::clear_metadata { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::create { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::destroy { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::transfer_ownership { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::set_team { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::set_metadata { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::set_attribute { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::set_collection_metadata { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::clear_metadata { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::clear_attribute { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::clear_collection_metadata { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::set_collection_max_supply { .. }) | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } ), ProxyType::AssetManager => matches!( c, - Call::Assets(pallet_assets::Call::mint { .. }) | - Call::Assets(pallet_assets::Call::burn { .. }) | - Call::Assets(pallet_assets::Call::freeze { .. }) | - Call::Assets(pallet_assets::Call::thaw { .. }) | - Call::Assets(pallet_assets::Call::freeze_asset { .. }) | - Call::Assets(pallet_assets::Call::thaw_asset { .. }) | - Call::Uniques(pallet_uniques::Call::mint { .. }) | - Call::Uniques(pallet_uniques::Call::burn { .. }) | - Call::Uniques(pallet_uniques::Call::freeze { .. }) | - Call::Uniques(pallet_uniques::Call::thaw { .. }) | - Call::Uniques(pallet_uniques::Call::freeze_collection { .. }) | - Call::Uniques(pallet_uniques::Call::thaw_collection { .. }) | - Call::Utility { .. } | Call::Multisig { .. } + RuntimeCall::Assets(pallet_assets::Call::mint { .. }) | + RuntimeCall::Assets(pallet_assets::Call::burn { .. }) | + RuntimeCall::Assets(pallet_assets::Call::freeze { .. }) | + RuntimeCall::Assets(pallet_assets::Call::thaw { .. }) | + RuntimeCall::Assets(pallet_assets::Call::freeze_asset { .. }) | + RuntimeCall::Assets(pallet_assets::Call::thaw_asset { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::mint { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::burn { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::freeze { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::thaw { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::freeze_collection { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::thaw_collection { .. }) | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } ), ProxyType::Collator => matches!( c, - Call::CollatorSelection { .. } | Call::Utility { .. } | Call::Multisig { .. } + RuntimeCall::CollatorSelection { .. } | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } ), } } @@ -392,8 +402,8 @@ impl InstanceFilter for ProxyType { } impl pallet_proxy::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type Currency = Balances; type ProxyType = ProxyType; type ProxyDepositBase = ProxyDepositBase; @@ -412,7 +422,7 @@ parameter_types! { } impl cumulus_pallet_parachain_system::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnSystemEvent = (); type SelfParaId = parachain_info::Pallet; type DmpMessageHandler = DmpQueue; @@ -428,7 +438,7 @@ impl parachain_info::Config for Runtime {} impl cumulus_pallet_aura_ext::Config for Runtime {} impl cumulus_pallet_xcmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ChannelInfo = ParachainSystem; type VersionWrapper = PolkadotXcm; @@ -442,7 +452,7 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { } impl cumulus_pallet_dmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ExecuteOverweightOrigin = EnsureRoot; } @@ -454,7 +464,7 @@ parameter_types! { } impl pallet_session::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ValidatorId = ::AccountId; // we don't have stash and controller, thus we don't need the convert as well. type ValidatorIdOf = pallet_collator_selection::IdentityCollator; @@ -486,7 +496,7 @@ pub type CollatorSelectionUpdateOrigin = EitherOfDiverse, EnsureXcm>>; impl pallet_collator_selection::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Currency = Balances; type UpdateOrigin = CollatorSelectionUpdateOrigin; type PotId = PotId; @@ -502,7 +512,7 @@ impl pallet_collator_selection::Config for Runtime { } impl pallet_asset_tx_payment::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Fungibles = Assets; type OnChargeAssetTransaction = pallet_asset_tx_payment::FungiblesAdapter< pallet_assets::BalanceToAssetBalance, @@ -522,7 +532,7 @@ parameter_types! { } impl pallet_uniques::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type CollectionId = u32; type ItemId = u32; type Currency = Balances; @@ -607,9 +617,10 @@ pub type SignedExtra = ( pallet_asset_tx_payment::ChargeAssetTxPayment, ); /// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; +pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, @@ -746,17 +757,17 @@ impl_runtime_apis! { } } - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi for Runtime { fn query_call_info( - call: Call, + call: RuntimeCall, len: u32, ) -> pallet_transaction_payment::RuntimeDispatchInfo { TransactionPayment::query_call_info(call, len) } fn query_call_fee_details( - call: Call, + call: RuntimeCall, len: u32, ) -> pallet_transaction_payment::FeeDetails { TransactionPayment::query_call_fee_details(call, len) @@ -889,7 +900,7 @@ impl_runtime_apis! { } impl pallet_xcm_benchmarks::generic::Config for Runtime { - type Call = Call; + type RuntimeCall = RuntimeCall; fn worst_case_response() -> (u64, Response) { (0u64, Response::Version(Default::default())) diff --git a/parachains/runtimes/assets/statemine/src/xcm_config.rs b/parachains/runtimes/assets/statemine/src/xcm_config.rs index d8f59ffcb69..5036b889c1c 100644 --- a/parachains/runtimes/assets/statemine/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemine/src/xcm_config.rs @@ -14,8 +14,8 @@ // limitations under the License. use super::{ - AccountId, AssetId, Assets, Authorship, Balance, Balances, Call, Event, Origin, ParachainInfo, - ParachainSystem, PolkadotXcm, Runtime, WeightToFee, XcmpQueue, + AccountId, AssetId, Assets, Authorship, Balance, Balances, Origin, ParachainInfo, + ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, WeightToFee, XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -159,7 +159,7 @@ pub type Barrier = DenyThenTry< pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { - type Call = Call; + type RuntimeCall = RuntimeCall; type XcmSender = XcmRouter; type AssetTransactor = AssetTransactors; type OriginConverter = XcmOriginToTransactDispatchOrigin; @@ -170,8 +170,11 @@ impl xcm_executor::Config for XcmConfig { type IsTeleporter = NativeAsset; // <- should be enough to allow teleportation of KSM type LocationInverter = LocationInverter; type Barrier = Barrier; - type Weigher = - WeightInfoBounds, Call, MaxInstructions>; + type Weigher = WeightInfoBounds< + crate::weights::xcm::StatemineXcmWeight, + RuntimeCall, + MaxInstructions, + >; type Trader = ( UsingComponents>, cumulus_primitives_utility::TakeFirstAssetTrader< @@ -215,7 +218,7 @@ pub type XcmRouter = ( ); impl pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; // We want to disallow users sending (arbitrary) XCMs from this chain. type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; @@ -226,17 +229,20 @@ impl pallet_xcm::Config for Runtime { type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; - type Weigher = - WeightInfoBounds, Call, MaxInstructions>; + type Weigher = WeightInfoBounds< + crate::weights::xcm::StatemineXcmWeight, + RuntimeCall, + MaxInstructions, + >; type LocationInverter = LocationInverter; type Origin = Origin; - type Call = Call; + type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; } impl cumulus_pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; } diff --git a/parachains/runtimes/assets/statemint/src/lib.rs b/parachains/runtimes/assets/statemint/src/lib.rs index 02a04b3ed06..5a54fa95cc2 100644 --- a/parachains/runtimes/assets/statemint/src/lib.rs +++ b/parachains/runtimes/assets/statemint/src/lib.rs @@ -159,14 +159,14 @@ impl frame_system::Config for Runtime { type BlockWeights = RuntimeBlockWeights; type BlockLength = RuntimeBlockLength; type AccountId = AccountId; - type Call = Call; + type RuntimeCall = RuntimeCall; type Lookup = AccountIdLookup; type Index = Index; type BlockNumber = BlockNumber; type Hash = Hash; type Hashing = BlakeTwo256; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Origin = Origin; type BlockHashCount = BlockHashCount; type DbWeight = RocksDbWeight; @@ -215,7 +215,7 @@ impl pallet_balances::Config for Runtime { /// The type for recording an account's balance. type Balance = Balance; /// The ubiquitous event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DustRemoval = (); type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; @@ -231,7 +231,7 @@ parameter_types! { } impl pallet_transaction_payment::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter>; type WeightToFee = WeightToFee; @@ -257,7 +257,7 @@ pub type AssetsForceOrigin = EitherOfDiverse, EnsureXcm>>; impl pallet_assets::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Balance = Balance; type AssetId = AssetId; type Currency = Balances; @@ -282,8 +282,8 @@ parameter_types! { } impl pallet_multisig::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type Currency = Balances; type DepositBase = DepositBase; type DepositFactor = DepositFactor; @@ -292,8 +292,8 @@ impl pallet_multisig::Config for Runtime { } impl pallet_utility::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type PalletsOrigin = OriginCaller; type WeightInfo = weights::pallet_utility::WeightInfo; } @@ -345,65 +345,75 @@ impl Default for ProxyType { Self::Any } } -impl InstanceFilter for ProxyType { - fn filter(&self, c: &Call) -> bool { +impl InstanceFilter for ProxyType { + fn filter(&self, c: &RuntimeCall) -> bool { match self { ProxyType::Any => true, - ProxyType::NonTransfer => - !matches!(c, Call::Balances { .. } | Call::Assets { .. } | Call::Uniques { .. }), + ProxyType::NonTransfer => !matches!( + c, + RuntimeCall::Balances { .. } | + RuntimeCall::Assets { .. } | + RuntimeCall::Uniques { .. } + ), ProxyType::CancelProxy => matches!( c, - Call::Proxy(pallet_proxy::Call::reject_announcement { .. }) | - Call::Utility { .. } | Call::Multisig { .. } + RuntimeCall::Proxy(pallet_proxy::Call::reject_announcement { .. }) | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } ), ProxyType::Assets => { matches!( c, - Call::Assets { .. } | - Call::Utility { .. } | Call::Multisig { .. } | - Call::Uniques { .. } + RuntimeCall::Assets { .. } | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } | + RuntimeCall::Uniques { .. } ) }, ProxyType::AssetOwner => matches!( c, - Call::Assets(pallet_assets::Call::create { .. }) | - Call::Assets(pallet_assets::Call::destroy { .. }) | - Call::Assets(pallet_assets::Call::transfer_ownership { .. }) | - Call::Assets(pallet_assets::Call::set_team { .. }) | - Call::Assets(pallet_assets::Call::set_metadata { .. }) | - Call::Assets(pallet_assets::Call::clear_metadata { .. }) | - Call::Uniques(pallet_uniques::Call::create { .. }) | - Call::Uniques(pallet_uniques::Call::destroy { .. }) | - Call::Uniques(pallet_uniques::Call::transfer_ownership { .. }) | - Call::Uniques(pallet_uniques::Call::set_team { .. }) | - Call::Uniques(pallet_uniques::Call::set_metadata { .. }) | - Call::Uniques(pallet_uniques::Call::set_attribute { .. }) | - Call::Uniques(pallet_uniques::Call::set_collection_metadata { .. }) | - Call::Uniques(pallet_uniques::Call::clear_metadata { .. }) | - Call::Uniques(pallet_uniques::Call::clear_attribute { .. }) | - Call::Uniques(pallet_uniques::Call::clear_collection_metadata { .. }) | - Call::Uniques(pallet_uniques::Call::set_collection_max_supply { .. }) | - Call::Utility { .. } | Call::Multisig { .. } + RuntimeCall::Assets(pallet_assets::Call::create { .. }) | + RuntimeCall::Assets(pallet_assets::Call::destroy { .. }) | + RuntimeCall::Assets(pallet_assets::Call::transfer_ownership { .. }) | + RuntimeCall::Assets(pallet_assets::Call::set_team { .. }) | + RuntimeCall::Assets(pallet_assets::Call::set_metadata { .. }) | + RuntimeCall::Assets(pallet_assets::Call::clear_metadata { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::create { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::destroy { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::transfer_ownership { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::set_team { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::set_metadata { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::set_attribute { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::set_collection_metadata { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::clear_metadata { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::clear_attribute { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::clear_collection_metadata { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::set_collection_max_supply { .. }) | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } ), ProxyType::AssetManager => matches!( c, - Call::Assets(pallet_assets::Call::mint { .. }) | - Call::Assets(pallet_assets::Call::burn { .. }) | - Call::Assets(pallet_assets::Call::freeze { .. }) | - Call::Assets(pallet_assets::Call::thaw { .. }) | - Call::Assets(pallet_assets::Call::freeze_asset { .. }) | - Call::Assets(pallet_assets::Call::thaw_asset { .. }) | - Call::Uniques(pallet_uniques::Call::mint { .. }) | - Call::Uniques(pallet_uniques::Call::burn { .. }) | - Call::Uniques(pallet_uniques::Call::freeze { .. }) | - Call::Uniques(pallet_uniques::Call::thaw { .. }) | - Call::Uniques(pallet_uniques::Call::freeze_collection { .. }) | - Call::Uniques(pallet_uniques::Call::thaw_collection { .. }) | - Call::Utility { .. } | Call::Multisig { .. } + RuntimeCall::Assets(pallet_assets::Call::mint { .. }) | + RuntimeCall::Assets(pallet_assets::Call::burn { .. }) | + RuntimeCall::Assets(pallet_assets::Call::freeze { .. }) | + RuntimeCall::Assets(pallet_assets::Call::thaw { .. }) | + RuntimeCall::Assets(pallet_assets::Call::freeze_asset { .. }) | + RuntimeCall::Assets(pallet_assets::Call::thaw_asset { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::mint { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::burn { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::freeze { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::thaw { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::freeze_collection { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::thaw_collection { .. }) | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } ), ProxyType::Collator => matches!( c, - Call::CollatorSelection { .. } | Call::Utility { .. } | Call::Multisig { .. } + RuntimeCall::CollatorSelection { .. } | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } ), } } @@ -422,8 +432,8 @@ impl InstanceFilter for ProxyType { } impl pallet_proxy::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type Currency = Balances; type ProxyType = ProxyType; type ProxyDepositBase = ProxyDepositBase; @@ -442,7 +452,7 @@ parameter_types! { } impl cumulus_pallet_parachain_system::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnSystemEvent = (); type SelfParaId = parachain_info::Pallet; type DmpMessageHandler = DmpQueue; @@ -458,7 +468,7 @@ impl parachain_info::Config for Runtime {} impl cumulus_pallet_aura_ext::Config for Runtime {} impl cumulus_pallet_xcmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ChannelInfo = ParachainSystem; type VersionWrapper = PolkadotXcm; @@ -472,7 +482,7 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { } impl cumulus_pallet_dmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ExecuteOverweightOrigin = EnsureRoot; } @@ -484,7 +494,7 @@ parameter_types! { } impl pallet_session::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ValidatorId = ::AccountId; // we don't have stash and controller, thus we don't need the convert as well. type ValidatorIdOf = pallet_collator_selection::IdentityCollator; @@ -516,7 +526,7 @@ pub type CollatorSelectionUpdateOrigin = EitherOfDiverse, EnsureXcm>>; impl pallet_collator_selection::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Currency = Balances; type UpdateOrigin = CollatorSelectionUpdateOrigin; type PotId = PotId; @@ -532,7 +542,7 @@ impl pallet_collator_selection::Config for Runtime { } impl pallet_asset_tx_payment::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Fungibles = Assets; type OnChargeAssetTransaction = pallet_asset_tx_payment::FungiblesAdapter< pallet_assets::BalanceToAssetBalance, @@ -552,7 +562,7 @@ parameter_types! { } impl pallet_uniques::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type CollectionId = u32; type ItemId = u32; type Currency = Balances; @@ -637,9 +647,10 @@ pub type SignedExtra = ( pallet_asset_tx_payment::ChargeAssetTxPayment, ); /// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; +pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, @@ -775,17 +786,17 @@ impl_runtime_apis! { } } - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi for Runtime { fn query_call_info( - call: Call, + call: RuntimeCall, len: u32, ) -> pallet_transaction_payment::RuntimeDispatchInfo { TransactionPayment::query_call_info(call, len) } fn query_call_fee_details( - call: Call, + call: RuntimeCall, len: u32, ) -> pallet_transaction_payment::FeeDetails { TransactionPayment::query_call_fee_details(call, len) @@ -917,7 +928,7 @@ impl_runtime_apis! { } impl pallet_xcm_benchmarks::generic::Config for Runtime { - type Call = Call; + type RuntimeCall = RuntimeCall; fn worst_case_response() -> (u64, Response) { (0u64, Response::Version(Default::default())) diff --git a/parachains/runtimes/assets/statemint/src/xcm_config.rs b/parachains/runtimes/assets/statemint/src/xcm_config.rs index a8bf77b6d34..a7932e69dea 100644 --- a/parachains/runtimes/assets/statemint/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemint/src/xcm_config.rs @@ -14,8 +14,8 @@ // limitations under the License. use super::{ - AccountId, AssetId, Assets, Authorship, Balance, Balances, Call, Event, Origin, ParachainInfo, - ParachainSystem, PolkadotXcm, Runtime, WeightToFee, XcmpQueue, + AccountId, AssetId, Assets, Authorship, Balance, Balances, Origin, ParachainInfo, + ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, WeightToFee, XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -156,7 +156,7 @@ pub type Barrier = DenyThenTry< pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { - type Call = Call; + type RuntimeCall = RuntimeCall; type XcmSender = XcmRouter; type AssetTransactor = AssetTransactors; type OriginConverter = XcmOriginToTransactDispatchOrigin; @@ -167,8 +167,11 @@ impl xcm_executor::Config for XcmConfig { type IsTeleporter = NativeAsset; // <- should be enough to allow teleportation of DOT type LocationInverter = LocationInverter; type Barrier = Barrier; - type Weigher = - WeightInfoBounds, Call, MaxInstructions>; + type Weigher = WeightInfoBounds< + crate::weights::xcm::StatemintXcmWeight, + RuntimeCall, + MaxInstructions, + >; type Trader = UsingComponents>; type ResponseHandler = PolkadotXcm; @@ -191,7 +194,7 @@ pub type XcmRouter = ( ); impl pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; // We want to disallow users sending (arbitrary) XCMs from this chain. type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; @@ -202,16 +205,19 @@ impl pallet_xcm::Config for Runtime { type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; - type Weigher = - WeightInfoBounds, Call, MaxInstructions>; + type Weigher = WeightInfoBounds< + crate::weights::xcm::StatemintXcmWeight, + RuntimeCall, + MaxInstructions, + >; type LocationInverter = LocationInverter; type Origin = Origin; - type Call = Call; + type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; } impl cumulus_pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; } diff --git a/parachains/runtimes/assets/westmint/src/lib.rs b/parachains/runtimes/assets/westmint/src/lib.rs index 6482e5a1b05..27e6c15da02 100644 --- a/parachains/runtimes/assets/westmint/src/lib.rs +++ b/parachains/runtimes/assets/westmint/src/lib.rs @@ -127,14 +127,14 @@ impl frame_system::Config for Runtime { type BlockWeights = RuntimeBlockWeights; type BlockLength = RuntimeBlockLength; type AccountId = AccountId; - type Call = Call; + type RuntimeCall = RuntimeCall; type Lookup = AccountIdLookup; type Index = Index; type BlockNumber = BlockNumber; type Hash = Hash; type Hashing = BlakeTwo256; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Origin = Origin; type BlockHashCount = BlockHashCount; type DbWeight = RocksDbWeight; @@ -183,7 +183,7 @@ impl pallet_balances::Config for Runtime { /// The type for recording an account's balance. type Balance = Balance; /// The ubiquitous event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DustRemoval = (); type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; @@ -199,7 +199,7 @@ parameter_types! { } impl pallet_transaction_payment::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter>; type WeightToFee = WeightToFee; @@ -222,7 +222,7 @@ parameter_types! { pub type AssetsForceOrigin = EnsureRoot; impl pallet_assets::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Balance = Balance; type AssetId = AssetId; type Currency = Balances; @@ -247,8 +247,8 @@ parameter_types! { } impl pallet_multisig::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type Currency = Balances; type DepositBase = DepositBase; type DepositFactor = DepositFactor; @@ -257,8 +257,8 @@ impl pallet_multisig::Config for Runtime { } impl pallet_utility::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type PalletsOrigin = OriginCaller; type WeightInfo = weights::pallet_utility::WeightInfo; } @@ -310,65 +310,75 @@ impl Default for ProxyType { Self::Any } } -impl InstanceFilter for ProxyType { - fn filter(&self, c: &Call) -> bool { +impl InstanceFilter for ProxyType { + fn filter(&self, c: &RuntimeCall) -> bool { match self { ProxyType::Any => true, - ProxyType::NonTransfer => - !matches!(c, Call::Balances { .. } | Call::Assets { .. } | Call::Uniques { .. }), + ProxyType::NonTransfer => !matches!( + c, + RuntimeCall::Balances { .. } | + RuntimeCall::Assets { .. } | + RuntimeCall::Uniques { .. } + ), ProxyType::CancelProxy => matches!( c, - Call::Proxy(pallet_proxy::Call::reject_announcement { .. }) | - Call::Utility { .. } | Call::Multisig { .. } + RuntimeCall::Proxy(pallet_proxy::Call::reject_announcement { .. }) | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } ), ProxyType::Assets => { matches!( c, - Call::Assets { .. } | - Call::Utility { .. } | Call::Multisig { .. } | - Call::Uniques { .. } + RuntimeCall::Assets { .. } | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } | + RuntimeCall::Uniques { .. } ) }, ProxyType::AssetOwner => matches!( c, - Call::Assets(pallet_assets::Call::create { .. }) | - Call::Assets(pallet_assets::Call::destroy { .. }) | - Call::Assets(pallet_assets::Call::transfer_ownership { .. }) | - Call::Assets(pallet_assets::Call::set_team { .. }) | - Call::Assets(pallet_assets::Call::set_metadata { .. }) | - Call::Assets(pallet_assets::Call::clear_metadata { .. }) | - Call::Uniques(pallet_uniques::Call::create { .. }) | - Call::Uniques(pallet_uniques::Call::destroy { .. }) | - Call::Uniques(pallet_uniques::Call::transfer_ownership { .. }) | - Call::Uniques(pallet_uniques::Call::set_team { .. }) | - Call::Uniques(pallet_uniques::Call::set_metadata { .. }) | - Call::Uniques(pallet_uniques::Call::set_attribute { .. }) | - Call::Uniques(pallet_uniques::Call::set_collection_metadata { .. }) | - Call::Uniques(pallet_uniques::Call::clear_metadata { .. }) | - Call::Uniques(pallet_uniques::Call::clear_attribute { .. }) | - Call::Uniques(pallet_uniques::Call::clear_collection_metadata { .. }) | - Call::Uniques(pallet_uniques::Call::set_collection_max_supply { .. }) | - Call::Utility { .. } | Call::Multisig { .. } + RuntimeCall::Assets(pallet_assets::Call::create { .. }) | + RuntimeCall::Assets(pallet_assets::Call::destroy { .. }) | + RuntimeCall::Assets(pallet_assets::Call::transfer_ownership { .. }) | + RuntimeCall::Assets(pallet_assets::Call::set_team { .. }) | + RuntimeCall::Assets(pallet_assets::Call::set_metadata { .. }) | + RuntimeCall::Assets(pallet_assets::Call::clear_metadata { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::create { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::destroy { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::transfer_ownership { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::set_team { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::set_metadata { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::set_attribute { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::set_collection_metadata { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::clear_metadata { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::clear_attribute { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::clear_collection_metadata { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::set_collection_max_supply { .. }) | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } ), ProxyType::AssetManager => matches!( c, - Call::Assets(pallet_assets::Call::mint { .. }) | - Call::Assets(pallet_assets::Call::burn { .. }) | - Call::Assets(pallet_assets::Call::freeze { .. }) | - Call::Assets(pallet_assets::Call::thaw { .. }) | - Call::Assets(pallet_assets::Call::freeze_asset { .. }) | - Call::Assets(pallet_assets::Call::thaw_asset { .. }) | - Call::Uniques(pallet_uniques::Call::mint { .. }) | - Call::Uniques(pallet_uniques::Call::burn { .. }) | - Call::Uniques(pallet_uniques::Call::freeze { .. }) | - Call::Uniques(pallet_uniques::Call::thaw { .. }) | - Call::Uniques(pallet_uniques::Call::freeze_collection { .. }) | - Call::Uniques(pallet_uniques::Call::thaw_collection { .. }) | - Call::Utility { .. } | Call::Multisig { .. } + RuntimeCall::Assets(pallet_assets::Call::mint { .. }) | + RuntimeCall::Assets(pallet_assets::Call::burn { .. }) | + RuntimeCall::Assets(pallet_assets::Call::freeze { .. }) | + RuntimeCall::Assets(pallet_assets::Call::thaw { .. }) | + RuntimeCall::Assets(pallet_assets::Call::freeze_asset { .. }) | + RuntimeCall::Assets(pallet_assets::Call::thaw_asset { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::mint { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::burn { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::freeze { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::thaw { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::freeze_collection { .. }) | + RuntimeCall::Uniques(pallet_uniques::Call::thaw_collection { .. }) | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } ), ProxyType::Collator => matches!( c, - Call::CollatorSelection { .. } | Call::Utility { .. } | Call::Multisig { .. } + RuntimeCall::CollatorSelection { .. } | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } ), } } @@ -387,8 +397,8 @@ impl InstanceFilter for ProxyType { } impl pallet_proxy::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type Currency = Balances; type ProxyType = ProxyType; type ProxyDepositBase = ProxyDepositBase; @@ -407,7 +417,7 @@ parameter_types! { } impl cumulus_pallet_parachain_system::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnSystemEvent = (); type SelfParaId = parachain_info::Pallet; type OutboundXcmpMessageSource = XcmpQueue; @@ -423,7 +433,7 @@ impl parachain_info::Config for Runtime {} impl cumulus_pallet_aura_ext::Config for Runtime {} impl cumulus_pallet_xcmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ChannelInfo = ParachainSystem; type VersionWrapper = PolkadotXcm; @@ -434,7 +444,7 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { } impl cumulus_pallet_dmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ExecuteOverweightOrigin = EnsureRoot; } @@ -446,7 +456,7 @@ parameter_types! { } impl pallet_session::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ValidatorId = ::AccountId; // we don't have stash and controller, thus we don't need the convert as well. type ValidatorIdOf = pallet_collator_selection::IdentityCollator; @@ -476,7 +486,7 @@ parameter_types! { pub type CollatorSelectionUpdateOrigin = EnsureRoot; impl pallet_collator_selection::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Currency = Balances; type UpdateOrigin = CollatorSelectionUpdateOrigin; type PotId = PotId; @@ -492,7 +502,7 @@ impl pallet_collator_selection::Config for Runtime { } impl pallet_asset_tx_payment::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Fungibles = Assets; type OnChargeAssetTransaction = pallet_asset_tx_payment::FungiblesAdapter< pallet_assets::BalanceToAssetBalance, @@ -512,7 +522,7 @@ parameter_types! { } impl pallet_uniques::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type CollectionId = u32; type ItemId = u32; type Currency = Balances; @@ -597,9 +607,10 @@ pub type SignedExtra = ( pallet_asset_tx_payment::ChargeAssetTxPayment, ); /// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; +pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, @@ -736,17 +747,17 @@ impl_runtime_apis! { } } - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi for Runtime { fn query_call_info( - call: Call, + call: RuntimeCall, len: u32, ) -> pallet_transaction_payment::RuntimeDispatchInfo { TransactionPayment::query_call_info(call, len) } fn query_call_fee_details( - call: Call, + call: RuntimeCall, len: u32, ) -> pallet_transaction_payment::FeeDetails { TransactionPayment::query_call_fee_details(call, len) @@ -878,7 +889,7 @@ impl_runtime_apis! { } impl pallet_xcm_benchmarks::generic::Config for Runtime { - type Call = Call; + type RuntimeCall = RuntimeCall; fn worst_case_response() -> (u64, Response) { (0u64, Response::Version(Default::default())) diff --git a/parachains/runtimes/assets/westmint/src/xcm_config.rs b/parachains/runtimes/assets/westmint/src/xcm_config.rs index 94a6ba6528a..bd869c977b8 100644 --- a/parachains/runtimes/assets/westmint/src/xcm_config.rs +++ b/parachains/runtimes/assets/westmint/src/xcm_config.rs @@ -14,8 +14,8 @@ // limitations under the License. use super::{ - AccountId, AssetId, Assets, Authorship, Balance, Balances, Call, Event, Origin, ParachainInfo, - ParachainSystem, PolkadotXcm, Runtime, WeightToFee, XcmpQueue, + AccountId, AssetId, Assets, Authorship, Balance, Balances, Origin, ParachainInfo, + ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, WeightToFee, XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -156,7 +156,7 @@ pub type Barrier = DenyThenTry< pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { - type Call = Call; + type RuntimeCall = RuntimeCall; type XcmSender = XcmRouter; type AssetTransactor = AssetTransactors; type OriginConverter = XcmOriginToTransactDispatchOrigin; @@ -167,8 +167,11 @@ impl xcm_executor::Config for XcmConfig { type IsTeleporter = NativeAsset; // <- should be enough to allow teleportation of WND type LocationInverter = LocationInverter; type Barrier = Barrier; - type Weigher = - WeightInfoBounds, Call, MaxInstructions>; + type Weigher = WeightInfoBounds< + crate::weights::xcm::WestmintXcmWeight, + RuntimeCall, + MaxInstructions, + >; type Trader = ( UsingComponents>, cumulus_primitives_utility::TakeFirstAssetTrader< @@ -211,7 +214,7 @@ pub type XcmRouter = ( ); impl pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; type ExecuteXcmOrigin = EnsureXcmOrigin; @@ -219,16 +222,19 @@ impl pallet_xcm::Config for Runtime { type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; - type Weigher = - WeightInfoBounds, Call, MaxInstructions>; + type Weigher = WeightInfoBounds< + crate::weights::xcm::WestmintXcmWeight, + RuntimeCall, + MaxInstructions, + >; type LocationInverter = LocationInverter; type Origin = Origin; - type Call = Call; + type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; } impl cumulus_pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs index cd7701481c4..a5c5a5daf64 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs @@ -152,14 +152,14 @@ impl frame_system::Config for Runtime { type BlockWeights = RuntimeBlockWeights; type BlockLength = RuntimeBlockLength; type AccountId = AccountId; - type Call = Call; + type RuntimeCall = RuntimeCall; type Lookup = AccountIdLookup; type Index = Index; type BlockNumber = BlockNumber; type Hash = Hash; type Hashing = BlakeTwo256; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Origin = Origin; type BlockHashCount = BlockHashCount; type DbWeight = RocksDbWeight; @@ -200,7 +200,7 @@ impl pallet_balances::Config for Runtime { /// The type for recording an account's balance. type Balance = Balance; /// The ubiquitous event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DustRemoval = (); type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; @@ -215,7 +215,7 @@ parameter_types! { } impl pallet_transaction_payment::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter>; type WeightToFee = WeightToFee; @@ -232,8 +232,8 @@ parameter_types! { } impl pallet_multisig::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type Currency = Balances; type DepositBase = DepositBase; type DepositFactor = DepositFactor; @@ -242,8 +242,8 @@ impl pallet_multisig::Config for Runtime { } impl pallet_utility::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type PalletsOrigin = OriginCaller; type WeightInfo = weights::pallet_utility::WeightInfo; } @@ -289,25 +289,29 @@ impl Default for ProxyType { Self::Any } } -impl InstanceFilter for ProxyType { - fn filter(&self, c: &Call) -> bool { +impl InstanceFilter for ProxyType { + fn filter(&self, c: &RuntimeCall) -> bool { match self { ProxyType::Any => true, - ProxyType::NonTransfer => !matches!(c, Call::Balances { .. }), + ProxyType::NonTransfer => !matches!(c, RuntimeCall::Balances { .. }), ProxyType::CancelProxy => matches!( c, - Call::Proxy(pallet_proxy::Call::reject_announcement { .. }) | - Call::Utility { .. } | Call::Multisig { .. } + RuntimeCall::Proxy(pallet_proxy::Call::reject_announcement { .. }) | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } ), ProxyType::Collator => matches!( c, - Call::CollatorSelection { .. } | Call::Utility { .. } | Call::Multisig { .. } + RuntimeCall::CollatorSelection { .. } | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } ), ProxyType::Alliance => matches!( c, - Call::AllianceMotion { .. } | - Call::Alliance { .. } | - Call::Utility { .. } | Call::Multisig { .. } + RuntimeCall::AllianceMotion { .. } | + RuntimeCall::Alliance { .. } | + RuntimeCall::Utility { .. } | + RuntimeCall::Multisig { .. } ), } } @@ -323,8 +327,8 @@ impl InstanceFilter for ProxyType { } impl pallet_proxy::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type Currency = Balances; type ProxyType = ProxyType; type ProxyDepositBase = ProxyDepositBase; @@ -343,7 +347,7 @@ parameter_types! { } impl cumulus_pallet_parachain_system::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnSystemEvent = (); type SelfParaId = parachain_info::Pallet; type DmpMessageHandler = DmpQueue; @@ -359,7 +363,7 @@ impl parachain_info::Config for Runtime {} impl cumulus_pallet_aura_ext::Config for Runtime {} impl cumulus_pallet_xcmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ChannelInfo = ParachainSystem; type VersionWrapper = PolkadotXcm; @@ -370,7 +374,7 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { } impl cumulus_pallet_dmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ExecuteOverweightOrigin = EnsureRoot; } @@ -379,7 +383,7 @@ pub const PERIOD: u32 = 6 * HOURS; pub const OFFSET: u32 = 0; impl pallet_session::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ValidatorId = ::AccountId; // we don't have stash and controller, thus we don't need the convert as well. type ValidatorIdOf = pallet_collator_selection::IdentityCollator; @@ -408,7 +412,7 @@ parameter_types! { pub type CollatorSelectionUpdateOrigin = RootOrExecutiveSimpleMajority; impl pallet_collator_selection::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Currency = Balances; type UpdateOrigin = CollatorSelectionUpdateOrigin; type PotId = PotId; @@ -434,8 +438,8 @@ pub const ALLIANCE_MAX_MEMBERS: u32 = 100; type AllianceCollective = pallet_collective::Instance1; impl pallet_collective::Config for Runtime { type Origin = Origin; - type Proposal = Call; - type Event = Event; + type Proposal = RuntimeCall; + type RuntimeEvent = RuntimeEvent; type MotionDuration = AllianceMotionDuration; type MaxProposals = ConstU32; type MaxMembers = ConstU32; @@ -458,8 +462,8 @@ parameter_types! { } impl pallet_alliance::Config for Runtime { - type Event = Event; - type Proposal = Call; + type RuntimeEvent = RuntimeEvent; + type Proposal = RuntimeCall; type AdminOrigin = RootOrAllianceTwoThirdsMajority; type MembershipManager = RootOrAllianceTwoThirdsMajority; type AnnouncementOrigin = RootOrAllianceTwoThirdsMajority; @@ -544,9 +548,10 @@ pub type SignedExtra = ( frame_system::CheckWeight, ); /// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; +pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs index f728a6d9cbc..bfcfd9567b2 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs @@ -14,8 +14,8 @@ // limitations under the License. use super::{ - AccountId, Balances, Call, Event, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, - WeightToFee, XcmpQueue, + AccountId, Balances, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, + RuntimeEvent, WeightToFee, XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -132,7 +132,7 @@ pub type Barrier = DenyThenTry< pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { - type Call = Call; + type RuntimeCall = RuntimeCall; type XcmSender = XcmRouter; type AssetTransactor = CurrencyTransactor; type OriginConverter = XcmOriginToTransactDispatchOrigin; @@ -143,7 +143,7 @@ impl xcm_executor::Config for XcmConfig { type IsTeleporter = ConcreteNativeAssetFrom; type LocationInverter = LocationInverter; type Barrier = Barrier; - type Weigher = FixedWeightBounds; + type Weigher = FixedWeightBounds; type Trader = UsingComponents>; type ResponseHandler = PolkadotXcm; @@ -166,7 +166,7 @@ pub type XcmRouter = ( ); impl pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; // We want to disallow users sending (arbitrary) XCMs from this chain. type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; @@ -177,15 +177,15 @@ impl pallet_xcm::Config for Runtime { type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Nothing; // This parachain is not meant as a reserve location. - type Weigher = FixedWeightBounds; + type Weigher = FixedWeightBounds; type LocationInverter = LocationInverter; type Origin = Origin; - type Call = Call; + type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; } impl cumulus_pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; } diff --git a/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs b/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs index 5f3d5310b8e..3c4e81f3e3f 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs @@ -1,6 +1,6 @@ use crate::{ - constants::currency::deposit, Balance, Balances, Call, Event, RandomnessCollectiveFlip, - Runtime, RuntimeBlockWeights, Timestamp, + constants::currency::deposit, Balance, Balances, RandomnessCollectiveFlip, Runtime, + RuntimeBlockWeights, RuntimeCall, RuntimeEvent, Timestamp, }; use frame_support::{ parameter_types, @@ -37,8 +37,8 @@ impl Config for Runtime { type Time = Timestamp; type Randomness = RandomnessCollectiveFlip; type Currency = Balances; - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; /// The safest default is to allow no calls at all. /// /// Runtimes should whitelist dispatchables that are allowed to be called from contracts diff --git a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index ff0271775be..46c53a95efe 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -89,9 +89,10 @@ pub type SignedExtra = ( pallet_transaction_payment::ChargeTransactionPayment, ); /// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; +pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, @@ -156,14 +157,14 @@ impl frame_system::Config for Runtime { type BlockWeights = RuntimeBlockWeights; type BlockLength = RuntimeBlockLength; type AccountId = AccountId; - type Call = Call; + type RuntimeCall = RuntimeCall; type Lookup = AccountIdLookup; type Index = Index; type BlockNumber = BlockNumber; type Hash = Hash; type Hashing = BlakeTwo256; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Origin = Origin; type BlockHashCount = BlockHashCount; type DbWeight = RocksDbWeight; @@ -198,7 +199,7 @@ impl pallet_balances::Config for Runtime { /// The type for recording an account's balance. type Balance = Balance; /// The ubiquitous event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DustRemoval = (); type ExistentialDeposit = ConstU128; type AccountStore = System; @@ -208,7 +209,7 @@ impl pallet_balances::Config for Runtime { } impl pallet_transaction_payment::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter>; type WeightToFee = WeightToFee; @@ -226,8 +227,8 @@ parameter_types! { } impl pallet_multisig::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type Currency = Balances; type DepositBase = DepositBase; type DepositFactor = DepositFactor; @@ -236,8 +237,8 @@ impl pallet_multisig::Config for Runtime { } impl pallet_utility::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type PalletsOrigin = OriginCaller; type WeightInfo = pallet_utility::weights::SubstrateWeight; } @@ -248,7 +249,7 @@ parameter_types! { } impl cumulus_pallet_parachain_system::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnSystemEvent = (); type SelfParaId = parachain_info::Pallet; type DmpMessageHandler = DmpQueue; @@ -271,7 +272,7 @@ parameter_types! { } impl pallet_session::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ValidatorId = ::AccountId; // we don't have stash and controller, thus we don't need the convert as well. type ValidatorIdOf = pallet_collator_selection::IdentityCollator; @@ -295,7 +296,7 @@ parameter_types! { } impl pallet_collator_selection::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Currency = Balances; type UpdateOrigin = CollatorSelectionUpdateOrigin; type PotId = PotId; @@ -311,8 +312,8 @@ impl pallet_collator_selection::Config for Runtime { } impl pallet_sudo::Config for Runtime { - type Call = Call; - type Event = Event; + type RuntimeCall = RuntimeCall; + type RuntimeEvent = RuntimeEvent; } // Create the runtime by composing the FRAME pallets that were previously configured. @@ -479,17 +480,17 @@ impl_runtime_apis! { } } - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi for Runtime { fn query_call_info( - call: Call, + call: RuntimeCall, len: u32, ) -> pallet_transaction_payment::RuntimeDispatchInfo { TransactionPayment::query_call_info(call, len) } fn query_call_fee_details( - call: Call, + call: RuntimeCall, len: u32, ) -> pallet_transaction_payment::FeeDetails { TransactionPayment::query_call_fee_details(call, len) diff --git a/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs b/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs index 97a2991525d..fbccf508c1d 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs @@ -14,8 +14,8 @@ // limitations under the License. use super::{ - AccountId, Balances, Call, Event, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, - WeightToFee, XcmpQueue, + AccountId, Balances, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, + RuntimeEvent, WeightToFee, XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -135,7 +135,7 @@ pub type Barrier = DenyThenTry< pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { - type Call = Call; + type RuntimeCall = RuntimeCall; type XcmSender = XcmRouter; type AssetTransactor = CurrencyTransactor; type OriginConverter = XcmOriginToTransactDispatchOrigin; @@ -143,7 +143,7 @@ impl xcm_executor::Config for XcmConfig { type IsTeleporter = NativeAsset; type LocationInverter = LocationInverter; type Barrier = Barrier; - type Weigher = FixedWeightBounds; + type Weigher = FixedWeightBounds; type Trader = UsingComponents; type ResponseHandler = PolkadotXcm; type AssetTrap = PolkadotXcm; @@ -165,7 +165,7 @@ pub type XcmRouter = ( ); impl pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; // We want to disallow users sending (arbitrary) XCMs from this chain. type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; @@ -176,21 +176,21 @@ impl pallet_xcm::Config for Runtime { type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; - type Weigher = FixedWeightBounds; + type Weigher = FixedWeightBounds; type LocationInverter = LocationInverter; type Origin = Origin; - type Call = Call; + type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; } impl cumulus_pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; } impl cumulus_pallet_xcmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ChannelInfo = ParachainSystem; type VersionWrapper = PolkadotXcm; @@ -204,7 +204,7 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { } impl cumulus_pallet_dmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ExecuteOverweightOrigin = EnsureRoot; } diff --git a/parachains/runtimes/starters/seedling/src/lib.rs b/parachains/runtimes/starters/seedling/src/lib.rs index 8c34141c331..035dff2eb45 100644 --- a/parachains/runtimes/starters/seedling/src/lib.rs +++ b/parachains/runtimes/starters/seedling/src/lib.rs @@ -114,7 +114,7 @@ impl frame_system::Config for Runtime { /// The identifier used to distinguish between accounts. type AccountId = AccountId; /// The aggregated dispatch type that is available for extrinsics. - type Call = Call; + type RuntimeCall = RuntimeCall; /// The lookup mechanism to get account ID from whatever is passed in dispatchers. type Lookup = AccountIdLookup; /// The index type for storing how many extrinsics an account has signed. @@ -128,7 +128,7 @@ impl frame_system::Config for Runtime { /// The header type. type Header = generic::Header; /// The ubiquitous event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; /// The ubiquitous origin type. type Origin = Origin; /// Maximum number of block number to block hash mappings to keep (oldest pruned first). @@ -151,16 +151,16 @@ impl frame_system::Config for Runtime { } impl pallet_sudo::Config for Runtime { - type Call = Call; - type Event = Event; + type RuntimeCall = RuntimeCall; + type RuntimeEvent = RuntimeEvent; } impl cumulus_pallet_solo_to_para::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; } impl cumulus_pallet_parachain_system::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnSystemEvent = cumulus_pallet_solo_to_para::Pallet; type SelfParaId = parachain_info::Pallet; type OutboundXcmpMessageSource = (); @@ -216,9 +216,10 @@ pub type SignedExtra = ( cumulus_pallet_solo_to_para::CheckSudo, ); /// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; +pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, diff --git a/parachains/runtimes/starters/shell/src/lib.rs b/parachains/runtimes/starters/shell/src/lib.rs index 31a95e20d95..fab27c2fc6f 100644 --- a/parachains/runtimes/starters/shell/src/lib.rs +++ b/parachains/runtimes/starters/shell/src/lib.rs @@ -122,7 +122,7 @@ impl frame_system::Config for Runtime { /// The identifier used to distinguish between accounts. type AccountId = AccountId; /// The aggregated dispatch type that is available for extrinsics. - type Call = Call; + type RuntimeCall = RuntimeCall; /// The lookup mechanism to get account ID from whatever is passed in dispatchers. type Lookup = AccountIdLookup; /// The index type for storing how many extrinsics an account has signed. @@ -136,7 +136,7 @@ impl frame_system::Config for Runtime { /// The header type. type Header = generic::Header; /// The ubiquitous event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; /// The ubiquitous origin type. type Origin = Origin; /// Maximum number of block number to block hash mappings to keep (oldest pruned first). @@ -164,7 +164,7 @@ parameter_types! { } impl cumulus_pallet_parachain_system::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnSystemEvent = (); type SelfParaId = parachain_info::Pallet; type OutboundXcmpMessageSource = (); @@ -200,7 +200,7 @@ pub struct DisallowSigned; impl sp_runtime::traits::SignedExtension for DisallowSigned { const IDENTIFIER: &'static str = "DisallowSigned"; type AccountId = AccountId; - type Call = Call; + type Call = RuntimeCall; type AdditionalSigned = (); type Pre = (); fn additional_signed( @@ -248,9 +248,10 @@ pub type BlockId = generic::BlockId; /// The SignedExtension to the basic transaction logic. pub type SignedExtra = DisallowSigned; /// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; +pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, diff --git a/parachains/runtimes/starters/shell/src/xcm_config.rs b/parachains/runtimes/starters/shell/src/xcm_config.rs index e5d96c7a645..8e754299aba 100644 --- a/parachains/runtimes/starters/shell/src/xcm_config.rs +++ b/parachains/runtimes/starters/shell/src/xcm_config.rs @@ -13,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use super::{AccountId, Call, Event, Origin, ParachainInfo, Runtime}; +use super::{AccountId, Origin, ParachainInfo, Runtime, RuntimeCall, RuntimeEvent}; use frame_support::{match_types, parameter_types}; use xcm::latest::prelude::*; use xcm_builder::{ @@ -52,7 +52,7 @@ parameter_types! { pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { - type Call = Call; + type RuntimeCall = RuntimeCall; type XcmSender = (); // sending XCM not supported type AssetTransactor = (); // balances not supported type OriginConverter = XcmOriginToTransactDispatchOrigin; @@ -60,7 +60,7 @@ impl xcm_executor::Config for XcmConfig { type IsTeleporter = (); // balances not supported type LocationInverter = LocationInverter; type Barrier = AllowUnpaidExecutionFrom; - type Weigher = FixedWeightBounds; // balances not supported + type Weigher = FixedWeightBounds; // balances not supported type Trader = (); // balances not supported type ResponseHandler = (); // Don't handle responses for now. type AssetTrap = (); // don't trap for now @@ -69,6 +69,6 @@ impl xcm_executor::Config for XcmConfig { } impl cumulus_pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = xcm_executor::XcmExecutor; } diff --git a/parachains/runtimes/testing/penpal/src/lib.rs b/parachains/runtimes/testing/penpal/src/lib.rs index ba91d29aa72..a9342c3a657 100644 --- a/parachains/runtimes/testing/penpal/src/lib.rs +++ b/parachains/runtimes/testing/penpal/src/lib.rs @@ -117,10 +117,11 @@ pub type SignedExtra = ( ); /// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; +pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< @@ -271,7 +272,7 @@ impl frame_system::Config for Runtime { /// The identifier used to distinguish between accounts. type AccountId = AccountId; /// The aggregated dispatch type that is available for extrinsics. - type Call = Call; + type RuntimeCall = RuntimeCall; /// The lookup mechanism to get account ID from whatever is passed in dispatchers. type Lookup = AccountIdLookup; /// The index type for storing how many extrinsics an account has signed. @@ -285,7 +286,7 @@ impl frame_system::Config for Runtime { /// The header type. type Header = generic::Header; /// The ubiquitous event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; /// The ubiquitous origin type. type Origin = Origin; /// Maximum number of block number to block hash mappings to keep (oldest pruned first). @@ -351,7 +352,7 @@ impl pallet_balances::Config for Runtime { /// The type for recording an account's balance. type Balance = Balance; /// The ubiquitous event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DustRemoval = (); type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; @@ -367,7 +368,7 @@ parameter_types! { } impl pallet_transaction_payment::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter; type WeightToFee = WeightToFee; type LengthToFee = ConstantMultiplier; @@ -389,7 +390,7 @@ parameter_types! { // EnsureOneOf, EnsureXcm>>; impl pallet_assets::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Balance = Balance; type AssetId = AssetId; type Currency = Balances; @@ -411,7 +412,7 @@ parameter_types! { } impl cumulus_pallet_parachain_system::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnSystemEvent = (); type SelfParaId = parachain_info::Pallet; type DmpMessageHandler = DmpQueue; @@ -427,7 +428,7 @@ impl parachain_info::Config for Runtime {} impl cumulus_pallet_aura_ext::Config for Runtime {} impl cumulus_pallet_xcmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ChannelInfo = ParachainSystem; type VersionWrapper = PolkadotXcm; @@ -438,7 +439,7 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { } impl cumulus_pallet_dmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ExecuteOverweightOrigin = EnsureRoot; } @@ -450,7 +451,7 @@ parameter_types! { } impl pallet_session::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ValidatorId = ::AccountId; // we don't have stash and controller, thus we don't need the convert as well. type ValidatorIdOf = pallet_collator_selection::IdentityCollator; @@ -482,7 +483,7 @@ parameter_types! { pub type CollatorSelectionUpdateOrigin = EnsureRoot; impl pallet_collator_selection::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Currency = Balances; type UpdateOrigin = CollatorSelectionUpdateOrigin; type PotId = PotId; @@ -498,7 +499,7 @@ impl pallet_collator_selection::Config for Runtime { } impl pallet_asset_tx_payment::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Fungibles = Assets; type OnChargeAssetTransaction = pallet_asset_tx_payment::FungiblesAdapter< pallet_assets::BalanceToAssetBalance, @@ -507,8 +508,8 @@ impl pallet_asset_tx_payment::Config for Runtime { } impl pallet_sudo::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; } // Create the runtime by composing the FRAME pallets that were previously configured. @@ -668,17 +669,17 @@ impl_runtime_apis! { } } - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi for Runtime { fn query_call_info( - call: Call, + call: RuntimeCall, len: u32, ) -> pallet_transaction_payment::RuntimeDispatchInfo { TransactionPayment::query_call_info(call, len) } fn query_call_fee_details( - call: Call, + call: RuntimeCall, len: u32, ) -> pallet_transaction_payment::FeeDetails { TransactionPayment::query_call_fee_details(call, len) diff --git a/parachains/runtimes/testing/penpal/src/xcm_config.rs b/parachains/runtimes/testing/penpal/src/xcm_config.rs index b132659a294..5c814be50c1 100644 --- a/parachains/runtimes/testing/penpal/src/xcm_config.rs +++ b/parachains/runtimes/testing/penpal/src/xcm_config.rs @@ -22,8 +22,8 @@ //! with statemine as the reserve. At present no derivative tokens are minted on receipt of a //! ReserveAssetTransferDeposited message but that will but the intension will be to support this soon. use super::{ - AccountId, AssetId as AssetIdPalletAssets, Assets, Balance, Balances, Call, Event, Origin, - ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, WeightToFee, XcmpQueue, + AccountId, AssetId as AssetIdPalletAssets, Assets, Balance, Balances, Origin, ParachainInfo, + ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, WeightToFee, XcmpQueue, }; use core::marker::PhantomData; use frame_support::{ @@ -161,9 +161,9 @@ where Deny: ShouldExecute, Allow: ShouldExecute, { - fn should_execute( + fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + message: &mut Xcm, max_weight: XCMWeight, weight_credit: &mut XCMWeight, ) -> Result<(), ()> { @@ -175,9 +175,9 @@ where // See issue #5233 pub struct DenyReserveTransferToRelayChain; impl ShouldExecute for DenyReserveTransferToRelayChain { - fn should_execute( + fn should_execute( origin: &MultiLocation, - message: &mut Xcm, + message: &mut Xcm, _max_weight: XCMWeight, _weight_credit: &mut XCMWeight, ) -> Result<(), ()> { @@ -320,7 +320,7 @@ pub type Reserves = (NativeAsset, AssetsFrom); pub struct XcmConfig; impl xcm_executor::Config for XcmConfig { - type Call = Call; + type RuntimeCall = RuntimeCall; type XcmSender = XcmRouter; // How to withdraw and deposit an asset. type AssetTransactor = AssetTransactors; @@ -329,7 +329,7 @@ impl xcm_executor::Config for XcmConfig { type IsTeleporter = NativeAsset; type LocationInverter = LocationInverter; type Barrier = Barrier; - type Weigher = FixedWeightBounds; + type Weigher = FixedWeightBounds; type Trader = UsingComponents>; type ResponseHandler = PolkadotXcm; @@ -351,7 +351,7 @@ pub type XcmRouter = ( ); impl pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; type ExecuteXcmOrigin = EnsureXcmOrigin; @@ -361,10 +361,10 @@ impl pallet_xcm::Config for Runtime { type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; - type Weigher = FixedWeightBounds; + type Weigher = FixedWeightBounds; type LocationInverter = LocationInverter; type Origin = Origin; - type Call = Call; + type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; // ^ Override for AdvertisedXcmVersion default @@ -372,6 +372,6 @@ impl pallet_xcm::Config for Runtime { } impl cumulus_pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; } diff --git a/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/parachains/runtimes/testing/rococo-parachain/src/lib.rs index 6606e465703..96ba3bdef2b 100644 --- a/parachains/runtimes/testing/rococo-parachain/src/lib.rs +++ b/parachains/runtimes/testing/rococo-parachain/src/lib.rs @@ -164,7 +164,7 @@ impl frame_system::Config for Runtime { /// The identifier used to distinguish between accounts. type AccountId = AccountId; /// The aggregated dispatch type that is available for extrinsics. - type Call = Call; + type RuntimeCall = RuntimeCall; /// The lookup mechanism to get account ID from whatever is passed in dispatchers. type Lookup = AccountIdLookup; /// The index type for storing how many extrinsics an account has signed. @@ -178,7 +178,7 @@ impl frame_system::Config for Runtime { /// The header type. type Header = generic::Header; /// The ubiquitous event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; /// The ubiquitous origin type. type Origin = Origin; /// Maximum number of block number to block hash mappings to keep (oldest pruned first). @@ -225,7 +225,7 @@ impl pallet_balances::Config for Runtime { /// The type for recording an account's balance. type Balance = Balance; /// The ubiquitous event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DustRemoval = (); type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; @@ -240,7 +240,7 @@ parameter_types! { } impl pallet_transaction_payment::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter; type WeightToFee = IdentityFee; type LengthToFee = ConstantMultiplier; @@ -249,8 +249,8 @@ impl pallet_transaction_payment::Config for Runtime { } impl pallet_sudo::Config for Runtime { - type Call = Call; - type Event = Event; + type RuntimeCall = RuntimeCall; + type RuntimeEvent = RuntimeEvent; } parameter_types! { @@ -259,7 +259,7 @@ parameter_types! { } impl cumulus_pallet_parachain_system::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnSystemEvent = (); type SelfParaId = parachain_info::Pallet; type OutboundXcmpMessageSource = XcmpQueue; @@ -398,7 +398,7 @@ pub type Reserves = (NativeAsset, AssetsFrom); pub struct XcmConfig; impl Config for XcmConfig { - type Call = Call; + type RuntimeCall = RuntimeCall; type XcmSender = XcmRouter; // How to withdraw and deposit an asset. type AssetTransactor = AssetTransactors; @@ -407,7 +407,7 @@ impl Config for XcmConfig { type IsTeleporter = NativeAsset; // <- should be enough to allow teleportation of ROC type LocationInverter = LocationInverter; type Barrier = Barrier; - type Weigher = FixedWeightBounds; + type Weigher = FixedWeightBounds; type Trader = UsingComponents, RocLocation, AccountId, Balances, ()>; type ResponseHandler = PolkadotXcm; type AssetTrap = PolkadotXcm; @@ -428,7 +428,7 @@ pub type XcmRouter = ( ); impl pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; type ExecuteXcmOrigin = EnsureXcmOrigin; @@ -436,21 +436,21 @@ impl pallet_xcm::Config for Runtime { type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = frame_support::traits::Nothing; - type Weigher = FixedWeightBounds; + type Weigher = FixedWeightBounds; type LocationInverter = LocationInverter; type Origin = Origin; - type Call = Call; + type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; } impl cumulus_pallet_xcm::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; } impl cumulus_pallet_xcmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ChannelInfo = ParachainSystem; type VersionWrapper = (); @@ -461,15 +461,15 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { } impl cumulus_pallet_dmp_queue::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type XcmExecutor = XcmExecutor; type ExecuteOverweightOrigin = frame_system::EnsureRoot; } impl cumulus_ping::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Origin = Origin; - type Call = Call; + type RuntimeCall = RuntimeCall; type XcmSender = XcmRouter; } @@ -489,7 +489,7 @@ pub type AdminOrigin = EitherOfDiverse, EnsureXcm>>; impl pallet_assets::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Balance = u64; type AssetId = AssetId; type Currency = Balances; @@ -573,9 +573,10 @@ pub type SignedExtra = ( pallet_transaction_payment::ChargeTransactionPayment, ); /// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; +pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, @@ -697,17 +698,17 @@ impl_runtime_apis! { } } - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi for Runtime { fn query_call_info( - call: Call, + call: RuntimeCall, len: u32, ) -> pallet_transaction_payment::RuntimeDispatchInfo { TransactionPayment::query_call_info(call, len) } fn query_call_fee_details( - call: Call, + call: RuntimeCall, len: u32, ) -> pallet_transaction_payment::FeeDetails { TransactionPayment::query_call_fee_details(call, len) diff --git a/test/client/src/lib.rs b/test/client/src/lib.rs index 2bac18a78af..813cafd62fc 100644 --- a/test/client/src/lib.rs +++ b/test/client/src/lib.rs @@ -19,7 +19,7 @@ mod block_builder; use codec::{Decode, Encode}; use runtime::{ - Balance, Block, BlockHashCount, Call, GenesisConfig, Runtime, Signature, SignedExtra, + Balance, Block, BlockHashCount, GenesisConfig, Runtime, RuntimeCall, Signature, SignedExtra, SignedPayload, UncheckedExtrinsic, VERSION, }; use sc_executor::{WasmExecutionMethod, WasmExecutor}; @@ -122,7 +122,7 @@ fn genesis_config() -> GenesisConfig { pub fn generate_extrinsic( client: &Client, origin: sp_keyring::AccountKeyring, - function: impl Into, + function: impl Into, ) -> UncheckedExtrinsic { let current_block_hash = client.info().best_hash; let current_block = client.info().best_number.saturated_into(); @@ -165,8 +165,10 @@ pub fn transfer( dest: sp_keyring::AccountKeyring, value: Balance, ) -> UncheckedExtrinsic { - let function = - Call::Balances(pallet_balances::Call::transfer { dest: dest.public().into(), value }); + let function = RuntimeCall::Balances(pallet_balances::Call::transfer { + dest: dest.public().into(), + value, + }); generate_extrinsic(client, origin, function) } diff --git a/test/runtime/src/lib.rs b/test/runtime/src/lib.rs index 225b874f363..0d5838d0014 100644 --- a/test/runtime/src/lib.rs +++ b/test/runtime/src/lib.rs @@ -170,7 +170,7 @@ impl frame_system::Config for Runtime { /// The identifier used to distinguish between accounts. type AccountId = AccountId; /// The aggregated dispatch type that is available for extrinsics. - type Call = Call; + type RuntimeCall = RuntimeCall; /// The lookup mechanism to get account ID from whatever is passed in dispatchers. type Lookup = IdentityLookup; /// The index type for storing how many extrinsics an account has signed. @@ -184,7 +184,7 @@ impl frame_system::Config for Runtime { /// The header type. type Header = generic::Header; /// The ubiquitous event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; /// The ubiquitous origin type. type Origin = Origin; /// Maximum number of block number to block hash mappings to keep (oldest pruned first). @@ -229,7 +229,7 @@ impl pallet_balances::Config for Runtime { /// The type for recording an account's balance. type Balance = Balance; /// The ubiquitous event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DustRemoval = (); type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; @@ -244,7 +244,7 @@ parameter_types! { } impl pallet_transaction_payment::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter; type WeightToFee = IdentityFee; type LengthToFee = ConstantMultiplier; @@ -253,13 +253,13 @@ impl pallet_transaction_payment::Config for Runtime { } impl pallet_sudo::Config for Runtime { - type Call = Call; - type Event = Event; + type RuntimeCall = RuntimeCall; + type RuntimeEvent = RuntimeEvent; } impl cumulus_pallet_parachain_system::Config for Runtime { type SelfParaId = ParachainId; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type OnSystemEvent = (); type OutboundXcmpMessageSource = (); type DmpMessageHandler = (); @@ -328,9 +328,10 @@ pub type SignedExtra = ( pallet_transaction_payment::ChargeTransactionPayment, ); /// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; /// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; +pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = frame_executive::Executive< Runtime, @@ -341,7 +342,7 @@ pub type Executive = frame_executive::Executive< TestOnRuntimeUpgrade, >; /// The payload being signed in transactions. -pub type SignedPayload = generic::SignedPayload; +pub type SignedPayload = generic::SignedPayload; pub struct TestOnRuntimeUpgrade; diff --git a/test/service/src/lib.rs b/test/service/src/lib.rs index c0a0067ec30..a45b3c8bf1d 100644 --- a/test/service/src/lib.rs +++ b/test/service/src/lib.rs @@ -705,7 +705,7 @@ impl TestNode { /// Send an extrinsic to this node. pub async fn send_extrinsic( &self, - function: impl Into, + function: impl Into, caller: Sr25519Keyring, ) -> Result { let extrinsic = construct_extrinsic(&*self.client, function, caller.pair(), Some(0)); @@ -741,7 +741,7 @@ pub fn fetch_nonce(client: &Client, account: sp_core::sr25519::Public) -> u32 { /// Construct an extrinsic that can be applied to the test runtime. pub fn construct_extrinsic( client: &Client, - function: impl Into, + function: impl Into, caller: sp_core::sr25519::Pair, nonce: Option, ) -> runtime::UncheckedExtrinsic { From 1f2b85c87bfa6e514bb0f1915389f7b2e04df6d7 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Wed, 14 Sep 2022 15:59:03 +0800 Subject: [PATCH 054/148] Companion for paritytech/substrate#12219 (#1610) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remove CanAuthorWith trait CanAuthotWith trait removed. Also all dependencies, parameters, type paramers were removed. This is related to removal of native runtime. * Companion for paritytech/substrate#12219 * Fixes * polkadot-runtime-common updated cargo update -p polkadot-runtime-common * warning fixed * Update cid * update lockfile for {"polkadot", "substrate"} * Update substrate * update lockfile for {"polkadot", "substrate"} * Update polkadot * Fix tests * :facepalm: Co-authored-by: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com> Co-authored-by: parity-processbot <> Co-authored-by: Bastian Köcher --- Cargo.lock | 694 ++++++++++-------- client/consensus/aura/src/import_queue.rs | 34 +- pallets/collator-selection/src/lib.rs | 3 +- pallets/dmp-queue/src/lib.rs | 5 +- pallets/parachain-system/src/lib.rs | 4 +- pallets/solo-to-para/src/lib.rs | 5 +- parachain-template/node/src/service.rs | 3 - parachain-template/runtime/src/lib.rs | 8 +- .../runtimes/assets/statemine/src/lib.rs | 6 +- .../runtimes/assets/statemint/src/lib.rs | 6 +- .../runtimes/assets/westmint/src/lib.rs | 6 +- .../collectives-polkadot/src/lib.rs | 6 +- .../contracts/contracts-rococo/src/lib.rs | 6 +- .../runtimes/starters/seedling/src/lib.rs | 6 +- parachains/runtimes/starters/shell/src/lib.rs | 6 +- parachains/runtimes/testing/penpal/src/lib.rs | 8 +- .../testing/rococo-parachain/src/lib.rs | 6 +- polkadot-parachain/src/service.rs | 27 +- test/runtime/src/lib.rs | 6 +- test/service/src/lib.rs | 2 +- 20 files changed, 486 insertions(+), 361 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7abe9f28c50..3e22fe183ba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -451,7 +451,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "beefy-primitives", @@ -487,7 +487,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -507,7 +507,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "beefy-primitives", "sp-api", @@ -516,7 +516,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "parity-scale-codec", "scale-info", @@ -908,9 +908,9 @@ dependencies = [ [[package]] name = "cid" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a52cffa791ce5cf490ac3b2d6df970dc04f931b04e727be3c3e220e17164dfc4" +checksum = "f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2" dependencies = [ "core2", "multibase", @@ -2786,7 +2786,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "parity-scale-codec", ] @@ -2803,7 +2803,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support", "frame-system", @@ -2826,7 +2826,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "Inflector", "chrono", @@ -2877,7 +2877,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2888,7 +2888,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2904,7 +2904,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support", "frame-system", @@ -2933,7 +2933,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "bitflags", "frame-metadata", @@ -2958,13 +2958,14 @@ dependencies = [ "sp-state-machine", "sp-std", "sp-tracing", + "sp-weights", "tt-call", ] [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "Inflector", "cfg-expr", @@ -2978,7 +2979,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2990,7 +2991,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "proc-macro2", "quote", @@ -3000,7 +3001,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support", "log", @@ -3012,12 +3013,13 @@ dependencies = [ "sp-runtime", "sp-std", "sp-version", + "sp-weights", ] [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -3032,7 +3034,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "parity-scale-codec", "sp-api", @@ -3041,7 +3043,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support", "parity-scale-codec", @@ -3920,7 +3922,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "beefy-primitives", "bitvec", @@ -4013,7 +4015,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "frame-support", "polkadot-primitives", @@ -4172,8 +4174,8 @@ dependencies = [ "libp2p-request-response", "libp2p-swarm", "log", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "rand 0.8.5", ] @@ -4199,8 +4201,8 @@ dependencies = [ "multistream-select", "parking_lot 0.12.1", "pin-project", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "rand 0.8.5", "ring", "rw-stream-sink", @@ -4250,8 +4252,8 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "rand 0.7.3", "smallvec", ] @@ -4274,8 +4276,8 @@ dependencies = [ "libp2p-swarm", "log", "prometheus-client", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "rand 0.7.3", "regex", "sha2 0.10.2", @@ -4297,8 +4299,8 @@ dependencies = [ "libp2p-swarm", "log", "lru 0.7.7", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "prost-codec", "smallvec", "thiserror", @@ -4322,8 +4324,8 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "rand 0.7.3", "sha2 0.10.2", "smallvec", @@ -4400,8 +4402,8 @@ dependencies = [ "lazy_static", "libp2p-core", "log", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "rand 0.8.5", "sha2 0.10.2", "snow", @@ -4437,8 +4439,8 @@ dependencies = [ "futures", "libp2p-core", "log", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "unsigned-varint", "void", ] @@ -4473,8 +4475,8 @@ dependencies = [ "libp2p-swarm", "log", "pin-project", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "prost-codec", "rand 0.8.5", "smallvec", @@ -4497,8 +4499,8 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "rand 0.8.5", "sha2 0.10.2", "thiserror", @@ -5352,7 +5354,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "async-trait", "dyn-clonable", @@ -5368,7 +5370,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "expander 0.0.6", "itertools", @@ -5406,7 +5408,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5427,7 +5429,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support", "frame-system", @@ -5444,7 +5446,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5458,7 +5460,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support", "frame-system", @@ -5474,7 +5476,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support", "frame-system", @@ -5490,7 +5492,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support", "frame-system", @@ -5505,7 +5507,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5529,7 +5531,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5549,7 +5551,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5564,7 +5566,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "beefy-primitives", "frame-support", @@ -5580,7 +5582,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -5603,7 +5605,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5621,7 +5623,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5666,7 +5668,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5683,7 +5685,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "bitflags", "frame-benchmarking", @@ -5711,7 +5713,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "bitflags", "parity-scale-codec", @@ -5726,7 +5728,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "proc-macro2", "quote", @@ -5736,7 +5738,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5753,7 +5755,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5766,7 +5768,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5782,7 +5784,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5805,7 +5807,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5818,7 +5820,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5836,7 +5838,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5851,7 +5853,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5874,7 +5876,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5890,7 +5892,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5910,7 +5912,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5927,7 +5929,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5944,7 +5946,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5962,7 +5964,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5977,7 +5979,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5992,7 +5994,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support", "frame-system", @@ -6009,7 +6011,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6028,7 +6030,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "parity-scale-codec", "sp-api", @@ -6038,7 +6040,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support", "frame-system", @@ -6055,7 +6057,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6078,7 +6080,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6094,7 +6096,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6109,7 +6111,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support", "frame-system", @@ -6123,7 +6125,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6138,7 +6140,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6154,7 +6156,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support", "frame-system", @@ -6175,7 +6177,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6191,7 +6193,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support", "frame-system", @@ -6205,7 +6207,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6228,7 +6230,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6239,7 +6241,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "log", "sp-arithmetic", @@ -6248,7 +6250,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support", "frame-system", @@ -6277,7 +6279,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6295,7 +6297,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6314,7 +6316,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-support", "frame-system", @@ -6330,7 +6332,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6345,7 +6347,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6356,7 +6358,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6373,7 +6375,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6388,7 +6390,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6404,7 +6406,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6419,7 +6421,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "frame-support", "frame-system", @@ -6437,7 +6439,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "frame-benchmarking", "frame-support", @@ -6995,7 +6997,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7010,7 +7012,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7024,7 +7026,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "derive_more", "fatality", @@ -7047,7 +7049,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "fatality", "futures", @@ -7068,7 +7070,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "clap 3.2.20", "frame-benchmarking-cli", @@ -7094,7 +7096,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7135,7 +7137,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "always-assert", "fatality", @@ -7156,7 +7158,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7169,7 +7171,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "derive_more", "fatality", @@ -7192,7 +7194,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7206,7 +7208,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "futures", "futures-timer", @@ -7226,7 +7228,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "always-assert", "async-trait", @@ -7250,7 +7252,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "futures", "parity-scale-codec", @@ -7268,7 +7270,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "bitvec", "derive_more", @@ -7297,7 +7299,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "bitvec", "futures", @@ -7317,7 +7319,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "bitvec", "fatality", @@ -7336,7 +7338,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7351,7 +7353,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "async-trait", "futures", @@ -7369,7 +7371,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7384,7 +7386,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "futures", "futures-timer", @@ -7401,7 +7403,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "fatality", "futures", @@ -7420,7 +7422,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "async-trait", "futures", @@ -7437,7 +7439,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "bitvec", "fatality", @@ -7455,7 +7457,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "always-assert", "assert_matches", @@ -7487,7 +7489,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "futures", "polkadot-node-primitives", @@ -7503,7 +7505,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "futures", "memory-lru", @@ -7519,7 +7521,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "async-std", "lazy_static", @@ -7537,7 +7539,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "bs58", "futures", @@ -7556,7 +7558,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "async-trait", "derive_more", @@ -7578,7 +7580,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "bounded-vec", "futures", @@ -7600,7 +7602,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7610,7 +7612,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "async-trait", "futures", @@ -7628,7 +7630,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "async-trait", "derive_more", @@ -7651,7 +7653,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "async-trait", "derive_more", @@ -7684,7 +7686,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "async-trait", "futures", @@ -7707,7 +7709,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "derive_more", "frame-support", @@ -7807,7 +7809,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7822,7 +7824,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "bitvec", "frame-system", @@ -7852,7 +7854,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7884,7 +7886,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "beefy-primitives", "bitvec", @@ -7972,7 +7974,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "beefy-primitives", "bitvec", @@ -8019,7 +8021,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "frame-support", "polkadot-primitives", @@ -8031,7 +8033,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "bs58", "parity-scale-codec", @@ -8043,7 +8045,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "bitflags", "bitvec", @@ -8086,7 +8088,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "async-trait", "beefy-gadget", @@ -8191,7 +8193,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8212,7 +8214,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8222,7 +8224,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8247,7 +8249,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "beefy-primitives", "bitvec", @@ -8308,7 +8310,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "frame-benchmarking", "frame-system", @@ -8453,7 +8455,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8553,7 +8555,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc03e116981ff7d8da8e5c220e374587b98d294af7ba7dd7fda761158f00086f" dependencies = [ "bytes", - "prost-derive", + "prost-derive 0.10.1", +] + +[[package]] +name = "prost" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "399c3c31cdec40583bb68f0b18403400d01ec4289c383aa047560439952c4dd7" +dependencies = [ + "bytes", + "prost-derive 0.11.0", ] [[package]] @@ -8571,8 +8583,28 @@ dependencies = [ "log", "multimap", "petgraph", - "prost", - "prost-types", + "prost 0.10.3", + "prost-types 0.10.1", + "regex", + "tempfile", + "which", +] + +[[package]] +name = "prost-build" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f835c582e6bd972ba8347313300219fed5bfa52caf175298d860b61ff6069bb" +dependencies = [ + "bytes", + "heck", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prost 0.11.0", + "prost-types 0.11.1", "regex", "tempfile", "which", @@ -8586,7 +8618,7 @@ checksum = "00af1e92c33b4813cc79fda3f2dbf56af5169709be0202df730e9ebc3e4cd007" dependencies = [ "asynchronous-codec", "bytes", - "prost", + "prost 0.10.3", "thiserror", "unsigned-varint", ] @@ -8604,6 +8636,19 @@ dependencies = [ "syn", ] +[[package]] +name = "prost-derive" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7345d5f0e08c0536d7ac7229952590239e77abf0a0100a1b1d890add6ea96364" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "prost-types" version = "0.10.1" @@ -8611,7 +8656,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68" dependencies = [ "bytes", - "prost", + "prost 0.10.3", +] + +[[package]] +name = "prost-types" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dfaa718ad76a44b3415e6c4d53b17c8f99160dcb3a99b10470fce8ad43f6e3e" +dependencies = [ + "bytes", + "prost 0.11.0", ] [[package]] @@ -8820,7 +8875,7 @@ dependencies = [ "derive_more", "fs-err", "itertools", - "static_init", + "static_init 0.5.2", "thiserror", ] @@ -8885,7 +8940,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9007,7 +9062,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9091,7 +9146,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "frame-support", "polkadot-primitives", @@ -9261,7 +9316,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "log", "sp-core", @@ -9272,7 +9327,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "futures", @@ -9281,8 +9336,8 @@ dependencies = [ "libp2p", "log", "parity-scale-codec", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "rand 0.7.3", "sc-client-api", "sc-network-common", @@ -9299,7 +9354,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "futures", "futures-timer", @@ -9322,7 +9377,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9338,7 +9393,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9355,7 +9410,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9366,7 +9421,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "chrono", "clap 3.2.20", @@ -9405,7 +9460,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "fnv", "futures", @@ -9433,7 +9488,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "hash-db", "kvdb", @@ -9458,7 +9513,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "futures", @@ -9482,7 +9537,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "futures", @@ -9511,7 +9566,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "fork-tree", @@ -9553,7 +9608,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "futures", "jsonrpsee", @@ -9575,7 +9630,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9588,7 +9643,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "futures", @@ -9613,7 +9668,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9640,7 +9695,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "environmental", "parity-scale-codec", @@ -9656,7 +9711,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "log", "parity-scale-codec", @@ -9671,7 +9726,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9691,7 +9746,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "ahash", "async-trait", @@ -9732,7 +9787,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "finality-grandpa", "futures", @@ -9753,7 +9808,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "ansi_term", "futures", @@ -9770,7 +9825,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "hex", @@ -9785,7 +9840,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "asynchronous-codec", @@ -9807,8 +9862,7 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.12.1", "pin-project", - "prost", - "prost-build", + "prost 0.10.3", "rand 0.7.3", "sc-block-builder", "sc-client-api", @@ -9827,14 +9881,33 @@ dependencies = [ "substrate-prometheus-endpoint", "thiserror", "unsigned-varint", - "void", "zeroize", ] +[[package]] +name = "sc-network-bitswap" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +dependencies = [ + "cid", + "futures", + "libp2p", + "log", + "prost 0.11.0", + "prost-build 0.11.1", + "sc-client-api", + "sc-network-common", + "sp-blockchain", + "sp-runtime", + "thiserror", + "unsigned-varint", + "void", +] + [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "bitflags", @@ -9842,7 +9915,7 @@ dependencies = [ "futures", "libp2p", "parity-scale-codec", - "prost-build", + "prost-build 0.10.4", "sc-consensus", "sc-peerset", "serde", @@ -9857,7 +9930,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "ahash", "futures", @@ -9875,15 +9948,15 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "futures", "hex", "libp2p", "log", "parity-scale-codec", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "sc-client-api", "sc-network-common", "sc-peerset", @@ -9896,7 +9969,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "fork-tree", "futures", @@ -9905,8 +9978,8 @@ dependencies = [ "log", "lru 0.7.7", "parity-scale-codec", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "sc-client-api", "sc-consensus", "sc-network-common", @@ -9924,7 +9997,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "bytes", "fnv", @@ -9954,7 +10027,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "futures", "libp2p", @@ -9967,7 +10040,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -9976,7 +10049,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "futures", "hash-db", @@ -10006,7 +10079,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "futures", "jsonrpsee", @@ -10029,7 +10102,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "futures", "jsonrpsee", @@ -10042,7 +10115,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "directories", @@ -10066,6 +10139,7 @@ dependencies = [ "sc-informant", "sc-keystore", "sc-network", + "sc-network-bitswap", "sc-network-common", "sc-network-light", "sc-network-sync", @@ -10098,6 +10172,7 @@ dependencies = [ "sp-transaction-storage-proof", "sp-trie", "sp-version", + "static_init 1.0.3", "substrate-prometheus-endpoint", "tempfile", "thiserror", @@ -10109,7 +10184,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "log", "parity-scale-codec", @@ -10123,7 +10198,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10142,7 +10217,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "futures", "libc", @@ -10161,7 +10236,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "chrono", "futures", @@ -10179,7 +10254,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "ansi_term", "atty", @@ -10210,7 +10285,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10221,7 +10296,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "futures", "futures-timer", @@ -10247,7 +10322,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "futures", "log", @@ -10260,7 +10335,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "futures", "futures-timer", @@ -10707,7 +10782,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "enumn", "parity-scale-codec", @@ -10783,7 +10858,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "hash-db", "log", @@ -10801,7 +10876,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "blake2", "proc-macro-crate", @@ -10813,7 +10888,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "parity-scale-codec", "scale-info", @@ -10826,7 +10901,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "integer-sqrt", "num-traits", @@ -10841,7 +10916,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "parity-scale-codec", "scale-info", @@ -10854,7 +10929,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "parity-scale-codec", @@ -10866,7 +10941,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "parity-scale-codec", "sp-api", @@ -10878,7 +10953,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "futures", "log", @@ -10896,7 +10971,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "futures", @@ -10915,7 +10990,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "parity-scale-codec", @@ -10933,7 +11008,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "merlin", @@ -10956,7 +11031,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "parity-scale-codec", "scale-info", @@ -10970,7 +11045,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "parity-scale-codec", "scale-info", @@ -10983,7 +11058,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "base58", "bitflags", @@ -11029,7 +11104,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "blake2", "byteorder", @@ -11043,7 +11118,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "proc-macro2", "quote", @@ -11054,7 +11129,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11063,7 +11138,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "proc-macro2", "quote", @@ -11073,7 +11148,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "environmental", "parity-scale-codec", @@ -11084,7 +11159,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "finality-grandpa", "log", @@ -11102,7 +11177,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11116,7 +11191,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "bytes", "futures", @@ -11142,7 +11217,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "lazy_static", "sp-core", @@ -11153,7 +11228,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "futures", @@ -11170,7 +11245,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "thiserror", "zstd", @@ -11179,7 +11254,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "log", "parity-scale-codec", @@ -11194,7 +11269,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "parity-scale-codec", "scale-info", @@ -11208,7 +11283,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "sp-api", "sp-core", @@ -11218,7 +11293,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "backtrace", "lazy_static", @@ -11228,7 +11303,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "rustc-hash", "serde", @@ -11238,7 +11313,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "either", "hash256-std-hasher", @@ -11255,12 +11330,13 @@ dependencies = [ "sp-core", "sp-io", "sp-std", + "sp-weights", ] [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11278,7 +11354,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "Inflector", "proc-macro-crate", @@ -11290,7 +11366,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "log", "parity-scale-codec", @@ -11304,7 +11380,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "serde", "serde_json", @@ -11313,7 +11389,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "parity-scale-codec", "scale-info", @@ -11327,7 +11403,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "parity-scale-codec", "scale-info", @@ -11338,7 +11414,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "hash-db", "log", @@ -11360,12 +11436,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11378,7 +11454,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "log", "sp-core", @@ -11391,7 +11467,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "futures-timer", @@ -11407,7 +11483,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "parity-scale-codec", "sp-std", @@ -11419,7 +11495,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "sp-api", "sp-runtime", @@ -11428,7 +11504,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "log", @@ -11444,7 +11520,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "ahash", "hash-db", @@ -11467,7 +11543,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11484,7 +11560,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11495,7 +11571,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "impl-trait-for-tuples", "log", @@ -11505,6 +11581,22 @@ dependencies = [ "wasmtime", ] +[[package]] +name = "sp-weights" +version = "4.0.0" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +dependencies = [ + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "serde", + "smallvec", + "sp-arithmetic", + "sp-core", + "sp-debug-derive", + "sp-std", +] + [[package]] name = "spin" version = "0.5.2" @@ -11683,7 +11775,22 @@ dependencies = [ "cfg_aliases", "libc", "parking_lot 0.11.2", - "static_init_macro", + "static_init_macro 0.5.0", +] + +[[package]] +name = "static_init" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" +dependencies = [ + "bitflags", + "cfg_aliases", + "libc", + "parking_lot 0.11.2", + "parking_lot_core 0.8.5", + "static_init_macro 1.0.2", + "winapi", ] [[package]] @@ -11699,6 +11806,19 @@ dependencies = [ "syn", ] +[[package]] +name = "static_init_macro" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf" +dependencies = [ + "cfg_aliases", + "memchr", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "statrs" version = "0.15.0" @@ -11756,7 +11876,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "platforms", ] @@ -11764,7 +11884,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11785,7 +11905,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "futures-util", "hyper", @@ -11798,7 +11918,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "jsonrpsee", "log", @@ -11819,7 +11939,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "async-trait", "futures", @@ -11845,7 +11965,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11855,7 +11975,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11866,7 +11986,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "ansi_term", "build-helper", @@ -11974,7 +12094,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "frame-support", "polkadot-primitives", @@ -12264,7 +12384,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12275,7 +12395,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12402,7 +12522,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#5527263978a763bafc78d60955c662c20f465d18" +source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" dependencies = [ "clap 3.2.20", "frame-try-runtime", @@ -12990,7 +13110,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "beefy-primitives", "bitvec", @@ -13079,7 +13199,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "frame-support", "polkadot-primitives", @@ -13365,7 +13485,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13379,7 +13499,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "frame-support", "frame-system", @@ -13399,7 +13519,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "frame-benchmarking", "frame-support", @@ -13417,7 +13537,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#53253de77f1649ecbb650df2ec3e29d0d1110a2d" +source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" dependencies = [ "Inflector", "proc-macro2", diff --git a/client/consensus/aura/src/import_queue.rs b/client/consensus/aura/src/import_queue.rs index 31ed5779850..80b35a2bab9 100644 --- a/client/consensus/aura/src/import_queue.rs +++ b/client/consensus/aura/src/import_queue.rs @@ -25,7 +25,7 @@ use sc_telemetry::TelemetryHandle; use sp_api::{ApiExt, ProvideRuntimeApi}; use sp_block_builder::BlockBuilder as BlockBuilderApi; use sp_blockchain::HeaderBackend; -use sp_consensus::{CanAuthorWith, Error as ConsensusError}; +use sp_consensus::Error as ConsensusError; use sp_consensus_aura::AuraApi; use sp_core::crypto::Pair; use sp_inherents::CreateInherentDataProviders; @@ -34,7 +34,7 @@ use std::{fmt::Debug, hash::Hash, sync::Arc}; use substrate_prometheus_endpoint::Registry; /// Parameters of [`import_queue`]. -pub struct ImportQueueParams<'a, I, C, CIDP, S, CAW> { +pub struct ImportQueueParams<'a, I, C, CIDP, S> { /// The block import to use. pub block_import: I, /// The client to interact with the chain. @@ -45,23 +45,20 @@ pub struct ImportQueueParams<'a, I, C, CIDP, S, CAW> { pub spawner: &'a S, /// The prometheus registry. pub registry: Option<&'a Registry>, - /// Can we author with the current node? - pub can_author_with: CAW, /// The telemetry handle. pub telemetry: Option, } /// Start an import queue for the Aura consensus algorithm. -pub fn import_queue<'a, P, Block, I, C, S, CAW, CIDP>( +pub fn import_queue<'a, P, Block, I, C, S, CIDP>( ImportQueueParams { block_import, client, create_inherent_data_providers, spawner, registry, - can_author_with, telemetry, - }: ImportQueueParams<'a, I, C, CIDP, S, CAW>, + }: ImportQueueParams<'a, I, C, CIDP, S>, ) -> Result, sp_consensus::Error> where Block: BlockT, @@ -82,48 +79,41 @@ where P::Public: Clone + Eq + Send + Sync + Hash + Debug + Codec, P::Signature: Codec, S: sp_core::traits::SpawnEssentialNamed, - CAW: CanAuthorWith + Send + Sync + 'static, CIDP: CreateInherentDataProviders + Sync + Send + 'static, CIDP::InherentDataProviders: InherentDataProviderExt + Send + Sync, { - sc_consensus_aura::import_queue::(sc_consensus_aura::ImportQueueParams { + sc_consensus_aura::import_queue::(sc_consensus_aura::ImportQueueParams { block_import: cumulus_client_consensus_common::ParachainBlockImport::new(block_import), justification_import: None, client, create_inherent_data_providers, spawner, registry, - can_author_with, check_for_equivocation: sc_consensus_aura::CheckForEquivocation::No, telemetry, }) } /// Parameters of [`build_verifier`]. -pub struct BuildVerifierParams { +pub struct BuildVerifierParams { /// The client to interact with the chain. pub client: Arc, /// The inherent data providers, to create the inherent data. pub create_inherent_data_providers: CIDP, - /// Can we author with the current node? - pub can_author_with: CAW, /// The telemetry handle. pub telemetry: Option, } /// Build the [`AuraVerifier`]. -pub fn build_verifier( - BuildVerifierParams { - client, - create_inherent_data_providers, - can_author_with, - telemetry, - }: BuildVerifierParams, -) -> AuraVerifier { +pub fn build_verifier( + BuildVerifierParams { client, create_inherent_data_providers, telemetry }: BuildVerifierParams< + C, + CIDP, + >, +) -> AuraVerifier { sc_consensus_aura::build_verifier(sc_consensus_aura::BuildVerifierParams { client, create_inherent_data_providers, - can_author_with, telemetry, check_for_equivocation: sc_consensus_aura::CheckForEquivocation::No, }) diff --git a/pallets/collator-selection/src/lib.rs b/pallets/collator-selection/src/lib.rs index e2e8e95f9a0..44a81ff14b4 100644 --- a/pallets/collator-selection/src/lib.rs +++ b/pallets/collator-selection/src/lib.rs @@ -77,7 +77,7 @@ pub mod pallet { pub use crate::weights::WeightInfo; use core::ops::Div; use frame_support::{ - dispatch::DispatchResultWithPostInfo, + dispatch::{DispatchClass, DispatchResultWithPostInfo}, inherent::Vec, pallet_prelude::*, sp_runtime::{ @@ -88,7 +88,6 @@ pub mod pallet { Currency, EnsureOrigin, ExistenceRequirement::KeepAlive, ReservableCurrency, ValidatorRegistration, }, - weights::DispatchClass, BoundedVec, PalletId, }; use frame_system::{pallet_prelude::*, Config as SystemConfig}; diff --git a/pallets/dmp-queue/src/lib.rs b/pallets/dmp-queue/src/lib.rs index bf1141bb58f..06b0c13ff18 100644 --- a/pallets/dmp-queue/src/lib.rs +++ b/pallets/dmp-queue/src/lib.rs @@ -24,7 +24,8 @@ use codec::{Decode, DecodeLimit, Encode}; use cumulus_primitives_core::{relay_chain::BlockNumber as RelayBlockNumber, DmpMessageHandler}; use frame_support::{ - dispatch::Weight, traits::EnsureOrigin, weights::constants::WEIGHT_PER_MILLIS, + traits::EnsureOrigin, + weights::{constants::WEIGHT_PER_MILLIS, Weight}, }; pub use pallet::*; use scale_info::TypeInfo; @@ -760,7 +761,7 @@ mod tests { super::Call::::service_overweight { index: 0, weight_limit: Weight::zero() } .get_dispatch_info() .weight; - use frame_support::weights::GetDispatchInfo; + use frame_support::dispatch::GetDispatchInfo; let info = DmpQueue::service_overweight(Origin::root(), 0, Weight::from_ref_time(20000)) .unwrap(); diff --git a/pallets/parachain-system/src/lib.rs b/pallets/parachain-system/src/lib.rs index b8e15d6e6a6..4bcae1ff597 100644 --- a/pallets/parachain-system/src/lib.rs +++ b/pallets/parachain-system/src/lib.rs @@ -36,12 +36,12 @@ use cumulus_primitives_core::{ }; use cumulus_primitives_parachain_inherent::{MessageQueueChain, ParachainInherentData}; use frame_support::{ - dispatch::{DispatchError, DispatchResult}, + dispatch::{DispatchError, DispatchResult, Pays, PostDispatchInfo}, ensure, inherent::{InherentData, InherentIdentifier, ProvideInherent}, storage, traits::Get, - weights::{Pays, PostDispatchInfo, Weight}, + weights::Weight, }; use frame_system::{ensure_none, ensure_root}; use polkadot_parachain::primitives::RelayChainBlockNumber; diff --git a/pallets/solo-to-para/src/lib.rs b/pallets/solo-to-para/src/lib.rs index bea78d25d4d..b1e7c99d6a9 100644 --- a/pallets/solo-to-para/src/lib.rs +++ b/pallets/solo-to-para/src/lib.rs @@ -18,7 +18,10 @@ use codec::{Decode, Encode}; use cumulus_pallet_parachain_system as parachain_system; -use frame_support::{dispatch::DispatchResult, pallet_prelude::*, weights::DispatchInfo}; +use frame_support::{ + dispatch::{DispatchInfo, DispatchResult}, + pallet_prelude::*, +}; use frame_system::pallet_prelude::*; pub use pallet::*; use polkadot_primitives::v2::PersistedValidationData; diff --git a/parachain-template/node/src/service.rs b/parachain-template/node/src/service.rs index 9ad3c38e1ac..f57411642b7 100644 --- a/parachain-template/node/src/service.rs +++ b/parachain-template/node/src/service.rs @@ -25,7 +25,6 @@ use cumulus_relay_chain_interface::{RelayChainError, RelayChainInterface, RelayC use cumulus_relay_chain_rpc_interface::{create_client_and_start_worker, RelayChainRpcInterface}; // Substrate Imports -use sc_client_api::ExecutorProvider; use sc_executor::NativeElseWasmExecutor; use sc_network::NetworkService; use sc_network_common::service::NetworkBlock; @@ -424,7 +423,6 @@ pub fn parachain_build_import_queue( _, _, _, - _, >(cumulus_client_consensus_aura::ImportQueueParams { block_import: client.clone(), client: client.clone(), @@ -440,7 +438,6 @@ pub fn parachain_build_import_queue( Ok((time, slot)) }, registry: config.prometheus_registry(), - can_author_with: sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone()), spawner: &task_manager.spawn_essential_handle(), telemetry, }) diff --git a/parachain-template/runtime/src/lib.rs b/parachain-template/runtime/src/lib.rs index aa5b6805c1d..253bb2d7125 100644 --- a/parachain-template/runtime/src/lib.rs +++ b/parachain-template/runtime/src/lib.rs @@ -26,11 +26,13 @@ use sp_version::NativeVersion; use sp_version::RuntimeVersion; use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, + dispatch::DispatchClass, + parameter_types, traits::Everything, weights::{ - constants::WEIGHT_PER_SECOND, ConstantMultiplier, DispatchClass, Weight, - WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, + constants::WEIGHT_PER_SECOND, ConstantMultiplier, Weight, WeightToFeeCoefficient, + WeightToFeeCoefficients, WeightToFeePolynomial, }, PalletId, }; diff --git a/parachains/runtimes/assets/statemine/src/lib.rs b/parachains/runtimes/assets/statemine/src/lib.rs index 579eafb82a0..c03ba675ded 100644 --- a/parachains/runtimes/assets/statemine/src/lib.rs +++ b/parachains/runtimes/assets/statemine/src/lib.rs @@ -46,9 +46,11 @@ use sp_version::RuntimeVersion; use codec::{Decode, Encode, MaxEncodedLen}; use constants::{currency::*, fee::WeightToFee}; use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, + dispatch::DispatchClass, + parameter_types, traits::{AsEnsureOriginWithArg, EitherOfDiverse, InstanceFilter}, - weights::{ConstantMultiplier, DispatchClass, Weight}, + weights::{ConstantMultiplier, Weight}, PalletId, RuntimeDebug, }; use frame_system::{ diff --git a/parachains/runtimes/assets/statemint/src/lib.rs b/parachains/runtimes/assets/statemint/src/lib.rs index 5a54fa95cc2..606a4b71e69 100644 --- a/parachains/runtimes/assets/statemint/src/lib.rs +++ b/parachains/runtimes/assets/statemint/src/lib.rs @@ -75,9 +75,11 @@ use sp_version::RuntimeVersion; use codec::{Decode, Encode, MaxEncodedLen}; use constants::{currency::*, fee::WeightToFee}; use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, + dispatch::DispatchClass, + parameter_types, traits::{AsEnsureOriginWithArg, EitherOfDiverse, InstanceFilter}, - weights::{ConstantMultiplier, DispatchClass, Weight}, + weights::{ConstantMultiplier, Weight}, PalletId, RuntimeDebug, }; use frame_system::{ diff --git a/parachains/runtimes/assets/westmint/src/lib.rs b/parachains/runtimes/assets/westmint/src/lib.rs index 27e6c15da02..08a5e3584af 100644 --- a/parachains/runtimes/assets/westmint/src/lib.rs +++ b/parachains/runtimes/assets/westmint/src/lib.rs @@ -46,9 +46,11 @@ use sp_version::RuntimeVersion; use codec::{Decode, Encode, MaxEncodedLen}; use constants::{currency::*, fee::WeightToFee}; use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, + dispatch::DispatchClass, + parameter_types, traits::{AsEnsureOriginWithArg, InstanceFilter}, - weights::{ConstantMultiplier, DispatchClass, Weight}, + weights::{ConstantMultiplier, Weight}, PalletId, RuntimeDebug, }; use frame_system::{ diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs index a5c5a5daf64..b9bbf842798 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs @@ -61,9 +61,11 @@ use sp_version::RuntimeVersion; use codec::{Decode, Encode, MaxEncodedLen}; use constants::{currency::*, fee::WeightToFee}; use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, + dispatch::DispatchClass, + parameter_types, traits::{ConstU16, ConstU32, ConstU64, ConstU8, EitherOfDiverse, InstanceFilter}, - weights::{ConstantMultiplier, DispatchClass, Weight}, + weights::{ConstantMultiplier, Weight}, PalletId, RuntimeDebug, }; use frame_system::{ diff --git a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index 46c53a95efe..1967ef34c9c 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -47,9 +47,11 @@ use sp_version::RuntimeVersion; use constants::{currency::*, fee::WeightToFee}; use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, + dispatch::DispatchClass, + parameter_types, traits::{ConstU128, ConstU16, ConstU32, ConstU64, ConstU8, Everything}, - weights::{ConstantMultiplier, DispatchClass, Weight}, + weights::{ConstantMultiplier, Weight}, PalletId, }; use frame_system::limits::{BlockLength, BlockWeights}; diff --git a/parachains/runtimes/starters/seedling/src/lib.rs b/parachains/runtimes/starters/seedling/src/lib.rs index 035dff2eb45..daab72eba44 100644 --- a/parachains/runtimes/starters/seedling/src/lib.rs +++ b/parachains/runtimes/starters/seedling/src/lib.rs @@ -43,11 +43,13 @@ use sp_version::RuntimeVersion; // A few exports that help ease life for downstream crates. pub use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, + dispatch::DispatchClass, + parameter_types, traits::{IsInVec, Randomness}, weights::{ constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, - DispatchClass, IdentityFee, Weight, + IdentityFee, Weight, }, StorageValue, }; diff --git a/parachains/runtimes/starters/shell/src/lib.rs b/parachains/runtimes/starters/shell/src/lib.rs index fab27c2fc6f..8b692c210e3 100644 --- a/parachains/runtimes/starters/shell/src/lib.rs +++ b/parachains/runtimes/starters/shell/src/lib.rs @@ -50,11 +50,13 @@ use sp_version::RuntimeVersion; // A few exports that help ease life for downstream crates. pub use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, + dispatch::DispatchClass, + parameter_types, traits::{Everything, IsInVec, Randomness}, weights::{ constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, - DispatchClass, IdentityFee, Weight, + IdentityFee, Weight, }, StorageValue, }; diff --git a/parachains/runtimes/testing/penpal/src/lib.rs b/parachains/runtimes/testing/penpal/src/lib.rs index a9342c3a657..d48fc4bf53b 100644 --- a/parachains/runtimes/testing/penpal/src/lib.rs +++ b/parachains/runtimes/testing/penpal/src/lib.rs @@ -32,11 +32,13 @@ pub mod xcm_config; use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, + dispatch::DispatchClass, + parameter_types, traits::Everything, weights::{ - constants::WEIGHT_PER_SECOND, ConstantMultiplier, DispatchClass, Weight, - WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, + constants::WEIGHT_PER_SECOND, ConstantMultiplier, Weight, WeightToFeeCoefficient, + WeightToFeeCoefficients, WeightToFeePolynomial, }, PalletId, }; diff --git a/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/parachains/runtimes/testing/rococo-parachain/src/lib.rs index 96ba3bdef2b..dc5577cbfae 100644 --- a/parachains/runtimes/testing/rococo-parachain/src/lib.rs +++ b/parachains/runtimes/testing/rococo-parachain/src/lib.rs @@ -38,11 +38,13 @@ use sp_version::RuntimeVersion; // A few exports that help ease life for downstream crates. pub use frame_support::{ - construct_runtime, match_types, parameter_types, + construct_runtime, + dispatch::DispatchClass, + match_types, parameter_types, traits::{EitherOfDiverse, Everything, IsInVec, Randomness}, weights::{ constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, - ConstantMultiplier, DispatchClass, IdentityFee, Weight, + ConstantMultiplier, IdentityFee, Weight, }, StorageValue, }; diff --git a/polkadot-parachain/src/service.rs b/polkadot-parachain/src/service.rs index ae03e400b09..2bdeed82b1f 100644 --- a/polkadot-parachain/src/service.rs +++ b/polkadot-parachain/src/service.rs @@ -710,7 +710,6 @@ pub fn rococo_parachain_build_import_queue( _, _, _, - _, >(cumulus_client_consensus_aura::ImportQueueParams { block_import: client.clone(), client, @@ -726,7 +725,6 @@ pub fn rococo_parachain_build_import_queue( Ok((timestamp, slot)) }, registry: config.prometheus_registry(), - can_author_with: sp_consensus::AlwaysCanAuthor, spawner: &task_manager.spawn_essential_handle(), telemetry, }) @@ -1086,26 +1084,23 @@ where let aura_verifier = move || { let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client2).unwrap(); - Box::new( - cumulus_client_consensus_aura::build_verifier::<::Pair, _, _, _>( - cumulus_client_consensus_aura::BuildVerifierParams { - client: client2.clone(), - create_inherent_data_providers: move |_, _| async move { - let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); + Box::new(cumulus_client_consensus_aura::build_verifier::<::Pair, _, _>( + cumulus_client_consensus_aura::BuildVerifierParams { + client: client2.clone(), + create_inherent_data_providers: move |_, _| async move { + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); - let slot = + let slot = sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( *timestamp, slot_duration, ); - Ok((timestamp, slot)) - }, - can_author_with: sp_consensus::AlwaysCanAuthor, - telemetry: telemetry_handle, + Ok((timestamp, slot)) }, - ), - ) as Box<_> + telemetry: telemetry_handle, + }, + )) as Box<_> }; let relay_chain_verifier = @@ -1530,7 +1525,6 @@ pub fn contracts_rococo_build_import_queue( _, _, _, - _, >(cumulus_client_consensus_aura::ImportQueueParams { block_import: client.clone(), client, @@ -1546,7 +1540,6 @@ pub fn contracts_rococo_build_import_queue( Ok((timestamp, slot)) }, registry: config.prometheus_registry(), - can_author_with: sp_consensus::AlwaysCanAuthor, spawner: &task_manager.spawn_essential_handle(), telemetry, }) diff --git a/test/runtime/src/lib.rs b/test/runtime/src/lib.rs index 0d5838d0014..7d47140922f 100644 --- a/test/runtime/src/lib.rs +++ b/test/runtime/src/lib.rs @@ -45,11 +45,13 @@ use sp_version::RuntimeVersion; // A few exports that help ease life for downstream crates. pub use frame_support::{ - construct_runtime, parameter_types, + construct_runtime, + dispatch::DispatchClass, + parameter_types, traits::Randomness, weights::{ constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, - ConstantMultiplier, DispatchClass, IdentityFee, Weight, + ConstantMultiplier, IdentityFee, Weight, }, StorageValue, }; diff --git a/test/service/src/lib.rs b/test/service/src/lib.rs index a45b3c8bf1d..53a04d47e6d 100644 --- a/test/service/src/lib.rs +++ b/test/service/src/lib.rs @@ -608,7 +608,7 @@ pub fn node_config( is_collator: bool, ) -> Result { let base_path = BasePath::new_temp_dir()?; - let root = base_path.path().to_path_buf(); + let root = base_path.path().join(format!("cumulus_test_service_{}", key.to_string())); let role = if is_collator { Role::Authority } else { Role::Full }; let key_seed = key.to_seed(); let mut spec = Box::new(chain_spec::get_chain_spec(para_id)); From 34e341c6257a646fb7bd46227a038dacd8883b5e Mon Sep 17 00:00:00 2001 From: Oliver Tale-Yazdi Date: Wed, 14 Sep 2022 21:05:34 +0200 Subject: [PATCH 055/148] Co #11976: Enable rust features (#1607) * Respect feature gated functions Signed-off-by: Oliver Tale-Yazdi * update lockfile for {"polkadot", "substrate"} * Fix features Signed-off-by: Oliver Tale-Yazdi * Feature gate test Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Oliver Tale-Yazdi Co-authored-by: parity-processbot <> --- Cargo.lock | 546 +++++++++--------- parachain-template/node/src/command.rs | 9 + parachain-template/runtime/Cargo.toml | 2 +- .../runtimes/assets/statemine/Cargo.toml | 4 +- .../runtimes/assets/statemint/Cargo.toml | 4 +- .../runtimes/assets/westmint/Cargo.toml | 4 +- .../collectives-polkadot/Cargo.toml | 2 +- .../contracts/contracts-rococo/Cargo.toml | 2 +- parachains/runtimes/testing/penpal/Cargo.toml | 2 +- polkadot-parachain/src/command.rs | 9 + .../tests/benchmark_storage_works.rs | 2 + 11 files changed, 318 insertions(+), 268 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3e22fe183ba..d3d90eb4e97 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -439,6 +439,12 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +[[package]] +name = "base64ct" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2b2456fd614d856680dcd9fcc660a51a820fa09daef2e49772b56a193c8474" + [[package]] name = "beef" version = "0.5.1" @@ -451,7 +457,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "beefy-primitives", @@ -487,7 +493,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -507,7 +513,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "beefy-primitives", "sp-api", @@ -516,7 +522,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "parity-scale-codec", "scale-info", @@ -2786,7 +2792,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "parity-scale-codec", ] @@ -2803,7 +2809,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support", "frame-system", @@ -2826,7 +2832,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "Inflector", "chrono", @@ -2877,7 +2883,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2888,7 +2894,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2904,7 +2910,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support", "frame-system", @@ -2933,7 +2939,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "bitflags", "frame-metadata", @@ -2965,7 +2971,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "Inflector", "cfg-expr", @@ -2979,7 +2985,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2991,7 +2997,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "proc-macro2", "quote", @@ -3001,7 +3007,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support", "log", @@ -3019,7 +3025,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -3034,7 +3040,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "parity-scale-codec", "sp-api", @@ -3043,7 +3049,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support", "parity-scale-codec", @@ -3922,7 +3928,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "beefy-primitives", "bitvec", @@ -4015,7 +4021,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "frame-support", "polkadot-primitives", @@ -4757,20 +4763,20 @@ dependencies = [ [[package]] name = "lru" -version = "0.6.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ea2d928b485416e8908cff2d97d621db22b27f7b3b6729e438bcf42c671ba91" +checksum = "c84e6fe5655adc6ce00787cf7dcaf8dc4f998a0565d23eafc207a8b08ca3349a" dependencies = [ "hashbrown 0.11.2", ] [[package]] name = "lru" -version = "0.7.7" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c84e6fe5655adc6ce00787cf7dcaf8dc4f998a0565d23eafc207a8b08ca3349a" +checksum = "936d98d2ddd79c18641c6709e7bb09981449694e402d1a0f0f657ea8d61f4a51" dependencies = [ - "hashbrown 0.11.2", + "hashbrown 0.12.3", ] [[package]] @@ -4902,11 +4908,11 @@ dependencies = [ [[package]] name = "memory-lru" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beeb98b3d1ed2c0054bd81b5ba949a0243c3ccad751d45ea898fa8059fa2860a" +checksum = "ce95ae042940bad7e312857b929ee3d11b8f799a80cb7b9c7ec5125516906395" dependencies = [ - "lru 0.6.6", + "lru 0.8.0", ] [[package]] @@ -5354,7 +5360,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "async-trait", "dyn-clonable", @@ -5370,7 +5376,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "expander 0.0.6", "itertools", @@ -5408,7 +5414,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -5429,7 +5435,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support", "frame-system", @@ -5446,7 +5452,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -5460,7 +5466,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support", "frame-system", @@ -5476,7 +5482,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support", "frame-system", @@ -5492,7 +5498,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support", "frame-system", @@ -5507,7 +5513,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -5531,7 +5537,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5551,7 +5557,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -5566,7 +5572,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "beefy-primitives", "frame-support", @@ -5582,7 +5588,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -5605,7 +5611,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -5623,7 +5629,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -5668,7 +5674,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -5685,7 +5691,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "bitflags", "frame-benchmarking", @@ -5713,7 +5719,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "bitflags", "parity-scale-codec", @@ -5728,7 +5734,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "proc-macro2", "quote", @@ -5738,7 +5744,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5755,7 +5761,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5768,7 +5774,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -5784,13 +5790,14 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-election-provider-support", "frame-support", "frame-system", "log", + "pallet-election-provider-support-benchmarking", "parity-scale-codec", "rand 0.7.3", "scale-info", @@ -5807,7 +5814,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5820,7 +5827,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -5838,7 +5845,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -5853,7 +5860,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -5876,7 +5883,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5892,7 +5899,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -5912,7 +5919,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -5929,7 +5936,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -5946,7 +5953,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5964,7 +5971,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5979,7 +5986,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -5994,7 +6001,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support", "frame-system", @@ -6011,7 +6018,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6023,6 +6030,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", + "sp-runtime-interface", "sp-staking", "sp-std", ] @@ -6030,7 +6038,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "parity-scale-codec", "sp-api", @@ -6040,7 +6048,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support", "frame-system", @@ -6057,7 +6065,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6080,7 +6088,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -6096,7 +6104,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -6111,7 +6119,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support", "frame-system", @@ -6125,7 +6133,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -6140,7 +6148,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -6156,7 +6164,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support", "frame-system", @@ -6177,7 +6185,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -6193,7 +6201,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support", "frame-system", @@ -6207,7 +6215,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6230,7 +6238,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6241,7 +6249,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "log", "sp-arithmetic", @@ -6250,7 +6258,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support", "frame-system", @@ -6279,7 +6287,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -6297,7 +6305,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -6316,7 +6324,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-support", "frame-system", @@ -6332,7 +6340,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6347,7 +6355,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6358,7 +6366,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -6375,7 +6383,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -6390,7 +6398,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -6406,7 +6414,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-benchmarking", "frame-support", @@ -6421,7 +6429,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "frame-support", "frame-system", @@ -6439,7 +6447,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "frame-benchmarking", "frame-support", @@ -6954,6 +6962,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs8" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0" +dependencies = [ + "der", + "spki", + "zeroize", +] + [[package]] name = "pkg-config" version = "0.3.22" @@ -6997,7 +7016,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7012,7 +7031,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7026,7 +7045,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "derive_more", "fatality", @@ -7049,7 +7068,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "fatality", "futures", @@ -7070,7 +7089,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "clap 3.2.20", "frame-benchmarking-cli", @@ -7096,7 +7115,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7137,7 +7156,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "always-assert", "fatality", @@ -7158,7 +7177,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7171,7 +7190,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "derive_more", "fatality", @@ -7194,7 +7213,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7208,7 +7227,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "futures", "futures-timer", @@ -7228,7 +7247,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "always-assert", "async-trait", @@ -7252,7 +7271,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "futures", "parity-scale-codec", @@ -7270,7 +7289,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "bitvec", "derive_more", @@ -7299,7 +7318,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "bitvec", "futures", @@ -7319,7 +7338,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "bitvec", "fatality", @@ -7338,7 +7357,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7353,7 +7372,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "async-trait", "futures", @@ -7371,7 +7390,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7386,7 +7405,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "futures", "futures-timer", @@ -7403,7 +7422,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "fatality", "futures", @@ -7422,7 +7441,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "async-trait", "futures", @@ -7439,7 +7458,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "bitvec", "fatality", @@ -7457,7 +7476,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "always-assert", "assert_matches", @@ -7489,7 +7508,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "futures", "polkadot-node-primitives", @@ -7505,7 +7524,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "futures", "memory-lru", @@ -7521,7 +7540,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "async-std", "lazy_static", @@ -7539,7 +7558,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "bs58", "futures", @@ -7558,7 +7577,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "async-trait", "derive_more", @@ -7580,7 +7599,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "bounded-vec", "futures", @@ -7602,7 +7621,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7612,7 +7631,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "async-trait", "futures", @@ -7630,7 +7649,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "async-trait", "derive_more", @@ -7653,7 +7672,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "async-trait", "derive_more", @@ -7686,7 +7705,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "async-trait", "futures", @@ -7709,7 +7728,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "derive_more", "frame-support", @@ -7809,7 +7828,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7824,7 +7843,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "bitvec", "frame-system", @@ -7854,7 +7873,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7886,7 +7905,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "beefy-primitives", "bitvec", @@ -7974,7 +7993,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "beefy-primitives", "bitvec", @@ -8021,7 +8040,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "frame-support", "polkadot-primitives", @@ -8033,7 +8052,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "bs58", "parity-scale-codec", @@ -8045,7 +8064,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "bitflags", "bitvec", @@ -8088,7 +8107,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "async-trait", "beefy-gadget", @@ -8193,7 +8212,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8214,7 +8233,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8224,7 +8243,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8249,7 +8268,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "beefy-primitives", "bitvec", @@ -8310,7 +8329,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "frame-benchmarking", "frame-system", @@ -8455,7 +8474,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8940,7 +8959,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9062,7 +9081,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9146,7 +9165,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "frame-support", "polkadot-primitives", @@ -9316,7 +9335,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "log", "sp-core", @@ -9327,7 +9346,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "futures", @@ -9354,7 +9373,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "futures", "futures-timer", @@ -9377,7 +9396,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9393,7 +9412,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9410,7 +9429,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9421,7 +9440,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "chrono", "clap 3.2.20", @@ -9460,7 +9479,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "fnv", "futures", @@ -9488,7 +9507,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "hash-db", "kvdb", @@ -9513,7 +9532,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "futures", @@ -9537,7 +9556,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "futures", @@ -9566,7 +9585,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "fork-tree", @@ -9608,7 +9627,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "futures", "jsonrpsee", @@ -9630,7 +9649,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9643,7 +9662,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "futures", @@ -9668,7 +9687,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9695,7 +9714,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "environmental", "parity-scale-codec", @@ -9711,7 +9730,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "log", "parity-scale-codec", @@ -9726,7 +9745,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9746,7 +9765,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "ahash", "async-trait", @@ -9787,7 +9806,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "finality-grandpa", "futures", @@ -9808,7 +9827,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "ansi_term", "futures", @@ -9825,7 +9844,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "hex", @@ -9840,7 +9859,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "asynchronous-codec", @@ -9887,7 +9906,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "cid", "futures", @@ -9907,7 +9926,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "bitflags", @@ -9930,7 +9949,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "ahash", "futures", @@ -9948,7 +9967,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "futures", "hex", @@ -9969,7 +9988,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "fork-tree", "futures", @@ -9997,7 +10016,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "bytes", "fnv", @@ -10027,7 +10046,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "futures", "libp2p", @@ -10040,7 +10059,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10049,7 +10068,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "futures", "hash-db", @@ -10079,7 +10098,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "futures", "jsonrpsee", @@ -10102,7 +10121,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "futures", "jsonrpsee", @@ -10115,7 +10134,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "directories", @@ -10184,7 +10203,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "log", "parity-scale-codec", @@ -10198,7 +10217,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10217,7 +10236,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "futures", "libc", @@ -10236,7 +10255,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "chrono", "futures", @@ -10254,7 +10273,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "ansi_term", "atty", @@ -10285,7 +10304,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10296,7 +10315,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "futures", "futures-timer", @@ -10322,7 +10341,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "futures", "log", @@ -10335,7 +10354,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "futures", "futures-timer", @@ -10423,6 +10442,7 @@ checksum = "08da66b8b0965a5555b6bd6639e68ccba85e1e2506f5fbb089e93f8a04e1a2d1" dependencies = [ "der", "generic-array 0.14.4", + "pkcs8", "subtle", "zeroize", ] @@ -10782,7 +10802,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "enumn", "parity-scale-codec", @@ -10858,7 +10878,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "hash-db", "log", @@ -10876,7 +10896,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "blake2", "proc-macro-crate", @@ -10888,7 +10908,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "parity-scale-codec", "scale-info", @@ -10901,7 +10921,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "integer-sqrt", "num-traits", @@ -10916,7 +10936,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "parity-scale-codec", "scale-info", @@ -10929,7 +10949,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "parity-scale-codec", @@ -10941,7 +10961,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "parity-scale-codec", "sp-api", @@ -10953,7 +10973,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "futures", "log", @@ -10971,7 +10991,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "futures", @@ -10990,7 +11010,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "parity-scale-codec", @@ -11008,7 +11028,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "merlin", @@ -11031,7 +11051,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "parity-scale-codec", "scale-info", @@ -11045,7 +11065,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "parity-scale-codec", "scale-info", @@ -11058,7 +11078,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "base58", "bitflags", @@ -11104,7 +11124,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "blake2", "byteorder", @@ -11118,7 +11138,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "proc-macro2", "quote", @@ -11129,7 +11149,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11138,7 +11158,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "proc-macro2", "quote", @@ -11148,7 +11168,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "environmental", "parity-scale-codec", @@ -11159,7 +11179,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "finality-grandpa", "log", @@ -11177,7 +11197,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11191,7 +11211,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "bytes", "futures", @@ -11217,7 +11237,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "lazy_static", "sp-core", @@ -11228,7 +11248,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "futures", @@ -11245,7 +11265,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "thiserror", "zstd", @@ -11254,7 +11274,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "log", "parity-scale-codec", @@ -11269,7 +11289,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "parity-scale-codec", "scale-info", @@ -11283,7 +11303,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "sp-api", "sp-core", @@ -11293,7 +11313,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "backtrace", "lazy_static", @@ -11303,7 +11323,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "rustc-hash", "serde", @@ -11313,7 +11333,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "either", "hash256-std-hasher", @@ -11336,7 +11356,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11354,7 +11374,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "Inflector", "proc-macro-crate", @@ -11366,7 +11386,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "log", "parity-scale-codec", @@ -11380,7 +11400,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "serde", "serde_json", @@ -11389,7 +11409,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "parity-scale-codec", "scale-info", @@ -11403,7 +11423,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "parity-scale-codec", "scale-info", @@ -11414,7 +11434,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "hash-db", "log", @@ -11436,12 +11456,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11454,7 +11474,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "log", "sp-core", @@ -11467,7 +11487,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "futures-timer", @@ -11483,7 +11503,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "parity-scale-codec", "sp-std", @@ -11495,7 +11515,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "sp-api", "sp-runtime", @@ -11504,7 +11524,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "log", @@ -11520,7 +11540,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "ahash", "hash-db", @@ -11543,7 +11563,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11560,7 +11580,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11571,7 +11591,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "impl-trait-for-tuples", "log", @@ -11584,7 +11604,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11603,6 +11623,16 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spki" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27" +dependencies = [ + "base64ct", + "der", +] + [[package]] name = "ss58-registry" version = "1.29.0" @@ -11876,7 +11906,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "platforms", ] @@ -11884,7 +11914,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11905,7 +11935,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "futures-util", "hyper", @@ -11918,7 +11948,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "jsonrpsee", "log", @@ -11939,7 +11969,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "async-trait", "futures", @@ -11965,7 +11995,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11975,7 +12005,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11986,7 +12016,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "ansi_term", "build-helper", @@ -12094,7 +12124,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "frame-support", "polkadot-primitives", @@ -12384,7 +12414,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12395,7 +12425,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12522,7 +12552,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#23bb5a6255bbcd7ce2999044710428bc4a7a924f" +source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "clap 3.2.20", "frame-try-runtime", @@ -13110,7 +13140,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "beefy-primitives", "bitvec", @@ -13199,7 +13229,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "frame-support", "polkadot-primitives", @@ -13485,7 +13515,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13499,7 +13529,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "frame-support", "frame-system", @@ -13519,7 +13549,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "frame-benchmarking", "frame-support", @@ -13537,7 +13567,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#2b0d83258089578b65712e143c794cf4922941de" +source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ "Inflector", "proc-macro2", diff --git a/parachain-template/node/src/command.rs b/parachain-template/node/src/command.rs index d1eebd127d8..7f7bfd140af 100644 --- a/parachain-template/node/src/command.rs +++ b/parachain-template/node/src/command.rs @@ -217,6 +217,15 @@ pub fn run() -> Result<()> { )?; cmd.run(partials.client) }), + #[cfg(not(feature = "runtime-benchmarks"))] + BenchmarkCmd::Storage(_) => + return Err(sc_cli::Error::Input( + "Compile with --features=runtime-benchmarks \ + to enable storage benchmarks." + .into(), + ) + .into()), + #[cfg(feature = "runtime-benchmarks")] BenchmarkCmd::Storage(cmd) => runner.sync_run(|config| { let partials = new_partial::( &config, diff --git a/parachain-template/runtime/Cargo.toml b/parachain-template/runtime/Cargo.toml index 145c09fcc34..7f12eacad12 100644 --- a/parachain-template/runtime/Cargo.toml +++ b/parachain-template/runtime/Cargo.toml @@ -131,7 +131,7 @@ runtime-benchmarks = [ "hex-literal", "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", - "frame-system-benchmarking", + "frame-system-benchmarking/runtime-benchmarks", "frame-system/runtime-benchmarks", "pallet-balances/runtime-benchmarks", "pallet-collator-selection/runtime-benchmarks", diff --git a/parachains/runtimes/assets/statemine/Cargo.toml b/parachains/runtimes/assets/statemine/Cargo.toml index a6313d4d274..90a78d670cf 100644 --- a/parachains/runtimes/assets/statemine/Cargo.toml +++ b/parachains/runtimes/assets/statemine/Cargo.toml @@ -87,7 +87,7 @@ runtime-benchmarks = [ "hex-literal", "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", - "frame-system-benchmarking", + "frame-system-benchmarking/runtime-benchmarks", "frame-system/runtime-benchmarks", "pallet-assets/runtime-benchmarks", "pallet-balances/runtime-benchmarks", @@ -102,7 +102,7 @@ runtime-benchmarks = [ "cumulus-pallet-session-benchmarking/runtime-benchmarks", "pallet-collator-selection/runtime-benchmarks", "cumulus-pallet-xcmp-queue/runtime-benchmarks", - "pallet-xcm-benchmarks", + "pallet-xcm-benchmarks/runtime-benchmarks", ] try-runtime = [ "cumulus-pallet-aura-ext/try-runtime", diff --git a/parachains/runtimes/assets/statemint/Cargo.toml b/parachains/runtimes/assets/statemint/Cargo.toml index 1420852d9ec..e59071152ae 100644 --- a/parachains/runtimes/assets/statemint/Cargo.toml +++ b/parachains/runtimes/assets/statemint/Cargo.toml @@ -86,7 +86,7 @@ runtime-benchmarks = [ "hex-literal", "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", - "frame-system-benchmarking", + "frame-system-benchmarking/runtime-benchmarks", "frame-system/runtime-benchmarks", "pallet-assets/runtime-benchmarks", "pallet-balances/runtime-benchmarks", @@ -101,7 +101,7 @@ runtime-benchmarks = [ "cumulus-pallet-session-benchmarking/runtime-benchmarks", "pallet-collator-selection/runtime-benchmarks", "cumulus-pallet-xcmp-queue/runtime-benchmarks", - "pallet-xcm-benchmarks", + "pallet-xcm-benchmarks/runtime-benchmarks", ] try-runtime = [ "cumulus-pallet-aura-ext/try-runtime", diff --git a/parachains/runtimes/assets/westmint/Cargo.toml b/parachains/runtimes/assets/westmint/Cargo.toml index c3fe0925523..a127b7bfbce 100644 --- a/parachains/runtimes/assets/westmint/Cargo.toml +++ b/parachains/runtimes/assets/westmint/Cargo.toml @@ -86,7 +86,7 @@ runtime-benchmarks = [ "hex-literal", "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", - "frame-system-benchmarking", + "frame-system-benchmarking/runtime-benchmarks", "frame-system/runtime-benchmarks", "pallet-assets/runtime-benchmarks", "pallet-balances/runtime-benchmarks", @@ -101,7 +101,7 @@ runtime-benchmarks = [ "cumulus-pallet-session-benchmarking/runtime-benchmarks", "pallet-collator-selection/runtime-benchmarks", "cumulus-pallet-xcmp-queue/runtime-benchmarks", - "pallet-xcm-benchmarks", + "pallet-xcm-benchmarks/runtime-benchmarks", ] try-runtime = [ "cumulus-pallet-aura-ext/try-runtime", diff --git a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml index 3bef7d21fe3..2e113d7ea1e 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml +++ b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml @@ -83,7 +83,7 @@ runtime-benchmarks = [ "hex-literal", "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", - "frame-system-benchmarking", + "frame-system-benchmarking/runtime-benchmarks", "frame-system/runtime-benchmarks", "pallet-alliance/runtime-benchmarks", "pallet-balances/runtime-benchmarks", diff --git a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml index 379156f4260..4a811f46406 100644 --- a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml +++ b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml @@ -147,7 +147,7 @@ runtime-benchmarks = [ "hex-literal", "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", - "frame-system-benchmarking", + "frame-system-benchmarking/runtime-benchmarks", "frame-system/runtime-benchmarks", "pallet-balances/runtime-benchmarks", "pallet-collator-selection/runtime-benchmarks", diff --git a/parachains/runtimes/testing/penpal/Cargo.toml b/parachains/runtimes/testing/penpal/Cargo.toml index dfa7b160b12..399f616c1ad 100644 --- a/parachains/runtimes/testing/penpal/Cargo.toml +++ b/parachains/runtimes/testing/penpal/Cargo.toml @@ -134,7 +134,7 @@ runtime-benchmarks = [ "hex-literal", "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", - "frame-system-benchmarking", + "frame-system-benchmarking/runtime-benchmarks", "frame-system/runtime-benchmarks", "pallet-balances/runtime-benchmarks", "pallet-collator-selection/runtime-benchmarks", diff --git a/polkadot-parachain/src/command.rs b/polkadot-parachain/src/command.rs index e07a8cfed54..0c3fbe67026 100644 --- a/polkadot-parachain/src/command.rs +++ b/polkadot-parachain/src/command.rs @@ -572,6 +572,15 @@ pub fn run() -> Result<()> { BenchmarkCmd::Block(cmd) => runner.sync_run(|config| { construct_benchmark_partials!(config, |partials| cmd.run(partials.client)) }), + #[cfg(not(feature = "runtime-benchmarks"))] + BenchmarkCmd::Storage(_) => + return Err(sc_cli::Error::Input( + "Compile with --features=runtime-benchmarks \ + to enable storage benchmarks." + .into(), + ) + .into()), + #[cfg(feature = "runtime-benchmarks")] BenchmarkCmd::Storage(cmd) => runner.sync_run(|config| { construct_benchmark_partials!(config, |partials| { let db = partials.backend.expose_db(); diff --git a/polkadot-parachain/tests/benchmark_storage_works.rs b/polkadot-parachain/tests/benchmark_storage_works.rs index df3c7fe9194..916d65c0a1b 100644 --- a/polkadot-parachain/tests/benchmark_storage_works.rs +++ b/polkadot-parachain/tests/benchmark_storage_works.rs @@ -1,3 +1,5 @@ +#![cfg(feature = "runtime-benchmarks")] + use assert_cmd::cargo::cargo_bin; use std::{ path::Path, From bd71977f61ad8af52ae0ebec95fe532326a9398c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 10:21:40 +0200 Subject: [PATCH 056/148] Bump tokio from 1.21.0 to 1.21.1 (#1623) Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.21.0 to 1.21.1. - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.21.0...tokio-1.21.1) --- updated-dependencies: - dependency-name: tokio dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- client/network/Cargo.toml | 2 +- client/pov-recovery/Cargo.toml | 2 +- client/relay-chain-rpc-interface/Cargo.toml | 2 +- polkadot-parachain/Cargo.toml | 2 +- test/service/Cargo.toml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d3d90eb4e97..0a21837dc11 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12273,9 +12273,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.21.0" +version = "1.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89797afd69d206ccd11fb0ea560a44bbb87731d020670e79416d442919257d42" +checksum = "0020c875007ad96677dcc890298f4b942882c5d4eb7cc8f439fc3bf813dc9c95" dependencies = [ "autocfg", "bytes", diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index 13dc0947b38..fe285470033 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -33,7 +33,7 @@ cumulus-relay-chain-interface = { path = "../relay-chain-interface" } [dev-dependencies] portpicker = "0.1.1" -tokio = { version = "1.21.0", features = ["macros"] } +tokio = { version = "1.21.1", features = ["macros"] } url = "2.3.1" # Substrate diff --git a/client/pov-recovery/Cargo.toml b/client/pov-recovery/Cargo.toml index 89c5f4e2a2d..fd70e341f20 100644 --- a/client/pov-recovery/Cargo.toml +++ b/client/pov-recovery/Cargo.toml @@ -31,7 +31,7 @@ cumulus-primitives-core = { path = "../../primitives/core" } cumulus-relay-chain-interface = {path = "../relay-chain-interface"} [dev-dependencies] -tokio = { version = "1.21.0", features = ["macros"] } +tokio = { version = "1.21.1", features = ["macros"] } # Cumulus cumulus-test-service = { path = "../../test/service" } diff --git a/client/relay-chain-rpc-interface/Cargo.toml b/client/relay-chain-rpc-interface/Cargo.toml index e1c3b2bebf6..52ce2a0f3bd 100644 --- a/client/relay-chain-rpc-interface/Cargo.toml +++ b/client/relay-chain-rpc-interface/Cargo.toml @@ -18,7 +18,7 @@ sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = " sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-storage = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -tokio = { version = "1.21.0", features = ["sync"] } +tokio = { version = "1.21.1", features = ["sync"] } futures = "0.3.24" futures-timer = "3.0.2" diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index b1b7ecf9218..b6fa36373c3 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -94,7 +94,7 @@ substrate-build-script-utils = { git = "https://github.com/paritytech/substrate" assert_cmd = "2.0" nix = "0.25" tempfile = "3.3.0" -tokio = { version = "1.21.0", features = ["macros", "time", "parking_lot"] } +tokio = { version = "1.21.1", features = ["macros", "time", "parking_lot"] } wait-timeout = "0.2" # purge_chain_works works with rococo-local and needs to allow this polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "master", features = ["rococo-native"] } diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index ba581d6c874..60f155523a2 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -16,7 +16,7 @@ criterion = { version = "0.3.6", features = [ "async_tokio" ] } jsonrpsee = { version = "0.15.1", features = ["server"] } rand = "0.8.5" serde = { version = "1.0.144", features = ["derive"] } -tokio = { version = "1.21.0", features = ["macros"] } +tokio = { version = "1.21.1", features = ["macros"] } tracing = "0.1.36" url = "2.3.1" From bb87312a2e518bd27d9cde865112ef41a11fb75a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 10:24:12 +0200 Subject: [PATCH 057/148] Bump criterion from 0.3.6 to 0.4.0 (#1618) Bumps [criterion](https://github.com/bheisler/criterion.rs) from 0.3.6 to 0.4.0. - [Release notes](https://github.com/bheisler/criterion.rs/releases) - [Changelog](https://github.com/bheisler/criterion.rs/blob/master/CHANGELOG.md) - [Commits](https://github.com/bheisler/criterion.rs/compare/0.3.6...0.4.0) --- updated-dependencies: - dependency-name: criterion dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 131 ++++++++++++++++------------------------ test/service/Cargo.toml | 2 +- 2 files changed, 52 insertions(+), 81 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0a21837dc11..b5f1ca0b92b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,6 +88,12 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbf688625d06217d5b1bb0ea9d9c44a1635fd0ee3534466388d18203174f4d11" +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + [[package]] name = "ansi_term" version = "0.12.1" @@ -724,7 +730,6 @@ dependencies = [ "lazy_static", "memchr", "regex-automata", - "serde", ] [[package]] @@ -814,15 +819,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "cast" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a" -dependencies = [ - "rustc_version 0.4.0", -] - [[package]] name = "cast" version = "0.3.0" @@ -912,6 +908,33 @@ dependencies = [ "winapi", ] +[[package]] +name = "ciborium" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" + +[[package]] +name = "ciborium-ll" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" +dependencies = [ + "ciborium-io", + "half", +] + [[package]] name = "cid" version = "0.8.6" @@ -954,17 +977,6 @@ dependencies = [ "libloading 0.7.2", ] -[[package]] -name = "clap" -version = "2.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" -dependencies = [ - "bitflags", - "textwrap 0.11.0", - "unicode-width", -] - [[package]] name = "clap" version = "3.2.20" @@ -979,7 +991,7 @@ dependencies = [ "once_cell", "strsim", "termcolor", - "textwrap 0.15.0", + "textwrap", ] [[package]] @@ -1344,15 +1356,16 @@ dependencies = [ [[package]] name = "criterion" -version = "0.3.6" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b01d6de93b2b6c65e17c634a26653a29d107b3c98c607c765bf38d041531cd8f" +checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb" dependencies = [ + "anes", "atty", - "cast 0.3.0", - "clap 2.34.0", + "cast", + "ciborium", + "clap", "criterion-plot", - "csv", "futures", "itertools", "lazy_static", @@ -1362,7 +1375,6 @@ dependencies = [ "rayon", "regex", "serde", - "serde_cbor", "serde_derive", "serde_json", "tinytemplate", @@ -1372,11 +1384,11 @@ dependencies = [ [[package]] name = "criterion-plot" -version = "0.4.4" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00996de9f2f7559f7f4dc286073197f83e92256a59ed395f9aac01fe717da57" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" dependencies = [ - "cast 0.2.7", + "cast", "itertools", ] @@ -1482,28 +1494,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "csv" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" -dependencies = [ - "bstr", - "csv-core", - "itoa 0.4.8", - "ryu", - "serde", -] - -[[package]] -name = "csv-core" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" -dependencies = [ - "memchr", -] - [[package]] name = "ctor" version = "0.1.21" @@ -1538,7 +1528,7 @@ dependencies = [ name = "cumulus-client-cli" version = "0.1.0" dependencies = [ - "clap 3.2.20", + "clap", "parity-scale-codec", "sc-chain-spec", "sc-cli", @@ -2152,7 +2142,7 @@ name = "cumulus-test-service" version = "0.1.0" dependencies = [ "async-trait", - "clap 3.2.20", + "clap", "criterion", "cumulus-client-cli", "cumulus-client-consensus-common", @@ -2836,7 +2826,7 @@ source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da7 dependencies = [ "Inflector", "chrono", - "clap 3.2.20", + "clap", "comfy-table", "frame-benchmarking", "frame-support", @@ -6477,7 +6467,7 @@ dependencies = [ name = "parachain-template-node" version = "0.1.0" dependencies = [ - "clap 3.2.20", + "clap", "cumulus-client-cli", "cumulus-client-collator", "cumulus-client-consensus-aura", @@ -7091,7 +7081,7 @@ name = "polkadot-cli" version = "0.9.29" source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" dependencies = [ - "clap 3.2.20", + "clap", "frame-benchmarking-cli", "futures", "log", @@ -7748,7 +7738,7 @@ version = "0.9.230" dependencies = [ "assert_cmd", "async-trait", - "clap 3.2.20", + "clap", "collectives-polkadot-runtime", "contracts-rococo-runtime", "cumulus-client-cli", @@ -9443,7 +9433,7 @@ version = "0.10.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ "chrono", - "clap 3.2.20", + "clap", "fdlimit", "futures", "hex", @@ -10571,16 +10561,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde_cbor" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" -dependencies = [ - "half", - "serde", -] - [[package]] name = "serde_derive" version = "1.0.144" @@ -12133,15 +12113,6 @@ dependencies = [ "sp-runtime", ] -[[package]] -name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] - [[package]] name = "textwrap" version = "0.15.0" @@ -12554,7 +12525,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" dependencies = [ - "clap 3.2.20", + "clap", "frame-try-runtime", "jsonrpsee", "log", diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index 60f155523a2..95c56e26438 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -12,7 +12,7 @@ path = "src/main.rs" async-trait = "0.1.57" clap = { version = "3.2.20", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } -criterion = { version = "0.3.6", features = [ "async_tokio" ] } +criterion = { version = "0.4.0", features = [ "async_tokio" ] } jsonrpsee = { version = "0.15.1", features = ["server"] } rand = "0.8.5" serde = { version = "1.0.144", features = ["derive"] } From 0313a371acc10dcb04376c424cfeb58d3b0518e0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 10:27:55 +0200 Subject: [PATCH 058/148] Bump thiserror from 1.0.34 to 1.0.35 (#1622) Bumps [thiserror](https://github.com/dtolnay/thiserror) from 1.0.34 to 1.0.35. - [Release notes](https://github.com/dtolnay/thiserror/releases) - [Commits](https://github.com/dtolnay/thiserror/compare/1.0.34...1.0.35) --- updated-dependencies: - dependency-name: thiserror dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- client/relay-chain-interface/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b5f1ca0b92b..8649b859875 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12121,18 +12121,18 @@ checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" [[package]] name = "thiserror" -version = "1.0.34" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c1b05ca9d106ba7d2e31a9dab4a64e7be2cce415321966ea3132c49a656e252" +checksum = "c53f98874615aea268107765aa1ed8f6116782501d18e53d08b471733bea6c85" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.34" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8f2591983642de85c921015f3f070c665a197ed69e417af436115e3a1407487" +checksum = "f8b463991b4eab2d801e724172285ec4195c650e8ec79b149e6c2a8e6dd3f783" dependencies = [ "proc-macro2", "quote", diff --git a/client/relay-chain-interface/Cargo.toml b/client/relay-chain-interface/Cargo.toml index 288d9d52861..ae39b02ed9d 100644 --- a/client/relay-chain-interface/Cargo.toml +++ b/client/relay-chain-interface/Cargo.toml @@ -21,6 +21,6 @@ futures = "0.3.24" parking_lot = "0.12.1" derive_more = "0.99.2" async-trait = "0.1.57" -thiserror = "1.0.34" +thiserror = "1.0.35" jsonrpsee-core = "0.15.1" parity-scale-codec = "3.1.5" From a913719715edf408d9cf6f49922349cc073dfde2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 18:10:40 +0200 Subject: [PATCH 059/148] Bump parity-scale-codec from 3.1.5 to 3.2.1 (#1626) Bumps [parity-scale-codec](https://github.com/paritytech/parity-scale-codec) from 3.1.5 to 3.2.1. - [Release notes](https://github.com/paritytech/parity-scale-codec/releases) - [Changelog](https://github.com/paritytech/parity-scale-codec/blob/master/CHANGELOG.md) - [Commits](https://github.com/paritytech/parity-scale-codec/compare/parity-scale-codec-3.1.5...parity-scale-codec-3.2.1) --- updated-dependencies: - dependency-name: parity-scale-codec dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- client/relay-chain-interface/Cargo.toml | 2 +- client/relay-chain-rpc-interface/Cargo.toml | 2 +- pallets/session-benchmarking/Cargo.toml | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8649b859875..5cb7e9c98dc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -749,9 +749,9 @@ checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" [[package]] name = "byte-slice-cast" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d30c751592b77c499e7bce34d99d67c2c11bdc0574e9a488ddade14150a4698" +checksum = "87c5fdd0166095e1d463fc6cc01aa8ce547ad77a4e84d42eb6762b084e28067e" [[package]] name = "byte-tools" @@ -6637,9 +6637,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.1.5" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9182e4a71cae089267ab03e67c99368db7cd877baf50f931e5d6d4b71e195ac0" +checksum = "366e44391a8af4cfd6002ef6ba072bae071a96aafca98d7d448a34c5dca38b6a" dependencies = [ "arrayvec 0.7.2", "bitvec", diff --git a/client/relay-chain-interface/Cargo.toml b/client/relay-chain-interface/Cargo.toml index ae39b02ed9d..c84a4265d0c 100644 --- a/client/relay-chain-interface/Cargo.toml +++ b/client/relay-chain-interface/Cargo.toml @@ -23,4 +23,4 @@ derive_more = "0.99.2" async-trait = "0.1.57" thiserror = "1.0.35" jsonrpsee-core = "0.15.1" -parity-scale-codec = "3.1.5" +parity-scale-codec = "3.2.1" diff --git a/client/relay-chain-rpc-interface/Cargo.toml b/client/relay-chain-rpc-interface/Cargo.toml index 52ce2a0f3bd..188f709baeb 100644 --- a/client/relay-chain-rpc-interface/Cargo.toml +++ b/client/relay-chain-rpc-interface/Cargo.toml @@ -22,7 +22,7 @@ tokio = { version = "1.21.1", features = ["sync"] } futures = "0.3.24" futures-timer = "3.0.2" -parity-scale-codec = "3.1.5" +parity-scale-codec = "3.2.1" parking_lot = "0.12.1" jsonrpsee = { version = "0.15.1", features = ["ws-client"] } tracing = "0.1.36" diff --git a/pallets/session-benchmarking/Cargo.toml b/pallets/session-benchmarking/Cargo.toml index a9e87247148..e30b460161f 100644 --- a/pallets/session-benchmarking/Cargo.toml +++ b/pallets/session-benchmarking/Cargo.toml @@ -13,7 +13,7 @@ readme = "README.md" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -parity-scale-codec = { version = "3.1.5", default-features = false } +parity-scale-codec = { version = "3.2.1", default-features = false } sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } From 99c8f61c9169296a60d1d3217df56dafd8d8b612 Mon Sep 17 00:00:00 2001 From: Squirrel Date: Fri, 16 Sep 2022 11:28:15 +0100 Subject: [PATCH 060/148] Don't panic. (#1629) --- parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs | 2 +- parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs index e52a0468098..79fbd0812bb 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs @@ -57,7 +57,7 @@ impl XcmWeightInfo for StatemineXcmWeight { } // Currently there is no trusted reserve fn reserve_asset_deposited(_assets: &MultiAssets) -> XCMWeight { - unimplemented!() + u64::MAX } fn receive_teleported_asset(assets: &MultiAssets) -> XCMWeight { assets.weigh_multi_assets(XcmFungibleWeight::::receive_teleported_asset()) diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs index ad9123676b8..b51f8b207a5 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs @@ -57,7 +57,7 @@ impl XcmWeightInfo for StatemintXcmWeight { } // Currently there is no trusted reserve fn reserve_asset_deposited(_assets: &MultiAssets) -> XCMWeight { - unimplemented!() + u64::MAX } fn receive_teleported_asset(assets: &MultiAssets) -> XCMWeight { assets.weigh_multi_assets(XcmFungibleWeight::::receive_teleported_asset()) From db70676ffad06aff0f8d7c29eb6d7ad3c663973a Mon Sep 17 00:00:00 2001 From: Squirrel Date: Fri, 16 Sep 2022 13:38:54 +0100 Subject: [PATCH 061/148] Westmint don't panic. (#1631) --- parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs index 52f643d8f5e..018f8f7d9f7 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs @@ -57,7 +57,7 @@ impl XcmWeightInfo for WestmintXcmWeight { } // Currently there is no trusted reserve fn reserve_asset_deposited(_assets: &MultiAssets) -> XCMWeight { - unimplemented!() + u64::MAX } fn receive_teleported_asset(assets: &MultiAssets) -> XCMWeight { assets.weigh_multi_assets(XcmFungibleWeight::::receive_teleported_asset()) From 331e85e3199f521dc4bd16025865f80de528c9ca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Sep 2022 21:26:27 +0200 Subject: [PATCH 062/148] Bump clap from 3.2.20 to 3.2.21 (#1621) Bumps [clap](https://github.com/clap-rs/clap) from 3.2.20 to 3.2.21. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/v3.2.21/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/v3.2.20...v3.2.21) --- updated-dependencies: - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- client/cli/Cargo.toml | 2 +- parachain-template/node/Cargo.toml | 2 +- polkadot-parachain/Cargo.toml | 2 +- test/service/Cargo.toml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5cb7e9c98dc..15e26977867 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -979,9 +979,9 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.20" +version = "3.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b71c3ce99b7611011217b366d923f1d0a7e07a92bb2dbf1e84508c673ca3bd" +checksum = "1ed5341b2301a26ab80be5cbdced622e80ed808483c52e45e3310a877d3b37d7" dependencies = [ "atty", "bitflags", diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index 1f74ca3311f..66085dac4e5 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2021" [dependencies] -clap = { version = "3.2.20", features = ["derive", "deprecated"] } +clap = { version = "3.2.21", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } url = "2.3.1" diff --git a/parachain-template/node/Cargo.toml b/parachain-template/node/Cargo.toml index 6f6a9fac71d..ea2f795654e 100644 --- a/parachain-template/node/Cargo.toml +++ b/parachain-template/node/Cargo.toml @@ -10,7 +10,7 @@ edition = "2021" build = "build.rs" [dependencies] -clap = { version = "3.2.20", features = ["derive"] } +clap = { version = "3.2.21", features = ["derive"] } derive_more = "0.99.2" log = "0.4.17" codec = { package = "parity-scale-codec", version = "3.0.0" } diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index b6fa36373c3..d3c4fe3ae68 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -8,7 +8,7 @@ description = "Runs a polkadot parachain node which could be a collator." [dependencies] async-trait = "0.1.57" -clap = { version = "3.2.20", features = ["derive", "deprecated"] } +clap = { version = "3.2.21", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } futures = "0.3.24" hex-literal = "0.3.4" diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index 95c56e26438..e9d40370f1a 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -10,7 +10,7 @@ path = "src/main.rs" [dependencies] async-trait = "0.1.57" -clap = { version = "3.2.20", features = ["derive", "deprecated"] } +clap = { version = "3.2.21", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } criterion = { version = "0.4.0", features = [ "async_tokio" ] } jsonrpsee = { version = "0.15.1", features = ["server"] } From 1df48c70db5bf4540ccfee746d42f5067bf17687 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Sep 2022 22:52:51 +0200 Subject: [PATCH 063/148] Bump scale-info from 2.1.2 to 2.2.0 (#1627) Bumps [scale-info](https://github.com/paritytech/scale-info) from 2.1.2 to 2.2.0. - [Release notes](https://github.com/paritytech/scale-info/releases) - [Changelog](https://github.com/paritytech/scale-info/blob/master/CHANGELOG.md) - [Commits](https://github.com/paritytech/scale-info/commits) --- updated-dependencies: - dependency-name: scale-info dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- pallets/aura-ext/Cargo.toml | 2 +- pallets/collator-selection/Cargo.toml | 2 +- pallets/dmp-queue/Cargo.toml | 2 +- pallets/parachain-system/Cargo.toml | 2 +- pallets/xcm/Cargo.toml | 2 +- pallets/xcmp-queue/Cargo.toml | 2 +- parachain-template/runtime/Cargo.toml | 2 +- parachains/common/Cargo.toml | 2 +- parachains/pallets/parachain-info/Cargo.toml | 2 +- parachains/pallets/ping/Cargo.toml | 2 +- parachains/runtimes/assets/statemine/Cargo.toml | 2 +- parachains/runtimes/assets/statemint/Cargo.toml | 2 +- parachains/runtimes/assets/westmint/Cargo.toml | 2 +- .../runtimes/collectives/collectives-polkadot/Cargo.toml | 2 +- parachains/runtimes/contracts/contracts-rococo/Cargo.toml | 2 +- parachains/runtimes/starters/seedling/Cargo.toml | 2 +- parachains/runtimes/starters/shell/Cargo.toml | 2 +- parachains/runtimes/testing/penpal/Cargo.toml | 2 +- parachains/runtimes/testing/rococo-parachain/Cargo.toml | 2 +- primitives/parachain-inherent/Cargo.toml | 2 +- test/runtime/Cargo.toml | 2 +- 22 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 15e26977867..39565504ee9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10356,9 +10356,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c46be926081c9f4dd5dd9b6f1d3e3229f2360bc6502dd8836f84a93b7c75e99a" +checksum = "333af15b02563b8182cd863f925bd31ef8fa86a0e095d30c091956057d436153" dependencies = [ "bitvec", "cfg-if 1.0.0", @@ -10370,9 +10370,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e334bb10a245e28e5fd755cabcafd96cfcd167c99ae63a46924ca8d8703a3c" +checksum = "53f56acbd0743d29ffa08f911ab5397def774ad01bab3786804cf6ee057fb5e1" dependencies = [ "proc-macro-crate", "proc-macro2", diff --git a/pallets/aura-ext/Cargo.toml b/pallets/aura-ext/Cargo.toml index 593ad831387..22874e3edb2 100644 --- a/pallets/aura-ext/Cargo.toml +++ b/pallets/aura-ext/Cargo.toml @@ -7,7 +7,7 @@ description = "AURA consensus extension pallet for parachains" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } serde = { version = "1.0.144", optional = true, features = ["derive"] } # Substrate diff --git a/pallets/collator-selection/Cargo.toml b/pallets/collator-selection/Cargo.toml index 4ed02a07c51..81f1d0f97cf 100644 --- a/pallets/collator-selection/Cargo.toml +++ b/pallets/collator-selection/Cargo.toml @@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] log = { version = "0.4.17", default-features = false } codec = { default-features = false, features = ["derive"], package = "parity-scale-codec", version = "3.0.0" } rand = { version = "0.8.5", features = ["std_rng"], default-features = false } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } serde = { version = "1.0.144", default-features = false } sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/pallets/dmp-queue/Cargo.toml b/pallets/dmp-queue/Cargo.toml index 9c199f3d9f4..b4f1be08ba0 100644 --- a/pallets/dmp-queue/Cargo.toml +++ b/pallets/dmp-queue/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ], default-features = false } log = { version = "0.4.17", default-features = false } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/pallets/parachain-system/Cargo.toml b/pallets/parachain-system/Cargo.toml index 15f4be3dabe..4fa139422ac 100644 --- a/pallets/parachain-system/Cargo.toml +++ b/pallets/parachain-system/Cargo.toml @@ -11,7 +11,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = environmental = { version = "1.1.2", default-features = false } impl-trait-for-tuples = "0.2.1" log = { version = "0.4.17", default-features = false } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } serde = { version = "1.0.144", optional = true, features = ["derive"] } # Substrate diff --git a/pallets/xcm/Cargo.toml b/pallets/xcm/Cargo.toml index 16f57d81abf..36a8e433f2f 100644 --- a/pallets/xcm/Cargo.toml +++ b/pallets/xcm/Cargo.toml @@ -6,7 +6,7 @@ version = "0.1.0" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } serde = { version = "1.0.144", optional = true, features = ["derive"] } sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/pallets/xcmp-queue/Cargo.toml b/pallets/xcmp-queue/Cargo.toml index 0d4f83757ac..8c7aef6a354 100644 --- a/pallets/xcmp-queue/Cargo.toml +++ b/pallets/xcmp-queue/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ], default-features = false } log = { version = "0.4.17", default-features = false } rand_chacha = { version = "0.3.0", default-features = false } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/parachain-template/runtime/Cargo.toml b/parachain-template/runtime/Cargo.toml index 7f12eacad12..1662313ab75 100644 --- a/parachain-template/runtime/Cargo.toml +++ b/parachain-template/runtime/Cargo.toml @@ -18,7 +18,7 @@ substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", bran codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } serde = { version = "1.0.144", optional = true, features = ["derive"] } smallvec = "1.9.0" diff --git a/parachains/common/Cargo.toml b/parachains/common/Cargo.toml index dd70f4436aa..041f02a73d6 100644 --- a/parachains/common/Cargo.toml +++ b/parachains/common/Cargo.toml @@ -10,7 +10,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", features = ["derive"], default-features = false } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate frame-executive = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/parachains/pallets/parachain-info/Cargo.toml b/parachains/pallets/parachain-info/Cargo.toml index 0fa54dcc721..7cccb7db5e9 100644 --- a/parachains/pallets/parachain-info/Cargo.toml +++ b/parachains/pallets/parachain-info/Cargo.toml @@ -6,7 +6,7 @@ version = "0.1.0" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } serde = { version = "1.0.144", optional = true, features = ["derive"] } frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/parachains/pallets/ping/Cargo.toml b/parachains/pallets/ping/Cargo.toml index 4e97fcb6b8b..00c17d65675 100644 --- a/parachains/pallets/ping/Cargo.toml +++ b/parachains/pallets/ping/Cargo.toml @@ -6,7 +6,7 @@ version = "0.1.0" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } serde = { version = "1.0.144", optional = true, features = ["derive"] } sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/parachains/runtimes/assets/statemine/Cargo.toml b/parachains/runtimes/assets/statemine/Cargo.toml index 90a78d670cf..519cb073906 100644 --- a/parachains/runtimes/assets/statemine/Cargo.toml +++ b/parachains/runtimes/assets/statemine/Cargo.toml @@ -9,7 +9,7 @@ description = "Kusama variant of Statemint parachain runtime" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } serde = { version = "1.0.144", optional = true, features = ["derive"] } smallvec = "1.9.0" diff --git a/parachains/runtimes/assets/statemint/Cargo.toml b/parachains/runtimes/assets/statemint/Cargo.toml index e59071152ae..9b5e58c86ad 100644 --- a/parachains/runtimes/assets/statemint/Cargo.toml +++ b/parachains/runtimes/assets/statemint/Cargo.toml @@ -10,7 +10,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } serde = { version = "1.0.144", optional = true, features = ["derive"] } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } smallvec = "1.9.0" # Substrate diff --git a/parachains/runtimes/assets/westmint/Cargo.toml b/parachains/runtimes/assets/westmint/Cargo.toml index a127b7bfbce..0add127f408 100644 --- a/parachains/runtimes/assets/westmint/Cargo.toml +++ b/parachains/runtimes/assets/westmint/Cargo.toml @@ -9,7 +9,7 @@ description = "Westend variant of Statemint parachain runtime" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } serde = { version = "1.0.144", optional = true, features = ["derive"] } smallvec = "1.9.0" diff --git a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml index 2e113d7ea1e..c6e70054770 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml +++ b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml @@ -10,7 +10,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } serde = { version = "1.0.144", optional = true, features = ["derive"] } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } smallvec = "1.6.1" # Substrate diff --git a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml index 4a811f46406..5c277c2b0ec 100644 --- a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml +++ b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml @@ -14,7 +14,7 @@ substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", bran codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } serde = { version = "1.0.144", optional = true, features = ["derive"] } smallvec = "1.9.0" diff --git a/parachains/runtimes/starters/seedling/Cargo.toml b/parachains/runtimes/starters/seedling/Cargo.toml index 430ef29a1f2..952294f8c3b 100644 --- a/parachains/runtimes/starters/seedling/Cargo.toml +++ b/parachains/runtimes/starters/seedling/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } log = { version = "0.4.14", default-features = false } -scale-info = { version = "2.0.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } serde = { version = "1.0.144", optional = true, features = ["derive"] } # Substrate diff --git a/parachains/runtimes/starters/shell/Cargo.toml b/parachains/runtimes/starters/shell/Cargo.toml index 6a351cb5c26..87ebd609ea6 100644 --- a/parachains/runtimes/starters/shell/Cargo.toml +++ b/parachains/runtimes/starters/shell/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } log = { version = "0.4.17", default-features = false } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } serde = { version = "1.0.144", optional = true, features = ["derive"] } # Substrate diff --git a/parachains/runtimes/testing/penpal/Cargo.toml b/parachains/runtimes/testing/penpal/Cargo.toml index 399f616c1ad..b38addb9b3d 100644 --- a/parachains/runtimes/testing/penpal/Cargo.toml +++ b/parachains/runtimes/testing/penpal/Cargo.toml @@ -18,7 +18,7 @@ substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", bran codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.16", default-features = false } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } serde = { version = "1.0.144", optional = true, features = ["derive"] } smallvec = "1.9.0" diff --git a/parachains/runtimes/testing/rococo-parachain/Cargo.toml b/parachains/runtimes/testing/rococo-parachain/Cargo.toml index 2904940f34b..ad77957c46e 100644 --- a/parachains/runtimes/testing/rococo-parachain/Cargo.toml +++ b/parachains/runtimes/testing/rococo-parachain/Cargo.toml @@ -8,7 +8,7 @@ description = "Simple runtime used by the rococo parachain(s)" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } log = { version = "0.4.17", default-features = false } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } serde = { version = "1.0.144", optional = true, features = ["derive"] } # Substrate diff --git a/primitives/parachain-inherent/Cargo.toml b/primitives/parachain-inherent/Cargo.toml index e3fc81dec09..ebe971a116d 100644 --- a/primitives/parachain-inherent/Cargo.toml +++ b/primitives/parachain-inherent/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] async-trait = { version = "0.1.57", optional = true } codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "derive" ] } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } tracing = { version = "0.1.36", optional = true } # Substrate diff --git a/test/runtime/Cargo.toml b/test/runtime/Cargo.toml index 42b78f935a3..6842412e186 100644 --- a/test/runtime/Cargo.toml +++ b/test/runtime/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } serde = { version = "1.0.144", optional = true, features = ["derive"] } # Substrate From 06f852ad557b36ef69d2e36d2f6570bb28600047 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Sep 2022 07:40:04 +0000 Subject: [PATCH 064/148] Bump clap from 3.2.21 to 3.2.22 (#1632) Bumps [clap](https://github.com/clap-rs/clap) from 3.2.21 to 3.2.22. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/v3.2.22/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/v3.2.21...v3.2.22) --- updated-dependencies: - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- client/cli/Cargo.toml | 2 +- parachain-template/node/Cargo.toml | 2 +- polkadot-parachain/Cargo.toml | 2 +- test/service/Cargo.toml | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 39565504ee9..be8ad68d4f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -979,9 +979,9 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.21" +version = "3.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ed5341b2301a26ab80be5cbdced622e80ed808483c52e45e3310a877d3b37d7" +checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750" dependencies = [ "atty", "bitflags", @@ -12115,9 +12115,9 @@ dependencies = [ [[package]] name = "textwrap" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" +checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16" [[package]] name = "thiserror" diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index 66085dac4e5..4f20e564ddb 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2021" [dependencies] -clap = { version = "3.2.21", features = ["derive", "deprecated"] } +clap = { version = "3.2.22", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } url = "2.3.1" diff --git a/parachain-template/node/Cargo.toml b/parachain-template/node/Cargo.toml index ea2f795654e..4bfda52d30e 100644 --- a/parachain-template/node/Cargo.toml +++ b/parachain-template/node/Cargo.toml @@ -10,7 +10,7 @@ edition = "2021" build = "build.rs" [dependencies] -clap = { version = "3.2.21", features = ["derive"] } +clap = { version = "3.2.22", features = ["derive"] } derive_more = "0.99.2" log = "0.4.17" codec = { package = "parity-scale-codec", version = "3.0.0" } diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index d3c4fe3ae68..2febe33aea4 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -8,7 +8,7 @@ description = "Runs a polkadot parachain node which could be a collator." [dependencies] async-trait = "0.1.57" -clap = { version = "3.2.21", features = ["derive", "deprecated"] } +clap = { version = "3.2.22", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } futures = "0.3.24" hex-literal = "0.3.4" diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index e9d40370f1a..1a652e96ab5 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -10,7 +10,7 @@ path = "src/main.rs" [dependencies] async-trait = "0.1.57" -clap = { version = "3.2.21", features = ["derive", "deprecated"] } +clap = { version = "3.2.22", features = ["derive", "deprecated"] } codec = { package = "parity-scale-codec", version = "3.0.0" } criterion = { version = "0.4.0", features = [ "async_tokio" ] } jsonrpsee = { version = "0.15.1", features = ["server"] } From 7b7988e5966dd98400ea46b6910f3711cd213ee3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Sep 2022 07:47:40 +0000 Subject: [PATCH 065/148] Bump lz4-sys from 1.9.2 to 1.9.4 (#1588) * Bump lz4-sys from 1.9.2 to 1.9.4 Bumps [lz4-sys](https://github.com/10xGenomics/lz4-rs) from 1.9.2 to 1.9.4. - [Release notes](https://github.com/10xGenomics/lz4-rs/releases) - [Changelog](https://github.com/10XGenomics/lz4-rs/blob/master/CHANGELOG.md) - [Commits](https://github.com/10xGenomics/lz4-rs/commits) --- updated-dependencies: - dependency-name: lz4-sys dependency-type: indirect ... Signed-off-by: dependabot[bot] * bump lz4 to match lz4-sys Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sebastian Kunert --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index be8ad68d4f7..76df82bdba0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4780,9 +4780,9 @@ dependencies = [ [[package]] name = "lz4" -version = "1.23.2" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac20ed6991e01bf6a2e68cc73df2b389707403662a8ba89f68511fb340f724c" +checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" dependencies = [ "libc", "lz4-sys", @@ -4790,9 +4790,9 @@ dependencies = [ [[package]] name = "lz4-sys" -version = "1.9.2" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca79aa95d8b3226213ad454d328369853be3a1382d89532a854f4d69640acae" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" dependencies = [ "cc", "libc", From ebab061e88783308135d1f3ffaf93e2a8e9a7c47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Thei=C3=9Fen?= Date: Mon, 19 Sep 2022 13:22:11 +0200 Subject: [PATCH 066/148] Companion: contracts: Use `WeakBoundedVec` for instrumented code (#1595) * Remove `RelaxedMaxCodeLen` * update lockfile for {"substrate", "polkadot"} Co-authored-by: parity-processbot <> --- Cargo.lock | 516 +++++++++--------- .../contracts-rococo/src/contracts.rs | 1 - 2 files changed, 258 insertions(+), 259 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 76df82bdba0..3188666aba8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -463,7 +463,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "beefy-primitives", @@ -499,7 +499,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -519,7 +519,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "beefy-primitives", "sp-api", @@ -528,7 +528,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "parity-scale-codec", "scale-info", @@ -593,9 +593,9 @@ dependencies = [ [[package]] name = "blake2" -version = "0.10.2" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94ba84325db59637ffc528bbe8c7f86c02c57cff5c0e2b9b00f9a851f42f309" +checksum = "b9cf849ee05b2ee5fba5e36f97ff8ec2533916700fc0758d40d92136a42f3388" dependencies = [ "digest 0.10.3", ] @@ -2537,9 +2537,9 @@ dependencies = [ [[package]] name = "enumn" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052bc8773a98bd051ff37db74a8a25f00e6bfa2cbd03373390c72e9f7afbf344" +checksum = "038b1afa59052df211f9efd58f8b1d84c242935ede1c3dbaed26b018a9e06ae2" dependencies = [ "proc-macro2", "quote", @@ -2782,7 +2782,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "parity-scale-codec", ] @@ -2799,7 +2799,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support", "frame-system", @@ -2822,7 +2822,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "Inflector", "chrono", @@ -2873,7 +2873,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2884,7 +2884,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2900,7 +2900,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support", "frame-system", @@ -2929,7 +2929,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "bitflags", "frame-metadata", @@ -2961,7 +2961,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "Inflector", "cfg-expr", @@ -2975,7 +2975,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2987,7 +2987,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "proc-macro2", "quote", @@ -2997,7 +2997,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support", "log", @@ -3015,7 +3015,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -3030,7 +3030,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "parity-scale-codec", "sp-api", @@ -3039,7 +3039,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support", "parity-scale-codec", @@ -3918,7 +3918,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "beefy-primitives", "bitvec", @@ -4011,7 +4011,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "frame-support", "polkadot-primitives", @@ -5350,7 +5350,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "async-trait", "dyn-clonable", @@ -5366,7 +5366,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "expander 0.0.6", "itertools", @@ -5404,7 +5404,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -5425,7 +5425,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support", "frame-system", @@ -5442,7 +5442,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -5456,7 +5456,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support", "frame-system", @@ -5472,7 +5472,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support", "frame-system", @@ -5488,7 +5488,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support", "frame-system", @@ -5503,7 +5503,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -5527,7 +5527,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5547,7 +5547,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -5562,7 +5562,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "beefy-primitives", "frame-support", @@ -5578,7 +5578,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -5601,7 +5601,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -5619,7 +5619,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -5664,7 +5664,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -5681,7 +5681,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "bitflags", "frame-benchmarking", @@ -5709,7 +5709,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "bitflags", "parity-scale-codec", @@ -5724,7 +5724,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "proc-macro2", "quote", @@ -5734,7 +5734,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5751,7 +5751,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5764,7 +5764,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -5780,7 +5780,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5804,7 +5804,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5817,7 +5817,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -5835,7 +5835,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -5850,7 +5850,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -5873,7 +5873,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5889,7 +5889,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -5909,7 +5909,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -5926,7 +5926,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -5943,7 +5943,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5961,7 +5961,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5976,7 +5976,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -5991,7 +5991,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support", "frame-system", @@ -6008,7 +6008,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6028,7 +6028,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "parity-scale-codec", "sp-api", @@ -6038,7 +6038,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support", "frame-system", @@ -6055,7 +6055,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6078,7 +6078,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -6094,7 +6094,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -6109,7 +6109,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support", "frame-system", @@ -6123,7 +6123,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -6138,7 +6138,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -6154,7 +6154,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support", "frame-system", @@ -6175,7 +6175,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -6191,7 +6191,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support", "frame-system", @@ -6205,7 +6205,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6228,7 +6228,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6239,7 +6239,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "log", "sp-arithmetic", @@ -6248,7 +6248,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support", "frame-system", @@ -6277,7 +6277,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -6295,7 +6295,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -6314,7 +6314,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-support", "frame-system", @@ -6330,7 +6330,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6345,7 +6345,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6356,7 +6356,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -6373,7 +6373,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -6388,7 +6388,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -6404,7 +6404,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-benchmarking", "frame-support", @@ -6419,7 +6419,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "frame-support", "frame-system", @@ -6437,7 +6437,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "frame-benchmarking", "frame-support", @@ -7006,7 +7006,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7021,7 +7021,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7035,7 +7035,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "derive_more", "fatality", @@ -7058,7 +7058,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "fatality", "futures", @@ -7079,7 +7079,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7105,7 +7105,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7146,7 +7146,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "always-assert", "fatality", @@ -7167,7 +7167,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7180,7 +7180,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "derive_more", "fatality", @@ -7203,7 +7203,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7217,7 +7217,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "futures", "futures-timer", @@ -7237,7 +7237,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "always-assert", "async-trait", @@ -7261,7 +7261,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "futures", "parity-scale-codec", @@ -7279,7 +7279,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "bitvec", "derive_more", @@ -7308,7 +7308,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "bitvec", "futures", @@ -7328,7 +7328,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "bitvec", "fatality", @@ -7347,7 +7347,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7362,7 +7362,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "async-trait", "futures", @@ -7380,7 +7380,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7395,7 +7395,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "futures", "futures-timer", @@ -7412,7 +7412,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "fatality", "futures", @@ -7431,7 +7431,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "async-trait", "futures", @@ -7448,7 +7448,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "bitvec", "fatality", @@ -7466,7 +7466,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "always-assert", "assert_matches", @@ -7477,7 +7477,7 @@ dependencies = [ "parity-scale-codec", "pin-project", "polkadot-core-primitives", - "polkadot-node-subsystem-util", + "polkadot-node-metrics", "polkadot-parachain 0.9.29", "rand 0.8.5", "rayon", @@ -7498,7 +7498,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "futures", "polkadot-node-primitives", @@ -7514,7 +7514,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "futures", "memory-lru", @@ -7530,7 +7530,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "async-std", "lazy_static", @@ -7548,7 +7548,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "bs58", "futures", @@ -7567,7 +7567,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "async-trait", "derive_more", @@ -7589,7 +7589,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "bounded-vec", "futures", @@ -7611,7 +7611,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7621,7 +7621,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "async-trait", "futures", @@ -7639,7 +7639,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "async-trait", "derive_more", @@ -7662,7 +7662,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "async-trait", "derive_more", @@ -7695,7 +7695,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "async-trait", "futures", @@ -7718,7 +7718,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "derive_more", "frame-support", @@ -7818,7 +7818,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7833,7 +7833,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "bitvec", "frame-system", @@ -7863,7 +7863,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7895,7 +7895,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "beefy-primitives", "bitvec", @@ -7983,7 +7983,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "beefy-primitives", "bitvec", @@ -8030,7 +8030,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "frame-support", "polkadot-primitives", @@ -8042,7 +8042,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "bs58", "parity-scale-codec", @@ -8054,7 +8054,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "bitflags", "bitvec", @@ -8097,7 +8097,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "async-trait", "beefy-gadget", @@ -8202,7 +8202,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8223,7 +8223,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8233,7 +8233,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8258,7 +8258,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "beefy-primitives", "bitvec", @@ -8319,7 +8319,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "frame-benchmarking", "frame-system", @@ -8464,7 +8464,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8949,7 +8949,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9071,7 +9071,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9155,7 +9155,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "frame-support", "polkadot-primitives", @@ -9325,7 +9325,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "log", "sp-core", @@ -9336,7 +9336,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "futures", @@ -9363,7 +9363,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "futures", "futures-timer", @@ -9386,7 +9386,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9402,7 +9402,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9419,7 +9419,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9430,7 +9430,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "chrono", "clap", @@ -9469,7 +9469,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "fnv", "futures", @@ -9497,7 +9497,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "hash-db", "kvdb", @@ -9522,7 +9522,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "futures", @@ -9546,7 +9546,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "futures", @@ -9575,7 +9575,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "fork-tree", @@ -9617,7 +9617,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "futures", "jsonrpsee", @@ -9639,7 +9639,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9652,7 +9652,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "futures", @@ -9677,7 +9677,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9704,7 +9704,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "environmental", "parity-scale-codec", @@ -9720,7 +9720,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "log", "parity-scale-codec", @@ -9735,7 +9735,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9755,7 +9755,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "ahash", "async-trait", @@ -9796,7 +9796,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "finality-grandpa", "futures", @@ -9817,7 +9817,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "ansi_term", "futures", @@ -9834,7 +9834,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "hex", @@ -9849,7 +9849,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "asynchronous-codec", @@ -9896,7 +9896,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "cid", "futures", @@ -9916,7 +9916,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "bitflags", @@ -9939,7 +9939,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "ahash", "futures", @@ -9957,7 +9957,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "futures", "hex", @@ -9978,7 +9978,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "fork-tree", "futures", @@ -10006,7 +10006,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "bytes", "fnv", @@ -10036,7 +10036,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "futures", "libp2p", @@ -10049,7 +10049,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10058,7 +10058,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "futures", "hash-db", @@ -10088,7 +10088,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "futures", "jsonrpsee", @@ -10111,7 +10111,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "futures", "jsonrpsee", @@ -10124,7 +10124,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "directories", @@ -10193,7 +10193,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "log", "parity-scale-codec", @@ -10207,7 +10207,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10226,7 +10226,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "futures", "libc", @@ -10245,7 +10245,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "chrono", "futures", @@ -10263,7 +10263,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "ansi_term", "atty", @@ -10294,7 +10294,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10305,7 +10305,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "futures", "futures-timer", @@ -10331,7 +10331,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "futures", "log", @@ -10344,7 +10344,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "futures", "futures-timer", @@ -10782,7 +10782,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "enumn", "parity-scale-codec", @@ -10858,7 +10858,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "hash-db", "log", @@ -10876,7 +10876,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "blake2", "proc-macro-crate", @@ -10888,7 +10888,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "parity-scale-codec", "scale-info", @@ -10901,7 +10901,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "integer-sqrt", "num-traits", @@ -10916,7 +10916,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "parity-scale-codec", "scale-info", @@ -10929,7 +10929,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "parity-scale-codec", @@ -10941,7 +10941,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "parity-scale-codec", "sp-api", @@ -10953,7 +10953,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "futures", "log", @@ -10971,7 +10971,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "futures", @@ -10990,7 +10990,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "parity-scale-codec", @@ -11008,7 +11008,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "merlin", @@ -11031,7 +11031,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "parity-scale-codec", "scale-info", @@ -11045,7 +11045,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "parity-scale-codec", "scale-info", @@ -11058,11 +11058,11 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "base58", "bitflags", - "blake2-rfc", + "blake2", "byteorder", "dyn-clonable", "ed25519-zebra", @@ -11104,7 +11104,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "blake2", "byteorder", @@ -11118,7 +11118,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "proc-macro2", "quote", @@ -11129,7 +11129,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11138,7 +11138,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "proc-macro2", "quote", @@ -11148,7 +11148,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "environmental", "parity-scale-codec", @@ -11159,7 +11159,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "finality-grandpa", "log", @@ -11177,7 +11177,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11191,7 +11191,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "bytes", "futures", @@ -11217,7 +11217,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "lazy_static", "sp-core", @@ -11228,7 +11228,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "futures", @@ -11245,7 +11245,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "thiserror", "zstd", @@ -11254,7 +11254,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "log", "parity-scale-codec", @@ -11269,7 +11269,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "parity-scale-codec", "scale-info", @@ -11283,7 +11283,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "sp-api", "sp-core", @@ -11293,7 +11293,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "backtrace", "lazy_static", @@ -11303,7 +11303,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "rustc-hash", "serde", @@ -11313,7 +11313,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "either", "hash256-std-hasher", @@ -11336,7 +11336,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11354,7 +11354,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "Inflector", "proc-macro-crate", @@ -11366,7 +11366,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "log", "parity-scale-codec", @@ -11380,7 +11380,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "serde", "serde_json", @@ -11389,7 +11389,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "parity-scale-codec", "scale-info", @@ -11403,7 +11403,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "parity-scale-codec", "scale-info", @@ -11414,7 +11414,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "hash-db", "log", @@ -11436,12 +11436,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11454,7 +11454,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "log", "sp-core", @@ -11467,7 +11467,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "futures-timer", @@ -11483,7 +11483,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "parity-scale-codec", "sp-std", @@ -11495,7 +11495,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "sp-api", "sp-runtime", @@ -11504,7 +11504,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "log", @@ -11520,7 +11520,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "ahash", "hash-db", @@ -11543,7 +11543,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11560,7 +11560,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11571,7 +11571,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "impl-trait-for-tuples", "log", @@ -11584,7 +11584,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11886,7 +11886,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "platforms", ] @@ -11894,7 +11894,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11915,7 +11915,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "futures-util", "hyper", @@ -11928,7 +11928,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "jsonrpsee", "log", @@ -11949,7 +11949,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "async-trait", "futures", @@ -11975,7 +11975,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11985,7 +11985,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11996,7 +11996,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "ansi_term", "build-helper", @@ -12104,7 +12104,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "frame-support", "polkadot-primitives", @@ -12385,7 +12385,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12396,7 +12396,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12523,7 +12523,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#dc22e48e1da70b84fb7b8a1ffc2076cf1b6e1d99" +source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" dependencies = [ "clap", "frame-try-runtime", @@ -12836,9 +12836,9 @@ dependencies = [ [[package]] name = "wasm-instrument" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bca81f5279342b38b17d9acbf007a46ddeb73144e2bd5f0a21bfa9fc5d4ab3e" +checksum = "aa1dafb3e60065305741e83db35c6c2584bb3725b692b5b66148a38d72ace6cd" dependencies = [ "parity-wasm 0.45.0", ] @@ -13111,7 +13111,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "beefy-primitives", "bitvec", @@ -13200,7 +13200,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "frame-support", "polkadot-primitives", @@ -13486,7 +13486,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13500,7 +13500,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "frame-support", "frame-system", @@ -13520,7 +13520,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "frame-benchmarking", "frame-support", @@ -13538,7 +13538,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#7725d4b5a12eb503a2380ac534468b87b4476f03" +source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" dependencies = [ "Inflector", "proc-macro2", diff --git a/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs b/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs index 3c4e81f3e3f..7abe94865aa 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs @@ -58,7 +58,6 @@ impl Config for Runtime { type AddressGenerator = DefaultAddressGenerator; type ContractAccessWeight = DefaultContractAccessWeight; type MaxCodeLen = ConstU32<{ 128 * 1024 }>; - type RelaxedMaxCodeLen = ConstU32<{ 256 * 1024 }>; type MaxStorageKeyLen = ConstU32<128>; } From 778d6bbe0b44e3af7e846f79686d17c1356a726a Mon Sep 17 00:00:00 2001 From: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> Date: Mon, 19 Sep 2022 15:50:19 +0200 Subject: [PATCH 067/148] [ci] build runtime only if runtime files were changed (#1582) * [WIP][ci] build runtime only if runtime files were changed * debug * enable valid job * enable valid job * enable everything back * test build-runtime-assets-statemine * add need * build nightly * test build runtime statemint * cargo check instead build * rm test file * restart pipeline * add paths to build-runtime-template * add test file to trigger builds * move test * remove test file * trigger pipeline to calculate times * modify build-runtime jobs * add echo * fix semicolon * debug * fix variable * uncomment all * add DAG for build-runtime jobs * restart pipeline --- .gitlab-ci.yml | 69 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4ef5fb8df88..501a71f6ff9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -234,7 +234,7 @@ build-test-parachain: variables: # Enable debug assertions since we are running optimized builds for testing # but still want to have debug assertions. - RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings" + RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings" # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs needs: - job: check-rustdoc @@ -248,9 +248,74 @@ build-test-parachain: - mkdir -p ./artifacts/zombienet - mv ./target/release/wbuild/cumulus-test-runtime/wasm_binary_spec_version_incremented.rs.compact.compressed.wasm ./artifacts/zombienet/. +# build runtime only if files in $RUNTIME_PATH/$RUNTIME_NAME were changed +.build-runtime-template: &build-runtime-template + stage: build + <<: *docker-env + <<: *pr-refs + # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs + needs: + - job: check-rustdoc + artifacts: false + variables: + RUNTIME_PATH: "parachains/runtimes/assets" + script: + - cd ${RUNTIME_PATH} + - for directory in $(echo */); do + echo "_____Running cargo check for ${directory} ______"; + cd ${directory}; + pwd; + SKIP_WASM_BUILD=1 cargo check; + cd ..; + done + +# DAG: build-runtime-assets -> build-runtime-collectives -> build-runtime-contracts +# DAG: build-runtime-assets ->build-runtime-starters -> build-runtime-testing +build-runtime-assets: + <<: *build-runtime-template + variables: + RUNTIME_PATH: "parachains/runtimes/assets" + +build-runtime-collectives: + <<: *build-runtime-template + variables: + RUNTIME_PATH: "parachains/runtimes/collectives" + # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs + needs: + - job: build-runtime-assets + artifacts: false + +build-runtime-contracts: + <<: *build-runtime-template + variables: + RUNTIME_PATH: "parachains/runtimes/contracts" + # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs + needs: + - job: build-runtime-collectives + artifacts: false + +build-runtime-starters: + <<: *build-runtime-template + variables: + RUNTIME_PATH: "parachains/runtimes/starters" + # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs + needs: + - job: build-runtime-assets + artifacts: false + +build-runtime-testing: + <<: *build-runtime-template + variables: + RUNTIME_PATH: "parachains/runtimes/testing" + # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs + needs: + - job: build-runtime-starters + artifacts: false + + #### stage: publish -.build-push-image: &build-push-image +.build-push-image: &build-push-image image: quay.io/buildah/stable variables: DOCKERFILE: "" # docker/path-to.Dockerfile From 14115c82de55de2d581e9ad9f7b8a4c7093c2f71 Mon Sep 17 00:00:00 2001 From: Roman Useinov Date: Mon, 19 Sep 2022 20:29:31 +0200 Subject: [PATCH 068/148] [Fix] Weight calculations for Wild -> affects teleports (#1639) * [Fix] Weight calculations for Wild -> affects teleports * introduce a separate asset limit for teleports * fix deposit * reshuffle abstractions * fix imports * little refactoring * Update parachains/common/src/xcm_config.rs Co-authored-by: Squirrel * add comments Co-authored-by: Squirrel --- parachains/common/src/xcm_config.rs | 14 +++++++++ .../assets/statemine/src/weights/xcm/mod.rs | 29 ++++++++++++------- .../assets/statemint/src/weights/xcm/mod.rs | 29 ++++++++++++------- .../assets/westmint/src/weights/xcm/mod.rs | 29 ++++++++++++------- 4 files changed, 68 insertions(+), 33 deletions(-) diff --git a/parachains/common/src/xcm_config.rs b/parachains/common/src/xcm_config.rs index b9ae5ef87ce..346e0f9cb61 100644 --- a/parachains/common/src/xcm_config.rs +++ b/parachains/common/src/xcm_config.rs @@ -119,3 +119,17 @@ impl> FilterAssetLocation for ConcreteNativeAssetFr matches!(asset.id, Concrete(ref id) if id == origin && origin == &Location::get()) } } + +/// A generic function to use for MultiAssetFilter implementations, currently used to differentiate +/// between reserve operations and the rest of them. +pub fn weigh_multi_assets_generic( + filter: &MultiAssetFilter, + weight: Weight, + max_assets: u32, +) -> XCMWeight { + let multiplier = match filter { + MultiAssetFilter::Definite(assets) => assets.len() as u64, + MultiAssetFilter::Wild(_) => max_assets as u64, + }; + weight.saturating_mul(multiplier).ref_time() +} diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs index 79fbd0812bb..9dd4345ef73 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs @@ -21,7 +21,7 @@ use crate::Runtime; use frame_support::weights::Weight; use pallet_xcm_benchmarks_fungible::WeightInfo as XcmFungibleWeight; use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; -use sp_std::prelude::*; +use parachains_common::xcm_config::weigh_multi_assets_generic; use xcm::{ latest::{prelude::*, Weight as XCMWeight}, DoubleEncoded, @@ -31,22 +31,29 @@ trait WeighMultiAssets { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight; } -const MAX_ASSETS: u32 = 100; +trait WeighMultiAssetsReserve { + fn weigh_multi_assets_reserve(&self, weight: Weight) -> XCMWeight; +} + +const RESERVE_MAX_ASSETS: u32 = 100; +/// For teleports and deposits +const MAX_ASSETS: u32 = 1; impl WeighMultiAssets for MultiAssetFilter { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - let weight = match self { - Self::Definite(assets) => - weight.saturating_mul(assets.inner().into_iter().count() as u64), - Self::Wild(_) => weight.saturating_mul(MAX_ASSETS as u64), - }; - weight.ref_time() + weigh_multi_assets_generic(self, weight, MAX_ASSETS) + } +} + +impl WeighMultiAssetsReserve for MultiAssetFilter { + fn weigh_multi_assets_reserve(&self, weight: Weight) -> XCMWeight { + weigh_multi_assets_generic(self, weight, RESERVE_MAX_ASSETS) } } impl WeighMultiAssets for MultiAssets { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - weight.saturating_mul(self.inner().into_iter().count() as u64).ref_time() + weight.saturating_mul(self.len() as u64).ref_time() } } @@ -125,7 +132,7 @@ impl XcmWeightInfo for StatemineXcmWeight { _dest: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { - assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) + assets.weigh_multi_assets_reserve(XcmFungibleWeight::::deposit_reserve_asset()) } fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { Weight::MAX.ref_time() @@ -135,7 +142,7 @@ impl XcmWeightInfo for StatemineXcmWeight { _reserve: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { - assets.weigh_multi_assets(XcmGeneric::::initiate_reserve_withdraw()) + assets.weigh_multi_assets_reserve(XcmGeneric::::initiate_reserve_withdraw()) } fn initiate_teleport( assets: &MultiAssetFilter, diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs index b51f8b207a5..2fbe469aab7 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs @@ -21,7 +21,7 @@ use crate::Runtime; use frame_support::weights::Weight; use pallet_xcm_benchmarks_fungible::WeightInfo as XcmFungibleWeight; use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; -use sp_std::prelude::*; +use parachains_common::xcm_config::weigh_multi_assets_generic; use xcm::{ latest::{prelude::*, Weight as XCMWeight}, DoubleEncoded, @@ -31,22 +31,29 @@ trait WeighMultiAssets { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight; } -const MAX_ASSETS: u32 = 100; +trait WeighMultiAssetsReserve { + fn weigh_multi_assets_reserve(&self, weight: Weight) -> XCMWeight; +} + +const RESERVE_MAX_ASSETS: u32 = 100; +/// For teleports and deposits +const MAX_ASSETS: u32 = 1; impl WeighMultiAssets for MultiAssetFilter { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - let weight = match self { - Self::Definite(assets) => - weight.saturating_mul(assets.inner().into_iter().count() as u64), - Self::Wild(_) => weight.saturating_mul(MAX_ASSETS as u64), - }; - weight.ref_time() + weigh_multi_assets_generic(self, weight, MAX_ASSETS) + } +} + +impl WeighMultiAssetsReserve for MultiAssetFilter { + fn weigh_multi_assets_reserve(&self, weight: Weight) -> XCMWeight { + weigh_multi_assets_generic(self, weight, RESERVE_MAX_ASSETS) } } impl WeighMultiAssets for MultiAssets { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - weight.saturating_mul(self.inner().into_iter().count() as u64).ref_time() + weight.saturating_mul(self.len() as u64).ref_time() } } @@ -125,7 +132,7 @@ impl XcmWeightInfo for StatemintXcmWeight { _dest: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { - assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) + assets.weigh_multi_assets_reserve(XcmFungibleWeight::::deposit_reserve_asset()) } fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { Weight::MAX.ref_time() @@ -135,7 +142,7 @@ impl XcmWeightInfo for StatemintXcmWeight { _reserve: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { - assets.weigh_multi_assets(XcmGeneric::::initiate_reserve_withdraw()) + assets.weigh_multi_assets_reserve(XcmGeneric::::initiate_reserve_withdraw()) } fn initiate_teleport( assets: &MultiAssetFilter, diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs index 018f8f7d9f7..0c1f96ae7d7 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs @@ -21,7 +21,7 @@ use crate::Runtime; use frame_support::weights::Weight; use pallet_xcm_benchmarks_fungible::WeightInfo as XcmFungibleWeight; use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; -use sp_std::prelude::*; +use parachains_common::xcm_config::weigh_multi_assets_generic; use xcm::{ latest::{prelude::*, Weight as XCMWeight}, DoubleEncoded, @@ -31,22 +31,29 @@ trait WeighMultiAssets { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight; } -const MAX_ASSETS: u32 = 100; +trait WeighMultiAssetsReserve { + fn weigh_multi_assets_reserve(&self, weight: Weight) -> XCMWeight; +} + +const RESERVE_MAX_ASSETS: u32 = 100; +/// For teleports and deposits +const MAX_ASSETS: u32 = 1; impl WeighMultiAssets for MultiAssetFilter { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - let weight = match self { - Self::Definite(assets) => - weight.saturating_mul(assets.inner().into_iter().count() as u64), - Self::Wild(_) => weight.saturating_mul(MAX_ASSETS as u64), - }; - weight.ref_time() + weigh_multi_assets_generic(self, weight, MAX_ASSETS) + } +} + +impl WeighMultiAssetsReserve for MultiAssetFilter { + fn weigh_multi_assets_reserve(&self, weight: Weight) -> XCMWeight { + weigh_multi_assets_generic(self, weight, RESERVE_MAX_ASSETS) } } impl WeighMultiAssets for MultiAssets { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - weight.saturating_mul(self.inner().into_iter().count() as u64).ref_time() + weight.saturating_mul(self.len() as u64).ref_time() } } @@ -125,7 +132,7 @@ impl XcmWeightInfo for WestmintXcmWeight { _dest: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { - assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) + assets.weigh_multi_assets_reserve(XcmFungibleWeight::::deposit_reserve_asset()) } fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { Weight::MAX.ref_time() @@ -135,7 +142,7 @@ impl XcmWeightInfo for WestmintXcmWeight { _reserve: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { - assets.weigh_multi_assets(XcmGeneric::::initiate_reserve_withdraw()) + assets.weigh_multi_assets_reserve(XcmGeneric::::initiate_reserve_withdraw()) } fn initiate_teleport( assets: &MultiAssetFilter, From 822c4d79626462f36e0e0652a4a5021355e37154 Mon Sep 17 00:00:00 2001 From: joe petrowski <25483142+joepetrowski@users.noreply.github.com> Date: Mon, 19 Sep 2022 22:18:14 +0200 Subject: [PATCH 069/148] Revert "[Fix] Weight calculations for Wild -> affects teleports (#1639)" (#1640) This reverts commit 14115c82de55de2d581e9ad9f7b8a4c7093c2f71. --- parachains/common/src/xcm_config.rs | 14 --------- .../assets/statemine/src/weights/xcm/mod.rs | 29 +++++++------------ .../assets/statemint/src/weights/xcm/mod.rs | 29 +++++++------------ .../assets/westmint/src/weights/xcm/mod.rs | 29 +++++++------------ 4 files changed, 33 insertions(+), 68 deletions(-) diff --git a/parachains/common/src/xcm_config.rs b/parachains/common/src/xcm_config.rs index 346e0f9cb61..b9ae5ef87ce 100644 --- a/parachains/common/src/xcm_config.rs +++ b/parachains/common/src/xcm_config.rs @@ -119,17 +119,3 @@ impl> FilterAssetLocation for ConcreteNativeAssetFr matches!(asset.id, Concrete(ref id) if id == origin && origin == &Location::get()) } } - -/// A generic function to use for MultiAssetFilter implementations, currently used to differentiate -/// between reserve operations and the rest of them. -pub fn weigh_multi_assets_generic( - filter: &MultiAssetFilter, - weight: Weight, - max_assets: u32, -) -> XCMWeight { - let multiplier = match filter { - MultiAssetFilter::Definite(assets) => assets.len() as u64, - MultiAssetFilter::Wild(_) => max_assets as u64, - }; - weight.saturating_mul(multiplier).ref_time() -} diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs index 9dd4345ef73..79fbd0812bb 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs @@ -21,7 +21,7 @@ use crate::Runtime; use frame_support::weights::Weight; use pallet_xcm_benchmarks_fungible::WeightInfo as XcmFungibleWeight; use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; -use parachains_common::xcm_config::weigh_multi_assets_generic; +use sp_std::prelude::*; use xcm::{ latest::{prelude::*, Weight as XCMWeight}, DoubleEncoded, @@ -31,29 +31,22 @@ trait WeighMultiAssets { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight; } -trait WeighMultiAssetsReserve { - fn weigh_multi_assets_reserve(&self, weight: Weight) -> XCMWeight; -} - -const RESERVE_MAX_ASSETS: u32 = 100; -/// For teleports and deposits -const MAX_ASSETS: u32 = 1; +const MAX_ASSETS: u32 = 100; impl WeighMultiAssets for MultiAssetFilter { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - weigh_multi_assets_generic(self, weight, MAX_ASSETS) - } -} - -impl WeighMultiAssetsReserve for MultiAssetFilter { - fn weigh_multi_assets_reserve(&self, weight: Weight) -> XCMWeight { - weigh_multi_assets_generic(self, weight, RESERVE_MAX_ASSETS) + let weight = match self { + Self::Definite(assets) => + weight.saturating_mul(assets.inner().into_iter().count() as u64), + Self::Wild(_) => weight.saturating_mul(MAX_ASSETS as u64), + }; + weight.ref_time() } } impl WeighMultiAssets for MultiAssets { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - weight.saturating_mul(self.len() as u64).ref_time() + weight.saturating_mul(self.inner().into_iter().count() as u64).ref_time() } } @@ -132,7 +125,7 @@ impl XcmWeightInfo for StatemineXcmWeight { _dest: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { - assets.weigh_multi_assets_reserve(XcmFungibleWeight::::deposit_reserve_asset()) + assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) } fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { Weight::MAX.ref_time() @@ -142,7 +135,7 @@ impl XcmWeightInfo for StatemineXcmWeight { _reserve: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { - assets.weigh_multi_assets_reserve(XcmGeneric::::initiate_reserve_withdraw()) + assets.weigh_multi_assets(XcmGeneric::::initiate_reserve_withdraw()) } fn initiate_teleport( assets: &MultiAssetFilter, diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs index 2fbe469aab7..b51f8b207a5 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs @@ -21,7 +21,7 @@ use crate::Runtime; use frame_support::weights::Weight; use pallet_xcm_benchmarks_fungible::WeightInfo as XcmFungibleWeight; use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; -use parachains_common::xcm_config::weigh_multi_assets_generic; +use sp_std::prelude::*; use xcm::{ latest::{prelude::*, Weight as XCMWeight}, DoubleEncoded, @@ -31,29 +31,22 @@ trait WeighMultiAssets { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight; } -trait WeighMultiAssetsReserve { - fn weigh_multi_assets_reserve(&self, weight: Weight) -> XCMWeight; -} - -const RESERVE_MAX_ASSETS: u32 = 100; -/// For teleports and deposits -const MAX_ASSETS: u32 = 1; +const MAX_ASSETS: u32 = 100; impl WeighMultiAssets for MultiAssetFilter { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - weigh_multi_assets_generic(self, weight, MAX_ASSETS) - } -} - -impl WeighMultiAssetsReserve for MultiAssetFilter { - fn weigh_multi_assets_reserve(&self, weight: Weight) -> XCMWeight { - weigh_multi_assets_generic(self, weight, RESERVE_MAX_ASSETS) + let weight = match self { + Self::Definite(assets) => + weight.saturating_mul(assets.inner().into_iter().count() as u64), + Self::Wild(_) => weight.saturating_mul(MAX_ASSETS as u64), + }; + weight.ref_time() } } impl WeighMultiAssets for MultiAssets { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - weight.saturating_mul(self.len() as u64).ref_time() + weight.saturating_mul(self.inner().into_iter().count() as u64).ref_time() } } @@ -132,7 +125,7 @@ impl XcmWeightInfo for StatemintXcmWeight { _dest: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { - assets.weigh_multi_assets_reserve(XcmFungibleWeight::::deposit_reserve_asset()) + assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) } fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { Weight::MAX.ref_time() @@ -142,7 +135,7 @@ impl XcmWeightInfo for StatemintXcmWeight { _reserve: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { - assets.weigh_multi_assets_reserve(XcmGeneric::::initiate_reserve_withdraw()) + assets.weigh_multi_assets(XcmGeneric::::initiate_reserve_withdraw()) } fn initiate_teleport( assets: &MultiAssetFilter, diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs index 0c1f96ae7d7..018f8f7d9f7 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs @@ -21,7 +21,7 @@ use crate::Runtime; use frame_support::weights::Weight; use pallet_xcm_benchmarks_fungible::WeightInfo as XcmFungibleWeight; use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; -use parachains_common::xcm_config::weigh_multi_assets_generic; +use sp_std::prelude::*; use xcm::{ latest::{prelude::*, Weight as XCMWeight}, DoubleEncoded, @@ -31,29 +31,22 @@ trait WeighMultiAssets { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight; } -trait WeighMultiAssetsReserve { - fn weigh_multi_assets_reserve(&self, weight: Weight) -> XCMWeight; -} - -const RESERVE_MAX_ASSETS: u32 = 100; -/// For teleports and deposits -const MAX_ASSETS: u32 = 1; +const MAX_ASSETS: u32 = 100; impl WeighMultiAssets for MultiAssetFilter { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - weigh_multi_assets_generic(self, weight, MAX_ASSETS) - } -} - -impl WeighMultiAssetsReserve for MultiAssetFilter { - fn weigh_multi_assets_reserve(&self, weight: Weight) -> XCMWeight { - weigh_multi_assets_generic(self, weight, RESERVE_MAX_ASSETS) + let weight = match self { + Self::Definite(assets) => + weight.saturating_mul(assets.inner().into_iter().count() as u64), + Self::Wild(_) => weight.saturating_mul(MAX_ASSETS as u64), + }; + weight.ref_time() } } impl WeighMultiAssets for MultiAssets { fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - weight.saturating_mul(self.len() as u64).ref_time() + weight.saturating_mul(self.inner().into_iter().count() as u64).ref_time() } } @@ -132,7 +125,7 @@ impl XcmWeightInfo for WestmintXcmWeight { _dest: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { - assets.weigh_multi_assets_reserve(XcmFungibleWeight::::deposit_reserve_asset()) + assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) } fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { Weight::MAX.ref_time() @@ -142,7 +135,7 @@ impl XcmWeightInfo for WestmintXcmWeight { _reserve: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { - assets.weigh_multi_assets_reserve(XcmGeneric::::initiate_reserve_withdraw()) + assets.weigh_multi_assets(XcmGeneric::::initiate_reserve_withdraw()) } fn initiate_teleport( assets: &MultiAssetFilter, From 5115d9529ee958e937e2be729b3089d17273fa9c Mon Sep 17 00:00:00 2001 From: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> Date: Tue, 20 Sep 2022 11:27:41 +0200 Subject: [PATCH 070/148] [ci] Disable auto-fmt and revert cancel-pipeline (#1642) * [WIP][ci] Disable auto-fmt and revert cancel-pipeline * fail test-linux-stable * fix test-linux-stable --- .gitlab-ci.yml | 33 +-------------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 501a71f6ff9..2f899e378a9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -112,23 +112,6 @@ variables: tags: - kubernetes-parity-build -#### stage: .pre - -# checks code format and fails if formatting is required -# the code will be formatted automatically and the pipeline will be restarted -cargo-fmt: - stage: .pre - <<: *pr-refs - <<: *kubernetes-env - before_script: - - echo PROJECT_NAME=$CI_PROJECT_NAME > fmt.env - - echo PR_BRANCH_NAME=$(curl -s https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls/${CI_COMMIT_REF_NAME} | jq -r ".head.ref") >> fmt.env - script: - - cargo +nightly fmt --check - artifacts: - reports: - dotenv: fmt.env - #### stage: test test-linux-stable: @@ -686,19 +669,5 @@ cancel-pipeline: PR_NUM: "${PR_NUM}" trigger: project: "parity/infrastructure/ci_cd/pipeline-stopper" - # remove branch, when pipeline-stopper for substrate and polakdot is updated to the same branch - branch: "as-improve" -# this job will automatically format code and rerun pipeline if cargo-fmt job fails -auto-fmt: - stage: .post - rules: - - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs - when: on_failure - needs: - - job: cargo-fmt - variables: - PROJECT_NAME: "${CI_PROJECT_NAME}" - PR_BRANCH_NAME: "${PR_BRANCH_NAME}" - trigger: - project: "parity/infrastructure/ci_cd/auto-fmt" + From 05e561de89f60de3d2221767b0ff5c5ba648b338 Mon Sep 17 00:00:00 2001 From: Roman Useinov Date: Tue, 20 Sep 2022 12:17:54 +0200 Subject: [PATCH 071/148] [Fix] Hardcode teleport weight until XCM pallet is fixed (#1641) * [Fix] Hardcode teleport weight until XCM pallet is fixed * fix build * solve dead code * fix lint * more eloquent weights * quick fix --- .../runtimes/assets/statemine/src/weights/xcm/mod.rs | 7 +++++-- .../runtimes/assets/statemint/src/weights/xcm/mod.rs | 7 +++++-- parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs | 7 +++++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs index 79fbd0812bb..f1fe664953a 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs @@ -21,7 +21,7 @@ use crate::Runtime; use frame_support::weights::Weight; use pallet_xcm_benchmarks_fungible::WeightInfo as XcmFungibleWeight; use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; -use sp_std::prelude::*; +use sp_std::{cmp, prelude::*}; use xcm::{ latest::{prelude::*, Weight as XCMWeight}, DoubleEncoded, @@ -142,7 +142,10 @@ impl XcmWeightInfo for StatemineXcmWeight { _dest: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { - assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()) + // Hardcoded till the XCM pallet is fixed + let hardcoded_weight = Weight::from_ref_time(200_000_000 as u64).ref_time(); + let weight = assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()); + cmp::min(hardcoded_weight, weight) } fn query_holding( _query_id: &u64, diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs index b51f8b207a5..04db4216efc 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs @@ -21,7 +21,7 @@ use crate::Runtime; use frame_support::weights::Weight; use pallet_xcm_benchmarks_fungible::WeightInfo as XcmFungibleWeight; use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; -use sp_std::prelude::*; +use sp_std::{cmp, prelude::*}; use xcm::{ latest::{prelude::*, Weight as XCMWeight}, DoubleEncoded, @@ -142,7 +142,10 @@ impl XcmWeightInfo for StatemintXcmWeight { _dest: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { - assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()) + // Hardcoded till the XCM pallet is fixed + let hardcoded_weight = Weight::from_ref_time(200_000_000 as u64).ref_time(); + let weight = assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()); + cmp::min(hardcoded_weight, weight) } fn query_holding( _query_id: &u64, diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs index 018f8f7d9f7..0fc8a28dba4 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs @@ -21,7 +21,7 @@ use crate::Runtime; use frame_support::weights::Weight; use pallet_xcm_benchmarks_fungible::WeightInfo as XcmFungibleWeight; use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; -use sp_std::prelude::*; +use sp_std::{cmp, prelude::*}; use xcm::{ latest::{prelude::*, Weight as XCMWeight}, DoubleEncoded, @@ -142,7 +142,10 @@ impl XcmWeightInfo for WestmintXcmWeight { _dest: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { - assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()) + // Hardcoded till the XCM pallet is fixed + let hardcoded_weight = Weight::from_ref_time(200_000_000 as u64).ref_time(); + let weight = assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()); + cmp::min(hardcoded_weight, weight) } fn query_holding( _query_id: &u64, From 4f18266954122e400a4ac20b1acc5b424131284c Mon Sep 17 00:00:00 2001 From: Muharem Ismailov Date: Tue, 20 Sep 2022 13:29:38 +0200 Subject: [PATCH 072/148] fix a wrong path to ci script (#1646) --- .../workflows/release-20_extrinsic-ordering-check-from-bin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-20_extrinsic-ordering-check-from-bin.yml b/.github/workflows/release-20_extrinsic-ordering-check-from-bin.yml index 704cee5d70c..442f7793f4c 100644 --- a/.github/workflows/release-20_extrinsic-ordering-check-from-bin.yml +++ b/.github/workflows/release-20_extrinsic-ordering-check-from-bin.yml @@ -65,7 +65,7 @@ jobs: $CMD >> output.txt sed -z -i 's/\n\n/\n/g' output.txt cat output.txt | egrep -n -i '' - SUMMARY=$(./scripts/ci/extrinsic-ordering-filter.sh output.txt) + SUMMARY=$(./scripts/ci/github/extrinsic-ordering-filter.sh output.txt) echo -e $SUMMARY echo -e $SUMMARY >> output.txt From 6f40bb9efe10f6c9b7f7a2c3c14db1f00310ddc3 Mon Sep 17 00:00:00 2001 From: Muharem Ismailov Date: Tue, 20 Sep 2022 15:36:04 +0200 Subject: [PATCH 073/148] Bump runtimes transaction version for v9290 (#1647) --- parachains/runtimes/assets/statemine/src/lib.rs | 2 +- parachains/runtimes/assets/statemint/src/lib.rs | 2 +- parachains/runtimes/assets/westmint/src/lib.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/parachains/runtimes/assets/statemine/src/lib.rs b/parachains/runtimes/assets/statemine/src/lib.rs index c03ba675ded..6a316fd5fa2 100644 --- a/parachains/runtimes/assets/statemine/src/lib.rs +++ b/parachains/runtimes/assets/statemine/src/lib.rs @@ -90,7 +90,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_version: 9290, impl_version: 0, apis: RUNTIME_API_VERSIONS, - transaction_version: 7, + transaction_version: 8, state_version: 0, }; diff --git a/parachains/runtimes/assets/statemint/src/lib.rs b/parachains/runtimes/assets/statemint/src/lib.rs index 606a4b71e69..ae4cba4a347 100644 --- a/parachains/runtimes/assets/statemint/src/lib.rs +++ b/parachains/runtimes/assets/statemint/src/lib.rs @@ -120,7 +120,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_version: 9290, impl_version: 0, apis: RUNTIME_API_VERSIONS, - transaction_version: 7, + transaction_version: 8, state_version: 0, }; diff --git a/parachains/runtimes/assets/westmint/src/lib.rs b/parachains/runtimes/assets/westmint/src/lib.rs index 08a5e3584af..76989eb593b 100644 --- a/parachains/runtimes/assets/westmint/src/lib.rs +++ b/parachains/runtimes/assets/westmint/src/lib.rs @@ -88,7 +88,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_version: 9290, impl_version: 0, apis: RUNTIME_API_VERSIONS, - transaction_version: 7, + transaction_version: 8, state_version: 0, }; From 14186393b28dcfc14d6d30a8aa92b1e6a6ece46d Mon Sep 17 00:00:00 2001 From: Sergej Sakac <73715684+Szegoo@users.noreply.github.com> Date: Wed, 21 Sep 2022 01:17:31 +0200 Subject: [PATCH 074/148] Rename Origin (#1628) * Rename Origin * more renaming * fixes * fix errors * last fix? * rename * Update mock.rs * update lockfile for {"polkadot", "substrate"} Co-authored-by: Shawn Tabrizi Co-authored-by: parity-processbot <> --- Cargo.lock | 500 +++++++++--------- client/service/src/lib.rs | 4 +- pallets/collator-selection/src/lib.rs | 2 +- pallets/collator-selection/src/mock.rs | 2 +- pallets/collator-selection/src/tests.rs | 68 +-- pallets/dmp-queue/src/lib.rs | 33 +- pallets/parachain-system/src/tests.rs | 2 +- pallets/xcmp-queue/src/lib.rs | 6 +- pallets/xcmp-queue/src/mock.rs | 14 +- pallets/xcmp-queue/src/tests.rs | 33 +- .../pallets/template/src/mock.rs | 2 +- .../pallets/template/src/tests.rs | 7 +- parachain-template/runtime/src/lib.rs | 2 +- parachain-template/runtime/src/xcm_config.rs | 26 +- parachains/common/src/impls.rs | 2 +- parachains/pallets/ping/src/lib.rs | 8 +- .../runtimes/assets/statemine/src/lib.rs | 2 +- .../assets/statemine/src/xcm_config.rs | 28 +- .../runtimes/assets/statemint/src/lib.rs | 2 +- .../assets/statemint/src/xcm_config.rs | 28 +- .../runtimes/assets/test-utils/src/lib.rs | 10 +- .../runtimes/assets/westmint/src/lib.rs | 2 +- .../assets/westmint/src/xcm_config.rs | 28 +- .../collectives-polkadot/src/impls.rs | 4 +- .../collectives-polkadot/src/lib.rs | 4 +- .../collectives-polkadot/src/xcm_config.rs | 28 +- .../contracts/contracts-rococo/src/lib.rs | 2 +- .../contracts-rococo/src/xcm_config.rs | 28 +- .../runtimes/starters/seedling/src/lib.rs | 2 +- parachains/runtimes/starters/shell/src/lib.rs | 2 +- .../runtimes/starters/shell/src/xcm_config.rs | 6 +- parachains/runtimes/testing/penpal/src/lib.rs | 2 +- .../runtimes/testing/penpal/src/xcm_config.rs | 27 +- .../testing/rococo-parachain/src/lib.rs | 28 +- test/runtime/src/lib.rs | 2 +- 35 files changed, 488 insertions(+), 458 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3188666aba8..cd30d7a90fd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -463,7 +463,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "beefy-primitives", @@ -499,7 +499,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -519,7 +519,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "beefy-primitives", "sp-api", @@ -528,7 +528,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "parity-scale-codec", "scale-info", @@ -2782,7 +2782,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "parity-scale-codec", ] @@ -2799,7 +2799,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support", "frame-system", @@ -2822,7 +2822,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "Inflector", "chrono", @@ -2873,7 +2873,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2884,7 +2884,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2900,7 +2900,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support", "frame-system", @@ -2929,7 +2929,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "bitflags", "frame-metadata", @@ -2961,7 +2961,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "Inflector", "cfg-expr", @@ -2975,7 +2975,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2987,7 +2987,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "proc-macro2", "quote", @@ -2997,7 +2997,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support", "log", @@ -3015,7 +3015,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -3030,7 +3030,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "parity-scale-codec", "sp-api", @@ -3039,7 +3039,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support", "parity-scale-codec", @@ -3918,7 +3918,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "beefy-primitives", "bitvec", @@ -4011,7 +4011,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "frame-support", "polkadot-primitives", @@ -5350,7 +5350,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "async-trait", "dyn-clonable", @@ -5366,7 +5366,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "expander 0.0.6", "itertools", @@ -5404,7 +5404,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -5425,7 +5425,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support", "frame-system", @@ -5442,7 +5442,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -5456,7 +5456,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support", "frame-system", @@ -5472,7 +5472,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support", "frame-system", @@ -5488,7 +5488,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support", "frame-system", @@ -5503,7 +5503,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -5527,7 +5527,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5547,7 +5547,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -5562,7 +5562,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "beefy-primitives", "frame-support", @@ -5578,7 +5578,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -5601,7 +5601,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -5619,7 +5619,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -5664,7 +5664,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -5681,7 +5681,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "bitflags", "frame-benchmarking", @@ -5709,7 +5709,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "bitflags", "parity-scale-codec", @@ -5724,7 +5724,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "proc-macro2", "quote", @@ -5734,7 +5734,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5751,7 +5751,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5764,7 +5764,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -5780,7 +5780,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5804,7 +5804,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5817,7 +5817,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -5835,7 +5835,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -5850,7 +5850,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -5873,7 +5873,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5889,7 +5889,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -5909,7 +5909,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -5926,7 +5926,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -5943,7 +5943,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5961,7 +5961,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5976,7 +5976,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -5991,7 +5991,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support", "frame-system", @@ -6008,7 +6008,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6028,7 +6028,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "parity-scale-codec", "sp-api", @@ -6038,7 +6038,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support", "frame-system", @@ -6055,7 +6055,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6078,7 +6078,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -6094,7 +6094,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -6109,7 +6109,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support", "frame-system", @@ -6123,7 +6123,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -6138,7 +6138,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -6154,7 +6154,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support", "frame-system", @@ -6175,7 +6175,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -6191,7 +6191,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support", "frame-system", @@ -6205,7 +6205,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6228,7 +6228,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6239,7 +6239,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "log", "sp-arithmetic", @@ -6248,7 +6248,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support", "frame-system", @@ -6277,7 +6277,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -6295,7 +6295,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -6314,7 +6314,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-support", "frame-system", @@ -6330,7 +6330,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6345,7 +6345,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6356,7 +6356,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -6373,7 +6373,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -6388,7 +6388,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -6404,7 +6404,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-benchmarking", "frame-support", @@ -6419,7 +6419,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "frame-support", "frame-system", @@ -6437,7 +6437,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "frame-benchmarking", "frame-support", @@ -7006,7 +7006,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7021,7 +7021,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7035,7 +7035,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "derive_more", "fatality", @@ -7058,7 +7058,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "fatality", "futures", @@ -7079,7 +7079,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7105,7 +7105,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7146,7 +7146,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "always-assert", "fatality", @@ -7167,7 +7167,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7180,7 +7180,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "derive_more", "fatality", @@ -7203,7 +7203,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7217,7 +7217,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "futures", "futures-timer", @@ -7237,7 +7237,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "always-assert", "async-trait", @@ -7261,7 +7261,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "futures", "parity-scale-codec", @@ -7279,7 +7279,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "bitvec", "derive_more", @@ -7308,7 +7308,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "bitvec", "futures", @@ -7328,7 +7328,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "bitvec", "fatality", @@ -7347,7 +7347,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7362,7 +7362,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "async-trait", "futures", @@ -7380,7 +7380,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7395,7 +7395,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "futures", "futures-timer", @@ -7412,7 +7412,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "fatality", "futures", @@ -7431,7 +7431,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "async-trait", "futures", @@ -7448,7 +7448,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "bitvec", "fatality", @@ -7466,7 +7466,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "always-assert", "assert_matches", @@ -7498,7 +7498,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "futures", "polkadot-node-primitives", @@ -7514,7 +7514,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "futures", "memory-lru", @@ -7530,7 +7530,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "async-std", "lazy_static", @@ -7548,7 +7548,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "bs58", "futures", @@ -7567,7 +7567,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "async-trait", "derive_more", @@ -7589,7 +7589,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "bounded-vec", "futures", @@ -7611,7 +7611,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7621,7 +7621,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "async-trait", "futures", @@ -7639,7 +7639,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "async-trait", "derive_more", @@ -7662,7 +7662,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "async-trait", "derive_more", @@ -7695,7 +7695,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "async-trait", "futures", @@ -7718,7 +7718,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "derive_more", "frame-support", @@ -7818,7 +7818,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7833,7 +7833,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "bitvec", "frame-system", @@ -7863,7 +7863,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7895,7 +7895,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "beefy-primitives", "bitvec", @@ -7983,7 +7983,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "beefy-primitives", "bitvec", @@ -8030,7 +8030,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "frame-support", "polkadot-primitives", @@ -8042,7 +8042,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "bs58", "parity-scale-codec", @@ -8054,7 +8054,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "bitflags", "bitvec", @@ -8097,7 +8097,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "async-trait", "beefy-gadget", @@ -8202,7 +8202,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8223,7 +8223,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8233,7 +8233,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8258,7 +8258,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "beefy-primitives", "bitvec", @@ -8319,7 +8319,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "frame-benchmarking", "frame-system", @@ -8464,7 +8464,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8949,7 +8949,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9071,7 +9071,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9155,7 +9155,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "frame-support", "polkadot-primitives", @@ -9325,7 +9325,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "log", "sp-core", @@ -9336,7 +9336,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "futures", @@ -9363,7 +9363,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "futures", "futures-timer", @@ -9386,7 +9386,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9402,7 +9402,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9419,7 +9419,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9430,7 +9430,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "chrono", "clap", @@ -9469,7 +9469,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "fnv", "futures", @@ -9497,7 +9497,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "hash-db", "kvdb", @@ -9522,7 +9522,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "futures", @@ -9546,7 +9546,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "futures", @@ -9575,7 +9575,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "fork-tree", @@ -9617,7 +9617,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "futures", "jsonrpsee", @@ -9639,7 +9639,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9652,7 +9652,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "futures", @@ -9677,7 +9677,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9704,7 +9704,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "environmental", "parity-scale-codec", @@ -9720,7 +9720,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "log", "parity-scale-codec", @@ -9735,7 +9735,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9755,7 +9755,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "ahash", "async-trait", @@ -9796,7 +9796,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "finality-grandpa", "futures", @@ -9817,7 +9817,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "ansi_term", "futures", @@ -9834,7 +9834,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "hex", @@ -9849,7 +9849,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "asynchronous-codec", @@ -9896,7 +9896,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "cid", "futures", @@ -9916,7 +9916,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "bitflags", @@ -9939,7 +9939,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "ahash", "futures", @@ -9957,7 +9957,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "futures", "hex", @@ -9978,7 +9978,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "fork-tree", "futures", @@ -10006,7 +10006,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "bytes", "fnv", @@ -10036,7 +10036,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "futures", "libp2p", @@ -10049,7 +10049,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10058,7 +10058,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "futures", "hash-db", @@ -10088,7 +10088,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "futures", "jsonrpsee", @@ -10111,7 +10111,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "futures", "jsonrpsee", @@ -10124,7 +10124,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "directories", @@ -10193,7 +10193,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "log", "parity-scale-codec", @@ -10207,7 +10207,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10226,7 +10226,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "futures", "libc", @@ -10245,7 +10245,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "chrono", "futures", @@ -10263,7 +10263,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "ansi_term", "atty", @@ -10294,7 +10294,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10305,7 +10305,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "futures", "futures-timer", @@ -10331,7 +10331,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "futures", "log", @@ -10344,7 +10344,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "futures", "futures-timer", @@ -10782,7 +10782,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "enumn", "parity-scale-codec", @@ -10858,7 +10858,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "hash-db", "log", @@ -10876,7 +10876,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "blake2", "proc-macro-crate", @@ -10888,7 +10888,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "parity-scale-codec", "scale-info", @@ -10901,7 +10901,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "integer-sqrt", "num-traits", @@ -10916,7 +10916,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "parity-scale-codec", "scale-info", @@ -10929,7 +10929,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "parity-scale-codec", @@ -10941,7 +10941,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "parity-scale-codec", "sp-api", @@ -10953,7 +10953,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "futures", "log", @@ -10971,7 +10971,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "futures", @@ -10990,7 +10990,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "parity-scale-codec", @@ -11008,7 +11008,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "merlin", @@ -11031,7 +11031,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "parity-scale-codec", "scale-info", @@ -11045,7 +11045,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "parity-scale-codec", "scale-info", @@ -11058,7 +11058,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "base58", "bitflags", @@ -11104,7 +11104,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "blake2", "byteorder", @@ -11118,7 +11118,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "proc-macro2", "quote", @@ -11129,7 +11129,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11138,7 +11138,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "proc-macro2", "quote", @@ -11148,7 +11148,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "environmental", "parity-scale-codec", @@ -11159,7 +11159,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "finality-grandpa", "log", @@ -11177,7 +11177,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11191,7 +11191,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "bytes", "futures", @@ -11217,7 +11217,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "lazy_static", "sp-core", @@ -11228,7 +11228,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "futures", @@ -11245,7 +11245,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "thiserror", "zstd", @@ -11254,7 +11254,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "log", "parity-scale-codec", @@ -11269,7 +11269,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "parity-scale-codec", "scale-info", @@ -11283,7 +11283,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "sp-api", "sp-core", @@ -11293,7 +11293,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "backtrace", "lazy_static", @@ -11303,7 +11303,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "rustc-hash", "serde", @@ -11313,7 +11313,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "either", "hash256-std-hasher", @@ -11336,7 +11336,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11354,7 +11354,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "Inflector", "proc-macro-crate", @@ -11366,7 +11366,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "log", "parity-scale-codec", @@ -11380,7 +11380,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "serde", "serde_json", @@ -11389,7 +11389,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "parity-scale-codec", "scale-info", @@ -11403,7 +11403,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "parity-scale-codec", "scale-info", @@ -11414,7 +11414,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "hash-db", "log", @@ -11436,12 +11436,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11454,7 +11454,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "log", "sp-core", @@ -11467,7 +11467,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "futures-timer", @@ -11483,7 +11483,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "parity-scale-codec", "sp-std", @@ -11495,7 +11495,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "sp-api", "sp-runtime", @@ -11504,7 +11504,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "log", @@ -11520,7 +11520,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "ahash", "hash-db", @@ -11543,7 +11543,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11560,7 +11560,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11571,7 +11571,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "impl-trait-for-tuples", "log", @@ -11584,7 +11584,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11886,7 +11886,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "platforms", ] @@ -11894,7 +11894,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11915,7 +11915,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "futures-util", "hyper", @@ -11928,7 +11928,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "jsonrpsee", "log", @@ -11949,7 +11949,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "async-trait", "futures", @@ -11975,7 +11975,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11985,7 +11985,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11996,7 +11996,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "ansi_term", "build-helper", @@ -12104,7 +12104,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "frame-support", "polkadot-primitives", @@ -12385,7 +12385,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12396,7 +12396,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12523,7 +12523,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#b541b2d2c9259c8617cd1ce2cf9a98ac06602679" +source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" dependencies = [ "clap", "frame-try-runtime", @@ -13111,7 +13111,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "beefy-primitives", "bitvec", @@ -13200,7 +13200,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "frame-support", "polkadot-primitives", @@ -13486,7 +13486,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13500,7 +13500,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "frame-support", "frame-system", @@ -13520,7 +13520,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "frame-benchmarking", "frame-support", @@ -13538,7 +13538,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d17f0627fefcd8b24f8bdae00ff98461824be9cc" +source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" dependencies = [ "Inflector", "proc-macro2", diff --git a/client/service/src/lib.rs b/client/service/src/lib.rs index 5ca73a530a3..600e1fcf444 100644 --- a/client/service/src/lib.rs +++ b/client/service/src/lib.rs @@ -27,7 +27,7 @@ use sc_client_api::{ Backend as BackendT, BlockBackend, BlockchainEvents, Finalizer, UsageProvider, }; use sc_consensus::{ - import_queue::{ImportQueue, IncomingBlock, Link, Origin}, + import_queue::{ImportQueue, IncomingBlock, Link, RuntimeOrigin}, BlockImport, }; use sc_service::{Configuration, TaskManager}; @@ -261,7 +261,7 @@ impl ImportQueue for SharedImportQueue { fn import_justifications( &mut self, - who: Origin, + who: RuntimeOrigin, hash: Block::Hash, number: NumberFor, justifications: Justifications, diff --git a/pallets/collator-selection/src/lib.rs b/pallets/collator-selection/src/lib.rs index 44a81ff14b4..16440344846 100644 --- a/pallets/collator-selection/src/lib.rs +++ b/pallets/collator-selection/src/lib.rs @@ -117,7 +117,7 @@ pub mod pallet { type Currency: ReservableCurrency; /// Origin that can dictate updating parameters of this pallet. - type UpdateOrigin: EnsureOrigin; + type UpdateOrigin: EnsureOrigin; /// Account Identifier from which the internal Pot is generated. type PotId: Get; diff --git a/pallets/collator-selection/src/mock.rs b/pallets/collator-selection/src/mock.rs index deac932ac21..4b3cc497731 100644 --- a/pallets/collator-selection/src/mock.rs +++ b/pallets/collator-selection/src/mock.rs @@ -59,7 +59,7 @@ impl system::Config for Test { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; diff --git a/pallets/collator-selection/src/tests.rs b/pallets/collator-selection/src/tests.rs index 730bfd489c6..459b107ecc5 100644 --- a/pallets/collator-selection/src/tests.rs +++ b/pallets/collator-selection/src/tests.rs @@ -38,14 +38,14 @@ fn it_should_set_invulnerables() { new_test_ext().execute_with(|| { let new_set = vec![1, 2, 3, 4]; assert_ok!(CollatorSelection::set_invulnerables( - Origin::signed(RootAccount::get()), + RuntimeOrigin::signed(RootAccount::get()), new_set.clone() )); assert_eq!(CollatorSelection::invulnerables(), new_set); // cannot set with non-root. assert_noop!( - CollatorSelection::set_invulnerables(Origin::signed(1), new_set.clone()), + CollatorSelection::set_invulnerables(RuntimeOrigin::signed(1), new_set.clone()), BadOrigin ); @@ -53,7 +53,7 @@ fn it_should_set_invulnerables() { let invulnerables = vec![7]; assert_noop!( CollatorSelection::set_invulnerables( - Origin::signed(RootAccount::get()), + RuntimeOrigin::signed(RootAccount::get()), invulnerables.clone() ), Error::::ValidatorNotRegistered @@ -69,13 +69,16 @@ fn set_desired_candidates_works() { // can set assert_ok!(CollatorSelection::set_desired_candidates( - Origin::signed(RootAccount::get()), + RuntimeOrigin::signed(RootAccount::get()), 7 )); assert_eq!(CollatorSelection::desired_candidates(), 7); // rejects bad origin - assert_noop!(CollatorSelection::set_desired_candidates(Origin::signed(1), 8), BadOrigin); + assert_noop!( + CollatorSelection::set_desired_candidates(RuntimeOrigin::signed(1), 8), + BadOrigin + ); }); } @@ -86,11 +89,14 @@ fn set_candidacy_bond() { assert_eq!(CollatorSelection::candidacy_bond(), 10); // can set - assert_ok!(CollatorSelection::set_candidacy_bond(Origin::signed(RootAccount::get()), 7)); + assert_ok!(CollatorSelection::set_candidacy_bond( + RuntimeOrigin::signed(RootAccount::get()), + 7 + )); assert_eq!(CollatorSelection::candidacy_bond(), 7); // rejects bad origin. - assert_noop!(CollatorSelection::set_candidacy_bond(Origin::signed(1), 8), BadOrigin); + assert_noop!(CollatorSelection::set_candidacy_bond(RuntimeOrigin::signed(1), 8), BadOrigin); }); } @@ -102,17 +108,17 @@ fn cannot_register_candidate_if_too_many() { // can't accept anyone anymore. assert_noop!( - CollatorSelection::register_as_candidate(Origin::signed(3)), + CollatorSelection::register_as_candidate(RuntimeOrigin::signed(3)), Error::::TooManyCandidates, ); // reset desired candidates: >::put(1); - assert_ok!(CollatorSelection::register_as_candidate(Origin::signed(4))); + assert_ok!(CollatorSelection::register_as_candidate(RuntimeOrigin::signed(4))); // but no more assert_noop!( - CollatorSelection::register_as_candidate(Origin::signed(5)), + CollatorSelection::register_as_candidate(RuntimeOrigin::signed(5)), Error::::TooManyCandidates, ); }) @@ -123,11 +129,11 @@ fn cannot_unregister_candidate_if_too_few() { new_test_ext().execute_with(|| { // reset desired candidates: >::put(1); - assert_ok!(CollatorSelection::register_as_candidate(Origin::signed(4))); + assert_ok!(CollatorSelection::register_as_candidate(RuntimeOrigin::signed(4))); // can not remove too few assert_noop!( - CollatorSelection::leave_intent(Origin::signed(4)), + CollatorSelection::leave_intent(RuntimeOrigin::signed(4)), Error::::TooFewCandidates, ); }) @@ -140,7 +146,7 @@ fn cannot_register_as_candidate_if_invulnerable() { // can't 1 because it is invulnerable. assert_noop!( - CollatorSelection::register_as_candidate(Origin::signed(1)), + CollatorSelection::register_as_candidate(RuntimeOrigin::signed(1)), Error::::AlreadyInvulnerable, ); }) @@ -151,7 +157,7 @@ fn cannot_register_as_candidate_if_keys_not_registered() { new_test_ext().execute_with(|| { // can't 7 because keys not registered. assert_noop!( - CollatorSelection::register_as_candidate(Origin::signed(7)), + CollatorSelection::register_as_candidate(RuntimeOrigin::signed(7)), Error::::ValidatorNotRegistered ); }) @@ -161,7 +167,7 @@ fn cannot_register_as_candidate_if_keys_not_registered() { fn cannot_register_dupe_candidate() { new_test_ext().execute_with(|| { // can add 3 as candidate - assert_ok!(CollatorSelection::register_as_candidate(Origin::signed(3))); + assert_ok!(CollatorSelection::register_as_candidate(RuntimeOrigin::signed(3))); let addition = CandidateInfo { who: 3, deposit: 10 }; assert_eq!(CollatorSelection::candidates(), vec![addition]); assert_eq!(CollatorSelection::last_authored_block(3), 10); @@ -169,7 +175,7 @@ fn cannot_register_dupe_candidate() { // but no more assert_noop!( - CollatorSelection::register_as_candidate(Origin::signed(3)), + CollatorSelection::register_as_candidate(RuntimeOrigin::signed(3)), Error::::AlreadyCandidate, ); }) @@ -182,11 +188,11 @@ fn cannot_register_as_candidate_if_poor() { assert_eq!(Balances::free_balance(&33), 0); // works - assert_ok!(CollatorSelection::register_as_candidate(Origin::signed(3))); + assert_ok!(CollatorSelection::register_as_candidate(RuntimeOrigin::signed(3))); // poor assert_noop!( - CollatorSelection::register_as_candidate(Origin::signed(33)), + CollatorSelection::register_as_candidate(RuntimeOrigin::signed(33)), BalancesError::::InsufficientBalance, ); }); @@ -205,8 +211,8 @@ fn register_as_candidate_works() { assert_eq!(Balances::free_balance(&3), 100); assert_eq!(Balances::free_balance(&4), 100); - assert_ok!(CollatorSelection::register_as_candidate(Origin::signed(3))); - assert_ok!(CollatorSelection::register_as_candidate(Origin::signed(4))); + assert_ok!(CollatorSelection::register_as_candidate(RuntimeOrigin::signed(3))); + assert_ok!(CollatorSelection::register_as_candidate(RuntimeOrigin::signed(4))); assert_eq!(Balances::free_balance(&3), 90); assert_eq!(Balances::free_balance(&4), 90); @@ -219,21 +225,21 @@ fn register_as_candidate_works() { fn leave_intent() { new_test_ext().execute_with(|| { // register a candidate. - assert_ok!(CollatorSelection::register_as_candidate(Origin::signed(3))); + assert_ok!(CollatorSelection::register_as_candidate(RuntimeOrigin::signed(3))); assert_eq!(Balances::free_balance(3), 90); // register too so can leave above min candidates - assert_ok!(CollatorSelection::register_as_candidate(Origin::signed(5))); + assert_ok!(CollatorSelection::register_as_candidate(RuntimeOrigin::signed(5))); assert_eq!(Balances::free_balance(5), 90); // cannot leave if not candidate. assert_noop!( - CollatorSelection::leave_intent(Origin::signed(4)), + CollatorSelection::leave_intent(RuntimeOrigin::signed(4)), Error::::NotCandidate ); // bond is returned - assert_ok!(CollatorSelection::leave_intent(Origin::signed(3))); + assert_ok!(CollatorSelection::leave_intent(RuntimeOrigin::signed(3))); assert_eq!(Balances::free_balance(3), 100); assert_eq!(CollatorSelection::last_authored_block(3), 0); }); @@ -247,7 +253,7 @@ fn authorship_event_handler() { // 4 is the default author. assert_eq!(Balances::free_balance(4), 100); - assert_ok!(CollatorSelection::register_as_candidate(Origin::signed(4))); + assert_ok!(CollatorSelection::register_as_candidate(RuntimeOrigin::signed(4))); // triggers `note_author` Authorship::on_initialize(1); @@ -272,7 +278,7 @@ fn fees_edgecases() { Balances::make_free_balance_be(&CollatorSelection::account_id(), 5); // 4 is the default author. assert_eq!(Balances::free_balance(4), 100); - assert_ok!(CollatorSelection::register_as_candidate(Origin::signed(4))); + assert_ok!(CollatorSelection::register_as_candidate(RuntimeOrigin::signed(4))); // triggers `note_author` Authorship::on_initialize(1); @@ -301,7 +307,7 @@ fn session_management_works() { assert_eq!(SessionHandlerCollators::get(), vec![1, 2]); // add a new collator - assert_ok!(CollatorSelection::register_as_candidate(Origin::signed(3))); + assert_ok!(CollatorSelection::register_as_candidate(RuntimeOrigin::signed(3))); // session won't see this. assert_eq!(SessionHandlerCollators::get(), vec![1, 2]); @@ -328,8 +334,8 @@ fn session_management_works() { fn kick_mechanism() { new_test_ext().execute_with(|| { // add a new collator - assert_ok!(CollatorSelection::register_as_candidate(Origin::signed(3))); - assert_ok!(CollatorSelection::register_as_candidate(Origin::signed(4))); + assert_ok!(CollatorSelection::register_as_candidate(RuntimeOrigin::signed(3))); + assert_ok!(CollatorSelection::register_as_candidate(RuntimeOrigin::signed(4))); initialize_to_block(10); assert_eq!(CollatorSelection::candidates().len(), 2); initialize_to_block(20); @@ -353,8 +359,8 @@ fn kick_mechanism() { fn should_not_kick_mechanism_too_few() { new_test_ext().execute_with(|| { // add a new collator - assert_ok!(CollatorSelection::register_as_candidate(Origin::signed(3))); - assert_ok!(CollatorSelection::register_as_candidate(Origin::signed(5))); + assert_ok!(CollatorSelection::register_as_candidate(RuntimeOrigin::signed(3))); + assert_ok!(CollatorSelection::register_as_candidate(RuntimeOrigin::signed(5))); initialize_to_block(10); assert_eq!(CollatorSelection::candidates().len(), 2); initialize_to_block(20); diff --git a/pallets/dmp-queue/src/lib.rs b/pallets/dmp-queue/src/lib.rs index 06b0c13ff18..cfcae5f3ad8 100644 --- a/pallets/dmp-queue/src/lib.rs +++ b/pallets/dmp-queue/src/lib.rs @@ -90,7 +90,7 @@ pub mod pallet { type XcmExecutor: ExecuteXcm; /// Origin which is allowed to execute overweight messages. - type ExecuteOverweightOrigin: EnsureOrigin; + type ExecuteOverweightOrigin: EnsureOrigin; } /// The configuration. @@ -387,7 +387,7 @@ mod tests { type AccountId = u64; impl frame_system::Config for Test { - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; @@ -744,15 +744,23 @@ mod tests { assert_eq!(overweights(), vec![0]); assert_noop!( - DmpQueue::service_overweight(Origin::signed(1), 0, Weight::from_ref_time(20000)), + DmpQueue::service_overweight( + RuntimeOrigin::signed(1), + 0, + Weight::from_ref_time(20000) + ), BadOrigin ); assert_noop!( - DmpQueue::service_overweight(Origin::root(), 1, Weight::from_ref_time(20000)), + DmpQueue::service_overweight( + RuntimeOrigin::root(), + 1, + Weight::from_ref_time(20000) + ), Error::::Unknown ); assert_noop!( - DmpQueue::service_overweight(Origin::root(), 0, Weight::from_ref_time(9999)), + DmpQueue::service_overweight(RuntimeOrigin::root(), 0, Weight::from_ref_time(9999)), Error::::OverLimit ); assert_eq!(take_trace(), vec![msg_limit_reached(10000)]); @@ -762,16 +770,23 @@ mod tests { .get_dispatch_info() .weight; use frame_support::dispatch::GetDispatchInfo; - let info = - DmpQueue::service_overweight(Origin::root(), 0, Weight::from_ref_time(20000)) - .unwrap(); + let info = DmpQueue::service_overweight( + RuntimeOrigin::root(), + 0, + Weight::from_ref_time(20000), + ) + .unwrap(); let actual_weight = info.actual_weight.unwrap(); assert_eq!(actual_weight, base_weight + Weight::from_ref_time(10000)); assert_eq!(take_trace(), vec![msg_complete(10000)]); assert!(overweights().is_empty()); assert_noop!( - DmpQueue::service_overweight(Origin::root(), 0, Weight::from_ref_time(20000)), + DmpQueue::service_overweight( + RuntimeOrigin::root(), + 0, + Weight::from_ref_time(20000) + ), Error::::Unknown ); }); diff --git a/pallets/parachain-system/src/tests.rs b/pallets/parachain-system/src/tests.rs index 5bb3c965e6c..9b4b24a242d 100755 --- a/pallets/parachain-system/src/tests.rs +++ b/pallets/parachain-system/src/tests.rs @@ -73,7 +73,7 @@ parameter_types! { pub const ReservedDmpWeight: Weight = Weight::zero(); } impl frame_system::Config for Test { - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; diff --git a/pallets/xcmp-queue/src/lib.rs b/pallets/xcmp-queue/src/lib.rs index bd48fa7c993..22d1d4c1bb6 100644 --- a/pallets/xcmp-queue/src/lib.rs +++ b/pallets/xcmp-queue/src/lib.rs @@ -90,14 +90,14 @@ pub mod pallet { type VersionWrapper: WrapVersion; /// The origin that is allowed to execute overweight messages. - type ExecuteOverweightOrigin: EnsureOrigin; + type ExecuteOverweightOrigin: EnsureOrigin; /// The origin that is allowed to resume or suspend the XCMP queue. - type ControllerOrigin: EnsureOrigin; + type ControllerOrigin: EnsureOrigin; /// The conversion function used to attempt to convert an XCM `MultiLocation` origin to a /// superuser origin. - type ControllerOriginConverter: ConvertOrigin; + type ControllerOriginConverter: ConvertOrigin; /// The weight information of this pallet. type WeightInfo: WeightInfo; diff --git a/pallets/xcmp-queue/src/mock.rs b/pallets/xcmp-queue/src/mock.rs index cc591c37fcd..c07ae0a29cb 100644 --- a/pallets/xcmp-queue/src/mock.rs +++ b/pallets/xcmp-queue/src/mock.rs @@ -62,7 +62,7 @@ impl frame_system::Config for Test { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; @@ -160,12 +160,14 @@ pub type XcmRouter = ( XcmpQueue, ); -pub struct SystemParachainAsSuperuser(PhantomData); -impl ConvertOrigin for SystemParachainAsSuperuser { +pub struct SystemParachainAsSuperuser(PhantomData); +impl ConvertOrigin + for SystemParachainAsSuperuser +{ fn convert_origin( origin: impl Into, kind: OriginKind, - ) -> Result { + ) -> Result { let origin = origin.into(); if kind == OriginKind::Superuser && matches!( @@ -175,7 +177,7 @@ impl ConvertOrigin for SystemParachainAsSuperuser; type ControllerOrigin = EnsureRoot; - type ControllerOriginConverter = SystemParachainAsSuperuser; + type ControllerOriginConverter = SystemParachainAsSuperuser; type WeightInfo = (); } diff --git a/pallets/xcmp-queue/src/tests.rs b/pallets/xcmp-queue/src/tests.rs index 9d5288ce439..1b6303ddaf1 100644 --- a/pallets/xcmp-queue/src/tests.rs +++ b/pallets/xcmp-queue/src/tests.rs @@ -16,7 +16,7 @@ use super::*; use cumulus_primitives_core::XcmpMessageHandler; use frame_support::{assert_noop, assert_ok}; -use mock::{new_test_ext, Origin, RuntimeCall, Test, XcmpQueue}; +use mock::{new_test_ext, RuntimeCall, RuntimeOrigin, Test, XcmpQueue}; use sp_runtime::traits::BadOrigin; #[test] @@ -96,7 +96,7 @@ fn handle_invalid_data() { fn service_overweight_unknown() { new_test_ext().execute_with(|| { assert_noop!( - XcmpQueue::service_overweight(Origin::root(), 0, Weight::from_ref_time(1000)), + XcmpQueue::service_overweight(RuntimeOrigin::root(), 0, Weight::from_ref_time(1000)), Error::::BadOverweightIndex, ); }); @@ -109,7 +109,7 @@ fn service_overweight_bad_xcm_format() { Overweight::::insert(0, (ParaId::from(1000), 0, bad_xcm)); assert_noop!( - XcmpQueue::service_overweight(Origin::root(), 0, Weight::from_ref_time(1000)), + XcmpQueue::service_overweight(RuntimeOrigin::root(), 0, Weight::from_ref_time(1000)), Error::::BadXcm ); }); @@ -148,8 +148,8 @@ fn update_suspend_threshold_works() { new_test_ext().execute_with(|| { let data: QueueConfigData = >::get(); assert_eq!(data.suspend_threshold, 2); - assert_ok!(XcmpQueue::update_suspend_threshold(Origin::root(), 3)); - assert_noop!(XcmpQueue::update_suspend_threshold(Origin::signed(2), 5), BadOrigin); + assert_ok!(XcmpQueue::update_suspend_threshold(RuntimeOrigin::root(), 3)); + assert_noop!(XcmpQueue::update_suspend_threshold(RuntimeOrigin::signed(2), 5), BadOrigin); let data: QueueConfigData = >::get(); assert_eq!(data.suspend_threshold, 3); @@ -161,8 +161,8 @@ fn update_drop_threshold_works() { new_test_ext().execute_with(|| { let data: QueueConfigData = >::get(); assert_eq!(data.drop_threshold, 5); - assert_ok!(XcmpQueue::update_drop_threshold(Origin::root(), 6)); - assert_noop!(XcmpQueue::update_drop_threshold(Origin::signed(2), 7), BadOrigin); + assert_ok!(XcmpQueue::update_drop_threshold(RuntimeOrigin::root(), 6)); + assert_noop!(XcmpQueue::update_drop_threshold(RuntimeOrigin::signed(2), 7), BadOrigin); let data: QueueConfigData = >::get(); assert_eq!(data.drop_threshold, 6); @@ -174,8 +174,8 @@ fn update_resume_threshold_works() { new_test_ext().execute_with(|| { let data: QueueConfigData = >::get(); assert_eq!(data.resume_threshold, 1); - assert_ok!(XcmpQueue::update_resume_threshold(Origin::root(), 2)); - assert_noop!(XcmpQueue::update_resume_threshold(Origin::signed(7), 3), BadOrigin); + assert_ok!(XcmpQueue::update_resume_threshold(RuntimeOrigin::root(), 2)); + assert_noop!(XcmpQueue::update_resume_threshold(RuntimeOrigin::signed(7), 3), BadOrigin); let data: QueueConfigData = >::get(); assert_eq!(data.resume_threshold, 2); @@ -188,12 +188,12 @@ fn update_threshold_weight_works() { let data: QueueConfigData = >::get(); assert_eq!(data.threshold_weight, Weight::from_ref_time(100_000)); assert_ok!(XcmpQueue::update_threshold_weight( - Origin::root(), + RuntimeOrigin::root(), Weight::from_ref_time(10_000) )); assert_noop!( XcmpQueue::update_threshold_weight( - Origin::signed(5), + RuntimeOrigin::signed(5), Weight::from_ref_time(10_000_000) ), BadOrigin @@ -210,11 +210,14 @@ fn update_weight_restrict_decay_works() { let data: QueueConfigData = >::get(); assert_eq!(data.weight_restrict_decay, Weight::from_ref_time(2)); assert_ok!(XcmpQueue::update_weight_restrict_decay( - Origin::root(), + RuntimeOrigin::root(), Weight::from_ref_time(5) )); assert_noop!( - XcmpQueue::update_weight_restrict_decay(Origin::signed(6), Weight::from_ref_time(4)), + XcmpQueue::update_weight_restrict_decay( + RuntimeOrigin::signed(6), + Weight::from_ref_time(4) + ), BadOrigin ); let data: QueueConfigData = >::get(); @@ -229,12 +232,12 @@ fn update_xcmp_max_individual_weight() { let data: QueueConfigData = >::get(); assert_eq!(data.xcmp_max_individual_weight, 20u64 * WEIGHT_PER_MILLIS); assert_ok!(XcmpQueue::update_xcmp_max_individual_weight( - Origin::root(), + RuntimeOrigin::root(), 30u64 * WEIGHT_PER_MILLIS )); assert_noop!( XcmpQueue::update_xcmp_max_individual_weight( - Origin::signed(3), + RuntimeOrigin::signed(3), 10u64 * WEIGHT_PER_MILLIS ), BadOrigin diff --git a/parachain-template/pallets/template/src/mock.rs b/parachain-template/pallets/template/src/mock.rs index 5debcc4a1c3..4a7ebac0fa8 100644 --- a/parachain-template/pallets/template/src/mock.rs +++ b/parachain-template/pallets/template/src/mock.rs @@ -32,7 +32,7 @@ impl system::Config for Test { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; diff --git a/parachain-template/pallets/template/src/tests.rs b/parachain-template/pallets/template/src/tests.rs index 22056586017..527aec8ed00 100644 --- a/parachain-template/pallets/template/src/tests.rs +++ b/parachain-template/pallets/template/src/tests.rs @@ -5,7 +5,7 @@ use frame_support::{assert_noop, assert_ok}; fn it_works_for_default_value() { new_test_ext().execute_with(|| { // Dispatch a signed extrinsic. - assert_ok!(TemplateModule::do_something(Origin::signed(1), 42)); + assert_ok!(TemplateModule::do_something(RuntimeOrigin::signed(1), 42)); // Read pallet storage and assert an expected result. assert_eq!(TemplateModule::something(), Some(42)); }); @@ -15,6 +15,9 @@ fn it_works_for_default_value() { fn correct_error_for_none_value() { new_test_ext().execute_with(|| { // Ensure the expected error is thrown when no value is present. - assert_noop!(TemplateModule::cause_error(Origin::signed(1)), Error::::NoneValue); + assert_noop!( + TemplateModule::cause_error(RuntimeOrigin::signed(1)), + Error::::NoneValue + ); }); } diff --git a/parachain-template/runtime/src/lib.rs b/parachain-template/runtime/src/lib.rs index 253bb2d7125..fc0c354f7e4 100644 --- a/parachain-template/runtime/src/lib.rs +++ b/parachain-template/runtime/src/lib.rs @@ -277,7 +277,7 @@ impl frame_system::Config for Runtime { /// The ubiquitous event type. type RuntimeEvent = RuntimeEvent; /// The ubiquitous origin type. - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; /// Maximum number of block number to block hash mappings to keep (oldest pruned first). type BlockHashCount = BlockHashCount; /// Runtime version. diff --git a/parachain-template/runtime/src/xcm_config.rs b/parachain-template/runtime/src/xcm_config.rs index fb2e59bb9a2..c06bfb9532f 100644 --- a/parachain-template/runtime/src/xcm_config.rs +++ b/parachain-template/runtime/src/xcm_config.rs @@ -1,6 +1,6 @@ use super::{ - AccountId, Balances, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, - RuntimeEvent, WeightToFee, XcmpQueue, + AccountId, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, + RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, }; use core::marker::PhantomData; use frame_support::{ @@ -23,7 +23,7 @@ use xcm_executor::{traits::ShouldExecute, XcmExecutor}; parameter_types! { pub const RelayLocation: MultiLocation = MultiLocation::parent(); pub const RelayNetwork: NetworkId = NetworkId::Any; - pub RelayChainOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into(); + pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); } @@ -60,18 +60,18 @@ pub type XcmOriginToTransactDispatchOrigin = ( // Sovereign account converter; this attempts to derive an `AccountId` from the origin location // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for // foreign chains who want to have a local sovereign account on this chain which they control. - SovereignSignedViaLocation, + SovereignSignedViaLocation, // Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when // recognized. - RelayChainAsNative, + RelayChainAsNative, // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when // recognized. - SiblingParachainAsNative, + SiblingParachainAsNative, // Native signed account converter; this just converts an `AccountId32` origin into a normal - // `Origin::Signed` origin of the same 32-byte value. - SignedAccountId32AsNative, + // `RuntimeOrigin::Signed` origin of the same 32-byte value. + SignedAccountId32AsNative, // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. - XcmPassthrough, + XcmPassthrough, ); parameter_types! { @@ -183,7 +183,7 @@ impl xcm_executor::Config for XcmConfig { } /// No local origins on this chain are allowed to dispatch XCM sends/executions. -pub type LocalOriginToLocation = SignedToAccountId32; +pub type LocalOriginToLocation = SignedToAccountId32; /// The means for routing XCM messages which are not for local execution into the right message /// queues. @@ -196,9 +196,9 @@ pub type XcmRouter = ( impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type SendXcmOrigin = EnsureXcmOrigin; + type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; - type ExecuteXcmOrigin = EnsureXcmOrigin; + type ExecuteXcmOrigin = EnsureXcmOrigin; type XcmExecuteFilter = Nothing; // ^ Disable dispatchable execute on the XCM pallet. // Needs to be `Everything` for local testing. @@ -207,7 +207,7 @@ impl pallet_xcm::Config for Runtime { type XcmReserveTransferFilter = Nothing; type Weigher = FixedWeightBounds; type LocationInverter = LocationInverter; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; diff --git a/parachains/common/src/impls.rs b/parachains/common/src/impls.rs index c58e32a67e2..80c3015b47a 100644 --- a/parachains/common/src/impls.rs +++ b/parachains/common/src/impls.rs @@ -153,7 +153,7 @@ mod tests { impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type Index = u64; type BlockNumber = u64; type RuntimeCall = RuntimeCall; diff --git a/parachains/pallets/ping/src/lib.rs b/parachains/pallets/ping/src/lib.rs index 5e20a94c078..1ef9938e5c7 100644 --- a/parachains/pallets/ping/src/lib.rs +++ b/parachains/pallets/ping/src/lib.rs @@ -49,8 +49,8 @@ pub mod pallet { /// The overarching event type. type RuntimeEvent: From> + IsType<::RuntimeEvent>; - type Origin: From<::Origin> - + Into::Origin>>; + type RuntimeOrigin: From<::RuntimeOrigin> + + Into::RuntimeOrigin>>; /// The overarching call type; we assume sibling chains use the same type. type RuntimeCall: From> + Encode; @@ -190,7 +190,7 @@ pub mod pallet { #[pallet::weight(0)] pub fn ping(origin: OriginFor, seq: u32, payload: Vec) -> DispatchResult { // Only accept pings from other chains. - let para = ensure_sibling_para(::Origin::from(origin))?; + let para = ensure_sibling_para(::RuntimeOrigin::from(origin))?; Self::deposit_event(Event::Pinged(para, seq, payload.clone())); match T::XcmSender::send_xcm( @@ -215,7 +215,7 @@ pub mod pallet { #[pallet::weight(0)] pub fn pong(origin: OriginFor, seq: u32, payload: Vec) -> DispatchResult { // Only accept pings from other chains. - let para = ensure_sibling_para(::Origin::from(origin))?; + let para = ensure_sibling_para(::RuntimeOrigin::from(origin))?; if let Some(sent_at) = Pings::::take(seq) { Self::deposit_event(Event::Ponged( diff --git a/parachains/runtimes/assets/statemine/src/lib.rs b/parachains/runtimes/assets/statemine/src/lib.rs index 6a316fd5fa2..4271985c243 100644 --- a/parachains/runtimes/assets/statemine/src/lib.rs +++ b/parachains/runtimes/assets/statemine/src/lib.rs @@ -139,7 +139,7 @@ impl frame_system::Config for Runtime { type Hashing = BlakeTwo256; type Header = Header; type RuntimeEvent = RuntimeEvent; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type BlockHashCount = BlockHashCount; type DbWeight = RocksDbWeight; type Version = Version; diff --git a/parachains/runtimes/assets/statemine/src/xcm_config.rs b/parachains/runtimes/assets/statemine/src/xcm_config.rs index 5036b889c1c..e4b8fd99fa0 100644 --- a/parachains/runtimes/assets/statemine/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemine/src/xcm_config.rs @@ -14,8 +14,8 @@ // limitations under the License. use super::{ - AccountId, AssetId, Assets, Authorship, Balance, Balances, Origin, ParachainInfo, - ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, WeightToFee, XcmpQueue, + AccountId, AssetId, Assets, Authorship, Balance, Balances, ParachainInfo, ParachainSystem, + PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -45,7 +45,7 @@ use xcm_executor::{traits::JustTry, XcmExecutor}; parameter_types! { pub const KsmLocation: MultiLocation = MultiLocation::parent(); pub const RelayNetwork: NetworkId = NetworkId::Kusama; - pub RelayChainOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into(); + pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); pub const Local: MultiLocation = Here.into(); pub AssetsPalletLocation: MultiLocation = @@ -110,21 +110,21 @@ pub type XcmOriginToTransactDispatchOrigin = ( // Sovereign account converter; this attempts to derive an `AccountId` from the origin location // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for // foreign chains who want to have a local sovereign account on this chain which they control. - SovereignSignedViaLocation, + SovereignSignedViaLocation, // Native converter for Relay-chain (Parent) location; will convert to a `Relay` origin when // recognised. - RelayChainAsNative, + RelayChainAsNative, // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when // recognised. - SiblingParachainAsNative, + SiblingParachainAsNative, // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a // transaction from the Root origin. - ParentAsSuperuser, + ParentAsSuperuser, // Native signed account converter; this just converts an `AccountId32` origin into a normal - // `Origin::Signed` origin of the same 32-byte value. - SignedAccountId32AsNative, + // `RuntimeOrigin::Signed` origin of the same 32-byte value. + SignedAccountId32AsNative, // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. - XcmPassthrough, + XcmPassthrough, ); parameter_types! { @@ -206,7 +206,7 @@ impl xcm_executor::Config for XcmConfig { /// Converts a local signed origin into an XCM multilocation. /// Forms the basis for local origins sending/executing XCMs. -pub type LocalOriginToLocation = SignedToAccountId32; +pub type LocalOriginToLocation = SignedToAccountId32; /// The means for routing XCM messages which are not for local execution into the right message /// queues. @@ -220,10 +220,10 @@ pub type XcmRouter = ( impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; // We want to disallow users sending (arbitrary) XCMs from this chain. - type SendXcmOrigin = EnsureXcmOrigin; + type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; // We support local origins dispatching XCM executions in principle... - type ExecuteXcmOrigin = EnsureXcmOrigin; + type ExecuteXcmOrigin = EnsureXcmOrigin; // ... but disallow generic XCM execution. As a result only teleports and reserve transfers are allowed. type XcmExecuteFilter = Nothing; type XcmExecutor = XcmExecutor; @@ -236,7 +236,7 @@ impl pallet_xcm::Config for Runtime { >; type LocationInverter = LocationInverter; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; diff --git a/parachains/runtimes/assets/statemint/src/lib.rs b/parachains/runtimes/assets/statemint/src/lib.rs index ae4cba4a347..b5f8b081ef8 100644 --- a/parachains/runtimes/assets/statemint/src/lib.rs +++ b/parachains/runtimes/assets/statemint/src/lib.rs @@ -169,7 +169,7 @@ impl frame_system::Config for Runtime { type Hashing = BlakeTwo256; type Header = Header; type RuntimeEvent = RuntimeEvent; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type BlockHashCount = BlockHashCount; type DbWeight = RocksDbWeight; type Version = Version; diff --git a/parachains/runtimes/assets/statemint/src/xcm_config.rs b/parachains/runtimes/assets/statemint/src/xcm_config.rs index a7932e69dea..eaaa04f2f67 100644 --- a/parachains/runtimes/assets/statemint/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemint/src/xcm_config.rs @@ -14,8 +14,8 @@ // limitations under the License. use super::{ - AccountId, AssetId, Assets, Authorship, Balance, Balances, Origin, ParachainInfo, - ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, WeightToFee, XcmpQueue, + AccountId, AssetId, Assets, Authorship, Balance, Balances, ParachainInfo, ParachainSystem, + PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -42,7 +42,7 @@ use xcm_executor::{traits::JustTry, XcmExecutor}; parameter_types! { pub const DotLocation: MultiLocation = MultiLocation::parent(); pub const RelayNetwork: NetworkId = NetworkId::Polkadot; - pub RelayChainOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into(); + pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); pub const Local: MultiLocation = Here.into(); pub AssetsPalletLocation: MultiLocation = @@ -107,21 +107,21 @@ pub type XcmOriginToTransactDispatchOrigin = ( // Sovereign account converter; this attempts to derive an `AccountId` from the origin location // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for // foreign chains who want to have a local sovereign account on this chain which they control. - SovereignSignedViaLocation, + SovereignSignedViaLocation, // Native converter for Relay-chain (Parent) location; will convert to a `Relay` origin when // recognised. - RelayChainAsNative, + RelayChainAsNative, // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when // recognised. - SiblingParachainAsNative, + SiblingParachainAsNative, // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a // transaction from the Root origin. - ParentAsSuperuser, + ParentAsSuperuser, // Native signed account converter; this just converts an `AccountId32` origin into a normal - // `Origin::Signed` origin of the same 32-byte value. - SignedAccountId32AsNative, + // `RuntimeOrigin::Signed` origin of the same 32-byte value. + SignedAccountId32AsNative, // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. - XcmPassthrough, + XcmPassthrough, ); parameter_types! { @@ -182,7 +182,7 @@ impl xcm_executor::Config for XcmConfig { /// Converts a local signed origin into an XCM multilocation. /// Forms the basis for local origins sending/executing XCMs. -pub type LocalOriginToLocation = SignedToAccountId32; +pub type LocalOriginToLocation = SignedToAccountId32; /// The means for routing XCM messages which are not for local execution into the right message /// queues. @@ -196,10 +196,10 @@ pub type XcmRouter = ( impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; // We want to disallow users sending (arbitrary) XCMs from this chain. - type SendXcmOrigin = EnsureXcmOrigin; + type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; // We support local origins dispatching XCM executions in principle... - type ExecuteXcmOrigin = EnsureXcmOrigin; + type ExecuteXcmOrigin = EnsureXcmOrigin; // ... but disallow generic XCM execution. As a result only teleports and reserve transfers are allowed. type XcmExecuteFilter = Nothing; type XcmExecutor = XcmExecutor; @@ -211,7 +211,7 @@ impl pallet_xcm::Config for Runtime { MaxInstructions, >; type LocationInverter = LocationInverter; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; diff --git a/parachains/runtimes/assets/test-utils/src/lib.rs b/parachains/runtimes/assets/test-utils/src/lib.rs index f37465e5bd6..fb4750bae9e 100644 --- a/parachains/runtimes/assets/test-utils/src/lib.rs +++ b/parachains/runtimes/assets/test-utils/src/lib.rs @@ -96,7 +96,7 @@ pub struct RuntimeHelper(PhantomData); impl RuntimeHelper where AccountIdOf: - Into<<::Origin as OriginTrait>::AccountId>, + Into<<::RuntimeOrigin as OriginTrait>::AccountId>, { pub fn run_to_block(n: u32, author: Option) { while frame_system::Pallet::::block_number() < n.into() { @@ -122,13 +122,13 @@ where } } - pub fn root_origin() -> ::Origin { - ::Origin::root() + pub fn root_origin() -> ::RuntimeOrigin { + ::RuntimeOrigin::root() } pub fn origin_of( account_id: AccountIdOf, - ) -> ::Origin { - ::Origin::signed(account_id.into()) + ) -> ::RuntimeOrigin { + ::RuntimeOrigin::signed(account_id.into()) } } diff --git a/parachains/runtimes/assets/westmint/src/lib.rs b/parachains/runtimes/assets/westmint/src/lib.rs index 76989eb593b..25b51f42a95 100644 --- a/parachains/runtimes/assets/westmint/src/lib.rs +++ b/parachains/runtimes/assets/westmint/src/lib.rs @@ -137,7 +137,7 @@ impl frame_system::Config for Runtime { type Hashing = BlakeTwo256; type Header = Header; type RuntimeEvent = RuntimeEvent; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type BlockHashCount = BlockHashCount; type DbWeight = RocksDbWeight; type Version = Version; diff --git a/parachains/runtimes/assets/westmint/src/xcm_config.rs b/parachains/runtimes/assets/westmint/src/xcm_config.rs index bd869c977b8..6b36b797207 100644 --- a/parachains/runtimes/assets/westmint/src/xcm_config.rs +++ b/parachains/runtimes/assets/westmint/src/xcm_config.rs @@ -14,8 +14,8 @@ // limitations under the License. use super::{ - AccountId, AssetId, Assets, Authorship, Balance, Balances, Origin, ParachainInfo, - ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, WeightToFee, XcmpQueue, + AccountId, AssetId, Assets, Authorship, Balance, Balances, ParachainInfo, ParachainSystem, + PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -46,7 +46,7 @@ parameter_types! { pub const WestendLocation: MultiLocation = MultiLocation::parent(); pub RelayNetwork: NetworkId = NetworkId::Named(b"Westend".to_vec().try_into().expect("less than length limit; qed")); - pub RelayChainOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into(); + pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); pub const Local: MultiLocation = Here.into(); pub AssetsPalletLocation: MultiLocation = @@ -111,21 +111,21 @@ pub type XcmOriginToTransactDispatchOrigin = ( // Sovereign account converter; this attempts to derive an `AccountId` from the origin location // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for // foreign chains who want to have a local sovereign account on this chain which they control. - SovereignSignedViaLocation, + SovereignSignedViaLocation, // Native converter for Relay-chain (Parent) location; will convert to a `Relay` origin when // recognised. - RelayChainAsNative, + RelayChainAsNative, // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when // recognised. - SiblingParachainAsNative, + SiblingParachainAsNative, // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a // transaction from the Root origin. - ParentAsSuperuser, + ParentAsSuperuser, // Native signed account converter; this just converts an `AccountId32` origin into a normal - // `Origin::Signed` origin of the same 32-byte value. - SignedAccountId32AsNative, + // `RuntimeOrigin::Signed` origin of the same 32-byte value. + SignedAccountId32AsNative, // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. - XcmPassthrough, + XcmPassthrough, ); parameter_types! { @@ -202,7 +202,7 @@ impl xcm_executor::Config for XcmConfig { } /// Local origins on this chain are allowed to dispatch XCM sends/executions. -pub type LocalOriginToLocation = SignedToAccountId32; +pub type LocalOriginToLocation = SignedToAccountId32; /// The means for routing XCM messages which are not for local execution into the right message /// queues. @@ -215,9 +215,9 @@ pub type XcmRouter = ( impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type SendXcmOrigin = EnsureXcmOrigin; + type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; - type ExecuteXcmOrigin = EnsureXcmOrigin; + type ExecuteXcmOrigin = EnsureXcmOrigin; type XcmExecuteFilter = Everything; type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; @@ -228,7 +228,7 @@ impl pallet_xcm::Config for Runtime { MaxInstructions, >; type LocationInverter = LocationInverter; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs b/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs index 6810267a679..107e387ed74 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/impls.rs @@ -52,7 +52,7 @@ where T: pallet_xcm::Config + frame_system::Config + pallet_alliance::Config, [u8; 32]: From>, BalanceOf: Into, - <::Origin as OriginTrait>::AccountId: From>, + <::RuntimeOrigin as OriginTrait>::AccountId: From>, { fn on_unbalanced(amount: NegativeImbalanceOf) { let temp_account: AccountIdOf = TempAcc::get(); @@ -62,7 +62,7 @@ where >::resolve_creating(&temp_account, amount); let result = pallet_xcm::Pallet::::teleport_assets( - ::Origin::signed(temp_account.into()), + ::RuntimeOrigin::signed(temp_account.into()), Box::new(Parent.into()), Box::new( Junction::AccountId32 { network: NetworkId::Any, id: treasury_acc.into() } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs index b9bbf842798..604329a0ca9 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs @@ -162,7 +162,7 @@ impl frame_system::Config for Runtime { type Hashing = BlakeTwo256; type Header = Header; type RuntimeEvent = RuntimeEvent; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type BlockHashCount = BlockHashCount; type DbWeight = RocksDbWeight; type Version = Version; @@ -439,7 +439,7 @@ pub const ALLIANCE_MAX_MEMBERS: u32 = 100; type AllianceCollective = pallet_collective::Instance1; impl pallet_collective::Config for Runtime { - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type Proposal = RuntimeCall; type RuntimeEvent = RuntimeEvent; type MotionDuration = AllianceMotionDuration; diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs index bfcfd9567b2..1192306daa4 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs @@ -14,8 +14,8 @@ // limitations under the License. use super::{ - AccountId, Balances, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, - RuntimeEvent, WeightToFee, XcmpQueue, + AccountId, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, + RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -41,7 +41,7 @@ use xcm_executor::XcmExecutor; parameter_types! { pub const DotLocation: MultiLocation = MultiLocation::parent(); pub const RelayNetwork: NetworkId = NetworkId::Polkadot; - pub RelayChainOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into(); + pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); pub const Local: MultiLocation = Here.into(); pub CheckingAccount: AccountId = PolkadotXcm::check_account(); @@ -80,21 +80,21 @@ pub type XcmOriginToTransactDispatchOrigin = ( // Sovereign account converter; this attempts to derive an `AccountId` from the origin location // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for // foreign chains who want to have a local sovereign account on this chain which they control. - SovereignSignedViaLocation, + SovereignSignedViaLocation, // Native converter for Relay-chain (Parent) location; will convert to a `Relay` origin when // recognised. - RelayChainAsNative, + RelayChainAsNative, // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when // recognised. - SiblingParachainAsNative, + SiblingParachainAsNative, // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a // transaction from the Root origin. - ParentAsSuperuser, + ParentAsSuperuser, // Native signed account converter; this just converts an `AccountId32` origin into a normal - // `Origin::Signed` origin of the same 32-byte value. - SignedAccountId32AsNative, + // `RuntimeOrigin::Signed` origin of the same 32-byte value. + SignedAccountId32AsNative, // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. - XcmPassthrough, + XcmPassthrough, ); parameter_types! { @@ -154,7 +154,7 @@ impl xcm_executor::Config for XcmConfig { /// Converts a local signed origin into an XCM multilocation. /// Forms the basis for local origins sending/executing XCMs. -pub type LocalOriginToLocation = SignedToAccountId32; +pub type LocalOriginToLocation = SignedToAccountId32; /// The means for routing XCM messages which are not for local execution into the right message /// queues. @@ -168,10 +168,10 @@ pub type XcmRouter = ( impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; // We want to disallow users sending (arbitrary) XCMs from this chain. - type SendXcmOrigin = EnsureXcmOrigin; + type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; // We support local origins dispatching XCM executions in principle... - type ExecuteXcmOrigin = EnsureXcmOrigin; + type ExecuteXcmOrigin = EnsureXcmOrigin; // ... but disallow generic XCM execution. As a result only teleports are allowed. type XcmExecuteFilter = Nothing; type XcmExecutor = XcmExecutor; @@ -179,7 +179,7 @@ impl pallet_xcm::Config for Runtime { type XcmReserveTransferFilter = Nothing; // This parachain is not meant as a reserve location. type Weigher = FixedWeightBounds; type LocationInverter = LocationInverter; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; diff --git a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index 1967ef34c9c..0aff6751e17 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -167,7 +167,7 @@ impl frame_system::Config for Runtime { type Hashing = BlakeTwo256; type Header = Header; type RuntimeEvent = RuntimeEvent; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type BlockHashCount = BlockHashCount; type DbWeight = RocksDbWeight; type Version = Version; diff --git a/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs b/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs index fbccf508c1d..14619efb021 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs @@ -14,8 +14,8 @@ // limitations under the License. use super::{ - AccountId, Balances, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, - RuntimeEvent, WeightToFee, XcmpQueue, + AccountId, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, + RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -39,7 +39,7 @@ use xcm_executor::XcmExecutor; parameter_types! { pub const RelayLocation: MultiLocation = MultiLocation::parent(); pub const RelayNetwork: NetworkId = NetworkId::Any; - pub RelayChainOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into(); + pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); pub const Local: MultiLocation = Here.into(); pub CheckingAccount: AccountId = PolkadotXcm::check_account(); @@ -85,21 +85,21 @@ pub type XcmOriginToTransactDispatchOrigin = ( // Sovereign account converter; this attempts to derive an `AccountId` from the origin location // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for // foreign chains who want to have a local sovereign account on this chain which they control. - SovereignSignedViaLocation, + SovereignSignedViaLocation, // Native converter for Relay-chain (Parent) location; will convert to a `Relay` origin when // recognised. - RelayChainAsNative, + RelayChainAsNative, // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when // recognised. - SiblingParachainAsNative, + SiblingParachainAsNative, // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a // transaction from the Root origin. - ParentAsSuperuser, + ParentAsSuperuser, // Native signed account converter; this just converts an `AccountId32` origin into a normal - // `Origin::Signed` origin of the same 32-byte value. - SignedAccountId32AsNative, + // `RuntimeOrigin::Signed` origin of the same 32-byte value. + SignedAccountId32AsNative, // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. - XcmPassthrough, + XcmPassthrough, ); parameter_types! { @@ -153,7 +153,7 @@ impl xcm_executor::Config for XcmConfig { /// Converts a local signed origin into an XCM multilocation. /// Forms the basis for local origins sending/executing XCMs. -pub type LocalOriginToLocation = SignedToAccountId32; +pub type LocalOriginToLocation = SignedToAccountId32; /// The means for routing XCM messages which are not for local execution into the right message /// queues. @@ -167,10 +167,10 @@ pub type XcmRouter = ( impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; // We want to disallow users sending (arbitrary) XCMs from this chain. - type SendXcmOrigin = EnsureXcmOrigin; + type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; // We support local origins dispatching XCM executions in principle... - type ExecuteXcmOrigin = EnsureXcmOrigin; + type ExecuteXcmOrigin = EnsureXcmOrigin; // ... but disallow generic XCM execution. As a result only teleports and reserve transfers are allowed. type XcmExecuteFilter = Nothing; type XcmExecutor = XcmExecutor; @@ -178,7 +178,7 @@ impl pallet_xcm::Config for Runtime { type XcmReserveTransferFilter = Everything; type Weigher = FixedWeightBounds; type LocationInverter = LocationInverter; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; diff --git a/parachains/runtimes/starters/seedling/src/lib.rs b/parachains/runtimes/starters/seedling/src/lib.rs index daab72eba44..d35d96f6748 100644 --- a/parachains/runtimes/starters/seedling/src/lib.rs +++ b/parachains/runtimes/starters/seedling/src/lib.rs @@ -132,7 +132,7 @@ impl frame_system::Config for Runtime { /// The ubiquitous event type. type RuntimeEvent = RuntimeEvent; /// The ubiquitous origin type. - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; /// Maximum number of block number to block hash mappings to keep (oldest pruned first). type BlockHashCount = BlockHashCount; /// Runtime version. diff --git a/parachains/runtimes/starters/shell/src/lib.rs b/parachains/runtimes/starters/shell/src/lib.rs index 8b692c210e3..f75a734c947 100644 --- a/parachains/runtimes/starters/shell/src/lib.rs +++ b/parachains/runtimes/starters/shell/src/lib.rs @@ -140,7 +140,7 @@ impl frame_system::Config for Runtime { /// The ubiquitous event type. type RuntimeEvent = RuntimeEvent; /// The ubiquitous origin type. - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; /// Maximum number of block number to block hash mappings to keep (oldest pruned first). type BlockHashCount = BlockHashCount; /// Runtime version. diff --git a/parachains/runtimes/starters/shell/src/xcm_config.rs b/parachains/runtimes/starters/shell/src/xcm_config.rs index 8e754299aba..2c51387a15c 100644 --- a/parachains/runtimes/starters/shell/src/xcm_config.rs +++ b/parachains/runtimes/starters/shell/src/xcm_config.rs @@ -13,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use super::{AccountId, Origin, ParachainInfo, Runtime, RuntimeCall, RuntimeEvent}; +use super::{AccountId, ParachainInfo, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin}; use frame_support::{match_types, parameter_types}; use xcm::latest::prelude::*; use xcm_builder::{ @@ -34,10 +34,10 @@ pub type XcmOriginToTransactDispatchOrigin = ( // Sovereign account converter; this attempts to derive an `AccountId` from the origin location // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for // foreign chains who want to have a local sovereign account on this chain which they control. - SovereignSignedViaLocation, Origin>, + SovereignSignedViaLocation, RuntimeOrigin>, // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a // transaction from the Root origin. - ParentAsSuperuser, + ParentAsSuperuser, ); match_types! { diff --git a/parachains/runtimes/testing/penpal/src/lib.rs b/parachains/runtimes/testing/penpal/src/lib.rs index d48fc4bf53b..ecaa8a09b6f 100644 --- a/parachains/runtimes/testing/penpal/src/lib.rs +++ b/parachains/runtimes/testing/penpal/src/lib.rs @@ -290,7 +290,7 @@ impl frame_system::Config for Runtime { /// The ubiquitous event type. type RuntimeEvent = RuntimeEvent; /// The ubiquitous origin type. - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; /// Maximum number of block number to block hash mappings to keep (oldest pruned first). type BlockHashCount = BlockHashCount; /// Runtime version. diff --git a/parachains/runtimes/testing/penpal/src/xcm_config.rs b/parachains/runtimes/testing/penpal/src/xcm_config.rs index 5c814be50c1..87159950350 100644 --- a/parachains/runtimes/testing/penpal/src/xcm_config.rs +++ b/parachains/runtimes/testing/penpal/src/xcm_config.rs @@ -22,8 +22,9 @@ //! with statemine as the reserve. At present no derivative tokens are minted on receipt of a //! ReserveAssetTransferDeposited message but that will but the intension will be to support this soon. use super::{ - AccountId, AssetId as AssetIdPalletAssets, Assets, Balance, Balances, Origin, ParachainInfo, - ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, WeightToFee, XcmpQueue, + AccountId, AssetId as AssetIdPalletAssets, Assets, Balance, Balances, ParachainInfo, + ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, + XcmpQueue, }; use core::marker::PhantomData; use frame_support::{ @@ -56,7 +57,7 @@ use xcm_executor::{ parameter_types! { pub const RelayLocation: MultiLocation = MultiLocation::parent(); pub const RelayNetwork: NetworkId = NetworkId::Any; - pub RelayChainOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into(); + pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); } @@ -118,18 +119,18 @@ pub type XcmOriginToTransactDispatchOrigin = ( // Sovereign account converter; this attempts to derive an `AccountId` from the origin location // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for // foreign chains who want to have a local sovereign account on this chain which they control. - SovereignSignedViaLocation, + SovereignSignedViaLocation, // Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when // recognized. - RelayChainAsNative, + RelayChainAsNative, // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when // recognized. - SiblingParachainAsNative, + SiblingParachainAsNative, // Native signed account converter; this just converts an `AccountId32` origin into a normal - // `Origin::Signed` origin of the same 32-byte value. - SignedAccountId32AsNative, + // `RuntimeOrigin::Signed` origin of the same 32-byte value. + SignedAccountId32AsNative, // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. - XcmPassthrough, + XcmPassthrough, ); parameter_types! { @@ -339,7 +340,7 @@ impl xcm_executor::Config for XcmConfig { } /// No local origins on this chain are allowed to dispatch XCM sends/executions. -pub type LocalOriginToLocation = SignedToAccountId32; +pub type LocalOriginToLocation = SignedToAccountId32; /// The means for routing XCM messages which are not for local execution into the right message /// queues. @@ -352,9 +353,9 @@ pub type XcmRouter = ( impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type SendXcmOrigin = EnsureXcmOrigin; + type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; - type ExecuteXcmOrigin = EnsureXcmOrigin; + type ExecuteXcmOrigin = EnsureXcmOrigin; type XcmExecuteFilter = Nothing; // ^ Disable dispatchable execute on the XCM pallet. // Needs to be `Everything` for local testing. @@ -363,7 +364,7 @@ impl pallet_xcm::Config for Runtime { type XcmReserveTransferFilter = Everything; type Weigher = FixedWeightBounds; type LocationInverter = LocationInverter; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; diff --git a/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/parachains/runtimes/testing/rococo-parachain/src/lib.rs index dc5577cbfae..e5d75c3493d 100644 --- a/parachains/runtimes/testing/rococo-parachain/src/lib.rs +++ b/parachains/runtimes/testing/rococo-parachain/src/lib.rs @@ -182,7 +182,7 @@ impl frame_system::Config for Runtime { /// The ubiquitous event type. type RuntimeEvent = RuntimeEvent; /// The ubiquitous origin type. - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; /// Maximum number of block number to block hash mappings to keep (oldest pruned first). type BlockHashCount = BlockHashCount; /// Runtime version. @@ -279,7 +279,7 @@ impl cumulus_pallet_aura_ext::Config for Runtime {} parameter_types! { pub const RocLocation: MultiLocation = MultiLocation::parent(); pub const RococoNetwork: NetworkId = NetworkId::Polkadot; - pub RelayChainOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into(); + pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into(); pub CheckingAccount: AccountId = PolkadotXcm::check_account(); } @@ -341,21 +341,21 @@ pub type XcmOriginToTransactDispatchOrigin = ( // Sovereign account converter; this attempts to derive an `AccountId` from the origin location // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for // foreign chains who want to have a local sovereign account on this chain which they control. - SovereignSignedViaLocation, + SovereignSignedViaLocation, // Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when // recognised. - RelayChainAsNative, + RelayChainAsNative, // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when // recognised. - SiblingParachainAsNative, + SiblingParachainAsNative, // Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a // transaction from the Root origin. - ParentAsSuperuser, + ParentAsSuperuser, // Native signed account converter; this just converts an `AccountId32` origin into a normal - // `Origin::Signed` origin of the same 32-byte value. - SignedAccountId32AsNative, + // `RuntimeOrigin::Signed` origin of the same 32-byte value. + SignedAccountId32AsNative, // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. - XcmPassthrough, + XcmPassthrough, ); parameter_types! { @@ -418,7 +418,7 @@ impl Config for XcmConfig { } /// Local origins on this chain are allowed to dispatch XCM sends/executions. -pub type LocalOriginToLocation = SignedToAccountId32; +pub type LocalOriginToLocation = SignedToAccountId32; /// The means for routing XCM messages which are not for local execution into the right message /// queues. @@ -431,16 +431,16 @@ pub type XcmRouter = ( impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type SendXcmOrigin = EnsureXcmOrigin; + type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; - type ExecuteXcmOrigin = EnsureXcmOrigin; + type ExecuteXcmOrigin = EnsureXcmOrigin; type XcmExecuteFilter = Everything; type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = frame_support::traits::Nothing; type Weigher = FixedWeightBounds; type LocationInverter = LocationInverter; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; @@ -470,7 +470,7 @@ impl cumulus_pallet_dmp_queue::Config for Runtime { impl cumulus_ping::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; type XcmSender = XcmRouter; } diff --git a/test/runtime/src/lib.rs b/test/runtime/src/lib.rs index 7d47140922f..ea1800f0762 100644 --- a/test/runtime/src/lib.rs +++ b/test/runtime/src/lib.rs @@ -188,7 +188,7 @@ impl frame_system::Config for Runtime { /// The ubiquitous event type. type RuntimeEvent = RuntimeEvent; /// The ubiquitous origin type. - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; /// Maximum number of block number to block hash mappings to keep (oldest pruned first). type BlockHashCount = BlockHashCount; /// Runtime version. From 3f11a7a6cfe357955050a6e3b8d4201cd1fff2e5 Mon Sep 17 00:00:00 2001 From: Roman Useinov Date: Wed, 21 Sep 2022 12:57:54 +0200 Subject: [PATCH 075/148] [Fix] Deposit weight hardcoded to pre-bench value (#1651) * [Fix] Deposit weight hardcoded to pre-bench value * lint --- parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs | 5 ++++- parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs | 5 ++++- parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs index f1fe664953a..7972667cf06 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs @@ -117,7 +117,10 @@ impl XcmWeightInfo for StatemineXcmWeight { _max_assets: &u32, _dest: &MultiLocation, ) -> XCMWeight { - assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()) + // Hardcoded till the XCM pallet is fixed + let hardcoded_weight = Weight::from_ref_time(1_000_000_000 as u64).ref_time(); + let weight = assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()); + cmp::min(hardcoded_weight, weight) } fn deposit_reserve_asset( assets: &MultiAssetFilter, diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs index 04db4216efc..1a0ffcdb229 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs @@ -117,7 +117,10 @@ impl XcmWeightInfo for StatemintXcmWeight { _max_assets: &u32, _dest: &MultiLocation, ) -> XCMWeight { - assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()) + // Hardcoded till the XCM pallet is fixed + let hardcoded_weight = Weight::from_ref_time(1_000_000_000 as u64).ref_time(); + let weight = assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()); + cmp::min(hardcoded_weight, weight) } fn deposit_reserve_asset( assets: &MultiAssetFilter, diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs index 0fc8a28dba4..5f6bf034fdc 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs @@ -117,7 +117,10 @@ impl XcmWeightInfo for WestmintXcmWeight { _max_assets: &u32, _dest: &MultiLocation, ) -> XCMWeight { - assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()) + // Hardcoded till the XCM pallet is fixed + let hardcoded_weight = Weight::from_ref_time(1_000_000_000 as u64).ref_time(); + let weight = assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()); + cmp::min(hardcoded_weight, weight) } fn deposit_reserve_asset( assets: &MultiAssetFilter, From 82ff35b815a00cec79dd5f9f7583f8191aa806e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Wed, 21 Sep 2022 14:08:41 +0200 Subject: [PATCH 076/148] Ensure that inherents are first and unsigned (#1654) * Ensure that inherents are first and unsigned * Update pallets/parachain-system/src/validate_block/tests.rs Co-authored-by: Sergei Shulepov Co-authored-by: Sergei Shulepov --- .../src/validate_block/implementation.rs | 5 +++ .../src/validate_block/tests.rs | 37 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/pallets/parachain-system/src/validate_block/implementation.rs b/pallets/parachain-system/src/validate_block/implementation.rs index f37622688de..8c03f012be2 100644 --- a/pallets/parachain-system/src/validate_block/implementation.rs +++ b/pallets/parachain-system/src/validate_block/implementation.rs @@ -118,6 +118,11 @@ where let inherent_data = block .extrinsics() .iter() + // Inherents are at the front of the block and are unsigned. + // + // If `is_signed` is returning `None`, we keep it safe and assume that it is "signed". + // We are searching for unsigned transactions anyway. + .take_while(|e| !e.is_signed().unwrap_or(true)) .filter_map(|e| e.call().is_sub_type()) .find_map(|c| match c { crate::Call::set_validation_data { data: validation_data } => diff --git a/pallets/parachain-system/src/validate_block/tests.rs b/pallets/parachain-system/src/validate_block/tests.rs index 6453b9cd394..e06c2cafdcf 100644 --- a/pallets/parachain-system/src/validate_block/tests.rs +++ b/pallets/parachain-system/src/validate_block/tests.rs @@ -251,3 +251,40 @@ fn check_inherent_fails_on_validate_block_as_expected() { ); } } + +#[test] +fn check_inherents_are_unsigned_and_before_all_other_extrinsics() { + sp_tracing::try_init_simple(); + + if env::var("RUN_TEST").is_ok() { + let (client, parent_head) = create_test_client(); + + let TestBlockData { block, validation_data } = + build_block_with_witness(&client, Vec::new(), parent_head.clone(), Default::default()); + + let (header, mut extrinsics, proof) = block.deconstruct(); + + extrinsics.insert(0, transfer(&client, Alice, Bob, 69)); + + call_validate_block( + parent_head, + ParachainBlockData::new(header, extrinsics, proof), + validation_data.relay_parent_storage_root, + ) + .unwrap_err(); + } else { + let output = Command::new(env::current_exe().unwrap()) + .args(&[ + "check_inherents_are_unsigned_and_before_all_other_extrinsics", + "--", + "--nocapture", + ]) + .env("RUN_TEST", "1") + .output() + .expect("Runs the test"); + assert!(output.status.success()); + + assert!(String::from_utf8(output.stderr).unwrap() + .contains("Could not find `set_validation_data` inherent")); + } +} From 50f3eb2e534f80700b552420617f0a94b180423e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Thei=C3=9Fen?= Date: Wed, 21 Sep 2022 19:55:36 +0200 Subject: [PATCH 077/148] Companion for: Make automatic storage deposits resistant against changing deposit prices (#1561) * Adapt to new contracts migration API * Add missing type argument * update lockfile for {"substrate", "polkadot"} Co-authored-by: parity-processbot <> --- Cargo.lock | 610 +++++++++--------- .../contracts-rococo/src/contracts.rs | 10 +- .../contracts/contracts-rococo/src/lib.rs | 2 +- 3 files changed, 311 insertions(+), 311 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cd30d7a90fd..9c9e2cd9d67 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -118,6 +118,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "array-bytes" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a913633b0c922e6b745072795f50d90ebea78ba31a57e2ac8c2fc7b50950949" + [[package]] name = "arrayref" version = "0.3.6" @@ -463,14 +469,14 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ + "array-bytes", "async-trait", "beefy-primitives", "fnv", "futures", "futures-timer", - "hex", "log", "parity-scale-codec", "parking_lot 0.12.1", @@ -499,7 +505,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -519,7 +525,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "beefy-primitives", "sp-api", @@ -528,7 +534,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "parity-scale-codec", "scale-info", @@ -1251,19 +1257,21 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.87.1" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f91425bea5a5ac6d76b788477064944a7e21f0e240fd93f6f368a774a3efdd1" +checksum = "b27bbd3e6c422cf6282b047bcdd51ecd9ca9f3497a3be0132ffa08e509b824b0" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.87.1" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b83b4bbf7bc96db77b7b5b5e41fafc4001536e9f0cbfd702ed7d4d8f848dc06" +checksum = "872f5d4557a411b087bd731df6347c142ae1004e6467a144a7e33662e5715a01" dependencies = [ + "arrayvec 0.7.2", + "bumpalo", "cranelift-bforest", "cranelift-codegen-meta", "cranelift-codegen-shared", @@ -1278,33 +1286,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.87.1" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da02e8fff048c381b313a3dfef4deb2343976fb6d7acc8e7d9c86d4c93e3fa06" +checksum = "21b49fdebb29c62c1fc4da1eeebd609e9d530ecde24a9876def546275f73a244" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.87.1" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9abc2a06e8fc29e36660ebbc9e2503e18a051057072acbb1e75e7f7cf19cb95e" +checksum = "5fc0c091e2db055d4d7f6b7cec2d2ead286bcfaea3357c6a52c2a2613a8cb5ac" [[package]] name = "cranelift-entity" -version = "0.87.1" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aeced7874890fc25d85cacc5e626c4d67931c7c25aad1c2ad521684744c1ff5c" +checksum = "354a9597be87996c9b278655e68b8447f65dd907256855ad773864edee8d985c" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.87.1" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1d301ccad6fce05d9c9793d433d225fafdd57661b98d268d8d162e9291ff2e" +checksum = "0cd8dd3fb8b82c772f4172e87ae1677b971676fffa7c4e3398e3047e650a266b" dependencies = [ "cranelift-codegen", "log", @@ -1314,15 +1322,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.87.1" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7b100db19320848986b4df1da19501dbddeb706a799f502222f72f889b0fab" +checksum = "b82527802b1f7d8da288adc28f1dc97ea52943f5871c041213f7b5035ac698a7" [[package]] name = "cranelift-native" -version = "0.87.1" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7be18d8b976cddc822e52343f328b7593d26dd2f1aeadd90da071596a210d524" +checksum = "c30ba8b910f1be023af0c39109cb28a8809734942a6b3eecbf2de8993052ea5e" dependencies = [ "cranelift-codegen", "libc", @@ -1331,9 +1339,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.87.1" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f9e48bb632a2e189b38a9fa89fa5a6eea687a5a4c613bbef7c2b7522c3ad0e0" +checksum = "776a8916d201894aca9637a20814f1e11abc62acd5cfbe0b4eb2e63922756971" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -2782,7 +2790,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "parity-scale-codec", ] @@ -2799,7 +2807,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support", "frame-system", @@ -2822,9 +2830,10 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "Inflector", + "array-bytes", "chrono", "clap", "comfy-table", @@ -2834,7 +2843,6 @@ dependencies = [ "gethostname", "handlebars", "hash-db", - "hex", "itertools", "kvdb", "lazy_static", @@ -2873,7 +2881,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2884,7 +2892,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2900,7 +2908,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support", "frame-system", @@ -2929,7 +2937,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "bitflags", "frame-metadata", @@ -2961,7 +2969,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "Inflector", "cfg-expr", @@ -2975,7 +2983,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2987,7 +2995,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "proc-macro2", "quote", @@ -2997,7 +3005,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support", "log", @@ -3015,7 +3023,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -3030,7 +3038,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "parity-scale-codec", "sp-api", @@ -3039,7 +3047,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support", "parity-scale-codec", @@ -3918,7 +3926,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "beefy-primitives", "bitvec", @@ -4011,7 +4019,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "frame-support", "polkadot-primitives", @@ -5350,7 +5358,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "async-trait", "dyn-clonable", @@ -5366,7 +5374,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "expander 0.0.6", "itertools", @@ -5404,12 +5412,12 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ + "array-bytes", "frame-benchmarking", "frame-support", "frame-system", - "hex", "log", "pallet-collective", "pallet-identity", @@ -5425,7 +5433,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support", "frame-system", @@ -5442,7 +5450,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -5456,7 +5464,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support", "frame-system", @@ -5472,7 +5480,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support", "frame-system", @@ -5488,7 +5496,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support", "frame-system", @@ -5503,7 +5511,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -5527,7 +5535,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5547,7 +5555,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -5562,7 +5570,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "beefy-primitives", "frame-support", @@ -5578,13 +5586,13 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ + "array-bytes", "beefy-merkle-tree", "beefy-primitives", "frame-support", "frame-system", - "hex", "log", "pallet-beefy", "pallet-mmr", @@ -5601,7 +5609,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -5619,7 +5627,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -5664,7 +5672,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -5681,7 +5689,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "bitflags", "frame-benchmarking", @@ -5709,7 +5717,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "bitflags", "parity-scale-codec", @@ -5724,7 +5732,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "proc-macro2", "quote", @@ -5734,7 +5742,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5751,7 +5759,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5764,7 +5772,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -5780,7 +5788,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5804,7 +5812,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5817,7 +5825,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -5835,7 +5843,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -5850,7 +5858,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -5873,7 +5881,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5889,7 +5897,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -5909,7 +5917,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -5926,7 +5934,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -5943,7 +5951,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5961,7 +5969,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5976,7 +5984,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -5991,7 +5999,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support", "frame-system", @@ -6008,7 +6016,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6028,7 +6036,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "parity-scale-codec", "sp-api", @@ -6038,7 +6046,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support", "frame-system", @@ -6055,7 +6063,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6078,7 +6086,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -6094,7 +6102,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -6109,7 +6117,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support", "frame-system", @@ -6123,7 +6131,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -6138,7 +6146,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -6154,7 +6162,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support", "frame-system", @@ -6175,7 +6183,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -6191,7 +6199,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support", "frame-system", @@ -6205,7 +6213,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6228,7 +6236,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6239,7 +6247,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "log", "sp-arithmetic", @@ -6248,7 +6256,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support", "frame-system", @@ -6277,7 +6285,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -6295,7 +6303,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -6314,7 +6322,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-support", "frame-system", @@ -6330,7 +6338,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6345,7 +6353,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6356,7 +6364,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -6373,7 +6381,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -6388,7 +6396,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -6404,7 +6412,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-benchmarking", "frame-support", @@ -6419,7 +6427,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "frame-support", "frame-system", @@ -6437,7 +6445,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "frame-benchmarking", "frame-support", @@ -7006,7 +7014,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7021,7 +7029,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7035,7 +7043,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "derive_more", "fatality", @@ -7058,7 +7066,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "fatality", "futures", @@ -7079,7 +7087,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7105,7 +7113,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7146,7 +7154,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "always-assert", "fatality", @@ -7167,7 +7175,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7180,7 +7188,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "derive_more", "fatality", @@ -7203,7 +7211,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7217,7 +7225,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "futures", "futures-timer", @@ -7237,7 +7245,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "always-assert", "async-trait", @@ -7261,7 +7269,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "futures", "parity-scale-codec", @@ -7279,7 +7287,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "bitvec", "derive_more", @@ -7308,7 +7316,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "bitvec", "futures", @@ -7328,7 +7336,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "bitvec", "fatality", @@ -7347,7 +7355,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7362,7 +7370,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "async-trait", "futures", @@ -7380,7 +7388,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7395,7 +7403,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "futures", "futures-timer", @@ -7412,7 +7420,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "fatality", "futures", @@ -7431,7 +7439,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "async-trait", "futures", @@ -7448,7 +7456,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "bitvec", "fatality", @@ -7466,7 +7474,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "always-assert", "assert_matches", @@ -7498,7 +7506,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "futures", "polkadot-node-primitives", @@ -7514,7 +7522,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "futures", "memory-lru", @@ -7530,7 +7538,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "async-std", "lazy_static", @@ -7548,7 +7556,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "bs58", "futures", @@ -7567,7 +7575,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "async-trait", "derive_more", @@ -7589,7 +7597,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "bounded-vec", "futures", @@ -7611,7 +7619,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7621,7 +7629,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "async-trait", "futures", @@ -7639,7 +7647,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "async-trait", "derive_more", @@ -7662,7 +7670,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "async-trait", "derive_more", @@ -7695,7 +7703,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "async-trait", "futures", @@ -7718,7 +7726,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "derive_more", "frame-support", @@ -7818,7 +7826,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7833,7 +7841,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "bitvec", "frame-system", @@ -7863,7 +7871,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7895,7 +7903,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "beefy-primitives", "bitvec", @@ -7983,7 +7991,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "beefy-primitives", "bitvec", @@ -8030,7 +8038,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "frame-support", "polkadot-primitives", @@ -8042,7 +8050,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "bs58", "parity-scale-codec", @@ -8054,7 +8062,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "bitflags", "bitvec", @@ -8097,7 +8105,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "async-trait", "beefy-gadget", @@ -8202,7 +8210,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8223,7 +8231,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8233,7 +8241,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8258,7 +8266,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "beefy-primitives", "bitvec", @@ -8319,7 +8327,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "frame-benchmarking", "frame-system", @@ -8464,7 +8472,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8949,7 +8957,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9071,7 +9079,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9155,7 +9163,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "frame-support", "polkadot-primitives", @@ -9325,7 +9333,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "log", "sp-core", @@ -9336,7 +9344,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "async-trait", "futures", @@ -9363,7 +9371,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "futures", "futures-timer", @@ -9386,7 +9394,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9402,7 +9410,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9419,7 +9427,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9430,13 +9438,13 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ + "array-bytes", "chrono", "clap", "fdlimit", "futures", - "hex", "libp2p", "log", "names", @@ -9469,7 +9477,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "fnv", "futures", @@ -9497,7 +9505,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "hash-db", "kvdb", @@ -9522,7 +9530,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "async-trait", "futures", @@ -9546,7 +9554,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "async-trait", "futures", @@ -9575,7 +9583,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "async-trait", "fork-tree", @@ -9617,7 +9625,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "futures", "jsonrpsee", @@ -9639,7 +9647,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9652,7 +9660,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "async-trait", "futures", @@ -9677,7 +9685,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9704,7 +9712,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "environmental", "parity-scale-codec", @@ -9720,7 +9728,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "log", "parity-scale-codec", @@ -9735,7 +9743,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9755,16 +9763,16 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "ahash", + "array-bytes", "async-trait", "dyn-clone", "finality-grandpa", "fork-tree", "futures", "futures-timer", - "hex", "log", "parity-scale-codec", "parking_lot 0.12.1", @@ -9796,7 +9804,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "finality-grandpa", "futures", @@ -9817,7 +9825,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "ansi_term", "futures", @@ -9834,10 +9842,10 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ + "array-bytes", "async-trait", - "hex", "parking_lot 0.12.1", "serde_json", "sp-application-crypto", @@ -9849,8 +9857,9 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ + "array-bytes", "async-trait", "asynchronous-codec", "bitflags", @@ -9861,7 +9870,6 @@ dependencies = [ "fork-tree", "futures", "futures-timer", - "hex", "ip_network", "libp2p", "linked-hash-map", @@ -9896,7 +9904,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "cid", "futures", @@ -9916,7 +9924,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "async-trait", "bitflags", @@ -9939,7 +9947,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "ahash", "futures", @@ -9957,10 +9965,10 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ + "array-bytes", "futures", - "hex", "libp2p", "log", "parity-scale-codec", @@ -9978,11 +9986,11 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ + "array-bytes", "fork-tree", "futures", - "hex", "libp2p", "log", "lru 0.7.7", @@ -10006,13 +10014,13 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ + "array-bytes", "bytes", "fnv", "futures", "futures-timer", - "hex", "hyper", "hyper-rustls", "libp2p", @@ -10036,7 +10044,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "futures", "libp2p", @@ -10049,7 +10057,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10058,7 +10066,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "futures", "hash-db", @@ -10088,7 +10096,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "futures", "jsonrpsee", @@ -10111,7 +10119,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "futures", "jsonrpsee", @@ -10124,7 +10132,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "async-trait", "directories", @@ -10193,7 +10201,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "log", "parity-scale-codec", @@ -10207,7 +10215,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10226,7 +10234,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "futures", "libc", @@ -10245,7 +10253,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "chrono", "futures", @@ -10263,7 +10271,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "ansi_term", "atty", @@ -10294,7 +10302,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10305,7 +10313,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "futures", "futures-timer", @@ -10331,7 +10339,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "futures", "log", @@ -10344,7 +10352,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "futures", "futures-timer", @@ -10782,7 +10790,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "enumn", "parity-scale-codec", @@ -10858,7 +10866,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "hash-db", "log", @@ -10876,7 +10884,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "blake2", "proc-macro-crate", @@ -10888,7 +10896,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "parity-scale-codec", "scale-info", @@ -10901,7 +10909,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "integer-sqrt", "num-traits", @@ -10916,7 +10924,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "parity-scale-codec", "scale-info", @@ -10929,7 +10937,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "async-trait", "parity-scale-codec", @@ -10941,7 +10949,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "parity-scale-codec", "sp-api", @@ -10953,7 +10961,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "futures", "log", @@ -10971,7 +10979,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "async-trait", "futures", @@ -10990,7 +10998,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "async-trait", "parity-scale-codec", @@ -11008,7 +11016,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "async-trait", "merlin", @@ -11031,7 +11039,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "parity-scale-codec", "scale-info", @@ -11045,7 +11053,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "parity-scale-codec", "scale-info", @@ -11058,8 +11066,9 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ + "array-bytes", "base58", "bitflags", "blake2", @@ -11069,7 +11078,6 @@ dependencies = [ "futures", "hash-db", "hash256-std-hasher", - "hex", "impl-serde", "lazy_static", "libsecp256k1", @@ -11104,7 +11112,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "blake2", "byteorder", @@ -11118,7 +11126,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "proc-macro2", "quote", @@ -11129,7 +11137,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11138,7 +11146,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "proc-macro2", "quote", @@ -11148,7 +11156,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "environmental", "parity-scale-codec", @@ -11159,7 +11167,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "finality-grandpa", "log", @@ -11177,7 +11185,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11191,7 +11199,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "bytes", "futures", @@ -11217,7 +11225,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "lazy_static", "sp-core", @@ -11228,7 +11236,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "async-trait", "futures", @@ -11245,7 +11253,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "thiserror", "zstd", @@ -11254,7 +11262,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "log", "parity-scale-codec", @@ -11269,7 +11277,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "parity-scale-codec", "scale-info", @@ -11283,7 +11291,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "sp-api", "sp-core", @@ -11293,7 +11301,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "backtrace", "lazy_static", @@ -11303,7 +11311,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "rustc-hash", "serde", @@ -11313,7 +11321,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "either", "hash256-std-hasher", @@ -11336,7 +11344,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11354,7 +11362,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "Inflector", "proc-macro-crate", @@ -11366,7 +11374,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "log", "parity-scale-codec", @@ -11380,7 +11388,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "serde", "serde_json", @@ -11389,7 +11397,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "parity-scale-codec", "scale-info", @@ -11403,7 +11411,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "parity-scale-codec", "scale-info", @@ -11414,7 +11422,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "hash-db", "log", @@ -11436,12 +11444,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11454,7 +11462,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "log", "sp-core", @@ -11467,7 +11475,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "async-trait", "futures-timer", @@ -11483,7 +11491,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "parity-scale-codec", "sp-std", @@ -11495,7 +11503,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "sp-api", "sp-runtime", @@ -11504,7 +11512,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "async-trait", "log", @@ -11520,7 +11528,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "ahash", "hash-db", @@ -11543,7 +11551,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11560,7 +11568,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11571,7 +11579,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "impl-trait-for-tuples", "log", @@ -11584,7 +11592,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11886,7 +11894,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "platforms", ] @@ -11894,7 +11902,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11915,7 +11923,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "futures-util", "hyper", @@ -11928,7 +11936,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "jsonrpsee", "log", @@ -11949,11 +11957,11 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ + "array-bytes", "async-trait", "futures", - "hex", "parity-scale-codec", "sc-client-api", "sc-client-db", @@ -11975,7 +11983,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11985,7 +11993,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11996,7 +12004,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "ansi_term", "build-helper", @@ -12104,7 +12112,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "frame-support", "polkadot-primitives", @@ -12385,7 +12393,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12396,7 +12404,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12523,7 +12531,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a47f200eebeb88a5bde6f1ed2be9728b82536dde" +source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" dependencies = [ "clap", "frame-try-runtime", @@ -12893,18 +12901,18 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.88.0" +version = "0.89.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb8cf7dd82407fe68161bedcd57fde15596f32ebf6e9b3bdbf3ae1da20e38e5e" +checksum = "ab5d3e08b13876f96dd55608d03cd4883a0545884932d5adf11925876c96daef" dependencies = [ "indexmap", ] [[package]] name = "wasmtime" -version = "0.40.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a020a3f6587fa7a7d98a021156177735ebb07212a6239a85ab5f14b2f728508f" +checksum = "8a10dc9784d8c3a33c970e3939180424955f08af2e7f20368ec02685a0e8f065" dependencies = [ "anyhow", "bincode", @@ -12930,18 +12938,18 @@ dependencies = [ [[package]] name = "wasmtime-asm-macros" -version = "0.40.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed4ada1fdd4d9a2aa37be652abcc31ae3188ad0efcefb4571ef4f785be2d777" +checksum = "ee4dbdc6daf68528cad1275ac91e3f51848ce9824385facc94c759f529decdf8" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "wasmtime-cache" -version = "0.40.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96a03a5732ef39b83943d9d72de8ac2d58623d3bfaaea4d9a92aea5fcd9acf5" +checksum = "9f507f3fa1ee1b2f9a83644e2514242b1dfe580782c0eb042f1ef70255bc4ffe" dependencies = [ "anyhow", "base64", @@ -12959,9 +12967,9 @@ dependencies = [ [[package]] name = "wasmtime-cranelift" -version = "0.40.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc59c28fe895112db09e262fb9c483f9e7b82c78a82a6ded69567ccc0e9795b" +checksum = "8f03cf79d982fc68e94ba0bea6a300a3b94621c4eb9705eece0a4f06b235a3b5" dependencies = [ "anyhow", "cranelift-codegen", @@ -12980,9 +12988,9 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "0.40.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11086e573d2635a45ac0d44697a8e4586e058cf1b190f76bea466ca2ec36c30a" +checksum = "5c587c62e91c5499df62012b87b88890d0eb470b2ffecc5964e9da967b70c77c" dependencies = [ "anyhow", "cranelift-entity", @@ -12999,9 +13007,9 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "0.40.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5444a78b74144718633f8642eccd7c4858f4c6f0c98ae6a3668998adf177ba2" +checksum = "047839b5dabeae5424a078c19b8cc897e5943a7fadc69e3d888b9c9a897666b3" dependencies = [ "addr2line", "anyhow", @@ -13024,9 +13032,9 @@ dependencies = [ [[package]] name = "wasmtime-jit-debug" -version = "0.40.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2bf6a667d2a29b2b0ed42bcf7564f00c595d92c24acb4d241c7c4d950b1910c" +checksum = "b299569abf6f99b7b8e020afaf84a700e8636c6a42e242069267322cd5818235" dependencies = [ "object 0.29.0", "once_cell", @@ -13035,9 +13043,9 @@ dependencies = [ [[package]] name = "wasmtime-runtime" -version = "0.40.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee064ce7b563cc201cdf3bb1cc4b233f386d8c57a96e55f4c4afe6103f4bd6a1" +checksum = "ae79e0515160bd5abee5df50a16c4eb8db9f71b530fc988ae1d9ce34dcb8dd01" dependencies = [ "anyhow", "cc", @@ -13060,9 +13068,9 @@ dependencies = [ [[package]] name = "wasmtime-types" -version = "0.40.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e104bd9e625181d53ead85910bbc0863aa5f0c6ef96836fe9a5cc65da11b69" +checksum = "790cf43ee8e2d5dad1780af30f00d7a972b74725fb1e4f90c28d62733819b185" dependencies = [ "cranelift-entity", "serde", @@ -13111,7 +13119,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "beefy-primitives", "bitvec", @@ -13200,7 +13208,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "frame-support", "polkadot-primitives", @@ -13486,7 +13494,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13500,7 +13508,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "frame-support", "frame-system", @@ -13520,7 +13528,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "frame-benchmarking", "frame-support", @@ -13538,7 +13546,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#afbc64e61697dc54db60b3c54510f1f5672a9068" +source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" dependencies = [ "Inflector", "proc-macro2", diff --git a/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs b/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs index 7abe94865aa..db59f925276 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs @@ -4,11 +4,10 @@ use crate::{ }; use frame_support::{ parameter_types, - traits::{ConstU32, Nothing, OnRuntimeUpgrade}, + traits::{ConstU32, Nothing}, weights::Weight, }; use pallet_contracts::{ - migration, weights::{SubstrateWeight, WeightInfo}, Config, DefaultAddressGenerator, DefaultContractAccessWeight, Frame, Schedule, }; @@ -60,10 +59,3 @@ impl Config for Runtime { type MaxCodeLen = ConstU32<{ 128 * 1024 }>; type MaxStorageKeyLen = ConstU32<128>; } - -pub struct Migrations; -impl OnRuntimeUpgrade for Migrations { - fn on_runtime_upgrade() -> Weight { - migration::migrate::() - } -} diff --git a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index 0aff6751e17..1769c20dc8d 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -102,7 +102,7 @@ pub type Executive = frame_executive::Executive< frame_system::ChainContext, Runtime, AllPalletsWithSystem, - contracts::Migrations, + pallet_contracts::Migration, >; impl_opaque_keys! { From 1dba83a9031c22994795971fac9b1a8638c9efb5 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 22 Sep 2022 22:26:02 +0800 Subject: [PATCH 078/148] Fixes --- parachain-template/runtime/src/xcm_config.rs | 4 ++-- parachains/common/src/xcm_config.rs | 4 ++-- parachains/runtimes/testing/penpal/src/xcm_config.rs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/parachain-template/runtime/src/xcm_config.rs b/parachain-template/runtime/src/xcm_config.rs index 61349391f85..65ac5c83053 100644 --- a/parachain-template/runtime/src/xcm_config.rs +++ b/parachain-template/runtime/src/xcm_config.rs @@ -103,7 +103,7 @@ where { fn should_execute( origin: &MultiLocation, - message: &mut [Instruction], + message: &mut [Instruction], max_weight: XCMWeight, weight_credit: &mut XCMWeight, ) -> Result<(), ()> { @@ -117,7 +117,7 @@ pub struct DenyReserveTransferToRelayChain; impl ShouldExecute for DenyReserveTransferToRelayChain { fn should_execute( origin: &MultiLocation, - message: &mut [Instruction], + message: &mut [Instruction], _max_weight: XCMWeight, _weight_credit: &mut XCMWeight, ) -> Result<(), ()> { diff --git a/parachains/common/src/xcm_config.rs b/parachains/common/src/xcm_config.rs index 4b78f214000..73e6d9e93b6 100644 --- a/parachains/common/src/xcm_config.rs +++ b/parachains/common/src/xcm_config.rs @@ -24,7 +24,7 @@ where { fn should_execute( origin: &MultiLocation, - message: &mut [Instruction], + message: &mut [Instruction], max_weight: XCMWeight, weight_credit: &mut XCMWeight, ) -> Result<(), ()> { @@ -38,7 +38,7 @@ pub struct DenyReserveTransferToRelayChain; impl ShouldExecute for DenyReserveTransferToRelayChain { fn should_execute( origin: &MultiLocation, - message: &mut [Instruction], + message: &mut [Instruction], _max_weight: XCMWeight, _weight_credit: &mut XCMWeight, ) -> Result<(), ()> { diff --git a/parachains/runtimes/testing/penpal/src/xcm_config.rs b/parachains/runtimes/testing/penpal/src/xcm_config.rs index 6d96e59d3b2..5df62e71d7c 100644 --- a/parachains/runtimes/testing/penpal/src/xcm_config.rs +++ b/parachains/runtimes/testing/penpal/src/xcm_config.rs @@ -164,7 +164,7 @@ where { fn should_execute( origin: &MultiLocation, - message: &mut [Instruction], + message: &mut [Instruction], max_weight: XCMWeight, weight_credit: &mut XCMWeight, ) -> Result<(), ()> { @@ -178,7 +178,7 @@ pub struct DenyReserveTransferToRelayChain; impl ShouldExecute for DenyReserveTransferToRelayChain { fn should_execute( origin: &MultiLocation, - message: &mut [Instruction], + message: &mut [Instruction], _max_weight: XCMWeight, _weight_credit: &mut XCMWeight, ) -> Result<(), ()> { From e02878e87a46a865aec00ddd11351403aaee3bae Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Thu, 22 Sep 2022 23:16:22 +0800 Subject: [PATCH 079/148] Fixes --- pallets/dmp-queue/src/lib.rs | 3 ++- pallets/parachain-system/src/validate_block/tests.rs | 3 ++- pallets/xcm/src/lib.rs | 3 ++- parachains/common/src/xcm_config.rs | 8 +++++--- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/pallets/dmp-queue/src/lib.rs b/pallets/dmp-queue/src/lib.rs index 5c3a0dc5724..3dfcae436fb 100644 --- a/pallets/dmp-queue/src/lib.rs +++ b/pallets/dmp-queue/src/lib.rs @@ -240,7 +240,8 @@ pub mod pallet { Ok(Weight::zero()) }, Ok(Ok(x)) => { - let outcome = T::XcmExecutor::execute_xcm(Parent, x, message_id, limit.ref_time()); + let outcome = + T::XcmExecutor::execute_xcm(Parent, x, message_id, limit.ref_time()); match outcome { Outcome::Error(XcmError::WeightLimitReached(required)) => Err((message_id, Weight::from_ref_time(required))), diff --git a/pallets/parachain-system/src/validate_block/tests.rs b/pallets/parachain-system/src/validate_block/tests.rs index e06c2cafdcf..6087e6a29a3 100644 --- a/pallets/parachain-system/src/validate_block/tests.rs +++ b/pallets/parachain-system/src/validate_block/tests.rs @@ -284,7 +284,8 @@ fn check_inherents_are_unsigned_and_before_all_other_extrinsics() { .expect("Runs the test"); assert!(output.status.success()); - assert!(String::from_utf8(output.stderr).unwrap() + assert!(String::from_utf8(output.stderr) + .unwrap() .contains("Could not find `set_validation_data` inherent")); } } diff --git a/pallets/xcm/src/lib.rs b/pallets/xcm/src/lib.rs index 1d87187cdef..bd015dce171 100644 --- a/pallets/xcm/src/lib.rs +++ b/pallets/xcm/src/lib.rs @@ -157,7 +157,8 @@ impl DmpMessageHandler for LimitAndDropDmpExecution { Ok(Err(())) => Pallet::::deposit_event(Event::UnsupportedVersion(id)), Ok(Ok(x)) => { let weight_limit = limit.saturating_sub(used); - let outcome = T::XcmExecutor::execute_xcm(Parent, x, id, weight_limit.ref_time()); + let outcome = + T::XcmExecutor::execute_xcm(Parent, x, id, weight_limit.ref_time()); used += Weight::from_ref_time(outcome.weight_used()); Pallet::::deposit_event(Event::ExecutedDownward(id, outcome)); }, diff --git a/parachains/common/src/xcm_config.rs b/parachains/common/src/xcm_config.rs index 73e6d9e93b6..91d1c46a2fa 100644 --- a/parachains/common/src/xcm_config.rs +++ b/parachains/common/src/xcm_config.rs @@ -2,7 +2,7 @@ use crate::impls::AccountIdOf; use core::marker::PhantomData; use frame_support::{ log, - traits::{fungibles::Inspect, tokens::BalanceConversion}, + traits::{fungibles::Inspect, tokens::BalanceConversion, ContainsPair}, weights::{Weight, WeightToFee, WeightToFeePolynomial}, }; use sp_runtime::traits::Get; @@ -111,8 +111,10 @@ where /// Accepts an asset if it is a native asset from a particular `MultiLocation`. pub struct ConcreteNativeAssetFrom(PhantomData); -impl> FilterAssetLocation for ConcreteNativeAssetFrom { - fn filter_asset_location(asset: &MultiAsset, origin: &MultiLocation) -> bool { +impl> ContainsPair + for ConcreteNativeAssetFrom +{ + fn contains(asset: &MultiAsset, origin: &MultiLocation) -> bool { log::trace!(target: "xcm::filter_asset_location", "ConcreteNativeAsset asset: {:?}, origin: {:?}, location: {:?}", asset, origin, Location::get()); From 142cdfa193b814ba7fae4c5b55e08729f2925f78 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Thu, 22 Sep 2022 15:10:13 -0400 Subject: [PATCH 080/148] Companion for #12283 (Anon -> Pure Proxy) (#1667) * anon -> pure * fn pure -> fn create_pure * update lockfile for {"polkadot", "substrate"} Co-authored-by: parity-processbot <> --- Cargo.lock | 500 +++++++++--------- .../statemine/src/weights/pallet_proxy.rs | 4 +- .../statemint/src/weights/pallet_proxy.rs | 4 +- .../westmint/src/weights/pallet_proxy.rs | 4 +- .../src/weights/pallet_proxy.rs | 4 +- 5 files changed, 258 insertions(+), 258 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9c9e2cd9d67..26ccf4852e3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -469,7 +469,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "array-bytes", "async-trait", @@ -505,7 +505,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -525,7 +525,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "beefy-primitives", "sp-api", @@ -534,7 +534,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "parity-scale-codec", "scale-info", @@ -2790,7 +2790,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "parity-scale-codec", ] @@ -2807,7 +2807,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support", "frame-system", @@ -2830,7 +2830,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "Inflector", "array-bytes", @@ -2881,7 +2881,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2892,7 +2892,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2908,7 +2908,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support", "frame-system", @@ -2937,7 +2937,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "bitflags", "frame-metadata", @@ -2969,7 +2969,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "Inflector", "cfg-expr", @@ -2983,7 +2983,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2995,7 +2995,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "proc-macro2", "quote", @@ -3005,7 +3005,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support", "log", @@ -3023,7 +3023,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -3038,7 +3038,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "parity-scale-codec", "sp-api", @@ -3047,7 +3047,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support", "parity-scale-codec", @@ -3926,7 +3926,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "beefy-primitives", "bitvec", @@ -4019,7 +4019,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "frame-support", "polkadot-primitives", @@ -5358,7 +5358,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "async-trait", "dyn-clonable", @@ -5374,7 +5374,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "expander 0.0.6", "itertools", @@ -5412,7 +5412,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "array-bytes", "frame-benchmarking", @@ -5433,7 +5433,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support", "frame-system", @@ -5450,7 +5450,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -5464,7 +5464,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support", "frame-system", @@ -5480,7 +5480,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support", "frame-system", @@ -5496,7 +5496,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support", "frame-system", @@ -5511,7 +5511,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -5535,7 +5535,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5555,7 +5555,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -5570,7 +5570,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "beefy-primitives", "frame-support", @@ -5586,7 +5586,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "array-bytes", "beefy-merkle-tree", @@ -5609,7 +5609,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -5627,7 +5627,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -5672,7 +5672,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -5689,7 +5689,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "bitflags", "frame-benchmarking", @@ -5717,7 +5717,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "bitflags", "parity-scale-codec", @@ -5732,7 +5732,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "proc-macro2", "quote", @@ -5742,7 +5742,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5759,7 +5759,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5772,7 +5772,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -5788,7 +5788,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5812,7 +5812,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5825,7 +5825,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -5843,7 +5843,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -5858,7 +5858,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -5881,7 +5881,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5897,7 +5897,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -5917,7 +5917,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -5934,7 +5934,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -5951,7 +5951,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5969,7 +5969,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5984,7 +5984,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -5999,7 +5999,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support", "frame-system", @@ -6016,7 +6016,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6036,7 +6036,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "parity-scale-codec", "sp-api", @@ -6046,7 +6046,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support", "frame-system", @@ -6063,7 +6063,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6086,7 +6086,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -6102,7 +6102,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -6117,7 +6117,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support", "frame-system", @@ -6131,7 +6131,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -6146,7 +6146,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -6162,7 +6162,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support", "frame-system", @@ -6183,7 +6183,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -6199,7 +6199,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support", "frame-system", @@ -6213,7 +6213,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6236,7 +6236,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6247,7 +6247,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "log", "sp-arithmetic", @@ -6256,7 +6256,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support", "frame-system", @@ -6285,7 +6285,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -6303,7 +6303,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -6322,7 +6322,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-support", "frame-system", @@ -6338,7 +6338,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6353,7 +6353,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6364,7 +6364,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -6381,7 +6381,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -6396,7 +6396,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -6412,7 +6412,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-benchmarking", "frame-support", @@ -6427,7 +6427,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "frame-support", "frame-system", @@ -6445,7 +6445,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "frame-benchmarking", "frame-support", @@ -7014,7 +7014,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7029,7 +7029,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7043,7 +7043,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "derive_more", "fatality", @@ -7066,7 +7066,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "fatality", "futures", @@ -7087,7 +7087,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7113,7 +7113,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7154,7 +7154,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "always-assert", "fatality", @@ -7175,7 +7175,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7188,7 +7188,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "derive_more", "fatality", @@ -7211,7 +7211,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7225,7 +7225,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "futures", "futures-timer", @@ -7245,7 +7245,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "always-assert", "async-trait", @@ -7269,7 +7269,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "futures", "parity-scale-codec", @@ -7287,7 +7287,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "bitvec", "derive_more", @@ -7316,7 +7316,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "bitvec", "futures", @@ -7336,7 +7336,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "bitvec", "fatality", @@ -7355,7 +7355,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7370,7 +7370,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "async-trait", "futures", @@ -7388,7 +7388,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7403,7 +7403,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "futures", "futures-timer", @@ -7420,7 +7420,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "fatality", "futures", @@ -7439,7 +7439,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "async-trait", "futures", @@ -7456,7 +7456,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "bitvec", "fatality", @@ -7474,7 +7474,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "always-assert", "assert_matches", @@ -7506,7 +7506,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "futures", "polkadot-node-primitives", @@ -7522,7 +7522,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "futures", "memory-lru", @@ -7538,7 +7538,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "async-std", "lazy_static", @@ -7556,7 +7556,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "bs58", "futures", @@ -7575,7 +7575,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "async-trait", "derive_more", @@ -7597,7 +7597,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "bounded-vec", "futures", @@ -7619,7 +7619,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7629,7 +7629,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "async-trait", "futures", @@ -7647,7 +7647,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "async-trait", "derive_more", @@ -7670,7 +7670,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "async-trait", "derive_more", @@ -7703,7 +7703,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "async-trait", "futures", @@ -7726,7 +7726,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "derive_more", "frame-support", @@ -7826,7 +7826,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7841,7 +7841,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "bitvec", "frame-system", @@ -7871,7 +7871,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7903,7 +7903,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "beefy-primitives", "bitvec", @@ -7991,7 +7991,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "beefy-primitives", "bitvec", @@ -8038,7 +8038,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "frame-support", "polkadot-primitives", @@ -8050,7 +8050,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "bs58", "parity-scale-codec", @@ -8062,7 +8062,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "bitflags", "bitvec", @@ -8105,7 +8105,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "async-trait", "beefy-gadget", @@ -8210,7 +8210,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8231,7 +8231,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8241,7 +8241,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8266,7 +8266,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "beefy-primitives", "bitvec", @@ -8327,7 +8327,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "frame-benchmarking", "frame-system", @@ -8472,7 +8472,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8957,7 +8957,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9079,7 +9079,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9163,7 +9163,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "frame-support", "polkadot-primitives", @@ -9333,7 +9333,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "log", "sp-core", @@ -9344,7 +9344,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "async-trait", "futures", @@ -9371,7 +9371,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "futures", "futures-timer", @@ -9394,7 +9394,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9410,7 +9410,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9427,7 +9427,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9438,7 +9438,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "array-bytes", "chrono", @@ -9477,7 +9477,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "fnv", "futures", @@ -9505,7 +9505,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "hash-db", "kvdb", @@ -9530,7 +9530,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "async-trait", "futures", @@ -9554,7 +9554,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "async-trait", "futures", @@ -9583,7 +9583,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "async-trait", "fork-tree", @@ -9625,7 +9625,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "futures", "jsonrpsee", @@ -9647,7 +9647,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9660,7 +9660,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "async-trait", "futures", @@ -9685,7 +9685,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9712,7 +9712,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "environmental", "parity-scale-codec", @@ -9728,7 +9728,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "log", "parity-scale-codec", @@ -9743,7 +9743,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9763,7 +9763,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "ahash", "array-bytes", @@ -9804,7 +9804,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "finality-grandpa", "futures", @@ -9825,7 +9825,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "ansi_term", "futures", @@ -9842,7 +9842,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "array-bytes", "async-trait", @@ -9857,7 +9857,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "array-bytes", "async-trait", @@ -9904,7 +9904,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "cid", "futures", @@ -9924,7 +9924,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "async-trait", "bitflags", @@ -9947,7 +9947,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "ahash", "futures", @@ -9965,7 +9965,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "array-bytes", "futures", @@ -9986,7 +9986,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "array-bytes", "fork-tree", @@ -10014,7 +10014,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "array-bytes", "bytes", @@ -10044,7 +10044,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "futures", "libp2p", @@ -10057,7 +10057,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10066,7 +10066,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "futures", "hash-db", @@ -10096,7 +10096,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "futures", "jsonrpsee", @@ -10119,7 +10119,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "futures", "jsonrpsee", @@ -10132,7 +10132,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "async-trait", "directories", @@ -10201,7 +10201,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "log", "parity-scale-codec", @@ -10215,7 +10215,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10234,7 +10234,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "futures", "libc", @@ -10253,7 +10253,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "chrono", "futures", @@ -10271,7 +10271,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "ansi_term", "atty", @@ -10302,7 +10302,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10313,7 +10313,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "futures", "futures-timer", @@ -10339,7 +10339,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "futures", "log", @@ -10352,7 +10352,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "futures", "futures-timer", @@ -10790,7 +10790,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "enumn", "parity-scale-codec", @@ -10866,7 +10866,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "hash-db", "log", @@ -10884,7 +10884,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "blake2", "proc-macro-crate", @@ -10896,7 +10896,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "parity-scale-codec", "scale-info", @@ -10909,7 +10909,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "integer-sqrt", "num-traits", @@ -10924,7 +10924,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "parity-scale-codec", "scale-info", @@ -10937,7 +10937,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "async-trait", "parity-scale-codec", @@ -10949,7 +10949,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "parity-scale-codec", "sp-api", @@ -10961,7 +10961,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "futures", "log", @@ -10979,7 +10979,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "async-trait", "futures", @@ -10998,7 +10998,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "async-trait", "parity-scale-codec", @@ -11016,7 +11016,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "async-trait", "merlin", @@ -11039,7 +11039,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "parity-scale-codec", "scale-info", @@ -11053,7 +11053,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "parity-scale-codec", "scale-info", @@ -11066,7 +11066,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "array-bytes", "base58", @@ -11112,7 +11112,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "blake2", "byteorder", @@ -11126,7 +11126,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "proc-macro2", "quote", @@ -11137,7 +11137,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11146,7 +11146,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "proc-macro2", "quote", @@ -11156,7 +11156,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "environmental", "parity-scale-codec", @@ -11167,7 +11167,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "finality-grandpa", "log", @@ -11185,7 +11185,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11199,7 +11199,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "bytes", "futures", @@ -11225,7 +11225,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "lazy_static", "sp-core", @@ -11236,7 +11236,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "async-trait", "futures", @@ -11253,7 +11253,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "thiserror", "zstd", @@ -11262,7 +11262,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "log", "parity-scale-codec", @@ -11277,7 +11277,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "parity-scale-codec", "scale-info", @@ -11291,7 +11291,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "sp-api", "sp-core", @@ -11301,7 +11301,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "backtrace", "lazy_static", @@ -11311,7 +11311,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "rustc-hash", "serde", @@ -11321,7 +11321,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "either", "hash256-std-hasher", @@ -11344,7 +11344,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11362,7 +11362,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "Inflector", "proc-macro-crate", @@ -11374,7 +11374,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "log", "parity-scale-codec", @@ -11388,7 +11388,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "serde", "serde_json", @@ -11397,7 +11397,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "parity-scale-codec", "scale-info", @@ -11411,7 +11411,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "parity-scale-codec", "scale-info", @@ -11422,7 +11422,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "hash-db", "log", @@ -11444,12 +11444,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11462,7 +11462,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "log", "sp-core", @@ -11475,7 +11475,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "async-trait", "futures-timer", @@ -11491,7 +11491,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "parity-scale-codec", "sp-std", @@ -11503,7 +11503,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "sp-api", "sp-runtime", @@ -11512,7 +11512,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "async-trait", "log", @@ -11528,7 +11528,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "ahash", "hash-db", @@ -11551,7 +11551,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11568,7 +11568,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11579,7 +11579,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "impl-trait-for-tuples", "log", @@ -11592,7 +11592,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11894,7 +11894,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "platforms", ] @@ -11902,7 +11902,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11923,7 +11923,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "futures-util", "hyper", @@ -11936,7 +11936,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "jsonrpsee", "log", @@ -11957,7 +11957,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "array-bytes", "async-trait", @@ -11983,7 +11983,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11993,7 +11993,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -12004,7 +12004,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "ansi_term", "build-helper", @@ -12112,7 +12112,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "frame-support", "polkadot-primitives", @@ -12393,7 +12393,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12404,7 +12404,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12531,7 +12531,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#493b58bd4a475080d428ce47193ee9ea9757a808" +source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" dependencies = [ "clap", "frame-try-runtime", @@ -13119,7 +13119,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "beefy-primitives", "bitvec", @@ -13208,7 +13208,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "frame-support", "polkadot-primitives", @@ -13494,7 +13494,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13508,7 +13508,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "frame-support", "frame-system", @@ -13528,7 +13528,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "frame-benchmarking", "frame-support", @@ -13546,7 +13546,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#e2da6e5369b0b1a2dd7524bfef03ec269dbc7ec6" +source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" dependencies = [ "Inflector", "proc-macro2", diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs index 55b51e8c7ce..ff2d24e4c67 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs @@ -138,7 +138,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. - fn anonymous(p: u32, ) -> Weight { + fn create_pure(p: u32, ) -> Weight { Weight::from_ref_time(31_472_000 as u64) // Standard Error: 2_000 .saturating_add(Weight::from_ref_time(21_000 as u64).saturating_mul(p as u64)) @@ -147,7 +147,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. - fn kill_anonymous(p: u32, ) -> Weight { + fn kill_pure(p: u32, ) -> Weight { Weight::from_ref_time(24_620_000 as u64) // Standard Error: 2_000 .saturating_add(Weight::from_ref_time(85_000 as u64).saturating_mul(p as u64)) diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs index 1f07febb57a..b58c456557f 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs @@ -138,7 +138,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. - fn anonymous(p: u32, ) -> Weight { + fn create_pure(p: u32, ) -> Weight { Weight::from_ref_time(30_378_000 as u64) // Standard Error: 2_000 .saturating_add(Weight::from_ref_time(16_000 as u64).saturating_mul(p as u64)) @@ -147,7 +147,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. - fn kill_anonymous(p: u32, ) -> Weight { + fn kill_pure(p: u32, ) -> Weight { Weight::from_ref_time(23_977_000 as u64) // Standard Error: 2_000 .saturating_add(Weight::from_ref_time(76_000 as u64).saturating_mul(p as u64)) diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs index fc72d28e915..92c3bd17d87 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs @@ -138,7 +138,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. - fn anonymous(p: u32, ) -> Weight { + fn create_pure(p: u32, ) -> Weight { Weight::from_ref_time(31_575_000 as u64) // Standard Error: 2_000 .saturating_add(Weight::from_ref_time(35_000 as u64).saturating_mul(p as u64)) @@ -147,7 +147,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. - fn kill_anonymous(p: u32, ) -> Weight { + fn kill_pure(p: u32, ) -> Weight { Weight::from_ref_time(24_640_000 as u64) // Standard Error: 2_000 .saturating_add(Weight::from_ref_time(80_000 as u64).saturating_mul(p as u64)) diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs index eb316a08649..4172fdd49ff 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_proxy.rs @@ -138,7 +138,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. - fn anonymous(p: u32, ) -> Weight { + fn create_pure(p: u32, ) -> Weight { Weight::from_ref_time(29_260_000 as u64) // Standard Error: 2_000 .saturating_add(Weight::from_ref_time(38_000 as u64).saturating_mul(p as u64)) @@ -147,7 +147,7 @@ impl pallet_proxy::WeightInfo for WeightInfo { } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. - fn kill_anonymous(p: u32, ) -> Weight { + fn kill_pure(p: u32, ) -> Weight { Weight::from_ref_time(23_012_000 as u64) // Standard Error: 2_000 .saturating_add(Weight::from_ref_time(97_000 as u64).saturating_mul(p as u64)) From d9d9c1b94758e6f3b5a90f7246b928edccac3cb6 Mon Sep 17 00:00:00 2001 From: Squirrel Date: Fri, 23 Sep 2022 11:14:52 +0100 Subject: [PATCH 081/148] Other PRs have wrong base and drag additional commits into the genegated PR. (#1672) Not a good idea as it turns out. --- .gitlab-ci.yml | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2f899e378a9..51bc617b0bd 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -411,22 +411,7 @@ benchmarks-assets: - *git-commit-push # create PR to release-parachains-v* branch - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} - -d '{"title":"[benchmarks] Update weights for statemine/t","body":"This PR is generated automatically by CI.","head":"'${BRANCHNAME}'","base":"'${CI_COMMIT_BRANCH}'"}' - -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls - # create PR to master - - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} - -d '{"title":"[benchmarks] Update weights for statemine/t","body":"This PR is generated automatically by CI.","head":"'${BRANCHNAME}'","base":"master"}' - -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls - # create PR to a branch with version number (e.g. v0.9.270) and release-v* (e.g. release-v0.9.270) - # transform release-parachains-v9270 to v0.9.270 - - export BASEBRANCH=$(echo ${CI_COMMIT_BRANCH} | cut -d "-" -f 3 | sed -e "s/\(.\)\(.\)\(...\)/\10.\2.\3/") - # create PR to v* branch - - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} - -d '{"title":"[benchmarks] Update weights for statemine/t","body":"This PR is generated automatically by CI.","head":"'${BRANCHNAME}'","base":"'${BASEBRANCH}'"}' - -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls - # create PR to release-v* branch - - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} - -d '{"title":"[benchmarks] Update weights for statemine/t","body":"This PR is generated automatically by CI.","head":"'${BRANCHNAME}'","base":"'release-${BASEBRANCH}'"}' + -d '{"title":"[benchmarks] Update weights for statemine/t","body":"This PR is generated automatically by CI. (Once merged please backport to master and node release branch.)","head":"'${BRANCHNAME}'","base":"'${CI_COMMIT_BRANCH}'"}' -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls after_script: - rm -rf .git/config @@ -669,5 +654,3 @@ cancel-pipeline: PR_NUM: "${PR_NUM}" trigger: project: "parity/infrastructure/ci_cd/pipeline-stopper" - - From 25958aa09f29522f847781c870a943972f308dad Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Fri, 23 Sep 2022 20:27:31 +0800 Subject: [PATCH 082/148] Fixes --- parachains/common/src/xcm_config.rs | 2 +- .../runtimes/contracts/contracts-rococo/src/xcm_config.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/parachains/common/src/xcm_config.rs b/parachains/common/src/xcm_config.rs index 91d1c46a2fa..9a9774ae94f 100644 --- a/parachains/common/src/xcm_config.rs +++ b/parachains/common/src/xcm_config.rs @@ -7,7 +7,7 @@ use frame_support::{ }; use sp_runtime::traits::Get; use xcm::latest::{prelude::*, Weight as XCMWeight}; -use xcm_executor::traits::{FilterAssetLocation, ShouldExecute}; +use xcm_executor::traits::ShouldExecute; //TODO: move DenyThenTry to polkadot's xcm module. /// Deny executing the XCM if it matches any of the Deny filter regardless of anything else. diff --git a/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs b/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs index a2bd6284f5c..fc0b834c4a3 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs @@ -156,7 +156,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; - type CallDispatcher = Call; + type CallDispatcher = RuntimeCall; } /// Converts a local signed origin into an XCM multilocation. From af934299d82f9482f71c70228746d17bd9fb8077 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Sep 2022 14:41:37 +0200 Subject: [PATCH 083/148] Bump syn from 1.0.99 to 1.0.100 (#1652) Bumps [syn](https://github.com/dtolnay/syn) from 1.0.99 to 1.0.100. - [Release notes](https://github.com/dtolnay/syn/releases) - [Commits](https://github.com/dtolnay/syn/compare/1.0.99...1.0.100) --- updated-dependencies: - dependency-name: syn dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- pallets/parachain-system/proc-macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 26ccf4852e3..b9e79306fac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12026,9 +12026,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.99" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" +checksum = "52205623b1b0f064a4e71182c3b18ae902267282930c6d5462c91b859668426e" dependencies = [ "proc-macro2", "quote", diff --git a/pallets/parachain-system/proc-macro/Cargo.toml b/pallets/parachain-system/proc-macro/Cargo.toml index 3debfc3ef36..1e9937d0c89 100644 --- a/pallets/parachain-system/proc-macro/Cargo.toml +++ b/pallets/parachain-system/proc-macro/Cargo.toml @@ -9,7 +9,7 @@ description = "Proc macros provided by the parachain-system pallet" proc-macro = true [dependencies] -syn = "1.0.99" +syn = "1.0.100" proc-macro2 = "1.0.43" quote = "1.0.21" proc-macro-crate = "1.2.1" From a8df227df2e4b264f67a4f0d8b67420d19cd3944 Mon Sep 17 00:00:00 2001 From: Branislav Kontur Date: Fri, 23 Sep 2022 14:53:31 +0200 Subject: [PATCH 084/148] Small cosmetic nits (#1679) --- Cargo.lock | 1 - Cargo.toml | 2 +- client/relay-chain-inprocess-interface/Cargo.toml | 3 --- client/service/src/lib.rs | 3 +-- pallets/parachain-system/src/validate_block/tests.rs | 3 ++- pallets/xcm/Cargo.toml | 1 + parachains/common/Cargo.toml | 2 ++ parachains/pallets/ping/Cargo.toml | 1 + primitives/utility/Cargo.toml | 2 ++ 9 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b9e79306fac..bcbd8a28233 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1989,7 +1989,6 @@ dependencies = [ "async-trait", "cumulus-primitives-core", "cumulus-relay-chain-interface", - "cumulus-test-service", "futures", "futures-timer", "polkadot-cli", diff --git a/Cargo.toml b/Cargo.toml index d4497a7767e..487fc124da8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ members = [ "primitives/parachain-inherent", "primitives/timestamp", "primitives/utility", - "polkadot-parachain/", + "polkadot-parachain", "parachains/common", "parachains/pallets/parachain-info", "parachains/pallets/ping", diff --git a/client/relay-chain-inprocess-interface/Cargo.toml b/client/relay-chain-inprocess-interface/Cargo.toml index c8d5b93a2d0..05d237ad9c3 100644 --- a/client/relay-chain-inprocess-interface/Cargo.toml +++ b/client/relay-chain-inprocess-interface/Cargo.toml @@ -42,6 +42,3 @@ sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master # Polkadot polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } polkadot-test-client = { git = "https://github.com/paritytech/polkadot", branch = "master" } - -# Cumulus -cumulus-test-service = { path = "../../test/service" } diff --git a/client/service/src/lib.rs b/client/service/src/lib.rs index 600e1fcf444..269112b1622 100644 --- a/client/service/src/lib.rs +++ b/client/service/src/lib.rs @@ -125,9 +125,8 @@ where task_manager .spawn_essential_handle() .spawn("cumulus-pov-recovery", None, pov_recovery.run()); - cumulus_client_collator::start_collator(cumulus_client_collator::StartCollatorParams { - runtime_api: client.clone(), + runtime_api: client, block_status, announce_block, overseer_handle, diff --git a/pallets/parachain-system/src/validate_block/tests.rs b/pallets/parachain-system/src/validate_block/tests.rs index e06c2cafdcf..6087e6a29a3 100644 --- a/pallets/parachain-system/src/validate_block/tests.rs +++ b/pallets/parachain-system/src/validate_block/tests.rs @@ -284,7 +284,8 @@ fn check_inherents_are_unsigned_and_before_all_other_extrinsics() { .expect("Runs the test"); assert!(output.status.success()); - assert!(String::from_utf8(output.stderr).unwrap() + assert!(String::from_utf8(output.stderr) + .unwrap() .contains("Could not find `set_validation_data` inherent")); } } diff --git a/pallets/xcm/Cargo.toml b/pallets/xcm/Cargo.toml index 36a8e433f2f..4d1a38da171 100644 --- a/pallets/xcm/Cargo.toml +++ b/pallets/xcm/Cargo.toml @@ -30,5 +30,6 @@ std = [ "sp-runtime/std", "frame-support/std", "frame-system/std", + "xcm/std", ] try-runtime = ["frame-support/try-runtime"] diff --git a/parachains/common/Cargo.toml b/parachains/common/Cargo.toml index 041f02a73d6..46c5704d9b7 100644 --- a/parachains/common/Cargo.toml +++ b/parachains/common/Cargo.toml @@ -63,5 +63,7 @@ std = [ "sp-std/std", "pallet-collator-selection/std", "cumulus-primitives-utility/std", + "xcm/std", + "xcm-executor/std", "xcm-builder/std" ] diff --git a/parachains/pallets/ping/Cargo.toml b/parachains/pallets/ping/Cargo.toml index 00c17d65675..60a8eed188e 100644 --- a/parachains/pallets/ping/Cargo.toml +++ b/parachains/pallets/ping/Cargo.toml @@ -30,4 +30,5 @@ std = [ "sp-runtime/std", "frame-support/std", "frame-system/std", + "xcm/std", ] diff --git a/primitives/utility/Cargo.toml b/primitives/utility/Cargo.toml index 6a76740bde1..668e612f2b2 100644 --- a/primitives/utility/Cargo.toml +++ b/primitives/utility/Cargo.toml @@ -38,5 +38,7 @@ std = [ "polkadot-parachain/std", "polkadot-primitives/std", "cumulus-primitives-core/std", + "xcm/std", + "xcm-builder/std", "xcm-executor/std", ] From 397075f2c0e21d64d7d7c47900582a48dddfe30b Mon Sep 17 00:00:00 2001 From: Davide Galassi Date: Fri, 23 Sep 2022 20:58:33 +0200 Subject: [PATCH 085/148] Companion - Independence for Slot-based algorithms from timestamp (#1617) * Companion for Substrate #12224 * update lockfile for {"polkadot", "substrate"} Co-authored-by: parity-processbot <> --- Cargo.lock | 501 ++++++++++++------------- client/consensus/aura/src/lib.rs | 1 - parachain-template/node/src/service.rs | 12 +- polkadot-parachain/src/service.rs | 12 +- 4 files changed, 262 insertions(+), 264 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bcbd8a28233..c6adecd3d95 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -469,7 +469,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "array-bytes", "async-trait", @@ -505,7 +505,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -525,7 +525,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "beefy-primitives", "sp-api", @@ -534,7 +534,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "parity-scale-codec", "scale-info", @@ -2789,7 +2789,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "parity-scale-codec", ] @@ -2806,7 +2806,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support", "frame-system", @@ -2829,7 +2829,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "Inflector", "array-bytes", @@ -2880,7 +2880,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2891,7 +2891,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2907,7 +2907,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support", "frame-system", @@ -2936,7 +2936,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "bitflags", "frame-metadata", @@ -2968,7 +2968,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "Inflector", "cfg-expr", @@ -2982,7 +2982,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2994,7 +2994,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "proc-macro2", "quote", @@ -3004,7 +3004,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support", "log", @@ -3022,7 +3022,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -3037,7 +3037,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "parity-scale-codec", "sp-api", @@ -3046,7 +3046,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support", "parity-scale-codec", @@ -3925,7 +3925,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "beefy-primitives", "bitvec", @@ -4018,7 +4018,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "frame-support", "polkadot-primitives", @@ -5357,7 +5357,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "async-trait", "dyn-clonable", @@ -5373,7 +5373,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "expander 0.0.6", "itertools", @@ -5411,7 +5411,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "array-bytes", "frame-benchmarking", @@ -5432,7 +5432,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support", "frame-system", @@ -5449,7 +5449,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -5463,7 +5463,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support", "frame-system", @@ -5479,7 +5479,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support", "frame-system", @@ -5495,7 +5495,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support", "frame-system", @@ -5510,7 +5510,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -5534,7 +5534,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5554,7 +5554,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -5569,7 +5569,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "beefy-primitives", "frame-support", @@ -5585,7 +5585,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "array-bytes", "beefy-merkle-tree", @@ -5608,7 +5608,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -5626,7 +5626,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -5671,7 +5671,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -5688,7 +5688,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "bitflags", "frame-benchmarking", @@ -5716,7 +5716,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "bitflags", "parity-scale-codec", @@ -5731,7 +5731,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "proc-macro2", "quote", @@ -5741,7 +5741,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5758,7 +5758,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5771,7 +5771,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -5787,7 +5787,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5811,7 +5811,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5824,7 +5824,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -5842,7 +5842,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -5857,7 +5857,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -5880,7 +5880,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5896,7 +5896,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -5916,7 +5916,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -5933,7 +5933,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -5950,7 +5950,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5968,7 +5968,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5983,7 +5983,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -5998,7 +5998,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support", "frame-system", @@ -6015,7 +6015,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6035,7 +6035,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "parity-scale-codec", "sp-api", @@ -6045,7 +6045,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support", "frame-system", @@ -6062,7 +6062,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6085,7 +6085,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -6101,7 +6101,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -6116,7 +6116,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support", "frame-system", @@ -6130,7 +6130,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -6145,7 +6145,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -6161,7 +6161,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support", "frame-system", @@ -6182,7 +6182,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -6198,7 +6198,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support", "frame-system", @@ -6212,7 +6212,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6235,7 +6235,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6246,7 +6246,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "log", "sp-arithmetic", @@ -6255,7 +6255,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support", "frame-system", @@ -6284,7 +6284,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -6302,7 +6302,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -6321,7 +6321,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-support", "frame-system", @@ -6337,7 +6337,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6352,7 +6352,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6363,7 +6363,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -6380,7 +6380,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -6395,7 +6395,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -6411,7 +6411,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-benchmarking", "frame-support", @@ -6426,7 +6426,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "frame-support", "frame-system", @@ -6444,7 +6444,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "frame-benchmarking", "frame-support", @@ -7013,7 +7013,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7028,7 +7028,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7042,7 +7042,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "derive_more", "fatality", @@ -7065,7 +7065,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "fatality", "futures", @@ -7086,7 +7086,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7112,7 +7112,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7153,7 +7153,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "always-assert", "fatality", @@ -7174,7 +7174,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7187,7 +7187,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "derive_more", "fatality", @@ -7210,7 +7210,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7224,7 +7224,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "futures", "futures-timer", @@ -7244,7 +7244,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "always-assert", "async-trait", @@ -7268,7 +7268,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "futures", "parity-scale-codec", @@ -7286,7 +7286,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "bitvec", "derive_more", @@ -7315,7 +7315,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "bitvec", "futures", @@ -7335,7 +7335,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "bitvec", "fatality", @@ -7354,7 +7354,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7369,7 +7369,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "async-trait", "futures", @@ -7387,7 +7387,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7402,7 +7402,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "futures", "futures-timer", @@ -7419,7 +7419,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "fatality", "futures", @@ -7438,7 +7438,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "async-trait", "futures", @@ -7455,7 +7455,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "bitvec", "fatality", @@ -7473,7 +7473,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "always-assert", "assert_matches", @@ -7505,7 +7505,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "futures", "polkadot-node-primitives", @@ -7521,7 +7521,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "futures", "memory-lru", @@ -7537,7 +7537,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "async-std", "lazy_static", @@ -7555,7 +7555,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "bs58", "futures", @@ -7574,7 +7574,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "async-trait", "derive_more", @@ -7596,7 +7596,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "bounded-vec", "futures", @@ -7618,7 +7618,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7628,7 +7628,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "async-trait", "futures", @@ -7646,7 +7646,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "async-trait", "derive_more", @@ -7669,7 +7669,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "async-trait", "derive_more", @@ -7702,7 +7702,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "async-trait", "futures", @@ -7725,7 +7725,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "derive_more", "frame-support", @@ -7825,7 +7825,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7840,7 +7840,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "bitvec", "frame-system", @@ -7870,7 +7870,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7902,7 +7902,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "beefy-primitives", "bitvec", @@ -7990,7 +7990,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "beefy-primitives", "bitvec", @@ -8037,7 +8037,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "frame-support", "polkadot-primitives", @@ -8049,7 +8049,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "bs58", "parity-scale-codec", @@ -8061,7 +8061,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "bitflags", "bitvec", @@ -8104,7 +8104,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "async-trait", "beefy-gadget", @@ -8209,7 +8209,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8230,7 +8230,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8240,7 +8240,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8265,7 +8265,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "beefy-primitives", "bitvec", @@ -8326,7 +8326,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "frame-benchmarking", "frame-system", @@ -8471,7 +8471,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8956,7 +8956,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9078,7 +9078,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9162,7 +9162,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "frame-support", "polkadot-primitives", @@ -9332,7 +9332,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "log", "sp-core", @@ -9343,7 +9343,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "async-trait", "futures", @@ -9370,7 +9370,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "futures", "futures-timer", @@ -9393,7 +9393,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9409,7 +9409,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9426,7 +9426,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9437,7 +9437,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "array-bytes", "chrono", @@ -9476,7 +9476,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "fnv", "futures", @@ -9504,7 +9504,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "hash-db", "kvdb", @@ -9529,7 +9529,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "async-trait", "futures", @@ -9553,7 +9553,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "async-trait", "futures", @@ -9582,7 +9582,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "async-trait", "fork-tree", @@ -9624,7 +9624,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "futures", "jsonrpsee", @@ -9646,7 +9646,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9659,7 +9659,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "async-trait", "futures", @@ -9677,14 +9677,13 @@ dependencies = [ "sp-inherents", "sp-runtime", "sp-state-machine", - "sp-timestamp", "thiserror", ] [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9711,7 +9710,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "environmental", "parity-scale-codec", @@ -9727,7 +9726,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "log", "parity-scale-codec", @@ -9742,7 +9741,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9762,7 +9761,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "ahash", "array-bytes", @@ -9803,7 +9802,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "finality-grandpa", "futures", @@ -9824,7 +9823,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "ansi_term", "futures", @@ -9841,7 +9840,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "array-bytes", "async-trait", @@ -9856,7 +9855,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "array-bytes", "async-trait", @@ -9903,7 +9902,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "cid", "futures", @@ -9923,7 +9922,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "async-trait", "bitflags", @@ -9946,7 +9945,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "ahash", "futures", @@ -9964,7 +9963,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "array-bytes", "futures", @@ -9985,7 +9984,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "array-bytes", "fork-tree", @@ -10013,7 +10012,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "array-bytes", "bytes", @@ -10043,7 +10042,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "futures", "libp2p", @@ -10056,7 +10055,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10065,7 +10064,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "futures", "hash-db", @@ -10095,7 +10094,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "futures", "jsonrpsee", @@ -10118,7 +10117,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "futures", "jsonrpsee", @@ -10131,7 +10130,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "async-trait", "directories", @@ -10200,7 +10199,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "log", "parity-scale-codec", @@ -10214,7 +10213,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10233,7 +10232,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "futures", "libc", @@ -10252,7 +10251,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "chrono", "futures", @@ -10270,7 +10269,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "ansi_term", "atty", @@ -10301,7 +10300,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10312,7 +10311,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "futures", "futures-timer", @@ -10338,7 +10337,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "futures", "log", @@ -10351,7 +10350,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "futures", "futures-timer", @@ -10789,7 +10788,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "enumn", "parity-scale-codec", @@ -10865,7 +10864,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "hash-db", "log", @@ -10883,7 +10882,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "blake2", "proc-macro-crate", @@ -10895,7 +10894,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "parity-scale-codec", "scale-info", @@ -10908,7 +10907,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "integer-sqrt", "num-traits", @@ -10923,7 +10922,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "parity-scale-codec", "scale-info", @@ -10936,7 +10935,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "async-trait", "parity-scale-codec", @@ -10948,7 +10947,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "parity-scale-codec", "sp-api", @@ -10960,7 +10959,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "futures", "log", @@ -10978,7 +10977,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "async-trait", "futures", @@ -10997,7 +10996,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "async-trait", "parity-scale-codec", @@ -11015,7 +11014,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "async-trait", "merlin", @@ -11038,7 +11037,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "parity-scale-codec", "scale-info", @@ -11052,7 +11051,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "parity-scale-codec", "scale-info", @@ -11065,7 +11064,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "array-bytes", "base58", @@ -11111,7 +11110,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "blake2", "byteorder", @@ -11125,7 +11124,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "proc-macro2", "quote", @@ -11136,7 +11135,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11145,7 +11144,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "proc-macro2", "quote", @@ -11155,7 +11154,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "environmental", "parity-scale-codec", @@ -11166,7 +11165,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "finality-grandpa", "log", @@ -11184,7 +11183,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11198,7 +11197,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "bytes", "futures", @@ -11224,7 +11223,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "lazy_static", "sp-core", @@ -11235,7 +11234,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "async-trait", "futures", @@ -11252,7 +11251,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "thiserror", "zstd", @@ -11261,7 +11260,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "log", "parity-scale-codec", @@ -11276,7 +11275,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "parity-scale-codec", "scale-info", @@ -11290,7 +11289,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "sp-api", "sp-core", @@ -11300,7 +11299,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "backtrace", "lazy_static", @@ -11310,7 +11309,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "rustc-hash", "serde", @@ -11320,7 +11319,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "either", "hash256-std-hasher", @@ -11343,7 +11342,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11361,7 +11360,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "Inflector", "proc-macro-crate", @@ -11373,7 +11372,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "log", "parity-scale-codec", @@ -11387,7 +11386,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "serde", "serde_json", @@ -11396,7 +11395,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "parity-scale-codec", "scale-info", @@ -11410,7 +11409,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "parity-scale-codec", "scale-info", @@ -11421,7 +11420,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "hash-db", "log", @@ -11443,12 +11442,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11461,7 +11460,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "log", "sp-core", @@ -11474,7 +11473,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "async-trait", "futures-timer", @@ -11490,7 +11489,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "parity-scale-codec", "sp-std", @@ -11502,7 +11501,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "sp-api", "sp-runtime", @@ -11511,7 +11510,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "async-trait", "log", @@ -11527,7 +11526,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "ahash", "hash-db", @@ -11550,7 +11549,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11567,7 +11566,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11578,7 +11577,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "impl-trait-for-tuples", "log", @@ -11591,7 +11590,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11893,7 +11892,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "platforms", ] @@ -11901,7 +11900,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11922,7 +11921,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "futures-util", "hyper", @@ -11935,7 +11934,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "jsonrpsee", "log", @@ -11956,7 +11955,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "array-bytes", "async-trait", @@ -11982,7 +11981,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11992,7 +11991,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -12003,7 +12002,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "ansi_term", "build-helper", @@ -12111,7 +12110,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "frame-support", "polkadot-primitives", @@ -12392,7 +12391,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12403,7 +12402,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12530,7 +12529,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#1f720c11b90d45bba0c4ddad60d3b9a27ca85441" +source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" dependencies = [ "clap", "frame-try-runtime", @@ -13118,7 +13117,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "beefy-primitives", "bitvec", @@ -13207,7 +13206,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "frame-support", "polkadot-primitives", @@ -13493,7 +13492,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13507,7 +13506,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "frame-support", "frame-system", @@ -13527,7 +13526,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "frame-benchmarking", "frame-support", @@ -13545,7 +13544,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#50c514d448bb513b162a483b6ede473e01954131" +source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" dependencies = [ "Inflector", "proc-macro2", diff --git a/client/consensus/aura/src/lib.rs b/client/consensus/aura/src/lib.rs index f88bca38d4b..1be562e37cb 100644 --- a/client/consensus/aura/src/lib.rs +++ b/client/consensus/aura/src/lib.rs @@ -201,7 +201,6 @@ where let info = SlotInfo::new( inherent_data_providers.slot(), - inherent_data_providers.timestamp(), inherent_data, self.slot_duration.as_duration(), parent.clone(), diff --git a/parachain-template/node/src/service.rs b/parachain-template/node/src/service.rs index f57411642b7..84e0fbff3e6 100644 --- a/parachain-template/node/src/service.rs +++ b/parachain-template/node/src/service.rs @@ -427,15 +427,15 @@ pub fn parachain_build_import_queue( block_import: client.clone(), client: client.clone(), create_inherent_data_providers: move |_, _| async move { - let time = sp_timestamp::InherentDataProvider::from_system_time(); + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); let slot = sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( - *time, + *timestamp, slot_duration, ); - Ok((time, slot)) + Ok((slot, timestamp)) }, registry: config.prometheus_registry(), spawner: &task_manager.spawn_essential_handle(), @@ -494,11 +494,11 @@ pub async fn start_parachain_node( &validation_data, id, ).await; - let time = sp_timestamp::InherentDataProvider::from_system_time(); + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); let slot = sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( - *time, + *timestamp, slot_duration, ); @@ -507,7 +507,7 @@ pub async fn start_parachain_node( "Failed to create parachain inherent", ) })?; - Ok((time, slot, parachain_inherent)) + Ok((slot, timestamp, parachain_inherent)) } }, block_import: client.clone(), diff --git a/polkadot-parachain/src/service.rs b/polkadot-parachain/src/service.rs index 2bdeed82b1f..3085804a2b4 100644 --- a/polkadot-parachain/src/service.rs +++ b/polkadot-parachain/src/service.rs @@ -722,7 +722,7 @@ pub fn rococo_parachain_build_import_queue( slot_duration, ); - Ok((timestamp, slot)) + Ok((slot, timestamp)) }, registry: config.prometheus_registry(), spawner: &task_manager.spawn_essential_handle(), @@ -797,7 +797,7 @@ pub async fn start_rococo_parachain_node( ) })?; - Ok((timestamp, slot, parachain_inherent)) + Ok((slot, timestamp, parachain_inherent)) } }, block_import: client.clone(), @@ -1096,7 +1096,7 @@ where slot_duration, ); - Ok((timestamp, slot)) + Ok((slot, timestamp)) }, telemetry: telemetry_handle, }, @@ -1223,7 +1223,7 @@ where ) })?; - Ok((timestamp, slot, parachain_inherent)) + Ok((slot, timestamp, parachain_inherent)) } }, block_import: client2.clone(), @@ -1537,7 +1537,7 @@ pub fn contracts_rococo_build_import_queue( slot_duration, ); - Ok((timestamp, slot)) + Ok((slot, timestamp)) }, registry: config.prometheus_registry(), spawner: &task_manager.spawn_essential_handle(), @@ -1611,7 +1611,7 @@ pub async fn start_contracts_rococo_node( ) })?; - Ok((timestamp, slot, parachain_inherent)) + Ok((slot, timestamp, parachain_inherent)) } }, block_import: client.clone(), From 8de4cde75533ab76e7017d96fa2b694601143c12 Mon Sep 17 00:00:00 2001 From: ZhiYong Date: Mon, 26 Sep 2022 19:25:59 +0800 Subject: [PATCH 086/148] Companion for substrate#11983. (#1613) * Companion for substrate#11983. * cargo update -p sp-io Signed-off-by: Oliver Tale-Yazdi * cargo update -p polkadot-runtime-common Signed-off-by: Oliver Tale-Yazdi * Revert "cargo update -p polkadot-runtime-common" This reverts commit bdadad94c54836980a8dbafe3e6ecb33a94f3e17. * Revert "cargo update -p sp-io" This reverts commit f6b4ecc53f54982c9c8ec0d9368baad19063bda4. * cargo update -p sp-io Signed-off-by: Oliver Tale-Yazdi Signed-off-by: Oliver Tale-Yazdi Co-authored-by: Oliver Tale-Yazdi --- Cargo.lock | 468 ++++++++++++++++++++-------------------- test/service/src/lib.rs | 2 +- 2 files changed, 235 insertions(+), 235 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c6adecd3d95..c5e8ec257a1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -469,7 +469,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "array-bytes", "async-trait", @@ -505,7 +505,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -525,7 +525,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "beefy-primitives", "sp-api", @@ -534,7 +534,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "parity-scale-codec", "scale-info", @@ -2789,7 +2789,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "parity-scale-codec", ] @@ -2806,7 +2806,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-support", "frame-system", @@ -2829,7 +2829,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "Inflector", "array-bytes", @@ -2880,7 +2880,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2891,7 +2891,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2907,7 +2907,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-support", "frame-system", @@ -2936,7 +2936,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "bitflags", "frame-metadata", @@ -2968,7 +2968,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "Inflector", "cfg-expr", @@ -2982,7 +2982,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2994,7 +2994,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "proc-macro2", "quote", @@ -3004,7 +3004,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-support", "log", @@ -3022,7 +3022,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -3037,7 +3037,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "parity-scale-codec", "sp-api", @@ -3046,7 +3046,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-support", "parity-scale-codec", @@ -3925,7 +3925,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "beefy-primitives", "bitvec", @@ -4018,7 +4018,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "frame-support", "polkadot-primitives", @@ -5357,7 +5357,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "async-trait", "dyn-clonable", @@ -5373,7 +5373,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "expander 0.0.6", "itertools", @@ -5479,7 +5479,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-support", "frame-system", @@ -5495,7 +5495,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-support", "frame-system", @@ -5510,7 +5510,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -5534,7 +5534,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5554,7 +5554,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -5569,7 +5569,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "beefy-primitives", "frame-support", @@ -5585,7 +5585,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "array-bytes", "beefy-merkle-tree", @@ -5608,7 +5608,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -5626,7 +5626,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -5671,7 +5671,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -5771,7 +5771,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -5787,7 +5787,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5811,7 +5811,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5824,7 +5824,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -5842,7 +5842,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -5857,7 +5857,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -5880,7 +5880,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5896,7 +5896,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -5916,7 +5916,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -5933,7 +5933,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -5950,7 +5950,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5968,7 +5968,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5983,7 +5983,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -5998,7 +5998,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-support", "frame-system", @@ -6015,7 +6015,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6035,7 +6035,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "parity-scale-codec", "sp-api", @@ -6045,7 +6045,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-support", "frame-system", @@ -6062,7 +6062,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6085,7 +6085,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -6101,7 +6101,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -6130,7 +6130,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -6145,7 +6145,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -6161,7 +6161,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-support", "frame-system", @@ -6182,7 +6182,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -6198,7 +6198,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-support", "frame-system", @@ -6212,7 +6212,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6235,7 +6235,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6246,7 +6246,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "log", "sp-arithmetic", @@ -6255,7 +6255,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-support", "frame-system", @@ -6284,7 +6284,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -6302,7 +6302,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -6321,7 +6321,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-support", "frame-system", @@ -6337,7 +6337,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6352,7 +6352,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6363,7 +6363,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -6395,7 +6395,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -6411,7 +6411,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-benchmarking", "frame-support", @@ -6426,7 +6426,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "frame-support", "frame-system", @@ -6444,7 +6444,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "frame-benchmarking", "frame-support", @@ -7013,7 +7013,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7028,7 +7028,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7042,7 +7042,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "derive_more", "fatality", @@ -7065,7 +7065,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "fatality", "futures", @@ -7086,7 +7086,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7112,7 +7112,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7153,7 +7153,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "always-assert", "fatality", @@ -7174,7 +7174,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7187,7 +7187,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "derive_more", "fatality", @@ -7210,7 +7210,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7224,7 +7224,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "futures", "futures-timer", @@ -7244,7 +7244,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "always-assert", "async-trait", @@ -7268,7 +7268,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "futures", "parity-scale-codec", @@ -7286,7 +7286,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "bitvec", "derive_more", @@ -7315,7 +7315,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "bitvec", "futures", @@ -7335,7 +7335,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "bitvec", "fatality", @@ -7354,7 +7354,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7369,7 +7369,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "async-trait", "futures", @@ -7387,7 +7387,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7402,7 +7402,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "futures", "futures-timer", @@ -7419,7 +7419,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "fatality", "futures", @@ -7438,7 +7438,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "async-trait", "futures", @@ -7455,7 +7455,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "bitvec", "fatality", @@ -7473,7 +7473,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "always-assert", "assert_matches", @@ -7505,7 +7505,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "futures", "polkadot-node-primitives", @@ -7521,7 +7521,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "futures", "memory-lru", @@ -7537,7 +7537,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "async-std", "lazy_static", @@ -7555,7 +7555,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "bs58", "futures", @@ -7574,7 +7574,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "async-trait", "derive_more", @@ -7596,7 +7596,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "bounded-vec", "futures", @@ -7618,7 +7618,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7628,7 +7628,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "async-trait", "futures", @@ -7646,7 +7646,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "async-trait", "derive_more", @@ -7669,7 +7669,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "async-trait", "derive_more", @@ -7702,7 +7702,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "async-trait", "futures", @@ -7725,7 +7725,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "derive_more", "frame-support", @@ -7825,7 +7825,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7840,7 +7840,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "bitvec", "frame-system", @@ -7870,7 +7870,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7902,7 +7902,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "beefy-primitives", "bitvec", @@ -7990,7 +7990,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "beefy-primitives", "bitvec", @@ -8037,7 +8037,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "frame-support", "polkadot-primitives", @@ -8049,7 +8049,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "bs58", "parity-scale-codec", @@ -8061,7 +8061,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "bitflags", "bitvec", @@ -8104,7 +8104,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "async-trait", "beefy-gadget", @@ -8209,7 +8209,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8230,7 +8230,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8240,7 +8240,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8265,7 +8265,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "beefy-primitives", "bitvec", @@ -8326,7 +8326,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "frame-benchmarking", "frame-system", @@ -8471,7 +8471,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8956,7 +8956,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9078,7 +9078,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9162,7 +9162,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "frame-support", "polkadot-primitives", @@ -9332,7 +9332,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "log", "sp-core", @@ -9343,7 +9343,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "async-trait", "futures", @@ -9370,7 +9370,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "futures", "futures-timer", @@ -9393,7 +9393,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9409,7 +9409,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9426,7 +9426,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9437,7 +9437,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "array-bytes", "chrono", @@ -9476,7 +9476,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "fnv", "futures", @@ -9504,7 +9504,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "hash-db", "kvdb", @@ -9529,7 +9529,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "async-trait", "futures", @@ -9582,7 +9582,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "async-trait", "fork-tree", @@ -9624,7 +9624,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "futures", "jsonrpsee", @@ -9646,7 +9646,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9659,7 +9659,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "async-trait", "futures", @@ -9683,7 +9683,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9710,7 +9710,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "environmental", "parity-scale-codec", @@ -9726,7 +9726,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "log", "parity-scale-codec", @@ -9741,7 +9741,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9761,7 +9761,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "ahash", "array-bytes", @@ -9802,7 +9802,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "finality-grandpa", "futures", @@ -9823,7 +9823,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "ansi_term", "futures", @@ -9840,7 +9840,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "array-bytes", "async-trait", @@ -9855,7 +9855,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "array-bytes", "async-trait", @@ -9902,7 +9902,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "cid", "futures", @@ -9922,7 +9922,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "async-trait", "bitflags", @@ -9945,7 +9945,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "ahash", "futures", @@ -9963,7 +9963,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "array-bytes", "futures", @@ -9984,7 +9984,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "array-bytes", "fork-tree", @@ -10012,7 +10012,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "array-bytes", "bytes", @@ -10042,7 +10042,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "futures", "libp2p", @@ -10055,7 +10055,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10064,7 +10064,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "futures", "hash-db", @@ -10094,7 +10094,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "futures", "jsonrpsee", @@ -10117,7 +10117,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "futures", "jsonrpsee", @@ -10130,7 +10130,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "async-trait", "directories", @@ -10199,7 +10199,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "log", "parity-scale-codec", @@ -10213,7 +10213,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10232,7 +10232,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "futures", "libc", @@ -10251,7 +10251,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "chrono", "futures", @@ -10269,7 +10269,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "ansi_term", "atty", @@ -10300,7 +10300,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10311,7 +10311,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "futures", "futures-timer", @@ -10337,7 +10337,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "futures", "log", @@ -10350,7 +10350,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "futures", "futures-timer", @@ -10788,7 +10788,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "enumn", "parity-scale-codec", @@ -10864,7 +10864,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "hash-db", "log", @@ -10882,7 +10882,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "blake2", "proc-macro-crate", @@ -10894,7 +10894,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "parity-scale-codec", "scale-info", @@ -10907,7 +10907,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "integer-sqrt", "num-traits", @@ -10922,7 +10922,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "parity-scale-codec", "scale-info", @@ -10935,7 +10935,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "async-trait", "parity-scale-codec", @@ -10947,7 +10947,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "parity-scale-codec", "sp-api", @@ -10959,7 +10959,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "futures", "log", @@ -10977,7 +10977,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "async-trait", "futures", @@ -11014,7 +11014,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "async-trait", "merlin", @@ -11037,7 +11037,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "parity-scale-codec", "scale-info", @@ -11051,7 +11051,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "parity-scale-codec", "scale-info", @@ -11064,7 +11064,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "array-bytes", "base58", @@ -11110,7 +11110,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "blake2", "byteorder", @@ -11124,7 +11124,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "proc-macro2", "quote", @@ -11135,7 +11135,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11144,7 +11144,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "proc-macro2", "quote", @@ -11154,7 +11154,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "environmental", "parity-scale-codec", @@ -11165,7 +11165,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "finality-grandpa", "log", @@ -11183,7 +11183,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11197,7 +11197,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "bytes", "futures", @@ -11223,7 +11223,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "lazy_static", "sp-core", @@ -11234,7 +11234,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "async-trait", "futures", @@ -11251,7 +11251,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "thiserror", "zstd", @@ -11260,7 +11260,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "log", "parity-scale-codec", @@ -11275,7 +11275,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "parity-scale-codec", "scale-info", @@ -11289,7 +11289,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "sp-api", "sp-core", @@ -11299,7 +11299,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "backtrace", "lazy_static", @@ -11309,7 +11309,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "rustc-hash", "serde", @@ -11319,7 +11319,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "either", "hash256-std-hasher", @@ -11342,7 +11342,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11360,7 +11360,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "Inflector", "proc-macro-crate", @@ -11372,7 +11372,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "log", "parity-scale-codec", @@ -11395,7 +11395,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "parity-scale-codec", "scale-info", @@ -11409,7 +11409,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "parity-scale-codec", "scale-info", @@ -11420,7 +11420,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "hash-db", "log", @@ -11442,12 +11442,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11460,7 +11460,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "log", "sp-core", @@ -11473,7 +11473,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "async-trait", "futures-timer", @@ -11489,7 +11489,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "parity-scale-codec", "sp-std", @@ -11501,7 +11501,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "sp-api", "sp-runtime", @@ -11510,7 +11510,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "async-trait", "log", @@ -11526,7 +11526,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "ahash", "hash-db", @@ -11549,7 +11549,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11566,7 +11566,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11577,7 +11577,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "impl-trait-for-tuples", "log", @@ -11590,7 +11590,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11892,7 +11892,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "platforms", ] @@ -11900,7 +11900,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11921,7 +11921,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "futures-util", "hyper", @@ -11934,7 +11934,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "jsonrpsee", "log", @@ -11955,7 +11955,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "array-bytes", "async-trait", @@ -12002,7 +12002,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "ansi_term", "build-helper", @@ -12110,7 +12110,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "frame-support", "polkadot-primitives", @@ -12391,7 +12391,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12402,7 +12402,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12529,7 +12529,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" dependencies = [ "clap", "frame-try-runtime", @@ -13117,7 +13117,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "beefy-primitives", "bitvec", @@ -13206,7 +13206,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "frame-support", "polkadot-primitives", @@ -13492,7 +13492,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13506,7 +13506,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "frame-support", "frame-system", @@ -13526,7 +13526,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "frame-benchmarking", "frame-support", @@ -13544,7 +13544,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d2974e57296270ec43fd021c31c6e73ad3b001a0" +source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" dependencies = [ "Inflector", "proc-macro2", diff --git a/test/service/src/lib.rs b/test/service/src/lib.rs index 53a04d47e6d..952507b4ab5 100644 --- a/test/service/src/lib.rs +++ b/test/service/src/lib.rs @@ -653,7 +653,7 @@ pub fn node_config( database: DatabaseSource::RocksDb { path: root.join("db"), cache_size: 128 }, trie_cache_maximum_size: Some(64 * 1024 * 1024), state_pruning: Some(PruningMode::ArchiveAll), - blocks_pruning: BlocksPruning::All, + blocks_pruning: BlocksPruning::KeepAll, chain_spec: spec, wasm_method: WasmExecutionMethod::Interpreted, // NOTE: we enforce the use of the native runtime to make the errors more debuggable From 7357a35a294469344fada5b524604dec5ca47f80 Mon Sep 17 00:00:00 2001 From: Aaro Altonen <48052676+altonen@users.noreply.github.com> Date: Mon, 26 Sep 2022 16:40:25 +0300 Subject: [PATCH 087/148] Companion for paritytech/substrate#12264 (#1661) * Companion for paritytech/substrate#12264 * Fix more tests * disable sc-network-transactions to check companion * Fix node config in tests * update lockfile for {"substrate", "polkadot"} Co-authored-by: parity-processbot <> Co-authored-by: alvicsam --- .gitlab-ci.yml | 2 +- Cargo.lock | 526 +++++++++++++------------ parachain-template/node/src/service.rs | 3 +- polkadot-parachain/src/service.rs | 9 +- test/service/src/lib.rs | 9 +- 5 files changed, 290 insertions(+), 259 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 51bc617b0bd..17544826bca 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -638,7 +638,7 @@ zombienet-0005-migrate_solo_to_para: # This job cancels the whole pipeline if any of provided jobs fail. # In a DAG, every jobs chain is executed independently of others. The `fail_fast` principle suggests # to fail the pipeline as soon as possible to shorten the feedback loop. -cancel-pipeline: +.cancel-pipeline: stage: .post needs: - job: test-linux-stable diff --git a/Cargo.lock b/Cargo.lock index c5e8ec257a1..2aaa83b687e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -469,7 +469,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "array-bytes", "async-trait", @@ -486,6 +486,7 @@ dependencies = [ "sc-finality-grandpa", "sc-keystore", "sc-network", + "sc-network-common", "sc-network-gossip", "sc-utils", "sp-api", @@ -505,7 +506,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -525,7 +526,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "beefy-primitives", "sp-api", @@ -534,7 +535,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "parity-scale-codec", "scale-info", @@ -2789,7 +2790,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "parity-scale-codec", ] @@ -2806,7 +2807,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support", "frame-system", @@ -2829,7 +2830,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "Inflector", "array-bytes", @@ -2880,7 +2881,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2891,7 +2892,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2907,7 +2908,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support", "frame-system", @@ -2936,7 +2937,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "bitflags", "frame-metadata", @@ -2968,7 +2969,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "Inflector", "cfg-expr", @@ -2982,7 +2983,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2994,7 +2995,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "proc-macro2", "quote", @@ -3004,7 +3005,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support", "log", @@ -3022,7 +3023,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -3037,7 +3038,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "parity-scale-codec", "sp-api", @@ -3046,7 +3047,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support", "parity-scale-codec", @@ -3925,7 +3926,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "beefy-primitives", "bitvec", @@ -4018,7 +4019,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "frame-support", "polkadot-primitives", @@ -5357,7 +5358,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "async-trait", "dyn-clonable", @@ -5373,7 +5374,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "expander 0.0.6", "itertools", @@ -5411,7 +5412,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "array-bytes", "frame-benchmarking", @@ -5432,7 +5433,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support", "frame-system", @@ -5449,7 +5450,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -5463,7 +5464,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support", "frame-system", @@ -5479,7 +5480,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support", "frame-system", @@ -5495,7 +5496,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support", "frame-system", @@ -5510,7 +5511,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -5534,7 +5535,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5554,7 +5555,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -5569,7 +5570,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "beefy-primitives", "frame-support", @@ -5585,7 +5586,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "array-bytes", "beefy-merkle-tree", @@ -5608,7 +5609,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -5626,7 +5627,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -5671,7 +5672,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -5688,7 +5689,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "bitflags", "frame-benchmarking", @@ -5716,7 +5717,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "bitflags", "parity-scale-codec", @@ -5731,7 +5732,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "proc-macro2", "quote", @@ -5741,7 +5742,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "jsonrpsee", "pallet-contracts-primitives", @@ -5758,7 +5759,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5771,7 +5772,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -5787,7 +5788,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5811,7 +5812,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5824,7 +5825,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -5842,7 +5843,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -5857,7 +5858,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -5880,7 +5881,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5896,7 +5897,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -5916,7 +5917,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -5933,7 +5934,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -5950,7 +5951,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5968,7 +5969,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5983,7 +5984,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -5998,7 +5999,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support", "frame-system", @@ -6015,7 +6016,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6035,7 +6036,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "parity-scale-codec", "sp-api", @@ -6045,7 +6046,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support", "frame-system", @@ -6062,7 +6063,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6085,7 +6086,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -6101,7 +6102,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -6116,7 +6117,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support", "frame-system", @@ -6130,7 +6131,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -6145,7 +6146,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -6161,7 +6162,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support", "frame-system", @@ -6182,7 +6183,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -6198,7 +6199,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support", "frame-system", @@ -6212,7 +6213,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6235,7 +6236,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6246,7 +6247,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "log", "sp-arithmetic", @@ -6255,7 +6256,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support", "frame-system", @@ -6284,7 +6285,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -6302,7 +6303,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -6321,7 +6322,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-support", "frame-system", @@ -6337,7 +6338,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6352,7 +6353,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6363,7 +6364,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -6380,7 +6381,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -6395,7 +6396,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -6411,7 +6412,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-benchmarking", "frame-support", @@ -6426,7 +6427,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "frame-support", "frame-system", @@ -6444,7 +6445,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "frame-benchmarking", "frame-support", @@ -7013,7 +7014,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7028,7 +7029,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7042,7 +7043,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "derive_more", "fatality", @@ -7065,7 +7066,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "fatality", "futures", @@ -7086,7 +7087,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7112,7 +7113,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7153,7 +7154,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "always-assert", "fatality", @@ -7174,7 +7175,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7187,7 +7188,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "derive_more", "fatality", @@ -7210,7 +7211,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7224,7 +7225,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "futures", "futures-timer", @@ -7244,7 +7245,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "always-assert", "async-trait", @@ -7268,7 +7269,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "futures", "parity-scale-codec", @@ -7286,7 +7287,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "bitvec", "derive_more", @@ -7315,7 +7316,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "bitvec", "futures", @@ -7335,7 +7336,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "bitvec", "fatality", @@ -7354,7 +7355,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7369,7 +7370,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "async-trait", "futures", @@ -7387,7 +7388,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7402,7 +7403,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "futures", "futures-timer", @@ -7419,7 +7420,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "fatality", "futures", @@ -7438,7 +7439,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "async-trait", "futures", @@ -7455,7 +7456,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "bitvec", "fatality", @@ -7473,7 +7474,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "always-assert", "assert_matches", @@ -7505,7 +7506,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "futures", "polkadot-node-primitives", @@ -7521,7 +7522,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "futures", "memory-lru", @@ -7537,7 +7538,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "async-std", "lazy_static", @@ -7555,7 +7556,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "bs58", "futures", @@ -7574,7 +7575,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "async-trait", "derive_more", @@ -7588,6 +7589,7 @@ dependencies = [ "rand 0.8.5", "sc-authority-discovery", "sc-network", + "sc-network-common", "strum", "thiserror", "tracing-gum", @@ -7596,7 +7598,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "bounded-vec", "futures", @@ -7618,7 +7620,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7628,7 +7630,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "async-trait", "futures", @@ -7646,7 +7648,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "async-trait", "derive_more", @@ -7669,7 +7671,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "async-trait", "derive_more", @@ -7702,7 +7704,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "async-trait", "futures", @@ -7725,7 +7727,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "derive_more", "frame-support", @@ -7825,7 +7827,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7840,7 +7842,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "bitvec", "frame-system", @@ -7870,7 +7872,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7902,7 +7904,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "beefy-primitives", "bitvec", @@ -7990,7 +7992,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "beefy-primitives", "bitvec", @@ -8037,7 +8039,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "frame-support", "polkadot-primitives", @@ -8049,7 +8051,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "bs58", "parity-scale-codec", @@ -8061,7 +8063,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "bitflags", "bitvec", @@ -8104,7 +8106,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "async-trait", "beefy-gadget", @@ -8209,7 +8211,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8230,7 +8232,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8240,7 +8242,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8265,7 +8267,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "beefy-primitives", "bitvec", @@ -8326,7 +8328,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "frame-benchmarking", "frame-system", @@ -8471,7 +8473,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8956,7 +8958,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9078,7 +9080,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9162,7 +9164,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "frame-support", "polkadot-primitives", @@ -9332,7 +9334,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "log", "sp-core", @@ -9343,7 +9345,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "async-trait", "futures", @@ -9370,7 +9372,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "futures", "futures-timer", @@ -9393,7 +9395,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9409,7 +9411,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9426,7 +9428,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9437,7 +9439,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "array-bytes", "chrono", @@ -9455,6 +9457,7 @@ dependencies = [ "sc-client-db", "sc-keystore", "sc-network", + "sc-network-common", "sc-service", "sc-telemetry", "sc-tracing", @@ -9476,7 +9479,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "fnv", "futures", @@ -9504,7 +9507,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "hash-db", "kvdb", @@ -9529,7 +9532,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "async-trait", "futures", @@ -9553,7 +9556,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "async-trait", "futures", @@ -9582,7 +9585,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "async-trait", "fork-tree", @@ -9624,7 +9627,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "futures", "jsonrpsee", @@ -9646,7 +9649,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9659,7 +9662,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "async-trait", "futures", @@ -9683,7 +9686,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9710,7 +9713,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "environmental", "parity-scale-codec", @@ -9726,7 +9729,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "log", "parity-scale-codec", @@ -9741,7 +9744,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9761,7 +9764,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "ahash", "array-bytes", @@ -9802,7 +9805,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "finality-grandpa", "futures", @@ -9823,7 +9826,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "ansi_term", "futures", @@ -9840,7 +9843,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "array-bytes", "async-trait", @@ -9855,7 +9858,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "array-bytes", "async-trait", @@ -9902,7 +9905,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "cid", "futures", @@ -9922,13 +9925,15 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "async-trait", "bitflags", "bytes", "futures", + "futures-timer", "libp2p", + "linked_hash_set", "parity-scale-codec", "prost-build 0.10.4", "sc-consensus", @@ -9939,13 +9944,14 @@ dependencies = [ "sp-consensus", "sp-finality-grandpa", "sp-runtime", + "substrate-prometheus-endpoint", "thiserror", ] [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "ahash", "futures", @@ -9963,7 +9969,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "array-bytes", "futures", @@ -9984,7 +9990,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "array-bytes", "fork-tree", @@ -10009,10 +10015,29 @@ dependencies = [ "thiserror", ] +[[package]] +name = "sc-network-transactions" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +dependencies = [ + "array-bytes", + "futures", + "hex", + "libp2p", + "log", + "parity-scale-codec", + "pin-project", + "sc-network-common", + "sc-peerset", + "sp-consensus", + "sp-runtime", + "substrate-prometheus-endpoint", +] + [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "array-bytes", "bytes", @@ -10042,7 +10067,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "futures", "libp2p", @@ -10055,7 +10080,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10064,7 +10089,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "futures", "hash-db", @@ -10094,7 +10119,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "futures", "jsonrpsee", @@ -10117,7 +10142,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "futures", "jsonrpsee", @@ -10130,7 +10155,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "async-trait", "directories", @@ -10158,6 +10183,7 @@ dependencies = [ "sc-network-common", "sc-network-light", "sc-network-sync", + "sc-network-transactions", "sc-offchain", "sc-rpc", "sc-rpc-server", @@ -10199,7 +10225,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "log", "parity-scale-codec", @@ -10213,7 +10239,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10232,7 +10258,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "futures", "libc", @@ -10251,7 +10277,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "chrono", "futures", @@ -10269,7 +10295,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "ansi_term", "atty", @@ -10300,7 +10326,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10311,7 +10337,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "futures", "futures-timer", @@ -10337,7 +10363,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "futures", "log", @@ -10350,7 +10376,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "futures", "futures-timer", @@ -10788,7 +10814,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "enumn", "parity-scale-codec", @@ -10864,7 +10890,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "hash-db", "log", @@ -10882,7 +10908,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "blake2", "proc-macro-crate", @@ -10894,7 +10920,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "parity-scale-codec", "scale-info", @@ -10907,7 +10933,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "integer-sqrt", "num-traits", @@ -10922,7 +10948,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "parity-scale-codec", "scale-info", @@ -10935,7 +10961,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "async-trait", "parity-scale-codec", @@ -10947,7 +10973,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "parity-scale-codec", "sp-api", @@ -10959,7 +10985,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "futures", "log", @@ -10977,7 +11003,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "async-trait", "futures", @@ -10996,7 +11022,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "async-trait", "parity-scale-codec", @@ -11014,7 +11040,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "async-trait", "merlin", @@ -11037,7 +11063,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "parity-scale-codec", "scale-info", @@ -11051,7 +11077,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "parity-scale-codec", "scale-info", @@ -11064,7 +11090,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "array-bytes", "base58", @@ -11110,7 +11136,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "blake2", "byteorder", @@ -11124,7 +11150,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "proc-macro2", "quote", @@ -11135,7 +11161,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11144,7 +11170,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "proc-macro2", "quote", @@ -11154,7 +11180,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "environmental", "parity-scale-codec", @@ -11165,7 +11191,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "finality-grandpa", "log", @@ -11183,7 +11209,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11197,7 +11223,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "bytes", "futures", @@ -11223,7 +11249,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "lazy_static", "sp-core", @@ -11234,7 +11260,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "async-trait", "futures", @@ -11251,7 +11277,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "thiserror", "zstd", @@ -11260,7 +11286,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "log", "parity-scale-codec", @@ -11275,7 +11301,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "parity-scale-codec", "scale-info", @@ -11289,7 +11315,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "sp-api", "sp-core", @@ -11299,7 +11325,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "backtrace", "lazy_static", @@ -11309,7 +11335,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "rustc-hash", "serde", @@ -11319,7 +11345,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "either", "hash256-std-hasher", @@ -11342,7 +11368,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11360,7 +11386,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "Inflector", "proc-macro-crate", @@ -11372,7 +11398,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "log", "parity-scale-codec", @@ -11386,7 +11412,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "serde", "serde_json", @@ -11395,7 +11421,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "parity-scale-codec", "scale-info", @@ -11409,7 +11435,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "parity-scale-codec", "scale-info", @@ -11420,7 +11446,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "hash-db", "log", @@ -11442,12 +11468,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11460,7 +11486,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "log", "sp-core", @@ -11473,7 +11499,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "async-trait", "futures-timer", @@ -11489,7 +11515,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "parity-scale-codec", "sp-std", @@ -11501,7 +11527,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "sp-api", "sp-runtime", @@ -11510,7 +11536,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "async-trait", "log", @@ -11526,7 +11552,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "ahash", "hash-db", @@ -11549,7 +11575,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11566,7 +11592,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11577,7 +11603,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "impl-trait-for-tuples", "log", @@ -11590,7 +11616,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11892,7 +11918,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "platforms", ] @@ -11900,7 +11926,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11921,7 +11947,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "futures-util", "hyper", @@ -11934,7 +11960,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "jsonrpsee", "log", @@ -11955,7 +11981,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "array-bytes", "async-trait", @@ -11981,7 +12007,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11991,7 +12017,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#ffcd5232a89b556dcf558db429c6c3d9a020cc27" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -12002,7 +12028,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "ansi_term", "build-helper", @@ -12110,7 +12136,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "frame-support", "polkadot-primitives", @@ -12391,7 +12417,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12402,7 +12428,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12529,7 +12555,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#a0ec652e341f694f182a3c5fcc80d4c3fb280003" +source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" dependencies = [ "clap", "frame-try-runtime", @@ -13117,7 +13143,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "beefy-primitives", "bitvec", @@ -13206,7 +13232,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "frame-support", "polkadot-primitives", @@ -13492,7 +13518,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13506,7 +13532,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "frame-support", "frame-system", @@ -13526,7 +13552,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "frame-benchmarking", "frame-support", @@ -13544,7 +13570,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#403c3e144fe9c6dcb13cc6fd7775dff67feb7598" +source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" dependencies = [ "Inflector", "proc-macro2", diff --git a/parachain-template/node/src/service.rs b/parachain-template/node/src/service.rs index 84e0fbff3e6..a4dda555749 100644 --- a/parachain-template/node/src/service.rs +++ b/parachain-template/node/src/service.rs @@ -289,7 +289,7 @@ where let prometheus_registry = parachain_config.prometheus_registry().cloned(); let transaction_pool = params.transaction_pool.clone(); let import_queue = cumulus_client_service::SharedImportQueue::new(params.import_queue); - let (network, system_rpc_tx, start_network) = + let (network, system_rpc_tx, tx_handler_controller, start_network) = sc_service::build_network(sc_service::BuildNetworkParams { config: ¶chain_config, client: client.clone(), @@ -327,6 +327,7 @@ where backend: backend.clone(), network: network.clone(), system_rpc_tx, + tx_handler_controller, telemetry: telemetry.as_mut(), })?; diff --git a/polkadot-parachain/src/service.rs b/polkadot-parachain/src/service.rs index 3085804a2b4..3519133a5fb 100644 --- a/polkadot-parachain/src/service.rs +++ b/polkadot-parachain/src/service.rs @@ -378,7 +378,7 @@ where let prometheus_registry = parachain_config.prometheus_registry().cloned(); let transaction_pool = params.transaction_pool.clone(); let import_queue = cumulus_client_service::SharedImportQueue::new(params.import_queue); - let (network, system_rpc_tx, start_network) = + let (network, system_rpc_tx, tx_handler_controller, start_network) = sc_service::build_network(sc_service::BuildNetworkParams { config: ¶chain_config, client: client.clone(), @@ -404,6 +404,7 @@ where backend: backend.clone(), network: network.clone(), system_rpc_tx, + tx_handler_controller, telemetry: telemetry.as_mut(), })?; @@ -575,7 +576,7 @@ where let prometheus_registry = parachain_config.prometheus_registry().cloned(); let transaction_pool = params.transaction_pool.clone(); let import_queue = cumulus_client_service::SharedImportQueue::new(params.import_queue); - let (network, system_rpc_tx, start_network) = + let (network, system_rpc_tx, tx_handler_controller, start_network) = sc_service::build_network(sc_service::BuildNetworkParams { config: ¶chain_config, client: client.clone(), @@ -613,6 +614,7 @@ where backend: backend.clone(), network: network.clone(), system_rpc_tx, + tx_handler_controller, telemetry: telemetry.as_mut(), })?; @@ -1390,7 +1392,7 @@ where let prometheus_registry = parachain_config.prometheus_registry().cloned(); let transaction_pool = params.transaction_pool.clone(); let import_queue = cumulus_client_service::SharedImportQueue::new(params.import_queue); - let (network, system_rpc_tx, start_network) = + let (network, system_rpc_tx, tx_handler_controller, start_network) = sc_service::build_network(sc_service::BuildNetworkParams { config: ¶chain_config, client: client.clone(), @@ -1428,6 +1430,7 @@ where backend: backend.clone(), network: network.clone(), system_rpc_tx, + tx_handler_controller, telemetry: telemetry.as_mut(), })?; diff --git a/test/service/src/lib.rs b/test/service/src/lib.rs index 952507b4ab5..c211ece81d6 100644 --- a/test/service/src/lib.rs +++ b/test/service/src/lib.rs @@ -45,8 +45,8 @@ use frame_system_rpc_runtime_api::AccountNonceApi; use polkadot_primitives::v2::{CollatorPair, Hash as PHash, PersistedValidationData}; use polkadot_service::ProvideRuntimeApi; use sc_client_api::execution_extensions::ExecutionStrategies; -use sc_network::{config::TransportConfig, multiaddr, NetworkService}; -use sc_network_common::service::{NetworkBlock, NetworkStateInfo}; +use sc_network::{multiaddr, NetworkBlock, NetworkService}; +use sc_network_common::{config::TransportConfig, service::NetworkStateInfo}; use sc_service::{ config::{ BlocksPruning, DatabaseSource, KeystoreConfig, MultiaddrWithPeerId, NetworkConfiguration, @@ -257,7 +257,7 @@ where let prometheus_registry = parachain_config.prometheus_registry().cloned(); let import_queue = cumulus_client_service::SharedImportQueue::new(params.import_queue); - let (network, system_rpc_tx, start_network) = + let (network, system_rpc_tx, tx_handler_controller, start_network) = sc_service::build_network(sc_service::BuildNetworkParams { config: ¶chain_config, client: client.clone(), @@ -284,6 +284,7 @@ where backend, network: network.clone(), system_rpc_tx, + tx_handler_controller, telemetry: None, })?; @@ -628,7 +629,7 @@ pub fn node_config( if nodes_exlusive { network_config.default_peers_set.reserved_nodes = nodes; network_config.default_peers_set.non_reserved_mode = - sc_network::config::NonReservedPeerMode::Deny; + sc_network_common::config::NonReservedPeerMode::Deny; } else { network_config.boot_nodes = nodes; } From 9e309844a8207a05223bcf9e8be83a6e4ff3eda4 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Tue, 27 Sep 2022 14:52:04 +0800 Subject: [PATCH 088/148] Fixes --- pallets/dmp-queue/src/lib.rs | 2 +- pallets/xcmp-queue/src/mock.rs | 2 +- parachain-template/runtime/src/xcm_config.rs | 2 +- .../runtimes/assets/statemine/src/xcm_config.rs | 11 +++++------ .../runtimes/assets/statemint/src/xcm_config.rs | 2 +- parachains/runtimes/assets/westmint/src/xcm_config.rs | 2 +- .../collectives-polkadot/src/xcm_config.rs | 2 +- parachains/runtimes/starters/shell/src/xcm_config.rs | 2 +- parachains/runtimes/testing/penpal/src/xcm_config.rs | 2 +- .../runtimes/testing/rococo-parachain/src/lib.rs | 2 +- 10 files changed, 14 insertions(+), 15 deletions(-) diff --git a/pallets/dmp-queue/src/lib.rs b/pallets/dmp-queue/src/lib.rs index 3dfcae436fb..6cddb956d52 100644 --- a/pallets/dmp-queue/src/lib.rs +++ b/pallets/dmp-queue/src/lib.rs @@ -434,7 +434,7 @@ mod tests { } pub struct MockExec; - impl ExecuteXcm for MockExec { + impl ExecuteXcm for MockExec { type Prepared = Weightless; fn prepare(message: Xcm) -> Result { diff --git a/pallets/xcmp-queue/src/mock.rs b/pallets/xcmp-queue/src/mock.rs index 17ca7129a37..bd71ba363e5 100644 --- a/pallets/xcmp-queue/src/mock.rs +++ b/pallets/xcmp-queue/src/mock.rs @@ -162,7 +162,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; - type CallDispatcher = Call; + type CallDispatcher = RuntimeCall; } pub type XcmRouter = ( diff --git a/parachain-template/runtime/src/xcm_config.rs b/parachain-template/runtime/src/xcm_config.rs index 65ac5c83053..c023a5a6e6d 100644 --- a/parachain-template/runtime/src/xcm_config.rs +++ b/parachain-template/runtime/src/xcm_config.rs @@ -187,7 +187,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; - type CallDispatcher = Call; + type CallDispatcher = RuntimeCall; } /// No local origins on this chain are allowed to dispatch XCM sends/executions. diff --git a/parachains/runtimes/assets/statemine/src/xcm_config.rs b/parachains/runtimes/assets/statemine/src/xcm_config.rs index ccf96219c40..ed04677be4c 100644 --- a/parachains/runtimes/assets/statemine/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemine/src/xcm_config.rs @@ -34,11 +34,10 @@ use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, AsPrefixedGeneralIndex, - ConvertedConcreteId, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, FungiblesAdapter, - IsConcrete, NativeAsset, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, - SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, - SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, - WeightInfoBounds, + ConvertedConcreteId, CurrencyAdapter, EnsureXcmOrigin, FungiblesAdapter, IsConcrete, + NativeAsset, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, + SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, + SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, WeightInfoBounds, }; use xcm_executor::{traits::JustTry, XcmExecutor}; @@ -210,7 +209,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; - type CallDispatcher = Call; + type CallDispatcher = RuntimeCall; } /// Converts a local signed origin into an XCM multilocation. diff --git a/parachains/runtimes/assets/statemint/src/xcm_config.rs b/parachains/runtimes/assets/statemint/src/xcm_config.rs index 3daa00b4f3f..16720f6fefc 100644 --- a/parachains/runtimes/assets/statemint/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemint/src/xcm_config.rs @@ -186,7 +186,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; - type CallDispatcher = Call; + type CallDispatcher = RuntimeCall; } /// Converts a local signed origin into an XCM multilocation. diff --git a/parachains/runtimes/assets/westmint/src/xcm_config.rs b/parachains/runtimes/assets/westmint/src/xcm_config.rs index a46cbfa2e56..837a6522bf0 100644 --- a/parachains/runtimes/assets/westmint/src/xcm_config.rs +++ b/parachains/runtimes/assets/westmint/src/xcm_config.rs @@ -206,7 +206,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; - type CallDispatcher = Call; + type CallDispatcher = RuntimeCall; } /// Local origins on this chain are allowed to dispatch XCM sends/executions. diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs index e3e4e93d5d9..1e7b17de09a 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs @@ -158,7 +158,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; - type CallDispatcher = Call; + type CallDispatcher = RuntimeCall; } /// Converts a local signed origin into an XCM multilocation. diff --git a/parachains/runtimes/starters/shell/src/xcm_config.rs b/parachains/runtimes/starters/shell/src/xcm_config.rs index 51f774f6d60..6706c6af6bb 100644 --- a/parachains/runtimes/starters/shell/src/xcm_config.rs +++ b/parachains/runtimes/starters/shell/src/xcm_config.rs @@ -74,7 +74,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; - type CallDispatcher = Call; + type CallDispatcher = RuntimeCall; } impl cumulus_pallet_xcm::Config for Runtime { diff --git a/parachains/runtimes/testing/penpal/src/xcm_config.rs b/parachains/runtimes/testing/penpal/src/xcm_config.rs index 5df62e71d7c..62ae7fc3a95 100644 --- a/parachains/runtimes/testing/penpal/src/xcm_config.rs +++ b/parachains/runtimes/testing/penpal/src/xcm_config.rs @@ -344,7 +344,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; - type CallDispatcher = Call; + type CallDispatcher = RuntimeCall; } /// No local origins on this chain are allowed to dispatch XCM sends/executions. diff --git a/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/parachains/runtimes/testing/rococo-parachain/src/lib.rs index 7e81edaec3a..ec0fd38a3ed 100644 --- a/parachains/runtimes/testing/rococo-parachain/src/lib.rs +++ b/parachains/runtimes/testing/rococo-parachain/src/lib.rs @@ -424,7 +424,7 @@ impl xcm_executor::Config for XcmConfig { type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; - type CallDispatcher = Call; + type CallDispatcher = RuntimeCall; } /// Local origins on this chain are allowed to dispatch XCM sends/executions. From 013534a684a47c60fe44763e84b9722fd2f6a792 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Tue, 27 Sep 2022 16:39:24 +0800 Subject: [PATCH 089/148] Fixes --- pallets/dmp-queue/src/lib.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pallets/dmp-queue/src/lib.rs b/pallets/dmp-queue/src/lib.rs index 6cddb956d52..c42024e9f8a 100644 --- a/pallets/dmp-queue/src/lib.rs +++ b/pallets/dmp-queue/src/lib.rs @@ -31,7 +31,10 @@ pub use pallet::*; use scale_info::TypeInfo; use sp_runtime::RuntimeDebug; use sp_std::{convert::TryFrom, prelude::*}; -use xcm::{latest::prelude::*, VersionedXcm, MAX_XCM_DECODE_DEPTH}; +use xcm::{ + latest::{prelude::*, Weight as XCMWeight}, + VersionedXcm, MAX_XCM_DECODE_DEPTH, +}; #[derive(Copy, Clone, Eq, PartialEq, Encode, Decode, RuntimeDebug, TypeInfo)] pub struct ConfigData { @@ -428,7 +431,7 @@ mod tests { pub enum Weightless {} impl PreparedMessage for Weightless { - fn weight_of(&self) -> Weight { + fn weight_of(&self) -> XCMWeight { unreachable!() } } From 4984ef30bf1eac29bd2c885756cf15979534ff61 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Tue, 27 Sep 2022 16:53:10 +0800 Subject: [PATCH 090/148] Remove unused import --- pallets/dmp-queue/src/lib.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pallets/dmp-queue/src/lib.rs b/pallets/dmp-queue/src/lib.rs index c42024e9f8a..107480e39be 100644 --- a/pallets/dmp-queue/src/lib.rs +++ b/pallets/dmp-queue/src/lib.rs @@ -31,10 +31,7 @@ pub use pallet::*; use scale_info::TypeInfo; use sp_runtime::RuntimeDebug; use sp_std::{convert::TryFrom, prelude::*}; -use xcm::{ - latest::{prelude::*, Weight as XCMWeight}, - VersionedXcm, MAX_XCM_DECODE_DEPTH, -}; +use xcm::{latest::prelude::*, VersionedXcm, MAX_XCM_DECODE_DEPTH}; #[derive(Copy, Clone, Eq, PartialEq, Encode, Decode, RuntimeDebug, TypeInfo)] pub struct ConfigData { From 5efee4c47e2a7aaebdc2a3cde665093a0175e9f3 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Tue, 27 Sep 2022 16:56:01 +0800 Subject: [PATCH 091/148] Remove unused import --- parachains/runtimes/assets/westmint/src/xcm_config.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/parachains/runtimes/assets/westmint/src/xcm_config.rs b/parachains/runtimes/assets/westmint/src/xcm_config.rs index 837a6522bf0..a9d80012619 100644 --- a/parachains/runtimes/assets/westmint/src/xcm_config.rs +++ b/parachains/runtimes/assets/westmint/src/xcm_config.rs @@ -34,11 +34,10 @@ use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, AsPrefixedGeneralIndex, - ConvertedConcreteId, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, FungiblesAdapter, - IsConcrete, NativeAsset, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, - SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, - SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, - WeightInfoBounds, + ConvertedConcreteId, CurrencyAdapter, EnsureXcmOrigin, FungiblesAdapter, IsConcrete, + NativeAsset, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, + SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, + SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, WeightInfoBounds, }; use xcm_executor::{traits::JustTry, XcmExecutor}; From 695ed8a59478fd591c045232888405e811831f0d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Sep 2022 14:41:43 +0000 Subject: [PATCH 092/148] Bump serde from 1.0.144 to 1.0.145 (#1677) Bumps [serde](https://github.com/serde-rs/serde) from 1.0.144 to 1.0.145. - [Release notes](https://github.com/serde-rs/serde/releases) - [Commits](https://github.com/serde-rs/serde/compare/v1.0.144...v1.0.145) --- updated-dependencies: - dependency-name: serde dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- pallets/aura-ext/Cargo.toml | 2 +- pallets/collator-selection/Cargo.toml | 2 +- pallets/parachain-system/Cargo.toml | 2 +- pallets/xcm/Cargo.toml | 2 +- parachain-template/node/Cargo.toml | 2 +- parachain-template/runtime/Cargo.toml | 2 +- parachains/pallets/parachain-info/Cargo.toml | 2 +- parachains/pallets/ping/Cargo.toml | 2 +- parachains/runtimes/assets/statemine/Cargo.toml | 2 +- parachains/runtimes/assets/statemint/Cargo.toml | 2 +- parachains/runtimes/assets/westmint/Cargo.toml | 2 +- .../runtimes/collectives/collectives-polkadot/Cargo.toml | 2 +- parachains/runtimes/contracts/contracts-rococo/Cargo.toml | 2 +- parachains/runtimes/starters/seedling/Cargo.toml | 2 +- parachains/runtimes/starters/shell/Cargo.toml | 2 +- parachains/runtimes/testing/penpal/Cargo.toml | 2 +- parachains/runtimes/testing/rococo-parachain/Cargo.toml | 2 +- polkadot-parachain/Cargo.toml | 2 +- test/runtime/Cargo.toml | 2 +- test/service/Cargo.toml | 2 +- 21 files changed, 24 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2aaa83b687e..235f09b6f2a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10586,18 +10586,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.144" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" +checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.144" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" +checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" dependencies = [ "proc-macro2", "quote", diff --git a/pallets/aura-ext/Cargo.toml b/pallets/aura-ext/Cargo.toml index 22874e3edb2..27ff05cac96 100644 --- a/pallets/aura-ext/Cargo.toml +++ b/pallets/aura-ext/Cargo.toml @@ -8,7 +8,7 @@ description = "AURA consensus extension pallet for parachains" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } # Substrate frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/pallets/collator-selection/Cargo.toml b/pallets/collator-selection/Cargo.toml index 81f1d0f97cf..51def6371fb 100644 --- a/pallets/collator-selection/Cargo.toml +++ b/pallets/collator-selection/Cargo.toml @@ -17,7 +17,7 @@ log = { version = "0.4.17", default-features = false } codec = { default-features = false, features = ["derive"], package = "parity-scale-codec", version = "3.0.0" } rand = { version = "0.8.5", features = ["std_rng"], default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.144", default-features = false } +serde = { version = "1.0.145", default-features = false } sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/pallets/parachain-system/Cargo.toml b/pallets/parachain-system/Cargo.toml index 4fa139422ac..7a98abb41bf 100644 --- a/pallets/parachain-system/Cargo.toml +++ b/pallets/parachain-system/Cargo.toml @@ -12,7 +12,7 @@ environmental = { version = "1.1.2", default-features = false } impl-trait-for-tuples = "0.2.1" log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } # Substrate frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/pallets/xcm/Cargo.toml b/pallets/xcm/Cargo.toml index 4d1a38da171..446196be446 100644 --- a/pallets/xcm/Cargo.toml +++ b/pallets/xcm/Cargo.toml @@ -7,7 +7,7 @@ version = "0.1.0" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/parachain-template/node/Cargo.toml b/parachain-template/node/Cargo.toml index 4bfda52d30e..ecb21306e39 100644 --- a/parachain-template/node/Cargo.toml +++ b/parachain-template/node/Cargo.toml @@ -14,7 +14,7 @@ clap = { version = "3.2.22", features = ["derive"] } derive_more = "0.99.2" log = "0.4.17" codec = { package = "parity-scale-codec", version = "3.0.0" } -serde = { version = "1.0.144", features = ["derive"] } +serde = { version = "1.0.145", features = ["derive"] } hex-literal = "0.3.4" jsonrpsee = { version = "0.15.1", features = ["server"] } diff --git a/parachain-template/runtime/Cargo.toml b/parachain-template/runtime/Cargo.toml index 1662313ab75..e37337dcc44 100644 --- a/parachain-template/runtime/Cargo.toml +++ b/parachain-template/runtime/Cargo.toml @@ -19,7 +19,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } smallvec = "1.9.0" # Local diff --git a/parachains/pallets/parachain-info/Cargo.toml b/parachains/pallets/parachain-info/Cargo.toml index 7cccb7db5e9..18e0fccca04 100644 --- a/parachains/pallets/parachain-info/Cargo.toml +++ b/parachains/pallets/parachain-info/Cargo.toml @@ -7,7 +7,7 @@ version = "0.1.0" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/parachains/pallets/ping/Cargo.toml b/parachains/pallets/ping/Cargo.toml index 60a8eed188e..b504af86638 100644 --- a/parachains/pallets/ping/Cargo.toml +++ b/parachains/pallets/ping/Cargo.toml @@ -7,7 +7,7 @@ version = "0.1.0" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/parachains/runtimes/assets/statemine/Cargo.toml b/parachains/runtimes/assets/statemine/Cargo.toml index 519cb073906..9c61dd3ab56 100644 --- a/parachains/runtimes/assets/statemine/Cargo.toml +++ b/parachains/runtimes/assets/statemine/Cargo.toml @@ -10,7 +10,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } smallvec = "1.9.0" # Substrate diff --git a/parachains/runtimes/assets/statemint/Cargo.toml b/parachains/runtimes/assets/statemint/Cargo.toml index 9b5e58c86ad..ee865586161 100644 --- a/parachains/runtimes/assets/statemint/Cargo.toml +++ b/parachains/runtimes/assets/statemint/Cargo.toml @@ -9,7 +9,7 @@ description = "Statemint parachain runtime" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } smallvec = "1.9.0" diff --git a/parachains/runtimes/assets/westmint/Cargo.toml b/parachains/runtimes/assets/westmint/Cargo.toml index 0add127f408..d1a900021bc 100644 --- a/parachains/runtimes/assets/westmint/Cargo.toml +++ b/parachains/runtimes/assets/westmint/Cargo.toml @@ -10,7 +10,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } smallvec = "1.9.0" # Substrate diff --git a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml index c6e70054770..5b8f4fd4cee 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml +++ b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml @@ -9,7 +9,7 @@ description = "Polkadot Collectives Parachain Runtime" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } smallvec = "1.6.1" diff --git a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml index 5c277c2b0ec..1e3d34576e2 100644 --- a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml +++ b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml @@ -15,7 +15,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } smallvec = "1.9.0" # Substrate diff --git a/parachains/runtimes/starters/seedling/Cargo.toml b/parachains/runtimes/starters/seedling/Cargo.toml index 952294f8c3b..b1dac372bf4 100644 --- a/parachains/runtimes/starters/seedling/Cargo.toml +++ b/parachains/runtimes/starters/seedling/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } log = { version = "0.4.14", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } # Substrate frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/parachains/runtimes/starters/shell/Cargo.toml b/parachains/runtimes/starters/shell/Cargo.toml index 87ebd609ea6..2689533cddb 100644 --- a/parachains/runtimes/starters/shell/Cargo.toml +++ b/parachains/runtimes/starters/shell/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } # Substrate frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/parachains/runtimes/testing/penpal/Cargo.toml b/parachains/runtimes/testing/penpal/Cargo.toml index b38addb9b3d..7450ce422a8 100644 --- a/parachains/runtimes/testing/penpal/Cargo.toml +++ b/parachains/runtimes/testing/penpal/Cargo.toml @@ -19,7 +19,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.16", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } smallvec = "1.9.0" # Substrate diff --git a/parachains/runtimes/testing/rococo-parachain/Cargo.toml b/parachains/runtimes/testing/rococo-parachain/Cargo.toml index ad77957c46e..4a85771e334 100644 --- a/parachains/runtimes/testing/rococo-parachain/Cargo.toml +++ b/parachains/runtimes/testing/rococo-parachain/Cargo.toml @@ -9,7 +9,7 @@ description = "Simple runtime used by the rococo parachain(s)" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } # Substrate frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index 2febe33aea4..c266467734a 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -13,7 +13,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0" } futures = "0.3.24" hex-literal = "0.3.4" log = "0.4.17" -serde = { version = "1.0.144", features = ["derive"] } +serde = { version = "1.0.145", features = ["derive"] } # Local rococo-parachain-runtime = { path = "../parachains/runtimes/testing/rococo-parachain" } diff --git a/test/runtime/Cargo.toml b/test/runtime/Cargo.toml index 6842412e186..d4cf4d2c75e 100644 --- a/test/runtime/Cargo.toml +++ b/test/runtime/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.144", optional = true, features = ["derive"] } +serde = { version = "1.0.145", optional = true, features = ["derive"] } # Substrate frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index 1a652e96ab5..0b63961cae5 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -15,7 +15,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0" } criterion = { version = "0.4.0", features = [ "async_tokio" ] } jsonrpsee = { version = "0.15.1", features = ["server"] } rand = "0.8.5" -serde = { version = "1.0.144", features = ["derive"] } +serde = { version = "1.0.145", features = ["derive"] } tokio = { version = "1.21.1", features = ["macros"] } tracing = "0.1.36" url = "2.3.1" From 90a3b2126aebbf3fa3e0808ad62b3ccf91f35c7b Mon Sep 17 00:00:00 2001 From: Squirrel Date: Tue, 27 Sep 2022 16:53:17 +0100 Subject: [PATCH 093/148] add current time in milis to the branch name (#1658) (#1693) Co-authored-by: Egor_P --- .gitlab-ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 17544826bca..00c414693a4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -407,7 +407,8 @@ benchmarks-assets: - ./scripts/benchmarks-ci.sh assets statemine ./artifacts - ./scripts/benchmarks-ci.sh assets statemint ./artifacts - ./scripts/benchmarks-ci.sh assets westmint ./artifacts - - export BRANCHNAME="weights-statemint-${CI_COMMIT_BRANCH}" + - export CURRENT_TIME=$(date '+%s') + - export BRANCHNAME="weights-statemint-${CI_COMMIT_BRANCH}-${CURRENT_TIME}" - *git-commit-push # create PR to release-parachains-v* branch - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} @@ -427,7 +428,8 @@ benchmarks-collectives: script: - ./scripts/benchmarks-ci.sh collectives collectives-polkadot ./artifacts - git status - - export BRANCHNAME="weights-collectives-${CI_COMMIT_BRANCH}" + - export CURRENT_TIME=$(date '+%s') + - export BRANCHNAME="weights-collectives-${CI_COMMIT_BRANCH}-${CURRENT_TIME}" - *git-commit-push # create PR - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} From e23d581b768d0e6b8e1593408f12274c0de652f4 Mon Sep 17 00:00:00 2001 From: Squirrel Date: Wed, 28 Sep 2022 10:02:16 +0100 Subject: [PATCH 094/148] set xcm weights template (#1643) (#1691) * xcm benchmarks use a custom template --- scripts/benchmarks-ci.sh | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/scripts/benchmarks-ci.sh b/scripts/benchmarks-ci.sh index 6ac63e9ab34..72e1e2fbf5c 100755 --- a/scripts/benchmarks-ci.sh +++ b/scripts/benchmarks-ci.sh @@ -26,19 +26,19 @@ if [[ $runtimeName == "statemint" ]] || [[ $runtimeName == "statemine" ]] || [[ pallet_xcm_benchmarks::fungible ) elif [[ $runtimeName == "collectives-polkadot" ]]; then - pallets=( - pallet_alliance - pallet_balances - pallet_collator_selection - pallet_collective - pallet_multisig - pallet_proxy - pallet_session - pallet_timestamp - pallet_utility - cumulus_pallet_xcmp_queue - frame_system - ) + pallets=( + pallet_alliance + pallet_balances + pallet_collator_selection + pallet_collective + pallet_multisig + pallet_proxy + pallet_session + pallet_timestamp + pallet_utility + cumulus_pallet_xcmp_queue + frame_system + ) else echo "$runtimeName pallet list not found in benchmarks-ci.sh" exit 1 @@ -48,10 +48,13 @@ for pallet in ${pallets[@]} do # a little hack for xcm benchmarks output_file="${pallet//::/_}" + extra_args="" if [[ "$pallet" == *"xcm"* ]]; then output_file="xcm/$output_file" + extra_args="--template=./templates/xcm-bench-template.hbs" fi $artifactsDir/polkadot-parachain benchmark pallet \ + $extra_args \ --chain=$benchmarkRuntimeName \ --execution=wasm \ --wasm-execution=compiled \ From 032540dbf9afc9f5a0d5db7279fc81048f3a168b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Sep 2022 13:31:35 +0200 Subject: [PATCH 095/148] Bump proc-macro2 from 1.0.43 to 1.0.44 (#1697) Bumps [proc-macro2](https://github.com/dtolnay/proc-macro2) from 1.0.43 to 1.0.44. - [Release notes](https://github.com/dtolnay/proc-macro2/releases) - [Commits](https://github.com/dtolnay/proc-macro2/compare/1.0.43...1.0.44) --- updated-dependencies: - dependency-name: proc-macro2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- pallets/parachain-system/proc-macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 235f09b6f2a..fc2cc25ba6f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8522,9 +8522,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.43" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" +checksum = "7bd7356a8122b6c4a24a82b278680c73357984ca2fc79a0f9fa6dea7dced7c58" dependencies = [ "unicode-ident", ] diff --git a/pallets/parachain-system/proc-macro/Cargo.toml b/pallets/parachain-system/proc-macro/Cargo.toml index 1e9937d0c89..990d2a894a4 100644 --- a/pallets/parachain-system/proc-macro/Cargo.toml +++ b/pallets/parachain-system/proc-macro/Cargo.toml @@ -10,7 +10,7 @@ proc-macro = true [dependencies] syn = "1.0.100" -proc-macro2 = "1.0.43" +proc-macro2 = "1.0.44" quote = "1.0.21" proc-macro-crate = "1.2.1" From 27d05a38e151794c30880592d5bcc3b2aa58a95d Mon Sep 17 00:00:00 2001 From: Squirrel Date: Wed, 28 Sep 2022 17:37:57 +0100 Subject: [PATCH 096/148] backport: update integration tests (#1695) * Update integration test v0.9.29 (#1681) * update it * remove comment * update it (#1689) Co-authored-by: Ignacio Palacios --- parachains/integration-tests/statemine/xcm/1_dmp.yml | 11 +++++++---- parachains/integration-tests/statemine/xcm/2_ump.yml | 7 +++++-- .../statemine/xcm/3_hrmp-open-channels.yml | 10 ++++++++-- parachains/integration-tests/statemine/xcm/4_hrmp.yml | 9 ++++++--- parachains/integration-tests/statemint/xcm/1_dmp.yml | 10 ++++++---- parachains/integration-tests/statemint/xcm/2_ump.yml | 6 ++++-- .../statemint/xcm/3_hrmp-open-channels.yml | 6 ++++-- parachains/integration-tests/statemint/xcm/4_hrmp.yml | 9 ++++++--- 8 files changed, 46 insertions(+), 22 deletions(-) diff --git a/parachains/integration-tests/statemine/xcm/1_dmp.yml b/parachains/integration-tests/statemine/xcm/1_dmp.yml index b5040c740c0..9b08555a251 100644 --- a/parachains/integration-tests/statemine/xcm/1_dmp.yml +++ b/parachains/integration-tests/statemine/xcm/1_dmp.yml @@ -77,7 +77,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 4,000,000,000 + threshold: [10, 10] + value: 1,021,973,000 - queries: balance_rc_sender_after: chain: *relay_chain @@ -148,7 +149,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 2,000,000,000 + threshold: [10, 10] + value: 1,021,258,000 - queries: forced_created_asset: chain: *assets_parachain @@ -210,13 +212,14 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true + threshold: [10, 10] value: 750,645,000 - name: dmpQueue.ExecutedDownward chain: *assets_parachain attribute: type: XcmV2TraitsOutcome - isIncomplete: true - value: ['1,000,000,000' , UntrustedReserveLocation] + isError: true + value: "WeightNotComputable" - queries: balance_rc_sender_after: chain: *relay_chain diff --git a/parachains/integration-tests/statemine/xcm/2_ump.yml b/parachains/integration-tests/statemine/xcm/2_ump.yml index 6c8a816d163..daddf927931 100644 --- a/parachains/integration-tests/statemine/xcm/2_ump.yml +++ b/parachains/integration-tests/statemine/xcm/2_ump.yml @@ -62,7 +62,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 4,000,000,000 + threshold: [10, 10] + value: 1,021,973,000 - name: Get the balances of the Assets Parachain's sender & Relay Chain's receiver actions: @@ -97,12 +98,14 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 2,000,000,000 + threshold: [10, 10] + value: 360,315,000 - name: ump.ExecutedUpward chain: *relay_chain attribute: type: XcmV2TraitsOutcome isComplete: true + threshold: [10, 10] value: 297,578,000 - queries: balance_ap_sender_after: diff --git a/parachains/integration-tests/statemine/xcm/3_hrmp-open-channels.yml b/parachains/integration-tests/statemine/xcm/3_hrmp-open-channels.yml index ee4b946cb48..45bf89e2b05 100644 --- a/parachains/integration-tests/statemine/xcm/3_hrmp-open-channels.yml +++ b/parachains/integration-tests/statemine/xcm/3_hrmp-open-channels.yml @@ -203,6 +203,7 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true + threshold: [10, 10] value: 1,160,892,000 - name: hrmp.OpenChannelRequested chain: *relay_chain @@ -259,7 +260,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 2,000,000,000 + threshold: [10, 10] + value: 1,021,258,000 - name: polkadotXcm.Sent chain: *assets_parachain - name: ump.ExecutedUpward @@ -267,6 +269,7 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true + threshold: [10, 10] value: 1,160,892,000 - name: hrmp.OpenChannelAccepted timeout: 40000 @@ -324,7 +327,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 2,000,000,000 + threshold: [10, 10] + value: 1,021,258,000 - name: polkadotXcm.Sent chain: *assets_parachain - name: ump.ExecutedUpward @@ -332,6 +336,7 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true + threshold: [10, 10] value: 1,160,892,000 - name: hrmp.OpenChannelRequested timeout: 40000 @@ -397,6 +402,7 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true + threshold: [10, 10] value: 1,160,892,000 - name: hrmp.OpenChannelAccepted chain: *relay_chain diff --git a/parachains/integration-tests/statemine/xcm/4_hrmp.yml b/parachains/integration-tests/statemine/xcm/4_hrmp.yml index febec32af73..28ef7bc803a 100644 --- a/parachains/integration-tests/statemine/xcm/4_hrmp.yml +++ b/parachains/integration-tests/statemine/xcm/4_hrmp.yml @@ -87,7 +87,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 2,000,000,000 + threshold: [10, 10] + value: 1,021,258,000 - queries: forced_created_asset: chain: *assets_parachain @@ -168,7 +169,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 1,000,000,000 + threshold: [10, 10] + value: 654,608,000 - name: assets.Transferred attribute: type: AccountId32 @@ -215,7 +217,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 1,000,000,000 + threshold: [10, 10] + value: 654,608,000 - name: balances.Endowed attribute: type: AccountId32 diff --git a/parachains/integration-tests/statemint/xcm/1_dmp.yml b/parachains/integration-tests/statemint/xcm/1_dmp.yml index 02e5b864bf3..5f0fa349072 100644 --- a/parachains/integration-tests/statemint/xcm/1_dmp.yml +++ b/parachains/integration-tests/statemint/xcm/1_dmp.yml @@ -77,7 +77,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 4,000,000,000 + threshold: [10, 10] + value: 1,021,635,000 - queries: balance_rc_sender_after: chain: *relay_chain @@ -148,7 +149,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 2,000,000,000 + threshold: [10, 10] + value: 1,020,807,000 - queries: forced_created_asset: chain: *assets_parachain @@ -215,8 +217,8 @@ tests: chain: *assets_parachain attribute: type: XcmV2TraitsOutcome - isIncomplete: true - value: ['1,000,000,000' , UntrustedReserveLocation] + isError: true + value: "WeightNotComputable" - queries: balance_rc_sender_after: chain: *relay_chain diff --git a/parachains/integration-tests/statemint/xcm/2_ump.yml b/parachains/integration-tests/statemint/xcm/2_ump.yml index c20872ca687..f51823eb3e8 100644 --- a/parachains/integration-tests/statemint/xcm/2_ump.yml +++ b/parachains/integration-tests/statemint/xcm/2_ump.yml @@ -62,7 +62,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 4,000,000,000 + threshold: [10, 10] + value: 1,021,635,000 - name: Get the balances of the Assets Parachain's sender & Relay Chain's receiver actions: @@ -98,7 +99,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 2,000,000,000 + threshold: [10, 10] + value: 358,878,000 - name: ump.ExecutedUpward chain: *relay_chain attribute: diff --git a/parachains/integration-tests/statemint/xcm/3_hrmp-open-channels.yml b/parachains/integration-tests/statemint/xcm/3_hrmp-open-channels.yml index a164ce9c98d..f83e778f1c0 100644 --- a/parachains/integration-tests/statemint/xcm/3_hrmp-open-channels.yml +++ b/parachains/integration-tests/statemint/xcm/3_hrmp-open-channels.yml @@ -257,7 +257,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 2,000,000,000 + threshold: [10, 10] + value: 1,020,807,000 - name: polkadotXcm.Sent chain: *assets_parachain - name: ump.ExecutedUpward @@ -322,7 +323,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 2,000,000,000 + threshold: [10, 10] + value: 1,020,807,000 - name: polkadotXcm.Sent chain: *assets_parachain - name: ump.ExecutedUpward diff --git a/parachains/integration-tests/statemint/xcm/4_hrmp.yml b/parachains/integration-tests/statemint/xcm/4_hrmp.yml index b6e5d4ff9d6..5de5e190820 100644 --- a/parachains/integration-tests/statemint/xcm/4_hrmp.yml +++ b/parachains/integration-tests/statemint/xcm/4_hrmp.yml @@ -87,7 +87,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 2,000,000,000 + threshold: [10, 10] + value: 1,020,807,000 - queries: forced_created_asset: chain: *assets_parachain @@ -167,7 +168,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 1,000,000,000 + threshold: [10, 10] + value: 654,404,000 - name: assets.Transferred attribute: type: AccountId32 @@ -214,7 +216,8 @@ tests: attribute: type: XcmV2TraitsOutcome isComplete: true - value: 1,000,000,000 + threshold: [10, 10] + value: 654,404,000 - name: balances.Endowed attribute: type: AccountId32 From 2c4103d8bed300c5262d006d3596d298cd7ae712 Mon Sep 17 00:00:00 2001 From: Squirrel Date: Wed, 28 Sep 2022 17:38:36 +0100 Subject: [PATCH 097/148] Bump crate versions (#1690) Co-authored-by: EgorPopelyaev --- Cargo.lock | 2 +- polkadot-parachain/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fc2cc25ba6f..50b050861b1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7743,7 +7743,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" -version = "0.9.230" +version = "0.9.290" dependencies = [ "assert_cmd", "async-trait", diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index c266467734a..f9fe0279367 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-parachain" -version = "0.9.230" +version = "0.9.290" authors = ["Parity Technologies "] build = "build.rs" edition = "2021" From facb0891dbd484bd1a2d4b5e3758d643822d2bcc Mon Sep 17 00:00:00 2001 From: Squirrel Date: Wed, 28 Sep 2022 17:39:06 +0100 Subject: [PATCH 098/148] [benchmarks] pr with weights (#1664) (#1694) Co-authored-by: paritytech-ci Co-authored-by: Paritytech CI <52199148+paritytech-ci@users.noreply.github.com> Co-authored-by: paritytech-ci --- .../statemine/src/weights/frame_system.rs | 22 +++--- .../statemine/src/weights/pallet_assets.rs | 72 +++++++++-------- .../statemine/src/weights/pallet_balances.rs | 20 ++--- .../src/weights/pallet_collator_selection.rs | 34 ++++---- .../statemine/src/weights/pallet_multisig.rs | 52 ++++++------- .../statemine/src/weights/pallet_proxy.rs | 78 +++++++++---------- .../statemine/src/weights/pallet_session.rs | 10 +-- .../statemine/src/weights/pallet_timestamp.rs | 10 +-- .../statemine/src/weights/pallet_uniques.rs | 77 +++++++++--------- .../statemine/src/weights/pallet_utility.rs | 24 +++--- .../weights/xcm/cumulus_pallet_xcmp_queue.rs | 63 +++++++++++++++ .../xcm/pallet_xcm_benchmarks_fungible.rs | 32 ++++---- .../xcm/pallet_xcm_benchmarks_generic.rs | 50 ++++++------ .../statemint/src/weights/frame_system.rs | 16 ++-- .../statemint/src/weights/pallet_assets.rs | 74 +++++++++--------- .../statemint/src/weights/pallet_balances.rs | 20 ++--- .../src/weights/pallet_collator_selection.rs | 36 ++++----- .../statemint/src/weights/pallet_multisig.rs | 52 ++++++------- .../statemint/src/weights/pallet_proxy.rs | 66 ++++++++-------- .../statemint/src/weights/pallet_session.rs | 10 +-- .../statemint/src/weights/pallet_timestamp.rs | 10 +-- .../statemint/src/weights/pallet_uniques.rs | 77 +++++++++--------- .../statemint/src/weights/pallet_utility.rs | 28 +++---- .../weights/xcm/cumulus_pallet_xcmp_queue.rs | 63 +++++++++++++++ .../xcm/pallet_xcm_benchmarks_fungible.rs | 33 ++++---- .../xcm/pallet_xcm_benchmarks_generic.rs | 51 ++++++------ .../westmint/src/weights/frame_system.rs | 16 ++-- .../westmint/src/weights/pallet_assets.rs | 66 ++++++++-------- .../westmint/src/weights/pallet_balances.rs | 20 ++--- .../src/weights/pallet_collator_selection.rs | 36 ++++----- .../westmint/src/weights/pallet_multisig.rs | 48 ++++++------ .../westmint/src/weights/pallet_proxy.rs | 78 +++++++++---------- .../westmint/src/weights/pallet_session.rs | 10 +-- .../westmint/src/weights/pallet_timestamp.rs | 10 +-- .../westmint/src/weights/pallet_uniques.rs | 77 +++++++++--------- .../westmint/src/weights/pallet_utility.rs | 24 +++--- .../weights/xcm/cumulus_pallet_xcmp_queue.rs | 63 +++++++++++++++ .../xcm/pallet_xcm_benchmarks_fungible.rs | 32 ++++---- .../xcm/pallet_xcm_benchmarks_generic.rs | 50 ++++++------ 39 files changed, 892 insertions(+), 718 deletions(-) create mode 100644 parachains/runtimes/assets/statemine/src/weights/xcm/cumulus_pallet_xcmp_queue.rs create mode 100644 parachains/runtimes/assets/statemint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs create mode 100644 parachains/runtimes/assets/westmint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs diff --git a/parachains/runtimes/assets/statemine/src/weights/frame_system.rs b/parachains/runtimes/assets/statemine/src/weights/frame_system.rs index 73e8820614c..d871fc7021f 100644 --- a/parachains/runtimes/assets/statemine/src/weights/frame_system.rs +++ b/parachains/runtimes/assets/statemine/src/weights/frame_system.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `frame_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemine/src/weights +// --output=./parachains/runtimes/assets/statemine/src/weights/frame_system.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `frame_system`. @@ -54,12 +54,12 @@ impl frame_system::WeightInfo for WeightInfo { fn remark_with_event(b: u32, ) -> Weight { Weight::from_ref_time(0 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(b as u64)) + .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(b as u64)) } // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) fn set_heap_pages() -> Weight { - Weight::from_ref_time(5_461_000 as u64) + Weight::from_ref_time(8_677_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -68,23 +68,23 @@ impl frame_system::WeightInfo for WeightInfo { fn set_storage(i: u32, ) -> Weight { Weight::from_ref_time(0 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(622_000 as u64).saturating_mul(i as u64)) + .saturating_add(Weight::from_ref_time(625_000 as u64).saturating_mul(i as u64)) .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `i` is `[1, 1000]`. fn kill_storage(i: u32, ) -> Weight { - Weight::from_ref_time(351_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(513_000 as u64).saturating_mul(i as u64)) + Weight::from_ref_time(0 as u64) + // Standard Error: 2_000 + .saturating_add(Weight::from_ref_time(554_000 as u64).saturating_mul(i as u64)) .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `p` is `[1, 1000]`. fn kill_prefix(p: u32, ) -> Weight { Weight::from_ref_time(0 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(1_054_000 as u64).saturating_mul(p as u64)) + // Standard Error: 2_000 + .saturating_add(Weight::from_ref_time(1_128_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(p as u64))) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs index 8b9097bef4a..c4694d80b5d 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_assets` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemine/src/weights +// --output=./parachains/runtimes/assets/statemine/src/weights/pallet_assets.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_assets`. @@ -48,13 +48,13 @@ pub struct WeightInfo(PhantomData); impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:1) fn create() -> Weight { - Weight::from_ref_time(26_670_000 as u64) + Weight::from_ref_time(30_336_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn force_create() -> Weight { - Weight::from_ref_time(15_063_000 as u64) + Weight::from_ref_time(17_834_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -68,12 +68,12 @@ impl pallet_assets::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 500]`. fn destroy(c: u32, s: u32, a: u32, ) -> Weight { Weight::from_ref_time(0 as u64) - // Standard Error: 46_000 - .saturating_add(Weight::from_ref_time(16_382_000 as u64).saturating_mul(c as u64)) - // Standard Error: 46_000 - .saturating_add(Weight::from_ref_time(19_187_000 as u64).saturating_mul(s as u64)) - // Standard Error: 465_000 - .saturating_add(Weight::from_ref_time(16_818_000 as u64).saturating_mul(a as u64)) + // Standard Error: 103_000 + .saturating_add(Weight::from_ref_time(17_019_000 as u64).saturating_mul(c as u64)) + // Standard Error: 103_000 + .saturating_add(Weight::from_ref_time(18_891_000 as u64).saturating_mul(s as u64)) + // Standard Error: 1_038_000 + .saturating_add(Weight::from_ref_time(32_265_000 as u64).saturating_mul(a as u64)) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(s as u64))) @@ -86,14 +86,14 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn mint() -> Weight { - Weight::from_ref_time(29_655_000 as u64) + Weight::from_ref_time(35_875_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn burn() -> Weight { - Weight::from_ref_time(33_648_000 as u64) + Weight::from_ref_time(38_571_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -101,7 +101,7 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(47_414_000 as u64) + Weight::from_ref_time(50_931_000 as u64) .saturating_add(T::DbWeight::get().reads(4 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -109,7 +109,7 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(39_871_000 as u64) + Weight::from_ref_time(43_426_000 as u64) .saturating_add(T::DbWeight::get().reads(4 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -117,46 +117,46 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn force_transfer() -> Weight { - Weight::from_ref_time(47_454_000 as u64) + Weight::from_ref_time(51_045_000 as u64) .saturating_add(T::DbWeight::get().reads(4 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn freeze() -> Weight { - Weight::from_ref_time(20_827_000 as u64) + Weight::from_ref_time(24_405_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn thaw() -> Weight { - Weight::from_ref_time(21_249_000 as u64) + Weight::from_ref_time(24_445_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn freeze_asset() -> Weight { - Weight::from_ref_time(17_775_000 as u64) + Weight::from_ref_time(21_181_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn thaw_asset() -> Weight { - Weight::from_ref_time(17_917_000 as u64) + Weight::from_ref_time(21_227_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Metadata (r:1 w:0) fn transfer_ownership() -> Weight { - Weight::from_ref_time(18_724_000 as u64) + Weight::from_ref_time(23_802_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(17_448_000 as u64) + Weight::from_ref_time(22_959_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -164,15 +164,17 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. - fn set_metadata(_n: u32, _s: u32, ) -> Weight { - Weight::from_ref_time(31_859_000 as u64) + fn set_metadata(_n: u32, s: u32, ) -> Weight { + Weight::from_ref_time(35_275_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(7_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(31_293_000 as u64) + Weight::from_ref_time(38_293_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -180,28 +182,32 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. - fn force_set_metadata(_n: u32, _s: u32, ) -> Weight { - Weight::from_ref_time(19_595_000 as u64) + fn force_set_metadata(n: u32, s: u32, ) -> Weight { + Weight::from_ref_time(23_375_000 as u64) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(3_000 as u64).saturating_mul(n as u64)) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(3_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn force_clear_metadata() -> Weight { - Weight::from_ref_time(31_366_000 as u64) + Weight::from_ref_time(38_807_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn force_asset_status() -> Weight { - Weight::from_ref_time(16_884_000 as u64) + Weight::from_ref_time(22_088_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(34_730_000 as u64) + Weight::from_ref_time(38_906_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -210,21 +216,21 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_approved() -> Weight { - Weight::from_ref_time(59_797_000 as u64) + Weight::from_ref_time(66_949_000 as u64) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(5 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(35_178_000 as u64) + Weight::from_ref_time(39_491_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn force_cancel_approval() -> Weight { - Weight::from_ref_time(36_840_000 as u64) + Weight::from_ref_time(41_596_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs index 20a24494aaf..8d28cb51805 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_balances` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemine/src/weights +// --output=./parachains/runtimes/assets/statemine/src/weights/pallet_balances.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. @@ -48,43 +48,43 @@ pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(41_804_000 as u64) + Weight::from_ref_time(46_411_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(31_899_000 as u64) + Weight::from_ref_time(34_589_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { - Weight::from_ref_time(20_638_000 as u64) + Weight::from_ref_time(25_591_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { - Weight::from_ref_time(24_081_000 as u64) + Weight::from_ref_time(29_471_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { - Weight::from_ref_time(41_357_000 as u64) + Weight::from_ref_time(46_550_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { - Weight::from_ref_time(37_382_000 as u64) + Weight::from_ref_time(40_804_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { - Weight::from_ref_time(18_476_000 as u64) + Weight::from_ref_time(22_516_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs index ee9bf010d76..53d31d9fa2c 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_collator_selection` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemine/src/weights +// --output=./parachains/runtimes/assets/statemine/src/weights/pallet_collator_selection.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_collator_selection`. @@ -50,20 +50,20 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection Invulnerables (r:0 w:1) /// The range of component `b` is `[1, 100]`. fn set_invulnerables(b: u32, ) -> Weight { - Weight::from_ref_time(8_196_000 as u64) + Weight::from_ref_time(23_858_000 as u64) // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(3_354_000 as u64).saturating_mul(b as u64)) + .saturating_add(Weight::from_ref_time(2_412_000 as u64).saturating_mul(b as u64)) .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection DesiredCandidates (r:0 w:1) fn set_desired_candidates() -> Weight { - Weight::from_ref_time(9_141_000 as u64) + Weight::from_ref_time(14_642_000 as u64) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection CandidacyBond (r:0 w:1) fn set_candidacy_bond() -> Weight { - Weight::from_ref_time(9_554_000 as u64) + Weight::from_ref_time(14_842_000 as u64) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection Candidates (r:1 w:1) @@ -74,9 +74,9 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[1, 1000]`. fn register_as_candidate(c: u32, ) -> Weight { - Weight::from_ref_time(55_660_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(103_000 as u64).saturating_mul(c as u64)) + Weight::from_ref_time(61_940_000 as u64) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(170_000 as u64).saturating_mul(c as u64)) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -84,9 +84,9 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[6, 1000]`. fn leave_intent(c: u32, ) -> Weight { - Weight::from_ref_time(56_380_000 as u64) + Weight::from_ref_time(60_018_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(113_000 as u64).saturating_mul(c as u64)) + .saturating_add(Weight::from_ref_time(162_000 as u64).saturating_mul(c as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -94,7 +94,7 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: System BlockWeight (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) fn note_author() -> Weight { - Weight::from_ref_time(31_852_000 as u64) + Weight::from_ref_time(35_100_000 as u64) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -107,10 +107,10 @@ impl pallet_collator_selection::WeightInfo for WeightIn /// The range of component `c` is `[1, 1000]`. fn new_session(r: u32, c: u32, ) -> Weight { Weight::from_ref_time(0 as u64) - // Standard Error: 2_076_000 - .saturating_add(Weight::from_ref_time(10_780_000 as u64).saturating_mul(r as u64)) - // Standard Error: 2_076_000 - .saturating_add(Weight::from_ref_time(55_238_000 as u64).saturating_mul(c as u64)) + // Standard Error: 1_237_000 + .saturating_add(Weight::from_ref_time(6_686_000 as u64).saturating_mul(r as u64)) + // Standard Error: 1_237_000 + .saturating_add(Weight::from_ref_time(32_537_000 as u64).saturating_mul(c as u64)) .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(r as u64))) .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(c as u64))) diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs index 10bd872e7b5..51b8fa9f0ed 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_multisig` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemine/src/weights +// --output=./parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_multisig`. @@ -48,7 +48,7 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - Weight::from_ref_time(18_001_000 as u64) + Weight::from_ref_time(21_168_000 as u64) // Standard Error: 0 .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) } @@ -57,9 +57,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(35_223_000 as u64) + Weight::from_ref_time(40_339_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(118_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(100_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) @@ -71,9 +71,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(39_275_000 as u64) + Weight::from_ref_time(43_149_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(92_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(97_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) @@ -83,9 +83,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(24_703_000 as u64) + Weight::from_ref_time(29_142_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(96_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(107_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) @@ -96,9 +96,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(38_375_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(100_000 as u64).saturating_mul(s as u64)) + Weight::from_ref_time(44_799_000 as u64) + // Standard Error: 2_000 + .saturating_add(Weight::from_ref_time(96_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) @@ -110,11 +110,11 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(46_964_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(143_000 as u64).saturating_mul(s as u64)) + Weight::from_ref_time(54_815_000 as u64) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(131_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as u64).saturating_mul(z as u64)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -122,9 +122,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - Weight::from_ref_time(34_450_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(117_000 as u64).saturating_mul(s as u64)) + Weight::from_ref_time(37_558_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(110_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -132,9 +132,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Storage: Multisig Calls (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - Weight::from_ref_time(22_051_000 as u64) + Weight::from_ref_time(26_926_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(117_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(125_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -143,9 +143,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_complete(s: u32, ) -> Weight { - Weight::from_ref_time(69_763_000 as u64) + Weight::from_ref_time(64_260_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(162_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(151_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -153,9 +153,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - Weight::from_ref_time(53_182_000 as u64) + Weight::from_ref_time(53_920_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(129_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(122_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs index ff2d24e4c67..ea0239f86ab 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_proxy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemine/src/weights +// --output=./parachains/runtimes/assets/statemine/src/weights/pallet_proxy.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. @@ -49,9 +49,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:0) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - Weight::from_ref_time(18_075_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(92_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(24_000_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(37_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) } // Storage: Proxy Proxies (r:1 w:0) @@ -60,11 +60,11 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(35_722_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(180_000 as u64).saturating_mul(a as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(85_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(42_183_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(126_000 as u64).saturating_mul(a as u64)) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(57_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -73,11 +73,11 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn remove_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(25_193_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(185_000 as u64).saturating_mul(a as u64)) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(23_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(28_402_000 as u64) + // Standard Error: 2_000 + .saturating_add(Weight::from_ref_time(144_000 as u64).saturating_mul(a as u64)) + // Standard Error: 2_000 + .saturating_add(Weight::from_ref_time(46_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -86,11 +86,11 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(25_123_000 as u64) + Weight::from_ref_time(28_820_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(190_000 as u64).saturating_mul(a as u64)) + .saturating_add(Weight::from_ref_time(145_000 as u64).saturating_mul(a as u64)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(21_000 as u64).saturating_mul(p as u64)) + .saturating_add(Weight::from_ref_time(18_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -100,38 +100,38 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(32_582_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(200_000 as u64).saturating_mul(a as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(93_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(37_916_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(124_000 as u64).saturating_mul(a as u64)) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(67_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(28_173_000 as u64) - // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(112_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(31_658_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(81_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(28_247_000 as u64) - // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(118_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(31_794_000 as u64) + // Standard Error: 2_000 + .saturating_add(Weight::from_ref_time(90_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - Weight::from_ref_time(23_821_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(85_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(27_460_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(44_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -139,18 +139,18 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn create_pure(p: u32, ) -> Weight { - Weight::from_ref_time(31_472_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(21_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(34_252_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(14_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. fn kill_pure(p: u32, ) -> Weight { - Weight::from_ref_time(24_620_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(85_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(28_616_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(54_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs index 172660abd72..0948531fc0e 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_session.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_session` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemine/src/weights +// --output=./parachains/runtimes/assets/statemine/src/weights/pallet_session.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. @@ -49,14 +49,14 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:1 w:1) fn set_keys() -> Weight { - Weight::from_ref_time(16_555_000 as u64) + Weight::from_ref_time(23_807_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:1) fn purge_keys() -> Weight { - Weight::from_ref_time(13_554_000 as u64) + Weight::from_ref_time(20_676_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs index 0ee1456f7c6..44b13a39aac 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_timestamp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemine/src/weights +// --output=./parachains/runtimes/assets/statemine/src/weights/pallet_timestamp.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. @@ -48,11 +48,11 @@ pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { // Storage: Timestamp Now (r:1 w:1) fn set() -> Weight { - Weight::from_ref_time(6_818_000 as u64) + Weight::from_ref_time(7_902_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } fn on_finalize() -> Weight { - Weight::from_ref_time(2_431_000 as u64) + Weight::from_ref_time(4_249_000 as u64) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs index 133f267e948..54a578d6f1c 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_uniques.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_uniques` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 @@ -25,12 +25,9 @@ // ./artifacts/polkadot-parachain // benchmark // pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* +// --chain=statemine-dev // --execution=wasm // --wasm-execution=compiled -// --heap-pages=4096 // --pallet=pallet_uniques // --extrinsic=* // --steps=50 @@ -43,25 +40,23 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_uniques`. pub struct WeightInfo(PhantomData); impl pallet_uniques::WeightInfo for WeightInfo { - // Storage: Uniques NextCollectionId (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn create() -> Weight { - Weight::from_ref_time(28_358_000 as u64) + Weight::from_ref_time(33_406_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } - // Storage: Uniques NextCollectionId (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_create() -> Weight { - Weight::from_ref_time(17_824_000 as u64) + Weight::from_ref_time(22_030_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -78,12 +73,12 @@ impl pallet_uniques::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 1000]`. fn destroy(n: u32, m: u32, a: u32, ) -> Weight { Weight::from_ref_time(0 as u64) - // Standard Error: 17_000 - .saturating_add(Weight::from_ref_time(10_592_000 as u64).saturating_mul(n as u64)) - // Standard Error: 17_000 - .saturating_add(Weight::from_ref_time(1_658_000 as u64).saturating_mul(m as u64)) - // Standard Error: 17_000 - .saturating_add(Weight::from_ref_time(1_593_000 as u64).saturating_mul(a as u64)) + // Standard Error: 13_000 + .saturating_add(Weight::from_ref_time(9_873_000 as u64).saturating_mul(n as u64)) + // Standard Error: 13_000 + .saturating_add(Weight::from_ref_time(1_727_000 as u64).saturating_mul(m as u64)) + // Standard Error: 13_000 + .saturating_add(Weight::from_ref_time(1_664_000 as u64).saturating_mul(a as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(n as u64))) .saturating_add(T::DbWeight::get().writes(4 as u64)) @@ -96,7 +91,7 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques CollectionMaxSupply (r:1 w:0) // Storage: Uniques Account (r:0 w:1) fn mint() -> Weight { - Weight::from_ref_time(36_742_000 as u64) + Weight::from_ref_time(41_026_000 as u64) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -105,7 +100,7 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Account (r:0 w:1) // Storage: Uniques ItemPriceOf (r:0 w:1) fn burn() -> Weight { - Weight::from_ref_time(37_124_000 as u64) + Weight::from_ref_time(44_624_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -114,17 +109,17 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Account (r:0 w:2) // Storage: Uniques ItemPriceOf (r:0 w:1) fn transfer() -> Weight { - Weight::from_ref_time(28_961_000 as u64) + Weight::from_ref_time(33_942_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Uniques Class (r:1 w:1) - // Storage: Uniques Asset (r:100 w:100) + // Storage: Uniques Asset (r:102 w:102) /// The range of component `i` is `[0, 5000]`. fn redeposit(i: u32, ) -> Weight { Weight::from_ref_time(0 as u64) - // Standard Error: 15_000 - .saturating_add(Weight::from_ref_time(12_880_000 as u64).saturating_mul(i as u64)) + // Standard Error: 12_000 + .saturating_add(Weight::from_ref_time(11_483_000 as u64).saturating_mul(i as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(i as u64))) .saturating_add(T::DbWeight::get().writes(1 as u64)) @@ -133,26 +128,26 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn freeze() -> Weight { - Weight::from_ref_time(21_658_000 as u64) + Weight::from_ref_time(26_821_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn thaw() -> Weight { - Weight::from_ref_time(21_980_000 as u64) + Weight::from_ref_time(26_661_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) fn freeze_collection() -> Weight { - Weight::from_ref_time(17_123_000 as u64) + Weight::from_ref_time(22_335_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) fn thaw_collection() -> Weight { - Weight::from_ref_time(17_398_000 as u64) + Weight::from_ref_time(22_095_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -160,20 +155,20 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:2) fn transfer_ownership() -> Weight { - Weight::from_ref_time(25_473_000 as u64) + Weight::from_ref_time(30_274_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Uniques Class (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(17_970_000 as u64) + Weight::from_ref_time(22_762_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_item_status() -> Weight { - Weight::from_ref_time(20_781_000 as u64) + Weight::from_ref_time(25_193_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -181,7 +176,7 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn set_attribute() -> Weight { - Weight::from_ref_time(42_652_000 as u64) + Weight::from_ref_time(49_304_000 as u64) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -189,69 +184,69 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn clear_attribute() -> Weight { - Weight::from_ref_time(41_166_000 as u64) + Weight::from_ref_time(48_497_000 as u64) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn set_metadata() -> Weight { - Weight::from_ref_time(35_471_000 as u64) + Weight::from_ref_time(39_494_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(35_110_000 as u64) + Weight::from_ref_time(42_057_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn set_collection_metadata() -> Weight { - Weight::from_ref_time(33_536_000 as u64) + Weight::from_ref_time(39_279_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn clear_collection_metadata() -> Weight { - Weight::from_ref_time(31_913_000 as u64) + Weight::from_ref_time(39_339_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(23_536_000 as u64) + Weight::from_ref_time(29_293_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(23_748_000 as u64) + Weight::from_ref_time(28_463_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) fn set_accept_ownership() -> Weight { - Weight::from_ref_time(20_712_000 as u64) + Weight::from_ref_time(25_542_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques CollectionMaxSupply (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn set_collection_max_supply() -> Weight { - Weight::from_ref_time(20_245_000 as u64) + Weight::from_ref_time(24_982_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Asset (r:1 w:0) // Storage: Uniques ItemPriceOf (r:0 w:1) fn set_price() -> Weight { - Weight::from_ref_time(20_065_000 as u64) + Weight::from_ref_time(25_217_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -260,7 +255,7 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Account (r:0 w:2) fn buy_item() -> Weight { - Weight::from_ref_time(40_638_000 as u64) + Weight::from_ref_time(45_577_000 as u64) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs index 83244ffacab..c913b7bce0a 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_utility` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemine/src/weights +// --output=./parachains/runtimes/assets/statemine/src/weights/pallet_utility.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_utility`. @@ -48,26 +48,26 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - Weight::from_ref_time(22_923_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(3_526_000 as u64).saturating_mul(c as u64)) + Weight::from_ref_time(24_677_000 as u64) + // Standard Error: 2_000 + .saturating_add(Weight::from_ref_time(3_837_000 as u64).saturating_mul(c as u64)) } fn as_derivative() -> Weight { - Weight::from_ref_time(5_220_000 as u64) + Weight::from_ref_time(6_606_000 as u64) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - Weight::from_ref_time(20_953_000 as u64) + Weight::from_ref_time(21_357_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_698_000 as u64).saturating_mul(c as u64)) + .saturating_add(Weight::from_ref_time(4_002_000 as u64).saturating_mul(c as u64)) } fn dispatch_as() -> Weight { - Weight::from_ref_time(12_087_000 as u64) + Weight::from_ref_time(14_659_000 as u64) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - Weight::from_ref_time(10_076_000 as u64) + Weight::from_ref_time(20_033_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_546_000 as u64).saturating_mul(c as u64)) + .saturating_add(Weight::from_ref_time(3_832_000 as u64).saturating_mul(c as u64)) } } diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/cumulus_pallet_xcmp_queue.rs new file mode 100644 index 00000000000..23bcd818b33 --- /dev/null +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/cumulus_pallet_xcmp_queue.rs @@ -0,0 +1,63 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus 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 Cumulus. If not, see . + + +//! Autogenerated weights for `cumulus_pallet_xcmp_queue` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --template=./templates/xcm-bench-template.hbs +// --chain=statemine-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=cumulus_pallet_xcmp_queue +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/assets/statemine/src/weights/xcm/cumulus_pallet_xcmp_queue.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weights for `cumulus_pallet_xcmp_queue`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + // Storage: XcmpQueue QueueConfig (r:1 w:1) + pub(crate) fn set_config_with_u32() -> Weight { + Weight::from_ref_time(7_552_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + // Storage: XcmpQueue QueueConfig (r:1 w:1) + pub(crate) fn set_config_with_weight() -> Weight { + Weight::from_ref_time(7_568_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } +} diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs index 85bf47886a1..e47109fed89 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -18,24 +18,24 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::fungible` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-17, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: -// /home/benchbot/cargo_target_dir/production/polkadot-parachain +// ./artifacts/polkadot-parachain // benchmark // pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* +// --template=./templates/xcm-bench-template.hbs +// --chain=statemine-dev // --execution=wasm // --wasm-execution=compiled -// --heap-pages=4096 // --pallet=pallet_xcm_benchmarks::fungible -// --chain=statemine-dev -// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json // --header=./file_header.txt -// --template=./templates/xcm-bench-template.hbs // --output=./parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs #![cfg_attr(rustfmt, rustfmt_skip)] @@ -50,13 +50,13 @@ pub struct WeightInfo(PhantomData); impl WeightInfo { // Storage: System Account (r:1 w:1) pub(crate) fn withdraw_asset() -> Weight { - Weight::from_ref_time(29_190_000 as u64) + Weight::from_ref_time(35_315_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) pub(crate) fn transfer_asset() -> Weight { - Weight::from_ref_time(34_102_000 as u64) + Weight::from_ref_time(40_541_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -68,16 +68,16 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn transfer_reserve_asset() -> Weight { - Weight::from_ref_time(49_386_000 as u64) + Weight::from_ref_time(54_608_000 as u64) .saturating_add(T::DbWeight::get().reads(8 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } pub(crate) fn receive_teleported_asset() -> Weight { - Weight::from_ref_time(4_937_000 as u64) + Weight::from_ref_time(6_927_000 as u64) } // Storage: System Account (r:1 w:1) pub(crate) fn deposit_asset() -> Weight { - Weight::from_ref_time(30_853_000 as u64) + Weight::from_ref_time(35_353_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -89,7 +89,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn deposit_reserve_asset() -> Weight { - Weight::from_ref_time(45_866_000 as u64) + Weight::from_ref_time(51_366_000 as u64) .saturating_add(T::DbWeight::get().reads(7 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -100,7 +100,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_teleport() -> Weight { - Weight::from_ref_time(23_964_000 as u64) + Weight::from_ref_time(27_592_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 6a9f36b7684..18d38f0af98 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -18,24 +18,24 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::generic` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-17, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: -// /home/benchbot/cargo_target_dir/production/polkadot-parachain +// ./artifacts/polkadot-parachain // benchmark // pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* +// --template=./templates/xcm-bench-template.hbs +// --chain=statemine-dev // --execution=wasm // --wasm-execution=compiled -// --heap-pages=4096 // --pallet=pallet_xcm_benchmarks::generic -// --chain=statemine-dev -// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json // --header=./file_header.txt -// --template=./templates/xcm-bench-template.hbs // --output=./parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs #![cfg_attr(rustfmt, rustfmt_skip)] @@ -55,38 +55,38 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn query_holding() -> Weight { - Weight::from_ref_time(694_466_000 as u64) + Weight::from_ref_time(679_129_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } pub(crate) fn buy_execution() -> Weight { - Weight::from_ref_time(7_095_000 as u64) + Weight::from_ref_time(9_337_000 as u64) } // Storage: PolkadotXcm Queries (r:1 w:0) pub(crate) fn query_response() -> Weight { - Weight::from_ref_time(13_270_000 as u64) + Weight::from_ref_time(17_924_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) } pub(crate) fn transact() -> Weight { - Weight::from_ref_time(16_375_000 as u64) + Weight::from_ref_time(21_258_000 as u64) } pub(crate) fn refund_surplus() -> Weight { - Weight::from_ref_time(7_319_000 as u64) + Weight::from_ref_time(9_634_000 as u64) } pub(crate) fn set_error_handler() -> Weight { - Weight::from_ref_time(3_515_000 as u64) + Weight::from_ref_time(5_616_000 as u64) } pub(crate) fn set_appendix() -> Weight { - Weight::from_ref_time(3_501_000 as u64) + Weight::from_ref_time(5_627_000 as u64) } pub(crate) fn clear_error() -> Weight { - Weight::from_ref_time(3_459_000 as u64) + Weight::from_ref_time(5_793_000 as u64) } pub(crate) fn descend_origin() -> Weight { - Weight::from_ref_time(4_319_000 as u64) + Weight::from_ref_time(6_477_000 as u64) } pub(crate) fn clear_origin() -> Weight { - Weight::from_ref_time(3_511_000 as u64) + Weight::from_ref_time(5_709_000 as u64) } // Storage: PolkadotXcm SupportedVersion (r:1 w:0) // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) @@ -94,18 +94,18 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn report_error() -> Weight { - Weight::from_ref_time(13_284_000 as u64) + Weight::from_ref_time(16_302_000 as u64) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: PolkadotXcm AssetTraps (r:1 w:1) pub(crate) fn claim_asset() -> Weight { - Weight::from_ref_time(7_985_000 as u64) + Weight::from_ref_time(12_324_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } pub(crate) fn trap() -> Weight { - Weight::from_ref_time(3_515_000 as u64) + Weight::from_ref_time(5_724_000 as u64) } // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -114,13 +114,13 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn subscribe_version() -> Weight { - Weight::from_ref_time(16_657_000 as u64) + Weight::from_ref_time(19_809_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) pub(crate) fn unsubscribe_version() -> Weight { - Weight::from_ref_time(5_622_000 as u64) + Weight::from_ref_time(9_008_000 as u64) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: ParachainInfo ParachainId (r:1 w:0) @@ -130,7 +130,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_reserve_withdraw() -> Weight { - Weight::from_ref_time(878_786_000 as u64) + Weight::from_ref_time(867_880_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/statemint/src/weights/frame_system.rs b/parachains/runtimes/assets/statemint/src/weights/frame_system.rs index a1c577d6d91..f2e55bc0526 100644 --- a/parachains/runtimes/assets/statemint/src/weights/frame_system.rs +++ b/parachains/runtimes/assets/statemint/src/weights/frame_system.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `frame_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemint/src/weights +// --output=./parachains/runtimes/assets/statemint/src/weights/frame_system.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `frame_system`. @@ -59,7 +59,7 @@ impl frame_system::WeightInfo for WeightInfo { // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) fn set_heap_pages() -> Weight { - Weight::from_ref_time(5_446_000 as u64) + Weight::from_ref_time(8_784_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -68,7 +68,7 @@ impl frame_system::WeightInfo for WeightInfo { fn set_storage(i: u32, ) -> Weight { Weight::from_ref_time(0 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(626_000 as u64).saturating_mul(i as u64)) + .saturating_add(Weight::from_ref_time(625_000 as u64).saturating_mul(i as u64)) .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Skipped Metadata (r:0 w:0) @@ -76,15 +76,15 @@ impl frame_system::WeightInfo for WeightInfo { fn kill_storage(i: u32, ) -> Weight { Weight::from_ref_time(0 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(515_000 as u64).saturating_mul(i as u64)) + .saturating_add(Weight::from_ref_time(553_000 as u64).saturating_mul(i as u64)) .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `p` is `[1, 1000]`. fn kill_prefix(p: u32, ) -> Weight { Weight::from_ref_time(0 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(1_052_000 as u64).saturating_mul(p as u64)) + // Standard Error: 2_000 + .saturating_add(Weight::from_ref_time(1_138_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(p as u64))) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs index f0c00312530..445d1b946d8 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_assets` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemint/src/weights +// --output=./parachains/runtimes/assets/statemint/src/weights/pallet_assets.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_assets`. @@ -48,13 +48,13 @@ pub struct WeightInfo(PhantomData); impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:1) fn create() -> Weight { - Weight::from_ref_time(26_226_000 as u64) + Weight::from_ref_time(30_406_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn force_create() -> Weight { - Weight::from_ref_time(15_357_000 as u64) + Weight::from_ref_time(18_225_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -68,12 +68,12 @@ impl pallet_assets::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 500]`. fn destroy(c: u32, s: u32, a: u32, ) -> Weight { Weight::from_ref_time(0 as u64) - // Standard Error: 45_000 - .saturating_add(Weight::from_ref_time(15_904_000 as u64).saturating_mul(c as u64)) - // Standard Error: 45_000 - .saturating_add(Weight::from_ref_time(18_803_000 as u64).saturating_mul(s as u64)) - // Standard Error: 450_000 - .saturating_add(Weight::from_ref_time(17_017_000 as u64).saturating_mul(a as u64)) + // Standard Error: 96_000 + .saturating_add(Weight::from_ref_time(15_834_000 as u64).saturating_mul(c as u64)) + // Standard Error: 96_000 + .saturating_add(Weight::from_ref_time(17_275_000 as u64).saturating_mul(s as u64)) + // Standard Error: 966_000 + .saturating_add(Weight::from_ref_time(35_635_000 as u64).saturating_mul(a as u64)) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(s as u64))) @@ -86,14 +86,14 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn mint() -> Weight { - Weight::from_ref_time(29_616_000 as u64) + Weight::from_ref_time(36_535_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn burn() -> Weight { - Weight::from_ref_time(33_496_000 as u64) + Weight::from_ref_time(39_821_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -101,7 +101,7 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(46_790_000 as u64) + Weight::from_ref_time(52_287_000 as u64) .saturating_add(T::DbWeight::get().reads(4 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -109,7 +109,7 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(39_769_000 as u64) + Weight::from_ref_time(45_347_000 as u64) .saturating_add(T::DbWeight::get().reads(4 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -117,46 +117,46 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn force_transfer() -> Weight { - Weight::from_ref_time(47_200_000 as u64) + Weight::from_ref_time(52_369_000 as u64) .saturating_add(T::DbWeight::get().reads(4 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn freeze() -> Weight { - Weight::from_ref_time(20_873_000 as u64) + Weight::from_ref_time(25_896_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn thaw() -> Weight { - Weight::from_ref_time(21_228_000 as u64) + Weight::from_ref_time(25_630_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn freeze_asset() -> Weight { - Weight::from_ref_time(17_685_000 as u64) + Weight::from_ref_time(22_340_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn thaw_asset() -> Weight { - Weight::from_ref_time(17_542_000 as u64) + Weight::from_ref_time(22_204_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Metadata (r:1 w:0) fn transfer_ownership() -> Weight { - Weight::from_ref_time(18_639_000 as u64) + Weight::from_ref_time(24_971_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(17_135_000 as u64) + Weight::from_ref_time(24_079_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -164,19 +164,17 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. - fn set_metadata(n: u32, s: u32, ) -> Weight { - Weight::from_ref_time(31_324_000 as u64) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(n as u64)) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as u64).saturating_mul(s as u64)) + fn set_metadata(_n: u32, s: u32, ) -> Weight { + Weight::from_ref_time(36_505_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(4_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(31_340_000 as u64) + Weight::from_ref_time(38_931_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -185,29 +183,29 @@ impl pallet_assets::WeightInfo for WeightInfo { /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn force_set_metadata(_n: u32, s: u32, ) -> Weight { - Weight::from_ref_time(18_756_000 as u64) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(s as u64)) + Weight::from_ref_time(25_165_000 as u64) + // Standard Error: 5_000 + .saturating_add(Weight::from_ref_time(9_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn force_clear_metadata() -> Weight { - Weight::from_ref_time(31_427_000 as u64) + Weight::from_ref_time(40_301_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn force_asset_status() -> Weight { - Weight::from_ref_time(16_930_000 as u64) + Weight::from_ref_time(23_393_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(34_492_000 as u64) + Weight::from_ref_time(39_465_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -216,21 +214,21 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_approved() -> Weight { - Weight::from_ref_time(60_098_000 as u64) + Weight::from_ref_time(69_070_000 as u64) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(5 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(35_630_000 as u64) + Weight::from_ref_time(40_461_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn force_cancel_approval() -> Weight { - Weight::from_ref_time(37_399_000 as u64) + Weight::from_ref_time(41_788_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs index 87359fbd4e8..465247219dd 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_balances` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemint/src/weights +// --output=./parachains/runtimes/assets/statemint/src/weights/pallet_balances.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. @@ -48,43 +48,43 @@ pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(41_006_000 as u64) + Weight::from_ref_time(48_009_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(31_329_000 as u64) + Weight::from_ref_time(35_939_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { - Weight::from_ref_time(21_075_000 as u64) + Weight::from_ref_time(26_600_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { - Weight::from_ref_time(24_413_000 as u64) + Weight::from_ref_time(30_092_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { - Weight::from_ref_time(41_434_000 as u64) + Weight::from_ref_time(47_435_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { - Weight::from_ref_time(37_653_000 as u64) + Weight::from_ref_time(41_179_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { - Weight::from_ref_time(18_701_000 as u64) + Weight::from_ref_time(22_413_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs index d4e2c46ecbd..2a95ad7a16c 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_collator_selection` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemint/src/weights +// --output=./parachains/runtimes/assets/statemint/src/weights/pallet_collator_selection.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_collator_selection`. @@ -50,20 +50,20 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection Invulnerables (r:0 w:1) /// The range of component `b` is `[1, 100]`. fn set_invulnerables(b: u32, ) -> Weight { - Weight::from_ref_time(8_587_000 as u64) - // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(3_304_000 as u64).saturating_mul(b as u64)) + Weight::from_ref_time(22_504_000 as u64) + // Standard Error: 2_000 + .saturating_add(Weight::from_ref_time(2_465_000 as u64).saturating_mul(b as u64)) .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection DesiredCandidates (r:0 w:1) fn set_desired_candidates() -> Weight { - Weight::from_ref_time(9_027_000 as u64) + Weight::from_ref_time(14_572_000 as u64) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection CandidacyBond (r:0 w:1) fn set_candidacy_bond() -> Weight { - Weight::from_ref_time(9_244_000 as u64) + Weight::from_ref_time(14_791_000 as u64) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection Candidates (r:1 w:1) @@ -74,9 +74,9 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[1, 1000]`. fn register_as_candidate(c: u32, ) -> Weight { - Weight::from_ref_time(60_984_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(89_000 as u64).saturating_mul(c as u64)) + Weight::from_ref_time(60_440_000 as u64) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(174_000 as u64).saturating_mul(c as u64)) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -84,9 +84,9 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[6, 1000]`. fn leave_intent(c: u32, ) -> Weight { - Weight::from_ref_time(49_046_000 as u64) + Weight::from_ref_time(66_209_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(118_000 as u64).saturating_mul(c as u64)) + .saturating_add(Weight::from_ref_time(157_000 as u64).saturating_mul(c as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -94,7 +94,7 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: System BlockWeight (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) fn note_author() -> Weight { - Weight::from_ref_time(32_269_000 as u64) + Weight::from_ref_time(35_644_000 as u64) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -107,10 +107,10 @@ impl pallet_collator_selection::WeightInfo for WeightIn /// The range of component `c` is `[1, 1000]`. fn new_session(r: u32, c: u32, ) -> Weight { Weight::from_ref_time(0 as u64) - // Standard Error: 1_992_000 - .saturating_add(Weight::from_ref_time(10_521_000 as u64).saturating_mul(r as u64)) - // Standard Error: 1_992_000 - .saturating_add(Weight::from_ref_time(53_162_000 as u64).saturating_mul(c as u64)) + // Standard Error: 1_251_000 + .saturating_add(Weight::from_ref_time(6_889_000 as u64).saturating_mul(r as u64)) + // Standard Error: 1_251_000 + .saturating_add(Weight::from_ref_time(32_938_000 as u64).saturating_mul(c as u64)) .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(r as u64))) .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(c as u64))) diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs index 1f543e13402..8c22cfaa98c 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_multisig` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemint/src/weights +// --output=./parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_multisig`. @@ -48,7 +48,7 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - Weight::from_ref_time(17_175_000 as u64) + Weight::from_ref_time(21_264_000 as u64) // Standard Error: 0 .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) } @@ -57,9 +57,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(35_937_000 as u64) + Weight::from_ref_time(40_726_000 as u64) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(97_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(100_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) @@ -71,9 +71,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(37_468_000 as u64) + Weight::from_ref_time(42_052_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(89_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(109_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) @@ -83,9 +83,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(25_557_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(83_000 as u64).saturating_mul(s as u64)) + Weight::from_ref_time(29_056_000 as u64) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(112_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) @@ -96,9 +96,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(38_127_000 as u64) + Weight::from_ref_time(44_006_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(88_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(106_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) @@ -110,11 +110,11 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(47_383_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(127_000 as u64).saturating_mul(s as u64)) + Weight::from_ref_time(53_470_000 as u64) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(136_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as u64).saturating_mul(z as u64)) + .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -122,9 +122,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - Weight::from_ref_time(33_472_000 as u64) + Weight::from_ref_time(36_826_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(102_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(125_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -132,9 +132,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Storage: Multisig Calls (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - Weight::from_ref_time(21_612_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(119_000 as u64).saturating_mul(s as u64)) + Weight::from_ref_time(26_801_000 as u64) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(126_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -143,9 +143,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_complete(s: u32, ) -> Weight { - Weight::from_ref_time(68_168_000 as u64) + Weight::from_ref_time(67_374_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(157_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(152_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -153,9 +153,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - Weight::from_ref_time(52_748_000 as u64) + Weight::from_ref_time(54_556_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(117_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(125_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs index b58c456557f..04baba21544 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_proxy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemint/src/weights +// --output=./parachains/runtimes/assets/statemint/src/weights/pallet_proxy.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. @@ -49,9 +49,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:0) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - Weight::from_ref_time(17_582_000 as u64) + Weight::from_ref_time(23_935_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(77_000 as u64).saturating_mul(p as u64)) + .saturating_add(Weight::from_ref_time(68_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) } // Storage: Proxy Proxies (r:1 w:0) @@ -60,11 +60,11 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(34_603_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(169_000 as u64).saturating_mul(a as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(87_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(42_650_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(121_000 as u64).saturating_mul(a as u64)) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(56_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -73,11 +73,11 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn remove_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(24_496_000 as u64) + Weight::from_ref_time(29_249_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(179_000 as u64).saturating_mul(a as u64)) + .saturating_add(Weight::from_ref_time(132_000 as u64).saturating_mul(a as u64)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(25_000 as u64).saturating_mul(p as u64)) + .saturating_add(Weight::from_ref_time(23_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -86,11 +86,11 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(24_237_000 as u64) + Weight::from_ref_time(29_288_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(181_000 as u64).saturating_mul(a as u64)) + .saturating_add(Weight::from_ref_time(136_000 as u64).saturating_mul(a as u64)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(29_000 as u64).saturating_mul(p as u64)) + .saturating_add(Weight::from_ref_time(18_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -100,38 +100,38 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(32_065_000 as u64) + Weight::from_ref_time(37_822_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(166_000 as u64).saturating_mul(a as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(91_000 as u64).saturating_mul(p as u64)) + .saturating_add(Weight::from_ref_time(131_000 as u64).saturating_mul(a as u64)) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(70_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(27_168_000 as u64) + Weight::from_ref_time(32_025_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(117_000 as u64).saturating_mul(p as u64)) + .saturating_add(Weight::from_ref_time(77_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(27_233_000 as u64) + Weight::from_ref_time(31_970_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(121_000 as u64).saturating_mul(p as u64)) + .saturating_add(Weight::from_ref_time(88_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - Weight::from_ref_time(23_010_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(95_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(27_683_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(51_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -139,18 +139,18 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn create_pure(p: u32, ) -> Weight { - Weight::from_ref_time(30_378_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(16_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(34_807_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(9_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. fn kill_pure(p: u32, ) -> Weight { - Weight::from_ref_time(23_977_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(76_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(28_997_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(46_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs index 2271b8622bf..3cda2056f0e 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_session.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_session` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemint/src/weights +// --output=./parachains/runtimes/assets/statemint/src/weights/pallet_session.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. @@ -49,14 +49,14 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:1 w:1) fn set_keys() -> Weight { - Weight::from_ref_time(16_170_000 as u64) + Weight::from_ref_time(24_731_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:1) fn purge_keys() -> Weight { - Weight::from_ref_time(13_246_000 as u64) + Weight::from_ref_time(20_852_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs index 37330043a2b..784b0043cdb 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_timestamp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemint/src/weights +// --output=./parachains/runtimes/assets/statemint/src/weights/pallet_timestamp.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. @@ -48,11 +48,11 @@ pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { // Storage: Timestamp Now (r:1 w:1) fn set() -> Weight { - Weight::from_ref_time(6_737_000 as u64) + Weight::from_ref_time(7_972_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } fn on_finalize() -> Weight { - Weight::from_ref_time(2_329_000 as u64) + Weight::from_ref_time(4_333_000 as u64) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs index c50d6c653b0..7f558a78525 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_uniques.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_uniques` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 @@ -25,12 +25,9 @@ // ./artifacts/polkadot-parachain // benchmark // pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* +// --chain=statemint-dev // --execution=wasm // --wasm-execution=compiled -// --heap-pages=4096 // --pallet=pallet_uniques // --extrinsic=* // --steps=50 @@ -43,25 +40,23 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_uniques`. pub struct WeightInfo(PhantomData); impl pallet_uniques::WeightInfo for WeightInfo { - // Storage: Uniques NextCollectionId (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn create() -> Weight { - Weight::from_ref_time(27_424_000 as u64) + Weight::from_ref_time(32_952_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } - // Storage: Uniques NextCollectionId (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_create() -> Weight { - Weight::from_ref_time(17_098_000 as u64) + Weight::from_ref_time(21_878_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -78,12 +73,12 @@ impl pallet_uniques::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 1000]`. fn destroy(n: u32, m: u32, a: u32, ) -> Weight { Weight::from_ref_time(0 as u64) - // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(10_919_000 as u64).saturating_mul(n as u64)) - // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(1_679_000 as u64).saturating_mul(m as u64)) - // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(1_463_000 as u64).saturating_mul(a as u64)) + // Standard Error: 14_000 + .saturating_add(Weight::from_ref_time(10_327_000 as u64).saturating_mul(n as u64)) + // Standard Error: 14_000 + .saturating_add(Weight::from_ref_time(1_703_000 as u64).saturating_mul(m as u64)) + // Standard Error: 14_000 + .saturating_add(Weight::from_ref_time(1_599_000 as u64).saturating_mul(a as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(n as u64))) .saturating_add(T::DbWeight::get().writes(4 as u64)) @@ -96,7 +91,7 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques CollectionMaxSupply (r:1 w:0) // Storage: Uniques Account (r:0 w:1) fn mint() -> Weight { - Weight::from_ref_time(36_329_000 as u64) + Weight::from_ref_time(42_048_000 as u64) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -105,7 +100,7 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Account (r:0 w:1) // Storage: Uniques ItemPriceOf (r:0 w:1) fn burn() -> Weight { - Weight::from_ref_time(36_746_000 as u64) + Weight::from_ref_time(45_139_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -114,17 +109,17 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Account (r:0 w:2) // Storage: Uniques ItemPriceOf (r:0 w:1) fn transfer() -> Weight { - Weight::from_ref_time(28_916_000 as u64) + Weight::from_ref_time(35_141_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Uniques Class (r:1 w:1) - // Storage: Uniques Asset (r:100 w:100) + // Storage: Uniques Asset (r:102 w:102) /// The range of component `i` is `[0, 5000]`. fn redeposit(i: u32, ) -> Weight { Weight::from_ref_time(0 as u64) - // Standard Error: 15_000 - .saturating_add(Weight::from_ref_time(12_745_000 as u64).saturating_mul(i as u64)) + // Standard Error: 12_000 + .saturating_add(Weight::from_ref_time(11_923_000 as u64).saturating_mul(i as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(i as u64))) .saturating_add(T::DbWeight::get().writes(1 as u64)) @@ -133,26 +128,26 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn freeze() -> Weight { - Weight::from_ref_time(21_813_000 as u64) + Weight::from_ref_time(27_789_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn thaw() -> Weight { - Weight::from_ref_time(22_088_000 as u64) + Weight::from_ref_time(27_646_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) fn freeze_collection() -> Weight { - Weight::from_ref_time(17_184_000 as u64) + Weight::from_ref_time(22_691_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) fn thaw_collection() -> Weight { - Weight::from_ref_time(17_311_000 as u64) + Weight::from_ref_time(22_442_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -160,20 +155,20 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:2) fn transfer_ownership() -> Weight { - Weight::from_ref_time(25_174_000 as u64) + Weight::from_ref_time(31_723_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Uniques Class (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(17_879_000 as u64) + Weight::from_ref_time(23_679_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_item_status() -> Weight { - Weight::from_ref_time(20_491_000 as u64) + Weight::from_ref_time(26_006_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -181,7 +176,7 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn set_attribute() -> Weight { - Weight::from_ref_time(42_444_000 as u64) + Weight::from_ref_time(50_636_000 as u64) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -189,69 +184,69 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn clear_attribute() -> Weight { - Weight::from_ref_time(41_217_000 as u64) + Weight::from_ref_time(48_616_000 as u64) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn set_metadata() -> Weight { - Weight::from_ref_time(34_559_000 as u64) + Weight::from_ref_time(40_123_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(34_863_000 as u64) + Weight::from_ref_time(43_104_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn set_collection_metadata() -> Weight { - Weight::from_ref_time(33_199_000 as u64) + Weight::from_ref_time(39_039_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn clear_collection_metadata() -> Weight { - Weight::from_ref_time(31_472_000 as u64) + Weight::from_ref_time(39_647_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(23_618_000 as u64) + Weight::from_ref_time(30_019_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(23_507_000 as u64) + Weight::from_ref_time(29_229_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) fn set_accept_ownership() -> Weight { - Weight::from_ref_time(21_120_000 as u64) + Weight::from_ref_time(26_650_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques CollectionMaxSupply (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn set_collection_max_supply() -> Weight { - Weight::from_ref_time(20_664_000 as u64) + Weight::from_ref_time(25_238_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Asset (r:1 w:0) // Storage: Uniques ItemPriceOf (r:0 w:1) fn set_price() -> Weight { - Weight::from_ref_time(19_938_000 as u64) + Weight::from_ref_time(26_334_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -260,7 +255,7 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Account (r:0 w:2) fn buy_item() -> Weight { - Weight::from_ref_time(39_254_000 as u64) + Weight::from_ref_time(46_144_000 as u64) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs index 9c6fece01af..d504d467191 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_utility` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/statemint/src/weights +// --output=./parachains/runtimes/assets/statemint/src/weights/pallet_utility.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_utility`. @@ -48,26 +48,26 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - Weight::from_ref_time(30_959_000 as u64) - // Standard Error: 6_000 - .saturating_add(Weight::from_ref_time(3_220_000 as u64).saturating_mul(c as u64)) + Weight::from_ref_time(21_360_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(3_860_000 as u64).saturating_mul(c as u64)) } fn as_derivative() -> Weight { - Weight::from_ref_time(4_732_000 as u64) + Weight::from_ref_time(6_860_000 as u64) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - Weight::from_ref_time(16_465_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_364_000 as u64).saturating_mul(c as u64)) + Weight::from_ref_time(14_622_000 as u64) + // Standard Error: 3_000 + .saturating_add(Weight::from_ref_time(4_028_000 as u64).saturating_mul(c as u64)) } fn dispatch_as() -> Weight { - Weight::from_ref_time(11_903_000 as u64) + Weight::from_ref_time(15_303_000 as u64) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - Weight::from_ref_time(22_621_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(3_147_000 as u64).saturating_mul(c as u64)) + Weight::from_ref_time(19_985_000 as u64) + // Standard Error: 2_000 + .saturating_add(Weight::from_ref_time(3_859_000 as u64).saturating_mul(c as u64)) } } diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs new file mode 100644 index 00000000000..db40762b6f1 --- /dev/null +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs @@ -0,0 +1,63 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus 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 Cumulus. If not, see . + + +//! Autogenerated weights for `cumulus_pallet_xcmp_queue` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --template=./templates/xcm-bench-template.hbs +// --chain=statemint-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=cumulus_pallet_xcmp_queue +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/assets/statemint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weights for `cumulus_pallet_xcmp_queue`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + // Storage: XcmpQueue QueueConfig (r:1 w:1) + pub(crate) fn set_config_with_u32() -> Weight { + Weight::from_ref_time(7_362_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + // Storage: XcmpQueue QueueConfig (r:1 w:1) + pub(crate) fn set_config_with_weight() -> Weight { + Weight::from_ref_time(7_234_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } +} diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs index e7d6c954dce..900472b6c9d 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -18,25 +18,24 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::fungible` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-25, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm3`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 // Executed Command: -// /home/benchbot/cargo_target_dir/production/polkadot-parachain +// ./artifacts/polkadot-parachain // benchmark // pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* +// --template=./templates/xcm-bench-template.hbs +// --chain=statemint-dev // --execution=wasm // --wasm-execution=compiled -// --heap-pages=4096 // --pallet=pallet_xcm_benchmarks::fungible -// --chain=statemint-dev -// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json // --header=./file_header.txt -// --template=./templates/xcm-bench-template.hbs // --output=./parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs #![cfg_attr(rustfmt, rustfmt_skip)] @@ -51,13 +50,13 @@ pub struct WeightInfo(PhantomData); impl WeightInfo { // Storage: System Account (r:1 w:1) pub(crate) fn withdraw_asset() -> Weight { - Weight::from_ref_time(34_002_000 as u64) + Weight::from_ref_time(33_878_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) pub(crate) fn transfer_asset() -> Weight { - Weight::from_ref_time(38_285_000 as u64) + Weight::from_ref_time(39_130_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -69,16 +68,16 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn transfer_reserve_asset() -> Weight { - Weight::from_ref_time(55_068_000 as u64) + Weight::from_ref_time(54_404_000 as u64) .saturating_add(T::DbWeight::get().reads(8 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } pub(crate) fn receive_teleported_asset() -> Weight { - Weight::from_ref_time(7_796_000 as u64) + Weight::from_ref_time(6_586_000 as u64) } // Storage: System Account (r:1 w:1) pub(crate) fn deposit_asset() -> Weight { - Weight::from_ref_time(35_092_000 as u64) + Weight::from_ref_time(34_055_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -90,7 +89,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn deposit_reserve_asset() -> Weight { - Weight::from_ref_time(50_590_000 as u64) + Weight::from_ref_time(50_905_000 as u64) .saturating_add(T::DbWeight::get().reads(7 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -101,7 +100,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_teleport() -> Weight { - Weight::from_ref_time(27_220_000 as u64) + Weight::from_ref_time(26_715_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 7af8b8b280b..bd9ac30b57c 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -18,25 +18,24 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::generic` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-25, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! HOSTNAME: `bm3`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 // Executed Command: -// /home/benchbot/cargo_target_dir/production/polkadot-parachain +// ./artifacts/polkadot-parachain // benchmark // pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* +// --template=./templates/xcm-bench-template.hbs +// --chain=statemint-dev // --execution=wasm // --wasm-execution=compiled -// --heap-pages=4096 // --pallet=pallet_xcm_benchmarks::generic -// --chain=statemint-dev -// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json // --header=./file_header.txt -// --template=./templates/xcm-bench-template.hbs // --output=./parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs #![cfg_attr(rustfmt, rustfmt_skip)] @@ -56,38 +55,38 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn query_holding() -> Weight { - Weight::from_ref_time(682_639_000 as u64) + Weight::from_ref_time(693_490_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } pub(crate) fn buy_execution() -> Weight { - Weight::from_ref_time(9_272_000 as u64) + Weight::from_ref_time(9_276_000 as u64) } // Storage: PolkadotXcm Queries (r:1 w:0) pub(crate) fn query_response() -> Weight { - Weight::from_ref_time(17_084_000 as u64) + Weight::from_ref_time(17_581_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) } pub(crate) fn transact() -> Weight { - Weight::from_ref_time(20_265_000 as u64) + Weight::from_ref_time(20_807_000 as u64) } pub(crate) fn refund_surplus() -> Weight { - Weight::from_ref_time(9_422_000 as u64) + Weight::from_ref_time(9_523_000 as u64) } pub(crate) fn set_error_handler() -> Weight { - Weight::from_ref_time(5_545_000 as u64) + Weight::from_ref_time(5_732_000 as u64) } pub(crate) fn set_appendix() -> Weight { - Weight::from_ref_time(5_450_000 as u64) + Weight::from_ref_time(5_666_000 as u64) } pub(crate) fn clear_error() -> Weight { - Weight::from_ref_time(5_519_000 as u64) + Weight::from_ref_time(5_621_000 as u64) } pub(crate) fn descend_origin() -> Weight { - Weight::from_ref_time(6_398_000 as u64) + Weight::from_ref_time(6_570_000 as u64) } pub(crate) fn clear_origin() -> Weight { - Weight::from_ref_time(5_498_000 as u64) + Weight::from_ref_time(5_773_000 as u64) } // Storage: PolkadotXcm SupportedVersion (r:1 w:0) // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) @@ -95,18 +94,18 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn report_error() -> Weight { - Weight::from_ref_time(15_784_000 as u64) + Weight::from_ref_time(16_085_000 as u64) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: PolkadotXcm AssetTraps (r:1 w:1) pub(crate) fn claim_asset() -> Weight { - Weight::from_ref_time(11_861_000 as u64) + Weight::from_ref_time(12_664_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } pub(crate) fn trap() -> Weight { - Weight::from_ref_time(5_462_000 as u64) + Weight::from_ref_time(5_774_000 as u64) } // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -115,13 +114,13 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn subscribe_version() -> Weight { - Weight::from_ref_time(18_997_000 as u64) + Weight::from_ref_time(19_102_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) pub(crate) fn unsubscribe_version() -> Weight { - Weight::from_ref_time(8_684_000 as u64) + Weight::from_ref_time(8_841_000 as u64) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: ParachainInfo ParachainId (r:1 w:0) @@ -131,7 +130,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_reserve_withdraw() -> Weight { - Weight::from_ref_time(883_121_000 as u64) + Weight::from_ref_time(864_425_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/westmint/src/weights/frame_system.rs b/parachains/runtimes/assets/westmint/src/weights/frame_system.rs index f1cc1a39d92..37115922a59 100644 --- a/parachains/runtimes/assets/westmint/src/weights/frame_system.rs +++ b/parachains/runtimes/assets/westmint/src/weights/frame_system.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `frame_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/westmint/src/weights +// --output=./parachains/runtimes/assets/westmint/src/weights/frame_system.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `frame_system`. @@ -59,7 +59,7 @@ impl frame_system::WeightInfo for WeightInfo { // Storage: System Digest (r:1 w:1) // Storage: unknown [0x3a686561707061676573] (r:0 w:1) fn set_heap_pages() -> Weight { - Weight::from_ref_time(5_726_000 as u64) + Weight::from_ref_time(8_984_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -68,7 +68,7 @@ impl frame_system::WeightInfo for WeightInfo { fn set_storage(i: u32, ) -> Weight { Weight::from_ref_time(0 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(616_000 as u64).saturating_mul(i as u64)) + .saturating_add(Weight::from_ref_time(631_000 as u64).saturating_mul(i as u64)) .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Skipped Metadata (r:0 w:0) @@ -76,15 +76,15 @@ impl frame_system::WeightInfo for WeightInfo { fn kill_storage(i: u32, ) -> Weight { Weight::from_ref_time(0 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(519_000 as u64).saturating_mul(i as u64)) + .saturating_add(Weight::from_ref_time(565_000 as u64).saturating_mul(i as u64)) .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(i as u64))) } // Storage: Skipped Metadata (r:0 w:0) /// The range of component `p` is `[1, 1000]`. fn kill_prefix(p: u32, ) -> Weight { Weight::from_ref_time(0 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(1_067_000 as u64).saturating_mul(p as u64)) + // Standard Error: 2_000 + .saturating_add(Weight::from_ref_time(1_128_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(p as u64))) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs index 5a9324262b0..9372ce6d998 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_assets` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/westmint/src/weights +// --output=./parachains/runtimes/assets/westmint/src/weights/pallet_assets.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_assets`. @@ -48,13 +48,13 @@ pub struct WeightInfo(PhantomData); impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:1) fn create() -> Weight { - Weight::from_ref_time(25_905_000 as u64) + Weight::from_ref_time(31_293_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn force_create() -> Weight { - Weight::from_ref_time(14_977_000 as u64) + Weight::from_ref_time(18_434_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -68,12 +68,12 @@ impl pallet_assets::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 500]`. fn destroy(c: u32, s: u32, a: u32, ) -> Weight { Weight::from_ref_time(0 as u64) - // Standard Error: 46_000 - .saturating_add(Weight::from_ref_time(16_133_000 as u64).saturating_mul(c as u64)) - // Standard Error: 46_000 - .saturating_add(Weight::from_ref_time(18_915_000 as u64).saturating_mul(s as u64)) - // Standard Error: 464_000 - .saturating_add(Weight::from_ref_time(16_795_000 as u64).saturating_mul(a as u64)) + // Standard Error: 70_000 + .saturating_add(Weight::from_ref_time(17_625_000 as u64).saturating_mul(c as u64)) + // Standard Error: 70_000 + .saturating_add(Weight::from_ref_time(18_034_000 as u64).saturating_mul(s as u64)) + // Standard Error: 700_000 + .saturating_add(Weight::from_ref_time(16_396_000 as u64).saturating_mul(a as u64)) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(s as u64))) @@ -86,14 +86,14 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn mint() -> Weight { - Weight::from_ref_time(29_903_000 as u64) + Weight::from_ref_time(38_154_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Account (r:1 w:1) fn burn() -> Weight { - Weight::from_ref_time(34_384_000 as u64) + Weight::from_ref_time(41_980_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -101,7 +101,7 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(48_218_000 as u64) + Weight::from_ref_time(54_531_000 as u64) .saturating_add(T::DbWeight::get().reads(4 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -109,7 +109,7 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(40_558_000 as u64) + Weight::from_ref_time(47_282_000 as u64) .saturating_add(T::DbWeight::get().reads(4 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -117,46 +117,46 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn force_transfer() -> Weight { - Weight::from_ref_time(48_330_000 as u64) + Weight::from_ref_time(54_238_000 as u64) .saturating_add(T::DbWeight::get().reads(4 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn freeze() -> Weight { - Weight::from_ref_time(21_218_000 as u64) + Weight::from_ref_time(26_977_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Account (r:1 w:1) fn thaw() -> Weight { - Weight::from_ref_time(21_227_000 as u64) + Weight::from_ref_time(26_731_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn freeze_asset() -> Weight { - Weight::from_ref_time(17_906_000 as u64) + Weight::from_ref_time(23_480_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn thaw_asset() -> Weight { - Weight::from_ref_time(17_669_000 as u64) + Weight::from_ref_time(22_840_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Metadata (r:1 w:0) fn transfer_ownership() -> Weight { - Weight::from_ref_time(18_756_000 as u64) + Weight::from_ref_time(25_506_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(17_203_000 as u64) + Weight::from_ref_time(24_610_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -164,17 +164,15 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Metadata (r:1 w:1) /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. - fn set_metadata(_n: u32, s: u32, ) -> Weight { - Weight::from_ref_time(31_757_000 as u64) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(3_000 as u64).saturating_mul(s as u64)) + fn set_metadata(_n: u32, _s: u32, ) -> Weight { + Weight::from_ref_time(38_251_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(31_669_000 as u64) + Weight::from_ref_time(41_601_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -183,7 +181,7 @@ impl pallet_assets::WeightInfo for WeightInfo { /// The range of component `n` is `[0, 50]`. /// The range of component `s` is `[0, 50]`. fn force_set_metadata(_n: u32, s: u32, ) -> Weight { - Weight::from_ref_time(18_566_000 as u64) + Weight::from_ref_time(25_607_000 as u64) // Standard Error: 0 .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) @@ -192,20 +190,20 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Asset (r:1 w:0) // Storage: Assets Metadata (r:1 w:1) fn force_clear_metadata() -> Weight { - Weight::from_ref_time(31_467_000 as u64) + Weight::from_ref_time(41_226_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) fn force_asset_status() -> Weight { - Weight::from_ref_time(16_275_000 as u64) + Weight::from_ref_time(23_750_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(34_436_000 as u64) + Weight::from_ref_time(40_582_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -214,21 +212,21 @@ impl pallet_assets::WeightInfo for WeightInfo { // Storage: Assets Account (r:2 w:2) // Storage: System Account (r:1 w:1) fn transfer_approved() -> Weight { - Weight::from_ref_time(60_445_000 as u64) + Weight::from_ref_time(71_770_000 as u64) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(5 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(35_819_000 as u64) + Weight::from_ref_time(43_552_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Assets Asset (r:1 w:1) // Storage: Assets Approvals (r:1 w:1) fn force_cancel_approval() -> Weight { - Weight::from_ref_time(36_535_000 as u64) + Weight::from_ref_time(43_189_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs index 6953a52f213..ca77d7a1027 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_balances` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/westmint/src/weights +// --output=./parachains/runtimes/assets/westmint/src/weights/pallet_balances.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_balances`. @@ -48,43 +48,43 @@ pub struct WeightInfo(PhantomData); impl pallet_balances::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) fn transfer() -> Weight { - Weight::from_ref_time(40_330_000 as u64) + Weight::from_ref_time(47_120_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_keep_alive() -> Weight { - Weight::from_ref_time(30_938_000 as u64) + Weight::from_ref_time(35_145_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_creating() -> Weight { - Weight::from_ref_time(20_284_000 as u64) + Weight::from_ref_time(25_940_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn set_balance_killing() -> Weight { - Weight::from_ref_time(24_018_000 as u64) + Weight::from_ref_time(29_130_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) fn force_transfer() -> Weight { - Weight::from_ref_time(40_970_000 as u64) + Weight::from_ref_time(46_032_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: System Account (r:1 w:1) fn transfer_all() -> Weight { - Weight::from_ref_time(36_243_000 as u64) + Weight::from_ref_time(40_563_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:1 w:1) fn force_unreserve() -> Weight { - Weight::from_ref_time(18_374_000 as u64) + Weight::from_ref_time(22_226_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs index ba0d3b311a2..a9b257a7094 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_collator_selection` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/westmint/src/weights +// --output=./parachains/runtimes/assets/westmint/src/weights/pallet_collator_selection.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_collator_selection`. @@ -50,20 +50,20 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection Invulnerables (r:0 w:1) /// The range of component `b` is `[1, 100]`. fn set_invulnerables(b: u32, ) -> Weight { - Weight::from_ref_time(6_669_000 as u64) - // Standard Error: 3_000 - .saturating_add(Weight::from_ref_time(3_218_000 as u64).saturating_mul(b as u64)) + Weight::from_ref_time(23_157_000 as u64) + // Standard Error: 2_000 + .saturating_add(Weight::from_ref_time(2_476_000 as u64).saturating_mul(b as u64)) .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64))) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection DesiredCandidates (r:0 w:1) fn set_desired_candidates() -> Weight { - Weight::from_ref_time(8_348_000 as u64) + Weight::from_ref_time(13_911_000 as u64) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection CandidacyBond (r:0 w:1) fn set_candidacy_bond() -> Weight { - Weight::from_ref_time(8_592_000 as u64) + Weight::from_ref_time(14_462_000 as u64) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: CollatorSelection Candidates (r:1 w:1) @@ -74,9 +74,9 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[1, 1000]`. fn register_as_candidate(c: u32, ) -> Weight { - Weight::from_ref_time(55_542_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(92_000 as u64).saturating_mul(c as u64)) + Weight::from_ref_time(61_134_000 as u64) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(171_000 as u64).saturating_mul(c as u64)) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -84,9 +84,9 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) /// The range of component `c` is `[2, 1000]`. fn leave_intent(c: u32, ) -> Weight { - Weight::from_ref_time(52_080_000 as u64) + Weight::from_ref_time(65_244_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(109_000 as u64).saturating_mul(c as u64)) + .saturating_add(Weight::from_ref_time(156_000 as u64).saturating_mul(c as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -94,7 +94,7 @@ impl pallet_collator_selection::WeightInfo for WeightIn // Storage: System BlockWeight (r:1 w:1) // Storage: CollatorSelection LastAuthoredBlock (r:0 w:1) fn note_author() -> Weight { - Weight::from_ref_time(31_546_000 as u64) + Weight::from_ref_time(35_627_000 as u64) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -107,10 +107,10 @@ impl pallet_collator_selection::WeightInfo for WeightIn /// The range of component `c` is `[1, 1000]`. fn new_session(r: u32, c: u32, ) -> Weight { Weight::from_ref_time(0 as u64) - // Standard Error: 1_895_000 - .saturating_add(Weight::from_ref_time(9_941_000 as u64).saturating_mul(r as u64)) - // Standard Error: 1_895_000 - .saturating_add(Weight::from_ref_time(50_628_000 as u64).saturating_mul(c as u64)) + // Standard Error: 1_285_000 + .saturating_add(Weight::from_ref_time(7_375_000 as u64).saturating_mul(r as u64)) + // Standard Error: 1_285_000 + .saturating_add(Weight::from_ref_time(33_768_000 as u64).saturating_mul(c as u64)) .saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(c as u64))) .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(r as u64))) .saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(c as u64))) diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs index 79445836408..57a2d8a94f0 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_multisig` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/westmint/src/weights +// --output=./parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_multisig`. @@ -48,7 +48,7 @@ pub struct WeightInfo(PhantomData); impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `z` is `[0, 10000]`. fn as_multi_threshold_1(z: u32, ) -> Weight { - Weight::from_ref_time(17_854_000 as u64) + Weight::from_ref_time(21_180_000 as u64) // Standard Error: 0 .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) } @@ -57,9 +57,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(36_613_000 as u64) + Weight::from_ref_time(40_188_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(96_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(97_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) @@ -71,9 +71,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(40_039_000 as u64) + Weight::from_ref_time(42_835_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(72_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(93_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) @@ -83,9 +83,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(26_059_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(82_000 as u64).saturating_mul(s as u64)) + Weight::from_ref_time(29_996_000 as u64) + // Standard Error: 0 + .saturating_add(Weight::from_ref_time(101_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 .saturating_add(Weight::from_ref_time(1_000 as u64).saturating_mul(z as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) @@ -96,9 +96,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(38_292_000 as u64) + Weight::from_ref_time(43_306_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(90_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(104_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) @@ -110,9 +110,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(47_468_000 as u64) + Weight::from_ref_time(54_041_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(129_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(124_000 as u64).saturating_mul(s as u64)) // Standard Error: 0 .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) @@ -122,9 +122,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - Weight::from_ref_time(33_492_000 as u64) + Weight::from_ref_time(35_967_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(110_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(129_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -132,9 +132,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Storage: Multisig Calls (r:1 w:0) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - Weight::from_ref_time(22_147_000 as u64) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(113_000 as u64).saturating_mul(s as u64)) + Weight::from_ref_time(26_289_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(127_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -143,9 +143,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn approve_as_multi_complete(s: u32, ) -> Weight { - Weight::from_ref_time(66_106_000 as u64) + Weight::from_ref_time(64_336_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(161_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(151_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -153,9 +153,9 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - Weight::from_ref_time(52_566_000 as u64) + Weight::from_ref_time(53_361_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(117_000 as u64).saturating_mul(s as u64)) + .saturating_add(Weight::from_ref_time(128_000 as u64).saturating_mul(s as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs index 92c3bd17d87..3364eb69212 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_proxy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/westmint/src/weights +// --output=./parachains/runtimes/assets/westmint/src/weights/pallet_proxy.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_proxy`. @@ -49,9 +49,9 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:0) /// The range of component `p` is `[1, 31]`. fn proxy(p: u32, ) -> Weight { - Weight::from_ref_time(18_084_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(83_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(23_821_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(39_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) } // Storage: Proxy Proxies (r:1 w:0) @@ -60,11 +60,11 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(35_619_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(172_000 as u64).saturating_mul(a as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(89_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(42_022_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(126_000 as u64).saturating_mul(a as u64)) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(64_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -73,11 +73,11 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn remove_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(24_774_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(190_000 as u64).saturating_mul(a as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(33_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(29_106_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(137_000 as u64).saturating_mul(a as u64)) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(18_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -86,11 +86,11 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn reject_announcement(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(25_855_000 as u64) + Weight::from_ref_time(29_072_000 as u64) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(160_000 as u64).saturating_mul(a as u64)) + .saturating_add(Weight::from_ref_time(134_000 as u64).saturating_mul(a as u64)) // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(15_000 as u64).saturating_mul(p as u64)) + .saturating_add(Weight::from_ref_time(21_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -100,38 +100,38 @@ impl pallet_proxy::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 31]`. /// The range of component `p` is `[1, 31]`. fn announce(a: u32, p: u32, ) -> Weight { - Weight::from_ref_time(32_874_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(172_000 as u64).saturating_mul(a as u64)) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(97_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(37_840_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(134_000 as u64).saturating_mul(a as u64)) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(71_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn add_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(28_312_000 as u64) - // Standard Error: 4_000 - .saturating_add(Weight::from_ref_time(105_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(31_828_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(78_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxy(p: u32, ) -> Weight { - Weight::from_ref_time(28_197_000 as u64) - // Standard Error: 4_000 - .saturating_add(Weight::from_ref_time(121_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(32_104_000 as u64) + // Standard Error: 2_000 + .saturating_add(Weight::from_ref_time(75_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn remove_proxies(p: u32, ) -> Weight { - Weight::from_ref_time(23_659_000 as u64) - // Standard Error: 8_000 - .saturating_add(Weight::from_ref_time(106_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(27_439_000 as u64) + // Standard Error: 2_000 + .saturating_add(Weight::from_ref_time(49_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -139,18 +139,18 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[1, 31]`. fn create_pure(p: u32, ) -> Weight { - Weight::from_ref_time(31_575_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(35_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(34_203_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(19_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Proxy Proxies (r:1 w:1) /// The range of component `p` is `[0, 30]`. fn kill_pure(p: u32, ) -> Weight { - Weight::from_ref_time(24_640_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(80_000 as u64).saturating_mul(p as u64)) + Weight::from_ref_time(28_598_000 as u64) + // Standard Error: 1_000 + .saturating_add(Weight::from_ref_time(51_000 as u64).saturating_mul(p as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs index 020535b5a36..7248e49b630 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_session.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_session` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/westmint/src/weights +// --output=./parachains/runtimes/assets/westmint/src/weights/pallet_session.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_session`. @@ -49,14 +49,14 @@ impl pallet_session::WeightInfo for WeightInfo { // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:1 w:1) fn set_keys() -> Weight { - Weight::from_ref_time(16_457_000 as u64) + Weight::from_ref_time(23_885_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Session NextKeys (r:1 w:1) // Storage: Session KeyOwner (r:0 w:1) fn purge_keys() -> Weight { - Weight::from_ref_time(13_585_000 as u64) + Weight::from_ref_time(20_516_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs index 749d60095de..c2b261279e2 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_timestamp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/westmint/src/weights +// --output=./parachains/runtimes/assets/westmint/src/weights/pallet_timestamp.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_timestamp`. @@ -48,11 +48,11 @@ pub struct WeightInfo(PhantomData); impl pallet_timestamp::WeightInfo for WeightInfo { // Storage: Timestamp Now (r:1 w:1) fn set() -> Weight { - Weight::from_ref_time(6_762_000 as u64) + Weight::from_ref_time(8_507_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } fn on_finalize() -> Weight { - Weight::from_ref_time(2_387_000 as u64) + Weight::from_ref_time(4_495_000 as u64) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs index ebc8c3e49c9..80fa090e9e5 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_uniques.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_uniques` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 @@ -25,12 +25,9 @@ // ./artifacts/polkadot-parachain // benchmark // pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* +// --chain=westmint-dev // --execution=wasm // --wasm-execution=compiled -// --heap-pages=4096 // --pallet=pallet_uniques // --extrinsic=* // --steps=50 @@ -43,25 +40,23 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_uniques`. pub struct WeightInfo(PhantomData); impl pallet_uniques::WeightInfo for WeightInfo { - // Storage: Uniques NextCollectionId (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn create() -> Weight { - Weight::from_ref_time(27_462_000 as u64) + Weight::from_ref_time(32_549_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } - // Storage: Uniques NextCollectionId (r:1 w:1) // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_create() -> Weight { - Weight::from_ref_time(16_480_000 as u64) + Weight::from_ref_time(21_109_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -78,12 +73,12 @@ impl pallet_uniques::WeightInfo for WeightInfo { /// The range of component `a` is `[0, 1000]`. fn destroy(n: u32, m: u32, a: u32, ) -> Weight { Weight::from_ref_time(0 as u64) - // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(10_956_000 as u64).saturating_mul(n as u64)) - // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(1_654_000 as u64).saturating_mul(m as u64)) - // Standard Error: 18_000 - .saturating_add(Weight::from_ref_time(1_572_000 as u64).saturating_mul(a as u64)) + // Standard Error: 13_000 + .saturating_add(Weight::from_ref_time(10_002_000 as u64).saturating_mul(n as u64)) + // Standard Error: 13_000 + .saturating_add(Weight::from_ref_time(1_796_000 as u64).saturating_mul(m as u64)) + // Standard Error: 13_000 + .saturating_add(Weight::from_ref_time(1_646_000 as u64).saturating_mul(a as u64)) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(n as u64))) .saturating_add(T::DbWeight::get().writes(4 as u64)) @@ -96,7 +91,7 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques CollectionMaxSupply (r:1 w:0) // Storage: Uniques Account (r:0 w:1) fn mint() -> Weight { - Weight::from_ref_time(36_074_000 as u64) + Weight::from_ref_time(41_837_000 as u64) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -105,7 +100,7 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Account (r:0 w:1) // Storage: Uniques ItemPriceOf (r:0 w:1) fn burn() -> Weight { - Weight::from_ref_time(37_583_000 as u64) + Weight::from_ref_time(45_164_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } @@ -114,17 +109,17 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Account (r:0 w:2) // Storage: Uniques ItemPriceOf (r:0 w:1) fn transfer() -> Weight { - Weight::from_ref_time(28_134_000 as u64) + Weight::from_ref_time(34_171_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Uniques Class (r:1 w:1) - // Storage: Uniques Asset (r:100 w:100) + // Storage: Uniques Asset (r:102 w:102) /// The range of component `i` is `[0, 5000]`. fn redeposit(i: u32, ) -> Weight { Weight::from_ref_time(0 as u64) - // Standard Error: 16_000 - .saturating_add(Weight::from_ref_time(12_715_000 as u64).saturating_mul(i as u64)) + // Standard Error: 12_000 + .saturating_add(Weight::from_ref_time(11_658_000 as u64).saturating_mul(i as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(i as u64))) .saturating_add(T::DbWeight::get().writes(1 as u64)) @@ -133,26 +128,26 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn freeze() -> Weight { - Weight::from_ref_time(21_019_000 as u64) + Weight::from_ref_time(27_439_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Asset (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn thaw() -> Weight { - Weight::from_ref_time(21_907_000 as u64) + Weight::from_ref_time(27_669_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) fn freeze_collection() -> Weight { - Weight::from_ref_time(16_894_000 as u64) + Weight::from_ref_time(22_032_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) fn thaw_collection() -> Weight { - Weight::from_ref_time(16_650_000 as u64) + Weight::from_ref_time(21_651_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -160,20 +155,20 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:2) fn transfer_ownership() -> Weight { - Weight::from_ref_time(25_095_000 as u64) + Weight::from_ref_time(30_906_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } // Storage: Uniques Class (r:1 w:1) fn set_team() -> Weight { - Weight::from_ref_time(17_428_000 as u64) + Weight::from_ref_time(23_165_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassAccount (r:0 w:1) fn force_item_status() -> Weight { - Weight::from_ref_time(20_018_000 as u64) + Weight::from_ref_time(25_865_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -181,7 +176,7 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn set_attribute() -> Weight { - Weight::from_ref_time(41_955_000 as u64) + Weight::from_ref_time(50_049_000 as u64) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -189,69 +184,69 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques InstanceMetadataOf (r:1 w:0) // Storage: Uniques Attribute (r:1 w:1) fn clear_attribute() -> Weight { - Weight::from_ref_time(40_201_000 as u64) + Weight::from_ref_time(47_729_000 as u64) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn set_metadata() -> Weight { - Weight::from_ref_time(33_630_000 as u64) + Weight::from_ref_time(39_470_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques InstanceMetadataOf (r:1 w:1) fn clear_metadata() -> Weight { - Weight::from_ref_time(34_054_000 as u64) + Weight::from_ref_time(42_195_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:1) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn set_collection_metadata() -> Weight { - Weight::from_ref_time(33_283_000 as u64) + Weight::from_ref_time(38_154_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques ClassMetadataOf (r:1 w:1) fn clear_collection_metadata() -> Weight { - Weight::from_ref_time(31_298_000 as u64) + Weight::from_ref_time(38_619_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn approve_transfer() -> Weight { - Weight::from_ref_time(22_430_000 as u64) + Weight::from_ref_time(28_507_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Asset (r:1 w:1) fn cancel_approval() -> Weight { - Weight::from_ref_time(23_005_000 as u64) + Weight::from_ref_time(28_219_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques OwnershipAcceptance (r:1 w:1) fn set_accept_ownership() -> Weight { - Weight::from_ref_time(20_468_000 as u64) + Weight::from_ref_time(25_565_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques CollectionMaxSupply (r:1 w:1) // Storage: Uniques Class (r:1 w:0) fn set_collection_max_supply() -> Weight { - Weight::from_ref_time(19_948_000 as u64) + Weight::from_ref_time(25_118_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Uniques Asset (r:1 w:0) // Storage: Uniques ItemPriceOf (r:0 w:1) fn set_price() -> Weight { - Weight::from_ref_time(19_487_000 as u64) + Weight::from_ref_time(25_956_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -260,7 +255,7 @@ impl pallet_uniques::WeightInfo for WeightInfo { // Storage: Uniques Class (r:1 w:0) // Storage: Uniques Account (r:0 w:2) fn buy_item() -> Weight { - Weight::from_ref_time(39_973_000 as u64) + Weight::from_ref_time(46_447_000 as u64) .saturating_add(T::DbWeight::get().reads(3 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs index dc441f1e89a..1ec7329b080 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for `pallet_utility` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 @@ -34,13 +34,13 @@ // --repeat=20 // --json // --header=./file_header.txt -// --output=./parachains/runtimes/assets/westmint/src/weights +// --output=./parachains/runtimes/assets/westmint/src/weights/pallet_utility.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] -use frame_support::{traits::Get, weights::Weight}; +use frame_support::{traits::Get, weights::{Weight}}; use sp_std::marker::PhantomData; /// Weight functions for `pallet_utility`. @@ -48,26 +48,26 @@ pub struct WeightInfo(PhantomData); impl pallet_utility::WeightInfo for WeightInfo { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - Weight::from_ref_time(14_433_000 as u64) + Weight::from_ref_time(22_368_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_315_000 as u64).saturating_mul(c as u64)) + .saturating_add(Weight::from_ref_time(3_915_000 as u64).saturating_mul(c as u64)) } fn as_derivative() -> Weight { - Weight::from_ref_time(5_234_000 as u64) + Weight::from_ref_time(6_839_000 as u64) } /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - Weight::from_ref_time(16_023_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_466_000 as u64).saturating_mul(c as u64)) + Weight::from_ref_time(22_179_000 as u64) + // Standard Error: 16_000 + .saturating_add(Weight::from_ref_time(4_137_000 as u64).saturating_mul(c as u64)) } fn dispatch_as() -> Weight { - Weight::from_ref_time(12_588_000 as u64) + Weight::from_ref_time(15_391_000 as u64) } /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - Weight::from_ref_time(16_094_000 as u64) + Weight::from_ref_time(24_999_000 as u64) // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(3_280_000 as u64).saturating_mul(c as u64)) + .saturating_add(Weight::from_ref_time(3_898_000 as u64).saturating_mul(c as u64)) } } diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs new file mode 100644 index 00000000000..8ba86157a1a --- /dev/null +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs @@ -0,0 +1,63 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus 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 Cumulus. If not, see . + + +//! Autogenerated weights for `cumulus_pallet_xcmp_queue` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 + +// Executed Command: +// ./artifacts/polkadot-parachain +// benchmark +// pallet +// --template=./templates/xcm-bench-template.hbs +// --chain=westmint-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet=cumulus_pallet_xcmp_queue +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json +// --header=./file_header.txt +// --output=./parachains/runtimes/assets/westmint/src/weights/xcm/cumulus_pallet_xcmp_queue.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weights for `cumulus_pallet_xcmp_queue`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + // Storage: XcmpQueue QueueConfig (r:1 w:1) + pub(crate) fn set_config_with_u32() -> Weight { + Weight::from_ref_time(7_499_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } + // Storage: XcmpQueue QueueConfig (r:1 w:1) + pub(crate) fn set_config_with_weight() -> Weight { + Weight::from_ref_time(7_493_000 as u64) + .saturating_add(T::DbWeight::get().reads(1 as u64)) + .saturating_add(T::DbWeight::get().writes(1 as u64)) + } +} diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs index e5c63a23e4d..08675f10ddd 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -18,24 +18,24 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::fungible` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-17, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: -// /home/benchbot/cargo_target_dir/production/polkadot-parachain +// ./artifacts/polkadot-parachain // benchmark // pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* +// --template=./templates/xcm-bench-template.hbs +// --chain=westmint-dev // --execution=wasm // --wasm-execution=compiled -// --heap-pages=4096 // --pallet=pallet_xcm_benchmarks::fungible -// --chain=westmint-dev -// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json // --header=./file_header.txt -// --template=./templates/xcm-bench-template.hbs // --output=./parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs #![cfg_attr(rustfmt, rustfmt_skip)] @@ -50,13 +50,13 @@ pub struct WeightInfo(PhantomData); impl WeightInfo { // Storage: System Account (r:1 w:1) pub(crate) fn withdraw_asset() -> Weight { - Weight::from_ref_time(28_725_000 as u64) + Weight::from_ref_time(34_470_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: System Account (r:2 w:2) pub(crate) fn transfer_asset() -> Weight { - Weight::from_ref_time(33_865_000 as u64) + Weight::from_ref_time(39_616_000 as u64) .saturating_add(T::DbWeight::get().reads(2 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } @@ -68,16 +68,16 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn transfer_reserve_asset() -> Weight { - Weight::from_ref_time(48_839_000 as u64) + Weight::from_ref_time(55_124_000 as u64) .saturating_add(T::DbWeight::get().reads(8 as u64)) .saturating_add(T::DbWeight::get().writes(4 as u64)) } pub(crate) fn receive_teleported_asset() -> Weight { - Weight::from_ref_time(4_849_000 as u64) + Weight::from_ref_time(6_618_000 as u64) } // Storage: System Account (r:1 w:1) pub(crate) fn deposit_asset() -> Weight { - Weight::from_ref_time(29_778_000 as u64) + Weight::from_ref_time(34_636_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } @@ -89,7 +89,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn deposit_reserve_asset() -> Weight { - Weight::from_ref_time(45_355_000 as u64) + Weight::from_ref_time(50_739_000 as u64) .saturating_add(T::DbWeight::get().reads(7 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } @@ -100,7 +100,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_teleport() -> Weight { - Weight::from_ref_time(23_451_000 as u64) + Weight::from_ref_time(27_420_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 80aff062d20..4b07a7da815 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -18,24 +18,24 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::generic` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-17, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm6`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: -// /home/benchbot/cargo_target_dir/production/polkadot-parachain +// ./artifacts/polkadot-parachain // benchmark // pallet -// --steps=50 -// --repeat=20 -// --extrinsic=* +// --template=./templates/xcm-bench-template.hbs +// --chain=westmint-dev // --execution=wasm // --wasm-execution=compiled -// --heap-pages=4096 // --pallet=pallet_xcm_benchmarks::generic -// --chain=westmint-dev -// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json +// --extrinsic=* +// --steps=50 +// --repeat=20 +// --json // --header=./file_header.txt -// --template=./templates/xcm-bench-template.hbs // --output=./parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs #![cfg_attr(rustfmt, rustfmt_skip)] @@ -55,38 +55,38 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn query_holding() -> Weight { - Weight::from_ref_time(676_316_000 as u64) + Weight::from_ref_time(692_482_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } pub(crate) fn buy_execution() -> Weight { - Weight::from_ref_time(7_030_000 as u64) + Weight::from_ref_time(9_444_000 as u64) } // Storage: PolkadotXcm Queries (r:1 w:0) pub(crate) fn query_response() -> Weight { - Weight::from_ref_time(12_574_000 as u64) + Weight::from_ref_time(17_708_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) } pub(crate) fn transact() -> Weight { - Weight::from_ref_time(15_764_000 as u64) + Weight::from_ref_time(20_476_000 as u64) } pub(crate) fn refund_surplus() -> Weight { - Weight::from_ref_time(7_200_000 as u64) + Weight::from_ref_time(9_802_000 as u64) } pub(crate) fn set_error_handler() -> Weight { - Weight::from_ref_time(3_310_000 as u64) + Weight::from_ref_time(5_466_000 as u64) } pub(crate) fn set_appendix() -> Weight { - Weight::from_ref_time(3_260_000 as u64) + Weight::from_ref_time(5_608_000 as u64) } pub(crate) fn clear_error() -> Weight { - Weight::from_ref_time(3_277_000 as u64) + Weight::from_ref_time(5_462_000 as u64) } pub(crate) fn descend_origin() -> Weight { - Weight::from_ref_time(3_913_000 as u64) + Weight::from_ref_time(6_248_000 as u64) } pub(crate) fn clear_origin() -> Weight { - Weight::from_ref_time(3_354_000 as u64) + Weight::from_ref_time(5_521_000 as u64) } // Storage: PolkadotXcm SupportedVersion (r:1 w:0) // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) @@ -94,18 +94,18 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn report_error() -> Weight { - Weight::from_ref_time(13_028_000 as u64) + Weight::from_ref_time(15_966_000 as u64) .saturating_add(T::DbWeight::get().reads(5 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: PolkadotXcm AssetTraps (r:1 w:1) pub(crate) fn claim_asset() -> Weight { - Weight::from_ref_time(7_739_000 as u64) + Weight::from_ref_time(11_936_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } pub(crate) fn trap() -> Weight { - Weight::from_ref_time(3_351_000 as u64) + Weight::from_ref_time(5_627_000 as u64) } // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -114,13 +114,13 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn subscribe_version() -> Weight { - Weight::from_ref_time(16_051_000 as u64) + Weight::from_ref_time(19_169_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) pub(crate) fn unsubscribe_version() -> Weight { - Weight::from_ref_time(5_477_000 as u64) + Weight::from_ref_time(8_660_000 as u64) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: ParachainInfo ParachainId (r:1 w:0) @@ -130,7 +130,7 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_reserve_withdraw() -> Weight { - Weight::from_ref_time(874_435_000 as u64) + Weight::from_ref_time(967_302_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } From 9f09698a07ec6ace3351138292153aef23e13bd6 Mon Sep 17 00:00:00 2001 From: Branislav Kontur Date: Thu, 29 Sep 2022 13:44:08 +0200 Subject: [PATCH 099/148] Removed unused deps with `cargo machete` (#1680) * Removed unused deps with `cargo machete` * Removed unused deps with `cargo machete` for parachain-template --- Cargo.lock | 82 ------------------- client/collator/Cargo.toml | 1 - client/consensus/common/Cargo.toml | 1 - client/consensus/relay-chain/Cargo.toml | 1 - client/network/Cargo.toml | 2 - client/pov-recovery/Cargo.toml | 1 - .../Cargo.toml | 4 - client/relay-chain-interface/Cargo.toml | 4 - client/relay-chain-rpc-interface/Cargo.toml | 2 - client/service/Cargo.toml | 5 -- pallets/aura-ext/Cargo.toml | 4 - pallets/collator-selection/Cargo.toml | 1 - pallets/dmp-queue/Cargo.toml | 4 - pallets/parachain-system/Cargo.toml | 6 -- pallets/solo-to-para/Cargo.toml | 4 +- pallets/xcm/Cargo.toml | 2 - parachain-template/node/Cargo.toml | 8 -- .../pallets/template/Cargo.toml | 2 +- parachain-template/runtime/Cargo.toml | 4 - parachains/common/Cargo.toml | 8 -- parachains/pallets/parachain-info/Cargo.toml | 2 - parachains/pallets/ping/Cargo.toml | 2 - .../runtimes/assets/statemine/Cargo.toml | 6 -- .../runtimes/assets/statemint/Cargo.toml | 6 -- .../runtimes/assets/westmint/Cargo.toml | 6 -- .../collectives-polkadot/Cargo.toml | 7 -- .../contracts/contracts-rococo/Cargo.toml | 4 - .../runtimes/starters/seedling/Cargo.toml | 6 -- parachains/runtimes/starters/shell/Cargo.toml | 10 --- parachains/runtimes/testing/penpal/Cargo.toml | 4 - .../testing/rococo-parachain/Cargo.toml | 6 -- polkadot-parachain/Cargo.toml | 2 - primitives/core/Cargo.toml | 2 - primitives/utility/Cargo.toml | 8 -- test/runtime/Cargo.toml | 2 - test/service/Cargo.toml | 1 - 36 files changed, 2 insertions(+), 218 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 50b050861b1..39d290769ea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1075,7 +1075,6 @@ dependencies = [ "pallet-multisig", "pallet-proxy", "pallet-session", - "pallet-sudo", "pallet-timestamp", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", @@ -1089,14 +1088,12 @@ dependencies = [ "polkadot-runtime-common", "polkadot-runtime-constants", "scale-info", - "serde", "smallvec", "sp-api", "sp-block-builder", "sp-consensus-aura", "sp-core", "sp-inherents", - "sp-io", "sp-offchain", "sp-runtime", "sp-session", @@ -1187,14 +1184,12 @@ dependencies = [ "polkadot-parachain 0.9.29", "polkadot-runtime-common", "scale-info", - "serde", "smallvec", "sp-api", "sp-block-builder", "sp-consensus-aura", "sp-core", "sp-inherents", - "sp-io", "sp-offchain", "sp-runtime", "sp-session", @@ -1555,7 +1550,6 @@ dependencies = [ "cumulus-client-consensus-common", "cumulus-client-network", "cumulus-primitives-core", - "cumulus-relay-chain-interface", "cumulus-test-client", "cumulus-test-runtime", "futures", @@ -1619,7 +1613,6 @@ dependencies = [ "polkadot-primitives", "sc-client-api", "sc-consensus", - "sp-api", "sp-blockchain", "sp-consensus", "sp-runtime", @@ -1638,7 +1631,6 @@ dependencies = [ "cumulus-relay-chain-interface", "futures", "parking_lot 0.12.1", - "sc-client-api", "sc-consensus", "sp-api", "sp-block-builder", @@ -1660,7 +1652,6 @@ dependencies = [ "cumulus-relay-chain-inprocess-interface", "cumulus-relay-chain-interface", "cumulus-test-service", - "derive_more", "futures", "futures-timer", "parity-scale-codec", @@ -1674,7 +1665,6 @@ dependencies = [ "portpicker", "sc-cli", "sc-client-api", - "sp-api", "sp-blockchain", "sp-consensus", "sp-core", @@ -1706,7 +1696,6 @@ dependencies = [ "sc-cli", "sc-client-api", "sc-consensus", - "sp-api", "sp-consensus", "sp-maybe-compressed-blob", "sp-runtime", @@ -1726,20 +1715,15 @@ dependencies = [ "cumulus-primitives-core", "cumulus-relay-chain-interface", "parking_lot 0.12.1", - "polkadot-overseer", "polkadot-primitives", "sc-client-api", "sc-consensus", - "sc-consensus-babe", "sc-service", - "sc-telemetry", - "sc-tracing", "sp-api", "sp-blockchain", "sp-consensus", "sp-core", "sp-runtime", - "tracing", ] [[package]] @@ -1747,13 +1731,11 @@ name = "cumulus-pallet-aura-ext" version = "0.1.0" dependencies = [ "cumulus-pallet-parachain-system", - "frame-executive", "frame-support", "frame-system", "pallet-aura", "parity-scale-codec", "scale-info", - "serde", "sp-application-crypto", "sp-consensus-aura", "sp-runtime", @@ -1767,7 +1749,6 @@ dependencies = [ "cumulus-primitives-core", "frame-support", "frame-system", - "log", "parity-scale-codec", "scale-info", "sp-core", @@ -1776,7 +1757,6 @@ dependencies = [ "sp-std", "sp-version", "xcm", - "xcm-executor", ] [[package]] @@ -1796,12 +1776,10 @@ dependencies = [ "impl-trait-for-tuples", "lazy_static", "log", - "pallet-balances", "parity-scale-codec", "polkadot-parachain 0.9.29", "sc-client-api", "scale-info", - "serde", "sp-core", "sp-externalities", "sp-inherents", @@ -1813,7 +1791,6 @@ dependencies = [ "sp-tracing", "sp-trie", "sp-version", - "xcm", ] [[package]] @@ -1844,7 +1821,6 @@ name = "cumulus-pallet-solo-to-para" version = "0.1.0" dependencies = [ "cumulus-pallet-parachain-system", - "cumulus-primitives-core", "frame-support", "frame-system", "pallet-sudo", @@ -1864,7 +1840,6 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "serde", "sp-io", "sp-runtime", "sp-std", @@ -1904,7 +1879,6 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "serde", "sp-runtime", "sp-std", "xcm", @@ -1914,7 +1888,6 @@ dependencies = [ name = "cumulus-primitives-core" version = "0.1.0" dependencies = [ - "frame-support", "parity-scale-codec", "polkadot-core-primitives", "polkadot-parachain 0.9.29", @@ -1972,12 +1945,8 @@ dependencies = [ "frame-support", "log", "parity-scale-codec", - "polkadot-core-primitives", - "polkadot-parachain 0.9.29", - "polkadot-primitives", "sp-runtime", "sp-std", - "sp-trie", "xcm", "xcm-builder", "xcm-executor", @@ -1999,19 +1968,15 @@ dependencies = [ "polkadot-test-client", "sc-cli", "sc-client-api", - "sc-consensus-babe", - "sc-network", "sc-sysinfo", "sc-telemetry", "sc-tracing", "sp-api", - "sp-blockchain", "sp-consensus", "sp-core", "sp-keyring", "sp-runtime", "sp-state-machine", - "tracing", ] [[package]] @@ -2020,18 +1985,14 @@ version = "0.1.0" dependencies = [ "async-trait", "cumulus-primitives-core", - "derive_more", "futures", "jsonrpsee-core", "parity-scale-codec", - "parking_lot 0.12.1", "polkadot-overseer", "polkadot-service", "sc-client-api", "sp-api", "sp-blockchain", - "sp-core", - "sp-runtime", "sp-state-machine", "thiserror", ] @@ -2048,11 +2009,9 @@ dependencies = [ "futures-timer", "jsonrpsee", "parity-scale-codec", - "parking_lot 0.12.1", "polkadot-service", "sc-client-api", "sc-rpc-api", - "sp-api", "sp-core", "sp-runtime", "sp-state-machine", @@ -2130,7 +2089,6 @@ dependencies = [ "pallet-transaction-payment", "parity-scale-codec", "scale-info", - "serde", "sp-api", "sp-block-builder", "sp-core", @@ -2185,7 +2143,6 @@ dependencies = [ "sc-executor", "sc-network", "sc-network-common", - "sc-rpc", "sc-service", "sc-telemetry", "sc-tracing", @@ -5659,7 +5616,6 @@ dependencies = [ "parity-scale-codec", "rand 0.8.5", "scale-info", - "serde", "sp-consensus-aura", "sp-core", "sp-io", @@ -6468,7 +6424,6 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "serde", ] [[package]] @@ -6477,7 +6432,6 @@ version = "0.1.0" dependencies = [ "clap", "cumulus-client-cli", - "cumulus-client-collator", "cumulus-client-consensus-aura", "cumulus-client-consensus-common", "cumulus-client-network", @@ -6487,17 +6441,14 @@ dependencies = [ "cumulus-relay-chain-inprocess-interface", "cumulus-relay-chain-interface", "cumulus-relay-chain-rpc-interface", - "derive_more", "frame-benchmarking", "frame-benchmarking-cli", - "hex-literal", "jsonrpsee", "log", "pallet-transaction-payment-rpc", "parachain-template-runtime", "parity-scale-codec", "polkadot-cli", - "polkadot-parachain 0.9.29", "polkadot-primitives", "polkadot-service", "sc-basic-authorship", @@ -6506,11 +6457,9 @@ dependencies = [ "sc-client-api", "sc-consensus", "sc-executor", - "sc-keystore", "sc-network", "sc-network-common", "sc-rpc", - "sc-rpc-api", "sc-service", "sc-sysinfo", "sc-telemetry", @@ -6521,10 +6470,8 @@ dependencies = [ "sp-api", "sp-block-builder", "sp-blockchain", - "sp-consensus", "sp-consensus-aura", "sp-core", - "sp-inherents", "sp-keystore", "sp-offchain", "sp-runtime", @@ -6576,14 +6523,12 @@ dependencies = [ "polkadot-parachain 0.9.29", "polkadot-runtime-common", "scale-info", - "serde", "smallvec", "sp-api", "sp-block-builder", "sp-consensus-aura", "sp-core", "sp-inherents", - "sp-io", "sp-offchain", "sp-runtime", "sp-session", @@ -6601,7 +6546,6 @@ name = "parachains-common" version = "1.0.0" dependencies = [ "cumulus-primitives-utility", - "frame-executive", "frame-support", "frame-system", "pallet-asset-tx-payment", @@ -6611,7 +6555,6 @@ dependencies = [ "pallet-collator-selection", "parity-scale-codec", "polkadot-primitives", - "polkadot-runtime-common", "scale-info", "sp-consensus-aura", "sp-core", @@ -6620,7 +6563,6 @@ dependencies = [ "sp-std", "substrate-wasm-builder", "xcm", - "xcm-builder", "xcm-executor", ] @@ -6843,14 +6785,12 @@ dependencies = [ "polkadot-primitives", "polkadot-runtime-common", "scale-info", - "serde", "smallvec", "sp-api", "sp-block-builder", "sp-consensus-aura", "sp-core", "sp-inherents", - "sp-io", "sp-offchain", "sp-runtime", "sp-session", @@ -7774,7 +7714,6 @@ dependencies = [ "parity-scale-codec", "penpal-runtime", "polkadot-cli", - "polkadot-parachain 0.9.29", "polkadot-primitives", "polkadot-service", "rococo-parachain-runtime", @@ -7802,7 +7741,6 @@ dependencies = [ "sp-consensus", "sp-consensus-aura", "sp-core", - "sp-inherents", "sp-io", "sp-keystore", "sp-offchain", @@ -9044,7 +8982,6 @@ dependencies = [ "frame-support", "frame-system", "frame-system-rpc-runtime-api", - "log", "pallet-assets", "pallet-aura", "pallet-balances", @@ -9058,13 +8995,11 @@ dependencies = [ "parity-scale-codec", "polkadot-parachain 0.9.29", "scale-info", - "serde", "sp-api", "sp-block-builder", "sp-consensus-aura", "sp-core", "sp-inherents", - "sp-io", "sp-offchain", "sp-runtime", "sp-session", @@ -10529,19 +10464,16 @@ dependencies = [ "frame-executive", "frame-support", "frame-system", - "log", "pallet-balances", "pallet-sudo", "parachain-info", "parachains-common", "parity-scale-codec", "scale-info", - "serde", "sp-api", "sp-block-builder", "sp-core", "sp-inherents", - "sp-io", "sp-offchain", "sp-runtime", "sp-session", @@ -10720,26 +10652,21 @@ dependencies = [ name = "shell-runtime" version = "0.1.0" dependencies = [ - "cumulus-pallet-dmp-queue", "cumulus-pallet-parachain-system", "cumulus-pallet-xcm", "cumulus-primitives-core", - "cumulus-primitives-utility", "frame-executive", "frame-support", "frame-system", "frame-try-runtime", - "log", "parachain-info", "parachains-common", "parity-scale-codec", "scale-info", - "serde", "sp-api", "sp-block-builder", "sp-core", "sp-inherents", - "sp-io", "sp-offchain", "sp-runtime", "sp-session", @@ -11677,7 +11604,6 @@ dependencies = [ "cumulus-pallet-session-benchmarking", "cumulus-pallet-xcm", "cumulus-pallet-xcmp-queue", - "cumulus-ping", "cumulus-primitives-core", "cumulus-primitives-timestamp", "cumulus-primitives-utility", @@ -11714,14 +11640,12 @@ dependencies = [ "polkadot-parachain 0.9.29", "polkadot-runtime-common", "scale-info", - "serde", "smallvec", "sp-api", "sp-block-builder", "sp-consensus-aura", "sp-core", "sp-inherents", - "sp-io", "sp-offchain", "sp-runtime", "sp-session", @@ -11745,7 +11669,6 @@ dependencies = [ "cumulus-pallet-session-benchmarking", "cumulus-pallet-xcm", "cumulus-pallet-xcmp-queue", - "cumulus-ping", "cumulus-primitives-core", "cumulus-primitives-timestamp", "cumulus-primitives-utility", @@ -11782,14 +11705,12 @@ dependencies = [ "polkadot-runtime-common", "polkadot-runtime-constants", "scale-info", - "serde", "smallvec", "sp-api", "sp-block-builder", "sp-consensus-aura", "sp-core", "sp-inherents", - "sp-io", "sp-offchain", "sp-runtime", "sp-session", @@ -13252,7 +13173,6 @@ dependencies = [ "cumulus-pallet-session-benchmarking", "cumulus-pallet-xcm", "cumulus-pallet-xcmp-queue", - "cumulus-ping", "cumulus-primitives-core", "cumulus-primitives-timestamp", "cumulus-primitives-utility", @@ -13288,14 +13208,12 @@ dependencies = [ "polkadot-parachain 0.9.29", "polkadot-runtime-common", "scale-info", - "serde", "smallvec", "sp-api", "sp-block-builder", "sp-consensus-aura", "sp-core", "sp-inherents", - "sp-io", "sp-offchain", "sp-runtime", "sp-session", diff --git a/client/collator/Cargo.toml b/client/collator/Cargo.toml index 7041a4234f0..b8e05fd37c5 100644 --- a/client/collator/Cargo.toml +++ b/client/collator/Cargo.toml @@ -27,7 +27,6 @@ polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = cumulus-client-consensus-common = { path = "../consensus/common" } cumulus-client-network = { path = "../network" } cumulus-primitives-core = { path = "../../primitives/core" } -cumulus-relay-chain-interface = { path = "../relay-chain-interface" } [dev-dependencies] async-trait = "0.1.42" diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index 633d3630bc1..42fa2fb53b2 100644 --- a/client/consensus/common/Cargo.toml +++ b/client/consensus/common/Cargo.toml @@ -15,7 +15,6 @@ tracing = "0.1.36" # Substrate sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/client/consensus/relay-chain/Cargo.toml b/client/consensus/relay-chain/Cargo.toml index e86e9d99f5b..7f4b07db86c 100644 --- a/client/consensus/relay-chain/Cargo.toml +++ b/client/consensus/relay-chain/Cargo.toml @@ -12,7 +12,6 @@ parking_lot = "0.12.1" tracing = "0.1.36" # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index fe285470033..76b75fbd575 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -8,7 +8,6 @@ edition = "2021" [dependencies] async-trait = "0.1.57" codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ] } -derive_more = "0.99.2" futures = "0.3.24" futures-timer = "3.0.2" parking_lot = "0.12.1" @@ -16,7 +15,6 @@ tracing = "0.1.36" # Substrate sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/client/pov-recovery/Cargo.toml b/client/pov-recovery/Cargo.toml index fd70e341f20..5bc5adc87da 100644 --- a/client/pov-recovery/Cargo.toml +++ b/client/pov-recovery/Cargo.toml @@ -15,7 +15,6 @@ tracing = "0.1.36" # Substrate sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/client/relay-chain-inprocess-interface/Cargo.toml b/client/relay-chain-inprocess-interface/Cargo.toml index 05d237ad9c3..e2c38c87de7 100644 --- a/client/relay-chain-inprocess-interface/Cargo.toml +++ b/client/relay-chain-inprocess-interface/Cargo.toml @@ -8,18 +8,14 @@ edition = "2021" async-trait = "0.1.57" futures = "0.3.24" futures-timer = "3.0.2" -tracing = "0.1.36" # Substrate sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/client/relay-chain-interface/Cargo.toml b/client/relay-chain-interface/Cargo.toml index c84a4265d0c..8dd6771f20a 100644 --- a/client/relay-chain-interface/Cargo.toml +++ b/client/relay-chain-interface/Cargo.toml @@ -10,16 +10,12 @@ polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "m cumulus-primitives-core = { path = "../../primitives/core" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } futures = "0.3.24" -parking_lot = "0.12.1" -derive_more = "0.99.2" async-trait = "0.1.57" thiserror = "1.0.35" jsonrpsee-core = "0.15.1" diff --git a/client/relay-chain-rpc-interface/Cargo.toml b/client/relay-chain-rpc-interface/Cargo.toml index 188f709baeb..fe2f9570100 100644 --- a/client/relay-chain-rpc-interface/Cargo.toml +++ b/client/relay-chain-rpc-interface/Cargo.toml @@ -12,7 +12,6 @@ cumulus-primitives-core = { path = "../../primitives/core" } cumulus-relay-chain-interface = { path = "../relay-chain-interface" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } @@ -23,7 +22,6 @@ tokio = { version = "1.21.1", features = ["sync"] } futures = "0.3.24" futures-timer = "3.0.2" parity-scale-codec = "3.2.1" -parking_lot = "0.12.1" jsonrpsee = { version = "0.15.1", features = ["ws-client"] } tracing = "0.1.36" async-trait = "0.1.57" diff --git a/client/service/Cargo.toml b/client/service/Cargo.toml index 63b1d25a9fc..e705364a1c8 100644 --- a/client/service/Cargo.toml +++ b/client/service/Cargo.toml @@ -6,15 +6,11 @@ edition = "2021" [dependencies] parking_lot = "0.12.1" -tracing = "0.1.36" # Substrate sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-service = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } @@ -22,7 +18,6 @@ sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } # Polkadot -polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "master" } polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } # Cumulus diff --git a/pallets/aura-ext/Cargo.toml b/pallets/aura-ext/Cargo.toml index 27ff05cac96..7801039cbf3 100644 --- a/pallets/aura-ext/Cargo.toml +++ b/pallets/aura-ext/Cargo.toml @@ -8,10 +8,8 @@ description = "AURA consensus extension pallet for parachains" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.145", optional = true, features = ["derive"] } # Substrate -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -30,8 +28,6 @@ default = [ "std" ] std = [ "codec/std", "scale-info/std", - "serde", - "frame-executive/std", "frame-support/std", "frame-system/std", "pallet-aura/std", diff --git a/pallets/collator-selection/Cargo.toml b/pallets/collator-selection/Cargo.toml index 51def6371fb..557d894fb12 100644 --- a/pallets/collator-selection/Cargo.toml +++ b/pallets/collator-selection/Cargo.toml @@ -17,7 +17,6 @@ log = { version = "0.4.17", default-features = false } codec = { default-features = false, features = ["derive"], package = "parity-scale-codec", version = "3.0.0" } rand = { version = "0.8.5", features = ["std_rng"], default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.145", default-features = false } sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/pallets/dmp-queue/Cargo.toml b/pallets/dmp-queue/Cargo.toml index b4f1be08ba0..5f423e84fc3 100644 --- a/pallets/dmp-queue/Cargo.toml +++ b/pallets/dmp-queue/Cargo.toml @@ -6,7 +6,6 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ], default-features = false } -log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate @@ -18,7 +17,6 @@ sp-std = { git = "https://github.com/paritytech/substrate", default-features = f # Polkadot xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core", default-features = false } @@ -34,11 +32,9 @@ std = [ "scale-info/std", "frame-support/std", "frame-system/std", - "log/std", "sp-io/std", "sp-runtime/std", "sp-std/std", - "xcm-executor/std", "xcm/std", "cumulus-primitives-core/std", ] diff --git a/pallets/parachain-system/Cargo.toml b/pallets/parachain-system/Cargo.toml index 7a98abb41bf..8b203135610 100644 --- a/pallets/parachain-system/Cargo.toml +++ b/pallets/parachain-system/Cargo.toml @@ -12,12 +12,10 @@ environmental = { version = "1.1.2", default-features = false } impl-trait-for-tuples = "0.2.1" log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.145", optional = true, features = ["derive"] } # Substrate frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-externalities = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -30,7 +28,6 @@ sp-version = { git = "https://github.com/paritytech/substrate", default-features # Polkadot polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, features = [ "wasm-api" ], branch = "master" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } # Cumulus cumulus-pallet-parachain-system-proc-macro = { path = "proc-macro", default-features = false } @@ -58,13 +55,11 @@ std = [ "environmental/std", "log/std", "scale-info/std", - "serde", "cumulus-pallet-parachain-system-proc-macro/std", "cumulus-primitives-core/std", "cumulus-primitives-parachain-inherent/std", "frame-support/std", "frame-system/std", - "pallet-balances/std", "sp-core/std", "sp-externalities/std", "sp-io/std", @@ -72,7 +67,6 @@ std = [ "sp-state-machine/std", "sp-std/std", "sp-trie/std", - "xcm/std" ] runtime-benchmarks = [ diff --git a/pallets/solo-to-para/Cargo.toml b/pallets/solo-to-para/Cargo.toml index 298699ae158..090ea3660d1 100644 --- a/pallets/solo-to-para/Cargo.toml +++ b/pallets/solo-to-para/Cargo.toml @@ -7,7 +7,7 @@ description = "Adds functionality to migrate from a Solo to a Parachain" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -scale-info = { version = "2.0.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -21,7 +21,6 @@ polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default- # Cumulus cumulus-pallet-parachain-system = { default-features = false, path = "../parachain-system" } -cumulus-primitives-core = { path = "../../primitives/core", default-features = false } [features] default = [ "std" ] @@ -29,7 +28,6 @@ std = [ "codec/std", "scale-info/std", "cumulus-pallet-parachain-system/std", - "cumulus-primitives-core/std", "frame-support/std", "frame-system/std", "pallet-sudo/std", diff --git a/pallets/xcm/Cargo.toml b/pallets/xcm/Cargo.toml index 446196be446..c90a3fd8245 100644 --- a/pallets/xcm/Cargo.toml +++ b/pallets/xcm/Cargo.toml @@ -7,7 +7,6 @@ version = "0.1.0" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.145", optional = true, features = ["derive"] } sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -24,7 +23,6 @@ default = ["std"] std = [ "codec/std", "scale-info/std", - "serde", "cumulus-primitives-core/std", "sp-std/std", "sp-runtime/std", diff --git a/parachain-template/node/Cargo.toml b/parachain-template/node/Cargo.toml index ecb21306e39..a1b1408936e 100644 --- a/parachain-template/node/Cargo.toml +++ b/parachain-template/node/Cargo.toml @@ -11,11 +11,9 @@ build = "build.rs" [dependencies] clap = { version = "3.2.22", features = ["derive"] } -derive_more = "0.99.2" log = "0.4.17" codec = { package = "parity-scale-codec", version = "3.0.0" } serde = { version = "1.0.145", features = ["derive"] } -hex-literal = "0.3.4" jsonrpsee = { version = "0.15.1", features = ["server"] } # Local @@ -31,11 +29,9 @@ sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master", f sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-executor = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["wasmtime"] } -sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-service = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["wasmtime"] } sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "master" } @@ -45,10 +41,8 @@ sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", bra sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } @@ -61,14 +55,12 @@ try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "m # Polkadot polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "master" } polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "master" } xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } # Cumulus cumulus-client-cli = { path = "../../client/cli" } -cumulus-client-collator = { path = "../../client/collator" } cumulus-client-consensus-aura = { path = "../../client/consensus/aura" } cumulus-client-consensus-common = { path = "../../client/consensus/common" } cumulus-client-network = { path = "../../client/network" } diff --git a/parachain-template/pallets/template/Cargo.toml b/parachain-template/pallets/template/Cargo.toml index f0fdb60b18d..ca574f6c8d5 100644 --- a/parachain-template/pallets/template/Cargo.toml +++ b/parachain-template/pallets/template/Cargo.toml @@ -13,7 +13,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", features = ["derive"], default-features = false } -scale-info = { version = "2.0.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } diff --git a/parachain-template/runtime/Cargo.toml b/parachain-template/runtime/Cargo.toml index e37337dcc44..650f71b30d5 100644 --- a/parachain-template/runtime/Cargo.toml +++ b/parachain-template/runtime/Cargo.toml @@ -19,7 +19,6 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.145", optional = true, features = ["derive"] } smallvec = "1.9.0" # Local @@ -46,7 +45,6 @@ sp-block-builder = { git = "https://github.com/paritytech/substrate", default-fe sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -83,7 +81,6 @@ std = [ "codec/std", "log/std", "scale-info/std", - "serde", "cumulus-pallet-aura-ext/std", "cumulus-pallet-dmp-queue/std", "cumulus-pallet-parachain-system/std", @@ -115,7 +112,6 @@ std = [ "sp-consensus-aura/std", "sp-core/std", "sp-inherents/std", - "sp-io/std", "sp-offchain/std", "sp-runtime/std", "sp-session/std", diff --git a/parachains/common/Cargo.toml b/parachains/common/Cargo.toml index 46c5704d9b7..300f8683d87 100644 --- a/parachains/common/Cargo.toml +++ b/parachains/common/Cargo.toml @@ -13,7 +13,6 @@ codec = { package = "parity-scale-codec", version = "3.0.0", features = ["derive scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate -frame-executive = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } frame-support = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } frame-system = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -28,10 +27,8 @@ sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", d # Polkadot polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } # Cumulus pallet-collator-selection = { path = "../../pallets/collator-selection", default-features = false } @@ -47,9 +44,6 @@ substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", bran [features] default = ["std"] std = [ - "codec/std", - "scale-info/std", - "frame-executive/std", "frame-support/std", "frame-system/std", "pallet-asset-tx-payment/std", @@ -57,7 +51,6 @@ std = [ "pallet-authorship/std", "pallet-balances/std", "polkadot-primitives/std", - "polkadot-runtime-common/std", "sp-consensus-aura/std", "sp-io/std", "sp-std/std", @@ -65,5 +58,4 @@ std = [ "cumulus-primitives-utility/std", "xcm/std", "xcm-executor/std", - "xcm-builder/std" ] diff --git a/parachains/pallets/parachain-info/Cargo.toml b/parachains/pallets/parachain-info/Cargo.toml index 18e0fccca04..79e9a9ad017 100644 --- a/parachains/pallets/parachain-info/Cargo.toml +++ b/parachains/pallets/parachain-info/Cargo.toml @@ -7,7 +7,6 @@ version = "0.1.0" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.145", optional = true, features = ["derive"] } frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -19,7 +18,6 @@ default = ["std"] std = [ "codec/std", "scale-info/std", - "serde", "cumulus-primitives-core/std", "frame-support/std", "frame-system/std", diff --git a/parachains/pallets/ping/Cargo.toml b/parachains/pallets/ping/Cargo.toml index b504af86638..544a43ebceb 100644 --- a/parachains/pallets/ping/Cargo.toml +++ b/parachains/pallets/ping/Cargo.toml @@ -7,7 +7,6 @@ version = "0.1.0" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.145", optional = true, features = ["derive"] } sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -24,7 +23,6 @@ default = ["std"] std = [ "codec/std", "scale-info/std", - "serde", "cumulus-primitives-core/std", "sp-std/std", "sp-runtime/std", diff --git a/parachains/runtimes/assets/statemine/Cargo.toml b/parachains/runtimes/assets/statemine/Cargo.toml index 9c61dd3ab56..cddf0ee5145 100644 --- a/parachains/runtimes/assets/statemine/Cargo.toml +++ b/parachains/runtimes/assets/statemine/Cargo.toml @@ -10,7 +10,6 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.145", optional = true, features = ["derive"] } smallvec = "1.9.0" # Substrate @@ -39,7 +38,6 @@ sp-block-builder = { git = "https://github.com/paritytech/substrate", default-fe sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -64,7 +62,6 @@ cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system cumulus-pallet-session-benchmarking = {path = "../../../../pallets/session-benchmarking", default-features = false, version = "3.0.0"} cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } -cumulus-ping = { path = "../../../pallets/ping", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } cumulus-primitives-timestamp = { path = "../../../../primitives/timestamp", default-features = false } cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } @@ -133,7 +130,6 @@ std = [ "codec/std", "log/std", "scale-info/std", - "serde", "frame-executive/std", "frame-support/std", "frame-system-rpc-runtime-api/std", @@ -161,7 +157,6 @@ std = [ "sp-consensus-aura/std", "sp-core/std", "sp-inherents/std", - "sp-io/std", "sp-offchain/std", "sp-runtime/std", "sp-session/std", @@ -176,7 +171,6 @@ std = [ "cumulus-pallet-parachain-system/std", "cumulus-pallet-xcm/std", "cumulus-pallet-xcmp-queue/std", - "cumulus-ping/std", "cumulus-primitives-core/std", "cumulus-primitives-timestamp/std", "cumulus-primitives-utility/std", diff --git a/parachains/runtimes/assets/statemint/Cargo.toml b/parachains/runtimes/assets/statemint/Cargo.toml index ee865586161..2af1955a013 100644 --- a/parachains/runtimes/assets/statemint/Cargo.toml +++ b/parachains/runtimes/assets/statemint/Cargo.toml @@ -9,7 +9,6 @@ description = "Statemint parachain runtime" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } -serde = { version = "1.0.145", optional = true, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } smallvec = "1.9.0" @@ -39,7 +38,6 @@ sp-block-builder = { git = "https://github.com/paritytech/substrate", default-fe sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -64,7 +62,6 @@ cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false, version = "3.0.0" } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } -cumulus-ping = { path = "../../../pallets/ping", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } cumulus-primitives-timestamp = { path = "../../../../primitives/timestamp", default-features = false } cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } @@ -132,7 +129,6 @@ std = [ "codec/std", "log/std", "scale-info/std", - "serde", "frame-executive/std", "frame-support/std", "frame-system-rpc-runtime-api/std", @@ -160,7 +156,6 @@ std = [ "sp-consensus-aura/std", "sp-core/std", "sp-inherents/std", - "sp-io/std", "sp-offchain/std", "sp-runtime/std", "sp-session/std", @@ -175,7 +170,6 @@ std = [ "cumulus-pallet-parachain-system/std", "cumulus-pallet-xcm/std", "cumulus-pallet-xcmp-queue/std", - "cumulus-ping/std", "cumulus-primitives-core/std", "cumulus-primitives-timestamp/std", "cumulus-primitives-utility/std", diff --git a/parachains/runtimes/assets/westmint/Cargo.toml b/parachains/runtimes/assets/westmint/Cargo.toml index d1a900021bc..5003cf39eff 100644 --- a/parachains/runtimes/assets/westmint/Cargo.toml +++ b/parachains/runtimes/assets/westmint/Cargo.toml @@ -10,7 +10,6 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.145", optional = true, features = ["derive"] } smallvec = "1.9.0" # Substrate @@ -39,7 +38,6 @@ sp-block-builder = { git = "https://github.com/paritytech/substrate", default-fe sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -64,7 +62,6 @@ cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system cumulus-pallet-session-benchmarking = {path = "../../../../pallets/session-benchmarking", default-features = false, version = "3.0.0"} cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } -cumulus-ping = { path = "../../../pallets/ping", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } cumulus-primitives-timestamp = { path = "../../../../primitives/timestamp", default-features = false } cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } @@ -132,7 +129,6 @@ std = [ "codec/std", "log/std", "scale-info/std", - "serde", "frame-executive/std", "frame-support/std", "frame-system-rpc-runtime-api/std", @@ -159,7 +155,6 @@ std = [ "sp-consensus-aura/std", "sp-core/std", "sp-inherents/std", - "sp-io/std", "sp-offchain/std", "sp-runtime/std", "sp-session/std", @@ -175,7 +170,6 @@ std = [ "cumulus-pallet-parachain-system/std", "cumulus-pallet-xcm/std", "cumulus-pallet-xcmp-queue/std", - "cumulus-ping/std", "cumulus-primitives-core/std", "cumulus-primitives-timestamp/std", "cumulus-primitives-utility/std", diff --git a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml index 5b8f4fd4cee..7549366aee7 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml +++ b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml @@ -9,7 +9,6 @@ description = "Polkadot Collectives Parachain Runtime" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } -serde = { version = "1.0.145", optional = true, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } smallvec = "1.6.1" @@ -29,7 +28,6 @@ pallet-collective = { git = "https://github.com/paritytech/substrate", default-f pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -39,7 +37,6 @@ sp-block-builder = { git = "https://github.com/paritytech/substrate", default-fe sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -117,7 +114,6 @@ try-runtime = [ "pallet-multisig/try-runtime", "pallet-proxy/try-runtime", "pallet-session/try-runtime", - "pallet-sudo/try-runtime", "pallet-timestamp/try-runtime", "pallet-transaction-payment/try-runtime", "pallet-utility/try-runtime", @@ -128,7 +124,6 @@ std = [ "codec/std", "log/std", "scale-info/std", - "serde", "frame-executive/std", "frame-support/std", "frame-system-rpc-runtime-api/std", @@ -141,7 +136,6 @@ std = [ "pallet-multisig/std", "pallet-proxy/std", "pallet-session/std", - "pallet-sudo/std", "pallet-timestamp/std", "pallet-transaction-payment-rpc-runtime-api/std", "pallet-transaction-payment/std", @@ -156,7 +150,6 @@ std = [ "sp-consensus-aura/std", "sp-core/std", "sp-inherents/std", - "sp-io/std", "sp-offchain/std", "sp-runtime/std", "sp-session/std", diff --git a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml index 1e3d34576e2..bfd9bf2e9cf 100644 --- a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml +++ b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml @@ -15,7 +15,6 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.145", optional = true, features = ["derive"] } smallvec = "1.9.0" # Substrate @@ -24,7 +23,6 @@ sp-block-builder = { git = "https://github.com/paritytech/substrate", default-fe sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -85,7 +83,6 @@ std = [ "codec/std", "log/std", "scale-info/std", - "serde", "frame-executive/std", "frame-support/std", "frame-system-rpc-runtime-api/std", @@ -117,7 +114,6 @@ std = [ "sp-consensus-aura/std", "sp-core/std", "sp-inherents/std", - "sp-io/std", "sp-offchain/std", "sp-runtime/std", "sp-session/std", diff --git a/parachains/runtimes/starters/seedling/Cargo.toml b/parachains/runtimes/starters/seedling/Cargo.toml index b1dac372bf4..620a32f0e05 100644 --- a/parachains/runtimes/starters/seedling/Cargo.toml +++ b/parachains/runtimes/starters/seedling/Cargo.toml @@ -6,9 +6,7 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -log = { version = "0.4.14", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.145", optional = true, features = ["derive"] } # Substrate frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -20,7 +18,6 @@ sp-api = { git = "https://github.com/paritytech/substrate", default-features = f sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -42,9 +39,7 @@ substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", bran default = [ "std" ] std = [ "codec/std", - "log/std", "scale-info/std", - "serde", "frame-executive/std", "frame-support/std", "frame-system/std", @@ -54,7 +49,6 @@ std = [ "sp-block-builder/std", "sp-core/std", "sp-inherents/std", - "sp-io/std", "sp-offchain/std", "sp-runtime/std", "sp-session/std", diff --git a/parachains/runtimes/starters/shell/Cargo.toml b/parachains/runtimes/starters/shell/Cargo.toml index 2689533cddb..2588990a382 100644 --- a/parachains/runtimes/starters/shell/Cargo.toml +++ b/parachains/runtimes/starters/shell/Cargo.toml @@ -6,9 +6,7 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.145", optional = true, features = ["derive"] } # Substrate frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -19,7 +17,6 @@ sp-api = { git = "https://github.com/paritytech/substrate", default-features = f sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -33,11 +30,9 @@ xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } # Cumulus -cumulus-pallet-dmp-queue = { path = "../../../../pallets/dmp-queue", default-features = false } cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } -cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } @@ -48,9 +43,7 @@ substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", bran default = [ "std" ] std = [ "codec/std", - "log/std", "scale-info/std", - "serde", "frame-executive/std", "frame-support/std", "frame-system/std", @@ -58,7 +51,6 @@ std = [ "sp-block-builder/std", "sp-core/std", "sp-inherents/std", - "sp-io/std", "sp-offchain/std", "sp-runtime/std", "sp-session/std", @@ -68,11 +60,9 @@ std = [ "xcm-builder/std", "xcm-executor/std", "xcm/std", - "cumulus-pallet-dmp-queue/std", "cumulus-pallet-parachain-system/std", "cumulus-pallet-xcm/std", "cumulus-primitives-core/std", - "cumulus-primitives-utility/std", "parachain-info/std", "parachains-common/std", ] diff --git a/parachains/runtimes/testing/penpal/Cargo.toml b/parachains/runtimes/testing/penpal/Cargo.toml index 7450ce422a8..a082c69c999 100644 --- a/parachains/runtimes/testing/penpal/Cargo.toml +++ b/parachains/runtimes/testing/penpal/Cargo.toml @@ -19,7 +19,6 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.16", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.145", optional = true, features = ["derive"] } smallvec = "1.9.0" # Substrate @@ -45,7 +44,6 @@ sp-block-builder = { git = "https://github.com/paritytech/substrate", default-fe sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -84,7 +82,6 @@ std = [ "codec/std", "log/std", "scale-info/std", - "serde", "cumulus-pallet-aura-ext/std", "cumulus-pallet-dmp-queue/std", "cumulus-pallet-parachain-system/std", @@ -118,7 +115,6 @@ std = [ "sp-consensus-aura/std", "sp-core/std", "sp-inherents/std", - "sp-io/std", "sp-offchain/std", "sp-runtime/std", "sp-session/std", diff --git a/parachains/runtimes/testing/rococo-parachain/Cargo.toml b/parachains/runtimes/testing/rococo-parachain/Cargo.toml index 4a85771e334..d16847a8cd3 100644 --- a/parachains/runtimes/testing/rococo-parachain/Cargo.toml +++ b/parachains/runtimes/testing/rococo-parachain/Cargo.toml @@ -7,9 +7,7 @@ description = "Simple runtime used by the rococo parachain(s)" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } -log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.145", optional = true, features = ["derive"] } # Substrate frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -28,7 +26,6 @@ sp-block-builder = { git = "https://github.com/paritytech/substrate", default-fe sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -63,9 +60,7 @@ substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", bran default = [ "std" ] std = [ "codec/std", - "log/std", "scale-info/std", - "serde", "frame-executive/std", "frame-support/std", "frame-system-rpc-runtime-api/std", @@ -83,7 +78,6 @@ std = [ "sp-consensus-aura/std", "sp-core/std", "sp-inherents/std", - "sp-io/std", "sp-offchain/std", "sp-runtime/std", "sp-session/std", diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index f9fe0279367..895e324a002 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -34,7 +34,6 @@ frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", bran sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-io = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-session = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } @@ -69,7 +68,6 @@ pallet-contracts-rpc = { git = "https://github.com/paritytech/substrate", branch # Polkadot polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "master" } polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "master" } xcm = { git = "https://github.com/paritytech/polkadot", branch = "master" } diff --git a/primitives/core/Cargo.toml b/primitives/core/Cargo.toml index d9a220273d4..9a67cac16c5 100644 --- a/primitives/core/Cargo.toml +++ b/primitives/core/Cargo.toml @@ -8,7 +8,6 @@ edition = "2021" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "derive" ] } # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -23,7 +22,6 @@ polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default- default = [ "std" ] std = [ "codec/std", - "frame-support/std", "sp-api/std", "sp-runtime/std", "sp-std/std", diff --git a/primitives/utility/Cargo.toml b/primitives/utility/Cargo.toml index 668e612f2b2..6278025e1db 100644 --- a/primitives/utility/Cargo.toml +++ b/primitives/utility/Cargo.toml @@ -12,12 +12,8 @@ log = { version = "0.4.17", default-features = false } frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } # Polkadot -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } @@ -33,10 +29,6 @@ std = [ "frame-support/std", "sp-runtime/std", "sp-std/std", - "sp-trie/std", - "polkadot-core-primitives/std", - "polkadot-parachain/std", - "polkadot-primitives/std", "cumulus-primitives-core/std", "xcm/std", "xcm-builder/std", diff --git a/test/runtime/Cargo.toml b/test/runtime/Cargo.toml index d4cf4d2c75e..c0383a7235a 100644 --- a/test/runtime/Cargo.toml +++ b/test/runtime/Cargo.toml @@ -7,7 +7,6 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.145", optional = true, features = ["derive"] } # Substrate frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } @@ -43,7 +42,6 @@ default = [ "std" ] std = [ "codec/std", "scale-info/std", - "serde", "frame-executive/std", "frame-support/std", "frame-system-rpc-runtime-api/std", diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index 0b63961cae5..8d9c9c04fa7 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -31,7 +31,6 @@ sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "mast sc-executor = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["wasmtime"] } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-service = { git = "https://github.com/paritytech/substrate", branch = "master", features = [ "wasmtime" ] } sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" } From ab6114fa601f0f1103705b86397aad7b72b893f7 Mon Sep 17 00:00:00 2001 From: Wilfried Kopp Date: Thu, 29 Sep 2022 10:22:57 +0200 Subject: [PATCH 100/148] Bump crate versions --- Cargo.lock | 2 +- polkadot-parachain/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 39d290769ea..b461afeb855 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7683,7 +7683,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" -version = "0.9.290" +version = "0.9.300" dependencies = [ "assert_cmd", "async-trait", diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index 895e324a002..e5f35933f46 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-parachain" -version = "0.9.290" +version = "0.9.300" authors = ["Parity Technologies "] build = "build.rs" edition = "2021" From 1ec1e894ee34365daa146d4bcba70dcc4b74a5da Mon Sep 17 00:00:00 2001 From: Wilfried Kopp Date: Thu, 29 Sep 2022 10:23:00 +0200 Subject: [PATCH 101/148] Bump spec_version to 9300 --- parachains/runtimes/assets/statemine/src/lib.rs | 2 +- parachains/runtimes/assets/statemint/src/lib.rs | 2 +- parachains/runtimes/assets/westmint/src/lib.rs | 2 +- parachains/runtimes/collectives/collectives-polkadot/src/lib.rs | 2 +- parachains/runtimes/contracts/contracts-rococo/src/lib.rs | 2 +- parachains/runtimes/starters/seedling/src/lib.rs | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/parachains/runtimes/assets/statemine/src/lib.rs b/parachains/runtimes/assets/statemine/src/lib.rs index 4271985c243..c17ebf8282d 100644 --- a/parachains/runtimes/assets/statemine/src/lib.rs +++ b/parachains/runtimes/assets/statemine/src/lib.rs @@ -87,7 +87,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("statemine"), impl_name: create_runtime_str!("statemine"), authoring_version: 1, - spec_version: 9290, + spec_version: 9300, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 8, diff --git a/parachains/runtimes/assets/statemint/src/lib.rs b/parachains/runtimes/assets/statemint/src/lib.rs index b5f8b081ef8..2f3a308ace5 100644 --- a/parachains/runtimes/assets/statemint/src/lib.rs +++ b/parachains/runtimes/assets/statemint/src/lib.rs @@ -117,7 +117,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("statemint"), impl_name: create_runtime_str!("statemint"), authoring_version: 1, - spec_version: 9290, + spec_version: 9300, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 8, diff --git a/parachains/runtimes/assets/westmint/src/lib.rs b/parachains/runtimes/assets/westmint/src/lib.rs index 25b51f42a95..d9770aef14d 100644 --- a/parachains/runtimes/assets/westmint/src/lib.rs +++ b/parachains/runtimes/assets/westmint/src/lib.rs @@ -85,7 +85,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("westmint"), impl_name: create_runtime_str!("westmint"), authoring_version: 1, - spec_version: 9290, + spec_version: 9300, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 8, diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs index 604329a0ca9..4b18df36fe1 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs @@ -102,7 +102,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("collectives"), impl_name: create_runtime_str!("collectives"), authoring_version: 1, - spec_version: 9290, + spec_version: 9300, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 0, diff --git a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index 1769c20dc8d..6db76fb6367 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -116,7 +116,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("contracts-rococo"), impl_name: create_runtime_str!("contracts-rococo"), authoring_version: 1, - spec_version: 9290, + spec_version: 9300, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/parachains/runtimes/starters/seedling/src/lib.rs b/parachains/runtimes/starters/seedling/src/lib.rs index d35d96f6748..bb5739f995c 100644 --- a/parachains/runtimes/starters/seedling/src/lib.rs +++ b/parachains/runtimes/starters/seedling/src/lib.rs @@ -65,7 +65,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("seedling"), impl_name: create_runtime_str!("seedling"), authoring_version: 1, - spec_version: 9290, + spec_version: 9300, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, From 13fe0e38af8148f2cbf8d262250b1709c1dfaf68 Mon Sep 17 00:00:00 2001 From: Muharem Ismailov Date: Thu, 29 Sep 2022 17:49:36 +0200 Subject: [PATCH 102/148] Polkadot Collectives chain spec (#1603) * initial chain spec template * boot nodes, para ids, name * para id 1001 * update boot nodes * add collators accounts and session keys * add p2p into wss boot nodes pathes * replace aura raw private keys by ss58 * remove collectives spec * rename collectives genesis spec into collectives * Revert "rename collectives genesis spec into collectives" This reverts commit 60df522a5c3666a9984d87476c2d93f28a2910fb. * insert wasm into spec --- .../chain-specs/collectives-polkadot.json | 74 ++++++++++++------- 1 file changed, 46 insertions(+), 28 deletions(-) diff --git a/parachains/chain-specs/collectives-polkadot.json b/parachains/chain-specs/collectives-polkadot.json index 7dc81f9cd26..9d3b1484c09 100644 --- a/parachains/chain-specs/collectives-polkadot.json +++ b/parachains/chain-specs/collectives-polkadot.json @@ -1,9 +1,20 @@ { - "name": "Polkadot Collectives", + "name": "Collectives", "id": "collectives_polkadot", "chainType": "Live", "bootNodes": [ - "/ip4/127.0.0.1/tcp/30333/p2p/12D3KooWJY6kM1ES9cZV6tv7CXNcxetKVDXXmpwxzeqvTzANfDza" + "/dns/polkadot-collectives-collator-ew6-0.polkadot.io/tcp/30334/p2p/12D3KooWKgrivNBkMswNNNYqUkhEBvnyRzt6TLPQ2shu4eoPuuRi", + "/dns/polkadot-collectives-collator-ew6-1.polkadot.io/tcp/30334/p2p/12D3KooWQen2oX7hWqhUiJ4sxj7WA4Qa3WoAmz6rQbmYPCYjeCk9", + "/dns/polkadot-collectives-collator-uw1-0.polkadot.io/tcp/30334/p2p/12D3KooWJXwJS1d2UcdkKd8a6vM4TFB79gvtHtsp4bm4c8fYdpY7", + "/dns/polkadot-collectives-collator-uw1-1.polkadot.io/tcp/30334/p2p/12D3KooWRjdypZdMT9rjajYM2L2P5mYaxPGErP9ExGBsY3PBdYDy", + "/dns/polkadot-collectives-connect-ew6-0.polkadot.io/tcp/30334/p2p/12D3KooWLDZT5gAjMtC8fojiCwiz17SC61oeX2C7GWBCqqf9TwVD", + "/dns/polkadot-collectives-connect-ew6-1.polkadot.io/tcp/30334/p2p/12D3KooWC9BwKMDyRUTXsE7teSmoKMgbyxqAp3zi2MTGRJR5nhCL", + "/dns/polkadot-collectives-connect-uw1-0.polkadot.io/tcp/30334/p2p/12D3KooWPrJ9VTn3GEs2e7GQs4zoEFiTFcjXFNbQ2iDxFDQAbstQ", + "/dns/polkadot-collectives-connect-uw1-1.polkadot.io/tcp/30334/p2p/12D3KooWGFYW6hJYn3pkpJawyMk6souXh7sznK8yvPmVQ7ktfHbV", + "/dns/polkadot-collectives-connect-ew6-0.polkadot.io/tcp/443/wss/p2p/12D3KooWLDZT5gAjMtC8fojiCwiz17SC61oeX2C7GWBCqqf9TwVD", + "/dns/polkadot-collectives-connect-ew6-1.polkadot.io/tcp/443/wss/p2p/12D3KooWC9BwKMDyRUTXsE7teSmoKMgbyxqAp3zi2MTGRJR5nhCL", + "/dns/polkadot-collectives-connect-uw1-0.polkadot.io/tcp/443/wss/p2p/12D3KooWPrJ9VTn3GEs2e7GQs4zoEFiTFcjXFNbQ2iDxFDQAbstQ", + "/dns/polkadot-collectives-connect-uw1-1.polkadot.io/tcp/443/wss/p2p/12D3KooWGFYW6hJYn3pkpJawyMk6souXh7sznK8yvPmVQ7ktfHbV" ], "telemetryEndpoints": null, "protocolId": null, @@ -13,40 +24,26 @@ "tokenSymbol": "DOT" }, "relay_chain": "polkadot", - "para_id": 1002, + "para_id": 1001, "codeSubstitutes": {}, "genesis": { "runtime": { "system": { - "code": "0x52bc537646db8e0528b52ffd00583ccf026a4ca7a9542010b34a078169fc3a6ee6c8895ee4c191b2dc3877c0737d80f41c9f7cee2eb327c74a1fbc2c75b6be9dddb4db2fce03a984699f83e21d6acf47457dafc842fa8bfd75c72f194124829add7b6f22e59649a694029d0bbe09710a3955724ad0ca9253440e11393ae428d1e2d232a345474b06ad2e5a3068896995d122a335464b8c56182d305a4ead2f5a5eb4a45a77b4ccb4ec689569d5d17a6abda0e582560b5a605a6fb4dc68b1a0d5468b8dd697d61a2d2f2d355a69b4d0689dd1ead2826ac5d182a315a6b5450b8bd69696162d2b5a55b492682dd142a2a5446b8a160ead282d1b70c4e040e1a8819306ce16384ce060c19182c303ce0e3839e00cc1f2830586f502d6130b0e9617961aac345868e4646181c1fa82e5054b0b1617d6192c33584cb0a86039c17a8275858585a5c4ca8f551eab33ab1bacfe58e9b1da63c5c7ca06ab32aba8551d2b323852acc0acb0acaeacda589db1eab27a62b5c40a8a1513ab35564ae038dd4cddd8e0868e1b19dc44dd90b9197313e686cb8dd34d1e3765dcb8e0e6cbcd1a375ddcdc7143c64d1b373ddc4c71a3e526cb0d153752dc587153050042b8b90133420585e1602879c30d158e0715159305344a8e095876b4a66c36d8f6b0019343839c3ce81b363dcc37280e9b1faa28544d344b3625880d3c7bd4bca1f3042b0a56172ca78d0f950e377bd02a355d3815d50dada61a316ac660bdc1527035401cb61a6c52345a40289b997807760553712dac154ca7f9a5cff4101c1a1d0417868b838383fb812301f786ea0995131c1b500ae7038cc2f5b0aa6145037744cb0a0e144c0403c156d804ac04636126d8094e62c3837fd8ee7014704dd05ce12cbe448b0a9a14b813384d2c29bc099e253c896d063c4cf028a1c3829d31fc042f61d3c4a302bee24a3812f1069e246890504d4173031a2c3b31e098e0235808d6c2a28105855fa1518255c0e3c48e144f183449b472f014700968967026564f8e65d38306053b77d8e8c043e080c1416c79f050e12a4cc56c829bd069830708e6a2c2817ea17b503928193a86ea41eba07f503f681fb406d406940f3a456540eda062281e540bbd83ce41a5681e940e3a031a45ada054d02ae8143406b40c850135436950738632d5dce006cb4d142a30544e2a3f545ba8b85069a1ea429585ea0b9517aa3fe8195515ab14ac50b0b2b23a6265c4aa881511ab13ac4cb02ac1aaca6a889510ab205640ac7e589160e5c38acaaa87150fab1d5653381ab63fb633dc1e34326841c939c18d0a543b604e1c95e9c6cd0b780a1a2370be5859a153021a2638285c04a780adb8a9325fc09ac366cad4327b983b4c1e269519c5f4610e31a1982498555657dcac600a31bd90666ce6b031630303151a2a28551a36556c92b02901c60616066b03ce80c507a401b7c5d607c7850d1e36774438221e310ecfc3a75c8f8906ab8ea9868d1e367ed8ec41b1a05b6e6cc0a86044603e6070cc34e61ad30b2d8222418d6075e113300ab80a4642da2048139c0d3943605b708a68215a5948293654e20d303070f0a8e14295438e1198160e853fe152605978149ea525854d0e3b62e6951c247292b0e1219eb1f121fec18201a7074e148e29072a1611fdf02a7088c0a9637507b401d6d0405026dc07cc8a6d0ae70e0c0b1b293c64e8b0c1838497e163f81b6cc45401ab0aa7020b0336e170d96eb0d100de80238563074e14ac1a20531482a7584c1c82b241d750458955588e0804c7419f8841a8a4300c780ebe837d60285a51f811140ab5817be01d388acd0e1c15f40d66179b28d8147209b74263656507a66565861506d230cfd8cac82bad12482c3c464826b63ab02a302a688e6012d8e0805306c70cf370538312889820801b36a21c1ad7654d0c55c32227473a40d4e448910b44441ac3244b8a8888328c099a38061222262d2c51e1e88849029290141d1d31490000a218ebe4c8e848525112a2a2a2164088612c93169618118100a9280618888c9ad4a425452f80e008043e82b14548963059427484c8a8492d42b284c9039296c4c00409921a243a256182a4284907f18b7502822225444e9c80a06885254c8c9c38299a4017bdd80f1835a948454a90985880852e76b145494792181d1d9181a82886a21822408124451ef0c0110a002072b14e9420297201c916eb2469491152910b4b8c3e6ab1c4a8859d98c5223172b2c40829e9491111088e9a343942845494e4c82806212548981c09f1c42dfb02d191a423498e241539c026621102a3a3234649464b8c70e215ab040993a30e101525c580a4e849d14db462919824608b55ac9322a3242324262e24c5706415a9d8254c8c928e20c590842889c9911322a326f508520c1567b9e8a803479296c4d0025112922224a3244b8c8888725a718ab4c2454c95ba4bda3a3131555e8239589c23cec14d583a8455084208a15085b566429c33f60d72779eb28564429c598ee02e33219e39679c792624132233212de5089c6542b28c3dcbdc9b331622c4b3cc39939eb910c992337767e6cc337709a5672da5d4dc5d36f76eb6bbbbac65ed72366719f4b26c4e9f92257b56e39239ebcce5ecd9cc9984599631a649a9d2daddb1766c9332c3a6cb55cdb935cd9c5a4d6732e3764700cb8cb33e80f41af7e9cef3039eb24d6877ce32e9e3eede52caf63999597ab3b3b774ef9eec193367ecee2ce500a47bd6ce2c9bb95dba37b74b9eee9c354bd92bb3ceb67ba1cc1a6699ccd82767ee0cbb67d768b3379a89619894d33d93bd35737b904d296506a1966519cc322106288084de947066598d749752126065967130cb38eb6e09dd6b58d3bc6ddb36bb3366ce9c998bb83b4bf7e99c674fc9cc7300f3b573fa9639afcc329bd9939937af619eb2a594d1997b97a7f39c5ad7d0eee92da1fb944de39910676f29653642c6197b26571963993326a56ca9e23846c9cc8ec2071f742b5d72266796b9a4fb9c3acc9eb93390f3fc71775ff79f1f5f7797cb528ec0cb2bbb653bccb2e95b4f9fd2a50f7b5682bb74963dadc8b9c718a3333b7bd7796f1bf39c734e39bb7ddb7adbba3bcba4dc6aa4dc6a32df30295bba4b5833e7365bb2fbf413584a969299a5fb949277d761bbc396b3bd5dc6e8dc792661cf3967cb6e96d2e5742939cea5ccdabdd9b35ef6ccb98c738e31caedb28e5db24b293d63e75d9673b294eecc26485631ab981de3185b1d56a93a95b38a4b6029b3cdd63bebde98db3def03e6ae6166964d8224d2ac9231c6eeeece65072e3321425cf2083c0213616e01481f1f9f000c11c1c766367332c6187df8c5dc5202c0d99b01c02c65d7416776c9ccef1973c6cc217807ee2e85b8af0f33bf1c0467963bd279ba0b9152ce0f5c4a9e3e5d4a77ce5cbaf778b07931b2772edba594eecc2e638ceeeed2b32ccba4942e33ce985d3a3bb33bfb4a29dda56ce9d2dd1d730933e919bbfbae074922c81210038184df11928e20152d29f20092930f3a58128a9c3829426af202132444484532304152844474c449122445442328f939818426488a9c00a95c409274a403442e38315a62d402072d182115c9403480114e3881842445444c929a8000098907aff3a428c91223a22546475c40d2420b4cbc178c9296c480e4e9b49014439022178892961821352142e2c4e8059e20498a908a92203121fa3981842223a4a410908e24816093c3e9284172a40347474c42e0d1d9e160272787075bc2c42809c911274b8e2025112519bdf0029317cbd3d9b15952d4a4c9119e7d81032e2a426a81088949d211244c8e8e8ef098f013e409930f2471f073020939289030021109454a8e1c75c00527475c78d58e502443d111d193232f74e0da113cc0e488c8034b8c3ce001264739251c1d19292102c40908ad25218909139c24478a905e2028524294f4a4688908aca4220f803082932427464f8a42b859129e18b55084d484880c4b8aa0cd8e40b484899113a4221988908e141d21212af2c0112426494e88921c19b9808428e92886232d1425214a7a52e423c39222b8da06011293178a5ec06458520443e0c26837b2d1c8124ba8e44a4b4a4a6d6495967a69c9a3929292d29292d2d2d212a6a4a4a4a4a4a4b4b4b4e4aba4b4e44ad0c8122bf11a595262a5256864091a5162234bacc44656496949092e292929b911a52556526a234aaca4a4048dac92924a1ad9a5a569448997d8c82e614696788977291ad935a2c44a4b6d649796dac8122f2d2d4123bbb4b4b4e44676898d2cf1121b490014c3bbcb2f3839b20160eabefcd7bf19d68e0a1f62b1004b0aa0b1eb41468c6905737718f541301048be7bdf9137c560a32e08b410baa00bba2ae67d5f3f57fdd6e9f32615b0ba3be47b0281853e1f0433031153e8378395eabfdcf62b3a8cdfdd77e44dd53f7a2e630f5ee5f32a73a34d4d569478c9619c620fc7b243a060d1b1f9f017be1652f80b81b68f3f219046a4cac75e93dddc36b6eed727bed6edfa7caf4aa409ad442611a55e9a0de3d096310c83dcd09c40f263f4be24af31aa4163c43aea823ef0354d6efdb16b96abbbef6b8c495efbf9316ec83d761f8d1d7bdbc1b0987b2c1b28e486fab5b839c0a327798deed5b36834ce299fb1e78fd28bafc5c7b8a11839066cf5d79c3a37c4628efcb1638cd1a3ede2ca9cff629eeff614db5da06dcff79485bd77d86b4eb78af1b755a69129f5d776736ec8e59240aaadfa53d71bd4ffa395e55275ee3f1ff38f8fbdec828041fda7275f932cf8c7ce7fab7ce786240396314e05f7366fb9cd0594ff9bce0df547ca726dbe3dd6314b24121fce8ad18a2de67d49b1c697afc56ef6cb0d1ae30735866118a641c80db1f0128b32462f29564c6232c4ea9ea7a0bf66fbc78194281313130d4250f4ef4725fdf0f9bd8b9ebfa613e40cdabfd51f7243dedf1c03b6b6f7732af443cffbb50499ab449b2d3bb91a3d67e2b86052a0aa44d51145262a0d325ac53c38b543e05332d6675454180c252646d121a662ffb1e052958d92daa89a1abd27fd9234d89d1bdd651e586a6ef2fdb1cebd5fd84a558cbbbb9f57dbee9b95b7fbbc323f377bde2facb78a7d500741d9619e4f5fa927bad18daaf263c74c98c750b02ee646b957ca578aa5226353b0396b6a608c11939a9452c68a79af1a3c5ed1b768dbf331950a5f5b668e1cd96be9fd626db7383d6e08fb2fc746ebf98202f4813f35ef9b74429fcf85c58e2b021668d7277bf82840a023bb40dbab7ef747f54d20d0e63113f4810f7ffbc7bd95aaf0316e8899fa059fdb81f27fcc54e156145c2e4a37a25021f64e54e5cf979c0a5fb5d7266fd3ec0ec1defbb8629ebff78fe67d4b55be7f10d4b02debbe8daaf055ddb7622afc897143d28bdc50bf7c2cca9e9eeafd728fa9a85ada40429181516940323354815175c028ad460f4ed132e0149c8251304a420151a70a5fdb7ef7be57f5e7712d337fac8a61af61dde7d535c8bbebdd7d47ac8a71fce586e26bdc5becb4b8dcd0697687f407b5771f0b630c5b3a236b0decb159536bea47638dde6b87c0af91a2fcdfebc5cd72d6621cf13013657d86e10b55e16bf2bfcfb1513d6fcf97395daefdd97d7d1dd4f8d2fb3aa81f8529c477ef5b2ed5ff25c2d753fd83dadd3fa88f7a6a7c6c87f4c0c0357e507bd71ed6c1006357cc4361879041f93f1450589f3ddeb3507188c934b7a6293aa6269d1fabc2ffbcfa14d446611eacad629e37f50b3ee5c29bbc7ede34370aa7e0d464e2e2a5c2d726a59f6b422039a918eaffcdba5108a6c6ff5c73b30235857219cabf9c045668a1cf372b849a54022d243d28057de00735460794fa66fda0d4dc281454752f753d50e2256f2885b63d1f11975ef61f8fea3f568df3bfadc6efd922d8c7dffed13ebe3710853ef0a3f71dbdaa9463a8941fd45ad7ed2b3e8defaaf133ef73d11a5fe57d747dbe59e34fef9bf5a3157e50e30c5efd9d5bc12be6fd0e895d8d4b43fe1bbdf53e23d59fdf3915befa07412cca6e2b26a577f4f2ba5c8c1fbd25afea9e135131f42362afc10d9ad9fed914668d41ed376052a69308a2bc8a1d5ec5abc0e1433896898363712c5ec5ab4ca79a2c4fb2482f35905ea49730528d59314f42b90d124a42492fd24b4d961f3a2bf652aac2d77c062ab5dfbb8fb7a0fe41b0bb232855fb3dde166efbcdfa2d55ecf9b78116fac0dfd7b04e5baebd6fe9e30affe3eabf5b047bf7be232855ddbb7e01f514bc5ff0dd9bfd821fd477d4f89f4d850fb9057015f39c6987c0e7cca0fc413076485c3f67aaf0971b5a6162eefde2e7d79a1b8ad833c780ad987704a56237eb72eeedacd0efefde122855bd5f52aaae074bce300c285ea06ce9ff6685f0217c082194a60a2184b007be20c686336ca0f2fdd3dfffea9fcf6bf7f7f40fd7aee1a9f66f0d0485ba7e22d4ae1f4feddf7e224db4bd79a2eb540311759d98a64aa8eb448397ca05f563bfeffd23bfee6bb2db8a755cb5fda15ce5c38db921ac014bf235e654c05e7a1ff6d86bcda9402bf6cb79bffc971b8a1fd4d82f07b5e5a6f72dd5f9b2fba6fc2028bbcfabfce586e66bb2fb1450e56bcba9bcef4955bdecbe75aaf2b1eedb7e3d69e282910b54f9dff6eb834095ff610c8058b755d5c100cf9c393355b197dd5780eaaff1263b7f166495b3834156ccfbb84a0f063e73e6cc99fa2dd5882541e6ff589527c333dab6c664dadeb841d78906a73afb679d68d852f7b70662a17d57ffac13d354ddfaf1d4fdedd9206d45e88e2b775cbd7ff877abf74fffbec61a6ffc5a6fcb360c98034abfb6c2f7ef87dc507bbb360c98634abfb6f27bb7fdea8e6b73fccb41cf971b9a5bbbe3badc0396bbd0b6f66f3fffb7af6dff3eec57b2d0dba5e60868fcdcdd98419d98a0eae7b57ff2cfcaffcd0a81b67d3e5af93f5a9d3909ec86104257fff8c3d7607ce8317ac7b5bdaf1f0251ad667bbeaffddb3ffdc3df69fb43f7bd5ffdcc0dadb7fdfa66ed5f6e68fbd51fd42750fe7e57ffc0efd760c795f64f3fab7f1c765b97f30feaa0e66e678559f967656f6705f8fcf0d94be2eade722af043efe3ca1fd4dbd39e92afebc11264de42dbba3d1fadfddaf6cfc70fdf5f27081894ffdb6aff077ffbb5afc16efbe54f02e587bfbf1c0bfc4aa0b7fd72ef9b757ffbf579dd0f6a8d3bafdc462303265565b8a9e18dbbae4e55068cd3e0b65b84ff83bffdda9ffdf37185bfafc16ef66b7f040a7f7fb914b65f9fd77de8cd7eed07b50637ee60e5b60812335518105065c02a7fffb6459018aacab055fe7e9a2d82c44c15060454fefee6587026a6cacf9c0a94a9f26ffdb3b57f391598a9f207755007755007f576dbaffded694f09adebc112e426a36d6beb43f9f757a56d0028fffeaab41d42f9f757a5f16fff7cfbec6dbff6f7979871b47562b252576a8b02e5df5f559024d80a27a8c88298208813414a10848620508230f1d48067053c5d7656c033064f193b4bf05cd9c183e7881d3e76f4d8c983678a9d19ececb133a5f3c50e193b5d7654c0a365a70f9e277878d821b313b5e365670d1e2d76beec4cb163c64e193b68ec70d98162e78c9d3476a4d87182478c1d267848b093c40e183c3ef0ecb0e3b4e3c64e183c5378a2d8f962e78a1d2b76aae00163670c1e2876c4d8a162a78d1d16ec28b17345c769470d9d3076b0e88ca1c3840e143a4ee834a13384ce097488c8d123674cce1c3952e44091f3448e13394de430913325074b4e10393ee4fc9003444e1439577296c81122e7881c1c726ec8899263430b052d2d01586ac328ace3aa6cc2300cb3f2e43465301aa9da8fd1444180060afab436a55fad51a91a15ad495b6ef7999fb750fe20c89dff7647508a67762c8475ab1ad49bd6047dfaa395ca1bd6694db55fc33655b742587753b1a906dae68f62926a82535498aa54f7a6caff492b154bfddcca190b2795ca2fbb853e9f57c1ba9a2aa67ef089da1f3bba457860478ca5efacb152d70325c84e9383b65c2abfa3b0ee1e34994b011ba3f247cfa9320afde2f9fe3daffec99e5f84fe81cf6f42ff68bf6d9e08fdcabab9f5ab1f7a345550fed67adbfe31e13d1ea0e98554bfbff50154deb64fcf4b7eeca484a149c55efe722ad03aa58481d6e97d4d622795c8c7b82942ff488fe32f9702e6ad27022452f961472594516810f1c71731e02207332a00c0132e4c54de60230a28539a08e189ea0712f8d1c50c1946d0e0439486192884e8a38f2a985e72a3ce9001828c103840810508360401c6173b2cf1822e3b088943f3629382e211450c324e629ab47c0080a93da2b0c00b2862b0d1f3811cf4f8238c2d88b8028c293c5872820d2d25e8e34b17289abc31ec18c30d1f9ac86892ea9eac94155a305166065cacd0e0378d216ce8630f15282186111d2c1c49f480c31a59f848830b074f57e031832857b0f8638b204f9a24510605357c11a54b0d783e70850bb4580197a72c64b083059430b888e20921b8a8436789091b98112688a836c4e02267e560b2a2a98f1a80a8018aab8b1e96887205192bd88106204f82b0e30b2b3558034c1e645a4fe60a44dcd134258a971598c1f92076c0838f16c8118326d607bc7881131b53a060a1e58ed51313d441071421fe98127523431572d850c41e7a94d962534215509870e8a28d2d51344e31071525b001991ceaa871810f30a26e38e38f3231a0f980161eccd02185cc54113f704b5bbaec2147193430028a33b69b34e89a5146956a53d70c329aa8aecafcf36d1fadced55dd5fb3f11eafe8bb921f8387b507e57ffc4e7e7e99fafa77ed13beaa913e383043bd916743841bdae53d3184d089ad5756a7adaa62f3900d9e9d34a9319d914ada9ebd4b405f39a9cd8816507dd8ef8a1e9874c0d4aeb3a35d9a0b98002294303e5e2c8cc8872867605ddea3a4571cacc50adae53142beca01c96854014faf0330b7d5b8dd1294a1135beb70e42f1590de442f17f8b64b587bfb0e7caa4e84d5da7283ae840575360d09c38343ce87c23d383b2c4c86440b92bb61f7060620b82b6ea3ae1f0836686e2d475bae106953fbb837278f05308e442cc4e37cc51bdbaab067550c38e76acf6e1c79983caba4e37bca06a759d6e18533f5af9957889a1ea8c9d230721aec0e18ad3123a684bf400c509a6ccfc8143964cf652165a5290a5055334a0c11342aafad11ef694d027daf6ec16f1ba9f3f1313530d4241387a50fecf843a85f8270462262626a626217e35900bed2f045262c30c185f9ec4bce186d0acfd140239412206486441c316523009d59ebd3ddccc59680bb1c02d552095baef1193d3e784cd733139b16dbb9daa4cdb7cdb60f3e6abda36d3368ec669686033cdeec6edb66db73452755fa3a9a9d9b6fb20d3765f43d57d9b1bbfb981cd3760eafe162e8da5ad345353918ae202660b67612a6c8599a6160c7418b55cbc6f9d2a7743e81e31c730d88c7143e81e23265d4ad82c3d62989473aa32cf32d89cc9a9526599a66d9c731c6ce6326ddb388e86a6863aa5b099721bd36c5c53b331a51bdbdcac7cb582cdab9b6d57dbb2b6fbe8b65adb0271b9cb059b5d361b77371b77abaffbda8ae52c22751f47c3d9b86b712970d516880301029b814c9ab94324161d36e34c9a2166b4edf9362ab55f4cbf1a46d586503ba47f3908cc6dff156a03aa81e453fbf48b892a2395079c927ed4dedf6f0251fda8485ebf09440bb1e74d3451d0afa7f2f6f48b75e02f04037da017040cea4df5f3a62808d4df2fa120d00a3584aafd9f94aa5df9b59a1950fee516002bcd1494c140a0168275fbb551a9eb81ffa0d5f40f75c041109e1d9d1c1790160e6b7563436b68b84dcb545362d161f30ed95f0e063e53afc00feacf0504bd5d9feeb6b2122f7577983c76e1c2850b7f17328f207adf7e7cff6f9763615f498410c25d8f6da0ed12a09b5900fbd3ac2ddce7f57aa99905c69ebd6ffacf769fddba4bee9f9ed7ed5f9efddac7ba2f09f6f6c3e8bc1e92d724d829800fbf9f172edcff5cfbf0eb72f06b502f31cb40dd8601738881df3fe3177ffbe51edfa337fbe5eeffb37f9abdbaa78446d121e57c89fd37a79c32ce3834f8eb7dacbaef43d0fe22296c8581cfd4e9af71877304ef0ef928f6dff43adf5f9bdd9c5e50630ebbef88b5843183f15fefa375bd8f5f7e9cffc997fcf23b724db4ffdb2afcad7fd8db873fbbfd91ff3577384750affc55097f50cb6efbb59ff32fd36147148e892b8389a906d371881bcd8335b7a6293aa626dd6af4bcc90bac87e6eee68e344ed7e486717c653e7314782626262626a1e9496e2862d18f18fb078b31c6b92fecb78acde08339f6644a2cca183189d116b318867547ae8a458c0e45efe5c5cbb190196342ed9caef9b3da17fc6e7fe86f91f82f365613be2b73a95cfd8e42f502545f2fd5fd55fb637cd5d891bba37701336095deb72d78cd57ff440c621e3baf1a6fceb1e00f1feb6027f50ad04beadadfbfe4cc5d7852d7aefe7bd578f31f911a6dfe43a1c6248c0cf7af95f7bd88dc781f91fa51146cbc0f85eca9f74ded6b685494f336974bf3a897cc9b73feaeea3f579dabfaa9f266f77d12c632604abe246174638fa6314f5216bb8389c5300cf3886118867d8c40f401a3238b94f4bf2235ff9140f35f08dc7f5f63a4f58335beb7dd16d98088401ff8a3da22d9c7e7254003580010803eb0490398003c8505009fd21a4a43b9edfaed19d8671d5755e7fb8adf04024d9ec204d815c0fcaf514aaac8ee90afebfcafebc7532a7c084020a6027de0cfe965b78e2b53d17e35a6a231953096bcf8cdeb3c0e0c6144bcaf183915246f4f8cb3d0f024a3a662de13a9b95133b620e359ae6fac3fda1e5da7346ece45cfc582cba5728cba628c3f9f23167f62f1b76218c69c0ad1db3cc6b89c0a5e1d6bf71a89d083875fd0f3ad17e7fe2b800935feb6083536911d030641fb8a4f24721b112295488563d4b84e357a3bc68eb15eea602c621d33f50bc61839c61823478fa170113d7ea1f3e34fd516516d6f40c18188d0dc12e243998fc30b659f29651db625c4a9d4d55f53a9bc8869181667b77b42f4197c7d6e1b65255e8aee34b06ff399b921eca1ab4a5ae5ac527a9f7b8b7513c3b44c158d54ec638c9c0a5fb1f8edd8f43c29628f7932c4c855066378f80df8b9c055586a8e8d32d3c755e6c6dea744a5f2b314fdb8e95b2e022db4d0e7dba8ea5e1fb154f5ef0e0a49afa3e40c9ae96b269662292825a5070f875977b1a05b46ef73a1c6f723578def1de6bdfac55f78b3cb05cd68901f3e0bddb1e7fd82419d058d516e110c7a716e85ae98e73b047b4c76bb2f0c9bc161c5242603a41d032d3e7791792a7fafca92bb8fc5414da9f424dd228e3d75b11e021121f29bec5c1c917ec1c700e5ff8854c855c3969bc63ddf21f18b358aa0fa737ce786b088795b29cbc56255f73c3631b7397d5b8e05676e88fb0f85edbf117cbaea3fff6355df5cd00716712ca800726cd41504812e007de073aeba799f6bb555794edf82716e015da5778445d5fbb5af717737773777f343e66668fae8a0fd70aaeb246043082134a369cb767019da65a0478c99994c19facd39339add21b3074daba1cced3dc7342c53f7218c82c0421f4a1d424d898e4ddf246741e7dcf46867ca827eb366e3f478568d8bc553c3a5c095dadcac6e563674b55aad563934ac27f69b950cfd66855b73d304a1f16029b3dbf1f48b8c73d59c1bfe76dfcd1c74cb18e329081e05b5fb18d8cd4e051a4f13947f9bc2050c9dbb1d11bb87c6df8ecd6c3be304d54573c3474d15ab31aa984f4c4a47774358c5f4313652eeea57565dfd9252ca393533b42dcbb24cd3bcc989d6961c9e702a3910510508f6c67c626e3fb89c4b0e7c8a638aeac8ba4e39d071868f8963c7995c3c39e0e1399c81bdb139059132c674f5abd56ab58000d1a1cae4b06845bc0a8b0d4ba7aaeba40316ab296ff3b251a799831f3a4c91138707bb9def9029404ce14187291da29e7abed1934313aceb94c393d775ca81cbb3c4f840ca9456d749872950d81b7e85908dbb14b66a0c47d72d438d38aa8bbddd1dd2be43322e884c79624a125055ccba4e529ef02d02bf3f6e9175f5abebbacef33ed87a7a7a7a3ef800e706af0d046e88eb96a18698eaea17081c0c5e41e08660e03355b543fa41e0527871fbdc71dd0e063e53f95fdcd00ee9d7b99183ae931428d5dc220b6d3657bfd6eb11acf0301ec63d4c172d5fbeb8a3d1838791d2c5c3307fe92285f94b1729cc5aa47ce9f224a5cb93140fd3c5c39c119fe2d313f3537c8a4f4f4e83073578180fe31ea68b162f5edcd1e8c1c348e9e26198bf7491c2fca58b14662d52be747992d2e5498a87e9e261ce884ff1e989f9293ec5a72787e261c0f8d2454b172d1ec3c41578182d5ab4c056e2a576af8b35d62012a59623d4fe325084629ffeafeb7e9c83a1cf17a168a0ec101b3c88a22d84820004b36ba4a9a169fba46dcf77c3d402fa452f0d390b8a496daa326de3686aa8cdcd8a85d302c2e3cad9f6359d9d4d270afaf46b3c57180aaaf69414cf16646330ec85bd04e1c0c5e286a6e0605febe05bdfe1b01addba807e2a290814bd87652ed0a7a3c74e9c86536d6eaa856cbc409ffee8c30ecff6c10d6361ee0a5b612b1ba3b8b600e1ae7016ce12840321361dfcb6d14b8412c24d81a0aa814a6a5f4583056a26551fcdd44c112a8ab7f114ea414f08659a492515a1a8977e26a24a156eaae7838df3a8e5c8403015a612b580ae517c369e12c206a19e34910242d1e0167785994200c0a646fd2294c6850c973400b0af89a0d2c005c024310275e4c3b93064a340bffad5bf5e6abf16806dfb073a170005141410e4d4807ef58bc031a05ffdcba5f66b02d8b022f017406b84aa81c80e77e5f5821e0c7ca6d23028bf26808da750225b84ea28cdb42a2931b5bf6d58a0e8e56b1daaab99d75049d5e6a6a00f1ad10bece8a5f6eb8cb0710b2809dc196e8aeb638154521f8d4a2842411f3454522aa9a1388546c2c6606809db7e93485dffefebee8b9ba294bb32a10f1cdc14048a13f3a2f7d10abdcf5575b805788d505d28ff17a172b82b2ee8d3bfc15182096dc2097cc2f6b36d24539b172842ad4f7f84c1027153d0a7b95847e5a6fa3505e5ffb8a9daafedf0dc3041f7c270c30d97135a7fb1fa6b5a54696ec08dd29b9b150b562caf52f77b8ae452f7bbb5691c901a1a4ad5b0d95c3736ab8d737058ad2ec6e84c2e9d0d6e855107ca3bcd1364630e3a80bf6dfff07685dd17e3fbc28fafc12e56afcb610fbbae58e460f32e88d6c1e6ddc72b20a076b779dcd07a5bc7ad00cf9cf1605b61cf9cc1628410421863841046acf360a36a50fee8eecc0df56c44f80ccabfc5408810104078b9fb0bbef6da79a28d365c5cf8aeebf8aed36d4c0e842ee80e1d88ef3a165b920d0c07ba43c99adb3686abe058a15cbf6d732ad0673fa8e36a1b23a7ea46352597a965369bb6b9c49c2a9de2b65843c35177778f5c689cc915d42eb7d48d3b507e8c8352be8d91df73a16f63b63ae5fad4768b64beeb37aa95effae7b07f13237d6e3042f9db2fde218b61d01d02d936f65baef8b9437788457d04b2512d283ff45d8f100cad0be11174d726c636e6db7d7f6d7dd731223a39bda3c31a8fbbef78bffc21f4873c3b3a392e202d1cd6eac686d6d0703c3d606ce029890b943c01c1dfa710087adf44df4c43c42216e1f01582cd364c08145b48e32d7613faf47bb7b3422db485d9862f44bb95346dfba7bb2ff673555bc8bcbc18cda7a4eee3d4855dacdd7dad799c42f99b1bdaff7654e01d159c898989a9ee633556a8c23ad58feb14ff428e5106104268e402770f3a6ca8877bff3c7cdef7f606c25c2ee8f3823e26b44f7f3fb7009d0a3d22fdea57d1b1dc34bc43e2ebd456aaf0796b9f7e1e1ce8e7aa0d2442fbf4f7ab022f77f8ec759dda60628f37c0d8e2471f48a86048184e6384f1851b2cbfadee874235a17ffc65e74e4c4c4c42087d3c15eba918151bb04841061757e8484208fbd93f22540c2323ca948a45af0dba95d7615da71bc0d06ec1969d9a63b818c3c5182e4968dbf3695eb88c8fe5a8fd124cff3012d78f17c055f624981d42078d02f2f66133e827c1d496aa120c6f431acd0bafb26c41595620ec3916648581cf745a43dfb00e96699ffe2da3e1e84639e8c1a81beddbdd5ddf5ddf9d1fe34f9c0debb4dd223b758be854089fd20ec8a6da22b36e11d99100cb02f8fca6c25f0662ca2afc662038c57c3090f6fd2e08843d2cd22dfb7c0cb4ec9379c73b849fa7c20adff7673efcb93ff2e16f0b843d9c53707243ee4130fdeae7e4a0300fd547f54f99fec9be1f4ad14ce5fa2ae7b6bcf0611f0b84414db5d1fed9f1e70a2b843f211006a40e399884e0471b6e087aa958c7715b535a23c60acbaa0ad7ae9f5c11b1b2b24a82b256dc102cd3af767fd87dac07851f046117df2194ea57c3a87ef5df704310cc0ee9ef2ce807a76abf06a67f342ed0060b34e1d416d9dada199fe6a5f6efa7b5516bd6a71f82d9220b6be0990981e0d4faf4b1d9b069996a4a8e067aab2c4abce47e3346db2dc2dd3bb4ff41f80c3de85e3307e5f709b7e5d6fb4430f5451e286f77e44d75bfb9a17dffa03bdc768b6cfde0c2670f36afd3403059edfe5c2e9efea1cfdd14837e93f6cf378130d9b47fa0d7ffc19ffdea8ef6abb97eb3d60d765cbd53ed90b943f8e1cfad8168c3acb6155ff7edbc5f50be36bbb902acf12be48664c759dd5363dfe57fee1dce11ecdcded6afc55e07fe275f763847502512636f42169e5878ead7981b8abf0f7dfabfedfd59fdeaf7ae69bffa3340b77ed1b9b9c00d571f2e974e102e14fbdefaf98b2fbfb1f7ff8e8868b2a766ed9f5206ae8c794afcbd5b42a42a81bff5cb839ee48eb285193366d4d8a279214d0d7bbf96eb21b4ed177b2c45f9995b404d5d3fba36f33c853a37342356b32f97f9b90694795dfe3933733373f3c3a8dea69c73ae46b33b649fa343db9eafc60a0452fd27b960b1f29f53a9fbb1ea7e0e3f36d6d154559749419f7ed84181821f871752bdec24962a536baaaa2ef3a34fc8a62a6313a3cee48a11eb68d57ce32c284fa13655477a915c6aff944eb55f5269208905faf4cf2afd48ae3575991fedd3d9142707fd6aa8d4fe2f9baafd3544f4cf7744a50688fec1bebfa68a63d34bfde0549669a884aad80a33390b328766666604000009931640302820100b06e469a02af2031480106f924c524a2c1646439118876118c55010c4308c2104116208320839a4e86c026e1d6845e8c04e82845ebc5ef04e18d9e20811eb216e3b77cd4ebf60a9c3499c40c659cbcbca4e1ade047ab0ba7238f19c19703899bb3c2a71a709d353b550a74bef8544e06a11e21b41fd55ed9c278ad4b6f6cdd660b8eba5a62e67237939106045530b83c2528b02ba0e220461af86a414e6ea015abfc2a1499bc1f7aa0c7633a24a4531bcd90d99cfe3e494521dfddf4ebe2bccf996a1559ced79a18ab4e6f66dca3e2de08db7695af7a2ad099b6cc0ad524c731c501f40d7ce2e1ca6f74213118fdd8c419f969d8bf2cdcac9378d8eb98c113080e56ede02e1ac92c4ee328bd2e99918ad6522f7d7f8e1b62e4a12b8ea1433e098798f3a210a90f373de4b497b6032124096ffe7332ddd41409fffb6f40f26bb130261c3e18fb0a7d447ed5be595c12b49de69c7b676b4bccec58af9c87a21d9e443b04ecd18dfb38362693912ee009e897e7aa14148fa5c8db0ff4ba22a778a2f43a2172d0fdef00cb42bc633084508ab6913a8f84f768d1efc87871a8ac0c8e03f593742061ad7ae34bb04b17dff545834e67d276a40ef76973f2e76cf64a0b095cef4d54313cec9bfcc1454513e0a24ce4599aca413b92981f8fc24332cb8aeb3a742f0eb646af6c667a43f7f22ca44e7939b7eff0e1046b8c10fcb004ec5fdcd3d9826fadc9966087841feeb0e44d68d98e64f50c16d43d9bc375fcfa78f3001bdc9b980dd2a14c2f8d087ad594807b0bcbcea32c41fd8bdad1e262227b52a468977e90e2dc3a103bd38b8f5d0c11de620870e0ebb746e9f5b14cc5e7712ab017ced16a45feb0a8ca188d25151aaf2ed9060078616a0e49529d49249d645d6e63a6e0e3c0419597a5f6145edc14c822ac4ef52f58b9ee3e29cbfe183589feb5942f7169cfe4dde5dc40d5d91ecf85d1bbc2c4158339695ba79ffc2521075c50de126b4be9fef9fdd1e31e38a0daf4694ef8dd242d1db66d561d05cec5bd13cb90968a8d9bec1362c53a4110dcdd4ab93425d1ab1890148102a913b5f11ff45917a0d8a2a22cf1928d6b55c8004348bd84bc02476ecdbc193da938f02449036d27e2421b40cb8fdfae2056889dabc23b8b1ef142913546c84be18538b06702adca197e3d2bb026d74c99e7d16b08ffe955b38aaeaf3950f6d99c1d89dcfd27a9fb0faed70637a47199137d351cba8e23a1bf19e7b7dc60a923464f2bb6414c89bfd5227caf46a125380354ad42d8ab597c379a554a3cf9053cfc1f55f7bea4d1648da5a93721254df0cc28d4d21328b0e443234f726e817c3d52e97e1e461c2d905123ad4939e84fcbb2e217f94636f17f63fcf6ab8ac20035eafa43f8ee93eb1ea80eb2a3739bcc7a8221545ea67621f9cca6d4be4917bf8a64af21a89c5b18577499602687d57501bb1a0cb8b8bac0cad6aa4899a1918701416046accb60c6708a007008193a34a6b2272182e880a42df9f2e36550371ed81a31d407e3b0fa14e21a66dd2204edb97a8fb8e64744d2391aca64d2d1019031b0538a2df4f98f52a791f395eb6247406cdee51685f52e7f402e7ae95764c7c545910a346b1a5f015e9d5acae6e24897761ca21ca100342bed4d29bcf582aaf5040cb10a04e3d8886171ec06c283240965c5bd19a44954d6d0d15850969d2f596a2b86d393817bf897fba2238286b5122c6a0d2e07381e6304062f718897109cda80402c30e311651c81709c5ff48d21773cc72187a2ab262ccd49446628402139c7c016f4aa05214236ae43641944e89c617af8944e9f4d45071989c4c5a7b098afb978253f19f98a72b828362092d6a042e0d3e12d20c0304a61e111a97f08c0a202ca2029d7c166b56944269f25f638d83f2a0cce29359b5bcc819328cada351d957ff93456c72221228abcc7442bb95559bf5a63f586c8e281d7ce2ccfc4789009e1dbc17df1ebed91a6d0285e8c0b56329a51b7814846f0236a3e7cc762a4760f3bfca4e459836547898714f29166a8f4e842284b56c3acdc2ce6173f3d50faab5c8faa7c93b224a9db785d39a6cec0f136021d4d561ae7c672b81849ec8da916ab38005a203ec2a6ef9f69f7e117b158728b28cd94960c626b7973cc41a96fe8c2844a641841422634682e119dfd9b2bbba9c435c504eba861420f9073da796443c12a3a1803128de4f6d7b243a42db611240e191b03dcd6d276a2334bf5d8c37e145cdce6921f1f6d43c70ed9aa50ab8d42766a2d1a7d6822d04ef6dfec68360587a85bd06a69d9dfba1c596a7550024dacc3a29ad9bd1f7a99ead403e70b3c261248b8745d62780bdc01068f77d0e53cbe5776e23093132236f89a85ddfba5c276da840922cb4595b4b6019b75c88e41870d08aa14849f8bbaf0bd33a99d4c81ff09dc3bf40e667a54a92d9701483e3a5c54df126d30586b7163df7568997d9527c4e89195e5aa5128c66d601858d80d38492bbfce4854c92c3518926a5caf8245d33174fd7237a735c888852cd96c6ebe1c381a4ca8ae01bf4c1bffa90e80f8a2cf453c5065abb37581e14713e3d3311b754a9051307ffbdd74d79068ce17cb35345fb4137baeb850519af99c2744bc73a87241c2b2944a68d1015954aec046ecbdc63e944b874640746b5232e8882f4906b9e75d1754770a4724f01ace10095f41ce115be534e8f09ea766494a8a66927640e156bb590350330d9f834ac463c88d27c4c86fffeaf585efc666abb4bcadc82702518b0ca6ccae2e88b1764ea5f4c5635519a25069deeb8d5a90f8f42096653e2d953fc14da0759a30de5432867c3a7000042f3a9a98042906315f7586a264bf326cd1e1851ae05727cd85093d9cd16baf560479f7481ddaa2ca101a72e68790624d0fab73f7f019fca41867102ef7ec236f380a1eb5e4bda998e9a76a403bcdc924bb865c9e8c39c2d0be3eeb95c25d568dccb300fe531ec645a22e2d1c50965ce8f1d78a79532400e2a2cb4b24fd407c5610a8713e0de24574c70f40b1edd953ee501d685273a1908c00852b0ab3ec8076b35946201084549eed02a06095230f70421559e7f2f021060dd2fffda96b0b746d3a16e8d6a69cd2d49024f6618369aa87614f8b34e737c90e961c8b4c23a07826ba8e224f6e740cd5389bff5ad8454a4746f45ad6310884ccd1bc8c660f0878ed604bc910be66b335482b65d87ac7e00485e9cb9200f072ddbd4564fc18d20b967106e1215b6fd92236c57a482d8fa33c3642228de3d2c4d189368f9592407c4f96112c6c3a27af623abf36fd331a4aa02f16b7e1451e60861713dc729fe038149857d5104d309341b3131742c5449851da12988fbf459d1b87c284ed6a332888558f5fc458ec5818cda3b73dfe2d190102d19085c02c9f17e20f9b6704a11a3703a5eb96e9ba01b08adc90df064e83646cee35f3b5486c7997ee82849672c9c5b689eb54e26c38ad53b9a4241e1727ee9f1d0dbb393fbd76324773d4d81e56a62825435cb6a81add12e09ce74c1b9de8bf2f6cc83fae32faa27db25f39468a088335b4dd4e40e5d04cfef18819c5094dc10b32d06513465b5563398908d78178ee54a258c231b74b0472052487d43fd3ef57746589db97893c8d4700bf76229886bf8e91a744de9892ff6e7ec76c21581664af80de29704201485df1965edf6fe9a55411f8cc8901d7daf0a72e35da2983e254c4e83e22c53e1095134eae4edc04d160fae35fb80e4399f7c99b42d28d558973a2f61622abe08deb1358b893fc4fc24001005ac4258a86938041315e958e8bf8b05ca0a67081bdcac905e17e0e06ccf272b3e92567f733545e0842c7f61778f66f117c2b2e2d3f21a18015ba38600a9d8b7e8079f1be751a0148f36cf23520f6ba49f44ec6b482a7fe2172c98a938c97ea3250cea9140eaa4e6b26722dc844e90682f705677dda06634073eb0d21b23d1df3585ade8de4829037121e7a8e4367458f7be1872df36f9b8dd8c8bab51c7b542f569ae71b9a4bddc068908acedbcaa5586c1232883b9e37418cd58e2dc3400fd08f94bbb56dd0d9cbeba608fef1c025189e61f4660ecdebe07777b7fb3bc8effb3c97cd4da2ceea1fdac694c2592f1ad0e6c58c58e06e29d636a9179632881a6ba2436019f8763eee6e37e61bfee076d0656ca859a8d626b2850bde4a1e5e5ab419917b30c4b09f8ddac7fa904493b67fc4e739b216c97c1a87543b4045a995aa7cef5a647f228f94a95d997991dd007de07a46aa5f82be9ac9135a63d8dd84f2399092a6398b51e2c2425b9a67059ebf32e1b08fccb8f5843a127ff0f289be177c5b1cc0dd7e8b2766d698f4ee45f2c00bbd8fda626af0445e6d8cbd9d108d03d595dd6f7707f900692c460c1eb4877f6c9dd364c7acc89714d7e5f59133535a100038049c9de657cb85deb3bca3aaeee7e27c224fcff857c75c5902ea27994a158daef7af43bdf1b0fa452536fdadee67192e5f98e4361e867d2fd10eb22663e27bf05518a0fecf983e3e40395839e6c3c67433059d4846693f0e63502c8b499670f8298356c298a05c308ed74f505124df869b327781be98154f1f68089b2f39e50a7044d02caf88e8bd0e84f2109fceb0a60c3930a91385e4b044122461a16044bf61966c5c0485b2e424410f1f36520e1fc6bbf08ef0a5ba4c0a17fb943c8ec97d54520c94fe048c6057c728876971f742743c61f2d3e6be45f9603e03dcf57df77e8e53d3dc0f7c60a4ef52c606f6843a25e9f52f85aa08c92cb46853593d0c0a15998d972e1280fcd1a4e3c9ba3b25065b21805ea68eb82333cde49065d440d195e28d8420a8d00bd4c49b029b0ca75260c0e32009922cbb5403cff45cfed97a6ea62bdcb16083ddc3ecb39fa89f22f969c0e7394b7fa945a4514e0c1b520786fe91ab66aa067bd2403e9b08b65188b5e3daf341c3b909c5bf4c223bc549c2a2c31486adc95a8f34654371046dd7cf582385dd08029610647c0f0d6bbd0b7fa7552a4b1e517f0dc128462c1ff5c4f82d20dffaa2e6b2913c1bc4e2e8d86e6c35850229f1404ac32c9c507d27137a5e00b909104ee2ba9b78b9fe4a7666bc5d21af354fa418fca257e2f0f021bb3de13b732b44629ef57bf2a680b4803bf93869ce9d8c5f3e0cdba5197113901fff7eaaa043a411e66f3d3ee8867b025dc09485c43b6a59a6adcf06175d995a70d8c11eb8dbd445cbfda3c701e346cd6052435dc23217a03795392df18d2f7eff39299cbb170fcea2e11d158714bd41a17941bd7ffadbcb786497a876d312bdf1f9a097665e8d95f6310b278a5d8d337eed493a002676fa6d4d3141a741cba5b4ff9d3a4b566589da8da384d68a48655f694b1581a44d4181c3f7eed9d7a5d84c0c22ce325e5a33bdbd26aa02eb65fd2baa693be30080968f084206251ae1d0b94164e4374bc0a613f4a453850a94de75d04ae3f3dda35e01b1917e0a6374ef65c092e88420e1b03b4624f8fb17a305f95a8b2b3ea7add4606e69d73772fe86709f84433c0d3a70e28299eb51629b960b4cadd2e035ae26384870fd80217cd9a6541077a26194423ad923a298c2f3f76fd304aa32cf4fd7e2382194e52abf016a1b8bbf29c9ec9e1c31d0ad527f99a3b0e24b6b14b80cff3dd8d41496c7f340e0405dfc118dfa36267a90624cd279f7ba689e5c30ceff933a9a96aaf11502c72735174cf3ae950613a249be10f7884eb9aa06a58f4cb7f499ac0214ea7d929d9467a36c9f52f576cda69e57912c92b25ae6411842880af330bfbec515be9cdc5165a1666dc198a69c05c242ab076403950a48674b800718f496749062e95103de8d8507244dfdec36ac9983b74c1e7c8c5430d80a0793992e536f0d6fe21bdad3916075bd8b056a0b4d3b49a9cb05d1b132ce2ca172d32ac283723e8170230b835f8a9ac0883f42d4c4c01d9dcbe7836b2dc29f4bd3a33fd54729583d238c239651c9e86294b0589a85a73c962621002be46120546207550adec9a7362a20b4ea670498249ae45a5020d4999e537f648a2d3ee4674e1d66e64176be864465e42238a413c5cec95ab737b869b01fbbf1bac0e6038547f4543f476a6401808a4a9a4e5053f1f454933280c398b228438c5ad46ebf00c18b800384b9865478472b3ce6fbe648536999ebdaecb78a2f5d04715b4859808f5027db5d73848c545e2a13fd447cea42c2f2e51fddcb87436b2f2e8c8a1430a98bb0d3d27f7d32e85249d90d17542418a9a8e0d8c08200909ce606b42e9ab9d918bcfdca46bc8e311da9dd64c6a26d7984344d2f9123611a3882cec5e2e99145ccd3830610d65ec7323c90b5570a0ec4ecdc27eba3c2525add111870a300e401094f903ebae430511efae0fc7cc0393658992a893344097279d0b0997787deb806f2ca9919df7cda400c617533a65be831b8f06c8d7b48d01c86b92ddbd5f2db8148e6f999508060d010eaa79f0cd5c3ff8f208800c2e928af7de673d8e7a70e076cf98c4c1a07c3b84bc428a86b09d7c49a949b33a1173a63f7e003e53ec6d6af7c2f327d7de4a7265d5006c321d28404cd485ee7224f796bda9af82ab29b14f4b7021ca4004781f20766024e1a56759d0b6f8e277953c786c62dcd30eda1ebc12d931d19306786bbd41daf516c134149291ff4a3de4d702d1cd663d9dfb6e6bdaed645caa40705e68a766ef9e098e8b1a978fd09c2963b66d7208fddd91c81eb014c7af012839daac3652a1631fa619fb77215b3924f96daad2b29ee610b76c3d78ade60b9a336e0b4170b67a72b72b152d98d3e2d4e1b9065933b6b45e1c69e01033746bbcae762eb1bbb2c908cff31390514f6d40d3cd76b1c6a8d6ce4ebf47f47fecd27e9f46d8c3195ff7efecf9a36129bef726f5e73fc55975d230b693e49d2b9155931b695bc73ca25cd1a184311f61bd31624ed47b590b9b846d36c8c9f78b42a6d8102c657874f9a2de25df58e2a6c71baf84ffb6299ef515b52c4c61a2bb38ba3693e0ff91499a20717dd628a989b668272dee5278c2bb662c7f6f8199af74371635c9ddc049b038018135f9494bc339243af9cc7044a9ce3b158931532f9368bc81be8cf454f06a9e8cfe6d30792c227e50d5c599c50fcf7afea512d353c172fa7d2761168dd9039c718e5ca828286e7ccd070e5497c3f21e1f60fc5052b463026affa3319f5709c29453e72fb041504a8ea1496da8486a296c19ab1ab550fe3012f26a8684a9b5a974a066969f30bc0d79ded0838b53b8e30fe1482e1c7b8a0a3b1c828148250f9ef1167d3c4b178f526b9b231b8c08b0a18ee2dfcf548893caab633ce0e77075d99019e1119a84fd538d21a4c33a630265179a2d6481cb974e5790df54bd66b52bf4e29750c17b2b0037eb6eb1690f0a454dfecdddb6160d2af1c408da621adaac7b88c3bd8242dac64043444557c16caf415cdb83cd7f4b85e7c26f2f771d1b104a4bafec31eb7dd354a7c925eaecb60dba35dc8f155ba9be0cdb04a8af8ec895dd770c26f1074b7fdfbfe7b23f2f1d0985d08b027449e7ec587316cb9ce7c83e48c10822475d3d18da90ae990bbe807c7c5ec3ebd1ec5b28b7c20ed4cf190069e6cdffa50a24bf1494003db9a7aee9dc4333e38bc592e0835f14b56a1cf2bc947de60602d190eb398cfa3227cd5bc6f05a649e3383719038a6ea907f0f32ac844e42f28c89c0240fa619831042a9b95ba0fb5de6a5edfd9f9b3d0a0e5148a91c4c94827510ae91682379b3ce7a85dcabec69db4dae1089cc3a643645437338f1e97307f58616e289442123822c6810c49915465441413e2ee49a1a052e21029e18de75977ba3c12c21034943542583bda0bff12a65aa71fcaa85f051bb3caa0ea1d2462b1318f93a022e8542af5daab42675a13664d00a19121ba86c9f5f9791a21108acc8e9ba78e513a708b24bb342fb73b4544ab4828fd8c9fe344fc6a04e2d0b66b9f0cf549f1f3d2a2351afe954b1127812895d947914f253e0483eec7f8f2357b18a0fe0fdcd0b2970cf4445a9187884e6d0ef3ca0e3fd3831c60261c88d622f1af89449ad7114f18808064f1efc294fe47540a82f03026f4430be940cfea33c7772edef381ddaecc0262e0561a0209e0a540cbe6df9ef5893bbd65fb26cf4b86b2089f70249b1b72c7f3bcea6eef58f784e4058c1645d84b25c056e200eb117077f25a502c6813fc9115a4d4f94b251de458233ea640aaa5ef43601af90b511f63c0d6c27545bd5f619592810512c64dcf4cc2c6fde43a54dccabf5d7cfc91a992d152516584c62c380faf913d66ac8fbf59f2cb682d9fbe2192482977735e7390d3ef2adeb64124c70824562447fb2a16d5964df6f691703a4e530a1b15c9925ed3d6c521a9cc8594ba6c9c1331a0186e44ec4cac40e58aa6bd1a4631c97f5267eef0a633e615ce4fa1fe3627e9a980c9e4b1ee0c67efa95146ed8b1d2f5292d2f5d1691a49a11e0952f9eb02610ac85e5c11f26620ebc06c5938bd66a0df9c786ba07b01a452864dc2d4dbf44f54dd8f2051758067f5c29d888bb94ad5108895a030d6539db3404350e2e6e6971c174b22773d22978b8688cedfb8ff689b5aa9de91bbf331cd310b4e61c370e31605c0437fb28348d44524f9ed894939cb69bc3d562a2413ba8d770b512fc4a72b62559be9a9256c749b23d38eda7aa31232ae9a3f66f5fac615834fb838940aa5f337baa83d84aa71116f2b3727bea8a8281281cdcae6934d55296e8cbb049cd518c420c7ed989513e5ed92ecc277bdb600b9de17daf3d71028bac48fe447b068dce0c573b0f45d666f687b0863f761a4c51c18dd3a853f59e39483043523d4d562610eb93ec06e0193339b18add93ab8a3fda27a075c547daf4a420f92ef9a9b269331be60a2850f6d1019fb0f1652e8ebfd6446e881ec99a8bbbf45352d9fc9d782e276aeace64c615754d7fe7eafd4ac253019e3c93970dc24019d74f0978b3e50d4d76452d7d661ba89ac3b913e18a27913db0e090fccd3ae304533cc8362145477acc8d90db818a8f5c623ea6879cd9064a7eae733ece8724dac1173eae3e2fe51a860865d9384689fb5047fa32ae47ee198d6222489ab1539eaabad0a12f6ac37a8859f176e321b04ad0b4d3ec8806abdb845df80ac3d04c254ef3a1d7500f8d1401831cba120a1c1149ad4bc7791bd01f639e4897d7a144073493a3f8d67c704674569a161caf74e3ccd94dc27bb9d4ed7cd28a998b6e25e202bba74b8dc764442ff5c254020c360a0cbd844a2e3c57b0ab2e248fc0e34e5223974a30810837e252a5291a078e76b7f1692bac80927a74f4a6cc982a1a8919b04371eb4d2aefcdd61a0f04c594887bdb80c37d16812ba5b3c14c9cbf02517a58c99bc16f1a24770f0e154a2707a811a2e86a649d44b238a4f19dfb089d0071f8e1dbf588c77a07be1a87217cb170c60fad1f689de51e105097b69d3d1bf67a0d813865dc1b898b7c41b5e43875b2f9e38205508ba7979c365bfd6d0c9c8ade7b1fb663b9d7ade2aa59a8cf69c14d9b6682891ad95b92282070462046fa5aefa07e8adfe1a0fbe7adbd50547366476d21041e4fda261972d150c06398e70bcff647c7060b854f0162b67781db7a42cd0d41c43699e98f0cea68c32ba4b2ebd8ebec916182f9aac97a2fa2d3d4a8c2eeea52f51ff028cc446c6cabc4376f2314f746ef069c41b24d95dc6fa12d1e5ba91cb45d774069293a508242fc17c40b67cf2d46f4083008015d38f9f197597d862395113e428585337f213a3ecb7080209a2527b4726a358ea27541aee20dc9d8a0222abb6a0dd827ab7a0fb2ef51c043edf06941cae78fe6d0c5678f65a9cb0c2310cabd24bf647bfb7cad7ceff64826e791cdbc8c85cdd4c2a2f1685075d3429c1d6d4e83e18c262153278638801c4d0ae81694683b7ae2421ac7049cf0491727bc6d5621cf2c48e11c23ce0bca3705676aab28fe40cca1a20bb80ac84376c653b78ba1b5fa6a5138b0be09fa12a1b10923f6a3b18fa9487e9b3be248990c7016e9330a34f822d70d4d70415a9e29f21e75f364210ca91f5dc009a9d071d7753cd3f9779606e886c05f07dde7521172ea83827b41ddf2f62537a89a5f3c72736735460ee03f44a208fd9d6e69fc477f9c73f094ac90f7a28f80db7e17966cbd80e744b409ad21d5166f8c074a5368eb769cacbd63d8c48b8c871e46f7f50f33babdba084af94f3809e80d764152a22eea1520b9d28d4a007ffd4d7c84ebe3608f76726167d4e358980048c68a661552dffaa182885e71323447638c3240be03bb3dca1aeb6413fb1d06c30c02bc77326eca1d4844e0785e4d81c115dd594f4522d00b73b9355093eacfcb7ab865c150a67661628c83323f4636bae5262ba94753ad9727204c88c17abc8d758895d2f458b639a834f840d7207399c904b15e6f255f876e10dc58d42b38986d9aa8aac762c975688b63ae7dcf200ac1456c3a50dfde50df45d4a763659f65dea23650c7260d34bb23ecc5c1be07f584d1d3f37cb1296a1ec6e383065727bd4d63c954471142a1dc97aa889eef5417f3e6737587c4fc5dd64a6dc1372f6c82653b6a066a2596635c4315bb3e009818c00618dc79a901fc4261b31d1549e785dd39832c6a737b01327a3709510ef4d24b90f74da05e22dce8f8bffe0b62c810801aca60e64451c91f55791099bb2281f12661c45e4387a441b85045b47936b3e5e8d53dc4eb7cdbea66e1be4bff0f2b805a8f12b3756e1751d0a585bb502c44cdd9330d1eaa70396d176d756bfc2d4b9f4ca4f3e33d1217810c9d1582ff949d20eb0c0f18d90a375c925f82ad51f30435c4f0b7596ef176442058fa49ce32fc458800625b706a5f6fdd34b52d92ce952a675bc4ee2647a140525e8dec28a0e10e3eeadada1e151b112c12eab0df8f63306ae8f0e3ae361598eee6cf2d23974783f82c73aedddece47fc8a17ef31b6cd2f0c99bb516fbe764d2c7a4f9a4296a942d32ff885fecc0a7298acd0caebb7cd574a8714a6910de9046c49db412c2056f3a0511b1f749eb2bb0fe47fa112e340b1d61fe48bdb9146f3c357667780a3b1025a645e941e2021bbaf7e80066c0906b6a1d7552e4b0a63ecf5e67b9afb1edc5f7b9ab162b6935f7e47163ce8c0a43872252613efe3fdcfedaa62069e13dbc0082378f7ab10e9017d5ad1383bcd67b71340dc9f4f49364e407533e62740e5fc9f9ae644e62647b76171117e00c7025c10ce3da9c2ba904930fafa35ef616c9b6b8925ae8d4f4eaa80e60773d42c786871f23854ee74f1f34bfda81f63df483cba4d359a4a40f5fdb1a062ce463f8b95788e255c7e4d292586226abd68c7a66582fa71cc443c75ce9d54ee3c0eb4a073b2495b4aa10b9f7f3da73c8d07d180e04f73ee67516e3e9921863d51e0cbbdd5f386e36e5e66b777ff33086e7ec76c073b401cf54337233a1fee7205b40cbaf158e60d574073a48cad4b5299c7f495a3aeef1dcf7efd22365de74b02c565bd8caaa14ba976e8af523c5a69066fa1d965283337d197cfea37930a73ed50c0a85659ffdacd18d7b3143ebc25544449c2913bf377894a45ebd70bf642fc3c7028ea1191078f8f6328adbd5764c1393b6bda9ab3a08dc5d053f1a9adac9bb6af25e17ed04554863eee01f4d780595430d5641ecf0a99befe425aceb8b38c0f125c5a545148270f7f37f426fa3824848ec0200d063c23b565803ee40e5e055099b172908917cb78c4b25341c5fa430824c25fc17f4c2bd2b843b34d27e3ef18f7782e9d98e39239c8b7caa81a3abdc62507930bde32a90cd8313996ca2ecaa0768d960a02fb6fce4a8b16dcfb479eaeeebf9e66dcec1afaa2c3c111a21a2d1e2b379a1046e4fb0b3b7c3f330d63971c4d26f74905fbbeb950245ffc905a6d1a3092a79a00e9d323ccec41bf13f3a9e4444882147b4f8b4cccd034d70810519acd9694a7197c0f0c0915d83eeb2c2d8bfa1c4280d4c46772eabb5cf0c3121cc019084e5fb7d5414e409fea04e64215bece25a528558702f354724664322a040853fabe33f6ddb9acca88df0acd25c1c3f108d2b8e20f80def6d29c1cb0f0bcfcec24e98310b6d0e072b59f3c7ae58403ca08a5b33a4687c049e3c824cd5ef2a767d9214c6dd363fa0c95bddb227d9040575d70a038afe976d83df0553480e0b8968fd12f7a8e904616717d6f9ece5d510bab8b781b2b888779d37b3512468ab4c1a798e0b726db67f14b4796861a0a51eb834470e4da5adef559e69af3fef4255c93d9eb4dc490fa817dfe0cf920e8f2895ca7ab426040796824d448c607672a41996b1e4d7d0706cb03a20c95a728db3f3ac70535567fc9630bf8ee476ad145e2602e7b0227621ada92584a5b0659c55309a7e46f2468f513f6cd3d49f185a790407b49d5bf1218e854c23206a9141813c45b84c4b6dc56180c62ebbeef4a2a70504f007d892d223ed8fb70831f770268283ac05cd861c05178fa000084de34a8228dc165080f72f91a624b757a8c8870e8d02485cd1fe2174a875315820e7429fe4a70601c50747e63d5aef4d9c374dc7379095decc2a1a1e23910c26df3e1d74335ebfef4533cb778d2f0d5928e7ab28648c8fa202faea06ff31e316957f600f176e443f9d4f940795ee0b9bc9bfba17d23420ccb2490a3bbb69409cda6e8484674715c886d66fa2f02721869c516764425d8e95f36f1554730b89a676abf183abaf69005306d8ac537da61a894cb355581340373d76335377ebadc6c2ca40186a8191c1ae543121c2fc671cbb6dc2d8e9e811c110024068047e918e372e5efd2398d47fc554a4e9a5d0696b9c7af841f9a78e817705697fb048c44e8f0b5e7656f582f0f46f7b0bf04d41f4423910516adb42c0a800237805f09a1337dd36903032661a4cb59ebff934757e4fed696c42513946352b82f4ef1e72cf0d09c743eec9d472f9ce827e3e70f88a4ef80df11b9d95b8324efc5f88612b795c0d54f2681bc5799c50acfb92a72773c21f727202e5c1744c0c562ac922ea977ba463e6e96985490ad129ca0cbbc9f92941b92d9e1fa20621be3d58e9e9b6459bb19f10366c6efc25b2593cb04638980a44c67f7b680a4a13c938a12541376bf879b5e09ec931f1d3509ba1eed1c777641335af17d30aab83717a63cfafa49a80047e97f1d3c194f081affda45def21714c8b6469757d978ca2e2f555e62596ae5e6de642e12f92b360de1a0b0e8944933d3d079ad820a2b7f8add09fb88d27d24c236ad269a5008c72aee8be60454a71df7c98045b7a031ac3716b27affc041e30af1e101fb140a2c295e0dfa5c539e9b60c9e00816c9d69b2c41d06e625723a54ace66de74e30afb4c55df569477d4e2a65d686fde41c8791a06a94a56b9734d1d16b45e1bab5941615180950a3b342000b28ce8774f260f7fad919c54a0a68f46aa79adee5b1d2827e5336969e82ee9d457204876274f59bd080a441f9887c72aa844072ac30284f325c44c530c0bbf3c157345afd6a0517cff64f39a22ef4a2a2f265c4235342242f060de6e5f60ab83a8340b9d611009a19d7abde3a0e7549b2009bfc9d5c0c187c49b5d34c72cb31565e7e4549e4d75de9ca2b74236f26dcdca18c476b82d91daee0e9c73ae3c681fbb6b913dfaea7e9cc98fad16b2ba492fff28732e4d76012c08745db36a55243a9bad9c42c372914e0b344fca9050c00224de8d3b361ba1d0b47247f32d8c31330857147ed5802bf1898acf3adcb95718a0f1070356118ec4ad6b44cc0121f1960a09b11409b0b87780b303206d2ba2cc3e860e045fa730506e620702e91a90493897ba7723ee97e4a4933da1b42014237ed03ad3a4fd0b00e33155a4a32fe773221f0f711241def33c700cd23073ba3824452d00fa48436aa3788adb13333482ee3aea76002ea6fd281fe3ca4a18dcddd81fb92ffc434d699b97fbe33f51178308db2c8e29a64a412dfe25f789f11ca7681bb148806502e40449d22b6cfccb172aa76f65d2c9d03a964cd5f81b5a3d51e968c91e09e6ea6290048c3e2f77a34d1a82076528234ce7127aef6bba168d0654e128fb5430a7f50542c80c3b7dbd316670bb171b10ade2c35a37e1668fcf6635b2874e0b986da8d4ed01a6b549729ce561a51df2a157fe1f0bf48c17a8211ac1eda76ed7b77351d86be506112bc50a657d058505ea585f5cc08f4ae6ab7d41e9a2b84ab0515c9c192933af1b33ab5ee8bd8190884801eb558fc0fa00500a6d2b77eb3bf8494174f5296356a16b7002fcbc95961ba5cb16b4fe3627d03c7dac8ac03ead71ef488a5e6bfc24c303b4a92cbf9add3b1ec998ffd4a9ab2397b5378b79c37ed7a2d2c465b39b8f40645a74ee19d9744653e873340c41577e6c0bc3ea920d11416f32a8ed083f22faa2330dc52ae17d8faf8c2dd5235a20238362ae6d93d84ab00c4ed0eda5bced726718fffc53fe2068338f95d306c6217c8cd7d2609d86a869e4fe05da0d7233331ca6fa495e6efab1beac02150e0ead5d0c0e5d630c836c7c9e317398a814dc28dddc7e129c938d86e92dd05c35a34633186d1b77e1a80878cf52913805422b3ef9ff38c2225cd76519df8b9b1670b60a700464e04729d3c86ef4c3cdcccdc77529a186dff3d4b9936e3178960fc07603acb9e247a2bf4f39d9316320c88f0ec4cf993b08f0e5bc05be59bc3d5c28dde716a2d70489bd3e3fbed55400f9189ab92069f1d271cca37eb86d3c2946b5395ded0c4516b7690efb2e61ce9fd458766733e8b012a3b1d36183ee5e8c2c9144450ce86090f545414b4d059f74f8cbc442eb254a6ed663113810c58ada52a7e2f967c0817baecf3af661ebc145b02e758e1dc6de738d3c30a30de32832115637701f306757bceb977d7fec6dc72570c88720b7c102b4ec992da961f8ea8d51f327d386638981018c1875e62818961d00fcc3eebff2b24e6603709f35137843db5106a720f2b69e77cb848da1a141a9abaf6bb37f4917a46cc239044a7dbccfb7ac488f146c9408929ab063adc5545abd2da9613d3d90222e93c545917e6992ce0243285b401ce04af218bdb800c93571f1ec2f4c7284537b10a9742c744ef05002c0d08b60a1db40ba8c6e1f0f73052c1ec3072a4419bbd816eb328664f4db5e64d085ea7e37ebf557ffc3f30e7a457fa6c23809473a68de4a16dabb3349cdf5bb43ec7daaec0731e5691fe4973a9c765796c0124043de736ff3210af3a1e58cc6d176e64dfa649fd0a8aec989f9466bfb40e847a436640a19f6e6606b081f9569cc01ca1fce8b87e9adc2c2772f4d060dd70ab01da155227252744328a1586960d9613f476dff3c25f714c894fa247ffb0d8aa0b08b263f842a8d76df35264b70a7e6c086f847aba2baaee9c9fb4a178137dbdd15b6374d5e1f51538aedad1cc5e445d0b5eb9c955b79cbfe35ed76f088397e9254c8ec2d1cbe2ba3cd329e2f972ed26396f85ff682eafd77dbe7d2c05c730b4ab688da2678802a064cdb6b7f70e3fa00620e71134a51482bea3fa0bdd08e584fda1401ada1d97c9c88e1744c057e02a828016e2efb5354008239afc477f507d3408323a7786ce88df6edcf3bf602b983a3d9ecb76311407e2485c51fa1c7048c3ed24a10d8cedb6d1e0a9d669c40e9e84a226c7b40e2b711eccffe9df4fdbaae560c51fc266712fd84b12e8901380b59ca0580240636703bf2bf022906c4c62565ae022e442bf10773b9ab85633efbdc0acdc43e93f886787989ffa55758b77f8a804b1ad79c8895a2ca20c6b165932f48f2c9bf1a8e6a53c49299d91201d07ee6190e48257176b2d96a3240c66730b9dd268d8bd7c0ff198ba2dfbf8fe51b879177ea338e28cb787e1984c6fd40c3576b1e202262fa254290a5485a13b2fe5c60c0f009be384acc42f439f0380de2e59c44c5a52f3c9837fa9ca865bada370efc07865ec4677db9c22204a9ee98e7885b4d4b55a3ca1f57e991a8a0329068556caa88e106e080a2f2609ac406313ac69382badce6514c3fe55d26a26cd34452e5402a8fc957b5ad0a5533fd70fa8ef7cb5f335d78da6e058816a50830a73c1960fba6f0b4811050167a88b611a5d6198fb3fc774df55f2299f252e75305a1c3313929dd6f865118340c54c97930b578229d89d41a5fd94f3acf59b98f5317ca1e34933bc2b8b26a6a526728889426e2194ff94fd48b4385adb5060db2a57d66fb4e653814dbd957c5be54286799ed3592e712921590dbc2c9a833637d8af19da5f655362c1b77955fb331b9fd2be1bce009acf4f44e2f05ddd11513aeda48c94598bf073633dd8a20469026e0b3bad5b0ebd493092d0f6e042307e576aa897657a407b5e435964a7800cd30910a199a6954cf94b9de04c5ca72a842f819625b6ff653b97033a625685d72c115e02e9790b104bf160e2c103769cdf4b51533c9a53e4ecb38714468352015a8cf85c821581f83825cdc131e4fd4d9ed2ef7d7f2a3cf36e9a6cd102ca4de60069549a7a35de5e615867b8ae2239a7220bb3cb126bd3ee72db0e0d3b597394e9c09be51b02c5a4adf96c285d5c9edc21ab8087b6454fdd25617812837005452ecece036e409eecb111abb5e1e53a9610c16b64feb372ec777cfc892566c6c635631e3ee36228d9059e0061012058caeac81e6a51ed27c40854b3a9f7886bc2336f6d44b347cff99082fe55291d7f12c2a1af1be9cef51b042c7165df022dc1bbdb1c81eb448e2b8a03e6225c2e361e4800bf3c76715c01a4f86861592b87df1b20e2a9175375809596293efd6a697cb847ccf9d148d6c801ae2748ce5efa637ce9c05a13aaaf49f53ee8fa4f6b45a5391956672e29e3d91df5882ce77ae7456c8ab7f66490830e98a260450caa65052d0d68290aa89416add0c07e81a88d915684828724c0bccd20fa40d137a40f7891a2cab813b637a4207fffef1261630dcd2c0b6d5fd558681a90471d3132374f2445c686fb8305fce73ca7b0f3acf1782a2982544f16c514d37587a6ad39266dc55b92de991aa79803a055de2bff90fded5ef1ce1aa15e342187669388802144a9c3fe41b03baa666825630a0d1a6032d1e79bc7bd11a0fc7be18d69fca0c4be140c00f863e7a631aeeba2acdc673ee61aa44bcd855da8803505021121b6e2cc2efe53bf37ae7124c7a7573edd912a87e5114fff926adedbdf7965b6e995292010f08fd0739089f065c8e39c6fdb8b8f756b7a4efa5c6ddbeef976bb90c59ac61238b599178c1e22b8735e55f76448b9b8d2a4cfff56a444d09e387acaadaf2127a557959bb97b27aa0842ee57b3a90f8caa367bb4560eec7f8037a3b7415d4b00a609ed93da7e7938fb005012a04e8404e3d346ac9d7ebd7d7f25daf787b4f477c620a6700c3bfd755127c8c5542fa3c0ac95e0266b34367c8906bd8a89940aaffb1fec0903b4506bdd730d9a13fd80da8bbf9f42a75706639f1ea7987bed1c720f613fa18a4037d0c9af43168ebcbd7cad733af290fb11d16db21a3f505ca78e232c6dd5c2e8cab411e73485f16082000a876be839738c7b31dbc963cf47a3d842e9be5c4db9f87ab38def21db88a637329a7cf903a3800b8134e07ee3d900957c25539b9f7401d8ec33d8dc3a812415eae12fb1252de5c2c263e3aa4954b3c4ad5accc4df7102ac1c410d6d7202fbfdb1ca944bfe49e95a32e331be67a55f10b631656242322f3cbe563c1bc6926abd9c1e86b90fff3ca23fdafcef3d773ffe738fec7738b22a1f29866abc8b177e50ddf2e842be8ddf7aa4a4281e72f571b003b68ff0139ee9ed6fd60772fece52c608410c2f71e8410422a053854d08a10565ebb821508843056fb2af8500e2fbed7d2a20ddfabd0b5a84e9676427bbc9a9a3e3d1d95d7688fb1dab7ac2dba26e605513957d2a2fcd96a16575fbeaa3c76cdb347df37d4348545a043d86de28632e892ec981eb54c937a86a64422914824122909955487f293c7a6a5635a2c9b132a75d3302d22914824128994047b4b4b4b4b4b8b0da98523cb308967684a35a6d168341a8d462412894422919278a9977a29962175854add300c8b388647a3d168341a8df64422914824120975c3bd3334a51a93cd9e46a3d168341aed694f7bdad39ef6b4a79d917f2361a6c813e3a34e664921368d46a3d16834ba193d370b8754521dca4f1e9bfa4a6c62139bd8c42636b1e995d8249ba5e59c1e8f7bd7750b8f44cfcdf242cfb37771ba248032346f93a941373325fd39cc24dd50a39a458811cdb1cdd93b09af2ca1c4cee13b1e9dbdc5f08210c17c30bc04709cbd4dcd62cd34885f10575b33cf6e7aeed34635bf68fc68238ba979f48e677173e9689a67ab7534aebf88b4937077d1ca9aa1f98bc2df687fc11d016aa7b07e2d76b84e5245fe0eed244fc73a872e0164be187ebdc1f08088bf6518552208cc6b5c918cb32c4e748c46ae4f4fc7fa45df67ab35aa4f0d5a6f9b50066973b7b51ffbd449da2259305656189273fa765883ab2f5fc3ad9a6601c29f4c8530cdd2a48631cda2c39fc351b30cc09ff7a9597ef0e78d6a96ce9f77aa5972f8f3be691601f8ab2df194f2428ca0e0f0e72acde28357fedcd32c3df873e715f7f75e101f8fbe2f08900d8f5c45c2aa4bdd3fb47da02a0dda2ac57ba0428cf0e02bf09011cee3c929f58c07caa168da877e3edbb40fadf1a134b88ee7a78d767232b50fdde1b312ed436798681f0a001b1c8684413a681f7af2d989f6a13accd0946a8c4ce0857e303121fd30004d7b0300b40f35a19165980d76c25058490910cb2963d63e61361f5af273072d46449ae1d0a4e6c4302c18d46e83360d771abc29cd0f9d9f793aff03c54a580d666a90c78a6950bcb160b8e3704e6cd8d832669d190ded43390f04c56876f0aea8102044303224ce0c8726a61ad425a9d3b60141bb7483360d84a9f1d4d03e749be1ed03a0d64807b5623833340d6acf21001a6f48dd1d277d93301a2dae6f191fed43b547a1456efc405fdfa01f9a3d0a2d72c371d0d103e0860f348339a5344d6636b40fbd3e547ea8f5365070681ebfa2428c0480532208cc07c02b148f6ec33314ef61f3f17e413dd0ea7fa09c5183da3bca9169507b0f54480a92e8c17f3841d97097653fd078c30768af685c32668da9f78f0f3e649c8683a2e8e0b569bedd078add34a8dd2986e2aebd078a9d2866736a96c71c991744c44edfbe7098ee2e250e1cd2298ae3903ffc50bdcdc50695ffa1f033aa55b4432915e5100fb448e51cf5986a16cc06b3e91c271e35deb9e5417b9b9428283c6c2e9173149ae2289b4b0aa80707f5c051f94ea9f340df73f4fddb382e94f5c0fb7a801ca7d42bfa4237b21406817ad80004c0070d0745f10f7d9f656fc3c1d597c7e19f8f475a4d70f3d125ad50f4d2f70df3e3db38288a4b6ac33f9b8b8d0f15c00d17c00d2e0814858ca0d840e17ef850ec77e371f9faa3d277740dca4e83d66cf4ed1e5abb1d68f519b4aa7c8d00a055e584562cf5ed3ad0da99d0caa1d527adb243ab05f3ed9c482b96e4db355a3131be3da34b408cd693af988de5cfe1dbcdc52a52396f45441eaab82096296404d2d0f3b7714eff780852bd7010f81283ec8b27c8beb0fce18b2134652032c6181547b6568ec1124671051ac660e612f0327aa8d443d10b64a9f9686459479b3df6c7208619e6091ba415b58b535ff83d1dccc93584b106d8bc708178be832b9538c390ddbd9a7d76f935c833079f0e29a7cbd5c1326d4b497179ee41cd4b9658b1a482cd252525cb815256cc1cca332f335c87b2c213b8db153b5f17c63453c9346d635a670fd62a4c939d0e1b667d5df8e06e0bf627814028e73339615621fe79a6696fe3854f47a631333384507bc8146adb3c823dda9e705c5c4a4cd64472eacb87b161ccaa3de7a874eacbbfa7a38a96dcae0dcb606fbc1c6b01f086ec71967586ec2a819725d49898b14c69e08d31a92b5262fc0deac4e38941c8e09370b5e5eddd094f4c808223307877a33642a181f70cb182444e36379776712e932b85aaa1b1a159e66e08e365c12a46cb9212bbb66bce4b87cb73ed700d20065906061860a0c112233b7159d9c53fb72c53c6c1419605ee0022786567b49dd1667c37178d972b92396743d45d6f6faefb0cb1ff43e55f3e5bad43c6ceb460d66773e4b9080d18b181245c3e319e3d07afe47015c9d5f745151fd0dc33c0b306b87b498ae018615629a56495aff25baa345d8d55b102d329754a560f66bd91fa1ba91d643aa64e0d0e17744a9d52e7080e17f8e0c5004803203d1dec38603aa5ce111fbc18800f5e3cf760d60ee93b24eefa4673d5b221c3ac1247c7340052c7646476680e70d331756856609a6049c90124d689f4eb92160790c42638187b619e1dfa7870b9cb6ba0a0e25f19ff6a9ea0420b2c94f102f8a78589c86752dbb1a3fdf28bab2f09ee3ee0f91fd7d2f71705d28301dc5910c83a13dc01218257faa5f41d6c49afa4840f73f68c882234c02baf024570179348823b26620948444b39a7c763aa7307037c587eb9c62bd2af6b07c35db8dccb7f86d8fa01cfff80fef2bbb9405fcad00052936c00ee26afb465591ee95bee2cd980ea21a771623097805f67369b65433c84a50de10efad2faf26b714a587fc29dc7dad71c155ee1e58a545e718f79f2e4c9b0eb1ea65b03830f272bd5a0d7e9a283a463f3dc3171c763cc2a616e583796bfbc95aa56aa872546e70c8f12a9c5058ecec94a5962eca0846787387650c25a489edb939c7e39cb66c7e081f24adcf81bbf9c945b0f94df25f62b0e918d5f4ec23c1dec71665ad5079b678779d4fb708a42f656300f131f9bf818b90add30f73ba3c06a5d98524ad99ec74e2ccb25b35c6e59aff497e42830357e16172d8f96d53d07959ff3f2a69ec730aeb64bcf249d62ccfde51dbc1b84aefd457fb4c3ba7f221d328be552aabc455318c4b0e2b4282327b9e39a7b2a55b70bb2ec79cdbcae61eefbf38e34d1c27c2528689ec6bf1214a6cf2a6da39f2136e73887ab1cdffce5330ec72de77028ffc6d235da9ef1467bbce770b88d79ebb1791c1ebae48fbc7197866d3c36fa5ef24bd768fb52fedd78d0f719a66db4f678ff0389e89b5bbe711f886e619b8be5d8e6b2f5e81e8f3bcc33ae662e7d97d8a7433a10f8efe9906ed11f995b7ee4f7f7b36762335f1670b0e2dfbfcfb84f03a25b6eb9dc5c2c97bcadf3bfad07f345df6bb4befcc5afd19dc35fb40671e22f98bf5caecc217d9f5125f6610df2eb189db1825204f2997b0bc4cbb6110e3cba0001240ce8c20980740009240ae84209de0792268cb8c08ef980b780f7de7bef75336cd8b061d793c748c8de7bef3d0a02984dfd06f87117f1cf79e6831041f2ec9d047cb0391bf80717424e10297ebf00229f1cb2f7de7befbdf7b8c83a2b59475e8450dbdddddd85d0ab585529b08a109e70439758c1181fc6c978b9a11966cdf14a96666d12b842af41cba148af2084154c911e0d9b1022a1c1934b5ab1ca60675996f1be0ea7be3c57c9dbfd304e6da26905c2bfce181cb2f7de7bfbdedbf79e11b2c7d5f772fccba13df9743c5fb629a2c5004fc7eb87e49f06b813e21fa7371efdcdb53c1dcf0dd0c34bc87d96db21bffeda09ed467cbbf49516088222dd6a011ca45f202f1a248c9132be5d0963b60adbdddbcb2fbc475425cc2f5a85f8cbdf63815e09f06be215f44b7f69fc6e8773f2eb96bf6639e15e834cb8d7a02ac447cf4ae8be37cb7bcf9f73f572e9259e493b1c2ab98bbe518dbbe81a9ddc45cfe80977d1315a5f1ef3aa25ad343e3aef0ab141986c5ffe7249ebc9cb996d5e67023afe3a5efb77b98d6a54bae6d9d2cc355ab5ce1cf33933bfb29971cb18ad7289128ee65bb6bb5fc2d9348d62f4fda44b705c8920303f5de395cd33ef60ae79766d2ed9ee72e87b3a36aad1f780a8bb8f55cdfb2ae9d1e1efc6435eb42dfaaaea2464a4b758924d6b12dfbed4f215e9d12f8734ab36970bca4b721a77b0a2bc8f03021f4b5e61872f72d9061d06add793f8ecd573435e619883b9048c1c8bb7da5ca0b5fbfa05f14a4a3c289ed2590a8a27c28ab529334babd7bf925faf25ff68fc7aa591d2e550d907da7d6c7381db36f778e55d520647b680c21e29030b23aa6b310448d5544261881a247733b6e4dc6d8131f7ab2aaa1c91e4a136c02bb2a565599665ad8a071e88dd8947c60b43e5089315ccba312fa659a49cb3973da664593731e0820631e082066cc85e4ac531f36e94ac937c61c012387ab0e4462923a3448af90138dac2acd6c93ac15146061ce950d33698f5337af6aa43cd7f46d6098eac930e35386660dee3e9b8cbc11d7be4645f8db5d65b73bad31d3df32ca31eaa32c6dc8f8ec21db3b0abf04a87ab2d1caeaa749dbb0aafac6885ec1b4048d7dd595de6ec2872669657ffacfb4ce5b396cffc3d961dbe9b4b06f37259b6050fc49ec5b3635c6d51c2b35f5c5529c2b34bae764178768babce038f0d368a676fdee5aaafe8e960ef3461d63599d6a5ac6b7ae6d19cc615e9b8b9a9ec9a42c93442b1008552430ad50614e7a60ca8ec06851aa1588042a1501c35b4007593a16eca80ca6e50a6948a02334f8f715986f9e5d945259331f7b11e185cebed5f34aecbdfe672cdd36b4ed0b064303f6099becac2ac70e60561997a5c3578e95573a2b24ccbcdd1d32184594f66467f32c3433e9c793a2a9c79f61d3d472830d85664c89462524fa4526540a5d490d2506a306db553659079e8444cea89542a95d2cae0442a43cd2b66cd4c2835983694a96445a7f41dae2adfad2aeec7fadccf5cd332c728b7616e8fcc35ee387a6f3d382fa3fb11131262af813986754a0f5bf0ecb5c65b2e9895cb071af5cbfda83c46afb8de7a707e2fafb005558f9ba7c30c7333d40b623dfbe55eefe0ebe6d965869adc454e839d4884ec7143ccd717bb2cebea1fedccde5072ecddb4ee4b874304a12ca3d54d8332fab140e69a6b5c1c71d54d83784331466231ab451259a88f6d98b58ab9792aaa185ec11c7ef40aa9888f55be21ded6ab98675ab9a42ff4b658238744a505217c3b8766760c667d2552a31672ac90bd94aac944b1cb0d61141db31573c38a5aa72173ad53cc560d836e58c50883d69e6b319a1419e40f7377777777773bc3aaad242f985612eedabb5b45a5ebdcfb3514b353ddddd68957aa95b292a036b509e00562bd3d835a3f315d9260c909779fca9f147070fafd541c0ffeca9f14a6e8e29f4b12aff0b34b1b998459e4895d5a7123049aaa343dbba482579e145e00f32c679ebdca9a17c29131f2a4f0821f7c95489eaba4a9f2888f2431d4071864a80f3010d986e0f791448aa865969649edc4dd7bbe0f659d9e857a4e7bfeb8faf23d645628ea1b4f02aeaf1e6ae6bc58f2b8fb1001fdd584a18b7f3561a0e25554bacedde3991372fdc4ac92f462898f307cc1ddfbaf92f4ec92c42b75570ebfdccd9f0861eaf04f0a50887e0737aa9d63b840ac26b33c14e9620b53175b6c117a30fb5400fafa724dbcaae4638113849e437f096590beaae4c3a3bdb916357d2518d4fcdb7abc120cb678e62a10fe7625b6048323bf30b0a475037f6f9e7850168bcb2be426777bd113eed60908a1b082210fb92a3924541662be13be971c28010d2ce8020b344dd042086af1d0a7075edcacf3e594f0c11b5168613fff4a23235ff2af349ac2aa50a0f2594704f0ab96b14be041010d46b8c2cd18e63087304290f3063114a0d005183250600614cc0006a1298067f76689801847e0c20934bc808c27841e1454580747e4c00a983184a10b98244f9057c440910220ac41b4050accd04588b3e0a8508529c0c10822992860f1bee0862f687183171069839105ec849757b1f2bce5550aaf4808c550841fd0e007271acc00b362ee20872bcc2d0ccd0633f8c2570fc3d4fe95668085afd32f0e42cfc3195ce117e671271d0bf379b340c9794e2613668af30a845170e1299c7fa51994befa579ac1155f5dc5aa9ec84017e09418f078bce86edeee6ef6a2bb211762c4a1695dc7cbfbcbdd0c9b9092527537c36d5e2ff072ecae2257db2727ed456fdceeeef674332fec877aa8defe26a8a8c488a3ebbc1089fad4a7234736b5292f082144dff4cd0ed921151cc19165b24c2ff5525ee854a7a4b4b6f06c9e0d736b5a6f570f21908ac7ba120b809e058f672b1595ae5b9892b271ab135640909322968b15abe5f5a27b7b3b03027f9f077cae76b9b0d57215669dcf4be59fb002d6d9e71689de1448bf4ba34246aa76f80d77bd0021dc1d41c65a0d1b5bccf5adfd6d3e389071476fdf2a8390b7b53141f768f28b0c6459969d68a69801c984e497d83d07983a6205c2d82d6e902e8fe0210477ecfbb6aaaaadaacda52f67cf7c34cb86fa75e50022b8631f47f00afb12f07dd4d4acb408c12b52f60ab558258b5c5555556dd5dd0dbb827ded6bcee4f95297171d13192211628c11422274775b3664200244c128a946ab3fe6dd556e5e2747bae42a18f333c4e51def5cd2abfc2af31dcce1aae7e3c6d5f951e35e2ca17674e66fa17873d9c11d9c7d79b79457e496d8bfae57bdf4b7f590aec402e6308739bce43e0df8c8714770d7fef21537693c162418d4de7e44b3ec6850fb0a214019df5e414f8c6faff4db3d1e29e796bc1d0f96404edbd67a41356322a223c6ac2b648574d630eb3b1921bb881ab53d7a16291169982f0f23fd0c11dd728bab4b24d20f8f7ecb8d10c21d143d6f12e05005f3c4acef4444058ae0958d711fe4d15dcba639b8633166cdf1fd393a6ba860f6895925a9a69ae18a065911444854c8bc8db1ac1df25047500d3434825776214743435315513f3be4eb7e56664954f8c9f3e6b22524ccfa504b5365111a3002f5e2a701fdebfdcbd54f8ecf0e11c0ffd1dc0eee98a12f850b77b7aa1c3eb8f0713589af7ec0961c1c1ac8241609b3caf7b6f8f5cdae10c9a8a8b461d657aa29af790baf4088e21cd120d654521def18a12232804c477666a7432f9f944954c84c8a79875696a98e68e7898229df2b92a90ff54a525673550cd0c22bfb5c71556a6d59964366d96159d139724152424660d78659e5cbc00af04302610549dab3cc334946c4dd10de2988189955ca6057ea861837cab87133c6185554d1a1a2634567668c31aa88534400490490c47cd6d1fca235e52f976c757b6de23b4bf10eeeb6dac232d6166b0be3bad71e44797922637e76c6615c9df2535efa6ae0a36c008eb7aeca07306e80a962aaf00ae434af275c8d2e3ddb7ce3529151e907a2cf58db8d470e879b4bb519b1691abd7ca32ce26e08778cb946b36a3fc254d1c25bad68ccd20299abca2b3740efd8cc966a73a938eda5da5cd6b34aa43dc3b0e8793986492501844130554c98ad64115a84f0b1c57377af1b63d61695ce89c508ae562ebd48195f9b86575ea98818cfde5870d78c7a8be70e0df3334411d16b97c37b73314283d7d631bcb2db1432bcc271261ac4be7987c3389451dcf1c97730df709731b171371add2f36c59de7b3bda9dad777aa2ddfd22cafa5b6bc74a6914d239b463a6f2eb23d212371c7984dc31d7369d615692be2951d32e2151712af7cd6df573bc54ad3348b117c62ef7831abf6954f9c844fdca1f86639fe823bb6f9ca42d88d6896159d9e574464663e666e93c4ba903d9679790669b57fc2a0f6074b7c84618a187adb2bc9624a2e72c0d8d10e77832db92296b7c505d14246a2bfed01ebf4c73a3b33166b62f1d120f69a0e19f3e4db8918c11d71b55df34ca33ebe989f213e0d804c7c86880ed921b7300ed8cd65471bfbceac154bc32b1c675f2cb6b447b666b768e2e29a58185e61e7d0a5d923ec126175710bc31dbbe456c85ac11d16744bdc9dfc46eb4af1cfa659a49cd3e371ef3a15151fbca239076110c2dd7b08df7bf0555b5567a85e550911f21eb731a7d91ea1575e21296608772921dc89482419c3991512a6aab6aa397e8a6a14ab1cf517a9a7a347ddb00676018970e9d9e114cc34cf5b3cf38e782b38e4d98530887d2984e18e77e5d3c1b0a407f32d10d057767cf374308f786525cc5a53c85e4ab5a4f8f59ae3e11028da7a600f45156ab62fc7af1d8a78857f1dd2f0ca917528c5c2995f874316927e2116bfdbeff9a6708e327e5d0c06a5b843750d663fe71ad5ef3deefa5f08fb4e3d1deb156a2e8abb85a2e66c643177b0955a2db2976d7bd3f7d0a5171179e8f230cbc54106f5be9cccb22c97af3fee96a27077c25d91e8904206555a6f3cd86137759941f685b90934342fc83a5d83ae41d7a086cc6856cc862482a96027c9bc8f5ccc950bc7e1f4b7594d61b63bbdf691183d7bbb33481c7f5b575ae4c7b00ce6d9b11b2cf5ecf28b4dc36c1a84d9cc903141c20760b7680de67561198659feb6ed9bdf327e3ddb3a838a19320d5ab7e8721d914639360d82e1a4501b6662b3d3c486a7654db7e625afab0676c92b46c8e94b464cc6eb9a41c5f38c196d469b41c4dfd6b45fa69e9d43438c67cf68dc3cfb5603a68f6048301b21337236464df690796d9133b1d9dd5c4c9070c74cccfc95868b2261994c4edc99d8d4d8014761625363079223e188bdc60e34ad6b30ab15e3c2f11dfcc090febab7095c218de3d4c0c2ac263364264d62619cf6f76ecef0acf8162dd2d9ed8c9e395dc4889e7de3a03a3073868ce43826ee5044980d86043bcd9069968eb3cf90e9701c530d2ccc8ad9786253eb2535913121424d28cdb337a9f4ec26a6679fe1988e704c9dcda508f65ef45744e421cc33ce8484928289d9cc20c220f66d7389dc0c19cee59ccd650611eed82deb8acb2d8a44a766902e3a43863b131b7e6256ce0c9967e79c78a59ad83c9bbae0d87090f08a34b17941bc7d3ad6258550c49e6d9be47c8d20d0f26188164566be00ffb42062b2a830b3f5146f960dad77b32406d3bffabf2c9ef0c15b253ec02086269730ab7ca52ab2acd3638cd17063f5f65591db5a14778fe7443e7e295de78ee279efbd9599cb7577d3109d783c736a52ae26278449e93a7794e719738cdc9bdd0db518778cf9fc6d44f1f59cc0aa1a32518f65e6e36a2739555a24625a59152d8b43b7b59662aef73684f5350424d2f3da56c4caf2fdf8168c14cd18cfc865ba8f2a1fb35366ca6cb6b06aac1af8d8f21578a8f21a29548d8c9c33d9c88a3f007b539ab72ccb825d13ad86f061b3cc5c025ab4fa6ac90b5523c3359d040b06b1451386593b32160d159647195e894478a549bc12dbaa99432629233d6732cf6ec5183b23d2349b82bbc8d53ecdca8a61185321094975c9ccd27a3f2b833beedc3c119cd414dc8dba66a36c6469157da18bbe9045ad8742b291152339929f599a45db8a67ef5841bab08a6bb5c5a921f8378323267b29158379ee2b9034cdebd86b7bf1cfdb6bdbcc3ce94b00918f79e5f7b6086ccee1fad4b4ff310b885a31e1d9f87dc9f1f7781fbb8836f3d2ba893735f1c6146f6ce24d3c3ddfd4a68937a266b1666662cc4c1ccd449999489a89333316ca42553616aa3a59a80a65a15216eac64255a3669152a69291321549ca543352a6a291325549ca5435cf0e4fcd226d20a959ae9806b14b1b94b449499b1b6953c1489b4a246de4cca4f194bce6aa691a15996ee4319eab06c6e2a4c7e3de344d339ad2e38d6c19d4afef8c85e2995f670b1579e646e6b965aa9b92cd339436b0b4a298e72aa6571469bd6a3e24d7e16856cf571992b47a2e4e48a322902ffdaa6996a6a9790b44e55fa935cd3206b3950e49c8ae2bdb0bc3a49452fadb30ec9aae834b6c0763f2233df39750a603dd7fa512aff3e79b52ce120ca315b82ecf24165798781593b1f41dbc5207fade24964c8b74651b8783611649c3b0064929a5dc8151de5ca05ff485a4945256b1b22a4d0a30cf5710fc19dc09c5845c3c96cb9f69fdbd950a4fbfd08b5f096bb6c29aced6acef8eb8f01b85e9378906adbf8d88231a84bdc462aecb1dccfa163ac7a199b04683e19682494966a24c9489b29866d1b84ce4f9f7987b8865c518a565edcc445535e26ebf45625598e2146a22c886f10451c888f43a555440a0a75f238d367820f64aa3da2cd26032b3461a1e2b3d6e2d37a1989968022f14615231295126a28111d1885244441512b936b4b412c9ac2513b598943a3bd85d2966d57ac88c010de00c663d815268ff6465edca6e97834f8795691be74deec15caee9eef2eef22e9f30efeeeeeef2eef264d6967797774f362273392803288319d7e979431b7a0f54ddd07fcec3eb569c86e5afbaf1300f6fe5d3a99d97dc2f980d218451d910bc79f60f14e3c908e3892a27888036f45381268448420551a8f29750565158d320fe58a0423d7bc5c11a78b2f1aa5631ed15d63c4378d970c7a7afd5cd10a63f1d55543155148f05923c3ba5c7344cf6ea86575e29e6e6d9e3149b00e8ec5519cc823947211f873c47299e1d8a9a05e3aa281e88fd925cad6c202dae563c8022ae564180a22ae6e96057c2acd54d15e3be4034aabfb84e1b251b3a9c4df3eadfa97438736e1e8fe6de7516e98564b368febc4e6ba659342e9b53721669022f243d7b314219ee7ec7d3213d8b5cc418b91feb9667cb9b0bf4c8c58cd6075e74cb651317a9640a351164bf200653c888744c019957ebc8b3570b8be76a59114bcd1263a6f4cccd3d1af71a248aa5cf224d847b05dc78f40e7e28ad37e8926e287b5b8c95473a3b4eccda3d53cb2337a198d52259a46651e14d021b8a22faa980f4cc33ae89cca5bf049dc1a8444c3776452d959a1901000000c315002020100a89c6a3a1309103651f14000f7c924c664a1c48845916e3308a638c21c600420000001043c0d0100d1508dc7ac9d01179fc4056674398e98a52485274f910fbff4b336551b86ba4279a71b316c3a0feff321fcb89f5ecb358c6736b0685e450b37eb5bce7131ab807e1ff4509cab3baba12ed56827fdb4c7e79fd697745035f7d7606babd8ac586f2520b14b553dbf0c5537e016898b559f4e104e928874b9e42e92be0eb81ea041a3ccfab9593d49c732dba0e1d89efcb6ea359e79520823ca0a4f964da930d4558579a454dd5572ffb1b85ad35ec4dd2fe74680f3f20e384644831db7b0bebfc5f79580cc5111ca29c65f89a3301430b66aa69bd4c88263d7beb7191a514e6f68ae53cf9db4808177a765de0560bf93693b31638fdeb1d8359aeeae23466df5364eb3fa63587599acfa929dd8753664e5868f49ce5c6d74cf97fb6cc7ff09033d07c15673434d797a5b52300240ae9d4a1dda6144e165ee51454bfe3f50144b336da653fe1754f43b06271bf9a1fa334855f471de0a0d845cc7f708ebe7ad49ea37c54ed513314a1befba598715392cf03bc7f3bc3c6f15816ad5b8b40a86984fd5929f43999371a1b03d893316ccade10da85cd6b1caa3008789dde09735113c690da9bc1b5ea2f1578a7d9deb6702d377e26a6ba8399433ffcef400a213920614fb7087b38905422bdf0f85663b0ae8d5ebc523d8f77be21ed8b8fb70a6c7094d6332dc23b08d32ed6569419093973a6682c10763cc6eeaee71f474e47aa6d550be90083c0886af60169fd8ad4cc6206359d0a514dcda1696f479774dad0bd1c9377c777671573901f83f53e7837cd9eb6a6c83759b863ba8de2b506cba42ff4cea03d76c272e5276d0a6d539b350913b9a56284c5316c5fb42d28cc6db4e5c88fe30e3ac8dca46dcb1eda033148a83fa2bef33422d5d5be717ba4cc8d13cd5cc0ca32431ddf310817b087724f8a18279dc9fe7bf366c3ada8cea4defbb0c742eb9ba1b1b50edead71c7f67bc444dce3305582c004fe7abf73fd7ae68920cb650dd8a2ec9d05273322e0a2cd438b3208b529776889689205c2b85f3ddd3e7b8151513a46b0b8fbcbab5959892e531d2799624cd6725e05c02209b97562a8295478d4d75c894a38b9275e1d8edf5e7ad15202131017fa9ba71bef8ca2132c43f4e55bb474affb4fada0a599840e88e34bd09f979d9cb19d4b2382f244f53d002ef13f309b71c950c8b4e8dff016c71901b08e716013642e72c9af8afb89c1b6b03e9b9c2e7201000774f88beb81b5441ff36cd299f9e00bc3721e8451132d70a2875c0531aafba8b469f0f46fb2d1c893c9f8a397c02e4d0bb4be59ff8d020029291491b50ca2ff205a2ea1f1c1c7fb027bcc198615e75904a84f8fbd00fd940ed8d8d08b2a169c9b8e4002656d0b0f0bc77163fbd549d216a85f44b930fca6f7a037499e9478c1ed6a5bbd74eb1e38c3d3edf1fcac921137d1bd95f0e63a154a116ca95422370be54e4b8de30103b647bdad05d3865de73fda6fcd65fbe77b03bebebb9c521fa3d2e8be4f3921b0ee69d2b53d1d52919bd6d430810f3ed590699f08fcd38e6e84891ec852e22c02bf87632fae8302ee4833d5ead484bc65505eddad28c8676434ed6f2f2b3334d7ae6826b0755820e71804e69ba94f955173da59f3645437434a1721784d714fac5c73c29cc2282a7062aae157a0d9e4f1f13b41f37f6378f962b2699063005dd838075ee803b67b08acf785e8d0f9c4b06468763c07915683b1cda2feeb56f78cd97bce391b19f2968d037dad82854b0da858ba1d86e8ceaeb673fe0ca218157bda709464a8bf66aa6f672fe880947d27b1bdf9bed9ebbcb7bd4bf676ec6cf1619e896a9d499b6e359135cd9da6bbd090c284d4c9b9b1823f11b264508e1d24d12bc949afd811559c85177f628ff36d9bde7b7ad0104051778ea9939800cf4cd8faba8daad93f11e43a3fef5058060b8c43d21281edbe2716215eaa87ad502dc3a392ded311c52f95614c465ab0b3ce95fcbb4b2fee525af316dd960d694d71b4df1ab93ba70b57afda0614d9716b15e1fd841fe057d593e69f2eeb669713fec2dae20b30174abc16191c40b3e9fe162300dfab41fa114c19a9ac0645094196e768c0abb7af7eb4ee232985164c34679fbc91e1b580bc193539c70c11ef17c28e1b1b9a294d7bb6780533291882956ad61dab8ffa23ca7f3df1f0c3042a5b591bf992c83aa100cf403bb8b4c725194c7d2fccb3d4685a8f606f5f6a8e78cd7a9c5bc28976468945effe906326d7058cca463a9a91b99e0358c14ddb6de8715e9e15d12636340078a9c415a981406f38a1de747384aeebc5f2276c307e82fea753d8757899e6614cdd2ddeae8ab00f790b60f4f6262a73ce339f043a39e9db6b6b784659c08a5c8ddb8d0d117d2cd8fcdbc438a6768c88bbb6aa527e3bdc9d8702b2be96efd0996a282d7f36898ca8b468f756f11dbbd46f117ba08f11df04961101f2d32ae92326a683a304c089402e7b105ac6f8dc6c042c2413d389472686ee0abd8970c575b6a7a300fb8f6575cd00c9869351361c8acc98acfe1e26a34c061437681525dbfed4609aab678cdd1f18836187b64fd8e1ae8eefd76b76d6a58db1b0e2d1e7193cebc4b6a1f9ce5db9f64b2927065b89334d37afdb808fa66cdb8e4728e07413d1fc7e7d925fe0c347963ac2b257a1821a3ddc5a35e84d6ccf64f1202a00496067505e13e787d73782f0161462c6f3625d7d18bb736e8ec36c98bed42b909e2225659133db90244d43f804923691112b37ce2ae75b13920e6bb3cb9af7b4078b34ded96abf95427e0ef3396deca310efc07df9102d48eccb64cacff25e1192c917929c289a610f9dfea7de18102688420fca97777db085c7ca78173db9481abb50ea9c4d7121e1b0cb113dfc3aae48450380e2e9eada3a2f70566d70d8843de6e73e00174722f7409d11e84d6cef2f09cac8b265d9c9d2154c9755e7a9f40e231afeeceedf0f8cb7948b65f6a1a0f90a1dd49107a24b8d60833809e2f42210484fb2ca4588226864cd930c157c13bf4d1270d0f113ee770ed2167ae51a90d7179cccabf5a92a8d0432fccecb40db66798b7a47e3aef87289c8dcfe47413e9f2ad1b2b2b42890a9526ca83a0b8e0bb031812a3e95e735e9c567b28bd3d35cbc9899e067d3cbfe28a2b369132560fc5317f90027d8b9c3c6f24bfbfea9fedf6b2201f83576f276ca6f8b9f79025e892348161d4b53104682e17a66afaa735ccbf8f34ee70aa0cc519b5e46044f4c437f372b3c44523f9731f3654cdc82ea29af02c2a8ec46096315921d581b2573e0a48e824a84fbe21b45f988222a4cfde8a96a01a6a76c22aa82513ed944675003c2eb27a0c663888fe98be637a16089889852264f16bb549e98b0c6626ba80ed94262ad0ed85a4375c3192b78384e4345b8c1b52aa4e2fffd65446422f46f350dd4951a4a720657715d7c2b2ab3bbeb027cf4901f052c53b56148abcfa894ee2f348a05c55c24a6a23580641bf7f6eb6b288679a9cac6d0a02e151216621c4c45e45d614a7b8ab3d2661e78af265d3d2fd5979ead6e676b6deb6a9976fdd9d2bf0c1766c399e0b2fb4a261ca8ed03f545ce71b563aa7f1bef58e984c6cd21d4678e08b98c0b88550b31d1f7989bc07e0e9078601aef360101f7f4eae473f86f7f473cef035b812e9c03c093215e501aff06b9cea7d64f7e05bfe7baea51b7713e667a7b49c197b28fb82b311c63b70a82093e0024a6d66a3a2afe22cef5e6a1079b7c6e029b2ce2b1a488966630c430592807c22187da20eaa70a4bf390ebc02e284da573bd95c42b186844368846d0d45b0f14a385c25f5d06ab09040f7e15f6f8e66266229042783ac09c474d47ad00c59de871759d5d2f8778487d98db0d75afd0895ff7ffa176860f15c6830accaddde0082cec0181a785bc9813e55bff0211608c59ddd630455370119c744012739035a210309ac9f3753a5be87d26d60fc3a52e63cd73a77a8a5b3513a63b40cf9683f98978ef44e4cc04887cec89867d4d3d0a236a192352af24cd4b63eb35dce22b60e895e121bef96ddf369cbdefd3db37cec7f463ce9c7b1f0fc3c4f372a0cc2ab9029a12d44edda7bd33a949b89f75a72170806712bd07d0460667fb795d0e0eb05c36acc9a0adfdef1af710960717716c48dd4b34ad4938ce4483757fb841b406c4062814f67db5dc824323ae869330d0f19e2b31abaeae41c5142332b4c5fa49d012d2ca3bb9684c171c1a4712ce001eaa0b6739978d1b12be9ba495a10070f2fc1c006742611fcd7ddbccddf7d405d7dd51640a70a854bed770b1afc67595fb4104140874626035b3e2c1d708939614f2cc7c1692647a41a2e22fb195a34d07de3a4df366d51ace00ecab57de43616c52f60e82790fd5ef0e7e005e14c84b82e42eab918afca5b4c0585f9bba0e8cb3beb624083ed19abc8b58a79f9bf705bb999b16aaa93dbd23ba3b5403cceb58993dbef259d212e55d0632fea0be811bdbc5002ed7555b653e9acbf142ee7258208d4871d03286a2a291b8cc502e77555554561275e5ca9643c266cc3dd4b07c9e2c62e38528bb72e91c932dcee4c62eb59985fed729b910b0c8ca3aced5885d5399571529331609b0e3422b1f2792223210b7b6d94cab3e8795df36d618230ce7aa204b7b2ed773ad92a95fab6021bdabe07755bc4ade0c0288499a837839b05676314907161e298b27b933b4b9e0301e852eef16b38f4507406089b42fcd068b39385095d9384b4a3d25312458276b6a49441e6b23ca4dd5a7dfa4c5d3c46c9b316b28bb9f26152c0cd132b259679dc2ba950d301a9a1ff2bcbebeafbdf4a4c9f7ec8d88be1a38bf682009aaf46560c3752735d9eb16f5e0d6571707386f014b24da63277abf44c57807e0ac30610f29f8a0f60f706e9182b92e1071e65c100dd839c5bbcd73223e87471ecbec200887207fae5a6976ae30f2bce3b594afee10f7a1ae2e76a1a98406e2c68977e738c958439fc566423ed8223296f578be63a6200469eb0749c8604444c9b0cb5925701140e6f46e0a352a9a39cc3ad05785d06508e238c6aae941d51d10f7fdaf89104c02f9271ad90966e6efe3435e47752a4d86f5d596c5b592b862d52e4bd3a04750ce84d7d6fc0196871cd21ffde7795a37dcc3b2c5c6f98eb938bbae4073207570f426cf052cf686ea893617c8a4ae5b37c1876a222ce755f720c16f5d38b3b492f90f66e6805776e1162b16e3d2fc0d07a9e790718d8e0f32605e2a8e4398df1b830d6757de645f7918f875b27776182b879b64c7446f765ef5ad155522ffc2e1840035ae1fde0ed778c827ac620f27cc89fa76133954c2f58fda3e21c28dcb2dc82b0f1c144dad0273b7f7cf1e2675bf267a3ba80a5f873ba58972aa824fa2b499401047cd6e81dc2b8ef8de8722bdcbae7469f85e3f36db3f4438f20367a13706c0f06f5ba169e20c557da9f3c940a31bd24df490284171866773e0387081e207e278cf66e8e9d7a5ff00d5dc0b41967060c6495819de7c0f071aa28d990002448e9c5f4ee67a5e02ca8f7740e922509d21f28d85ff2ca6f691ccef71dc4f4e134602cadd2e0102426014da2fe82710615f53532e051093288b9225a082db6af33818dc847d1611462e0753824d8341830454fd2363ded04d867e4f0b84d4a116763da865c7fcc4448e461da4324840315985a3a3bbe839a762fa47ffc0a407b4d338601e940a2e22b642b08d428c2dc35adade78484722a5498156c44319a546ea44dcf7d7b92f236a088855de28b2a0875afb331d55d2520725c54e6c9e8b9b905f2e0702cdb53f59e08700c9bea5e247e0ddbbe59148b50215ce611e8205e73e58e2f9b8f857b43f729008b421fee93175cb3263ec022893d4b7ef7e7c862650fd2ed1d17e9c76a731171504f2592b1f83e98a2fcfb501dcd4acf7e3dea4bc0f68949edda32857afe0e18d7e6190efc5379c5fe8741e17636f08085bf0b3a869ac1f288ee091e4aaba60eadb1d524e1edf7b0aa20ecfd77d52eabe982e6828b24c78c8c288d71eacdca9a1cb4b5c10c643ed2e1a7a889fa98f65958280da271ad27c5595d9361076484d1f6b7ada555e0fb6c9d61f2371096407a5ab9300ec4ab0fcb6cc5f8422835623b437dc9b1e9566f4e2c4dd38416db714a0d640c3f3e7bec16ffa3e31f4bc78022f95abfcaa5511e7e4d5f68a3c643ad0f1412408bb1322c869614e9297b1ecb93f02bd63ca137a04658f5a0bac54db38906f69eb1690122b4ffa40b0d690aea7e42a84036147feaa1efe95823275b078749738cd83e22fc902bc9bdbab6c5f0179fda3b6ee587d87588a2cf42f85b30ff98adf51c6d8f6daf60c86bd5d54dd8c1a24dd2604b4daee72695ab3d4ba3c644204d7e45f7f03ad6b1fa4ff30edc8d548989f681deb9e7c398b026e0dea1eb5ecd4e91c0601371d7462ba5658693e4b13f71d478ba621c40e30091d65e1a7620030637250caf393d5981d287553befb053cf25eccdb21145f2467cce842c872f2585e1283547536bec17c9bf7a1a2dddd1833890f209c1f1064e6e66a9e7ff2edbf79eb66e1e73240d6f00aa05f57bdc2601108d9337ce13ec12efb7ac3be611ba8093da8bb59c301376fe1b373c035184638b2e6b7215b92352d75aa12a74e2912b00745eb7506cb24c226e7f618f607fc4112b0ff266b49c021cce81b5d2e21b234d50110823c6cfe74f68f0e0a500571d6dd269cc2abb0123ca971d491c1347856b916a71b2aaf235b28bc9a8d6d9101ca62ecc2b600c5601b2f2f7afb6183f8cbb6ba3ee16f4f5835c1be6aa1ba71673dd8afafa5349512cf2c7057d5a7d337d537063152f1176652c54838e74e626f26a3e406d49289ba747b3bbac6cc7536e865ae3212bb461ce2fd76c3023675e643f61e120be7035c43e2e8f31102728591146942b8a0f3fe674c5495777e6e3c743900686015ea6219afd61048474161df5707a5e9fc9d91f25fb4008e9cf9e1a11e9fac0704e1ee394334f9d02f0a53447bd4b83963c37a5543a19bca3e2c308cad88e26646f4e04e849bba2634853821615e1e78177e4a9350a19e810f1b8e13b049e1e6983813e54421386ad874dd4e509ccc8175eff8e39127702d1db70779427935e2bb06642a56ff60e35770db692b950b24b3b337d6fb522d56a0242e6f057c5bc74941f921b86de59e48d43e1f37d7094d232470a806945fea9224ba5f744919761afea77b8ad3e9a8bf8498e074530c451cf01e079fa7befad8e9728f19c082424ae7688090bd1efa6fa823f3ff99384fab03c25564af82187809825e378cf9e168ce3fb91d8cc2bfc2b4a4aebf01593e20533b665607b702aacbf858737f8e350832359af3187a2ad3abb1315d015906ac6120e46de5d1e5de24a937db0fa174ed89c622382033c368a0aa962669ff4a5341668a63b76850b9653aa6387db81b2600260121db1c921d6c9682c83eea798113e360cda4cb908066a2551b67e7aa880980fd9a25140224cd652978920e3bab26225fd25c9f7bb7ba8ede63f452217c25b43d36bc9dec45c4cfe817c481bab2e5510c9291f81f592424c1312c7c232441892ccdc1570f8bfd51fe3d5ee3a60cf7afb60c6156ac5f43ee9046c58f5346700945c7fea236654d752692cc87b155793bff00a96ad0447d62b107ee8dd6dccbd82a1ca258fc55dcbdd9cd5fa8555627422c4a89dca1e13cb129e7cb902db0e810fc97e0c6027c3aacc55ca437a5ec763a8f15f4823ddef8af604665deb24ce98abae0fa215f0504332753c7a4ed8119e05e2443b23d1d83bebbacf96aa76d147d341929aa1434b2cb6e5a0668b17788817897d814ba1d91b8f0ddc52ff6b8d9fa99b67917ad3826f3a0047287db3b5d93d6c4b267c29cd231bfb8de2b914d63f602f2f1cb55da7b97958c716ac9de256a233662330646412d9354f48bbaeb2418504b177244ccce2dd7d52998bb4595b78a3195eb3cf0698ca5cb4045f11afbc5582d082de85ede3d07982a1097ee55476436e1fa09109b3d6c8080f974a8e93c2025f9d08df79208b316501a4207b55b6e0f620f0e76c06f119326e7460615d40d5886fa4559492f87a709b12b28437065dc2d81e07311cd525f93df84550a3bacd46d3453e84059bd03625c9a1ede6be6b003b42c894048c4344fc54dd1fceae96f905f2d5691222ca00e6f9b57eaf9803104ec0ffc52bdd2e4fdc12f2d2aa13d3e7fe6ae1156532c0129071c0437f718ed1cecd288057a73f350c2b58936950406c5c025b060dd214673d8f58157a228a1b63ec60bb07135099b6600f6b16a20248a8824967c9557e63cf94815ddb305249399237e10f3bfe3b254cd62707cb1b53667c6834efa2ab3cc1b815bd4bec1ad9730e876179de22078d7404230efd470aee0acdd1d6603a8f982096a5aaa5e8ba909eea068bd2a3942f348afbc8300b97d724ef68adda31081b0c4a2d20ca1c0551efd57b756e83fdcb8d2aa34433f7ab6804cbb18c7a4e89ae9c1cc3dc6be8797dc5c88447b7f941083e453d14d5f29b9c9c14fe4a0d70fd136e7528c8d1d2834b7a829111324e43b0da59b354400462c04374522904bc5decf12d1a559f6f0e4273762ecedd0eacda3c17d61fabcb032c52188055774ec3743ad58f7a1572a2509a4e36088708f82a5e0dee8692e4158147d032f7e4f2292b2180997c2002643a7b4a8e42d77c546820f13c50ae721f06e6e61c4c6ea11f9001295516927df5470a5e83079733faafadbd96e33ad94065bde302251b867a95a37b9252f397546c40c6e0100708b8d64a8956e522b08990ee0e2e767d0ae7ce7fea5733448c26f17dd4a0ebcf5fc0bdfe2f793918866e9608552742af2268b01d50cab6f2f45b7c78f70f9754ebedf6ddb3cd939eeaf4934a7a4d1a9bbd22f7dde24563ae2edc121baaccfa0450502fd33ef3875080b763650694a48aefae44dd2686d97d3be3716162edba1e91089ecb7a0e53fbba49e6975a24658aef92ce6c30c91da66666b0a071ecb0d8d22964caedf33e4bbbaa6bb1536aa5758aa53717ebe8ef1cd88974c1c5a69207e9554a93b9cc8790646ce122fbf93c9c9ed95526f9b3391d1922ea30f842a964eed9f58b25abef3e997441eac1020d6e281d17173cd767b849fa2c2893f0b49c55fad99347efa40375e93290c56df2fd2df82a82653bbef91aa761c901f7dfa210354325bfa1d02945d6d4dcd2b822a0732ac4d075782721c0cb2f64f4211dffe1e89b3f1edd907de35853e70808233437ecd1cf559271bff2f18e73b0689c1834d147ba435196bbbd3a6225a7aa8006b50aba193c4a8cb2be68b7e783c51428b89a3e88796d007a7dfef6b5168e59d32b19614633ab1ae2f339bad88694078450d22f7eac131f5322282e70c6a65066e98d7b774408bcb6a7afb483b99676a05ade670db441fdc93695e7afa9e29fec1d336f02a69b436198213b0047db8e8bf544af07bb9d35f6df76317b619565b922ec25414a5c3645877b9bc09e78413b300b09055d62859f1b824ab00cda34ec61f7fb3f477b59a57a46a296eeadf22fc400cef9e303c1f8dae4434e86fe600d0afae09106b3f7772daf57c7995a3e509abda585a24d8e9663803244d2cc40f6f8c53be8cd85a69d2fec22c37817ae7e0af6f2369825d6900afb117fe09276ed7c605aa23faa045f689a8f6183ae3c1d2395cbbf5436b1ff6587bf21221abdd603175683128ab90f7b7fd78b7e99740cd0f3891b35aeb0b016f466b6d02c46ed5e227bbe618ce908656155fe261a69ef05b061ab94e65cf98d7f7103ce476a3826ed71c57dcfc43d9fd8cfa0d91c86b8c1322a586f0d1125c0be11c7597afc235b57ad04c944750e50321fba0e0f4c0034e37dd44631a101c4a88b63a7b9ba524b83cdc5f049c3b88a2ba9e4d0697fea7bf760732d41f07caabcd7be24f82ecd9e17c3275dbfd5ab187a6a952f4cbe7057e27499bc06f986e00155358c017ecbe5110a92b377af09b5fd8905c8037cec2740a23e22a06cf35b45909c80239a0c98c6b3d6033945de404e0aef4aecca8b381865728143ab24a81cf6c3aed42c59cce48b5ce324ad1111d2858c82b7230f3c8a052072225db2a5ce2da56fb5052720ca682fc49afff2a2adeac3f2ca3196ef3c8572d68115eb1c4acd42e9128bf690306271af45a5c29eec4d2df12938e135b63f505e3f8e6cf2d25116f71e1a72bc6113a1c017a8d178e60f50116fdc2fe638ca585857d5e42293f4ef682c3a7b7a4c038b62e48f0cca593067dbffdf92ae8323352b0fac18809e0b3e8c452cb5c99648539ef46c474018a25247647502569147ad28c802becd65a2d56b28bbca218555e9cca5fafc42c68242abd5dc98cb8bc88f9bd85039336c47592dd3cbeadd10f6bef94d2db75cec4888cd9d02f211f264c1093b42d46933721971158ff1ced03356723001f63026e5eb1a278f5ed3915901cb9b0d33f0abaa21560012531819381189780e066b0426ca6a69eb2e21091cef1e45a6882f64cb054fe77fe386f51c2ae1313a81a1a8085990fd9a7a3776119aed0d77202d28326392ce30a1dab63f230b740b1774cc67630a86fcc83be17b3af3131c4da3b87698c2e96eb2e2f8e6e79fcc199972f0e6c1d862b089668a207e02534f65bb1075b08fb51595c946f0143d8f1f4d6ae7ce894d67e5b08a0fafa40e43f4a298ff6231939f6cb6d7b7aea29b43e8e608db68d343558c990979ed93d83f6ff585c3d35deeefb3b0e730e803351aa23e57cc1af2486e7ca4b61fae88b299b13af8f51069d2a70171e254c1ed2b28e53816976487655e1f1d025197c421c817711204ac773057965991a1b24deb9aa4bb3f3a35a1c2acbc869f78511727e7a64a4a8a73fd3156778e014b77cc88314ea0e9c694da126480c62a8beb2df58bbd1cd0db9572a88398c7e04332bee33ec6690371a327a3b568f75d7b0828c655fc590b71bd58bbb3adb05e2b76d860e928c1c03e274c2012993f0d507dcf2fcc281724674c35df98fd2b1d6c377c6ac666c2fbd41ac0fd4700420a96af40a973604511d61456b5ea3290f4481ffd54821aa59d6cc3175b805e531886decf9945b7bbcc609545af5f780740b97ff36606e8b8fe84ae4678f3a6d31b1d7423c49d382ddef4854ebb54040dfe7839c07bc7d9f03a60e34b6c49ca9c7a7a22549932d2840e38798aab893d0430c749166a1fe3e5f15f1656a36a9447d61108eab0dcfe8a892a37d5ab522fb1504d2c91b257047dfb422a48a12baaf7c7871367b16ea2c025ff6cce2861b326f6dbb0c06a0831155188cb068ec811fb48319e4decc1e7f5f02af0d7be3edf6e3d140eb31913aec3837b099814a03ba712f86fdc551efb7278571f0b24e7bba95ac5ca7026a9ee17fc8ca2003d15133ff6b4c2157adeebdd4c70b910fa7ab48d1ef34b2588757247b060d785b153f9014fc90481490fefececaaf3f05ab9f8405c4645b469c93e79cc601a9daf72a3f1fa31b3263d970b493258c850575853864f3e5ea74268d0766f47464b024964a646b3080b6d014e120f39b3fcd86d61326048804938f0d764aec6da3e2ad71e2ae64e7244073e19ee7342fc00ab961afbe8d2efe00ce5b314324dff33c6d4ac1a21bfdfdc22f102dcae8cb18cddc652c1c18b6e00c58500a7f196e248a633e717e76546f26379c843c7e1010418da1272b2137e1cafeb13d83073deaff0331b983628ea093abcf914e99313a4deaea9703a6f26ac6ef8c104b301f04651f9c753e03dee9ab29cbe054f56e25c2076a13d78ddf21cafb8da2e8029afd281d37c1891c9bd5922e38f52d3182ef703b51f9b36b43509dd51a81fd1aaf4e56e8015e2abd5408022603077994b591e6298ad544047afd4cfc29a1ce652491b069391b0910e25a89cab76aada5f6d659d03331cc4cc450d439e60e2cc78d202995baee4031a24ada1547e00907e42cae901d860f767958ab7c2978a5e27140711b8ec4dc4dd7e0a34295abfd71238f254980c3d01c8d2dcb49c3cbf0e3283891730961605476ad0f9ae79b8e3164bfa334449db6e0a24442d4a1d6fb6bf7e294995f84a4c2707a9cb61856444b92c749464dabd374a7065c671c5f9180756b12f8519d66153506eb2a73625afb0b248223d6bf81cf300fd9602e6fd3438b8496598708d156b5a06f0b9334c43de98a3b692da60754ed8c4b97c1407166b5e1aeb6d5cb9e823f695b341758ecaa195ab8aa14ed193528c2b47576efe67a7f643f7d7ac492221fb33231e78f6f52c340891ab9838f1b2bb63eb22331b82f23af318a1a9ef1ae1c94e22eacd0a308bfc6a9edf7bd93a10b32c692dceef9c8d2c17ea82d4b6708e96abd7f98142e1fa5911b7517a63c29f5d5a2646337b23da0d9d5c3ae4aa58d687b8ef4f9ba98b0ec17c86321bfc0cd2488e2c3ea69ca206fdd0125ed189efcd05003cbcfb6fd4f6e6b02f7339a9cd388b67a87d19340f9060109ae5ac04527ce8979a8ac8359ba8f448d75ed3543db4fdeb0bd2365ceb2ae209917fa5fe3c7b9101849e40827d32a262c60d0539eaf17d0ab65486e78bd7f368b29f15bc280d1db86c0019272ddb8a09591006f7e6e50f763c9436d13390a8c049fdd8556945d30ad44b78d41436d5760b18a171e9ae36164d2d7e164b38ae75d5dd93136d2a59cb6e38704eb189a3c12a8b2d76c7fb793b06d0ade6e0e62dd5b105f7f8433aef076462d9eb1a53b989c435688078982e8f1471e2562b048d3bb2113cb5e3c5c7e3f16d617523dfd3250ce588a12f002f7b960fe2e742fa119c9e10c4bbb0560ba50b2ca70bb1329de1cfd97b44bb68315c4dca4755f955103e2203a448ca28f07a024c41f8532e85caacc6bf146415a70756b5119ab5281c0cb44d5bf4b46e3923e1c77b68a39bd9a03ad756fdf2b0eee7e1f37dd2c002b5e4f6ff6495ff61feb25a5b76e5043aabc00f35aefe5c094a39ca696804d505a547238b6d114f175fc07592ee5df2fbea496c16edc53b6b4ffc12b2853f5a80dc7d0cd781c9017c7616147747848cbc6b9aa5da9ae2296a9aaae49b9631914d9bd3d048cd1fced378dedda8d54d04f31ed116087891b48f53ed17aa4477b62dab8a162d86a1e464c8d1229561de3df6490f64cab2eb9524590155a53f7146adc6e6da0cf8cfec0226de526caf2132910b0aab6b59f4135e80f44c5b45ad47f38ed24640d41a389cd8160b05c887f3df727c25d54ecd42e98fd0a1d698c7903b196c410908d3b7a782ebfc7b265ded161ebe19c87fd5bc6739c2e228ca6465925966a148c0d122094d84fb20e674e0c44e6f22fae7d9fa6fa09b62c3b6bfea96024d5361721da118906bb659b38a8f493ffefde7e093d8893b315dc42626eda7ffc1d43fc2ecac77c21dae7dcc3bd7faa88cda0309127c4b13be14418b1383a3066a8c558c983cbfd86c9bc8716fc50f47a3859f3a7f6dccbe1be66759e1f59dfc3af82bd6f08878baa8e06db43db6f2aa3aaedbdba129749b0d76003c8ab177031750ff2c2bdebc611a4b7422cf910ab87aed7c0fa2b185f7d3e3a1059b5620d3eb6794d8a2ad0b2f8be0f0c615288b2eca123b3e0960ba6c517b8fc3e416133231f62fa99fd2259bcf9e116ca427c404e1eba62e22650e60a603e1d20bb13d72995cc02b877e07145a769d13b47a82d5274ef4bff3567389e4bf3377b58304f4dc1e71ce13f82d5f707a71ca877cd01c00eb7be4d2f4f89a18a0de64acb4d168fd50a72cb131d6c4ff3308f9f3aa4f29d67c70e102c8f7cbb83bf2fd8ca67e6fde3509d620c28759ac6ef9377a5784adf43c899cf161a98686c8eb95240ae701cbcdbf0c8da8d8a5c358c9107473ca0c6da6b5781507d303708c02440a9c6bd1485f0d0af1fc04ac6fe1fcf1011d2b605264307e67a0078da234bbee67133421600d817280ecffb27821f270dd63a053d4c63460626abfa8a23f42a18cfcfabec5aafcff992a62116833cf7d28145dd2cb5863930736a798127acff511d0f2c2d8823f07187ffd1235afeda8212261070f8939cebfd8d5bf9d2051cc6edf0d2e1987b35890ed66325e3e16ea0a7c4db4b255e25dae5a9bb25ce50ecd8d06803ff0b32aed8b2bc81289db7b682a85bff98eebf694144b7890006204b021b45c6d928bbd867386438b34e1db50131a57c6dfd2b1fac7d4a793be5b409dff0e27f47ef2d444d916c88c9e05f8d9f51986a5a96a08170275b211367029fbc236656467c6011e86140fe019165db40f83bfef950178db6ae28f50b1afdced3e3c0df86aa4e3e6b0e90e12ed670c43d1ef714c31ad15e1de8c596783b43c911c11e3b569a653f98ccf0423fbe5805641b355b2a4ddf06daefbb343ae23775db442375f4839abd67f7c057850321eacc57b8430d080e708feafba1a4fba134fb3913b7ca138aaafd52bafd9c895a8dd2ece74cdc1abb890d639397180d11196586f5b50873696778739a6e082030401738dbb344a51a6614dcf372d74ecdedc1559fee5248fe4094618c1d50d2181c7c94edab02eb24cdd25b297b21138001907f6ec45a27ce6732461d4f614f2ed58642e5fe69dc1500b5e1d0c5299be450014cc2436c501a10769266c6a3a46227d446e44f18351d2bee4ae74a63de09cc973f036286c1ec9889ff6f236b182bdf016ab39994e70c7c1bdab4e4e5bf20b9ba093518c0a409480a4bf14e77d3384c2af1243e222097086dbed50f883542f9f447d7511a813d1f1749743b779573ca66daa2c0dae9c8fb04013d12c22d997a67262746b32547706c1abb3179fd17ca26680217efd5a6c20768cd1544b379eb2964ce8c3e230173fde20c0c32991d3f5d173543009d0e50418dac0890ce457f2b3de4965991af3379e5101df8599ad089559e6c94fd589e0882f150cc9c2001053a685e00f4e51d12194d787250e79e2a54edc66b5602c4bcf157e1ee96108d1e9b1f78e2f6517d734c95a4fe14492a043cc30f5f0356c23e03d9ecd25f1c6e872e77434d19ee3b75183c949d1fa736e3eee369e21781da3d1381cd479f5d4a8a33150e2584468741a5c4137b2fb37b368268eaba8a3321f0cb5944ec2357add1685060b5c9df834cc7ef481dfcc06a6e1dd4b3a4ac4f42df528303b7a1f42d6447ee427d90154272d24928311541f4fe7d6ac98daeea5281533b585115c078a869303c8ef3918ae12d1012dbcf3883206b49330629ad8db48058f536f77293cbaf5c206f5377b5783b2946d8e77e0a5706e70aec6fb7ec681ea34edc9b8d45b24140be5f1ed864e6f66a3e76d653729e1686be8b7b217224e8c880e727034b5606a0c3b7a9da9d1fa319d01b8d8df64bde0d847bd9f04f3b4960fc0090e5e8d57a24b3b5292645a18bbf169052d2f67878491c39c3e880ef1d3249f4671e607ae4eefa530177120773bf69c088d517df057ed71791d1ccd987e8d011a134cde5a81ba6bd4889742d00ae0b0bc0601973b519619c20a48c924419cab5f9456c7473fcc298b95258529f63bfbcb3835e37d840b91ad503266efc767827a83960ec7416d01503f12f0efa8b4adbe3079c6f444408406c4f13308a6b8a5de310d35e9a32055a8b72a238b1dfa761a8b008805c164001617c05589cd2fddce1f38897282348e0e0d9a813a22d20829fdd31c3b45b1af14136d2a556214fe911203224ac8d9fc5f2a2a8b4bb7230a2bff04a17ea031499fa67cf22ed30fe1de3a602d233a668f1420dd8e64c450d4196bf52f436f631f148192948c11eab012ee08c6094794db611873492c3c23c849dec1d22bb3e8a24233791a1e5b064811ae9183c500632cc6506c4500c48311b21f27a0144a4782a95818b9486fd94cd586c0a0b6fc91de736e6fedf49180188132e0b8be3ee33b0419c303bf9c32da8569d4618bdb0826e22b609ace870fb04592c0cd4d8c387b5981d35bfa29c1bf3479a6e3e56c5ddb18f9f1e1dfd43e5bc4c7abee72388b0147cf1c5f22698f873697ea69fe56e1a667049e69220e4d413efa709f48b51f63b42a4940852baff980a89393d2d18fae5e8475ebf08f62525670f4320fe6dda24549073c4a59b94b85dc828f179531afa0d076cd2a03a43986766ab7fd1f8469193ee26a04115882579070bea566cc99c802e631d7bf01d724d2e522d4bedfad2041333c9c8f0c88432cdcfae8fe2ac64df1416b60e91e72205c99d98a8a05004a78646d7a4b48d83a8892324b3893b26621669cd484447946ab14627ed4be224d29da900d16c7d9cd7e0e80d63f9fd6eec2d8c398b326f4e0097271a62e9937370988d86d3c8d06308bb1f3ce12a8bbd4ddcc843cf2596a0977ea499c4cc38b6992cd19e93c82e44c7a69a5c169eb16d11ccb1854c411654f40d3c5753c1c95b1778ded4331c93783af76b1f46765c2d09597b5c4cc2b33ea5ee2d0d8c77d2d8882cc4f7f1f52913a0f25b4e44d132caf4484390ae238d6a5b34d228c7663df1854f64cdb12d4165f5236329aa4ed8535a7ca212f18c2c24d07854c2dcaeec390451c80fc9e11c1163b952feb1e6726c9934710747db2bacf91d3af2d58220d932ed23f3c605420650caf0c8034537104e932ef768ca63a1afa6740d08b97cbbf03daedf5c1c6ec23a662c0ef0477d1aab617c61bcecf4953346a471c67d1ae06ffa392d30601505736b06be90ab913ffc34389853ccc32da3264535ad5c308424899c30c88761a188782e6ffd3949bae97ad2e9d26d0d0b93b19680c57083cc4518f52fce142da96f41b4e3cae7b44a6fd0bf68aebca4eb5c821ea134f01a4bdb8684a4aa8704bd423ec49738dd0563df0569217fc82c4428707ad4fd8cf07aa7a079da8f106f17614c4c7a16c1c87cc102dad644923b14048bb47e02ebe2fce950f8703cb9630f473069cd662e48f2309be1b9e100cb661870b889da635d7d9143aa4706f22f8ede20bd2403e1ad3fc75e54caa1d797186900fa2fd6b4b45d89f86d54e01157a7b36a0653ae1818044104723466b5aada8a061ae380fd21c389cd25f30815a8dcd3fdd3160a6d66108afdd7241a0e922482ceaae9d07c6a2690b8522c163ba8facbfa08d9ebf19e1e23d509ea2c2819b351ba8c453be5b462cac181f9d0b76baea070ca1f356501b46805e7e805692686a61453bb1b77053396ba613beecdd3ef12e9d72f61399cf768a613ba05a46891b9c3418bea8ab3c38114ebb646ed61848fbc3be2f6079033b964b044123b52a7eba58fd31894903a08eaa13f6c717a97d6355ac692200305d89e2c72b33451364960fff0b7fd714893e97156d5aae677c42211161a15877cf46dae54c72ff40af68006b10cef5c925a857bcb0387946419e918a38bb1def405d6e95b0b346dc1cc015f9fcc27ea22a3aafd12028879b523c01a727d28f994d9ea0a9004077498bb0b8ef4495a0f917fe930c0127e8a92c627965f3d0be13279167ede1fd26cca84df7c7a479716dc9d3377e69c490f3fe72f01d9abef8edfa93eab09a0c9f572607bf7eb4c9b965b9e309e0e60fe123831160313c60a61b85923b79d9cd3421f471807e563d1d3bb347da349b394d36d3eb64c11fb316159f9cb4c560960d188f2351304fa37fbb99733d18c21099baff61d22f633d55ac4405911f3d5daa7c267cb466267658b91ca6b0d38ee2b1e1726f35c95535d5eafec05840458c0e30b4c0b570d4c64b0bdc04cba2ea0ab050d4b26efe3c98e80a5c003ac015977de32312b287237e9736e4cf26688475701853e714e29ed303cc5f5ecaad15a6d74f02ecd15f3eb902a42fc680fb5ba9af7c765afad7a6e1fa07d452b10f304e14cfe85531e998fdc1e3adffd6eae7d484fd8d05c1e6722d0b706c8cf2238df8f8826b91e816761169df8db83ee9b6a8dc2afb57bc456a9fc725948d408cf1afc012d5a975a1637dad3ac6898eed636d228a873de1850697164a723773560b3216070f5fffa5c0b7121930b6816c42d5e38bd502e1984980279932287c8c640ea698f5133b6bccfb9d2d7af55740f5d3f5f6d7ca60a77207f826814700a53988c0b8e43f1d6d5cd1df1355a99c5e0801b1832996771b2d393a241ee664d45e5feb29a12fa180cd0aae4d2cafe76650042a6a95ee4cc39f105b48f1e6b186b722d916d97cd91e2af4375e9af1ef6e9fbe3f3272f5093394d4731922eb7ddfc91cb3921c60782b4e02ffbe4345e85f6ef091d47be22d358b58f4810078aa8436066f67d311c13b9eacb7b18b377c1813678fb820b318223cdc1677b1709cbfac419680eeff201260c66c1a9bad1abccbabb7cc45cd70709b274ddf0a3f174d45c2e803bac54bdd0e4ae858400160b877b12d68280a9d6e66ccd25b18654b8231d61933aec341afcf2e84b69834683c929ebecb5616ad9e98ebc73326909d922375137e59f7c8943d6b21e73c730fc440fd612775ea51031e1d6ea32c148df20522da0cade3a8772c78e19baeb60d4ce0b9aa9a4f3bf21bf0bef2bac2b601ab24841a16084e0127ac306827311457f7958ded0e069d42eea1f05818ef4aafc8ebcd32ed7371c5fe30cbb00fd1118b40abc463384028358d24003a11ffb041864d94d91e4fcaa6bc520dce25c89751cc40056568bdaf01a68943e7aa6f02d748a39ee881e17a64d778a0abaa20c34fc138f5b478411b2785cd590283eae6873bbcac17d73ffcb178106632b605a58cc6b862a82961de13f7e2134b68b64b453e0d40e750d0945f0fd91c6363b3747068cff257f5b3eadf921f63ce1e87ba20e62403792af1542b966f599aca838a6bf4970ec2afa0a3ad4130872c266ffc2eb78762851f18128f0d6a64d353f8a0fc2531b7cfd755c241299f06c302060f4fc95bda5b84fad5a70b04ed6680607c6f81ed896130f6e6f246a79ef701d617c9fc8055a41d8814a85e84a8e40d8be2ffbc1ec0a97c54ba573d7f063fccc5e576d9de69e201aef88afd9cfd8efe7905ce6f1b512d8abb54aeca3b590371f3c408291252fc50cbc6c4a694d4e36037ec71a6916af70fff58d22be0f70d9755e33482f6246c757df36e02d80a5c2586486d1e0181892d3f0223ec48fe9587200cf366f977ef03566dc65ac06abd91e4b991a0040df93b62fd85ca1b187c200493b6d7c25b660d57cd1d350a99a04e41d7a8cde3d05c954065a3d04b132fd5a9041e129016e46734807e2e84b276b66ab238575caca6a638a26adb6ae488b92f84282cbc75730009483785a596c29bbad7c26653af77f276a12d30b2db8492ff900bfeaa7c2bb46ccac8a354addb763ef927226f6f6f087a369c7b8402a45ccb1e26ed9d6a5f8c70c33c2d593300c5299f28f63f1dde9c5856d4de1f8f0b833a643a7e6986814c275ec12d72546ca20395cc79cb659e12d46200500a424e384258b19f9ee5596db082a685e3bbadb2ef910c93327c1211c7fa766ebcb619604fdc954c200114d2e4159cd767b83b2c30ab971638a9d8582eb0d76febe22c71def299cd7fbb451ecdc7a41e5680f542d95dc9e650b07370477b1425eaa72890a6502df6cd78187c231ee986de65fc1e912c3e4490a08249aaf5414c52f01afe90d809f979dd3c6df03cc85e8222631227c8c30a28f532f2a6462c09a85e36e26c85d217d41e17d4fb676834d988461c28e6820b24a07bb403d1761a3f10bb835a2d74f935ee9ff8251e6414128bfa00398d5021f4d3df81f173264bc4fb6f74aa1ada4af77a00abbf3e83ddf3dc934f50cb9dcb731fef897b3f6a08f00b538582bdfa0b531a322be0e2c308378d868182a0a109a623c11ac923e61e75853d5e72587c70a532efef8cb1811f29ff75654836e247a8187a6ee92300df832e205b1bc87074a733196f60ce628e53fe507be5a04dca646ba164a4a31a060002fc34667a2316f493a306f6edadbf3bfe66b83cfbc694968ec0e34cf78cca9f66633c3d91072133c587f8a08744788a45e06ab13b271b113d71b90609d33a64984c6c32e403f8c0c4dcfcbac23701244612e0b967b01db3b87af8c9a618840e8347de3aca008fa30602c14374aa4a47d679f480e35b4480ced6cf025f9eb0d5f973f4b9b034650db121ef4fe0f5e47881d28a2218208f6dda5c0b1d00112b49503cedff7157504222dce97cba2dca0e6fdfe0e4667dda14e0019d78d3035111e9b75409d3362a09b83ca44647cdc09e9c588d0fa3d9039428e022bc85954f6c52ae0478210b59b455c3a1804443820574fef1cc0563476fa00281c7820ada20589206dd14a4d90b9684d5590c468f95c90cf68e98cbfd329faca3698b7fd6489b67544dd78165ab0ccc24cc4f9e6d48481b0ce0409ea9f1121ea53cb7e04270514cead38ca3f21e4a32d4b58e96b51ae624cb7826d88099d408b7259949b624c1cdb278be48abc7b91d7dc00933395cd27950fe26c0a570baaa3b346768c5e350a83a468ceaa63d6cc727fbf63a3a96ea82f41c4d33b24db089d08582897e278d7beb08fa91ed9b932a95ea068c86cf3f7c21a00d23dd2cf3cfb4cb3cd7923e594c00d54250102335f9d27d0ed9937a00d1d3f10e69b5b31e6d7d8dc8747905587cf340d1ec4e3c24c49dc70aeafc71b84f10214ccb9782e3dccac4364f5ca90d91082e9dcb81c9335077279709faeda3bc3acf7b6f493f5cc24dd345ded056f46f0e65d8a672cc25413076381f9df6d95c38f42c54f8297c085232b6bd9bad62d6cec4daabf90d0e93aec7ed60657201c0ef51104296033fa7998894fb65a89fff1b05a85685c6607421a2f09e1a62499b6d1da83b56b9e35a1b46e41039b990149fd2224e4dc476542ae5ca7997be803a2a0ac5a83b008608a002297adb39bf8479c9e0b8cc88ef9f120bfc06004cec94f3310c741b175030dbf2e9c101ef49e2ad37993e83ee3187cf9c7e62d4c2640146941fb9a2e7548253572eea34146dea844dec3350d1aaf4dde4f03bf4538871f10d133eb034fcd546cab89b94ced3297afe201a298526b4417e8fd0be16b6798b8078fe694e587a87ed08b1678b2d50d8b018bd674addffbacf4a0cbd1221d6e2947c36289524c946ccdc1658e8b001e2cbcc4a3f7efedb5a3907eccae4e58ccd6f1855d11edb819cbe699cbe475f654733e917576ddec68e9b361cdf73fe7b70a144fb7b62696421ff1e7832803d5c54f6534110730e1e91c384527502a4b3d09901ff89c076a173a7be2c677927c9b23e18e8f5e1fee94ed30cd41a1b88ceeab37f504b092ab4d999462d314e015db475602f93a23681c78517a346196d42f08efcffca2f7e49ef1eba989cf13d546e1897d5ed9f177ed4999ac15695dbe59d948ca5d7f76e5b191d5f9434f2f2a40d97076b475152994e133d0d40f01e90ecd7700e5294e28b850f078db3a6dcebb0712e43ff28b3f91ce9d23e0e578c2e822f606e5ad90f0bb09e990eaacd944b6a1783ecf741ac30d63f9c71c003f182e817e9f0741915519c453c9b6d66954ac37be9ea7a0c18b94a62de7210c6151acdf09cb81bcab44cae0f8bfc6d5e88fed59a753b38c0ae5dfafa990aab4820b3b8e34ceae6d6c6792a7b8da5949425cb03eb50d10d96d82faa2a7d8d7d6eabe072bccbf7bc8093397d64ac59041d0c3e482b9e8b621fcd40f3b2e3a91d335808a3c0b54a188669976eeaf6b45153da1cbb92c66824c5ba6975849f88d5cf9653560390efd0c5edd2e228b1653079658766a7a7d848cfede2391548d5b56b27f6668dcc3e383e52e561b2fd5b57dced45eb5ede410eeab6c007f67aa82feacb7ac58816bf6f25411a999d020c1f71fe9557a8b6738624dee0994e1a59dfcaca90cf6b3ffcafa2421fc3a3ce295f874e27303398147f1054d6bcbed8492b8d46fb55a00755414277c2e0fa53e0931ad18148d04231a49f18912cbf3c6bb260b9d02b18d6fc697088c5d09bc1767d3dff491220173efb2b8d52a2eb9804b3c8d6a8f10e0b4623659263fad4423ec03ec4b24bdfa8dadf9dd8b3f6310c1b78ebefa788e041d160682634362d688697613b207e88dbaaf733189b2f9c0eb85a07ff58355def7d7e1492c6400b1917f70a077e70cf2c34db1314c4013b3f600f3310d3669c3956b6a14e45b20b1f0630aca194806b5d69bf4ca07dad282f1cec27a42dc2491b88b9526d0cc5961df8bbb742800a5d6f31656d192eea385752bd95c4a0b6ee80209bbe1e6f8d22b1e15e3b92a7739ff3b8f7298214696067f53e81890328acef21b254ec33d34707231d5c74cd5fc9d0d30b83540bbe8d286bd640343d64de907c0ecf68765449fb77612feeceaf361f08cedac63fc2944de701dd1edd27d6d688683746a144f30c686e1cfde3b0e1001f191edffdff9d95e528ae281750c2806fbb324ce732c8fc2984c9c0f345c98a0e030fd726b973acdf73772f6bdda20a03001562485f869d163f23f7a52d4ebb3040bd580074564e37f7bf8c884f4ba60ad34d9eb64f4ed2f1417c9c60d0eea66985c61892486019fa6dd10591de84b0118eb928555f3a7a533fd8c38ea4ec693a253f3f561011270470e34ce604a5328470ae1310bda8f89f9b105079942968ce3b8a5c6b81750bb2c617302934fe90ce7633f988f5da6c2500f6f4376e336220366c48174563a8c12a42c1247b0ce43e2291abb8a1621219218a29898f705cb2eb2b89adcd68b5c592719b633fba79e3575ecb5c95c7b6faa2e2d424663d48211a66a6e60f64af079327b213984ce15e2c195e9dd7a1b8eeea47cc32ba737aad86c7cc4c29f22c2a875d6d59b8d3edb80d91580e1e6ded51b02bde875cf6e4400c7e1e7acd43d9607607cf85a4b8d788f788c441112a7ca1a5d384f263d12fd900d46b7e95b640ec3486ca78b64cca2af1177d8e646c7f57b662eacc080f9676fc586d709cf6ef505d8eda923a10deae67bf73ca277dc7a53c5f8c346d796e2c70442ceb3919505c33c496540496cd9a802da79356a07ee50aee6fe39b36986300a29fac4470fd9b430754cb28828869f8b5fabaa067d5475bc5402a673c27c394924a0becf05ae6e018ea327533b4292e42d7d1f8c90ab79505ddb229ccafed795732a00ab9056de9d4965fc7c792b889577c35802a3b455f5369e0f093dddef9c3a31052976c34d2a5f49f4874cb97e0ca8aa3478ed08619b24acc21a70d01e5c13e966a1fc42c53f61b5bc233312e5696c4bacd2336d9e16969e83c93eedbb8ed6e8646c9737cb8dbc2043a4989939f94041a69c2fe805f4b49b71c6da9a5f4d6a15a3b8abb54ca2c81d5c1ff5b7027743f6543ff22b8a71bbaa953f8ffced711b2844c6c7b5df759736f4a070b27a59fe6d8bab85db0f20ec1a0ab3a470d3d09de4ec93e2e06cfa4858cc79a0cb604bf9daec60152630b8bfa9160b4477fdddacf96da91c60c22bc952a07f027c7b6405f6f2ae9b1a6301b78404d70a07ba205ea35c5d39e48238a4c9fd11de73a2a36e68348a88e522ccf866ec758955134107c40b916f9365ab141a54cfce2e54c42d3eb5ead65a8c4f01b00cf6315f9e5cc763bdade00b0dc381cb68d0e5bd5b73e5b2350352d5bcac295483a611000614640092dba3a12f515d6112bd6d0e80cb1e8afcde7133087c7919fbf5b745159bcc85f86efdfee88f654715b02cf65aa26338639e2d4a9c3f1e35dd4aeb178b336a1abbeb254332ea50d7fb97d8679464d157cf09a8e97b227e9aaa971e3fc3a769602cfcdd93a9a7695d9e2680f5a714e1dfa4d3342da7a9b48dee74f819364d5f6fb290a9697ab0a8739fef9b02eb4d314ddfc1340956d3fd10bbb0cab99f6277fd6428ef9b347ebdb054b4348d5e596755b034995ea38475a56983ac00aa374f4165091bb7f964ab0c4d637047e90895a6e83137f42a79d6ed50c514bce047a610509afac63b695ad138aa4bad490faa1e2a5308264dba15a1a4a96e239034e906d248532901c8cbc442f596c6dfaadf82bea37b88a3e18c6c8ac798eec811e49ceaed92d3c972d30fdcee0978f8c687a48b661a1e5483b655e41789a4c3220efa5398c4292df02bc5fdef8f4ec8c933677e240d4fc6bc3eb1c3367c15022a58a1405c80986dd30191c51ac0d9893b063a912522e39197c2ab848cbd4cb80b5902c24a6c46920de31c9f1de555bb8c6f79b79914728bcfb3d1bdfb1c8669b62b16c6dea8e32ec7b96a81b60159bc04f5a909428099c47713b2e59629a59464f103e103ed032f7ad3ab3c8dddf93276a3bb297447745bb4549bdab39467d162821cab3335cec92c15a7bde7ec74464c9c98ded499b0bd1bd49e9dbef15091d68b402f7ad18b340c10d50b38ad4dd4b4f842302bf645f52e29a06ce940a26e27a51083580f7a507f9e871e1ee4c383665006d592973ae57976aac45e11f9afff95f43850f84ff84394ff06e5a74179fef200e89b9bf7024ed0be801c2f59ce7b1f1653cb4be8ffff493fcabe781e1e0b9eef82f7c1d3f2132ce72b12d27a50e9419a0883bc0ccfc373866883d4a1f4d537f6ed699af6f52bb69d11a9423f1ab912a4ffe8471d14791b27caf36b3cf7a695273d0e0775dd75d75d77dd75d75d778f3da604f9a3d18f7e54853221a840ffffffffffff1ba9f9422e8ba1ac165ce0dcc60d2e7e96d2e2b9e8a96275fcd49f8fc1c3a9871365ee331f71df69d2444ca436261d41e04e250cc2f3b7e742eb8fc3d7f88941b8fe3814cfc3330aca93e366f0ecb960caa7f7c133fb2cd49f566116f19086be8fcf3e8ba0e70b0eb84823ca88a228aa7620ada8454ddb360cc3b0ad468988240bd1d04e30ecc444e3ce8ad09d2addd376202dcc463591b6f52762d926c2235a7fa80ea489300cc3302e894b4483243482551999c9beb7d7f5f839f47e8ebb4769fa8e3ba72931f0c2c20cf9d1e3014c9838af8058563894b68de4b184bcaa6b27285ed575711c8944faeb49703ce846a9fb11930a8934dab66ddbb6fe78ddb66ddb6aadb56edb56b7bad5adbaaacb6309f932992aba2226351951ed4fdc4675239148ae95540481296164605030214c283e21ad18c2c4501cc5d172b22c1bd930d94a34518d8a926551464489a1d013d2c27098d028c4f52782fae2e84e4ca83f71843d3b49e886765a988dae09dd10dd9d296419a654e9a08412180e83c160aa91b4e28689db2872342399dcdd37e388124f626de658df07cf6a242d4cc5d4fe444cc54494330da66e946796615c55038914a2282a96d08e2411e34e5311834548cbb38d31fbe93b7bd32bae827b77777777774fefa6a89edb293d77bbfbc122e484b37b466c678c523e8cf6f48d3f507f3a853d3d7b82deb2f89edf3d7dd31d77ba9b8519325431d173a96f366437c4d4cbccccccccccb397994fccd00597d78295d990f83a73763a314ae9f150083442f6b4622996fad3a7147aa74a28544a91c18ec23828f786b8d26436b32a6b0fc3cd8654597fbc72d07366e4c87650153574e7ec745660c856a16fe1e6855459e6a02aabb2ec7b27104b2523e44e2b032a519e19507f62d61e0651ae32ca71853ba15006ebb0e1f25af80fa18ee8d8bb73efaea288f40a283bb99c3a425aadd22192add25d09c600eb6e9493da355233ba489bbaeb957577f74ac281c29d8446374434284f7f5beb6e97509e24ecc1b81328508bd69f2759300b8925bbfae3e13e2d0dbcfae3c1715945151ef279ae9dd657baf3f275aff7b1135658df84e15851d27ed272e2b278082d21e8810baf086d10424862d829c07371009e9de5589dc3008fc503e999a1705a6f7b41797207be0fc8f1118723929a715a4ef2248ca041784a3c1fc2fbb8a83da47de136fc0792e80912181cc074773bef83bde7c52ffbd6bbe3491d17d9701be8fb81b2890807b741e96e1c853bd8fbc868276e161521a4cf9ece59662164cf5d4e9fb8134427ad588a1e9dec9440a242428a400821a4667bab3884eeefbdf7de7bef3d7ffededb8e3b2abb9c078293437ef60a774e2a2358a6d57fd4de0c4f86583d0f4f2d6a9cf83ffa1f752f62e3548333ad907e343ab5cacf8ba44142f13eae11f1a866064d06cb473928a770e7798ce7e1e93c440f0a05e89a6f46a30b14164ba422f5ff98f7eeeeeeeeee4eef5d4befeeeeb6a58ad4a5eb6abdd4cbc4d44ccdd40ce6d26dd9bc90ee62b5bb14b6b332425add3df622e7353c8d465d2876470e1036840d2b22feff971bc2f79ebf363dde8a8805f9e072f161a4fb084738c2105d822e418bfeffdf53dcddff537c902d9256f4eeee1cb2a7ef2916a12bac415a71ebd3d6595883f41112eeb4a0d7dbdbdbbbd3fb1d577bb6e3da2885f4939fb4135fc9bcc34c402396aa59348bd61fdfb66ddbb6ad230769f909c4206fee7c8cba0a83f47c11ba8ec2b42b77d64fe8f67beff5bfd76dd12c9a45db2cda66d1368b56992a135d29a4d571994896775c166df3939ffce49b8c8179e75d4511598deef495cde89ed0bde8f63605bb5e7191eede07a4602c7167230ef6ec849b14bab1144b1d42488a5addc5d273c1744bfd711293d22e16a3941cc771cced942176efc3871063bafec4956a4456227467f73e767a2821bdebfae318d6611db73346aefac189789e9d48c4253c07dd90733e48cbbbaeb1dec76993a6eb30e70e5254e1bf7777777777fbf107ce0ec342daf3811cafedd959fbb35548cee039463106f9d9d3a7ef6e0686768c63fd711e7aa03b5d8402ba93395e57a4d55d770cf213c4203eb7a6f05d2b66790145518f7a2ef47cb3da502ad4893b554555b1dac411f65cd52565202d6a27b5cb7177a7dea3dea462a42245518ff2f7dcf7bdb79c71808552271948eb723af5872a75cf93e9a26d7567318287093c4cd0831eac604f1f21af4b4483648499998f90965fd77541263c15deabbabbbbbbbb7bbe6a9bdf298aa2a859f15c0b534b658181ea18aaff87f3e7fbef8e01b394be59cddd545bedeeabe67bd5e3b4a9aaaaaaea6e07547339560b175a58516d380381a67137bd2f537134d0f4bb9bdab4a9eb4c64152058620969f5e954691405618c52c6100f15c9fe22f77e8d549b3755932b8e8396c50acc60a6d137008f70058c210c21e68839dcdd3d2e01949d5c24bb4bb8eceeeeee12d8238a28f8849982e39a68e237e514295855551561d5847cefc33f5230e59459f9ff7f26e4e3cee54ca4984e940dde2b711c07435659957995790773aeb91b9d0dd2e9454a291c47e2388ee3b8feb8c6711cc7699ad614c7711aa7711a0761c88c88cba2286e71143952c571c7338ecb54cc88b1ab381a855cb8860ddaf38d465e6973e7b9b0a44fae0c62e158313ac5791bba330d1fc37efb1a5fd23d9fa4fb43b4fb35da3dbfe37c8e3d174cfbbf8a9b065c3a36d94184b47e64c5151206b17cf4a2e7220b757d8c851ec8150631f5c76b84399ea7a1a0dd2337bd8f36755d791f8d3db6ec01d8191c4830c762c8dab5bfb7bbbbbbbbbbb7f6767777773f2c86ac582814c2300cdbde8e333adc999929d1c321ff72fd5fae8be842e3427209d19d97910b76a9171997ec6242773e9dd4ba889e8beda06f068c1a50eb9255f4cd2801825a97eb06d2a70278ae89029610e750a2f6ec8c38e4e562ea389d1451c4b28906b51d96854813f5a755de9aa815894c2a345806730ae57e7c62c2ebda0ecba267d4fad3dac94bde878b5c946d8ca2460d4a853a45212dbfa8d38b5150272aa2400a29286aabb8bdbdbd3edd247bfa7750c4468dddddddddddaeebbaaed65a6b4de10e53bbeb61923d1a65586032c1cc440562292778c1920e8abc3599b8a3a2e53261fd5a31a40bc972592c2a3a32988b4545470673b1643019cc65496b3ac1cb843989bbdb52bbdad5ae3d4ad2a765f6b4ded49f1fb56767bf900f7567b26c7af3a3d18fdef4a68a8bace20755e5bbbbbefebeeb4104c9ccbcbbcccccccccc3c97b9626666aee0bb255a2e8bb9ccd9e974570f636f134176678e68a2892492d04ada45856f886faca9a1bd79211427dd7d378fbabbf3724e79c61f9ca8f4bd8fbbd3cd2c652e5139628cefdffdf031dcf919b9436960a918341ee3c6a089ddbd17a0716edcc4a0a11fe772ac16715254e48e06961383867e633ab8847ceda9a147dd30ba2f0d23885a6bad75d44174f76e13bbbddd9f225f7b4870ea8812fa9047898f3ccf4e925862326a8ebfeeeeeeeeee7edb3268a3b027c49d0ebd8f9e1e25d2e7ce10d71f1f21e13893904a94ee27efa34fd5129ca8b5d65a4f27ee7838213b7c324110415842b0c20a49100744811cdd094f60088ee00d28823438735dd7e55766b3217ef5c74591f31c0b472432993ecb644ef090b3d3e2040fa9991dba1d39df931cf96a08144266e0f5daa240df044720f6da6baf993ec66b6e7acd4daf99e85a3044d7022b1cd1d55e73116bdef4939f2dbddbdd99cd0bf14be497c82fd13581d7da2384cc4c0b560b0679789f37b5a73e174bb7f2082fbc70bdf082c78a006860c8a963d0e9c495432ce28d47ccbdd75a6bad9b81d33b9dde290002c0a0a0c2966aadb5d617388ee338ae6badb5d69a820a2c6016f4de8a76dbd1724bda527396655996ed96b6b4a52d3d16b28ccb38634e87937513e47c9d16f391e87befc45c07a7311c4b5a38966672382da8c5f3b2c1602f06928afda9422a80d299518203fa98632d7d0c084188f546b4e7049e8b7da15db0210753ec70e2c1076a0801825a92360268cfd782419a63c5f048342221db5a81ae46094079c3e107fa6e509e9a18f40981be8da409340194b94315c0b1b17fefbddf44aa9d8ab2338fef13e7e35870ba6f9e54d1a23dcf7a81bed9c2aff02b301c0bce869382d077c2a900fe6f28e6fb075be3bf4c83f7de7b2d5e785b675be31ccbddfd31c7d2d07f9e37dfff9df2b4fcdfd793b8ecb3bce7ef79470b9efb6bde7d4f45470bdc7be3dc79d8f1b8f3352ecfdbbda924c89d2fce903bfd018082e578476ef7e6089d62c0272f8b37b793f0fdde2b71b944ee661b94034cdffb6815e8533984958d280798f6e3c4cbff05625ee63de8fea63721811bf137e3ef23ea4002377ae166f621611f8b6ffa733b407bee94c00d4a055da2cf442f2af657d068b8dda9bb2fec522b4137b04e9de3580e18a4db7b8594ce209607debee0173e1d079581a19f896e809fe3d8494620360bf7a639d0fd38b6fbe286fdb4680f83b4d881b6b0408bdf178f233663b760c33512e24f2317b00250353903432535386431aed0ac2057dc50a925270c2208351f0d7f87d3b9aa2a2472506b5e4034a8608690157d1b0d4da8302e927cfa361824b8416bcfa3e0fbd285210475fa361b88f012c429e214de0066fabdf1bacbbbbe7119d2f2aa522b05c4ffff93a08a4a45921d1172c821c36d24d7755dd7b58d8c6cec2b35dc4463e42557e1fcc6b67577378661188661dd5467ba732499da35544575aba35a6d23dbc8b661194e050d4e380104204c211f779e9031648ccc0d3237e8d8286aabd8d5c6ddedddededdd1b2497712755d6b3bbdb779a3e7b13954ee92ea1ddbda65e8cf6d59edecb45ddbdbb73763aaf4dbbddbd5767ee2ed79ee67ac21b3a3227abcafa13e34a1491231a12da1d19ed9939f52772ede9498a2569d29c689f2c17ed99829bdcb4eda28ecd4304a112120cd36a6f23b5921c070a77121add10d1a8b584045b4dfa5c0dab23b562a1384465a3b2914412223083191c411bd08437d628d7a05c29bfe55dcfdac3eb597f7cd416ccc839a3ae3b4145470673828a283ba426a39998d9b15a74643a381166d3fa50f498d60acadfc9f953639068498d7f0feebf035fa83dd46028f43e38d4d5841e1b1045bdc7cb3b9d91f408b5470869819f3d173ac01206696842795ab0febc09a33c2d208b085b2e06c9a2077fd71f151cd7e1c5a03c3baa5fd49f179275975ea8946eb8e510b2490000d3160000200c0885436381244e65c57c14000c587844724e4e30938642a128c76110064110a30c21c410608c21c6284464c60100a85947ab21f5ae119d62b3ab6897f13768bdfff6f108a8354b9a4763eca3709d27f0689dd0f571529a8b2ad0e5a54b81952e7f8269703d2828de0b70f5241098c76506c69189028b3687cad5f71d38f990e4d7af3a988938080dba3a9734bed9373dc639e3f498d4f5f438a616ea316d61711853b1fcd902ba708aa4912b1019b69d9971858a8d47c9248710599aacf5320376a6e302c52b53719bfa8452469e2eb6050f0d9d8ba128d4a5ec16b36a6d0780ab0536ab457a7e68377e940f295da8ecfb4539c47af6918319ed719edb19273aece21cb9469c120cc5855238aa5d7486e6b9b3ef0d1c1665e2d4af450f5d28fa4019e173f487cbd8308f3b4bd39eaa7353adef44f69864cb04e60cb95ec4fe182f3b70bc1410e8ad03135b705931ed71fd313371d11e5f931f507da0d80ba1675387ea0d8ada900c45b1bca1f79bc04b84858f85b81478ebc7853cd2078ef5c8a7a8055be0ed4c121dc6d003a57fc376815c34ca8516d7886eb1393b974dc9a88b2d804554f24a040283358b313fa673130cc6a9d37bac99d060b0c9f2c4f411eee11f70208ed936eabaa847fd0e325172bdea3ef3602c4637e385ce2f03ad9c1c014082ed47c5a102ee46601430b453c1d2e9c3cbc71e01e7b37cfd3b7200272566d37e6a8d968ea66ee1857c598146c8a67c57bf7b84af7e3153c3faf53a21373e8395f58bb254b28dec93c7c4e1f1406bbfe722bd300f59a21417d9e3d3fdc570439ebf99d297fda95d56c3502e769d4e6f292840b582b6bca1b22b06247bef1d79e7bb712096d8f7d02ba02d41847b88e35509e59252774cec792f2c385f74671d8818f29c59f15238a5841155f4a5bc19b2752331a137922bb5cbd01df755f7b8aae2130583cb059b71e33d864cf7115d3d67c47809d45917d10b2ae4825e168479f5f1bb9ddfc8a1d3583bf0d094c93eb74022125097c75cc7a590e7da6b16571501f34f87b784d4aa3a9a4f801a06f7eb29400687c1432559983dd534e718f25877f74ec89ce31cedea1f6ce21ee464a7c2d11487d65b17ba05f72ac2382250f322e233aa153ac7a004e217d11f79db78459ba4bb07382a049a39469487c51a5c343158d791848e20f66a70bc45477633927528a9a8c9a665ccc86d1cda47d3dbbae2fabbeeb8378b4c3f405e12b9c95783e19762f3b08c285253963a18830a8547469dfff3d786b2065774cef467ba586428cdf285e9d6cdccdb8c333f3e7d9beb619ec6735bb268aed45bb3fbb38cebe42b94b62ca51d23803b1a674506838a87a5718a4976c81b6b893ad3a6d3c429de1c5410e66fd200b721a423b523a7dd45e8aa714b159b6741b6dd224b776b3c73db9eea197f95904f0751130591c6d971dde906e26126d7aa2454f8eedf5e731da97bf6a7b958f11c5337e998d449cd41d10d7e006bf6f94e5f29e22be13e4a1aa71459f9590462e183b2d05440cd40533b997da6e092962fb4d2aea3437064e78463f264adda3274c7d2c2bc18fb1525bbc06d4d4a614b90de2e3721a62bbd7453b50fd3197925485d87796eaf05f84fb574b602cf9000366020d14ec452364cad8357d1f4c849f5df64163d791939dc9e7707cdeba5d8e6077d9b44624626aa5f32b2b1cf6c2502ea80415a647a32ac35c169e18c60c3303b8c790576e6d320e6627e47a151a8034b70165f00c1fc285e0944bc46111681a5bba0252efafcb04200b4ef72149b16d6aac46628f3a5424b731f86c968b8a0275d081b94d4c2edd8abc2d4cc76979d4b60074a6326b55aa75a90a96c13c38b92ad74ad4169acc0d19488035b405542b786f08a3b2c755b02dfa6854020a2d3676da8b08933bf0f44c4b316fdde7fd698a6be1bce7bd05a975264d7f4dc907c550858a16ebfa9784bd1e35ccbf3d662b903bca54bb8061b498f19011841d57ce8686ed0dfb18bc1c45aa6b3626cfb428b768f2789d409fa71aad9fc78eec36122555fd344c830dc829e612d3ac83f4b91327142b91229c99ba09490d906bae17bd11f9bf4b645737cc623a8d2f48803e00b901360393b0150ed3a6254de291e5b906c82f8ae475dabd4ec045b67cbf30aaf6a9587fddacb97681f1735117b5297cd466866c8a38ea1c5a4ab94d608326f0c9d340f7b430d1f7e2db38dc9d79b739a72256cd0b64fd960136e8e2f17cf344097eca75d318686953476b0552dcd759ee5a9bda138e734864606a4f2cc08971aa56bd7aabc62df71a96d034df4ba2a85c6e2137738a5512606857485a7eea929d55d87c116525a3c5e618c960ea708043143e902b876a2685a9d53c0e57e6faa75823d501ae1ffeb44b4863d259704d2c550155297cca5209408227ecd4b29ad5710d247a8efbcb19c81f1e807be9f4319951014ee24d5a193014ad0c5d7c38a64c523c2d52ae1d7bcde5687ee5ccff12047d415fc67a13868d7217566ce950fbbaee4c762a0f814778faa75fe4e70ee0d3166372eb748ba3a93302f4161155eed820b1aabeef5a21bb481596802bc99ae5845b7c58bf05c189d86339d3b861800c80daba04518952b99df84df404e55ba4ce3c7b2f3f4a73475a7c845352cf655354b388ca19f98d15696fc8b7ccdac477fb1ca09000da6f18d0e7865fe14020fce0089e24fa1812a20639d15a527458bc9b4afe8e846010536c05e041687b627203a49d3cf0c18cc6a245d96b9d84cde3b1784fdc16310b4a6b936664ccc7091ac17b0acc44d74de06e3ccf4562ebba2ac3b9699d487554a73b00516480082ebb2e4a207b41cac2bc65cb4ab4447aea56558d05f7ec38f2828e65a8804bbaaed846293e9ac56755c91579da6f399bda9104e51f48d361e2a6550eac333563ad147c7cd3aa1f416094be7db10b22919443040d1c5b13d86d60f6971e46850413310bd85af2f4dae7281104c64832b7daf35d53c97573d4d2a47e102891f412190b2d7fa756c62e142cbc18397a727b72a1ce91a8477521c3843c53b4baca822c3f5884df26b9a17c01c9214324a672169c775d3bc723cfc9baa9b68832371e58f9392d14d300b2ac88f6e32baaef70fa7274306a6da80c3ec2409b744aa384adae3a11a4838036e5330670edaf16b0f697962bbb28d29ee3a1af2261fa35cbdc6445d4a12d79e09d13e9785d945b8a6c32f35a62d0d919a50e6e4d2f840b3c23a74a2d03121a46dc116381215580b7c74a76f164bd3359c523b058e7aea2f35959529a3be06694c5676f9000e9ac6c727ba9dac0490fdb8a1c9a81f9396ed1c82842a32f783de76e9c844f0a8d63657bf092a873841cda4558ab5f5dc96fabc43ab9452c2850dcd063c7ee4e0d31525caa342583b680b48033f454710f35541f2330391242b24aa084eeb47bead899c99ddc4dacc83b63f5dbb30e7772df16316e6d8c7915d7a7e23581f6ab335058f4504146f909a3c3740f8734819c9225d044c3a265978ca8252d521dd4fdfe3f07bd8bd23f9fb0657b5320ff5a962abef8ce47f5fae245f1d1ece35686c2b517f1892bf45d2a1be1e717cda4866aaa97f1cb0cd4f68539e69fd22fa1add14d818d99028578057bfd1a94dd68ebd439dec9f11125549e8647599d16436671a06f66c9168b0ba667807f84f1afdc8dacdc32f938958f43f09ff132be1981823e458dd1b36992359420e49f808182171cf56a4a38c2c89418de6fbb5d40297313ca47dda3a62cb1e85a8dbdec60e6c33ec874814f01824c16b3c417690bb59e2764532c64acb8f8ea38f982dc5aa511f664fb6401fd0aa1e4c296d1794b964d0134e4c74e94f84118544c640e98789977e372efeca7edc8064ca8f999dbe921f37da11f36f25575d0282b1d7cec94760c11bce07ccbc67a54bd71134313dd76a5dcd51cc634d0e7e7274427faa75e88456744aa952a354e5af22d356efdd096a38665e6381654a537408e8a0d9c387e11c1d90650d6cab12f67d1fd958564b4c2c9e4ac3d41d0edf2d4bd31b5593fc63ea5b1209bbf72af2d92c38a8b6916184bf2425d999b295b438d1023c97d3e07f14193dd1fbdd90a9b001b331403bee237a92a0728e9512bf2e4eaa6c2cee3a746af924d18fb27d440cedaecabe21b63347d8a602c3a02ea58948a3a4afe7975f108843c628c8b632ad501b9968e7371ee7fa23b97da7e61a36312ecac5578262db31df81182da45cd4f2f3e0d2cbcecd37416305740490d65b982c240cb54d514ae13648f00ef8c03af04dc89d5541208a18258ae413f283e829f607b55028a021f2f12464f3b825c7906e849759172374ddc728a9ce5108e5102d4e11959fd6d89f205b84b0851f8a0da842891ad02af53bf9e393ee6b00c33e1ee65df24897250c865f86215ef9ac9b9f059198d06de12cb4addc8dcd95c6ca4a1b8a6fb1a7ef816e56412feb6c1c7954123be2a4510bb96db8a1c14f40c3cf385d0132c46879f9860695ab38ef391a57e49417abb0c74ac2acd7d80ee4829e990596941eaa5233f82799290240b3ad7e338e5e32fc647b3273c7da90031c35132bd857427883f90dea7d0a9380020a26016828e116080d3fc83e36eb61ba3ab413114519904d0d92fe06444e9504827e893e984975317c580e36c29dc74c5012981d3b2e7e052235df3835f369eb144fd6bc89c28a84d6dc38c2458b48e5e56479ce90239c8649277aa37a112e9e816f00716ae7a794c231601fab79cd74013c253683a3ee4016a4609db60f829b79907b42ca12d469f616c8cd9dca78fc8c7f06a1a245ce502de3497b831e41cf5972622d50619f1121b141e3c5a32ee852217978ae5096391051b9434f5062b6b80fea9eeb83a6ab05a1e8d438641c74f76a8c56852a7ee5c220746fb46579fbbe395703bb8d530c92513d1c0e6de164167d19675f415feade0dd407a16a67b0c6e227d6c8e266f41aa3ec2040862148c70b3914c116433e9a2892a1f2f4df061e0f1cde1c684db0a3e32bcca106390e34326eb38c29110705d61612db11a615ebe9db79f6c9c472c661a31b4c71e1bbe9bded872daca30f5cdbe1c067c5abb93e514fa0af2d8ee6eb4bd17fe554c0c829c4e5b4d13f6396a41d761174125d57e65e6d533b9f6d6212cdfd3ce3bd07361edc52c9ca780c0bee350aa9d84f4514915441be16fdcb1deb015c43826ffc767617cabb9a3062d871b6250a7ad078b36c1ea531ab5c6e5e769518c972470060c58e55da7461fd2b13931e189a11546b61540f0018ba7190cd2ca12f40711c6625d2d409cf83e53ede45827a3166da6138a055bc27930a2f0906e4ae225557999fcf0e9cb3ddb8567060e305c182191a998576018d9def0f16a1298140296b1d0cc7db2157acec120ed6ce78f74fce8717d048a63d66b1b80da1592161aad0f4e3746b4d67acad602f882fe8f6329375487f12dfa004a3495a1310290a82421d6a604166e6641fdb01d5163dc420fb784294e3824c47a4f42872438ad9cf00aa17b6ef4d2f8b13aee1bf160e137a81842480ac40c4ff21008c3060c520162407ffeb53e99bcfabf511dc8fa0e59abc2b32ad12e0f7404849715ec60549105092ff66448f3726e0fab601182009059985f282c2c39b545318e6cee6922e68e281f5ecb9f113e3277c94e14a1e419c5c5d46651ee21c8c1bc53d42bc44d87941e4df8c3b6f3cc495fc1c71461e3292564ea401bba68fb8830a1ae303c9810176ca3ee23a4a5c076fee58adbb88836b94389235fda29c383ea680a8cd9ce07e66c5beb9ad25071c4d7220f9a68d20956e514cc043c1e810a40f9c5c993372c68a23b3aaea1ff96bb3be91bb01f3637d0b7770daee1160ba82dc8b716d115e75c0c72a8d65fef23c7da5d3a9f1509c5f1e7248f2489e6ecfc8b2785836b70feec2c3cc571f9d1a42d95e823d617dc1bac3691b1e5fb3fa666217283c4b75f912a58282a01c9357d6df538c05b7081341f32920b326cf89509122b46faa3fd20d4a6738b657fd3b524990702994db0c144c9806eb443226871244e62abd9ab2182d465a7c371b12cf86d8b3467b183e3ca135bb83bbbfefa464410f660560262ad0330c67b2977afe3dca8633728906e59c0d06d688682699bdf84349d0863f6c23821a1880af0f5828f6f410a91239a44a3733d44dbd113c15469e032956e9525c2743df0ee0953d5f1fd06951b47468fbdbecbf3584aeff2e5402258e8fd328463567fefa4c49cef721012e17ac9a2dd0e9aeafd4f22b05e41a2ae7f47278a4b6c1bcb6538230cdfeec4fafff7a29a293d02988edb9e44d418b48e58dd7b66ce0a36031a7927bf320e2e8f5b0f29096aa7e42cfd0c693d9f023f177e9f8448263fab5ebbb83134171f251226457596d41d0d5489d7d8dda9c265f403019e5cc734f6bd49e05182c405c5f30a4f5fb1b9a804f13f1b1ee329d8fb012c05c839317e59afd1f9d22b2bb4a8dfb5e14a8b88c36654a23ca7a762b4a33b87a0493ce48132c6922a78de594d43a736a92f95939f11eb1c88f79d0654e1b262c4b3a464273e9f9b4b7ee3bc58bea34c0ae31cebc1ecf8970ba8dcc4368de8ea1247da804abd1bcd20df05c8d495413e512f3160970059b3ef68554188c8752785cc14d49ccbd03157c11c789b432c6d93299379614f285405a90e806a83d53b02ae8b373604442506e20033deddb09af20e630a7cc44e2822ae4b8e96e48e81867c2a63e2cb2b6e71867bf9aeedae38a9ad1e7e1cbb5e900df4296052be43b57f25aa115300173b02b855fa6f8b42513d9b8213101a415f236a724f4d3b7dff7c5fa59181de30911c485c94d15ee6e24cf724397a017025ba4c21739cb5b68cd03be492ad5599838cecb44a91f472c0ed88b03d33b82025779147776530d503686919503830718a613c86ab312d77b0946dbe5cca4c1bcedbd70ca221d7c6e32ae3ed02492c08d9ea928992aa89f0963e3cd7506f8ae036b6f17a67880ed64d03d5fc01776c932b191b95f4719c83521a2ec71ad58ee535dff4bef11af11d97227976a4f3ca4f694336ada54c320b5c342f5ca378212c68b5739452f19bc808504f795357c0667f0a7d5b5b2bd201a6f9adc9bd49d2a85f9212f96927d1278ddfaa7777aa4c07ba4344655a0755736650ce9c13ecb6f4eab004abfb35551d1ea4c3c9a361c2b8fc1e817b747e59e149530277499eb3fc0a44a4022a97af8e44ee3904aab2093c5c818119b113a8d430e407f841a8c28efdd640114819946dd5c96d6380d08f314b70627ab23e4c06db874930f99d1362287cd2db7ec7d60adb294667e0c6836f4e0fbebf9ff35a73faa50fdbb36be7b31302800743855441c331cbe7701b4dfe02aedd09c12f20d36c7a2097177f8bd0834dc05a71a8343d3ee826cec196e7dea16efdf154fd30ffd534349b8238b45e18ccd6a8eaad01b141dca1fc809585b1a96e92737695ba548d25d9b21f877f493888340c1fef7b20953ba22c423b639decf7110bd7e409f6a713168fb20fc9a4ffb7e2926d8d003fb73d98b1bb1e896c6f567974b43282d50e8bc615fe5d4b458598b624026fcb560bd04be782083b9889e4410bb3c6e6f75235f24f817e432a59fd564320cd0a7ae3fc5ebe0fc121b7e15a5c7885af13e9582b9f021ee9b8c4700bcb3004e5aa5618ec85dffa9a4e15e24f484ecf92b3b8db6f81d244f61da7d382d94553f86c6defd2a15f8a8064f6d5cc6db271b5df691534b852758affb38677a412c3a7013dc379bec1f5e05b0537e1d157f1a27cbc3f7941bb6977e19262326bf396a162d54f09f75b9c6d58eb46446eaecb1f2dc83f6280efe570bdd331a7f2cfd15f8ea966ca6c115fb05dc14e51b1f597e7ea80005f9281b9f4a0a8fb38969f82e36874be6660b43163984bfc0c0a4834c4fd1e8457112de603336d481b18d6112ecddff464235452cdafd9f0a3c272b15c7981dd1904efc015f38bb3893a53607bc98ac21351c82fef048fec6dd89475d49306ca139c03bf4d2b2ae69938caa5fc65d70ef7bc3c3a8b1f44dd2ab4bd3bde86c3cdba2458db7b3c16c62a1929d8ffe5e5d686a52c11373d268283cc657da9e8aa156d50b34797962e915faf2aa611c75b27f33f0fc68daeb5d0093b302a2b3392713d8ac2f1b92403641d20aff4cd610d8eb0e633ae7b7bd49ab0645a4440964896ec834f8d6a2f7842d65da7869570923c05804702dac912c103b6dd9c2f983062b34b2a7c9834f53e39a9a8480db511c6af10c0dbd1e2c0c11cf99ce8891f862c82021333f2a09bdd4f7086fc601d3764781d908e20b8366f25642f5bfd62b09d540efb60c55b6199f389e2a57715b388fb09cd7500b47c96262ce5f0d008844f9c8346bbe8899b08f90c54828e4268b6b0fea84874441f653308161032af825ef15b9826c30fc5cd816a341ee353358276eb24a54b85c81e8e19633a286b9fbea47e9692d8979e6580c18a0cc8a11fed9d78056882bcbd7b49592c246f8465e132ab916775e335de4af1d7626699ae775ba4c6babaf55b9911fa2ff171dc02e74367370946ff1de6eebd3615ddd00acf7bda0c1cae8f3fb37a9008094c75ce5f02b7934273a1851655f3cbf280d578022b3a73670f729cca920d21c02d192520da7e298618999f2af8befd984142651af2e184246cf7f4fcb73d592dbcd2364e1cb0b3d92d214e07382bffdbb31070f35f27b62ac17411eb0c4fecbe6e4c4fea614fd33f2bf7f36a8b3edb493c88355b7649c286e54536fe89283211f594a612e379d3acd0864320f9a40b8fc687f89bf8231d03e2577fc23d0ffb2390e501c287215b36c2805ca3f70c94458b9b4c6ab0c0ea3276f590a8febda1dfd4c07f3af18fa5206136ca191bca8d3ed9221a1bd48413e4d238e8af9747438938b8c9196af515603a5836a360ec966083751f1f53ec341d8b4da343bded4f0be5abce1608a01966b6b7cd0d1321c3522244908414e6f82931d17d1607a75645c8a70ee97df5bae211a0b1fd0a49a486e2479d036b6edbf4f7fd48fe42690e791be5d55f909c26d988c7489cd0230283ba81a890a73dec7524c27021cf4d9a2926bbb51acea64cf1fde7bad40529f0325f39557d7504eda9ff32935b34132b8934c0585470946515ca9669df734b1a3b6a7fe89cd0dd21393c92a1b36f144eee31c72f6aef99c8832d2c771fc586b89fed82204aac40e43e43ee5f31c733138ffa9a5493c4991ca19953691498bf439b88514f50238522e0e9d20e706c8962f7c0670d8a16eb7cfce944c9f9aeae1726db940707421072b6852525dc28f105a67c6a31b9aa1b6b7407ca5d4326ac7d1f10110443255338a3b7ced85354d2f5a9b0c8c9466158c62268361e3ff100cd3af21743dbe253813a68ded1043d30dec3123479177c857e7113eaef11f100fc26d17d2a06c3f64aa190f78c6d5c4bbfc7a56652ef3904a13f1e8c9f9c87fd8436a3c27cd2f41e54712064b4672fab89ba1b78636a46cd0fcbb21e2068fe00d8342b88ed5065558f7193fa5c1ea7d66de04fae0707b10545f2334a4ae5e2e53ce4d71be25d5fa1bb74f0e477ddc3850fa689ece0f6a18f88d28dab4c580adfc4666ff7d485f7795a783125ac672edab8e4cad924e6df64f8d236ae85d35a2d3e69115c538221941464c4efe373733cd04254c8db7784ed76a5bb4cdf0921ed1e9a406f160366e550472ca0a9360861c199c33b252e1e6e1769ee86073b671e6c463766c3aa0b68834ce540060db095b67b8e7bfb109e19a66105396eef2684f210680d2b4c35ab2369d86656d6db07ca1fa9dd3fc9aa87df46ea8ec3c0a44de5fe23e02cdfbf3f4d1b0e240429b64190cbccd6af5255b6d43b1ea6711dca6749a6ca2014cd5372b0ceceaced10fc5b402b4427ed05fc10fec80753520c56bcd6e24758178b318f46c9027e2930e1bdadc2d2e74d9a20d8c1bb37d6813041bdbaebc718b2c6dcab7c1519af9fe1b5b7221be8c25716504faad6f3089a83e32218682f0d5c54da9a4c050921bc7f55f19f571f14c595c4f9e41bf841799a46c1281ff31090f20f66e1fe385e8f53deaed439f50da1f7758182921f4443be7e58ab0e0472e36550ee141bc52c4d7f40cb76ebb766faca1c737474e73ed12cdd09b69af7722b1eb53d6a10942002a12c65d786ab168575e24d2bd0de7139c994eb2d54a2233dcac1e8bafe0ca87d45ba7baedc297d1aa12445f463eb3bc9baa2699e7edce4c3f22a68bfe9bc3095e4c0b35f8b3374d4b55e3974527cee2ac601586db17ca6cac39aa023b287b8478e9b4591683ba7613206c4e626e7bb3fe90a8dd3fbd5fb40c15650dfcc769725adb5ceb4e5f29c3e335c30826ee83aa510c5411f76f7db8b5f5c635158b2c57fe50e90a82b222ca651ca736ec2fee0902469288ae391526001126085dc44814cfc14b0b186ca02d93b52ddf9e3a00b82a55216bbe537a44e35d53fda9e43fccc054dd65be069581b7089c5e5457f4c159bb80c4dcc0364734ac8952878c7130898dfc53decfa7c12b35d365e890101421264b805c08c1399a133e42a9b907f54be24e21ae2189f8a7e33098465b6bcf5790c72e9b83e7f31f0707d20d8f2dfb471e3ca2268bf4d4b2b5f85250900974f0028598acf0bd1dd8a3e32804b8f0c5e4465b738f4f346d00245811fcf3e35deff2a02ebb845399c03e7677c952615092a554f876f8c9d0fe73503a8cb7bddc3850cb03498147eb6eb1d668f83825cb55a036f8dbaefcd4f5d916b79019a7540313ff5c0250f5d4f2e1eb8890b6095b16a038eca9c79f6a26ba7f86fe492c6b06758ec839a801557a5289947550c6b7cd17e31c4d697229a86edfc80acabc6a0695393db90dcee475111b4ced5104aee229d94a5227e19a05a63b4b091d709713a640ab598d63ba01e255a49575092075991c3459e79c260468459a76c7b12182c3f4b46a8d340c182c40846311cd8ee7fbc8f2378182f6276eb4d7bc125e71948b628b76cb103a31296f8a1869a943cf0b6d90ca42d645aa034d0b173ffa882a0e6f356161ed3eff4448d93544943d8134d5ae70936fe926a7b60fd5706fe2fd2dc24baeaaf88f09d7a5f55c38e6b33814bc33a8b255986dc226cba1e8d60d77f4fb64b972351ba5327973afed0123b0ce12ded2b21ddf97db87b00a87fec696bd6166912e186ee8d54bf7eebc7ffa2429a27a5bb5ea5b111f019ce0275cb35d30e381031731b1bbd312f76dbb683aaf6010cfc75d0f9ab6be33262bd79c1f00b685c1fca6887206c609451835c3a2034cce0171e434b25a8c86cef7d439e4aa3d347c101f289361bc5e9a6c2bdc00f463ae5aece0c5664024e693dae5911da3bf976045b914249436dabdb84817f808b4588c43049e152fd01a424375a733de0d9d20476a6192d0c5349720043c9a9a81e5f1c3bc1d1ffcb22b5f9c5b6ba77e3e0358a09f6d1b21ba30294fbab24588bcb7a231583f65c1cc58e63126f29c8184bdda34b40cb04bf78dbb6f1d935f5d7201d0c7f49302413104c4767c41335ba8b4c358976b6be68438f84a342900f33df9c9090cac6d76312be9f185bdb285947b46b33371b1dcec344ed8ef7c3308f7cc155f5fac9a92b8bb10918c01f4bc9e2a5be765e5c54413118fa6a6d5eb78b0a7c143ec3c96f13872b7ec934fb3d994557cd24e230db29332ce9a1f3782948a8152443195bf711f36563d2837343c7c001b1cd52cae571a25b1e0f17386a13d7c2afde50565560fa43db509957aac5e41399fd9c692dbfe23843ebf2b24ade9d94160ee38c3a27f62d6b04a6206f99a92851e932aab73bb9a0f83ad55d220878cf6bf68f0fe76ab04eb22c6dde1edfd2db5f47366851100dc0f4ffcbf3d45643d05b8144dd17a7274a2a03f7df40747e88d1b5eb983a753327609bbf5c8a58cdef4475ea9b1a59bb593c30bc010d3a401a837e338209546a8d70d2b1748d52040fb09150118d276b095622ba572f4c0c591f924b8ccd8fb07ed3b1144249485fc77c66f5b4af98cbd77eddd0884591d1c347521f60cd791a50b9b0dbc321b619d5ab5697ef871025ec405f4580fc22f802826e59c95e7c58d44124f16c06845ae53727a4a7f1113d0b8808b721124c89d977949993615fcf2b8b39f8f157c368f894c12d2245f84fad38f220db3f4fbe270579806d9210a08f3e687b63698c4faee99eb487c5fe40755d0ab746830512244ad6740b992fce221d0c8a800363c8abeed51546dd64b56456f488bca629607e7eaa705c5a8673016f07f477399470c97d4331657647d2a90ac9e367ecad36e09f83318353fb8fc0fd0c2e054216c6f2b47d6c6f8d0af6fbc85d44f170192e687a0a28fc191794aee07fc03cdcf2b7d093ee3b65eda0046257165433d972084ef8d88f21778517165a78bfd0cdbd8dd6d2e69ae8b2dad702ffa6039aece32aa4f3e5932e642b227633fd528b19e3a211e941d510431e22861c0d1a4cb15e857ba5363033aa733af80e613b771585117bddad4ee21177f9650f4e07e97c584cbd22fb0b62a4dd9892962851136a1b4320a788e3657f86b669e5960f2e6a023a28ee57243f35dcce121fd121f1e852372b0a2fcb6218b4694513f314c733f445ef5304bee32c5392f94aa0909da690c82141111dba4d37d0eaa92a1c37419baddc00a7ddfb57f90f8f0143e3dd8f184c6df2c8c9ac334bf63d2a7ea9073e69c064a7d5e8af1198d8438e50f40cad52274114728dac1e55ec4e4c924f93a75f7508f10002f503954e80e4182f03033323dd47fd58db1192e0c9cfd5e92cc9178cfcc275ebaf51c8a9e89220547898de36265c8cd4996d89122d980b59660ecbb68cf5dc7b67b7bfaa66b286220b5d4649c9f6aba3088f2c6b8ca16efd6662e657d51052b5615b86a200b8299463a107e573b378c4fae140a0ec574f1ff54991e724cbcddab84694d336104267c1aed95327a7d1cdee03770cb973fc61283446a834359f4be0d324670b298590643d7ffbc818fe5ba05baab1d751ab7fbeebe2a5943836f6e918e15399b9a8119fa784c7c83f41dcce5b52c30913456a82688558549dea8ed8cc3f3f880841d1aaec50ed8125b2526d529b79aafe020f475b6067bfb7710fd63484566ef535d42877e0525ef5f9c9e824ea1a89ee94a6a45ed7ecdaac766bfbb452e344c5c11c250f342f9c63f8ca6e8ea073f7b1b7c78f6e0872329b90119db59f3755bc407799f021b0fb55589260d8c303ec9a85fa09c15198dc8fd145f2a9355dc23a59969defcd9e58c1d3bdd26d9e08d27eff9d8ef6c25f316aae72e6b704c7576aff49d194bb198d2fda3efdcd0cbcb49cf462cfb929d5f6aa721c6da2f73fa346656ac91b68fe6463fd664340e1c2810242cd93556824aee853a2aa32eaf0eba5cba1c5d15dfd91a4416306419fd4e1a6218b81fe2b7432fd96be28302670c81fe485b7c593e6bbae112dc36df063539223077e5cf131f7014766c747b64d81c9d6c8afbf62bbd4f5fcc73eb6e32ff4afe663576e4368a5d717595db679718b44c5d523bf2e92050d61699462bc022bfdbe12e6b7020889c2a914f1bd9892a73075e111f5e69eb3c4bf8109079ee592291367762b1fe0f2eac0a78e4f8e36abda3a4880717e32041081aebd9eac6bdaf814b32f077a6529d9572fd13b17b4570ee2a73e026a0a8fcd03002f0fd73cc05452086f208d2a3f540fec473ff65f9681d7a098c6d07f42783b10a48d816420dd862003963521e8858a720654008c3e5ca4f524172d29e162a19c8841e563a1dcab7858544b8466820b4400e2a4c3c12cbea8d99063f22b3d40f0c8f0260eb91271c867d4393c24abb1752fba05c20a3315106365f6ee0cd183fb07c43ee7042072b686485aa9a2c94c2253c365bdee725789fe66bbc252a8f8a50ff3817b2d86ed337d5094d2ea8f549f4f84b6cf91d7932ae30d95dfec6ead17c5a8a7e71547c78177441b4e29f1c3befeb693ac5915c80d400e59dc34e563b893ce73a910486e4c78bf6a620bb4cbc5c9e3a36a138c6db788c8438de5416221f5ba5c078dffc5d56b27306f8f8c6a497242cabd7f29556ec46a8162d88e34b4df88c030329bdd2c8fcffc544a46651ddba4b4d12ed85bb5bf87517e2e7954ffa7d49130ee30e08de2bb56d19d9e7d218c6e94a7fb06f0254a4f5e4e2fe20be48c5d589dd2df4a0fe3b49a935bf31969fdc41a5d9349aebfc7395d76d1d9ca40220861d07e2608a6a5c4caa954f91d50a51883eb3d8dca940fea71104ff658c6ca17f69f6e985f9b56ad971241ff31242a46107f14e3127f827d283ab39c01f182b87c5084337afa56c0f0066edd3309fcf3edf2998df6750539c6aac3c8a613acc00bd9018473832c5480c8612394f1ecf1ee8fc83ed54f6142fa0a18a250b69f2f7a2be8d4b83fa5e0677f79d1f99c0eb5bb04adacec98c421ddf150656fc4ad44c7474bbeaeb41c1621f4c601accc012d3dd874dff3620f1ffd1d0b1c081a301c03f319e62f21d5ea389ff92071baede5d482659d570e941a6062ce044487c9449b8b6de65f6201abc1a5110be43cc34fe962574f6a65935460b1359c56a2b06b0d139ef3851089b505036fa315a5823aa9ac66c6418bde355048a8d7364ae87545be5d030eb369e8b2629211f98369315a1bbdea08cb997c03e4b521148b54f0c1492b04b031c40974a3c5d02a3143d86af8b600da2e5125d28b9c2b23553544d0368d4445b102fa8b0ad000cbcc5878a48ffd9cefb25550d5474e2166cec9ce3094157704e40618affb93947f0de1b2501fc926fe257a591a321d681c8c0d173d15841fff6f808a0380206101aa55dbd1e5ab5283f49725ed70b0b0850fcf92a1c7295188f1b8a9c71e94eaa231090ecdb5a339e69b6411d50df605c80953e7fff66d982d19db747426267dae411ebb0c064d0e229b582544890397186cd4c3449ad7790dc1b9ce0bca06a3ddce897463cf5366cc4c4d504e3e2fee7cd232585221a28ae6022d1f3cc7d12c94a6ed00c32d41b48cae97714c4c1197ebf0d4b86c87d40e2a69860835247ae2b7ecf07f912959f52697caa4594bb2e71299092c3aee0a0ebe6f12d6006ef571b3f4046e63c653417c7c817446a872122162ca200eed0363e504703a45becfa96616f232f49e475153586933bddceaf051f4c1dee934958e2b32333284866553efd54b2a54d10fad05baa1597132db4ef9ab9eab635d23e4af32415d4f0a744cfd3c0af09030ca93f0ea2161080161ef69fd10f544a27b968e0551b4f7c858c9852938d3554c690c9ea9e465ee89dda5c0049970713fcddb2990162b1a533cda40c99c73eed3e5bc9742106de12df357461d5d15828e76fd14b7bca06341e68cd26576b8c47e6549f8e6e971ba4830a85a26dbdbf709eb04b64d1a77894f38b620b652957a274399ff69cdc183a0d85b1a5ced0e39a835652ff8dd818e3e3d94d208aed91d047db1d1cfb915bf27cd489c35cdda5ac8548f5c5190d61ecdc989a27dc8fadae0e167824800e1a20f9693d008ec2bf042ef2e704cc50419beeec6bf5e22bc01945a7f5b593ee14ee8ca463c16687ce96e2c33f9f2a795976783f41323e7a87d972ee16e3eea011517f18defdbb5fe6a0e927b871bcc377762f23c325f61132aba49d13514ea9b94562dfc4d2d9eadb2f71766c2c5f9598a717d4feaa486105dfddde57151bdf3744a2eec5206d97d251cf42968cf662ef97a59d342b25d04ba8e3a5ef0d82241507ecc800f4746fc6ea579b144b98e5529468efec1cb8e0e84e61cc0e9a177378ecdaf4c48857d22c893487aa7f353771d2ba39b86ac5cc42fe0dfe3d181e41019b1354d78d4f0da28765f2e3984ec445effbcde8792efdb51c5384e88dcd1f6e7e0c8490c90f1ad1ad0d987cffe39122ef818f3d64b523816b9a6e5a40b2375c61dfa041c0fc30fffaf61ac2b00ded5b9ac3429366b793ef84f7163d619c607fdb4f20ede391252cc93c0b93dd61e2b6e1e159ab28f2cdc3bfdb5235226c719c046e7fd6ea427b93133c4ac8b8ecea8d96ad680983881280812778cb144888b703e22690af581373ea1cd5552c75b46363b30e3f28a8287d78d2955389fa50e47270143a54ea79813d62e41aa4445fc5f2e8f44c15543fa549625aec2c260795de9559ce0e9298464a0c916571c69e64abce7cadff3a13556e8077a8f149b8e8661e04c06e310d2a2d1de4549d6a73c6c46cbd65494652dae665acb1ca041d49f5de895d96af8634cbb751439adf770eaedfd001ae818b74246cefee2d88b62aa1dfabe0a3d64f6e74a588912a1f12e2923f6c174e75b8c7aaac36bd28181c7d371cb730346c73d0dbe401e8ee9863bd3f20628c1e16f341767327e13e9ec529d61dce6f314bf1433054870f1671cb42b0b4346b5012513e76c500173de94518b73e0aed66df846dbc7c7b54f9e111b438ba9b7bc7b9b1430e4faa07e81399b2c2af6163c147a810c04688d3df9f91f448b3a33dd2f4320e78c98f88df1d526ab0839df9f6028b65adf344de22789c5bc7c9e39c1ce34b5d49e7418975641cae013bee60d6cef19600c188b15c5bda90f7c05b57a3c70ac9f6c5e802cb2154f86de16e78f31f8b7d76f5a43fabaaa3d1f173ffcc70e9bc34c624a4f53b6abb0ec5680ad1e1fd3c94e4858ebb7ea02a015a8c496593c9b7d3d04fa8c0860b9011a5ca56636545af49dd720f8c5786982855197b13056851259551a82d4f6b396272696a439b395e2cef917381485aa1fc5b29122c0163158b3e637db6e847277fe2b52710c322f99be648eb101204438d44ef6b2ce1f9030fcf65ed63699c77309eeb8038e53aed349498f1130f125a68e3f11c5849d78cf461f566d189655ac5083f5aa3a2d5390aa0c287d86e9f616fb63aade82d713da44095b127930426b67a5e32074e5da53ecab254f8b4599032ffd2378a20864ce0e114cb1f490c48554e96581e8761ba6a403e60d8b3c3dede5f5081d00b1dc6407966abde2c2211bcf13a4c50849ccd16a1ca108e271a38d8d01b51b8a07634ed4456ef867424792da35f95435c7296e5dd53833b703cce876b87812b8efec7852f17889e77f2efe33075ed4bedf58a33617d8b87d088f93898e636eea8fa2af3c8fe5f3ca6fec196c36062b67d67815e0f35338436b1e61f01c9546c5130bf2da0356aef238dbd8dd8ef8d76bbb42caaa6e4ab4cb449f12cb0212d811e989fafc1ce2fadb27fc39ea667dcd5434558387db6b0cc2c8864e49645723894b9254837d3811f926f901f7ee8604d93ead9918e4f536e08b169301d951f1283f5b52f0104c5529061dd40140765b09b84af0f392c6b21df6f1853872969ff13caf77657931db4878376abca1c25e4546ec6bda6def3161b35a4f98b657240cd3b3ba4ebd2813550d345dc1cbc546ab2186a91d03a8eaef20314a8b95e6bdd4104794ec527240ffea616fbe265ab61a5b5e1de9a2ae03ec3d902159765d70071eb003dc829aeb6bd40d37ca57d5ce27738962b9c703df1a07fc570105bf1b8427d6a3ef95d6d27ca9f83f79dd9ace79138fa03c58758c6dfdadadefef94fa17ebf96c9472b5d128bc0091ccdfc25c5dd60238cefd62a4665e5ce02d36473068cfb7d2fe75e891775722e12cc5aa76c7ea0fa5e1177979198db4858dff19c9aeceec60548fd109b2538fa24ea028ba9bb0aa2f65bf786a6d9de2bd022c0ed5cc3f0c09e9a1fbdb0573434570a0bdff9409ca409badd125d14049b42ae1b6a56c2145ea30fa1c1a1a1f0c88fa423ecc03415eb0049cef54df067d2228bdb1ffd2e309b87141c08296b9c4d8317ec7856fbabe6b862752dbc8228def8f9e1189067d4b4c4b4ba8f0417531db441dc4548dfd69007c5362563dde507459e4a9a88f0a2fc357ac0e9dd7c99320d26404339f127549edfb9da99181af6f865e211021a4009525557790768f5a07c2fe4ba145dab9c734ed5e3ea812bac6fb3df1f10cb821d113a552115453ff4ef0b2141e27a82a60bc37ad882392c3ed7907884a4968a51a44a8ca911c066006969eccbed9069047d8df9f3d1cc0c6bf3edcd5e320e2ec6e7bae7b97873f479a17e8da87d6c16f39343440ee6bb81f23db3dae977c2376f51d382d4729dd3f302369b1cde6647ebef7e22b5cdd95ddde6c419f171dafc22575c9469030a06d39858209a59493ad519efc384bfc2a62314b0705cd137f916330e62d2517f09198e58a21c0fd9c4869c889568f342c38100001084cd449436566efd83b32096b170b416aca550ac9bc1223aae525bdb463e69a4914d08d952ee1d62091e09d9092c5e809109b3666c62afc725bcbaeec3f5392945a1fe0f16156598135be6f9d8ab09abaeffd0aaebd7137b7d52d43f58641397d80b652f54b320cef5ebb3d1d11ab217246200c4f1a1559711340af1771dbb7e6191bdce52c5754873d52062ebca629355a091c8c520b8d8ebeb140fa513316812831fdbf51e6123d1367bb015031f1b024ed21c5b60530238c50f98d08216563c49411694a0c3364a987f4eb0f2386c9680b2040d4a20edd6c166d940155f1b1bee5f1b9929341564c6c6df5853406efbb77de99d3ffe8cff4ef3f1eab3421252e082ed9f57cd92386d896a2c6cc9e006765382060b5b3570823559d85a8287a708522c6166d865c3c2560d7a604b66c85a0a382c6cd9a089a55d90974461975ca209f18685ad1a8cc1b2d84b2fe98e890b292b590ea6146a44ea0a33a8246162306d61686693c6ce243cf1020b4facb48543723e6182ddac3c4afebcaa61e5bf275a58791c36f23a78558395bfe1156c3d918295df8157989543f634270b5b4fa2b02c16b69e00d97b1b6c051b0b14141e661b6cd6c4810b5148c2c1a18b2e2cc14911e12272d869e1704d82b341ee861a4bb4e10945d0c10901470ca4885c4560bf9e04e78202bdbc9317744bc50f87140befc305983581608b064d2e9462737bb4b0b3450332d80b257b3fa8d064055735161ebe26f2882b9ac8830fabb037e6b4037a1816b6bac8828df5eab0f0b37dc35368106909de017740580423a420f108909051c6e005449319bbbab19a04270b03dd648f38bbf6c88e79370dbd22ec7cf42e6c7936c76a8a085644129c9b9ede153ba390bed78f489bbd3d2330fb06b93963e4cbcbc72d028fac7c63f58834713c13723932bed1f6e00e9733dc6105dce152b324608ee6cb09fe9a28121151c994e055ea337e278ddf8c89edff664d6c3f1245229e39733934ce5c8e4c0fee7a8962b133128543356062b1730d9e58ec32607e4fa85fcdc69c673c12b52ac623972363c6a67e51316c2a95fa85ab865fea5095ba3c843c20b421f52b629e8c14d33485423be33d6e67bc648a5c4ef61b76f1aecb6b1c8677611ca6b54489c5ce346860af318403200b731b305eb435bc6837c8e5d4432ea7c63718616c161b30609ac8068be635aac7d6c637981a87e172ea61b89c1a87b1719792cb21d7c3e55b0c0ccac8ca111748db0b4c0def465bf30d7239df2197a3fa1683a8a934117f7db904bdddba807abad5527895bddf437007b45de3fdcb095ed57bbf53f57b45b1ddcf7a3843996a70e466a9f1195eca93325497c1e57c97c1e5a82ea3c6d9cad422269be280b47c239de5ca5597d79cb91e359f71c8f9a839df4ba56696aaa920359ff11935bdc32b1bef374fb3686eba4c8a5733de8f557845e3fd68c4ab99f7a3155efd7d95d79fd74eb4108c12d7a3c6f9305e8d6fecd57cab79fc39202d0d1a333468d0f8e9d9311a33353515a4c6699c468d1a04ea471886e94617ce47ca48b430ce0159e3a7a78c445b730e486b2422591b37d2591b361ef38b1382bd46e540b430eae5bb5c7242606ea37220da9a7af9a8df740b97c39d3d685d381f5c0dc2e5f341a07e245a186ec9b7e1358dd74c58d5afe17513fefad5eb1ffefa9ed74ff86b2696fbbd9834e3c52f687811c98b5c7851c68b282fc278b10a7ffd182f16452a51e88ca77efb3364a4a0b18aa5ef7e9b28e5c5f88b77a37df9e4b21e18d019355bc25f3f860c2f5382bfbeb848d41355efa43091c8a5c6a8598ff6dfac270bb8c34844e2472144bc3abd1fa9f0aa08ee08829d2dcc39102d4cbd30de724a6f1a8607ed8b07ad8bd752e7c9a35e0f51bc12bd1bbfb0fdd29168243bc319ce70068b21799d82b2c9c3962e286cbd8089bd7e8b92714facab597e849673aec7776b5c4effc2b297e64ac35fac3f99f8933636b2bbbb4a948ff38c7ecc891c257ff23a42dc11f93abce2755db1e3149e100283eceeeeeeeedb47453876ecee8e1c59885b052db08914a5245221d484c65271828d8a1e48b1a898203431a594b265b7ec96a62329a594525e11e690525e2ff4c5a55b764bec325d414a2825942809a18c50052feb0d7750d0f84b764b1a931509a584706a1a163a211a1ff9ba3c84505e1b66ca5eae090bd70b0dcab4058d52cadf4b4a2ae5157f655b1bdb9f7d59c9706ad9162de575fda0a4c5b509c1349fcdbeb06c0a616a53d04ab04ba56dcaceb097222f73ce6c6edb659a523099ae73996c0cc3fec32d16af6912023759bab5809159eb18aec7656ff87302bbecc6a6cc93766bd3256715ad94b1c4d63048c50dd4014258c50f4f68f4d2bcb7ca886af0736aa546c59ca6d4250f42d54b9197974ee386c8e94fb9ea5f1345d1564561cbbcb66cb7364d0fda6c871c69e208a5cc4aa64d33611f8eb91d6aacd2ef4946c9f3fa872a77e08f3920b76dd96ea7abde3c41e39ba19416b2bd365e7926feaa4c2dc32ea96948199bba50853c1292002f86c11c1876e9d3aac9d2662697b40a66d984701acde64b76ef90f4922db123ae6b48ea308a0ae117c330cc13b25823450cc3305e41d81076d744c995358d6f3985c67723692d56c25818d6c55e4a2e14d092ec6bcb3039bba4c9ad392ede2459684fca04a4eb4281694e32f4c0090944618eeba401db87aaebf012c25e44d87eec2a913842ca2951d84ca7eb88eb89bce414297ba872c49323aae87eec2a8f987cbd18d14896332e32a40c296646a6d87c544be16fdb5a4336213e3adab266491f1a9185ca664496d4893587776037ad047748963109b67139cc0199369b444ccbd3b55ac5571299514794196d3fd976449dccb9994e17773459668b94d208c8ca240a2c6744cd425522d451b3aef33ba09695753bba2aaa557cba04b9433bfecadf0975362eb623c81835b5127a6a993026cc7644efccc98c8090196546462e13c6848999d176c4db510391d6683be26f3bcae6ec90ba5fa26cf2c2b2a9953e4bde9d17b692225051f7744f64725ed84a8a40f1887db8485e5836b19914818ed8e7c2b22b6b2545a023796112c256520492574366d84a92ccdcea9e6086cc7032336b405b27041a3b21d0a8492682828282828282828282828282828282828282828282828282828282828282828282828298d8784239610d62348a572cbf63124bde39b27ccc0a7f1c8dbae34f8bb126b2fc6c8a048a4f34a969cd51d33496f8836110292ab1fc1979b423a5a844928f688ff0c742944a570715cb37113187034b151cf8631ddd10f284e216ce4774993ea29530240c18cd11060c8d05ea80483fd1e80cf4320cd8129b61233e424ab27052c8bda47dfaa7815aa85b36c32ed93a74e8d0a14347843236138b89b6bcd8e8c02ec90147b62ccbb24a047f97d1e19c5a15a87cb3aec3ecf7eb1d5e6593a2b21a7df8bb4e04af88e02fcb98288b36a3bf340e09c1dff52df388b88266bf10e94825225639fdbaa83bb75f7aaab10a7fdf55eaea9d36cb5aea45d92c8b55784585879ac5441d057ae3d08c14d0ec824676625e3cfa69561c6ad5f56bd2a17a51d7b52da88445367b3c1b5939e215f7eb8cc45ff0caf4eb9cc42b965f6f9d8dc5eb735e1f831eb444cc24a8f6ed7ae4894ab6639e566424b3de4d62b3b813795a87bfcbe7462af69ade90bdb2eb5c93a25ac75e17a289b001bdb45ba61f3069e94089ed2c6cfd28b1b0250a2e2c6c0da1656d2c6c0d81c86a54e887ca8f3d5978042a4a582116cc44bd2badf6ee0261aff622284b8f416e88eea7df70c6e5689ab6bdf3a22d7d8611941e1ed21ed7ef11b6b442fe4af5bed8ed37bc959e7139a567255a3a79d0765eb4dbe9a7bf5813b3240eed0ebfd16b5c0e3de47a10a1a3a323024bab890b345a6ddb3c7ad87990bf532d495eb19c527ac8e550faee373cb91cfa8d7aa7775b9b4e9ef6cea3879b77d9ade4b19cb2bcfbfcb6713993e525963a6737597eea3ce6ba472e27d5d52097a5a73fd5c875a7def452f4d1d2973c273cc769398be7a4a5a628c431d10dba6c2e2e5a7de10fcba12d3e7442a3693a79d176dd2197733232df7d3b791afdc9bbd36a3ed8ce779f1e6f20da8e0a3d622fcb8b982c3de555f6eed851bc9ac72097432f3dc81ff5bcfb6221ad26fe60c6846eb7345fc9b4c56c4aec3dc2b6fb76d399cb319dd6d40f68e97d404b6beaf420aa4c153405847e9e7efef4d29358cdbb26ab9dc5bb472ccb3bef46dbfd44bd8d4d9dc71d722c5e12cbe2153159ae9a4e106dd8ae7957dacde441fe5e78557a8cc5682c8663939182ce679d6126e6a8b08088733dcb8432a1ec09be0c19a7d3d5eccd842413d82cb25eb58f8c8ce00e8f764646567a98302b8611174d9232a1be72a4c3a3045226c4ab4bb316af6e9745c9a4749911cb2d3841fb10864f13294c364833611ff511dc01616ca20ce6e85fb661eb063bb6a16565442d1b7c61bb68c77623b5110c2c877403217b251396918bda56e1156c826d2bec6d2b3c48a20ceee0b70eb8468fc2af3fbd09556da4082b8d1061a51752a448d981572e4f6018431ddf256d86a6886c2f9cc2f67b441efcb6691b2b433f5e70a04d7135d926e5d3c891630f1319c21f3363eff3907e9f087fdc7008f47c8044d0075ec1cad0076f08112222f043b8eab84d73777713416ec6b8c01c638c316a9aa6698fa55249d3b497be69a5184bb1a4c5d8dddd33ca31c47c386cbeefc301bda39a40ef87824de5d16c96125ec12b52fee027cf6cb66af2ef75c9eb92cd5e920e41e48885177b0313a8cd0dcc7ac1e9f8f24f8a9edd32da68b8230a1fff830f438628fca1591042088d2034a202e1140aa5123e4df8ebecf03d29fc9df026fe28864d186323351254f5a369c28614ca9f253e17257deefce1d5954c6493964f20521749a0ab686e75b6aa4f4dd078ae43f8eb8e1d7578cee71faaa64ec71d5ec533479d66459c7ee4691f7edc0ce12f5e6007881f90626cd4893a483c7127c9282ab1fdc3637a30c6a69cc6e60629a594128bb1b5d6a094d7342975dc865a61e6484484572dab5c91734a295b50987c01a560e285116684adf944043a447b4e14a0e0278388a620d9eb9b8c82f214ca903d53917d367f5defa3ecd7b718e914f64e30477ccbcd80e563d76bf6d3aaeb5287def91321b35098236ac0f22f9992d713c02c8a743da6652f067a19b217cad4830414ec8552ec757b5181c4127b71d8eb32724e09493e11c384689999b90a441f0e96bfcc0c312c9ee79c31ce189999d9e6bb0103e577efd0dddd2d284aa6d422dadcc05fff66879b3d66bf7e63cc1eb307210fb90b2acf87fc48a936a18aaf7d63cd8390358eb5fea83a6cbc1bfe9a881046d4462bd507fefab10ee10f4609e84b1354082322888ef0eac2a30b898634a51c759e70d3122c7c0cdc01a36cbee18f7f1cbbc1bc1fd88f0bbbbc1f373b74f1c30a93c73c686f5a569b9726e885adabc3f2bd61870ba75cb9817f8385ad27494c9860a5158ca4ec4bf248c92379240f4fb3faffbfea2916be9100dfc2891eb4f2baaeeb3a924b240fccc14378969425c11d10e668b882300bf8f1b356b1f401bd59d29631e9e16346bb7536fe5edd0de123fa90f2e2e1c15aad9c0904d45d4bd0db3e36feb6cfb5040331505252ab1579220f24ba96a0a5c9122dfb88d636e7a36b843920430bb91e10e688e7bac5761965d156dc4682cd86b2a1a1217bdb08094631b2602bac511ceaeece5a8d64b4fdf057940dc11cfc21d0c904bdb7bc015d57a4ce150da50a4da4a96760032db0d801bdd426f595a653eab41509680123865d47c5c08089e5ff20c22c1820d88281127b83657bafe3c256e703831bd88b5db2063f18f4ac139ee3748d61944441a3de02c84a1891e08e00c01cf2f25b6c1e269dd6bd8544e2615f7c59c7cadf88640373c8bf44a1fd2333d94b5af2587928e523927c4c92671dc94bac641f2bf9c74a06b29285ace4969511c94a2eb2928dace4232b19e9729295485306b9dedc7daca692d8ec0854fe6aa0ab8b6d08930e152b66a0620560e111b0d084a5c2055f5848450b7c8c2ca4c2052bb04d0477701230475f1e5b8e896892b3f43e2f6996e97df6e19e1e5ef1a98552f414c1c69748338e087caba2d7e78fe883439f0ecdc93ce47ce81491ad08aec6ada688944cb554b9a755dd43e9379c22b25d4b82f3eb174764bb568bd07e45a38e38f3905b40c4295554abe4bf56c96f44512eb12922b088364a82138de6214eeaba7688d3e79e66a5ae3a647be910e7e39e66cde31fdb3f1581deaa800436e628217a5156c87eb6e7250abdcd3db67ff1348bcb10a547a7e5d151abba5b885e604507a7df45cd8238fd36eac3be4df44519c4304507a767890f34b2533421093d3a386d05952648d1e1a184265a385712c178d4ac26c2c9ea651eac1e5df5c624db97f528883c7f8b10c66661aca66e692e0fdaec08547a2f5228b774742c6f41c4848ebdb22417774b30d9addb0179603a1626c1b9f4d2d8cf42782fda43b82afdf235bec61a6fd7e69c9bf6a869875acebcb81c4d48fcfc0d5ff3a4d5be7dd3bc4c7ba6fd86a7e919339bea66b39734899331979359c801998f155e803f2c3564b60abb3d194181a83ff087b15441b1431aac060191ae216c43c01f9936fe8a5e2a087c76b66d61f5c2f8e0c20099c036cc4f06846e29f2369f0be6e7bae4617e609ec014c1588171a2d3819102030433044304530546461d201e5eddcda7dbe99410f974336492666d68938734b7b66ca42972659117cbbdc88be704fbec4210dcb35f26ca452c77bed172875c7341f4390fdaad727f13c2f211cb1c44f668a5bc5c89ed47603ed50304813c3cc4a9f16c1ce38498eac7df67fabdaf889a4c3d4cf58b0b80b75193d37deb3cd9058dd6740ab2bdbbf48a90aff90671a0b005a4c442fbb61dbd131a3c98e299690131b1ddaf68024adf75ad148f97eae1af6b75523a1f580ae84df16016eec0ac89a65937ae7a7caa87bf9852224693be4263fcd4183efcb14c81def88de1633acdbbcfcc3c3e864fb38a8838376a8a1ee2dcf80d8fb62afed404fdec2c942209275800c84841674eef791df78387ea79d14a2e48f7999a0ad27de63335885a372b97a754931450b376ba67055b3d6012ad8c9f94502a0a0b3a21a504af600ba88a8d4f2d99a19d8b10af6e0c1f9728bc824eb0f1317c683cd288e1c3f9f05df5c8f550ba2a86953e292235575d558b90354f82239778414150f3cfd4b5a857e3f3523dd878cd6b2a08e46d1ce234d7a32d7606ca8a3ad1c80af53623febaba59e1afcbe984d0eedd330e88d4d119e208b5f411da208bb01d90b6f55b34d267b862bb4f0e08eb58233dc40cccc121985c4efda699b8ab117ef4570744da7a8d1322edcc39c07606368be755236d672a8439e88d1ebf59e155ad3789eda857e31897d3bdc6833846dad25be15557e337235ed578fc8c921a5eaa7bb4dd69f0525ded5a382729686aa6a678f89358509a0af9eb6efa4df14898a3ab903f54bdd29e6a3c88d3f1f77a4df67426a6d8ec2d4c44b1a6f399a8626558d86202c96e6db2e1a57a802f62dec66dd4226aaea31d043587d76ec3ab79e4806467c92d00bee6363c78c819d940b4dd5dba999999cf504ae92137f36ea6de24b4bafcf0176d86608e160c7d1c6a55ec5ad4839940473ea475110202edbe752ddb823ba28d9f39842c1a4e0f21cbc6bb43c8523dc637a366a92a84aa18ff66ea45a168a0f5526aa342a88af13ba19551d0eeb0599c0d67c3bdf3685c2e6956c4d97680e422757860048b0e0f6e802232ea807875533c9d10afee44a273a28b2297c8255ac4f089e153e4224405a3cdc826b23cc5d3aa2c28f7c46f33602ee35d0be688cf80406f0c1f97183e367640f2d43d3543df55e9bc17fe5233b507db99ee5d2bbe9312df0df10ac6a83b8aef90ba2fe2bb2bccba74ba294ed8f88ea8598c133f433b17211b1f3b2026f1b2493ce4805c2e2db803da7817211729bc323d3e864e07349138b508c9de52217fe7816f3ab4351ec49132bc2b69706f17c17877da781745c38bd1b56e8aa707f8f96bdba2e9c5e3c3f06478f8cbce95637edff499ea3dc2f6e55dcf5f6c215d3ffee25fce9e10d9f9323cbcbad1c2f811b6309e72e2c6179f13f28b27fcc52735a4b8503de1d5e582575c659af0177f6a00ba913a52a590be1f5e5d273400f1ea3a9147bcba4e6ade55c627068957d7898d7395f9e1f9f1f89412208f4ff52020c8e353348f4fd5787caa3e3ee53d3e25c4ab2b80fb787c2a0aaf6e00dea3c5ab9b73192129bcba3b5c264a6aa8018f4f4d61c0e353440b787c8aca90c7a78afef8549599c7a78c683c3e65a5e5f1a9245e5d9cebf0f8d4155edd9b5b9d03ec188047881205f4f0a04402969c98509fae098b10af2e0ecf210aafee8ef3787c4cab008f8f91a2e3f13143bcba308f8f99c2ab1be3f13144bcbaa8c7c750e1d595f1f898225e5d99738f8fa9c2ab1b73d3e3638c787553315678751f93c4abbb3aebf1315778756f38011e2fa3c3ab6bc36d1e2fb3c3ab9be30078bc0c50b38a90380378bc0c0f0c0fda0d7230ea4d6261bc7a3415380def1378e79d22f0f6380f49e6c36b50e0468def70e3f771a3feb801e4c6a946bd3f5e6ff8b8b1030d0adcb857811a35fc3d6ac8c94140bdf53582783935d490f31d28b5de1ed98fe75424d347bd39f3868f1eaf376abd34f76e54ef3b507ed4ebe4c67dd49073e33bd490b3c377a0f4a8b71e0134f57a0ff21a14f869d450030d9a1a6ad44053e33b505eaf931a4e83023550c0470f9affa871209f91c067803b731d2a92f9ed4069c0c780eff46fa6de069cc66700069c24f0bd650233aaba03e5ea705b91cc7bfa010e40e333435aec0f509150da7d070a8d7a75784b4592d16859c00f5091cc06d47b80f90dd1e1343e1a34eafd5b3e1a2ddf81b2807a9d7c1fa23ac077035424f40006a0f105bcde960ff98c046cbd3a9c01aad3bb8a64aa6c77d58caa926007ca77a0e850af13d5ad044eaa7712d0c1fe0d9839034ebd967507ca2572753c878a64ca1c4e9c02ea6ddae52075d4eb809f2a122a75288042a093678900a5a1ee40b9422e8f99030ff576a7158929012c3954249447bd39bc003cbe03a5ab3701199117a022990ea8b70053f2908077b2ebea3d9d45762cdf8142a45e27f23cd05000791d15092d808eef404940bddd7938d5cbf2049c4240c81540430e930605703fd1406938d1ef401152af131aae0008e440c3794020071edf81c2d57bba907ae91570130e1b00a848e624c232b50dae7b605524d4c6038870154966ebe5de36ce1e92cc3af1c1545377a05c075c02dca622992c1b930c661601ea65dda622a13504e87a51590f976103007f4045326dc840bd6d74b38de6ef40e9a15e27366e5303001b9751630380ef4041d5db47f165dc549164d6098e180e98d6490d6bd61081798c9a7a63dc5491986c25c10e14cef41d280ea8d749cd89e060d5eb84e73835274045422d0976a0b008f01d2830f572878951afe9317ed30d60c002860851000f09088200203f7c7802780f2f00cff16cf80e5e8eebe0e158ef26e20ce007f06cb801bc1ccfc1c38187b7837106f00278365c8797e32c6f4500ef86221a670075078a00aa0c107f310055c609fee26d3c1baa131c078097034795116a557c0d5ecd6f7836aef26afe79364e835753657c6c54999f56c5d37832afe1c5bc7aa97bde8cdf93f98c17731a5eea2dde8c9f3c99532fe69d973a8b37e39c2753657a38a6ca2891aa324bbc195586097ff130bc9295e161598820095f58949755c1a345133686d74b8860a80b16c6c3502005d216306078b0f5b9784658ce996a7b37b6e937cc793ed8b29c7bd7c6da081136bb496c66f28c64363b0d8b07eb11b6d98db40c0faf64846494905962a30c132be373659ad828f3d3f22bf34406c8c6eb58983a027ef1262f9502f8c57349d8789616d8f86e091b4f6560e34f35b0f12d1e84df4de120d5e2417bf2a0a51e64f1a009da131428850abe10515eaaa755f1a5948f8ddf524045441cd8291e9884d6147a7470342c053e3890cb19923afd80dede2ec573c55e6a6fd7eaa4b02afe86bb167f11e7a48478b2500a14f4c0f28988dede140fd79b5a62638aa7b66866921921689310216c8d339da03127a98f8e5a7a76a0d36a2ca23cb902d70cae19c06c715fac34819447d8e169517941c5d0972140b19c85ad21f8d84bdf59105245025ad0ce1ad9e2d90a396283342c4ca65cc7b296f397773fe7b359afcb4aefb237adfdf2b6a9d98959ad9af893973de48c402ca731eebee10fbe250637c45c34170e7bbd5cd7e5c1d8b1c9b0419af86d3ab4899574340b881f33061ad99a14af6b5ed3346d6a33f26c5ed4e12f2ae1d5f59e8b082e82a505266b52a209415f2810cd22a26112121d7a230f548257178a216a4862f843a1e67f342bf2a0e8bc1e83f070d5c4b3559e09d86bc61e2051097f3c343caf02648a2519c496cf95411823f60b5ed7855d879e1188412a10070bdf3ecccc45be4001b14411203ac05a449f6645a0567544604204f4c2a3c804104598803b30ac087f7c1dcd71c9f7c1a32320f863ee09dacaaad0f3bec8d92a66b16ed8071af85ddff5e1f0bbe03501f9f77fb0dd496c7466b35519eaba0e5bc551c6795df292f2e24b7637050863a6a355f0da16683cf775c9ec9b33fb5a05df4d81c6334c124b2bd820afda6e336698bc2e293b6b78082133336dd59c1642d63533c81a1694b06913429586646297859f3ce4c766292f2f42953cd4ac44a2758d871c8298a4590e65f292ac691a12429b17a2e4c0de4311e505518852822428cab041414b16b6a0f0420b545ad882c20b61a099852d288ea030ca32ec92341f8ed30801c9dedb38618334d705c8ca6f988c97bdb71d13b4b13e9ffb49702e4d32e9a0ec76c5a453b724fea24eab62277941fbd96f27c59a5dccde4eca926a203fedcd9078f505af78326f4b32edf0270f75fa0a7ff2377ca2824a1dc93205ca2c43f46e4936c9cabb181123fdb499acb9440ec6600617708108510c610a2cf6dea0022822d1134e6c7fe3727a6271c3c5010ef14b5c8e94fd44093cdb874f6cdb2e073b4130811441185a82900b602c7fde0046c001108aa8200a82cfa51b5f995d6029f0c189b7d1d1acf89b6641a2f81f4145e8671d0d8260302d20850654a218c39012295178c1c105842d581b6c5f9a011ac537a102cb4f68620b2a3f78020b2790c0c2892d2c9f06083ab07c1c4d93ace005312883d0144e20031be0643be860fea8a952fe4640bfd2086cf718e887c30737a033764d64405690903f1890172b6838e51cba7c40821230164912521fa040099c128bf6c10b76b8c288a28470049f10c3d4ba809a529357c4e0c754058d4182bdf4455bd8fb185c7902131694b6405116b698fc685acb6a4ae068f21a5b4dfb35efd3be232aac8255a615ca05abe0d117acba114ca8b4404af99728ac8252266b072c4c6115b4976e43b4c5c216932cd86f081976d17c383c0b5b34d0224a12ecbd4d3647204f53406517712585f8cb7e6518acbc6c4264012193e4c5a3852a58791859576a61e5e590b4c2267ef27228f2c8ea954375f3626bd66875b44a5ea69217711806470e350b76776c8ecd62c39f3c6582421c29d4ac2172c8fba155f258c4b06bca110ca2297888acec88c49364af44da80a638c204d462573cd24174232f9b00057b4df6da582dac1040342be2c84b20b8235af943b3faf2439af556c9db2978c84aec72885749d70eb3601540920aaf608b0927aeb462e5a19432649487523ec32e1b5ec9cb03c12bf922bc8259f0d0981726c925293648631329ea2589de6e43a1341bfe38d62b9f40bb6db27a6fb0dab7ccd3eaf46e1fb9e90b822226cf09f60b9334ac6269f9a8db1cb66c3a48d44ad8f8b20a94b9ad43c5749ee671dc21c71d76dcb56e7681de9e8353b280be98807697d4436141e7b55fbabdc4ab1e085979ee5b3475fdb57ce33c26a2dc5bb80af9ebaeb45dbdf4903fee524817145a8dda530e7340ae9f322844815e6a35296b4a1eda548f68e5d946bb490fc21cdb6f7abb4cd2cba6edbaee14ee80b6eb0e3b6f765d9dfcc94bb8c3741944be3be70521df7d93da5b0e3920da5b2aad455e2c57af3c07a2e5ced2795c4ffe4c5eb4a56f2518b9594c15c21cf21ee6a52e7b7929598758c8f58887872dd60eaceaf78d12e8eda5b74d69d4b290a209556c0d0ba5b0420b4eb2df300aeba6d020faf240ba06715dd620ae4f59e488bdde98ed6bb6a51744f79833461b2e086cb81fb0fdab59ec5a0f6dad875e1473d6d334ee17d7633bf7de5c4e2e2edd0d3f464602a211443d50c2f2bfbec1a53b451e9147bcfc8c3ca0e990579dc976d7bbaeeb3c6602ed4c41a8e7a4e5f1d0b697a2b5475f696194404ef128fe849c2a655a51fcc11b669102bd7e5192cb71d2f2c80539557a162f757ab427164e9d4e52d057147f57d0fe75c9f1d067a15ee751d8b159267f1c067ad53b35196d908f1e166d909f300776d39ca5aa1d6aafa920a9eb10c7c42a4e5d97f6b35c0a414c725d2c349053e414e905394576414621a39051c0d314d02a445656d4b3885718d218b2a32e8ab4609b04f64e1b99995966118f12fe7822d14f1e25fcf5e30d478923a0b3c55fff0a2a349f68bff140d76310f1f34996c45f049a403f168b3c6eb4fcc869df26933802fae432c9287a70c50ac0c2560f865a4638b25c8fb0bd1ebd00a365cd8b964b40b16749fc65bf1b8439b6fae487571c8555ec453b7f2690e653e712fefaf20a7a93585e62fb19c7838c36c473c5a20db1080f107efcece155acb387bfc863468936b410acd7378d67fe4e1eed373c85a2441ed076ec2345a6e7a474cd9b4a78f294bcf984552dede46996c4e9cf9ef983047a7ba7508b85522071033b856417aa18d906c3acc25f4f2b5632cb2cda92f8eb2bfc350fd9d4b9bcb6609845b6bb67959b75416f1bb5d110d20e21b9ce22fefa4ee89d4253a8852444c11c94bf224a7b6267c406692eb72c3fc218238c0db1c61a6bacbb0f3508638c313b9c52c22f6012bc523ad610890aab2203a88454f88b45962b108d22117fcc5fac12a9f0c751683cb7b01b5c31e914276218c30cb490e2042b8e0054e481560b6c9045125e1881cf13342638556690858f0ca07011032c28142576eb26945f8c800c4c1c818531d0600638975e612fca4a2f80c18b24783094842b70eeada4f262ef0d560ed9815990a50daffa524a0b210f4902cbf667eb7ed68d83bfaf25a4c1028d22a0d0c45fcc32288b986234dab01b9803072ee887618f7d5d18761dbbeac45a860f2864193ea0f12c8dba3be6853f282b27a4699a8683d52eb5d6aa6c29e74afb95b235a8d5fe67a3e3105e42b737a600e80e0b2bdbcb8339203ca39899a7fc895a2943425eb1b4d272d71433745eaca07d6861eb8912f6b217e687573703fae1d5ed60849af00a3681c5386d2f4c94ed09d0fc01bd303f9d0ecc4fa7a3454b5111158caa5106d4aafe0ca02d0382f981d1016469efc3fcc863cdd22a8c0e60a4c8609eb07dac42a8e29d34a8148cf67545ce3a85686600010000c314003028141009c5228150401a09c23e14800d8ba24c744a9788a32007521442c82043000000000000008c908c5400000aac11190708a1d133537602071518797ff5c7f633d2ee17e9d92c6f0d5b080d5d6a264d90adecf4a2e14e5779779115c51648636f58ea13629e07049e93c3e76372a6b10760e2940af415b10b740136bf64f79775bc627da231401c5202bea1613318c8e4fc18ebd683fc1dfb46d7b6239d1a0b4b2e15953776b6ca50a1e625e732a2acf98a651c3e1436ac286b3912619d96226ad91e1853b7d5d8dbf795e9874016d04260ba0840c7e355b558456ef937961ba80dcad5cfb78653bb64440d4e1f7a49da4eaab12300789900213905b91bba0cfeb650b082e7f86ef1211e29774c22f7d24d8790975536a16d064d937158d85375be14ff2f74d55afdf658b16cda1bf941e3fadf08c2d939ad61b6900ce01d0cb8169950c7a155b1588bd494d6aa4e8226f93fd720c4a23db8f5f8a4e98d862e741508eea66bfeadd76d10c8a226305373a92e3f3602e8093945a7a3b5b65510b71b5ce387eae221ca9d09dc10ee63f27ca10a1c56c6df226198fcaf41bb8fd10edfa9d31e2673f3080c2c82ec3fcd481643905902aec1638ab43a385dd50f9356a0d28b890a791575f3a844027744fb3a0b56b25514217f7db448e6baa17a3fea538b24a0ba2e4d5002e9647a0c048f92f664046319db1a9c079f2efb550566b4544d65fefe505622fa29400cd4dcf4ffd3931c3522a30ee29e5c8c500deff338a111d923ca03117b603b07abd3ab084fe4a16fcb118160127dc70108bc73470a657d992f87bc6c53f14f0cdd001507e69b4261030129e4a690b20d8522b6299497010c9b4282870ab3ef94507250d8f8840a55d74ef5144c9c406f6ea0b498c2f60d56b4d2e00c2a7d8100c3cf20b94c98a3a142060e1cd7447a5e9f3326b429b0b24fa8671254642e41e53cfa7087c75ac54b808613918e72b8c0df46b874e74770223ec011304f1f88b7e39aa2b0570db454424b1c9fc4e286e8cb2cf3fa37fbbc804a53a74fc3807dd4e22bb0ffe06b1797c0ef24752e147603d0183a44172ce474a05b4ce2a4e928236792762912033bcafef5d17ef6aa903c306691e4f8639beb924e1e3a1fc003c818c260942a02cfb3a625191e4e3a170d0ddabaa410515b7b1531322052a8e1df312b03210c50fa7e7348072762f7f0a407a198bc5622d653cb7fabf3ed1cc1af681ab562c6332d039e27b483cbf2db6cdae610327d468089c167d62a23ce7616d180c1fc38a0757c2cba1bee10f4629f3dbee5afd58a375e71a7eea88eb1f9c066bde376471f535b4770e2568d0b41661597a697d5473bf2546cdfdf137e1dc2f7c9dacd0c3cfb03b18bde78ebec0d44db55876d1a298aef9765d61a36eb4da22771c25b0d287a0a58c823c69063cdf48d15a5a3cdd9f98fbe4639a310ea071e4b6f873a6ecd620d1dce99fa3c46816d256cf77d0f386e44f6e489a0810f71265555cc63133bff7f926f05aca00e73a22ffb1a33609c340c4482f880e7f9f1038d3ae695e95f01ba7b27c3075af5d721ea5abd526dac7d532124c9113b398fa014eefebb6d6bc017f2622c7adb62dce393e316297736326ed56af7ccb73e7ae54c4ed11ec57aab8867ca43f31204c40949748e0228cfdedc4fb00adb1cb72b8b548c999065fd1f7dd6d4e69bd68b5aeaa103dc00e49e57840914528f4907f6545558d2aa130a269cd686a266b2cbae53990c2464e56c16a030d562e58f351f8aba894090a197aeadcb8ae0e2c25ac089168d9c166ee20a4898ae007193a7f2a556d8a8491c45a83a9ecc30c89f485d0aa08d97151e9fd780db051d53314f38ba98b4905842eb3f84dd38b780dc68846c74b06d5dbee88b28e1290118b739be8ae39948e688b0a97111d4aa3249b5ae4207e345eee200b88027239097aa159d22987055eef9802e099795bec409342a53e010a13b9d13b02da31cb72c6d99b908972e7842ec56fd4f8969ffd761796e15b4f7d8a6430a6afd3d89a5090eabcc21be3d13fc6925f917dfa0a00f80df6845a26f4a59ed5e85db9c73ca21dfa10a8eafd3860201764505db700555310deb36407e62e8398c6e9b6ea3fefdb2679de1463737443a28b54ab685e546b4799b4ff26052f66a021a7bcb98570d6d825296bacbc19c0cbe067b0a5322095c1bfb44c6f39d2ecd5116c680b29e7ebc3e1e549cc192d649cd060d46453a207bf7269e9f31ca2b43728d9df6c581430f8c8b02dcbef056a325e050788f2d4d869d65aae75b8e9a16ae58e4d3246f95e56622e94f875e1b81b8293a7e5621ee12c831d50b8a47c9522ee559534074fe1ec20526459e0ef870ab0c83ee733dc1ac96337ad2c302ed488c737b76c7fc2c4feab1614263ec84d8146e66fc87adcce7205c4f5f27a935a8093a85eb63a37162a499a9a1ac5b0593a16e32a8ce7b64a1a7b8944f8a38a134176df83158e6bc8e995c43f7f1a0303d33844a721c84b6cad478d4c924b34808f03259691ecccc945ffd04282f558fcb3680c14e53c467764a8926f01d1710eab4f3168cc07b5a21dffbc51d77ccfffd039adf089ec6643cfe879e055cdf2855f7fc5baa53458bd2f5c8491b87d39d04a4005d36755b0d2d2d2ec71531bd5636cc62f77cfb47d445a52702895e68f7eafdcadb7bb351026bcd4790731e696fb04e20c0d43855ee94b526c9acfd2de00820fe0233b92808d643a19536dc9da5aa2cbac49f518e94b0dce5cd00923f2356ff592e1daa2d80005efa4b42db6098390525e00ed491a1ca6be0b4a34a73a67db575b69971acf4ea029f806d284b254eee1a1667f8f894976e4f9c8bde1e3e66bdb535de53df654e82dbaf5f9440087b2e0e5b3ab8002eaf2c0cd87ad5873913592edd0b7ead530098808eee82b5ab31b1e5b5464ae0a392bb4b25a1aa709e0a1939a1660182ac51db77c265b9e1fd00bfeaa3167a69fd24b6df3fa930740dccbdb6f621d4530ce457274c724aa2b04f98e68357f652e2e9c0276b23843923b35493acf5e657e7abbd34d5e93ca884fd5090b83d84189a2a54fff5949427c45e2d4411a0d60f1a951ee3172b06c4f580caddf7f0b43f93a16642637af092ad0a3adc40fd94065868379d1779a83ab879e87c2daa12805332eda58d002a55ea5900b2d6adea24279eaca09c1c566e70b6fb86760d4c8b8cfa767e55d792270f34f8105940d4adb3eef27cf51b01b9fd12d6d5eecb47e322aae59540e05ceee059c805e58b831605719dc33be8d7dfaf694aae6789177a5adf3fe6b828a794a74088111a2496c243ed8f5ad5e825cbb953f0f8a907b8a8c327a7f6fe7027e329a841f4997dbafbcf33a247ff5c2d512137a2b38d3b10ba1feaee2f4bc10f6b3f28f4d3bdb67470b524779a960840ef4d9b915ad812b1a92998f3f4be80aa1dfb24e0c37f9132805bc78da6c5249dba1c803fcd6fae914e635d84bbd2795594c5bbc39557b1d1d49a250e615838f69ed1d940e1956b19e577f2ede01960c46cf4139cafb238be7a3121f111af3fbcd38c4fc9375fa23a2bbc2205f4090452ea8f5108f45ce59edf26c3f96530f3c9e0ace48265f9f181888003bf9eaffeb1af003f608b7c931f4587770539c4945a51baf77d2bdf5a370b75895f5418ee398fc47dc6db1c894b8767c56eea029d379fc86a05d573de0f8b7fc929fe05939bf2712ad2b20ba7a86be4175df34dac143d03f22ebd2abf9a77e3e734ca18089d263fecc25e0a7c53355d401eedd3e2a5f41a5f7bf19401eca81bd4be87a7b18de2cb9efbd3dbe4200a5c66d70da94cbfe412fd51151673dd1789cdd0c276bc25c504863d69e5e84ef00d285e64cbc1702b57658c308d303c48e53e0ed98095e598bf09f5048a3e15b7dd3f8a74c18c4d9670f10a7bb9d238d98acb1910ab0f9a4d807b808dd3416d1e28eb3afc77dd481bc108d48065097bdc1357da3a16bf400170c40ca8d10e29dca13b994d5de3d747f21d89521419a9a6fcda272bb62dae8364302835d95fbdc622d3384d368fdcacd0ace4fa52e29080efa5ac9c3a71995305198d4d8f92a2714888a4f4414693abf9329cc68e1a863f8eac840e243b5d46f4ad26ed518541cc4f8c9d9d46f8a4b5453102eca1078e9881cbddbed6e989b131ef42c1ddebb266b1ebc4f26e9fb823581f6780f3366a13babc67fe689f1f1ec85d662a512ad03ad269d8054bbb29a8008568039eb56f9374d73c3c8ce55df70a3ff6d5b47decdf62ab1c76562e063577603cf3e86fb4543eef6cf44b513526e8d3d9cbdc2d844c072a4d874ad9930354865c04f8eeb869bfef858698eece4e4468fa795e3fea4977792e230c1e151343c95c70e299b73186f4ad7618cb15afc3777898f4f0a05aed1650e9867d13989efabaafc3db9b60b455bdb80e12677d0b97595380f8f561c0d0a12105baad79127ce2660de478dabc881a4e119312c02f2b2bfd22c33b7023db6c765844ebabeef9ab2536fbb41cd67aa332ae98abf0844c4f21f5ccb999596a951807638dbc9d7c50854ac90f7416c79c8d0d8693e05f23b027153f9bd4e1259dff4055104b53988f9a4d94f3dd5b46e92e69315df6af219c7848879efbe4f424461241881055a67fbc77eb5277ff64aaa39f9aa538839a9a413f044ebcf8b4928b1c66bb2fb062a5ee91d1925216a24fd081e9b37e6b861ab57893eabc36f78508dde82a91e6a80fbf7adaa1a45a44328eed12f7374858fd9476d75b48979db3ff1e4efe5360abcbb144e0a00baf19aea9842ed26e0b09322c26fab1cd60f17485716a47dd999d316add5327837de74f880be7588c03d4ef481fd9f9db4c6cfac340db643e1829afb5efa77eaaed05dc6093c4c245f98bbd843b9a9b8524490bd602fe638500a44a26fc324d917e1dd3f494a5674863ddd2a7d211a54358ebf23d3f76b98069985ec8281ffe1f7e9bfc3740fd9f561c676a14cf8e6525e9f138a8423113201340dc4e376a469357c92268dab8eceee08268718e6a4bb1bf629e32150a064826cb1b8561efd87af4c2613aa511ca942fa9a70e8314010f645db917b1345e649d90ba53647782b1484f14c6a6105019841fcfca8f632f8a63f3d34f5058e37727d968ca18177dc971be2ef72b4f3aad3b691327d0ec867a73d4415ab3d1ac278532070eb1bbdecb9b01e05a003c75cfd5b9b80155c79a0a4000c1540dc97ba30e0f56607163b5d0323d26e48488cf06c651f555a74dcad6a8f35385a5f330d2d946e1db7c605dd0f3981b42177d9e6f4ffe1c41dc535c87110f78ced320cfb9de5b87eb24eb7935376edfe000d5b8d86b2a153a4e7adaa01766708778433977d572a5814c78c27b464ec5b02c09c3be4651b172859ed218b6e3ec5f747c898c42d3a907e716b2ca166c40ed5398a98b2adaf745b6f05c677f68107e9866b53a403c79af9c662f9a651e4461b3f58f37a1aa047e82f6488596afb0bd9cf80b919007a8f00a0e9ca04883a44bcf427175c0c1497f878cf6c03e06d1bdfa7e60770301d1d57587fdfee848fcd94c89334d8f6d9e9b6113cfd82b2365994343e76b636c8dde5449797488ea84643327b91707ffb380337b7d93d78e0a58374912028b10a026b022d0d628f775746debdc6530585cf46c9b354558825db3b029c602ffd66975b710754dabf9a4e84ae475b234c97aca2f6047f8fb65b389cc2b36542636ace689120053fd440769e8577197a7ced36a9d64f5c3057ec7b6a0f6f4f2e5a419e509effee661e1dc557e80dc45ea3bec4ee78daa18f32d605adb18f31896289b3fa1318aacea8284061219b3f995b188a23b538dafc1aaf2b7ddd240aa2804c723a2f98fb4e4b8740ad4b4e2e25d99263df38739cce423f117291de8936e0d318fb5aa2ae4fbc239234ef3d9aac1eb99fa1126e61fbfbcc83ddd9e8151370875e394d839231c6224d7e24723f6d55b64a81a85c14fbbc4180bf4a2b6a5769c8eafe0858b3376ec58738e76866926d0523f267e54cff98e50cf8e9023367ed13ea7e06d413645a557193cdeaea6748a388509a9039eb3550238f7093faf9d84646ca507b1f6843e930bd27a19c97f22eaafc84ad0d2a47ce9ee981d14186a99885ca8f122e514c8158c0503b52b6426e1cd9182600b944390895ae4f029ca5f1e01ab7291be465122d007dc06d04923ea98791237a82825469d9a53e090a094b2113a255962afc29d464451a3d0ec8c0fe18f40eb5ab4772ff0b0e5a003829d967c7ddae7b31173d0567625fbd7ff137ac99986c13fc3aaa8704043d2f746f7bfa02401400612d01cb309c969ced44e08e4ae884f77d9b7b3a81ee1f947872563fe59a89c80fadb7288cb6c70ec6d6e8087e54eba7b96db621fa5eb5404dd3212ffa361b1dd93a068ccf1dc7d88cb9eaf6cfd5ca31dc52b808ab84d007c6e2c82ec0641c465e3672b798eae53effb9c43bdd139fca813af0133a140c434c2b9e2a52166dddb2cbb5ba02f1d27b2799b31a74a502e384cd1039deca53db48d738e81013ca131a397f8ba5af4929f7206bb47879412a64f917edbe9d393544382f1f9df6d7e70cef99b974e4c2e4a06b5677a6ec9446beb10359fa44f11cff62eab695d7c58221c1f290e0d8197e92349abbac210e81d7b2ce28287c021921182a92218a48deb54c0910d23b8c051ac18340286bc3261e89295456858fbe0151be9553c50af6c80711b9ef6f6b858fc00b648cc0809dcc2f8a6a1810ed0e77bb4cd4295a4ffcab08007f541a081eda211612b15b8cabd186f67154711e1e81bcd91dd5acfd59cb91625ca709c8d1932abf547d7ccca35079359deb3fcc1876cbff0588fd7ad186b9f7f42e728e038122904177a7b4172c128fcf440a2148edf943c986c73af934c680f61c4f902eb7c2be0ee774b53692d4934128e62e785c7c7e409ee80f2854803f7e6304e4fb2c5fa23eb571e516493603fc3df780eb2a1219a1ffe3b9547e8da9bb2b7f15116f807d10b87297d557b9358b32a6d7a649621098a12aedd7bccaec1862cc0b40ae85453a99dcba2a8e28c2e72f04e84225d2079609617b7352a81dd161ac30bbce53eda71c68c3add3dc8f5289e3d68ff45ba8331b9f6952792734847cdc89e78aac85c33c4f825d993fb08a61edccde0c961a9859ac49a9d2ce30b4dbb5c1fa1ee0a57e9c5ee090ad63e84024ddbcb753e3042b43d25baa30923913ed10b7821a5ce7df61a61c86ae62fd709df17e8ae57c409b6168a53cf7139cc01acb28d203022351f0c52d404d01d7fbd0462488988882f76a148ee1e40af5303eb5dba82008c963f9d5b245a44b36a1977a4ebeec97d40ac13aba61f3924333b46703c261e2b68c4160614bc1eeec3e38728833e7501a721f80fc0f4a067962a4692b7efb79a2348f7022527a66b43ad526506c20bc2ad652c1d766659b935cfa35d1eb4e03d11fabfc9c2ff95194bdf0f388d77d8b897b02a0859785ba9d58b01876398acbec0c6bc97411507b4d1e4a13701dff2bffe5346f5481870e64e830091572c5fb5299fe199638de805ad8ea54ecf76ed48300195d98fec4ce079f8996dbcf6f7cbceed1328a40b2c11798c7d3e567f2130ea122d5d0847287a12aa5239a52184828fb787422414c2c2bc3120cdce49e3bfb374374f76d3a9335a1cbc5e78f1766789d9d6f73fd6eb709b552e9c036cd8a3d942ee42110a30e52a135a5bade25f7882bbf85558cbcaf5fdf8e6b4a9f02f52e2b0d80869c673043825310318f4aa10f613875a29077cb46d38219669853677d2c0b2db5a77c7e75fc38d9335d48e40ef8f4e68ca04829979b3e2694d4c4eed89b02295a205487158a7aed134de569182bb35d476ea0d249d6ca535b5b38dc9471682bdce6090a690d09365940378059ef424d827d02bae0eae7f6d7b8dad333776056195b96568b2be859f60e40937066272d5869b3462f8edcaedb5f4e55693f65335db0a49250a98ef98e62889595db69bb02ed35023837667092d5da9de75b9254fb6e93a595e4679b9bdde7903052801e653b70cd07b0cd4195b863cd1f93004adcbf4e0c25e35a41bea8e00d58ca1297e1bb9458449288489414a8fcb4c8b1e8b6150b01a1f0233330817a2b03ac799b47d74a1e14c70355b53d06c768d58c0cd1dfc16f70929237a8db88a3a111661140b68dd22b31db967f6cf79b6168a6f5e51c641af28fa4df5e6e7fb91bc2e82d470378af9d1732b86e22a6efa9fe167f40543f54392ac44f61689d85684956c68ca103120976ed3da3c31d4c0069aa6ff2d238d8dcb5c83a9d1e7011ca4700629f443481930ecbb1feaef9a2405dbdabc97d06a53fcd517b6c5e0699d1f8c84464aebf8a98bfc510d98f7d3066c45f20debc0e71b045f25cffa06c9318921e209bafb74b504e787a650fef76c87a16b01d1eaaac6c5dd59f6c411c9a0eca79efbc3a1044064f4a61a82a9d9ac45a0d26fae34aba64fbe5678bad0fe79f6a265377a0e17127d7278fa669e6ab96b760ab069a1bd0b9d8f25ae0b56911b965a2b2dc94e263270c23cab1491ae5bff4d6e5756be18a16ebb2513aceb2da22f42b412e698caed3656d3aa5e99e7cb3755e7002e565ec237328721e6e5d33886126e282e5571fece43878aa234541900c0bccbc50923b553ee3465cfcf61c9bae174b28d15a031ed0e3295715463524c530d6657de9aacef5e2a18867223400ab8191d9e018c48dae08020a74de738402da885584507784b26d4b8331e6c2a6f475530cf90530e1c1829843063ba3c0909c6470a0c27a48de79ce620973382025c6d4a5e46939d5397617f6016a3a4a7f7d857343e46182d4e1c964ef78ab7d779f55026fe0ffb44bd7d801302752aad3e9afa2e98fa76273f19f870105d1d1805919d0e466d8d0a3eadbfac070f0fcc7ffbb53e1a13284788e3f8559908ec59cd54557eac8e10da48a8da839faa9ceacbd22ec4812a3edd6f46159ebd989736ed8933b80951bc107f2db6b318a316312b13e44d7475c8ab4e2599c7a2fca3aff3abfc31843e48bf8aa50cbde9fb40e19ed154bff13610f2304ae9353bb661c524b0872087bf4982d146abf505536cd5459a2eb4b355aa2e0376aa6c693bd09019e905210cfdcf80a4517a7e2dd280bcd3fed200b8cc78860518c76e92d52b2b44ff23e4c776526eed732883a7f6ececad67807ba86003b315d84564d4a11bee367d116c991895e7e9d92f4edbbd69165ecfd650ae005df96c14ad94fd4e09becd8d11f645d8dfe22b148b87aa45821994be16494847c4371f860d134ef895a5684a6e252d5a3bc2564b4a38630e82da65623c40f7251ee841570bab2874e304e12ea4ec13465e9a6e282e9878f84a22b1d1aa699f55ba46045b24950031034ab7a1971286ac4f480d2370329caf0d4aacb984aae8b808af0054ef4b1e1356b1c70a31eec394a9d5c6d492b84c5224f49d1e84ce16f4445ca2bab9c330ab1323d35915a8291559291966aa80f22b21e0eac4f0bd8af1a598800ddd1d53929907a9da808578920902398c0ab9a2a7e5d9f35c8933838dae542c6923702e0a311a0f83bc6da40a813127086382a65e3d602c7e216c0cab96bec9a5915f5da7488f833937c17c3d51ec301425b44b2eb58bbac2ec1eb746d049e719e8daea97ca348b32905b698b3f4b505799f95a1223b49c0294a934cedf53b7bfa65f13d261b76ac53ac1b09b7704dc530820f6c101da5208514b518742904e800e1ff89276656a1aabb257a562fb3e257725061444838e91c5b13f82d2551ab4f3fb8c6d4f022a6a60a845e9660048c6ed8b77842ed361d275891d82c910435f81e8caa653a43108ee2bddea5e7adc47be6522b2c327906c6ed0e28c2f370f3eea06bcdbb7873ab70f8a30317f8bf24d6ca0e848133b43790f1bd2d4d13b2d895e7cdb8a15d8a60c28cf1603066dbb9fe81c47dc96135ec35bd3eab6579f1190b60d8f324b90f6eb480d6e3fa543dbac2c008e9634119a6113166df4b6778f476b5ea8e1d22acf397171c74a8cbcad39e40bd841af1a292b308bebc3e55d5d12f92cdfc46d6a73b3cdb54aded6779ae2540cd4261a5869c8b0c67edbfb2b2c1428f72419c908d39ee6c1af9ac12e774dc3dc86c0ec84a26d948956aad2b8ca684539a158bb5a48bded92c225bc634352b6b9e1921e068eaf6f53b8f7bd6f6b7f600486fc266473f8bac553d2446e5ca091b3a150429b67ab211bc976e3255e1ef3cec91d9ef3f94e1cf46d1408e4a4f37cc56f69196a00b4d009b5da2e7bbe4d28c89b6adbf6abfd0d01bcf0f0ac1969055f4c627eb3874bc3ab2174d809171cc0b1c1ab981045d8a384c4062cdbe56d30b14218ce231c902c251b59c9d837530e68ef614b26e287e2603da889294485e425813608fa665cf62d0bb84dbe94a8f8cbfa067f741f39984a7935a678bf4f34890b9afb98a4202d8a6c1586aa9495e232deb389124e9ebdb1097b1a1e78f8b0ca959680c230b360da528768f09226c4e341bf9c42f237348250a34c4df772b52b42cadbcee17b4317c9e289199b99885f9a8b74d4575832600f80e7cd901fd2d3d783e8822f7b541e8f874380d52f8178cba9c44dea03b330ecb56dd30a4f29e43a9754ab006019a45fb69e0f912de0bee66ccffe67f450a1bfe075fe67f978b20d529ee289186729ce4909f70925972abd2911a666b90cba37b0bdc9f379a5332fc4e5e18942dae14aa63042eed8cf68acefec03de419e3a6d945bd5d0c339263cab3c1ee0eaebfbfbcc8b6d4192d83e6002d019675d1c4fe6bf1c74cf35e8143cd4bc4ec98e96621309ade2c764d8fe0338847254b93607d7b7dbf204ac6583bbf876b3419a2db5bd84cb40af785e51c5963a62d842b45f77e099ca1b7f5a61199318a0ae4425f415bf62ffce8a8cf93bc64d015dc4f596507c5b178abd60316b60bfd862caf41a1295251e1c82241274e7bdc46ec08989c3e34be45cadd6d2f1c3ed66716f089465f88bddd857f18caca1459d96793f87b6d67eff05f1f5a1fce983392ee0132982bb209a4084af2fe110a8ed1ca159e46a70fc00504451b832ab60069936b48469df358ee9877fc6d49b69127d747842fa894669c573a0fbd3b94a534f9e86d4fc7def2335078f3f83d45ff49dfd17c77916f59fea996e94f4c12bbea8f68c4c97505c20c18fc1b4f4cdaca7aa50f4d6786849070e4e0ced6539239330ca2c167778e3de2fcb9a4dd5e4fc57778110def92459ec1946bc1bdd200502a2c657b4f905b6846eba2bb3d89dbc1243ddf23d778b354a2ebd4648a54cf465990825b82b254224d2df08ce2aa735763ca4154dfac4d8f4c5e0f353800b901778f6538a65a7a0290ede2ca4da4386c35f304d5c3aff1ec293071a3a1ef1dd264961a4219be3511e5cdded3cbbc2170c45a00ab682e2fce4953a7994509013ca02dc5112227b5b6b17b20d8e02af0dcee5092776600c6a5f20ed514afe620374a285b93506a9355df02cf6848d0efde91b084824e5ce42ada2cb5e28e989f0b011aa9c5a1de0cfcb4d6db6f1bbc146c30e042704a02ee12d32a40b9c5b29948de532de1e3833c1378764a619633620c9fef569d8844624cb563a4a391dd032d5cecf2079c06fdb0781db1fc9727fa7090f6bc58767816258d3abb002c4fc112ec6c7f4287375d7602fc0f05c633642d4e7761e0cb7cb1492dc7c3589015d88ff3e4c826961cf1a81b5ac9eb72cdcc6fa82dd6a47af8f4383f09efc748cfee30a3df923028778a11b025a2bb59f090b1d4b01ee4075496e735445af214b853eac1addd701a291d0b52d609913962fa0ebb14e0bdd6ea8ad014514f6e0d2441841eb99343eeaf376e4247681a61379dd42696e59ea282c68928028c45e4e286a05656cac875a89846e26e898da4633027ea4be92c17c7024fee767738666f86563bf8d8cb648dcc8cb797ab3b4d3ad1ca403ac4c2ebf35d36df5ae72536334cee97f272353aa8f97c25e692778cf51fb983e414ec270b1b472b80ff12070cee45a67143d26486685e9b542e1b249461ca40eeb63beb6d8833bdf8ca442d77572fc02657e9f8a515f0e91b70090cd18f536347943ca31f95e9f8a69e1b7bbe9835b90020208c30971b3a1b3fcdbca8d8167fbee4307ddcbfd14501d559817ab5b84091dee7f43993887684af21c94dca072e52f37ea9bed1d97959b6f0b182ceb7711d63bfe2709f500aff8895d170209efa7dab3f6d84eb33156acee8de99b62bc43b0a1bd926659c194ef106f1d5ada377fd46299e0acd0570c65cae7bcc3cf3e71235e1014c91c639b2b448deef3089768d2fd2092307c8a5b9fd47cb609448176b11666cc01eba5300507b8c6817806e01a039e270a4cb2c1a2fd6edd6d08fde0fcf4927cd722903746c1c24319f9123727641fdefc392149eb8a439438e780d630464aa5c080a9741b2ad646607d90fc9dd2384704604e459586ceb6b7df968bd76d848863c400e9d69c2d786cd07c88c09c05d98caecc4e2a0217aa5935296d24d4873c900aa592db2a8144a67f7a061261f43cd3e6bb5356de626d02f64b4d7356623171abc16f5236efcbcb57f6b7d4db4e283d21cc937e505f5c77c90fea244f6965dffe7e50f7f1c9405133482ea04f623f24ea633e9bb559770d660c1f85c71854d4175ca854530aadfbc1386a57fbc0da35a4e9aaab9c2172b4e0329c677f68bc61a9df8f991fcf54e24c47df418c0d14843f00cd7cd818d2f8ad231424282fc24e0184be53fa5749da648e8bb1206e891a1164c48e2bbe2b51cf158c99a9eec91e70dd1dc9d0203fe5161c174ab8cf97f5d6e8dc6dfc2e29fdb20300d05f68587b01eeb1239ab8c0205fb47220f59f5ab79bee42828c4cc5772b38940e96dc13f727293df6e041704c2acb26189a368e2b2d87291ce83be7de15d39e256efa7ee7c8075979aa19fc228621a1b8d28e1a92a78a7eaac90db57296a605a753486e9203fb9ed8a104cc960bbb27d2e7ceface6c6cc196b0327deb6b291f8205e8ccd70ec28368bb7810fe97b50063e26a29c2e16bd6ecf6f60fdb14a14ac53d077dea54f324b86a7e60a3b28bb94941822aebbc2a09fbfef032cdc32e8b0378061f482e9450a7bbbcdadefaebc031ea2749d0c28131e37d876de56a1c8c75fc267e79871094c16cd6622db496c69e834b1b3106afcb3eeed58bcac2bdfb4fce3c22003a1450c92f6fc7249534ded2b3a051bae80a53a0856c2ddf5db48ad81dfb9027ab7b4846a4d07655d2efe17073f8e9afd7cfab545d434ec847d4e298e572b9e8b51c494d66cad0927bff8a2b10f132898de37ae37c0daaaa278194b73dbc38e829e6bd9d043409f8b1b6a122657ccef03be8c32a4ae68bdb77bd820e711212711e18f821ab3f8d97ba891c9339d4231fb6cc488e047fc2281a14368486c2025e14d6e89366be0f4367888c4caeb4f0539dae2d0320f08423aa9058f89a1e3e11232b8175d02026524a27f6edc7ca27af51aadc43c478adf5210cb3e3fa17c6ebb1d9aee1e84c920d6963f3baf5d6a13b01483000e08487c539304bccae5910364fec7f96b86145b9e5afc1cedd4e944b62de1f85955f4022ff8f3005c59f4a7254722ee0aa3c6be5d8619119365a19a358f25da01f04459e5c5852955566cccadb0de5e67828274087e8c48c1ff5235a92077720215c4424164a9e761efa8f532eca0ae5aeccd06cfe2ba44b509ec38823d8dbc0ce86d2c69cf2b073297fdb2786fca8d233aed1b812b7aea05365d364d0cf1782cf8575fa11091878e7316332cd847d899f578cc4c467aaf6b39c8393075dc84cc5cd2068f5062a04189fe72f2f4cd5921dd487db8bb83eadfbc3bae9675d17043d9ac3850dad196473f7474aa911984a98cd2fd1d18391ddfbd91234a7804a35ece2b68c2968a8ed1b27e935a0c8faa0e5ce966f9a683e4ed712fd77c443abb74179b8e9de80435f58346537cdb7a3582d9f3696a05620ee4418e220330a9201bce168fc30a0e285b6fdc9a8bf8d8a2fa1cdebe0fcb5e0734e4640137bc2f128eeb73913f5772af1e0538c214745c0c0d5d99b004880becc5dab4048cd54dc327af681b516f2bd6b790b62a8add66c6599dda8c31dc49b476c53df16e77987e3ce4f18b53d2856eb1ef56e4e04c8b1d4dd3623a5769ac0a3c312cf77418fe4a96fe95627041f9daccb2d21d848b1d0dee353ae2b5eb56239e6450c41b95913fcd2473e8c346bf5a2269a13a471c7a8daa950de7cf9c7d1b50195749a8a50e664ca8b072a97f2990d1ad0ee92a582e5a1efeb4f95aaa50125a8804a05001124db172dd82020ae9c3b6e95514a537fb26b8896c9eff00be0fc7b99973b91e045a48e080897e451ca5b0c537e9d0679f3ea102901e03127156659c4a1139c6e435255bb5f23eeab636908b312f86cf4cc4156b59f019222c4a29458d72f7df3f424635136e1f704a4f04fe4a9f592dcceb40938899163442d0704a9d051582b8694e3e3e1215691e4b38a664817f3c88d4e737e7bff722c484343a99563ae1bc5c2979b1e4b19e46d9233976f174c74cb247506c0de70f4980fb0fe35a12ca0cfd947e627a5fd5d01ac09f12415fd1fb62f7bbf68561a6d5fa4dd60b14b68df4b0993f0418ea8e6dc4bbf83cdea9940d0026b48074d0207cf74e3bae6066fb2231a61350e11c55f023a5b8b2ed80e483ead11e2d8776dde021aecf71b53df39859a94abcb8043989b90ba7809213b23bd63eb091372370c08a2cd01879f6838719548e0dd769f170e7fe6df0c7a6be66d10904b144e26a25b26934a6870dfeefaaf3fa91a6dee01b32729f8e2d0465e88bef6246f51621b61f956e08be080371c15363ad5496bf910f2925201c32fb5ac9ab1655ba8c9114e80f62a40343bd55bb46e4f6f649effff191836a9e0559d4f4eecc2b173497ad5443846656e2d55d57aabd3c3143fbd0d72434c93ed8f20c43b0a54ae1bb851c62fdbb640eda0266328bc2f63e563061c418f74a119e202fb4b31b5b59cffde822b1e0cf043b8dd8c009386873d842fe21addd910e8f605a3007de6517d0289254ad4d6f0dce9b1f20ebe6256769927fd1002ce14be4bfc727e6bcf567d56b9ce1fe7a2efdd836db936bdaaa4818ecc9d20a78eee4b0b4ce7a6a8e8f861cac57e19915e1d69b9845f0c876079e8651891aede979718a54ba88f1ec788cc14678c83cb9e2f07f02cac11e38b9b7b5f250e3feb42942ff72d501178132a285d809e3d19a9b07ad4a8a5e098921c66521232a887a89dde2128c040b5c331121a76249ab58ce9eed67260d0d4c257ae1beea749559e92f0a789d97460b8cf536c240b09387c810ab44313f04fac574ae4c3a656207e4e87996e7e7677b4bce391ad19c87de9a1b07ab391599464fa9a148070ef21f8023390bb48661fee530a44c2c58222737db5c1907a08c1fb7832b55f8e6df3ff88751b506de0d711e9160b5129c4566cd840f8ca32631a8e2774c0998562203503d28602132409e7282eafa10080277f43f633fa0786e3011ce50f67df7b2e3c6d19a676acccc1410b51ef7393ac17f17a2dde7f27987e81a2d0e983d8f36a0ced6774929394c56da86fcad1db96ec24ad5cb4fce3e421f0c3ed30b498f3c14d6ce8c95ca89ea791420e8d6060ab8066cfbf7d84b7f4c264ceaeb085ae1b1c2260578360585d8b39b3a2addd85d50a70d1308ef24abb44a2f6aa228f1e5cc2edb934e911e89b3603ee3b1b88e70ff5fabfa64909eadc54de82b0b8edb93f62840138ad756e4cdf10d5f38a0830870bf40cf90c3d984cdface6d6b6b5ee75040a8343e1b5ee73560b29befbf746dbfb67101001401a2937c83501b835cf33a07fbf96b3cdf8d2afac962790c9758687f2584056e0d022a147839a6beacb96a6c5f79d1328f9fcd5c6d2e44cf91c4ef60b5acf5e34f32501df8f4f08292a4f387b8d1eeebdc6f1fd60c9774ca257c4faaed2a34cdcf7fd2ce7778c45fbca7e57239fb5a400c66ae4b429768002ed4e66935e01eb4d8c5a971b1a1503db17b2608002c4763cc79cb218a1c4e95dc849712c535817016a986a73d08e9377aba930b76904e406fc7da9466c81d10f8721448acc5359330ca2d92440d2dee653a1c1d63dfad66aa022c1c657bd9aa44b8761580eeea625f92c1541d510ff60871aeadb8e34508d5309ac4a386e68cfcf8fc257d80788fa4f454a7655c4c1f8ddbc28bc6e43a33347af0d89e91e07ddb59d52085d639ce746bfd0bde218a88afefb935c03a2ae6891e5f2fbe41f8160b50b262150b4a56fb1db0aa627111e22854b6b4c2fd9980eb64fe61c9917ba9255a7a258e88b844851089d494f8b62b52a0cfd562133d882c18b22f0af9326a2d0fb96d9fbed83d338fe94628acba82f6f7ef6b81a220b8b77108d61419147972c32a84460456013d9362e51af331226716c6ea1f7b0549123d7e97fbb830e2c65d000a6dc16209e6e12872fefd8481da7a41bc4f8565aa0fb22cc97bb909f35442ed575c14ed4739c8d648af53d7b0d509b9e6dd479c088fa7527a52d1a942d65d15a5979345e059541cf090a6401d19aec7591e43c11157b61a72d9239c7728ea3aae1a79c7ea756bf91b7c3fa038da6446a928a7e1af420c98ad127e64dbf68e2fbd05c8b0beeda811d21029b15035be00b726407f3e2247c8726a02abeed13f1d96a24fe55dc265ba744923dac3a0cf246d78e93ea988285de221c00a94a1033919307fc7262d30ff1b7464627344a2e8cc49acf2e4b0648e3ea4d283220a9c711cf4492feb9128a05ef7c9be90e8aebbb2615115b34d207d1113524f1db8ff1a87f604034e816b0fb14b3fc19746a5e02908e796c0d25d220ea420797fe40b28199fa5504e55bfec03257d3b61c0c20ef65632c22f9602bdb70e81bb214702059328cd5726e44d541cb9ab33a6103fc8b8f90ee61eda02a83020264204578c086e7e9039cc3ea6f0873a687dc3467402d1651dd8e97b6a6faea8e42927a17a258e2fc3a15d1a781b53bf8764f5559c56b2ac2562005f87454b61624053b1d55cf06ac668f9bb351fdb2bb39ead03cb13e8fffa47ab762b34db759ba2eb06e6a8d78603b4b60078e8017e767d07dd7cc6a1d81a04ec28b915c2a72e68bb9c4d118f1bd03adeb6cdceb2627ec3929e47f9c9d7d4c61dce19ea857a87265544ae9ca5a45953cd57c64d53bfaa27ca6fc1ed2b0a0f3ba3f5037135c214f3413526bab73e440b02da9a43220e4e5dc77e54b68d559e2c733b2213588207a32df59342a6a5ce2aab9e5a0c2e3a89299f87462f71eb5cff8cf4bea624e5a4926ba28eba92b13319e211bc39808d7fb0a9a7846cc42ba61fed824b7dcce00f27d200a1711245a12c7f210989bc5dd29705055a1bc8bea9f3f9880aae6d4a22f9f41e0ce3ceae912ce2f5d657a6a0e402c57080334d84f02ed3627d0521bbde60208ecbdd044801e12a0ee0408e19fa18aa7f0aba5aa5a72d808211513706b1c4ecac2378c5d10bddf39c074ac0ce138bab40365539430a661a1657c22118ab7e693da630867a2823aef41242460713b727220fdf36850ece87c9c5d1a007ca2c72622407102b0cbf0baddb65af025d252f482304e0a307fa2199429655000874115d898d23831795fc6a29618ff538d8cb317f5b74a55e45e09400a2b21ff4f11a9d07b1a9fffb4dc38a04618e02f1a0e30570fc8aac769eefe60ca5ce2650067a8449ccfd62f263aba98bcbeb0199d5f28d91a8fea8657b95247a53e41c987136dfb4863b2403eda74c6f38da29d6c307fa93bde5bc22f46e984d7803637c52a479a8881028a104e92f72d71ed6821a5f853860829dd44d6a69100eabde4b53f6570ad68d40c3c996a8286438b596deec834383c00078590a9f69fb72319a5d5ecadcb5b2d825fe04305eba47d0a947a8e321509cb6845a7150d004781a08428d2c03a9d69f76a8b3bd1d7cc3de44c56cd462444021a015a3cde21ea1a357597e309485113b7a98f46f953fdfd12697f8caf0f7eb0021e902e6a2fb8d47a7503456848acd9f9e32405014ccf00e71196b35e76dfbe87c0467dd9f6769bd2725588c561b8ba430ce1957299170f3a460aac5a85de92ea3937799855c7fbae01a4ff633807e7e092dff097f53094d5762f628de4c1167ed7a017da502371fb64c7f0b901bdd666499030feda624b8e3e52d7ba0faa2732a82e08eb86af4cb2bf02f307772067086463850df7f36a2bb588c4efbd07063b290c84fe99101a2132212c51f802d03096f54a26f5af335ea6baf6b96b0a885b86801b6019016c63d88b9c808452a4389673b26bc4c1cff98b2a67eb434d39cb0de44d27d3ae28d797bdffda116468656dfd83f4ef785761a31cd72cad8133242480580815106553c08b4d13aaf0c830bc06c5e760697089e513a28b3640df8532d06f16346918eae8b4c7cda8e20a9d440926976991ddbfcae05920ed0d6760b7b56335ff21e6e848fde405a0707d6021bd026d45cf2741ce0a4f7f3b0c7b103d19e4ca2cf051ab45e7e063ef30eb6c867aec2c47d1f3db56430c6056264c2325a98d94a1093c53e5ab018fdb4234e238210f082276dcd3f88c0f06f5c7ff37861c2ca1b2788980daf24f6b88b1aa291ba654570982084d05fbf80830a89339b17be9d97cc0ac77a4f7f18557ca03e5112d4da26f3b3faaf6a417bf6503a429c387acc30a6b7330376e4a706fc0586fc5826d334a71a6d78d66669c7c9f29d38e1ea438061f2bdea40920c519b167d265c5e9db5cdfdcc35da7888ff8bf47358314cef4bad132fb85592bee06c4e0f079dc75d8bf2afa4e3b5dec40dc645ea0cdc089ef1f133c3818975accac0874fdde1651ae96d558800fc7b6aa1ba978bfd81ac7971fc3ea448f037bc9e6eb50c485c7f6c6e93747ead8b28113a839d7ba5dc6a33d8ca3b3bed0ebd63f7c32b336e6e248ba981dbc3c22d5ba59798e2f08847b4794947af7e47298c1e1dda6cb32f56f415faf9d9788b0d0dcaef5044fdea0ff46bd4e2500a2438d6793bb63d4d7aa540f9b79eedf3322e503f54013a3c8839241e48b296f0accf6be429def0a67fd5e914cf6018f3e3ee169f8df7a952d7e9c04356ad290f1d8bdc32061baa9e16b27aa2f8c8cdf6ac5b77964528c34dc083e12e59a2ce2008d32750fc90708ea666ca0a908741d5d95d9e48123d7f94e33e61b366bdcbb973566d516681e8d154493d5a3a8991bcd343d67eb5e394e323cfb420dc37fadd7746be4b25f18562ee1ce343efb7188164e179948ade5f38f3d9e460da5fbe224377923ebc9df61fd0284222800fce10d5ae0f65166086c45526ca3f629c39a65e44aa3168eb24f3d0b052e25439a694446142ed509381b3ade91c0562e00f562a05120f866961dc595980a0431bba701dac9196dafff28d631784028b4f34570c5466cf42b120cd1493dd5c958daf81e619bf050b63c2984c74fe1f0427029640440a99b2cc21e4660a3a385e29475ac11c48664978aa91ee18f1ce8b738879df5ec8aa27af22858c1bb4437e67f2234c08bb4c531a0d0da61e19284df41972264a94b0f48ec17f5cceb027ad64e8b746fa4b76fe66c658eb3a86ea14a7ca1755acc6049a1f3b0a8c23f92685c281f84c50037c33c03f55c409718c4c63002791821830df605c35ec16726b4a49c8602535ecb1a7c758fb532d4b10a0ae1e034fa186aa8535e7c7aef2b747c3fd81ad4c08c645bb6913e390ec1171606ac034424521c8058c2623bd0cfdd75bb139f3200bd3f2b803aefee820e18e397eab4c5b6f19ea66ffda2a37f353fc16cdf39968a9339102ee8c51086a6801a230e669f134b11e0321a6e1f0c6c0053fca3e36fe62a7d4576a0b8305e468a8bddb501aec6221eef028ecac92e7e95bfb58d1420518be7df3bed4275926e08d18e9b274c9611c5946bd0cd4c5000485ac2ef50e60e8131e067f1eb83728416a7b343d66d7e43b4ecf34d9b0406472650f68aebffce7441b9da67565f34cd8984b1aeb90bf5ee119130e174d33ba017d5a18f42479e6c12bfe7303642d35a21a27b4946464a76921f59d2ff1ccd975a6ddc5a19d71724e7c8392e0f7f39a265e296905d69e50394246d16dca5c25e727ac735e17d74d19c1f0c92ac04787af64a48e0cf876448f53e956521571892589f95564aaaa471a701979067d140ab0414b2ba33ffc6a674ce9c711ab8031bdece8da37747d9a9dfeba894714836ec515c3079a4ffc7b724ad2c21161db092ba108e5aa5e99e21b601ecff7e9e83f7fa91ce26e943a43154582a93bea407969bdff70b74687cf3b4b999fe093863ea93e9c3ebc627eaa36986170f536ccd6c8cccf6d16b6b50299339548055095e423eb1689925a347cad61161c22641bd7dbcff5486b51508fc0838810add923ca47d771225abebac2f60ec41cd6a2a436e6ffee8a3faaa71475e29bcda30679e5f849b9eede9a95d625bcc5a11f70e904276614f2ca6cc55b73fefdd1863f3723cc2932ed05f72da645ed3943404e0b23e71ce5a2e9c24dc37126c9f9669393534abf7ce90dbf1ac7ae05dae1078678ceba171459c6a7e5e17ba099d704346d33c89ef02be7b9442a1bcc81ade35cbe815d116afdc43913341b21568e8d676e13846191dd8ea4b0c6fef476f4c749b22c5a6ddcfc3eb73c19ed33e8d8f17cd92ac6d002c48f21f33acef7fadc8ab3c8fe13d45a8a6f978bdc471d3ea641bdb5d419e1005adec9acb6c300cf90370884d2d6e3f48096b20167cb6561133e501f5bd30a1930f6a0fb9543145c140bd99128aa517cc1f26fca9d1d414a892a4dc86d9350946b807d26ab76951413aaa961850b14ec9b5ecd1feeea4899f1ef4fcde3bb06102f9a4375508297c9c858c7a3a263d5a20ef9117d224a0e8df004d5e982d0f0e09e4d2b5995143004e8ec64dee13824eb6956168a94535155f8f145f5e744428833ac0edc321cbbea43d3d519b29809a9e54e78355314b7ba810519fdce1b15d7004f32ea3e2893a4cb6582baa75b234f64a1c7df5cf11b7eae13b49fdb77793ec97cec4dc28fe525e5452df54dc8dc61e9658e38ff575a49838c21f2d318eec829ada578c5fa42a5826be7139cf1af089ca86b17605cfd6397380d4448873b6421ceaaf6c2878120e7c5a8fa1544b558400d49ccd7d2a191ce89f280c66726bcbc9038099d40642532473002f3b0e912fa89a0c77fc3f628c66d6e1c84c61009d3e0d886a4fc544ef38a631adbf3b625b190a42ff5d0274716e5f624d0ccdb3239a18b3dbc6a387988e75d977a2b460e4f1c2d2c103096b1318714ad8e26934f24f4e85936f4fc20b06adb5de236067b6bb9f1f0d4330eec721f73d01c6375bda08244b9b52228e312c964dd8c172468c3024b8a562b76fb985ab2d0db2e13a4012377260d0a70aeab061d0c7012cfce3180e723e0257adb4e7bed9b8865d219bfd4b0432ff7bad2e47b23a6d84d48c4f9561257610d77a82299b11ccd34c77b653fa0a1d20fa5fd204bc9acc8c794a6c833c736e4e0b526b871a20b389c745b29d88e0fb12cc6495bf14723a8635476f1bfa47afc537d25be41976ff14e75233b12724d0996f7563a08c9f24ecc9613ce9a54171e6d54b04a8af9526fd4274d89cd8c9f503d32473690409eb486e3ae8c17cacce8604a577116f808ac9ee6e2a8a58f2923a932c424bae33131fe49e8dfcfa547d93ad9457130e220d3a2e8eb48eefeb20d87b613c9aa52769a3c3f0b91c0ba99f9c42ff5ac2d7596dbe6e32352a7a1a3bd0e0e46039c0ff9ee4b72a5b4f1aa4f8e9ea1e98b3e40c0261e7d23a6c2dcc51c3e324753f23696f507a2aeaef0d5807520ed168c9f0e4ab79a95c8a8b124e4f02931d7cb163ecdf0c63faec2c28da1cd0d8d5828a8311630a26e9b50fe72f13331daafbf821d0fd252c7d73c2b0d58fc296b524f2adc9339b96dc1bbe75c5130cb2fea6fa26e5e574568c121544a6c1f28c81938935a09f580133c8176a01868c44970e3a0e89db8c9ee5ad6a5a2982cd8b3e8b23fcd784de78ea91c147059aec9c97897c55ea1d673590228ec5ee5affc5fbdbb871b8d05317f5b62e7624ca29497c85fdf062c79245a74f4b6557d1f5b9e412e9afcd53506bf90c1cd52e78ba12f23808a4c993636b5b1a96d250cae8e25b043d00e0cc2f305eb7bcf506fac061e14f64a145ee9408a882a650195e42e0165380676b697762b44b31f5a2c816b7f114ec653b229015fbad43666831edbe4d32ef13bb8050d71651b4a2952a88e55502e879d6d2c77a9b557fe4acfb071e876f251938c34e6be046ea521ef177a69c88509b5ff862742f4c2babcc13ae724168f574824e4cd9c68cc0100c660dcb6a79a8e12fc66a2971e5d5f09307c929eb0a61935745e136b398a0bad31cdfba09785c1085c72ca51e8955a00536c0de75bb0234c977bcc2644e04094f270b3abbd46ac8929b72627820d9aa90b2d8890f3e18a15741a58bd1f0f691cbca5f9c3a54c8bdbb1c9a955ec3cd8f75bd7d7d1bcf8a88828c36d54c1ff0d0959876bb943e58297ce5d786aeaad569ae11c060d317445bc6f72171c1fc38642c47bb4955f377d47233e10900524d5a2fdcb457127f83ac3ecea3944a95798c5ff3ff78eae1f3dd38945fbc755c55a25843fbb11154a92ad2c8d36ff0f0baf48818a6f41ab90ad20aeda23ef43850fcc316104d9ae610f371c55ab5a5a489b8702ed0f6896a11b460122a331bf7e653a9861a5e9f4390ade4a7116dea460ee80ff0d9554750a3a4e035785d52d975583d0be05bf0f1393c75e689cf097d4f2df94b3898a493760a594c6347ee2705033c101d5c7a4e92cde054be932afb3dc86abfcd3f208ddaa59ca87cacd2c5a8682a45501b5870dc9c8b88d6e252e9819e7f94f41b465fff2ccec62af37d80d7dd5dd88113bcc850f5a63393a1c0c0cec2b4e406b71da6082daeb71c0ea515f87bb97f7367869dcd7ed69b2040e7406d3661acccd4fd59643d69079460ef2e1fdfc4f80b883a280acf4ec021c7754d4faeded1357491185f7846ae027d04ab8ae0fa104669b6ea36699b3e864fcc3f44175a4a0fd5a4f36a78dfccd42b06b4609f2b44897ca019d7b688852d8528a64ce37c448840ec4b034cf0334db42fdd0d603830117ff59da5c643a5816c4822c43513b59bb57794d6f78ef4982dc08a71448f4351c7a8c3642d1b17349fd185b1e8cad08a7a8d4c73b44d93f48112886a106f50f1d11c4c452472a94264eae702b6ea82fd8820246586c202839e8e68277608e9f00957b53921f8dc8365fdf677c7706cb91cd852f1714ff6c267cb8b6f740409dfe0e42c54ef2764053dbb582a4438bdf14c469efac12a308b75fbdeb6331bc5a8b712ac91db88770648b7521d37cac20cb431d2246520c18c3ce80e34c33144628ab636891357655e9549bd8b2e43afaab2d2d8939fd24cbefc924625a1ffe17ce0a31a91526bb4f6624a6f4fc3983319b80b66566cbe494c09efa90b5d734bb5b203e7cb5a9abb4b261947e8c26b790d083a8b9324f1e9eb53a1641b956ec021ef053846141a4ff744ea42f3947678fe71a1575ed441f437fad287a2329a93a1848691a02430f3442365806a652d2fea753cd50f7d9657e5d39df6e5b0638bd0fdcac0f8d6d8acac4066ca114dfdf425aab0916565d1194e5f817e196100dde8197e0d8000015b69e832ea74c348456b488da720892ca56e8e17586b2eadf9c8e359bc1ec38c562969ec1434320caf5ddfd5a89c19fb1bca04f646637cfbe9f1193a61f55fc186ace4f517a201d19e4a19cb3a6c7be9a433c6499b39b0b3cce4b4bb01d42bdda3da3c54554274a87839f326b5de748fe75b4d8a00d2349266ce1829cd39de9158214a7caa0fed012c69875ad4986d9e54fc10aa85b6423ae41757a518a58d3c734616b3949d150a349acbe873e69316a96da9473c73ec9074ae93f63722a859b3229b8cc8ed23ee0cf921442dcbe35e496d25407da3a67d82171d871e56327fa0526cadc07b4a002b65b435b57165aaba6d5a1a9283b617fccda346e8ba9a3f16d94527913c4979b0772a87ddec7312d5cbc8fa30f4d12266dfd8e47ab86875f290564f0ec662b5a3353ca2ce2883c375e09319c232acd38e049052d0b4235c2bed28b6bc1132b0dc4422f6196bbb33b804c2df071c7f1b9ee536f453521993cb8cfb2b10a8f91c9ad206f543bd974a2555e9055e0f066fef0fb508e47f6a30b3978c2d626616a1263643c9adb4913c64bd7d6c873a01a2942f853fdc08254700af1597a19ab4dd4a259bb27ff47854f19cadb446874c66c4bfb02f33c37836fba01187baf4f4b0fba42b274c9f21fbf73718ed359a1d762b592f338553513bb5bd9b85595de6f41e6930fdde50855b1eb0beb430932bde671e0fb8ebee4dfa4e1503968e36e3eab379ce3666287c1334497f2bebf37f9178943903705c7466ebcaf6a98ca6005ab7dca2c0d824f13e443371fa3e9bc9b4db381601a1418bee21bd6c2f88849f0d6705c4f6f7743cc9826efb204d4768eb9f0b47b96ee36e2802108c40240cdfe9743539ad8bf8eeeaf696d82587c0a837e39394c7f14a307cb9fd547758221faa36d2bc26f4746b0b7e8e365c428c06b05d1ef404eb5e95a137538a37545c9b55c99eb88f6f333826f4f00563206b440ad8262ee01a589f75117a86469abd54288e78981ca33e9dfd7c40daf178789ba4230a9f321390b05a8e2094f745f8d6883e213a3a3d847ae6eca51b3b466f1f844b485f173d821e9dbd07f506eb1554f146f513a2d3d58ba0b768af1d164748bf0e1dc15ec47a19511c237d82f485f56a9d3c043d9d74daf51aeb8dc2ee8af5dc4ce8cb629be18dbf62020f3ec2b6b918eea3daaa4956f7246c4a5ac0c2af99f183cd92f42bcae90012642da73ca90f4de0c11fa2b46662f4f9be2da4783468646659cf468c0da7270db9313a0065344e29b14ab8d9a1d229506276b398467ff95baf53dfcf3d692ec56fdf5152afc0015652530b46f238d4991567de65003ec40b778fd98f4646f2cae69d77876a29044b36abfc0b1a6a1f9c37f4d0764d80308f9a7cb0df48acdf110db8f80282aaec45d2515ffa367ac0784300b8122f20044e6ba22060f9d36459ce177fcfac0787ca939dd9ad712e4371dd7028e3712401cc857df38270846ec9ae5a80298ec11246f64cba1b4ab3d7119e1526308ae244ee23c3e7bd3ee69d048de83211c80e3b3894ab5c1ac5836a01401d7d0f0274c69a22c80d610f6ac7fff98bf4c2aec5e6623aa00f51669c96af109afdc33202168870bcfce517dd48e6928e827d30e5e8bb4e0d3c1bb5f9595641a99b2b62fc86c02d9d1b427ac3c67f377ce80fd0ed11c0bc25606c14904e2fe0ed0ce8018d42a086841b234c45cc0f0266a77b71a8b25638959d7cccc0f3e9d63d9844a60c3360ffba00ebddeb15201b902dfeb5fa95c02c505a933c6dbe1024726f66fc70cb78a56b99d77111cc18bbf2320402fa74d1076af07047b4833e170321ac9df53d541a82e5daa450038a753e7c583058d6a603f1702e1a94a6d60493d56531dccdb3a06957b2adfb678f114312388cdcba6b9a59de1987710f62f71d0b63de6743d05b7cf932f07932bc0a4ea61482b5bef96a56b668df87352addaa7c6bbbad4929654a29c99307df07af07fd599c01dd9f9db33e24bf78875f2cf28e4faba08fa7a04e6af7b1a2064d1dbb6a6a06b49b385dcf549bbaf57aec8bd2c85e2acb7b6f7fe5c4b6348176ae721e3ef5674fd8096a04752cd5058f46074d5c70c5c794ca354f547620d4da4d9d87a2b476ee82caaf8252282fcc731c39a06f13026464c6b3f427ccb154a27395afe2e62bd56ba97c05e4013140d0ce55f46578f0c477ebe68c2f3752ed2dfe7359a99df75476d86e2f8dbac3bc92c97f333130973da9347dd298c7909674e8c10cda51d00f340a97b6318df562e110c5aaf26b3668200d170cb68aab35a5c502b26283eed6b5cb59efd56a756bf55cadca3fa488bb7cf0159024352e48e1513c06d2a13896d0feac09732ae678e7f5607e87b591ae54a3c905f35e3e92d4abbe0d86487cf845e2c37f0f372350de5604bedc58465a951f490a49ca552e36f4a55eca97783df8678ab9717ce7f5e04da7666707a76998a01d57391e1e638e42dcf0537ad910854de5d7c0d462b03cd69a848841bbf7b2815f95df86087f37ddc4f7a7a47fb061109fe2f805feb5a1dd8b7068f73eb81bfafc02ffcc0eb0f2e0b5339069a65f184058f224c7c6c66627f5de0afabab7a9c9a84308faea63c01d48cb870f287c2a7f0cd98b89e1f9203d2dcd94625a6251c34151a5f2f3a0a41917d669895fe0e714d08e93423b4a9d68a48e7bcbccf1d05853a801144f6c8022899009bc1ee7f133dd1d234f7e3107e317f833d1107487addd1409413b7e31eccdd7835fdcc3a7adbc2227b4f318f33ce669944f7934fc5754a63c1bab1dbf9a255202ed1eeb55f9813c00e64cb13bbd5afd547ed2ee6c93286f1405ed58c5c3a7d6aa98637ec22a768277679b30c72a5ef10bfc2d46d06e778c40bb5ead1ab539dd2bca4ab8c9e6d0c5a91dab769e0c41bb595955dbc4ce45760325babcfbbdf7ef8d2ff0cf14d0dda690ee6228c5b4408176a5520ce7e30918c72386511494f3c1834fafa68b61492e704fd0ae548aa124971a36a59f1e9e90a2f21b995accdec0de7abb777bbb574e39e594b2576e5a0f366cd06e8a6840bbb9391e85ec26884f3974f10b2ff083d2a0ddc6444cd0c7b1d9d84fb7b1d893cabf59f8f4aa3496ce92493568c73fbb3fccf1c65e0fe657a37cb7ee36d6b08d75ca376f4926d06e3e874f946a92fc8c0b3eb3fcef1c73ac8309dafdeb391d2afa6a69926040bb9f43a0dd47e181b9203dbcee7efdefc1071f7caf7900418b96a03af0e091297de2a6f2937440716a6f621cc2071fd498e3b8756b5375e8e1b9c1431c02ed2616463dffd4660fb24dbd19d10e9dabe346ed5667f2a9639d6e71d2a8fc5bc4d4623689929010949f6d6ab73a2698fdc7d281d5f7bc838497109695ca3f8167853f884ff9d794680b19c22ff47b19b47b7b4fc0c08dca3098932545e5d74a313c4850facd38293dbfc01f9750df607ac3c1022e4b0781f2b3ba094bc525272a7f4c1194a038c5ff60b59bb9599b7e2f60a9ee243f9507ae21f00ac22104cb0d7319ef60a9af0a09a3099fde146cb48460c9e1134cffd6de8460c9a9cb35f4d020d605aef1400d174b183a498234110e1f754359e6f22d0a82e35b14a4e54190757d999b877e9ab6863698ecb94a80ebcb672fa6c71ce9b327a20189122b1f9c908414285980917a8fe6e5a789b4bd9842a68e871aea8c54978d64ca41ab302d8f63a35b7b8c2d1b75c27c5cf62ffbe54164f2ce7aa8f31f973d8b20e035f4998cdef3b2d195bd998efbb30f3841414d0a0ac75cfb0746d0d58909e0bf1fe01b4162f2872620b22722b2c17f26dfd6d41db1a9fb1e4867ab41222f157f4062c3dac9c1b949810f36292090a4ba7d7e1e957710b1bb6a140edbdcde57c0f7cd278cdacf7da5f6efb69d51fbd7255a02e5676e82a0d037d99546060219e0f3cbe032f8723f1f75482a92dd0c6441c514cc5ad0fdc7cc6cf2165115a654e8fe4ed9ee963127afee96df3de511e2c7678653b614e0c65db4a4b474778ba65065ef63cbb1dab11555de3af67a888cd03109c3c95ebff75e47812e0b5afadf4ca7bd4691d879a3d10dfa243077b0cfe7d596ca1b0eefbbe7b32e1564efdf4c1772d57dd58fafba4babecebf1ef9dffedb3c4b1a1ef3b89b32117fbc097e04c70227815180443253008180454022a814a9421c333c7d5d4cccc2c919e935216cdc0a4daadc7c4307f493443cbe0a2197cc80d0562061844860aca33685a14cdd00271406344325450fe15c9d021a93cc37c1334da0ad1c8625af0040eb1fab66784d61339ad276e6290e8eef676effd154a0f80eef66e67dabdd116ef39656bbe8f7bdf752f6b3edbdd12890c70c10d4138ea0abbfbbded0e97ea401df6ec612e8c1182017f2023dc54842c80602c4e73f3e0fd90a6998702c2a3028961952404c90932994c1b70e928f99056971044820959ca9da6c752427628646fffd5a8f80b7fbf93af0a4d1d334dd96a548eac1dcba14e1eccb763b121e83e73c316d07db8cffd693efcaf61306e431871f0a619defbac1f6ebb1d6547d8deeddd9ef1ced70dd1c89efb3fdf2afc855033a37d3433e82eec3b08a1d6ff43f7bee359256493d765e62415e88971eb167c29dc7d1b62e1efee6e0d3df01908e9ea56065eab5b395a6439fc3a4d86b65277f06aca5a6b1873bc92a757f2e050e67edd28e984e4f1c07b2cca71254c2811680c96803bb42341264e044e064102544a1797cb8b39f89d8beb8b1d46b185612bfb2451f9178e62a6d1cf0cb0ba40a19d8bcbc5e56265077f9633ca69d4a6e00613ffa5e0234971dd46b1519617c221448c283fa31814b4ebda3e504aac322cba76864c2053ffcc177ffbbc6ef8b46eac9ba04dac8de81d886d7e3016e616860ee31960db88368dfa99995661472885720ee4a8c43f835468bfb6618da56ef758a9fb56f8d4ff824da1fb5cb757f55796c3c6ce12dd6945f64eb04a02193390e20220aea4caa045c0201bc01537a8fc2151107677cf828a1ff0e025860a585270323c87fb1139d5ddddf721a1f25f713de9b902a705761f2c7aacc04100aaff1405713fe3082ba8feee685491450cd53f8a82f8a4231628f1ae04e9571541542baae020083789eda8fe1a1543547f92536146f529aab72841bba839e674d7dcdd9df807bcae6c95a900a1720685eccd740460d549854e79a220d9432a704a77f65ab60e77178642bfef85a0667a50db0aa9d0d1121a35c982a11f2da113141ac1464b68ccb0d0ce85b5f96c69f00edd7e5ab011653975663b7a76bc989b3b60a325d4474ba8ac904a0b2b6801874fb2ce1656251bd4b9449d1d0e1d563c140b730b0a469d9b0e33ea7c9a030a7ad0773a5a2de0e868356ac76bb71c9069aec8c99bbfe3b5a3276bd59d3a5a8f66febe74bd1f38eabeb4f2e4eba15ec2f8e4c3275e1d543cd4e6b3f920a1ced744417647c6aaf03da751f1a19456e44bc25c589b1b3dac6a68cba0f0817428f4d0b4fd3017da5ab0616e3e109edf2227b469e6cb1dd06efba9f3b79fcd0d5885ffb27ae1791db1f74354e1ebc8c2a77df83a7e54b0e113578844cb12b23ed48ed7a3990f5fbabe65e7fd78a910ea68c92e1eaa059c1d63d4f9bc84769b4f9d9f8982403806ed5c58921503c4e6339a23589d3b76bc5c5875b2b06a9a9814d06e14836350f8a1ef58805100fefe0f68378ad5f9239fd0cf1f61e153f63347025c7554616eea6831373fd3d18ab96901a75db2ea7cee660116270bb0a699bf1d0bb03a77bcea04fd9ca04d47ab69e61781763a5a75b68053e7bf99b97d80002c1578269db4a5f5c50a3426ab518b0947643570895a6f1011da81a5767c348a33046806b08c0546cc2572424c8c904c62a02747c4d70c021070091e39a5083a29266ca66c919a41ce9433703855031d9fa20611db248d2659e8143788a0a0140d262d5d89914a31af29e47841162f9f2c1400f5b15e5390a05f1feb65832f280bf5b15e4484904057a88fb545133420b608438c2db888b245145911b68802842d565ba866381e5a7c2125092db88842b6a4abf022e2f7c38f4aa4b1dfac76a6e9226a2d250b9f3ab65e0cc10df803ead9038572ea6b0105ecd18737f9d4930cda3f79b7d93a06d8020a9b943606e7ae1d2be44a89336af77a9ab70a17a1fa3e7b0ff6d0af45c0a0421b23c078474a129a8d1455730c0b2c2c0c311a897b3e65500a99b7bc417b58b091928415df79895852964041890a5c4aab588f13342974a630ebfbeee62fc548b1a9ef85146114c75853ec3c1d30550d4d4184dabd2acd93f45a892654112c0e91c97f33357bdb72ec3ccd23de60e6bfca5f19470ea8f3f86a6406edb83aa70b39f056b3f960ae5d60aea594353e78301785b97ee3bdf3306f2e57cec3f1e0779f524a29a594529aa6d460b8a01dc7cd8eab9dedf3ddca26ff276a297f72fcdb2093ff34c16727f157c4eaceaac85ea3d078551ebabed76361004096412a6baca1513a7d6a54445a833edd96fd1815c8308363f466f7cfa1c46ef20a376d81f4131875233728b035530887eefa56e6bc839f43a9c620303e9c1608e1f1761aeb3c5df39e1bf35f22954831d335b799e1b85feeb4a5db319ee5d20b0db22c09ccccfc4a70865328ce4f127e3aea9ac769a4d168de1b64fd6f26dbe853a8d3da5ae611085a042c541e58a8fee00a1e81ae1ad6342d57edff5e6d198539963c9b5cc16866d36f64598402ffd8c80b6384fc4ed1e119540a74618cd0fbc16d369830091299b0584c82ac562c1693203b3b3f3f4c8244263e3e3f3f9149b75aaf471559f66228186b64c992250ba4c2466422cb1ab423c12c900ab7445c222ec12c568b7cb5dad98935a05de7d48d35d8ca3bbce3e3b3ab5dfdfcb0b63e51905803dacd39374aa142f7b3163885eedc4a1a937c86adbcd0876cffcd74315d69b52f91157ef1293ea945724da13c6283ca2ccc398b39978239a72d16f3432b684759b4c562938cedd05eaf85817d20b93ab7814788c59ac63fe6546827332bccf9abfaf30eed322b357331275f734a1773a0da915c304e422fbf3fe32a6015928bf482f9547f29d215242cbca3434839249da6f16fd314424ef5d75e6e3379a0bd5c8ddad48a6ae897920d3a7a83ae67b185827619abfa67ac46edfb67adf763be7f36e5fd70354aba32168575e6537d8dd6fbc1594a69682f528bd4621aff4ed37a18255d4de33f354a8a31d121288914abfe35fbc7f129ab51d9460a6daced35cddbba12a9c5a7aefea42a7c925698e3ea58aabf483dd5ff3baabddadfd398a4169f96d01d7c0727b5a48b397f516c456a412a28cfebe1df2dca8a55a7aca6f1672c286555872d54ffb95597ae399b9b5ddd1aa442a7b86bb045e1670fbe651fcd7fa9ec797cef813e9aba1c1c648a0f84a911f4bb926a8b8e7445f527b5f8242bc955bd93b5d35ed51f4aa12f6e4ee4ffebe1dd9154a50794e4da48ad118cee77a4568db1d9e12467ead09d92ea571c4fbfd784519f528cb3f1b133557455e27956cba5f289fdd8a81847c5392ad66197abc60757f35ce969a97102fb4e54537dac2f74bec0a92dd41c9f1c1e7ce1535d7c7aac2f6075bfad70c316cbee505657ca700819a3e30156fef75f3b5e6d05fcf9a310283fe1136f221ddae540aa1a733b57c8a1bcaa47b3bf8af1b0ea3ac171e5bcea2eccc9ebb1cf38b45b27759fb71dbc3a793f5e7502df4dbf3a70632ba6adabb33bcbae0ef28040711ad59bb3dfacfed98e5d6eb8dc256fb2d0bf996e078c0afaf28451373fb44c610a539842aa41bfffa2e2d3dc3427fdd91341f8314a19e37c1641e0915141db07e2bf9a854c46de13624086cd0c3b6a4b8b0cea220292f2bb179548b4c19f6f64a7e6d01f80bfd5f46ac8044a82c23615619afd3904c715946bf7a2da22cc0d616ebf08a39c3544abb1a5a5a7ae8be69340b09514031020ccadd6455a5c5c5e5a4ca26fad76f693b9111211c1400e18a0966c6a900aed9657113f02d57951bdac5e785e9c90d94fd3ec673f2dad9696740208bf9a1acae3fd584a326dc561ea64ed5a5a2f3aa8fb2fa64e85e7c28beafd20f27aace62e84544063606e33d1db18b8e103204c8d5001c707c7bfa85e56ef47143ef1a8c6b4e87e4b8b54da2816b4a32d2f4dda15b451a2df2f356af4fbcf27aefbce6a6951a9235fcaaf69d4e8e58a6880912f7a24a9185b5ad248b6468c959a81e50661c4a0f1e10f7c982f687ce82c91c947265f35cdbea8ba179e4e851c4e0dc901ed6a62e093f6d9efbe7516e5dad5d4d48ab4cfe65c50abc5c5a7d762a56e47e1a222156c9a86b68c44b465248aa28a8bb97dda0245b46524da2accb1a4606e69106120f4bec114f117bd6833e25450f8ddab2dadd7d282b942b9aa60c3dcbed48baa692414daf98baae5b7b49f8de67423d057bb1795efeb91c92694da1efb2418687749acba2d124fdd7f51edbfacf65f78f6c555f7e555f70556f7c5a7ee4baceecb4f5d524e5d924e5dd24e5d92aa23ad1af502daba9f5b576ac59656dd777f291c47a0bfbc75f445b503e64816058c04a28091b0248018d99be91cf6840f9460c663297cd4fd75bdea7e5ff131e912e873978d8643caa91db3eee2fcb5d161734913253b4d94285192c40b1d2f947891c48b245e24f1a208f88617395e24f1a2082f8aa8bb53fdb398167d9d4bd66e2c3f4295ac46f1fbcb967445f7972b19c5e3c7f8358dea07c2508a4bc97a42b276d80ad49c5336ac69de472980d018b1c8bdb5ecb5f78070c76eba8f99ee104846d8308310ce198aa0162c733e098a21add43493364dc3b7dcb0a76f1474df67d3341569efa1e69cb25f4de36a19c1285535ca6ea88162cfdf733a7ab159c852c682ca70f9ee72b28c2d307fcfa1f7fcce379f7273549cef4179d3924f4edfa0fbdabacb1fe8fe9482b77b731b1a19eb1a195d72777708dddddddddd2174777787d0b9ddbd8371e6e08442e5be475974bf9ffb7bef69cc65dedbf45941103ea13ec0c571832cf471964ade9a08e49082b28d4d8c5a9a68a14d501c10eee3dc2b0e7723ee2e2e2ffee2aa29a8a88b8e6ec2e525870a0e61136f22cba14385f54745415cd52a1f540e9bc001055c025442193cd9a1d6a050e8a12c953ad340f46b2aaf31ab883142178de6e8b5c86de153e4c7c13741ed4a714037e2dd7a3fe0770d0ecd5557d4ae5ae32a1c1a64c3c5e1ac3073d13a05b405478e866b50174d074756411ad0fd1ac80405e578597468300bed78bc9fbaa2fda9aa56d9d0e50199a01b9a3bb06911d99bd9979aae69ca78a17baa9d9da0410f172c4aaa8fd5232594a52707da0f3d31f0e931024b8f4da602aac219585c89a28b29a6e8224a28085d345183cefa585d28894217484ce1e28dda3d5d71d1c610b88871e133c3f1785fec951f27accfa6e1c3dd69546e18fb87b650a8613cb7e686bd3628fbbe22f368b766c9ddcc86433fa19fd660087dc7f5bdbae3fc0cb4030fb3f2ebe11fea2321d3be1eee737d6ecc4eabf0eb016136711fa3a072c3ef1123f1ce80504aa245165a6821a5092d8a30b58892fd8c1636888d842554a9a204d593ea9fa998f3385aa26acf56aa46c956abba2f4109b49bb559baca88ff22775fb97bd97a01ede4abf57a358dbfbf74ad13100d480526014e9981557f39b965549d29a7ba0cabfacba8649c905955dfdd35c93c61ce65a25497e1915171ed42312ab4cbf10385cae4342a874f0e1f99462309b49bf5b9df7b54b2f83059167a19159f60f59779a2a4facbbc64b0306a8188c944d1a288ea32395254af9dccaa555dc6555da6a7ba4c28ca34e15397c32767a7c90e9fba15583249f89400176a27a3a4ba043ccb110b59b135c6df21d3a2316e397cba1c3ea12d472c8d1c3239a80ea9a08f85c5aa8e72fc54ff6d83ce97dfe5f0a9be53dd1f640a6509fdc82d144b827632aa1558a1d8ce0a2e3ad5fbb502abbe1f3c5a42413480522c237c6c7a28d634ee04ed6454d5bf0bc5aabf8c6a0616454dfab32554abd9f23ed2a82b01a8b6d8b46857825f82a526b5618b4da364aa7b04a3de2eaeaebb500a15da4957296be236bbdb62235d2d36d2552ac11612b1aafd3032c8ba0faaa21d950cba4347b2623c5a42331a40a94ca7697ae453db65c54458c1b5cbbbdba2ddddb7bb6f57db7d2ff46fd7f458342115aaedeebedd7dabed5431375fafaeefa5ea6d9d7c52e7ec97b68db08c602358bf74e0e8c071e1e9d708e6c2e3c293e5b8f06439738ee6afe0ca8e8051e9df875368bf4f4c8b76a32c6714e3937fdc76f0ca3beafb111bb41bc55cac48c11ccb168b39684574befdb94f5dead6f80032a5ee3f40c8048ab00d7cc33e0e7c9a755f8724759f073e65757f6f16a70723675c51e5bbfc280a22675c408567b0e084aa308b0adf0901cea7177c769a9f28c83a1319dc8dbdb12af4e15354c8bd1ef0555706681802df02ef141ffe05de691fc2312a8c91e6d1c08790e35e0fc855e872d73aabe4cbaaf4b9937103550abeb842882adcc791c0b952da6dcdb852190095d98c1fae650666ac68aabba00c20d402542fc38cea53aad3a0f71fcc8deaeffe53a3a452cccff049c48325860fd583a8fe3e6200f20021131832c611d5bf88bf0d1ab88108d5bf037c0a557f1c72d0a155fd79e093a87a1859547f237ce26183841b3ec9e08ca18222f8d4394354ff4db23aab844f6f678c58133e3d2b2a2c523ce1d3eb62c5a4fa6f143e3d2ad51f8b8c33aaff3ac1a7e70ae2ac28449c638493f9960a00a645e5d00f596cce4c5bfc187fb7e84c6a7c8e1f71e8c67f09cdd7f24efcb13fd66efa729bd8d4516842cc09ef343f7e3fe19de4af507a899299473cb49b6ec69c35ff26a5a4524cc841ee60584142078c31886081b18417c0604008e1002f76604738a00b176ca7050ef88245613cc022a769de84b58ee88935cd9ba4524c8f5a5013e2a285044e4b0637ad264256e8a83e566b089a0dcdea63b5a8c8745a5a700d970426d59f474d8f13a2c8fc3ddefef5c0a1168880107f09bcd3e8fd2bf04efdde45f5518fa209a63f9baf7d0df1e36bd906d39fc1f40633447b1a5e4afbecb5ed8811283564db91f8da6b1b4c3f7c24a923f3617a8321a27df645b4cfbe3fdb8c40e9ad48f6f08d845e7b24a9977aa9f92f95ad6877008104b68e9e869782bf4390961f0243b0303b4d30fbf145429ac6bfc57f4d3044b48f5f83063ffb2330fbf3e36b5f43f6723b02b7f9f16b900fff453ba469fc359384a9ccf452a1697aa99712b22dffee4d8fc69f661ea0ba02de6bf96a22d9963dd99be9403955be946ac88e907576a2c906933b2804ea87ef3e4326ea732ea8412f7f1bf4f15f770da08f1b0e4d236158c2f0064324cb1e3ef356047edc8c1c097d7ca8bd9123508e6c308f24f5ccc9d74c5cd3c8cfa4dcd7cff0d81be6a68035ea089422f1437f04be37ea48fc100c7f117ff845421f7f4530bc11f1875f833fdc6a087ddc6c681a99bdf6ab89368c877aef25e5aa51a594d20873f2459a497e66921f92efbb36cc41f9513e3d82763eaa94cfa7ca97cf0d237c92af43a3e2cbc7a151f0e567d1f45236a4e4c31b1ae52fdf864635cc1023508ac007bd915aa47bd0486293026d46faa1039ef6e3fdf0b130ec3300bf7c185e03de695f4ac9bbbdafbaf24139a3242889b97e58e3a3d4429a2625a4dfeb371f08137942ba5f18b5df95daf08130c7ee6601d584682f38c21ffa3685b623fdbbbb903bf4f11d3a74e81e3d241f084308210cad8076313737f3e3df8886841e864c38e8d034d23fe2401f6648c6746d04b38ec07b86d04c7be0a166ff83e1d0bc14076c786a9cf17ae6389a43bbf7b241037ceafc869c6598c47f3eba1f52558f1b0c11f9a0af617e683bc23f1fb41d8152847ffe917ef92fd5ed6a7741fba3dad5f3c1bf878541f515540ffd94fc43a69aa689201390a6f167130e36348dff3409a931c1ad44d0eefd948cac8d0fb9b901bdfc9bd0cfcf8664de834dd3f8833ca73a8e1f28c79c7fdcfe51415337fdecabfa5a400174c9445cd30c7371cad06f687786640f84638c31c6c871a7e3c70f4517ec27d32262cc814f1d4c8d1f77d4f831468718981def87cf9d65a7227b331dc8a6c6cf5cd3007391d55816c2876da3468f3b190e1b9462dc2b53e2b00105bdff9587f2d134b13f42df5ec76df1f8d829c55fa9669cb3d50fc607e31385b6212023f68ac77bc68651e3951a63acc6e845988b0f324d9b1a5f9ae2afc80624e2c7df2a7c72f1a953a1c68fddb352e3c7df169ff8c41ffdbb51fef19f0aef077c904d23d99e5264f2b39614500ec11089cf5f037c987d13cc6e3044f8b3afa1ffb36f93f63032ac3fcc56aeafc2a4d804b39a0926959960521d0881e4af69c86c1af96c7a2d7f6e3730277f44055d29b70f3cd6813f330e1b50f8f137eece10f91935020438ac10d57da8feda98ee1e63e2d7b7807acc909bee9f3bcb6da586f7703b32ff7ddc8e402972e4f900e2c3c7eec0388c6f3044f6df17d9df8c40f1adc8fbb81999ffb6f846deef8624f5dc3f8c3f0f5b61e41789bf0ffaadfe47a0f41fd98f7f040a682b02fffd9108e31b8cdc88ecc72fb21fb722efe11f81db9018044c07b45b9b463d327af0c2811194b8e20b57aa3e8cc3f8bfd4be89364de3c00115d5f784114e6a6f1dbdd97f3086013f5b0187f6001fe6f8d7a3d72ea47f43f8241fbe06f8047af838342a7bd81386608e8db475dccbd6bdcbf6538254c43d2c156edd4ba3c2d0fb834020506bb424654f2b6c529de0f580df75099e014af060601f2a0c411df812e254f83dbc1ef0c9a0fe8f057d568d24f66c227b335ddca9becb711cf7b63806ed1e6c5b37348a01cffffd08d5271ac2358db71a05b79aa6f1e7aac31fd8c643c117fc793ff64b2ba04254fff75e3ed0c02958e10bbe9e6b1a0f6d13b4c92a7447d0f581649848a040fc07b4ffbd1edda461cedf17b44531602d10685ba0cdff86fdb975b3b78f3b730a18515c4f5e7cea56a75dd50a9f168c269c62336ac73d359edfa8e42d5556450bd58c40000000b31400202814108a8562c158248cc44dfb14800d8098467a541acac320876118648c31861040002100000300666868460100c3347648cfbca84956a68942b7181c57f62a2eb95e94b014d346f35ccd43903a651fe4bb154241a99ac4b586486600dbc010a147e17a1ffe10a11e1ce49bfd8fa618bf8c698126d382ff14dd01f45e119487248d215b6c31330442a47cdd463a5468f2939d1cd7ca9c95f3606514639085445c9f62993354b3e00ac9242179914dca9b40f7b0903c0395d386ad5375ba649c269691594296e5aa38804709405a06801d59bbed1970ebe243e3f1b7a0b13e2c8a27a3ccc915e87df4ae3248df4c6300da31d17a7d81d50350b0f1ba25618f7c3206e113de0dae712b3a8c4c538047ced5a7e6d2ad14dd9d6aed84437cb1720d9e152b8178e26fca26e72c29b57b3ecd0d6e06db0444003391f48d197706603a044f951d90147039e156be03736778bd1b8ed02654e958135d5af3d4e547b0bc8bed7a80fe22763ae67902ddb2f0d79ccb02ca969cb8b7311e3365ad6072c1e6d156f0ff16597fa74d3221a3b88a4becfd4f09fd5a0447d752128f5705ff390b201625d875605aca4ac39188d0ebcae2420b41709914875f496534986ccc5fd304a2ec816a04a3bf80fdbdae166824d8fa2fd42d5dc6aec9c099814553d846a8f769da2376145c99622db8205e3349b21e16e8061d293e0eb60932c6528b48363935dff27a701f5b5003295ebeaaa37b31706cf168617a70580d64e0bc4601a4302483f2131997b85133889a8780e468d520f1c8489c52462e4f33baaf6b123875fe31c592ec5a89733d847aa04f202882f0c0d1414b5779a1f4af5ec3838dbb1d76059addf0f3675d9710dde4a6534c14074c4e31792238c5027706df3c6ed8b1156788a289466a31e1c9c03b5c1250c46d2b9939d67658c87cf3ccc388dfc934bd93527e4c0ddcdff1cfc311b8f901c42d9be08c66b2997765b8c22014dc6a07ec892080a78eb1a34fd52f4862258ca7add2aa67154d26e024299ed85068d658bf1944a24a3582972103e448eab718f527a4467d03d5d3028104332f0e12ec217acb9ac160ff46ded99d0096db9f3f38032a52c142581bb8673613d09c5c362a9f2febab56e8569e7adc0b573cfa58b004d69cb97d054115b2ba389d0ef8a06576a16fd5261425ec6bf52841685b02f137d9757bba81a896caaf5529e0a11e70050526fdd543d3f5002c095d8258708f06cdd93e12cbe6d7ca8804517b3cb93d883b0114f00913c94cb7720d7c8e033e0ec0cdf9796603d0201bac3d40f45d0f08c80777ac50f6c55c93470fd0e2e0813580674c8c3f28fb37163aadad458738a7e57c326ede32417ceaf98a593b254858d4553e85e015f8e6063a3a5204c0e4c889230ca8406b40ebe3e2e795d4f2a2d761d50d659c2d0ad3131705041ad3451801efe5dc61c68dd833aeaaae70e7e70598522e4ea94f06e2905f9d9683eea18c40aaf61d889808d94dc3de25f8581241a78a1829f8e3f44aee1c9bcae3127cf16add649e18f03cb93489e046e68722f3706465dc521a67a22aa3a419cb0db7526e9126682b8cd86e99e4b090f638168658c104551a5b4c4f7d2ab83b08474713db1108d90f578d10ac25629d0fd849db56049b3beee4f0a3620d3a761126f968795abc60627360d9b5a0bbdb3b6f696e2a54b1cce61c2c3b0079331a8a187fcf6b739eb47a563a58128c9382e042194abb09e57ca390ea1ec93a86b0d28304348b9240af3179945d5bb5da2675ca30c7bde723de6ace78d4f9e110073a12e55e0437cf6adea9433a077dc8d31de953e9c5cb26b087eacd8e8b214ae10b55230ce94d4009f054bb756015abc5d6994dcd4d851e6335eb77703bd40f66baeeac7e5aa06101268731c0201ce96b473ee0d45002b7427ac52f8a40f9bf02fcd5aa1603517ad677eef21d740b25ded34d216068322019e08003f9cf24d0bdb22e4a35177f16a2a128825c881fac3424e9cb3f02a1d5e371c89561aaca8152ae2b11ad60872ec1c7c348981cf8d8851f908b7dccafa882104a90409175256dfd75c9682258916fa906af0821e5fecba6ea7d177babc72f070287a01fb3e0ab5b76f4c21797b35bc4cfc5bc0bdb7fbf75d49fc85005312566a196df871ecdba9b46b0dd497012b720b8e3c20db268a9ca0b7449b96d4f8b9ae4fc0ff723b829c821b3241a085e1e0d0c230c44f10e4f4d52979aaa30386edaf6f21c3b1579bc7a52e1c3654dd722b82360bc841746f480cd181f473818500eadd2493e2ccb33ff902255c938664f063beb4fa509d6f4337970505d63a1e4fbc5821304de98c1f275634e478dc92608fc95cbea70b093315832cdeae69271b4bd949eca0adf281f598a9217d39a2efba20f96bee9d4ad62b2eed23e408b09537c709484f34f8f20926ecae9081c1d3feef041e34152f8eda6cd65a9e919b73a531dc2a4ae51ebf41cfa53e54dd8e0ea5a154c91b11c791e401ba0449d014abc292eb3481c0a3e8e9a009d61a60ff0e04688846e832a36d64109405822d99f61c4183df5118d2c16735b612aeb54ce615c1c1cdde331eef2cc42a47f49c41863c984505e236cdf1c6fcefe1856c455810c95ccb226f5446848aa8ce7258079fc7bff2dce147b9b3ab2563d8a3757a39ace4f60a5c8efa767cda38b38a71071bd8e4efdbbabbd5665d6d28b8c49f4711f755402aaa23095c7894d4c6e4247e2e4c95995615c2630f84ff5e9f87c05d832aa920bb70d486298991800554c68f7276faafe938eb6131e518405aa95c5ba8d4abdc864e6f8479f12a74bea644ecc984ee601fba997cc7199b2882f5c36a13bc7813a167df65691406f3684b8c17a2f5926de1463c364b362b8eab12f3692ae6cde2e25f83be324b9bb8e6463976ec1b11aaacd122522a7f0706d36dd1df0a8f4938b64bc180a16acb5025494ec9c04de965192abc67a43a946893e028f6c23f9e346443733e531a20cf92a417846815c4f505838a10329e79656cc6d4832ee72ae7ecf11e66ca77fc4c5ec450503223e0f2045ccd28cff4f9b6ef4eb9b0d7f611c7c86533bb52407190ac5ed22563edb7f51191689d3011d5838c132f80b0459132546b3c0e968166f084025f9c634872ac79e9ebe953b01b138a2e14fd9ba19d38e33ead3f829558a439392f55efe810f689d68c47ae37739144da6497f0dd32932bd85326986fede31c2e39ea54a6e87b11683f2b8bbfd840a110acdbe1b71f882ff6502a78500dab83f6cbbe9dfa8b9f6e278f6c8c4dac919397628246688802daab5ac99137df1084c88f19fde1e2f3fc2ba8821e32138ca85caed2408bd9748df22636435c7d73da016397a2356cd76568dcf05a632dd59b90b7a05c2cb01acfc4b117e431b29d92b1310d73f95dc33855594ddefdf7cf83f9fea85e1b33b8c0c1300a1fe9bb4767f355219b512dd25fb3f2ff101511c32c738807dcd1ef2e456fb140e4a1c8e142867123f5eb3715519f3fcffde265273da1ab1c9a1adfb9f40b750b8ffac55dfd070a0b08becdb68459291a656ba27a11372c0455d1d43ddf3a3e1e951eb63684ecea1c67c422e9a93371e3c3cd9e179ae1bf00a5f120a470a608cfc56fa9e4e5d7fafbaea5bf40f1671507ec2699d8cfc4618cca658c8a6cbdc8b024ce33486a32cd3e853c9fd9f4124bf9375f0edb5fb642d64c82f10ec7e5fbf29bb60e95985bf1b6a74db73b752fa86b2c761cfd724962379c094c65dec5a2b49db65a77bdd6fdfad685c6daf147f7804384e39f5f1bbb0a7261c348d8708f1e00c3c124bfada955777a2282199a3a81738612ad08235cb94c892ab97fcd2a4355157189ec5617e2437012fcc3427ae84b18940c20f4fb470a4f74e57fa4417523a53b868fee8d83a02bfd714da4b8bfa2f04127dac239aec126113ed5dcf15b9f70ace70ff5bb0b6b3a8f530032a893568b1e47c8dcdb84c56cd0bd352b32390e4f7f538b40fe07a531da0f732309a0d4f9514506eb300d79fb44a7027b744082c0380e9b16c41204bc8ab4c95800a064be9d8514cc7398bbde43ef068457228c164a40fb058d5c8e10c7788ab1a3a9696ed475cf1b8c3e1f880293a6262b49a4e020c2c1dd0e21776d95ccabe37adb7a5c0182e930e7c688e7ce488ce5ef767e9baef3ce7bdde5b003f21863d007f85cdc985f1e52bfc7ab806243638eba6f45be1b3f00ba0d495498f728d0d35ad838d4224dcd58174464d4e972a71491e49e4f66fb737d31d2c38d2f474cec58a0773cb9ff1b163f2b48b882dca61d603d218114f37d7f6cf07005be9ab21fe4420d8e81f5a9f71be2ac6f842635a2900d4a54fa3daea46ad95657f073dffec1c3323be0dcc0358d115d9680e6ae3aba49dd9f08d1c5118c3897e65c320d552fcd49fa1e236da009e09bb6a2a751d6f3a885d546b8948b4cb1b3ca8b30e484098a8441e7d5961cfbc86bc9eb59d710b155dba9d19c049208593864fb60b08aa2abbf5dd4374f348cecc96e757fd524f2369ec6e043f2f44311fe580e761e6ac5f707139be0ce4888b0a54c7547ce2827cc21d4ca3787a10d6b99d6df87d094415cc628b1d528f9f2cd381ea699b62ac857d886712d0061dc1a193919927163f629d795d7cca009e153e934d5ff1109c19c0cb863c91eae5f136cdb0aa4f2ba09ddce2fccf83a2c31ece3c3b785d90d2c6c5dabc4d8a627a3cea0db88511910ce8bddb00144215f21909c7bcb1ea7117d20989a9e079662ff1f6393b373bfac905e026752592a70384dc232ef1a96cfd6721fb495107b9ec27e5e5f796d90fb147cf43eee79419c861d4980fa7d4364d72a1926009f564932caabdefc05f7fa80e30e5b4ceec2b3b905a3f2d1f8145f26322e97d62ed775e4b84fec06a91450b038ecdb08c4933d1a4c58c141c86b3c5a5971bdecbe3489099706eb387a2857f623f649ef3c50dc7b14ab27b80b140828204a664294f105ff03738599352b5278cd94ae64aa2ff93e30ae7c9d0baf9e405e5bc07d75644e3c668044da68b1e481d42135b4999dedb0b5891181cb5069fbf0cd09d4d730a7b97e00ed497a953f464dde138ca3be351239fa520312e76dbfc358e0b6d9baaf90cbe34b74b72757b4d4d3db5e270e3e85a22135d581de36ee958a59f6b17101f97b96855a3a9e571f151464d7e6a6aefef13ec2bbfc3aa1c5a5f4545faf821743909cac071e0331401b547223ddcd691ca525489015ceb771c6050532c8563293180c37ceca4ba85767ea953c36488eadbecab224bcab625716dc6bc146aff9958a008a2f8a5880b93962d810b52949513844644c975b1d8a803638a602dbb1f7e1c8a0cd10cf531c0a8cc259c84a1d4cc9e2a102dbd62bfd9678aab19525c865cea59ae1cc37fccd29c9496a8f0a90437a1e409392d39e6a85cb0af9ea83a18267b56e03421eb1177bb8e2782c85b984765d15d0460bbf5a13a0d4e29dc4d68e9f83375a5a32634a96f5f60c56bd5858e36729990c32ff6c0adb6d521079612e691d20753466ced2ae54fd4f7329abefe6d733d229ecee13b84f3e896c23139e85d979009aa6504c851a8541b8abb2a58786346690788ee3b9cb0ff6d113aa46c11af09c3d8e00625a5fc412f21b97f666ca94c62a487a17aa2d79ce30582a5047f570e6e11ddc32158c5f4f50065353954745e4da6514993e1db386e4de2835429505654226364063f678dcd07d7af9a51fed712c9363dd46d30e06de85891d00bf80237f2f24cc9c9ef953afe1801abc29b81cd9fa120fa523b0a428a431e120a009cd2396a8f51d27859fb8133eda9e7ad3009d218cc4534ef572a5f847a5a15425cb5ca75c5baf2dbe77acd2a27d219e78fa511250dbb3667c1f88a2c8b0268eedc8852eff81073120937f927d4891753976562e637f54468fc1e970c298306c82076132a483ccc52579baec74654023b9e67b5303256d370903d3dbaafa4da730025ef02319ec7a7c8941ea46f5bc2a7cd1c4b23309d57602ca4ca76574ed4c1be24cee866cebe3d1c75c9553ab626c27b69b470a14b13d76ea9b41e5d71362e38a76245825c8daec4aa99eb9c2aa775e4b62628b7b85dfed6a5ae2353ad7976ca92d527370318109e422885e4944dd733a88878f0b59ee93141a278db5dc5720082b0c700d523de939df77c92d10e417d1908e53f77fe796e2c58870633981fdf00921d54ea7ae7ee5c844a0627892fa97139eda8e8ec01d1c2e76fd26bb1171c5526c18d1b0e76e3d8c2cabb4a833abc778b5275ab69280ab98c9b34fab4043ba32bc46fa9407ebdb07cdf30ee46a28cbfe79a18ba423f1b4160081f5bac19083b7f4f049220fbba0e07fd92c08ce2a4ea0383d5ae777f01e06296842ff5d3aaa99a9e9d50c447eda659f8e345504cedfcb19b9832bfd9d625d760aca424b3557e437832810ad154e994e0cb53de12018091ebeb0b6cdb0b7b56e647655a856abc217e2629e018c0356bbb6fde42f5078a29d15b40b364bb63679ed6a2bd28408b2926983950ff818cb7f2dacb2cfcbbeb41dbbd6a18351bc2f317f477fc504fdd3694d02ec046b9b01f0ab11c32caae09b7ebe86e0370e29b20bdf3891c770b41a8f27daaaf5a7baceb96e50b41a991a829308908bce34e13c1bcdd297bbe0eb296f723bb89b6b4c4d91c2d6577406a2f69710586cdd872d00ead962756bf9e9c98f3da20151e01bd69748cd93f433e0467de484a6695ee823a5b13348825d524f876e9d3d7df07005e71988cc6e8a2bfe0d4d75d6d095539bd9f77e034381ed23825a74ab06a43bc47d68a45574cc61ea78c442972e27df0fd487c49b2a70ea41fc12cab5cbd2e1c0b0365bd588a168ddc2b271637e0dc08443c45c0613beddda16514ee2ab7606b1550101b51c99695d50b7d308aff9730e53171bf6ff1177883fa95c82ee78858aca58b861746dbb6d4c6664098094bdbf551d9e0f99f191a38259fb334685370b960c363907bb31ad29810da5933e2cdb32bf9e0bc33d1488aac27976913c379683f0af67fe08e1ee6dfa5ca19f8a17d6f98c6f64cef4cb22f43da6fb1270aa0a47104b7de0b830b1cdae7b905d2177f1f8995ee08a31cc91e892636b1894f646aeb04c8c5bc22938ca9dfc8a8476d92ca8a5dc01e8629cd1363d09919c2379088b71fca423b5ef80affd2cd62a97d146908a61fa50cfa7a2610fd0e8b9eb09049b563dd67bd1db8dae5a408566684b599ca7b7ce0c2638b768781398b081f12b7bee4876eac0a3cfb1c99586853483f2a40cea6fb529bc4aeea940ecbb999cee266d8f91f333d0e200043d0f53a550f22c4f348ce6e71a0f8e6380b449e17fc992f15c8075cfca20343b3d548792cd1614070ab80124d86e997f642eab74c4a04c13df891df94e4f022bcfe01440667049618a8ff6a30567b507ed9696b4458b63d193e931e6c4123cbc92ca294081824be4a0b82a35026e3220bbf0206164cca159901d9e0d232186980b9fe5b591c114aeb14184245e53db6d9441e906e1d780f11e8770075f43ccd144a85f6854ae7c59891f380606979a46d33db82f11667faa9af03fb961f7371a8af2d8713fd2674f7782f0d85f65c68f790da71e57c1f87d9910a12cf2867bbc2fa07d32d33b797cd3b064dd1421ded94a70612e960d7726d177d2557333045020878cc0116acc46bb4fc639a71bacbefcb12d9cf17689cb10c17de401fb986f28bcab9b3b4dc22b78a4b88e895b9bbfa598a10d6a293981a01aac351d034519e2b6523b1ab5e2d85845a0ad9a678907148d57ce05607946d7cadefac18403d09f6717c1220402d1408a11d9beba25e144a81d326b6a82bc836a415dbfb0a04b1fac82bfb49fe4640c7107661308770cd4672fd03cf5fad0d0368a577b120672fad8a62518a3053234834660ac9eebe7f103b4de716966b8fc6aec6a9241531e9872cff00788e968d0f58728be599cbb41fa75b732216de60b67482d98b90c3769e5250e6adcfd7d7f0de30955b62cbbbf816a7dddfcfc15b58d0524a4870587584df40d1ed544b6f931c587dea58006c470fff663297f69886aa5733ce42e7d28743dcd54cb6057a096cce8ee170906dfb9184b074d354193a38af99196a72336794086e7b488cbcf936ce0fbfda594bf342082ce5dfbf4b69cd1b7cbcf39fe8400a3e90eee560da8c12e047c3746081a1b0df3ed5b8b44029f0af18b0501fbfa123292fe6c1df27441284afeb412c0a850f01c5973b0c92268aad796ff7cddcd0fabcacf3039c351e613d177731388b83d019c256451552d63c2afe7640c4eae99b4fe570b5cb6d0ead568d90629644e5e77fe681304f0e0e7a13208c2bd6614343c2c17dd2202764111b4ab80ac3778d18808c35fa1fa55be915a7cb8f5917fd22b8ebd3dc0c6dd17886533b9e0d2ad001ae8a905aaf3be459179ece894427b2610879798e06c768e7e0ba3155f05570882c22fe724eb67d3a3a4560cb7a8e36c1afbd1bbe6683c215f355abe1a6522929f6635cb4588023fbb83d6584ebdb4a09dd0ec3218069ee04429b8b296b6bbc4533e447d4cdc7023999f9f7bb3841d9b2f43836a36094a5fcb6af692b0a6fcf6f75ee05412b5408dedd67b89916f55dafc07191905ed985ee2116d7d20a271f28e904a7d58117d0f5b5a16f7331087877f270e9f77e7a7ad0297a38eacd42558897dae9a45818c1c4c1cb9f924ea19a182861e2ccc74b7149d22645e4fe1895bc9fdc7d2f5fca3ebbb8ebc9b6deef7c578fa0d6a6aa21b6aa4b3f9c70896a90d4143e62b3237359b6bac3f2e085586768a360c492510ff3f02e2336174fa51caee98a501db997d51251c35b07869162b4b8e504107196d4ed9d57217f8b901458b7676c9ccade31d99241a8c4869f71b1ed46e8200f0c861f212374c731c6c2a0bdcae2f43a65c53b0ba49e3c6ee80d6b72b2992838b28c0e5f9afe3e70b34fae039ceaf046e380e1c7311a62f43e3dd4438359d0e5a2341b17bfb3bbacc12488eae55ec91688602941180991db17a973512bd1e74cdc4222f754ad5d5daaa489013ee1e5b3090434b9ba3b6fbc9e83dc102e5e38ab05fcf281998bc81c23fb8050c745cfea77addef6537bf5750114210208025435040bff4e7f9863d7869cf598a07f4ada9d32eef59264509fb2e263a3982e2733952b8faada522dc3b9e29de2f85db07ca103544b35a95b4e815ebcb140f19a53a8bb5fe14cb9c22b62e18a4ff3ed332de9b4850d08aae2556bb39239009802eccddea4b62bc55c7181276232949cb0184aafa54530c588346ce74def3f401e2b737a9e6595fc89cce572a21201442391a08c4859f4e6865a2f281de16e2edaf823c34352e353a01e214099014430047183bd96f435d271cdf96d1b7564daa65302f67de985411da189671294427ccbd510f9ea2123927831ad468aa823b2bde0fbb22c06313de45b15c229131b1a10da80a5f1347c5b10fed5fb9ea06faa767248ab6dd4bd7e1db384bfa9e6e9f54f19f3ae6af65108fa53a362044498b0c996fde5c8c357114ef71ef34ca81bbf09d683ab53ec03b952a5599335b76d945e0e173637fdceefcf22c22c9ffda4aa1df0d75d4f89920118c430aaf812006b64323e8713d8594adb872691229bb0c509ad810a7f5e19b2f15725491c76e6d607f851b1fa3ac79744d8f83905441ccddfaf50fa229595f9ec326e2491f897607c9e3b97d228112218176fc882f4e9f5ab6d3cdeb70a4c1d55586c0d544b048732b70c5cc02c1413764f775d54abae534f02412915254275c68161459d45a2a871c40da69aa712ab887ea28541efdc597efb2dfda391cdaf86be9cfe5a2ff4dcd34083a8011742c4df3acd2d3b85bb7839d3dd30531559594556243c5a20f2674ab8cb69012b0d2ce3d283e81f0146dde4edc4a51d55019a22c9fabbd61ebb21ac197d026ffc3211a9a5a13cca54515999fc2e2cb32680e6b62fd7e11e0f07d54f260857d71610d3dae91ccdd8ee0365c05427df115c1457b5892c665664d8c4f292eff25b0c39030d212d1fcb58774a7be4331ee81efa742b9f3b6bb11f4c12e7872ccf350e04764184a4cad6deaecd1bf346300e5aa20eef95edcde5127058d2d2c847eb7aeed489de3a406f448dafb701732abb5a26ee5b32775cad9a8bd142fa3e9fe6afe2e8da07fad9ca6f4df18f70ba9c1fbeffe2b7612c54e9f2884b57a375e695a641bbee48a1640d7874cdff8c1815f9bb8d9590ebbc162743ad27662b8f5d4cfe0d03ee636403b4ae3a7918e24a49c7386cf40c20c513eaea2176ca78848228b3a48529a09c80b06cbab8bd200e1b23b2caf17c4bcdee21d49618ba18b4649d3702832dcf057e60cbdb83505963ee8655f321247a78de9b58a2a237e6551beb60b9c6461a937554cc7087e87b23c7f3cfc09f108156a671bf2a081994864b1b0ff8519c14a0cf2f3e3a35cb0d5453a73a189acb0475d3d8f063cb15ac5f5efbbb85159c6ec930b63e7b5d768e366ea676107f35999fbd3a5e2e080eefb0a07a5b9c86e759696b8ef83c732bfd0396e899328a28a1f1baa717375b7d0337f519608f0b1050880cd5132e8c95e856dbfd2134997196202244da1368e9e8593933d6403c1fe47d744e2e6305c83651c0f6f1a750e16a3f1f7b2405c26ad7dfbcd3a5051343c7b8be40f790c80255f11b7a10702c527720bbb25c925574eee8237f15082da074ec6c334ab655b619034dc7170b7c6da0a18599c50aae1ac7bb628c7921d315b2ccced41525ee73df50ab44e592cb2d3bbb6b6c7abc353849c6ab8960cd6ec489527efd9a0ad31c122e26d53ce01b9300cf8544ee1c78e1803e6d2ad824e8539c9f94b5970a7dc8c831a3e508232d9ffe3b99752c93cb27dedb734e8985ec14c6b4c82512560b470c2389c0a70f9ad0ada819e9bdbe8a3d64d58bde48bce7c00ba14021cf1552926aa08d081d886b911e712aa3de7d2d06aec8b7feaba0c72c523d8fe2bd407db16cbcc99cb907c5d680b480243a7948ab51cfb647db9edf8a3b3ce4b4d98f4f94bfd3999b63f76fe7b57958cf364a6b05c4e6b159cd2e2955e105218e014825449316fca606d446d6688fc1758ae118cceb3e69090da9f8690406064de13190d9487dce2c940c3eaf1af2122d08c48204b366256df2868659143f8c0a7c966b81ad3eb5508a95037860f75a18da4719cadc10366fd149093c30de56f57ef7f1766b4b88651603749431a0f57512eb3be4764c29cd5d68d93075edc1ff4b6555312850f96046daa0bf7504f3e83d3ba774af9923e2cdef39cc07180efdbc978f5f44db90542f48bf29b10c20efb3f73cef39eab749eeb6f5ada478cff849cdf8a928f4060f1b98c0c3c6026070739de26bef2dadbba2ab9e22218cbf86c354f799356fe683b32a0f861bd62e743dadbec9596eaed557bd56c079b5625824c51a4c4dee65c3a3d035ceb746708cbe5d3b044926819fe848eecaa07b91045a69aaa0aff6a473f5eb2308afbeffb99b9eb816fadfd2f83d98392260e6d688db3a35c372f3aa7cd91cc80796e64372f7a0731e248b2e88d268789ac01e757e37005a3c979e4ed066a6b1006ed46883238f7024e95d4a28762d1db023c85d546dde688317d0f213f7b2e4cb57563b11305bb765dfa1864819b4487345f31ce2ce0ec5457079db6b0294558c9a5bf3b589565bf01dfc7896d02d73f4d21b3f0bb449cd6a81dac674d07a4097e6208f1ce9a3f33cad3524cd9b1a7a83ae99d8c026b9699a78abb01200d4dd4749b310e8179bb8b470cb84b9b0cf10b0c360d61cd1c8f00ed7421488dbe558491f9598fcd87783c2794b501a40eee09c1d68b18cf391e757db603148f8f6c08098eddbdad8047f71d981c5f047ae4591e1036a56d2c3e05b31963eaa85fa7cfe83527ffbdfd3127496d28795b12861c4c34e0430a7243485e24a53c916100ad0542f8fd4e911a72ae166102c40d9cd27891f14406edc88e300619d10948fcf005cb1807864ac5b0f7f428835558b7634fd1ebcd677632176eb059232c07ddf12c03c969c34880f60f7dfdac395ec1165045803ec697901a41092c85f83888d43921dd847036eb14e1b05d756310630504a039abcfa6aa816a38541fb91da7da5b5414f575b4e70873d8eed13b6f316deae1e6463c0aea19e55121d15b15fd4088bb239fca9ccab15d834e847faaabe20bdea6a57a8e4212b2bb5613d6f329ea0702e443cdb6261c3cba1940358f6bd50b5ff264f89c050ab0e078803362211ab8292cae84595c4c60241ca916ec2a490b4b51d99194b7b0e635f074fe9863e759e45760cd462ec9806b66cd3872e3c282d76208f13f463c32a92ef39588a844b2b33da6973e80a098905e98a7083cd4c60e16e7e9c8d9c5451f70fe80de7ace633914a1a8276d3333236ef5e48582197589fcc40ac1513a801cebe1c2f79e6329830d5c53d8372ce8b08db2c8fc038fcce6f250f66a654c1e063d40b00850a75fb1a26419d108b807c929599377de14bd26c4f2e90f5602a6e1a2a58cc438c465a6f04cdbe4f8ba9a58e373387d850d17683f1a455ae0c91befc59d3953c242061ae86642247dbd4d9f05324db279bceec1911be818b95014de3658c6df0f24e2aef1cf98704941d092c6c852c653edae891d420e45c3a167cbeee26835af4320b83521256f9042ffe1f7eaa011aff88ca064f5754c8c315b87163065e0f436acf4a781574f4385ccc4071d5d4d62ce4938aa3b118ec0b22f05a5aa52160fd0014f26526cde41119e87ed912c5cea1c5d23e9d3d8b78001c29f0bd9ba8873bf75c5094e88478c4fdfde61481afb84f0088b5372c4c4ba23ced509b65b4e7a5f0c95f4e389fbd931d0d9773d293f76817db061f7317bc6f1408832f28a23bb5709d7881c62298f799452f64b44718b7835da601d70dd2a8bec11a99192ed62d5eb9f595fe365b07585d6dd93e2329ff3f7df1b13d61ac3abbb40ac97dd556fb0d208628fb178b0c1c039b42c2416333e9f165a4c994c47fcb13646a7821f46972e97b4927f9efb6174b6676dcc77dbdd9e58a32ebea56c7e1f42249d8e1769207dbb6d5a9922d3dac39cc9303980697c18d217caf02e497c05e8d908c88bb1b54ae1ccf389e55071073db89f3a30983c8015530db6e96b841bd2bdf4057570d743554bf9144091d91416219a866bde805b22d81f2d340c721e65481766ee4849ff4130555c2c2cd3ac976e6622319632d5edf0ea53f213a2593320b09d031fd6d65bdaad8224d4d027d559d4d35aea42336872bf77f692c07d3a8082f42a429b2c910850e297ca018354d465b2cf40e9cda65fe5f9a4de2f4929b109fecbd26bb99b795756ddbd7c0c9c67e0b6ee46dd114089110e8ee6e812560acd538ac1e758907cb1e9f284476a910b44bc84b4a3bd63137ac5fd5691e9010d0d1e2c0d5922d085a5014ec0ee63318188c4a0ed6e034acf4e373f657fba8b49d2186f55b96ac0ceb54d855ad83f7908ce28f18a6cf606de9d47e3ee5e1c66b2e605689bad2271cd5b80b7c6f8afe76585e71221292e48170f4f3ac5006746eec2dd48c89275ab116003f01718039c42e00e416d3ee718edf20fcb64d11d01f386e057e653651acd293ea26c554e388092341ca8d237be1367464bb864012b469d8393a749429223a156bb9790a8411ef26532aeb561f7208ec9a34c667b739462b19779f3d5ab11d6cdf1230f82c19a42714b2320b8b342bed9bebcab0408336b62d4d8917c42b7f63825e4169b4636b7694216af9c95345874d6584732aabfb299a8f3ea7fa430d922705a92ca0ba68ad1cb13d9c43bdad217d4d5d75aa9a4df71d7c93d0e6522bdf83461efaac07787cbe642acfa5c017062a9ad3ed1940e977a0cd527f73d5f0cc396e35e98b68052d9b13c7881aaca393060c16ea2b3294c012043ee21220225a470605cb3a9b1c0746414461464b4f05c1f24f8404bbd740bd803b49648269f3a8295e7a5cee6736e7c00abe91277165d2a32043fb2e251a90ea7a1dea66416bf4dc13a5bb02bfb692a323fc45cd1f63c63d69634090b7de9f20f14ce006632701cd617772746c02a28b13dc67d2118a8d4a1a2df45b3c607451b34710df35fa083a17afff7dc214c3399517cd0def223aa42ee1e5a7f60bc0d947fd70e9de6354529f2fdd460664cd2208ce2c5f52a92be515049ed6d65d93ae3119356b7fef9860661bbc1942e9decde3b5e6df168089812962c20c37ad946254437ca725600ccdd123e607141552e6e60f6c3f5786b6d032459599012ef98ed2106ca8143a7a1f27e49741df8c0323d5c9c89865f593a313a2a3ca0c61ae647a0815cd94faf52981b446039d42df8640b681d281bb707fc708564201a3ede254dc9752309505752106e4ee3eb9d409b916c241070879c29ed518a4f229a54344bbe50d9c1b1f8b85de87cd6876f504dd997ba8df68d293bb7a5804e1ab18ce333689420f204191c56054581061ac08e6105c33fe854eafb813681110fd324b83ac9b0ff52e7be540ae1ecc5c2f30bee23119b8ea0dbbc4a30576167688fb1b7a9b4bad09579861c6aa94845db0665a3e24c15e2c2b90a158ce37a44ec289bd0b6e9818e14331c088156b26a5964440605928de5f000dc8a17b8317fbfb6fe1f174d48707fbcdde69736a142697f2cc635ba26b918b6558711132473915c8f14fb42123d321145ee45610b91c69a24b929d42cfaef863109d9c1b1c23ec3c23cfd6015f04978441e61655e8f989e20c9e9b0a208a625317693db83e7734337c0c7db039f5979d4b950628f8185a560e03941c24b9247462b3d1438f909e863a8d0785d407dacfb4b410e2affc8a89d2b4288403cb43e7880a4411a1620565644a31a078e65f8e9c02c55212f42561c6b37c8588fabaa8ab8088af43c4db1e8a14c53441b91307d4a63c7c6e0b5604f351dc484f149bb3963298f864c460eb8ea206a5238f568b76ee695fab0497a2d7577edc06b83c9b9148d91c05bec413f06e37f366e4255095cb4be0be481e16c10dd14e286682c7dfc753a464d0ef3e34b32685ea73d3d6d6cb003559e5ae48e82ac3dc189ae11382b9e1bb5dba492399dc969720dc7c0ae6a606d14d8a344659ba2149dbdb36ae4d0ebdcd3d40ff8e708366956b91469216fc3b3b5d63ab46299c40b8b9c3feb2dc7b1617bb151e7ceca713adcbe4a160e61e07b54c8c90737a716fc689605892181db872091d4b2a990a9ce1bb1dabd62201a60d09054627afdf219cc11ff7177fedbe33ccb5f8eff2a175b222f0c68993866da20e281f0a6df9c5af00b5701ca70a2d1246092c38872e26139d14a927960c0525a7e3c8afe922da6dd2099b1e1650f652be0739d731f817e2fb11446b16fda64fdaf499821f65d89738d0acf7f842de937ffbc747c51bfdc7056b5842b84ce44e9e484f0d77a3e0c6bc057cc922dd559b081008104bcecf35c1748d67b0715386ce20d4ce3fe67dca21bd42f30d670f67d11e440f5d36a15236e19770690c9d803a004ee479b0d582e46c621ea4b3ac623c4e6f6ae8bdb2b165dd7efd15582a8969d72b9cd3279bede2933c15c15a0132ec74aaa808fa50bf9c6250e82c0b4e7950a68d43f6bfaf1b4b324c56440244302d72855a0d93a4353030600d7db8908a0372094bd9b6f3633242bd0dc328c3e4f4fd500fa71f0eb0dad5d3c59e324c8627706e5597b34781052a859947b27f26fd37a45b1413696e9533e052fdf4cb26413d331217fb0805eec3e6bda1c821c4f45a971551c706dd16c95dfd3567d2f54b93e80b65250c64e9dd3705df1ba12a99db602adca09f5174258141b5816d4644ebd051e38be4646b4200e83d44271ae9d6350da74c9220e4ff8d3b256395abf5eea9c670ec16a562b0248294bf53dabbeb0b77b241d66c6381f01aec6d2b79ff4f24fff0eedb632f5a468b5dbdaa5846cac4645dc9f3f28a93c00bfee92dee1572f1ef35810f6741039ffd70d4204399f235a137255d120793f2a9bc2cfcd60b87178a83b37dad43e2dd0b72f9da0995c40b272861608f7c8cf6a0201219c5b478c40e2f4a1485f5d879954a27d19f2f4ee1f9a1d77d444752dd2b0de44978fb119bb33b128a843f5a5c3066bd92aad52c4e39c51d0f2fcc0824fb1ff104a60917702e2d35e0706461855d855f45afd854851e938cd0d73d68242d05985972b988041073df76337422dffdd11f28c2071331beac38991b52236513093254d8c551a8b656443f8df90638444cfe9861e6c852c35476e31ca74061e60e0b58e18ab06240eeffa2add0ef775d5090bdf8ddbbb18184585e992d549e3ccc259471daf62ac9b16aaf64fe44474b94f699fc14f19ace9b6007352eb85b87e711e94a8c8f767f18959f82bc58e49d8a2cf46f54dfe52016ec45bdc2e61d3c7a41ed790c7cbe215f80f89c328194f7d4c74eda572d763fb12dd9599686c8c06c4e575fd7c7cd795c7efefae9d8c33dd28b2491b4ab8fcf3165ac16c959356c8acf523653863fb95125fb869f79656281115f15a8c120c7b077f47fb1a27a434bbcee80ea407c0cd2449f4778c3afd83d9645aa51f31272c1e8f73bbd6997df1cee4bc6141e7636c475be3e06b42d50e7041544716fc79748818d82d8e42c06723829a3e3e7d4951a8af08842f44a264487b87b9e0f8fac4393798f18f164f2fc647b71bb722387956d488e857332e9cdd64825be290da4100bec4e6f6cd09f0d0d1c741cd2c9b44abf89ffc11316a65c1932cc41f1e975222958b7a588848670dab15ce96494d1a27677fb499701b937f516061404cd43a8b7bf54998cc2e39d4312d9615e524dd01e863b911b534f5135de3677ceaa8a56ba722a9316c1a0dc445ee4965e07ad6df722d03bf2824c97b30d940a5ebe1f5398df0f3c0d052df8cf5249ee0cbfc481adda2c5a2526a8e17e0b0da8a28eec4fc345d4a5a50bbaae10811442977929e8314e7c677c843114f81241a1132f42ce8698c16aaeab9152507f771548e2f91c79d64facafd066c4d44b879b16365c982154d9a46946a6b7d686eccad1132bda4959ba4c8b8b8e8ec7ac9414d34d5c8f5316a012e37f59138aeef9253b77758ea604ce495b9218c9527bc09ab64f25d9020c3243f09e8d4b067a2def0ee4d1b1288b8a384e6ca4299e4369fb10f15f6d7fa47ddefa9703c99f2b180272fe0108c112806be5ae2e7c7f3bf0e40f02e9e6f3e8f8fed2d9d24e98a61c758b43e26856d850e4bb985f24de5dda16fea9ec032008c13054b6e21271844988fbc26ece7257ac369cc0083c808923e838f149c089c08e803514bc74b2b6777758dd916af526605613413b448170711ae8b6098e241beaf70e58154245ac7f943be72c045c5222392e66b753cfc217102868a0d68b45408a1a4e280b41ec17a9c0220fcb400e2188417d4dc3701ff82262b8f1cbde61972519009359f14fa0db3006e2c88f86490dff247e231a86f6ba5df0eca4d1395e1a2c7162219ce53fd78759cea99a932313e877fdc081ca3e004caa84c6491eff1738c9e948a7222b62be5c3e23b0cb1501bdb5dea7f745c401c8096f2d9d84af4f01032c052f0c5dd9d6cf723998623df081553ac9f7d40ac26eebbd7a06434bcd03cdfb9849abfc10339f3285faed021160e4cca7d4bbacd5c7a042f3fd54a8366372c85f515340b64de23ca7999821f4610ffdf3528df1cdad8e0c1e5182544dad608a3f5dddf2e8f1b3de039f5ab565bb9d89aa6b3fd790cc6829c9b9c9f45483b74e96aaf087fa6420a4ec374eefd8932fda2a61117f8e3bf454630f8502caba47b8dba1a0c58e8a4e08963e047eb68c75715d7023a7077d24b267330b0499a5c7d44ca305ed351f1ff4bab974bfa90fd45bb8ced9b56407b306aa29c3f909c39630962736bb8fa13e8492c90e49ba3c83843f84bf25bb3887ae622c280d450ebe5672bdb94bfba207922eb5bcc85007dd18e25ec710b80acb0350d21fb03048d75fb2fdfcc72467373b3d5ffbd245b6621b189eafdba3d8faaa91e683118088bdf7be45cbb5e1580ed2786e74367287fce3fde4401f22ce3045bb7676e6597073da6de137e99bb8e3462bfa8ef9dbbc0ab6667d97d0ebe982e77a8f8b13b11aaf17a4d2b3b9a7ac7339c5a4d2d3a62c350f0359bf21a086721033d22845fb8f1b62172cc3d32693fb4b7aca2454f0393f85e9806d8c1b01c5cc326cdf2951930d0450c877a0ea65c50e85e079c4caf16ad548ed5e6aeb700429fa9e2e61caa414d17810ccf48abbdbf898b403840f61d356a064b7caf30cf9369ccc1a71b75929487f92b4348a110968747579bf0bd73244a252b4671b77ab5efdbbea3fc7e8f10853953094595000c802f50241a4a0801a1a6808709aee775831a18ad3e29b4dcf0010e3ba357691373e774862f4757d2bbc6c00272b37c743f3b14474ad3cdcacaf75b39d2266110ff997877f089195936de834b82324ed23036b9ec21df051c216392064e9d07b2f772030046f0a96a1e5947fb786d7e34f1b3bda3b0150dc431bd739475d9878607a67c9d2f9ea2f8ec395825ecc5ffe535b0840389dfd0ec866ee5874a7c31b8983833e3639ec2db7838999920f4db196fa263e68812a0688a82a2ad52291ab14f9989f2b8ac4ebd53f5fb8058ab8e898d51d90367c46d954f630dd5b79777cc1b8e9e509ac3fae98e618034805480d2d9f18f2069cd89dc3c40eea8847ba435f82677e1261a34494c173992cea0b5e38308ccb20d664511a6b075c7c164ebeea81ccce21109b0accd1fb1c33e809566c31cd76f1cfe4da253cf725687e3e4382459b23145609dd958b2db5c0a09104fb5d7705d57667da4307f8fbb7c30610b72d1df9caae946022d52eaa7e2d2fea4082fe1e9415941959f0360e4a65af85602e497977beb2fdc5cf06d9e34ef7927fd8d10d425794a83b36a041f680fee213106e28a1151e03198a92745b25b846f80f8d26a720e003e22925ff3144f4c866a0b59fbfe97496b0ea4537d3156c53fb41da14da7d13c432e8ef2f213200935a838f21ae21b86a994c8920a5a5554e27c41d936f35d82eda53bad9ef1b34881372149a9a49671ddd38a362ac5ac340314564827eebc4df572c8752347e5fd34f5261b63aa75e179add02cd3803d63e56f23027575797707da787fff15eaa4ec13f32ee4c47c8346c155314ba6718adac545035c25c23a1422047dc63f58be6123492bdc2a4adff8e89d42249e21104b9ec1efea03071ea1c028274ce8df905964ee483600d17dc8861a61e7f917c1208b93d3d4b06af5881a05b05cabd5cd46a00ee33285890d4d4f1df4c083d4101e75d8f18824b422c1b169d6cbdb61cad61e6d8c6aa6062ef42a3ac2143d7843f8b2ea03948bf2664f468c81eec45e29075cdb0032fa573a5f3acfc730bf1de0e4e4144d0143e552c94346d45b06408543771456a5175aa6990555394546d039985a215ccec894a68e77b50b020900a9910c68a8aa4c23e28827053295196fa47345aa4241c56c35d8a86035d8f9926088938d7d55802bce8dc3a3e18c2c7ec881595014301004e2c4e7ec8cf9cc6045d5206f218021b035069ca25842795005e5920d9f13a8c47e5cf99af78300bfb3989d210a43a1a3efa78733f5bda998fd154cda0c158540e2360b0d76a930581364c2081d41e720b7544a3cfb0c207bdc7399cec599c017aae96e0b9146ac206c68e00cb33c97d33587f36d4e953d83d883080d2d2663bcb7c4e8525e5587415a9a2c5ffba256fbbf15ba92217db6c715a2d26110e4b4cb8bf9f19aa2561f4cfd3e2cc64306c52932eb03163822f5fe4eaf11bf9fd9aa8c303ceca8a5f0f199c9916d8a3c9fdaacb6176bb1207eb7ab821302fbc01923e8514ba214277460e7cb8a0cf8363ac2266d82566991ee0c083022d21d8c7b5a0feab0a44cb5f8cd922971ec378d52aa3dd1551e67c77590adc8389c0a60a62b8db2dae742dc009296ef6c1394d6b17991c9a93db8079fc191c0660e048c6d67d0891970ce5fe0d44636d953d934a13c0e25e800a64367beb278a529b1d06ebe5481601a44f7e34610ba1e38c76f8f6893afad3c2ffbe8476b3e7ed31eac4b732d036db6ddc27902123718a404cb690154f0aba73069f9e1995754f4e4812ee24f9ec57b01eba274280e48539498778d5dc3a22b88f9955d57be9fac5f97deb48a13377e81ac9b49b31c19e4d08f96943d5aebb34782bbe19044ff9009c8a56891ceccc6ba82009428bb8cb109c15021308b0892bf133e325cea36b2d976929e4043a6b1ad1751e8ec205941ea476bc1996c7855a271df1a65d638799512a588e2495873b84913c2144b794386e270de48ad35a32cd28180d80bec3341262436d8a056e7d2aeb4ab012e578e2dd1c018458114f8d04c661f8062d3e9bb2f074a7308226b49f0479bb15eba8a109f2a1a9f1c7ddf18cb3832bf821174c096a561e9197c00904a20a022a9786bac7afc9c8b84354c28e59581fc63fd40f87a8880538c5bf6931538526697ca6a08234e08d30c35e6bd35a510972a35c01f556cbb537113af0f8b12001c4e04a83ff1bb358fe446ade836e284598c82c17fe0cec8ec02efb004e8b03816c7e76ced57ae49226da54cf81b96e8fca289242f3ed45f1a7d1cdb761e36228152c5acbdd5f1d0f6d7db04908501151e7ee97d4fa619f4243b128214725f6fe4de8c6840c0fb505aa432097c8d7b7b1e53dac96c4a594b92d02c7f3b877a04fbb99994ceb62fc21027ea0bef1e384138a91049b9351cbbe6e208972a42af427a6d36029069f6441a7c99d65122b01c3a538e283c4440f23f00594a02d47d33924f3cf711fb7fc44980be957e86f7971c89fe611e0d229196dabcb195dc7680088e968d4a8e9c94ab127904e8a67b3e868d51857a58db654deca908e686328e0e945cc9a6b750d5288e12893b25e45f2edb93a3845961308e7899a74e135c55a27d5071e70e0023fed5449a1b820f904f281779d5ba6f9ad016e2cb364a2f6261b3a3a95002955554d4f553dc0dde959bee28b7fe0212469989808c1a76ab008560c13dcb6cdc53b4fbe4f12cfe8beecea026ecae4c4a6a734f7c2fc98d33b8ad35dbbb16ca8160255a72b46735e76e681f5ee1f3c94057facc080e17ae304757bcf678a70376779bc3627c38d23d75ff9d14ea138380ab67b231e34e2540b575196c77160cbb3e15701a4a41b97315edaa1e895f9099fbbd8e4b7b3ddbcc3833ff66cf76235340e564435bb49a52981f179b16ef1d65a3fa708ef4c89b03a1a3ec907b2fcb7b0923141f09c5a038c080c7d0e88ca0944e9b02810091f7fcb07f27b5b1b5a656f5a56ca834479898ba573193c4376cb620ab423f273d46206423542043922620c9fe33b6e75f92a2073568e4ed89ad0a4e95f433b3fcc88ea68cbc4eb94e8293e25e28709b190ac40f73ffd29b2d11b986e58c8a2d49bc649882b76e53923be7546034e81f4d67b2e9b33cc872eeaf73907afb1cf590a1e30f278e809b17c4e389961ab4aa00dd22733ab9b97546a9550f000b0e255829bb34c37f49c77181d86531599129bea28df3e42c4688a86816f0f6054a70c470ef35f1487e7e1cf191e57e3c3013daf05da1aee83ebf2f109612883c161eba2c81a92cfaaca776a0b1ca22a801b346a0ad5057c448295e012a7713e3d01085c462596921a3182a0fb95a6a7e866d28f8933e064739aa6442a09fa1d461f24a1a50fe32995cf17f162f5d659f720355ce965cf85f5ddec41850a2c0051a7a44828483a25ad0a116bc053dcdf7ca90506ec9a57deb539be999ea55d59c911b127a1038048fcd467423e8493bb283587a9a6c948cdb981907aadae6daa82e0bdfcea4ddb799cdad36671ccbcc101f0bc9dc54ec5930b6de9c05d7aa9340e24724765e340601a9dce2879fea8e3946d29800fd2c26c443418f6dc87c688362d45b5b294e9202c7e47e9d448099fc8d6a997c6de2199f97c0ff38aa5adf026be57824c14ebbefc99485e34a2163a5f8a9449384ab125f1b216236eecb37ff3b971862efc79d574e41d242cfe30cee80062e2238323fc08513b03f123468951e25a099e8669a1f441f23b352cc6a4061ea827f16345454280cb04fc75e71d8b20c3104016b5b2a789a5fdf7fbb1e467705cc6e6fca6a5a84092b48ee83de56eea22d11b3df545b19c92d58c0330c90d90202e6f6701cca28ab5f81b080d6d33ad6e9bf422dfe8445686e3b7d5970a888d1229a51d5480ab435306621a5686deafcfdb41241dff25e6ccb3b43bad7fdc962d6df54327d956ae45ae0f81dc81d476de4a78df81044880ace9f9578d7d75fd5e9265817ad711eb777b0ccd1e7ab00065db3f7220a0706b044c0c1a7ceb27adcaa7b1db95d2510902457d18a44247af42a95ed28955da32d16141ef01dd177697ab359369a2045837d9398c148423951c1615ba04e80aae79fd7dfdf85496b8b21b4cd1a105eaf4561619dd8dc5488dda707951d1a9e6e2000811e1fdf01c5016a9e19e558740c45c05ae7cf96ee042fb623b9243c3a095792fc5d2377e667fc832e0ba34b83904e2515433859746b36fff4541f807ebbaee278b947ac83029f7d26f73fab82b4e1c12aabe4243ae21f9b515ab886474d829a664785126a2458505e5e7090aa8530e00a13e0ecce0fd210fd3c2b190ee67a46663551ae8029af843cf66b14b4687d0030fc3445c0f35e178fe1c8a1b5fbb9b4f66c1a7d5198bf196ba8ac562cb2d122b93fb564cb712c14bc2f1b0d1c7aa24ef0a332eb2674daedc90b52d93e91b17ab3042d7f8a79d9a45609477364809a83a86433b350076cefa9c4f8eb1c02b21ef60d7d26ad4c046b2e1092885987f4d6ae504ced218692391a1f429048285e4c809d6d5dc1b7dc89abf02ede69a8ec3784b55143d8219ca6e92354434dcc7a9899b956cdd6739b1a164e2a001def55c87267427829f2ff3e107026c3af12e43e5149963c1bfe18744739c624665c61a76149cf9f2d2a4f8f8b106297554f024b68821af22919b76238047c827a7aa1d7c4952fd24db41907609ea78b3c4a101d80c80b0e72731bd16d5789440186d23526ad0dd8948c4189cc363e095e540a925a70ee91b10038cacee974fa4296f4f4ca88901186a12ec033734a051be852b2c115325dde20461384e3a60c8a883d7b14041cd123bfc4ec41c2a0c544cc496a1d71758fd15dc57c7ae7bc89e26e65827b44472eecd531b2964343629722b5841800f4530006eaa96aaf84b051bc6475113f67c7207111d1fe8a00d3b0e3fce0a4aeec30ec43d637218f7bd01b60f33fbce4c32ae639fb2446fc699d4a9d2a6244a2d6f7e4e1d3dbea998ed709087f76bc6bfd182ce4569e281de0801f1157fb693de5337722212a5556b4543c3ad94e6c317031e620737212854dc4eb7d10b41b9596d70d5a3fdeebc7b5c538dec84b199d2ae6e5ecd98a1310f87aac081cbfb4bc33143dfb0dd4bfce5ba0889ac02d11847c8c54853405c9c5dffd87b594a9fcc448c994438515413ac5512a341fb2e9e6a7fcb9bf53c66ea6620d31891e576a80b8533a0d08c01b42326d52d030281e7b69b90a47530258834f8c606b7db6bea3a37396cc86db282876548a23f11d6193e83eb76af0cb2e9c310848f076c852dc6c1aef243b81f9fc5eb87d27fee15ddeb06e891735b22eee461f49d795ce100998546ee45ed139182da46c614479e47ad55306300db0dbf6d997b543c6a0f0714ae49e3e6a332112f4827a6b23f15264416a4888a96d0970e804c2f3e7266742503125817f241913996e3d2e04794201009a5cc6abb41ce9d4b1e06c993f697595805f45426fd513867222585beb4a378ee983abf0c7cce63237006525b133c9db408829c73c4ff167317d836145d086e0a6b9cc23885c8d0c40d5923ba375bb28e5dae615fd8d8e16583332a634be3090e0831798d75130345d29a295c9c9db834126fda659113d35052421cde2a58179b9a4862682b4a378c13cb8cf22901f318554a4d583e884c4235242504d922fff9b93b65624c05560a626311fccfffb2a0ac4eb97f1e3f7f4bac8f48da278973a2c46c994192ce7709596cabac3198aedc1b1f21e940ecf0691b8bddad61c2511b994b0e80135da4c6b47fa8db2e40c17a7b835608c19b9611ed459d8566691a4b01c8b5bdbf8d56ce344e0d7dab6eb318273451070401d000a0e9c0c355116090d0e358dd05b9513251864f29f110a6f0ebac1bc87e8220cc456fa7eb269b2353d030c18f56cec7e9696402e6c7666c409a748db5b20fe7f0541113813d2a5cca73eb31b49756a8bf5fafd02fda4ae22d649ed83fa3d5015cfacaae9e620cf3cf3f67985b61d103961f21df6473b3c6ecba3f3d7e5947b7570f038cb16cdfe980dcb81af6ca50dc1f20765e835d0e9642652a38c11606b2c592304ed96decd46b54454c9418d9aa19a9b468fe6e66a2f68b619954a601e3bb3832e89b1edacc3bd083be24686ecd997d02bd9ef9618d99a7081eb38aa57a5a204791a6c8b06045a266ba3bca7be039884039cbc8896b4c087ad92aec612bbde941f2fe0d7c13e58552914a55cac00ccd04431d6ec3a0c4415aeaf4dd110a0a773695433281763e5d423862d90d31ab7f852f5442c417544332f8e68a566af0c7a1094ad3832282c30992da38614d8babb25dc1678db1b99e423d5ddf7b3229d0be4d81d40b8581e9b8a7953e34883cb29a0399bfe1637e4ad766f6c82ae3bc8f6c4b94555fe6e495e05c79c1492e754b5a53427a7821b396248c828b6e3f07b917760a21b9e80721ddd69d7813531dcef7b217bca3998adf390f75c9f522c906701f592c037f00101a84e97e1297a45c8f5163ddfe2f29c4dc618cfa13ffd76eafb505cc57a7d40f6d05cc56d4402d6f0b48e51e609078c69a6884e04a734ff9c1cd8ed56e50a1f12770faa2505d77ab4f67bc93d906da23e620b5a44c712a0191f939b35e77ab547903e2c57cebbd0d718e24981f9e880ff356188f4a0d0862177fa364b363c75bac4c4d226ed94d8386f231d89c1e049517ae329ab0bc71eb0d25859c30e9244d791c5d73dfc24bdcac1ab2aed10ea16884917451cf3f1bd54c4a14c09af2114ce1bb1a3d4426a87df8f207410f491c14ee2fee56a14353905a6121b29956c2d2dd9d9a18f9520d09a22bad1d5a318f7f1bdd03d9e277299eb62db81ef0ea7a054602f53e7ba38a45588b7c188323753e886e0a0144e8fd0f7773f3fdb1479763de8100ba02ca1a6891827d12c3a5c41c6ec9803747ad46c77dc0f7118a8a9c60ad4a0c892b897251ddb75969288e9d3cea3e0a02266d3e7d4160bb3673365abe091d14a9633c63ffda51b95b330048a570d831ccbc9ae5d6899a799337e29cfa89ab88c591cf8fe347c7cb5c6e463a92eb16b1b1dd888e357544c32134a25849257f73fbedb0e447877362d8d6ce301c12856010d85ac3015f28eef8419ca72bef483396f1d1565cf8f07367f2b68dc9a7b34e195dbdee7eb9d78da62e17a77c052352b3f79f77c428b0ebd4cc84e662ead8e7d1d6aa795f1c6d4c9a7cda03d4242ee123a60f8db6984d6504297eb10c60673bc18f25bc7d89858d48fa69c257544070c83aa33e566620ca8a90ab402fe862e7b3d323610b9fe003b8a3023ecd8805d04742da752ee738fca195d0f620d48db6291ee397f749acfd624d189686d58d4a47f2a85154cfacfc585f6483a48c0dab3ba9abbe2c828c9a084416bd56516d22cfad98b31dd21e05d859f18a6428d9a102e30c718df8daa6b1d4a4bb37929e98048d7824be1bb84a04f39319fece65d2e183c65bdda399bdb8188d9e2ef497c9aff1c0a0af1174fb2a5ac12b5be92f83d937c9534e50591e40d0c2500f09f6e03769cc4ff3dba77b89cee717f18bda381f856af4e8a7411d91680f300e355c85d8fad5a0298e34746a38dbca577f7c78c7b110622d2c8cdb40c0d2571518d7199c7a58a24f8f6a42f3e8587d99a19ba353c7ec99a1d7257a52de987441bdb2b754def79c51c988f6c81bc8b2653ce76eb93d1c444d30cc8b40beb83af9d020107731e154453e4786d9001379fd2b433195076dca784e1b6d5463f128fa1a11d2b6eba0a45834f09e1ab1d77f2c515049e33236b93e919673577bbf73b5731648a28b94cca9e36dd798c8e629e052804d645720c17273ad78ef311eb43e4e4b1244b9b6d6be5fd509831042819802d01a77defc865ef64ca0122ad2ce786482ebea2613cf762008cadbffc495db77e30abcecbe6f310f9d9c5ae6fc67afd2b949b4e4d09d4b5eaea7790d0267a1258ce163352fc372077e653641b506a98e31cbe2b85c08caabe557d8f3db7afa26853009b37be872cf0036666700d15965d1efb87647473dab2122a28c0f2de2122e941ffa2e0e5b9f7d4b9d48d55cd7bf9adcb8c9958a341f382d59418f2adc657dce4da8177cd1ad3524e9cc0340d2013d0056436b7b4d30c005736f5fc8797e8b4c4f2c677aba76602afeb346748ed36a38e138d91101cdfbb07c2cad48c22ced5a3c00b8a4e93f2b0d10564155ae2d33efdda9b615857bdf1c3629cfb7d4b0979a4027a19729061df488823b427e5628d73071efaff51a5689592a7b367ec9a03fcb639c4869065fb57756db246a07ea720487b6c9feb2887a9f19c783f5375422ea28cc66bed0f55d4356b5329011605cd436190b137edba44df9705c0615265152e9734565efa4968d0d710119d34e9822270ec036d8695c4ed22957d79f44b70f08fcdec4628bc7c96d03484c172ea23e757d8285fdb379f9d7a4ae6e7099abc473a6aab6eebe7db5c7aa927fe670907c4d004db5cd8d48c3d0e835de346e53803204ed65b7b8f3395eb39b6dd9509e33932a5dd71ae0823bd688e4589fbe68bd7d59b3c65c4e71b522657d06cef45faf69d3ea90fe3a2f441631f18d25fb9b59a0c8587a6ccd342e68aff9f8a0d7cda1fbcd7dd05736ac13e5fd6a040134dc02cafe75645a3054324e079929aeb32e082db8fef3108bb2421eb22902a99a0666ab51d28f916f00404d735857d6270250d0449c80e7c7ed01a0c9d762d7f52daddef800eaa99f422f90289ff561eb9bae4a5e3034421a91ddd6a49432a5945266065a060906615c39be34e9a8e2c1b3026d7621f975f3154cfecdbff0ace0a7b90592d9ddf140a7d52549179d2ead2ead2ead2eac27d4e5862ead2eac2eac8f9b67aef4c36dee148ae9ce6dcfaac59cf33a4aaadf00aa6a6b313ebf6a1c0ac23c74b937aeaa26df96f78068e1eefead85bbbbbb5b96bb9f5c436d13248788c0011aa44f2729bb7d4c57a918c2303d2bb5f0dd2c266298ae65a2164d2842b6cc5c0dcb902b08b3165bf7559b6591fc2707b7a54e1e63c7d4a02e4d4c1b5383b82861c4c6952cac16f4f0438f142b3743288b2e4e6ca60675d199315383b84801c20b7a2048057cb0c0298d2a1e9c6232c8308015293d0819e15225881597a165e9810e3c30020e845e5054c4480e5830e5c70c31b808ad548dd3a3081e8e141d01069520563ac6d44017228cd1022746f8a0062b7e16f846c1b0d0a448871ee040058a25565f8ac4a0b544881c8c081384ce8adf037ca35e26f3cbb788af1b293e1c41424849949d2e90012d31aab0e18b27360062c55c76238c116259bcc820c3c1cb929a548e017859327dfa9f48f01283a9324d0df2c2439723186100539cd1022b8c40638ad0ab094c07308b4059428b16406cb14317596c5179fa9a548e548eafe1d43ba292a2630514166401e225860f3cd3b56da4c5a09aeeeeee2616f8909cf8e83b7224890a8b973fc292441985cfc4223ec7658c8703a02127653c71f22ad230b88471d5d770d962bea9415c7a30b7578da2b8a2892b9a68f72016c8c595660e420082deb32facc25921fd31ffd13fd4e86109088ef9be8a497a2c66fd34538fea20bd0f5e26e466ea99a44752d541d27008491f69b1673a1273ff694de69a7a70a050028263ba87570230f7d5009ae9dce3704e0b40d0b66bf493e970d00aba60433b61ce70af57e9f572bdb81cc9b61029f1127d9811823de9316d6663dbf0f66cd161e6f8ddee3e1a8d46a3456d319b71db6fa7331699cff5fb68e6a185e42c183f2becdd1fd995cf05b2779f69330478ad7208f05ac51a37e89e2aa463c5dc7e36115f6c61cdd4d42031b04c31a64c15b2c135754c0d0a0368ca1a8aa302e2a181142294b0e28b0b708ede7db3ecfbbff74824d203d149d2705491716e9b64925e83c2f8994526a3b6b81bbf7ffc51911951437a426d91ec0e7f1ffd768bb0f7121a2431558acfcf9c2ac527689a5e6b62786d1ce21e650c30704ab3acaeaabace5a83418676cd1738c5c20396b52d46003f0948c86da12c94d19629312623b1628ccb5a160f6d5924fc48161ec037fb25863d98d6c06d387a85ef4a1318ade237aac8eabd1765cc4e7f2ad5c86a904829556ae38e7e7e624a3ff694356ae6858e376ef0eebadd75bbfe6e9c90356ac6bfbfc80ad3d9c9e9775e441e1e3eda86a3cee48f3a71879930e48271628fdaf0c717a81e31f9a5962610532afd70de5dca4ed92b911e7b250a8c564c5a8b710461e65c8cce9f7bfe9e73eedc61a51fcfcd64a3d27b6c54a2c0e887074de9f11fb79a21c24c10a4ffca17e53dfef31c47763ffe43e3847c0f699ec8a7a8197cf3e97034e3c0810387afe2f871d413cc60dc7374ac2548881f2d403824ec91332df074cfd3fdd6aefe26c2fae7d65b170dc953bbdc145286536fdf73562c10af2ac2cc3ef5cb9fbbd96468f8e600b39d0cdf6cd6ef5abb869e1818906756a916c8b694ec7e3a01a180ae80e85c2376d707406600020488ae1630c05869e14d551d541c15221e0cace0304f3492dd6b0902284c10b87f2ca86bcd47544bbe90bac848448242c222b840dab8c2874a14421913923435080c26aaa8c10ec060d204183d5f93caa1fa01c3dcd97bd4cdeeec1dbb19ee541ddddaf69cf390106ad2a4b564a16db4ddbb1b32f7a3ba613333c347a19755719ef37677fd28288f4e5f545555559d6312a673ee2978aa84e5dfdcbbbb6bededbe3d77777758092b5b9bed3db7142909b61f35294dce39e79ce34e355f717fab5ac2412ea64ed5794a3e2adcfdb9c3e78eb83be79c1f7187cf09c1e173479ef3e784f01c7cee88c3e78eb81084e047dce1734270f8dc9157044c6b38a5e2a141aa31a81233b73f9518868960622dc889b9bb8b37f0b76c7bb6676d98bc509d730f7a0f4b041e70653f78669fc551eb15c5c229c404704f946d0053618ea9526233f5532c9e0a300902057b4a7a7a36c334566bdb46e1719ac6e281a51f4cfe7df0e0c1234a8c25203c5b3542d2487bda867b2c6b77f06f6eea9346a8b850808058db639de80e7e2c26af9527aa835b5ba0520ae4feb640af7587b80874992c560354c8f04215c73fb6cc620c1efa654e3598fd343dc696d956666b10194f668301524127b62c2104e698ab4236a7380716c43441713094cec54171768bdaf86febca94c502c01cbdab7138a036fe5f442e5a0480a9230c8ca8991746f1475ace1ba206585644a06be5f3bec464c442db788c4f5a509c140baac20e41fe40ab98ee22da1718b9adcbb52fbea92277eeb3ef0dac24d3ff5111a3afcb99b5ad416dfc73104275f8af6bfabbdc956e9213241da746e43a652cb0a34cf8bde4a1a1383c80a03827c6c25cb411da3eda4a3410bd43a7e00446865184f77e857cbff1a8409b8cc8e8990818124de8014e416c9ec00fb6a4c88d8118a871627c4027b8dfbff1e0147c186ccfeb84a54f58faf4dad784dfbb5b84dac087f0e13ae9511d103e9374220f4ed24bd00ea5568fc90b153d643bb462bc70f10386434fc9cb161e48395cc9bca0a1c3088717d66ac55611e98b4eebf585e78715924cf9720410455f827c584187265fac50c10a3b047de942052b1cc1f2e54b0f2b20f901634467851c8acee89139d198f15302cfe9882d3f536c79c2055b7840832d3e30a3494d2ac789cb91328c60ce3733ee75aa9353a5e802cbdca27c538574869834496889b57d027978444774600f7293813c3ca214dc01eed08fadfb671ee36a28d3d42b0fe0145f31cd057a00df38cdb40b8553bd410b14934573cf1298a3fc190502f70e64d398326c1aefb519203a59c351651be2260976f24ffe21b2a009512e6817407466afc4957e9072de13f1891f83c5a06050d1eaa1360543c0416b057d68ad1e4aa3b4c04b93156a043b4f9059d7ae9a22531ae1207fdba1765a49061b8fd289d940e9c474797972e984e7ac4b273c63bcfe9a5504ab7b98d07b548715a92b5d6ded7211c9bc96e48fd1cb726afc8cfc9cf541881aaeac88bc2d7e56ef73140b2068c15a11795df0ac9ee663a3e48ae08cd0250ac4490a099d0ab9b996d3691cd3c3773c7c933d7cd7c337eedf93f0374840dd40c5a0546d647e734a26743098d0653228e7147c8704bbb69da2404d62c27f5648f8ac63a334621dacbbb33dfdbe2ae4d6ac1249e6491a839a79e17dccc73c2d67a5f0f1d159e51041a16715f344483f3a2b9ff84cdefb60ef310102e037f76542574485e204713d98d0016142578409dff9fce6a498d03931a15362c2773b6013be4ba22ab0116e8903e26482b699a6b79c2788095530e1b7ab6de0bf48333e919b6bc1fe4271547b82b69dbc0659c6841a9709592f89dc2944133e1dc84daf6011c435ad24e4bd0f8663c8ad5908d85ae78a9c19bdce4d5fccd864adb32efd806f03a5d36404b5131b790fab8085601dafc184ff58c7cad62cd76a56dfc038314fca6ca076fa7b9acb416de043c833a1e399dc82097f5d4b75c07f3a48d3bfdf97f92dc91c9f174cff4c1a34d269a4b1f2e1df620376da40edc462c63a7c639a703b4193a105d66468203a536f022a07a7e03fcd35e19fb41d4a0140e302880dcdb1700afe967e4c81cbc329f8282631bfc329c83c9a4f9125bc8c8dd20f619c98872f02be193dfc208d5382e65a6d039f044ddb4646835296e668e55aee473a35782674bfb91e8c34da722c3bb7adf5c91af6b2942ab54e6742d74c46e4ced53097d54011315d59995e323169ad5fc568259497b25745fea6621d4ec1c750bca3a364c27f54c8cd7b5cab63742df8ded312d02c3346193a0b82a314183519c1b487741ceded6d6fb80d7113fe7bec7118ed2dc0f78f71db6c51706a6914819d230d479545bda9a50714f9371ae298b8d7a82a02d31af824ca888c8979c91cfcef8334ce284a025298ef3dd45e07e95a8ecf0bf1479fe3f3827ffc1c2d073ab16509d62a6a39b1174790d4d546d184b5d2950f09dcdc5098af86df43ed39f53e260bc94fc337fc43dde4798c52faa778a67af4f3c2305dca21dc87dac6ff9cf21a4ea538e5297e1fec2fa703a90df4f2a3363ae13fdfc077d7194a984e65057b49a47f90c6a1619bfd1a2c39e66e0a7357788153bbeffba7fe3f9d82d47042b6c682e68353315904e9f016efbdc70ddf7b0a44e7ab0e7de98573770c68a136cf3925b0871187f4ca84f45a828046999a0c8f9eafdabc5782e9507bcc2bd057555de7bc513f7777b547c139e7bcbb074c6f362e849a0cdb480948dee5124b591d161e0065ea9b806f6e609c0e7a816f740a9f24a66671b17caccc4d5fa52b482431370d23a70fbed9522bf08d9e3175ea0e9e29a88800456f3e6e3f8115f1d324c74f6b50c8a235a8ebb6aa2ad7c0832ebbfb4617eaeefe80162b48c7c1ae8c10954a750215171d44036ca3602f4591fbeedab9974fc87da7ceb976ceb9e67e41cd8946866df87182d04899a705d1412f97a2683d81ecd718a41b3871e5e48327a4279c0c41f254211b98d032b4f0534f15b22189994d15b2a1499477558daaaaaaaaaaaaaabaaaaaeb04a62eb5e577776df95ba170aaa5a28a8773ce3d8fdaa6cfdd87bcb9eec415929999a948666696bb5848fd2eb5a4eeb20e564e91aacd494e7099ddb12a2c10c9cc9cbde77d3ac508df09274c47a292b981d49bed738459e78d53724a6e316772977e388e52d535c87e7efb707fdf2174f89e5b77c2868c91d9d5ec8ed6685c9f9c72f2dbb031b95b1b0bbf5e771be43e2f1643931f915c2dea5c635926027b1a0be4196a2230e8708699164cd3df345d9b7181c90998b06684eceafdae9ed6ca564e6b1b77e7d633a5925058c50b091f7615d5f1bea9e88e374575bc7720e91e7e53d11e366cb066575115743e6656c424e9346256e4a19f987fdf3bfc6ad818b2a169db3cf85e1741e929be8474df3ffd3e4a92b6c9d36fffde8c10130d316f7a5d65e15763e19b930945830da6979f23b51921312f5f6a34c88f795de5985e6aa5202613aa88cfcc7bd94720b9c5f9b6677bb6677b44f07abd5eaf978f521683300dfad679f114a14c4d135ab2a75cc1f22269dba9a7c8b0a63e0fcdf73cc4373aef9be77df7bc6fa017b5ed04755891650c521333791162e77dd97d07868b14df8ffb520042b4c8188a99fb2c238f18fbdfddad6d31a4a6197265789931c4103b3a4ec8582d1a73ff95b051a437cb82d13c0dd658d69994a1bb5ff37921577bc4d727aac37feb76a23b4c68c92b8d537a2f454ffd493a5fa9219348ad774c5a2b81c1742426900335cec628e5e9f4bf71cff457505050505050d0eaacceeaac8eceea0c616e4887543193988ae4fd52d38496dc9ad54041538646401168fa37ab5b8d5364e5df3a8de32bff6ef29ac5ead788312630126b6a96d5e6930431739f0027d3090027144e8aa30c98ca63c7d4257d0696a43179bf2916f7d8968498d248238d23ac9c46830deee1e7c487da8c104843d4b47d66e2cc560f559a80ae9c16db661fdb4cf2681248d81b38d518501dfc16d01d19e042059166596d4a45057ce4b696c5a9182ca42bd21d5bd80c923557977986f9b464673a8723c82d49329d7326e77cc90b5ccccf122ace3dc3c0bd0b335dc6370cb32c8ae77bdacc0476a5ba9a11f26888daca45d5f14395dd15d80c43b07d295d104d13a64ae9e2cac43a23419c32c0348ec09afdad3913d29f31cf76345d09999a80ba9fcebd8ba4b9284522d741610db1b008d530656e52a886a06fd2dc6721fc390478ad5c9b511fbcb2872ce6c62c2137d941f82c84584394a67299fdde1f8f1065f667691031db07697499a9d98a4380574c8124e20bf51eb2e8d51125c62c5ac78a8d3568446d4284eca9412f2ae669890ab6146c89ac3135284c159d304f7c08730419617ac2f09cd1a49d7b448f7d7ab3cbbddd5d0738d5dddddeed519eb4b95588d9a1a6ba8d33dc5d9d43f553714a5f8e1aadbb9f7677bb1c352a8db9234cb50d6cf7473304b91fdfa18638efe1bf75b77bb73f0806869fddfddcbd5b42916fdbfab979466e33aa39e28829df6cffe057d4e63b9b59536f97c3239cfc70e4b2d20f9efc5896316a73931fc34a19a3b69edced583c175d950256c32455a24c28487a8e9422bd7a0ee627d734a886470aaa1c2913e0730db73522398461c277e9354f739271134ad566341a41d2c8b551cc8804d1902594d31489f40edf49a477f83e223d462a02dd83c199c88b79ceb3d20f6fd5406d5b2e3c07831625962fc0b8a3ab5270396ed4b011a34d0d544c55c03535c25ef966843d1de590684e27d54c98bace5529f078b5198d485a7201ce2763e28884394dc5d7d18c591cc511293e4a6724999c4c494a8cb747ffc633e533c3b237aa815ab531994a8061a51fa38f792c263371738cd4547598de14a36d45a2e61c46624e53a3d17b4d8d4628986ff4289d23e88e8616b2acf4c39562f6c6c9cd6b26ff6ecb8b74de31486fd797894d3af049aac8d80253f128e386d23e0c0b45195662ca50c1ecd143b3b8fbe83e73454fa67b19bed1dcddbdedbe91a7bbbb1b1661c129865782c0296dd347c87ec1a98d038b9a1d8f4b8b0b4836998c1e16054dfe299337a91559c15caeb689d9c45c3445b85ce449e2cfdd9de4ad6642fa287306af8161e01112ea768cc935d93558d42f5f58048b60d18d2dfdda6e6c71eec61655414d594c434344249286b9fa25bbbf74d1d3fae53017e672ed5caa8262446ec4831131021e94b9615fb017a7a2fae08884dc220fe6e2d4732e0c878ac179305711efe0a07391a771460f8f6855dd627098eb21ec2fdc2fcc85b91a27f2441e187964243cd144f86238f7c1ad2230bc28460a8c56230d73b50dff8c18a6a1a8846d52ddddada5530d44bd0c1e21b77ecde85ae4a179426ea6219ec9278711718a9f0607d80b73f1f0f0d038919b69c8f4e29ba12c7ce33211f1cd068bf6358a248c57b31873e3f558c502ecc868dd7d092072204283144668270ccc4768270b1213423b543028847696205921b433831808e54004a11d1ea19d1f7c078281814b1fd9200414a50742da89c65f6847052cf44319f3c654a11fbc6082ad96fa7d700e64cc54a125acccca1060603b4877068686970c898444a4293266f981c47890b5e4680a129084498c216b4c1552f282202469aa901221a890434824d2345588082d8c20df542122b0709e6a9aa9423c5b4c9f2a940311c6e86d54cef6100446d18ac8d3c25af5200a1ab45644483a2ff7fe4ecbd128c28c31b422028578ad1a8b225071ad72cc0871fdaecd08f17fef5a0ef4a1b5ea7fefa196e3dfffb41cd78898aeac5ccddc27f2bae061046c9967db286de685ced13e81f90ec2ee2eeff2aeb77a570b4c3a6666e7bc708e1d333be78573ec989979ddf739c7cdce39666676ce3976ccccccec98991d3333333b668e316b76cccccccccd3c626666c7cc9c357f89e5e91d7364c72c6b3866c7cc5a124c75d939666e76fc9899d931b3637edded9c7b76cb218057266b2058adc8db1b687821f97fb9bd57eb224ebd346411fcc237aa034482f3625440eb57eeb752025aaa95fbcd34f57901ee755b71f53498856d1a0e0db59ab0c0a176f5abb77418fd8522a09fdb5512921be672b5eb95655fc8bee1c8af6e382257f0dfbba1d926216801fa1fca04043dc00f1401fd6dc2a23afa31177cc1a2c6ca98fd0e73a98efe9290dce050f713d9dd0c75905b7cb8ccacba906354f96f043147287867b35cc9d2ba0de9d9dddbbd9b656746d4fb2cf39a32e4a6415bca874c71aa7d93288e649b459265362abbe25c6c126c5bdbe325990a1dba3e6ddbb748e0bfd76d392f12873265b413a34e9c521a33e4a652f5666ca3bebd4926a34e1da5772666f277afda1ea377afbf0d8930c2f85b026426d4b621ce00db63a46dfb4a2e90666b06d81d51b53d740dd03b516644b5ca8c539c803382b06e294c774f415f0db03d7667364a724a5d5013adf953a5007a228593a2a99a2a85932950a6112c730053856c7022c9c44cfa916f3007df0de1249365e636044e7f7e51dbe2d3a0b62d2cb9409aceff4a40de67adeda1cd3af9b3247ce30f65ee2c4faf92303d1bb43fbb3d4d945b735b1992edb15335c9d4923307f120a778ddfdf6e4d2a3abc3c8a9ee566f2b98f6e6ee1e238efb6f8e52c965605ab3610a7956480ec92772eb2257c75e5c820043ca0a9cd55215f6737061aea852c8b965fdda96bd3052ffe819058246614dc2f8579bc11e041a8e2a72a605ecdf630fe1675a7c217ef614889f6945661ae0cf3fd3823f3f107f8ca46dfd24d8e98347287e19368df9aa03f550f24464dbb909232cb777ef76777777f7eeeeeeeeeef6766f777bc7a5f93fc99c64bcb7bbbbbbbb7777777777b7b7db7577cb7ee2bfeddddddd7da38a6bf4ecb4ccdd1e86f3c8d33f2dad22308abcb578926ee7e98d3cc07a977977334924df6ac738f7fc45cf9ce6ffb431c6cc9d55934a3dcdd3d49c46bdd9caac65e47c4432cbbafb63b24724777ba5ac51a3311b36babbbbbbbbb73706d41350078804cc237a5a5e154fcbd3a2031286ad47f4aa78448fe855f1b43c2d1087a705b6200e5e4cf52ba850f9ee5ef7fd76e721104c89d2012952ec6a800b29a6e8305873677103d2a3727fd9d7ab549a82c8e50dc0267ca98e2864af76779c13a8a44d78153554884604000000a315000020100a888462813094a7a2b4f714800c6d8644765e3898c8634110e3288842c6106300210000400820c6d4d0d0090a037a073f68c9c5ff92633588a453b13b9d1cb5d2bf0b9e37506b43ecded5692bf1c6f10a6279e2ee1303426d09db7f8bffb63758a46e000605d19892eab7883cb17abdffa7656dd7bd97f533171f71db4f504f1f386b99e8c36086839a143c0a08893fa42deca9daa521ef3c4a48ded876c3d3df8e99a86a467c9dda392b40628d9a7af3105621079afdae07ec33e0aa16c6a8b1e3586557b76b190766b67c91894625e303dcd86e571797bb17e0219a01eb1febe76d9062d7c233acdba23db7c736274f23ee51d8254a233b8fefd90c71edd7334b25f67ad5e69e832b40c483b6ab5f86221aa3fe304f56bb57fff16892aad9efdcda16ee56d84316bd00a960ce740538988898b64431306ab9914c35bd4df2d210484771b455ac9b7beca6d5d98d44c67e4984e6460ee5947111e6430d2a12e59034c532d055c439f04102fb8dc06371bd043aea3a51d931cca85b06c8b375e3134edbbc5254fecb7f1d177c2e184637e0b578988f6350eef896fd811a93258a591658602f718623ae0e084fd07cd5358efd5ab2416c2558900d03a477ebe22be7b000bca1e927e9669d75f4eaea410ef816d30dc251978c74bc6c340533e852192ee5727d6f92c1d8da950222f4cf36c4bad9304e38bf41290de6dec81a14aeaed0c29ac97d2d7af0d453e462e92cedb0939b53a4f84b2f5cdf2482aad63e46c30609b59d1c034b385a3626e276cf7367a53791c466130d3c5d30db9e74da12a45c7909ec260e10231dccc326bb395c4f058f1f02b35e6676c3aff068ff5c258fc4743c6514f79a559dd5c1a46f7fd9f69a9d1608535a36e34156c13620d43c0013747f486f9a6e49c10dd6e53e7deed1c95c13056d9d9dccc6fdcb421cabbd65cb2e95cc6f093bdb091b9d798d6dd8e6ee907d15edfef9ee4254be7709a0c5f1b14501d04fbfaaa1054ac0a5917bd7a0653e694f8a68097f1c5e6759dacea5f99abb386ab0103d7985068b555940ebce9560f4e0f2cf742024da1ff5a719a5d1577142c49a28c2ebb88c4573981a3ddfa914275aa5af857da7a7acdd9f3052d0aa56395c4bfa36b1ddb34ed804193fd8fa4261439aa0ceb668e2e74e66e5e2513b2163d5fc2111785dd53c3b14f4bf54dfe5439c2fb2a32f994f3d30ceb2352b103b62dac5df924f5d8c5bf9056efc9675321e54cfe655f7bc2c1a190cd61dfb23ff4e021b1e4f0f129728a6d5212572bdaafa01ad7612481840ce1073a51f3e388fa87592b67c584c55e80d0bc97abb317e9c1f913863f839e7654164deeaf4922c3df53b0c6f61c60de0a91c049014924662b0b724b72a07c6603dfbc006b70627a8a7115798027a66b76ae0e3a48c723df84668c154a6279235535cb2aa78a5843fef54f28f54450d2a06c22199c58d6c737ac59fcb6492fd5bf138ce33abb716b78f48707daf58b14252dcd9875adf90fedc058a4a99e20b38b1f6e1ce2e9e330383b0152301909fde4c9af55c8a15028ff78f8db904c45de1a4d0e8a8f4d5939bc7f25872be12370fd15a512876dd31b9ac6e3a06283957898f594c91966dfbddfcbfc9a0ef05d0c88a6bd0fc0d4f3d279b8a096a7844ebbc5ad35753907a92490bc026f60493f8220b7001cc4e781c925e7540af0dd80d50641d7744d53fc2043046401b44eda9b9af1d80eb4151e59c3d58f78a5c5ed4b7f68c9a6a8fcb18b5072b560a0793f69430b51c692613efee0fea28d219e336d808f80a8acbdbee079a8591ac0cb09981beff76d1abfd43ba8d278616db1f38db5b27f21a67fd7acda2b60a4045a23de072ae5c7a22d136f658982f87439b40f95aed9ad54e7438702282c0f6da20d0d061ab7d90e17a3a346cd4cd427ae837e6e2841a9c744217c4b3b30e33dedd95a09c110c1fe88d34b6a595922c0c315539f3ed10bd0d2184bb531f69cee9c4437d3ee81e9c44867aaafb48e7fc0027ccb9fd9a70006b27df13c919d9187c308c11d2dd0777803023f513b18f1f1facfebbea046251cde4d5fe587b57fa6a27a7dc5ce498a52bb139e89b1abe3faa6891c819a8f5813a4398913a47a543ac8c9912f32bad10e17fa4a25305ee09c00e21942e7c5ca052d19588e79ff7a81b1083667b5a9188c36b937090a10f6ab44bebc67d2f579d24587c2422741b402a0b8f6308cd39005fd90702bb53471f9e2406f2f2c5ce206fb2735d5d4cb5892c0267566b92f0882c17668d7bed68ba868a8498ab93c4cd4a8076bad2d334fb1b667af7ff8a54ed5279a9492fe424414e035b455a471d457e01ed857e504f5d8e5a34da381c83c42f841c34e0957c66fef44194c2b6d67c879639e2fa05480138101c9c054b5c0ce77200c598778698fdf1114ee86d72178db2077dde209d8bce51d9853c5ab0ac2bbcf44a379702f0d52d8fa3a62d69bffaa97b7d32391a9d2dcc05e7e224e003540aafcdf18fc1bc6d50873d16d8242f58788549a1995f6c4b8c202741dc3b2775b9c2273825ee271f1ca736ba9e9fcbd724a2716510133e436dc81172cc811966f43259e01746a2599a5e859d758ee6cefc20b431539e65064f220bb6758084c7f2106e865b257464fa3b140c26ff17335b6506f510a7ae71c81e4150b8f2c41a1050f10b853af78bc0c9a3059811e4bde89bab77014e376e3e8b2da54ecb0b8830df847aa4f40fd702e1308c8c58d983435824cb5df9870d2cdc64a51e48dee9af079137106269125b0ee7d01369e2734d3cbc04f46782e4964f45118cd9c693a4e0a6fda46dacb094428baaedf5eb721bb5e0e8e3ff991d252d43fd47e0be09844e6031b05f061291a817fb1b665e8d01e37a24abfd3fe10394f955133b01cf53159bd8f71036c83e5d06c63f147050b35ba9d7bfd5f770deff760cf5241cf4d6fa2ba441deec30600fd74b7b6719a65e4ca13515009dff2c295207b8cbf1d40e301d2296f9824760dd3ce910dbafbde26f98caa2b4db14712aef0a6a81dd6a5fc8ebef80e32c4dce3991f445049a85d4e5140dc3f07f3e66a9c25530f7c26a13e88a05b200460a23910be5bfe350c247807710d93a3a8953756ab04e2e12e0c3e7e82e943b70cb6185d9b114d3e3ddf8946504a1ee08adced1bd211d32b4184f4021b3c6946d4a0cae0c7592563af3d0e9e423222d8ed83a25b1ce33e7ef1b4962a19fce8690afb671efe0554192014fbaca09d14d6c1da0f42ae577e878143d35f039e1083cd2c4b6321cf7a98f9c6db4071f5c85c7d4c018a2221acacd6dff00c4431b54c1d84ed669ba05297ce40836c8e83251c8be15c5464695c3b60c7f775cc5f6abfb9b304ee334b062d5677717ddd2553f58277669746a50c0754e4fb7ca452aa0c88f429b9872de4c0f333372bc38fe8a00c800ba41e6a01f2c668147968d29e8d24313a9a47885d0e202301530928879ddf464719e72495fa27a17f9bc791841e542600d6ddc455f2f6193de31a865ef431444c7de5f5e67837d30ab19131ddb49e873322b3a67e6b92816af4bd18992ea8802c6ba7b8e53acaa06584bb6bf540066a7a0ffb88d7687c94e5bbd57e6e81dca8b6cbfcf37611e9058178984123447a122a59e8d44d6351cbe7cc8a7abf8b02750a871237106632be62671b5335604feb60b63bf137be97bd618913f91d1d417649047ba24487f6692f54688806b59d0834fe90d50dac1a2d7f827373615664f24100d436060e33c6eb018e14e39f16eef21040391e3a418856fe654ee5881e5aa326179bfe0f3339451e908547e776ccc62317d0dc19f072f06d56e64917ce646ce271b4231680e681e9a12e73ea183c36103ab823fe52b98c4d377774599e94fd6a58590cac57335d520841b82f07d70fc6abfb8f0613090709d8d938e7873413376b53b1c700ee829ac0b207f32dd80b5f2926af2a8e936f84f8ec22b577dd0fec0e44d20d1fe11072c031e6d09542d69e5bca38e64f173684a031c7aa57bee8fbdc376f3adbd5971ec4c994ef98ac6bd4de7e9588e0cf91c9e2d92d31c60fcf9b7b48da41334922345f9f21de65eaedfc697db9b0a6cafd715d0e60b69de42ef34c8914693532039bf8deca86f55193e4073332347b50e630c9466e915b8fe22577c70cca8105ac95a94070f45f8f5c139295e209c1242c70990a8b98d1bae71ff4cb710d1c9d6aba4576a40cb102c457caab9ea4f48bf92c76aa0aefc8d8f5283adb7b716f37937db4761a149ba253d4b40d4e1cdebcf5a2de70a75346444124d222411f9127182c8f09164533e23da7a526a2e58f702a4efec876b2a4b8c27bbd19cb5387062c4318efbdef2370a0d9e15abbf4f5148bab2e5a4cb0e358824812cab2c92d523199910338eeee771243aea1e32b86d5604a3e8d388dbc5f84a098b9eb2dea9af9162eecfb77dd6fb41ade9f246a28c80b9bda1aa5ab6c2b345398bbda3c028e5d8180335d30f8e024279f27d41e1e6525de03ad49e241b0f90266c8758fe45b81bd8188b7b2070207d31b3829292bb0c6b60178406fa4059b0702e5582fdebf1c45c00b7d124ebf25a9586cb6ded1aa961830f68657a40b46e8fa023779ccf8558d6d0c113aff7744fdadcdb871bc8224006f3a8ea5a9f585e9c1910d2fe4a2b6e4fb120a74194016f1e80f1c4d68fc5bbe5bbceb0ffdeb673bcd7f27cc3d37fb6e94e83ec43d6652b183bc82002b09c180b6578d77195f2d4dda14d9f883e9596c03e099dae869003ec706b9ada5cfef7e2d8f65cb6a531c94099941d110a20092c1120f801301a0470c8807358e0f0080e0f598134b080160146a2d75f111c2bde645ce15a52af0b6fb8207c42be4c3abdb8b8df54badc4373d7bc769b24b765210468fe1c5bfafc4552a458f75b565c05d25e68815e6e2245cecff21f25eb64aad346025251a45151fa446961d83888e2142966413ec4dded61c5f9a4b57d6bc2c30d3fd9eb85fe6befbff52a7789d1962a9c7607c3f8ab21f5db857400cb40c39eee04b3d5a51ebe57cd2d2224957b458e452048ca35f759ad8ba4e9f4d833fc7b92d78ebfe13891227aaea34361a0470158aef84b8066d47a63e1abc4289418c8210fb4e077049308e5bb063a386a5a9aabc4b14a5dc68bb5ad160abe103d73a5c8489beaaff67833176f0538c0c079b24bb343e670413bd69e9ca1acc90b653414703a7bb34557e2589e5df9eabafb6f149ddff824d3e0efc0bc844593014d9441b3ee5711754ab6527e15d2000cefa72b49f6e5f373e853012a1c921a538995d6f8cd955356211ea61c8d734374f78e219bcc7e0262b7f2a90c2c662e51da48e249a0b5e9bb4344f2606a1500fc1295b1f1278231c2ee1bcd1e55827b0fbb1161e28f84ee988c16283dd0df55fa93909217cdec254daf837383f6bbb0ce95b5d206090f08c8f3f39eb5902b39bac1c41a7af6885e4af71f50829262406040d26f3a5945ac1681d359f4fa35cea29af7b28f491a2a6750be08a376db324e960ad7acf35883bb15951b8d3456526a587cdc3388a54463aba22ae478af64995fa1b1d2bbd10ff8509ef28948d81108575ce8ef83ac83ca78a0b21c4808c4ba6eb946f51b3df14b0678e376c011554faa1f84f849858101563572218275b2762077517c5c6ad62f87fbd5a0ab5ee08ad7d3cd48e43baa33b04fed2918fc0362e6e28bfab07a8356c5ff42b7f90f8ecd1cb9951386fc05cbb838e817cfa9114cb362c7e37a6501554380526546fb895de85b5990f68561dd8f55f6cac6c4a653c9674c5280c94304e7edd2122bb4a7a7d23329c623bff20e4f36aeda53ff886646e333a9e29e3850bba511fba10f4a92f5fa4b8243d709c2cd34b2052c3dd007520ebcd41f9312fd4a328c9918bb40e9844148e904e4910d8cf7d1ffaaf12a9a0c6fb7be4b46ce863a8ef608c2cf58fedf13cdc6c120b2ee7d3367d739cf0853a8e10b075d20634576e119bd3e10e4c0986585f53d6064bffb8d65c1ee0f4910068e37fc6971584cbbf07ed5a98015a5368a8f53c2a869cec14c7568fa15f40e602556588f953a98ed21734a77e3fed49d40887b6dfc4bc4bdc96c517412e9d27f9fa8e9ed15639a9b5c7c275d4571aaa2ca1325618c034f3d7c184f8250742d75f253097d444887485a2114af49750e80e3c7fc15f49055ffd464ac2ec710cac8ba7621bfa9edd0788ac66a1e7f77b400ea3fdcb4668ac6dcb1255ec74cd488572f1e6a38daa9bb29faffaabe900dcf8c3bb356127f898eabecc1aefddc3c2018609d0a88f546cb3256af58346c42be611624651d5c258d5043433ac08a82c547a2e21dab8ad445d8f1ede03de39da6f15e72c10ef86f65b0559fc417dd82317c9367b634658bdeb4944ef0558ffe4766ff2b06258e0bd49833978049a5600f50286ec1c25d206de7375d61a5836d44bf2899b865a8f9ce07067a14f764d3f53490ae4bd21a7ead4a2f8b83daa817ee384b2744bf067ac51af1447c9da67be1a9512617a32766c0ab74a3b691c60b9e2cd270ff6590e1c931ff45910f85f3031ecc1cebf2ba8affb8f4777d6ab29b9d8265bfc7391fde904195038cdc34f6cd758f1c4cbe429683faf23f69538b25b8cec301dac9db99cb7fad89f0c23d50185dd2fd23ba17d9315fb6f9d0df56dc9e2a68b1142eaf5e1a3b6c232c013123f7885954ed1e408687328b9ad522fa1664962aaf9e89391f062ebaf346dda66a54152e364f3163a3c713244bbffcc54af7d45797dfc2da9da12fe1bb5728210e873352236c9f771667274b70a4695447c515b351ade1902303a69fdb162f7989985a74d872f04367fff83b119eba2802eca8b16bf72091ce53730d447f7adeda1d10723aad652d074a05b6f21aa2fc5eb54594426ed02940524bb7b8197686cba8b2077c5b2783ac64f506442948833cd3c6be61376f8444e2c72ab03918a476e88fbf7d1381bfa5a5fd628782cde8c9efa9e22d6ec85e3244e8de1aa23d37eef50dca28d7702bba429512cd913f2c3b57506f6405e44b2076526a02633c0a18843d3eb31223006bc7fb5b09f9f64edb6d1ceff1dd7c1b63bdf54614cfba52bb2dc696335e0a2f9a286398c5d58c93408332968a61b24838cfc606c97032ed8132f2d8328a4498a576be85c4b1d688fa13d276891f81b9646fc415e99d3229b954df2130d8a7570411ed13403c06f03c486e86a5b5f6343a6a5b05c3be5739c08bb9020a80ba833b49113cbdef1f54101c8795838ec9b2a77c7d0120e47fabd091af0f96c10104f3ff7b0a0e625765d4792fcbbc1f003d79c02f7eaa2b20a6f23b009f5effb8e8b0d891332218b18c2f9ceaa9198300ae9ac57b5e72ced00ac188cdb66ed6d3c5b0ff3e04157b56a8cbd8fc44c7cc2f27dc205eb9a0684bdd2acbbd15763df6f04bbba53dd6775c8c195abf740f08d4342a7204ba82269f14bc96588b907e6cf5f70a6cd79f6b0a9d0e3628c4549cee7a6e09407ae94d51a46e166c6726cc98a5e8344c47785d3729b676f5291640c62780389fbc8ff88da23d1c2a5a09c44ed5f22624b77767a9e2613ad1a001efe5abb8e5163726436aec910c32c3070de08f8277ba2cd273c86a6be31e36f3462f1318fa569da622c4fb78d427bc415d0f3f2c92fe2500e438f959ca72fb1e54605fa8226f43d708e64ff4cd5ef8889f37f879b03cbeb8ab57f6b4a152030073a011d3999f822619cc3b994748a23f264729b52b3d9c7cf15dbbe4457d3d66447f800ae754bfa5ed68165a12e0b60e3de70c232280b3fd9d51b6f1e30342a22db0b46e45e7e620cc462a2c7490db15daf46f1b62aebb313d76b4c9466577cf369a9ff3c4dfcc58c1cc6f9aacba9c764db42f91f662ae92f67c59c73320d634e03444e90f570a11167f7b079dc6ae8262d72fbf826e51a41bc860d8d677087e19befe253bfcd94e43669d5e0210ebdab61cf00b7f071e6af57262dc2c0cfbf716e694ccfd61718836ebc859ab2b60137562699aafb06357b94e66a14502501d82eef00794da35a1e77f2a81bea7c9ff198215e7d95c230047267f62b6520a507e153a710ed2b8ae88952734b8f0c8eed8dedc4cbeb3d728c6e9665a12f32f462c0f49d1783d583e6c1a5677790e07c158f52575f52c318eb6d822ea74446c9e22a6d9a33f614b9bc36c1b1517bf83500aced7a02c2e6244793e4d7b53039f12abbf21d7de82d1e2098d7923168757b3c7335edc85ee67dec9e2a07a7b5d1277d179a95b51c4bb5950d5ff97695113977ca4000ff6453a8ee8d97df1ac185e2c4ad279ec8b6fac24249572cfeabbc2766f0fb2a14734a0b7e86a04e4c60c264de0c5872905f38e89dad5ac6ddfe7fcbef44be10f919e257514cd7165162b867ad97f40aac35501d22eec82537f1bd61ff88d3efec0548305651e52eb02563397cb5b4f3fe6e615d503666902181930612765f9476595a980ce3fa299ebc7897e1715f94ae628c4c8216ddf4aa757147ab9d53bcd656c7e98178209e840c41eb2260ab698b41ef2b8e4fc34e3943bbc180b562dc629d4021b3826fe0fdc2329e8568ea206755ac4c183711d43250c0b124c290454749cf0965ae0987baf555fde10a8b1d3036bdaff0629aa5eecffc9b1350369c065815dacc821a9942bd5bcb9f93be07e2dc24be79478f13a4cdbe76f1d88ec8d4644a4300c748a93f011c9d414e0fd8657a8914008ad3df536f306ac8650ce25ba8858898a29fb47e9ca7b035eed2c44d1b58d92da949b03a1f27dbcffcc7a2ec0505bc8a5dfd5538f82e3136f1a826943b5c5c4726d676689786d83c0e7e70d0c848c807a1ef8bfcf746c98c60677274e25806b1101f8f147911229d8c779e9f894e3b4f59ce3ebc9013ae1ec37cb1fa0236cb63de633144247c548d854d0b78170a50f2465c56460982bd3125bba24608b2118340a488b066d29e1b94dbb8e981fb78474c1b8bf5bb69a770e5ff15aa50c41e071eca4608a42f84abea5fecc2215b72681fd04fe38a6e272f6218c19b0bf5b6f9c15c3fd8a5c5365d87cc5f81b3b911ac19a6773acf3f323add63ee392808c0767095fa8302741a1b8f7265f2b2c0ad2b6404d7b01f920042e91d0b752e408cd350838e278b804e2b1e3be82f97805eaad5350499c08aa0b1d59be2234ce546f7c14775eb1cf7ae42b0b3ad92d54ece164571d04b993ab2bb1401175ea7d4964fe0c154edc22d913987a8b2486c20ed790e8e741854453b5f3d2ce2f5e5080a6935ab1add43aecbc713ab1aa79fd9ce7181eee5c2ed4f5caad0670e3a93ca71cbd9351675109b4ce0304eed10f14e6c49abfd9b2cbf0c333f99e90c7451c5dc8f6cab681646a838849c7c315d32f36b79dae9996339536f21ca157fa911a5b09dad237afabc9596fc4881ca92a383a46106c693ecf11e18ebfb88ac0fab7a4402c5f8218a743627a5c873c5fa354f063101bf06c567fa0707eadb8dea372f163a3b72f7e3ad03f67aaff657249f992dfdd1e7efb771267a51a5e2e30343b5f8c4a850d7fb394b9b65c377afbd2ecf661253117a0bd3788f151090ab2e50b1915496340d1256e8c93605f208cacca98b48114b5c44ce20f3eb43d510460ae2854506175ded0c51df6f5c11501395756f28612cfd3b3b7be26091f661eee36ef42752a33a75d450af71b8860fda5f239824afb849f6eb73311538c10905573a846a1dae80efad63482b1f282984a23c20f8141299b606c5874399c17d9ec438dd80fdfc7a42a22aea870a28955dfc0966eda3a2f55a13be7eeae96dbd8a212326e7b46649d27961f5decb0d86a7d5db9a6ebcff42b7f21c12c50c58ff93c69fe716f807b8b2406573eeb013acf60b6b5ab3da5b03318ea4eab6a40662ee05c8b4c7e0ffe4f9912331089c35073942106e37e2342d9c3085a6a23791511a212a7a9e72c9e2ebd6d85525e25abff48c8bf2eaa9fd9e98487709671d6c2ff974d75ccdcc6d6ea6c64789f20d22d3af7813692d0b0e9b6381b894a42e23f7093fcaeda239e2aa6f04bdbd4ba06f5a839acd7f013993d20b4bc9cabac268e2e14b3f1efa6ec161e4dbf3ca16c8dc253cad3d5a9ee80b268452c57bf9a6a4d2c6c8f7dfc6df2101f72d50bd2121c78428b1ab959fd47c19a0df095f038e1f1f34bb2c2b23044370f649276041985dbd7819079ec31431844457119e9f8d17c2af108f4a3c59418d3883c0a562bb16c7a27e751c84fd01c22224783e8b97b64b52ecf54951fb179feedf9c0fee81eb5c7c408f3defa122f7e151cc5f36f616d7dc7df42e283ed9ca16b082f8a27f6aa756aca4eaecdb1abf0ba885df91583ed95d0ee520a54479e20cc97bc58c4146ceb132861ccd1d458c268c1473a1c0eeb1739081f8987c80af11b83c6c71928b6d526345b1841361f10d1a5193e86e621c28d3b02e5197fd3e215c83e5b85c8f866c64cfdfcc44cbc0d915866bc88248b433995a994b33d5b0ef85d15f7b7e2eb23c8a01ff932791a442f183f6f7470a0dabc01cc91c9a16859d8c27b88fef51b229f529d36c2f077a8a810062dc86c1724a367b7248347255cf9cf25f6e24b16d49fe15daa2b38ca1c11607c6b3440e2c49a767d04cb93cbf3fa2200d1f25582c18cecd80152e213b251e889675691598266f53a8ee37b5e662c3c582084e3e6e91fc0e9fb39a25f5bf96043942a349c1a0da325e3d92aadd34175fccc4c0cd0fc85a455a71e565dcd604fd1174545a0e5a75f3a303c6d822e713a316441147640d643b6664ff8ad137c5293f2bd7f1f99ad7c0b1b65e82b829ad7a3c13144fe2c784fc9b663018c23e3d9484088e86efa7bbe0631f29606b7f77e161451719e44efbefa816260f49e0048c8723a9bf2094aafee6167194017698a53b94329cbdee40b037a95a1474512221f52c735f62dce4988bd177da17863ea70fe3a2dad19849994c92a3b130813cbcc4823b124d5b761d6b84e6990c96ed645e359ca5f901fab0db24622ba99c10f7355529f0ece39cd9dd1f26eca3e3c5a15a81a20280149f3a3cbd119c0d433ecf2bbc690979ce86c56fdcb78612a8e2b1dab990bc26afb669d8a3ed96094e209159c2881d012111b37797ccf7bb465971e4813f99096b6bbe61f7efd00d59b3cf9dfc0acb94ff0c9e5ce1531a40a9b746c7a61232ae7156049f7e2b0eadad6ec12e597a9bcabe3ae9a89b10a8409d0a4f85db2d38039a9208355560601275ae46a24ccfb3b97d0f09022acc0a780cbcc015893c535202641ebebd3b426ee98fb067692b3e15a1cb4fb38eb0122c9ddcdc98a900e601ade7ba9a5db7814f8fecf5682bbec70b6ce27f39298222261c495f09797337c78077377f494a4e4badf3d5210142ee1ec657c4f546675399b92c15401bf5ab92a68fd05743d34e827193c154342abdf5caba09b433fd2a1408557e8147a0d715480269e8bc7bbb243814c632b462b32d827477a32ccb784a7b87939dcbd9441d0435c14643384a43a02dc0b311cbf495a884ee428380dae84e0196d84ca07f7681e11391b8d818c71f4d8ae80ac0428d60197787c4abf0a5e6930f9d24f5770550c873ad2b0b84c464af64b28c60f01c9fbd1e223c57b25820099ed7b28e225114c3ad60d4c8e981198a6d4bfc7db83fdfb75c37c67cf240cc69097fe7552c6fda1d179ac240856ce908278513c6e334ea40ee1c6b024df0804ee0af03a142da0766156c2ca780aa0058a06c1d191bc4b8a82bcae819476edb7f3852115eabf60d05fd341de6b1b5b9a29141dd2eb9e96182767f30c8938a73598075a16e78525e893dbb1899bcb19c1d0da19c19402b553072fc8189d27387d8eecc8f377cb31534349d088d3f090c37f7a8c70ee389c2741a144c2d067dfca3ae7a4178b5a56a8e648963b93df691d12c4397b16e507f294c65041b380b5a497624fb5c9cd9522dd08f62d0631dbbe5503bbef81c31472fc482e9c71da6705902576b4b718991298ae2d12621654d820ced93e1d7a0572022d7046bab266d498ab1c6c1aa618f11049779a536f3b42c7d6b926269453a04680e4a9a006e5f9498d91bfec680c564af38f4c1651d094de4731234c9308e5309cfa22489aef031b8c5b4464ba1ddbaa32a3c6727335e9603bd491fb3f07caa4cebdcd13e4959667e4622e0131ea476e22ee78f8adc404d3b477ea5b23706fc37deddc64efc62ce2003fb0be6f2ee13d97cd798eb75b72356feca9bae9f90bce546fb44e5a093009dd3f7c017b34ea1a782f7b69874d9ef27e082e9bac1105780953186ec2119f3eecc273b7a058910d6a234bbfab080dcbae9e5fed752a4a553515776ec93e4b7dcd25f10bf80da1821e3d5de3dba726c9d2bda634a284d9bfe841afe8038d3204b266db6eea0931c50f1ac8ef0d0916c168ad417802a621826ef5291569d27e3f3e6f344f0935f87d30afe05ae6b5a637e8769d6db4607a467ae2cf6da8a9d81191f929d2c81c351fc037e7d376f134892a92063b49c364f62565923a6e43bb160dc0355164e852532a2c55fcfe6928aa56e1cd0f269e238c3cbdc752cd28a953b33452d1066ea41d687f36f70415ade8a0d078301d1a3ac4d3bddf8893fc6a629c4401febac875e359f0eb05ead779876b93d3f67c91343e155703d6449bb5298f13cd028e25474f8a37cc837fb559bec1f316b336e3920770d2dad474ca385d666d1e4dd5274e21cc1215bf57a86ed985a6ca6c16b2e614511cd572831517feaa97d369588856f441cb3173a35c5e646de42ebea26fcfa9f89c481eef5cfa0bfba61981f70cfd9c3b6675e038e327e738ac0020248311e36c135da3c9ef4671d895d2ced26ff7aae981640f26637e49e50ea8a3109ce0686643197046baeecab8f142c780414e13c6055d3738843ca3ba9a7f07b99c89d1cf3c06aa68538b18cc8fdf3793779eb969dd6659604eef4c0ed44b08a0b34f1f3e9d74fa0490b9ae8373c01741d5ffbc9010a0f9be6d9e4d2498f792514bbf5175152c4d8dc0cdc031c7b3cc32e2ef7039ee13e8c0bec52c9a6c4f2ee26bb6cadb008c4098b0369a8cb8cea487fa550b55e29c3c1f08ed0b370a7efd4b586006b8057200cc97039ba2bb9082ebbeefbc47066fc48ec393e3fa66a9ddfba140f10e7831f5a2e7eadddb2f01ee8daad542367f26f8fb0491ae22f9d462c2975d5a2534ca1b40d0b412a91b0becb42efb59937b3176709300b45e7c54195228fe7dff425c637a278863d3267afad499d8108a94611596bdf5159130bb5185a5222d6e7437e44635612102f59714294fe116b3e45e4d1103f0058beb011a8cc877ac91f48c9ec9cd0161b1cd59c7d3339705ecebaf227c4dc427d6bf695309606a9e24ab437b2b536697414bc438098384bd934ab8eba418fa76652344e0b8583a4b6ae86362c10fd05bcdc078c9b88d42c2b5dc0296ec1bc26de234daf41a29c804350066900d995e14bb3590885b6889048c3b847a51b8e853b1e254f8a737f4782f35c782342ab5fc0d90e6d912fb913dcd001122056df071047962805b855dc8a5943ceb34bed021924eeae0bcee39725854474c3930682e33b1d1304d8b97cce081abaef8e5f4958a0e84ff60c1bf504238e5b4ed530c06dd197644ecd8370c836afb68ebd2fbfde2f8840ff22b960d4f230301a283737f079cfca65334f65ecadff143285dd4af461a44a29ff21d26e1e673bd59cd8f9fe03afae3b209b1b163187290f8433bd24bdfb2254060307fb025e31d0c4ea1b028d34dba57d06fa58e4a76056b45d70a0dc084f6fd3b830f8cc6b0158afc7b79592e60ac44ac451cc299892ee74a2df86a3619809b3d6d6eb478ef5ff8d3b2751620f8057599920700de7b5ed273b25a140b9e8ad9d3895fcaee0c50b005e97aeabc8ffb2300f90714fcd6fd3562f8591fa12ac31471e2fe434fe48a7b869e8017f7077a2247dc33f42c76cf07a5e3b2344eaab492fa4f4278e2a010470fc19313944e8298fa170110cb107cfc391d83bf04beb9d69272f683b85088dac595b2ad1a996c7230b70138ae9cb4616b86c678cc9cfb3f572494413f0a7fab0d95202f366c47059583e25b5a0ec863f8cf7ca964d7a0c8b2e7f01ac9c62bfb863b41b263e0efeaaa85aea7732b65203745ffc3fb7da994087ed072160dc03a7245404ce3740c5a1bd21fd99e6a95edd02a8ba7f41ca218dedfcccddaad5071cd601664aff365957cf6d2dd24c059c2434ad9894f2b93695cd2bd5a60d1e831e6205058c0db1c9a15edd1d0f32d72f20d3d6f4d0a20566b907a89bcb78322e3fbac1a2c1be9be0e537615a1c476ad91c525e86b95f7943290262918dc31b4ff1542d2dcd05490d42c9e93c06eba1784e6464839487458ef1529c0b3e210ce3eab4340ff3cce05fa10f3c0967c4ba41d7c9c5de3b1ad4317867136aa4a49bf98530463f51030bc2dd55c28f376078761eda42a39eec07901fb1d3d424cf79c58de07338d331722e7a0f9a50ef947aedef83637aee5efd53b1e4bc2320a7564ead382749a1eeba42981521e48b4c65b5940586448981fc4039ef9170145cad50bbafadb49e0b7a6fac0a517f9e240ebc5f28680cf61ac744e5ba507dab202166c6bca18feea4c872f047e5808dabb0a70707b0c7857007b5722d4ed1ff51b56ca583f2a067453d7d8caa000a3e2e1ecf01836351717f04c2a5b235aa72e81f6334849fa5d82121a0e6485489380c7c6106d24d1c9efefb8ee7ed9df823d12cc73b0429cd046dd217f8debf289d825403dc27bc5d7350bbc3f2d7bed1e433bd6b0567b69b42aa8e92e02da2fb7ddb41d6326b5f7aeb891a51060e7ededda130ff8cecd531749c788b57bdb46c21ce0ca0521c6196dc8accb9838de2f6afa770d209b27724a8c96b503f8fe472f7e48683a66346ff28883a4ee47fa777e51f722cfef327a25183a1f0d23a75f0eea472dd2b93ea7ebc519b90cfe097a2778c0f486d5398ab60a7e65bd3068ffcf17665882b0c38c199328865b85663536b368637339da501ac17d09f84afd03745d0e68277e4519c1c7426eaba4e7b4a450fa91d044140f8fe6343c08580955ca57efac0a8e35d0c5167488419eb204c9e8adbd6beab4b83674e91664f99b00ac09e37136f0d122bb05622e9497b73b788b5b4c7553a0a423db3ccb7465f30bd7568c9df9feeb5a442bd87b0cc619305541dca61cfb74f85a713600232bae0d079dacdd6bcfbca5687e4ed62044dcec65f1aa7b2c48af84fc70985c004831e9dba88f6ef09b20516af284a05a311d6f317030e463c7ac5a62bb29147470af5cfa82a97b81b43441838a0bec624f3f7e830e8279e1561303903be8bc25279598330e6eb6f62635ed6c05ff4ae530a49743251406b10de6dc1d237aff14700d96552464be6d4fd9a6a416c49d8cf99f499c9f814d5d3f28f93c43047678507a1037d888ce84748c964a34bf9bf54962e95776691b6a70098f85d9ca54842c74306f255aed15f5467633293d4f481733a25690861d731d90dd0a1dcad50b55a24d847d6ed158e9bda6ed8f08d8ab0a61ca62f358007bd041f3f27944aff3715a27802d7707edfb6f43c147cba4af5df8eb0d0e76ca6467deb3c7ddb23d48949617c54e5d6702b537df58e10ce5b3360e861161c8b9240fd8a7063f0297a1fc146589672321d73230a3368028a87c8abd4f3106eeb7eefc6930c8173c12fbc5cd85e8a96594e5ea0d34b0082d9a3ac58b7c91dedffab88996429eae7a81d826daf5c25fb8373b6c7d41ce5518c5af08030da1cecda8c5a681f931abb96552035981e582b3d33ef7bf1cb72d0d8264937c4c7e6790c0df08bc115c372c3205bb58daab7c4e8d39baac9d6c2d2e04bb7472c9a73130b298feb8f5d87ce79c13e7d710b8028d7c415a577ad6d4000938c44a8e17583ba5bca0e23d1fc5f243a3039ba49d44c33c60376ab1072c1a915c1c95d05dc8db0ebc0d171acc2e073f23741a456216cc622739ab4757333f0f9bd7fe16531e547fa9dd205439013e2e44d7f7d24605883f70291db0b1ac65c28df91fc95792141bcf1477cf43185eae725fead6b55170293caf3f8275254c7d302cc46ea03530ff0b64723ac650d080e9b294ab366cbb1d081e54351fd7d9e33e296ebba69424a8bf524a55d179f78f06641209aaefb7f110bbe11a6f0e2a3820d438833a2602ae6db469f0d42ff593c9d0265f72511966f7fa1d06ca728036a6f3177362a965eaafcf2659ec7829d60510560fd178b0cc1d1c12cfab88fb015e2cdaf7a6fd660b6eba9a1aca2912001c091d9dbc8b522469bb946ea3c588ee0d87b7a1c00662e8ce99505c0865c2cf1b7b122debd6e9ac4ff8b93347974bd0ed59e873ad14ea97bd934a70094a3d1f1e139dc3c48999161989b096177cba6bb4cd6332d06f4edfbb066576bf7dd02f97a2c876c8f0d2700b9ece0ee6b06f2109a7257cea63763ec57eaa2877c8887d1301aa3ab468743aa8d48b85c6cd99021dd7c77c2e24ff4a99e29429d6efda3925773fda46c7e304908fb09c30a69e0947786c28cb08916d0044256031d55241ea94280f322109b0a13dede2bed550e28cc0b003cbe16f439b7d7b94602a64e35bd8653e6bb1fc8f495ef5de59915d01de6cd087d49ed2b36fd78994397ee31041f6360fe9e93c56c194a6b2e35219cd56d62fa665bd059648c2d32c83a55184adb84e166aa99c870e4ef3430316e0344dc509f0c5669c215fc8218d75569660a26be013a88092b9f6c1ee3da849b6fd113ad1eb90d9a7a92916418ac6f3dcad499c3f03d659ba967432a63f776829756c95af1560b9d572c3a343b17714fa1063e54637c7e032c3781a5418101edb5e20c28f20c997e008824c2da0de48f29a1d902e107d3792e3cee0ad1783139f32cfeb94f8db7f51ba2c63c7e8fec86fde5a3c786620f22a649bf88e8e2f6b71cf4b6280731fe849fb68f9e3b579592a4bff4beced32b4178ee8f832b406f44848a82cb4a5a82070bfab1c0376ef484a5a182a00f524860f811c987840c268ecbe88b0d41b94d56db42f4f4c645cb2e207bdce81d51a2d48bffd19db7ae3ea85de77a1f7e09000329906aaeaed723dddef2429977136c25d3b780450e26733056e9a6e17f8147f3ad357ac9393541194ceee5a4e02130e37fc54705db7070278a1b444cd6f5dc7a655e7dac19b0f705ac3f6c68af787001bceaaeefa0642c5146e9a1bd7d38d19750511a9d3f352bbd1373e8492b62e7e68845eb3a472d5d12509dc07d09ad9c0ed9fb835136f01736e8b27d69ff4a683a1925d8f201213aa75da5430b0e2974d5385be019294e9687d1ab833f6b142e864e14c733e248637b11a76cf7441ddc96128e2401f24f786bd081d575b3d45b2ef25dfedcc20a39409b7057c6ed933e5e6fe4bd95da1f1cc0ef1307c712a7f3e74a9de7541470e3c37f030761a315abd7507ae78b6b3746fdde7615a07c934bd4060dd1265ff35eb1658531c6a1858bd729a19d1f7e0467fef5f3630b1b700ef54b11529536817002d157be3371840831b34d934636081b36354c48ee11049826993cc76e533bc7c8b175e6c400073618411ed105a3930bd3e1df4c65f5868653f85c4bca10da4a5697c3fec1ab3891b406d89f5e6a268224bf2848438e8ef00e7a02abf6c28a0037a093c2858114321915ba4a646642fe08cf7814e38d29e6a9902333a8cb32a3d6f91f3b67ccbee5b4c9c771bb5d793cdd48bac6fc2293cf4125543530384b9054da11bafc05ab2a0a491758b7712342c0b1904de98b5a6a96da4c2aba846f215d17b18ca3d567c7bda7fb8a0d2eed6b41ccc1cabf5f4bc09677c9f0bfc4b9c29a200f21b2e9eed8289e78cefc003b204a4cecc61610e021f1586e53cdd398dfd2446f2920c05addfed556b565713b760e975cbb3d9d5a8ed36066641a610fb26a525ef8ff2e8934ee0b241e5c925fc5308e827a48d3a8a54288921d82afc537c02cbd6dae02a03ba2ccb0b95287e20828cd14a1ce01b4f97143d27773865d4f17a240688f497fd585827c964107e01b93ee5677b99519fae43ea6a4ab64983c53bc0a2a2ac77b53dcc98f55a1e4514bd0757099671e66bcece0551e3ea0d2e08b3ab237820be83785522eb5055afc273dcf72a8960f93fe6914abffcc83ec529b9c9085f7d1185b48da6b4c31e48f2f857650b8e5404da3c1b50f0f17a40fd123f8b7813a7304524c28dbbaa44b423c28f2b37cd8509a6fb8125873dc7476d49e451dc0afce67abfca4170114ae8d23cde8563510987a8f9315ce0419ad15cedb93ea8acdf4aae20d0b27dd51ddad02c5b7517e4525588e7940bc16603754fb977e68ff8ae395e37fe0963b3d2de0f40c6ec195824ac798b4d7ac1d86785d456e24fd258caebbfa1bd917d34530cd0435722d143c966726481e00e6fe82ae5d8e84cb269dcc1289a67d140f8815df42f082d5cce8f6b92fa8633a568afad5730721b72736b3b402b6589cde50f354d0fda90dbd98e825d2c87b8fe8ed24a07e0d5796f3bd7c24ee882cdaefc0a02be7a3a841d382b5393aee779eb07eb86ea5e11f938cfc1f1a36589fb00fc2cb183102ce032960a2bc795f346c6210b1f463135e9d3b059a9714d08fe432864d410d3134c351c3897e802bb14363b71235ad8ba6631ce8857d2f2b0ea3d428d5937a4c934174918eed2bf3a2e15f3e045dded623115d3db8b81b7c12d78463daf574e0bc01e84293c05d9578ec2a48662bef5e622df3cc8b138cb1be9709e851eb02c72a180fd415efd81452fadf7f9e99b3ae4ee75991caed251f685173a63d2ce87bc915ead6fa7d0dc686f3407abde5dda0e398a6bb2d2021e8141b1b5a55b9dc82a2e15a9808d9627f5c675b7a88edc86947852845ca1f9cd496b747764612e784efc1484072b55b84fbdfb365ec626cdac33cff47f82ca896562c46a9f70a68ca38c2c3350d2b68eb59deda71028f88c3a1f1da9b95ccd48ab9709f263bdc0192995804466b21eb57c016bc129d0d6d0094b23b8f25df7e493d9ef643c37255e63d1e0a31ee950a2a07052a3b48e4b08b888960c50477a496c4dbb2f2b9cdacd0cd433e9b73093105722a09b5e91b78c91f0349495c61825a3beeda2ca27ec9e6aebae73af0fb8fb967b8b5f03b7fb65d8b1374e6dabed97c51fb8d33c4346159f0f40c7bdd4a7d96b67790808c8f5a323fffe14cd7926f46b4a3c89dc28d6a1b6adefe56be33110144a085ce0a916e9d102a6e023f609a17afb29f18188b0698b37952aeb549668906097b58641ab1373cdaeb0f9bc2ac592309b9e67f9c9c43e65915270af8f44e32d5f4b95b9c551d22cd360b9dbb2e84c1923c5f4fb915b555aa7b2bb5a7ed4a7ccbc6e81b25e0f28f00e8df35baa4f769367111c64998a29c3d22889cf8165cacb9a8beee7cdeb7218a787065c84aa6cf51f938b0258a7378707bd48ba5c30de6fc174fa805837f07c1e1047d7de16f570e231b92aa88607c9c67b9e8a344aeaffa07abc5c342ed82b69270a03c3c52309ab4f2d8e6727dc8fa34197e54f89b4a52422616e3290e1e740b327902963a6694e00884b6c7fbbd888ffe140026288e401a8e4d29f7870c860506d7bee7f3d222cf37c0ac9effd8a216939d6e3a86a7575a22e8ee0313c2b146b37eb6a0b9bfaee1ef88f9c576d55276a564f69e6024d79af8c118992b41311951c6a0c443756b6976d7360f33bd15a43b3ed294f64e04dd7ec2fe5ece8b55ba28a577bcd91955cd08192a17cf6c13916c6f8e1e639c80fbdc8ee85292330467400f24157d2f6060a74e7199ceb421570ef55c636ded05cca623c8ae3b3981f9d29969f3de216ea2b0f5d38968eeb44a622b76b0d24e5df883dc0c16d66e7cb8576169f3ad32cb8d5d0e2b8834252ad043b7822039036fb1b019214cf8358700ebd0f5dc37de45d795ca34cb0ab6640f09ab29bd084a569fa1f127e52d74071b2b97f18f6d33ca60a297fbb7b13cd76b56a6ae54f5a7327b2d166833a39b3d55a7b7455dbfaab598b36d1ee09c2ddd8d7995aee2ce5688db125f1e7d2ee9b4e07f51be120cb1bc0d95b79ca2d777a5dcecce1d2159933c8001216f548a8b296d59a1a873bd3c08244789c28d3976dd55487c67c3311cdeb9f1f6143887af53e405f7db76b846ecff5252ca80465b3bbbd3f65a1eef97572de4acac6543b2d003d4c7c50b758d9564619bbfcd8eee60e429c792390bfe2448a79f7b3954cec13820096088b25e702281bd0434c38425d3069188081e032c949f1e31b9a3727aafe7e14d21fef1f70897e20ef4a567542ec9c12401903d28090b9aad9401fc566279c041d48b726336242598b8b42da98cf0fa01dce573132157ba6af1d018708b3f41cf090ef7e0d7b2b0ce6c86eb1b6628c38687c5c3606a3b30168666b5a1537d0d91b55c1a245e79aa9c63d09aeaa8545be1f29f6bf0f8e792c91a938a06d1af0514014746d4118e25f89e0019806f9bb3c370a22f9f1d1785a4381870a0453a9e0d1a0e6ac3557a0e7ce70012a1186ccb86f665d781399d17743f2368acc60fbdd566f4307462333324147661ce6366fca6bdc2b0fc90c1bb60800c780114b161e0ebbb35d247e535f264a116a6aa0f0581fe607ae4042a898a49671165e6f1218377b9ec6f7d99e85bf416d98335de0443a7df5a307426629ca04c3280aa2b5303c56014a200271a0e774d385b78ba6af7e0003203fea7dbb6bbe5c90261e323de7f21f42d856e967d1807de42c1c72a0c1092fe036a9b8916e660e38655df283d0216387d708563cb8db61186e27d8115a98e05c1afdc4559f745d420df7419c9876747f55909c8e4896f7cb4caf41e1955aafbb4aa43e865af31924f160829d3a8719deea59d9511bda9817a07f8c05182454ca21dd229900ddbc67cf3425b12e3ff1bf9675292c1a8bc2bb8577bbc87a65620a984ed85d23325a14893280630b2362bfcb3135d1ed676204b5738b284318198bd551116e589e01b3dc104624ccc36d76418beac9cf9a2f4ed4aba3f126d3b4cf5f80846f0db96e48ce31ba47b09a50370bc82009794a68cb698d24d8ce464444b795a86c663cca50782e7a60d0f3375a654a3a10aaab8a125c27e51430b037b4707a9e40d724130200244dfbe0def1d9b767a87fe277d4c1f1051a0a1cbac1d494076aaf8adfd78e7624c60814b53b45c31ebbb86a8a86882bcde2fb5f376078b85c65e4824e59497968c1c8fdcce32c5d6c6506095489b44ea93ffe9e43a7c92140deaeeb5bc86bc8d0258012ae18be02066a08f0c7a06de2aab9a645040754a231e3301287abfeae1b5c5ce5f541675ea11913fc5bf6fef6818ad7e7153f331a50764699599afeee474e90345cf876c11cfaaaef2d16e86e31577cb30628c10575d4842183c73e52f4f20b1a9e9f57267327072d18a5265e310e088bf24e5b8e12796d37086e42fcc196792dcaf0eb67be10f3405d4a7067a0a3c4167f38e1fbd58c09f067d9cf0ba93009e2e25a1c0f9413e360de60c96015aafcef59f322a3273404992af6bc64fc321638c82e141664570a8ea583ec5ec72b1163a8cd329e806a984ae7fee1b4156e77bbb0a252be92dbb13073fedecf613089a9ebd3adb95006437529769642c1915b3aaaac511dfd6ced7673237256d83dad9b3508e7aec9862a52575eba8551f728994277792b4401d8f2065b01521e09e436544b57d8acf178b7914cab1c659484e10845644db36d8d5d80a89b215e37d46929d02b094a75f6b25846c0a38bd05766574201b111c09784a8abba2454a7955c23cd40dd9e6b3f9c02b7b63b0c7a313467078f2cc64497204a5fcf90ebf7f950023bc8e0db6aa8945441415096b3fceb536ea1d66e28655249889aeef62f6760f87f1ccb2789bb5e08fea0da9225ad31709e97897f2e734dd1a71f9f46103d6efeb849bb97c0f6884456a6556392299682a29106fedc06e4a480b387ba3a3a896f0d757f5eee3db80947340b10f995c096ab8649cd00cf4bf0caad4392a68e6232a6def2b48afb0b7b89eacbf44e2aeb98bf041bf7408c502b0f08c6b32d21f1f56278172ed67fb161b8382d71540712db4e2a9637a0ea677ae17ab37b85cb3f6f550ae1670659df942c3b4285c3fba7178a2c74a0559ac71930bff2bf9e02fa6616b70d779a89c28b63c50db3303809f962a288b887cec2b312a520a789bd6cc1649503103745f6f7e62edbc75d932104c0910f098c2d90e02bf333f5a2817a4f48f4dc26558df91ab022c09d259710b8818b60501b897b0d9b4105da52b675fca75f12a9895b19d5ccba6c725044dfe9fd84643a81f2e554c0fac9c5f3626cdea0c18034ea65478f3e202707a40a4bfd7dc29e0ea1e70352a8c6a3c6b52ed2d73089ff2b6f20723dd94a4fb7d72f3f445b86407318a31abebd7002998868c344c18a9ae5ec51056323de57bb6ee8f9c4f51b82d97cd892a9b37cc32e285cc2bcde2bccd5c6e4f356b461337dd3f9351c6d12d1e87eb6a60e5350a342b95044bff6d54270023fb82b2332f8a4b4ce3337935b46e5fe69a085ca11663bf4f829859e376d76ebc736805eee83c8ba416e7791d30d29d3d49235c261fa625c0c45ee73cb6e182002ccb5841f5cc3c2a4964c84a146a66ec26c11fd34016bcb99cfb4b8bc8d393604594c7a12868ec933b31d01ec94ad651fda0c0769b94ddad8145ce2b6b50678170af22dd9461201bc530b683b2e0ff0c97410c912c8b6ecdd80f3758706ec9e01a12c220c1c4d1284a48e6f31d2e01215b405689b6196166201a9265c94c078a651a5502d632f530c05868477f89af5458b0be94e9fbbdfe364a8f422568f07e860cff5ca6cfeb761391f4ad50ef9deec9ff0578a11c5c4163bff7de16ca68a30ea7f468348cb593fba332a835827ea73a155e879593503ed1fb0ba06f01af58a8ddf783faf6030560a8ea02a35d7fe3820c2ae2ea034e30166c078a2c28b5ee5a7417878ca5efb43d755ac3eb1e9309ffed67e5e545f6094d7b58c0add5013b3e4504360bc25a1f63e52c1bb87186819e812dabc925a505325891f9070e2883cfd7f7cc381a55584cb320d4acd34e14d29d5d827f6cee9fc156a22aa649164fedf6ac1d032ba58b33ed7df4b7fa4e1b20e4454d08bce037cafc6d597462c56d00fbcdd89f3185ada7ca08021b93f986e8fe64a6726e91dbcf30af47b6c497ecc5171fef0e09729b5e0a6ccb0a3928ed41dc85c4962b7a9903d7ebce4bd4639d4766b184c8368c6e833aaf847cad99b173282b97045daa36ee9eec6312f521f81fb863ea3cdb04498d08bacd1879878a1beb4b3d508cd47f9268e8debd3effadda33d39eaa83a17f1dcdd62799bc32dda62b2edf8ccd4e51badeae0d6a2074ee1ebb451cc0e431cc5126594df1249b4330c4234c3943b1119ca88a6aed0563b2603efae09c0b06b8621634c076087518a91b17133b054deb45faf681bd35b45e8601cac4ef5eadba46f2d1b6ee917eb033b7d864f9f827070ae2a2218eea2de431a76b85f0426ea6b1095132e9268766427d80c6fcf01684b8c9ba632c3515ea26a90e3c9b26629b6bce2699cb0e43b09ab24107028ce3559f715af1b1782c3f224b32282fc9f5f25e69958a5b85127f8da897c856b31696263a27d57554cd79ce39ed0f5e18973bc07e13e8ca88365da0df90a12a5ff561b78edd75ecd04acf1c41a56b25634eb7a4c020fe51568923691dd5ceb74065aeeee0ac76aee42273c5c48cd8ab0533f61762e66c918c27e48f818aeee23ae80f386a61fa19fbd4910f856ebae3013586df9a8c4c7f83b947063364bf49b18e50ee16a10574d6138b6507f0f831c18ce634782ec510483069c409b6c566abb5d9961bbbe9304d9a05ce9addff41bddb2beca21052ce6c7291919164d872f6f457a48ac0304b5036a86d7b55510302b4bd201ef86d8bc296d48e34fc901b723346f8a735137654faee30e7e87511663204101094352730b23c6c3def0432d46d23f7dfdfde136a81a350559584d290f4a4ec4d5843a9f1fb5461a218410b2a59401e50a580b8d0b55a435e644d7026e13410862f8a512c28a86dfefb7bb1ff77db293d074a1ebfbceefdf94cbfda012bf3d189e9be05dd3f571e165384ad987aeb983eb21075bc2bddbf109f60e36e6f0aaa1e9baf1c9c56c045106f5f8fb30fcbe77f3359f70ff462967badfc659abd0292f1abe9b358882e74629e048e528f4e4137a22a5c871e937ee94170d5db5ad29501c2f65a837d66fe0f649a56081fd96c8aa37aee3b626c172ef9e82cbf5ee16707d7bd36aee230857c8f775dd47b5f0f0bf4f6a71ffe6148925b562526b79fc422cf9d511b9c6a2551a80436574ab34a08419d13b237a2ce46444a23b567905e322c27c10576ac921bedc2ac1abea1a264447a804a2f7fa41016150a0307902c7981ce23f6d6307006e3e6dfff613596a79564cc3284f8beebc6f3f0e0ceeae47e15cae87e315d728b4e1af70a3d08e4fd275a4da74cdded0f0be5fcb92885c845f5ddff8312779575122af6cbd43bcfc8fc596f1945441d8ffd182086c08911f63d10af13e54515464d544687de3aa50297b10360278f04afa1b2befacaf11c0b1eeb7a5dc46b9ed8ddcfa6ab7ddabad02428d0d8890bd32c4d9f68d52181cc3effb564a15ae5e8af7f5fe5d89bc17f2ab836d3dc4cc2dca2dba5bce8beebcf5deb4eb6eac6fb70aa9f675cf825493dfbb26526dfb959542bd8d51e45de39595423d3ec96faddb6a5c087a20f8819f9c226f2cfba3dd715840204060512c3a42898845df47bbae6d9f1c3af28478ba2db9de3a20d4444fde1b6bfda2fdd64628ef036d60db2922965b84cb719c10da1b37ab906eb9c96df3117adce6799ec77909c31fef8cd8a26c23d2b26e99907e074301ac7d5e7b66c09d58ae4dba5c2e57f3fe744f1b7a5a885e0844fe9224cdd3faeef9070871f764d0ea61d11d7f50899ed5c7f4c5868dd68fbb8adf5ec9379b908087937849a3f4ec1564459746e9990d4cebf7ed9cf15b22e6c2817f3dee9e907d48a2353627244284cd84a7f5dbf3a7802d8add6dc33a43626dfcad4dff94bb4ec69ee77963ddce6d42b68edbd6a34b25a60aca5f13fc94651c8b717b190a6999ac0a47f753b61bc41b6e373f952fe356d2ada4a998d060327672207033685bc97cca2a50ee3bbb37f2dc9c223b73e122174c376e1b7fdb3aae63b1d1901b6d6666666666f6ba9eccbd1c4b66e62aae10b6c2872aa1a7fed636eeb9b5ad6d7c24cd16859453dbc3b1ba40c3cbd9645d2ed7a8a4654d446832ab70544e254de4941c9f9434f9bff02fe630fcc2989c767f855c4fab70fcafe85f67823ef8bb40b9abd0338f0f8e505aa68277efdbbd2a1ce560dc95740bb158ec8bc87d1b3faf0a47b73e43f4ce3577c95b4c2ac6c403561744e83a87ccece28727f2228ef6797fbd68fd7e03127dbdbe28ecb0c35ce74b292573dc7952919f28bae817d2f0ae29453e7c285f97af2f8c89d0cfa5f05dffe1bbce778d5fcb6007ef336ecb602fd7b923d1707e77cdefb2fb3c2924bf51f96d0ac9a2a922abf0021c8bc5625ac4af0cf120144d715d57c4953f8e5904a23c137eb225a072e4f9d47d8ad69df3d143bd750ce8034c5cd06dd4b26d1bb7c97a65bdbdc4d8265f9b5442c6c221c1aa3bad1b63a10c04e24bb6462eda07bd88af1afb7aca8b4e79d1c613c4794288fc64eb5021275ee5ee21511f3122b16fa32c0af1545eaaa656031162495114a3c48edab08947c6a296d99922e2c96f0feaa3a5d78e5ca961bb0763d1949258c7450cef7a9558a15029dea71451f0e0c3b9126cd808de588bbe59795422e9476152b4c2e298641b7f2dc68eb4ac8bec88a74592068edf77d77df42c4acbfa9fcf5238558052472c8a422c922e29ba5c2eeedd7fe64b6c596f2172e7bc317e2ced85f5b146ae7f7508edd602006dd7e8c212f920ae1c8afd44891cfdf101f17b38ab0885baa67c4fe0b9f96a1af8fe07ce233dd4de473f49fbbab108880d96172a685d2daee848cbf89bb7813b842c6146881713c50a75645b972a235030157a522212f350f89ab0235caf5ff8bdbca92028ba6d565280494b726805816e4b5134ec5ce1744d25d2f5e49dab9e950cbf5349343c73af8631e1f0b225cb7df9d40ad05da270acae775f0a7673ad361dbc28da383c99055db94550ec2b2b3af25a23742b0774bf314e223909bfbb71f401bfdd225dfdc4716122508cc341978b348ed9176e62cb7a8663652dd5709196525ca4a51440efd32aa78c5c728a6e9cc4fbc245fa9e114ded8db569b8049d25ea074dd9c50e69b1b2384bd4c731e5153bd4f78cb0827ee124d26a8b34f54c4eadac2f43e07de13aef9cec7edac9a91f0fca1b3d276f09cf497c02fa8e38a41a9662299853d349499164690db2e3c7bbf1ddd2f796d688694b2e4d5a303b9c9c37defb728e84d3b31ff1657c41fb03b47fe3f5029a3fd367fa6822b2ca15a3fcc92ac86388f2ab7ce34571dee7f386c23c3322accdcec0854941fb30295852852d55185385355598538541555814edfab2aaafabfac2aaafacfad2a2f5b5555f53f525555f51f505555f4ef5d594c424755543ac1a66d550ab865bf59544eb6ba9865635acaae1540da56a18554328da50aeacead2aaaead1a26d570a9864c5dc725a667dffbae309b449ee122465e5d46d0be6bcbce64d4132e2eb40fea695807ae41fba016b8b546de5bf4b92869b2aa89a46d1d9c83b17e1cbc68ac62d18b8c3556e41b881b9c68243a1191c83518eba7c13318ab98c187c61a1bba6cac971d83b10a032949dbe6c7b1168db760ac320b2e64ac17f221638d0df90563152ff893fe2063fd821cc858c51f638dfdb88fb1dec785c62a13d292340eaaa1248de331d6221e8f8d55b663acdf711d638de518ab9803c758bfb18a071a6b6cacffcf5865dcf20c27e9c4709127a2a4a23022cfd07efdc41828a3589914909cb26265fd2876d629b13229d5b3cea96572aa671d54cba4153bebcc78db1726695d540763fd3818ab5834d65891b17e03591545fb44632da25556755944c6fa6930563183b1c686c67a591206499e931ceafe0563fd868c551432d6980563fd2835a53ed62fc8584520638dfd18eb7d6c5a42a396a47d4c1c96a47d453dc65a24e33156d963637d6cc75863a28eb18a3946a82f68ac9f8863ac62ec401cd6c761fd8cb54809100e7525491a980462c921319c0494b3459c7a06be81ea19d8663b333b03a55859fff3196b4c848df56092960c2a298a36a8057e411b7c4d309c60d512f55d13b4924357139ca3468cfa245397459bbb2cafafdac9a9a577c565316d35f755c9ad246eaa11b95750aa8252dd414f8e2328a52425695d6787fa9f580794b2816905b5bc2ffdb8cf1beb5687368fe0d208266db48249b40f2af5c1a49ef19610a480326f4b3c5c49b4b768835a0d6a812a6017102e1e687f99b6b50ab6417b1ba910582b5bca2315a2ce1661ba8d926118b0678119cee3441ca29ed28855d65d8d9372ebd06d9422c73a7456196dda27b2058da1695b54525212162a2d70bac36e2d74e8141c5a77cec6d24708b47df48c4f663b9a28dbb94d0ec196ecc65dc0305c180be0bff18aebe071888af2dd355ef91e7ef383795162bf6e5f33f702f9540a6c09dbbb510a37f21dab2d498c16d4a6e414a5468a8d0bd35695169e35b4b4b4f06c4adbd29664f583e0b95c5e17815e908f5ea27a0a42cf9a08b94c0994282d1029f2e416146b9928e45a2bc3dd803c21d7c6c573b9bc6f4d78a80ea6cd6909daa6c06aa9b2e071819e142b8d405caa2c5314bc77ef15f6caa158cb588a77f0d503c7a00d48be2f047af7d1b3a0960981e3084d4179190f4a3c28d1feeaa0fd2bc1a894ae681f84a6ed1d2c2a1e38401bf4e48c77a0fdf631259ef9eeaf9e75cdde9f80e3c68157cbb6298f877085d0bed7af134269370739e260f186f283bae0220bcac741070c39947f630c31c2a07c2034ceb043f9629e34ee50fe4fef69365a0fe5fb68c98285f26141fcb085f25f4480e942f9211263c250beeb890932940f3a81a60ce57f6cd6a4a17caf8a29da507e77851b2acae7e260f186f2b72eb8c882f2e52e0755d23152251848aa9443593e41c221872448bc5d69a2bb9b79f613611b85fdb0ad48263fb2f74aba37188c09c7ef46d86f7389fa0d5bd2524ac90d050d7799999969a2115c68f7b6935ead0d7f6477776fdf0bcf1af1e6447efb28b15a9687453128e6e3f3be8f8ca58d044b92bb68fa7d5fd07a70e8f73da8695bedfbbeef1319fc3eaa22ded0effbc63a45481153de1049422127dc8ebb44bc29d94f1483623ebeeff3be2abeeffbd7331cf4bb98867e6be894a2afe3b69818d46445abf8324a74a9c048d10ee8520d6106950dad515f52354dd1a502534589d0a56afa423f49e3b143f23e566c07817eaf1f3544f621bf58100f629571972f92b4ae26b766210a2775efc6dbb6f9106999c4d18578ba1d40811454b615b1561b5214bf7a1c298a86b3ae92e6efe16b0af9f804f2e30790594f7ffee33e665d38f4e742b32e16f467ad90a2da8ad6296b3565ad5ecf721d877d9b3a3878bdaee393431cd7160e1581c8fd6b1574a073478a62efe3d6aae3be9b18f405991172bd340cf7754569f75441078d3c6ab0d1c69edaeb3b702d0b526dc9abbdc6ed9994eeb1fbcc0a85fac47adcebe1f5f07a783dbc1e7b288f58f3781886fdda2828b729a9d7d46bd8e68d157cf8fe36c1fb5c890427141ace5a44bd3d14b689a7f26da3151eb0b94b24de9b54bedf20057cec52c0f795b4f889dfbd8be0c18be04865133a0ea1073d0b50d03fa15945fa2325f6a53bde63c62e26d15d221e638d8d7df1e277cc0a858a47aa12c18be22b78f12078ef3dbd7b63f5689f00820fb7b7ecfb812de96d4f3e7c95dd8044fbdb762ab0571cacf0a03eaf7d1809483d5281bd7a7f7d8302bbf7aff63dfa1a77d81daade48c5677cdaa2e33a5e3ac62db15a961b7f8d5bbe5a961ccf22ee501fc7b3043dcbee501fe859c63aa5888a0f3aec4ba4ca875f9a2368c6e4903c8e99e5c678c58504993561c054f101a75a0e7b05c546962dea70d1069a1ad028ca2128341c01897e97d21d569168f86dfe8023fa9cf7d00abbf78f32acfb04d87bac3e236c7c7a7d5f630e453534e195b49013ba512b0ea84894068f5691b48f44b99d7cdefb5e095698ba46a1291eb522e91073c0e0a1dc5f31ee84eeddf8e272e83cee469d90e3b6ef0e1bf76ddb5aeeb6e432c21552b92dca4c62cba4ac41d2b656ab7e599c6ca25f5a269b5a26999648f6961c925b52562775522bf56c89d3e2d6c31c3373ac864765191f38022028913b2f58aa60f3b8ad0fa41a038756e90eeb5e40875830d26d56a652c27ee4065bb2973314a9fc8f048275b0255b77b7ed8af81ac4b2894d7c1d07b024122f41f97b4941f78bd4cc27f88af8c27866bc33de9d22c2d4f081f1cc78773c339e19ef8e77e6fbf281f9be48be105dd8099c152a4cad50d93d94bf6150869de0511e6b05e8c644c298802c7daa15ba7d93bdbc713e543c0aeb5e0c5b126e2f0fb6c493122647e04e85f7d06e9c4b24a9f01eaee640854678d1ed4b99bcb6259258a10d4c2465e2a2eb020a6ad98bdf4c86e96e4d591ec80a6f7092bbe4bceee3d2ed765774ddb7675d27c729d95b874564313ace83819feb3eaf1026a5fc812de97cba4e94ddb7adebb84e52eedd8a0d03a3aa29eb0d2f116feb6d526ee26bebe426e526c664739bdcb82ab66ddbb64dca0a647d3decbeb76ddbb6adbfe9108652ca5d6e937293524a181c2833cb52b6944d4829a47c62047213c10b51ca4d8ae085dc44f062934fb20db989e0c5c62ce776967293b20db989e0c5268230fcf1ce9cf1ce2cf79745ac1bd3e77ddf077e2e49635a103411007308b6c434d2e56ab96d43db5db0255c0d549e19e6e4a31c0e54c2467851910aef8c18a7c993a5bd92b4782549dab784a67bf2c083f0250271478a8a603e40373622329928ca6fe95b92a20f4f8807fbbd3322d0566d4c1b530636a6adda9836a61b37604bb80fc7d2b7248792445e7ac1be4fbe986e64a097721f7f806f9b1b6edbb428771c8747e49ec25a9cc60760e8e1c286ca2a4e1e20e40db95eb650790f7ad60f81ecee962dbbbbbb3f6eb96d6bb926c461820c2811d1868c311ee01f828258f325894b370a02139010c366083582d07ae272230825c4240b5c40dcb9182a68820a13d0c9a2cb17f6a11ea1643419d147acd35c4e49c9058aeeeec6fa716315b7713b0f1479115a4e51c3cd195f4c40069b0e700f4018a0524ad95b52b85f21e7241aed8618a2943d27d1ba6fab1d28c34e602c7491e83697bedaf66e46e95973a85636da5dc8093bd16e9463cd218a58db8c6a7721272eda8d547e28373e6ddf2e6811ad483c3989eebc9186c867ca302a17a99c43b76741148f94deb787def4b9eccc5041061c7a06fb76ee618cc2a6cf288355b1c656d284e4bf23d5b87f92d6ff1ea5ff8d57d0c85ff9de6314f04a1f1cbf2b3b22d5f89b748197e358ff034a8c1ad14401dfafdbd478e53b38a2a94ffd14f8046b3c90d4630e9c1564cad42c90c398d4dfb62be9ada7e695e7a9d0c2b6cda8a5ea6189ad2ed616dd98cb667d0bddb6255a89d00d6bf3bc905fd2ca4d760d49f24b543e1613453ebfbbe96b6212e0e1a4384e4ad2f8fb44a9d8921f1f1027ad128b6bb343f254596fb82c26e5a496a8044e50796eaef4610c2c91fc934ea2ddf825795b7aa41d266f8da67d35d9c3ca4a4a2c0956499a27c12b2a2b8845e53d26aca6df11abc7444bb044616c1189b54475c4ea6d619dd558da6b87b452b09c6767dca556ef40bd3b225d6f03b43206bae68a1279088194c4fa814edc8042f4983042acdb7650db11429b16161244d5960d1f7858da66f314070bcb8b2c9a6a4776d01255bb62248d2ba95a0e30282bae6adb486a10e523494e58d596bb0a4189aaaa5a538d81a26ca5e24079ac22e9b644fc4d071da8d8869843b3bc4008648611108c0e809e32e8be18927964554c4e4f90cf7b6d6a00d96ddbcf0c1d406de4d86d5b89c4d451e1e282ba30ae178349bcfb24f2e56edb8672588b863fcbb02571abccccdcd911fb3e66c43e4c8bd867252a6558ad5a4b2d1aa6f35c61e8f23a3b9de70a4397d77dc1c4551aae1b34b8ac7c9de77529f03aafd3d3811d78c29c6ddbb604507976851c38392a6937db456fd020d2afe9b6bdc0c9d423d2433d25d649ae7939ca31c3200611d11f1822b7e1755ec7c4cfb6edd0a2035d1ce8e2baed424fa44c81e702b9eff330c08d481bcfd92437e713e39911e2886f8c58833e319e19d967c46744b30f1019dc4760478884af572cc65a4c3259511105e7c8ed5505d4c4c6c109abaa3a39dc8fab888b483cdd8f27f95202942fbf8fd9937d9c8c7eaf58ece7f27ca0b7ad00ec62342df14b0fc9984908c3fe5dbabc2de480d8085f1b11d913d1872c167bc996a86b82f970af1188bca1cfcf4bb6447b42f1352593c97a88c65a3459f77ddca8c55ae212e20fcce715ba7c409fcff3e9b8cd47fab40fef119f5da2dee1868936cbf0dd36ae7091fe7eb36a9052c2963cbc23d686a2b2c65de8c92865a3dda3a1c2919db4be2b9c84c5ec1af4eb26dadd4e4c7368e53350bc44cb9688cc16e92bc1475019244dd664fb3c8167580a5c03c72b39d4beb16168c408c4689518ed1a95dd43e5d8c9954c9ce4ea606d2c040a5020850653193c4eb0962f3c201fa0e2025b4f71d46083a7b6dd032526a0db45682269248499f282059d126c9551dbb2a041b16474a9b63cb1850cade247f02672886f854539ae9b48962c59f2b968c900909c1b5accf841cd7ab9d27dfb5cca749ddddda321f6ab4c26695ff580f672009c413bf4da956dbb2b930fe5ab4ea15c47e50ae5de2dd989eec5d3d8258dfb5efda011855888c7a73e4c0b8d0834100553fdb6b9b54fe81b4768faa9d0022f7d89613f6f563d88b2cd532228f1a067350602173934dff9fd37c817c8f7c7d7c757e8dbe3cbe31bfbeef8eaf8e6f8067d717c6f7c81bee2f7e7ebf3857d2fc3ecd1eb1b7e5d5ff0fb7dbd6ff7e5ce6ace4d25def34e7a3795988d731bf7a612ab715ee3df54623de7151c9c4a9ce7bc75d754e234ce2a7838953805673c7f4d25be7346c1615389d1386bdd672af119e713fc672a711967332e4e25b67326e3405389c73867fdc6546231ce26388ea9c42538d779d054e230ce24788ea9c474ce58d73195188cf308be632af117e7398f4d259673f6e23ca6127771be7a8fa9c45c9c4570a1a9c45a9cb7b88fa9c4599c43f01f5389e39cad0e642a311667103cc854e20f9ce1fc5389df9c3df03995f88a73d5c7a9c46ece1db8055389ad3873e042a612539d37f0215389ab384ffd82a9c4539ca938065389a3384b71d954e236670d7c682a319bb3d433984a43cfe01a4c250c2e3b91a934e4179c682a597021df602acd8f2f329582fc2f9a4a3f0ee41c4c25a1fb78075389c77bdcc854daf1d88f4ca51cd771245309c7833e9b4a40bf71da54fab9780fa612ec3eff602a857fdd682a81773dc954f2fe1d84a9c4bde327be30289f04d6dc4a061e8134af12f51b9cb80d18381534afe1cc2160e6345ce00f28f3295097f2f4dac46760e2322c710728f10624710690790c4e5f001287e188bf30e62e88b9028c78028a3802c2bc85a61f8088b330c457007315bedc00423c052f2f409747613a0182f80080380a3f1c0a979fe0c34de8e1256c39094b7fa2e502e0e14eb2bc89d299ecf01174f8122c1781931e80b94b84f4dadc25cac10257de494ace7b942839b741cf6c507a5ea37656a3563baf2000673d0108c0794b84731e114438ab60c9398d254bce784638a7608411ce286072bec384c959abc9198d264dce2770723ec38993b3190238972100019cc97872b6f3e4c9398b84f31824907036410967314a28e15cc78473094c30e14c8213ce619c70c2190bca990e1428e711a07006030514ce730670fe620003387b4180b31c0210e07c15e5dc459428671114e0cc45010a70de2285b31629a4700e8101ce5918c000672b15ce715450e10c8215ce58acb0c2190e0be70fb0c0c2d9030738bf39c001ce552d9caf68a18573071070768300049c399080b3150948c079030a3853294001e72917ce55b8e0c2998a17ce53bcf0c2590a18ce51c000c359037317c902ce6d16b080b3d4dc4512c3994d0c313c03067c88010cb8ac01c7a0010df8050ef8100738e04264b80532c8f07186cf1966f8eb83d47a2052fe438a94fb9872a12953dee301e7f180073c46c377d040c37540e03920008107d5701c35d4f01b540e4485ca451bfe63830df7b9e1b01b6ef8abcac32a55ee8ac0c10844e09f957b56ac2091c0b9d951096c54020f95cc2ab378a3e40198f422ccda97cc007c8429c299cc256f3247b893c9e402984dfe643a390953002f613eb90993849f304b389469c25198277c0013ca09305178943980176012e029cc2837c02cc05598297c856980b33055f801e60ab7c0acc0af4c0abc85c9c211300ff004cc16ae808980bb3013f017a6020ec374e10b982f3c8609c3193017f006cc18ee80c980cb301bf019a6035ea70c973267f89459ff8029e534cc2987c07cc06b98349cca84c06d9835fc8649e555a60d8fc0bce15666954b6046e039cc2b479a163827cd1cce5826d25987c949e71d2663392b4dd6e19c65f20e671e262b9db54cce725e9accc379cb642de71e262f9d7d98bce5cc65720fe71f26fb70066232977310937f38334d06e2dc657210672f9399ce424cee72fe32d9cb19cc6421ce434cfe722662329873d3e421ce612613712e6272d3d988c961ce622617711e33d988f31193c59c91983ce6ec34f9883399c9489c9398ec7456623299f3129393383331598973139397383f4d66e20c35b9897399c94fe70b4c863a9b995ce67c66f205ce68269b396360f299b31393d19ca32663e09c66b213e70c4c8e3aaf999ce6139838cc18148da41f4223e935939f3800a6b45aa2fed19421ccade130974e6032ddbae002493792be046605adcc0ac46a46202e447e62ac1f8dc0ac3caacc3a6f9875c886593998f5831a665d2a08ccba6f689875b378c0ac2b67caac1b869459d74e9d75efcc30ebea916156c6e28059794b0366e52e0c9895c3c4302b9359c0ac5c06865939cd0bb3721b1766652a05ccca6f12302b67818059594e0bb37218079895edb0302bdf596156d6a3c2ac8dc500b3f6961466ed2e0598b5c34499b5c91060d62e3380593b0d0ab3761b28b336d509b3f61b1366ed2c4a98b5e590306b87f164d6b6238059fb8e93595b4f9359251626b3ca2d23cc2abb2c995586116156492600b3ca32b559651a3aab6ca364564905db1096fe13c25108ef7f6b84c3fbe21a490084571808af3f407b044292d71c495e77f0d8a32446af3f8c5e83cc3d32fae075c807af180cedd1071ebc1279f05a84833df280f68a84f64afb608f68b3d71066af00a07b347383e475af70b24748b038f2ba7150d8a3235c1879dd2e56d823236074f0ba745ed8a30ec4e0e075c798618f3838a3e875d1a0b24745691479dd3c13d8a3226c6cf0ba7bb0ecd10659885e59cb963d22fa81c82b07d1658f8880d1e0958908b3471a8cc9e0959120b347193031f4ca4f65f668088dec959d48b347b23518bc329b367b84c11417bc7215547b74819b21af7cc59b3d1a828590578e93c51e09e1c28257ee42ce1e5900c6f8ca74c2d8a3518cf9ca63d8d9a379c65f198d3b7bf43482bc721ed6b34741d800f2ca7bb0ec11902c3f5e5bcb963dfaf1838fd70ea2cb1ef90023f4da4484d923a1313d5e1b09327bd483091eaffd54668f78a089bdb61369f628b666c76bb369b3473ba6d0f1da5550ed910e37395efb8a377b94038ba0d78e93c51e057181e3b5bb90b34738c0b8f1da74c2d8a31b6200bdf61876f608e80cf1b5d1b8b347621a3faf9da7f5ecd10f1b3eafbd07cb1ef96481bd4a2d5bf608f6c3eb5506d1658f5e60c2574944983d0ac7b85e251264f6c8c504f82a9fcaec1188e67b954ea4d9a36f8df72ad9b4d9236f8aee555641b547dd5bba91571c71586caf324e167bb4bdb9a0f5a32d5f6517b47e47f256ce1918ab1881739ab1c6aa9ca3c6fa1bce4e8c5566c31903632da2724633560f6a389f19eb4e41e06c66ac5b45c3f902635dab079ccb8c75afa69ca1c6ba5852ce4f63ddac7a6e62acab35c39989b1ee960ce725c6ca490e382b31565e6ac03989b1321303ce64c6ca4d319c9dc6ca4e0b382331568682e17cc45839ea85f398b1b2940b673163e529059c8d182b5725e05cc458d90a01e73063e5ab16ce4d6365ac039c89182b67b1701e62acacb5c219cc58794b85f397b1769201ce428cb59752387b196b3315e0dc65acdd14e5cc34d67622c03988b136d400ce408cb5a35038ff30d6968272e632d69e3ae1ecc358bbca84730f636dab12ce5bc6da57249c97c6da584fce5ac6da590238f330d6d67272ce32d6de6a72561aab4c6272de61ac726984b30e63954c4bce58c62a9b4438278d553a05e048639550b5e7305619456f81b14a2925bf32563905805760acb28a1e9d02f59bc0b84b84c3dc2592c0dc25b21281b94b54e586b94b64c3dc25a25203046878c0142933c8e0800630200628ca5f000c5294ff820b5594af002bca4f0002b028bf8503b0c05b94bf820a4b946f0026ca4fa10051a0289f000390a27c14a05451fe0956946f420958944fc2132dca17406f51be9324ca6fb244f94c4668a2fc252240517e00a228bf2645f95409008e66083f301076e44812e4070fca37c260c8a4fc0f8a10794043c201e5d30010c207943fbbc20d15e5238983c51bca3fd2051746e8802187f23b18438c30289f0334ceb043f94579d2b843f94576cfb2b17a287f032d59b0503e51103f6ca17c224480e942f91a2031260ce567f0c40419ca1f72024d19ca97b1599386f231a8628a36947fc1156ea8287f481c2cde50be902eb8c882f22da003861cca1fc710230cca9f689c6187f29f278d3b941f84f7301bac87f28168c98285f27f04f1c316caf74104982e942f84c4983094dfe389093294cfc3093465283fc6664d1acadf51c5146d285fc7156ea8283f94efca237e7b5c535cc680013ac3c806d2e9e0035222836ece90dc926db0a909a4756e0541b63580c85d39dbd7e678b76d943a6895fc03b427c70da5b033c205eac04988fc96bbd2b5151b0344d3b7c59268f8c326f0210b0f9c51db077511790aea75c1a2a3430accf08104b5ca395137553c657949e2caa9c652503e27c51a6d94061995f2bd5f63513dfb1e14825fd71fa32db929320eaa6523e734b9255ac6efc610b9a4e6fbe8d91917860be3b306edfb98e183c7676b8d8cd0becf95a4714e584e59b4efe32469484e6ba2ce0491859da7246a7d1fa89e7114b4ef132569485eb0ec90a76a0d31ce88a0d6f791ea196b80f67da6246d32a971b3c69d289660a2d6f7a9ea19b7a14b3526a9673eb4ef1366679b1d3b6268dfa7698d3aa07d1f2e4ddbb4be24f97049b40f9b92b4d543278e1a5ea0bca0a1a6d68755f58ca5681f66256948525a78f1858a2534b0d6a8f561573d6336b40fc392b4b5b3670d9a28ba40030d12b53e2cab670c05edc3b4fa303c3dfbb6366d286740fbb0334ddba6a69a604e2f2c4933b2450b18596bb26c20abd67f65f58cd7d0fe4b4bd290ce6cf1401b4598d14614afad9eb11ada8725495aed0463a4c8401d2b7e38a3d6872df58c9fa07d18931ab40ffbf292b3b3adcbd6e53587f65f576b3444fb2f384ddb9a5e5bd0fe6b4ad236a82ada0b023677dad8f2658c134fb5fe6ba9679c01da7f31499a5403851b2db608810f716afd5753cf5e4e92b62598c3c417619600438d12b5fe0baa671c15a5e625d5b397143dd3b333a9478f195ae1d61acd69da9614d6a1fdd049d290ce9499c28b9caa3c49d4a9f543a89eb113b41f46491a8d8d2c5940700599272e50eb87523d630cd0e63127cb0ab688e24b073450eb87553d6334b41f5af5ac1f6ed134afd60fc3ec4cca91c325fc1236add1a47dd796a4492cac3009cb352569484e308165ea8734b4988203b5beabaa677c86f65d56928644851caa35aa8650419ba85adf75d5333643fb2e2c495b371e40f3c515747e88424eadefcaea195f80f65d5a3debbbf0f4eca37d579b9d492a2a9714b4ef3ae352e3925aa3d3be4b4cd364956b09da0791c47ce112c68bab33546cf58ccbd03d23290bd616503d3479a9319317b4effad23457ad0fcad9992443069c43fb201c700bf06a8d82d03e282569120a0a9c824a92b465a34c1a3b623e200604666a7d70a967fc44fb2093a42121430f99103cb1822fa66a7db0a967dc04ed834e92d6021a78d200024a0360c0d4fa2054cf9809da07a37ad607d5f42ca4fd4fcfcea4c4b28619787ab65b6b0484f6bf2b49934b72094b2e657169da579b2d8dd1fee724692ee0e9016b045a7638a3aad6bc04ed7f519286f4031830572b9833078e10b5fe27d5335682f6bf2949d3008e17659480082fb8d8aaf5bfaa9e7112b4ff59f5bf2d7a066e495a67657d4959f48ca7466a8d765c6d37495a5b397970ba2d7ab6576ba423abdb5af298fade974e4ad25a4aaa9b92ea383cdcd61ae5a0fd2e49d22600c5192f3f889162034ab57eb7d4332643fb1d93a47979ce7c00ce1a2e62d8a8f5bba69eb193a42d176b5420a60a4c1c2db8a83112b4df45a9a1fd4e4dcf3cdae7ae24ad9d9cb0382749db3a4d28b843674c1269f0d4f888284943eac14d1972f664894203766a7d4eaa673c86f6b929495b14f490444619ad32563ed4fa5c55cfd84a891910ed736176d6581a8b981953d3c4a6350ada92b45eea252ea997b825da483e34d10689219aa48ec8aa351b41fbdb55cff68acd1a1eec3041ed90448d8bd00a83a7672edadfdaec8cb3d8a4d628e4ab2b35b4392b6b73925a922602171b487a020b8a3959b50e437b7bd637664c86cc1cda2e7e5f4af19b49078cb84a634c134a7a6a7db9d4336692b42222a6c2f880070acb13b5be6cea191341fbd249d2a2b0b9820d95099a8093a7d697503de321685f46a9e9d98cb7f0963568bfcd683c5bccc494b5553d5bab2dae60b315568e18daefa6e6d23417e4101feb4b739fb7f8b30f2a4b41fb3c256937a44146134588d941cb12b56630b4cf57593d5b0ad23e9f69da57ebb31aa6dc24694a56d819b85b41cafca5673fb4cf4c5e7ca18d020f58b0d1c66a4c1a1d6a2d04edd7206956405006176ddc90c0cb17ec85761c203600c4d41658b839a2d634b1ea528535da1b8430a3068e17387940d08576123f7c3122a98c375c98690b3673b04071a5c59b246a1d04ed17f58f00d511c1108071442024c4ba4d513ed01162d78558b7262ea91b7f9c3632446e893484a0db376e2949d2bedad7850a1c545e884c7697f2cb2c03ba2d1717a05d2761538855862156a90251b2010b23d6264304cac3713c7ca1dc837a2652ee4264dc633eb8ef0e547efba0a0f2af9e7d406507b2a041e5837a36844a395bba6d5c1bf1860ee20d2c2218b11342e49c2a084bd5a58a72dc4568da56e30e65eb50a89e6d87d5d111eb6e89a2938884584f93283785c1181c90106b3c00fa61ebace8619359525e5e9e73eac090517c2f1906135b88556d06951b9c6e027d71bd6406c4307c7549625dacf18d5817abea8e0c81e8c4124b9434b921e5d7cd6a8db8bc5f506eacdcdc9688b388bbe217e3a65e5f9ae338ae1f725362999942ec683d5d29c4ba5994b95162b5cc065ea27edf2a0931516c55785b7446a00026a60338b8060991506c1fb3b1bfcae379df52073b0f5fed3b03f15e41d81108d5fd5ba3f0fc1d6bf4baf19f833876e03d35ef9fa4f55b72b346fae094548ba47f634a2ed648ff6786534b0425a568794fc25e2fa09b837a5508ddb1b49fef83ac91cff71bacd1ebfb229b24040f9b5b7bcd27d8c3f9f4732071ca2bbe1a0cf6be3797bedacf8fd20ebca7f69d87af06fabc5fe1dbe5bd7fa6b492437d1fd89453fd70ca37bb465c233897c49af7276fe9ab0d15ed945700a1bca30bc692485cf731852ba4c651f628c32833080c0227e1246cc446fc017fc01eb0074c631acf78c64818091fe1236c848d7007dc0173c01c70111771112ec21bf0064cc4444c8489b006ac0167c019f0100fb18c658c0163c017f0053c8487b01016c216b0053cf2c893279fcf413808036120fc837fb00ff6c1422cc43db807f3601e1ce318efe01dac8375700ecec1411cc4381807dfe01b0cc4402cb2c83ffcc33eecc33086f18b5f1c72c82e7631c8207ffcb1c71e77dc31c71c6fbc3118948d2670667eecbfec45f7e04ade648d6a80c0f92adc85357ac0f932bc86e3704e3a2f9d99ce4d6bd400a73562c039ea2cb546309ccf536bf4c2f95c75b63a5f9db1ce5967adf3d63be9bdf4667a37bd9dde50efa8b7d47bea5df5b65aa313de58efacb7d67beb32e972e992e9b2e9d2e912ea326a8d0270be945aa3daf9726a8de859c9f9d26a8d0070bebc5aa3a3f399999999797646723e723672eee0ccc1b9e85ce4bcc199e84ce4acc13983f3d05976c6e07cc179c859c8d982f3789ee79f839c819c7f9c7d9c85ce3dce3cceb1f38eb38e738e73d019c7f9c619e82c9e7fce3e67d8f9750ecfcccccc0cc554f2287394cf8b640293a912254aae44c97ba664ac4814070958d9ddad0c457777b7f215ddca5874772b6fd1ddddddda57265499e464ab9ca25ba5158ca178fd09e13507dd6fdd41f707dd207487d0c5802e115d2474697443a04b5bda2e1674678b6491ec91a543d7c88e41b783ed6039580eb6688bb6c816d90d7683255aa225b2445683d560335827e8aea1cb86ee147465eb862e067bc15eb04376c80a593a742dd831e88e3beedcb9df6f900db24016c8fed81feb637dacd00a6d8fedb13c96c7c636b63b76c7ea581d9b63736cd0062d8ec5b137f6c6022dd08a2beecffeaccffa2c18bab07ded6bc30dd7b54ed00517dc6fbf7543f70abaddc6a1cb2d370186e27ba03d0ae17b1e7b04c2f7738f927c3fb44746df73b0471f7cffc11e79f03ddd23daf74ef668f63d0a7b84e4fb15f6e8c8f72fec9191ef67d8a30ebea7b2471c7c3f813d2afa16f96ef025fa12f96af0cde03bf4957d31f85ef03d67b14743be42be167cc79ec9a8644bd634c2ac64cc8c00000000001000a315002030140a0644e28060304b5369f60114000e8b925e724894c8b33446619832c6106000000000000000109a991905014058c444225fb40741c70982d374eda13f7608ff91b132fe186a9d7fbda01f9d1afe4d1dbf4c45f853b3d0461931da8294d449e342e9dd87729e38b0c7371cea83b8654d3b33f00e6c4f724a01721a47ec7dff2dc7547dc8bc12598f8481ae06a4472070fd989e4098252aba3c3473225ba3221e6bcbd7af424b53e19fa1e2f7d0017ea672aa0f20bdfc2365550477e4570a5bea972e070a0a97e0767944fed94bf3f78c8fa5ecaaadfc562a8d8e067b2832ad5559e744e7a5c5306e92087a15216038f5002a3bedcabff9726ab445876883f4984866b1d678a83b828cf42688bd61c2e0fb1432d827c60872ca0ac335bcf699e85991d52e652db72885cc493d6d0a247fbbdc81f8f3dd0065783e6c4b1aa8f453c95a9a6e70bf20923e9fcd0862d49ccbd8ead628f0db738b0766fc0e00635c4318d75c5f720f215c6ad6e8e9b2b50763ef86ba65e80f26261b20f62541f301e47db76ac3f450d9e8a6bcb494976879ddc8c559a76891e2755354a7c52a763da41f7636524a4e3022d154c6d5322d4339ea54a94f617dd98796711f41eed957796f53d672a7f4e6647e6fb7d4b2d6b730fdcf5e03e18176cba3f7120dab7b58c21a36103f904585a0011066a33e62536e8bc5cb4810e438a7b4cc2f2fad7a1fd1046459c99fdc3c8785688012aa5afb7c100d4b01feb4f2214ae038d7fae718eb816de0b81e5d4b32533703327cd76cd7227a8d109b75d59fe2074d77074bc660a2b543c67ee10dde68656d0bdcf354bb06e4139d5d9c3f861e2d383a6466b8a86f86856f6e205be7b46544447daf5f2595349e670bc33150a479e013fb6b5b13fffcccbda0b840a085becba42e2b593712317abec0b523b1aa63e20de5d33522d2431317c247bc4da3765b3d8ed9be8ccd99b168a149e4455873837c4a4874ccbddd9694e6df3f65d3ff5bfd73a3991656dfd57b7bc6d8c05d39ce4c090f80ebbdb8a6035b13dcca86863ab025c004202a08888614c49ee4d0f91fe57f154a5f9121198bf0ff47285b2fc83491ba178c5f560ee6b6bf5a2ea88b9844e62d1dbb51d9669244d29b52326cfc37b28a49c81e24ff3fe5182e6f39e7958cd9dcc728962d72a9b3179445432760b4513473cef096b321a21a48a9d49fd8a818c5b945510a759494a0e0b3fe80b3862f969b1426a07a21ba78612bcf67aeee1f3e69426fc2f9b2ec8c6fa19356b391f1419712222737726633f9f86a209e00b293fc30244115efa4dbb109b4db7b98c3379bdbc698794f8054e0c93cba863e4ab880fe5d19e3d0d9570160dc34586bd5e6a0427300ed52da59ed8ee054796084576c1e86839cdc153c40e7a589c8aeac64fd2536d7127aeebc6e76f1ac654073d834a1adef14d0782bdd469249299366ae332ac76449853d7c6a20552fa9e0ae3bff6fa3ab2901ea46089a0e936def8cfb7a5a93ff5c9dcf7fcb8c845362b426bca8b735687cba30d4711a257e3b2548e9136e49f2dbf276aa3204eb4c9ee87de6b6cf8499bb2572b63dfdb556e0853d69b86a7f2d41329fd1057aa5410713a61298111b27ba542e97895afb6440f3fd506a2a79e9c2582af72ea36b18ced2eabaaa7b31c7391282e45c4fcc4e91a3d5adba0d661b361e03373fb7807e20339edcd2e35bd590e279a67d00cc7b57e887616119e77df16f3cc79268782ee48da586178719a2987263b366dab11a0161eb1a87b8afa5cbb86a6f6772eb55c3ea7a3a65e347c1b446b1799628146861a2faef880333d10ac711a21a86784ea958d0beaa2a72f2d36d2a9f88205f7500a025d69202a10442b89df16d79ba7b363cfd71af6f50475309601137b0f63ee05efd8e05628bebc97b27027c44d2a1fa19ae774ca9908f0b45df21c16651e27d855af2bf53d873a36bae371cb429c8167caaaa8635aef9300b84f70d335694c0b474877a12fdcfc1c34f8e9d3704702af5dd4685b1c4c278f39d4f5c4354d2c83e841f4e08c91e2332bdaf764eb30f449234a0b739496ccc1c4ac243e86f5879b2ac942060b02aa291a243e9bdba35ef820c3ed97e967953229dd00161d24bdf5310b4695ac80e520323a51706663cfa0099c657ad3ee3658c84474e6a33205e656999fb61afdc1abd90b3a53f422920f5548db76b7a128515fce82f8b37e6410b2085a290ef5a768cc58049e550b35e9ae5611b68852d73f7cb4981bb13ccd7316746d104747e060f1837f9b744bae958781d06de6d9b1ccc74e881fbe3e9b185db4c660d3364e7799a1d4720db9723c5a36a9f413c3d79c85ef55469c54889dac295589ed7baf9425a8c2e21d03074a1f9c90d30582d255b0e5578687807d8b6dfd836bdc15a71e0c338c3874c1489bf8b5c48542d2e2d352b7f266cf0eaf795a21c97664f45292a76eec6a4450130ce72ba82234935e1da2efd5c0c1b51371596313968dbd22985ec228008718371074675ceff12d9cb1df7299668c9cbc3685a5ac9e22d21e237e1a81f77c1d9d842e32799c83e661055b73c7424e780f19df417c026504982f3968dd99c35c3dd99b30982270c163d165d9197faa92bd43f3749624cae48b373f01ebe647d2b3a0caec00f2398b3c988e345031195873761eece001e3474716808886ad930bc86a1791588db3d7c0ceea0ff62032f3d53da3511112fdb3fb898d80c7af80f4ee30f95b66d484bde82c22375d0fedb19801644e5fcb9d76fc751dae9c5585dcb8666a37b3a5f0019c7a7af4038540e0144d035b134a975c98c93729f55ce83892df84dea84edcc0fc42777388c9a026bf54b795ff209e2b82d11e6157ea9a3b06ea434288b206bf61a48dd60b21361657112ec07fe207bd50dcaf4aeb34754edb3b99d38c0ed7c10914c73a5f0d20c4ba3e3ba1ee7ad6d1b8332eb1db1fd701d63755e893987a99f644739338fcea068aed2cf1dde0e084c4d01c5f6be695860c9c915d078a90516d6d1ffa87e433bc74054762dadaa031bc68c5b2b751deb003892ca66b2e2edafaec900d7f1f330af092465314ec72da7a437e4e0a17c5319e0caf477f8b27c942341d46968b86c1808d037970a49b1ddcf2de9f2df064341fe94bfe1e7d44264d1e2816371e94eb254cf6301e3bba4c38a4077488f2d82de501d5b04bba03abab21fbef884352ae103ded12987f00563b4c3210ff29bdee8063e12933794c18bcd58a71236a29d9c79881f28621b1ef8103fe9856ff023117dc214de788e3a92a131eaa99986d88562b661910dd94b5ffc821e15e807cee08967b8a3191ae1964e398c6f10a31d8a5998bbe4c56ee853817ac10c5e7cc61b95b0016ff48c83f88231dea18807f9496f7c071f89c81b41a2953d285a6b14b9e4d7754e17f3a1c944a54451a45611fbb40889bd88146374438b469b751c5de91e2d312039b29084a4482577a4a86b9264f8b770502128c59c564a5ccb12aadc12e977e97680697d89c903c924cacd5408698aa63531639b90fc4d6423a7ab45a7c56b2707c79300d95319d4a7480682550fd4a521d4fa33948b224a8c2baa081a158d1ec5d748a1f74951c35237ea84a9e5fed73c642d9399d5f60e5be969b71c7760e74d7fe0309df8309f8a1f9f4cf886743c70b3b411740f58c468c0666125761ff088f180ed7227ea3d6091e381fbe242e83659b53fc8aa20e2618c885a484a9d92589309cf7582bea190f89a283e07d534bd953c8e41096bf8a9401528cc47c5b01833ea5f1fe9920884cd5039db9cdc6a466adac9cd6ca41e0e7826476a73c9dd78a45985ef441fa9a5496e2448fa8404634442693e86e048160e12689424f41bbabd26b9e8a34680929a0d0073a684482021cc4af2f09c20b224d19d02854b9ec6f743fa925f2744592226b53289cd0eae812681602355d6249011b80b6e72cb4d1311278743b6b08a4e6e913b59a0276e6e810a7d720de6371c8072c7a02cc46b588da13ce7a28f499477bee525308a2f2ebfdea3dc01703e95a4d4660158540a8342eb0ea6b0231e65645336491e65e129599c478d85ca739401e9472aeea53ea85132a88a73146ed85a857b1aa1e76025893df7899b95eff08e8df134e5caa7a83ed7e09522775179fd0a2d5e9431c2b2805e94a162c9772f6a00b23c368585bcb27cd52c84bc6e32fd2c99bff371873d4ed38e00515768e1a7a1c2ce86ad678781411ed2c94184618863c5635f182492ee2442b64edc038ad79a635d233e76bdf771c7a8c5c51a21875689fc3456e4ccf89167343446392c3940bad11a3627937c9e7c728c32969d944dee54ce725619ca0acb2b932c63f9b7dc67c9659cdf97a13cc0bc7216f3ce72cc7ba6ccfc393933e63acdbe6195c1312cc9355942676fd9f733ceddd8976f13759eccdf396414cfb9a13ddf66f83c33ede7b1a99a676e820e1fdc34875ce8235343b3cc123db351749e3da34dae8da659413aca42a43dc7934e79521a66e9d29b094ca3bc35ddb2b969cc97a7617e3e3db90ff56653d42b53a5bedc981a728fea2bd354d3cc58bdb2697596fdab5d8eb066d9cd3acc86d636775be7796f0d67a5eb95c1aeb1dcbdeeb3f435ce57b0615e84bdb926f666b3d83b53c8be5c241b73beec9b51669b4dbab6d7401b5d2f6dfcde69fba3ac6d4fb9b67c7eb6c18ec59ad1759b7de36de66f709f27c3dda13d7b90006dccfdb903dc69ad615b37e783ddde72b284697a0b20090da9ca8abae351e834893c5e828137ed09502711a96988ca32c2ac9456ad46992ba8ee450e844129634b53d9c1ec6c784cb3a2aea9c86d6df85b20408e5ea1832ed9ed33bc03a1ded8ca673ffba9d1013b84c15048211174085d4bdc77e0e2b9f971548fb415289523960d0933dca6491a72c20d527fb18e782c94c67bf93755e31181100cae972682e6331a310c5c2c8fc48d47143914b4589c899b4f24423870bd3012db4f288460f07ac9dc6eeafe03324c0939f5c65437136df0bd7c4131d4035eca583f31b486c9493077137d0bc28ca88fe32a1069a3400767eb17d0a3f02387aa95d7a3a81b672a23d5a1d82627ab2ad34e0116c75424a157f107ce542fa849617fced42aa647c15c4ed44da853a13e8eab40a48d021d9cad5f408fc28f1caa565e8fa26e9ca98c548762fb925f912edbadcc61deaa60d417d73666392aed390da0ce20444196fdc036ca0b1b61164f0dd5b2351a43bb401b912453b3cd292035832104b5f40bd6681eec08597a32ac46d881071911390a316776319712a599a507976e602c4cdb6b8b19b4cc34a96b73fc35d3d8b2fb9fd615dafe3cfe20245001b8034dc984add3730ba6356ce43c18ebf467b1b70ae474b527dcb92ee478f65f2b4dc461fab79865e43c1f56198cc1e46f31bb08f93f59311493c19f457691717ebec62016c31f8bd822e3fb70bd911846ff85cb2b30d6c8243644ec0ac7f8c6a77bf1d6549fbefa1b24808f4d08244ed7221e4a542db9da724aa95e0b0b5ff1d4c8d52f1ba5c4cd4f5b76f296e33c517a933fb60bb9fb7ba394b8f06d97455eaebc980e98bcc65523110580107f3731f8514c99c0b8d13a93bc58a83e39bd9811bc9b60bc514d91b878e83e9fbcd8289c98628c11bd935c7c684f9db8f8689c4d62cc289d905e4c48bf9f5cfc28a64c60dcb4cf21bf62224d985e2149db9fdc7a38524ae06c6fc940de2d5e4b965ec80cda4530dfaaa2485c337593475e60144e4c31c688de492e3eb4a74e5c7c34ce263166944e482f26a4df4f2e7e145326306edae7905f3191264caf90a4ed4f6e3d1c292570b6b76420ef16af254b2f6406ed22986f555124ae99bac9232f504635c33d78aee5ff779e57c6ffa4894236a1ac6e062fe7e89122fb9573bedf3d712f26df1a3333b813f3b96327a954b90f0dac4209b805cdae5689763f1a5c8d12712f1a5aad12e70634b08a12e25e34b5da25de8d68623525d64d686af54a801bd060554aacbbd0f4ea9740370934dd5951b7347d6ad2590432a3585f3204bc918945be0cb197b316827d5380f678c94fe2725b9b0648002324d62d5beee59631f6c24a83d46b9e547b754ca74e6e3bdf5db1e22f21d8552ff68fff9cfac5a2bcbdb28af79e5acffb5fc65ca8b054f343c1fbe9baba18e3e5dbc1dc0be59bab4d209624dd79e5cb1a3f06449637d5577943194df54bbe4ca422a3fdb9474d2aa3375ec760f7b876ed22499b5f76db1b2c27ad98b8ba9a8f452d2f20794192330ac877456f0893123fb99e8e760c01c8f6b572b2ff6849ed7e6d61b21d31e3c899362afaba92325033c43e13d389584e1d24397dd527f1ddb69b862f82db204f047d03cd83a05b836d8f1580d986de4773b37146eba0f581f322cf0152b1a8c5dc61b6e3b1e18be036c81341df4073b13847f5a1a514b1251093c0bc089742f6597474ed833163978c6ab037995f386c7983b84c72462317d09e8cced03d697f20bc899340f01dc2e1b44eda1f80afc49ca025a3daec256637c65b9e782e835cd1e865b427a33374e289ac974f6d94896b062fc6f745e76b2bb7ae51ce5db91da558568e46424da25abc216bd65ce47bd949a0ccadfb39778aa92aaf4b6dad224c5af09ae9c14cab7acbd3de3766c275628d608fd5dc92b65cc2b07f80ae1f45578e10e040b56adecb81888b7021016029ce55fefce7d9892a2e5ec9b46c61465c0bfb8ee77f0c7b7758847f2caf3504d24c6742881a3f00500481217f0f70dd00095160aaf3c728099ed42b5f7047656d58ae4aa72450e5d0f0798dc8659f164cf162945a66467bad1556dd91114aecaec48fc86491d9d8286ac17bf3e9f6c2c77e35f0b19cf2b24c5329457c3aeab80d92ecf5821122f9b6fbde027fa3d2a6b0722d40b16f34dc59a9860cd8fcc1ec167b93932bc2fc327609f7def807efdcd6000bc4a00ca4a68b8a4641b64c79a28ad7481d94562e2d8d97258aa846f0b04a37aba2dc8056598149dafd90054789fdfb7847431a2572fa46bcea6c807f0721fd3290b9a968d03b7c13069c06b557f9b113463b64ae71125266c8d261e9de0e88e4b3caf9effa8849308ead8ed18dbd58a1cdc7c14b36c4ba346ad28cbc7831893d5606f6a86065132cf9f0c907876524efd546e72b509fbf3981b8a32a2c6badfb2eeeb88de4cf3ad30bd7b358796f5101d979f295564f0d96a0c8f3dfe6ca7c557993dcbe5ba3fdfa5652502e1eefa2563b52805743ce4a037b96e85ed72748468afa09b91cdb5c0e49a9ad9312654c6e99bb6bea36a1ec5fd7257e0b2eba823565da604fdc4598eb36c793a84ef90d70795ed8570222e73c76a982fa07741552082cf991799d64bbe22e9e86b7d95bde94c340b3b53a2a35f838d9b1c0317508f774e92011eeec878c917d3593b1f815f80270fed84467cca3282627746ccc19b661860967f32c732614fb8ad8eecf9039f7f5cd78cdc0e40e1eebceb91b28bee58e00787f18046a82538a6fa04856104effaefb9f6690cdf732b157fbd569da90295625b996308479e5223e5d85444825250ecf2bf7ea339a4013d0b973fe4acd8f139b03da03f5d9329dbbcbe9c0ed7c34821ec9c260ab84e5092d4c35317e20c3a8bd48ead328cad07688622614e1f8433d4a8d44553d89cded9b83b8ff9b514cb768ccb7801d2e3612271a2d0ebc94872730c7e524a953419f73ba8cc32ee537a31f8ba8ae91c1c8ad492b336b2e1836f048f30f21046a118b852b4623bd66d8ee6deb41951d2dcb26cf1454e0a4628c455c0d2d7465cc054240c8b407f3ff6ff8cc7f586943a4b129c3e1b6fefa8a7d6a314e5a08bcc819ae1f2ca512dcaf2c84e615d92f6249e59b6e5cd92c0b43df6e6a246819f6ce22e12e2a34566a91ee354b4c308eba042c2d0f60eb2e69308c512658efb2b046cf1c4f64ec755f0129b51fe8fda0285f78615adae8d2125a7405610efaa0cdc0b406fab60127411624a91aa35bde572077e707b874f96ccd7d09a5df9466cdb4c310d30481c4ef38e79fb5fc36dd0b2da3f02f2db1f0005155afed749d251383f86c1a868a3be1dc00b8226751f7e3e37bfe20ebe9d37ddea03a5b6315140e06791f281a9cccfbb25b9b976b351736d3dd8f4c39652d97adae5b208b9e79981af5c789dfb82924b9f3f12590427530eb79d7b62eeec70bdf0e3a9ea56e8f3e5782fafa720b110b7d9c3bfab04e19249e311557b3fbba2a186d391b1d18bd622ba45193f8057c6fb55b760de347aa3921e8647600757c9ba25f22e02f4997f9009a4e5ce1257e42022aa6c8f728941f0e8e8e1b4fb06a942e1e42d7a42851bcfaf4e4af88c2590a45d103c9b28e667c39c113f778d48a75717530adbe74111d4f88a24cf8fa5e62f873e48208faf08d391f98dea6297b0242c57ce928b3856168400e0839cd11fb2dd5ab494ace4c76d7ad0ef20c3dbd7a6b3f889113ec259c3af237e089add3100d6e0fd0b00e6a8865d666ea72d0b86584e318edfc591a58e2da81cdac44ba54e2f31afa83106d1dee4bd8ed88fe8b75f16106490e613efecfd5bae756deaf1d6a973ab562a2aa5ea29e6a66f50ef449426784756381cc5877d1011c81a39f52ba70cd2d440c97d3e0964b311ca704376c3de46a2d24d30faf2a5f9cb0add4606528050dc79d55555958f620b0d3d18454700b0d68973c0fc6fa986c7241d8f9c864c0d954d3e43a5447233cd1afd22edf54936ace26a45f299ca69a0899b5d002ff700156da27677e8a5681d2f25413d2a48dca954df4a19d6112f8dcf0f7a2f9f7b5fc962e13039ffff926ceca96816f88aa1e983a2b1cfbe689d4a61cc9f7f8f4af532c510d13a8269c3ae32023834b82fe24527b4c3a6aff42e02fe085ac913b7a859105f4c966cc434983087ad98627edb67ef2c19e6a80d40aa8096a6591a7fd0e8941d0a7cbdd21710421b23843cd4c67a4b123c72190579276d98e708c4c4aabcc817e87c2bfe2e8279855f11f5679513dda403e34c128b02aecf43b779f140879ad0c06235d9dfec297a6512a0fab56dc698b0747a53ede6341c34f6b6c4d12b8b6dcc4c9ff73fe0684c07b1086160ad582ba060197b8a8a7035331ed6cd894b6b8fdc2a0c4d34a4a8c06e0b4c3ad815b4b54ac42c158637f8501b9b0082e3a26e3630033f9152e2a5584f6c599dfc892328067a6a760e9a45f75bfcbbe8d29da85d6c01dd9df67125fe9a40f0c61c21f3254c0495fd778d41f450eec169f4a82237206d3b82918fe6cf1e2da54cc254258004330a161ae527344995a4232ea3eef2d2135a06ef97044fa6cc4f6b907ab592d6028259148ceded4a8e5fcc36cd78be2710a460b6deb4305a2504d701a373723c560fc357d1082d46debd33c53b8f1c0c06f55eca4f49bdc2ff3c496c9d80a88abec0bae211d7f00e514ff50bc2e1a827d6a94772f7081b7d70d48c6eb4057f9eaae26d5b9468f666ef37b6b590e4f60bf2b3f5c4c530efce20dadd29355e147f8ccd46c10b7d2b01d481eb71ee60f537e63d3532ca6fc8c072c815ce0b2b8b2b6de8103be53eddbc6b4d6005167d62f357a15bbd3115e053b8bd0d297ecc3b98602e344a027f56d8c84077db41d4f85f65bccf2d478249cd050daf991b48f6ce6a7887cd9d47cef12a63e06b4516fb9b08134bf98b185e772af103e93fce694b9c00a0c77905d0b39f1fe890a626697ecf080718c533e563e0788ab0dfea9b4f0f5870550c0fdbf87dd9b814faff33de9c48feaf9d978878e4daf4eaa15495c1d1bfcfc0b2efdbf40dc78611b69854632dddb7eabeef9d1338cf568c7e7b37948e24adb9b1ad8d29cefd4d1cd1ca1202d5b0ad2375f61ff855860b754babdde6ba18595915baa12b8beb66571ab378a1cc46bb64cfee702ba4b59b491bb2bb51ecdb83ac108f60eadc393c58e56096e185c1c2f7916cc3ad4b80452e6f021ab5e8e6945bc6e7f9f098637e87340dce85e441454837e8d607f93032724a49a888cc289e739e287bddccf5983a7395387e9f7f385fbfc3814753a4d8c61fdbee73795904eaa5df59d298d53f238836773bce83850a39b1b8db7dcce5bc5cda846b244c2c32d48b75e8f7dbffaa9d1f8aa7fc850810dfe5164fc00f3aea9e34d3b15e0f0cb29b6b5738832fe4adff227c07e5b8d36a0f96916641493e0f874a6d511b5a6c6754a614f0752c55c5ebb9aed293509a66b6997a997c789d37a35458e88c936ff48f355aaa7775806b15619b43947ac3080cee93b3aa7ccd5e4b0109702cca1dffe0cc0b1c52ace63282d1964649acbeb2e1909515383db0ea2219cae1f361eb0803673e15cdc2a5c971fe13b88aaa04c6670db7b5e840ca6eb07ec5b75b855e9d50bbc9b61022eb92a69295d771e2df03976710f0f7a6274a6660dd4c130d1b5574eb4af9cc1fd7c93e45b6bea8aa62dbd8c4aa562f535367d196f199105070b3cb1051c113ee7511c0e99aaeceb2d26ec4d263be7e45a47f27fdab39463130d80225d54c4e2d6dfe79c120484bdd08a0954de546c63fad827e0da27a90c3176518b1e582b6ccc7b59fc51c2c738f77a36eb8467b5840a5097b7987f0732a1ec56e5bf087ea2373ca5f9ce429a26dbc5e3de931bc5654ee953d49e346d6762260e22536d1c8c6a6a64915cc35a272a1d62c999ef8bda727c44ac6809054f7a17419f2dbf52ccda9be2be8f798d1f16df081400746bd4ff7e7d49e6e3566afcaad430df1293edf08fa0a35879faf479ab3950d0233d974f6ddfb781cbf94d41f297a50a94a001f9a492fd1bd3e956e22edeb968608b62f385791b8a63a4a0535c30a91e6c938adaaf90c43db2339160dd7109217c0b9be0a0e02113cb44cb5ae4e2e288411a547cb81879aa6195f05107092d3557f6e6cd5ab9b2079f19a72c084fd9c57a76a014ecca8e11f4af8ab0bf5772a4f7340826cd7cb4b232bbfe4c86675b52cf6f8c372650d6961d77c52a74477a52e18536e4f18b56754b3631327a94bf692624b7e09d40d4d06648fef7c3a51d0d660825429947d7b98b3080498183e49e100f455daa465978eb658a81024357bc6aa4630b75a4a1f07aa7d72640266891c09804051e23beb674eaf1ccf920458ec7a4af2d0def3fb0f7b51f442eb3301930bbb9260f0506f40447f12b5c7ff19d1f02791ec99944c2526458ae975f077423fa4b169fedd29875e46f38557ee2a7217a3b29e033542582b1b01f36a8a3da89e5b10994e2d8936997471ce75a4bfb2df8c200157908397e3db872b0cf395dac8dcb0ff17e8b6d1297dd92c0f933b9e8b8d84d41e3ee5c885a78642fbfc2c49aa79a66eca5c57106529151c225aa9d599ca31abfe02c712bf3d874f0113950edc9efc0682baf945900d1d630638688a5dea2b0feaf867f444a3028784daccc2336884370b3abdbfca51b12363c3566b32d3e551b7c375cf83d2422855bc3ab0bfa57013928e29e1627be20abede673ec6aef849d8b7577cc652c52f1143d56f73524072c76e9687a469a77069cdca7ac12e00bf83cbf3710a63802b908cc6408c2e1c352afb27f048afb6a78eb11280a75ec3eb6ce2e609dcf60643870185622ea975e1cb4a603b4e00c9c71d248382b78ad5387a9dad804c3f160740fdceed52d3da80441ae8cdd6dcc00e986c663a6023c250a806424d42f2423912fd04c96d6db968a4cbe0c30e07f29ea0a372415bae55400b4473265dc25d43c90ece0d9c62c46445404d83ffe07263803166cac0bf051a92542d6020cedf7ba548adc14ea62a81ebfd28f10c0d9ae0e568f2a9d931b5e2ddf0b84bb59b38448c0b0ec820f02a32115a834a636acff0de4af8189d16991b6cdf8b6015e228cfc24c71cfd27a3f0e0240a3ee83368f98d24771cb4b69cd479f3d693c787e233b64744dc55f262a0f0354159f349469b6901709fac2ead6f3e3c5f1435ba2525dec26baaa744016dce44cd4e67cdddd08178cbb08c44f6355e7da696da9a0c09952b530878e455d68e20c01498589051daf1f75f5b1fae20f38e31c41f949a960c44f6e8a01e795efa5bf1890ab92f0785f51893259bff0b2b07dce63be82bb926e4259076ebfbb8d08c52f607c3f4a16a7d73ab827215b9b22c7bc48d6603b3fd9059994520fda5483506faa971ef39de784a8b995572212c726944a0deb22d1596f8646f5f484f0c39db04172c281dd3ecce4c6afa4203df7acca6d719a5732aa33deb68633d2250223b6889986e91072db37bd9bb1a6315578e608126594091edd84f84a3091223bbf85a7298c5544a2018991fff8cf509093081030999b02d7a147357aeb160d1f045cc89a9f952d01997e92f7f371c47d479656d751dd401e911deed60f79f739f42b660065a4152fc916596d8937cfc96005144d6f0e891d45cd280eb7578903192660dc57e34f3b1714b09fa45b8d8d31d21380262ab5ab10ce5dbbc720d20ba1ab86ffe0489b71301a0dbf5a820e9a07dc18f324fc3e3830fd54447039006527cadae655fbf153b1caf994ba2cabc49f4ece5b0ffe3267ca772e270f6e6a9d8c879fab54f0ebe158a7237d1f63e6100bde740e124a21f72ccc9848d9c9cf5c61463f39fecfdf7859685f85e7310a49518fabdee6e3044aa70fc890dfe27df27608d121d348a5ba904ad04a83520186fa81a250be78e134afda06ef1fd575e94691e7548342bd454a6dd4fc644d3cc417cc2db17427b8b4133300c2ffda69503729344bf57913897214a8c2aaea20f2130c9118dfc090801b14d8cc6f30822db55bc58a23f202bc68f3934a87ba4ca2e7cbc57cb96a82c6f43088238e9579d7bb862d0239617adbbe1dad24ce813d20db2a7602e8f593fb265b36fc57c5c550ed72d303c623fc7581f5427a84a95b0b9f4fb7c48552f4652c85244e600d584c438b6d5c8b4394ccc339ca6fb2e053983abd45f2161f68ce9283a71c00644954327d0f3373789101cb57179a94f0072de0b2c3f3bc7485978215070ee71197e22fc7c2ad571b91607b0a2e8c766e38d5a7942c90db55146902d84c8edf3558919104760e5128befa0ca03873287abfe938f2cfc1a7d45f506ef9bb344198fbf908438cd989d1966bcad22e01fc8988efb6dcaf39c72a35528f794b85372e297fd7afb789404028646ec668e4024131c8a34abd82d4ef5e45386c3e48ab94c835f69870363fc63deefa0caeb383d40b408dcf822e480f9810093f83253deb7aff71b81caaad9ab6a56b76887c8a10f0711f5a0770cfd11ee15c18599a50423d950313c3b845ab0dc9c00fa938357e3d3b69d9ba24eee809a1af913203124fc27b981204f242bb68c34b7ea31ee42a4982ba5d875945e43aa928cc1d2f383bb9f53bf97b45dca4cb90e91a5d36185162449931c7b7e076faefb0156680c50a48de0098da7ba55a3123bd4fb67f294725101d3c59069217c4802503ae2beb3c2104029b5317da0fb612ce8354ee1d199c0a863313ba3aef9b69dc3e5e274baad3c6018a0b9f8415fbe63d613454a0b5ab7046fbe532a5c64fef927f541a30474a5a0b3ec0ea79b762bc4d49d387fca5953e1523ff932ad53e53a4d6e58c5e2b3ab03acb5e71147a8e984178a559cc88e530c116e47bb189aba0f1c7105ebd119df624c4cf58d3e02155166d775e3f6448201b19a6a8ec60312849262b3570ce1db2493a24939ec95bc86e359826f21e38fc5a63585587a20e7ea7cd4429ef27f3b8d4c1c28a7c69002c58201fa05c6d0ff68abf8d840acface196e4c9cdd549deaf7a327c59f180ba3e0d930320072e2ce07ac01567a41fc76a3361c288dcbe50e9475ebee8555826e8ef3ac26f349079701aa773a9f144f9086d0a396f64058360190fcf0b28402f9ff9851bfdba9e437cd062a2f4fac23691168423eef9701792195d35183b10182438a83c7f9dff336641d36b8029f0bbe519f17e01614fb4b3a3ea3bd81d70e67b5031ce840ecffba9853c9f6ac72a0831c987d96d943ffc44d87862823b6806df69cb0a858e12d4f7f01e0a2dc7e62ffabd20cdbcc9bfea58be2b13ea4f34822f5a39fa9c4b427194f70e7036aef8c64863f91b1f44df593d22e087c0d82318b9ed81099e7330cb6fb6507ce8025268977e30f633572d9ab1959b4e6a746e65338b904edb220ad9fa232189a02b8543b41831bcfac537ae2bb2db2e371130048d2bcc393395b6d18f44ec7b10baf6617e1db4432f7dd0a0be99ee8c688409c4438d646e36503232bcd7ab632764d05f40cc5f2de97129d7ed2bcf960ddb3c20738880bc428de33c99c4207ead58cde48305a8255a47328c489e9ec9b4109d289f410e4dd60712d9862dad8350ee3b9ff2a1698ad19661992931f9498e7358ee14bc785885abf5e68421f5abe07e610360925573cc9e91e86bb8bc575429c2ef658cd63560477e7422b81e780fcc33a9910cceb80781fa3e305d583f83725cf80e5d27013cea68b896db6f490dd66d298fd9537aec6a00bb857f3ab4fd0d2a5dbe500fd0a4f1ac84e781a911d2ff4db17cbb1e6408fc1facc84a25d648513b22acd3c46d67d4bfa911cfe986acfebf681033461228fdcca5122b7dd22130e51d640b4565f63b8292b3bc894fbf77c9efee4b3621205f8fa99989c87b65fdefe8b926996f9ca2a2bf9617ab6fe092a9347ec63c3caa2ab268828996fcbc632a0d3bdab6a11e62a02f5100e3023a8c702c7c0d60f4e0853b4b09d4f813a1b77ed37f4a7838b92c06e96c40366f6252a74864e5621be9581baccfb5142a78fd2cc1971f8d530cba385de5e8ce9b577644d571053224a960540a057cec6ee2b7e7e743491dde071335c2a04a7b5ea826b9419c8f42831c9cea4106cbc0f980c302a04278a804350af46845e4eea109563471980a651ca6e6838fea391ae574760c56d2f07fdcdb716ab290db1d6af34820077b77e09e8e68beba75551e15e254e8bc815828e603d0f7b6c3ccbc7fd29ba15a4c4e1033e113785871dab4d935f1a34e983bbd0218545bfca5c85d0829e5f93689150f3b79ca1cdd0d63dc9d07bd7652b58adcb1065542617caee2307b9f307617e18c1b484f6ae9ad03f9e3769c6f3de449c53abe9e498551ff3ade2a12234c0780695021c043b6338ae1ec84dc006ba6ea24f8bf0e9a91970ed62bc470c1d4450a610ea66bd1f6c57450d5a2b045c3650b7b86072347a3185c71d6b474f8a4524b21e0e3cce7ffd60d8b11e2267e85aedfe0c28b5853c7ce381b4f5652f039a046c49f0496d0cd25d286117264418dc70970c14b743209ed2ba923ee088b09db635b3912e5a64d27ce16bd7d1fe49a80621ed428af2ce3897042a0eec9f0638829856c0a951e165feb91a0412c9e9734a901ff13200c57db89ae7aeac8a9d056e03514b67eae2c380aedf07b9e276d5ece78c68828ce22cbe11fe7df1d46a4c0e9a973c7bc36750aec3a4d66b6c9f1f1c7675da3a6a2546022cc8c46947b243ec0c3bd915ddb8538096fd9141020451ca571545caac6dedb9ad9904ec101bb1809cd2c99d2ab6b866a38b9dc3d80b3fc512317a8d1c9cf3b2b4c9fd945ba14bf8e045971cf78004abbf0ba9123d966169b54094a89cae8ae246b5b1875540181898f5a5908d890366d88b823b85273218770aacd0380b32393e16d3015ec8c1e790c5e803b6b6a11f48a7706d60e143ee2d46cc6ae1fcaf186ba35282f82b118c0293a23753eb0b317107e6ecb7b7d6d1b8e1dfa1bbf328f3a7fac2e1a71b58961ede6ffe37f55a0eb41ed671acf98c2ca07917a5a70e178bf5356d2b06e188a5e4fd87703eebaccfeae2e2eda01598a7581eae0552f3511fcf83c6333dd472680b0b54c4d6351eb9fcd92aea8391038bf5e43139e8e91c737701a4d91784b372a88c6d9bd9bf10bf5ac8a9cb3da4d2048013e03f60d843062ff2e296451baaedda696ece09f59c07d8298d72c8414b6facfa04610e8ef763e757a3f7b078e2c80eadd46990e80cc483a4f2d5c3aaa659df6f480821d963616840493f271a42777553fd554d484df1540b730ba236023df12abf3471578d4ef816186070917c128d08edcd396e2f1aa7992c0c24dda6b82352cb7a0fbaf499e6fc01aa0c850c89db9c84e021183d909658be24bc02c042a4701ff657c1ae9d677106f000bfb2221b8f77182605161488cc7c702557f4ffee9406f0488258dee0d01720ac9f94aaa6b6a43cc25c98d3ecc335cd1d825cb6100ce4ed55e1bee683a2caa5e7742989904f2b021edc5aa9973bd4ca01b0f73cf502421eebab826c1b58d4b91a79a33847c2a6a9be5f073646400c6ce89be55b0a499dc47a9d6254cc2dce928b82f2aeb6505d8b4238ff73cd326b0738992875aeb33bcc060a3618dfe17f6c2950e6a606a67dfc5f93294cd95987fa2403b031c904918a8cbbc1a38f5207139bafb0208d3edd66dee19afceef4eb4f595e9aed2f3c7d08b74fa6c8efe7a5fd7ef3be5c16e3e345c2ad5c9b2629ec9f6b1b0464f0f27c0f9f1c18a7be4a0d30f86094f9cb1f24ef3aa6c449b259431b902c1a264c1693ba1410c606ff70c72dafbba9e656ba4d5e7d807e06ecda1694e198270180a3882b1ff1092612a3d8748ddd40228077055b0ce6bdba5ae50dcb83d3f5a12b1ff2916a0904ebe25d8b6ac24bf0923be48983d25c30a3eeb7b0dae3b74e12fd09626031a27ed2f11ff4212f457d7c57ea3d29091c510e56a90486c8367dd19955740d3fe35b042e31d60a4ba6879f3d04bad3ce0c9a3f885557c16ab01681c65d976824a75c673357e14e97f28f14a71a5205788cac2ae3fb713804e7da1aa8489b806493bcf698048338de98fd1c2d64f2d3fc80050c12d4733b84f021d33c40c72b8f38bfc7ec705761ea1497348874db595a777d82f41eac74f4a147d2eba446bb42209ccecac4a2cd2522fa68d3b0bae97f9fac4eec06292123ac18f04a3f0617360d32f013842875b68e52ddd6b45c35cda375da00b7621711639ada60de168419c3b2e57c5da827cec9b7d0e098051b0193c78e5af142a508053075f6fa594b8c16c976e272fb50e21d62b013bf19bcdacca6bb3bd64226ad7972214a2ebae6147306b82ee43570810388b8da46a41fa096bbfd0cb8ca56014ddedac5bee3e97cef45f327880ace46398eab00cb18f4425cc07da3e6b02d8937fb5746e13724477bba659392436879a599a61b1d85e57bea0bc3e9b78afd1d79fc8fa29b6c53b0e329ae3808ced2627f18f27170a60c5369a0a070ae00a9833cb9ecf0097854a586538cd608ec0c2f53f73fb0c2a22221f676fc6e4d043b08098a762ffc0299e5aeebd5deb9645bdc64ca7baf6947c8d552bb514da37e9455b4b5c822f89bf63083175437531caa04855ded889557895aa812923b75b8dd22b1846c98bc8dfb9e7f726e5958202b29f81b0d76de40207d678432dd99fd681c3e2ea24c01d1383cd1ab9739e18ee7825499229b4a5c7f6d1676adac24352261796700d8f2c3de5a84633d6213c151c96b926cde6a999274882ccbf962ada4bef652a27306b132548ac3fb8e5e4fe7c74fcdc0e3fc021ab9571c061c90e843afa232a39f3eac4c1667fa54190b280a8a33124bd4e9b4041b1c9bc499de7ba19db7488ab7e8e1c209c9f953007ed9c03f890cef4198959080504cf22ca5b00d69f1d3e6633cae8375bb56dc2da3eb41dbd54123c5c8c0dd835473c0e9a4eddf63dd406591353ee9fc1d875134b7b6244e5e33ef55da933f1c4f3f3ae092f5c4a039d2d903fd20ff0dea4985f030eec9fcbf016f548b0d67b21fd5961812cef3bb62604575c6e9d89b00688c5875b117bed849800d453740bf2ab1fd908d54d3e6d0fdabcdcdccf1333defeaa84f9c54fb1cf7d57b1c934d91d10868011c14b7fbc9097374b0c74bea9902c702fc99ed0b2710aa58b4b8ef0c1139047d14f1a9fd54c73db413a93a56c5faabead0c3bd17d69919ac55e03842342cd74429683c406a7206fb4c3f75c2afd634b223f46fb90eabb046e66e5dd0874fa077dc421fa8fc2a542f520b02abf13bec23e2ced64cd427b44b7b729147de310691ccc0a78d4457c88f9c19eec8a88c35e1c78bacc16ac1bfc9dc536d972047d703a9345fb070fdbb7665fd870306b96ee8b9bf834418ec1c9f443a8cc565fb88587cdca5043d3c3f4ae253a54db1609ecbd3f8fb4444fda15d7fa0cc8d91a7589f940dfa7dfaf2de0591bfd1ca2a8f3f5793a6d887a9ff7b0859f0a43baaa943f7500cbf6ccdc30434bc94f5580ed880442ab91d446ed29ad81b70bc6aa622ba46138b39b310b90556e0ebc256dfe8b6f274409e5acff6b51821ccbb2d6a1b5b65299848bf394b475baae38bd4d46afe6a1ce7b8edace544e163b1e4d8b237ce3ddce007a77a68975c6d8293d642cd666c694103ae3d65de8f66910e0c6b53c5d40af3de439d014edc0a7db5468eef6c0cd47400fccb9af8111b57d14214547183f781413231083dfb7ac6835fb65bea00924f5801985df1211e6a81dab4e5ba3f9e23636001541cc1abbf37b58c89c3711575fb06239a9870103494d2a6465440278d756536ebb69190aa5d8df2e22e15708d8235bd09e2f950511d6af38d9a44b47eb06947cd045f31278d91e4c3635b9a9e10359935ef322748757703b39a144ffd063dc92a30484f6307f9c896e18cc8556c55eb183f2cb922ee124c9c584c60276517e0cfe4e6aca9a2d1b9e5460d31487aed5cb573e6b3eb4902c128630895052341e6536ac1675024ca5f86c3b074b477cb093b1a8a2777e9a9768ea2113cc8a4b649c7e9389bf4902d114c1a39117b1f5cc2243dc291461e99942da7053b183a71247364683af1f61c376c1b775ca66073cddd7f48b07350bb75a4b472a47ae5da9829a21e748399a3c3ace7e6c0a57e98ba2abfd59008abffdb71b3e26cba184a143884375ba7e64dafe963c86813c99ef35627dc1e55ff94d5afe9836f77705c5e45bd00bce68c0ef138cf2dd10ff14fa9dc336d4a229156249cea36bdcb0c013b246e50aff4fc2a3117f2a0dc8e8651c363835c2759b38f5bd2c6969394909564ebbcd0baf04db17b86b6f60680ad55deff3261326f5476502178d471646bed16acef316cb2535ab403ed3da0fa50408e0646c57c29bbab80281c37a1f6e18ee12b9af984d8301bb66d5bc6c713e33ac9bc828b757fd3be10cd248960a71be2789795c06c43bc95c85426dd245bb2cc96f70da9723d0112ec53eb9b3f66a0661fddc2c6772a068159dabb9aa974ee3ab250ec28095b61daf6de091456fa18cf1abb95a3638d83d0713cc27686d0ef5d31b6397829469ae32d70460be64580e8e4903439588542fcc02a08961ca65c252af29d2be5a557ed28c83029eae1468cb46f9367c8376a925b6982619c56642b6be398aae158c5dda8eef31261bff4a6b67e1f44cec421aaefc7564255c98cfe4c0421e1170bb9a7c8c0269235cd288344f7cc8cf87485aa9c4d1f65c2c7c61b3dc99babb7d7c5ee826fa5a13ac9149d41fd20e4d7f324c51a5c2a87138015d784ac4efbf90d22cde757b0ed97c0b3614f821d61b3ec3f91fe61715051081b3c5416259cf21b34bbc87f75982ab449cf348b4c1d0b85b3ba5125277128d7d440d6f2eeb980854b0227e61e1d38074e4a8745a299b7698163344ae9cc12bb9a78ff6311de1398727d6e3e10031432f54e2461563a4c9c9a6f733cc9b58acc36f295eb8966eedcc7c6caaad40a5a1f1fd34910c0a8f7307af7ef84b65173836244641e8c8240d419e0235934974242508228839a0d69299a090389fa120da842a1a13e38652c80870b3d041ca7d8b71f61104e134393198df431639fe9f2698e89d104efecc01a12f02f77535d17be41e46a823819196eed47f742cd8848ad6f8d689e6649ff90fdb503081114adb05bcd5b39dacb6c153549e55bf4c2b3bcbdfecb510305c54992179a54098f6a14ed1adcace3486e07dc77d57b63a0e208edb60de717d50b0ccc980b03559d8611d7915d6925aacc7ea34aec6bfeb9e81a65b276f5041d9b8409b1f3a49afe8bb90f4426f9c3524017a90178fe1677e20b0af91469e2a743c089480fa189d47b5685ce72dc57ffe6625cb45f40c042babd7e6924f83ea9917fc12a7aa8c062908f26682145ef4ac25c6a5092c664e6a3e7041434d749ae748b238ca4f402d131c5bad5b4a06e797a4bbd5a0bd36a56f1cdd3540778ccf1e20ad2ebd54b4b7f981311f4cf4e4750499488a6bc4ffee1a855262537c461d412bcd947de283f7a8fa206ec6dc59341f27502d70705ec2808d6ce2ed712ad61755f97a6833572b0b9494ae8235c29ff38ad43087981ae9ce5e61447e33aef3cb12c1b88bc9e26cbb80b2ea14041d14b019f2d426c959e6a7deccd71e4b3afba3fac4548f0aa2dbbeeafe41376af3795dd335ba6674eafffe8495d088c8da73c25d5adcca1560a0a92a01195e45ee6339755b1fbbb3aaa99380f9b4fb22668275d9f68fbbb4df2fed0e6a0403d4baa991c8b86153a810d7f06cdbcd754e786b3226d61adc38f6193b40b257286cd9e5e1429d624e9c016a30119fd9b319a78083648c13ad81cda336506145a1bc31926548df66f780148761a1952d5fb0245065c9e5887559cf2328efaf4b49bad36d2649975b20fb7e3c338eee6bf9426af14713138990533387307f779f3fdb900a9210fe3168ebb37a0754e3c19d7c2815e4059ec5b619b038b2d58ecdcb931499d444050955971707bcc7a4ed0af0c6db7306cc00741179374b531c1be4ac59bffceaf72635a469188ada6237cd049b4406ead8c090a12b294109a77991bc0c8d7511816e72acb6d4baca375a933c651013a9d136174baf46bbb4b442e8ea59c217b2ef1679099e91337d7bb87e379653cc8527fe90332dccd44aadb4b9d9c8270d748092556e0353943e506b7c1a381d1cc6dd1de3b029b016ab96081460b869a203e03051f64e9f0d04216944207ecf4d04a23a257f23f2f2ae293173012bcd842d2eddf15ee5b738b17cd4b18824aa571bed29135bbd850d0573d87366936200c357283566954f8b2b13344d15572dc0f91db1d8d967b3b96ca4832bed5ac6ba192181c1260065acbeb080db8b77c225f10774da802b4fa69391c3d945d57638fb2b65500c3ce120c05d893c7870958c8c35f0520cfecd6446268c268f25b70c3c9b33449f9e5db801e3b2411e87d4646d32642889d04334a548b1fd3baa1165c396fcc285a66cb24af7d7d5431fc83a2252590662a41648b75374f01f8281a28ac11b7cbef194a8e83a0badb3f27e473ef3a8e04b774e4a24f401983840eee658b5ba88123a5d052bc4d67649d18f0b45d8a0316dd7e5dc5dab0c240de285778baea85a0427a89407eab7770b4a81a3d9cfb0f70caf07d8ccaeb171d2f0e58b8a27200411833ea2c64d8803d3e0cd9a3cd4e4dd0a6ed47cd5bcaff874b2e2c6a4c7eaded6b4702dbd4a6bf8eb954589668f8ca76bc8f1757a1c1aa181b0dfae8e03d8e0935348d6c2efca3db767fcf4e7339ab571eda0842c415212363e4a9463ee3b1c509b9b5b07c5d6c5452424a4f01002f9b0a1f4b2f5717db140706df924a42af3e6b8c84002ebc1613fb3cac2a10a8fa11f09a4b8d0654b00a0f83d2d7575365efdb86140e2880f5a1330c8442723f3ea449dd4c32e5fd479de5d71413c77158d5df70c83ad4f179d2b819c7fcf605b9dbe778d2a992d1caa42f7c9f4790f839ee7473ed70b5419fd171181fa0cb32c97ff26af0066c23c1d6c2ee620c0485e76acdbdb42b5ebcc3288de43dfd0c0bd992f638849ff0c9cd68a3419a4272c50764d3b6aa0309e95cfa85d9947f99fef38cce326ab1ae3530cb1df11f8508446d7f7171b901d7f809d4f77fb139499f3587609476902898f9d1f68e24a34c2a810dcfa513ddd703cc29276f9126e0b22bc12412c7cf148405f0ad4c9bcd1d0798b061e123ab92b6275489eabd0d64756e730db83a7aac48c6c2aa53f0f1582df40de6db0106e0cb8e49c81ea5a486c1fe07a309d229b69890a48b08830b4155716bbe819e665858ee64ec01a00fbe1781cd2cd5720cea02d2d51ea5689c01b121ef6ab82df5a113086ff828b0ba1b487fc14ff8cb77238a22ab2fd3fd8d31b0f417237d94892255db1da57e878bf01466e4c48a25db63396e6e1c90cca4f0d7b3ed8ab3603789da8516ea9e628ea2116ec0396196a066d6305c5076ae793e205528023b02242a70b39e3ccbad19d84529b15e6b7be4031c59b36768bef96f71d807b301fb4cab592e84a4c84f0217c9c19c47755c85f42f4fd6faf5ef5fea15768a30d373dd3dd46bf975082a88a28b00c9fd1ca8bbcf05ac9b2b1d370fb5d3eb9af9b6d622061268c8d39285c1870ea1615782a25380dd6726840771e13c3c0afd4ec38947764b59068c475d9fb28473211a8386c8fcc04f5dcaa158736a2789ecd3da5e7a83f87a56e6aa9dcc33e0d21c95dffd559bc5c08de153f8e5d3253c78d118353391eb0adcad0688c57e97e2ca52e5d1c12679a9859c7c983fe72b32a581b8a803333b2531b79c2dea1971182292c74f1829a70dc1d3b2fcf79e3daf8153a109409602912b6472977d36e3e9d3d0a2e7e406f852e8cb206eb7c1241ed59a387da2845a884f0cf6908f90735fb7eaf51fe89674cf68e1270f9bcaa4d3c56f9cc7864294e0543a5fd15b6adc88505b54bb2d93918225ad62fcef4f555aaba18b2630553b5c24f7c4552535bc479d01bd4a841354ed922031193f6ca629dff118ea772084ca8a04c1cb6c2c4a74d2e68a89fd398b2a3a8b68b367ec4d00402ba58308c144ec1b18fa15bdc07bf1d91ddea43047ebf435fe74dad84933c002cb1c3b6abb7c0c119b366b3673731ce34e421405afd4c4d16dfe53851fd3dd28b52cc0890d7fa592b1e68bb9e91de16bbc5b248d50390ace947b60e798c757b53b5c32e34b33de191563b403e3c01518d7bb2d347393a952eff979992fa3a73989329b3279998a3668d73759bffa255625114df9610f1c7379fdd8860700e6a8c24096301cd5850bb46fc54605bed9af264cbb0f576fa809aca1423f842844eecdf596e6437a045de2e4850a19f467c3f58521d0675ad38d9af85aec171a80c5a569e247d9194fc07fe8cfe1ba7fb069ed445d817bdee8498005e050935796ce8d1075b9dfc236e7b8f3306602990b95e8247d582a8e21f034c3830638bb06e6396047e0d3c86d13f0b43cb364184bb9b8f33d41747d98542e39170380186081148a131dd8feac6867fe6054692ca61a388bcc46735392b608892c3dcbe262b9b3f0472df062e1f22b0c9532871326a06915dee74aef1c0a984a5727d6110cc12babfa4f92905e31ea0eb7dc01f5ed0c360e67feaf5d67fc5d5fb7061081decff42e6262a708797c6172a8b95f5b4d0144ff317786376d319985fa9c005f7ec076b0fd794948557c6ed4b53d34d6599f232b3a4847ba297f9066eba5e8328522c53beda65eb7e7d3857cf37fe7427f70c6697a016aae5cd12c3433df1591471ce5f16855f2ca34bea0419544c79cfe0608242a13e84b0c0fc6a865852c3cae7c6cd22f566c1c28007a15478d67969f1da87fbc68d4b136bc8a6978ea270bd3c29e1331293d807d4800a37d3c47faf1ba445a9d2f7f8096f46dcf4dfb1c10ef70d7245b8e6dd3c075ecc5d43b0b628249e1cc81283fdac977289746dd038bfd718f3bd902c103cc3392c5678534984ca484ae0e1c37e172b66398c309ac10e51e834b244890af8160ad27e2fb1dbdcce0f7ea2d97fe861a55e83a951348e1b92d2e8a430d38d6c8497ce5b83a888a2f44e51ea2021351c98ba8c84674f21b7274fe9a4404ed22bacf115d0c896e9844d786a26c4891fca648a25424f12a92c115c9088b6a3220129f6d0de9f046a4a268535146aa28bc2a4ae32acae41547fd0aa0830518c402b0b1002d59007b591050660ca1f0cd15f336383d1d8cf812bf9f7130628c18316f8c984946f97bbeddf04448fc6f215cb0d9feda5c39b62d18f0bdcba295c46897a9dc2e6708bbafd84e831a095331db824faf9600034d0ee778ea9713db1dec2c6ca74342677ad72345a9842a4454a6d8352a8a11eb47578de6a3a2865ffbfe88082c3796ed9e12dd049d8892ef507e106351a0184f0ceb8a29221c09da998f87f8a444b0d12f0d1db9e778a3b79e6e6ff98b5a9d61f4c3ecc970457331504706fd280d0b229d612a28b76745d5a858ec04c56a177519e47dc67ec94810d4e5167a38855e6474cf53619d2b7bfbcedbaaa88f87ead431f621efe648344f7bcc9c823fd7d57a33ad3f0f35fa4fea50338da31e58890a8276ab454561c6500dfc0789abd2358bb090f354872b07b5d2c2f7891a9d6b26cd6fd750d5658222e922468586e112ca0f488b291da655f4bf8940ffb42ce712bec580022cd58c9eeb26f15d11a2b965e365c679c919407b9213ec7e923eb483832e578e7b3af59dd8ec5ab2bed97f762555c4b0ab3176c9ec27d54494acae78606ae277730c2064c30a4737b6db6998053d9207035d4cb453a8c9a17cad0d0b03c3cbc2e9062172730a836126e593236440177ce33cc3b27b80e2577998e1d838fec1262cad59d78cec75ae4905f19885585a1dc12f03491443ba73cad4d1aaa7c0949bf508b09551b20e28d4053833fefcb0acda10f5b502c41e5a409d349485d2b279a8575f952fc03c4dc272f5ef65801d69ff777abbaa41e014499753ba54bb420ddffff169fbabe1c1c9b06b93a064ce1906d4141d93924198f118aeadaa5f9561a67f3baf4f8e959f97fea81bba4bf92f7d784e43ff7380d10d92e148a5fdaa33a4c17da09be1054a5d3a8bda6771f2c792297ea80c77e0d152c4aaadb7a3dd32bc11a719bea2f5b8a833fce8977e97436060bd4a6540c95d3629f19b51f19ad0bdad210b6d925cb7641d77f466bcea53828fa67c1d4daef034f885fa3ac83c44d4bac41550e4b35605e4a0e9c62cc376f2e5f8101e1ee72e7e14d56f2ee245e550e9beb95446f6fdcc593693469303156de3f81bdba8322fe7dab9c21088ec92ad7d24f3a91b84899a1bd1bf3891571d8566f1fad412c380753c137f9706a4c938ac78d8b3f649b426626730cb65d289fbc1f45ac8b90df71e82b6eb0676650c50ad64fa1bd6b05bcffb0b082dda461c5915a5ca9adbb0838cf5146de91300ad2c61b0d6900be0096b31a6d31d7f7c313a11341cf84e50c41da50637e35405491a800c11f02ae39d8368b06c89d253e0fb94c55a0c237d10f77c13271940884b42d8c42b3d2c73e35ab51a522435c2ff20570fd0fff3f664886890cd7862968435a1de65c1e54af3b1de238629f6e46ecebdde58994f9d0badcc42b22ef32ab847105f59a748b9f25162c11308792ce43e649c5313bb1b7edba5a534d08cfe8e4508916b168a01646e99dec8f74ebbab50ff64afe8f5c4953dbf77c25cbaa73c77438605e57a6ffc7e1eb35a6122f4535aba982b524f0fd990f10b48376ecd783ac1c1c2a5a87dce9553c0f9ffcbadf2650933382c817262f2c2685d19f8d919c573715faadea18ca424c2ef49ff2953086b509a21db1933b63d7b20a77478999cd839bd88d8de602cf380ee35cd5aaf10c7ba6103f88847d526408c1ca0a8eac2a8d73032204c6a586493d88833c8dcb85336f21a924fa8b9b3fcd6fb38d659749caccccfd072055fe1e2ee19a9bfc4390876077367135de0f05a4eb865f9abe472b15a432b918ff8e1f6c4eca1e80ce8c12916fbc5623227d945b0f1fe11f4284a71bce3d675609363d88b33ca3c1ec2dfe8d77680b96fd53f730f15ddf100b08600df2df44041efc58fbd7f94a2e28e30ec14ae17a89bef0d8963d7df4311f09c95fe78c30111c77d82bae3d244ef431605e1e6f45550bfb6cb7d2c02e47610a6e7329ca0b5d1c308a9ec1f89d8562a4f6006db18b7f4ede6eeb01080c66b446631a2cd7ec8f1ced95eeaa9e5103579d741b14ba055c0dcb54b83d5b5129bfcd35f1169e0ce2811993744a32dd84371961ca34d223e1d731b8293f3dcb7da16397f1b6b601acc94a41e09b84a33740af2dfbed1a5a9dd20c73ee196cdc39fbb333eca44c62883b0de345c496e48badf5e9f84c11bec5245bc7a57d4ae367d8ec212ccc22093facf03c584649ab66d03d177bbef0f4eff93c4facbe1dbb5301556db4def61ff332f4f5e6b54a00d5131f7fbf3cee6cac13ae286fb7cbfdd2eaef2a709067ca20ee84bcf390e5470d6a45f1344ddf4d18390b33e611ffd69f4a0107228d51735d24326328a80d06e3fabfbeb89eb7a3e777cc2f603a4ea349369898d71c323fec2baf197e19dbfe65fc7345c6f040aa1bbb15840d811a539e5e6645736f6f4f44010b387307881b39e24212d4f5d4c1f3c9185c05e99857df22088e39493f0677c57fe0cedc77fa3bfa77fc43b8377f9a63366f4721a14bb591633360b84acb5b6bb8990665b371112b203c00b110bff0933ddafa619d02606fc13ab9603924106bbca8c0add04a3bbb16bb56aed7911672a941da123826cbdd2628c5145478c37c6d78ad55165692cfde9c6698a6d7f743f1aea8da222454dd334cd698aad8606c315341c3048cb012f6110d884c6126f4ae3808739541c3046531f1602623435e20c835c5954787a0017a4f6dd8eb3514897867449481fc2b78d3b91a74b4276a230d225789e9d2e091112a3388691a6e5805555df15c28d942ce9e952dce9c130c3237807ba4c0a77838f5455ad425015886fe91845655b4f1c72a390c39bb6c37478d8446389cfa32c833d6838e03ff142212d077c1482e1692c9caa049d8314568332b4262cd1051e007eaf77e84110278620c6185454d15f34a8bbbbbb5bc892dbe077d1a8075cc0ef375e8e0f8a5003bfd28c1248a8c28c2d88810325baf0e2881e0a0a3370bf0b21383a707f6a64e48091e082e302f7a1d0c18186aede7c4fe75d4704de7b0f00b8bf01327c20833038610b2a3882dbb16a84e09430c1106f1a917a8486a3dd85445a8e3e465321ce90c84c0354029774a9e70ab584bb710947ebd6d371015805b81f95b040cf63b980c3d1efa8022c54156839faf1469b58d3a56b0b35c39d9db603fc8cb20ceec08ba3e1e8777db7d4dd8f37b10892d46f15b0baabf7e79fb7f4f4cfab720530757d40019b6bce35d7de4c4778235b4a43d87a70d839ec6eec5b25a955d5faf00ae9de2d8974c95149b0e3c1ee8ee2693998a8f9bd9e96a3bd5d89d334a8728401075b2e0d42082fa55369a1e6b784e249f258dedbf134d7f370744df27169f40512e12f89c4e9826c1817b5e5ecd02cd9a92da78bd90511cc8bda72ba00821ba381fbb05b3f51d39ea0896f29f9539ce8cda21b73648316753aa42fd59d5d9ac1ef8f565d7a33d3b34ce338a94063f4c59370364b6b7d6a0841d0c12d270a47dc805b0e10b0c0a3c7e28a348e7e6f6185148c6002e066c50e1945b25081888a2144f0909d36a2b345976026060f10aa27083c0fc07d77a481b005dc7768344be6b6e89596334409eebb9df81e0e765d609cc7f28408c1d9f1865c43a8f9d108a1a9e995f7de37bd025b099b2e75ed120992207438ae48afb49c20f0e007e097f2e2831076095eeae8525394f5b145582762c6c5ba7c96ba65ad6bfd59eaf5983e9f4f8cb74d0ee7c81257a457e2759c11ec78ba27bedb4abad48d060f6a1ee5764270763a2e34a492a8372438401a13439da6d16ba337aa66102a233c0a529082ef3df7de9c87ee893246b87bba14d55efcab0db7c37938bab9ecb6539da5d137f5e1b40d7eb357de4d97dedf13add22ba426cd372caf11c4d3f4b642a20e317512d5378d835e975e12bc79da66615b549120c04745e318d2c583594efd9b505073df549bc9b61b9bbee91b1bf870a0a402101ddc72642044063210e1276ea8a0b099396184af31c22ec52fd1a59a2e29515da166a8730520b8bd1d288618bd925f0dcba37938de81bc9aaa1a8dfe5249e5bd9a22b046992e354f7d69104e7666c253f61deabc27caa8b8e578d104bc032570cbf9020d3cc22dc78b2f7076d4344d325dd56a06bae78ae0f7e9c5dd1e14ecf91421abaad6d1a802b8bd6187038c7ba94b30dec7d45e55555555d707553db1a3e4c3dde86ebb3ea667f71ea7bbdbdc9ebb3ea80bc57b54a9adb5c803d91e8bc321e586c8fe534334c2394605d30be3e3c537182d09a08ff72c2b9002e7323f0f8b2882881f69b8c01b31e302af11d527f5cf5bdee7fe28a2a5e112a4860b14d35d017c84173e3a2360bc1146c46b04bcef3a2a0e41b614394dcbbaa895bf2c09e8a575698ba02762c6855e2364a316b06eaee05b1eacc838123a0b7d5bcfb057ff10fdebb183de9a853ebbacb6d11d32387b4b836c0e02676f94020dbb99089c397a81e6f2316a6ecfaf9e0caeb7a8956f34740fbab9b29edd5c6fae00aed7db885e5e569eda22e489987191b688eb44ccb85cd7883bfbb9f18e5ee0b534457b5ca0b9c84b396df54829698d9871a96a975aabacb7747319ec01c911bd42ba3d2069575811050d4dd5039223aed2a5141c6e7ef4277eac2049188044b822a2a0e3123fe3022f113fa4e8c3ba82daaaae548e40838808d717ce5003b79c167c81df6bf80533c2a071a9190337f5e1701536b0a171696fe40596f786f37397c2373b84f501c333f81dc2eb03c32db734707eefb702b0f89b0ed509447d939b5c224cde1f1cec6e62a912158da80ac7e370de5e52716d07bb76a425693d77415c8db37137140fb504bb51c5d3caded2544905bdfef379f98ac475d774c01e7a4b4f4a400fd1d60e61e78a4fa6877e624dec7b3c4c17bde5510bfab3f53924125d990983def4057410e856416c05c45634167b4155e9953cca32114311e42efde780befb4b18761323bddb6c88188dc3513cd9146a6eec4ed32b5705a44b59163537387e12033c552304ec280dcf929d1e9d243847687082e8d4ec381b1e9ceb34c8f3a07da3d1fcb3948f873f3e6e986eb63e3faf0ff897c61052f10ee164264c7ab7a271a98064571cd10391e0027ef22947b0ebe2080e3cd87d07ec4a6e073dd8c814614503a4571c17d891701264c0ef3e882b086e2e1f9cf9c34d221dc87c590ca0da175888e9f28033404e1347e076056e393745301069d4ec8810e9952a3e9665594a60eb2de7a68acfc7aa5c759cb6028e1a6a70d410c401c1ee52ece09623850e7697693938205283d4766a0bd5d11dfdce765ceb8980db01c2d7b16da4aea8ef0e0131bcd1be7eddfdea04f3fe2cf5207057f86763c95d1988a73b821b444f25f9d087a4f7c603744a5a8e0b76f0bb166a6e3d42c05ec953e5b10451eb68f4974a2a2a3a4650842127b8e5b8600778881b22d338dca7e8881c044eebc9bea08291b0a2918802eeeb26122565f42829a38c9c1c949193032415183939489293833272728024270748dea6a8141602ce14fc86c405d2c0b7d6570887dffb11d21df0e56c54039ba2565808582a351d78e0682c1270385ed319858173e90bfc4a3db41cef991455c99bed3d178548217cc85498fac75ace00115255a4628cf1144555d4bbea6eaa5f95a0ab2a23b5bda56139b10494532cf1f97c3e9f8a095f802a9062898a3a03524b2a0b7e240eb8b0220a2ea41802174b7071821b4008534a449e3ca3d6c02d070a492c28ecd8fc3b8a80824e5551534c29e190b3050fce57a926305a91fe7c3e6358c2064d50b14413560069c20a4f29e1f094eaf003e10ed6b0821a1ea820053d3c400209d10806441e8e56f1c0063448e28607531c01812470a2206201a1d450f3a981c1b486215513474434682829988068f04c59d8e0eda01912a740920208a1681401352c89c01a681a47c3b9aa5e50228d9c29d610833468b6d8c9d1c1929c286a2e16389aa784051042d89cf0822a30a4c152094cac01471124e707555411c42de7074420cf8852410760a0051454f8020a466801852a709cf07909baa0882c8c54251c5a5545a3a7a801e7ab4c5d4c2a684e98c112b0c28641113846600a2c01086458b204670a646c21ea950cc38fa013a2f80286c7210a2da2c0e162622107ce90235cd0e4e0800815140d24080c15b68ca26c0ca33ef75ef760383d49781e0d13f306070c5a50c9818c2000a171699cebabaad1a8e163a7a3e168779315540801bfeba06be71a75713a1c7cd7b143afb49c1c10c1ed1f9069968c2647073c461a8e0ed893a3832538b7239f9c1c28c1b995f15a058702144084c38d141d4d07371dad82d1545d9014165ebf9b639ba65319f55ca7bf1eb270f9e88e09e2f4189e7310767777dff696763d4174a9bbbbbb6184139ce004618b97136aff55f03ddb601a9e8367c849a4c2288c544b8ce984134cf080091bfc407eaaa70305a77975aa8a8aedd34af15490c7422b69430626383e5335b29aac216cb7529c486051f25a3d414841f8da7dac73f0d3d5a5825041faddd8b0a16a82504146a329c8148482d7b51c919a6e6b39e21db458201f278ac863993753442a2cbc2325f7f68e7cdeb83f3fe22acabdc9bd2957021c5d051d0f09c0ef12c653cfc508a7ec7828228f2212cfa8ee9922620364e1d60e4f5343f707e36b172184cd5eefc2aaab2392fe2001d919af4868d9d3fb54b51ced37a4d15efb4b22d1b0ac782208d6914a9531ad4012856a85b1852abb9860d4cf1550548a8a39839a393179501fa07949a2c3803e2fbaf3a0090f4fdff2aaadb76c9e6f97c0c9416f690ad4d3c7c3571b0a1d73b407bc24d1e12b49f4695d92e8f6d030e93a8c75d12feba25b5774e7eb419f707eaa27197be8da9053b1dbe3e4f5c29c1c7461505ea1cdd89581f8e44214f7fa4879a0dc46ba320fcbd3d79b2f34c94eb343991d5e66103b566105c179ec3583a710bb10743385b5cd4328a1ad3ec78ebd6a96d1b1095c87167b664536a7f010ba7906875ee128133d135dd1afdf821ee2f1441fd9aa7188de9a45f4462530834921f8103c3dbc6efbbc309f5b9fdbf24036cbc0aabed1ea6e59af07dd3c8341c72cb539085ce3d75bb38c4edffa8a5e43c4827d645be3c0b2c9a7834ee685a9b7dcad7aab07948b0e7ac8e62030f6cc66874f40a7079d5ef479140b23ba5906d6b71df55e3fb1d9311bca6ce390cd2697b26cb61e82190cfa9424d1af8b3e6de8d46207d9ec30e8d5e62070bdc862a7c74e1fbaf39785c12ebda33c809e816cabd6ab6736ffc0167da5afa71776097bbdf3baf907b64e6f96812dcf60eb7eee0e2b00440e02fa684338ec9cc90b35d1ea54c51b152cf1c8d61ae8521343ca8e99235197b20c7e317347c4ef4ecc0c0ebfe96e60d7da7513f27515cf3d2c485018aa7bcbda351424080cb571cbf1e26a8d8565faf4473d5a20412a97f80f15ffb129d0e102298a2255b702f00d63a0bac4aaa22e141123e99986b08a87b1b8d6decd8e86fa80b5f65a93dd0ee0856c292ba4ea10572755ed73bec9f6520e7f2cb5cb50ddf373e8cc81fda9bab8be80a33fd95aa41ec39e20179aeee88a2a3d1cb1bbbba7d8104238756c081bc2ceddadbb75bb6ed80d5f6badbbc5d8551664ffbd9e34b599f05a8bbf61846143d7a073d70daafb51dde3e16990b6056e201be8a0488031c2490a1c08c339e79c731c08630d154e21a583b335935163713aefa163239b38a7a3e374706be71c7c7e3d3db0c6f9f02c6c41bb37458d535487dbc4a6a82a264954b1bee3cd3a66a33ee0d0a5aa6aeae36df174e02e451dbcbf23b55de52f0ecb0875e80f3c96e9da86e341956606fceede2b34aaab79fda8d758a89b92c374f1733d341d40c0a3b16487e3fd04180df8351d0be796c48b0fb41cefafa60d997ae0bc188271e096e305102c7bca215d7a8e0afca6898aa4b3d3a9a594ded989b64824ea1785bbe912921d1e31f0234274fa5ca7be71b9c34d6febe3bd2436f524eb27c724b6a41e21df9225a05737ef5065d565d5e8a8e5a85e53f3c964cd64ad1efa8d50153f71ce795db3fadccce6cadeb0209b6376c026afa01995d4baf46ebcc63321541b58de396df6cf8d6717155133b4b1914d5e44536b97e6ab2ecddb70cb92eaad3b8c59523d76d0a505bd6d7e4b60dc3fce524c54096d72c06e5404bba36c811d7ca24bef008036a3371400dc060575defd19e9d2bbe995b944aff43f57027f0ee1a7bfc06833c440e0187aa32f3138bb19ec6c0ca6ac4cc4a18b006780cfa37d977d4b6616e1f96a85d861dd07eca00bbb346b8c2c8a0580cd236c8395375c8dfb92a0f1761ecb53a297e031d2535c1393976e529f0fd5d20de63a8ac352de1c23c2a494aea52feb6ccb9bb66194878e0232e37af625adeda083dd413c44b0bbd583f2364308ee571bec6e190922a59b16dd91d9bc20b0ccc330d60150d11f4077d86db8bbf9c65f0dfdc1babbcf06a63fbd1f79ccbbbbbb97194c1d4618213ce9e5731bbca4176a063e740960a7ded214e86b43cee86de5e5a7b7cd313ddc257d3e59d2e7d4a7392fe97379b83eff72cdf9cf5f269563700c76ef0c5f435e1b72ea746344a337da037b5f18ecd485a98f11e1e9c6883076617de813f5018547bd0d0057e6f5cd365c78e3ca3c487fb07e00ddecb065f30feca63bcae3e13ef570a33d20763f64f8e959e661eb661360f77859cd8ceec8ee6ce3e9c22bf3b08b3cdac626930fbb3f77259e4d97280f2bbb65730cb64ec9fa5cdfb14bfb997f993eaf087f6630e4f1b07c4b43eb30b45981a7b6c2d8ad177bfccb3483e325f1e8c7bf34963df47867e485c92cca23bb728c88b2d50f1f2c9f59f84621a807e5d7650399515b4e1492e0eb30db2cc2d37ceb95fab135c64fd3a5a87be335de7608caa3b1bc30f0d71df501e5d7afb7340fd86b76909ca06c3ebe6233f4fe7cb2f39695f9c6b571fd7a086648d4499fcfcf60ea92645bead1da1c83a75b565a1e3ded0bc583ba7d477980c7def2a6eba46336ffc017693a89479ffa4b4f97f412e1e7e61ff87ae853685e37b32827d91c011cba0d9b358043af61730c0efdd53c1bba6374fa46e9100ea3bca579986094fb7aba14b22f891535439b2a7a050aa9c1f9ed602d76b45802bf1a2d8e5080919745918b5b4e1637393b4a7033825bcece0df6c13dbe2d8cb3d086c8cbd4d361dfec3e84c9db9adc35774732c638d34bdcb8ea2ded7a5674c715834a3dd71b3c02225d7293b38e48cbf341e139a70f24d22bd72bba43bed11d266f694bfabc61ebfacafcf5f9cd7c861603ef26f6087eafbed32bf18edaa0c5abb1796e5491a84ff4841ca1d66815ec4111224b655049d39f1746be2842e3429fa1cd3b7c90da92107e9bcbab792cb0064de077214f0896a21f1d52d3b7a6a6853c1cef5547d1a511d4c292b784be5e6fefd5bca4a2238b706e51dfa062cf6eef3c1ccfc94bdde932a1665fd4b7e4927f7f4a3c1bca85ab778edd9d9de7d17577f38b6c81df413bd0484f0197681cef7d337ca2aa378b70863615bb195281df855c37c32ade1da553610d5a0e1b2a9e10c5ab79c211f8d5e8a0e1681e0b5ce28a338eb8c28c2aaee829238b9a2c824c38c327a0708fb8e570310696d43e251a077d3539d55d24301249e00c8550aebdcbdd5d58839683429b96e33d34849a1d0db4e9d2ab21f51b1225de74d981c6f11ecd732a36872ebd2b797746a859077e6f0cfc406ac111e8d2bbc34095859a9bceb4139036875864aaaa5a47a3bf92ca0caa3b91f89b3804bf473b0157c445574db0aa93f5d1626c6142cd39e06e9d32708636393a48a010e71eb4997eb8192bf6a0a948d4cc651cf8d957d375ee5551d55aab111c8daea243c5e970184be5baa9d111681825814513f81d8b2fe077d1471d80ac21a1a4a6e970c518f03bbca1aad10300300a700513f8dd06bae355306cc080064d871b6e0a5688a100f8596183df4974c7abd6053b36a850448c1d8a1481df6b5493247a608451e770c60ec8908112b0b8420d15faeaeeeeee2e023ae10802a0506934210bb8bbbbfb277447d3179cc1a4d48424e07711ddf1462df822848026d03020870bfc0ea23bdee802334882064ca8618a2128e0a90e062ab86c2a1683e68283c61719ddd1541a6aae98c04503705a40051c2417810e90e0820a4096d0850ea690b5e00b0dcb82094070ffba3942b841431576f083298071e2821dd0259c81bb5f45a31b4f29e1a092c3126a80fb53c70ccd14514883093870a20b44a4801d91459307a802a70a4ab8411494100602e454f102951c34d001164a869ca18622cec8a88786864605356298f56305dc4780026e1e24ec8084041c3192b044159260063c22a203d75a758d4e420c47352c88f400bf4fa228b8a8c30866e077582de10946a8e10927ba8041122e0add3debcbc10835c0eff31901097e14bf372de051d6de7bb3de18614910e1882910210bb83faba80827c04d05dc450803cb12f5ae2309fcde7b6fe4840003dc879d23841edc170de108ee2fe0fe7153a1458e2e9c00b70ca9ecbd4641cd6da7fad0dd4e0ab2a56457033311d51f0190666955c0c00deedc7a565a0e1084e056d290503f380c7b05a644fd07d825ea99ba9ffeaca30e29f807e1e9149b47670cf94e4df011c643ca837b55c5ec80e3cdef433cced6a5c9dea8b222344e11d97ac5b9be9155af38a7a2e325ea556369eddeea5637037f74371259f54aadaa8a7a37882be8f2c305364fdb1ce5e1baf5328f4007c76799242d035150a86637da198cd94c11a10d9e806a05452b46d0e328749447fafaeb52c6ac077dbd3de6e5ebafecf298f7f2c65f59863e69bd3e3dbe5a0ccb44dcf48897541f3f49f5f419fd94a742b55e98d0e763a2cd3474dd117d45b9d084821e25485650ad580561b5b6aa6a15a494889bc7d32ba15393d32bfac9a5c852d0a9c85ec74037d76ab3d390b4c12722ebf08935b14f8c2e51fad0a5d7aa97524a69b5f9aad76bb54e3d9b52caeb7a86cd6ab3c699cdd68d794728fdb4f2b2f3b53eb33ce6757aac614bfe73ddc98373cc3bf2b1790444468043c44d7c477a44f58c386b0cc5985d468ad9283f298dd100e8d2b6ecc26a28cbe20c06d92cbaaa6952ad18e30f268fb78a4eaa5b317951517c8dd9b15f36bbb43906cb4bba1e5b1ab3a4eba04b996330e9ba3d341c0f9aa72ea7381f2dbd86b8018760064f29afc75f8f97cf6c9e27cf1ee575fae9b2d965b3f849661746744c94af1b238aa2b7bfa63c44b7d5a0c76e1edd8c524feba3497dacf1baa28cf2d7b11a4fadc778c919b12ad618e3ab2ed518e5adcce6189c5926f49d9ebc5e9e844e2de8a48429a594d2c679544facc323ac3d932ba2d6a595d91c23baa4b4a625e5b1cbd27a41d7754a43a0439beba967d8a57ce8e618d0e7756ae74136bb9594d827769dda1c83e92f4b9f4598ce46ed47c688e8cd33d33a6c596f798f11d0006e87a2d00e645f3603812f59eba7b17cb5ae75acaa72cd23205aae5bb67d1eb5ac0ba237fb5cf4c1ec0cbe6c7e84ef26ef99a33e38fc5ef51bbd073acadfcd27ff9cfef3cf9f95943ef49ebd9bdc07ecf41f3b49d6dfebe55b9a5a92f5ebb4aa5afbdc0c042659b7de0c04109f967cd69fbcd9c7f11036700866b0f54f7e55d53ac2f33ef996f7b19fb7473a01500f0e834e2f1da580c39fcb6a7e40a7b407e89f0b033a766142a732715e9988411786e89bf208dd36a237a35c7822ef4c5ef6e6e925b59352ebd33f9fa713e5f1f0bc9f2b1fbdedfdbdf7de7bb43a66331018fbac42a31a6566e5b3d765b5ad3decd236a6cf446f2cf5ed5d939babeb86e4cd234c0f6a8a83d29b65e2bb9f6961e83f5665e91ba56f697ac30d0000800d36dcb84122d9b051a3c66884827272626222128542205096d58a61d745e99c525ad607cb0f7eb55e0cbbb9ba9e291d42afde9a0ed873c42fab6e9eb03ce821db5a0ed0cd137ebf2c7ed9bd725c178b58ca92cdd7e327f6a6ff7ce83f33592662fa762b03412f662debba32117fa665f347de9240d8a045bd749407f9d9e2b4f907febc999b1620def5f180077a36d200813e7a0e61f8ac31a03903f4e11b3c39141d9a1c5a15bc96bd6a3dbc6c0843a19084a1cfbf846e8b18f639c444521efe459ad47958afcb36b6aa0b03ba6b8e011083366b06803fb170945d8aac89ad2d0784365756c27f2ee12dd151dea8f599a2a31c45344d0e4fe26172f817939bdb21a51956812ce82d6f6473e306750d134877546df21b6f3fd46814d2e1cd36dee80f261d92d262a7161ebb2ee51bed113a7d11610cc3eae561061f0381402090f5cf5fac7fb26cdaecf38fbc056f6d3924846f7402a25778b147084d6ad8cfe7217949f0f2d6b1872c091ef4d075c1cbc38c852f08e121847fc920e965f4134a419f34f4d1956f14c2cb4322e05fe685a0cf60da83fb846c9eff5c1b72eabc31a27808510e7fd91c23c236cf1b23c2f2188a0f0ea5c6e5e1cda40b4d2eefe80f26af71b3c32626b54e3843d8eba789947447552f0cdd2ca7acaccfabfbb12e6df557e33984e5b3c680e90cd097f2f255afd8b8fcec95d1e56bd301e5d2e4993cb5f29a587a0c9337c760ecb26badb556596b8d2722eca1939fdcd6a5d19c977f992858bdcc3e831b9b586f6913ebf0740c906f2a6dd60c206f230be1ec356e6e9c27eeec726451ec9412c3b06b4e79d1e7953719bdc61b36a127afa3d7788d110acae55f502e29e8f22f207a6233c45975f38c0f1f6c49cbc254ffbcccc8cb2ae55f2ef9921df439abbc241e42a1cbbf842e59a59c55ca57d946b1b7bccfe7d5a584315884e585cd29e59b15965974ea15f4675d98ea9f4ff58f4b633e148365b5212ba725f1907dbee5982fd96d3cac9bbcd1eb0a855eed6559775e120fd7676d39b29bdb6768cebf60370687a8cd33f4d2d683b090e84e97f552369b2b592d8987ebf52d47bdd7eb5fae5bef0ca63cb283dee8b4f87ac86687493e64071d94ddeb3cd4cb9378d4cbbfd45b5b8eebf2d696637e0637dc68bd241ed8e55fb08bdefc03cb37d9d2ee304603f0d5b8372d133a9c13cb7c14b2b04bb9551586d5e6999889eb6366b5dd5da37bd43dc40d1357954c55c9c8c4cc9819336b8cbabbbb654e56e8e853f4d189855daaaa983965300d9dfec954313366ca5431b3aa6266ccecc007306e6f15fd31dd49c889989dda90cd1dc021910928deeb325a98f8c65252c76c4ec1d8b178e7697e07f00c118c6136f459df4397ae37cac3bda5e3755dd745814ca82baa37be451bb239252605bb6753fc49bc08445d44fd445254143dd638798c261f3dde8c227abcd5f5ec57e8543d75477b64bf7ad0cf5f58c42216b14baaf7fabcd7a947ec219bafb79b7c5e9602d8e327ea57e6680fea92eaa94f523d7d761dc3307ae7cd1dc0d4b1eb1566f296ce6cce30ecc2987c5e18d0b198148c9db239bb3129d804745b8d2bf3f0c94717a288443f9c5097222acba86b52d73311f5284f51d9bc395258a4a8b8332fbfa4d167565eaf367700d7bf93379467d1c48fa067972093b72e895ce8208b5d64af1877c0f145a2c97be852769075b83e16f8f72ccbb2eca39babec2837d797fde49adcd6a54cbe65f4c2c84f3963522edb5a9a4a9bbdd16cce67d7cd331dc0d831166fe078038b46318b7034c1a2c9cd55642b7ce8d643dbf2309b41af7e85e885c93e67f66962627988b2b763af96dadc81ec5e8f963e646b06ddcfcc6c9ef134d263b903383bb53cae8be1f81a9382e7ad579b7fe0999267a87558cab73c3ba3449e21d2010c5b8a8b1426685c86fe20b430f48daf5b98cd33985eecd2ba1908d0b11ed7dfa53a5f6bad0f5df7e61950bb0c440961d8b3104a153a9c37db40c944af310a4dd021ed216f9d7eceda9a745d7aebb6c34feb209be5db25207a7d4b5b17d1d3cfc7c3530b021d3ba5f5f0d6e7e53152bd3ce4b52e95960864591746f47a61b26312a3a29961990d94cf633546a1cf104a28448f5d62966298c4acd363a189514bde3cb1297b58581eb39f53fae88e0fcaf3c4735e6616eb219af67a766cce7a4cf477297493bfd04337b1b071844247b9a2d0a7298f8f9565a085c16ebd61127ba31836e7c94126a0eb27d79c3799d9a7571086894e6de822cb23743a7fb983ecf569eb651b579b33cb66ebb2623ce4a5f3d7c42e9b7ff0a0b77549423cdfe6e7f0fde819d0cba278bdc8e620b0e81242084bd8cdf5e62030bc199bf3a0df8a5eefe09c9fb70e438fddc24050641bbef20c8f86d63f5fd2e033f75a8f029f41981d9ede4c7a9387f0e4360e6f3679bb553df67a6a1dce1e3e2a1e8284eba9cd355738b661f7e88e868e34718fe7fedc8ec685d6ef55d1973d61e3426d78849673648997d63d1275e9bdb90a1f15644b51c12a871042a80332de081e4b106f8a10678cf7960aefb8afa1902de5c3448d30ba485875836f5cf83f4ed4ae7047b61547b5f639fd9f176d65d269a57e9bb4c0fdfc8cd8dc081942044727488d902144707476787a2ab7a4d28c82bca66423a46f5492948e9c67b45375703be27088d054416acdc8e637435496947a9e6474a4edeca8e0e850291d8814f0d573a533513bf14c3a91271ae915376d31edc418679c6a269b27b438e94c3b9316d316d313a627c46967d29978269d185f7349c15da4803ba6072787a30b5555b58e467fa9f470de9287a35f55b58e46bf8eb724885755b58e467fa90487c0244984241122042611029308814984e08e3791e7e1e8df1c893747e24d7447e2cd91c86313796c224fe4b1893c53cda4a2522afda3aaaa2fc8a41364d20932e9bc16d4f869b236edde12aa8fb8371c32b5909e24b81f4c127b1ade40222ef2e08e91e7399ac96a41cd959a93cd13bc3fe0cc046dd06207c306dba5d38142112a5dbd571c0e59058b2a14c10d8b2ab8003f4b72d60d805770b542182856f00296cfc709b0ecf972d248d2049a20d85d99c63e281c0258033c7f80659ccf828c8049d41b16633c01537f96445d843fd6b202a6feece7b27d9a75f9c0b03b0c5a0e252cc56d1b166370017f6ccd7ba5b9a0e6b953853c96e971c99297e41dc1f1332eeead4f44fc744b3b18a8aa3be3d23797da8622d4b91397c03bbdd23c184e244b1c993b3d776c60411502564b304cf270c07f88d4083457b38383f0d1d3330118b41cf0f016682c2e0987031ede5c03675733ea9b9d0edccd166e3baea6e580a786507be8d288dac046a04bf011c39663461418dee1b82d9ac56448cb19c37451389b2139383b22181ec931630c9c5d1197d73b457874b698467a450162e004e03c916018811e26b0e3e2f4c273d13d1b707cb164dfefea6e1e8d6cc82699e2a6437b397efdb6f8c21c820427bc203c27a230849a6f8c2520d11182f384b421382f09380ca1a2571e0b0e733e2d5454ec80df0e2a29d5e79a4f0c35371c28e4f50afceb99440e19687c72c8589243061a396428c92143496cae35d75c6b6e9a260797e4d6338fd0549af9764738205d6a25c02bb0c8098275acb82b608705ce12ec8ec30ed88d60a9c5c78c70c601b7976e52868a834a0e39643881f3081b21a309acf21b4e099d43af6495d66ac0fd9a03dc1795d1a30323476882a70642703982fba51bdcc7a1a1bd31ca42cda551d700bb188b90cda5a58886d43081832157c8208c0bb79351c4c64e0e1955f49011468d183736f042d502490425a40c4758e2f2e346125b10e19238c20b685c7e38279248e2d25800a20511971e43e704362e5dc410c8a0e322e36ceb8eb8220d475ce434dbf60bd0e862c745525970411097e6042eca10e2223fb3ed0a147482b8486bb6ed245680e4888b94a40cbc8d90820c3a2e7d4919e83f20419e80e3f20385884ba321032d6e5c7edc70e3d22539675bb7930616745c249d6d1b1896e005222ef2c23a892cec1c71f9d1aea5b0e4898ade8849e7a4d68df8589f4f95d6b44eaf1b212f7a39e98ca7cf4107b5cdcad2ff627c13f5e28b0f5a1b729e7baf82749740ab92d4f79c734130f8dc836dc48c3228a1eedc2dea114ed61b0f77ca392b9d0cfd63654216443d14b28d7a28e4b216ea1fa8dccdce51ce51593cc127d7c7c36e872e4577472d47fc670c35b7247874f2f898a603f57803ee9114f5ab935b7529b298dc0fdc5cef0df861cafd03b1be77e57029d8e12cd7d165f30db49b10ae5fda6394ddcec1749720750abaf6aea9b93bd71675add5ae5d9fc03df83ed07478b89dfd546f9b672aaa2dc9876e58ca38bbddc739f76caefe396561688f9e958dff407c4caf508f55574d5d128f97461a69d4543fdccc14435680104208218429b02a8d4a38e8a866e9876c2964d4201e4b6b227ac5e1162a96fab56c760a82020e372270bc15a8c6784b1bb978151d95a3c9826c29ef753f09343cbb2405b80279232c694d975f417523a88aa22e57f0b911d5a7aa2ebf8279233ef21febf2ae60e4628425c5fb3f6f3f1570704e79cba18c9c2908c17907dc2ead65ab8743c7b3b1b56cbef7eb1e905033b1a311e4836e7a7df7089f5d9f51fbce591b37f57516b25dd7755dd7755d9708b326ff651dceb22cbb2ed0755dd7755dd7755dd7755dd7755dd7755dd7755d57e8d7f5502874cda63b2e384db0c32a885cd575ddc48a2e28040a8540f5baaeebbaae50e8baaeebba4ed11d57d3cb5d1745795ccf2eaf2bcb62d5a5ebd5b68b07781bbebea30a32fe4d6d6ad3f4a667c308b5ef5e73fd1e698f181f151f15d525e95274ad3bc6cb097ac8a3048617f13c818fe3b10bcbde17a98fbd61907cbb59f4280f782a3ab4b9b1e852da21aa790de0ead30a31651c96f2366cc8a19496680f8be37ded1d4288adf8165bfacfb57759d695215bf1084fe966c3f1a47e7d3f534adf78c4c3d01ef130940689aebd0b446f76385a529ffe584a2b2fafbcb4ad0b557491a8b9767d02f7e06b693a3c0c46113096e014dc72c030826fd0c0f0b2ca515dda3cb343ce396725a5351b95d146eb8cea708cf32d2fda5cddfae70bb5bdc53120f47658ed10dd0cf1100e872e89c74b230d4cb5a9af3c834197d4cfee701930f33216a692b7e425bcbcec59f97016ccaa11ec4edd9c42915a453c401ace5ba650057e8f40055c18f8bd3404bfe3d02ccee5895acbf16c4c51aff969a2e686d31abbbbe40af78af5cfdff49ee3e7e9214cbcbcf581c1cfc789f690873a4d1c81e521948faf2aca4e2943381cef9c15d58e4cefa4089445aa2d766838dcab5ca9cf13b5071b2bf0f1325655adf14df02ad3fb04ddcec3b10982a7bff710dc97ae0ba7e36892a46078032ec1dd335d195d723d2a8fb7e73da7456399a228e0763aeff12ec96c287043c8d2370d4743f80e6d2eb92429373e4e4997fa87f7e94e47de7c8afae7e65a5d49410adb89c6e294b443e3079f22d4be89b0f5a504bbc798127e7765501f30fcae4be272e5da7b57fe81875468b05a976e3851554a5180402d065ca2c106ab6d9c2e41233d3b3b183b28070c2a30e8593dc88923989ad4e39947a624f83ddf30794e692cd3ce4b3cfc7b4582ecc3a8a0e7d173506b1128a457463576401fdc6014f487ec4221175261a3081546c6e1225498ec320e836e830835977a8bd6e9d22342ed17af7e6e1c1e22863b5d02dd2c5361d0475d02dd7749e7429c2ebd5aa77a6955592b86bd62d8070715f40c7760d3e021d5ab21ff3051611519ee54d91fe8ef90a7e980fd5d62d661087af66776ba0ae5013a76311d277ab0e8a08b6426b2397449005894d929b343389c5d0c5c48a44b0f7ad1723c0a775a8ef7cf1235370e184fe0864197d674f24d6841bf6c6e7c1d1281556476760974fb98353904bda5a79d979b18fdde46d40c77f2b47303ced5901b303584aa8654431a8e77ead34eaf88fe321399d9864516e2d01d15856e4c09679799ad5862a01a1906bd350cba6d3a64071de402ba7ccef57bf1aacfacc348b07c6e62c0ecf5799ad6e90365b6735a8e8763839a5d18d041af9720cb83c3ade500d956d52142409ce10e0e7effd8ca0e11c2e10c7784883897f08538606074ab06b700cc845ce809f732c46da26073fde00ff7e146a446a3d21dc208ee49b619f25686d5ac94e57a1ee1e65ec54e965eba53ba54c2e6db6615951d7ac0001031230052b384102a70b6b82c102964533fc0f7cd175ba73fa46451a94bcfd159859a4fed10e2a5611f6f0d3438fec5e1a9b175370525b8fbf24d7d3001b65eea15797973630bde943c84c32d3d05c7809623577755975e757d949a63409fa05f3f17afe994cd26b82a36872ea9b41c9817ea53647f6cd0b1bb5bc7c3d15e29a9eeaeb173ae9f0b83042245abb86207e17db19d736ed4723c77d7d081e18407f41826b3c7d063b43906a792a854ac76d5410d3b4523000000009314000028140c888442b1603c1ea9a2ec0314800d8b984674501b09e32488611053c618638000100000018091d10401004a4a3711366515505acedcba6bf6c4a2c74dc1e15dd1a60db96860abcedcc31e9d6fd1d933b580d7480763c9c5b1b9120cbc02cdc4afe0025ac411f34a8a0802f9fd4ec82ba030f51b6e33a7ede62de070559e24c84a960470be91ca1b69b93199001f44ab0e6c7cbf3bb6f64fa367c86393cfaf382ed02f778ef459468c9aeb2421dc3533632702bd3ac4a0ded8f559f759a411754cabfc5c8ac49d4cc82bc4abedac513b243cecbd148ce4a3bf2308d72dcb017c6453777e06f5645349aa0941a31de5bce54ec634bea0412787f8a4233662da26b3021b63d42bca7ddf1441e75f9fe272ec10a2f293481786c04c8f4a25344737a67251b927adc5c728ad13f94a4c4a3904ba90cec4889c0ed8ae2677a8624e789b098eeb5888c91778975e5e7bc1b7aa4bbb46326b1e847688a3a3b66fb4508c798131708caba60f9d395a7436cf3a96957a47673cac0a30dc0cdb0e8911d6d5059c936bda9600a76b3bbff4cc1324d3c40a674eafd4b05c6e1b1472cc45e929f281f65dcbc31c7acac210d26d5dae58eead6becf2660a69885565622858c645c04399e2da4379aa82d43089bcb643ebcfc6859f7d96ce5095d4a92d234893919b896487052820ac440af65c35b213d9becca1bcbe7770350195515ba3ffb1745a0e1f6181ea44ac4546c92310298e7497d452f42caa9e2745f533c98c637158648908240999e12d7667de30e5b6c513853621b941f9efc0805afcdc7b21cbdf93df202cef2f81f0faa9605c49b32c8b1258ace36576470be22117bf79d31b6f7cfb23caeeb375e42db8146c3a9686c9b4bec1f6713c7fd02e817d881b63522034c274ddc4ba63fec772f849f02c38099d5eb436909caf6131b50723b65aca3a39df10a7e1538b7683d3fcbaeb178e2138d86f0e34db6b20c662ea3428bb9ba65aea0c21bb65792690330e75a631a9a482c612c17cd95c1aa667b250bece59cea53c3e3a93bce540c1c2a7512abd46d1dbff0fa4266336f99e922e50b072dac0c850575ba429e84ddc9eff8a2866cb0c13c9524ca5039ab04d818225d86f69d7a8c6088082650853fb7351bf3c92525e3714f6ac666064802fdb57c1514578f1c3fcd6cda0a2ca33ff70af434c2b6b71fce412e1044a9167a92d76adb8134f70c00d29fc061b277488e9b1f4fca27d8312802c4007b367a736e28f108fd2926dab009cc116efbc45fbd4d2c866646633ab6c585517132d966e86076a09488f198a3a8bf95efbb50a7bcad4966ed98a3e97760a7e39d06c15d88d8389bed7a9abc82a2742570b108d270b619700b1ed596f3f1c55dfa14c082e40d183f3e72aec69d5228ebacd3a52fd64cffd7b232a10a8d034292cf408edd0ffb7f6d3833b371223f69327080a3a72bc574c3b696bd59883f6b48a287ac4ee873e3f8e9310ca6210608fbd955737476bd72aadddc14f7d15ff75c423904692397614b63e0345976cec98705e3076e73368adc07d1a2930b44753fa1ec0710338902b845b80b78f72e2c30cd9ecae1345a0465a37d26cccd666463aabc603b97bb795b5b06a522264f0a8323f34b0eac42a60df4603674c17ef34c0e4e030b0fd36724df30488a2fead564021527ce73d51dbfcba925eaefe4cb4550b8eb21b5f6d2d3a441d3d9c66eebfb1448726a4e8f1265b0fbef1119d67cc825584e90bf450e7f4842c955c18acc4126b29fbfafa2b304205f770e1f95164091abc9d805f161d149a272dec1f34708c29dd64d1d3a884b1bdefdbc5e4404044cc8becf9eabf890aebd8b31f46ece395d7097ea609be3330e7cc8d1d96309ac94f6aed25f4434efd119c82aec5d8bba90b43953c1a0a940f19424d322b4911cdea911d22c456a95bbd8f88f24f8766dc9240b81aabc6c998b3f1791145bd773091ca3db600b4da9a8f2772de5b177084e4090cc5577221aa549e560240f43c15ff9008ae9f1dbce0a2a4e8cc0ca6a4a9062046e0a4d2be2880b6edb0522a17fd2aa0f42300468c6d24f996cae46151441192a5b37628066a07d91e60a4f2cfe80af1e4c0cac63f48f0ef00791221cd239d5ca39555438d227a91c5e112365286c279924957ffc3527a255575803891a4b417fe1d83f44141098c5a12868892daaa8b302ed340c6206ad173b66b4f5e7bbc88d98b16751832ad743fddb94cbbe5ea9fb44a97241a781e6c1040c63ff5af8327ac291782881d0f598c179df2c0bc689e21751abc6be6d9905820812f31fe779f881490a1e04270c8cab3289e6edd3aefcea498aab01a2e63e1581abadf339b20a65c676a2c9518deb0ffa57b160acc84ba7ebcb58f8949ffcf51daa2375df042e12f56e37573e52065430199c6047b3ea80dac8211e902de0ff6e25319a371e8a5f5c467e7746b9857ecfe3e114674c911db91d181d8d88aff96ef91f74cb46efd3862bea194a32f4fad33fe16bb6343b793ee733c5a045f77a8c7ce743c77c3bfe4182f0146bc264463951641cc6ca27c1057b74a3ee68225af0ff5ccfd17fdc8215b68d365917a1ec70d593a3afad0dc0c28652b02d645ffc7fe0cdb0cf12d1e63acff779dff3368117189557d1aca3ebcce09d13a215e8efeb876fed3ebf860586f348c23733426f43b9aee8162488501975ce40feca3945831e85fe94425c6df2b6526f83e83f5cd785d06833051b8ee778857882b7c461bfaabc28d99c2a63ee34aff8749b49e08800ef1036d7f9688879019a7ad5802ce3eec0073f2ae2719a6f25fdc3d3c99dee304ff1142cd1368c710474150b9bfff8a3d0d3e6bda7f4f952281d6ee8ab89204ba1e5c13008e15e27c79641fdcc32c8f93d59b948a20681f5ade1e28d1c5835c59072f0f2756c2293f64ab66b79bb95916cee249fc70b918dd088d0305af976944428d85f37ae29b7995e30c85761b7d322129bf47639256c7418774917e5033672a35e3e4a4af641661489dcf9d8b1a085e6ddec3a5b94c41969d0efaf983f0b20c8cf614f1f1e8f52ab2fa7a07e9c5e524e4a19105591326b131fe029cca0e94b28897866351ad7d7c69e0d4d94cad954651ada4bf031e5c900a860cf4f3cda8a6c976b23a3891f9efaae1b9814972f0370bbc46e703fa96ca6ebe05db4383b2c95fd6880f79efc0f953955978adc13857019fa5452d34e39f472ad39db80a87692896d688ddc0aae34e142f9c4a79206deca6b07e5fcfe6ef44971a06dce914eff4a72b818767e921ab89503cc3b3c209505f39324c40c25a16ef967656c98f00e162fa1fb3ba013236f0a73bb22ee53569b6b4a1e9004f92f18c21d5655dd8d8a7caad79d74f24df349f796eac80ded93c634bcbbd86b16e81fcd87d8ec326a10ed018b51f29b70b9dbe7bed4425cb8faf4bc2abb342b1f0ca042f1401fcbba3adde19a81e85d8f869762ee566de49e0bad018a3694bc318c075173f34d0275fd06e04b440f557ffea32dad649dc81c6e4ebd9bcc620f33c71e36323145b597ef87b7f6f87dc27be6686466615496cdbb528f49e04fa46910ab90ce0ee128823cdefb78266f590ec47c6d917ed94d8c60ce7ea0baadd8fb3ae27416990b565204afd40c10f0e69257772f0a77a0b9826853eec8a723072ed2f3ab8015bb51140517f6c433812b2137758b54212920fa1590e2a0104cc440eca0b0c133c1a042ea49e1dce3e67831509e969c342bd68d740e9c31b9cb7630336e7001cefe3941d6bb5c88fe4f24c3c521f7ed0b78c34d367ec1b54ba195097a344f41c7d2ebec5f00669def9df51015b41b1b1e80e8adea0f6d643fcecbe89f6de3f74d438a5a0068825b99c2e70c3e131a2ba0f25a58fcbd5c6d2c3732ef4ec34fa1c99b970a066e01c70a997c28e8545d80c80ae0fac6c93344b3942a36be7f16b4ecabf0f72d6f801e4ae7bc5e17cb663fcdb89f8802e1e249d476f196daab81d0a654905b620d538c2e20dd1ed03f4d69c3df834c2b2dc7d5abc9b9cb8218a1c1709be72cb8df3c6a493a2c8792d445fbcd1144b4681c6f909d71a81370c63095139536832ff9f7b8f5170b314726ee00733a686613482a7b6494fcbd6f729050ce98570e84689ab48fadd3689258075bc49a2ca1b5d97b54914e33e26ae7b1a8040039a330f89d7eda395e7e282bfe2fb1756c116bd53e3d8f4e04fd37f2a8fc4a1b9d42fb0d571645d4f3b9d4b4ac6567740e3e56acb7904641505eef89ee10e866a38ad0053b34dac1d35bae8a3e082255bcd515eb8a3e11fa398d9b778a3fe54eb82b9e0a7d596de20c0f21368dd55a792cfb105a1688ba86801f9e408dba0002ea71664564ac6ef4a413950f8886fc2857d4cec8c2c5098c4a0e9d99a55f9c576e35cf91d2735110d6e6a16e5de3c922b3bc6148b9355051aac8a97edc8b68a27177ece23c08dca64c23630e1ab6c3b6961df274e0823cd038909ce0520437b156f50c5b73f98c97e6a28a866d93a2ad4e1c6741a5473a8c2e9a00ee4f19fface1d31bd2cd9de3f09ed48abc97461d90c6eb52c3581dd8e7e6bc778e862aaf76412f3a0dc02ebff51efc2167619898152b3c5cff807d5ffeb9d884a1dc8b36e04c06717de1c55ad48a7e040a2e8ee2ccea3dfb85936723fbb5fb2bfbe15e8eb619fc64352974c74f373b10a93c9562e3ced026a97b5c523ebcb71a4dfe227b92037e63ce693c1b7a2d4891c1c6af9592101ec7171cba894972851636a0d7c2b10a473dd936acbcb90fce8a98b6cde385e34cc14285cfffa1cdca522005cd873a1e03b998b3d038fa610f56094321b18909bbbb9c2283bbe087b0f484a81051be7beb9a22c7fbdcce8886e60bdce061b9b740a4a97073ca1f25b03a7114ef8f1918f4297761e9987333401ba421d98e09547994b6587bf7d6694b064d63c2124d544a235e0661f91abc22d3766471fb75f64a9cc884d7944a9b938541d528d9ad616484cbcf5d0e2b6867653af0f52f1f665c2e458a52ac2ef90a130680e6447a7deae7e900a854433089944e909507bc341c84c4c178e3a198547dcd8183cf994bca0a868a52890f2cde1c2befb3c73380e1ccb76fb77adc5397bc952ab16351a4b14d8c98cf34354bbc5bd6a2eb46ed1977a48317995d29bbe615b041db39d6fd6167b03b6455b8f6e7b8b77f71ffea92233e7df7df0f90dd38805e131876daa436a1d391990830fbd66e7c84603ff3255988aa4096ae0df4aa110ae54301fa656d3a550c6bf82c79f99394f9815ae35047faa73b30bfb0054a78909837bcd621b6bfe32c4001ac83bb75c3d113f5a0a3b1509330cf36fbdc0f51e22e8dce08e8fdc523496db9abf84501fd8b933a1c4be3ee13768b0d3425b7d2afd8f3cd829674774618e7c973c713f37db32f80a6db76f2c980add53b6a9b8b2146798c9869faab8305c4553aa801459efd1a7fd39ed0622ac47ea3d524d3a74fb00cd51a9579d38e3a0b134a04d4826f40b377a2bb0428a7bd78b76bb598a47081433781e5e3abd304965f1caad8a3c84195f198bfd9aa0308d333705f1e817893e4a0b460d219be987ff814eb40b91506040dfb3e570d4150114afe1d489e00a8eea990d0fbf9e809e623fb3acdca0301cb464e8c1f9cca00e7b18025d33016b8a104be7874175981c1e46e0d70edcd9c9be1fe5f5640055d943777152a57a991f48939b98abb25f756966332e0e38670fbcb2f8508b862502c8d4b1bb39eb6499df0f06ded9bb9564b7a8f219ef305e827fb52e64f39e6633bb9b9d7373dd0fd8367aa29a55d9a7872acb441b12b5e306a2eb452b95a3b943a441415ac98c691fd5bfb8944d06aad41b61f1833899428d006bde71253e7b19d29312b9e7b48587e9ce6f581024ede399b7d247942a37fcbce2088494e681749793117e7efa49404f26ba5677b37ef42b6c2debe413edd4f2ed755c984fc08240f63c4c9a63f86885573bfefaf94c65122829dbe4b7ee9b4e24d4daebdde9efab5c8f0f196c25dca4d52b333e0ef0c812ac13f67cfdeafaf211a1af11365dcff9cef0794016162fa53efca9d75499cd58902e382aeced8dc4ee30dbe388dc3382e374bec291ce3b0552046cad0db7781bb7644bfeb51ed5729a13307ac3ad9c431dae4fb8af7ae0da72b782ce81008c2b5f3cd6d5792032e0f3e4152a2d4b4551e1af2cb7308cf73a175eedf7140616128c5d658c60440d1cd0f177f406efb7d920d5b2c22749765ed3513b9c2bbea23d032d434711a2b4f9e3e4bd81707662dc1d8e7d256b0cb713b55d31e39ac0e96b2a3b2c5164ddf8106ae7b546614fc9b33c561d0d76972eb604573e72dff8476d2ea905d0dc9a3f275f1ca88fd1dc12e64092b89886fba8a446732e8c68ef7778fb8dbe0a016a6229dc1170344f86ed2c7107d6f4610c65e46de66b1b435e50e7451c094c5491d96a8e3251fc482e6fb1ab6b51cb4b31e72edf18ab1e2f0d7de69f25f133fc223d703dba0dbbf44cdf12468fb9032ae7f03639ddd47da4d286fbd11b05ba102a34973d61cd41a99b699a702ec0f9505d586212816af6236a42b98610ac6109704f67ef348b087c356df870875df8e155a5fa04ab0adc3566a8cfb158b328f121a5ff148683c2ffd5cd973594b90d6223ea4e5395ce5e9bbad5e1ba77cb4aa384d542e54deac3a877b66325d387fb7412f8f0359e5da032f69dfe8a7051cc97d335e4427ad2bd08846c26fb7821321c2afb1c3ef26290f6c4c2248d04fe335ec687fb730dd6dafdb207892eafe8c92785e9a096d32ed4393215cd74040b3f717f6ef78538d6a130faa5cb822364a21aef62329aa4215a9951ec7c36afa9e0bbeed7cb9423159216ebfdcae672c18987d597af0b94046e00c2c9d87c40369aa1931e07a20fe430187231402a05e335928436086527dd81f7986b08797f44e98bf9abe3c0232c5a2c6e74960540d2645dcff2fb4bd0961973c7c2b2c66dc846f03c6228dea88b247834e12b2cca4ed9a87104bde180f44c9c93a9b24609a49657141084a79a2d746be1388de6d587169aaf313f9b2dffa2d5cff3432c73acb13483406cac257699658c65c7b248de651d0879e33b8828edfbc2440818efd991e7cb95909d9014aef3201e87da4c46724b3637aedb4f5c1faadfd94028b753149f3b56a1988d6f5445982981544b352cc83df294db370933c3ed413863d4fce6bf195ec65d97dd76eac0db3af4fb00582822a872416cd8fd36f40e41c09d10ddef2edb55fe5ab6743cb16a634b3132c835489bb1db82176e6cf1aeb28644a55191f6dd61f8de895faca12bd48d81fd65cf2438410400f91608af823c6899ac3fba15a604d174bb5a584bf4552aaa09c1c162cfb0a9c57d1124388b03f60a053ed46cc97aefdb6659350a9839809d03c8e2f8557a982b7dea1599fecf055ab80b390ff821e928f875ca83ecdfa970cdf5c24999a4fafce34db5c245e1ce707ea98a7204d7661b84ff30ca8dce1f8f05555e31f56e3f8a82e3427493af629e89c896c087803249aa18ffe911605339ce5ebd918ebc3077df7de5edf875e144ca008719a7d45c7963d3c54a5715f467e567b08af5e9cab9e972ffa585f3653f50eba876183c35c0a674479dd9000b65fa2f5e3a5dc5e3346221b5308848766539218ae2052d31502449d245db9427a58a0337dc202294880136a615f01fcb474aa05f64c62c5f7f05c7c17d7ab917e1808ebd903a7a7f9ed80df3ea8611c6a7574efa3d09e684d6a43bdd5fe8d9245b723d380f87bd762b381f31dc9fca8403d8810a61e39cbfe9d9befd4ee9df3d137a2c7e68eef7949f098bbf2fe6aca8ad92c352072c70c33b4d6b1f813409b09865f25ad0b5339f6103a81968680e39414c261e7b2cba5462467888c8a2e9138be9ee8f648029af25e83858ca2316f9564dc9985f9aa0e3d807c165788e85f92f9c8649673a5a2d31910fa30b2c5cdcd59cf697c93bb6bf630b0e99a1fd6677d303ed1f61edf293029ebb2691622bba37f6b68c4f462768583a16d6c342fe1fdb319c90d983ed22dd5ea50e2b515e36fa1a978c047ce1415479a69b9390e44dfd4f00dcfb5cc7049663450157f918feb270dc92968520eefcc3937982a794b05be920d6f7d6bd9b61887af2665670acc91d6a256d67dc38d22b3257e462b1027ad3fff98d70b7279957684a4108f0dace29a6618f104628b7538e3b8800048dafe920333e475c1172c2cd603b72d172cc1a6fd2dcd1031996f05c9486a3229f0da5ee86e9f7d158ea67a319991a713df5695940b3bbb67f41e7836b60f93a886640c4b033809797e1ce994600c2455b87a93f6580bd4518cd5df7a245fb4c5c61c47995b054db66129ccc761daa53790f1600b580c540924139dd4c1d612f7687e8fcead4c66000a8c83c647efe0bdd64da45d821c87da5b2d9e96a269ccc343018c02540ff5aea467e0b224cc2a35a524459a8c295371c4cca066c59584aebd6b37a7b09438a0439fc8e84f0623637f252534c170bb324055d8534d668b3461603f068b52e6e524f31b783976b965e61e41e7297dc93d5e18c5e84e33b75ba181ab9174a86ca9afe4f35a1fc424f1e17d38210c917bb0b5cf843319fff6858653f210010732e7fd0804042f22ef7683f3f183429042ea3cdb7730aa4107324e536d5a28219c9af0e8123a240d9e5c7066f456cb90cbc9306841f132f714398bcfe2c7c1005e44e16879d641ed304882e79124103212b25cceab65c8c17319a9941725cbb64a140faab41c614e6b2bf6128395bf195e22175257456e160fb674777bccf583449595c1f5a9073437746132c78291520bbfd9a3a1535ad526763fe335a1ea78b046ba6163bdd8d223584ef345c3ff994fb8457b34dbae2c8f7c970af1e78d135c4dad7444bc39921884a5682861116a81014388723342f855f320ecaa91f85bd2aa7af027c7da6c0441654522c4fc483a01159e09d1d5c45895524dc80359f421a5d1e518a36072469f49cff862c4d03320ac01cc0c801e6e20bccbc9e445f93b2f916807b59040e115bb78481d2ff9fc9a6de7156fd58d276b872c74b4f3939391d31b92b5ef1f326332a10316fab16c960a033767a507c09198f3b3a72273d9ceccebb34f2d9da2cd4ac7f58ea50dfa757dcd9324addd49c440c49ee0489d017f43086d1e697e3ad38cc07f6b7eb14fce7b46d5a7fc87218d55754b932d0fbf20d3b1b7744fd4832a438d5525fbcd96356c8aa03b002f7cfdf709930a28e81cfc588e73f654f7095eb103d93cb0c19be3c9def73d091f0fd7ba59bb3114a10daef1627a6a2633f142e1485bd056b3942aee881272a26bb6d415a768aa40d212c7f5ce4760d3a9b3a97d466571b9ad31d801fe168f563b54d20719cbb2b9fbfe46dc08923aae3230bcdd34f6123e84b4083fe6a94d2f4d062afc9530866fad85d0f9934d99eb14b65971739be583c2362d39949a8e536546604a024f716f890110d214b1f6f7f0946ab48a111a99886822c00ab4202c09b2a1037996ced73a88f17af27230aa1ffa35dd9255b81fc1f1c1ee59f67c0d65078ce7d2187d2d1568ddc2f6e1f2b13ec9e19a5a9635dcef851f6599dc0815f6a9a47dee55818a68b41c43a8e3745e0e31732c08d2333c6dd945ad6a3d14b8a20b4f4a24314f3ec1dc1fe0a5009da844faec8e2621adf4591fc702cce907681ee5a6e2317bc06c93a0f5e6f56f08648e53a63983223bedb485c53944ae7404c1838dec456e42c0b498cce97d73a6b83442029f78c02c97e10473984394250ee8c2684dca29e2556bfbc0508e8e76991552c1e7d106e0faa2ca9e7ca12b4bc24e605972c1b5fcf4f82242e8911bd6d52d08b513d1e7ae8636802169993b45d30c56f466586997c2c08d9657af11770bbb2b763a75eedcadbe6f906ea576996415a27d99809c8f03858f7af3285973a21360ab7c83c97a6b1a30ab7b86aa42eca51d84ef486ba8e2b658b7b70438aa203eac6ef1b29a5fbdb3f7f4bf810b7049638f4c4815e1104a79e72e93a09e1781d306d98ea28041f742a4c28209117f7fc8d807b73aaa6db2cbcbeff6bae2a1bad6203947540f2dc1eef9188cbbd79f27fd3ad8880e7f5a23a01df1eb1db98e9b1b756856b987c84d7e05d23fe76b4fe3b4fdb12b2a7ae714ead66f8543fb831bfb29606996e90149e8ebe655a2c642177d36259b77818e714540cdc8324f90dd36eca7b1dd9de69c01e5c4676e309c792322438657d48d8961f2d8ea5c1c64ab63f4730c38530635d99be3a8c6866b8b8d0bb27bf8f886b47f925299b14a57594a81e0d011ae6a1106ece9dfa54a147701dd0ba6e2947e5616614d6bc591194b15b75037ecf2d9aa6b1b427527aedba7436867dbfe9cbb96301c4e2007e9728f8ef58f2590889ccdb18d7b40950d32f990887b522482771b170947d6f021141d4a2d489c60366e2932a69f12071136a3b24ad61169407f23bbd93eaf0ee40909410350dd37747f3a77d3b1d20502d7139d44c8a31186bb2d9ca6163c98cb117a842c34b1617382415e4d8617639c662f09c03222f3cc6160acc589ab120748a14397e25ad499bd51a031bdbd5f7ae9f3ed153415f1ffc94b3ba006498bceb88268fc0679929ed994495cb7185633ea92a196b037220ecbcb9765254603fe29a28f192ae0f786ddfde253c97839208d504f6e6c0024935ca739a59a1e950a980f604bd5f3643f0bfe9d7edc059a5a7a14623b11784d9394074a8f845cce9b10c56752f4e035a840adc9f7a9a183abbaa31c206fe94908e51fc1b32282473af2591c9bc6e1733a4c2b3e091579ee67488016943af067768ccb20273fe3314dc4bcd61de5358d68caaac2858e469163dfc1dbfdf755b8e02db584b9d5b33d6210a0a20e34bb3abe9149a2a53347d86758ac5eabb1d39a17c88a5e95ffdfc28ed8ff4829ac262b8d93d87102b263e90119e497cf5e793bea47ea65664733ee425323e8fbb136ee74c73e4d36b54caaf9c6be076e7034f9a4dbc909af9c81dc229da2982088040f89f802a4cb9cf217a02930263e2ac37efafa3fa9c0d870214ca99d21b2c6bb54e41df798568ab151bff8497728da6cc20e01aa66b50f904f340f5f64ed012e4bf7ea721f84ffa95e019c13eaca5334770e4335202e95d3ad2b1a417ac98ea1522b668d1df91b0ce362b73fdbe96fbbb2089b615f8162fc1b54b39b1411c7722c1e9a9760f4bf6cd2b922181abb7eaf71e7fe0d682790718fe4bf9717765919e442d3ce6d001f2c7ca4988fc4088e7116a8486651687897b408ca70fe3dcc84129bc9584edd6b7fc203be9404ebfb63fc4fd75cd0319c80dc60b562a1f40b3ee0f2c4a5e26dd01ea24cbb58d5e7c743cad82f8d14431a659271d7b043c7168ec995681752d58ce6acd41a57f0d1c7f8c69d7436b3e909ef7b812b821cc556e0fafcfb0c3dfe446466502f820ad167e0a7c00061a104d431f1f48f3ed472e8b51b989191bb280e1b69cf62ad6fb4c1d8c6e397ecbc00417e6c19f5befc59bfa9d8fd6404c9825aedd916b1236df15d334a6040ae11d1482b0767ad4c3cddd535856ca6cb8546d3edb214484d6436831fb0820cf07a85927641e868d6a91611594ffd8a4ee740b00a35910ff2875f5ecada12d8526273748512a2504184442787927ed5840d5b5b3f4ffe228a02b4b63f322ea0a8a9f0e12a52249fbd247fb149d303cf2f0894985d7568250238b664b12a5d63f80e138f84e59838df377cc4af915390127eca612fd28441de6f7127dc56fb72bb1cfb236eed4f4d2a09b365d5a74d2a49f865e1a74d3a64b8b4e9af4d3d04b836eda7469d149937e1a7a69d04d9b2e2d3a69d24f432f0d3a4d73bcd2ae585019ab75c2d884d47753392a439e16d3a21ea1a592df2c9e17c81a0095126726842ba8fb3ee5591fcbd07c07b71e7304259c8c9d82b37d2d7b07720bb1b1396d9d5f5432f2a1231843e017074feb762bb52364912d871e1dd75e2a9bff219470121dd90c3e4fcbc7d78e3c76e85ca9529b187fecd97185477c9ea66b23be2d2743590c4ab83a3ab56e558319d87e1b038b1eebe23b580bc3df9494f019651c4d3511c2bd32027fadc8308d94a0bc778b8aefc885b70b3f2b3399dd913c44e8999b2d4e65382a4c43fe21b1f79b4f53e09827f00f41b8dc99f77a44dd968ae189ae45d6004700682d4eca5806a3c04093eb1c09ee0300137b1240bcfe261cf6571a57941331d27b88cf97d3e48ba0e7c1fd21b454c06780040a9194c59c63221bd807b884e82a3c80d9b91016b8e0bc794b51ce94e4bfbf5f29183d93e617908282309e57030f1f920464b744ba09339e6be58ff95cb1d8388edf7baa49e5b72bfa211b7fab4f1b8fc54741d743e23fa290e6dce5f47f92866a27219fa77f6c2c94cf6a52fb94e158e0f2e30feb90af7f29f8ae780393a322e38f7a01e53e823fe08d33d7ba331cb1b46b2690348ce2f387a8444a24f55348297eab6c7d170d00b0ff0cad63a84aa5428f2390842cf3449a97f262aa46af89829b952a8faa1dc69a7257c979b5a4cefd4d435d9d3effbc12ecab2ae1cea424bf589d12cc2460c25ce88545e5bcde74238684af070b33af3cfdd93d88a81bd256aa5ce8909d7f98e5b389659b08ef60c97b74ffe0100ceb6a8eb82776afcfa689ad1e366f5134d78a15a48293b13781a82f73c2806ab8f163a547e37ce6a1d95fcfdb0ff340e8e52bf78faad9f4579821dafca7e03d440868d01f4587b9730e07d739bab1b0f2e6fad3edf06dba8cb4cbc9daf19b4244683f86e43ea1162f1f0bde0e6acf718ca93e2a6907100f171cf7d07e5be2a4ff8277a8fde468620849e2ec57a214dac1b06cd824a5a0cf1a1231b430d8b01d9de43cb816179f2892d43f50b61f759dbfa3596b53b1c636bc0d53ef2c237927473b732be036d89b013f8d75756748595f8f9941eba2bc698e767e5dd91f79e3d9c0ecbb1186f77175f911cd496476b64dd6bbab39249557ff47651126e34657a2ca373c7e5304cae51864e37a3874c8a17c1e5435d73e46b4f68bf04392d3a5593439fa3a4fd73f1a02bc3fdd5c355947d88fb971a21cb1c087388d219d0621196750528df09f75c0e6f61294a187743f286706da035c0c36cb50cd6536ef6bc3c1f2ed4c5c7b40926f2382ee9428c0cac0578cd3920ad57015973c68b79f802b65f9b91f43330083e5da0b4cb485de31b5d7f50493a18b63d3d5906a1164ac9a8140da7ad06e4c3a979c551203c3b594ea8fd63dd18b7ccf8710ee230c71b2777bfa7221a91d9ae694214d31f87242eafd6d8e7879a20c020dc63e0b60ab7337cd10fd9e3609c4e81d1d755acc0ca8ff0844500b80947d276d7ed9533834e56a880f13e9e1f51f06392dc97907018174ef34d9d164702d94020b2412d983dbace096bf0a29a3c1df67377c8b05cb3c47a60886fc76fb1ba5d437447c9132757c753e4833e61162acff951a07c282d3384b98e5d587a386f0c988d8b35b190ccbe4058eb2478d65a1c9750e6ba2102983ae660c056c93bdbaa3d6034a9934993e964e0e50f536b215771e78defc450d076b4db62c245caade5cb0c4ed5b659f543dcf2c7ddbb24e86d2d9fb6860cf71dca9cd545ae6e7a350a900f1d45b6a658559e99b7bd36301561a36524b0b69f88e94c1a9c7664553a90259ae276088b54b52816691bdde4f74091a1a7fa24c3eb47a054939c8ee6e4e025b7353e644311821de296b3bd867fb8953f38a672002a84812b5b7e834113fa28022e6f7ff5086be53f36959ff6dae2234ae296ae50ac8a05cddc891cfd8fb79ecfb90321bd0ba27f9ed6de0d4f985fe613c3bc6fbe34fff5100a129aca450c42744589c3cbb50d1d8d937ccf4c9e3017311aef1daba0465e3c84593402a7c1ff97f5cbf67c16af290d879d431328f7de35017e6d8c4ba0b252c5b638e36012fe87136683232d6652be152d3f36f5c253480511e43ff500a4cff65ab8c50e69963a9a843cf99f3d78d71639854f83faa7ac83b69a22b5c5bf9dfbb426dccb0137d514a3dfa73940ca6114314f7ca86602bb48833ca546c28e28022aebe58cab35a870fc80cac5548578557a7d28ec3e005980c32a51094cd20d118a235ab9411c5204ef0af65807fa172ea3fc65e30c246eeddf60f50e2c8044b29d09528c2968488b2c38c8f6ec918f71494d71b1c4228e28f842423d9ba3910a68155cf5ebb16f47515a4537ef1d135b26bb30aa102d22fc21c8904230bd48e724929ec855b452053d971c8f1119ddc3ceb59684606ccf820b84ca857f99ee2eec1f345fe8d646a3470def2750596d85d879306aa5185225f81bf7855fbbac587eeba82a7c5f534117649799fc8e39fc3aeda36eb8bdcbb05e5731ca1bae2d7b1062ec8090b4a4dad83e0398f154a5243e5c2c19d39d18f1332b8cbe1dbe24fca422616e871d7d228410b83bd1ca046f4029cc1972a0bd1a50781f50c828fd1f717b6cdebd0b888af4c3355df473493642a4b3bde8292831d2283be6529b6b54b598399c7a538c248008ccae4b398adadb008dd52423e0ffa625d922c137e09d472532894d67bd07fd037418bd4b375162ea420aaa6e4099e7273044ca612c31450e3c6f80a9c182a40f73048504b586c54f73b5753831c0d190e1eb00a6d0474735fa18471d1e9c2c21b04b07cbac1c1cfcc769c817fd1e907fcd59459a50893f50aa72ea5df8a9792eb8d781ee565062ddf9d060f9d5decfb47e58a96928cbe0cf6e7c9311a1bcfba0816f53845fab07c9b09ab87d064c09c70bf2df2065bd185f7ff1b9d471d8bd5518e2abc4757f820ccb1401c23812ceffef06c3ccf2d5e8c1227d4646a390eae1d16a52134394c46e50745c7d3b22d168b1a08dd328cc09ed266ac628bdd78076488e9ffa21fbfe81ce587290c13c8c490ce0b5314f72a07c726c994db6e9b843d047fab3f8f58ad3082ba5394166a272c63738d2fbd33362045aa038d0b37f687312a792d925bced4d12974b4da212a23e680030f77315ac07c288db964313ad2c895a5871e0cbc043d2b12ebc7292ec263785edab77064491ea26d02561bfa1597f43e3d223249f754f7f6dbc149acc671d46c9c31c32f5d4580e5f412bde9e5452ecf03fe341b30671394d4a4ac001c79a8e6414c926eb7da44b05bbd222c32605137dba4e04f93ddd2f4fe11235b3e22a2e787f7c626adc7eb33deb4bb0c5565ff3a64e32a2f7e3d7cd59067a95b8f2d182c5344c6b1f13b5a6fc9a3032e21d73fe9f6fdd4c18d32a7dd7f6fe2dd135f60a3f9c993ab9a8be2c48996cb61a7db8f5f1aadf3fc37a69abdc391e27123f2edba89595a5b387e822ecb577901ea8fc0deb5440d66cf0f0921de1227bae2fce53aa53b3a1519110bc4bc561a9d8a24dd9f37bf11b7dbe734267f46938a800466028aa560614feb5a04342ff1894adfaebc67ee35b7db3c311bd52c6976a3e8afc42207d1ec6f4de3a5b17f348806a14de34056aaf4d24cdc9ce37ea512d862793f54a9b2c620c4a149205afb295a197a6dbd82c306b531337d1de370c00ff2e3cc0a848f3a61844ca3f4a8fc3f3d5c9645a6aba2d3097eec9bb6d53aedc01ee3e7cd2c0fc2f240b2a65e4190a0323d35f7fbb02c16700825ed8b743881a918a61c8ab34a3f16ec549c7816ba89024f233c885d19e1d7013babd4e8bf7b5199ca5128a5ca41abc41693aaa4d52eda81aa341f33925a055dab56facbedf9d9eaa70b0b9af047dc9c2ad3a7343e3b372eccc94348520eb69f20822e6d50de66b6298efad9f250a3c8f0a7ec62ce2911f8854e248c82ed361015e1a988e1b7125656973dd5ed047de22fc1dd0f3456050b223c604b28c7e3f894f23eb392b41720a687fe36c35b6ad63168c91688fa9259eb94c00daf873738fe9c40f83bec0388dbc4158a31a01510ed7d033b294b6aa31019d09a2192fa67c6c7de9957f55119d04ab437dc40233bd07ac6824fb408adc0f0426c59c794ded961369eca81cbdeab526768b6f4d2ca5705d609d24920b35aa55c743717e08001e4f39ea3e47dd59acb3722adc7515561bb80309776e775de9e365e55c2dd3c7acfafe98f35a16a9ee0e7bf6084fca8b9f7d655a2a3400b80e28d10eb3fe61e91a9fd17801d545f3ca1ea4a51043842a471c81051e5046ab8ea554df8cfdd7a4622da87718baf0c01ae56302aea71597ccdf333679f69430dba1e21c3051feea999cc41d38cf8e3aac5972473d7b572c165c27ec20a868f5f0b05f895002dab13591e468cad9b1f5d14fe076b851871cbb8bd3158cdfabbc8197b6df69bad4797aa4fc2ed76eda738753a9947b21932852f036518b5750de5bc391b4d65ade4c55eaae5fc80803bbd114567472ef837e86c004f71c0568c85e02d71e7e51f9aeb0a5bd9078518c59d5016227113d770444ee3441e8b9c90e917fa7a31f81e9d771fb64db2b79221f60cb143fdfa0cf9aefe76db30e4f8c7fec2833dc89bcb6458591255dbde7a46ee592b1c9e343d0a2c8d7d8e51edb12cc3babf69b3ceb2282d6ea7210047b20b752bf94f5ea58b5f03138dfc04ae27f024fd436b4e06c9a92b9d44f84580a340860e071fc79efef14507a80def7e51fd4b7ba7c917450afc3c2281a708bebe0a42727cfb51d2fc4ad94978b0adf8b436375ecef5ef95eeae3faf737cb9758c80d0d1ad3a7c300a1e91468fc8073ffca7b157fdc9d07a405c20d32842895ff516989e1c3a7c4658fccc2da4d7f97b84923f3cbcc695d1e4cf08dbae920bb23189cfa83ea03f7aa4ffdae9784aad879421354a22018de85b0199350204f608e0401bb242e2e122e0dc9fa1aa89008922e8c79666addcef5a4580dd3679200ede0023d92913a930cb59c8e102d299aa1cefa6f3e70190022a570d06001549cb61bdf5bf6b5843719e650760a6c4abc9f5f3b9337ab8fe1a5775854fdc06567006a39cc8efa6e7fa05307328aece732911a60195307155de6a135c74a12fb122c428fa41657e3b89593e708dac610709acebc8084a91bfd2dec1bb390c1d259a5cc9a723299dbcc4e51d789437861d26ea92e165fac6d50619e5abd1a4bf5f8109652f18be0ad2f7a2722c4b687852750048dcd91a2cc4f383dcc0ac25a80a044b062f060500d411069bbffd6b4e8badcf4a90167efd93aac294585e95a0c3295ec5f33318dd6e0204d4610e18205dcc51763c706fea2bf26d25eab6604d55df2ffc2225fef9bf7fee654995a863cb2a95e4d170701af34d3e0b36c61119fe9f63e368a3b25f185fa36e3655225b77d4d7f54f46a84ab70df4b2dc0f9b5293edff89e9c2cec31792da865f580028c88825acf2df2672d7484a2a814aa90333f0cd78260441395e661f90c88d8150c743bcffe372017b8d0b8affac076690c5180d719e7326ed15d5f2fdab46239111b2b7356e39b52cc5a807cf05f25a83718e254310b199658619f2a52a4c7250bdeca8f03533eadf44641611a3a8be38db6646473b8342fbc457d5bbf9c4bbdd12424bdceb733f7c0e42dc75c8a16adae6025e8dd3b15b8b6937ec83b259e0ac5ce924545c1b0cae15a8ed70fe7231187da3f9e476d5b74274bff2a06061da70b648b5cd3b23808b2cd48019ccd8aabf109b66fcd9fa5acbafdfcef38b657cfe872d00c272a98ed936388d189f4d8a58e256c5b3ee0ddcd7af2a42752bb2df9a5bc380da649d3f22570dbf24cf30dd01f7c87cfa7024a50b0f54f993e97b4dc6fd5dd54be87eaf3632f036b0567d041072b68885b3f50ee88f279e28eb0545824306180981e1aa6f9d0924e6029d17acdaad346e3c155e90a139b0ce2f41343a763f42411e6bd229c0dbee28bc66a0fbcf4f646bd11dbe133cd903ee17aa199238bc3a2ed2d66b88b89168a8407d58f8d16246e0d87f6198603b0b67e16f1861207b248479011b0af4146bc88a4819905fe99b37851b78486eb584f4e98628d092fb9f24250a1adc0caed5dea457cbf1e564013ad7446bc7e4e3383de0658276084e699c40189166bb5a94ef919e0dc0b9db1b6d862e06b03693ec0d8d1a8c8708cde8bc04fc60607efd427dceaa935e9786fb251b52fe4245c92f01785af764b66faa12fe71ce178ebd4f83b7d1a599c95d928ec49ea4675eb465f3f67ba8d307d94d97131bcd80613deeaec0a7d3e55bbd4b270fd72f86f4408b73552927b539f693fc4c5740ccca0f02119982122364f599fe8b7aa0302adf54a0d41fe88053348121238d02618d5c9496107b8dacd443a03985d32c94ae88ce5dc01dd914c147d1ce38a2539e916cc07f7b255099d598efc13bbe3863613d9198db36cfe28b8d8316f43a8bd1e1e7087fe9b63c6d73948921900a3a37c73c77901ce454fa156ddcb85848c39057b7c0c3084b08114beba056e7fe31ed6d4951153594533f604918585c3df6c88f5cf8fd5edcb53841a749ac3b4505ea96f21a450227946ef4a5b560b11fd5045d17d6bdcad28c29d449fbfaa0569f93c386afb62fb70d5800ad569c8e6720728d392151329ac4ac8dbbf4876ec9b29789b98eab7cb03efc98c05113df24fdcf321535d72acf5364c9edc5343158006495d178755e88e3701cb97dad407c69032c8edc04cb1e159ec37c0ea1dcba84430969e256bc226355419d3ec6db34ef7076f451782a645169cfbd9d28c826adc508233e86ecce5f4d6819253e9a854836841e0fd2aacc184f923c22d1b7d082e5f5aed000fc5618168b5ebf93f2b8cc7b3b010d3ee2138c2b8a2994acce011afcd960bc5b1a27205a66fc691707d0e09054fda29a25210b80b28ae490cbbdbe0110ec869702c22983706d5aa5c8f1cc62eeb0f09f9e8fa5904b502fb487407101ec95ac1b87d575c3eb41e62ca9a235891de2a57b1a70518d943a7363303d10d0ed7a7cecd3221c348412e1c6f5326d6d920b8c69da771e7fd8b8f55a03f4ea33cccabf6fad78214041fad5c03b7fc5455df2ed8d04f759e644f5a128cd30b2d7fe3a13db1c8edcc8829a08de79fe69ca18e9831b93cf6ef9a799a814033a6c8c1d4e63b046c1afeaf37448b0cd76190d4cff8dba5f734abd6cd50b3d71a3d0b6f2e2b7e406ebc57c9f1696c73e322ae72d3450a6747f30901d15f61c1fa4a1d186b233e6aa37664a2243da89fec65159869caf73d83a280a6ea0fecfe5391f03bea6c7b83083f6312404c5b1fe0b078bc9abd3342243272a5a4825ae2602c8144841c0ba9130d9862611b690880e943c4ea6a1dabc61d0cdcb5e66039e25a37d7aefe4b8015d3442fc5a288a2e7e22e787ba8351d9165ddb8770edcd77082958ddcf2241a8743b638f359d7810ebe9c04f22c1f13113eac197fad827567ab244b3d4f15ad727a8e35a33064252ad0c91371661313cd3cabcc1b12ccff0215badd5d9438f0e29a4012cce670010c0e0e00f08911b4a0a784bf6a571e3d87ca4c2ff019a58970a8a6982bbb0016ce932bcf9743fc705f27b0520f1ceaeb5494dc9fb3a2701a0d33caa0868ce8e57541d235f8a0e3e8348310d6d7a56f4d5148789fac474e36b702471a67488591424b05d75811478c1d188d3fc1ce50e16a64bf940431e73aca9c3bf0111b282f19a4f7db6890d93a580cc0881f436c28ad821042793e99c171b0406f3b69b0c084bdec2088aa7a29b8a8d8e083d131052e7164cf35a26655ab116eaf335490e727a74e57f81c2b0ad6e0b764a2454c1ebe14733afa26c4009070f71567c3d594b886248d5eb6bd71d96aa40c2b8cc91a1e565bf1f02a444419da714c0df60a785c8864c54f7eaa405ceef7d74a8b3489022f1e1d57d8799984af6d7292a87438c8408f5605a51acf3b36406ddd1419ada4a136e1bfb2bfccce9c503d3f4abb0cc69597d02747f3cd19ce99319340acb1709ada174c803c0a71b2fbdf364cc7e38e1a43db5f63a94590b6b42eca47018f547674bb8d2331fff03df8fe33783eb9841b6216da1ace1521aefd3c44389323c34b1316ae69984d731c95f0117b88fd4474af1e4096ae0408b8b2954553ab7f426f1a3e8222407744b6dc870e2136f37e7ca69e6fce6b6d5c70432879b73d4e8bd1d724efb9e859cf695064d441781c0a78dc26a4691a65861368a31e27f9d842334de6a5720569698c00804b73f8a23948b8792a1ba9d4b49b2bdbad1fef28bb9fbd04fb8c1b1794be075a08fbbc9c382a2b704b134ec42b3683303751e2af5006ab5ea51b5c9ff463fc31adae4cd36a986ee6a08026e4f4c201c11604a1820925922d243c2d371f31c0400b3b5c352f853f8fd05437e4dfb32e8085395a6b5e434db05c9074a2fdbb9b12f0e99ec76740f3a8b825dcaffd164337d5a32f7dd6f5b8e8b9d289cae3068b3201ef7ca0e6eb5e01b2882cbe3e26e72bf130b92586e17cac43ee8c5d1f3ef204bbe26493a32ff22c53672a638fc18efcabbca4e12d31461227b33d83729640a192a2a7e9ae46b81ceb56380fc5a7a5bc353c47350492e5f44c56264eb9ad8dbad4b571febebb7b6f6a4446d1808c194dd7812337ce9c5c56ac47a0729d42e16891a330192df40cfcb5887afc4df85c7cf81ddd29ec20f460edb01fb2e3f36dfcf750a1ee04ceecc133eaf210ee33c8b2b5b3418dd76f726afd9edde112498129de5b1981b017f06b93a54ad2bdd2f09d7db62aea5f8588d933fac1b15b20aae1cc17aa8b724343913431b43cbdb64a1e928883c19003bf49dae00385a13124d37e25ec30bdebf4d0717510642482b51f35e5abdf41e8141e97ed80cdd26d719e9add945d524615985b5d4acdc1ba46a62bd1c3a7dcd7a525fa0040cfdbad4ca1196bc02a407488e66f50556822525bcd0c6e5933f059f9d8a47733dc57fb566540d18eb33a41634b944e9958af3b587a488f13aa51672ae8edd50588f7f6fb377fa262fd10574a8b7d64d07b887eecc1d7941d18907ce62bac3704dd5a7dd508e780d5599faad196dc38288ad1e4c422c196afe742491898517aa19d3f26211874b8c2abe4bbab5b49e7bf0148e5b1ced8a35f8c3181da3ac4fabdb695fcf802d1b9009742213be9eb333a5c6c862ef72d3b522f8b50ecfe3d5b1b1ff66484a5946f8ff5d84f79fa90e8db67b86156c70e1e9600927d719ae9084c095437e3652405e5554b6c7e4734fe7b566056605fe1e2c6df5c3ce4c24a3d57e01cf6436fe746bbe5bde65caf616b7c4633031edb91247c61d192849659a4823fe49c778652e272fbe3a3a66184636f7d65023ba0b28ef512a341df9cf28eb0a786903fb8d04b36fa234c7126fe6c006880dfae0947334216b394de8661c141c3e926387177f54792fc181ae345f39accafc1d70029cd1e38cf97e7b0b037bfd60ecb5a85f4892d3caa63750ec459a9d18cc8ab05aa4c312f8cafad95aae82aef7204942d6d2b5c4282eb560e718dba5ba6d57126054e1897d68bcaa45c92b32174397c5e28d351c377945a119573b65b31d9fc9d093ae5e1c17c2ca7a7184b67eab2accecb123ce82db4174bcf704a52c7bfc2b317ba2946805f3bd652172eef249230bb57c976dc058a80d2f7b807202a1685239d895e3224a00c84cfbdf61119d6f83f363f735dd2e495437917a82d810c52d1ddaf07e3536ed6cc44132b398fe5b935c80f1f6183654acd30c998eabaeee3f248e0ae48f3364246a0a2bd3154afd6d682daee0175a1b759c06771ab34a44828f2e830d87270b2b900921f819bb89d6e5572b66208ab179e7361019ffca720926d11681491f811bfdb07e72580b575afdca431fb754e42d6453eaf747f32a0828b869031d1a6d1836dbca24f3f677436eeabf2baf9c77c5c5fc8e11e3320c21aefddd9f42b3236f2273721e16480e92381c8411ae1bfb2078873308ecd650a58a99fff09ab1c88c1271ec57c330e084714a6ae880a5f1be3e02f1bc8cb46610b318af444ae2d40a4211a5d4ec90b5e255b45cd19b9c09408401746cd7d8d48a5a72ef9d71a7c475c6d71896563c49749bacdd215a41e8c811dc6f000f1a6f34a13d20d1867376e5e56002367f9e1b09f0cfcf98fced14e02d586c967577a4728a42a05f531d7366093466230666124daaf74dc446542b9b795b1684915dec9ce4ef4a3fdce5c051de41c3bc482169ecc33c36d887596cc8dd302670529a4b0f5c3c6d6dcf1e3c7f3565683ec97937fa9aad012bd3fdbc659c05855ba108fbef389fa24d7202be24ce60392be3f973bcd278aa9e986598fb2a0b09863e1865f3b0982b194dcb358e41e7be782a78dfdde1cb603253a9b744fa324c4a3809f0089705adfbfb5a58f752d7f7e8c3e6dba5ed36f3fd62b60d97bf9e3704232aa1f2dd8b74a5b27a1c9c48a697fd7d6ef70b990bc3acac89d3cc05098f06dfc18ee958a77006fc54f18ed2aa9bb4ffe0154254bd5036ed38119c5ceccf0bf538c40fee124a151117945c06037d7cfac538aaadf588919a8ca7e4fce90a65a61313af0bbbfac7b6c3599d7fb570152d205630ea4420d80f445f16f0fb2791832f29cf48a8098aaacfbfb7d70076b9ee8002c7c6e70aadcda9ef8e093d1fb59d3e980f5941d491e6b0845f957ecfbe828f183cbb73507966f77a926db501b77e0b57f91d8bc87b4bd83f94c388761c9d0531f742847b38fbbc570b4646f286e7ae528b82f448c50486c69f579c7f15bcdc9f345b908d67f54406df177df7c5fa165f71434f5a8876886b8983408f4c96c8ecff4ba36b10ceab7c361e5887149a345cbcc220c59fa5f59bf7b51593030848af28a014bc4575cba4c82262567be56af45fc3f0ae2387ddddf7936e4b2df4163d20ebe6f4edfc5b730ec4b06c959719dd7f007d2f801fdbf5782f2d139333f0abf3d158727a690828ca4f3179ebb67f166f72128c94c6dc760b819629626cd7be1155ee3f731bb27aaff856e00d632c23e34edd1c765735f4450dbf622830dacdb60485b39804d46e183b860460ca17bc005ed180e0e3c05a825e67191229e63726ea75bf3979370d3a0b5d33d18256d7e8945a5c2d3f88712bef4fd7347212257bf4aea5adacdb173d50aec8c114d4e4246e8eff89b85a96981650c14a6dfae1bf54deea324cccf9da1ace15cc3b3ef0926ed4947ca10c51e3d9ee8c4b76c7da8a48efaa2157a5f5f5d07d32ae0c46abbfc30d327aeb6e24108021faf3f87bee4e37f20b493b0eaf99662c136ddaa83dd0967abcdd3cef253ecd94396c375587817b67d06c306da67c597192f2c00676f661d075098208d9e0f4bc40a0d2347123a8aa01eedbc1cc779b71e002ce830fdf0c20e223ad55154139e86508f6bc6022ed5e3c720406b42356f699be0618b0cfb27aa2ffcedeb356ca616d562233e36293f62e30b2e32a9b811f5d91ded9400ff43ad6317221077a2b521f14e73ad213c5ed7a2761a31172a41a59763ae575b820f5c0537eb8913dd6ea10e3abbd137d6b7ff9191d2fa8c1b9f750c631569fa36b4f410c97a24298f55540849dfcdf373bb8057aa26bec1a3b45e52cf1abdf2f961706505c19f30666aa77ae5b325d501e920224ec6402d2b0c865b8b6c3dac98b5371e6c81babec51496fd0c899ee979ebe93148cc5eae2ef578ebb789f9d495b9a9ee8f96d396e84fbb88683b09c1e8cf764aa3b27d25cdcbd2ddcd9230e288589cc600bd43d5a5313bccc2fa113e738533347e6a37c7f7fdd7d9bf393489eac74b5bdb9b180f3f712bda9c7ae46b6e1df6418d27b2f3b9d107ab4614494fee3b0062dc08ed5f907a1009411d06b7c398a236ab12ec97e694791b03611b9e40b52df49ea376e7bd50acda8ebb7b76be99c5b0ac0bc4699633ef5036f72794a10b7df5d3e6a3994161ce5129a148b1f529f01c831a1e85dacc27e611d31774b9cc8b3bc853d2c38b8f0cfb17ca129785fa9fb482ec01c6cccde5a8d8ed20f2cb3ab1e4904b40bcb7e565aebde815c032da89161165a344f553c51fd9f6ba6d61b95fc335320ac71d83e0bb8b3e96b396fb61d388289a12e8a109932dcea9d28fb9f86fc731e4fbdebc4208a35208fdd273158dc6b3c6245bad2273034154c0c3e1519f378024ba63ebfaff0f46490af6b270eb095f85539867fa41db0a8b03e40ee422f0de0f60a69e415ec72bc3d351eca585a87160addc163690cffc3a6d4364f55d53adb46d81592d25a82c9027bf1b483c9abf2d4b37172fac2dad70fce000815c26daa8d63a70b68c1ee5b1a8e39e410dda0aeac5345e614a0a37bd72abbb46c219392f29e90f3fc1e008e73b3f22d362cac620da1ab0f47868fd95036d8fb2b06069d8583eb071f944860890bc3f126f95bbeb78f6fe8f30c805cf74941fbcf95ed2a17e85672a332d255aefb5dd76ba1cbee358edffd7fb83a2d1a2f9875be2cadaade23570d7d773bee5c0e44a8ebdbec27ff9a14ea5c7799235711649452300285fbda290e4fe4ffac1fd07386b34d027c98635db1ca77a204a5d532ca3b85d21e2638c76a19f4e6352a063243379f166bd2aaf7189b06f026dabd89908e1522d3a8f10685082952e258e1ae6f909409dd34c46e920fa10ee2b8e22f77c333d91ca0afe34f8c8f3bdb20a9932451df040af4079177f61a09a305fb26a3de93cf3aee3a7bdc102933279d00fde59befd4fb669ec155823dc3da09552e4c700b279f1a31d7ac216f7be245e644c24606aa2ecb1c47559d77380cc1c5acde83a2e3c88de299a37c2b48c1f7067f3ab99619a7012296c4c7e92c181d83fcc7561d1b0c8e1dab0e235d96962fafa4b8c8fc66d615a4c1f09054e755690203b902e6a04f8c551b41770206e3b2dfcd819a397894144374cc24e8ba41f37218224757503d4158b95b6fc19e22cb18109cb24b3c0d0151f1f88e0fd9fbea11316ced68d04f1e3c8bce41753a15a24bd2c61a19456c12c93474494e433dcd2da6541c68274a168c6596de7f6481d12241b6c7bc098de8059fc383991c71cc17d0037d58ee403ab48b3581199228ac2a4cb3a9f2c9fd24d4a12cd18c294c2cee32dce2a2f21dea72c909c22798936cba7a62e568793338ec3a6ea88d5217b8a93da463aa889a78f9975b4aed6e053ed61d2679a18f201c2270398347cbee603882fd30355b0edab5e74c375513274fb2b468ea100ed97c973d2766b2e485b5304a8039176241c5654bd243ca59dffd112837c14870fe0be036bf86ea8eb786e3e4a7ef7b21003ebc5f747aa391b467940af195fda7bea56ccf418a56acdb654ccf60bb9297b6cc66fdce094ae9d82101f3fdeb8af96018316856b9eb5bdea7f9f7af4ff029065b62561097f243aa50f072a04b5886efbcc1ca105cc051a9e770dac886012577deddd7c4563baa0d7875496ef1a14b8060af64eec8530c6a71149e18864517d787918fe4a9db121b69d7f14a6e6d739e262b30fd09f05bc78c75f7cd2934a00430cd595ceb7c5e773519eac7f334a66f87062e194dea8296b94e727bf3e3d3523d637d6e3c9f973c73926b575f46ab1be065fe0b65881da3c425c08db29434e4647e2542c52a30eafc61afa85bf33d21dc6f68f57103277edbcc6f9588f0e90507f06eb3b0649cc1996548a180c934b02119e6090e9b7a4d2c61f62fb3106c458405acc34fa48a95a68204d14358154b47b31a2dfed99716ac83d50d415888df5cdda41aa5753981d0b8e04939c7f42e6abf003214f3f3d34342725d046e249b160bc8129df41f2566db30d167a0578baa0545bf387bcf5fc0dfcb128590ded2498ca88a6ac8899647faf746cf8dc369f54be982e87cfd4d7d252e7989f8dac3a122c1eb2dc5248b76007df2c7a5fa8aeee0c07926ce5d114fe10defde493cc22460d46b575398935dfd08c987d662f648d814c0e080c76b31ed629a54b5821a13262aa0c5d65528c34ba4670c39e8fb6bb39ee61ec2657b0eb4a446ff141f392e20a062e860d82c56dc942db0db010d83a3f69ad06285433fa1d02a20d1122e105668f36f26662cd60357003cde13d8269d84c3aea5332e9080159590041d16377deff8e6709ad3117abbcae5585cc7876f5a84982eaad8af455d5c90d90bfb50fae92d466ae820c5ce76af2e298da51977fdb50095f3ed5b256aba411f8434bc9b648db71c7761ac18e65014ffa05aab1fa34756589874478ef91f38c032fa672af462b61ca268f4087ea42a865a28164b7d7724e32b5410899a38c94dce8f2c4fa5d79ccc53444788dccf2d68c7f85c2d793851225a5153f5a13b05afef5f9105bb97a363da329008cca07ecb6548103bbff626c89c892c7b091a04639c772b1b02323d8c695b25d64c032ecc5c64dac0491888841bdb09e5137b3c6705a3666dd5383116dd4f62b57d0f0f509603567eeee5b6b6e7b6c67006424e807d5ec6d818f54518bf1875af0e8869c08cf3cf15e194178d46a648fdfe5bdf8db3c0b644f0bbc1d8346e772d0343b84ba92e1b2682fc3395f972467030b10f9b5fe45e373e9a3ce8a4746750c041199dc6d7a5421cc8a1238476b2fbdcaea05f7376c0e760f3436f9cd951cd238706c73e4c58bcc281045682bcbe27ca3bc8985731572959d08102f2139b94752076b864a54d009fab0117c64fdd6a73622b0d6d4f5a50d3612100c9430689f910e2379670b84c4ff6dcfd60a11793bb1462abc21979458523989fe7fd74e24d0663e6ad808fb0fac6ee2504cd458d2f4be950d2e2122256a23724aaaa21c7155d374610cd47bd9d7621adecb9e4a102b81067472797cd55697de673e10b22e39759d6546dc1dfe9a46d7678771dd2cb1b54335da82ec89934902824180034aecd5ba9ecf9a04fa1ee99d91d6b59383326ff770d7ea349e603446bc0809f5ab29b02ebe4ec90fb3b0413b22826c3026b7cd2802f0bdf6d3e4f5f0d041a908734f043f6af279de5f8539542d1748eda302f922de4c1d9a3b11f6a15e1efeb6bdcd5f28daf41fc487e51e1b7a134ff426c054508a1f8454b828187f0ac3681b43af6b8ee20a021a1929e54960859b36968a38a15bcc7384e6aae36e75ea1a27a2504114214f1d4b9e75f709b3b25b7ab8d658e6d1cf82b5ce262ed94e008b5be7714a9a23e1b24ac5e8e0c71613dc7883162f52ed8c485f58e8bd53c542f2074229b14fab687076e3fbcf1e16f7f531678672319b56f775b537a2c2773624515e93f661b8956a66ea6b413100177c8c8986f4a699b5923657cfe156677a56ff81c2de3e7326c958f1ca48d14997c6575bcfdec41b447f6e56582c06a50979c303f16fbc0b3edf503c50fea69f63ac354e925b45b4bf6f53eca6315144706c459841eeb43d24296f0cbef737d75c6ee9ce635830f690c5ec692ad09820ea70d50ec7bd423f36b38faf8b40cd7f04c018b3806bcb64d5bb51b4bd47cf9a68a390e69b3ada864ff6bec5c8ce1417c32729d4e8ec3274c3d58a59cae4908b1e17fa728c3652b880d4095496df0edc3295230174728a98c518eff43b4c525e2151114ecca3c2cf951be997b24bb6d5c3e1c5af82635810443656b60d879765b19d89b3ec41908a6e2a80e11807db6912f9c36e175e6a9e0e479279f3076044ba68a98198b52be8073d4c9a265db7352d7e23e235f2d4b7197295840f2103aadd3e171efe999c7ba19d5e400e04dd746f905a8e2bc649d64153bc8882bd6f548f5cbc1a726d2c4c62716937b74c7ac46d9e48de8f1e4cebcee79ea4d0ae49dbd8476374b757748fb5bef43b9c72a93c5e5118eb951c3b4326611dc3560df34dd28ddf5099ff2a1f37b8d90783a1201b4d1732ab282def1e3fa08acc0c4b57f9977bb46ba38a5579728f6ac2c5b82d7dadf3a507c7284c2ea91f42a449f3534c85b2bb2bac0174fa5d700a15a526bf9b2a39ff229949e04941373ebddc0c8eb67d14edbc79358c7ade49bdae889dfffce9843656e4867d0d156c1d6cccbb0ae3cfa9e3545c5d46cc17a96fcfe2e5b7ef78e0e70f710dacd264d57b97f6e6c4f21c6e09ce2a5b27c9a3d5585ea004b7d9cf0545c884686109dba4fb3c5e9b6f06854abb39bc79b7bebfefd366c44822ebd9c5f62195b69e931fb5da6cab991e19f52e44e3ffdd0cff268e4e188ae3c9f8962e3ac3592f9e807d524b40b313c78a16b2cfc4ac8da911724f65715de4d6fff5b388ce1aa7e284871eaaae121946a13c4dc2975643e61ebfdc6685ef6367abeba60b43b06be71d7d8a193025254b662541afa2c426d6b850755accd631812edcdf095c3a8692236bf8e74d0db7a5ba566f03ce19b1898de1874545e4bb4b2886ad64851170fee3fc08aa96fdd06f4a310447f276994ec1cc65782d4520cb10961f234738db56b77951affc8a028556af69cf08c59a1503d9cbb01d4f220dc3326e36aedee39f5d76cc014626b46ae6cdaa55de324f97e885651b20afa9fffdf1849d68e6d65a62182600ea723a501c298ff87829a5baebe9c4542f32f22e21e4ffb59540b8118d76e62c1349fb2bbc403aa89a45b35f885b92fe8a6ae3c37fb57dde92f2eae232cb99872d414c666ed012ca089a5ce4a8d88b8f373bc892f89bdcff214e3456067e63564fc742b6e8780dee338e32fb2a53ab07ab96780c44997286f65299cbf0989d6e9a86c260b4b089d53f90553c558900376386f55cdfea4041fb91b88f8c0382c5d6ef44105a185b1e810e545ea6501fdc8110ff401741597858761d54d2cffc26bc38c750501c2b872fcd7b3737dc71935e8398c86535ded48a52e0f72332892e43391031720a0b4431aed2cb064b5ba0ca1cc8d52cd263b1c0493c6d87dabf47b5ad5a050d97d789801a0406626765afb57a6626f91bbdc18044b231b804af1aab4d0f1d19645422a8884c6b57ae077e87ddf2b389fdc973d2a4dd08371ba3e89b303e58d8b037d784669b82fe07eaf919e2c0b4688bc56147a3f4cb7d30b25b7f4eb92bd532116c35013663efb6069c4c91cb3c19a9e7f260ffb8cab8b103f3b0f03a1257af78eb5b7154a37110f86d7e9b4f50186ea6376af793f284a41644a13cb49c847ef274a0e5053d2217d9a56840366c458f1d371f43f17679e88f1a39d1dfcc1159e7afe285e209eaad5d7296338a7fa862ee1aa38b10f0e8151d7084d09a4fd566db1caf1aa24a6cf1213ae6656595ea2f44e15b1db7e06fe297b57ae3b256f5311975d31abd54026f81794afcb868d219812c68654c6dd4d646cab26d1ecac42a36db11d683e42b066e2158059b6cd29885f528fd7523c60642bb06c2273f765b0f8dcca3ee5cbcf0acaee5fd3383f1c0dbb7f4eb0d7530b9b7076009bf16f5810f8478084cccde7b5070b34e15354eef5f5bdc281833afc49517e607db9793f3fe2f16ab2fbd64d613f9d06197a43f5bbd44d24f976028e5cba3026ec02f1d7893e60aa069a51cfd78a41cb52e394c74c1e4d9cacc3f702aa1402e7b0be977da4bdf55877cdf76f8f7b0b7113163aebf992079013020b4090b9d6a48ab98d033e4e5f2871aaba45322e66af499b13f62f219439c9e0a95abb5a83b08f5262aa477bb48b15b004e598c30623e8c516bf48098fa8085c51be147209564034dc0f3cbdb50c73ac083f3ea77ebeddf00badbb37372c97082269c8e4413fd1a6e5a907be554bedc6cb603aeed5fd72084df77916429a2ade8f3b9f47ab6826ef60903fb05da9bbdea803e7c54211a8468f3c8cf475c87f59a3888fca2bbfb0c93316ff47f52aa2e461357c53dcd94c3ac5a792272a13d116b664c55b60ae021b7b391c55c9fc14a11e3c3d7e52ad066dc0e9ee02ef2c15cdc37f8461e7b0a514db7358a9b007619651ddece0d1603b2903d55f03bbd1de00d87a9ace2d30bdce331225766bc19b65ec2bf7300f3006f53b3bfaba9467ab7a8bff2dd8220bf197ada57e6c5b379f34016ca917029d3e759ed7923156c5e4a09ac17218aa7837ebdf87f346c83746829cf470462aede39c61667a9fc0989deb2da2582ab4778d7d9e27ecb207bbfae9ff9d511eb0441d7da29ae1fa1fb353918c46e478e64f2ebd2804dbf22d809bc7335e002ccf6c3b5394bfa3a31fc5d2d209756446c64a1611e712c67eb2b0989cdc87c8ac77edcaca880c79c42b9e823f4a16756b8c0b885df2143b601c0d6903b19d4a148824b17814dab8f8c78d1a0c8c583eb8e419adfa019919d9e378de73f2804719ab2b924735fe75f37a71ab42fbc8c342d74768d847b2773b74dcae06aeb9bc0dbd530169b4273f3204442535193073c83882b49023d8a5186f239c01e34de0e603e02c4ebe51da04cf43730e72463768957cdb3fcea4a02908d5da8a1a4639e7adec2856b702e6eed812da41073a5dd2747ed0944257d551169a32cfd118910853f3efee07f8d887509b78b8a129e3543664c574680a7b06cc71c0f79a4667c635250bf4db9b9fcdfde66646354efa76dac4282dc0975186306ccdcf58a1c410ced66efb6a7a9eaebc10ae9cab393d1edce21ca4cdf744389db58ef47690f5b9e3848ba9f4448cbacc0f80a62dbdbb9007a81f8d06e9f2ec5fc00ea5f6548aae8739dd68ec3ef106704ac177484d2eab5d7dc40bf3fc377e1547f1fb5d0b92604655b0ed16e712a03a9fe15abcb88b52cc143e3fad0c971d84964e2b0e26e432e006e52ab4179671f1be97bcf2cc71efacdf3bec078c5715555c068e900a19e5b44ccb485fc1572de706682b0f2c5ab9a0b980afb9a281daf4794c93f6f308d4c90fd92fab1cc3bd123f3ec43786d9de40b7aeffc0e9333cfbaf4b0502c4efe599a8d91edd6e2f3e9221dcf87fbe0295eacfaeba551cd262fa02eaf8807824421dc5325a42bc101156f676195c19792967283c058ec197bcd8d466a6b2fa57d38e9778c7d80aa0986d1141e803ee40ed42b5c2236a40ff0f8a8714020df0955ea57870e042a16dc7ac8be8204e17189ca7feca3647f52a942ce49f1f4ba3ae55e1b315fbe759fe7f5bfc74df8571609f81e724da6b72a3ce253c9c56ce032505c4402724aa8a9b1b854880909af7bbf435a4891975f7abb1a0b3bbe37aa412b6864aefd6cfb7ed0492af59714d48b8bd3a81895dc39e564622c008490f4d1201d649d95382f6896f6f4a7ca07377eb7c35f9ac000b802d174f09239670b19c917e70da8c64665869b319d53aa8b3b40223d3382c028cb9d70c4dde3b02b58c797a1b77b83ba027eb632ca229d3212ea51f11d9487f3bbcb6453e999a1c2da407e25a8c40ce8584d00d1f3e5e20fe894c89bbcea4b496e0f2b42683301cc3de28389af43ed9278a9e453033007d8ff93416bf4ba320baa5265024c10cf10a784cd143de08beed9f26794209168eae145c93db9e731244f6417930e65cc2fb299ece9ae6b1ddcd6fec0ddf1a6520872ef616dac8ddd3843c64c5b018a91e800aa87abd05a93f6e150b2bd88a26e8458ab6113d17813022a651737f48bacfbfd5fd73b0b856b4e463f73425a9b438256ede3a423fef3710c93a6a8ec8bcf92b23315275642524afbf15d5f39ac0350b30889c97ccf6215a624a08ea32bb6bd2be087d532b46baf1264f75ed1ad22a0d059b99a9c9770c5b96db398287f911b7ec81f1d433c725c261e4459289deb387c51adf940824c333f0fdca0a2e341e9e7dd8db42a7b7e7acb622dd72b2a30d040dfdb2105f944e929599c3d9e41d5563355b587684d694700a06ddf116430ffbac805f502a272bec09dd9c399cd580e00b085921bab258eecd111cfa5ab90280771ec06769adcceee95ad250ab7fd2af3b550a96e782d21a8a9d474f42337c7029be52a2085cd7e2891118823c64a8f0f25d3296c305c645d0531e75b7c85690e905d134548a0f734aec860e45369bc5a2ac315b14b4e63b9172cf9a69a032142e58d19468a90e13e8bcfcc1786805fd97b0e57a0e23dc5614a7fa16c878ea459291b7227ac9cf3f89b0e06589c4be8e6a8cb1666c8f6e523c46f1b179c8a303b5faf93449266ecdd6d6d3b8d4c233edf4381602c90fbd2d4b1b10ae613f89a09cbdfcfe81ddef68f6abe55bf33bdebae53a66dd8ba69f2632bb4934910cb494e7cfe339c187012374a7c2cdb6ecc39bb931933c13ae9159971543241691e05a9b5d3053e88782e244e4ad8bc0f5e7fd3847c5ec61c8a1822d84d4ef4e3a9cf552bbc3fc02d26f60da1d5a001b7336a5fad6750b355063c23dcc649b9d5953fe7227534c9d07e58fb5d53785a34436e9cfe22e1f91d39313de6ac8ae98fcdbf4120f86325325b1323daa8f17d8b8edc8f1904f62cee4935e6ab96432b9f0aedafd65788c81d5859194e4b3c5f44b541182b1726cd780fa423c47e03dc38bbee2d660af1408e80fc051483315e21f07a024cbe1ec9fadd6b24f7e0bd325fa401ea55a5cf06ee0d9ca74ce6943b1afcec96f4a26cff5e029705a9dc47065ca9685c01e17936c37fed11ff10b2230baf6222ae10d7617ac34d34ae82036518ddeb1c58f4677eeca83ab8ee703f63afd1604ebbac4b8ce0dd6357ca10eb730583307adf8783f974e0631e38d9889ea1238352861a19d708a3db1d1098953eac4c9437726eba4f397ba8d4a7a7735d3bb91859897af96d21985c799c4eb8b8455f08199f614683defcb4c84e928f7e36a8763676df4421bbe27af64bf35f8ed8be3bb152e03bb95cebbe177dd8ce0be7f7779d24fb93008f734fc1de0cf4613d82477ea5c8742b82f2437472432c418ebdad875da64c48d895d680f91c808462d13c4800690c84c76286aece7742044eafc4f579689670f9eb6719e8ba60381164a5fa73721740efaf8cac0c305ce27ce5a4c96537c1febbc38bbaac617eba695f85e1cf5f44dae93d9290f77d189316dacd80087d07fd3a7727063bc7d3be14afb212d8e79f84b4d7249289823fc029f57f18efefb71bde1ee5923ddcb627b6cedebc43cd44c754a6253d5af67add20d415dca53ed1ad664d14cd46255d5ae612dd20dc175eca9b28678a178a6cead3ce0289163d203abb1a11fae3ddd1f90c9e788cc0c2e242459a61b88a2a809670de1e6ba2db721ba6b6bb1b9d34ba5e83456a90777de755d177b8d5fbd939e7298acef84e11998c32a554a847bed1d58c6f22914533b15621393ca3518ae6c3aa46b40bdc3e4a350eb3999215ba5889bd608637c600da84b9086c17ecbb24fefb668698e12982968b06b1ffbdd8e88ad0376d8bab7c437bfacd3f3d943a4d2b65f329a8d205c6dea35fa0cf595dc2024bcd593f7ddd5c71403b1fa398434a2055b94ae7b5fdc5e002d581fb82829e1bac06c10b29856590f195572e208c5f14cd9256e04ce6c72c4bfa5ca10a71b23f8947b35ee4009abad362e199c78d5e729bab5d8c867b78afe48a68fa815b716033d2992d89ed49ec3bd9ae5af33e880147ad33d29cf5434e608a7113ca4d1c9a5e41063ae7891506eb42efe4f1f30d86253bdf80302b8b54698d0e495bfa16e2138e4fd9fc43a7fb8b463f8abf69bebe6843365ea6ac633c970afe11533c6029ba51721f8f2071e93ceef6f4a0d5607d8efa4f6b15c7ea84372f5f223e547fa32a6a6686dc0584f5c783529d6209276db34876dbc89bd282d03efc9b9f8f9c1705e5eeaea5317d52ce999876e68d789db5501523afa796337aa29045bb26efa3f58d7227fa5da66b5f4d258d7b7719249bda0fb4c75226b56ddcd8128af7a531ab5594035a514e6e40288d1bdb072475e555fa87baa0407817e1a78a5b514a9861021475ddafa3e18a55aa99167b546cbc18c42d8f19954f3c13697c4ac6fd58387c0169584a30e2a24db1aa89c24edaaf6e97ace47b1d3fc0ac9b30a358d4e54eecb4b0cb0c7ab43ba90bd970017ec49ed0cc8396c25421f5aa4397079de3c8bf83b1bd2cd96047c10efe8e73e997b05f29be23c8a381bcb06b8119cf4c54a0495f7380f58d29cbc5a1321c060e8d385a996627692b442806b4e49741ba1948bc31e657606f3cc891d4d5afb033cd7b76692e8e88eadec262d82e483b549e77fddef04c843a62c92736ba7ce633881db46c3af0e07b70a5dc02e9cf08fe3aaa62e5a48481c1566b745c490f414b1d3623771eb66859002e7508a5b8b55ce020c6fdd846b1acfe051c2dd419a5bb515e65b65f33d7270c797bcc14d71dd0dc009238c831fe21cdae377865bfcf824348c16b749166e130091ebacbe780bffa5d18a72cee2696d6f8764d9f621b71559218a137c8f2bc668e89c206d7136a00460462175ab8677073631dd297d2665169aed7321a67ffed022fe36b0c7f0cb3ff269e817f388a010b44d449df25e32d459b0a51303ccb8d880062448197200f0dd3218f998a3693a109916a46042bc455b90269770c227431d30b2495bd9cfde34ac300375c438c01f3af6e18d304fd0c1d1ed03cfe021b8c0f394a573eed8f75b8367322a207b525924d37b811790f21a1385205ef1e94be1a5a6b974b5979fca85ecfe4821d9bfefe2ba74397ad3b364c5f7ad403aad5d978ebd30235536b9d715a794b02ba7a3a7d587acdc2f9d321fe5fe5e34a07024980285e82379181ffc65bc442adb9001b82ba65a181e0b85636d33c6dc76c34efe064cb7e6670b625d54fba364e007ae78cca71e47101836e3fba743c6df9c91f4453d33ff979b85db80a9e715621c722d62445fd1d5bb0e60a8ffdf5181533ece1d1370bcf5165116f2e27b861f1d063d3330901115c2235dc358260f8cd711e50b8d30725dce64d0dc6dfa22034bf42fd9ed4d0667cdc136e5ea76e8f115c4d509b2b522600a0e54c4b323a0579baedbe6d5089acd7b53361338816c617dd0032b197205081e0b22e6f68df0e346ecc9d7e518addce22f9e605766fbc2b53c024d2b55229d3f88cf2aa9b2047506ab083a640a8a1011becbb0e38f1ebf58b792d3aeacee8d381c9c5ba9a723702ec5b24b93b5134126779edb51bb4be3aad4d1e3a80e7500f8796672427805c6398f441b051a18b5b49485341d89ae1a1a1032bd2f8ea5860efe8ea8e02fa139db11eaaee46b8d3333b23a9612257c5459d25dece801ebcf69069259fed75f43ad7b97d26e2082d5f759eabcfdc23306128caf18bc05650e6a76a9126c37bfac84966500b5b534e49608a3bcfb9f3fd116ea8055d842975e058d2072097148b9484e02f461bbb6e20eb7a13dfc59feaefa670fd37b518bb9734e10c1042607cb20a9fef3802ec603f96084d967e840e49b80047fd349046ce302ca2d0e6e5b30181aa503e92c0bc1d120dc8532e0d8b7723d0ae546292170d96452d92c5291dcfb4cc40d10d13cce123b978cf0b991f38353202cc14f715c77b187c73dc316b4a64729bb6a02f7c2bd8b0ef55bf79784ec2df7965b4a999294010807b706be06ceb1fce52302f01473a640dae25611052b07157b208e2244514b262b2cf990b9a1d607e3e076e72306f6341b1bd932ec573bc2a100835653735ba04bbb703f5710cc0b8c2cf29e9c4b8be683a3408bd6e365c20b831b47d16706132c94501261237485840387485c90ac20916c04e0859385009c8e524b2da7ee1d65c29592b341a41e394ae19c734e5113f7e57b40a0a78e5999e432da5dea984bed0673cb653c599d0cd3b4939a907e26575f72f0a3e5c42c31cd74389d450a4ead7d39712de61e102a013e01a7951b1fa7dbe74506edc6889e1e33ce978fd32dc38e92a748e3a1755f5d80f671fa9cdee33d3a320c9da63d34e401ee21e25925c433ff90ada11ebdee224a07d115f7ab892c4f5c1a3a1f3ab0d73a14bbd301e260ae1139a1a64f0e8034ec4fd83494c28af73134a4337ba8db26aec5d16257f5cfdfabb11d56eb756f25912c77e979b6b3eab593457c784d435956774a15555121200d7522aa0b2e2d0271504a5741d808b01eae299040c8fd5cb011603d789808301158a8cb894b83050ad7630f7adec6f230c6c854f47de021c4a1bd2c12248766107b1d65894b7fa80f7bdd2e72e2d2559f20847405e90ad255a533bae5d42517333dfebc11333b3924aff449820169da7bb83f7828222e21f0c8d6709ab8363eb943aebc153abc814b152d4accc0be103659438a28495df1c41236bde4b0a93269c2a62baa7ca0f8e8310a9b461fa5d82bb4786bbdfae0ad676cf2b78e6937f6627e693798bcae68f29757ede6aa6e693755bef0561894051e2b8630e3182f6510db48b5c04a5809e37268c9411fd00943f51ff0046e0c93d9cb0ceb2e7b6dbfab3974cc06699d8d0df519fd078170bf1b4462af3150044b751bbb1e6a0f69f7d56049d6a5b5d6da8c9be1b9985bcfdc4eed26c3b0311eebdab2f674438761375c356ad7937b7d241c4a3f49312885b1168485315cb8442ae747d00606b914cdc468c67707e0bb83f0856fb78a703f9b18f834bd71f0fee3000f9ff7b5fba4d549f6ec11935e178f46daf27088cb4e3b873b32a6895e3f7695a5c9f5ff6c60cf94c2bdd56b8f9f154081841a2011042354a4a027280901dcdb5408e20836c041175210e387295c8af850c5125ebaf4a01ad81550115485105a9e7d8e6a10841668c0540c31831744f8020c11a8600839e008c4cccc321f23b4e26fbc94240904d0132b005151e2891e38850c9e9500523db314f5d69a194d1c7169d22363352588961e04bdac84b6247c5c4660846507aa1624462e123fdb0c8c18f16008cb1229d10e94dc29b41ce88c78a4f842880c091d510994d81ee8682d4882e94028bb539240c105abac3ad849800e54f64e59c2486d3204fbf141aa8a2078b0c333c50b223b4a7a006227c80425c8410a7ed8c1aa8813eca8a8e4109144ce67a1735de6439e2aaaf613d4b8bca4bc302717e6210f14848488e28731ae6d41779d063ed84bba2ea41c9fc6a0a093351185932898384175cf4b5e0d8a6446b82d4de0c1ad562889828b24dcec214f1460643bb89304ff5d970210454421889f28a4e0abecd46ad1894516513ee4c1c28affbca6266161097bc8128034fd134510630f1580276f1ad8a491541053f0ed30462048607c908b6e1a6e3c267ac4918169fac785ce570880cd00bead87f25ae276777777f74f2da204ea59f4dd03d2b0e7a03d3737377ff58b291c8883d9f971fae42372ce1e7b73de1597fd73ec71200e766a820b77300c8448c1082ad40ef60f8a9ae01b2a9d46ea258e35efa9a89e43b096721693bb3ae30ed36d7c08d924a7f7004f36409ae9da4f1d46cc9aa6995ec54fb7003c39163fddba28e14ea0252f5f07367d8e9a3ee1d00ed36da032f4d32fc0a7de317b35a9fce7f2cd02c53d72654743e7833d235c1f34b0090917fee7b137dd860a0f54656e915083f9e5222d2ee459417966c1bd8e5ccbe3e7af39949c0d3ab009fe746abd834c1bd874f99c3a8838b735ab7c5db4de81bdc9c91471b54e07f6a60270d89445cd5ace3a5803039baa631ea14b09e375d5f69207618ef8a226ae4b0f38c55b5dad160bab895b9bb8f221db1400d2f4c353b5814f40c884bcf1c4adf1d88b3636362224dcff6c1e7bee6c208e761113eef79fcdb5c4fdaae5325add02d8299531c470e7dd609a76969daba3b3113171f95bb06a4731363642b4094ddc8e39c01bd8a47dc71fbebd3bf5c59c6f175db9d6bb330c4cb98cf9e537f4e972ac03e252b7fcb3698d47fc236ad7a22af78341365d57c313d786873c4ff4fc0dedb5de7b11e106111316d0cf9d12b7bba577b7e4e62a1517063553217b1d811dcc225afea32fee08cb2917c31e9ffd08e9cd1d6171314cfda3c7ebe23d190acbcc31c7ffeec7a75476ec41e673d2254692444c5cc8512cc76c59d5b9067976c84dca59ce1d0e59b5587ee093e3017dba850e3b863be48e33c42191983172fd2eb9760b68a7b206999ff5bcc19d52abcbb0a923df25903084e7eebbb7068c117f371e96bcd891030fbf068743c5ca100f3d6153a4c2c39fe170a83ce9e99e286c8a613c7c190e874a941ff9c3844d118c871fc3e15061a233759ab0290e3d7c1a1c0e95263b7407884d710a0f1f86c3a1021464052d6153fce2e193381c2a4b726a8e1436452f1efe0c0e878a94d5b582c2a668e5e1cbe070a840f1c17ca838615394c2c37fe170a838a1a2b254544cd814bb78f82e1cce14263a994e1436452e1e7e0b873325ca8ff653854d51e8e16f1cce942a4222a1276c8a5b3c7c160e67ca939e51cf1136452d1efee570a61c5172952c6153cce2e18f389c294b725872a4b0295679f8220e678a94d5b632824d118b87af7138538c48b5a49ab0295ef1f0330e674a931d971d276c8a563c7ccbe14c71a27a5101b129063d7c8cc3990214242308e2808f33050a9b62150fffe270a640610f3ece149f9fa1e5101f678a0fc401ff9b43733583a8b42c9f8d628fe32b565529d9618f1d0797765fdce91cfa83fbc52172489f38a895c4a13e6540417dca7e2603f1e96ac234dca72ba769d8ebce17857cb5414243ea0e75026bc74e6495bbc3a62a9ac73c5e703321d70e1f7c870da20d38b2753fcef868913e32671f99db3e462e46c648ec63e4a4b302208ef61b88a39d39ed231cfd344a7a866213f790ef23df5ee41bc55ea33222df3e03c455f58e6be792d8b3a6dc2f437d7b86d2f1833bccf11c3ced78c2083a90b832ec91543a14b0811df8d4a292a1c8374a4acf0a06412b3e198a4dfdc964423222243645463d5c8127a645d7fa10bab4a2b834d8d09072d5071b9843020580a709442e7cae60620a8f85c485813d3abfbd86ee2dd55d047ddb58812b22df3b640d01bee1936f69628fa9d44803e242ffe28b6870a1478f5542087f70c76f02cb459848ea19ff75b38410c297ff9aa70b6db1b6ca725d6c644599a665223bc2eec55237ab85bacc1729a3219cc1107677c36410428621d110358b9888c25636d1185536d17808f3a49f413919fff21637218dd45e72a06a3dea5397b7356baee5ed65b1ac3996b7d6665973a3b722d15b51d69cf67664dfb2d896ccbadeb65817fb923547e7db195973f22dc9c264323031344412e290fe2078f6e8edf0ec91bba662a3db1b6265e76a9053ebc1c2dfc05ed7c05eafdec7b384156a733287434d0dec7567a10e66b73cfce51666a86a37734a9830ee177daa471f36f5d050c5276c927e33eb940d33852b3dfa8c1632647e00dc6119e68b2b3dea4cc91eb55dcc699af6a8498f5c5c22bb989222a65cd8837e7196d7c027523c42440897601586407f3dafa989241ab81ab8b89c695ddc8ce7899e9897524a299986aead3d6161c94208617c0b83ee077d2c1f6cb22cb71c063e59965b1cc35b960d0e1b5a6e59966559ce0e71587e490157482c7141eaa73bcc71d3eefdacf55e6bb5d5ddc526ec4d1fd2a798034833bd07457898f8e93a10c77c010cee8c43b5decb3fd37f7e3a5b9f971387f424bd8d11c6a65d1c8238a6bfe06e31b8a549abb0b064d95a99b684cb6e6f54d93da714c1aec9a4b858f7c5b79023b336851bdde3f835ec51a71e7b94adb8c11ead6153ece8ace1bc2e2e0f0fbd3ec51df4a9c7a61b1e63782ec970c69e89a2488443d438e370608fba572954d9d8d4d4789e5bdd472235bd813dea35b81fe929a99d3af5129b628c5083cd72439f7814d1c334f069113eec41ea36cadb9851a1a0cf2eed7e449d165858faa0d04fc952cac0deec70b623aeacd5eb530f48335d09b57656f7b4c3b9a4103a818525aff55e1bb85b76d1863ec51f208d102e7829b716b0e07ed147c747ba4ed71a85ac3eda0069a207d5a18f7ebde04a671485818525c923f4e4a5fb77a9a6634dd748d832ca08436fa9ebd138414f5143650b1c08dd1715643e6c1144932d7ac0c2b899174768116499a04513a068a1840de25e0f79b4f08125420b9dd72287278b1d295bca969212a124bdb694cd1615708ea880ddddb4bbbbbbdb296d092985737a49464ad9523657d952b6942d65cbed05d121841096e6cdfc9ad6f0b0f93feee1a4d894d4f24b8fd2ad6b669a68745944a3cbb2b58cb2cb32b7161796ad653a6cd97e722ddacd6c6ecb5e3cf6b229a69591cdc8ba3449b0cbaaf439397e08b339115122dca654e3acad5602ac0497ac96552965e2469f944ed80da5848d6937d44b322428a53fa54d29a5744e4a679651616157c5aefa951ebaf4da926dc9e6e85c47a9c38ed2ab4ed97133522a33208f5e8128a5341b8dae28a308d9038a1e5074fbd0ed43b70f73ce9e3967cf9cb307abf2c2ea0c6ac56620af6a0314138a19458d94d6a45c8c2dbba384424251831b5d4221bd9be443f481d3a935922107c7aad01f9073731590a3e3c2b42cb3d5fe077db6f007402990b0b854ea13628e46024d34aaa36bdd2b0c085bbde51aaae1c54119ee8baada52d8f45d191c7f476153145db75cdc359616b733990c2ebe4db55ba255d3584e22dd6bd54b722bc335b4a0855efb0c07243ebfd02e5af56924b2c2a7a8e39fe8ca7f36be452bff1a1cfb66f90c075f46a6cab8a8d8b4b9e5347a70bfeb2217f9e5f189e6d646c6c11c6da399461b5324c36338cb697044de7218cb49ade42d9fc1ddb05c06179f70fdd27d24978dbb5c26e26ad4c93a9545c3894da9de02225f43bde59f4df173732229200e6b057158fe89566ff9add955b5b406846061a974e306c411258fd66c472ed9481dd2d9b061c308999bb0b0f4437671a53347dad1d674b00124e40e123d526109f530749e7aa986ba0ca5fe967924712be6d469600eebd471d01b4f43f0ec1f0cd4edc5418823e6104557247a761b6f630daf51e3d911f0963f1d1f8339fc1f570cd631e0005f1d080fa8bfba981e07f87a8067e741086f614c8cd5bdfcf8501584e5019f83508a780dc21881628ccc3c60582141f6da872784a828048b974809cc378079c43e089b34c7320cc338731d6c4108a3b4c21ee6d9d0636eb1aead182fd85d6e799cf39217663189494c62d22f219efbc195d0067460af2da0efa020ec1f1d85ed8019420861175d07738dcc1ca7cb28a38c324a191983439f597035f4367037c0d505d8bb7470818c10058c27efc2439e2119bc1dd5ca2c3b07ebbb2d6e3abb85da0cec93cb86c417da6506447ca17df2e05135ad39c003beec78c0efee79b062db8046d72046ce43bf62a4a4287958823360a8ab0a580fd718971318aa0a35ec414a4730e79c734ee628a5ec600fac2dc912848085f1467663c4fd63f303c3c38e013aec261718580f9713580f580f9713d718d718d7d035c605c635e4458e175e44b7a607891ffdeae242f6ac9565226d24f2e8d6c8f2ea222dba15dd127196e5d19a56b4ac68750fe412f6e4cf8a7a64ef1fc3e7dbaf30ee07c3cbeb62813432db610758594aec59ce1e7b08ccf1f10f1f9d46ad4774dac1ead16377ed6897c9c05eec6acd223c310ad2481f7215e11294fb833f4eb127b98b39ec411b79c912d7c1d711f7e3a013ab9a463ae6f24af471c2a64faa765e02c11c75febc9c223e9db50318c741aa3e7115a6912eaf3c5b79295d7ae5671d36d1266ce21d364594476550355ef9a24f0cae85475c7dba3a46a1dab3f092c1fd113d0807d148e2b2675ddc8c83bee8c3a62a6caa3e242828a8d2d8b9acf2a4d3c8c1dd812e9d7b982382e21f6077c425844f57c72866c22836828f7416a5f460e16314f6a476c34bd8934024bbe07290f45a775e06bd747ec2a62fba0ae6e08139dae58fe8dc559b81bdd99b6b674c05f763d4ce8a4d3f54bae42e466154f51bb3fb4a7e51318acf8dffa24fe9bfe843aa1281b2b884ddd26e9861d8a7683a735ff6c12a6cfab226d39250884422cfde009b1ca87fdc66c4ad3f72f8d11dec612eeb22a42d2c9f5ffc1fd683c4ab0bc8b7fea4d1e46251739823f3f60be610b9154dafae7199e5d3f2392dd7c199ed407cebbb9e01a5b724cb2cf60dec850594123616b14a29254b295bcae6141399873c5e04e185cf439ea1282d0f79bc70f25e5cf1c28a0894fc5777784450e414bf68f29f0de2f982891d5265917a7fa8aa528448772dbb5bb64be43ef9b94422f148ce6432954c237e2ef9a9843d16b26163a8468d9e99991f19199d98981d1a348260607248a4d58c193e32645051bdbce8b8b8fcb4b4086d5b0f0b8b927b7346a3954894d2b49d2c53591b0473c0c71c3ece141f9803fee5f04548ee5777fa874d555e7a55f95020d9f4873d2ae55d482eebac97fe40ba7a21dc8f427956620476050bc2aa6056b020accaea7e36083a15faec6a05647fa4440360556c0ecc41dab1f9afeed49c3ef590af87b41226cf4e856abd974472f7bc9a9a489becb0c79d915efa9ca49fb3c39ae4103127505811824228e88b3981da85fe4a86baa4ac465e4869d9b22e9f2bca4b8e6d916fd7d1d29bfb2e22cf1e19306dd090e56c5da81faa57d86325cf463c7b368408a52eb4c08dc00517a8bbe0820b2e7873d40529a70b5c0b2db430e511f6b221199129f7a33d52e43cf5a156d8f45126cfde4aae3c5328d4874d1fd663a3b009f24c41c87f75070a9b3e39e4c3a6cf066151b21e980342b8034a6c47e5b3aa4241bdbaa2604c309d2b578f1236959c3f1b4495fc17561ec7439e2f9efc14d24a519e2b3951b1e9099b58f0ea00807c3dff2a15727b0dd1e2d2b80ff6a4774eb51b9a0e02ec4922a4afe0b60a358ddbb027ddddd26e68ba185c84daebbe1a80eebb1d003aa16767812b71333c977af5925b4bbb29552e665576310b882b701f5475dc770979768e0322dfb9af56a9437088423854aab0298af1f06d703854aa0845212b6c8a57025ffddb2ba6a1fe65d5e5ca904a7e83c60daed647d8a3fec9b75e848bb0e0cea6ce432d053c45d82b98a33a758781a91f0ea5bf3ab75eb9199bb738bb658722adc533cf5aba1f236dd46dc06a1f042348ea76aa544fca27f5935a6d000a09513180be85873c62ec7c6b3c349fe1b6b59148734d07db1f9bdbee87e633ba18854da2ca3272aa5197c1652ddc478067bfdc170326fa6c3e189e7564764aaad87339753ec24a58d018509d7d7ed79bef2591ac7f6efdf3380c05d7d278b438bba5f1b8eee2166a3cb873f1a8f188e9808ce980fc1c72187ded5e3cd3661039d67520bed57dec23b7da0c2c5ebb8f7d731dfd12c380eb2dded2fdd8baca72bb1f23ea41a2c689b8cc354afd83e1d963a84f2e1452149792ea93ac3495fabcb7306496e3218eaf704082dce731200eea2c067c817ae5fad4404c439dfaedd5d72bbf42b2d2555437288974d931ffdab10e8834c14bebd15d07e2d7ae76923d7a0de152ef55535984522ae4c219f8024e969f11ce9891c0b85c402ba0142327816824c2aab5221fb996653efae13a09b43b724d3412593e72d1e7517ee0136f8cd57f371ed6d8c420e2b4e999c5a65b975b3ead6e72d6ac579dd6f47963cd0e0788366c1687b273ca1507d6625e31af73cec99367f5895d6d6db76d6b6df78555eec785d9ac3ae695d33ce37218695d6631afb656c72eac5e953eb946fc4586980f97b508b18fdb471a1f3947942e6f01482f795e5e0ed9abd62b90f89ff793dbe3c3e91f4bbdb41eec3d7b66ce9e7973d99c33ebb8a7639c0c13f320f1ade7c11c994ba78139349722d72ed79cb94fa4757006fb5d0eb51e975bc79cbbbad941f64ad087324135aa350ab7bdab0dfd0ae3f6aff09087ef78e0187f8650722449922449922449922449922449861862882190204182040912244890204132c410430c31c4932b51fe3e671d105931212e642ff3d135ddb025ccc1a367a7d2c253fac950f6e20bd4bf49e397bc1b5c43af429aead4bde8b4d65a3de63022eea437766213f6a84b2dea14f15884d258843a57ae4a97ac8ad306aab720f4cf86b4823a3ed5e5ca904a37749ac6f2186ad85406e351bb2179d46e60625c07476e39a9552fcc669a4806d73f6353b5de4b221171d914e3271a0ee35fe612635c07ebe06ddb3697dbb66d9bfbb66ddb56c3b76ddbb6ccb76ddbb619dfb66ddb5a7cdbb66d9bbe6ddbb65ddfb66ddbb66ddb361bbe6ddbb66ddbb66d22dfb66ddbb66dc361739c6ddbb66ddb4a325cc6b7cde1e622ed66db5e4698754db4c28cb8ad2396176ccb8cd478c16a6cd648f682d5d8302333588ded32d282d5d8aa9159639b96915b639bd4c836a7111bdb9446b6d94644db6423a26d6a2e2cdaa6a4f1e585a7a4edadddc8786b3732606470fc9e3bdbd40c270292a921aaf2f7b6eaad9cd4aa1766334d34ba2c1914563099e5305a0f16de45bbb1281712299391f10285692c2b2693c1c9b7c11179cb6bc870a255eb54b1a99110d21591156666de380dc59ee51b11f7b3288b62138c5b6e85b089e4d65765f897c9b80dff5c68ac605c43710744fea7096113d4f8d4ab9c95cecc153e49144a0a4149229f3cf2332cfcf049a652ab99169ff16ec22729db89ec27b2a1fc8cb70e9bdc67bc8bf049562577c69b089ba8cf4c54d3585eaddc16f2332c3ee3dcc3a7e963cdf4123e4d958a89aa89cac9cf38a7d8f4e233ce283ecd7a673c5e6153f4198f52f844512820541594959f99f1b8c3275a55b7e767e812263fe3b1c94c8c9386ccf806f8444940332e039f2c140e6c0252c3671c874d403417ffa02a6593aa21cd38646b66c63d3e59a9129b80489f71c9276bc6219b80589ff119dacd8cea25aa4f1aaa692c47a5fa6451a954ea2d6cb592aa955459980a53c915a6c2b0894d6cce549f306c62139b53d5a7eb9ad7bce65cf5e9bae635af49517dba2e7ad18bd2549fae5aef4da9fa54572bd54ab552bd55554d6379ad2aba42f5a9a652a8142a857acbad94e5b5de5b53222055af48a47b57aab748b75a4e1ab1a0a14a2b74dd47e2ba8f34eabedbcd745f7d19a2163bca6c8b9db12f9a63a30c6bc1665c32aa225dcb5b2c0b96ca5a6628967acb37ac3154cb0c86a218aa31d45bce72bdac5a665674d535aa66a8aa5551f5968f2cec4acdd02bd5572a5ea9b75c44ff6b9f95080875a12ed4857acbb519c389ea6a842291aee5590aaefcaf7daa4aa552d5b8b208c43416500dfe9aa235d535c529cdc55ed74f457d9764b99513bbecb535d2c193e3972e1c3f6db635ba34bbb81536c5380dff78e82dbf5e5ca070b7682e23f596cb2c79cb6de4bce5964616351efc2e6eadfa6451abb7960b17a17427024259231489742d4ab462cf724c884bb19b37a8a4ec98ca7a162a1a080340006315000030100c07030291402c1c2aaba60314000e819a3a6e581c8983598ec3304a1103142100000000010600cc94106d0300b69a25eb9655c208f58e68684ac4e23e0f846495a05e319c6898b175d5c47adc846e10e1d11601b76b84aac487875f90af99f5ae8fbbe1c39c53aef800fe5b0dfe277474bb5cebd6d0c5936c510aa3eb0eea9dac0037324c434a63c06ec8b7d93933951bdfe50662d742202624aac919315507b59a6b7b2e304272cd4aab5f12996c47bf10c5457a8afb03a16bfbc94a0b4a519d3307cd80859784320616d6a05fd287bd85788ec84d1729ce54c4ade56344e6979567bbc8a85b894d6489f4912f39f86a758cf75a1abc953339a3b043ad07482540fca758a0b4c53b43163931f9f751db34af4c1ac2b8232a59b5b9477ea1c98e1bd56c834e911beb0c44ec000a7b978b95d3b53b02dc2db621b64606bf2fc78314778163cc97fc402673322ab3d975b760cf103946eb586be3860fff464cb6867b9c64ea01d23a36a5b547407ef8a52221ff722a8d04bf64de2f5d52e960fc710421e2c22b7dce348f571f58c53aea167326647018c3d08089b26ae5ed7fca79ee2214afcbc2e3c6432bda6c365c1678c219ed935137fc611d6cc9e48a386cee13bf2ba9740cf34fe1856409a9636312505ed34b70da66173f7b231436e6f5cc9cf180386452efbb49ebcfc9ce7354e2a253145c005fa9051a6a457bc4ddbce7530b39272508090f62bd025b6dc6f527fdb420397d60963256164851654f865900d53a25d80b25045e8577e9079bbfae8ec1fa9d96368b6db42240d6fb1667a9f667bbce4b67412509d1f426c68a51899dc0e79233466ba9a440101d87553813d5354e6727e98438da1aaa75a150c3c112b9756d71095251105dae518cff705db3282ec80848ad14fa17b0bcfba2c04fb7f576203e48b6b313dbebeb48dae5e743b5f4fd2b19f22ed4e2a7047ebe6a7afb589561a74121628b04736c094ee44767e6cce913ea23331dab7b3ae69cef731020ebd2b325fe2dced6b86fd92228bce83b955d1a0af9b487534250639310a875b47d85f3318ecc6f44eea6fe5e94e500d3cdff40159c0d9501a96f45b0375726cc93c60bdae907e2cc0769b2fe20084b8d0238e59987820550cd6c5a6f40dc3ac0f2c2968b6a003d92fdbf712fc39a50ae1e63449feca180c712f0d7985d5380266a64268e987c47bead48907eb3a6080462f01b4a1888d096a12d02a1ecd7318388648abdd90c0bd8e18a4008f43c70b3f50dbf080412610b4cd07736c664511862cbf6a1763b9e1b174a6575e0a9069402f99be8435f452b1e4ad6350bc656db4fa43d9a5bd87f4f12e90c814b2799f853a3e64bcd101d7906e67cdfbb256be7c9ed49932e1b805c62ce8cbe9b115045fb5286527a481daf444419d39ef72e1c3e351575b8ae93629eb3c8ef00cec1c4fe983a251b105242d7209386bd6eea397a586d43fd36a521ef88ff0f379f32b140fce5afef6f4b3c37d6912d308889795cd1f225b4140e57106c9fd39c18738b3910927cef3ee1bf0a7520850546a7ea0f59acfbe688b7e63d4bf11db34dfcb58fc327fffc03b692267fe606215fda51e32fcaf979e927868bc36eb27754cb0ece7dbe00f52537c99e94817071c178c6c04c37cfb34147113185dfd13e099aa15f9f7b96dadd019726ec301e9d5d454e84bb0f45218fa7895a7ca2f1e602ef26c21bf0b28628e240bba4c4892f7d13c68683bcc962a57764e96294e3941373af81ecbda7f212a4eeb9238fb3368fd9e18b4ecbae2d5c2c8967780a2324d80d68d300fce4c516ca459013cbedda3f9b033f8e4346de100264f0eb39f04044874e025eea051282b55a76975f2dcaed272b8917a53b820ca26b383ce57c51f6ac7e469eddb5fb0cd10660672b8f18c44e5f7a324c19fe4e2990ce03397a12e3945c03ecde2e0a58ee09d844d0da18d669c13b1ae173df587c3f2fecfb8e392a7ac2ecbb3d5475f07e81a2267e0052a8827877137df9f1b48f4a7eacef7599ee687d93e88630bd0c815ef7817a932780fe42cf8dbd96c6b9ef2bf9d897529cfbba0237b60e3d5bf7ba3fbd18f41e4a4272026fae95fcd8bb748edb5a991b7b2dcdb9db57f2b175d05fa61790bdd7ece55f7a7da8a7331854b2d0d2e4650bb140169ed070cc3df558dae933b305818cbecd2fbf0c7c09c55c0de0de22bc5c49248b7738820f2f7dac304c28262e2f426d46782b636c42010053a27f755e864a83bd867bb4a19ee1628bae0d6980af678853f0dec5a9f539f1c82c19e01c20ec926407c41b4c702d0736810240ac6b0d59ef6050842f6de94c367b318f9354842a9f18c4a843692f499eb3dd149b5dfff47c8d9ca4c66a6949a78601fd2ecc8b9d5d61039db2dd85a413bda2ad377faae49aedbb464dc255cbcb11432a392d854c8fd4d472d62facca231e17b9c40367894ab81774364ceb2829ece6c7999334019b09ac702a36805b2141cf3363bd36371289d947182f3ab4117ba9dc1fb4318fbf3879cffa988ad50f67e03bfa04055ee46f1a44df3a0050f162c01651953b93178d0484ec59ad4b63358dabf7565cffa0a13fd8f504a38b9360079342b7f6118c9e879d4bd5210740d61ab01e6cbfb63f7f236a4d899ecbc4eb51f48b8cbcc8557078fa079ec3c7b0cce7be0fd7886733685318c2d8e8abebf7b2ce66278c9b0246491b4f4cf564829734d68342f938285d91f5cbcaba607ee223c62a6319d2fed280a5af2bad9edcdec4eeb9ec12e282377e9a6ee1087e53188327dd8b74d29e2eedf4d34997c634d34bdb6933f1c2e5177cfe241a3a032431a93aa8929b58615f311c63e6a55e461e86c83bf8206de8530d8b441615e2ad72df519fed72c8c6d3eda94589f1c4c252ae516b3491236bc8d4c47f35892226ed2f4d51ed4cfa5bf3686a52ffd424eac8843f1a8d3226f97f0da2154dfd47f3a869527fd4345a70b73d51a2cd9afabbc66862fed4309a783b0c57ae789904c51a3991e3365e8d481e5fb9f2e6b73a7a25621020821064f41816609323170dd1c934df4860967733d696603e527fe4b87c35fcaddb63a9b5be75cf6337055961acc51c030aa03b03aac7a4f07ac2f560f494746f80e6613cf91a77d917e458bdad829fb97988978f3c646607a06b75a30bf78945457d64382295bd37eda106b4b80b5af10edd900f3748968b05c6439f70dc16f7ef6c46af38eed8335653f1d370c95129f850663289246ba97b08b964c79d95f55b8cc33b5168eacfc0a62b302e458b24baaa971d4055524b32dde5ded8297025e2fcf6ce847755f228308f3b36b27d0fcda118aef0dd014251c75828bae2557285e52b3a5bf144d02273a19f14ad1bd2b4894d9a6c0253a631619a29a692a9b93481425b218e46c9f48cc25af6bc6454f4cba0c677a4dbeabdc9a315f4c4d8a29aa494ea2e6f2736b4e0dbd9b8a55ee60b658a92fd2b4e4f920a5dbeedbfc158c5f06d239972a5b02c77f684256ba53020a425c64c94519a68f2f1571db0d86ac4952979cfba77ac2387edf4b111737f999ff99e480ac361ac929121efb7245fc71bc965e56c137569446e8b4d72cd7a338824ab02dda49e453d5b4fc647de6b995b96764a2d1eb4005290a881eacd4256093e791acb8b8696d6689f1d5e37b4f1c177ac05bba9bbf5ff21f9d91904d38e2b58200ffbd0e1edd5247d52695d6a287dedf82ba3e14f3d37edf8c75c1c233ff7079f10477c05f0a5082df135de1b9e9e0e58ce2e4d719f6cb5cb83cf8641bf4601da887c5b5d2369a700301c16127d5a3d37ce5c4dec0114da35b4db1608f152f53874717cb22564d202c0ecdfc86834983a12515c4de21a415fef87f70593874f1f10cd416a4739919b42b658dd106ab8a75bde7318493d28a887961903d68763717ebcdd20071a0968f3882e238d0c8897df013b2744b2bfb31cbd13a3927aae2402866934c5bd3de0e70b81bc5cea0e862a35fb3321ee5758d3a60736cf7725b20c9ad887f260bbb1da2fd864968a1e2c7ab40203670fbd5001b44d65d0618d5e4d7556178cbc7866e59a5d9f2aa4dda2099e56352eeeb3c22058ecdede1691e5798c53bbfbbe5073e34327b8e182e3b32259659bef439b58b41b1a31843975693f35620873ead27e6ac410e6d4a5fdd48821cca94bfba911b92918bed0d8656142fa84a74de79f2e0e5b3abfda8679738767ee2a26c93b2afe78a324aa72289038316be4f5d750ddbe8a21ee3db2fb351a03bd7d8a777c6ea2f3f979dc6697fd9ab1a04c777a712668d10a5a876a4b0d581199be88fa989ea7a219256d8477c03a92275bff737c0a12a97bc12dfd192b81606d478521f0b9c4b1ac9b7f2347109af1e2ace7fa379f4e79eb7f2442b11ca708c498c683464d11720e28e26c4487e41d81a1ecf621501c2f617c40093c8fcd2ab5971f59a66aa48d787c1c265af5f3afe6916cb07c969e6c48789ab4ae511eb7e04695462d8cfb27b1147be85049373767eecd5065fd51c858852e3deed21b73c092bfd8536f62ee12b78d9fd910b7dd9877a5709b25421e0e7a2de136970323eaff366062ba954a1160a9334732fc6d3834811a047540a851d50f1b95d4637957f8e0b572158e24311d115faa12bb1ed9b793c8180893fb3e4fedbaf466366daa7bd64044deb6b34d175fb0aaa823430f1a9e660e5c59861000cc9a4cbc6cff25e92e556f2f827f0ce44212898481c50ea12570937efdb8121b0aa0c20439e3829377b1f6efc30fab62492f4b5732572ae86d902908aaca0c3ddf6b91b50b0c5d892601821b9c135f07f1362fb2f12a22715949485cd22717c619453517092d22cdd8fc1d2cb2ae6bf298d41ca301cb65137def4ab6dc549baaefe04e1d85b6e4bc39199f61b3deb22e350d270eba3d8e5a2e31f5ff4941d072fb375e554cec5bbe6b163101165a8041829781906f2f149e767ce44efb98d8a730c977413c1e2fb9d51781d4292ac5205d8bb4bea388428b9252de79058316c166650fc4097842aec12edebeb5750f1d8ee5092f0a63148bba00ecf0bfc83dae02eec04043d9ebd9f06fc66381fcdb3f40fe99c0b6b377459d2825378856bdedb0b43f79ef5aba932c59c8cdc42e0bed6da848a227746bba9d2ea10b29bab142b6c75ca75ae3dd3d834ea66a4c83a4eca557497225c32de5e1758e9f8636977d748837e36fd35a704634d1cc1e2176d80664b0b8fb501ec0fb403cdf55ba622b7a724f89e63218bd65433f0e5ac5827d3c3731088d4bd53ab0a3aa8f73448f2f03359cea07aed5d141686cd7a8ca8a3a9e90b1a0073285132e6104eff44c21af0bc6d8e1d5e2efbae927a2d399cb8fd99658d47e5a4a7ff2a625ea7e35b5380f9063f2d9511b82c0a82c7f2474941378cd6cbbc50745245e677628d79ba54da6d73fd233a98f546a7ce8241ff03eea09dc14cb408ac28d6856de077ff37c9aec6d13191d0a3b13e8878fa8687701d9a1004b89e3e42f598b4fcd60f995a8aeaf912136dec2c3be0b2733e1e3bf1c3ba97a9dfb101130e8959143db4d5a8a99f4373019d81f13d5c612f6836bf91b4c2213b7b9927540335d234c0b2611fbb7873d978d85b31944e154721c59216f86fb0cca2aff5c4a1c765571ec311ca02317b07f049753b8aa8320a17d97645c362aa18f55188fdb717c65ab7e32edd231e29971b91cc0d752358d9afb32fb991ff7032d3b67daa1d8eb0278fb41388bc84f176cdbde87f7b4947484df9f2904d4b2229c9b2a383b91419048b8ae614d648d0c4b15cb8e5aae08c7582c30d87a1f9e1664351aa2aa484450476634da50ccd7fe8af77d57f8c82d7ad049d56d5840194401c895045e5afba9531b3376ad825c488b7ab27f1f0adbe351d52318416f0ffd0e7f6282af7c188fd5c60820297669446376315730f288772820e3720ea7741ab7f31f8f4577458a5d517976f5337cb39cdb50e56106f6646a49f11e7c1a8a6174ece44ae4538fda702bc1b03c44059ade5524614bedf9a6bcfd5e89c831532e8cdac7e61283aeff5bd27b873b2e711e1766e5c9e1d9acad7e03515968d1e941a3e4c1e1506e41b7d52ffeec0ee5e3f881e8dc6c150a04b22f56f19205bc2c4116454d432f9937a0f56a1ace2d58e6a14a4bf43c6bbf722d9e79dbc315e7ffe672276d1df42b88e9eefe387f8236d20691202f217b0efed377541de08525ad7c92e497bad5492610180ce5b824927a9397e695823deb14e4a804fc0ccb123198e99f29845b098f992d91853d9058da234a634fe80514a6b0ed9c5b0e8e9d4576aa33a9af4aecfeb677656915aedb7a581e0ca7978af5a29292a08407bc35671ab085bcf9ff8a13a6c11d1ce26beba21b874bd16ede1cfc615a465af3eedc93dcd64237861874ad3ec17460acce967c7e274f5189d245af48256e483f063dafdaac8dcc4e13ea80f495d6685f2ff5d2d8114d74b573c32939616f93e430f23cbf6c7e82a0fe9ae52b08da980ebefcdcf318cd41213790f45ba4b87343388560905bfb29126dc909cd152494d7d8611dd5c5c8d915b361c058aefe67f783ed31b1e933ecbb1b62d243fbc88d7db9a86db0f605c71c65b3ceafa3a77e2edd1facbc2776f42b9052f68b4f425553cb777a6da30ca2024e491273983188d469324d12615704e3d7f41325a38c096baf219d511163e4ca988b3ac38b51d9cf34ab375a28c6346db24a671f0807291741beaa03b5397b0e0ab7928a02f380d32aef023617adc84494df05e22048b57908d1adf2c148410880488207813a25f7b1e7901a919191b02efd81c734b366abdbdf4a0daa9986b940669b52c4861994f16c2b0136fa3bd9f2e3a15c91d7ab4069832109592aef432d2eff801489a9c5256ec31746ae815f40873f256c0fe39d6e55f40246e16f7eab753e1efe195e6143748187fc4acb47da69d8ab211418b052802681cefa5cae9e2c975b6ff2d0cf21fc6638cba8280512c12a94dcfa49f42b73bb552a239ea17a5210a0f0d50815a577aa421ef3f923ae2f21e3bb9f5e7a914ccf9169933c84f928ad3d9a3c7a7a26e0ec56813802e99c7d3752b58f62c4630b8f0adbe03f8e5737f847d426360d2749f8d17ed26426b01c63203cc09247ab3651ac4676aa483ac72a9ba35abcc11258e257f3b2cba28bad990e5a4faf416a5847aab3809a2f58ff82c9cd69bca4b879e6455003d6cc33ab74f98f5583421dd1c42bb00a218e7de12ff57a434406bb0e0c130af9d4086cc11ae18aacc17d7e61e0754b5d355af55e5ffdf781680ff00a12b15328689c799b1dce01f3dd94a690dc99c53f668fc5958a53d838006f31bd5bdd9055cef3423a3af4c236f5a4d3e4688a5dc19d9b46fdc105476ffdd2371ad0679cfa9bb730d0a26f5d91d47ab1719f19132b4711760850c0291e459423bba3f23b29be95957303fffd42f6a70074312709acfebb206f4d92430425ac6b27c9b024ce21337b05ff14633b2443e7c5c42bdab79c80983576be87c1023db4c209a06b4d45ef0d2c57c71aa75062e89ab43d8723f441c9bfb52c0c27039186319153c497d66ea360840c7391beff1099c26d10fe30e4c9264e31aca2a09f110975fd5cbe0118bb912920fcf44e33a7a58426736f4a93151b2338b9c5d50a87fae1dc512463848220593209046cd6df99ede87568a15752f179961db3abb26f59514f639ec8c4cd683157b4f4289c61023ace280afa8b4bb4db65c35ccc80507c124024101469a36b71f87d518986930046d09d2eb3ebacc08addc41ce5ad33ee57fd75230f9d3f1abe954a81d432b2530e49df0bb13cede7349b84e5b80644983f40947d95eed2192232be836919b0a63527aec496f91b5ce5eaa0e749392438da86aa4813186ff7298abe66ceede948e7b9733701a833c64e47ae4af6749044bf9009c7a42017c097552211876234dced57ba44a447bc5b275c1ffd12dccdc69b1100b87d093e00e25c3a323d6f07eff450ceb4691364b892a5ae133d1d3896a1963d65e73b4ebb1837ed37806adc251cffd43777fb346cd65bbf41711b07469a113f48feade73f732d113c41cd6a5c052ff1a12662b2b066036aa82ccde56e927e81104d82d68e0eb058235b9e3c2dc071e479acc8077800f94b7fbf0961972e93ba773e7daf1d1672c00597885e7e23fcf514062c7dd86ac541f345b553a2d504256e621eac9d4ce59a49347708f9eefc1d98b4e8e9bc538e1510401d8097e38287dfa7aed03b5a501b338c52e1de84077f33dc79f4346faf1e853b62096160aab3632eb40ec8006ec70ae2ce880ed2030a7f2ba0c54a7d311d12e34679b0ef1121550171719dca7cdb15c6f0e3268386e1e445a1a3ac042bc486f2c578dedf164981bf85ef9e9427863080217180828d8ef6a5c8afc9152c172e442eae7ea7d93192a2532ac846194f08c8083192bf1565cfd6f6eb63962b905265114168660df165b2048d54c92117bf31a9b82205872686e04cb631b8928a6bd2592d3d9a49e4dbfa2c46e8425531579eca0f1392ba3b58d013d19d09cd8edcae1e67730a40c5de15139cd0d22c0737de8df7f442f7ca3456d957f15da6e425425c45ccc8fd9551d17f737f4d6e9fd869a7d93299d8c0cf2d2f9065db0dee54fd6a353372693c2f8a214685d34ee31c1e406b387b8fbc0322979b58447d6f0cd8af9cdad28f114481ce854cb8cdd6d6f40821cb958779ed0f2818e77a2a94069fccad6ba6072c9aecfe731b85a58f656f7bf905a07ff9ab84bb63bb77e1567a7484546ffed0353e57887c125afaae024bb998d2a715fef2734e0e2cbce01baa7a0fe95d8bdca43991df89e30cf5b5d36718bbe818d15cbf649489bb764fc56cd9cf8c17a50e324b7090f9f07700c193c63ba59a2d537d8f1eb115f9d1ed462f4c419efe22b61af0270b7ef51e3bdd4b4bb270e34cd8b29ab8c682b0abce2fe8698a2d22b5cb829624ba0b3a585574666097492ce52983905449b2d2d3e4c413049d99274eb226b60d6591c418772471f2c5eb236cfa2b8eb7ec69cf37ec017726d90f44c96781eb3eafe0fc311b9fceec14eb6437cbe61a07ba25af4e84f286429dcdb87239b495f4b8b1892751788a3c271f0bcdbc3488d899788582f7f1febfc6029f864a3124ea6726e7b7e2e262f0e16ea6122578b1c323aafd2cf569eef4e21b37c6b5bb3f9b2d1d2cc4a6c3e9fbe5bd478fee5155af2d99532a8096073c99743a42ed0833eb25e74fff12b87081c1cdc294163c8397fc526dd825233850d70259c6427f6278189fa55942d7e3e47ec997007b8a3b8727f5cd0cf2017a9205af757d10b8d02e6d7d1530392767ea4208095850f1ac2d82d2f77b77739784b90efd11789c62feac459d46920307f44ed277f7ec20abf7feab7254d8c9518aac344da1c160b9fe490068a9fa4cfcdf12fabcb0ee12928728fba5a551311966377b3137268f3ba152994be2403c3933f2933048338b95f057f3a46751cca6e76331eb666f3b31114e8a76429d9c9f2e04243adf9f08103ba59b890f78629f13f6794265c865b6f7204633ade4f3f6d9a26566df34d521482bccac941cfd6045297529d3432c33db953403f0d7e393b6265f093cd9c98729bac18d443092d9e6c36479066a07231eed0c6a5e5078b6f09462f091e6ed4f20481439248b2030274d2f7242cc2404da35f83be6eb6d778699169d7a2892a5105d31faf1a3da05b4df3ae896f12c9d1a1b94ad15a999758e760a68dc03e915e92516d9c3acc03621af69893a42d3e2ca3fc32eebf2e416624f43b0e34f133d74878f766c306704fc5d00e582f50b43546f2031f4e9959e50f428e8f876ea944b4bd68e619c619cd482181d47146e75821c1e814b143b09c390060be33057612f12532c221d23c61ddcc2f18d49dc4f88f16640b991ff5a3cb2603f9a8f0b12e03ebf7102bf389a72387f12c318fc80e91bf12036f0a343c810673d895e8ed6dd9316605a11b8f281c3f61b2aae97eea16e268516e74d292680c97e2f2ef7892234540852a05f9abbe6623d5fc17c3a07364465241041d77cea9f1bf6298898c877e3a5638107923038f1e2a4dd005210b04a095dcdf6a15df34b3467fd93969885a0e47000f2e0f79dbb38e0907ed60c5b7ee06db84d60ce03e10c4257bb2bf333cbc450f60c4d723cbcc934113aa118722934a8e7c96b6080c814114fa681837ec20912cb9369247dade3cdcb1af280bdc562c35dc69c248fe2984f93f55da19429128031f16cd446c5e94938cf1cd1dc3bcda1a20852ae7e391d253dc9c639c7f13238c8feeac29d79c2c16a89ca768b2150b7ed5c674864cf972aefdab53f11ea05e5581b30be53bcff361f3161781ba6e7d0962212a09d867a9416ab044f5e40c4f5277d566110d2479c3cf9675e5d34239f37e2e0b539dab41247c084040d5ab9149dfbe862eddc3f2a4059e38006ffa8b41e518707bb314033d95cab29ff58399b3852bf2087943e35c83cc39c891ab942dc3928891067a6061a5d21f089b8bf5c2ff031cc144af2afe689628aaddae3913f15492d177c7752ec9e3e1a41d18424679da1f674c974abbab73226a76059a2bbbdada3b3509eafb888b28b68b1dd39b15253f26bcb435eb5ca93cf5c57f2bafa539e05ad93d7df64f2d868497e7f21e5592b820f3149ac7945f9062f696dcf0bdf4c78a5aa3bef5869e13565ffbc25ae9d576ac7f132b52fbce69ce5dc8bc2b74a4f78ad720dc8ce107ec55ceb35f3a1698a978e2bb86ea53a679b88c75a2806b467297526338357ad8271214c362273905ca4c3c4252ebe35b8bce90ea52fc5c630b328aa0a51112e0e41c5c866f8bc0bc7868092936a18a6896f2f9b0c1d3cda518289e3cd1690bd0f67d497102a6d8f4177a84f383ca5d7659d11045b3f37fda5554278971a569651d9aad5a1e84b8af3ecb70bc12d50992586c2ddd0638dbb4b271f4834487ec44eeb69d47bba4776b03cf852f5eedd15f40b8e6b3a527eb8a029d19d2a3fbc4399e6b1398d2261b55a1782fe1aae8f9b1a22620b097adb40b699affe430709ffda0f5bbb34368dfb6925ec92c50e89fa050ea09ca9b4ffe62d7fd24a5fe3d9de044c14665611a13b23f58b652487d359ef58b63177819e825a0c8bfeee14b5b130795b9e43db9b6a4e86a45c5d0c767faced9d64c298d4f7471cce09400931ebb43374816e4ed408aab6d70abe979f518cd3e35e937a9447c00933c355f74852c33414b6774eda0dd547e61944cdf4e9a20e32f778ed89c05648607b2d8380b0dd7594607b2dd7e2964eb787e62c181ab6d70fb497bc6261607b47f39fe237898b3f5076d01bf7e2f38bcd1d8964019050b0ff900fdbde7017a7d719e1523a01f91c0f3c3356718b51657882125355da23aa3dbcf50891fc545174c5240634c63f91909c614b86465b6617c0a5928b766f986dbcc8d4be18f452f14f54c4868ac08f41e91d2d6c22178dbdd86809f445db19f17a97d8c9b3ef62dee7f0bf8166c6b92e4646f32bf29b22ead329500f4b71c65c9bda882a41825b884c4bd9c954652bb1b24694466dc17544844bda6c180c89ba1aaa221f8de13f936e3e1c8cebf4682ec2535da5a5af4a80731a0b8b6564eaf0edcd56cbeceb883f97ca2277e21a3a644574a7b36ae84607ba7ebbb92ade9e0241da8cc2be896e91a3e73c09786be37a0b09424a4710000f824658f111ced3e155743bfdbe157c0df96b45d7eaa27243118f0e2e6c9cc963ba96869fbe00b76a9833748b6d36b5197507bf80c5fee2d53ca4e3b1bab36b3d2ec8ef96070d55b834461166e8cfdfb260fd542e1d7d68314418705e9befca49019ce7bec02342bd2b27da5a3521c9c199724386b99ddda3e6ba0d25686e60b3f0289d536a047046dd595d55c9e59de99a8258ce3beab30f7347a4b9ec467b1e28307570fa2c19e8253c3ee0316d77829a094b016f061b1f6b0f3495019f48120418b2d9a46e5bdab5f17e3be9dad0667b6ab7734b1b35dbd2a68d37db48af9d76db51bf9d7bb201c24759036f1c9022c227c4a4603d0d15ef9523a073e1aafe295f5d2d5d5a7859602d90dc53c3b87abd83952b823c1e7a00fad6dad8601b158c55616514a910803f0b9de2163bd748d0a5fe9218030f77a7ebb8ab501546bd48e0d98678cf044866cde6bb316b26f4ddcc81d3535e95267081446f0dd5ec101771675736c0a1e6be5430b3dcd32126c194d3448105ef1530cdb4a64bdfff73a5fc78b0600cd79014220aad1ee896932b4d245b07ddc33c367ad5489310aa9ff6f66fdcb24531ed6cd0a46a92fbe9a8df8ccbbf893573cefd708ea9f735b9828f0ca3fe780404fda68f8153a8530f81f5616ed8581bd4ae650ecf8bcaba6b6a1188c1700987d879a9bc22ead8f275c8cf22f998d12b524be90374f3dbc292c1d8ccc3c786a4516f1930488140979527e1ea8abb0217c4959fbd0963efdad7c2bd3c0c651154c5c09de547f2a408bd6e8e045b982f01e4ec30701d87841d5cef9bf666e51504c28cd0634f369be54b02f6851c4d63192f9d9794af44eadf3cdb88985a8b1d073f90ad7e0f0cce79195696fd71ccdec5c3328d85600fa79337a1e9162961568b3be00d0b3630fb8e1e9c66f503e2c0f12c4271d258a15c3067e0328b24dfb2802c52b9011a9bec1f90834c016a24f0b65dd5cfbacb284d9015a6f418039e55f348258ac25f138d4300e178702d9aa6639f2339426c75a32b984494adffcc78a141c258026bd18b661236590eb00a1995633db766acebb7aacba7adee03aa787dcd922c3872215a7e582712a45a5ee3a3a4a09fea37a0e710a63fa5a4a025329177ddf719a36c53d6b96424c9ce784d33b0305c2c1d4ed6298a6f450fb0b33511f0a715846860aa89460a434eb97c9e1570f4c5f4472d580813591a3e6e4d1d389c5ab41dda49bd1e7d5a41796c5d01ae3ebe3b1ea8ecf9a061b95920f48007ba435955442669b5324dd6e4aeb0fd566a6f8f99e0cd336854ad54925ee356ee4531e43675bac438254edd9e887e76dd46fe5b0b549fa4ff018f9b0058ea387913c8655e70afe3bcd69626235012815a8866be3ce73a0dc945c3e0d96265e1fe60891551a8708fe89e67ef591fe02813d8aa1cb38650b05d3346fcc26dfc20710020809039cbbc12c739fdcc3148fdf40a89326520c85b849e77fc2c655cffabbfca21bcc4cbe12908bd719bbe215beb58dbf4cc7ff2741be59ab78e06fdf2f250f5ce4803745551860ebc28a2eaa4d3b18cf2d7cef692127d08e74ba87fa6764b8dafeb077a5594ac9c01fdd1fb63c7fee8ed4fcc3cfbb1532143980e8efc029d69be4738ade1f27d05f03f3a58c4dd683c2329aa76dc8eb948d9f852def413353a4dc79ddc7893a5fd6e3112c5b8fea7455d691f1e03985a5206d65e248a7abe304372d2ccbccdb5738b9e89175a69995b6edf09094a5551b907f8a813bd67cb6b1eb17c16324e10fa99f829101a1671d32c4e74519438f2e84985c4a1387f7df7bdd65a191156b0d807aca3d07ae9e58230402741230df904ee51383f5541010912df741815fd94850e6a6c6884bc283412609be42641d292651038bf3c1a1d1f7558e31bb43bbbc065e29efefa29fa40f73b8b2c983b07d84eab4d1174f9458c7b407d7dae5e35ff05e3874c3737aaf3c56d6f961e4d783b5e84e76b1fbce3a5593b6668e0a50df98092bd0f8bbf354d0316fe832c402cd7ad51ede1754610c08db67212861f68262e154723cdbcc5ad0c25745e8a387cb51f116f453f1e3dcbf4e3e84ba847485f234fd935ff5810e3d63b631776b87f172b4508c3d73852176e6007b57b450e24749f9e1ec39a5ce9245eb2ab2dc5c36352a954108f8553f0e557ec99f85b70b91437d97c3559ea98746b4509fc8a368e72912ff5bf275a792cfb805a143996a64d79dd3e0b813700a19b29347ccf051e9df3f4e5af024cf1d939d430ffae2bcf0fa899cfd6c4a3fcab7eccccb8bf9a2a6b4885c9cef44257c8a351347601bc933f7c12b09e395b934e779548fb422cd8c320cb76e2a356308b583b022cdd457011dc40b0a07190a83787c0d442246dec185a4033e1c4cc312f0ebfea2fe021311847784a7d4a806ec1c527608c605f8c11582a63a487292b2f0ec647cf30c873c93b6318213fe8f81bf46d96af3aa0f1b02a740ffb950ee81b56fdc13a70334cf0421e44f0ff49c1b09abc670cdc1116e215e3a89226ecb702b756d6984d860b61499aca62177371e4b0a23c66b0224e326b987deeb2db255dbb1bfe2aefcde653e1bd5264b1d9a1ba512d4e2fbb51dfde8d3f30d96a0b583f96d75a1e2291d05dc8ad4bdce0fa7cb48cc6729b9f29979d693a24ff444c5e3e656d1db3e6035a340a2180dfe1053140e82fb0b3205917bb0b64079678d16ab1f9fcd542e0f2a275a46c363aba7d89d0882d061f32cb051602945ac80c33f1bd71b30628d7629102a68a9d540aa5213a85088af5cadcadf211721738460a123fac603ba01290e011228f0cff1104a03b7ecc4d4cb4b420c6dadab808dc9e7490123255e84ab620d689fba95347719a05cc5b1cfb2ccd33e6d831db0252d820f95dc1bd5a9e59032e79b00e59d7fa084065e1d87c8830f0cf33e8c5ab9d6073d9eb614888c7c5b93f745dbce9b49313ee181f3a54da6083a6af18c1a6e1131d92319ab70fe56192aef631c6c534fa48be91d66c9934ccb988e6931ea16b491133a6b07dfd393fa025f70041b8caa5bd276dda3c453f615e400cb3d4518dd79c38a4c162c8f2628b9f042bc040dd44b99ee1a52f9ce2116d7c84e3780bc5af73b077d34f681cd6a9827cb2fbd5e22dd095e01153fe7851ea17b3db6b93101574b7c86ebda8616bc7c0281ab15b269e1d419bf7add0f6d06a2d0e5b5c62027f7260b3fc009c135590093223f545f9531453b830a8d7140dc80f45107101e6e053132a5075ac3ce555f5a5658a12083c0fa9c3e6703ae0a892b1b8745a564af7bf248958fbeb3f1de221b034c4d5fe501027cb36c5101fee27cbc91c0263e4ab5b4fc93787aa5c458ea09fd8f68df071668919756e984c738f729173c5886d4fe56b42b0995891d4e00bf8a661698b9e761ee0a8205c4df947ea1cad824e55380078eee87febf65b08ece56bd0818f6a8cbafc11a0d4f17c759fb3078f6fb7148e4b0dc256f94e1e476989b61334b75dbf9a109da4c1d07da3dc4bc960e9413c512a53969f2f4536726cacfb2abb694af43e3f5e9c36ea8488c7b950aa998dc60b248821ab921da98adfbfbbf9aa16ad6156f904c2f6d023d236590c9f8c3e35df07b5a29bbc3c1c5d539ef5d114fc605a8b27e98368149b828b476113b2aa0df24cf6886fb2641afec980542076e853cb09a2e8f3c241d70239c279ac651b5cfbed127459978c1b19f31b728e97aa0ac5d6481f89162fac3f56e8ac1b23fbfdff49814af6c5738d7d38d158e8a45ffc30f0b160c6e032851d126b11b03c6390aa451627be43230b2e2bd7c3f5a7f7ece5eb46a49841b905014648c4d5163ec80e3780b45466ed3b6a4633d435f5a7d5676f8608326ea91ca4117b058715121b2fa42ed509f9c348cc39fb8720924073266c0a2669cfda8a1dee3601e34e6ce688b2eddd7aea6979392ceb8e9ca4c76fcacd171409e7aa46d77850c009f81426b92c4ac67d60b9e94666bf1923b54983913a7962241063dcb22b2a64c32b10459ae9fbf1eeca9706446719931c22a31ad6d1fc29ce9ace793c1f2a1f26a48533a95edd974918b03b6add34fe4cdf3d7a127b0a5e6d0c668db20a99ce7762171125c9565007008bdd111d7434335aac4de3b37fe228cad0353fb8731119d808c1cd7ed0493e5d4f7df69ec4ed885338d377a935805d5a031878f24ab51b601f0f062cdc4372d208d97b81dd6efd1942f575c08136ff16887721f2eabbbfa51dcc5f84a20d7fa12285122b595b7022d7160b5130436273fbdfbdd345543eda413b35dfe132f9859c57a3631c75160ec0e95e962e7c63779a941b3d614c0c2305ed68cce354adc60bc6fffd0b06433eb503dbd13bd0b10532b0581eb59d78c0255716075175741d6902a944b5c4db9fc959828acc6ea4f5f4e14f4115c1767723e62a3e3e3d13e9917879aa8a1bfb99c6ffa15910d6a4829cc379c623d89d28a0c226abdbd5094d8c6def76ecaf92898c8e233c1c23cface19727e6fded45be7f624084080cc3ea0ba2a2e08670348f27662a2622e292dec887f5c3bece05ff3d4ec452dd9b44b861e2eb667293cfc4b733b7f8fcdc99dceb139fe56e967b7c40a63416f3633e2cb31cdbf8980f4eb74a9d04b0dcf0e7f6ae2f3e46c93a2eeaffbf9f002dd0b99458aa3f820a16adb5e183f9e41fd48b9d55360e7eda5691684c634f85cad65f42721f954cf24540e699e0d6c324aa6c1f9c5f172f41c75499ff927bed3b04a2a64978f4cd2c01ceaf1fbce867fcf86896fe5ff13b75f89135973de3fd7b3cc2d75da8d88b1174b692662c6f0bd702262dfe1c5c27d68e13cfbc8f79c2ac7f8451d047da6d60c0389f73675aebc77701163f458b5136262e6882f2ae16883efe0c762d2854412e0efe2b841e978cc0b6f5c8421a312b8ff8562abe2c4c77567d574fc43ffd289533cfca723a3ea9248c7fdf00a9b005f34ec807d0d024b69af58ec7d55587eabbfc144d420f164c34a54e09df6537111f2285c68210d850513030d5b22bc4ac78df06915946d3a497b2466f70711050fbc8415d343fd39eb66f6b27c65eadeef9e1a76047d7985ff8c0d60df6c9435d6f7a0b0c0534caee1baf47be214d4deade18cac0db3439bee9a66884276087572373cfec7b8a480b98d30dc18d8c882cbd44e77fd54bfcb005296ee33a3836791183297add71d7305ec6408f4ba6f4026f08b7c0d0eff7950695fa25677721e85db1959d26f1648e87d2600d3a9b4602512249fd45f2ad5b89120244cd4f202a21f47164ac47ec17b05fd876643dae535c05caa1c0a248e7d5b104e5d6475b5284b8a94a99de6e33952f99087aac75c609ad0848948aeee9a51d14f93e6f3985fbd8e2c45c48b052a7cf11fc2162772fe556a1fe2c25e11519337cf20af8b2852abd3a778e167d8c50842c8f0d007325a0504deb2e7dcab8cadabf2102858a5c6fd1f436e45bd8e274689717797b4da9423d086086c17584764602ae08b1c7331fb6039e77b211136c9e4b741d5cc9de19b63349e973571af9d95b216568538f3e402b3dfaa850958842f3f12cf540e2598c8229269ac7df19fa493c1eae10c183e6be01345e6f20de6e8a1105aa33a2d4bc9fe8a09a8ac53b81a7d24a8aca66bf719ce82d8f36f32368853dd3180ffbf46e92f2816cc7ad03eefd5d19e095f53b1a50ac64d1d2e0146cc90d5a4e9773d2505ab4fc64f1b51ce97df6d1209347a0d5ac562008823b54cd279851ea9254a8b402061142ddd38153748cb62414de7066e80cd081ade463b63c2afe9baa97f20360967e21f7b4b62cafc920c880265269db654dc70c561dac2a6699e338580937de0062c750e3aebfae6b520c7f95697d9c0079f91fb993831801370b307849f236dc11ee28352853d1077a14d29895c04352cf431b34004a852e05eee4cbff5ebc970ee85c387969a05cfb0dfce42977cdee44d34a3d2620fea280116fd7b223812994fd955bd5286ed579d4dd22c7b07f5ff457f093f2cc74b8c903401e05d097c4c4473b2f5dbaa88bb0907aa3487a9e298ac72f2457051387542dd9b6c4ace4983a3675125ccda14d938281c8ea9f3f6e784d2fccda66362afa1a605454853e25d0ad2c94596802fa16e6047ec7077a47c9d96928ee1df5da1f1e9d20c919a94287d187eee3d933b574687e4eaf1f0326d4e40895228bec9fbf3e0466961b9033ad6e5de01a2afde9f0655911cdee78e3ad86ebd011a2915ed980769bc93e9a5d7f2ec34479b85f7b8cd0c70f5269d431fd90499879aef58662d9208496c16aa2c28339c32f2e5e6ad57f3aa8c8920715ee9328b5144251269894354d3f331992581b3f04ad4213b9c8f2429e70ceb4c131752118bf060f1518407930cc428046826af2c8bd4622aed42aa06ec24a48fd20c08210592c2523f42bb257b126afcc85708f6300a790b983d19336d6a3d99d272a8c6d051deacda00f253f874ee272e22e9c52cf944e88e89917748fbb8cf23a68a50145026f8547df3245382a0148d621ca509277a587e8c977b92352590b3184ca8481d8af0c9633a7c27c9a7b05cf17a0c263f7ef98af32febac6734782eb8879f385fb756654eef8970ddea732f2dccb7e77ab1ca9a113145a49fd39d3c07f3287594a6d50b6c3ace53c06ac9d8dfa35609d78469999e5e995333a338dba55c69a48feadcf2d48c3e72b3677a1a357497a8c35c19991f16ea6405757a96ecde517403de7df23d015a59b468045c2c34eb26ba054e5fadc9c86497e42c6c24a94e83e4af8420e09333704905707b71d71b7e0f3afe016c0f39c6e9b611396c7d7a458c5ac799a3ab8f0d78f131e7fdabdecfafcda7b12120e4bd41525ee0a335a0124fb1c80d5d0ea8a4f2195bdee285becd0c826570ccb0d848e81654fa81f79ae734a391130d3bbeea3d96c0382843300c8f36bc79d3555e55b26667db39ff20eb40d6db43fd1d75b10b6b7f59285f3294a499f300042c87e634b85eb9744bcf55303e508073b6a1b024972d9a62938bcb1772ac84a400f1f3d9e7ef6470decf68b4921171b14430d14894371d33fa1b598ad8c534d31e1040262849ac69fc85967403f6bfdc58359089ce62ce5b73fcd4e41eb188c77e6e83e7e223db2989a7e187e158faaba3fc8ac89bf9f6554781ba11af2caafc584f2ac870237155d75687499a90241f4a10f1593aec0fa57972ce17a43e214f3d527470d419a423a5da8fd9f12482d932423c3ada70841962549653f9cd8ff11147fee39b1cb2cb51f4360545279b99b0b5d74a774f0d280ba50c0350359ab9531315031ba98ebace590040d4b88b171f2c695db9ad217c2aa7384deb02ca3eca1233fc4346e6389a7e3c8deb2ecd3881ad150d3ddc520c9eff74ba2ce160fd7b87e139391b0bbd3bef295d29aa8ff5ce62c74f4436ad1018535095df0b9e7326e060fbe9a51da6d4cf4cdc09589c418910e218a5cfdc16322f41f93c0305d71e3e12b4d2918a9a4d2809481b39edee3e0b1016609aad1e9a7a40a466d260a490cb0efc4b9560d5104269860a4b72f8e9a8713fc0b939376db79f4b76b9960b972a8d0adf774c480474ab1dddd909847ace84df81ac447bb127197e4b284263ee4e40d76215d0190796f6e3b7261681fa0bded6a91c0d35c68abb65e6d127dd634af1ed60d4e3d84d611dc9db2479a083aae1c6e5ddbe9b886269d9d025e5445f44c41cd8b6096c12e14aa0a38e8d9b67852b05a4b57631ad439e3c4a9689cf57f58a7e4684a75b3d2042c99d85dbee3ff322535ebd06ada0786007f79807ed7ea9d4e4da213e5e8571b4496a96f1f750246ee24ed428219c5e5f80aea95cfe9fc415f4a29b3644ceb54f7f328998064d30874d8697a55370c150586e20e21f86e004213329ecc9b81d06714703a1513dc5ccf2468d59f1ad6a392a62f57b468baad136bfba9a049c6b729ff6a7d04c36e04af560f9262064ea2488d89a8cf7926f62154af400e634edc015394ee7c4b1c99ef4f256e565afa97b678be8568780b78dd32bfac76a7a435d5334edda7102687e504f5dc5870a83c1b24ae837e29077322fa021094f5670b9b8725f648c308672a795a50cfc0182cb54105836d51e86fdd0f883a9312019b1a66a3708a3e9216cfc4e81fbbe465274ca5fb044bc49a4bb264b5f320fcfe63e5fa0962475b2f40423ab057ccf3cc44b07850b8a2f9245471cfcf0f78a6d97a198153f40d11295ef2637669a1974d95f1b6dfc5d488acef79f25e0b079356bdb0569d9df9139af5fd30749bf975092849699c4829c255d31b629604df9293004e8534f7c46297059a89a6ca61dca7c14d0c7d3a9341c1e66cea5f1129d6e69a05a400963cd554ee43534e2b1473003e82c09237e651c024381ead16cc15d63fca4e6fcc71795f702e4a3739df985fbeb92d009b8ad7c65d0bbd4627f58fd7a946f1fe6ff02681897e951d904651aa2c6cc6df814549179cb0823cc0344c7de49b7ad2c0db0ce8ec1d978934b0bea4c886c27e54898e02da7069ca9678b0ccab93c740e70fef8f01522ee00a26c7b57ba7da4c50f5992b62b401c57e8673861e507acb1b60e6ca9356a068a85338f12c3be94faa58c9a4e787456423c77674d9bf14822725caca176fb957f2779d88b1cf21d1e01d58f0364274d5efe6625b3814139c3e702730eda762af6bdf1995bb4bd98b4aa874385ada30331cc7976bf3a50ca627a13d95be5bb8f2b53366f829348579948f9de1307d610d9e997260a7703f7d06b052156fdba1cf052be7b23223415f15b78da08f602b4e62b45532a4a1ab12d3d6c067b41521f1daa264b60e7c6fb390a4a1bbece5fe8830fcc89971be43c7f794f73de771b983c05e2eb7e0c9fe4970a53b343b379179e4c1a41ac6cb4d01025df8fa1fc1220e576686af1b88e7876cdf072229ec6da36ead8f461675a05a55840ab2966f0897f9d791131b25a5b0a8adf5e4349515204a88118f00aacf1f3b125b8e4b26d5cbda337f9af0186bb5a08f27eb3d8c70af6fbb81273b8e0d9b261d314f6bf1eb3a6ae1174c8ca1d2b8197dc17002c8449618b105d60405b694cb4ba7886bed487b8672761c9f0f792e98e479dbe4dd3df6ffac727273d1fde13e8373dd7d0ac919fa0f61981095df3f2bec7220aa2f8e22dff2e50255b2485112c693672190ded8dcb46e92f271acc1e736d3d63191003aece2569c9d188b63ef00e5c99ebdc831ca917f02d4b655f71ba5b285efe5b8f2f6644038de8183db707269aeb4a9392c498710c080404c8e99f7350c12011d457a1d13b7db7186ba7a6219b766b050b4b853798ef9bc728e9048f3c3d2be80b4714200af343c056c38ee00195d806ab029240f0b1bb697ff015917395262475a8ee43c7f2bc64e69c0479c72aa798ee70172697b61f27aca9b18e149fb5c5afc95177f8106c1fa10bdf60fb5e651def1b0ce64fa0fe5ef03947e9b1372266d2164240e62e7b0b3bb1a0132af75313f75eb8909ce8333355e542dc627693b28a060e7cf657c3cb43fc9d78d2a8ea5ac89d515a08e13cb05e1dee0230f536d985ccaefd6c3c6e50c1522ff575046e310f0629faf94db39bd2e540855be8a73ee44b955f2b757348e52993402caea0ac9a82b68a5489dbc5c54a6a251e13fb4dc65eb7b786be06b40149b38160b0fe20172e9475a55d67115664a9ac0732a0fd9914b15b1f507634a658bdec8cfbc5727492ee27be613baaf50a48acbac2fb197cfc7a24e61c720d08b0bea10896d15235c28b7772f31de60db83fc1d7203b81eb6007d23ad5ab8fded815ccd915f0b1f2e711814f588ef22dc46013ece85e383cfb83b12fa0ab8e306e39dc2686c055b396e255db22300a87607296e51648221093917c4644ac628e4246120e6e0293fa78ed6c962e27facbe307138381a272fba798792492ead296e2221df76fd276a91c86a69ac9cfc6c70da99ab5886ba7dc4ccb1a884cdabbd60d360eadf164e7cd82db1f4dde7d041d2c8df0526b728275128a0a4d583b3c1cc1ab7f1cbf24b93094e7acd846a25516d2f8c5fa7a5cffcba80f4bea867d135dfc7838f116f3d3e9e7d6fc48525ef0d6fc23a264bfe4cf9a0afdd31b9357e62ed6c2759a345c58de7b53856c8a8357a34af490f97c3add3f52365731d45b4f1fa629902804f7b80ed27813b303d3a013ae2f7e268dfc8dbfdf06fdd6aaf41c992d70a0e6486b72937e4160041f013a2eaa589ae333eac2fab08fd57f54e8f90241db17e960ceef047f4742278397dc9f666230cab0b6f1b5569bb2690dcc5cd02e7edb95269690dc924e96a3d23e5d79df19e1a6275c6721881356b050ed8b16df9bf57b51b3f5d87eb5d05312900839ba080e6225bb781f9d61ccc860b701b1f17b36548074b7c6683f30b9697033f06011b10654caedf6d58a0f177b05fa42dd64fcad4482d2dbfcb959102efb025750fb5211c596c72d7872482322ec3c4c4af4013276a073ab0cc92c1b35c172cf1dc5ca15c2c84bd2bba33d3d7559a3a10e90e5a7c112941f02febeac7141eb5274c0f1697180ea4b5ef34d7054e119ac954631983269428e312fa1f7b47eb7dc5348e310e4f4c3a1aae9009ca4bc69264ceee945f91c37fa9282f721e60aeca9d7b66ad89c21ece2a99824b438e03b1d948d505a2915f64a1af04aa9995d9843530fa3f21080ad51191ea479846a4b13ac284030300ee86061f222ee7dad9855433259cefb562074cc6d971863b46d01efbf1c5dbee7c5dd22196bec5c9b6e9443570bc83a8fe7b85a2042fd21c44f5ff28d94418623564b66cf3d57b00ecb04b23128b2806471c3a4c986c66c9a3c83891871a47184643b1f9b7fd7b941a9ae8b3a0f50256d241f9d3098abbe52d6ee6d6610e982892bbb0e18350398086b705f22aa98415242f7f8ee63e99f2796878d61c8f11602f8da607b30cda4d6d6605cb71af115d042ea3ce58f2800975832cf402873519962cf3de6ea6f91419ef03587f01fef2936e2e1c71c17cc2a3c92cdf9139c2254b60ed1cf38c00a92a894424928191c05ceffa3c7ddf66410504a348e2ae6237e7d8d831869672449ce14991c2aeda8e49be75db59b7c89f468a0cdfd13b85109f89cab73a11bb6f71f5baa35c76714b48924951e9b9b71de0437ee19742333fdc0ed1a4d3db64de88325cad8d2c1a992ddacc386ab95ec7342e7d14292cab8eac5648ac0395dc0b067ebd0893c9f400058aab52dd5f655882bdacc4adb4f8d54644a47d919a5551f9843c6fcd27b2d0f73655b33395f3d2ada3d9a3e4bf0d74e782b5621016d24b7dd45591dec4aef38795154ca9dfce15e2603e2376340d3b77fad375929a73c316713aa6a8c6b78808a3f9e4f74e1edd0fba8b1a1c4efad9eae22e1b7435d2099a507e70a174091833863660bd8060fef99d70d3f87dbce2f6d581c7d52af044b233ec2119996684a6701a73bde49f558d988b76e1250e3b8c41a403bc978766fdc97ec308195c09a8e06cd7f24e5a2d6ecf0089bc8bc45277fd3a2832aa7e25f276ecfdb0d76c36f84d165400acb53bd582ddd36837b6900bcdaba8d1dbafbe1d9ae84af7bad6eeeb6b97d8e18414ed9f7204f7e80c7d78851362c7ac8c7d71e629ffd822f981c8103c18ef58606316998ae02e77f33019905b15c4afe481029ad0e95d5e40125a4d07931db9f2a1e2845b59e9d3578305ca59580d49e967c03a66d9f153d1018e182f7d3652cf65aa93e55ee9e6161cfa61714e90b940eb678ed831ddb35b0a72e0204d1dea8426f86a2f313db1787c6b216defbda594524a99a40c730595059b05bfbd164a996555a56dcbeb3fb5fca6b5b52d9ccac3713f4ca9debb1a2aaf52a301f337dbb180434ea9d102ea5b581ef55b8bc7d2e28532b664f95ee2b81faa7ee5a3d35ff170e67b40078df9cdf9ede85e45f59acacb9f9281fa621cf4efb84fc7058df99be682037f44e667c3fc1d4fff7edefc5e9838720a8d22ec37c5f6b7c064f9fca0845166813943e77cba63eed03b660581ebb820701df2a294f8bc5e40385f7c6fce19679cf3e39c73ce39e78bf30be78bf3cd38e357c63ef9de9c73ce39e79c73ce39e78cf3bd37e79c5f39e79b73ce39e7ec7371c69eef9b83e49b7d5ef8e69bf3cdd89bfb5e1faae17bc227fcb92bdf1ce4de7befbdf8668cefcd39dfec7371ce1f13be39fbe4fcf762fcf773bef96657f6c937e77c73c619e39c71c6f9de1b24e77c6fce39e78b73be39679c6fce38e79b73c6f9de7cf3cd37e39c6fce19e79b73ce193fb145178cb55eadfea59c73cef9337c4a98f9df8039633f4a33c6f8a3ad0fdcf46b4be6541ae38bac124699fcdcf77bdfef3be7838dd40992bba767c6387b668fdc2f609a901e7aa4cd7d4faa62fbbf4042e7884386fc5a77839f7ea6b1bb819fe6f021ce443c4413b1fd6364f197b6c7f6c0b083b386a4413fddec01a2eb4f9857985250feebcd40c3dddebded0b29f62eccfdccdd9bffb79bf1a642be7893437448837a6054287737f79d0a5158acb971efec993372cea079b7136c46b8c98ae66356e0364349b6f1a77b8b72536a3b1b32b6e78bb53f699af6aefdd5f06b7ffa397f68a71e638cdf4fefa7d7528f5f4db60c13c2298b45ddab52a8d099666c329945a1334d21a03b79b6e564e0feefebf0d7d5f02973190c8000802e562d8f3d7045c59d89d29cbefbd4ab3ece19121ef51a091f38c23797708c281ac6f73d75194dbbf7b18b2fa445ab4f84296bf9b82fd45ae50b57a94f7f1fcbf7ad7c610c932af59d3301a0b391fa72c87dfaafbb397dfe42d4fb47171762700d21c9a697912bedc08e2613fdc1ef753570ec6ef49bc0654feef903ae5640a7253ae4dec2f6bbcb7b7cb67de7f1bebb218093d7e4e76b265a68e8080d3284de193dae075740b4cf2de33ff7ea351ec2c68f7d66caf0cb68e34c12c63eee382fee16279ab019345fd48790fa9c346fcaf6bfb3a13993d42ace145d5c88c135146b3cd6f8cb28d6f80eec28d630c59a1f12ba1a3e427773fa6d0033e9040e266b40eed92de118f347cda995d0d97077ddc0feb4410bf7adb93d0138ec39530ebcb526b0fbf04f1fae32f626903873261966b3c9349a47e6508bfd5984cacf48950fa791ebf99e4220ea0b2750f785f3c7e5e4993bdb3efec299b32dc6a80ff1a33ed4be1093d0d9e8defff4fe05e0b00fb9cb87dc25930a908f6cfb3372a79d50281ba70370d79b7b0613131313d39c5ffc12ba1bed9d84ee86f651d7ece99eeee72ea62f052efa0a8ca1093117dff37d2ca54ccab29673ce52cbafe58b5d46f3627437dadf2f876441fb5c1aaf34e8a206e062d3b66f80ce868c4d8383f667a0d268dbe83c06e0344fbee41019e425817e4563f992af978cbd90480edab7bfdd57510f1313d3fc50fb39975e74364e1ffef0d4bcb97740aa69122c7aa2154c07512667d977bd5afd83b47bfcf943da84faf207a3b371bf1c72771ffe17dd0d7eedcbe19fa7ece4e9f023c258e77196fd29c353164ed94ac770b9cb887e1832fea84bc33d3a9cb2982d1f4f6aa9d1b6d65a4b7fb6c558ebd5eac398ed42ac710d4924d9f4722357da81cda3e8126b5c84eee6f41335bf93d27e4b88fa7bfa2d054ee33863ceb82b82df0c142c72b934207428a72cf5dda37e934ab7a5bbc1efcf227399fbf665925462f157d1546badfda63cd722bed8ef3c174284b17ff2dce52e97bb4edf7de8dfa93a1bfee59059fbf859032dccad7dce145fecb730b77ff2155f6c2d5201547ad90a49c7029ee6a343cb73aab109e7b8dd89b22b13149ce4ba2eed5a8f521f56a45d3fd6ea8a1d9119cd700dabab5593c3fe116dea8e84b90eebb47598d675164d567dfb9bca3ba53cd5670f85bdfc9b479ff3f04fcf7ab1299bc5422ab46393553f169b335336a32deada9136f447c2d49fd58fad39436574f6236d684cc2d497b57675c57e76fd17e64cad2d0993cd399b452e62ab6fe50bf1ea55544663d2661e9130f565b15d5d29866b9992928bb75c32b60fd1c4a040813056f1504fbdedab6bcefaf5e784b9e60b879cb2f21ba5299c4a619bc2a98f099083f475a552ace95ed7af23f0a45d798833b2a54394b1d2c693244c7dd963c44564572076cd8920fd95277522484f9e0522481fe5512082f4559e0b11a49f3d054490c6a0e7cc0268228b7e938eb2233daae0ca873d9708d24f796004e96f1e8e207d7bc28a8bac790405d7bf765d815906d8a796a63e949b7aa99ca92a45318c940723b5a55448c5c48d42ac497dfd14a28a2e7144e4041697d0a05d3f4cc0aea954ea552dc47d7f93c9245985e7c82d6416567c286531d6e8d4abbe760ca836528ffa505f4a555df7c321b7aa1e71b07e78a5b441ac81e17eea43a97ad45f4fdfa45e957a95ea7a0e437929cf9118d22f8ed0a194c55d5f26c57ac465220e19768c2fdedd48d5a74a0d2d51045110302041aafb3864d8fa43144aa57a89fa23a4fd3b2e3922daa929b01db78e29ae2da26cd5dfd98fea318c1baa4f7dea55b2aba1fd9651ded5d06afd17da6f1b27bb1654366e7723f52e1bf5c1b0e15bf5392aa063c7adfac22d73a8ea9aa1baecd46f1ad7a51ef5d59fd4575da7253af5587b91729d27370d74df4721d6f8ae4842b6bb917a9a7afaf23ed5808eed30d5d5b1c3fa5e443f3a69644b054f4a617b6b0607b5d6df4ea9c80418f3607539ab46870df94ca4515fcab0567da1099d16848e3b7498c36a5dc253bfd6241753a4a0d8b53ad9b5d6ea6212da55ce8076ad3fa99a8af145cae48e3559df7f59facad93b65afcb1e07dbb2a7652f670f67ef66cf66afe69ce5de56b8e832d104d94bb172223611efbd08889146a56361b2702c2c5b14da35e9a1ac8e741398114c051a29c3587b9c755659546d2a1ae61dd217fd289083f5e9eb05121dba52486554166bf4d777255c7d47bbe8a6fab2765f39ea031eec3a933073c66193551f63985ec1a4146d704726a4f4ec2d7a8c929e84e8591f833a664553445fb9a69e3efd90be28d08fc8aaef8383e822434a4ba0e5b13b36a7298a0c7c9a98556743c6ee5ee6441f7250e5551e26bbbe843571188e022e7dd20acaaef568d75a0482ffab95aebf694268771850ad2febd31705a241b126d79754e420cebc3059378852266d6a4bc2d48f4c536641d8f50a95eabbcf80fbaaab42fda642a9acaca8502ad4cf701834e5c1a09fa2aa9d5d7f862a63abb2cb1d714684af2f5b3227d6d0af2e23b47cc812763b94adca135feaab3c11beba4364d56f6199edda49a5b0ba2493cb9e5f28a784aacfbfa196f469055aeeb0baeaab66d0aff2dbf4563e7bf547e5ad3cf57275ad7cd5e56075d92a1e0e19b6ea4f4b347d5bbfba2a4fac89bbbeca0b5372cb1cfaa91bf453f453a98f5dca83e1f434c80de386cbeebe7bed5f98b5256d6484a15f69a595d6d6ae1ff18bd0b530f78a8b99186bbd5acd7f13b6fdd0841d554fbdd4abbc903e4edaa92f7489c1456feda1b6a43ff1053f6a6befc474dadaeb8ebaad3d0ec66ded6d7367dbdad394b4adbd6c94b7f6b0bff0d6de6dba5b7b16c96eedd5a1bab547a54b7b3386f8827f86bb105fb0f67c4797f8829f4aedc58dfa28c7e94c4311b07d4567d2a65b811aa3aaec58c01fdd6070d6bef494a1063eae18a54bfea05516c1bbba1ca4aff168f98531f6e7877136f3375b71cea2bf4d3953311cacd2b580d05f74081db02d3f6e18b60755ff38ee871b507d38e2944d84fbd053a9542a95ead362105aee18376fdba4b6c90fc7fd306b1f8e1b570a810817c567b8ef87c9777264d39639f3382867a072165fe4d4e9d1993373f6d3c59af8f2a94facb92f3ffa6fb7fb2ddfbbddf741ceee5317a53b73c841f9852e59cec073c8b7973a273c4c4ea3701ed9d2c86b38939c39788283fac3a93375e6ce74491bff9130d2934c0eca4779b2c941995f7b0d7030fec95b8083d1841d4e13767e9df3cb99cba05ebe8c126b4e2fb57cbcf2857af52a13e642daa87c086e18eceeb557894e76f72ebc25bbfb550276f722a4b0bb6f79d9dd733276f7f25522c895085e74568bd7b1ba4779af03b6bbdfbc9e64c86d2979e2479aa8428c2166ce4c20b2a6cc59f9b3c4e8aa2ff58128ffe8c5f8c245b9a3bf78fa42d97259c5d82e577c73ad63c0e69b775d44a1bccb9d04e20bb54fff048f7330cc9bbe9cd235606fee75cf71ee75dfcdc51202bbfbb087c3bd0774d0e036cedb413f2fecc003b8cfbdbbc13fc3bdf99a17ce275b7e9eedd041c372ef3f3d971d292c83405e2be30922431021320491218810e9218288214b1e953a7964d7f8f1fb8d7e60bfe0608db5002ccf05cb4acb4977a9adc5937b4671a2232e83e34e9932658a17c59a3879b68a8a7f3855f555a6152a2a2a338bb985a63b280e94276ff52dcb6f590b6d3994d7e2cdbd65ee729b57633ebe187b72ceb9d2a27d879f8391e258bcb8e5c07b8584953b5b8ec20e274d0972c9c17945f7f5dd8a68d33d4bac59f98a2b6ee99f5f6b8415aec63dcdb7259ca0ec4a345bb8242422abbecca588b913de843311c3899ca812b5b0b060acb5fbdc9c2751dedc27ec517e5c6922cd7dfa9e07a7925ee9795dc6b6966b5dcc964fcaba2f944af28a5dffde89e7e340edf99d5ee523aa55365bb612b89fd395744ccb84ae74a7d2449a4875824c1e6915d34c886293c5f7fc5c7433484b1dd454568a35f8ab8b1d7ad0ca17b4eb7b6b666ff942efeaa330bef6b3cf72ea6ef0cfbf77d25ce92d6fc9184b2c168bbd38810e2792ca5795bf9f8a8a8aca44fa181ce7496cb4ebd719b4ebd726304c34838830f55b3c5f2202b4ebb3d06411593586ae34779838ace60edf42c662d589280a5349c6f33b2b9ae3444d53c967b146e29033dddde09f2e63bf4e547703fffceb4a1363ad57abff99b37ddc26f7c9a38083f55b3c8af2627cb94064d597ae1030110216736f30e8be55763d4f22be201161eaaf784e145fea11675509c5d1aac9ae46bbca296415b2e926fffc6d7e2aa53dead4ddaca4f267195b798d92421e39d1f7c2411ab6222a6291b198f69b6f3debc7cc195722b2eaaf56582fc14e3414bbbe4f11f32419ecfadeb1a07f3eee545ef5dbf4f26f92ebba96adebba4f7d6ee17077a37db7c1b8d1c170fa9cc8c1da75aff26284394d4e7326fc48e7445ed4f2794c46c217ca185d0b307250eeedd3c781daf4d37fbb1bfc5c77937afae590bbe50be79f7ec684d1d5c831ba16f207c3fdfc309cbea9e4607d1aa4dc2cde8a8a2789e69f7ed3a970623197bc50f29ca40f0d7afbb0eb4fa539430167d5e7e62cca546a6a519dbdbd4f19bf9e5e70b0fee6d5681f0bf9a3416efcd4aa2403826c754e2421aa559e2d6a3eda35030db8bee89d77ce39e99c93c3b6d59a18cf5a43ac09d1b686589343db96b4f1afb68975823fb42f97891b689fba1bfbf43b7ac33eb5387106df6075a8731251dcc3535d45f4fc6b5b2eb3e432b3b65ef4e0dfaaff74de336d6b06d55964bfe8eb27d00c8a35b655ab75ed8abf9066ffebee77b39a96b1bd2ed40f223d43880c9132fad30fcb78fd50ce7b3f5aa57d0d21e9a758398931345b8504c49998c9aa6f63eecd5b9463c1ae55c68e2374315be5a6bc36cc8e4c4889ed2d73396f4b32c9c11726ab49a471b95cae25a90399545dd575eda4af6ba74cf21db92465b2494a2d082d772825acc2fc8589347195c5544daa4ba83524a3f83d0af368110a046a42ba0aab355689c419da9aac56f521ced05887fcb05d9ccc86f52af5c12e05f299e9e243da64f5a2479e76fa69dd0f1933ba82088673021ba2a40026c49213642184190c7a0819a201c183ce122c40903ffc084235c25a6bad4de23b244c90c490202191bd8f18fc307bc4e0a804af5d7befbdf7d6c0355911eb955ed17a6ad7de7bef5562a72ac15395f8a94a00fdbdf75e7befbdf7f618ca9928fbc05a1b440ce7f20fbecb3f35a287cc51e16ed8412787a0d8141f4420f90b80ccf44aaf684d7de800c4d20d5186545104c7498c8db28629e391fdc8806442b2a1182903269315b18e0380f0f08468091b84184113244bf8701da881892690ec7074448ebbe009104f88a09b114076aa029e08ca9b0dda080a1e4b6f48d21a02a8841e84b0e10a21914613b31e15582ad281942da0ec80871644e16406d856ab15d1e3acf8ca348a085a596bad5dca4abc5c3f7d68d2eebdf70728fbea22524870838f20a4211029813761c40f3f62131112a51b845c331f26e00e25f0f18410a913e3ae56abf523c7245b00e96cda63d48414279a47d6021d66e0c2a1870f1a9705528430c506dc839de2adb5d6da1f4c9c156348347ec81efbb0821c1dd8806db5d65a2ba4335911536bade519fa1e74a4c0a88a1c294376f4f8f1253b30cf794d56c4010040902254a55028708af8fac4e8499327472babed745aa4849924b2848705ab98b8c20a2bd4156724e9c177f9c74018c17a60afbc0406847d5f40a1c0a010412982c2044a6c5a1ccb832501a642c85971e888515600154d72b6464b4738e88989d172bdd65a9b24c85911868974d18a89b392c49c75af567d6c9144911cb4100229c8ec09949c73ced95a6badb543648f27413032f4315e9bb0b5d65a6b715c19a727e3bc324e50c68181a911c40076e405484c72c8624912205aec4c9f9714070cf8d8a207254720ed008909aa831345144df0a009114966e045498a66ff859a629fc13428a554879452042989a3a54c6705994b5f254e7d342b7a5c3e08f1233d1cce4a098c052678a9e3276705454881a3850a962c51031965100551901d28b0d0011247b2298d9eb7d58586aad0912a6454859a54a12350bfd312785608ed7044cce9f6b877680997c60308d21651e94f15d65a6b2d8e018038e28621b28fd128b6b4efe57824551148c1c2c889264e5db95e234046848c0c193962c4e8de7befcd39e79c7bb892d7aebdf7debb42d2ab562dfbb857c9131b4c253b7ca09ffa88b9dccf83eff2af97e0dca39e243f5418d141c7250415e4003f48c2e76888b5d6e2e092238220279d0a244a09c28a295424f13304091a56092a94187141f9172a384fe8955ed11af74092c50e3b2012b48226703812244345973046bb7795ffd696b3a20e76e91e67c51dae681479392b5acd73f177f0de7befadb5d65c79d81f7090efbdf7c61aec123c6c7befbdf5f640a274a3fc5dd1ae267aa557b4b637b8d0030a211bf478c2073c4882070aa8685992414660c54f7a7760a1577a456b2a020a480932cb0112b026295440448e115aeb97930677ea3082043594a02948143b3082c48e293c6ae872620d78fc10021ed488c58951183d71c28912ea23c5c3c5739d44a4bda15aadd60d34c2958cf6ae21ed988406b07d6f44da35072c24c91420da4e049e44618513a32348d003a21e52aac03b034802450f473ff80968bed46556eebdf7d21c62132f08e24710604eb44088237296e4102f0e3a8630018f12266ce041064e18b1640753122457fc5b6a29fd39839f7efc9edaebba1707b02a78b47e888c80078d9b827d9300e1615f1e38d8f73f7e31350715ae66087a262beebcb26d0f6ba4454f92a317cc608b2e368c31436958dfd65a4b2f0e1958428723968eb061ca101a7628e767db0f1fe9b8e953171224b99518e10933349315a1f8a44e135f680c0e46b9810f020e462c98e4c7b881c8a22f297d0f74c065d3a7cf8168e32261e8d3df00138e34b1666e3a9fca5d317d171a804dab7c59a12055ca1366a0d2e2f8626dcc09a0c553021370d0bef6830ef1cb25835ca6ba74570f0c51c470816803010963dfbe05620dd62b6b69b027696ca4d8f26d4c5a9fc1961fc628b68dfb4ac0043e45b2b8777b2a81999cc51a29735fba90c422dac81df9831865e63931298c5022522867331e9fd9c064c93fa110bf305ae12a2fcc1b6794b9efbefd83004cfc42b9a5cb41f9469ccbed5bbcf78007562b39fb20e0a064f2c92207fd433993cec5ccb3e56fdb27677908aa33f3cbfc6ad19d8ec725dd21a23cb96f4485b35995256d731643af7050de05b6e25bd47119dff2e36c460d0aa15f18a1ef671fe850ba60133687660c06bbde0b22ed1f7748e90d985ea8242df8453565686800000000b31500003810088604c3018992a67168f30114800b728846745c3e1287c3510ac3308821c60040000000000008008640e4ccd500e28fc228613d5ecb05a8318a74844ba73b26fb3148b0a705e1b896c2b64740acb2da2f49e42569846dcda5efacc1ef4d19a1f42c8283039c24ab7dc1585b881f508ba3171c791752abf8656c981f2326c03921821358b713a9d740c32dc83c7add25ae82aca32943658f6788c5571e72f20bce2289ada9919e90311733dd320a0bae7e64153f43375b2a23e21f3759fa864987231a8a8900ce71a6b3fd0cfd23490e5266fa7dd07585780c0b022208c427113358a99b97ef781050cb854562355967ec425492ac09bb2890cd6a007fcb6139e13532ebbb95e011d77104ea41b73c3106504c979091d0306bd88a691c09bad8bd162d6ce904ab962a75a0300d9b35720ddc8fa1853c7d34c2b0d7be38102e32d046170f72dbd08018c16e0b33021e9c49daa8871d13326e2df754419ead896b5222d2986db30a28818d135f4b00ddb5b97815554609b5b59480ba04aa0c8a2d4ec166d7b5d139a8a89fdb662291b8b2148dfc46dc98068f70b84939742bae8a45b5aa77d824f9ae5a0912085916674fbbd348c83dad9bda7e6dcacf7a3b96f27fc91f46a782be543ceb639e013ffdd51d7ea93bc2141fbb2323ad9b30a62661c2d442a1cc7e8553abaa01f550774e92596b3a80f7b5a7ff21ae369bb5d224e05898f6851a24ea80ef3a8cfed658833e764f4cf6a71029b2a4277459c13f31b9cc27dafe904d04c34af524576d18b425ad2692f6bab975bd95c48e1d691c48a51d37e4c35ade1a47bafe2d70c941fd59276e28d0cf16fd79a3129d5aac583f92aff660ec9b894e45a6c36d937b51dff5662b8f287c8a765946d67a1660ed845cc5a473252fed7810437e0eea87a47b261c716139df558cbda2f95d557480325523d86a878e5690d046f33620ba2e31cb17a65a0d6a04db91578569d2b8904b3771c5afbc8dcd34a216d7984000d409127ca1783645bb148324fb077118800a413628d25699d34024cfb9ac57c9134f6fd2384dba1ffbb7c1d5ce4aeb134c45d4e9ace8ef842673957ee29ccb46695a0c440226d295399abe7017e0adf1537b0d3e511c338c7529a1f33e796003580ee2ce2abfa06916047dc3af8918db23913b2a400556015e348b91236ae477c83ea991f7048fb0c7ed7d094647a9d48ac833d97bae6503b385b52ced6b7348a100b9530b02780af72bc1b1574384c0a7602ec6a0285832f218220f1e92f335ed0067d77c9e4936bd4216a199373914da9dda30c42b32f0efda1ca5a9d64bc050f5b9803844f737a496593502e22e0b7f88814d188f564c53b1206b259009e8f55cbcc4886650312554ec31bea70201d80fba3a0248e9ab56b0b9e3e3f3e772dda9ca6a49b029460f2239499da6091361bc5e7e3cb274d0bafe4f16a049d874206a399870c6ee944c4aaa87f4585e0805dc37f47212cd2e2bbc7ea544a4ad0a3a68ac04a374ad45e1345dbd44302dd4bdbc943b8a01d39a5969a9aa5c064734591a0d08d3680533aa852c36f3c10de1d5c125f47984ec844cb24dd20a9a40df264a3a491b469c91133715515289ef5bc5b3f03b3df50a2ae5535b52e9eb671fbdb6e20460c9d453c175554ac09fba0f74404ea0be86d981b279d82a624a3e2d8b220ed8a12ff434750e0df4ceefdcbac1e20d3b797f695806a137990a1a91f3701b7f737ff393f1cca371447472cc1f4c36cd876e62f50611e53cf8e31c9dfc7d92e4c5c8bec477fa55e04bb655ed534ede605c847eb274285bc2f2f159108a11d44f61c34fcee3e46d39c7e39d754d455778c9d19482b1f758813df2dc91da27347ce8c0fc935d915bce80096d34da18ff37a4e6aec05991c1bc57edeec1b1943413aad7314f6c5a1cfd68d89cffd9d685958ec7938b367cac8dd881ae4047210571dd8407210fef266bee2ad1f400d304d4589f0637c9e6f979c58e8d338ba409695916be709362574697a2bb2cd34f9c45af3d331731d5b9eab43b09e4822863447fcbaac4e78e208393a1c6ea4aa2292913455113e583567609f28309f9629055def6c78e1fac66ee6f35ed8e2bd76140952c5835a6c4818458a74fb5dbc5f670b908697b37b7cb96b5656bee0f6c43eb6c6456e25b436ef7c99293495b8c1cb2f4cbb6a582083d6ec19b07c9988b7503fbe02a6c51956d390e659c96d9cb79300a58a45eccae1a01ec5cfab34a1b41afe978a863910d319bb16a51b82d0e464bcbf4140e23d24ef325641190605092ab83353922f5b1e150284eea62adeb208a0f9bf34d6f04883c25582dd09b609c097228c6d6b68d3d39473e773812335ac8ca02f7aa538e5a6428fb40e5c7443d42db03544335690c13d0755a0b294f6e8dc89e3c3809190f83c514189371b4e003ae00e09af76a53e0154ac657a8e0c1d725bf0896b1b92b363d12200f278126b332a85ef2a7dae3a728148ff8c09a21f8a9631c3cd3b3997b094ae5267e9e86553c3b1c66a2e1e67872d41de9bb791319b89b12ce24b343014f069c1cc47e01e16480060b486eae5433744eb458b966ddf8af785f448a97f84a5d474b781073cb410e0a65ca959e954b368f81189968fa523db7804280b12421890e49f2ecc03b89fa8b958e62fdfc5715242c9d1806386117dd99546a652242e7a0a595a079bdd09982522aefa4c82864a9bc1356c90e48ebf41f285a2f096390514ca13ddb8ab8b2d522f25b0902d9f9dd27ba63fd3296e126e07395dab87adc3953d4de995bbde49b74e5d77a9d57bf34cdedac0f4e74c47a698ae0315e0109424378a9fa3b56bdecf4b0b3ccb892af27efdddad331348865dd443c298d7169683d25640b8ae57c010b6c1ca11766fe267f796e814a6af49d90e4e74ff2a5da2b0d6df27b3442f7fd3d249b9b374751e9b5d4b0b6cf7fa26e056a80aace745b5ca39ecf14fecc4eb67a3aba4c007e713f180817e2ac2d4c079d24566929d8140df18873ec46401004b0e36013ed1749f4a569b3b744d1f7dada63956106786630b8fae7d6eb7708bd3202e946fecd8d73c06f1e058fee6e3c4517d249b561a31022761a2834e88f0f2e270c7ca8169b0017dca309422afa5235546ce33790516d308e17b5e348163593f35cd5c254ba42a1c48cad5a0b9f2a48ac4ab774c067f2f98ea0a754629e6047a455eed5944d7ae9a807a2ca03e647abea777192b810066fc7a2416f08bd64d482914c2afd879ed9e2775bb993e50f26f0bbc0206a6b70493cc111844373fa60b988652d5100ef8495cbee217aab33caf18d90e293c2fc678af74e67a930c0708d2a6dcf7ae8f426611fe0950bbbb8722cb01c92f95dcfcbc53cfe93a5028c1bd2487b614dda28fdfb5ff13cf5f28cc8dd69d78b17897f1b2e1f8959cdee272394e1d48c6f36c0d492b82112c07b02cca36203dcb2ec565728be2547f4d676f8b1c8472131093515a1200928303ab1621cc906ca40efcd42a5b294aece42c972739fbbc7d46cb2dca6ea531d9a4dfd7ca634c4d1329931377e587a230e9ecaaf883827968d0ad9a4e7f3cb413308c1493a60f2be188a313965c92dcc9ac007fa18e1a7d672d88a548d8f2a71dbea2c8d09495a7818e856b750386776bf42ed0276e324ad066d585b604a1a2f6eb75caf91e5094c497f1f742fe3378efbff811a89e5a09b77b622bfec02c2b1380e9bbd1ff2b65e493169359efc4050c2d58350d3050b9942c5914537e5723922babd8f2692113880b230567b9454de144043d0720cdf7235d9adad2553711626b5f5be1e1b95b0ab015ba2242fac9df4031c162fde78bb43c361466ca352496c6395e90719b0d5abc6527a7c888fe2521d42bfa618fc15958da8adcb4fbc2ef714ec770009e2fa62555fcd5ac6b5db958c516936a1d45898da1ed28720a48bcdf9189ab31d12f0c91fcbe32414b560cfb25e091ccf99edb11942b2940e950f5d7e71c30285e4160ff4faaa0d348ed800d04cc722fd8a3490b20b6a7619855736d570e85c3c9d801d47bf92a69d778160a591876c95c362e086a8699158ef0d0171b7d909d47bd4d6d5caa61e0380d5689f8ae307b9cb803c3b9dcd7d940d246fdb75ae28537887a0d06c6cc2160409a2bac835c6f04f56517ce0a551df654ec9ca642a372e607af2dda2ed628bbb64ba2b36a9d456222d428daf59ee65e96b797b6bd284886b9668d290d0e9cf66c8c442ef172dd80b8e5bc097649343a2aee1c5d8ca3e0a2c79beeef5cce835cbc6785332a004f04c76484966ee012b0de4a7e99166a0450cc3ceafbebcd9f399e726a31394979a056f0df8a16ec5da60e38e52e0849e96755344ec5508c2b4db8701d940bcabe9d4d6463ae42d9e4de8a56ca44cb4f4f3d5c6f94e862de31308cbc1e0d7a22b5322b4bc702a5edbe1ec65b1e290d0035b4c970e81852978aaa0197f3fbbdfc6d533c05000764e813af059c9ea8d15f7cdb59cce5870d9030e6186ccc3bf196237999812a6cfac6c2a012caa6f0d02de7b3adade3d34eb039e0837826e6679852812ffbb8e4d1a6aa66e67f0aa7101d64e454095cbe4fb99f55df848893d543e0abe0185f77aa1998b9541e45d311acff9c8f52cd1152169d11db742ff86dbe46cca0013909d15692118a5a3f78800b0445d9db093cfc17c2e6ced2115cdb0686b462ccba9525d8155f3abcdaf1959945ca5115471eb4ee04a6cb0e7f747cae01f18425091644ae4decb1535e3fcbb23ec7aa0687094c81c129caf24322d05b710352f37fadba4b422ee172471af8792a6119bdc1c7533e8d7e4a4346ba93c6b4676e3b95f6e25ced2ceecd70bcb6d8840982e26f12a860d1c8b6df09547410824acbef7b1dd2feff181a88243d89942660aa50b40e02798f442a7f9648f59d990f4e4f02013bb1c9afa92a0f4cbf1e2c49b30a5aae4d32139fced832ea34d6f9158bd4df5b78f529c78397af5434e9166d47d6443015efb7c4298f45e9704371bc50653ae034e9c2330eed0b685a54ac64ccf0a4e9ec31254bcfe1454ac76b8c42e95b59ed2d925436fb663f2976bf4195b967731ea09fb6f1758bb994786489732eb741b1aeb6658533d3490d52e2483a6e8554b58aafa345ae06009c69235a462c323b9128daf653877aa56a8e32d13a05f103e7c004acf1b54d1f33852afa61af7c5d96a2fe4d3412dcae4f9be618455a327647eb980d3fc14e946e8596f8602cf957bce27c80cd7a0df495d7135ec445ae140bf39e494a14b414e28b050b585f4895a50d064d23f21452e7c7aa3b80280448b186bf9a5229bd44434055077cb2f9d8128aee97d05fd9e6aa30c03f0a4e50626cc2c739e531ef701c88cf4f5c3eb9e7039c81a8225dce6e8e72b25f35c459b4347a648265d192dbfe09f07d1366f9d7e2c8468fd181079023c88398a027d748ca352253b7c4cddeb4deda5f81412cb4c8b60f57010775016b9c156ddca8de697ea5b6519fe5ce324a7f9893e2c564f94a15bb35f9198322b191f5b2aa92aad84578bc0aec8a041eabd928b15070dc5571f637575513bcc645227ee9385498da5c11fb597fd5ac7e1c530855b7a744d505da73bcbfcbbe86a0b11145424011055df1a890b70bebf2993247807cfaccabc15f63e9af65fa3a5442c56a72d3a806bfbf3187d37b9ea1aa41629364db1db14db299cd1e372fb69ee6929c430ab1aedcfdb74aedd25f80c700769bf088f32adb5239ad87088895dcc4258372dcb423025d57aea87e90632744f4d721b1b9bd883c57628d2366c9c969f184da80e6dd84a103dd0af9d1a8f2d51b1876c5daaa03f48f5a03e357a66699700453387cb9f6f61ea769f0e4fa813a4287dd5d32b9600beb392558b86ce2332a1894e56329f1b2eaed0c81a9d9638c771012bf5e817cb4096ab9461e5f462c402d5811150c1d38f42e6c565e691675a6d140be6b29997329390d678534c52507b9c2ad37caf099f98487f6328786f53bd0dfd5066c2460cad25e755818a6ec93546c8f526c447f5a2225c9c12ab98bad1ecd65ecc3e71e18ed3f08b31badde8568ea8dfb26d53fa38648afb6946522e2e180af33feb7d91be355633952869bd9257880c8580ff2e50615428d87fffb72555af7c3ba420b1a93580fd71199e523a5cdf4013dce908157614e522f9cf58f7a3e2a7df07cee794e41dac84aaa5025107d24150248933da5e9b27f2b86e7f85d3c04ef9b898caf89382db4a93a87a3bf24a475d77d1eabe0032638e36a387fdc93d84ce0f001d8aa77568d85cccb039aa67448739b5531639c8b943a5e466475810b46b6738d8c7c1807ac57b369a133b76fafb0394551819a070187c0a4213561cf5b71336c1d4f438275511b06d414d96697a8532652f8bcfba13c8d0d5d86b9c11a72bb326d5897cc10ea89b4f4b6fd50b96974688b19abff21203b35bf98ccd62da12f180d4ebb4f9c162ee2d76b69917472f3acc2f9bf95a46fc429acb94b6f1bd6ee7385f931fa188ce779b9acb32a6153a4f2943f406b84990c61c8005fb904dfb43157b8688bc6cd2da826de10e28daa028897379a7eb8417402efb9ef17459aadff8dc42e422e3b6be98dab595966f8aef88542a7141724c9c232e8e484acc776f22820b6068cd4d739b9691a4baa83fa69181cce52dc89cbe617da7a1ae83a05bda744e81adcfa9bbbfbe8dc899b752e97b27bede6ff171cc1ebc131358797d11b2209b84086e1991b282e6a25bb82c08d6a8ab442602c4397fd18ad768622db8af8580392be287e9669344af001e2b7e29ffaeff734f136c007d6934e380ecf4db302b50a9e10ad76df02ae3de5b880df3fd54d61a62ac3509fc1bae5e541fd10797eaa950c96f03e822e5543e05ee8cc1c7e96eea9cf81ac52aa800e41c10cab47cbc3542cf70910832ef14f6d1a8b4ceea60eb27bf93b26e8601d93cdca2ce5cc76713c42b47816d7ad13d01a75200b8380c16cd66771375db361f2f295edffae9b2ed847880ac41f3b2daa7bf776d9da0d9673302119fc004407436e1865ec6332237c43be7f82aea772b066c0e3c865b25808a5521e0626bbf98b1b29121198d0cb1ef5984a8dbc7d0c7e479ea98c00002090b4b695ef5d4c0679e63d8bc62040cce282be4bf483aa055ba32542cc90d7777b1ed96917fa6d3ec20c459706c7a022425857d152ccbb48f4d022642a2a53a8822f889f5140edc2ff006a127f02dd5a12d0700931a8b8d0f3e4711bf04f4b83c769d46e78367a7df867a3d4c7250c4f37d9cd665e1f3fff0247a803c0d5e95c2e8184831a625652bb780387db8e204c10d5b822a8bad4ad3dbb07daa9ad5be7d313bc4e1ced01cbc9888a7b76ba8d0d6f4f7c25fa4edbcb5b12ea6f0307b46b6c0daba78045360eb42193a7989f399b7567852113fa98e66071ab65acc174dc1cef2019f2b476354875e00bf3c6fd7c3e89bb0fa61b2f05dce9b88624ae67b12c0ae678007444c7cb77dc636823fc695910a6c9a5c27588305542c6ba226040e30469b16af22cc61751922b71f4a02e8e06facc12da8862369430dc44ae6b0fff2841b406d32793bc01bae41292a7fec8d59c4d6cee3ebe4044bd3fb6a4d8b07fb3635834235414b1b4d3b175b055c1172a1ec947bca720f0e47e259c0a4c948704c8508ad70a01366557dc32061c73109f8a756688d954216c007d17d1c08322d006a658e70250dfe9322a66876263d578626c77a036aca56c7a7bf196db87b01e84e0ebbfafc6487e2a548a687ac27ea85fef097c10d9cc88f96d368192ae38804badcb7334d1268936d6b8b0e40d8f7b8406800c4ac71cc0b259452d8088661eba967fb6fa244613a59380ffc9798331cff1e61f7913b19451f3bb23fe2c4c20686c234ea076bd354930c31c41975fcc56ed0c442b55e99fe88053ab3868fcdd14d4dcb5c8a09217becae10ab1af4f8bbe879da15ad8e10632c08ec4eb6e062983d6fc329b554babefaca6197dac24f7e840c7cae9f50f3fa951d3d1fd048f3b16f46be54d5e3c501c4ae1dc62d94bfa1da57d57f012f30c920a4b7fed8b921ca5df88dd8a2de98f28a3a4bc1bfabc4ffea1f945247682ada7c7d63dc429f394ebf6c7cbc70c18edfc53c0d840308dd2e8aa3050ddccf19f676a7794d380e7330d0cb0ea9386e5dadf7c886d83bebd1a3fbcdc4656e4dccce360a0982734abf71074d22badb4c2671521d6cfd14b032a6bc1d152c2672d0d4ea9d595f18d56e23e9ac83397d188d4f0595288b11511b4dd73a5ee0f2d42e53186239bc034b08e8669f018b94752077fbbc4950c69aba1584bbb5c13293fb8d3b19dd80dfe75d4f08838b1fdee07118a205e56fd5bf745f558dba23042cf602625a2c3a9cefa3af13cdb99260b74333b3bbb528552fff84d86044795d1848775616eb8c77cfcd5e211b9bb597e0b1f139ddb669c57799d5f7293125e0dccbef170de73eaa3af530b0738c4a8d01f9c532e83a0342634a29e0ed8039f4d3ae4da49905226dbe8608360d3fd998b6016e660f3edc6c0369ca9d25bf66216f50193e7dfd23c7c323435b6aca3d6559aef50851cd65beaa922830d1ee02ca479278f64aa8ea2ebbc466a108ea970807b7ed2f56ae97bebae3e95cd7f0ac4d2c7f089ab1d3a60f95ab3c2a522fa579a4f8b8a81dc95663870af77b68ec45b57a91f96d94d44f5db2197a56800e817af9d65d32768c8a8440573860a2511af00d56b93880cfb478520ce2aeae9a9279a0137cc14d80534c7a2a20aff2f42db071c83a5e6df8e3cf2e5b6c45d4ebedf06f138865b1c3996544effc2b2c660cd306b7f310f58107b911c71fc28c584219dfe4ad025513e1446ff5d9a44a517fea62b88ae9bca84eaa107440a1f3f45665bb05863641979b76c934d085580aca0d7a4af77196569725560e800d636c8a0ccd4360148536971f2b50d9192d70a37c1ded6f2264b85458f486c30c69741cee55b198f608383d6490c2164111c9481f727b3c6b8510ded4afcbcf86a330354dcc2bc4f5607534daad1106d9e20a6ca958809d347d03209f40ab267e100d347821e8ef4378c2841282040fc32ea0b2b262b40fbb8cfd6d4f0e9126bc708bc1c75a7a5d901d04fe7e291289c44c5d06fa4a5a8dae5576c17ce5fbd969f197dc99a07b5275c46c6b697229ba3cfc9d916457801798287de8439a0519f2f8a5ae6ebfc491e31a6333759c3c5b0c8c63a90b1a9f84ebceae838752bd2167010f1b83c84825216104b407d7e9ae0871d96e4b48592ef03eb8f87c7fcd75245c81e4903f3e379bf210a4dddaeb2c5cf4547b67347e32fb208d227e87d8f77cd968e21be58480ce0f4445365471bbbec3676938d4ba2e34457646d4fe1ca202ca8d012db0aaa11cdd7692b647a56d348bbc87306af2728ba3be8319a176201bcf84813ddc405e72b63940ae485ec32b855df78aac844273c1cc653bc343f86961c0e318c0980067555163a458eb2aac743db901e4539bacd87e188886aa7a8527fbc80ac7b538aa1050f0fb251f92071fba445ec6af448a1c0222dcce0de66e20d4f7644fe571038c04d4a6050b3226de01946f5e441828e8aae9b025efdc523d5c92b6eb650f9372837445d234190b46dd1f7417c27456baff9727b852bfaf0fc3dd0496944421c2ce2a1dab5f962fed00a7b1c23dffa750b51db35163399bedf9e259aa46f7fb22d8f7ff152c25cbb869ff38d546c16069dee2b80e658df3ceb6e53c51c10597eaa1be1e137cf68590e9950ca713f7bf0af66a804b26448475ae2263a72733efbf4a27a4c6c2c422e54df2a7deabd78723175671e1e5a252a27f427fbbfc3bb5762e1652f914d2e429b990c9d77c3d9d029cf9529df0ec8bb91194fcc497008dcbe51d7140ccc3b6497fad04edb125f8a0a7b5c2112da66721c71483aae9eb79dc1234ba3d0b9db743381e6f5d6c92d597c1cf32f9e1203f80889f1fc7e7ea161f2b6064e2685804318d695b2615a642abd743db010513b8655a6276e6252e20f2ec8630118ba55e95b221ed88db6c8c15bac97c870b00ed463b0392a80e29cf59b2042191250cb3b1172cfdb1e91b10c5eb48a2f837dfd371ac1db264b744cce5806b4a9e53e70a40b5255c04653a5a10cc3123fbd3dfc666e9a270746a7d706b19fa847dd6bdce24786983639af6f441488f454edc68d62931c02f8a3a309d62309ca6c479303b3296526783c4ce96bce9e2217a49c32e957d7bbf4b84a9e25593c5436a8cd6413247d9d6a17f0de1007d403214b50bbbdd4628bddc2e70c332f73fffd3bc726070dce4bcaeb4592d4b755e41157ad143c2783347c2620e719a3e102aae194928f8697ed011a37fd3e41dc25b799067540fa9576fec88fce7e7b9ff8c45f4bd3179447ceb91f4d2e290685bd6746029aaf83cf3543a446bc7af5382d98c9855da5fa6dd66b46fe012826ddc289c0fb11a376ec8d5d3ff4dc67ec5631c829de5d80323060c1138319ae03b1901fe02d3c8c1b5b274963c0ca42366ef3743229d43233900b7b79d58c5bceb1f75524717aafdaac6696f75e4df98509d5c056c1de0c3a80bd47387d4eab593e7fbb176d95790dda530f53a311ac51888828c8f52998280990235a42c727ac4cfbf955750cb84bd1e10899416ad59c5c0cc0018bffd79c953326ec915a997dcb786dba2bbb9d27b9ca403db959dad05ff914d58d361816730710584d69d9dd62e3dca27600e94f12f38a98c7802519dfc5d961a1ac19d3919e25e28cbafe24cfe25934a35a94bd61bf98221ea8df1c4825a3acc2d9bc4a152debfc15ac9afd39bfd416779d34c48e2b68adfe81bb4f798a53cb2f8fd465461ddb41dc9b9cb4f6698ffa2fa9b08b1afaade3ac1d6384898a3e407a0e277a3f1631226b350e9a86b42b205bb5167af26725902f112db0542905fbbe680e79c032e3bf647a6c12b60e2610327212048ff10034e6de3368e7a1f9abaf403a3fca646500800ab51473176e4168f47ac5de033a4d049f784839806c902e25c5bf5b427e11a23e004938b1132fc60ffeb202e95cbeee40c3ee643a6f3c68476bb0c4f5879db56fdcad65332fa1458d878a24c54b91b5f0889ca61c6d712512159df5abc584ef1b419d79dfe39a22fe4c05de0a7f8e998c96bf52722f0f28831fe913622f45faa3c9662c7c1a2a2048015b36f8d36493a830f644a2d957fb4784b24c78218ff085adaaac022a62db8b74c41267e18f3a97728de984323500641e671073e96a9edfa7a228dc6fa6ac5d7d587d01d1623afa75eb124b3daade26381b637cc0e1a6c48763e13dcfc9ef7c2ac3995293f92a8ee994bb4cb229d54084629356d3e7161e4694139bf22f07663c2ac1f14d5be54764b35d186eef1432d30b8c4791049a8339de980389d213abb2f6980364ae064bb56cdf413b279186caf24313d66bf040169034559fb1a131047759b8017f0a0bcc30867828573cb4e71b4044200c639a9249f45830e7014fb216d3e44fc9006025b0f256095375d7f6c36d5ddf6314ac12d3dddfb631079be0b7679624322d305c71aec7b2e041c006fcc10b21c3cb7d36e2fe7d3d4b839cba653097a22590a6fafa4d97e38b47d089d336bd768be56d167d6788dffbe8bfb62ba91ea729ca0576c28d7dd9646de42da1f303d47313020e48c54940c3865471e044c806acfd89c8d6e78c5e3fd7155ef8ff60656b73dcec998d828a1746cf9348a3e0700622c08d90d374b69873e97d6e3afd0305b43640be91aaa2856dc8166d19368608b82c7b20b8e7cc6503c41a3d245df7a02ed8177938515aeff1f2dbefa4dad12a83fb0273bcf32e8512191ce203d9b3327a395810c47994c062a70897d7daf3497c8d09ef0c1e5c0679b6390d72f9bb9b666396f7bc9264bda4f8ced71e0ffea5aef351b5ca2f0cad8156f3fc16e654c35c270b549417df04fed4757607f2d5bfbfbe0d001a259b6f879af2d59a163ab3f18096911b8fe437d8d7c3eaf2bd604d56749dabfd75cba426f0a35262420f85b0a0033f27aa72fdf2544e29040761c978cfaeb2640bdb06fdd8b3dcf528559297f0bbffbdfd895ffad04597765ef266600a4c460c13d9bffdb9585ebb38486c66ea648b5b762910798156c216869d5d8427ae1dcd8bc881969a438bc8cad4a9b45a60a0164b7c1ad103fd24b3f4b57aa7f8742ade6e1975a5c8febad27ec35ef6d15c01f3ec13d36e41a8062d0c651b20ae026c794c280aeadb51018a9144b5feae2ad2b38c6e5f8200a7285dfce34e41717b5bb0b703378baef074230be50186f410a9161e239a62ff0f58438eeb1b799e5262b72b03dc1e71df500da110a887e0305b4b3df7d7b0a9249228b7bffc5a876c3bcb2efd8946e6d070656c1b6a99fe486db5df42bed30031c556b5dabb617635388646714bf470992fd19270c63eb405ef51cf784cb5f7458de53601e760e1ee0ce521606448cb3f2dfffb8fb065c08e4d43d5bec52ba89f7406ed5af096884ceb1458206017a68402e39c2f165bae727277bc496be06acd9c41676ff572476a6b55590ba784fdf0719427e76e0ab4a3e1957917a2bcb80f8ae981a4fd3bdeac17e7bec65c2c3d8a866f215cf3377f98d747e20180015e7f6a6259ec2624fe2406d54e560d54aea4aa7b00e4d101b1fdda5617e54fe50bd3b859524d6afac613551764eb530643eb4b8dad08b75640ab70c802caf4b82f4047dbdb741df5c07c3440be04320cffffa12a01b7da46331b211a6604ccec9af64e1cf1aa83331c3d14deb6e88aa998a2dbf7d4b6788a7eee05f4667cbaa7604103c1227f1e0687b3e4b55e08c8037d81d701a7a09aa439aba321d020e1c02cb60ccc0e1575e55ce385158e846d60c099fd1b3f4161091ac96e415a881bde9a477d78386ef4c5a41d56dfa36d5c0790fbb16f5796cd217460ccea5a42da48beb12e9a9ecac5c950515de2411c72d5393c91a7f281ef0cc4f101744d29e20a581408620d90db680ce7e510a00ccb026d2b70268c5cd2f4192016f9721fd299d02ade6a9cf8a90bd299073420a44581a6392ce898666327fc6512f0d30ffe808f4c5302d48eaefad04dc3e90d6252fefcec748f1d26c1d105eb6967e2e3c48239d00a97b5dd4768991eb60350f035a17cc8f8cc752fb563bfe5f0bec50c46a053d81e1f399ebb9e100acfabf49e0d02080bd91ea88270d7b101b0cab100ade843940f21a32629d8ab5738dc9036e0d06e13560b1656c38d9f66c1c78b5e3ca37cb02b73177a3b9a1864277e36e4c7b430e417f63ef548343febbb5311c210114471b8fa36c4e0ef1e590f76de2304206ef8c4f8d93bc62f49024dd3be22f66e93c98dd8ca1d1bc907c864c70fb8a352617b7f260fecdb10162f21c3e10b7ba5ea534802acca2ac6031d818b417531e1405e24cc1ee95cd4a05515bbe0346e36247571e620f4770a3836917fd5a38585fb76f7a217640a9a2f3098e94216552c4fa088f413c0c1adbc485d90f0a78cb93c5e92a8a0fa72037a4f613c35da59be12909b78d19f8b583eea608c21db6f9fd0c085eb22a64a13dcadf3524ece79007c9c47c81c8673602b64eaffd5116abedbea2bc4350f099e738450d108f16257748b0859f7c92aaa543f28f6d9fa4cf74fe616853756060d82259227badc20900a155b690f2b7a522aabf51d4192263b8bd529c23b6a997b3811d2f3c03ee43543b555831432c59bbd9dec3d09e3e77d087ac49b96649dfab13db34a0a20107112656320c3a94d9fcead2c3c2be64bd40083ead503efb486a584faee6feb316803601b56ce94c809656d7ccc37411be55d149445995c59efdd2f087f00d3d3c0bff4113af7377be2f737e34cc1c007776b5c8b1f1fb99ebc75def8b21cadc1a2abe0160d021e2f25df2696e5e7ffe27d0cc978ea13d973fe3c93f3b8bea9ffd696ea3c9caf4d83c004fc3547416cb78f1e200f3c58c85731403482c875ac949dcf9f7d81417bd4d2bce80d8b4cadc9c2434621ec8c110c0fa7477b0da0d5a53d7fb752b1e1d2b4e78c3ddb4b76e29d8e5cbcc144a3db0ca64b07dca08cb847ee3e99163135ac0839f5e236e0217419a9f7dd9db1dc99dd8292cf711eaf4eae803087aa52ad36b710a66fe7d4854c0c206edd5578fb8228caeb267a200caea20d897493779280e1d93bf7b05f74519dde1dca07a1b546886392746453e46d0a3711cdac79caa194960becbb3f0d818507d5f121deb62a8096db51ba8dcdbd94bbffa92ce02880a200ff6199a4128c20f6ae956e03c5838a8fb6849820b4cea31e6bedcf247ebcfc3784db843545c338db9a1140768c80e03dac3d0decd0a6e364f9b3ea4087380b03b1a866804029db5f074c2d9b852d7dde7e2d7c9d71752869a592995058b5e28f16f7770dfa4b484f36e3eacaab5927fab9d0166d682a6ff0a3a2dfd98cfedc81f7ee92102f81f6bb8b970550bd6fde16ed52681028f2630b25e92d28b35c8bf63f98dc5d1786dd0155d65b148d5c8bf21fb420822cf0afb16bf3bdaf8c6e021c32a441e4a690645c96258b597db3d261ce7e503f55b42c21e082309d4cdca3cc26f0f4dbf46f2df40be3f434f1c39baced9d7343d94f6ff72e9f82e4eacbc97f27b108e52a9723108a5aecac3259b6afebecf74b47077d697c40bf4f4d445bcbacfae236a3db14346548730a30a264a77c5066002a681fc1c53cfa493006ed08552d90c39b1b5019cfec18a6a85c926b8843fde9237f2e4371067ed7bd3e0669a46c5046b04fe9291ff629e116254eafacaa342ce2250cd42fa8e409784ed6fa8a7b4800ed47ef8b04bee9d5c6586f7d2e4f7a88f7c437383520fb246b59389a1c1a002ad23b17b5eaceea3df998326236572c03ebce3b6247e28dbad742b3654b609bf6b995adcc7491f4dac6adb5f860447bcdbb62e94f62156f1dc33b9d05bf4a51241ea8b14d5da171334986fc185edfafbb385d48342d23a921e6bdedbd605371892298976dc1c1eeb890838cb9ebc8c718337932763493fc39298f4f474f2e14046d440e363ff741f03d70daaf9a41dfbbd3ef151d4b908335167e065ac9eb674928e63e3c876ef9e4ee35bc730282c7785631c2041c755df5c0c77a4da28792007a50f54b37405a0df105cc18e4f407c4b1c1fd6741b77022e211459304fa5cf98d48e383ddced6e3c1854ea0e4a3edd5e5a28699a056f500eb20d1c89043fc490c8fa36e3c4f76d500e4479d105f94a032a1feb86fe274b0ecac1bca50b8c597ee5ce0f0fc53dc8a2dc3868d4e7e42c40759a0d2e0f62b528aefa8b047a04c3144f64722275e6202dbd75cb651a6d131379ffe01ee1e247d3a03b0a8cf12d8aab966ce5c82db159f354c9ff314d1bc8f49407d8b9d296b94f1afd26c9e3ed77b869353e2c91871bb787a7460e16ef7946c5d782ec5941d45d592bb360a20367679cba562d25f33fe6283c7623b7091a651f58f4273dff78128e9f484691b8c114d27976b10d6e1bcbc4d6abd605c15d65b141b3213a8a4b30b9e6a919f54882097f982cf8e1588a9fbed621b61b24845de37feddb28b0228e2c01a952b3b733ee173ea881619911f57626126386310e0ae118612f43bb3a30161e237081bb71ffafc3b8f8dda712031bd3c52460bfc6431b05f7c43f1c67f1fd80000b69f11beaa281640ae9be1db7ca54863e701f2dc19a804fc8d8063c7728d64d7a2961c69cdbb06844c94d1e0b7934da4882de7f92492616a007fb049aebba0620b262687eab55f4e842069a106aaecc0bea508c2821f30f5d8166524a4db17fd933e4991465602849c75fad22f67e282448d82d2c87e981529da745107db24ebd5de8d79f030d67d1b3b48534fa71d1cc121c75ad084aa5a8d441404920827d29229a4e468bbd712b6182e416e7fe21a261c6c98011fbcbf04100fe018027f27fa6fc19a533b969159db58f8a33012faf91d723b3deb63772d8f8ef8ababd3b5999fa923c5ef83a250d8ccfd36a682164a6cdb638598373896ea66e3ca2d0eaa9ebd46ae5c615b827c93d3a291903f6bfb59ff6c801b3f52fe53ed4259a8747e5cb5c94c5908ff563e55ed0e1c6289f8495911f6730e9a5212d249e68e8157d1486624d0806a27c2af4f4fbd4bd170cf34ee8251ac3a4773f54a36a4cd5c96bc81578050064a0a6520fa11a4931421f8bdd333e485ba105680da4188c2b914d540f7a210ac496e7dd9365faca8fba9c1ed8c59a783282515901dda3780cb080de431dc38f8869a63fa10edf4391a010875b59406ef9def5ba731a073fd61306c3a7d19d67a9208af2b8d863e1406f85fe4b2d6d16c4bc22353188ec37cd8e980127c78f2d83b1cc51dbcf8368cb991250af6a37110a15739324f4a028ab86696168b90c3fb23a5aeb259f5d6e61b5de070a4e3b88729fbd52cbb05f77f985285506e88f79ccadf164983c3c7a1035b0d499299f0e972cacaa0cc8eb9867109691eddaa95da8478afba4c60153163cf0320dd97949562d980821db5aecb4c2407e653e9bb8551913acd4fba46521aa47857de180cbeecca0691f942dd3c72aa31a3091291a244ede44df1b26fb0adcd3cee20f9414822f7126729f1ea73237135bb50d3f72a7d4395a04277f516189847cf56f0bfc08470e30001d4d4c87e25958c8880f445ff4caef874ab235cadb0f097d49e4ac7e3c471d13224020b32639451216370f1acf80625d32fdae8949e58f1f7730a9b64057fee64e2429c471c3200a7ac5cb07f1b522070a01763bb6f68e8da97bff18fc81e041768a8c24c23b57dfbccf360cddef36a994da6dc8e11a526fb22aa5a25cf24333f1285771fe6007def2ccde7cc1b8452faaead4251a8bf74b1a7174ee85e33ac2fb92686655bf2cf11b7b4e0c697bf5936579cb6864a0d818e3222167d26ff92e76d8394d8b4849c38a217b4e8c07b24dad8d17e95aca188c538f1f9b95003f2f6ba61c86a90cf4574280a8e4990541985ff21e9347b61eeb2b9695ce2519268f24d5bb1afe9129fa0703cfb4ed4e091d83c4e4b9ab2ecd36c89188457b9123b29283e82e562902391c340bffd8c416900c5e03aecb8610824b0bda62271e41ea276f218b82e448c4a4122420d651f99db4b866ec9a297fb3f177dd26e3270131b283baa3c2e8fdb5e37531a06a1ae0d515bda1f91b6cfbcb8fe451d4c637cfa736a989d18f4835c45fccba6eb8732d8edd19632040bf18393e192357ecd4308315108fadc24cacfe9f9ed0022410a09ee292b4ca7eeb27a1cf651e6ae35617dba3ed324ff76b6273ef53561d0226c25f03a7218d6af37a2076b780ff00a901063e253b3af004de3f121941809a2c3b693cea4fb8a79c96179989df9ed15164202c1a7d10e944924bdb8ae9abc1e4bf76617e9d9d9a7cfdf710eb2b45dc9f7fc23aaeee6b672cc25efe1dc7849549eea33e3d37ba713b372dffe6dcd0b7cbf4d02f65e948aa6eb6a8f5d419c24371d96b41eb405bfa0df10df38fe6e8b5e39e14bea9eedfdd8bde00ac87578f89a4f20c0bf0766460ddd3b9d45c84c7fcf2fa5c532c1a75313ed3ef835246cf4c815aa84933750b8bb649338588a641374f5159c416204430153cdd6b40769310e4151c8940a53b63f2c079007c1663ef0647b5253693de7c5944bd7922c68642d38f26ffcd82f829e64e284e8449dd1ae35042659215163942b1f35e473c1a0a22028f1700a506989cc38555c0ac66072ca5c359338926aead0541872e1544c345433138c84a4515bc004101f1b963a61a0184733d31008a5a09785c7e0999699aa1013353c101b9c6974f7eef718d1facc60ca5e76e5a9030978fb18a85350daca807715902f9a7fd0972044969a7b6a409ee5bee00ca7edf18e93fc399d0ec9be6ebee55e4c56c000a7eedd35884da833d0c792600cf34c81d1025f994aa0392272ef3876421c7472eaaa78f158a46fd162f72823817b46697b9ab1b717f4f9bcb872ce5f20dc55867c022430828ec5a024ba7ab5e95c8fdfe5347afacde9fb9f2120e2402c39b259708bc50f352c27ef6b251c4a62acf5397a817bed67bc016c578f192ab41b0817cb4c24936c7c56cee26ca086fc5d62ed4fc19090458451b3fc1d61935414e6f7eae6ce35d376e9c877ca3a142c3a118995eafe666a6f836fae8a51c16bd9d74d01c1d39a67bf51a605da52f5caa0d3069c807270c163cc1be334ff771440fdd28db8f6584ceec5ead2546f157a4b21902590bc48333dd6761f039a8236961a0825df131f7f224d0f6219cb343845e3bf510e6a147a2696860ec57c640e67e21e572302225fa72fd24f1d41aef89b1db54703296c81c31102f0e259a11a29f46bad2d8e09c2c146766215ce1c72313fdc9646cb8e5411670d4db4ef99e6587c6ca5f84cf4d3d456abd25d55cef020d6ed0f8c537450752763fdac2828528258011e0eee9b92f629f69180b8885a25c362c75612fe174aa88057b062b657d08a0521f36155c5f06c01713d21578f589d480009224d33b4c2b14a22b767024b613f4446a3561d946ddf24b35433647d71a6b8ab6273823fa011dcf0256cde341e23cb7e722085264e8f1e4155b3b0f6b71a1d84a75c6a7757ebd9ad2cb0c83f9d6d5a72e8fe1b0dbf9d2b28ac7185ae547c3f6fd9cb5eacd6c5d24ee1e776006685af0a6c5d6e53b90aaa6c0f0dc45e77b31bd89a65438262c36d2fbb53298e22d413f2461d69b64e6b9d370e8d5342aefc73c8890629560273179267e7b9092a3ae60dcbe3392582c1778ec36c45d616d88bf82dbc87f5794cb2be9c0a53562b27e99d6caa4ae28e02a98739dbe3c40bdb4b68d021295c5120a1d5ef2fc438a68b0772223beaa9dd98727a25872fdd07a613eaf9eca94a5b36058891984ff8ac4837edf887ccfc48ad67c1b6c344c06fb368fc394c623d23e3a39edbd0861b1fb0ea8e94b08224475776de304519bca9faaeb00896aa51097ac9be6b761fffcd9646469ffe958264f85c7ee2f650c5c067e2072443fe755c2815e251f64e98090352ddc67c27fb43a8862baed0948d241240d0b8a85d7bc86a389612ef7dd330e1cf3a1534148647b193debe16f555d9994177f098fd0c510f3755f51a1e8f37c2c42c02a35d01d035c7af80837e10b23ef90033848074ff8be59490c1b4ca22ded6a40d30635fc99b74831c585f90aa43780ca34f2142022fb9a4ee292ef0e8cd98b7468edebe7695147386ac66ddc9da4915ca19d68b03b9d558d2c54557573ee2314ae722471fd44b890c03c914a22e1f53320917950819966498c9a0f3f5469b58fef7d3b477ef7d41cf676b285ae53f28f24966ae09ead819a6b36dc6fafe8264bd3ccdb9b720cdc0f00e7845de36109beb6e7478082e5009dae632aa38006f8b1179e734f0db7203141102d0e0cb3b3f991d5536af4073b13bafe6b34e3729c8f9f236e858fc6ae65613181fb6e3b637c034ebddbe192f0712f83ab4607ee9d538f9196b3ab7cbe14359990b489dd990a00a7aadba8299225e2f591c80c83f01e5e88e7fae5317a004690004fdf5db2a8e8921513e7e42b4bd8c91ccad124938c111139ade8c8a6420761b356726475633bb2194241088047df1beca4a1ae1386990bf1fa26909ac9819a067f1e1ac2068091ca3305ea119a9d5bb40e317fc5b2a79363bb30dff9be5cc05c60ed5b1d74b6bc95e039b05e8ab52cf7e1d02cfcfec03739596ea5e6e37236a1176443dc6c5d243ccf9825847ad109b7a5c6830092b5601d3fda76a3d8682c8079a337f9e77d6cefb275d4e488ebc7563de789634675ceccb0ab5830bdafd7486df7ae5981f299f68993c50287c0400f36f3b90af8a34e7f3b1e18069e234e20c440368fc8aa01c6d2b44e4811e869fa4074cb25548a8ad7d3e69932a579b6462edcb00046bed5412c2a2692d3c5e6d73d0f4c618cb51b82ccf9545e88bcaeeaf0b77f7f552b94cd6666850011f1b461f71e496b5feb95faa4f14b637762ad1ee85c7356b18b891d4c5b0cf86036c530c98284a9e2c2faefe520d6201682b5301d22c8bd37a79cd1eab9a68d41ca43ef27f070c407c4adf4e7009c05c563b40e90c6357de76eb4434e6a895ea3f9c7462d15cc060cf61b240533feef379a336649f8b5843817a8b7c2a6c763827d82911f4115bf585631b318870cf0c2c3e776b31705a980b7a64a93860783bf8cd42f67ac4b08c83b8e344bbe0378352b689e03fbb9c8ef1bb0b427545b14357d192468b0e733dfca4937669b583d64cdba6c09fecaa1907bb1317f218802061ec7a40640efe9990bc4cbfa42ecc3ffe2c7904b540d6e688377dca2a674fe98192c1e8626bb8ed6e512ac8ec953f998801629b3fc4c12d7e84875f64b0c4b45d7a63297bb6db5d9d89c1393bbc55e6418744fb9d93a7c2e3e7f18c4b78de12434f5fefe6d8e8f762677dcb293f8884db24ceb9c0c058c8601da12853a5f508ca151074afabbff1e2b5c77febf22abb8ff9e0853d3f0e1fac7d500cc55cb3f651431a00066e282717457bff72f42d0533ae0582a1480c3af11c8b02774f81542d1ca22f077b3f228020e2457134b4ab288748b6436ee26654a524ab965a603a9038603b90750a6812efeffffffff3f54b2e97df8ff77daef2eaa5e606aa1a39bc1f7224a2786aee916ad45281035ee431abfbf6dfdffb7964eecf6bffdddd27e1a59e5080bbba3dd75ebeeee1818b5dd6b921935473019dd1ddbff7f233aac91a18c3fdc204589e5cf01000b9fa6133c6ed88186274528c8b21ccbf9ddddddc9d0b4c9a31e108f70e254a35074fcc6ceedd5a2dda35a38380290789001349bc671cc71a9848315d096b1ab2c1e40446985aa1352ac54994e645210224606cadddd5d3c8185c2ca0c27469698402283502e881663f9d67a7f6cffff8574d3268576576827cb7645feffff9f826d468f13413d63798754e59f50a36296300980ebea04eb66358e630adbfaff6f616dd97b11b5ffb1b607135b7d9b9628d8348ee34d28975a4005edad7e10240a5f1d29ba1a2b411d5590d880a272c2484215013c193b8c1c87d7a4e6c88f1b7aa6bc984d8c7242b22cc77266baf90178c2211434316054a47081c724542335c3c4c6440a3378b34de338068533b8e55296cc0cb6e8d64c4fcddd00438103493c86e0d039418614e692dc905c93aee916ad2bc809617dc337dcdd4760d1615cddc6dd7b585854690a61ad54c424f9627e59966339d314bbd64ef837453bc21c4e39a0724cc95ee805fb37ffbe18eeffff91c9430249aa3c827ed485fc6db9a4c4e6b7737d010be6d4d4aa719ac1c94ae6453982f8b8b8df930331d1339627d0feab022668a7042565858f1ccdd3d8648c6281ef087184a84d5eacbb21058deb03bb6801129a21c52709c60933865c0fbd191adc4b81c36188e5df85e04648159f153d7e3a18b22cc772ce3aa452efc259c00f951d560b19563d28a119650cd3c516638cf5c518638c73bc1c4fce27a72337943b9a36bfd5f013fe0e6003910e0f3ce18ee6eaba757777777777a1f0ca576cf7e1ac50e3f6ffff7ba23679e7115dd32d5a532347ffffff39ea1291a9d652935c96e558ce8f9582f47e138b8c82e4060b2eec8e783a38cd1144ac987ebb711c6bdcddf16fcbde0e4ddbfd573dc7fd25055480dcecd0d97982f317b6a3a0ffff93a84dde970d07422f0465103d994a3293e070fa91653996f3879b304a491414ae03ab4433c8261df68ce37882caa51857b22996b32cc772c63930364c52599c4ec4d0a1325df021b2e49324eb5957dcc21cd0b4c90f724237c7629494e440ade0ffffcfd5b07fba14ab711c71dcdd656fc86fbbbf78583149cd51ca9e0dde1c318aa59ececff24415a682b04461918306106905f15fc968bf4592432aee859eebd6dddd850431aeeeee1e082fc22942a1c5b716fd46baa65bb476ed72d07181aa05deb883d2bcc1c48916f8ca2a040e018f42e4f4d4f41071b8d039a101fb91c548c6c8c6884763a5c32ac00ac904859a223354f0e80999556c6478145e141e0b660e30c5850ba52a39a92b93ca1493a9aa3905ac533ffdff7f44376d72c491ddcd59966339ffff3fcd0a83ee8e24ba57f16dc74fd4266f96e558cef4ffbf052b3ba205ac6c91fcffffebdbbc33d7adbbbbe31e8ba7ed5ec37be2358142a9e4a408a231f5cd75581b58b12a305480b811a346375b3c539464598ee5fc42684bd640135ae0ee0eb57dc72b852428bbdbc489d2eeeeeeafc32f89aa40744db7681d22e6454a6868aa0a4b0590aa2420ce5dd13757e24592aa2e5cc242915a158f163e7789cc7d41002a3edb592cd9346c3c12d01f4161adb5b685d3b449a8a9aa2b5c8b2ce289165650ed8f9124eb5961d02debd65a6b754c5b6b2d500770087804ec018140a7bf5928cf5e677dd2ffff2a184d9b5421e9aaf0cbb22ccbb19cfdffffb3ae383823d6dd5dc8f616d6d90f971c4d9bec5d60769241e9a95ad5b4c92557d326b78b081715d6f8f2f0ff3c2e1b3f3a64e303f6c023031613269cdb30659b12aaa0b3ab91015208048512c53184e308470f0750f76f8121437a649861454c0cdcd7b09f2618c290653996f37f1027463a552aa560c748d7748bd6b447de585d1ff2e72efc3fd5e13ce9a12808d594243a824836c2dd6df68ce3b8e286bb2d957464447d9b9fa5dddd83a6a64d565d7d10944587272481c871128303931114b1c104a54a152f17e20a31f225bacb84c8ef7429f6bbbbbbfb90a5308898e32a5ae44c5115d140a26146c8aef18335e57f271df6ffbf8661ac5f64bf67598ee58cc2f7ffef6367daa48f9eeb0328cb783308c9f2ffff2f838402958a1b2699c4dd6fadf7c7f6ff1f4b66dae4082c9b9b294fb6feff1f4b67ff51180362c986ee5d3b6698a85c35fd784ca420b989b2e598c58a2c46a8f86498b0d91fbaa65bb42e0a11ca4c9bb4e1f1f838507d6a22714e3b77a74abe5e547e77770cc367bbef1069b24364c8440e0ae7533e3a7c7a486977f72a3ca24a5377f7798304f3e02dac907c4b3afe82ee509bbc618d3b029a4c1a146a377cea0e2c1e230f9df3e0e1995c2423340549aa743eaaa4a2ac44d9097ffc421cde944c56487be32b49edc69e94a7a06b8e701a9f06032ed890e317cc51446342797264066521caddaf5b9746ae8c64a10981477664289239bb168e9024ab15865a1892838773a99c9d5e0e8d39c4ddddfd04a5aa31f8a1c7d0b4c9a31ebd95cebaa503aa76a13494736ea9f79c5392303704b6a4d11dae03efa29870a6aaf058c7dff5d1084e559e6c64ad927084a895d31d9352e080b425f09b7c307a53088ad8e4837125484d71bbba5e5ddde5b5ce0e3eace275c90a72a20e670318726fa8ff3581aa5f20547d69e10c04b303b326d25ec26d2d2de4cdda6c42056f3883f36a62fda0322e3dc2eb517660427670ffde7befe501c2b3d068d6de27b5a1008e72076a5acb6439cf36306bf60669b7821cddb5a0f844d912f41a7f90c4b350a4e10a3e60b1b5205c51848a69a1d4c096a0ba7ea601174d529bd600d60358ca2f12eb6a19dc303818dcac2ea10cd65946d492da5a0320925f24d626012725035c60668d00cc9e491c9e495c6be622db539ab0a9aefe0a21034c77d56f5f35a8c4746a29a5f5f5e1d24a4c5b2935e1ab2d828228290741ae45a81ad44a672284e33886d256ebd4f7ce82aaad35b4b5560de8825e44ec116a1b0677b5285f2060ed12ca5c3d13f4226293401950eb4b02307be2ec4c6e136a080070852f0ad0f045b5df59107d4ae9b51f9e56626eebb417ba2d2d745a7990e40bdeb69adea9fdce9f0b704d93b2f6a28009aa3d817d856035fdbd90d954c36cfa92000cd57f5f8bf72fed85eea7515b431462f842b3b2cc71bfd0acaca9c7713f2d94355b82eafa598919d242e00b9854b4ae5a626e7fda0bdd3e5f24603c9c3d19e5eee1ce141ac791850c77b65caac10b77b00821c08d1a352cd46061a5cb2009846e6cb27143a8083873b029a269dc38517389ae88b214c914d914f1723cc04b3231258bee4ad595208c31c6d87b732ac9eedcc0ccc06171c509100611a82b1ae68c9fbb3b8e1efe0007300f51b5deffffffa7b3bf9dfdedd85f8ffebbc3638e101d0992752d6ac094d06887865de36dc84225436543c5a3e2f91b46f8fdffff63f9ff97a4acd89f653996f3ffff3f4df2e43f783f787ef8fcd0f1ffff3f776accb9b3652f6667eecc607dfb1e6640618e1339c29e10a11a250a0727de637bb6540a0ef5c4f856d8ef384e564a39bcd21d9f84c67184f1b4658fc7f8b43d98d86214be22e923e8c3ca0716cf9194f48ce5dd0f1f36062177975046d714531d512489a9f692a0987922133c618989959b13373a529bbcb70685568ea64df6f0082b408ca9bbfb6e3b16fd014e9b74fae007cab6b063994a297ca08836f5ba7577772b206a93d79b54204316c48c943f915546ac165d5b4e65bbaee916ad43c8252b4756ea576380c21b0db566202b458c17a36e872bb8aa832b9700192217342b6e80a10437b1f6d479ca9630084f54c175046cad101ee1db9d1932c66418543c83876f8690ded23723c56e6de99b9193b9b2599bc566cd5784e3127be4dc430c59c4c14724e52362f21111b9707c44412cf8885c10d9b86ef22b8b2a87d8d23754c30e19c496be21a71d6a51457e6de91b6a61570c7c3d6a6a8efd96bea1a44db7f40da160bb646d8188d44eb1eef66136b09db5d65a4b2ba6f5de70265b2d8c4351c4b7bacd219c4dfdd4e5aa586cf56a75c5b7e698ace5badb69301d4c07b3991c3c2da4aed7c58fef8b44cbd6abebc5145feb487275b5b6cf7eb0ae4fefd5f845e25a1b2a7e8c6b38c3fbba0d6777dfeb3f83e1c2996f9ffd506d453b935dc4dd63510e442c6a9ba3b80ba502eeeb1b51b6b8586025b34cbf5064778cedfd1e980d6c373578d964980e6603dbc1743452015345a6d9534f6f394d0fe5e075dd75f6236a3a9ba215802fbb88bb9718df1bb65a18bf48d4ba33e5def7991a004d0de6eb7d66cdfd9ba8fcc3aa8aec22ee60e24ee4ed883c730317984e76202dcd2eb374d3d98fa8ef4ca77122adbee87aa1c8ae17891f91d2bf32eb5c2f122d2925d622a5410f54dda6daded705e80ca6fbd9fb4cdbd4f845c2d21e0399ec22ee76d35b983ef9cc77380b67ae9792ec2f9ba9656bfba4512edf63adaeb31fbbdb49054c9d0b4c07d3bd3ec0743bcac1eb50dce9c4ddf7b8bccfb0cfeeb63397cf7edb598bce5056eb7f714bb4c0ca5602f0a0ab5d50812adad6bdb6ea96f858a4b5749d81e0fee39b81575d82ad1b543a69ffaeb58bd56e69a526ccab1b922c7d327ab68b4cc66ebb5c1906b50b2a80b5dc22cc11d7d256875bde99cc8c081ca655adbbb816ad82fd1acf74227057b76632331777b54e040e6b125c5da96c5b19a30c835a027e8b00b65dffcb6f4b1b216ff90a41d2b025ede702ab4d20937025505d42ad3a03342b6b6aabc30b24ad02555bda0524aed2240d2b9d217eed20b8a698d2d90fa655ed01ad3317126cb752da3b0209733bad04dd520360d70d2a9dd3015eb5b43312e6fea99526a98dd266b53cd8912c7d31acb62f46cf9e5aeea07491ed39479c2fc64ee78bb1dbf382d7543f2d02384ad38998375aabbea54e86a35bea32eeb7a495a078eb2ece005bd27e4aa0da83596956d6945959381a660002384a0b299328e50653534ae50601907aa8242d1b0a3a886668008000f31800040c8240144692304fa30ab23d1480093a564e52504a100b07c54130281086c1603000080483010100000808878118080fd325bb06070b52dbf84892117c706955ad0a4a710e9e828dfa509a8bfa7f99dcdc1cf10fa330a434db5d5682d9be4b75908b766eda31f0b80ab5eb977c5670bfc7ae18fd8c001fcf0a0786fed8bf86652871413701f975e64225ebd98578d6fd6bfea54614005f6ee068403977e1af512ba06b83d0550eda79bd589aef61cae96a5f9357946b53e89e1bfb70f2a425b6e6f92fef8a2efea148a9d907da21ab3f3abf7e263a9bf6faeca610f03c9e5aedc6036533bfc2a847d8a32963444704dbac2292d326a9ae8a0012a4aa690173e3d51514ffa260cbb8b357e3e6815b81f60eca215e85f7a901394d9ab6f70b9d29b6a6d26f290103a796c0170256461c1bcd22a02cc7cd6505ccec3c85cfdad1f96005f8ac3893b33fa8736e4cede858b6ed4e8004b716a16efb160bbd54560e0c4094b23b16a6bea8a72846ff37fac37eb5b0865ef1cb2e79cbaa07ff8f05e92535ca9a62dfd8ff651995b4fe9f230501f9920c9e8ca0b97ee51438940233b0a66056f6488a2925db1ef91a082d1eb545a8f1dfc5b3200115eb2ae07edef7e51f16171b18efe43fb956a93fd0bf9936dd51f709230da8e7f0edbe842cbf1b9ae2c704f5ca7769d254bf0de4506a342b40a559126c870f0e261b83b2ed7c243cb6bef2420b23f5796a45a87c1dcafc2d6d802934d988b0218f49dfbc02929c637e572e725657f6b1b73b337824a6bc661ed04a078e03206756171ff98043f3a99ed23f37c764383100775c6e253c46385015aa573e00f5ac86ecd8da904ff63bd0fb1a814827037ca6bfdaff85cab77c3042b8f0c5153ffba98d230e74a7af1495011a518a75e4a2dc52a7c1581f67ed984e9d0582379714b3e510038e280fe7a2952571295e6e0cf1f244c5015df0dbe3152c3c89694ec2daf1d896a9f2a2d13e69b4667300598b107505728c22f52fae56004fbde8f1a701d0982f2f33f27ab94363ac4787df22d64d847bedb67c8ae537ab4ef2f686ad2b2fd00f89ab7eb9e358f4d0486fac36dd01c252f48419c339ee82b87ed7dede9ec5373ef1d4e04dc633dd206435701f712f90cf62fba0f04210acc3c809441d0ef0756462ffd2eba296625811ceaa1a7b58d790a858c2744ffeecd37b71b7c2d457967f86fdf413d78364b22360109da8818577bcf8691df0cd0802a57152a7455cb06729f188f050c9b0abcccc8f7ae1399e51d7e3f806e3d3b57af6fc9699488a727a4ed39290e81fce26d23badb69596e05374a5830d0e7b34d901eec21685bbff4e44fcf8bc59f8a9891812eef3e96fb98c68d071e0ccaae912d123d80201f251298756cd78c7cf4a148f25801e1d09f4ca7fce188c48d7879709af6f89a6dd4839250ccade3ceb6229c16c0d220ae194a9eaa8036e5f82545633a5193e9388fae76341e8b9fbb8a9cf904a237045aa8a174bc8e871cc218e28c5cc87a3bfa04f9b0888c2d4eeece4d61bf62104a1bc9f60b1b1dd6010ac019580ed3563f8579db714e0cab42ce9e680e802feed7a145a00c4560aeee43e3486ab09ec41dc65475c682c9db10ee935936c1686cb3ce1ddd6e548060669b55babc3c1907898ba025a8375b5511e1843a04a1f16e80092ce988412768af502f20cf2e98c4435d89d45de5cc2a529897371296e8ae9099b676939940d4fbd0da157851d11c2759f0c459d029e0256889ae4eb734905cc67f310e92461af2905c097d9c7a626ffc4db6648107ec84c87ff355d0a8dae11b142ba925f6b2a1c87b14823e7fed17fb48e6929ae3b83489e0491caf09cfb6896eafda012977ca87b87ac4e55f5624b72b521d35c28fdaafad6d7a6bc349e002ad2af6e5c6a0ac6824600f08a1c2a529562070411d7e05c02b1388c51c5617202a51f655e7c98a57b634c956b47de9799c63d802a00ee9c9716a9968f578639ab119c54fc4e726a1fdbf4043bc5383db85c45019395efbd1695468b0cdd5db9b5b704fdc1bfe4288b3e09135f86936e91fb80eee43e64dda62184c5a0f6aba470657cdf106a7985e649133da1274c21eab016293a045aa09834d189394ab413e68a97b937bd598b0055b440f1ba29b42e3d52993c5cf23c013d488f8dc85281d8e1c80a57569428ebf8c30197b0d5158614ace74d050c2d062c3f80e4b58d6069255905692424e31c30fc4bc4a32cd782aad9a6bc15975260d4ba0c91dabf3961fe2206f589444a50f9312ca799ed72d7d1f465c7854d98f45c40421dbd1b8390660a27a4a26c3855bb0d8f33a5c9e1c1984e10892ca7e00ac354b9c73c5ccbf7c4c06943e94b57ed324825a4c14b323dc09f6b8a7089c8e9bc74bab44617c79d9aa4e6d3a81e979b440a1516e1ee3443879304ee338478e6127cafa3636d1a0bb14eb38ed429442e4d1f5c6bb4b16c2d561386e5116360a85d3d77f40151611bfe870a6c362602474b04c829241d91fdc8962403a6429ad7adfcb8ab5c385124d453faea54a8212bcd895030c0fa8b8ab74f0c74f744a68fa3669ebf0e372673eacef4a21746656e33dadde112c466b46d70880baca72fc9fba9e09be6ef4fe492ef0b143a240b8356c7e5597391562f22bc19ca3dcd0be80b0d77085c211ef5a9f4197ea2eacad68238099f26abf44f62f3500445e1a1106a170c992205837a8616e1a8e70881e2c61e7d6b9291b61afb5e58a73c7450b5e55f3ef539fb0577e1147dd6e71ca5afacabafdfae91ce6dc56930766cc413205665417f7c6f5fca4cdf40e9bf4fc84b8ab01a2150f4e8a0e01fc537471a66a6f7af0e3a19379ae9f9b13c7f705cb369861db056c834950f2f2f9d0cf4cd1ccb50a9b3a2fc1bb7cfb8348ac5d7e965a00cd2b6464fa8bceaedf786943052b7868ead0b4d9799d26639fa233803a3635931960de406e6a67d46aa3d8b822f4135002e9ee97319a7ea7f4b6af97e6a12e6ab116ca2b1f8ee84375465ca9629acd9e4cb096527621325d1a87e130581ab6656955666aef6d2586b0d5a9dfb3ced692ee6790e10980a1bf973c9505127337088d410b4ca5fd13ae21ad87c1a3ebd16cedce5428a689d0c53778b8a695c4b69803e70378830d01c43b45b0d17638a5ca75e71354410219da43468c5f376359bad6e2059a3526b260bde84b0cfd463d098437bd54667d1691330531d058507cce79819124863d5d68b9bcff18c8ac498add8245a103239329030e9f9404d9965768e74e96445f5d4c4caffbdb73a8f8a7326c1265dde223a01c73e5513332155c08b362c40508807b216ca0b4fb63bd748a0ce88b2c7138edab9200353e8d8c4ccdda00291c9233b7e66d4275f459a552ccfebc81a5e69f2dd1d5e0acd2251e96a891ea19d280169724d5c54634daba59a8e4a59bcdf78468279cb9ebb6039a0e0a54686435b813932bdd798e10620e839b0c67392c191d5c777883a596b5c3fbe50c1e07fa935e6b0280b5cc1830a313e1178a636d3fabe2fc7f79b62dafa5c7c78a927591039ad57fa8f7212e0e4e3bcaedc92485a92d0250d37d8e6ab637d7ee364e613236caf9829ea29df56ea9ab014fc21ff4a1457c9bfe7327b421159a045d369d0557c24c5c6943e6370b58d8a8c3b4a7c38c9656a2f364a76407bad98ce1cc733455b4d018f1be51a09fe18dbc03f1fe29f4d8cbb1ccfaa9e17989888067c13abd71c592b4408076a6359ca40646cef88245e54f96f4b3c4b11a440381927720e21a338ce5a5957aca824bd4f62a2fab2433cf66319310d9ee141b25ba70f343097d761ebe66ca5a0216df83491a4720243a5893feb43f88b137bbe505f513e6d81c4dafdd52c4bb4e18371ee58019d0d2f315c880f50675bb65b0392d09058242217832afbe50e4854ed4093ac46110d58082452d75730f25f342dce6cd9aec1a1405c0f09557cfb59660e8989e67ad662dff4618eb4a4d2852cae738ea1c4f632117a539e2047a071a9505347d00c57086b1f4f796fb92b24dc696b827c5b4be043b40e8c1b561f59d85bb02875058178c5d69f3784d50c0833e4ee14826d40773d17c4f61251f888874a347678f6e92456ac8ad944a50f40f960ed7fc08875f40319f098172aad0c84dc98cb18ffae67b0c90597628509e8014b319001398927b4c8fd718054f5b96b87ea01161eca9535f62b5089ccb25771e67c0046bb0b8ec7780907f0a7dcd9d47d2a3f704866582271cc703979cc0d4e4d111722e99c143fdf0655e9aafb5ed44087d2ccbda451668c34e95db424158f5cfec67d455fb56258edfc21aaf6e2b2d77c9d37a43d4e3822c6ea425d22f383428c7322091ca108f2488cf1275f9934b45c08e228704a12df49d24bd32653f0d2a4f17c7d47cf763a14c70d6f77917a5a4a016f9a4d60f1a4b0195c3d97b4931e1aefd7f6e47cef36506a83214b6f9a95005f2f22786bdba20b1653a96a59a914069321b8c1468cc7f279cdf69d52129441ab6b9d7d997c56214baa9b4841573df8f4c5e591786bf4ce616134ada02e74ef6a625afb9ef053414e466fe83f58d10da54776b3f19508deec3cbb38b7039ab844c288e4290c5893637465b30fe2a4df3700216d4613e82f7ac846c8980f7f2077e49cc9fcf045dadc882adc5dce865a14594d8ad603ffe01998459105a4b033c5fe1023f6ea06a7df226111e6964e7b4cc6ec6a01762791b0669b20890a65b68d6a7beaad92957edb33544dfa6b9042662ffafb4210bdfb39866069fe874dce27cfca733f72f8d7d4431e341d60f61840905064efd70b03605c237c2b31d939ae050aa0cfd5240d8d09d7ee56deb028bb794d09b9de26b4dc4515a29128780f885e22b6640e923a4eee3a5669f7c5e6af766db5328f6bb2c38b729c26794e385890032b669b155898fe6bdd887afce9a2957e2dd4e1c0f33fa9283a622a60560dcab3c32e31b98d6e70d2468283cda99c8d76da18e03cdd964bd5eeab7def6b380eb79bd837255aa2a42a140e42b63dd2ee332306d7d32e2bdd460a623e380d305bba90cfe748a04958388d7037697f830dd3e0ac21cdc6296d385fea249cc07d57caa5549fbeb28db5fd13478165a9b02b139402d906ca8eb2ff6aacc2d48ea0b8df1c807fd37ea26f38005addf2b7c64d772d52808386883b22c90886e7ee528e74f2622b54d83b1759eb2a02b0e288e06459b757dd34849befe9e4ea08ea6099a32819620013dd50d2dffa493b3d08de952206b1f465b5213efa1b94d794b7c49ff30c143d94970b07eb74242e015bd8af730ddb10665a3348ddef36ccc1282dae66d6e249bb4a8e4dbdbba6766710e98030d5170d9b8f60a7ac0b6a8df28f5fa3fb63439286c3545c119f0bffaf54f6ebeb41d814154e84b044fd4f67d327aaa904dc3a7bd2ce2c1e8bd0e3cd1f758a24ac63cd2267b85066ea48177a499875dd82013dc9b2c74aa19a1b8727f2459ffd0ff8fb903f0c509b50f08dfcc1fcddc782bac95eeaa60c7cf770345fa586466c9b2aa0efb904186a063093f55f00a4348ad1e36712b6903263d4bb1801f1a760ab6c6a8f654dbda0668e2734d1b35f93c0a72bdabddd2f6c7a4d802312a085221e363d944999d40ef3e341d042448071531b8958965e8bd13e2ca0ec6fc7ea7a475eec89f89d94eacb4812d773a864620c8737b5b734dee88b75384e2d1d8d75b0811bdffee8f104e5d7ebd0379167cdd48d60a5b6da4ea05c446c30978aaf47e6e876ce7d8d75770876958dff493f50ec5051fcae7652ecf053bfb7624c228c9902880c924784fe2d9184baa71e5ee95f0ad0dec9283ea924a09a5de23727d1920182857415f4cd2f39551e13623e23411d36202d0f0e00ae54c49c2803d0e7cbb8051e6d7891a687888312d676c15b2ad25b4f3aa446aafa03d1737479b6e558c180b0188967d5a39a97933f999c1b6814086bd165d4a731371db75c3374c0fe8bbc4e6f16cf4ea82665eea8f072970501a4afeb301f5d7b42ca9e5ce50e94ec9bb06329da001261a988253b432db1ec28698e9f9ce738065984eaa7612d37cc3c47a2bd949c53bd3ad9a5a04ff394f08a4153afa03ea366b0b0736f2dc9bcd28a839801b9c0d239527a1c41f851705f2a1cb5fe04106a79bd14d708768c8312c462d10e0a04e914310588ec344bf80e519a58952b08d4acd7b5f1d7decb62ab8661b4d49371f703d2915dc6583501d91ed1e9067be9a4d2a14999b6ebf1e8f8b1b6ba5114d0061c60e2d16dff47d701708864be2da1398af65200421b64bd0058e5707b50c22aa1241c4ad702a485864a4b6702b2516b30acc558b6f3328858178f2e5da160bcd222da8ecdd61e5c7122094e42ba43f38ab0407ca877dafd9de0b274dec463ba209d9b9b4f4943a9191e9ffadf108810b45b2568a64264acbf25252fc246e1ef6561ebd1ff795a9556906cb89684ad89b4de165e95e6d4e04b5be2b4aa4138bee4a36136087752ed3168863c434967257a16e658095a5ea5353e555a54e17f8ed562bac2fc1b4f37fc371e34686b3451d41a4a72b448003471d2fb03c3aa31940c9be383e034c0e414472b2e55f75bcebdcbedbc8f966321ef3137837e0a5d5e4b93ee297033aec611d3b0314a22f8a415281444808b473e2586aaabd0837c3fd6329a41be5fedaf1580927da902518d32fa7960a99d2c4643b95d43e80416485402929bbd27545935a35fed92216389c95ea3fd383f97f2a86233aa55c3f9df31cb358b297b82834778461b605b87ba6cc4a156bea731a70157829e9c4e2a4be2c710b127213c0bc606c753c034298b04b92acc1604a8b560ed04de420979eacdd4af6f66e40b2c234b2eeb2f3a42274656bd01bfdea79359eadae4b5903bae5ed8275a045f03e1301d8a6e27f47ac7914e6c6fbdfe5fb353c5082261665e49eb580817fb697b5292e65944ae3462b299f3e43af1594c0f628c5d63edf0772d85974dad0488883c9bfa070637cf1e57a5b143bc00a1eeef3196449b5327074aab8e7f86ef050ee300dd2d5e340f37a7b72c222d492f88914aec26f1464b0cdc51bd2530421f32765bc74e003dfaf25dae8e56a9715d7074410a45998a6f6a837efd481961929575b1ef0084846b0ce6ec51d7c369012fb1d6985e17f2b364e5bb8227c5ba3119fc147481abf0b608a2a61612cb03a3c009c03d7ac35cdbee4a1f5c0a40510ea48992d44a13e05c2becbe9f0b1041c9e395a674439133de4d74e90b2eb21d2f5aebf0421f977228471e36c94380ef30a7213416ae0836f010ca612ec98c823a9e23cad16c6861348495b4bed75f95758d55ed5dce10a77695633fc86690c9724aa3553239f182e90c1bfbbc1218eb11c42cd21905f17e5ff4e927682489e1a32ecf864d6d0ae17e204203d173b476272c7be662b20407dd3a5b8d3504ecef71f8974dbbcbdd2946021b15147a4129de8ac2581d1eaa9a8c545478d4e03a13b8afe303379f082eb5fb07e97660180d5776fe6f1ece61107283f4d5619da6d006bfa767e57680b2915bac2fdbedec2a2e665d2266478508defe81ad4b159436a670c9fa40e960e9db6e29fc1615e175016a98eda5c44a3aadd3d0e2fd8929d4dcebf0f28cae34bb4ed13a6c593b6bfa996c254b0ba96f75acaf55b87d4d670b9978c26235dc82af731386ab6b07c057948f03943198d7a0c1ce8365d3605ed5e3bbc28e6ae35354f822854760aef070e3ee9f7c5933c288058c5c55530d2d235afcdce618a08373fe3044d8574c3edd26be57186ee7db322bf0901cb46a7292b0d598928538a1797dba02a4d48c0461b6751c94d70a3cf64b963b58b4b1081dfbf894ddb50c6b08e33364679f12d43c456e7f704e50904562a884ccf39d53bff2918e12a04e4c85815c7384a8aea2e648ab2fd0aba4d96a51307281f2dc9eacbe22368781b4a401588a5dd8d4228136c390d4252f07a1bfe1db56d0a70a6ab5c57ba490f54fa1b3603a595f5d0e6d91738491dd77b4406996463ec369aa25d37ce9821a1be36d7a53a3394352737ef3b245ac632616fb25c3b26c3bd7287456e531fe1140e90e3e245f214bb8609c613d723b66748b172ea2cf30d6481e07f60b8a25f9260663a110ba5bb2995d443114dcfdf5924b1e3d7736625000ead863e31786b03fe7439bbae2dfed8a2474b56424a2262b33ec7b1a149aa0197773232be39e50537cae1ecea671fdec372025ad74e8b0930da1cd36fc1daf668d3380469fb8143869e270eabba24034081227b4340a24766db83c9c681cda7935e9120bcebde756572f34bd585ef996f1b9f86d59e9c6291621fec400a568d8e376ccbbb48ff893e63bc537a747712fcbe9c51e2669239987c5b7d2bdcccb007e13bd411d3343375f60c8e87a526bd301f1bf3a53fac4580b049f667a50ff3c1544473e86cacbbd7d6e7686211da05cb9fe04be7d4fda09fb0b45a229fb6d1f9cba0d5cc705c4d364ac5400908734d2de9349ac4e2c5a6ccc9b2efae75b1a0db75e5dfa5812246371b7cedbf5c5b6bca8894309cc63caa83d41ab66639743a8b5e1418135cf64cad92bd52d04358ee06ef2c939f7c7c76adc8607954e151f58b87b111ac324446f1ec98eb5bc5aa8b20e45fb9da2b254fd8714b2119dcd8eb4db35e0ef256aaaa5fa08af2bc80265a2d8821366522964fca80170f1097196fc168287e610e7b65163e1e88fd21655fcc6cb2eb7ebbb17157c46b7c58eb57794d0b4c3418d9aa24945d7e7fdc4af43d0e8b145b4a5d9a0ef6da2f5f66ebbda05c738b74c28d25f47786619f32d2040637bb040e1d0ba4ad9caca70c766ab44f4f848ff6bd29dd3ceea8b64f151fb0146ea586143ea6e1103e3d8e0f4e793c158a7754065d6d355d024d9e3387d462bb133dbdae04e4a52f44d074e104a13994657facd9a4111ed56ece8844d668b26d647a40b8b667450f0cc6bf5528a299edea411f550c124e6551c223c023f5808d94cd62271363c0028d55c28c4da1425893789cbc3dcb22fe16e3b32c03fde3bacf5891687b67ca9de788443cbfb0e9f0a54c434480c8d1135c3d108edc6ded7a2671136d79dc12edb0d5cea0241e1681ec244bd66615a3913b51ce191d3f822a7924b27b53fd507fb3da99a052246940a25c3204969f2d97b5829e3ca3380c991250d2dc2d321ffa70a488e18d75bef1f415826b3ce18c798d1fc486eb047a4644000bd4469abf993ec225d12e6ea8845f1127adf083894a33ea990b594a9021309cb20418f261609ab9cdd5541f8395d51786cded69efe364315658b0eddd2398da9041b378a8daf332d81cb72626526483cb966c27bb4ab6778736c9a63a5cf4608c932dab933c07a195f68749f3e3f44288a4d1661d3817f36dc9bdd6b38c0afe4063a5fd433d03341c05c1d21dc5baaf179d8c217b8e5ff669e54bf1c7b0d5a35cf1920d339c9cfa30434052fe4e747497585588864cf6722543a07dd58ed9af02b215ed3ec7c37839b0b24f0d8d9bc18df6ea00a0db0a60947c2b5400b34e0056b9bf7ce870c8fa42802de0dfbb4073b816e1b90af268b7b428008add5531aeb0a1f47a26c1be7bd752a0030cb40728ea3bbd15c05879451c53922c2796dfcc3f4048671f43d00884ee8a73eb65021b2dab88165140121049633b2f3d7fda65cba4358de9bd481c45c108aa25eebd7cf4b8a83f8f595b52990124cb1ef36606d82124e9ed062263de546892d14c76270ab1a706e120459d971e60dea2d6ecfac0971116aa16ae34c335e12b740de28b72f392037055fb2b9484f2a2a78d81227acb9b2081d150bedc565265c79a86e68ef1f65d082f84627ad3b44b202d816a56619e31e71a28bf65cb104babd54bf35ead2365a96196d10951f230c1f801ca5cec3076099d123514a80849fed2a09b16308ea2e4cc71504a99d0a844b7a449ec0035df00e55c1744e0a255bc69bb6546833044f8bdc9e75b09f0116e7a5c48ab98657d4f608c34a500b6ca48b8d08499406643e142ed423faad9e267c9ba2c3840475ed0158939831bab02b2175e6c24558b150f94500c894065d5f9f649f8f0dbc248aad894506b12a3475a8f98713e701c1216c271fb57de275b3837f0c43b9be9744d8bd23817760d119c0c7a6ee3ef76331852066316b1379752b890318e7fdc96ea6336e90f2dd761a577fcb76e61bf1dd67510fa2018e2083fa9fe49a4ebcef67ad7b8898744053fb03c2631cff42702452547d7876e38cc46c3c62876ce278c92803a8613dc4f34a0945719e6fab87a205dbf94620486ad7d956636198c4dba41ef8e125c72a3e8fd19619b539644adc5ad72309b7c08d930cf7cd0cb2bdde8e027e3d9e538966936f2b5e36f273924fa9d4f530d5cf4e7ceadca6056251f0f6a33210036938658ce2a2d0ec2e55e11f7c3f30f9a0b699da808f49909c43ac85cd10a9ed9477abbed0541b8234846f345f1cecbb29ebbfd4079bc65021279fdb0523ba93846636d4172917a070591b07fa8b4f4d53fd5289b804f851d41b418bbe5c191113837f475b9786901a84ac23e9eb032e4774d40057504e97a69338fc21c00c4a2b5bc3c239b188521235c3bc7528c15c3b9ebad8a402b62bca8f12cb5dc9e3f088e9ad949b74a3031639a07c8e88c9a7687211c15291fddf826dfea34fbc84cb2836c47089910d962792594fc640af4dc641c2c675422627a01c86cc7f183131c3e68e381127a3966a4cafed808ce8b9530276772b09814ccf6a203aa405275e3bd6f811aac6b993b1dc18df49ce518356ff345b1a5b19034d3440af03bebc89760cc095e87bebff008c301bf61c1cf211245bd9408c4a52688991345503bd4d159d6017cd8c6fc06dfdb60cca75bc007667b2414831ed25a27411e89fcd184abda660281fc6126e7152b0226cceef2cba62af89e14f31ae2b42c12d6b6ca87e4a09052060d7e907fa908041f5a9c901fd9ddb016ae8427008a7d205ea8e2a9ff798a924f94312d08619f9d4cf017da267171da2006255c92cc67300aa6fca4621c13eab3633c7397df4bee74d9851e5c283f95a4224a0e4b354f675e18ac58fcfdbf43e5dc0683f6c9c4a9c9ac825a33635fcb2dc9af884345cc10091042f1bad15338e06c3d1dd26cf054ab2218e61e5dfb03de9601c5d75472e447fc865df6c3dfaf5e3d82c6d347aa5d94289da541a14f425221fe3041de7b80d35d1cbc8f50556b6906a19022ef32c947329a540a136ed2913129ae7f9b0ebe36423d295e2225834310703a9edcad54d1992235059ec11c59193046af4c7955ad847349743ab88b9f3a503113c73a8f41cfafeb79e8a896cc6627a2fc53bade0d1b0db8193864adb98438e7221ce8b0ca22abbe44a96ee020cc0678a46ac468fa5fcbf0110e8b81afece20994c8448a3e1e596686bf461ea20cce6321b458929d62939f8696d2351d6efcca88d6214ccbade96afe5867c8b006e1cddf09f148cb85b7dce03d5e07c43007047953922e4974d024d44bf1e08a0fa6168199086901f6ddae57cbc03bed2445156c63adb2a8e6fd8a1aed4c0b1e258bf1dfdd4fb811f598a38996b8031cc3a693a6cc52848efda5131812489883902275c2eb64492fea331112627a478ef1458978ca5c814aecdc99016bf27f10153132ef828421fc64b38ee05f881f82e26a7912917d94a90d762fa46522f069207ed505eab8c6417bb358a650faf230a3bb0e93f514d796a003988c9bdbe306d88f64b7dd619f8bc9e02455f257031db557cea684a91709b2ca63d87b2c247c54bd61fac18ec18ec1ebb2d1c1dfa64e5ed33abebb125c64fee09482828c765cf1e5c7347e7a84a925e3e2e817e11ca2093ff4c870479e7c2f9ea198e88586f9b89b89ab53cd04999a8c9a3295063bc7b87849a96cbbf5018ae1b8410477a078080d2ec12d9df14153fe00f61582e04e29f4dc637e422341dc682161e25160d38d1fe9d26b47ee1286fa951acdc3c3d24bac5ccaf4b58353753b5452d58bac062fd2e045b8012bbb9f0c5ef5ee544d20c0aa35faf48e2f11a24e366caa4f1b44101d14555c9d5b3a4e94c8f73a198a53f386cbfafd79bbf558b5fd220006bf10c3ec1aaddfd8c97e543602108e7fd2259981e80ab37cf00b62c9a82c243c0fb6abfd6388c562215aa6bdbae91de948e748b0bc98b254d28862cf90027d5b2edc21a21fa2967509e69d4b2dd9eb0aab479ca7844349f21d3e44a05073ad28281958caec1ef1b01297df4ce802d5288f9e8252032e91168d81801bdc3f3b9e78b76a433d8b29298200ec9eb3f020c2a03ea30ce6c5940d855a503e5fe7a5aac928e660524ce6a8dd41e39b9f008cb02c3ea6d1408a17fbae4a278ef575bb643c1c30768e343677bf557ecd62a02089215c0e671b5c07a120420deba5cce118c24d8b62609915bee2da54c522699023207bd069e067c33ad4b5b1c6e766e766ea86507c392a4b5516b24403dd484825a3b6a484f9ad26d4b41dd3fb705a1891096f0b4a016643317e48c304704ad0eeadf7a820a83e0eedad26d9be3ae2d39228e694f95a8dde368aa6f2da801eea6b2ec6078493adb43cafce08ffc0c53664802129de22684ae236a6e49cfb4209ad69e9070a9a5c4dacd76eefbeb3e623bd731bedc299feb6c0f941b0ea2866474741dd26ded6b4c4d6ab6d37c4613f08594228f90d1ca2312d28289888915c8abd28054c78cebc3c6658e816c5f3a85031718fb4e356ecdad2cbd2048734cfda8b283f95897847a26dd21afe418c8461cf39da23c2f30e2949bcfd11cdca61ccc8b36fb71e18e952b7dbc706507942efc31747bc4a33b9574b41b250f0f08ae0efc7699d280baf0a553f1a8c84fbb334021025d87eaddfee05f410c474a422963110b90784f8a82beb8af2663a4cb4f8e98784f5820c5bd9111becc8043cf643810d03305b82f016f889b311302dc8cc6cd6a6c80d8ff4b0a078df76f85c9e4171f2c19a1bb270e0a924b3107a553ed2facf18df613ab41cde4e51c1aa8b7c9d0ac06e48d34f470555555554577b8279d6a2f23ea81703bed5c16937bc659728cd2e4979901f741a7dec931ee2bbee1fabd6fcffaf05e47de8a631c4e7f06300df4c332d0aead38e5de511e34b8fbdeb176dbb30f779f95d98e75e1e1f7bdbb2b65862d985c77d775df5738c637d4a7f6cf467160f736dd8e9a6f8eda91868aa24a000a159028f5a0e809a39b4c5ef7813983a638ef7f7270bb5570fb1bca39e78a5ce00197dbfd84d00223ee5811e80119b4875c54f7909b8d6bbfc57531a75e4cbd649a1a82ea414471a23f412de23e17729f2371211fba4ffee4c6ec4c4524f69038989b18f7217140df34fb861c4c3d52f946c9d1bca3a32751bef0279a06c691077122511cc883dc08f41a244744ef8997e42db98fe7a6fdfbf73ec5839abd28f7a55e949a4e3d16d4f73293d790ccc2f42f1a3272ad87ed2ec648add8b8106bbe1f01160dd6c39f3bdebbaf2864f91b63555572661562405c3a987e7a4475d1817fb8c924b43aef5ad2250ea1ce60236d9cdff0ac8b50c8f4af9ef94444eb41bdf40c6c2965c50f2184f02bcc075b9b9a4ef54b205da83f3ad56f7242edee6bf24b8ca5fc2bd9470f90a1cd7ab815e7c82abec4e2cfd9a68c0c4dcaafacac7ccbcf15ac054b5951571aa63cd316fb3020ede67d135ac1b29ab55b1f109e1e4d49b526a5fa1e48e37134295f4320e46854be63542854ad4e06eabbe561fc0a0663c5a661acacacb4b43c8c9f9d82f14c71603cb7c0f819980f6e918161539d6a192b2b56e7d9506560efa230171aac5ff915be3ad08f6177700c88bf8d83e923ea6735382d36c52244cd38ca8f9e61f9aeaa8a85a7c248b1dc30993c3dcbca3396d52b6d5a0573d1a17dcaa7d81f6e6c5c3d615943e2f65799c43017f701083a62c473f3e4cbc75e0a869eb1be6748f50c7fa7fa5f3ad5af81772b9b236db4ef3a468da83430e266ad67a21c8d4d8d836939d495cad174c9c18154bf73e3bf730383a8fc2488173e08e183f2bd97b15ce7c31d59e21ee072510b88ee112232477c6e7b1ced6dda92db28ceb5838a1db480e726dea04620547fa60f883aa8de2ea859bd3a76b05cc831d03d772f0dd35e92fa3793f15922f3d2de8b4426f78c06e0cd610980d9324cf37ce2cc88a888254644442d26d51740911244454a20a12328522249911244454a202952024911f77c41e09d656998ae11a84e7e48cf7cb7665577becbc9e6188ef7598777c60bfa9df28ab3baa4bbd3baaa392f8bea98d735a90ef7562563e318fedb3bae390d5a0eab4a710cbf7430ed6ae64a7e663d5b95956355cfa56fe15c777777b76b251e4b4a655979cd316ce7d8dfd65a737f0efaa0b5d6e3b677cddbb9083869adb5f6fef58061e4b0b8a3640a0b73df50afd7dce1737f4fc1f58670df931104005e3005572b41683185d9d300232c8c000916464682008108083f7849c10080a123507208a86888e7c6b85c74840b249a8c52c6207cb144ad2e17254185205477b92889252e54bf5c9484132e10d4be5c9404170ffa7b5b48028b7bc9142591e45e978b92185a42c6bdf7de11ee7befbd578477c410aaaaaaaa6ac8f3103ce82f29180650492d66d1911c1c8122c506845ec0040b2a48601484103082f43031448a2746461ca10a1ea02410928484255974c10650048182d2842c9470852496aca881e3591962001380228a2d6401740324435da88152aa2a41473c2182f9847aea02154e48e1661fe404164b70e208c709a318a1bf867affe2978b688074b39789014a881782aaaaaa0a06310410f4867aadc8d1ad978b8a1025808a251c29c2098e7064022ebc51258223285380a285f7de7b959027e4bed75a6bd6575fbd87c433e229e1044a500174d98416b3a88926c4011425d1e415357174e5e5a2268c9e64724516498cf081204ca10b9e2d6043e8a420094d0c45515202165f0060073faef8b18196d597f663881d236e2005291cf1c1901e2d6881c60b9c10411045b4e042115948321334a936630dbee3c89f34a9f6f351354d7aaaace95a8e28c637136bb7e76fe8b734691afafd2d47cdb133653bb776aadf27bc26c779bd4dbff8de9b1f27c79fd81cead47ca261dac19fed2c0bdb615db449c5c1d1344a9e2acc65f02ad31c9a4b6033a85315f688e4a9c2e6ad5891d3c9549de49df58ab7b6854dec415aedb43868099fca14a9f52fda9cea5ffcf9f1a785f1b5e28c473756d547ac7a1366fd104b4f0bc655e4fa530bd253aca5491ba0df44719e6d397a6223c8c61236846c1849a13bacfb6852a554078dfbac8d20d75226f62cacdd39e38a1833d6ac76e7d07ca2531d6314aafb88550cc4a33b6d8efbf8b188ca57c6222a06e2d1cd99ef3f6f116a76e2c1b253d08d3c9c83c6ed9f9867f1e8593f5f87bcd3b6b812d4cc46cbd1b511a483c63df1704c67f1c473fb6d5cc4dc5b2d47b7dfffc4dacf2147f37ae876bb2cc3e24a46f82675dd6898e263d79d51c3a8462bae0faddd8eb6b97f565a0ec092e5325a00db5fe69c0c74a76aa9fd7beff1ec6236c70e8bc92f596c377bff266a3bea56f71faa532807f39aa571a54851ab49a9f66712751f2a1eb92aa40c14c9c4d27d32ee7b425aa448157801052c90e0420817aee7bd294e450c5971fb5fcfd4dbdf52ee30810226f04069a88b24943810d01118618400041d31e2b9712b4349dc8a77022142401a52020442c0a1c10c9e48cf6289124bcc00a96806421842f8208434e27b105ef0a5a1f02f560c03d3800c2d7f877fa53b90c822e372304f5ad4561bbfe7ef3de73cc0c2c2c2391ac6afaeb9e6da734ce5943ffb37773d7f4ee73a7864362a7692f01229788916b59efc01a6292aa7985db7a4d9841a50eb597aa274547352aafcceb976fd9973ce35f34e03a2b58be2cd3cf7ee3b4814aad618ad7be7ee6f0bf0593a689aa2ba7777e39e0ff3d340b1d4e7ae4ec9e79c0339e71a5777cfc1d0c84ac4bcaca4eb2debdb8d7559f2e765c16f715a52ea408a18abaaaaaaaaaa98955c09bfbd8bff3e203bc660beefd737fcf35d3c389aeb69e3511280c6eeb2198de6ac0fed66f58573542f9f1f3608d09f1608171ddacdfc76336dcf7543bfe7dd04993f84bc694c80f817d66e9ae6f06ea81d4288d3cdfcbe89108769990910a1926bbd0ea4b891072bb992a8c6d5d4c8c8a452ff28946529b9d5c3296ee4c144577ef59685900555e910b5eae84474ee39282b1ace67f51e4ffee007e43a6b3537833999ddfb17da672edf7bee758ad97d7154e5e5a223495308155e2e3a72051747acf0c747aa68479e705240c98aaa2caf3ef85095a5ba5cd4441737abef2da03eb58a2350273563a146a03e298a44917eeefbe99cc031ef33d75cf08d2754fd6190eaa215aadb8c8f9638e67dcf030af2a2f60321d1a9e7eefe808854f76edebfe7223bf5aef780e08fc3e09b1db363c7ecbedbdbdbbb7db465c7a85ad3a9f6a62b547e1845e5af446aa3a066af8936c42f91aad55ec62507f8f265fc013e8418df44f8d0fe10976e9ac75af2228a75c9010271b981d6c5e546caafdce53dcb085df3a747f2b4283c404142434888da12d213a5a52897cd7e5acbd61a1907d33e62dd766969e83200de8ebf4804928b8222e8b656c38c8224481017d980c96dabd3bdd39a0f935f32f8e4f6cfa602c760dd05dfa02fe8f285444a18a6bfe1d191dbb007b77180410e06b36e3da2662f2808fec8a09682ea83413215edd2928dd24b4254f719fc41452bd48c91fa09591314aa4b77945ee298be42cd20d2ed5f5aba5ec027afe10aaae6691ece7139a67d6beddc39e7aedb6aabad6ed756562721f56f115bdcacc6263cd3bae430815c3f7fe786fece4d7b1bced1d4a679d82111ba28c7d33dfdd33c2dd4434888daa88f9a4769298ae3e9691e54a35032a956227562d2a84ef72edd7edb771024b77d0f7592a64111b54fcf701112ba87a88abb84842d6ed64fb43b1413076fc3a98101436c9854bd635eeb5909d0152ed31df3baf833948b6a1a37a82410f2d3be9aa0f67096e159b0aa1cc585ea6eab0ff27d00c173adafde7be855bce1de754ac64f6dcd11596d229afc82a30687906bef6eef76724a2965dbb6c413468c2c19516a41ee4c3ac5f7a5cc808426545c81c8759bc95ce1450c9ee08e4e42a85c1483276ee688808838a29ee1221818ddf66e497347aec96d1fc4399c12ba444dd116541f74ea753be098f64e09df689fa5929ac840e8662d48062c637c52365aeb0ee654c6a9a63b2ef7e80ee618f7cfca50a23aeb6fe39ae248eb42837f5f9dfaaceef0774be35947a467dabec8f8a94ea6a2a0729532c3165f48a4fa7ec62635734441954b0e1510f614171dac9f3fed0fd55bd5efdcd838171de80fd6d3e79bd317356b41433de3a3052d61745b27e1e866cd8865ade79bcabae430fbab0ffe3cf41099d4ac5ee7e1cef947d9296717e6f63cf440428347a767b86809a1ebde869628f20643107479f49d010a111b600882aec461f8f121d6df188e86f197f0db855686044aef664c45e522289a643af0f65085a467da06ea2579801042082184104208210c20841042082184104208e10bec62f20beac9dce69ceb2173d52065ad28d47f8a5f5b1523d57d0d7fbd25350890c19182e15f98064bfb81c2e497cc8faeff7c3d032184d6454af818e7880fe5132e372fda17ce29ce64aa25125c875d708c2f718cbffb8a69fac7c1380aab327eb8275ef06a18fffe41a16afd71ce390823cb8b3907c5711447d2e7acec14f832ce2d3519a6c039a8e0aec03457768a7133b794bd7033b714d9611616bfc2e2430c06a9ac0ce0cf80ee627ce7207450dae7afda62f24be61a0feff1a00744eefc49e9bf22d54b8a03dff4feafc9abcdea59d3e99c73488610906befe7b3a3314dcc05e9763c2957a7e067ee07a81f378c3b05e452accda4a977fc9df3e75f6f5973ceb769a738f129564309a5d424a9a4945249e3132830f4653fa1971ccc0f111310fde11ca7224c274ae9dbf4c9447bc8c1a804c9f6e63a1890f28b05948919b413308c77c1511c15b7832f8cbfa65a3f43ddee0738184f41cdcc7716c9c2f2cc0a60f91f0dd3f252ca685bbea52105d58c897a861a1e879eb91e93339501d6a6535e43a7bc53d647ebc29d0f785ced8991aeaffc84d1807c70cc8786e9c860383ae533d4d0b8d63affbdf7cd14a7be4b4abd09210d42ad3fdfc5f4d5f44c26d358cd15b51f87ade994a7d84c9a2cddf1d79f622d08bbb066a4538fe460fc1bd2659d6d366b481c23d4a966a4538e4450a73cc69db631e511e3b63f3b539342adffba5b52a71c4985092892dc9a2100070cb3d6afd7adfef5b967284e3dd5d4c8c85c364ba5a6cd1ed5b655625033762042d7bf05e919be0c70390686954ab5213992ab6ed90c01edc6bfa667b8c60f589aa615003f83e1fa8b57565624a086d4294fea947f95829ac98674db751005e2ed3427c309d5abfe7d5be21c5d304d03352cdc9775104278deb315d640ee0e7ae648aefb37c4310ec8c1b81bfefa0b7237314ac1f56db61f93c8eecc0d42e7d62eefca9bbdfb5a14ae2ccb66d5acaa8a23b363ee264c8fce7d603ae75c07a94c81597d7f93f27d65e57b8fead48341e2a8ef5f18e6bdbbaab219bfb4ef965fed07253ef9207495747787d01f3eb4af538e7904cccc8f9999f93133333b5799991fb3731e8499df4b4d912a4111ccfc98f93d7ceecf98498aea9e79c963368246154a508221481a0d07f2256b59ba1d0577f7f7b1089546168f3a1ec966e311c7b453d08cec14749bada1a4f67b57a75a968498340ee33fc338a6e3b93723e71b1066bf0eff07dd5760be30e789524a29a594524a29a594d22b2811a80f1d4285ae20c2637925a1aa73dffd9ec37ac8dc06047a447da8900ff5a14274081d42ada043e811b5a2a7a7e772c2101fe2437cbaf40a5a9712b29ac96ac5e9d55a1da6b8946e4fa55d9de286d79dcae99a2e531e8d87e7369e7957e86582efb9bbfb7bcfddff396667669f31660c8ac3eecc97125a54525658ae1830585a1e8ae2c498322e66e7feeeb697412f19ce59a7f20446091122640ab3b5e6eef2f79ebb6ccc7c7da02da92e6366be969031335fe90fc2ca1d7e64e6cf5efb401ba2c9e043bb5d5555e52e9ffbccfdb93f17a1830d9a84d0f7de537aaf3860668ee94014170184d0ddfddd9f7b63ae925e4b70192aa5b64a4a9b2b8f88dafea9501c7e76777ff45af1b73893d55d8d2b30c1c4933c29a9b5244ff2a424098374a0031d802145912a9e93e7c489734e9e93e7c4893f21aa0e1d3a5a9a70cfc2b370553c27cf8913e79c3c274a267a7a6da80d7940fea8a4853578d02fe0c45f1510429c67d92fe0c475e059f8029cf8059cf8029cf8059cf8029cf8059cd006830b76a0768f3abde06c400e06a748fb71302de8c2c29a2ef482dadea6af0ac88f284178789a4feb496a3d17a50dd3e9216989ba041e60811d9ef498940725133dc146d486e4f3371a341a176a43fe04c35494876d1cf34e23e8f1a3214ce3400e54825bf5543d465c482e553d550f902321bf905164941c7038aa3545c58fb810c3b4c7c09db88d74b9b52126b50de9309472391a38c5ed36543917127221ab46456585a56148a570c8c8acacb0c0683450a8977f168a53047e075518366843cd09a69151649428ae0bd55baf2419457ed134d0ba4f4fd5e33d954fd3b81117d2e1a293d2ebe8b916219c73ce5b0f0e337f2b99fe5a6b4d8724ff3ea2397781ee002cddfed914c7e246ad7f92a9f5b409b5be426abdbff730f681e2544fad0fa9f6f1ab7c89040a24503ccb557a303107611408bd807009c22740a804a16d50b20645560ffd5dc57a9e9ff295be7ba6a9afa2425f0546055aa762b3eba9cabf67ac86926ad91ed7b54e7f59fe14ac86923aad8ebbd6e99fcd72e4bf6bd99c93b5ae7f4af529366b3e39d55b1f63db6cc7afa337f8952af0d9a619839fba2ee14be9c331c072dde6c818dfa1408192b213238c51e59b9d0d83b011d1a038c581364e054b4989ad3528f14108df1b47bf4c1edd7ea3a9ef58aeac0ec67d11ea80fa95ad589527ac7a8941d92929df7ae970ae29affaef681c101b1d83e264ba4e3169948af2f7eeeeeefebe613e5cc4c075dde6bce917904779b85b3dc569cddd20e3682c8bf9efc4f8ee63e32056d96c274eee99d6c3f7fd6b8ecde766bcb869fc9289afddbe434175dfddedaeffc32c7c5823a2dd78bfe33bd7fd5940179fbe116940eefd84c91326bf622cdd73b939dbb22c9d6e2c87fac9bdfd3b5a397dba886832cc8f5d1fdaac3bd2d91ee1b4391d7780b4aba75d403773d36aedea6932b4ebe7663a7db9d7691bfcf2b9ae3efc676774f3a19bfe620f97ee7134efe7b2997c574fbc7c5aa6d3d9e573db35ff74a9acbcbf4a8bd7d306e2d7a9087fc5bea077cdeeee69a18b33de0f12a7f7e35eb3efaf14ac86516d3c3746f9b1c5e83e7ed6e3ba8870ff1663ec467bfc69bc7a5cf0fd0b72f1b6cf74e2a56fb2e85f92c68a9db0a7136f7c9395efb2d765e158d0be9d9416a3497b7f9619d98bccbf3b7617f6ec3243068dfe39ad18a34e5b580ebddc2d7feb856ff1a2356268325cdf6c3cac41df867475871a1f6bd89cf835a0ad7707889381efacf3ac5fa7736a3c1017baf8fc659a0ceeb356e3ddc7e0e467d5c3b799933aaee338aeb43a7da3cdf1aff1f0b3ca12b90d9fcdfaa2c1bf460d6a75fa7a86e3b6df41ce6a03b531b41beddd66edbe60759abe7b9b67d7f273429bf1f08737c84098d9f876eda1cd815fe34f1e03c60afcc63ec3715d66c3bef074877f4eb336fc77b01966331cff420c4d06876fc3b92577468c2f8597ba43e85fc3c6d06eb40c6cccbdff9f8bcde40c8b42591b07f33e2586cd502d36439d2c3b181876c5aab8538a7530d54e7630523afab3af189a0c59c3d13336c3c1cc4cae5ba8e3fef1d9715cc7c36514fe0ef46d50a8685f7cd874fcd2b7bed1879f3dba03fd479f72944ca7637044dcdddd636837a047140a4ead25f1b9347aa62184d0bfe537ef6b3e9d7636a7fdf50f4a9bbd076557d54f66ebd97aa594ef6d5cbb1e88fb784af962d67e5a4e9b13ffaa7d43b559dfeb536cd62de35f8f86eb61d9bbf09f47fbd7fae1cb9a8f434a779cfed99cf7d75f27585f9d6d4f6f395bad65df9fe08c2fb6f6306fff5a531ef35e0d6b3ded46f58ebdc7e07ceecff09bb459bbfedc73f669ce7bf9d14adb88683728b52ef12febe47bf62e7c79d9acc54bcab71e3e570eef7b3742972f6eba3a8527f7ba2b0f5fe81ae072110e96ee52e5221c1cdd79db5358af3759589b4c21e66f61eda3e9d9d154ca29d4f4733acbb22c2c4742150b3af82e5a2b2a1f61a6d3cd12bbad8aca676f73dccb6f9be9646de30e901f179ab21f6e7fb36fe360667a9dce517920aef57366f061674de9663a4d71b276adacafca37535f6775fa42a31eed6c0e7c956f9b3528d7f4dcb7db662695c6642e67838c0f6db42ef2db9bbe3a9a930d3ce0f747db4c9f3528d5e6f4abfc69a5f69b60b44cc799e80ef8392b4fe90dd7852fd3e37ad7f4f39dc5047fe5a2388d483bbff00657317deb895fbd09837ce1c7e72aaf8c53c616a5fb184d91882643d66e9cc9605b3683b6c7754d9f59df6c33d91cdb2c68437c4bc735cac3bac8b7bedd3b1a99f8dddeb520ddd13ec764b3e6f486ebb69779264bb36ef1a76d5683722bec46cce19519072efc0e5c08ff4a1ef3c6b64415106d07b21061f24b110e8a70007493f85c19978ba258bab32f0f7a4838a026d26e6bfe33b236df7dcbded5e96875baf944f1e40ae072511448e88ef6ac67d337bdb0ea2fbeaeb4598fcbb2598fcb7a4777e4c09f366b336a18d51e57d6e37a7efd1b114d86cae6c47fef5c0e7cbf36ed17ba4f23a2dd687ff573325df85fb04b85894ac3506cf00302c939de7b8f9bb501cfcdae0b09958ba058ba3d45aad635d765e0ff031cca6041cd640cc034cf0460ff0c01d77f0280697818c0f51d6ef7d033addaac3d0f3d3ae5dfb01e325692e9a1871e3ae5ac8462a99d0a9d79a8d4cd5665350b15d100004107b314000028100c08c422a150289087494c7e14800c898e427a561a88b33089511c638831c418000c0000802120323333548302445894ec00ac1008386fcfd46dd491856a3926316511e122ac890104d6304de4145c3db184a38deabbfeb1e5b8d526182587d2120c25c368520c1de5ed6c2e49d9841a83a18089ed42330f27d08620c5a3860777cf9159de1a4170476894a4226301e0c6ed4d2eeb63e4286ccc1d5b935278ddf85694fb849e40b0204506bd88ffeda4a79106c18df3b81a0d234f06485d53189cf41e9298bd4ed25d88e1a6570235bc3e6cb72fceee41d8a2000a6ec52bd7c5f327e52c14cd66f7ff4e26bd18349837a760978c3dadee18fb8e87723c51633c2fc13f9f7760a20ba89d5d924d2f615d12afa7371657464318c2e94b6c8e115ee3696153f36ca34351f8eac8f2a09a5822f8cdf66aa9df5e86b5b506bd7b12fe560aa96827c98680285efbc814ea1b7c6c31c75e8e53379946221d1c728a008ceab963fb393705c492352e1db3cc494291eb5e6230968e8b4c11582e3c6652c79955627b40645466ed5b42bf723fb24ea1392e64484573200d877b6ef37569d83c5de670e5bae0c2862960e815b0dad3848ae8d3e86ea19dc02b452a398fe83e5c72e83ec8fd15884147157cdc943df235ba8c8a130b2daca9d548e4ffa13dca2b702d940397495fa0e218835f9dc0eb07fdcd4942989ebc1c0ddd107b567ee97d007642f2ce6d286dd486c4c6816e7cbf8caf7a612e320631a6391bf4ec51e0dcd6fc43db3d108b3ca80c466be425ac1b2360fbd65241f570939083a2775afce1ac47773c878790754f05cc4319dccc9379bbab20bb60c54e66b3296e4a415a6b1415da52256d11f822dca02b993806e77746af1d0d98729148a5af65a0a463fd98fa88b44c5aec68748ac6cc1bb07e7eb2e698bd0afdf3010569c76458147843c8660b72e40009febc5d6a77bd190d1715e44f01c775dcf50551034417eb29470d5cf68af8f36a0727820612755eb70ff3d07c7ea3aa7e4a30a40e36968f61d99ad3dc9f00b469e8bbce4cdd0ed8d9513b213763cc1e4d115482a8da0b2702ed2b1b6cc6d7cd68cffaa609a6cebd6eddb580ae518a57cfaf7044fa750d1c896b5c21462de5be7324fb6f9432b864a30efbe9c3b4e43faaf9984835b9aea941fc6c3458a87b20eaba11bb23eedbe08206d5428c4b43beedbd1efe9654c38180e1da025a05f6ddc6fc28d731a503f849217a68c052b34b7e99d35046480b488aacf645123aec42fd3fbfad2306af7f6292cb5cbf115ccd6156d7725ef8afc962bb3fbfa68705188e0e295442fd4d8ab094fcd070e0ea3ff69307007062cb380917979b491da412da780868ffa6e1a0216b6525097054f36d5a86e070379cc917d0d6668d5d3ba099567008c891184773adf364d8f1a6f25d98230166e94c8b3b5ecbf39da474da026def69f5ac4c5d3a3d941dcd9eee460fc7a89348e9e202ff561851e5bcf111f328c808d5c570cb7a627b0934b4b846f6444a4b9e1edc22121be8328186cf03f4c75cfbcf1b88c0e1900f82453db59e4cac18fe8e26828cecdced584b945fcdc7b02bcc3cbb5fb54b3a0e02e526abc94c2a018fd2a1f0d923d2b8a1eb54dee725bbaa752decce8e047eddd5ecdd1079ce27ac6a28b811ef94afc7823c54099369b8a91f8253a1540b53c74a13640479281261a1b38571cd76d673f0a04f8b75b468e215d400f83f06c1d0df25c077347d5bb85fa7c35bf0bea000f8ecae01104b9e25018501101aee44f3e8862de9f14ed7a5ac7199e04a4034e509e88e015bae6f38c20e1a9fb0d8c707bc51c2f1e04781af1c6914e4385a3034675e3f32e5ef866faaadb81818ee5198b664253f4852b70e383c60daa5708c8a75c1275a16874e899b71bb8e8b8881879b62af5b2e75769ddcdcd6d67ffed4d5402963939c9fc7d2ab1afb5e49c160fba8b1c0747aa3b8086dcdbda5d379dfd3d66bac5645a76ba3e8e8af7ef16b69b9214fd80be1d7fa85c165716599734602fc3dc04dad67724004a3052ea781b165676059dc750dc3054eee508a2e13ea21db882128f446fcaa50df96805240ef284ea73b0b4cff38fa368cb359a760d5c42d4a3449016924a9f9a3a24c1f1cd6e1d0ee71c1b8418c12e7ad400d761b60637738faffa41e8a6b2a238f630b82ade3702271026530ac73a1584d0ec0c44b2d8bf74ba8ffbf0c9f24d7bf05196491d2669f0e46caf344706c05e8eec55488385e09a290b3111dda1613cf888294fca7c1bf13b1e980b80d801febd5a26a6021f3c911d95d0d55154d8c3fe6324995123659090aff983f67e5f3dc1a78802984cd24ab85b3068e08dabacc396371cddcf136775ae526e1014cf01c7f9b822cc33d93c5efac3ee95236aa602eb146bf6edf915852ed15f6d3d64df218348bd222848cb5d0eaac8fbebd2338dea2df5e9ca3d845c3479063f080ac0ccd8fef68d34e503bd63519809fa4ba0cf2aaa80b155827297ad085e21dd586ae92017645ccb9024e20a97bcce1d5eebb44ecf3a87952d0efdab77fe9f2ca9c9f7f7f40cc2386799e3b71e808e20759bb46332751f11c1422c972e0c48c60ae9732fea2629651765788d60519856520cadc56400ee6c4b6e8234a780ed133eb3f30e236c69aae225b53287b56e800a086a882d52447cc64b98c8ad76d2b495fb121dc5ce4c8a2075b68c55ecc1a23be1942d0999bbb6a368cd953907718210c0411e54ab22d99efb7698b409eda27520bcd2d473c53483442042cd2d34dd20e9051dd5cc89e6014db2d3ddcbe4a7d1b676eb15e3c2018af4f7403929d7f1e1381f9327df5c71ab4f1e210545c3119947e8fd5fed8d1e7470d4b71e1c5b928b226ca8d234e5827020f23652da537ffcf7a76f7687824880ad02600a2105ac58166d4a33ba1ba97c3a0a55cf34af85da22cdc74e58ded81f3af466aa4b90a7bd1f9ca3630521fb09c57d843ca6151418c8810ebe2648ed74699dff0cdaee2a480dc98362b3f190b0a0c9d9c6ce9e470a44eae35a26ebd28273d7ba4a9c20c7264803a9c29adc8445aea721657e472fd5ebf05272a9ac240bb02c7746e07e8bce1ce3ec3c7dcb7506f8e561523f4852ed4f816fc480a681d493cebc0f5b7ca3af2c6d190038c8d9a34a18450fbaafc14796a18b43a102ca404258cf1e690bb071d97f8e847ae180a699b98be420c9b1f25be56bdd4b5ea1aadd4a028a2ce62838ea5f232b6722e0ca2237fcf00ef393417173d242bb1f2629316c86e78c6a0d651c13d16e82f47a6bbb329144c7b65e90fbc7a0f9a1ce284af12b450c0352db2d5e87c9f6840823c193aea19059d51bd398b23a03f23939daa1d798d9d26b26f6dded602c6f9d405ea2fb745b1de6252d710b110acd6e909cee495d733915ff28bbbc0627adaefe2a6af1905d51af301dd03c5fd8437ef183cd0f36e9969d15bed13e648c501973730ef9cf3822cefaa54b0019270bcf2ed108c9c295086a817b720a661081d0cfa540412120da599a80957388f47c3a29dd6e9924de8acd92dda580915574148df8cabfef4c037cdcb0af016650e00ea91b6bb6659726d3bf5ab935f3e43b2f51601fee5fe6de7645f21535134615df6d928e6a96644e3767115a860d5488846b073a9f80a5579a0a92d35672a0f819a3c58541e5f788b90b9463af9b19835b982590b71fc64614aaf508c99ddf856bc34a9b2f45b9c65092da681f0a405da0a68a6a1cedb935e7a071ada7e9ee369be889f7deb4df90799b064b53e269da5228e7bdc64ac3910d520e2c0ce1d04b9134f4ebaa12f9f27b760c4a0838cf5a28bd72463730e529ee56f1bca3119fd2708da41f4a68bab292ed8067719c475e77d96d3ac090981885d9f0441888442a5a1231db535300f208ac586ac0c067f3be5c6f05f522b46f61dd99beca8203176c6981edeb5f29680e88b0b666e01201fac84b6b8621ed47f8abeef8c63815421c384eff365f239e62b959b465b2ce8c5b98263a29fbe21c14e8c946a6f8e6c5b684ca83bebf55d5ae0a1ac483365674aeaa78b82eb74f773ba2e522d393f604742eefeb5f9fe00db374df6cd4cab67b6691e76f8e05603199a320d9f2ce6991f1b4282d1e720bc8bae3f22ea7efab04b5aff0e43e6771c967a3613b0365d5c1f8ab0c8335a9a0b33a31f94d75f84f3a4e30f83b0aeea66780443b980f3512326b9329b88324311ea9b2b292b3d80d8634c05cc6d34a1504c027b88ab9d83880fd987cb124b611d5260e2a4ac18a430159f861afc06638f330a892a6ecff182aec4863b3ff835cd69a7389c22d49c46339a4b1ced5454fa04a51f723d55bf385488b1148c7610964321b47019455915de0de7e52de1cdabb705816adcfed0d8dfa43b0956fb58159d465b14dffab7743e49a3822f31346a4583118e0427ce8a52ab198ea64bad75a0cd42c65eff1c8a70220ad8046fb742428b8f169690c4b20156ac83f12189076161cc4a39348a81e09444f23a836d85c0f2a6324a0d4a7f1a0a3d574342a1596e8114693d2589ea5623c0a94e692f998a605c38259197fb55d751e23f9e7e2b898d30490e036d76dab9246405bb231de6086f64083eae82c2a33edcbdabefd4f12b6cd5679884b09caf02f55ab829d569950816e2d51a24e063d60afef014a74a2156af130082ff6dd20d29af552c036594e4753aa7ca385a0ae3e6089874969af7ad583f96135633e5dde4963b07b1c0fb12f6561069356a2916236843c169ace5fb934535c801f389166a6f611e261c54937388ace055bf862adc89544831a08ed80956fd0cd403193bbe82a7fc878c22e9307c87afb8121998867454deea5603dde5d31afec7cb825a80db7817348d486d20ed5b89018d6c5d444645baff7f616d53bc3795273d425b86a7cb148ce1892e0936e7d90a3f8318954525984e523dc5e9206a9490c58088a5d030422b8db235cb7c1dbf8199d124c65d74b88fad8249e7f822b02077f600638e5c4fb6f27e444a4f44bad5de1469a638f2f2229caa7c62044320c5e01eb410a6c1c45400ce000f3fc8f1f36c260648d913130ae0a2fe2a768098f9d4287cf20d805e3eeb749c27276b8f4632415b0284aa4a30b937b822e8e7bfe1f4a3a77e52bb178260a55e385e5cf99d83f950e0d58c25597fc772f8512a5e56d9985dd77d7c1cda19c318d24dbeb31c6d4e5ae543e2a2bb893a59ea05e7d3bf849460a5d397410cb3c7f9045b70b9914c801db7b1d22e525b9360bf70f041f06a46b152325a209c20527fa606bd393a04e7255ce4f0f0b5e6a2f62af464804f609a466568024edd8f43e5bc35d930ec6c500a59db5b70fcda35a612c89795ef05300cb0a2b013c5dcce05c928a82cd49ebf1559ef22f948265a8679db9e77e1493a2b30f74a11408ec14fb783a086046d4195d0a37ad8061b41c86cffdcdd0cf22c21cb12ce487c77187bc8dbd7c51af339e9ad34e79f9e86378a5ac35fb0ec820624ea27a7ef5dca2b49375f2a20b8de4d9e35b0bca723bef5987629bf857435278c0303866df7ab609911e77c5c927eb52583631d157a27af756aa7d2358c20b470a2724f626588bf5d82b212d04486417da314056c21e4ae029d0620203b40c716b51db733ad48215dbd5eb7939213d94cca8e6687c898f7b021f2635bf6bd83d34c86ce868329532f3086090a6f93facd1478b4edd0ce83e447cd9ab57f4f75182f57373c3f4823c6b6f60a6f7302e36194bff581c6ff4ca4a2fddd700ce3c991ad313a60dc29f9dddd61865ceab49265a07615654f70a25a877da42028bd4904636403deaf22a573f441f0bf4b70a47493551a7e88f4069ba4f899ef50cc1a47515233eeca128f4ffd52147342b5f25bb7230627ab0306c4bfd9b1e0fbd3a6d0c1cb1e8b629045c4ca49d3224c104aa7bf0e30c9731dcdbb7b1264b3d62eb173d017ee5850be3828c00a4c98e6f0b7331ae12ba181abf4844ae6736ba7ccb374cbf5586a3d2afe2979187bceceed40e41dd8e7facde676c069aba1524f363213891cafe085c51f682126606740ce327a6d2e0a9c529797758ca1dff7380dca5d6af993c7464dfbc2907bafb10011ad29c370bb6af9e858fcfb7522c7a0c6ba7d620c04a4adecf2d57372fa6c1c9dfbd4abb8e8e2fc69cb1b3a92bddd94154ee200aa4fd57cbfabd9b119598b2c86776041f9fabda8f51d7c61887e17cd70eb1298596533abbea995ead48e5776d1d4ef50c61e917c4d226745567a797dd525ef8e93fc5009ad44c423993c4413212549ba518aa07260cc8fe2bb12819e9ceb9e0ddaeda66eccff82cfb38287d2c2a512ee52a03f40692f66195bd22bc9c6f795b25e6f8a6cb8459a5f702158ecb38bb4f4e78d1f71f9d44334e014c621549046c46bcb31345913759b0a9288a61610b4980935b56291e2035612dbac75752edb38003a2d970d7270c6f74339282d0f89323b0a69f3f0d88c00abd36f48bd36f4a02b7554b42efff202628b0e954230699822e78876ad508c75032c2db5631130bf34cf3eb18de7c70d0eb5b56f87450954f04bffaf213397d67f5f75f5d821322975dcf5fb146df663e35347dc49d802760b8e23bf4ba72edcdc5731277810c75199c720e596d907346884943c5a24027051a912ee3c08241f2c241751e938884bf8ff51bd803c3e35f0638764da55465f34bf3dab5f07a7fca123892816ce335375605a816d90b78165f9fd581f159e5758df39a4dec289f928f6ba73fb66bf60504503632360181f232ddce2a0136536e5a2a0200a0451242fd9c11093c8fa0740cb6398a6901584b20dc7a694a9cbc90d9487c324fa4e023a2d076001a87723544e3ef59c6fa0d021d1474f1f01e1a2169c53990754446b02d74ad800530dd7ee8c5a308d4b28f2fc68a5020f29cedb56c75521267718bc817d0631aa1204f232a9034dca0710a118d955188010cad23a376c894ca61666246b1f3bd542387029d3719c637a07933ad9ec1cbf3c4694699e8ddac7b8b35628bd4480e240a9bc50327a1c41331217461c04750add6d319ece8a70d7d13909e2565cd654f3f417a8744dde56c4ae31030c0d30dc42b55c47d0b529fe051a1da38f5197ebf27698c796022b17f1cae84d4a7121c6d87f21546330028b915877bb93d01266b659889d0c4522ab839f154842dd8505557bcb8a8d491d48fe93f598cefb53f22746c478275d199090c40040f04e6e2a268eae3e6c7670c4182fe79a01a7cedc0e8b703bb2b09e53d06f8413de912521408368114454c8d07e8cac309b189e82b40ec1c7650920fefaf66c9651d459825df4dd4d39a49b0b3e7c2d71b161c06058a1dbe49ff4d50cf1d3c46bc11b4b1085701eadbf3f525e869b2215140c7e9ea26cd6a627e0084ba01ec85d5aca0011b3047f0f166d8d7a7ca75d5fff99e21d1e1513e1d2d963adc93dab053805303cd22dd4a8961e713e79d936a4dc10b1387250f2bf146e19dde2893eeea1aed67a2ee39d940e33982d96ded6408846756ef074e1ddf5b990cef7c849ec4a9732f4380f9392e2a6b411213bbcca060d6af02582403a2dbe56fb5ecac07d3c8c333889ca2269e267a2a4076313963d7433343f67af136c9c84e70984300a4a9bb0550decb004703aa14d8cebb27814cff260754f0c939bc4ba5233e07fca5e4512a56bcfb85a8247930bd7752d28196af2b3df7ac264394e9e89ae58be028a225397518e1b70e125dea6c5328a7cad50d5ce8474fdb2b19fb55bfdb90cd766914825ce8234343dae53631638db1596e9b776645008fd72a22c9f51dd82d910c348710f23c39043bb8f7c8edfd5109be3a7c514230876f6ed4f639c165cb4a1fe151926b14a461d109d467b9e9a137bd0fe390c9a70dd9eaf9bea40eecf057c232751f739b0120bca70c670b2afa503c5b676f96c3f365640bed599cbbd379f666450241fcf2b9632fdd0e9c99172282b84f34423f80a16e7d49d7e4def3f4a83d5c50d3e46189467ca94702a3b7839cd004d1fff9d4a2f3f03329d9d193e84373df0065ec87419568b4a1037db300482387f05544180e9e4f8a90f01461fa7ca0ba34ba52e1489961e1a9195371b5c7a5bf6cd035a7ab9f9d60910862a3b07f851b4192a307cda6c7651430dc87057b63d667dfb70a00936d11edcd9ce69a1e8db6544d6351efbffa7841ae2f2b27588b912baeac8a55cfce9280c16e698763cc2440648ea84a7d508497aa4f18dda5800751981c6cc8005521c59d5576a611643b74d554e90bef4d28403c8bc1837118771530dae513763cf1479069f0d7ea80031e02dd055ba0482a38eafbb184360ef1d558a23bce43b31e41f7ec8102d31e50f9be933f185312c09740dabb4a8aae808430328fd6869be1f4ce7408e56af4cdd2843b7af939e2658d226452726e9cc37ec3f59b4518a3db0e40ccd43e906deb166d4be4d76238c311cc00ec294a3e1519952797682c78dda2efdd188ccde5b99bda0cbe2b8d1a24c7594ab6f1c47338b1c4775c923793880948200d8778f9f41263197ee3365fc6774caae4578567c9d191397e3e3eeff9a8a5d17bd5f5d4df2b312210f80b59370c7b8dd8a681397f796fa710c74e5d1af04e44e6df25ac50eb7854657a036e6fdbca9a4e1ba58c0cf40d5bc6382342c3b4b860efd1f0b382763371050fb38e7413035cc65e5c9c08f077c436bcbdb0220b074f2682b77819e7164efc1370bd0220c2ff1749ee7bb8e2ec0b837687cc9e24edcca3165502c711d0c4f2c940c6d556904772a81dc8673b917d587e47b624bf807baa7d516213fb6bf7c36509710d93cdb1f6f9704c23d4af668abe168804e077e889ea38f9d4423444f2055964650778247c6edb7f2c173eb6262b18a789e820e7ba4b35403a110a2cd1105e5f2564845fd12d101c69ce3679216574741df892f66315d5ce6ab58b0c793425becb325ce3554bee775fdf6ea1dd4d82b28abdfe700b6c7a76a80e90319976d6242ed6c3e7e5394f685384692705045e0f775f6575f7f27dd0c4e5f0963161bd1d7af8ad864ce97fb1809c0cf09dec299ef8d96cfa99f406bbb51455ee241561e9806f36a99cb565097493812dfcd0ad057ca242442613eec3f8f29355410a7020c9a2158a45523c5fd06d101f284bb70277008f2e34e2f902f65f448a47fc4318c5a03f0013f8d609671d24dd44faf3fdf40fe930211a29b6eeb2c22acf0ff243c401f80e5e9af77c3078b0268343ba7bf0791e441bb02725c153c2d5ef081ccec0bb5b0349164b9a28977121df64a76adf33d31735f276a124f1bf922731fe99b1bfdc71d56c0bae8c4cabdc4d408363f76ced494dd97a6760a201f4976e690566acd44b1f278772524679c40e7911def5450761bcfc5c81a1059ea3bf31afe670744bbf70abfdcf7d1864b0b79a0d047084f4f29aaccef5694a0876f6441f0dee47b07684e606b01cfa42f1fe9f6c6f3c8b7948c68c4d87996ad167eaaca6f4469e9628a31001a9b12440dae0d474027cd2ccf1637126b936ec6135bd07b9c00e34821ef5abac5accfb7d0743f7f2ef8a8be31a6524e2f491984eb59f017d6e5ad66567dbe682edcb1dc7394bade118a345fda38db32c86b2d3ee84cb266c82fef8ac9e74e10223e0691db86bbd7deb83e6a4a0b30ab54dfca475c963271e76de9a7a4bdea3efa581048f57f70386ffa3ed74379413a90ec4d4e511751482566b3d668383731425c5826fcc29093908e4155f09b40ac5f101386854b9e968e75900beed11c1a9a20c08f98ffe0d84277f1c8b50b6baf40fc89b3bf746ca3450428e6091331b26f0a0cc3cb95c02c99d4ced1f16259713e2127a918482b7370ecd2f02b9e31e71143a97f027428bc66d2f8ce80fe0ae70df75f0ce266f3a1cbcf13f0a56f54e91303096f2d9b1990283645dc4a3b94dc6c74afb798ec8aab27a0d8b84464ae4a96427745801ea56e100e78f337df45fca716b36dded63d3140f30a55c02fc09bc22d268c8c19b60286914d6bd214a041a825b93837cd32efbdd4de58f7704d3b15d7225aacddc5588c4edd695db59820ce71b9b68cd9e51d8e9dc302c627efd92e5ec95b6a50a4fa671b39a54314e7fe1210b80340c76d04f104ffd8146228e6da736a56ecc9826ee1b5f56be570ec7f9e7f837c7f0f3f4442d61e23549ebe888e41488b09dbcfbf5646d7e54c0da38910a57660c694e3d525388345643eb3130bed18bbcc62e35eeacb72300d3c6bd7098f3d2dcf7f4bb3bfa61a348f91537453d78fb9f60a8bddb771bc3161b11a07485e5f62857e8905b33d26bc2393bfb2ddd1a49af4de5913cf28b79fae1fd6836784d757e85a098711c0e030713cd10b95aeee418c1861c19b40f1a0a6eebf7c136a1309454adab9214d3918209e3eed7e1b78b410ada99e95dfba4d1a9364479e3438d323b0a3c23ef829e1a4c59a864aa5d0bee262b1cab8a4b446eb1417ec42e92df6c5849815997cbd2a9c8470f0ef6a7c98905354f047231913f14e42471815d1135f27e4113059570c31a2c5f5754a7c2184f30a0343d642e9dee6284af82dc8cb9e230b9c8ec7e10fb298900e94502fd8ef1a0e63d631d865949ed82ca87784f23dc956f8b26d1c4beccbbd3b58b47bac45dc5e17fbe3d90be837ae3bcbfb8b1a57c067177d0f84b968135c925aec1dddf93ae4968857a31ca64908d90894a6a7891db737645540779d86dec78f526599bb1f1ca021bdc4ff512c1ff0a954e9e30304c82f05c49530131a2adfa12215ee5b7256d21994f44958dc942b1417c95facb98808721bf2933e7a384688532e06515cbe62f252f41a364d057dc8a73aca8e05eb05e1ce74695a2b6c26f592ba3849bf45885cff2e14f2d66fb8e1821a01a3b98046b8877023a16870cd229cee354f718e431ebaefee2dc660fe1ee765b6e6792ed2150b99b021a826bb602473b9a8251406c6482fee89be4e680efce93c7a4f027cd51ab17a04f00f4e161616352d9ad64fb033ea76bdd95f9fb47c962bf72b74b4d3b0cd5ab8ca5afdb4776e711b446ef07d37e000f41f58f7a183bc191df0d76f6351a9683af17f6877b1fdacd645837a40db23f18d7708b74845b0511f8e5e87c6c9c488050124b155e01ef493a41781bbcc11b8976dbda15fb1d8e3309d1eecdd65df0553cc4ffa4456f4d46a1e680468f96a38adde7065df2b7624ef3b78ecd6c83e09833cfa6c116c60203dd8ceeda437ea6903f0750567b0c6e98532e835a5d05b4ca25c03b01bf7b81d7b88645fb0749154c4e1972ed99a0406f25112766b7f799e1c449fb6aab59524a14d1db68757481699add17babb06b21b63db1808d7b2e98b128d8aa44b9a58c5a21a2d775fb41d78110c2c5adf51a2eb4af041797f691d9637518c1fc0d2ece9735d6c8ff1b34cf5f69308e048c045f510176dd5cf58bb1384e804742fb4fa8621087d0e49b0d0b563d235a913536808ce3324f801eddd4dd475003680c9ccce6315d298b1a0283267db9f3b7b009a0ef88a16a45244b834a13c2e42611ca3a3c47bfa70da016a7aa17319b0228e5163f7cb478bb94c72d3b67b65d2f59a1ded8be0db74240569dabdb0bafe9254a3bf1b3ef07c5a298cd65658f17ef148a10184adb5c63d8d8cea6a34dc8210f890c58c12522d700d66c18781be32a217574b3efe92774d257db703d051bcf0ae364c194350b5f96819f9b9b49c348f19ed22b3e80fb4420515327ddd56260f9cefe8e453ae443508bf16ee8a58b66980d416c5feed5c9bcd173fd06cdaf398cff46cef50a6c51f8e88acdbc516e4d188b14ae479c6e65b6d7a5eaf504835d3a85af4bbecab7d6e972590d6f76330019cdc1dcb1fb79e728dabd1e63e2a2582aac5357bfee9b5aa7de8c14409e49ff1fb1f0d2bf370791e97b2f0b74a01396e5ac6c3671e3c476b063b038164ff87d31a0ce971fcfe77c1f09a7ee7061cfa5a5a976e8c4075dec2aa8ebe2f0860ba18b0b3a25ba7bb83ccb4eaf10b5abda3e6ac1ed08de3691fee485656d0da7365fce01a761e1f1c01db74dc64734478412640dce696380963f55c1aaf4cf9e00a32c86f8ff8c7eef3b9a998e0035ac644275be8cf345db4196893fdb0ae6ee5efff5b9dd22a9252b528030275907b5ed8e211bb1b9b8132c9b9f971177c40e81d52a1504d4107709199f3cb9aac6e2c353ecbd1a9918f6098032e270d4b362df26e6779eb2719f28e1b2b0693866cd837c89a04ef33c096272336a71666166a7fa3557a9988525deccc2269c1f12bf053c2f765c6b1db03b0aef01e942a30b986a75fc845a7c40215adf3b2d8c99bc7d0c9053f8f50f406590a08bbff6f8ecc832049dc0b9fac4cbaf528ca2f9001257dde6195a72f41b99f92b976f0ec6912b68d67beaab412cd2f37240e81b38facc43b3d869276d5c53bdb42c867440506c5604f6b5e54b39fa7f38bb6f4ebc3254851865ab277fe1b7002350eda7c79497cc006f32b80b4847b71c116927de8ad63a0bfdaa89cf4fd09149fac0246df07878af976430965f4656f3367419a65d0a556c38496d5814ef9fe70952851c2cf598a0fcf704bbd503df2bc06ec0f7331e6fec0d372db7d0e2c79578180c8977794a796dafde06a324ddfdb3891563235e335799ca75869023e81e0a117539fc55ff0915fab613722527aeb80b48c0deb7d2e7fc3394c9103dc463f0c5699fd2d17d725fb59291f60b6fb0b7eed7c4f763d80c6b98fcb70913d418b126e36c0de5cfd7705d94a042b407a39e304bef122381e87d31b37a829b69d71963535863e6d7a69850cbc81a19978960b82d0f1b4d7fcc58457b61d40bb3de5cd4c3bb8d5801ea364a22b0801512fb7195d69863d984558cfcba890963241c24c5dd2512b597079e8a36284572d651ebc933d93d85a0d3e93b3309bafc4d17d8a5aa648beb15622a7806d4605e1f3215d1e4e92ed25b7f10b9aa8b69c4d42a763658a2c97856e87ffe182e4d622f1e6b0590f17803755f87b2fc8eac839f520ce94df05dd22635812ae89f42ac5c23ca33c17bfb5310abd788f226f0defe14c6ea1a519e09ecbd868991eba00d9c134fd194c2a2e9113269cbcfb5c4ee1d522e6fb8698423ec207148d5f80b44d1730327b0d81c0ccb69be3c824460d592ccc05f177481b9457505cd68084512ac1c55f7a032566b39a4741be79d793248fcc251cb0ab3db57127363b342859ff8fd27d018257bda6230e0b031b3a7ce85834405cc83f6f8cc43ae01382bfcb459827ba84596e9bd3b209dd0381d62dedd111084f19e4656640ee3f5a4e2919f6f9fccdc9d4c82d10ac41ef9a2604f27930b392006a20bb610efa0add2c8d6ac6751dffefbb18059d12098d0114ccbf9b8f7e62dfea87c43c2801806ff235fd5a7751518ee8c07984a3078c222a3fb7a26fc366d843acd3e16bbd66dcad1638b4f0f1f29d6815ffaf0bb28948df24b410cd3dfda41409876db1ce0fce861b3dfc5bfa531a4cdb421ac8a4161c664dca3b62c083525b397408a48dc47181a517135553a8c3ca2601d9d70cd50af97a6eb4ba1f132f9d297146ad005cd29fc1e35e8c91a42760c6a2c0b081555bb205986cab71d65b4daa998d263f29034f10b22100801ddbdc88a032ebb04da0a07c4607ba7704d2206ac43aa2d53677bc33e04704f218e2414a10005fbb84c025c42111617902cf1e806fb9c0c84e6226e8040f680c875a095da2a20d2a99dd75a6567fd6c2b273f2da0c4dd5587ab49c255cd481ce81870d5fbac7ffcf459193de0bafc8a54276e50b02acecb5f8c2a4ff11456f8167e11263c1cfb6be7dba0e2282374ced769f0fd2cc6a569192921ba8fd6dffb5bd73df15c4d023a5429d79b11eb3d0d3b64e6e0f77dd636881bf3c0f8828ea7e3d7042636010050ceaedc5c0d08d374e0dd4b0cedec558aaf71c05fcb234dd704d2644599920c62d8a658055023ab21774687f27072e3485cc1aa07a0a895412aacbc84a4f8f759164d265f75d75740ffdd44254849ac31f5f49a515a60bee714f488681df470b775c8f85c25c94a3d688039c0e7fd4e2b4be219c10e3cab10d12bc16bbccbb80eeb16049ce5a2845606105d2e881cf8dc93e93445d757c98a53e9e755073cc0d1619cf99ac5f632b00d54fc467c4511f6bac2246e38ddca175ba6738560463207ab60d40a54b9db2d49ca578994d8e3aa4f290e68ece0a9c672ff4e703221cb56729a0ae4323d8256e93fb52e5661e42e00f336c2a82052a1bbebb5da169ca7c4e571b3645f089df5081b8873b2983551723e2a11fa1096e53565fa765ca95a48c70cf93ec87643cda7d422814055100e5983e09ef110b93053ef02e0aed0865f6f31fc869b6590d1171612af4930643734856eb041aa30b2ed549f46ca7e158520b8e142845de5b089ef460769a84f028957e0e5861df8c6942dc9b9024174b7d43d124e98a10dd81eba193f149b3be9aa2c10dae8780c4e7d7f0993b6639f35c57718431ef774b6bb187842cd1b7addbc38f7b13b6998cf81d8b64ad5270c5e814f7fe4b15eeffa4ce4f3937bfe49830302ec5f104897633cd3fbd709806c3222e416b0b0f6195ea825d651386cde120d7c97f453b52ca01c54fd6c656b1efd96dd74f6368a4c9bf43913c4777360933026ac23828259a4a013f49aa1225d0e43231c996570286b091ae21e18c260b2a4d6278ffe945e026e1e440acb1cee004a0409585913680cc5e91d03e73b80b55a2dae8fcdf4e2e55ac992285724dae4b156bfee4b6a8ddbbcefd7a5192c90ad93c502bda8d8d21d30ffc235c0063903dac04ba58822e375171767d5b89a04b2c57b1906d5d094c1e1af23d31dfa8956cf02d28e4ce05bac2c114849cb457d5a3f94b8413baa87557d825ed4ff29301e580887f0fe97d718bed303d733667ba085516cf09cac0e126a3ca461575d2ea0cd76ef5efde050053c05fba425ad34f7c1b7947aa07db1aef407c7e86ac9e11003af488b5734cb88ffcb97caa6ebf74c5ddd1f96850f82c3cc11840a4281c2a74242c89c9b0bb1f8ee9a50b564b2a6fa5c78434f51c454714035b24e961aa7ef537fe845ac53b7dc3e0796d1c88e88ec3efa92bd2d3ebf550f868982f93c7841fc2305ab979bd92813e6f5f50f40807c38d07d99835d7426b2642b432b4c08447b982cb758846a567b72565072a4bbf8b99ea3bd4f5bc5300bb211575821c483a48ef994ee95c187ce3ef25ed30dd8b6c0efac6093134ae8e55521ea19985ae4c79c58858f77b461e7493e13f138f38bdfaa1c4f017ba6443203529e7625541e992c9fb0de57b2a5b6bc9aec32b5ec9fd90e571ab3135130e847c273961f072248aa7f4242bf92168a066c0ee2fab86fe8b9adcb60ff0ecf439eadd4be87a8a5c2a203310a785fc4724ebb488382b4326031f7e09cc168095d607f7974aa8243cea539565979e37c13f399f5ff6d05a08c8a060a08ad6561421c6c040bd2bdf84788f94a7726f4d1a5caa9238936fc16db5e2f2f3a5a7c212573e95cae534341a5894539c69f27b5a3277babcfac1c0bbef36fb5381bd43c062c94378cd06d1db8aa2fe62c4073e9378170f392c9bb78392311ef71f4d0dba0bca18b2bbfa599e14fdd7dbd187302e34fa8fd71f09e5887136eedff0425e2ec77133d6dbee650fead45e7a976c95ceb4d94c5339a562d98c1481a096b8b30c76efce4ccf316a0f96ad4fb04750ac40a0646d614a9ed6a9fe7d3ae11eec2fff707c6f356a3cc63a1e76641aa3dca9d9486dfedfe3cb90596858c68b1b800fbcd5e921ccb2567a2d452dc99cb5bcb2d830484717360bfda8b36de21c6564c5fe88942ecb9d06e658291c5a6d889827e0cac90190b3ad01085a13ef4a2829ae37ddc72fc13273c9815bd5974424ae195bbcfe3c35b5241f25c51ca94087431de7ac830466dd4c5dcc897219de8f8144e3d168db570b5555a4c499058be98d6e92c9849a4ed582df03e8e35aebd9c56c521db1007451ad3adf7ce137d31dde0d0c2863b0a84e7d9db1f19aec6ee1b35e863c7803873255858a9e4a3f95cf4988812df45ca1bf51fd4f396721e1d06e40a1169a5610d8e9e62ed184fd2d9de94aaef392fcb1e510ada775b43d34626b5ca601467d6767db5ca0022322695a8ed56a3349f1260e0e38c4729415d9e3a4d6bd860a284bb00c1b46eb2ba6de089793003e41db97c814b7fdf929dfa5a0eee754bcde26352052d7049bc425e302f56e599c74ea12ecada49268b8ce9e7a52553286bff2393f60de434e7fcfbbc7554428eae7239449596ec0a4582d5996bde1ba0f64bc4bbc2b36d0e619747f156f8255b542c74748313c382e4adf37f6c5c3cb1a6a4bdcd97e777a569d8eb5656bb744f2632dd14d1ef098ba9ea8d8cd3158642541fed3618efab4b34dd719a0c97766efd9bcb58471a2fb1903f8d09d1894dfcaa21d326f51ba70124800f4efd6a23d2e3b489bffc3d82f04d83b033b25dcf584049a976c975934592eabb4f8b0d4abd0b2561c0e1df137b90b7806083a431ec0f8be398296c17aadabfa716cbdb4222bb57c3ea1feb944757d74c8f2391bdb7e0f3cf65eba456e86540824b886f64a47d1cf78d1ce4677ea33068288f056f53b0fbb348d9c2b5592d78bf40b027a2f3727c35eb98dc8e2e9b3c75794d92b87edffdd3c575c1266d8436206c345f80f4e9398a7045bc400ef9d8b9573b63cee96b7812876d1b28be2f9382bce3b4a52033288c877bae8c77dbe4082045e7dff88a51dd3fb6009d7fe67da005f810215516ea0cb3dc05d08e21c63797e91874fd10c148d2a8aa4223c665424de9b212127bd8841c003debc70bc6edd5b8f231dafd95348cd724266b37fd973c902d293e380ea3018165d8b2662e712afd73935e55fbb2f380251062c80f558228ef0d3cc3ed90be6665c0e0609450080234b40c00b2a8db68728f64b1017572911550461846b13e6618203a037d9a424a12cdfa3ad13c74cdd05b84093f2bc7cab3fad44a42577b72499a9c5caaadd4036f07c139329700357b03bebf9f8e4db7406726c4fcc5984e0f186ce12ebfce4480051a36c04b04f06ae306654205a9272827d6bb0330df5f74a4a37c86c333f50726a1f0a03da9bc95ec0218b22d301ad36d6f81483cc2c0e27051d904887d0ee44293ad147b5cfa45672e6cdcf27e60fc2ae137c99a58aa676b09df5dd14c3bbd62ef469893832201a978bb0a41d5bf84f04c573853dcfe23b83c8d6c911915f6277aafcd9f6d3a9bcd280975485a11837193ac7c8f293d66a4b17f88d76846cc747e15946688022e1efca8e8a2418018b92ee052aaaaa8f0c082f7d61da69be3443bf8e959765a8d0fcb8d423f4ffd956d0c758622ca5ad23b2c0c1f2b2b0f7b40bab7b0aae44b58c4b3a5a1cfc0317b00fafdd12b7e753d814056191629fd20875e0a1c03289615dc9a8fa12c15033fdc094ceca2cb497730c633c864cddbc0e70c623e027a10dd96a687768f5fcfc90aca973a49df500f281e10de11bc25b0ed105bced16dcae31288d7367925c920a1e079ab56b01384ee7f6ec043c787b6001a97a0b273c2873846d6fb9399b37825dac7c9b8dd7c026316569f7fc4c48f0278a9a4ffb5c079e5491a62b32c9111cffbb68654ee993163a9132b226d6bad3463b4e2e50f00be56a8d5ee58961da4743a6df426a9a583b50d455843db3cfa4173e5d050b5b86eb297c9d71074f9ab627647a30369c0319bc243a4f28e6e003438bc0400cfaeebef19fc1035ab5e356d5fb607b7128817be70b9b75f5615a79b560bcc1fff2600b85919f72c130357c15da4cd0ef2445a2294267efab8bd6e95a94bb9b4055193beab5710cee155ca3f5cca17f6b653f87a801fb28b8cf749773b7f8cc2a4dcba8cd43250614eabd326e481979275d61a25a83614be8f558e9cf108108e7a6fa217d05059989523fec0d12bf1578adede2c1fc954d9039c18b0394b18449648964e34e8baa6ca82139cae67101cb18f64ba4093d4c354ba22fb59c560c1711f85ea667914eb3dcb75a18836e901ba6e53ba28f3d6e081169a4c19af8c594fd5a84f3d8bbe86dc3593a0dc46c4cfcc564f5b6caca98c74d985e39a6628fda17450df7ffcab6546cbe28c723c9038e4f4c4d8bebcea5bb2a4c9fce94b8391b719f9066be9e81a752fc05ee7bf9ffc4da01b0000b784c7a46687519dd235cd7bb412779b4e5a1c3f6bf34e23dfc0a8261657b2503052af7028fc371369d7f517f6cc9f3ed6b904ce812280ddc4064ee4444ab0fe10393320d09560fc3a37a5c10193165787accb46fae958ce2bfb1523adb85c94dcb8395f1703309a6230b1010784e5e626dbec4d057e9361a1d287e28d45fa736bdae6dfb64d29427b6c3373be7343a03517af327336a356d2e48faf15a724fd403f5254c581c8323023294fa65ae8039fe110c4a490394223b0bcd2a47ec3114827cdc7094b8aaa422f7028748114498c18cee0fcd8445fe17145bd29bda4e84b61e4b4ab079c112e3a221cca191d0dde6594e7d284d320105a29b4703cc8ca33263319e01427c95dd0ef0c51e7b1f14c092f44439e0b12ca8b45e8639eef262ba94070558aa3d37bc08e7876725e2505f44bee9081571d4c23502bd024087e60f7bd0aed3127d394068a0979d3aebdaa2b27aa48b81a64830a265dfb4657e162ed9c4c82d343afaae2e23941083b830888438b1fa408b04518dcdf00292244178d8794520afc7a8aa0dd9d7c5ff50df1037d279f254890b400894021ee45d043f2679a7dfe2a9b9f52485d4da1434e776b229defb91daedb139428984b455da1ae6cf77390d57dd5453cf3d5597d95b979a7c245b0321c8c98ff9e11112adea60d6f6d509537ffac4b47df2aa340a1ca2214e4249b30e39fffcf686991c081a54048a728436ab52c2730559a297a615444f0aefeeab3b72e6d6c39adb8ae40f0e90dbde2a925600da4b53e8d25ecd04f07a060c004dfbbe3e932dd6f3a6f25d013c0c673be280cf0d89c8dddb10c1ee70b9ca5d0c9e41ef6a5404436df5fb539487b38954f38336e3c76b2b36c91491493d287db45a8940a875dc27b8733ced2ddd6c3e9147a5abbdc491ae1066f76319fa8e78ac864d056769ce077940b45f0384aa85f31dbc0f3e159bb042635cb258058eff12f5abd5e95e77500c03d8a3f9695e7056246e09e3ccde96552413aebb22fe9447b26691f0cb97c14264a4c9f0723f8e66eabaeccc261f871fe67dfc5af8bd6e217da346e3930783c8447aa4dd79f7e4ccb7b91dc329d134539d9020d0108b767886dc5778e26c5c58565443cc024de5f71eb1e0f20382d3401dd94d983bf47159d0806dc67551569b59bbe0e1784eb48c8d8de88003fb256370f2e6b8a2ce7c1b431a2ac0892463590bc05d7ce6c660354c926b240900b52629d89206d120f05157396eac8e9c09467e23c379f0cdb74b9de4207a21e9c2a897bf7aad949d4818a7285fd321b34b84650270a45c0865da5d9e52351efcc3351694f10335a54c5b7faf7d8ab2eec9fdc7335828b287a537d9f63c9a8c3aa51f46eafc1e744547402196448a2687c389862f50247fef91d2b7acc1de584d11645b78b6a8ecf7d737a208b5edf2ba4400ccb906add82f8d3890794240412caa0fc6981b80177fc60f8d6a7a1564d6d0831c6bcecd4d874887078ce1ae6453fe06a001a2e83f757db5423595f9af360b98e91920555643bb9ed5d9ad0c9bba8f55d95a6bd83670ed97165e29f9f751844a6f5034b29f5ca3da3c1c41b3a0a47eac1eb0868563d14ca3a6a7b616eb74c2f953a7b3e88584a93753b63c5c1d09cd70db842c7b0e40b4521ec163ea18f2e83a345fdaef1e65e997e0268c19efc49f04619bd02839c6e46d4ad0f966042d8b3c1ef3b959e9f12a2e658b5b0cb69aebda61882535ed01fb49fdbccfdd429422a32a1fdee2bbb2305fb196167d89984bd1ee68053e32bba65f8365ed6ba8da579fa0174cb50aaaa86413f9c43a4e8c6bf49764bdc67779d52c1610b37a6ee464dda1ddc6fbb061ae1322b03a22a66fefceccaeace537175f5601d0cbc20b12f51f2a24379730158e7fe1caca30e12a43c8a559a2f53a44ebec48967fba0950855acc5ad9e3488f8c19d1927434187b5d81931f2e685e4d352efa0d813bc8050d80221d339e46848838078b6eacd728ea05fe4587e74c909d21d5b131934dfc625ab764586903c1b318180f35377c91e08aec39ce44e49c93c5bfb53a64e6ca55993fdf1a9604a5fb8681916a02341a24c7eff6c96f36fefdb18d5090e45b595b01a74cd195d73b8c83b724f1e56becf7e9aa7df2c5549419bd209ec9fcf336e61c1c186eb5654425798d6055d443512d1ccacf6c56fa10c6a769403d4f7ba32df50f399f9ade7efe9132f61d5d4bc7db1eb963431ed9b0f387746e8cfc5b2aefb0ce6444f82623b32ac424d558aa2b6bfbfedecd907a98b45c2c56a1d132e36e8618297825b8a98dbff305b3547f3c8ee793e034e0980635e7345b53f54468d04276c60853cf6c846c8a5a45116b5736075008f51038bda55e6696046b8ae2e64b7d90a65cfb5c294448076614a3f0d78ce07b87d85fe09379bcd69f82dded0a395f42082791010fd64191325107aa0159aa051d9450ac043c11e8b14bd01b5f7f708aa4316a0e18e220a1490c53e4b28ccbcde9205b45d593c6f8f044f0be79f2d239e0e6c567c989d2515bfed5982ae60b920f541e255c43b3a6bc47596802b6543b017db9a7afa0f09f858af2e2e66ce12304e92fddc9cee3b67eabe7005b94967e4a419f79d76ce01ab5cc59873f8f038d61e2439679d15cd88181a54555661cb5e10b480cc5fd780e41d86486534865af33c7e3bead9fe102057f94c2804b315fca198e90a707f83823e6ced86a46dc200ac42b2f668f3a75a966adc23e36c8a91fa065214873bc95929afc524f37dfa2a8b0afc239bb5b6680306c440417b645d3271353551389c104130f2432789e49a32367daf2a3da928578c9bb509c4b51960ecfaf0fe38051af7c15060be0e886bbc5263b01b4f90ed4f8663872c8058aab2b5b05d1f88a0f566f066b62b722c41aca202d748254125949a251cbfa028bdbafb9787730b63209b0268328a8c804ebc7fec52d9e1235193e00bca294809cdc17a3f27a575533f8e6940ec6b9f3a44720b9fc7721b03d3821ff50224b656fd6b92be971e9fb08d65f6441fdef69863c1d1d533eeaae8d9790107dd01b1bf3e3782b3cbd223ac40fafa781495877514b3f110f64220fc2c4653fd8c1ee343760422d22b0184db1e71772f066b398c3b921e525d39e87a3291e8b045344fcc373c0b7b1009f6fc726814c6f75fc980abb3e67431cf84156c07d8d903e842e24e587bb124544b8ea227da014bd08908b0aa5422283d02754a11b368768173895dc6b85cdfac3c7ba37f9918888be8cee4c9466d40779d22888319187337ae6e47abe1e40cb89839afe8a0c7f4e6b351166a278c905145afc1194d32229f35596135cabc56c13ed4730d4c3af9c7b939d32823d4dd27129d5830383cb3219562bacc333a523280086a24fa80377025d48241e66c67b968cee4c4926a28c60edd005051d418a417139d6e6782918102bcfe553f1d12f26c94608038ca02a6b70c2323c75f7000b104d9ea708c37fe43b4a9071c4449f40480b8f5b841ca27c909efbc952448113968170d3139fd0644899d18b5094970afb80b32e5c12d1bcda648ef3fc82b28a141260616a9d09aa24790ef56c47c77d671bca3077979b6b27644bef02c94fa138b1af6a329de0cb55c302eec9a22d429ed0b9727b127075a66de4adc25e91fafc8d4a30960c86ff0ac2d63ccd3f01ecc556dd8f383985af6d6a0494ca39971542472e2dcbc7618edc80d4c5bce603cdacc19e872d904241ce52e2fe79265a8b6906aabc2101cf6bb335d3a78b690c4dcc065df0a476f145e12fc754e0b74d128fa98fac28ff48f68b1515e52f46379b163167d6f525f6ec62ef26c13a8c3de5bf6c0e3af1ec963dcdf2f777e0649f7fbae431d7b1f53b2e85604723bb35f25049e6d64cf35ed159f1fc7fadc307b313e0e6cf6e0b51ae013aafb6c44acb47820464bc6a57d084e6490de80122d0719f185bc8f2d3c641645a672ecc1c4dab0ce8e465412d599dde7c0411b75004651aa603a46a16f947a62e8a85a8f2f3ada0759a3b146059b9d2142f779be6190c2177a1b8e71828b50317e00a892e7a164b32d37d132e2d4c69247381bd0c97f94a892ec0c2ba31e8ab5ca09b4c61f5d91e0978dd4cbd4e9d3aeef0ef7eb3336c358d9c1e993aa75069e107550e9b1759f567f87609bb68fd7b1f11bf425a33699da364d875978307f58ad6c585745c6975d731dde66126bd826c2127677a641d83e461b80ed4ca89ad735500710cabf70aa4af2024f9256e42aaf96d719a54b400fa74be12d30436259690d8fd9d23af4edb78977bedb760476bcb3e2da407b6f8f18044d4e2cdaad7c068119c6341da63628e4297401e0665287e0e7b3ea20f9eb9d6a6fb7612b6ee948924a3da0fafb6fa948530cc503dda6eb8a6bf98f5e31684daf63113e5c1889d5b6a38648b66457c2b0677f6abbf4a0f5bd19ccf4e09706f3bfcb4cdaa824d14e160efb2328c77d082907378e6c9ee0357a45b16442df8930a9487b0e00a3b5a33998749f41e76727dfae0e9520ef34146b71d9045b77fda3a2f1014ac2bb07a2ec163b246b5f17afa670f34f22904a8955a1155b86904c66efbe80b24d4e8cdea51e3afc0fc37052b585483aed3234c3b596097e26f4cfb7546f846bebe3911c707fb97962492b42e94497e15a2390634e6b3440743c85f107e86683f5fed689e1ba52c8705d1ac9cb81cddb98b300a8ffe152383bf8c4d8bb23ac17dc22b3cc23a29eeb7877e5abcf528b24b0a1e3e1e684d2626c11349cb6c0d48c1ff97f14036fcd1d1aa216bfb2bb2666074fc5546083055c7e54d28e93b465d6dcd6e2be977ecc5beb2bfe7246b2e10d142a3116ee0b79b862cc1f1f9f0cb5a061f5282fe433d294f3d3b8fd0ca6c5c7638dd2ba0444152a96fd3aaa91827adbd2d1f7593ceedbb5696a8c5b5987db1002a0c81b082917e0afd07c54a4d847149959defb81205c0d4096d2cbc6257b233b37323fbb281d5ca7f74c024c0477ee81733a541c49a73d026b9075c6f92135a3845ee65c75be09ea4b164ea081a4cf460092d41818802ea019066da71e059dc64ee5a9de7cb9cb1f85b90ef895ed197ae82f216780d1e19841aaf9ffb3a8f023b5e733c923a83f69decbd6ee62e01b671b607ef12dbc015a49f0f2d982c0ee9b40c1964c971a8095f62d7ef66cf118fb952403aea6f3e44d8ae106088f10d8292996e2919c6b84f5005728148f4ae66753b2cddf73de3cdc9c0be264051d7390217d26709b1c3d2688aefec8a7ac385c727474788f45798c8adbfdf2f28183ab3938debc20ee7300889f4582d8cab523bc83acad63f4453e353dc6bc9ddb94c74f73150884b2c25aa4df012b337d751e565e7d04a10f93ca4f8b4333ca90a7ffb0064fb1c1256214930f683b66ec819b9f0b420854750400d78655ec1e9363b47c7315db8f72718bcee4797ca8bc7af9bce59b335c1807813aab9831c74061288d467709f81be23d58d410d628f3e091dc62d100226e28cd6aa8dd8202e8ea5de7589d18c6247307b7052a5493cb99cddaa7d4c46b916baccb3e6026acf4d2d780c1db2009130b6d2beee4c40a0cf3097b732619a3fb1889014b7c9f150e9f636ba0c4b5c1daf74200342b891c873bab26563c227094453c87b89f5726f0b0df6d51af5541493e1355966c65a556c1a616d14c94d76367224a6d4799fa0ff274a7fcfbae28d66e38036bcbf5040b8bbd0a1eaea8380e6be500ad6392d0e1c83ee7127ae9ba4d58667a3aae7478e5bde9ed5ef93f34d6d31f8bbc6a0b69044b5faa385a5c89fde4386a46e34e8bf1c2aecca7a0fa430ff10bd9b84bda90e87b6975fbb1ebef0a6545bdc05ff5ba85efa1704d7d08a43eccbbcbe4fbb5a769288ee5036508129bbdbf1a4682bf3d8e393187479a94e1a128157cb83465016748aa6052a4b584129fc8000f7559825a22d00f6970268102a273bfd01c5905a44e052c52680e1f8ac2b5253487c7b0c2336054fe8ceb1c56ffefff0530f7d3a896c97a0ac87f7443e4abd40cca670e05e10cdb57f33d83a5e691300fb428199c1c965adf66ce420e745fcdb3abdf0079d614201639f0ec6eac9c59026152d676a19d576978488534bf0588d92a438ce7989ddb2076f21248de5bd089141a99eb2d33b8c69c8b4adc52534f476c020d85018d1e6f2a85652c4f8b98e02b877ce61eae445b2dbe0b4cddd85085a7f1985620d97ec122794902efc1d9f4b20da3337992cfb28ab07f7e3d90b42d4d8f75e8a30f744c7c511c627f3183f9cad089068430ba5659c5bb0ddf326cc1f20c2c66d1cdbc46bc58db8b8142db48f6934e416b7493ed0e41cb46c426f0566795f544062badce51ad6812fc8c4df5951a48444bc42c1a8ce2dc09f79966e37999f890e2de7d371b36915ff57c9704f88c663bbe40df86c7f2ee358f8e1223a485871b7d9e98ac2c9658ac6699c713db6bbacd3fe93dd2e5829e101561bec2d0527991a18d29d954fff525cb5dee8bd08eda03abe505158e0380503496ee177c84a11a1e668ab2f14c4527fecd79b303ae1364a88210aaa2836205a868fa00db4e84048673a9fd4e1ca051d5f2e59eb31a5a301d758df8e2fad1effa06b2ce2369d4bea50ed1f40b04db0aa110dc33ae59024375659d43c5ee61cbe67c36a1c458a2ff60b0a10f4b70cd627f109b7e078c9165cb2b33f3a825c6864e01168d5e22543714cb905f2b5a879178308bc1038859d09a5767e4259e9dedf396913afaf8b168688e05f8a874eb3f05df4a6bd48dfa1c7f42c2dfa1b36eb74b7ff6ad40e9bafe1909e4e4ca4d848593fca001b865e1b674119e831f77d50560c744f83f78be81b493e66adae1b9f535188dea29721f2c5e8921c06cfbdca98eca84ac006c7ac40a7275b9b672bbd2d1dc62e92f9d936de763dcbcaa3d02fc2069fc298dff448da764aaf38aa3416a45fdd8b858f9a5ae758b54a7d120a2e30505fa146908f32ab6de0b69bf2fc8a562701cb8c2cbf83236a808eda06fedcd5e3fccf53f29a500a97218acb8564388b40fe6f3a7d278596ae593832caa7e9b3946b5ac53d4348eaeceb837b6e966d6eea4df0228431abbee5ac2d8c3330d6789fb0e1084f0ac6fd8423371378ca62d81bf6624ff7f58e4bcd5e40e026d73b9080bb92cf43ac0a8472c56f76cbad97f1041f6142a27c2189497faec48f2f2810a921378728d4fac7dc4c68fec32380c18648181c9ff7bfbadd9ebcdf70971f24bea25dac1ff9be5f41186265fc5e89f8d081298488714d9fc7eb3e716ce10a4878597c59f22f386aa6365a10874cd6505291cb8ac88f8ed74c33964689fcc01449db60dbe26c786c5986544012f44306df539cde94798a295e5e3c6cd241af5f9f74b4eb0002ec38532d42b2997d2f4c80e81611c09f6ff9ee7dd30aafac8145a83692b5251ac94b99dfd1abcb0c72932ff9f509e8d7222bc9a1757fa09d7b2b43258c9d6f8b4a27a8bf9212a3844e0265ffd160aec485560d235a8ca708c300c334b492bf061234e954474f2ee7f352cdd6c3cba97c9750a9e8dfa478be904c421645e4b6c5e5d82e0aed4cc00ee86d157449b12b4789d4013c7212e1426ff7a45fadec5d905c3f7fd4a27451479d02792d0dc36015dd28597003f576b322d5ab0e150198452c3edd021f638ba22964ecfc2cfb962d8e6a151e0193d23f3fc8355d320299a7289e4447ccd4b5988b0a5032b712829693add48414245ea6a3a98291d762dfae3f8204afa843a6aa3714dff662f026b1446c206fa68e33c0a662dec8bbd91b08f21fbda714710126236835de45e464c90c213698b3bc14400b40a64f9612a2cfa544abef112b3c61acca89205e95b6ddfe61925002bca343614e04b17b0d2f6cd1e3890b559ab2e425670ba7a4be8251dfb56a27757037faac015d03d0580c54a219ba254be14f14a0dbf8a617a116b67d0a9f2f1d2a2f82cc846c346dcdf33420c8630bdb01ce436505ea603b2e4e82a0ff454d972f0c32bc39988fc701e021bb1fd8879b61a34786cc1a3e4c4832b26ee3990045ab4659ae5731fe4ecf35dc01fce88c2413e82e485dbb2a885d2c981e30a07c8c1dd35a105b9329dd29f858eb480ca44d0eaa49f379a7bb4b7250b522d553f3e140c2b9573511803727303400fa918e47930d1fb894f14d0fcf0c2c904c007508a8ebabcadead3ea1d4fd7fb762e22284bfee18894e97e9a8f9f1c593d53bd6f7f204757759d0c1d03b6b1c968c24eabf7abd1559d9006c79d912e15d89d27b60745e106c55fc733346a73993677287bf0d41d8a9f5ad2844e89d224d1f5b90996e2216fc69d1ff7b66a61d0a4e8e2732ab06471eb286e61addb9ca4602a6b2b640b5981fc749fac16a1f138a1f7c947ee9e71c6660904d93f8ecf67fa332406671dcd9dad18bd511072422999d1e1e7492482a0258aac33d40a0cfdd0dbc81ec32577918a9c8816d947b62bd220adf8d8134df4347605bc0703baebed605c40125ea503798d391050435fa363f85b5d13a11bbd65f780f20f4eb1289ca17e4fa6c92e239e07bdba276191bb4b864466fa6b60888b12efc06b4c6e30bbfb63d8f070ac3dd18782b85c9a7acc2b2241441242f6de5b6e29654a2905e305fa05be05dccdbdf7fc75c3fe7d1d7b84dad1d476a4172c6f73ac9d8698ace45e2a7723d0b0b899644257de2416637dfd05187561ea9e2aec62ddaeeb495cdd99aa8ba5e64fa91da575df015065541470b513406d02d47ed3e638cda751fbb77b22d4fef75d8cda2198be9bd58442a1502814ead7946247c22aff9649ae6b0623a3f2db4c864acfe6c9c044417841e1903570929320771a3a88e872876f541f04a2591ae1e7153123068c4b0ade44b22179d215c1ea72007acd4f0dd006bc20a95d91ab3e085f8594ca6dc6e9c87cb80fbdc34075c89982ba05737c85abfae734fb7bfe8ab4f7f065f0c2184ba6735e57dbbeea6638ed2a340821950a9f8b2a0f84ddb01b32265333068b7b9a96019673fa6d43299a095b31d9dd7e45f876fbc6b4adf7bafb7537f76ef79065e1295c0821832dae44e1e285d67628c056d44df416da16ee1b70c17aad1a1dace7f7f063b6b89e25ddcc89f9ea6299e2a5b6fc52aad73553775b8ee3e9509e5245ed86dc0cca62b55a35358835a8ec5ac01e6468e206a9a48976c05075b154095a239bf677c1eba2df8af4baf8c8159999a92c557141568141f3420509be78e56d74fccc8d0da76ebc62bc3210859627644862680b918b00522236b5d52d6639458a2d425acd39fb5f63992203f96280a5055dd4c572745495a88b650a929ada12549be302acb96205d5c532832b157618f8f9f9a945589545a8bb2d8717a45dd7ad5d630f1c768fcafee5d6b59712fbce3f7b2ccb1e5b58e4619df69b61556a9f71b1ae46733a5b619d33f190ef9cc328e57663588661191665bca4fccb4d3ca48cf192525eb179fdd40fd697f1f5c3725b250f93715a1a96d10ecb326d37cb96ae7055ae6ba1eeb597c45efe63285ce3fd5e7f490c5be1f2b9f871be40f4e74b227aef84c36c3dee6b1ec79ad1adee9b1094cc1bfd5b3d84cdf1b66e19693bf3cdf5f2e8eadb82373630df77739e647d193e0bef5b1b05e9f44364a66ddc4005e904ffb8b830f0d2afd94ff1afeedeebead64986e9cfac03df8b3e4fe3d7f9e4f88449f0ce7033bad56dfa627633ac1a9b22af3ace0c6bc6e3b6a0e9cf45ccaed5f2160a8a60353fdd12c28688280a14292de8886cd2144a04dc15b40009eaf54dd732aa5d9147c4b9fc75c9eeab85dab1a3d6344bdd7a7f714be1a4a424e6a4da499837241b926d860d49dda46c40db0c1dd4411dd4367450eda246b26dc31444441c85892a2b31148e32c2cf083f23fcd00461849f3ac2139a2e689668824005c605e382398171a91910c604e6440d500d500d500d07b8068cff385803546b886a8ed4fcd470800a46c24878064652590acf600a320599824c369882aaa9c884c464c314daf60d063c49b7304fd2ad77615cd7428d12fe9aa4100555ed041b5c03c26f8e874cbf2769e76cb8c6fbf86c708d479ffb486e1b346bbcb54fe5adceafada907bf7c13de4bea53dd7da20f644e42db4da57a34542aa952a5de864b88f9d4c73c7c1b5c428c96e2e4a738994a49997a99e3311c8d5f130f1aa9d4b389474a95b29136644aaa5436a4ec740859c1ccb7c1254015843204182c874dde0fbea473a0d106524f9285f0fc10c6c3efb224331ecac888f11dab42daa55ef5dd9c416350167c214ebb1b153e8b76ab85e51a463b1d15d2ae0894315c17f3f05fc2c0fc8a762c6c7bf92a8e069599a2456055c150ec4d454290d4a4a23c29aac2528fd1ee468d306891ee321b36b8848df2a45eb500550c2dd255db3e456d700d08afeb79b1ec32e1104255b40886a62895fe42dc336da6c617127f93f1e3b6a987e9e3b6d335dab1aa67d4c6cff381e1aa1c7c22d4f28cfc4a1755ae524aa54cd4adf8db5f2fe577fd3242eee6c37c26a564997a89bd8aeb542f7f31188e0695392991adc23cdad9d06ee38cff5518ca33290cff69468d66df35cde07c18984b458b744dd1ce67521e7e581d931266912133337d3c971291125114a22811c2bc6422952a4a1429e533141945a6388a94442ca1442152aa9239ca8337aa8cc22574cc51b806ccbe6fe2ec1bf9a8770ef5913bbd36396cca8f9c8c3146963fe74a2639cd2613e49f68ae9f1c36df69bc252fae9bd76357f6b303d5ff35f7294a4e856eb11e722ca7f14f6d603efe12b758f1cc4ff1bc710dfe14181a42c4c43a300860582f568b27d87fdf6038b69877dfca9fbd9198d71e32b73d623efbd531a27dcc4307ac4ef640625efb91fd56a63b31546667b6b0bdaa1f7b0de699e369d5433601f5a8954c8fd4f3cb9c907a7e1352cf2b66ae2b15edfa2fc0951f7b9f0ac39d4e9fe256e02f5878a8d38eee6272dac999a6f1d7de59b3a76cc17dae2773e01f1df22f9cf608b0d01a4784e399c0d6c0e99bc67e5bee53d1ecba43b637826deffccc058940d3f886bd910dc31ec88661dbb6a1d05448b7fc6598f0b5d732ce070f9c54103847b121965e6eb3940f1b40611fef737cecbfef9bb7fb7ce4ece816efe7ecf0c10f9fe7b88fcee9a68f2ddaddc6a2850b2341aae58b2de2943f177d51bb7792997db168c1a1df4df08efc1f8cf1c1f7e0a3dddddd37b42ca91dcbabd0de667323632ecb300cc368977d677f23e3708a401bce8659677b2af02cec691799b0582c6679cd1ee378f83313f88b8a699a8661f22f3ae3e2568735250bb6800679710eddf2179a62cabf5e88894ac871a8848458b386c92d581cbb3ad0607308f5cdb6399c9bd8c258aa0b517da83a7446523d4cb7a6fad51b81f99837a2fad5c30fb239fafd1f8035652123310ff34656af7a99fe9d9887f99dd5ab7e4d324d538879980712436168cfd00e0c0d9015f5d173159185053f3a3094c54908b144677586fa3b565397429d71388dc5641dddf2e71efdda73fd288e87bf9f6165530fae289f8ae24cd8b647a1506fc2e953ef5351a854fb4c4e7bd6fec4adc05fb0f09885a49c93c5aa40df6cb448e3e0249be33d0b091fd1b48c7360211662a157b58cb2500a8729af130c5a4b421fa1da24e5baae286d5a2d9c2e70b068499245380cd2372c301741c4d6f0f78f40e360294de34f14a448056e30e3c3c844ab80e3d0a89426643548d1e4da2d97203e1c07f67e44b424f8471a26f646e46b6f247becdf5be1521550178b15a1caa6ebb588641a19dac13e7b23dacb7f3229682f1f08f6994c0af2b507225fa33d433bda630f242b02083ffce86894e534fe348ae6eab8077250a4b33a43d7eb649c0fa7d1a13288ec152e07e7063abae58ca3a37114c1e9701a27c74705829891da9c8e26ffe3761c5d2f38820b14415024d9f06dcbe91b2dcb9ae27039da7738557b1d5c4eb7fc4d40b3c3e122d037d8fbe3e4f8b3564a1e7eec351a2f6e755d5bc2c47a64f59704ffd312d317803db7aa388ec3ccdd9f39f6cc6dcd38ece298c85f350e1975348de3402a6987c38f04fdca425ac1001fee3bba4573bab5bbc4d1cf5cbfd7755ddbdb30d2ee8a303adcd1373eb4d838fb917e27272df3bd4be91b7e1d27b51f0a2b56f839bd576ab74a2c76129fc02ac469fa9d94904531748d7c50cab834fd177d9710138f8b6dbaa5638f7ef4cd4edf74179a8393237fd0f6f94fbbbba7cb6888a9a4c4252c37df2c9ff89961c0f029e33e064b8c2601a0f2b6240a66d7df3d172ac31043e5772b70c083cd617a46bd7b51f95d8bcafe4565f741652e2a2f55e6ff823a9d4ea7d3e9c43912b76157ec2eab3055c67574eda0bdc6206f8e0bbe5f2f5d6bd3936c5ac08ca9077cbfde9b81dd9dd31a373da19f273af71ece54edd17def7484fcf7928b17e4567233754d2878c675b0dbaaf638f8cfd4a3dfc7bfb6baff385837d29da93d1edd4e474c1e96da65da1c0e7819d70eb393157227b9eedf66d34925ebb066f4cd4ccb716c7fb2325991db3aa36f3298c5ae91db6ef1165fc26ddbb6ed7d6a735cfb23967dfbd48c2be2157349e19b4c4b02942129a76b487a1f480a0291d50c4920c8b215529676b212c292d07faac2c50ad0134d8c46d81bd72e6ef84d6796847deff9d7e7af43f05cba5f7fddd03103a12f5cb870ffd16e1fa272b4f444d0fa6e339ba4b8ae8b49bd2ee8c25585872a40440883047670a1ca0fb4b082d485ce9543087260e2852e5928e10326562ca540e78da0c8056623b620c1a3e152a205151f5cd7755d1a951954b121c618230624a978a19214638c11c220ab1ca922831131c01e7478411020a0a2a4034aaea4be6f1981a4beaf990284aad5c532e58b4cf22f35c3606acba8dd4cd3bfbc246cf03df89c2ab17ce6d740654e3ea83d938fad1dac3b87b4ddf7dd0bb647ee2761f3912f8b7691d6c53ce5edec2efb8651deee0d82e67eb92b69cc0e8b92b507def7b0c7f6e2cba85e4546cc7d6e5e297589bac533c0b798ec1b66ceb8ee55ec31f3f5584a7ff6775dee1c27f163e618dfaf6949787449e01977905bfb0f666cb6302e863db4e11a9047a4f031142484306211b2e44c853cfc83bfbb3c315230ff68a9bf8d1eb718a9943174bbcb3d6f1c889c9cacd80925be44b1240aa30364e982064a511c596d164a4e038f4824495839d4fd993d3a6a82c34dde59466431fe56d443d3f65b34bddd4f0f4d5766d740485aa8c97cd8393c1a0307f33d6b338b258d76fc8312922cfbc8a16254311fed3a496d20ae83ba6564c392be59231b847aa96fd68806275d7751a1d34e1254b954a7ab033b8b2269e436b385fa13cb34b75fdf7e19469d2ef156f26f259b2c40b584ba5892d85289ba75bdf46162df4d806cb8b48edea8486b62d340ed24a39d94730ad91c2b6449b81e75a4819a38171be7a326384d901cc9e54c752f524109aab0db1a447e2154fbceb2ebb72cbb2e6cebdf34dab1c967bae548f51f7d7cc95cbfaaec65097e0329ad947258a85b6cc44157c31c18152dd1e0090d125aba1075e1926149e27e9e9ba39f7fc56a797bfb778f764e793cbe6f099ff2f857a654f61657b27842e9892e60f48bb0ed6d8395734618238c31c618af2089315e01aa31c68959b9c28ad2b3d28f7deceee8eedeedddddeee6e6eeeee626b49d59ee5f86cfcc4fa00c844254c8a171b00790881411556686cd72c257ead6d40666d3b9b4480a58d3ada762351ff53dbfb75fec02b0f2983ef5cb5d00d637fd8a33998a40d33fc7333fc5fa15c77a2dc5755f45781adf491c00487dc7aaa91781dba559d1c0781adc2e4d08fb321f83e3d997796d67c490e166c48811433583761be365c870313e06952caefbba0a817652c2a0dd9c317457affa1c4f71f357dc7c1507c375fb73168175b2664c5c8da4292733d2297b303bd6a3ac6a6a817d4c50f6a059802bfc931615865c1c8b47ecedee9739013eb3b00ff7cbcaa0a1a576ac3a4469c94c67c32fccd6aa5b8f6312e9c38b6bf5f32599597dd3ac79f15cff1d465bcfdf7ac831d9854bbf5b292af351b9a728e6bebf25d8921c68da6908d4113b73da623274c1e4f7a5bef9d2487319a9be1f13ec7b4eb7ba3bc747910f08d747ce8ea29c1d3e3cc787bb6fdb407ba82466b7c5d310b348622825505966b7422581323a0d2121bc2e1fa1fd329bc8426813634d8dad8a32ba2e2925866159966d9ab66dfbac197336959b89c77bd01dfac36b99f93df7171f0e5bdf40e85c1c3e08a1c3e7ae699b77377cfb36a76f65da7e984dbbed7442a1e64419cdd366c3ba01cb96133c20cc65fe95328779797797a59c93c57a4de4ccbdb0bfdc67c718a36c77d93fba15e463fc1f5c10fef841fa26ca18e307f9b1d3adfef132ee8f20cb17ff32afe4b80393149eb93015b0296488902143feff870851a15b2d4485214286b48f1c2415fa66c87a39fa0283d80245266144c0676ac026d5ad692091291be05f7cc1dbf287efbb863bfbfb43138fc73185af6b53d943f22968b5cd960e96bf6608834cdaa2240717c8a30b4a777f7777777777bf7e1c6e6efea62c4a85f421f593f2e1b97ddac5383aa4541cbea36ff6882128cbc422555e2fb3daf44dc7ba51b9dd16e564d2ec70a47c2fb00c1a5ae61e497fa6fcd3907f20c740fef0e173dfc05eb8702103753764e8403d4408fffcf44db70cd43b3c9b2f932514281c40921246f85a1d0e4e970e07474b128d64c57b0f4a29e325e15e30c2876323b56cf9c1a1f899bdb6f56f53d3d960d1720514b046070e3377965dcd52cb9825cbcfde08f69acc5e662f1f48f632cbb2d7b0d732fe8eb53a1a67cf33cc21ad946598bcae08e70f948136b5e51296a92c1325f182ea3c832aeb631586c4f72782c96f130f16ae97afc5189f0b4b8ce2631e9089a42871168d838f14f115a0eaeb5c3405086e44086ac75eaa17d58e9908bb376b43175d78f1d2a58b162d52a4c0cc00cb0b9c54ee0968cfdae94f1f51a8d9f9ace0db9467bf37337a2fa39bd843ec79314a64db5fff67ec65ff3e3b3dc675d87b8e07fe566d4d264c6cabd8561fb665afbdeb1fa36a8e4b8e67859efa7e6be4e9dfca2bf063cff1a4519efdf78dc26258d72f7f735c725c2fd3095df9a217c675dd4914f631a8b528f6fd4cc429cffe529efe6722456a13f113fa576601cfe2a0ccb50fa0904061390d813ae284051258b651554e439cb0380d711ae28405ea08d411282aa8235055505470bac56fe2b11406464205020c5017c72535d652b64ad48b225d1efc8ea3faa7b628e734c574e7ee3783b69edaba85aa8b25065a54d60c2d8692c9bf5bc3c7fb7c09773fae9b5db5b85d747b5b155b1f5ccdb0e47b70c2f7fddd5563bdb450c1e487d84a3e784577778770b552f9cc0cf89cf5a4f7255fdcf7dc9ffb8bc1c2a43fcdb91dba4d8b77863ef727ddbd613ca0c9f70ee17bdd28b7427bec5b12fbaebf265996610fc62b8b19ccb297659e659dbd8db9cbb60521cbb22cc3a494524a79bdbc3c93d9165d59cc60f62e795d97bc32cf5a33bdcdae3645e9d2a54b972e5d98bbf8436e7fef868d8d8e36e1e03c187de6bfa6d58ad7cf19accb9b880c7dd7b7a4c9effedcdd9fbb77ab86a3244a4840ec0229520815c52c8114c517298e0040044b209181bf589e88e0aa58e53e9005a96f16892c52aa3fcca27170df2c124938a91e8f54875f36c74bc192e0ef4faa4cf6f0b7f7da0381daef6b3e3b1bed19cae84ebf89f6f4f860c028c890251f464acb65677b13eab7bfe88ee9f4a6f771199914b4df1e48bf891a317d3f95c98cc864a9c799bf7d8af6b05ad269fc2795aeb1fa2f2a93c2f6a607b2bd891a19da39bde98da07e7b20a6d39b1e02a99f32178a93b9a88993b9364ef5abf7d18161a2182018b487859a100901ad38f825fe70d10404f31d37a132d9fbe88420446532fae308eb65bc8f4e8c5f1dd5774cb47a5e721affef19da313dea7b8676b6377dcfd00efff6be73fa15ede11dd49f680fa3e8528fff467bd8c8b96c461b17139ffc555cfce19a93890f65229549a1fffd0e2341e1248b2d96fcfce8c0fcea877654afbda63dccef680f437b86aeef016ab2a3fd8af6b446bb8990f65d0369424d1c48690948694906178363712170eb34d9a6b47dd74ba65f2018dfaffa9ea19d98d7bec71f48013a2b18b407c6c3bc8af60ceda81e86f6c0a0ade2d2d3319403acb36a23d4af0eeabb26425199eb7d74ba363afdea9ca8cc457f1cf1d1893f4ee3fe306898abf3a857fdd00ecc9ffe447b866452383dea774e8fa23d43f17b8488764eafa23d2ee4444ee30f43e117575aa18d1a19dae9bc89111395893f3ff51b95891448eae7a768cf90cc8fed1db03a1b05129770d0810e3a18fdfce8b891d3f8f700b50eea5b38fda43240647e989e861173759c8bd3b8141a84586289a49f1f9dd54151232d9ce88fe9cb90132c2822e8270689196b5852bd76aef49e388dffe6b593f981aa6b7a4fe097eb5a52fd12aa7e0555bf80aa03398dfbc32ffe7029fe38fc12856293eaf149f548543d1655f7c8a57a44aa1ebfc4a5ea5f7cc969628e98ab938023453a5c3b5f7a327d20eb09ad51a032de743e99ef703309cd7e1a7658f1c40c3f3802c20b2526e029ae2a90055630221a880164fb430eee67e9050f3158ba02081bac74a0095c28ed42b70a8e02e001181081440d7c00050fa46012e509b41b71c8091a434da6647181134c6a0022935b7eb861c39a316dfa66a1d370a4e4612127eb8baac31000b945c9cd8b40cca5d2a48b0894d0e10915484a20b778800511b882044bd85005133730f9e1da4203143605e1ca0c38dce0c397273e5c5b8e502b880ce9d9bdea56ab4059adeefe0b13cc7b05038ea6e8a2e4c31318aef400bf98a1dfadbed988e440544e573413365c848b2a946c3162034f62e0c1d4262166ebb4d3400a2eeecd847970c4e4fdecf4e1c1055a2cc982942508a325d726b1c55cc9df1cfebcb84c529e4e3f18f48061890f58d1830c3bb0a2b343ed5805900b250707e0841338b1050f6650e2051724d04cc047e6d6e7c3640500db252d23ede6c22c1c0000d4ae7503c771e050b51316b36bb59c67ab6f50fe8508580c3182235a4cd0e4051dd7a176ad1bd56f9841f33a118f5f376b01526f473fef0642832cec33e66d6218a5fc6cb8c665e201218430b233dc9cf9a8a48ef6343964664600000000d3140000201008060542a158341ea8829c3e14800c748e3e765c36914763510ea33088811842104106108000210620c410cd901000c5a8d107679bde79d6e1b8bd14eebea8fc768eb82a372f5496ad72f1f257ceb7896d377cafffec383d035293f0fb5d12d5ab4effee159f9872decd3b5cba1b2604889647c45f6bb7409d8cf7e02eb3319683692ab8c63e985997c5f2d7125838fd4def940179e7b66ae6fe2490cce985f4b0a15d41c59d8ecc5386f7931c0719f3e7488daa6ecf89e40f8a6c0c69f39e3da4403e8db3ac1c28b74c4f1a64b5f51c7439c43448172bd5bfdcbd223bd0315a3e6855a7d9464c5d1616612b2830e3bb7dd402cd3f184861844affe5fe84a0d6477aac98044d36a8894302f2966e5eeec8e0289de927f8a5e4b96098ffddd47f3f2a2a0b278e82f102d77c23db3af227cccc0c11a628b161f1450d776b8993e7c0d4c7c32a3996e72f42e8a19c079919a2b2441cf7bc07faea0b747a2cf3466b978421841c20fa7d8bc93174bf7e8e678491b444c1cfc7e512cfb5cf25dbab223d8d7919f969fd7f3bc1b0055cda78a8e77dc74488c09a89a27ae4d1dc127ab41b4fb916f0ea583c0534aa7d0add8fe8cc5e81008010d2705435cde2781022b038d714fb26d2978c462b1cd8082e350c483f3a7bf0fa064f7d78a5a429ea7a0376f0560272e6060bce360ef39481b6a643dc5d1e3028ff350adb860ef3678c82b9ef93112f183e14d8ff359e6bda096cb1893c99516e50f0e709949bf3899105204020c4f6afe11070031aa7d8427e1d7bd28ba4fd1de68eac9c464986f82c5f098db6385a612cc4ae7537b46a7d5f704bb7d46063137137e72eb12868429f5633ebc0a34e069a1989852c246e400953ed6d4f227830296266a630c7e60fa7b3eb63fe0121247006e152509227e341c9404877d42ae5d675a35f843f06be8038dfecd6bbc0c40dec14b6359624c3570c448f129a51118a00effd895224efafc5318e5cb25a2180f28aa2e2e8314e6fc5708e5c9ce4c0a69b63e73ceb1df63919b084f62300980d98ef0329fc2d41a35dcdb5d343e95daf75b59ad0c59c396c2e7826eb0fb2a4cc6f1614d8482ca36190840679ffdd73a50222dc0d0f645cdbfd7ad7ccc7c1431ea3020e78bdd7ea682bbe7d2f8a612b6c2090775b19ea8522a169f7b9fe75566ade27e96bffc9cbf6d8b08434c342551d519cc62221d98c1e944582a1b8d163df8b2c25b0633992e9ef003f213b99b60910ea9dc11fa5578b3e990b019c02910cf50b34f9e0c75f803cf9ef2058d225457bcd4387017e51f39085da4426bdff312875ef0fcf6d49dd5acc8ee1f4d8ba741bb238813abd731b35752c49e135dc6b8b1a4d2cf251dcc4322dbde4e8bd3888768a1bb08d987e78fd00aef96822d027e36c4fbd530645cd3cad70d41fb1dd74d6e8540f0ba3483f2543efd7221368125470cf1f41a3ae60c29b95a821d316f7f1e35dd36723529356ee8ca9c744dbc8c6c54da5507cf400bae60cd3487d323497a629529a05645c7891ef5d200b0305d812ef31f7cb63bce9f35024407e55a70cfea59df137a05d4c0360b6d3bdacf2c9ff7b4c4a1828d79da65881f41ff9e71fdec65f45d21d177c0be95a89de87140ffb668d4b6eb49d7c638f7ecab18755d067d24c70e2b8bfeaec695300612a380c21021a412b94d5dcfafb36470a3fc2f4c36a558ed3297b82551afc7aa7ff565735df991e1b047ca0a13a88af0e035856af5b5c701ce4343412aa4720fb5638b53226af05f07afbb90203e50b7bf61a476b8b3d512ea2ba0b22d34cf264967248df9b1b1710c6906d9e7001aa5bb777693ba3681ce30fb280f9525bda3d4dfc414cfd4cd67c35c1e1546dad9065b4720347ce75e2c12ecd97f5c61f2c53ec2b41ed3d7682bc1a0944d808754bae6905907a8e3914b43ea0d0505dcd9e3288bb073faee85ec15fd46b705acc463c95144a25fd9f528d712f96f4b9cb9aff36a604a268e69ad598b81e6f9ffe5ec8421129e24bcd0fde9c8f26726e4a4ce6361ea2a2295532c1c1afd0d45ec9601fc686017364527f98614e4b613988872a3e81d7a48379e8bec135c82a365c9284e6975293d80c76a2d089c84b8227646c7d29604c253264f54451b859245937cd69d07b56c4d6a908dd5ae419ab9c90e9c7e300dd50af0ff28c7a5ec83fe514ad3e72c407a299f5477084b891b4573c636de6cd1f21b8675770a9836ec6c3de4bb6522418b9b59f52504c34eba8760b9f18593b3c3de0f4fa06f9ee8810b026599970d4ee44741f062f948f27d619c856627f84893b1da3e6208262ee367b947e4ba1fad8ee09a8e439f1da0ef454c866e0902da4e7287185d94da45a40023d4b6749faccaf2f99b6c01b153b9cea2366161ae1c2cad55056b5f68f65e9a846e3d3d548e10e44d5b37681a70ece853b0e2d00eb6fd2ac97790415e82374effcee3f20c553a6d9097cfb3d5ac6ccb6eae34b4c3efb735fd6c97aa9d4dc1af70e703f4a1450a9da19837940bfe9adaa2a8889bb845e6498b89e667f00cb2d40168d01a690e587f4745c5188ba5cd4637a1c2353c00347e2636e9bac099a9525c2734a7b890b376369966a437e9ced303da1ed39b108fd0828983495477e61726a0d623017552882ac4a16845623005b855c8bef636f9cb584c58c838e00c83eb6c113d458619a9aa14145966891118a5ef55bffc61823ee24c24415cd3cb605e9481cffd15d3bcce2de56268d31070f9e365c6fcf247188085b8805eec32c66584fddea0cfe6947ed6d56ba228bdefce51a99d482d0adf4561b353c6df22b1aa82b632a40a30afcfcf97a89cb8e140210ca71e5ea2ef83dc9fe8fb3a8445c7508e1702438259b2f6c267c3d1b53cbb3f6cf731828b1b81babfdd00aa3845c83e91ad7c40a7ef5513b51bdfa2606cbba862263a17101c5670bcc67053d3d2ba17fb5cba632b0bb7d4f04af02146e0342e6d22dd66e929ae6fa80af33dc2167a3ab1338ea6fde39b0e11038d83a0a949c0f9721ab39bc233f45752a92c1c6173be77847d544915fe0ebe4af72a18c9ba6f982443b05d0b55569f5db2a7351b2d2a48bc174047e11d60e170f4dd8bbff0720600f206ea5f630d2953de7b54aec6089385c300d547d4f3740c329842c7c0c489272cd3e07f68f85e9e3e6fd518ec94b2b787afed01bf8ae4393c646ff79fab9c2296d4b4e200f0d3d88932ea3de11490728ce1354aabc96238957b574b7562ae82001cac6708fe8d9eb39a0f0a1d79da8d2b31b4dd62ee357b570c5770aebc4b44288f3c6fb57176b3b2e18c012efcddc964d03388ea02a8b8d82b3eb8615fdc5a0db1ceb70f2c415d7ab42a3476f63c855493514dde097379337aea5d37c23493d168e3ba5eb893dbafa2003e88928c89f96b0478fd86b579ed255c0bda6dfb8e648039b2deec5eb02f31c3fb559deaddb2cbe9b6e2e1ea6b6a0398fa27e6056305c91de1c3e6524099c73a9c9e38e8516e8d98e60c5ef80cadb16fd02dfecf530862b3463fa0ac79b0568b6ed9591979c0b3697f89940ef68af67b77683b66022e33b3fe66894f17ef887d96c1fc64646f0f77aa47677d8e9039c250cebed47cf5452313616e5e2ea5b47906a6ce6bba213aa319fe0c887b78015ef30f3f09645b00347e062f3b80f9c047cbb052703953e691309046ede2da843322f328cf7164e76da8e90956b031046fd2457b0e19b9ca3f60e8c5d6bf3f68e0aaab4e26ea8fa0934b4b7633a4af9cab992c868b6a4fc064a1d99703e536ac65884302663eb5bb4293d05ca3d4a364b7132dcbb29b1e4968e0a21c42b06cdbcfd35bc03dc61015bf4722f27b23346aa12bae6fdf956609e041e760eeb2c2d91df604a776e89781a2e2c4da61c863dadb4617d4ade09345a1f07575488ee84071df3e3dbfe5c2da1bbb78776e90d95d868aeacb08a8dc21f49c0baca13f828f44bfdbb7265b8add67382c7352a06533d0fd28a0acf13e056247f1aff45237e8ec1a84280276a1c94a1f55eb010711798906505453ed11f85f0511ce43e8076d5e93727124da3c2046022ed6bf80945780500006b982c6a51f609a48fc283151e8af95dc1054c13f788c91c7235b3a5a85b1e995ad949047c363d3e20bbfa22a570793658cd56cb47b74bc935c0b65e8c6f482339be4d4bd0126a138a4cb3d98b9815531ac4789b75a04e4c89bd4d79f32e96a5f2f0f52d06379a4e2a88f9b40a2f23072c10ab553e8988362e3b0060e0726afaec635f8b790807029a6f9307d9ce59dfff0bbc62ae3204f9f64e7ab7393270f8418b5e7b824b59b0e98915ce27d9f897897908d75de2003ce1b6742cf8fbd852b93999d0b7e8f67c026f5f80e044b289a05defe9fe604c6554e5ec0ab78a7162bb8d9677f05e3b1473773ac666323c909315632d640d93c271555124775768eb134d54046ca4b29a389513897d460327c67c570a1e52d86aaadf8c219744fb008dee4a1e4ace445172408f6b88085a5e0daafc810ee643bc30158af9010630021167bb64239087002156990c2dfa15d226c7a04331406a9543013ab43d4970cede50e9116e00afbc0a4a6e0e0e260bfe5f5462e78992f23d36495cc26bf684a34c16202cfa1d6a4ddeffad4268bc1a0ae2f67ea0ef905ab24a443a0a40b5ccc3ff36412d7faf17709d7412d0b492d5cd3177f74c75cb2085c22f62cbdbf127875e9ce96cd90fddf05929d7bd3c59aeed6fe1012e7e55b324b8f0efc7380628ee9626ec789b610edc63dc811812a81565f076ec61901d4dc194d9f94ff47997109809f519a5e85ef5798afc1e72487f4c04664c30f15ec0d481fab73b72ee26ff8de0b3b6aca71aaf9fba809d1738505a49629109894a98042496ae171bc8ac3e53879c496d9d9eafeb66a03f22cf3133f2983301c8290ee02d4d811795799604488ab9e79bdfa63e92c04eda3f0deeaa2448d604b9931b77ac9ad388adfe63d8863ec180203fc6ca27caf4df87474ec4c4f4f10efb45fb78114dd5b3854f21bd234e47201bc9069f08acdcfef5a5cec402a6cec7883d8fecb896580d0199e6c2151c5d1e5ab95fe1f354e9fdfb1b311b38699f860759000683558ecc8c43b38a5a55879d7038379463c4bdbe0eb3ce0a56beae84a38dde17ca9865bcb539a16d3a3394b068403127b7a58aee5b2e0e06afab695d31da4298d95a2be43463b57c0ae43b2b98e96529d30db68107b39e84c82358c71fd1392ecf94347b48a80bc20fa0b0608903fc4f4c4b82a250de01dfacdd9530410c1102a8a05fe0167746cee35a2933ce641001818e381b4f66f4adadc0546476fcd611c739d9e9d8c800aa12c3ce5be61ae7a08cb24a6003b8e9685bedd4abd114a8a2082b4cb5f89e8d73c03339beb5bcdc9a50cb02168182ccdc142de0abbfeeb5808e7caade6c2659f504e0036dfe773d81db03a151e436d34aed66600b28f6eaae11dbebbbd53e7626ea19ca2a07cb350e80312a9376cf04414685785fa1291443be49ce3e5c0734e9b4fb251f9871e57f1368aad6caaf4a44e9aac1aa3bbc185591949b8ce630621fa8a516038b51dfba2442b63d7e081827dcd76a05e3dfdd44381cfe447e4c8cf8647c9adc873911d053e338480ce3f7b79b5a5c4f3230884bdc4dc63ac3e50a506f2b5e1f4e60a0c58e8edaba67ea8910c11f28458473d22839d5dceced7210631f4ec0972521c62e8344309ec8f532e07e445d52e9cd97eac2b2ba0349b8595c91072a702e3e66d22c762810baf860443cd4eceb6ee7b1e1332540f53727f9ecb1d7ba0865bd4c0cc1a4c0b85d09655ee653da2ce5076d33eb7ab5ccbc1188ace376700b21028695e23d5f715c3bec24248b7f9925317b35c9af79b1dfa4de43b182afb41743543b780553e23bc005834c75b598df3732a5201c2f44b4989cb72c5ed9e6f73c1c4915af8cfab11a12128814cd3b0cc96137ac179ae52ba8048e0aaf84f945c3f9281b554c3f0336e2f3faaf22d8bc1e5ab8b9c4850c3bf98c99f69db86b5637110fa6bdddeabb8b160bda94103904fa9606a9100c5d7ec299d428ba102a7277ac907272ce033403d3555a5bf597a7bea780c1d6f22b568a45011c3033cf6e9a54202148062f020c548807c59492c0a6613212a2c704b3cbe813373e14ef494c7dfa091c26ab43a0f6124438ab18eec3177c58ac88da46197923abb847765bafab49e10f54ec78d780cdb4d5134b8284ad81ea9fb38ac1e323017212810b5f83938e8bf58c8c4b9950d38fc2ef8daef684a58a85c6d9e88d5fca9473661b7a031b680c56b34e4de28aeb18995fa9f1123bbaf34092b116609a0f7e22e4101661502a79098a06066b6b3c1af81cc809f8900e2b7fa53df992c23404a8efe38481f0371fb061f452b47a6c8612a317283d1fde72d941542c87c322e2c59d0f0f3d5bfde974f1a344c9277473a519603b4e577991143c3769e446c6191193d4b65ad04a7a1d7b3a94682b8618f6185b804ada3af6dd5eb70d6fac9cd5b1363be641d544982f4381cbee8c885e640fa9d62babeb9ff72fc0986b4604226a05b87b7827dc86ed411db2bb9f33c01162813a97a8804685e3d227b995d3e436a613b2a194c847e954d03ea71d89ab63a3cf05c7172e006e04516073b42e620c4e53dba93547f5824fc4f7ade4e8a5bcc3a48d24d7d85d7de65a46e3c36bcac68292a1b21ed095178c6dfb31cbb98b64da8701d9a7f8ea3aa8132f481a2f26e37590633ec1d1372b16c3fc07aafc7108b28f283efb4d9307777d68b9a565191636e8a1ec438fd1237c32600742d5bc8a9a391219493f262cbcece588eb48cd794249f1a49ed7460b7423e9a51714076480428ea1b6cb4c087796fceb0331aa975b91bd6e8dc52ef3ed91189eafe7033ccabf394acbcb486877bd330cde4b62f146c6b9c25cb33aa3a0d079b820c80064eb983b658e6ea1ffecbe7794971a6db49b2217dbd1156ee0f70cc3f1953449631893bdc3ef38ec92664c9d89e1180192c56726500704248c5cda9171b1d9555a55ca7206eca83d7fce2e2960c0b181369fb0f59ffa5d947a8242b3ce46c476f4b53d9d9f2d72a3b150704cbcb7e4b2f23aa1b8ff64c8e3bd2f05cc8585db2141d4cbba56dbaa178ccf3953a162ee86c15fe8a5ab66b1c59dcbba9a03237c8849b4333fc9245850d10ed3b1dd08ceb0c2e0e87e9ab166a5e9d7ac0c7881ce126b56a937aed20188400c0a74e3325ab6f4b0fd74a094fdabbbcf51e2d4a1320ae54265e084e94568cc9886849af74c7140f556d33605879793e65f1b8e33fb5175faa3891f480a2bf56850d50ef42f834f83ad2ac6b88272dadb995978ea665b119567731096962f3858b1c8f824b55c65501e90a801d1e53da0f76599734ab9fd6f2fa397e73f8e0d9417a5a174ea509596645310c73f25e4f20aa0be3e3b861351b0198fd89b575c67ce44bf001bfb93a2d837b46b6352f3e33e3ee8937cd837bbb6237dad509c90af15c52411d6f835f3b901ae4b15e307632b8d98cf43a8b3087e3a3dfe05ce2ce55b7676cf63a9ff3217f9242e635b92a91639360403b3073bb9b7a14391e46a3dd3bae778c5203cb4864bc5f87e21a6a821128d66378721909eac20e594385a57e5a2ad123520b018d33dad9d592f7ea69302639c56504a6b3a8b42407d3df659fc49168920d83cf9c07728deef34a9aa5575bd8c3c8059ab72d6903ec6f9a7d9cbe502e493439fcee28560613ec3be75764f247fefc4b2e255ea7a9d69b0cb4f2f4ba0b6f9afba4e5b3f10b22b782da8ddc789e4884035409061f37964f9074bde6ef0e0515678502a7b019ffad04e9ab026e0dd9d283b0fd1d487a48e2a862a198566b9079011f3140ecc9f3e7e83fadf47aca1c47c50724bcc7ed1bc317a15371442ee4172452bfbf9a9a2a07eed103e4eef4481926a8409bf0b3e9f0acb307c84ce40b164cda87a56ee715bfc85ea5b570bc35747478b30cf7b90dc9a94a1b99731ba652d1591b47640076abce2e4798dd445592ab12ff48d3e67c5afb6fec3095476683e0b819b2cdcd6b3f680b70a00f102308105684ad33cf8b96c50e760828160f8cb3c61717ba90e330d4cdee76fd5605267fedc7cd818b2407e9ab2e3cd60f1234d45934d6b76e3735e24286ad0f1b987f1ea9d7541a17157aea3b54a3e92f4af42d0dc0560805ba6314bd1fee00048c60aaf24e4728d13bcd1225e9ccbdecdc4350f74f90f6eae8c975ecaa456c2075c6702682d717762b4580f9b6544a30da654e00ea3d1cc6bfe7b9b7040662cad5af533927be7e40ec59591fb7136dcc682a017ba234b4d30e6db3b2082208dbac5b368ddc552e7cf2d0ecc1bf3a1d26be7cd5e6133e055538ab2102443caa1c717f9288e8f84064eae80303870996109b74985c690d4a16a0ae0baec26092dae2cee23ad18e83cfa07c1293106d8545da5b0e76e8d5ec1b252d3695fb899b5c3b389e4290904ac809fbeda42bdd7f7f143ecb9f4adc2370816617300d6ae791c63fbe90adbaa3da884d44c4707e2e9adbbb25f79071c1e3cedea1a4b66c56d440f163d3cba14011460b1f6e506844a77e1d47d2702c4cc0d9de6f20733f2c695cbd91da2f9fc1418600cb8750659714c00526fb6f0ce9fb5d6154e7b0518202f638a504cf455d25be36b6b2cde43fd463eca60b2b74c4a0599804088235cb1c4987add09a15a42d3e28197e3d2ce9e6effc41f0aa7f17d72f9c89d7580e0dd6f0dae82b00568b076acdf3a18c0e39215cbcec775ba058682651e50f5e9906eb62561105f41e0ca8e2d853a76d63123ea75b92626eb8863198045853b9e77d0270eb2847d9099bc69445d9fe209aea77490dbbce8dabe666944a75f234f1a5b4643125412773f7adb944cb4f00c7518ae77756ddbc8fd5c99b7d3d52f313995b87b26c18905496e07269a8a2db2a2a146b582d62c3e0061d92c2c69602e1fb0dee1847c287eeb1ba0e44e60e7295fa91206a514b24a9e5ae86ecb450999b3e90c2c5772bec2fb0d91853014acc6f37e265a11dcd3f08a04f5b541cdbddd3ccf2dcda8dbf3992fe5a436f67322326378b3691b343774008f62270f4c81a997a6fa9707266f232d440f0980f949da4a8040fe5b3cbd077ca63125c8f4da21a9c6719069fa44e2b275bd195408b1f8608ce2f14b81d63c71a929ff40aebe2bed17e1c20aa3366c578dfd01193cef3513c42d7f568015c1a53280cbc02c1fb7bee2ba6fa2470b38a04c165af4ec118265993ef7f622013c3fcfba95260bd9e592c911167961ae3a5a319d0d0fc5c660cab0a8ae9dd54b17a43df551e048ea0b2b51c3c77ae4c7f17c8a723fea442616bd66501e9ede32921471f973d4d78ea1aa132f4a6efe347d13bd4f0717c8ec61631ec811d7ee278c67dd714cdaed169417fd2abb0d9828d28122062398aabd4240bd4a1c111e97acae1121dce10421123294c8ca35326f897126ea1d36a8ecf813aad7dd2d1d0bc7837b31546035cc29c051d127716503a6745eb8e1bb150bdd0bc4bf2deee3e13df00bc1b36ee66b25a4d49cb9cade961994b7dd6d513024e2a266d30ca507c7dfe11c0f74a86ecbd20e7496448aedcf74ca2678f2887349c372d3d171cede7d220965371b543de76e3d0e629da4d0697e5d852ef53f116c417baa0ce3e2cf08926211809b2f94686bc88b68279f74bcc1dc4215d7b2c53d2eaa64852a02247f51d7cfee76108f4649985fc4935c2f557ba24a8e88318ba37f996fe91bffd256862c54f40e08fe98b5f2f0a1384d92990f5da10a9884021602a6089d21d0c324f6059d347f29d587b794e2ffc8d5fcb6e0050cb44f798e6742456b1f7089cda4d72c676b7ef2be761ec4a3b1b21fbe5abcf9a13234ab09a6e4813649bb6d112aced51065db899dd9170f89efb0aaffca01f49e5db7f09f877e2bbefbfd7f072895324978c9cedc03ac8553c6ac972cc0c07169a4156265b780fcf0fa7d33eccc2c6526514819d284deeea2738af3eee61c6c2c527ecc62a9a9e7e4437fa91298a3061bfe287255b6faef44da00cff22fd194523970d5a7ea80cf8acb65ac773abb32f499320d88a3103998ce0a71dbc5abaa9000f63d334872ccfa38837ba881908135ba47d868a90bed8465ead588c57d12d6189b01cb0e36571c32d98c5a80bd9695f190f8fb7b3603f09ece676049b55d96720f7ad52234b185af13cf415cdbe30b0b415576787b97e48a929471cc88cd41e86f2022945421dfeecfb8942403d0c709f9a6ac00a5f99ef23ddafe67d09dcfaa3e498aa31471bc56f2228fbe236393a6063be5deaf17bfc49b26f3e403b5ee88315fe893ae754e90f19ff24dae840059015cf9d92936a242d170191240e396d225d0546d9b5afc1d41c1c385c4339cc59f66053462c0fef5b61e866fb444c68a77944db6112bbfd3c44d76b64beda66beb4b40db637bc1a014e9d8ae64dd220cad6abdb77047ff793bcd5c5bf8a65f15e173a0929043e3b90361fba7ae914ddd6c14e8847b35d755d7c631d2688e6eb0df805a04543f1d62688186dab229a4a402c4a4605663361cd7582a2f995477a901861179354dcbf196816f5436ae4733d7dda494b21da7ae140feb73075cde5489bfdcf071f4293eeb0a985c1c6156b218910ffdfe9bc021e8c570fb84630a629d66ce2d197f563dd2837258416af2f7471a8f991ebe8f3c360003dfda9e6bda3ead5701a61c42fa0f11415d5d2bf3f986cd2bf75c63b91b420a9f5e0c2eb5e62aa7dcb05f442c1a913c375f0eae9c35e6a0570477ebe3ff6447be8e30940ce6f4debac41d23e3c344441cfee00bd37bf3367a11ab954f48043a97ba2fc2d921918654c865993bae064463e01921d97db6e51a04c372184b6db5a91c39e5429c872902c486696c57d303620b43340d49dd1830477f7f00e54646e7c0a1311f31414e268fa832c037570d95cae8674557b9bc7d551e822854b4da4cba1e110f9265b68fdad22dbb346dcea5abbd82ad176c565e58f5b7baff7d2acffb9c5fb6bc09137549664f97faf098560bfa9361c50e48eac73ed1dd49bc7c30418d83f6228fd05de5afca4d8e7915e86e7c53c02ec9e31db14e8454b58a97fff3eec1b94b7b27666f502606cd9c3b3c61f892eb4c485a77cef9249efb987d4e637919ed6d1be598f76facf025d051cc275c6ecef8866c09464d0360c9bb37671e906614ad26877da130195173c74deaaa477dcda0b309e0471d7f3870405c5a7b57242522c2ec95d2822d61c3d64bc06f82ea242b6622cac8efdf1cfdf96c3c6618be12aa1df9d5a8b3f5f3a20dd523f9dc3f1079d1869d75ecc957e4a9d30b66171f9f820eaf5ef1d193176587188953e59a00aab5b1c6b0ea56ed82be920ca91cc3e3120bed37b6bea82b16390d469ba3586ec2a27fe7b12cbba682b45b1e0d5895613cfa9f33fd8935d08f07cac6bdf2a985862a78219a2c37a0a62ad32a1cce7a34a9270e3d06d94138a05853f9bb8399bb1314680e519f40427d2b9c623610684a53a917d5b66bd3ef7184f6ffab6c4a3673a798e787e1f2e0a058b606b0e5f7c320c619026c4ee86fed7624a1897505c887123807e8e778a85535aaa48348785af4f943290d6cf87d13196d1384f1474729ab6b6625985f5202578b128b3d2ba0a3954eb6295f064b2b0425eb807ab8abd5dbb5caa7962e89b0b0c9d845e69fdc1b438ecabd0bc0157b5cad66a66c1bd290a39716bca24141f715873cda66d1b33b49615ddd8ac282dbfea20126381ae4bc388cd04319a2acbf0f9af67bb08ef5817ef5b8194719d177194a0378cd4b9a7dcbedb476bf39f6d4b2a2e2564a834d2f1f0d505846556d9b23d74c7f01d0250056b08683fc3fcfdaf157d297f19e275925c5dd8980e70dfc0a83341891b1d49b867d8b023901b648a5883c9f8130ac08843cdb16cd5f9048cb479dc1b2480f69b78dbf9d4782a249e57014dd3f1e938f73521dbe8029c5a66d70cc01152c75694078cdd5f9988b0528489341c2b084f72a8384e96fd391ffd226641ef824175a0ed20172a17d14f2dfd03eba22624a8e8687e39e6d6b8b9a815a923a8761a1e7ce4ace9c6772d323d475cb24d42caced3448c6bf1a0814d7d46020048d06dc655069b6cb20a6a441b230cf87b4089a7ca5002752fdce2a05366479f53cf2e4a90cd8de3841aaee134fa99060ad4d830166dd82a709ed4f1da76acfd3927ada1268290d502449e107b3401e01aadc496ac0b4e10946cc9484d6100027a98a40a2417c011c6746ed3638a99dc0a0607e1a3bfbf2af7ebec389f76c2236265855356ce07e43cbb49d31e1af87fa23a8c0586fc9e59b11680e53e4d822aa916e8d449e7a3256c45f561bc16e985132054a4d2f96fe60177669aa2ba904f52698c01b1911fc5a1872d5050352e01362b5b226697ec12912c8168bfd7939314a4f1c60080c80edb14a400a4b9f7483247603e1a25111ae51c234163753267015ceca52e8119db85bd7a026011b8999d71e0f4548ea88053e7cfd4f28601f2eb32e8ad4ae38615c15512e460ab729f19625bfe3f6e4ade6c7df0779bcfa30b2dffecd0a2a65ca0dd1bca1faf0bc790269404a11717a995f1e294f445707831f102911ac0d282c05b7c18b6402ab108ee9b91dbbb604e64150b9b10fefa2398726997e339262e87682c421626dbe2e7276786bede0023e21acbe78644cce84a1dd4e5de4ecf052254ad5bf3dd9f8d8e672b3b44aa03871485b1907f969bb6640f2ae1d22bd1aefb38f6825450c5c3b8cdecd96b5d7ffe23873162903bce8ae5db08a20b00e28757647160c3dcca543faae5e509e35219cb7e4cce51d023b802dde1d747a4aefd9ca4fced05a3f8a60e334fc5a9f5c7bf1a6f1c6f9be439c357f29c580d703277390504084abc971f460480c8ec5c13c52f1bc43b3969dbf4524114fb9a7b9952001204239302253bf78bc3cb594fab9134e01453652cd39f33c3a8fc46dd5921c38b0cf2870e0a6e23ebf80208f58f719885648cec92b28815c709b5f8742b4c014a94da081925edc01697b2855b10bdce4c3edf6d0653311c62a621c9594a9d39ebe3f1c1848d5e13de9b7d18ce98f66ec856e27117b1b1bca76a61c97d3ea0479ca26959afccf0dc90880746dfc5761cdf6b0d67eac438861779353c41f0b33e23938a5b603ed239f96cae9e71f7e1740dd4b51b867a9a767577d9a3d2f9c1ed2687af4495e44ee11d6d343257c227499189ad3a2866790f9b79c8ca71af139dd520559c42bbad4ec70d84731a35342e3a0074d8d57230afd457d1254e8c0599f7d957d9cf1ee620a8079af6c9d62dbaf8065193979f2889312e8cf036404271de6375c9315bea1037d11435cb3a4e3a05b6c97d479ca66ba553640ce678e8f65695adce04d98ee48d748efaf3e5588d3dcf9ee01f3aa6ae86bf01a7ca355c0076a8f2c7340924be82c29d503d427c8501aa47e10717a275458e648a47c3dfa04264999ae361b88a2db400c1e554a3137f716afaa207624286f24bcc4b732a5b562c827020d78af84467ce18aad4ccea7e7147262ae88437db968230810b348db9aa28c3bf69affa6147b3cb7001289a76b1b041059f1a440e1d32db57087f94593b1c4a076aeab2057a236b295a371ad72cba61dba1ab7e4cd10a393b889372a65ad8f0bc41602e642616d463ff6e82a8bc9ce5232e40676039ece0b4bc0b10b4775e013ff5906c8070ce18c03b898264c28fcf0bec7415f92b2a9aa9defa027b13de5597a6959bb1ba6364d6e26b698008752ba60e83712916ef905537ca9c55ce33a0a8c4817f4a4469348fa630571a7b7e38553dad220d82c008089313cbea453ee1a62c295941a33e2eba6a2182955c6f92f27de1269a825565a3731cacb07c77c7ea0a58cdba155be9c0a079763b78a7fbd27d9f0a5dbffa361d71b877f602348b58fa68ef260a7221938da1863aae1ce007f50f4c5fda19d047d5d594b8b0ccb2aab5b82be40d0262c9a0a38e4c1cdfa6e2ae70e1257f0111153d6b6329008fe5d144f8c2289d4835891b5370a8537c4a31c290aac703690ae65d273f350f0d23978231881f80b3a03594ece499d46eba240f2f578b066b487cada7e7e4fa16e41bbef63eb501eff9592dcaad7eea8b2b4717dac4ff306472617a1291cc0a9f1fea764a7bcd86da60690bdab2c21a3ec3d0de16a4266efcc67b573e2f4d91992a7c107341989e61699087b9bdfefca0bc27f49360a56b8e8f482a4380c5a232748bf10c54d486f43b09db7e22e79aed68150230246426d52c22759f32a5f132a718cba1b97c91350d85029447cf1d7b137399759d81106e82a83ca6b4e21009ad106f40f9201c383ed7650dbb92fe0ad03b963bc3a7e6d85075967fa4bfe10a05e976b044fcd07c7aaa5bf4bd2e8155012685de03553235a9e91f8087326a76dfd55aae4e101646b86b910ca0b40d077e21c655c802d68c2e76332619041f42ae6de9861b0615b3930233c958d398191eddbf69b5ce920eec2b9908512666a6d1922d83df1a17668ed7f58765bd845014c1dfedfd274340ef873d84e760ec4c2d5882f58061bdb2b66fffd3babb94319452ec3b9bafe3767c997bc3ee5f680338acbd02d71eddb79b4878f847c4c4af91232db1554a2ed37f7abeda554bf40ab1ba4dcf267627343dbfd0b38c2c5008059311097bfa193d060259ff4704efeefc3a7ba69926b0f2a2423496c68d2e8a922c05c50b9e46b79ccaff138a28f2fc16f382697cb93f5a0929b09e090b213b3419797820d5a12b3a995917343536a10c11d60d4adf6f21a83e5bce49ecdb39e0f4b74fccfecdce0a45b6dab81408d243e3449e7b6aeb370e98a812b90e8e86d7f00520a2f9be5f65bc18c9086fecab8c1f841bae8f3ba6a7d1470d4b772c5f45b3552e43d43e39f40194ae023b11128751c1f964d4058ee22089a043692d791d66c6403cca898cb17da97c17c4bcb6413ef369ca02f864d73421139460bbc57caa022b61a7fe54b2025844957f6782d4c4aabf9601307a20c4c35d942ca8bb029952f10182d68bb8487928c7e2c22bf20da5a04f88cf388a5f21e1e5366f9ce5d41c591a62a9aa01de55112c5834f868187d8a6f23b4aeadd3a5b894589777b8f6fc45aa335c3bea84e0f605ea35f9f35fc5154c2a53dd04493aa349ee6e0307b78e88a43b866c424053d52312acc680c041105552e12e8c80fe312ea293bf319d482c9154642da0161f999f3e15b5bb2cf0aab32590804aaacbab418879d07a9960c04828335dd11f842c87bdf97b0cab4ef8e373d1c7d020d79a70ed6a1a90b7643aa91403cf3396fccfa32d060132589fd86f767aafeb0a78ec377e2bf5acf4745bbf903549f07ac6082ae9f5aa50fda0ebb478727173654179a15f54762b3b266f4db02b70be2ff34bce9451391a37bd0238a4f4b985f710b8a7e95f40e7236d2fbebf777644f0296fef52f31d0c0322912cdd17dedab84f959e889fd26872f992f2064b062cac51b04599d766467c0dde21d2c55fcd818c98cf38103a7a1d724eebcc02823011fe848fa44e7e16ccad6c3854cec8cd7195d325114b61e730e3aa905992e4c6379f49c7309069b2dc1f29d939f6bf8c1d76bd7191c3450372f160a0abd1a80a8e9955bdef793cceb0f6b5c9d97e9d6de693d8c3790b050025e1471b4f504783b57c558a90e3dcf092fdbd2cc79fe8bfac0e1503c1161f84f349289a5105a31b2619d8ed00f67eaf0a2408be914428c1b2430729f8b4167826810585e5a43bf35b75910d039682c5f04cdd0d36f90acb89d46e0097742769a04793d8b3896c4e2ce6708f5f3225ab14e2995268b9aa93a4a6b2b40aa4467589713677a16a04e62dbc589016d2dfb80db68422091771cd68a0069795d26f558a969c336b5c9aaef0eb7f00c290de94b2647bb36dec31125c018285368dd5b12952ed8120429daedf93af0e2c6e46c6381cdaa84cb063bd178f8bbe6d0018e6385ad07b10ed00024e9e23b5143ef3b35570037647ec3a2d73b6e1a2a104760583b61239c1639d43e451164f0d0d3a39724e194111c151dc7069688a14f9119e3658bf061bc12c94add785961450a673742095751fd9bb57959ac963482aa5cc57f833126f351700581302e299b8f672653d935c2ced0dc84aeb14318551e4347dfdd20442562fbe03d604b3708b2119fcd3b569e6c252dfa6191d85764ce461ccfd6585c6e13b573614301fb4f454142f3d9ea0c2e2f53d09725a32874da99cbaf3a9437271f2d27b0b82a0d5b92a076953b5bb582578d8e668c6e33247b4560a44e2f5079ad05920722883089fa2d9119dce11b99b1801fe48cda497007e885ee44acfbf3f3442447482be9c3a55052e6b951d525d0e9ada8e4ac0b20bf49cb1e5f8082c7e75bfac5a470c70ab417009b20d6845c1a61c2d4caaef71869f4bb4508df16227932a616a92cf8f8c78e56755cd8bd2382b4fdd6189f1d7bf7460c2494c240738b714cd9a95f66d14c530298dae4c268c5f887805b32f61674557326a43ba730b9c9434efae143862957fa67316607e09d231d8b03206300db4c61f2fc2a6c977800865670cdfd851062169412c440d328116edf96a1eeb87256ff2cfd436d966e87e24c8f01d0e1d90f50f3847fb1934d12a7e8229c024e91f98de88dfeb9fabd38bce54d7a587d08a76025ffc1edd4535d02e78eeecfcdc4f649ee7378df93b783258d04324ec12e3275d017134ba611e3c070ee5ae39079b93d38d9a04c4a98df224c81283c21ae6993a5504e0a2f9b45750de44bdf243f4af575d359078ed9253cd838ab3f5480438f04992b3c3b029a83cb42bef735b1a52d6924aaf786df83820562213f98282f99b128e39c776284f82db5e616e4228050bc20e55db1a34fc14f70c7208901e1705be9e74e664c4b41d1bdacb6898119ea10e6b688c3eabefeb510d20502740baf19b1195e162cf5eff99f1e1faa418307049e944265ebd90a5cc5f1f954a252b44232d55d176b41ed3bcd08885ec5bea281e08782a248cc368273af2028dedf639300d2837b961e3d69e3f595f75814e97ac9377fd67b20f638122bfea76649f0642a1eb9fceafe8dd4b56b811bd724412e4c0179bd028f7a6dfb74c89b793d90882f9141821f32bd3b9ad8f12927ba4413b66497706c485e9e04e86d58a2f3a860833c4e1583d6dcc306912da1c809babd76bef13f2990578a7d3d9407c5873c1d922292064323f7e26afb5c4e647cae2d76d5ed6b55ac2842a61b5f93a2d881ce2ea504b185e9c7a3f1b5722c233c20b78532260b314d07f8d0222de4a4bac94f980e2238885e550cb13cfe2d50c125d1e9bf1584ed12b645d4c5ffb639e2e025c9163fe85decbd6dc89ca07843cbd802e824a517399161c4376b72de9b6205f291840da370f875ce230ddb5f2c8a455f106828ac6c9068cd655f65af5641b343d83807f5a06d40095406266a9e69bf6884c5f73da98818c0b0e04a7d8aa8c046b5b41f9f5ab0de03026b98382ac48f8fd547220d59da6c2eaed8c906d31b3efc2dba5615b832f75079f54448066fce7cc85faf5dc553ea7ada7f9ed614c451a36cc661c6648d0e6c03caadb2578f6fe6230ec137f2061d745076d4852617aa5f904fd7d6b6f58ea1466736193a0510afda253bc10329566a2583a2f889b8edaccaab912f1c179c8cbf0eb9926b8f50b8434028bf00b095f0b8b37f21d3d35ff50efc5de2cb4a1cf41088a95a7550890f844b2c94acde6e2d7c5b12ab9e959a1b3cc555af7c0a4955af976cd8dfb969d99e807a77a18d96bea10a4f7fb395551bd244e73fdf61d3ac51d131d069c941c043bd658abb93beec7f0b76ddf2c141e04c827a2174859f273bb9cb8615ce36a1bb6e47ddd450072c3696d21c3a0354abe1d34325eb55b4405b0532fd4d350892282cbdbc617196d70741bd956317c8dc19faa3fdf4dd09656aa05a3877cc218b8d81b01ca2447934c4262f4149d19249431a433312b21210f3b92e4f39445adc2b0c79c4c11f7abea088e3c80027fc156ad270e3a6a4a9ffb177020eb524ab9775fd8cb4ed5c27225e98503fc616f3b603ff548ad7309dd8a74f7dffc40a6f115da67c91f778eed3e39ee0a6cf701fed08cca6b874b383820abf536c9b69d9156e66cbd97d2e655e1e74de7e4f932653696a90fa1a8562a0e3b32a24ba1bfdaae14d4f302f764248872e9d9ad346733d4f1f96b68fb2ebf053a12676a567f01c25998f1facf6b4e5616870ce393daec17deb2509913d845dfc67a63d4f2ab4ae970d3a5c3044b653c50e9ec57e81afcf84e7cae4c3fa1bdeebb8abf610d767ef014806bce0c86d5cf0db172dd965a61129aa022d094a2a113ef289d6497d1d044c0e6885380d13ddd54a0f3c3f831042e8526e61959103d28f9f8a164e6373d184960959af18d9d1b1c2c4ffd8b75811d36545155cdef03b08b875acbcbd7231d9c7ff5e0a866bf25612f9bf7b44c08cc8dc9b4827ea09cf20e58cd5aafcef047a429f46514a545081eeae012297535344fb1f0e0fd5254a6d65df95e4edfa677c5f6d52c88a89e5fa529485efba518bf013a52a05e07fc6a38756fe3a3347cbc680a99b672e659639a84eb063740620e111fb681f8dd944ad7c3d9ced18ae4de6737902fe325162c925b89ec87c4ae0aa5ba8cb0c0aed381591f97ec95ca40328f0651417f7ba3fe2479891d58d225189c126f7279282cd73b08e19e22b9ffd74cb46ad40bda33f51922760c325e8bc02273a4c0406c43817d8feb83837f4b1109884234eeaa303a674f88ad9837b1db3772f9decfd0a4312f452f6e0f54b19db80d09f8a15e1c7b3ddf0cd405e6cef521522d5e21206594d895cca5a859c6ca9b99e343c35660776ab9275960854f5185b4f8b3bc0985303ce8f6341ebed30ee8333d94c057d4867b8da55b098edafc08e80e0c2a85d10c878b752877df49d77f0e049d6d614a6e4508db94e1e14ea958efdf00d8c02fc6e222282e9f4e1d1256b5cdc31068a18933767b6b2dc2958742333723d1dcbb81472ab295837a1173735493ad8820cbc1c21a15a208f070a44e31b6e640d1eda080d77df958adbaded4f194b0dd2745ef46c3b9ead78effaa8b28ec6256ac16893e728d89a57a628b5f63369e881e717e77c184ff6a19a6f63f608fd1a265fb34869251125b6ad2349c3cafc7a87ee64f40f132621e37e1d42ab18371e988248478c278a06d42dd98844edb4c419c26ee9c57f68a1a7c5dfd9c9942b7ffcabca06f6ea21a32bf87ee574d245ce2184113f2d716f526b12db6daa3b5eebb3265629a1bcf6bfabe36086fafb8153d6e7160fb445c5be1e1bcba833770a24527f312d78e784c089009f2da9f9612b72855e97d685858927292575270a490d122dbcbd929f49516b4a53431053151508e39107afb5ca36f0ee88133cb153a84099ccba04b84821e8e1b6e8a3206a8d95f5f38493040a990f7e508a7c75082f8da0c10fe049ade83cf11dad0cdeeae42ed36d45cb52f03d59924cafa1f9220a8109490eb73a103a0fd5fbbd47163bbc215146f3faae993a80091c77671a8a69d220e4961ffee10d077b68572d433216cd871a731c9826f2efd665d2425a0ce345356a0b611ffa60400246306c8192a920504923c0c6bf68cda6a727d66f616d415c10377ac82315de1ecdb9958b2a37eafa4b0df93bb921585690c3d3847bb677732eaefd39361430a8402c2d828cdf42c7fd532556c72493219151b048760ecace86cf45aa54cb4c6428d639f143082771925cc855ad0452106c528f11fe918b5ec7b105cb1f020816f5ce173eb786313172ac346c58dc1f091cc3b630987f3274e76ce0b1a13e4ad113547d270dba857ae30914211418d3e6920bbf38e63ba06c309952093c21e960d5870de597fe022f0b5de789c0debd1b1e3672607be8484b86cd89983319d23a36be4feb7d2bd0349ce870dec4cb0bdb810e1269a209a1cf0871ef1c0c70a52a5737e9c1fed2be37046f17b4ed09cf02894a298c3144496b6d949b42aed3c2ded7f9b53a49c80b6083bde3b2a71b96c161e404bed6e4d6eb173178117897c3cc52b18630b8fac2bb94f46758356f6d43b5650f92b61083066668418d70d5bcd31b82bc8086d9dc8f63e2f83ac461bc864b6f61462363674d0f6c08376af9d486a3f68dfcc2ba96dd7095dd4b2f4b92d113bab747328507b1f44e077d14e01cc461e51e9872094da47ae05c18727275bfc7c7a800b57b63b31648c69767375c65f7ea655932644a77e6886944cd3af17acb41ac0ab132904f62f12f2a6c66f5c9491376ccf787046559ac8a6a1fc2ee24809cf9cfa585fd5d84455d694535d05d5dce6f10a5e396a9ef6fea80b12816bdd35d2405581d0cb1d8caec6c99db8f46140cf7454e15a9d0e377ad6eb8c9fceaddb204fc92f4ae31d38e6a85e03a7280e74a3a681fa8e2ec7433a9c221d59538add3c57e617dd70077fd727883281d5392be4a60d251e5025f070ee0bf0241a514e7a2c1abbf3bbbe92abf575f64091801a1b1908fd57f75a7fc94c870d7af3ac4452efedfef089eaa99ce4da00e8b3890e3b581a87360a87c23f7a9e0c5247fc4efc8d3b8c0fbd3cd807a1a217509e62401b85fe45e4aece94eb272e15c417bff584017196e415e94a036cc9c1d46fd00180b3889c7860da5502256001023d2d35692baf60143598503e21e5f89580ff8374735120c563453421dfae0f19409df98045c304095a0a01f37ca6f94a5d0358446dd691dfdd151b34d64ab408046b88b21f886a72746fb2f9112fe026b0a0960bb65dd67e9ebb98caafc6def81064250adf202a9665f3d6b76da4bbb716276da13a6318185414dc6fb656f218ae25b4fe292755499e4d7ca24bd76e5b82efe905879f035a9fece3a9ee251db56eceeeb366c4262a28356ba098fc49336d49c3d78ef0646cbe644bb7b3653e0d8c379c50cb7e8b89e046e66c6f2a488cc72148a18770a7510f543b1a970c5f79d1971daa05d7281f27d84b18ae7f07eeecb5f1f1be2b931388ee1b0dadee22f411d0f2a108ff8cafd95b03ba709d155d17cb02a9ddce6170dec19425d69a06862bc8fe757971fddd28e964dadbd450deb6eb119c4431054e8c462ea03244d06bdcf8568377e10bcd16d2ca834f52bd7c5b72f1687049a8e348e9e59dfc08ed5d144cce9ffdc3826cf9d299d2fca650228818fce7f5980d4423a8937cf6010502c7ac8d28052f07b02eecb8b62890b413910df2667621d33878b79c3bc989cc1fd1677c8a699408f51303dd9bd1875fa02db573a9a8e025d454f11df6b5432f37b48f51a9ae2581c54b2cc3c69954ec4d27bb127dd261672eb5ee52ec27a177c3616cd743087abdd88e85918cb785d44a742a3a7225dec32e0d985ee66012dd23d3945a77a167b3a982489b4e94a7742668f81cf713c39a04e2674f99e959ee9c56c56394cb730db1f262174d57548a62961a8aea90f8beee6f01fc22d0f0593d4fb811c71cf424f80c29676715c2e79e60cf39ddda051220767e93cd7fd9b62d32a0e141127d3dc17353aa63c12da824ce4eddc916e865dad74b3f217a4522f170008f0e9722757619f535d4664a7632f3fc57b5760b787fe1dca186fa82f4d2b9fce6ffa393944b6b0cabf00632747f9dcfe251be42543403e398ae946a3d3fc97ce152ac5b995ba958f19539c21548c242b98b48a8410f59eb0815e95f2222a5b013192325ff167b07d1edca9258422ce489aa7bf7f85e31809e465b9fe2a2b82da1ed7d41b1616dfbc791ae0c280b32633df92bd11fa003f1d2b7140dcab21bcd4773822963e58fa2cb17d01dce63a28dda1890bb48c03c637cb007e2d6b1b1f9e2832183d18eef0bcc16fe0d06dd8f2acb8064b47efec9177363bc82a2c1d9599e4472412494d832812c34b850be4ed074095a94be1fd7e4299a6618d78640855882b42a9bfb37b1a80db2511fe44fe9c6b1b54390910c6f3aabad180fbb191349836b76ae1eb624627900bdf4aec00c13506f26c80b5616e3fa93f43414143bd16032616761a086ee1cc6babe0475f44ea69761aec3669d19889915e1a9cb470ad996d9253ffc50f06250fc6dba0b2ec34c451d08026d6c559aa7a23084c3d91aee7d3d135db99b1fd50a64848c2b12b296b4a420f9f81ccd295407d67e152d8509eb980ca1ef17b80fdf32e9a8edfbb3cc20a1f2cf3cedfce0f28d1321580c8199a15dc3cc40bbaf6f29c1de4168b5d5c34c4b74e20c691b233b3fb18f694589db93fe11a7d3500d2af02a0f9b16907ae42a5a3e09e0a777255fe9ca9573a44468f271240ff98342968ffefd676030c2943e83b1c30df6a5dc2b6efa0ca0fb96f0f942338aae21bbdcd063134b224b15515ed2dcfd273ae6d799bedede42e1b5c683bc8832c1475a167d47f9c07b80a6aa777b1b3cd96a3d97350735d50d5f3c99ab09167168c07c9a70ed82e09ff43d1fb70c290f8c45638d51f32edebc9c71b2df133db5f97a4637abff086169327c09bee4cc870bb71102323542558917ac3e76c21abb2f0840c0ae7fb550853f260a558e6616b12ee16bf4a8efa50c6ca0c20aaed02f5ac52bd6686c82a22236e14248df4b4a4432cd4fa9c3d84be2d347d407553f6080704873e09eea229edf13b49cc312c50f4b44a4d0a7363e485f755a6f2d2da61f3615a36afb20af345e8441861e3d55ba97e83ac4f042380d0a7070de1a8c61c9e7684bd66b75cdefca74e91ab405dd1831b85d00bff80348b7dbaef19b38dfa2ce3dcc42fca4d2276331fc81221473a0cd1bca11384a04255834b21f903bc2e66c99d23cab8871b72a2a0e069ae18481e9628dec781bdca7755cacdfac17aceb16767318c85d387bed960f5bbf07439c2cab7ca034189cbd86f736dbda3fef259351c992a04c4cf502371db9c9e892d8add26881d5c91fb93d3cc295d51fc1eace74f6c6a048f33fa9809177362c3753303cfc032103bf564525c9c24a8e6b25f0d374cbe8e9d3d78a2226eec332e8886973b0be2f260863740b2e2803d7b36c09feb7c485102354820c9d21e72b3bbb2fe5c6b14671d6602669a4547420b0ed87198cb0e76499a84a6ae1e72e94d38a577fed468156b5a580e68252c9fe39ed132cf0628142b2659d48e6aab560d8da651a5e4885f672d5838725ecae0ed515778405a1bc0712e0c2ca7e46443d03b5e8c9244ff1ad58cf2b2c0d003970e94c143c820f8b2ab49f7041ac471d56cb2de7f9e9ba401f2496a380350f61b11c2857a9b86322299cc010e5dc17f761a47116869edcf56fd9f40fec5a041e2ca9a98da6a0c151a809b0d63fd67878b55dca745ee9e0f1b8ff3c07f8bf484a6aae383bfbb74518bc76fc42db3535b92c599abe8cefb4273313afcc4cfcf8cb22fe393396f70b1262dfbbe9a2eb533e343ee78b1afcef89c924fb4e96566e4a8829e50d5b59bfd4bbaec4149ecca9310518624e72c135a17ef1846f7699591cdc46daae1664648ab6bf1d177b3d04f243fe6fa864d3fb434149002de99917501b653e2c4cbdce2bc177a2e283397c02f8b5963d09008cffb4e5bdd6641d35c62419f61b8dd05082a24173bf58dd637c60d88c6882c15e6d7e7cc9b75fc88c89b7eae803cc0228960e5d1986ba5cf7082201b35af9212827e222636ff49700af81109dc4c83ef25264ee785e45e20896653360362688ea10c5823611b078fadd2cbf0e13dc16975350a9e816a3301e8c39cc3938ae9b81a8dc0cc87cac25b551eb8aed6b137ce207ae17c8d36d6ce40b720028719f2fce7bfa67074a0edbd8dd8b4959ca91a63cfd955de02d048b7b4db77c4247805ab2efcd49bf4385ca66b043cc7ea9e0688638a8fed950e8f0b5b90dea54fcf44dee0555c8c64656c50906758c53c803850fcb802e8f0b855827a374effc875e75bfb5e91a9d563052d3ce7549c05e045baa507553b816467e4e596835051450302981e14204be7844af68b7117b2cd5a8301b71ccf51808ca483b098800a894330e8a0d8916b791ed5434f1490ae46122d175527ff3cc20c64c96be67c3762a2db3386c322c4bd0138efcc817f59a6a0cf0c4c880df25f6b99c62116ef2005f4369d879428114f96718e0c32b56e164d691f11e4350748c47e19189168739440b9a289ad4acad7db82423ba09c582c0f22c53ac558fa23b67ce40796d22a71f0bc53d5974569cb1d3ed96b8206843eda96581b0cf9b860b951fc008a7322e43ac551da479c7ce507204a2b325b1928f190e5356abde1ecc964787c7a5d6b621fb1e4eb87c988f7fc008fed105fa91dc3756aafa48f18f2921f28d526be07439a2642d0689d7d66b717c09c224d692a95fdc0a067d052610b6a60529177d918fdce4492e3440bd9bce1a58fbe3a9a017e9fe9196ed8a5c6727a1f3e3e82d2c0c990f862bfc4d6a82e5058e2ca711f8ce2ccdab22de27505e401a341a5983794a34f7d144364439729e331651a8850b0a3dda0030d3b857a6174ed0c2014e6a1aa8e217da716088fa36fbaff5d1eb18f24a8de09886cc02f69c94c588db2233ede1808cec7bb0d18da30428c44493d46dd49b9fc0cafb38fa046981b3df6124270a53b338c1a4647603d9e066a2bdad534d6ff844d42d1685f604fa0edc50df1b889f24b8698f9283bf668c9ab3f6eecc031070a442cdd4210f3ddc3d983bc7dbcb2cd7165b509fa6a048eab64fedbc027f226daefdfb6c6778d135a0c0ad2cad471cb64eaa87663f880534bc7eca50aaa125da1dc19e434864e65ac624191ae551dacf51247a66cf942b8948b1e94165b38d30131904cccd5b6eb0c81cb23c7a732aa9df0902fd1d4de6d4c6010acb7c57ef8c94cb5ef9e5c875dcc66313b572ef396e9c18223a19b2415a83a7fced1e3a75ca31b68e61fa31a7365b020dba9a2573ea380f98fdab3e026583f668ee79ce68f070a7fdb5866becb05e21fd954255847b2b9be89d5fb37502d09c343560f39806a5e29c078bb7471a8e1d8ef82dfefa082615040091d2fefb28865dcf65e379f8fe9c2560de57dc1b07c3a82cd10c12360e04d6071fa08426f884ffcb43ba25ea86eacffe4ac671f2948b462562fde4ed042d6d94a3cec4fc0a39964604daaeb648fe3dab22d65817cd9a4c9a9099bf8b7578ce8e4ab94dc511dcd284c91388015fbeb66c3f3e86e2546ff4410ead0920c80ab442122d26d49ab1836c95a5546420b221e0b096ff6f07effb6164377c8f58ea4bbcfd0d55ccad8a71fc212087ff11638cd7015d473d93ff1313a63869f7463c8983ce5be57a6f552936a9ddfd50f1a36118d3a7ad5a6b4542723ae92dcaf0f094e92249451ec7888540999b832844893edc9e782f539170459eaefd631f290d0553a6e053437a2c0eb89dc21865fa5b10a16c44cd0cccf0ac752edfe264686cf526033aec8aef0f6d320463030ab8c7dc16cc373602640c1d0ff1719d3b35619250aae14c8175d179c7f31aecc1492c2e852f8d3643d6eed0c06f02b66d32e95ad93004aa768f7853474b316b27d49cf7f804ec436de8433aefea8be7c7ec71085a9f1a216344e56dc2cc9e7011c4448d5338baa9f6c352b420ab38fc833530767926e0ba10ccd004091f43316e59e92a1581cca529eaf4aa1a1793249e009d13419919c0ae8d58ea71567fe8e795823999faef838b96aacf9647dd14ac150bdd1ca470911478600a42b14ae6b18c1039cf6bb68c69f320f8df8c0caab640940adb1d7dc785b346a7c938ab391542567e82577b6c321f7e67155cabce5e2125461d0c08b36d459c8529a07923b47e6e270322802c7ab9c1c3d0a87f7fd57a9e4978b1c0aeb86bc997b5985f26e30627951e4c8f222b08deb8ec689981bcb818fb7a4104f8e8bb8f4608664700f02d72574e223a4e0e8dfecee99602146f86f05be4eab1145fce3c0d83cd76daa20fd838e40ecdb8018294786b76ed9a5967a7ddb5783ccec8eb7553023a2b50d06a1c40af0527d47c8e30d68d1b6f973077891530898100224efe87a9e2172691ea91107a227d0bbde2e0de383d0107aab4918138bc8cda86ca201f39f03ef2104f562ffb0aa887829e05c678d6f39c416fef0420e8d5c1eb1535c5a8906e80f4af45f1c01cc171f8850dc168c67bc7ef1297525969085ce2f5e5a84c127959b66c755db09d4b2037ad8fe935c30d6555107e9b7595082ad3af9470a2660fe4441d2be0b0c06ffd17818dccfd23dbbe6588cc50524b8397487a71e7dccf0cecd57017cacfd6cc175ece2802503ae6b0e0fe4ebfeabc997bd4ec82f1eb7279446f62e217b6f29539232e2086f09440935a969deb3c8fb2b24f82a64e95348d48b64ca44aa52483ad3e132eafe5e8d1ce675a80a19d51eefefdf5ce6bd0f28ee085224511dcdd9506721cacae351655e5999a8465bd41f3a1d18195d8c2b13ba71c7a94d2bf07bee97fe649240cdf6c3179f6786029ac472a7f4f77740b0d25c47b591b5b673188a344acabd8c8cfae543e0ae47daac426d9e7e7cff90079779efafe37bffeae1fb986a900e97d1194da2f9d49cb4375c4eb74b6a1f23a3122d5300589e3e7d6064b1a8aca0541764214fcf22bd5f21b1ea822b249da9a0483a1b51be8e3929ef9dac77b2e3ea4732e5e47dea573aa8f7bfb91ecae9e4bdaadc4995e3efe0d27aa8d1d61e409ef6402884f4c58912caf543ec014c7d8033aa489bfe4218e536ea1713fdaa8f3d804f90969f128cd31f519bad193ce75a679f92ef1b4ad9007f97e7a7cbf5c3e58a04a3849a89d05f762945dd501ff52758a4cd4a84338459ff8a7d74779f45e55564ca83d8fb4e2326e9ccc3192232c231aa250ea81207ea07be99c8592ba7dbb32a3b953bdc72b703dbe30e1dedd859fe94f24041f17e656445e5eff7a47cca3b1959953ae3f3cc58e5f9ad06dfc67df0571e7c9ed9f9ca9e7abfb140d70d645fadc058bec927dd852ea27e60cf3c6ccea1b21d325019fdeea89296a911b2eb0002df4f3da53028af7afcab3fe9aea5737a1be8ec549e7ec77b9594a7e30c2d1db0dc31b252da48fdf73b2a65cbde7227a54c81a4d8af1abcbf7fc3fb5bf6306203ffe97b7865cbde387daaec41cb6b79a0f9d4806c41423a4021e7a93d98781a4411a9a7a37c8299e5ffacb6ec670daa42b585f49e85bccf2271aaf428269588d32d249db19074c622e96c354b9174a69a85385c4667d4ff54f2a063977d0a6c3ffca6c0295f65dfd35f40957d65ed6998bf57d26ad2aeb8a93e280ced7484ebd73f3d01d70779acec40ad94adfeef4fef32232ae50e1be8aca7c77bfc3df7c74781df1b39bdb7fa55cf334b29cf5706bdffde86f7953b46bab4715f55ee7c7f7f0797dff74079f08c19b1313efe1e28affa1ee3e33fa9d158b6fabf4fbd8f0ffe8dd4f8fead7eb2d565ab86f1557f2355b6fa574f67f8553f96ad2e5b37fc088b22ba988d7f23f5287f63fc55b9b37382204d68b3f151ca1e466c8c36be1fcb1defc1a733aa2aa9c352242e2da933fe255bd6b34f679f0d7436963d3de2f798be077cef7bc2ef297dcf073a583255dae5e91e4a3ced998ac20f09a637bc0f3e81e987a91fb83e3dc1fa75dbf6da6baf3df7debe9c15fe87e50982a6d29d8783a822f82bcf1cabdca924b59e313f5f99caa0e5921f47325d2244925c9f2a91e9121fbb5c3fd7245409d6c1cb1c94895cdf006dfad759cd5eead0ef2df191f3be7992e46fac41df499b832ac92923fc2ac28737da42faa203982201248adcb5962477fd810a1c1537fc03154ca8c05171a3e29684480b7c071e8323f8129fe83b77d16dedfd12520111a20f29c22558621238cc74898f123bac7a81103e2358e2e303144c4ff0ea082b380ab5c06313610b92c8e72f8151325d02840b4412e031d3254098e0da172f184f4062091021c89ee9122080ac119e88dd3b1d1caa7cb0ff7b4983e01730607832f48cbee897aeea1cd6bffb925c06be0a084b043e6d767777afaf7359cf3c11846e9f855a0277808f4a424b3cc0c4d69688800625db12236ea914519114424b4c81040253fd10d5ff4deffb3ded0cf63ff2eaf07d7f1d6bf437053aeb704d1deeb7f760671dbcb765095a73d55284211892b8a34c8b6eb932d3225c938ce3b297db0f2fa873ff4561fc4f4a6ece5749bd15e0fa670f43b98f08e5fe1e6a39870db68bc027ddb9f48b3aa3de8ae8faf52975180be851b65f7ddaac753705760257707645fbfc082183faa469d68945d2ed8e98b8e1941cc93d54898ad86a50905a2bbb7f402674b7bd1d247b8f4db2ba264e7237264746434994e4f6843cefadad8b841d24072bdb6e6b7b4a45947eb0fdf63c20500083e647b81d4a3fc0f0f9c1c903b49d7697b5fa68db1e094baa029f600ec765d0a7da14b070ad51e9eb7aad358eda22a94da90b8b45fd765d616c3a6877be17f719f02048ad37a5b496a8c5e293fcbc18040af5a2f8a9b76489f4c607c1d3d791862983230de0871f82638e87572cfa8d395e58caf924fe0421863e41fc2401d71f53101e58de1fc71ae138e69406403f3188207e50d573a20643ba2028f10f69a904c14f5993e947193e99cab382230d53febe9186efc50f67f08d39f55f902ffa0d026c1ff760543aed19b343f97aad2e92340bec2058aa7fdf541b04f87b9a6faccec07341485fdc5af23c263d9916f940486e21d3a2db2e836d1231bdcda18ff782ffe5801f49a43fbc650fac99119055c3cbde83b9df3e79bf646ff63ecff3debbb7bcf96b8b8489ebd31a0bfb3e0f0e6e7b77f7e73b6a76b760cbffc4c9f77972dfb2450018b2bba7f029a4104377b6a7d34905273b77912f498031e7d6ec3ad096973460a05d7691432b66da4d4b2af03eb0744d8e8202d7ffecc98e2e0215f257ee50219c01e71d7537c3e71d3597bf7a6df879e2f759b7f67ba4a176018e33783efd4b5fa2e301beb03c3df4373d38d2e0e92332cd255287fbd9c9d363c85fb92386fc55db6e4f12e84c012fe796b6044b4908bd7badbde5b5eeee5ef57a056db362d4e775b70db487e6b15da1107ad67ad65a6f20426c03dc5d91c293bee795b4de7b733f61db1dcc22a49fb7f56410daaede9476155fdefb5196aedd6e4beff6a6b49150d29dd0cbb4447939a4b5bbb45ee6b1b502210baa3bf3dc5a57606d48866115ab4721df6ff0826f471a343c0ab47cf6e023df2e72d84316c36f1f69f078175d641cef21b289a43a7c4f3348eaf0952d1ad72b6d25cfceb704fb85aacf63aa0d04b382e8da2adf9f300c690e140eb098eb4f18e660a1926a933ecae998e818d1db0b37306237997ef8a2bfae580f66113c73dc5c6d0ec2b0526f01c24f65f54b674369461d46dfc3f2d461c1f7f7c1bb257658fddebff2d491cf925218e5219ff41be7a6f6fae0efbd0ff6e9db1d4a6be85bf2b425a533f4eb48439d591a3537987bc7be1b7118b53cd55e2bbc6ff94680fba96d535c7964fd7ebeaee3eb20bebff8fee30ed934d6d09443cca5b27e6ff3370f2ca5945a4a29a5d4d20fd96fb69de97b64cd38dedff7f62bc1538c8098bdf2dc21df3287254fef3c3febb7c131a7737b4d1d2c99c426cf526ef2a40e9e3ca00d6a1c79f51a47361cdd7054e3a8c61185952a406b1cd55ade0f42d8a5176ea8283ad82ef418b3f7ab01c378bdaee74d00bff8f7beeb02da150579008d70401ad94b4a5fb5d60a963e2e4093974ae11518ccb4888b1770c1c510232e8c28e20288109d0b338051991671413bda62975f3aefbe78c1f8175b10e5f3633ba09496eeee7eadbbbb3b75a7b652777ab284e04add6912217d715a21c796e6325cda6a8164f0097697d1590ce3d26aa066c3eea65119a66cede9084c8322e5d23bea4f3f5abb82e1b9708582da2c52fb0524452d854ef06ad076ad6bb61ca24aba5d4d6a1a0d727ff7b44ffff4779006eaafb8ced5219e0da0e008263b21443c71c18c06b75beeaf4c6a900d1c38e4a06308b97f87364fb99f871def011c08dac248c81125a0cdfa2b509b3e83dc5f6d44727f1dd226380097b15ebc622e7bb540064580c111845000c44c06b9b570426ed0270958ec9cf06307447e667e440b24c4dc4e184276f7d183a2a4269808818b533ac394bbe60417e4d2db36c95cfa6fcc291129491264ab40b57e59d17276ad5645063f07046a53660849d066a73750bf3ac8d940b57ed5b36b4df8913d539563b1789059c877a5839bff8b46a3fd20a291a0cb74b41822bb30c6a00ee53aea5098fab59b9113b950d0cb5603b2d586888c6eb85c2dc969ee5303ca5da346af1b5bf61baa04f8c682201113af859ce86b035300c127cb9d609102b282d0d515e8445639f9e1388a142188a82a2030c105d93f35e638e863094f0401059445900e723f98851272bf8893e081dc4c9270850f764862e4fe980b373b27b9ff0525e420f7cbb0042372bf01dacc69931046a718246c91fdc7271806163cc0428bdcac24d985dcffba4c9bec723f8c4602921c037ebd68163f4a5834c07a5284c506b27f50b8420b979cf6da886a966c1257c420bb1148b989dcff8d39fd8123dc60859cc6b5242ebd65911d63ca4507a6005244104b583183f618f40d113e80b8c719d4d74bc7442eb3bf83a010b418dd084a804ff065042419b931c83a82853178e4e70a7d4440ec8a75ab791437518453d0823b87e594aab5564c91adb5d65a6b811a466d331f04358ce613b38aace8c2881ee07a902b320208803451a48923432b964bd1164021eeeb52a9d4815c90c8831a0881c54c8b724ac41b0e332dcadd92e4a008a1c060a645b925883ff029d3a2dc1645c05ea64552f898aac0a64c8ba420628bda138a56991649d183272091cf8f19c1895022f59b9634bb80a6cd6a49b365eb469dd9af335bee18b181ce7af4409166f6ebdb924691663774ba6ab12488239925d32541dcf2102120e227d325421459f283242f19828bdcfe11a89f83227919017f4acbb58c80972d1ad5cb93069a75c84191ca0850248a94e98bde593124d32541348191695115493944d5969f20eb0544a9d10d88635159058a5199d35c87ca7a9ce6b4acb47ed503a890abcf51bf68f69e7ed5f781000908a09a227fdf4f072085921be0162836814f302b21abd77c50587d0dd81c04194828d3284cfd4f09dc4ea3322a1214e6eb6f7d5f25aa4a9eb4ac9a80568baa00720967e7bf5c987ddeb47ac6c8f5eb296346509be70bf9a450e4dae6498f727dca85519bd57baaff04a10d29424ba20406f905f974265d83e8e9b4573e9dc6da6993567d2a06bcfa75ac2e34443b9d4674439b38e8e88c01540616825b3ab11b9e594be7125118a7553b6485822c50759afb788d559d7653ad4f761a9047e4b0fab67c01c765d508a7ce2a512a095afd197825a38968b4dcf2a72d4eb25cfa1583cac021c0ad7ff1825184cf574682ebd3f1009e533042485fa03480a9d756534aa698e09ac48ba6b84c6fe71b6eeeeb85ae95be6809e2dc0da0b21bda373e33a88cf57a2d915b090fc70d40b922a93900c92737e804cc8d4424d71fefde9c94c98d5076413e571f126ca34d5ac690834cfd86bfd3af552fd9425abbbbbbbb2dad5e2baadda2f00f7c04665d17fc4394e7c2159e54698c12d1ffc61a4ad086bb0459f8073eb1e9bb69d115ffc03f4a44a89585eb9803f2e45ac4840a6a8d2d3971d86e2da616e5836dc6280de0775b9e18080a06018508c1e16005d95870b8155c0a878243e1304e65fa94f828323ca95038b620231c231c201058c3d5aa2783adab94ebddf2060f87abae001c38ab32be2d2550b30aca8e288b9f67b62acf479d4edf7f4a953b1f4a8a3c3d26518f87c00d68fa04aa84ea731a515050611d5b3a279448d259a883838ee65303c281036d1e4f1da3b8816da3937870599db18c885892925692544949def72be449e5811e91110fb593543b494916e021c90355654fcf09f59fea4b95b5aa3ed0a39e077adee9db41e1344eab74fa6543277451676ce97865ab434fb420f836bc074fef7d97365428d563f2e61e77d0a839f536d0d9fd1e73ee0b3c38cc3f45d27ea53280716e5268e89cd3aa41f5dfe7f86c9787201d3924a9bc4e0f7558aaa5f37d2becb015266d065d767fb57a9594efc3bf83f25f69e33e58ee807f4beab0157855650ff044ab01d98284867848f2523eaab5958936ebcc3e0f2e1ba9b5281b5ad196acc95a143245243f1389bf449e1e8554bd47a69e8ead153a431980b5d6e68043cbd731a7f52a2905a832957287941f645b774f10d91d3a288cc5ac7fc578b0ec60ed60295b2b28abefd6f729df03becab3cad64aa983b27adbdedbd64a4b79beb25d295b35a4fcea6da4fcea577ea5f2a572077c95dff93ec5b254de862a646be5559e679642b656ca5f313dcf2c645969b1b0b05ec70e4db295a9d88280f443936a42454260423e2b106d0844e4b30ec996450a5bbfa41862d222212065fb0668b3e6560dab4f791bab4f29778cacbca9dc29fdea574a1b28af52ee788f02923dbc4ff98fec61c48657b6fa53fefb94ef51f25ee56f7c29aff25ea9524221bd5791e3a7c23fe9a0f0f8fd89a433cb03583285a21d4b3a6e299ef69316217d01561b35497630e5856e82f0f842c955a05085bc9f4282bff21e754a3d4e8fa8134967e10dd10d110e387472a9ef5107f59f9551655fe980242ccd790370707710e47152bdfdd40e6c04952abfbf37377546fbb87df09df5eab1d5a5cea96cd18c4bd5e96ddc3f7d7fbf4b1ba087228de88c2f34cc613714c61ff503e33f6f72ab86fba7bf01beea31d939e5fd7476225b5deae0d0e9974e0fcaabbec7d4efa0fce953a50dd47be58eea512850f5dff740497d0f963d525f497a46912772cc8126d17c6a40361c2a51c8d376844277c42a5152590da4a36bb89c6e9753fe0c37170e0604cbad7680e574ec6c68643869d39cb9797f201b8cc0cd826ba9b51469f364ed5a6a2d415a845a865a885a94b430d1b21445c28990ecdf6263ed584fac0e675b2af681bb09b96b3389e6fdc92725adf469b345f334cb78fff2a7cdae05695388ad4df3fdcb216591365b3337a589b321ab4e16a32600ef1df5cbf589f8073e7d638e0be762e23a72dd60b91797982ac3da396bf7b204c76c2ca9d52cf4b459e3f3c34290366b58006241c890365bb66cb1b50c6911d202d412e4050598e61376b6d45ab55683c06030b5965285542015c8902c9dc35e2d5c980d26b4b242ea32eb2935491d7df9b39eba2c0658ce7573e15c4667317ccc539987e165fe060c2f53f630d22386d2888d183ee661283fa15cbfdc81e163288d9c4462fe46cd42063ba0c5943d5c254aa002184a5acccb945f50ed1153b66e7cccc7949fcd6132e44bce611db31d8b35104cc2da4240442112fdc044990be22866fb255735f0927399ccfb7fb8189932868e3862ca0f47d4664bae1f7e2939158a26171317ce7573dd6a49ace3e502c7bcccb7009f2e9ca6a9897dd864ec5f867c126b875f9ae66bc817a4d3ced0942fb97ee5c69c17a47e79cc5a1b2b5f722f3a586ebc4ee0f32547e2ecbdbc883a9309288810dd100a252434c6b8acf403fa8035d7cd65bd231343d6202cbe6048fdb2f6bbc172309699579bc360804f580ec6020bd6278728f1e504efbab90c8687a194c138a6a44dbe379849123ff8a7ebe6b2185ee64f30b75a1f03e962d230a70d53e1654a15fe0455283c99923a52e7e2033e59702cb836bb49eb93875022a9248734429144a851871c7a417ad1c19e8e2fb91aea2c4508c69f2fb913963bca29554a4cd5f00f23da925b720043256223a8206097d5c37214c655e30ca8dc52eb57d293efd6ba21f3303c0c658f164bee59649ece62caef0622c12cb81396bb11f332256b87945578fcad4305ee7fb128552c95fdc34f09f884e5324c937ed9d4635bba6edf0e9f2c3896a396551a8caecd962498266db668b53651d9df922db57ec120f330bc8a5581a17cc9d9d3ffbfe452b60c5737bf1a735eb8f91879dec82075d6c678fb388db2ad18e1d37583e554465cc6dab15a6aa42ec6d33147008fd3df0630cd3327cdc7debf25c69f39be5b182359ad044cf39d4fd62e46769e214ffb319e868c408eef96673c356fcc17be5fa4a68cefff6e548629a36cb9a5091cfb107ca9b5698bf00d96db018e8defba8d7fb6d4624ad7ada507f82475376fc91cd627cb789c7e69d266eb0629bfd0af97dc8b8e74dd6e4e38200df049896c6c6c6c5c472e9ceb46ea5cb71b53460c5200646a06991aea570a7ff3828c94943127868c1b0fa683ed5464bcca981343c6c7c873c6cb783ae6dc98e6a39c74cf843336319bdc8e059a0d09dbf5cbb436ef0f73024b6ad306865443c29ad894305dcd0ccc092c0996a3013e5d384e43ca78939c31e3e6715a468c1b15159591869a5342fdf2a72153478692a4b4dc1ce09897f9faae5b0bef2d7c0bae16fe64e59bc356c61c99cdc7ccc7e950c5e6e99823ebb6b6d4a1bfe6c3ea3535df25c8dad1c4ded58486e69463c2139a9865ed6a628fd39664ed62b6bbfb67fa6962167c61f9d03669f33d9a5f439e36b1f2c440d21b8149dde9bacdd0bcab499b272c6767ca193acfb86e2e2645724af677ed5c49fe2bd056e8f15fe1a765a2cd752424fbbb7233341696d3b57992ba8c046bd2a64d7f4b8dd4b5d9efd2036c53e6b03ed97c9cb69199ac98b53646f30dc16d53fde74bece5499b67cbab152b67e81c7bc9bd20d9b2ff8b2e055a0a3e2eebb936c8fe29d45208d2b21e9491135564ff1484b4ccd65e9ab4498d9ca865ff975dcc9a278c2efbbb0db27b0df285d1b53900245c9bd57cb179a979797961d13c1d7366aae31c46f3a48e86e64d9ab7a1f91a1a1a9aa779d6931c34ef4f33435364a5a52548cc5a1b8bc5c808589fdca50ef6631fc6c81621ad31678626f6dddd1debee8f95e70e100d797e435ce6c2390cc865ae9cc3fcbd05a85f6e63f39634ff65084639e90e6948d9774dac26f63157ceb5ab215db97ed1ec62827321b9746dd63c939c9ad2859b2169b69d69489a63a48c74e95cb72c70fd130633f4347fb2b20bce2ed465a4ce61fe2ea115634a1ca973997dfb33e5f949d93e4d79b2ecc74a6acdd25b84b4192b4f9b32877d6bcebc7f0b509bf653435241fd2ad22f16e0b384635ee665ca1d998f29311d6dc4bc4ccc873164c9e87e0c29f3975c40cccbc47c371e8488542287f97f2fc07d23e9ac9914815b5e023cb9c444bf9cd2d4e9bc40b61f43d2d977cb465104656a44845daec9d4a80855e471861a66f9704729c5e92e4b488879ff67b158702f4f59702fb82775ae5b9b2ebc7ff822e21f2827b86461ed6ce899ccc7907506a304c688c2105118982118124cd77a3ac27230430e7381ec9721eb8c0587d2288dd2288d92faf325d7e5a905b894217bc612a45f2c3810c498c57261c1657ffc2e90b05cbf624a189890cbc821870591b0215c861dc9810df5cb61421406169433d6d0335890c3fc514bc0276bc7dab5e9d99fb58305757ec99d5e804fd60e66c89db573c24a6ad3d2daec9e3663efcfe2c3526b73e6fd5982b4590324a4cd216dd604b549f3fe2c45588eb4d9ead285945d34a42be7c2f5cb7f86741d912e26aedb0b11dc5ff309cb9dae1b8c07c09056e8baf5cb5f6504b7d45a82f8f922770943e63b4646ea1a766be149927c193215e4b0149a4b4bf659fd10ffc0357c49e1c554ad4d2fe659589eb573594c09cb35cc4fa30da5994ce9baad00d76fe1cf965aaa0414c63f864c05812b29ac150b8aaa25d572794941856b51de5585ba9c52360ae37f4bd95a60be4444655825643f75ed350cc9a3c2204fb005f2c42c903c2cec853c3d1700f24c01cafe2b90676a28fbbbc833c596fd5f90a70b08d91f002579b204c9fe24793e796215c8d3759422cafe2fe4e93917f2f45c0b96e36159523558097ca742eab27fca4b2efbaf60b9133624fbab5a6ad93fe582e578d87cb24e3cba6ea7dfbe1d1804ac43b99a7fbf53b6366ff64f0d09cafea95beaa8652ba9226dd2a228f864274ad9b2a782889ea4209f29a3ecb62730c8678a49f69450f6f7ae2d19dd6e385c9be797cb4425256dfa9098cf1251894976977c9688b25b98dda987e669c1d60ef810524a29e8eeb95faf7477ff4ed17aeeb6fab5f6e680ebdf1caca7d65e6bbdebf75aef82e0e7b07befbdfffd4929a5eeddafde7be9bdd7bae7231061487338dd5a4a9eab1cac4cff7bef4fdbfd5e97acb4b6974cb5d6b1ce10662fc121acc4145e1d349d1b70e0602a5d5b3aa1522ab71706f6fa058e30be37e5f6daeb17384aa98c5822a854282828f7aedc5e041cd9eb17385aade8bd296e2f028eecf50b1cdd57098954b4d7fb44d0245a7b737b9b21ccb60487284c3f56a2ba87a2dd41c76e8787a4d25869620e62b6a173030e9c03c411871c2ac41e38e4dd7b4ba8ea13e25015a20c516b6f0ebb11b9557b63d2afc6d99b016e03304aa554f682432619703e124cd230b06380ab47de108915218682b2ea17ff305eafd52aa5ae5c5252dcdd3d54a1d687861cd60f016cc124fd6aa21c5b824332804361188ab64c01a07a826d11c0fe0c2753a57b71f52ba5d4c56277f77b49b73e40ebc35a6baae257c50ded0fea4e6f5ec9ef75eb96defbd91fb8fef5eefddc2dbdf7fabd0e7aa99dba53ea4ec370895aee5e5bbbb6c6d1bd36776d8d234bab7154e3c85ffc21141245b7e10ef725e57c747efb742ee223b067fa8ca2b0df57b220bde938eccb3a148603b8be0d907e1fc9c2390a1b3a30fad55f327da6d028eb3e9dc3a280eb9f9f2e14aff884385a9c8ecee8272c8ad6432154a00541d3cda66dec17f485d6da10b6584d7fc9d2f32a59bfaf92f492614fdbf49bc8d0a76dfa4330874858ab3b1de2da7bc39e86b92e87a55287e1b5ef204a0cc7af0c69a9d3f8a18839fea9b1a6a48c39a5ff9cd62bbea7f75a2024007d40638e2a0a0ad3df43a8a2f04a9e2a0a2a837e401f90c32ed9cae2a4fb84ac425a8966f1955fb8aaa4974d247602db5045ac5687739208f8a831e7d31921f3a81f4bc447e030d732a46124bb1b5886b456162a212a839e6cb82256b2c4122b09e68f64112bf965ff3caf6459ff09b99fed03328d397efb80fc76fd76a39dee1def056d2a85572b9495953127ece957eff8b8c400e7f0a4d0a75f1dd2c69c0f88c2f4bbd4009f275d529be707945bd7e4b43b3901a232acd352c9047e5e4873f689420bc402b1402c100bc402b1402c1030d3ea229028aa9561e22db8e75e4b42c166c98d04c4e1a30944f82142092151380ebc227c1cc90d52af045f2af9c0c7fb000d7422c8fd00d1970124fc580f18794b32f00437ba3e0cd1327c00c872a0563d6073180597f4988003327420c961149c0188da8ae522f24089299060c9b4688a25bc5bb65ed8f4a22e6d9af484d6afeaeea527599abdf743d50f71ba36359d394c95ee722d7530fd89a250255409554295a84865aaa74fa7a03255699f52b3964b08cb2bb2fd10f503b6195f11f503ae19ff80bf8cff747a532dabd75abd56ff522af5e16973ab54f2686d564fc84be2fd78423c1f9b17e41df16a57e80eb579de1b748fdc24f7dadaddb6da4a963cb15f162c6192caa0b9d6771de9bbda848629d7d2774830ea07ecf1b841385d6b924c95d49c4f2febd7d2f84efa658350a8477d8333233772023eef90216d9e3c3ed2283d12ec91e2d336bf3187eeb2c94d26f09b0ccaf631c9a3e6f31ad58cfaa164bf552a21e5175af63b9189d3057ca127b0c8e70b8a1f4aee1965fbd622f1c451b6ef4fdaf41be4d3f6f811f9b43f1ead4dbae487926cdfeb69b30e912d78f29def2851ece615fb5a7d8b4a67781295b17547baae5ff69b0a6cfad37599065349247cf7d275dea46561e94f1a66dfda997ddf9952461f120c7e9e644bfa03f61c7497513fb8db5a9e385b9bef0cb0f56ea075fdb8edeffbbed283f79abec3f0c3d283df60a9fb03bffe7bebe7de8390be60d9029f38fff7d8dbfe078e6379e68899be8f1ccb130cc3cf640a49ef4d25f204dffb0ffc3eeb2a40b5692b4f68a22c4996defbbd278ae1d36cfa9225c50f494b8ae509f6a065d3fb58c34ba5f7be0492e7bfe8d7ad286ad40124998e0440e56b85c030c08e13b0440353bc385da8f703836db2646a4dbbdcf581e28995ec490ebb2fd294789f27b16ab620fa04d01345c4233e94ef1fe95792227915d42fa17c459bc3ae935abf5f0da9d5ab5e258564cf96af509b446d862ba07e5dd69036bd0f3a922f6b6855ebd75d05c9f73db273253b7f24cdd8b32ebb222814718bd3edce551327fe952b5c9b28b87eddbffe28b91cef43276f116a9759d54b5fa914b66e4e5ada4be1a76bf344ed726d569fbc6ab2aaf11892ef03e5fb37c01e9e0fd83ecb4606e5fb9f10f0c9b2d199db771b2b08e596515e86e093b5aae5fb2d25507385a3ad2497d119b6ad8880f225aae5bb8222df3f5b4e726b97af0b2d5f179f7c572c9bcda6d3937a7f142297f5b08ffafba7a733fca7bf81ff54f63062c3fff43d52a5111ba9f7c725ca2ddfbf71eae1fe298cf163b7a8b76f1f55a21095b43c518cc81591c3eeb358ac21f759b7235691fb3449beac20a27c9f9eac93c5c4ab2b22bb227299fdfb28493dfcedd3191d7178899254a2ec1c06daf26969a18b609bac4ced49e87a2e413e40364f52fb0114433c0ccb1d5b86b750e7323a7332cc392c147f3c4ff4e9d7156b1feac4202290108f1ca9e823fe88b5212cb26c0ebb6ff248d650bf5842e1cd61f779669765ebd7f5c4f05ce53c510c6ab385c88809165ae2a327df17855c0cbd55aecd93655b21b5e94870d0c9b2e5fbe2c7c3e624f97efd4a5d9873190dd2a28fcbc0d9fdf0e6a1cd65742644ace142220f0a85f27dd176cb7805387492ef53a7e5fba2ed9b013ebfff7ce51b2c87dd071fa73d69043bfcc4fbe290273ff9be78138f5a562212bbb0e52bdaf23dc5a07c45a27c45a37c4526f98a42f9565a9be7abd6e6c902b23d6dd21fe4fbd6e727df6b69f9fa5f17a11754e01ccee11ccee11ccee11ccee11ccee11cce793c081b0a7c8a3f301322e0237cae3014f8c7eb09fc047ea20508210affb0c20afc031bc13f3e14141414169613e022e022e02210b58f4d604e8091be49efc3fbb436434b4ed5300bc24ae9b8233c62d745dea1bfe61e69b07297291b8569af91b500d5d498033080910d9d1b8db599893d091a6b64356fc68841ca9899b9b999f1fee10cd2e66f489a692ccd0c92e69b1824cd2ada32161f6ba82d3524e0f385c6d2589b99586c26169331636d6856a8215341a922ae3f5f721547635363679ec6d690e74c49d3b199d88c29ab89c96235b1588d39133e8e1b700ec081d2d8d82b7aa4ce652db5979c2c064dcddbd8cbac255b805a6a35df67ace665ae21b86e14e6f4c50bd72df61dd3b99cb8925c4f4c9b157c56f859210899443e219d903bb209a973dd5a39e47005a135a8242d56563d6b15d10800004010002315003020140e08c462b1602cc943512b1f14800d749e4a76569c09e32408621406216410218410020821c600ccd0904620001060236e6feacaf147b92ef3d024ed5d6e98a2c2945e79ddabacf23ab31ec1e09d907787c2a460cc06f9c8fdad9050eb0c2bd20e5f8c032c9ad7caeb76ed5c78489869b5cbe3d2fd020bb8e5d2b1cd9c3993a3c114a468aaec787dbc79ad986f9126057c9b4175df344f4bda199829f17c83640b9fb2f9e1332e2be9819e9c5ea21b7d2496d61c3de79a7848bb2a34623ef36e585f84df121207d03acf2ec986dc635416a50a5964bb10a8117f092f228381b9e9582bb15548dda30da6870ff6af6d977b20c001047a154f65a457aebd08988121967b19c6d77c4ed0dfc682868c11c380f6a8b0973413faac33c48a7a3aa87e2f8742000c97dfa4e91e797aa70939feea98f6f51a8c55bdd602e29bccd47f605979b8470a834fc6be3d89560ad45e53e0853fb637600b187544c15369902ebc0bb20eaff3c1df6d1c19e0f06005f1faf99e7b6eb998e4ad6adc9512e7668bbc5235cf843bca61d600459039b2f59a8ebcdcbf4a8cb57ebdddea7fe2c20c1786eb2f49ffe24226aa04bd566e7486becb6ce4c3319e205273be313e2514ff7388cc2379fbe64b6428fdc1b55c60ecf84fb998239292ec19a15228412e0fdf4d297d344fd444926fec8dfe428f70a16175c7e222c4b7dd68f2c9bb0504c211ede9ecd22605ec405ba8731e1c69cb25c5f749ca249ec82008679587949ee760a590c00297c19998a005dacac0cdf2b8852683f7fb04d60ce6eaed3a4898443a1199c8d3bc8a66dfc495eed9477f9955e7ade720c0fdd9a90e733d2de65a5286e2a1cac189826554d005ed4a9418b420832a1193da5fd134425bf4cfbfdc79e12bdf0329e985f493e9822ed962d384ba8af2f485df5f4c7294d77d4dce466ed85dcf99732b51d499c16cb3465e3e4bf576fc977c2ff37f97f6fc347fbc5f00f9c6f85d7989fe7ac131ecbf4d31c5e49ae55500c93621d8b87cd4809bfe067e2b2dc45bb235da9709f26f8b713a223eac6e902fe529632bca006b148cfb3694de2d6631ee7a41c251c887052fc3865f909188ca5db6923248a9dfd8c136224e7034c4f60ef0baedda9dcc06f658f842176456e299689a1e162133e9c5a14160f179d51d1a2e1044c499a3657ef4e1cf85504b542130d965029501ae6d1b6c74b66302212b6a0325bd9ca5dcba80db1b28f873b48e6e5e32649bd43ada6c48da3b0979283d413ec368fadc3e87cc3b12273c53fb8601bd460a8e2684243761475f53d2f66a5eb452d4df09c917cc5e2a3e2804b80a62a4a26fc19006c0e6403b4f6efe0079f22e1dd9be0b3984d65524fe810afa4fd1ca2ea243edbe179b4dfbb0f396f92ace44ac8a14c14ce8168afdb475385e351287aa0e35827e7c75233de4639617015fdac920e7a9fa369152133c6164710a8b14b46de46b00d75ef468802d3ae7e0b8a8e67213ac9840655adea7f35870470e55350cd509faf359de8b23d422548a2f7441b0f88bb114926e629d76fdc7f428d07bf1488221bd6d9792b58b4ed8f2467fc0aa2cefed891afe5dc25725c6bbb3fc5bf6a4128f478b79acd2abd78a5e35605ee30698eba164ca2d7ee3f262550cd96cb961619d64cee8d3bc0c05c681a41eb43ab3c1eebd8349ce0c58d15bbcdf2023d6dbaf803f11ced28695a8664752557c5b862634bde8812deb7a0ee11b41f5a322faeb230da918eb9a7eb2e0a71fc485c70f68a181ea22cb7e79523e13236edfbd3cee8326cfc935584a46b5cd241264a61840958d354654dc9e78d02c0ac9e6880bf01bce14c3e0452c4c1c036c3c8f7585a3dfdce7b377e65e24d4c0cac53a4468d8be15f85e74ad45f0f43ff1cb04ae877c65822319313519751e8f45138a4999c5995ecb5b3d7f019604a80a7f643ed59b4e6891190479684fc8c28c90e013872ce23ca10a456ce315294bfebeff0e40d8d621b0ffe39fbf7c5fb2f6993667c71ce3f743d60fda3a390f1234692aba2489d2050e1f7998f639260ee4bbcff2543934fbc0a952f5a6eab94d23c1f370d42250ada5f7b3b2011ed486551491f9194a7760b5e77548ff0671f502958dcd4954672d17cd5e23a72f7d76a1530d91193df2bb842232e4e1463eb9f7721375052fa8f8f3ef7c185666c2f7dac72e5fb646f1ce458e4c4a7cfd011dd34ba1d43e23b1c3be32e111a1e5118fb210d1bfa876e631a13b5ec9ccdbdc8efebac9d14252d2358345435660b73ac6471ef94fb4f80a6736045166386522a35df4a8dc87cb5d910cb6d3c1bb796c33c2efd73dee4a407068a5e239c8c968832ac7ebcf0ebb22df75c4473fbfc3debb748b81376b09300588190fba4bd3887a8906c0109ad9f790fc17dd9da5dcdee7429246fe8682a73dd499cbefbab42fc99be144266f2585e80a2fe194d0bfe2a04bb90b0c804747e6b3e0ca87280114c6b0c7a7f4fb0f6c175478dc180ae7dcbd7937e230843bc1af5b85ac3bc02974cc1700e6f74fd9d8453e66a84e28dd060f0000e824c8d4233d2a898bcc2f7277bab4150a4015ed0072cd7a2bbca3433a470110c1981a0d831915d6839e7d830050eb8e1d9bd610f87b70c5ec117e1e71df8ea319a93d383bbd601cf2bf6d90b0e4d9556eabb0d2040c93af18d9f6ce85d1e136de2c0b8508018629df9578fb1c6c6a61c36cc9d2b136ce06c158a38b6cc66978e2a88f6b7abe335bc6e860aa675d93392bf34d0d5599834eb809f55d5eb6f0d86e029bb8ab02d79f995ae80482a5c13292f572c3be4342fe164c63275bd7d8f042828f8b6d749449fd2fd0d07cd479dade9b5891a5a2a93c5e4d7326f31f35d56a0a8713196be5ccbe3b756182c6e5faf5521539cd2197ae7d6c1624692864603361df3dbf714a113ca0b237a80097db5f632d534ec675e6bcf8e62d0b64c70d77f61d122a6c9bca0b8137e5511a3e6493237e7360ce21c0ec55cf423e70af973e015110a493bbc59488a74de7758960b8e8118f0195175632bc4f0d0c5d8639f70aebb3b2dc31dcd79e83c3ceb164db1d4e88289ffe87f735142fef9e9e2e51ef22c2a1ddfe5eb0613c7d721c76325595ef9360a3f3f66f8ab021accae3c9fd57bdccf037a5ac0997326310c9826afa327ca61cb84125260c91b617f06c6c81d17b4ce799dad323d2b7576e7a26c2eb579d8e007dbdf0b15a51fd957bb3694c9fefc65b4eabbdaa689552c68c1a27f2307ca551881d5230696e24643e33847bc3d94e79a9b5d131317e939b2930acdcbc7d778ed075904fc15a5851a7ea6d2eae750b337df00c79a24de1931e37931c4f8901af8410dbc7a72c691970a3395d5f28f57ae8bc480c7a7b3493c41153966cf3b1d1a34dc3e334e52a695ad8b81b4f95968b275351daeff76e43e3c4d7eebf334717ac5199ba04e7361a6623b4a9402a8ac11195635877dae82db3e3dbf114e20501158daae0ae4ac04182956fd1b09150dcd5233009949c39d3a260861c811159eb5bfc043997cea857d45bda4bd76b7f816cc5cc3cb0cc1d257a5fa697f66a754114e0157494534fabf44ba7cf9b7fca356a93b42536cf0b697594de7499df3f92b492217283590576f0b971602637591b87867496e9f5b89a050f011b115d441a1bf177eb96c2a2b078a92fd9894849808cf31da8bffa63b8897d8d789fb574e6d5963b151350545bc0d8e8b638deec3a8f142e0964e62aa3a9a25f006aeb4ebd35974464ab2b3b83207f8dc0ead337c2e8368bf431b4e6e8df4a56a6191a4bb73d6f93e7c441903615de4f2200146dd18d2527455ed99bbdf2f8f48d58712e62f666ee9507bbe944641f5c50cf3e44074a5178d3f40847dc1dfdb808921fae0d71cb64b47f96be9feba8f8eba341029370f3aa5bf7dcb0a87419f35de18708d9ccc7383a62bdc9bdd77b1586ddbdbc827c00fde1c1c62af12a38fcf28973d6b80188af272c31ba4d6c95bf68628904b674940ff1d1d1b420b3d4f1757c72f52c279224716405be1220c5117af5fe1f22fbe898484e790af68ed37f091d8e01a8c777f49e0e28d0515ce750c91c00ebcf270fcb59208ec91de70a481cedaf82da21a91d2bc1e5f321a6225ce2d0e020156c660c69b81bcdbcd9e4fe748207ceb5ddcfa5ad5a7a7cbf8c37f29e94b7c0f06e6106b3570b239a4b6ea85515d2b943115130713a593f8c336034879f4b0b71e05180ec7eec6bb273a98e70f57651db8d7313c1c3e49e939682427743b470c3d12a05c79a546a227f5a0ce78453a008991124b7ef1b927b943756430ff7d9f6298bd9d5c5e052d75f212af9bf7d4008300cec5b5c0403db5b69819996ab76277be521455ebb4aa82f1872c6f40eaf7652984c8f97af94f19e0c2bb08d47adb3ee4dd4bda790a65029a5161b8786004be4b910b755b981a068b849b27264a32be375c63533f4c0bfec1209848d0d80e67462c9ac2c71163b035da4c371337b355acb4b2290a8f786a06cd6fcd7068aefce9378fac1c165561732bdf3b675aa883f8175d5a8640ecf4f003062f7481839ddc805f932e567426657791ed81ccef8df8284740a42cd89a07bc63d7156499d64d9c4dbfd3b66e43cdfed043ea378275f8b99a4bced119c6fc1fdf563aa66fde417dcbdc76c6c6eade9c00ccb485b27b2c49d873fdbb516d799f9129256beb7a205447e7d1b9c2a0dece44fff3e295b05829eed871598655c2cb357a58beb0781e89372c975546c095744bff368f6791c7a14bafd6ab5d7f83f087ad4c85a920fde890d00a6be87644ff88b9725504b084358114b36d340fb3bc69579297d39a5b1e98fed5fc4c84c101ca553f724eb76163e256f1d1ca2ab7e8a286acda34fc874a0451f59a5703497669d4ed2b8780c1807084dd8fec14de0f7cb8d8bb381e54fe3d02aca4b6509fe8e67f8e2760aae82f1261cb9c830caadd6406881fd309c501208a7e22b4a8e450997c7b30748b8192e6aa456115e2ede84168835cea4236ee85f50b7edfe1eae6f240f35a9d3f03f156c6f65f1d1a471d3adbc4f1c4a0dcca71dc6e2b832c041e4c0c4b9a0529ed8354c2a18238def83fe8008cf26284527225bf83ee0f36f4c2644558b84b12689211f000f906463d69f7ae9a082c6d4d2cab6912ca008b55810fcf3c89ab6769108b65a97530e24af9041288f43a1e0852be77222a3e09c205b1cd3813d76a888b29eef5fd1814a12861f9b1599777a4eacb0773f04b7db3c08994fdfc3df2dff362e5a41645c35155fc465aa751b9629a3b27cc9605a915b644d7a848ab379904f5b492b0b743da01929beaccf97170e8b42bfd49b6db94282a155de13e35602297ab95a304cf9917953e333e5d765ba17ab311026a1406c5a98ccde23c01f6d41b190dafd0d665b65e78ac7777300046115cfd4968867c70807088195ac04e32f5df9b435b4992e554bc719006898849dab4a4ee36c92949a191c64756387709506c53c883d9d4ae4c9d8a43b0d13c7a6d48b2d1c49345e0d22072a2b04fbac296b069c784e4218d160f9d0845619b988544bd414cffa606cbdf1ee22da83b39038a978ed319552b0141caf5f96844a127d0d62a5aa0bf7d261d7dea3fd571c34755f57e978f5d339b05ed7f114d77fc937955b43c174ed36a43ca11ca9836981195e45b5c94357659eece943b33cf68fca2adc779dc5e166c721d1fb60e7e1f34247dac6bb5460935715d3fa5db3a56e1bf4a5eb3dc0bd4ab66e4cada28cf6f7e525c3e6cf133a3ab90786650b4b1f06361bfdb976425b623c27e11db6546c44273de777790c1aa94f219a7f4747c34ffb699985ebfd9253c7bf917a74606bca21c2960ee65868af458b49282a697c2adc6af93360823aba71a291f1512aa72c5473f04d03e8bfa94c42bc47a575721f12f3f1c88beb5f08dd211a2eb1d262dc6cc42a0ca247195525e85df0f25f608e27cfb539d67dd45eefd5e8405cf73a3932558632ea6d369ac7b136ea2432e2b8eec77fc22c583c8c5cc1a0cd8a1d32730a72a6fa89015a98e4a4a0be6b239a11d78f5180dbe3500d080d121519b1ef3c64528fd850fb0d4cb42ef8a9dac33d61349f068588359b81a859b8e00d4984e7e70335598c2291368c33c8e24850dd806cc7b38e83b13ab332dcc876a4301ecc54748e4a88fd75b046c6915bade14ce2d6e1f8af01d9ad9ddfd76aec33f83c10590c3774632cb51bf28b8e7be3da08ed799a44e82e2f16c6c434eb03cb1b6d7487a420870d36e1b2180df8eae73686ad856c41155659d6c0b7e9b5b3af4e4aac4d0863456c52984e63da2059382dba51cc1fd2bbafe921b4ba9d12d369a6ba9666f21f6529ca1a54512699e39ecbedb4b0f5b5c4dfcd597f087306fefb1faf86eb136021e7fbb567402004d4ff013c621588d3bc827157343ba61e43b5c25bd75cd600e846d0e20b0bfee800041e91ea5e3fbb9b5253213949c64d1dd76f18b9ea7fc4264449777a7ac29d023292f2a34324f388641a8301aef95eab40ddc91da1f56f6f336e14a5954ede28ac52ec5c18acfb18166c708d6fea539f98ad2588c29c182d8db5fe41848a22d786ba52c8ac7c829bc4d309ff6a684f77ca04c7b9e118e9357944636d736a93182b9824ec19d4d6ed29cbefec5e1cc5a4dbcc8d28268c20984472e4017e4949cf058def5011849f5848e51346930442847418f3089029c635dab254262ccafb21e731affe6ec433341a817d56f78872030f7ccaf045885e778fdb33f9d46e0e171169d96db339094f13a37659f0a3ac0a43d7aba1ec45ede2162d7aee301b0b5b6f84179b7d40d9651ee713c6d518216a95b6cbfc295e4ae0c8e4e037e347be85894efd9108afd81596a06fa281b522c40c72e50d880aacc603e46faa3d9577799308a04166786c375cacdbd6fcffac9b1c487979fe2bf855ebe8771faf5533c0df582ba378818d6ca8749588433c42cf7d5efcd32b1048abd807f853c9edc6b4a39dcf2261e45bd5a7448b3ff2ff4eb36bdd72e7feee2aa91d0a4411bc7f324aa8af36ef2f916538931b45debf99218789a2e96aca6681f29b7f60c4754fbad370dff04fefa2d9a9145c32957ea1a92d1b058b82f9a3ddce873204bd5bc5bcc6a037a8aa522b561fcf6b2c4ceb4a447db4f95c5517cfee9fa581ce0f92a4e5ff8bb16ca0975ac9b1d7757a2d1fc6018d88b614494644d1cfdab0b63756214b2d9d4ee8439687d1269bed6b06d0322b53a44f0a3026ceae1c7afee7661750b17d48b3a80df47daa79a90ff75ea31c2abdf7e296e508f6c040b6b5dca59d76d3f25296e15b72c9410b1c653dcd78c8e704ddf550415a2d682f1af91aee853ed701acea61c9c08c24e0ad0d8857dc8908356afa1845028363f2cc62125cf9de811b6e33026a1261293afe8be351098db0d097a5780dac24e9a259435969353c9b889a9005569da8a6142ba3d80ded197638e642b3d6901ec32a1ada72b0aae1c7de438486caf6be6980b10c84e66442b829408151048fbaec2009925b5a8a90408fd199881f699d274e077b46b11025210357d6436091e6955236f5c0ea2c490828bc896e3e99b6833f5d021062f176d2b7aeaec535dc101b50f345b71ee99155a3640f78d7343ce59cf0e86a8d1508a478a147d48be89ccef53d7a2f57aa9b10f888f3080d5cf9d966482f347c6e6a6ecdd9cbce117ad9ace51c49ff8f72af5984efcf0a09f68dd02aed6bc275d54b519a1ae5beb9f293a58219ea51f17ecc261abb8c2c4d3c5add2142f6c365b9b0f898263d36ac64fd95bd9af588a199e7f14cb03b88d0d57bd686dc0942b089784c8e8c9bd65153d3187e0f3e2b6d8b29de13cdd29cc9b3da501785f4dc43c62e395c1524ecc06f8597ba4912e89856431d8a6f7dc2fb88985d8534e22747a021a02ce73dac55a147bb8898c7c2ee2c7bb7429084ed525e4e23e71cd79838700c8598f32fecbde897126c77a798b00b8b1a540d2ec3149d5ced0cf962e0511aa684bdc12a3fd2bc9de2a2ffb04e2099be45acf7829f5e7c5408f6eca7d2d61a1f03f3c14679c763e879d70fb54c63b82136d5159f9acb385abb0c18db705b103ca1b02aa0b939020e7629f3f276e4351456d70de007191ea7fc25d4708121a74014a99421cd386946ca09fd33d54ebd3432adf03efbc0814c61a0003eb5642080f002f24f5a0b05a483a3181123b8aa04d00502d58330f1262b9174cfcf396c36a897edf3f2c29bd25e971d0679401ef987ef5a47068d138f8cd144da24a8169ac20e6418f8d365abf9468dcd31f07fbd22d523b0d68c3ceb93575e8fe575882aaaf5443d6e48f3ba09274291a5f12ee0860d531bece646e232ae65ec6ed1e681bad7bdf06cdeb86e33d37cc19386a6465b7a803b9252bdfac7eca05e010bd243760ddc8ebca2d029482c00016642bb0999c00cffefab5b3bb8fdf07ccfab3212d12905d9a6fe7d7ad54b915b7a0430b1a463275bfc914523aae7b8df39048db4be43df53c40493451cbcbdc3fa8f33710c2aad46907767c0aede6c63b4562b1ab69a34866c52fd70582f1bef9ea04983564c60c86a7d5250429417fb94f60aae89b767533e2e351ca4b83d528bc2a609915d650835152283ded8e3ad4b31a7e78ddb075b1bb1cd417b935cdc7b591d440fe2836b41bcc89c30d2a1fffce1c6fe77c4d1d6ec074e96cfaae778838198988744d0482d8cc1e6cc2a7c59714ea4460c0b82f87e585110d3d4c4702a4a3a5f2a76cba03a2a2bacdac5f0e22455c9489db9d510824ba7f6d4400bfd7cd577f22c86bde1be0ba6f16c9f6b13284714bc09b0a6401aea9f4e40f5836e929728e5181c7d23fab07f9c53d24b680bc547586f45dd0ac8afbaee5d054743669735f3059671f527355c04e40aebcfd69791d99e4016f7351ae57255165074fb4fc64202fad49afca9bf83d476a402ed958c5624fcee5cd9863264ca68dd358569ed4a9aad559829d6eae1d2852760c7b77700c486d52d10dbf994223361bf6a3025ec02fb9b6880962d57ae34383283c851505796c06618fec9904a3aa89d09f9fc040818e136f79accfaa3425bc9373dc35fdedc0c171ff59b2a5acd037ab8be48dade6c4e70efbddc7d3f8beb573c68f3ceaeb7a2a9ce3b0d02ab767b210c8806d3993268ce962b66740d8ac5e44448565c9605767f005a184cc81d8c781b13646b65ddadc1839d63ab9893e421c5a55f72dbca4f394d468c463302203a95eeb9fb0f9109770994b55d7acf76ee41e96f756f04e7b0929fd641c24d5c559b1e50a22854b7cfaa54c86b2f502ac72dc617ecad0e8f38a9540aa845788a19e41143407bd3d381837c50e92b7c126bcd812ab0bee5a22a9b50e5344ea7087f560a1f05e01207e987cedaa5e91960a71fcdda712031cd9aaa0c1b8eaa61d50823e62b55389286c67c28c8864c0469177861e3f9417283a7b5b6ba42e142690d684df5272af80258e92bb69e51f712a40453f0b16466b87e12c2f5866543716f793eed850085756d0f416fffaec12b90952a1901f499ee573ab82ed1d0f0ae4ba0c0a27eac12e9a4ef562a863b52f420efe71a4467a857a1ae6b658c38edec9fe5f8f555b88fe9c67be42e73c83cc533457907d84453a0a8acfbf8f0e6033a28ed65e262bf9f905b7fad2d128264990c06a05881518ac6379e4721f8bc8f1a7042b4e14d042056a3a80ef87711c6fafa16602ea7c9ff375114d7da993cfb8bfdec0182155608abbb64800ede459cd8fb9c3ccfe75b8bcc4c9d3023d6deae01fa9720349d76c33ce591026c82b013a2788ce13aa0014201712cc91b0e318614f10e0a0d50d8094c112484e3c8693182ad7bc8a11763126dbf7cd3cb93b2941c7a954bde7c90ae963891ec848088818babf788566cd46322d0ecc24ce38a01a9b79d87fd34b88bd589f96d56d90415177f0e28dfa0fb2e81e2c24b4fd088c27193df98f91255ef745a62cc3c948228ec740017d7b5a4a0ce39039058cc7f27304313988b7c4c7f8c7d640fdab6156e451af1db8f4caa494af02623838fd2ca5f8462e5793b4feab7052309eaa79ceb145195a1452b17ba931e07098c2a1d68aa7fdb2f06956b3c0be920f59444fb2e35ccbb7fb08321a52ea715b4218391388215668e8b3e59d39de573b10249892723511b339bb77c48609ffe1c0529de03815bd8f39676760468f9ca5c637c1790f0d80a0022c314adac49d522f103d193883621e8531ca2ceb855f24006381c8569174a29149f718a51a943f0dc1c1a1fa69880015b8e3796f3534e3b00278f445786f93c143b05c9ebf01b75c60da41974e3449199458d84ea3fb9e56b9097c97b92f300fc40e4fc502039f268e9a6c9cc56b00828838dc93a14780815f5c28128533b1fabda4dae56a798fa9de95e79447473aa0666411608a57358ab50f59946d3e8ef77898cf12e3f42b875357a6291b5f4c63391f889867a397c9b33ccf10af155478dfbb90784f36b4c7ecbbba6e28b6ff558cbc745d96337aebe4007e3283cbc4892645c2a36529445941a253b063902da9136d068a6756753c3c7166929b5225cc97202354aa0c2406dc96b2561d4a008278c1a40ddd20c10c15993b69b5533087178abc0a51c4bba19488c80990c157e814bf19af45c75d89348b828a2f9567d75072194ac4b9e08e2dc82e0a3a5422c486a2473715ad2bc3697ab00bc257504be6b4901923228fcc592f14aaa579996fa15fe184979e467dd6e55e9426669d31c94204c290e57558b70f23826a8f0f1b6b843140cd2a097116780194fa4c2293b86153cedc14f89eb214f4e268b8af2ee02a434f32d7595095e149505f105a61118d67c11c9da980ce616991da26426359c74a33aba9c3851c4f96f7299a4955068e8ff93c6759bb28125525f0c40cd468d143bfe90ec8d96aa0eafa433645b053ef7de6f856eac0e9d573be0c292ee040ae8d6652ee2bc42f7ca63c0710b26ce4d861cea42a59fc20d467730fae5f94b060b3d1580c8a80068558705487e4dfa6e68c98aeb37ada2980433fc59b0ada72465a908d9de4196b888868aefc51f29fc402fdbce872e7c93a9419425b712d57cff47d18a4c58b8f504d9dbc4f2ea379d0b58f848e016dbaf3b35bf37533ca380aee11d637276b5bd6671a55a55a4b74e01ec57858b77291d08c80f7c7164d9aac934ad1d7f9d1ca134562e9a0205b26131439d813345f3c2d89e29c547f0b12ef9b502b6c965090221f5854d62c060292d37630d860fe8063ccb2b820f8da088215d0befe7d9d88a59fa74c3c6f65cb6c2267f06b0362a02ed00fde2bfad40b7f095607eae094e5a007e5458a93e15f56f8b403cba150073d7e1d158d408c9ebf7deec4a13fdedb865e2db8a95507f6070d41e6030d7f6767232b247c7c05625dba30e236a3811dc3da12cfe03fc2cda87615b4925356f7e6e6c0b07d211e6233f8635b1faaf4a90b12f34074945e48e215597bed0bd338ee98ac92b3632e4ceff8594b5103edbe2fcea1469f05cd9b488238ab862fad3033ffb2990c9278fd1490a3442277193f445b3ab3468b72d9a98ea08413f9c98b38e00130e890b44c82ac95fe55e29d2693b2a2790959730a991545052dc651e32efef345f87495d470e489e7262a8442cd00ee0091c52a0d2225ce00911d65c5c160a6405f419d409e58d427c274721e09984d08e8ad8ba668efa0584fcaeba7edf001ca2102efe102415743864be1f50ac469ae4ba61b02f3a16d79e32d44d040d5e510ad2cce29c8679a8979555a399b0a32216b1c3c36a7719b6f109056c4cdbb602926fa3045b39b60dca6404b921c9659e9f1222e13c647d6817a32d8bc64a3ece04021185a82bdb9c22ba0d37d65eff93b93791e220a3cd20e59153a7d02f5450303d2d72d5c61ed5e51313f8e4e2175af8995388df0c28e77ce93db0aafe9db037da194f88d220f8e087a14d30772c413b76007d81e70085321ce9278e0d21e74fa70122326cbbde89cb87b68bc7133d9e932d5a0b65987d679847096ab6588de6b07303ecade6fe9f83a33cc1e85c9e3798e650b860660742c56172a9488954e96067f899fe7e138319f46db44bcab82625632d1a010d5cf7cfa4af34fb03aeb29495dd56686d80838b0f64654bf0c1c56c46963850c909ef252c8248896022be4fad00fb8b07c9502a46a62e48b32b5a2dceda82d5efa7363be6ad82771677b83cb4f0cc746704c992bf90aac92ce6469608c3f80e7c715dbd5eb7c5aa186035a91305d2bcafcc0fc6ead7eef31b2112887f01834b945c22624dfe4481ae1bade52bb8529f9f9886c4afbf213ad24c10430deee1b21d951f83f50bd9566e56deaafe851ac1f36ec7a4ad7e5db8081b5c82627872cc60b079850ec9558148e6626ca65184e41a35b92bec783a568ba804dd3bfc69f7245444bd545b0b38df3e0a86f5b0cd05a3fac229e229cc48cc1e7300dff28f41849677edd895e37b9c4d6e6dc78b85ac2a0964d0ae06d31609cd801c794cad49bcad434c364111ad835227dc1766edd5edea9988f51d05255de3b14674d8bfb3fb2411828105c657e6e5fd73f806e5653f522a33a2d155d20fab15f98ce06519935bbeadb3391d40b2c20a1ff09b1de48a045db0ac1c3dd7ce18f6b7b5636cbb43d2361b6628b993df9fd84bfe99ab3ecf569b026092877a3363f6bb2593d8b89a54453b3be9f8a30ce0448cdc32da52942ab6737843d174e36d301d6723de03ebd979891ff368197199beb5d79490df5df2734c0c1ade254266af335001f78a74b4fba0a7b8c895d1dab85a62ba244b5afd0e39a2d1f71520548d95050a791d4d0927f2301c05500916d1ee399f5742070a0c22b8e399152b952c6228241477aea65dda7c399d28c2c35aacb023d6313c519ea0d426226d1205af4c9e9c2a64fbc68c7c0c2e3a411f65441606ea7c6b1a8e7009fc0c0f8ce205128cdf007eb5769bfe4eb99a9f026ea96c9fdd5771f97f212488d041ec7b8ef507d1ff21e61a42c52212d445e499545e3ecdf90b84248cd658c789abc9c31085ea5c9ae1bba187ae628ab8a2d50b0eabeb1c5c9f2766c4e3e3958a22a95b00ba0cd446413ed5f9ffb9dae2161952b55b7779ffd3b507ac7d8412f5e34c5f4b760c772f067e2a4ee8722282b606bde2a5aadc503f16a0a6036158dcf96217904189e7e49afa3f0de684d78f7c51ed22228ac873ed8238d19ecee02fa9621a9949e03dfb80cf555db20596a340750602a7805f8e0dc7b96eb9a907fc427e07baceadf2dbb924c28b3cf2b841d46fc41076c88b136b3264024b53c97a7e5c49ab103bc472b3ac6ade27bde706603e805863f4048c1ef9be0caefd50e3b95d95a507fdfe6b6ffc0f81f2f4b4d5bf361b6ec09c3e3ef4cd2a2512a07f816a3378b4db58324b38059f03fa89c654ccaec8471a90d8dec57798235447d77254f571ef71e158d548ffed1e90dd3eeefff4afae3518d1630a276d2b00c0a673972f41c5a6d7399427f3ed4d8d55d6aa7b8ab272d2bc849d78d590f06a634ef5c50764edf6eb759b81f64deb02f247d5ff39720093c04a1fc0d3e4c651fa6d64335e19121c703f079f87a708c9b4b9003e7dc7f241760d9ef72e778345eb5accacc2b72d48e9a726b19a2ab57754d89b82e1b87db2d2c61731c7ac2432837406628677412f933142392c8948bd9cbcea2b2d31b7681db70627323041aa00aa9fb783b4da6697eb794eabcace2640f5af93dc627449677c2278fc785b34674649e3d98ea16243d67390302b23ad41510b01774b5cd369fe4ae1ad0f1bb9de92197d69f5c611621b6e31e79b373048d63d2715440561f6a70bb366c753fd66a8ffc15a846e5a9a343c168ade9618e2fd92080d1af5bb3cf4153c16f368326f7b86b3f519d4c0c58e1aff0698f309db08c94d8bd272e9979846fd2314e6fe8a8abcee78268c9aa3dec223e7b64830cf16017ae186170b448ff707af27e5a6de576ae68fe66b94b068e9d07a6cbdeb96c470ac03730b3c684b5c3d0c94c89e38f164d7c8ced6771824eef4918b42919c9da83d8b8d9193f48d1e2a95cbd8ea1e0ab925f5c438ff42433a1cf3038893af5d2be4d422432caa631651ed3baefad3d0ab9846f1412bd73e2d3f5b32123e038be1864ce9d05bfb6b83b5bb89e13b4651a84378ce55cb97a14bd8f4b5081438ac2dadfef8a7b80f6f5bbc35c60504991d87e01776b871791cc8a701e950670e4036932f0b5a1918fc34515a79e3bab54d64db6ce0f85f0029941e6027154017dc2b2408ada035d45d0db6bc9fbfa6331ab8b749392853c16dd50d4e152a25f4f4de9522ee0fe6224115344fe7c158911dd00e158d70414a86a2de08df6a97add06d5e9ef5148b45eef177a55009fb88cbed4042aacf0dacc5a6a267765eb6f3747030df04e7f52b0b18c10db0a03ac18687f926da5adb831e9b028c01b5a42c08c4c2267e3a80ca47dc9dda4903e4454e3548df3996773c73f36079c209202928e5eeb1ee1dc9fd360de1da39946b44b22d32747d956f755661fea3139a9030f7ff25b8b301a7588e6eeb3ba7711327c8332b22581960348339ec8133943b53552ea7b55d8eff1ff97a5182afc578e4057f26f72966151e3202af54a001f29588609d4522e214e96bfb3fa318ae9b74c37ec0017faea7161b01f872019d88cf3a57e607f1e54bba74c8f0e5e9817eac7c730aab5d24f7c1d7f06c63ffd3fb1e6487ee3d5e0d7f660494dfd8b3efb3b4e666edc14ee2084705f24a6df3ec3cb52b9f24f4456d0768778e87c04ad1e114a9890cf0bf2a4b2e2a9259992f164e199f884d1c856e3d916fe941dc60dcc986d9677ae0c1d054f087b811e27d7cc46cf267fc9af7e7722b48512aaeab819a2e74ae60daff63897aab475d9e1ddac6e6064b6a854d394959453cd3096ae4ebf672aeea0b443c5ff99d94282711be2eb7593a9e58ce7baad54a3485573ad1fa79598899a75c8caaa2ee57b2f39b4bff6787d62b645f2a0e5c0f5d97a76b382fb7840ba8f492315ce621b954b423e5d1357d6e4ffbad70464071722b8573532584649d34f2dfc2f2b0c81e2981bcb5eac3cd21147d66b5d37849957a997431372c220b3389d7c928c2d12ac5fa5ef0431625e189c8ca270a0620a0eff1dedc1e34d8f00afbe31e6cc442c5527ca93cbc0b16693b742dc0015421326b33307d35d3dc1e7a1476e85c5a1ee35b002c597b802591ad206a7006657690c1f209340bfa4ad41f5eb6c7aa14e6f30f7bc3d95b61f52869c1d0354cde1b1136bd7c60760f77326de6cdec34ccc70d0a19b4744cd9a95ae4193d47acfc498e7fc753cc2b22ae81202012e04135efc2839b04cfe1ae04f136ac934a0a899e7d6d9f1864181244d3d22a27430bcafaafa0df12c4715f08ba658bd6f379ea4f8335e7696937273b534017bf3d971af733076254328536b1f6fc67b4e71be1e74b4d312ab6b301dcaf477ccad47b0bd024174549bb5f5c481d89bf34710b31382b3786061f2298bd49e557bc69f2119490b3b45a542d0233e9f2a2b38e70e3c584f5a59b69a7b35602eb7e9400b45c504aa4250c3876d5177bbecd6e392723cb6acd9467340fe954d9462e9c1370470f26b1d83d1dca69148e19c3142ccb0b7a991c21c924ca1077a465be1faace60cc0b01bffefa241ec4042610f220cec461239e61efe8fd9b02d3e330a47bc06e766c51372c6c0dfdeb413cf2a3bac659b843f922cb5147e435f7361b0cf5e7bf5a027ccfbfd3b2b23119b3f0a946ada6398acb1f6a9a876ce37320609ee66499cc02b48b4b19c785e2b7e7103566cf197e2f0634973c3dc44a2ac1946a56e0b734f378da378187d32ec04586d9d29aa5219b6a32d26b18947918485732c2e120ddeac25e4d63e3e7f24d993238beb30455f68b3abc685418010f5e7cd17635c26e4fdcea058ab82c5b82b7d1252a1a1caea992b25effe51a9601316dcfb45a8963b668c6aa91ecbe632f9210aaf7bb84b0ee80dda1f3eca7569c348cbdbaf3c488f4eeccfbfca19335d5a9b7b3c6272201273fa700b03cea2c9548271c4ff877e172305bba3fa3902dee323d3b0adff73373b2afb74b65c0c618468e4429db2c6f6894a82072a846f2226fab518f43166cf929b77d4d053ec3ce9da52b5184db5ff8546cbbe922c894fe79ab8919486df55c9a4786755f4780dadda052be50607fce1a3e3ed0d874e842c303d34d6b18b61442ce8e61f3bc05941856b8c84b1fd01718da49a7d530fac30c6b2d2b036756728e8f8b28b8e616538e01691938d95ce5071a7d4b12a5201393c7a943e73076e0949656b76856895f8462cb077beefae976dfd3192f59c265d47ac363d8c7d47d2465061ee2e3916250b88337d4592b2af08b8aae3b168ac2e0b754fd99d852f871853e4080561c87334a04049763b806c822501538691646168e0719253801d4cbf815b216de1cb3d53bb7b72779ed1cf32891ab55c6ac9e6570fc43738015d365b445a0fecf5e0d9663eb6654623ade73e15804a73161bceceb1cd0f4403b42753a3fb5d8d2f05c01dfc5c85b8d04fa7f8e342e9a20e1d800b6a5a9cd867f63dc0af915d4af515bd341900dad0bf559e72c0510c8425baee2eb3128d470704ff6f9ae168ff20be6a3c5b80bcff2fba6423ecd46f72754fc1aa47ec2406cbfb0c9740f2a679822adf8135c84731f3d72532918795006a0473147595a671598901b9cd39232ec98608326865e17e9a88dd86a7850cd82e9845ab5338ab3bb112303e24b37cf253cfb6237b48b50cb21e7fcc595ef08a860e94d6bedbe4c58bd9eab91adbb97a1768af5d6f72c4d42570f7fd77593ac7222a357cb78c08a8c7e452a621054e6c07263f18d84be30e03e6dca342dc007188e3a861bfa7d60486b0538d71774e42a3d4522d758149ad7b62cde1106fe2c4c60562abc0a35020d36a706810ee56e8b540b66df5f5d81a57dd78601c843207189ae189d51911afe0acf15c199f742b872a1d9725b3005e173db02c2c0ace2e6b2c791ae069fcb9bf477f1f624b53d28f97a63556a157c749b82b6c66dbff128dbb59db2fb6cdbf25bb78798bb7f7c8ef9cd48c08b3e8fc3a8e0359615d964fd1c039e72b9fef9512d9e61232601f9e9d5d26c62951c8cde8ab5feed1854bc900b9101199ac6ec8aea7ffca5326e353f9b3b6a408bfd7edf26c45ab62f43c3266f7f03a78305b0b429196c5d69093f6b3d1909fe42268248d831b17ecb0d989808945c795f9fe60a8515fbface921a29a5ed92728ce8b467b2bd22d3e1698e41d4170cc1010d5440a857960b15170bb6962250cf4d1a04201950c0bbb035679b83e0474888e41915bb1010175697bb358181a707a49849257d383e4f7d6a8869e626f930aa168fbfb7c0dcbc56156ec104b3297006125cca0ff4363741e84b9a41d55a1b7acdce4cab21d48c356160f92e99d3dccfa2d69bdf0b67cd404be1e9cb2f8303cbdb0bef3c19612e7da80674605fdc57943c1103c76e968861de3a857e4bf92d10c9268b5948e643281cee8b924c82a81b7efc1e863f75186617c7a75ac2ece799c201a63f418224720cb8dd9c8bf0f1bd9aafae47222a9ab8642d4173f85be8373c18f83cd5eff7118e9ecd564c63c0e3b2b7961245f70c8e1e6ebe28e24e2a6cd08a0bac7704204f7192d04267804614fc9b0d17f2213f27ff52d11fcab1628c0e3eb64121fc324971fc21d650676c0627f70a06dfd322950f051b892356aaccd519f13d3114a354c59e2c4c30fe3a353261e925a7f2d058c63d22f9aea78bf37802465bfc2f57dc81f2826f083a2a004f6c287c7ba9b9f8a42197408c0f3584600daa523e7ee5b26d7263f7c642f9faed0218e4ea20987f6ef7a22ee5fb94363cbc0a6ecfe6980e404d941be9655ac822e5c1acc273af5a25003dc96acb406cc18f223af9044a93a5390ae2ce3c5b946b63d51eb6f386183c1746e93235b8bb6c2868df89fe323c6150ed26c740a60e6cd662092aeb1a53a86db8b5bf18a82073e00522cda887a224dc2a45e32abfae4f91a041fb92eb1e443cb2e3306b5ea3f306e511325a4354794346ca47d0fa19fd6e3a3987a6f860e6d958aae5ebc01e4c8a06ba6512454ce7cd5b5a2d075ca248b7b66cde935c7a5906969eddd58b210e9680f5aff5502f10d24f12ebd7cf70c288bc4d2423a0959846da2182fca084e2f223ecfe399f5246ced339a09808a33a5fad258a0e0685b2bc5ed7495c978290d2b572cd814b0d83b3870cfa544698a0aee73a1ce98d0b35370cbca99533bd0ae19ed112fd1bad8c9d306a275d2dc6f5c74e78ffda085d71ff2a317a9582e0e46a22aa202d8d00211f858cfed454ebb979a19027ca1f91ca14ec1f6de84ab044bfbcaa3c1043a1a882106a037242f824cef0f749ebcf4ea97e2d09f1bc8a69138700ef28d3a1738ea78ab532c9e880980ee373002aad921de829b00134dfdff31edc4433cf75ea7e3b926a28bef56bf747b55ae964fc79e23248b0d7ea889d400cdc88af0cc231446967ff42c397d150e8bbe8a9e745107189d6f689678a406decf470d371b523a6597c51137ce355ae32758a2700585064468e3a9fbbac264f2538e36fae4eab7599a22efa42d9f24e881da9af0985b80d27bd57ca0e8eb54a2db1a95f9e2d7dcb680dc30f6b0b7834a188beaa90b1e62bb08bd5382f902ec687742298b309aec7968ee0606d66717730af94df291169d157a7061a2775d8939f87a1cd078f9b0585015f6e3089cd0038993a8f4dce08d3171a12524873813ed0b713a13e908cbfc6e906a4a041c928e0b529dbb57e7a717f26057e4b000f19d12df4c9ed6cc0c5f5af9fd2e13437aca151e4a94a4f2ec2a90a7e33fbc2246c3201fdcbb88bb36e9a49978e4b435b9ce3655a39b54ceb2311c45618f961a898d6aaded8a604bc2457feaed382fd44c4969db50378ad46ca41cc3fe12294e638fcb21d829d9e98b229b6efa92c2d482b2a6a89fce6fedd57bec9ec01130552488d2fe631af81f542023042b08612533037a5e3f5865ab58a8b1921f96007ab22d80cca119c41dbd1ddb06a7515a8beae023a54a5939d797b1b8b86e84e5c524b1f813f94ca545c0f8f266e51da2a451aafdfa9166e1ebabeda3efb7454a8e49af62d0fd9fa2656f3b96b7d122a130cc21609fbdeda2de32f067f6294c17108982bd22df2ffc2d0ca8086188c3739798ce736b776ccf5bfbc012a686f7b58d00ca89c766f18fe4f1487eeb609f567a3d02694aa0439c4dd57b6d0e40fe2fce50de1d77c9f8353f77f17ffe9872c4873bac2f954f17f32e866d2c4eddb25dc36bdd9ff20a17d85eab6bb9415568b6e51d3e09ea8e26ce5798b45e0a291e55da6909759fc532faa2f4a68b32f0f2ac023e2d3fe9b401467a650aff4061cdb66e2091b47d89632201013d89b3a665c40b7b634371cb5fba92fdb60f6cd2c73022089a957e079311ac1f2707cc117a386e1d48dc460dc5e9cc63003072752af12d7f95cfc4d70049702c6bd0b4b3474969ee473305c1cb6e5bb6071965865fc56c808f6621b3a3aeb3ec00a6e0110819d8652d4107ba61c4cc30932ba11e7e08d250ab63d81de5ef854eb1a30becbefddc86f009a57014862b9b839894071dd83153ec241b8d2632c37bb3263dbcaa4d80a2b9a585e6ed1d90a148ed4e5432af706600e0179a672fd7399595bc882ee6f19074c65a97b0fc65dbc8851dcdf96c3a805f572c30e0e5ae64d5d39f369c9e6b7011279e4f977d9d8d1a95513609076ba22c004bbf5c2822ee0ab01d244f4dc426dbb2434d3810568566de8bc6263db71ed1cdb855bfa5da65bab8955b13768c5405e82c180ab55cc29543dcf67dc790745acd1022ebca68e7b1b5b93a8c654e02bd8acb8b01a3d409c701144b30774d594ee25d66e0c3922d9f36d231f917249a93fe6505f27e7e85a80ea425c41ad503e6425f14731cc76b347f4809b73e0ba0a3872c1a8c88fb4b1ce9f7aae55bd9863eac78b3a4c7204356ff712af21622db53b4e1727eafe6b07361e00f6abb3420e6a484ecf46be8f906022107f844a205b109508b1dbb8c28c458e171867f27b8045a75e98e052a8c3bfd97907056fced2d4b7db7309a00343873ee6851e3a876f8347904556100e494d7e0943793c441baace115590d333093918872dd4e17e6e7c7d1499265809c126405da929930c7172c2569880c6847dc3731af3c61cd1d36ad66cd29203433f3efba3a0cde697c0592641bb2d28468e025069c050ad96f99a98801638c0a00ec2543fc8bb4061c8511a7f46b54cd0f7d4690e819ff28f055e0dcce219d557a0b1631dcde5203167975358b0adb0dbaa1ce3ab62c936694a7e0bfe4c1c7390dde09f787d9b49e39d93954fae7bc2c9150624eb00a08edb417429ed62e230ad88508555a2f279449c65f956d44d7254e1540ba28b8a4de93e372e09e5c50686cdf3535d8e3d0063471412b28b8c39c569cf9843933516391d773182ec5c6fe89c606168a2d3521587fcf4cc8cc697c2d7a551192e620e0c10317d7b0b214138139329efa565a5b34530028d038082cee7f92f15d7cdfe088281d1d41c866d51c0410225adb9a24553c3038d2be905f091e87339a0688a164db9d0e003b8b8aa8b5c87cbeeca1b7343de649706c9cb1d5fae1d3a092eae9c5dac7fab0b7674fd6de29bb4009b680ec91ce66ffad1f9a232b006704e7be3109b9291a5aeb73622549ad22d8f15d21f1d342caaea557cb2733e44751ce8a0761ed7d63b3da9b00118293a5cd7689f4898e286dc32386c6d786de90d7b72180b1498c8e568163c5e5ead229e75296e4b698880a39a907fd1d5856bd248527fecee5fc81236b76bdb7a498aa13b254a7342eef6d2436c87f71d65709567710ba419783369b39848e92a4093a20c94cf953af3ea5eac1f6b4224fa9331ee02742fa05a8024cd879e549f2663327f1449472dd6ec00599b43e3b215003a3a4fc9f4fe63171d28bc59c539095ffbcd597e3ce513aa554d32b31ba24ee1dfe09f6cb2954cb04fe2ea2144aa5c3790b617ff8cd2544225b5aa46890d3ee62536b8bfd07b20dad6a01619b34a5e6006f5abe47d9ffffadb0e144444a1e824f2871722aee38b1fdb4380c029e5db43e71c501429b32ded40ab2ec4a1f83153a5b188c72eabce076000243534dbf0d3ab7428ec534671d70a07c3f7f8edb1e56554c3675f543f759fccde3611605f796221e6191eff8ce084caca6ec2b754875e844d31de0c02736e3054194ed840d08188297c38474ea0347cb113ce71e5cc763b53f223a7bd330497ea18f7c5b7ae373fd1b4a8e060e5a9b30a7aedcf89aa1d8d4b7622c6658ba9eae687256635390cd7c36be1ada6cad1eb421c25453019a2a9a78947bbd429c473fd268064677d3c393c9df288fb35ac8eead71b6debcc02d5df689a28c5d34960ab6f7ef92a151a806a4f174aea85f6020dbe2aa5f8e482f7b81cfa3b4a4e3f7ca0fc23adc3515cc9696556df352d94562d30bc9681249077a468109a20b22759246ac078a27dd10d5829325680a593c4229c20ac0f621aa8556ab14b9fc7c22cafc114bab13dcb5091d7eaa7af786ba3eaa966aa826ec53eaf8613d900092c4703ab7103a4885d9a11b65b27cc2188b87389579f9831e68c0bb65602814f2e0c8068da55995bb3af7bdeaaff420268ecc12652d0ca08c37b2970e23112193985d6b8d3cb9b8869cd16fbf5191ec55a8ef12d29c85e28a9c0e1b138e34946d09abf8fea823a544073ffa40d0a28c5fce35b0624eb37b7fe2637edf48452b42ce4d7629a3254c2ae26ddefc7957b2faf28dcc74073fd65dc9be45b7f05802cc0bdcd44741d769ce753f09ccba6b02d0e3a81f4dd6b0bc4442710db2003f1b837e5cdfb04fd2a63f4ee1002006b7da8e368df7b971e6c0e9016d25f4275f5dbe98081f1e599e51d017fc9d70cf00a3714882d87ef29030b40da46d6c1f8f3cced749dcf4200af1b023d3a067577caf07a5d84e6de911146be638bdf6f8a6d5d54559722814d96b05c226e42402fc2c0812a3d2b69b65536b764b23a094b6e57b07837a0b9fb3223469e691a554083d9341ac1028ffa76118b3352a57779e8cb74621f1e8ff52c94d82c19a4303042cdce5204959329b650383520208f6e6459c2af2df2c9f42921022fc432216e47d1062882b4d13a31aad4a59c4c05e416449fb33b17e0c5e99cc4ba958f4eb85ee3b6d7ee79931f6be1aaf3b6a42cf655562f0b41a6a43bb3e5db6ce43481a9026e464e550046f9207ee9aebbd70fcb1c198ccc53335a5db85ac17b6c2fd4d4a9e6843b58192b455912169416ab76fc2075bfc89fad7f6fddcb3314d588973f00e4a7d69d9f519b3b81b4353cecebc4d9258ede1c419660ec0ea8de27b1d0a864fc06f0930324bfdd9f3254176a2b18be5de1aa690c5055c7028630bc69e949f1928d5cfc4c8224b152b70f26ee2229bbb0f6d8f41764aabbb9c3f0ab6c15f6b8ad2661600af325824d165219b4c263db77578d3c974c78665b4334981402ae745a32c744f2c05ccb4fd0d6d502a24a20c28fad5044c0cba8b2940ba9e7afbc4929ef4dfcfa9efeb99dc1ed7746ce4c657c4a79a3934410ca0e535b466c715edaaa54712abbebcbe3b65b6cdfcb9ac4a0f739b701d5b87c36386e469b55f3d8438dd9f66f6bd106346694f06860714e43cf0a149ad29b699765ca648aead91084dfe4d9886cf2d89e0a7ae9a8a21b4fe9b9a269e3bdd2607559c999cc32c79b3d63437071447bb9932459d10aba7dadae278356a21f5be80d267e21a446293af7fa4696950e022ff8b235581e612f7ec6813228f65e92be5e82ab5ee119ca817bb3fb3db45d1f5047b2bfa5f8375b1e9b2721aa9df1ab47a69e5de84ecfb650fc27bbd00be37b8471a83a971eb86d5956a7f5c716b331438cc803092b7bb9da9a42fae91bb7bbeba7159c856111bce1fbc7ea5ce5921b79dc0de39e23a7529a75e0cecb15a843b142a406ec62c9118360be6dbaa400c0b67af1bd19f08b520c872e361631306b5275f769d43414ef89fba815eff4fe8ea05562f785ec6bf401bfc78f71428b00b878605f1c125b2f4661ac5f6484cda4d89d656f875644e0f811105a5b5ab72da54dedf53ce17600cc06f109bc6bb4eb9ca7de58cfa560237efc866466beca57bddc37fcfaa48266e9c7557b05c81a370a3766f56502742131fe61e10eb0be8b99f7a9c8babebb6092bb089d97e4a7508bef67ebb16772ec18001de1847488e7618333d639c9c01ecce08f57b1f6418a77e4b1f63d481c255597adb9fad0db4ee23223ad5c66a6a787c39b10e53e1af1c13cee1932cf575f013a0fd38a600a6e2e12169806c6b4cee1e2d0ac453ce5b9cdf035a70fb8daa3533c1271059d6ae6a6732af8b6191ddc1b91ff14ebc016b987ca6e980221908ef09f55db2fd00cc2d017a1cd5b3f02aece406e391f1951de9c0f1774721d865439c4637ca00bc39a545d89acff777f2fc15e16a3b148dcaeda4a1818636255495bb2b05a00fa63999962037323ff73dabea335f4a36e999506ce4b406e8bfbf4270f47b8d639c2592e268c2c82b00f8009ef1d2995c462509424425916c9e6e68028f2280927bb533f89e62261157ec1691cc985830bbc886f415cddb08c8343afe27d98678ea64eb568dacf5338267d0bf6a836d9be91f101fa2905008bba8973db6a00b0a518cfedaea06bf8719a5d6cbf89542c07d81631652465a11aed1478983af56b436911819e8fc8014b17a6914bd4fb3988debfc1e55d9138a0b79e5babca1c49746cb528c4002df3a6b39b6c851f1a224b85263914e542c951c62d71ce9ec13290abde3da2296dad1567e24306d9b84194e390347c243d87cb1d9d240a902140af2fefe066748c430b910fe9dbcabf21ad6e59e358b6be6e2a32d542e9a9d65a819735bca549e87c3466b59b12f122a5bf0b9c7107816d6afb78fd067d7f20cd51b51b07349da96dc335889f8d2963b06238883db3a92bad7349ed3989eee5b22a1c98b8abcf3e84ddc4faf8e7780e2196eb74ff3c554238583dd69390412e0831caedb0dd269b26d4251264e218c2855119ce35e2fcef52b095aba3dd1041210460f71a45d1d6886790b32db39f9a2e965de6615ee317e60ba1029842ee50a7b6f2d6bc9b05b6dc9eda45be26a37ca8e4a019626899a3bb56d5a223c922099a8a3c27ca70291356ad9fc3a0e2e8a285a770718639c78371e7bc6b71c5d940e6a4b9f1572a0fb1c579fe589b7eea166783a7476870543a5b6caf720ebeb529816f5e6083227ab5d7a0acf02cac62397fe522ec74a0b07cf112418cb42a20eee6f3b8ba6984d98a4e904311a3b605638e9120a2b7509eb63832ec2840caa6735345550fbaf2286d4e5733f8662c7789201d99a11f4ebb17156a3e64bdadfbb380c3d5c86e5e27eda1042b4aac68953415bc2351b9134990594f1a0cd2cb5c7f7c4dcb3a0be5f81800b97701f160c7e7612221764f6820900e76408623d187a1a30ea51f84da9126b36ecb31a9c7e8bc9c212683d32c7eef8caeecec1749cf0e4f244fdaaf330886192e4b9747c5957a312abb0bcc14ec1dbd9dbb44e3300d24849c0b204337b18eb00836fdde5e6e68bb5113083f2c217fec32024213afcae0c5b29356dbff0b8cc81827311be40eab7b702b827db86c904d9095c6f30fc67754835325d78ae36d4e1779a2f0cdedee110176ed0e33b914953d79be4ff193ae69004a7664bac0912aa961f3111cee9ecd6c002dcd769f9ebdde12745fad7bbb6dd6c4f628ba81fa06b435d8fcc2bab96b4f2c9875a1126b41b1352072ece932466f5d391dc67b04e9ad54088aa1b7778f41d77b9e8bab2bca85c8f1724163d8564683284e2d7480e5fc0eaf0d1edacb79a9643c08695cf508280f1f51f63263efdc398c35927d9786260515172ec8676470283c1f1c58dc3ef20cd623cbd6a4b7862183fbd1784c0e808eebbc5db1cbb5452b065a35f4f3519e0cca868716b37f303ed85a81324204bed47576944f98dcc7466b62235834c2e30a7bca22fb7434b54274ec5a8c9541068778509c9e7eb69ac6b33eeed5af071f4a230f0c973f2f041e55a187c6ba462cc0243b5b81c71a41acf147f9809d58494331a2919781f358219e796fed5e86ec64ca7df12727370ad7ab9823553ce4986052907dca548aa69633b18c4f3bfd81d50ae89105f0d9f507a39ac9309909204dd0cc3e4279f4bcba63efb8c01fffba8a9a10d09d3fb50ae788260e099d897af4e4dbaae3eb47cc7b2c3d1e44c1abf5c4eb0618e52b9e76ea0c974742a86998eb24658e336082a06d68186f8d93d71ef84ec5f452a171243594875d63ea6684dcc0b10f44414e200add624c378bf4e0ba8fa3aa7b6d6b6d89119779a005e3c15e891e30269d218e11c142534a5a76e9d06cda843e5503e0aee9d8694247bd792593244ec0ad3406a5d0ff1064ff8f4cb0ae80c563c0c8ac64ad25c4be48e925bda086662563a5c03e0a47d94335b540364469dea20674b598ebfa5f79797d8f407027869510157cd907d2788584a18f46d343dc4184a0dba002222d09571ddd6cc2f840b8c9bb27480f210a803acd14b89bdee539b1f3dc07847cecb5060a7fbb5e5a743d09ac5c76bbc3d8565e242435aaf5fcf6d253172b9a69b59e22dbcccf2df9eb7c111d383f8a4347fa10be1f5471427a8e006a5ba9007ae36ecf4b4c5d50c81ff924bc0fc8bf9187c2900ca35554b1d5008a422a05852781887488f78bf3a289c654b0efa8f5d163ba081ddf657027436728d79b4085f046d991343c1b9f9e78f44233e1a6e830e478bd424f82d4c58e5a3fb6790ca6abbecdb51f9b9c6a2a334abc901acf76ea5303b3cb883997f457189978cd07bc4c442ab5c09c68cc147168d8ff9a6cf6afc44a450b47c0b4a880518b4434149c96bafa37f21bfaff5933c4cc2437e199caa81189eba414048d716af32508adde658b60b1371d25e36b6ec14f1478c169c3605ac5884c4749f93713e5119adf3ebb76c610df25d1385339ef203b535aea918405e05deab3920b9799dbd39eaa2ac011bb1a02b311f1af11d42047545b8b83d844061ead15a08c52cb99de9b3bc86e4cb0fed13d15b510eec402e409583a440142b294e4d269ba97ce6260ffc204427b52285ec002ece9cc2153964eadf8068e637ffffe191977da1079fa9e4bc018bbe86ccab42e68ecd8cd96a10a5384185f7141bf9b351362182161f9bc38d1c13cd5de2a885097c780d4631914e7156bd1a03d11ff5ccccc41321c67860ec5cea50ccc46d193c3afcfa85aff237a2dd631547e5c4a18368c60265be0aeb6313b6386c3ae7eacbdab5a821760b0cd06040d5e07198263a6852b18ab4b9ae154e37412ef1b661053915baf36b2398fc1deadc056633fe9719d13d56f6cfa2a738f84f5d1d20f5bd95d2b87445b5bc76c9814f126bb21a1cb116d7049bcff59bd117e6532d23261c73ea653ae0dbde37109fdfb60705c18983646ec2824f0ba47c4f6097be94919d745fa09ef448983f8eafbd6464bfd6e19ff02f239a877312d334279e226698834fedabacc49ccdb0537f2b89412c26997b658908873dd82da6d029728c189708cd3f17d84aaf4c67f8c94acb980a2d76d55cdd66700a6123a579da28faa012cac448f33f0dc2489d14c707428cc18f19e3899a6a8750a17d447061ee76031e6f246b8bfed106b520146b62bf861848d0fcd95c530bba72f38baf4ea18c4841462eb5c8887295cc975f22f141e9fe3324ce0d81a57e1d692ac1c92fceb01ba6f3e5bbe0a47a01f92cd091c908bc64d5ba04639d677ec9e9e0be5c9ca087c25e8c6da1f855ef79b252230d188ce21c579e38c6d777969d9e7d77118d3cbb0644889531f95f73fb2c4c48ea2a247b408ed13ece148ca8e8b83eee7096bbf4bb0a21388262ab5e425f1f0659aceadcc746752623c882e3e477ccd7512e646dde546f8460c7174d64899d661c403688698e93a1b37ded316179c58caf2376143f864d8c4e7cc3a0499f29868fc636a8d69950d629322f25c33b57c95d14f34bb1b0f8d579b93b17ab6104c8a98e14570ef4a7ece820896fd47c6d03b2625531f03e9134704e322d28423f7c69e91f463bb522ef899674cf0df291d3bd9c2bd495ecf4fe2de834cfb19a6946fde4a2a8b7f463b85b229e9a02b78df0ac2ee58b94da4867416453b0d5f314b797f69a1ef5115095b39a294a3e1c155b0ec7a1ac39f03588227f5cf0f2772f2dd9f134e522e0d36aa4a78d3c2d9958c04265c39a6d7acedfc08ca0bef173aef91868d419e13288e7d585d209a33d101e6ddb2e934c0f52f26ea2c53a683ddfeca9826f04d79a733612343368dc5765123635836f7292205107f76d97e8d2b7b852ef0e57e4a90ee123c13083ca8fe83263b1d02e58e4ec0713118b889ff3ad4b9ef396a664d7101440847dd00620d1c83a6b5b757851d1ea2dd742e7b4d7564534f05d0749fab2fa355bf2287bda357a87068686a3ce85583fa61d54f412540aadbda44fa2c727892e31f2fb1450f160c07836dba8d86068fc682a4cfba00a0db4863a36dc85195ec33c28ebeda24462682a0900fe0923d45dc9bad081b3170161d0f77c4de555381532403e7fad998131180ddfa640b70d3c2ac2860fe1dba15ba53bcaf7336340e37404413726aceec4cf8a8d55ce6dbd88e9c5fc5eafa8a5a3d0e1aa2e354b5d96558d338f0f3e7f9ac45af0c5d6a6e6af1291a79aff282f3815dc553347feab65eb898f566e7012ff642b4ad4b0056f2ab11d299ecaf7ea2d0b4ddaa2061a6b6cc63b97ee74bdbe5cab9eb61209274b1f26c5a69f5da16903a559b456711a6b4d3b3c8f5040b3d491ef4d6b6f01d935a6747e16af8a469ec662b198ea4e415d1346513342e73a455cc6d08b9e19d69d04b3515ac1d385269d083555d35d8ba2ad32121d2190eedc23a71ef453519fdb5bc7180f0118d1b357bb3007b5f2a6176ddc34c8d245b495f42b6d2ba79f89f96280dd193bbae5246daf03d4c841fa5e68cd9a66f408594d34d029458e8524b7e9b335d4a888abba195c9a286bd0a9279c10decad48f1f13a354424795afaa8dce1c3d60f5af15ae041ad6cde612c8e5ad9e7651506917045897507735255723aebc7069c5d502980a1bd870c3da87eda8fcbc86febb83d52409ae064298439aa65b66b0a2ebc5c222a09b747b08916bea82ce1395a8156f80f05ba8a6df96e319b491ca5a566eda1568c308637f6818d8cdec931596c19dec5391f5b3918234597152c6b5e052bdbea3c720ed53bb3c1a3624ca8e678a162c324b18f6b97b72a22dcc5ab8f4d1a8136ce0b8b5eafc00ebf2408173218b6e59d5276952b29d242f456aa34112e75f2e14451f8d51cfc96fad71a4aaf2bceea2432c1ca83b52a542b95e752cd370a998452a381402fa1c83b06f70dbbaec07eff4195ff373151691f5e630b7a62532dc9bf8304f3f3e13ddf339d3b09ce79f8be232205961faf0900a98a254d6423c384336a50d7f18f89a26a3b9a7c60d1cf2d28845779f6215c3304a83d24d8c35863da1de17097dd7fba869666e3acab6cbef2dfcbbc15e1f9e567d87267d2010519ccca3a015fd0a65bbd67717d9560d60f954aa6fe8e4184a4ada215c31203870ee758adca65f27c7d1bf422ddab119c0a067a86b73701314c0e897630710d4c13929a1d58ca89fa3cd257dcd573f749178279270a7f86f023df8994f23b4153be4a03c9208aa7a5a72146901099e32db45aa04b64a51c69bf3c8288a614dd626ac9f3aac2083f82eeb21f6b17e8fc116410930bc4a29560f765f12e70355ff536f24ea19a99e2c144b3b786fe8b404a1cff2a56212c3ce2be900a368c2439f4a83ef2ff70aaf0cd9613164cb76848a5ff93e6e30acdbe21c391a712ae3a059f99303d916771ea07f06ace68471d795cf9aeda8269709bd8443011c9c46124c67a521102289205200b222d29661bb0365b8960435ec1279e7ebed3cdfef8ad4ea852abd31a73aa7e3ab2fbbe5dc5cd2e440243b9d85375b43480a01607409f1fe62737ce509908b7c99a3a97ebaf728cb8940e6df97ae9bb57b857d88171b1fc9087920196ee0455bc36f08e0276305ded0b9b55ceae55a464e9aa125078eb1672e6a87e5b182c344d81c35dd0aa807aa5518eba0455507c29c16b3da0d9f1392d97f52713318b18c9e9a520fbe66ece0707578f9004f2960904281d14b19bf40aeef0ebda64c26e125c60024a90d14d5b40541aa5031536854363cf78aa37a8240194ea581e31fadf4315e4e71c6128d6b8c8ddb47c5abf67eff156a2eb17df07faff0d7f0542b179cd846ae4ba884fad0080161406dedccc3e9fba21371e3522c9de7bef2da54c49a62403ad04dc040f05446cb0cdf66c8fb6757bd8897b0d773a72b597215aed897adadc243d3dbf757bacc4e720e8934ac2357243e05f51536edb13b7de1eaec22640b168e4405b7a4eed82d11e50d80dbf04b2cabea2a38b6a3172245f5e52caea1920df052ee65de4c3bc2481f25773ce693d45e908d374188ddeaa34faa3d168f49546b7d1675a77c38e8f0bc39e7aecd23aeba9af28abaa2635e546c32baa82fa8b6bae8efed5f26fc630c71c45a29eca288aca18405d4f5114f52ed4c364da0b19b4bfaaaa0a7baba585f44f0712e9ad4b6b79128944fa4b6b21690fcadcb0e323fbeb71e0684435eb4799d6616ffd855d570cb5d1f08aae08024b4b97f2bddeee65ee0afce8ce4ff3a7f9e3fd67add669566a07799147f17dc9b2a73d9d4e273f9da0cd129d4e4bc4414e822c9a978321b641a753fc15ea929c54bf0946044d0923c663572808dad0bc997eca0b0a7f7ef54bc435f27d0ad5557a797aae8d90e7c27eabe50494a8a484b9a660d0b9bdd6b852da3bb255aa6f9dceb3b2526aff1231d7ff3244fde3cbde80bc191a26ca8c8522d1c373e3bdedbedceeeeeeeefeeeeeee1edd06c6b5b315eb750eac1793c5ab2b5655fdc478542e488b17dbb72c6b311e73ce4aa380164487b9fe110684b97eca0adda7fe61f319e3bf2e8c0733d7e0a761b51f3330d77f613ca84d06e61ae3b11b0fed18b8e6c5503d0eb434ea6fe6a4b4bad182ea601b2365e45ccfc3e75c1f8027b4aaaaea75aaaaaa369a576d67a3f66ec5433b6a5100cb4b15f46bb8f6fcd57098b3361dccb5d0834259a17173ae82105f74403b5ae15378590f6b1cd0fe8ebe8c41ab875f9a0fe7c6d8dddd1e638cd1dd3fba8cb1bd713045eb629eaf3b650ef2f3af1816c3d5fa2d1e3ace5caabcbd9b85f5d8a62951a93a5f2ce3b307b4217f33bf8b39f71724d07ede615dc2a6f07b64a4dfd63577bfec7e7e330d17de60080441f50d7d800c9afa869028a9706edd7b4f46e66dbfe0a00d8e27d35f45ed7e17b295196e3aac962b656f3a98eb9b161f0a9f6f186e3698e35e8ed071af8abf60bea715d35eed30faefe78fb418a61b0765e6cf6dfe807637f1e12886736100d774ef0217f32e259851bf84419bb9f9f05fc6a0d4f6aaaaaaaeb74824faaf8e3ed374a0f42d4a233da5943ea591364afd68f410f3813df53830cbdefacc7a4cebaeb79eb22e8aaaac2d86b96a9b6ced456901b082428e991b0dafc85360bda6429bb91ab48bea42a05cd029d403540aea0417130c30c090734eac0653e816d4092a0595826a41a5a05b502de00728537d445044504bb13e222849f0583059683c79eb63359246d2484c2693c96432994c2693c96432994c2693c96432994c2693c96432994c549ba8363d2c0534f840c7996d9579f57541de6bce498b6877438b6811458b285a44d1228a1651b488ea23b4e82fad87d252e99fe3686e2ae4793347a89c0c01262c58b43b1c397204e3416e77479f3ef8e0c312aaa6aeedeeee28df83b24bdddeedded163cb17af86533235bdddbb7a148581b7b77bf7e370d3312ce83fd07dcf8fb8755d105e8f6b1ccba6a462e760592421926357d64247a496192d2e540866a920a987a1caf249c5279549e5c2a8606e51718b8a45251bcd1c6eb8e10631a8a832b2689c443368ba606dbaa8680635151c1c1c9ef182be933dbf99ec8ba00d33c7fd974a34a3827619fbf0122acb36cadc661ad74cebf685ac36d663543bb3966b7703d71a3d60ed8a5497bad5829566d680156e307b68d1cf9830a9d98f1e62b93ee3a9d95b61646f0d0d61a5d23a7a8b74655a571a4d2e0c7e0da3eb2d48311fd9c30c7ef696b57da66518d6c39a9161d715c33167837d7809d774a3273d0da3a7cfcf3e2f47cbf3f31156a6d530cabec507fd8caf2cfb87f5c89e3e0eb768af8e461b49a31a0da3cf7e622f5c9fbdc47a8cb612ef50e793345ec23e5868e73b40a3dfe19a8ce7e5b0de7d98180cf0adb75c3ed34cc07ac0b73618e6d66a1ff0af4c2bc15cdbcb7434e1ef20aea1c16a20ae81ffc22e71aa170cd7670f7b589ffdc34645d0c67a13aaf5d613a0e87a33d637a1a3ef6f816b073fd3ba42ec85511dbd45b5ab9eaad42784fa86863042b50070952e1a50d0fe97a701868667b05acbd045a3aac5513a0dde47a3b366ce7a0c6e3a345d006ac73e9d09ddac56e0a3c07a311d1d80d0ce15159608eb7084273b394510209473b10a5c7f82a0832c39dcd110592f8a8a8a728a9cc09353438626f22011139e7c71ca29322acae9c721471e814e2229b8e0c788500e9122720a50912e4290104d5def7d2ec6c8c115ca511efc1f14601b980284f051a9307a4d122acc79efbddd7e519e94fa4f66699eccee7737f3f5e3f63b0cd46bab8108dc8d62c9c20a030820f4e4ecff7839560a73db3f45db222bfb43f65f96d66414f4c78c3cf4559ecd916f848704e4c8ad06cfe6d4f0adc603e2cfed062764885b0db9d5f02d869c97b3dffd0c43a0ccbed4366ab49274a040b61fcced6756d0eeeb7e3f4187ec43baaf4a13590e2c78394f09b483a9fc9dce05537b081a03dafd338780bbc8a8a808cd8e1078729ca8d16371a830083eec68456e604112e4b38a5e452f22afe43c56a1bb5a23e204f5f38914e9974f6d3b45fa6f28b24361346f869f99233b435e666666666666666666ce89a5a902f545145a00e5406d2b10f40b888c1070114495a028188f143a2ab76e3120bea88fa8c749bda98f088825d5c8a91aa03e220f905183280aa268ae171ad0f8dd2cc1cc6aeb70a0a630379fd270600db2522e25e6a8c9e3050b7d933ed75055556dbb3e2f44a04f0ae92595dfda46421042471e15f50d0191a502d1d8a1fc38dcdd3d1fce9fd1a24d0cc239a5bea11f943092fa867a882a10579649ddf733341d5c5c5c5c5c5c5c9e8f961933fc67b468dddcbc5b4aa2605a2efa7efeab147c4a836f5114653d46bd456157900721c4fec1fd9196c2ab62690f0b193bd0adbd31f6b204066a61ab05bddddd53582f4bd8dded678a9aff74984f04879c39e79c0f356a9bd063640897d7590beba58c1725d057b191efadd321833936c2dc7b1a46286faeed15d6eb2add056dcb7a311d57a9fed632a1b41e3e59bb1a3b612186c2dcf2c72cd08627cd92613cfa338c472625c643525bbbd9c97c3e3989f4159f5ae03a370e7a33fed833e62ea5c4b61af3e753d95b332eec87d291564d226a6eb3d2ae96efe612f1897a8a4fdad6b9d14a73197d47399b8fc3d6a4b4bdc2dc17cc6161ce37d3b0c781d72f9090ae51846cd53609cbf85b1208c7356fe3a0d168d41344ebeec6edd81e29b4e3d30ee69c6af479f81cfa12e3b17067352755823e1122d4a2de6aaa1999ac829cf359a940a88d93dbc7f0d0ddb141cc759c3f07710df5d97c50aa5ba94e24a4b91d4002d3678897c38b1ae0c442517ba5a8dd5f01d3b399fd3a2f07974e4089a82d44eddda19f18b5dfb718de4c0d68f7aed8bca7c3fe4ba89299a4bb7b576414942bd5399f5b87ab3674825ca161aef9497f4b2cb0a2eadd6d33bfbb7aa08c6fa7239ecde41a25706ef1046d7c044fc6df9928f1fc6131741628e3a72c57e2c981aaff6c826e1cc1293e51fddf8b4b54ff7844f5f6676c7fb1788a4a98f3270941e1cf397bde8c9f4e5891c7e0e973f4a550315a64f801f781ec07e19a3945058ba8a0d09b820600e02b10cbfe66e19a3745103c7c8493700df64af8a062df5ca342c530ec29092af62e18132c157b18ae1940c5fec27860d7f516c6e38a522dcb4ac208d5caa25a4a0c55eb61b866562b09263f9fcdcba1aea8948ea113f4f0ed8e4410d5afa83e844495ea53aa0f2d09aa6e85ab020a9f9cfef9281432aca8f05de090097ea8b08aa1237a7819c50c5c806da543d34f8217e143c500957f4d40778acadf3e49882a87d12204698b0f0cd12202dab9b40841da826b49d29224dba9f14944507f2b13a2d2867a496d5bc4e2d9c8ebe57835cef72ad0466e9168ebe68c44dda83a9157f164e2c72936a8118ba21a1f08ca442650260ada45a2b842449d57a9f1671374a6a00aa297634b3ba831725163c4a2468fcf9a8d37137f85de4cfcd5aa9ae58076f16314aee9688aa4704d0dfcf8718a0c3112311785b9f8381ca518b48b44b1886b8862f7a5527ca14824a42b49081a896afc98ed6c08961ba6a0cd0065726057efed07730cb71b8ac2c3f184f214d68b89f10895c29cd4614ecaa7e4bf9cee3ae116842402da5b4fe922e6e46759d0ee2b6908dabd2b1c846bb8c61fdad427235f4a292517557e7783f366644743002f077cf9cd700473ceaa8823c81d1eca881c7e606187c88823474e469c7c6041071e238ef8c103558cf8e1c929a38a114d7858c841c808273db0e0811e26b2b89460a88bd737c4044fede86349a8baa0a3fa8692ec5c3ed01920b0aaa0334ca0023aa1b860403329ac312865453594440a122a065494d40a0a7ad5379484074f2855df5012309ea05edf501224548e893963381b434b00757d434bfc84418bf0a2fadbf04fe146c7ae0017e341bdbcaae7dcdddddd5d7361074bdca9f738e9c29ccf29b47a3bf4c282610e3e0ee7ec2e33f60284d188f56262accb06cbfec9bc15f60da011e0ddd83f8167264461ed7a61dcba1f95c35aa89ab116bcfaf6de4c1753b91aab4d4873357e8dfd965d63b7491201bda161ae3fcba225fb0f3d3f58c02e788200bf9983414f1034c052839f2c64fc507102240421112c82538a80b218018a11b8a6ebfe24c8d881108be6f37282425c132310bf6429a38cccd1e463836562a0ccfb257ee89179df8df64d487c1b662d410d3073b7303894e06c9f42080a14274e9c043971d2a44913a0264d7e7e7eca60d24e7aef0d29f9a970eb6c60c8da1b52b2a416611c20ef890a274c05871414a23494fa9ed4fd86519a803658f2d344a6eee28052aa25507e9a38b9aa4dc9e573317d620938e5c4350dbda01d4d55c24e5e0e7f6a09e9a7769357c542325d962aedac380cb549f94bfccf9160522a0aa2a6288aa2a00fb30d50026a488a25345a7d4344b0a062f50d49812489d902eff1017a6f8804427589a86fe88465b10b423882d76894c54ce30a77576ecd6426b56eae2531488009b95e5728fced7a59f6d95b188f2c5219b30b423882d768748d62a85d062bac85aecd1c84ef3d2a5478360d142dce5c7c07caf097465b57a2d41b685e9bf4e9a2efa22adb341dcced4e96f94e16bf2fbcf098b3616b89396605c0c91a8d21baff485bd07d48f466ded3c2a29aa226355b93d2a35fb088b7ccbb1aa03176473963ecee28e3c3b809990c35f0989a1dfd751671bba1ccbd8ff38180963e26ca3ec25c6cb9c1bc17d235be0763a3c27f1d4df4878cb9a073557f31f04a942b254b5e22bbbb5b6481ee727733776fdcee8dbcccdd71b7d79b87b90c073c1bcadda5cbed6a8365200603941c58587bb48c1de876866fc6ddf9cdecc31bfa3967fb66b65acefb6267afe31111f817c3959999999999f93167ef21b9400d12b0823c995c74ee7951970d93aa3430a9cd40e5e9ecd4a46036501906a6e445b0c0964a302ec8102314a5e43c5c73a45461a908b4db9d51af1119f018dde743c263747f93bed70da9350cd9ae15f868f78d36f4c9f0773035ff387e51bb1ef738fee54ea7eeeeeeeee3ab87f529714de4187d29002184998d4a5d4a301a035866cb4a258cd2292ee078dc0158a8fcd0725ea1eee3783774ec8038decc7e8eae05cb6fdecc7638aa022a3ffc01a10b154e99bf23886f7408ce8e924be9f2d853899e73faf4e9c365ddf73964d97d3b5059fa4a67ef37b32eb7f8da89625ec494980f311fb4ca870152e5c32fc5adc41c941b8ce6639997f70a9bb78028657422b4b8dd171ce2056f8cb0c361fbc1e802ebc3fa049c4f1fd4dd638c4eb90b91313ae53142eaa1c72f519b4bd992e59c326edc32d09157648801c77134343737ad843e717f4c0c33d8e8747042445264f4e6e9235d7c7dbdbd63a15def740f12ecbb2ea5948bc1f0acd4b8b910bacbbcbbcbccbbbbccbbfcbccbcb4378b2a574e91dafebc9ecbb5098d2f793591b6a436803b7669c53ce1cd7de939910feb03b7ee3373a82d8b0034208a1735c630372f0444fc886a0dd0dce0915be8e135e8ed7833975f629d1deb135b8cb8eb10f4d498a9ab0e90591f0e8ec8295246f695f5005b163f4e8fd3a8efba13c611713f8e75f43cac8cccccccc2ca3bf187eafc4f4e2913ca0fcd637e0fd42b83dfcd6ba98fa989b5b80e943f7bb1a2d787d6f86ab5bb103c2ee6eadbddb77b2ec86eeeededdedee1ee5e41578b7bd21dd79055ede1b5dd3eedd30ba3ff727b91b76c730a7ad1483eec7f480ee47777f0168eddeb0e2972fe82e04d294524acd39a947a23419147068dbd2bbbba1dfc06f00b988436f7fbcdb446055551977f764b231345913743fd3c1332109cbb0bd7a4fa09470a0501f3f1a8dee76772fa5944649cd39a9f742a23a4d06051c55863e1918c8a7a1b6b969d5a37fb7c5702ffdae79839dddadefb8767c37e69028b11e5c63ec000cd80b5dbb6155551993289af738f7f6b9448fbfb4981b2122fecdb016621de580eed3c05289d20ceb412da7d88589eb875ef50dfd1ca1557d433f455438f811a20c4aeb1bfad9e1e2a2892c2d3481a5899d21acee9a863b98e30dbec37e0fbe079b7985f71dbf96b337de7f57dfccebad9b99b5fa98396382eef2635f120fceb97b3bf172a06057e8f75fd3abc0b3a1814174dcddddfd3708733e03f60405b2fd602e880edbd021d0c6df0ff4e548298220824f4e47eb15d3ac8dde0c63200873fe5916b41b05798e66f4727096dba8f48d3864b56444230000005315000028100a8703e29058281285da30fc14800d758e42764c1a4b84590ec338888228861000083100006000000619830c6d0500fca2db39ec721bf411faa0b8bb69aaa87b6bc3a99e4699d70facadc8b4616f7113492b7503dd3da74431268af1c661f8d3e1bae4c43b751c1669c33c4243dc01b7f53a5a4b8eef2dc2acc9a57c4e103f1f2389a74ee8d881fbd23a19a4024e6881c96a62da8d1069ffa56c541cbb67bbe5b15378a45f0b1d946d860fb8092eb589ad785ff5e47f5de907924aad70adb3de209e804ebc2052eb04ba6587c48af12280f30d2233134af76b38a7ff91d1c9f69e384f096b9478e9e7d4d4444ef54e810a7e3723f7adbd69dbca545c16685225dc3f51811fd48d8155d3cb4e89678c0260c3cc88861ef347314246c69c4dd6ca6c2460df564b1c0012648b15dd1a8dc38a4796864649c0881ebad56f02d7b7cd72f7b511453e4a3988b912975d8d67c6c2e28cc0c5f0b402608eb82acdc8f4b7c5bc01c2ee479cc9e60872eeb8f26b1b5ac2014680f2d2ebbe31b5e4a4a08ff0a2c97f4e563e3ecabb21869f3237294c2af8088dda475ea5e0b8302c738e5a8ac5eaadd4e263e4cd2c8047ca3f752b66ec492827801c637adff41981671570f19828fe8ffb96691be071ca394b2c2059b9cd611e8f3ec496fb587777af4f14082b01c9935414ff25ff5598f64ce5fc7bd6b345f944286dc84aac04144657430c9168328910150a7da522d937b67b3036c089673fb74eafd9ece319a6a35f417622137095c5cdd8af787d9c6dac095e0b4641b493d36180c475b6ec156e3036e5a9333fdd33168e7e25978fbe535fc3065ae9d035d90c10845c5965f562e8e69e2bf4c091789ba4d47d05cd21a68122b7ceb1c4ce0445c7544a64786d351a886f401531d5a62bdfef52130c76b5cbfb5398268045b60b4ad559caca55b57f5823273c18b79885fc311a408472733c2a01b4f20e4680b1840d7bf592b93af767440ad3dc76f7c772af41b38a91ecf541e44e0dda555bbeb760e660bed4fe9ee8a3abedf3f1bf9751df7500cb758df1b9121b3d10eb901fc2dc46cdd516659824c7b4b8a7d5fc0f9c75a2b02c7de3ffe894cd90de0b05dc3ce9608e39b5dba3cf66fbd081dc1064004db9e494714780c142c649cd65f4e4c461a79b91a0bf6394d379017473acd2bf28ba393238ba2e762a7a9e6977a72cc71f173c0bfd18a2edb00789477aa27db4780282c8aa484b7fd40aabdf2de4b24c7958dc12390c9b57a280cca9766ae27e04287d5f5832e5fd62ca2aff7a7cd4957426339fc3cc4033693ce6cdda24a18ca363d4251091325f62fd8bb931d7c4b7cda91c137b39d37f4079c06d6ac89f3cdaa757f85ee9270e226c4673180377f986cf3647d22c9102c0040516e93d1e74c10693d3bfc1b4f94aaac2f26d5965066951ee26e74ded6a29740d9466a6ddc4fccbb9994bb09b50fafcc4098dd6835aa0825950ce627b2334466a15d155bb1d48e9e6264f68a00eb92bb811e77041df16ebe38d4ee5490061c24b5311f6a30feecb655a5c33de247ec88f974f37f7d602f3cf0edad7aac3fcd3530733dcf55a2894fd3e495ee8f30b7a02421fff222bade8a874ee0afb507a827011a18d9063b46b1e9ac8e3a3318b8392004f6a7a5b3e9072efe219ea434a8f0931f4f81010b90be1d8fbef757437d5ac17eaecf2d421e4b4e70a19cc812336b88fce22022c90d5fb48810576792e8fd29d1a4310a0de300072b58d140d4b2793b2f942d1543f4eda42f121854302fcda1f19a6b5f38ece4660db02657d226d3aab5f8b3f7e9183a97d431c0efa548f6c8a6fc3baada33f93b899280ce287aca4eb51560d2c7680659d41711358c7fc8ba7d1a3b4ea8f1ba0b003e9e4246141ae6fc3cab86f5c3fd090f4888d39ca6fbe9b95dfe1fcccfdf1ea0ab5d86e17642d4c28b91b6e16defefcb0a387d84001990e7e901ca1c1b673902e0294d0b8b54c2a6674df52678571fa3954998a58fcdc80cedda227690c64307ad36e6faca97080dc9b7a20d2249ec0b52be3eeab07bb1fe9d39f8203a8e0901974b352f51536769bbe9af50340101390deee8e4dfd733c96a4e41010be774933550600f1187a74cddfa11b04daec945cff457857b98e0b7e810ca8600d7eddbbfebca2decb553fb1ca27cc42e3de64ab345695fc4e4300ebc714911061500214c130118f350ad35f4efb5b8bb9a5607fdb69af73ecdad46397c858173f4d8b76942230f63982deaf8f006868ff04e4d6bfc7292c75f4c6bf12dc02120df3f6b1a319bccd953e0e89a20405b35e61cfeb9b2d12072e8a032e751d4fa807211569477b30d9f042cdbf8b7492dd06c92d83119144ed52a77eccb3105d268baae0436b048f779f243c130174971a1593c45b7ae0ba69c4862cf1d8a5c891213a963d189d8ba7979b6d188b10a9311ce84bcb0c4a722147ef930a99efa7e811daa857fe3cc2dee922fdaa058a4633d886f5edaa70bc01b19289f6a8056c9220cc0cfa185b00783e6a6e0b74e9db6e06a56cd5204c8067c2a8c66b183001a57cf65cb7cdbcc7a68f1f0278cd416a57983d4aae02d3c145a6734355bf2c8145cb041b2a4dca4f3725b2aac207ab7257264804e26541b11fb3c0314ecab2a3ff4db83358debe7ec5c3a929975500b57c0538789350a9a35e118d75c88ecee2379c015c878e5714b997922a39935b2b691a8e5ee3f6b292442e704daa10bebb63f3c62e6a856e377ebbb542dff42854dda2aadca71885b6c2731fbc5e942f859101baf4154d0f8bf8e454a6e14e24da40b095b284d8df4f57cc20fb6b3958cb29e095af57d596ce6f16ceb0feeb6b6b7d1e64454e610d653eb6569441742284409811b4bd10f6256f0ac68b92671943f4ed6f9cbaff92fcfc146b7c69baf4dca7a11ab0dd6ef7a5befb76f7e72d64c9864ed7513e75bd5ffe236dbfad3af029da50c9a0416c3d608fbf2ad566ed05dc7590d21fe67e8c351537503dfa13ef1f0a3e44244577a5bd6bee454ecce90165be2736991e7b24052166c17b0c04caf30305df4379510aa8d7e23289202f6ad7f1aba9481568cc82d7c8aec34250745c4c54f81019291f91aadff1163b4a856038eec0f636c90fa19bff133fe53d45a89139b0e065ac361c8f58a7a8d89c7276e0dcc507367b8b9281f5017017a6599606dbd0d181b71d72185a3b21daf46b73d52db88cea842d1cf94cae0ae43ac2a7b4769cb9f18adf0283bddc976412b2ecf1364f83154c636ae5ced4a72e2bbf427748dc940f6bbf505423bd7754e3d45e10e8932cf3e8ce66fe620b26c072d42ff5f1707be207e533c4833b24d175924d0f3bb2efd711536ffca6038b2f59e26e5161fa8edc20bace8e7a84022d613d5bf49cf3346cce9763504f4aef48cce8bc7b4feae5b793e7e17c29bcd9ac69b9c9f58e2a8507c3c0c39bd7b6229d555aa5ef38762531641658215bb520023e66af4d82f69f1e0bfb7a8b9e142ed2f39690986b2008001f751da33883a55a17bbd538df24603cbbc5027ac98503b9e7db7f6042f1e8a4f7fc1b3d425c4fc9ed450182922df047576490312bfdeb79a842be13ed221c5d12875ad1aba2203b3a859d3b230df8b9382860b646566946b0487ce451d02d37f6a4305569a0cb63aba976491545b288523f8f3cacbaddf361a55b19f7164f16e7d36a9ac76d0343175dff5f68568bbf41d2db82620b05b992969bcb2ff36cad7485319ee015decd9006cc734b2170983429b90f3248aeab3957cc4758b3810c7b7a8e58c85e47d9cef26bc16096dac93479874cc0661cfd632c9b02b1fc10dad9f0668e29b798bd959bbc94284796ecdaa0b41478aeb9d812245aa60a3638ba70845aedbf1e1cbdb4e3a8d6e6a886f64a62652989ba6d98133ebbd9fe0d98640762a018b11d0898fe6734e8bb59bbb0ec6602e29796cd8052f849181d79362cfb88e8c4efc8869fa5acccc3f72cb1112eb867b85bca7de746843208478acdb8fa438e33f0a7084ee33d4432d41157790969054272d1fc91f6904f47c954faac0fe68da7395ec037b8b9c1cb590ece3933f02fb081585feab1fca6763a416ce7f23af8bf860ecad886719ab9b5002ae5f3dba51632d12872b95ad015cd7a5cbc29db1af563b6064c6d1f96f2b7fa83baeabff5ccca54515120f4f3165c101814871c9774a68a17bd96c97cbde5d9127f19004202c002501f28d2eb9beda57cc6c44874aec83c0f63aa0d5d6c41865555e63ca8102470b5b8929d4ae00fd10714c05347aa36318642394a479f65b6bf7e145538547962ceb24ffb88249f77f09865be61fd891ddbeb5b5208af8f632b03e913b14fc537eb1447f76d6a4fa982d3a923d85a6b8e4c50891de9c2541530fc7225e5fa98e79ee484b2cc4cfbe95cb8b206d020dae738c140ad7ca67625d958cd2bddc795660ec6263b767fa89de88ebdd41e17a1a6de0cb08e27328e27a4f3f1584a552b5cedf993e4e5496967be2afbe6c9fd678f64ab026090a2fcf835a2509f7fe6294096e1ca1d779f319c42e8461619e54b069b536a3dd9526311a57e8f90fc201156da302602598ad646a62c1e58dad4cf68b95617b1351be94eda022fcc6c9200915cae4a9c8f89d939db38752c0d548bc1a7d21654cc8fe3011c65b7731b35bc91432dd4dc5d46a9032d7bbb1fc1d978aa73400b5a06ae8ab2146977401aa05af4a250d38ef304a89f808cd3699f21e169efb240cc1fec9f294d351c3a14e8863465bbf082440be0492ab7b1367d4a37dc3a8a7627c966c42e993d492eee6247389ba1a71d7a4d7730d6997207fd0fcce99edce9288a107a2b8c5e161484ba0702f60a0f3d9002890bbb1038a0e223ba83a97e6cf98505bdc9bd4bb713e1b72f62dbbc78a25499488986fc7638c3e67d3acc6154bdfe88e883415ed9ecb489840a1c4f07ffed2ebe883a8006afe3c2a7873711356ca4a71ecad67a040c7c9578c495f52d738471a31b58de0a7e3d0eae5674d3e39389c24d996438cfe7f4cc9a7fa7109edcadded9710be7b4e58ac4fe669ec16a13a5f02d267e4a282ea16a91cf9d7806a278049550908f9a888d6062117102fe4dace9d2c31d5755ac2e4a2e08de712a50a3580f456d820bb4984c60f7dfa5e654998476a84cb0d23b315f410ff5c5677db5f6a8f443c23a78b2d2a286228562bd7c38899e3bdf045fe9bb6af5736f57fd1ff5c2b66501661be2c8f28d2ad5609eb5f1a6f64faee7867adbc6aeb818efec690c7859c0b8c1ea647f44ee7c96983c750dd49d8081cac291f603c9ba714a74e7a129d5d953900a5f4852d6e45852556efff2d8e95f959bea5c7525d3a7b071e83b8a87fd82db67e7cb917428ade67dc6941dab6e27b39463bb5a194ed44158a92c3be279ee3df334093a454b11924c670f92a33c15550e9fe9e70fd8a21a8fc965b1638e569f4dd954302579b1588f08110757beaa50712340ab1037c8ac235ffc464317ffcc623133c0404bdf5e20aac23b30d80b6c4ce696f491154e4e47c966210879faff30aac2963f23065e50f128fd4385a9bdaa7d09d9db3c347f8c40430658181b419cf91b7c2ce5f2ca383d0f0d224233c0e0ce770b5ac9e71f712fa59b5b0547eddf2d64d22fa2275605ad0f062a89a51867699ff995a768d0dbd2cc69d3f38bb6e4939af59763ce4a85666273c05ee99445e557048411bb3a19c33cd45267b8285cc438d8d2a6b147c7300da026aa463df28f596bb5911dccee7f456bf78ec18ce820def694714eda3526918243a164031acfa70c5c303dd828e5189551cad7e451b41dae3bd4e377917ca2a95b4f92f3903c59e0b3053077565b2f588f865bb5556e8a8c1615d737712447b2f9723e57b2214893e2cefc2a5d8b20d78eb5c6a92fd23bf31c8e7407c254323dab6c880588166efe514c9bfab429a33a46f1cbd8e2c084ee8c24bfb9d1c9896a6473a3a686f0743b7d5ab378f098412acb8a016bc03f985dd3cde91f135b2305632d0f4687daae47b5255de545861eb3b20f5c40e0181c33dd2504b818352afd6bac1d28a681284428e66f3420497ffcefe20682924d1cf04477118820a2df79d84b2d6f35b43c6bda341a4b66bf276ccc31f5faab216420947e59399c148fd0a99a3d9a9049a6a649d4ccc6d643935106c5d5b2920b6364c730c6d210fd754cc0dd6f1a1fe385ae403cffd8c9bab5bb69ce52bc1090a445d0cd36171f8ca3bebab9c5c6c0b62eeaa93128fabbd122290302ba092c7da53917531165601f7427344cb1f90759c4a65a84394e74dd8c7803b85a27bcdd255230d5823f9832f14906914cb70dba193aa74f832112dab8111652c6ac630f3d6becf4296d673c8bdc6afe409753ce6175809e70b0f933cf1acf6c7ae85cc68df541f24ddc5c29611d3ed5b4a26976ec518de28218c08ae64f08a966282342377ffceeaa26fc117bf92b53abf48ad012ddb17832b5c4e2d964c763b705387e01694eced1b2d61b73a7817dd984f775e64983ee15b76a904ed659d35ea825e45c4c6266d3c2113bee94c60c325d7d4a425746f03113e8ebc04206159235cb266bf61a90e908bd7de5e8adca81273baa5e051968b2ae052212995e4c6632dbb8e86a00368b9ccbfa73648dd7e2e556c246cd7d89057f010190ca84b0e0f8274402e0bb0c609ad01843b441652920d56d4258ada457616b89f19a1d3fd7333164e0c0c5b5ccd368bbd932c20f882fa7dc634b98b8c4d6240f503e476ad7b71e582e24e26637fb841e5857b648aa25e35f2c45f0d65ed534868cdf6201322c6bac5722731d4ae9507d1a2909f5570aede40c06857e8a9e260d565920b722a2eff47641b7b6cad7ab42e8af57426a5a12e41de370da6b1fc06dfac9e257edecfa18d59d27a00a7bf11abfe316b12f682511e53ac7cb02d839e7a6ec9c13d5c2a9b93d9ede1471b3124f1bab3a5752c704f6df86b9f76b275bfffa8af3ad3fed05c609564ab3d70c0ce712531c88c7decfd741954f28595776654e294d143fbd70dfb19d19301b7991f30ec31a6f696c0c06302f14ef596d57590825cafa68016577e1df871f95fbb5580895fa1a65c042a84e1cbd1f9465003169d790a802684f4d25538d4f7906bf6dae0b3aad83d269645e64bf8c6e06900f8dc1f0ed7a79c1b6019163af7c2cc90cf917ccef5f114dc6cd97c5137e6099d941959cf649d421885870731db414029db4d242ec68f5c964c63e0d254a731d14152dc3a8f885818773d714af8375c1c2d7db1a9532d4cc1746ab14622a75f5131cded293558243a22e0939133212c16550bd00926759688db5c2cab6666822a99051524decd19c0f2f060bfa48007f54d1ecc662152b6fb9d71d265a48025ee742a3f6c6320378c4740087aa05fef3542b6856d48c950b3c635c40c2cb4bd2384e66b93ccca08be5abf1f5111a59540b95d002548f468b28a8792778c71eafeffa27ac448b7b8ebd50eb6fe6a0e5df021b35112ec41bf3eb424fd2a1bb0fa025e11da9d96987da677b08654569349fa4f7c6b59319b1c0a6c49fc05aa8316ccd447915749c27095ecf48168b762c02ab5cb7acb5cf9a04aec12e60fc6f59cd2e906a584925d2e8e1e9f50e5d9bfd03190bb1e0510cc664e168d9b739a3a29f116754b53af9013fa3365b8262c506950eb42ae53aa57406dafeeb2e699b773879c191490f2511d5e42b03f0fb5cc0896bc5d3e31f0484ff52a0679512d0dfc23f1bef9d2e06a544454069473f18b7b0de9437caa70e91fb4cddacefba0004f4687f0630ec7165803873761efa334dd3dd20fdd7f431fa9663a74570eef2a5efcf42cbcd0323531e93c42007a3c397f226366443abf342992fdf5433b720eafe16227931b243f190ae08a7f01461b74b689a593474b96a1d44b463c1394df0aa966e81090d2a7a5dd0ca850dfd700462deae0f43b094c8927f202a2e930d2ff53a9fb0df38874389d5333bffd078411f42c9fc52bd77a111f6fc30c6872c7ce5267cf7a413d5e38bbaf6a727f980b8edec37fef70726e310188cfb97e9deb0d28550a5d0ca0537171cddd1b8e07b591bb1a96b1e41ac4b09de2aad6ec96a3f676b514cd09b598043f81e66fae1d3f922af6c5626ef6cf6ac3ab886d35cd38c26ef959328127e7826756def08ae0fc45d398f4229a253c5ca57175fcb21e2d125f7457fc86da74816cad92d4de955873efc7242e4d14c5e5589eff604975ed3f48ed7f3a90e4daeeb7bbe3a3f1d5b16bc2a4a4ccf17fbac32f90b91800e4a470db51eb8454f02bd15608beb80f2fb194764136bc525dcbebf97ff79c501edbb0ce2e36e4818653f90e97b87a498f4ea38b8bc8d9c77c2eae18d471d2e44e431c5eab0f726559409729f5488de476f5ecf244eb596f1e4deaa57122807042f93926c76a38f1e6d63db612d19828bc4e983562a5613deb921f3715d3d0cbdea55abec8b76854ea06964e02a228a147056b1deed4c23504a62b4f0be9720375ff4645aa40df5ea4f0af7cbb47fe835e747b3750c6ef4c586ef1413c6c8202964548a5a968743d072120ef24dc5e5baca3366f537929df7e00202763097ad3a04f8ad9fc81bfb80237728c2c7409e5cf04577b4e6e0ef7225d6e35a439a70d2261b81cd1c1c4864508bffd0510853f13acc0e454c539c0f3943100ec4580c971e74e700d9a69f634d6518eae5198dcf423db299503111df4b7869d3ea6ec2da1337662cdf53724a24bbfc0008070c99600acfb8e59e809dc6c1322e1c81b3be02d2a7dca9dd67316d434c8b947a82216b9ff9bb919bbc868ba4195af839d29c123b409da9676a0090331d75c29333788c4174c2c4c2ba88f36e49c1930e34b18406ce24f152646ab9df76b52dad26477edf173966b9fb5a8a870e5b605207ceb197d5632e45c023fa87e1a39268fb29d62bb2a025701816cecd98bdad86af326623f39c642213624d741b08cb2b2038d682392198f7f9e709e53d5345650a510320e84eb5e72f8c9e643e56625a3bad1857a0ec34c32f6ad4d4a7264efa7996fd1e38745e9c6c39d79a0debfa29050c563151051ac6245dcca061d899e86fbe3d0b0975d536259739ba6286dbda19ce8d63a8f58426763b54e6c2a47796551542e8e4ff60e0d21f0033cba1c9b0f7dc64aa500c7d1a54f3f0f3c3144da09c50d4fe31d9e0d52e9b8576a7628954d29f8116aa2ce0dfb8a3fc9601f49208ac0947afc9a3182cd7aaa02038f43274c166c05eac469bdc8e7b1256f5e79d630a794a172d312842caaf220a0e6b472504c466e95325864961e30963f6553e65a34a428818b74ff442ba17eb2cf2ba63999eb9fbf51e18e5d27f8a4c31022499b3a573beb5a7d0a0238b0c502c7901331dd833c0f865937ec5634dac009a116aad7030e899878f9eeac04eb1318a9051f1570d28d2c454f90bd93432844a9bb2b39e580d46d94014badd694be523c5d52d06d6c5f89a07478321753d8ffd3192e9abca6b366f8305852b48975e58e75e5c729e88a10fb512241d5a09a85f3869650b3b0bd3e0a085bef15cb52834e571ac04a022559e15a66c33a9e25d41fa18a0ed0827ad0793c786590e3228d9a1ca8e8fdef0dabb297aff17c61a16b394e2fbcbe170e901c7185236a0617035117485810f789bf96a2e5b60482aafc10fac139811b4667090c9439be623175943a452f86c403df958a098b1d5cc7d40081c84ac3aea0b4371306895b976a7237d21c9f6db782b860a2d6ae9da552c8be0fa7a44271585f0e081619a82279b23ae730fb3c68a4b48be843c6eee7314ff6dc91a2c317af38c11523d401f6f9394e480a18605b75f6cf108f35a48b17cacb9217cb25fd444bdb5b02f14a20723233a2b075edd1590b573d00284181f9ee539161e2e6db26d935673b150319715a6292a5e7c7402ceca9d2a30f6b982bfe9274b4c2676c8081f288a4111c82b5fd37b732dd6d3a95d87c05bde213b55b6ec93ff7cd73174bd43fc7f9f2ad61f00e749f1f29fd8212793b5ad4f6ee603bb63916b0805323ce47190714180c28bf8a0cae6f7aa94e20131381f171b196784cf23be4cae7ebf1102967d28f909b440c9cd870600151b87a4f38595c1c238b38f8d05ec76a8dcd0eff32c1f2b86a767f55cb4b353a77b77858a9b44a9e80aedd419f9d2207b403978152aac7238833090311c3de0b3a599e559aff2f3ec46d0abf0592b6809a82a23b0a9823d8a55af7eb3bf1f2c317f592ac2c7e71874378f58968c0ace9e4c97dca33b02747a252661f59445fba738373e70be1cfe2367036e0b94ae5ae2fd58749ff892cfc61440841b0db76dc90cff700d347accf20a5f12d28e7fdde132840573da960a19df9d1bf0e507cf382bdc256d696c274ce8b07f01c4a473b2563bb41765d838961fbe2f9f425bd54b6b058dc2f277e8f66ef8ca0a367ca2bc8813ffbea11d44d4a4f888f5b4740040de5063f5a621bcf6832f60097e5b602adc20e2a56ac6fc72ae000092632e902db4fa0aaaff3e34765204e75ecef5b6998e22d5505dbb30911c7765acf71cd5d99f0ddb98cc6ff813316b1ac019b9778e6f3ff16976d059c880ffc07a9ece5f2b0347367bb2f2f22d489991834f206cda3445a9b1753036ad4f26e16cf8315ef78bc71bef26f6fcba25de60b7a040c1be5fa52b742a13f85d3227ead189aa0afd4eb9b0421731a8c04d8f5debb3cbd22f60cf69cb0f8a1880cc2f51445cf28a13e1135a4d982138b2e384b286369c0014fc3a0f4347d85469be949d18689863a19983a6afd86c1a81041fdc44a73655527905d166189aa0acea1bcf0576be2ccec56a15b7692dbd99f80e1954477a8a421d8565b025acecaf43a7838d6843bdefcb5712a6588ef2034b904aa02e8555fde49f901f315b1c03680b67a66c17bb267973ded5332386c36826c8159c11689bc600e929aede3e3dc51153e7cf5919295f3d66524a6a16b6649fdbf53811d0d53d67517c43b5ae039c0e06c184ae90879a66e1d1cf2ae1ad516585bd74b603aa940f1aba1f677333adbdcebae65431c1d77ac216942f53143ae3eaf2aa6d2f88304e2bbc9806f5d8ac15c2ce5f1697c74963582dae88728f4686998ff8d0487edf01e9cbc4828146b7d92002173bab0d91192b1f4523cbc0d656fe714f4269c5809a9787e3ae696cfa0369621c4c6e918cef968998344ba8f6d7929e503dd524d543435a11623940962f5152e0757999b50b4d61e34d1dc81477c7292e1b055608311a2fe2e4ace49936f59cd24489ce330a92f3b5604f3f9bd0c6d021b6afa8a4ab58bf22863ba8e6129f29f5af16161e6021b3c2bf41a65217ff1c7ae3e1c4c9bae7c959608a7508ae29cd60c797751f890a5ca1bf9a3bf8b3c647b25aac398a6a36c827998c70849520e788bf673530da214f5f09e65307707b49d91304c10c41682b7a36e44517830b1f6ec7cd9a881a36fe81881a811c1e606622b907f2b794c88918711ecdc30cb92a446d80743c5c8da88e97b7ef1bc71e9769386e972f2f7b733ce279a4267703aaa894c204bc3adc4ef8987835bd73330943dcdc2154c479f8c592923f4f844313638a55c2d05f9ec49ac71b41ec7379c2b147e88e371a8185621eec717e7eefebc73a3d4309df058043a41ebe764a7f78f45815293590ba6eba5ebabacbfef42114eb81e7f77b418842ffacbc25735af5daece2ebc621be6e7a9a30d762897186ae380019574732fb8ef160dff058c88381e63044ef13bf94198a5b4cffe3bdeb214d83ff2f1e134206144db48344caf10e4543a36441510263d8db555dc0029a7c2447574763096a271234a289504c3bd65b12237b5243cd3a94224554fd3b5c2210a6890b3142a8bd23c6d26eede53418f14971532f60199c02d12ee12e6aa641f04849e9b91b47d0814bef5f08f9d9a4afba7d35632e24b8adfd3f7c6e8d58417f1d3da9aee364fc96812c89367d52222b9cf398129e65327cc1c9ab8b893347083deb5a101a1864c38724653f871ffd813c497bcfddf06896fe00ef097a954987fafe804c774b1b74d5701f71574850c0a63fca813d9b8c7fe58f25a27342266b145a2783a16010de238083073516cc2aeeab4ca0b8b7ca8ab0701ee25a498d995aee1031df37e721d6767d9aa3f5bcd100d27324477b780bc0f3680e17c09ff2bfb93a3013a836a8b1c07d7a3d5f05f0306d711a46709c5c118c406c50e921d530704336f65c5ce8e70091c9ecbc5ed77e53b0752a7f5f435bc5af360ba561f78d283afa15d5b359691003b12d85d28123e8f1c5d78cd2557a3feac7735712f68ee5e3f1ff00851acd78652d595cce2fb82eb52f360ab0697c24a26f96e57b272d036336dba993a1c283d7d0d4b3322980db51d53b1695211cdf23749b2d62fa0976f8a53a38c0d1efe2071bb85723012a803f81dbc3000027212237790ee59beae35945668c4360f8d83a93017532cae182013e6b5029684a1a9b2d135f82ce0055eafdaef230d491203b71bdb4c2fea2b84e8c7b2f13859b16db0a80546eb1a8141cd35f142e00b165e28b96967f05dfed09af13463baa78614501851958623e78df0b62b39c30c8ffbcf107854157870b4abab1802a1d23a34e803127d920b0fbd93361e1df95822560366f78a0862c07e38cc0cbdb7f9bc3c2a310d0b7d7be6d8b7e38abc6421604803d6301d04d2e4dbb73c4721bd0de577436479e6aec21683408abf133b34d6e0e9817640b6598e858b5dc811ae80b7d2f42ec659b829ae3ab27184167f1837680fd2a930f3439a6b1332b3c29819230bb12666a37d55b1a8b99a391eb801f036627f16f428e60997e1646f97f7ca7771a983fdcee23abd2430a02b85317c02bb62c8791fca50919f557193e05df2cbf238efd89f77b6796db2271bf7a3f18bcb2c7e441c56c600fc8cdd00659517c7776356fabc6a4a5ed68db6feb08b259cc073d97b111ffc456ca1e08925ec6d035b458f694cc5e180087dc84ebf7aebcd2d3f2ec6b2a60f833a2dd3d4812243a573f333784d3b79d896c59ed5ce82b75da233c9e07cb7a72a44942864d9ab3f7b0dbe2d8c213e6db3ea0c4a8d1e334dd9053e5ebe3b4d091e843e11e919123a8f2b81272af283041b7afcbc5808b10c6374cda5d0b26069dddf2702ec3d1b4c4829c49989a131a213ea4f47dc9e2f6e9ca1b7fef9ea5f6b152ac3ca3d8e661ab84f39b5443651d43762218eed1e5140adc7a84c4df8c00b81cb47acc6872d18f7b011f93a734620f2c068ca3f3cad450b1a4a23f27951002d8167ab0f4ae078f894026b6ebc13956322f79cc3bc8b6a5c24af7c3b376ea563c92dc23064e4a94de1062e69370cb50463be9c035c51ddaf4f7d624256e2662390ba2ac6163646f85d14ad102078afbbfe53a360fb0a7b1bf73503cd61ff67bd500320ffe78b92acd60e574384c952b28f08a9565887d1b94c8e06f8d37b915d10dc92355af6ce5c46fd7e40a8158084189f70f83095427c1e065298822da4224cfe9f81b144f9e94681cd8492e48a19ef5712ebbe904ffd3e7e2a76f1b8ac61872b4e4d3d70794b8f3250ca3fab4711b6782f0f43b76213cc491f4744360d9940c926ba7b3a54b3311eac4d5bb34a88ef2fe02c36f1f113375576e6fe8459221afac69bd2e313360b1f3af51e505a2660352e4fe0857164e153db30c4c75d0850cf26c4c9c2e1ad2a38e5da13219d40adb6144d4e6a41647d32644f77c519b4b8c0cd6a7533dd6d9eaed33f233e64c8d17836e2620bb124164bbbbb9c3ed0b1baff84d61722a13411160e612c72790604b7184f768f0b2d859a22bb8b7cb4f6812ac04fcee4e23d89b3e1b774ac5c0b08d6e1f40e14cf3a8f6f4a4245edcdb6ae26ea775e116d96cf2ce388c3643cdd04818d1b04a405b749e0b4863e399b1a1fca626a760965ab791dc2a162486d13e1cf3c48ce192e651e6374d94bc8d698f5f7cade5acf7cfe7913e67234e9b485cd8e58eef5bb9a9ce9bfb7aaa6472325226d8e42054a45160b55596c99374732a30859c00194de7956581d72537cdde794ccc6e05cdcc4f5b465a4d7cb59736b73792829848f34f821eb4965c4746692145bd4ac30e02b428b3d4ec8c0158314a04733ff1be019d1621786fa8d460e781776cdfd27ef521cc0bbc401bd814323f30ecccef4b3930b91bdd801a05d2ecb1ea1fbfe466033811b261ac66cd9d57ca5371a62817c1adee589c7850ee5bd462cb9acbf82fdd033d4f4dffd8490bd72862767c6581e5ebd9a500d6501f4763b0249022d50b34bef0ea39624aa87deadb836fce51e019a37891ff44a9231bb0307ee572302859d663a3a2dd5d660db3a9eedcfb5b916c268a90fceca711791263b37a93edcbe64844efc7795ad47f5779fb8b8f207232973e26852c8704a126e8d912426e1a92391e7942f099efa9035cab30608a2cfc941e0f116b52d4f2fe4c4f2e35dd2232e9c83639238b0aef394ca534623620afd833b38915c12369a4224769695c2e8b1c2cc81bd0ccb074760af439ba244b111057b9992fd13490dc65b1d5f87790a66458facce5e67b56584b4ebe8184907b142f5a6a4e726f72e87c8c4573ade0bd53a8224246ab70c43b509af095d462b9c8601c93b94aaf65529e3e2c1eceac51464cd82dd55173d1990a9be9a5b1b786995811fd02de3fd349083425b397c268fc20c00307c6b7cd7a6b91449980530aefeffbdce60c264bb98b889c0e1a71028485653f17cd070564ed44425e0d03898da007a0e907925b10ab9c0511cd127f055f4c8435946b2566463c979eac060069c871897879c3da6f0dc331efc250f9ccfa2c9935421954ed9490094becd5d1978bf2d45f44a33ccd096579902727347e4a593eb6c4825e7211b9d95fada41009e678a183dbc644a93d480d4fcc2355f59e33e606d64b15d08f898a5da8b016bb16515c1ef2e860806a9a8d3f01a65bbd5e960c68dbd7d978c855c66893555b4eb430234b4651acd6a510a17517c65860174bcfe08252787a263174be6cf99558ecbf3a1a544d2dca4614cd6dd83838c76e8dd8a939c36e4e3353ede9835573f8b3959eee6a8e3810e81c03c23e2f83c0b1612f3cfe6e285485b7d2e4cbb99538a01b1bd6f1fc5ec8136ee1e0b680a56a3641762a126a59918fcfa7ca2e6e3d4366ac6c4924c7b51c5475045574170e4198af12c58bffe26ca2075df67c3565d47724623688442709b7935851d5d2873d5855c35474a272aa1fa5ff4b4210df363f7102b5fa83c00a45f814294dcb6b9f48e6951f5e5f220363bcd9d8c207f702e86a16604334d1068703408a3a878277fbb05fb4604909da142b72fa13b1c1bbd6c669cb3c9d397004d0c43a8a8d01b4277f92e52768460bf0a7606428a4441483996f163b9dd51a790bb1ab7f72a95f659b5998ca91bdf8d8f110e84d47256ada482b7f6a35dfa3932e41b4deb4eb577f21bb9a062037d3c6259f02f747ff7a873e850a415b51283523d2d9f828508edcf289320888d07d8da656722b8e33f43513446e8fcdc24777fb4b163cc83c2dce220e3ab2574aabc503fecf2eb78dc6f8dc3b400af2aa2193ec953498cbce61b555321dc8d6fe922f19b9854cd6c2ee7b2737fb30ee6034af074e2978a3fc4f344e5459ec608ee74d6c314612e99b5c23df50c94829ab445f94641a1a82ff2f4a7448f1f67eb1c266976d4d664c0131a9d1646e42553c8f14cfea466e4bda9f7d62c1eeb1fae90f59124abc0d3d2ca92a611e957921f92f89aa1da2d29f8aaf324d7045acf5bb8f199dd51c3258437ba8293fd1713e52765edd4a696634dbf4965c904f7102faa39122dabd01efdb056c31b3f18057186de110aac1df3c9ca1ad1c242e4c373094d4aaca35c1eafdcc2dcb00db36c4722a2583f514e7615b5aab75f65e76677193daab6c69674707132a943447ab86ad0ce5337ee3e879f67feec70a7bebeea433a22df16074b6d287af1abdba3c7249aa31bbed817861bd09bb9df674cbb0e48e187b85ae9009139144b7f848df2450bdc76829a1d753c88c41ef1d71e4c6a870f001b41cfc3fd899286ceede0ea85ee6830524b5dd79ce986f60a679523d2b0822e5a4113f03dd224eb8ba262d61885fa99111dcba3396e1837babaa3c158810f2754381981029c4637914f25eeea8d70da475d85fdd03cfea30e2f6738fb9dc7999f677ecfe1d99d7ea86b850e3815caaea3e3e8e0349ac78ca1915f96511f9185c9a2792caaf1e60a0684947da8ae3faf8099bf978923ab31978059b4162f70114ca6239c8b1bceea79be181d40315cf0d7e18ed37335b312f758ce366e1e09a79a85afe82b79f1c3a44acd60dbd1507cba83b67f8244416cc0707ec10eb48a84690886b703fd7e83320e4a4a7f522e8f475b28f03cc7aa4ad1a9248c14e4e4f56da84fe385fee9bcb40cbd628170f97c91b4454f33e58b19ddc40585e6f9636082438c6c7502edacf6926d4ee7948a11c25f982a4bc4c43b16814885b2703d791040bcb592f37363ee4b08c07035df00a62cca0884aaef03a91e0e7364b75aaf8e366e9592a48a5f9a38580874f63882e0a8bd08fe51c2706fd7bade3ee06dc113ba608f07e97a216fd87016b808c560e0693c1750fe1183a4d12a1705aa7b1c1ae2322fac71894eba3adc675cd71ff52264ed0414f7fd19f29c47d2df28aa4836e99438680a84c27cfcee0a1f3f9ecdeea8efd692fc0e58521f4f597ea450e24f09a352a4fa4ceaf7521e6fd619aac2f616b1b4a3207dcd85860bf4a5852ca782b96384f61cdc58c17b964b50cc0492b78c098699b8d2c5b3041bd750779f0541c2b26af96486856f50f36ad28c0097033ba447614881493a968ec6e1c2ac0a8d64a251b5797f28bee992c45c127cf5eece19d219b358a0784fe522f512d4268b7f344434b0d37b4e010a32135726f1172b7b0454a8be1063a5b4057646783bde62920fce672eab88dbaa35367fedd2eca0536d9bcee4ba9fbf36fbf6fc5d4aa2641176d77afb8ea020d85f369d8452a373a0456b174dd3101bf769bc9f4421c4e66984c45a58776a3fadb635de950cd97ae6ca95f411afbb70d89d0d608b4ddf7d17c2c15036e72e8833b018a6b70ea9e2126ee95670cccd3e92fac59a874ecea1b9da0bf29f2ea950ac90c9b49510335819cfc3b42df8b483e2af18d4b2f71c5069cfb94dde64a4583c953c28850c335692d9a8fe74a0db33938fadb5807ba10354b1141dd279ceef6cfc116c7e9b50b34344bf29f608ab34928a5ab52b25a0644b13fd0b6e3aebbe282e9f0a7a952bd2bae11007f8a5e0ef88119781195b653006b9b2e37617203ca8cea799d109cfcc6cbec556183801bbc4b3ab74ce0e0e6829a2b13484241f633d2027ab5c3bd115e522f75e4813d1f86817fd523bd41e41f48cfd18c7581be6885b8e92d835a8b10b5a20c3ef23ee23df2a0b72fd8bd6668a9a99d57b251a59699fe87815f6d10f80b416ff3100f9fca2d1c2907928e50b07a88269a4699641b8d0d5fe64211c012840e659b700eec8f59e6f68760c2f968253d407c6176775787f4ce968bb14fff90ae76e58706a11508708bb7c61c9ce84c37874d79320539938ece1b7ce704f18d3a1e3ffd9d8a730183b85f74e3631005cc9e26d9f211dc114f98133f9f64109db82818fc495302e1551cda66551276ca9a407bddba2d726ab83c25eb1d51e4becffd24f4e3f936c7edd67677a144c8fb89433c82986db03940bb4528775154fda142f1aa90a1404e27af28d61d89960c09f44d3c851ff6dc2e0079047c6f33b40c556dee6e921be06a41bf6191b76ac1ca53f44adf24a1d5b1b3a696c5d030d89f2adabe98147b4672e288b1c9cfcb6f00690e37fec3f7fd74aa071d0103fba40d48b5b382f9e7c336594caeea8218e7a488cb635ac9af858e544b258dfa0682536723c4c863103fcb2f5318fdf063c0654ae1b9811203d5026e3006ffea114615ff7296ef2fa504299a66f59270f91f2ec020f012d852f3c212f7200bfac42713d57754abc221050171481608b89f2236e2649f17799ffd30c832e9e97964da3e6f8dcc24723b6b420397445b40cd96cc1e6d5ab3d84bdb1a5c585c4b0b1cc030790dfb168840a7db118ec2c825e40397e796723a79b01f7784f1701538743fb779f7a1c66d2db2dad0e8e72a478cbb4f152f176814bbd0c5d9011e1a9d1f1e4717e6b27673d7a779613842a5daf596c380f809c27024ff03d3850053e820d6fd47e96a38a07213c27d4e6a5a5759a96f9e1de74335854153476e88451106ffa748328a40b74f640275884b172c7495aa8c3aa49cbde10d29b040d2ee1516cc170bd484d391a18c990c42ca34c37e898549a21a864a5aef70f03b6951d1c7dd0e1052a027050f304b976b010f020052d89d49417b14d35493e901553bc4873513a6fff3f44e6607d7d3fb2b7883482e623f44628fdba31e9733652e8c14783ef0dcb19326368277a36d6f93ba24f805810886212b2e48d45388c1a3631dc7e64b67bcee0c12aa4117faefe995405742e8d430d575a6e3dba9efe74972204a2e60988dcb0d999b08f94ad2ed590949fd8ef70f4c176349a6e95256a4956a00c8e5995e5ac59ec513e3131b6cfb20315e13a7972919a51a46733b7e89d8ac00e89409137c1df780c7a277f268c6df68fe7f00d6b53fab109fe23979caeb6a2e7c0612e0a6a6f77e07ed328346a8b652cf0be3fc848ba311d2abd1d2a1c74c4af640ed91b49a3c01a8da64f908843546a6840e5d28c2494eb75d456ca97cd04e38d1e12080d2991ce404a30fb51ee39fe09a4e97105574620ef7087c3a56091c62e81db16fec235c11ea66ed1d51ac33652016f9e42bf3d4f7feae752e50b41cd0b30b7ff5a0956f93a69315cc23e79bc53b4cd53bc652644c032d3e90a9b3614d032efef06bdea90c6eb2159002c9268b3892c1d29b7c2e6c54849baccfb10f0db530dc649b57f3520c8931e620381037d975a8576a25182413ec12c54dd6ed6ccd1825aabdcdfdde0caf170941f815715a9b67bb675afccf0f1cccff7ab845a4fcc0c07cd7c32544920fa40f1e662ed93b50d9fcbec1b616cfcbab15247b1974c1bc6c9a20b9974114ccc3a6e1a04c0579a5b8566d1e3741df1cb65bff058bd928419c2f532e80990de47d3e2c6f2cab097118f552bf00361b2808ffcbf00b90b281e4cd1fcb1a23049affa320754d6076e65bb0788d62d40ab1af751ae843ea7de9a6e7377076afb2d5d7d2e7cf73320febef8c9bacbf166be89530c933bed23f5800bb25a5d90de876f0272aa6817862286fe762ae5144eaba8be7b4e44e7767254e568761dfc76fba3ffe2656f51a98ff4c7a9ce4b6730e67f2b00ba6fae28414525173d7128d8d0a4ac7f4f2ec613d4da1ae6b0f62dad15dfafaf30a7f2ada23a2f36762b0ca86518ba996952386b9bfb0b0068723fc9abc03b90e13d83d0de2d8107da472bbcf38835a1349c986d417378752504e439749f5f40cf421643dec2fd6ac34f8c1f5df3aab52163000ff1d1bc90de68c83d4e9a35533fb237839403e10cf62b33d444f112abe62fccf81a40db91cc0268e7cab69e750499c76a7c130f0a41b79f96239abc0753b55036bb5f187a9d11986572f29292a3e61b5837c916c0a4539e3850c5cbc5127a2d9e131fa6283732ebe0739f9351c7ca369a71f18f974e2dde8c8448838978d05a94e1ad390bc69dcabad82444d0410f942618298fb73b1639a8c8933949d10fb00cdf8ab1e05d983782a10ced27f9e006d492cf12a4a7bdfce68f3e500b8f3e1afd7bd01227651141d674a2ddd9697034334ec1b49195b8dec3b345ed750503dc0ac84ff63cf005a4e42dba0bf658022d511fe22cd7e1cff7684b797059b200c18775aa123b1ba51e8b578e52d8ee0368a42cc03ee415c84a9db5307bb0883c35eedeea562ea9b552b7a7520fb8fcece365b9e587067ded0b402598e19e26599a43c18278c41d6d6c16a95d314167d2f88a502414b3706156222b099496b35a6b34a0865e61938754c6da504e111230342b0e48c23e1c2d6c24d1d932d390b09a6d198847b20bce9dc5cc02c6b76cc082c19a73a79734c13c6d3f26accb3bc63063d6eca3149bb6dc2db9b788c4930ebda7333643d0988bb9f309ff128cbe8dfa5f30cfdd8d733e460c0211103d226f930ba84f803ed6a06c41926a5624440a6b05ae1c326d4308425a96120306b98debf82790c894f3f4f0b069c220da38fce18a936ca9d9e3953935048343ad514f0414afda469cf521051b94f553ea3dc74efe3f9f156b6b9fbfc0d5abd78aa87fd8bea4da5f0c3c47bdead2704fcd4f74d31a239a3c2339c2aebe1f9f0760d0b2b3d765b9373aecb03fc0e041af35e965820d2b24a07dac3b29f6aaf6e322d2e8102cfe4177cc3fd961b0dc06c7f3985cde826ff92245c92dc014bb995d1fecd0d880e83c1405cd57b75361660a8125aa811eb13c046549e6f6090e6fe5612b2f7de5b4a29a54c32057f091a093e095bea6f9ec757a84425fae4643f2aa9c432bebfb05d8d0eb155bcd08bed2811257ae8d79227f4246d6253a92841c844b10df1a625c0125392945023257383151edfdd4ab4e03b0c2337503c187dd12f3411f580431841d080068884edd004956f6f7f2ac057c6960315464dde84ef235249f0c0054178924498179c31e54a0e2c40c3e88a0c780842d195249c9c11e60a144fd058bab2c5194a57bad880c6932b643cf9d274650d1dce380a93e2ae80a1e3f1baaeebaa49b561a573184b9636b4a4dae8c2dbe8d239ac735d5192fe6ac1eabaaeebba2e3042740e1751ad740ebf0a60b0740e7f6740442923092bc2732b8a1b38b032cfad1f6e60d5a46e6c0d77c53a8d018f7438068a27a6ac96d01d8656559022d20a586cbf22db2cc88f4ee5e274ce15ebde1dbd380202ca3397e7a3294c7c867abe802b6e7064df021e98246c57a38f0a5f9e3d86a0e6c192b88584972324daf88e995849f4f01d8389b02dccf10167b1bc621cbe49de1308831863bf67e6fe0110d63eb7aca44164679e5b5676904961650b7a35d9e7b2d2e64a6ba59d8573b5b6267503299d32ea786ef99085844d74b214d8f9dcb2a225a3813d35a1299144d6b219112808228a1529d912b63eb7acb840678baa634f28614378a7ec096184303e54e418994e0921a4714619238c114208af2813498011c2c8dc905645e82e1f330f6915bb43d89529cf18218c1036c738698a0b2a279553f6806257c5ae4a59152177dd0a499831c218219c0da146d9b0cf638c30463823eb446c4647c7085fdde2508431c289d221639bf75c9c5a8c51367cefeae69c51623b40a277f221f4694dced81146392984d005482b1862c02b46306234c2522d1f4eabc0c8a2f68c9ab453d491393683610fbb26c4300c831906a30b606c27a69e90b9877be6c9afedc46d9cc6e9a0a0c18dca8f1f2bb4aa9dcb80c79764447bc867944a61adc26017085fb641ef70a477aa1e3ab0eaef08e4c91a1a71d38d52296b21f757067e56ecbe9e0f0b0c8fceadcb252b87d3281b6cafb2ea416e460f4c1089a35575a1553635940d16f3946cef91c2b9f126ea1ce9cde33a28a87a384e131169d14b2f9b4b15ee229a28250537138dc4cbbef11d35d13b9a8fe80dc139d29fd19523ba6808e6bc21a221ee79d7ccd239f21d7d1bcd6bde77f402cc914c4c4c5d44ab641711b5eadd6ea226d2fc69e942665cd07b83d583a555d0122c8e29ab2acf839634e0685565fa928e8369555f96564997e96223511311f5f7bcb234d17b8273a45351b578c9e5a56ca22589e222fab4196783842a05d1844922cc2a68092a8909d38abad06a656fd081791e0bd6d830f8e8ef0ce6519d3efafbc23df2538d020b071b1f99604ef408ef63423179203665cedb9121304772d82331a4d67e948d8f2f93f9c1b6bfcb3bdf5880feee63e2b0af536cf7584aaf36d22bbd36f23ed6ea35e99c181f13784d81d588c859f6a295c793dda8e57681e565972cef7de751a3429dbf08620ca4d592c8056955a9601fd2bb5444621fd2657630c45d3ec730bfea1df215bd36f3fa0aa77328158cb46445c63842546186d26a093605d2aa4a434891e89152850f462821740d000f77dc1c0f93a00b5e8df1249dd850b9b47080e5db29c5810a34be3db6cb5ae1067118c24e9cb94197a67203237c3c7481b5356210f0105629ccb8210e15b0cad0c114d7132f8e50c2f976bea6d0d18cf0c2822b4b66841b2ca8512461452a78f2a4a8872156910c76601559b94185d694a22754605464450e524c2902430715a20853048414a82085524deae6593574b0387ce8e106563eb77ca832848dcf2d1f6ed04412592c7d6ef9c0041c3e6461b58e95167cf41e3aad1fa4e8d038e523942733e7cc9c50788850e69c93cae5554e99773777f750643de1220fb189cccc8c0c04f89f75ebfcbcbdce3cda04c93c7af48f43f4b50f358943ad9214c8b4286ef328c433ae0392cfd99c9c7ff3e66c9eb3f874398b59d606283ae2288bda7322fdd1dfa582dd215f5db14957496f676d8d749f159a47e7c94d8f94ce4b28454c7c129b4031ddfe4562b52bb8987ad4bccb0a968ab628825fa0543e79d4b4d8360e3d2cc030a2094af144260c1b264c182d8cd6535a08239a63597bf6ac4dd269ce82e69c107e6c66c685c7acfb40b7dc1bcda453d03a409ea007050dc020ad829650a4a55595e74bba486955e5e4ef85490347e5fe866866c258c7369a9b5d9fb9b7bbdb95ae42dd27a673a44bd84d508eba41f0063d2cb8bc016515b4e4aa026925e3414b4e185a415f1269485a553939ca85564f864b7502a4a338191dd8537c0f8e3062b867be4cb5e0a5bde165a3e0654fe95a884e002743dc64c4b0d0c3a498eb87db0bc33ea4d32f76238239cd81ed8dc8e636454eff36949f50f739e91cf9865a25fb85e1dfb827a66f986ed2bd30fd9c3c79432fcc55d4345ea494ad92d37b2e7f4343b0d6d41b7ad9ef0aee892e4f524824668f6daddacd6f6e4e5e73e26e4eded5bc3ca1b2b8fdc5310f9d76ca70f4deb08039bc371b1094ca665e230ac366cd699b1a37ddeb964516c0e3a1f788a752b2deeef1d07b8059847dac11b44afa298da38e19e4eb35ac6955a400f41706e644a76dc466faeea900f5cdd4aad88514162ac1a466824945da2b7fca2ac117502eb6ab69d02cad7a7ce99192a547ffbcc2584fff5ce31ef80f00ff767439fe4947d960fbbbf8b0ef2295177013700b16e01eb637bce4335e96f152c6e0c206608f1b581dd58f1f3fac055c803c6fd5350ca63c7456a239b0a7352cac5e2fce8782612947cfb0bdb56081266c57234d21fafcf0c276ac54ab6c81b2d1c2bc2d4cb1f049e5e2e8a99c5c7394532eb6936910dd38456908d2211477c311d2a512589d434fa2a2942ea594f224bd89490e5524b8777abb4392b661a3cba1972e6f601e6639d43ba797fd12bb9d9cc14bf9c3cb2b5ba01d7dd132a28befac16c7a13df44601e9482c8bc562ada4539137764ebb4fcb14c1dbb90e75fa4dab6694d9b4071ca8f8bedd8fe9f12404abfa396bbd9c7240b2fd51e1958c15d667bdf3e2c142c7dcafce85af4eb9548a521f7861587d29086daeab4e23867e4edf40f3f01bb3e9e7a499f389113eccf9e3a75f95ce2e959a7376da4f96138e1c1c3db7a488f249cfad259a6817b6c3b1414b121007144dabe94b980c2dba20adaa24c19c7a3bcea5b35dcee9a8ceb0cf37ef5440f231cc757a677baa2c6a9d0b1f9f7d9c03dd72d17d208adb1c9e5cd53b27dfbc7f1c3066cc98df6a3aa7df557ff0d8b5353bd84ef543e7e9a532ef90af648f6e80bc36cf1d7a97c20f7dbbb73fced6744ebbcc15ebdfa96cf7233ee800960da2d81fae70dd25c28753d3faee86e6c0ca252d046755820701ef0deef9794d61766c46a0d3a6de01d33b616eb622d0a9d374ef3b771a9f5e7aa7ab93a97792cca5dec17c7aa6632bf2524efd6d2ca49c3ac6f193b011d9b0ca1dc17a04797855eddc766c41fa31cc352fc1a7e6373a7c7a3c827b4a708debdefb113623374e6f9c52ea37eed33a78c8119c52cfb119d9e1d23305683aac58d45faee38aed62918e22dbc529efd9d3a1c3a60427a1bed4a43ed04687bb6b184fe927bd63824f7fb773a76e82d7d098702d6a23824979e3dacf7b1e2e3925ef798ce092e36c304c878661985f97d98cdcb88eabe4bdcdeda4f370bb19d9e1d855f25ebb9dbc5c0fb58abb3645dc31c76e12ea40ef77dcf69b848703bdbf719f9ed23b25dc0e13a2776e6e128ca877786cda4604cb7ab4c73d4176b874768e8794ce4349ac5e824fff41fdbcaec377362336ef76d26f3c019b11cca72c81eba16b53644712cd81de63bee326b9b9b79db42ac81ba30307b6eb211db7a34e824f8f567a07bb493c1af58e76bd55d5a76b5b91944bcf3622f4a65a555d6658c3c758f5146747b81d0c3a9fc345b84472b8742dc7d500f03b5ee6784cdb6fde692fab4b29a51422abeba85e7b07f3ea341cff0ce7329ce5badacd1f7efac9a7e7e42127f308e64c9ff336962dcac7f903e74447e2a36bb74b55b173061f9dce232f9f61b1128bb626db3514a6e90d25f64e95976ffed9ebc8539773ba4fc3a033e5f3970344c63b16e9872321fceccc0c8419e31ec997ab6397c8a5057bd7bdece3fa76375224c8bcd6223f1d13e0557df4a65534d52a7a0409a5484faa4dc11922dba95494461b62d37319e7e1651cc590e1d16b17c5c93886835ddabc83a1e651cef616792ee332d7a326a45f6237d88e8f9abc7d192b6fab00e3d33bdd557879cc33b742884bf3e91da97964a48c72fe927bdfd94df3598fb6dba52ae642ac76bbd74922a897c9b00dc8cf7b1bea76303caa2633622fbf86e2926877baa45b9153100c869a6ae38f4fd29ef9c575ad693aa0d8e849dabad655ad1d7537ce5f867b5faba6690e37205af4ad56cd59e374ec6035d7babdb722ed99679c4d91cc518ef2cc3394bd9dd0bfdf5c7314d7c9dc20cc3e3447b90fdcb8cb2dbf863a618ef9a65d895d8e9d9bb217648c93bda742abdee5526674a394fad6c23dd2aa878406b6e3bfee90db4cd827e5057a3100adc4fcb551eec88da155d2757e5cdee93c0a3fbc93eead52a9e40fac54122f9554f5f6a3559733a7340678bada4dc26ec74c0fd4d9c6fdd051b271a583c28fde805c10a88548e9f2caeb027a9f65476e0cadaaa72716f3232d58405eda76afeb87be44d242ab3a211f9855bf38ea18976473c485dea117e8fdbc40a23f24bd036b9ae93485edec93d3dba2e080830d8a6eb8c1882370c0c10645ac9f9ea560cebca60ead10be0706fbf133a977fa3e2cad9a3e3d7b8d1d61db5ff78cb21ba9474e86385d72d8f4ca75962b87789bde3ea2c2766d243d5adbf1b65a623e0567aa6a9045a56492f60478459f167bb01d1ff94497fc0e7d0a31f6f99c9bbc379b0f7ca4ecc8050e38d8a008a7eb24efee99f58561592af48c6a333748f8f3c654ef29bd93dde7e419a1724fa5ac856fe8089b397639261df694aeb3c8c9350f39d8ee0d35947eb2847d43f14518e1d01016c5b6736b0a2d6fa89366143cb6d5d2f203786eb5a4641e9d3d02e1db127adf24d29b8528af10a0f7cd45b6c276f68340ff79e840ffdadb5b0ac8ec9119028194426608e784537e33bfa16a5543dae3db7be460674d4308a1acddedd25bca08db77f0983516e2ddb0bb9b86eca655ec834fb58a2fb72ad22923ec369a61c18c0e325fccec20f3030b7480f03d87af9528e2092e51fe41ce5b05803ff21d0c9cf4de7b2580fe20c3acc8f327b814f1263c3fa18519ff3623108518d877b12a965de84127669cc87c21f383cc17325fc8fc30b3c3cc0e332b98d961c6c9cc0a66d2a05a92e8d223ede2dfbf6f59e1e5a7cb5b2fc756c59b6a555b91e5e6c151f9ad5873597dc2a60564dec131c878f6191b6c3bdb0ce36a75e99a569fb430cc438cf362800e324df89563f621bbe8a0001de4122f6e52a137a3f4241d074629ab80402034aa47162995e44a2ab8f44c49492957e9fce8ec0f10ca522f35d15c353519193dd66331d20fb6b396be46d1f06c1ee62f400524b572f065a9097418865e948717d62e6ca077a0152cbc157a487330c4cb61aabff0c60b58ec8b2def0a9d2373c55eadb22982796327326cc74c5f1d4a086b6d7e709691a50acbd0a62c841cd9fd7a091d47aa8c2c467f9f5b3f284d11df733be553df494c10f1d0bf6882c9670fddd6a49a70f2d06f9ad8c143e8aa280fb9683911841f29f838f1d0551882c5dbd691183b263cf4162ce0029387be81175cf0d061804f80b16380873e8215ecb0867278d8c5436e4141c643dff2b015c5120ffd4581597678e84f8887840d330118820ab428218565850bace234944ab5ea59787dc6a881b4650856105ca8d0c2a579e2aa72c31e1471cf0ffba04e3d4351f803f2486747c2c3bbdb79f0e0c1c379f0f0761e8ee32678e72eb4e28e3471bf2eb42ac17940da45cdd44d4953deaaa88b70b80a73a89bc065dd7153aab5cb715c1fc11ceace31cc49cd1ba6ac7855e5f1f02a486a501524ed3c6e50aa88ee38b2d4fb56a95dbd5e1b245d1d08b6fbd11403fba05e83c5528703cb1316dd716f6e07959edadc0e263dd541a993703b78f4d4bb887a1bf551ea168d70bb567a2ac2ed7a29c7ed9aa9e676dd4473bb0e33733bc892b95df4d4de0e42798aba1d9cf2f474b70b8d9efa10ead94dd9156cca71a2c125f35e7c2aaa2325ac5830333373bd52b27dee1dd931c219a5363720cccc91794e8eec32c218a1b4120ec9d03e8e015a96cdd3055be79471146189830a7b6ad2a42ced606b9e5b58b4bc8105cb6ba824f3b01f7a691e5513b5d23bdcc262e5212d02d2a2a7480f69978734cb439ff251a607a23e2dd6183a36c58783346a0065b5448a51f4806025bedf1143b80073fa3559c2760fca434a556f3fba505c803cf5327ca15226fba09461bb1f3fb827a500e6218173da39d5fdf84e559f59ea07af5230fa01cdb036f66b7cb036057914c039eded0fca8f07a56e3951a29475a8047996200ff4e8ef76364af7e918a38c1ee369a98aebb444897a273ea4568c1e522c0f3dcb50d6deae4fdd325ce61b908a5d1748669e51817de794887d40ef2055e21e198775d39c79871770b90cc73bbe515ce7049c92fec83ddae774eef1809fa08f1d747e5c6f17f4d59beb22ecf6f713c4fe66f881f307428f0ffd720d620343c866c2b07de2961662be8bdfef3dd7c04c184daf640675f44ae6a671cff3e6e06f4baf44fb6724b2f881c99e67a8a93943ef8482600eb3c70c21c7ecdce3ec43874875f69aba6915bf2dc8e58f7b196f401893b1adc2fcf2ac13e252ad62bfde2b79ffb0681304fee5d7f5cabd9fca42f54b7af4d436f3c53a077d1661770f787eb90f0c7ad87e19810f1fce00c1426fe8e367f7a4bffbf37e0ee0e91659fb4c193609f513bea3fc4e38c03d32e83c157621ee813f67bef236a9c1c74afa10cdea79acf9e83a7668b11d0caf53c6912672860c1b3d88ddc21ca115b311e54a0cae142db1582bc98a44e010c40964c0c4aa490d3e56cf876856dca4865e4d1f6ac0eab9e4861ab00a3a125405c9747983e60daa8244fabb410e7322b761031554ce00a306636cb1e255146a811626a4487942e9066bac78c5dee92071166bf59cf4ce094f5e0c2263eee974badec1fe07ce18bd83938c8ff7078e19d3d5cbbb257f5d10b0178741e888a69f17048cc593db057dac0eb988450e5f2f15d92df90e06a1285f41c0802647b71bc14310301624f858e73d42d44401b640116ff7bca5c597bf796e6971c55309625f2214654559228871040d3f60457f54583b6e98010f5364008a81bd3c155601b640c152c2802647236031164f56ec1d097e76dc4a42c103bda77202f6b2a27c83d89780400a105c988861b156f2b29ab0582bbe5d7b6f1428c09627c65040660c316810070d63c6ac7848cdc3db4b9e9c47198c8f5629ad9433026996657caa55724a3eeaa58c3d3ad471159c5ee77408211c817b7a0ce96fba8d4d2463baa49763acec037653c61e258742aba46f791dd8d59930ac431e2c8bfe837b9c7d54db393527d539d5a5cb118cbe43e1a58f3061178cc9387421beda501b6e65a183e756165c3e15ff621fcc4730898c67b258291b1620e39927bc9fbd83b0b33ff6e97326991ee774b8b1e0af7ddeee6518d7611a6fddeb38090d429ddd290bd4f972be5dfd194193133061bd0cd8fde944300438c6fc0c9c44c4830a3ef319843ebb7c5d21d8cf39a59431460861773ff651e516e43d951b108a5d975b10ec319b224e47f03449f59fa0efe057da4d6f47bd8fcfad2c923eb25f4f02217a5755636441c4d32b99c2cb9ac724637eccaf39903126a3718d63b1f4c0884e9bf6a43ef68514a8b7904593a76e81e6892bca4a9ce5a90f7ef04def3047a1bc183c4d01f1b48636c123207c573879e81a7f008e81c59347246311cab0dad2a7b8e7bd3be0c6c22132d9cc19964570af0dbbcba05f81f4ed3d9a07ae1ab6a77aa73bfb353d908090d1961c8cd468810fbcac60c59b8cd6aa38856d61c1faeeb6bd03cb78577b6e5dd1f4d049c6335b6cd700643c93856dd7b29ff7ad34a4b9f4e66678df499e5f2dc3631f3f3c2688e69863ce3704a9074ac1d7b88efbf176cd2fcf84607e5d8febae221b91cb3598f9e332bf38cde156a4fa7b7d9f675cd73f6fcc33a7a4fe0f8c83d5013da1f9da07585e46f150cbfb4b328af89ff7b2e5054cdc8274e46c8ac828923cbf4a72408f3f3c66cc182f22f494e408f3d05b46f19003ea229da4a143292f50f6648079a07e081dfa43ce1f287b7621f9ba29e3e6914884b0e23b217100fdf01d10ab034bdf013d61fd7c07c483a47fde85408729ae585a7aac49cafff0983171fc0f1a82f0cf67aeb06dc4734b0743df539e5b4a4caf7a6e294179e833575898c4736b0756fc3b7a6e89b18217c0732b8c2b5f592cf8926bc24933d057d2df0119de3f2d16be139e37203fcdfabeff36203f91c542e3d57806f399d4e61684bbfc73c87197cf58ce39679c3d277cb3aa4ecf751e6a3959913db7b41cd12401c507342891832e9aac58cb3620b703821f9b48654c26b68a3dd53b19cde885f9456d4df63621d0cbc7566940cd0f9e981f4b81af5437cfb79b0eb91993d9705ad5aa78bbf7d342957c81cfb466a6b05d955e8d3ac5cdb4ec739c5692f14c0e2cebc878e68a12334df41661b6407222634d08eae056cdece00b2f5744f9e8d2e117ac232d78c104c71803dac82fbaa85a0b2e7c6125aee2185b9286f44ee7382df44ea772a1773afb82cf0a5b883e3a0acd2357647cc75df0e091bc7c1ce33bfe5213e3434b240867f9e12616eb81665e3a9401487b23317ccbf0e380079a38bd136560079a4532f0257c3b733f0ef8f700a11e6f0b223be86f0bf2824c6082257449df15849c78e61ef576ed49e8eda0b37744e0b52972f9e5ed1ef786f83c738fae1bc2225a7878c931b7bc70e22527dfd6c011471c6f0cf760970f1072e29bc53db859cf1b9166f2cfb52b8a8c67b09cbe7459a2c505518b0b286d649fb3d72b7b5a843186156818ad32d8240b358656597c2d7062456995c996134e30adb2d9c5102c305a65b4f5644bd22aabda142c1043b4caaa06391b24308b2584c0b482cc1852184720ad9a88564bccb3330dc42ebe987154ce1b5fd7bd300cbb2a9d32422958cc3ae763ad589665d83565175a65a416a6f0b3d25a2bbd138b4cd32af7d0abcb5cbb976b99a6691946a77c63741c478561b005307b4f6e405ee6d16b52327618e6d533ef8d08e6104896dd0ebba6e47022988c71ba6ce9a1ece93c2feda2359a14cfb04956e60b3ba383ede0d2c7191da4b402ccb7b434f9813f437fc6857d4016d82eb04bab20cc5ec73e41a5ce94d807f4ea46a69421c11ca846861465a049f02715db6548482f43faa46c69be20d3d16ab536957a2a6e26fb846c317af7ebeec8c3a0c35ae7c45aad8ddcb78f743affde7bfcb4c73ea08e9402599fa1a2b49df67c0479549dd30ea5a83d9a47f3d66a384bb793ce69ef8c876f8f58946fef1cda450cbdaaadb4aaa8551d93faa5773cfa6edab75ed6c7251964ed12be6680a5def5afeab13d7677e4bbe8d7bc9df653b6cc9e90f61984a8c78b8b930ae613eb66a16f7867107aa1ac4be2ad82f0fa15a4bd5e49e8fd08f486b0d161744b8b32c6e968f422a65a635d66c6376e46611fd3b368e375629895524a998da0f5934982a6a39f3ce8140281e5a1d39453ea957abd71daa2a2c9ef705ae78debd881a55c5211e6598be71615427ca63380767280c73dd383ec70590002e83cf70108400034ee3ebdc8ead333d556e49db011c170304ed503c334e9d33359c27b0048e919cf9c934a1900e900901200524a13e495525e290320fd92544ac9f59011e99897b00591b79da0a03514984a593ba7f3d86251abe66c5afae95a2ae9724eecaa1e3dab1b904829a5d845fdba2895544e2d8d1863a4554746372075527ae375ad94927ae549e994d4df8dda8cb1e5ede275d14a5d4e3aa3943326358490cab4e0a9ee969cd55a15a3dc988d8ca9ccd64639258c514638dfec21d2f81e9579a15519d6af524c460cabd6c89820530ba6de321668d5959ad3a78d7023329dd239e9bcf24128e18d31f29b56d8686263094b4a08379a5c1ed22a5b5531c6b719997e39bf28398e5a17a163c68c89e3676c9e0ae6b9e58696b7cf2d377868c3cb73cb0d2cffdc7203c8fb68848e1933664c97ace3ac9876b233fcf8595983ca7bafa1085dc418e51ce1b9b5861994525a2f119860189669d80bb66d3ba12610d65a9999192a3434343435394e4a8ca089208208228c908a53e8d0482081041274d8c83cb7c058b143bbb9b9b9d9b1653cb4c7b1f3066f6b8d2c3d5797c76965740e2068880882121a4c354081e18ee39795018341020d2221a0180921c50d22a35a2b092a806d34a1a0498aa6830941600a02181a1b688848c0734b0d355e84e7961a5d680da2fcc73d5208bf844a03b841149610489ce1861a6c86194ffc10c40ba2e04107ac8c71da2194efa5c37f3641fabde482f43ff9c3d9bc799fbc3552ca5b538f90f8683952e2815e58b1850b561532ae58b5a798478887243190764802074b6cb16a77e611f241ca1b717451c3098690b26a5731cf04549045114ec4d0c1124258c52a32c689dc331db6a6d17ae1bce8dc0da7b88655ac824e398d5510c227c46f525ff3e2850fc21ba37c856430851aacafb58f0a3296e6cd3caad10d886dd9698f09fba81b900d62cf847db4765d1f01f6d1ceae0003643dd527d500e00560ce7e02f75c32b6a6c6870cb199a1f19172880a43686ca48d4d0fc19d992b03d44050437cfa76413fe3fde3a18e08ae837b763874c93d370e7dbe05d838bc1d0c293c741d2e83dc8f210b85a0f06307f79a700f05eca3dd867b35bc02b4ebe0de107764a66ea71ae1762ec2cd51738da8f15283456989791c704506494608e188279258b53f26e661006b0d2e8aa8d283d19655d3b80fa4e14e3e390ea85fea409efa83060596bf5528272f2929e9488e262c9224ad6d60bbc782ab466a55eb24bdf7b0a4a00756bc2883d583192ce6082c5bb088c021c988d370411149e440e4058d1f18a9082d586288c882850224d227d743af9a320489ff13f4d289c4973c5f93168ebca4e7e525bdf7e6e3239f1ad47003064d3e8879820d2116ec6005131fb092a61421c9818d2f5264b0832084d0801cb6ac4104031dacf1041ca159237cf792b8fbbde0fb3d102ad4c7748cbb38c83ea6572eb2208fe49ce97df3821c9375e79cfd90de518e2cb6e3a4c73ad2650a93f3083d4123071b0c9105076890b16a7f43cca39d9103378200833784588379847ee081194f38a1c2441c57300f07a404e1c5144f88d0c289553be4de941661c91392f0460719e3c438fd49d99cbc3434276f37a5cf29d7cddbbdbe9323f7f03fa29ff21d2fb59a7ef0ef284648c3058d17b6e325c93a4116f9c9aa5d5db9ca69b6553107e7c4127c7c8c2a4d66b284125ece235a52bcf248adb7cbf15d9253df1af6f12c571aa4c67ed7efefdb54902039d22ae9dc3499b2e890ca8c9d136304d23e4db99ace917605360a61bbfab201f2f5eb96345bfc888c3b4b038c1b60e0600fa46854904ae9d0a4404727c7180bd9f8078c09e24a0dc840c1104d56ec5c43b305cd1651897678060d443061c34b6b0a0493715fb1354e93c576a88f1e238410c53d3a5452ea4d5305b53d70a2a5d4a59472eac0f1a4c8a265642aacad4941086118cf287a4d94523a146fce491345ea26fa54b1a5f43dfae61775c687f99cd4dba777f4da10a1deb2a6d65abdd65a6bbdae4ba79d68299d8609db39c739dfd4f981121a454c814694eff1dc3aa3e9d99d80c29670a4440a0359733448d253b6c604194dcb76a86f14f7bc254cc884f0334d13f6391b00e6800219e3f04683c5c62a8133961ee7b9f565cb67a81969b42122fdb9f448f304238d41641f11514a9a1aacfc182bbd40fdd3a6482be98749a4523a3a10a600844ef9240d0dddfdb648c991048f033a36e58ea3ea71d1ebbafe9c7238f6cae1baae2f29f802838741e7afebbaaefa85894a556bc5ae63d70aaecbf9f2da3b5ffef2541b7fd5ebf4a66aacca71be54f19deb889919d3020252cb0c251ad6a906ae5f28b580d00331b68e790e395bd3fa7283c79e5b5f88beb33e84ce4c1c3a3acf6148fd0c1c563a7fd767c853e90541eae74d12350e04a94fd236e8e84008218429083bd5974bbf9921d8fa35dd80253a535e9bf8f03d2e4a9910fe27c60edc1ffb88662099f1c4bf25cb2d32ba7ca77d9bc104f770cb8c2b9f6a95986ca665359d283c70d55cf3dc0becfd03a6ef341d18c8e716195f628c7ec277cfdb85a65cf2d1bb8bc9f879a938d36ec9cf7a4140858e685ac9cb622c9e9cf0ce5b054e78d85eb47a6498678ea3127a8cdbbc72429f65596653fdf2cd3354a79d747e4ccf66f42c137adaf51394fdc0cff833af496c8a50974e33f7698aa245288a665e3dbb2eec06a97ef9c5c347c7bc68f2d12f977edd0bc3b09b6406212349a691a8ddebd26e17f49a4fae8bb06b6036c05b3539790dcc0698fe563ef027e82307fdc4f12ac222d7dd9c37ef66e6f3769b67d72673ba5d9bec16a93ebd3ae63449adb448a5d7eda6679ed95cce36d70d223df3acd50598acb5249867d335d764908c4876a15f977d44e70b6a437481054211c5091f299c704ef6960edd863a3f8493b3a1dc053e38af6b9ed8198e7f1cfc3986e1a3f1f4ccb58f192b6c337976796dab4e804cefbe746e7f8e796f2b0839019b7b587bc6efebe54930aecbbcb76df3cd8608f6d8fd41c9c878c348e93ca15c327c32cba2461d73699dbf139241e77fde2b01eab77ee26cec10fec4f5678d71ccc69f4e5cfc8cd209c79f38d4c9b3c82fc678423977f9e6dea3b81622c34def3ccb5c6e429e675986691886619ebdef34f601f9f58ba7b6c2461693df38b8a11c6e283f9d2e079a7ff2ecfde51b27c309e5fc53c2e5d70a975fee0331e779ef4bd4a36f64104564faf4c9d521f5ea0c2157ca29794f7d5e7f7a21572184144208e14fd0f3f69e01826d7f28ce06fab381de1ca55c3ba40fd65a9d372231bc0b0fe165ee5183649e55ae42970148fb1f073cd07ce8308636e2c2d71ed0efeb1aa74ca4a2bf8d3119ab0ac25990642f08760dfaf7038522a55d50108562fefdc07ff7a7c33620d295d88721b2987cd7fe43c53019f34a6a12aebb7c6afd539b9c80c9cba084fe0c42ddb14fa07eecfe3c311f1de807bea387de3d9f0e03a3c4a8b4ad75753deb98a21900001000003314000028140c8884228148301c136565ef0114800c8c9c4078549609b42087519842c61843882100800008808ccc0c6d400007dc24b134bbcd15fc2cb8023d2737381f2a38c0d6c74b53174531d5fa07af84dd27b0a87e603e9d322b39189a94a4768a495cf0e7278877827604001c1314a2015aa994fd0721df8a2aacbd9813532b9e434be01e8032d4a8320e14fe7e3f7b5bdbce5f658e32412d827ddce951e3552019f5dd142476e72cf4cb9a2a0a30daf2b4cd7efbc140c80150dc992b514229bb477e82670fcadec11e230ff089b384a5feab5d9a7ce49841fb2ba73d08261d4fec39f1ca31535d85d260fd78c2533c152947e36b61b2978ab4ff2793630622d9674586506f3d09845d25cd7fd434135a03c8eed3fb2a9b228f302c9d5497256de3d7291f38954bb68955242e1d2b84ff5de417ec77269f33da46f609550ce8c54f91bd49284100e1f9691f0bc4fe1efff3bb9ca17e7c7c1c8d2e63d98edd557beeca7501f6fb50c6b1ff8cda90bc9e13384bd21970a3e3111798421190c192fa447406ffc887570abb2a7d572d5e04e627ef1a23ca530b7e5f6d99f9c8d065201bb57e37f91ff0b49cf3196d2743d4b7b0b73a6245034674ed3cdd6d45b32dd332c54bbfd7f9dc948a23e25f0a6785e311d00a8885eb65af87ff00d10837068695cd7f1e658c13c67007b5f44d204796a77b00c1d8c9e7f540566575f82b9f10022d4147a7a1efa669caf914f6c3d845253567f96daf06e0c15a22e59cb6261ebb55dee751762f701c0c624de932edafd9be19c4423c9024cfdfe26c7ab6e67f71c3a7a88fdfc0067137c64dbfa0cee47aad67fc0cfe28a5c0140ad1264cf2379baa2f56e0580ccdd57b1261caf179449ecb9498198f9c8ec28af371c4d3a8f0d6c1c66c58e27a7ce4a0791a23578c5b0a6598d2fbc8306860e4018a8a18f605a5439aa96a22401eb12fdcc46d758ff16ee48b488d2863b21986a7f4553813b6bff51ef83ec0adfce868dfa4be700ab97e482c743d9e3c817813ad955a8b067f64dcb8923b05d6dbc6321bd885091d07de5c32595295955def6099e3d30bf7a86f79738054debec59424e68e0f674cba6b65244a0022b82234bd385e7ba010452e449fe2eed580890e7f5df3b7a751b3065a4157f1459d39ecc2264a21fb753198a6284d73f853d0e39c4aa3dc183a4c4f4233d7e12345197cbd025a06ce727aba9840dc5731d1aee0c96e0c7a134c830d25aaf0c68844f517e3aa571319cb03ac4ecde53821a3fddd657f3f9cf1050a20a3fb997437ea8daad1356a8db4916de48d88376e41f1de4a10d67b9f3e3f3c5f42fffcfe67d816abe160e8c37d48943d53f3d89b540e9e4861d3ca5cb01bc412a5419052f6cfc8b93f05b2e3683c666b3cd70cc1858ed468b4a269bc4474a61b2582f30824f6f46747b8871df4c8762368ccfb4bd7063de84c83ec3a1a8f9966cce57cee4317e97804897c17ac7a31f74789f83212473b273b5fda08862368e477647fa24270cd28f2c1adacb60df74c63840f499c26b4477b6585b8fbc8b3a930ca20aa935338ed000e6d69596385a0d1b0f7fc89c41f682648fe5f2b663e6bdaa2c2219326738a4dc20ec6960d9bd0a4b0f09ac0b03746a6253ea6fa2946338ba66550ad2011851e2041a884af2452bb03ccf25a4c5f4090e1c9621e18de1dbf797e5117428e66a081e9a70bd139326c12b13cc1a235789705b995e759f9971e752a90941c7455693b4b9183d92ae25b5da5817a33533ffca8f31867521222baadc733f27de65c93647105f85789b6e7bf2bf70b276c202c20634ca363f128d2fff138ab6bef916217d4e475c509d03409be9a71def9e3965ff83834a4fae1dd1cc82779c06e524b20265878913dfc81cea5c00aced423e10d485c36a20a1d8b503b84d2ac529aa51a2c0e9ee948034673af2bfafbce2aee2729721b8810513c4659a129c465ee3243407fdff9546f45e6324fba41a2f6d228de0a511ff40a588b7dd843610f66918e0d102bbf7180d414f0fdf1cda282948fad9439cfa9937d6afa7c83ffb96d52a96a3191125b3e94a9d1f9be04f35a6800820997115c83b86fff7e5c479239fd5adc3e38c08fbf1971e782b8835580f69b596752c85e1cb40faf65a60dd414ecff7887e27260f7418efa05ce7ac98a7d70f5d1faa632109ae025446de42837174281d2acbd68f2747a2728ef1bd0a684444504524a311df3b19bb718b0ba012d1f7f5a507e0f64b5f42c3325a154b0bd019ca79adbe7613498353c4bb44e14f0c4cf98f23cb150156f91022989823811f4d0013a9fbea76b5022d52f01ebd5ac1661c0132d2761b0cac30092f91d7835f4a95282251f3b45821a5e0e25fdab405d07ac0454fdc0ee31c04af13be20402df3478cf6dcf1f8d9587fd0111ca6a5ef81b7aefa3d84a7b32b9d6f5df1fe93b9f59f1cee2940bd1e940eb79b38e842057bd538888f8de0076ae113cecb09b8cb56d8d9f314b13a0c5e7e2e7375c1d41b569f9c3efad19e78b494f05dd06963fd241d92ec70712e5fc29d00dea076fcc591766fad1a77f4ab1a209e9260ea48959f21d3cc6657cc69c819ff3b5ff972de96278518b0718e717ce1441f1e1f4bf1a3cff96a702d9ef7866648d9312ab5da50a14d872951e482dfdfc142e047e9701990a73b4d63e540c72c4305f8b76a490a9ada759053069e2151223f26e7b2821c6c3e70a29734294887a637442b135a542428bbaad03a5aed9c697a4ad1b05ffcae6a04718bd4922f94a640aa8d8f5172748924b5cc22c8b7da5ca6f7e1acf02699c1273b8ba1a1fc57b1165d686bb6cef0b8aacaa0ef5c7942a5cc9fb753f9b83999c2de8359cca1ee8298af8c05f9537bf0b13672acb625734ced42e4edb7af41dd6e6436041d929a1c1c6ed952cda299b2387d18c1e8c4ff96d41e283759094b81e42fc8f6e69001fa3bdc4b411d20b7c7426e402b5f1cb89dde33b565c1204bbe440d6e814696d58d46391d842ad27d2a89ea75c511d369752570b88f3652cec4adff5260ba5d7154d6ccd0aedb99d3f2f6043fa030698610fcfac5aac48ae47b2ef2e0b513386e1684f27f495c6cbee171b4365279b5bfc54f2548d25a79869e60c37162bb702b3381d0ad6c8d55a36b8aabb456875788257fdbfdd7e1e2d8a7a44560e0efd8e29cb911adb4a0a9dd5137b54ab48c3017f7e274f4aef6770be20caef26699554670cd4c438c3964b9b2b86c2150846443ad0d249bfe06faf863212806e145393ad6bd29fb1d7a0fa6b7a727c404b7b5a50c802f3da3813ee1c3fc70fe656861d5f14816fc992b26ff3b5d4a2df032e761d9e234accac1894abf21a75e6bc8667515c88ab6a22917ba98c2dbef11728d686b192299a50a5332b2bf550de362242a85484da755cd748a60b73511f9e5192a17f4c4a4f9295370cb5af2fe5cc543e2da158aa5dd47bd25ff5eb1444003e8bb9d9761186402c3c958a9f001ce3bf017056d56fffbdcfd67dcaec38cc11e1baabb47fc38a723c466d9c3b0100ed901b07c64399839c09e5b60c25de0dd3dedcb8430ecd0ff16eb77a875c08856ec2ab7f8a99b8cf6024a356486e3049defdf943d9f3d13ecae5917b1840054965fe0ddc682616f194ae54164fe3928bd291c17e5857f57dcfd7942b1b8b5d301dcb7eb80bded97760e327a1d1ac57615ea814dcf52d926adb915f7203f9c0209720f4d9abdc603ad01fa22567425b9001067f02f1b90fd8c877d10d49409f65c61eee143a01679ef643ca0e6451f3d902cccc520cc53940724b22e11732e4365167db53d681266b803c0539b950a6cd8ff2c9454907c7b36b003d2dbef4b38ef2102bda620618906914b248de7ea23dab2829cac0740bd06bc9131f6c5df5dbb52ea369ddb5b6b530336f8831ed5218ea57805e09cbaf746dac8e40573330aa8afb6558ebe4b521eeaea4060fdb065f46b7b1d32028e07251d11abb68e19ad68aed888ffdb372a8eecbd8ad0ed4968ffea22c24fc39792dc8b1e4e0836896816971636a499fd93ccb6dc6e0f049145abe0e2d898c5765a29eb93295a24a5b31fc5125566d6034e8503ce31c6971d02578ef859355e8a2973ce8576d475d890a4d8ef3c45d25dd859a1a864f8f1ccbc52b0d3453c22a7d5954f5a46d79c9cb6d3a930c511283b8aa72a6a3c8f2db65923219ea3366e02a0a804ab8d9eac6c25cfae9807468d78ae8d6e4d16c012b50124eb17075b491f88ca0b9194fc1f36be8709a3b033024981a60b6c47e6203539d16215b3ab95bc1791723e3425eaf10fb8f46233afa8b4941f5e9fd24cbb4b15c1842297276dff5c6ce8d24b467ae06069300e8529c1c6cb054b7e02cf2ec74493638302f96b7a761ce8c7f39f552d789dbfeff0ab3bd5689ba795c76b8bd176de30b15901528079577bfaed77a07a39174cc913defa28a343b6faae4e3ab9ab84ad511cb884ba6fab2654e745313a33327017d1f007a84ac4f2f8857648b36ef36616861423b42612fe80e07d89e0e6a1b813e3faf0af0ebe1c99a4a61d81e42a51a85cd919555a820dbf5f0ffa777d9315bdb54394acbb9593b581083c494a4e027f37f8144cf17c5a188152c5ff0c2e568db77fcccb610aa3b34315742cb7ab3688cc9d390adbd15c31531d9ce6b8160343dd513ce1813ff14b9be80e4c83b65a8f211a80de78f05ff9b016f2bb9881370b673a0a9d15328ae1992032ae2677f441dd0952d39883716161c0dcaf8d1324411b6f2725692c74c4124d9637b1df3980ff5587484675991a03f7ee623790943cdd18e6acede1aecbfc221ed4d0a86c1a2723ba2c9f8f89cf8c3b306a6846859e5b50f15d5b8e8ce2d1210d4bea2a082885767cd26f2a2c72051ca7015df1e636722ad61a3fb8750e54ea3f7fb92e03df1b5e779ec01f82f5b399f920c151eb56a9e1e1536daa77af30321e2051fbcf60fbec5a33292f46ea0eedb324b77a7f7433952748bdad67e3ef27b50add7ea6f3032139a5c88f6b7e45817dd5c3de79bee7030ae67260dbdcfede5d9522038e44cf7696bfb2ba30d43bdce7268d009c62584a08c6d89b342e236d41b67853040c14d49901f04aa5452ff903c5ac5b100fa6066859c8302f5dcce4eb8814d8ca01a9fe3a4700a3ce7e9d5dafa88978edcb8e1f1a36c7a8cf0012707be8afb4293c05d824dbbfda4273822901ebb2086cb0f256f38508cf4f003f2e73e5d69a40dca8a6c15753d126f2c82e502396e594f2ae61a31ab3b294b2e3ba983899ac7c0a0c4e949cfc766ed15b016e38f570108771108162b7c434a5ad239c134bbf0471ad0606a23cdcbae2c5631cd26abb8cec966bfbfef2aee0a0885526386dc92511966b8174add69867d5dfa9ad6198984fff0bf8d2e10604e56769ff034a73bdf8582eb901d39f6590724c2d9a0d45fd5b1472d18c22bd8b232e557bbf0c935374bb247f957f9afe61ae67e6efbe28ecd8c04c304ee0cce24140042f91a14bd8e224f601777293c996bf07e35d49d6ac115155bfc133819b6b7fa2c9823c4f95110d4c66ea7af45693d907a8d0971f0714eb60aab5488ad5609aa5e0a31b15456e24b656e3de5835eac1a75d8da642a75c3cbb400439883191c6585c27247216747b17fef6cf4181fbd4494fa7eef676df2e2579b092c59255f56ac3cbe178441d819face303d8ef0eb35df0f60ad53e9e90806dbe89e1f83daaa9fe2acc3663899b25be0fbb99421aad8b5d7ab8f46c0a39bd714a50b49f51bf0fef86de317f0cc7301027f5df70c91485bbdc20ef182fe56a871a3d7b336ae4668f6aee28f5c75a51401c6c515578979f75dee4f795604a91d42dec5581a0b22b719219c0f8fcc9f5de9c40222ba75eb63b259f41b78b4b47a466cb498d7bae3e8c92efcd42730b44605fb4cfbac944d7830e066ce87a54eed849325d73c3f6c54ebf89e99cc023c09b91e47195e3dfd951ae9cdca89a6ab11e5f124046be31d3bd0955ec79b92f89d60247a35d86f1a64588109c18719ce8b74cfb3354ed7f4ee5ace2cfe578a914e9e8078f07205e76481d8e94fab3e54c1184b32bb1e5c84173fbf55850d310f181411b5b08aa0f327f9af9023201e06d246d1d0bbb6a3014f22c60fe46dc1b4c1e453d7586a62ae3d773db9e21bb815ab548c6477732f341b4aca1588c9d9fea25760ef6733b6e377b413fd1e2f7ccb28543dc13411ab1285327f1f33e461d766cf1387ee3e63a1d82458c41520079261498ff2db00d7af01ceb74516ba44323ddd482fe2e3488920264a260cb379af0bac39b6d6fa74aea59f42d820c9d1dabe043dc79cd3b70081d5a28f59b1818956b6456eba59ada48a0793aecef9b89e439782e371e669c29660e527eb1f506ab0724f90e71981abfb5e69569412badbfd0dfb26ea97724ffb8a304279f568c045cf3022c9bbdfd5cb4c5b5c65013ca1d50d9902f316a08f31c340194a8fc08732cdaf29c3b497efd7c825304525bb89f6cc77512ce2f71ad2abaab2981f09d78b6f7faa822d79beb6f0d2f9bcf8bb3f8148551d2c7cd05fa88e7040883de2a2ec48faf2636dfd4b63de4d54bd0e780b57e96461e242cb5d401fd99b7b9c6af631ffd33dd2c38f4460fd407150c916acbd20da45487530088605323fcd5e6cb1fd1322b41587a529ac075e698c956cbcd346385f0fc50d7dde586741bee6897c47642adc48dff47f7bf608c8d494c0dded994c86f4f1b61f0dfc62e26f56dbd5579eefe486584bdce79590050188e7a0e43edf941ded2ade071cfcc766a867524933830160c0655f975ccaabd179d275bcec68b865b1d87df8a57878fc299a56f37c3a0500f3104d078e4dcd4507ba8644ff2172694e0dd2d09e05f1759976fac0fd9fcf89635bba139dd0f12a660f9dcef4708341e6d37aa59093f530e6b24cad47a451fb2e67c050a1fe2157d2804bd2e51531463bde331ae068d6d9007a984811ddd643f2b96b73e9ae63d82bda6d69c73cb7429d4695faa9fc1e3e76f1d42347d89929929f9f22a05e7f1b05bc71a13b9f7eb0959b88cac8607035f4558b89fdab125e0a1cd2f23f914afa03bcb67904348da6dafdc9d6f578736202234e47f8fb6840d375ec167df63b8296a900abb6a05f3cc92bded9e802130a8e8a292956519fe0669ecb371f15f5eba022275065c5c29ae770334d2f5c62ad698347db09867b4e14d7bb264cde98a5dc108d75a8debb1b0bd18961a79f624a5fe45000f7deaf66f7e38d284bf89ba9daeb107b4354ff7ed5842b64f7b1770acc1fc1d5606fa6efb28fe2daf17e3f9faff5462e67de18ca4325589113945fd4ea25a2ca748fd246436b6292455f53f63517631444f965d63338f94ab682781e7b1e7f2c1d46ef28b18c752f6733012678f079e3552f5ed02b95307d98cb3314621feb4f8f0e8073841915d006065eb69ff1faa208c3a7fcb8ee5099171aff29960111b08138a5af4f5eb00ae6ef2c0ae1639cb44ffa473f110a979b9e2bb10c12750df068d4a05f6c63c600f7cb05f3b90072ff538772617fb303f61722e79f95bd206f3a5486871b76f18155cd5d2ae7c9a2a6201ca846dbfc82ec782c91ae3d65a519798efceb4c3a38f3ceafa5925c35e2dce3cdac74c5ff6685639e8612a25ac6a03072662fc264a13faa7f64e7327085362fb0995dcbbc8518b5b64fa593cb9baa71fb98a36d4f66d4a79e686662b51c8a9886d1ff3a85c4285197e0a0c79782221a7dcfe1adc082ed98e2c41f81ec9e1923938c9babc08763161442a11d3cbcb349d7109a5ec5a56c67def606df3754983c97a82d213e43931e37d8f093b12e588d7c52d9bc9b68e112935b4a0b86fd88f14cf48da4960d28251244f8d9e7a99d82b8b60e883d0da916ffa5a6d28f49941fd1da69601311ea38d639a98cd37eccf21662331ac7d4fd6e6596909059d50830cd6783f90b8e7d2e55855b91d2208b5d991a1208cd359c60d42c6aaa5716ba836b9005e910c04f19904e035ae68474aeae217a378e090f0f0b56781fa114bc46ed886129bc34fcce465cd55be0198bc8e9fe605666ae0e4b3656e8e3030c76f42283b693d002ec4e9aa98ca5d318385fdcb41d56994c4ac2ad43c402b762f95d8107097781793bf7837689ebde5770781545add9690624872b9f863a519611083f42ef6e6d96990324104f4497e61cb918e51c09a37af5800db5c0da7b47cbef4523db385c077736333298c5b6dc434450127b771688869bb22ae3246b3e3c466835339e88e85987c6745458c114644fdb2008aefeedb2bfd5b083aa2a4761ac2746f61e332491b3420c641c2b18587cb060d142c42d4396d1862930a190c613d8706651001dd52520bb1447a89256cbd7a144d60503a9b4397d393e8956dd041f75ac1bb45851f9b99cb76cb8c748981ac3066b89e82aacadeffe6f5140e573e44299d8d989bc6879d01d4f14e19bf9cb2b4d308f259d36305a23db2abcb840a50a7f1b0d11d2e9c52179b8856e923d8c378b797fb118fab07adb6806c45159a493cc3aaf9dd9384e88028443fd938d9d72a8d832c93eee7762604db9fcb915a1db84ca4618d82cc4370eaaa9794eb2b6c37d966e1c10d56e88be2cdcf17d5ba88bcf044c86780191a8e044782e6092917d87014f39cf7f051dce1d85f8c5ac7b10be99c35d8be8e7e97d34d43a6484aaf503ada8a19edda11b982e429d15c98734c7394949749b6aee224d34e82cd207181ae37d35fc581cf592de8b2ad192b2c80a95fc6fb34cac0a1d5f6fe42320535f952d08dd845c2871c6ed83275876a0e37afd8e772493207afddde9a800259940057124671c7cf075b8739168ce7e1f109215208445605207e24bb65c55425701a289189da527bb35ecdb82ad175ee48ffe75f6bcd30177c8c4205a8b55bdd043150f4dc550b91a2528bce13384e86f859114704d7e9b397035016f36abb384462b53143671e2fea9d693988ecdccac703e0dcf71f8b6e057bdfc9ffb91440dec5e0a2625280e4baeaced7e4e6536b5499ddb4e501635cef97cd3d3b2684c3e19551b24b8008275386406626221e99deac78c415f0dde0427e3aa58523c2be0c68714eed5b1b3b396c125427d95c423a962a9041485e68e848d5804539740529dc2b20436e732a0c8300ef520d96c025ddec66b2014f6ead4545891242980ef69876daec4a84d50fdde6d2a0880e6ab2bca94ef2d173cd2b55c5c5f564969f5ddefa32052ada18a04f074cd8246b1ac567ba64d67dc605318808309d9059e8155a1ae4016a7fc047cd81e3a88bcba1f026b7d8e39b3f9af70ca12043165e441b59dcdce0ffeb6e66ce34283d51a25fc443fcc3bc6b54712bd7f90b10060eaa0e6dc59833fd8496af3b42c1ac04c9e37c4858d7e86a5788bccea878a2d68f88e24cf0fdbf8b5bccbcd6fdf21f33c9b35401e07c6dcd0cac5c9b010bc762b4b8b1d9800c8d7c7d8e1e380d877015b23e55f2d27432a6a6f801c3b36cfb70f825d2ea07deff6311820d390dabda5db80740010291eea2f35a35836221264258d81e890835e6ab20a81cfb7e863092b22a17297d8408224aae594b7ce11b85b2f5634daddc99962f5a64bdbfabad26b78e4e8265bd556450cecd09c4345b4dbc115f1292462caa42aa91880542a1ec3819f5ee41508fcf5a822acf38da4b7328591fb11da0484b640f676b5a11fa7bf943d0d0b2c8d549619b03364840874ca6cc9e57bd920c2cb43646d4a5e079f5abcac2ac4d6f2c3e83bfe49636641421197040d53b87c0b2467ccba09ffc20f413f4eb793e7172adab61d5b2407172f454b9899efac45445a621058e07815b95d345d7542f5a29613ff7ab2e1c6e87f452547dcd0538a9f8d8c6234c56945e64ec1dfc95dd699ab388757a3fdbe7024388526d2fd789aeb2ace8f3cdedd0d4c1556945e60b5979d60a99f1329dc19a77417ca2d96fd71f17af00b2687ba68df69b97e4382c8e0fb33ff2785dc759632e0a994797902da683582dde6ef60cb8e35a681aaf9346f438d8bec18a52d7642431b958c75d7b66b280e468ea561649d505831af64be326da7a2d928bbba851ffa45b5958c1946b452a00a7aab45c8f0e353a972f90dd0a43a7a0808f82f6fd6fff256ea01653bb9a0067567db55db168acd9d19865a9cc898886a6aee3e88c81be5895134709ff88f13fea614b4717883ed89938bbeeb9cb14691f9547fe1e9cc2cf3a268b0d57c07288b9271b008c73004d1341178fc3e8152c61553187a952eb79fc5acef31afba6c8d03d32fd3dbf0c855f3c5650cc9ef594887b1bd4cc47892a284307dc23465be31e2b5400a2cd2c2b5337b9738a84515fbf8c7b24713ba2e013fe5b708b59e3d1ed34c92dab26df8413ed2c1ea15580f035eaa08577667d52d01992c1fd1105f90675fe7a9c101063f5410d5fcc7c9820911b99844a78e7e6bde279e31c5032b4a5772da5902f9085f48441b7dbf605e5707cff1ac81feed5713858969979d9efa374329835bb96efbf3359aac660500917232416331fd6b1148afde69df4bcbd8f29aaff5abbe1607366c0111b6ec48812616a5622826533a792880642f8ab018f966b658fc44af576e5bef258b637f952882d4260d1beb488b490e557a5ea7c15fdeb47a7da53242d077e3bea45e662f55ad9be526323dafbd1b4eee147fdcb45ac64be4a1fed68a1760290eb866070e0b43c7091a770ffb9ab922b2d0e856b920072ad0cacdce79073361e80710b9ff2c0364acf836a9e10e68b1be2aee71d5902a66f2ac3b933b6e4e9299140a4f59da15ddd91ddd4cdb66d2f132168833320179257586ab079bcd6b493bf45dd12aa2cb00b6985132d3b54155b101efcdf077fb9cb3247a7f5c4acfb71a1f97d6e5eee061951e1b9d4ff7a5ea50290d90918fe44a336b4a0f1f9cff982e45e5ec8ce7763bc7fbacf8430bbcc4ed1e5f33d9481e5ea17731d5a53c230e7fc70ea4b938da7d703e919bed55246c39405369a3d954a063c2a91e30885c4b14b0b9a470ee066a7865d4a34cf907f4de71bbe00affd847941dc0c5b5379fd92a6b25b1fe0b384061e60662e91a4b717e0df2bd6ab8c2a75c6bcd9d04721231f43171504558d3d7bf1658fbc3b7441b641ed50b980a52f426dd8fbcd2d6fdc0f83871ebbdc150918a6aba854d0fb8c671afabdb9d34c7ad0782965e54b2c04ee3869a9809e990f961fea3229a2626232f186ad8db1846f06821ffa4faddf04fe5ce071f74350f591f2557b6ab2995946c35d04f93dcef60e7386fbc8237b58fc6db8d2880334a8536e612dec7472cf26bca68934393a9a4b26788e25ffa32ad76e6e900dcb20be4799f006d782ed9fd35387230f2fcd260943a73ec848f7d70efcd7a6df8421c0922aac1bd3ca93ac8d9428ac7944923f874ff34f4648208ce4a6a25d2069751b4819ad515d2568178cd520e9d184026dae6ba5273452016f5d49fdde10fa84d49cbd6679b8bbc2fdee17891eb32f8558d0f101a3c42373f74c64f95a4b0a108a545994923a5538f97b33dc88da0789bfb27834976b7100a3073f0315be93b6d8f48fef7d34f4cda6207228340ca734da3210907ec57997b53f7aa99647d80d1cc5cba162399ba0973318777d199a51a98b51cf7bed17708ab9ca12325e3019780d711ffdca0c1cab2a6ebf3f03a1ee7d7802ca74f8c490289df28fce50782c381af82e335c8e757a562b8132d04a55abfbeb609baa065a3facfe448c6364d04ba9e5429c355aa1913c221f5b3bb1b218cd8f6578662749bd028161d6cf30f3b50b1bb3bffd9f2cc8122c0546aaa97b60be55f970bca69f9c1be5d5e00d07dd7075b4710c8d3b92ea267b269901213dc51d9a20f1ff416ecbf2cefbaa554a8592fe13047fd9096f53d0e01a964b1610f3aba38466fa8096875c0baf123a3374b6ceb3d2ae20ffecc4d481229e3915460c5263f8e4001d395c637cf149f8e9c4eadf8e63e67fb505ade958b5d3328eea66e1aa954844cfcfae201ee44f822e109ad2c7d151320437162cc264dcd1d341d587b1829b6f29c2a762b1658a3e5087211dc22b8b7cfa0ab84030dec2121238a2d4802e175e47e7079239aab40768f4652836a128a73c264b626c890c409d52722dc70c3de2311b9167f893cd8dc1555da3da18e8234fbfc3e981c1f1e5e09fb09de65874f27ca13a73b4ff0f449e2962fc6e4a267eacdd7bb8b9eac53b0643a42ff80a33c0a068badb0d202aa53c760b5906fb5d4aba579ca362d8a7b7020774cc3cd0689799e8fa2d9a0466ad6876288853ed8dd7b712cc9257d94bd6382a723e23afdf7c7424418e4baa4a5e4cf9f3418683ce950ab28df2f76dbcf81fb7eebcd243ccd9cba6e408ad160e16d6591ca4123d1cf3ca2c5cd6606f4df8c582bb68be6d74e086f371138ff688d9743b9e4482597285e68e19f8c632f9bc054944c2048b72a3dd2d3d7039dc17b99a0e691da3e5b23c58292359cd3ec48a3a5f021b3d5ea161a442adce09f426400a96fa6fa49ea4f35b60d755a329e5977e4bc50b434ec5b9f3bcfc471d7e757ecec4d948a4e62349747283d5793d37ad47464228f7b5068e84bb5b821a4d1e94d04dec0dfaa6fd4079cb9f7c5d14844377aeb8269c6988ba12457e603b4b1ae47275339d6126f540234f12ed6419ce2b43f21b8fcdb58ae35fd63d70ecc2b10ed5c9e779bda0ef45a5fdf06d68ff248b5e384f662b9ce34a29f4124c5a7330e6d2733b962b454a9e87fee12087360bcd6e5d0d31a6d4f4a7ab3fbf4383b0e47bf9ac8b74396a35a32c55c07762ed157c4d0c8bc1d9b99b48bc2459e7b3fb1cc03c62bf3022530d868660cb2de2a48188b356c0b6f93f368c517712740fe58c7bad04a1a3d19f01323002c5a62961cd5d309ea7f1737cd065bc69e0fb924ed7487e98a6dd83d82b0ce38e1401781d50bc4260d88ee8ba3ea144a3a4e8c9d3cc3c5576c4036857d8cc5b9eaefb9072f8087ba43fd2985c8515d3c75f021ab01ab5d6067ec2dbca17f98dee4ace8b031d22c4efc380a610faf6efe75eb323fd4a03a83c460a1283b7f6afeb42e730623f7a90f50a74370a4ffec861062121376ce81a87802a5d2aa3d9e48290e9db3fd47e893a99f20d739089d1174bb7f607065a6c5a658261d5431c32334790ddcea9c1b6426552be09ea6d9b63a16cda55e637f53a1975a831bdefc394597c3643985aa2acd2922a572774aa303ca1304b1bfe8bd0b11abb31de6846b85db62cc4535acde125ebb4ba10116d2a1fcb23d90b788ab7731567901e74163d6af881a68eda141f909b6b3c7ca631780853618be502f5720352d88e8934d90790337a75f0f4af0b52c62b012120bcee2d9a9239ecac3b581cebcf8a2cb25674075466b93ab1fa3c6ed9c8403d4bad0fb4c713e272e30e8c96b5eeb222aa41f7f33c0cdd7865bc3115ee0c99ec5aae0ff20448469b3415fa8de2387a8882000d147b3161b587ccc4f0201f8c926329a18ff1a84969538fa4445c5e826b782af1f57d265a9c7be63a0be6cfc32025037100d31afbfe64ce06cb279316470824abf2f3de4254d5a972e739a72330960081c8e10b94936168ab6c162b9519c1172bb7b25cdd872f92038af20efcbf71f0f3f5835f5ca8d7c0c9b932fd8f34dc7201e608e6a8fd81a3951e05a07b755d96e9911e0e2d8b215f2c8b604ed024be1afbc79cc9322606174b4b1d80f38493db4d68f20a143c494d8250522f68fdf49048ad448a57961f564b99d51e958b2912a9f687266c92dcc9e3a795504ecb0f449e83d7d47da33be4f66a14089fc61fc64f9b8ee0211c30a2ff517cffdfd86561ad30c747213dd8341dc5188f94648ee6091e06c8d9494d3bd1804866aec041db45e688d2c85d98e66fb354f9a162cf1c3bb4bcf75da05ba0c695c9150f2d611c7ca76938fd44ad05d6011b73e944de54a714721629b93eb3192a399c83dcabdc9aee757febe855fe525ce55fdd0effced287fc8a4ecdf9a41c1bc7bdec80de27f5302f9b847acc59213c1cd8dd2069f846bc107b69600cd46c7cdcc42ae091338991e3c7237bb85fe3dede5ceaa06f290dd6d7eb8e8c75f4911d158d076276c91d8a4c4020bf6419c1ddd93054fa2f8e35fdb48e7acda8341227efe8021b4bea9da7465f6c3dd3c8a6baeb4e775d3918424306781a5a6fa5fd8faca28d62cbe277241ed18964e9d4b89b597acd1eaddb9c20cedc2515dd78c0990a290ca7380faf85c44cd8b04f181b047eac1cebe76b08ee6892daf17eddc6d398232004359f4f4fd7a1ba8201e5e2980fa55433b31fc55a153cc00339ec7eca0c1cc991d7ffb5fea023d62dd341d4e08830502959845454c7357e21a0e32ab86608da4417c5222875af0e89ef6df127da5bdf3b3a1e1f850d28a84041bbae17fa140fa2a9a2507fc48baa565c4fd425a62ae3ee7ffd6ea810c8c1d870864ece76d896fb7c8019ec7225d060d1e2784414be7c4236e4b9b02e5927d5ec2d1e62e64ec79379070d296466236f7c8c8624c6569cb2e053d3e792561e8997f7bcf6a73aa1aa07f7a3c72d3db51473988e42fb7b123812a750fba0e603dca0475d0c4d00b1197320ddd6c5b07bdca71617f38caf9e8234da7c7b06c7caf9b1ae26c3150131989846bb8185f4590253029098d5e6be1409095e013aabfbcca938ec88786191c3027f04481108e25052adc50afb0ad577e77c690c95c8bbe3971e96f2087d6c42290de75f69c9ae3ddb735691097aa17b24e85ca996a43fcc4a92ff7755dd6c5dbbc415da270ad047211b22fd38fe5b021c61186f23725ad51d32d638e992177c57e9ac6ddba0f89448af85d1cc44eac40e5dbf312645453766a6ac84a4429987aac4e7ca2efb37da81c098bc70055c94e2df73840e4646cea982f998f9e69f40c928d095438e545889a774188245fee1ece4038f4141256c911af3bae3b574b6131e2e70b6ba11ea3bcdf562e8c34d45d511de13052343b87ee513e8124c18af03f395a3a414865ce2df8a9fe825540fb167da0c5215118cd664bf670f67a9ea31c64fb918dffc067ecf3768076911b3fead868f83c44b0cbe2b2e89c0105700252cde38ae0a6de504c73509f9d545cb2c9fac3b2b2b28ce747f59175c9c9eb2549893d90a4c20b316ecb44774385168ff8be84f16ea9fa8caf11a20a1894ad4b101e8700391569973becfd18acab680c31e0a4aa87ec588db24a09c8cfcf2cb15b1999d600ad825abd03988b3f43e949f7c5a0d51aa9e040ecb612234c07811a02989941cf058e8ca1023ebe2e2cf76ed39a93e2b05453ee952d9e0f0cea0e0541dd3729e1e1d3c328bdea39fd32a8cc1842f0d40616b63c75bc2a1f44f21f53c0c0e0892911d422cb67df469e53d93ae693cb444fc2034ed8625552538ccb4bc00904ca66bc27861c9a07dc6af82d070d47a1374fdc063b9aef110170636401e618f7904b6803d28b5e1245f14079615c3b015383fac7e582c61d57513fe23dc3fce69f048529ec1316c3f34cfdc6ce455a8924c3cde43dbecc5161cc6647bbc268fde02a1761979d9f9c988a20e855c6eca1fbb30fb72607c33fc0ee418fb880eefde32ce85cac0e3e15844fe0c0a3a90670800a6043b4c8bf9ce9239b8320db812cfa0a393362e35fc41cf616184d57570fcc0798191f0c9fe9c103cd3a85e3eb229efe4828573047bbf3b7c2d375bd3d42a7cfc7cc82567f1793fbf77b731279d6b569a1c471f48bea3ee082434e1bb7fd48acfc4997e50437fb14899371106e1f39ddb31fa78a9c13a3f8c6c7dd3f78b2ee607810b87e043d4b3e587602c933ae3228860e43781e80e1429242dc8ffa3a2a1fe44d3ef6d55441c1864af58972630e603f45577dcca8bb5dce200c74bfe0748bf085a278a7f4a8001c520988a40a79b812b9228895b5e6c7b63ab0cedcb33bdc290e21c840919963c845bb07078a6784ef8788ff682071b26fb19a30827117de71bfb98e259dabc6625ca3ace52764c234f5630c002f718bbd5fa2ec2d123c3094f6435703f008448b4b2938c6cc864d23b2b99ebd780e84f4e413d0c5b58bc304d487ace8d834c9f6073a5aa66c43b0a3a750b59f0754334d413f0d066a80068373abb1f66c8a5923710e288c0a3d8f030f8b924e8bbd13fdd1cfb406af63352de44caa336b246182505e480639a28c5b3652be109723091b7c29040f5a12198706ebf540e49cb728b7318606cb2344a7e3e8db111db113ecbb2971d8461480ab114150e57117cf75d6b698b41d4b50d0f24dbe7363b8844cd27f24b3b2f9b8392adeb15b8e44e07d336dd518eb86df82ee94adf9d743ad59f82120a071e9c57a1402b36a099baf27dead570628e9c00640f1cf105415a43c546ed1e505640655bcb3a3ac86c8b8018ca3e234653c72255e0f67809acf9f857e93a4441bd6069b900243bbc55b071acbdece41ed82d5f0d86a1c932f1f26d16c22b7f39f0445690515e08d8e3501e5e83e56967192bb1f2afbbb832924a88788e382194510ee3bad1ff8f15ca6f5a78de3325702c7ff14d60fd5d6e66da5e69669294454f2333fb02ab004024c96f508316b0a879596d49bcc76e1018f90e686f3c05ae0967d6aefdd184734e7049c845e04b6a26ce1d5eb92cee68acd377d583cc036d9aeb8470c8c0a237f1a99f8b229a60c7d771031c5fa024443008e264acb04a2da5adb2a28abed7e35d08bc56db9a96edba926fb8812fc270a2c8c15803d65596326fb2735095ac599423e69224243a71d22d0d02b9e1ab3b897e8b542a097474e2e9022dab7065414425e2e36a7cad6577959e156d444e2f32c25153db40f49a50be4d7a99529071928a5540e7e0689e76579e4b3fc16d3f35e30069756c4d8b01029bd7ec43803a2f4dcc0d48b755c2404495c1eb150697ba75ee502c5dd39ce7bd98afd44c3b6c55734ecd6ff9a524dc47540008b51c3beb2c68b48a24910efd27998033ad0aa85924ff50049823dfaf6639a856e16f5003470749064f9c993154c88ec4588b77fa4acb8159a8e449c1cb602ce65a1e9a0bd59559ab69379a69b419b1c7e4de42b0d8ddc6a42230c21f5d0f20928807e35f03d856011e2fc93df9f5af2c1020b4b8551ae8c898836b4a226b968457740761040512d230119fb8c90039198f1413fb2a4f5036875770a1fd6a3418fcc4ddcc5cfdb6a2c9d51a89acc67fc1f3b8f91901f08094884d59ccbaf343ea4f0fb710c18884f20154fff092cac0ed0c7f1970d557a5e55dc768544e3cc4c912290f8807b5f846441728239efd131fe42f98f50fdca7ffdc9ed9e5be40e022fa28126c2d257343d97eb840a965807d4a1919c14a58c641e6bd107f826ad25a0c3a1a6c1a040dae32edee4d6552f22bc77293f19884f0b28aea21b351306b9f8a3a2779efe5b9c96d1d5274b435f85d81e6e73bc8a3513c5714e706c85ed28e0573b6d46b494e033a6cebd827627c001cc299ad849bb4e127fae1e335b1c144ca4409a341d0c3b8660a86a3aec4a07d1c761e04e574d61056c8d34918e3f875d3086018492ccfda3b7b84aa75d2adf58879c2d47b1335e64f16927bae738ceea3a529719654099a7035f920b0cc87263cfe529e3160201626a31b11a944af838c07afc27888ce1e10fe5a1cb9fd09fe0dca02803bbf1e070cf9db2638f0d0c014ce44eb01a825c10603720cca451c7e48ef00f4ba9ba3105f12b0d3c99995e23e51c4205235e35ccac8714752e5e160488fe11e82b040c46f461df5ccf3e60d5df2e3b99a042f47787daf1ede71466d124ff0746754d5422a135b7b886cdf46d1848bc6f8a8348072f6783a039c08fcc84dcb360c066aa62511836470f9a1a70445cf6ce91957c69ecad81ee620c263d42d13060b841d302434801c12c79fb22d4a8a3efc2a44574eb09e0b627f2d014b3714e39d9088b82feddf53a73db674f40b7aacb72325930cccfd9445ec54760c97ff55584d0ac9554d13025e54006bcbf223f1cdad89311be813d21081c6cb673976f91aed3584303a53e3daf6fda3599ac134d165cf42707fead13c2cbc4554135eafa59eea09f4c8a8a0927417fa39f66afdd1bd0c7ef429f666fdd1bd0c7ff421f6defde6ee41c3d44dbfaf95b2bccc98814bd011d494f6c0b529f7731575e627cd6879923de4d484494106d602aec490e3e37486d546ad59379c05c3632272a4ecb04538070397e90ad27ecd5af09505b693b531d618e26057ac2c4557f29fd24dda2763c10a758f732d04801dabf490a85f1b23758855c2afb2b6b7815f169aedc0aa4d9c37866d5741563a25b73512e24ed390f6dccc94beda3b1062353955cce75ee563f56ede9db092e2ead799db5497364eb9d1a2575517b5dba76a72bb55508cfcf28b0a949e93dcf8dc60be1555d036fbc663e12adceabafbcac6f80cdeca6bd30bc5f2ebc404087ab78f5ce82024bd3be1e532b90a9c7947eed299ec90350702d338fe29449eb5c0c7f480b6b44b41c0293efc993bace27ba90c39b734e398460b652c026ce5e3409a4f8d7c01db9e465975c7132fd387ba50dcfd8f635571dbb751e79e32027aa44e532a9e2580248fb10cdca046c95aabec72a914665c70c26b51352b996b9666cb6a1f60b01989fded89b5296979292ad14da74fadcb4a9137e5fd05d6b5a4cd07b0013c297a8bce30b3fdc192e8b5b501f73505e5656733ede65fcae8658f23b1c7b692646d185c76e0a4c79cc4add6ea6d9abcf1b6f0869584faf7f6b10deea3c2c94fed48b5f43faf6bc8adf4650eeba7bdc3201a69a9007256946da4d613f92c7cdf81de5313d182f21d6c356dadbc0936a965fc78908e1e65551ce57763c80e8dff584595bc49450a16391fec195104709dd3ce04bf6cee67ebc3dc676642fe61a287d601b81c00a650d723a7f6ff5638392bdd1ace02022a0c2e736e6c6771c6c609887c3ddb1173a6ced1b02d02f2e4b586523d0149d40e784bb926acd5c001fa1f7ca1fd50815aa5dcdd6a09b86ba562bf7931a6ae8861d466c0dcbc2d83e0ad1660b22f3b4369d9127885ac04cbf55678bfa9da01cc91e9182bbcfae5f5a5f7990ac5e72a4287e80910d536c58f0a03c503b46f54dc65a082fab254e4b04322e2d4e536f99c5cea7f9f559078ccccd4f3c9e849a4a9441cae6cdc4431271d723821fdd2878e8ad2129a4a3e3c22890f295f31f1a10e86834806e372f96818d285d745fe95dcca0344f9df1dd7c305d0878b5fc053ebc22291a3effa9a2960720f6cf47afcdd86844bb1d26e4c50325eb4574d7e90a2b981292a605fa677c0bf1c9903eee5f5adb0f60dad2800943f5fdfc0e8a45aa355bec0428348569c0516b4e03ef5e8272097ee5618ff878549bca92a3ad3ac3618be757443fad41ea0e24f87e5a2df317b9ea5aecb3da9fd6329117ed140128f5b7e4034858da68b4e5107941bc0ab3b50f068a675d9cc670dc0559499ce582232ff2047ddc21362e916163c42ba913367b2d776fcbc9c50ab66bb2169cb02a33818b5b3d4a4cdf10cac4cfa54c9b8a3c7bf0423fdf607560be30983b112877f5ad3820c97dd56be611e960f2d9cac14c490ab57cd8a95b7dd79ba42a9df4f53d854c64b7a88d8fd8f54151c5b4db8658865f1c05db86bc9f0ce5a11ffb9739307b2884da6881f1f8e2c18e3c303c1ac51aecd90321d9f818f01cae8e755c97ba8b9aad8ad5a3f6fc852892569b636d5643fb5a702c6d4118d96366860f1ea268594b89d2e256789a5dc3fdd6e41af02364eaf5d00b89f738940ef896bd4d96dbfa924c49100dc9183196abe7e93cc61a3ce205a5ee9cf44e796115299add25cf6e060147196b461be273e7815f16fb32913a6ca3ca7c7ed28ebd15499e17bb9ce46c8b6889d2ebd6bd555228a87fec33ef274c264d244b94ded3181a832e84afa863b0cc17d9382446c70549ee124d97a84a812b7eeeab6fbcd452b0bd7372206f3c225ad42b6b7ad1aaecb550cf5c37c1f6650ad18af46918abc6fe9fc4acf3052a3fa5af9d36e6d6f0e3fa50ab9ba138785023d7a0a20ae68092d55b6f7936ce061bb1ae1db5e527916af05bf5a368e3c10e230ed2794554311b73652b99cfed5b4632b44129be74b948f287da33cc9de76856f301cd009beccf659f5f5a69f4524f9438e35aae45fdc3ae870838262092374efc1aabb3d6491b35d56e9358dc34e3d548515d248de549c0754c7fd65b39f3354c7a5a61f1f8f5b5adfbff1adfb1b608967314a02ba6d44dff3fd879e99a3c0051d68939b2f407b2e8eee31a5cd4ec9f6a9c82edccf6e83fb0ba2ae23411918758bb88567f527d078cf0eb619276ed42d843c37788950fa984b0a555ad1c822c78fed6be59f8980397fab4f25d86e4640764eb0a2c4dc7db81bdbd4521e9b6dda5a93ea559487f69650daa7dd23d49c836f2281f4d4d15a2962f0b00e380e09e264cbb74484c2e324fac4a99f6def180c0f0fef4d4ec15c98ca0f53742f33f0a550e14daf8ba10c13ac395c805fd627af2065964f36ef9d697b47f90a625b58dcab5806ff9d603321bc80bff742e8bec3b7a45298df127d72ee9937454964bc9ef505376427636ea65d4ab6a12e9ef76e8de2658024cac035e253f972d8539579b844bca9347fcc28f5d8212f84ab0bc48d29d0265dafc56895a38a5bd5f6768176c5c3cfee4d5f247b724380cec0746167e4c9da78c8b5f0a994768d527946240b93afeb3cbdebd11074411085a3867ae2f527500b7571ec66105913f83986c396de00a4aeef748f33c3d5060b76ff3325d2c451166dd71d23e3ee6804bbb3ffb76fe2f8d8851041343679a96685e0968a6a21677537bad7d1e48d4b5d0bd56a42a3d835796bea025d9a96139f12d5fdd837c8957e34e304029f78e2677f5c5383f91ac26396d3d571ecef75612dd9db92927c62981d83360c7ebab6ee2c8c54458c1eeaf0ecf6026cc96c801d66f6b55e300c6d684eb4f1b484df7e55258b432be096997d36f28195cf345c1f672e5086d079094e3b6dc15021882b76e9ca7e8582ddcf65e1f568ee50807c4d98fafc56bba9537b4e0184b493feefec115b84944b6814087b8af6af307c9908bcbf41e12040e010331ddf7974ab69deb80304e75cc28cd2b5b46827e25e2e99d0c465baf790f1bea84008c8929c0ea2d3f58ecb01a86c00fdaa51f9bfeb0d7b171a9171ae3bb84dce34f980efc9034d29515b684e5a1fc475cbdb3c282077af42b7a78f53548232e6fbab2b25ef9e3ee117fe4dfa30ef4aa5cf48ee2aa024986e3a43055b9a714e1c9b568b266058235d7ad7f0fd1132ee38d4b37e4a1aca6a6dc90ffe5cd702135b8f9b9f2e6a410a301e649d45397d925daf538f4c9bb36dcc594acd1406a8de382dacada15ab9d6e6a13a5be8d1b508b0943b8b551a80617a78f9c084f767b6d4b5fc7995ea8c6db45b079c6a9bbea1e7dae1de70a6e66f3362ffbce162f26536397cb160573ceaf7c14f09fa43fdf6b537c0060a4ed2a3324fd82cdfba5496161ae99677d1eba287bc28a34bce008e5203cbcc00d82ad046aaa30072507d117b7da1ece8ea919e67841f224a8444fe7f0672fb866d38fbaf1450ec87ebd26026c804bfa82cc9fd08c2e658dffdad28f401b458c3590ad0c5a7b1a7e350c451c412867430d227207298dfee700bd28fff85b746c6e3cbbad42c3f6ae1b17e5e38bc30196a41eda80e04154eed5704b0a850af8be8810a2be6912dc27c4345649b2a3e892093f76844128a7fb250d4257bfe62094f94d0f0212bf032198f7954d84488224099a34ea3d49fc81f67d2d557940369ba72fcc29a4274f0ae1a9a210014f05a1e672ffcd7358a800a9e572b21b72488f5c15b40b0d80fc04ef3276f6676cb14af90098923c57e93c276e1865eb877a8d91f855573bec0658508c2d4914bb058367f437c7d37e80ae48867989d6a9308696bec1bc61066c3649e4680f0fb3047506d1631c819d52d2a3fe82cada947649e5b4dae0368dc672e8019ba5bf65e65d5471197acb41570ade45b98a61a370bc0c2786f279b2797d72b27f409fae30b777fb8336a4bda34555cf015e92b5d095fc34cebd70a916f4d2650fbda691efb04f7f9def3c69be9c07d195488d7fe784938623bd40932b579b96d72e259abf95ec1232efd356f7d2a2c71e84b5eb9903b91f73bd6aef94c9815ab3f297c3422fb8409339a37fb7ebbd155c5e71b278904d93d64e187d1d4acdb11377fce65653847f3b7e9a0f5401bce77f48e51f2c9c60ed78f79c60171515f4405d1b4fade3bd086896efe2f9170e8823406c46dd0d0c97b30f283d90a608b55bbf2359ce93c68041bf1d3b5c2403a7d2c2a3e50010eda4df5ceb390e00916b14f747dc33d9caff3179633ded93f128124befebc2b612c83fbe0da3dcb917f8fe5fc85361efe90dc0e871ef311f5742e731c508f8e0e9d6b69b44765a04f550fa432d2b2bbb54e8d38d44415513d78808b82e0f35c9a2391551f92946459aa7d20fe31a94cd0658115831dcb892d41d24d444e7980c7ef0a27f039b79e212929f0333a9f30b2bd1e26891cac324da1feb3f47340c52b56c701c413abb3c088e9ef9930ccd1f0e6e95f2143674a4fb488bf356e190480afbc38fb5ad8377c69a1071a1d4c280e14658c11a7e66f3087d7c5c8ea99ac0cd05b46e9263893ef4da3876f8a240897c18b860a323275f1d3bc05af63e3416e22b4518b2def676eae5b3153ac9fd34614fd80fbe370a8b326adcdf0b3fe421b44c8f54f75c9fa80ae3b64c1f0c83c32d21d47f664d51a11aecc6bd5fbd409e7657e14b45088c9301adb63528937fe17467574f3f9ad1269419fc159784f5d9785f13212eb6bc8c3469f2f0c4084a6a77afb01353e87e1ba78b13a34304d64ae4848e8e177dcc2461d22ae194a58ffc454916934a1e3a1e7b02323f03cd4858d121349a4d289803a9b4d6ff60fbbce568a63590cf7f336942a3f8822c6540e672b896d4718895b3135d4bc19d0622c3e9c35e3da19d0743c7bad3b063d898e7c39340def0555ce900dca6a4422a798beeb7967789b2f40d657906c68341c8fabb4757f026d2af92dddc9050b1e1ce404694ba038d4bea8faa961cb0031365ec964a17f4fda13f99bc42a64b938553d5e875fa3baf5a340c07ef99ea697447f4f7340bda7539b784d72fbb3e506c858398e3bea724a0604e88fe1334fab62fdc0199ee8b5d189a05af4838e898669793fb20c0159e2a295db240de70bbb99a8a088e35d946edb0f12ffb89289edc4c59059a5917fcbe6170ed2e5cc22740f9adee3373ce66d4b11554bdedfc3628d086f2cc5811d86dc47d946662dfe34bf53fd3afbef0cf48c9899d28c3493a4d498d8a97cd30ec41aaf5f884aff8deaf968372f4f63abe16ed1a3c809373a3f90d9ed57817daaae387c6be96a800df50f38afb2abc0630b827e0929f21359667afd1ad807ad9893ba299755b9dbd599260c72834a46f800d7635050a1ecde266bf52567a496ed4f9cac8b0a3792d4e1169ee678628f6f4b43ba5591c2479e11b9166719ca37d8a82195ed772c0485509c0969aabf2fe5a26c48e102df18e4f0d2b018f5d2fd0ee3f1533278bc1446975d7dbb39c9e9e2dcb3d82035a5279b6ba110db4016d24350390273dde62bfa5c12adecafb0b9db7e645b0ae6d0706458659099f2490ce9f36a5f1dbc09fab0d154b3f67355a9e4c7ee61e7ad48b052f7e357beb6320cc946e9f3a48133195fbc5e4c914381fa943e1c149389d425248291e636047bed7182f13c3729f208f84a8186700cc1fdd7c13956b2c8b2d27a15adaf01993d6c500956a7925d3fa39b6e7191087bb46e02bd27a5236c3c4391b8a4bed2fbf27d21e3341a414353d1d6752a90a717342262ea892f22aa8e36bdf35d2d31f8822521e1380a600784307622975da6ac40e1ddbdb77abed28b74a3d63141ae177a5c25f9281641240c188143f4906cd263ac4a975ed263a684cbdf699732eb0886e366512d4a1fb3c35d2a72c7f3fcca16f354fd1654029e381b69d27973eecf417f43208f6d3a7bb985356ce36028152060151a7c70136c2bc49d8fe5a2e1f8b8bc00395208c74aa2e2681e3088325c5519cd86214391a3958b23056393a070e470696308e71ea16cb0da985acec89d92165062f56e0980e445bb8a725953e652c58795cce1140f193f7ef5b08dd9e88b49eb67433627be6e9ce3b00baf7da06327bdd9db7df4d9b27fb51486f1044759e71f9ab93cf79b2ad9a81945579b4b7517f4d1115a4c7642b96149d1386b88a200bfb44b5c45074dc0dd88ac9ca6c422857edaa66d3e937a2a460922a242adc5a1318137a0ca1a69810ebf666b3caf2239ee29f86e45440892810ac1b4d63885ac49ece4b71a51461dfd13a1049dfbf46ef819a6c78d5107e0c1f2c9281e64194d80be91ab822f3a057453a6c69a29857d94badf28556af02924f19a2bd184f2957cd302f3fb3ed7a47d4ec7937761050aade33f26d65f4238232b356720494999bfdc1ab891b25609ad74cf4db132cdba8e96b2d564bfc81ed41acfc58bee9eab3ce24a935136be2c59cfeb4e67b233b4ef2f5a39d024761969c35a6ebcc570501a3d0af10729e06dd03de2631fc87d673d6a6dc9b69b9e4b14aee64e4a9b44a0e7676d696130fe5b0f4a14917da060aec9f1aa91b1e2621fa633c971477184963c0496d59436710be20961fff2d4276910a3ade184bbfd2c24666d38d8c59e428d492d76022ca52bd0e2472f19598936fb983d653860c23353584dcb00eaf56df08702c98967d126cba00a10d80702851bc37062fd079eb12a8405de8cc7c4a5b128188a71bf2643ef8de19ffb0875a2abfa2cf3e30a82845abf5b50e7bfc68d507a972e7a677c636d44c77c8a1de9fca71dd5ed14791494667849a55ae9fb3e057ba64826a366004585fc3f676cc3f4021806378e6fa95b2ca01f1b60a7e81ea974ec6251e6af447917b5a68379431a99726dd9eb34ae4a7693aeaef2552ee4343f03fcd236189557e2d73617870bba06a63f37d86e8ef5f18d37f7c67a587e1e03b03756b4e8222d411961b1f7e3a58ef5695e583e9fd7bc0d546ee454b504885651ef45ecfb6bf7a86276863973bacc20706e64f4b6d85cb26a3d294bd14ffa16cdaaee97cdddc064e5a0751e0b7c39330444900e620adbc0eb885877348f0496b808c50896127aeba7305d2b777d664dedb10b544e6d853200a723e801d058db48691f92a5542e02f236847ed42d0adb4b222dd979288b8f0839030bfe7910c704b6e3d37035c75c0f9b2efe5f4ff42f1045d9f390c600287c57a085bfd785e7146b28fc10a0833831e698d298a4e7ee04017e70fe3f0454bb0775fc843b154c9220c48746fbf2721d9056a7ebcf2c43cb4e582f45c782fddc684d3db2f7a62d0daa57396e283c2e2638261b592882a0856eb66c1cdb410e07b42e907da0aeb670db73d8b2259b1297966bdb9caca623214d810bea1554b307b7905a957d17ae1aaa0997491e16fcd23bddc8638537c3ca87abf35dc2266424854ccab2367784146a47d2663220828eab92498e69977cb08db2c4e7be502bb888521db56edde5fa3796cdfeaf48abe6b1be8c2b5dc4d55d82a494c604e62f159ac4814d0a967429893f07672112e8bd8daf67ce3fd0191e0bb25fb030fe2ad19cdd4e9d4b409f115d36626a2065fcc4af333deca55c92d5d6292c60531188746b3959fd02e49a785f8050189351a110d016acda46848161e73f552cf8a117f414158898327d063a09f6c8f360e6b02a3a1265717cef13cdf12dce94d7493674b8cc3163efe2092d16560746f086a20e4b5dd7c1eab5800dfc2363ecc0bf9b91888e9af48f1c6a636c8018d38b68b87e74018ab5f653b76cbae83c3d6609240d58986cf15b9f43617b3b85bc7761cf8f60797d17649b8189c2d183453856df3fa16bdb60fcef2ef4081ae495b5029da4c1cd264d947ab6e881a831f3958b6324b5799c283fe939adb56208745608e9cde7206f1c0c3a0d30d1a424a5d9eb9c39913a71b232cd9cb7097e0a21e911833acbcad8e3c7fc060f7a03bc56e7bb00f749c62817d14bbfa11775d34961a0ccca002600b1cc42cfcf249425e2bde62b6f442b045769079f569593e333903944734ade10da43828db2c73bad3ef20b79988b25cbe2cf25670e8672e9cc0a2c90b353704cc10a2833aede8fd641e807cb9159f7bcc7dc984ef1f339ec89539d6d9fa8c4330f6a1dfc65982cc09707f404969d06d9f4a6fd6db65968adb852a9711d624606df548e39c39daf2c50fbd8d5648945c09bb21eae67c263b8d5480b865420be3c07554de4a10d7c56ac956936aca12fe6261dd6f1e5b551e3bc65ddc7d628bfbe153da3e9e70c09ff0cdaff37ff97d9df56145a6ea31ccae29451bceafc50f786b77182d149bba054d7bf963c9661c6379260149267c44fea4c39a8c60c3fbe37288f1647e50030fa2c5e37a21c15b9580718117fb79e0b3737ba6c22eee47a64f2237010fa45d187c046e05095795476b3abfe93b626b77897a6e78e8dac4dd96f5b58087ac205d3718d7c320a8d2db127297cf92fae56f2b2f1a23dce7d580e9184ff0871846de54e63bccbc6317df05be071171c774c02cb6a1807fc8af3bb87c6b91af87862111c537bde538eb68c0183a3cb1355d1a2249c0f8dc1923d7065de36e08dbee88386173a31b83855398f227b44c4a67b0b516431c80a4261de90cade4ff453bbe09260b65c3242e3d399984ded0266aee99cbf7c618ac5e1f556299a2be5c8b58650d815abe971a162fb983ac18a985455de2cd503ea87880c1f5a0148bb862d1e6774df46ba4f15bfbe112617835e523da6bfc80abe9ff4f820168c4d7e6c2f5b891eeb498a7570d74e4dfcfa37357203a1ba4d4830559d0d7a4c6f4cb34b6e73e127763477e2f9b105b1ffaa3636d96aa679855eace5d0a113ce5754579460c1d05c838d4ebded1e238bd3b1294e34422b73ee1c316170d99edd7923a3ce7dce401d23d68e8d3aba1ac3acfef9c4b01e86c8fafb4788f5453faf592335ddb7a2530579ca4d3ec307d7997e4fab5452cc3839a2880b74d7744f4225cd64ee995ba87af8a6417074231d715458dd729a729741cde0bcb16129465a2f4ab6ffe280cc4b60db2f745b20d697d64f742931972d147bf464c1f1717e8d176098623a664a0478df5324e35415ff2b67a718ad7135d8c096c265c6916f0d21324649b07f9f2322d5707c1c6a7310cdbca166cf3757d1e6a39ff13fbd89f8f35db48a59585f226d6c5f7278a13bb959649e54078eedc080fa23a282b88121922610c8725a9f5a0a4879c8ec95ad7807cc47415047ba941bcf3789a1baeab3eb71947fd56931e2d1bc65fbb5aaf4024dea73e25597cdda26c0401423fc4b9249134f3cf2ac58e96e3c9d6329f6f4146adbcdd7daf36d0871392e0b37e20a095158c7399534003c1b61b0ddc7650efe7274359a3e7b44afb86a976ddb7860cc7c5176aa48d5e11b5f2ab5c143efe3f109600aa409596b8f7647e03039041ace822978f2eab3617e8333000ed086712c0bf11089b776e64c557d5c29c86be6784a36b82d82be793c8b4b39a92ceaa164e497f80bf998e9a015f66f31506239ae84e5d72c20b2783ea95b3bfa8aa9abecb73b6499e4cf036bc4972121965f136b49a25b586bc8f0e69524641b218c238a2115d52149d1f73d43578a0597c8946aee5e18ad6ceca6e946364bb7b31047fe4fadc716edbd78569701ac0fb3e350b5af4eb3beb0bea025c79ca899af5064712a726a04a1a7518ff44c15a3d9c6ec26127ae43605bf6dbafe952645f87fcd93469a144b1e4c49cd1dba618c69ecfda0e9bea2111394c42f82b021a563fc3013395a4e0d49d714b405c98eb72b3938cff7d0555207835531113c58af78a19de8d15415b364520be3634d80e0a2b02f68222f9492fcb0f5814ae7ce6968d8d7464f02d9cdcc86729707d09a3084404fd78e82e64227f885970fff52c920b42ec375e204db6724e63aadf8ef48077d4b52b54cd59a1dce361c56bd1f81ccd2ac960e6e18a5377d82f1e580ec796dbe6eb5b95d3252b2698406344161991df4ac783a88bc11b169fcf633b0c8f0f4352ba4b906178bf19e26bf6f71b5a203bf541195f18818ca197a294ba01fea64f1d5ab342750c93dc1c5ee392d942e22b00dad7ebfa3a0f277d2a06bf711324ab6e3a9e87f5c9a84b6089d9f354979abb7d58de9c78506561f1012c0d2694b6eb46c17553359028f647df82a43a5cd1f63ab58067dc82c409db9031772eaa367e4d295516794aef77f0f1f83996d118dca342da495bc62c92fdad6d469ce981d36f3c3c35776bcb37b7f2a36d66034d37472de3193440a459cc9594e7790a565e8339acc4a6735147c0caf1101db14be897c3431d587929eed0b5a83afd8e2172adab0f3df3c000a56f400bdd148b7063f674bd8497a213e2ef01b39af03ed108d7a6a9860ebbb3c6749bc021e637613acc785b24262fa3b24c3d2df99a626ab9245a9b3092f285bcd1f5f6d6e2d12d70de85d86cd077586108887edc9ce7a0a499328a0bdd443a2f81058f5cfd3a73ca6b1673cc95d7b03055039cb9bca7ca38d5288db70d4b6a84a4cb72ecd960403b1d3433d5b461928e1b9c28ae1545650cf89daca6e98a531f08ebe152f0c661930d55944b7d92ee608b4c4606b30594534572e58864a4a9a2da55de120b85b4c4683bbb8ad2ac8a35e3dcc8c1136f82791ae40058a9cd15f51a0882254694de7d4e8b45324967f545d65867f7325b29ab26169aad9e66c424fb93ff43ab7b9fd4a7bf3c7fb5058a5ddd6988f672ea8bf94333928b55c540f76ab37a70e280760c538ab02bd667c3df80a6d8b132912e0c1e8b8786d8b280420f543e7dde4158ad3c31ea97783a91f347323ee34a4a4a0fbe0f5d9427235965e000c4d97b5c6f812f463a6547042b9dc7305cb579f401d7ab7e088ad57d0bc4e34662d0ca6aba824efad989b37b21d300f272114675629397df4681a391137cd579466bc1f57e305e006f855799d76809ae5baed3aa8f6be08d7d6c2dabb5f2dc3f7360ec84ac215c94cd6e7f01ca3c2712fd1707bb0969633f11cd1ec57039c839bd0faa30c5e5a1751cf8bb3bed628f1cbfa177132c0428c7c4f129173464ce39f5000c4862c78f037547eae80fae43fea01f3dbb1d08bd99dae9b1fdc816a1e6a4a737f7e5b7d5cf601a4676e23e9610f2cd037964fdfdd7d66f32a01900d6501be9ecfd6c2505b0aee26aa91a5a5735f6bb2ad44c873d65fbd9f2da38f99991fd656af911212a451180659963e14a5e7abc51c73c0be79e788e7111907e0480d6d8c93cd6e0d408a30557e403cecb385f483df08108c63e750ac42d8a243176381513cf2563b5c8976b43bda110448d6a206399e32edce4c963a5652eaf2fb5f0386c6ae2753dcf71376710b6d16a0a33d7022e33c1d3f09c05fcfdc91ecb0d8364320e42ba7a22970f1408bb671701b1a057c20546a71fbfa0a3a16959986db39a5ba9bd4ce218345bf0cfaade1057902ae0135e2a6ca036271449fc9bdf3952b3982f419cd1d45f2f10015ae1efe255b5ac30ff57fa1842aec608cdd47d7c05767b01a1b8ae5e408631af1a5972895d7444b88013e825485d9197b2192c8fc9617428fbead0da2151f961799b00b0a6fe64762e455c0ae1a3522687a7fe6498640f3203efbbd733b1d76a5e1e5fd8767d9bc1ee3829d5fa0573bf3358ae4b6c1d7371b264d4444a090635518124485a5b21945ac7160df0d15bc2c8a3bc69d423d328696bfb968d803d39eb38cc4e7bb23281cbf09e2a20b84ba19b9226023abdeb96050f995ccb21445e9b24d102998c3123625789af2b63bd038e5d9bd0f30eb534ed4fc9e2cbe270d301d5630e96f01f199a61a5874f497ea78426bccd6f93e7e58ea5428ce032bf329c3f8ed266b4c2a05f88d5ddcf986dc6c8b8c22e02a0ac612ff4f7496e1ad220edf680c82dceb363aee5d1463bebb468df593ee852883766df0ab4fe86c185a88ef270a564f96977d6a3b9d29ba6b7165d666dd966ccf22075c3f62eccc90adb44e78909c30179484deb51b0e8b5d9dfbbf6a19031d6ac7f027387537f3a96afe3ad166a7a6d786ab7f60c81747ea37cbbea127f352c7e2f4aafb54a895f2994112a41c1e12592e2eb5c4820bf8e3fd58d4686456440c0b33c2032dc388adcc6eb1ee6adbd793a547266f6b74379fe36c512446f2e14cc2f7b9f5f115597fedbad949255707dc67d39207a5b82777c53a66e2bc5a315ac2373bcbe795c93deb6613156d6fb5d395e1aba6f592175e9dcb0abbdb329ecb3cde4756546d3703c4b0ef7109839006c3360d7cea9d7edade49b2d03047175dbd630685eda27c8f56ace9c9801651389b1ed4d966369016a267c4f726798d026099a58c1015db4dacf3422ae229aa132b03cfd4fdb532f86865b42d68f7408b74c336f5f77a8856488efc6abeb90b4407fb89f500e475865f5230beabc9b345b7a1fcf0ee36135e6c2625c54fabc431df04310e3ac2f5abfd45105f09993dcfc8c0a3a0727b15d67a8d67a26902a3af607328f911ff9b3d9ffd91acd93a17ede68a55bb25a7488e7dcb0b5a6a04b2ac8d9c3ce99c323025a3bb79255cc7a232c13cc1610951256118cb693527a1663d36e0f00f4b4139c16e9ef9ffa71b05254f67ea7302d3afdc3399b4169978e6be35b09c20c4a6ac90a0dc4463d3edc7af7dc9447f392195c4d8a0f07807fc5fa7b39beb69a0443ef97c6e04797ac02b93141aaf9d2d02bc0702fb97c7ca4df2ff957401d28af9faa9cf285756e268461f4d710c3c518ad7d31af2be79f8c8f0e8f3611373c3628ecf4f03ceb01c3a88957a11134036870b63307f23f0e68cfa05474dc9623b30c2c4c1150ebf5a83e9740fb53ba2e470cbf5a4d58763a0377277a95a313843ea686c203cc127904dda7d8cfbb67931d2ff690313df164968a3c9acefdda3fbdb0a5ff47d3e937150b03e28ab97db7f6987fc225f2997627eff386f3cc87f0d5fc69be99f1ccdbd56761530ec0349fc1b79bcd3a4c853e66bcc24fe6ad8b913082e36d041ebb4ac75442839dafd40a62236bdb10e6fd9917a25bcb8b0000f62be63bd5e7f66249a2161dc3f13fea53750cad588c4fc620fd38235bafcb767d0f0e6b834f94e3bf1797ee550822b651cc31903a7daf4d1346f577e747f4024be212e7974e16368a3b51d6bc7db26bc34c558ab60b4c1f0d6865f528f8dffc225fb8dd5ada82fa24b83ec5ec5cafe6fa923a04e9b472bd65690956629ee3eb887e317c97c3a386376fe3bae6724dbaf0799e6b94b2060ad84ded98be44b8968bf31544c27352c024fb7b929756464bc48391aeea597244b2e08263611fe1412a829ef4157982a2dd1507c41a6886205c707c5d508e269c98e43693e16094b82920900e85ca93810403d5034c3d0aea6b90d50c0c30dc9b1fb2ee7e412822857f4ea5471367b09d2d6b5dbc0e6ef4eade4ed92ad8455a028b21165e9486320ceab4952a5f5a5410a7c4200d6e9e33472836cdf4e6c36dbed080e5337c7a23359c064124441efaea14b9cc840f25ce4fbf45d28ef2a587faea7fa3511499a7a55d9999982e67e1155ed5c126f1bac2c8aff2f42538f8fab494851d9cfea8276a1d2eaf51972578c60d40b0b37f4eeec84783e2514d4f283aba24385cef857237f652f646cd83e9419ec2327762b940acc98cb8e3236702badef685ff0d635c3cad8e48ea2e810906899bdb3555271e2078919743de22715b599635fe98b8dd96c7817e8abf79a1b5f9b0dc9a5663acc2594da9ccdcc66220d3d9074325deb21898aa171b38130ac342fdaf64624d57b3833a33c9245273d02152e8a559181cb70fdc1ace374b910660abd1da4f1c440a139dba6efa8cd4b1f7cf144ffc84cbd4031248a310584841c3658193a42659452da960d0c7db084a17c9e49b2cb650837599286c7084fa3dfe051d00658474cba77de4686029fb0242c99841f204a94528b39775188535e1733461d96f17888b86b185b440bdc1e754a24101b1e047ab4a0c3dcd2d91f86963dee911bfb1ac1b796cbf9c8d968d6580ad32328bb7ea81ab6be5c7957584f59fa3956e16100cac6f8fe268a59be33d04d477c9e8cc577596cf4e28a2e761862348f02b44280385d83f3205530aacdfe7bdff9235547400fa7c52cfaa989501ab8d113fce8dc124616be4ccaa95ea31f0cba7c114ab36992276c7e7049ee7fb658b5b72fb0b66925d2314208d413b87221b880315b224522113e7e0a19d65a23dc0ccef25060d973116d9b0c22b05241f6146972deb76ae3b006d9183b770c323fbd127999f52f9b7256d56fe3a084297adcca1561d94f242a1ca323ec79f2b05e5db4b61e483bc460cd1cdea56cd01e6508cbe48d96348a3053d91f6ac0d8a298349858dd8539e380c993a2a7bc512e408c7177e86c5af6eeae386da1201f2d570504f205dee8d8e2c0e8b03842dd83b82b505e54280106c992069f174dd57194f5e966011049f0f4329c639b67e4a867d67f4830f5183ebb20e322878b998e45e0bad92de5c81ddb07670581b52859eb7826d004ecb50b39a1ee35b81a6ddff1afc6266402df5ae3662c072cee569e453d00929cb65b0a0d92059b3b6734cad31e310c06a12cd39e092dfc170026b33fda2821c624eae3b8c3409a8db596a66c603782ee44c17e796af2a1db7b5395cd368c9a9e3f30448417bc863dd3e3ec38fd5449bda3748e1c9a1b6d5087c4ae2342c56d1078c2c4a8568890e258d2c0e76fc439d26f034b13474a7c5c9289b18b9330410b267d5a3be61045fbe29345b935016a9ca12af890bc0af231c058698f99c7d134924e71467017c0c5bae18a5e4f08a45199ce27a40315f819d1d6715fe0a402738c7af2fa3f87d8fb3b924159f240e48959257a3cd8b23a2b77fd032cdaab95aefb651a1c37f49306e4eb8253013e74f2d1428fd9bac3076d2e7516656bbe1fe27d673166eafed6d57cbca0aebc1ba18efcac61c59fe94834b856e8bac4b16514f6b7a0601fd9ea57df250e76c138acff8955642b1a38df556dc5908776864e8ee28fe4bcf183fd3b7576e02225afef80b228ceb36c3bb9fdc9023a71a6f24e5e2a0e908b382e8cb5a2c024adf03cc33ec0d802e86a0001c9df813e1c8d82f036cf2b798f3ccf7f7ef02056c6d02caa2ad565d40ccd1d21cf42b71b81b2ef0ff2cf4d8b4fd25a75001db42577ffbd668b82892971bad11600d73c11df18c1776db7d0ec5067662af81e73416cee6547c950709b111d5707275b719a43a7b09710622b3dfeb8fb45e5ab2724b2993943205056005a105adcf62cbc57d1186b6d7f9a1ed6debb6eee76f6dbf7d6b1b5d702e9ebfe1791cef6d2e8fa7f373e7fc8eceb7c291d419edb71e145b9f23922c760b7febc9dc7a127feba7e78198d9963dc07d9aadb5368b40b4ed6f997bb2843c92b0b3c127ed664717dc9359fb8dfb9c496bb53cba00c72449df2369daf7bda67dfa3597fd9b4742b279a4b1f538cffde6c211431149dbb4449245ee3c71c89f23aac006cd3dcddae4f6dd536f453776e00197447bf7b6fdbced560395862a8d25da342b2b2bab27db6cbcf6ed48d20a03671727c9ba6eb09927f2536f5390e2b0f09fe9010155d81cf2874d0d5c4f9f8e248bad93bd0babc3e9e8e4bc1d7f7cb976d0f36f602ea8db2775bccf461759276f1d161e8ee0d4bb0691e408bb84cd00ba6f08db47f27e36e48204df49ba9fdbc8fb174442de7762073c17f649107c9a3f7b9ef7484442de88b47d1e3f7b9dd145ce98a47bfba038f72726f1dee5bd8b1b37d6d811eac6a4ee73d77d4642eac6179b9021507aecf8400d4d42333f52f7dc236da3f69ff9de237163f821f8096fdc72cee3d5e3547c3bebad701c4eaca0068d9f0747a4dbe6c998e7e301f0a3b0790a8129a4fd3842fda9afc50ddc6d33865061433499b325b3cde4eb8a1aa9ed57d2746216eded2a8cb3d65afb17cbaaa87409464684fd2be2b8e939673f8db27f4124947d968d46d953319b5074e7751fc96aa58eae2cda3ea54b53032aba3efd262d7fc1386f01df12bbb711a9cfdc5a28a6b6c424fa3dd12fd5ef96ddb6f316d01a3b127cb7de8a555facfc4c91129311282a545ac00861b1ea3e6ae239550dcac6ddbda5bbbe97e6687bdf25c0a7486f741b5d44932e553d0ff0734077f636730a80ec9e7a3fbd0498b0bb5751a96a90f7fede48d604dcd1a72a8c04ba496a459ac419ce76f46d752aa7aab049ef6d659a093b1b47af125d4b8559f7a24997aaa2f52ee51058cb51fffae2d4408b348769d360b91456cbfdcb7617b313eef8e0681778a35d60055f4e77a4e7e6e1791555455dc1f33dbfc2e7f5ffe38824cebbae2061b5f1d79d9d77fdf89cab738974bf48f75bf0e38b16cc71a9f184f86f4189f1b99cee73bc15167c8eb7e23f677cbde9e72a708160c4580971c57d9deb4592eed773d35b81c1733a9d4b893ee5523868d22e2da9f0ef167c890fc093f60803c702c0935669fb7b559557799557fd07008300bc8faba5fff5fa9e57ce5edff33daf7108748d62cc8767e7439df70f80e818880e00d1a754986fde01feebbbc4bfe0029d27c1ee9d9d70e75dd8ec9d9d6f7da68377c20b767ee7c721d085f31ac7ffd605e3387e05ffd2ae1f2f007170c6210dba46f12d2811d3c2c525d22fa048c188e911a9d58e48437f1d91625598678f56cd0cfc5d551a4585f97f4f521315e6d7aba04b7f63acc25c7b925691b156ab5571dee6b5bbcd989b4a380f0e578ec0a2f54a59e1386e7a4e5d45c5185fa714632dcb30ce6a7ebf5869fc2f16b31efc5469532a9b9274be8bb5feb55d851da184e6cb9eb3d65b27add35f855bac83be8980b66d5a97a9b5d695aca6699936dadc28a0c2b45b8b3d9c617b2fa697da3539e79cb9dcba6151617a6b1a2c4fb7f6da1d23b83b0815c6c1dc3967f4e2ebd65eeb5361184eee464585e9fb39df5b6f86750e4315d5edb5d5ddd6aa1b0b541807b37ea7697e85db346edbb62cbb99e66a6e5a4cb74e6bf54aa37ceacd0696064aa9a5f5edcf9b106a7d5bdd8e23d4babd5a6dadd427a55eed086e9dd6ea95c2108621ce32bf495161bac26cd5390c2fbed66f941aee1a538826c499a4b319c9bc5f1596f3463e1de99c63f62a9cd31596c70e4fd76c121ca5b5ba5b7b5f9f0d3d47f2dbf43f253d47ac829e7f5b5eed9cb3dbd53aff3c4ea734ef39c91276a65b113158863769ad5beb3e9beecc0caefb0bb733c8bae39a7d499ad2dc81f027dcfd9f75d1a7c23cb7c299c17cebfff1d0f47d049b73ced8662277c5397196534055adb53e6c572d748acbae9f62c50433c1446db0670a14e69c185f8c6f9e025ad2f42becad2561df0d4db9f163d2f43f1adf02459ee2429f3d514c0db29f0f247aad7ff39323adbdf9ea9144d5b7473710a5602750d41ffad3a625e6c4d09efff73931740c5fc7cea533b1bfaa626a301f8602c8a706753f2fb7bd0ffde50d74ccbd155c1e5bbcb428a0c2a88dd6c69c18bad5f277ef1dc861da676d7bedfd3be8b8f76e6c91626fdc144561b153f71a2cac273af0ae9e40e13ff7c1313a7ba1a2823e68508d26291365aa3f7aeaa54a21f8f4ed8e624e0c7dbf83094c0db8bffffdd02058a006755fb7bf5fc28b1a44b6806daa801a94fded46726af15664dd3882a5513383bb51a69c189aa44c1e02d1e4bc0a61844b9d8cd420b28565aa413f6a10fefbb429050a15378f2de654feaa8f06ca542a5be26cf7d1d0d529ad94daaff3721de379e79c1f5a8cb1cd6e6462c7439e61328f807196e12cc330eea391499f3d339a65d7c33d270773a31042317ec2dd5731334861edb5f6a2a8c02b0513b0170d3a7db86f87a67f9fcecf5e41b1ebafc8e6ccd933f1efaccfa1d8e494c2188f53b4a2add6a2c8f46ae138ee2bf062923e1ba8c25e958ef7a5e9db2bb648b1e71c676d31a7769665d9b5f37dfa4743d3272d99bf209abe0f1c97dd9f94ccf65e7baf05e13b41d3b7ffdd0785507c3f4ba5566f81e743d2640cc60b2a74ff4513fb30322b21cf73ded0cf5b457df9c05ca427a6901425015649834a59c3aaac21a5b411559ee0f41d55952730954960ca24a832a946992455edc539572013295ed5d631576cad95e167d6fa0b7d72ce5952ce39bfb6ba36d41f0d269bd4ff030d964b8919a811f010b5444c12395078fa40991b16c040d1f185480c1b5ef0616fcc289a81a3cccd0eba05c90b120aca641b1e5609290aa94a193400d8b3a43163461926d656d85beb4a427b67adadee835394942a3168cae4f0c5c8a93452521ae12865209134c300c2a0097243912022b812b23636a94ba85a0ea926bedecc096a6445998189086e10aa27840fcb19be685e3020ac5d271158942879cac1851774d8a423ae3695c2978655e108eb280dce91f288a9345ae242e3c2729b82b535881cb1d6dacc06d25289c4a34cce2e3436973244c09532a4c8f0b249fd466244c462a19930d4f647634f2c255baa24110485274b3336d192222b2f3f6a582991119a3fc12bd795e541a3816172ce39cfd8c1862f9a4aceb9d5c28d910f26364768436c4b9aa6691a6744838cb2e8c698b3a7955933ef8d97218c102c4372945c90c4683ce49c20d700c49a336b8c82d04b24c0820f5d60c892858b0ef6286b4896134dd334ed2a11e1a862e3e9ca88a41c54ac51d652d60e3119cfd0b28eb24e10938180817b96317028f240f056eb2ff4c959cee3cc5392b29c731923cace39bb4ea05d407c650c20bbdbb38c8163bffd11f321160bc784a195b1b5922b1cbe8c00c911205fb838b91115c4192a24a1186162b13061c28460c2b0871e7a78bd28ed42b5ff170c8807adf7bca286086d24b3732681759900a646cbc67b5e5183c3263fa60375916006c61853b94a50c4d5456b43488595763c18d38a5d22a02e275d6f58e563b86e4b93b3a68d39d3795024596cf075746cf81ced763eefe49dbc9377f2ce93b09d75b276f8dc3692766fbeadef9c311e39eead1dc9ed4116bb1329d77a17971b49d8d9dc6fbf8da4fd5a2bccf0b5fe1acca1e7ac30a7ba3a059c4a264b4fa00d3d4b26502593a6253f943c814a7a964c8aca2550e512ac5249941a3561a8c6aab9267286463b119b0c8bd075cfd2a9ccc6b726011433a1c669080ac6e96ad707b2a28f1310466762d966b19c7af88e70caa2ffca0dd7a1fe422cff99ffba05a6fab07fc18e38f9cf53ad746a4221d3abcf08adf72c9d969c6a644924494a72b4c98fe51a2c15c638c7b84420b1f29f8931c648905c2131c2cc97cfb22c33b2748d30ddbbddc8c03835b946b9a93472e423e23353a64c194b86cc2d7244c610457e240d21445944061124aee80784def62c895c590e88586541c0fe35c4872126d8e4c76a5885f387291c0c91aa3f9af66dac443564cbf6a10231260cc78cb1a109c2b029861960a266e43dcba6a7262546609a8e1c8169226204464c938e26a512846109aefe421f2fd6da3ce348103121be75c7b4a613ca261ba590204a2160bcd8a41bb06c8ca0ca193165c618118244c8122143b2643494685c59e14b1822a4d8b04584e810e2234b17dfb314d283101e646811d24586966ccf52880e5d826801e28317fca3c88da22948f49892431591206582a0c97498457f5a5ba32041042193a58b102a5bdbb314f2e4dbf2ed0024cc9116205f666801b28586962e367b9640aeec6dcf1208151d74d0e1ea60813cedb965d7fa550a5483e69ef567eafa339f7ced1b3bb1fdd4d7c42c624a664fcbcd1ae20ce7c755ab55fb6828590081cfb06bfd0ff63e15b6030b54c2100847c1ee37862b56b41e1a904ac304891e669cae2c101f417c2491d2693a34cdfee891e5c34666a16993faed0e59ceb29c03051d6659c9c28c9d6559966559f655d1ad3d4b1f58574a1f42ecbb67e9e3070f70b90655ea9452a24a29168dc3318096a809c111274c6a8aa0842c0b593e2b9a0ddc977fbd8677d89669cbb65ace403e7ca03eaab6deb3f42155c307c337854c62c722184de637196ad1627e1d33b0e9c3a844b41e20cd3682f11745632cce1d36fea4f0d0863cd1a223cc9a2531640163997ae8d083074dd3344d0bc18dadc707788060931fcb8ae9d04a96a2692de49c3d141610e54697f2cbd39692470f1d3d9aa4b498b27adc907205f6af1792f038faae944c544a1e377c567cc73cc28a8c2c5047dc0093249457d8f9f50f4c417c52be2b258f209bdbb3e4a16309375f9f0c9aacb4869fc0264cffe9f9c0b15715fa091f4dc0ef53a8deb7ff02c608038fb31680a454367dc78fa7541875fb78ec710085f57c80bf5e1dc1d13de9fdfa1ff868c2fd6aeb67d958c7fb3d2ca4eea8fd6756f96fc0c507f6ef7fe07f9fc5fde97dd0f3c135c1fe1d7bf0df1e16990b16799cfef38049bf87c5f49f1744423084a617811e3cb298fe3327f0c28e75ccfe43290ceb76899b150a1428502e2d7714953b9686e066552a55b832f2f421d1e4bff6f55f9f38c5cf88de7eeeede9675bf643f633d53c0f86a86773663d4d58240c631f91584c47520d1d484717ec59e608b345cb9a76cd60c974a83fad2d9921d966cf324766ed96d8d49f935229aab431f541e5a30250290d51a344082b3274840942bb372e00440b388a484a01992c9b43a94a690b569a52c2b2b56fc8879f86fd2b470c312858c4152b39cb3973925475387320b191a369460e1d9bd4cf84e38c0c1c46187d4d9f9312879a6df72c711c3155e2a052e2d0522e51b1386096b321c15201500264d13970f3c51fa6684b25ac4a859b35a806d5c763c619679c7176c76e6bd050fd2c6719c6f7927663b7a4fffdfad545b687b0bf0844bbfe38da1eb859ad7b200cabfd84bc5ef7b96badd1b7c2e432718e24fd72e88c3ff62571293a869b2f32d67d26762309db99e8e5c4e832ac52cec7fbeeeb7b22f556c4aa0cdc7ce1fb599665599665d9cc2617727219a748a6d8f3ebacb3ce3a6b0cc5a7436f4f4e2a2d9bb41d50bd014b9ba89dc1b18851b1456cd30cc4f61c87b2cf5cc6713e9bfbb006e13cc771cfe17c0f8ae46f10e773d12766fd2173d63a0cff7623d9c24417b3c164ac1b495abbd192a102c868095918fec360b112fcc75ab98e4e368ed692696162774fb630b16d7eeb9eb49bc45a0c6706b4fb219bee4bf0133bf3875a92a620e616263c4b861aa0b364ec95254305802f51cbc72ae10d6118b321167b9c319a9c31b68f73facca240b06071c7f2330718b84cb1aa5a010a06ab1ac01ca6a830450c7dcac1db9fdaf55f409e9d7234a5a886bbbb3b16c2f77175ed3f22d0af9f63435777b74f5a291a52aea2606dfb9ffd9752b4edcff14904a2ea218068d3b74736c786f6afba8908f7c93b72c0824d9f5233776edbb66ddbb679a069dba6e59ff34520da7956f1f37addfd6bd6e8b66ddbb66d4f7adddb93f57e9645926e9fadfde9693623ef8b40b4ada8d1cc0714ab28366c7216edfa1b94506a80563439c180704fd497720bc2a0f1063368f2bffa5ba7af0aab0fcea0ebcf6aa98453c2500ad5fa0b7db29c6551636844b155c2a82c9bd4ef43d3b49c35254dd35a484111daf6e404da132f4fb03ca1d23d8172ed594649a500ace2640a14169086f00993a6699ad663c3cc931b63d5eb49e7851de00b453941e070f19cd4e0840a8452256a69efec594625f176e0e6cbbe6229f6cb76df3c31ab9c51ea62040aaa465046a8becf3cf1606ca0a064c38d13a054d11dbc8a0df0a723e721e722573bcfbfd671a87e8f8f1e106da24dabd8e3417dfa0df021ff21fbef967af59daee1e68b9ce0949e9b7e50d6bac25c67cf5e93c410a51455a34a148da81860140c42890ac328f77ac1284b67f8dc13985660670fd3de5e0b761e5fe0fb531f44023af1221764a0e182111ea50b4a4c6011db421239e72ce75cd6235ea03aae7962ce9e4d1f5c0205e5020d7b7a4c72ce198d9c73939d3394d4ce23998144c02525f62c5be0a1852c9bd4ffe49aa830bfb1247a02bd2accafb5f6864ff4a4f37d4ccc482c061ea9967e96ef0b94528c83b081d1c4ad07f59de9f50287d4a0990030c865523669b2f503dc75af7fc739bdd6206bbd1aa0cef9737a25022e81298047a0118803c401ca008b7420a929683548502687233288014208336972944564cd8d263ab28aacc159176759cb13ec01f6c8a6141685b2aa176778e23ba5b0289455bd764ad539a5b0ea047b68fad36ad61265aa09e1734ebff75e7aefb573ba0562a95750062843533adde7b452384caffb749feed3dda7fb0465b84ff77941a47befeddca7fbcc6e92399d3a1e5dd8f87b18ffb154ce9c299fc46000d4f15482271ed6d8244f5e9eb4d0ff170c28673967a00a3aef593ed900aef01402d8bff09ee553954d7eac9a7952e2c3c11d4f3bf664b286c71a263ff0580332e1ec5932d9c2444a09375f95fe5b30861ee9dc53a8a66ae7d6de8b716673f64a73d62ec65996b386b39c356ddbb84ecb9db66d1cd7751ed7759ed76ad978ad968d8dd63769b0b8504d5989a19ac25acb46eb9b1ba7daf5717c0ac79d767d971bf9ecf779a5df951056b456776b2fadd5dddaabbb1b1c1c97ebfb703ad7f781604e8e0e98a313863b3a61b8b3c3c3d3e3637d7cbc521fdfe1e1e9e9f1f1a920aa842d51c22b2dc1d3f5f8b84f052e9670a5129d8b1608f1f6df2bfdfa545cb44ca951156a294dfd518bd26071a19ab212433525e5146ad7b74ab406f5afd32a027672890039ab36add5ddda9b73f6c92f8ee30517bc5e00c0c0628081578a41bec171b9be0f04732ec82d7f5addadbd1767f6629c65396b9bdd36af74dbb2ac69dbc6719de779a59eb7715de779ad96f65a36365adfdce0b8accbe595ba5cfa0607c7e5fa3e30c7e6e478a53939608e8e4e18eeecf0f4d89e1eafb4a7e77391f4d9f6733c0ee8e672743c0c3b17777c782c0f8f57cac3139811a854cdf924a96434250001a000a316000018100807c3e1702848424d13640f14000e63863a7252321506c391400ca32888812806421808000803186488515241734a00e096f866db22a988182713f982baca44596c428129db6a7d5b756b109c6ae3441da7114123895505c2a92223c211f88eecfcfb7cac0d63bc27603d32652858679321d13f8a5eeff2be188de8dca4dfb3935b007276702483e4b7aec4ddb618d7e8a7a0ec438bf3890ceb4adf9437fec8f6189e1339585c498468e4960bdb82c5c5485648f5731677759bf7ccd36d11a2742d749e8dedaa7fdf57c8ae854d41a62c03271d6b212f8d26553bd2b0699e701ebb70fbbc392a740b8da647c3e6d8db76dd2d3e2db9ecd93fe3d9436616ea128a84326d6560095244db71e233d2e759e82c1b03c0275144037237a4e7536e584b0396047556ca507151e224bb80b41950300d71a0a553fc0a61fcd2e4fa56fbf709a9155e0215952072425d0e234055d3cbc94b67509c76543aaccef270e06676ea8fcc95087573b80fb86e025be1bb3eb48d5794bf197e9f3403bee1f91e9afac72c2bbe3d196b6ec660e371aec0b63d3a81f04bf1a5fa33bd7101d6b3b92befc5fc9a015781beaafa3c6f70427e585cea1ed546336dcf24059667cc89d6b02942e890b476afd4a860737a75c25d46662e5a389d0b728cc6c243840fd852180854e7d66a9aa94168ad4fb440a59045567f8cd27db4ec176bd036805a329da1c2932e4c6f741a288b74cc1041d8a39e2d51bd4c886ef212d03f4f885a9718b803d63e9b0b83de61c005c49e3ccd954c8d24f05ec7875caec6c888485036d90e062591ddf5afc7895180d0826299ac28d5a561e612395b304b7396a412693c66ac26c00e83f2d3ce4482ea145d6795bb3edf486077c6603e0c06b9791b535617a81214dd63a61133ecec1a4855b2ead7cfdfdf7ffe5f3ad402630c80f29ff1f674701be8514a9a036449760d2d1db68f8dc62679e088922c422ab77015f84faa9d3bf44d23a901e6469206841ba556b6633513cef6e64f981a368b4a48d5165832b557659e1eb52d131938a6a1bc94b0e53539b3fe77372f6ff06367e1f97b65e132a4656c98e0732e86634d650c7455bc0affea661cd60a8a4b9a3b6ec25ec8c5e0558db9a6b20016453480d14d201d1e314d0012fb01c1891a8a948c28356a1e4d770ec360aa74cade21ccb1a72c02b73c04fba139e26a4ebeac1b35bddb6c776293b7b99f14e31a049e24d4f44624795eb40e293bc86eac0ee952cb72c4476a19e9fe2f290362f2bba15a660a1a1d536ff469ec9ff6fa1f4002cbc173e22fcb36990110d43cb34557126a658fa82b2952892d2482768824e81da9a7817bb529751c0babd835ba38835b17f657f946fa28313d1129015636db8d47a3e30a429a5b2189c33d6aaebf9adc899423612cd09ec4ae2d25834201c10d90a0258038a29ded1997bab59191504f09361f0e48a068bec22e59fd04ae803467f4cac05298a328ea06ef436a0b0f35e8871d1b352a9978a5c8e317b8667bfb47e310b5ba6c946c07ac3a9e69898c27437ee0997fa5e543a92ad6a2c77887cfd1efa03ed9ef71f03e4be1a30516fe74f461dbfc28a696166ba29cacfd26876521283f3b491b05967f78abdc3be94d7ac258c006c0ea1f06933ad9010dc98476f581d2d6bea27d0533b188de3d1844e912e367114881be2b8edd1acabbc104e3848c77ddbf47c52953badd953336a10fa8b664c3577132a04d1e332048838ef2d5316b08d20d43181b6cf31019d0946e98f256291802242425b176eb7a47ce603302ca19d4904053a336817e2a32b2dca09306ea297f7f286c502c792d59165e2202eba0804dd99d0b09bc740c224221c8234f88d44dc2424405eaed5e7b2156157d705b6660ac25a84e65b76da1b73a987a6d2ee3ab03942cf164da7fb2d031da74d4e817129f8f797555fabb884fdf7eb7b3474dfe094bf1cb076e24f191459c21b84f8f32584087986eb99b3766f6f3da10d5990fcdb88a8b25825175ea7e1b9b1848ef1ea8d7e426dba05991872585471d33ae4a3a6f6665361a1072e8d5c2770843b541878be0451db41c9cd3c53bda39010b555026eb19a1a40904b60fa3aa9ad643e5e2e965ba43aea3aa57e91abd051308f7fe9e910e55343c52ab1836b659fadd331d84579995d423f29a20a0abbbd098e0461e0c491f8ba186eb45338ffe7304ab8d00d525224ef12c52eab6802c45d869352ffb6052918f07d496ec7838706ab7cb35582df0173f9f711de37aff6ffcb8b9cdccc9c4717759a9478a19bd556d204566e6fc120a836f16d20bff00c91c98f9411f1a839adb3e2ad55e5637d629c50c225fe1dc925da9c5a9de50e2eb9ad13857ee25b0ea98b16bc3fff179c74e378684d8fd322d40478138d361ca77e0e1af715cdced5ba89732e29c18b201a17c24aea5ffadf945c807b57bd39d9df7181a5ebc0bbfe01db536dfc0c10d2cff3d6827d41032e2115cc178557152b6d51e429fbfa80bf414a18235f7a04ef97efaa2a3c29d276c3733f6b053b45c39848ea30f34f232c2ad708982bc45131dea7e97c8eed5ed85cb61bf83ab748cd1803cf491ceb29939e3a2b62039a669b963943b7f4568d2dfccb8ec38c341d7ea2f34db37fa14e34706f88201bed465b09234435e493a784fd154782776640d9863b1331e31e603db93be5fe1db778b7ed9f99c654308a3fc81e7de678efa86f6e48289d5547b8959e500e6d678c5888ad69fd92dc6bd053b0822aec1469b8ab34fcb878bee6e9387d15557ccd0dcdba8c8c268b099ea42eba9f105e3f8e420999e5f57559d8e27172f26354a2588e0d0e4d3d9104bab01f52f2f6d3d82fc45e993ec62a564483800e206c6fca53732faca4224223340cb07968c871d51ebd7631eda0e0477c5ff949808826c687c2887c37069e6056472078c5d942dc6c947ca885f822546f926bad04439eaf2eeb08f1ca4120fa4b7bad16978391a47fc0e7926e828e9d86c9cc583d38c6fcd0d652ebff04aaf4858b5dfe6045f1ae10c9847f3157e23ed42cb84a23758511f61e95c18ef08eb4c7db1d7de4df7d7a9d2eb5d601423bfc8d5a36b42cc5d367da93962c43af1bf501a1a962131f90c1e4e165a315d1caac1a5e675d5cb35bf1b38ca6e405f979ee1f45e0e60465a39f9deebf6c381d0803b5663dd79e833299fb04dea0750e9593f3b1d72dc7ab9aa6da08498306814013bcadc1f62b6aac7f09d337f59a1b4f0d71de7fcf42b5be2f69b71560cb62d7e2608ddb7fa8c45e19e41e173072d7cfe53f3f5c4ecce007ef3c21db90666d041975b1d7bdad38721d819a4f369358d7ed67210523f9b3ce151be0d595b82a0dfa74a558073315db16303ecdaf2863827a28570688a89e6abd2d85ac9ee4efa82b8fb69a9e52320b09c1088b5fafae3a36b2c0a37003d2b3a3e7f2912b390bec2a7610158645fc767eba96d66ad7b67fa888b6fd523626c23bef26a67a4893dad0a99e21a1c46fc408e9904a895840717a5a02d280bc8f7f43adcf5d9652412bfb7d232b620c07074537e9248e4375a56b4b6364518e1307e417b93ad15051934773cea0e3911be04058c0fae18e954ba6b391742cd0285d2bf1d19052f8ef4b5d258950aa985e42aa553e704fa293b52a3a3ec8f9cabf29368c474bf683b658de27ebd49f2afed47cda2c81aa1507e0d904518cadabe00c766b2edcd2060bdd67e624941863c16669fc66d836811eb4a5a27821ce801a0f12b1c3e4c315593e56c9260821ba074895cc1b47223646106c0ce7cb2b7cbbf50d935ab550ac6c553ef3d56186627d3da5482fb986b16b404a105d841052c3074f849e551f408371da23e8f5d0755b122b3ce72a624f5b9fdba4711d803e23fa612715c0b9ebef00bf428c0e19ad37d9964ac68424f263a228aad55425d33c6307e0247c461833a7a702c03839622a62d29b84d61d0d71fa8a7bf915a80c808820e97a8c6e595d6a969449b2ef45f1c93c3ada2e2094ba3dbd66e9a4a28facfb71595965b4eeded2f187252c972cbdaae491edd06c0a16f918ad69b2a2535b8b447db704927d47d50c7e7beb23aa514c226e0302fbdd168e694f2c607445be4c685f5638af9c2cd01f5bc92e24fd571c333c7167a26b8855b6d358ed75bbb98e4a951e5346a9cabdcefc6c113c289f2a6a8710504d801b69309b65c374acbad6bf6b35bfb478b73d6944bb6204f9ed9d4882c8ec6d20d4e8341e25c78d72e8747b4aa5e1e1dab9f7755742cdeba70c581ec7c8a2ec7885aea1844d7642de55769f664d453ed57c0715748021d789ae7efe1568c42170feb00e0188fcd6bf1e052d94c616c07b8904bf9ca45278f4a4adeb6ab3e9b64cb0990eb4f5d6557af537f8e2dee070b1ff25a6634bd81bf569738b8733f1030884c500e9ed80317aef4e67fe84e9f6704d2f0029b8b9eda11635244dcc9988d8cf6d1302a69cd0c161c8969888a4f5b6d87c348cc1ae265b535b2c20fa9d54b9d8e6fb00dd5c08d6c6bc0256b4ca25fb37213951083266e1c7fff878de8be0abaac06b76e607e692847e424c92babc63f5d544871e295889a1abce1cd147d42107702e1cb5ff632fc20bb778069b4c90bb4048646392b06adbc38f6eb31a7baf70d97a221586306fae03f2a1650a155af4ae3ba2b91b6d6fa931ba9ebb3fb55ea0c9503e228065c0d9c31923b5e85ed53a98c5fd4c48b10cdc85647a2d0c88cb61edded1cd1fee8bacf5d6670fd1e7f8ab7df9d666c9ac6aa000449deb47eaae85f6fd7fc4cdba31198684b90ebbe8bbfdfaaeebecf96235711893cdde4aea8835807d8232567be4e830f99f412742fefaa74bc0d34b81fc79915471e802ee42c936fba4cf21fb05a29987b3f2da0fdc8839d8e283204b76c8d2ad5c04784a96c5a6ec6e8525a28c71995cc9dc16de751c28419d20d494978fa6574cf99ef0e40b1ae74037fd7d068bb9f62ed0a461f4bd64282b5ec238bc603530318e521de16f0cb3dca697e76a5c80311ca382e5c643d827091ce1d0939898095fea1c0eca199fac2e489a18f6175a6d59b1f9cf35fa04b67d1b806444242afd38d7a84c3f9bfb90c5195dd00ae6bdca50cce19c5cc5e82d8e585a648c67493dcd54848249672a394fcf638bba2272f5af8a2bfd1681c323f947b1bd505c9de183e24f4352d6c947d44493b6634bc136e8fc8e34c4e5140209dc920b056352ff246a78fdaa29f882fe59a7858abe24b295f9cdeccda90b4ad8cb1d089be719a2e013be30f3502319512cb2e8f29a64e975d2f91359180140dfd21d26149acd903beac2d211e4a6baa55e7d6d9a9f259b1793a836da8072e16f8207d4d7741413c3aadf46d128586e1e4e61bf3850fc98ba4543aa21027fe365b26ff429b84aa35a0a663b147717159ae3a9e0d44bc93bf8b2e21160d4e7862385008ed4161567a6b7d078115771630a9720a18265e68f643d6b6e159f95929efc9e0f58239018403ccd02a488835e0a6de4ef24ab9c75a54a263663a6088a946c9fff745028e4bce5220bc6f9f9e5768c86e3fdcaa1552f319525d0cd909f30ced014011fa6c5c769dc406524537005e2541fe57e08579a2f171ca6f6b65edbd688d5ef0158bf7128d84802b419e6f01c90846f816cd484306d05a87a01310f80b157736d670e0f039a5ee5583599b46c85e79d167b31d2d93b21763d0446642460e338d457be9685a0050253381273144f8d60c6042fa07e24362634d2328b08b649986e0788ae6811245fe67ba1ce763d919ba2f6b298f76933bb40ed427af998df4597437b3e7fb66d526a2d939dca2172b2fd408c42d2911a4c8f63c402fe0a9cbab3ec4957a7f16b77835012cc3db795bcb9525b0cb8a232a9b1ab58eb2d06f26025919be4fc1ccb705cd2042e191bc7014d35867d1e86c893a0c2e0a6f745503b4677bfa746a68ece4cdb6f6cd287ac0bfb04abf34e81f900135b5bc3c8b05d6087601c08450bc793d61f179795a6f5e11ba80e575a7523d58e63aaf7dd6e3f522ae27d847787d2c85552ccec079f1abdf4d84b212f30ffefb10495ce0633c9ec82d66b988f5ef0f8f8ca5f0a4032034b10acdd59137651d358f6a6d5d56321acd42ecc06a6aada4cda44d29bbe6bc96521ca999f880761277bdbb6629928b99c1a176525c4af72ca1b5b648f73da3fa5669634455c4b96e81bc0e58222ee6aef648fafe40ad221e672f045c1905a4640483175ab3e6be0e7accdc4ffff5d0696563f806c4296dd86be00ba981177fcf1c18ee8078e9cbcd9e73293368fa8aa51244c4e500d3fb2e5dd8acd2f17387ff6ca4cac8482b968fa71eafc3788feb271246192778a75c163444b6be67821108abebe58ada1afa34d45281dba2e4697499d28e2e42a671e3a8ee596aa594c6efa4ada868f574df125a1d8b746df1cbd3bbc546b9696800dd04e969b02af6c5a402c27e47d738710eb589a2dc11112ad5a7c139c4ecf2dfb311bfa322fad1147c86c4b278b10e89d8c3c2ab577d93157c266cb26a59d3836a404b53384d7bc6f0193d1356c69756e832932f4d1e7a7eecb3348015611831763d4d1b8237471a169b526504d879b8a3a135b46751a69a34e30c901276cb1f22f70d15f78064c640a04ee796788a54fe94b23338621ede770c9cee45c316bd9cfefd8762679671d081ad91f972ba97fe5f320c4d86533eb59086e9a96bea5164b40690dd992121387494ee63976b8ed311907b04e8b5ec95709dfe5bcaf66699ced6fe225df78caa17900b1f4355fcf51a232eeec0786736308311bcc52661e303d0a20c9d9a91b8311d990dad633cf74f9abfd88ebc5ea028d1e8f67a61d0c0f4fd1d6c18d62246c634483102d93e5a2bcdb20a64d094b12bf9d8b7a372c64d79751d662dc732895e13478ee1c7ca3de7586317615422a312c61be26bfecd24d74ed4218ab9c3bf693ce68bff3b46e3641349821117205f3eb60e2835bb736279e6a05b31cd5c42e077800395bb044cfc8ed84e18eb180dfd9a7a2e346dccc72ab7bf41eb3f77546e329a420a8e060de82f886e33a311de5b4cd16859116cba442a30c55af572e5086ad8d798e92114a527578ea0e65a011d1ebf93e503efcf47488a473f8baeb53421480ceb9aafb1515eb9a756806007d201a6cfada7e6c9b2ff59a4e38959aee0283e4461781a6758ea5fe462c340c57a0d9833ac62c0276c554e39c17dccb0437c11c150d6c8d0d3b5d18271d84fd5fe32781d75ab8adcc8f5a3e1158ccf343276cf461689679d47b85f067c773b7a6c7f164a60bb69ad160ac6018289276bb057d895a303d0ff2d3ca3492cafe053ac1874c5646916abcd07e6c4750f55ba1858b347010b243855eacd3a007176ef27677f6fa8d7e17b14c1e4321178b4a6c3758e8c800609d63f11f7782dbb400000a95223d9ec4e2ff25b490808ad43b05496931370df22aedcd31c2d620524d2e4f375d2c5d5899671bd722160093703d293a075821f284797a48f482df8089495248eaf8527635aef48f898b0bf5cc924502670618bde6e2eb9818b08701bd070140586b32a9679328f67df3c2c3e9c2e7dda3432fa34fd6d74076989b4f12c44e02a27cbae9d2572c400802aa4c166d39220e2dab62074d198a0f6494af2bcd2540158f94d02e9525d2498b8782c03eb6e7fa46d7bfb03ee3cf163db1a6c6e723c2f3cba6b7440e29401f1ace7a9fcc47cdce1e7531d6df228d1f3985a6a98d4b0dcb3895ff8660c34be29efe2695ee93e62679765887e28466bac12a4122cdb6241530cb92bc3324cc4ea7e09094a2db1e21d643ed6b039da1d76dfbca66a970acc619f0850dee6af2852b93d4b70a64eb32781a33fc394661ab872fad6f711dc266122542648c5b87b17c52fa6ba5d0001a50211974dba1f02502c5410cb34d55896963f1f35db90b91024cd251fe3635e1c7085a4e8648235814b42c65482aa99b44ac9f48e3964f42dd8d5ef7b55840b84be139b66f1ad69c9c6936e0b8a4eadf4ef0e17c39985940ec4850a84be9e00dec589434d4215eab1e3462003e8728356eab7af647351326e875ad8806b340e43d09ffb1e1d64b637b3beb4325f1633223a2ee8fc06efa0050cac199ea1e04e3d453bffa1d4ef92e383acfe43d33677f42959cf94964749ba79f93147969c10af1f8fd53afaafbe1d65d2fd5ef393cc8b51d9e2cee064109dd5877626c14c09b172d6a4ac2c05542d4e8edf549951eec588041290fbabc4ec867da5ea070f7df7765226015d45a5ec8a7b5572bdeef8d895cc8098e9eb4deee112822502a06bbe3a22a22bc6452265530017a105da7e364194c75fe1dd1cca1337df7fab0f28814ad044d074118a7a951fea7ed3b446a1d99168e2340b314fc4edf986f3476ba2d2e63d1450e74cd336a1b1ec4ad68c4670c2d153cb8525e6d85bfd76a54544b4ff2975061d3013c3f52c8010cfeb03dc9a24755ce13a7bb7538ba61adacb259546d6710584862db7ec5f8fda4f64a86cb1b61edb0d7d11311afd0745e10d09695ead8fc2bfcc63260b8ef69ce3c650ec2573d3ec32a5644870b15a423a02298920054ac7c3ed3a6a0a2ce03ff7273d15323e5baec87b5ddedb65cefc5633d72d5f1315a573b191a372bd2bf0cbc0e09127a70d847f66d921814f807da2bdef1f49c81c0ec2f11d13fd02e8f40809afee206eba2196cb1e3984b8bbb47b5124a82e25ab3bc21f430a67654c6a14c99a3512913ad56448c0c82cd964dc6216a1baa7e08a43696d5bc0bc26585105319efaa9934dc0fed6c5a7ec6108d2c2ebaaea0c72854617f46abcaa8cdeb85e44b5de37cf76269abe0d67f69935bb79b6b87cc7a7ba013d02a83bc01f7c6df1e79a56900fa19784ef66d05852508b344b471adcdbbd6174277eb0e44ed8616c29fbe1fc1aa43e18928002a3cdd13dfe78f0f38e3d3834dfa16d2d024a052dd2f5e9c64b1eef4aa499ef70496320af935240a58defa00b938f95eb8ef8ee8ee8d3972895e83aa46447df104c89ae3706fb7a9aea845ea93e511f651d6280e3631d5fe6c54113e9435052b62914f390295caba2177de3d4ffbd0f2dba47ef5cd14cd31c7a70e8510f9880bab7b86e0ddcd71da9f74132005b77ff9e30821d7bb7916c1b5f441bea51353145a23d689917a6f18cc4a12669256265562371c9265d9a116b5d17fea3b12f8e9d3ceac73717530c81e0f3d88049fc6069ec69d53d7ee7d0b25db160f2105a187de5ae710b455bad413087ecd9e55c556ae01dee7636a6738e202d97369a01270172c86513b22e73ae7a7099f34a26f9c31bc1472383c9760dac778d2215699a8eab357a9bf0bed450148d865ea7720f2de9998965588cf87ff8ed54f4b63bf4407983459cc0029309245108427364bd8b4e6fe13bd4cbc561530805a104f8dd77faf275dd2e52414dfbc550dbf0318bbd84f19e59fa1da25a22570af5268724586bda313d3b13fde7f798449153197ac4dd4698cc85dfec4481eb19391329baaff24c6c848adfdf9943c0d930d80706831c3f7abd0089ca16c7c39ec71d8d5f2e90abdb23da2ba051f4571f50460b5b28dced97597d4da5e28b19e080d30c82646762d5cbaff04e10e98635c0d1fd2810539e62b3299cf5d246187c6cd953b9a6f5285748dc27b21bc4e49649bbba8d18e737fdee98693e460b404c7c9fc6280119fabb84e8088fba789142b3c69a96c500abaca1b709f37a3888cbb6d19d2c3b0c575c02799eb9e1b23c5a8e9274d8a0d21f09b679ead121852dc12e24b116258b7d4e885dbde7938f9f5dc2bc4a6fa1d2ea5bed70e9ad20d3d28fef966dca8a8db741d6ae5137011d1edcc5d80214412b84eb4979c47b4ca05c9f7149db8ef7f33718299f136ec898094de623c41a14b2928c46790570637be4cde945b3a6d1f4d16b344bb4a64a14eb37f8c010d0e6ab57f2ddac9662d13caccf852d0eb2bc9365348d240f75401ad9433a8246973cd7b1a585aa4c3172988f7c6fa408c4c240f76a9702d06b9ebf75452c8848bbc73c8507ecbf1b0f69c13fde949184881e318eec500aede9bc96dbdca4f8b478221977b318f8e045f5776025f5d49b931921cfbf2081d434716afd2abe4d3aa5bd125541d5a966968c66b7662351083cd5b035425b78439bd7c82d8dcbc27a4020919eea939f06e9751879691149b738118f2b57dfe32730dd3738934eea90524eb8bdc437b8a2a1eb155bdf98060057f9ae362295676e6f926d84f44821aba308a6297f1a087a1c4b0c838bd83360f1568b2ba39f6d1b503111408d924b30345bea0ce7a3b5c51b7c897ab52a55908e05f5d4cf9773ec0ef2cd923d6211a03c06b220a58483ad620e67063cd82a337833fb991803ddea0a94dde0d66398b827a23a97cbc4cf41d351c7c3f593e5990cd91ab2fad84748de352f38113a3780774d421ed45b260f7278d87b707c5e940c8a5c0195663468df0fb4fb434d2c5022263081447598701d4c7d5218d464ec1837c5c18ef75724d94654d2cb2156587304785e4b17c0c5ec81ce2fd84d7dfc4c61ad4a2812a1b85f0ab5d002514a57cd3d09524f47f971623fa16e231a80a01a4995a9407519f937a9eb9cf7edb6d2b82248e99efd067ed4e8cd4b8dbfa9395f5d48a9b3bc0562e6303c2f8d0617de22271f9c33a07d68ea649de3d3ee4e703bc8411026759ef84cafb46203b3df920e8f7c0371d4e135293611ca07015132a54109e678d427187dafc86cfa4df90473bfb9593b5934804a36159e8f6d57547cbfdfc97b1bbf90cc960a4fa8a3a184e29dc689a6bdf36c6413ef4b3c4799f86ac1f99c9b9f9eda35fd1b99756b37297b90baad6f64d61487ba267f68eb770a540e86e7dde37770ca867bf697d46d3e0ee80a4dedf86581c4689584495989ddc1b31ab3a05ff6821ea28eef9339f29fc99b49db43e4877950e00f3da609b98479e56b9548a0e67aa7298153f8a366c849e81b74fd19f823e7127f70744282beb370405ad4bc3dcfa8ae7134324d372aa815b6a34d24f47f4e0f64253359bc191a02a2aef8d1c0a721a0ae9afed45673dd20fe451c6c9844f11cde95f72cbf47eb30720fd9cf262f1d922f56b90476d40158a6868140d4c064d2b018af4629b725287d5da83e69b95acfbcaf6d422f1a35b6220161ca9c15c8e8e7b872a318c4a6f7f93be20b7fdb9823b281ddf3962455f8ca0aed9843957f7de5c7a71088ef3c353a6fc0661a6af3fa1ecab8086badc5ab10ba348ea54b30e09ba41e28cdf17cbb2e0b021823bb75b3b821e380c5c0b392cdd103d7f04c7e1f7abb5ccf09f327649fef4a6d3dab5b6499c4751ce22a0e92131fc6cf974b96161ad95c067a46e401230486d30b1063112233efec9763f0def53aec3ff24013834b6757a04ddff482f87f491f9d1c4ffcb4dd1c658a81dd818692c5d1f0dd5d440720b86de8ec8e0ca2e41905a61760d9c0db9f5d8eaa196da115aac4e5aeb22c6ba57ffda536cb17b2f328c2b4481658ee34facdd4bb8239f3bc3b080f7e31bb55763b7089de5f0a64b59978b9ce390878e315a03644c2ac7651b5f3cd2d565a711c81f197ff761d3f6c2ab54f3498161e4349f900d1196fb5450edd47ba3c27368430a4b05ce60ebb9d9267fa32307858def52805b0a16f35d26da92697ad9e46e301148dafc2caef6637a2dd8e84a6d2980f2f47f27688ab36a4e9c2d9b9b0620f6a193e6422f0cf964a512dbb9e41a93198c863abf8466817fde0dd08799027c32490b189afbf05f8cb0ea69cc83e987d4818061a0c17849922e4f4a6027cbc7b6da140ffcef103f4c6693292e2ec8eeb71f6616908d63b1cd3b417c9c1b30f08e9cb11f36a2203b640289f9b734fc928534e9f015528630e823cfde0a7ef9a898dd722b138881cd1030fed263e444368c3cda941195d55ec3055062047bdf29897d0db37bda68e0a7045b9361f627a5f188b39c5fb333870f38333b0230a05d092327079552a11d936091e28d7736471df2f34e317f3a1cbf8693dcdeab2ad77319833d70a1972bcd2a8097ebbfa446598569d549578a59fe2882815cfa5077c09916b09d33884ee6df684ed2a535e6d496bcedd06418619f7ac8c74eb6fb607c64bb84388522bcb22f26f53f491f3a647a1cd9932b6d26e978df0bf23b0b4ad23790e0eb407f3a201441184682bd9185489079ec11c75ca2ef474b712a1fbf8fc031e4dc0fa0a2b94acb46ceb46292c0eddbe742bc41beecac96c19ae44f01091528708023b3a127568303c46651294b983a0aa2b455dba30a2b092f1403d2a2050d2965a47868472d19070f1ff3c02ef9c0b6ebf33a7d088939a10e807c906b848d525c1b7e3c3b9f242024e8cfd19f811b8088390e2568aea60a72f8994d041a41eb349fdf1449242180818aa0f13aca72f9418bd1304587f15d1c6aaab4d5711448f98578d8a28656ff11103215bc54db034c5bee5ccb839ce6e1c80f530259c4885a124f8f90e892edb5812789aa78bd48d5d530998477ed847d79fee38114b43f74767449fdd3b42a7b5a2857d51f5cb7c44c620592eff59e4c1c83a0f1d7e054e1bd23d18bc3a4074d1549d929b5e46acdb122c268bf3fd1105336943747d6728ac2977f8dbb2d510d12f00a1a898609c5ea986bbd9a2498e9fe12830ad09647c9f60178f594f8b7687dbdb51904430e058f44da39cec7b8de5ab8141ffe96e64a5fcc8165e91e1a7d3dbdfa200198f3bf0ebb0321bf0202dd7d1a464b2cf651ed739a0b3805d3feedf6643c1b3d679c4a6e4c79d3656f5fb3d3e0145830809b713e896d2e003c91ceab83dc8b3c844eab8646b426dd442c7dc9e73a468d79826277b1eb9e149820c5383b0d8f203de219991191eb51d76d30ea2cfa8eae09add026210a07d58266dc99a749a3e83ca046403f84de3e1455b5b0aa48d3fc4281730123a29ea2ed8b53c1585468fff44f6593c8db2b8462e96f9db5a068cac05f030d3bf219913e7360204d12771434cc1c9f7705a93650cc30869cc86ae62e8467bedcab74d192cf69e29068b9f0293df6ac9050455f0756f6d2449ac760ad137f107b65385479956529cd486b52f864f7d5a2579566c339e9e0ac202693db8ff3502021e4f79c09d7a89730bdba172c8bd24ba013f39f7930cf724588721de77d3dea8c6c93a327f8c7293c4ca8dd5876bd453e645a25238a6eed34a156aa109598b1b2eb7386fada49254b9b327c080058753eb4f357ccc295e3b48ad9fc9ee1fd69fc192489e51f514555fa76e272dd2a0aa0acccc1c05a433e391440dfe0fc6de0fa4b689eddc5ad25022827cf6b12097c2899a1a93517a5da53c009611f39d5e4a56f930ddcb270acfff75c3edb64f5ff9d99afb106ae1d67b518bb3c3789d88404814eed511406ee098229adf4c1e3b9b83f37e11f0dfbb9df4c481570fb3c711a1285ff303080e0538292c22a2810df3f2226f04cbbede82e8691f5e8f75122df1134bd9cce73942afb5a84b33ae3ff9262e3f5bdef2a5dd0eb8786452222961de2869cc5432334b642135ba2481675b02551546901a5dc41b16902b608c5fcb398184ee04bf495ade9636918069a12e175d4d1df4c2348dc3e961f64adef5ef355c6074f113b0187cae6ca6349dad0398965afb18bf121ad0e1fb8694a5834ea6b6436b00ccb5dd1f2ff195ff6e07faba5eb59148b7bf6aff8cb2a518300de47b2099aec4bd0156894c680ed4a248adf0119d2f5d46f07815a8126394e6f5cf36eb44bb112022ce039b47873e5bf76f6ff1bc4ca374552474c4419df9ef5c50693accb206a30256856df36d6fe4a6c5406856f5361be228f547882dda444d2178c3aadcf7cbe3cb45c683deadd7fd285c6475106eb511518bc3932c20ca2256b7ede41ee7beb26b23869eabc68e533dcb544b5539e3a4ad40bd66790e45383bc356435444818ccd49c26e2d229272b3a45dfeac8c5bc95d9ad04bb15e7f7f262323729162d52be36838964d8256316ff596bdcae0754cb369367b6f80eb1ae04bb9df9ab88b09eb045b83f73fe7740c6fcdd9fa828a9b79f5e404d586f870bec32c91cb6fd32718509dac78843bbcd7431906a205f176bbbe8f5ba1cf636e7ff177e09ea6a1f7e109211c375ac70d7befa9cd13d062b4d98c3d8faf7eb844defa98153c11740a144dd916cff227497be59c01a3db76b957a7773ce71cc726ec76703c4e72695f701e5fdfc9851d6f38582ea5c9f34f91c54a9c7acfc2a18c6b416ac2b10a16a80e8d01a1681c0a725c4a65c11fc7990110319f14635f2b4ec6eb1a5c6688c60350a84157542554a60e337fb44cc406356c514f0c5b847c29e04836c18de66fbf8273f838f22506ed86f2d68ad3d144029213294dca552ac32fcd4153fa32145b22697540cc314d845c4d4ab002dd9090b5d2e573a6537ec0885825cb474975932ed62212660c78768d2f1fd2a8590ca58cb06c613823c06f2748dcfaee0c61f300298a1e59508dc62741c0c25e61429b1d478b6e06271215cd9000cf97930fb7e2959400c58cfab9031b3136d764e590effad6973327681b4de80295de55a825a9bc5763753f40aae2894bb6e00cc6f7a6e150fe0ab6fe1bddc4a38086d58834af5120f5553f3dab01921cc9dc76d7e6dd469e27ce76574b475c454bf3431bf13d71fe423501dccb406b05c96829ffe47baae2c88400d875f2c572f97f03b83085c5af139d663752ce122c13945528c7211c23dc3a9a7c66facd94b0696f5ede991e62bf2a3ad68a255bb168891a9503d4a61efa52fa96d3629e9eaf09d1497421d48e2cee8edf5cc2f8b66eee668aaea79c606bea12dd5998344587b7dda7316f545e3af1ad989bc006c63aad8471f956e8a62a745d322362cd9245a080cb60c94b9af8f43098916b02cc8dbdee23af1d65d42f6bf417bb9653b400f9b5cf59b3f597f033a4679cbef2455369506cc21e31ac1005470fa97988d4a717648d4c13a595129128c3009d939650211ea73a93288dfb488b82567ef394dd3c893b6bce6ad757ae14a5f76ed7497615f213257f719f2db62384d31377ed4a359f0d42a26d001584493a1226b4fa6b8037047412eeb76b727f641732cea50179ce48ca430071bdcf3ad993b795a677b882401077b545e816dff1e4a590af3c8556e842f6291dd39d90002ea8982f6b580a6fadd9cb7c9e3b83f3b03edda965d3acfcd7094f6677096749d6096a6550a1542d5b0d751732bdc7ec5e37980839f7751f7e94c4446f9dabb825aa2100a9f86afdeaeffae38f3b727d5507e25aa13bcd2e93e2cc89a0e01956513ce31ae3e462fe0ecf914fc2e58e3ff4396dc61fce73ed786091c44c95f75d640bb60dbfcea7a43273dd2c8b72621c35b662e6f773bfd5d8f37c80a200d1037b95cd67d19b43e385757404e8f947449da51da18127ba20ccb3170daae949759c0975e927a89d40cfaa29b10febc743a070bc9e91d343c08cdc9dd0aef16982d3bc6f1663a12e2585801fc7188e4b7a5e46f9d2430393292d03ab57ae4866f674e2d0225df1de49008c4ed62b320e503d6c11438aecd68ef3a6db958de476535c93db754e0564f52ecdda328206a0590cc9bbf60f4fc4d90b09352265fe593124dd6480bf42cc1fa150db566083958d25eee4742605b78754793b4c304c7630a9ddc30d84a3f50367a4e69e09362f0b3f861da17540ab69d9ba8ff758a3966eb0124030d7697d8dab35f099c8e6c44fb75527d580b5445b42e60a49dbfd9cdaef70f00148357a9d3b7f2c473fbe44a06c60132c550440d9778374dcee6ec1c8e9ae9ca104c87a0c47e866a19cc96d637c6a3828e5f0109a35650723a7f8c94cc8a0a29ed0c8a5c6216cd69088b4f7b4a7f59a8d9bf9c16ffb0d8441642a6dd191680ca830d44d71333d84d783e4a79b184d995700420b7e6d9e8b37afe0c3271ee81064bf356ad11d478d40e98dbbadfc09e615ca1e6c17615e825f6433ef713f24342205ae48326387bc8031fc859306522490efd2120af31c52703964c3b66a32e6f430209b042f1d00518256bd6872544508e9fd2a50d02da7f7970902e88d2b4f0ecd3e8022306b070e7ec5563b3e2660175e07c6a5943095a84503d477512b2429df2fe1b2477dc5da8bf41a235d19eb3fba5904c1f94b76178ab2634f4c2ded9012e8c60bd17f1a06eed9e766deda400031b568f4b343a107435ab8df2589c6903d5143f771dfc0931c23531f2847a884a25c1cc8a75930954a9f97e4098034f800155de7b565a0218f03a87d57572eb3127b8a55a101fd94221fc519ee6a09f128017faccce1dfc84b71461700dd291408aa1655e4d4845c094f68d4ccd1b95587db87b95c5950b574b621007a4c234083b9d469ba9c98614aa6d986dcf9ed5a7f9ea93325666221e106fc0518dc2e0533d003e5ce5619e9d5e09a6d34a2b8808cb04049f4a2056239dd00680f199b7deac5024a398bc14a9fa1c2dd454355ba81793c5dd943b9f5e4efd792de27e025a05dbea68d5e2b92b941655ea106bc764a5ac8ead0acdc45a2b5994e977dd0c652276ee68b2803f1403c319f3e61662aec000b5ac4eb727bd8e49dca18ae290eef795c8526150d630577bad61fef11dfdb9e23430d2c6b53ace86693dc4a57b573b7dc192850f9d20e1959b4b4f58d8001e4445a13b056004c528f704f7e6d5e28c62a25b7646b0d38425a2f29151384a89e66e6254a290a6b0094243451de195a66ff0ad7d293847d80a70398e287d79dd03cb7b3930f51d6579c293c1f5d69e12bd5c3c7e2fd0164fd26455ff479343dfa35a862e4b9ba85b36fb54196b8411a94e312c99e431ab104b867468604b94fdfc81385cead937ab4231bc27b83e87eae56018078eae9b43837ffb7b8455762a10bbdfc67168683c18759e85905970e9f4e7043f06934d9a5d2f63560226a237562fa878ef6cb3230e94b0c7344f675e86413fe778a3ca0348b855a654fe425d19afb90be59bb8e68799f9887eef8d142608c16a4a29b81fe420959c6bc7f0353277f40994d1f064fd11cefa4a0c67ae26e1149f98daadce19098b936f14d465caaefc5f12b8a9d1262079a5d323d5fe2f9e98d3fb7265feba709a2231b07efed31f4cd1d7734c08331eebe862874ae4ba4a06f5ad6cb4dddf4eecddc16033fe6dc3ebfbd358b565290af9d71e62aa8b2df00153bb5805e6968e59a4bab71707f357c38d1d8b9bb5daa98fc094e25e577c0089f69512ed75879e30b4db76707a7c7921945ca0eb9d3b85bdfea2d0ad7c3e0f65735486fbcbf3297f3141b369b3eaa9aeec944b16785b927f5123e15cd49df0130daf3e5e6f2ab8c19cc6ca055d34dacd37a4d775bc81797a8bac205377ad0781b17b9e0eb03f926d8974f70841e73bcda136c7d01eff7087167171bcbce1efe377299bb29077ac9e3bf66b2b04b516e5449b978304d39339d023f298fe9a367307331573ceddc23469f5713ad3b6c7ba7fef4e6e828d32ebc8a24050f89f20e9883a51a1c4b8c5667736dda98ab517345ee13fe1d3762e2a7e8957801f8600c7b5e50d2bc8eb81ae0fd95f619f25f37661c51b002ef2f48ff821b3a91a293722145c971f2b22ba9e22b8e8732592256e0542ed03ca2aa8d652638a5c08e2ffb6d1326e11b6beae7888995cc58722b40af0adda920bc7b01489f4454b292f02cbf644dbc243acd868b9edaaa05b636a22241ad6db7387dcf7d1863d52e6cca14edaaa7f3d0fd83730259cf2681cb0b17bcde6c4431b8889c0262d0a2ae6197149b9d4004298bf3f4c8a16ae3501764a77e33efc493faa5f6e6ea3e9d86a1e27926866fc5e866add4ea08c33fde4b18ee1ef1142da0091a6d3894b72189091dd10ec3f52fd6e25f2694f526518e4b96dc9631d79757b839309d908d19bd75192073446411d1aaa4c6ec53359fe5a8e58171724f1f9803baaa65d013c2e8c8467350ca07c059dcb70d128eb57e6aae94b6529bbf2f4656a012810b7391f8612601ee813eb457be6fec9d1a88fb163746ffe02568d3876c3e7405cb81236db83c77b75eb0b306f7c155948b3601f3765cb2eb056a35300c37ac0d902aee11060948aca4d7bbe57f42e4c3d4362e022e4760cf37d4e02d1f9e3594bbd94aa9d3a9345154197cd92a3b9eea3cc97d1be5ac4623c6cf06a6beb93381d2a0bcb9d2c7051e285fca00050ecc899c876804879816fa06c3be5e6ae1161a792a4b80cbe727c2c78f99d1467ca174a5557d6f363009570be73f01cb2d334f786fbdd2fca0b00c335e8da7e48e09a64f72d78d145780de0291fb5e4129708012b35524df83d6c323284bc107e48851073d780243ba90b7e608b8384e697e38c61a705a50b259e9e24c551e57d368f4b4cb4ed62030253d0c947f5c27a419fd145a9fa54ee3a289ca44ff48a26ecc7673c60c0c52930c166b9daf42c1d5a31572ca4c2d0724891d04bb4151b9d3a010262a2cf14e558912f7948b2fd5d03a46f2638b97d2c4f6ff8c7552f5cc5f1a84d6bf2bff6dc00b8861d32066c005c4d1b381a9d75adf93c6bdee41b581cabfe708e1f380a3d092353347f149d203eaf465d4583ca925e28b1f89477f39b42b83fb6be4313a61e217812348925d2a51656aa548ee3406cadfa2f430c5fe5ff37ae59d9d0dcc055ad7f4578019361d987face26d062635ee46a0eb76b3cbbd305354e20c02f934490774c16bc0ea77a23ef48e98971d6e870f1802390672bbb0ca9dc7c73a1e98ee0a1826b8db95026d375ff8188e3538606f79dadf606663bc3f411e7e05fa25104cad0c229d35c9de9a18e29c281008e6e55ac7f34bcbfc441a1917d3462c13c21acf8e53d2e2d6e41927829aa0270c53b5b403b079d9f69c575d1a33abfea4044e3d08a7756592438fa7dd8eab6365cb01cef53bbd95b10ebbc9854429e99f0373fd93f280f7228a0f8d1c346f273b13d8040e2d3854c06515b666dee66e60eabf962ebf480d0fe08400ce421238d413f006adc150b2e819699258de71601747dfb63f0cb07c0fe1a1839b9e3b0576f368b1d104fda64739e630d1332c4021887069e6170af08ab24b363b833770b06da0b07f6939464eaeb869862a8cb3b4a8ab6fd9071bef5aec1b6ed8b9c892158ae1dc59665fa7ae0407cdceb8c50284bee197018d4e494a5b58c2892c1410dd698059f04068fc4924b1753b60459d9ed9076f4f4ae1bf7274b8ba55b873b008ebbb2652450a1778beed6690702ecec2c385e99d10fafe55040e269993513f75fa0793df496b9d089e81b483fd22473bcbf392f41d003956c18302ead0f6190830a01d5e0387f878d5b88f24198b5d24380c6ce5f03745311151831e23fa08439f3b2448d265bc496cfdbc19216145a51fef6e55e10652ffafdbb934e2c14c7de314f3cbf05597c2832fc69974cc9d453d5c902922eeeafb3df16421486710ca2ae29ef12823fc21480f0fe60b8441cd1b9e91e7012cc68478ced5e50e72936d7506a2d927792f2cf20bc639d423215ac2491b204abab8df2b7a4e7afc5bead7bb8d4f087bc6786b65a8cb0ffd6db3975cba02ef7ce0bff5d08e4641b1e353d9d4ee00caae4e551567040f8460f136232dca3c4fd6b25d5142a447974bda467cb6b3cc9dac38f59889eda30ab269bd7346242e46660fc97727644410f71e9557a7d08953e20bf2f20d57d911ee9bad9841b75dcd2962b82d53b5f5697f6c0c22a5cc3bdbd44b57c4f3296b49adfe85adb9b28a8003a6d99afa7b7a2b83fcf0bac6084aedca0980bdbf3be3fb409bac0244c9329ca61f507250feadb3d0749690dbd5f08bd2376ed83b1204223612f065b918bc24e5c0c408fbdc04d2c8ca957634fe32839d9b8195141c0378a84b13b1827bc790703961ed8abb1511f0d28ad4ac00beb84019c60e9988141e0698498d35bc1b88362514d3072021e0b7ba3af17d13b0a6b847499535445dbc14eb63e9f6c4ac919fa8e55d44ffe6e604a595411865e3f4bf7b2d1da4f40d965eb79b6adacade9b7e76d3050217b72c8c003ce921151f73b909a8d0dc8b6b8b6395199ae4e77d9d0a10dba6d41bda23c0bacb7ce12ad7acb21a71eb5feacafa333487d161f02f46b04085e8c173b463633b9d7362a1d2ea7e30cd415e6c0708a8b5f9fca52ffded388977929a863924069632c4c601da3505405d3010c29a0eba9c655b642dd7507c6297f35bf9dbf0c6f29dde21b65a369e48b908fffcd01f39af33d19d184436c6f42b62e02000280002f1d03184124c07552e02548b15152103f89a9a92cb3f81b2d665904937b2e5de724b29a54c329d03b803e80329ad9301f9a8b7807cd40fedee03efee9efb401136f71735ed472ddacae7092fc75187e034e887f17cd4e39c8f3ece477ff5cdafe5656bafe3c17ceda706b777bd4643e7e917f70dfd1879eecfc9e577548e0d0ad1ec8731bbfbf934747e7eded34ff53887d6fdd4e010fdb46ffdf6b5bee603eac0eef3af56cffa74743e6e9cbf347f3f1d9dcff9b8b1ab7bd777efd23a3abac6d066bd8e07394ff3394ff34110ff111223026c7edbb6cff9588ff3b1defbc0d46f7ff301d57cdc5b4b83dd6fac6fa55fdf05da9e464709cb1fb83d500af58143bbd335b4dff47d89aac1e110b8cf8763fcdc13c781c07d90ddd8694f3c9f9bbf3d8e354d39cea018d124300465fb1973fbc05be36aede7978a3cb5d688494d8dcbeb25a5fd39e7943a1ed4696b0c19e3e7c8d697538be7cde9d3274b8b7777963d51cea0399d3a123f10d1275ee44545db91763cd1a731331eb6a061e8d3ae4928983033c0719fbe0d4ac350a1485eb45db9fbe4735fa6dfc59fbfc5cf7df9bb4f3e563ddee8cfb963221961536e88dadf28cde4340ef575a31ad5a0dcdaab3428f7c7d168148ad6aa6dad95fe0e17521dc906f1dbfa8173fb0ea76ec48272a3def17bad1af4a2ad83e49e9a3e0ae3faef1fd85140b33adafbe36ab5177955bd0a65c3a23e65bd3ea62a0d3af5cf1285b2411f4845697d95ff0ed943c3f1fce2d6ecd6beb827adbb52147efbf7f1471fbfa71c65dda2f05b4dab5ef6d00afaf673630d4441af1207d64edf7afdfa15a55d246530686efc356e7920ac41df39baed76a3b115ed6baddd9aae23f8d09d798927bbdbf6674d1203a22755f613243e8c7992c3c6bb7bda58f58a32f247a418048ca703fa6003e4fcb6e7be8af3b7c1735f7dcf79fbc9f7c073e002bc370fe6b9c163dc699aa67d402adc75ae77ada3619c01a8a97a30485a0d7a6cdb1d6badb5382994ca7b90070c90070c94a7f2868446a060a8999b29e73b1db3c12009fad672683feddfdc8072df3c6d5924b683137d44a89ecd27abbe711e306ebe3e1824abbc79d0834498ce64de8c715214504d1d24b7f69ef7f5e592eb9f03ed4247dfe8392718a74fd5410ee8d3ae1ac8ffe655b6ba347893bb4f691d955ef297d355e7831c689cdfe0f35036e603a9528f9af6dac7da85b6fe2eada3733e9ce99f42d1a84936b6dbfbe2d6b67f757b8e7aa369180ae6c6ce804d1f5f9a3bf4bb076ff2eb86eca1791b373fcd07d2bfb9435aa25ef3e0b57930af1ef4aae601637f2d18eb579ecd17e74ecd17e7ced5f4d540f5bb9f2a077d6b019ff69da5281bf87dc43358feb6dd7be9b65f8c2f3516709c3e0ec662ec1c2afa9edbc8aa2283b1188c6eeb20b929a5f30136536bb1ed68085e1bc85f7ec94e64307763b2ac94c6492683d9f5d26af1c2b7878469e9eeee1e036bdf8c2db90705e34648a0372539207ba24aa56387847de03be5794bded204bd1d811bf766cfe334f81a16d3e46b23fb1265270eff39b48d6cf92d12f22a239141a0ee3f297d721fda2e358f33e549988ce16d54a8f79822685f0f19804374cfefdacacaa24790f4c93e3f970ff5248c9545067f69e98b10e1ae149c40f3e90c09c3a1f16853f6c428c3b7db28c35935c835c871dfafaf0ded181206a301f59bdf451921f8b6eff3b57b5fbb3efcccbe1ff793fb6dd33ec8ee0d04eefea65d1de30b4da36ecc70548d38bb8a8a91074c6d1a38228f7f2d4275bb8f51c686bbeef591c7bffb565864f07eb15a295f3f47536315e856dd8ddbba6ddbb6cdb5370d7e2e923256a974d0b4914a6917ea8b7745f7ad5125fda92ffd194ab9dc8225e67ad6abdcc92188edaa8162ce84e30a87f638f56defb22bd973bfecf93a1e6c3f3fffbd8f571f238f8dcd076ebf7dcd4c0821b320c8ecda5d140dfbdb87fa55f7f71d5cbdfca72b2d513952dd4af66cef36dcdb7c3af653dbd36c5ffe9a0fbc2f9fe6d3f1206b1dcb7deab9e7b697affa1912a803e2f46a36bd98a0f4f55a02db576ad6cf9fd2a89afa66cc54ea69de464a83f4037fab683ee5436877bb6391c9f761d487bd885518f7351f9530ee69be9584719fbf8f3cdcabba2f4a98a36860fdda9cb6efb97612a6f219858646a3d1344d7b1af037c7dd3ce86dceb5b9e756cf7d277b5acffd4af6b09e63e53c2b07070707c7fb26f0b5be286134cffae2d7021281cf28f5b1e9935f5ecf35f8f8a3066159a7749c588330cec90e6db352913598a9fc4dfee53c664f8a20dd9d08521d77ad091cd84014727fdbb1a328ca0b7b51bda2ae2cd93fc6e2160eec7015e6b742aa9316f9e0a587253e30f980c30e42481433bb3eb6dbdbcde79c5383ab2d7dd3a05b940d1a37a561e893eca1ef33eb2c61f145e4f9004bd60282796fce727ef1f865c7f4a172c72945929bce2452b874196db5d6dad76bc97bd5a5fa555f1ff1cc6b477de3cbefd29f2b3b584764ea5ed4641665cb2ce94aab840cc636c80306cb08fa74e914ec3f4b62b2779c252dd9b3a4300909aba6d34e5a30685ed9c30c4969c719141c7602769c4169b23df08159e735214f07b5a71a0ca21f4b894cbfb2cce4a5fdc1d6b1c319e0bb7e8d18283a6cfa4cb4e02e4e1fc97dc74a22730f763b870545aeef920f90f85a2dbe59ab1ca94d4dc699e828ca0ee4027056e5f8d1a65ef7a26044cfeb74e088338cf9ad2f393e09b67f57da4aa5e0c7a95b07b67cffb66abbbbfbc7170e3bceb208d930769c2d99d9aeb91c67e02dcf96b6ec20b97d683b8417b5d66a6fad313158cb4447b4bebe46746a9ba7ffdc7daf6b32baac597ba2a36a3f1b511fdb7ad27222c77d658f519df993c0357c4b1d2c5e769c6121b30db0e30c8b0e5bd33ebce5cfe8d2e87a8e73676ababb4d9fe8c8bb64d702c74c7424e7131dc58f1eae596a3511b23d0973773995e8a523b32527b32525aa038e7276858cd4a0d8940a2ac35c049722b61d028990138810f181c8d2921dbef4700585ec822828a410448726bea410050a96f040e6ca12214e9eae1cb952440529303232a22524058948418e8870b252450e428654a0e20a241a58d0822c44e80e449c59726465092b4fcc408315a52a499820483cc28a161968a8996d0a04120f89e7c56688c58ec462473cef484b3604152cc2225710e11445129622a0f0429b0c614436801d67559054814187580962310f06cf7be18517bc56d1bd9e176b1589c5e66c1191441708325482a0f2a46dfef1f3ffc03f8e74601d858e746c18cbc76fa375a43ef5dba3de0552b639cf1dede95f3d1fcbd6b35adfbdd0918e95163ad2a98053fafe365ac7cd4f2d34ff467fc07ad74231d6b7344b0bcdd09dd4423f77b45f69ed6fea519f0e9b17c27fdf46ebe03ea585bc68ee68cf612dd463ee682f7fdbb4d4424e822e72fd520b091de9d8deb59007e68ef6db0bc5b9135f15cb1f7fa213e824d47cfca101bda8e6133ad2819f460bf9cff763fbfbaaefc7918e4d7b921f71eea05c2075ce84c94cb2b5774125eb1f424716883f57ffa8affdf6c59f99d2988db3e36c4a914c19d5ff899f01ffa9ef4823e0960bb32f52c8b45a989969b1d072418a162954c820c5c9b63bcea430b93bcea428994951a229e028714d19fa3ee2fb50750d020e0e84f7e123542839e0100d9bbe376daa63e4e9244cb29a8450b2fd23ae2f68fcf97dcc513528a4339fce17a44b0f543bfe9c71be7c2b18e6b2746a73cea9afa55f5f2e09933f25a54175d29f9f0f0844979cd36335c1fcceefbddd66b76dd3ee5bed3e8fd7dd34f78844a9fb80c0e5b4ce3fb52516fdafa6c1a85423129773584f64302add983ef7e6ec79ff3047a2044f6089e9065306fda316ca1e2984b5458e7f63eec8bf3767cf53c22fd9b37df738a2ae576f01919e44f650cff8371eded65c6a2ee9437f9ce813ca2ba9d1fd81bfadad63224fc725c7e92a24146afb17b1d7f6b1a1376ab846d3b7924eb94998e69626cad875d32883daa7f4caed73752be9e3923b73257ba8f5325d8e32e2a6aef9ddb77d608fbdbdfc64b7a5c4f9f34d6337fc325d945250ed38eb528497152c97294ea856d0d805c890192f8d5d8874894148971a503843bd2e4a3698dfc88d53be0122df94203b8d29b2442bd4222d500df38a642e4e1ef6af9f3e994bd210e762c504cac4980d7e6c8301bba4f63241ed3873aac1dde5ac327342a294563b73f2e2b4c569ccf630118aa608c771182b49a2da9cf897b4bd4ea552a972762e4c9b72b1b25d4e724d4d6650700a32e44ccd8e33a7223844989c649982c342bd61dba4602a630412b5848d490c13194f8bebe5552c7bff2fd88b17ec8537251b793324b9a99263c0219261ff6a2ab2533bce9a806cf06341709460342f4c55664d4f664d3bdca61c6ec04d669c82449e18019c7201d2ac8b12f662a7e06205908e489718bad4b03d09eb82715c68e1a470633825c4621e0e10cf2bb3875a00059315c41c19a2c810743e4829a547728c31ba0381bf3eea515a887efd219d0c3ceae3cb25e3c3a28cc8e3a817eeded575afce5d9bc321c102e5ac4d2370dc1203b32386c42d738664f729fd0a30b158d7d1d76bb592d5cb82882c580869102e40860059c442e33298212c802c5ef122b21e52e03278096219317e44262a61c527732d914a102ec426187810124e7126344f21864538840c598c4200325f12cff89210b3307291451a70327a01912a9660fac18ad9b6c151809245266810ba64619a90b45032e64a788230ce2056d991f90e35b217841e939cc20e64b224a2941a8432071c091f304508011d594b2625f421ac41c8241e21b37e8277f0820c4c384105851e8a8c81c1b6c1cb132112e11818b2780503645dc258851fe1444c10a758610431c0a0491329560081859833db0628e2124ec22bcab813b14b13d65a6badb5f60403b8c9c28218064c48654dc22731083dc948a881080d4080c81445f8926d71257a64318b10452e4b228c2d081b20332274334bd14a0264918acd051230518209204cb0a045125594d9363c116e11ba181c52b1881c421732291c895218b77c09152023137a9248048d519ee0818725539a68a28a28a8b861a30008590d2107b21832d953e841dc2217c06189322d88c13245c993916d833751c4160738139dc8223421a461caa2844c71ca0a210064418c4a08a18456543257410727a7229b2de12a885a90e02d6809e397880515a18d4ca9ca10a1c3204716bd5ca4505321072294a0086285252d5c41a73042857d03f6644f6e8513f9c864104624624021e491d97083bf204504f34338247cc1ca58c200c8aaccab885074d10c10bb82d00555d3c23025d182a65129b6366352d23f85d8645cc21978673c2d6039d20154cf1340263af26407f3c18e7e2d2ad9a3c4d833de78e39d714a9e4634009906b886ef578e1aaee11b0079ea8f027e46ef38cb62b4e30638c678696e346146c2629624dbf70232f81dfd92257439c3324605e659b747eabbee219528ca0ee69ff0b4d65af56d7db1d3f2e8b6fc27cfc10632c618eb7f6037efcd59bbc8f2e3dcd1b1bac525cb29b02b478a75a2ec994652ea9c2c03e3e448adad55f3729de126cf2b73523ae79c734efa7346542bff155c238fdba804cd17663909d51004001000331500002010080744228138281a2413a33e14800a7f7a406e502210860281308862200661188061100640180000100061280aa220a6f9011607ee0f0bf4c67f2315e78444514906318cb50adcc3364063faed2fbba460c9b804e978368ed28a453076f340574da5c67ae2cba0a418424e38fa36e29083b19cd98cbfcad693858972c0c2319ccf3d9eed21a52b2b936013c12854ce71a502a179ccbdfc41750c8df2a81ff1f2c53479f070884261b2a19b502bd1060850cc0f1a6f6f1ad93b4c83c2032d05d41cc0489063545e7aa81fc0225aab8ce3ea967e6db06acfe1f9b728f11355c8d87bc49e470571e1ce1597c54d940318efb0302fcc7882b65b760e6b0bd9c2d71d1a76dbf44c43f5e4af71fb6f61e8ddce314300944c6ab3f56ccff6ca0fe10c4c599ea59a87a5a2013ed91c0ddb3b897ce00f347a80c78a06283b90c41fa66d2570a4920c2e836e20c5dac9233e60d1d97f6f14bfaf9c6b60ae8da342ab54315ef021a7e528e5ee00062050c0cbc46f4a26d16f729cc65408918f44f1274a9c381bbc6f282dc4c1a0fafe228f768dc272b80bca16d678686dc896f8057bd724daa8f5d374df807d448cad1bf617c4b3ec21e26266b9e22945a991b0c9f2c340319303593450b1d79c39e49bf51804950314a631127a1a3470bbeecb094dea6261da46de7ccb27c179a843a66602cf93dd182bb27e55c5e5878d7ff24ddb815495b6be05acf0bef368f41c697012efc0dc8a5545e3180cf6a5e4894994aafcdda9aaabbef0a0b54695d2f76be5dfca2c61aba1d18033e92928623f609c6044a9c8a4bea39d7c5581028ae058d709368410d3290e715e9bc35ec862d16217488d8986608af6ff9e453a5bba3ac4107004e2dfcc14f44bb8355218e78ec12a1df153df5e847ec31457b4c622cd2c968ba2470908f877107444b8485dcd09c3a91edf7914ac974b694eea68045505151a9928b8bf424c5a93860aceae03cff159c1cd3a55395a91ddeb231b3a180db5b8f099bb89873b5e7087869e4480017c09b3ea73f62b9fd4e973a2ce46bc20ae4ad87467e70229421877748fb53eb01395fccc8fc23277c752c1397c4e294f0b35e9ecc2fe4ce06c9dc00c3cef6a4b70599d80838feba7f6f5f24e9d4afc30b514e073c7959ab31ee70a253ddd1dbaf8358bca818d67924e083cb77fc94356e18f49b0a15836d8d9186ce2ed72cfc9f43f816fe2c9f8a596e26d0fbe7897fdce20e2cf6f4023991f774b8c83be96662908f56ff7dd184b62e4a3d73d2c14e9f9579fe30239bb39dd924dc9119943ab3bdb0759c9ba43b8e3df1643fea2f6265627989a78138ec7379380173c675e8ba13719f2ad7c4e1449869b885f6b9497b65ca28a31f14fc1402898c35d94966a3b62d24a5abda138a1407db5ce7e543796e46896234e353968ea9911403ca40fc3de942308150a6d900cd64bc283d957bd88ab225fadb1e86d14b04bc4f0a644a384a59f5e50acad954b8ce1cd80ed42abcad6afb1e4c69e93a4823a218bcdb5e8d82605e304e325f9b471282469a20d3687d4d5b654a054117a0ba86ed27c5a1aa248e59b2b2b865d62cf5977296b7d24a943b0b05d854fc5da2be02c5a56885a544b6d6aef16e6ad804a27addf4caef05a1cb1305151dbc2b7b03a8b1bf0a469b7b402a8c2c20acb8a71580c76441abbada8b0914bcaa501ab420d4a92fbad8d8a6f15ea169167d1a14d6adef22aac908fce531ba71dd426ddb72dac80aa21ddab496761b08424a1378e27d2aab35bcc5a445becb4702ca268d13187e429a70625127bdb2f4ddaaa50618326e9de56fc8ac10824afbb0e2724aba6af62e7166944277da6d5c024418d3ee6e432b37b12605746052f593c592fa148ee3dc1dc1ee1cfa46b2d370b1b67a49216170b34b4939a66f92a38ae243936a86e48bd731d7ba400ba4ee5498eae379834503412c77685534aa7dae60489eb86a46fb8552856e0fa7094eb571a80112307768b8e1f52c0dd60f22447d77615363c52580d672a08bb24f59abba191bed2c055c8a3626301bd222a2d26bfbd7482030a8f533f6df2ed08aab0ad45543ed2989bb5a0a8c2a5c28a94bc317653d9f004ea4488d5a41fc2c049caa84805bf2251acd9696425e3f66ec16351b7c2f12d08d3264ddb38f490262eb185d6c27a2c3aea24f59b9c5a70fa907a358c5a3c9d4acab4c812b7695d31141650ef49a76e1c77a4971352aadfea5c61838bf4538bb480b6e0b2c2ba161d45929a26a70ba86f527f1b87289292e30bc4a7f807b965b740bd02f415a8ba493eb79015e9c925f4cc82a81fe7b065137cbb8e05a4403835f0497a5a368b6a855d15f1b0803a22f548e35025c972c82af6b5e8504452ab995aec5b4d702bcdd684a912446d0e77a4d9bb8e3d49006d5605a50a39539360b11acd4a4532c43734b2499487dc3da89d1b3751ce87b9705dca946cf4e876c9db4e623d27189e24008de38c1486ed54d908009f5d7deaaccdca9128d0716396f470b3aff083069348acf48a2965a53029bedd5af82cd055e02d34ab88a885a71552da38a86f247aeef80a1b84a4a9b9a8cea41577ab82e52dd480220966e39820f54e9b45542c3aec904eeda0ea48df4ec21536f24851b64a8b90858b2a62519246540e6ed13724b713b2805b054b85288bea1555dfa2e325f9aa41acb0b4851ab849d5350e6ca4422768e10a8b8e2fc9c7ada01569a091646e112ac2b5d80691a4742dc83324178a6820725c4d56a1575611a45dd60a8e2ac9cdd996ec6f3b5418b1022a0e6952aee392a461eb5bc095851a16a4596d1c36d2db05b3c059a169315285515b74dc9142edd0d090bc5af052ad3955c4dbe2e988d4e38d4385a4196db009527fdbd65287a14d07a5181fb4be9524a257d35920aae0fc947f65b918b92401d7f2527fe3d6264eff87aeef1cd582ae32f76f9e342ede2e9ba1e8e0049f99986dde1d35f5505b42164d8edf76602e7230c345d553370f3a1a76f53b9931d88587fdb6256a1c21925a27274287757c7217053ad052b9aad4389e8bfc972cfd2c99d8bc27697e48e670dd95d51307fff994b197a4b30952dd86b95e0a2636c05f4048440b34bbb4c339fa4f81c5b234398a7f5cd1676fb9dbcc629e13380f1c7cc28f67d88c46a71811f579d92890ca0121d36aa627b42a5223c42c0cbc485943abe79cb35d9bffac1b3167d20a4b8c8cbcaedfd099bbd4888c5bdcd5d587b2bb115c19c712eddf7e8288f2561651212cf8773501a11664253af358babb3315a57c1cf0204c1281de037316d967c9d6c58c6a85de51a1d0bae1e6f78ae34b811ca67757b163bdf1054e48161eb53fc58e3319d013323068c3d6b780d017611d1e63802d3b4b234efc67d74e5b76b9f3f7f1774dab6649738a29e050a559368dc062bc0b81cb2899edfb61d26c20af26389796f47ecaac2f2f59cf05753f50c29e8178b992e8d82c79480441022d58847d521f3f4352935ab08b041a431122b6ea527852bd30a9d34487c0723defebf08a91e04cfd7dce3c91e78e6298540bd6a8ac879008cca958a7a58816236a4255b5582f4fb223533826dbbb555a90446f8eaba1cbe826595eea5489520cfd6300b56bde7200056c043a3f6845c116c9f188e6dfbfc3fd49ef3801415f8c415e5eba3bc8afd8e899a5344e58f8300ffbc89a34ad45462005ca562c449f6cb4311aa137df2bb35d54fbca9ad0e1b699c82d26816c7bb5b769b639ac71a12d170b6e20e7666c3588fbfb14f7f76012039be00e0ea14fa1c753a46dccfceac3f01c36274abc2851ad91348bff16c4a54a2e23d2567e017ab06e694306956854661c730c2f4951cd180963c10a42f240d0aed2c55c2f620c6f1b9e47630dc83401ba1f2b07934e535b711ecc373c1db6f4eedd4368d74dbafe5e9fb6f9e22820d0fef412ed73b22a8de1ec9b5ba70eb6887a2c327a027731e82f53f0243275ecbb633136bf27f5c02b791a61264f14ea7840aff25f3c4db138f7cbfbf328ee8ff513dc60bf0d84a273886cf0710189d0c1226e9af022f014620fc02a68fdc6406ab81ff9035e665bbe0899e06b4edec6332391099de2a97f85731a08ab8f0100adab0ab3b523755a46628e001281ced4f938a124f5a6d10fed6004b9cf1eece8b0a41f6576dc7aceb442e16066952de9f785a82644a943dee653d77ec09477a66664f7b1f1f71cd48548c043f462c74e1c46a654caf5190ccdbc65f6f1d734eec2b2e4d081728a0cee45800c3c1e9147007efe04f1ba30eefbf0565e4246a96c232e3d86167d38a174c3f5a0848599d22248c05e972763f6ecc35beb177645b70b0a9c5776ebc80dfcd1839ad3968c1333fa0f0cddb615973db68523126d63faf5ae24541d30b1dd72d9263ec223adf8b47e3e46e8db644ecd759488d36d8393145cfc5d8b8248b37511458fb7f146cdb6c4b989e53b1aa6c9b9e1f53ab642f81216a4401dfeb81dfc7f7d799270d80eeb636a97047729523cf54cd3d25eda3ecde0c6f4d6fd1e0e31b05979cbc83666d09dddff0bb3ea1ef0c40b1e629adcfb24804867b1fafd3aa183baaaf81ef3b5b5b9fb5f1e14e76c23c0dacae59c908c3617217a3b1cb84712aed438988524b01378d9720621913b671d58cd09c5695911e7afe2fec08116d4e7e278ed842ddf55d1c4f8d126f5418d5e76278ae6714473939da9222e73b076e2813fc9c94a03696a0048d1f2b0cc21655b7bfc13803e5767250c20df280e4a0b9f253510542dfd87650b250aa2cad2e3b3c926a83d9cc5505ab2399b48a2e86c9fd595748de1ed3bd3831770a11f9098a0ce6639b05b204e1abfbe5d0df348cc541d4a41f6eb1cd13587ca035d19a235a0d2a4e79215f0dfb85e765c0700e8095a0264098d0f35a68113287ab0622496b23198891aff3372bbb5840302e6a1c1c25689056a5c2f89910625279ad2d3839aef7929d641f9dba4b539085b7b9e7caf971b9168523976f148d09c6a1541425f117c1081d608ebd36ce662291d339504a2056d1ac0c93b72cb89ee9ab08d2c076841a48b617afb26611644330f771c39ee3b32d1586915d7ec555ed300bbac9646277b43e0ef99e3fe3b2457e3d8b5284af34e77c484ea0d5df2ea7cd7e1beb8709c956039dde51dd9ea8d96ce054d46af4651f3294d793f3f8426dd5b117b5534a157067ba606e8a84f0a5308a598c06cfec831222a8ea83b5f822a0d5783dda98db834ec3648aa2d0dd39ff4575e93dabe8dad3e9a48d1888d5429c471e5b53507cc49df121eaa8aaad1dcb0c6b92ef0d86b888b57989e5b9ec0115b621a36425cdb0057587a6e3b7202c77d24b478e8f85c524421aba5c97ebabb58c14f2b5106d483d044c35dd81574f297fa92ba591143247a5773794ff1961d607a4f04dc894c7a122264a89176cad3430fe563cb49d79a524ce0f0b3ad1019dd7d13b267e940372dbc46066139874e784768d5b22e0fe0fc218666726465f472fe670bf176f7b7407def955e37fc54c79de99d31d7acb38800e39449f8d6078c4b7e6a1a805d24acb22713899d71091556cf1d74f527eebe43bcd33a65c3f80c0cec7d47b366dfb3a238f22ce281147f48c4fa0d3f56216cf7c2458c1ab696fef05ffbc2707717711903ea57a03cc4ed5ac10c0631c2cad5c9b82ebca5a3b28906ddde21f9d20d36a9cdf71d99747a27fb650b0cda2516cbbf460e8117648cd239d3aa903398cdd445e4c9f7276e739bda9647fca4e0761bdb2543237233a4fc59f8baad21a44f75aa98c02e0162494eacefa8c18de01d0e07971fcaf8f53016c6285a0cf37d56971e1d39c549729152960d3692d5bf1a5dae5b825b23764bfbeee13f64feae252384bc5cfbd4d9713cf5f4b7ccc83c4d78e0aa1f30a0d89d804bdbbd1159594396e11fac106e8e5a82c86fb7e07635ce20f99c1d5b73b465ecebf1b227be2561cf48b13170bc1e541a8d6cd057c8eb328f978ef5827d69c6affe2500dbc757b6ef4401d2bd3fd077547e07b362461fd3d72ee57c1a6dabc1a34d724313ca53d10643bef6a42745b1299a52079bf05e4760bee80afa0a04591372b2572eba500075e64e895d6e4f1108a2152cafb0bf918dfff164617ffdf822d3c6f828eca5bd8592f5265df93fea58eee174845b8af059c25a7127efe0c47b56630b3a998dd625ea33571c437c8547e03b8c00740728e37560f09a0ffded01cdada6f0a2a72355356b329a15ab4f4e428c82785095481edf0b70885653c86114ced8f3bb3ea8473824221d56f4ac5102af7267eb616cd7867d7a4cd807c9b6b3694233aa582032d324ae6a68811a242182e3c0f4ad13abc76e679af367e97303ffdd6e80eb4b2abb26ac117d619e1ae0248e7ee020e19352f48b150666515035ca2fc4f8930a808226535ddeff65a2e0bdc885df5718f03345830729b2cc4eb59ecc2fb70703630ff77d1287cd800d5899a03120a90dd57d1316d5c7457c03d727b31cb422a2c1bd5f18393a7d0a3769acfc628e91c1e417bda796acd6593b635d386e9c62c00012329adfa91e5400e00290f7ad6156b878860aa87cd2ab6bc23eae86e98396831d9a51166cfdbda92c887136543232dbb730116161e39625964d7b38969003aa657730509722c02c614950daa2cbbde50542538af37dae8c6cb413d6593b32289d788fef416bd37329bb3f81b548438920b4f5e2a6c484c4bbbf7c05685179642cd5e43d307bd51582a1c95c668618f32b13f34b55f67e81b973447896f6f73591c0c2b9a0f0f9c0b828192ffd0530eab82a66150accb3c697198038012eb2d9f68daeeb25882d88d995befba09f776968b839b6a4205b383baa493939934f401c4808189e85f952c0ddeb47840c31baa74a8e1a7a825ad927916a52ad121d3e865c0c4b14f1505439a042fdf165c986706b881f1dab84fc7875fa9380fe1c125506be1fd02797349835e8be37f11b8c101ef43646144059f9d02f4fbfa716a5b13793a792c0852975e5005f66f4fa8aa6ebbd2a884415f0e21b3b746c882e68a42fa8febb0c5421a7a99bcda639c12a086698e8fc840b6c58ea9027433092755df7a50e1b96a0911ed05f448153b63216946d0adc0139980e3fc54fe9640963b432d704086a4ecd3ff624f7bda8a3f1e4bbafad75baae813f2509a3cbf1021b753a7881702811dc56c088d4f632bd723dd1233f84c774444cbe3d1125e89b027d26d9ba86d0bd2516a8b08a46497de46d0851472ffb885f160c81e43ebe7569fea8aaf214190e353c23cc15b5a215906a15a9acb2a55930969a2e2920d4701b6ff706c11597c439742e680eedde9ec61accae2c493326ec22ad8951541ce6744172963d1a9693469feae07b3e14c7900ced3734e68f9b5fdae9dc37bb2a1e1ded445d3ee617f44d4a43438205d185fe2955a2563a20a51fc80be2c661aa4994152c6b7b04be9de5189e221d1f1ab71ddb5d36bb3ad888246656b8fe098b98f4e906a76e2ba603875d8ea3dbc282a4fc9745d97dcc262ae7a9e305b81193217b1cc9461bc2fc683c3ec727429fdad80c74b02a9f14d6d3bbde3794d2716e7276213fc8722300ee382d511bf392f4d5d92f4ce530684dfe5015fc11f7ed1a6e39ec6b803924f94d957f1c6ea348a8f1f82336ad5437f27739fbf5456a2e51f50708faa63611ab800589a60c7a818d688f8c9851d4daa7955e45a0b3f367bc2aa8b08e080cebf21124bf4a4ee893bdbaa0edefd99fda64c8ed279582026324f46b7ff3855320a1a8e732d36d26311e2276c2b7fa4d6ddd5b43bdf53972b93a7c8ed5a3a6a1d61854f886cd730ff3e23d64ab5cf1ffce3c233c573686aaa2a991dab28a0657f21ec3c41b393ff7447c22166be6405c0043f1729528118ff79750b09f3b90ad2c76ba6cf55a79b5b6365ef3e5eba2290bf5cc1427a7ba94e57c944191df85bc2cbe09af05ffc6d1c235c9d2ca08569064603e505dfe3372262640e10198fb336078a66a6cabdb7d4a0308bb9bf73045c875db8f620321ea61730e971f15106c48b20ac82a2b5d0504c7526e933f5867dca538bf0b9d42f3179afec51d3c8a443b08bdf18fc52a5f7af95a4ac06f39a5e65b1c7b6c2aa330405d19a86c53f3e45639f12f48ffcbab0a38e1fc2e7cb1fe34db693e9eccba2e85b7e705d50303e20cdd64a0f197e2a4198219d82cd044152d6ea642d9454b2d93b04dc03a0c414499bcd5a03553b94523d243d1cb201591c92d620eb98b2833950c2bb2e33f517af84869647c8f55796414a642d8cc19e2ad65ea6148a96b57fc78090adc73e349b09f3ccdfa4077c4226e9abf853520211d80cf8805031d3f673f7141f4ded28829bcdc3b524092ad93fb8ec9ed64f04e6880c6d6695e4cc55938323a3e326b5d2fb5203e34a5e3937b2a5ad415cbb32cd7e3bf1658a1ff5f5b27d8055cff6de8d08022c3d0cd806b0ab7471b68ec9c5b51240bffbfebf805b2f76005c559305a05d2e5d748b12da7591f26f131e40fe5a20b7482e394806450ebec0a41f4ae42590017f7159149d4b26e426303c50c725b7b08b115baca65c673a2c500b1cbcb12c21b86998e4d5aa2c77cc91168dcb010fbb9fc3b2770bf019ba676d53f392c255c2d8d0eb16609f07afb3d80b081f86880c8e5b7c2a697b64de2c17b6a9596d6f59ee14cb55ccb03d0ea453bbabf824bf337df0274eb271b659f1303ef5b6fd74b8fc9a972fafbc05d135512eba050fbf975ddbcc77aa32cabaddf87b02e3797f99913d60501a4ab817e60380aff2b9287f953cca3fea99adb41dfe6063ca0f3c3617dad84f559ec35ae99efe31f300f8f0f7c02e39e8fbb8db945d061e57d32bbe5d7c01f8701cc82467afaac7e4fb3eedc205b0643f2572046a5a2af46ff2a9d08f23462557d752cae02cf5c1c45e84c66e179f0171e28a81da12caf929537f6e3d2f9b30d0633c15f9a3eeb59cc639ea86a7436f262ff30f641d2c2f8a10c60d156a37e061064060075922d8480fbf8df6bcdfea3e73a5d47ec356a6c224252638c21a6215f366a7387bdc274733620c437adba69435ae450fbdd7a8f6a8df51b32014e3d2abd87c13a8e2923c9c17bd0523d7d3cd7bae96731166e65103b55ceae3b8d2fe3ca2411389a139614b8621189b30dfdf1e2f76d558ff89430391ac99ffa5087a703b52ba24b8b2e3d1fdc42687016aac1b69d29fb5ab7a2a496780cff2e91125fd268f0829dd67f17dc9815c6d4326236aee578e7440481467c193b3bd71e4e97b76fddd5d16c030a521fad4b427d49ad34d6d7d38ac961edfdd95c1c5b5e807f46cf8380e6c3ee02e1d9fac28a2cd3fbc8775003d4fc1d43d25b659366bb1634d59ed9f0e39fd39ec281da87e23a635f7ae88921462db4a2f98ac6a82b295f2307ab3e21b38d7bb8cdf7ff96fb7c5cdbe9f61c6db974e142a8a374b6537fef222b184cd34aed45c5ce2dbbd6ac06c1dd6632b837ee2cd74eea2d5ecf17bc71486964e5e0481eedf2c71dc93012f071805940082ec76f3360600a03ed8b7d92f13c339dcf2985f28a03e02b0c82fd5e9e87d93910aaec2984ce75ae6e9b25d8a7189e6bf17ffd0cadbc1af9177c151b364a25b38e5892c05add57165863fc146b887067839888ee5849a3ab190c0e4479e46f07264fc74bb9a0516781f708ca4156e2c2f41ce9dbbb3f6173be6772fbc972f3f4c59ad5137b80731e10767f2c15cf1bf50f324f356b81b83458bcb2c3ec1bec97396414252948342d31748c3416381bac2524a9be61d2566f1c85fe634299232a8c129ab197f807461544693213857b9653aeb92ad60c4c542d45376016c73e9465846310139c81d7faf0f150963d48b62c6712cbcd6a4f4bf3e3cb60d9de58eb8c561a874d3f4b4cde5151445c434e4f301f8985e5ccdab8e47c62c20c4f3359f581e4a9973e7095ad29637403c460632035277e697e93f56bc984f17333ce962c85a0c9c40326af586db2ad25438ff59330bec60e3f548f841f6c1753bec0190d909a655871f4bcaf614e413429f9c5c3b15eb1899cd889c4b198fc585ecc877876ef597a8a35e34a24e848f1b74930d54c681a5af0dd4a8f3fce0490ed0a618b0039b87668ad571f460b16576dc93227375b15d48e3333e28e9a94cf98c0daafa57eea3856f551a0cc40dab6ac747a16c6f5f0d3044c4f30c97629b02135849bf78a0e34084c01ce0fcc833f7b27b3a544cf94bdd2922eaa5673c3f710b9da89ed4d8256e0f11d9bf0a39d175a2e32a26e5c1d6644fdf9f8df065d6edb2d5e078c37bb64071a5c4d7499a1687231cffa3644a231e07166ce1f820a3f21cdeaa616af88b845448666a1db14fd218869278d4ba0e99f6ff50dc3926146d2709c9a29f555bb6b8ab9adbaf1adac4bb9e54a31e8f33889dcf746efdffae141a1ad35053422d7495c340a697d48be17a140dca5e183041c8d3f9302ac9326e4371f55d056568403fd969ef9ac90420c3302dca54cf871975adcca5a7a1681214be541fab399e0b2cc06c3cb398ab914cae5c781ef70126d8c6e3bfed86851292a458b09f4f5cceb9ba2e88b71237d731e09675a9842699243165fdeba5fd5c6c14f3fea9360d8ed147f84d34e5189748df08fa137d05a511f925294b4a27a8f4816879d2de146baad39d01d125ad4980b1ebd221db04e99223e92111f6efdadd20c152107fec5b3607bab906888fcea7faebdd8a65e9a8c110de9d9b15a8f2bbda832a4a9ad9dfab812e3f1fb00e5be771e87b425aa4c90c285bafafb06221ab762ea2aeb7cc76c1b18b0cc3d4423229a5c3a8f7eeabe4e9dc2dfe9ba67b23b9a3abda3c1131ead88426611117d0f508a803b4ed1e77c6bea5e04981f1e93cf0a9d3df29d0d3b04d9816cbe3a01968d64b593062755430cfbabb26ba0cffcbf6f66bf8e22ee00cc015e7e12c7f378f52ebf8a280f90e1992c696d768dbcbacb7ec28e9b3ee24f5397b52c6ae59009a447518a59f0f3290b8cb8235c93681faebe5f1572ef19d1f14aeae5728abb685c35edb8ee4f27bfebfc1515194e45ec12ccffada7a2e803162a9edce5ee18eabd63e0ab43984dfb6de6c4513ef421c90d406e82a4c5a9283ff17e080727173c4a0249ebb1db9124684f25e407411a91df11fdeae61184bd47988d46c751a0658176974c6c4ba9bb0f8386452faafa34137a80985adbba0a6eb758b65491ba87d107d288bbea99df410006e58c0329b4782e747fb038cc6e9e9086c34be5466d2bb9c5e8c5303328990d8f48fa86cfcada64e80e955dc140c110b4e6ad294d80b47c4093da3dc64ff1cb64cd58092f4dabf7f9b7e00169d93afd5f57c46208d2e02b512487db21ec8eb872e281eb8beee662dc14fc740d013ee09c2ea47ccbf01834a6f19dcf4785bb2a5452d422d1aa4677a94d839f73b064a98cef173a2d89d26c4e8f9371a6a9e6a9ec2b7f94764e5520953bc9310e80293becb4928a73d2d602a0a0edd4f204361838698f58a506999846df033ccdbf4ad3e05b19ebb87adcceff10e2e5e4bdbc8ab3b4bc692c2620a62b230e05588f48e9f4fd5676988b7a93fb2404ea066f4c66a45f9e8cd55486aa003fbca7aa9640d66535b6dd99b28ffc89ac8b32b3613884539e47a9190f2a2f38e75e45685fcb12d59412f36b3d819a1c199c52179fa93d5e0d0fb3a058e011fb2d841e9700359c12ac1d9721e78ae84413cb1980da2fa133ea3f38487a8aa9b8fa3008d6cda7cd6daa28d106ca8904d431485e8709d9093c668720f558674b908f746ebcd46735a6aefa58d7051495b099868a6138d0dc97e404fa74726a879bfc59926bed03fdf1d575adbe2fe8337f8086a0bde7e9b49fb88ff96a4316fd584f40225ce0b6fc5c5903838b4c49a9d0c5ae1a1a8a5a287d09607f1891e2cc4e15b75473ca4c511ba6e2812849fc991b009c32c9fd89c6d2bf1d8daa8d8ad0a3fed423c54db8125f09203fd411c5194acb05f5f71534f262e5556fb6d862384bf52be057a622f40dec04e86244384b24c34c2a5fe6d23d3b268055b376a46729c5e96665aa1021d5698a52a0571b31396b4a08610513b3ee877f72bbcb18ff08f53b0adf7c255dc38ac84e663c5b994f5e23908bc3852488a992be826f9d6e67e576a0a486b9688a75a3cd97a415101e88b23d61b4d327f191c885cd6b6d90fa17bd80a65bd4b25b0f109f321ede063367b1d3c320040d8f1fcdd43e9ba78a5ac7412b47052620a4d7c08dd632195726c23f4bac8ac50e094035c7ab8e058897b48db6dfe321dfbd1a09d5c6febac2d83d120873ef539d77c9b525d77e73610c9697c0d78e92f5ce084e32d8a3aa1c1ec64a06de933c60a065f6a39fb83eeeb3c8bdbaa2d9e964924e34cdcb8c109ffb0be39a9e60ed1437e93b49748131c0fe9c8db74aa278ef9d9ad33da0e915d10e71b703e7ec138a31d91d8aa1e31b3e05bf72ff50caeb6800cd36df3a32d284dc3fea98fb27724be4fec9c1e3fee1629b319e176e305ca74fe05736966f3c8b319a488efead1cc9456dc54b98d6109b247ac355091f830faadfd7ce226e0e24bd4a09e726fcad157233638ede23f1362724c6ce1d8ed5b4813af9b44f13e9942732b8e83d32c16922392d60ea4010509e26126da88fb25f89ce95fdb9ca380e3562bfaefa0fcd3c2f1795ee2a7e5996b38954e4f9b7bfa11200d430df784688e257f9a034c39a6e0947b6c3883064c7214ae9fdc7c310646bc6f7bf40df009db6ca5d18a1619d233150442c271ee3c77fc33acf9e443e14db35f982906cf181960f00c7633236505b6917c9eadbc55c05d40f3998496c88131d86694fa2c9d9643be755fd3915f01c811e7641b7c4f604c484044494ef6731bd31e8e6f91a7fa93833c7e76b816f5166232630e9cc4d01ac8629edebba8a2229c3101b36b3f0b5f9bb06062d0e5608d21b78baf833236bb471c56ad0f68e9d81d49203348ab39f5743f60c515a9115a90db94642fd88c71cc7e0f78502ee9abf0bedb5c43687289c0c3e14118ffcdd033e0e55e247f8065e7f93699e1d4ba06713f45438098960d841ab6fc1e0c0403e5483f546f2736b3f5fd47099ed8e82b5c8496217c06eafde94afa5f6b90cbcb22eac9d932414b4b8122607d74789a5db821c11f585dee80a3a8cce595ede395d62aad87a16f0a5b94d1abec96b9cbb824286985dc73fa723991dada16cb4ceae632bfbd158fafb9289b26f489c845b16853ee2a34413f2022619ab96eede43c946eb3202098ad9c0ac50279784a17af0ccaa07761f1711a19bb60d9a7ccac1604724db07c8485d0f246346431c0c84b6f720c1ecf08c94444f9cef2b4f47b8089ce5cc25ee251452efe913e0cbe66b505ba2c323531c9498524114352fe08750757824ccd9e885b4b596136a62b5b414108fa831f9a93465eeb6facf5fd395c823eda102b497a3d9eca9f807236c91f77f77c681d7709e6437129d16ff2c361bc87775fa573ce99eade9850d2e10bc45fb9e1624ef88c283a75a72a21b3a01d3f662cd0164beb0921b6ec92464781957caf77b744282b20f6b7f78660cbcbd84a77f0ec77dfc8b807c10d382ae5462b9d9f2ae6d4009f7c56bac83be9bcac016f0e03739d13bfff105ef1f298d26d038a3407c02d88b6e4138c98972527c422736220d04da5cde24ad9e4d72226730193365786c5adcb2e27b75297e65286c3f39cd37434d9eb52843c3761f913b2b712b800877757671cf5135ebf54f945a839128326b226b57402c343f85e2b391028b7e62b293a1c4fde2ffe0bf9a285867514a6d192b90903cbd9a08d05d4328fe1f183152e18eaf9460e88d2a870ca55aa6ef02744204520b98a8825e25021e7cfa85ece7ae21f280150d8008577c51ac9e58355f254d82d80891ef9696d6b32d6af26baedddb586bcf698415b2e45f2d3f9300e6e8bb6b26e622cbd9bc4c3c79bf386da72ac890789e730ce8542b137243084d13abf9a30d128fd346bcb69a7b77c59037367ae2b34e2fb00586218a9e5eac7308ec0d22f5f74e0a6919717cbd18e8eaf9ec1068e3572248b861cbe7bf93c0be25a106a18c047e884a09cc40b97da35d2a77d339c2fc0c8468a655e49c99b409c21aa60055a7cab72533ed346bf7483789361fdd0eb3247ffb068ccbb98010c10e0e4976a6cf1f00f70e6339438a8e405ca80c7195f457277912854f092a73b2a42916d879ef180f4a83989887de12ad38e2b7f4697c083a59b3106e4c4d093a4774133788dd126a7f39f52f5bdc34c166f82f0e778fb741ffbe37ba08d280a519b395c5c30039e2fff82c19429d6e972ed2e8ab4ebb1164f5fbb2e3373e9225e1fb087fe20cbc5b967b93333c72264d812c8ac22c4d030e05272021bf5c9e94da917cd790079421b59ddc8660186a1d37e6dc5ef3c93e9188da6d3c11752211cf38d8214a64a545438fb2cd34322a8a42dcdeba2d9eb17c5f68bc31e02ad86292351f43cfc2399105e55bcd99f7f187379b57ab7a96b84c14105e35244291095cc7db2c141635a483ae40ac7629349f153c0fe515c66dded952f76aa8a0f7d0f0865ee1d32dc32d37fea3846a02f48e0355a5ce2d6248fec3d0cd981dfcf836498dfb403c371e31408389c6b36a553aca1a39c70c127f10fcbca1792af543062f768abd08448484fc6e87b05e25448adbd2c30d51723588003508546d038a509e765d40903a4a070a1fb5005e206da0b9b79883e31c99c0254f9213c2ff4300fa6a98086be05ec62a7f76ecab54676c6370c7da047a0eda5ca16738e82f48691594e15052d385622fde0896cbd58e8d1031594b882464cbbdb7dc5b4a99920cf10711071a074760af713e99cdde666f39fb5cf696fbb82339db47eeb38cfbdaf847ccf61b41cec97e7bc899b03df7376eeb03a9d87b32fe9a44aa258eab5cc9fe2723735f7a5a7a127699da6149f187a51062712cae873bc2f57046ee15f21e7aaa5cad95fb5a72773f9d4e7ebace55cee7dac8c94c89305861e8806104462b23204328601889b127c6cfd2f87d45587b28a4bf4908fb61dde98739f3616e87b0cafe2aeb47cc0d1f5effd52ccb68f699aa9ade3ece7cadfac771b5f41817c3913ea63be1cf846d89c4d50d03c1b28633bf968bb48b10c7e27a3816c7122209fd58fbd84926e6b30c7f3239fbb19179fa1e74d0676432ddbdd96619febc8774aff7dccbf9703e9c0fe723641d43028c2160ac80919207902114304ac018c909c810ca97a30c9431d95f63ebb9528aeb4e8f40737e8420d3873966da93bfc6403cd74a55a5d728c51ff719ab02b9ce0ee9b1d36314d3b7d6f4b5ab7feaa0cf30e14f664b226119db3e38c272786b0ee70b225ffb4fab9f8f1abff2f40814e7f4637fbd5f5b9e11c8fad5e5e44ea439ebc8bbbabb7330a8f5e598a9b576569e52c3393dfcb1d6f027b3a5f437faf054df35cdb54f047e245768d23459dfab1bd14c38a73e26f3fe37fe97c9ab7b20e301fe3c9eb0561f93fff9b8def1d7f2c233da8e2de321df7b7a04f9176e778ec339bdc4f5d432f8b331f2278e7fce85bfd638136af6dfe1eed3dd4e94b7dac1ac691dccd5bdfa4befecde794fd7f4d3bf89ee3e9eb4f75e4dfbd2df6863f167a59439f2b5c7ee73ada2cd8e96f69f8ffbc9ac7d4ebd3ed37e47ac78c6779f1e41739fae99dfedee13836cf164a572441c4b1641255e5a47d31eebfc6de781078f753f2c124d50866118967539dc2ccd99cdcf1acb389fc6b2deb82d9b6d6f76db9deb71ee48fea26fee5c4f8fe09c91b865efed19c70aeac7f16a9c33638ff9db77bcda8be57c2effd84ec22c16d7e31cab3956f6d7348fc19f3d61a0ebe3ec97f1d9deb3695f2f135f0ec9188c3f1fd7723eeece11e52dcbb28cf3e17afab5fe098a412d87e4d067e31050fca0655b876697f371c73e2ed7d666de9333efce3e1f37c38282e250b416caa1cc7b32762f9605654fc29ff7e4eb29e7c3f96018c6b1b2966559c6f974cd85298d54d9f06527d76cfaa9ed7c29faf2f345962f88bef092b7dc46792bc9dfc0c837ba47a50b64f6bb369b924dc9a8c4c4601bb7f9c4b22919966c4a6625a372d1d25f5e845d31522f8a1f35b2b9404645067fd4b6b229995166649a38a3d2351d89e20cf932b18874fa18200f621a33d12e1661d8f51ec497c1912862d7c7e04f9a704645dbc9a864536e22f6d5fcc5afb65c1ad1e844a0dbad96ed3e6859882563584665e24df5418b9b9f51c192e30345200894656729ba4011c402b1c864eebfce9225f717e0b09d589451e9113aa392196554e2d1c965f0b0a55eb0a5148ff58734d2bb18d2054cbeee41e94287bae72aef86e74fe3fa0ab995d8fa6485edd4902e3c74c981528ad1172cf065871d1f584a8e9ccc21538ea660e9f2036137ecee6ed8ddb0a56069da21c5940ca17419026173b1db3f8862e3d3861e8c5cac31c7f8370eb15f5748b721e9d7dd98fa8cb2fbe27777f7777715597ba7945c68c9525216eca4620b2e7020832862746199c8722643285c38e1a207211b99a357ab1b51ba8bf0f9a0c92b11b888818b1732aa082e58b04460106d819a428b1738b83c514c29423501e526298208103030b94524a9810d31c06c01030ac9163ba818c25c1eba2051c50cb0e8544169e1c4f581c10d44a82782b82e34e9e20431b03872a408ca055af05c19b420418c2cbca07cb8c205545ca31adc2ca6601105b5c405282e42080949b1e4da90c32d22038a8a2c7a50416421e40af92246182c50476489c10d6e0ba8dc2f629082248e1081ba61053df070a30042e1404310163ef70458ac50059824b488b203d490145f18dd2398107ac19016a0be384181f141890e5b6aa8c285757bb8b47087c208830b940d5b504cae5c16d02006174da0b2b4ae0e46a8c082185d5070a950828ae206d40e3168b9c285cbc4153a4674815a8115b735c57d62c5ca133b4bb870040c86504529400db1c38501072c8ca0a85841e4eec00a15ae0f5ef4704181910394161b5c2b505c1d48417981440b435c1ba800952408b5058915335c2f5594e0c650c510215f5040648142810e2e95231acc80880c6e0e4a10f184f503ea871e546082185e7e946c79e1ca600b0b281b8071822d6278a1e5090eb24481022a9a024a93226800e20a931a92dc1cd8708d6881012585961d9412612eabcb2541152816b0a056a8729b7022c61718dc8008658220502d687295380111363b82fab159911676406467074296f8f28316b7065aee0baea07caaa0a63c714b10e56241620744a074f8a1043e5c1324d1c10d45acd00191bb850e84a068f0058b16f70a2d2826aea0ae5419e289fb44947b84048a0544a0a0f8218a0f294872a5dc706f5004d545162231c822c4c917d40c5a0469b93d5c6152059583276688729d40e2762102ca0fa8177c405d91e4aee086fb5304e5440e88a070900321978b2f170a2d8cd0d2e50a8aa78a0a4f708982e202092188a8e287bb820fb728498c306ec8a208ca091544bc5021e4e2e00bea055ab4b4005d411955b9493c719744a90109140f44a08afc7087f870774842821b504b1441e53005911bc41442ae165f74b44035d182aa72e542a912e38b2750462c8d725160291231b47882a201883b832617c992186000a1c2d480122286fcad5e0544f205c2621942c132247f2bb88a315e0193638c2bc7055061053e443541ae78b2619b0f69a4b07672439161cb47286f7e738c31023bdc73e2cda4834c4780da48b3e26f3b21f800fdd8810cc4ffe25f11d8e1e3e60750b1df6a2662d94d7a4d3a3cfaa017968e6d8324fb25d50a36e210e4f84bb29fdd072447fcc5b7f88994c8c5489ab32d0997b08d184be83931742ff5849d7f13310a3ae67fb393f1eb9ec4b47693d351e79c5376a4ee6b9d4cfa92ed6094304b2e2ec9bee167f8013ec3e94daa897e0fcb8f333e57c204dcbb2a006bc0878dc51313292d3fe8e338e969e7d9039d534fd8d2fba8995ea49f4f252dd157b560e76f539bd943a94d6ddbb6d28cfd9cd263f6b30f9229853548e6aa36e794a1617979af660f5b77d3fe2c7b202e93fd459b52da34ebee868f3dd76d5b46bbe9f6b0ebc72a7ddacddc3d391df0e7c38e42887bcc8c37d8a5a0b040f207dfca6cf02b766532c4ac8a052bc29441234f19b781f9937101f7260a32a794b01f24721bd0e626ce988f255631b6f50eb791dd3c80f6c5d2a0984005208e4ea276134861b11f2cc2008f2b476f16ac3c5109b1405ca6e6861f21dc341b99e3c2b4bbe60ee6fbf5d97b77c1ebba2e1dfedbd561efb8c7c4e417f7de7bab54e9c6503628a59450c698a281fdcebecbe8c3db8a0d7a8ba79561cb052b2d17845a448eb478c0d45a6b8d345629391d3e6aed364d873605c775f569877dd66959b7bdd6d5e74cb872c5f0de448c06f6bbd9cb3c5bb229c3168f5176f7ec5730e29c8e2681d24f195d57c5be66fa1f6d600e7a5d13b0bf9e76745e6fddf3ebc23253d8c6d5bda64db80094e7bb0b2c1774a88d5bb5ee518aa3d2fe298733718e96435f7bfadfa57f531dafdf1e50de8861f8cbd19ebe7f8b051680e2e4a1bdcf6e669a411bd9479969067100f19c4988310deb1cd7ae97b3070c1306477b8a677874e679e37850cf1b25a1b3f69b099b469be3d19407fd0c4bf73cb801c31a141bf4d60a4a6ca4aab0d8d3703a3c5e9f5919ec83232c8d59ef800d69b013388435431c6b60a97bab98ba62fdbfd5ea5d76f9c6a15461ce77779ce33425858510c22ab0a472605351d8259c78f7e0df283ff4a4a4f4c05416fbf54e868e5331a83d5e175ea41c81d2051350bce881e2c5ca0a43524644bd04cb763e0736b70d73ac4943ec233f4e727cac63923ac27e4d438e3d34a4949891481211ca5d8650bee8c95b094eee6f7c96e46fb587d3415ba07da4d4352bcee8e97ac7bdf82917d8af5ba0d5b6f018c7718f439a4f9acf5d40f246e2eae6a3660d7b8c6207aa1ec3d8fa691ee02a950b96063ebdda1f40d31dd5718384fdee078968e28c38b18c416c2ad58efdbc2ce5572bf39f0c8dd2cfb2acf439b3040462c95a89bae7db43ae725d905c3b1f356ff49d461e15cf8de2ac1da474cf0c3ba925b61451abfb784f4b052b50ba509251a18195c35b4761a6d7f45a1d62de37c7639b9d4caa65e3d3ae427949b790004b04e08e8600cc339a96cde84ea21fbb160980f2475b3a4317fb0b677a3b49fbd879a6af6149a3c464d8628ca539e79c8f05f980e46bd2c63e6a8e1faf6c6ef32e699cc93ee7fac6be99751724531fb58b51322a1c37e7ccb297dac70f9267c660908c753e6abe70e5998d65a3dad3de5e2375383093202701299f84494fc21f09cfec8099f4383093f08cf639a4bf5e23fdf5244c1f7e90bc697f136b909c751ebb4f660fb2b54b21d4d3136b4fed710f739fb3f64ec43ed6bad59dca13942393ec4afa2745642b0f9150ffb4941fc8b29d63b987b95ff2eb99d11958264bfc6d1bd7d335b29de4399471ffa48cb0feb143806f22e7d335f232c2c6874722110e453d2c23b9b18cb5410c3d214aa225a5a827f56468e80edda12bc4d0d013a2245a528a2a2bb6622b4aa93b95a7887b653c0d0d6f950ac2ab3d45dc2be36968782b216ccb781a1adeaaf254d6d06d5d19ded0933b5479eace1deac99f0f5d1f1a1ad2b49da19a6595569ea2241ba4f9e28fdbe8c6383a6bae71a543f537a34a842522b2303584cdc97ee6af89364d8adbb8a66c9833f2d1281a452bd8d65c0f9933dc4c3ac83da10e721b4c84dc06fdce660ba586b2996a81a50ff3675343d88ecda3e6aff3c71971ef82e205981cbdd8a20b25397e336922b701a1786164d33962136598ebe91af823860963559f13113951b4e9a0e84439e22fc88635fc1da4618869503caa5058a7ba537f4ea7793a9dbeee9ceacfe9743a9d4ef2cade44b3097ff6647a68aa95a7f2549e2abf70921b860ca1840124bf8ff95ab1ae5857acabedb7584c97f35d4f7f04b9eb552bd6d9377dccd64ebb26c655fc496b63eac7d898181b533fc6c6d48fb17f13ad7d98abb5ddd73257fb257c136bfd114df54d507dd0b25fbae697be1216f3a5379970c99a6cc9d23f613124fba7937d69df246f09634feaaa7b5bd6f0777df633fe14c3d33645c22a7d2d559eca532a95beee94ea4fa954772aab542ad59ede29c9cc9148250ba34dad3c95a7f2541eec49182e99001942099344de4a391ff6f24790b339ade5e8ab3e0898867bed592401ca38c3960e607a66fef6dfd55acfc6b08e7ea6659426d3701b13c31af0aab9bba3101db6641c19b64c206507263bd49051e887b0c6f51ff69763d7775daa212e28330d58037e13fe3d7f83dd0c0ff9d8e3c80ce1e3349e4941e6fe1fa5dc387b88677e74be3e0599e1ff28bdf641b2e44cf06f9c429b301fe2143a5f18ce899eb513f18ffed1b38e25880366887fe02ac4e14244f93127fa7413e447f8b1b3639a824d3e662563cf45026dc9f42ff96e13235c79ab950921e4c622a8542db02baf6bc2c62fcb11ce88ff2d20c70a2db4d11f1c4121763d34413e7db96535ab533a4e017608f4bdbbb81e3cb81f3d7fe64c7c09b141b7f1e35542d80f4a9c82630c2c31a224680156a8187182ca1226723082e44a447214575005b572206ae150a45ac2654884784116b383c4e1065140d999218b2b39e4c88adc80a42279a12211a299ae40a24329a5a20445ad1ca250299932c87b9a16122a9994610b492b7fbfaa43508f61881856308513306860014f171840a03a816a87d52ac9bdaa2447a4dc60848a45f3a96480d87ba53158ece18f128dd24910698fd02a1b20a51fc38479209daf99254d7cc1b6c10a218efadfa692c1767ef8a59f2c399561ab069dbccdca75333cf047da485bede26f8e03ab2461ce399c6eeec1c8f2e9e51c2681a35f3d3747c2f5dc63cf610e5c8fbdc6e9c05eeb627338f1db9e7ea3d0b0067d20324358833ed6e56c8f7d96dcb945835186196e78a6c7f5d86394d341bdb3bbac35cbb2cf64eda6ec2cbf11e47e8d7629d02c710a343b865d1384ebebcb5519b977a59a61b582343e704e38278473c239618c118407010407788cee1ea3bb43e8d91338a3c241832108922659c060092b4418419183b2327daba4754393d6cf905c336cd1e0e5886dbefff49cee3eaa64b0fe31ea60e14baa4262e5c3b719c491bd7c0ee2c0689ef266096bf4779ed87c10b2bf0366e8c39c83fdfcac9ba1b84703f2fc09c3ccf088314c98a7d2bac148cb062577000f0300e15780dcafcae1553878e69ef97c4155c4c2fc3d55e540e3d1f0c9fe764bf697b9ad19b02059ad60680983cd37ba478fad19a6b46458a2db47362a5fef4ce80f7006cc5f29cf87d066870c4ae00c98a9bf60511966df804747e50e521149fd60897438f21e67619895b9eee33e9884441e0d9aca02fbc1d60e0861cbb47734f0a8ca7456c43e421f1f861b6212c20ce3f54ce35eebacc006d59fb1bbac2a5240c860c4480bf9c87b3896e73dd429fe2ce7c3b18298d0682127f6eba3dcff35ec567f0ff593268250c67b381fd67b7e3495708ff74e950a8ee52d75032cc396119d2aec7c4895cc2975a007f30e2342a007f31773cc338c231c98fdb7e8272de405e2e8224519b658528ec8b055a427c60a401c5d0158236229e59c31c628a39431c6d83f588a1188a3a51360e0961b327a8c11cb8ca49452e6ca95bd34d383518a91927f8a8b920c3f65c5b615f7d2b5b770afb1fe3172afadb8473f1585654db19f7bc9f27916b721b7b88dd9a92b6c67fff58fe7de2af33ed7c97d15d9ee7fd83feec13e92bac2763e6a422bed273dd4429e7b8dbdc5302ce35b26d35df7ae2beb66be6ac4322e7d2fda740e0cc3260df77660d87bfd37ae150372f7cff6d1ff923fbbcb084e815232c486a0292cecf518a594d28c526db35efa2da35b35994c8f03b309cf9c3ec7f4f44d4ffff41989f4a5d2c9643bee2147b25d905cea309049dcb6fd4dacdab66919fd49299d42a4b2b02abffcbaaecb49ce7d865d19e90b92b5ebfad25f6fbb8f746320fba659ffb46c2f685c02a1a5acb0de7b914a55eb484f6d819ba6d59727afcb313db769dc69723a4894d2c78199e29998cfa1afc5fc16e44836fda98be9609fbad243ce9eba20d9d46120db12c76db2721cecdfe25f5a6bd9fc6b4628492c7777083de8de84ee5d57902c2307a79c73cae99e84b519b68a70c9f36f82ecc01afdd1ca8e0e979415b6a6bcb0f0ffe5df802b88ffe5aa619873cee94e7227b9dbaf96e44e6a9293482427cd9984951fa777305f59f7c5ec6f1cc39e44a597affe99421c151db55094618b85a22c5920cad78421c07e7236da84a073d038a315e0f8a370b6fb9449d89b286583beb5583cb4583f73aeb4fcb81ec7f3f572bbaea8fd8e084c40bbb6ed37edbab479dd701b50fba869f18a9d434aed2f6dde38a5086ec3bedb98d15e1e84c1863da461a2750ce8c771acfbb4c76ab7bf8f9abbfebc1e0766ed37efc6f56b4fd9ef5a47dddb7ea379f3edbae19ee68d534cd86cbb4fe3beb95fdb7cf7e6bd7113b1ec93c90c701bf3eff5fd84414a951d11d8b4edb5cdc7d669608a919456e9099113219292a0233f580f6b880e07e4033e3470420666603fd83ada6ebc42c7b5be47fcf9cf36718c534ad93dbb5b3aa4d6094e1c79e54adac7df48cfa956686d5b42bf491a8d6ea4b7f6efd6b4ed044c31e45a8bdffec37d6ea4b70d0afbc1a3fe1350d0d1af43fbbc47d33e2058f6e19ebf064e70cfe50e9afdfc956cec04278e8e3c1d10d2d961fd040d1111e9ecb07e80822211f5a258545454845d13c71b5318f01f1de13f8be3bfbb80fffec67f9ecdbb11c4b1d9b8ef1de01d08e2a8d45e08bd027c678138b810feabf1fe5a0880ff6abcbf96b610c441fafe0f7c35500567a00cf8010401c2ff6abccfa66b4fa687d0f43710878538626678c08011702ce0860dfe6a6c2840840420a0665563801a346a0830c31b800042c05f0d4d0070f735207c2063465553838a11654e1e7432a7d3e9743afde9d47d11064aad95e920acb1fda99b7f5d3a97cea573e95c3ad77f355dfd53773d8661188661ffd5c874dc9f3aecfd29a594d2ff6a643ad29f3afa308319cc6006b3ecbf1a99ecb5ff6aa00635a8410d6a32da9b4c2693c964faafc6832ecb325d0ca6b046ffa933e1af44e22a90d1115ea840072688e2468d0ebc1c20c3160a92f08e127dce3927dc3029d76758b6cd0baaa2ccf0d8dc677ac89fd93912b22c7fdb1a487bc9c4bdb8c52a7bb2dfe08453ce19bda7469258eec01a717b5514eb7f1337b9f34925397ed67d9225853e8963abc77c79e3d84c0ff9d75f3867e21c69102a256c908cc518638c31c618638c31c63844896ceb16bd9177d4475956425ed003dd1fcbfad169d1226b748f3e8bc7057a594122efc6af76a27c48a9b51e67518eeb8b8c8eb270f12275583f3f4040414142424319c67894218410461650509090d0d01011512b430821d4c910fe644844d46a151519191d1d6581d0defb10c278e38866e1e2e546d4b9117762ec80030551213b7489bec5a5884b9690cb95a383a20d97202f41ae13e43b41ce0af29f99a38fa24dfc214a645bb7e88dbcb8bafa48e6f09fa84377acff345010566727bb98c38ba20d975516efe88d6e5b7aed5fef57de0d4ac2f092eb8b3b39c73c40181ba4f9ae2205fc4745f0f25cc59a4be3bfcf9797afd58cffa87705f0df87b0f20fc067ea6510b2c419fed947657cce3eef7e5ed6bef7e0b35983dac3b8caf63f2f6f4f8a35c668e3469166d67453df4523b2730fa902f047ad08f8b33701f8bb8f00fcfd01685e617f4aad01f067ef7d1af87baf00f8f30880bf55fe009d813f6a3dfcd93b00fcdd1700fe3e041afcadb2e41200212cd409bd1000843208f85be5191467f8d30ff047ad0cfcd97bffbd14febc8bbfd53c8a33fc29bd1ee0efbe0cfedef3e6d1ca8da2cdb532e16ff57f49f8bbf6fa31cafe911529b5f6de7fee3f8fc335f98b2c2c476cfd50201b74857ec8cb217522a553ea4ca933a54e0e39745d43d7d035740d5d43d750f697392497680331c905935c30c905935c30c925c71c3388523a83e80ca23388cea0ecdf798e79b45a79deffbdd6669de3fa89945a7befbfe769d70fcd48f1b35c3b0a6bd07eda5980aea20318a0b2724481930c5b4c7e0890618b4950962e401bca8a3376208eec8d181a5281100f412600aa21c71f1872a41027cb19c658b1a6c6f3feef85b1a55242eec419f15530b0df66c4328a4fa9b5f7fe7b1e8c5f2cfa3623a2cc8a363711a3ac2872242153b56ca4f95b2271654d2936ffcd3b5513563eecc8e1c89f9e7bd77beead56d2ebe428b05dd794f2e23e4c0636319c1b399c98310ea7610d49391d1318b2028c3356a071c6ccd86f57ddb0aa6915e370ae8cfd46ebb665b556ad721cce56e76fb53d4299c9b85bad1c8ee570300e87c3a119fb2d835947392fcc3312f638f372ce0338305f50d5848d4ffb6281bc1ea16ca0777951ad76430869d0ddee5ba494735a816118a55c344ddbb616caf0b3e0388e44dac25a6b3275e9ee7e2843610dff56132bad265e5a4dbe90f962531de18466d86ac2a4d5e448ab890cd9bfb69aec08f19261864c76b6df36fa5757b38fdddc341c5f7e590e0a3f4aeec5122e3875c8fe606c6293df5de32fcbb071961cbf8d7a68e5f8d4879d1cbf7bf092c20f2ccb80353c8b8fc9a888b0dfe7fc349f8cec316219d83dfb7aac217d9ad18f5c0934ce87dda7e589bffeac8412fae5635c095c09fdcfe9a03d0c7190da88e5c4baa6c9b3937149321891eb7a2d28682b9a6264c5e668aff5e8a9fda555123c3bd78307c528fd497f7e4c22432845e6ccefd12d3c439f04cf9e29fd8beefc70898f0d65ec2916d8d378994e26938da9321c094d94316ac33feb724c5c8ff8d452cbf1b8e68cf6f421099eb1df3cdf44ac5e9a15037654e0041f1f18c23a92a573f5a76634469df62106bfebb91e91b6727cecb1d778d81ef127a62e1bc6496aa29f256072ff91a09ebc41ae07fccbe967ff75ced9e70c7ffe580929c487b006901f58f6ebfb3d05ad253dad1db6c4165c5ba95faa9cd8f8d073b0570561e5b7dcae4efbacfb51ba346c02f697ec308472fc08c4cafd978e950c4286ad1d9ee4cefe6b8dd3d16d1bd6a84fafefae3e851566dd97bd7c1919c8cddc0391b9fea78428c7bfb5650c611ba7f417f7b583b006e9b14e7bba3dd6c1524793499f91d0ffcd0c851464c6b3fb2be1faebc25ef541cbe6f4f7e478f45f18c6873858fce64800d234544eec8f526eea828d28f7b79208e57e9fad834685ddc1afe137798420714ef77ba21ea8b46df755b9642403000000f315000028100a86432281481a4539320d3f14000e819e446e5019cea4248741c818638c4104180280101180191919190e008243b78bc04bf04bc79f73558e85ce0d1d8a73aeb65c073b54de2eea5b26dd7adde5fdf77edee69fe820a0aec5e24a1724a0e8a21cf97395392173d045c58fd589a395f2d180cb711dab4ba7e0984f7a9e5172798777d00174b2f2be25d8996d022121b69614248048005d97da3e6c51d31ef1e0c6936abbd9f1bb9f2e390410336c5c24454eb1899a0514bf477ea385f174e69264e7e472b44bbac99b1d63696ac2542b4675dab29a51ffc428b0c308fa0905c944ec26f5e03a41011487596ba94c2045714010c141ff9ee9011ff545e9ac66a42ac53ea9bc561a52867c24703c0f0302b45e1b75cd2365460c3056faa8ce6bac0ef6fe7e83bd3cba3437d4a5728ce823c6778bd81ad883b9e7d502f1545f54e01ca8b4da96a596922cfd06c2f2fbc50759babf96f31f0748336a4416e536754805d35c7d4a41b88d940fc0a5d1ec6e3abc07534dae2992b84dcffdc154213ca56da1464a0d3a43a3f71fd617d2608a5ab1d37bb87326357c527cea7290006cf704a85c1523efd3bd4df96fc809a639ac587da51ae9ed20c2862c0ea096ffb980309f7d348cc9d3bcbabca4e5175a8a0aedc32426999401976251faf6250dd6dfcb46a97aa6727f9adf3d70acde8be52ff5ab2abd0b956089bd37abf7b1c5aba32311ef63f1deecc9d5c7640bf55d44bf9be57753964e525a0b354eb0af7188875083772dabdf65f5cb0a96e28a5cf48bf69de63e3f3713628e203dcdc61e0cdf3980ee26991cbc6a56a59ba01f057fc140f543971b386ff738fb0350367e399cfaf0e54b56bcf2340062384e3d0251eabf2612459dde672485ad59e65ea2505f1322c495b522e208db2da70a8b755697d4008ad5205415e00135bc6dfaff34a5ac0ed989201063ec8a82c93647cf850e5299502251bbcdd92fa6a92902bd3bc697641e96df5b850c967e164290d0cbc7987499920c99b3d1617aa6c2f0e11a5a84e204305b17c0589e14f2c124f10c2be787e917499c413aa9967bf1b956fd889e3b9acbd54a3191e02e2dde8366e7dda0393f79850d8f1b089e83bee406f50e990e5e903d06a5d2d9f6ed735d56dd1fb246afcc92fdeded75b41b1eb2412bae0ec5582a2f2f471c518906a9a0313f3f3b4339b61f11a85e593bc39326a5486f78a92e51706085b79244aab9f307b990fe600b1aab02a7f4011de927a7e1de68c40c50ba3123bfdbdedc0b5fae555e49397f8b254f33ce9fb256e914384390eda3aedfe6645c089c62c37cb21b9570c767cb21109a4f98559df54e6e1dcf3819a32c73020a83d6e783470f447e07a1ed9f612f87556dfe59106ea0a8c8d7eaeb4b2b3d3f4490d3b1802d25263b8734334b7c40860a114adc2a87d7f898daa3503c464b4c31ba28979c7ffc1f55d20935b4c089ec0ca511455c44108368a4a82719454e275bc92bb22f4cbcc968e432f9485691b985828aa5964034187d45f8bc661b41e7f976bd7b93a67408f6c532af33b0863279c153999c27f0570ce2df16e5ac812ac9c62f8c406c18705975c53a7d499d079854fa315ed2ab94449be6b3709446527c032bcd9c5c3e4db13372daeadf4ad64886c329fd61f683264a9d3055b6ca4af284bb248358653d207303d5bc02e43a796b21fc0ddde8f6ab70354194cbf1a84ffb327972f5edc00112c8b04b10ee7cbe838f0c10c77ca25679867349f8c5bd4828f2d0b4618bbe36cf6b6e6557515e14dc48920748a972310b075388ee377371046cd749a181faf28830fa6a9706c0ed3ebad4aa7113e780a28296f722f28976345397aafa983a83f56b98a021d1fdd3c7d1606b44356f9a773180917d6a9cca26b06380aa25479e38224f4d010508f642b34a9b00fbba1b5a2f3a33ded94909ea1f82d64bf36d8b46eb9518dc26d37a7adef621b53efbaa3d4e8eb61968de9099d1a2dbad614b68bc6ebea55937bbfbf16620bdf1dea26f227bfc017272706061bb7769c687c71a33ba8a2ebe6705f7ec486063f0dca4b78462cfcdf8aee7f2a420bfd9bccf67e7fe57962c32ebe762501f865118f09851b6181cdcd3ce2cbf820c69673a920af3ab2cc53cdf79f72b5097ae85eaa2372a0d0bdd89e1b0360e13d95144d716e5a9812aeb2a8cda9b97c1803087e6e505a6276ba528ea4cb002dde57b865edca26da65bbda2c987b5b0895702315f2f3c1c7d47f4ae7d30ea08624e8dbb5131006861c9b380e2e458d54d81fa1a3aab2e1d70add25f44386e5380af0ad06313891f6fe53aa8f5aa3034c13f11916b4b0ba323f6680b7e2f076a1334c15f24a3daf25077a783086c1d3ce6f1041811b8c74a097d1e68800b432e4f8e99ba197cc78ec527b92ef8b2d3d61b2e228e8495caef28386f6a92408a1b08271832c8b64e12b6048ea88d9294fdaca6d8c6548ebd4e3062af4a1a1787176dad37d8c4d5ac72dbcbd0e9a332852461d04995957f8b7f024995e596547917234b89efa104e0dde56fa9c3dfee0fe66fd9a1da1d2efbb75ceffe2d95ec1cf2c6dede376080344f3514fe2d753630f4d84e5e9ca4b70e80cbe858c3bcbbb50f502539dba19fc7a11b152df8677b685f45ab8fcbfe96ef2e88fdc4b94d2965a83e54a512e234ee3494a91aefa839ec881b2f45ba002e036a781bc0d05f75958be5375db6be3d8cb2bf3ed9fa6bbe6188125885935adb1d089b9a0d01450d2e20d9e0208b4af14b9223ba0340b22d5d8e72efdc60e93b97d32c467df6641a902652b992da134051cd7f2ce9cd9c26d8ca91b41af6db7b1ee560bd5a28fb88fcad31aeb588cbc61b88c0a428fb098fee51e3096eb372cc412300e831bfda9677081cc6ea3126782ee564640dbb3c782ea364d01abefd7b9828ed79cf80cf261cdab764c81900947f42fc2338fcd35d44d45f5e5b9493497e1a58e7da3483b3b7edcaa4d8b033497061752371859543fa042b8164db8a1852229ecb88bd10f08874c7d18942f6e126cf536d2c273ada7399b5cc751b7cc9645ae29b41c35fa75316156dadf35cee05f5619ce7b22c25cfd44806b9102bb7dbc3fc9484319ab814655714f0eec3b47cf43a614c782e5f63ef83631135fb2be0d5076a1e3d5c7c713a900f40262e3f7b2f23e91cf5eadaa3930a25332e9ca6eb161c604d3a03071f111307c55a53d1fff7c004691a593c44e5245ef5220547f0ac46dcebe0338749677d011cd70d40b64197285ec7d65715a9227525b64ef70fdf78e053d35b79491e29045141330652e615d38ecfc940c8a4e01113652a857c750f8eec1f3283372772bb9f04292120020b4279ace9b3f81e7ebae0d7b7e0e5cdc0648aa2bb231605fff4d40522ef3b69570880fa0ad965f706880e9345043ce65c081e7b20e22d037d2d0b6ee20008ed374a16c04ddd220a703ece324bafa218ded5970fd80cb449689a50f48036dcff122e428cb3ba31e179bd95c921124c87ae53d410860d32904b9ab01110d27ed03389cc1485284ec5549fcd7973bc691d6e664c09033b0bdc2c9d5485f7cacaf22ea225f2ba1add85ebd2e017b7de68dd7b4fe7801f9bccd44fbbd790a8449cf2e98ae317bfaa6ad5f3fe3da4ad83cb5674e1cf817e7d8637fe12d5804d160996e0f64ab3165d142d8159ff3463cdc74cebec82b728fef32b43ac1dfc4598de76fd61d60f9c1f91fa11f03dcb4b62d29cc4a6a2a4121ff0b5be2e366d9ebd38266316e26599dcad32dd02d3545203c1554d5ee24a70a7c033c4a0c5c7dd18e057c0e134173126d0e0b0e4e615de115c5e727987d5d5926246e3124da6918c8426668b6e776ed467297fa9416432e83f19e619ed19bd1bbcf3ef2c94288a906efb9c114639cb63567186cee75b93d2f5832de190ce8d6491f955c7cd9b94957ca9ba887044e21a5f51b7d7de25386b5ddaec8690398dd26007a173c7c51a6cfae3c83494ed149de88a23e894200757d5b383351073cb169f00ab1380eb898bb2fe0234845e604b4ebaaa087c238106f232de44b9f03007493ce488278f39cdf0175c21aa678ae1bab604d261b8c9eb7fbf22a3f53d9bdedc244b5ed0de190a0ea43263c35dc37982fcc422910a09970e0cbe97eb186404de33e10234bf0e4ee2c2103fbbe0aeac39ca3ae4780f038c1ccaf8380240031b6ef60b9fdc47a2bf2969a9b1fa3f30c240280fb7f4c2599992f6979f962f60dfe56ebf3a9bf77a44bfaf7b207941fbe836b29e7303a4ca568e19ad625133cb2bff7d1ddda350949c5a90cad61871ccb5a94163c6e4af8304ea7ebd34a259efe64ca36d5ce3357a23df86a38b518be7805e491bb4cf19f78cd42a93427e9f7b4a71522d0695d742f7325862f390df99f0db03073173a9c85d2447f10414caff4d716917dc1d13cba0f9664362bf2e5cb90c6f4ad0dc56fb650233e983d619f6b1c2d4cabe4d99d849b44b262a0b38009dcd1e7748adec6f022a730fd6f03bb39cb9634358a5ecda14dc6fa952cef4578d0472a65fda81cae560f32a6111b16c32ab2664d25d2a49a2d4c105cdab71669cc11a6c538f9041b075469267fbece632c074d25e50330555a5f9cd5e89f3f6c579903d158313eafe028da37a45a64c96dfd69d0538a67b38e9a0e4eab4494ba1f1e29dba8946fc399d4e4e9928dc0a220eba2800b6a669d720298a5ae0238d2f2686c127a0ca8312a060b54580ec7357c25fb914fb777f975a00ea90d2d818cd41a4c558b4dd99a891a90bd46c029aa28343f1324b25b8daa1a63186e8abcee49cc99d043592f6f0553582ce620067552d80e7cc4e5b3400c7fde1cb2c712184e3f3134b86bc4fc0e2c95775af748217dfe73d0628ed586b181474cee24ea044e2f3431ade23a64b7ea0372316a56e6236847d973f0c5d3a23ce48da9a774cdf490fa02757126fe406dda5ec058a8f93992d2ff1f61f62c5d492af763e620784139bdc100041db40953a5be1216fe84ffd0151d1d25c5daf330f36192d4ec6826ff482954b5a8b2af65f032cfca3dc497719a75b7aedc6917e289cee7afb521bc3363be1974c701d3686cebfdb28254451a5159afd3d707650cf99ab47f573c61000929642dc18daf57f2d4ef8e0ab3a4a9b67d593435cc684aa577d960ef49490a0ec91034a1432b203a602990c0a6b6a20a4e107fe20c0649e245bd37e26867d0f0cbcf26da2ab197287c09ab5066ac49b5d82560dbfd604980f118d9e3f1e7fea8520f3d32db79daa1ade4efeba2365129777946ef70b51818fdd40073c44dca2efe8f0178b466ded125314dc985a3da3f3c5cf995585170e2f7c3161af4a063ced6636d5ac6fdfd781cf7c21000f9dbc24d4853c4d3bb3a6bb67916bdb1441b8a0dfc390db8ca4151c4e54203d77e58b7e5af490cae5fd16e76e28070f511ced4566b2f4edc08241d5ced438856174cda6029a12659ddabb5dacca5f93f92fbd125384def55f2120aca7df2731d2d596ca92a41f7a12dd265e8fe3230b3f1b4aabb2f1f1ab5f194e0d82c7c5dd1ed521f212650aa5c65f9da815e903711fa7145dd1b0f54a63121f3e9d78936eeb174b1838e6ba52b7b86a345e9abf67817ef303d5e030e35b2365a4e9a016a2f079309236e565f94e39209d6c2fb03c7d4ac9d7ef551bf8d9b1c4fa04b8aae05d2f8807aec18fc7138e1aa4c6446a570dbc9509ed66112e72d5ce29eb80b75bddfa3d7527ccf284453284cdf5fe640a36a5adbb5e366fa367198ac936e1ad4013d04c739bf4924c9e060397630d28439d92a000b522bfd14eeeda7bb26266f1bd098ee6b540cb42e561c38cf862b0b34737623147baa27b38d6c18f48d7d11b1aa31df2fdfa19e3bcfca48601b5ed9cfed6a3adb9883e68ab7816bb34f7bed58f119372786019d1834740ff4c2b1f73a8399c6ab01fcc02cd5a74a1275b51baffc9d132a5ea53bb94406613af357999fbb702a284d1b6f622101b76ccac0b016872811bc1432ef1d1b7269748702f2e1fbd5314bd659be47b2ee9d7595b85184322447218bc50f3e5bafb22c98a10a2083ad223135dce9e61c85e28ea9e0a2731f9b7892edb80405a84a8362793ee0714ba69a52431754bf05a80f9628f220941764fc33afa1528d4e66981da36c3d22739b98b596cfae32cc8153ef0784f29b03ec4d2a0fb921e7c44852c5c0c044152ef5cf1f8b141bab659f97ba997c136429a623ca33613befdf6dcf556a7928552e14335532b92fbe0009d891279f1e814692acd92457aaf2942d519566706c1624ca7b8aef8ac106fe1c56856df7dfe5ee7d2853c579b6c36e27e10811cd15960d0c06aceb0931ee0d17494dd19e3140daef98f692f7e803cf5268d7bbc052bebeec9cae4c5b8eb23b03acb889634647e89a18797f16375dbdfe5a863637e6c300a64c1583e0d58749585b3b6c94ada48649b4c14250e08e82a187d1c4a64c46c264beb00f8fc1b9a7419b50801abdb14f10d893e7cfe641155e40ac1917188eb349b37b74829f2658105df2606ea39d888468fa60fc6f26e34f8b2afb28dac02925ee939d226be345d4bbbd28dab92c8628a0e7c0fbd45201d22a8e9cbeac60404175a27c45e7dbcc667eb519501b8e0dbf83da2ac3485d5e5a7bfe2a329c9d28bb904b5e649694b13a4cddd87385a979c2c28664ec2079e6809bf86e45c4bcbd6fe5ce1104920f740a04a5b5ae0090808c785afe87277c1ec85f718bb058fdb39d89209d23dbb885f5dcfa3e4353449874e5b8fc5fe7b31445389aece5b8a02bc8a1f5f8de09485c590515a9fbad81c18bfdae933510bb3596edeb65a4d4ba8d2cd2f3ba407e0aee84afd32029f30593bc1224e9237c04766c5f06e1fb63f7c8bcd76a75f2f313205ac58ddc27f33f3d9aeaccf2362555bbaaf918af1233682ef6513b224084a83108944289b505d87cbab9508b3ff97f7014338bf905590bf1f58ce4d3c7562e27d15d5b4698ee5bd0caf5687314fabd2abf282eff6c045af4f96edfd2d3c8b80116175694ca36ad59f4a4aa00914ecd9313056c8f074be03bb00afd72dd1cb457f1f396e5bf78feadbeea9e01c9f80a79146f88ad4debc05b04cff63d8ad80481f594195c255be87bc0647a9ef1b1297f287ac4e93aa7cd852c84ce04cf265bf06a132f8d38f7177a98ccf9133a51c01e0cf76b4241600f3782e2d86fac3f19de293f484ce789543c041e888094006fe118b4aa9528b06ff172e23aafc5345b2f66d18eb8d3e792e8f7755068636d568f2769ccd8cb0011e425345c92897858632670a8dc3f2372742880e21d2ab511ceef51045cb375d065a3844d45ca19362fd58de1df8bf875c18729c3488804a160d0cbb516229d0b73b20e2c20384f3a5aeab218db8083e4fb5f6ed8d9128103ec52b3a566be5b36772a74f927f2644aa63bc00059787ddbae9a6446855af44305791b119ab823bb11126d30fd3df74e67f621b334a9a4d3278f46ea6e6fa7e3627a58d92e8330f839672a9416ba0e6703c94b23862606746b35dbd389ff0373060b0f34285568b4223cb09a91fd8e750c6e60f5ced859920612647b98378261ea42f0b0293c749a32886cb18f9c7c625511bc23188586dbc9230027fb95089c9699b3aaf3b11b2ace297e4f4d1fa61a475f76b1b2011d9c5dcf445c90293d1264e5af843ef6bcc023bd90da189976b4362d5325ebe9e75b61a072756c7d67c5b63f1c58cfe340167b4530a4d9a49b67429833902723e38a020a5e79cc0ba281b474b360c6200551805817ca13278cb5b5db2fd7b2369d52b722240b1c758cd3c584fcd92552a1a21805056b65f8548cdc546e9235d155ec1466134046180a69a1181c26e4b978b0c5c83623f9597de9279a543c79db847ad581d0ef28ef940663a52f9dadc11480a8154f2ff452274eaee1629e823848f82525f3e0c4e435622d04d8217777146d8f2a078aef275444a351f140bce6bb8048b1bf0b6c0d5d8103c0765afb41227061697cf75cf39f207e9348ae66b0b29d865474b6e1a70ab036e936940c3ef336f1de2eebab29ecc5e16de8f48ec2e78b3619e91a33200c67bd704af9a6664c9e804e6033998180787ddaaff2bf422ceca5858879248fb4474ff7003687099553b989581e822e806e83962d556172834507f4eda08ca7162d1a1401bc2d6c2b0063c432816c01b23a837f0629b7731e02e56bea20b55a804ee65d5c1e81eddc5402cd7f69d3742b5047b562f47bf345fa6ce6b1b71591076910bfb5abd8be270c23a52d0346744e44083effd3b1841da849822c59d877c8712c09c6114c93dc6eba764cf26c7dd76d315024487714d43b836dfa8ce1cac857a8e57988679d0b4a7f3e6bc27d7bbaa7b57f58193854ecc65b4a2fbb22824bca09086bf4b94f42695fa2a158a1a3976cab612f9712221dceaf9c17cfbc312f35f9123560bccdf9a970f4674a0328aaf312879ffb4348515637062252c52bccff086761a55cbe6a1b1ab27209df865013451d6edf9ab8be5e640a8d12464b1c72eab1ef8082beef8658b09ccef11b7921b64dd9fbf6ef143be5537d88655e238818a9b1a97f28d74251c821716097460ec33f2a3d08c41198314d12e977905ab62bd96707d6f3af04542c8b56bf76eb4afe2f9d4923f0fa160888c5554dedef004f5dff7cf9af691fd3be5198c049ad4d15a1866d4b0af5c57a9e63c287a4753974bc83c7db1abcd3a08950a1a462c5c9a0ad9951d2816e7d0314c9b4a293a7b743e14f9035c379fdc2b8d7b9e640a762cf8bc12a2969663cbf3bf3fa4fb90ab632f26bffc27b910f5e64ae0a512f4127e995608dfc929becc2b077a32210a77422f195b91bbdf46bd726b07925bf770c6ee65931bbc8f4d5b59678e1c5e75d4045ff91d83e640c596a936a055c094f1fef745dfd7e1527f38697a6dc45137d6aef19d2f6fd03c9f190143a2911a882dddd88eb4f4627e8f02e438386ec4122cf07836970f09d58fe4012be673634d64de60550883668d879704c250afc69278e6c6a004b2529b1bdbd25a424ea4a38c6577fb03c113cc8db53d3f80d06285ba8fff01e0d062a14003dcfd2404c76acffe47a91518823e3c3754e0cf6cb2c815bf4f84ebf8c68fcf25727189b1e6b008805c21b83809ba7a450fd3ac7ca5371283d8fea51f778b69e91f15c9b144ce02b9f0971d9a5b4fd67970e957e98c52effa257a0caa349c862bcbb99583b04e49e7c14f8aa974afc4064f2eab017869260bcefed0d02108699a8e33e417a6519b878e6c0aff9d67df5c0b649fdf2127c33ba20616c001382cc675c305722339f3434a54acb0630c55408303c675341dce3a60bcff0b75f9831305c055ab8aa3bc8f147ca02589385558ce6a98ba00e3e357545db7d2ce3992327daa224ed0ee15c42b22eef174d49a0ae2c3f600155a0890502d4339a74a5822a4949e9d52c21851934c34f97bbece4558e8c4c74acc05a5216d2bf765bf4e55c46df6eb5d29b8495a81bbaba5142a457d90dbd848bb5eecde5532a62bb347aab89e24e3d855a6df5b341543f120f8c69c5fbc145f1d1ada0a8963742d41b149e92934bcbb89e2555d850e3a21b02a629c8e51e5b750d9307bc4c723dd065454e50c9bdccf8c75dae6e186538ae0d8975538ba2efe839d631f97a5324e57a27af50ea2208cd657f6c5ba50223d3d69a58a51a0dc5c6330fd817630bd198fe7478f85468d955f51a39658c06b778e164a38a914adb7babb5f638f9e31b69c3701735cbd357a70f9e47ef390494a461c04184e69c6057abb955bbabc3751be36de8b40f22f58877aea326e760eefce6d393243c9c82d67b910e361e79c6da225d255b897fdf619746a214d338fa18a0e53b1746be496aeae114d78b3e2fd4d3b23b874286d2068025fbf69588e991b8a91acd1d458bbfafc5bdcf2d657ecb3d9d42bcf9f0011e1f8d7a418e70333fbb6359ec247d6e196aef6d61b6512ca216ec52733e1344296f4882e274f4339dc7c29d60d8310683068b76bb7387a378c4d2420ed5deb23ad1f8167d94e5643a4e60b2cd8ba9b3997c052046fdf63b008a2c4f2c4faef551acf0c4e06cb510cb146237a65d938316f079794e3254cead3eb95f53974e5315f289ed90fef3033ac66c6db7e20908f19627f97c8b0fb09c6aeacf1ea1fddb00089b3d994135713ed13434dbc64202a490081d15ddabf64e9f8bf38f3bb0bcc0d80c2021690f57505f06ed90ef0cd8d5a83d3336d1534b2cbc5d5c51e65c973a747773277e739db9eefdd0923cf14542915d3aead82542dc06e93d8df88e93980734bad978ec9b80855807caaa928882a09c2f033f235a3c53ffe03be966ef3d89d676f376742e68f8df8f18db046438b874dcd319742c0b2e7c50a735f5647521807b691843b03f45a864a0a4434cb0662b8ba8a7ae0ac87de59d17ab9806f3cca42168454bc6af4584c3c3c76abddf0e5d356d5a1b124e27ed1084d158aa7b2c5c69b9d97c15fa0eea7b3bd89eb0953aa090bb66d819d95be19b2d4b5bcb0fb1f3944b8f130d609dbdc5e81f8be095665bf4af1fd7b51e2b84e5671843ee582403b588627311b997499375750212cc1f12adf78946aa7229f849286b1dc020057be002842ed918781d73d57347b34e5762f792676774a6c2112ad6ded6f189314b51549952327df87ee08f4704d207c85f20145be076e599c16eb34b78ae56182a6d1703e987c7e0cdd56819ea62377e740b884bc7becc1aa2c4dc2711ec19feaab98cdf7c575df95e5bbfc49d653a1d6d02cc7e25185190600620a43aa4488fc4e6aa5d7310385b879d6234936806feef9de094a040cbaf74e6b673851661950aef462d57fd095eeffb56ad99ee0e8a644b826840f8a9f56da08867356eef9741269d562e2c5edfcd1bc0a26afa2e0531199f6b46fe868812bc349d6a3854fa237c361d89117f937f9cd27ec78434ef6c930db8ab81e51486402221f4529cea234ff803fe6333e3d3b77e543000a0be3a2601faaf758c2342302079a527e29a999a92e59547e1d0574994ca4ee81e6da4401b7b3d0c381aaf6487d694618f19e52ced5f81dc6f059f1442b81b3a0d27227237a411beace82479662bfcf3685d701a3129b179db3b0ec9f89ac08ab7ca89185cbc5bc1487f65ce7c55f19208ac7d34f72ebb58710d20906de980a1e57319e7cb2b8dc2aa8ff89e50e3a7c433ac9911f4a6f698525d1676009cede0beddacd300633bda1d39ab7a71f413c59deb843d7f62c81d17a2670ce53a6005687913ce11da81e958eddeb8de6a8932506d151b26c5be449f06dac4a6607da3764fd1b747b0c45b3df653ed0341475ae6e6fe81ed4ed9111d9b60d936eccbc1bf556ef76750df458d63bbfc648ddc637c626980f6c368043d17ea1ae46bba1bf764b1d7b7c33cfc42534127b8926b45a828642291b9189620a1ba9682b3a43d9ec46eb86182d24e17f47da7325189f684427a8676a19c5b79e153544019461631519701b7e0bb405df7b17e1b9ebfe241121d155132444e2cc9c561a3acc72f924e7176bbbab8d34ed48b29eac15a207eba82b2074c262688beac34840eab4c6af0524bbaf059b203daaa16f6f95794d324ced212938ed035afff8f1e9ef1c54ea2a7aa74e0bb956b59929a9e824a8f281bdd00ce183db7cd72713dc05aa67801ccb18584fbcfbb69676c0b1c03b9124a188d4ef36dd8e5c8054017add09917a0eade2abe022585fc72e664c9fc084b1d6d5c1ec45d0187f4c4ec4537e171d1537444a731d62cabe1c64466f5da5f164503c584f396e6251caf20501581e92a2b57f30f275d753ee9a0d3b0bd549545cbec10d46be63fb8f3a408583bd10b53db21273353557e27c58b145e010e5d4c9e7dc82cb2b12a2ae11e5b7f0ebfb91ba06acb9856243108c244b2f2f1a81b6af961f96de0c0dca678a729348f13b12d159098d3701ddefc73166bdc3eec6170e62e3d2989d8365a3396367d30626880d642666a016bc7f90f278d7588f303608aa2a58543e9c68c4fa91ea9f173306cf0e14c813b0d98db3a0b14fc531753df9e709b3465ed8c8d6930e76241d46fddcc2861d75c5bc6ec07f21f75def3502faf30e261d2fe6f092c5de6f0ec983a5074b01fd2cccf1dd450a19ab50c92a43b5657b72808086b79585a3aea07cc341c88b17cabdfa47f547c4328c941d578efb661f8c65ce6eb4f01b9be278182c62e5765ea0887bc448ced3896536511b1be4bfcc60e578e80737ea2e0a2f8b83148bb98881bdc9a3c6da904363f1e06834c92f4e6c084ae392a5eb0aa78ed7568360d4b137d1e52e72f76b23e161f7013c1d683ed7c60993f2ea403f0b220f593f0712361203aba4745f0faf960882039bdf9a1d82fb2af041bc4ca14fccbcc64fe867d3f2d832c4a3801cd182ece7145b203c602a09e4579353d8a84bc22a630ec402dbdcfe086320cbe3791ae86fafd4bedf53d148cfd7149c208c57937e8b26ce8db3ac4117bd4a94f2cd1f52561eb15ed655cac198090c31ac19c70bd12290a5367ea1729bb277498043016e6701417030f6765282ef292b784b9fc5f1de3bd0061d3484427fce52c9ebebbff1798bf1c5413474fc1b242fbb92964d7d49dc95a054f34925a9d319ae03ec4f7d39b6db8d20b8d74dee8ed956bf688b6ea528dba377fe7cd2663106e4fc2313e27579f41e975b76974799a1d2c4d48c0f9da34e5958d86e68797bfa5cf2c9deee1dfa03f483ec6f0b3ba340740e500078e1e5aadd53d48aeda5ae0698135a8c100c194f02a980a53804d6467a9e24194369e84636a86c16729adbd5754de134540dcb991b6905cc65f538de69b51214b75d71c2378c00e430909018914cc44fb79a0c5565a49ed375688664c06a570a24c907f479084be888cfa625d13b849c86ac6b1547f0af0ace353f28291956be40b0c0debb3837a8b151546ef49134a20d4e4f3d48970ac768305b8741b92c9b3e94907cbb1ecf63336174cccd5a26dd78808e32f7b015a02cfad3bc9ebcfa849f566788396c6ff7ca83cbff7532af8b6263b757cec449348939da24a5a955f4a2b9816f76b320f5bf0b46a71519475c7f17a68e71031fe3fa805edb3f3794aa279938ab34e29311bdca316e3aa9c705d6a1b4bdbed9fa6b922aa12ddf6db4b9756f055521c01c42977894cc6002ca84ca7b20a5f5562fb2d97a889e7b30154e2c2526ea330baffd87d69501269fad58da2fc3b453e373beb9b8cfa94e82278f38c303abe9ce6785e271acc73d1138895604dcfc6a2f9686b1854352856097a5ddfaba77838c8bdf35a81a6e6c7359ca870c7bd171d657f7e81d35381c8d3da73589b48bc6a8f24f0512470e51970fdafaf075a8a3743f08940e84562f8d24983c504a6d1bb6ae27c5ff3a0dde5666c26c05651308038dea4c06f4c3956ddc74a5c455a402c1a2d5973fab19c008f7975792bc85e7baf4fd2b5310b1a02367d84136f7af1accb94fcce6bbf7e761beb8341e64c1ac8e31faa782b61b285282a7cda76663cd72928c5e16785ae52e57ef80ea05e618df81659eabc3c86107829471b08811d90b00d172f35842f42f8588924d9f62f4597c641fefd53231516ede30130c1f6149d62f879bb549336201bd93d36dd5327f9d04f9802a4862919711bdbeedf475034ce0e06d1101300f8170669edbbd9d7c17ffa001dd1f3c8768777321eef3447be7e5622710d888999e8035f6f499d1bbf8fb1e40bb7458792e1b6981504711b65025502a23a67c62e8be213efebcfa3ca29943f771f17f8c7dd6b6ae6a2f2a0a4e86ebece35f62fb45e8907a448110c1ae53d9626cda2268aa2b51e8322177e18d6b4f9ea6dc6eb9b2261c94b6f9cc7a85a04d4e78bc7b84d764e093bc843315b9b945fa0db81d1447dd3db50f01294138209c445eae4c6a0b81ab24a21a3a914436c4048909d026d462f71cd04a92adc9d74ec42670d60a69bbc8129db56d9314271fc8cffe09e4488d66d11b1e7b9a579a4d89725dd88ce375931096a05a0d64501c8b16d176055b6293482413de0727a571550bd48489b76f6eb9b59398376656f2c81e9a439a0c522f8d87d3f5c6a092f565004a18fc6d6d29b49e8d305d5ffca0424511e16f85abb6dc1be9fb21c34aef5013a668eba15d56dd5d0b3353dfb34ddf3e4b0342aac33bb51aa0d920a2ee2a22f2716edc714d493ebd0b04b80e952005518a4ae662d5ae06cc53390ba16eed3f5596dcfc66fc329934561b6644600e87ed442a420ff12a4f42f3b17767fe61d7f8ae202c4431a2a7442c2ac2c70cbbcd5dde8914d274007aae806aaefe21f1d6da0e74f3dbfcd08ef737ff32469f4c13d575d02e928a9a843b95282a7c459f35bfc54a7c9449431a49936f575f55fc60b0ad8d16095afc2561aa0ddec0141d8ded5602c3b0d692b57ccd152d50e5c9a22ee2cd562801ed45c7897abddde1024e36dfcf8dbc24b189689da770a2949e9dbb07f76e174ac719aba6c2be32bc7f7a81c82fa592dd278fc2458f261cf618de1fc5d19b5aee43d1bf3f7d4c0bbd29e405ee1805c6ed6646f30f98e19da319fc0986b56f2fe9916c9055a6fb8328ac20147a37b8088c1a3aabb53e507f74914020ff7c6ac13d6a01cadc27959c344ef4cf9bc5e7617ad34722c013c9a1796180a0e6184b253e08969712e36e5d08249fc28e7bd7df48184fa8f94cc3e30be08f283daf0b09835340f15540f622d453f5858e428949183d129765170868ff534732244cfbd2aebe95669a2c1e1e5b28c7e06e0bc1c5a64fee8a412a76ebb1cf7cceea917be3105bfeb4876a72d679ad9de826c3de8fb584ab0c0db9b43b152eb9810bb45810dd30d7db1214a40a6dc5069371e103320f256603319d7aa290c4168b67982b47ea0dbaf99b45bcfcb722e37501af24f1cc470a495a6d34c9cd5f23c976880cdea73c818c0d9a373a2b076714643b5e51a86afec8eb04a427bae06996f7273f62b226b5c9b74360aa47049fea38d9fdc0ca6d85a61b9e0be433d4535bb2f4914cb2a83e3e4180966e422258fee5e43cc263b57aad16f13ef46287be140940cc4101570cd4cdecd9214202902c1a3fce7a8952cf0b12eee531e05a4ec3605e55f64696076c22232de3d013c25f6e77b670943178769376d1ed1612fff1cadd8f748d7a2a76c9640ed0c7e25ecddba77d54a0f8732492cae37e0988216b077655246ac25ee432f5672800c3e561a61bfdc4563f257250d5c9980a87ddb4e0b7e0499187790aed7eacfafc9b4f833c6ff89f8b456fcde5a2e8de664b58369132d95120210c14253918484ca4b3fe3fd63461b78e9f5251dd2e5976598e3be1f40824426a46a472ce8883e6c742793c068b4bbbf3e39502539104fc4d5b77f7eb2db70219140f88a86edc379f5d16666d098848e4470154c0827fcf821afb2f98ce28cd4c606cd8af4313b147c3a1a333f053847aa4e1f4b6fb7532924a4c23f2ae0292310b0224def42ca9b399304783a167856399c980d08ef602c0fbaaec8b79bf37623c3fb339957811cf0f03ddb1f0f9cd4c170357d93f6b1708a5440baa0219c09d9b4b246b9cb0f704181ba6c14b1310b9b9b4fc2ac893a4063ec5ac952b49465830545e3dcc407303823b6457b6451e8294528699428e32a6e051b99d089fc4b59b170b61b80fe4e72a56191d71e3b626e5490be819724b8225aea4d0f360f97173b73ac565e1841e727c9fdb24693649ea1ae96abdd9baa24af0af336f3df8a5eb6608aae84fd2a4720b511a0ff83b320cada94e4af528f6b9cd83fa859c89f6b04fc21bc2d14c2ca3834eec3b5e4db1811c25bf787a4d7960e88933d4cc0e21ca46a4c7173ef4a43d733ff880438fffd2a351ec57339f2fad0c14cd4b1b807d3409826068ca7b0d0ab7bc8591141d90452827023597125bcb971d557f1fcdee3a51df00241a0283d7268edcd8ad00650264e7e0a9806d5bd00cee071d295c7312be1e9b8700a09421b10101c6cd1d4357bd227643d622402304a8e52032a020b0e82d0c33ba4e36985616b156efeb910b07d4941c1a66d07951b0fa4077aff0cd92604188c38c4c59277fcf297e8030f67c84b9cd4d518719957c843f3d3ca670e2650584e128ce73f0ecb03b5e60aa68131abadda2e54c4b3f24ba9acb592993469049205a0d581f2ba51926f1c9fff99892d592b3ffec4cc6903d71e96ded455fa28037123998810f53871e373f2d0657b0367827c5048c886436e5322bd3f6051d6005dbf6e14a3d246684dd15ae644a56a269fc282c673b98106865cbae473755e26a4d08e4502d1a3826e566621574cdb9275677a4f42c0e32429c03d54a1596654b6cbe9d41e5c393fc666bed860351ded703a9bc12426188cb1679bc5297b1dc8aab21318e4438875b844a1e049475bf46515bad513407a9472fe5371dac5c5fb23b2391a626c359cffa95462576baf4c714ab96ef6bfb80c92acdc0f7b003de30379c1534aefe4e0b909b5e3dd0d1f427de1b5b0aed6795c8a0a6dc073b21f1e54c54f850ffd303d2c56753884c92a806ae686dd5b0886de5aa3aa8ad69d92279b6d61607ca19935948553b61035d18709b344f694543e817e2f380252e377200ba30d03e0146a32be96551a9c48f68ec3722cbfdd5a176001477a7a5139517969e813f0b03ffc4ae07f7099783d490f469e352c6d8a2cd8669375e2cd09dc138706b8546eaee9440b5ab50154a56cc32cb3f81d6c5752387449a2db355cf5707e117c30205f185df2dd97d600d7283ac6dc6d14a722461251aa74a939252e0aedb45aefb0f8ac0b7ed6ef20fc05edc3d8b31a7e6395e5db95817d463d0fb4b2ba9280a1c25af4397355fa19ec7297950147d8baf076d7d5d05490a98de564486a7a568d80a8db3e8a3c14f3e6467e5359109e1b15e9dea9577327afe68ba4abc26d8cb95de513ef132c75112cc8572410075ca1bd4cd5e0aa67939ba0d01ee47a3684e29f29be3fb3128e1e66f4c999bfc1f55644dc327616eb204c8ddd2e1e270144d35f80010060c0f6a83778582216bad8477309874a9327709b347bd9cf73868e5e6c1fcc8ac0c752616ac5e35f5b253b4804098fcc14c1766015397433d0743be4e6d9115e4d52c7d3632a00ef5fc4f9bf6fc81e2f3891f0fcb25476a657f7e4dcf2146c4a0177607f457b55f0ea06c1b7230a1faf456b18bc03e0b7d9ccb1bb156a169bcb9a2139b22ce65bcd7c06b2e4e5dd137513288020c8912e941aee9eb9c0a80240677e45a2a85379efc5963e884a916e02a8530c3d6e0fe25f0f2b460991dce2a7f76e081ea5d57a52124bd49e1574f382cc2a09d6751144a2a44799c27c64ab599308dde2feeac809d11a57b865955c96ecf1328ba47234281066395e691088840c2ff87c716e9cc69cb4584c9a4f687e9f459f85f05f91434515f980aec83b4e0d1a55625183cd8d390b528b855ba9c77d994ce46b171d1cc9860d348058c502e5a8a638accb4ac961ab1c323a442bda2c7f5b41b4fd16d637a7a68ab7ee29a4bd030563a652ec16bf83a671186d7fa3ee2d2d12b45c9a87db97818f4783bd93e14029b41ad2ae463e93eb9add1609277fe11e436f183b6198a31b1e1cc9f58a15ffbbe2de090624f392d3441cfa635f990731b0d2dd563b00f899c73520207060eb36eb8dee5daf369ecf336c8cab2b13ba092c5253c3271686f16f0ccb72b9a4f6e3dba59b5fd8de1940020439f897160112f48128b658a6a153e9f62456a5205ef70f68cac1ecbca2770850325e7569595615386c030189e58e2f7a3b52246228228668878680ef9c424271b5d78a9aab4cc11a834a437b410de57116ea7a6958c56904cb39478a5983021906948cab433f501f87c957e24988f51cc14eed692ab5087de391e6a3fac6c130bf1e1ce732f664738fa7bac60f221db1084e634d435bf1200f2de216c5790d5c71c1945a78fb189958148006515c8bd307188cd92be137636892fc53a00e7d89228900006fa3f59f8fbe29bda594c74c834d21411f6a0a5286f8ec20be7a5572f2ed58e027f0745e3041fcd482e28213316344b3a9444b327dda97c2d984aa9a47d12c053f41f2e70239231909b47c309a22ce72bcef2739c8b72806ce3e9eca6b05e64b609a5932e69e88484aae63db802bb9586ca3cbe349cae8ad24aee1a27134085294b6f57e44e26c99d13905b38a9635725a59476166ec0154521b0db21973dfb13d023c0c9fad2f946247619f8cf58a242e8ab2c515468b9f1b4dfce78bd2b2f26814a4b964638e443038d6c8340a74063c4505980d805687da2f43d431bcc65c8c9627045ce6a689b185d7978e2f6ed8d2158c4861bf4fe5ba13febff357da0955d303e7327224317958aef57fbd4bd5a76e40527eaf2f199e48e92f402e0f46864e7ecaf2de34c1452d64a1898ab0f5e432df2913f603aac8630a986a47c32b52baa0bc4844a09a893e923fc2aab532dadbe0f7e7358bbf971d6a8bdd0b53aa4edf93e613c8893e638bb44d268f39a66193cb5c18c075c514288d17e7f8d73815218de39c28b97d7fce991e161a5a4dba1311b41ebf5498f8e98aea90d13816c2547b95a435467f77d71711c306c92102a80331b0d1051c1ee83a96983de8f21ba58bd8a0e0d14c77dd96a6b798d4e001e25e2cc561ac8471d49ce6239f3f1c246fb009e3efc59dfb22019177804509e075753013f6afe48dda5d9dd9a558f2f950957fc90513bf8722819a1f3551c4ea61e8ed11f0e9d98ac86312631cd456c46ffca0fd7ab1fc537c76696934cd136c5f1e82cbaf9e05c04079f4cdfa5a82f1d5dd7cf11f715d00e64a1c8a285ef3a19e7ee0a5800f81edf64e99600d8176feb1f3e36bdc2456210b265a0bc781ae061065547c60e947d60d32566e2cd9e1caf8c2fc244b5a13f1081eca22cfbde37ca61cf81a7080a30697e782376afc563a9bad6edb3eaedbaa7e605e032acbb2c982c00d1db3b18d9993056db0ac4fa42d0aacacba40d072fb0967cd55bad82bd0ee9f7a54d022b2085a44058d40bc5eaa2a597c369e1c7cf1c06642bc8c1a8f03923bcf8cf4138e8f4dae5407175f96bd44e3c0b8a06a93585cc58f10a800fe652333c441431b610926b40f1c1c0c88922cfa2b28c670034483f6afbb7bad2c22a860884fdf3159a3733f8c241fdf0abb3449e807a1c13cece9fd332d4f6b748da047f1b0b7072974451aabaa16e146f72d345ceb5faae45b10173e9fd3d91e838ed5431dc32f5fcc502dbc0b0b10ea7944c37ced60f9642b7e8f3f6e5399e9e0ac39b92b684929a24b752023cbf3ed4ad6a7aadd013a66eb00c5cf9c8141dd0ec7f0c043724fdf65ab10c2adcf899031655ffc78dfb4a1b1c8ab29185ab36b4870ee7286c424960b821f82fef8a8cce8e20eee00eec472efda9b8631b6d8cb4ef35f627f4bce8386c7a4292615980568018d1c27af4c64484b64a5b181988f486b9955dff31bfea4247a0d2bb0135b39a438884af38fbc68ac68d40cf4021270cea80c726046a3a850906c1527acbe03fe33b267a9f52a6e239c054908805828edb9063645b753a2a0f5c9414f0547bd586b477e2e02803097d298c0e5111510568eaad715b6479d84b10d163e885504e87866ffa67ab677912f6176bd1e817f1ba2ab9d9783074a3180d3a8f52098e87519b9f75d241e1a87e6082a3292e5ff206736e051562e24d65244805de9ef0efcb8446a8dcc2b38b9319fba3adb2a8c2fb920f5d77d2e7d982f3ed282d9e10cfc8dca217a1ba603a60a34961a22a614b03f5d6d663d2e3f98ca0057f67b86338ef0c8d0da432fb60d4e0ef69ba4fe51401a184e3f445e008723fe4f811eab42f1721430753ac573eb02bd705aca7d5e20cbabc8486d9fb3d04b83834829da82f12111c487cc149a3ccf4abbfa52c910c0c37c32ee043d45b117a7708119c7762d96dfa72205eaaade70fad87881cc7209b4d72fdac8cb9117761cb3080022fe90c01626abb192d487e393d16f7d1fdfa0b62ef8702c07837205933166fac4a75f77a0e4d1c90150946076d1b0228d1e05e04e0608bd0491bae5124676cd096bb8ffc87fed6e461fa7c9558c43b5339d70a842289ee32e5c65b391b3712dbc67f1e217045efdec03dfb89027a9a6c46d8de0de5482cad0045c8695dc886808b58768480a7bdd77657a487e869fd3abab4317e852a72b91aede5661684413a078a876aca0737f3e3296e014a0cc7d1d9505d62503d0302b60e407af1cdfb90a5203423d62d36fddf0893dc453b3db95a263cb5db1e9b3a900e42e106a04979de985f0da13abc44db9fba3d9422932b29b5f801ee7702a1d181f48f233a634c6a0a75046d48ea02c71f41b9d99b143b794f9e6945570a3e96bb4adcc71c8dd87f74d91e0f8313f06f8c920ce05ff56f4d07bbaf03cb59a0585346e1e53fe362375d520fe91187498e693f6cfb8d99eac762315ad2122d7e75f32cb14ba60899a2746c3d3d48145f1d8c9a09831cf840e8637b044b286524af97a1dcb93fb54d468989fd465bf85f31e476199f495167d11150169408bf1e07c5188a8fedcc8fa740a33c1823f7522202635a92f09ff7bd742bb99719f29f2a8e0f72b0a5c1a7369ea81949f90f0cb9fe9e965c62c92126e7b4e2704a674c4051dedc18f7f76a0543ddfa6c221d5f72d6c6eb0415c0455064a1a028986c7f180e530108ec46b79d381839844851799860c751b0511e7ed073b1876194cd6e7c7e47abc2048e75b7e44e0044a854d407ead4f5c04c56fd0505e750f25096306ad2c54b3ebed32b8325b86afd9d3e76d3b2c08067d3026c26c19b758a70ad12c909cd605214612dcfed65a60da3000854f859ab3199c755484f7a326f6f39a69bc59336d1b629c8029c704f74b2c1130be168a1a69e13f5888b60772ee384a6ca693eeb3a248cd8d1467d6ec2455fde585abfe81309a815599f80a3035a1b83ef82cb5d1dd0e2cacac042e7bc69f9fd095f9825c2fa6951097058e0817351d0a7fb49b2a52f689456a47bbb7f2bb717567f3b24e3b699dccc76c68ece385b39dd8d1be55761365c5d91ccd746754fba6ce9989855c98d67175004d0d08517c5a95cb95ebce3b7765805124eaa965d399c652e2d8ae3f38986f99642c559ae9639d98937810df419f8c1548963eeed1490d7f5e6c14be0e8e40e02e9c367e61f5e7ce2e52b157d36cff94a1cc2ef8ed2da735f05f87b0c261e5753fd8dc90c7189fb213a017785839402d81d713eb224c2fe5503eb0ce3a3a59e32c4b83b9fb20b3c34354bd44822503dfc8251b6c9986d3c10e60c13b0886bd15187889adba7011f368ee01f94ae6816e6844c4ebf2895f2990289858f73114622238523a75007cb4d989d53169287d4eade8e6540c577e85255967662765cf59b4eebc8bc6277493147f0e8b8c5300b4dba64202d502c1ae459a32df005d5e0e49d3ed05e55a67c44138af3dc5d632441483edf0e38a2e4cdd617d2ab77703bc6096b5d7aacf6e2df87cf7cfe30c900383b470d4217022189281dbb1754d92a93ef03dcea33e285f1561971a843eedac30dda246abe26c3c1aabd0ee4cf1874d45782e2be38ea137f91c2b489aa0f870f913880130f8de1ba75a4d193b8e5807e6ab070c3b27f1ee1464e0fbeb60125f918254de937d534ec14b3713c8335b76d0e6f639bc6a2c383bc19e497a6021df9db8a667a74842922a36e42d9da4ef46a8478179bd49f794f4565c9af26559501a2e8a7c72ec50dd218100cdb16bd0c6ea2df247de299c308f65b32a3627c663334483526a36e36441702e112d6b7c4f6ae4f21477a2f009405aa29b2a03dc889a147e0044d6a87802290e33f5676afa224c75908ba5a555c5823ecb7d12cd9f9649f230689b40d49be5da70c6cf07c3ec0b10767f5864fc208df457c01397055f464cb40947a4a74b4c2d4bbcc96144990bf631e2a091856b2ad3ec98340f646e55e9729fb8a283c6a23c014e99a9bed6ff466374e6b8705e4e4620c4457effffc16c876bf53e3fa1cd680be4d92d54f06f14ca44127f30670b531f9be81adef5fed1f648066f1ca92fddf057fffd43e9185ebf2607f9b8b9a461ad419d4b7f173c2dedfbafc22c4340397ddff8f09a10ad4fcfd3324640970e8e4d824cc6cb2781ba0f87ae6d16b08bd22f8844f36659d6c3d0bf9e9ec577398e9f88ba18f5f4b9e4de39a273b76e6816b689e29bdaf8e381b34351dbfd1f802a3c7097fa4662cc255a992d23b08dd3cd94cb65ce1e77f45b86693dc93ac766894d18908651f1b7146712184bbaf72b7e7541632dc4a3b64e40895d613ffa9684617b8487b5e1427c8bd6bd2d2e0c6d2b4e76e1ef66ebe93908e7a0e884840eaa3833a628be59e9c7f40ac090a1c51a0ad96fbfd1685d8fa0e6fee77454450eef71415665aaffc7ad387efa3d2c58e6e597d38ab72a5c0049963eee8c5e6b0f9eb460b0ee3731f867a2401790c7ba21d968f9b0a1b9f861409341b5220d80fd0e87d5acc981b7aefc28a66a81c110f270742b69ebdab31868129cb7d40bc2e735f6170fed119e0ade42a1c3ef606c4eccdeb75dc82755b32ec3632ac83580f929227ae483dc9d0fb9c2aa6098e007020ebb894c6f0c1a9761912054c48835f10b98d0f4394596fc4f39182e9fc4ff07aef0f65c65c55098f77882cc03f301fe70ec24349281e0a71c8a180152f0e1d611088908b730a336288f02ae7b77f1fddfab329054d5c804767c84b714e7b1f22592f6711beb12ab4d2ca6c66e11eaf96caca4cbec15691d88c09ed86d97bb34921f1d31857db749b442b316b429821f42912eb243cdb649648f1f02dbec3579e33dbfe39e61c65e629e8d5bf9701ea405c56bd0f7a24c8bf041573c18e0860d004e9d4505e70623447e95d686ed8da4f4e19d88454c7cc879e37d2ae0153ee13fc8ac4662fcc5fbee5d317d5c1431c9d44f1238e8a09c3af3e3cedb8acabdc0433ea75b57e4ca46f8013333ca9cec1d28ab5e16f5f7ec838c6bc9a252448d595faf83133e13f9648451ba2301d818e106c40bb49bd46e41a5bb8c6a742d49f15e71d3171c72ec28e00811f8aa0492c7f2e5f022b3ee3c07dfe52cdd905c95e768e0fa79884b9d41f77da598ba93db6293fd4a603a9fc7581ac6567d92e396c47802646e3f6e70fee94d19913643f8abad6f1c0557167fbc6cac895190c1149faa689e00b96502367880d01b128411dd56bb62d8e93ebb38a92e9f12fc70a20f73f230f391ecdfd824bfdaffa2cae6892ff29d207dd37706c3e2c2d2260cb82a429c50076e017b4d0351c08c57a94f26b7ab41f4f9d66b13fe27a133a8720a90f04f63eab0479dcdc71dc6e034d0d4d1f08d5cc50e7b4fbf6a05fade7f290e3007a20602bef46f4ca04e96cd9833910c5f5e1722231369ae315ae18e103c66da8d5a0950069a5fe814e7aaef2c0eb63fbfda3bc8c9db06720384027bc3b5bc596f279e693510fc7331da6129d32ddf7122ac516d2477faae9009548fb18c821834c430c57d27e311868c867ef889fd8f142212fb38d73acf96058c7f11523407f4619f35b1be8c7ad268722a5e34a06a7758d01025f3e1e972d2efd03686cce60671855480cea1fdaced74530446dcffb839ae01f25490aef087740d9cc0741bef3abd05da7697b102ef6dba97b717b93d21d6bce76be248dd04608f1b7e5bda5fbbbe4ef646b9ed4439be4476d2a29f97cd00fe64d442eb8d97a4209536c271c83b1ee2e46d06f2d9920a11dcb3f2f51a98603352ac9b6c181522f2388eba897533f52281bb0f0ca67759e929e61f9c7534451083c9407a2b0ab2ed5680fe19b346d0d3a6487f976fdbfa5393322926ed6e73916083cee5ec826123dc4ac0a982505eb1c9700bef7e2c7d2b640cc5018d6f614fdf51a84ee7005f944d3f10b03330885306748b41d7a37d488ce6bf5d1d560a236b9b0b8a7429845711255201f28cb3278dd24cb1bfea4f40cd8d384ee52e2a1bc6a03381c83b2dd03c08c2c1fec95519cb6296fabb03e6cf2d352879e1ad7658d2097bdeb22d221c4f6d36863c1b494287b44f0f281b7387c83f9f8785600598cc33137f042ae0cdcc92a964b01debfba00f5676af82c06136bf1817f4fd1dc1ed9cb9dde0e02fdd097f446871093b063bd06addbc96fce06b2365af9a308e8c8182a787e6bb5cf35a9aec41fee2945ea782d5567cdef2e8e0ac77feab45354c48cd7a63e1e084b22760a75d27561b7334ec3d581b410190b18ec466d914df4c78aa7e1413694abb8cd89e9918687693ab34526391bafb58e85ca38a458625a65cb63c9b22f2eab7a58980f8eea6e586432ec2111a9a3be6decb3e577ed5be4257d3b3b4e462b6982a302694604fb5f13740cb08744abbb8bcd7ce549ad20112cd296d57b09de56d2bf268b8262ed577a2c89bdeeb0872cd2bba91945633d0498082d56aed61395cabc61b160cdc3c3e1b8816f354236d641d00765479d8d8ab53a8b216c64c862a7fcee1cce2f8136882ff7a1cc79374664b708fe208cda001eb2d52b8cda90156333810a3ca9f43b91d93efdfbb40f28765e5b8d1999c40cddd38475433e20f86c6d30ab579adf2d99786412ac3edffb4697ee052e2a1b6fd0185dca8c4c42c8e4252aab73a95a4af1b83c1d66303a25b698a4a079b568fc903ffa21e55ae63a9d7b83302b55d774d13b32b5e341b424a6339fefe2374208345d323c61062e3413019c074019410b894ef559c2ebf06a962c765000e6aa436842a5c70629e8a1d62d9f6a1d5240de12a487235da762f87b5912889ff0befc8e4293611a11e576715aa34e159c64be428283c5d505c72075c6af30aef198f7a5ef063903dac7e966902b5fd93752d06c33f2883a55da34c05e4323b2f2736ebed400dd889dfdbd00808c39644dc29a0fd62bc9082e26b0a0ab3e1807ca0d1b6917ca280219bed1979a630eb92364637372253b6c61a774b40f2130871c5247ba392a18b2e12f1e1a08c0bd394805e466ca71078b0aff074698d5d6169eff8371a8259c373abc88657718b66d56c53b8cbe151e768c5d3a5c7e5e61551cb1576f48eaed8fd2c007358726f38183a0cb8e78ce7681f7b667ba5c4e90c6467147f8f4901439834c54e6f0f4dc96fc43c69107d6b05a427da4e026a606d1462ef0a385957d3dab37d9308583090f160248fca80465271395a047c65c09e5f1647972e1e10766c6fe3a2d643e7931640a1b9819c5cf7d0f3f52ea6cb226ca918bd1b751b872cad564a981288f8e3ed3b04e6bb0a362f31168d9153e4b2faeac6ea745e625a79a736ba7c51daf94d247c15ca414ff85be9e655aa47e9b7a3afb25064772fdc90663eb0bfe57efa1d4398e0d274ef0ecef63a4f1dc37c92c080cba38bb1e3902976931b3eaf5c2dbf183dcc5fe12a97b67addeff98cf3f7cd97878d013784fa9e953716ec098479221bae42f9227b31fd948119ecdc94669719849931461c67abd6a1c4f1fff1730fc98dd2d53102f33515acc74ee7558bb8705301eb88745cb525804ac8bb9279f8473a3fbf31d89de2c09b06eb89fca9e28803c5b00a7651abfa271962d3c815f4d413871b08be63d0426ff0282bcceeaceb70bb6e269bf63051d0c916e8516b3f0c1803d13d2174d1f06f627122e236ee3ac428a8eb518c6b30e515d562348aaac40ef71012d968fce83ae164812db0afb63692327ef0515d022b704c9650e603c9c4bf13687ba7f04b5be7b53be3242e32500e22ed07677f89e4567b61f284f40ae2a0b2032ec4c2521e2435c2a256187ec2c9e6a304c13868b239de03395eeddbf1ef30c949b9dc535212cce81faaf00136c2208c2b6da9bfb40cc92eb184fdc229ad9817f0b1ae0c9a216f5041e841a5d527f2fccbe657830bdb5077fe3b2a08f0591a4539f9c8463aa3c9579663148743dfa8bad4115453c19d3acd92b4ec630b36ad525b9e229e244960b70cce2fe887eeb109206850b80a4eac87035541014c69d3daa52e597213242b286c18764dd71d2c12d8ba64a2297d615198d514c0ced07d03d7bfe7d0c24f76310425e9b9d98f0b8ca2226090d2e9743e007d881d8e7cfb877cbb47ef169672357c728949b38586c56b12240b7dd4f535083c25e4af25e0e12d22b2a57a6f590146f9d28dcbffca53b2c74ff072be3961fdc9e717076106595fb4d949122f91b800f59d6a8d49eec1db9804a3211c7ccdfe7ee46c204f28ad35db01dcf836d32252f07afd9dfbc403f6abff07341686fa193521ccbb5cce79d36114dc79b88f42f4e448e720d188a1e37f167921603424b283981b4a183a93ff04d5ac397ccf05edb8b06d308824da085f73e2f04d70b3f85fc0513719d2625c75303ff384a49f5e1d20dd8a9693d0ed8e16f13d168fb53b8a758e9201131b36b2e2ea8bb4f93006e854119a7e3074ac30006c9cfe267a371cd889833243b150e2e093e86161e34716cc5bc1c1411114798f399423bbf4af58488d8d167315a016d438987971623475ec1d3c4481ad0e554671cf442943b581388187c6cd3d508edc399e1f7957a5e6221526cd74033a10476901ce55db737ef9e07c86cf6f97752f5100939457d3f0072be4b40e9f46328fdff3631852521c8b43267bc4792bd433c6222670b35babb434411f86f4f4f2c92db06a3f5ff5a08637cf287fc034428c3f132222593bf4364a768ecb6003ac1d778bbfd745f094f8ca983015d52a043cc6af1f68a2826eee09e5b86f3cf4b2c1f036fd4446ad9f36aab9cab5fe3fdc61b7ee0b73456c38d967e60572b9450abb8b7a930a19f36c40dd94587927d92d8c0be33a78f7dae35af02653578bc99a69f842b98cf193d176ce8ed94115aa86688937a0bd6f6fd8b281233446c942bd203bff53b8d337304fa10b2c6a8a26b1962be940137ed7e3c5c5912b1ea7981279d05bd3540220d9973a85e6a58b4a55bd13e4e5f385460df79a7b071a4e640458543264c500ea8067ce6e1cfe4592c3c1e038b69822202ca8285c833590d5ca4dea0e3736b217208d702e6676c5a3bdbe0ea3398147ed60055888e0f2151244ec2d62be13afe4b1f312c0ad20034ffb7fa011efc54aa95626ea9be9e5615016bfc47cfea3f516a8fcbdc0c658e902ed8c59451bf752d89a43745768855440bc8ceaf66b995fecfdfe99a6604c80e014a6fe1ede52b5c29b581894d9cec7fec6964800728a40e76a9bb18bed7cf621704dbccff68fc75d28138b6e4056670f029ccf0079f7465415064fab6a5abb4270d7b30a779cadc05587e41ce0ea2055c964453ad1946b12750ef6963513ada1b70690a564989348b379656d97a14a694f089b200bd3d029dd19e95879e08dd8e92d74e1f7baccae94448e12445325265462c6bd9a71d72ce4f07a4bece0bf52e44c5c18bc420f310247e81d797621fd6f3ee0216e66440b0c83751624519811edc8cf029ba72bb8a01dcc4994efb2444d1d0fff2a97649ee28f06283347492580de1c580123c7971b982bf98b21f8d80be430c60f4bdb5a4f38967067ff9497557a764451a2af6ab98b0fde2785ec82e21189fc308f959458ee5d9c21e0a27d1ceae69f6693739d296f9fc6967b18d11d79ad7ed35ed4485e4992b044d34296b73fdbf601bc2ffba94e65e30dc8dadf3337a0a598505f6123c92f06040680f6a47ec63600b83624b2b869908569272fe4736af94460ef15fa76617b85bb995a3e70a942959cf7a2e401a2df00152d0032e943f96e715f612c881787761a1b4084c496f2c94fac4f29c2af8ec224ee699ab69816f0e7b70c57f622a3c4b89c173f861d68a769feadadfe62829f71b5020a94736841c08cf943145c20324d7b0a5da0f748bec3296e5da43cf9946c8a10188952ad712e907c87dfdec28245bc281f0584de6b7367e49c3d5e756802bae9a9db0f276cd260df5d31da272b09bb8657d82cc1e1a966d1fe56265cc97ffcbc43306c1a814cf989fe60a59a5c8bad10fb6d54de697dd57312b3f220a2ec6682bc215908fe678ed8b6e047555cfd6cc8af724b91f0f6f9cbce6cf742a22017ffeeb0212c0eedbc529a22bc02ec518c90ac39c793846f1ad400091e54693a4ef8f97465a512c1ec516e22bc3b42393c03edd15e1faf7e5a908042d8e96bc48d7bd78162084e851a25f0defbdec3c4a16960e4b1ea4f35e388b1072fc78fa834446a381263a805bf87429d113bc75a661c842f7afea6d57cb12ef118c6c98457a47d92116295c1c358c11828ee19e05d5562f2e3679f5d2e0ab882004c69a860bd195773e410cf4f1d70a338f1aaf18946c69f027ca11df99ae83982af3fc72133c0683e351900866bd9c4e09cf2c6f63888fda9a9538caf478f84358d6c6f015888f9b9dc2014cb6a876f0f57fe235c3e1d2cbee4b12e664f361a00bdc89d3b024741a3b8f9345e5c39341e19976de8b29cd5277b111a2c41ed5e30fc4b2b724ba74e6dbf2b51b5323cbae40cef18e5f2b8543dd1af327536eaa351309056495696cf9e56da8c68f73fd453f0ffbf7f9f447d04096321680edb2c656e41578efb3c17003c582012027bb65d086584b4f833fb0bceb2ff038b29f3fd162e0d5ab42e7a76f6957760094c82dc0490f8e3b0e3b9ce8309e15434b87354fa2532bbeb6e92a64e11db8450aedb45d29c9f4e07dd906031be2f3671efbe655f23cc3a5b35c96ec467b71aa4078ed0d642d6aa29974aea586f01cb482c8e65cfbf72ca5f61359310b50104187063bb5c01213ecede886d41ccefa12712430ac1c33744c5b58aea4e8864dab9ddeb4764e01379f49ab6944a9e06f64ce015a0fd5345c8094d5a603970cffdc13355875b9001cb6dab03390316eb3ac0d24cfab5e1a625f3c81f84c6fac7616e07ca6d5f1a91094d9eeb3cb398aed72ee6e292bcbd544410f73f6298e50fc63b6e9a1d7ab8a4f4f5aacf5265ba694a44c52ee38031203100317e8232f6666668e31c61823bd2a2badb4d26659966559f64c2b5807b08824c08299f664783044eab5f058c0a81a018a69fc53eaf1d4fa792636428fc03c47b06a040cd659fb02c111609008fda7d4e3a9f55db1ab5872940c59619546242739c9494e72524a292547666666febee67565599665d9012c19d609115ac2d9d0aa45940c18a895394d5ca0cde6c4091595cef5026a518c1c0f79c8437c715f1cf7799794524a29bbbbbbdbddddddffffff7fce39e79cb08400eb640825515305a334935a21a95425b93a08ca05ac9af9990db54e9440fdc22ee655fa0bc43a30f8ae7e4161030579e8e5de7befbdd65a6b2d9330322c7b63a7494ed443a887f89f528fa7d6cfc743fdc22bff947a3cb57e5a24a594524a4e7292f3d8c5fb4fa9c753ebe753555555555586ca50190a85f9db33c5b702f5140a20d0577d242f3059e2e0fe883a6dcf94c1d28a8c039e068645044c6819590392c009986a7ed48026d042623e1e13254c3a25ad0155c0454d51910205c5896b401600808b4f8b134c60b1e27a4c005e7d2fba80a2072659569d2fdc52f98a794d753d85028932676c58557ee087578818e68ae9968c8916b7d556b42a46725769554c67e0d905553b6343ce6959f0d356c5bc5555d3c2602acbcad8c8544db53236f8c12a6a401700554f0725938206d4aa191bd69561c0c30f5b117ebabe5531939a56b5615d2741d007d410eb8340c45030d03f5643741f74a8931fa8ac5d414cc228173560d290cfb18ba71269c0b8ca4cf60bbd61cc9d8c8d87bd80712744a1f00305d191e5aa548492bcf00a0d756a096743495e28198e3146435ca2238a8686639186e34cc3b1a6e178d37057c38d341cc62276c1bd89769e6a3f242216921776c15b09c90bc90b89e48569882f1aba4234c495a5ba68e8a221e6127389b9c45c622e3173899d9d9d9d9d9d9d4bb1d211d311d3111dd1d1a82a7d607c3cd5d3d10bd5702511c68f4404b3178c21c9cb338530661a92a6b7452ec5b7b174119f4618371d411a4fe5e48582aa12c6b5a30a933a237801c89c1b60aaee070af2cc331bd05767c09319d0cf7825d60be45abc3c7b1556dd264f145a4fa8b27c443032d387ab25d2b5211651a6c1387dba6af270b4f42fefa11129cfb4ed8eb0d3f6c0605d215ac1828586c16a020d26585305144318ac27c41c2d628b160c5f8b16531357ace96fa37c9af036b472188fe38c0dce08c7711cc7bdee48d7751da7eb36b4e22be4de7b39f7caf6d9ddddddeeeeeefeffffff734ebe6a3ce604ebc37d5cb8c000c0721550008abc882f5e307c2f5e4ccdf70cead6d187c42ff7de7befb5d65a6bed683402c0fb16b5a8452dbae6df8ea2e4bfe91c47d9ff7343abe9f039cafee71b5acdf9de1572ef2db9f72fd93ea349a784634f96524a2965777777bbbbbbfbffffffcf39a78b4c8dc7bcb09c5ac1e2110b6117fec132300c1855d903d40ab3505f7a8e9a3cb03b7dd8c2e0d01d91eebdf7de6badb5d65a66b958fa62e17999fcf30dadee7cb71b8045a950d409110a6252b40a2865fdef1b5a39ff5fff36b472b8c9fe3fd26d3ada55ddecfc4fa7dfd06a5eea514fbd7e96f84bb6cfc82413267598543189991465fbac98999939c618638c524a29a5eceeee6ef7939f4effffffff5fc2d9d08711000c26512366011a011e8147402344502bffbcf450a39be7d6d18ba6699aa669f7de7befb5d65a6bedffffaf60b072de9caffdd0344deb984c2693c964aa4adeb66ddb1572efbdf7393738caf6afd15232260bd65a6bede428dbdfdddddd37177dd78cd168341a8d08607d0af04506d0055088cb0f8caa50066a65066c9899bea3efe4b135f46181014577447a29699aa6699ad6dd7befbd7706359ad7889d1202062b89b5d65a6b7f56dcdc944aa552a9a4fdd0344da330cbb247024b38cabe948c1772efbdf7fe3f47d9deddddddceb93697a9bae6659a73ce39e70d8c0a16a5f26210f1006c01b26084231855df11d4ca0d96a6b7dd11e9a5c49cd462d7755d77e3a993bf1a305833cfd9d0f7f9acb5d65a5b31804924128944d27e689aa67d0696600987a3ec28195e618d476217bbd8c52e76eeee1c655b6badb5524a29a5a45775d56ddbb66d7b1c112f0819b880aacf855a795b8ca7b734e461a9a24f06e36992d3344dd3346d632230282f10dd50761d60b0c660d9afe26ce8c358c122a2496e6215a51e4fad7e813eef7a97a51547a95132fa87a6699aa6f5d52fdddd3506a512ebc870942ea594524ad9cdd15a6badb5188b7dca6e5a7531c618631c3264c89014d25a6bad94524a29bbbbbbdbddddddbbaeebbaeede7befbd8d624929a594b2638c31c62839962953e3d59321d4ea646abc4a65bece0927cf3867c72a51c273e204656a98e4b16cadb5d60681a5572a954a8fa3dcf4cf1f9aa6691dede74726414ec29fb3a15dd7dd7befbdd74a69a595565a69a56d67dfd0aafbffffffa594524a19efbdf7ded883eeeeee767777f739e79c734a29a594b2bbbbbbe5ffffffcf39e79c534a29a594255e867ac81fa3c578ac13285052a8a052624a0ac397923235140529a62275e1bdf7dedb6edfb4d65a1b8368da9b2861f20e3b259c8dcfef947036fe7dc9869c8d9b2861d26180bbbb3f26a572ecba18dcdddd7dce39e79c1cc7711ca7699aa6691a26c5727777f738e79c73ceffffff9f7fc23a4149a1a2c6eec52e06f838caf6f953d3344dd350689aa66973ce39e7fcffff7f0ec59a73b2bbbbbba3b026f66a8a142f4860b0a6986015824f18ac2a44b85a881571c50a866fc58aa9a1ea831c5580c17a6dbca279c8bac70953d322c9713bfeffff5f2412894490394629fbffe1ab509192522da9515293575fecd7bce410ae429d38b1e6df0e857551ac69aba562fdbbacf72cac135ab8b04e880ca0a38e304211410541558ca25ac4f2e266ef641818d6c6431ca7a1e39bdf80390b06ab01fc851831460c862f468ca9c1d419d043bc82b93c0568d1ecac63f03899040cd602c85327051e98584f05d4210c56153a070641d284c16a00c983189649c6c686563c392b726525325c59991ac951285073524f9d522382c16a6284bd60b09e9045305831276e909a0ad6ec78a97f1cc7711cc7c57b7b005bf432367e9a744adeec389b6984e338ceb90df5d7baaeebbaaeaf1afe9814ac9f4ca248241289444a0283f50447d9ff7c43ab395530006784e3388e9b1b1aa549a784d31bdadd73ce39e7e42b5ef23af989627d0a21305855bca8484929c27a1595c8c315af8be1bbaea989f71b6694c30cda0083b5ced94feb38231cc7711cf79b8aa334e994703ab9699fdfdddddd6eadb5d6ce59e355e3032d152767e0c183078f969696961698816e5844081fb1a5bbbbdbdddd5d1ea1079013b00e202edcebee6e17acb7e8e3bd17ba91c821043e5a5a5a1eefe0d1c590821c3e6860055d0a5c8a80430ea8e38512ecb8810f88b860c40f6e00c245083c6010bbbb1b4710a803052e447409e00bdd7d440e99c4614329073086340004238a14c1d1830b36c81f2e3de0c183070f1e3c3c804312eceeeededddd5d61c41cbc0ee040448669c46ba8030c3ac3f13a32cd86c73c0752c8a187203aece0324311cd878b0dbdc3c58716287b0801c23d58000476f798e181a0861c6e68c1800f7ed0fd0440bcb4b4b4b4b4b4b46c000710b4f460019076efeeee6e7777f7969696225c800c61c70b76c0c2102d9f821943b3c7d5018e93128af0011a924002d4c00a4bf8000e3de03802088e198038628429063e320c88e0470896e023c34e32b4806009db0e9c9461ebc07fcb963a5a665857ea820b8e209163e076e02db89001191081851f2668410d4cd0c30fd2ddddbdbbbbbbc27096aa7394c0a50710207401102e3b74c05288bb7ba52cc09c525a99c3d12d7b6c40dcddbdb2801f7777f7eeee6eef6e8fd13d86dc49c0c3103af83003222c0d973c3027b9e810e31bf276c01d4839f88002c34311033d1902899323040107dd8e219c9c2888a2c00045e1839e48408e90034514aba7436bfd541613a348409680812a0c2328948d14e4440aa20325c844f19f2dcc3973c0610727e1700369fb010a0c281b102218c502e4dda76781f3653de2b314b8f17e01940983d5a278909941a100eb9c2f73777777b74e8678cdd470eab4cd3abbbbbbbb298c656534943e530e0c560eb4252c2fc40e8967a2def68a3cd22b615088a782b75128c09afd63d29c7352d7a75592a552a954aa6ebc1ba7d3e974eaf78eb4e22be4de7bef8d32c618638cffffffdbb66ddbb6614e86a46c70dbb66ddba28c157747baaeebba8ef32693c9c42693866e38be8931c618efbdf75e4b6d65d95a9b65599665198559843628891d638c31c6287dc391557777777bc7cccccc4386a43493482429a59452ce39e79c9399999955c418638cd1999999395a9a1a9957dff6d9bb43678f902b0296307463716009120183b5033b932470b008cfd4c012f5de7b9d0e0f18ac25ae090f2402354803fcff67528cddfe4c6f72648e6c9f264a9874a69c524a29a5fcffffcfb22ccbb22c833e2b8cbfecbaaeeb2cb595651bad8d31c618232c7129992ea864109a339a01020883190000c300104581404ed352d1f514000b28545c4270301a2e402e1088e2b0521062281400c010400820c418431422c22a007c2a940141c2666bcee60ce2855bfcc620f59cba1f5dccc6ee1a0ddd22bdf49c6a32cc64039aae64c7d55407125b2e718b93e8a29e41f70391d9585d2b2e466377ad86de265da95b96871d4b6aa3552ebc39b84f9a20419b069b15796f3e889b401fc6955ece49c803aa2e03193ed8121fd214d58b54cf9d1c98952a0b94ea5a2f9928029ac468d0bea776198a0d3d5e161cad3eb12a9b6e6c25aedcc5b4c1f2b6d95747c5d6526f56daabc27de4f4334c90b038849f0590055fc91677cb850fef2ea2411abe1b23d5b27dcec9b465fefea26d74f5ee6599beebb5e4543b65c6384c95db523bb119aaf0ac2c01f6834213f42a3afac7ff25a11aaa33119cf64188b322b0ef907bb00c256efbb1cdb4c826b8167898a3b57b905cc3cc132effe487ecc0955eb2c057bbc3a9080b15f144e8e6994ce50d0a18b95ec1974a0d3a7252798f02eb765599e26405f1a1d445e7024e41973b91d95c5d2b2e6673778d86da225da95cb6879d84a5e97053514a2bae4e20935d6dcb12d5964109fd20a90968c60d84041f4972196f7eb493691bb3f4b86ea5e62e9b62973cce64bcc92c895621fc57659069d011ef112fd10d1aec62515f78b205d508a986b245878ef930c84928e33783ab375f22ea37817da17c809f4d52ae635083d08a5def0898744decd18750ad4d298241593a3807c447ae7a4532d9ca308e6d1059d6c201cbb7a51d517e9383e548d64ee613224e6f653cb11db172a1eff499d674ce24a51b88339ce3d255bcb3a214372464ead89245fb6d895ba2675528f916799b59bda01d69aa3acdb58b9080d67971c028c913714bc50ea5bbbcc6bbf40de9dd49eaad7423f05a9764eb3ac06a4e0c375aeb9312a45a5e43d3e2aed57557504b881259c51812908d1aa82978bdb5ffe92651fd86cb39c24cd3c38be35282d082f7c4ccb90b29222aaaf4e59582311351f8748ddc5c8e0d305a213a37d768d5e5dcd8a3d5d4b6fc287141393cab5b43c5422e3ec9121375d3a3d0f328c171fbd1802bfa0141654ba7b11581ed0fcf81bc18e1a47541c3735174636d7a5228afa29ac7faae794573a293c68aadba9c1a3bb69a4a9be8a0e7a9d86cc62d6309cce1db472d1a1cd6c62487a9e436c22c70a4b39c912cc7700779420b954d301d5e49723cb098285b571f55b3f3d38c60daf2a27e7e6fd9fe2a1537f6cf4b074e1f94f39fdc4ed6a27024a288144fd3101c8ef87325331e07c3278b38f6c765ab65395f52ee7e754f47b3fa2d700d9df47d160805167811c34e89c616ac135b8b551f7c97ab997730caafc353095ec046a7b5c9a09562b848a173c807baaf1565e43d2482d9e1212d72cf47cee4b45810e58fcdee51b9e62777754e2ee47024079d56f72767754e5e52c134d1d13813a4851bf7e24c6447f161fcbaf6e69346d190af6cc4259b46740eba0276f8ca1ea12b013156d45edfa0de80ce9ff6f9624f106789cc86d52d6a0fc4c45c757840c1fc88abd57759281396449170920a87e33032b5798fc9c20f525fc42672d1f4b90bd5f0de052225636837d1dc91040ce48297371bb347086bb8d9f535f56d837e7c4fb5ce0adf839ab47fb8e829a14d63324442be1d49121f13e098533c2d5a84ea0c4076d4703c65bf466d357908dc171148f438d5467f6ab92905a3ca19ba0a21b4da19ab5b8c484376a156caadf578ba02b4a34e805b8fb4301f4bf0aef91fb4ca76e719bd26439f6fcfbe76ae4ed1da5c342bfa3db5af16564fb83cf6b0ef6e72f8e0cbc24f634b991e49f42c4d50a57f47be89af0685b906bfc895d3d1147d35ff6495119af3c6e37143e0d222caa05edb87fa72e1dbb07a99f69fddfb32e22c2d3fe829f4323dffcf6214a018be0dfe05e993821645aff63b227dc15f644fc21e54b7bf51a8188ad1b166f52121df4b057f4e64a15ee4de9187f125029db4fa946e4fcada0c5e9cd0ad9c2df81c6b746876a5036e7224993409ab870026504f5159618c647838be34cd71f771d88bccf27a893d10bd01edbbae590adf2fd12260f8dc68c9caf60c013928952a1a6054900e2d040433af1df31866b22eb555084d5cd59a07b41a6b1fb53bd68dff5529c4a88d38c79e9e468983ea4919e487de3ba7b4318d5c0c30202f4c1e99b40f8adb3f61f34b6d7af8347bf74a806eb1c5d93e7f654b800ab0930a6546734151ac1e82f819e18c9b54468aa99154c709c192f6f248a97d69924c5743a6467c9efe045256510a5c9cf22f8b6273c45ec3cbc7aa4650bfa444a6334aa3678c6a6c364f7bd20f4bfaa4109e787c31721d8bfd3dfde10281b105864804b118a7a8fc154bec210985e5b6a633b7a3277eafe4092aa98d252efb0b1cf2488bca55b0a8e058551acc8b6d56860f50fb880a5a8e1cfd17a0ece1d46ea250ce0bc4440234040738b9c4821618238ab41528c7ce3def98954c52c3bf2afb09e16e159e7030eb43390329da43b691bd6d822d835e4e2c88752176cd00bc12b6786b5d9e3c4b238f4757481676498313d4b8e1c0f71dc336f10526ab26b688308ed11d6e31d070378e49150aea23da1bc0693521771c16b89b6684ba98ffbebdab997e88313162301cbdaeb05e4ffd28b799b05e8aee38e94d6565e2fb48d4728647c39e6270c1c9d4370356e452d468665271206220f65a96ee141cf00137f5946fbc5432df57b9c0da4acce72b45ce322cbdeeb60f3f748c65a67660eae88c85d28309776e47b7a44162d600ae08dfc84f79d09957c0706f272ca66f8a5a57ada233f52fd40773a043078ecaa51faf26686cb2010efd4c74f3a8aa8789295a2d677934ec61a1ed01cb46840900b0b4563e0c3cafa24f845bea43605f0b82363cc26f953d273348a739ef284a33b977be2ae5f8e10681bb0071b06c60e3f5cfc3f015dc171744534bc013132dcd35c23870da770f3d2bdc21756de37c2688f19bcad6dca70ab0fd94d3d2a76d29bd9cd2296bebbd3672a898aace7a82be199713bc86494f50d548c8a6946f5f7e5dfc97127618b7b6e6c07508de472290afc480ba199fac127c5168061997281f5eacc48c079143fbfe2bfa338275c0db8e7b5f54a05454f1290d627af13ec29ba55a29d5d622eec11968de202f430eb933b4fb2d2e01bef8b0756d50b4fdad1130a6c146459fd54e951e879b86aa350dab0bc3d0c08cbbacca37068b55c330d5d41f7c273a6f7449f52617686f50f5f0ed993edf924f14c2a9333b6194ecdd043c901deac670dce334481bd0653a7badf29ace43a6d708419f9c81caad6c7c27918d564a44a20a41916f3a4ed4cc32130704a7b3de5885ff0f3d39312ff7253066c7aadec2b20dddfeb82f070f74371e751fd2eb74745787a8c23c40a0ce9dbd4233281db375d211a4663b020e884700d4724c5089312d7c8409de60d1863c9a8eacd8e8d4d40e5cb717180e392e5bb9f5195ab0a719a967ba44e8e2e4a6b17aa02c247d28ac048ebd4f6fced5fa4e5679422d556f89411ed0d97ab74795ebfa9b37e9c1cfe2438e7afbb0263c79779805e483ef98ea45556001c932ccc6bd76515a1341866360967c41914ce92b723759b3174021ff99d3a3d1560077d4a218be37a8b90eae90efda37276b7b0e410f38d6dbc66c96d08d5aa3febcae2de5d6d11b5666490738c5caa2e436536ef66956bce472e12467ddeb04e23dc9c4c99880cdc6a4b2824712403e667eea77e0793b2be42b09b01c02dc775bb328fa8f1688945c7e40dfce4a966aef26de000ddd044477827933b13d10ad5ce5242a64a1998e760dffed94ead38f8f2b45a9a9668bebaff8da0c112351643cfdf6bd53b5a6ea06f7d02927d9e5a0749205eda70d5a190da1240c644978d70a33729dfa8ea73a44acac9da149f3f3786e46344e58631b9d1f9d8c07bff339a4a30f29e06051b25b66e962db67600f39d43bfd0f144efd99cc0d31a491426aa8e932ede10b1c7e0ebb71d8cc378513de86a88c4c0a9ec9a2712840a8c9ac632f9dd17af8601457b1919350b640629074b36d07833014ac1a88fd4f9c662c40fab9f1afde57f5ae996064998f1c7af266758a5ea77494deacb349c7dbb242dc629c16141f2cc90d401f9d9ac976636e3d52c690f328c3a521186483be24aa487988fcde608c4f0221bd3f21600d46435f639467ec4d192575dccaae99096969ee81de65228bf9d60e177269f2c181571e9fdc2a48961c52fe2b1fe48d27e4832f012a1412cb88b1974c356515a9bce64278735c5bf415d76ac77bbaabd6ec93bf326b83f79d0e315fdd32e864b269630b7e9500bc91529d9941fb67397ecae798689849b02b6f90e2e1032f3412fc9d05d15b4bc2f1f75a2d84aeb417530449f77fea235fa396f7ba14449a3a2505abb0d2460f69b8cca1df0f23a00e407ce5f02d1c184c6c39db27daf068104e43949d6dad4adf3bde3cf2dab24d06cd994a265019966d091ce9dc350ef0045eba9b96e5150d83d6010e2a679a455334d55d0926853cc1bae6e58e98667b2f8020ae5f0f4aadca0f02a0c57f8914aa8744c078a9403508fbc787bc8bd9c918987e669f47103be231a0594ca1bc759285d6cbcbc40fa3fb752aad4ff2ed8bc7ee12152a42bd5840b997c068674cc463aa0c601658dd1f959ccd01f2fb8ebe2377aeef98bb66f9f87d99f68d3220e2d58e2086a59a5c3e2934628b80c10091bc6ca6e236cb9eea27e0dadb6a7d023308357c1904477706e169523075986fd3016f4bd18b9444b15a95e8bd49756cf1e4d27cfe0ab3397936281e1a48141a618685e8417fcd4dca01226c11057ed8661ac2b18a9ca78ff5d074ddaa21b9af8b79227ed75b2d6b38e0d90bc16299833000afbd52dc6b398f3c623a6ccf5766d4b91907fe629ba9b25556559a1fa6caa0a8a8b2aee0a96474692ae66250c585907c2a1686b05563296bfac76bf0c9e763965c28767538d009bb3f25574de6f18da96e4ac7b0202467b55eff01eeebbf5913ca9185bfe0044cadc1c87920990508967f66a417c86b2f447ea6ffb275877f040c5ac85a47213a50dc083393c2a40d52346c89b4c8bac5b42fa69c83dac6e76c14410556913f398ba852719129198ce4fef42e9111f1025ba17182a611735b2c131e1d5ab32ec461567899a1631f4e58754e09d2732b60b8b000e855a6e33823ebd0c72696440ded5b23027595d378ccb87457ba085c201504cf80c2d96ee87acf4c769843089d4341819e7c487a7d91131a14cc303e1696ad0b59f88f8d2dafb60843192a3eb690f49c1913f61629ac4954e4cc19fc84d2af1a8b26028bf0e0b517b471a61afa4b1068e3699f5652845593e37f6ff24824d2513183299063f6fed83d047e3ee8fc8e53dd98087fcefe7dff06891c3f31b5a5a675bff9b529991f32fa191381a1cee8841ea38cddb7455356c2cc92abb00dd933058b775ba1323da48be1e1cae4cd7583a22676c4d81913a329c8db0c81052fbba4410298eceb66c0e9f5a6e09b9dce83024aae8a2df5cdc203b95955a3c9a27f3f502e0b857896c648dd2dea3fec301e6d10f1b3dc8cc2423a1ba95a049f35e25173dbd3107c9b04b7c880ec692ae2caf7b3e3f67289b7380a1e89a0fdce98b9e9d639ec1e71927cb1c9ac7beffd5a0564d093231c58874beb5b7680779f1dedd2b0eedfc4f5571d3cd6a7029aefb24646c447bbdf40566dbe7c6ec15b68c0b3213dd98bdd0433d93cfbb4db8b2234654eff4378d6909fd9e76b44a3723fe712de1fdabe4f98e1f35c5cf688ad314d7f98ce7448a0ed30a3d8e14ca33a2e340152d6463edb0c7b02eae9d4412ee80c5b3cd7e5c9f0700042f8af8b80539de85b50fa7b203088d476755f7422cc964dd5af9926db8e030fdb7edde740dc15038f513b8c54f6c16517b0a531882203f8706368583b7572e94de874e1937721b6ab063aa3778c087913dff572d9972ea2b4414f23bdcf909c30ee726da16bbe40bf0f39c1ab36299b196b5e1680aa6a81a018178814ed0285ade7c917ec3c8a87fd7f7672ba0e6232955897858251b5183e71b6ecd5463701b7362223ccfbdabb16a6477eae5249ccc2e0e1ec95e2d373284f4d0268c9f5e4f9a4f6931ccf6fab458f9ab0e2b3b7327d40a80cba3b6146006c75037235876ba0c0e242cbd13ed1847012af2695fec41311949e5e5955913743842765910c0fc4b5768747bdd4a5b50e0de775d666150b5afd6cd09626ac6108d5bc6a4cbd066310581b12122c667a265fcc3e43cc4b7b795584ff8e9c66621a828c35fc38a1470024a2b9f57e73bd156ea98e726b01f23794dc578849cc6b478f92252a60125d44b4d58bb9454685c687b5795876fac2e666b114878d6bfb2a1db9f5f85cfc255a5042bf65e250b12f90799c38122deb8df4b75eae3e68a1f1c6a2fe698711da0b6366fb9144762a514d440e8cadae0b7c069691101581756955500215879281d2de0e7d13c4b110875d0f14a2c00567718aa2fc66065a7b69502d254cc31af59f8ae2098e16ee44b24a029c4b1ab801186206e1015447e0c9893cc105f96b2dcba8f04caf43c6b54ba5ebf099ed0a5da81c83dbf360d481a9b7089481924b3c487a9a3166a801eda9b6aa864a43c1eae0d9fddcd7cca09e0515c59b0e8589c4c7e739b93a292bdd229bb3f6c2a28267f6b697daf4fb5c5640abd16437eb9556ef94c50edc7b935bd62042934badc8a86cfae99deebc8f0bdc1f2d2481a24f2d73a5b1c4e50f412d8344d4bea1e58a60b90518ac880a0ac6d434b6d86fb014f8d31ba1241a46fd6bf81d11b0f93f6d23357341f1958775cf5835068de10617b95f7c67289161db4801c697fc87c7c32f79c215d6a4d494e0290df90c0a7327fec3dadc1008ca5de99a4b429ef2b7e6b98e9eefb8309484c37683d00fe5391a3fcd6c46e4dfcde43540563df5c95c6fc21fe11e14432674f9810f11989f3eeadc6e23e01cfb958e7094be2e7ac1550683ea22ed8d44fab50590f74cb73e74d6e7c961e167e5b782aa0e566162f98c29d434f389baaf3411b563f0a64bd31f3fa73f969ef90a3eb38385860207c49e8e90bcaa777e98c4c7e70a1a5356749b68b2f456a236ddc07ef21742c2f24f7cc20dafc3a40fb085b9837856f1fbcd8106bc4fe23fc0dab4e1c748f578f2523f63f93937d5a84947f878f89bd53018e6bfb17e098909fc051fd39fad2806fb8ead6f4f68e589e60b533900d25c5a450368c6c12b82b091ba3cd388df92b35f643cb9bf0a536e9b063086ef1b65d8566980fe3f945655b56abc885291be1092d2947659baf4a11457185c147bff686408a677de16817a55bc0867e1ca062a8041a5b8ef38787f947393ec1556253cfbb1edacb3302622e3ea27d12d1e97ae6b625f772a37a45621fbcc4af54d311c5740010abe1d948dacb25790c4e0eaa33f4847d6839945a8e256adc0004401bcec50a8ea35146aee0bb5485fb6d9e4c9b6359c663adba7ff1a8fd83bfe79e35944f823c6b0491118d28a275095201a05b7857ff93caf0cce16515a0902f1723d40d572b411e27e6e4ebcf6b0015d0f828724d00039c8601a1101dddf2aa08d25270cdee418d34ece220bcac12b0fbae169fb70b2bb99854814001c461a0ad78f2b415ae15bdf2ff201ad969621c632883d46edb2cb2b56390fd55df1f7fb7ffc62e30ffe261b4c53c759d223e13ea551a1049b4b152b0e1b8c6494d7c438664c84f8b2443e1c25680a48a2be6d803b23836c6f030224e2d0e8d6f60f54447ad0359f76aa05657b2f87339c07ce51044ed0553227206096e0b6a523b35519187086f678fbfb6b3ffa9405b4275c3b41f1ddb6e0975db89db8be5e9cbf076f87005f07dadb41b717afe1ed50a1d70dde0ecac3798244a0b932619796309b87b55856e09c6c67828e0d389931e9c85fc9ba5ac7cebd14d87253800fad0d6d0f068de171d56419e90807750ad8ba2f1665dc47d63a3d805ccd28d65526935dfd3ee555a06baf166afb6a658a693aeefe2e3d039d2866c8646e464f7acfa0e584c6247f42b1ffdecde4586f0e8c7693ac959b87b4db6ee9d406f5aee79cf3d6de30e9a10d8eb4913cd1da3c725ea91cfdcd4109e984029b3295ba82451eb48682a514259ea6101f7550b0771936da180254339ce75d27cf890da0f1eedc5fc00613e6a3ccf8ec3463b8dcc41df625151c0d9b3498db5386a37f6382a591ab4ed10790f8db20f6efeb7ce36bd30ef8af77dd8d07666ed3c7d2dc86daed4885373b6aeabe8e9076d5110e6e3ab27518b8de22b3f01c255881315c74d415864494621c1dd8ec4b1a58cda7d72b8991e7243db506a0c231fb34962720fb69442520fff89a44c31d8605e3cda0a2235c4c817f4abbc1939f1ce3bc95e43a2eb944d51d3e14e0c1564e2d6a37b6653ae5290b6d5215644ac6eb388b5e80038a4fe6059ab601f7be605b42ebd5dc2e43730abafc534e6320eb7f1ed09104ba40df1e6a3f614e9d242023d4fa6b8c66567ac4f1f0568781753b09d648333898e5c15602126e975fa82f846b026f7cb69ccd9beee6624a72ce43f0a54a74c6b8e92386dfcdb52e3ac58392f94d59195d7103f8893d1710c997aae826a802f8726a321c536962756d5ef1a09b97cb645e632393f10b431d3efce9ecafa65623bf0415b74eb4db5cf4be8fd066e17f124c1946c931b96249e10147362f4111c223039f46641acaa609e7a1a5193e1df21536950cae1f69ab1875a48aa8b3547c954345bddfa941927878e6c9ea8f695561e2a06083810f5a4d5133e64660d1099ec9914b216e2b232546280d2592f45f23d55280d26b4d8aed960a38a850ebf29b34958697e25ef941007f0cddf6493d617acc4fae3d17e7ac62290360416704c02ebf00d958cd201bd7aaa58c0a80f81c213300d0a344d0c01b2c01491a2c41ce81a965c405649104e159ba795fe4dfc8176a6868f8d270ad41e32ae9d3ef92d87ab3f42e69f3eb12f8720b1bbce2b8d188534a1f1fdcc1d162184fb6a0457af4196865865d6a96221dc8312a849a9680b41936784ee218c8551f48d0d501f8446da0925106525ac4d0a4369cb59edd17b746ca9ab165727aa44c08d2f3a222b5c033fef9908775b0f8c5ead555c52c91227acb02d6dbc327a6ae5b8b8945cbba262509c018f1ad32128f27ec2bdea50b8d59057db131a351005af322ef5630dec7feb35dd92b6230e1cf285e589650b065065d61785544a5032a483b656808358177f87fbefa0c97a909479ffdbcdb3f315483a812863eff1eb1e337cf961d5e9ea4158684cd872f482a4896463231aa61cc5cd988a4440bed357249e221ff6551f1173a5bc2c8b0360c3d9cb20fe48bad1f81b0b91dbc04ce1794e2a824cfec63d245b1a00906ced5d6a49801c300673716290687335f1c8bdb1b7db1b2f3094a3f13d1315da96ec265401f365951c34486c0e0420144ab84fa31489ae07ee5b192dec0ec0b908086b1859fe8d2514fea7953e394cf680aaedee9c5186afa29dcbbfe1b0529b57cfdcc2f20cf423fad32d100de6f7b0af408070e348931967e020b2f97557c07e4adc0bae2bb1b9e4bed523f7d8e8cad96db2793bf07af0a2e96efa667d21e86e8e59ff1d77cf7e862faf253814ca9274a1a3ef3a3f319e7689f1998f979e7a24fae829567674cec57d034112c69221272a52976a291866b557c5abf6166d61b1347fb4a12e5d16e1a42fdd36305b8ae92398df08db22066b2e67ad2359c9d4f8a34924cf0dc73610191202634f5b9048cefc33a158c834d6b84e21505a5bf7476abd011dfa745ff5c182d951084c26eca8df47227a2eebbdee5522feb3e0da1e45997f004c2837c18bc5e85cfa0cf014280869131b64d56ba1d12ad81c9820bfe841a2b3c05004f084485c3251832e09c13428d9044541a40ebe21c409c40cdf069c798c363eee0f09649fe6069fb2a539628fd23f005bc902a2fe12882cc1f7bce6a8a8fa48c94a19c280de9c02166c4ab0da7cb4b5458ab1a2ee0842d00bbb388434156787c6ada28c0982ca3834d3c11dce6190c057d476c0496f535f42037d80813125959177347524dcab00e07a2d3e8cbc08e73aa5fcbdce01bc2cf36b07aad95364e2be3ae9debd627e90a874868b7b68f643d81e7ef274dab7d6f8ca7e27bb8edb23df63720ec3194b2e63a1e739a4047f0275b9900e0ffc29d002ac200a2186b04004d01548d0156b1e99236ef0844d356bde15036541697870099488fc95960a8a43bd9300b581b9001622f8ab72855045ad515226da5c8e38042a73ca785658fb48c6baa452229395de82d2508c5a1849ebd93287f31892111077a463c70b23aecaa476a82c140b6865265011fb62d81fa2e985a32cb586a81fa06e2abc557171f062c629d9662103eebe6f15066e5403a06ed2ebfe6d1c9d65211e2c965abe2e327bf5c853228396425a0a1846f265d7d957d098166bcef0f8deb01419206b01d3dd525abbad6fe91c99012094319501b572b5a791fa0e6e91ea83978080eaed960dc801429a0418d557370c4cab56abb2eb5c8edec3832a6c04a04fe9e5e7ac947dc60130629b070efd7500229bd63d3fee96ee6a310a1947fc4ad5d986d2bd8f8b9bdf1c344e800806d0dcb3a42640b338b9e7eb247b245936d2ff201952d4bdb2b00f03dcaef873c2429307d9afc060092341d4e0500a62ced4fdf692c818783766d1ed07ff0ec0e5100c3a539c3b245c3f97c111b67c9dc612c2ba33b97f186c0cbf36777dff7a29b0be2fbd536e87358a5e6d19cda0e922b3df8513f33ab07cc32d7ce36e75a9120fcbd07a3e648871584de1848cb90d0253183f099035704bf828f2ed3f8de91917126e70cd17e70b51a294ea43585cafd264f6b91c0554d336d291ffa721e5fdb1e74eafb2f0b5f65920545fbb140ea2e1644188605a1c3131f0d5991eb78c32c5dd771bd13848ecc9eebaadfd6e0b86c18a547ec5def8d1d886f501d8b52df9d3eb600bf1712b2f9fec67764df01ee64c9269470055d2774810786d54e4ed1673d5889d6cff337905bed16bf71b41a0a4179437ef894f150f8567856136fef9bf60c4ea2eae474fe3d9c9f30b6eda4cf33c3f5cee3b35389920cc85eb64dbb5805e7b92964d4c075ad689f51b92e5d04e7f58fcddeece2908b3332f20e51d9150edca38f57326615d7ade834df7862e2bba38b63f6b1bda07c75b3c9d09edc2e9789d35825bfe01b612d6e231ab9661a0e770bf5db84d6de420071753a9fb32e1aef4224ed5963e2ec72655d76a8eb62414e86f86f36d3693f863dc9f63befa693a71be21b489924c5b59c38f7d629e91ba9a9bf2e2a79f2181f5d9f2f0b83b7301830046587ac741fc954e1c0b9c68d266c81bae3a835f78baef27d7b9215e71dd4630505e01fb3c787318dcd01dda7b046a7b540f7cd428fcd2c8952b4afcc6a5d94b47d63f6f67e505925ab5522e4e961557285c91386324aa9c9d30c3cc425cf2fcef335edc14cc5116041bd27e8744530d337be95dee3729e69ad33b8d775dc39d41a160066c9b9d775d67769ee16a65a6a324d73d3d4c72a5dd8d4f3e117c0e942a5ef03429247aab43a3da64ac48a194e71058450d854c58440c4e282904199360a0839340d111bc7f65a715ada940beed2d3ec05c705140ef88eb87acbe2d3e78e6db11269af4b01910c3cb2f3e060f46409f825faa8c0b8868d42fc1e8050bce59732e027ce5b673b7bc72e6ffc1adaa04d485ff6e5983f2e28fb0d2241452061fd578391699d170387325d0e7c9abf1fd573c09199eba451ea34ebf1a51b4582280a639232f39c10011034db107e6b888b4852dce2c57ad20105354b36de3726ef83cb846d8ff1a30dc8b7b249722363f0f69b3d1d27e9ab42765824bba1941527cb328cca150d6258cdc56bf89a38940346373d41d5d239e8a558709ed33b7e2c1a6b5990345620ef62336eab38eb1f0c08d6ebd0d8786cb3ae776dce07ace71378d8d92564625a7f3fa325276dba33c8726c4ee4424d1f8deca767ccee31e04c774a1e07953c2d6903767999b7fb5aec08f1425eefa5deecb422ed04ae262a01a80b5d9fd2eb3cc5a9336ab699b0fee759565591dc07629a3f36ca9c7023e5051c198fe4087e878e98d7ed48d9e6ece06190af1b8c904599258976876eadc31108e2727533d381284c1da266f3681e0f684a0491254c001df1496e5ac79ed929c27525e86cf374d3501540018063c75dd6e1373a13c47a6bd708b21cd52126b3003217d64fabb9ea8b5a5fd5b704251cbdafa81cc8b9cf2ef0312d028513d745acfad900d9e991bd5749de2e061ceae51a440eb45fb078dead83a3ccf6a1134cf23a1548327c35dd15fb8ed06253194e2bc707c07473c1c182cc8ee03d6e88c59045c8ea6830642b5cce796124f057b2a5323071bed4d2b183f4d421ab46a2a79aac81a9476bd429ae51957a8d1a9d11850a2b5fbc06d6a9474d8458f09f8f6a1b9a0b060ab461aafb780b721e1a57c6e8f9850605dde00b9b219d1597fea213104e81e356a04d2c58695ef81048e0d6282cbb3c287a3d991dfb43b9916ae89e2e140fbeb022301b52f9a7706bcd7082143c54d28a604aaa432e5d790aaabb9c46fdf0bf4f61aec7205b7613c0f5a18c98662939178250c916e6f23769cf540e77eef413609d7a349e84a3ee4864c49abf42922530749953bb05263e8b6e02535938812d9b2c068992553bcfac2a1dd381a5960e5363566d1015667c6a2da21ce977e3611b14d40d6304f550e58da9285a21d0d299fe6d7760203fe50b948153a32487eb254177902fab564687cf1fd9f21414c87cabac12783e617d7ef9cce935c58469425cb2ff06d67b4f37254949873b1c8f92233ee33c0513ae8c6fe045eb8819614d38b341d98129077cc139a948d08c046b49debb35654479dd5115c92c7941a0156d1779d1f415d17fbce192454572bc03af326cc0f83bbfd90276a31eb6fc0459e081ebdb2b40579bea7ca295d66d77188dc216e93f593961d3760f0b9655dd8405d36249165894b544d86f22052d49f49ca2e80f70e98c336ce5de89bbdcd6804f26074666852e2e4255532e812973fd5d18d06ed49bb242e5f42d2a49cfd6a4e6f658e2667628a33892faa19a052e8394d8320dfba2fadbaa24680d6fb1f455cfd23a581708cb5bcf3b1aadd8add7a7ed10e6255eedbdbc38a2108c10e6d3021b49edd21acde1dab0c1b3d3299296b86a613267466024c929371b5481112c6303e48c6cbcf182f6aff10ba377d11ab5a6c7b67d3e04ab01aaa06d3b775d43397db04e9d6a5174542d0ca181d86b5bf5d7391c540d2314f550ed8ca9684a23b0214efeed4b622ef76ca3e89ea0a1dc3ddca1f08095851661a3038710956ae20a523140689eba285ef55693f3f603901c399de7cd047c0f9e5e1129703177a7a380bb674a0408765c7601029436b68707d072e9da25147d2cd9611c812b9537931dc1b09d01252f2afe2b218372c10ea5c609dee5315bb822a1740701c982011a0e9f6177ff5227b587d93be2a1c590b88f283dcbec4ece1a05ab4be119b2f4038d0d07e5f8e3efb6c9b8bb60f6a98f83ad6ff12c4295777d6a4d0503b3fdcbc8d4957918c410384a20805495c82347f1422318c78461ab0ab39bc172f1540d42b9058222a715326db59889b21dc23f7021c6911af2854725d36d5f57e0f0dae4022d7c7ef50f096a846c8b49ccd4dba5d1c53d12c4b8d8626fffc16f8e998e4107a646c710b372c27e760c31f9ca4d565e8f7b0393db5d68f4e0a2b446bf1d9007e523b7b95a0ca22b0566ff507e96647245ffcc400337b3272d7b8cc3710016115819238461e8a4f645692a758f06b5a2982de975de792a5d5f0d24948e95def79228c3cc3806c6fe621f31e4049e6ddf0ec8d1eb57e437ab139f0afab73c92f2eace746eb0d3a2cfe86ba6e8fa991c7888065f71ba10db1fa93f28982b45ea9c8254e04e274b6899eac941469051bb015ef8fe947e616343a7ba320610b42564449fe3685a3b5a233a6d4ae3a8bb2a5cbed7cbceb7aa831094c0f2d610e3c1ff4fd6f262181fb93df75b623c752d3d988aeebaf7d34365011ad2070595ef3d285f6d29f96597e8fe92bc211bbeb72b38c9a3a6611d7322ddcc1a5dcca0f3a96841e8335a1775900e507154197c5c379e97208aef11a42a18775864418b5e85b0f5bb902dc4d2e0549123d97acc2ef250f7688f69e500d55b0f865c42f5a25c3f6a7c27e5b07e074a6cc8a1088910b8459a5ad81ff461f2677a08c9d469a1912e83d99c1f2e118feb9e6fcc8a87ee9bf0feb21a9694ea7f4a904a9abe569d9250901b3dfbad14fbafb0ff002e026b99de526afaad71037cd0cc125b57785d3a053a4643bbcbde9d8ce68703858961aaa14d00286d42e140149f5c76220a275a564b14ce4768260a01b02ded95c8a2a09f52addd17cd416a2016afd18c8daa25e20caf2a3da31c79d534fcfcad1538e3e3175f304a28abcb651cc7f484eb3b0f9515eda15cfdc68de34eeb58f1909d2ac1bdb107b68237ac128e6b1c17a7a4cbd53488cce15071016273fcf30ecd4b5a4b37257ec9d5380e4e64deb06ffd32b901a580ee9ae68a14bb1778d5f9e1f82e1e8a98157afc24d7394610545aff0c91ddffde4b60401e871c4df115f137a86010c22093d8429f34322ced579f8e30ab8ad70987a4b541760233c65c4ceaec1506f2588a44297ef152efbdb17c1f6c89eefa9bbea10531ccb3d08fdf6be1f2cb2dbea184ec4eafdfbe36508218e8186e4bb7c67b057a6c21122709e8523781451ef2ced8e191139340159501db527549c5ca74709b5ba5c052ac6ed8ae15f1e8bccf561f87919a131441079bb16ef4b1408efb556054032dbdfacbfec76cfc901d6213d9829b0660d5065b870fc3450d986fd8dfd18b864f60d6c13988c356a9053106cc2a70fefc5cdeeb22e22aa5d4420f64e775330f444207a064e3fae1860a7a344bd67c9b452f694ad2a86e3c1421b0e02042ce17f3b935b95ec4c3f1807fd6a6099b36c6421cc27d78439d94b685a4b9045244b728d1531b841de06b32e95e1a0bbd44998a3407a3a753c02d82d92b3f6b87dc9622009a4eb78417c51a32d5f1b6c03ef427ac3aacd489bdc9b5186360f1a0979658d03a822cba0d202d2a9b8a95f7e81f2bc49d39d8398eb188a13140d180c18bf265ea6047d624362a769d112b551743ca4945af063f77558a80e0137650c3f4c1cb6865c61b08c400f97eb167bdfe167fd367505b9dbfdbcdec50b2867b4fe0ceca5c88220d3598f5d3beba019312e4e5c4cd9607ca70dc50b2a2b989df3d1643de971a50b9ef68d25f91bd3bf6385cf1ac2a590b422836c29b9b8df56ad09ef40897be577387dbba272eba799e571d36d6851588c6d9217439a0aad37b8a00a100535c9d1b568ce5e992d6d61cf7de06b11bad0ce95a88aee353ece5f9b9ed57b6b83a11bfbd2718e3ca577aac57b3201502aa72ce229d66de17d62bd7831a4b53f5062e1eb2dfdbd4b3553eba61bdea598e956faec13addbe5bf5db89d885379343a78346fffee980ebaf4401f93608bdd7b938a3af24c854bf03ad56d77443bc74e8d817a2298b478dbea1ec8bdec7231a5058e5b451faa952ae650d092aff3a298565326125188e2fa62aac7915ae713f26659c22ec52a80a4a4bc5ba558a997ac64f87d8d010fdc45fa390c682ae731e552806cbcae05cf49d1fa4da2da3c28ec23625fbb04df1bfd27d887f0cbb3d3ebf6ff83b18535c4a41c3c771dfb4058709917f7738482c7989bcff08b6fafff6d3ece3bdb544113cd715f56aebadbb80155980e91d8f39e26d70c855f6178c384fe4042bcef07ab00f4f5561ba0e64ed810d8d4aa74dae60c7b26ac163938288d54c9a586b7f14eb9e7ab1064065acb376de013e48cedc2c098babf7664b71209f50caaa38c1a2b5f9188edfdcc13181b61463d35e9505024cac018af5943253901a911b32baeee0aed2b401110502110001fa6707052bf9b120438daec3424e695ea7260082e8b7c8681ca759000000008009000f7a5774530d388d9e03926822a13225b08f94de1262b9b2376dda29a594023903070302031cd7751ed7791ee71ecf877b3e9fdebf0fec1f08824061180a8d909088624989893d8d909078b67ab19225b5d71975df53756194ea43e86a258db7fa5bbd256dd2b7c05a043a1cfb36a461eb48d3479a9e6dcd69681e16f2b1d7469abe77e7b9d75e253a3ce49e2cec5bfc6a00bb304acaf6f8d65f998b31ab05d7642fdf5e584571ce5ab4b6b5b6cdbdf1968d23bb8deb5a3ceef9e4cf075ffbf1b827e569f9f40e6610c4d7829ffeb13e90b780203204878076bef5612c0c8db87c4b32e4cadc9820ac964dcc3d6345ee8d9b2a724d1c4552568d90d6eba6666553d6c5be58d39eb605eb72f1ebf21a59d5f996b7d85feb0c11679c694d6b7be3b8ceebb8e7e3f9f4cf07824050080a8d843c92111291a4c4a4c41b453164f096933822802479cbf65432066f3989788db09223de62bf0ccfff4c92f85a727b46dbe36fcdab83f1fd061cec1147e754619c30850b37ddebf1c58ab5b31ac2b55a620585062bd847f914274ca0e84bf42a7aaad36491c1c99f7001c28c15293db38507194dc941a6e18003132a3acde9a27f45696234cd861d1ae08d476aefbd9de8332d0ccc2cf6f066e68898ed87397b9ee67db2287a8fcaf724006d6ffb5b602d8ea2ab17acc17e36f7874f1324d3e0601a1d94268a2c345837cae81d3ceebd18cfb4f2bda21b65b8d90a3bb3852ebfb871907939e79c653426cd089aa6ed3dc342676c2069ce2c4737c6f0cda2445b0bb7f7a9273142e2f7d91bfab7f67b3dfc41216bb5d65a5fbb4ffdd40c48576f0f558f1b3c76f20673efc5b847e660c8b24c6bdbda7bef8deb91f2d3470ba2577a6c501f3e64cfeafacab3ea03c6a38bef03878f1b271fcfe3f1783e1f74c645fcfce8c613e5f15a8207122ea474316759db5edb58f0483df6680f98af695dd44cace81c0ca3aa47900d7abca4e8deafa88f12a67b7e457daca2e8ddafa88f9bb183befd8afa889dfcc9f72b3af382cee0f8289f929a3c81f258028915780819c2061d9686859b695a0c2e9c578e1c3972e4c8912347a65b5805ad63c0612184c10a22e85083143af4bda1f585f148b9a069adb50e0104ad7390208207115e30c22583020b1787e9821c74f862e68622a898a1062334126d354dd3341a8608b2b5d69aa6699aa643870e4d878e1f2018024120187aeb47225f08f491211008040281402010044110044321b2f320100441100443a4e74120088220088648ee412008822008822008822018223f1e04822008826088ec1e04822008826048029120e923b98fda60421226b0f057d4860cc0d062ccc00452a48b14c61380a8807f4581bcfc915f512037588c3963ce9833e68c3963ce9833e68c3963ce9833e60831bec6d7f8ca17e74cef2ab6a673ce59c619678c33ce37639c71b638678cebd6481871469c1167c41971469c1167c41971469c1107069389c52a6bc4d91ebdda58854d0c834f9915eb3ccff33ccf0852d213ccbf0ae81eabc61bab9de7799ee719410118a563f194e23ad302ae3e65562cb4659aa6699ae6799ee7799e11a4694d2f8cf93a71669aa6699ae6799ee7799e3073c5425b2efb324dd3344dd3beeccbbeeceb65654cd3344dd38cb5cc144edd56abd56ab55a95755bbb77d19f52c69b8edad702b0d3d5c8d7dfd32925e53a80f7eebd056791e87a31d7b07546d6804bcf00ff7b5bb4b189beb9e5357e0d52cb567716db04f9dfeaf1b20c7fa2c89fe4ee4424662246c15edf79db70a581f929932ccc8ade221731fb7c3ddb2d4a9df143f337017db54be69dabc80704994d8978f49bef3da5644f70a3125dd5b21835a2a334f3c35c73bca2a3306aa2da1e5dbdfa5cefbd167baee75ef65e2b2a052a8ffe283fc8216f0002bffef170afe3b6ade9ac8f64c4108d262522c9482804815fff78b8d771dbd67496b512d01d5ac04d6c9f339d6da99fb71ed01f3efcdc43f407cc4ff11361dfd97f36c6f681aeabf57ec6237af6a9b5faf1888eda9b7bea3de5c0aef186eec22b2fec7186f938937089573a58aa4b3f8e79e5777dd42ecf6a80b571593452e7c228d88b30e8282f557e54f65257e5faabe2e1588e698fd44b5c44575fbc01fc827b60995ab1396427765ff6e29cb34c6b6d813aa3fa4c6b4ddb7bd3f6de368eeb368eeb3acfe39de771eef17caaf7c43ebdd6fbaa33aabf3141582d9b2b73cf22f7c64dc58aa435425aac9ad70dab66655dec8b356d59abbf382f60edc538e72cd339d35ad3f6deb4bd6d01214c94ea9c84ea2a518a84f22a514a5c61d38957b26af72e8ade9f4e1b29ae30ca584347955eafd2abf42abd4aafd2abf4fa9b1fb9f00a76edde45d1fbd3893472895218c56e5ffbfa67d954833f67b1c9c4fa9d47995094a9d57994c9c6749a5636ef5f7a39d03188a02ccb321c1579c1c3bc46f6b2aa33adafc57a7bb617a526c8bc013b728d961831e1473737fe4d397923970749a83d72994ed3d969e4f6b5af7f96539ec5e351a69adf3dca636d82a11a10faeb4d31d80340fefa027045a09bce0450269b6f92319dffda6f8ab92aa0df7bff90dc382b80f520594acd0dd34f315da5acd56bc37a2afaf2549e5ba6af4496474fe845fff55975ef0bbbaeebb35801ace741d2ed629c7396e99c69ad697b6fdade368eeb3a8feb3c8f738fe7c33d9f4fefdf07f60f0441a0300c8546484844b1a4c424e46d72c4939078fb6493257bd71944faf62a8cb2f7de5e5c89b6df18c01a0965313a12e9d72b80452a8c72bd025714a554ff7a71550d48d1c02ca657b640cbae99deb0f32b6ac3cbb755fc8ad684f03b18d057ff7598d368401c8988246e55d1519c06c3c1aa019fb79e23520d90e1ade7a8b0079078eb399dab02f2d677255e71d9312af1d67729bcb22386d760b38ca8ae4a0847675e9510af884c46dfb3e8ad1749fb91216c17d18460dfd56eeb3a7c6dd76d1eed35dcaa33ac1fa9e8a8ad3fdec333ef929cefb477c9cd779ecdf33bcdfbc8ed8b482ce4a258ef8d23b2a40391f7632157658f3874d4bef7de6bebd53c20d2476a5f743f0f025dd0fd48fdc9ec9790a4174a5e446e10f991f99bf4d46629f9919ca0d619125450fed17725d24524edf8fce7419e44fa3cc72ba74122ed1f8d48e23d5def23f13721779022d26587277d47facf7b4ffa8e2f503fd9bdfd1f8834225f10bd0c3206e9eb8ceb45e4c628d78f26a4129144428e902e3b3e8f8116461861b08cf8ee23c5b22c7f59967f976519facf8742a1f784a19094923ddf47da0f22b5cf47223faf00fe48fb3b09fbd67feecbb32b5ba22d1c9b206f3beaf4fa2b8c0e711e1623916ebdbd59ccd925bfcf063841307ffb4edb5b7bdadedbc6719db7715cd7791eef3c8f73cf59611565793c7d9527df0abde78549af2a85a12bd7caca58185bc6ecc539dba44fdfbefa4da2bcb9c9ed8b3509685fff2c8b361ffffbc51f22107b00f6d78b2b7125de7c9125d65c152d63cdebb8ed037922d5bf362a4bb813a638e321335486523ca40add0863e2eaeb21527de667f3713484853aa14e4824dcf9a1ce55017d4824a422d409dd08d35087a3a0c8e2e88867a3b284b01016c2b658ec8bf96070a63ff493f956fa637d35df19c2f810bec3517d7e2fdfcb67c217f3bf97ab02facf84ef84efe5abf960be17ad416298e6cfd45a6b8df5799e9ff9999ff9999ff9999f79f90d6fe18cc7f88bc378ca75b8eb33391c5c8ce9e436dc8603c16f3eb7b92aa0e740f020b80d47b90e6f719b4f6badb5e90c3f188ef221fcc553aec35bdc869b78dc4665e1285e29bd4e1cc526ce518e7294a31ce5e8e56e7025ce52eee4549c997230dc0b97e2a80ea26fd26d67dbd9bae06efc6de7aa807eeb62f362dbe15eb872db49d3d016e370702a0e867be1ca6d678b6db1344dd3344d451e6ffd6ba3b2984ed3b9c54e5b2c4dd3344d71aaf516db625b6c8b6db12db6c5ee6ab55aad748d96c159a95d9aa5b58d5e6db1d2ce098eac3c758c8ed130e89aaf350c3a061da36db48c8e31adb272842bd3344dd334d5a70ea259baa56db48c8ed1a73ec5ac9451bdc66d54163d7285b01096a6699aa6699aa6699aea13af64abd5e9d427ce1ad6a73ef5a94f7dea539f9784968a9460383b51956227e549eac4a594ead314c47493555b6948694829a754e497865c15d097724a5094869cb89460a5212357568d44ba3ef599a6699aa6e9165bad56ab55080bb984ca902a74234c439d10c6d132a5965ea5520c9fa44e5c4ab0d290d2eb33f7eedd749a829858a696c9c624638a31c1f08a6519b9464546a92f473b9b448d5ea39b7bba2397b8c22b9665efde45d17bef55167dea33dd625ada4571648b6d3112d73ec399a37ab54b48a8de45ef39cad1acb4f833b310d6bb287a7f3a9521ec3331cafd4c11d7386f5208cba5175ec9e8eda2e8fde914c24aaf951aa834d255a6ca080200028a025318000084c2500e456918524a996b0f14800a3d86486870402c980943831888720c46314408008018400801c6989a19332400f560764d08da75bccf2dbc04ba6d7894636ed6a233fd9790129a1ed154f3045c7246f1780e5faa4efdf615bdea85ed1215040aa1d0f9cccbf3ccc71a09499f5ecf433fda4899b1fd8092d69fd17c34a85727e92360b8ba7a23fe1a7c565a0be00ed34e0ac616f5a933fc75425d4b3ac528d26d53bdde2462469b1ec42f9dce1b609ef8271e1a690678959b279a590b6792e8743679b4dc229fa659c73ae498534df07b0419647c5e91b6e00ad3beb273a7b8d8c6a90399c1630c70f794e9f18b12a174a060e3e156718ba38ff7a33e189a017e17425fdf9eff62ffa6830699092b92682a19762dc90e5b5473062361c4d22b517b10cf273f3e140cfe43077672201e7172b11b5f1747de48d3c89058793fbb20c477560957e3d371534e80eab94700d4ecc136fb70087dfc88a29fa8433c084e5db631a3d0c3caff8042d5c41e9baf6cbc4d672ec2aa09a9d8d340e66f9a16aa2a039aa6f36bba7e04263a09af3e6bfffb38edf83682f416a24d7fc0f6174beb719587f3396954f5617135a3dd23dde1e3a14142782ec24a05be08b557b1c42db10959bb81990d658a31de32460649c8d1b12648f94cfc4296b6c282f6f9405e1ced47d1e1ef7d0777acc3dee4d7b91d7302941841135281aa06d013af2143a6a3d7dc94135931f70a8b427d10b5eda9052543fdc6447869de024b3c1349b3a5cc4839914fa0f252dae9b2b423ddcaeda7e666f5d26bf03b6ed0ac13f9f6685d79b3f70413f9165ff59d8636e454d2289cd5797ef3377dedb7d12d2096a469c9f6a1891371fff9d8f0cd4d5051c36743ca0e68ec260f6cd5fc4e47aad41cbb5cf99a9931c6a6ef2921d89d574ba3e5f7f3c4cd48599cda00f116749c899001670c13202672e3011b4e81409f3f8c4940651a3ef55d903f8a4a1876e48ff84a5319364a944e3b5ad8f01e44d56d473416421caadf768c8a104fc40cb0e37a0637fb64da4af13ab0a7613426daf896b16bc7792e794a454d045afab8712c11765cb681f10d981099d83e461edab18d112748622e0e570ef6c046f2ee405429b54ce30481df55f1efc58e9b5f327c6769ea00992ccdb1e28c1d6bae17759c43d4d494536b1301b6e0b002ebee91a40b335c61adbf2b32e85622836500ab65f0882ea84ce4c392e9db100c25b41f41df48ef612346c463b48e56cb93b16fc163b438ac0dd5f2ad69651f2b6490caef2127b349e3cf769934ad0d35a7a0b8c2a69168f68cd7595fdff688dd4552b67002edbf4b5d19f3c10adde6eef4f035be9c9db889e61271841a58da0abbc429e8db90030c6240218cd12abca318be5d3a2420202eec8e04fb4041bd09b52c7800996fc9dbc9375f223300580e0d877561d92b73cef8e7e0e72de9ecfcaec46f9cb14da2cd44ccaa6afb67790daa24a10106af68469c4cb934e655b20fd398f5954680e7c782308e2781ad45fb359928e3f5131cf66816da7356b50540c2d2de7aa947fee102ed8304fe3829a7904d15e8e729da4f5a4a34c9df1e08b4dec895f6622e4848612f7a9984dc48ac17b447b629f7866b4132897c06cfd3be05122642c25406b61cf6c006f4dd4056326a9b061ad826e8261fb0f0de165116d50ccffdb3a967339558982c6446624b7b1a0955501396b8b955a8bb2121277d5179787514c6d6128ffc4787ec07cf5eb3114a0493041a2b7edb97000955cad9d52c3baf03e97dabafa6767a5e7fec064569fb4f1f998b57f61e63fb6fe2abba6be8858e4a32df0c479930cc1af8a2a337198ea5a8a57cb5fdfff7fb33087d3091f8b0b12100522b1c97dbda8afeb84059d32967d8953917364371c61030d2dd3d83191b406b573e85f90ab30690997a47cac2b5c786864b8746a5d94040561dd58ee1af3303495b03e7d60df4ca1c14022516442de09959e201185768f4b952bcda53b10309b94550729945b96f6b990289b90b383e802e9d9814f8555440695b61a4b0f8b2d0a234c9452b9cd090baf0ec7b8607525c6c612edcba89400daaa70be7de3da24ea068102c840249c91074512d3b1e469eafa54d88ab038050d0bacdaba4cfaf1586015a6547b1a5e2c9a6a16d59303dfcc7853d0cd90fc88055455e8a5997045ab903f466ac22892851da87d32272760f5375c209a6392a1609d11ca7202950f33e4c3e076bdc9151eb14ffdac3e8c959256bdcf730ba6856538d0b1fc6af10351e010291ca184de3d10f235c3256c0ff764000e88e5f0f63f6228454f444aed5c8158792f030da36c8dd70284d22d6cfb0a387690787133e3137842f8731b091257730a57478a7f1ad98cce808095eae0c1fa7f5cf8911626da280cf609987a925809d9d6e1d91b59c867696e590faa237b3181ace682a681c8e182d6a36c2d025226b25d3376922e65dd00452f1c25a9dc23d4382a7e8e506e9fca2fb6e04c11193d0237039c9de6322e632f1b5de1a7aa3a2925fdb33cb47f6273d9877a131c0fc33924d2c134d8c98f7f577f70d4c07a4b3b14c3dbb7481de493274a1710d84c173f43afe1812b7edc781f3c0b6f09c7442c999481e70dabce824370521ceb3cc01b7ffe486d91dcf19eb00c9c1e4812ee7836eab48d15a240185708e90566b5c4049a04b78ad5240b5cfe686d0b0444683fc4b33af3a0d3873fb104626bfd84bce31ae7e46d3f8f0cb1fbfc1e378ce585260c065ab8503c926ceb836cedd02392a4539286c01d569fd97607f994c74c4075efde8693a5fd8682510769aa72e89f7ca1f7df3fda81c6e58c3aa2a0664db18ba4accd516ddefb7b93ea9876128291c812f8a05c7924ddcb7340971388908455d2361aec19647630e5214553b58b2621e66ba5676da0533270bab47a769477cf7a31e3313925a7c3f24015aab5c5425d20f76e11624056a794b96f344a7ced17dc0bcd98e29d08922cd34273d6491d32af513a76701004eb13d6ac0fa98ca92ddbd709196bee85129a9a5511c96ccd846b836dc046562fb1979b0646da030f912e7e61073b00736967706b296507f1a48896c958d7a89978cd50a0453c922c72a58680df54a3d3174d0c789d831599a4bf466c968ee8eddc070af88a44c4741083fc03b62e1a0c1cd550db7579b8032feb693c61323102302266652c86bb29120a4a488ab8741d7ef01aa38c5e9649e96de1a6bc3d13419431df8c32b635f93a54eef3c1d1328a5910fc77b01b5fb13f83278d5e7fe24f41dbc351f6232b3d0c4266367a1afb991ea5825464e2d79df81c93ed14c0833d884f6ea87cc07055f904d5a3099f04c5bb6b25f176abb21e168ebf4a07424816be9703c0e4d5626dc238ff713504ad1d1b6370eb57bfd48caab4943ef8a9456c9a4c0f770e1544aac72d58c00fef9e597af6fd426d90692e105bfc69103355c0fa6009e20f4135c9bee00b12e2e49bb80febb87d478833fb69fc2c0e72e7cc13633eac17cf96ab1581fc22dc275330c681c6d4b8f2346e11c288681b40e1bd2103f59485c9b50dc0adb8352470264535b0f385fccb1b8253fd424210d4f4513e7cfda48f31dce8add14dc2e853af9827823e1d55e8ea750967ce27cd0d79c4c20153bac1d3f109b68d78fb5b17d81a15147288bd201fa1925982ffe7cf0df3ae6e04e2b32c5e9da30fa1f1613da0b4b7289cb64f8f6bb13fc1ced2f2edc70022f5374baa6205f262762020e367ddb799c30d5c2c007df2611f30e26f2c83c273aa986e8539bcd46bb512ed312533250c0d8965cfa2af9fdad10ce6d7499f6000d324b38ffecfcd8651a1c2ca0316c5deef197cd622e95030a016615b6fd5483325c30d76556340404dbfe689c6d1f92dd650a5eec972288881a7dd28153af5f26c00d971b6423951d84196cf232894b3cc9a627657ae6c3066c4fdf063052d10db591e29b6f8d79337a99cc85d112ee996c6b5c120f3d881c902635ec82dc5e660d36383aaead826508a7f611e31c385a9b9799b548501d965186907399886c74d446ce999904548894def43291d2fd2b8252fa28c3d3afc8dd6f44cecc4cec91b89065efc1997999f85a6f0dbd5151c9d7e69cd357d01f3d166f425b02f3cf489fd3d2d18cccccc38d93650377808b7eedabf7dd83384527cf4698886c9eee4c860d13ada21ce13050f4f942652be38984023e980d2ed84ce85c2f5bd1de1ba8b5917c75e5785036d092ce90f3611d37134d0f026c5c23aa59df87f271a002fb0fbca23ed92f64b4fe4d1a51f21a690a7ef8e0cb87f0396663d6296c048b101d32ee6614f0f4c796befbe5945bce96e5e8dd70300036c3ca3718cb7942e8c0123cebd79d6a54b2bd1b25878730aaa36ff8f2e94216391f0307568ec0e78ef2efe43ad32e5866a3ad10a0e38f8f55a1793082ab4dbc120c3091680009746ba6cb861592172d0a05521ec1953609c47309cdb2743c009971e42b3c3f181a60b614096ac80fab810131947a994626038d9839783003bdd7a4614886b95c1568a79432c762590b9cb824067c4ee4ad4d0df67b04fcdf4ab5b795fcff4c64e84d06796f0d78cbe14a60c302477473c37edda912f08c130628a969b11f6d67eb9867eaf4602a54763d04576d1d9be0ac1af23531cae8a00a7505c810acd5b6a9872bbf0abd57766d7038ced4e81d3bd1de2bd08567e5dab3103db3d1270b54eaeab0bea9fb1c833c72905efd926e1e2528bf1a46817000f38cb49d7656323971800e44eb86ffc14670fe213af235206c40c96fe4f77bdad9dd2248b4ad11cda29f660b5e41f4d90635036b82e901ac3d44c740ab6dbbbd380391bbd6e966f42ab0c45db574a20511c1e360ec90c5aa7109429e6d4e878cdbd681b730b6897dbef9a976665458db0cd1cce966b124ba5d39fe9979448ef19e937347b4e8c30c0fc44b2225a44a6177054d91e9beb9a8ef8d08a22e3d83fea6abbba6e7e9da0bb625a74d67a25f90e00c95a3286e9789b03d70e1b53658307903cd1163df15b32e6a1637452a92995acc90bf816af6f555e1e66911890b99f8cd826d633909d0408c8ad63e66549a0cce171f8f2c35df8d48d19077e5b359c1665e3541428eb45a4d5fdd5f606a26fde62838a334d1e54c2b106b52f331e48833346bc3420ddfa26fee397203f9ac15ade4a3d3e8d1fb30e44d85b49ec0af370c4636e0288fe17b6016ea39e9f24025e31990de7e7b8f813d1723d2a01f0fd0777cd3dcbee219b9912fb5361020dac5b888968a9a4880e7baff9491d22add32fa2e8529b7e147f0c736369456e0740662161c547e5d6c204ff8b5b9e2beacca43703158ef158001d647bb93addcfd590df2bd49b5580b6a5c6d0ceae18ee91d456bb77b3c86f1cc11c2a2727ca841599673324efe96f2858028ff8717dc21ee86c33287feed1e4dc48399346408fde48ea4bb6aed574aee2e9aeae45e0eb0c69c6be3f86cd79fdbeaa745f2067d485a62a0cdeaf5941a9ba80c80a9c8b9ce86813200a176c35ced276fd56c6e8610c467b5e22c97ee705ea0154c6f112f75851cf158bcf699c8a7bde6a09d6c4e3ad46e804a795771370dba80ff35474a490005fca5f40f620a802f928a1715f005c7862747b4d09198e40a92454bb772811a66340635d0e1da103e24492cd1eb956170a68bb9363d2d90bdc4e38867bb6843770b469c58c7b05816f1e0280b428e34f1e244d2ce0728b9aabaccfe1ccd26bc866b606ba95a21d89c055cad4250ae73200a3dacb9b555cacee79c111c75a456d34edc3c8a69040a49fd98b7100322601186107d26f64318056182147e41c69f125bf2946727dc934392d8027e476028d223362348d91ff2d283df5ea743d2f0444c1a2655037e3fc4c60ae919c36f87c2c56e3b509be8bb62001ea93c0517c52116b9826a2f8edc2871a8309be8a2e491f5bf16f7bcf8cff48ae46d87ad6ca87473f26878a49377b8ac596b1c71986715d2b528ad6a52d063349a9f2873d543e206cd68b38cc458ae877e464c42bdb26cc4f1ec9395f7fde68403335065ad196ed539cf839798194ab520f1da6ff25fc4f1936fd927002f63b6bc5283b52116277a77120f10b2f47574782cf89c00bf800f95bf11f74558758a0f7efeb0fc8a6de65e2cfc3481932894c42b7791c161613241be030e4cf8c7dd6f32a8bf04022e986ecfaa74ca42f4ba5db51947dae3e1b9b90434750ce28e4760726cdb323d0c39d4ff058bac9fb7d0aa25c8ba3101c4d42c8d7325c8ce150014beb2aa59a2f86cd7b6cb8254b28c42704941a85372b05e01ebea3d2da020978be2de7579a4d3d7de41b0c459344b0e999f0d36aceb800ebb5edea502ca2ac1069a64358a4a006475611b879303415bb861291a7249b4cc1bd13ef4ad93fded4a88e9b8ab1bdb031bb0589a9338ef7f6ae7f45e1ac1f20540e8b1f535dc967c2d853542d4fc99edb68f8ab6fa4e88b1a13b1cf7031c0a6526ec0750d842f321204669e286d078050b3d5ce45baef697407b2d852efde341b937bf251ac41d49872952c16541c1d1ea9de94cb0fcac1156a4a8573ca7a3dc095eb48c72a7f5ecbc908e81c22317dd638e173b6f667fd0d3b732a3abd703ae88975edb3ed04e637b527cbec88158c5be0b00322edd0993b6333f5363dd2dc070a9419b54e7d0ce5aef5ce2a7545ae9118013fc0c7f0b7d321490be6ddd78c44733d7cafa8f288ee6ed694eef2f09fa9bed52fe4285dd65ee7ba2ffae2a2e5cef81d66a1a606041d9cb8401d3b057e3d6c06a928c91d861bbffb3578e1d3b8f398162db9d004928c9b8faa86575c01de5db5012e3c811fff422017e76b1520653b102d038be3366b1d6eecb5518e6830dd0dbefc5d4148ae50d3399cf95d1d8ba315241e2e86a8c583174c241121962d3dfd68b802c80e0fdef81aec6dcc5f9b3ff7db85734e7e5d9d183bf2e429419612c6a84b1009b1dd73ac82270a70502ea9908badb64584155f7a2034b50935d41f55508ff90ebc6cf760b441ccbce24b3703b19855c1e38ca916efa56b65bd1e9038b6d40213622b2dfa5d7cfe3e36780a5ae58abf2cc9364fbea725c6c17b20856cf627a398613e9e5cd105b4e796d35f25133a7fd8c4240e70e968d841b190903ce9d64a72f1c1a1073a0a1ee9d08f3240a7e3857da280e0070b415d29c55c3135c3b752df8cd5c7b58a5330e6a9e023cf593d9329ff0f8cadfed5ad899e260f488980197088fc27c8771c2a77baf83c8d94d82a166bdb9157368f78dfeaa86536d6a6f60ccee8bb7d06406f4208b8196c9bc2b2e2cd950b20473de570354e530d09b1af2e32aa1e360c8c0c14383cd4bed15706be426517cd56402a408bd019746ef25c5d510347cd61b4047dfe021032307ca1cf406d2d63318386c1880431e70326302e9f40c1c3a6008a0a0187863ec5692589d8bc63c3c6470c0b00d5a07b2d272441eed19a42580290e64d71b230e39828db6e43eeba27555ebca8be5bb2c1a3fa2564a0a7cfece31fe06c432d1c59d97c8ef14ac13511cddffc249af8bb1d94e2b1c839ed3301e5febe1edbd74dca02628066b52703b6da11ebf995adbfffe592682e9fd91e2dde4eeb8a6336e7cb35981c33e3111e39dcfe0ce010eb4998a2111f2245d5bb92502f929e6c1019ab1f8caacd035ffc7081a8464cd747db2ad3c41cc2fc3a831cd06ecf5ea56b874b26a5c74e901cccaa2f460f91711f088f95b3b62a192c152870fb5a10e08a85d7b90af4365816b1939c3a9f1a1d8e62ba2b33b00d25703e96319c6569af1305d15e8f653d12d7f6cdee0bd2e6b08788e8b98a8f50f4040a27a438cce3da5da994302d456c79edae95ca080360f59ed62f9c46c6975cafeb2acb5afe35424422b05b9a9dde4ca712573cef0665381c37e2211c4bff8a73a7b884d45c5ca5e3c25af0494d07236c7b75f225d89e51446ad5b39fe4c01f5638664c5549746b1d72f4f2fc13bf3630617e31c586e9cf49a0d3527ef4dac519a3989e3c44072878416ec91082f06242a281065bec0303a0114bc6c35a83763490f3230f105e9ec30156c1f86ac4d7abe911a2ca2290c487d4b59c0771286e5100df0994275c52480909a73c3d8402e0a6020a2736adfd2791e004fe734b7b7ea47ff9e229a79cf2a8b596d0e1b62460d261258d2658f479c8e2f165d8538d66cfcce384e25e30d0aa0086a36fa6e9c476708c1a0329171e7713a81110254139d2b8f87da433aae78cf5cf24326daf22a7b21412cd12c041f30f01b0f3032e5fd51d84973b1473b3a857a13114b03ff9a18a6c1648add6ece2dfd770e49eb314cac45d74bdfed6d3e17a58a5372517f261076f94f7d6d902eafffcd520f3196c3f8ce38bfe250652435804f42a8b609ab4a033961cbc7f3947fbc2ed8629cad48c2316b92f8109384c7599971b4425a1ceacde73864c4622a4637b0c4f1a3b3373f5bfe32a2b08e2dbc820acd442edc4953c8121ef629142604502b8240ade94efb6a0e9134aab588c3cae1786128fd21e63257e85239bac8b8439b3a6f1f29560124e3eb1b46df36503172a50db35a0e9c8a3b26152f61beb85647a4d118b5622b361576afe930066f6181448dd4e129df204e128824d3a7c1fb3f3463290f3195070c710e4ec34b1deeae7dbd91745621296d37f2b65c036be7e40b51f7252caa6c4b39bf0545415a89df8d9737b91d8fc890cb367435cd3afd5a9e22652c87d9d7bc1f42f9fe175a8e079e1efa4259e0cc447ac3b712c7f99294cdceb63e2aea50beb196aee3a289d29b88633eaf427dda1241b92887a0ac76202887cf07caf4a5c4d1c503d169481ca9a7b77ba92773b253cf4c25412777bd804e8b4c456a15651585a7bcba7af1b48779e9fadc2ac7d63dc006f28e901fd4323ca894496cddcd07cf302d90aa7dc8ae360cea52f2cb9e58a73904868982fed60cec9125c2fd3013ae9e9133636ff9727a630c93e5eb5dafc2dbd1c24dd24bd5d3a1ab52dcb82a6eaca72889b9d2464d501deb205b897838cbb01535f96ff4eeb28fb4566ff0315a925b5ebe0cfe4195d624438faf9c74f2ee1ddde4f5e72a1a7ae2d1e17ce09146e3c12d86a4d36e9085cce8e4fae364e420e1c23e05561b5effdcb241916ed9d916b757f887f1fbe332c63aa178d6315cfe4406e2a36c4d5cb231d4216f0d5615074710ad890bcf7fd658955699a4defff176e8a911306958c714880a2b1c12eda17fd0656adde7b2142073112674344e5145a85c3700239613cdd78bd003f5b76ad423c524cb484dcb9910bbd370f6f6ea3432438f184f8268e8bdbb9d296886a1891b6a5d1ca75564fe9d45fb01b8c7ac2e5a4b181b5da828c26fa70894c0072a19f624276b678d7478e2b6998ba66d2b4854cd78bb68f52682445a1714acb46a661365e6f114641b1196ac9bf6a9ba69ad7f0a40c589d5fb86f3d9083010d198f5121ddc603ac895ee55f40a4d45663579e109290b32062078a2b9ac9969b8b8fcc3f7a2019fba356b51c8f87925853a2ac5062863e2561710bfd87040b9d221da8ef28bc4859b4e448c82b6d9894c3aa0e779808e375c8b2757cec5990b7dd6ec38569ee72e703a34f449df03a6d093519b52c8be2f2ac64acdefa7b7ad8a560035713422ac5e13b48b1f42cf7ead742bd56bd31f3dcab4c9d3cce6795b5ce57298439882ea9ff748a58d7423922f1922eae4fae54206494cbb8bbc1486d31b0acc679b6ca17619c0df84a16eba6cc5826690d32d60e24418608141d50da90898a0f6d9258add46dc68de766f166efda646127c9b9eedba159a6c75765d712618d0c471d7a5c0e4e766cbe25cf78b08c2f1d2fce80e0849e8aba091eb7207e2bfc5e65ed6d5dd4dbf3927c848a59d07c7389b87d4e4e401928d9040b81abee0b644937f8674d5727636c58962d172646cfc9fa374017e6b03d0436ffb737e20e7b047bf785526dfb7c349356a83cedb332ea71af8006f78f76e61d4ce68f39207c85471cf434b6a60079b1671d1cfed57337cabffe226308a2cf592ddd67e81ec90b06b0b88425cc4c53dc4bfdd846bc27916f00113398f4908f8f766d0822166c404857e970d1e66e561ae74d640efafc56dc441870a3fa8d3e66919051a65e987f20384fea7e62bed75c0a17bb1030e3d94f927a7d00096440f3ecdba0a3e302718cadf8beef9273987ce68b8789278d8f519807d99e1d089b57fdba7a3d06f022d51eca7e0a50aff20c072c5fa11e4ce0a544eb604397541383ec3db6c169b3175deb8f5cfd97e5d8b7f0bb67ca1df045ab6e827819628f8b38065457f10748942bf045caec82f221807669ad8035c4524c46d31c1f8f3f0daf5003fa22eb065e3fe33c6cee2aaea0eece046012ecb07f6cdc2ea0f2a2e9e16f43b76211f20a2aebfc9d8297f900f20e62559118edd376d5a19eaf9ceb8180ca20026d3ffe5142cc1b46b216253f4547899d8444c378422552694270d3b3bb504562b2db0fe9f7bc709b226be9ec2fd8037003d00741b87dc613e22a82770adc144c0b2e0c9eca27fcc60662c36c822c45e4e6a653a16bdabca68c32231baa4531eb826179dd2c054cab7a7d15a9f3fff45a644333d8a78ce3ef55fe049e0344a5954533a35edf1cbf11c733c8675129efaab4a1bdfd1240eca3661377d7bfcef0e3d10a94f88ce6b9ad5f27f91f9e383ffcd71fb9075d90d9f281ec3ccd4e4bbf20522c40e376ebe02092a8aef1a646d30e8763c6bef40768375705099823dd61625dc183ff0623dda9b1a478ea5b12924bab90bda0a792873542fd8e5889c44d214867e23146b041c136be84011f7981469fd9dc5d71d7c81f24e8c57331d6e497882ed167284e6efaade9ecac2a30c2e07b31a22ccb1611d8359442b1d39dd69510f6a5c22bbbe6c8763a309992aad1539f8a7ccf00cdad0d30dc48f1be52d9337aa7295ca684eac210419bb4f04de364e7be10c43dce9eb43589d2a70642826244a10c7a81bfc1100e24b4457da7bd3267e0e20979e11aec8290b42338862b42f926db644d54c935af14c5b619d44e97c65bc5b93dcec06a124bebd9ef377204bd52d71228bd09d18d76c6f85b817a9af18e897d3ef196becd92493b26a2719a85ac9f9bd1f3aae8f70186bc000a7ec0a42f3b60a3b5658396b1a8132fb9f3aab7bd65a0c03bec5da5368943269a18e1276a4aa270696a2561b417a4c63d66e11d8395603834a85d3912d635441b00e6b6a25509e7e44159125d70d892ae35bcc53ad4d86a1b08523df2ae6ede86eb49561a7368c0ca5ccf9867995ede4e398ef7411a7a9268ef7002762ae52011183d6ea846fc7e4bc9ee35e635cf35b3f94541e9959fc3817b230872ac2a033df1b77b5f4b0da3703698bed4c442394b8940679b16ee46075108ceb49f26463e8f5680763744c7c8abb7f4eec9658dcce6aba2d1cc2556f0baf92bf72362e76be89a856081e32d654e231289c0d972d8c1f5ac708f793c092c67cedebd10c4f90c8fc083bedcd1d56121038e70e5358115e23eb553ee4e1c2b9c330f4a6c426ada362199b5717fb0ccc0e3adfa02e3e2512e2b76fdc7187e10c18afa50982d07ed625bea1dd4f2ce8d73ac374c1c43891803b4bbd1f90a14363e5065d71ee70bec90b298ebecbf14e5428e64aed7c3e8b0b244c4049de5c58c146e3270761adde682d9b3302b7986b7128027ec4b1cb0ff13d236e31118539b3b180a04931ce0198ec4c8cf5e68d168adcff182a7c1ec26c1a367d54a74f409f64a174882ef6a97df10a456e194e713b3c87539868d78c3e637d6541e97ccc6e992eaf7308a95fa42613abc01f6ff0f2e7ae466354ccff0cf83696ad6058fc42387ae18090c68b088201725ecf9d37ac203def2b16f02787ff6d6043d78123978258c802ac5a793702d5267ab1d5cacea1eb4a292eaba8435a293bc1d5aa0b8205aed4ea17c4d20f20554e529a3faf38e64e1c5898526966b9c82dc802e87e6feff50700cd1f0f380a0bb0ef6936506eb1881ff79e04c675c77c00719866383aa5ca0a39b955193f28e66a2a5271c727c347e47ec78a8692f1ea8ecdd98add1491e119f834997c146696eae6cc5bf7e86de707aa3bd8ad0610a0f87d9d4585f91f7e452f9c9427eac2d4042ed97eb5e3187fdd0535612d05e7588fc6a8d87f171e7a6109442e4b04975ba5e28544c95ec729e31a565b83c6784c9e3527527822f8f20148df83f42607d7e64c0bedf80a707318849535ac1e538139f20f01248dcde3e3b1ade6b025b17c5f470822828bfcaf5f41ddb07daf662933cf0b07b1b7bdf86ee26a436da273e6d53a585d60a6a7d0bcdbf692c0a7c914de6ecd69634e362b47746f56c618e527cb390ea2b0d2b4f80b7c50c83a1c1b69c9675c22cef2b6d412dc41581147eea53940b3511c6c15db0f881d74efc1a03f5bdc49e4bc63f9b6a07ece523c730f2062ced0fe9106a979a82378e47f4bb47ea3bdbd255273048f436b122e43e603607c406c3d2cbcf1b73bc3f4d26154a2ca17baf8dd9ec34fce7cef0a47a60a0bb9c9a466335860a8dcea0ca00dcaa3b792594416f58844d22227feb20046e47593853307fa3580c311277ab8a4fb1dec67748cd1a68e1b3c85f5e2ee92886bf7e302bf1501072a03cee84aa96d8c50fac1bba864303d427e27d236014c1006279e1c95b32283891d62ad5d970f4c340f8684bddc10b0f203584335bdffc730a16ad20fb9146e46ad9a01ea6fa356935e2b14a3565639c4fcad5e6f9eaaa04c4550a1ab09fca567131875c0dbff6c6e12bab23967ad0fdd74bd57acc0e2e60d330308503407fa9299003941514d42a823ee87d9489aa1a67aaef75b69e8c9271713daa35b41f0fcb1aeb2a73d217aeb757fb18cfa5182a8e1bc0666e7c20f49635f00a41cc5c50fef3e7b558112ccb7144f28980d51823a4c6960721de2e8d9099929393aa719184ff6c54a79cef4fb58b0766c4af635b90e7b2e1c8b172629324541cfad1063077a496e6b2c63831ac8f6dca69143492ae086c54f8a19328e94777e9e022c3293c2203c94b0f70f7b98263a269296712c2ce2b6cea468164d6085a796566a7c45d551e1fb84fe3a158832c692df89d862b64f9120aea42f3ce37c426fb7ff02ab9762b72687d97283c1b6c4be0bfc2eeadfb5b7b6f5be28e41cb3362f9a3f89f9881c35ff2850abe5d3565c3a5781e3fb41ddaa3fbcc7448e7d8e099246852888026d1f262d3507620286122a4ed4fd19a9e9a011669b6594902ba84ed5322c3c741c41892c8f821096374ddf0c548d80792f7a12be15fc006340751672eec44945a5755bdab8ac41e27db5b40e216d5b34baeaf056f686f637ce6d2013c876723c897676daf57cb8786657844a636446daf89acb63517ac85c5ee13958adc741a84d39b3fd19b13a7472db1b3c40d95d5f8b1ef46607e08b84c159f6efc88d3d5a299d754dadb83d54635ba5edce446877b93d3a9a5401d6ff45b639c52d288ee5d6fac785dcff82cc61d24e9e0dc455154200d1cfc0eef9eb4a51358b803d23834587cb7848813570884c15949cca203a52d58febd75f34a2fbcff736a7252c1d6bd4e9accdc16c7f50c63bd7759e05863ccaf3e34321f7d883c03921cd845ddee1adad6b189d3c8c19b9d2e2e891e1d91dfc30b169992dddd0b41650a9ea5cf95e70cfde9ef874eb5a1b621fc63513244a4606f30bef373da2cb8b224ef26aca3f661bbb00528372e05ad361d72072ac6d67f1714d0e0683a35caae9c420419c0db86a53ee90de3fefd665df4a82687fd6786751916272df6809b16bafec2a5e8f01f42addc1978beecb4d91c69fc9a4e4f6337c38c2558c93f8725bc1c107e54b8cada435ee4db29b6ffdefbc064c231ca4d0081d45ddf0a40b0841e72e6c17256c8eaeb952bd892254e021f203aec557a59a9991fa3cd46b27f87d2d83f6d6b5cd679e3b0dfb599ef867ee613f724d073f2a75aa9695158557e7bd4e6992cfd8983b82ef810fc7fbfaa58e2e9d52248d32628c1ff964a3e267e7146c723b56ecb9f96ac5fe1a31872beede549bd3022ba6bedbf5effefa52fbb6c912b682b2381a102ada695aa562b016db35272eac46c9af110afec85a640345939cc6027bbfc9879fb57e54b217e8bdfe1877afaa28ba216c614303358bf42fd08d2d6dfb163f92e813c971f044e1554eefea0ac8027492ad5cb796f410571774add40ecb83acdcd13e27697ff10958d566b7a41235ff20d2188d7b46b97f46c4e911516c9b752fd9d5136d1f3fae43ca630d3c613ada83d93cac1c7dd152e43150fc375974971f45902b88be14cbad74f953007b25d1bf62d9152e1f8a3bd79aa98b38b15a9d65224f3fc9d4ae5870cda4049d7d9fb5bd1da80d2bd9df2ba147e4fa6d1ff6649b027ba5e8da01af106b3e525bb128b44a812a4a29bdb6f08556b14f5c427ad88af9504a438ad939cb453622c3820fcba2ccbf80aad631b74bdae5b815310a2586b617850683af06dbafabeae1b00d1e5cf79798d96220771e23d045ba2a425887462c3a051daad136caad2ed59943f8dcc98356acc25921281974356b701ca8d10a383d28b0c688331600e66a942445131695d2b8f439a1a60edc4fb46e2d7ad63da587279b1b01cad67d2abf2571af1f1a8808cb57fce8425406e50351e1288f1a676b59c875f952d8b9d24c5c847898cbbd0174d002aaf941635c509a0da70d386a4e61f5f979756f64085297d9a9ef82d4791468e791dee71da8312251e709c59a86503ee23c5b5c49e2e47a0400000000000000ca58d62f5216da38bc43560e0b6decb27450cdc8fec6ee6e9288904d24b27b73e50e5c063906f805d7b580c7200c286120223d8c7831bf1ad33266cad476cec664aa4c1547bad28e4ce52567d968970dc34964cc8c7923237206bcb565c08ff2658c93642e6e8aff626fc08862761489b1d951ea0c47ee4a9d8dd93176d96ac78fcfb39aeb8a0ba10f1742196d7cef6e7381f732e907b9f39a1e4c49adccbcb5df937e90bb6c6d36a3ce489488f483dcd94cea81b4241f3ca9072e8056402a825404a9082034d4e1feefd5902977bd8488140391e805c9c68b179dfdfe7da213db46a6d1218924242193040e98040d1031c83ce414e4246ea450914411bbfb175990b191a94922a592694929e74cc22589969dc40d2cdc17afd044143eb210b60c12bbfb1751092728815b1914e820d3030bd432375051c9f8404688dde5a72d39c83df78d597d74c3393fbecb29a18e4ed4ecf877752313d52b08faee7e95a5879c9f7154e41eb15d33e326ab5d8545ee2a4b6571127c495f6dcab90d5613238a53698528257caf24981845b1bef08845114750a20a4398620a190a231f86900517b02401891f468084113bef48811f61878844134a0091b04929fd0b2a24ac80848fddfd8b25504185bb4724b8b7dca3b790f0c20b53a66274994202890777d843be22e7fd544348d15185d521858e1f52878f12641d3225903a9488f961071813936a91db7e2a1d2ed4860a74a02281112d50ccc0c5478995d9d68a322806180f1c56cc0f231ac45cd513b21572dd4f1563e3e626cb20d79516b20e199555f211333a1c41850f483ac0b899cc8fae4733c8876f221f4ec0ff3d0422f4bca6de114eeeaaca718c114ece1ec9b6124d316e774b7956abba2396e2e454d1e19bb3d6ed337a4be5b0a52089d3f84c2cc5af2a57eda8339546ca904bdc717b6c4a2f60ebabd974b4856c6ffd5b235bd9f4338a418ac5483177a7989452526cce3927c528a594528a55176fb1a9a137e24b8b150333531035b3e9574c3241ee64cba614fb8b791098aeab4dbfd247d93062d53245df9633646a477889b8ef858e145f893ec5a888caa79a524a6f1dc1e40cc8d496411fcff92227919974912927018542402e39927cc89e711f50ca49a287e8d40e6910c865cb1437728c1bf9833c0a4e2c45142c7938a415e2a1871143b84f8f8f4d2c6d2b4ca69c243e37e5cfe16353e3a618fa58f14aa5f8a1bf31a3d8868f15cf147fa3e299dcb39a43d8f39fd0df995db8451339e43f3daa30f984e8ad472cc50f7d6a1e0cf1437a731b600988f61087b44618900ff237c807d13486f0a781bd7cd73780fcd534ee83dcd6b6f28f0828a4b54923c8fedd6d81fc67e52420b0136dd872d36f33dbca49eec73cd24e926d76776b8bbe0bbab354d402d1f4415cf7b1d9b1bb9f9a1d82964c396b77b7f56185b47614d5c73a13ad9e9b301bc7402c9195d6272991fdab7ef4c954c910fe30220975d5cd07a41c7297b74b8e4f6a45fd5212c27de1288bbc4759e4bff23e185d4aad0381e364f88e65b07b03d97eb154dffea3ff244af5a0cff8eac994213cfbc9a5a87cc910f78790d95baa1d5fe533556c1859795f1a96d408a3842eb50e04dbf59528eef50857de514ef61fe5e49593c492ceab8bc81359be0813b9ab2ed585eaa8ab0b57841cdf25c68231c6512818989717d20ea41d9e4a45da2147af33f8582add60bfbe0d22b7365ea94740c81d49247293a721ca96765a4de7c8e4eda847f06568144a3a01104ce4c7c7f00c52c32decebee1f5de320513cd21e2edcc2bedb7c164ba248884da28dd8c4b36313097735d9e69cd8843ead43d9743eadbaf39a1106fce3df605fbe0daf242507d7fa7d0ed66be44f1d84e47c65e2a3fa9584b20196c4184ba2bb0d5e123929a52c99dc9c73ce924829a59496c45a6badb5964cce5bbca5a626bec417160b0606a220eaa93409952f6c832d897fb120a29e766a13aa51f6c37334c346d90fcb40f5b3e195c4181770ed2b37c197196b1b6591451635cb22dfa88345478a1572c84008a3d7aca49493e668e560d55aedc592c230ec6647bc1ce18231d6b423ec1130f988992b7347588030874a1e810508618c2b23e0714757d051848e1de890d93cb8ef41187323e60708618c47c4784ccc163d9fe28ea810f323861553139384ed5e821d5e143e1c21448c1170502306251712fb22020b9785d7755dd7f5d94f75841336b69f2a86c7142bc8b1d223470aacc8c13242410e16ec90a3c62825470f2254c8d122f223c70b72d850e51862e3fd54395c0850b3e3fb8bc3784bcd8a6503637497723e97724e4aeba4b4ca73ce4929a5b4d65aabb378cbaa26bac4171b16bc011383e484f497aa07836bc8bd1d9f44b3e34fe086a76a4226015b64772f5d9ac062772f46bba1dac1b2bbb7c3e193f3083b52f16a6c6a87080f920a56320b9ad861f443133c341103957bb7f79e742070c0a864fcc581701797724e4aeba4b4566baf6aed7561d8cd2e0cbb37cbf0cd5419c634da167d788aa39cc55722cb47b42962876a450353448438353644e144976823a2705a3255ac5432363d5432317005de1002b2c015987a343f561bcec018dda584d15dca2927a5b55a5bed7561d8c56e9661ac6958dbb69c3b9e0f080402120a853cae232560c3ffbcf8805e8c5b1647f08e2412faf3a9456d0027ee7ba1932e328b3886f6f7ca4ea40b416be32b43cb18a6bdd4b0c675288eafbfaf01456cf91f2094a8b1b10f512265cbcf88f063cbfffcbd3583b80270cbcf1ad827be65642f5fd35d88868f7c09f25277a0b73ac752c45ebb527733e44313ecb17c8cfdfbed33c6619886719ef7bcf69d8e1ee5978f8df2dfd7bec38db29601fbdbf98bdda798f61edd4247d6f40c99da1ed332364e729db669ac43febdf490f698eeb4d427beb3d73e621ab2ffe80e7638ec19ee637f31ee723296b00ccb8f618869e8f0dfef4e7c67ba13c196afd170b1eeb43ff113df9dde52eaebca1eb2943d7a5ccd4564c00fb10c1d2d5f77d984657b3e73da77b8ec1f8ce8c939638dcd70e90b3e46049a8dbdd4344deb608f85a0c561ad73bfc3e5cfdda62bf69df6770b5bcabfdc680b59caad3d7e187ecdc061773364eaea80cdfec07b3b8370f700dcf0a50b68eb715fa456091925a68831ba7ff653a928a5b4562558990fda0f2a2244b10445b1a442c2b66d39ab9a000aa140407a08797210228aa55028140a0951b124c87eaa2576b880ad10c920b70416a325b22089a8b4e8b800c005220220daa25882788b6209724c4801efe09292809dfc6068ed8ed4894859e73100ee98df7eaa246c5ea0844c0b5c50620a13885aa08412ac55a1b6b536b4adb5d68e60a06a810f2ba01f3e44b07874a4a0f3c44a5621e1049baa093a68a81e700f3c643960c115820ab01d3c5c56a0c02e81850aea1259e840555e309970598164820817f8b3f231c1440b134c40011352503181b3e77e2a26aee0223b882f8a2371476bbfe7dad6207712d5dad50620b8064a2047e03bb729795f9522140578a5f89dd364fb3b7781f19dbf40e03bbff180ef1cc601df798c471b06c496a34858e28d04c418044496023c8a82abfd60cb2f60bf4f7dc1df9280ce11d0250778057823f1a58bddbab31986eeb20802ba13fd0374f70ed0abf8d66606e82e8b44bf000d5fa6ca49600d4539499c79f1a254fa178906a029cb493c555f5ebc2895fe45a29c59d6e62c12fdc7607f3b1c2c912c20ff912b22b943c8c7973abc18425a9e0f7120efe1e8cea2ff88ac288baeb0e2a525519e0e2be40a2b3ebe41b82cd22f963edcdb718b42aeb002ee10e83bdc470701d2f9b9ac3ddcdb2532c582a97cc910187f7eedefc431b4a718ee8d833b6fdcdb0b7012e9e2225da48b8b7459ad56abd56a355926cb64992c9365b2c4b7366791e8bf145b9c84a2288c9be2a35a502da816540baac5da9c45a2ff1265b929d6172f4aa57f9128e7ea31d563aac7548fa92fa41cf9bdf6d7c57a8b5ced08e5aad6c4c842e34bf4a99aac28511206a260769c300e518fb276a49415f7c39e9423d7178debeacb8e8f39b8dfc39ad31df4c712e02e532f7080170788e2d5c48314438a21c58440e0d69e1577575a409cc9726bccddfd01f9f89d1703c8c71b6e8a200e847c7c9127343d5ce8411cdd21a1d7be13ea84fe863a213d3b34f546bd2177c86bb06705f270efc110d2d12f9642e2c60f0610e7e150ec077708f776a8c6a383f8e8100e6b10f7f6ce4e323fdc8bd7f69593a40cc1010cf2f19d26f49e8fef3cf2c7903fba4de72307f21d8e6e0fc8e70f8184401e83844034d7e1a62704729bc7c90df20ed03d06891cbf07c38b250ff776878b1bbf0743fe18a0eb78b8b7413e18a483f8d0aae1c7fa3d183adcc332b7db679c2462b8e216b7711f31d7ef25e1c89ddbcc2cff6638c6a67d074fe06d6dd3386b6da6617f5bf174e813f403076ac7a9a5cf1f05217712b5d57c8d6f421ffb7b35f6ef0598a4704f9df2e3da6ab65dd9f1bb0cafa4b20d7586a241eeb6d68ebfb56a86ca24084585ec92d5884e097861432028500b24754a817e8070405240ac938a5d89256959b67ce1216bdf8287dcd91b5bc2b7383b624934134b52a47a30c807b164d602b1e208fc1f5b7ee644ac58c269815859c892d2887e80583455f4f0f103889797938a44b1b4b89058d98d7b5ff6440d2794d8776634422891f30df88e31e29b5a980b544808aee1218641883dfc09c32f2ef40fc70861d88d9cfdcad1cf1c9df9edfca6d6db34df87eb0cd749402008eaee447e6630b7343146857ae4b2a5116a6c17f65349d1da1766241e5906fc3937a4ffa989239f15cac7268ed07caa88233d503e3371c4be2987f444beb2a5450f59fb163de4cea6b6fc0f071fc4751e84f36c216f38349f901727f1bcc4b297cf0c08376271937c10fe6ec309818925f91e2ee4850bb9b165f65df6f299c1c974d4b2a5105b3ee6ba101c5b7ef699d9f2ad105116b1a5c5b1a5cc962bf2658b93c4124943c3f0ab6295d3ce72ebad3c8a786658c8bc6d1bfc2d6f5bcddbf4fc96f3f6a6960927772e5636e9d9dee32265f378f4f4fc7392cf77de3a09e83bba3b9179d39df73cc84d9e4ecd9b29c79463ca31e5c82dd62808b1e10af653d1b4e40e7c294f353a52d64efd93b8ad9c28343a9d3fa574a4f4747487d2c113eab4d2e93c8ce8919dade6af1dddc1cf97fc93ca49e5a47252911ba438d8dd3d9bda7c2d9e54b28f9aa6fd2945839ba6633ca14e29a7154d7b18718b5a764ad177ace90e668fb9ec3aa99c544e2a289a430a9bed623f951438dcddb739f17c9c99724c391b0a0d6c6ae137e160172b5b76995ad96f2e5230cef0e602357fd33aaf6d99d67efb4e4935df77d781ecb3cc9463ca31e5b8ae19c2baa50e9ffe18fdf97be8efe1a9c683f094b20231ec947a386ba1ca16d327d7b6271551a62d9a148f168f191e311b01fba978ac688ea296ba4055295168985a261c172b97a965c2719132e9772e50d65aeb577c2bffeaaea4dada7d7cafa65ddd9d489116aaac2fed669cee307d22f7a545d971882898b42d970b9475eb0285b940e5a8c5cb57f7fded6b5c6966dbebb3ee4a2752a4856adb747769bf1e5f2f82f90c5fed8a61dd892ca91c9a724c39a69c1b11e54a0a832870a2a089426613603f5514365451aca8a05859543ca5608e99f538633ca5ae53ea55fd2e51bb3bb9304ca25ae8c8559f5cbb7e7772f9a5fda47252916e5154d836788239a5f6c5b2874a49c9957a5ffd8ccbf5452ece28842955cb20ac2fe1cb4a2f1831d31efe49e59ad9a555eda21767f9de8842e33aa14e29d7a9c6c61e873d6576429d52600cf2e369e58a8fd5909d54600cdad318673ca536bddfc9a9bb934b8b8fc50a60548fb03fa14e29a97d4a6dda5f5c43b6e56ff0ef9d5fe5cba0ba8317bd3fbf42f927d40966df1863c4b4faa7949ae19f73d29f504aa94f28c7d95e5b8e736d19f2f149051a00df1faded7f528131d0ebdaf7e75f4f67777f6cff8c3bb94e2a7ffd0975bdc431ae53eaa4b2b1b21150a076b6414f6f40a1da0ad84f0505cb9ea9d9a5fd5433307b86b5ef862e505b63f98fca610ee2d7b8ed2f07dfe2cf9c7f87932f72fdf51befbd574646356a3fbe09c75e4d7b4b2ba8868feee2ceacf6f948ed47cb889f7dfdce568d42a33ec4a90f5dacec0eff49fc3c0ebb725d35b54c382e527687ede7218e559fc44debd78f7f12b50cfa9fafdfcdf055e702b571696657dde1cfc36a2f8d860c7633f4287bf8f8bafedeaabb19ea9b5a7104be7d130e8ca1bed52e50b57627b17381daf0312e6313d0e73710bcaefa18841da43e08bf0cab3b88a9bd7eb3a69cfa20f8a6d68d7d23f728fdfac16fc28106a84fb189a50fc3ed33b562a93e375b71c433dfcace429be1b797ee4c393086ea798fee4ea4eca0867fbf5678752da95610cf80e1cf807a74fdf675daaf27526eacda9b6ea123cfc05f33b769d5aef633b9f17718ce9e337c65ca8131647fdfd4ba4f718ceb02b5b1b9afcbca7d596dca8106a8da6a3311e53a6887fbde8b363d6a5a3f583868666270d454118303264e08e5a415425a2f08ed855d08b19be197e16dcb9df73ec2d8fac1c24133e32ee57c30ba4b39a18cee52ce49e5a4b4566baf6aaf0bc3eecdb09b65186bda86b56dcbb9d3f178405ec87b4f040817421cdda59401ff62a923b9899bd8f04a4cde869444850dc229ee0803f5e5df505f561b9b1a28a3f5fcf03ba7623fea2b5f3d185e8c2ea594734e4929a5f26fcd22576badd55a9665599665599665d92b8b1c8975b12ed6c5ba5817eb625dac0b8b5cc431208c1163b8531c434a1963ce3963504a298d4192420c92146a6a582c18189214f2b5563381113b51dcf782678fb9ecc23450db75871fbbb2cd1dffbb4e2e6cfd3b59f62035def7c7ba03fdebbc6b0bf21efacfbbee3cff62f6f8b3c75cd7803feb00c42e7f2cfbed2910faed61440b641a7ba9698ff5687bffecb1c7dc68fbebf168d3242c72967dfe0b7f06c36716c2afe9163a32d61ffa4ccb085d1beb936b8730901940f48b25ef3cfe4c774f4b8f3ef18d69b8dfd17e3de3aeccb3cdb1bf3ebbba1301a6652c658fe90eff89ef0cc721b27fbcdee6fc2e02b10cfe9ad61e73f937ee6a5864acbb932bd317e6ffb05fd73be6647cecd996312dc3ffbafefafbfc69a072f619c3b84ed3f4babe03281b3f769deb68a04858647f8cf16318071216b93bb9767621d78100b51f6abf7f565ebf010781da156e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6ede0b73fb2c9b9d88eeee6b9dbf32b687f7ea39c36db2196eb351776c55b3e7cc9e8f5731fbbe687563cfc72b973d1f343f6fba0b71d04f17fdcc1ffaa93b90b73adfdffe7a7e766ad8fe9adcd7323db5fb1e0ae4ef58e06aede9e7f3db7b3c9d9f7f479dcf7e7bcfa8a365b89f7df6f73d9fdd596ffed490ff6a19f93b5a86e8ef4faedbb2965af4efa5e31944fa85e813dfa0dffeeaee6909a24f3c621af083f4c433e3b23b6f676a9ffded4430b3fb5a4777dbbc3ebfc510797e67331696b9b9c87cdd754433fbf31d6e7b0f873f9c48e73b5147d398be345c3b9bab156adf9fdb26da38cd267ffd8e27d332e6df3bffd268799f71da96bd87ebfcc675baac67b8cda4d142f291e79cdcfdeb358ee42367d76db087e127aa1b2d6e43faf104d20f2070d470826a8a14951336aa13de66038cd1dda59472ce3927a594525a4be4df8d04051b35090ab6447e7c8f3a08e9519b788cb6c6bd2f8b19cca04699e8d1bdda7bc492bf7daf229628f48f32fbb4149bf8be7f658671264ec5b62671dffcdbe7a03dfe8a4718c8bffd0d79d3cf4d3768da3ed66eff5ef721ae21fbfb980cd9d5bec234e98a1ceb53fb30fced7aeda99d8aed8f8344b9a20c8244c1594fa94a69d4a714ae7ba79892da16154b530939be4c91a9e9830d9453622f3baf01c185e20245e9e300a79df39a53e39872aa8c8aab31b5c2ec68ca59428e3fa59c3417ba8f0def431eda6316e6346c84dc39abaeea8a5557ceaa2b67d1d4d5aa56516b6a8f3842ab8f38c28a23b8d5c2c1da8493995aa61c53abeea8aa3a535575479d8923f5e135eb0c89c735af8b8a5cff55550a2a4593a1f596e3a4a052a61c172995556de2485755cef21fa8baa3ae6a15ceaa2b538e09c79a5a2c538ebdfed2563b749629c7a2aa6733805a947314d74e913bd9625fdce46fed7e69214991655c2ff6c50a71c3161147a8c5111347ae4ab5c39e524ea893cad4d6464bb42e2d71c486758923f52136ad0b290af8d8c434465ae5facf92a4c8704b1b2ef2c66965ab9ef8b16d4b1ce9a48589239d6dd9ee63fb4b1b4ed89738f2544fcc6c7f2b846cb12f27154c9f52e285ea3a8062e18bc0dac9167d69fe92a2c832eacf4d731c799881a8a494f444a6efc1401f4644c5124dd954ea5bc596ff56db882c65e887505e73423fa1fc6bad61a2cc3fa1ea9cf5e7bc60ad155af9734a59b96759b6a42794fc4eee27595ae0c894b26cf8180cee7d1984746a0f239a5a10d28cea6eae76cebaa335a4d0871c85906e9ca65508e17c4a5da020f76af51bb37dfe25f1c832eccfb9edfbe787246b3bfb637b0b23f29ce136db66c06d36d53226dca616e6ee8575154b2d8290bbba6a01845c5da493d0695dc511db42952fea36db3a8ed56edfb7bfed2eccb5da939b3f9f52a734663f015c9e11d1a9a7d409754a39a14e2aa754a773429d54b6ed4f29db9f502795532a8e6c27d44905428b0362915851805827959ba5a864ceb4563975884600005000d315002028140c08c402913894647116ce3e14000f7e8446664c99ca83c2248751108324638c21c01840000800c8d0cc108100830805f207eb85b741f43ad6a4f4e0534a63f6e444e717a30799f28858d4871e646cd4ab126bdd2cb1c45d8d01b319eb6126e0f3200e0e596689ad16078f5b4b2cdd3d2869e6b622cc895da3839cc80254f4200892fb8b90f02844fa6a79215a96a2e86b28abb8c6faa058967f4fd278621f107eb2ba893d8b341ecd7499d81d235886f1127bbf4ef257ff96d8e2ae88c1da174db1162ceb8ae6fa63f60e9053ddc53e6252d7f47fbcfd3e6cd25588cd6f5bf89ec7a612f4f91e215d4248a62ff4f226e4f1e5662b6c722b9be71a8ba65188f4ae270e7fd03596b3362180ac2e96157f2cd758be8384dcb2ba5031af476081aeb106124d95129584ffaeb149eb26f105d7b8b1ea48d4316a080d5f7d1781c71a5931458420222effd29a4cc34db88bfef54028c8f7cf2e4bd2d2162103bdedadaed95b4442d6b78e3bfa8e8e349b77426f125bb25378f0a409b02f2d70646b3b0e6a6d6b570791e2130120b058b62c24746db8825ac5fe7ffc210a34269eae3b72ff444c34b00c124c967f3cf6870ec54b1bba44dfec1a04260de24c681900fa530a50f1fba91e4edc4db490c5c156f77ba8b4eb1017ead11dfad7cd825d2bde362d43356b2301aff4ed69faf603b5fddeeb49b2abf437f8b621f9b32d480b9aa9bee239d9d326ac1a420d2939020d75e0202c79c9588a6fb753dbcbe3174cd20d968e9502ed483084ad5038eace5d4c930ec9e5b77d6ba5f31d2eb322d244dfc3b31ca2c114682f4640ad65f4e7280827a9d9dcffdecd455447bc52ed939593f43b5da5ba6eeef478b9a0cd41e110ad55b13733a6d8cec8d4db3c1fa92b8f8ea94715b04d887c2ec23a2bafeba03310b41b741e8afc0e17e043b4cce4729a380ee4246e475d46a786696c44f27725a9a4427c021f3524af61838e0517ddb80b438856e44e8741ed56d65722b39ecc6e540525ebfa0a45ca849ee15169356616afd4d1543fde2e84abf8c51b49bd1bb568736215fb8078780de8e984c045a9391146b5fe52236778aa7022439dde3b2cdd63c9562419a3a2b663b3dd4cfa12a6abf3fa5cb1b480325115986d49d07085b0764d9310c4a956367bc666a2f1b5f1a08a1ca2a646f2458b5745e7da85bea25dbe9910bb67040bcccab2984c179abdfdf7e17a00c64efd64cda5d5457aacc443d60bc9704da24c513d7f6dead791863a23949744672ea0c3600af5ef4dce62233d3dbfa7a439cec84e47a3bf4734add739057a664fa8a480ca2ab8ead8581a56a234211305396e2565199818e0d194504106cec4535808517697d3a0179a0d0d9be3257b979abad8fc542e7cab35b2834e5ea8391929763629541870cf703fe855c1ca8f344809d42c2997a04755a566d3822a455eb420f525e1e29272341c39f78735cdc54cb168b632794bdaacaa9efd92ac86f899c715dbdfab4749539869b695d1fbad00429312ff4004cfa2c50bd6a44923798a285c5c6441cdb469d5a601bc850b172faaa888823468d4d65ab336d050d7cfcd23ef112972a260f1f8f1bc8b8cbb87113f688d7f5625c2bbe0b3ecb62f32cb560bc4703b879976efb87ea91403803de8831e2311e5270b89bc54402cf57a77549cfc512e87c489d2413b4ddcdc04eb3a468a0215d7270ee74491bf1b29c38902c968cee85867523ff4cde1264e14fe2dd046d91a8d320a64970fb000422f71af718d297cb452f17ee251f35fcac65f961702b3a238a0998239a2571ffe24ec949de9b8496c27a84f72a260087bc2a5405e35fc2ac6a56874b10566015af47ff97fe6222eaa2b51608f9a22d32631522843bd6357beddaf32c754ddcdf60d25e4d06766b597952290fa7e6ae2735f98244d5ef397ca97137562bd19af85dc13ca5efde6f7614ed4d192d22932c782720dc48131f027f10ce644a9f72554e4c578ee0fed26f1eba00bbd5757d98c9d31034c0572e87be66a177f797658ab539e7c445cffac37555587957d2bc0830a34270a8f1a8910d0768ebf16c83dc40b9bd39075e481a1d7c3813f990a30958f2acb108b1c514e14897613425df4ea8313758cc5094f3b67514a08d8a1cb2f27aa5985d2e1784e941ff005f3bccd4d210639ab2b4b45057432dd3fa9e9c62a7952c240a6591b31fa36276a7e21127ab4c8cb9a7f86d1947bb214d518be992f2a4604e88a3a23ed9268918b60134177ef780608e2550bf8fbcf22c757a6e3be7a5c2946d53b608d4b2d1b502721752a270ac4cd596424c8e2ff0c6cf818c82570a2706679731320776f1a1e569b1d11b7ad06dd2ed6c6899287f6da36e2d266a32511ebfecd4a3e711878d6338289437935e8afa27b6ba714852cd8eaf840dd3c0aa955269d4d5a01629a241bad037f89dc606d3696c4dd71654875d909bbfe52e954380bcf3bad0c1c938290d1e8e5ae843ca90e3a90048f160d34e42bd3b81ae3aa2aff7558993730b8b29714b68beabf8b3f7887a18acea62902f80f36d4c9c598638da5af58fe2d16f372b8a64835d6dae2955a64f10b2cdf535e2d2ec3c07e4f448491a2211d5a8c18a50c2fc2856f7ba60d491dd1a8e6d8342a04b4d9604abd97451bb78234430610e533ef47aae4a318cacea31b8b367915a4c73fb1cdc5043dc0a317d7fdb9102761f4a28e9a828f1563b0fca8e3a1b727702209cb88f889bcfbe7beebdfccf0880ada920cd286de079310c4b5ea10e728335788087f2e7259959233e195ca0e98019a909d59b293ecb87050fddfeba1317121c1b1e2fdc4df57e837dbc28be4aeecda68d77889edc8aba0642d6465c2cc00eaccde7e4d0eebcc826e662a2bb26c585554507014fa540f1d5e23bfe81841777f42b7d8212561d1720d2f92aeaa1321ecc1064fea54b8d005e5ae7719867a23f2955889628b019e0f3f34ed37927038b22a29572e1462649e458468725a3e492ea08970000ba9f8d703712c3f3730fa2a95a3794a189ecf687cb9380ae03d40978fa6481d3799171087fb7ead30b3cd3d36c82cfcf3a00099163896e978abc3c9be29b00ddb6809e8db7d11ba212836bf51a0814e119aa3649919f07d3e8272a24455909e16a53e9c2287fefd29b5c087d004ec20d2108f2a35fc820377da764f2342b93a511e4b13be4cefcfc23819102dbc55dea788d672de2abe33963ff3928dc813605f176ccb4d8c2302ca6e0d272bd6b788bfffff55fd6ac5e62ae204c317156038292a598abe3bb5d3228496d7909dea32c038ec77adb2c8b0a06d957f5c771474d43ac625bc1c6b5c3462c1d1083d378a1f2570eddadf9cf76afe04f45094948ce4dec02ee77db53b534d0bbbce415ab402edceb73fe02697cee86e30a98f40c5e6511c845213bd65e38f750bea30e10c0c7cfc9751e484769e4998299d8337c5270ef711572d10e772bec2f1c2d288d7d0b942db792eae5d2cfefe3d5fe4e9cdb4c711da38115ead0c793fdd2c78e24b9c9a5ba9a0523c19b7999bc90e7645e8667bb482c905e3260e4b55ec0ca1a0b12262ff340685dd4c052b0bda5a5eac57848c9e98d7840445604a99d6f48127909d0dd4089329d9ff14a4a8c66603e8c5c12319d059d358a48c19607f9d95be11824d0a98f1c2d2bf5faed10b5d3f24b0fd070620e2a9125412b4011de1535c45338de781aa07984e84864b552b02dda7ee4cd3fe8c8e35978b459842203572a473a0394cba8b521ca6b0088b54a4639367e02f3a4902b189b546d87055bc0af0c2acdadbe21397da30811c8ed9563974e094b680ccbde3aea3168abe3ea18c46fb3aee4a776ffe4d4a8896a2948b95b81eeed56845cf3d3520a9a30ae726f64eb6f94f72b06879d8323cba66725224d5fedb886d2e70b7cae12c1d0d1f00ed1e81ecadb4a91d1b51e4603104db1d9a124e5e13aa77b5a9f2afcdf31c6c50f88744d53537dbc067803367e5ecf2800d4fe717e4b1a21502a6f5e0a0830389f4fc7136cf45179d09d460f3ec2de22ebfd6d97ec7599f4427809666da37a3d6de1bd836bcccb5ccf9277125d016d7c0bdfef9159e61bda533bb5a6ab33ef6ac1a7d7e1c828d67e93ab7ecce0b1085c0a6f244edaa3632b640d483a76c6e0299f9c2481d3a53cc9ce49da9e16a994dcbf378fd99af2e9a38e5bd71325ae5c6b7afbdd73581221210071a96e7487051f7cab3b887d85bc9ee825e9d12469b9351c3cc4ee6a593db8d667905d63229ab89ff3390d026e79631b3b7f8296ef5fc4bb0b63f27a483856135e8c595a1c811f30b1b4158cd93eaf431c9f16182f15ce814f36dd5ef7e6f05c79d48091fc91919e4c3f5379dca7eeaf6b7d42e3c73a7e9a217ba1c04c1a6913b2143d2dce0b7920ee3fd77030b75965c744ba6b76111ce2d6dda46a072db04b18e61b0b48dd891deaf9f3a5c616cc17269104ccb03b65cd81d27ebf9340eb9d190f8c8859d923a51bc17a048a3b56d88f6e84d3dc696bcbb54625542115c73669c257cd4d8ac45e91c0c31dc56c9299a25b5e11eeb8267ab864b64061f853e688065add676845066d247a0304341e978d2012bf720850219ad9db8aa7bc705a14a915ab22ef8e7d17a65e6bbec7365e840827f3cd466ad74d1f07cd995c0f4f2337495679319d2c1bdc43a697f69740fc853c236ec8c7d58e969cbec70c5ff126d1082ee5e9273b6518075f430a8f71fbfd2291ae471276f8c35743989fbd56d46f1125b41c8f4b82cc3087f4c87a9b1672ae82452b7befa2550fbfec3cc63c0406eb1904dc2da1cbe13966a09ebed57c8abc3d2f8d107bc98409827e2a24cfa877ea36b6b0d125e1ea72861a5908549953846739ddc9a4259d89d9546660030dbdfa61fa7a799a111640736b197dc5911d5523defd17fdae44f2021f6dd1c687bd462b5b493c1d0c9630ea7d2cdfbbdcb1837edebea451d221c6e332578bda670adb1c57e78c0c80acd18d5ac32b9963f364017e9eb1b942b5c316dfa20801acc8ea64ee6712460d8acc36aca037cf02970de3ccb7519aa941d1ee0ad219c8052adcb60c4fe7c605df348e2ef6835043cc89a4261323b9240a16c564a48228d397a5bf1c6306d49d1924ddf5714a5555198e18185ac520ecf67780cb144b25caebfcda448e98790f238c8dae6dff7d38631da3ed931097d307fc805b8aa2ceeeb542eb389d05ab503b1781292ae11637ede5aaeec3cee54bceedf7419b1d44a8f8a0d39f0ba18a04eb9f3e294c8da9da7fa29a0032ce62dcd0807d08a3db8e1367990ef685f79c351569917cde44446fad0204a7658c7a92450a63aa38250d61807b3350e561a069688ce3b9197aa198f48f91f2b60c3c90deee62da52b574d60285e513c2648bd1247148d993e29eebe62868b1ad95344682121ad990e4c3803034f6e3f2422d31817b837638de9414fc541254bb9ec01b467bf927255b2c4117929ccd8b0a1c081526e22af2ae55e2ffc7826deae23c446934ae98ced57483658a36c2ad49b43abbe7a28863d27d994535850aefaba755bd7880928b10aafee6a83652473862357e4d3e3f928cdff3e2424a94d61f49b9016405c951333a95a50f31bc0a2ddc20e7345e7f32da65e427d74a6b06f878a9ca532f0cc052356e4c1634daa6ad2c64f74802482f94ed94fd47fbf6234327cf439daa00224d3c868dea1163b5a61d6211991f8db9d41ee6bc56da622ed41e018215af37dd3231824c2883c03d595531f35d653c5328e7292b508bbe269af15d19719443cf61dbe636a7173d6e6a0484766837b00af290391ff63e703bc27051c425c9db84f309f9b49bebb159dcb4b90c59dd6238b1a5ff2f5e82a74decdc1a145f147b758a6b63211d82be57885618bb8e758012d6f452b82de48a159cd9a8e9f85dbed9cd09cd5a464f33b207c22b94101b24c50aea3bbf3f0e297b2c8a991aee97373c818c0535c3b1f4e5ed3485c9c32bbcd1644e892efb816efacee75f96e5e91e54fbadde457880e9d8fa21d2d1dd43786137f39868f0c006bbb3bce61cde6dc3412a22ff83332f50fec6ef584da29e3a9a5eccc15d51df8ee6808505564c029d74525b936858faccd17c6d659ff1ea43d7e8998ea9db8e51bc227e68f506683b7aa4c6c0041c5bf228b48ab4285a9988e157866eef896c561b85c2639341f4a4b21a04fbf571ff07ecc014ed4ece278e982b6c9885944739941d314d307925f5a66544ecae57ddf4b3951fa6f8d0d1745af897f0b201d6d0858a3a21ccdbc3532ea10f5b17b5a6cddfe8fad5f4fef124ed827422a2c09185fa248d3aed65bc7785f044a2f0808c3bf98299b5ba59b2bbdc18b5966b2244a237598c235d46f1ba6b7dccc8b4e6457c1f0be118854f0753283568d1f7220501fd730f5dba67be33cb3d1803551c827f10e42aea977313d8589434a7a319c428d7b7360d096901004327268e06791facc498446016756b5d7d75140826c91658b73f45a78a10a45de16cd8871a190a9cbe4cf6187dfb717ea9617318b58b99fcfb2affa409f1796b216d23f96360c31d2096e78d6501ddc0396b24e2d6206931199def9c7d7680270e8219c321d9222dfa80b438ea56462e4144b81293ac10b1586d7a6a44f4d332ad4a630558de5f5369ad8cd0ea72e178afc6faf421d4de731617853df93b511339b7f1c7c9e16e074b804463380f5fdb761d657f2f72ac53971e25e56b0410a2d543edfc1dceb0e7a63b08b230ba05bbdd49f5732faa3840798e12d7c22399512ce1456e7f14aee8bca4d39de70a10c0ed731d495cc5017125dc9b6ed8ef8713b5dc966f624615d5c96c511e1b965bb068ba0b9a354b0baaf520b6eae644aef260458f55536e366ed62a50d81e68e75b45ff240ff3997c5e45158874d8f01857ec8a0bfcdec78fc0fd9b91f304cfd580478df0d979c7c9fbf9f89d38c4363ba11cc3097eb64d3511d466d158f6f60b4d6d49419acd21e115f109a777af0bb5e432d52a1509db237dc566f57a77c399acc64cbc62f48574acd50b2a853ce807fce2867efabd701e671c83cee0d050a3f7028b8ac65023f2e27fe0f76680310bec5538e7742094ce80ed55b437a6b94b00984bd4c607c9d8914c261e97418b3897b9abca4cf9065285dddda7e6697517d3703fd4c4d934b3e676237a43c5003ff67987ab0baa9c22832592fd364316cc70984fddfdfa08eeed8962663dfda71990477255e311f57a934399cea7ee441eaa9ef6f0a4ee5e451c4db637e3294b5800f1e9e3f00a5c97c8536ce548b8b30c227903a4c1747572b02cfb76cddf2cf40d78440e7f3d75a0099f97fc1b2d698993a2eb96fa4e0cacfef76dbd99025f159a0a55f665c305776e65de4cf259cc27e6a93b59daa7f235cc9d633130430cac54055b45ad317ba4a1e0245d2aaa7ef3961aeec14a40fea35633ea0da74b40ad77c4f3d8fb1e6724d45805477c6a0357ae6b9f6f2894139affcf69d3cc3462c96d5eba76777654db00c976d3eb9decf299d5402e8d50d5fa2b447c41c21d1f7bdf16eb2d2d8f7a825a3f41051433f1d72bccca5fbfde337c9c8c4ad1c8ede9f802f01b40e31c94ba8708306ac6f314c2ed05e50ad68bce03d48db6b9e07e2f94a99d0059576c0e503e5528aab0218363545acd7dcbe1a396f674976726d3a03ebb237b6c8c72882927cd74e60e3450d94af2b32b9a7484e1d4219deea2432738cd4c8568a05c731f20265008c894affc302e5e7d260b002e5455d1ea7d61757d4a9f16effd3c042e84531c9f849e382108963a49505ac58474478561e6c80c5f2701025c507736c4eb2fd730fa180999aad84dd6d9287af1128e7a99df96be944349a6524c21752a6277571c08fa60b0c53ba2f2fdb535fd2e114a6768a30a04b808be654b1f3bdc9a1167a8492d86a80c4966f907001c9642712464869868f8bd508f5435612645e2e133aa49f191efb102e259deff606cd1a8342281f40d201c53a7498e957443742997a0834fe05f58d14b4ec2150b398f9e8b71e09d2ec7f77518d8f8b6e0c426a000406f1fc9b8ca2a9f28c287fa0e6292548493cb7e8c9468882409ad8d5f62f4f23a71307e9b44c913d7ed3ad7931a61ae74315c39f937b4aa261b58c5ba226a3187ecee06fbaa24bb7cc853335c274d9c32d8912022bf960ce4b8ebe4ad6ea413a3349ca7d951d101fb275021216430e947edfedaca6ef34a880230da7bd61d142e86941522e772a4c9dddba2f8030dcc46c58304c18a5c7b5b7f0f81a203cc8c1858818378a0fb73d431fcd0103917edb2e5ce8f3445079964b10fea60849931c200d4f573b3151d927ab84f43f91c22a0d4a5ba417d978fe0d1600abd214bd131783dce78525a8539205b8f12a2222aa8461489fdb888d946ad792d5422bd74db07e75612b01353c4b00ebea42c0c710a6e24f16040fb6902fff7a2b70ab931edbeac8ace3368ff7bdc0b80b136bbc65972f3aed93d75f1ecfd8aaf0b4867656f708129dda7d8636c50d89ca117781305013526cd2fb4cc84b30f63ee30045fd80fcdb23f168c09c502e7bcc5d1e0054a4f7d179bdd5b0db8ac34619c2d5fb1e565d1e026abc8e17bfec610356d5e5fdd15b976ca9eae299ed05031fe28595a73b9d2a994033dd1b95a45d478459a6354c5a37559716d8296fc7adbf88cc9f0b134230113dd204cc5586c6c001dfee2aa0024f6ff3f3450981acf8757cd5b8d242fde6f0ac624c511d83d0b78a83c8e7c30d0c008c989113dabcd2fffb6ab22c1ae9c0dade090eebe251a2bebc9a8b32accbd1a49b6248704dc7458cec708075510f076e5e9f0f0d0ae13eeb5969432ffeb076d37c807f9fa17f1b95bdff4097c2ba6c2f71378d70f8409d88ab5052e501ff708db02e10a917bdafd96d90625d2cb74a07dd564146be68b60f364dac050236d4214300fed27d44e6f8ddfb1241402e03933a5764ff7bc2707f2fc06aec074ab42ec8e87f6d765c260ec648df98e55d13939070cfffad76c887d5622ed5c24cb32682355b589a880ddd9ce75327e2fabaf02d6873a374706cdc403a0a253a60120ad052d7a571b795a3a018f81fad4c191d70360fac0a68ae4beb6afbe63fce21a841db9a2c2d1f9c3829f7f2a15069ef2e1811a281791dd4d2151506925799aa26a2c3c66068240aba75ba604f54dc25529a482f940bce7f791045d0180cbc29edd652db4fad6fd12eda44f6dfe2e678378f8f3126c496bc8b06045fec195fce1957e896f34f70b3c4ca2bd89268a8c490bc36b602c36cab8f98798257a3c5992580fd559abcf3f354248f9df80091d13be7a14a5d5ed96fec4727e778be7efc081ec145a833cc6a28298218306c40df28ba2a209658b3b888f8d8670b6950c174dde72513b5611ddcffef8966bbd6f26a005563e9e710aeb5f0dd7737696a81a51ea5cbb5e173821fed32bd3898adad412fb8f3b143882dd33aa71babf1a6d4eb932e0c1a58b5674b83bb840371de4b753387ec8059534a57ef4b146fcc16a7f0d0d2a574d854ba3a61209278a9e80cb5c948c11a54b228394f00868f1c0cadfa39ea97d6e1b08f3acff0221147b0718be0b76e6597b25c0df3deeb3c9620386952fb796014cc9c9c8b332c1c42b342628af721a0df7569c4e9182e06cfb2944855ed9a5943f2227738c5867ec5cf19bc359877f68576bae1305ab41936605de49d84b45aea42746cc3b4937040c99531f39853bf15cc1b2831b1adb85a3bf8e4d89949ffb573b039fb0f1514653e768a0b3836a74ace41189b2b4c9477a1a32c32d5483c2f5a0a962ca27a46bfcb0aa089e7a511ae69d4ac0deaf9f555752d472fd135f0764ea7ef13091c551e114bb6cc65a851ded2fed0f0ebeee1c69ba06659099f1de2790cdc0aa4688c52051879072fd4cf089114becfd01ce3d9b633b1c7c96d31420b7a1adcb8328fdac16751d45657d3fe2478753207f2eddd82c13a630d9c2671d312bb183a91705642d1ebb8df52b6884c4e5817e8d0fb1a7cec94db995c57251fca46118bbf75a0ca757e5323f4909be1197ca1530f956d40ad6195db33545110c98da84490bfb2ba898249ec19071b41a8050c5fa581eb5221cec867bfbde9f75291f6a54cfe90fdfc2abba076a82f9ba364678fbb86793e8dce61716688495fff27a414dccc7a5240f0edc02d68604582125ebb44f351fb98336a27c7f8431eef24c5d12578c5244501b73be5dad5f040f608997af817eec348ce562307461f99ec0cea5cceab6cb8b3f0af7a5c07c32a070f7f5e0e2e08086c7fafda3543397a89f59d45b5e4c29c3cfe846ca2482040557fa7ee26c9fd54e54a9a896072c5f7409743cc2ca58c3fbdafa0c49c3baf76dbee5ff71809f866cbe9d5bd97d82e4a35b9e764b01281c6fc1324741250f8c26d180d6a0102aeea67d45c869c08964bf543131f6bc4ef857604fe4ac0d63386e695356cc6fe454cbe422695c35fff1120a306f87e45daa3d6d955756e6642cc427246b419ebdcb79412814bb4f73a71a9d6712de2bed284b900aa010e5819479c1d362b7c335b1093c82c1572d4e56a65f387b7c9cd0e94c78267d79e1fc0056bf1209524de19f73415e07d928d208600d58c68bad4a81c998f4de170e1cd27b5d46e2313560fb752b894774e92371f935aae6f8fcbbd974933991d2595dd6cea624799b3f83e199923a9150b02414fa7c9c5833086cf89c14e6976e97389b272c958ded6454356cd91f5278412101524002ce2faabac530830f51b33ada896963c97b8102a5fc029bbe4483284949d9d30c0fb1cade35076e90b4a5ec43b0f17c2931d8c24b7f8b98dc39976935df62a04b20363b2db6859a719313fcf339ba061bb921db0c7ad6aefb736c3d6a91e72c4feea9800805bf8cd332b6eab79dd1520d295f4bfba1f1fc6bdff765d2355d69d8cc6e44de3af8625dc5eb4029bf3be6783aad8f91608f68ef079ef864ab1d63eb9197db1308fd587f3c0cc741ac021843b7c63efcf6529802ecf17560a6e757f040b3bdabfb8188e260303e1fe807d0067ccd395f3502467bc299be50f8c7497c96c96cdd7a03f8c1f641301e84ab004e17ec4ee122ca1649ecb52589036d11054cc1c4db56b9e11eec2f9ddcecc4bd6a2559e3569d13a5692eaee5a9fd5d7496f453f343fa3c9108a37f92f0b8893d36a37ed115f7e1555f86f39a055dc24b686efef74c96094042d8588fa8d2f2ed66e37d54a346999037214a064c7a2ab08dc66de774aafaaa683cffe292b8e7bfdbe61bab55763daf1c78cb93596dbd11512008641cd5704265ebea21af868e9f2ea7f7bdfd162c2f1eb528a1336c15249778a44be2410729f392b095a029f1d9615b0349a80c9bf1bab82b00622d57407c4591b334adc2042d2e25362ea62fce1ed571c675af3f50f00cd7dfd7c106e960fd3bf53c250007af7f2594bf69b9f816dbbfaa890d1095391f24fbb154e400d1f9a3eb4f934dd608d469d4980a9eba41aa3798fb58158610cc69a2b603f01855fee5a50dde2ff30be64d5e17f1a2aa72d1e6658c843cd474d2fe5caa7b9b8d26c00f798ef89950b84fadf83611e435503e27cf35d8e65b4561938166a0695132f5c8fb8e2a57679e319292c520687e474ba5de7bc9072263b30dfb49016b36a8707a9c74f760374620ee2d015b3cbc63bd775fa4119883a10b0880de5ffdbe6223a9409f292a1387069e5344d5de7d99accd58c9c696d8ec6663de1802867b34d9bdc591db9561e0a3672adfa946843ff0d0aeb775927cbca3d215dc837467c2c0239b00f2363025958b68eefc310f154c6c67ff01f7198e46e7a8a2a26e5125d35f3d81c75a9a06160ffacccc6bbf59ef0d8d4367d0a2a2647265d35fbdb5df5b4a8e961ff2cd2c6bbf31e70d8e436750a09a3e16dd4083576dbc2886bb09b8782c35f9a9d3d8cc212532274dde0a7fa60014c1ade38ca378e2fb7d262ecd6b192f3dce02f43bb65f336eb65a20d9c355975b9e7dfaf84935490b89caa28ac196687c5b96da8ea0a355718073bc3cf226435c229351d5442c6434fc02e1201c7fa3d751487f54c08d846edb2357d91779f5d0384498b83fb7800cfe45abfb0cc9759f860ebdd2f55d5e5941a79291729885082ace405e0f14a7c156bc13f2c60bb3e918b500f83722a17b6a0c8e66d3b341f62225c93f92c716d756f47b4e1a5ed481f12087e6c1637310aaf8820d0a93490c5d83d593d3ae7add8abc546b02fc4771d496a3318e5b1b8eebfa60a3e6056da236582e2c44fb2b84e70467da09ecbd8dc99fce8f122744e184b679d5b2dc8cdac966456fc46ebb05698ad1bfebe4bc202865c909039881165d1e743c15d4d696541fa653c98ea897f8b4cba2f99ef74ac10132353d6e45c889d70cba4903c7877afb450790ca704e9fbbb175c27fbf449aa84666473d005ae905f04e74638adf70bf7fa3e0dce771d6e56a95cedc5712525d9557b903b79196c0a4c6c6caad8d15ba70b37f2844b39362c6006fec24bb4c4b8d1b88b2adcc6225c96907f6db7913fece8d531704de7ef88ee91848aed7df3f02dbb1a30ee17bfd6966f973a765607ca40fcad39222f4a40b5e29d8006b65162474e18b26b11b607d1144e535bbdc4963225355f4d545307c822b097374bdf224464ddc66366047425941926c36f92af91ffdccf2ec649d66893bbc379673f1e02ea2b6f6210518128874b6adcb2316444a2c2fd9cc6b760dd2df5b16139c4178b975277f1a2146eb1098d68d0c1452c30b8729aa875b5c5c81fbdaaa773a0119379f7192d3a8bcb788833f4f23e3139d596a8ac67a171ee0b8a95f25863e97a8a350e8ea13ca3f166d22a683f2253930fb287417da4df58e58724568ecad53f4781d13b2a3c430f46abceee0d113db80efb1113058b374e8dbfc6c0a16ec2dd7287459c10189a8fa310ce653a36c34ce781bcfedb0c3ff6166778b380d8238aabfaea8795f1f9adfac07cc0674e0c408e7bcc0c7f639a62e31b4779767eddf86f009c12874c168605f90ab9b4f106ead320f97cfa3fb64b305a438714b07255410bc890da28c24a34d84a96844ff7589e391b9ac00d4d802bd1903788c6b080d36e44af1ca2fad60b94375c55ce910ddad758f9f82205ac5bba0c04df78824186cc1d99e9c2ce7774e9141e6034cc4826d7004591b2027126ed214a4c609042abc7cb4209ad59f00788446ad85ac9f1625861a370c071d3bc1621ce238e3cc9ba602c04e4a9ee81f6877c523e42f753a64355d04fba2fd22c22126544fd6bbcc2ce3db9a4e2bbc2db24b39ea39a733e52bc441bc122cae9192fab6dc0b6893d78393871a2d830eb4c53e739f37a8d74bd38d4bed14e31f65622a98ff876df2e698ac0f7d831ae36009ab50ac105a600d4c3807018a6cf070b522eb357bb8e11de24e787a14f5aa6bffd05475492628c7120e7bd8a3d5a490b6d01bb8663d4a4465e80afc28c3252202cc057f1479a54480b5d97708c5c52512fc8d7b072e4055cea4e86c29f226537c663d6e4e0ac283b088aeb7fbc44cb106f17e3a52e6c6fc6096277fd28e87b48820981deaf74ddb2bd90e1ed50e61d750e76a4cb4a7f60cf42562b909f4c1a6ef2911c6e7e2a9c044d9d29b4960eeca6278a54bf2eb692352c5b2f765ef148c43dbe68507b9235ba7ea54360a9fc47fdb404ed07381c6bf5beec6aaf4e16102eff1dc5a51e8b9a66ce40904d3cd9a9e867a63223f98476d6b4430df51ee672d600b888a95263df4055ab6a95ff142b15346910b6d11e430ce3d791498f22378460e8e7574105f9c6a4a06c66b74899b7c6a401318d498ee073c9a450ddfd7f747202438045472cc8fa675dabb8fd39b484314dd76a6501a68d14ceb956cd5a982ee65a5d882335bd281b674108b8566486953cdf5ad1b42335f3d62a1f8f5413ecd68a4297e94ab06d6b6590a41516c72cb602c19984dcd70a52211a1770ad920ed1c242b1563555b55a664c62f8a815cb20a92c1372f5b4896059abb0c7481a65adb22349c13a592b5e1795e731941e6bb55b1f8395b1563433492da0b54a5a68d3fcac15d9060eb59db55a7768136cd60a41a20dffcfddced6339bf5bcbd65b44193cf0c2186e79e900b004bd8378047c4fb0d54ff67173e0e14677002b6c91bd9fb555057af06dbd8dcdd3c6cc85caf3400832e844fbc21ec10076c65263bbe6d78646da8dc48f81c4a6cd3b23b6802d443008bcd5e553a1f2ea5e16e07940467412236d2ea4acbf06d2e76303c113c1a0e07a5257d0a216db7831c214962d66b334be2d15c1667f865496ef9bbefe5809ae708589525517f83d6fa56fe2c89b81a786c0e0ed7c651006f176e561ca6e7fb6d56112d2cc7362b750f49549b95267de8e981096d56ab7d8090f10e9fcd6a4fe928dd56f22ac324af8dcc0d9749bd5979debdf43310f46615e103ca2b7e63cf9202c60eec68934e3649bac8c2d5c366e5e2bbc26615af310b9b95d747019b15cf3bb8b5227e2fc3f2787e26804b96942e73b9cf8bc62fa2c5bb5dc809d44bdeac04d757c85f184a96b4f000e4b15f607a9644715480566766dc1a62799a6149ecd120d8ac468522d8ac2c3c6861b3e2fea41896b4720d4003e82d27a1eb3d2007a1e18c250705bf608106c93a6044b31aee1ae373855ca5a4b8efbfd2bac732fc59356e9f3f098ed1eec926e8a4b98aeb5798f8551256425c09696508a52d4f6be818c6581a1cac941227f532cf58a8f0f41e58ce4d42259e0d06cd63ff970ca60b4132d744d42b95a65f36bca74ddefe6ade535f2f2ffdcd49ce1a8db858c313c676f0591de453c4870ce46fd460ab52a6a42841e23569c760c2ed2402bd898bc5cf544fae3a5184e18bb70de1a48446d6cb105b788916b3df5153adec54a836e5d9c034fa8801cd2000af7fee05a4bd6755d32245c49a21d5072c97ff2fc23702823161ec9f3ab2f8c8dd7d300beefd34aef801a7ae075241818331d1da85c042a20ca2903f5c4abf8b5dedb2ae3a33418c287cc1e53a5db45090d04979634fe6ed7ec09afa76253ce5a075ae1e277f94af605c1e380c9808fd73ce6c5b7bb58d5b4bc0ab0e7c5676721aea90688c89dfea59fefb222f536f07ffbef8ef0848ecc74ee091b415dd38e5b353498a8bdf775e9caca9c53d2c0bdaaa8dd11245004d3924fcc35405622524442380435e31d90f9ec20ff98fb4362fef6ec1baa0050a19230581457b3c33313ffed840042e10c2b35a4d53c897b21a4e65ee172fec48ccaf5e6369603fb5efd2b9559af8c958e87ebf2ad16586518efb2b05094a4fb207439bc2bb04704cf266899b9cac12b5771587cb9de5a3a448a98f0fedf65d603023762ef44d934e2a69dc785e30d8397027cf6064953d303a8d6a37c75aee1e43b43a5be3e75654957814c1b090381ddefb1c7477a7357eef8a8ab2c78adb8022b6d96efaed600ddcf7e1b2a48e7f71b8a613f6f5b60f6f7b0981a81da864a1c69bcb6290a7fc6dec389ea8611e66271150744cd7119877a2456ea094bdd59f51cf238db4b4a3c3df0260390225782dd842e8cabd59bbb0ac3911c8c18226daad6e2a14c83ee503030bb100ec08ceae6db8d603c180ed701d15cbab97dbe8217f80adc4ed2a42cf63f546031060519355d418aec35dbf2a3a5f4b6cb31a53bd9d4958ee40f0bdf74aa682f3692a932d413f82777a416df7df3d9a4bfe1f5a941f65e87430b68abd762bd09ff31ed12ee9fd08e2193858011d5f108a4f89633d7cb2a2e5d73a8eb8609282acb2e124ca5c228450bec5ef3bd2e554e3a71788c4f882a39dc4b802423ee46559eb681491d16d82dbbf2aebf052f1264670892305c4a111222eaa8972103bdc6b76f350c3386ef0014b79e32b6f64119846ec93a6d004e9b54260f4b8d02292855f1c9779d37e735946d56c14ca8f6609193697b06dd9dff42932af597d1b51ce1a64df093eae5ac09ae2ee2ac2ea1675b7b784fc2bda38fe2ac2e83e7d5adef9b7b2547fb2626fafe44bf6e1a586f37c917e3314c0a2d63df79f6c5331252abda43b14e210ed74443f942806a50bcf6e195d66db099dfa1fc70817bab2eb25cd9e79ca3a1968968f6d1c4c97d0d4d294270c7aca9054173da4bb8f3f02812bbfc1131276ec65e2cc219596729aea1c3882b2c301bda0f0b1b072f00e1d8843372604f5012d1618249796f43b087e46782bdcd92bbfe8df60ce9ac6379ccb364eb6101bf6b47ec93c9ecbc70d1cc6d23892e555a1198768addd2f276e07abdf7d283971bf842db7643c495471fb703e28f7c6dc7669ebf35ec0cbec7a53549d015136e426a4bb54e589a9f982d2fac5af52c18e72b640b4b1ab18dbd7927efe8b7150d3abea948ab3b2506892632b70305c517f747140e696289b8cfd3a5d9ef822291bbcd4d84de3812e333437b91be3f0dbbb84a2b618c760dcda8390f8b26cf40b1d74a1baad5d34cf76c1636d6560541a43b60c26953174776c40b0fbe53379e60308ed4dc193343a05fc132576584858ef109ef33728e8b51db511dc6974107604f880635a0377e0c59945eb2270a4e245df86163282cbcdb3bb3230537f64073571f88e92aac2e505050ba2ea7a85818d2afe802b86160732bd756554e6217ff687c74e2733467873f1fc2c6a3fb589140db351f655a48059a9c0fbb6035b8e3062163cfb18423b082676d8bbcc68e7cc90aa30fb69b5a8b36e8111a5435373e1d4dc72fd62699ebf5c36dd3a3aa29dfe3629347056e3b534b0fd2342436f022f733ca471b3adac64f256070984cb207a095655963d774018f4eabf2b3791fb7efbd199a2b1e4ee2080cab490ffa1281749fdfae2f8da9b220086b262a0b45fba818e9c2304990f544996619c2118481a5c8404d204e03afea5b32ca8b408708e6bd6c88001b84b244ff0536f4dc0e35fa00a3250a14bf44616829412a8fba6b06e29f43ae5f6243e04c00f2f9664fff98e585a966e25779b6250f7d8384d45974e0fb8c74950763a618b7ba83c84dc114132220a719c22a1e870468488d6c0c5e936cd34f93125d193f561f4e58881dac12b9c4915db12235b03b2c9f81158933f03bd7bd03c79e0eaa6c1d99a7680c040d99a2b88c0112a0a4884cc4434d7bb9dd612183a1f3e51f27e70a7de0d34357ca1af3e86c3918526f17257913d3c9388f08bcc08cab9d8cb8801db1a0989a1fe183f8904763545e564541ddd8964a0fedb988683741c51b034c200e1890c2141b5d3cb415981eb2214669b5184c753e0e635b015e7fc6863fd4cc3218ace432f165dafebfb20b426e75879ea8c22e736b49181efba7909bf56cc491c07e3b28b5b754df2908fe8b724dfab66ac97f8705360db2cad8fcaa19879d1fcaa283f01efd1cf04986b6b55d9a62e6b70f46cfa6fb684e6a340f0a23594e7e233dd722608b2d890abc2cbe0a23e20801d06e7f137bdf3893c18c00812fe93dd6f8d641bd0cc12b374d3f52a8339a2e25bf5b54c3900105f85cc88307b6aebe2a68a1bd7a5c84f952066dc6c054503296c80de9529993a8d68cd13932572fff94cb4dd28d30600f80c54904b0000b3a64498653f459431a38dbec1ccdb06cc86d75e9ba508076d2a3d1d2b20b83b90fe8e6506ba3bd5ad347a39655c1f62de1db445c7c0043230c66e85541d099cf447802b3f4eaf1d1b90c541e31edf94f33aa49f81d367c7b24971960bf0d15bf57af3c3686c90725e4850528357161540c6d216b00eb552760386e588e9b0a2412487d5d27e641a0c69e946332233b870dcccd9919971a7f15cb9a9388dd306d9e0219570d45aa99b2b20ded92fb670eb3aab9328899840c911378c2be72510bf2bb007f1a05a17c05e002d9db862c26e3007419a2b16c751d3367299cc84b0b82f1ace2f1e0a5ee25f8105350d4c82a2328ac48d78de4cd749d4c14b225f1c5d7f0e40464b15edd0cf07c6e9024f774fe17cd077b38d902c99b2f606c32f0fe41d79b1898d87739ef61e62b0b000fd3aa45d54d811eba087284f1ce3ccdecec78016afd18cf4977a976f9e986bcdc4bdc2b3c6f2bb90cb4cdd5a7c229b0991ef80d432a9cb7e9bda89ef481580a2b8c74ac090a444a4b7458f59149853f65be1d53473da1961c1d7124e48b16854aa4dd0e5ec94c5d9889cb0029439ec9fff1f589d9574c37f4bc122b9e7513ea44c3ff1f9f3cf5327b5ff0cd9975d9d431913a918ff6b47775f6eb32a48d506f1464a368f50876b03eed2529b40ffb4523057734be3c5d28740fd120a6198a3fb30eb8f1557f7300a86c1565ea5554073bf7ea5401315f0581cb85c51853a546ee21a5ded4d114c71028846f475869268744cede7f247a05352bae8bc72b50b0e43293f33797063dddc85104220a4fda915cb7489111de5709c95471c6c095b844a8b36a0205989ea9cf7ea0a4e01cd49957eced99e11e7037e3c612afaa7866da250445f304da93310fbfc07d47299025e43350930435e119e844a506caefe42c07ddb169301bc396fdd1497e886a8da39e1dbd5ebd2726110b3ec37e92c1f9235942386d6afe78f55835fd68d9fcd0c42b096c16484dc6688c0805f517811a5e2a22195b5266420829588c50beb1ab58c52c3e9d025da3a0215a8c65725c8e18c13599a9441c500515b267f26707e2ebd3c792cdd9c5fa85fe61fe84272e92206043f4467398fab9059d20f301506620c59437b6492456fba0816d4b46d9257c017479a4592dda2ac4ab681b8faae77ad45de049bbab21f0dd0b923ac413455ea7cb687f0377c97e9f471b1125f349838e41e066fe057667e842b1052489121b11010a73828ae4da4d4e40241e77ea9c0395fc5918feaf15d4acc02295c18598e2426421f8df693493a4b138723af912099333e8d0af36a517f85b8794a4689e65569deca6969ef1f6c774a73e94d4b3dff1060266729788c9febcbcb3d9665e17349615a332bcb6f96aafc1fad09bd68f430b6693d7abcde8d6bc237eacd2cf9c9ed28fc0753fe5330575f40a8e37029d79f7b1ca87c902a153f4154454996b5d26b0d4d512f9ea6b8ca181d62f2939ea626476f3b5e6cdb696c451768b5913a1468d14ece8b6c54626b0eeda4a24db3b6c6c7de89b0cc621c9623072b44b38c8adf27bdeca60d69e2b44ea46ad5b487dcba56946d7ce4acf1fb5bae8b6a5594820b4b114adab8b9957995e7b5caf3eec93f14aa7fd613973af2b795af12b5c8250f27d6cb4efa484b6041b026a75d0965abec8d022a33a709a2fa315e37eb87d45715a877566889e104ff3222388fbb1c17f793a175e9b0bb081279804c9cf8e6d180ec25177324510aa2e9b60a827976fa2e116e1b13c88435fd5fea0c9d7b493e82b6ac20393d107f0d18fad251da2564ea9f71ad554d3582d64a13dc52121f45d92a5819480718413bbde08f535be9f7d951cc7f86bf6132099320469d0805893c2afbe48e41c0e2cfdb0058499b2d260da9f728be6d1c0454045fbf55f8411e0f936d479cd326d4389394c94612126ae650fa003cf2cde4806e520e8cc6432349ca4895d4e582d90cc0098b68772c0775094a969751ebb9bde39af5a9f408eac4c46535552c768b714a66d0bb298f431f1fd5ed29a114abf430a643da9cd3ebdc05c0807f7f3e2a4284e2202b32713e0ae5189989c85367b9561af5b6a8e3399e2c258a940a25a10a7affaeabeca43d851b9d14dc7121bfae3293c44685f04b85bb3add3d26cec536221b8efad0d104ff67cb5c0394970466e4ab1b732c1a7da3998a2018ee0ff4831b0551250f458bcf69f7146e657e2c2881297076fcf2f7701d93049a31583352e747ef227a3d31f2145f9a9577a10ddd37b92b45da5d09bb2875d36d611f2e92580904efabcbceca1a003cc5645134621e2b2040168c6f7d08a647a25965bbdd5cb204e81654ee2b26c8407d1af449edbaec079f1340dd955d03ee4ea3365630aed519d9276fa0f0aed824a105b1916a4f13bc4b162f8ba720f53bb75d3df1932a96527fd4695b60358b5280d49c941647655b0053231e554a4081104a6b54ebd137b5a250a24acda9a792d38cca0efaa59658d41451a2188a0f79f645cd6ef855b98154201b9b1771f350061bf3f2b5e1f42b6e8a56d0a63bada8364b168355453e796f3e7e909baf5e85a8b917da4cc8fa3097156d237f4b5ce86451d5c3cb11414fce7a0e556248750718c017ee9787d19d18095c06b33deb51a8553d9f96314186dc617de1c4c30021a0fcfc1fe98b4c09a1fb11e8885168f646f1844a1046c981eb1b9bbfd303845850b04f8e0663ce7c0ea9f30ea3f072240c05b642ecd18e8e3d73aec944892b11368bf3a588c352a334467cf5201046d4f11079bc8eac16ee8b3d24afe1eabc85910f61b86a83e8311d79e70464b8524eaa818100caebc7d90437d656c2bd865bb220e34ed2152c1eaf04aa94b3cd32cbb73276e28cf356540552f7bb47dcf41d62b1b8b4699e6e30d1a80d998c49be2da816d4ce8c1fcfa01b106c7e1a7ba5545cf423f3a8f644069d3cc2404231266362b05aeb86b72d0be86971fc2045041d522c8ace5acea695b6068ba00738691478c872072510ba4573144c9a69ab7b3621c11c9f83585d3cc60bc6c4ece338d114b22c5a15cde0df9c218545cf2b4229a356759844ced586a70bfb0d6505486d80d16186c02b44adbd424664cdaa4fbd2aac5d00bb960d517812f09f519d0069e263ed5cdce073a23bd347ec0c714ae385cc9d51a40f2463b840cde75688ec1db3587257827cc221c428f2be29f5ddeb5c0d022ea939a5f4c9e639053664731f5d1ab7ea7988651360d376769ed5d9b4deee9685820d517d6394c1474304c008afa5a0995c4f1a1333ecf801703254242c35c80ba1161f83b46864d893949d4950bb6af4e8c2a80df53203c99d16465d9d19b10e116a5e4c2ec03dc64b3c47ea90fc857ffecb926827a2221f6e85248732cee4f0da8b75c5ac9e986adb503930596da276fa0ce3f1941f03f868d4e377b8436ac658450331ab43a39e1c5503c960397f3d584d8c506575780dccf8e57f2d4953f8833a2192e64f251bef995db2736b514c1503e739780c30192e2a8191e3d9647fcc93151590c7013e4785df7120043cd6eff1f4ad54f87d23948955184f192ffcd0648d13e80503b3a6c45de5100c23ebf66eea34782d83f0a06e4dafcedf0470be2936f7204af11243f1b68f22d2eb3519682240c22e0ee88faab61a8b7c7dfadc7e9cddd0712c0dc294ff775a27cad1943c27279233926ee73f1df9c1cc56b74ded0fc6cf900f818b51da8f28ffac6d27cfb8edd53ec42dd501d535dafa7f9db050a9e785a27d44918ba210e00f6501b76ff0c8e4adf625e72ab49d0c06e43885c323c9d1c21914e72288333ed2758d31dd215a36375bb9bff0c14b00469782bb6a63c0b80bec6fe910237f62cbdca3088d376a1b837d2e83687acdba55f5ac90bdf739961fdac72f8279f0fc284a2139d1ee67287697c69069c7a804b17d7c3dc58099fb385ba7046122049fea3b1c2505ed30728035f872b8fe63a76525521dae771bb4f16725c4d9e64e86851fe9ca19861c0262d5ea3a5d4a11af062357d156866c302a4338acd5bd8817032df9862f536db62d38056a1f597e44b4d0a393707466cc38408ddcc390f13afd6c969e84ef5ca54e73575914935516800c0ed6d67d620ae9c39e7f09cfe2f11d164301125703446c98f46455540413881549099e39a67707f74ec12184471243b888ad0eb13053e0f23a4eaf6b6d953a128306bf710a5154f0153b2ecc4aeb3a94ce09c6e2d778ef977df219b0b6f666b563b30bf1e5ce27426e5d8370453af467226c3df48ba916ab2568801043f3db1748386c616983208e24a60c0832ef5c5964f2c6dd10a58e4c5eab87c21f9293075862a54c12b8d01063b481aa5ea4e393a4c1a7c083f8bae4b1806b9695a7947821a951327a3190e759261b3fb08ac649d097845c2478dc26c2708740ef855645c578c8ec0afdd1dc3947218894f729d95cd3acb5458178c8ac1c43a5f0acc46d69f541ad30305ad123466cd51115096d71ab7201dad249c9bbc5eabe140e61d697987d2103ad62195d13f434d797b28c435c5db0732c637e56f97c99e6845ad0a05a4b56ba7015ec968d5652ab0e801c4c25ceca3799acae80538d31ab5864ae7253c2b97bfea671d27c1c046c1338c8ea405a06641a8f0f851566b1293b7cd5e95f30fd7b78f6ecd822998bd4b88f9f2f608e651f73bc9388ea969792e4a2f4214389630282b4218e46529d5075028221a7a85a932ce52c73979700c74d42036380c72db5f5cf03633fd0a9a0fdb9541b806991e9fd92e2c03fe37e7d810695e8fd37c5ed3c40a7d357da1f6310d7a29ba4eba548e0f07ea26650c39ffc92bd3310b28ce70d828cf2084c0f0f92718a80ca6b984d50eba72c874a217da106a5f2191eca010221d742dc6844018cbe327ba20fa0362d2a90e6a1e58a0134b72a0ae1f6714d3b44dabb20ad887815a6fa980b600fd072ecb81c1f87c6bc78b41f82b995620b0b822293e28340930d893463ad6091c5c541514f41f56df6574e77fb3ab0132e0a833c644c593262d133c73c8e3fc1a9937723c4787b03a99d374fd51b3e47bfe9c2aaa09e743787b7d0b88eb9436e02674dee34904b6df54fb9b35731673fb4bf1665abb55783e3f542e40c356c01e06817cf48ecb2e65bf70eaffa09c89f708cf26d37e8b7af9f278e39a87aab2f0f6667e2fa707326a27ecedb9214cf448e2118361541a1bfc6255a7ad153fee723cd97aecbf4e45fa609c1f4b78645ecf553db8b60b3ee4ca7f54fe49cb8c87324ac76fc050f9fecf3cff58861262eed7c0b3e76792d3726857a171920de39d0eafb9e028d0ffbe87704893023957bbf050d3b2774cbc594d1dd4a5242f21c88759b17d0ea23cd6addbbdf856fef0a975124d7a803f27bcaedbbe2ab6e5611d0cf7fd145c335cb450c02a6b889cab5a8b0bb47f79a269595fe53c71bae1ce09eb18bd4de80202eeea4a787d74d911ccd56a64cd95803ad5dd8a9dacb0b217a9199512495d7f62fcbcc04c8575874d6b073ce8f687262488a9a75d299c5e2d81d8b770b515f631e0b41d3b9b6946ec03a755f689788328473235536be192552f0d31fe028a00ddb513751ac2fe5f7108075dcc18cb3277c810444cfb6b56a44fa604c3bbb6af59e4b8723d5f5fb3cec91bb67f5c654b413ec6c08d805396193501c78cde8a4a04c9c00b85fc90e82182e38562765dafa8d12a5f5e901a7833fb4bd3c0aae0ea2f0d18cb189d5310de7254d9ea6791cdcd0cdb279eeed4956599586bcc262f51470e8bd2a1cff1e1660c6484156e4c27d910900df561d1dc30f774583c6e7bd55f86dfc8146f855f40ad5a1b5119d63a48dbe555383ddbd25c71f89e0ad8dabf6e150a88deef347400c1183b5acf17f7a85d90ab0863a7c51733f0e0ce1edc21e51bd581433032a21c7a257205a1da903ae0980b1a94a54d40c6193424fd8a0a9a88143445431092a8d19ba20a878c2172511ff969241447223c40849bb29b1f097021dfa4b76e01f1b9460370577f008ae1935e75ce013acbf386a4f36dabdf74e01630bdb0962095e1705c8d3c1e29d7341a3a028a5295e4c5722e241a1a204edd8b163c78e1d2f883ccf34caf1623a0f803c9cd0299504d883dbe958de11cf7358002e093f1940589c74024e460f2f243977029850c7e286c2ce05204f13e5ecb070ab148c461f10ce3df7563ceeb13a16271376a14c2a89d22828e58218a32792e8ac10f54cea0560e74d5942a78344a58be9bc8a952e5c91829486b06b24c26e0889aee61ba211724da36371deea1b22115d093b9f924a02e4c2ee58cd79d735ea086f0b9e15cf4ac7759e67f2be26789ed7795eaa8928a630258a2900610a50583895254481480798c200d8c2619c678707a36aa1423d4145b9c1bf23daf5b5e452787af1e22efcdb401fe0c53dae1485632945f17494a478319ef742c5a285857f0e03c689050c16a38ee9bc859592144f8777a5633af74a52ba17aaee138b9547d4acce4adbe8bc9085ca23ea667d2f5cc8e2f4a2c5949ee9be6eb4829105d0c579504f3c1413a826bc4f051252d8a14e8062a2f3282e543c1e14586e50f1c8849e73aa158e7a827a62857b8e3a018a09981528281c070306d7a53c7044878ee5351142cf795a8a4cc7f2767461171ee9900051dd8aeb0e809d8f5e7c321cc67764380c8ccb5875ab9d192ec365ac92c8f019ab25352f3b420fc66538cf8ed0c32390e872b838004a527674395edcf38e080050ad70cee5c90e1e542e2b1a1d4b864a46e7299fe1302a1897e1466678ca6538cc0c950c158caaa444c7f24a4f3a96576ad233de8eef084f870cf74aa5924724435582517d517ee8589ee733aa803c5f1454e9c90bcfa5d0861b62b8e7a5261e0c477909047d0018eea19eb4f80e17aa17315e78e737dce0f2e286171d4c0b18316e403d413d710123c60d36bc68d1e2058c1837dc002305306e038cbb8069b163c5c782c5ea53f1b050cdb042d7ad58b1a2fb542ebe42b524ec5c4a4e5a3c37398f67e5a3d1e9e89a1aa1e781a318499c524dc0ce4fa08f564a9c5032f2172fad94b0b80a2ff9894381237ff1058cfc65b5001657b1fa5020e6c216f7d2f0057953f48cc7e3290d80de149e47b4fabe162f95967cfe8347f288ba2724188dea463a6828140a8542a14854ed41b90a158ef2ee54f225359ec94bbe63f2d22a89139d2729b9c9eb563b30a62535a7929b6ed0e5e0692ba52762d0e570e1a318bec2bf291f0c918ae49cffd07d535cac507d533a16958fc8854b8e50ea08f0264708c66f7098951227764c0ee34a4a2b199e971c86c3f06ea5c4b492e1ad640401c34b6e04c6ca080c8cc3ac606ed0b160a2c040e9991148f484a7c3e42390050b9e6f0a0c944e0320e83f7430503c1da6212f66e42d5a9c560d43e432b4e2f1ae802e6c507953665881e8e424d20b6f49d8bd70e12717fe836783ca8569280530261507d30d852ede8205cf3705158228958bbfa838a11537c40575ac266089880545040346e732c4c3b90c85a6219721d3104c8bf398864297219e125189a84ac9442a119588484d401e18a29652019007868828e58124d903faa65899a2cb41faa874393c270a475da075ac1149d564c71a91bad40b40927b242ea8638dbc519782e86a4aab520a05200f17148e9ceb7494bcdda44275311c2ae50190c734445ab1b4944a303a18a26f4a9783e444de12c2afc404e4310d9986ba1c46343131d1e590d18d4c433c26254c43e188eb54a9244e9ec200588a3185281cf12479c28b29410947533ad668e4304455ba91bb08ea72c8e84644e1c8499df378ab52e772e3f1a0c82960742d44744b3c52aa0c5c0dc98a17c339e98a152b57ae34c7828ae17d2e37328288e12d7c27c6aabd9816ab9dd30845254c3501bf262edf1155408ee73b8224e4442e852e609c738f4a2e8537b40be59e13fa002f9ce3823c2b302a1bbc53b18437a87c4a9cc380f1c1f0bad0b1465e958e35f251f7141d3372ef0b61545e179ae542e5530a6d5879569a3572162a21ef4adb18f9048808aa61e127cf069567e506954f2984b1f2aa340c9557a5674623f7a8d034a316ee429582a1524d0b87597956461e51cf8c3ca504387251a14285772a1e6fca0c2b809d8fc04ee5e2df8b4bc95d54260f0aa1a742b1c86fa87444b7e4e533f1e0d434521e8002a2c2f65428cf591a0cbff04b51006c16ef72b07c5e4307140fe1c7f2b9c7a2fac49081f6a49098202241e1ba158f47e449e1dcf325352cdc4a46109f7bbef3b9b74ae204e7493cff563b28fffc5b25f91cb55a52432249093dff9838c5a0cbd1a726784e4f7c242924d214228c46a7d3e9a49a610590c57948529230d1c2b1a846dea25a1272a4518f485454a425742cd29411498a47a43a49e1462c38a53ce08dbc8fa7a3f87e1ca105e9727c2ea5a97489c50b5317005346809cb7f777fa91d3b1462b24dc1aa85441b5b84c47c33b5697a34849982a01c8e28ef225353246ab244e8c48abd10ab54a725a2da94991c0f3195640d3eaf4c363711616128b2a87a05169341ab1fca0ddc09841b302de2f7416550e411f97e308ed47901fa55147a54687dee5e8c28e867f9ed7a136907a927a927a925a22b5446a89d412a925524ba496482d915a22b5446a89d408522270e2c48913274e9c3871e2c48913274e9c3871e2c48913274e9c3871e2c48913275de7a49a80edddc30ba2d03bdd203c4539a59a803c24a20c40f174bc403911bd9c885e4e442f27a29717279d482412a97b21f217503c1d444456ac5ce1694144c454f332e279210a3d276a41d48288a8059111c06ec5d38228f4dc7b41c4c54c919200c8437a53b09043903785e7791200bbd58c2bc80ca1e0d43ac0cf3bad48242fc90409a96859b578c905889610d5e224171f2837f989f41dd1b1bc0f898ee535691f8d5c6e50a7d18865f402b258317a0147a3d1e8c442b5e2c5c197af73152d2453cb50e772d382042833d4b196b47c324c62782d3e6a19720a3d2bed6a51b1849e145d8e1647b9d7852e070af582526921e4dc1486906b162a849c93bcd0d342177a5af09c107a573c1d9eb7951407404ed5b9495522a93c27c8301981dc890923f44028ac11761446584214a470bee2035590482f2516a59829628aa4f0a638f98805f417d5d7f948858b0a2ca14a31453904a154a58ec5ad501d0073f83e934f1995869c521c0049feb1a28829f24a44744b583c161ea43690da406a0333c8e07ddea586c01715298a177372155184a793df2ff4ac7439507e3a8d5c482e232f0b56502acf4ac7f2bc2c849e7b9e97857675e8b1944a251797938b698989b4ea518dc9b3c18b978652d014a7d14a66e81b41cf74fe44f53da102c8f38de03302896f04edeaf01baa02c83dd139a1f424468a0660c9882e470f859d874489a77444c8f3050575242a61479ad2334320cf17543aa20a20cf1774c4f705793143abef49e78553d3e0214551d1dd8aa7149a4c4e4a0d813cde94ae89919a01f8b9477aa2cb710396d1c85990706b085da6ccb002884ac2c4a9432d093bd52aa688e36141297955c291abbc29aaa631fabc23b473fd845237c5a96970bde229b1b47350003fdfc1228305e6033b5217721c67527d1d0b9117815315cfca4b6a08fc3894c9e49d937cc9c89b4203264255d85148110a4fdc2a87a09ef17c0611c8430a497eead1e914a256560051ee4d095b5a7c5472d29b3262597d4774444f6650f19008bb269f12a39bd1a742712115838e63b1584f3c0bf48c2b8cbc2099a1094441a507514001ca0c2cccf0811a68f09cac94ba542a91a854f1ae90a87857bc2b1dabeb54a001e4f1ae78574aa922c091b394bc2bde15ee4322e43c5504d884a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a222ee0bfa823a9650d8f90c33805fcdfd846abacbd1b5b8e745986404d1e29eefb4ac764c9cf7f9e8baafe4c3f346208b8b8f2f1cf960e1f9823c27f818a148a5919f4ca3212c3e4203d8758c26524c409ece53e0b991aec6e3dc53b517c3057da428babbbbbbbf9e81021350780242e10828083d418a2778e10944218c8ec5b912a7ee7c5c1f3e7c34178630f8f0aeab5183f37c70443c10fcbee08a9c6e778d95f6b88cbbfc3e2eefdb4a1d1ce6fa77e6886fc32fa03c13abada3155f6a1a7c41433786cda8ac5a1b182ea7f831f77c3d67c6561381befc12c94b09c017a1ee0e1b7cb1e96e52832f3c340ce63efeb3796dc69eebdf5b8a8e7d1c06f34a274d9ca943bc15f39e43a6cd682d07a78994f6c3724cce7a3f57eaf8ef24c51fdd3500050c4f4250057c5b342e17ae96e2fa19e85daeda677cc3a00a0874bbeb766d9e639d351f67cdeb45ea73ff5f351168ac6fc325b6d93bd64afc77242d0dffa5e5db147f7c6591de8cffbec85956fa029ab597ad2602bdba3bd6dd938646bc18bf0fcdb446af0d3505885a42776bfc2cbe0dfff56cab63eaee95fab5597c1ff7e932ebb43cab4feaec88eff37af5ccff71b9622f1b16dfc8f8632d6d4dcf7c2184c0147f7d1f2f568b23be4d0768a7477c9a8da95bd5dd9c8869cde5c22ed7eb4b24d336c4f60fc47d9b6d5e21ba7b06acc153134fc662b402a0010d9e7a685bd963ad8d168e1bad1a33b171e6e9cd34386eec10df00b1d10006b8914314dfc64ccd8aad5849cb747633a6b3bf366b71ee8fd7ba5c36ee8f7748ab5259c69f2769b38f9fe7682bfd638e6ff3879c4e92f4c731a5ed78cb88cdf1e9b34af31c29397d6e327adfc76df691b4fe3f9ecb98cb544b317eec3f5f7dbacd4e1333fdc1fe3f5e9ff6e3b01f8292af6a615ea9d7cf99de9ffb3ed6ffce4abd859f667a2d2d97d39f969f264ed1f174fc3ef775bcbb7b1a34cd984ca69616a6b4ec326b32995a62f0cc58e70ccef57d9e8606870f8da5ad1616ed4843e3c2b69c692c07600678cd665cda984ca616b0d4846e8914577a33d02de6e37fcceb143d4f5af62763d3efdb3cd749eff4f1afd671a533576bb34392d3e6d5c22439451fdf65d6efc76a65b5ee4fdb714c92d3e656a7106b7766acc4371b39da5a77bf74770e690cdd3d3e123f803f2d7ba5feb5597d3a9e34f7f7a1599c7ebbef739381fe356f395fafee4e4077ffe86e20ddfd8386e6068e1d64376ee4a0b17163d6d08143d461c48143871d355ec7cce779338e959806e7d2f6884fb3b33bc596cb75cb94a4b97ce56b6db612cf7c6d5e99cbf5359a6b794931daaf95dd19adb9ad5e841255781f9aa70fbd3fbef024c9f9c2f34513f3b4613ad2c43c63af17af95d9fb43f82de63f521f3abacd9e6db5cf79f68804dd8dd3200bad1bdfd6fd4c695ea424fe6b451a71d610471cb21da60e990e03e4d8a1a3c60d03d89838748c3a747803ec88e9d07123c7e790ed20ea4023665c5e9aee46400f3c1c8024a798b1adbdf27c5d5a22f9dbddaeb7ddf2cb0e41f1eb6713e3afbd80662dd7a7362afebd3fd6c7d71ae0762715a9ecebc7ba7bc70b68d6eefbd0d9ad8940ddad03ffd8dd3932ad51f2d5dd3be07f5977eb80237f8f487377dfc0f9319e9936a3fff3ba2fa059eb6e1b237dddee9748babb4677d3b4702d522dc5f78d7c8c5e11c74a1d5b8d4ed206888ef56db630bfce7d72acf3c7ebe092b4dd5267aca5ec89544b73293ed0cdadac99553a92f6c7e74933ad406675d244a09b6befbd2132d617f1f3a87446ef903b9fb499558a2d69337eb6bd2886f84b244fa4be6d08f9b54e9acdcfe3d86af74716e77d19aef3ee3caed6869fc8ed7e19c4f8f95adb93bff33ef4c527327ea6d8da9ec7fbdcc74f243fc6e1cfbc232d5321aaa5592c6fc61508494e9b1b3e2e574d04aa8947ba9b467747a0bb7f68b01bc2b715a36406fa9979cb4983f393e4b4d18cdf73adac9633b824cb5a29d2643aa3799b15f1937446f3354ba3e96e6fb083e18c7f464727e7639f44cad09fb4d14c96351f6b697b909870d160e79d2969c30ecb13c6a2414e8a6e72dabc68908b4177c334c83de91eeee34abbdba57b1483cbf8b6465ba311df876b903b52d3dd3634c8c974777dd279f08ff9489696863dc6316539d08f95fafbd8dadf976dfee0ee62dd0da341ce6b7c5bb926bbf6def73a7dfc7acbfcd7aba579e6fab5276d35ea99ce9b7d5669ceb376adcc6737eaee190df65077af68b04fd0dd3f9694ddf7b17ecb549cb629e2db12dfe7f5332f8d78318d684972d2dceebc314a76374b77d7dd23efebeece072126c840063e4c2fa2341143832024c98902143bb223e8a0051479c35261618794163fad3334e9020e5981139876ac624660434a8b1b2cd0f26c98070d1f78868a30414909252a089d3a4a5050d85ea94a0c4ea7d40f524028754da762c2e473ce3b95d010e74c523ee819f9b75ae2710938f5372a094920025ce7ddc7713d9c7feea938d3f77d379d9b9c54fa48a6cf23914ca4158fe79ca9b4eaf1beeffb3caf4bc293c4a7cb1e4f9291374a521a95bc7349c09290e4f58cbcc34fd5333a9d96f490469d77cef913a7eecebdd3c8e43d5a71aa9b3f6759f974cee223151218610f8b77d8b24292243479a74202236459652f3439e7f2830b4b5e685af17ca51592249d8f3c67f1babdf312d7e9e054f27474dea76ea81bfa8486be9513487ce8f1bcc38e127a42943c1d2dde2c281557d339cb2aa873ce3955d79c4e5e3a914c9f9bba4e48a5a4e45c57422d095231f1a1c673934a6888abf19c890f35417c8ef21defe42daaae399d1ad5a242a1dcd4e2435c8d49e854123a39ca399512937325ce95b478776a51a16490dc87b0c7f314dc3a674109b5388b4a08e51c6a15e439e7dc4a4809119e9b56419e9bdcb4121af21a947b2e0bf01ca5524284e72dab20cf5d8270d9f1bc439954435c8dc94baa21aea6e42d2a21263ed4987c88ab69f193ea14c4e7285f80e72767510995845852835a297162a7c539576272959216e7fc078f45d53526958a8913487c0849ced5a4820022e93584a4554f0a6e9da7e0f6f9e79e8c203eef7ce7cbe99c25e7736791c129d58392a7234912223af79c08ce3f67f12442435e33da31f9c88928798baf9230f19ad12a09112ceeb96945446935e4351c112c9c8f569eb713c1c2d553d328813be0381e5238e0a6d800ec848a28c2f3e139a1599c7b2d9e135ac0163f7da39616ceabd2b15a5abc292b6f4aaa069c872ddf508b73dec2f20d7d46b850d8b9d75272d3ea33e21b227559f0d12114292838285250040541810205134c409182e2ca1528506e5250701cd782ef891951f03e264c4d8c667821250377777fa2e342a949251926df271324c34466a847aacf88cf08ae091240aeb9a02126ba4e26488649a7fa8c283d41012229a660251c79d3e0219172080abbe3ba4d2c2ced23171f25377537cb4d9b5425d5145e95d2172405ecbcbd295d4c3b2b8acf4bac28ba5ea574008e38af0ae9a3020681576ad4e8283bb2a9460b402e2449d15c78a5cbc1b2e2e92a3f745d0d1d46a3a0f05b491196ae7c00bc1276528457a4f054f70b5157985c093b1a61e79c075eb1c14b472bf514369652a954b2427b02e4c21692e338e738b009c79d807ba2040736019f9048aa51104f4f01e4e9d8b163c70e1ae94de974b0989c6bc2643275a1893089d1c97354948ed56100660826a8434589510410e6015fa337c72663fb03d71fcb63fc9fcd9cf0068e22b996d646f6449eb4d1bb6377c61fe79dd98a3c5912e96e1c1abcd1a1ef0d0c1e52b4bb72fdda6dda5cc65daf5b1973b970ae5fadad668bcc9b816efe96f8ef3886e5cdf8b508bead574d0472b9aaadd5acf8c2f7e9bd3366238676b779028f0f447be0dbca310ddac468cfd36dbd7dcf2b037dad09438d947697e7e93132b7ef617920e86e5a833547faa7bb1fd06068a51b47cb46cbc60c59eda53ef5b92042207c5bb79bebd3d8668de6ffe6180dae5602ddcd450016c3b2cdfb534b976b08ec86111b466a18318204fc614a77abc6172769fbebf67691f083adbb44f218013c5cb1d223803fe07023735ad8abfd58a62e336f19fab53dbc356bbdb7be463319a3b83ea6b49e6b7f7089ebd7c79626fa2dad02bc85efb4d9a68ff6dabc47b4640e39c86474744ceffcf91a6fe1faff933fe6a3a5f76d3ee49ff94879782bdb380c0ad020021af062b5e39336e3ff3c4e0f4ef4b0030f52009a425a78f6f8929c337f6d95fa5f5bbb81c367958ea3dfb7e159d3ba81e3f63de32de6b0981819164b660be03ac01c539fda674ace6a69a6e338bdce917cdafd3cc979addf44997d3c636fb3eef56d8f77848c8f83c9195a9c9fef61ed8e6c482e87e0a7d7e609245b9cfbf56748b638b36aaf10b9526bfb1addf9b141acdd019a42c6bf367fa638f64290b7c88b755292c4a5254b5b79455c8bb85e2f9c21407488dc1879ddf808890cd9d179bd5c2f7b7f8857b575a7d6dd41dd4d44772fe96e22682e9748ef8ff37fdc322567be56c8fdfb0ba816e7b523a73b3f9e516ce3f53ef6da6cf385e78b7cb14ed14a168abad500e6b842679abfd76db599f1d7e84e0ddbccb846b30672d4c0b755c3f3479cb2995badd7ef99b9849362991870619f0368dddda01a84107577979258315181091ce96edbbc3fe00e10b0cdfbe3364fff4a6bf7f38fe3d3f02475c6cf93de3c6d4f642c32ea601b24e392c7f83f76ac374080a6901a04680aa9d18cff5ad9f87e233d5b1c079a35db7f4faea5ad4daf95355a69ade7da9ffcd57fbed668d568ddf071dbd2f1f16b13c75b6395793cfed4a959ecd53aee112de924a6ae9b9d2138deba91d56218cca7e3c725ec76e748f1ac5a72c2608effda8cb10c96c9ec8ff366c75fb3622e6b1ca6037b8bc9595a05380c067325ee0840000f334f1e2e73735c06013cb85c32f27578a8519a8e6d0ad1f11efcafcd3afeb65b7677878013717f92da6a56b4150683ddb800bce5d59f766dc6a4ad3681defd69b9c4983aceb4964ece6c71b594c82dd391964868909a5c9f8a54262b7105424e9aebbf0f2543db3f104f96e3d3449d99919bf93c7077bf7407d1a000a0e84e8286033440eef20e014d90eeeed640b7aa2dd00242ab2a95d97437d9d33cdd4dbb493a7b08196d76eaf7cc9dc7f7471eb7f1e96d9c405f8be4fa3aa18c1a64845ee3df5e634d047ae5b13e2ec0eb36ce2732ab74ac9f73bb5f065113815e637d9c431198c31432eecaf8c7d7675b590db292d0edae6b65ad5b9d2ea32ef3b399b1631c86a08ea9ccf8d3f3bcefb01b384a18692b7978cb66ff1e4afef8ff784b66bdf6b4ece3d7ae9555eaffe3b8bef8d733b63592fc1fc7d3656e69fdefcc357b655446b3ade367fc3e934692a1b71c938e4bfb636b8fff4f90d2c7bf3f525cad882dedc731ecabc581d51f5b7b6ae998fae8322bc4e688bbcd9ec972ca9e87b76248727a9e8e337519751bb8647dec52fc359abd75e9b4790c0ce6e3cbb0f0a4798e1d6ef88def9964cc9f767b20bc856df366c714e86795da59b5feb41d71fead45fe96249d3dc6fa3ae3dfcf24edf1646cd6224fc628906c712acdf879dcb2ad76732d4dacf389645bebb4c115c8386baaa5d96671c6db38ff92e12b3f7e1f4ace97edbf8724e7ebbeac96330218eaae894033ab29ac74b00a5addf08b75923346e3719fa9597a850e5af40a1dcce8153a28f50a1db8a8a090a4155f2a25ba1b9374e61f5fffb296065543dd565655b6ee9eaa1d950edd8d6fdff37a7d9ef7ebcf5433fa7ecfb53f2f99ccaafaf5561a3b111ae7faf7692a1af418b812fdba9136db7423669ee3cc5feb6eb041cfde80ee7ebd07e96abbfbd4a0efe86e0606a007334f9256a4c160009ae8eef1952d89c1007c20004946ea63afcd679ea3e7d256a98fb3a63b150168a0af94a453e63603dd74f728fecbe5aa8940e38f56ac373c00804392d366d4a937b9be4eaeaf33def9632b9267edda1ee3ac9935249d3d307e512c75ba5bd660aabcc54c2653cbf839d3da3b03fc693b2693a925d7f7b99991866e612136472af559a55eb357e6e33ba64ecbb4fc3421bcf55746d2e9333d033d192bede81693a1b760b0f15af1afdff779c730984feae3e3df48729675d66e4fcb4ed25c4bb7cd1aa6b799b1e39f8d65ccdd8166cdc71fff45a017696dd6db48da9bab154b11d7d05bf57de8cca7579aeb63ff98db4ce7cfa5fee5cd8ea993d6c6ea8c62bf657a2dbdb619da8cd27cfa581f7f7d3c45afd4c7034caf74f631c7e4ac5d5bfd5a5910dec2b5cfd477c0b1c30e39bc4e5af63b735bfdc7de99e3af95184f7f21bc058339ac67086ce2b2e67f6fd956c39fa74869d965c8592279fc221d2b75fb938178cb667ca98c96656695d6acf85ea9cf545b7b444bc6684620f3ce1cbf6ffb98dfc86a3fcfd9dfd96cbab7b0e8149779661d1febebd89d9a78649c35403f562043c65993698d06b9ef33048421d3ed323692ce1edd69c0eb51c34bddd0edcd78a14477bb4b88cd91991c2136477c5629c62fda9bd3dd03e8ee6e9a43030d9736cfb8e4713c7ffc0f70cbb6dafbc73ce350a7d8dda96eaf060dda40a5bb35abf446e6fa24c5def24add7f088a5d3e7080e0100985185fa702c1426c35f1482e87e019c53493a5107c9fe2fcb33b776e329a2dce8f6a292e49b102096978fec0e9112d5963a3347c2d2dd73e03b9dd5c6f9e146b91eef64177db1a7461021713e8ee160dbab035be2d1a7bedcb050f57f66cab2880065d802dda20931aa933faf77dac0e0843a5c57967ceac523246755a0a0e2c6a3370a7eeb60dc2c818ebf7883366eb19641a6c11450bd7b7d91f4b92b3d279793429407797400416e8ee0934d8e27b1afc1adf564a13676de6f3cc787cc734e349e2696aa9d662c7d3c7b7d9ec1d7dacd3aba539e3f9a4e7e9b44c7ffe8a98fa97e434729be47d9f215ec355832c766ee01881e45a5a510cc7af33aa23a341163874e3e0b0d249b3b94df289e0db9aa9894034351188e6738cbf830176a0d9f137e6ebf03b8c3a6ec876e0a8a1c34cb6e3ec21adedfe48d232f6aa8940d58a2f97abd4e00a9eee8ed1011548a2023f0c59e9d6e349136f6913627344c6673edbdadf99560fa6d7f3a430bf56469b95d656baccd01da2d1caf467754eefc1a18a0629e0010ae80052e085c90d9a623aaf9531e9a1bb751a2c620b4508a18857113d84aa0865a0bbc506850a30012a4c2006dd7da4c10934a0bb771a9c4089478312e841cb6fd3e69a69dda6106ffdcb6c16f34ceb060e98d7e9fe3199f5d05d3098cfb458368ed80c8b8969b5582ec3ba7104e61f13a9ed969d24a910de027a172ce31f613ed312627364acd365d636453cf1bfccf8f85ff62f83c92c0cc37e9c35c7f4bf47cb6609d0ee1ed2a0046248a0a5bb8934180128dd1aaf95ddc8fc03f39916be73f6d771797f562de9f84eb21469bed346240235118809dad1dd330d06a5a1bb8d34188482d693b189af75192136475c3098cfb4b2b54484b80b06f39956cc9c79d258b2f93a0888d951bacc8e92c5c3c76eb3465a1b9b2f4c6f905cdacfb3577c61a7577ca1d62bbe70822ff8a05778610cbde20b317ac51774d0e1a27168efbe328ca2001bcd461ae8d6acdafbe3b9fe8f7fcdea780bc74a4c13ebbc352320505b298ad665f446d6d7f8b89c8961ddb2adf62f4c5528008918bbfb473bce9fc70909a0640942ba7ffc804a7628f99ede5c9b7f33f6a737777338b81b5cffe8f69164cc73467d66158a61757336bab91add1c4d37d7eae666ba39996eae00dd5c0edd5c4c37c7eae670e8e608d0cd0da09ba3d1cd09a09b5b7573aa6ecebbb900747300e8e652dddc8c6e4e463717a39bbba19b83d1cdbde8e66ce8e65c747330dd5c8b6e8e4537b7827be9e65474732eddfd35d74b60b0ee1f1040756b566916a7ad666d6c86206a1a9edd3cd8da0043c874cf3cc721509e4b7bb3d2dd3720dc72d0dd0168f0f6c466977157cdde1b5077ffdc60b720ed2e4bfb71197c5bd936c7f902da0050923c693f2ef3e250dddca9a59b333de9e64add2d2349833f3fa88ff1bfc6310482084986e3576a137023c9f0e7714622b97e6dccaff36449c407073e37e51780a690160c680aa995d8d6d693f6fa7d1b069a426e24195e2b7bda4e90561022451c680a693d2dff645a8b9578e679675e6dadfd8f8e652499f3d7dc45bf95d6c7ef11694fcc636ea4b5b1fcef94d96ed9e6d16fe2a54fcb8e6d5388b7f0adceeb36bf8f7fb63e335fad93938a6fc33eff96e9b53cb33673df56629f4f96f7beb79e2caff30062e33a3d728074774cc0eaf60917ec6e245c4042846407f82949ce1f4b922f731977e1fbde8d40b2c5b9916438abb447a4405cdbc3560467da8c1299559aad118b33dee4797dd43048b638b8f61908798bcc2a1e6bd963ace16d92364c79ccc63201b73c5aeb23979696a910343c7f3c199b36bf916c7172fd1a15220493ba39966e6ed4cd7ddd9cd7a0ad04da34705d37c7adc1a2e0de9b9e21373b44def6d9fad8fc3e8f2d29e24c2b7db2bcaffc78566a792aadd97a23c9f9fafc97e6bfb5578f487bc671beca57d31a017c5bb9acc5c6da176e4bc4b44623625a036a90ac826968e2e75ba677da683c5f7f3c9fb4f901c6bf3f9bd1bfe5fb505c5ff6a3cf8e8ca2db5d6be8ee16403ba9037ecd2abd345f22f9f125be0f0daef663c21048444005e439d2a38296e816a7391c8e01ab6ac5bf361f2d2d7fcd6f31ae49f711a09b9b02f2e8a0bbe9cda3155f3fda4a6fa6f92af00d7d12f8967c44f4577e33902a3105299c5ed0dd421aa42edd31acfa644b463ef61e78f091d6c8d8cc652d8635821e7af05b8ab018568f7d61da8ac19e24e6e532984580242e8359b7ef79dd62af570b63fc7756a9bbf0f46e606652acbde00c89ee26e2a166224dccb336de2962ca23ec2173c0138120894ab90d544bb924403438dea043ebc3652a95591ceee676e6dce58e80a30d1ead6aa90360e37cda2b3f76b95ec75b3018597e4cf4d05b5fad0c0f7f5ab6b5d2d9fb58a7cccaf2a4953ff96f9e6d7592a4d9fffe4f7efce3394288fcf0960dc75ba2e3f17d26f6b1cef1c769c931667dbc95ce1cb38e27b6343cafd7c8bf96866db3628f4db7989c19cf9accacd298cbfcb5b2bf98dafc65d3f3634af38c43c56f47cfd4719d5f739a48efd79e66bbd78ad7de4b6bd401301803605fb33a30c7148fd7fe5420dec23336eb35f4d64fb7d5d2fb4278ebe9cdd5310e99deb739a68ea9036098e2fb393006f897d66d7519a589f35d663f3673236b59ab5991e6c793e62e970dbbcb5b3f96a458adf893c912ff75c00d8f21362e17be7dcf8b24ff87010e80fd6845178c01244965c8713e6dced859e9f87de82cf4d6f894b4d966b574249fca647cc43e81389e556ab3dd6ac6cf344669f6e6cc688db53b334f1e61b63863b638b34a69d9e28cb5c8919e233f1a0673ca01f0c80bec724d978b0242c8f06dd1e499412344ddadf201865fe4d7fc3398cf2a25c929e6c0c890ea1fffb5f9c7c6ffda23da99270f2a0332f3e4011a71d12a8283eed6ed7b7c2c80c346200f04aca7fed88961af6a61773e293ace3ff30cc45b34f1cec77ebbb3d258e93f758a163bf66cfb1ef17d46975920dec2383cc64f1302dfbe07fbf8e59748444afb98cf2acdf547ea22add96ac527ef8fb5f41d6fb57c808816e3d0e2dc1e8811df1e088b637188f4a0bb3ddbdbcd1240b78a480d7c5bb7ef799153b4dd647706ba2b10c4083a082341ecc82943ce959e798eaf577e5cbec61297aff9cae2acdf75608814dd3c95d6e69d36afa5ccabd58103870d8a6f380add0d85eea6d2dd5018d224870687b0b8eb472b7aaeef2efc18dfbee7f5b35bdabadb34e256bcd4fce059a1d6c87d929c365648111e35f1884d4d3c920374336f19ce5b86d5be8e8dd2704eb5d4ca2a902174b71082d0dd517437107ed0dd3ee8010fba7b07ddfd75eba03bbcd6a65a9c5b0ddf76dbb901d99b030611eae682fcc4680f360c56e8c016ba9b63a2042ac869618328747437e703071830e4880a88e006ddcd5d800b0188b9231e56d0dd5d901b1fae70011c2e5086eef65c6840ca173ed0e40649e86e961078600a6e09aea21fba9bab42860d2449c307aca0a3bb3f273012086843e0994277734b88ddf041033080240add2ffc3ef8f640e8d0f8f66600b144b7ccda6bcb96c4eeb749fe9d7f59ddaf06139086fe99b746eb868d568d99fa636f8c86272d0153b2d3f0fc11059503287eecbd364692658d11c8ebaf155f64008150a031ae89475e3675329e41788c78d27280dccf96d4f9915e3c83903f8f837f2c4efd209824437cedb5e393b189290fdc7367ed7e9e42e027c55aa4c84879e02763f37e254b9f0ac456bb3fc889adcdde1c1a9e3feee7e0fbb1da0bd199559aebf479f289dceefb5811531ee30ff1a3b5c9af33521e334f1ef8f3f897e2e7f1629d25c640c899edce8fd666e659ad117c7b20467c9f92b6ff1e19e87164d6de9ccf33ebf018e7ff1091084152e391f10c32565b7313e748c73a6db0584b5b6b18979da8e4ce6dc6a91e26195368666404080000c31200304020160b470312995cd5f2a4d50e1400068aae6480461909a328c7510a11a38c210400000440000044300c4100b89d64aac1fda39e991434b1d75597d044ee6a1b84d23605fe2e255afb28c4e25f56ed8f1e0f146bab106c54e7ded082af03655b1cadbadcf376b757b3e930ca3a57444e198a324ef881bfdf9ac06371101fdbe9cbe9cc191f9cb5f1ffa47ce629bfc9719f742a5c6ed9def9602216099bf55974e749cd4ec9d327ccfbadd2b4754dc6e94a19b5166922d91bf024db5302cea2463f60b2ada77d16c45021878d97a12177f115b27cfed921701c7b4960e499181e78ac7848ec98fd8ae07231faa85417e19827a0c43b4d6fcda5ba87e81fe7dcd3338df557c89ceb16e2898a5cd68987f2f2087f55a94966aa9fa2b6d18ba58bd50e54bf7a273ad759a6a6c95358f359e97299bc8831ba11227161218603ec9f1d392507e30a528a8a59f9c3d76798680c2d387eeb33c097ec75db5d8cd7b51930e682f4fa6fbaa5bb85afaf481f60aac974a191803a07d7df847a7844ab840f9d741513f6822b08a3ea5f694a42c63923a4135912f734147451e23bf26db2ebe5e4bf994c938f80fcb44137113a92060417cc1aa2585006612c2fd3372e7c8deb716fa062a3344bcf3933fa76b3ef0bf065c2c2b592bd1033642548084fc7637d97ea269e58f02ccc6e5417dc4d324c01d7bce970f0fa6af571f2e281983488c2ed4d1dd05122b85e362bce774b85708de221ef3547f348fc93692c67a4641cb241919cb408b41d9d9aba4564f01274888f0d3d49da322492f7b079c0582faa06e09a68585dfd4a009e73daeb56781518d53e919caa50f7c560b7d31de18e60b59596bd9fd3d8ce8181b1b439a23203aed67a1b13cda242f287336681d02c8466c545223445590ae350fdd7078e12882068fb52827f93a007aa8ebe373ee6e61d2d413e45981ad062021c3f6c355ff9fdabc6f5168bf28015efd6dfc8c0e6f1a59bab3d84b83150767881d82c2e93e3fa4c260dbefc3643a2f7fe2e947879b27e4cac0266efc5e6859eb5730e2e5e2ea3ffd454fd9924b67a9860c1d1b5e27f505f60e5fc3b2ff3e62832d41c950d771582a8c7dbdd24c9a706de1b3f39fbed166945be0a8bd9fe70ba444770eb40367ade4aec1b8f712194276eb6248c4bbf752595b53284fbe147ffa480f3a2ee2e32011ca6fcaed8624c70a096f04567d9df9defbcb54508e3bbae537d067624125b5cf50b06d835157fdb84766083fa3af437d091af34e8994447995e33cfef9572fe76dd2f83b3b16883958bdfa33a6117275dbff3e4b48d14fd9e47c8063d9db19074270cb8af06c4fed613b8260b372c8ddebda3e26a14b2417333db65c8e378108fe1b4ed237dadeab543eb9bc90d42fcb887129ff0c6ba53995aeb783f6b4851d1defe2373ad57186a257ab0a920195abdcba8ca9a0ee456ce3e992360a3e101a12a27da08dc31f4be6c2b2762c631ab53216b46cd362f8e6e4263be2ded0f488f7375414e036ef8e5dbd9d1a651392926438a2b43ec9076055276ccb140d19ad9dd03901f52c190712acab9434e9e0d40408684d8289944233caed03ce1e636917dbde3462fa8c20cf4d3050e84f22f571a37cec2eb48a4c9d3c45b4263e519c1aa72da36a68c8ef6c81a163a09472acb6b270edc6b6db193384c7bf516d25cbe8135f05c661e1142f8b876ec18133afb9f588503c6a6df22b41c6229da060908b2018aaeb6f4900a0bc07d5994eae5e7eca3030e82dc90c3ffc11671758f982625d86708f7fe80f47cca0327b81aed14cfe46b2c44d6fd77aa1c11f420fe3bd5dd3042fea385e3f60e537e050de699fdc30b9a8421dc436ad30423ec7103d16f8fa28e56004a5eed69ee0429bba625056562a7342ed140205f067add2807eedf6809614775f6ee72ddfe23d984b27d890a93f99f6774b007ed1b37497b6dc1213c7d8d47e1ccaffe4d0ecd138e8f44c0bd1b63f81c1728aa77619687427c625a78314507201824ea85f5bb8fe9e92e7932c2e79694020a46bc69733c81cacf31b2ada6c987e0a32a23261bb9b1230376ccc663c6e6fa432e5839adb4ac6498301e7850592529428d3977fbed94beff945dba03ce6f7f5b296e763ee5a21858a0093cbf61e9935dbdb9ab6bf41e0188842d5d85067289ed22f470a74a4e698cf3d603574844f427dcfb381b4a7d760aa37c55bbbfd9e6b8cd3387435fd8e149cfaf33bb0b7053f975d87cc0ba4b9dfc22a332e72d63ea9544f6c97e25a59ae282d31e4e9ecb1d1b974d608788589fa173b887b9d1b0c182301a3808bf6406f566c4f6b68377fcb3cf59cded1138f7d7b9b835ec6aeb26005274bfe9c88b0be1c5ab700ca42b57cb7639c77fc07f93c899fae7a7937ba54042a26f23651c83288ea62800b94c7ad978357252817c46ae6853c0e0ded58f991c3f841ad9e3e1873a70236d8fe5431035c73c282b4e60648deca31f4ec159c11d3feb64b5e3f6f84bea4b9dd8a3c0576728cb264e1888dbb4fe219ebfaa0067a474829cfa95bc73edbfce30f0fdd823ab2798e693e13e13aa68e952b38ae45ecf0800e384fdb54fb2939e3b059634e285cde6819e9da37fc829cd781a5506157ce06b3168aa7436f118f30483e79f62a420351c52d1946592ec57e1988cf377ed3c259b97d5e2915fd37fcba14fcf151a6ce1aa860d7cf69f61e85e5b50dd427ab12af8fee891100208179baeac81b59347cbc1d132171588053067918d031a01d972f338583c8e1c245cd0e667924e30bef50f8989ef0dbfb9c65c53f4d1086959d74b685542732e4fb63c43a653b956842d91c22c353250263e1306a920b5eb57edfbd0088e90fe3418ba6e43452a821fe43d09b17f96cc6720a1601a263677171a4d3343e9343bd628ccf8ec91929365727e32e1ad23ab512d8950041baa3d4b949768392960d9e8f97f89c84dbaec3493c846c28d15505f934f3c490ed8a420964ea55ff52d75daa231e342cb664afa22684e040a173925ee185184ac020964836cde99b9ecaecd290bfc1233c8fe69d6ade31881581cc03b5921ed94c795a10fcb208c7b24f214d38d7671087367f291d952e4a8e9d8a1631a24f9aec6b6190c2b3c307759366c794c8aa2f5b16a728a3a938f322c8080369596712d236e5f10e4585c1ba9010b9627daf01eb2e41f9c501240ad21fddf78248deab544b6c0f9911c55f04784153eecf618e58116b3f89443cb237e5589e65693868d3db78c7a4eb1dfb908870e407557416e56417cd4f5fa2e930598619362ae807177b849a8aef7b6aee3eda011c00d0ab2b140126403c583cbbd3e4d7af60ced10e7f4dd52a4e02163ee17ea1002ca17dc1d299f93c2964c77846301a41a8d01051895a0aa26e19ffb8b39fd2013e095938bede990640cc552a10f5425c09ce199d4c144d6294178ed23c2696d536bfde0fcd0c90ae2d9cb5f48f0db264e27a46d95754908d36f2dd767b74d6c9d0fa823c135a44b60de0b264901d40fa0d3604d8822059986d499eb138ea380c5dd0869e3fef1236dd2312679cbeea305fd3fc9fe466c42c1641aeb5c6209eb951d31e3a9391d9c740bcadf94807b7e6e169f5e1856655c5c72167eae0fca89a5bdd3f842aeb059d3df4de99aa983c2e7c926a06f91d6367e5af9016482beb5c28126218dbabdef0c83cc0308e4c2412eb962154bc17110dac0c1ac13b04c1100b5e6a6efece11091730a9668d604ae6f0935256fdea93dfa217a89be4d23b3681a0f7625dd0c4cfd80592c112789926578347ce2d1d8841cf6c4eb0e9b06b98d861a84906d85039968f67b6740d6ee4a6e7d896da3cf8178553dba64c7b9d7f0ad38e2660b8d9addc9e947d66c5ccffdcc577336690881471e076a60167a91367a843d6439c8c9d4c616569db43f80cf92645d591fa6f1ffb533aecda84a52ba81b041bcf570235f2c9daa2222a76928b17a73900e0d4bd298258006d827a3ac5d7335db382c18a86aad9e09da71538f7156aca1370d4578f6f5114d7de07491d798f28fab76eb55b7ffd79797b5e921481f0f6ab69c9e86a475fc0d390f80a9bc83eb1bf4ee169623397171caf8b66774f40d40e159be31d5fda47ad7b0406514d73dff26244876b34e52e4cacf5437dff744f6b6f3999dd522070d3a4230eb4ce3ab0d53e66d8f1e5080b940a503c87af72d11ca6b065089a8d8f59947366361d1b21aed3972b27cfd2044f514092bb0c24c86b8a7baeb3275c24517a43e3a9b9860b2d9303e996e41aa8c3a5b0601673c1b8e4cfa8c1cc36b32fd4295d22824eb38c9c8f331b32827812bdbd2da339514c0c2c4451066f156e755ede984b3e0a727a2e138cbd7c2bc5a0ec1a13f3f5facf736749912aead283632f66728b74237fc4b6417d97c2dd653a9a8e784b8556c046cde22ee86fd57948817c067b4d12af9875aecaff646cbbedad0102b46a3dcb3cf61c8a4b60cbd5a57e64ea3bcd84a059e476a4eaecd78343b8520dc3d9bacfb2d3553b392bc850207da3a151f5fdab737d3d4f65c652ed173ea2068af623965962aa97659c9fa9a1d696a656c849611bdf9abd2a5af4562404158671b1cb617c0385b0962029ea917825938557f163111fdc39639e8123041d15dbacbab5a86c9110fac70ed5f7e9fee1f0b29300b5778bf83ce7ca3de67b4c6997d07e066a4f18d6426d976d60108d4d905d40e88d84c719b210e39ad805d8d835b83ff042f0dd7719fc4f92c03637b0e1bc6110ab114bc74ef433cab2858d8227067f155b7e4afe8d3be53d4fcbbeae2cfff582bfef2a707a7ac9fbdbff9883d8ca54b19283ff8fc6a04cffa72bd77aabfef19bbcd29f7a7eb3509f6203345df404976e3a41ca9f6f0159b7c9f38ba32a9afd209006d4e4b7b69ddfabda2e2742f7703e92c7de9a1137059d3142db504bacbac3e57df833db18f00361237f5e30a1ee444325448e99328005de5441fcbf3a6f53561fe63f5faaa8421216835081aaa12ded6dfb3f9dad345b1c25419465e8e912bd6ee8230ac70f441555b115c083131d97fc6f07e72bc1fbe3b3c979845c6f5ea5dc4323b03909e35f51796b950bba97df3accde6ff44db3061f500f05437409fb141882cfba76cba210493ef3b76f25145ea1605bfe7303df885eee1b1e824766f0999fd97841cee1f4bb938794c268afc162d7d180dd0d3e803f41f10aaa706e4c1e523911bf5aa701b9b43ecf0b8b96c12fb8530f557d8450f3acc91ad9e4aec4350bf829358bc399ef508b11e17a72e73eca8726211a274a6c6830f11da1d54decd83b75ad21ab0269c714cfdf6d6ab92ef1d03bc18964a9c07947aafdfdef1e264982bd7bd6ee9aa2284681fc31c173ff82d1443a3b6e1a8c4f09d2e089b1e1a411342b4e5d2ac2462501d41661e14d9d04967039fe202a44a9017fb0a363450df0ba80140a855b2b7875602763af620bcefb014012bff2f52434fd0650285e187f4769340e4c7e14686fc58e3475d6598c90c5b20e8540b807f86862dcd48f269e52f4ccd0c2173316a37aeff40cf16ed4f7d19ebc01370f17781ab3f8bdaa9b6083f8107123482e0a48eb5edc3ad419fef9bdb320417f0333f9ac58e0b2df7a75b4bfaa3bd9adebd32844a4eea76b685df62d6c71fd8540a80901f0bf60dd6db3eef2c79aeb7b481e591002a0826b6d0f71e43602f7015d5d60419cd4a12075bb93ca9bcd5bf48f39e8cf07d938ea8be10de6633924c7258c3ec034c732b750b3aacab958502f9a3e5f32f83b77ddf3deef3c706c3d201e2763b4ea6bb0ee769df82d32c37916aa3208204950b291b1c34282fb3bf87bc8d4ee6ea9171ed143ae2b86e4d6a0d8f554e58c6ddfd33896c14fe8e13652b84256915a3608556691084397e9a085e58cb5752eb197a2a8cf5b2451db018d106f4ff90607801ea3d2e6b86ddfcca919f81dd86f880aa28779fd7f355d307479b8ac5c924d1cf477974d62f3e8ac7d38d347780e96db490d28f77d295723d3aa1bf7ac35bddbfb6e8b4ed810d2f377d8486d587ce927fdf12e34a1eae3adcdec3fb50e35589f0e4db4daba385b29866726ae7990f5e3d0b24d4c49e9446fcc30fa1d4a837c3cc1c26c843600892fa34bafdc28404e1f639b4d648e7c94065433e93f80f16829d5b466f65733a644281a2565d795254413340fe87a817a6ae37fd8d12534a8386f002286ec35607083357e6ba99aa768b49f5da2618bee59b4c78f0515d65a24299d50239dbcb0e3729cc50eac418116fe1a8ac70c9de8964e5071ad2666a5cf8b59369a0a176d254702a7808cd0a2d15247093edc178308679a39250023e1246ca5a97eed3d05968c78a75d34e3c7a73628498805e036af8ba22624da6f0887846295735f5750119676abb077f0ea90db18da8b854cdae26ca764681fda63a722cf42b7ae0f9c0101876308b83241303a9f72105d7f5a39358983f70dd99c13ae878bc94a2ea65c49a90c73e9528042fa3f1808c5f4567c002fbe67e157ebeb6f9a50eda56871261c5cccc145d540d7f8aa3bfd04df8ce48d6659a9ff11ea9f1a7a373c1de7fad5c279efc4a3ecc8f109a1520331f3cb7a84e378b75834d94aea3844388e14f36339d3cf9e1832cc03ceefd38f09f5536101347eda0bcee59af5c8f7642a3c7202ce9c087a69589b0dfea76206d6913d8079c388a93d430b0ac5c4983a77297b570a8d45b64bc00b1855ba13c3487a72248961d8c49d5c53191e32734c515ee839b3a70938e10253bcf8ba1e3348f5f15685121f1d211929659d70938e5b805bb904a8043e256b40c494ed8d54f7d5fdee0ce3dcf6543c977918d186c2bb0402ae7546542a86522a88dfa560b70696030ae445714a0383d0a14de369022c6e1123f407503b3e2c3bb3865099c758c0292210b14026ec546cdf50255e8946ed271d8c301310caffcac1e637f00a75615a3de89c43f514441cb83e8d4ac79e5ffa2894129b930a8523196198b1806804f4286ec39f5a5d838abc0cce7e9e0dd3c106e0ac2cff84e62576f3599bb43dda8bdea0fdbb89190b3158fced49abd315bb6e572c3432d9290979bc2d3713dc4020e42cc3fcce0ba53624aee36523c960329da0bf0cbeb8279d596a3899ff5be2d942c26ac7c59e1b3cc0e93a331a45225535b3f108313dc05b61e0c079a22528ada4fd1f37190e58df2ac0d8869e2e1bbefa205395e370a979a6c81c05a3d84badb9937dce2e3ed774630ed4742b383c21cc27400fb1cbf13db2804000f339725a59b99acd35502b744f5e10de0f5db2563543b11d545617bbf8c22e8a497f043a7f0d452e80800d7b4105809726e18b4d768030bf79bcaeadcf715abbacdbe3c3e7894053074959153e659bf66e8524912ae82a662192e4b01a20ec15e6eaa3f12a800511982a876ffbb798dadb98e41f5ccaa8377c50937ec4101abdd0cf31c70f30a6a3a7d627a1dcd9825c664b5b46476f606c9484e10e23f737a661e7ca17a9671353013e0751eca712039070d37bb67e9d8b29556c1a39c17fe8235d367b1c9aa043c68b9b0ca1106459dd025f77957d6a2d66944f9b38ca11e0e9be50b3be02f6d1947658378d15bf2551fa641679c89ad4314d336433681b2779aba179aee471f491e91c376c00015ec8c2dfd5b2b0320f227c0b9aed2888f6ee1a41c4630c6bf6a5f9bedf6357f370e157ab61115c29cb53e2a922011095c6a70d702d7be6c0f53b712f6f4bcb382ff7b6af3889d0f1f8fd1adcd0318b5bcebd094c65545b81e222a5108aff57fa532c7f5dec219f50aa48ee30e984433e5ece6c2f39d8770828960663ac7ed6de2a3f48ff533031e8d49023459a7a9e43ff108179fa09b2b589b2196db1fce181fd56c8c048dde018a5fce13f4953dcdf6c1d26d9ee3bf59cd2fe4ad9038e3f7bea857d87b85f2b899d1c9c9b5be81aa6b102cfd3f1db189a965b08776d9fb46ed3d6bb8b6bb7db2f51cb4816563440238e4a91c781c2abf51d004c4ac92b89cc305320bf19116d0e24cfdf361c618d3eecf0925b4f77c2c9f9b40019eb0a7427dc2e258b5b32613d0c035f3b4fc68be3ef23948e91f924e078a9fefc0ecff8efec072a8510b30c6402006e022e1a8476c78fb2d79be663d26e41646a5ed9cdb2b8bdca758716ad63500f278d37603a2d7c4d849669e6f1c254684a0d987d24e090a7c7a748a263dac68b813ae2ff6745312cf1a217ec64bb1adce51dbe4e91f8ca3bb1554c69cfcf784c1d6a204eeb554fdcf97589b5bca71121345c8295b3219c7a0ac6a8e6c45a56f1c421800045e8ad4343de962f996704ad67d6a16492478e625fb538788d94f6e0bad7d4b3947bbdf4c7671cde7a1f1012e94033fbd07b6aed77dc1923b45e819ca083445e74d3da2491f3ed2cc62d95ab8791598cff88c123f25afebf94f7bd64a502fca403c4f97f747e83d6ef2c4ec250a8cbf43226d62ee5d73969246d866d744f3c6132192560f6431345b026e8a5019344fdf047df2a71cd3199ac8f0fbb715ac472b08279cd08fabe67ee3fc1d483144704de5e42d31216e04a13a0fa90bc25dbaa2f6a77071a3f1ee84c96a0b3bb1d1bda31b0e0cd1489476acac931132c49def791d022e63d584333e74a7797ce4b359b74895f0a8d779d1de701df30310777bd6c95b62660c2aef1903c42f8298cac343e92d25a3d05f6202258d06d1ba40717e1adb8c959619dffb393cc217e3f9f7fa85ce1c76fff65b1c9c818e61c55b95895783538859b9918f700c9236838704e8e3d62d606e5c03c6edc8f43c3eef1c5bacf9d2de03b7fddc41a3504eae09de4842344a0fccf0717b12e2b884067cb88d8b618b5e8db020d068e19fe1df64a71f312abf2cac1ea8090b7988efe854a88e96ec8981a8b23b088e1ab8ea1a0b27b4fb37dcf19108bc4294c04bc7a0f7bb303d3dbfd52c9ccc05bcacef29b262a9f7e4557c51f8e539c39450af15a27a491c827ec891e6da877696966a6934f0879cfe0efe9410f8b1c98847cef0517cd394f3957fe68b591314ea9f99b2f37bd53b6b887c989b00f3a41650dce3080950e123549fe131e5c4d4091cfe99b28c3f8a247ae0a084cee3a65ba34eb1554cb4c3ed636ad02a32e8dc4f20f3983b9756f990b7602b25f9093c8c9c9b45fd80918e3d238d6dc78265e078c2f2f978c5c9a125726eb89713f7f9a194e7c0bb5cdebca46e9480aa52e1d8e529a3b86f7b98d6901fa9de98b465c6797a9c275b16dc4b79f990ec44da6a51031dc6ebfe39e481c2b8f0151ba2775c2f0979ff9f78b63f255523375d423238c9a09b14cfe6248f55bd6a379d777337ab0854b1ffd1ff939eff2f60d08134740482905263880f5d06f1f5c0f9935c9a06727f2838beedd9a0a90d0d7fa34452fd5016fa1f7462045b9ae8a42318a834236afccfaf14d580d1621adfd05f24ce93cf22da074f7ba16bcf69af7fe8f36a34b5d2240d7a96e520b7624593e01cd8ffd9e98f7ffe0936b6e9e6bb39f4fe86bb7f06139192fbfbe4ae79cc58cdecc6e7f4f717e1225a576fa04198b9545359f1568668f7626627f3d5f3be5af9c07f645ad826cb1e1633f95343ec40755a002e8b26571f313254455a2a1e64d2954f3dda43cba399ebaccc25feded758e82315dd8972e255fc07e22fb400be6aff4dac9f77153819bd1a14b4dfd2e5a9f5865f1461d4e5902f36aae8c4b9509c3de4e0a89eb535e7a1e6cc3b25c400205db7f57f45815ec389fcdd0a9fc1f7bcf1ffc90f04bd48bda3df1876e4b2ce34c7dc2640eb2bc06e533a759aff0e06d3021f9e67fe4ea6d23bbe493fb245cc096e6f492388a4fef7e61fa3b40a652349683b3daad23cdf2b429aeb2f69d74f8b5ffe28ad74a97277bc4a56097d8ee740e9fd59325873eccb556550da485e2ab2de044ff7148f17398901b05c09f7cb7e3b8ddd16fef4ed34189196b90da34e6404770c14e9cdeaead9014c4177fa5d68f8e5fa21ed968fe60c01d1311407db79be1274abc8859599f2c633395de7f00e24c7808edb433625caf4b6f1ac1b3ed9931f77968e3c836097270a0bfffaef9f1f7ceec7d3b1e20d6813a549f272d12a9c1e6f85eeafd8c21bfd90a926787ed97785fc8e0eae8c25c065ed09651102be27659bd229b07a9b5323bf76616d60e5f9440c7095641401ce30924268a9f3423b529b0042e8a6cfa11413c6ab2de1e2a83686de448b3a0ec86c797b6fd1bc0a2e57db90e6086cc4e5830959edc5d7b96d433168f6013cad9af4db8e3c70d6fd9540306bde2923376ab7dc170824d02a6e093b531492fa0a94eb938001aa5f292753b46dc1a5590287babd76529aee1e43423510fc4b555e7a0937ac7308333ce0aa315123b70eba8dae9207d9970c71052c04fe36b79412499839918af9521760374048b18f3d5010ff683aa7322e35eea0bf16825eca550921ad65ac76ea19bfcceb9a82995b262c2eefeaa31d99efaac7f9bfa375475abf34d8df1e7ee095d1d1be7c1fcd4ec343e3169f385858eeaf5cee8476c02488544d83d15ee709cdd39d11fe9da006da9a6b67af2092a705fb00000531dbf75ef69d58e2e5a07c31aed6a101b2f77d9296b4854490feca8214872d1dbfe34533737f8ce85f0a672b781136d1c41ac28930182a05088243badcd23e05fece49d2b453e86595b1dcbf9e63fc577b90e7851dbc10d4a7f6beab9171d0904954cc072d958a7431a9c3520eaf4a1699981b6adf15b6a124a499f1022b85572c246dc19fe80fc09a026f3b8bd69943321e5b0a105ad916c11ddbae174a7686fe955ca78c562ea167c811f206e2d0f8f5fc708f456029eb2b4dd3c7148b264417f02972a5d9f1a623801df8f71a4f546bf2a51fd82c5ea7082042a4af868422a056e6a752f3a201a12bce0c96f3419cf6fee672273267e548851a697899115096a10aac0f4f1c8d0a759585f8e2ad3315d0a810dc26e1256431c922357b780a6fbdd9bbc576653eeea33e071ba03f61cccadf794bcc0aa3212da3c20b6528c738e8c0299f7d0c2f66f21ca8648ad896b5258e591e23b18ec47ed05dba036854ca79f4546581b97b8e23b8bcac201d137c8a087bdb87c1b0062ea96753f69cd11c85296fa22d5684c6cb7ddd14b740c2758382040734538fa873b6e8905a1737c8435d2252c337645f83edcda45014d0d37f11af34bb202a954889c06c1413992c8fa73def720e5eeb31024fdecaeea36eabb2913a64b7c7bd5b68f5aa9fddffafad6fe4d7471125df0d6b9e17daae2be8db3a1aeee5513c32b745c1eeaba8fa77c80a7f3304ab83e1800ff9b86f7e7c561195a9fbe58ba310c2d9274a5db99ba73edb642df3506e985f6d6caace32a1a900049a2abcdf2fb18d7c03f61d7439b77dfc5999e36d3cba050382db048bcd68d92af4f500dd426a61b0927c39c726937f0a08f4aca376f0649f24f42ba48020252b73d24346b25c9eceb2d91725a951360206cf082fe2ce548c23dfafff0f5e6f00921092e26cad3a3943f2de5c7d402932f1018b2affc05903ac54d7c16e450b5e4317485b21836ecde3c0410b215a81e0d81b9da23f548598be02f23b5f014d40840ec907f58f6228bb1146e56ad63ef404915870eafcd7b176f70acb0d955c45af7f4b38324061ccbe2eba43268d6b41f9459905182821276c616e32e5a039300b4025cc7b0a4a221a04862172e34224efa756917381613f44f910dc900d6e7b9b4b8a802516f4a6ddebae080acd915e66af657430267d988d80fd28da80d9a278ba16c06ba53e4638fd1b2cdf3f8fce50c7909c83f1168a6f921bb1c4060a5418668821101059a6d335f6c64570c3be1f994aa7e436f8b18055ccf77e06c6060c90f4c3341452fd786ae6491533fd660788326c6d3f1ea889a4e5a3b5f39186a4363f40cf9cf63fc910abe3aa98af1bbebdaa951a5b16f90beffccf5920b08338ae1c9e1d1556816a5cacee4317342183bafb93fe87500f50f6f2bc8fab69bffb0da02aae4daf0b42f72d5cfc4b34abfbd01501e8d44c06b6097550fbef839778a71c0c0c86f7a0c45d963b81977955f8eef3a304d6ac374eddcc3ee059db3d084c274c4686c0825afa9fc14acb82f9f73fe36ee01f348f38d1a2cfac2b9121379ec6d3e4a3498c18cfcc7117d5850600ffc3e29ae8b9b510052ce645d97f18540d1538e0b969c03f9c9eb61ac8680a7e02db08663ae7d674a9951ab52cd70669d71f3d05e60907a4f21ceb4d83029552678bc7df5811c30449a31de4cd7b6f1ef3fd099a955a59db04ff0cbdbbf124c8f762d8e501b3e1502834280f6fd60a343f6609909f2e2351e8270955f1e447df05e58af1b76984f45667dc52145bc102d5f1e824a191ebedaef4497a0234d29fe9fb036143a22d13cbc3d0a4614b06a5bae037bfd640279ce8c557e4b59597e3476428b2ed3b800a1dc88a60471e2521b01761d2baba8d24a933f30fee62484641995ea33cf3357c92404a9a1a568a92709bed4f97809a4b4568f671295e9a9f5efd36c54af4018c77a0713cee38e813bc1b0a85ade42eec0a0185834c68eec0b73eb5cefc6cbfd6843fdca91ed8d78201f5f15341de13594765c248be08b781d841966ea66f90a899c206128935f40d558e9f8203be5816d12d0ec25c77a6e48743c06675f8df3d10179d4746ff6b97c86f5f8ad086e5e6eb5f6db283cad891825804a2c1b04b5e31c609a1800c44276b3006e2b1a547b01e0bf7b39ec5591a7e2058fd4956be4bd6caf770ad55ea42023169847eeea2050f3545465a45addd180558df7062a3d67b40059160cbd4a5fcde82dd307721821518bbf842997bc6391208a041da562bc19a094643718dcd67bd1752074d01d4c18f0dd0056c2657d342ac69d6f7ecf674ba9d439aab9ecb478dabe2d9982cfb79b546ccc344c47815700fe993b10fba04adc94f32ebef6577ae9c6d61b33bbbe2db3ca7ea9cf90e5b2c4336344461003fbecd36301a87459c9376587b41410fb1ba895ed4ee876a8febf76e5c043ecb43043a3a5f3176cbcc57438e3271d2d61191e73a988cd37dbad9a43621e3f40f30230c028490889fbed679573774e582e672ced5bcbfa009495d3001a5f47ed95215c3a0398db167f7f32c784b0023ea8547fbc8986879dbc1a9caa13d2bea17bd2483bb8c78f68807d29fcd3d08ccd0103e5001fae45cbddf7c5b7c14ee3cc67d8585d0aa9a453dd209e8a64a302a71d545bd706efc8cfbd11e3c2b72b0bce587abc02bbd4039a6e4592e31af90397463b0436187439b816be2e4ae9c2fab12bf775cd6ecc6d6b2ca1360bf60d977fe6b5f1100093db658628cbd3ddb465debc63b31f3bcb6778ad9b5557dbc3ea6592b5dfd79355e226a7c15a1310056c0b2a097634b8bd61273535020966dd018bd444f63c790e40b1dbda2e7d68381c83ad7cf6a0505583e62f541abded27f17be1f24e3e32177af296b7f04a6a6ac3afb8468c72265f39c186fb4673d08de3392b1549b30b0833c5912201feb72a70213e4685673eaab2362cef12a0cadaba030330c0940146464d0df662863cda302ec36c43a5c0d7ef9ad92470c98944468381fc398248c78f7ec3f00e00768cbcc126f5722e7e3aac371f16864621fc00bc683c2d7a907581de8e3242b440947633e4720e7e3091ffa88753fc0eec3365d09a744bb03a3aa53d1ef800bf1a219ed7f9a3e2762795d6f5f8282848fb90911eb0c3f297f6dac01a21512b0ce77c72b39c6d6fc0a910425e30f785f08800e676776351d5fc46c010bece7de4cd8ee227234016cbfcd479042a54af1b22be02f037d809a8801e4053328fe7a88d35d1e06d01a13a1d1614d01b45c9e217a8856a1ab80460e20f449008639c81ca94a464f9711d31f45c8ec2c86c5a47cc7c4c2496a4fdf7e28a76e583180f901d760f299e8293eec8cdfe67fee26078fed765357e0f368dda10045aab3055bac331d0efe4fe961ca94f7e1c2e21e7ae5d8a831a006b2ecc31f77e1f9a7b600266335d2bcf1c422ab249292caea39450d064fb5a896974068503973fdc07f8ff4437f91e98333d4f779e82180b599f2570d08d4a04520863ce6ca0d0e287410489c69ea874a6eb5c005bf985de9e1839ea26a1d45a42a25ed68c5c6875b7ea931054a98bc8fc93fcf5f40621318eda68bdddfb65e2d7e45b64ee32c0eea7c0d8a9badbeb20d12b41f11439129d86b2c425c36cda4105d10043c552c4314ebf2d187dd3636390ad6052724c6fc4e029db71b8ec2dd8752f95de19383944a72c851d0453b222baf84120b667894cb7508a16c6a27139f6941b5c3d74d0e4817d80152693d7022034d406043de20d06adb40e827ca51987226d5c781447031055abc1ba83a5a35c9423947d0d4ebe0026d77a01586d134647656909364f0f85c3a7e0615357970cbf37de7dffe8b5e9dcf7be66fb13dd8f3c729bf7786cb3bbf594d8360efabf51e816637dbc93d56d066079b029da0d410a4a4c073ad71c3dce6346d412b0e00ff6b25a08c237ec1cfa235273401f868c3908281d2136ce109ad5c7229f9215decdd299d6da8cf30bc65d964bcc0a43ecdfcca27a9e5e1313aa38281d5250b56cb331040d7061476266a6252e67d0e136c41e50883eba62739ecb26702b904408eaee805cb210b19c68a3d18d2127446443e071e7b156249cdd9e7c6041f833cf52ca94eef95456d90673f1c0c399bdd852e1898a14d12869f244e7dd62f13454df5b94f8f0dc361d69f4935cb98fde634fafd6edaed9c66ef4ba8731c767a1329543710135a79d2714b340216e55c5bf00e736e0d96409339dcf4615aceda2bef1bb8d963776694106fc8c753c643b42ed5c4491348a535cd46ea5eee1a4c5e220155806adff82dff975778b293ffba1cefe56e4161fa22925c709b6968ca7180e6ee553cb2937e30d41f7e74a01da8c438fbed39a9beb6545ce8e38f99408293426bf6802dce09c2e214a5e0b4f77be78c41a80077a333096bde8882ac6b0dd08abeb1c596e82561bf2cfba2c569491ce15995c971475f9b8f0e51515f2eabf8d989bef40b574f75aed52a5e4660c6f03be76906403ff0ec4f4b152bc19653e06c823dde5e7f44e1e1ba69071ae6a2c7cb9f8052d880d86e55b74962bca785f483799c6502aa4ebe3b147593de2c81be01ed01e40dd7c15916705165bf721d3f7cc0e4555a0b4b282717072653b1e18e4a794d12e244868e801b13da8c19cd1e6e4130abcc63d2018bf6257a486bf7ee9ef2c36626688c3836755318b9202e5e51218cc9bc9342c86e89fe4c7eae6a3c1a37bb686b6d3f56467e1dfb8a18dfe633a48f33f73ab6e19552fccec0858a578f7a4437449490d01fb46558abfbd53502ff7b0581be5aa9305dff5c5c69e874a57b9062c9a3f48462fa6066f594880d5cfc4298304b8c1841ee67c0ba8d6f5688f6bd322fe898636db37d37c7aa9c2f027a7d094315ff3da84a628c0d41d568457b489b720eccfb04cc4203df559c688800430daf706115442501aa4bc6338234bf38dd92f640a3591c3e6a013b74f2ddfaba51d89b837f14b2d2544fcdbbe55441a2098324146394071830d483c8e5103f19be65cab78eeaeb936536d021e46a281b4b251b552ea641ca2015a9bb11f834428ae09850fa26712a0b1480d59c51cc0d56bc1312f77871581f66d49c2eaef940da33b0ac145d5b72964d18134f6abb458870aed5b58cd2b4a0cec069758fa7599c5f56dcd189849a9b12680035076a9181be774721821de16395b47ea12db53b92a58e504dff4f88180966eb150d94481d5f58d5be42f9d784e307014889ca8853e47077b219046924cb1e2028598eb4262f906fbca5774020be43817a01263d9cd1e7dff79404517a2e643162cafa9e3315ee0d51dd56d8e457d7f7f37297e7fa7976813ee7f8212e89af59a66bfec72b078208b69cc60462d452327744b57232f9fbefb124d53fb6b7ed5b7653c4c89ede2f98a273ec8952fc5f6bb608a9a4161e07f8b7b5affd22016d4367256c88e641686cd15bd0a97fe2e401d98d5d5e787f023aed19a6b899e43ba848bad6f3d1c21c8777fa0f14a645fb8b2884996eeb8552d0bea31b94e8e83485c434a23103d407ca8c789f161d59d11f9cb671c4da882c5b7090d3503832a43425c88274d50b15ac68f15eec3c5e77929506a637c3e883ebf194cb9eca47febf60dc5a37ba03456365f3132413cf6999047b26a2584d5cd6600328fd33072e3848a219711cc619e5d3e7ff3b2890260dfc752e1c83a7566366a3665a1115e6dc81c0b18af72288f603dc8ac883dae28a86358e0c615054cb0c186849bb362d2c1031ddcda2ada80b985a9657907b9820a546c091feef2cb3a306b283ab381baddf5976d0f105950327f7fe52b4f0f1fe7c0d1a729c80f8f26b188ffb97e20c4570efd14894ef4c524c2ca496d3e34351a31366c4f178068ddd90324900725d0c20dcb13c3af75d3dff02d4039d6f9c9e309d9eacbb0053f191e59cd35c3022c8743b9429c63588cd47544efa231d8f1988ea43c1c74f98d2ffd96b0b2318288564993d80f66564214d43c799c39e02152d7ca2039aebda939d764ddaffe516dc41712654591952ba9f55d1cf285a71f16a7ecc78ce1c982e9d81599686734f8be66a7f5c052cebc9d3b2c58609d07832cd865a784c2e78bb0c576afb856cfc8e7a7e2fc0e6914fb6ba205c03f3bc0f05b90863569f108458209fb4710c54270f8853a607edb46b1b10b1c01f99b9f505b9b3cd6523717c140e069f3f8b4ec59497e4d76dc6161fccb907693f87e081df47064c9f6ebbf71314af8bd2b9e6250bec5844ece4991510e16e72f739036bfb77f3e40536bba2ecaefc6decdf5940a7adea0f28ac53f822087519a68019d944ec693e200c12197b98cb4b013013a73724dda252483e04ee12f4a090dd4d5457a7d3458bb28f9f755a60600c2695d2bc04455ae2ae742ac959cfdd44187db1392de1fbd42b67ebaae8cbd60fa9e3bc3a56a2885a1a0bbe47fb21530e058b8c92a3adfa7dba51ba58f7dd2d44c61cddb3cfd29726ad963ec90c35f1124890e159fc2581d2e020d69ebb3c342ffd9d01c8ab9ae8e7fd52a821c3920ca1554dbb854ab3e61aa74de5ea017eff9f303971942e508f4dd0a94ebe0262b4beb39961d6a221c0cb46d178d948cb569f479bab6d488ce690ae30cf2083030ece3746fbd23467e4b6e28c45fba0445bb185f57862ec6320dec0c279380488eb9d4f43436f9631ca0fd5968297a5e234f347e8ac89448b99b5162ddf0125b80a4d9e7c48105305343f34c2185af3d0477f9730c35de1530954fcc8221f8f055695f99088366734430152626d37dd9a95b958884f4ec263fb72df228d07df0da5288f9669f2ed2f342bca4e5a1f722c072ee31cf1de8a973c4da369197ee521e13f7aa1d6f4a00cb4e863b451e0edfc19c801c389b6d22e3bbb6b32cbe818443053e68714edeed400a415a27dbe3dc6dbdfc26794becd4656b5fc1116a46d7cd549f34084f9ae8b81e2471bf8fa550dac63006c3b754786c9c707ecf5fa982b209ad3e23829df2da41a33cff2a169248f8fa8dd7870e85f4ab89a4fd3b89ccc60c2f369db17e7f3864d0045e53b3e21744b6049b24b995fecb292b3edb182d851917b072cbd29f9032cabed2f2f63d01b7e99f070d20f27e64f9db5f8f37b39e764233a032677d7d9df675a8ae1be1e29de51430ce69909c6b5bba0118245a4a0ab5c12ff58adb54da7f01f934c4f1b70912d08d52902055ee8eb079c25668668a1c59838aabf211c899bc0bf97ef92f8bac0966dd5588d5be98d2d63f8a391bbf11d0952c0720193e38802cc011cc85942b804b0ffa2aa80851c7cd8f82443f5d5c9eb9e5ad3dabb73e30ef6226b4a3e4f2dbdb401c706ea5cb07e240be97a4813c563821ca47c4b3de3c8eb1affac9e817d1e0b10e446c5ada7835e079c82bbe67999df1670cb31d6959eda391ae12edc065d5da19366c83c5c0fd59ba4783e4ce035dc1e99b905aca2d15c358898c1a14ad20d4333784e377056ca6bd29a07daca45d00f06886dd90140bee3bed4cc8470b81d1b5535b2f6bde53b6e6d2ba4237421c2e9e02a40db8de6196557524a401418424eada4fba38d1ce3b8a2d6a36ab7242b9ea0a15624117b00fb53f9c860e3ef2c05d54be8b7d726dd36f6ca1ac3f3e4eb4cfec69e0e7f481c6db8875de59b93f1d10ff3f055be29473ffc2157a7a31fe6903dda70fbd08b299adf2bae1fa21b570dc3c1c8ef889143ba63b9eceb58933947eff722e1f2e3a9d1b3ec750e5420c1f3d8e553e33d9145db362fe295eaf922b92ad359bff2a6490dd4daa620adc68bb94b93aa7e682a0f6ee4a99b4ee5521138cae76efd7d9ef999dccca0111d35bb081e79f09a271ac2aee7c9989873ee52850c5e7171e8a4e57c22cd458e40d6d6e5805b218d2607226ca612ef5fa0437cc24f01625b275126b24bae9b173476f4de208cb976a20d2a37728cae924a0844c7026fad8afa7268f765a3df640c55b8b14d436fc867bcd2db6daa6b29998037c98577544e7ebf8b20a40135fb428d91b9e330b79ef0e22410bb7ee979755ac1deb00b9dea7f538a0562afa9de1d4f13ddf32e08a18e791f10c8aa6bd54f2964df87195e3ed87ceeadb330dd59ba5cea0c62cf35f7afe9f6c3140356ee7bd14bb7af830527ac7a73a38265b06c8a6254f4b7ae7933af9f3d3eaeec3721c9d9dcdecd96729850124c93bb93dd0c8e47d34d3f70f9c44126948a7ba7373cc26fa09569af060a129652136d90b44c671ab4517b59763db047e6f64886d8e9cd197b623e62bb632a2606d3c9eab1ca79036c8badf7a144c1c64cac0f75601f881df3a88fe4d6f2a83e064cf1c84039f5a91e03597fc647b60b4ef42a9f02005b036b922090486fc618edbf07ef103df80a000740e9464a5cfdf32e1d10c366596c39b0396f6badaa357eec68fbcd61dd528644987bec67552c2d44dff74f4d99494d1639e043e995a606d011bbc59540f5668e8a765ebc6ec3a077e44bbdeec8191b263bce6189ae3d8785fa12847127497b1234ce73b187219d788b1df60fda6a2e3d74c219fd316ce3bf28a80119effc6c6db2960c6672150f896f0236f32d825d549f6048dc0f2e67944e4f9cd950a67c6167e832eef0c201d7e3b69e7c8e414a4dabbb5c9827035c68ad83134d9fe6243a0b29b77fb57a74d6e8de303455b336dc780b66e49968d00f3bd65a2700e3aff7810d4b4c48c08a8802384b037f38828b825d870c125bdc7ba69334b4747c0b2bb5812ba9c048f5ce9b5eefe66869391907b6c49bfc1f56c49b1cdb1a7590c221ddc1d2a0b2a07fb36bd2d5f89a7efcbea047893aad024756f47d2268b32c6c7a0fc7fa67436051ca8d9f27cd87f0263aae12225424bd354ef970631d433a5462082b2dc9164cd66c8aa0bd701d166ec7e3675ad7e10b2f1b76f24f95be6c74460a6b2a3bfd6d4143944c41e17296624a46aa1636684a1b6cee2fac10ac81031cd198c69f3d32685d8b9a1110e181ec53e8872530ea3494ad73cccc7cbd358141372168aa89fe085e50c8038dd79fd7c445a9d3ac1cd0f820b79ac13705bce09d568e5eb299964425e88f90c1bfbbad045d1defaee8076a84f30e997baff1440508f4b94cbad3abb3917febf39a11f4dd4a6945f425a71ad1ea37919e45975811cf117af0e761acc2add031a41f5c4304d03916607b0620c51701851289e221e444bd3cefbd44c5d02b6c666b2e329a447d6f2ea176b32c1dfe54a75aaa55a0290d13bacdc2782e08744b0a2cf8ed8ded248d32a97fbb5c587e07602d1e9ddf6f2ec63fd5f8aaac8b99fc417574a5c2dc2492cbb84b96de33e9ec6ebc1ef96077f23fd312b328a1f816ccbb7dcde4e0d761e3626eb92aa7dbabe4fcc082a2eb6d80d84e6decc9fdcd81e132cc99c61da5df2c5c2fe43a9116f1ee39dda15a86e78b2a08378b10379b76ae56243f7d696bfe54994cb00e45ff62f324e6a045a57c18eac91537efa823d5c7d3061c8c5b2cf8effce93600b7878649999b8eef460fb3eda3bdd29e7dc5e1cd32135a36dca9b04a1228c530c9b29158d4325a381f92d196849d8f035f24589e1f7d3e20b3c6ceabbed17523dc067c046e986b6814c311beba9568007df19c450f28e1816cc47a682fe7144e19d01611b8c6a862daab8e6bda06b32938966df635f84c8b9612c8779302ec2ba23b6c5b029fe0ae7b885675e7cdb55cab876080b551ac6a1739f7967cdfeac30daa2622b61fab4671e669c5327904473c0e29724f518f5f8e5c721a24cc756e40ff64d95eb8ea11ef97ceb6ec911b85dd39f50427cc4d1e348a763fdd269a096e7aac6db77d1b17eac462ea92020b652fcd104d90105503e14ae4da921db748bce24886b876e4076f9a4fa73377660d1e7830f59d3ab36dde63aa5f38a290654f3e3fd5c85fa8acfa11444270ee51581aa8e98e12dd770fa15f35b4bb20eec7bc769f8346b5ed54e1a9d8ea9c4a60762c04f9dcd12b0675038defe8d83eac43fd0f456eaaa11d93cc6e05c0fc518ad534ea77b8fd5ccfeb2f1588daf6655b3d570d1809cea02cc46ea25c50d79903cf6d6311ecb03b61a3145dc6d1ae33e7ff3586db014306223931a871358a9df8c8005ed5929a5ae760f69608476c4dce2314c97de3985191bb56853da5d5ff9ae96466cabb66d0990950b0ed275e1840f48711b39ae4d52c4937288c60415e3b9fd926e94696c4cc1ce7123b480d1719266f1038549f36495b44ee531e1833ef9bbe7093f8544bb8288ad413f8829c7689fa446ad92ef3f35e9174111c711da7df2a53b5df9e6e7743b02e16b0fef1685181f999ee4f41b77f38113571db48037c86d35030a22d85ff4a86490ec9e8dac518c2c6a3bb338fd124bd31781d2c94ffff9c5ca3d3239df822e09c667ea4351801471bf71d039ce634538e1eb4ed130b2c39485a74707b3f08ee02fb280c78a0dc05c0fc580b749e637d43628316cd3f4a60f1e513b5d30ef1816ff42b245b521341667e25f06ff49a9f6d54024a7dab75ce9d34fafcb8d7ff3bfacaf3a74dd5903ee3134f5fb9deda07faa6d812a9587185387053f3ae462798193ccb1d9275bd8eb08c51fb1c19b6cc203f8db0495215b7993023379635803cc6bad41b3ebb22eb2409860a83f7885d3054bf57335a26b1666426b266a44c4b31b79a56246f08d8f49ebb21fd4eeb1a567a972b25433fbaac05f0572d1211f4e70634f2401b9594291ee2788361f7bf6d82fdc01f7cc5af5f7266e83db0c7fb749fbc00b9e305ffce3939adf7c34755b57a657a6e0d7ac9396626dea301f1f9b39be98836396cc1673bd36054e61075cf9d8939b5f4ee217238d1ab149a49bd333da495bc80e786063eb62808d2a9482f0442e0a9c5ef7e80ebe13ba5b606d39614581c823b0172489914f37a73452fd8617806b96aec2409ffac766d4706760482981adb02077a0408aa437f80431bdaa17b80431deaa11f9a071ecaa119faa10fcd031afaa10cedd086f6d01cf05087fe50867e284373d0c396f64b77a1cd7b1e444afa7b063a0b3e6727608538b29f8cd760822e7dfe65ce88b9f438dc438eea4aebc799cdd7831d2881f9cd4901f47bc41af756ef409f322da7e9e77d4691f87fb8682405779a3c9d3279f734767fa3166256114d70cb52d9196085b803abe2c5126f4307db92285a556271d26f729be377a3a7f1e8dfc7d25bcecd4d6340918db1af7e3b7eb9628605cb7f019aa4b9d9cff0dfe4f8ba9132249ed1959a01aea8c8f8aeea63902a16432f3df2b12a10cc520a08a14802b3f8abfa15918a21669ada6e7a18cf7cb3aacaa80a649b9c13755199d012bd01f90327bb6d98883ca18f228819ca254bfa0a5898144602931c412f81554170a4cbfdcd24b44824c8e34ccd013b52a4e89c068adda4a0921bb579daa4e209ec233b05704d45596e9be12fbe77450f1e1994b35e209c02d0fe34df6c3254f0399c4e9d2378b286695f88f9f3a95257559ba831b9e423e39997eaad8fc9d02b83ff33c2068d35ff35fa5c115468f8f83af78bbdd660f1dd7b44ab6a93b0642e21b4c2a07925db63dd4703db6768d9347c9a7494a9029b03f05443b0f73f5c7950c0f875cb465b812c8e7dfbb3d4838e3b286e57b9345fb97990d6fa2b91f1013409057ec5043310531038aea83afc992c9ea1dbd608e42bfe6f41d7ba907117cfdb32476c492cf04f066e406fa9564dd20bd3221121948d5a61dbb21a38610dab610fdbb02db7dc72d50db35e23856e959018bdae8678a037909d024910641025114ab40dce20a36da065834f028596c44bff7674ce4ee83ce1935d57473b78ca87774e8cc2e6c9c33bdb2ecaac75bb2d7cbaae56919b597c82384a14ac734a799f8bc73455aeda2dacfdd479bbe7899d6cda09cbae473da7aebe59d86ecbd1ecf2beb65bfdd93a67577d6d5715f357d3a06b4045d340d3326043cb20890cde0cbc0c6e340cc0c040011a0627062368484a80e40a243220f182c4e7823fb40bccd02ee8e17f8a1ae4094569f9aa25e8a5b554b942f453654fa1d2bdb61855374d35a8af1e8e92f2ba17ea62d576c51dc53b186f75e7d44ef14e9d4e083bc159b0133ce575b5b0cb754e0ff3e0133efba61d89a2e9a1695368da129a164d4399c08485a909cd0483a98911418c2ca1192142334264e48b8c402bb28656848c56e44723028846848ddd727cb45bcdf2cd6eddbddcc8e56a3f85fa7bea0861acb3dfd53d059d18750a1ded169f403b9ae5f8cc7202612758284b516e332b6d5ffddd45ac4bdd6e4e59afb6670b737ec17bf5be2e8ed3b588b345b93db7d1ce89f78a088fb0edb5bfe749c5ddd272a934dbf1deacd56db156bdd3b5c57b0a3edaedd16e4fbcb3b5d615132244444a181288360405da10096843a0d08630a10d19d2866042e2f8ff53e7d4c972f6730a15bca3b3b3b3d3b3641961846d6f35e35de4e6558aba86f0d6d77c44b4e976f7576efb7e654dc8114268d8ba264468a3ab9053bb6a427ed372c8f8ff1c29fe9f4d8952aaa3dd6a39ae2bb5593c8b69121df11667013809d070a068377d58a1dd3ca1dda8a0dd90a0d990a1d95cb16de7bbbb6a8575b698fc9ae689557ec21d4be7d4e9d0f3dd436dd089550e74c2e7cf799e2f14e7ddf3aa95ae6d6ee92d861bb56b51bb16b5abcdca867cad0690ff1eadc68b7f579156a3c31f6d55ab11d235287e99b4ef8aa160228d460a282e8ed45776d568c8df341aadc4c66f2ec71e51d2ffbf563afd076933806cf9cdda4c131c489b39f391bb75cb5b54cf474c5e9b69d275b6cb5927fc6a738a888765b34f2ac5a36145ffbfbd8695daebf13f089416fcd18206b440851698d0028c0560b0600616b458500a6287200810e48a2058206004821488088160b0822e5620801504ad405301163ae789d5f5d4711327ebbbd595c5fd5df7dbe90c1571f614749e70bbd91da45705154e1d96cdd8091e3a059d278a65d7be06e1edec4efc62579c5dd479baf86b7d5797e37ebafc4db395de5d6c0ba3d65368ebf00e56b9baa6ebdbd7ac021d1524014405804400100200920232420ad04841d277172b847776cb817cb06eb30ad80956e114b4bdac8bcd46ab6b4c6b4d375bd4ae1de79dac378bf58382150a464081062738c109da3841152788e2042e9c0065020f3c6132011226684d20f4870afe88e30f04fc51fe71538208fc63144685f93264ea8cb139850aded9d931773633e8c90fded9761ba4f212309bcf179a6ef81c5abd1cc52854efb9e5f29d966fc13b1b9b757bc22f5f1d611d779f54ee5ebd27ded98a765a8e51299e76af8e5cce936e2e79686f57e52f8bbb6a094e3b8f2781129a045f4870f3ff7db3b95dad6cdd0f32fe373f68e0ef090ff97172eef698fc48b2e9b87c35caab8df695d5071e7d94e99cc5afab45bd2ef4a88f2bbfe9e49e8ffac0efe44d7ce481f968e28b8c700f1f484ff8b8f2cff9cb47929fb2071bff6cde2387dfdb555547bbd547bb354da23d4e7a08f21b515090169f6da728ce7ae4a087901e424690c508904640f4dbf972ee9eb8af3ae7096f17e5f2a3ddbed896ce79ae5b168115119010023e800881941010c9430379b4f258210fa13c4a78c8818701f098824706203003043b8000ccffc69a4205f3f6e572d666e1760dc23bf94875ead6c5e6b7bba868395547bb55b5dc348f36501b845daeaeabc63b186fa7aacda9eac43b189b5a3617466af5ceef0fded9f61076378acde9faae6efaba5057919ba9e09dcde5e7893ae2ec46715f3193cd3df776ad9ce71d82dc21c61d59dcc16e23b0ac77b56dd8dcacf525a12c373139cc17bc5776a861070d7670b1e33fd0800f74f9c0933a06a9a38f3a8ca8e3043afaa023083abcfc8f80f1f6767765e2eeeecadb7dbb0b005867bbdcf784b7d1ca66cc5f8cd2d99dcdea09b3acaacd9be57c67c37b4534b46de9bb31aaefa2ec6e238eb6b6db72f1176a15833376513ae776b9ef799e70df5b4c9bdfbc7a559b4533ee5b4e5b3a6e263007147378f96db3f2506fa1ce13f79c91aa884939162dbde53d6f37ed2b6b6f576d770bdc55557babab96a32587142b98bf2f968d238fff389a78573d7108c5813d90478f078ef0c0159d13ee190f79e0b4bdbbf7c0e1c7eb9cb0c66d86a30a385adbd9e1b802077e438bdf582e57dddd6abda1c3bfe1e5ff3716b0e6bc08bfc1b991c77e42e486179b1b47fcff66e4867e75266e98b6b3b731c76f98fd69a38adfda403a3b9636aefc6facfdfeb4b1c3061bbfe98d6297b39b8d2a7e7bb13d6cc0904aa57e785e2c9b53a9ebe243a6994ad737bf584c938847af3e9b75b9a9d40f4611f1a841acfdfe6ce149379735ba354a5bbaa9d1851a46a881e57f73f7a672d48a5118759e9b8b1aa6ffade558ef971ba5a1079b4699ed95f72be3360da2ffad07abeceebbe578280d1c34b4f8dff6e6bcdd5e2cdb8357ce02e63d681cf11b1a5e5e17477346c38451bde70c3bb63663d6de54ce20e28c2bffdb1167599cf5d6edc63daf5c8ed2bc73d6e70cad7bcc20e368b766d8f0bfea99cd584cbaa2c0ba5bcc28fadf88521d894fe939dd5cca2053c6d606193890419e7abf58fdc15b6716ead4fb6795be79cab9576f9b31ca4584b7b7b35ca9bba6ed8ac780610c2a28cb7277b37c75c462f1378bd100317e10e305318ec41003c9a673ea59f5639a44d84917bcb3e94ca182771b8477b6aef376f5c63b9b4e770ac23b9beae55c8b0a6f7487a1c3f0de00030730443092983af0812d361f1d9f5310cb669fddf314d3ccad17da4f784bdddc57f567d3c1eb099fe6dbe6b7b73cc52f6f5f6d6eb9dc9749cb8f7abb65eb1d00a103cf81283840c481992fd0f80206d31757b613757555cfa7d73511d279bffdd4d9693576f1579adf8ed7eee22f7e53177fb57c95d11d576fb7fa83f3b65d2b1bebd572eddabd85f56ebf386d5e00f2547e80bcd082037951668bd1db8b2bff5b7f6d3198b5f28e51db68655f1b850d2460035e36f0a48b35ba8040172b7461c30504b8487a54dfad57bbe255cf6f3fad3a2ccbdd7cc2197726547ef046f7d0167d6c31c6164c6cc16e61658b4c036268c0089306ba68e00353ef7775bba054f0ced95f1b851769039d1875aa41a8d3ec3a6f2d2815a455c57dc5ab743d75bdaa5e5b0c0aa64974e2fe769ef6e0edd4e97cf0cef6a65b55b7cbf3cb7bb6b3bfb69854e7dd436c2672395f1da97606623065e0caffb67ad7a3ddf664e0f46fc2401e3d1890e2370ce8f0ff9f8f7a30b05a3190a433c92d164fdbb5470b2fb6feba7b45a4c511ffad1642ffbff55db4d9d568755bb8bf6b4efbce3e5a98d8b7e5fc45b16c1679bc90b0d6196701c5fff642e243a64994123b97691221f1292c9bd314118f1ac4669f0b087d0b16e816302d80440b2ca4c0220058d05c81c7153d5c21e50a12ac008115655cdce1a276cd82cd202a414419c5ca1dd5ee7deeee7abb8b05177fe173bb4c5cfcd56ec19bceb959b9a37a5eefcaaee88ab45995bf789f27de466cde465ce5abb7af47fb6db39b5d45b8afabbe5d1567dc1ee5d6500518500155053ca8a28d2a74a8a2a40020ff9bcafb76f3b97b9e72e66db7fccd4248394b6b5df5edba5e97bad35716750951e0870a1250b1012aaea062f51bedab6e33d21ec2e6d94f6fbb59af763b555ae7b3af27cd9b2610c8049a98c03a01122480c6c6dddd42deb896089c600111482102190432c021a0648a124c41c414394c11650ad3fff7bc3a8538d06945f522ed13ef6cf9e8c43b27770ae1ade7567615ad282bf7f5c43b9b7be29dadc5cf76558f72ab577993143f26296a4c0f58c1039478000dff9bcab1cae6d54671cbc564169bb77be21dd7f5beb603e470c00f0e607fd32bcbddad7eba7bafde13ef34008e0614a0015d034abfe9089d709326dbdb39db3bcbf6346982b7cda26bbbb6bbe51aabeb115f61d4d95d9cf56a799b4ffc4231dfda2d518031452146f101147d400101289880e285c2c913673cc1c4d6f34a08ef983d78c754393ef1ce667677bf9b95dd2cb4a95447f8a5739ea7def2aca3f78ac4ddd60967d95e99dd9addfa85c4dd169bb7bbeaf90acbe674b5553d5fe16afba37f889cc8c30b279af81e276868e5a31e27ce76b75a79d5063941fee7a39e2600414d78531352fcb6593ced7975a4d774750d3531d44492ffdfb89c2ef759abbc69765fa4cd0416badddcdd2decb4bc6562c5ca4c5059c204dbeba65ba7bb9562d91575b790e669eab551e0493797feda6240d1f5da282c01c4001530400d06e8807db6890157feb756de2bdc99a0acdd7b0fbabb14e51603f0ff03b28bf21e52228affdf5eb54789169438ff4f9d6e53e2f4efcada6e666d778bc9591640c502560b58f2ff1beb4ad99c66d795a6a8abf3f7e55ccbab0b6ed2a449930d6955b7db7addfcf62da6a390041549d09044988493243a40620548ec810411ff8fe54d4808216105899dff4ff1e011369675a9db7dbbe0ede56e23ddeeedd439e1fdaeee518777369d6db4f6f6344dbeaa5afdc4277cea0c9d824e6cf2177778e7dc9aabda9c9e58453a87cef3f439f1767586b013ec730a3af14e8a078fb06dcdd3a33dd4d3b5c5df2abbe795d0ee79d5ea6edaf236bf597777b35cbde569cf6e15d3245af5bc52ed37bffd75b53877553d45c4936e2e61bc2f0ce76128a4eb0bd2d66d8a74f1a49b8b05fe3fcc9b14804777376feb366f67b339ed3de3370b0599664a0c3d56ea8574e91f0534316205464491ae6f66f1d7955b235023866c3daf8ac0a208b5880b88d000112d2294fc8672b7d56e2377bf6d6edd6dc48b7016bcbd5874ed9db7f05ebdddc5dd5dd466adf3ba387fb1cedb3d6d2fb6bbf86ab4dd164ef2a621869040661ded9635c49821947c16a20b21a010828b1028bdb6fc4d337fddccda2e7eb97ca3558270230829583c7d5df9c814c40b4108850183fa02666bf350101e9441e33f0c982f60da1e1fca1895c161c06014959f2f6038eff948e7d507800003958f7a80800108158028fd20c59f3a18a57fceedbade6c94572e2827cb669f13e7d6f503024c3f80c93f74e0c320ffbfe54d3e3ce10351183058af18f5058ccb314ae3bcbe72c6abf4cdaccdb50f20f430480f4dfc7f18309865336f555b4c7ecffcd2d9ca9b7a287bf8044891002f1f060c46b1d9f5a61985d22bfe02667b59d798bebe7dc5d89400fcdb4e79d043ad79130f67fc7f9737f13080ff57397ee523cc5b54cf473cec90c7ffb655d585a6b9d5b1cab19834b338f7565eb95b086f3a45edfabab8cb35e6efb6b7f5847728b3e9fd6eb77512ed7076263bdcfcffb6b35d930e5afc7a9e984887329b9b7568fd6fff9fe44d3a5c31e500c8a6e3b6904eed5e119972a8e2599873a21cd8adbbd68efb9a4ab16cf631cd547f0de19e31114fea5d592b962e3c487c4a2aa573e261a55e52291e243ee5ed5b7b9f0b872e70108303171cfeffbfbce90606dc30c40d574c3720f9ff8de3269bc57b13282d5f5faceef9e8d5e4e56d13dcd715eb525d1df76c5b67166ff3bb576fef9be5ebc981b617cb6697e317bbdfcdb6583cc57a1775d689db9e0da5378acdd80623a61adaa881033520fdd6b3f87839f1cea6b756b9bb7a5996bf48550e60c407aea2a11d74a832c58428236ffbe0e3091393911b9b2f2a04010d22061a668090035706082942c8b1c6181bc882020f60e2c956c20fae3787ee9e80047ec091061a5c4c0086175600a3829720a013ac80f08106196071050c0f70c00b2ea83c50c25b108ac811c71856d2202d48010ac07cd120036d8d0d7481812c2840c5143920e000aa1502d02508e8670c31ba08c30265aebce1c618626c808b2c2eb084123610400612f8b1461a595c000b08cc90b4f54f158d881f77d821c7175c5c6185049cd80187ad552b80f9d2e5a70a145347233286185f1431c40e336cbd02007eac548162162152fa3bec18430c0e747185151298c2091e1030431800fc4481628e60a773442bfd2077d8110707bee8828b2bac98c2091e7640000e33d4a10a03c684279b20816041c148110f28d1e1061bbc74e192c0c1861752037006996941c6029a40b215dc40517a2273226302f3b26e86c336213b334e66700620644ab00e6c3898d9004b52d200cb00e7822347664c2523448a988870306403214a72341c9b9b1a9baca686866606fbe7008a39dad56d3dd99aa76beb82018a24a010028af7c4278c57dcd7979bf3bf0b1c0a11a0f8000ad33f8ec2834f5178b098279478628c27b6f8fff78586d9b6edcbcf951a0e9e206addfdbeb9f5c47d9fd09c104467a7ae8b8371420c27aa78ddee37e38e7f9ca001236dbd4127bc7c77b7274e94e00412ec72d5fdc748f08ff9f18ff52102ec0e26f2f8ffb2c329ecbaaeb4495992e5588a655882e5577a655772654992e4488a644882e4477a644772643992e3388a633882e3377a633772632992e2288a622882e2277a622772621992e1188a611882e1177a611772610992e0088a600882e0077a60077260f991dff8895ff881dff7795ff7715fe991dee8895ee881dee7795ee7715ed991ddd8895dd881ddd7795dd7715dc991dcc8895cc881dcc7795cc7711c12d7dd8de56a9fbc2c35cc971cd429e7e40276010b0063540e2a4700ff181fffd81eff981e226042096c32917432a10213404cf03031c279623307759ed87cd5cd629c73eae057ddece98c12254a084bb040108c62c244cc3f3602116cc05ce2b544001ef775b366776599b204f8bf6d4b74b004126d09243a9887077727fc016a88131e43d205032b58090cb8796e1bbb8ddb7939770bb066f785c231ca72b9e9d6bc55f1b75d555a8ca6c41232e6d0165085b68028c820038be31ff3c03f06c73ff6c66b0b58690b0083b9f18fb541c6df8c918416ffefe126b8955b39c5d650e33f0d34ce30e31f2b830c9d935eb3d0de56b6cedfd6bab22d563e4fdd62b9d022141fc2dbdb5adf0e45c70986829b6027786f5575c251706b7d55ef66a1e8b4d6f794b2395545c1f8ddec932718f576977b9e27de508cd269adef09efbc5837b32bab75b93b6fcb5df56433cb7d7f70516b7d71ce98bff83c5fefea7277e55c84d6fabaab910878bfae93cd41e7bbb22e568ffe51db1fddf229af14e8681f6da0224cf0dfaeb928e3deba5c0c8508a73052661541c6e334701062f3bba6dba89559aa4d4c9a51fc3a716f5fbc21e52ce79717bbf58c056fbde52beaf5aead8bc542f5970375bd5f0eb499a61064fe3b23cc5f8dd9de66b773d647ebfd722e7aff6c2aef2d76af5ee8c9cd2ae61d6f7de5186fab9e57bb0c16651e50e6fd7f9d5337c2fbe55c5eac9bab704ed45f6dcef2470d6e001105102c204c0002f59bce49e7040404063fe8f13f027e333edaf90724decc7dbabbe9d6a5758ff6d17c20800f447a988214cf55cf574e8c3a371db13b65a49c45e53aa70dd55d2b227cae2eb6b5e9d71673c22d47b959e38e777f71a0cda2b9ddd26e51d93dc481542a956a47a57a7757bdbbeb96a3aa57faee9e55abea1f1b438c303030fe7f10d56305c012f0c41150582beef9685557cd595056f7c5ea8af98bdf1569bbf0fdc5b66ec6db88a33f5b73a02954f6ea1261dd66d344592ed7678c0d05e8eee6f237bbfb5d6d88f26abded6669d5bf05b4c8ae90409707644c6c48afab08e316e76c179c9c0db7bc672b38395bbb5b2d168ba7196f578c9b59abb4ddea2beb60ff98d0632576c1bf08340360b179690400a3d53ad7bebeb9e7367337cd2c0ce544caac259807eb2065d69227634eecba53fc048f39bbbb7595bb5be9fa6e16868505b8c0b6d01af87f2c9019ecf8d5bbbaf9496ff1ee6e9ed193d4ed48aae76458b29d47bc3dcf0e3bc1dd3d7756ef7a2426cd5d707ff709aba2f50ae7447ab369bb45b3417af3de3be6847bd472bd4c8e5c8f35314627ddf08f4d1c42cbd73d256900d84c2293c2a49bdf700aa742e8028316d80c61b75830e400030c30bc9c932a525ee8e3053e5e40437b018c77b70af5049b7a3fe92ad40b4ebcd083deedaa62a54829920b2470210ecd850afceba8d88ccd95de5a50d05b731f17aab8e0c1d000ba1022c3a1a1767565bca5bbd571665f11c8b0771142726808ebbdf5c6e4048c52d97a7eb33e5af57ce5edeeea725bf8ed5bb3fcd459380b163169dfbad94bc0785bb556db5dbd5c6d5f9d13de9dcd56f076b2727b76d7eac51c69bf6dbab6ce7d84d55307753a577dab7cab2a67f5b5cdab74b37076dfd5bb8d36bbb2e9cebb2a5ad9746df5f064a2ed9e30ce59ce1411cfb97ad723d65ebd2adf795d1cf322fcf216894fc1db4ebbe2cc850ba99a75718cbeba75e10d85b7f31cc29bd6e94c7a2bb34e186f7daf7a5eb5729622fee2d7d562f3a9e38dca4f2bef95b9591928ddada11f4ed4f5de406fca897c5a0ea437cd50ab8e55cf2b0ef4839ba4b9633497bb5f5c20f70437e5829afbb5f8093fc13a24601409d86c718c22019f3036c37cd1dc6c4c1e3a27f31fcbc06318f8c7b4f87777ad5586655755d5eafd75f1777715cbae625443907899e14d5e7478931724dee4a5016ff2c2813779b1e34d5e44f0262f2dd0c0641a027d6d08a4d786c8e1b52192786d082a5e1b2203af0d61c66b43c0f1da101f786d883f8e0c49a2df94a4bf290901de94c486372501c2742447d380b0e3352052f05a999cd7ca70f05a19115e2b03be56a6e7b53228bc564685d7ca8841f2434c64ca788d4c1baf91d9e335322a782d069ad76238f25a0c22fc3f9122478c945abca90ce34d251c6f2afb7853c9823799376f324d6f3293bcc974f22653ca9b4c2d6f32d33799ef9b4c19fedf880647307882c69b9e7ce04d4ff8781347f326aec89b38fc26ee7b1377e5bfc80558d3c0c8101b222da037b5d037b55a6f6ac9f0a6d60f6f6a39f1a616176f6addf1a6160ade34c6e64d634078d318f14d63aabc698c97378d297ad318d79bc69079d3181bde348687378d19e24d639aa8d1404b0bde3464f3a621226f1ae2e04d43ddff0b19f2426e72307a2d0732afe570c36b3994792d07245ecb218ad77290c06b3960f1ff432e780e3af85a97f25a0f7aada3af75185eeb4114c921f23447842c59e14d4bf89b96b8f0a62534bc69090f6f5aa280372d89e24d4bac78d3922cdeb4648d372d09c19b9690e04d4b04f97fb38a77cb71c4a0e05f63418f530a20ff6bfcbf0aafb1b06a65d60c0c29dccaa9ea68b71887f5682b1129bd5badd57dbbc9eaf98887dcba9d741bb16c667d3d54a1ad4348cc014f620d08c077581450b86e9513b71814ff2fc3135f471118a5a2d6efe02225ff63d42fd4a0be8bb2506f6597a80bb13d85fc662a3d5d5b9c68d5f3153548ef9eb160e20d4fded07692fcd905ffefc26b5ae8cc47ef0038d44857d8a8a126f82f62868c097a64e8e55c0be6003ea42a5a59d82e86c2e114bef2ff2bbc964fff2d57379555cf577436a30242873f833e6f7d662e7dc459159b58aa6879c2d596c58776cb8188b8a0d0ca59f67689a6b4b0f66e87b60211d8209f99a0ada00453719866152585dbcdaa5e75b32acd7205c8f0252b34ff3554bc5de3285170eaf619923abc1325cab68bf4ceba06e6cb6b1e00a21f9f1ea11e1fcc8391f4daa3c71eafed31e4b53db2fcbf06ff509a3c084cfebf1cc192d74600e5b511e0f0da08bc786d0478bca687f69a1ee36b7a70794d0fd66b7af4f09a1e61fc636580283df6830fff580fff5802fe311efeb11d7478d3d4ecba4acd7f2c877f0c01ff7f83e100a4c3108bbb56f4eeb6bc3d63d96f77e51552952d56b40084d1bcdce10587ff2285d5ff035df18c4cb3ef977361f1b7cd2b2155ff39ca5a72982e2db42b3b54b4f61956e0a2c7ff672e1a972a563dbf5c925c171d5ca86ce8eabe727029616d6cd9824a19da16a1ff6db46a5b2ee8dddd36d1e941f0d86c8f788b42ef99f571b7906b6825c46ea38da5c5898696e835b7da2d9a963aacf45776b3ebca5a3a4841059fb62ef7c5a8ccdddd425f8d56ed6ebd24cc6b594ef0ff1abbe11fb3013bc07f77b7de8558100223948210f9d84c55aa556fd7678bc9ef7a2d680acef3bea3ac45ff206dddd620c30a404d74eeee16589d37dbdf15c5eabaeaffff58972c270069d17b0c86c27d2b78af36e3be59ae50765d59cbe280370db76efb767658a997218ce271b91516cd397ae55c4cd3345397ab52b55beb75a55a5b59d5ea3dd5edf4477795ca345369abd5c3894c73bfd94d97e09ef193265764a0c913fca409141968f28427bbaefc6e31e9faa65697affd45b7de466b51cb552f9b577d6f35dd5c5829528a07894f314dbd91386a9aba5d5148a5744ea9144fbab9709e110f2bf5629a9d9166b95a956a0c4b6b3d68eeb922250f2229474841ea91426edb843c4ca0e1fbdb3281fc7f136efebfc86ba910a4ca7ceb72317fd7a3be62b4b5b2a9f3b7d44deb725d3d8a06fec5ae1c28bf998a90e66994273c78683c11e0d981a78727846db3562e546b7da1ec010588ede4aba373cd2dd4de6a6b7d4fd4b9b7aa3a7b74cb51a4cc82a2516cc261066152f9ed6cd72c275edbcd522947502a5112fd7962fe9e278beaa0a76d94573af9b415bd469ea191af4672ffdb2b1fb9457ae337f76cdb751515ad2b97bb76179b9ef0d6eb08c86f5de784f5da552add72742cf3dfd771f5ee17951f3c4af9774cf2b8cde3ffbf38c7f72da2175b6c4244fa17bbfc131ded364441a8c49f2dfe768c551e8a1a180638800eabbc87bb2deceeb767d5dd479cc53ddb2acdadae8199f6a1f1ffaf8b3fd9b47c3c689f94f7e94c3c1f3c2add1edd139dab23faed5d592b9613ef6cf8c5babbc5dd5636cf13ef74ae0e8d2b80c6f1fc6fe78b7dd774655b481beb5766f12234e3edd5e6276c3cc980f604ccffc95fac59fe6e29d0362cb4cdcbb96e168ba7dbc5afcc7af3bba62ebdddd5bbf3c78e1ada0e16ffbf5fdbe9f27f6ef9cd544e2d7df5ba2eb5c55d1da47fb29b85f4eeaed4aae75556bdedeea83c503aa084febfdde035d4490cc7282764b870eba48acd49d2d671dba33959fd3b11fa3cc509f7ff9bce539ae4f12fa435d1c0ffa67f4c33dd46a6a9dfae6a75bdbb4b55d4aefa676dd289341d29feb7beeab4746efeffdff83f593999a0315901933134265e3021a331398189065a097ffc7f10364fbd6356d9baebc4e6b9e59559e7897bcf2d2023de52216596cefb8a4a1586d44a709540e54b28fdd6ba484063cbe2e3a5edfba591200409575ee7849700a22dd1025d72fe73d7dd507a96b45cb8bfabcbf3daa38de08436c2ea7fd339d96db4f6bd5fa717e7cd62d40bd559f5bc3a8d70d23dda0837ff4522cc1142164d042d5e8426587dcda2894083268294edc5ba791389f021b0f12194d14248613b7bc64768180178069c056b20d851f31a08718040c3ab41a8261d9bbd4947ca2c21a14def2698ca0781681ff4f18110da072ded03d0092e6a57a1cd83254af6505287921b94fc28c11df0a175504607337480ea60840e70f07210493ed060830c9460704222c2051d1c51a2b13e30b9fccd4a8c80a2074590f8d1fb011131f486905ea75215b5ebaae7151682945920e4742aceaa8adab5a888b31be07cdc4d6762e3bd9cd7e8bcdd130daaf4ee2226335d6f92791cd6a9dcbcd954f5226d9df7200c0cdea002dbacdc963078238bffefdbc888d9d756560dc1083044c87b61c70d3dcf8a6161dd3a45f3a95a210c982f2a04c04b172e5b8886b4a420140494050b0a00f8b97282952a54329f6c4a0f94d7c298e3353188666810f25ed03143cf73176056d0f1ffafd691275fd4beb9abd8dcddadcf71f39fc9b1bd47ec7c208b23f3c01b2a38def877396a8623a896a9f7cb8b9c48e08893254798b071848912474ac0e3dfa7bbdb11122870840425fedb1ff76db7b0accb0a8be6970369965fc1b25b5887aab0d1e26ebb85b566d66773a2beb795970355e19ca8955d22cd818e8c70f39fadf19f5da14605f4665917d07f56c6f734feb32bd0f86e88957ad9ff5999ffec0c33ac94b1ff333234bb7661c7508358b6e73f13230ba375a9ff19187afdcf3ab0590ea47ffe330e6c37edd1bb5dd5ada978a4adbf00bd7872036267c57bdf2bbb5d708172760acbba80482fff7ffac7e238e24114eb9bdb0c65770cb4b359ec3ec25965773f555c0630f03aa7ee71c9f92d7f44c9069ee3d27161a548ff991659fc6717c82cf0ef7d7aa72be7d25d2b6fcf1bcbdbd3e615d1767916fdb35ef155d89caeed2add44db682dda58d8bca6ab7601807bb53dffd904b0c8acdc5d28b0f09f5d6185f7e90a806215190538efb551c8cafc6754fc6713786d144ed0ecbaf2c924f0bab9f59f4540afae8b15facf2030c5fff7144fbab9789d9169729d91697246291d94f79966d7ecdaa56b76ed52d4baacb42e5587113bd2e5ae5be575b3d04bf329af9b5bfae7a5f914d2eb5ca42b0ce7bdb6185074e955ff00b178bb358bb7dee74aa5bc4f8332df01b0dd7da5f3e279f9bc805e422fa297d1cb7f2604e9c5343b23d3cc82f8cfca0031650828e887c807680b00545e7ab2604732d0d2ddadeb3aa776ff673ffcff4de6c3ffe3d85c8041992f61cabf4003111890b0f1420cf1066001090a0413febfc9ff1be002222670448b234784808a20421322d589ac1ecb7fcf11ada66d570cc5c324e076b31c8e12026e373b47943a860842e8b9fc9b70c4881d47dca793ae7473e96baba7afad5cd4ae6c8bb516a183892345c0fc1311c1fff7ad797b8448f87fc2a78e0c09e2c8100e54fd881016d1bb87724e7024c7fb22ca14b5ab0d05e8db7d1db901d3da6f17d3df8df516181738fcff6e0571200ccb6b8bc12e5771d6d745e1e0e0e0e4b4790adedefd7add15f71ca9d18300476a4e474a7afc7f76c3927087922969001fe4b7676103092f80239914af3a929d8e388231f11b1c7941da232fc57ae4a5888fdb1523e9b6f4c7d16e694a175a302854945414ac83a4d7d3ab6e2ca6e906bdeac68231c62d18016024bdaa7691deaa359858820688a2283c4eac94b210640e2c4814ffd80ca48fff4c861a76cb81368b0fd51088fecf0ef09fd1f09f19e0b54078c4d0e347445b4c66a7b0d93546b3790fb942d9ddd9ad128661188621088220088220087edff77ddff77d9fe7799ee7799ee7755dd7755dd7751de7711ee7711ee7711ee7711ee7715e5996655996655992244992244992e4388ee3388ee3388aa2288aa2288a621886611886611882200882200882e0f77ddff77ddff7799ee7799ee7795ed7755dd7751dc7711cc7711cc775655996655996654992244992244992e3388ee3388ee3288aa2288aa2288a611886611886610882200882200882dff77ddff77ddfe7799ee7799ee7795dd7755dd7751dd795e42886e0e77559583fff8ffa67bd4682f3ffddfd245db77077abf09ac281f64a45b32edee588b37bca6e81bb56fe33195edeb63a4ff9cf62d022c481c8fc7f96f49fc1a0e595b170a0ffec85ffcc85ff6c0002c85da755aae4292cd7a7bb1ca8b73dae2b4d79dbb31aad54f68a66577f5d287efbba5f99c56ceead4ba7efada2b9fdd9aeeb45f1ea755714e7d596379ad9adef0ea568ed387bfd6748ffd99151982a2afc0ca9a854a112e4035445a525488b962aaa2a58b65009caa2f2d293c5347bda2d86136dd6a5791632c5daef4f1167f5cf6ed7a2b68a4f08dc7897a33d78db5a08cafc6745eabfcee9dfc59ac8438aefeef64255bde7d6dbe67665ad6eda578d59ae76e3ceeaf908f32bfd3f93f29f9990a2a2379bdf6ce53f8bc2b35dbdf9db7ab9a9f785014311f43e3c6672d7e90645170858e06c7f393ba46ab5b2aad5cb2e0c3db7df5103e9755b6e8ab0238aff3b94e0fcf7d73e30c88a925ea7eaee6eb17be57d2ed2eb5c1f38c0bf69aa5a3dc8e73f0bc17fd675aba49c657beab86204b78e247430f173ace07fe83ffbba7fcde1450e25be488e3c72ebc9eb7dbb4b0b2eda1dafde1ed3fccfbcac2b290981a60ccd0d722089a3070ffc84f13e385eff62e85d793c8355703c1cff8fc4fd3f91d66b6f24757753bd01c60d40dca0c10df6853c23d34cad7abe52d4db23ae59ce5395bb52b15cadf7b9d8f8e27dae14e95ae38c2194b3537495dcee37a72df7d13fa6d9811a66acadac9a01e593e2f9cf9a7ca6737a56ea45b36d8f4fdf45f91d4a834443028f8651efd19bb5df9f77ed728602b43384f2196f86149bc5d90ca4ffdfba19e6bff63e57198294c1c4ffd63346619563a4fdea7b8ac7a5ede9b81c6d203204793210a09121a5a8c8d5310a8853712a8f0ba7e2541d97beb5b06c4fdad72c7b5be943447af5e9b8705c4c73d5f32a9522451eefdbf2f696fb6014e9e2014597182978b16ccf66b9961a320c41fe7fabf8ecad4b6524a6dd6c7edbcd5add9dd716f33f761bb8713b459c0de13fc3ff1908af858146f641185cfc3f57db9f17db6af51015b5abfb0e9966ba354fbdcf9552b9bb8594593c4899b57b4691328bcd441d88a3f7cc9aa60a7b820352fcaf504e95cb559a5d5de839a5bb5b7f5756c6c1ff631bfc6718201939a0a4bb9b86f24514adcaddefaa6271577d926e23ed8b1df676adb45b0c7fd5f627cb2b0bf51d000ee48513ab9e57ab9e571b28f3ffba7cd531e7afb9bbbb8db6dbdd8dcd5d0cf1dbb6317937dbd96dd4c564b7d16655e67f66ca8cbccedbedaf2cb4b7aaeaafdcea3db3291769fc6b5c0cbd06e0b8924af1b0f96d790babcb57299569eed57d55adae2aeaacfc660dd47a9f0b03576c967559e140f9cd543abbe677531113d4c5fb5c9955b19ca3aaceea605416485ebb809076019dffc75ac0020b20fdbf66811b0d0b22babbb15868582811e4b3902310ed8ab722862d44a5e7e55ce7ad85cd796b79393bb45b5887da9f16cbbde253a5c572affc632bc05400c8bfca34554359f660c00570a461421221b8e38b26dae0f982410d0c3713c8d12630c60ef88a16b2f60f2a9410e00355906084005882084107229e0f454840023b2548f2431231d27082ca0b6610d510258e57155b54c1fe7f087da7748af4eaa23d18a57f78d2cd45c7fb5c18e57dae533a86a51ac3d21478a5a0049b983473970395408500fe7f7b77af92df4c25bf998a6eb7bb775116d226b0feff637fb4452b9b770baf8ce5fd483adf8665f3a528d8db3c8d86d9bc118c2603ac0876e395c69fe9a1f4814d767343539ac1b0d720db3e7b2c859209d8db40a1f9ec310c9bc9ae60980d9661d84c4d0b1996613659065a30ac06b3f90c23b2cd643535a71c8c95b2aca40356c2b02c073b4186e13c0d56ca663686b190615876b325eb20c3b29a52868d20c3b09a0c4b01d300c366b21b0dd0ccd814c132c0300c6e66b023b09a0cc3b2191596957270c06c0896bac16896cc44c16cb2acd4cde46419a66344c40450ea8404917de9330660a599538926c3669ec607ac0eecb337994c8f3d56c2328c0fec266b8261194d96cd60d8873dc16eb021599665353e18932c2b651837b309d9e0a6048cc8110e3220309a6c03ac84cd609f096538072b7db6d63c3e311c663e040d602fa58b6c06abc14a3618116ca64c96dd98331839836559096743704e180d86d970a50e040ecb726a6e320cc3301b0c33b12c7b63a606c3c94a33469808990bc36676301c21197663836552b20fb20f320f667ee63123584d9661444aa69952b6419665580d5652319c2598109a0ca3c18a8c188661580719006a84e064187a33c426c352c06e306c26c34ad815cc83accc946442329b8c069bc1322c1392d994b0199a190c1bb119ec84e16043300c83827d90e5ccd86037252cc33013c36a32c89060a50ca329616526049bc93ec06666b2ac9495b032cb300eb21c0c07bb29651886999807598ecd0c56ba29611836622c49931b9e192734d80c86839592603838a6902f1d7c808d50c2b2ac26b3d99809034ec8150ccbb00cc3b09db7f9d6771904f3a34bfb980b1d7990c105893a1cb025d3c10dd131c76b09c18d4f018932760a798c1742028b228442e0414174b0e00796103ef8e3043a94702512499e94b90814231d44968c21e460221d180bc473102344dc82dfce403ed8399bc850732cc151986be2e408541f209c7808085883237fc40561fea4d9e1714986ff992aff5809feb57441610a323533e490d081241c9b9b9b9a9c9c1a1a21331ee0d8ccd0cc603084880c900837a79a9c1bb234c408561a62138021ef0c9119130d1b320891545324b3c129a18878403a202987cb105d42152193811dd06c2961353c19488a82858a264356ca2961d14941d21c336034a606821432598983999d34929cd0910482d00c18189942809913c8182069039c2e43900891640583d64dcf414112cf8b73c2c983c9066786088d98d2016e207353d266763e32782481d3448d196e0001a2482684468a66539650d85fa488e1029a538e959c126ac0949ad89431540089136228238727331049b1d4b0459210973a840c443c231805923610c9e4d8943539374566c69f13663cc8b16243e687c8d0cd950eaa58c9c1b9326448f354204983124acca9312f20529323a48a082b2c91947373e503d486249a19130d5693424d0e0d949a263d260871e130b9b9529363b301112a384b4a40381a20515202071934b939016929814ccecd66f311f9c61f219b21251b0e68cc1911674889099662836393537a428342899482d1743013024d061cce4d3a53568192e42627039c918c0f9010f0e6545a525a52f344529322252a344e683ec059525262a49bf12086a4ed0936a3ceec9466680420c20a09e0ed031c408616523ce009256a80c105a42e46dde9b9021815bc70d93224840500574cf23b9540c208b8d4051783f4a1071e26a4481081830d6c8e08030c269648a18a09a607180c1152b305165634a00926945800124714b1e5c4e4c93684108308620254853ef8c842c579c861555350726c9ad8418711a70d369c68c22c450d9008c9b9b151d20105a800b3751010007eac543102010730c09139420b3cc0014fc0d085cb282641522a838c3fb8a4a2883836355314c00a0824f143026c1080028c30228720a014142643b040b215648094fcc07c647994f0c8e8a0990373235b235303278d2168646564636458cc3c20135362015b72e3018d12221b641a64186048b40b688e641a662a15c984d0e464383737998d0d4d56c26630ace6891899e960e60249251c924a586a9a60cce604644c4b24d1d00cb129c10d322524ba9206439480a2a686a412169c0c72942491210927002515663e10f2d60cb9b17243d6e4cc40499243d381a49b2a929080218333ce145182217224d10c9244338403359286bc225c2009274991cc060acd139a1e68c040c80640c450ba21c94808464298d9d19edc24d1068981c6c90d69c333636486e74689a4992cdd939a9c9a28926684d470504209e966b0d290122ac70a8d139b00d470509353c3c210244390e024c1c9c02600332c88a18683192962a0f1228904164a2cac22c1839239c4488d56c26676667c4a424432a8c96cbad874600344834111ac46c80c4d69c8cccc4c36633373338393a3a43463b3c5e68811a11ccda6c6069bb12981a52725ec6683990ec8e080400345529128c86835a50e6ea8c4509223061154f80769011e6db05106195f78114a74e4a873e98d9bfbb4d6ba5c80f64650fdd23cea4ed5ea372651a668d8712039e6ae14f5282291ea940333ca7d5c0e476f1fb1bdb0d31dc86591e45074e456a91677a998668bbbfa4aa600cedb5bf5be2f454110ed46d58814243b4e1d3db4f3469db95d4409869d2aaa59dc2abaf74e89c8dca83d527b2958967be73c840e51b224514e153bcfdb9a144214bbad725e0aa2dc37a22268250b22cda5f6d24c827a8f9d279259b232219a8e5f587adfd6a4e87d231019fdca9114c90fd52058ee1f50550d3f4ed4e3d87d28e8893da829990ffa2bb991cc2a47822097bd4e4ad6033a721ca7b74a66f5fb4a515d8521fac2639a67968054d4a9ca85e457962aa8eecd4316c9adc1d053c9f4e3c230efa0a6fa1bc58daaa517eeb02b75e842cda5a93a761f97aa602ae6b0d16e93590d450d869bfb4004ec746b502d552f2d3f0f043d1cc04da6e4a8aaa80886db1b6f20c730dd24377e5b0d3914ec523f9801321bb8141cd30e24bb318b28d99135a86017925d4a826039ee0e140fb0bbae0bc931ec40310d47b25bbddba5e123bb5cee9dee1155c32fcdab279901c0912c49d053b747a6629a925901b69a51f053c9104c43521cbf95696604e052b44341b5ec38920bcbafb392cd008aa858966a088eaad6bad33284212792df0e4735ed38f04b63e8ca30674fdc25a93bb5dca34f4606cda017aa2557aaba534770674969178e5b0d4b35eb120dbb7410b4fc44520c771ae68ca2626e01daa1614e534fe45230f4becc0292ebf248761c5a86651e41dd0513247bba2c554fe5c650fdb69787b04034f7a1610635876a321db97095da2d677d4c73b79c4d53c056d085e8a7869b2cbb91ebf41e572afe9a662add5c5e771b8949f3ca34a5602a1041516f8ed35987e4deea470462807060de9faa9269b7d1712c7397821daaa48a861ec76955cdbae4540c05dda87639d4a4d6a9fa6d52ad829d4014c9310d39ae444131d51eba0533813a8adc97bfcc795e48e6f2fb82fd41725c597ea046510e1453b03bb11288df1e7538aae298bf91fcf6ca3453284682f21349d20bc70e1443348fe1ca3483303fc04e245115e5ca328b25b73377dd2aa6d94706c98c96a3a873f7a9de0e3b3ed490d35de7895c198e9f9af7d81e28a26929e67497aaf8852bd34c0d617a683424d1d203cb510cd35414b911885a15d351e4d29d3faf143d15278292243b71a3a3985550832368050b011872eaa8ee5c6635e4d28e5ba552dee75285a1b751dea77f7878d2cd054303cb630c430ee54a72cca2f6c64f7378e8d4db2a9ac992e4c84ecde3ca34370682b4144b50e5526ee74fed3a75659a2917760758966348a2e31e3ff1134b6d479992695a8a63dee507d05144c99d3ff523bd51cc641da857762a48a66329a22a397e74749cd7699553bfacea1124bd39400f4d45f15353b5e4ba727772ec31443bb50b3dee4bc38d72ab54910bdd54884ae0e1b038b4ce5be534e7ed1415cb12f500da8d5db7cb14fc72f8a99c0887f7811a2db90f0c454e04d337c0eca5fb03751e4514dc29ba32cd1416cc8d8f044111fc4a552df51647340bd606a9352a8e6319929f0876a3b832cd540a63231dc1b223bd52835d078e5dd8626b905d97a2de16334a6e95443d35424d7e5df6763986991cc9343e0f15c3b0f44a910c49526734d2922bb9fd75e5d8a164a87a63b0333639969953b3163b7244d5d40cdd7ddde640f52b399dd53497e1a56257769c8a6611cd9c5792a14591e4ba34832a87865cc9a9d818dff7796309963bcde326b51663f452522d4130dca1ba3397869135d88129a7aadbe3c252d46088398b6197a2a958722557a61d185532d42aea8d99d469e7911be3001a96645635a7399203d5bdbfd021f86d704cc351ed3c311dc1605ea05caab5988ea9d7851cb8f306d20ee5403197e02eb5e89525c7bad061b93fb1fb4aefcbddfe5015c605098a2088aa59d5e557e62eaf4c73bf2f54b5eaae96696e01723b44d3512d514f8fa828a656980648142ccb4c7ae416cb12edd40ca45bab796f8d76a5ee464d6200ed465454bd74733a553557c28069a176fb53c1fc65aedca3a8ee2c462ff4ba3224c7f24bc11c7a2bd34ce9705a505c0a6c8bb5aa36db72bdaa016017d06929e6cefb48102c3f10052d80829c983d30f5b4dedd087a2bd34ca552fc6d7f50443cee7e7f58dcb592eed69069f2603360587c9bfc38b1d360e871aab8b7ce290a7645f96951ab29a8d52fcda8b8add05a4dbf0ceeee53530f25b5601518d530a35ce7a1e306cb700457a69952f1b0522f61b02a3a0e0dd1b0fbbe2e875e4ae69569bedcd73453a6c9e2ae95974b64f2b4300a80e588a2a5086e32e5c2911bada0b6a07e785a39cb9b592ba6d9eef7cdacea6254741c07e62f2ccbd4dbaab8d509a0de9776a8a8d150f5f61e5509a01feaa9e2a8963993e338aa1120bf91444b4f2d49317761ba21f095e0a8bf0ecda9463d90dc537879f4c651e5f498a2597f5b0a11cde5c8896198f397414e3f004c53ce233b500dbb8ed3e4e7004fd4dc0ec7efeb3aef53d306747becb6979279876458766814aa87ee942cb72653556f140a2efc54b11cd33224c92ce62742728be588eaf0cb5f1e45274255fdca2edc68a839b50b731339253f6f8363f985e547924c78fb2bc34ca29c2649315ca224734976ead87d192c4190019d178ededebbdc59cde8572a817e5cd995a55772dadb5a25175096ea58867a6f0f0441524ca24c495473bb43d591ec40245012f5c05d8aa0a76eb2f3c62340ed71e907ea4e0553345515e071a406454fedd0112449d40815dc1c2aa6e00ec5d213c9b088f44b37c9815a454734fc3411281aa69ca88adfdeba234b7008719719edd28e54b93477fa1302dc20b8f7f6c2b1e3c45c7a41a8fb23b98f1c39adc1124ccba0aa188ea2eec01055bf70044214b5f7852a0992e948923fa41e888ee987e651143327fa30a22099517093b9fc48efeb7ae0b4f634da897b4c3fb4cc5c02b83c72e1988ea32e3f71045395c678187349a63ae54872971d99b91d341776204a6e7267aecb21a703ba4b35cd689aa69be45094cc8153391d76e94ebb5245432f4ca51802c62e7b397f7a9729c8a921b84ae94c41f59c5a2f22ccb6582b8f697615170c8790e37628921e995570043b72659aa96e9a40d80de856c5aecb5c89769ee869bd32cd1769b7a69932cdd414540f8f699a66374d77bf2b0f8bd9106a4d921da8e68ed329a8a235809eea7d5a54396fcc6ab7c10384397fa8973f708f652a861f0d9b545175ec5450fcc630d4292f3c00c00c806a2f7bde47925d9772a1160b907a6906d3b2fc4830f444fdad4c93bf2a13300284e0a8456fef9d72a1063d74659a3cd80c9eaac18da6e3f8a9a0087ea30c1b0d4794ec36aaa25fde69b7324dd3ace283c59082797768b93559a2a85655321cd989602ed1ac414e1c552c692cc31144c570f4c24f04b586a11b49352dbd52cd1c987e2a6f552f945c5aa6a2288629e771a9565de0c2346fb00b472e55d18c0ec0db5f888a99133d115553710b80033559963a25c5910bc7dd421e5135e5c4105541b1fcf26b2cb9ed6950043f521d55120955c11205435145457573e2d147aaa23a7eeae7711efa85469dca7169f6ba14dde3dea076ed302dbbae1443141df3565f8ffcb616cb52dd592543ddbd31fd74b7c32c961f878aae1a82694e439144c76fa76376276e9daa29ba49f2035b6a97aa5ede64877629d9712e14f3a741758f3a1439b0dd59dc79875bcddda8825dca42bbf1db5d3a96bad4dc9859711cb55a72642e51bd7529864b3b9014cb2eedc22e4c459405aeeb542d7efad3a9da657205354776ea06c72f1539305c895d06d53173e9977623f915715d1e3f6e7b61aa869ed765d5533339a22a9a663d8e9cdeba24c3718b6249925c596a2ed4225966ae44f53886394547d10b4950454b314dc5af44d58c8aa89a51358f9a43f318a65ca9a6a2faa9a947e67324c59d725e98a6a8bad55135e66fd45f1ec772d41e07922b907a2c394f6f11d4e8eed430e1e6bafd89990cd5904347307924bf2f7b5fea959d9abb2f62198e28a8553115c59dcb5105757b65ee420fec34f9796a004a5254b7e7811c198ea897bd6cafe3c0720c43afebbc32ecc2a5ea97d58f54cb5454d34fe432661104393124434e7761ba65e7b2144772eb4f7f59244ac12d6aad8225f991e1570e95e4f8653197e5e642950bb584a1576e5093e9e63627a6307e6157a268d7ed516b5028f536c7a1a2eeca6ea7dc17c4716a497a5acd9f2786db03814094445355ecc4740c5351fcb2885af5ba30cc5c487a2aaa6219d15497fb0bb398aa1c3aa2906a75dc9c06f52e3db2e43c00841adda8c8ed100535d8a93f5dce68a9470e54c93145afa8dd88e6114cb3a837eae513c632ef5ce6bdbf114db76845ecc412453d322c37a98661958c96dfe7951f89961e2a7a1d1570a35d464794e44a5daa3e2529a6e947aa1cd965fde529e8a837886a508f1ce9a53d6a2a867aab63387a6929825274f77522f7899e97c35035a10b51af2b515254bf11143b6e659aed6655e9365299a669aa543d29944cb972aba8176e51cd5faaaa5cf5ae6cabf74441d532fc40af2c735a8edfc8e379680ed372935fa73f95cc29285ae454f1cb69f86d4e4d556e659a2ad34c79276a30f4bcb24c3b1145d3bd324d124a16e7aa2257a5ba21c30d6ead7a6249861c08967b659a2a70d41cb8c172ebb0db1a04396ff589e41876293aa65e8876245a862bd33ce26ed1167ee0377aa338e6b1fbc6cded9569ba6f0745dd6d954373996e8fdc65ba32bf101c49aee43a11d5259872dfca3455bacd2aae4d13c84b511255bf4e6b4fec546ed55d2d95cb559569a67a5047598b694ae9b84c7aa0aa4b9d77e8e50dae4cd3cdab54659a29d37c59aa696e1777c1af8b55020f144e771a55bb8ef3cabd433245ba4ae051b5ab69ba6f8b7be28deae87921f7e59c8e69eaad4cf3754dd334a36c642972e2dea8ea892289ee71c555e64edba0d68a699a666ff172075543cf2b43d51bc75205d96cb455a6d9ae226aa364b93b2d8e994b3bb02457a6e9eed649b9bd3425d3fc8deae87d61b932cdaef7eeaa771799664a8b69aa585cb7d95d659ede44d55dae4ac5810e93933702934e4542091e8ba7aaedaa549d1831f45ae9ee2309aad392974a35c208580411421001abaf0b844eb5572a251fa8c4d06be2819b5f264a36e880030e9a6cc041a58ba8641169d7991a640a19020292480000007311002038241a8b062432b9704ad6031480015cb264ae4e1b8ba47190839431c618430c010000428000c08ccd940101f1fbb2be0ff4f39af880d3921e80bd4efc45135fdf4fc4a586b8b7c4255071994d20d5049d5184f95f8d367f76bd4f1fb40b4aef96697cf556c8177c8a57a99e8117799258660be20e872aafd89028f26d24276581eeebd0937c9c7ed3e3deea716f7adc5b3dee4d8f736b8f8b1decb52d00c77895ba43bf0c31f0dd4afea459e7ebb1235019e49c84125cbfee2ba9988a3888c1aeda0503c94d67777f36cb03199a7e6a086dc5022d0ed06635d55ac0500f25d73380f26e1c8aa5922e6f7095b87db9a6076df87a0035f73dfef8463fbea160f5a1fba9c361050eb9cff178b67dfb44cb6e978fbd249844c2b57caef105a2aed71dd38277fd8cb5895f445879f61afea0c43b7b1340130ead9859dc97dae7e10ab58ad13a508481d2bf61eb15b29de10cc76ab90171f2a7a43ad0a35e37886cd371637a7ae72df54f34707796af1fa3085595b0eab3f9283d01b70a71b512688aab7420dc63ddb3cb81d1788b618aa2fe870b5f0c6019e2fe79a969b110153de0ce2832ff08ec4700784b661ae0bbd96eadc224d8348ad2925e5167f99cb649643633402886aab38ccb714e63890e3c5b429fb871f9f3b10eabf87a06ce159a7a2e8390930ce9ac15c4ecb00cb36f56fc326eb7995a117760753390cf328d3a1ed89041459c151e2b15d8d893241c3b62ff77f77fb1ffbbf77f582fdd8a0fbed614361052b2dfe64635dddce83b15bbbd9d0eaa5d917fc64b025da591407812e27baffc57da97caff5aaaa336d151684de0064aff0d41ff823b7a314bea70b12c19cd98fa9ea82f5a89eb63e2621f5598f59b5e5cfbb9fa737fb9aef83972427d808316570ee5a36bee32ade0332104e91e498fa45c5fde8aee2bb2581e908613b3e54a3c428be400f3b6b085eafd3a450df91b7986141e2d8b8956f56941cddbcba3d5cadcb2e21066fe59596f49e58ff9c3b3875ca863f2e3845a8d71ccd6857f1842dbc9e3f69acf3c7439c31519f674750225001bb6e92e94e85902b4b78f90c8130d15020b9b987b873ba69a44d1d7b5753d74e1ee0eaaabe473637c091a132624df8d00cc3ae87fa83b16057d1164d505d9f03ff5ba5f51f00eea3acc7d5758dd1226899923374a0497f730a976bcb95e0cde9be8c5d69fd0d0f1694883cc54ae486221884e5cd322c5a13aa72ed5fe7bd1415866ff8008e82e89fe8ad15f51f4578cfe8aa2bf62f45714fd199611fa3b467f44d09f39fa3382feced11f11f487393a43828ecfd17111744c8e8e3d82ced2d13111746c8e8e8fa06372747c041d97a3e322e8981c1d1b41c79ea33324d1f149051d171b41c725d1f53a6018c199cb0705cf3a9a3d6cd70b0add62996ee2124aa9b4a4464ceccb790dc9b02b1fc5da00755af2ab2b4c8b67bf80fd3a55d0c25a2eb39dad716823b864e3b38bc0b175c672a951732dca0e268cbca9a58e1659773488cc761a8dde03f673ee72c84729d07e344b07eb1b9e0c3ce0085b8c7bb5681714bbd220ca1fb3b334f06f5012962b31dcca60298d4bf65bd300d00e000d7210f4cf788d307c870142b84cba8be222fa7fb528d778e36a395678660599acf0c60a62ad71e8d5a25ce18d15c45a894333472699f3462662c571e8d8a28ce18d38c42af68f182413c327714863ec1fb121994c3e89431a63ff2313c9c4f0491cd218fb470c9289e19338a431f68f182413c327714863ec1fb121994c3e89411ab1712b73049ac927714863fc1fc496238667e29089d857c6863432b915834063f8240e698cfd8f4c24131b9f64228dd8382b33310eeeda34ae16aacc97db8bbd2ee1d7327833f64b6c0d80d2cf26d5646c18b57dd0278488d43bb3f083d427ce3b3ca439e047a20f28da6a4523750622db3d102be8923c0c45b7c58dd6754560c0d22c395c7efe68191d53b074ed1a6924da32b905ba62f63e746e39334683ede9f06b5255e0bd13bd33ddd9c488ec7ff3f5645b3c3af3e91fe23d44a7b44371ce660b6989b8e720488b3d788f3e6a9235db80610c1c5a8d60cd153a1483ed33a4a739fc00d141ab02477e01150ec49c3e66b5bf5515a60b98b8ceae49568a5e2c4c151cd03d7fcfea746c2b9dcf1f2e33693e5be5944e15909b83f36aaebd0415c53cf141f4b059dafcd4e69f9d01015a6f74a71d901b30174e43aa3196200b890fff8b7bc2a4017e320d37d9636729ff911f02d50844d70c8cad6471d0118d0f901c13fea9c5dee2ea90ee8088c4011453b5a4bb4b63ab08028d3d0485d023ab3b4cc25cf4811d84428ab380d4ea3783eaa312030e821efc1d1f8e44c477080e7c22196062006ce5a5cd8585091fd99185ae85e131bb3c205255a0e397f21a7e62dfd087b550b272c8d6321883b1f5af24c0cb7dd4faa0e239842131037ac29322caa146252d7897014e420f5c14ff20563771c3c48e3c3d298303110f39a402d7d063ecbcb95a3bf52e4ba9ff3440039071320b0fe13ac22ce26dfeafcb4fec536751578721ed6edca08a0d0ad05722c3a6e180f385cb754fb93802a42936da0ad95116b7bce53e0087ac586c713b0adc0b24fd61d927c8ad71f40c51db0837c0a6239cbdc5db74887e30e90c5e87017a83a84f6cfb05bd05c6332dc502e81dc67629a3f4b5fa5fdb0c187e3f5e1c91976ad2cf202dce0c0e3d0e44eed026fe011d3b76cbe7d702442de20f3ce953563ff5cab899d6793a7254a6eabf649507dbbb5761026f28c7c2ec9ce389c978e36c910ffb5d17d719e60783130f8b1ff6eeebfd75b62deedf4e3d6447e0510e5d1ce09e5df6cd3e8aec17992bdec0d66c1957205706dd676b2ff2b041dbd327b3cccd52ccd1fee417c1897ad06fa42668764dbea2d951e04ef5037887a09cbf8485a602353e7ffa9978926932e0c787b577b392a3e7c4d70f79dd996bfe10c06c5a46a23d7c93c977b6d9eee9d5dc1a8fdceb5b863555b3e91b1cf8685fc5654293e9f54de50b383a630976ff147c308e4af72cd49ad6c345a648b18517a46aabf223bcffd910a40d597b00f742e773cb20f8d95fd563ee042e03fe1aa7e84c687aef4188634a990ced3eca906a297673c4c30104d80b61f2cbd22e770ccf04c083f4c22051e3e6d16dafa90c0982a26c5b4a99b6d8fcf22961b553782524ff52c45e8504ac461bd5e9912213fa329407f9b3dcef88669491510975920c4fa564c8f544433e535f344580f0065d0455a74b293b947ebf98b047c827ae08884e23510109e10e76583d2e2357c81ab885ed80fb4f0cf1967b4c982b21c60158de20d949a4d295efb6b3557e70d33a18af8454d1bb64fdfc339971c7dcfc3f1f15dc95de3b665862deb964fab72f0e3a745fb5577fa2358db16c5af4712178a0702f662ead693a2f8ab0e695a41cff296549937ea9ebaf368fdc90605133ea3085c46b438323c1d87453e3d80ef36f5b1d6ef0c3870568ffb64b53f3c4faec4fd95e0ff3aecfeff3ebfd8664aea247d12e8edf3987a135a091f393db307bf195be3cdfb168df7888b1349a89c76a5e5533e85b3223b4024a7dce5d5226e6878d7b70bf087e7c8b6fbcabeaaef377c6a82fcb7c9f00952ee160ce840002cbe477c6da1a6a34b2cc8418246328d3f2dcca59d68e6ea7a3fc2c70d2408470273a24a673a0825524e5097226529d455a8ce49340309533c11c36db48bf7dd031d31ef106efb2288c6e4da138af510e83bb9ed5b34fc96bac26bf018c4ae803fa22ab7d936fb8cbcd1a47ca5895bd33cc5d6e3c875f46f336cfe581692eb3e8f4825339b543cb34eccb705e256f34f74ad631dc2cbab494d3adc493cdc91e33ea8723c00abf177c7b2ccd4c47b5848d512277369954a2d380549a558fd5006e542b74d6bdf8ff5b03501d32000c232ac66d6e3c47674a685f559f6d7703b7969ebcc5874a362b9927c5d99ef4717aeef3daa6f142a6188947341d85d80219c127335df197a21969a87b485dda6386add49afd70ef5764a29d26f047df27e117fcd825437f4aa1e545da747b1b2da787ef736860561152a7b755d0c6e317f333694817d654fbb0a2a04943732a5c05ac655ac1da0c74758b5c1f8bdf06b2f8e5cb708c56fe3cc4ae54147b747443d8296005c57abb6c96dfe2ccf85637b4b771883e865c71a342ae04fe72064f0482965b609f22ebea996c90a60b6fa5a7b07cf44a4ecc2aa0eb117c78315e5e6b76f539148ef1005457aa74c492ce9b1ed1fc27db8cf3b3a66d0196f9fe03ba67a84f96384700e608e6a5c6534697b96e4ff1551a702c8292027c7184058ced4b1230617c76fbeb27699cde8bf3a6b1a69638803de1ae4e6dfeca707c2995f1fe8166f788cc6e487e98bd470ebb0ae15a25f07e73e79075995cc27d48a66fd40f7da7abb77753eee129f66cb7bac7a97993daea56e779d3142e2378690ed3e1e10a372c6ec4af1bac9a1fff190dfa1f25477fbe56681231cedbdffca9805ef0ec13f98f6dcdcf550684732717ad6d186997d539e85fe837e9ea377f3dab025567a83fd27b2bbce2cb10fc242b61a95968de677e797601c53f9e9c3363eabeafbfc731f236b8085da13fa5cda87cf325473e666c2616245b3a3543409b8fcd679ae95d7925a3e1d56472bdc37f3d2a61a0dd5e2d4e3ea0373c863723e10e4d02609051e550a884e24c093137f45e512745306b048fcd69edb5f7ba5cab0fb95f5b91741af3628f28e51ff0f55eee4a6ab2f2fe593d9b7298d7e83edab24ccc0530c918ad26797c235fae57fad902fe616d017705ca02ad8f426fa170b71c09a88324e0183041f589e395388e17fc86bc4c6c4a78d2be33841ee42c92f72384d231e673a3b8e998acbd3a749cd8a623b20277049b5ed8c0060673e79abcf1e31fcff7c45099ba99c2adcba3c924f2b98a16ccd7e97ce96cc8b7a61d9477008a5ebbc23fc8c01bb7b2fa20417228a6104691cfed97ad247f2009eb3fe6339302ed7028c53b934ab5e964ddf8969dbf161d752d6dea4b0b32346bdf753adf4bd0ddd41ea24a155082d463e8fa313ee0fa3f1b37644f690ba959da04faae11289ebb7cf0b584fed51570e95b22bf0e2523e4229861808e752094d19dcc43be5237f3b2efc1bcbdf1fed9948341ff641ecfcf8c0b679ecaa38e36dd776af358f52b5f10e51007e71ac916df1fea3e804343b7b18f352b68b813c0c71b2cef3783dddf1431dacd0094e08b853ff191a2e6d6e9bc00497d3d6664c2d9e28b9b30b6c8da457d8e3861c67f0bff2d8be23f15f9aa4702dfb81ed8f0654782e0e527a6cc60f07f4512b4cbdcd86ed4e7cdf164c4faad8904fc78a3d173c70ae8c97c7883c2d57374051ece968fd98c8f10a5db5936edcaccd55dbf86e7a35cdae712db36794e02f2c317d107cd859ab7a8be5b1e097fd67a53e2412483ab340f1dcca13f36ea4d84ae593267f33062f41fbdb16d7180332a2b9a8f8271f4f7e0c7918480ee4757d3dd84141b476770e42484bc2fa5a33f6679a0e67f546f206bcc0d08b3e522bba16517cb9005a4fddf6030582d946f2d5733fb3e3bb65740d2983d10e4824f3e1171402705c86c244437421f9617597eeedd25fea50637bbebe1b2ef808222053ea5efe15978979fe7c2a9ce5e2eff4a1b7ddc3a9d9643ceaeee7b0e92e0aab9cf1e483c1fc7911b70ef8c27579da34eeb64b6e749a41ec5f539e49c12585c22bcb592f8d22445b0a578ed531a4c8c3f352d1536d7604c976dd506ca3829e8abaebd02335a8ce9b3ad62442947457dd5b72862469b31dd366a0c29e9aaa8bf1a1b8a71a07de76abbaea0bd2a31a0c4471d3bed0cabf8516553ab5bdd1dfab8e8e7a6b687125f3aedaa35aec445113ff5ac1598d16450af5df506cab828e6a7b64511531a8deab5af62441937c5bcd5d8286452ab51fd366a8c28e7a6b0471d2b05cd6a35ae63478d31e59c15f8a8e5ea1c7189a525c4b95d6d735fdb0fd91e61fbefda6f6befaabd40ed5827687502abab00db41de00589dc16e0a405720f6856d8778bdc7d124687d63ea004e0701f516613fecfb00a935dc3d216807c186b0ed10aff7389a04ad6f4c1dc0e920a0de22ec877d1f20b586bb2704ed20d810b61de2f51e4793a0f58da90374260c4a0d8a740b9df0d9e7e0be6907a3a4e5b8617b5ba4dd089a206b89614af91a17fa44e38aaef7837181787fcb369d00f51a184436046c405600219014441e3196f9c66fa919eaf5268c01a9a157fc1aa233ab697dc6514573854bce5e82fc462d90d10192887a73bcbc0fd492b0df72259f7042ca53fe5a6faaae5bbfe0bea6834f8a2a8fd1c2a2e9ec5f929c7e09c65932ecfd368a63dc78cee21ce5e181c9cf1da7c2f7a1bed35d86e231dc9b5a63b71a2c045fd0978464e6455ecdc084b3d13077e186fa2da86aeb1dce5834dc3e77bbc34ab73b012919013aabfb65086cda038312ea925b679923cc73d783a503ff7129850070c05650389a6c4367665cc2d5d8fb7799fdc68f9f315e5428c2d235f3cf2e2705071795c5aa71b964e9f3bbf2729d5d2a0a6539ad1068624299c7b24b4b1700df7cb1fdd35d06d6c78c858df3cc5b3fa6077146a0868b4bcc944c24c0c1fe66d81a948658e15b683a5775fb21219931d1096fcdd79b032e4350f40ad114d1924129b5ffd86ab2bb31653227f1ec3f7a1a4461f5301ae44d3956e9842c7cd108cd74cd3a4dd40c16a5d6aead32789f0a385f874544caeae01c2051c720be10b69118e046f29d1aa9e70f5fb8ce3f35037e68e7f2ac99d5f9c64949bd467846130044693b449a0a840e7873c801eb912a63a5e750a2a3f0a40b1f6f607913c1a2bea190a326333daa5acfa5f603f66031a2569bfd8336df4a918119226789eb6017d4892d225071d963ea7a10668584530a63aba3e38a9e0d2c2094db7c3d69fb39c66039ed43a232a3c9e29aa1fc1ccae2f8329665d40d07cd01ab4646f2048079de56ba0bb813bace24d759ae64b506653fff441eb3434c8698acad192ff6fb70fe5c32886fd8a1aa478641ab99721edfa6fe88839113f3b2e0c66180489991ec9efd66baa68ddb1645d6108cd806001192a7169e05656d3a13e0a5387004b1a806bcd7098b73326c90b6c863dcd710897b54dc97bb4eb040330c611a9dd3540746d6d879c542c49c030ae518013320227cac473c177f7481ea1ddcbf482792efc843ff0c2705e24b22a6cfe4dad745c8e1eeaca6251dcac0049ca0c95428a6a7f58280e89bd6e08a6267f27084a7b3b0c5ff3ec36c5ebea1d08b5c397f23cc213fe155a469f2a032fe250f400c8d83d06c08337fc5be6440c50e876d530ed89dbf33b1d3542ca85bb8a04038c4dd7f94d9764305109d64ec7f6231e43d5838bec1864f46cee96a5b32f623ec656c8c920068287133e07b3da610342a7b94786d320ad7536962af496eefdbbfbd826d0b788a3d4eaee1bc3cb052689e8affba3dcb01da1ee0e6446ccbf644fff5ae99efd19161b9143d115e4efd704b52cd26206f69c659e03277f548bf21fb12c4c9287432b7295b0a79d8d3d50aa1fa9f748b97ea3bebd10c4ebff30872144c66ae9d54fcf2347b64a2fe8a7a1afbb65b80e8fb3c92fc6d15848bdc61dfc507b1a8be412fe7c19adf1ecceb4ac637207d6fd8743b188d17f03a6d1d79c65f6160759707fd8eb6189781e0c4a974cf08048f15d0f4233343ec8b6f1bff8a68eb8b0b5c6c1023e9103cdf08abbe7bb01da4d2cd6dc28d5a6dcd141df37a2d104c1d735a2a6deae2911c9c1ead6acbef99aed5c2b493efd616198b16487c5f8bf56ef8eb1bbdea90ba48812ad858c1e38733dbe7e46d2f07b239d279424f661146fef0841a5bd36e3096b6d2c091a0f68373104731df673a0787b059bafdcef8d6c17d83244cfcd77aefe8e60e3591d1bd4a4234300a535ce7bbd9dbd7baaa8d8177efb5a39144bde256d05f8c7ea013bea7031156e5acd453f854dc3019809023716bd547b6f84e73a33dc19ce2fb7c110662d2b0d2f66850177087cccfae8fef408247b21383d93a4da660b22b142d006b0191ca7ff640d34963efb10249cf19506dd4943253fa1cc72512079ad985d0e4fb15897f66be776547c2f98346f86d1dda94fb8c8920b9aed3a2d67ba35742a1b3961eda1b7df2c3a75c17742675d8bf31fa3817d05be943873a0a539d3f2c1dc29c85d16f3e4132c53b8d66ffecfc77e12d34d584715c6560bbc7273dffa5e3eeb8eceadb9977dee46d09d308d8ecbb80437ca17eab10651d47d0313da2e230b4c3de5e48a438db474807f2fb84722cf2210e8713ebf80af35af7c4c8c4ccae2d7386630c78607164e029892aa65b8edcb20792c855f84a050160d3936db5325c1782511763d73fc9d8e75f2f0892a74dea7f63a0e1398df1ead9869bddfbb92ff3793b75ec035033bd312879602acad6ffa15ee9db4d94b998f859376a5c17c744f0ed35236b482eff8a5f7706d2b0c756c17b933a62dd1c6aa8282d57b8e0ccbbf69cdc39965c17f528fce3ca34e25117301614bfefd383e7aa58106488f9e1672cf7254dc2fb11e1c95eb6b1d512b8e2840680de8f167762997a80f3f199e9d086fbbfc9bd373d9df0881a4882146cdd9c7caac7a47458275a06a0bc063903663e02fc6e980a45f274f65f168dadf5e652ed21cb1a06646ec51db5216b8676ab9cc1c48259ce1844b78148ee8a306506403d341c2ee5f3099524195ab59ba37c909fd0e1f084ada0f32dfecc40f42dd7d754f1782d23ee689ead902c998292f298e82ccbd1ed54ed1f4f5bd969f6487fc602759ec5e63edc5a5faf330a67898b5af68f0bc830684c2d5a4f47e8759c8b2f8b99f0003f8ec477d904a857517f4b313a0d990a3b84f24a6de8702be02837e31667c2493123070593e00453ef38bb9505a9f446fb5783df792c51927e5df62697fb68cb9560829d944c346ad29dfc1556862c3ff470df53b0495162d0b8ea3f332fb3017902006c760b8d28a9ae079d8c24552ea9f6245242981cca298f8e895934fd2789191de49193faa428927a892b650b4a11fff8aeb31fdcfaeae0aef91e7c96f7e0f1ada5a8523c45645f5a41cd0a1f431fdc91d4b401d0dc19b3d8ec9cb2491c7d151bc23337f2fa61fed167e2294297658f6e0815713dc6ae579b2e8cafdd9e8c16e14a877da55f658c6ca62f13f18f6679098c4074d6e7592febb67f00bac864507678159c408e8c2fad2c5612b5b72f37612dc6602c51ca8d02ac0d3839c5b44b156f4499fec0213a2110b59d30f1f881c6b00aba3b5f0dbf017103b0a0d583d194ecc86832a3baa24fdf442030c1a4f6f230552d157719d8bf47d81ea595b289a0b411dc953fada047bb3a47e45a5cc8560d28f00cc871427c4d80edb5446acc3ad382209c7403ecba33a9a8fb8a986943dba62a81f26dd8964785928b8e1dea79dcfabd168bc54b9e7a8dc435cfa3a7a1aa000f057500e814df11233fe33e4b08d9b2b89ac35e5473714f7e5bdc507aec22618226a45e1943283b32e53e0474cceb6d1ed33638f0fdc1d094d557ec459db2e22423ea073b32f1341cf0e053ebee0ffdce5732d215fffba1429a49ce93b6f8df4412d5523a7ba57497fcf7cb1d1d2279d9345aabb080953f00fe86701c4df2f5d2864ebccb7023f80bb338d0b95b750102980d68447cc10d535c092910f8692b6a55e558b1b61b77caffafc0e7705c8f199949701584518d17b736c118520253e693c15d305b171d845a7fa84d2312d626b7360d6df949ab4946cea0023eb4fe5f2e4cf621774fa7be33c9778bf349bf2f6226b9a0b308bff4070b8f877532eb2ae21d661b4afda5a7b38b69d98d71c663a6fc27a75044cf969383c5a9d844e3bcd8a685c66dc2150dffaccb845e769a77f84da2799f0def175cfdab14a3defe26ceab9f1692e21926ebd4422ae9a612895f68c950cc4b3b009c7b56862ed7114ea99dec8dffec0e8eeec0fb12dee3fdf6311adea2fd4e3d285bacbf852fef434e5057cbc38af68b5558e154f7b6ae172b0df4aae4e87ea9ed3e007be305aebf2debd5be8391604b9bd15b64aa3ed7531987a0579a8ad7951e99c55366d907b79dd3c8904d93ac196b7d3d482ba62fa8d1863e27c0361ea05c38cdb549728c84ada63f9e8bff6f9d57f478b3fc266a88861f6cb7aed45c60af09cde82a8940b2c00c5106e8a3de3f94f338be1b7361f6faf3da69deaab607c9c8fe1a60bbf475547521917dca555ed0f91ad4056327cdce2397ba032f18514e8946d2adca54ec3b4b1e143daa741141d20fff4d47d8190db8b2eef1e3722f88681dacf1f5b95c5611c6b9b5e3d8f90840fc5bfb05bcc2dad66aac4b5df39e09d3ebd6d36d59d1d4bdfecfa59e77d6abf0ac542dcee98d22841d273d288f5595a755d72f8bbbcc5beccf21869e1ef2ac745f970acac02e9c99da7a622a54fc3c764ade08869cff8b1ef69ec8264f475e2867fa9c68a802e69a7f6e456dab96eac29201c4a82e11e8b3c58e8b5bbfa615cf315688f0730fd9ee82204eca09fdd7ccf7a8442f5eefe58dcb57d384cd4d31c053288f82c3a22c19258853f46ce6105d44eba28527d3ad43ed5ac2af567f375d43c3361f84f4abaca7f9e4e67d76174d9e4686246f124da1d63099cc71fa034f7a80c0e500d8f5f382426f7b7396eface4f5a22bbcff18beb9661bc8d324b4706c2e4311c3d87f50757f697d75411ef294095a0e4544dc7d542937442d9ee5aeaed07285a20ea9d91968edda4c6cd6e5ad394b5bbeef62c44bf6b0c99ca0ace5175bfa076a3c1e1461741c928e472a9f9f479b39dd009ee438deeffe7cf2863a4dad3d2e42c0551283b5fa32db69867151b75eaa1890d34893aac2df3cf241e0d16692a8c4372f0db11885d15e1a1a8742f3841396887704ea0fb2669cc3d761893fe596f1d3dd222784894849e6a56e803e9705cf750902a78830721d53fc996d686444d0286abe42f876d626cae9dfbb9c566ea6cd0fdd74752653787d64d9bc763bc0b3ccc74660917e0706f169fa3ac727e308b2cd06802b12607bf3c9072d0acb80248b4022c48081631f5294891d2c542da4f23212be3d41312b969269c15c6d871aebdff2b43470653273ccd190796c6a348df8e18f3f4de1f87071a190d2a1df62d157829f5e4886981b23fa750f05f8732e22ce2c0f995309089d2caab0ee8a08320f5fa27b2e3530555df82376b24020a392b48f6dc0f3eaa6661aa91ee6fdf9ad581db7135e89f3cb5b504166706fa8619bc7d5d27960d932a0c96da216a93d6a8c0f70d4ec97e8e09009e8b6609d7aa6c2192079a42db37ee20f47d8febd835b7468088d0fb06075ccf187aa4a9ef8e3fab525d828ab5f869945381038f5f32f0e35a272c17b6e0839e9de072b6d6426b4a2bec2a3fddce8cf05522048c19d5586531afdc05a7c2724a03da129237a355d76c55a9ba9f1f21a695b32150a8a82302e28c3a8bdc3ef470c31455a435682c4b3a0e90b8c50ed70ed883024cc3bc4dacf4ca98a901140198bcd8d38979cadecc9d8a4a561e5e9532beb848ca1a5f2c254081053596acdeded9c68b789a62f7ce2796f639edb3f8c850065f0b1e512e14a86f3706daaab97d5af53791916c74a612715bbdb4e4df1e0f62e117f521b33d1fea94a5b65fccbe084fc848f6a07f9f8443362e552bf1a520d879b2323682b3e041b57dcccfbb90a85030fb4f0c62ffe53b041adf9cabf61b1b6040bdac5a6e68ff21377be16f23bf6c5308cdb308dcb13a6b11da686d5d72b8ae2db3dcc85161843621b25e16e22ca2d2cb74999a52135029f28efb7e9f34913fb894c9cfa9d3e32a75af66ebc28615bf88cb58e317e97bebff6d3bd490ef867ba7003a4261b3d79b27f46e893f1b1fdb18f2d55975a0f37055e95a3172e8c8f4512962b39f159152d771c76be9887cdb944b7ef7d619c3752cada637a53a9740c704a3af62fcc029ad60489192895dfbe21ed7b6a1763519a8fe33c5c9a2a46daadf6001389b4024f5911dcde7cbb2d6f13784aacee50107bec3e7f81c59f65f7cba2d8d691442c8185a2f5bbfe134ddd4d93ddc7d6cbdd1d3614cd499fcc29c35d5832528e981089da1a363e79f5f52001ea0374127810168c2e2d66d3e636a11d637f8613b99f76355a2b527f3ada9d2eaadd676cb9de001c26e9711f7795163d8c4b6951ec7f00f7e4c36aa71315568806d2958da3e9597e95fb4842e1c757d98ac8160ad5983695aee346abcb94e36d25323aa93d5e902d2544979d8911411d5c786cee87dbd67b5591ae702d4fa7252f6466e5156d551d93e5655c6d290e0602abeeaf2ddab6e39fd721c7288eecc02a40adf9b8591534f35925c4f06fd31796ae4ab757bbde5a356de506194b785096e6432eabb4976aa61602c796612e594d27da4c1d764eb1e935f427d3e487eff27717e949393cfc0b8cd737dcf739a15b071b0fc27c9274ce2f93ac7bf0ed0600fb38606edc94c6dc2afe2c5c9a382b89c86cfb3e85dd0ea990dc3a269a74875509d02058f1c5ca224dd4223f80e03d2b7ea58230d553b6931300b249fac603ba9f6a6250cefa4facd6957fa1d3e4716e6abc9fe73df1b843d3b0f4732857db24c78bb9bd46cb75851ee5f179fbb010fc8ac7f7eb507d6e567caaf55384046722a49332274df870d54a30e506f3615232803f914df8201457bed017c9588e29d8408b422b934ce774edfc67eef99b3ba845bd62c3ce774488d646bc9bf113de262601920e9ef95b2a69ab896e0f2a85d4360cb1f6f0f89f4f54529ba7baffa8ea605eeaf3fbe1baa1c4aed2b63377a4668118583b3d50c49f1e8b2a98a50cd791f3e7615bcf1ab3cc4e125c757c85b411b5ff5e8cf04703dfd15a982d3c9be3b6ee282c01c903cd50e05f3ea44106c426e24a47705662e4c6882613f915ac7de490a8b428332e9ebd02ea3be771f0ed687e2898bce69b0837fcefaeb2c194b7e7bfae7e0fe516048fcb4131bd349633ff2e185c75a2c95efb5a29568fd6fcad9a9d32810a95067eabc2ae5570a673567c11d77c1db4c3bd8e483f3d173d6f098b307e8867766e600449787285ea7fd8f624eed930d631f384d687edd00eca4df980f71d0e3d898a46cddc3bab86cfe4d855172e82789250f7f6a37f552dcadb1beb1291f6de8acd8ffc85e5f1dd8258364c7770a8c857010dde78076d2474c5a09fb3ff2e543dc81d41da8b413fb53902ed8d16b4dbcd72209689c245d84003651d6a2ffe47bd940453c9cf3615301a10200c78e495340fa9204e471dea86cd05927c5c4373440080877bd82cc2b5ce86662a804152ead50649ae8ea9ba909c6a1f3f47a906028ced26dbb2bb8a20820ec11084a1931b2eb3e4fa8ed672e56f5f9fb77868e18c7ede42e25a242a3a000111a2bbbc843888810395f6a80c4497e0a1d932269bee166da9f5c5a77400705b339cf9c023d45665159969ae7227e1905b6e41044400346f48e491e3dde2f08505d18dd9a932230092156b7200a14845f5ea4e4768550ff2a804835437cfc59ed79bf189924b4390697c96222668e2696440b4fbbc8e2ea9cffdf097f5c73b394227b1b9f453ef48b68abe99bc6497fe7f7a07691b64f0fb6eef2da0fa48d21aacf1ff4bdbc893ad95b35950de5ab36d97a98ec9eb6c4ef3686d363ccca80966fea136497b7a71e542bbfdfa23401d5c37d5bb58fca23920b9ea498a0fe4cda31e3af03df2ffb5e7eeceb04388d0564b94eeb64c0ee6aa20664244de5441fdc841aec94fc2b6ae2b62b32732f436313f878696ec0f724d363958c9578633b779abc76df808cb65ea931bc6ca4ffc86b121de90a2afde1a9b8a643208945ffd1da171697a2b9ce505cf1d3980901de8ed420efd95b2be70a2f50e7952cc702214a5c35c9c4431e80e913865868c5b38873a3eabb193c0583685699a5775133b7de342254a030a66c0c90afe1f05a295216ea294226132b0abd8917acb83789474a0060bb4c5de98d58b19a08ba9c3bcfbb4b0570db562b506e177fe2e82982ec5ff2b4c8d319075b8c8be2cfcd32fe89bd18975734363ff467d15782d4a6f62e70a661a34b768e5f19f13e6e08d87df7dd73ff8fdce9caa10b51f30e61812fe677649332958741c2dea860e03acaf621246c2be52f3922d28ec924b45a2bf64e52e968ab0473754d55fdb2856f3619df445a7141525f40a304846451c93c2062a2bb3c586dc4c70466d9911b468c9618bec9bea3341bb0dda5560c70c2ea5d1b4522aabd61a861218d67e875682d86904a7c1c3e7dfd023b4dc7bf99da2d460d8872779c5611f058f89cb225e0600c2617fe42e185603ac55363d199b2e618d9eaa6b9ee4ab1dfded8e0b70181936a1d9fdf8663627ed57032b125a0e90085c3b688736247fddf057ed099691d303b151f1f555c50059ed61010bf78dec48b6d27027a14808a830f60fdef417f94f8e9bf00541cf2eb447046bf640b5b925c8c685f5faa34d532a1eee7048e352fd42c6de5118554b24a79b8363ee44a8790c543ceb21cd302edf0a75361d324cf3d874c5e032722b1306df1c59896b9ea649b17b60d17ac5a522275533bfdd4dc79182afb6dfced26be0e41b2f6ca7fe0fa12ec608e7bbb0e948a1d5bbbd0b7c300deac5d93c364b11aeca00cc900d5a96355284e8cf87b629cc1cc9668970a88a7b3454b97c9ea0417c4df39fe00b5ae300016600a6c9c54999e7ba026c160c42a210e2ee00244c8bfea2f1ce6986e496f5842a1657ab7b530e7a625a9c8af827fef9b949c7940eb90c6e13f55bd90044329460e00e37c12fcb6a7b942ea841709eb6c9a5f46d8c6840fd30067e9da0e8845916746a5a6a30a78e82e0631ecef662affcc7cf656a5a1efeca3166d26436934a94a8d312bc24f54acf5723fd4ce1f5a4d8f4f915567dea370957648099fd321e1d3adafb8299a386c3eacefd2de267752f46f5ddd8a75c14befa10ac5a3ebc1922887d7ec1aafcad1e2be1ca4bc50b84ad876326c6541980a23d3d7c3df893e289a152e8e1eb2c47c70d492b3dbf49553dea317c4e81fbbe99840f24ab19d04ed1b1b6cecd6adfa3b18aadf76011f6405bfe9c68ca1056d71f03e1c059ec83c85364ef778d38beec5447518514de44ac2a6312cb17cbc81e16f04b0d27f8ba1bd8cc87a6e8711fb0ed8e8403b0a1f3db66a3bcf25e740870c03c6381e143b27090f28439634fdbc77c3dab58b5a36ad1c5ebdd01df768a41e9b612ee848dd2cdc415265af1636c83dd5c1ba47db759fdfde1e63f9e13557ededf3ab591c377f23e8c2abab417d1fa9b945166e9960def2d7004de75d07875a101b42083c3004abcd7c0eb5551635843dacdbbdde5e5bed0183847ff08d1e4f248bc16814403a1c9d3ecb2941b26cb56baa6ab612a22d367294cad592fa3f8c9254b44c7e1ce6965f8be2ef853383e8a713fa92151be25f77c2a65c51325f7c87f76389568ca59e6dd1ea44a277f04a06d693e6c2c8f1dd11962c39c75158879b9c3b849c5cf21f08cad766b2632e1396dc0190956d9460597760509f6a7137b6940cf9b967a03b1eed9bfc6e3266bb343c7e3bc6d5c30e30dfda3022d92474a29d40ee48b396961e0dc47c4a0105b36ff227f2f007e371352245799126bfd3da9e0c3400ab2222b07cbfcdde1c13edf07069acda49c13abfc3b56704d1f1fe3bd4e3bf43520fd6b388cc69c8e9ff5d81b399062fd8e56880a01dd46e3de183914201f1453a899ee17cc5477fd7683fc6fcd5bbbf847f1c017344135183276db4baad684c11dcdd3c853e9920f9bc5c3c7ec75c849302d838c96d8ed77fb14f5df4636ffa294cf5c14b50a7d1d820a122dc12e5cb311b74a67271eb371b3f541a4f8acf0235b5d74bf22a4b3f7d5f7dbd55e2c8b19e8cf45c8afd79791f8d18d809cef3bdd519745d364a0736c8cef3a8e64c42246a9b8d0639ced2c3dc9aeaf99b39414e986564cf5fe2e8993a9813ce3c09ff22248f06ab06fa4248ee4e94454a8b2476427aab1013e74bf1a09021fdb7b94e2e7c992900e8dce5eb0d8d9c88e7ea997fbffcee9e32775a14a19adf75918283bd5219b446f3c923f9133d810aa471ffcd42d7dbb0f78bcbe54b65897dc70997e586f85e4cbec534d8708b42cba15170c9020780cb9c00e0319af314f6b63190c4bee76883202087937bc7d784d2fbe9abc1b5e09210e9d874e8c4478bdd5636eb4fa07810bd9ac27b378095b5317e1158adaa61a9da077f406bb54dbbd0a442f853efcc16dd5667b370f3e25713e67e2a05379ef2a1d864be74dfb6f40fffbdf1cab024f8961d7f860ad2139a7feff5cbbae337ed0236397310be7c54ec221d07b8edc195000e62db917c63cf1692d51cdc4c726e9f4e5070f12a92a2fad422a8b2d1e4804269475558f37492fb42b5f97f50eadefec993c90bc714a258893e4286631b421cfea4ca773cebb7b6689db362ade3aa81d636537242cc5f5736344857e75d74e46a7ae7b77cef885ac78bdd73f7a8362931f2a5d12fad707ec5fe0700472620500f22b66c9e427258e5d1c7cddb074027dc70ece17f908ab67b064c619dba8f87bd3e3a42cc87ac4fe068e67a16f98cf3d47dab9da0135a9a3b655ac34b087751c1c372af1621f5642e9153365ceb0de82d880c0566fcb6d396b88f225b85c4dcf842fbcbf21774e47469da8190d234586c1d730f9e96871d5c9c671d42262f6bb161fae7d09e0a7e4873a0b701f88dbdf3c5c676ca899ede8f540b7b589fda79b23b7876c7bd7167aee9e8059e02e6626d24ae3dfa71d30f95a1c0161df07358b518a6f37cf2de2ce25c3885cdda7e2630d12cc266874d6a1f11db87cca50b12a4aecee991e3156b6902bc9aabfa5a5d281ce5f6eafc9cb1168f4de78bb25a5c3f708e6cad08f4fb9288dfb4d36d8b8041c792e94e30350e44874bfc71181e3f4e78b277260ef46bffaff5216c78a2c90a9e51229f024535ccdb284c8304191d75f7597156fd01dbc18eebce35080255de931a68d9d08df5b4fa7735677c07838bca7790bf2b23f57f567b73410264ccfe539f44271f9a1e662227be357d48820ac840c005fbf96f7c690e781aa7d8c8ce6641a6e88cbe86a00a05cb5d0e0ef80615542a00373cc697f9b04017d50a343a97dee859142f875a1207cd28659bf5470a11b46f472a12e2e053c081b2781d386cdb1118917ee18caa830d2a5c08c94626063a0eeb53f43f8f178e013f567d0e8dc454de5054f29faadd0480fc65e0140e73c7cd0514d1916c1bd30788e145e99aa1cc7a1491789527fe7c8a5a31f708632567710d3e881372be0c2fffd95e10f7d8cafb7d68a8eee58b5d6920416f28eb584db6759bff553f0cf867550b4e2dd855208d8b33576907849167d92163024968f24216656c736a388f5f8fdc882f764d91f9214797b64f6dd5ec8d29bf59a2160afa76fc1a22c22efa13dba77f699b2e82ae45f51fca4bce21602d6f64d6841e2e6ed4178cd2e88f430e279347597ef5c56b136600c3f82835232ed1aa818bb6b8c8ece110857171b08ac62f26b9778984b4b48a4e70cbae2800bdbd8cf4dd95d41f6b7d3b280134976c448f579f82f86cfd8fff66f4a7f4bc0fb4e033b732201d69c1e6fac2e70f6fe840a8c5651ebdfce89f4427190fbf6a9e445dd61dfa295a88db72c5d5b19a5e2e117ccc0366a6d0e0043f71e38465fdee28f56a08ca1863a811021f8c430ec5ded7d96f4e162ed110c31d90a47a4fb658cb6da2d97167b3a6258e1facc2b1704d94111a1a761e1f2d73cc1ff3d22ca330fc5a295e5c37b24a199472b77c6d315fc40f85eebf5fb2a18c515d5c58884bcc896edf808a02c4bbcb09ece3ee9626b1e25312eab811e590d77d4635bb4d8ce88d8d936fac978dfd71d234a6b4335a14315f9a8ca92f23eb9cd151b63b77885dda128eaaaf16c5dada7b329310bc9de31e635920d4b1203646112eb0d7df8fc1df6a8acb114cf8d3693cb927269d90c1566ebd4c0afadfd7e0da35b858ddcb1e3139ca9c1f71295f47182bc26a2188bf1338d152b07f19661ec00e96690a3351ffdd5b28548d7a68ef3cf76a24ee0f025d48d14cf773b038684e5887b3b360483b0e8b7c148c936b691d65f7c2269c1d6cb861264744add88f70bfb6b97afa32476e886baf9fe99fa9af914b6c52d654e4cc00ddc948a588e9e031d1b17f08a79a82a5730bd1b3c482cb90e8820b79473cda1db65d61657033d4cc29ceea46ceac2f6931afd0425d295c854b87f2c9607e77665fb0f6decef85c71779d8cf46e557adfcb96172d8e189c6097989a910b8238857f002c8177b91ff44796c038b361a41f14f298dc65dc174a58aaa5ab7378a62a2a4afb78b3e8d3606223878c745c1fe6773900739c450afc80e698147b5074a162133e666a5413060f772f6de9e82db472c4f80e0f22b12dd8e61d456141604d37c73d288d3871b6e1fe168bf6dd1d8e3a9c8947a6b0b23c3c7a40cae474bdae5dec51e4517646a00517a004f0075ae3229ba821adf6689a9dde71962464d17398dd9387f5f732b61f12565321a271cd5bef85b2fe2dc7553a89d4861ab60e7e0d276ae05097300088a61601a301a26b49e22c62b726f96ff2a4178c13285b2f6c5248992cadecd6fefc5b8fe33a5c8edcb84413dae26ae85a563be87bf3ef9749f84bbaae4de9c9224285e007ab1f2cc47681abd720c45810f2bfc7167bdbaa3844bd1e99bae53b6739fd5f49cebf1a0d168a7f9ba66a323af77a2f63690c33e4aea42363b3736f576ccc811651768a1fdf9f1e5496b8adfc6dbebf8b4302f5fd27cc3fcf9aced8c08892703da26536f393f8394d6b02b29438571e91a2a8052f68ebe21bd2d82cd8d7c4952ccf31da18380843006e39f982eb080d218a88ed04b5743238ba4a791068fed97628bee4eab4c959c7598f16479037e52dfb73be3b3ee39b16efc26242f0e491d21747d46035fe49c9279b4d5b852fb4e9fa2ae55877bd448fc998f89edc9ca13bdc6152c3ba29371c9ed4b7622cd9834f6178bbf2106aabc14666aee924a96972108cceb444516faa94bad99e6a7549000e1e77c0d65b12184ac648f4ecdc60aa7dbba76786844c71837aeae93a9d2ab1d5e9bd11432ac4283c522ea1239b74be6acfc17777402b5a2bf89659319fdeba4a4793268e6a661b5c82b893d98e698f679809d6477c25dba1716dbe7337a58ce9bbe8fbfde1330db28f8a6ea696949f808a0a0f2875d1f81a6bb030d439bef4a85aae93667d295e7db111467dc3d91e9239093797c790b5cb6d563332ab5e548c01c6046158a14a8ce4307bb20b1a8a8457e9a097de7e522de9d233eeea7490458266182a879206f6d5068b3e4af474765283662ef986dd0984bc198cee153c0c53d0e9bd68c24aca9802f7f20a3db2a1f8a4200374c410ebe407e8b33d679768db1d4c933ff33c0de71ec05d5b321975cf2a787522c61b1c4ba5859ab8da95e100a4240accf51bbddaecf03ba7a6a5866439c83911057ef41d013895d7922a3207c2640628fb2fc915838bb711b81c4d662d5f0999e43c553e7929020feb792bc0397edb789cb3e02882e2dd08793d060483ee514a2ff4fed0470c2c60c3fd55e169542601522109fc400d7b20a2fcba96f1681e207c32aaeeb15745d1988abe31f13d42967cce5c6cf994a4c9f0b16f45253bc28e034ec229b31bcdb237f3ecb1aef3954fea3327698508c6970cdb87a68ec46e979eb14130d80210c64de8262328f96c9b43b77768ed8ed9f6768b916fb51326b097d08fe7ecc1a565090a4c4b71339034ee2a1d274aedbcda283d3cc628be2af90903b11365d52e9675739510063d77f4da73c5b2e6cdbd171b4c2d2e6885d1d7bf11807e19f72c12e58fbcbe423de5e58f1ab88289d5b13ae820c8292660e3005441bd3a8e17624020dcb0024d633065e29898bf98a850fda057f63da73ec3eb8d455ac249ff339507d692a14ab577b2561ab72efed5aef272353dee77f0777888c9b19f03f0f20d9cdfc90842411bf1dc3abc5cdcedbb659793f10f894cb1c587bfaef3cf35a5e0c3893777b4cd2d6233fcb4142a2a01b45fc2e667da86bc3baab356334b1eb7bf93750bbaae0c49743fd2e217afc01cf6eda3153738ed9737d01628a3509b6b569dfef4fa250b57c40180be1d526df09e6d013031ee022b18027084f502be8fd22fdf989f434f0eae2272a31cbbc43269120c850c99863a2fb42d75548db452bbe34e4cabc351e9d3628beb481a5408953a0333d9dd122cc7c9045f86e4a848045046e013070ff1776d4e6f9ea25b0436c4e1b9411430ec64f00ad1aa42863e53b6026199750d3b62aefd4cd6710d23652d715365f8bf5614c9d296bfb06570fb1bed72baea297cec04bfa1e11d99273b11dc047aed74b78cf80be6f86826b214b820b3979743976a371d6e9d22f511f447c4881d40ddc2639f2f239fc341e46626c54d01b7db72e79f6f67908cfdfffd6066ab296971205e427455a60aa4fef24bc5db88b763b8a65c3eed3399f73597d4900efb36a84d861a45cd3d3095bf15710e939ccbacc8ed83496ac7793d2bd0d3c6343434b5b64d276c176dffefaf02463236c2163703c0b966dfde39b4300c525318cd9664c35b2db476a8c6498e5811cfe0cee665adb2b7d1b51bb69cc083ad766aef006ba9785cbdbaf98588944f0039d3982dbbb07d7a9be4bfade06e33890adb353760237d6b3eae0fd22702b12a35c293df2ce531e262411f389c7a472c47f5663485dab9c66cd87b7cef5873d94e1fa6d69eb0d814b8c47883d6a6cbb46f18babc99232c4748bb82b01bb06446d086ceead461d435892069aed41fbcb09626917ce897fdfe3db7df3f664a1a1464dd8382ac0495f19f8175f6801ba3b540e9005502f8fa1a6ced5763a9a7699fd4988ba54b73e26d2a72dbfd3d1fde8e81cdac98150a3467b91c8b6b8898a24df2724393e2b6f07e3f6d958ba52590dbbf87da0c3e60d77ab102287aa851de91622e97c5c13824d17ba22c83e0b1ffa7a3867f5c79d59fa1021b037159f0061852085332b06ee78fc9556d5c643af503b2f0b6b608c065b6149a42744783ffc0884f3dde7a3b8e4c879cfc9b5303bbf477820f86d29ffb5683ed8dbe711f30203c6e53a7d19fcfecfedeaa2ea82b49fc649ff21dc64f3f5242cf3fa92dba29c51ab58fbd9e146cd9578ea6ca0fdd8059244c7ca3ee4f61bf616c315f8067ff71bf4d8a283002800b16719a6820e0588d69cb35a113ca41ecdd03296f047e4de985dfc52048ba412d08590dc99e9e0bd03b3dbe5f622f0bda07badfc068866eabc749934d5089e71ff8766f8582bad131c1d050315cbd4e934c06018fa7cc30b82bfd603af862e1599f87b3b3b93886551044e905f3c34f4c557b3186498d8a265d3c5521a4ab5964a2a70a7ed8fc1fc3542f077f30130808dee8f59eaa02f08365b27eaeb94c2613e5bd8ad00aee5ce3242ebdfa500b9679343e8e7e65f936a81bcd32470ea215c8675763a2893dc5147789682b1b312220190a333947c7dc385d409239e4310d1919935e18cfd679124d208af0a36156e88863afa9d516f3860675975fa8748630fa4fda1f5e19825c384240aef77a2403de6df14a3257623846c329377c1dc75518839553a15a9160ecb1e24f2c999065eb9253a74fe00654df47ee4e60985f11150f806ccd1eaaed9275e26f7379750d7708a44341afd1f6cd67bbbcd227213c25089d9dc30f3581b3a6863adf06497d35d57471694889e043dcdd4e0050d0da359c79ee4b568e067eb5f27a22540630143352ed449a0df1f73f0ef5afb23868bdac3167ecd9dc2a0c50757bd3e750f3a7e0d1c2848f923a359c5b4a5f4dd069e878f30c0ae6a2e1ee0258a86a556528dff1b3ab6fcc0976213b6a1c92af83f165338e57e9ad7465ef29fad72c558ab7ed8ec877747823c012f5c43d203d6e640b4373770b21ee4005652436f23c96e343bf6c6d7e6140e7be96f2fb6d0a8b6eb3e31fb1d0533b528bc867dcd141f26dc064983fd5ee60c7b10acef25849e12cfa4fde3841d783120be0aa4dc43e6e01b75e62432f3117af10641ffb5d5e30b1747214c8fbb85f7295465417e8804efd63d4220066340a107d809f64142d3bd788096012e66edbd6f5470d9585ee9115a2e58caf36cd0ba25ac3af313770e1c7d8e8385099bed85dd2f7679639abd8b7fae37ef105534b40080c44b357f13deef0c783966a0b8cc99f0a74de44c5585a78658d197afa7ccc8aecddccbe83a1bc4c63944f1579824b329127bfb33dbdf8e400d1bfcdb3865627824d82c6b98de5cbcf77f467fa1e0d587131f9ee4c92ce8db72bfa3cbcdcbff956fc406c4ac21f2047289202c39821db869e0b153463d4a0eedddc9691744a93a813969b78a03f1bf444bbbf581136c7b8d617b8a0d627b0d451194e4ae1003ea9b8a0a7267606d4128ae59b5a4a86b43802e5d8a05c314aacc85bc5e3d4739430e7051623e665b82fdfab3741d42cfb226d0e66d6f10c5e65f19ad4c9c4508cc5d6a8e77195cb4d4b9db5e21900f3e857d63a153933b289ef2788bd026c808117b13edceb5eb60817b39a5c7e2d7ca76d19190e3cdc859ef01fefdac7660969512be9723dcf4a042c27c836149410c213bb3fa27348682ed02ecbbd84348edacd1f67b837e6a19ed33f129f010ae02f7fa6a2cf6035b4f6741da1663b5e765f6006f00062ec20d1b4f31102fe4b757e8f54ed8dd8a28e1436af17488b65a14812463bc9ef89d32b74dbe824c40df1de73e928401175326c6e281f3d23d5fd77440d8554f1f5802220483841c97eba03951e854ce0caea1c23e063f87beae9e315e50692cd575f4b1a8746b76f6cf6d1dbb2a54888ba526228638c9fe9746d1aecb57565f76dbd1bd640600f7ea4cdf3f165864fd76286434df8447dcf9ebdbd14ef70b901d5d22caf06235f2c11534bb77e67138293faa108dd6a03448a4aa06689dec43084ecc500e1d2ca2734ec4aa704dbace8599d9fd75146c81b5ba8247c2fd6be8f62fa17361fbc7407ad81f13ce52cdc0a91c06b192260dd63637f41126cae4b21b1eecd59fe4ca34d6002b0aa5a6512b79da93453bebc8ac24c0aba047b537ac6e6052a10c9962fea193d2d93aaf432ca8314d197597c03c24ac856d6e037114314c3d2e10d16d6ee7a0f24d589e7a45241b25f0569608ca9af41ad2044d17fd9c94e95568e12ac25a830d53fcff74cb05d0db4c8832bb3a23c092b8a83a482420cad94c21b4491d69c274636f8d9a7be25a9d4ef09fa86017497a2b95b73b47263019cd4b4fcb55d9298e421b9d7eb3d1c089b0fd7a37d85f6ac6165312b415f42c91bb0bad21703119aed551cb486f9b040cca8be3386c98dec7f3ecef51c17a81e5c5ea6936475ddd5922e24053643c2060dcdeff6ed1e212e2e75fc7a1dcf920190257f122b64bb6339e508513d8c345c8000d52c1226a2545dca2f856f627ffbb6251637b2ca8ae9ec89ecb2c6dfb0295b7b969aa265c40a0d2cc3f0659d6f8ae9bc8a7a1ec46f24c86924bc0a2b25e2ac1688f48d2aa5c4b02e4c72fddc220e89fd81c6f03e007fdd96cfff6d180ed6ca4c6e0d5e7c5bc4392c99d7af77a66de7e7eeaaed9842393f80e5d527442abc7c4aea50fac9b2f70134a702fb6edffcf25b9960dfac79668232e1b75a0d86d49cffcfe19c63a7167d90c230fb4714b7ee3f90a440b402de49f12f90a39fb5112de7afeb245b94ee119171fc07a5f1c7d04728c1ae15ee5346c25abba31076173d0299f5bd8db92eb2140962dc14f58ff35807f45050f8694a9992fe045093ed588991865c31d616a1a2e8d036e340b53f2c213fd1902ebf2732978b0697b4534208aaeba8c18c33b7c348ce3e34a0828f9e2b1843d4943e2117cc338235550435957950919db943bbd43558d841c752b2d49b5fa29b82f25e901a2e6c56305149d6344b2bb00c8cfc5f3fa2c42b266c3742ff9c843afd3420f8bf754e314e5b5c7749b8e216859a0f1683c37e77242407c0b74d9414153ed9c81a3d91e7c84e46c34213ab8c7d92735b3ae8dc46b90bf9fd2e4d5b00aeb78a5867fd6e14fbfa6a4a107f64f87ef6fa8451d3e61db767e753d952ead33430f90bdeaf7bf236a6acfb15c32bcebae7c097ad04752ae67327f8de71a99a7d3a208f966843ca880a985f2e19368e625255e4f7e1a323b0eff9c88d413f5dc07e3fd6fddc6b9d5274b568b198bce0bb813d0782442d898398e9cef5dfd97702c085e796bb5943977608d7313020d122d125a4224aa35a1e06ac9867741c3ce39890c3f2ccf3adaea0fe40acf3aa1fa27742bd377ec0cf10f39ffc66e0ef1d4b982cb312b0b0dea046fc1833ec9b3f972e74a3493c50545d24e4e35a4a5050f317f60c46ab99b8638e18afbf9673a8220f82f1b1e02cdab1203d39430a72b40b329b1ca5a1f90d4e753a1ebb74e026464b9b59537b61bf88a2c094ea15520cc633ac22521128ee0856ee30ee247113cbadd48692696cc03257c47f40ddd7c22ce475ecfe1e66161b65d5b756bba6ee0e7317699aec1a324ebfe20f8c34adeed3180bd4e27486ae3f888845fb723d1062bf2965071a0f4a46b2ba2e495257d74fe4db803f6a2576e9edc106d69d7be6262a3b5a8d7cc04f76530f02593de05c3eda0c03c2a95179b4ae36a54a26ab09b7b710700d6ac9922672321ae74ee7e0f3dc1678cb26625003d2cdcc95eada6376cce6179116ea27e15ab648a059332fe15fef04d1264d9d7157797f0b6c8c58288c30aea7bc034edb0ae79680350b9f6d9a87363abb67dd23af805d4c40d2d65e84a22e1aec8faf1d9343fdffb5d2bc937b1294b1999b559dfaf9dbcadc2be09e6680cedb03f49311263175e77bbc448f0027fe3ef2d9baceb0d518fff1867a6797dbd01ff1d84fd79007d28863c4a4580f056e39eb0d9ef4743a3950de2abd4608569c3a1b88a86522908ee576441e0887084741b66f597d73d704ef800a30860b4112cccbef18083498a775a72d4b4b3cd03bbc3a9bd8dcafd4e4707823efd30ba0f645894c7e2fba4df388964e7a1a48acea93613e785b51ce9584aa9c6805550104f3fe2e74d1e037cfdd50383824a4f4a5ec43cbc9945c43e1d9ad13c952b58d4fdc540218127820abfee29c4797bca5ce127b14855f8dea7bcbda2299037789e226a98a4fe363fb5c52c14859131096df18e56fa27ff4cf3f3d67f843867c856db6898cfc175db8f7b3b16df07c3521160d06fcafa1ec7274f0e9f6ead9f234d6e40080d5200d261e4a2b48cf76bd3e9933a5ffa3ec7d2919b1b74b06644bbc7e4eceacb75355080e09e146f2d2b6e1aab0a5bd0865404de6d637df37faa962ad316f9408580f0bbd300bca7fcb3380cf8f87fc01b79bf1c3b3fece2a84e8fe8689c3980c05b300e9ea807676496eaded621c9aa90cabb7ac4ce9b68f9904e23ed47abb053d6921a57c2f1b51d327748901b8973d4cdf6f38ac9dd8438bba4aa0f75d713f63e0d51574e9d5418db5b9d25e7397a648c203c7ffd51890cc315af6a0093533926a33f00170153705f7447da420fa671de869db53f8d1422dab0331157a88d9b27e9a9cdf79c18555269b6b328a444e04a09b0dbd933d802afe8d0d8e84f60470d3ef2c1c889a5c217e7c868181dda39ab086a91f7cd7351e4b8e0fec737232a13837dfbe9d5c93c22f8395f3a4a5eb81cf8f4ff4597014a362e46dec6fe2ed969bb21e70ba2fe8ab7fb558aeef69a31ce7e7bc8b6ccafcd3f104ac8d8d7ab6053c04f423077da9f66b181c7ddc0799a4e17299804e12c1fe24fe270c0419512279b1b72436b142f09da823d279e54e378a88aed6d890d4d5309e400281dc00ce55ee7e8ce6df4472be298494d044886330ee5c1156a1618b6ce777962a27935efa5477e378c9d03dbf436cb2a8c277519a6c8a76b15f6c9560fc6df02e1550d054b0298ea642098ef0e6ad301c5d08e754b2d0a5d9899998509f9a0bc7b7cec90a7f87226665d84b9735013213856480d562b31b129bd017ccccf2c389976678553b8808acb9e037309a377d1692f12fbdf8f69ae949e1ac9902a06490b4dde8fe2e228a99a620fe639906074e5d18ebd52b56961009e51102f323eedae6abb31a3b4d332dccbecda70f60e8a6e86f05f99ac6e6b91aebf4c0e0bacd3d89d3d2563b6631d5c1521033509908816612636093837cc331f18a1eebd0d2e472168c4d46aab620af2bf973332874bf777837bf186c7ec4007a5031c598e58f2c36f35c27be2e08b89f31df9e6f2964d684cef55d758e81991ba72fe67f7a1748d777aa8e405280cba338c89587cf56b50bb40ed068c3199b4892f848288d4252a643e71d171d59d5232936ac87ca4a3f9538bf564fb904312b610077049dfbaa4ce1685642b57a44b120371f4152f5dd150954c04998bd9efa8d779797b0e5321ef72549ad8251c7c50307fce4a9e0692735af0d25d5092c16d181807fb4c8e6e290ac1d1fc90c4c8b1897ff41d247a5605cd2a3f06b7f9d305f4a14ee14c20c77562083980bded3c1686aa88a4142649df03b5ef648260bb3f76dbeaec13567b1d0e9de7622084c08939c2dc176b22289e4018005a5d12624eb6d59c75b22e0a76ec6fc30835cc3dc79c1736725ba44a297c6ac085143e773c2efc441ccc3ff10f37e53681b4f08632c08de32b96e204059b9a599a4391887a29ff8c25dacb8bc4a1d85d5b9389e53a397a7a6ce9f7858cedd8bba4a3ed92082e1970a2fee66b2ef43a1360516d9d44f7c41901454cb1ae09ee6b55431d1fbc6b8949988240f9b5508e86ccc7bbfb0c9835d451c6992593cad3c34ea9eeebea8dc85ca69acdc3c1e86f154e985de9cd35ca6298a97808cacac806fdf33de0190d4bf71dc54708324582240c3f38dacf06fb6ce6e58cc96ee02355455cfab31ec512909fe60cb2c0bc320d93f641eec8aab27f38683a13107a870bf2d8b47b4a8bf4c42ddc1564f1e5869ca2d5fe221a5c47f6991b94c415104cf60d1ee5c8d3e85a696e62b57fd0463fa546c694b9d511539531af419a900a3dd8cfa5c77a89af46cee0e2ced1fce68d3c063a135f55d163880543d0b0298b229243ed0480fd318e421e091616cae92f288f2a4fdacf6dec2afa09b94f9e3390d98b840cd37edfebec507d4142e5313139f875dee2aa303b5d647238ea5a827468a49793dd04cf1456f5a272de05d8a1cc0c2b634a9d11c4a91e8d3c2eb9199263366700538aaf9919fccf024ab24ff06469ee66f85dd0b1609fd04f036a3646e56b9e7ced9937a0b5170c5aa608dad4e1754853e227ea1f5d963236704f3a995bc115188976a2977a6794b53451eee6ebb0308da76018198d2e20744c25ef812344544636de441c50a1d36c74a941ba804ec266496be63152a0c25449881478a2234419d1ca3efa8b6ff35e64b137530816d43ad0fb7cd839132b9f75a8086686bbe42775996871f506afcd49dbcfa0f06b2ae513299c2631dd006d686cef1954c21ae730b11432193127807acac907b4cb17812f0453d1b8726b74bde58bbd5d0dafadd51cd8dea0fbc9324275b8885b0a309d67c19490087fa1156686a718bbbc42f61d0d26dc677c26cb58785553125088e51138b09f09a87c1862f9943b50b92e9dabfae97933632329dc1ff0298134b1c8f72b3565f52bd804b96840801e15254973665700bec83bed0400857f335a74d2c1a7d5f52624b8260ed1ed332380589b1a8c9dab143cbdbe2bceb2c53fb6a5194c130e49b22c90d895808b29d76dd2cf9b11e27ca8b1a84b1d6c71039b8a5a17132e3b13519188f05802670f86e986c06a7f60b90fd67588a62717a3806057f5e8575f82866a55e494ed4cee628050ef70c9e6cfb2d251f0a40610df919f46da284bbf23d525520ade80f9dd7f12d7bab0f064b0ff3a3c79c426b23f6ba229c76a1cb8ff86e46d85775631721138ac2bbf0c79b645c00e1cf640bfe5a13fda27f6b01c590f9772073c44d0120c34b0263d2aa16e10c55a638ac4bdd74eb833736f7f7fdeb823349f3ed1d7462233913d0ac496be6f1cda6c9098e0c7e06a74fe795ba4d3af0e4476e4a8ca77191986b2686c9002598b85a03b94abdde4e474dc193364f3c121d31093c554d2bc8bda7359d6713973495dd1e599c099b7faa6b5b11ef531c17c43a7bb0f05ba6d84d670804bf2f8eb5c81e0d3543633059f15dd9ee6dbc0741ce78c1da93fd8ec881229a1f0a346ec71e0cf8574307248a5cffae566d4bae50ec96711416f1d52d12986851155b29585f8a9fb16bba26193cec64e3d0534a995ea04c467027386f0fad9c14c5acc8aa4c20bc38c111a0d79afe72a4a77ea78a04a135049a061010246481a5c3d23f2874c4f2ea2e7c9b4123d1bb3a5b32efe77838551f7d79855417744cf931e13868f3d0a32e832f45863929391dec842b18dbf8ff93866dcdb4b70b6d0aeae559fe9b4c305fdb090b5d425820da663bf2d35e3ba6f1a1f0ae9d74b349ede7f3260ea38749e0524f5ec3aa9b40a9cf7db339b876d5912a6c5e4fb3e09e3a0d4d7dc3894bb1617491c466f1c648e4fcff33a554e5a5dc31e883528ab050b8990580fb19e22b284bc532cf5a1bd606f80a45b99f240df3835e0a7cda8ffd4c59f19bd9b23b20db54ac047fc6f1e656feed890e999d2cce6cc848d04784e2ca6d5cb503e728bb3e8c262ea0eb7b9f09fe205194cfad7dd5ec6a5fbd5ee0efe7a5878b9eae44eae3f3554c7160cab7b14aeacf687fa19e4cfbea800f59ffbc89db6e04b7ea77898b998e06f26668cebfcec10121b932112dfc5cda25210ba1f62a9543ac07e9195eed7b44c8f6c746cf606c7f6ec5a351c43858b0e4561d1ee0997d4e6decea323b2b38ef6c4c1bd36a869be0d1694d0579670c5731a3ae7822e64a56c1c6e96e1a0aa256f847dad0b064a0be2da1c90a7e9386a2ab91d5dfcec5b80024a1fb3b841448c1a273ea2d35724d4679e5dc20adbc08d107abf3cc070e7d8920367c12acdda6e4a499ad413e75ffdfd725be8335565e05470f6f4aba49bc56af5cae3f18447633e5afe5cd1641ee164d147ba97e8cb078195c35914d8e157c32cc7e0ff0ea747e0bfce8d0c419c1732ec408e8c26c3bc3281934813574ab776def517a7f5acddea9fd119f693fe5d407758a768e8f3d88c8806cf8fb20a22fc731353849340c81199631f28257c9acf926153505cf33113c58302a97809392f9d00cea8cf02badc018ec47cff325f0e916513e8703a12c090bbf6a081628a0f3164cc147e9ec4d084b421335ef72e4ee8bcdf7e81d6df30e430cf3734243313b2c6ca3ad365e31432665e8d9c7470d9c315639cde14f5b29e1e2a738f6b4ca9e7dfd462c622e4105d7509185cb01c8506fac4e9a91fd9a232f9e0d602724e87500a7ead2dd1c78782ec2081b86bb934404e16f18673d97f02e871a804ef7619a1b480a95e958a6b9571698617bc4610d32623a2438cd5e09f4aebb6b858f132de1a7ad0c2f66a17cf51e740cdfd21adc4267e32b0008fe22dd6ae710098e91d47cd31c1308af3d9e551004b12c6ab9dd37827568c9f21c24ee360b2bc2c8f9c6b745d64b6da219bfde9dee2e9eaf1f107f656222f0a7facd62bd1e9a2089724b12ce5f48aeca421ab610eeb27c40cc7f955733bac42860eca681238e9b5784a483ca05ac2651405bc00058071287afe7f0bdbcc3c047c87d9793c4f34d00bdcd142b8c57e47c4444367e4e08ee35aef0102f2d25c09b0138c6947ba83328faa6a42ab9459b480b8fd692c5120e81e90dcc00c594024543929876368ca169bf597a376b37f729411f8bc75fad9f0f30e84eb1451522ceba1768d7bf9423311b9c8fb7d73eadf8f9820c2d38030d44c990884914a60bb4939037d95383a75c68a0caec7c9d03d3462fd2dd3a7d6a77caac9b49c2b3a09f9ceacb8bbf377f53f1e461775a80d08cbffc3e05558cfbe7769f4e3b6fab053899329cfa7292eb3866b622bca61bed83cbeb49231c8664f5f78c8da66a66c3da9020d623b7749792efc2ed7677094bc6b6a4ef93f8570da13481c274080d082f0f97b5a02388d9e9856f984df59c647edb918b625860fa7362f9babfcfa29778eebfae76d02ba1b0ed69749ea253331bdabf8ad6c9828033dc28662584d09695dcb1363dd40092a0a7e76c955fe68d74b40f6fcddca2fd7588dc81897eec1413202f6f0ed648c9421e0f65c66272a4d98cc870f865d53a751f54a643a9bca6bd4846d1b92d3ed3ada5b30ab8b6137410eacaced46333d6b06e328262ceebf15f89970ce5feb4051b016a68ada588534d0d84220b07b258d92c7cfeb9599941e491c3956cce3d30ffe0f94a59b05f457c10f6c04855116d7b894a76a63e80ac33d1ebddcb010374cc674f219fcd1f45936795416e7c7af31f5a23416efe5b4ce13b167002a4c45982342166d29bc32630c37be4aa997b7c9ceb2d5a77d2a45034335ae6c059cc892ccf164d35da7816e7699b7c46e9ec14dd0346e442ef197f23a7298ec0aa0268a42d7625ba0e85e64e14a0e2ec3467c81c0e797364902f8ec48765698d0722df31716f82ab16e679b22fdf8188080620596d01bbb7bb4654090e9c8878d4a69bc201a2a773970f25a051edfff46ef9f43f656e0ab48ee63e81417d6325ea00fa55c733d8520687b9915b06e689a9f55e68d6190091b771e375a31d531924e1d85e96640e2c4724246aaf17cb3dbe08a088aff6916135c45d1977dcdcaeb9bbbe9eb28f6145f364c98bf01f5b71b374eed4231d09b6efe6d6c3d16cbe61173b1610109867d63ce7bd80abf32e3ebb77202ff01e4741715e5427179a52bf3e0c19068019714d4b5f23e794fbb9d95e1f5d6be79c35b302de02f094877ab6440a9e9a699802af64d859213c31013fa4294d50e047173bb9be704a2f8cb0189b230c70942cd6192e551151127510a1e908953b7f111b08875d9e3f17c0e53d21f5d9bb783521a8bc21349e0b8611009bb87a93c16135d68c23b9c612ce8530e95ba7f3a7f3584cf01680c46b2f17ddbf89645d5ca5ce481e30aa9e52aaa819d33c54024d42235f8c0cdfbd46bba12863de025863f0e515f8ed19362c155a1cfdb9b3e72d1c5eb7fc91ba6159fe6a05cb5cc297f871c978b524c59cdee4806d7a0b9434dc551f75fed849cefe723d1057cfdc57f8943177fb64f404b2bce072dff18d1eaccb4e77d906c8d111d115ee062a21babce219862c318917d33722f262aa2fd3053dcd2aef1358adf3ad39e44bbf77dba250f5eab6e88e8b6040e5e622a04cb6e019d40813b60251965d95474176f90cf3a36227c1409d69aa2a2469e517409928adcefcd1bea01876509558c487da325481f0d59092d44896f01e8fe80fd7000661a1e0bfa3c20fccbc36925ea060857ef25646bcf86a10b74de075473914236fbdf4012cab7a56bd013706bf0f52d99e13f060e330c7779b7f598ee5bc80c20042bf1a7c335609447b581183f79d41362e4c5a0a97836275a74d661e7873e0082fbef199513ca9d4f85f3b4fdc37b73fd189cd0fb33be008e0f8eae39185b708bab05ccabf15c0e81767bdb88aaa3f6c67824245787c4d42f8853963c38e16a4676b8705d42bd1ca15075539056d26f69632f77caacbcbfa9494e9e1b3c1824bdb300f922a1010386f4f6f83a1cac3be8bccc2623f1fed6c73ec831d447c8637102ac14a0851fa844a58f99a0e9e983404abe7211e6a5d0f96776f91475a4a97ed7144cb0af5a6279bbedb96f96a7c98839b2973712f9a4e54abfa49b0d8e1fecf8913305e6eb7e8705212e5c41aa14229efd847b874076b0eab8fc9d016e597d6b3e53a2a799e2efa28fbef44512c38590fe943782937e6995f765f0fd01c3ae911bc13022030074bdb29d938e058614e4724c7f4fd2575a021a052e044f33f8b5eb1382fb5f88d8b6ef871bfb2d2a7fa9ad2165b909260da50ce013944819ba9e0da23dd5e527d84eef7fb30440387c06e807722d8b5bf37a36e46f1521131c2e5741fb604cfa31ec81a338bf5987c34645674243cc455f1f8ffbc41492f6350da31c6775708877b25bab0f29809fe7f27ec48c19e32faadb95cfe8728250d670483a330d2141ce03a2169ec6d5819c015db3cbff9b5d328a88c5d11b00eb474634e18260a2a35e40a793f6c631d7bd5e9635c093624df7dce3805d3ce5be8d3bdc68df9aa7e539690f5d84dc6a14651fb86d87a0bb94f0f291426fc1f269b0880d7578dbf4934f18bcf9f87234a73bd2665054d33020e1045fdee7db0c272736cc691314e4b352629923cced6801447c2a602dcf8aeda5a4d2b79ae30a5b869f4eb318fa1f5192bf5c58a9e4137c0c40fcb3ebefc1e6ba4305c3447ff7521d069bc5279b09d492d04144be9ca715141967a72c7fa1df1eb725295bd4f4f603162e31a42f86acc617136148370c0c086972322182c77b8b56f7509cb474be722d81ed04319cfa4451da42861fc1c6c60aed34679f0c07654b77861316c81e92cd261b94be2e9bbf359100d2981574e007b2e992af4993b451401515d24c1b71d7bfee3acd040cac4886ce76ccc99affbff34a03383c30f0175923ad860e4c00299a24162a739512e2386e1371f4068697cb5a298f4f56187c75424f396cd6f79992d3ca6d3ec89c149046039b936dd09361e6728e345d790a75c5a62f5cbee2f6bd62066d6605a06302c0b45c444d630072c8660ef253e8a1b3cacbb3bd7f7ef8d461581fab4722803acf0f69e517d98709af8cf7483c64d8fb4430bfae74ae13d369a466ec18c1fe7935b3df851d9226f323d8f557219b91f2f05b3fe2121f6951b9a57041a5e9000c4f292bc2fe2a06b0b48a370d203659670231b4ffe90a8767a4f7725e49ab504629f616d9d25d0320a0a346315a81bd11b0c225d5560d29b090a484ed9cafead0e66c0172345ee71470d62f2ca93d04cf01859b5dd7541fd8c268f1977a2ba8329e728e637ea5683f5eb7b1b08b6ab9ebf57e6c2fe1c67fa74a34c1e92eddf42a7dadf165dd8b49b7d4d8df90e1bcd3fc3b57fd61581d12224eacde4c90f3c1b6e3a0e6e46f067ba77fd56e19efebb7f1a51977b1dc4283c92d9b40056894d3aa3d918576d7a418933a2fc4ce5f00f3a0e2703d194fdb13b2e3f6f0d54982bb4fa35c2c5c5500fa2469715fe18e86849e081e8d0afa098c8a8e7c52adc767d5e0cf14a2db1662a32e432e8e12e21ec95fac03e317ac76648de21adf454ed287d8ffeeb92a0af59fcf00ff84eb4df68a1624c831294d65c08efdb76bcfb9b0ca07ec2e7b625476ca8255202990bf0eaf6235b261a6c0e557738ef7ef327262fe6cd07c1882cb67addca46577f45440d60518732fdeebf738bcd749cf8c71c4c2e1fb66e58da5364b7af671c5d2a5c5136ed21189e6dce19ccba47b4860333a701a70fb36054da33e64376dcb561334b526d7f15f8726d9e69af58478d04c587c067e62f81fc49b69649f475de42dfa6bea82789b5a7cd00b489a7860e0097ca21f6479014e01206730d9db6e3749707c7b54af5822cae819184abc133c89344ebc6ae0c456692c8b6620ec991ed6a6db65ef56e5d1d2e255c221a8738bcf3e561a19ba5ce7d1378691d6220f67d446ccf1b3966b7ae690539c5f5a9a2f072b0cde0b79bfa412918cbba6d56a5c3626e389cdbc61109db81245698449adbafb4013ee307df45a9c8cfd09bad073e7f7f6c07531301612e984052a9e056792853e578ecdc2fe64dd7a5a91802bc6a5f63e2dc1e15ece583598e45381dc9d554281c99423b1854c4991fd13772e064616ae650213771e013b8e61e1dab0b4473a3585bd9b1ffedbff9136b8f501a4d78b90c03b122621dfeed1c6652f5fdb456f28664d8de011450c25d4a33608ca6e8ba34f9554b8b6b12c9302c85a130c7b4bcdaf187c1395ba1566827b54aa308645680f89aebb1bd65fc68522dd1c01da964897ebd8ae61e0ff6886e4b7a59505e0e98cbcc5d2031c37d7fa9a9891b19fe372eb17d3187492c2caf6fdcda9b5a9bf04376a6817e28b2ce753a3b181594d373d38b613754b52401ac80eecbe3f882666c69102ff5607a33dfd72be2b050bd85ffe5b234118aae4ca3a00b77765ce4e7bb3c8ebe6973a269c162e021dea546c7963dbe06e2f9fed0649c0212deb94725e08a254849e684752d6a35ee535ac20276850e2601f56d8209224df1721f24c8f9d5bf34623c0281a798c043d86bedc4b41607df32df20a33a25697b2e220f7066bac0626ebe9e563a9f49458ae0f70661f98a38bbca36e72449021b837f4b9f99f3ce8c9105dbd1c030a77223f28875110ede96482462fa5d643d39bdaac9ff961a01d41729d563bd20c995ef5be299832d5669f94ed00cea8276983b266892fecac0d90f79be91b462e1689863559cd1919ded540cf5031fb20d97d79eb6f848708236bcd82c110091f7a55f80cebca575382f976d5877663b53bdd00ceff0248b181c1a8a13c3fea46c8beac9fb8ebd3c41aefe0a3b2a9f945a1336a651d464b447a3749260d40ab49179cca89b868e0e3ae67177cabde88cccc5a27a2f686310a3f0a8a9604f06bf0b77e06e438250c50af9a4b53f1520c6402034ea0459e0e3430b224c301fcf33ccff33ccf6c11b6b56e5b533a52644a32b9f7fadb26764a32c994921cde43e19625380837402f4b482304941b730e220f140fde00b002082caad4a96c93ea3091d15718a3dfa8f04afbd4cf157a96efcbb417b367ac159ed40b8b1eb2e65a4d26384a00005380b0a2f1f6fad120e321dc559cc4a7945468108d1f035145428d5023a2e48ec60524159bce3f4a897bcb69d22f80a0a28dee55ead4f3579a2560f00c0074003945424c73865bf3b9a8974c2638d0003105aa6534beffdd7ae75040079052e8c9eb6c84fcb20c5ec9ffd8c13740010829f0528dbef9544eb497a30420a3389f360b5b1db219fc92c9048d04021051a0a6abf37228934f4fc964f263071a3c3e00128a7b4c73acde96b354964c261a984c7cc7e7007167000414ccd8e697d3d992c9248dc904070e1b38148d33b8047f831d93c9ef28a304b11939cef001002d807c620b17748632bf9cbbbed106104f243b23e4aa8d3cf1151b37d400d209cbb463cd77e66cdb25931f384e706332b901802e8070e278932257c4a7e8d76e229fabcc3b3e1f979a26fa3fd54176a64f69ad4c5c62c1b53cdc9848d5b4d4089dc9fb724a2ec1ad85d1e1fb3c447b2c6166967d97b4ff4ea54aa44a6f0a15ee26be33252e3fa5358e7fdeead1082093d04725991ed292d6af92b85b7329d575b144a944020412958c53a29edf74dccb0b208f30d75ab8d8a84db19303fec10510475c261f5a6a99a4e852232a71a22feb48cf7037238ab935b5fa06d549264b26931f7f832d802c02a161e6357cfebd4f5144e9c963ebc4498ba34ec4efe7f175736cea140482085d936bb8fc3fb273de5106fbe80197c0c68e13d8f01d658cc0860db392c68fc046e9f128b841069043f8695174a61c774a8786c04fb77ee54ceba2e992c9248dcf418e1c678014022596738c07fd1b1c1f68810d1b818d32821b6770095e479fc166f4e09105104224e2920af27e4f3775060122882d45f94f496729bd6ac964a2830768e0013774d001149c6106020944622b47e9ea5514cf954c26931e68f8d8d181138000e28dcdccad702ae8585a01e40fc6ebfc9e453c482fb11faaa42faf69577aae0502481fcc7d8dbdd1f3be295b00c2075e833a75c24a9b992e06207bb8c2a38c8c25d36c5e2593890f40f4509a8ab374bde641f32593c9f7386332c1d1012180e4e1fd16cd8ba296325b008006103c20424bf3ed98a5650f7207367468581b1f006600b18373be3964d8d4cc942e994c5600520746654bdb5319fe323406103a9834bde6fc6ba16dea0dcc003287f26efcf8f519cfe279b4838709768001440eca87511ff23fa8a549079038a494c6bafc782a0f560f7e4c26007003081cf27c7ffd31ce9f87de507eb20f0f9a19ee7237a4b2de06fd24d486b2fb74b6c82036dc69daa2a9be0f59e135fc9f96a382d041ba6ed490b8d0a6365e909ff36930797c5175498cbe8ba1c1116266ff83d29fee19961dd561edafaf9e62862ac8d015995539255519b64fdbac6b75ba6267c046890f06810d298090013d97f2c27ad2ea2f3ec8183e1119465c6b33d43782002206e4c433988cddd1fb5b810d326e4c2637748084a114e5754cf9a52c65974c262060380965ea2e2b1a6e3d8fb423043ffe03931e205ff0d4a88a56862bfb0c3472e480070f1d0ae2057349efa0b46b789728053648706332693f20205cb854c5361d36fcbbb734204306374000b205168068e1516a55e1b1b1cd3e3e60009205198060a141ae006205acd72bf4a608a40a965ac5d21ae1993f20542873b04edf9d7a94d09902dac9f2692aa5362919208048e1aa5c3b1666a5318b5128c562ce3f6b4e9d050a6853ad31f345056ff7097aa9d217a4490b2a7c9c803669a37b8386d3296c026239a46cbc519bb9a501c28464b21c74791495d6ec25701bf7d732eceeaa47095c0eb320a4fe6edc4c124090608a97d2a43dce27cf0e408e806d59577d927f997b23a47bea848ce9f6ef3e51002942f264125f4fa13a850984085c4afd33a74de84c018118c3385975d49fd3ee4107002788218c3467515f5ffb94e3954c2627102318cf5d36551ad34e29c500862988a6a4f3a5466f8f18bfb0dfd4a9e43157caf917c3178d958f570915c3c9de46a1c0469dc04699c04695c04691200200908218bd487a6ef07c499a577d8e20062f4af9fd5d4285cd98f3bb503b3badd8c5a0627649104317b6c6379973d26227cf054af32e64e9305b410e00c00862e0a20a2a06f3dca0728f521a62dca20eaa39b9daa7c6b8e98118b6289b4eabba99540b7438ad3b1a4bb42845e5750755e7769a45c172dfe9bcd8a54db278d52d9767664cf9c7c2b1b8993465f18f1d16c8a7784ca1ac93c65f61f46cffeda75ef2be2b8c5ff367b1b99ad36f45ef419cded02ff39c67c5b14e2e46b7627bf057519875b76041e965ed5581ee5cca9655e6f053a15abc16a164babb1e156e1e536a2ade32b39fc23f21754b5d8e294a37456331737bfe0ef264bc14c5853539c22edb5a9c14e8cfa7bb676f722d1f45b92a658cf371a4e64814675e376bad12d51885c213f931bf6297cf45a0408ac56f1425bae4449f38a498b96d0cf2c4b5eb3a36e22273d99d40bfacd87abbdce79913a7b4639f73fc4edaf326328d1f35f9953c2db3264a952bd8c5e698d6e44c5432e88cb1f5cff818138a559ecd214f8db2f025b6f7a0e331a55cf7d712599cbbab8f16ac425b8973f0b9f84f3b39f752e2d5b4987276ea9cf54ee270ffd7e839944c7325d19aa9d592753187cc4602f5a01add2d8d3acb42a25025743f45cfe3957d44db9d54c7a49e1baf7544dbfda3fa3b6a275f1b511851622c82f1f9f0b09f7a23524598c2565af86e877c3511c96bcf75573125ed29229a37dd71dd4d8bd4f410e59bd418dc624c56a92114f9e8494498d0e9740ae16f10194625a19bff21c449c712aa396e0e919e4194733f9c8d9ffcf68e20d88a9b632ed6e8cf9d4094a66ff5d2bb7e7807108c504169a894a357eefc01b5d49afb9cb7a375fc50fa5062f0a153615310ca3f4511ee21cdb09251f4c9b74aeac1b658d149e4e99c3c0fe96c2e1964edee83f0d08572db60a66fe7be83db39648c0565a6ad1dd60f352a66f3fa57eb508e49ea0593a6b5493a5ca266d7c4ea7c3f8752c58529f313722b2307ad64a4060f525ffb38a85f9ea2589fd07938bc3bb661b12ef6f537282673ec145d6b67bac194f73b082b8bf70ab6a1649e1a66a37f69131b92395de68ddd4e29be062c37ffe7c28e98f7d4a0680aa64bd44b07d380484b8b96b994d02534a0ced57c3d78ac8b9fc10fa5f4732e744ea21932256cefb38c6b4a5919be7ce23c7bae91e593c1d5936f1375ae278f818d5632b67fdd4b5bc4906aaa66eebeb3d386a1edf9f71c7637c71c3020764d562aebaa8e55c96492634719938908c4f8c2bb595c46c66fae3887c0460b6c8c600567a0e1cf811c67a0e1ef934913c4f0c2fd7a22841a4bf3fb75214709c4e0c20ac4d8423906557731ada8c8980ec4d0422763e912965563be9492c9a4076264410c2ca0644c9f347d888b2cc5b882f13b2247b377b7e9b4400c2ba43f7774664cb194c7552898cbdfabe9b4d95a2a34ee1fc2f37f85a5398513882105364be76290417d864b0c28bc6be6a9b76d334853c9641284207c0f347cf0d0817ef0032c88f184a2a6eca994a2096d1aada379070b26932588e10445455e478b968f314df8844ab19452ccb93f87838c1b00e882184c70ab348bcc9c638ccd4b2693d7e165e0781d1e821d27984c7ce480078f9206f8e00648a0d8a80ebc8e33d020230237ce106309a70bae1fd495a753ab1292499ba7d45732dcf232c448c2df6649776ad3119ddb808d17888184af4de7ba7ed6c6fe08beb85c8bbe099d6263844453ab2e499116d3224611f63cf73a1ab48a552c0611127165ba726d4ce5611a9021033202308c3b7c52e2b677bb43a92300c2e082a7c8cbed9c7a0fc6235e226d6c83ff7b377c0400186daadce7dfedc5ceff4211a537e9b427362bef8b2a69af3c32dfda7f502f7add6bf320cb3ae99a17bd9eb2fca0f1622bde859fb3e5c7da24535c541726ad4c19ff4f2eba14637d90a1947bf8e0e2dff78c9a553b74776ea1084fdad98397883f6db16eb0319d99daddcf5a1864f090139f9aa34b5aa47327cd62e159144d6a29cb1f547fea64b175fc780559c974d86251a785eba766df931758147abbc4d3b8a991960902f08ab4569ae95db8e07b72459bf9d385bb78de792beab6585bb2e465ce678577e24584c69c73f85751a874bb14d3b795a30abe4eba29ff2a25359e0a37cea57055e92f99a8c8cb5230eb0ca5d943a738c7538d9129adddc7147b9da5cd9cb5d4525d0a5bdb738e889e5169264563add5735a326d6914e86779b6d2a584aa551426f38d7a32eb7838148bed6ae7509f72c6a060dcc73f5392991acb4ff8292f58daf92474123d61ef6d7b727bed387722db1c6b69e9f4ca9ce072df9858dd5cc7dc2652aa7474f75577f63581ed9ed648fd5cbe66e2324f6b29a86f0ed330c15cc86efa58eafb5f22a92745fc96b0e4b725d27223db74528d365722773319973e63332d94d043c6e9ffe8a0b23f09742e9941d6c4eb8c85810048c2d13dfbced6e134859128e5e552c9afa8585bc964b2a38c1cff832b100048a81f93e6b022a6c5830178446aba4effb46638a5e4084b95c7f4bd9e3765de087c5d6e3699e7a0839a11a5dce964920d3e3ae345ac29776ccfa5b44eaa8af05b45659936a5fb3f89387f3c534e082d612722f091a331c813ba3c3787d85290917d9d6ac46a0ce1ed473bedffbf2174853857dcb83f1313025de1a9ed3d779b3c88469b79b7894d392b278845e6f68810fa6bd381d0aee45db52c8b5002224fb21bc2c4e7f63f683957292ccf4b34f3439f1b77bc4d4c99de07f3b74ea7b751755be183b656eaf9f54f995d214001d803274cb67f4ab193b2aec40619377cc7ffe841073a007a28c7395d26429f6697f2f049515d3166ce9acce3c1d817ad54dd9745c5ef80705399153389d5dd0e59a9461342763476ea906c9e3ced13e24b87e8a09956ac12db398bce8153199412ffa1d308e5c086c9de4a7944c76ee3f078c62cbba0498a090eabbe781ef194528fdea07508539e97a386d70d6fb5b8ea66e950691b8c9f15eb5c536ad30c1b4aab956e9fb239056f0d7b474bb9c6ef3efb86838c00a8a1124a335a8fef7bfd69e062b646bf5911f1d1248ecc15d3bbb75c892ccb6b83303ba131a30625581395468b14a563c339a83109f4b6652d05753dd297c4e5c1948a8a5a31873e1286c80d22e64efd2e874415324f4763b9e6fd11b827df7fb3dc6944e40846442ea810b2d243dc0857e44da613fbd93d8c50d47dd2f77ab9373c34ce5804221ac284dc18f4674c0d456429bc77bcb21391724d2e1f5795a13f88a892f20a3a5399071b0f5185acfd5e6a9053311cd430c43f16effc2a2d43db42fc5a26966c3d84c5871009d73ce96ada493d3888826e51f98486ec2a09e2a869a56b4509ad200b8431780c6fca3d3ef8803007b35cb97fad42d67f603b2c674df5dad255c964e2877e4bc6b6d7a0b6d6ebd0418d3e1c62b53fccf2d279928c1b8f860ede410d3efc1dff3ee755cd49ab92c904471a3d7ef878b42303377a7c082613004ca1c61e789341a920737cf1d895e058c16492c3461a3b9e0337d2e841c68e2f21238d1dcf81c984ad50430fe6c78efb713a2593c90f6ae4a1061e5cd39a32161b32ef5c3299a4efa1011b19b86143a8710783beeabda4b26bd22a994c706ce0c68d1fd4b083df9da9c258124debc2a0461daa509ffec9fa3e5fb40447096c6cc00619375650830e676d9bcc54faa7f3cf01e9f1d3f7540e263a480e8618ab54415c6b3e95779cc00619377a50230e35e060821a6fa8d45a87da984ff6e9a0861bf0b8b95d61ff3624f3a77b6b95fcde908e1a6c3885a7fc6d99f52ae521b8010028d458c317b2ccc2c35e92290740116aa8c13475196e5ddfb4657cd44843e1c19387ca8b562234a494c96a2df1c94246cf80ab67fd9c43c80e5af3821a6630e9cde1692b3c6bd6121d3a38478e921f67bca31a65489f101963cc39e7f87f630435c890e865c928236a2ac663b8342dbb7473a5129f180ead1313eebbb3a9fcb18311b7400535c2a0a8cf71d3f7e03199e068818d11dc984c5050030c758ca7f2674b9ce7d10335be80c886c768d2f2e7b75ed8ceb73763b61be15f8d2e242e6b37a2eacdd3e6c2c1b62af372cad520ddc2493ea7201f4ae4f16347192cb8c1e3c78e10dcb0400d2de49b638ab99f1e333b5b230bc79c316e2ebd18514d95d4c042e3e9f347c6fa33c7cb15f4a0fe737d36fb6596063200410d2be023bc4c787e8f76a1010e094440061fa8510516d4a0428d29c8a086146a44a106146a3cc102359c60c58add5451edb24d3ecef081811a4da8c1841a4ba8a184f2289377d93209757b8d24b09ee6b387dd58239390f08e6f6ff4ec13a34c1cd438c29a2ccfa6b76a6d8c1a01a54bc7e9fbd16442a608668b5b635fb1f172578308e686be8f1ed466c77603916114ad84e950a7e37b7a8788303abb38ba211aa7d2498748302aad14da35676fa70e3052263ee57c0b9bde73bff8377c8c1934730ab79621e20bbf743c07953b89f4225533cff019b459b07951ea67bf5a315319643410d9c517de727b1c1574ca952ed0d6723298caf6fea65c947a37bcff8d09693f2eb81671b795ef5b643b9e47e43393d86dd1a5b439cf44bfee5a8b37fd64893d8f169555925921d2643d26328b72fbbddce90aa63e25220b4ba851f51075b2538c482c446021f28abf35586eb874fd690582882b9af9a026ad4b98109b482bf2204f8f690f6d39342593092b4cf12a232264e59441256d1059859f551ae6548576ca4b26131c2dc821a28aa4e5adef57c7c65281788eae26e782072bd941041599e676cc99da257b2d994c7cf09083c829d478b1b238dac2c88c04320e22a660339f5a7e52dac4eb15102905ff95cf2d64fc0b0ba640841466a59249ae5c781d2510888c02cd51a39e504f42c62a0a63aa0dea1b3ca8d0692858d36ca364b86eb41c268880e23a69de754165c4fd89e5829d924946df67cb12443c61b2b51c2b15b4d5e63be1c8d89bf2d0e963989120c209f355eaf3d1a5fea317d9c49a6a4d48eb98db31543299941c2310d144e254a55097f2aba22a994c26130f8864c22ab1f6f41d32c9cf0f4430f17b366fb5bb74997b914ba05bff2fc60efdd10b442c2152897d4eb66a121fed79ddc005229438296fcf5b236a4106954c26229338b768dacd9774d0750b44247149f35e0f994fe8b5e4f01d2c1289efc32a481f8940e294cfb865a65378ca1079c45e4af546cb39cad1835f070c441c918c79de4697c9f3f48a3442590d99d2e99c951e3342fbf97c2a05d3cbd880c8224cafe11d43f6efba3a0511451894b6e98d501d63f0a0209288e496a9b86d9f72b7f70111445c1ff6b23a6282c821ec183468d974714396440c91341d4feb50cf14f10665f8f0824821f49472f44f79a366372284283666fcd716d11bf320cc9a3ce91ce4426637bf202288b46344b99ccedf9c0fc417a466fed31e358e9c0b2280407dc7a48aca6739adc81f505157723f7818b11b1f44fc90a9a0fcf2e510bad603800d227d405f4ef5f57b6da7cd0fd8f0808d0ed8e0808d0dd8b081081f1ecb3aa3c662d04fa63d142e4fe33ae86ee6f5806650a77f55a4e818ccc39a45c7649fa6783a45470f16d810c1c3db2995ce8ff7f11ebd43996c2e53de67cbfd11b1032263953e7997399afa861444ea6027cd5342e64f074fc577ef94a47330d36a2ea564a8f00dca2115347cecdacc18213b43240ebe498f1d1a3d3cd948040e5e0e4fe2b3c68e9f739137d8219ec43bd885119e121c3f7e88b88100226de04e663d53a4bd897687081b3ab5aeb35d3add67700f174c266488aca16cb32ba347450dc638e65d57f5daa994864283c8195820620691329440840c2263d8f2f7a512d2a3777d44c480a71f5d3b5ae4c97c110943b9fcf793d0f090a201c35a295483f0a02296e204912f382e1e4befa53d697bc1b40ba2a626fae2979a20d205bdee3b6dd8ce29a971a1d8a247d389f5d1735182c816ca0a3266911f22630644b4b0851362bbf922e5532593898f1f2a10c9422947b3b5a58f9f9240040b65856ccd985533c70d81c815dca0a5ddd50744ace0e5a44773a8f0be3712a98225b22e5736730b3a05082254e83f9c67ddb09762b492c944870eced101912960dd5f39cc326d64b644440aa7a0bae7c972eea5f840c37394fc288307689891238d1e3f44a290bce81b25a745750c4b26134d8840e1147a19644c9ae9474c883c01137f56763953767e4b26137f1dcd9f107102fe621ecaeef2557c2593491312a73dfebb683e199b92c96410224c307a9e861babb0ea4ec964e20891256ccaf27da97ca336064b26931bec2823078e34d064b2081125b0597d9fb93a5cc52d61c18e134c266d4619371049025e392f85eff6d4719582081292b953589633b5d9d0a1833760e3062a03004f1039022a4f46e626b9643239828811da505315716f22fc2e994c8020520473ca97f73adc35e59313448870c878d1c2ae2f8cfec3f8544e55749937990be3531f3373f4515ddfb210120cf3c88a37f75d554f438051922d4a290bf5f7ff954c263f7a708f5fa4a6724a19447b16cf0921c417dfa6cb4ed2674f86b517faced58efc4b1042785187f6a9bc54a697da5de82217b8c8528aa57bf9e35b5c7d10728bfe92074db2a1f2de4c23c416cdb7c64ca372ec88580b54b3c7678c7e586e9f10428b6c73bcfb51493ceaa50821b3089145c5e2dc2b42e4b55568ec2593c986c0a2bca2425cf1a824a752c55ef64c2af19121ad40cd9dce7149ec997676a0a18210566079acf3343377b74641c82ab4ec3c1a72c2e75a2641882aca7a5a56365c90499f030421a9084145c8291ad552ea75327797ba6432d94088298a22b25be62d2a58a6819052e82f667933a5983a1c0821c595376c46a7fdfa797410328a3f7eb79f285dbd297546882850d5d2d2747acd42470809456b1d84254d7e7e1f0a018575c9527c8d234fcfe91388929b333a89f6a4b3104f24ebfaae4ae8d81c5e891965b08f904e544a5ef673d6e4ec82460827d40ff37d6d1a4fd3691327692f9b4fc698b436a5095d3b3e4b3cb3c5989309b398e5e77426c7731d3c3c1082893c850c56bd95bb395b2ee1c9be705fbbb6292d4008b1c426b5dd2c9587f01c2b914004661052895f73e730a2c448b1fb063bcae0410825d2db79439f860a5e59c824122772e36ae5d52c94049a9278ab4f112743543299e090800d4c346c281a36148d08882024129040258da1928aa1434ea66432f91d2a08798409421c512b086984755b32a38f78564c0a4218715e0c6117339796ee253b4e3099ece0b1883e3deb78278b0fbd8728c217a5ceb6df835e334b70f8f07146482278a41d21d8c0062610820808841c224719673420c410659c918105841482012184f091c6e7c0012183e041196764a0c7e7a0070f179cc0012182b8c10d988c098404c207207c3420e40f0908f1430e0584f4a100217c4040c81e728078e8680384e861002179f0f1651c20040f39ca380301217750bbf4b287ccfcf4dc0edb2725e32cbfe5f70ea94319d3a8a456dff5827a630621744829253a7fa97d48cd97241e3c7aa0a003217348bf5387ee3b8d3572c9c18ba93468bbb174158e43b9ce3cee863ba14bf340081c4aae3e2fd7ea496be90d075997f7e427d74a69371ce572fa88b8cebdb70d969c7153b93287ff0e1b9253a7458ef6974fafc153bafe5da96aff4535a0f3a2313bc6dcd4c13474c1d54eae423494b35487e59eda877686ccde3fc4d3c8ce75093143481942c82083903174881842c21002061a847c018d102f5ce9db634ea2554b7e2408e98256e726c3ed9a758ab860cdc9a4df933c7d4add82a6df363ec3b65ba685b7efe347645c8fc58464814ba795e39db6e8a40bc1423a5f7c86fcb78b975730731e9df479be53a2b2825666e93e4dee05a12a642a7c90f9fb976a562aa047a64e729f94856a86103285c4ae5568ee974bfa9742694149ada0564186521492b739e7fa1bbf0dd5082150b843b48c28e59f3b694c0879c24907f9eb7fe36bda7342e29fad46e7dea092de848206a563071dda3d258409969ade933978a84ae225842861d994d28387b87caffe202409a720faad63194cc81212be4d6d3a5c8472bff508ba65d1f462f351f563042c748eeb26273200908490226c492715f2d553871022182c7e86861f9d4aec6198b397faa06229d789c240f9b505757571d7d44980044353636a693a97f29281010418657aca8d991762c3fd05905f7c7283dcd8668d9fd717a7d638da2a56393fc905905e5c39b46c52f5b8729717df6aeacba6499f6a4cc964b202905ddc2bda4b75dc0cca4e01882e1063d2f7d3788551cd14407271a79697cdbea5d47aa400820b535ca50e212da6f516e658a534bd9eebbaa96432d1e13b7680d8a2364f73aa4197ca3904811c406a9138bdb7186dc336c62593490e3680d0a266514064d17bcd6b78521f446625938919e805bee357c00490583ca6ec2db66a5634d883478edf51868e1d65e018a30a5c1c75d9dd23c1185428d568d98688d735ad04634ce14be92d87dc0bd79ac16f8331a4b00769672d163fc6f42593c9648263053318230a081984c8a52bf1b2b91b1f18030a633c01d94a0b6777b152d09da06705a539ea95474f19a309c71c374f9b56161dcfc69f91061937fe063b5805899f0493c90dc66042df2696743535975ec658c279cdcdbfa3974a7b09e21d7cc6184a18230963204106631ca1c730c21845b0c018445801c9304884712c9df452c9cfbd7b6a8003fe88cf58411a3f823f9004e3cf59b56db4c9db1cd3f81194f86010d84802093014d1e1840925f53ef83e20f905236b2eea5ec85eabab0524701e264883c41724bd20e1051a24bb38a9aced286a4693ddba306f50512fe47fcef6e4224f2a6a8af929b85e1617ad5c74d16a2ff283e71666e6d7b8f89b72fda30c33cc20c18d1f6894200324b6409fd2b14d67a39a6a383c90811b3820a94525d57d94764af263e301092d2c9df96a19d673c555c24d320b54a610fe779764f89c1124b2d04feffec9113a739c6df4f812f4834b60e346061641120bf5e35d9638bf5031860416df46ddf020ef22548306c92bd224df6d2bf69cd25dc1e6fe6c6adb90b4c298433ed3c9db2445d6e377ecf841c28a527ed678f93e513b954c263978fcc8710392559c4aa9ea1ce35e1e0d5551ca59f58c5db2bc638924157bd2d26cb172faca328dcfc10e1254144be56d7968afda52c964c224a73069f7ea38528390a9db80c41465d399e9b527eca3a60624a540851b5d999385529d93908255d12a6263fee539925178953f598abb55429e24a248a4e77877d0fac92f925094f2f2498f1664ff4424a0d02b654b319f32a16c924fdc1fbb4e9b8c7373b76432f1442b56d5b16b5a3d6525930949274ca7f268f3d6cc5e9270c2b84d6f555ad4bc0b906c02d5fc4b77a531636bc96442a289139064c2d068a2699f4cc993954c263c7efc0e2c4082894cfc29153b56884f6fc964720955cf941ca5ed6a6d9358624df7df14f3aec1e692c9e4042495487595ae98103a3f09259ecd32eee1a6bbc2280424936093997c6cb30a5e35892432659d3993abcc88952412e53f79ab1f22741a12ad7dbb27652b17e42e994c481e81c894546638cdd42f974c2632207144312bb3a73fbb8e9f4a269346241797a36ad4aa9e841189fbcfa7a5296b4d26248b7084ccd226c4a2c92e79ec8044116b0ccac7aab47e8673f8e0922649c4fbde6349c9331d2f593299f828c306248828fb62a95d8b9f82e64a2693c423c7ebe0d123070e924314324ce7e83ce6abb30470d8a11101124c26432031c41b5f63f852c1bcd27b0249215016377e32f17440092484302525eb34a9d31ad7b40492417465a5f7da3f25397cb08f0c00e008248228ad57d3d666874012882ee389ce96fcc34313020920ee94175329f9ff50f0309f76b3e289520a02891f3219c542f38fe8701910d858c18d0edcf001491f48f8f006bddb9f6b44ada994b480640fa9a0c92e9becac1f2be761023378f4f0c0094070430593c90d1f90e861cba5a162ab54529a21c9437762be45cfc906170c2478408c8ef1b154b0dc5d91dce168316818a574d6f4272f90d8612b1d2d651c25b39fe1e8800d326efcd081060e48ea60eccbe94ba3b86c8549e8506719bd8d4b2ab58f48e6608a696e4ac98da7b84a2002378a440ec8cdb9d16b31dae7bf6332312471c8d45eae8fb9847e5c400287fcde84f6fec81853995e056fb0a409fdb30dbba9b51bceda1954f024f2b66e1b18316ef14173cc27231b4ad14ef1a2eaefef39cc205943716954d2d215396b9690a8c1af0a5a2a058fbb9e4b839e63ca2bbfb3395c5432993c621d6798f12b204183490519a5f45edc139613909cc11c3f994ee235253858406286ffc54c878c3d21554dfc3a1049198e172b3c7cc98c977b32141a5412af7e223be779fc2001c918b08f99d4e6e27bdc9cc78e109088e11c9b49e98a272c6ab4c40783a0c4079794c006192a20094323c3a636f59e3a32964c263d78df51c6a31dbc830de400f18f15f4e0400a48c0d0664b53d531cfccd5921f883140f285fe439aea0fefe30ed671460e10dc40ef3c36f0cec30493c98d27f1425293af25511b2f32a90b87f28e3bffd28aa1539223c78e94c30c1fcc831c3978fcb00009171ccf4a7759bc37a5bd05b45eac38a3d35ae84b8d7a8b4174a56db350865731b17f2546af58a82cebaf734e6a5ece15501567b73529adf0058fc14be759854d9d5cbc0c51217e2a24961b5af182ecf40d7abc19132099829ecfc52c877ad1ca934881240aa94b315fb2bc96e460c1771a5c82c9e447193bcad881c66462c69b410285abe2474dd408253f46f2044cc5b59c35d77c89de095dcaf73b2a0831f37213f2cf994f964ecad3b84c3077c762bf6c4f8474095efecf91d51c15bd128a4fca673dba89c993c09d9c7e141555731709124ef23584dce4b95d12488e90ba7ca9c6924d358b0d244638678f264527b7ed8b8bb005ad51992d3794e9ac818408976bcc1c459c4a339e6128a6c37c89ba386e2a348c08c3360f8ff91ad4150cc40955f263a9293b47c208306e3153d5bb3bb75729994c728cfcc2ce362a3aec7eb83c4b2693188cf8424b36574ab3ea6a5e30d20b534e6325c37cb5de72c1082f0c6ee565b5a36465057718d9c51e474efb37eb747cc4614417c6bfa5c6ca66c964d2033623470e1ee9c77fc00d23b930ca89b913ffe9aed57f0fb4610417e58fe377512bccc47a0b74ce992efdddf5b0d822f364723296069d2e538be46f9f1232cab4484779ed8a1b65fee72cca61de4fb36abd3f1c9185db2694e51efb8d3936120b63cc7732dcc6e4a1649230028bf329f94d5adddaaf8463e41506b9e419fa63f26e7b60c415c5e917ddf227573f34996060a4157db42053f0f6f1d45f4758e15ecaab319689030437be8c1e644c260060c2c82abc32b99fd329debaac8a928a3f7196ffdfeb2c994c5430928aadf394a7e84d42fb23a838947a6986f12862f653243b596c3e0b5a49e898a23695eed733c67edfa5d0df4685dcdff6141937d2f811e860c48304384648a1b6e5eb0c9e92fee6a3e835b534b8487105365a60a3c407836032228af4f9a70a999e83c7c3c70e1e1bf0c0086c80e086063850821b698c8422fd50e149fb0714662e35e3b9724a7a42bb914f9cd3b67f98d50b1e10463c81927572e2af43ad8d84914e60d96e64b60cfa474b9c28d6e36a88974736c1a8f3fc9b2de8f07eeac28826d42a21d48956d17fe648266c11cbc92ecc4aa78989ff4c27b1fa1462cf62c1ffe00e8c5c222d221acd5e2cc97f9640a75e1331cb1f5dde4a943bdb6fbe0c9af2895e18a10432cca60c95d74b2e93c6c824de1857649b7fe8ea392209a46a0795e72d5c35a6072391c03fccdea75c37e2cd1b3c1881045b979fe99d3bb888366e8c3ce25c7937ba555e7e4a3b82cd9829d6e6f35117d94823386562ae7ec6114618644dec2eaefa4e1e821bbc0926131f3718598451b3eb686d9c7aaf4b2613408c2882d194bd645dd2eeadea40ef39cef0218891445cdf15de9bd3268c20624dd22b670ce6a29d1ec2f568156bfe2b8c1802edbc5fa9e4c80c62d5a1430b23854094da7811d155dbb1114608c146bbec4f2d257b3f00a630328894881e35d557713f8784114194ccdddd52beb6684b890a343012883328d1a6b144bf3b74c20820fe11dff6a59794ca8ffcc1b4ee0f276bf733233fd82194c7cb119be1b47db8757f2e55df78de201f6a15a931cc69768aed410b319bdb389ae36206ef984c70f0487a308379b80e1554965d4b7cc062240fa67041671b714bb93c7840a69431b3bceeb628954c46eea067fe898ce2e322c40d4c61c40eb7cf59f42deddf395e87ac92c7a8fb252fb9964c263dd2e8f1c3072374684ec4fa83e68c9ea6643291c4c81cb82c37ad25373389931cda945b51f13c870900461889c3657d991f9fc42c653820b4842e71b527f3632593c9c81bd6b8d6d3da1a327e8e1246dc80fec5ded34a223f05b5015317fb216310233d4d851136d4b9aaf1d6b2eeeecf8491359455f5bcd7cd742d583299f890808d08d8c0218108d848a3078e16dcb881030d923d8ca8e1cae7235f34a979d96928834e6d391b53f23d303082864acfd7a47a550a152b994c7cfceb68268307dc6332b9c0c819d87c976a7e633c3ffd8819de74afa1524a4a687ca40ca9109963e560c274ca47c860fae668ee757ae39e23631811c3481846c0d0235f18f1c248170e424bb6077d16dd4f2569f480478f33021085112e682576e6d51d1b3653826332c9e1ce93098e1f65700f327e31b285b49cfd678ecbd1b62d994c70987187112d8c6461040b688c5ce1a4b7d28c85bf19cf5ac1ca31fddca81e934bab6049b1286e2aeed154a8803221c49e459d2d6d995146890f0aece0073f00c1c8143231efb933f4fec7b419397ea051823322852a661aa5e2ccdeae9128601fc53e946b8c6d110a86784e61a3b7d9c3f504343f0637df242c98e88494eacda95dd31869426a1654a5cf65f1428809e6943a7f0c5de9ddf5124ed25f741e0f2a574a2a6124095509cd15664468ba70072348e87f2cc7378f71b4ae621839c27a397fc5d1a64da66504acc4e7e8569327fa1f2982e9c38be5d49c9d0b8d1021d550f97dffc4da66189f874d9b6731a9a0ad30cc0f2b1ff4a8aecf6a30ee0e5f31c520b2741a18991c1d2d78d27e615a7afb9fbda0de2a79a8e18be67cc5a37f0c1f7b31d14063472f8cf2e9c3afa3872a9d92491adc830c1b363c0436fe3d70830d3578919689b3eed241e794964c26386ebc8ee631d4d8c5a22e5a69116b29378b460d5d744a4bcd8996ce994b0a357281c8a84199bef8f4d12f994c70d1a9dded58df68ab7a0bad2c484b1d45597a6c51a3166696adf466da82f6841ab430c71447e9bf91af904b261330d498851f457a6efeaf7f0e66e0c60e34ac50431655ce23cdac9362e166914199f08eb6d7c3025d99b488d395c406f92bce9a4f07ad18e37e0ab9029d53a8aa98c2f5ebd98ad73fb3372e759049861569ee58698b514f8bb244c7193556a1055d1e37c75cf3e755c1d5796fe546112dea5414277bb443a71e71362adc9493a5ec8fe5253f454907a9ee39dec9d1d914ac0665567a84883db914861419f25abead364a0a2b646a2feffc12ed8c42f535b3bed5746b4a51a4d931e3252f21dbcc503097deb27267ee4f1a50dc61844c9a2cc6341af389356532b1fe309672e889c27dcce1229bd22fec449a7b454cd39cd862797bc6ec06add984a7e13dfeaad304574ac8dd512a9940f5f9c7ac22d2dcae92c90413e70d31a1aa427a56d7a3c6256c7d8d5316475e88a56432c161460d4b9ca60e8f76b00ed6808d1b94e16300bc68753dd9eb85feb67117afa5942e3637623ba48b348cea385d0b6b79cd4517a4c7b831d596a7071709fd31a6163334ed798b8250217bec427334d78301d8a29cba2e5774bc16492d99ff5d399a32430b83c94e558ffa2b6e9985b71fe3c6e7dae6a01a802cf0a0c2e5585ace96552cb23af97bb7ba13b6616100b0c8342d9db4b06caaf70c06f08a764ba6b44a371355b9824f4bcb99298bd9c85506d08a45a9ab12317dfaf3c38ac4c459c694dd6c83aac7005651caa06abd4b54052363dcc5666b8490a56275712d31dfa032e573a457810e06800a65d32fefafa728fb65b95c67078b650f06600ad4a7a5e73856713e278d1f010e06508abac24f77bea7cb34499192b1d2b48b595d4ca9151d031885965a3be575c6a4b4a248f68d88173d6186c28a2d2528cea2728cdea139bb5d3e7110ed7945a79ccb79fd407c8619391880272e9d4d5f42c4e9534a9dd8f46b35a736f1c94f9cf8746ac709f9264e71c63c9f8a9fd335c199efc6efef15bb33c1bb48bb8dd953a619139aeda66e3995cade4bd459298dcc312e47d31229f9578da5612183a912e6a8d97d6bd4e7fd1225ce9349e5cb7695c49726f1457dcbcaac31c92d49a23ccb532a53b44e971489c553caa5f855e709129f0ed2d4f27c9f283da2ce2f96db5a6bcfe4882c6cea9e49194f428d504b97f2a0499bb7881166d7556e0dbffe418b40576edbb88a315790225cf71271b1fba6d289e837cdd2e991d12223a250a74226a56494490fd185cebcdc972733c710288d33215a7314310b815c72d16c1e21eabc39fec9cdaac54178794fb67d552e888258cdca638cc143a703a1c76ca24ef826551b208c77d7a43ef67fd03b06a1de7250495ade0f858d352a97d587d75b933c8fa78259cf873d698ae7532fe7ff1e10192e99acae18c4ae07fe3ba5b3cf4c79cfc39699f29527f1194678a85a7db7fd84524bdf61d7eb3cadea26dba16bb9fc6925cf2b5b8744755ccc3145f7553a689fe22521f45345e7e0763cd39dcfe496470ea82d0bf263124f1b138763ca682aad57ed0a07cc8258f85b8af0f00ddca58ddd1ef2213770aba3b4c45432d7da708a56bc0dcb756371366c97f5ea4234475f83f9c4984a224e966ad0733a0d963e67bb4fc3713284ee4c493d080d7586cc39e3b4f6f6339473f6d30fc23dc89019ec9c3cf7d7763fa8cb70f5e80ad579d9e36438c698afbd1cd3b131f0497e85cdfade292a064dc6ff8259eadbc3e0854b9daa74b89439604073103ab6855e8c7ec114f3fff3492fac355a5dbbe9026b9fd546e74249b97b4e4278120d6ee1a876e2ad31664f6bc14e42889b5958092f0b9becf65e9a8e9ab07010ee95ae41c9946257c8ba6389a57e3a252b949e36f9cfeccd5650153eebab244d4f8592a6f4a55b9fc2254bec6b5cfb432405c48cd2415e639cdb51487ea99c6356511966281ccf84c9ccf60965c51c537a693a4ddb09c714a7fbd4fb2913bb09069d29e3a69009a87996ca9669afb484b229192ef9c650f2290171e2a92a9e0c9ab1247c6e6a3bf574d86c41425283daa062e6c37f042d86d01657ad37af36c222d38753adafcc5311b0ccd197346f6dd20088605a5cb51ffd3072b9d296cbcce3f5c2e0c6fc47dafb7ee9c1d072e4947ec67abb81917b2e8ba33a67d3f62ff4bcc9e5ec63ca3afbc2302fe3a79d5b94db0b33e8d2a16764d014e505f26563ba9e7bfc8777c175e9dc27eeb2fcc3ba50dcd2c958ecde063917a9bc39081551a5a9312e9c4bebdf6472492b7c8b6444c57d34b7ad14db628fbf9a5df2cab2a916551699e1b3440bec9386ecb1d839fa2cb24cbacf54ec7f8e6491ca974ce7d04d9ba3589cd97ce3a8fcab1082451fbf643c9973eeaf5f510a993a6a595764256a6be63b8c655bb157be322f15d9522e2bce947917a6fb36c5ec2a4a96f7299b684d6a5955143cf526d98ca7beb2a9b054fb4ba86a51b186be454f0fd95f3a45bf7d59679f54fd37053efebb9664f62f7929bc8cb1721afd3e22440a43876be5e8286c9d8ba27257c65c8be2564d3acfa1b864dd5e67150028d08b95559fd9bd5805f089946c3717a51f3dbd2a004f384246dd4e762211710f9abad333cb092b73a5cd5756587613a9e95e5578aa978f26d28c9e529477f65066c20ce282bfa99838d73c8831afbc9ad14b7cbe1f3c26995aa2ec11fd95d274b7d24aaca147e894a5d34f89127bd0b01daa954f972661eaca660b113ada4b4251c14d9bcabf5b3a12e8dbd353e9fe965a489c4deeabbe4fc8bc9e47209492794ba8dc41aac711e8b2947e948ac9cb9c4674417969876fb6090f231a0b167ff36ad2a93a8b28a736f173f924e3491166b43cf7561e74f6139190cd8a232bff7a8f8846dee25be6f4f9fd1046d15e7974a7b3d80dd1a81c56e9ade6935e085faee46c724d737142a42cbf6f5a9059371a0497d7f26eb6a01f468270d692784bf6621b0ac4ed398f69d77cba8200517cb553ba496d5bfd876be4a8a6a05521c37e3857d2cd1a2e572adc874f868e05b19df5b27ca8c28a909693c814a37bd8b4a9cca0533ddc5622da2adbfa67320f57c66497df74ad8e8987422c67f1ce254606f30e8b5f079d435a1cd1a51dcce66e429e75c836a920659385cc1d1daccd7e16d43b4e757328da674cd52aa74c93c34167e8d806d38d57c6c1a064f0de13f2b2a6120ebab6acadc6dc9f93de60b8589add2be9a0f36e382b8758b4b112ebdbd0c9d9b051d7e2579c0dcbeba5bd135ac3251be349a7651821357cab298ad59d86c2ef5f9039a64fb568b02a6e7b4cb39aea7306d54ac8f5ca8d194cb1e389f30d3a8969cac0ac8d8a467fd121346438ed7e098fb3d6b13363408fc70d2a5f8c18cc31fb3574731c7d0ac36325277762348a1e0c889bd0e96fe35ee95fc873a578c2fcd63ee485e426d5f1830959f1ee42f9ceb2cf9e5abd9b0b57d9c9c889bd477b0ba7d393de5a4a65d65ad8e7b6675ebc8256b370d4f11c1debb2a2070bf599ad6abe79b79c2bdc96664e29255a2119b62ae9ef7c1a935885f53e77349983a8954885f2bee8becffb9c313885b2dca814ae548f67500a7b25d1f19bc3578b1805b46b4e83c6e91c11a1e08db2f11454c8584114c0131211d2fd736cf2f350004e50fc2d6c2e55eb19430134e1e01f738ed17a3f9a04c084b2cc44951add987d012c0195d16b3d7b595f1780120e42a84f9f3d4aa62e8024581544ecc91efdd0058004f367abfc9fb0d9b0008e906533b51ea1d53f1680114a6bbd593edba77c055084845608d9ff24c7dd1300118c1e357fc8cbe49bbd61a0d664bc6c96ad7b3d6194720cc22c6ecba6ce05e3ec39ceff860dffe701e37c5d6d5b96498ce67e71b8bc646ea93bf63b5f98328a4a5d2a658a97eb05aa33a816d3589e29c78b3c6c34152baed6566e177e6f8f54f7795deb7461b053ea64a47765ea72916cafec51bb33c91e17f5ff68abac96b3e56f9150419c88d2e176775b705932efd5b5b8bc63188b9edb644b0b3699f89c35a64c576771c5acd93e8ef2d75416b96cf9297111fb9d58a4457a460f2a276139b0d84fd3d4e906d33f5fa1e5a0543fbfe68ea7b9c23739f32754f011a5b5e2921a3fc35d27bdd358f1a92ea13b87d5968dade2bb1bed3519eea4c65471a564953a8d968ab6e22d85529e2f7f860ab46eac07bdcb1f9f9d22bd3152477e73079599a20faa495cc78c0da752685e3ae9bddaa4b24e8aa299bc2f6dd274e7a3e03c5355b65b5b131245579943a86bb118a25014ce5f63d0695058f12ee7cce1733cfc894aa751c1a205d96a3d51baad2832c4575ced0426cbc3ff7a348e0e274ceb9de3c7edac7d36616fd8f4e2a62dcdd4c4f1e4bfef4fa90f329930cba56afe249e39a660c2cc49c89c26f6941ccb25febe4ea9d1e462f48a257a1df11ad433898f954a383b97bdaa2a94a8c49a9cde9cf3e7691258296142c54d41cc2489d26dce94ccfaee5224becef6ccba23534b90287954112aff8fe0dcd6d3c9d85ce17704baaae57ed4c7ec7c23329ffdadf5f8267546184e0799b495ceef68117f8b868c25d3ed458ab053b634aa636ccea2449827d64969ca1e73230215cf472c567f8efb10866fcbb4f9adbf6c43b8a25a4577d4b7d6854873459b5b51254d4c083c274fe1d372bdcc8338e81995a3374af71544a96ab63595fd581b084b3634c797d89c5440dc33ee1a33fae9a4f38762a7749b5237e477fca0bfa8e45a9d1e54a70f6813be318e3c4b7bf2a1cf5aa1d4b9877454fbf7ba5b91a51e12b6a1c694ceec99c9c31664c83229765d413c24c45cdc950a153d760754cab52ea7e1aed9c164e2a30593c919c30e5c0c8de92e05fdb994eaa066bcac51276372dbd0e1b40d37b1797ea4bc73b88236e1b137f965f420430e85deeab20b62e9b21d076e94aa256d19e385958c31e0b07a46fb0d08cb14d56d444b4f5ee286c644da9cb6b92ef54630461bf6d149563b876ed5870de9b3d7167ff551a35f433157f78ea9941dd7523299a4c1a3c70f1fef6a6844c653e9a8dfb166490fca4869e0dc728549fb98bd361a4eee2a9f3e7c4e27639c41519aeb4e4f4bc68d1fbf821dc30cd9891326adcd54ff5c86724ef5478d2a6f29870c7bffe52cb2d3a5d3a5ebe091c303638ca1b0fa7ba5b4ff8f89c59007bff4a8fb71b5e5b1a38c1c1d18230cbb450d15c5a479c955329968600c3028322893330b3a8c8af90242a5ecd1f7455fbb2ab1c0185e48a918fd695b19cada2e18f36f43b4c70ca6943848c08536c7bca922becbc6db82163dba29d3418cada785e36d50aba7e6637bcd8279d9648ed5dd7faa5838695e8bda6196ec42577047fb94c7b314dc946358e11053b22af5973c8df5a81430030249180c040281401000048630386f00d3130830304c248cc482e1a0b28b7a140000403422503e26202a1a1016120c160e8882a1504010080342c15028180c04434a41a4cba9f01522210967c753dac63ccfdc0190fca3d721ff840da09580b7e8038ac78f8f6f1f8f3cc2e016f8969b6e584d61b54f98b8457f92095345895657f4f7ea8fb49549317603673eeec8e34dd9006f5a267b5f39059fd937d0e2397b1b7cf3f41f6a08add4582cbde457eeb35adbccb0f001a700b67b351a5b7eeda98846f414dcc05997257af76db0d4a6b2592536b661404dd5c08aa382193e7e7f3efc2cbb27b038d38316c9c0626399200c9aaa3eea8170956e4606577e50be039b91ec46dc588821097ad5739a2f634d2371651660aae2d738e5b2d4c4dddd29ee572b9abc1553137c030c9d4e4e81e1475be09ab40d9b64c5bb2bafaeb025a830982923da63d9b8665a60ab3916a897f8a4763ea9af605920ba166f3279b7a7b7898184697689b7b3113609530684a2af59a970927d8cd063b16d0b79f37d2aed6897ab9972d5c6234258cbc6dc595dca47f38c086173891474f1b9163dc37dba26196da1a709c715d800c95332f4cd85045b422814a2f5497b4d409aae7feb47ac26ee0bec0f389675f920c6c1f2896880864fec06958f401b6d6e19c4b4896ecbdf5dc506ea1b284b41938d90bf64e1a7b9522ccb295c53aae5bf0cee9795fa2c76c34cb58af0cb830fde2a7ae9fd655a6582129977e57e28eb2e6e19e12d5b14f23b09a20bbbbd4703713de0ba9e58f3260c9fe320fb6eb93f5c1ca04c3533dbb8bf49a4edd0258d6a6d49e95553843230f5453d436c9e7ea090c6a20ec8ac33a409ab0d6ad208f65a30a69996db629e05f6253e1bc1785e7f009d9acdee48e011d37a40a211e21d5833f50d99d41679e36bcf283635e018546ac007fd4a925f73abbadf3a8194ab04b2ebdf52362f3096cd9d0e74f6ae42135829873cd4696c67a53ed42b64971b48bde97cdef0b33de30e1564fc5608665995a695ada8b8f6f2165cb17a85945a4541a4186df9fb5d8a8a00eb88c4b299d380cdd63d58822aeba8846aa0ceab043fc53b7455093669347b2ca9ba4bfc9cb173721468736b0c99d0eabb57aa6e85448955233b049825a0c9164117f103ad55af69d4d59c82652c8d842693c2ae16ac338c69ab1b64aa11d6c34b3cb4f0ad1eb16a356023b6bdddb36feebcfecf0283c1e38226d0448cac343e2a0674bf1e2d6d68784e8bf1d0a8c10278f1ad69548d247079f5d1e47739b66e192f1741c7382752946118746029922c1d31c0d3a7d9e006d1919b3c9a6afded32b005050076921fd009bfcf2a12228e30aa71f399698c1430c810bed2422bf8e8811c0a6b00ba236902c0fa64d382fa6d143ad56615dbbdd334b06fc598880c6be66fd8625ff637a3de86d4e4f8d014c4c12d12d90262d3d8791ab055066c3773481703eb321099406af312507d9702ee580bf48cbd67f923e032fa8819608c517de31ce3e1b568081814457e3623be15180165f9a66546621d76402504303e1cd2ad7e376602e07d28ef19dc23ab5092bbedc7743c0480f1b0efa02fcdf50d92f35851a948fc97ae644f803cd08cefdd0dffab9774c1b1c33a0a608617d160fbd4a113e82e6ddb4fa9b9e157191ead41289892f6b91068958cac29e474f7d9be474449a5603345099cf4147a6c08dd6673948052d75261c58beb1774b6b44aa9d58cb95c7ddd36ed92feb289ae738f5a05e261f9a6b1e53432d31d8db90255fc151a7c646e2f21cb81119dc27fb3178746c9369484f46d0871c2ec7d683f19672767fa969946cea09fe811b60b45a975fd9dc87da9c2f70b0021109f7ec25543e960495572d77a3a0187226e997e3afefe910b4bdeb5ee3298b8b8047308e9f6ec784081b48b686bb1adf74e8379656bef7083326d9edc868d21ec61965e84e076c28e88a4619c77af4d6f745121f9f7c84ba752a51ccda1a4d309cf7b4ffe49ac8cf421b7183bb9ecdfa3b3b4cef055f0d8da543f1db525ee203b793b6064c448c2837e1aa554000927adeea2ab29a7c36b2bb4969c5050efdc7fe83293d2459fe194b11a982d1fed86bb11addf281aa23d34f9c48299db3b007568626e482bd1dc0b571e7d91879127dae721c2d5431539c516b37676ccc5ea47df920962952cf61cd4264b4d5722bdc269a50ba6b2de94ddcf56f3eaf74663b9cfe9ba55ba556ab16a271d7fbb42627d5a4ecb79d6ce9af72d78a58d9de9875b5c934dcb63530a7d0a9f7e8fc8196e149d44f0934ce55b7fed1b3f438688dcd5c2b49e10cd84479f25788d479cab93398bdc8a2838700abd16f27db0607e671316b81dc1f8b907972597077540f2789e7f907bc6abfe2c41cf0dcbb39f6831300936310ba404408ff6135b6b7e64a28bfd14c0505438a7682c7d8c15ed77bd70dbafa5e9c526fdec74ba8eb9b712484d70c9e4704e4dfbc193c13d7caf0fe6feb3a89d1f13024a36f70c100909f9b32f12ed4b3e386e574cc978258f2bf5534c6adc47de8c241d7b4726eb1dd2ba172792c29462664182f0d00e58508e13c9bdea11244b65defb752d09a7868565a341b02f39e9d7bb92f09c6ba51f2964418200648219bdd22d7a482105ee8b0b4cb61810b4dc71f6b54f685b6328b413161b0cd00a42433cd44a888df9f061f6666abf56446bc0520a5ed512ddbb5846eb5ceb70ae59e52f3ff5d35cedd9b191807a30d8800838127ce7e5261be75ad534209b8c3e83bdac2b2e58ea760dbe178f45d59a17f281c328a7f533ffbcb78c6269d89b1dced62da116a790e73ee728237dd5d9d0ecefdad4c0e240b17fcdb0737b247b006c1346a5737e7772650903c643f01de163443d8f011add85ef0150a5c681bc85a9f97a343b57e6d0d9ad919e849730d8158ec78fb1c25a185b993c24f3bf2e6f9e530317046b22300a69fd7b106db37ee1fe3f72d614b888b06b11102f9dc003094f1ae305fea58b3e8dad7c903a2ea3c36224bf5421d11fb2e346ec525475528ad4fc47d85fa3d7133aebb0c274d7b060ee8d1eee8a07a3117ccbc523324185bbfd50807d053ab8e09011656b5167b5101ce77c70e485fadc3184c4189c1308dbccdcfdb2d0e5d67a5effa444b6c0bb04869545bd790e6669a2ac3ce4ec446653051e05581bea9f41115c9986102fb5cf46e5ac06cfe8c6d86758ed7986ad55263817142347689556de6b7a0cb9bb9265db2ca25d5d8a256ea127c8ee36fcf398ab9e8c784332ad67535eebfe80c889d7f6ffd15443f8aed8e0bc38accb5ff2fb784e4e44012d012d0e2bd761d1f8d84e9d92193da1fdf8cc9a6658eb5d9a09a624ee3c55fcb6a12818583fe34db9f098963928bb2fff578486fc4f4e1b3e5a088401482e9a48bdfb26afc53bd0ea0218dee9316a7726d389c452cd8fb31e6275901d841a47c7d67f74150d5287a8371a6717a1ef5bbd12e102467a8b4ded05a3981306d4a6bf1bc408d4a9f2952b76a0b996828ac06d205069b84dceec198b0ec59bafc494ce80a443331fa5338e7cf1b80db78875f8ab8d228a694c640b12a15fc8f829228d7de2fa6110c977516a213ada31c87f50bcb8b4979305d0d653691779a5ac4004c51d8b90ca757dff9bd307f24e1a4b02946bd77273974df4d26e5f3b594a9e61b893e5b47a18167f7f04f225ba28b393d2916101135242af96c693b21ea5af488ffaa3b55ad3110830474e7103bd5cfd283f8de268a67e26272069581865cb0f4d0b7184a286930a0848921893dc0e87de597d959cd596e1b8e3ff862c0b6c3dfd709b71e47458aa127d11993b6bc9d12fa7cc38f594c9ae799c797bc0ae52a261e5a07d60ea6a351d66600a054a820b47faa797b934377d088caf52fa41c3bf45f815675082ee3d8b6266f0e8392ad66456e22401d44a5914011eb11d12aec0d8c84f4bd3e0c1850cdd6655931238fff5932565e06b772906a91d619946142809793dddfe1859072a22196a22da51ff60b4a71b2f90081d7ea4674fb8f0f36ece4e9b69d4005cb31fe8ddaeebb88d8ba0ba534f82df1f9155178db5fadd19af12bfe916cdd1822dfbf14f323bcc465844a9e53cc0669270a8ca6bdc727c4234182962ce34888f2d67538041841d655ce8ece03a913d40c1efb23c5ce9ccd679296afe49f520e3ecba016da1d5abf6c36a8dbb28d62a4f78b0ec237c91e19cd0d55962027d15a35ecc7aa18e613c540b0a1066c37a105e675d6ed0c1f7593f518e8d428ef404ae3e55f41e92e24b9b93ca62e4e3131de90b97772e1f84ffaea659df83bcedc295331feae5b26d5cd24b1aec93c960a2c747c401b3bcdffa31f02500729d3eabd9603c728ae4d185eec00355a49fdca3351e7903171e9d215a56cde820ffd7bee37663b11e117467c5190831d146280c0d4d7d8b66ffa30e016181eec007e72e3b457b6d27172b8e07ed92db98d3711b09ec0b1e9bc51e448bdbc33464b11d61cdb1dc73680b69a245cf2cbf6ee661311830e057181775306bca882ce260703503e2b165f0d40419472824ed2d86e278b716d9230404adaf5bb87ed3b1b30cbdac1f96381ca575facb50304bc5b917b30bbaa04bec3dd13ee9034fd04b92489264daa518033d1de5f5b02fbbee9e1afdd96bb231cf5266f6cba8132cc841a2344671ca20bb1e68ee3a4e7f1b42693b17476c0f3c8f80f7e32993764a08c701330dcc412eb1367ae0e42d97bd0c301d1ee75d34c45cfa34b2c466129e03534027bd17a9b8b65f328f5edbc8f01ff0de2346e022eab1fe63d212a675f29944af4f5cd121593f7d3db730ec1d876c034d0291093cc7359c6c2fddf077cdda7defd204dfa7b2d488f28ae543b8474465b36b4b0893de434592759ae491fc4cf8b743242cc06e578f1caf17a4c795d641c4349bca0ff3c9285419a30a4dbcd032a5e4f0d171cedd51fa752c11f1b7e673ed5fc5783d012cd03b2b31ebc792fd278c74ab14f781ec05d4be3365c308e00ba31f9af1c037a37045a77832dc68aab3b9ff7cae1a0d36810dd6c1830732d19cab19c795e83381df69217b2bc085be05336df300b8c1434dde8aaf1f2fe052fdd5830aab01c71ce61d6acaca8fe81bfbae5a9e02b290c74b0b1afdc31d0e37de049ba7f4d2a3778495fd8f9313678f28b72122c71e8d1a1d091122b4c5655954f85e05807bb996ae3a94de2b797b64e11216fed0f3d0def227348514a59c0f9d0b829b2baa5951412ac3fb993b9ef529133fdf462dd34c25cf5c45d852a990b5996eeecb46e05c9b450eae46738466b32edab7740bebcc10e95ee3d804ad07dde99262832ab32a830b5af4c13536c7faa79d85b774bed09ecf31c690a3b24848b55c6e6523814da78a8d250ff7fbc26a3ffcac7a924d6541ca7b2c3aa217d3b1482021b3b470c0e9eab66564ed5fba56b8daf7602afceba90c762a4ba30e1fd3ede7aed985be8e6668566f8f38be20db2a4e6668d7f54dcc20880159d95cd388dd48d12cf841cd528c32c761b318059a9d18268b1a72e20c02cf1dc8f8d5535132d8750a884e989052887c41954a860d739f6e2143238726cc0f8bebb0c01c4ea0a1c23ac79436d00e0fa927154fb4d08b46683d9ea935196e3a6a36ec29ab9f39b38a00286244b4d81f58eb31d4302d907f36513f82cf79ab7f7defd4dd270bac014d7f1e7c5fa2efdea60911fecb23fcad3767edf7d7d7d6605f23c21de2896847442ed0cff3f6cda63b2f659cafaff0878dc52d0b4fad0ad3495bcd6a973fd8e69289200c35c61c576bfaaafed92b72e3319e1ef22f9cb8c8fddfe2bbf3ad6b5cff23ed35b689217f4dc6b4a4bb52d1dcc47b4820820a5be2adf3c2a80851dd82e709283d87cde996ce9d17278afad7103be0a429c359c86b6f013c864fd9f4c0c5f44a0d9ca348d2817465ac114f2c3c6ab014ff2894e4e76c6b0a70a697de725abf46dbe64cf42294877f57181ed46ef537b6898794651ecc142c12619f24fc395a3071ef911098a5c6be50cb6b19506c3c6883703bda4e00189d33197c7d8658563be5b56a316048600c81607cbaf1210bbcde9959ea715721604e5e4f522ac9fdf156fa27c91b76af449e4a2cf2e793f402ac03b9fb16dbdfa5e945f5526869880b4fe70ae3c051b29aa8ea34394ac93272062e6dc3ca1833894c76ce9a49e61872662e91cb281eab2d6ea6322d89b167e637a2e8a3f2fcae7b3ca487e7a6db911a1c2c4008b7a59e077f6fd2d2f3ccae2699e46bba905df2256ddfe9c7dc3279e629942a4c2183b42366176334e963ade2e3f5c53132a1c93c35f9ac2efbc2544f35b6f83990ae39897b0cf709379a55d30113b69108cb0cf701ab4102a0b9e1c650003238c2cf9e73b742b6afd4001d73d7761dff0656e18ace510e5b7bb554715e5b982f9bb19d749141fa1db88bce1b4c70d244b95e4a36af439bbb03c885ccf9f7ed481c7dc54cd2b56b0ff0ab7e06c439650645a5e2cf37a9d19894369a6cd900a18af9e4d005fc85c9313677f3f6d15e44c0826e161da9304d0a3331acf0f4ecd17ba7eef8f1520d17614b761ebd42016bedc1bc39429e7d7aeaec4fd1d1b422350ec7367de3f748909d5f09451cb63224939490b551d16565ba20519a507cd48e2a645a7d14ee79f4fcf8f501df900a687be36c741be53adec41b215597c165b1e022c4b1597d9a7755d13ed621f700c1b593920b0e7490ab34d0bedc635a730cfb5f71ca9c119154615526e22db3f69eb983e5ae469ca86d4c58fbee25a8c6ad27a2859fb7c528e45e4f3906c7c68449d9acb610de658e4619d27162875e8ce0e7d1fe945f0edf1fde1e3fc600ea05d277833cbedd2a9cb3bd8e14be3e628c00ebd369b0d656df43b7b9482ddc835ced6073234b2ece79e330e281a530edd51397202956c2fe481858a4e82042d5709bcf491a343593cabaf23fad793ce2703e10b3a084a004592709038cff141dbc2f5fcc897fd1cb292e78dee657908939d8d013ab00a26ea45eb5ff6dee14bdfce72dd1da95bac40a6214387b4f5a2989f2da51ea2ae8c23edc22c4be366910ad6da102a6a41d6c365850c58dee1b5669a09df3406c4e4085d011de4b1dcbeddb5d13b6ebd5ba5e5d9eb07718e4e19f439b8037f1ad86a9b6d5a557eb2a8bbedb3a0ac58be62f67f96ea128e97c0d4799025aaf9479671b90457223d6c5e6adc8b60b6c095c79600d28323fec43a5303f7d215b600d85df95ce140223019a473ebe176a0f247c846c13a83bf1108fdcec53bcac6b89921aabf6a93142882fee0951df12b2dadcd04825f7919e0a716d34a157e5b0144c48e8d1205c777151e1ca337707507b64489a0376a707569ccad89043798448cad1020443102e21d4ec93e687a259601cfc58413ede575f76e4bc3b8fcf7c34a7a990583a46ad35bd730c273668b80d0820828a2cda17ebe29d76f58e864f16d12e1f127da36826a7ed8dc80a464185860c97beae51172739913fa8321a666676c46ed1ef42e763c7dfa60edc24a6d1e713143b1efaea2630a9aa3967dce9823ddbe3b4176809273b05882d66d70dbaec0c3a709934210e3a3286b79f8a4938b33e43618cd2cbbd81d994efe4ebf7d7bdcb4ecf00f80a0b48995c1586bab51fc98cf76c4d9ddc94f096d5310a1f273547ecd2eac6b63a4644c9ab4b34f4a3a3766bc4bcbe9a084698ad7e71937b49604efdcaad73317e011ff70c99e8a595c88c4884ecb8e330c664bd7e59daac2525d7807893ca9f706b77a7e3e276610255995ca1e3a696d5bea0f7fd78907cbc914a7f55755c809ce599648af9c1c900b5d2ba46971a78f88f2a5600259f84910124d05447c934425645f79e2a50438a0f64a9d35bf9a9dd1c4a10028d7c7683930fcce826e74e41109bf2189a5687247613f8216c323996dd004e47636d756a0be34389087e161251b9e0dab7293097f01fcab1cefb47816c7d42232ca484c91eaf5cfe37dd85c8af96e5e09eb347f0383ce2f33aea1e823dc0efa1d3bbd26989f297d4ff33115e244dc59b1e2b70a8adf73ca456f745826738722622dd863ef8cfb6dc11be97855c22834bece89d5885fdfb711b4a51ead5e02d0e8b9d02b064bb76e2786bcdf38e77a3fa557a4b9067711a1c4d13ac2d8d55e0e485c04533199ec91a81567f09b2b6b95497ce3286677da8470256b210ac76f39f663f55430abec6bf5d54adf95dcd0096a9901958c67110bc9bb9d2d24afd3d1c20db2dadc759d4f24660962f32eb219b5ee3a0d1805a49be0cf54a524b81a6212b7763c80103a3cc8083eb9776052b188fecc86e87c1772a27d548f54f908177f3548a1f458eb064cb3af18b259dbad3d8ce1caf82ab05984d76691edb466a601e0a87288f64a661d75aa4f6432bd202d9c3f847189889d4cb8c1e2df4108f5c84e4af5f43bad10a0493371559b910b48de77232094708a2d1966bc29d804c9ddf380b1b688844a7321cce9d1753b1f8ea5ec1a605a9767aad0d73dc228ac13a11f699f58c444224ecd6d1705098764184843c86560775849fa03973e14231f0b6eaa482a024078fd9b19b9b1ff8149554b3f2880ef234e8b8e492632980c33b2ad6d22106e6aa852b6a7630b9267e342b4ef35de8a7b2aa9802a25001d95a71386b5a9ab2cc3c62e8c0a980db26f0c248e00ae18913a73e0d9ee333dc0838d1963f54c79670665b313b3642e4c552b48d6404daffa73da268d36ab9acd33e91b3dc01568d16687bcecde2156966efa807581f035159618c90edd73e036fcb8bab4c66a11bbfd04a252785fc8ec0152b034512809615c8679140cda4dbdcf378db14f44c53818728c198e85536b505632c481f75c48857d4e5e159870bb05cdaf6f3915cbdccd78f1a976cc995d07152392d68057af1800d39c92b9d084188afefb251a5e5666c46ade28471348ae0e9d4d23ae7b30f47e98dc04bc0724be483e149e74120103579d1d1a1442d02852ad833dee6c5e0416d364d9e246d933d7deb7bbd631e471c70ae69dc5771225c10c55845cd9aa7b887e8f4ec80fab725275dbb52520f6103ad252b065a63538e680e30e9023ea0245b73e8405b95c8a5a5aa036bfa0fba2189790ad675a6e5620be79bb307f97f82cf75b5ea16fb38852f00ada87a9b10594af25fef0b19e4b9a362c6d207f854c534d2668f084c574407fd5b73e4d09dbbfb0458e3b2c1efda3252f83f60903f4e586c2093eac4f5c454cea0c8d306d3c4f5f3e6dc987be1a6c53000ac045d47893f6a2b0d19a25a258778b127c6245c764a62e11884b107d2e4455513bce730af824dad69db7030fb0b71d68a1142b996c07222da1a3a8c64852577e8dbf8606ca501604834f366ed8563f3eca70e60aacad176b9535f3d83ad83394474ee1b2e522baa9d836828c1ce278feff60d5054c870802b575a79de2ca13b00c8eb1f930014d94cd833a01eba02419fa144c051e39567664dae8b0ca7ab087fe9cf40f59e2984dbfb0d32af7cf5a427b450d430a59dcc3270620397d6b77d4672c8f53b026de1ff2bee37ed2da6c48ae8874c036522b923aaefcf5bd8160839581ba9816abaf64767ffa4080e3d7f45bb5b6fbe63b4e9f23e71aadc88b014f529d6ba84d358a27bfe94f6a54182a8083df29e822468ee704c60f988e234d3c3c1569341894b362dcb45ea3a1fcbcab8e79633410e5f8cc1438ee0aa0b549e7f3a53b7e00c39be4ed9d8899a12330936748a4ad17e284f215ae108c752dcc5987035b70663c147692a035e6a28104aa2a427ba673867f03d7c9b924c5de25062c093838357f66918230edaf290380b1a07f3d3679a9585836eecb495ef35c4d17f210ffd301b7e4014bfef62de601e174e01d99599d0370871bc6d21b6cb673cf054f6b5c171721bdcb81e264e42b6f99ff786450666b955ac6fcc3570162f44dd6104458c5c2b75893985b5badf914b5530c2d2c05d3f761a721f62b3f6fe1502e816f05a3eaa824b0e20937e7067518392efb14072101537623349a06f61c639db1d21d48f57659ba1addc515d6b42c6536be761fda5952b52850c24d13b2f0f2785b60b8b353d955182319384e9e4c04fe1b10c099e0bd51e7cd1acecab0305bb32abe9931eaa42d2604a649570cab694ed558aa071e87484a16240e4c5a33775d2090fffd032e022b90411a393cca1829731acad9dd53b172fe98ef3796a23637586272549d6a1cb7fd499fb49ce15e6395b3077c5f5784349702c2be81ca13a024034985624045c8d6673e46c129abe0542dc00f9f55edf0d893f1d84c1d0d145a8a5925bb3a6d21fc415f81890f11ff4ca65aa604c469082ab26e8bb7f51ab2dd001adddc7cdee23c702d0915f5d6f7d8fc0be242b9e418d10fa6bb583eb94ca6ffd08def5b75e37e5a77e414f63ddb994a1a0d2a3d61d564c48c1c563af96adc4c35406efd9875d22ddcb16a337f330b658049600ea85f9baa6acbdc319ce781bdcfc86d6caea63defc3fc1964e319136e99fb17f23d6c1e97e5ad1d5c772a517f045ce0a6065f094f872f45578767ebababc46b6e6d2e8d118814b4f7a177ddee553c340823084488eb54c90880f3b5446430e6a87fe30b09c4eb5f4072a4d36a99380ceaac6db1ec175f302d1a5ed6f179311139fe97eff6c538909f21e1b919ea00df6530beff2987d0130a6047b5288ec907f8aee1e2ef89b1158782fcc892a61a40bb9fde9a4d6d55730493dd1c0ad2067074048db8b899972af99071b26c4eb5e47cb359658ab3bef9c3a1511b2ec3034eb60329c346e2eef767bd09298f1f154e6502411235b89931232c6c3bb4d266f27105c3c74a450a33dd748a01bb5071b7e6d98f14fb8d1ccccf26da4167fbdb5cc682b61c1cd5f72ad0a858afdd12635b4af1199ee2d553f05ad2d55ef52be2d4d4b471ac9fe7f0ed50c3a75c418c16295008f267534c4af33564ae243bf7003f1e677657221059074965519da70234bc211459878de498ed0a05ef62c7031d9401e84f80855ac48ab4c129839ac0653e7ab7dfa0351de42800e03b160d85839ace5f6129bcbc0e471579655bd0fa79f32825ddc49093540016ebaa039c5fde01726b2d43f0e9e6c260a57089d5f9b24305501391c303735508aad9749b4d93d0cd14b18b6734fd8f8189f3381ef73547b578e60325f9fe593c158e4ff42d87baa3a2ef80ee81d826938cbd7b92ffb2247c06805c16843d278532eec12d975b845060065cfd448fbd6315cbecb7d352887b17ff8cfe9c9ebecda0a052e473b27b8d36e23f347710b470072d7d79147c5ba0dcc96abeec870def96d4ebf2f2b332b18180545a85a704f7a07286af72748cd2a42df5b7152fac4a6f2446873d415a1e8a9e21e47814b1c69da1b90ffd93b4702a9fe64f2f56d1fa51f4d4a3fc4b19c903168dcc7d5501b013e506738fd14f7e20ce3ed9e000cb9ee49527e0650ed82052724853932fd2ee92cda5bc15edebccdd20328ccc17198a5d69cbcf969ccb2fa5a7ba03bbc9db9df46dc74e2765d4f5865fe614f3cb0e10bc547bd02133669f523713c317a9461228b4679f88cef1a70c8a05975f01d03aceea4c631d170cf20b09c088279c0e3d81007693b3043ebdadc907e8be6616f570cb1cb24e8d62455f0b9efbaf2eb12b092e4ab31a90b817a659c8bf000e3dbddd064900d6efe08ea4eef68430dc30444f79821706a9a5915c9775f3f3767a399eeeff1ddb6b8a202942d03670e05039c9e8aac38c4210b2d6175463830f07e05a69f5025943a89a898cbde6b77c19922a919d286c9a3947dbb9480be7cc8fb7ebe9ce12f5cd73c6cea1664b78d862081f2060881ee7f4a3e7c6ef19c64a2d45f66ce565b45e4082e1596c9f7309e90e4cab85abcc10c795b0da68262f6235bc3ec30267e53f43fc9b6738a9e5393ce96a86bcb19b6f2c6b6a77b3d335858b3135a5d2ce75270d3364361788d961c4ed468d0f51859ae054b6b0d52ff8b8033a3b2882302bc980283991d584b6e41d881a9224aaff2c62ab8439b1545aa368a10643f5aec5eeada6ee4507b29c7d67ca251ce122e4b833387de51abd481117d924004a3caa272ed7090d48fd2a15951b22c115001b8e331aa27eccedd69ad697329271ea5b28807e924ce04e658887d047e1a6c390f9c7cefb7bfafa0360cdb60bc89b43eda58c42d796272db630cade40f9e205eb799a77f23688a83d69031d453cec4c7c8127437cbcf50989f9b3dff959fba72090eba626c77d34825f363a68face7358dea6c28032c0cf605623fa7d5938c3c8cfa1ffde425bdf8655375dfb85bd8bef0d276899a1c5864f10c177b072f8791a09c7c68f968a7c476eb84e8970ac9a9f5f0cc2db9beea5236b7ec71fb04d4525794ce7c06ad5ab6b3c900f97260e4db55e0d2d13626413ef1cae4bbee42695cb82c28a61fac41abcacad468d52c4a5b01b3e2e1da384256b4fb1dca50491c71f0fbdcfa7e65e0649eb6845b1376202d632670bd3c2720684ac9482ba9886d8ad40bce3273037081d6de9160a5bcffd92794334678bd0d9da583e5ded092db172803b5f68a9d507b587c149be82445aa909213e522319043b069196ea581725592a93cc94fd5943a111360da4ddd08a107237dc898dd83782a4d911cf616437aa4cec071315da761701cc4a17c2899aaa1c4c28ad38e3ad82885335a40b564b4f18f732efe911fd2676a061d97f932ce26d7241c0a837c68d5bc4349cb6b80538607456a14b011ce5657bc052fa51334114cad891b352ce5baa4523928b955a692152901527b756d69b25c29992aac2452452556b4044edd8420bce9199330de218a99b32db179b1cd130e6539db6c6b0329d2337e376dde70e894524b641eb2a43256299648cdb20a3ac00ab6af9da3f598c996d25fd2d3538e56b20a7b5ec7498746d49648e644e28cde342f38ac0af990268ed8dd0ce4eae2618b4db3639fa33a4cb3164acff60ddb1b574f066c93eb3a671e03319d4c1823f7f64bf024887bc2e66923b411535293ea5ea2b9e126b0dd05a11f3581d52158eb8903822c504dced95010880077ab050c795e6e51ff53dc6323e337bb8675aa59c89cd4ded6e805135806fd437319d3116fc0512a4bba5f599209d8f6ccd602e0189b93bf2b4d6365baefb060950ccfe072fa2f47b7771c4db93254a59eb20888bc46fb6edbbfe5280a0f7896092c128d5b186bf93d2a724ad4edf75096fe195a92348ac186ccebc961f9e14dc3f195a87339f26b43b92c3bd2c4de238111cee747628ff5ba626fd865dd2eb766dd74bb551fb4d9c54b6993dc8aadf4ec91c95990ae072ffbed7d291cbc2cb97bbb5b73f4da75806300cd7482471d25b0f4c6387db4df4f27ed46c44fa303380a9a52dc35948952dd1d9481522305f71606e6421e3c7d47954ab5a941aaa0887157075f7100a045ee76c95a4c1458054b215dc85eb20aa9a5302299e51a117b424c3a3049665382269694494a3f6594149b3579613dd65d6f751b6608ab020326513e47e1da84ab568c82b5a3a7db25b04acb2bc7a1e2f46720448553f64d3c5468cac6c44185a1ec509ca9c0a9fdd130f7711f1a9413b43b7fb6afe785c62fc9027cfa02de4445b50d3840b026c3013c0c3c0c3c0c3c0cbcc6f05bbb6f76668dfc945292531946dafcba654a29499928cf88d53fe38c73d08834696a193bc1fec705c60da00db50df5a3c786a0c61bd6b1ecf12c74d2a069306c50c30da798d5adf7ded6c769a8d186930999b6fded420d3674a93516775b3faaa80b35d6608ed3c1d446cebaa85ba8a106fcfc3afcc8ac24a35632997831997c61022fc2f0828c1f3ecc80414fc01d03ed3f5c8c1e4b82c9041035d280d8efe7525d1ae6e31ebe6307185e90e08b1a7893c1a30706ec50030d79d090e7f934bfff3f03fb9d4326f3cfe8c13783f95ac2ad4795a8e96530bab7a837cf92a1b89deceb45c4b4a5c7f06ac61455bd18d0a6330779fb9af3290ce5bfeebc36a143950c867744b528e1f17b33fe0297c9aa9386ee0e3979a1a44477ca6ff9f4e37601ddee9b99bff4fb2d173ad513d13126bd8a6f013da2ed62871e954fa4857464a7de5de5f5106561cb6cb7eabe6241d394aed48ef8f655af806ebaab69911538391e736dea9adc5461b5cb4f4984ec2c16158cedc9636d058b63d12978bd31b333f6d3862905a4960ca241bbf4cd15055543dd85ff5c5d4f1035a0a0a94e991f377b4cfb097e0ce57f99f4f3e6da095d103abba7bcaabcb8099ebd5b9c7ea906130c4299fe5cf7219ada1a4be8648e2ee3312dc630aaa1045cb36885cda756b5f2458d2414dfe4acf62da92591d06bd99a58d8f872fd114a1b93269d519e19a7110c1dbfebe35d11b8affc2c9fb25c7aad06114ca6a2ff6ca9f0ef1a30bc98c1136a0ca14baf9d97fd824ac16a420d219484bca4223d07a13e97708e1a4138e894fd92377d97411f26a80104d682a7cda98b71f5a9f1833bea5a10de195f4f5e420d1f5c9b529a9775b2a07e0f6ab7923be1173eb47a841a3cd0e36fca612ed84953a140631798583fb57a336173e96291f2fd1ab39e27cb73e17974b7d8a91a1a35b838ba59debd9eacf57c0bb475bc8c8bd1162695e9fba34fb5f3538bb354fa05a553ff9e460b47c35fb47fd1f97ecf82862c8c26a392c56c7be2722c8effe097ead2eacb030b1aafe84576ce3c3c6bbdae504786a58b2b55adb4e2b958ee6232afdf335660babae25c6793a14263156d304b1e5fb221e6a2031aaab83a4b66b3998df72f15cf6bc61c253779a70607345081b40c726454fc146dac783a9f3677fd638a83e997a6556a90ab29994c108d521c835c850ccf11a64552986633cf4c8c78877314484be1399a78b22a4561761d19eab456d24391aaca1584051528de4b196b932e6d8da54f1c742575511a6ef57ac20f1f234b5392393ad589724abae2a677baa83a27ce9653e964f83661eacd1d4f459126ecfb8af99fc2b3923e13797e9aedd931d18ad2a33cbd3fceee4b64ae6a6eb9a373d29325d8d0ad71c3ffcf3e8a40a31275caed71a72b1ea6438973aa5e58d13e5edbd2984467b9a4c94fa51ee34912858c6f6183e822e1fcfacc9a52417906218136edf9c64d8c9a111fb16d25399a496fb094e408647afe39933642f593516ff972b620c308563ce74ba394c5656e1175304be29d4ba48e484311c8d1d13929eba8ae9e44b0fbfe4954ae533956682022d9399d0e72a387c0bd34a98bd5d93755673807bcf0010d43a453bbea5f78acfccc021a8530dfecc7b5c876d5d020049bd72dd8d6ade59b83602cc9d86d7174b3c5a32188c4b25f458cf6754d92018133b6478f094ce08b2fd84d30c6184b461893c91734a0110875d53ccc68b3adf831a30c09d000c4d73eaabb746d8a15fd03a6594909bbcfb0def941b5b713df3b1e7ef6d187fd35e8202c978640830f9afbe9937721459bd00a34f670facccf1b6546c5e84ea0a18743e52d68cb780834f2c05f50aae466ed7dd2e9c12307d2c003d24a868ea5e46768cd8b0b7c41e30e950aa254d2b982cc0bf7c75ae00b1ebfe30634ec504c7ab5b6734fa7340368d4218dfaa762cbdd966a2574a03187ced3a3c8edafaa104b76e4702f68c8a10db931858cdaf271fec183c70868c4c1bd4b9a748e9279d487432ae72c89bbc8a42d7fc33aea1ba2bd65337643427c977d1ed3f4296e435b296fd28e22d7351b92711f7dd3296b69d01acad7986ef45bd88ba71af6d423336392277b3b69702e076549e64fe22b47030dadc87842f996da4aff078d3324aa378f0acffaa06186e242db462e8bb4cf97210fe6d9b61f3225992743293d688e5ea5b79dc7e07a12ef162a778a278b6153a7f7f4a9280c281dcce2c5274d3525180ad916623be51466c62f20475cea0d17152e2a2f9c57db3d94ba1c34564a687401e1693c9ee594d2464e830b7f3ced14d6c3253e560341a0b1052d9b9ce7d0f92dd8490734b4500717596e16a791052fa78b6b3db9a1848e8592a7b8e8e129c7e46b0f1a57288ed0b7dc78ab32b715eaf8413b9356f97a78d0a842379bd7b27934872da9a0fec6a0bf63ee589b338573ab45db1cbd47eebc34a4a0959b5a68022f3880802f7af0f8b100e8018d28a8a556e1f22fb5c35030c9686c7689ec06f51312df49c4dd9d728f9113fe9331e99266425fca690232856bd42063c5f48c0905cd5f29274e5f96b5842d7658952b0f196480c1061a4af8bc32fa874fa9f9f449a892fa98424be7e8dc2341ad7d3395434c06b98f508b4e71cdea1c96b211349fbbcf9e16c12cbd5939ca2eb7b2443086ebeb659b3a3f0de133cb24c34cf735454278ff459f6b6ad76cc22070aa73b2d8d1feb434404086e73925b4f77b568c1d3aceb0401e68fc20156ee73fc99862192ac951c23dd67dd881860fd2a76dabf3dd83626951d553aa519496060f14b127839e68a98ee52e5cd1174a4f3f3b6974f16af5a9935ac5600c3312264072b16bccf68edcb83063ba64e973106177ba85154aac6976cc7595638bc4d6fa5ffea4fe54e6a38719ec3d72b8187d0108fc30c303010002482d8a6e956286d72593c91866bc8e1f3b7c8c32723c8f1c29470d74fceee801825fef8009bce08017ed3b680082c9a487c7a0c792f13e821ae87800a4028416e7cad73432c70f32593af0858e1e246001c82cea114b0b7d2759682b37ca4b2e75dc1c20b1d0c278aa18762f75dc2513f8a247182c0081857677ba2726a4018f0a9c00e4159acb88cd7b4a6f3e563299c4c0dd478e1d5ef2234708405c81de6b7daa746a2f073b00d28ad463df768d5ed0a196e4e8c123070d16841568562fa53617bb372b06c82accdc75a24f5d4aba3f25930982a8a23a797926543e5c0c81a4c251693ad888875c8f3000828a42fc97d805d35ccf4f615ee777ccc579cab6292ea1365888dd956e5129dc5a9f5d8d272e4c2545326c3ea152c94e9ae1289266227f43070b6f124541ac7e7bf04251b96d99ef6a40f1eb47b3af8d9dfb2e904f701f4f7d773ef5b9929e683d0565a5c358da729cd1e3c701e944267f837ed19b32df5d4201104e9ce2464bea743b67f5c78e4da47183aa6432392369c21263daf9336a8e34550092890b806002e412209600a90408254026012289078044c220000289359defa9653a155919401ed1fbb5d57a1cd7cb3b007e00e288f405a1a974e7e512a3e2014823401801b20810452cb2f3e236d0e1030c90446472333e9d864a49fe8830e37f4c07995e93280f81efc77fb820f783ce31444ab8a65cf2c464c3a503a41069cbd88cd50f0dfe1202fde3de31be3708a489f8a052790e97328248e9ad10325cd8c8b53c482030dd6e6a4a4dc6c55602020845e4fe857ffa0fef8e559fbc134b2f3a881f181fb12cdb396a8966207de02fac657debfeb5182b80f001f54c9fcd3fa90a207b304be631194cc87ca53302103dbcb98486ccea664126e5a19853c48d6511081e522aa968353ac9b1dc90007207470661a393cd981e1d1640ec709cd351c3b826bb0b5601a40eca77d59614bbced97f02081d4e75b1a72b6c4a26132680cc219da2b57285e550cacda759ec573c47e390102394df76974cffc0a1deb81eba6af34b66be007903a2fb520899c17d5d37203daf6cc6eb4a57f13658513b65f5299d6b52367cf14bcbcb7d38193f90351c345de613a6abc1bc2929fd779ec16e0649c3bd15b36d55a64daa2480a0e1e41e1a5676ad5d5c90332c26343b43e4088d1d182066386b7c2ff62fc5d4f93340ca004206479bb0b77a59df3801640c7e0a76ba73901a933a954c266240c5242da94f73c96482049030b8d6f1e14bcc09d76c8180c1f9b85fd5496459a5205f30ad8fb651d63105292a994c9200e285ee3f8752a22e8c4c09205d28c89f527963c71c55c08b921f3a4ee0638c3126e085173f6ae03f76f0a880173e031d4700e102c816da949a2645985f12b22f8068c1d6d0be773608bec8e1450e2fc0d8c143c78f1e3dccf0b1e3024d00c9c26d216e3a775a4d7d320208168a213f66548dffb9321df0e6c10e72853b0695b5c4b6120a7ce1c3071893c9e7f041461340ac60bbd806d11742d9782a005205fc672f555bacde7b878e9f4c20d03b7460603201a1c2a6b284e913572987a9641206c814b24a3967f6364d19d792108048e1cede398f09954f5eb86432f15106196d81c9c4082051f04676b8fa789b71f32050682bf6ae66bc2de7aea32487db40870f1b803ca11793222a66d1646206881356bdfcd5e163755a91024813cea4fabe5b5e7b4c64c21f2ba98719d9e1f2fa0590256cf626452c5bea780a4409da25f96071413e4092f0011024801ca1986b39e55e116bb13ce3878e1d3c749801c408e8f4e1b593fdefc615a4086a12b3b43e1d3a689f042044e8458d54bdd2ea96be18408670c7ddd0baa217af4d42488ad0296c92315f0009022653b986baf6035e68e08b25800061bfabf294f2ae81f78e2a80fca0ce2474bae5fdeeb083f820154dcc97c685cf3ff5c0d3b6e949f78ccc4a82f0e0939d4f6e465f95cdecc2d1b3da69532b63d875d1e9b50beaba27ccfa5c3c16bee205add33b1b17bb07f963f2d3b4b9988401dc624d213f2b2df8c9fc4018802d3c29967469c8b9f8a65af8b9fa9fd92a5f4c163672c1ba9ad86d0e1acb465cb0d6a172d0994a84ad2593898d5b682944689edcaed9ae6432b1610b73a5cbf01b635cae16c56ae7ced0d894d7964c2623b0410bb3e7aa14e9273a7c66631668b514eb19d5478f6a43166f965a6690efbd16148b6fbe2aa4c9f8504f26b070c5657f94907141684a72f0f891c3c9d8808d576423fe969e34e6d6b4e18af542dd4edd9f8a236d45aaa56a5fe542c9fe6cb0e25c3ac59b1e3df51ef5c0c62ad0a62a5b8fb8cdb92a4a4184750c6a73321925d8480516b3af656ed2b12a4645fa63b6f0b499725c4c828d539c94a87ffe7850292699e218ff47e8b3ce08364ad1b856c9782652d89a827ece79496a278d82edf49a314da7c7cc11b0218a7477f40ca76275b0fc076c8422f161d44a5df4ebd33640c16fb27cfb56a6ff27bca4b5a2cc7810ba3b1ed8f0c4321b2fe9cdb9d2b35d82011b9d4873ad4e8e57f669dc021b9c4829cb41cd6a68ca7de131831c3c9a05363651ec18cf5fd33bf33f5c8c1cbd6377d8d0c41dfdd368ebe5fe626023139cccd64d336f96530c13cc565ae8579f6bce974c26397874898d4b943e77a9b0137171226c58a2f4f895c2929eb7cd88b051091b94309b8e49d6ad05811e2ec6ee580f70c1c6246c4882f5689a723c9992c9a47950e08ce6418107c1193f74f4e00183f5800f30ae60231276b8139662e957780d092bd76ad02b9e2ec95c09b2f1883e6f8c51e1fcf38d6c38c218fe6ac5443e08fd3722d5b184de60f2a17d6744f24fcb464477efee8b382bb4347ab6f6f0b8224ea5739df5efcc267522b04ede41d6a952f93522ce1bff2a19bf497bfa10db5a4e23b664f4986a432c239f16636ef4925c88b32e790c3b21773226441b6fc3051fa541942bd3d9a8a43be55012442174ad65301919bf1408af5c2ee7166d972c091025999722ce649decfb0747c950bf3739dfd0faa15261c54d8eaff5ab7d407786b2109f418853f9c0596f6ebdf64c31a37b4888e5f6482bf5d07c950895eba5b6948762c653abf5255546880793c7ac98d13a9e3fbc43f235b3be6cc815d9d9c10d9fa2bec469ebdca9c31f74f02045ab3cfe74c83cb5fa99cc1c126e15367a1e6551357238c8d9bb78260e48cbb623e42f577906077ed3557d4cde88c5dee0b7594e3e9f7bef2937e0de2975d818427d4cb561db1db7d2b16243b163fbca75e5967e0de6ef9437be7faae46a30b97a8958f6552fa5a10e8f1321dc473e080d59b589cca5695b34e50c273ba5c3a7bb30313947056c98210b627bd573b5510643fb83eb7d0ca2f99201771bfb14a5f5c0c6183019e45e4a2552b3c462c84e478cb8bf1435736c84c1cb34d73d7ba7634e3054517753d56e2639978d2fb42f4ab63248cf957d800d2f94c4fd35c5c793414e1b5df8746e5f34216b456c830b6b4a2fb24ddbc598a31eb0b18532fcfc4e78586b9e6c68c1461652137536d24d8637b96432b18185e4e46645fee57a934aae50acebe5df0fb1ce7fc96442011b56b0bc4ecf747374ebd70c1b556073521944fae68cccf961830af6baa8cba02bc9940a6c4ce18bcde46bfa22e6325228be664aada52a3c4c2561d88882ab9e31a9f2ac136c40e1dcab2253cc6e77459160e309a9a4d3668d796de9de09e98e74712d1d6d63bc0957dccda361d34c38f6cf34c9a09d9d739650b6d8770a1eb3a18432a8d7659cab77b704c14612d20fdb512ed948c874579699c75c17b723781bdf525241e5d5af3e40000790600527b061845347f3b6aad3f09ab35104a3ef67f7f4b431934d84c48a14e95d9ac473c88b31d818c22a5a29df3f9dd0a1b321044f8ba7d6a524ba711b4140058bb541aee7948506368070feccba1aa1d2636bd4c60f0aaa3f6d0cf5aff1ab0e1b3ea8ca3657affcffc7d4033c5b29f7caffb6494d82306e608307250ded9b547d8fd8cc21bb30681ed9cb25d2ef2a2344175c52baedab82d89ca692c92447482e8e395bade62984d6cad041831684e0026f17a9e9731c655aad41c82d92a7523aa54f45f7cc08b145aa3dc920be69af4c573299f808a985ee27f26bb2ac62b4687cacf3a638974c26b340dbdb469197eb11220b2fceee7869d2a6a78d85553b635a7a7bd3ca2304166dbd9892aff55a17741faf307f7aa8132a16263b32425c9109bdab62972d994cc6086985e92a7ffc4f7b8c3174c48015e6d2f023e279a63eb40a3d6b120bc2ff1784a8228b7aba73b8cf315ea9c03fed7644eacde66310820af44f549051c5d7633cc5f1cbf67546563299e8083145233e771ab31e751a538ac2adc618a5951821a428b563105d9a4bfd6e1fa3d894da1c7d451f3ac6f01f3a4a6890e3878b210aadc28aa975b08db1138afbda93d229cdcf860b28cca7bd9355783de1499f3827ad4d96b3e6b3423c911e4f2fb271c4219d284e846c224413219908c144c825528825422af180104a68a5f3665b4b964ff53d7ef808994488244222110289f3f6e3dce53bfe948fb87653e8ddace9fe46471832ccfe34c88b9ed588e6c2762ea7a0eecb104624d6435f9706392a438b58b47cd2184f29e2505d9eb39212b17e68e89eeb5356c14204329faca7517bc2842187f0eba259da8ca3ea2743f897572f85ffec17dc421c73d664f2e3f9f28208f1aeef8519cbe90819847aa1363659478f3d09a2b7ba20e3295fed418148e6fe8bab9401a258f1e46c8edd26717dc81f0a42bf5f724d93b5911f52a147f346b86ecab74307078a18217dd0767bd48ebe7ce1497cc8dc3bea5879ec4c1b1042f680a95aa60937bd98547a08c983bb75fe4967055142a5f420040feb888a41c754f72e9b2a2177c0b46cac4a3f7d0c21c40ec69b66dabcc94c9e85d461df19159b7ac4e4c41d84d0e15122937692ae1f22d441c81cd22e37293a8c92c9c792c924440e8c6ee5e6ae38e51dcf40481ceef091225355ebd55832b940081cca9695497ecf74f63881903718f3586cf9c9f8b13b9309043ec40dcffb8e87ba8f27e5521281903684b0c1144e55ca1b43e5c85f90c128709b011642d6a08d8c2e56e137be9d4c10a286903424b46bae1ca5a2767043d0107286138498a10c9d927f5d59f364300a1e1042064dd63ca3a5fcbc793486f23e7ff6534b0f42c4f09e9b9f6578c6f15318dcf455f9b5fa64a643c090ca72565273ff42ca455d56cd75485d43bca0a74f41cf568eefa6902eacdbd77ecacb2ba5dd03215c28778e53339dff952b0b846ca190532575f409152a6b46881692eb36d11c32e9f0991f2159703d05153a85b3f51bb1f07c9cb948133275944b26931c3f7638f7f0104c261608b9c231eb3f978e0842ac70c58a390999bded9f2c994c7c6c481542a870e6b02bb57052cffd121d63fce0b12347c814d2d16ff79d642521089102a74d75e678f964ce9720240a6ac9ac2d657afd6d2f994cc2088142c9e296744d53177f7f4249676f4bcb543125d90965d116f2c47c46fb52134e212c7a9bbc4e31499970cc369a6cf7ad32269760945173ad9849c46794908dee2a1d96f93228edf019b80b429250d07a531a55375f4e2141ed98b39b3c067d6af1a28cf5407b8ef61e3c7ef84045c8113e354269951e15fefd018110236867f36f1fe368993ca4085a9e90c13ca62cb150081190319907df6dff11396408b7bf675fe8f354d134851021b4362a8910b1f7b8a520840421e976bf39e67ed9a84058d5cee742e709d1110b427ef081101f9cd57d8358bcf9107f480fd02bfaa3ac3736a5afe4870e1a84f000a583ceca3b952b899da383506317e55842476a9833659d9463070f1d3ebc078f1f61e428c38706bef851830bd4d085eb15fc1ab928284fa5e973dbc9fc2f3c064b82921ab838e770f96ce3954c263e62c05ed2a3c62dd29bbe647e758b1673c96452830b7ce1a3862d92b94ecffd9754955e8be4eb3ae7b7905be2d3c2ebd693f7d944e94567718c144fcf205388a8c8c238a5d2cac88cdfe18f851e479c6cbf9ce4e7182cfc1d4da67d2ffdd2f70a6f943ccb31479afad915c636f5187d74eca4fc56e466f2f71de743e67532d151831567f74d4b314a2cc3be8af664985d532b3293aec40c1f3976d450451a4587364bedf8d36aa422994ae76dcd2b3d2797e818638cfd1d3a0e500315493fd3e35ae9625357e314a9b60d1936ed54c314a5e6f89cc6d5ce93bc14b7b8a69f1acbb83d29cc4c3978de50d92a6914f9ebe55c664c97d11685d97f4f4f893f9962381479be6e9dc77ab818148cb525fbeada9cad7ee2d0d9cbb29d396aa327ee50b6a953d67cb1349de8dd7456ffacb86b71e2bd55f1a0be7e7d3116d4d8c4fef1ff63ceaea763af89d2968c88f7f0b436cac495523625eb233762a5a006263e194f6d3cc8cdb6a41cde3c769c1a97e853cab9dd63c3b96b9640c38a8a6939acc4769ece62ae4684d680518312f5af074feba963b4ca1717a83109849eecbb502a22572db1400d491473a6b994543e378ff3082613ee61811a91287673fc6fa5811a90a85fb64b25fbd12ca51a8fd074ca7bfcb69461778441ceb4c818d2630aa546a0a1c54aa66897a54d46a0f2b9979ebad1af9845d441e6b4e4934c229622b0ce27cad69408bcac2ee5bbcbdb1897e4e8f1a30c1e3dac06226a1ca286216a1422d520440da2845143103502a1c6ae182f6b7db6fa4bcca80108b646a858f95be1f45662801a7fa8e1871a7da8c1073d7830bde1f31a7bf8c45bbc6fec341a7fc90f333cb003032535f4501efde6a1824aaa725c230f68f3cc7ad152eaf4530d3c241a7379626a29dc9d831a77586d4fe67aafee98643b146aa63d594cc96c54076389ca988398e837253aa4364a5a9cedfca05338a831079392536faa779621960342f6a95269e3777f7130ede910b5d9a38cfee0e088b64d2a9ffd277d7d55b046de70d0bd499aacf5bd588fb8e11255631b9fae62c646da501232870be249b5ad1a61c329c6f4cdf79bc37466c68ffd11c6c81adcfd8bada2f4e993691e8ca8a1a44ad80619fdf46ee760240d7752fa3278d575ae68040d886dbbd1b42245fff571c686c08c9133fc5b2aa6765a906e560546ccb0a5ac5e9aabcb6069b06097946bd07f22c3bb29a7091dcd91311c4a85fcd19b4f8eba47c46066fd245b7349550c1a09031bc3ebebb22c64f460c8849217f739fc853428b32f314a1f18f142d9b3d5bdc993275a77c16cc282b60c9e1ffd94c008173075a6b24c25dbbe7a640bcdee685785e9f6af235a40db488f31849e855350d7579a639e73584009ad9bb7d53a7d0e5e61b16c7983e66ac40aff57bab04984926d268f1f3bc0f01d235578358710dd6449a7b8bd8c334860c60815f44ee2a229f5d22f8b9771060946a65085cb35aa2969440a56ff88ca99ec2f7563c2481492496959ecd28f40618bd172e9d4fc97c4e263e409678e516ca36f89b28c1c3c7ef4e011821127a03a3356b4641831ba532688c04813543565a562da234cf87fc3a5d49cb37a4eeed8268c2ca1a8b956e1d2c7ce9707c0124694f0654a6f7af1eaf3955333184942dba7bf46e71f095989f1ac36cd17b5468e502abd9d7b4ddd32b43d86ebc08010468c70caf6f3bda36a64bc98e08c1f0030c24811ea1c2dc54c29f878c88c31420453d6ea113d51adcdc810109b2b2d06b3f5717f6ce758c188108a759ec973a95c30e548100ea72ae988a714f6e7112074b9c2ec6208a52c657fe0c5ea0a17a7a6e774b830e2033f46549a4fcd33ad8ef4e00e3d75da963b467c233c784f4c05b7ac253c443776d1d987f54d69baa10bd4ce6b4e29cb4b9749702317d8bfa898f1d49a99b9810b4d7694502a851072db1bb7c06ae44a995c051d6728dcb0053a557b54d0fa27464e851bb5f0bdfc4d3c73da4f715aaca5ffe6c25be3e9781645d14145d35ef5582559d89a6ddf628bb130e954bf1e2b69cc1883c53f42c67a2879af6d5f518fd6a68b8b41db45ae40dc8dabba89f1b0bb15afdc955c5ad2e8576205a22d699ee952083756914a22e37fcc41c8bd64126ea8a23bcf6ad2dcabe3e99170231587774aba53ccec7808841ba8f0fa62eb3acd9ebaf5831ba7305712eb24bce37d4e32c5174a650ae2de720e995218468edcd47121851d23f74ee76614887bb2a8f5bd28fce83352469b3c535b28dad7942e87d8a0f82b586ca88aa543ff44e6d9af96629cb54d7ac22c4236736d3a717534ad4e29c9469d135550425d8a1b73e5ce36a1877d79ab76363b4b137e6c75a8bb7fcf95cfc41a9a1fc77ec6745c31717a0d1b6e9bb2f7f98d4bd461e305a1377fc3127bfefffcdfce8d4a244377cbb7fc97d09b921c3926930e4c800220e840066e5082131de27addbe31894e5350b15be3a4967c4312e670353a5bc307b5a90634500600e4702312057939566c2ffd5eb21b9048be3c783c7d1964fcdc78c449e88da6f329854e49371cf187df20ff416d842784dc297bb16432413718f176ec28ef70523fbb1b8b3845fd140d965b2a8a371481908b1bb3730e9be47f23119bf41cbf2c7df47d6f2002bf11da1d2e4b9ee54b2c70e310058bf12ff8b8e87fdf10561eab39158318e17a210e32d4f3bce584380895cb4a3eefe6ae07c108f116f6435d78a5059156ef1c6c76462f9802d147931b545ad1785d02c4725ab5a76eae76df3fe03146dd11277ffd5e3f144cc72dc8aff4336e1ff638d61e3566bee7101f50bf109736688a39e71eca3bfbce59f3eb92520fef7cff6b90b34fbfc983a5efb44fdba9dd208387d4d8cb858d317748a3ab8dc5d3953fb3836afb7b96c262c3a5eaf0c713691a34e5061d9eef8c5174de92572937e6b098caaf73c173385582c10d39747729be42b6f9f581b81107b33ee5e3ff05ad94f5804329490ba5e27490f9c6cdc1430c1cdc78036a3b7cc55ac96f30959891637970c30d0777fd3771d9e29291831b6df03b06cbabdbf10d3668eafa3b8af898a94e6b48892ab567697297824870430da70de2a5d472a3ad5762801b69308da6adce6625ae3c6848772d838e99c4a58e9ea17b4f4dfa4767863269e6d8e97bf3e83cdf2843fa52c86c559badd3de20c3b92b35a7f8b1435c24841b6360fbb665e77437c4f0fe8ef67cdb10bbd18d301853e967314db5aa991b60604d6697d6d8fb4a991b5fe0f46cab7ea790c13d2f582a098de9620c6e7401cb4169d3772ae9644134b8c185f2e60ecab6cc639c750b5f9e2c6921f3f55c16f37bfb7b16d01c473c5cde9c79452593c90d6e60c10a3aad2da43f6e5c01d59ad95f33aaba2e3eac90f2f592ee5f9aa1cc2aa099e372a58f8f212a2a7c672a32a7f2e29ddf98829ec5d4c7cf96f38e66c60d29f4dbd983ac8d11313a3d6e44c16e53993ddb5ca78e1b50404513fbacca3ea192656a75eb2ee8d19071c3094973d998b2758907bb09891795f51b3efffe0d269c3ce4c736d5feb72cc68d2518db32c7f31c2fa892c55042e6fb31e66ed37ba794f48d2498a3a6cb79bff69f744a26131f3c4afc0612d2b1dc62aab64bd133378ea0c5fd249b7e22fffd1b4648eeb8c7d0bdd12c2b378af0860d968208f50d22dcb9ffc4c6ddc678d68d21e47193b4caee5ed56f08a1ac9eb76774d2dca37423089bc7eccecba7eedd3ae00610d690a56a369f88cfb91b3f28af5f4cc76cb5352a1fdcf081d92b83daabb32463b86407377a908745bf4aaab11de61b3c38ff3669f77c14df14915d9439a65b2ad5fa67491768522d5daada154dfb01915c1cc38b521ecc2e6cf81210c185697929c9387a915b707b19e5753c7d6ecb186088d802ad2e5b31c3e5209e5aa45f2bacbe9f4e1f3bb4d046f42b2f7390b1b210109945e695c1eea349d39a520f88c8c24e290595440763c19d7cab3491bb0d74f828c164c2a387db60078f1d1f108145a53fa7ad9ddf18d41e1e468f1f614c263bca78857bf7be796d6fc4ae92c9848c1c3b7c8c3278b02b2e4f2d4a5b7213b7159f0e594147df984358259349044458d1c99d513dca7e4c735bc25f98c82a8c656142e98a3159a77ef8f8a24454717d8ef32266c7aece92c9c40b91549c2f789cbdc9f5ce60054450d1e8c938696e2dc264444e914c9956df29ea08d131454a53fade354b763a2e528a52859d9d3125b5452f428a524e99828be9ed53ab641425d1dbd516aeb4a61b20220a43de4263ac8718be65fc58327af0c0c08984c2cb18f562a95b3299a89519397e90f10a1001459752ae2094b08e3dfd413372b88f1e5bc627feec7c6fdb314f9c8228d9f539c9203ea8139b0a6aa9e771d29d4cc2988870c234bbf420f4427c9ba8628e575f8be5e1ba92c96402229ab0ee84070d29ee97d31b8230443261e5b8a2a516c7bef632b6070d76988109d34fd7734ab5dfbb4de00b0b885c825326679bae326957c41257063daa396a52a412674cb669740a9b62da397c5062cf5974900dc24f7926714a49bc44063d42ca64bc24ead0a52a994c122012894fa9e879fc7a6733078933cf89c7de47d19bc93063c707441ea196ecf7e8b04faab223bcee28ba5b7e914658296d0e5b9562a6a6b08e1d1b822f4620c288d45cf8acdf024416f1654b5e1762662fa306ce001145303722538a31a698e1994822fed9981b6c7310a967c964b23dc4984c74ec3003118ae553a9a6d2b87e4c490e31cc48de39bc8c651f3e9940a0c796b0c8213e916fd6259b42955603228628a8e7df789cd84cd16432c618ce22852866767d2bebd7fbced83181c9e48c1d5b228438c99856fdf8964c26051019842058cdb8398db24f0d3235683026131763c7f6984c7c6c402410278dfaa9c63f73181b10a588eb1c5f44e6c8f50fdeabeb6ecea31fd049937755fad8ba0a45fa60084d9f295b3a5e5533bea8c064d2aea30c1e6c001e227c4847a3bd5f1e1d74682d20b2875ccd4eb7ef6ed6baf5f0cc7545513ad70521e701b1603936a99c1e3f4a040fea46f78a2522c45a7787d537cba58c1f5e1ae69080881df02b17996b3dc8db75302ebc8f58fd3cdaf592c9e4478f1c3b7c8c1c35f0f61c1410a143ea4b65e54b5e8c45640ea8258bc92c7b904173ca109143eb9f62bae952d9e989c40151d739c6987ed2410505227068f79432ad20d4280bbe614bdafd535231b3361d86881bacad4fbbaefc3919b5814baa447be9aa7cd38d40840d8b8ae9fb618607d680c50dd1d68c3968bd2010510363bdd7736741e671c96014f40e0f030522694029557ac487edf0a15540040de53a159356b9a4dd2672064de68676d8fe93890744cc704a617739952e7925c6c0ddc764a2019132acdd153478b632ad190928600112889081dd2adfcb529fc3b3317463fb9fc4aacd44808818d693cd1b6f1bd33f74c68f32c8f030a47139970af93985d08321af7bcbef737fa1bdb3d894aa671b4b2f9cc384ede63c93bd4d897421ad995976ab73019911fb36e7263d955b783eebc9a4e2bd0899db1f63782b40440b225948a70775a9e4656b69c0a3871866c8c02d7001112c14432835dd98fffa0ac8967091efae9f1916b14215635076992ba7145344aaa0f77a8ef58855107fc9f6e8b11910a182c81444a42012051128d413c2107182481374b3386e42e992b5b00813449680fa99dfe565ef8d5d29c119b9a3793597a933752092041124881cc10c1123b031630e5fa1a652f445e074c46573754851538408c9fae42773a3dd172ee90f880ca19446bf57b31211218804c19837f9976ef5368a5a1001421a535edc337b4fa516f98195dabd3a997c8b97b402111ff897734aafc6cc7c8af4c09156e2b3e93fcc28830c1e3c9940a006223ce02a88f98aa23fe5b7b1606317484b9dbcb53ee59eaf6043177e9a927bb169c2324885384641060f1e02c0218adea183063bccb08123145e38b9667df95f4259d2001ca0c0f109344397980ff1fc9b8e510619609c41011f3e360424984cce48383ce1c774d37fa13c37a8e8f837011818c0808fa5c1d3004727b819ad96bdb92aca553299cc8013f79edc4fbba473924fc964a2ffc38c4d94bc5364839a89ff70c964a209f55a8338f968422965c9649289e433a45525cb75a68209453789722da9b9a3ece31287a7309e4dcff907a9258a9564b26ebdbc684a9530ab3f25a575c53ac30ae0a0849af9f37a2fabdbc9491c3226db902949182fcbef641232bded4830db17fe43cd27f12148681a848e9e93199d641ee185fe8a9b7deb46df02381cf18ab8b533e1696fa1462c37a3947ef3b3d98b0c46acb9a4cf597887aaf917c0b18847080b5d65496fc710033814b1881711429d7f8a66004722aed1f4569db6528b678850ffb45e8c674a261330701cc22cea3b63f2a14d592593090e43b49d5134ce53304bd90a70146217534953ca6bf03580831077b8292da6fa5a546e32e1a1631067316941538875c44010c8c8196516d5d329cf4720f830daa34bd7c3790e204e954da8eb5f69131911e0f8c3f726e4c7ebb00438fcf0f8a65c69b5989b6e0870f441d7a8a33f65dbca2b8681830fde45739ff3bc1d449f021c7b40dce5ce1bc6d53cb41c3b7a8c00871e8e39c3e92da593dafce581d3216a9a9326a129c581879296f0dca26754ffe90e697fd029e75841c860dae1d5d1ee9f4a690238ea90577c4c316f0e071d0cea35978d89adf0f11c3e99b35436337df2270e39b81af3ee736fa64c138e3838aa1f64ca26f53278b00f0ae080c39b34559e8da23a8ec5c30427c0f18662503197fde6b49d6e3778c1c294bc69bcbf260638da80cab95eec3fc82ce6b3814f9eed42770af9d88d81630d6be82826e39d1d38d4c0bfcdcb6812c277f33420632e8f93f9ca753568c864b4afcdb40effcf197211d1cea661c4f56638ec78161537694c612cc3dd5642c6dfba34ee91015d9e82298f994a543306c7c5c55e54f08ed116432f269b7d3e280c5bf56eaf0671996603c3f99d84ae4d2938bef0e8942f3728d3614a8ec30be8bfc9f0d89dff54787d343b0c7074e1cd6d9fe6252aaba43f788c11061938b8f026793fbac62d6c9f2975d09aa405db94deb4418695d9370bc6af4ceaf9c182d72e7b6a5be43cc55ce14ca5a2295d995a5164054b375ad6a0e495901300aa80a30a77785175bf22e673940ad70759b92153a690bb898b5095d2688a4ba10d21aa84bee652c28b82b199d17fbf85829bf7479e30f91b2ff6848392fdb154a3389cc065dcc558c878260f4713d222732997bd3898900e5d4ba32d54d21ec3b18484aef72445b6a36e92047028e18f55174b777dc56a702421252ea8c7a60e001fe040c2a64f577aeaa09634031dcd011c47f8bd3fbf9a667480c30865ee1afdd67e5f1f84a308a8111f66b54dabe57e070f1d1bc04184fc2ac584d2663a8b0c00068e217841fce992da9d624a0bc11ea5a6237394e6cc974c26397ef830a3470e1f3a26131f63e8f86186e20842b759db9da479141d84030808ed674a269b71fc60fd9c295fcc5f0770f8a0d1b258a9632aad1ede630412c0d103ab5e572b8ba58d2ee2e0015f4a657bece88725954c26ce61bc5b400c925d94ea33780c2bbe5bc0cb3883044ba28bb4ce4d86b3d51925e6a218e4a2d5eb7b858fe1a2dc6d6736a313822f7ee818a38c305c40728bcb9306bd506f9a2b670bb5ac339eb8289af18201925a5ca292cea1930969990d818416ec76b9998ced239377c69e80070d48e0009259e8232b7b597ef94f2659a0f3c58de7f8d5872f16a6cee8392eda680d222cce9a4b2e5b3a25b39baff03354ed969aabfb20892b780b57f13b651b957f0210d08a4396ab790a1b7ad6c28adda28cba76cdbeac0faec2fc417eadff8c0519aae24d1736853badcc20492ab810a7e37d45d58c304850c1e905cfb9d1ee3263f0e0914a40720a3d578fb2e46fda45688aa45ededf189995db9094a2936b3ab467938ca94948d166b2b3b56469578f1c3b78e870315240328a53b8c80d3ac7fc7aba28ce967dc3a645120ac399bca850fb1c17f600092870511693dfe9d8511f5f907c824b7931bf848a22546b249eb855f4a5ca9bcd73567bf0c8d1c37bf88f1d3a2a40d289525af18a71b7c684b0e4c786603229f9f18384139baac7f82892a1a3c78f1e3f4836717fa5c7d1fa6ac2d11ac4f77c8aa9123381eabe57d5927e723d98b84d54669fcd5cc274b25d4bf4d95941d5250d163795c06b2db9a59a8e759812fba7553eb7ec21c56303c9241af7d129c5b83d224c12499c64d3c98b9f09912549241e996f84e8654d174e1248b8572a84dcd95349a61fb19d6bae4d6dd7b7391247346bc23d5fb855cfa146203ae52c95e2725eab18f1d7ede9553d2d9582248b40c5f8fa235f4daaac887334fb7992af0ba74cc43934c694e43756d00a115e34992de6d11f22cb39fdce694f3b326e884474ee68e962a6ad18cf3490430c9242bc392b085d9b2fae29d5c035d0c369c0a303868410ad8bd6c79862acfc7110a78dd7519f524cf29f1c93c98f1d3a788420052482485efe132d4b9104e29bf18c9553e8ce584900d15b06b931def26d12fa4337bf173322e3778e1f7a931b4d75e31d3c6504250802491f922563be4ef3cf416b4220e1c39a938f0cea83c6ec9140b2073688c8c698c21c6590d1a3c404247a78df3a0715a5935f1275cb80240f68fd3d8b175486d70f091e6acf1cbb0ed36959b943a1bc72c9feb9270bed50e8cb362ff515b71c923af031bbdb9ea7d89d36123a14c6764b54d37ad3453287b56d3c564e2342ae4e22072cf37aca799831ad91c4e1ca292e76e7ae2827091c4edf7239bb9ef3e60fc91b0a3a42667ecca6663a6e70eb54999bd8d89b3f6de0b73af77105123628efa12dafe7fffa202790ac01d5943daf2fe79c1f82f10312356832e3c13be42290a4414b9aafd4099d3fa64c8206de43988e7249d48a7906af54ec86d3a73267c70c8cbedcf5f3b875a92e435a453b7ef4c5568749c8c0b6788698d3fbb08ce1fd2f9dd182fc7a4c9388210b21b629e7bef8250ac339bf5494a9a867db0143794153cd08ef0d36927ca1f02ce279a4a8f9ee48bca0884fa63648b50b9ae99f1375d3119a4102122e20d4560c2ae9a89bf4df425294ca559e4ad97222d14295dee3b1eb4fe8fa3e409285d455a9a592a61090604133afb3a44eaa77a9245760e35758cab9baf5345628bd3ed7774eb6be7355154c2a871935273bc61f49a8f09fd2a92bab9f95c22453b094523532c596ca7f4bc1b5b3ac591745812f657b6284100b3a143e992e736c8b8c9e26c913eccd3957d69375e2da239038a1df5377cb23f5f582489a70dcd8b64fa6ea21b338206102a2df996e6ebba53bc912cef698622afc4ad84fe87cc1fe4eff4b2449406a4ead8a6e99df4b244840547d8c3cbd919ad611cc72a1e2bd436cb9586280223182ab27ae6495a757ef2445b84e636aa8ff74256a1e2444c083a73bd1f39df3834886b0c64ce6dab976231221205478ee9f2a1ba5bd314882700c1976b3a2a9ef13f7200102772ac4632ea635ff078fec6f67d1ead81f890ffcd4d1cc4c63d762f7a058a5e4c618f2deea22e1815922838b8cf1828b7a17eb06613ac62a757130eb56ef334fb33d175e5c565505d1082ecc77d73452e4b750446fa61e2d2ae7b6d8e27061c293c6ee69b4166bb62fff20263ccfa64599ba943c7d1694fc67818bbaa9189792c57139b5859031e39b128b32f6edc98b225824b7b2e773a5dc2cfe2bdc1032a22cf8dab5c915a9a02cc6d4156fc5b79bc43c7c523977cb8ab67316fd96e73bb55e45a5836d68089954a8ae0acfd266766c8d7551ebc1482a92d958b7967d97ef840a3f2fc7d2d162b890a1198c9ca2704d613abd678a520a27738a0a1b4e588a74e3a5d4ea9bd37d8a1489aca4c3a912ef96fb51202be6ceb0dc7974cda23066bd94719609855be6d9435f338a3681221561e7639bfda299188c7cc22a55156ee3317d476130e209f6647d2ead2f5a679dc832e6bd7d335e5c9d1367d2e9b7f483c919e126dcbf14372a4e2cc77644138d1cfd5173664dd1cf914cf875319d491921e7b323984868bde89e6aa76bfbd8121b8c5ca22e15a6dae25957ca9638ce2fa78e29bcfd4afca554f9eca73c42894a544ea99753f28e9231320945a95c6f32a697af4712a94d9e73c9bad6a69848189ed2666773485c2a7925912e3ee20e2a67b1ceb5c4788ee8d2faf5a6d2222d2795e4d051c6e6f03272e448c04823aa94be2ac5d2733985633c8e30c20e9a5f5e7a1743ec9233b288e44d89ce111fe24ea964321183470708e06309a0238ad03fab559de713f2ca1231c4e0d18132787c60321183c7180e1849c47b61479312eba2af1d41c495749e7d6716bd55fb1839049fd773fcaff83129a711439cf3773f8b8c65bba692c9a402238528271b31f7f9545912219ab9d076fd969141983db3ca56ee0882bf51e31ed62acc538148478f392f670e97a348c6170905238038ce4717119af29338ff908f927a1a3666d2f819f143de1e74c9cdbf51f51be94362bb6a1f83f813653a63840f5c895a1da519d90366258427cbe3295c0c0946f470a89c0bcb5195fc10638777a0062379f04c8caece67f93e0ae0010b3ad7a6a989ce4e2677486b763acb2235097df0d0e163c40e294b32376c9c17d7eb506b123f4d29362ea974c0b37bb4ceeb1e75790eeccefde90b3a2372c04f4307e5d9259ad22371304589c6ac7bf2f56fc1081c12b15ce777fa8dd9a85490420261240e8683c150200c048321fd4a00631208003854240c8663d1704c59b71f1400004a2e20504e26242c1812221888c3e1604018088542c13018100a8503a250582810d35c12e5036b4e1c78ce69932d132ac87f376c0a7c209a310af2c5da4b01719a7f77bbeecf40b83a11003077a21b8e286ca69b912ada660932ec00b973d7ca34aa109480a9304f34a8e233f879a150b7c7a19aaab013d05d6c6f5aabe031cbc9e8aed49704377f36b64211a95952f12d2da02a0607a140c34f1820783a98a4b36f44710ac172f37ed97c17d0e98a379442f309f8d0a0a4264a38f9667c0caec6f4db33297c1048eb05608e2610b7968de8b394666c8666f83fcdaa514d5f1fd9d66652278c5688843dfd590baf611c055b20399ee232b1ee02d8e5ca8d2147214f0bc35e042f0868a2c34cabe1c41e6638ccb04e6ba3b433822ee34d34d49e7e7e36d8b5e8b99ecc208c7f6cc2c68129d7c4058bb5bd0ecfc3c0fd886ac8ecf8729a06785670268031670ac6299cca909978d92198b035e6c85f4a8d40260ec7d5d999a6b9725e63bfc5c5d5cd96c415a8b1f2dfe169d5ba847c82f4b8fb26b56879d7f639117e0bf134d0773e33ecdb79c97f5ed7fd8c566265604d23c1e97678ca6b3742d94aa15944c2cda5bbc35d07da73ccbad33361ab7de894ad11e5aa476f39b9d79206ff5175e8dcf81938c52aa495f05a1d9bae28c15534ca96eb1f07206ca49079de830d3d66c0484533427eb3defeb55a5d9431a9fba558aa0124ebfb3a48a728e93c5d421f837f5d04595ab747b6ee7860994f1a497ee5a0512ecc0780e90c9dcf3db3cf8115112060055ec5e4a9f9e96c3a8b6d674f20895cc57121831e58ed7648c96d73b3565847fc56ee08af2a44562929b70b46816d768a550eeb6d4cccdd7c482696cb3b088b6672234b428ac14fc9083da71a0b02dffe3c4d7ba9318ac6e2dee64eec052b7a76ac085e64f5f72db268c491c922328b602ad105086478d86a1a3a7896d219173b338e2710e28064a4a8dbd9ee0732d962674e7aab7041ae42d67091930c820fee3db928f6038ae4ae834b415e074a93ea6bf6c28f44d846a34ef3671fabf37287ba6ddecadd3ee4437ae0f86bf653c1c3c994e2621c48848097f5a448c9561daf6a283b67318ac6124d7740647099503374f612322731e3835d524cb9025a950970f45245c26f5fe53b09d0716b7d8b89633bcbf8e21f71636da48f56dfa876e493994054ff0a6a727fb2c2c0b84933bb2f3396b6a0882e3e6979e6df810f93a1d3a3a04656c0dc8ed9eeba61c69266490ae69508342c01f14632d3a96a133fc8e35b87249701a4998157eda678d4fae8ac089f3c37036c7dd726ce480349363d41b0d013424917139cc641abba0ee938ecfa7ed2e2b92c6084cf4d2be71caac0adc6636c5155edd6b546a9a992a4514a515e60a00522b78ae5e7b63339f8c61d2eeaa5369da09bbb7838b00d010d579119c9e32f9b0486396f9466d21821835341c185629bec68d3d7c49f3dc17974bf944073c017ac5d2d2b8d68b2647020c1d8e294b47dd0e6abd83efe96f754f5ef78121551fc6bbe7aae5b98bd05ce7ca57de446b30838c03ee0863457ba0740d71d94c0ed40a55cba706473111585407c46ad5743f43946ae5c805a28c36b57667fa5a50a15a9c2e7f725e40e3c7e07a7f871fa5f7073e9cc9ea0c6f0802770643ab1a8672c79572a8731bfd317f6a3f91fc38f74c1afa91786bd5298a1e3b9d37729e5b6826d9df4fdfef811c1228487406369a524a86fce3af67069efa1569f2e129829c74f8c9ada05824621a08f5ef295be29c984d81aad01921ea056399500fdcd8322c428c4a10b39b16e253946037d1cef9706cb5acb9206fe87e7882e26da60e382227447c334072d974ae8e2ebaf71f377360febf2acdf70c2486680504d4a1023523e6426a469f50a67680e7ed2ecc7d7e5002ff27e6eb46028ef56f937886ba1f71f60b06b207565040d3e0f71e258d68b081c0da901eb0624b55212d0c891e2d672c103a2baf64adc6af391ee119d122ae6a04eb0c34dca983ae4778ef41cfb40e1c49730d41f40063328edd2168de7e88d1e2e4a86253ddee531cf3e2db554f8fea221989e0e5ad834b3cb7e8e7e7b8d4ebba5ef503e70dc832a3b2da6b628ee47bc659ce847bd7b37778623143074009efbd83b2a0bc40f9e3c94760fc63961cdc87a6ecea255d17d86b260e7f90ac03df5886b7d7bab32889826dd2532a7e0f7f4a5f51f962b46894d52cfbee68caf350cb8392bdc345d9a1a77e2c9fb0b57d86442d6628744dcb676f319966ac26d2bf14adc3085874bfb812e1a5aa2f19077dcfe44bac7956468fd80e670856c59db5c7b035b29e3dd0773d70d0a6214aa2384290a58dd311c3d3f8a5f502e58d42a83ce0f3017e10177c8717f08d2c39bb78fd057241f1400d19b83cffd5ed7765f32ba64db4a748b10f0cfce7329e5e03bf3cd4ce9c50286d30e77f38770f2cd06a8d902561755374aadefe2fe4b9e834612010fb3d9218c2dd9e1fc39d663a72eb210065567638d76a14adee0557b751ef0eb3b45a69d0bf1b40fad4fedb8ed090d8e4e826134f66f1c0238434a8090417870d765577fec5f048494f1e9e4097222f640da076d5e047e6e04ac9b40b80106b9cb53ed9d24fd8aab4f6528225641ef16bd0b2e78c7734b7fe9dc978b08b3324af0b0b18030b6b500ed69dea45ecf007ed3695d6a12195cf43735e9513d5830894ba161805c03182736c907493996510ebfa38e2afaa82a1727dcdf78a3db7a52a20bdfd3ae791ea357de998699410df62a32352b57161460ab5cf7c7688b2d760c41b71442a70627e40aee87869650b873b5c1f2e88084e8a79ba7e2bc0a8195e4117dd95e607a91fc6c637e27d015c7a85a80a7bdaf2b41f4a2284fca1a9156cc4907cbbc6c46ae38eba1c8c540f9bd15c767ca994a2fd09318d029625d4cbd9ff27f442ff70c8dfaac3793388c87e09ea48bc09a4e9bdad72f98712031c1d5b06d7cf885720904023ce04f4c2f1dd9e6f87a5c5e4749dd4b9ec264608e5735fc818c1da042f9195dd7caece35a8aa55b9d33e31119860c63a801228f0fc29b8a9d6aaea2615b393fd06bd0589889c81302e216a28e0912cc2fa27ebaa51f64467d9e3f2a9c1411d72745941dcdc367f519a3fc36034e47cc9d5492c278ffbb27439316d4d499d9971577e3ee1496c62179a1fd5612a9312f17349111a9742c46c077337de9d55c42c60473f118c4382776066fd51ca32957a0e693f84d4ad1ae225e2d31f2aff5e057d34999d59307928139b0f313143eb1606fab7437dfc795e63d6f3d2e0863be99a00ccc14e47bc880bf945fc8b6ee86240546e8e20f7ada005312d8a08a32402a3099dc48005b04ebd0350410f42b77daaa56391f9578c851be0f2683b43c0718770e5f2953bf4db7472985318e3a431e04e5bfca6e84490cac794fc1241a882cbb33a3d4d26739ce1f71ba8d8d56e7326e8cfa06f438c49d7a5c77529d24228428bc90cd615d316d069671ccf08c9082988711dbffce6a63a752f81dfb3632c08a486012ae2e0ba16312104e5b494c2199f22d45e3c0821519724cb68c18deec3e2c1d4bce31777e918acae67030084f1eae512c97a5f3822067b7e719f9fb2dc7c671493dcb43ffdb2145a023fcd961cc69c228bc0006281284120ee0ef59b22f8487dedc948b4923017625ee71c204b0b21cba4cd2c8b45f762d0ef6ab970fc800230cd34c766bcb9d74b8c5ec0851d98a5ec6cf620af54c871454eabe43289c1678f6b5d14a210541005d530b5a8b618e7d3d8e3475bf6e30276b4c79e8a216becd9c28f2fa42aace686c11667580bcfece921be0b4018e2f8482334438aa06737e68390d4a4fd2d98d06d7ebe76476262134902774f3cd2b86b2a02a574b85584d4144575b15abd89484d4414013ea855a66a574cefa2904ca42b6bc03af42e1fca042a20f27a6786c3a26900be509d1036057de7c678260e21e45465be19252ff7c51d25cc6f0c1ecfb51d7fecb45ef00114f2df730fd36561ea68b6a491bab9a48aad26461c82fe90296a42ced524abd5139ff7981e55983c4c4803da67ae7c31269ac4fd6fdbe7783db1bc66f89137c16d843e85a738b59666a3166c0594d7119bc25f895078ac08cf50c5c2cd0305d37a0912ec683d05181b91a86b148565dcbc160b15eeda31458e3ecb314d1a6939255981f2335be6927b73c937161576344f8fa0280db8d60f71270167a120873c80da051ea40afd078ee29023534696881e25508b7f7e3474f31f04054a338d3b26db5e9dc415dfab0787445ded7c903a564df78ddd24152fe6e8ad4e01db8e717fa99abafbb29233371b16f7351b080b6705962aba6af20152a1408fb108b66d83fab7abb4fb81e657745afe62c8964f08e19e0b7242903b5eb2c085ff8e03a7953370f34bd6b63c9ed999889afaa02460858988dbbadadb8b776f938720d0cada19348e1d0567303030eead4dbce4ab899ad5d03c5585c4647bd3d72a22ed7a3fb5e30a570462f1a3f9cbca0d65d63442e2068bd0db3873f00b1f0c9b1a2b074400c505692f761a62d667fd7d0a9aac345ac4cfced8664d64db5406a50f06dba1298d03708898d20728208a220fb036f31f609502042220600d9dc18768f309098b02c864bd72874ca841e93fee0fec2620c816145cb19e927290894f0f03b7a71f2bf15add5c93a9de4b71fad248c66bbd30db2ae99710c9e97252744d9a634d0610ae09f5bc8ec31f92e7693e8a272928fdecf34218c9544772a0636fb0818f9d95325d92d8effa1e8b22c58b3eb345b100992634b606942f08665ccf1a2a9a2e06f92fb858d055a932003cd9e154d1e9fbf56d5dade9042954c75460d6547e65a470ea1151ddb21a54d4594b3f5453571d8b83b7c1871de7c72255536ce41a98c46fa615d28ab6fb7f50c27ba8ee56662587ddd46810669bcd2cb8d271769295ecd8f650609e79ea4788ab28a078a2fe477e0b864b87bf366c8975215a29a669b6d0f40e899b50912f8b76b9d88662deeeaf4be0baf760621546927b2c0d25fea91e5b61417d10c6a3534fb5a60d8950f8c6d2d66dcee84b9452fbc80bfb5c2ed2b59a8b399d27b4dac4e54778d339c158a03dc48a9e34793046e3e37f40a9a98c426085c12049264e847b5c6f2323275ce1489010165fe223c96115140352403ea5eca2e48ad76664aca547b4b9b4bb14c9099e8434f5a3510b14e602d655fb27415c4e901da09dfe039c0f363b4590b1b78f24e557dce7ebc184bcbb47e9ac58d9666c8290484e9575f3b8ab3f31dd22cf753ebfdf442c89e34507893614b3bb07299b927ee03b2da468c441c351d40bfce8c42402604360c49994ce2958b031c14496bdd1a50aaaf02ffb49a3daf9ed9551e5d59004a2e4d37a8f6bb20625c693e88e959749c169f68db8277ccec9a514c12b1c3f91a3e2a43a72f52359a3b2f2fee09aedd29dccf6db5523e21299bdce2f293ab6cd48a1540d99100655d1601926bd8e8fe68c38e50c1b77882736a5156e68f74b077573e64b262b5eda1d5ae9f4550738d4f37477e6dbe3fae722501d6f83cda1cc456201644d0deea02fc86f4068a15cd3ca95a805aa9a8108b8cf3292bc72f28f4958731653a2006c90678bc86bf8f6065a648185ce8b5dd4f46993cb6783e5893a9c3e92cd24efa4b4e2c5fea510e756b4f8cc7d0a4e59c1413eb7037b70372f2c3358077fd9b3d9a125540f9082b53d885fa50ba48eddbadc6173b44b5fe51d5532e31ff04c6289f672b2b1bd9e9bed4a526406a0be99bad1d71a1d0b71d66169c835a3747e0479ae9d8c7944ea714dc724f71e6ca6118b7711f0ea1d14e14822e900eb577c7182823c7ab9e504fd1e12ca70e70c1341a6f6180ab8a3321ff7ab93976014af49352230862a94df25bebd623c4c32fddc652f40281b21d0a1d2238cfcb59dfca35cbaf7de910ea3fbe9db14271dca75c91ada22b8284cf1cf4668f05ec6697b8dc2e57d3c069db3865f3d482255a6881c06842d92111881e933f5fb443b402f0b92753310e81bec7f9dc374ad4671c0cd51aac3aef43fe05cd751cdcb411620c88b1e2458d71bc3ea874c853e42fdf436e3eb92b9d999fbf78a5f4155bcd6c2b506f97027e24aa80dc7b04fab6370c16ea5e18540b12e9868eb9f212a560d83b1bacaf6681f8081a8572bf77ecbba782357f2f7cdd07a5295fb423ac3b8ba3759d68e290bf6a8abd2f765b5a3c68ac2d58d6fb02235b1b2a82aea8f6b57b2b68b921e9212e1aeed56c7e1e263afb00ebd696a9030128ecb21ec0487bad873da1d10ff35ccbf5cd49a165023c18f8df1440a09fccc6be0efb9db4df1b580cab7dba59811b147c45ac5f898fabf9fa66d043b860df942d36ac7d83592a51384705167bd73b106eb6b355a5d8c50ca45ab65bab13dd1900f3e2a3dacf10eb25be48d6f8653c48a22ff2e813448532ecff188108b25ec8e3fa0b001cdf7e0c622474b33e45d307c9c9fd9942c03d7f774a54e3c3fd5f70a4b7f437706fb6c15b2fff38c0b59936e7f1320b833072823a1bd02ad3c34cd04d012fd6f716af2c290b945f6dd528caa7f70d5111e43ff2e6e7de08eb5fff682d9056f1f6c7a74b1116262d3c837f14e4e54c383c71f0d18b0df1dc5ff77fc85ba22643595e4af71d1e90d75f25ffffda1212941b734b8c3d910f846d95da8145630df6c374610938cff354c098e126037267c5384026da10c8e7cb7b2300f72fc46e66ef4f1638972a5462c33b4ea2b16426ca5a4482c8bf5d7b89dfaf3bd790eaa0707aff17225adfdb2c62a8f2c9fda242b9722a31f7d37897e4363a47939942ebfdfb239a341994c68d0ad792f29a280325249d3d00020de2668e8e482689fe80e8c8483bb29a292321ce725964f6c1b2654d286ce280d23d88e1ca933610efbf5bc4a981d12b1f0605a433d97291ca7a9b4be2b151cdebef5dfb649175da8945370c31133c8931fe018e6a42a575b0883d36f5101aebc0b9d022f71b19561f5af5d3422592d0c2b8c2e11935e01056ae90ff455d44c5f46a4053854aa85394b07ee53d0ef1d02ad0d569a754ee636282437376ce2745d3eda1c7f5d9774a8f50107218a54dc815c372a483c976cab057d50987832a14afb0e988de437c39ee53b720044aec89de5412d05877c49877a3070a6aeb46423ea242b7a0cd229dc752df20967810eddac69c1d82e41fa38624840e9bcb1d9f39b4d4c3039cfe7aa30464211d0825ca8ebaf15a00efecebdf0074523b13202b7a9399004f5ae6939c89dc98bbe519013de305967b3d17b353c4ab93e8c1d14fdf5cd663cbe528f0fafa73d9c7ea363b531e40c1da8b4b69f40ca49bf96fe44e623cc05dc6478aab04ad9caaf687d2c81a5204af9acef6891c82beb88619b62dec9fc27162a3c81f831ac23d84b1d941c3dc3fd0640bcda1cdf877e4ac99272d58b6364dfaa64993b1496e5a8285c86bb1903dbdbc2f1d4b298871a0b3f35a77d86c451e2ee413a966fe0b62ff2848731200dc89a72957879d2ad5d2890345c54395496d61e2bb5a5649ac826457cd4412c277603d093e7802a4f483176f07ec86e36162fb725bed3c9a817f635b08af9f11b233b2aff27e78426ff3f3be311c120c2a8de2a434e7c2a70a83c19c3801d23691af51cb380bf964a99235b22fbcfa6e7bde36a6435215e939cf5bb32e0caa02cc016e138f7fc67d43d87cc0a582dc563136d50e25f464f235223cd797640f91c15e6d39c6b760e0c677dccf4678ca5c6c1b47efc9da8d8c02e0eb9ad8f429dbebd240c7340f02ccfd936df0ac26288c70633f19a115a0399dc99d41f937338da3ffa640f30c4957ba0d953a1c21e63d71a893ab4d7d94d85044039f6dfc8667bfe21d20481beab89a7aad43222b06083b07c9e5071de4489119d67eb51f887da0ae1e95807d55277ef6ad1004838395e25b824b760f0bce27b2c106a0ab8f22a5eafeed0033bf3550304b2e1f4c5d9e88aab7e9286286141953eb8af3f375acf284f568d268fc9822d2a34fca8f8704523edda8707bcdfb677dde6e7accbd0ce4325acd34ebcb9ae8c6e5358641ca6e628ddb989700469b695ab73eb6f636e3df0aca4eb981f63a3090e78dbefaab20c86e7edcecafea2207ea95b89def7ee933d1fee36d9691c129fce04d138c34735e3419529b4beb103b0d11a6295a2baa7dad2306d1137d01b01a76c3e46db0bf4e65ea33ee8b6a361ece640edf420e77268cf5985e4a3f0e37be0a6426055d9c841c38a8a0c0e8e4f6939b3631d7400d8697d3a4e8d480722d93e06433148c08fbed825215b052296727f6a119890f9663ebf1553a800e36550bd1252170def7286cb75c2545a7b7798001931ef1e2f1da7e1b1290b6c9c6a1b3ba629ee88fda62b2a908f6900b5f85400118e9e843da5323f33e1f1aaac613edf32ccc2bc2292712eeaf27bac41276fe540e5a35f23d6bd8f55c249824c7d93eb14dc70d7dc4bc1fcaaf587599082438379c66d4cfa9162064eb3e61e2658f2ea332315b35e965d505f5bcd746ca4356f5a22312eadf806f21edb43dcadecbf1300faadd9d8059151ea5d72f3ee928a086b958a2c81f11c23f6ff817ab13c354f7253e92f40a0bb257210bf611562a83a8d5e133491be89fa2aa4a45c859139fbf4da8da12abc25c9df28a8804448f1580758d46ad8b4b1a57ea098a4e44b4e972886adafaa298382279893a896e743be695dd2b1a86befbeb91a8313fcdcfecfcc9165b6bba316a36f0107e266a3d84a6a7a6aa0fb27f1d07ae76e6913cbd7bf1b8b089ba250cfc8a5e8012de97253f5f641720100af0e30f3583b19f08246a7cb14a91077690a611474b60544213611ce17f7cffdeee430d6f9972bfaf4ad7ca85ae17cb5bc902686cb1a477e8da74bfab77a9b52a9fd7c0bb78997498446e483dd4c49b1f9a2e400617e081d336fa0a44d88edea42ce860eb9096093090842b51b3a52fd94f6c7a35a4220502b766a37048fc92dfabb1d2eeeb5cebd3d54991e73e839bee98fa1409c956b9a03095940106a0a080a99a6144f8f51e1aa144cce6dc0818072cc456fd1c12983a3bea6a6cf9387d209636216fa0410e63391aa4d1030cca584d707e641f8f1bd3fe47a32e1f6c7265ab7c4ce57b4d127b751545929c0c6dfbd0892a7e9fd65b0530aa3106c88bb50a3325902a9372d5a2d70730d5aaec2beca57202710740a17b647be1819a4511088fc93e54daa4feb7d85ebfda293a1ad639f3d286d6fdd99843a729580a7f11118f59ae4f0982d8198b0a09163c22e19f30b496ae5a7087f8dd4bd5c38f8854128ca3a591cd6900cf0c3016c9b3fada9c4323ecc9456998966a49ed5c1701c0e2a43d64641d7b610a0f1ffd1a125f5e57456a4c5c7ce5fcd8491d199e18010a6a92419e6d0bb3691a8d6728b88d0f7472ba3795cc5358d3f3004af6c09874f47319bb269be65ff53c581860d9f4e6b7ee63fb0160c718d9502cff639a22a17cbbdf66e22441c076f52d061d88e70b438cda3274b8486a77aa8095b0eb08b9e3358bd9375bd6321dfec46a4141db553342e6925b6a6d8ebd13265d44b8a6fc321b1e7bc512c3f34ac0c9968dcedfd4c02330e5b92bcf65b9dc97ccd5b2b9732b9d4bc54299e82bdd236f33365076081813190668d362beb0a1b97376454525ca7e0fdbd0eb8418589c4c30d090fe6178130f00c4e1814c541150bbac070e356e80b1f92e352939ae2f8233d09641e4bc5788b151b51d10fb3788cd264d9cae339694520df5d5cce20044b23e8e770bd8a26a14988c9d4fedb996d06d1c8641291983a0edd5b9976c7d4567072157e69a053a393ed5decc757e476a2b63b0dd3e6966cdd5668da96cc125d70f67ee3834c12af6570c63791f9b308831b62946950682b61ae8774775ee9bcbff29f83ab29dbb367d5dba784416234c9b2c5c355b46bd4576af64fb4dde847c52a74b81f452843918bfe4156a4995428a057420127ee16026fa36b63210d8d7f9eecee9e8d1ec8bfca3a6d484bf02e8e1b344ff5bea4cd21b2d1764d7bd23867bc84220d511a6454bcd47f1f6460e495667a53cf38689cac122eef8fa1a5ed137e0238d7b2529f972278a170e2842d3e1dffcd1ada46739330cb3b5d708bf7dd9958dfb9f7d78d98421141f2ae9f4357c719387955ed5e112c5bad10e59162c2ce1b82d18679633bc93b52ee704dea877cfd6e6599cbeac6c9da9656c9cf8d19027fbe315bb25fab9e7e531faa19068dbf4783cd6979f01eba5e64e01e1f1706d0d433b4b822f6628ce990860749231f734063c19c2cea8e705df0b09ee456b9d6bac88146b17927242a0e86caf60454258e550aa910d24d32c15568a58a568e6ca9f4111027bdf643186f8c22f01fa1f5c21369de416e967cf74ef0d8174642d0c1decb67e0c7552a145a627b12f5c362851bda0e6544f3a7a2bf9970128fb77cae1a8bf76d370c1b717536cb77aea61a78cd265a90bd3999b01fd600df3e2478a60a1079231b41099b978ff63a4b4b4ed3a33f1fe701a01e0f7fc22caca572c9944e777267dfa2538494e41bbb7c99557053b4eef4138f0f8346549d711fdf4b9686837d4433aa203a63b7de77aa117b604e47eb24cacdbc39fdcb9372c01c1ea4e783148b3b9f1c57bf3d0b6c39a4ea0fa4d735eaf82cb44017840e04f51efc279a6bf80acc20994a4a80703fa716abf9c8c73674634d9a83226c8deef4917c49c125d7ff1b4e72788d28e7b189db35d8ceaff53a06d80d881fc71206f957d8fb5176f99b5ed1b82e2c121af1ed28bac11651778b93f923eafb218ab80893ee84b0fc65af4b425bf4111e2d47815f0985540573ace98f336bb6d53d7cc7639ae3fc6d4563eca76be5ec7372b7db7e3bd2d569b63da12b3adb86d8bc7e6986f89db16b1b35d32c21e11f36eabf563fb650760e3436ea3e1561a6fa0d106bdb6a4c7d604ba7409f69a4e741c22180f929717a768509aac3d3c6921de997dee84cbc52b52b3cabd762af21ea44482920787cb958b4aa896848f2a57bdd223e017c38ce5d90311f790c89c8d77a811de353af47abcd1c3580bc589893398285400040827b7450a64f594c4aa9f00ef5413c4f135412c6d569f32658c8a612c4ddeba45a8585a3be91a9ce6ff887d41227f8b4374bae93eaab36520a22a994b2e907f93b6563915d368050d9701fe2ae8a67dab25584c7a7a2410ae86244742b07ac0cb5567f1a890d4851fc512cb17b029d92821552405ee57d522133fb115002c6a31d16d98df08c8c7e1c638b999865701eefc45386e6e84aad928c5ba4fceb9c522adb3aa786acacc4a5f2155041f88855d6e78095084f7e8fcdfb422c5dc8eb6c715b925eb3160c169268231c79d74f2ae782eec8f1793e3ad0c8cf9392b4fbebd424405d20ea1df566ff1c455b583c02bb25d3149d3c46cd815a3c4034080ef48f3645685e212a0569b613fc743cc103c18f81b5cc4a425aaf68e52beea0d850c3ed3b99d9bddca346c7959adc8a78e4fc5fa1e85750d55a2d4166d522c55454ef478bd4e52b9e460329b2a88c24f52bc9a47db8b50d3f984404c0b57d69802a08d078b751db42eda12bdb3adb605749345a3d5a9b840d90f44a341cd5101a4a5e0eb7a28324011c22c5431746f56fa71345da2ab3983d916a0600c4f7c4a7234fa064bf3baf3df58a1c6909a64906dc4b024956c4caf858d6b8686770d03e3093e46d30c2f7183403b2f56848b99d80a4fb8c5b7194303f17c1aed102c4ab177ecc1603a4d9352048be88ccef980843f4b4e7b662157f0669dcd4c1a4eeb8868ba361ee3a9fa8db6c36043caf13b5055bcb1a82be8666e5b913454f1802798d858b9639a3a176518eed49843062fa17b727c4232b505ccdca69baf93e983b591ba062bb032684f70adcc1d23571cfc03dee80fa135be2bcc042411b30855d007e1ca03db3e2e1fa0acbdf624654c7adfe5c3798ac4230e55015186c821384221c55404cf14e119c232e0692a341d608cb9b822d190318e81d706c5693cc11724b73cf25b44141c03e585134cb0c58ed374e94840ad11ddf84a4c6b9067ee87f28706ddebdc1ea8b8e231ee41eb61f0dc5f8881c2b9a0b3b61aba614f71b5c0a714ab6e0f591ebeec0b6f888ca29186f0a161b97f7fb3fa3a47aed4a316ff748081cc726bd5508a02417d08686ea92b1b42c9c51e780a8fc302822f204747f28781f90f2a6242ccba76722b0780a0e80d5245ac6ba9d67f698cf64229ca2aeb0ef84d30894caba7e31151f41ad659b3d937f60aa7c01b0ae23e0be74ac5716423b1bcea6d49233ef4b21e1c57003c14d81d69869b302eea2cc12753fff99d9a830ae3057f174e1ad67ed846fd3537243704a18720d14310de10e47b00901b10e840830deea2d7a6cd21e7dae4c8256d81deb770c396d4035b1287229c2f617017dcd0428f5da2d72dbc6dcbf7185b8840cbc367170ae7612f549275444393e3384249de2d39185be8929100e33c13059583402cbe1007612fa7228133e08775e7a9542ef030f735d536854c7fb2c437267eac39f6cf501da9065e643acd45a78e2cde6a144d8a6ce329a427323d894d5fa8b050fab9f0e48a407e64989f4e54edbc6cbac586281527dbe3b2309d54d03cfa03f304dae06323fd42d45661b04c87b009a48fcdc547b6ad0bd128f1e35ff61a37080f8ee7266bbe9be3dbd747c569b6b3163c5a87d80b97cc37580e27c4cbc83e446ed8d7f8a24128e81d51ecb3d6759c004ee99b1a0a457aa70c169a2d2b6c33094121a1c7e691328ec15837879a1444ac70317a741992a1463635ed25413e1c59d089379cf8bac2ae027d5f1a7bf9d8182e4788121bf51d335a0f316aa230e8d6833a800f858fc1e46202f283faa8bce4e7b363dca4e470551e750a2a9f7004224f20312a2c9cc6409a84b79e1287abd5f40556095aa209c49ea94121a8a6a607256143ea53335a5026de03f2dfdce0bb3d7869e41088362b10c50f926451088d3a478a4a1416026d6b0faa64660e299c1af7155cbcfb48c1bc32657a13353d1a44309298bdd0bdbe4594cc9f4c6b32b644a8e2d77d13b9b82880721ae377728e0aa02c2b8d1dde84388b4ddb69647ea81b246a444324ec010fe00b9177565b929b593b611b5e080bf9f4c890d807a48c9b4aae29322ba2507c6998506d7512e4549fadaa43178891d31ae1c5ee68cd7cf0b284fa94705b1fa81bb0b04219a1ab666da1f36955cec08de77bd34a0ebf21e4e4a7e585d3b6021d928130d85ca0a03b94e60675a491d2c091bd676ab93adab187a8fbe01f01d1e42a5c7b6ee5ad9b83019d9cacc0975b24dfd1dc30c684fee3207ed279b6659288e70c88b826fb26e30fa4320c35e3c4c4ee8255a779f31ab408554f493576e15a32646066525fdb73c696f50c5dd8dcb63305169ac6989186ec1e380423fc68ec3def027bc6959520a5d7562db44ab27981af09b65bcc0f5df682915ed6bd54b7cdc831db25e6ea6227de3209b71e2d52c40f45f59da53b12338558b4996e09a90544e7dae0749cc9e55dc5613091f77fcc7531ff7e3bbfa2887ab140a221af91e47cfe52ae3592b6e73d3a82919a092c5a4f8aa6af4a4814e2177ac6b215f9e87ebd7b6ae829c014b09c1ecdb048b7ee80f4d9730d74a63b79b23555ec448badbbf1727492b4bd54d5c6f0c64da5bd2ce20f19d006b4a67a60a31fcc51bd779ec65f4d7574513e4bda6c5e609cd7f80b30aab6fc2088094220a235bb19b72a9f059672f630430b340e53131605d769aaa456696d6dbd6183d17aa0e810a620c1a82dcac5021c071f56bd7b1b4c32f41cac8a87a32eec302b1c9fef195cbf15725354839950651be878965f05f8531c4b79ba281ea31e44107741c8774cbd4b0363ead170f97b0ca5670fd04e5dc2ec24fed01fb08578ddd101d74630dd664576b874e53955a5540bb9682ab82ab9974b3ac170da51784b7e6e547463d30b8c1c24e00062e71e9213989851a219d2ba0dad3bbc644f1d091c7ecc3a46891c6a6172590c84f0c7c7eeca44539b30b768ca7c91db5ded047daa4d87e9083b2da1b20686c6ecd3e697d3c8fe20ca4128bdfafa6687fe8e2205ba215a2b60d7e35a563d974ddf931b886ef694cb00dc26bc631267745bf0d0979edb7fbc62c0f891e23f5756ecac74b5e5b495d09e2e8a0e3dc55b8c064fd32506584c48a049111309373951749e8976a67ac4dbb53c1d96527ff23213261c904a1222a166a3f5658a278861a26ab3a6ddbdace6c001822a51c9dfa576607186cfffa53e96d30dafe1863db6835751079ad83d68983139bc39a33175640aaa2eb3c26a31cb0c2721fa3b8d587591cc76378fb9eefaaea2ad3ba8bc4d9f767b100f16cb0a0af9251729f5bdd804c73130362163256c40bc04b98f9980f10d0ad690187978169cc66945c4733d25580d5d2746e0acfd92cdc797e8fb764a4f818579a6112a0cf320eb00136e09e3180a805cdacf2450adaa013a4f5b863240ae24c901033ccff33ccff33ccf9fe30ffd285aa1b58814692754efbbdbdc69574444686c18ad7badb552ec3bc06e4ef105eb0752084908a6ceb0dae897c4181be29b59abb29c936c312ec4db3f7b9279f22c1213a22ebbc854f9a8d30f42f13649d0ed7b5b5d10eec5132dcec91e533c1047c9878af7c9686940b4369b96b397e0eefec1d97ca7df7ba9214dfca0c79cc4309dd287b2549958b5b9964f3e646e166c7734e5bf3d18e24e8a59fc83eda787b4840faf6abb71ba240ffef9a447893faa568207fe04cd1f636e2d85923b985dd6a542c8a50a2576c04dd672ccf89c62be0ec97b4a27bd7438ad2f4e5438312e9d4362a9a4922489c9d923073fbbe48769f13c0e4cf9a69cda2c1c7a4b72b46be60de7dba8d9937a12c3c50d59fce4f292b216c336249914fe83493995860da6bf9a13a53db5776bf8c28967864a07570d09aa129b2459934a4b83dfdee3d5e17b215a34144f520bdb1b2ae59f010b3a91db26e969da0ce5c93165cbcaf6c93234255ad285980c674993ea7232862f9994eeb6173353319456f9cce438d9ab138674c3e479f9d3b819305c52166395d12f2817cda42fe9f2a245bd40c9bde7943e9b8a45bb40db7c9eb415e5c273d298db776c3f51b750c63c56795c4e484db580488e78fe09179fcfc2d1d2ce243984f7f458e073e96565a976e657f832a63496e40a8d692bb4dd9d46d52a75a8abc0a789e965a159254c052e8799fcd77493265338472cc75817b39f891412376dec3349f4ff350a4befa5f6ccde26a750d04f70d1b7546df1739e70dc28eee7abf2f1394e4836cd78e59e425c7318d0846ca673eef22455180f039860f2df4d52dc5462120f0396805caeda39398916c4c3002554e26b4c93a288a79f0149703af4448b644cfa0c408237e6aeb3d215a37e8ce3fbdef47498d8db189ac6932c543344d7c52889e50a954a88b1bbf4e7181b2bee1dc6a984af8d69d4d6174676266e496bee9009c65ed5ff39f226561418879897d0f727ef9d5fecfb5679d2e98be54a334637bde8d3a269495a9993185e1ce6394ebbb68bfc349370aee3972eba386f5844daf40975c9c59fc4cca1e49373d7878bdc3ae6552ae95cb95be8deb596c458dae2f8b1657f32637d95b5783de3df56d786ab92167bbccff6e599599c2b5f778cb924d94416e78c499caacd9237b1a0fcfc7e35873281c5922657f4e0bfa29b4a37adb52bd8da4ae1f2e5c5326945c24d9dbceea9e75a56a0f5f7df5b792cd555e8d61b2d53de49545594eb2fa68d6eb6c94c45a61296efc46e0d13155afe979cbe555537a7f03a9428677527ab31452667e84478540a19538a2e5a0cfe52498c7931a4c8edde324ba2b243330aa567b3d34251a8fb6bf277b61f37138a4fccfa396b984c33195030972b674be724e7ff1325b7cd9631aa99f59ea8e4b0f631446b8e7b27cce5b1cfe5841377dc0f26c635cd65b289b385c4a7fc6a8210372f3d3161decd44229292e92657e70e26d8d3d31855fed69d4b203def5d69d91b632ce19d6ca95b07cd26a51249feb7e61a0b25be8fb050d5cb98af4ca24b2f3b6927487b5724518e3bd3e94d4e29632512d49b7bfd94ad665620611a4fe539b2f28855cee495c898d2ade2084f63facaf723c3541ab14d470b2a69194fa83022cfb61c17dcbd737e1165b4f8f958d2ee6145a439fd491df5f11d27e2b3245cdc6fcd758c08f64415b1dc1119f12188977d338b275fb586a8adb3c3868a85d0c492da122b749e1409c185c9dacd17dff28283a8be36a6244e0995525010ac98e454cc1888838965933a35ba2a0404a6d71f647b3306ff0f4693bacd277a56ccfdb0eaf58512da4536dc87b523c773123f5825e1c3419398f435477a28d9435e5d115be92df8ab0732e50ecfb649eaf4e6a12c3fe175536a36493c14a6ed7ebab93b94c3e6a01932a8c5cdd9a11bcb7931878fc9cdd5e1efdd7a79910ea64a9e62aa5cf629bc39f4916a2e269820db9d1cbad1529ffad529ede270d2d0baadaa69327670a075a7bb3fd8795bf78693577d7b9996e7d4b921e9ec3b2ada5a53be0d9590de3b7a278ef86c404ed4c84bddd0cbd76096b013ff4cb06c92a861cdd992375a865b933424846e853b99f7fca2e1581b9e77e74bb2e8194c1a2dc48431e1d634431a7ac5648d1b5b2f56863405ed8889f7cc8b9181f1d43c7be9da2cc5c670928eb9c40afa2aa18981b03d29b5aca48fcec2509f44b7a974fb6f06863e6c300dd9fda0ff17cc521dc3faa40adf7be1f44d6d963e7cf5de85d3c4ce95c7bff6c35c40b3891d53c9646abc8563d7cf9574af59b116f23f31c9bdd3574bb2c054b47a87be717fb140878dfd1ad6397fbdc22649d9219fc7ab3d56a0532af1a478aa693a55d8c376fd86f5654a52a1ea5431896692183e660a27c1575634fc7c55a4a0a7485cca657f0ea3a08665895131c7550805a378544dd749aeb62770d9b7af72ade5b172025eb7be6262d6d1ab16d084ac3dd7b2cf4ae6550b60c2d3d1df659ec1dfaa052c01134aee760fb5d2522d400996e05df1c4abbe8d6a0149f83ed78d6d4671f31780044bcc132cee5afff4c7283b2a7c8e4a1e763786c9a4af2449ec183d1723d9f7dddfe6c4b31362bce1325f328cc5bb62d2a4d871af30fae4b9736f8977adc1e0434fac57aab59c030c326b2fb464058df317063d39bdc49c157f244f12e4a334bd48362b71deffc4185378c1db6b5b8ed52ecea431634aa5956e2305e8a24a6b1315a5935e450ac885b3716755733629e52504040417d57dd0784288e856c92d4ab1a46072761a0202620205d8828ecbf227c6140202720305d4c2b4ef39212020b4603d467a7c16ad4d422120202450c02c3e9d89de98c4acf91c59bc9fe339f3bc58ec9fd584e9e0b13d6c5898717284a5a5af687e0709eb130c31495656ae2e3de47082362a27da657334a1ff4e1b2f88ffb9f91c4c5073fe4b39650d796216031c4bb8b249972edf9b9e398712ca94ea0bb131337bc49184de325afb321572c3d330c33990b0abd768b8d734a7e1312c31858de61962f551c4188708cd9572922c5392530c338e49337ee19ed6d220420c722ef7ff530a9f2435a4069161fc26c9c53c17d5b57d061161a851e2d3874e52d19960b8622952b67732b6dd820830724f92c9a5cee9625c2f88fce2f774520aafad59e2490a22bee8844ba1679a482f92dbd8345927ecfc6a468417d6a5897c4f8e576622bb28d95c491d4a74617cd894219d04cdfd86870021920b638e6476dbfb5f8e70b19c70a92e9fb871466e917cd77ad67edb02cb4bd9b6cfd62249eabaf12b29945b660061cf88d062dfcb60d6a5b1779364b8a00242b89186191d88416416ee8ac7bee84c166539c924589c63f1c958da309632851823b040ed424cfd63abc9455e51fc1283e6a87593af882bfaa415539d65ce921a6985c9d286ce4939c6d81f6105111b675e35e579f94240408460c6dee0418d164456e1d59b87bd748ee3abe2f35c3126cd252757a93044c5fa3c27981cea244104156d2e592a7d2e1090c829fc7c8f9e72e2f57ebc820b444cd19449e9c5444a92d3a602915254ed3a1d532a420ac43fd3526bdc8c5f4546c19475476cea8aa72d228aab5e4a0cf76e32662414dd4649cfe07f041487fdcd97c2cd69b8fb13b7e6182649e6bcf92fc4136f8e693ffa7c96f3bd1376f7a76a1af3f00f27f6f09a394c9e0d93d2914d24e52907d1fc9252ee9a2809fa6a59736c3aa1cd8431ae73723c0fe3418c60e24f93a563c8aed514bfc41f43eed286978962db5817e4216209532a4bcd955f093ba309ad623b25dc7ce1e369acfaf7ce240e2d2659888824dad4671e47334aa60619a98844e29c9f72c61b39892acf38c30790702a8b9fe852961ddc1b0e041ed8f03384c0022d441e61ec6cfdefe61d91fac5deeb147e62d88d288bac54bc5ecef918234ed1f5763ad7bb592ab20893589d49f8541147c8dd892fad1e2f1f0202f2031d48001091443096aed73a8f88c89238265a8ebef5f9810e6a9041860b462087c82188ca5d2d3a96c1c237c4ed666b214c6ad52c0eda3b528874ed629fe6e95c7e42883fc727616353eda5060ecc284307bc37d2b84164106b8e1f7b890b8f9a0a82b2e9bcd15e0b010199412410979863d5b3c770974e0051084d61d2d4a5ede8bb8d1a36d6d3404306913fe09f3a4995632e3b49da0fd64c54123fdbb2e4491ffe0af12967b2a57f950f9d34279b091df53d5e640f48b595ecc7f2d8138be8c11c73ae9cafe82a97c9036632a5e9a3660537d240632378483de43ae5fa0d7372913bb47d6951626cbc3f493b1c7af94aaacb4941a40e05dd09f5edd80922742893c68ceed51513cd0a2273e84cce6e592a454bccb1e182881cb6d4db26f88c5459c8227128c66cc32de3ceb50d875af37b92eaade48fe91b4edf9b43758d7d98e6864349e2abfc4915d3c6226d48d29f8a214cbce3b611369c738a757e6fff745712226b50dbdc434c2e4df67c0808480d1beb831e744007ec211bd041440d97587f9fd9faa11f2f2392064e643f7eaa146ecc130202a282081acc3d1dad2fbb1a9133e82993f1c44227f76c6f740004646f780b226630b3478b39fa151229839b359bb5c4a49a36394286fd35e79fecfc47c6406ff9c7dc31b9f3783e1011c37147facc4eb6b12cd041240c957ca9a5ece44e4f6347c080e70b71b217693949c141e40b7a65590f6f35bfd5431e60112f98f2e56d57712998de85bc2461755e552e24f96e7293640b9566f397ff8c12d3e240440bc6bce95965afc26b269205b7ef44bc523ed79e43de6f38077c04112c3427e679d48db942497d2a5cedb582e1e5bd369887789b2255a853864ef1d2ab769aa95006b7bcbd511df354640a6645f3b496d1c39a1d91029eee77252d722d7322512809a95f5a9ba523cc328050c3cd28238940e1cba17de962ea24e530e409f67c968b784ea9ee469c50ba4ad74b494cf2be186982a9fe5296a85369331a610297a2d679ae9cc4898c1b0d48c3073b784064098ac70a9792d4b1da75253ceafb1a5b1bde7e26c1cacb1c2dc4c5041124ac9b926839e4fdc5d41fe31c56599a69632fa5c640cb3493651b53ad18038ae1e62839f889666f9819408ccb53747332492e6994020c1846d3f192dcecd59f2f8c5385989cf08fb37d30b2f1ce9cf3e59fd68181eb9d24f559695fffc235d1462cf794a7ac2fd4d89a551e6241dc5e78f272621f6b46a3bc38b33da879ea4ba8bbd846e44dce39af8b848d796f3fc9612ae67381d4458b7d32b997f2b838f34ff643b7d554fe165edcf954f198b1dcdba2d571d9247a1cb1ee6b619cf93729b4ce74f6b4384abcb7f82a753ffd2cac4c5ec2d4f4b2506c75c544b774f9c7a29cb14bdeced2ff715898e3344929e5dfdbfb156509995ebb2c5a885d61ea34665ad6aefa6905a7e13d98fa7a4c0d2b98555b9379b3922eabf8576c433fc5d91454c56523b7feb9546c6e7a927841e535e5a828d9fbc58fb21d2ce4a7d836c7cf307672dac84d5149e94c2cfaa5a084b3971413a27b278529aed372cc65f4f82892da2dba5d164541c692d02559921c0e851d2fb4c778d97562509462db3ee57ce2d53bbdb9b4eea827aaae97cc59bde64c3a41c6cfbae8ceacf37202135364fdf36b8b9b30dafc9cdfab5cee6842e9bfe4db71417332a19aaf099ff3790e13139dd0a953b83d21ec4b7c31b7f54c92e673c61255aa5849924a258a12739460b2347788e8d3d12641997ce249a2d3c42591247f9e2f5dd9311589bbc2a6da6c9704891a129fe79c64f98f58c72c4a54dd11849510dae94624a5f42e19c3a6a6668429fc56244a5e441e6332546647770c2b824be6995f19ea7be144709a3a49f27fac1c4446446df9c3e7877c880adb746e34c90e4e6c827537378db579f47230d0a109dde3ebe9491b621d99e8c0c4967dc358cefe253c393f9bb072d9ae5a4bdc7e5b7fdb76796a530953c593ee4f8612e62ee193601ef79f9549e0f7761e644a2a5f49547e9f63cd3d26fd446253cf0bebcd233b1e24b89452d8307f21f3f988a4f49725b9558ed84626c584ddce93a2462475f68ee55be960c4d6b94edeac93ee8f2fc2ef1c3919d3b746651451d0cb1a37ca759a551291247c5cfd450957bf21e28bbfabe31046e6abcf2a4b87210c8d295cf80f2b4912e28e4260d515e25aca724ad04607215efb7c8267bd90d13188ecbd3c4705f39acb9cb183ef10049a433f414720ba8a949eb9abda1f6760820e40dc157a266f43c752bce30f491ed4673b6713cba91fee781fb99ab50f56e9ea581ee949b774f0a1d38e4df1f7e3d2513aa3630fe475885d889472d0a1873ca849335cb552e72d477848923a4a10c9fb0ee5fc296d989322820e3bf07bf1772e98b8774e1d3c31e86f54b1bcac207da0830ed6e5e09af57acc33650ef5a539ad306fd919d3218724d1b2ed66f7002a74c4a198ee4ebc306f083ae090e698dbf2d4d23a75c71b0ade92e93cbfe855d5e1063398a806bbd45beb78d0d106364b6e09621634a66848071bd4b6e8dbb8f390f1afe14b6ac2c95c10d7935743712ff6e48fded9ecd360aabc19fb45375af66850d774c3c27892f4f43394b29bbcc9e4ac4e62dc0cc44613f3982c6aff7919fe2463215d244ed89c0c4731edd4b0961fff1e83dd166a723acd7ebec5c086959236ed7774b1c3c0cfe6fe8e26e6face60e06a2ccb43b5c74ef3170ef763eefe7ae15c5799c4da9049ee7017c819ff29d56ef50a73e12e6193c8b76f768eb7606a3f69eb272d559e6841ad4f2f9d56d509932c78a5b9f2e7ff5af2b1a08c5c89f56e6942bd5738780a4f76e35ac118efa827f72539c5adc22575da245b2c39a79e0a7c78b3f99b750a4ad5a630d9f3456d550aac6b5b12d1340a964c9698ffa5cb3814124f3bc99b642b0ff7138eee59cfb4a5e2983821133eac5c0a9bcb529a70c9f7f67bdb1775644299fb35d35ab4ef2ce1bdf5aefaedcbe01d257c7b279fb3e76bec49f0939c2967acb3030954892942fbd62eb3790c4c8e8d6e3de998348d419724e6db98b218c74bbb1a4feaccfa1b62a4edea95efd4a34bcc30f60d13db35cfe9a011061ecfde63c74b3072939245e2d349a9a400c35aafcfe059924969f9c5d131e65be7a4984af14597b155412b095142a517aba7f7bc64232f5e8bf9695312555cc65db81a6353b97c0ca9a22e083d312ddefd86493117fd5a5eabfa3cedf9c305dd596751d35b7c92f0a1ad5a131bdbe294deeb254aeea9f46a71f84ccd19ad042b29478bebc4d8a0a1fe726b378bbabc3a6dd38fc5ea6491ac79726a9c9293c76341091a2b4f422d8926068b63a83ff96ce6d593d82bbed49cf2e4fd39abb92231c69d6f8db5c28ff630b9635dfa6cb102570d9af1c5f3f25aab504d08b3d4d6287a962a3eb92afda4a954186782e592a205ef60a1e2f133dbd87866e13fc523297576a92d64dc14ebe8ee4a8cd6f45d8a5c6ca3a6c7a430c55cfac1e48b994b4651b4d2abf3d5aca58ae20b5249f07028b829d7aaa8e992e580a28abbba6d9732a5f909fdbaf3753de2f004adb631db1e3ac65386c0d109e584f293a4cf16ea921c8183134c4685b05c29f55b926313895ffe61ecb35d924a02e0040e4d1ccde4d8515b391c99e0c0c4d1a3a3abbd0d010111c29761e38c1d9481c625aa241d4c2c7176ae50f2558e69420c0101b9a1018e4a7072621aafae7671cb073828f1c6e09ac4b8739ff3b9362ec031094b0e97b752ce774ec27ee30c0f704842df54529d657d9ae432c01189ebe274e349af1dd7c0000724fabc1c69e92d55be1e61f6a76023e9b171061a35da8c1d80807480c311c54b4d9ed94b9856310404840c13703402ff0a1534e8c678b916233a33abf827fb6666896311faa75426c9713a797f3814a1cc9968fc188d137024a2127a63e7b99831e720c2d96c5b1d26b4b73c8e439ca4da4f429f14a3936c1c86f07395b8f39aba599a34be8c10346a7014a21c1dfbed627c94d78cb58182e220c439cbc49c75732fef07ae0210901ff88de718843b3e1a0e41f4952fa64c8ee925368e40fc31e69cb3636cb0868dbdc1018834458f413ae354dc4e0808c81f92d2c414af3e732b0d1a6ba3c6193cb8d134e0f0c31a33c79c312b2de0e88371291d1da3e984cbb2ffc00c1770f021f18c2bb3132b8d292164acc0047de3043638f680b59c30f2d7fb195c1970e8c15fad8ee929bb01471eecfbf1eb0ba5a1bb9e01071e34cde7a12ce5dbba14020252030d339ce30e7499749f49538d45c60a4c0002e23692a48c1a1c76604cb22458e5f0abe839ea90e7e4fff58b05b11f071c7438bab9bdd76e5ec03107254d48bd124f1770c841d1ba7c592a158762640e9bd1fdbb4587033d26e6b87f25d97f83b93b1693f0ad1bf46ab95aa90ddddcdbe9c69dc9a5b3a1d3caf59ad25b9dfa351c35668dc9b6fc182a0e35dc6f51f39f0739d2a064664fbfc9fec48ed7b0b11c68e82443437bcb1c67f0372d4e8e99e6369b1c6658a77366d433d9d72a1c65c8542cf9465ccc41865ffea433e4599283c4310683498ed745478969730e319cf13edde7b69fb6d3081c6138a7c8fe670b9d3c49090101f9751b33e0008331e553b733a1a43b45e0f842b69dfb525209651af6027db1c4d7d59cc24aa50ba8ff7892564d8eb4900bd7c89e77f7ff88fb5b302541adc25894a55c6a418d97725be579773db3c06c66fdeacf26ca6e1c58a0f6e2c7a509bd7efd155a71d33865a7279c90151c3fdbfc397dfb55d879f06684a06d9411b2013238aab06a6815f9f0f4ef3954f8725ef7ab8fed9a64a740a5eaf08ca6a3e3be14cef4705287a81c51d03e5c765636cbd8a880030a693889dc8b0b6911c89a40a10998913500020d10828d34427050861913200a9ca1403980d340c30737081000212413480000d240c3072a1840001c07eb031c98b1360e2000346e38fba07970e30c04b4000069381a9438630793b832d2f841192d892b230d1b21686c8d1a08f88884013e2091c97f6731a1ce2b5f421e513cf9ec999b734cc90d71446a99b67d3442af4c0f26d6c1e4fa60c49591c68d10346cd4a881808f45a0ef951b35e7d7c768c8b1f20108c80efc468d1f94d135d8cf400304040d33ca48e306093e142184337807be83027c24e26ad438c00722ae8c349a073bf0418d1a08f838c48721a810959c4e2a69b4ff20c420dcb4cc9d728a414cac0822106bde1cf2e45a3f009147c854acd7fcc1f96bedb4d63ffcd088d7959cf9c384d1f4213f0f33b7f79c5d627c4816cd294939c7dbbfe8630f7af0cd5a773db522c5fec803db7132ac491a735bfc030f99d0953cfed86a67ebe30e4c0699bff1786131d9214937654faa54b5697dd4e18bb93daeecfaa043aa19d37a8ca1df24d13930177c2f324f22f890c329598555d08e19e2ef003fe280ee9d1835d4688e121fa0f10107ae83fb06332974f6e30d5c5d87dfce76ba4f63e0c30df9597b9ab86e72c72c0404443fda7066ffc6cc3949993c1f6c58937062de3987243e400304048d0b7cacc10b312625d74f7da8210d850666a52b3eb4e50c13e9e30c65868f3290610c4b67590be9fc8718aeed74629a98a5937809711d2c0b3ec200066dad2b6dccf4f105a73ae5d31cda0f2f14ba1b5bc3c59f71733fba70e8d6e826a9e4eef75c284a6ee9630b1f5af8c84271af75bb4fb070bebfb7afcc1925b72b98f227c9be490e0b96b182d1e48c1fda33f5baabc21da2b24249c25438e7503bbbab244e99847c4cc1b5acfbb24e7ee0430a26f3a439952c7fb9a47c44010a5f74a5bdc9e849924dc2c7134c5e394c5eed4e60f73ddd546bb7a48f2668c942b65f0ca6b17626f0c14a8af20c9792f8122a041f4ad0efd4f543a634c3e7230995e57093ca7be64ffc40c2318c41c5f0834bd77ec8748d27318661567fb87fcb48464d0808081a21a8c00d4f23048e831b5e021010c7c10df71046308a9b5dbd638a42e0018c5e65f23e764c9f73e8177c98ce8dfb31be38ce64e724e7b69436f5e84542c760c29750629498c48317b40b5d502e7061c62dbcd1baa8bb70f984cdc316986c49d3b7e56c0cb716b4b8fd3b98455e66218b5830ffb7e7c10316489c6aa6d817beee040f1eafb04dbe34c7f18e7d6957aceb2a6d1573d256cba315fb5b7dceaf61c5a3d9e1a1c4a692f820f058453e365142eb79da883c547158c9d819e3a324493815e69b754d2d0b203c5041ad6c124a7353095a728a63797a8887cac3147889aff1cb53aab74b61a5e612fbc6f22005563e7dab171e05a5fd721b7de3ad25f134caa8118059788882f33c17b4a34ab7b51ea138fd79c85eb3d0d8567b80a2bf4c25e5df68a2f5fe89d3e6a45791c8c313e55e8c97e2a713e5ecdb5ea7490f4e949e67b17288f19c921e9b302bdb7de70e1276621e9a28da65c6e83772d2cf9930ad86e56e8e522a9d0726d878ddd14b8c423c2ee16f6c7d9c349ac1e5103248d000139cc1c3125509a204b2251aca4edee49c4d822bad24cc98e0a5294712d9c9a56629ed39f088042789ab5e5972ef4f9be12b680f48e059d53e1e2e75b68cc7231cc15b76ec497171c0a31107b7490b53ab2a2d33a2be29a10451cf516f5b44969d92a0265c2cd12b0f4514c4bfe498523d1241886842c335259393607300e6e07108435ce934cb94f5746a0ae141885c65ade2828ca7147b0ce22c7143ee8354122ae3218853731a0d09d38bef06624d9dbaec2c2ab34e1e8028657d4ed1279860de8678fcc1cc99769f4ecac30f26f0e883071f3cf6e04977b1f7262f7ad67ad044b24437135ad3253df260d489255c741b0fc9a399639b4c1e77d07664a437ba9ea4277620a7d363562d5518b50e5c8a1e6f7d7f9d848e071d728beab017edd5a0d9c0630e7e92dbd7742b1af090436f17b3c9319f591c0a9e4cfd525ccc0d6b052ee00187e34962ea2bc1fa36f9211e6f480cd79d9199927296abdca0957c92328dead18662a9aac796554f824d35f0600311f29f3971b1bf9f0c78aca1386963b231136ecdacc0113cd470a80ab327e4e8c514a234bc416e25aed66a27831e68f038839f3525b8e718028287199ccce89f49b20c78f8b8b6d1b55e631232fcfaa9a245e5a66c2963b8845c3d792e137888c1582947ac85c5cce987c1d18d626b9b01c39a732ab776bfd53c7ea14e49deecf33cbc70091a4a30e9e43dbab05589a69cfb25b12444f0e002a3db25a54ad15b9ef1d8425a727f9c922fa6c3f2d042299a64268f957864e1f1bfb83f9153720ab1e0c907132234b6739a5ce1f9ebeff2a4d22afb0f3cac90a0b696c420e50d8f2a142a899bde36e7dc3a55103ca85053e0e2c22d6a9448c1230a8e256dfdb52865c1030a6d7bf0da4f614a2c49080a3c9e70da9c0409d30a973bef14783881ed7c425892a498e0d184e3ef83fae60d75b24b050f26acc1d7becc7234048f251816a23dbe09dfd239191e4a48ca8f1ffe32f748826fd14c6392cf22b22a0f24f83f6b69a2ddd2d367041dc73046318a1aec272bd82125e8204655a2299b6f0a9fbf0b7940c73028616e4ab0f6b20ebe302ecd170ac6f5bf31ad64cea3590646f6ba397bcabb954df2176bdaca61d2dc8396ac2fcc9dd1c376d37c6bb4178c54dade7becec1af282edb9133ff4a24b731dbb404a7c6dd5f574f194b82dd629d5c4ac7261cc99f3c5180b4f9de3830e5c306952f64793e43b9c48e8b845294a6eee982cc7f9451db628e5d1d0a9844eb9d46363b90c337860c6f2073a6a61aaed9bc8781ef7be053a686112de624fd65b833cd0318bdcf32e3dfd9f6d7b38d0218b585c3186f34d52c1d3e53a60d1f10a2d7abe91f3ab46872b8aa5166f212e34e8680527e51463e2eaeee67c3b58d1b18a5245a5a250a16ad0249b7249afbbbda0e314ba987f124f3a11cf260c3a4c91c6cdd9ca45099f96a2fd9b8e58a970828951093a4841828e519cf746bd6439c142fb28e810c5194e92b793a393e9d9110a506c2fdd275eda3a3e719cda5959ec67b3da1377644a71a2d32769d24e7cf94fbc02873da8f33549240c06c2308ca2180481c0e9690c93144820384c1e0c06435118e6b9ee031380804902b160240c0842e16020100a83018130180641200441208e41306ac61c4a561d1b6a7ea69bfd2fbbd6894fa4056a289b4206a10b401002ddd329fa98ec8a388c9f707a20a20088677aef54fd77fe4a236c26e7c1835f5db1a72a3a30c618189c6190dc6f3344b74bfd18085784cec044144bfb4cede3927b1ef037423212d7aa938bf891c1f722e0895f43c45466bc1e65b2539f063fd6f92ae181c1ba2c44181d97502f550c8e9773f9b8ac584987ebb1afb476d1756865db0911af6e93796c2b569c903ba6257e2da7b7d3fb9a8ae1dd1797c51d667a224958643f0a687159c91c375d782f764b7c405ed787d8df1f8f69f1016cc292b3aa8bcee0142e4ee3ed0f4f0d6879f97fe27cee89dfe8e339b57fe9a4dacc974ffaa00051ef3bd76991f628c4df052f4a9e27314073c3f7a07093541816a4161203e1c97bfeb8d426097c61cc2fbd06ea12ecbc623b72433f6f6e0fb172b5b2f19cb9c03eaf7931e8b933e8afdcf9a20c5292bc57bde735eb424e26ad63385a8dcbec14a82ed56985add5c18ba02e4a41574cf8d71ab7218a25841251494c99afb7c25aebb9e14dd13c662d96dda65b5bba2d0288b0c3c6e618fec5e2c6b397c15d6d9ce5b70780043498addc1dfc36a043ee963352cd1055fff2bd07face32d0cd917a1d281efbd6737766b295b4dc655c8c51d293540e600b3e7a111074d04369693e33168bbcb4dd1cf43c0a495868dc56895fbdcc8bedf24863ea39a62077ca24e06589d098c345b61d4570a8996e5f94cb80aef4c250f0eca3a49c884d9035a4ec0f40c1a3a1ea8a3670c6c89fc4a3a37d9a5a09ffcaaed520358334fe7f44327ea479ec02200cff725948d134c54dcc0a846f3b77b55776c1537fa13b088a8aea92c92da3e1f6ca5da4a3947fa07782f6b81abff1eaa98b5810f2777aa5decdfbd7e2ab9cb60c09bee210e3de37cb873c3d330831054ab508256d5b971352aa2f3f8f79b9d207dc7847a67c463843894088940dbcc70699f8f209f2935b80e43688c247199d179510ec49a5ca831d55d42d4445d7b2c8cfa6375608f9f42a86bc6eab64a3ad9e0af442bef82127352c31d13fca8f64c1a32ed24fd1ca42079b5b139dd588c15a4fbe7a35a39f021d34c727a0000587b9446a059bf0eaa0762bd770bb145168f984a09c24feb3acb10c419f1ce875969cf44844f45744f054447cf39b02a6df6cff8af03c4ed431601a9aa64b8d69b219b094e1572443a62ff8553bbf820c8a5c91f1d874ab4cb4a8301bbeb8acec185a862aa683f82df349d28b748e36d0ec9814e2d71ecb5a6af0ff1141908820f907d3b06fafade06584a624899e86a9f541708d7116e966da5e7b9f9afdeaac16c6fab5a1e595ce03e44b66f78f8990724fbc449007824889b9bb22c3b292e916ddaa202358cb9a8a66033d525f570945d3641eed2d96185fd998c5d5babd4d1694429108540cd40b029bc87e5262f5333791023d1901610c57b5147df0b1ec4e048e6dc4d942455c560937041790a1ced1668b95a0c36d00a62c060f2073009116847b9fe403c602580cac1518664013a7135f872fd59607d07238dbc5b5b24c3af08571e235c86c5db1bcff316ff976d14a576c96559e1baaf5b251a39b2ce4eb4fd2451562d3e06334efa75c4afd94f4458995897373cc56468e8f297e67066fc4240930f6542ea30be0d28ca1f6caf36adc2a974ce626438816f5a23503249e14280bf54918363db89354b57a64fc728ac7862944cf181bcb8145758b92afee3d36ef3b98074db1894eea1fa05275c1c20bcc2c4025772818540decbfda84e184f24d961295a5ca72669ae20eef01fc5cbc09ae00291a7c2f2349e6b7604fab2bd84f4880adb6247b904e2dd5cb1b57aaf0045bef133e09980d313c41c4f1dadeff7dda00b03c92e8a4b547a07426227eb173ea6157c33dda3d207f7951aa04e56564193f2cc13f95863a7d16652526e076d729205c506531f924f16074a2f236b3a9e76ad177522794049f2f73b796222f54d2a12d78206fcbc68d4f52e69b9c7bbf7e4a14e4c5de96d577d2962f55e15d088a528de505cc37053f78e52d017aa0683338c5297cd9819b2500ae2cbb23ed4c8037be5a3ccb4339f941cd28918bd8351708ba4ce869399b9affe0706629461891d1ced209e7fe93c7c0f0afd437e358b293ceca1cb0da6f8a4fb7fefea84ea2a6c7f1a8491debca8f3a040e24008475949ac47393143a797c4eb67fee01adb49467d174a58d915acea6cc5c6c7a5d575727f330eb4e958ba4071e2c08efeaee66cce4565dcd2bf13b5722f2789ded4a97e0c1d6cb5b50f99dcbef8b754a42615ec71261d1e43ce1148b701b9d750705eb67853d50316d4a6003f62826676248eb903dc0402f63c98485351e69b80f4f957d08397ce3e43b1abcc7e4e96f46f4ea48df2242676bc26a5fc0b1741bc1d74177bd402f27004c168e3c386da6ef746516becf0a794d2c54d0f99a9c844460bbb3901a1cdd45e7c8599f0eb9a3e7c1498051b8d999e7938f991286c917427a9d3de141e205d10776063c10bd1684a511daef03b6c345839cb49659cbf85a1acb9eb237da8d44c2bab828db905c3bebd8f1bb59005b34d994f35918c50558e66e610437e48dd704825eccd76319b0937e3abd975df85f9ef1e8550c67b7b39d60d35fa4537dc33ae44bb4a5a17b6966cdc2b04cfc489d56131e4e74c57b3dc3d85e997fea55d27b477e132d693b9db5c508e4213331d672d1eb9611740e04dc1aa086538573eaaab4cdd326099fb4cac8514ff749144cac2213c3eb8b32893b14e2e300b0ff7110ad423e443051b6418343ad2b3eb6fcf858883129a98b650dc2bd77c0b99c2915bb7c2b41b2e01a40d25fd0da9d712431e648c5746e71c91afe2b8fdd731cac0b548bca2309abb1f0ee0e6babbe712e246bf4cab26f05951807c9d197a4114fccb66ad43a373ccd3d639d5927cc79306980d46b4ae208b5497b8bbb6b5334f4790a8625303c10fb9532c335bc2ce96ae97ee0fc6f93d833b0b5af93001cf9b01f18fda82e6f4c907092ba18ad9ad2c5bd89d803704504a8bd39f4b73ec56a483ad977b4d01b7b30dd474181ab61b4c60993c86f4c12d8acf364e03147806ce20361e44723ba1a3924aa82c52ebfdd19ac9a3c7f58e95957e0052edb4c5e86677e9b462d6511008177685248e35f8437c310032842890125f77f73eccd82519433886aca1301d706e541b0fb08a4671e1c182843691c881231600ad93de03811ee8a8a034c47907fa9aa1a8a0443ee333d66b0cba30feaf54423f80f03bc179c76138cc81327989b1a5c512b38941f57e03585652da860e010fe9b87a8584ce639fd3f929c5d0433f8f5ac1b852eb16a2229b3bc3456ee97e2520d0138d96c497bf77ccf303b22626dca8acc909539254649d3fff86987fdea59d13392729c105b15bb6c6b1078fd4e4b705aaf80d0c00c6495c4c9731351dbce92119266da7e735e79ace97a356b29b43f2fab3a8131950024c7e4a85acccc62a2a4744135d482e542d6743a325bf0a7a2673b4b62a2fc8dd4c458eb4991eb5daa472c56225eb92fd3c429a1cf63ae2aa41375cefb8c6de79a678cc6e6afb6ffcd47ffc4d7564310e0bfd08e754286aa68c61ed32f21b4777f65d31c8e0d86f65b2c19989e26537647092313ac6936c3da9763ef7350d5c57b68441f6c4bd51b17ca32ec409a43c5587aefeb58f6e5c683bbbb10ccea4783f1121b1b9790a2f520c2d324bf2a6f0c6c3c4e60e496324b45f2dd6160b9d4529dc6a93ab615ced2c6fdd179aa04885c84fb548613b3e1733b38e5262d0b492c19284b3fb4689ad0091aa488b9ff169a4677e3479aa2c4266763edc9ee679af8fbaacd80a481bc08b2f882130f532a1c5d634a3207b1c9f74d56cb6e9b7278fd864bb60064d3bc27b24741345158f8eac14fe9351af2f319258b12e0f2db8be3c81010406533f7c97f0e6d4b3733890770c2a034ff27685605f7a66ed3e89ceba4286f73297c45261e77c5d73de0289e47b711209552dd9896dc45c9095850275ccf42540614cf3581db579205fb3577d460cbd966d89bcd653b4161db1e20b57136cdc4829be303ce5d7d0807fbda5a0a2ed4418c8030b515cc72e2c6599391a58baf90ab8bed170158f5fea9cab8520a8b60a70101498b35d663102af2e59d2866f71cac745241680e4251722410607d5abf72342129f4f991dd5e5cfcd5684b166fc7eb303dae4168aa4327d5d42de6d9c29d9c2b0a8bd0500317a6dd65cddabe82dfc3c14b08892e7cb176247bae2a223694aa152211faed5b7ce346c160c3c4e8530157e0f19822f0c803f131a475f22c21521f72b0908aa9a1cb390f7006626ea65e887335c0bebbe8130d8ce244b545bfa65ec1b883704bc788d71cb362d866c016df24ed8cd57592d20fbd7ad3f777e98ccadfb19fe10686ab828caae800d7375c4c3640dffa34c5e814f818071edacf87cc1694f63f97854c576d7abbb8b594e3d8875d7b63dd7e9ed5b271993616a5b56b03f7c69a28366ede696004ae92a08af96e2684c4aaa01585959309ec96f1e93487ceb92b7c3041ef5bbcb526296c38f8c6dcc071a768a5e58abbd46cb2270ca3228eb71d33988fdc52e16edf4a99c2f36360b97f08589750764a1b7102677153eab4500c450b1ec427b961300a8ce204df7b80505c6a321c9697508ccfcfbebfd03c8517614f907cca00582d5406c90e8318c45292d7c8348bcba08a5a8869f8da68572bc7b0c08c54e4cfcdbad01e667a081e7d9e783d1a9bb72c54aeaadbf9d43c0bdd00c30913874ac2b58521526e3e9b18068656eeea057043cb68080b6b3ba67b7411782a7774452f3f4601d370fa4b34a85dc00f984a20704e3ce11386df56ccb69b18184171263e801623ee96e55ebede96ff10895e4fd10ba1be3da8e480ad99faad7fd9c6a3ea473e5c83132be67caf1c1147c1e0f08fc0b479cb97e002027a896724d87b7155070f2cb0266a333e0bd4dc15b213a5f1cce8a74081e40a05dba3798f9edb1ae138a73b6cc187908de83c2e1c8ca1ea72e67e800ee236a5db95f2b21ec879be77117bf2dceb7d30608607300ac3995181ffe577fe08971ef95aa29f82d69e9b41cbd2d3ca87c1ccffa863b9267138ad730ebf249981a1b3c84af7c9861338d98237d683b90e385c018a05aeeb4370d2759801b217c6d6b0d3cd397a445463e3ba955ab614a2b2c028bab745bba085c81a6d00f5e16cee016f93884e235a29886484af3da2961281b2934c44694fff13511299a92a802e5a886f7f4031e82ea325c027d8180231bffb81a51adfa31f949f9a58f55595d0560549b4a79823d96ac40ba81a293fa9e334a7264d7ac8129da6d5994552a2ec006b8c31d99e19851a31502f869efae226549c51fa3ac438dd0d83153122b0c096d840a32a9b3a491e8d12b6a66ec49b43320a0c33a8679ab02807e1aa8434b46e0c2b2720885346504382919e50d6f87e862e597f776d902e194dbc821a75d82a693f9dabe9459bbe7054e67989b9b5e1d174acaba796254351b454471a1a8f3c36150352dea07cfac2216d4fe9e4e815fe9c975ccc166280a625c9d5e8ec2235ba6229d1d948dc3c4b1d01c9d79a7dd959939d3f268dce828782b848d0504a9e11c7a08d811c2d7a96db13786870ac8a436c75ac3ae4869bacaefd462b79a9e6f5d09ed19f176e5c2ea0e5db843893e6a382845c8ebacdd776a712e287ba7175cade2fbed24fa6b9011601252cd71b4f59d80690d6b8d636a57d7a660474fa958818869e12869c82132ad2ee47bfc5ba63250ba5cab28a0fb9bb70e80ab0a9e3d1052c6a1c2affb153a86ffe449d6d96d00f0a91985fe75abfc80e7956a198754b37b8123ac6407e0ac4bfa061ad441627d1d7a4c6570d3ad5345ac05fb6262e599ce7cef26097aff5a62618519e6a69237cc2996fdc5ad2b5f6871a7b1410144adff525e6ba0432f837f5989691f7cb6cb679d96da61d605587026c62e92c22167f5047db735582feaa0c4953bac025e6a1a5cb4b4a9c04f68359090922e4a3b9184bf84f287b7098932107035d394c96695075ca2fdec8ffedde07be0d85501dfd8c2a0934dd86961f417f07573521a595024bf7365ba1548074ee887bc335763aea23ed06dc441a6c6ad4a8f7abc88dac14ad125de457a4a69d4441e769781f65b38858596b23a36a130d26ba32c94e5ca6d5a49c4ad7eaf91a8e42a68da15e855dcc4ef36b59cabc9db1adc30db3bc95f38f6c771adb5c280658af4d01402d39661c295ae2dd4982025f2c91cf7d85795277030e00b0db550f0a8767adef8ac39d2e9cbef178d7fcc914bee671a2b9efb2c8d0e488ca64ebcd654349e8349594b9c9683081e6501a12e8bd1990b3278a708ddb6362d2aef38f6ead934163e3238140c2f736b974b544a1e31d401da55391c7e3e9d4bc22a8865ce359a0503bd237948dd96c45345fd279305a6bf1e4ee78ad2455324d6bd94994b65375311f72acbf82b5c1d5d89a2ac6fcab54adb5918271800f6bd4e93dbb5e1ba6277b0b0e7088dc5bba044428b8952daad2888cd92db72c355bb793f5568fb4914078943e004855f7782f1717bb6b1c6df27d63921e1325755d28de86cc46f8da8b355dbed41b4acf10797f749d002d83f157f98d9ccd48a744a64d7289864de9a225713b6b0a8ea4d3cc3012726da5959069aad298b836eb1cf23351efaa5947f87df2458057713d539ae2a6f4bb3177997e95099d55131115831ed0df357b06eb6244f6d33228afcb49f376505e8fe13a580afdb58c64ea76d2d928ace74bd05e96d2cfecb721d25fc1fae06abd2c356ff2175752c002d9e0aabc9a4d0182b9c458cb5a76455829d8fb57a5e6bff1b1be552afaabe9257ed5482dbaab956a361d3ee492d55a4c27b961e6189158d24d2d5490435c761268573173912406a80891d2a22c90f72d7b8a1d5669612379a5e67f7878d1da641a12ae0885abd3429a46b519f4e4d2ab78ffb61656a8953e05" + "code": "0x52bc537646db8e0528b52ffd005844d8023a5443ab5620d0ba4a075a9f151f05dd81c3978c0677fad5133d27a7814bf49e9d61daa9fabb0e7c6c761c13f4eed9b4fbbffb2c93b4b961bacff04e6f9db0e7fce82bd44b87e0b37d1765514949232458fb7b6f42e4de32c99452cd0bbb09970a5d74aad0a9a273858e153a5f74b8e880a143039d2d749cd06942e7091d2674b2e85c898511f3a233a593450c8b8e94ce173134b1333951724c104b236704392488bd11bb41ec2ae646ac8d181b3133b135626ac4ac626562646268c4c6c4cec889cad12127871c1c729ce4dc90d32487490e54ce921c253949724490d3430e929c233936e4d490c343ce0e3921c8f921162606264646ac2a36464c8c980d62596235884dc5bac460107b416c4a2c04311c70d0e09cc10983c305ce163853e02481b3040e0c705c8023050e11b0387092e0d48063038e12581b30366066606be890010b032303060646051b03530386066c0b2c0b18169817b02bb02f6034809900f6034c08d80960516050604f6040c04a00d30176032c0758131c305e66bcaa5e6fbccebcc8e0a0f12ae355e585c6cbcaab8ad7d52bcc2b06af285e53bca07849f1bac1cb8957921712171b2e33ae355c6ab8d27055b96ce0c2c295c695c54586ab8b8b8bab8aeb0dd7942b0cd710ae285c317041e192c2f5844b062e290084c0645869260da6151ee312e265c34b87570e374e806440344027e00d2e282c38624aeca860470a48065886978677860d0e2011e010ad273d4ef41c61e325968567c6860bbfc24ae3e68c24e2e60d100a59826d0a1533a5f8526083022f0ccfca13c37b80c1e1a1c12a9827b891ba89c14c62270cd814ec0bac0c8e414d152e12bc6aa8a102bdc0ac280a280d6e9a68219a88cf0ceb0b96172e275c4d7c3f7c3e7c623ea88fc9b7e46bf229f99c7c377c636a588033e635b573a526096fccc7c407859760281809568289e026780a8e17dc0266011fc1427863f0101e158c08d612638265e051b02c312a5e81eb3013a34609cf6116c60303220195f0131f153088591c332170c8dc488133c543c02e6018c82a66542c319c093bc126988d5133a5e608af8c1919ee04070997c00bd39384a7702898168e438d0b6a5ef08a83bbf850e037300a6a5a30bbc22f984dd5185183044f94efe04d6627e009014bcd58c05138053323680fde971692d691960dad12b46a60c50172692581598925a1a3050b0a568d6503ab069a86c6e1dae2e6c9cd911b263750373fdce07063829b206e4a7003e586043740dc8ce0e6861b1d6e94dcf0004a7113821b24373bdcf870e3e4a6879b26e014a01428033006374b6e72b84972137523021b343670d89c6135792df182c14b89d70b5e2e7825f19af242e2d582d7112f235e2c78ade0a58297945711af14bc50f022e235c44b88d7095e516223c08192637096805074045c19ee0c6e0c8706fd8123c3b1417de0acb8366265bcb27066e810db1307c3bf3817700ad804988497c085f020a818d40c3a066b0c1c2158606ed2b890b86a140d7ac6fc610e319f4818482a72896f071c1e3e1eb62536273626641152ca26033a45bda059be223e2c1e1b5f163565d48ca909e32a83ebd223c69706c74a0fb165d9b6e0f4106bc213e355b1117c028e0296060c05385fb014ac2fb120c02e5b148f8c0e16130dd6191d1bcc32f20699837432c9380f128759141717134b4d2dc6055c4279d0d9a2e3050e125e991d11b81a738aa7c60d14730c98e4260a0ec25b631686c3c05fe0556225e0243c32e418b20c9c2a3a586240c076c0618347873e01e8835422f6c43383e585d5a5a7065618302c2415a721c5708d000483f5065bc930180de9a59580506417161a2ec36a301ccc0417315b308fd8aa6021008ff89289c40d952dcc14c35470da904c7804740a4d226605ce1157028b9a67dc3cc140b0148f8b6ce275016d006bd8c8987de1798981b1951123410c0a9360013c14a0420a46094040253a80015e47041064c2082e2fd38d8eeb72f785d512a9880f0e1c0df181f4c2d151c712c812d2d1516b86a9f1233f8e84b4b0c443494908029a7e20292909410000dc862da294e4a30909c81112520b20780d2ba485a5a4a30e3021c540e42869486d5a4282a1033e1ef05e5ba41f4b42968e7c1c250da9483f968438a0692906213f7ed41e990688901f48403a90716c910e2005392a52a403482b2c09492a52044902a1846367481a529990823009b1000ba144b3484d3e802429f990e1082906a41820300120482eb8e06302009067b648901f482ffc78638b342d213121bdb094f4f2064b492df0c8abfd9154642989a9c908d2510794860cf171c4840444292986a2203f842815cda41b0bc3918f261f407c342135e046b6e18124251f494d494b4938928d0df2438812078e909a62f8816404c925cd2c1293100478728d2d8294d494c424e485a6187cbca41abb2424a9c907530c408e9a842815394a1a527d30c5507196919438e0a3692986168e9a7e20312501594a3a3ad2894d275c142b4d9ed47dea56aa56abfc2475b67935af7808738e0029a544400264021020a54400a53953f62d9a73b666d3288d79a240dde76477a734a7ce94a9531aa5514a27754aeb3951604add9d2953673a9d3a6d4ea693a9bb333375ea3ee59ccc3d594e9d67fbec5dbabbbbcca2edb3d54ca9fc80d256cb5b939dd6f8646e4a27339d9252cad475ccb93cddbbf68e9b93762d9fd27d6bb5b8065b2d564dd38e35e7c69a4e67bb579e9432a59469134daf716fb9b740e0d6ec11da9d29059a937bce964eddb935d9b9bbdba7b733738b9d76bbd3397d8630db9967f39ceeeddc92cc9272b76ce6edd9744a2a67cfdea694cea52da6eedc6ab950c7ee0e76ab6b58ade6c056d7757436e7d39936a5216dcd39a9942c4aa9a4947600034cf9416bca16a535d37dce59809d947e925267dab2a7f40fba5948484808047db27bcf5dcf73e79d4e1746009d393d97ce5232b3f4c9debbdc726eb5585d63d3ddf29ed2bd351b9ccc94e63e5b73720ef7d96a7d9e3bbbefb6cbbb2d4f4a5160ca949d4e14a6ef000104f7392953e78fbd1c3c9e730fbb4f9e01b45c870e771deb3ba72f77d4d979bbe93d999777636fa7b435e49aee1fbb33fd5ad6b45a2daed5cd93993de6cec1cc3448b6fb74973d5b3d73f8746ff756cb855ace519fb30329a5d36b9e3e5db6eceee63866f656abd56acd56b7d7d4744d4db773dc9cad5677f79c94ced9ad39bbc535d73d7db67c7e1f6d9a4f8ee338a639d8d963f779c23481190808885d0025903029a5bdec4074fa0c726766a7ee943af36cb5b85b5cabd5ea39674b3ac264e600b83b7b1c737ff001f5e9be5f0f33730ef7c9ec72669e944673ba747d7a7bbb7f9e3bacd50cd422b8b38bd0dd72e6783965a6cc0c007739cd7d99ba7308ad9f6db578d23c97b3e7f439198496b77c4e77a6ceb5fbfa3acf769fdc07d30573a61eb88f334f760ebccfb9e5eec5a84f67f61ccc2e864d29a573ba4fca94dda7b333bbb3cf9deeb3a7773d9bebd9edd3ddbdf329e974caeebeeb3d60f474f91e23484096928e96927cbcf0a3851684880f0489090908939023a1134a404a626a0a6161e0250189a9852326214d3e7e085152f2318321a969290626b1a785a6187a905e386a5a4a621a72f4a348120c3310603adf4e901f3e38a0a42424840e7638e080039dd9ac5b1292d4f4c34791251f4c4d474d4930c020849623f6f0c09690860cf1313341a8c78890199a38103aa184998e1248382a0129880f250e1cb9b094f442111f2f3c920c484a47467cc0d001cf92e08210a5231796925c704188928e009494928204ed140141674b68122284265b127c2031e52005396a3282b424424e13920b20c49684224d45928c208580b32518496a01896948108cc90792d28f2324177c3009692a72044429e9851f474d4a31f8680109c84fd7c4e4a3a90808259080d4e483096909c905a6221eb8b6042048458a20310d8141c88f2326241984fc40623af25104c80fa4231282089d50c2901f484586b6177e34f9e0c0d10b459296925aa0c9b084246f9684a32521494598906438ea400b494c48321c0d8084134e280108d29190a6211d60fa71d4640429870c4b48f2b5dd0126213020c1b0c9b0842443f8a668777ae2a493f758cee969ce27a7eeb1ad1eebb4393d6d4e4e4f4f9cd3d313e74fd4c9699ff8699d9e640f272727d9e349f670e21e4fecc43dd6c9e9c9493a3939790f2776ea1e4eece4e4247bac9353f7787262a727d9639f688f7d62f5d8a727ae87133f710f27767aea1ebbb3c713778f7dda7a3cf1f6d8eef1c44f4f4fb2c73e3d3d3d798f7de21e4ffcc43d8c641bbcbb0c43111f1b2fd4f9ae24db29d24da4352d0b907fa44dda3a95b96c6349465a8db22a7f5cabeaff821ce2de457e52e58f4a6c65c603b95655c7ae3d6171748aaafc1c073832d4c856d5ddeb2e90ff7e10e8a2953fe35655175b89adaa7f87d4453002b28813bb4afec827ea0d0ac83f76adca5fab3a768d7a205b51b69256d22a09955bda66a87f7ff6cbe9fd5bfd657f77ffc7a35f8afe24999f38e8ef3d44bdeafe05e84edd9ff3e9cf4dfff929c03d9fcfef217b15ac3ecaaabbcf7054f22aaf87a3e7fcfb1971f3e7bf1f0f173d0ac264dc9e7bb3fd8b6e7dc6202a6912942b87e450a714c4c50b7f7fe677e1eecf48abf3e79c33a8ce2160f5194483aa8beed44fb465189c150d51d2aafa7315d24a5a59c9325feda3aad5a495b4e2acb66e3d4ab91f6975306028933ff2bb8ef3f65381bf7f863d7bcec96de43c82959bc50d89ece6228c1303e41f4139bd06509fdee4d5bd7d4ab73e1d535056e7bf7ea4b97e0cbaf951c756b9dfbee342ba541fed258eb420973806e9b811471dad07c591765fc312c7af23f8899e4cd6892d71f78752fabbac1f6595ee0feb29abc7d370fca6adce6d6ed5a3eae678da9cfc8993b30b314ca8d407aafc09127fe24fbef80fb46ea24be1c0b81497e24ffc09957a98ec9bbcceefad1bac3d5bdc4222ebd3f36f8ab26e4ad910eb475ae76c7230acd009acd56a35141d31ff6990f95c8f1be07cdaedf4a001e76fdd5e7e46dbf62960b9f2c7638a9ecf91863af7e3e175fa66e4dde4db6fa20c5ea7875ed7473af1d3d613889d7af9fd4800ef47134498c17c3a48fe6c21d1d2e607cdcfeb66d00c9a54d42955e77e9d3dbe4e75ec67cc6ebea4ac1fc1bab57e7708943f4db3cee7c480db6fdfda9eb53ddd7a547fc9c2cfba719b0c334888ed23ec49cfb7e72ddce68f3729cceac664cc6f05ea2db45374eb33f2144e047fdc61f36309353f86f0fdf8ddef0eadfca13f82756e3fca3a5fdc2130dc1ddecfa72bc4da1dad9fcf8b02037884a5a2725c1890e39ea84139f48020393484018c023be111e483a00d5823ca3e719475e208d631a8527113c7aee35ea9dbb742aeacd097367f881ca2fb335f3e3b61147647a0ffb26935d7aacadfddb10b3476a53f761dd94995ff0039c451f2473ea53b257f46d928abe34e55f99d1772e5a8ee653210dc9f91d6ee475a478eaa72a7a83306ef8961278ee206c23a8fe6c7e35bbcb4393f1e5eb7ef38deae592a8ebc11c975ba542c15536a9856c154557e4741708455f9a3570aaa01fa8fb47ae0828151efe9c956c5b15514b4a95334d234ba82bdf23aee15f5c0adda2aa6caa15b2190d6ed6da654f9ddc8d57f77c77c17474f03f47717e94e8f1b20a745dd7ebca9f23be9adfc8cbcc5d1c89491cd80fe44b243256eaaf67bd8b33a458e6a81e413359f01f233711d39aa2aa7cf6d1395b8a9eab4eee7fe2e2e7153d5668a64d2adcf08eedcfda638729defbb636b9275fed230c0f9fe44eddf0a5d37d11768fbed89db7c7371a4c18924f7f2e5d3c9cd2936c9ba719b0c126c32baf51957aa4ab069b06e3e8753369be148ab2c3b1c956095fbd9356d3e8723ac4e0ea708864424f744bd1c58e510287f3af7f663c1f9336a717caa9c387295356df4ea7c7077f8cff9de432f7fe44f715482d5f9e00c9b0d70fe08aa006b9afc29ca5e0e05c91ff9f2b7853871a4b59b1e17caf80b6a9a7c07805ed3e4f38f4155fe7eb469d2c30272e721d76e5bee1a177d81e613f538ebfcc016eed2e6fb67b4fdce4d1c69a8febc557e3cbcf61335d8425b95cf855b378e1395605ef79b22cf0afdf3a7b804ab2ef6af54dd1c4f93e70af89558b592aadafdb2ab9ddd4e8f1b20cf0afcf2e5f3fbcf979fd15c679e41b72e2a70a59254d559572a49545dd7137301e69c73fe7c6a66312477bb02b8df029eaa3f51b3f8c49c000a74db42ec1ecae7b05f8673861ebaf4e4a702577fef50b6d78eba6eb94a29ee7736449cea5e606786cedbb419cadf2f05aefd549b3b97fb19c9276a0f99b6108f8b2970f57791368d7f86417aae44224e957f94df2c6ed3b891ac10e8d5ab9dcd3625cb97ef7353a15f3e516f0bf1a4d02f5f6ecfef2d34ce0f22df7fdb9eb6501b6d5e256a96ea7605b0b3f14f82a42e8bb469fefe9d4d1111a7eaefcf4644b8bac8816e5b3eedf7df16f2fe8c5c3e7f0ad8caf5895903ddb6504b8faaee6f88640a0995fe9156295fca97522281aa524a29e5af8f8401cc912b47a2be85fafb692d347aed7e9f16e2da3670a9fd5e0fc9a2aea308b5eb38abfddb1f34a45b571870a56c00a2ae54ed4a0075a56a98aa1f51fff6fbde42dcd7fd8e0bb76e21d76e8540aedc4b8f3fa38d014fdc77fcf1d89e13c7edb7effae301d6edf7f3a6f9ef67349fa8b7df4f76fb51717caaf4b970a4dc13492e1cbd72bf9f11fd8e0bc70454eebbfd58e268a4b29e0bc795aadc6fe1b84d3332e4851e17a8dc8fdbb4f10195fb715380dcc2adac90884c9326cd55dd9e0b470254ff8e3d2ef46781ab1c0d8970751347ae9c4884d3a44993a68e4f756e4d92f9475865ca324db73941b4ba758901ae540d5275a475a56aa052f7bd1ee2a27d590bad54edaa6e1d67757f7d96a85b113ae4ca21576f21feddea2dd4bfdf71c71e7fd7def20d0f28244ddb2adfbf5f7e462deedef08072d2b4adfc1e6ed33ae4da1fff7e52f4fd8c68d37a6b875cf773c07214ddd6feede71ff7bbeddf97fd41568afbd40c818e9f43570d40a91a551dbdf6537e4a570e6dff8c60e51fc1eacc4064b79452ca5ac85f7e27e74b9f53f4906b8b63bf1c023b9bf519bff66f0bb5107fd8ad10b8ef4debe7cf68c56dda488db669fd447d02c8df2f6b211972055ba81fd6422ec3adfbf913355173c8b302adfcb4b2c8b3827c7ef92c367175f1a53872e527eaf56931c8d7cdf124999fe8b6aecf08d6fe6e5b68e497efbfd3e306c83f7ab5b769fe2580fc2cf00791e236cdc591d67d0eddaacae0b2618fc3ae525586edeba4b7bb837f944f5b68e42a7fbf932109a0fcfdfd54d8a68d5ef7a5489bb64fd49df43894f59361f3a8aa0c5ecdee60e25a257280cadfdf1f0b5eab557efe7880b5caefb5d0d6fefd7870adf213f5863e2d0601ebe67892dc61baed6e7f40fefd65751b00907f7f59dd0281fcfbcbeaf8b785c67d16b769fbfb4fcc38dd4ad5a2d4e5bad501f2ef2fab070c76228e255a3d597ac6e899eaa1d2f3440f133d2d98d9d053ebb18107cceccbec881918b3256649cca6ccc8cc5a3073c14c899d33b325b32333243334664cccc4cc68301b6246c4ccc90c87591bb31c78d0983199dd306b3283e23963a66456038f193c61666978c8e0896316c5836696c5ccca0c8e19169e333c543c69f058cdaaccaa6666cc42c09366569bedc0a3068f183c70f094e1196307cd2cc94e1c3c5f786aaf253b6eec70d9a1daf1b2d365478b9da91d2e7656b043829d1f74c0e88ca123860e954e183a5e74a4d009610755fbbbcd63855bb485aeba5df5d0367f55cd0a4a5e45d59e5477a8ca3f7251aa8b3d6e80524a1d3dca959534aaf273e1ca9fd19f6ca14d0553476944ed9f21b83b66b2e7c69c2fb5895237879364af69d26d95ca3ad6dd89287f2a6c5454fe294a55d6d134666f5b88bebf0fad855acf2f420bc9e737a185baf73c5184a6b542ea35ad5faca102f277d7deb69009efd300505f440dc0127d68dccf90e3880ca9db73bf1f0fb0528e2302562a8e4366c805e17efba8082dc4893c7f3f1536714511a40caafc320439c9553df9f0c5136d584146131e94180a62aa07294796b8720515212b422019830c2ae068e204234f3c2089c1161fa25460821a9890021d8e20c1151938944c11809136ae585245072492c8e282128cd0c240b1840b291c68f00609337481a2c5064feca0461041335029e34b1c265802c5ca04232839628583551146f46044003c29cf051e1015a0628225d41023268e24403833bc66d82c56664055a140c992232200a165872b6cf0218a1b006064ea8a2c4cc8e088114f3409c188074cdcd0851753392cf99161026d10d143933367a4e00b6d860754e17215458c183e34016186a71bd0105104972353cabcf1c1185692cce0055610c102280f6248c820e1860e6f90c1e233c39a71a40b1914c4808c1ab420c7134d6c50c20609d83862073188323e0c31954409c26011babc00f70a3154d49bba5798d145955566a1d11bc1ea5c5db63dd43f8a50f769fc19c98f0901cee79fb5d0e853c7292af9541ac70e3cad2fc89401bdae54133167c0565da92654dba48b26394b9da2a0091664409bba524da0d8c42648e000ab6a32c41a4d7ee8d280605da9264b3c28c01c2b2f09f87de9c264ca09d0ab2bc5848aee056057578a491346303162e510287ff899b968f4ea9c524c4e50e77bdf50341fd6435e34ff7747abfa301a2cca5a00baea4a31d1a11507f8428305a8f3a55302a460cc00845dd10203fc9ca802bf23bc1a18ab2b05f5436b0910a7ae14940d95bf5506f8d5955ac246e507e59017314b2d29a37a759755a2266a198221ac7ff8633a805c5da92561d4aeaed41231d587a7133fb1645d8122451b5d08d1c40830a27823ac229644d1a0066a8819a38319f60c1251643943860b17553830f28113b8c00625980a02aa4bcf0c4cc6c491e4cc1b4bca283333f224ca1448a8a2cec042043c46464852658c2ba60c21032d76664840185a5ca191aa0295864e1216f080450d2eba605181cc4806b264d1061333a4be3822270425620c31c6042b980195d80c4e362023831a7001a3a50b9c7e6ac205424cf1e26a8d358c2882d5116436d2adcfee0eaffba37fad56b3a188283604c83f9a50f7570ed1227e2a87b856abd5a08af8693de445fb4b4139546408328668a2862790a815bd6affd7fd7a7db8999be8564a91549ec8a8baef73e3a8532a9be9c6d1cddb7029abd579ee79b2d9f36579dbeabcafc66b6a6473cdaef7ade76db8355675bfabb1b1f1361c656dc3b1a9eafe8dcb5d2ed9ecda52f7a95469291da56b1d655555650b159ec2511c856b57bb45baacda2ae2b85295bba5749f9b6f9b6cdeb8a5749f73e39ce36433e773db388e5256cb5b2dd9dce2288bd56a759df7f9f7c9e6afd579def7d5d4d8800e82b219fc3caef1d8c6c66310f4f8c6f5f2d74b36bf5cdebebc856d38821b8b799b2373994c36cb6e3c0e5d1e87afaffbdd0b06f3381c83ea3ecea702d76d5a87e37118fb54e06e733c274736e7d01aba40dc365d36e3d01a2032ddfa8c5e54edef2498a6b5acaa2da916a87fbf07d0ed975be490ff166d5125550f715cfaa71f4cd5182b33f28a43537b7f47da43455399bc8eb487da5dc45dd30438fa545e9fa6f18efc955be48f147bdc001daa8e0e55d5cf51c9a12dea91b3aadd95bfb3b14a41d61a2640de2287ba48d66d9a17553787f320dee06b67d36fd401073d339e1d1d594e0c07f672dd8036359fd7b55894dba6cbe605dadf8f08a7a945c8276a5e5efe513624c5dd1ffefd5ad9899fbabb8b94521cf7e7fb8ffb1f0bfb41a694522e9be97685dc65d31685fe71bfeee3600176dd15b80659717984fda76616787b1647ea4fdb9d86ebce713f15bd6efff2168ebcfdd2794526af4db28500fd86071418f9fd748ef3b769eef37d36cddddfbf6bf6ea6210b08ae3e873db8f9472949b348c4efe8a23aceebb5600f6ef50612b114e53a97fc7210e16bd0b3482db8fd42b7dff8e869412f5e6321c95605bfc571cc1bae2c8cffda43f72cff173df9c7703b07ff4aa7caf85785f3e0d5788fbb139c4c102f4ca5f83f01335e7fccb62ba9fb435ba305c9a0775fab782d74dfc059a1fae531aadbae8687899793233f39c1b23516273c2861326bb6ddbe673dbb66dfba9c5b662d050b9051332bcba890ed534f9e014f5c0add2b17bf4993fa3ed25d7e23817b7906e5bd762cd9f3deaf6f3896437bdf9ed9bc873ce27164b333ac92f59e8e7ef3864d19b269be8a228fd7ed441c24f589d7aabc3fd282322c019a007ca88e4d005e48ffc4fe689a36c3b9628b505f42f85ae9ca864c5962a7f734783876f9300046063298c0d4a6d6ce49c73e3388ee366dd449a4d191a6d526143874d6e3e43af1d7bfeb1e02f7f0ba737f50a526ceada4f44b6336351c51866666c86a452b831a448994e4559ad8d4e3ae59c739b2de7dc441d330a1d3eeec34da7656ed6a3acaa582dfdea14bdf685616565c567ca584937984ddd44234d934f6b4b3d7097afd86ddb422559ddb6b96d1ced8a37cb642ea5ab9b2b8739bfa04bdbdeab1b0d3f9b6f4628b74d6ece8ddbbac16cefe1b6f1f6cccc2c829341b05bcf3f238ec5a2bfcddf9ea322f71dc782ff0cb9f7cf8893dc26ee96857f46fd735b17c7ad52fd69228c3eeeaee4b340ed537b721c37c57d9d9bce078d0ea4600775d4d1411dc1caf500ad97af430ef9d81df29ef5bb42fe43e49027726dfb8cbe1ab6ea9043bb3ab6f7a3ca3d7deee3f1b5fb8e6e5b27fa13c96ef3c6adaaf259e1b860aa7c1a8e6ec489f333eae77e9b9c8f4ff5a6b9b8ace66e406b66e41518d20c0d50f2ea4a5e815e9da2438135702887a21e7875559dd674a0544ba98c0abd96267ff4a9fee10a81ffb42e2f2a5f268774c81ff95447955bbfeba84e80ea3b05d236186d994ef102373700f9471d55caca89e37a41a334aaf90347154656799161fafdf90660d55215ba3a4579b540aea82b79b54eabaaaa73544cba6034546aa151b61fbd26e595ac925b56caa1aa64f3655256657594d54d56fd89541d1d6aabbb40a39107acfc19e5161a80a84e4394ea50c0918628dbb4298e343ca9fed2c35156d5f91d8e4a0e55fda7e89ccce24f467f0205553d8a133fb99c49d01ddbcf67ed0e96f705122541457405301f097d255fd46a39b5c26d0530a95357ff8ec512e756a777db26faa4e1ee09737a756e73c963277e9aee3574dbddb3bb7b4eafe3bcede322e8f33781afd56ab55a1115b9cf683a1ab65aab363c90fb2de45ad3b8f7df42dfb6d9ddb37f6e38d23a371cbdcef9d39bb63d8744e4f644adb4893e4546d2b40903ae715ce3b6722bb6aac1ba8b23adfacf64cbcc23acfab685a357ef24efeef6cd1db737c36e2eb7f49a5da0fe11567b6b7179db96fb11acce7a5e181b2bb44b1b6daa4d1dc159a7485b20f9366468eb14e6b0994615312805c15146e5104755c603b744a18202f21b20ff7e11d8a2953f23ad54b5dfbb8b38515a2521ad681da595a49254dc14124b37086c24d8a807aac066dd3759752703ba83f39b5b9fe218dc6ca6e598ba2fad786c55822ea9a04cdf685f716c0548a9d75e9359018ed4c6fbfa08cc46069bd97c2a70056f5c2fd7eb067cbd5eaf974e0dcc88915636c091d66eee9a6d1aaf08aeccc0f0b71b65c336badd70d634269c6be7dcf2371c5d68806b851727445289a8dd97906168c5891329209d9501f2afd7f1b76fb4e595714695d5b8e2b0a1f2aa42854ea12099ee96920a753137665cd6b45695358de3388ed20e8bce6bb55aadaef32648c49c40e14d89721205889c0d8c2b740af57e90f9151d2792cacc15b8c3d595729266cacff0784d36eba2e0a0c49d4c6d607854f4dc5085ca9a168bc56239393818413f23ba133c0b0b0f8a9055570a072c5e68440f8c076e417188c2a10a9d2f39b6df1728072e39089183131cac9a82e1e3048cac2be584caeb4a39b9f2b02b3cb8014d57570a8728603630dc890f3c0e55d8da710bbaae156290a83216771728f4056a4d05e52095039533a8d0ba52374cf1ddb13b56d6b4300c43518cfde081e7e3e3e3e38107340f84cf88eb5a2146892a6b1a081f11af207c4644384d652d503f089f0ab46f9f43ae1b12e134959fb640fd3bae31e04add0086b53be8ee5879e3354dd6b4159b04187816cfe29e454b992e5ddcc1c8e259ac68f12ccc5eb45861f6a2c50a73192b5eb460b1a2058b15cfa2c5b36c995826162ccc58269689058b4f2146e1593c8b7b162d65bc787107238b67b1a2c5b3307bd16285d98b162bcc65ac78d182c58a162c563c8b16cfb265629958b03063995826162c4e8567b9c18b96325acaf8cc32bdf02c65ca94914efcd49ec38630c24801ac3210a7e8767793bace488bae5b2eddfa8cae5a18709c532dd90a70e33aca6a75de576303deb85e309c58ce4ca6e3ed773b3cde4e95fce9ef6645301555ed2bab99d7e3f1169ee2a91e0e64b0cfc88a83fdae838f7d88c354e15681395c87e52af2a7a7c852cc45aaf6777533a505cfccf3c0c5fc15c151e44f3f47a99a54f20a19959caf089ec2537a38f8e0a683f7764e4daa0fbe2b10586eb0acf6596bec50d75867bad6b5497585e8311430874f0863ea38a9bac6b29a54e0543f03f1e4c977e5e381f779d5f2e41e388aa3aa52e87ac58fc75042f024959121563920171cfb8ae05a0800d0a28e93aaab12a64a1700d8ef446069e0025b80f4a052faf95e00f226d0b4a6f5ef54edef02e06d0b496702e8d0910022290634ad5f844f014debdf2ab5bf1bc19343735a2d4faafde5a149c53ffd63d7dd217f7f8ec1f2679c545d6b902cd00c8278be2268342912e134d5d504e4ef46f0180a18e44daa5ed2b5655981a9fd7d6487e6d4d83754593353b1ac6a7f57f2878b39257b4e7d24781c062ce14bf35d7d6776886535d6b08a2695fce18265c5b23292565d091e97010ac0db9106d5f51f9ff65d81e05704953f53df951c9a7413a73882558aa3acee7c29789d545b40fe7152e97c4578530230a14d38814ff084bc9d616a3fefd0a4da9ffef96587be2bf9d3df3ca37e575620fff85dd5fe8e67e6aa49cfb1040c186ac4972f32287cd7777cd7414f8b8e9432e92e3dc7777d9b316e8c0d47ba4b0e463d4f0b3fc1b902721d3dcfa3e4cf3e51cf97a785a32c178b725568d7baf13acfb94daaee04af3e2c9ee7320b9b2add6557f3b9bbfbac52e33519c751a92bb300f9b74f5ab9a785fba62b7d7a950b9d76bb3b5abeeb2ed6cb77dd65bfb78573eac929b9dfa6f102adb86dd25de67c89cdd1a5bbdcaa7ee678e01520bff45d9f724bdd9758a4cbbc294fcbb8dfadeffa16b4a3d33c3bdccddc9d474a7f39f3914137ceeadf7593d5490f043d97ebb56270532f983fa9fb7d0587ab52f73be6755f8e4d0d087a71e3c95c372f8f757060b170cee935d98e275f6e95e128adeabec402641e4955f77bd6e331071dc8f7e4f37695e1e873be8ff2e777329cd5eb7edbcbb0eb36c3916bc781e7614fd781e7e1c82b1ca03bf4c4cf6845cfc36f0599264d0e6fd3a4d9e694524a39e79452ce2dcce1815e80fcd3ddc519763e5e107f01f27b5d7cf0010820d0dc9d26bfa3f1ece8c8726238b097eb06b4a9f966cdc3820880200b0c0cc9df07e59014bf59782ccd35cc6d6e73cab748361fa172687611953ffd1ef26c51177959b6b7483e81dd4e5d38cefeaf762b999777ab1983d47d9cba329cb5c3b13b975740fefe8cf6e5f3c8c383797878ad56abd5fdadce2a79ac54dd91ebd5cb67df36357881e67c76aaf2999919062c738bce9d7fe57e7b0f4d994cfef47733a4c99f7e991c32a17ffafbbf1476aa14839ad6cf5a63b96b76aadcf721af7f7a360538ca6acb2111faa7bf694c689d7bf3e82fbdae946cd9060a4d9081f2d2250837b80c600a299498220656f0e8dce8d51d7554135ac89f0b5daa56abf95034ceeae653b75f39c4230495346590d00283a9221d75dbaa70b245dda6c805dccaebb2aed4122e606fa98243617984d15d55fef250ad55e5370fc92b7e8387baef9775e1f2cfc843cb3f2d19963e325546b73ee36b4a1590b93ab47d2c709508a709bb96ee6da11cd33ffd5eabe6033df093a2ac7275e3eeeefaeefa2efd399fe2785bd8edeee0a9bb63a74af92098e3b17607ad72777055d29773776c3bfcf7ca435e20fe2d9c5559e5fb0ad1974fd75ba1f972687b49af24fd8c5c945b9ad6cfc1014a33acaf6aa1312dd4fa7e69d5422eb6585f39ea2def991ddac02a3b9607b6108f3f5759a57c2a87b69c33c4a815c99f379f919caadbf7790d823657bca4bc9e70ed3a722f205e515e4480b0d76724c734addd5f86239b01e5134919ce7729ad9ad6b2aa69fdaecf486e59a0fede021ce555edefb6b4505745de6087a8bcda1d5bbbbb327653b57fc76e8b6ab33ffd72cbee586923d3503924aff6e78c77c4eb5a2cca7d35527c4d71e227771711ddfa8cdd14db80c5a8fddc16cac475e414beca22b765816a00abfa87bc7ff8b700476e4b6dabca6de16d59d34db1986ebb8dfce7affb86de4292fb8e86740559e75323ae27ad5aec8f523e4be96ef305e4f75d2abdfd561c3f70354a2c207fa8e45075bf3fa3fd76f7ada37c1c2c7865f37acdca2dadda3dca64b316029f433a058e146ca1910e6d5c832d24c5fe513e6d5a8760d39a3d1972f590b5407481f8e553af87c096adda519cfbd11d070b766ed16bda6ebf237fe49edb9e7b0ec26d2c5289e5084b17fd9dd1fcfdfed17b7f58d3fa3d6c1009d8fd596c096a34414192e7f6ddbff3b96fff514956b9a74b9ad67ecac9c095455f92d54d0ce2ef4bb21a44bed7348e7b49c7bdfce6ede78f4db3f615c871a20cb36e62902952b19554e138407efe52b0a98ba6ee839d444c95e6953536deb4fea1dba6b10805e47e8602fa6744e766b3cf2df3331a9079653b3a33733333bfac6a8f7294d2ed6a7681f63f2d6ca2c821d68f5c1529517ef4a8baa3cb9fbd85359515b6ace44f15192239825fc917b19e0b39294f68075559610b4d9fd0baaabcd10df49a6cce2d046be71e5b013214f0a6ee70535c95da4f39a9dacf45f5102745fef4d327fd4cde41852d34fdd3ad2b0e0e70b489aafd63ebaaf6db00d142a352540bf5d042dbf7db3cf18d4ed5515e49a92daba4b7855fe5a0b66ddba270f19a315b8d55eddf6aaa1e5043257fba73d2b4eea26a17d54175fbed3ef37315203f91e4d07f432569556734e4a22d7c55a2f63a28f9d33fa354f6b69690a8646a982b23350b428866466620000009331640302820120cc7237a202af20314800f70944e545026164623a118c86118c4400cc430c6108008300419641c6264360180381b45eca1e095fc8927e9af412af5625bc53816059fcb725559bcc2904e5bfaa2521c68ba2ae94bcfe067ee4c820f64d6d1e31607446acd0360794df23572b5192353a9bdf30af7540f389a1034250cf8a4f37e499709eb22cb633536f009c042ff6c043cb0128201b571d654b8e3b53a6da8a97cbcd4fe16d8fa21277cc899819a8220285a2f6bde2b48cb3bcd3d07c9a2e9b56ec09bb28cec8af1144acc58d42c7511c68e8840e9fa1f8672baeab351cee973fa0daf2ac9f0a22eb95010ea73e7f0f776e9d09174d6a25af5c6aa9bfeaca2b229f84e07952ebbd9fe5fc86774144aed8f9601d3232c267bc27241eb81278fd9a6dec4c4881f0f65b19c17c1b71d67279970f44341f8c44c75356a308b64da7b7107369d8254a5307f038f4644cc8cccc78240bfa1ca9fa2a3995b1eb8db5796567aa1db1b1b177ddce219e9b1db3af69f5d39a6f29dc5f6bb0d8f915a149a1f48099719e5518fea284fd4dd46da67ff14cca4527b9b8de8eb56b95fb549143de744d3a3a9dced50cc0e6a5c12b250a60202e0bb0059a5574f94f2c09eadf4fc84f587209a04798b73acb72bc0d18b4bf72609883b7df704933e17b92659ec2a27744d610c3f32bf7803c2b57e4419d8110e4b54b62c5ae94d2183ae48780e8a7058b19fad4d3f3f1bb25eddb585a216d63c4a8986bd2d45b3b7248a95a9e98f06e3e1bccbe3eb21d32489c1e6369fabeb6b4a5c8a1349cf075224af9c30965a7693c33f60ec98a7c19302715205782fdd39fd10131f907198bb2d5ea04822a77284f0a44d9126531a7f8303cfe53700e7f32fc18bcbc4e9459436a4014b4ca9b28fbf5ea3a15775ffe6036a99e5f01725653daf90fad96838bd5278739b7c501230868f995edc7d02c28a2db5c3846460c8e34f444c9df8ad25d5410152968805347e1bd35681758d86400e499d76e639b3def4bd214207c16ca9cb5f06e933bf0c66d10e261c6ebc4d9ce10dba04f069e39ce03c1f89c5eb159d841b8c896c91cb59d801b65f7e357a40f59aa823c9168732d0f11d22e52ac712873a88d512189c786227d82623a4882ca18aeb26fbc8861fb4a566c9cb05c8801188092e0fe102578817d2135988c39f185e8905d25428739851dea35e3647830d7d4300cb735692a19536c123f317bde7d9a9342b1db66067329961b9baa018b24683f0679faeaeaad7e49a1c4b574dd52b9f331a8a6aa11d0bcfc0c742779fa0e3856680e83d414fb9cf1064174ccb440e1fdb007f0e0ed0c22d8dcc99c5ada785c44db35dc4f728d4728e636f2dd7d1673471a3df16f0bd22cab55b19d86f0b15188a76dbd282a2c45b8f463b441361429d21a0acb44339e5f0270ace1c48a1d266b36303b853a015f4bc4b48f5a911a4b932c26b427220c25834fe5c7418f64b525f7a3cd126373c2bf7612ced6724563a3814851cc8b23a88067b19ec6f0b15088a766df982a6c45a8b861d441361a2ae21a0acb4433972f8270a8e1c4a516967b36203b829f035b4bc4aa0f2a911d2ba32c26b822a2d91a148ab5af4ab43b2f2924b43d4fea27ab2af230f0b516c546af8a82695a5762470ab2327eba4aa23934e28e6753119bdd163c48798009be4ef9c1b02a958fa0568df8a5ded06b3ef43b01c958e9e3b2d9fd1839d71eea3edc967318a70495102e4e2ca0728cc73f968ff71ccb05bb60dc3e9f4306a1bbc746218d0a89d8010b369ad34a01108de190dadfa2b246a74bdac52257579fa3ab6226c24c7f29e1be69926bacd4ef4ac41e9650f5e7db45077d0b1062f4d64e0701407e77316ae8204841c144232327a5283d5f8c530b66bb5c10cbedac3b656090db0cf2a2b9491165347a60f1921cbc7b9a362560a7f7ea989835e202ed4c49c55838d38d41ebeaa7d1fb08188f11783a8af1a2d757028c20b89804c7b5a908d815534ed131ce9a2d2583a9af1b2531ee54360da9ab04b9f0467047986c57d4e00f8920a68ac4483a4b48c09c9b89410004fd9537061f007da58568e4fae0ae9a905a74e1a14ac284bbc71297f165ae1ee4bc170d96381bb4df59922fbe735450b6d867dfed1cfd9c7c63cded7f6f548aab414cbe5ccfc5753b36499f2990b8f1a164dc30f9ac8a315da00bdaf3f368ee762aa520cc7ee549f8d05fbfbdc1fa5ae1ecbe6c1e36e69bd8d1ecbf283e21f55521f6fc3ef11fefa4b2dbbe0c3c805bbc5070272be5672f971c6e08754884aff3f8c7c233080add570b2d0040969f6d2759b3b52802925d5da40750ae04ee6868eb477626fa9e2e8e38ae58eb938d2a6c12a61a4b872f949d299f141710f1a62a2cb1d5ecacb20b0aaf6f91c002b4de1b54b612e9359d1025af0c9810ce56da523fbcedb9eb630a55d99b8140c89731929c6fd753a597dbb16665504d755eca86c10114bd0c9281d2b2d57b9380a54251c311659b3c67d2416313857cf5f44de444518435b3c868206a82c977146984a589541269d1ad9743098fa89fbf9474e65699161bf046b6549d2b3a81c4b5f7351341b11d85a8107767c7ba3c9a06745c5b2d1c127faad728c85b818e3028bc82c8a76eefe5c60788703d1eb89123789ed993242e179cd6637ed35c94f47dfc1532ee25e0e5e5fe8e9bafb7242662fe96a8d8c1a6f1d84d14f2d252261df16e8dec0d9f53b73cb05a29da9e9aa7a647cde4f4fd8de515d1fb902a6a4dff0cc8c749259ee159e18402a60c62a01e8e6a11ab7917b861be113f0c222f1ec1e9317a4af5aa73db23cfb9c13e0d1739bfc310842806e78d5a1a5c1dc05017a33f18633fb359a285d0c5cc8690ebb43740d6bd30398198053a8660515309afe0deeeb366f8b503b2095d171a01ce9e066049b0003d188a11837ed1a60995cd8ba78a63172b28938fd081bb27b002647c2c5e9250802923d06e5c6a832728dd32002a754418cd43f173d13e326748244b9c0e1faeb2634fd44f010bb37d18d24fd5af921e9e463b8aa8e64627fd177430a43cad526942f1854b95af0b8da812b9b3b2eaa91e5363980c0daeb24149fb015f79a6a7c448de466a45ecbaad48a420a745053b124ca5722e70c778e781c1b540e3b3e796fdffd66de3fe8d753e07a1c7feb52d1869e8c1bab1379cdaeae7f180dc2140d8cc78cf0b989534953edc20ed92801aea59a0f07b80a781e27ce79512e525354d539e9d3079a113dc1e05ad35c0807528d1b2a17a65d15d57b2141b257efe4e68256a73e19b01e01453aaaafc8741a183f329cb87302907a9115780ef0644331548b1046a44057d991d6786c7e3a5313c22bc3e47ba06784133f85819bcf6b3630cd54e82ca8105c869b85db87e7a8f71325ce83d465deda927f78491fc6b1ffec50774f0a252817de5ec20b0d224293511ec751ff6347a01b6619bcde9cf7072657e9c0a38f4139adf428ae9e6bad76e0d583307a2f09aa4b5a087baeb2b699240bf1d3c23858a289c833c26ebc9f38d5731bb61fb75f5a14db69b6f99f5aa6749ae2006575743eb8744fbbf0badf62a5f856593427d1069ea4cce7dd1da167f6c89be17b62b935f0e039dc3eb60854d55042857867560968430fbb36f9932ded93f55bd6fd00e1f8573d8af6206469e2ceb4fdc5d47ca3bc7148daf847249aca6281dd7836fd01ab902e92c48c2206fc888e38fea2f8a95086ad6251eb478e5ad058049f94df0651752dd004452055a29cd3ae3cb2f93216b7d08d212f48ce09911397ec07a782e8c8b58ced4c152422b548c1e49c24300b21b0ccf8854e7f703991496f2785af6ac06d0185d198be88cf0cfd9d732da93d0cb6ea7c06a802dd9d889fb80c7466f9c5d8c9a547a149b9d6a2cdd209237c6052be0ca715b8170d8a28137282ac72f2148b7219de1fee3e28ac7d5ad8e0516e3f72a659a313e963d3efe59d409908426b8b0cf40fda5b37f369dadc7b8f4ff59bce7672f6bcb86b85b5174245a8ec60ca2a74ead222f52914906d90d870860c56ef368841c5ae0cab5f273c8767486b83603c251d92a03818ab08c6edfb9e5ccab1c22ccafbe953ae988b6e01d7a884ac92f6ecc426eab2b49f3280848fe9ae1b7b4e251c8379e908ec38ca5c1fdaefa00d1eeea6396c5fc51aa042d9ceb1268b77264cba71dab64eb47b19661128b81396f502acff0107781bbe263cc4015e83a7c395c14d5cbe680f63ea480c2c2e95cce656fa519cbd5711196f8be522385843f173a8d18224bb4b8c2de45775f156ab0a88fb73730034361bed4103fde435dd46c26b4282495fcc7c1a7c06e52a1c25593d79d6980c07ddfb981d8795edde21f958e98d450e2174b4c3801bd924d7852cbb586307076a29ee268645526170709c52c54d0ea7094733c8d1078961afdb8deb8f8bacd10ef7f49de2feb74c7e8dd6073936c75fac95a2c5da108059e8a0c5b20ad4e827149e74b0938231b270ce9899971077c075940c6ae5788400c17d56333aa20b5eeef6f9c0823e40b10056b19e0ff0f45784450ebd25bc1361f6e0fa76d39521cc18e3a4dd60e6d1b24ea59c13b5845b4d52dc0aa9be62f2abffc1d05d150193a98559c6d2904e2377a22b9ce6db42da50682640e2e213050f1a371d0f2dd95d5c5bb4aa610d811a898b6001696d0914b425d32d49e8a4d9ec62feb6d89a05adf3c643bf1b94740253f45dd57909a5db71b5390e75d5ee9f6570dbe21fbcd147977701871f0a080f611784a6db6764f66a2b00332ea173362a70289cfceebfa4be6dbd6def6e4eb919831227997bd8ba44f370acdc5e53f951dfd30ec46f7f830983e6537d7cd6b0ecd77941c30c103a57995859b97d6b310b082ecee9e858038078230b4800b83635ce98205df8ea5286d037f6f896b2c7699e69c81a104f07d31189c4f5b8d6305d1d8d4ba72b9959115709ea7f80a8acbde05cfe052984ebf90ea17c507920b146185ca82c5abab68a4a880092a332a79017b1b5450b453df9cc4550620f91e6872994fd781cd84d2425107b7f6b234fad59419e9c008192a42c73ab145a271a1c86435c1511805eedb9b4f34f12612c2a6ae18b59e7ea26dc076c1e3b504ea8b568ba4ade91cf7aa9c147c458bb06432c507d8e41d3ee25ecff9b07b9554caea4624fb87a8543470d72ac2c079c0235007a6ad0a22725aadbb8406bff6ffdc46246ce62d51455c5455084f10c5a4e442b2687a2ba673b03bdf1c41a823c9d210f4bf09e16bc7582ce6524a18006f4d9c3dc355c9904d7a77c2716c6a7df9d1fe15db3cf84275cda6923b50842332ad8213a6d718a65b877d99744b3df423c1f630092d32fb0be69a21eabcd5e483bb449ad189cf79d04dc8133c14d5d219575ac5aa14e1d5ab773871e16358782aa63d9cf024195c96c096d66f710880670e016e19c049d16f4f29053361dbd5f26ca281e360742f572685ee3cac9f8e14f76c7f2fb16b6b90bbeb1bc6a48c88e675f15bec917bc5092a1b4d01eea0b63328017051c511681152258e737e20424b53dda9b0012e28e2edb7767fa9de29bb74acec2253d22d19eb8cbb1eb536c1512e04ff1f05948baab44adfd0fc7ee72b8f52837500d67da737223a92c63484a4e5e4e1e1812a78f9d5bf055ebfb400d5161f26e60ac81955ac0c6c21d0a4cf6d31088d1b9738099b08459e8bba7212c02e8fdcec6b499320b82474050f463cec74560327e4ef59b7507563af859eb2062c7236b8cf42af8c1bce7f16e709a3e42d6234352dfd9b6f5f58d3a9fb171bdbb8427ce81cc5a1774d3d7a01fdf068f8c5f713d411b08e2adf2185f4032966f600d91969f0f400a4c450fc240966f42ac9bc2b101970b74bd6e868019219e3d6a90c66dc888f2d1e08b9b1188ce385a312ee0916644e1dd1fb39ab78a8960866744a56aa108691b33214dd8e5cec4dda4824d14cfc6dc987d3eac4898e1c251efabb1fa19d812d926be5bec1c786ce65bb875a80e0525753b99733cf25f57134287593c1095e31610dc4cd22459d77c278a457e23083494ae318c1499d3127707d0daeaa890a7d174f0e57e80f20dca951cebbe1f6c0e823b2ac2541e1e232a33e45ecbbae8c82b10a3d761ea2dd1f12e32f8b534922d83172d945b0376ce32f705525c706ce70281fc8f8d72d5b449edf2fea405db0b7417802bf60c8483fa171fdefdf01fbca21d2edf811a7f689e012396f801724eb44e1d8348edc27eee4b514a00a92fd03f69ff1763d00a0d4a8afdcfce92a60916c8dbbaef0d3b6118da2554092cb52b130fe190dc1d539dff7e8817a4b21657571d78be7a785ee2b4e72b077a78a1ec9259625b732783869770e20627d4c0362ff78113a5815eaf6ae0b1aced869183cb18c49af3c1a15b1d3cc5b0c69ced2de7611fe46ecf5476214536820d60c6879f5f67331b4158f82ee72f812c079a22d9c65502927dc23db45f3d4b9da6de2bea9afa1d594b7fffa151aeded3e2106c675c1f029887835d68aa9cc7c0df29dc36d367b4abf810455a5077863a4ec9611ca25034fa41dc30fb8397d69a7700938d84e0f9e1a811492a562da33eef51c57430c7a855dbcb03d39b8dbb1372977bbd81bb6aafaff4b03376def93e011d7f3fd1bb1f5d36e9c872bdae50ba71a9115fb7f252a342d2059b4ab063e265a7f80f1a98b872822775c5d2d165c4b960782fdfac4bf18c7f12066f3f9b0b94854f1fe73295894f8ff60d8e5e2c664be2668f6e5ca9fbdbcef7eb915eccb65bc5a69dc3cb2f0289c3e12de7a555322570e81a5b1f35d79fb9c766443181a97565264025f073d77f26fce32232bd3b5c83f75e67270df5c0d43b2e9a4ad097e09a4ae2668913ee45271edc88655485ae68a2d459f7dcb9646f56b0c4858a4bb16202b6a28ca524c550648a33562000aef2fc91cd434af1712a1ec49876d2682c78e9bbbb77f9976876d2a056588db66dc8cad052c74d2aad45dfedda9aaa93e784978bcdf2eb43f3d15183ca07d6dc26369433a426b1b2f1058f94fd380094ccd05e590e03632e951499ea96fdf31b381eea5f8802a4afb4f2ff288a587e904f3a29f71a736386d0a64b2bec0b8fb19af88027a6ba0ee85bc3eb623a03229ee15bf2b5a05618bed9bbd6152cf17de95a01b0697bcb573d742a2a9f6e9e357618fc610ba2a2074aa27aad105df74a1c29018674107d440a82acc9927307a578a16d7d59d67bed095d4c51f297324cacdf4c2ba5c9b440385bb7fd5bbcd476a119360072d761dfc13d5e604ad0c63ddc805810ca0a20350c21144d804e9f39db5ace41957378ed07bc83d810c56fe88538e88aa19c4c10df334cfffab03b85aa08e2b6ee386af05db79ee353a02262c7feb3f615bd69e51c9a696eda6333d64c556ad6344e0231805e0daebbc1a104ff3227c2c19cb83c2090c221746bc8bf41f19f84b99040ee6a04c893ac1103f59a310423036a5d5e687b02d453c28dca2c82425f9d41e83afdd45e2c52e5ae78968fab23667ea9a164445cea43b64bd100b2fcae7d1c719d45426c209476e313672b2b03f7a1143bee9ea64682ccc1494f0a01f2e55e225e76278467f153252a21c080a45855984a8548b56e3eea584c354d84fafad84b9c4c49209bcbd3273402b1e963d2af5214a656054aead00c3ec28c3472cb2f04f1d065d44d91ee38388809254093df84ca418e839308feeb9acbe6aadcbf80c8335c8af92e7b90ada61088355efa7db2f1cd261a2bed36a4e524a6efe11895e10dc39caf7f3a5c4a0012fc234b44c62976c9daf7f8c209d378c60d8e7b2e0474be19834f8c5f418bb0e72454a0b41d8812fe8899ebf88de834ffa8132123e065623a3f99fbb3b26b7a3efa4d6475dde6574db7ef4e3d3cb2f491f10de0555b8213f09ee324e8189b2f5044614583d49881075d9cb1792a4afd8876d872b13a9f7228cc389ce7e9032b03e1886827261ac406a0de551082e90303c7749b5873a9c0abf77024b5d3487da49e4955fd5b0e782d3cfc61bdf88541f7c092e7f907fafac62fecd2a1aeabe5d78d7cd9796b659b1cf14a6791255b603fc5681170dd29ef18420b281f7c4b6324cf6b6154064d44ddf7b217d94f1acd7f62a1581a9e25a8b8a628738fd78900ffe3b68256f2c6e2ccfb4076f7812f9f3cfc41c30f46d4c876060e2ba14fd9288998f916f7d0c6fd8f91361082baa49c4d2a20a5cb4a2b2f90f228b544292d97687e08143b0aeb3b65112f95f6aa2976eea94747960711be3a703640c257473117607c8122252c810e13ed09f6f123f09aba11f6b4b4366eb4efc04f22ec7db3b17cfa10667ecb18b205f724410fe59fb7e1022a43a6e148e3c8e1c1af5b96e8a4e1229449c636c9bcb944570189951c612b97d7da672c26c4a5d55bf227f589e7e034ec213c7955394ffd7b155e0a0ba79ac0596f87eb77292c5ff4b7b93729140b968381a6b3aa82c39b70d21109f320d9376545a781517cdaf425d0ffacbcd82f2c9257af26425a2efc8903e3789f24cc5728db570b5dbea9aedf2cd19e644bd680347e4647b7513b2ff5d26629800d9d7fd8349f4657c661ff856633734b9021e9aed6ac68429127fd7ec819dd8fb44a1b265795c0b49f24e88a9f5b75aa20fb37f849db1f38c7edce0954a6c07927411ad901078277b15f29c89a916ee3fa5538d684f183909f09b7989a215dd11514c8d5582ab953b9351785465b3b849abb4f6ea3394c86e2bdf3760a9e3a2982114e6981d4b4e73295a4a6e1bf050e1c46819d603bb209bcaf344392d62869cba1e7fac8511e634dc616e0cebd49432e5b45ce2680cefc6de7d4546bf49e9ce8744b60e50fef3c42086a10b5fd97b6e3b4a98b2e1655961947c6ecca1f95977695a274442b198c785659e85b0e13d9c609a105b37f0c55515f2ae221d43803450a10be23b0f533d3195ba8147ad1f03a89a6e2af491acd815319a6d444309870044c8fb3901da061f80959f1c5d006ecb5172f17d31a79512c430a28048d0d9abfd7b13c22dec166c19602859fdacc515bf2783e7cc8252a7b605b17b986a0f7f791d5dd7f2a817148777ab44a698cdcb083297385342319280109e8a8900a026c91bbb80b0bffc3b73ec4b17ece12e50f44fa4e6269f02893ac633db65a004ec2ad0a311cbaf3ec4e7f9fde2a493745a75771e3c849418360f9300851097b6d2edef534e07ae478e7e6b42d0c560c1036b9ac855fe71e8baa1578cf4da4b5b8bddc6b97f685cbd2761366449ac16dbaa4c61cad8ef9c4778f2022858e49d9bd5b465b6f656ec283a364b75195f2afaf3d109b2210758f22835e347d1c633e8e03572f230bd912c4857e8e62623bcd82d038c2d63ab45dd163b3a42f85ddac08604489040801106b1e629a0cf5776e0e7f96230ee16d34b8bf332b2cba988c8099e3a1fa2b5fda77853925543d7a306bbfa262977616ff1ff12172f9ca0cd260d05db3d3fbadeca1b1bef3076df4cb72cd9af42f5de8cd2823501595d58d5d36ebde10afc5115ad7c7cf3db9fe89b10dd3de5439f91f41681cfc0b129cec510edd6f03b3efc3420c10778ea8aa997ca39b2074d806251cd7b83050ddb1881e36b606607e9cfaa64b3d5b373fcd9d8fdc20fbc781a409f4907e035003b0c82707d4338c752a1b91b3f18057453edac8cf199085ad937030c9809d12995e2d530a60d7ec7ea5fe98615c90571e1de8c09b2256b2efeee6abaf60d4a438ea6c42764e6a924214e3a9e79a61ebf68fa8c6cec85f15251e2c1be537f2fd5f5b7ef582d8cfcd475df5eba709fb7f0ca4324e62d2d0008aff0d258c339f5c72939573cac01821330d07b0b9b0be8e429b6afb01e044701f9d53a8c0d43d6ba8e591bda0201429761ca347acff0399e042620e84ddcc8879767890c608218fd1f977c8621e3702edcc474f7bb8c023d197accaa02fd2af80b6d4d6d846db85e2df5eb5ec81826d9d0c33d48596672d4de00eed76e039df1fcdd67b65f699633727615ad719b39e9b769bc45a07f9ead0750c5171dff7d601ee05cfff7542b268ec27e2b4150da6d67743a55099d46b1ae99c163b1129d88bf294632636394139cb34238af412d1c5df0245f6e8bd2e383ff9d487b53ecb210f9bef468732d28ea067d1ba346595fb1d43bf92392321b0baadb2f23c9e365542d15cb12a6bc2347b1566dd2822d607617174048ab7091d62995777ebf4cc3c144ee81555e980d0d9f5e58f03251208f7e62dc88725009425ad51d24fe5ba5b4097267ba8dc921695c1ead522b4048f844c0d873890cf1228f935e958fda65b2954d3c0422f7f88ba70fda89a38900bacc07ebe289a75656beb4be40606152209106775f9985085e1eaf2d73d15f7169666789df40435f243b8f6a0d91f07386787b577b72997cdcc052e9610da51cceb343fe74bc1e3fbf44ea41adaed572d0a84640c1a4b6b42680346fcb70308e54000d5a6c90bdd1f546b792790d33f86f1b0e45e2624f0fade9eb349af0b367e6497388373722bbd523d556aefd7467ca786da5e7d6edc74f0a2fdfd46e981c484edb0b7e47bdd86848d5274fd2405a30f12f150b35f09e28cb7bb334217a56d6fa89d15df9f816a07f58ac8e0f2a207ba26a70fa6b09c70058414e73469ecbc90017597657f1c9dea0ad14022c766dffff4396dbb6576cdd932fe57cd88b69d4ee4797e50c895bc216f446b6e5a629eb021f48358d83f39b8a14e985c6fc313a4f2e801767fb8cbc5bf5b68b84af4eac81cfd988c604e6cf0c5796683716e2028c7cd27a47bf3f758aa5a3de1fa7a603c7387ea0b72f081c8309ed3a8f8c7f4c482644c2d1a99a40376c9e1d1ba1f260b06138d7bbc79c744e237de699f2587bbf4d87fa6ad18954efe5ea9b93fbc48a1ba1940bbea00091bb07059cbb9c61b97295b6a0a57101afa87895cd7a0aab2b3c1677e55142f83eae920538266c2a8f80b13943b20304d52d1c34b44d6e0af1ca6672779b521b469d2f18a564d94cace60818508a348d45e2a076368c89ec0b3d0ba45bf3c424f952244d94881b7f0db7a39c9737b5f9370ccb9e7632ff79dc7d7d6eb021003c281e116341060a4025a0bc590630a7a2859dd6550e0936830142f3676863ac09f34eac5e0285b7d1d9f240abd248cd2398fc1800f06f928bc8729bba81aba3d2f62ccc3468dd207e43a5c8faf5ef382e1b93f9db7b61f5087b66e93fc67a4b7cc6ebb485934020c9e9e667744d80144c78e62e47e9f091da519d5103015319b5f94dbbe95906a306a71c2435f0a230e10a725b5963b805c2decb285efd0b32732458083ecf4ab9f7d528a53810dd14a9ce84bb4958c989bf317c751ccf3857cc23e416970cb2424b2412b80d32a67be09475a8e4619a817736fea25473f709f59e4b32b43b35333a8e241b8beffb95ee8197eb6f414345b0e3520f0254e58a6138f841a22e2156d463188ceacc1afd35a36b7e9866517403e6a23b45db4d41f213e02c4fdee13e0a3abc38d2315e8d1200fcf1f03313164ecd036647819674c31f6624dfc85d11d80b8af4951f9f68d144caac28faf97fa2d2c21f06f93f540cc3579f29e91fcd563bd2e4e5d7c784286de5207b97827fa023942b625b213cc4ea59a175d789faf1a401249c53ba5030df88eb92477e4409b04b113491bb3a5aaae346684f074fab67f20e9778106eaa19fd9849d56616230e5b2ceec70f5620e913d0edab5fc166427ab9ad43041950e0e334c38e29dc95638485030e4055a9e6c8086cbb90a806a7ac19454ab9149c3fd377b23561205ca390ad38f42d21d8a08dc36a5a0dbf657c9ed49bed7a6196d70a01d1808da5212eb746c25e77f8c388a2e3207ac81fd59fe3506c02c7c5d846dcae9c1b637bfa559fc883b0fa095fa60b5cb22837b63c1e4438dabca0fe6aaaee6ce69cd1a505fbae4d737a3ae0e00636924a918d351bcb493cba23629c7a20ca2f53cf1f2447f6968bf9ac662dd749892074f74e8b2121d9020fdd5ecce3212f7b8f38f1b090e00a2aa2548e70f6aca6643dda8fc1bfa13f3b46cfb34f76456a151523aad8107090c5e28c943cad75e80d0eeb27d4e98c0f60d3477a92b83bfd716281e1bb4d2982f2fcb82b5f0001afe734f6723b890d642178a3ad08f3bfbca70ac789fe024f54e872e17827c5014c2bf781a3cf2b8a2810ba159248fc7cf26e999a7835f356c4a93981cd6e15cd9f79f6d014fa6e3a0ae4b4f043f5b44b043b484c169489f2dd2767a77b2e1915ac084296c900e695e98b774322659e692fd43147a5fc8be75a16352ad240fbdb08a680c6cf42ee016ede041f67dba5f2797010e0962db3464cd722a1145e22c05b0168722a92da98337e224bf4f1d64360363d65560a572b4b1e5c9ca42b824651fd8687dd3c881aa184789ab56259dfe03e78d8ba75c64637c652ce375a1864a6edc14dddf5b6a60f2a53d9a648ae7723723aaa47c89aa2330807d082a9b3246684ac3979a92f6aeed893441be27777adae5a2b310ea4f85ecb88e7529b814ef73aa5b5ad8ec668e19846df1af292f86627ff883c9243a1d1c47d4eca472aacbe23a86822230374e0cd21a67ed29d77103c407443f53140cbcfb7cd06ca1ddd54fde1b104b97dbe7fcc1ea89031c31c8f258c3af09b5d93f11a4c4036000e95373b983b2948d8e6e0ca0fd9e9a2acb6e279faf0b182f25883ae5c46b021f651c28c683270bb87e207410ee200f94c1c98a2fc96544ac5088f4f37d0ff0136e7f553a5cb6031b44010a0b0780e4b7637423dc6ae8afd0385a2d3fd4e3826a517375ba9ff6c914a1d06038b4d96205b3fd72d52bf47b4e1ab1f7f5421d6a95b02db676fd19ee5d28855d0a3dda563a6c8284b3ddf17ba0f0f9f0860f1ffff854abe3eaa159773f990dce9e15ef942e7995f907f3549e412a6a1b6eccbae712fa3729e3c7463454d24e880835a5390ca7263984a186d4d30e1ef76c152a88f6589bde4d6f20454fd42652eceff7c43ee6649348a813211083848a621af82d2d3e12fb987a509829774984bbe0519dc74a0725e995a51bbcd009dbfe952b662dfc5f80aac0b5353443986a2f355b307e8d6d4792be1a91afc2609448e09028ca0f7034821bbc99ebd5cbde35f45664c5c9d25decf8f71587e5e6e89e3196fa604221987e5fb2a11d8ed4f5dcfb44f2943fd6132e52f4369b063f45620343b7a1ee743639d60ffb54abc82585b307adcc239ef29886695bbc0a91b927032845ab01766d003e768b204a3b2bd92e92ae49b9f8669810f5ebb3ffecc9d62381c463ec141020d3335686f1c1ddb3c2d24b54bf894b0da99ea01169fecb36365f7fe7d86ccd275e9d282fab4d8d914305a93bc0309adac476f9755de8bf1369b090f1247ab835b7cbde6c031dd2c57c201eda0d228aab80683a0487e46eb0d7c5681a6bdfbb5a18e24a4684b3680e60b80bf59b78e066f69d6f21a4c9f43322c7d01f16d24ca1aef54223f538ed818b04ec5238c2fc7f25d163c92fb094dafda6581943ff9b585dc8f47617238506a52ab8ad036b11b7a1a40657c47279d7cf39ff50a6d892b2d2b20001d42f75173b93de172d8ccf7d248ae435326ca0e67d2b977aec5211706fb1411608dc02d14bdfe961e4cd589a3ae54266c03c7860c1e3915182e7c5f348951d525e8601c62bd8126ac7fcc6d8deacb292281530386a1a1d62ed8622f63412998c578c8cee102f6d56913ede6e135876efea8a329b12dc6bd937386752a136147f846d68b50b23cef8db29f03331079f6c3b48cf86711e1d2fecd65b891128d2d244fb50dba8778428c5e0d429044c1ad884c19157aa09c1ea049c1deec6811dcbea257c776944d17e0edca581b61c82b628cd95451e5a36f011823d58065641a279118482621efe3fdd3e48d155b338b522c56fa3905e74a6483e780749d4422091e2730a5d6dea09c41c871d3bb0ed6d8988a9be898c109e002b8acd43b939f830c90150ccba212f8f1d00a99f00ccca55a65082f1923b2016e5ed396cb5d25d6d1e1b61996577fa2f6dbd0d6e2862db2a7a6de056237b02db4243dbaed7a0af5dc19b75050bc614b2d100ade5fc253848167fc3d4b073d40450f3cdd13140e94f98220a28ff5571454173a8dcc120984a000bebe00d340c17ce7ebe8e8add89511329fc5e7cfea6df37d853fff026cf0f114a0e79097e80a63ebd905fbb646076488345f00d153748045c752e73a5241abd70134d0e7f72321eb7233585abb9bbaf9aec16477575b489352f9bc8924d21ef45ef5cb7f4b825b9ae8baa150cb5ed40d2a64826f69186a357ba38a9174c5a0a9278848482e3269bca0642220296860dbc6adbd1cc3aafd039c706d01bfb0ddc8cbe368cb5c503419723e22908b181e703586cfd233d38b444c69bfc16c5e4c986174dc55692538fb493005144aef7d97492367fcf623a3d23f4fdafe64a2e7e0f16fe4c18471fe28fb91ccd4dd259925429a6c466b1f319119f8523792d0f7e5fc86e86d9f79223670601c81c73cc2168369ade2f71d211551457a528c81dbc9209d765e5448904a45de86ddc2ede5e623292517aa64656526528b7eaa96986c69c041c830870a11bb7b2f7bad5237b91248febee9314edb10b7e3e7f97751d66027d8642fa3e0669a9a636945c614009f84bed362100354063c0300c92a0ad49d35611b4224123ae29dd6d705abbd65c0a412ba12123ff3a4c59340409a8e02d4412300d998226859c30c2c06a0115f041ff8755453d2861583ff7f17e499f438768f74df3c4b20bae24e557e8cf872572301f028f82c7aea98d6e0a98a541c469dfe8061a78922d6fffe1adf093dd583700586e6f6099dc1a01d3b51764348a996111068e69795413e1acb8effe92dd3f9c81b6d0a4ad7dd829e84ba20fe3352b2bd0c9f2e976d1ba0a0a41d4e919ec9a826b5228f5486937254452240a02343471db59d656aaa9092977ab10ee5825e873c11e0e85d5ff2d6cef6c594b650ca05ea861942196acc1e64c1a9a57913f73d73aa260740ab1878af5e949e7d79e18c416a5c25123bee3b7436bd8fce14284fc2f75b29e8be0129e7ee24148f8730ea7ce955b814667d9e4b067c8255e11b3e99e4d050377311b56a6e0cb2505973fcf9c42fa60f64c61215423a4745bda23f06e8e81f9d5b50c4cac38772b7c75097f8f10b2c4e7d02dffa5d6a9dd7d9859e80a72a2055c50cebea48cb131be5d45779a50dedc230b170cf09da3561426fbf5d5efcd83f1abd2e43faf85cbea6ded7b977132d3c5da7f63cac6ad9fbdec24a9a7407b4ed11a0213c244584e67ecca9d0d6cd5bab19eeac95874b493bbec72c640ae53b4c3340832137d8b343823a0c4407eb1bfaae1f4c734a5ed2a96cd2cab110ec3858b1ae34e62b4c680c6df26252bf10c88d34db4dd7ee2cbe818b1116a5db367922cca8393f15c355d8a809c937309980e3e3859e765ffd0f067019823764ac496541302ca424b86a01db24cd44bccd36299c2f980cfacb70f9d889bba537974ded280ee3bcd9b122cd416df1087744254fb77e6bc277725792374bd327dd214ff11724a07bdc1af18d50addb6cf91ddc84ff05f93b68325d2c096a4ae4c6a0682d76d34e9e38dec94971e3397ffa5139dbe117a03650ed6e28a591f5dbf3c56202ed8603d3fec713801f12bdcac0c14726f75c67daea9af598da2263554c8174e454a0ec2ed2e02c11e80c47cfd1c7e96a01bd180cb3cca01de058c9c23c263bd81cdec15b332bcb086a436c963cea3358e930f2f4cb9d2f2798102b5267adc5f52eec9d0b520b07002069be6e369d6c46cf9a08caed4e25f91237bbfebc0519d896b2b85ef363f19bd6f4eb67539248e962841d481111663ff4ea37e9d3e2b068fdd1c04466d60c9c049ab67c5b88e507b4a6140b31c44c2ad300094e60368fe3f15dfad680cbb8a9b8a4341fb4c1ecd380713f70e1687e96ff53ffcddbf31ced7718ab17db7c95e2918b78bdd25c7ab9596d955b70745896607f4f3e657557515250339c7ca6e2606115b725f4a69430d654609397e5b770e2231fb74c652ec0faddd4070ad9108f71d2bc687738bae438ead6f51ee75874b02f157da5f9abf95c21cfdffd9eab1347d002ef316c1f675e5f32ecd5cc6c3cc3b9217b5e3c69ae91e402167d904436b96709aaefe7127552f8a5bb8341c8517b4ab5835beb175db2760ca9243156df5391a640f57a03d5074506c98647a22673872d7d1bf23b53e8b08d1aab173ce2d99e1c1b534331ed46eae780fdab4ad2cf9013ff420e291bc90394883b9e2d847ed7a262ae03dfc14d7b3b24487cd3402a307f91a4afa32e9dc2783c38a97383753c4f5b020203008b4dfade6355f3f7ceeacdeac855948eb776a357858262bcd3749bfebae9abfcc37f5dcdb83d3295fcfe33c0ab88d9848878439eeea4dd09121a5112c77c7f5343c74be94b041db7be6766703b44d64783604911b40870a9ca4e2197daf021df03ecb1e14f0a730c8eaf2974dd7dfde4c02e81f4ce9f3b5246fd6b5e9252fbd1ecb99994d64c1f0245cc65fdd09b6de60f603e70b003490e523ed034d5472e10b2acd6582731080d755e79b3e73c5c1dbeefb5d76a0b35b6d13f0608724ec088e8a4d2cdee36df0cc9db9a67841367d42c9328ab783984705b3d04a81378366c0c962a9c676c7b67bc35370028a4412db7042077c2b3c859dbb55c26d3859e8ad1ea7ff0bc7e093ab258cc2d6e725c3aa3f00cefddc1595f752674ca4573a070e3e833ac362216d85a1302f55bcd499c1b519866e9b33633f957df578660094964a828ed40513f459e52907236a942801305b4bb46ab5d7cd3e879e13108521385883feda5764ea4813b5680633fbcad7829f3bdca6399e634644da70a05d33055014cd7590538d761e38ec5f99730c9019364679afac5dad1e60ebb540e8c09e718919d36d4df647085f2fa0b269400c55b165597594032fb16b2e576bf63619016d6147c55d5989fb3c16d28d4c574c75c918b093f9ce9611500f208fd50a0baeb254ea3c8563ce198986fe6aa606ed62ec2668ad211774114b8894d86c42b212136c437d3db933df357ded62b002fba300d69459f41a17364b3551632259e5b85e481904462de20e5b62291841948f989ad895108d10ac96aa119954416cd0222aae922a6b652f2418e6773bbb030f5e918deb68aeba471fcb8105238623842aa98b4c6a20127fd5366efb62a39daf373d8d527500db6ebd60d808b3c70b2fe6e2fe4bcd80593464e89aa43462753e9b4957a14ef249a1532accf949ef1cd5be12e44c1453f6a7bc21640be6d4e9db27ec0fd46f031a4bdba356209e15a703695cda02fa82305b44d0b332a943de4c57cb6ce5209ac25680dc63e6d2569c26a9969b35002c7e1da0694245780f78129d6b7e8dc0585af7e144eca8444c4af00cf238b3e2a7256defb626f7de32252903f709020a1e0a6013d3a503f072312e365d9c13ba30a62be5a751005e94ebd96fcacfa35c5c6cbab858ca8f4b0f1a48af87694ed034cd0e9175f3ce7a5ee722111b40e9a3738f43debc3f1fa3d855f9221a229188f4fa19021a9a1340ad8996bdb44334df687f3e462f437e6708ba65419f15c0dbc99e5d76b2b883f4eea5ed190e053d7b2723c1e48683d69f4e21873c38649b836f9676a845edf5d7a326756fde79d7d5538d890294bf390b87ec31ac22d92b33b237260c3d7b3dc6b04ade481bf939489bb03b7c2efcced959baaeebc2ef62be93f9ce635ccdb8fc68bad653b992218829f62c9e5d64af0c109e3d646f8c0e9e9dda1bdae0d9397b3d06cf2b902678f66629ed75791361d8c11878250cd62b4aaf843df768eb599d19dac86de5ac0b29a18b2f97a5f5ec1d83b1df7c13d92b5fe45d27f29077a14ab90da07c910fd1945c941fb261b1cf0879c8e347130263ef45f1ec77c66b53009be0603f44f3cdb5d20dc03b7be20eb46edec5cf0707f3117ae9d4af1785a671d282aead09784d3dae37f5f4a03f7b220cdfd9f3ec334d4117c8e166bdc9d212492d8ce9dc53e4d2a528c485ea90766f6ad9bbeb954f7d0241051172918bec90908dcf75d31a9f7a1ccaf85d1392fc054dbb324fa7df98a737bc3e2ff8944ea7344698ed824cbce69b77f2230294bf6d533a27c51652e448d17a36fd36650610038030e5f534e396fe865ebae45c4afe6284d944a0843068e1630c6f067edb2ef5cda68beddb65a266c96bf7e5e390e9edb363e2cdaa55f95f8d30407fe95789fb32db0c5de4016cf6c99399468d20b088f643a4b74fe93188ca2b3f9fab145e99fc9ede9fbf1a39c56eaa91532935720aac9153f2d6fcd55c7a2792214532ba7a6b26dd4c4eb77ba20989ec45f2229f35fec42c060080d40d5d86977ce49d0cbf3ee3a7dfd24fbfa19fd369af4c277b5d9e7319f6ba7ca0afd01457b1269b62634ca1d892b531a6487664a36745950892a792887c3a2b7f341c14bff9ac975fec9afdc89ca0f0e724020510ee2f929a97b24794483fb591e371256b1a8b014ad734ae611127d209f29d879cc695c8bb520d24896aec947f74ed441d0c43d1a9addce62e3f243a57998889ecd3316a9a04a526656bde334a39a7a52060f0a5bdedd363d3f6d93e645a1a466fc6d9dd54ce969c051543e3b63935bf3db539a78cdafcd98618b718639c73c6186344c2dcb8397b72536eb6264173f9c379a6ea23fefc742cc2684ea37ddb34f91cb745ffe0c41d34678db9cadf498fb3b7e635cdb7fe79f6cdf9e6a7ebd4993e67378c7b9ea05fb471dad539bdd33d3eaf9d9d9d9d9d9d1d276266a1cc63272099c691e18062b25950b7fa66676767676767c70919191919a01d19de388777b8c7e7f50373b95c2e97cbb5b3b3b3b3b3b3e3449cc5599cc519e7ecb4269b05718b6f18875d2e97cbe572b9646c6767676767674716c42d7b7c5e3f30201973b95c2e97cb2563322663322663322663b2877e106d8137271c7785397287c53097cbe572b95c41aee75e312b6616ca3c76028a37be18c63086318c610c63587c318cf6aa29089e4eee61d8324c839be75e4556f42e8646fddaf1c423c51718ac5341e08c7af4d9d12a592deb950d8fe7a2cfd9bb09ab9e2022c778926fcede5c883b60007c2d441e46cedeb05e713d9de2b843a8b99e67873d77ecab9e87eaf65b0d3040cf372779b77d3424cff34e7a24cff6175bed261c86aac6f5f87ca8ceff6a7fc121006ecf44fdde46b2dd64e327d56e1261a48fea1345c0e7c24b6f2d441cb6ff3a512582a4f59ed5e92cc78d3617d5cd762cc2480fd5f89df45ac61deb94f4066275b3f6e69c73f2b75837e9d80e37378d33431757e028f6ed9386bd354fc3b99f5ee1e031e7ce56af7a67e2f40ac6a34f57af6ef0e81deb550e8fdeb25e851ebd67bde2e1d13ba8573b3c5e992df6f2363c2c2e1e3da657385cf3e8a75eddf0e8ce2af718e30e28df5cc61d52bef964550ddfec6582bbb2baa36ae3a8319d92da8bdfa8363c361c04cee2b1bec5bc56ef6c54cbe279a88afaeef3509506aaceb0a4d383409ec9047aa82ae3bb9287aa2b281eaaaad4b0222f3895e2a1aae93b9387aa293d3eaf1f1e23222b070aca4e8e1b3cef46c5435594195d270212c5443251a984831c4d01de8e898050b5f4a00c0fe766a767e4330341916809a7da6bd4f6e1d09b412f1055c1ef4ea4cf51452fd18f08d6a91387d3a92d886b71381a996ad4e029c00b76333c541d3d0e55e423c35bab3638dcb47276463d239f6d569ac5be0f87daaf96da3eb3f573a2e1a1eab7e2ed3754ce0553399c518f4fa7da79eca85bd04e37c977be77443ede26bd469d02e5a1aaf72c55a725478ddd5251b57b96aad3e22ed5f52a2d386ad78acd3c8f76353c540da12a4555ee6bb0b878bebd566d78745822485aafc33516dfbc86772c7ee3fb115fa66e54ed73d491ab53ed611de574aafd46b5f18013ad56abc5bae1394c32200ebb2e47dd82588776ad6eb34eb5b314e0dd66ef281c383aebb9549614bfedf3ed38aa28a853ed5e45320edb6f5451ac8a8062bd8a3cca893b6ca2d8b773084077a7d4c5857a6571179a2387163f9a1a953eaaceefaaa7d566bd68955936aa8ee6b6fa36eb95084804d43c624fe3dd4a1b5efc286561b1f1d16cd659ea8bb37c342fa91b9eba612b7dafd56dd4f8b6c68f9fb5acee06cb78638ebc56d76a64b5bc702a7543ead081c373a92c8eaaf1bb2e7e2ef6d6bc8ba350bed5bb81a0df9cd63b6f5ee47c03a25cb64b65715a6b38eaa3a981aa3b5a7c478b45326f583c2cde49af46a51f3f169b0355452fbf1e21971e2bf599a651d967d4dbb9befd546f28a35e5fa937e6efa6526f8ca95ed1ecdb53ea0d51ea1dd5eb60bd94542fd7faf6d156afa8c9b77bf58a9c7c7b579f98a27a4d7f45409c479f517e349c8ee6fce9dc384bb34838188b675656f4f88d621f6d20d16a18c9acd990c89a131259c334c717383f6950a2f1c69ca4d463ea99000961f00cd3e7a1c615656d88b2aa804eb6018c33ba8ee4813ee4afc0434307c0004d51506ef3b4c931c2b0e5d66c9653e2107d86b5982dd2de368e0b79d0d0301412893a1a230f1f1ca214a40991449df7bdbcd0443fa9010cd15289db4adaec12974a25094e4a3566cbf2cc92794a9f779aa46c8d9d432111d72ea6f3bc8feb057db0a7893c11897406f0c62e7e70b80577b4c89c148c302a80b7878fde799e9c11a6f3989979cee9fde43abd0f5c824f9e348d68684a2812858e6ecd8f21c700af177d1443ba351f238cb671f40b7da26ef6c772c4c919ae2e72d7915620a5162c994e0f8a1e0ef6446e383324cc9c7c90cc743a6d36e866a4537a92654b709a36209b2e31a404e5e6c9c290d5a04d9b4a624033d98f0f904fc80b8d4228a199ecc707c8473277cfb985b8a96d1bc7512a0a7d21100ca5844e2119a11baae862189c93ce4423b98b8fce71304abb510bbac9cc2c995932cb2337370864efa0ca4a9abbbbdb4632745d94520cb90690d7d053e34d3adb8052ca34ac01bc9452d12846185a82ae23c999ce5d8802227f888d09022f7dd9f302f0462026cf4824a144049cb8d1c9f3f098c821b5377ef1ec9ddc86689bc468084094528ef94b65422dca8174a259b16ddb36a715dddd564c59ebd9e70f5675d36d52ef3533d31ef290bdb23ac1612814aa457c1480436e16910e05874582b0aa9f524a435da3748a9cbd0bd22bc99a5108121c6e4e38c1210779620681c16011a60a397b017e84a24c13a71f32e547335d56393d073a3dca9e03c8aae638ceb72a39ce27c771939373cec96d9393b14792678fd6ac87e15f50b6344f0b73b6c44665a8d325647e74e0f39383255a8c60c9eff8a8051538dfa3070ed96594538b2167ef7ef44ab23a6e9b104138e41f4bb08afd89f93f9a52106c5025d303ab28a53e2b5764fa9032866a366abe7d34d5e350d32c8501f8c4fc0b7660af24cba3a2a747c54c13e14c21197b04c6b08a411004e32c54852eaec09077b36af24d9c027293648bacf8450b96660052bb61c1a7fc66d3f6583c9bc76f8821d2d99d79098e1837e366a42e485e908048b0d6730b17440a0337e3669c1352186400c1e5c68514e3669c13194070b9910104ce0bae0917e38038a42d971bda3a01c8c97000d11627c311d3b4c88989410378e3ebe6bebce732279691170306c9494ac440e1490e39244a0249a41a72b0f2ce1539601539a95ecec959a29dbe7ccb9b9c1b65f1b5d23a260719cd5eea356739ce2773fcc2e299d3678806f0d2ef9c2984a317736a73c7fbcb39cf3b39371c52c1320911c04b993265da39a2d02cb6386979d212f4cc1ea8a20a49bae2b91d8b676f528fb4ec812ab624323dfc808111c3aa6d234950daab39f528ccfeb60fabe22b0a4bfa270840bdc5e63754c29ba1af715825bf2439ac1a39149f93ac685459c621c79c8338eca0f86c9057e51772c6a10c8a31254bdaa77d56edc3dddbe61b18edc3213313c02b6f3c79c32a2aa48b55343bac42498fafc924cfecedd32b2562ece013f07a7f39f64d2ac7389449ef64d07f01f4976dd895e895bc61199bfc9575f64a9680de308a44d6682db202472905b8e04221ce43d44321ca51808b6deb4e43b756610c496600afcc4808608ce7d7a444a7d8edddc235809f7f4870c8af2850f1f1c9c7d7135adfb127bf1e3ce647a37d4ad8d8e779fc683aaf86fcab7cc35470c822f76aa7cdd377f5cabc0ccb9007abb4f77825339b3967ce2239b17834cdb59aefa4473203c8d3413140998f46b31e131e6bb48fe6c67b6e3ddf682f2d7b7fe3cc895a8453dc1a090164bf9199d9bb2535aa832ebe5c098b404828d9b92247e2709ca422ca969849b412d34a9f297d9ea54fa734242e4a52f157a2648edcb98243f6697afe68e4eb08e08db24b9148420956c9672a5ba2378fdbb4573e2a887ee9fdd25e140fd4cc6360fe908fa6ed0c875ca79c524a4df319a79cd15e275e1b327378761ea3184c27e411c04bb780c94e0812e73b92e7a17a5f3e34996b91df23df1d18a0fce963fa0c7773cd893af6a4a83951f85e9c2c4f4d4fa94fea9155380f7627b217a4fff2d465125c102ecf858ed8a9cd800b2ea650b5482fd2ab53dc05f0b6ccbe652623870423fdb84cf1ec5ccd935e97f47a66e23205cb56b927dcb01361d85d5aa4178989cf1b7054e1b52e8097b4f3a41d0ebba5ede5809cb03c91966f79e92e2f2d8d309f0f16d20d3b355e5a122cc2b06b2800493e1cb25f1d829e9d0423f9a85a4490b47a1cfa8bbcfbd2cf2f38a24eed0d025140424e725288faa5af753ec3db672ff89b67e3f692cdb43f27e38f66669626d8ee511adaec13f243a1a83df5f8f9a04e048831c618e3a94505f19bb54b70d85ef39a0567c415139c6a6f5fa257339d6a97360078f2ed37159d7cfbadef7e3a510aca52e490e90c87edb334adf7498e043013bd1ee531baaeeb4c1e6ca35050aed97a46d1c597abf504e914a701bcd26606de184382c66ddfbcdb6a900f80353fb78a0262af5452f31ca37af4732e9570c8ae840d873c6f9ebf2298a5b55ce08db12042906095dca28cd3a28298d2d6fc0ca380486f6f7b6b3ec6a79507879c06f0f2f87e1ea419a55a4bbaf8e7b59e6e2d055d54894e50fc76e4b7cd769c0740f9dd49af0920a594f6e945268e73caab90732e5f1fa2b6019246ce6e9c6f1cd73d46ccc78060c8bb9e5e24b2b79d7a472bd80150bee41996df9cf2bb7a1faa43dae7956fa23e79c539a531cfd5174eb166bd8d6e967218a37553d175d16fe7b705caf7e8a4af044b7ec6c7570960df69de5751403e1ff9c8de917f5ef3dd68e49c8f4695ff63ea5e6deff8ab3ee28f46f663fe7c7cce869f4ef937fe6cc8137d3dbe1a9ff253f75e7e3d6afc4ee47df5fa883f8489cd3fe7fcb34d7c349b8b3e1ace451f0d751f22efeced9cba7c424618ea45e6c708439dab433ae7bce7e5cbef220a17c0984518391f3ffea8b3a82036e79c73fad1704ef9934e443ef3c7cf0773a8c6f7eaadf910bf57e5181faa1749141f6a7d8826d4f9acf1bb4a44febc485ebaa8829b362906e8b38d12879a4f6e6220800b203e3033c5cc112e8040c205089a68356126034db89971820b0960a0091a78820b308908448c31c618bb79f6ecd9b3af29b20fba18638c31c618e5133a965272dc41d7dd8b438e4994524a29a59cd3b54dd35ee636a7895f9c46dbb4b96ddbb6ad01044fdc130cf0f2882fce932b00a5735f112156ec94b4d463e1509b736a939e3c11382713de34c94e21ca6d5a37bbebba8e65248d6ecdf3a5dcddddb23b8a46f748d75b84454fba18638c315aa0ebba686f6c220618bd8bd5e330f2f8e8cca3238d30d1a54c032131258f72e0c4e81e38e4c4006ff4e2a3cf6893e050f2a8fdebd1df5626c244cfe1c64f8b92f6bec8d869a01387d22d4a49278e64c2f450bd3d7cc8635c4dbf007889e237f5b2be9cf1529246a697ce79ec95c9c64ea1d8d8a9dbc36fde95aa7cef558cd1a3db1bf2eba5135849a34a39dcfcab1e879b7b15e470f3ae9a38dc5c546fcd8b5c6b5aef8cdf9ca5eca1e76c75b2e6434eeb353d05bbcfafe7f90579207924f9ed97d27ed5abd43def64eddcabd7ebce450e829d873ab0b39245f5d2274a23cfbf4e4af9a5d1e7795554e383f589911341d27ad03d567dde3949e49e77a18fa693528e6a8c305ff56a8c385c295fa435cba851df7cbefc7ad0506dae464d33b1787af6b7bdda95f876ea92ae38ae6e556a4048245d33598a814edaf53af1ed52457df390cfda691f4d68d210b51e8753ab2ca32d32235356b1cf1a2a7905244e49bfa6edd9b5e79eace2f901f089b98da4f6d14c4eca8e3bc452e9c4e22fddbdb09cb6a9b107d28ef36ee863e9a5dfd2c7192ffdce780979c4c89892f2451fcdfc64dbc8aa18a227b8a2e65b2e59a2c4f52445b4aef4083865a01cae5081062e2ad0c0b5c516f2e5dc1c0781f2356d8b59a24994458055b429c7711cc7c9980ac4147b14318c6886982536288057e2449c5e510a82a793e3bc382e28e7853383cd665f90cdda66e6c9ca00fb64b0d917727e46813383cd66b399f78528669dac9403f076305919609f0cf67ab92e3db1e5c5c5680c6396e22cb5bc6e1746490a013dc3aae87ddb21ec9ba380018caf157cf1db109bf392e79ceb95ff11117d3a6f16d51e593df0aca8f6f9252d80fe17dc3e66e10127c42c7ad083f822ed90189bdf1ab658a2795784ab1cc781af3953faf1f44af378c3b682551c054f4e70e85d7bf1e3accce1100a0e398e611c07fa0537eb0457a12003c815b150ac38d629cd6957f2ee9e52fc82f6966ce4b0b3310eb5bf1c23d94b9f4bb1177c0ec5ded3cb9d4e69ceb18c55b19f5e316c732cc00bd23002c8691efb905f9e495984d15ceef44afe744a73cd5e5ab29782f682e0cf49f36f07e0f4cbb308f49c4be7193be120567dae79b7da86559e6bde37ac1ab9e68dd38d6afb57dbb7d855da71d68382434df3191e2501457e69ab5792a5b9bc915474de858038ac89dcd75bf39cb4e150bbe916875a0ef7c40cd51b6a4eeb955dbcc6b52805c1d389b3dd7acd9d682858155ff327802f9a1dd224e94de18a152479d2c797eb051f51bac88ab375a2f747d3563a47db9a0ce0164bdad6b4a823246bba644d7b84c788c8e20092d884655bb109eb8820cc320d39c801ec77c084073e1f5f39f8e2a583264f59155f3c50f2a567ef48ed5d9b78f24cc4262f2db76d82086ebdb44db4450521dbc6266f9b884d5e36f959173bd9de35fe74ea3a37ce0a9d7815b293ae244bfa895721971e39e459593834712875369f75726a7a7f349af4fe7a70c719ee4a03229135cc44e8a490361c83e67a303735682f68e7507249e0bcd3c7c88aac927e5f2e8f1e38d52eab0c873e442fb33da1328631217a3abd740fc32e44c166cdca74aa725a8053c6aa1b67ff05ab6e0c7a277a35bd1d0a8f0b3f3f2fe8489d824e41a780468e0ac02ba251030c7007c4d9e9544b9bdda4f36622e23ac4ac4d9a11053d7e5cd7d97da0df669262efb6cdbb28254a6ce4f1f3367e91a86b3dbb2848347b76aae45b11018980508056ba601dd8b99a02301412752211e7f193ddf3128b97de499426285c959674e3d51150a75aa399ec5be124b8026390e340e7c0100d8568884234b46d73d421ba89b650a8c9b37728324ff61c7be4a178e1f1ebda4f779e7db472c5b3772b3ecd44e48508e8056e23b96d1e0d795d0518fa36bb22e547b3d205870c45cf879e842a131c6c0588c315180d18700b56603460404774ba9c060c3caf53008e7c86a318d463f7674488e5d9118c04e05d81a10081b509271ab57338310605456e7baeea90a424b99e475de0dc3cfb3792915a200a10b52318872c4c4440222f443114a05e919c7d04430122d9110c4502f08a4e5b57ee6945c941f92a4af579f6de793d3b0aecd963cf08c66404237d343aa218378f3a37ce12f90cc7b803ed2cca0e4b11c08b32823d8b8050be8f66b32840a3908f3e1a142f38642ee45c65a26728310e190588c31558846101784730a0671fc558755760cfb02e4640ace29c7de405ab2e139cb3afc0e20e91566ede043d7bf77d74f434722492c9e1a0a2d31c6c02d8c559327188921e933084d9b3a3a4edc13f3d268108b16f0f79b02abe70acf8e848448057b427be5000bb91498ccdc441c1ec6f84d94c9ef84a81093ece0a640a9c0a448a9c0a440a25aae8d14156451c1f3d3a0ec9837c913cb04726fc6529fd803754f9a84514aa7869afccc7d0df901fc8145670183f8b1e6ce14371d61ee83a525711639c72d3a28cdac6e27e3a9922c79730746739c518230e4069afd7557415336e48a6d309043d4aa547c1d97a09437796e81df3b6d90876d36c1b7b008c1ebb0af076108bfbcb93696a5a5701ca22e3008cf6769398e649df6441a404b94edbb82adbeb1380d2fb03c2fdcece47bf8d45732e7f7baec5f406c439b93c27fccd2fb7c35b17eb601dd016dc0ff73323730e0267693ea3a19f9c9d9ece85c5ebc0ded5e7398ee3e689eb397f36e3007c6256ed2f173493fd748a9d72b11e6e09a798f379025e520ee77305e75b0eab3625acea1d566dcdfd8055803bddce737739cf5c8c31c618638ced5cec947c9784c32fc8666fc7b81f8dc361d7f39d3b5e68a11cafe5774f386452d08f664938747515e0a57f3b978bf3b41a59a11a595ce57eda742e2c5c1cb22b0875d1ef388fabbd6953fed436c93537ba17f818617a5c70baf8721b274a58dca11461a64fe7c16bf5aa8675c18f37e675fd63f842a4c74e697c65ec279f7efa953030c24c376d0194b0e91268ba8c4def9b29653f65d04f6efde49b9f8cf3935d3f39e727fbfce4d74ffef9c93020d94f0efae9dd6928205bfb6651736a8da355a17bc26bfde6f1e5ced9b777c1de5663174900c2cdc724fcc027f631093e3adf3d7107698608d3de5a84a0c907e02312d0e0e43bcedb2a7f280d726e31e4ed32885bbdf2bcfde58c55ecd2d3e82724baa43ddfb75fdfde3d5487f3f821d1282122fffcb3473c2b631625e44867a5ccca1a560d6b863bed3b621a215921941091d31a96b7f9f6091139b547a88b6cec94947dfb95b3cf08c9e23c7e454856c89e3a357d86c34e4def668feca06f8f5ec342098947fa25a38c71b25ea136a71e59ed72d62bd46683883ce491d53d325425ad1cdf7c7ba90ba07ff7318b0e78e0a735b10b7cfecaa06fbfa19c459876d316c0eee9150a4c054d5aac8eacf67eb54f59af980d4b705aad562b0ad60f90c8091bc0d8a2c5ba1d6b59cf3aa815637fbb67a405149680d362dde9fabe33e7fb095d4081498b75e7ce771376f062ddd9e3f3f3ed77027d3bf705d1c918658f88c8311e054473d62ceaf42ca52d40ffdb3de0c72c3aa082d74a40a470c261fc97760edb5d00ce6a2a03c8af56ebb90bb01cb4e6eca30d245ccde411163a3ebe54f0f3a325e0f8f83a4114be2b82ccf1f1a58218bcf7f165021efc057dcea40c3025c6887ae972099b4fc984138b0a722468e2f1f1a582333cf8f1658219fc057df24ca4448233e4daa6692faca273e2e0205603d0eb220920c8640d38e0f9eb63c041ce5fd07b808311fcf52f80dec7170ea2f80b7ac8ce79fac9c38697adc821758fdeab49edc9042e017c7156cdf9821e7f197d7cf19481270c7f3d86d344d0c55eb147a79207f943089290c3fa01278b19ab638f2b4a081ff1c1e6c5625bc3ea2277c7d0e8d6e0400523b45848584ee074aa4277b3ec9b9beee64905cfdb3617962c5f72374f22984cddcd1d86a75357a1bbbbbbbb793a77b3bc024bdebab58d35d9dddddd2fddfcc2967bc6599c6926939461186551c6c138d86cd6b18e9d4e2f2f55b8b9d17ae841d380888991dabc993772462691c915a413e9e40a2d5b3e11e68cd3355d11280231b7b6fd9c45b61ed289b8cc28b4ec8d8bf4cb1ed289c8313429a920935d210c6362a6262b7d13ff80a483a4cee65d8bf4d374108b479bb6887c7905cf939be4298017d4bc33f10f4864583cd2d9411dee6964583c5bfbfcb6a8205a93b20a52fe8812e8227b5f7bfc2a1120da48c7debd79bbd4ba393f9ae64fb35302fde814fb4f90e9db83b85cae76cf3baffe400199be391428209bcfcd4a1b2b5b4248d7c72e7b2416d287552367974b58c5bd98c81fb9c591903d225bac621f55e9239930cd36b59095d44a1b8905874ba4e9bf7aa515cf118852103c9ddcc3302686fe6095e7ec42046195fc1eafc7ebf1ba598881091e2c0b3178e16f7bf13c6933d04d8c55977718c6aa988518963c3b77c1aab88513feb217cf5cfce526bcc3aaf862c115ac922378f66e4a669ed327f5aed3ca245553c221d350e9db6bdc217ef7ac53ce61d87eddc74b10a26f1b824800b72779fc689ee896aef894f6477379a72f2d797b4f972e915f8675121808eb55645116e8f1e3598461ef9c1e35012f6fc1ce5bd020a6454d8f8fe2d44a170fc02b5dec2875c691d35288763746d36ae7602535cfdab5daf957675b1a8632f115d32eb2211b8067bfbc922e4e314af3c8434cc481bd2df5f62f809beb704e5dfb82103db5ee2fbce26c642dc43cb756c1d216a0ff07b8f8b657ee3cb35ce93a71c87e9a69d3fea09b1e5f2e2ae7a564e24e264ccf795567736a86219f73ae79ccc47f4eaffccfe3f70d69ff2ccbe7afbd73a2c8730fe15c3e13cfe43edfce9b173f203139ea0d8f29c2618c16c0f61b3e8f1cf586c7c8e722a2dfc04133f26e547b07a0fc06238c1744e7239ff5c8741cdec51ec0f892c1cdc7079d468d20b048ffc8de9a1f79c982258f1f8d4e0ef776f12ea28801c6970c5c3f7217efdad3e611c091b7388a778b4ba7496892110cbc29b2ede30edb374aaf74782a65c6a17432026dce00de58903405a8c353507ce42e2e2ec156af8e48960e8b6af1c8d2e13a2ad829e92526a03fe963165244e16dd4000374f1167f79217d3f8658f191cff04b953fbf2046ee6251418cdcc55dec90154b471e676984726971930dab4c1ca25c6c0f7e97919b707a65d3aaf8caf9913fe3a59b6e4c2e53925594c22cbe6400f4d253825c5a461588144a5cacba602b09ab62135ebafc68804c61454b82ad0f89d0532ebf23449eb2d3a753327ef6a084e0f094a7ec91d9d329e938bc86d53c003980c3c3b9d3524b61451d71e38647567f3dfa372e40ea7ab9922de962557c95e08b974e93b02a3e4dc2e18866040190c5e571015eeada3e9a91e3a891d5dfe2339c8455232b9dba585572e99dcb17a58a1ab9fc91e7a8a891a539acd20cc014179b22e350fa04028862238723d98c30231b39747be77b386a648d2287a0bdde7bae0516623fe3a31658987dd073fe790c64dfde8d8a3a22fa117a2487b742ce811c1e8b88ac90779af701e19cfd468dae7d4544cfe137ea05e48f3cc547a451c94b5eb2773ee81d38c31e87a0530e41975fc947357e6455c9820e5aefa60a5006dd893039bd92aceab60a1074fe8a08b1e84ea7a48faa7c9ad3abc8920ed6ea3645465de0055bd773b546557efc7cccf75c11a608a0e77a49da99fd7402c829b294598a13ef73cda5cb8f08ce3f1b390c87606f1bf309a18e3a223a0ec76139303d7a64cd3447568e1a59b65e2aa35eeaf3d24973e7a5d77aa98d7a414e67f38e93a6daceb50767f2192ec25ee8d95b84dfe46d43223e22a49b9cab139cb3abc8545c3a17e1577193153aba08adb8d105151c4a2a7698b64851c1aabb05abd8aed8ec30e930fdb0eaeaa43cbc61d5d5c981c3aaab73c3f90787b75d69a9c0587575a6b35db94991fd70e9295f0071e9293303b8f4142741b8f494a017979ef2c4864b37b5ac4b37d954976e72b1ea06c07db8745312565d00788f1c565d1a5f712961d52d80af24e150ee20e00a237a8ac022888f2f7171e9a6578b4b37314171e92620565d9613c0a59bbc60d59df177e9a618102eddd4e407976e9211e1d24d5f1cc0a59b6643b8749313215cba29a8e4d24d4fc016c966e462d5edc17d48c2aabb83f390330025322e5d65875577c5a5ab5cc1aa2bc3a5abf4b0ea9e5cba0a16acba335cba8a0fab6e0dff5cbaca12565d16f75cbaca8b5517a5c2845597860a10abaeca572e5dc50b56dd1c5c0797ae1263d5c5c1635cba4a13565d18bfc1a5afe0f4eac86409c0a5abc8546afc2e7e2af6d6bc8adbfaf2006fa99e84936a8901def5ab463824dc860374d8f002e870f7a1c3fed0014447c986bd3fdceaf0a1a3002d0ed0e1f5013676b8f7d8414363007baddb08a2d2ecd841e3363cd6de1edc0fa7b146a80f7b69a80e1f3ddceab0f6be78d561abdbf0fcb0574787fbd841a3c30bb083a6006ec3d3c35eeb0678b1b77a106ec301ee2d3b76b4bcecb0b1e3c586dbf0b8bd3a3bbcc5013b1ce0a3c78bffb0e140dca501e10fd7c509608dd0d0860701a11161c943177b11e02de10f46941a103a4a122e296bc37309e06f8dd05b7220806871972028ef405823209802c26d785aec2580a358235c0b4a110e84354211602f10340c42006f095b5aec7547095b50dc86a7087b75420f920222f41fac1110881f5abc08b717c583b84b03de5e02b811a99293ac119a7a92a75c52f603363c6ec343007b7552fe0d28a59cd40002bc3b025cdc08076bdfb0363c57c895711fac117ac387d277007b1b24f97043c6de0478c91a016fc81c005c00e9868f1800e6b0363c9788cb03f561087b490e5a239e10231f78b0d7071f000f6ec343b257084e880fc01aa109b07700f4c6104238e90689646fc94737ec076c784823b7e11162afce0d1fc21a010760afcb5823e00064dc8647087b493e44c9de910be1e00288f003e4f081e638c0e7a51c608e12e8363c44d8ab93c30fb0001f72380f0bf08107b7e1f9ec2d3911f6827e00f778cc1bac114a85acbc9e5f1fb1b246c0a900219f35c2bdbd9ff774ae46b8d741c2c3616d786e02ae0e1e638dd0558c378379a583bd2b8fb146401c3ab4bd27ee089f316f7005582374ce3879cf6e9ecd6ec37384bd3ad36370dc307d068e981bdc86e7646ffb897d867bd608f73a3c642480be0e8e15c52164c565e0b057867bd688f7f603363c9fe7363c09b05707870be1b1b257e7c659385c076b04fc0fd8f0ac74701b9e157b3f5f9161afe7327ca611604411418838c01042046100203f7cd400788f0a00a7a93878012a8c13a0b2bece4896001c888a83ff5061dc87da030f75076609c007507170990ae3abaad2a1e670a45902b0363c01b02b381c4a00d8152b38941e5371b03a3cfc860ac3c3aeb83a257d47c5e13aeaf454c5e1619d9ea3e2b02bad4e49bf51a75db9e994f4975ac36d5416b715e5b5d270af35dca5b2784b45394aa5e1a55ac3c1cae2a48af251a5e15fad615566cc62559ca0ac4a100dabf28443e92a55f433ea56852896e0e44f9563c28d1576f0326aaf208a1f32fc4add4490c5ac0bffea917d7cbd8a4b15ab22638faf37d5f8312995c8c83fcfde9af7bceb95edf90c7fd507ffe8f3b65cafcbc9b4bf9bfbf66e22503c77bd4a847bce7984a34a448ef1edd922fc1ce7449a731519ab545c2a4e5482549efc4aebaed894fcaedc3c8adf152a5eaee0bc741a359e80dcfa980286184af76aca186228fd33c34b1fa5e1a593c278e9600a1b5e7a298a978e52630cafe90329b208237d86516afc528d0fd6f8a41a7f54a317bf04051070f197f6bcbc348786ad7328bda6cc3a255d646ae11c91ac14591797f0ca024e8b15aacda2751b410e2b7e34415264a525807e53642fa308c35f90e6bca44a38259de670289d55da424ee9631621e0792e8101f4bf29b2d1c72ca2f0e2d9de94a097293254ce0b1259b321a1353490748df43e045dd300941eb92eb26420289d5219a9a43d1dad6d737773b76f9123478e1ddbef89fa052f6df790bd9452dbb6c108231d5c02c8595b02bab9a04caf4a31d5b2bef44ec11e2c4141060481ecdbfe957999b8437cf9310b2954f02c787d7ce5e0c9113ebe56f0e4756438ec618643e95eb3643e01ec5b87b465e2ca484f42269e33a8e44bd675510f33a6d00c08460000007315003028140e0ac7a3b1248f036d1f14800e7f9a4c6a4a1ac7635116c3300a840c22c400030020000001323443430502809e240e7b273028cb9cfa7abafa8f94f3785a5f7f5f9ae4c797ba2f0a9ee60a11d611b88f3e380b77fa10ca33e5b894251a2eb17a3c88259c1adae6e7be465a458356b07cf87ec2535617daf6b7610201ff417363c0430d1f8a9dc8314f167feefa4bb8151f98804770a3b5012f4735bbefe1909f351f981a7aca3aa99a0c471daca85813d10a2702048d4dd2bb7d3b67e9daa4b65c3c651237bbdb19746fe966fde74ea7dc13766e9d6deeaa61aac924e3518324cbccabc37b230a35c1e98b912a63f89e2ce401f842ec44f958bb25e1a9c4ea394f81102312a6d7efeba2c288066c269e9dca8c58764a3b5535cc259d404fbbe5422a3a885f0102d360141f9b7030a79d2f1f7950d9ccf08015d6cccc02876ec8f18c26a814480566cfa5d90646e43d2f1f54f8243d2f9aee120034b0cb68c84d126750f84e801c2fb79562c031cd6009429a8f731a27c1b1b9d6f9f8b66d330205a252c488cca63e20e3885d84f7eb5c765e332358a0e4b237e93aee2505fe8a5c6c702c604c1f66ac02eab6f614d1da101d71cb98a25ac075e27410ae7959b0b6ec15bf59793188b1ea47eaa8747f8a9774083a04c6c6d0ed25d75e4039ffb110fab2f1f0ea80398104958d9ff57bbee2a01a830245a47f1bdc877a3f8f6bc9fa799f9c461688ee06ff133f33154976181e4175358147691997bec5c9630aba5954866a19e20f1124bac80f681a7ca7bd6d5e77a4c2ecd97e3eb7e6e3f72b0c9089c42390a4a9eb0c78c9eb23c2b42ecd2901d610c0acc0fa0b3f3c4cc02952760fb27a972d28609820348bd6ad7c797ebeed80237a255894e5af12e8d7529b8b4de731fa2ada1d89f9588aa68e5e22075e4ef7c1d3e113d31ecfcabab4a7f68198780f51b3801665125f5b14badce6336f84dd798ef4c14de5e1598ab35f8b09d03b519c5b7a2ab92baa0912053623ea139a714be31341956ecbf25535e83272ba138d5722e205eb28e9a5ae1c83e1275a31d35038c9b4c3b59cdf5480641a10bf11991f9059064cf7817c7ebd68d541d53e1e1fd60be2731910be8644dc47228a16947e330e7e6e9e0993d0e64436421fcb6d1773f614e8c7dd61693e32e818eea52e81bb1c38aadfc0605b5a2e29db75098bbce0f616ff1f0eff01c6762e894facefd7d58860bfd10bdad0eda62b80fd9260091489403c9f076c65d95c896efec9257afc9cc280a3f09a247c33fb99c46f70e5343c160b5f9ed4c41094bb5f0700351294b20a6331e61c23586bb6c6d810f8fc58255c5cc06e6ec2f260c5f418c3e63c9ea94a838e7316e23a5640ec898cbc2718bbe8b9b29b01afbb8af625763b0a3a8f5b0e783e8383507ec38b8c94d7fff2c50a7bad38d3011de1b5ee0454e164ae1184d257325e57b424082935ae0ef05845329f749c5e97d62c69aaa854c96affa5810d8f3f8cc640400a1bb2a7315e72233f490753dc523495ab60e7a26114fb087c63b45d69acaee1b08ba77c8d73199f037509c966a87c975c5f628c5e6acda9c5e488df01f44428108f738c3063f2910434537d3061d139af069d6770cf98b860626a53ea3a267f35a6aada4ba60b3d4e488b4c569b9ec77c03d8ac1afd38e29b731e780408eeb2e9d7771053e71e5534a06d944f261e291c64a7818b69c35fab0a8fff76a6a43a542adbf1780ab4df2e75cb67fe2b4fa28f2ac19aa259b42f93ccc665f663bf244d356ece7b0afc64921285188fe156459b65cc70c9eb565aa47d674864a6214ca41f0903efda5ce8ff2ac08d7b03c245b98d57d80913552433767388c0b090a0a64853919c06680df1cf0ad8a97956536549bed835791015801f7a6bd42a20eabfd73e721332faa617a5c732ff3b6231f3462351483c1e04e51a783d8ed7399686cba38fb4a91d21f093ae439f75ef99caa58afbc8061791376e2005b8418b6d5eaaca8ecbe2b5f5bd0fb1d1fed9c1a57e63cc2c72a03c67174d43a9860d18438f1a600c30705bf93882097fe66ced31b0d01c6133dfb52d6b4203dfa7c86d11acd54c2b80079ce99ba637de86f528cf691b5487a3e8538be9b1e0d569ffb601928a6609a16e55fe7fa918553e483cdcd6bdcb8756d53ecb35ffcc03620cab5fdfe8dd44446fd387329bb355967edfd058e0147687b755a130c461745be0d32b2a0c7a114a040947a621e18767b9bd5c6981b4a15332ed5a572594201dd962f21df160da67c2005ba51296c003430214e51cc2091a7672d976c9ffcbdfa67302cd2ea098887338c4628eaf4bd35a8633fab1d930dffc3a9957b5432f91213f778f3b8b98c7c7a59cb71e10bad2717ef5a05a18820012c7f35338cbf16e3b86bc89be8df7b93460e0b9e123189607f91214ef670aa6f9cdae21cf44d313dc9eb369fa111d7dd6b1777e7ae8dbcf36400a151b66b415ba5d12972a560e35c93c664a24eecf63bbb5f4fb7d73000c5cd3c344854c2441a8724a7777be5e1cb62d7e1cd495b8f63fff6e4882252827c697c937024d8c20a4c5100f6ea2e0933258e112349621cfae133ecdbdf5cbd406493cacb4d28ac1a6805f949f7694c88608b4e10de64fe69c3c99a323c26a4afac079df3e15066d950dbbc0ab961bb35048dbe1c7474e3b3fdf286c815202f5a34526215cf1cca73d572f5c3a810ed0409796f0d68295b893da01ae464f7757adf22a89d641eb5a18d0cad4ceec072f64b6b07d60d99e4ecfe61edf6b942fda110f7434f5e8a24081f1ad24c4bb43019e75a73ec70fb983c2ee787ae0e847316728d4d0fb1fade96a6778daa3311fea7ec84a4d265841ff1cf393742a578b0c6a8175edfb833a5136da1d32070071eda7302611b6e1e318b5b5ac5a6fa5233fc155e71bbdaefd73007a6e6ae5546c489db6f86488c8b33f7220ef218d68878c0339e4b6c092a904221938a0212c10bf821b559fb5e7bd7867e2d2cd19cef70e44ff3c6c072b16dc20100fab1019c48bacd007e0b81f5757acec2c1882759a5459bdc1f7a2e0a58974229d67ea4cd5b891deb660b43e192647e9ea3b700a5af5f1a218c4fe6c36214c8a947249480219c98dfcb5361200f4dfa8684a09e911195cd7cdf0eb190ca228ff4395e060185d707ef066909be04ad8e09cceed1f5c067338902f187d46eb7f3ec48f2fc81317912f62846e0ed3c6e13a6e696dad8b11a23c84e8057b9c669f3ea607f493a3f2b8f99649bc1ddbbb3faca517fcf293d66061ea88d8430d62ebf4716d6e5c524f7da675abf9f659fc67cbb52125e1fc41a8057e9ae460de41c895c7ab2e5f34e608c89cc2c6ef1fe23eba42a5ef9ff0bf51340d89fcc7e5174d7ac6629e9ba98727b9d090525ad8ea5dbe04c7ea255e21ec7121bcf5f92d678345b40fd1fcbf8992a14a0325ff2d7ead00b660dbd9921204d6c353e108ec8f3d6187cc8e4a07a0a7e784284777f4a34e363d0c77ad694e6064b4368503630d130aa917d56db09408f54cfa8b442898a04490a979a8d9e849bc444a4af289e6f7d3f91b958fca8b22a5f5dadd4f537973a08e101e9925135cd03561cee159f0c40cb0880ef0aea12678e62df434751e4838630d5a4735af0624417edd7ed0e2e4ba81371e77393252e9952c7c06830ee722f9bea2b87603723000dea28d0e02bd4d9d30611621e43971fd274f8ddef6f39916a9adcf277d9a3e725dc6f2280c6a74130c5fc4804616e5d78ea55abf0294fe76570cbadb890d4327dd72624ce3e21559dba363e2b72c6ba414ac3c66dba807152216b41bf4e8a07a19ab57dd6e0b62f5e9b9d9381a33e14ea797c10e04939f219b7341b2937c9732759e00ea220bacebb588fb49c2214d0c9b6e0b52ba300cc05364d131911f48d0ff35613d8384bb57ea8c98db50a4dcb1f43a1a6364725ef284bbc2aab752564c3a3ca9cd47c91ad8de805cfc3dbae548766f94a9adf8e9cb52256c6a2ce0492bbc79ecf229735668843b58ba5d28f1719b65f55f7a48eb48501fe959af661ee79b842a2c62849bc6c5c6dd0eceb0d5c9b7d9bf8e311d1614e489ce7d30745d6e06dcc4d6f64f7e0580b3ecdbf5f7bf0f28a61b5f08441917ff20b0e9c16a14a20b007ff2d7783a0eb8ffe54a1ceaac6c94dbc50d742db975a2c7dc51eef145dc4950b3f7504cbbd0f19f8fdbca4e0d818fcdd21d3e74a60dd643b86bd96a694a73b2d713062941fc4d1496934f0f83ee1ec1ef840e780b300b96e250466ac817ed2d77ab8aa6aa9c7a4f995dd4d44014a25c719db18db3439e052a5d03d70eecd11a47effafa138df44263eef0cbfde85f582dfdd6f70f152bac1286f7f55f8cccf61cf72cb123fa47af751f9a32d2c0db429e68dbe4342f40f46b0ca8c342228e44d213c3753bf7ca1c8031604c7d528456b3b06dd14f54ea31e5c0a26d7814db647ad12a0f3c4cba34e563cffd7fb3d882a7ea906cdf754e745a3a7959600ff5afa9b734f27d83842eca678ad1ec622ccdea8823c3f3176b8efb7115a05e93f0ad50fb7bbdc2e14895624dd18aaa35a7982ba641340a46115a234cfc353c2f3ab336c6dbb235179d2795823391c08c81616f4c1562273cdcc3953e44d68a3ac44324b9713975a9d9666018db023b767327221a197b372351a24effd980b2f79843c50ae1aa0a8973b25d54452f0b5e32d2c4d255be2e0826ed19e6935fd1a5f86b5873543097bf1a29f4d57cc30b8d8fc7dbf267a0ea907015b2de5e74da2d229729db0a126756aa208e4aea62a10c6002f7cb3d7ea953f9be3e910181139440cf6efa64bc77d83ef51da0956b0fa8d6a78ca2d1a881ae2ef19a1ddfa1daa0e0df668541cd1a610e1abaeefb716a6c41a5e91d1ef766b87db8d5c984873f21a4a2e3ffa1e70dc202d20c6e057413f53e0e3b165a6e8feaaa5d5959e90e19533512710b8ad009060237fdfe9ac1d18833c6433fcd360c4defd6216e0488da0d6ab156fd23c411eaba2a67c67daa8e61a82dfefc82eb6666112106d5ffc12ac5947ce14afea363a3dd18587b0fd5ad4f0864d038248e836ff29ec94eb42d1145aba7642f76effff1be747288c3bf95325e68c0d8db37e235012f0594144fed435d481c6e6071c585c515c2b7c52eafc6617b1c311d0e7e712907e0a6123b5add121b6bef703510ffc581af6cf215b6cf17e6312bed4ea02c502d4098e382062fb1e76ab251fea322a831835bca9360252b327a2d74b92ca0ce5b9e361e7b5b94f188a6c8c0db6343b938abe5ebc2393a56cde099717257df680af80bda3a3c137026753674766a877961d68df95dac7ff740e1b0e8c04d974be7a3b6bc26ba89c2e82ef09e16c943e505eaabc79f41787dae76b89e39fe537b18a2544108d30269339c5634cc1552b23bbfb9b305d2e840621c48924aff6cd9596a3f9967b038f4adbb4f56098986f5ee3c29798c1221c3d785ac70188b3469da04a8433aa4c7cde3a917406fd3fae23ada1a48f54656f79b39272e9739aedfb458deded0df9262375d4d4bd2ca67de5d0605cd3ba88ffd93dbf61acd05b80c2630fbb080770cb2f129dd642e9a0dcfe8a38d547b879454120296ca3d12c61ec35581988846555f2b083092cc13a85ced8bda97f6bcb1b7616011da6778619ae78ee017fb0c92b3a701a33043667a8e24d78e152325d1cc50141819436286990b197292fce22a26fa396c0828c486c154ed1cda8e9ae76b525161d05e0c8a00f92bb87d822e38d2b8e638966aa6288bf478cc802e84d1c0279c3284c6e2a33d93a8b5dfe980d1b17dda7bc8182d1afe2524c7736a28fedac880d3e2a8672d5e98818fdfe2dd2bbc8bcf994050363f6f2c146fb6286c408e3c7090c3d513eb82d687b8f244342ea1b1c72eb41562125eb46f73df31d05e88c8229b38743c801665012cca49255865c14aa39a95a4146e48aceac6453064e6dfd03f04cb075dd6822194c68336bea0400c1d7178157d5851ec45b2f17470978d022ff3f7a05e2e476bf494a79928509f286a1cae8876a8e454b92cae3564232877597626300cd44083a4e39b8ee40a3f388c2123f3e0db90f81f4dc16cd1d6463229b0e1cab1e10dea415a74e9d85e4c27edc97c6978eea14e94d413cf18646d82d19f878fa2578e4a83f562315e5295ed549d5cd21b4103a24b291f6d8943bff8752025c53baaf59bef097a794e50d07b8314993f8d3c8a394ff6ff45bcfdaa3855390ec23fa29a4351621a57b2936e411d0bd25ca9a137e1fcc8dbcd782f015bfa12daed274287ac03614ff1d7f2625e21c2a13b2229b2b17ef07a7ac77373999a8c66702ab970e927d7827f23569319de6813b7ce4f281ce6230b78758d8f40b1798c16b81b08b0cab9bc428b9db4e0f7ce05b4448cfda0f86ea49fcbbc64683e617115bd2a77b138e597a3a3c2112da629dea33e01577c731d4565292e9531f27afa3cd5f34ee87bde77a8d395b251f828688ba4bfee7a278ca47a3b1fa1bb0801c4edcea6cfddf3ebdb54f7f86ee04c769c3ee5a1af821220775aa1d710567eb8f5eb9bc859428be2adf4d3b15e33878db4af91a3352f1ab3deb99afcec144bd581a7421accb999e2e07a7db1d58075683b4e9c6a1df076d4a37ab5504be94a0aeb9befbc5c28506cabf43088ddcf6fe345df9b40666ad3f9d371b701e4a067160501ade5fb513119c29d91cea6233cda84a00e64419d8422f00e9ada659d2a3ca0012028a0b1da824eaf56cb4208d769a93fc346136ff6dc3515dc39f1a96be2fb81fc51c139d49f45455b0387e77c4df82c9aa60526bcab18f23209b163015d577364ce19dccc1adda7692c67f62296af3815432995fa87eae8297acba443292cec3b6693e580b5b757e3f9b905d4394183dcee753d5f33ea83128fdac645a9b5550a2412e163d88d04b326ebe7ac61d0e01a94d1bf7b5a1d0cd418cf7554031c8dbc874eca983d83735c5472c99ac4b4ce4350e6d31023666504cc97b908cf8d852ebc339b16dcc5faffdd2d1b021c4733e6a9c80f75d7f2b09990337101d522d2322da98b4686d59887d60b052ca1e01bd76ee881730fa8b012a1c239b74d71ebb8bec23225ebe3fd3adfe6f09b6f7366653003ea06fe0ab671622d4713990efc481912382a0f8c080dfa73b28b82b9b2545b8fce8ac4185c51321ebd0401a9588e6649d0b190e1601480fd6471c4b4c2e17850f72b9e81de177c2fb9058ae4c0d13f59c22c5666b485c703810e07a2b90e05b3224ee286f59bfe59fc8016a1434dda2aae7f11b364083c127c73d71f85b52fdcbf76f59796eadb974a67e81219f101c0cd734009baa7a8bbbeb39897c37648eca284f063890afa16bb556d97afe0b9f5e2b995fd2767a936a27220192684821976434a4bffc4d1cb87fbe57239a0e82579c565824f06e753233a990b2e216258af209262059a978196f54a3bcaf375b13f0455af40e410a096b020f032046cd22be7ca88337d2845e2da2389dcba5f093c8e45b5e5f54c2aa08c4766080416576d6516dc19ed8cbf4694b1905414f4a249e754530d13e96239b1716169118139b4ac9372372b17321442b7f3e007ebe031742c0d71603171e1f19f92368b1490a41addea0e659fac700a8d9d06bc8b384d576cbf1e6439e179e23ba2b45646b42181647bc455f878a66ba255a26cbc09b68680928c1ac6b6ed50e55c3a47a240efc690aa5a18b30cd5b265500a5b405095a75d626cbc742813f2d2bd9efc5f7d44c13bc4168772333d92acac92ba6e6a14c994838d5b4c01840751de368b344037c7c654a9a2b5c603028b5004f9376695ae9df52355432759bf17b7e90c478578ab33745d587dbfa7d960e234235dacc518511be34ec5a087afbde203b8da3a9d5dfcc03e3c8bc18bf36e97d182e0dd53aa1e72ae908f6ccdc3ce8f760e34a98dfb585ebffb211cf7c8ccdb3566f120caac6007e1d753cf3e0e3ae1bf11c5393997e62e9a84598363ed991a89a28c3b0709167c4b3e8395112b174d8e74cb3c7a5b7b5976791ffbb064ae1f4f68a27a30d5144f03af3fa5b41e14b080fe2090448d1c287f4d3d12f00224741df08135cdfa1e54409fb2f6bc7073dede047201bc66ac74368298a350adb1d922dfa76a0a908325a4c48c2942e838a875b55ba589cdf56a712fd2ffcf90e2ad92689dcd82bab0644db5c8e32b2350957732a37debd1431686a0789f5d3c29661c10bfc40a6ec2272787eb389b1818669b678f0cb4afa1ac610ffcb8010cc0f2b64b5f5de43aeaef0205d450e02b4bdd94cc47c6477f981d8556cfe77e12b8987572ff8fa4d698d297300231ae02a34cdd374c8d001d93db26791cedc04780540527f81b439e4491a983c6071692e7a915efa82d3175d7cb904ae4c80b3701a56ef469aaf144c33441d6b00dd61325513bb468e47d3fdf1f79718420f2850c04c0a7a8485d955e6121e57da7b5b8c9b705535309c00ce9fd0aa8a4239183e1f473b765a2b51646124863cc5a393e41b39bd6e261f66ed238c3a8adc5bbcf567fd42abe68396008ca25caf4281e7eb528910bc1292e8718722177566290cb728b5297f219486e00ae25c223d070379b1cbc31735a72a175f1040416a2e5a69537d86d1364b30b42dbe45aa2ada5804c6ff891b9a406d2ef5a622deeaa719f0e2ff1590953a4c9b246372de2d82f007e458d9c4dd1454b7f0a7bbe87bd08414f73fc20a3fa3afe71dada26bf54512093d3fa45c8a660020a8be8ae57236756c20e2bd9638ae22017dc6cc236d423e40758ccd85f87105e6e68f17fc8ee137005ca53eec5e62d1888a5d1e03ecf52c72f6128a1393ea257e816026d9eab7b8822979e6e4d3ca7d603659a90617610a974ed219bb8c071524b7187999d52ba129afb43bcf0afb5d7704001c0888d510981d8a1ac1420ae88159486c549573f956965442cb53f56612cf721f2e2e6969295400287b686832b81be48df362b3d691f0083a0255b4674b7cad2ab2e34d312d6d3322fb66e45f7275630cf85b6230e1475026331aa24118ef0877a4b5c48ca051ca6aa0df3c21f673e513d273a22cf139764db390a67969062d9ffbdea4c898010e1d84a18fbe20375a28fb086b1f90f69377741ecfb50d4cdcd2f292ba596fe5c5c113ba0e46dd4d854efa804c07e42b002e730b8486ebea45da9e4f5f4fc527afcf05cfa928ed21cf121d63076c921bd191776ec7b881037aed4a954b37beab1c32360ad18bbe2e1c11a6b000bb9590b20b6057738cfcd5eb0588204a3f4fc1d831cb550d4064b2ddfb150ee8ce95459fa3361050407008e5b3176ac43380b3754acdd8da8d8c4f474d864647367242ac13ce57724ab33bd822dffdc7607008152fddc28d405cef33ca9986df47421e3269d3a8f44a96c594df2182393c2c21c2a7a13ec388977a0e8195d39070f07afd812079f957865e361c9abb7fcee4680db27ebc2da76f7bf785a5d4b6ee17718db3e8ed6a3001edc00ab36bd96e27f1f34ce3bc21e6fa83cf4f543f2ca9519a918477a47c0cead2e6c6feb0ceeb412ba1bb32328cafe3a49becb488401c5fa6e7edc7873276948737904403f2f602dbaa8c8b847cb29cbf92e8ca105b83de761d4b5cda24cc79b89b050f7d6758cebbdb26d2050abee65872c1c44c34b81c28a7e246db610936670df3deebe3b3eb522c78f940b6eeb16d3f6bc968cc2bb0451634e901c2943ebc3163c67a81002b3d838d310e5ba881ed830afcefccf909f77825736d7a124614a7ddc0353990b88f1583aa58f2cbde201aca960e1ca1c9b8ddde932cc5bc5d051c38e5861b876ea7338343e02650e1b604b8ceee67420db0efb3ebd2daa5d916880160e577ef46df0957c66708e92de6f92bf720dbf9d0f24dee86c784cf52d829827d2fe5788e17335c9634dc5d3296bb810747b10430a6a5841d868d627662902af3cba5b85090bd0308e5708e82de033ce1b06819bda6228526ed24827cc8fb61c5b1026588ce4923ccb739906ab80cafe527c4935afe14a1398c54938c350478ea7bf41e10fb65e7549b5c2d7d58cf616dd3c7794ae103457ad3921b3edae534faf54c5fd9e6d68ddf0f3e4b41b221a8af34d08924fe3833ce88974795a2fd801d369b9db7b7ad53a2f8370ed11ce787acee7c43025faadff46c721d22836fc53a6e1d3b70cd20a30bf2a07f696ca1d798bab37bae6dd94b137d5332bf06a8e186447ba56e03987ab91b7f1750dbd911e099a4a69b42282f6d01cdbee7bd97ace855f37cb7c04eb2328421369ba2bae7936b6b72bcf5014d35ad97705f008e3bde60626f207197bf7573501c2124a451d225c8c6b077b81c5eb82076c2ae7967ad752c3d177d42d388b3d31607d86e82473ad1d78cee801a50873080652cb6bde701d7652b0a19e69809181ee6d05a41522805a843dfd3812318b1e9d5bae0369ecbec7515882f2e42043cd333d3f46aef3e4c85b4ae63ba797c891388c7bb2420b1c0200801c8a451cb06d97a3f5da7bd1fb7642da1e52805757dd168f2f588e36e20abde34e1e9fcb466895405933a73620626528d7c331da979dc7afe18af33eff5843c7afbfd0442ec3d0e5da81384de5df609f4bdf659c7f66e29646d5f148376a17d3925b55fc00f632f3184f966786848c01f38cb6e1c02fb3a9825c6c6fe171cfa031ecf3e656072da1b4680fd626fa937870c8d35138b56e6532e279f20c7abc4807f33d34a26443ccc8d9e37cb8bbd79fd599229dc5b2e450ddd45229fb408e99c2ec7aa598e53733b7bb42d281d40dfab01d20961db416cee17b9d0fa4a97bc8ec17d2e5800bcc7752c8ae8a6ef3539188a007bb6515f24946e1d2f1016489194f534e0355a0cc6f490882fdcb896c2cdaa2b719220c814406527ae1bb4af44bb98745cd0b5982ff28bb36bb5a103f873002990fa2540e922249670dc3f4a89f46dd397c62f20e2509887292095dd9324908ddc50245f3e777994d501c603f47abfda16be925a2fe4c9db91100560722bb5a9b9303befb010b72c0cc6189d7160f8abd578d508011d6c0ae87a3d19d7f13541f3e50037159bf5c8286604edf6f442ea096ec0168eb253eaf5410b39c30a2e04bb8dd4144a10762046821569055fb539f4208d0feef2192659f1734abd03277892ae29455a87cc921a836e15188e1fb8713dd24e12568449929ccb4b8608d09b3c7f6e8b1c73e1d05e59efe19c082c84d760235fd4131084cbe1f04ee4053769a0f972dfe3718e4d8464d97277a4c441b21a6a0cc502980d54cde0c204071417d4b16ebba638fa048662e4e08bd6d9c40bec96f184df22388571c28b51124839b63d9f0c949ff6c3fed24c4edb5555ccbed5af1c8aecc1952b30261df1560988de8b62ef2e217de28ea80a712b597a66b022aa12688c58f6d4769455b10ae6df45e82e9edbd034c4ddff5001df88df4a9d210b30c6ff9fc5f38dd5dd4c9c98281f069829825806344f2ac8b22325eb313405491a3d39009defd89e9c6c974f46d4f9c687fcc0c10470005e972d266604aba4c13b8dacd46bfce08c5662f5b0324e502e700addaa36fb237f4765832211ab8ff3adc3a4b4d00bcb0fad674870c4453c643a88e9969fae768124061ac95c2f81f647a7e50f7b249ff621d240153bf9bd40dceb873c62df9a35d32af42e254414a9b3a332f3408e8c811f620805b8c8265df26f000558ff1c8c52b51f1dd1b7ec194a3fbb8d4a3476802bff922677957446926381e7151da44185e4d374a3d7c910515a07fb573a3a8f9a42efce8a29ed22bf6d735bd5b7452b075edd79ab4524514944999ea9d6a027a3cee93c050e51eaa2a06c20c4adc83da7f11e416478aeeeb1bc4e22ea795b81ce195a982dcf4329a5a0026857ecbcbe3b65b008b2d3a341681b61d145729bd23c22f330f091a46a0b380c72468de105c13d7e6daea26090340c8c78f838ca4d154a2d02dc1471974f36e3d18d98a1333d059ddc60d6d86ac8b300f7c4e16bccab86c6560bf1c04142e1949b80c7243dc60cd68fbadb110548fc81ac943abc4befb33314e6f66f52cce6709b86b68157c66d9f4a28d4ae3e4b08bedf9e3625d3ca683386b71f263d5fe0a26b07d518795518028e84c107cff0156780de7245af19ee30bcca1e34cd34c5d5fde9b9a2c443e59b24bf9b543c3e9390f1b05a47288dd1a8beadab6c53fcc95de41736f3910fdba79080dc76c779de824738b40e88c0a8515f6e3493b544d4526a2451fe47b3f6f8543848185696918f6a372f97d0c4cea59360d41a84ad7c92680793e35bec91ae630d57d7a62128bdc79c82844535cc6ad370f3dba3332d3c5ec388204399faa4fdde3c41efdc4f30f09502206a7d4736959841bd68dc71fd4baf97e6b3b2d0602c0f78c58bb4f69f7273eff8fa59868c174d84f71204f186e4530aad987ebc5327b60bffe9ec1de5565f505d230d6caddc213962100fd2060616a712dac98215bd3aac9c2c449c49af7e44454ad24081b3c5879375aed6da3635ff5ac6def1088b75144732ed7a3037f3176e0f466eedf032e80dfcebe5a8e4f46213f0055b126141f1cd4c1009b9cfd9016a7171d0e74fdbdc8747463bfa4031d5dae58ec79ca46c81199dfe66b40d7a644d6d539d51e00d10d1e2a4b971a354321e09a27dcae6d3b2842448bb1a1711dc0c835b4fd6e613d370e13bc424340d9e24179a08b0cf68a682f9fa3b581bb7a15dc245a3b34291231752182fbdeeaf0ad701b5964612437b483291b8e5031ae8a7139ee1e9fd95ea02b5016b185c5930cc14fb59a6557f3d9656b87841a9c73d2631e41bbd626e98b474d7c05bf6cb2bbb8d947bb3c7d0a52e2433f24d5cf8cb4c1c25c291031630fb7d24cf9f67ea31619d7bb6ece7128151c8ea8dfe20532cde6bc7b94609dc15a6c6b14f438cbccf54048bd6bfd43adc4711066f2b12eefe784e67e74e04f412891660db4e4f360fbe2c49c037f166e74fc8a6b591277c7ecd498fdc3ce5628ba49899c440d74bb215abd00f6c990b05ee4f66895e350329876195cd02abd3072ecca6abc21ff45e4d1d7de028774edc2d51a1058185a88810f5f510f03b67a62268d03b0129d2231896ecd5f7be7f2c141cea791b0669035ff18098d1a824323f2af55336fd88dfae17afaad8fc62cd392b2a35d13f74c0f0c3bd413ede5f563a350c8d2ebac46d9ce49e8639c4fcc70ffc90734b9bc251489959ed79b6be7bb4318700612e34d4d88c7148ca13a1ae03db2f90736be5c922a05c622c27d67f9b6f55c1f91cc56932a36b740a8781ed3466c6179db00e1d5890edba24898d06a3c8d5653b395b924a8dad5b95195938cd2d84e5e27fa6674d44c71414b53931f12797c4090d90bb50b11fc6370d985988e0c476a135f9420c5d912f9137e4eeb3893794e3482684ceb560d3e372caa872231ef913d1291b8f6416a956a2bd10ea9c424c5b89e471183f5f8a9622db77643de0dd76599497e83fa8995841e455775d8e82bade94975f89d91040b206d420a0c9cec19359bb6f8b42b9fc39989278ae3d7e776e0deb6ee6c02919909a4ed89da247308cc15884ccfadb0698b1cde69a521025106363c97bd2523f9f05739982eb0957d5e75e8aca63897a54637666ed9631ec5854cbe97655f2b033c28dc6c76a2cd1ed651ade8118b271ecaf34896a1ef3222c344a06c0425c8d52dd20edb8344be1620ddea44beb80a39e66a6203fbd1d6bca57f503fd98dff73322a2078832fe09163803cd1410b1485f60ea3bae971f7f7001b0614aa7f90f838f619a382abaf7c0822da6857e2efb4ee4459ee2b71998f88821e1739a5e2960c8cfeead96ca798531089181c8061a47179090b23d1bccd40dfa7abda93d09281c9306a297e292ab0795a5ab069d1bd246769c1590c032c768da33028e009fe37895f443445e076b2c4e83472a3eda0a431245ad1115c397aa9e826651531a1066fc64e0fe7e80d2494913a7b7e1af0745ebae39c77e30e217b3481cb4e0f80d88f44b1b64870a1bbb920484b56375fd2d58a42016a5c3f26d6bac4939456c0945224b9663115f8a9bda32d189b5d0004325c85647155e9f8369686300d6fe49388e9d901e94608959232c6607842b82aaba4183ac9b1fad93876d2219c2a293f9658835eb7134e8483cdea2b6f64ac7e047439a10c2919e32ee37a00dd8152c4a9bb38d8a93b3afa6802b1debd8c1db9e8e646c1e6c225e53f99d9b3d904aca0ade3376fd9fb4ed7e8b716356ddb8f0906e3d7832033a41b07a895c2f49e18e5086f8c3caff827281a920850f2d130d967df6b11ca699b83f3b4a794718d1b4812b60f670a36ad084c675a19715205c6d9e4534e08a1bb529946afe6332db92c1c2da84cb46f0b148f27c24ad7355df3004eb080ab245484bd63288b4f45194954b390d21364065818988638b0387e40711775c62052b8158d55cc04e40f783bd901159356dce33c03776baeef32d84d44e0191a6d0de1f27694bb70498694bf83fab9cafafd570342026c09574fda25d4e14a38d3de76ed27f794677c44d89378b2063e56a5f94c49d080e0a880e50a5df8b56753d9740194c8d86bd98c6731300ad0d441d08407aea4d39d541d8a6c2acc2442427a8b481f1eb7d8f62f3022b1cc5b5ca82f385161d32cd192984dcd2ddb460003c0272c1c3a1a3ad2d7a1bf0d279f6198d21a8ce889d0778867b56e0749369abf441344e1d81f59be1a88ff6610a757deed061e524fb6720b90eac453de73abb525c9ecb1cadd4f1dacfcb097e6654a56c1624b48e51b5bbd5221e1080795ab84b6e248d7f1e3013b2793f7138d479bd49e9916d388354d1838dd7e2aba8e6576483d1f6df894bb62db5afe3525a9b6722b01dd1a2963995245046b1df8f4ee0297d051a4ee9361d7a4f139154a92aef26cc0f149e38bc366c64e743e733f3b5028fecdd72299a92e74bfc341f17a2e955365657b4ab4d658441dd55f84fda0ad73f4a913c37e5461014038ebabe42230f5a4b576f6579458db46ba4e90d422a8966aec45b15a86bed4a1286a1eb4f0aa22dd354d097ddf8e477188ddff4537efa28b842872b279b987aa7658f1b007d570ab1359e2503dda199158148c50340764e020385e55448b35ae0f662b4bc86acd10c1fdaf13ee952d5594080c1cd73d3e94b9eb848f6772ae0fb8446431865832727ff775c6dce9014bf79ac8074fcea82768bc5be04473e828a91c31ecaa9b2e81278f7a09247a80117b63e4004689b4d526e7be17f5d244b7923a4f8f3f713a850f7d6d3fb7904d5996c0560713c5ce58a65f76410481e5008a3b4013149864ba2967bae630b88610c5c6f4c891e5089dd7f73b2a58e7316706c5696938eba65871b07f1285248076d5d9c3cb512fb7fe49c785b9cf5118a7077580cfcc671468488c03cb68900f784a746910072022d67617b1dc3b8964851beb6dc2530c80747b7ba4f6a80ad5977abe350b193c8f7177cc0a40b0198b27b8d86a996eeab8edb8040a3b58252ff156bc826800fc6ab0224f1c81440895efed5148944c07c945aca865e7f3a80340883878758830ae7d72b59327defe294278616c4b919b88c5e7eeebd8bd6d0509affd48b83985fbe0265be456557197daca1e1d2a3fe0a033afa1d018c850b522d8067123ae9c5d083b5a0ac469ef687fc249544e24d748ab508daff3f074a30827bb694820af853f0816d76473f730733bf088070782f99d46dd938ca897290ad7e35078277208d2a44fdc686451293bc8d5d606784d954780eb44a0d02a86cf979583db73dc08ac3117587ec40c5d9c6ff51a092137070e826b480a7a1a3363857812496dc94387038a22e90e98f70e0c3878c0b007023cda36e2cf03bb9707aa4ed71b08c66006ebb1e40971903080ff90943ea8bdddc1c7001d5c7dd72fc3dc922c19b94943c80c8344ca00aefca14a6d327b0cb16ab903867bbf3ae67eb952304013c72f12c57d035dc5fd653206b9e40540b5c4b718345310d40c696ca1b023b3cdcdec6149257cee1e116865e0e7aef98492e8a6e82b6b22c28ed0a98541e18512a5a0a8500c454a4d7d760841e66fcc54145180c3aafa08f2e912b809c2b80d2d263d004419f8f1fad5e038bfb05ea1323f2146abc037e8adfe133bb1d06261302ee68599317bc83d30fd0b7612208f5c798ca94f00b0e0136951c1505a34f2aae5be9fb687de715575206c03366ccad3c67cda76fd64c4ef4b554897b10c98906dfb54c05d8d706d4dfd50a6bb11a88787510ead40d2d46eb7aa131425c02719366f0b3e0ea72ea0117892bb38e891aa7cef30902d09bfdbdcb8315dc7cac6f53319dc2c709f86f27846a12860d2f7ef20e9f747209066819ce2616848334556f60a59b98aa0212073ae8cef17087e5a4574548fea56900ac470f6f6584462b7c6288167f55e75378702d7323dc0098a1acebc0289fe3b636bf40a5589749445e2111e9231d850eda0bb3fedad31baefd4a5be0a52caefd4b926edfad88e7756d91c9d17fcdc3febd09df8938aa85c7aa73f297b9a8776ca5c6bec93f991626aee9ebe227db78c8972254b807094bb7b80423843dbaf7edc81301cc14400943da6d148da4148260d4a941b1196632e2b0d738837a9dbe8af36e13f8434464b3b625a926183339eb0fb10b8fc3187d03ec48cb48dc63112984fa9d6a8df2d7bd7c2a4914abb2aa9625f311f8e92a5427d0eb4392875e420bdf4f9f6f355a2b53a8acdec346d67948e906dc9c759bee3a6056806629b1df60d4c1b95be30489b66d2a201fa1696a5c4169c71c63193f26da6278340d928d380d739ae9f37509e3e5c087c411b64f0327fe4be62ce0f9d6323086f31e19513d6374494f8fd136b015ded1a69a59264b8b1845c723fbf0783122b40127ac3e148ecadc06de4aa6d391cced588cb60a3db1b872372f99c6da06d98a94d05676ffaacad59814264b96297f876695b085316da1137fa40bdaf37acd846d7945ec6e667ad67cf5921269fb89d1493aa9ec9f1c66584a908a03b7000bab0028026817119842b7dcd70d8ed32f02106001b7e1880b6c1c1007c51fabbddb270dd3a79fb97657597ae1e6a500bdc5ec4c8ad39589f27d343915bc238ca11c8f69e369c8e9f92d0941cd64a977c6ff38f307deacb4991cf17947c8b55193698c1f1a199dc22e186bb91d2d25c9459a03ea621bd1d31c6950161b023c32cd3bd11f8235e1463f2702fc0e00bcdbdb361c6845dfb8f6e89c991226e41d12aeecd86a60fb971d9fc57b4c5a5415257cfb677e0d47ace3f12458aa44f3d1871c936489658625044dc375d86f98c0f08dbcb7d275f52c75c16a00ef19e4560c339d4e64fb74bf6ff8e92a60cb52c7421eec975368f1a3a3abfd40b00333133e5048b89c403cd780f265f816731ebdec1c959c484fc79bac37cc58f28d07328d351407fae051d765113edaf60d147bd9a8a1a9f43e662a17427a4ffcd3fdc942c8a324472bea4c3cfd3e6b8af7085d14b56902d9e9c0bfc8baf0b0d7877fad178fe2828e85a7ce5c7005aaf4433e8c27cff05675d5ed56c431bdcf64736b35760fdeffd176eeeedf9708ce1932ea88b3eb3df486605f5da3a37d40341a716531a75b98b8c15da97bf729024c8beae373a58bdcb2f0ff66c202ef5a85e8e1d548130c79a00d9e4e1b5b823cf181c6b55fcb94b569be477ff57c69f36f5c45dcdd121104c12c320fb863cbccc178eb2fcf9e7de88a588d819f143fc899b003f07ad06316728649024d6fb2d20982fac8eae314209301898bade65b5f64263241df98f34e40a26c8b4de1ec4a4215a03a92ce49a44708880fa0d7165fe1ca47100ee52ba009d992182c1ede62a3a22881e6620495700015bdf1d3a3f911844a7239a280241b441c52df96b89d9aa850889b4235a97dff5fb1ff38e41146979f4cce975e1d48a71f8bfd004cee8599d39195e4ebcc2df8a3ba1f0a9ed019f6a6e9c7b20bee73e70655f43164f012d13f452f7c6c819a4010d36bfb8711e241c05baeee036405881a54be8bbf019f0f65cbf05845cc6ad07d7f71168247bad56c3d2162dcf88f01ba269d4ff8dbd560966e7a2282df5742544b79d0c9155326f163ca89afec3f6e86b18f55ad48a02e2e8e54fe8c90e8c7806a7f614ee3a4e73fa3a37f7f1d7a3798b5df46cb869e85399c43c7d763dded14e130ea1672e8fc02e0f71408b0533fa7c4ea81cd417bd46124b8e7a91d0478d431bf950db6804313ab1be18395d218f7af332e243fa8ab3315b6f86afa6f101bfa4843d9749eecc1597ea7db800e639d7d90aa6456081ca45eab1509040c1fcaf195d89f33b949d40c3f265bf3ce3cf7d957a4dd208a798f63c5759ff744d766d9c69122682f8c07e45d3c2c728dc1401c2933cad3a69fc0e75e56044102e3e098b4691a995637e4344a10c4cb7a1663161da2861395b4cfcf2e36d4ede5030ec36ba703da8201bd93f067a1180eff2574f6afb306d1755db964807886a34c25e5b48fe0e5fcd744963c0b66bccf479d7e965e4fceb2553e4aa05cd6d26d3017733ad6e766508ad313ed1981e45330fa0b3b70a8f70b31ddb6deb15719f860c6f4c90653eb4eee8f8065b73bdc70e10e14e60fe462c214ac85af9f60e900ad70e10a89a2ca1b9438c5ecbfaeca0898e7e8ce5c581dda9ff9cf6bcc5de8f11b4f9f27249a874adf6cdbf5d687e77a01d0038fc7274322cf90469a91316f0dcaf0b9e19540c060bf6a96ffd6127ba4c7440f2d4e32581070360fb4ea5a3d4cb0066d2ca31b7112f18fd32111a5b0ab600fc171fc0a3bf8e048a9a865d61e67a8ce1167d182472b9ef99424f6b0ad007747a1cae5d94bd8f44758a6ebb3046272621b2f9ae894adf0ed458d09af395c58c9730f428000897fcba520bd50ae2bd6f341cd5e32ebf7a0e21818e419d96bf3de2c1261406c246678b7d43bd6d6a8235cca04ec61c98d68b21c4b6852765d2a6852c17d8963c0d49c32318a518644463bed048a491584cf46a6faa21267ae150122bda7fa070f3587f4158e5714017c1151883b7186278385a5a76c48042ecffdcb2361c454ed163adb55183b52c8ccb4cc23fe05a067d6de73d5e8863038dc72a62be3e46a00f14ffda0881cb2e93685bb80b9744a3894b242551664a5e9cd31153502f3b8439a73134c8de46f1c36c2ed5a6754c0d875f4f15c72d38da812f9a528fbd0a16a94dbe214f147e87edf9b3aa94afb840d011f47fb2444c60e675f91096fc00d7021bffffe3f66985dde6d247e288afdb2c989343a8e4f8e126be960f30dd4606a8f80d50c44a10afc91d8c25bdb06f60af4f991eac698f67aedae0b043c11ade3f02431de9f9c801b8775fde41f28b39634d8bb9572543ee45c9d3fa722f2788fb9cc64e6db5d19904e723afa51e6cd7db2f86bcd303738bd08cbccc55f0926b4365406519c8619aaeff0294b68d52d748482c72fe6c5ecc2d2de8b390536b00477701535b97326a721966ee047b2c119c319936d4f145e2a21b13b6ac84813b9693026caf8bf277f856a8aa0d23d187cd65864a5020089ad8340ae1f152420c1782269798b675ef9bc8863da0208d6cb6e8ad5d08aab56806839ae2d57828b794d2d925a001ac4b11af02e4c45ecc552a8f6e5888083fd87a0f35747f2dbbfdf8690ec2186b3ef3354ee9312908e2ac9a65a6cfaa60f37de3f9c0915c94a0e7e3cb15438454592433f049218937c3cfa1598bf633c01472a373b96ce2977c8e7e9389161b7680549e41003782ddfb856c9962f66fad75797cf340f263fc0d8226eec440f2b2f46a68c964503fa038060887273e2b5964c4c867e59ea1ecec2ad4c912a7578ec6b3cce5eebd3bb15e8b9f991e36d4551c2417c70dd85f48c4c124a60ffe10f6a70887fee289b21073f88821837ad4116262e002c609407092cd79725628897924528e90709961cd01eb81d77773d6d5c06704f88ed2eea5ee6960f667993e7498e42f4c61c51545d663f7eb36e283f5e02ab0fc6871f4cff867a10ac5994fe7814d5035805f3ae4b61f0520a125fcf55c76834a8cc3c106f668cb0b9f6e13ace8871f249e819220588461a60748d6ffde284d015c874843771710446738f370644e16691c5a275581d949b25dde575fa33dffdab7d84f2066991b1f340abf3ccb5cdff848e799b15d2ddd32ff11962e94019dce5d5354b6052ba34fc8e458f9ad8539b6636dab8859ff32988537a46c1f8494fc17224647da507716a6a28d33e2054c9313da42e06208e2ff0aedf37fd103bfe20d6a188f9a42521e094e784be0b97695f9155992029ab7c3f666a2bf66cbc1e7d67a0dfd2538dec3b254378b333a03f384e3bc1eb167e7774cb81a0356c93e664587079eb2df28716e64acb412703e0d8abc6b7fdb535efc3875243f0a5fca2dc8172c728c18956c368c15af5c9a6f549717310706cb5b86111d3125bfe524425d0df92e4649436ce8610553f3ac871c38492df453c8cd9209e3073f50081e288201811f8424a3e5af625124e82587bcdf17a2f0c8a80185e882a572a1a6371a54c822f02e7e8dd4bf31ca132ac067d050ee59f93a139c1e848ab0cfbd4a9f4bc2cd861e52f9dd01bfc5b9114a5fac22f8b320f207b230de0b83f53e07b87ef67e96b0fb129b85a26231e83d85b0d6d341bf798b1a12a1d7bda88f555062f4fa5f9865140518d5c7ce606fd4b1b7fd3c186c03815a7adc436b00df54724750d40246c558863ec5ef91eaa53175343f74e27b212744f1f7091af063c76b367d6dd52349b3155559cceffc506c51ae888a59e7383e4505eadc8c287b8a90b709e26318f23e08f28e4f8f0c1035a48f91e98b724aed6679e6372c54c226f6abfcd6e9971b0ed1f3d309bea5f311545fee3bfe09d59cc395427b02ade9cbc6a213acd6beb2bc94b3cd36dbec33b638390c8a07ba11002585afcf13b55d8de881b3fe86882c5a288f086b062605cfa3c308987c139e567bf26a492c4851ffc93bd7e9044454dc42ee92d853e23633f9de2974f7443ec4f240ac1b90ef8c0b3ce0fe7f6b01b7e5db662ecb8b413dcfd4715b08c2ada7f8db45f885e3306868fe489ff26ebea1b79cf158f8c2c2d2ce36d3d9b398e14ccadb9032083a7f68e3872d465991b57311ddb631fab97ec7a77bf564d1729bda6d347efb460d159b206d2f3c9924de228955179ea36fbf4283c3a7edb8b458bd8532bee74a5c4665b94297840dbae25ceb1e4e1420fb4b263db4cec0e11f213bb2af13a3d53ca31a8a2372d4c668f782d3177beb289cfd2e3b6ee39d5ee6861ca9fc6cd97730449a8a2abe09e9fe8227476f6d2d4cd53dde3c83cca6c264f1846b7208b76cdea7bf6f42cd416a87ef61cff1b43493b199f7c0c04e19026e3cfc889972b2e58252fab0d5ae78f35c4715982cd614ea4cbf80baca4c6f16a86607ec12ee2e509b92339db3ac69d76ccdbb9502284ad5855f0c40c60ea4b1708daa53ab2dce1350a181a234b04081d40b5bfa060dcafdc45a2e550e33cdbff3799fc0ee35c8a89ccda0ea134832a18ab427a34d93cc431f93e7337d255597d7d710e1cba6630231a081a543403e5c73a300776fcca85ddf4a55be2b5a920a9425956cf04828349847a15fa8a12b7f78795e6b921eae9fca00242af27060bdf1456f7d383abaad85e4cb0db80ae206427d6f88e0263cad27b9805a304cbc925b020a0fed33f341df0fcfb3ee59106006f74dc164a9f80df78012dc6f0c34a3a932e5d7ca9833e86652195e202cd65ced84076729588be0dbe43a55cf77eb4054aeeb09701dce436e0e682ba95545460c1903245ec1cfd321efaca98e8cc5f27cd7ca34c9f781a48f6378452a5cb17e3c4f4191ac329a4199c1d67519ea255d7f5aff5141ca3aca8d280c399fd30ff751823c6f44763646c4200c1e083b091da7a67e9c514566eb02c0772ad402c7ad0c7f49c4b697be890bb20a241264ebabd300dfb340d89d7a8a84945b4568b6c2fe5f21d61f5df95a69316436f670fecde4093484db9bd90e5e85cbf9a02d4512a92afffeb7cce1c1ea22a8f256e87c5c06c218d166c0c30d06af34aecece1ab08e43e754b3de2932b1c595b3e3549072bd8f7e4bb249490c4d033f3bf19eb130feda39b44882ab31996a77a6776ddf645b6af2409d5340b8331b060917d622564cf17a0d7444c913f2d434a03987578b62ea9dd38e7ac20d79491a3fa726077b3a70f330a9d76005982db370cb27b818a8f21cc5968f5cfc1b2714b3b2fe71730478475d55c1e7c128d191d060058e5e24ed2873261f8cdc4c03ee88de299c5027c66784470f30f44d50f021f86170dfa7207057f55b57113e1a4bf09056fcfd866b6f67d39cf6e18f3d5ef4ed1cbe890477b91bea9c7775221b130cca2df48c0d394d7762272660df433e656875fe927be677167fbe82bac7220f747c7c24beef07b02f93ea411302e448c176f407e65dc4a40ec334891f9b3cb96b16ae61bb0a64d52b359ed546712081f5f9c9c3c9f06e11405b40da9380ebc900511184c38f280fb10b57035eb7c4bc07598013b805a4d13661c14c5c5a801c06557876a89596d5ff588c57b7ef230d8b58196a27f881d8b28418e7a5a61455f39b75b9896c5066ddef82856155b9fddfe1e5ebb156129fcb4df838cade301d73115e068aeac04bb63254ff2e8367e0ca160654f02a2a6477060ad15f6bc87b1d9823a97d103302317b2e8997f147c633a337c3d4ca2e9509ead0f097709890a2df0ea9e2de2eb5012e989e7fe700bdeaab96320df63542ea39e959e0c8921461adf5be8d8b9899459086b90ca6215574994de68247723022f84d887e51038f2a79635140b35393f5e40b2b20d21efebc5e9c7e2563c595cc599829202e95ab9f3ee469d51f9cf120461ba28dca06227b217248b043c00af3a5f9d8cfdf2c07b546fe1e4cd8589b939b39ce6e40a84ec5d0ae09e4e9ce0262f8bed37e26d33cd39d1c04bcdd8922cf970b62bf0578013b9e69f6e7aa8290dee2702d27a267f932e53076c68eda3e0f2051d88b9b1f755b0bec88cbc6bd0c334fa8a387d54792e5b02b0dc8ec577be888423ea456609fbccd4e35908efa7114f33625404715768906012ee8a79a0f8be89c1c490409663df32cf6e94b11c06831f5140eb7a010990d1951df883800b97224fe01afaaf1d00f4cb090e9788a75061d3bd017488ec70f289c7c087a57e8c0410d154095df2bb4e302e879a04b9872acf3877e01b3ce5368fb9c4390d91662655a5f1193ae066c6a4a3e4adb7f83760da01f821dbca6059a091833eba2eb17454816813eb1344bc41ccbf48fbb8e857d5ca9be2dba03078bb585a1805d04349ba746dd8c7cffdacc658dbf305f60cd18fe75c0d92d650242b0bd08b45f97f9ccbd46f00cad29b5bf7866035080e2bf500b716a2f994e6e4a2e5714e055b12c20011f0e9fbd0bf6470346b3046c1fe605b0eb90254675c9b0b08fcd08b6b0a9aa5a0239aded990c10b924e61b49eadd55ff50e0d4d421175d31dc88a52479d3ab603e5dadbc3ab9b109c73bc4f6b2de2e6ff8de606c2015ab205434ca091b46bd6c0456d573595185091b6bd1ebe44f19eb373d4ae54e127547365c70030a208dbd1c615509a7405ae3364c7abcc90aaeb9e1a6f5e7a1655164d529d6190a17f55b8ee198ec3ac03b9d6aa149fc88a527aad1e1859067eb125eb1087988b0bfe4d7826072be941f28fb7f46836bafdca0b1051026cdc972d0cb6a70e7279f04cf97ac5bfaf19f541341cddaeb73c6dafeb6812032a5ae3d87bbb4613ff18e5f65ed6c0bfcd9429d4208202d8f49e0a6370cfc295071e4b37d2767cc21e89207838c9b9d8497090cbec1507c8468dc14dcacbfb70a1e607c03c952d45735784b64e54eccf8e8662702446f3122d43ad075e81a61d2cd022045f9868efcb87e1341a8cade330311eb6178f65b0cd7595813e102101722b0270b2a29348c7e0bbbb0ef3cbf5caa03ba547d0aece59e12ebf2fa7c7ee56d83daa261382d1a4d2945dfba625e139ac139873c15acc64c3bbf18c47a5c2440238c09f3c7f41c605d84276e8f5b5e12ca7d891c552264a3498cdd7ae6119431ca4cec134427d11983dc2871bee8dcf42b8e6a99aeb9893bc639cd672d50f77b74d17ccbff26d075a9721bd5096430b25bb3242dc350d6fefb8b50e52660d1c78dd37193df208c9bf6861e6355dcb4482cfce8c144dce4dd70d3feeba794ee300537991eb8a9a84377ba7b8cdea6af972c95f2367de775ee77fb5392a109b7497486dba67b5fbdb46d6ac55d34bffaba2de85da04e41db546e66519d62b669dd44a9060aa491ba714583fd1963e35e89770e2a0d8866e0f515788c0511dbb45765a42bf035eee258d1fe66fc216b09af4deb75ae4d57851ef5c4370d61b8888e05426b537b4d606d5a0f84d5a6eb6da4dab4243666cb66d8fde23a885e68e23a52ef38c2ed503dc5d141969cab51fc87c462cac9e14d29a77674267e6bcd1bdaf28c3a3453eba71a822d6e8a48f61d8c5ce1163868e47753a6e5ce293ec40f89beba0df20c3f6d784254ba02d9ba0dba8813d616bd6ffc54a1b6d800386e3609f0d6911140a825ec6f9441bc8c1babcf1a59080cb2b23afa8f1e81fc2673170c0adf6fc2612ba943500c46ee72ca27bc489862f0132bab73c8b68ca80743659860f78fd9f08241c6df41b4ddd93980b4c845816e2a1143c18d2eb6c5e800b41084c3b693fa6770a5686e24883bb095d9f0617ae32be09560da1666f6705f4ea8d8f75c3d577ecf0b6de79464546d4a61f4548260c0fc3551fc748b6cf570016c34032a80c27b5a405616a50305f48768813b4ef3aa5156a5e2337c1358f2cc9112ce77c0a385543b3d16d3859678af08deb7da49b063ba00d341a4201f197aa8d3184e66b900f8f08d6faefabaa2a5fb4e5549d78a5648237b932df796292599028e078f07d507de9dc6921fe4f875d6d11f140ae5839220c6f8752567fcbab62e5ff0c4afbb904af02b860a06673c945fd592172816bffd0328aac5ef3621bb9f7949fc017e5d65d455e6c4e5821f14ec60e502221c99b2a3c40e3e4ce951e207233b0052220546a6e0b89060b021744f8a8d695008e193a140c2bcaa8450423645024005531c61f2854ce15575c4069a12497a551df1d1150a85ea013b12f418e62e18e68e6d1df6ba21e0ac8c22893952676574083b2bd3bdb349d2a05028222928a282a7646594497c2c0d272ba33fa5868214ace063bc2cb8bdaa54101479a07952cabfd72853a8c4bc5c15e3d7b51744a63153433d7496956c23bc52f3449f9d8487de3a7826202c03675f81a88730d56b3c747d683c549f5dc6436fe8edc5f3e6d912cdebd8d43d3f69fa67f390acc7c190ab67da16f22cb43d15c6bdd754ab85b61a3e412ddbde498553f770f7740fef63169aeda04b17483db5cfe699347a6a1e36fde059f53603cb40bfde75595a5031440a2b2da668e3e10b52f2b383329416543821ffb21e50cd96a6eacf4387618041f35ffc54283eba06dda10f1d48efccc0a676e83fd8e42c031dae1ec22f2447cb67f73cf497182fef9e2d5d8145d6a438d881de606c49552df879a840541ebace0e7ae82d05f66a761b0f1ff478599b8f1f9494a04307b225e841b6a43a80005b3490ec1aead5003af490ded0934c632211a2bfb749924b8e9ca3279130ddf1fe5d3ee3d3f8e366cb322443b7599a8b9b3a30f76bc3b8a9fd25c486b79943106d5b6239dc366665b65fae93d6695c553423ddf17cc55c64cb2f9021b7d96ce4bd8d4830a30ddb4422d7168d448e8ddc666311462e8a1247caed18a60839aaf2ec41b644da5c0a191df31e5bca9c1d862d859c3d7b3954be5de4d9d34623d10dcf443d90a21746a3d93fe2a6740888bc25c03490dae2abb5f88a7c406fb95220ba09b9a50249cab45ff6df67bda9e2c87abbe28f462397ba437f34f238dae40b234e6ed7deba43f307b48f5cb4d1d03ef2ac31bfe12af281790b372517c4e545dc6c0fc17b91b38c3691b728c3b415853c0be95b66d1382e6ed8d6f1a59d1d3edc5e9afb4162997dd71eedd9529b60581976d95c0f34a43fcb87fd3ce181ce1be0f589193cd6e5364bb22411a48fe668801edd664541843c74b67a62cfec96f74603bb10237c39660e3914070f799ed85b1e12424ed2878490df2b7ade304ce450e442e622e7cd5168f1494201859193b6b4bf6e03b3ee353d60588f614daf879f18d5af773ab6b48ec2a845453e1e8fc7e3797b7c3c5473ddd248fbd1c87b4b2c3e1a8db6a52247ae236f5972c3dff622fdb93e6f2f9273e1f1d09ffdfad847cb7b1268e13ec0725772a4edd466473dc816dd2cb9e14ff480961b2e9d657b69f1f72d0eb3ddbeb4b428211d0ac90ebd451060ff003fe109cfa26d723b7ecc12b75b1c48c8cd88f5cbd1fe36ebe5688f8ac3726ddb6610eda35bda58bf80712f0f7881aea717e8fd90f7e9f0206449828960229a208299e023a867cfd459565207cf74ad58a6674b16d01a68accaf8ede167fcb7bbcb127bb8053aaf8057558e95cf9ed649545230f9e584ecc3268c6c1789203da6b6c3d9cec876cc440819773828e47afb8c3a114912c8f1e5b3e31c9484fe68e8f8bab2ddcbd981443fe66ce96d171b8aa3b3181275d860b2a5795d893b5b9ab1c8b37344623d1ef3fdf6cbf17c39ebe57841521e71968b38db3d1e91c9cbc11e75b65b6e429c98b27cc6d4b3db6cd461f278e8b3f6789b4282687f79666d4ba25fd1a39135a5b60463929561cf1edcfa638a4d7d628f38110918d2f9c6eb131eb0f819799e596326e48cab5f3d2f9128653b8e603cbf5e96d8935dd98edbd88e21b01e519b7e2cb2a5e517dd40b6c79e2bcf7eb12145618b8f1faaacb6639f4ec8c93e6b43bfcfb32f177bd09033eaf43c7bd4e1a8f32aa5e258adfea1443f368a43434048f539f35dcc962c4b7dbbc7705ad02d9700a4c1f2de2e006ac829dfda60b43cb277ef06400df97cfb87b5395114d91886612c3ce68d45aca3f38561dcbc386eca6fc8b9caa8b7421e55552f004d8daabac793d4dceceef619999b72b9a832ea107e6ffdebb321d7afcbd057182cc1094408a1065758e185f64311af73008085f79a2db5f30fdda11c80df28bffe5ae879f61f355c01223f2c018c25786042c56965fdd4f1ec4ab3259f67464332cceb3fd5af95e351a57421c1608d757392846d2edb9991b29048c523d2180226595d4728c1481f0164f56084357644020a618295241752129d6601cefbee6e7f497058d924434998388279bb7333484c48ca168e5061bea21b4c927262bcb6d8ea4282912e49a47e4a8f5cc4d2e50aa5612f86615a1132f45d122896d17f0bb6c774332f00af2a9c25be5f552cd8e128d9d26cb73ab6db758f9163a4d952a4e19a2da9dbecf327ba81db0d67d966901b1ec3dbfb87e42579603c2534cfc9cb793c4ff5a43c1d25a5c9343a585028cc221667871b7bc61c99393247292564890e3b4003748d85c5339666699666e9569bb554758350130a5c8939d56e4a232e4e758ffc3a7122b390fd23cf58935948f823cf5a9359c8f723cfa026b390d78f3c0b6970d33487fe9a23738c9e458eccd16fb4b478d6b2cdf82dd26416925fbdd95f3a3aeb301328bfce3e5bd2376da87576b2257db20693e59d58afb644c62f1036fd609955e87f5c476494b2a5d92b55840281565b52e8d0a3b2e939fbac589d53af6a92796ca3c15cc796306f51130dcbac631e2586f913dd609179a53b5efbfc45859cedd364a849b68fee78df456820fcf6194724760289f9120bdb666c1f3659dc0be63ebc53939790c760f9f3e8efb4de3f6c7ac13c87cbd517e35e42dc049e5b1ec3cba109c6e5f0dcf21c9a442e868bd31c2cce0a096920f589131f5e426ec68bc8939f209e2427f8e1c4dcece24a871dd21c9d70c1824c62219f0e1a0ed02091c16b61bb90605e6ba6aa425996b1e8a6c5597433f20f64fc286431c618b90e79dcde87b897ccf71fb08f826fef331436ddcec533155160c8113b3b1c81082d9a84d18393aa0c0a1e37170e852db44d211f8adbc4e16f702e5b10ed5f46dec2c929b92deb85fd112773a276996b2644b435dff0d1bbcc57e4a33fe49a61ef490d48149eb5ca3466eeea39a361890e34a7269d8adae14604ba454308f8978c00bafec361c8097a6f73c8afc3ad874c4513e0a0eb96030a12198252e5e0a48af0b003ead4c390d39c79d655099e77d8978719089b9e172ac3eecd9df1eccb643cfbe33820a4de4ae404b9be1d3b36456adc559f91316b5f166cde5f9e4c6366ab6af036bc7f3e637a04c171e2a33b3607ca0219d901e37927d11ddbaa259868628934333333334f060ab28f1f330f1f6122580bdd34de1a59c65a50e13498ca8d2b725f554c54f9e7ca0224e895d32c387d92c1e40006073d40413d4054a8f8a0bd0c9602af32e4736e35d4db55f8141e8597126a86d96575642d8465da22d18dbaa68d0a82a3c884c969a8655956e7b04c3461d8d6485846af2baa3686157f222f6cbedcb22ccb820dbb68264342d8d3a825c928eadacc6d596c59accaaa7ced48891333804ff41b6265a21bd8f186f839880233a055a6b5c0283d056c12290a845c4499224a18ddce517a8730bb5811f47b55f9a077fd688f97c41994ed36ebf16165aa1f190fcb50d96e812e20dd8185ae46d23904f8672209e0991af5b85f149b80b68a0c8ba1c8bd2ccc49c50155067a26bab91cd620f211fff21ba2177c64b4e22dae9f4ce7f2914b62a6b5401150648937ba9b889aae2ec1ef8aaf5c2b3691385206c4a61dc8cd3833a0e6481c869cd74fbc118baccca24c59950c48d7925abc1153882a64401990e9fae1eb278ad5f543ba7e6e441462bc7e3603ca987f32a018593806bd1a60a10b11666eeee6e71a00921700323794ca9c1c35c77835736bfdb4539fcc6fbbb5325e6faacc7aa1a00bec8a16b66d1ae86ecc82ecafa143f6d710725f315e6170707b0916ec7782ad8313ec30de0d7659af4d65d663d464336303a32231bc1cb604e055c66770eec654659eac4136e4784384fb2c36414b2fcdba2ec8b3ab3e6cbafc39ffb0c9f2b7facbe7398865ae1e36adf7d5733df34a4f4b140cf95cf771508fbc7e78d989ec8ba7dd5ac66a37e4b61e436831e1db0baa0f42d6b6d3c7d6e56a41e6e2333367fb226bf7c22064aaddaedcded0c800d23432e47beab39d21841a912cd32d4df5b9f12fd84fc6ee6e3a8406bab02c9fa738a043e96eee063af47b8fa70be83d5cbce29e9e229357abaaef811c4b3170760c9cdf7d108cb7a17f2010e4dec5c3d3237797f5674bec5715178fea2e4e23f1de3b227db00603414e1706e223ef4578bd177fd0578c266291db847c5cdc1ef3dbf7debeb797cbee7befbdf7debef756eebe7defed7bbb2226fc03fe8100885c3f25cd74f9fea1bb3b0b2056df58d40008dfdc8c5c109a276d3725ba9060a44b93315ef4aa6a72839fd2896800084d773c57772e82e8e203f2472fa30d2c4b48816e6db37d5edc3146bf9883f07b832f649bd1a7e598c32d8bd84714ca7ac5386dbb86ef2acaacd55874c3dc42669bedd46f2cd1f1ea3b1b26cebcba0bafdaac3613328d795d5683452b54c326203c5d228ccefc0ddc680cf9208c8e611816319616c8f952d9f68c6c093a0ebc617160c9d15edbb4ed8cbc140fd2450261d30d5780c610811372bed4105b9acac6afaf3e260298ed48a4e83dd8f4485a84fe1e9012711a97cab80c3c8cd0c74bc5b8bf1ded85589003d5dfa6a21bb7144257058324e595854e0714eed8f4723872bb5b13c40a0988922040a4b65cbc1c36bd1d96d12dcd21a331e47c3baf09c5b1dee2444e0512b2a5f99a0012a409171964bbf59a7d48bace9d040424ea017a171ab13518a879ecd4865bb861ce8688dc18eda07732fce6da41851978f6e70f42657fde55a72093f18a2c73915826c68b6562a9d9821036c3557d570dcba86356e4f3e586b0dfec54553b96511f01413e089b5f0c1dc93e8befb21ac2b6342d69f376ac3b9655777725cb687c5513f478a9f7ce218ffda027c3222682a82a8389205ab07b79a4fea0632ad3f2ed01b83d958913fb160126f211b1edc530ec0a0f104d60a0469322b42864cbabaa890f9a0f127b55316942d6830cbdaa981c210cd9af2a264458435eaf2a26404c7e62ba19191ca1bf884f3a4df482e5a78e1da684742503259e1d13dd703c4d610119394834a97284cfe8a78ec9c2efee9eba8c6719f0b03dbbeadcf08f66a08a0191df27bf1eb58d01945f77512d714485df25b909d0488309448410450f4e637c0ba4dd4eaecf6845ceae639365829cd3731a36ede9b90d9b74f574ae78cee279c4448788ee370c855093a5e90efd8529cd6193c5c1149733616af48a03a6d8d4403492229e8578f609719e83443f188865427f5521274c017154818c511c54c8095340c0163cafe0190aa1f590b54c81e49f1d13f0ea32ca437b39ba9fe9c69369d7e962ed8d67aa7932edcf213743d043f23be4163705f053eaeb2c5f6e72af3d1e197839daf76b9e89c5db33f0785cde3e039b583cf3103705a039e4e68d9f2593c81f374308f8e73be5dbf595d62d6e723f4bdf07d01c4f14a3c6c98c23f58a6e966578cbdf363b910b214f716fefa6522ec0879cb505e95c801fe23ef09e604307e9def297e77d396c37b2bd3ceea5da5b72201f4f3bcb95f6a7baf69a82c4851a995aed2f96059d04e3e455d8a981121d5eb39aaa6209aa01153f2dd82a150edef211c410db2f49f989399825917e388d0cdbdee9c1863dc39524466c555045ca48155b6a6713b6a5e524a0946729ba23863b67c2543b54c586362882da52bbc7cb821d2f0bb6051bf60ceff24142232a880351dbce33d481390f913cbbae5280428376280f0bf5574782f17f8f857c62ebd8629b391663cc307f1816a1e80693c08b97635b3fe69967d876b9e6578c526adce521ac4f97b3e8065bd1cd25f211fd71ba81edac971f91652cff963524106e86ed2c67d9425aae31164783065991d9a02e24fef39707a85fbecfbfaf2316e84bb2a6a8e4a13f245b822e039b485192bcf3519feb39c9ae2de7a19295810e993cf42849dea90fcd43f290f490c4263d41d8d1d4a84e32b00c5c433e9eeda05b103acb164fa53113a29eddcad68a36faca96fab1aacad650e929afb9c0c4f012db970ebb6811468b8de83b333a5880e2dcb545040c9f294f7e5e775cce7e7a3cb604fd821bbc4ee0844777406f61fff94ce421bb302162888c8e3e3dc633cd72c5e102b9c3ed0c5de371f9c7303db3570f5bb110cb1c0251377640e30309acd8800a2cae084a82133c08da7f2de39d10be7d86e68a28574871b511a921462441032858787185052f38b519aa2baea8225d0ef0aa5279f1a157d5154dfc948e840cc60531062f382d3c36b07e3045e3014c4e0b151614162da4ba5edaf3d9e8bd78c5501412beaac6488112c628c2af531083089f7d3ba9ddb734f3ed9d184bf8f6199af69a2d01e05b258613bebd852d59df3d1e23060fc458fd741a4b88e8bc0f88eed01d0650a180768587c31249c213d4490706a84edaaeb0cf640d1e5c39e1f0d458ad56271d1090ea58ebed2586c6417148e1491524271d46ab53fb90d3f544ae30e3f786838e299814519d70d0e1f2d999f9e73af411785427dd1526cdbf7e6a91a1043380564a76390b302ea4d851c268cc4249aae1062a724a31e4d4202986d08234958f0a88955fd764c8409595114fcaaa678b1ec5b1de2a1bedd9b99ec8c74d5eb54a7d567b7674d5f3eb3f62e8d50ebdb3a5d6791d26343aa0b493c656202d2324af92d5d91cc53101c9a6f5fe61a03f4dd25bdbead52f1f72f27951ee650296438fc172e8ea90c3a189723140bf38d5e3d0c3f3eb434e434ead7385d4939eba058a637db6ceafeb0e0a6c23d93a4771ac5f4f247348687226cde7a458c6f2819c5d37d341bb16109107caaf6b2498191755fddb58762049bc4ae2fc97d0bd15b1bc5dba702b6bb3fbe0a76e57587f3872baa604d91591be2bacc7d8005f866d31263d430a2498e0a050a89c937654a4fe748bf42aa3021452df2fd06dd35353c3c3e4d759c8148605ad7171498a21c1f0f5054dc783f3eb33d22546c7eb15d65708393b26724ab9a4653839bbd9fd7633daa8164411d4d3413244e1d303069de282f3eb3333ec6f635655cdf2f9d915d6338d09525b829cebb33fd167ca96deaf4809393b28884dcb1365072d0f9b7a0b9559f7e2978c5f576e79ce782fe8e7fab04ad4043955e5f3eb362d409c18e5e5f0ce4e1455fcbacbcb794a9c288bceeaf06c0f932db1ef6c15bfaa97b3b32bacebb63a3b90cf5767db9d65f29aecec8ece76fbb6c7446777b6a45106f2e1f08e64d3265999f555f270648a091172c68f1aab6011b2224dac667eefbdc7a9b7f3ebb6db15d6ad27e4e3620f6698961c39492498ae260a25dd0c0b2c3ab2abf9992da9d34c167ed9a583819c24128c7459bd22a048576e8822f5eb38440de61581efe2c7fcf8f10ce272c52b5ef1baae8bd3f606548f9c519423677c38cd84ac880f7e6ab8e29f5d01685758c79220e70b122591ddc3a6f6d40be29f2bf3050559d9924a612a6ca50d23e45c2bdb5d79418ac36d767dd8d48fe31ffe79417c6aae7bac23e48cf00989c6c7637434fb8f4be7dbb57b778c0a3990d37d9c4d2a84215daa90d3a30be474274fc876373728332bbb2a54a85055593921a223e4d4a087ceae579ea5413f2f25143dbfee52839035ede91581814fdf7bfa9e3a5b6cb1c5cc0eb70fb06adbadc5cd87aae1864ddb10e244cef7f37eb634239535396a3d6af189ec9d344664848c48daf8f990cc45927aa99d5f7f46a206f386f8242115c8f5456d2fcfd537e78ba93e3da040f2eb302818eb3ef8a99d9d46c70c49f6d6e3c7aec0ce4c243ba74f9cc0f9fde1152021e515f0aa45113993f4351f2314a95fd74830332e4d5863963469bb5d611d4691ad6d8b1a455239729d95fc135596a47a22c9afc33869c3b4a7f51953e4a1d8cdf839b1e8f91055bc907d10f45b2d3e822892653e82c0e1ec699bb325ed39a2c8ebfbf841c996b4c708201f41e06ce9c5471038ff16894eb14f5cfdfab40f4cc121d684ad9a4a955f572bbf3b13a27ebda758f98d57309493227e4223bf92034ab2422ace76dc43e46cc74ab6e3cbd5593d6e27d56754d7b6b3f43d0ee22095617f5a547eda3a8da4713a67923a07e7d93b47674bb393bc922d4dc9e4b99374922da933077150eff868cc425c6419c932ec2d50e4f3e5b21fdb313f7ea82d2d17a3e4e89bda1eea15d98e9fefa658861e363f365004c80c4130ff500f15947a45aefc3c23cf33c823380c8eb59614e9032850a0a0b0eaeeeeb576bbbb6177b7d3482abbfb54aa76565577ab7840e4091428b06c90b11732aa378f649625f8f1181a1d5ad339cd763fb4783f550b171e8ff5158d0c3d316ca947a750e9e9a1f353ea8f12d243ed1a0a347c1033434de45a215777639f578ed019e872e8d97b4ffaecd6a2389edf981df87518373ded3c74eebad1839c51e7e9b248c5e18117b9207f9f4b1b18d6248360520f7766cdc3284fe03c24fd447942899f0ac51f4671f2f373e6a1f7db170a9202e68cf7bbbb8bc6a3d1f1de7bb1d79f947257eebe87ed0df65e0d0d8ca1861ff98f0a27c376ec8ffbb15d0a4c481731640d3f376c69aaeaea07b37c2838c6720b712f6f9fbb97afabe5ef3d4649cb9fe534bc18e3736c751d5bdf8beb41b31d7b67e344ae33333333abcc38c277196bb2f97975987e3ddcb2b1b61ecf2d779bede11ba305b71e36dba16678ab7dd9a647e72246f73553470b5b9ada860e1daf2a33aaf8497a22083fe3fbe0a7bb530c3bd59dea54a73ac526766f772fb176eb93a5bc3a6fa125d5d3dbf4bb1b45e38a63bde110082fa046d2a9eed475a575875e5a525d32b45b6f24bf382cb32996d915c8795dc9ae24ebd96e2ec4f7f0df8e6c70e185d77d0353294ba58a3b3ba3ae2227e7fcf3c9394040bf3b7fe58a4af5522f3575d5556428b2bcdfee86452f30f71487aeebabc885e5d2c876e45b02dd66f987c9602fb678ee71e8eb56cf4ffed9e2070064fce41ff9cb5efce41f7f3daacc978a835e78ddefbdee0dc974ba899c97cfd5a33896899c57cf4585cc76da88a4ed2c18f8fa24f5825f48c6f5faa487347eb95963796733fce5a324e424bd6545e51502335f7f4b32ee654fbd3296b7fc48b77838c1470b8a241f3281640fb95b334c2791ae6b0b39694b21b71c664537a12744f402fb071af09ec4a677c22c7fc1b06ec6ca5b2ec306d6a44ab05cc7965435c694b72c9ab7d65a1c9f1f5eab6265d5bce558bc2c2a6fbd65693710502a5613b24ca315cab46ecbb2ac1717308f1e5dbf7b091227af0d6e1987324dcb4211d01f8012e41402ff05f6ebc505f6cb2fd7b7367dd2967a5508ec35babb6384ecf1da5ed8d75fd8f55755571130a4f07470a738983953e1cd65def89ba6d91ffc9ed96ebbe70761777f368aaaaaa30b8a0bf0dfbf6daaf0d6e7ee6e737f27f73b9a010c1776bd17f782ef716a59584368c5683e9acff2e8665e216b96b56f5f0e6e0839ab21b418428550d7b2a06575db4108a1c516b42c784d219f776a6857e4f3b62c6859b06ffc30626646ad2fb1206ceb8ab0ad2bc2e0c7ba42d615d9801db22e36baa1854108ad2b5e3064b171c10b862c51a689b4acbbfb82218b8dc62cc805a69a83c3bcfbba2ed1cdd511f67b8f61731c49d2334dd3d8c8b6df8ba427fd357729a76c849a9bb9864108c39c2fe7887968838f45aed9c0960028c8d49f03cd7e057a1b7af4cb01519f0af4563fbc50d7e8606167021ee99174ccd0c42023f2d99174b0c2b8a2b61ee3ce902f033598afc750e360b8005fc4c9a038d675446eaa955f8b23e9e86e68611042eb8a9615b564cd5c355fc3323b26020ea0853218daa03fecc85dd6057d6e37b32ba3a6c5e822924f7358ae560e0fa3e801ef31bf2ceb75477d3c9ecfb534078c37ac76d02f918ffdb6460001fef6eb290eb83a5c9816e22bd3342ddb8ba45d8c2d1289b0bf38ac64953ae92f0ae0e2417a39d62714b1b0886e206b2b910f3ec6c5083fbe1a2a8f870534c7ba15ad8201c52183968450bcac90461e40122fe842b5842ea0f8291d8b2e9a8484d005123a90a2575517385da462ba198fe102c94fa72922eb2e35b7b01d3bec56b7385e4eb9a94f5e9db7d4bb3cd4774f2f87fa7bc5a1ccbc7057e7b6bbbb2b8178aa3856b986afc507971edfdb9ccf46faa3ae515221c1d0d4d8f4f0cf5bd8d28d7fde03861864783e03901abef8e7426ec02185f352f8e72f87897ffe946c29f4cf9fce962213275bc2fcf9e351f5bc150fc0d81200b634e551794012b0f284173b04e1044ac0e2f4fc5dd992f6e09f2f4a892d05e09f6f6a4b9a3f5f236bdae73bc49644fe7c916c818417796f69851789442e6fb0c48bdc458403d48b1c664b0678916ba21b91f3913554274df34c74a36559b64591cf74f0d916627ce6305b8a9ff5f07ce621d14dc60425a85328e498e826849911fd12dd4416fe8a52c45f6e896e2e2df95b10bab625251eba0bcc22e8a1c3402d7a4a0b8062e5a1aae96df144cea97b4b915d933b7876178672c4f316362842d57451718329d4a427d1cdcb79d10b1169288af891153b6051250135904fbef0020b25dff3450869f4e1ba823d11a2043d4f921871000f489ee800e1801d524f665002d4932a523f4fa0a41c80ca7922e587d31356242ea20b0946ba4841f253ba88093421c6ba0d29a678118423a4704216320ab144b2ac208b25cf497f3928142a8829764ec0036043eaea150b31a8bc36c515d91053dca08b29be908213e365c1986ec60a357050c54fa7b172541f9de1a8f40cd7653d2c15d18800004000f314002028100e098522b1503c4fe5ed0714000f80984e6c5017cab324086218a410328600420c00048000c00ccdcc28082d636b65f9deedbd57949df6abd2e669f4d6fc3305bf2addea4b43cb9def4170a7fd56502dcfd0435c40c3ee223966a3be56faf2c2cf296aebd855eefccb9cfb8581d3bd14e8b5e56d2d1db7b39ca3d93a213709bacb5ecaca3629ede587eeddb6209bbb141a5013c4e59a8db1a6f82a92546ecc00a7fac64b8655cff8ffa5674785ee1fb1f7331aee93e2808d8738968c725d25aafc3ac3cbd6cd8d67ee5e4ff822c620e3d4bdf9e9ee94a4fbe40e4f3ae81e5c52d1cabf0182f746ac89a96c20f91fc05fede07379303921281829b312f12476f7c8f6d0b3759d9367b0a34c9600f3ba83a8d6e3acada0d4d3dfe60ae48fb158a4b19d06a3c94ba9505a1d4ae8af35a4da3d8c682cfeeb53da5433d6998304a18a5f11dc3e16f0c040b3ae21f78e72a022ceea207d9d0606287ab0c0adfd59d437a095a7901666bf01b2f4085a94918e691c7e412bd85af0d2b0c094e22f9958e7715d415b226c3857172006ae2d4629f391676605f5259d37c83714c7286bd324fc38a10b3c7875d78654d86cf292b62cb0888bf1b01ad514b8d5000b53f1ebf564de95c0006bcd9a3004c2f74bce5a2f18df3348083f7e18ae43108844303a7cbec94d30aba69a0859af89620b81adb7ffd14461a3196300dd137941684ff304dce8996130fdb805a1308f79e155dac436d86c79d25698425379a4dbeae8e250a37167ca4e3b7bb9740242907856931ad74c0f888856a9b24916541ab016e4ad04a424b7a5d68cb702fc6fdb391e8f3fb50eaf440585b14da5d3dc582e45e93a02eb0b6c0a378237a3fcee37af7ee021d9c1836df6ef08e60ca81390869b97a558e705de492ebea259d4adfb50b2b321e1d42222ebbc855a856508f88f9b48c98faf925e0c6daf3101c0ae03cf967fd849ab690225e0548dad435cfba280959d28c4c8c9e93363070eb69c804bac7d6da8744c054284daf9b9b7fab428f30290d56a332727b0015eb5a26d020df72e0d0c058e721ba90bd9177cf4f7270e3f946d7e973e2c86a24def7129eda49725ca5215adc2c03d23cdb01c514a2750e08a4c687a592b996016275e83454b2df232b8c1cf1ff6f2341ac5c370dea8277f5364c508292ca1a4c221ac015e90b32af0cd120e712659b75d293da407770a88f5e6e87b03470b3a77f83313dc9f92e20149e851e4d84b60722a01457c14ead2f9bd3fb3f55e7af60fb5556b3497044f5bda72dc946ccf4181b1c0c1bc6e9e8ae70a16d14aa8c4a20033944be4b100c64cad09bd5a768f88d0b19a27d82b575aae340f02ce3528b45541f0bda5f21538ce37dfab9cde897b591c4e4a035dcbe95203070ea79b769d1f132b68b2c473c4b842c58892878d9bec09ade2088b80bd2b143a41a568efc5f6cb6523c1b69b8536fd5954cb2ae566412f854b5b7875b06be16d6cbbb2054823b086db67413b8cb8dd35d0a890cbc245976eda2afeeee4b8993941a546a14d5553b2bb66450dcdbdb1bf14ace27f553cde422bc6fc1e859a4d7ef5678db0eb1e8c7cfbcb77e64343195e01980c391312a66f182d7365e422c19d5cb82f76cf7c9c7433e32c9fbfcf93e9d4be08c1f73c4cb34b0c5420a7ff89cf2ef2e693160d15987571ae068fb281e414c2128b459ab55f34ed0150d149c10dddacf868aec849596a4e709e96176a80b68f2cf0f4aebfbe38d8e963fd28eb94bc008151164decc5db5b3289309237b7646fc5eefc2a152bad2944336b5ff4bee614e93ab4a1a10cf72b4f676a73a63e79012b10e9e72d1e5d238b751ed2d0f9133d9ac3b670aff6a8a788d0784b782874701531e29e8cae834e7121d23fc9368404235c27d6e59f85dde1626994c294dc483922a6392fc8656d3ee550280ea84bcf6e27043b60b9db66629123ef175d9891ab8561da92943008b078f55e8c5dac6290b0ef45a8e48746bf17145e5a79e2ed0de6b12567667fae12c2f94afd2951cc8d3e1a297e197cbc07ee0f5936fe143a584975b9d5c35b4762f748cb4736b54b853188f7c15249d2ca4b26a43f2c695b565121596f080aaa25d596fdba60d59bfa67846e05c3ae643ba20e9a5769d0841679dc5fe821b8e2bb77aa31fda565bcc9b0770fbeee65ad28754df0bd1381738aff807efe9e7b273ef8de9f7c3fe6ad3f4ddf0fd601d7daf7a39edff115ed8db47e5fe1fd1875c9b61f51134876cbd21574fc21fe16f3dceaf7534e4cb9357decaf1ecd6307c0424eb81425a05c13170b40aa25a0bc670f14d90a05ed839877312bef5cadb75992e690941b9ee96be870ac99dedf60d4592a63c2efc4d297caec35f7f926e5e784e10396e3faa7b8fc306727c86a771b87e795768aadd05d0a26b9ca7663deb50069b72d5a6f1ef78a816b76619b82a5b67e98f2d31885ce538c26e14b1981d3d3f9a79be5c9435ea8f4f515202228c6b2c981375a40d85941516e3ee14713fa084b5a95fe56fcd911c4d6c52e845b5af075792598e95dc24cf9565ade18a60d9833f664f02f7a657077cfa3e12f15f53a63dc1026502fcbbb5a84dabe9dadc8188bf824e6bd8d91d25f0a909fe09c7db9c7bd19ee7e8c3175f350212fd08e195f0a6c9541f12c0661eea5551dfb5dcafd4ecad3e5379efff3d5f6caa5e5b27d9548875891bc52a6ca694c366a11caab7e5fb8025e7ee824145c6e35d2cc73096e11880e80f2212b261e2c0759d91a209b654c89fb478e2b93fd0c5b2c1abb093e83d92d39a6828bb243b57db980a4d6e66fa6e1d4a9a34b8e4ba9db89c699dd812570e8a91f48854e91fb670b64d8964ac8c9835867ab82ade6ca10511d888180a93654e77ab9b638791b1f79c676d9eb0c042ec65d568f91b7ab729022f99f5d252b2c98d03cbbdc319998f8f6fa2cbf208f3006a235573b5d944c926affd3e31c17ba797714c9fafad8dc2a9a1e28edde943c0182f385bcb02c27efcf510584ac1f510eae09852c6fc7fc0971cfebabfd50f385fa72cfe52081e320728f682699f88932cfb1b72ea9a2b2652a4284be50d263479e7fca3f9d812556f68bec0336f1968401851197146033e454acdce2dd1d8fa17cb77e75cccd4dde28c69174bc550e21a4e568fd64576bbcc8bfac8c780d7d79af70431155dc8163fc158e98345e38d9d05fcbeb3a2e84576370558b31064ad107fbf2909949d371bf4fc1b277d708fd850e40ef05f690fcd7589919423a101fe965ddaa90cba2b65899d9e7e6ffb3c99ad1bdb6a8182f44c840a0defedf3f98eda1ebd1e945ca95303fe9cadeef14f81be7168d9fa2ce5176de1391b42315091c28605b0003e86c43e4c2223e254db08f581132f9ffca84bc10864bdf667bed6c10c9517f8d441a12d60fb4a5f911dd889dcb5e239ff06d93a06599f2ad8cc00cb7327b63caad73005d0415d44037550a890d20d2808f8e62adc42a76d02b167d36e890ff30c6da8ffa5fc6292d3a1a0b360343825aa35d657b641e5ceeabeb3d7bb964515be0ea8518fa109afcd30836940075bd0fa71bffaad7cfb280be22ed8e8c2314b22ad018436ab1867042ecc835ae71a11d36b9f76d1cdd005f384754a9079a009ccfe3b5fc714bb64b658dc4215ceb05e598583d995add72f7b892215f70b117ccb40c3aa35cd0286e98d0f09e34ca42a52e9ec016d260d4f7cb4161f97b682f8e7eb08ac5446460e8cda2c0b487515cc6511226d676a3524a2b785dd3320840e121c59bae2f29f4b6a2df571701374cf1ab840bbdda64f4da172e1da645f272118f03cdb9314dd0d9860980a3279888e394df6e29072d1ea211759ab6853e046755ad961fa9f381cef5d5827ae84f8810565a36529e60582f42440ddee7e0d17a0a566022faae8e2cc7f01f32a9a3c277613f627a124f2c8311b48cf09274f2ff15894a396eb20c24cd543f9067715ea65b7eb24579a4931e083e8ea8a122070f57c0479ee537838ff2a027ca4b9ea7b651acdc983ab27aac47f9c376103a8755784f835a4ff5798f842ba059ad315342bcadbe3cbed77af7cbcf576aeded3370615a7fe445b7262b536c9365d46bc37b4a988342aed0cbfe9a92bfe990064ca7da006e927e4308a33bd485e8243d4a10b8d47d7a773d35bd750b1ac84ae520cba9168ec43cca5f128584de6101e4a72ad34ca0bc514f481195d965fb8bb82c358be31a19a74eabc882678640e384f7f8ccad5ab6b7c495d75fe4406ceaf4b3e63fc6f552b7873a39500069c4597684b80745bd57ce88402afc27e6c71a6ffc295d62b96aab337d250623e9daec6747a3b874d0a4a6ecf7c6cb82247fa74806be67f72dcc0450744dd301adaf5769e66b637d264d5e3dab310624817c23661f52ace288bf53cba1d71c70cfb68327fb3e5b96bc947d5c1a024e3babe5c70634d83fc1ebc6b062e015835e44243f9aeaca0f18949fa8729929c211aa4dd77ba6fef5e7e19f7234d379b3816e8fd27ef1fc89abfa29e1f2daa9c67ce4f227b0463b3fffd6369c2e743993bfb6e2cc8193ef2b0aaa5d4c6dd54ebeae8f3170e674a3c8ffffad79b11787eb2c723c9f846b82a922cfc88676d37da014413ff12193c5e6b6fd753cb529e7470ebf9cbe67b028ae33d52314c75dbe79c5ae2d2798de5e5f7bd7dbc67392a235e0e4b6ed60e0f634bbf9207b9ac18d3d85bd63e8d5555ebdaeb6cd93ca114e0c4ecfdb248c998919e2504a5f9c2439681e0d9b135e202494b382bd36ced7d969fcd3c225b9345a1ca825a50ef4a9978690de31d8e150364f66c9773faf6a8c0db442d9409a6b16507def6ed777f3d976dfe9be4b2085729c79726003a2bd239866d8173c86137b75d9dae520612ff924695ba31f390ed82fd2e389785a03c4d488d2f65cf97658672f291087d907540c70b2fc979227db772bac7b8d196370440c3951921535183144c4c36eb556eb91c519cdaf8e84ec795713f0b4a3d0e4be5e9ebec79c17f542d8a66234b84451d47fd027b40f13292431ed6c7c2924c0e6e0a2982b20ea7f6af0628635d6826cf7ba749609ba4d0e96235b71fefa4c2c168d6bc7cd03b97e151d6b788672ed239cb02802f2560a84940cc811b4a05b95d1663d38553d598ed70a254869d19c5eca0d52e6534078bcd6d42b00613cc9592ce9c8188322985137ea98a64b3a264bae2e291e2cbaf905a8578875d24c6a8ec22bbcad4add43059b51453517c5daeb3827f72756c915df2274511c818b2c798a7a5eaed70428a8e5e3596681644c7ce5b3b803d28c5bc72c2c049c6b15932d857cc96b86641968b11c92ebc6ed0d1c07becda4fc01bc66a493b9a20b46c3a71f7c6a3abfa214321d78c461aba60858054668f03336373458a865b8f804df505afe53474c340d8adae4c9cc617413a10d0ac46b53472b4e0e81afd1739a611f8a881955f2631c979282332ec93a51d976103d7da742e89e7f882304a5cd3e4176a807eab17a527a28bd6821112b80217d9aa796523c8b6553fdc4f47bf9896ac069415e8251b2c5f45980378ca0374c78537862f74709f6e35650eb7442324a19ea2fe0c0fa477a450b45038eb18cfb0a59884589f58929c738cb008dce9a0b151ebfc05b5d70d13a38541bd4339283108efe1fb3adb91216a394028b203dda64f074dc184c2aa587a22daf4e740b341deb3e1432599ae3200e96c3be40358822cc523e4e00cd5167f7e8e9430c3d01be53254b7a62927640b283c8eac709c219da51cd806ba79266129c0b42ed6736c85f5cdaa03651af2a902ffff684c6f280517a2881e1538d878eb837b8ca44ff14c1e5cf100d4a7720e900585560ff6c97dfe8915545f3cb106576156354ba8a1b2f1efc8495a3c59eacf36914915a3c3f5081fb2e4a80c90a6c76d8300201862b0a41960c5877e2ffb83438aa56e2cf8ccbd69a7a5abc890f0626220c6b4fa397e191f51c709e2f084a602913aae19c4ac7ef9a9f5bcb9166fa1a8f89abd59c8c7a52358b315f54f414d7e6d34575201bd1a4a640f9bed2d2b54d33ee1642ffe777d4d059400fa7f2b50acb5e732afa16948a2aee3231475d67a85d72a052f1a51563e4bb641d562bbdd5a636b3c3c750119c0b11dc5110fccbc43877f9d853b836d206b766d969cd8270d6368cf828b3c87f8004bc7cd674e8b739e8a5462a874e4b0ab0e6797e9b9638219c2423083e5111bd47c173fb266ec8a02ed32a18a26ffda3f317fa6cb505bc689c6d93fb7113827fbf0d20a1e5c46148aa6eacb96171981a42ffdf41daf951bca5a7305ec14d00595d8d5584c5f395b5bfddacfb55925f40a322c5d80412cf79b088305ae52e8e782e862a7d707d6832e41c6e8c984f804e88438641704812ece4be3532aed6cbebfe0b1367bd83be0ab5b1bad84abed07be2f85d6c05c5dafbcc3064052a46ddc964fb86aa298c197a1dc1e16eb63cbc9da1da5c0a3b2bb8f75f59894d2b00619330b649b94e9fa0e08bf437e43f48f14409f1152739e89b154dd70af1d08b2cd777208d0930b3f2bb3d45929455ebe5dd3f8cfbe9b99db3118349b7520173b0e0e51c5abd72b88eca207fcb941daf8b89f8521607730f49733704899c39a683082a8f972ae331a7ead77e6360d32a07c12435830f6d6c582b0826e64241a324413e7cd498b38dbefef8dac596719d445bf2a9996ab10cee8b384f882c156e59247f2f9efbc49330513e1df6b61fb20222da2841c020a8a60ac6649f5807b7890c53b09fdb368d606843598e62b57601bf91fec5c7f347509c44c0b898ab00a3241f249c4c4f54419c526aac30143896814c88f8ab94ee39952f73ca8ae235ac251f8d1760e97d40bc823565e189245e8731c99cf877bc0cdbe4e3f68270a4335f9363c81580bbf930cb7086f5dafc0cdaac8af3d233b99b2d1cd276e689b031ab92566a8587de6c426a7f9cd6513e18374be575c47598741d81452b10652562915256372d18cecfcdd067cd004bddccf1849b846bae9e6f4f55aaf6669626c4ef74cb23e028e767ac2474def7e2b1ffe30d13421fe0e2004e7fab82355c1cd6d73fd10dc7e932d3bef32b70f5bbea64bbb462cda93cae13c254331e9652b61d4b51420dcd1a3491c9634700403828645dc9eff36018ad4fec30193c1ac1fab12e03d85c46657fe11abab4b4b1a4f5201c3d9498052e5ae554d21854ea14161c5367303d03b29adfc37478577841ee51b90ec64703d1ec225e75100bb8cf8a7f2021086dd8912ba1350c9cc744857bfdfc09e7d4d624768d72eab65928c0436910a544e8bf8118d93616b03c80636190bef6998bf1d0abb9f1aa031a6e94a9b8a4126606f41148f31be3837d3efa207176aa6c63ef180fc1ec6e8973532ae7ede5201519e22beed58e055ad0fd207af04e37c0ed40a3ffd4f1b851c3a0823b62669335d8e9e9f162efd86111e994e6357db66c5f888297b354c3ec9a761258ed21bcc4f7d83a0a601f46f5d2314b44c6c261c798e802a9ccb0856655ea96616360a3d89ee057b9fcb0f0e48505e8ef0669e89eb143bd3266c6230cdc1a2fb724a7cc87d2d5edac572436c22ce6816dea436dfff3669e0558a90a0c14546754a72ffa3619f272bda7974c86316601a97080318793b5fae067fa452913b5486212f6b8d2ec53c885eeb505d1459929a9baebeb8185445e67aaf220ab15e8188643acc570e09205d2f1233ccb13b7ef94a55aaa226d5438a6339b2afb9e14d10b64a64e3b7b9630f757e6d854066282b25db01946593f16fe5b743764871c091a433296f706b44ab97a1a0b755ffc00a2af384e6440c2258d33f11885f442560a884647199ec34b0ee47e1ce7e41044488b414605ab685125a4f2da50a70e73b395eb767e6ecaa044486b3cd72be14d27de408990c99c53438ddedc623ba09698e7fabd7f0fab477b0f5d44aa7738c5ba021145cd0d99b9ca891ecf2e3abbde09f7315a2c0b3d51d103e69261285e7d391ace595a4dd130c264b0a608904f389e6c0787ae71332fd7c7fc5943ca2b98f861c467e7bc517871b9a42de1683978c90e602dbdacbb5b5ad02fa2df31c7c7a50f83a9f5566bf26687a1aa49d2fb50d593795935c9540f15cc103756dc1093e79ca5de159d5a226c50686a40a35e19731296a6be8c808bc447d20cc389ba245ace28e0948e60e3024d6ef858ed3d0a1ba18a5373b90583ef7a4738e512c7f64146cdee440810532bce069d63e317bcead1adae1ef912acc720abff667b1c8631e6d798eaa51c3883a78a61b5dae17248f2edde92c22c9eea7ec3bb0c3f8d9d9cced7890d6e8a706950891ddbdd09780f1fe8cefa540af291a646a46360f57906c9cde32311a83269b4106c64aa8b1ce350c2199fa0d353be3ba41e47ad173fa6a98dc765694939616ce56da7e3e3ee182ed3dcb9afed410f30d1426803e8a24d4cb0761b79bef18637982974e303aee6bf4a8f9805f1c9e606e7a723dcafa7d8b7be398f1548d90eb244bf379aa8bdcef802af2ce777d494deb2f1bf0860b6ffeec8e5374fcc7240a22d351a55ff3ea193fbb6dd2af0b91d842d5f4aa0dcd5904ad9e4ab89ae9d70e98896267b51f87779dec0e4dc51d8f893ff1b80dcbead8def971f1b193d55f514d1f5e54b680542648428bd06b47461c12063272b498a4919a8e5c90f8c051bd1055345dc164b97ea33715668f5dbfeff934ef2b4a62c44d6c60b497a614bcd6df20dcca1a23af93512707a81f7a550322ae8b734cc3585fa9185ee81a1e67281bd430c638f20b81624dff320dad5ae20a0b8651972ba263a6cb4f3581aec95c9c8af1159f3bc0c6b70c6bcc9c939b51800d1ab09f1ef524f320560e0f6503e645d855232c7fab30d873aed6e526a58d47797f85d5524134dc4ad2a32027e165c2dc3698e0b3d427e02492f774b569373fe0f2fe200d1727a908968cfa53d22e0f620fff46a14919bb391b594894ec6fe8ec0eae3a695b39661139f2eb1aa22bd8aef38fb16d401eea1149c5da2340e0d2ac67dbaca984230b173120be04adc26938e933b971be79746641bb1dd8481d6a221fd28c1e6b84c2325c7f9e2c5e30a80441614cc1b5a1d35536f283904d28c3ff33d3cfccc0bae738adb53817a0c203a938d03f45e95a9207b9b396d421a22763507c6bb070a8b051acb1072dbe6bebf31f7707ccd99fcb171124c640d3df9a11f3e08b28200521007224d300db92150d953e7e9679b187e41c24728b6c228e0f0faf4c3af0dc330481151bef0fb407edf6b557e1d5437f9df6e090cc8ec73196eaefcea2d25f3392c4d263c41fc4fc7ce0f2dffa706f0938085a11fa646c75854f072eed0c5281efcb94d4b29ff967c50ccbd44d14ba29bc8ae4bdf0609d2e2c364f7df162bdde8e408f279514830610c391528fc11061d6a3c8abd6a288d538a7d8b78495547fa452bfc27a17021d15947abe07079cd64e8716b3d90caf23629af0e23dcf3b0a21be900a3a15178be54d40e00a982e2f5dd7d70ec202f1e77044df64640f5a10a356f714b57b8e8cb2de1df0e82a21a79570dd3ac40942acb1593592ce23ccf1834c622b0c70366522ade85612e5be99efd0f4bbed686760b7fa8bb684e362836490a1eeb3297f94e74f47b07d7314543370129026bae7fa244d3c1c3fd1f185e9396382ce1b8bc1e6902bd7850178cf405d48ed50851a392faf618ae1d4538e4288a18828cd5816b32f23d33b86c5189d362ee726e9d465932ac72f22bb4c30898d3ae6c9d57d4c6ba46e4dc2cea145e129481390a0f50e1450784ed1064c5224a0cc3a6d55877022568dcf8b3f41c2dd76468a240556d68c2938240b801f3b2ce624591edcde940114838325b240032b73a0fdb1c0ef7ec7bb00f13d0c2459152801305eab725eccb3391e778c2d7a1eee9b161ae28443d1c6c7d4c13053bd9782fa3f2c01b91d042617aad81a1c6845f950073c714e2ebf7b645e1a90745a7c9abfa9ee4fcbbbd37b4f9072c8b8135ca27c170677d0cd8dcb096d4e4743cb023bdc2b7b1a3ab8052875043ddb08b25ea8b1a429bd012caf6f99fca7442eb60a9b0bfa4498c70ebf7c1df7bc3f674742d338021ff1c7d9182298d60c1da6bb2283709fc3b5332e89c521b8ed8a83301cccc670458e427c20a1532ebc1314b4001487bc4391c20dc04585c9f8ab90742f845cde27f0799bf0b446316fe2b27d29d85c081b410309675cebc61c6e651b8d11c73e8b4ca97435a51e5cc5f4515b6e331ded9b8b6a5e5fa960b7c02b968a83cee0bf33b0e78f3d39c72c10e20ddcabd758eb08f2a167c1de10f70289e26708fc257a90d6941435385f3e643c5a7890f7f27d0a0cb6738f3b80ddae380b53858b41e71e0451aa135d1a16cf26c2badcfef89c75adaa1c385f4db3acebf00476703e92cc2e15bf02dc18f1d4a97df4cce5c51bdaeb871b0f9b10a7e8842ba32e3cab45e71083ae88f2d2b4585423364ea0c0135d5ff6f120d1debff8966c1919c390e3922ca323f160e676fe9005db4c81bc81c1f094a22e9f04954ea7f44ff38c6b19b64f9199e082e84ae18a3c2e1f7c8ff873516d382b6dfd6a8aa07173bb7685664c308152e26b84a838d74c0b41582f2722dc1532e147feefe724baa04642b384ffef511ad1f9e3bd31987964148b6619647fe10a5cc2c33e469b79a55d5fb8d57cef34d3ba4445d701108d1c9977eaeadcf8f1165e111d1e441f77c38629596aaa97db17952e9af73ef49409bff0d588e97e4a3ecb229d7a3a951c00167226e64f1edd719cb21b3faab93b017f3c3297553ddf833c3b9db9ff32a0ab599a164fa74425b2dfcd3c07650a362df9c252be59bb6b582fd867cb68e53141e8b8c6e5e7955a8fe8039a1306bb5d1e8e82c82ff5717ed8ad65456ee26991310cc3459f44fcaa82d0e1dd4ed15e93f28553a474efe83e0eb5c6d800cbf0d27ad520b48926daa29f5c4a94a8fafe9238fac31bd05c6c3126eb4bd8fc761a712c754f27887f54a8f546edae7b99e85a9ee1f1278ca88fa576aeeac4cba101f3b8be68c43f374fee1957d2fbd946f9203334c1fe845a2dedf40ce077571e92c06a571e38cc9843a0e2d81dfb72e2affd13abc1adbe59da3f9f65b03f866b27c168aa045540c2a6fb00d0bf2e6e67872133d4ea5af7c206fdd3930398eb65b98a26c8878f856c1c4f9a4377767e32e665f99797a617784a8432351f2b053ce6aa1a1eab752dfc56b0fd413acf48efdf19549e80688cb2f55ab222273f7d85b3633d56e072160d5202df7348de13f5a7e485a9d4973e518d8f15fa0b090e214970e46c1669d1ec0fba48c9498e20728756bb4151df1044b7f9063c88113132ac016017c2825984297695db30fe422e0b4ecb784a0cf234dd530b385b3f889d4f03938db0b04641d45f746fddad7894156d03b949808f04a3ed0593584a94d004f1858aa9908c720060473d462841b7daacab876741eba3ae7952bda29b44bf987164e05508fe0f7e4a5c9fb0cbe11ad2c06d30892fb74ef0008341c1415bdfe2dfaa52c190a5217d9a3d0418521d5a02cc0878b7c3bbdd5d1a93bd0cca63ec4e196ec909bccca1a791c8437368dd0f26f8368be5164d9ffc495ccb4d3cbac040bba30486d8c4a415c1e7cd053e9688843f817393c1f2c2029029c7c9508d70f82c64e86b972262908ba30a040c3decef16a797d69a3fe89efbc06320e91bb9f6db3dd7defcb8902e029beeee9f081275ea82e88a2401e529a4cda78ce32965b3f3ba64da14655b6725f3e92dee39e171c9c05eee486a0b971b12dd408ec7efd6033f22d3bffe875c3eefe9f0d5b478fc1cc111a4397c7bd92c284d2ac44abe8d9a1cb0f3bfeab315976995c56d6a39f4fd806e068140884cdfde50501adf9d00dff533b14ba273da2b31fab317ac174def4dc57556cf7921caff733f080327ad36cacd5e1a068c0a8b48002a4b8e4debc8c58f7d24fc804aba91402f747211af62170cf8e5b7d8caa3edceec3e44124b0dfb0d0394331cba99ec344cf2e47ca3391ab5076af2ea320f765a4c04c56d56f00e58479441752e26dae2d37861716220f73026645dab2c68570a039540bd7ac8360a091f99273d9346e0ceee49e731015c6bc381496bd830714dac4d1b4253aa533577d134f49cd231fa522704b5011d06e71713d2fde8f307b4e077a94103ca230806347c640444860630b18f44f034bd65186290e9352b0a157a8e2450fd575ff48104f8a30975e0445b6b68c68eb08dcb8b19300c3a01a79650469f29b8653fbea0c954e3d591d15712ae1a015688710e7120359e094cf18d4bc5299840bf6a58a80717daa19a1944eb4bc923329d92550bc79e5802cb4d1d300ca9abe8ec99868dabfb9ed150d93e2b5345696be4de50052a35b3e2396efefc12c50799e1298c29a7e7d67a9df51179db2f19a926854bf7c42fec93a275dbd80edf4b8acb0cd35603e1fd4b540346a1a81d363aa8df80b2d283e64018efc08f3d3af5dd11355426d014a2ac9f4ea4c54ca8c440adf0578fab9fabf955ca16bd054e7de6bfce1b29e6b21ed290300114bd0c2404966914d696ac5f238389af9e7a22ec20d341518a063dbb2703c786d0d8e46bbdd21a349be27bfde0f31ea77d8e9f97acc4f7e35485e285cafa8a825e1d4befe43959054b4f0b462525bfadb667e675accf11fb3151d753b729ef48b40f256323600bcf53d4f4d0ac28689cbfa8205cf97524f3fb1f4fdfcb1f12e1badc02d796c3645771699551260e5d173fe241f7a572b0035339e13942bee08c0ee07cf1fde6b4066cf471268dc90d1d3236ea709a19382dbecbbd5bb731781b6c6873e99f0735bcb61a911b475a06e325d0845552411a8eb89cb499f49a48baae83bb471fa617977c9f40daf71238bf1abb41ebc015b3fa0f818e6203c1f2aacd9427d3ab207fd56f5038b858429f0ab556c94035c9488284d08a78fb150910729f3711aa360adb29db85eaefe8c596a61020eccc7ff17cadd054e621a87afbad11f87709c77472240e3176ce1579dbd9920883dbde10b70f8d180205dc10dec95414c4fc7340d52d8945eeea3ed08806e5441e2a0ca6546e6cccc104432153d67792498a678ab0d511b325050d691e767a16642d243fe54bdbf6585e14cdb29b571820b8b705ddc7a3e1de5ae16a98c9020fff0386582e70393233e5bdea631a28d47c7190611bb11e0e634c651e1078a4760c624babfe3a6b394b923b8060d9a7e479d47f88d8c754411f2efced384c34bd13dde13493b74926bfa69f22e156406159fb36c6e1bb668202ca62f772f2d077868d44aee23bd4a1a2498af8b38874523367d957bed2e9ceec8c28e14bd43bebeecfc207c0c1d2ca5b4effc7421e890ede6ca22cddf3683cc68e64a1b2dd696357cb5379c2dc56e5bb658a5ed9dcb9f0fdc5896a704e0a3a16a5ddb29e8922ba0ecc217481d312bd686440f69740a342140ef1e3827dc490f5a0075c431619c2c81b21b3e68f13372bbf9eb3c83b1b0f529455a0e8afcebf3665cd2c7bcc882ef7aa02bd26d97fdca88ef089b9a30c5a7ba9179e8af2b4d58f5075df584d10d0c9722b83984cdb5996dd00a231c130f1614b044b9d38ec58ede7d993e507f0deda011a9d49943f81cffba678f403078470089e669631b65ab790202e7d616030d00400e48387a479fe0c270b1bf3e245af889c7a5f464c36efe63beb85c354e329786a095541c3a87407e82bded3ff8f5545d5b15fd8199fc9942b7e3ff704bb60ea3fb5012027ebee2dc645e16017de79dde8d2fdc3451d0c4963a0242043b161b479cdc4e9c9c69b815a220abc9133a74ad47077486e240b26fd4ef5ea014ae8200d33d10a5aea61bbd5df2943640cd8be40e13c0617d309771b8ac56a5fc40d4d2b92ae4dd2bf6f4a0912a761daba652bed351c7f7fb77d9015cfc0d11ff16c6e7d56e994b9d3e9b9a535397520b7b7eab3536b8ede81af676206228703101126ca3856f6d15d37a5cdc8c60778a16ef25489646f0b9cfc01adc5e590edca0bd94b65e8193873f502fc8ace70d48dc73c48dc356bf05801b1ac67ee81775cb9c6d405490dba3dced9b8a3392e0994332648f7f8c76830ccb6089dd890192c23655badc4ba3ee73e1ed4138a03da94fde87c24721fbc46edcf42f087d9f57403818c5016844ac6f3af66455b24cdcd8b7d9fa8d211ab6e78ac914cb249e91087133a0d9d0ea77a3da7d507a1112531e33337c34d2b0da4134feab903e33d7c536b43b1ec6d3750512b7a85832641aeed96d511df3a30dd4652ff20deec72bdf1cf8e8ba7838add156d5303ca1470ace055c263ef6ae300b1385e8fb9cf1c310e33ba941b1f8ff86f1aecce5be806185c73b52316315d3cde00fd9909649848bf3b2b11234bed850b286776e0a608a2b0b198f40320c8b14c7707675bb6bc8fddf39153d024120afdbe88164384576c705d2a1efe50609b7214b2684e8d22129c547daced52ee9d83bb5172698233b91c0215990880a3fbb4ec4a45c205a347c3b5d29ca45ac69ce7805270e3e689adcf9e96ad325f00aa90869e41804fb05873f1cc2aeb0f0df693001ed075465fcf042e2afee73f2bc133be8bd2c63533f1f31018870e66b17dd45beda74b0ad8419caee28399c7c88eedfbfaf01e3dd37a1f513867f75b9b54edf52c36980214206d8f01a87f60524ff51c012c2882c1f5625a9bfaddd4cdd2be07dfd7f55cbc22608205be56b434cfd26330ae385283d5d1f10be545778184c74a77d035211dcb0b42ed8f444c8442fbf332b9e5c1134bd773c105ccff556b52268fdef9afc654933abbaadac760434eee14e4030d909c1d91a330c5136afdf420faa09db4fdd2d77ffe89fbffd5bc87dba1752fb82eb61c17adddac016b2ea3fdf6a99ad25fd81d302b472d200acd436875cc3596603bcaab41a07c1c2b374241b32f37827cdf8bdfbf14cb336935437ab08e718872fb036ea0d913fc32d3d9d6e56661a539d4daa8e1ad4ea7c95c032391f5a4158dc32a59f5d2bf0fd88c58ade5826db1dd8135094468e6f1ac36c08d3ed9ce2c958e6ac81f1fd3e2296eb1d9fc882ea6e1f6ad0b128c11fbe9299730ad198a31e395d43adf92e324d5cf4fd141b16e697c14c43fbf6d22be6349836612e770ee0f70756f9092707c3a5b4274027289ca82951b560946ae6e80b3ecde60b194f5c2ff292b1d0bd986c0ffd96e5350597a2c40be8f24020549ad8705b2c0460a1c533d512c3138a4f846473f93c888708d591d14d94cb94750190ecc3f17aad80a424075ca435888e14d2b60ad8491135eba76b1e7daa6ec87b8f19e597b8b1f78719444723759f2a608cf3ec59b8b7584653e3311fced03fc61805884b3d0606a618383d5145e9a30c085d9d482baffc3476131f933b63a1b88f8f7104667d2b28457c42fdc34ff23e23e36dbf1103deaa1111b72e6832a3461ce17cd020d64809b526ead509f9588addb2b8ffe9eb51bf8b0786f6e0a6da650f6960b129f001a69bd499538ee0ebed6cb585d9eb1d56ad194736f3e21389089bfe72b2b1f31d37541ec2bbded7452fc083413631def304422655986ecac19555c224b1b1b7c0722ad379d7e7e15a8d916676e70ccb41c78c22b6c69065e78be41f532bcf7b204f8e9802a70930cd24576be5c0dc89e5c23d55b141318b71d4eb9ce369c8fffe5ec01826c2904ffc53e8d46a471c800274a29149b6086fa8d8c1a0c397ed685282843fc4a35f491f70a9dffe2c4f8edaaa808d02d984c90c1dadc3aff9ebced30772c285393329ca4cb79a295ba6b1c4834dc2ba628f981f712acfd98d20dbfa1e97c5001995d001d8a840a60fb06f3d402b26309d51b538253fcf5f1ef25949c90890b847992d9aceed4d1522807f5dd539d902af9d13c1d4103cf72d45059d9af2a6a90139860d3e736c52c542303d7cefbc66797066a6a4532a2c812155619df5633875c325efe4a557772f023bb92ea72c4a44b12c1934a8c6e1af196ffc9d7a434f1457494e8a567fa012b7a592a9809af5dd51ea307495be4031196b6afbf47106e5b9b3073e2b4ccbea232a913d08382d63a0362f03c0307e581c927d8594d228c6b0a2748c5260c0cbd535685d3ac304a2cef59b8c0a12a7fd77be35276d30e11a0ffbc1f3d09aecd8d29f4f7a01cd0eacc2fb0c52fc250283f3e877bca7ac813560f84e2789df495dfff0e330cf9dc66431d3a1f9f3cae6091e8810224e08c3bcdc1278ff40f72904165d901bd470ab01347e797fe20b810d3aa208a426d4c0fd1a61c169bea1e10ae4465894bfe5274d4a858a170e572c9637688ab5adb641b96120d2616815f567631ae4971c8bef7ac1378651a227506047e9af2f32c1c48910f8a258e2ebbcd2058a9655bd56fac6381469715a67f8459c501379bb47d888ff8453b5ed1f76d7cc5adc030b1e81876806d4115af28210580ea51069906dbf3e40cec3925e0cf4afc5f76d88eaa3e2503468b46986aee7105029e98a02532fbd086819921c438d2db4bb193a5b054d91256336484a65c048584caee22f833e1421cce20b0e13dcf1f16927625c9fbd1cdf6bd5db47bbaff3b3c9989cec607ec3fa049e5e2c4c84a875e287f87b62843c37555294dfee16c9da0457d36f3b7a48d12d765620bc2462060efd479e5525616c990e54e3da3406dd3e0f7afa872ecc4d4f50ff09f798148ef4f5ce2d9dae0ac96520f091b5d5a3204c0502e14ac617c91c51027be55d2b96a1077739b8ef88b16848aeaef2ddae67058bf45f053f0138da7bc5c0b98a244d740f49c13f927675f5bf3bde3fe7ce502bda68096fe7e96f8b3b3be09bd30f7c9f4ea1f538dc3cd8bf2bc3536ff9d172ec4df0d0f796bf92c62ce3de1d395b397d623a5f2c6e07e9d55d8f73a1a8a021f4f7e7c098b7d7b5b69eb7944ff7248467918702efe0a4efe8a460b60eadd5dbc8a262c8f959a8460dcab2520a450b36818e1cca75890a177a64c1b86f276c137c533515076c411c6a1d11f7f0c049351a45be1857034b35b2b3978a44907485f9a4c1bd1837fc74f0774ce4c085c1162df02451b2483a9b3394d249c5c63b75e7258d02618484ad5673600a1f0a0c60d616e120d325bc599101138b4eec64804d33e1126029114a17a810ce98e0f34c07917c0521496419de8687fe8c886ab734ed040502c960ddb27285380c04607c03ecdc9413c2ba40955e58aae80547cc382b869d23f15ab07b8b29983ff8819616eaeff5ab8168bcef231435a772402240812153bc21769d1854d935a55014914119f74367aba18ee68cda88718f9ec49f74bc08be6ed85badf19948da9e891c1cc4412aa29a2f1b951a1c3ba42e702eaec1c855504b29fe874295afdb38342fae937404f58d3ba38fc3500b628fcefaeb44511390a0ae32e2283ee95a5c7a853ab759fb0f8c5c8ba8a7047c9f08311930f0c1e1c46d049bdf04f737161e1da288bb4def1f03684f963d0d5aafd790f674a72e4a94dd6adac625e67779defd5e828bd4e2cbeae9712d9b78214ad953c10f7b77bb21acbd400498ab6af7adefc7cca990aed5e9129a1c21518df1df3d2c262580d1e575bb37ccf354b8d104923ea88be44fecab0282e13d2858682124594ee5371ffe10ae4fc21c0805ad8329118354769b9710967315daef3c217cf2fb0328301cea49a352eb66c64a6503d3881993b42a9b62c8f5701bbf235e0053310ab64f38b507e41871f6089f4d558a58279e1a89baa6bec99223d982fefdac35d0ea42080d2b4714bd201b837220c4b819557953f4f7683a2db7e035771f05bbdd94fc2162dc3c330394fc75538275d3f9a658cfb99c9a4661e7e5024501616654de947a2d0617549085d1851bec328396f55c126a3b0fe6fd502e555d7e2805a62a51643e0d627eb47c3565142c1bf01424219279a0bcf6e7ecd9ffec13808edd86931c2f09e8f428e7988b0c2d7cd4c7a6d24204f675f723fd37fe723502d8ba0d2c09512c8d1f5f57314e41e7da7c4d9b6c24ed9d8bd0ea95002396fd0bcdf9cea01789f9a6f8d0b78da3b4eff744b2a6e10aa21bf8457a883863fdf1d65d5a1667a7aff59fe0e7a1488890740f797a9213e402b47711f95a82eaf7a5e89c0fbc42fa68c73cb83a285c181ac9ff3e3a086b0a8928dfe9e9f26aea0a4592aa33fbe835cddc47be8f2bd8a490ff650fd45d83d2405fd71c8a24bb56151c2c97837d6e6efb72f54c910d33d59650245566241a3f4b8272ba897949ee67c0af1390d3b47f4c9d5e3e86cdfe138a64cbe830e0bcbc0625e48f204292c6729bc1ffbf2384c37d8c16fbf0b336b30ecc78c23facd5560b2dbb610ff06362078d700ee66cf3013321d385a5254aff75b38f6ec958c43a5e2ff6039b67e1e6649b1e818060dae458b7fea82b1ac0898a289db506b2a4f66fea9be7e6c1af95e164dedde469578b6728ff369265a3e07d60b0d36af569fdbb9b0754796a793814618304d567fdf4dda3ba20162c4774769fcbe92495f029601d33350c9fa8f2d6ae92654d331b456e4a2818b30d62530a30fb5449bc13495612477091fbb9558b2ac1c5488fb4da526853e1a4a9baae968e4bf07809533d0beaefe5008246b4ae649d6e3f72400219605d5199f743a3a9983011ca6a1c4804127fbdd2596c981f3c2b43cdea466f66497f981888a497f827f02be17c0169da9613f23b524aedcb06c5c1921136276f6f6c1186196b567a929eab674adf6795bfc692a5e3b665a2da03df9ccb894f4f0b3bd6ffb639d70274bbad3d2177517ca0b2714a046e7e49ed118c869f152cd2baae5f692dfba7a07e80b8cae6da0c5dd8541d104a56ae90a72207f5145719c88cdd6e6337e4b8edb39cf10b0a01dc858e4de50a5455669447d96765ba47982330d834a1809d3a61ef7f1490c84f8ee55d4af9599d53b2180467e4a289a9acf550e497a47e71ea3141672e1a3ff3401841f4bdc1bbc62e3405a4666affd2c805dee24a1d5e4d5a7fdfa666867f3ceebfe78ce1a926447d15de689dc7c4fd614660dffa5ac982db37428de95af6c4317a7eea3c3d89179759a0814e19fa3e9d8de1cdf41a43e162c80712b5e47a4dec3a2b96aec3a45d17166ea24242249b48ab0904b145a71f39ba14b6b8fc2fdc66b045c407bec3af451ba77b0d520ce43261b95b34f42f413f4658f6f95fad04e71647e5017a4e08dd501849cd69cc961e242a6d496e48bb4561030c9e0e76d20d835626a3de74f5f9f26b9cddec9af5892612625189fbd21b7d9a48a961c26a7e9420c2e5b289c66f2bf2080db0c4282589ff17bc4ea612a2c3a52da8396787d71a0062c6c54186d199f235d98a96a317636cfdd31cdc6d51645a743b7e0509f587d828eceb349591951e049d077cf0ccebb31b0c3bbbb0091c049cf06bb5a881d4c68e1b7481b3aec93b2ba08d2b0c96da13cebc5a6849a83f8ba7b61d820b69f391481c24fa58192b8dc73b9caa715731037d913226f09242ff7a357e75e5696447590a2e191c1b51a08ee15b4e48a18d4138630765a7da5613bd8b7e4aeb38e91f225970ab5a7f004cd588842cd2ae191bd303f5fdef385feccd8ee713b43dc68434448e234eb9c3193e63efdc77af2c07151d26d0fcc102b3c15c40e85c5fc939bad9d617cd1f671793ffd8a0f3bc70cc2083c3775a2dbf6ef3cd92397319aa263101c0a5c582c0402b19710556302945fe2dcb910edb4eee09d387cb3acffa21045c9c6f136f33702adc147422d59049bb094fc3271b5699305af2e8d27ee5dd521e2dada916a607f237a2574bb404c4b29be8c88a157d96533b5e32610d61980f1c2c4839ff82f047544b4f98a5a144cf6d2eb8ce8e1843b112de12dfb6571ae1fe0e42a624ac51491a3dcc68a105f059575242e6166f0c018d91a9c88ea2d7b5522439cfd7a21429107b5d1989a10b72a5e0aafe364eb2d689cab1b690dd724bcec804d187859e977002e18975fb3d13a4be88dc0f818f0c21014af9ab66ccedb29740b6d47233f3419e008c577586f8313a38ad770bb684b9beb6f5f5779198be549d72ed3759d1944bf16993caf70ad22f119df3393b90210174ca727cd8a052791e78c66765b9bff7ce70ed10b19bb45198b62d10dbc0b69730cebc8656ac4cba319d4d9af85ac80ac83456c395ce0a582b70e49a5296b2b2d49177912a21c834ec703c81b17b70610c3848c83dfe3d81193f3b7e35086a4ae0d6f5f3086210a6c4ac70d946c8646f7855ebe1f02f272d2921934addb97ca854db09ecb607c9650dc615a49165e9357984dde4436ff96600c887212d342e55f5232c61aaaf43125a3a9a9cfb52d062340cc9baad7f3664b867acd1e891f203a3520a91ce7f5371eb89728e71c2977e243b4a011e4bdeeef627898adf186728da2b1f9be9938354500c84a7c6232e9e7b4df368a6f3f6779248b03baa8194fe49715a17b5c3ab797eaaf03ead0a92da8381c279bae8acbba02be800e81abb1c586845a1c3cfe0513a688ee8b774e95dc7988b53f97a8360a2394b28c8997faaef979b97a3c9719f57b6dc0917518aa57220aabb8e3a1ed5708f09a4df5341e7e79b703d595d81db8e5abcdd869962cf5e9b2b4e7b077db67e4f1efcf5ce82599d0a40a0b311873c72a2853f6707f1f20be872eedbddcd2e22d8c1e9bf8dcd79254948993dfeae8058849517459c1da16d846623548bf97d5d696af8bdc0b291f487a70434f6d94dbf9a5d0c13127f71ef07577026a1e0119d1605446abffcc53a045b49c837c08349187a6b22f667e7f34e2efacaab56aeb3d57708656497bb49e238539278857620522920674b5315c1ee9fe35b6879547d484a22b2969d22aa5e5cb5765e726052f0f945783381245c4a5cfd05bf39b7587755e548670439d29e1e7d3bc1647c4992f0b8cf5218f247bd8b5f5fad8fe2580b9c27e23629e35235c46541a6421a531ffb12088af0087401ab708b7b3ffc4ee229bc33261808e9da6a600aecc5eb3451192705776407fe9daa5b488c841b0b92dc369e798ee9751dffc1753a1d169b80e4b49d1b6111ace0d20e6bb0dc3fb24a09a99de86db468779e460347adfd04204b30e6f78010c2fdd7d1563b42ea3f315474f807b1b2ee89424c1c7cb8a1cbffabe83d46488175e944218a04d099db51709a7adc7f0b6eab5ead2eef51f6a30ffd0aa1f90712053be93a848d5a60177f2099bb96365086b0eb023cb6f324afd931a1d24d5b843fa0ae177fc286af452d8f916d3b9aa24ae51b0ebc99405d8d6cc9214bd954db30ae65bd86c2fbf407e661fe9507302b4ea5c5ff6d3f3ae801b92e257505558325d06ab3949db258a5a054c9520d22b22b5e0a5da479d5d94499e1e7f32a07912e0f2e1e73cdc0d94782202efa0bdf60721cc17d7dcc6683233d2746d3873ecc3c986f1e6b8301dd6287dfbcc905b04e4e0d29cf5c963014c5fdc8bcc2937af95bb7a7b7f262a284c0d59c0cfc2c88d23661c542482f68e7d723bf8cbf41555bbd2fb269ad7d0d17df58630cb03a6a7e0b0b6fb2ec935ef3f409e3d2e7b4b7042709d12381fd2109c0bf7364c9e9f797cff9353257a73b8f1c9e3f2d6e7e13cfa7a8f36d205c01a5d99c852b1c57565f64fe590bc5a3160d90c8141bc5cca32b3482231c4878a7b9de71ae7857765ff551401f81cb5be6469de481593fa519b301b9a6b2ee0a50ae58748dd4b3bbf09315ccd8df881322ed05988da3f6ec4929687428aabb260537e869466ded336e61a0be87d6c34b071372f5f069517af468e805a47f38f48144a0f2499545ad8f19e36684d9b400826ccb158a6eb4c2be6c4c9eabd0937ce73f99baa2128b034d394e69244d64637e1f5efcf3be515c606acb6fedd79d8b2531d236a1cb9a83b01521233b523f3fb5a56dc66bd40a3cdd3a9b247f28c42b31c164a04232c811a8c95ef38674dba740026a2f3c7d4da4c21240514718aa73bb088f9cb7826a7a4dbe72cbe49ea9846181f112c61de114868c50c70b1a56b68f103d18955c85a32a28f0eb9ed80472647cc4f25de499d61b9a5fb12083504a71d4542806cf2a7fd6735f45094de6b44cebee1231d764a09697aaff0d8b259ecdc9b4575009826269ed69939b0354ae14aca08c535cbd4dfe08b9230044a8d4a6366cac13723ce91a5cf50b8ac3274ee31dd16d5c0930cbf495a094814ce91ac4e2b19b2bc2620d3b0037ba989915d089339fd0fed473c95511610a1a7c976eb883a152c8f667e3603153e9c5357a4a4de1e8818fb1507dc76960baa5370c21719ddcd770707c3a7958f2b1f3e298691bf676c7a0061c4992adf77fe28d53064cd0c3888a858481a87d89ea4edd8c36a640ef87c372a52e9e853c1f59259087e7a3baace3dfd6cd0c1f081f6e8e1adb3bdbfffde6ae2a0d4b8aecbc8ae6fc9fe83a304b655ef8bbaaeb4b1ece6491c44fdfc9733c08d740a01075882d1eaa5aeabc05aa6577aef0116eca34b3e1ced5e662d0b79ffb9deb5d83973255e976ffb2a81befb51a8475b5b0edd5149c51fb2a7ee063e7ed1178947a3f9729675fa0aab071014201239db158fe056bb3e34ccd5af9e9ec81a6920b240a2c63c7ec1b9cf5615282ec6fb5eb6c6b40831f2e4990e897fef3d1d0a07a739ad07464efc6fa3f8ca9a5375c4daea4b1ad758c8d45a882753944d0c893e0caa55fe3a00ff2f763076c08243108b9b6f1f0e41620309525cf43953fbe056263df1fcf11bd06ffc824388ec584bd49414eea8ca4aaa699d18e82ffd5215f4c55b0b9a212eb2c93d71880ed5447c90061851f46d0aeb55a1ec4dc0720b92f91e8fcf731c1c415fbb96919f5d99c906233723d1173efc9a346e0f11975956bf2387933fbf732abe0d3a095e1191bbc939380e3c384a3733f5481faccc8a81e0133f356317a0cf0cd20c15dfd25cc993b96a942a7ce90e338aa51f7c5bd280f2b3c982dc5258b37ca7ee23be4302c2b9b90576f4f495b46a5aaabe688e79ce70dc2468ba64901985589fc3422843bd7c4f0b78b56113a8eed389485d605e3df107aeb77dc42cbab641ea66b460b12c2946e5d5ba9af5e51e130908efc8ebebc776378405c33247c30285e605a66da7854834311be1d0b508f21db9766b0dbc8b92342075e0390d75964c8ee2cf38e19b0f96ebff928c10af5b7c358acb18cd0cf65c2f07aa2e77d56a9b6f71ecfad343463e875651ec9bbefc86c1ee59e6941a2292098c854ba2cc6a0cdebc80e01a462dd412fd977743d556ea4226a7c4416a45809c0fad55ea9fa38f944cb2d52832d0f7243bb2b523ec38891a14cb5a1392044d71e859e50383cd850979c35155c7ce01ced8dec8615fcf20767a8b8346de9dbe978e0cc63051b6be72c89a488025c6442552df2c20db1518be4279548f319bc178f591c800988c493fade7abc8b3953216dd12d58d4b5cc1369400a60651586beeec192ba9c95e5ac2b86b9315a3f4bc588f0aae42fcc5dbb8c20d505471b0e861be1b9fd33fbc5848f6d1d2e8c4f38f96b7e597ef9b601cbffe809631c1cc3f686a83cbe7d15a7af982bded1e9342958e56d8b42021f02895d52ba86317928e01fdcae84110c785604f011e0d3fdabf4dbf7c6220634f7e7a5d4e507d79414326da7567a7e246b28c4997b65a6254b0b2608cc1c5915e99e2a3972031254a8b673e8a12972bc15d6fe3ef4f2ed929f16286f06976ae3d03a20c10d821b398deee66fa16d838dab9e582529668cde72b13a7be3b594cefb47a2632c7505d32776aa78d84ccadb9d5d090314bae44bc1c10f0eca9d2dac77f08712a49dd2383e1ca4c7eafa354846101fb876e6068f00190d39878dddce6959e455830e05fcac1be5599d3c3a5a4dda91dec37beefc6a7462975c0cf302dd5141e2fb5017a54118c152eb822484230880344bac4d1ce6ad5121ee0d9c5f1146f159a0cc433a24ed478b4554f1d9efbb122bfc03059b03b87cb815c89293e1063fb21ab3c83b49c643409094be68e084d4d8a2cc58ed2a0fca6af9421d16b103c892dd43a41d33dd18d68831975f369e766186a2ced63a7dcdbcf47100df1f98ed0140d946b28ed3654cf3b1cdba4f0e07e2932b6b10c9ef2b8fb3c6d01b0f840d2715d90008f9c0f30fab068409312a8578d2062b1e933702bc085ddee30bba042d93e9a95e6f320b365ce451723580874eeb31bfb9def014787e96ac2120c730ec95f13b8f63bb9af2dccdc21938bc1b0e24dacdc7ce30b3ca688665fc1b68f3f3af7377bd5a86611a073010588a4ab9d23afa199b66f7e0a85f333028749775deda278d84246b681bbf9f59af6c93c552e8f666653129c781f34efa0b8515c8b0cb5b05a43a1039217fbc75d3ceda6b19121382256f58fd88f4a67e2fdb2dc10a6dfa1cb976f313f79dc80c66fb672b89137b9bac937bedac45444d8330ba4e9b59569aef83df01cf65d84520262a7bcbb2802a2f634a928c2f7d634fa80069a5768aa0d54b0691941d76a616f26535448ab11a45b49959602ccaed9806170a7af57cf649df5bbe5cf67c905d89084e48e31aa189af0462027079727b8de519b4403363d0299b84e95a9cebf06a23cc3821d8b71222e05cc168564e3c0278f2097fab095d7a2ded0e57ddbc69ca5029229f305c3e74c6c986fb855682464b46264b9d6e29c1f62d6e0b4f1334c8b7c1fa125321eb22bf01a601b664846e41da6a2f0bd7045dc99ab37439113f103464dfed1ccbd0b21c12008664b45d9d3c2741c45544e3709e59714f92b4e64cc723a9c42fec282a30e10333c0517435c94c98e2e991a107d0e10bd49f482618105eb3707615be5168b5e768f26da75af8b8edca3f731b39b7b7d95d705216576caa88a842fbd952c3c050c36ac3cfe1fea4fee1e0c2dad868896e8017e730474689782461ffeea45350aa85a296bed8c754c1f33bcae140e9e401793854a3f3272df4c38468026398ed83ab43253857a5f908aa42fe699da16074643c59ac9abd645f6ce56ffd387ce9425bbdd0904eb964535ef0264baa96a761127d9661fa9656b01dcedca5403684017c3cea522b9d0d7d2c1c5ce6705b3a229ea397ebbb6e739db9a633bba95245b066d97817abb59f1a2d0ae3660624a7546bdfdc595f569eff56a9092f91fb0174d3668c82cd6b7bd000b459b6e85525a13051fe79d9600a65076e8e6e8401a09f84d98a892cea509dbcc49dff007165c56a9a3dec4a836ae8cfe3a79d75cb9ea42c86cdbc65a02395f28d9c40d4af37c7fb230f89c4c7214e0ca64ef3dc8a1d018585af8cd37f1b3d02133d6fe80bcec3dd2e46bae80d079e19905d57755c19ef48fa631cd0ca9dff2ce59c3fbd106371b739ae23c11d2e4b5050df3aa57bc3ab110091e8f197d7ea7f982d7b6de1431ba17c016eb5c90c6488ef4af55d1c8e90b036442567f88cc22f09456b5392c1a01d7906f9c1ba1c60d56b02c32604b171d78d18a66c427a762bf343848bb470418517214a4955021b896f5c2491aa420e10ddd79d73504d43dc7f3d3a7cad4ee8800b79799c5087280eaf581739782871d9bd011e1bb99e680c12fc8ce5ec622805e369b70f9d3fbde89356f20134208bcc53f5685defc85562ccc6ef8e563512e2ef3903f69b351b27917cd40cb4755cc025b63e8ce8a119934ddb1a05f892de3104bc0eea57a79a1d11fd8793d3402519bcd547ac86d5d08844c8e0e06ed90712219973299ec61efbaf47fa228b9c3ac73ef0bdf392e8af9da1670deba8422424c79a1d409a36a7b5631d6ef8ea610f8aba85ef148444033a63aa785b4094aa4d0739ee113297af9f2e38a86863c0cda75e0178488e1f0af10ad4547106f833c1a240e531c6992493711981d1e786d5bb9f038b3ecc0152d0ada8e31e942f0cf0f417d8b27dbbb0bf8645bf6da146f6de5bee2d534a32054e078807ad07718a24a8ac4e35d890ad5c2724f16d609dd60909e8434a2ac2a836451c164631aabb4afadbe7234eb348ae7bd187c34518c544b606abf2a35fc832a8f20bb9882abf9083a85272922a9f3f10f83ccc0ba0e7e76f06ee41bf357e20f0f98e430f0a7d91089e91118741c94c8441f99dc738f2b767148392816022aa7c54957cc3a07c94a6dafc460b74aa7cb95ba37ddc9af91b72010db787046ddaeee9913df263116bda45011424a821e2a0ca88a4ca288320629129a3922a5feb9edb1a8ebb491fd07d7ff4f33131a01f81bc18d087a32a3f21ce3ffe9a27ebf4d644450b448a68f71702912306e5279f3f0fd8bebf180643dc4fcea344a0dc73fbf984b6aded8d4031557eb42f8c55fbeedbd35a7eac1f2fd6ee38d73caff2734413f6f9781269665f3857850a848cb0a68e6643bc21fa5603ce9f8badaab2732754c3f6c5438119ff971656c365c35b0cfa8750347ec8ad17f8b7cf33910b28260cd66d07872b843455fe9c916767fca59cdba679231fcc495af94b7630420d294fab9670fb589123682806b3f9412c0aaaf1bbade91ac3007c386afcc21b996a0a6e65c29943fb3db0f2639135813df3636b961475d8247caa8c32a832161183a8f243435019b8d41f8cf6fbe30330fdec829c1ab20b722ae8e9b603560ff2baf6a674f9fdf24340d0fe8ffb42fa759f03b804b37dac9c17b37924d233287f7a320ccafdd495228723d5bfe652f693cae0fd588382200fc8034a1918940c4a1918949fede0035cc23e199647062eedcc9947904740df7de8b7080d252a74048d01ddfd843c1e1bacc973a4aa4ae984d74da7ca28a5942fa5941fca9b2a41f2773048bebbfc8c8aadd9ce932829a87f2851b2c89a24a84a9632a892ca223a88aacadc89e0541c4911aab81a341c3915479286a7e169c8849a4d6d7742e3735c435f42b71a3acd872a7c0e92cc8a67fa99b009a45101ccf132a4981ac61583bf42634d31f44c89bf68258b2d816a7f64b2355ef9b78f44060d8217b5579f2bdb75615b118cdd22b268408eab8c0a30079762ed975fdc00cf740c0cf6c715c715a80d1ac6d59cab5e31d831b256d90e58f1f402bf7f51090de36aa5f9dc69a96a485b3b2f43f384e30f05424b58c2129670920f033d223f77118b7e6ddac3aff77500f300b4a6ee57f7a37b94deead89f8f4d4d7482b3fbca259a67accd2c622ca574d17159b9b06abbecd47ed9acad5e6c466bacea8b2455d6d025874b61a693e2521872d9e18cb87811a45d9ee096d09943d0d02515b2d953d7900d162c2d2b389d26aecf95e9c453a6d3335750fed025f5a2e3927299c19a3e5b13ab73fc7c2e337091a287bfd0c58957fc42171bb88484d4eed4ea4883862cadda5cceea68cd25a569fe2e2997255c5a2e52d8246d5c923869856c5c9460d97481225ff318b2d1417129e47242414244a2c70fead91a1d6ea74d2e35d81997d40a60d0680156f13da8cde9b8e8a036a753b52f7411c300994bca25555d74a48bc7e5845e6c382170f2f7e448688c359e78f4d4170f0fcb8d1323aa2f9620a20746aaa8ee921edcd425402a3192d455854184a6ae2a0c226a2894a186daff2055fad88786ecc343d334eeb70f79b12e97247dfae204a5bfbfb487fc1008d36f54b9ef2ab77db6d14de46d0d79b1723faa1d9bfc4443bfcf6d89d2d73e3d486063638343a59f8b72a0b16a8f711efd0d7994d2fdf0a0f43f3c44cf7527f2b40f79f497f364e5360ff414f4a19fcf711f1e73034dd03743df323843212f9ca18f1f1e30a1ef0559e9d3177da2a7def460e8c74a7ff340de11960f867eda0707b41379b1863c10cc173d17f234fa212f9c55f3b8e9710d41ac212814480d41ffa3abf42797b20f3df6ee516f2bfd3a06f7073424d598df3a6ec411a92110aea1e7bef3f8c3a37bfac138602bfd16b6d20f46f4337c38ac501817e8cfa73f5ff4dbdf50b5077921900afa9017c61a7a11f538ee42dee7f703fa1d1cf26ea820ef47573f5fb7432c00f79a177ae57e47efe0ce5b06b9c4a5ed4715c364b8cfb7ecb5e7626758c79f1cfa257efc44209eb29d6c277382ff841344a230db7122186c9c8ddb20ff1c08069bbfb05f47e4d73c3d13b6cbb5353c432e97941b2eadc904d71456b6d357786c5040bcb21d2e85345371290c654f644a42998bcf2082f6ef8d1cd6134470739b676bb647acacd5d1b3679abd6c75f4cbdadf5a98325653e1d2aa9abc6a7f2b48ed7eb984a8a1df04f9a8b44852639835948e52c39652b7869f63cf80f9a30bee4c83a086ea150424a89e469cbb433972e478d3cb3e1864ecdb47f7f7c3c020f7ca0ff77dac5781656d05b8b41f6ff615e8676f1f1568ec5b81a6b9bbbb979b9b8bc0cdf7628d3dc48f5e883d7ffc48db87747eb83df6336c7f44fb65d01ffb648f8debf61d41fd88a9e6c9f04c3ffdeccb413bd68de351bc05315cf2f78f1ec9091a7f670776638c31464dd334ede3b66d9ab67da1f6db73da16e316372dc6eeee66c36d62c01c342008e658ef4953d0102435751ecedd7df2cc66cf4cd3cc6e681b224733469565685450d190864605368d4ebd83d97bd00634fef66c17b732fde9a1eb0a67ed0af8d8a131f49cbd72b20158f46a7564c1711b43c590494854aa0b798486239984447121b9905cb04ae53a3af283e5e44c29041af64ddf4821700ee7f0f0e8f4f4c4ba1f1e5208349c73466c092751343e179242689c1f29c4a3518cf9b42071e0e2fb73214927b63e4e984bd88f5623d60e68e8a11f68385a71464509834ea98a41974568485574a5622f7b79590f832f5dab1515c0388423d60e96445eaf9ef1cf5ed844d13073c2a0b7aa3f334143ce49e5580c66ad393d6331a8d5112b7a3047b6cfbe9fe315c81d46ac51cbc553dddbd3688b1117cec3c7e8a667fc376f84d333feed654fd09bea2db7994374ad51fc50a03fcba4a021246874ee15b5a021a77a557f4ed5a6f8fedc6a6bacd81af9fe1cab4d194b455ded3ed0ad612aa4293466b4e219ffb0eba0b0ffece828c603a9e8a8a77a387ad5d18a1f7baa6a13f78d563de3bff117cef9a9ea8e56a31597bafa8f98702973c2a0ff68c5259652bd358252fd69e675adf6f76cca4b1dad98069406a7c147abeca533472b3984eeac0eff5e3955f58cbf0a86071a8e56aaea3285ea3fbfea8ff99c9476c6eaee248a0aa1ecde491550f9dcca8deca0b927c776577bcc0b7f681af63b18c4a2a41418e1688bea591db1aa87590dbb56f59741e8ce5f1d4e228d9888c0a023d668151242e387a3558ccdcb116e6578fba6713aa753ade9a23ca41768b3af54746dcfb4a128d2cde38039383145f30279de456a5116cd0add28d2f7cac3a0f167dfc470858c5b9cc3fbc23887a75392c73dea489ceec198c5a7e8c93032543c454f03f56a75c48f9f29dc9ed4d8ddf83a4fa8bad08b869edaf155f525fc890862d1d0534e7c8b3579103b6383357d56d948650fe2c90a5654a691a2ba13957142ae861e44e5946421c2ac8b98d0fd1cb0233484869efa14834b30c8aed053ae837dee2bef62a4781c53a833e1526a629f7da951ed2f85fdb29c547657e5f86d751e34cc27ed5cf4e2ca911bd41024af13d742ca70e2e6c479c499e2879e1327af48b9784e1cd652a20aeac4655634c941eac4cd0e4915d5090686ee82d545ead4dff60cef6ecb840723784ed159090e043de4f3f7f01efeb1d741e10db5de10e305a4440182390a81c6df6e66fe3c0f7dca60e9c18af7ee6eaf826e1363bc76570cd4b6d862b2e5fcdb98d4613f67ce811052aff8aafdfa54fefab53ae27f5c743f73a5b8fd95e911cfc48f1dafe87e48a30f1b7f77f6ddab48bf581d18f6cc7b52c5c822846efc361603c1d1f097237128dc091a2f3f822371278ec491b81387c2a1702338147e0437428f6710a4a19191891d819e9352feb4c0a31a468f8961fe16ba475c1dee2308d5a10559f9b985afc33e2d6012071ae3078715cacff1d323bca1720b73a706e297677012c37c7db35d2cfbf57ec497bbbf96caf65cd97ef38064803a6b1e10d600ed5cf5030c46d7646cc8038ee0a288114e48c13172460d49468048c2430b0b29372083085a182948b5681acc476ed0284910018a22a87001146490b164082dac9e358e14016709393c9f23a891460f4aacaef062cd18b9b377ef2ac075a8cc472a1307c2122492ec08c1c50f7c3885b47a193524557715aa3f0bfbae0a42aafa18dc035d056c39d4ca37e03adb1c0c82ddbd9fcc19743f16a19d15bab1633066d9fa8f2ec676d13041b1ba2a284e94a0a0251c9228ba1f2877033194b80225896d099d755550600006e82ed3dd8d49c6dabbddd77d334c66187bbb77776b2ef213dabb7dbbbdbfe69f53bab3bb3befee3a80c1edeef66ac60283fbfe3d0036237591492c9398ecc0c8366dfaa6cd4c82de9ad7d33377776d76d632759bbb3decb21dd0d8eedd340c7eddeab2d47da95bb7bdbbbd63c750a563984f20d28acc867ae06062f56a7f0422ab7f63b51febc0ee0b6f89c9b9bb32cedd53ba6f5d7c1efeed855d8e0ecbd4e8d576c340dd07f4e99a6cd1644ad904c3b0d9750c8934b5265846837ed1b61a390d8b71f3884da009f60102b732bd18a8fb80bc4f17b78e93a151818666c76705065798b3f36454da8a152bd77ddd397afb807187f4316c1f17be7e66d731249226b56e99ecf3de88411aa578f708d56943b3cf0b73a34c29fb30c70bf73e3a6edbb6b176766adce99dc6be27f7edead0b6afe58e0e346218b631c88c38dd73400448a264309f004149e5cf3e3cd801537ea0c2065d98a1841064643a90d1fb832a95dfe58d4f0d55a8417238124bee2c3f9052390a1de808edf40f825404d4ee700895269018c2c80e7690a2e5c0437ce22ac9684b683a9666858a6b45f9618e48ab6d5b556eae403d51014ae7090f3eb06085cd939c223a4f90ecc0f344072c60010bd693253db0b06a3d0163080b57f08c48314e439140e30228d8e0a25059a4864f73a8fb5043fa6408d1451445703950aeae2a0a2332608e05a11451fd73d0a89ad054553eb7597f86715056e0d2e142a7a7e0cc05bd779d33758f4d7e5083575371c39c04029fe72fec7efb1d1c72fc5ca47486b0fbcf03400f24d68e7a2d6ca5229187c34a1843a5dfc61ef69b0744d68e7bc871011f512565d4ea9021dd1e866e1d318a921894efa61018431f13e1fe96674206a2caaf4d3030f4873ef4d5d05f0db1c9132b38a71a6cd0ae589d5abe061b04803af5dbe029609d90803ef4379c628b077202e487bcf782760ffaf0fbd3dc43837f18c5608be435fcba3504dbcb8c446a83eba4cf0d086d7c406d80426d84a83b2f284d4045524a2912b14829e5e7b2b308896e741b2296918b74ef916ddc70e9641271b1688312915948263c99cba6c66d8f4d12a9bb6edf19cb284d3d12a160983b2834435db7dd32e7de55c452d7bd06ef952a6361d5f86956f554aac5634bd753e3a7d79b2c657169964e1ea1a1a75aba1bdc6198a7a212687c1a2ead4135ee462793a06b42473f3cbca77a8ac90b3387af41678e6cd114dccac43d2d6bceb852ca133fb149a9b2039c2a4930a9c2826d08f4061bdc16f453846e09fa7175395013ac688252277ea02c47a6a80104d7841a41362be8bcc201817e8e90a2120423a83ce96840b5ba2a2a2c2aabcd414ca3950628f2c4293cdc2d85c1293da572bb18acbfed22b99a0aead1e3d8c23a328362efd664317236bcf56c3dcdfb21d76d7563f3398d0620b3f2eaf0df7af3e2ea701bb4afffb1e79a79d1797548d91f258f64d181462c2e836273cb6f908a7302c90bc9e6e405831ad247e3d5821b2f22dccb7075552f1c6af83458175cdccf0e0d339cfd0ca7258c94990e97648d9f25a152e367ae296c8a3ae8644f1c414a8d384c6acc76b2568d99941a33cc71b81466a91a9758824b292e7d4604971a50e36f9819a9518bc8f5d01f19eb5b2bed990e6a9443e8aaa6a0bec8d9781127b038468e31f627c61837c6b8317631eec6e82d7f268a8631c6b831c68d5df7dbc7996270b65a5df7b3d47e61b644a99bddea3e9014900be4ea960bca05c5b2d32d908b65876587bb61d9e16ee604750be4ead6092c8e070e4710ba1d9dcb692928ce0897e272fa432e277e5c0e779303044c8d91ce9ee1010d297fc82636e156266471f5c7974268f3703882d010843de8c5257feca3c16bf652f7433fd010f46271c260a6245ba91894456896b1b0585a42a8fc908515060da0575440accc2344e58f12f4f2403d2dc8cab2434316160b8bc5093f77d3261818643cc90f06fb3dc9bfe134f903bd4054768a5c4025e901bd7468d8b579482e8c859a9be728af7bbc569bba795a41b884d52b6ec325e998ac2f4aad78a8d9d444a957b8a48016c216a0c7ca96e28298dbb4e9e5dd83752b0bdb25b1efea0c06a1923122b8950907a0aa1345f7b9dedd0f0fee254a0ae9fe70df71d1658c516e1e7be86e1f7737e9adec6295284a6de8f6994acaed777b6a43a7b6815cd486621c113464517d3cdf1466827e3d29d84814e55ea050a1fbd26270beb8a80df5ba363493281a825e5b0a3da480e25256670a3aa419d479449da1c8458b35a130c1a062d4f9b99851e75324a8f6da872eab14502eab36bdb4e277a379337e8eecfc97d60b14e65635baaca2cb2a8a6afcccc966adcd5c5ce2e11247172cd6f4f17c3c5dd4f9dd8747e46eb2cc49d6ca5c2caaef0a0974ea16a9d01f19ab6e2fbdaf87c1ed4bc1667e7f8ed09e998fbd68f8f5d4f9f57c575c557e8b4ecb8ecb6b6b3e55be0b152ec597efd263820d97b84a16848ea8724d2fad9d99bf55f9a19cad69a952baac3220ac2905d44b943a9f6940c38fa7cee73e3ca41c82862caa4c85fd0e8e91e2e3014d90abce9797168baa4e14747a26260a1a825e7208ba7d8882eb01f223151a825e753e8867fbf920295ce27efe4d9dd5850983d365c5e07cce65e5b28a51a5806ad3fc4c55e773a3e0c2ea44c1d533f3b91005579de14bab4e4ffb39b5cf65d533f3773013347459d59902aace5f99f9cd300095093b241a3f9ec1ed007c3882891d7c38627573043a240a4e0067a02abbbbbbd0022268d8a4a6a096b811fc86bb0e48aabbbbeb547e9f441852f93b229091020ff632786a0065082ba801a84330c308d59dc7cd68a2fafb6393827248e2eeb2554694d5a28c15f06027b278a9fe534af5efa49851fd476428a95e45f5ef501297b2536ff0f0493bf72bd57f05167c6c4d1c637e5284a8fccb599994d290133d7447a44057f0c0e17cc668ad601b9160a004064c3a1a6507cd088a1ba308452612af6d0c368a64a79c961645080fd84906aa1925081da4119e2cca0b70fc14831d2c4a133ef4c9884a4651826224561e85c90aa2112d235c340a182ba045a0ab9d90a069b046a418248071a305ac699a1290a05a420150578584233624d0afab42020e5d1114852859a0718510683831058d263628d01842070d225ea08142c32656faca41f51f915c63bc9a6883f322167185739eca79cedd91ce8644c77a9a39a9045303cbae90f2921f30327d051ffaa5d484a0fe3c23436d3051051355b4c4b216ab99c3404115c6903d665bac4809eacfb9f698a77df6690147c5b22deaf68d7da19cd5b1fd0e8e4a6818caa9dbbf6cbb3ab60fc71ad435ec632827fb5235867270546eb706009f167054f9196b6b70a050e3ab474c9538a4fc160555f370d9c708b2ef30a8c36033883f9859454ca8efb80e83432808b60acc5fa602839d6519cd0a0c760ed7f12498159406a755307fbec320d8998eef80edd9ccb22ccbb22ccbbe797e649e49af9b314250703a587bc6f5cabdca7e829cf94f4f1ec13e62ae6a2e0b6e7269270fed9f1cf7ebc9385c01c098c2e6b432b46350ded01f124575319136ae2538c73506c7725159ee8c333824705cc45c08755601650681a0ab8b00850a0485ea2b7524111a663a9de93433c85f7ab1eed6ce9230c8d9ce97e9d87412380e5bc235d86e73941826e796dc0c7a058dfb72bb0a1658a85458f0d0d151a9b0e09193d3d383050f89050f4f4f8f0c5288142299482162d475ae8a97119514e3bbbb7377777777777777e3ee2e1645e4b88b496f1548ac847dd84b190b1043f815931826a5dcd14cb16f7f5daa7f40640cb0f5300cc3b22cc3b2176cc48f51e60e63969344cabef9fd0b4efc52d973e86729a5bc8185c79f9f87fbef588d0e054bc80a88ccb59fa34c2c40c791ef8ca495997ff908cd0e1e7d414be1f7b373fc28831c4e2a6b386ba8fd936292277d712981b62cc1a62029e8483ffde17144caff7c44a2cf8efe78f4f9e3c2925141df0c9fdfca61deaef102326ce2a785971a5a15415922d1872da97056d18bbe503ead21a7fef87833c8076d3e50d94f9f6b0f069e894fe9e7230bca2da9e50803833e188c0f039b5cd53ec2ae87d7cf176231a8ea1094eafea13f0241aca31779b12e60c70e061b068e85a585f3b4efeeb9b259e0a64d9a181514e2662751b4432d18bc0714a725d526ed5b765a9ee012fdf8a2e77ab6a767e2733da15568257a6269e6a439b6a60654f42115795b475eac212fcc6a185ac996548b0d6afc168f85db96d4d6446075445761134217c060e4384f8b2fb8920313506dd23e827842df12bf45676b441fbf250997d803551c415c350cad4451f4d1296848b917799d14b4496dda9e5d155a513a8a1347a4bd48f4346dda5ef4fce1218a128011bdf6379c3e1f0f067f2d0cad4435706abc542767d11701ed145ac91818d0cfcb1ef9312fa09f97aeda3cd789212f6cd9094db889009f7c9c41439a05ec885b03ca959bcfcd19b5f821169736e4a49b78826a26d8f44cc76d5ac76d5a134c580cc6ef3e86536a1db769b1326150c56054c26094407f2c80bd7f3030780d379c385742e587cb0aad56314150aee18656ad659960c360dc534baa67b029d4556de2542aff9e36715fcb36a746694f8def49e8729cc76d907c6770da6c271fa33168d8926a49c56fd189dfb2137fe48a2daa1a5b5835b6b46a6c71d5d8f2aa717453e308a7c6514e8da3948eaac68def3df6249a423ff217d296d48bcb6f887c03673355e4efaeaf4be97dc2cb95d2bb73e066ccb26fc433912373153e67fc1d1c3f18893d0c5a3cc1c8ed51b0c90f06d3b4978f022472d31e0548fc8361d3bea658f6edd819feafb1ffbc0080c5e47f955f38c9c0418b092a86d8220cd629ec6f051a156822e6030d571524feb6699f3f6367429ef004a5377e41f4b75946cfbfc30797b2978f012e69cf39a952864b6f7ce11c7d21583fdff2859fe80b7da0ef03ae942a3fb9bdbfa6691fb5f5b2acab59f6eb81a0bb24b097aa27581df2c32ec116a004ab00c6a1caf7a87911882a3f437d48b03ae4c700fb92a0fefdafd337603d69c0ad4c88e5548f71524a22fd8320cd8721415731b4699b19b0edcbe289616b3609f049faaa4df2a3e9197fb0baec9156d6245bb2676be2937aa043240ed53ff324c027295b6d9a33942dd9fa0af68c6f5f38b3cf77a05c1c41d7d57a7457e88e6601eddfd511ce1906db1443cff8fb8cda871d1157adf9c7d0fd3d131fcb9156b8425ea2b6b814469c1a597c6235e2f354afaeaa474955f524a929d455ad31c58b9b7a80ba4b9c40b1024465716955568870bbe273a1b89f175066b1222a24692217868440e4d7907598071afe18d58ec11394508ea99d89aff3da51b14d188fa05837ade83a22040de3111abc1e91efde479c48049be4c74ebc58234ecc89cc129541bf79ec1114d5a656c59b56b5c9553164d6ab6e0c9bc5ca82702b137239d59fc311847aa68a9fca7b40c34cc53553b589dffbfd331697b8ba2771ec31ec69dad48fed601904cb321583ce35cc5435478b1f357bcd0b47557b6ece656d5773f9e01536bea6c519490f626470dccf13bed8d172a9a8fe1f1efed1dfe54e517d77f7c3e75d9a287949fddec49c118726599665bda33ad6ddfbb5bf8db14977b7dc6119b127f1b868e8d260cb01ea2f1fcba2a1a1915ee7c2d759dd5d62f1fca34ae7189ffb23c52fe8fc90c61fa31abf968bc707377f7345d3b5e8ccb8657bd3eeb946539a9de1a795431a1c5728cc0b0098a1bf86fdc1b850637f6095c1a2f41046116affee60eee2d758c272811a62a8a0ca89a9340065842d7218020f6c10441a2cc3ab891554809103173f9c18093ba0e1a460430919b061847413d83042c3c146aad9b861c3a6864f837519343402f814d64409f02f03e600737cc454703a43892ca0c829220934706050fd0bb5ef074d7577770fd5c066eb41159bc55440c40728dbcfa76ddabe1a8eaa1399d4884d75ed833231c93455a860340ca9428732525beca0015661a3fae7a081a9abaaf2a462755555baa8e1d7986950b65d57b86b5440fc69f7eeb8efe4264955ca5fae7bd3324cb6e4a4dc304d868830e766da625b47ea999e19ed9996717560ed5d1759d367cf34fd74bba63967d6ea1916cfd04b2c4b552ceb342bebbb4eb14681ca17d1bb2fc277777729dddddddddda574777797ceedee218c57299d3ee1296d328f4bbba091fbebe813e734e94ba0f1fd5986d0f8f21329c17560440d0ceabbd9bb6733c3aea0f1b11019beebed3de787ee3eb3afdddbbde59ae6cc24a645675c72df959815347ee7ee180bbb62bb3f56b02d9ecca8a46d5546452b158d8800000000c314002028140e0a8622a140280dd5791f14800c7b94427c521b8aa35190c3300c4206114388010400000c01a1a1a1e10401e983ce4a612bb7abf4b571a5eadbcbe7015879ffe8231666ae0086786053be3f38aab5257370cec2c695011eadb50640a97db3fab45c2045cf27117d8e43aaebf24938006dad624fb9fae99f6da2cf83e8583bc05634c1bc8adffd1fd4778e22de9b3d992d02631d5616977f525a6edab730a66003e5237e1d81414fc48e7e9d0e18728e5c718bc5edaa06bb7e23043d7bae8773e749086211280532662ecba64e1fb9a9319e8016e651f525ef0e62ecff85ad35a7eb5d14cedcdd668db44d44352b463136bce7dd7b641c5bca20481af63947911301f3e79c234e011a746a08ca48b171d2a0bab992366c55ed6151514ccc429fa8d3d99a3aa2dd4d1a0747d6b38790970ed1400adafd438c3e8e7fbbe1a172cb5aa5d3262b86bcc46a8bd548b5c037f1f04808867c92ff89fc5fd9d0ddf096d2ced9c33b6f8f038c5f5592ab69bae8881d1a416198029dc8672db87053c7c3aa30f90337e990caa2482ae7c32956d0f88ecd735a439e8f2b9c2853763b2d864d7b69ae726e2402b0fe968c5648e0378c863c37cda40c4fdb06e31a2e922da6186fbe3c0b05fd7282bf0f32e519c9bb1e4db1c9eb1a4b2cd74c0e8816673def172df64e8828505cab8fb6f9d44bd584221146948c9e64ae6f1e20e933b58825ab0939498fdbc91a7597a068b97fdc9137d6d2a3cfc79b1338f8fadb2d1b714a1309ad6cb366423df74f024df94aa5f2dbc450b1059f734962909002663d22399265f405177194a46f26b1347e7d189b543619d296f1693a600fd703092ad935dc1610e0519230a94dd80b54117bafb884a0420588997905b7a7fb71025c688bf6158ce3bed5899b8847f67f9f3b6591f2e4d66d58c30a7e0f47fc3a8b0b7f9d21ef3710ddd035999d290a6019dbf12d61c2c09446315b51571778d51b72f3336acc41445ff004ce046a23dd83f00c25f0402ba6bbacd4db6311109d94b302d00437f22dbe635a07a25a9f4d72e622cc4e640148ba9c39d0477cdb3f467090a260dd3b8fe4f73995f8181da62b96c74c913a048dda5d6ebdb1a412e2196ba7996b592f24045ae40deb859ed3a108a884e0868fe80881e46c32ecb16e576cb6a2d57f827af8454260f120ba075f2130b713e97c9588be24c0f74820043265611c30e8ce6ef221f67171a861c667d66db6a671571a4d7c8976d8cef2ba3619d248d6148b64116c7573e572ff81323fcbbbe9e969ae8620c0b14ec4cefdddb7ce8cb5fc61681c1a6df5e1a94c0a3bc7da83422ab25e5d4ebeb1e463703971bbefd202455f9d2decd6983216f82311fb0c1662e62c3a08167790500e344e8cdfcdcfb01629719df04811d8de3f1f2f42f5ae089ea5b6c8e93722d424740a23a92f85a34088b310a560ea1aed6ab8627945099d3969c70d2113c2400d1ce03418302a5ff7a094a7973ec890874050d80ca3bfaf0de7e6e5232610143cebfcd4df05c26fc7d2e9be5db5a7486629f9a529161f67427adcbd0d4947e1cbd83bf3414482bd562c2614d2eb7c119b51a94380502ab7987829d7d08afa3f3069745c96c3e60a239d63bb3fd1a011e684e4c99a524749c56aa5ebf023a7a0084b2d24b7c26886d675afe3c36bfd4b515591be86d319b00d254d3312568041da42d69f4e598238f5eabb8e224c90f574e961952e927a42f37d0331e22943bf67634915179befb1bd85e237c937face06f4314109d1e51931fff3cc015af25794d3f368af97addfa3d2c0729f90fae10f62cc22c342999243d1f20c43468bafd77d67850c39155ab685374f54042211e42f255e6c36f1fb3e919420d3c79f49f181ecfa0f9716be10d541736f5e950d8030bf7bf92ecde92e77b184c718450f22329482cefc344d20fff924ae289e0ce046e2478c8f6aa454c86b09e733011fc0d506464d04ab04a7e03a2a9c02406ce431186d3a655539904e30ae73cdee548781ce5aab0c0d87fdefa532610c067ff76d37f2bbe0fd8231e014dfd152580a4e1d1c84698eb3cf613cb5ea78e32c4cf3b101649096efd3439a946e7841cce35451f012d13f5c433c80956fcc4de55653dc3cee9cf84118cb42af4c9e48fcdca52891331ed8a91baf49353457f119380c467c13f27a974195a2ec5a8b190ba26ebe7264ad7a1016c04f66bf1200b3b6ed7e38484ad1f16fd8b72c546c025170668a1f531ba6a05397cc157d4ddad01d7e8cf4068d47617adad5fe3eb552fc22e71398cb824a888ce8c24e691244efd2e8d51f0709af78f9e04e17fb5fac8e78dfc85a1bb9718cd96b50fa76e2dcb65482af0d771d7dbf2a6ee11e100e45c937658339c834cec723b2da0f29e2d807a4e11c3bf5fac0dbdbb6bdb9d47a2376d6c9329c9839443c69529e2a3102193e2191a43413599b842bf1ea8f225cd201ccf1c6f005cfdbee4f91e106560225b6ad437135e1f7cd075c4ab8721ed112fb6b7b1ff1e8d22ba7a5a7b8e65935b0ea13b71f5d17d4618600ecdde294a9ef2432c068ff6d21304ef9fde2dd20e039cd0adfa7649afb03e4c9f6b8fb6d53a1586490d2ed7c4746615ef8eee200e532dda1ecb58ad0544c911fa46aa7c4a191fe72a3b5c9b093c7ca18221e4c39b4adc7f4a6f448af8921f0624ef2f037e98beef6edb94eb1fb66017d54610aa9c32c4bf4e05d1dcaa339f8dcd8ee645b5605a150c2c5bfae162064591ce2d5f57fdc288848b25f8ec3552cbf08b4d98f0e6f120fad2509110f1153070769e6617409fef9868b8b538a953f6b9a029e61b1391af099489a927a1a60eab2b2693c38ba8f708eb8a0e7e6887e0d7a13aaa40824d73fcb3875fa0c0dda95eb9ecbd715c5fe46017e3d2f3b3f3d2c99faf4a27c08662949eb81091eec0520601a8c3f7146781b7e32cb09bd2dec205655d05586a07a3f62806a870a466fc3e9cffaaf4080bdad0a6e9cce0dcfec4b79c0d7aeee25ed6a7464a130f1b4fc890aee223f44487fd354a3334c6aa031af351e30f366cee53610387e7476a264f8a296cc0b439023b23d3c954736444ed528b61c938b966b0d1861bf13557be668db291fa8bed60a537355fa2645a9bb3d05f2fe771adac4d3c25384a961b424fb8086291edac3dc3fb1fcbc2c7f5b91e880715bef623cc7079439f8f24de79009efd72356ecdeb65f24fc6fe8988cb80bd0c2504873231c22e18e590069143ad198c7ae545b3052e8af26740f34523f3a7ef348cb00a8d5f94dd3db892b23bf4c96790a17f8a191e73fcfe845a5a32ea5cf617c6bb6ace4c2f6e0d967bebe8050590a24e8392b75b3b297497463e418a79ba8af6af1898ea83aeb9ae3342105aed0a1d528513182c1138c5346f3f7c5732cb0be92e5d764c04d6059452bb0f5035d546a8a0354c0898397a00894461c3ba3b3a713d1b17cc771638e23a7e15b4ff8b529dce4e6eb8d10e9485a399bbe10de375ddae7f9d7d3b51ebb2a3da2dd8b3d78948ace0aefb7cb6dbae464a96faf2b280d16833d355ad70a426c59f10ebb1ebdac95827fdb50e9c83d1295b0181a3a25aba61a41f407dc1c1d53a89bdb570b854def04ba892110794dd3557dd51ba752f47acae29974429b495c0e7c71caf1b75f36234c5ac932bb32663b433f9e4822f8272f0b126b31f9995bcb10db2614d54a952e0c2a53d8be87a20009643f208c012cbf5f70b5b3c0b416d8179442b7f0c06b49a47bfb4d383a0fada0296f5b9592ca44ddca15fa1fd1982e61277dccb7d6de92aceb39878041988da1dbfe7a5911ac4be44679757d71923d3e92c838bc548018afd6828035022487fafbfe0fb6023c2d4067c77222621e8e8450fa36b546071a28d4def58309ce5ef0caa0f586230f05ee9a76a35348fbf18b1b8092b912765fcfbcd5b735fc9b7130b9f84776cbe5d5ac753b337e2a132f7e7b81aff8514becf81128417a6b2fa618c16c58b58163b25c72a9402da1b2ac4ec97ff4924bb392e33cd130ed6f87c53cc9796493a497df3c1bd7e818333c83212f92b6106ce3fcd563a4f00097d5c0131548348810b3dffd4bc545a3106735c9849ea51d4e89684c85912748d653d463e7331c00c429c1528d3381f397a776cb4185e1bd0da327e429e38ac727572b5ffc99d4d14a4c50cd452982d40102a2e7ec569ddb32b06e2e461ba198cf9160f8569b6d7bf886d6c4534a90c8c359b16fb8a5b0b95313c6b3ec754a6d71c3fded2a2a34c3422504cabcaa09646cd38d88856ecb5a4f6bcf0cbbc8af96cc49b9ecf37fdf733852ea52f2270dd774c093da7f1d5638f17360271e82347cce777595923972350c4fa609a666dcad1ab8ff5bd5a6d53728a7d96ad6dfcf6b62e2ed387a6ae846d33f4f41f746bfde5eeb9ab98ddf9901e4eaa19d5e2c7c3bba841a2b6d1ebda30d9e56aa1ce3440578f9123dcae6de9d38ea8b663f720a22ea795fe61d83b525ff0b4e09d1365807c3b342a400a587322e7a2df44f39eea45ec199b219f7e42c1a07b81c818ffda263c6546db434eb16e46ee479ee718a76c70f1a17fd91c50809ba34afb264e2cd3f3b0b67ea3b2e6f8552507ad558587d3f98320fb0d15603a85cab8e84c507a39f6ea6d52cd48017fbba7c6d3979daa97779c64bb5b14eeb1a43ad55c7814db431714c371b9a02217e3046f707da3b5292285aabb9c1681326424dbde4901a1269bdad18270f48521f8d627161790ed92565e55b02ae603dc4d07e844f6df358ea1d4018712c737cf467bf81ebf2ba1c8a0f891d83f2fe236cd8c6825d6cbad69ad64b8a30e6a64daa5596cb7d6164edebc744889e31de316322b2e5bada3e12eb16702e8e058f9f56c0034fd6646094aadbad86dc0f1c676b22ee7ff5cb182932d649c49e674140925fa59b0fa0fe2512ba3173426b62b0e062e54dc82d4de7b18f59ea364a44eea86bead66ea0d4edb8d36bdd72da5a0cce07aff9a1e1c6baa45848391261f294c9de95b90678c40095a0a197af1a49650c4b84d5ff26216fd90bf045aafbd09e21e149ae844745328e38635a1c825caf8b616fa76279363b09b0d4b6b3656dc76df3906c1b2699de32db3e41f234db3f834ed7869ae4cb675a712187605c9077f3c8ad8e96a98cb3c527d610a3ce964f739c205af6f8d52e50f4c66cebc912716b8e37739270f244c74e68a49eab004c3d27ee36fa3a10c084902bbefc7782fd0a94917ab34ed1131240bff2ddabda8d68217547257e39a4806e4cd82f4e158df5c701a79d847b6e931c4ff9837dc6710b929915bdd0c33d2468414ac5d0e84d653bee59b3ccfd9f7618419ff68763153020666a7aae1b6caf11103bbb56abe1995ca62145591e288e74e6b2575eefa46735473a47ae0963581acb042e176021ea84cbc9ae20aa0e5043da79bdd74260b20e4e3723b3778875b7ce126c7bf9e2c515d6aea2a5d0575db23515af83a76d2acc32674b8a0e554727d292c5348996cbcf33c3f1890c3f3f7e06371de462d29d8da90b6891310d2ed5323da0d235fe3518ef135c750e282492a1681da55dce8ab7e8c6595c5ee7dcdcae66e200b93e1c3f0e39861d0f9ab1a464b5e4a352701fea36e854728547420b281b95a52375450a6715d2a8811e698ce910403277c1b19a24cfbe71aa8ea8fd5d41219541bb88eb82bfbe3cb1f16714c82d7e5a6ed8eb16112055bf0d722bdb595672558b4c3b0f8ca8878f1a8365fb554203a7bf62f2cf2873eb642ddd04d15d7ade6aa728a7f5a4344339896ce6e2fac5d8db613f6c469b0a794bd402aa86ebf0a3c3b1cc6d7456a741d2b5082da36a9bcadcbe1f494df4d23820adb0325b80e7134b35946dfd4516f0fa8ea8a511c4bad8af11c656abcb1b7d8677c56f56000f46565c2a392da82c07f09bd702a4c0a165be362b2320ba9060faf2140e6414539e923b6097a79337861534f426b52429698e3757634c09a89e3c44027a27fe08854b634abe7dda607c8a725f1ce5ce61bbb526a1574f2332c2e91e5686d094f06e0ea255282d48566f548ac841a6ed628eae9f30a7f348b5798ec716e1e63e146bbe04ec69a5a92b70691821e4306dc3197fedfdafbf45d60a7d540b7dc06983562a254f91f3d971e0d461838c4f4663e5c48803f7ba934a7feefc92df8f723d771af2881cc0044b5182b1f094692343589c5c3ce6266b719646ec2033452631fb81ddfa735cadb7b5fb06e4c1ac46b238362c2f74b29161092031c1ea93812d64392b95ec841cda9f70e85d9afde7957c8c67c1b7ac622276d091f163e318de860612ace18ac7250a22dcb1ca3a6747a9d6d577eb625cd0d1864e6ac8bd917a17b9211c7e6b8cbe0b1601adbc75e0d37437e1b9f6fea88374cf954b29d057c45c1f599e78788e96debd386871dcf6e3ac77d3d952499c186ef771925e6c145b117b2947dc579b68852680da0cd5d210cc2dd92a535bd98998dccf716d512f41098ad9dfd6bee39c028ad516d4b864a352130fc2a390bc2ce6e28082e1c5d631f544ec6526b86b10a86831662bfaa3f4b6fa8e6a7d078c0c6c615761ad0610615a0ab913901fccebab4575b6dd5cdaaae089ac29779e3e7ec365cb43292bd57b18d4ff63953331587261a9a43628c81633da2c6c1917400293bc1836fad3d25cd36d1e4a6bb00d74134c924aa50e47a0d95557059560ac886bdf7baa6011dbbf4fc52d830dec9b9fa43b49f593d412e885b8e762b7871f856907ee0f5f13fb96566ffef0d718066111d112a813fcf6495e28f86b1b27fab02ad3402f7e94db45fff46e04785068081d15258251248b59ac3b61a8685a457a28015e3a25f3596b2f4591cee02ce02e55994066a2952dc62b0d262d02673170cd3e668e706fd68ea1bd4f550e6883891cc822be931693c924691d1c1e1d4f7d7f41723c1734502a4adee28618fd37187cc9eeeb3769885db90f15077649de0ad8004ebc9c7759ae0b1631e8b4342c45013b258df5ad9a70004c307e4b416c11db374c206c4cf6b138e97b6c8f1ed696881f03a4d929c8be5910997b27fd6dd0abd1c324c8b711eda062958e807290b1232b35591edea0458ecc2930c808f38f337d8b7873d07de16e1926859cf88397d263b74f85dc8fe116f164fbd55c7c9f0648e1efc661a58a182a41000247942f93a333a81d70b46f1dfd4dfaec0fe6e96df77318443d636818233b9a1aafd8a0918124f3968280b5e8db6d68d5fb76d0b757601591861859a30b41f7b864311dd77d64ec09e52b8a6200d5b96483ff1a08c64e1abdb53aa4c189bec174401364027322b1a594c4171c011fd9acbe685d13fafd1155b5d3731348744189c34c5a868ea5034d5ab76124a44453e7ae94e8b716648abd3313f2245fe75a518790ee6bd860d4110b4620ef99096f29bca515ec7a8a7e218efb24bcfe250e557a1b160daa4e839ae821299fba3c346e181ba6ee54ef50f62218191c2e646110c7fb9552613a754b6ef50829eb2c7acd6d7da258b980d6b79c68202992a525964545cac668f22201ccec1875d17c5400f6954336b07f5f6d9448bb4a56032916054331e39ff222329fe615d63d029c43c95b5b776a848f77b552177345d3a70c51132182a70b93ea3a35b5db59d93a874cf153ca06250b83d4e85ac4fd21f48f1d964c003d899cd06e67d868b910092b56856fc4beb8aa1d048058def25e544fcf0ad42edb2390f8d8b386be9ca38572f439313d554e0a644d818e801293250a5752568cf06bdf9d403a9b2581581e2b2620cef6817e2513d9d236062c4c7e71d47a2cdb96e2ae515b6138f6b7eb878da5f8f77bc3a47d40d74fa1870786a6d2d5aec1881e9ccc1b5b5382c61873206b30aa2de3b1cd2946eb9155a11eb75be095605a36fe24beca3f46dbf8200076565936a9bd07318ef951a56840d2760b5d3f06f5390652797e43d1804382304ca9cfdc1a520d2c6d16470406e7b00f5c1bf2ee865e265b57933c07e7ac49333b57ed6d2e987bf0648c3bebd10568f594a54fef63bbdd46ae06bea6c02e1361b26425dd313653747476642519fbafa0ca5c619ecd0d8d30536544bc764662ff785e47da3df2824bf13d3124000d93ac62b01e378b39e44339b14cb3f6f19e8de21e0db5d25fdc9f6b5425f0de23f7b133b1a0c2796081547af54364e5c780fc9b61b3030a368e0f0742a59ddd5ccd2db189427325b4e6108d824132fd0a0b23fa5eed64c0154de9447d8081e891ca74063a0f1c6cba14c6f1d01b72461be709b4225cec100126bb5b8cfeff18490f953011c59332fe5002a225906bd62bec6cc01ba57bb67c947405928ad1d409516e6cc2111a7f4b245ed93e33157d7aac60c29f5ac566a04a28d8ae912095c09e1d8a717195eed3400fa6b2a33857c25430d8e25cbb485a7734f23decfe4cb0136246d696d7bd5a8f7cb27d9e0e9f88e3d38e217f0932f622aabacbef167c12c5c2f45b577e565371c1aea455600e61d7746785dee841877ed4ab20ce73191eb755c71b1b5e87860bf360fe885172148413ed7c284c178886462c6c9ad96c36f9d58a8ddf4e7db5ad1c414036d614ab6706a055bb10b1024ad7b0ba9c09bc16855ff0b6a066a04116da4bee142b273415f387ad5ab2999af931fed38d15a5015c51e52eeac9adc4b1460e10bb53430db97b4c95801a6ee0064f9f4e04cc9348f17849ca2d9bf7fa0e54eaef7573a32c0759844aa6d28ee7c5ef3820b3c29d312e928793d14a8d767fab1c6cf70124da423957d6998b08d8e70fd1e9acd0448d62c4ec4ece6943059b5c311466988aac91a2a6000e0cf33c32c2ed938b24b688a4f47ec8f9ddde2529d0908db7ea33852b9508ee3df6bf4bafd63ca58c212c3b7c9c5dab7ee926103b0ff86755c750d42554a784b67cfab4149af0e84147862ecb33f3c2d4e6cb6d3f193016d57f9647e9f72632fdf109a9a03e6f33102644f2936bfd32c36132e3c732519f94f183439145d9aeff32c6b33f1f6d9ddf2782c7ff7cfe8315a58d583bd1da523b74bc197e425fd347455781657d21a604ea2d1c6a61498e7795011fb7cb9c9a0582e61dc235de60aca23336dd7c3919c8a60e40b2278759087bb27764f8ba442cb286006859b88895afa669777c957970595b0634849a644d3abb20743687f6224aee60217e063a984ff0041d3cd96427aded2c134c177835c94d979c500c7ebbd45c7e298c3024e87f2fae3cf9b387df1aff2debc4c36266a35abfafda06677ee4aed45ea1d162ea4b07ffe0d896b3251f3fd6f8b4ae8326341c22c80f67e96f8b69a2605b85f9c41aebe7c1726168061f9466f741d8dc2c2b9c7419afe0ad1ede1c63589d7ebf3c7367cf0e989410d99b1cb864bb89e530cda1fcf48140603b4e951025008a02d7f3f9fcbddde94c04116ba185ccaea1b612aa3b4e455c6a4313e25d355f1f19a4ebca2e838295b115369c9c29250f19602f14c6b0244e4c3cb24b2ce00c941a8041e75fda9162cb1ede9c952250f2e490f1d9ee8749f6a125c14528a91335c3586361713873f476bc0e95d9c3e63185597be638b303e0dd98410ac0ae2123d103c86f65a063575d65d966a1bb4f3989255a66f416e4c24fa0fb966400406cbdbe6f5c5e0cfcdc27aa29cac46a271ab15ea0edd8082bc2fe04e96a76b8de668367494d6faacd0f599f49a1b663b9b6d788d65b2a5d50806c2b61f14ad00e7109af9ae52f9e1a72baecc97105978cbccfd285039611c331721a1c5b03ceefc1d462466cc4c82b7118388381beaa33698df33dea7705a72313a0a11b1794cfdd34aa5c5193ae19d430e266f5d44b75e90d8687c5df4330b5d85a7fc2333b1f4de42e81f4010680e685460ef1ce6a69059c23cead98e7389fa73de605378ea7be2081e644893be419ada6587a5c49e5429ef3c71f9b5db7274a10e5d6395b5ce7a840fdc46a1dba8809ac298c9ae2fce712afd061268584647a2898d835c9b46a0a12313a1104733787ad0c5d6802643b91ff62acf2c82d77ed5132ca3285625090c1e8dae7eec8c7de3cd1a9fa2bb18e2fef8e027c81c605442e72202d737afaea1c9238d1c50e7a9521401a9adab010825ba62cfceaedfcb5caeb9f21d40698a7d1962e7ce6d4408558f08810790d35b41d08538af3a405f1c74c11c6fabc5a1b7873471fbaff66082cea7f23a77f0ac8b2750613001fa7b996e2506e68ce1342aff3707f7bc4121f1f4836702d2f9c2f72b0a3c31f12815bf6d85abbf801a1e8f0872c3a15949140dcf51aab5161b952f270a767bb4028b4355eb3c5df3ea566b519fae499b336dbdd0034d27e0412cd9bffa2e104e5ac111fc0af6829abe99e0dc69ace021fbde38884de330553da831f514f9620980d53bcc89e6fcb3f7aa069f7274e4d1fc423c3192d0762f3026d8059c93268166a3ed3226d87e8cae95f521d717d476df19c6c32b517928a497981816204b4da97c49a43d0df781361e537597294c62ec21b80fa33f0cf943d490cde9fd8caa75f047cc2846a06e3b0590bc61317cbf74557bcca8c5c1927917fbfe544ab58132483070fed596a803f145812c8451e061a0fd1cec5be1e0f3ea6a4eea431c73fb42b3f6e92cd8e6026e1c9e1d4f63b5eb577cbd1c4caae1abff084adc201354d66aa480b5b5ac09de92bd7453364b4d02e202bdf9414f209319fb9783bdc67dbac2a279d0841840224fc9f36e85ad20ab3ee48c4f727acca6d90c5e3e08e7f1c0d434ac31992067e52589bd70baf8f2bd1bcfb4cd05872ba2b8115cb4261c5d4f8561e99ea37e54f3b5628e0eab2c010a4be4d4e092eab06202e01b5d9fa330b80bebef90a93601529de5716a3117d6c21553cc7831f5d625c930af459030a6c6a6f19cb629730a10141ebb17f079a22695cb13b7eaeca37db1fc789c74e5dabf39d6f3e241bd10366ff7aa30c0adfc24ace38952d022c989cc49f3eae24ddbb76bbd5258308b788d5b514f1f55408c1a082f3228999069891d4ac10c4443dce6bccd78e2c0f922c021837a8fc394fb3d3dd276ca5761ba6992975a0bafe0921e02059bc8af0af858daea96088a5d8b705513da8abe3e195ce4e735d93918cf241bd939dcc29b0405342e14138ed38395ab5b7f11f47c2058611cd78fa78316230a44a318ca97a3c62ce9f51ad3567f5405537983805ed53a43263f8258a5c9a4bf4193aea2100516212dd099a17c8df11034c1c5799c2c3bf58965c0f698f2eaa5f7112e8aa3406fe720e24d32aa87623608bf199bddb26cd1ff61206386447a7ab103aa8533f7e85d82d8774d45b98490c49533b533e4fb07337c233c8b92713d60a399eb8fe2835fbae799ef466705fb509b1685db18a03bf4aeeffb3b8789f41fa07e582b62f09849afcfb38308591b8d039e06199bb7d379da4e00e2ca53a562d68f968b65f34848dd90323ee0b662ff43d96a80ae1836bb5782faa0ca1a85d764cb0b160fb1e52fcf4c9180e9918d0f592390d22d15c02e13b4f479c5d5cc7bbefc54516a0cd42c5b5c321fcd2e4f2342f6c2f23e372e2870049a4a5c34ed31f9681804b87f4a0d9a58382204a7cea0340052b2e04e79ab655b2c33e439aa1eb21440bda954b6299ac24ea2c2acec0e7a25fd946597a417b6ceeb362445101f3c1aca876831b90ab82f7c54f719020c339d4002dcabce40e53a0885c8ddeebf7a6076b20067d441abd189c73ca658d03b0ac75b8eeee3c0058cff9eecba2bb104f2dc58aa28de0b948f70d766c2bdca580fddab47c956f2ee0e7320c0f7240158e0a47740cac8135253114c320f0bcb5dcb0d255622bb829f1d336807c36d80300817fb4bde85e5b8ca934fc86761569d600868172fdc812dc691d05c8771a4af19205d0b2208a39817cbd4f27fd5e39654672c7c3dad964a4ba81997acdaa0da28b09d24e2edfabb076ea51a57db8f62d5856622aac54779df9e772e1950e7760f4c6a92d6097547851bca91341e00083c9f4bdd38ae9c0e35ee66c3a782c57a33ccba9ee290cb6d419028bbe604c94e5b3376c74c8674315f677cc3fdd9c911135be6c851c69a849b412aa9431b2df2c379161043b07958a2504981216c88c4a19958b24f12505ebac44a867e372b25564c8c6dd2bdf4107aeabb013d905aa9d8402e2f240c71843b3338d51bf0fea21c56384eccc21d851265d5b153c629fb42d61a7c44acf4a775cd51cb542092f1a7d277c0a8ed8faaf6ca757907baf79c4d27bc59dccab6b8aa013bb33e935aac0297b7ab84c3ef8424a0483a0514c666d4353269f1f337080255f4f6988711e7ef29540ae26fa8b6ea3e426b7fd1fcbafe8b0b9f8f32df2688fd4e12dadac434da654e79ffcdc7840f941ba79780e1b26eebe4900f90e568eaa00b4190b08137781db84e2f7e054b622d8947fbb61d9110ab1fa869511c3ac8fdef0ab9849e713c3afa2698579f5fe3fb00cdf675d01097db1e5e253c9ecf4b8865f26020b493a808fcba393e7639c1ba8823dd8a2544535ff8f631fe109b6e93e2ab866abb17d2facec2281ef5a8f44d4eaee616cc86e898821961d5c087ff70cb129e21d1ab9cd0bf2aa5f266a7db9773fc56941e7bbd0e2fdab9294b0017607d546ef1f207ad150db4d55bd2b692a6267b60060080f3a744d370d865a551f622f4cd33f30c41e4fb7ec890af5eb34833e2625bb6e6c6cc3731dc9454b6649992891d02b37d9e232518f9be80964a5b5f507d48f004c2572b691494912209bce16c6edc8a72c09384770937090c304a3de453f1068c5de2a46f5911e2e65b263beab8ca3d21eb5f687a182399c6dabcbbb5c7a606f61cb1ad273c12ba3193f6a3555b627e9267b7c8d54d4564357096134831a58b456c2f18759e5c30dd4f27ae12419711f06fed87f5e6373a97371addef54496d8a0b0c96f6ef3dbfd8fcdd996a38b5c28144ea25ab65d120b50164f271481de311bda1f0adacb7099c20b8f1f867ae79e7d3ef0989b95c00200ee8ace2b262f8e8cb24aeaf79236283d16a6046ee47d60910dc6dbc74986157c9dba197942cf88d1a4d67e834ca082254c518b5ace8e699d6a27830a9e4598b4bb8b847e443c9167cdd3d5e215d1fb87694655d02026bffa14c702070a35513ce47185dd84bcb2ccc312c86b138fc017a04047ca3ffa1cc1e04b0471a7df0cecd238f8b61045b5b7b85b2778e44c0400d26bc63e793a5e56dd818035414a8e1d1e9c20448b0285146a5ebcc8b9ff63fbd1eb9a18902861af74c263b495674d326d4f1b5ae24dc04235d6a5871e282cc6c3ca117b0ac0ab3fa9471a8ada79b98f6a7479546846354009887cf5a2b780c46c9e88fdc6f4d260b4f6bbb07055fc12f563ceb821d24a6001bdda50b8514b830dfeee4c0febdd52e3498ccca428447e7596251fda847449031dc08be8b1f11f31136b1f7c892d119ffc901369d78e4775486dbb1f808fa9a90d74f60f35af8b1ea6e30085cf5464162ff287a3cd9037db1309ab7e450ac951da4e144b979e7afdb6eb3c59c3e42c3c4eb4b7c46810138a84dad981f10fd45b2b0cecff61ca374e214391e3651d174f963a3c22edbbc2b4762be553992d823064aaadfdace5e3383e3342f7c28e790621370ad7e19fa8b6514dfb04afa1770fd3f625f37d92b42a0c2ac069fd52cc9ed1a4cc630ebfb903fa144e45fe2f2f269c9e42994e7880b660b6059b2f952316c952d1320cb2e904a6095fc03426c9e33d750fd49af5865802da8fbe05bb61e10e59e64ba7f22e33234c233067a9c902da28e705e8fce2632b2234d762d8427875ae20655a404e5189fd0c32cd198bd1e67cbe65776ec541f75725fdd595c0a38d819f57f0c865bdfef0a123fc932ae652846fb71329e4301403fed976f052fb366908101d1420cb5ab3a2e8a008e5b2e8ab10f7b54a4f157930783e4ee80b3b4e8b4351b7d96b1ca512a52e2777dde069aaaeabae1415234b755bbdf038b4c9c636f1781e0c9d5702619bffed4b1ee09ab492b2c2ae486141478c759ac8fbb8fdd708d88eaa37b93309361e14f149e8751b6e9cf0d21aaec2a4fd22424b030d1b711373378d3f2b108205bc89a0fc22d94a6caf89130e24a4b664e6482aaeab2071d7eb8447991e4998fb0a544ffc4e2236bd7132fdcdda54d5d287473e4d92b0a0f01ca0207ce22b5959845c1a37cf08a7876ca87a073df705bb6f097abfe25f69a3c0d28aa85f587235563171dba4017b05be22407833d8b888ce31ee2c7c49b70dde9330715f074d7fc99f13d2d4517dbfcadbd92d1a08e9de9c09894dcba5afa9a8496fa59c10369d02e1fa85f9cc92ab9a0bb569bb10644932719f5bdcf58f59b038c5f00844a71b212c983244e8e4d2f89992d7efa1e525514f8ac07add484109b0b505bddfa80ef11366ac550f3cfcae6505d398897e6e9774e34889d7e29062651a18dc9049de8fd8f728638bce4c7f4034f87af9fdc8f5276d7c92b95c5965370be9980fe5013f7deb40c3c99156c0140ffc692660e676f346d2fd250e891edec77a20d6ac865af5e16ef8f2d5c29a60122e24ed8ac078ce6a4774a16453e6c3515919a19e9a082cd38a234950bacdb7bb65940f5e49264adc169e6dbd166b9ebde956c105ef3eeeaf18f3db1e9fe6d01c8ef5d021fc6a5327a995ccd897101f80cbeb40403d29ac26c1238757ce5a1a20d53862eb104bd175d6a784d29452619a3df71509de1e6f1cabf1ac30c824358d0ef11de2bd2e1a4f622388de9359690ba68eb3a64ac585a6462100e33a8547e289aaf8dd0caa1f46a5d531b4bcbef302e3b89990e61bda4ecca0e8b21a04a14200b3bedf0bdd84ba6c8b0b555f6409df77d275a220b8b9ec24d6221ff2a41ab7f2a22e794074b32aaf49fbb64fba0d638d9a898bb53cea21a4aa0e9ff84b16a683a09b813d5806d77e0257e3c25e24403e5b9dfdbd085a0848d39bf06488230c2207e14559d14d5aaed34b2c329e2e976e3a89871c6e99454b47dc74bd644319ee318f16086d529ad4a0c43cacba8588dadb42787e7350346c1a756f850427d29d0ffdec9595d5c7781ce1bfb0b162d2316869d3b543797278f1b12fb4008544dde7b50f4037123fcce415959a57069de6ee7798652b2bd880ffe3ef5420a107ebda829520ae1485f39718f1e4c37a76c0f89d5ddb8c0e0151365c55a882af011f68f1ae2e2c234ab47de764e1a4f0e56d9875fc1285374a7c932a148e19d07f2b166100373d7cca9a35e84b853ab5a466883524aafa1ed5658def66d2c47d900958a0999aaf136d0dc2823c844678758319fe0ff8cf83606ce97803e2a8f2e17b91d8a32d578826b569971ceeb4ec02ee42bb33cc0e28dc11c31b0720bef887e1d5fb6ae55f4eb868cb08bf90af4b177cb2b87372d05c8a8e4e36b41272f5db78f588a00c41a03bc91cc2c36f99a34289fa8cf87d79849b02b65f60e86a86f99564ed68387b13dd1bdd03a46182898608e64a184cb5bd6595cde5a7640fdbd1bed3f31429a13b670c2c5cc560094ab5f33d0985d002c2073b4d6708a762866ac31e59cc85688880200f7b96c3ec3253b3ec0d4cb473cf64d086966c43ea795eeb3969a3206e04aa27c26b78608b792d58b28b6a00708f411f2866305c1366ec64073a9279b897130ae54d0c6613659337c18e24f898e5764ad4d0a5969405af3de882a36cb9db293fa708f06bd7e6ef564437495b323a059acbb6475c61ab6c790405c2b73d44b7e36b3817d50c205e683597a635e046dd05c7ab7f5f78af0bb56e20267a61588215a7c0747783b33c163c6826b63d16153a7c69bd85b0a0a5e774840686ee3e16a40c1c8d988141d38fc59961dd4ddbd070d2b6a821d5c2b5399bd5282a254991490794b29885002944bfdc2a5d20771c16e2159a1218245b9dce9fd7cd68e43a68f6adca3335f95d8f4f039110e35570596fa1bb337e5483c07cea00464c0f6340f2b745176a1cc27b1a1e475554e68745c707a7b1ac7d52d53c3a75cf473e373008d059e66a6af6e14efef834deb1e49c8363aea50c3128860a73108b8653051b7b1e92db628c0911205293157aa66742ee260d84aa97da890659795ff8fa3ea354233100f79661c877002a330269667e22abc6f6f402d03820e72b032dffa4176ca95388544e597ff450acb3768a3a6ff07a2ee61c022b280008dc3341cff227e82a92a48b73d4f1d6f94703bb6f6180ad372da8b700cfd304e00c673b00ea4c97d71207c3f715829bd40c52de64a26575c97194d987472c6bb0c0c3df644584bc3b2b150562c93c3e28e7c2994da751cf6c2e24a9a47299ee0e81064a86458fe45153fdc55ec7d0abd71e6041b94c968fb921e379638866031bcb6494e255086180486a00514cf3cbc211ccb7f9edec5c9b3cb00670064e2620fa6f7325ac078a723352b5c9c0aa3ca05bec01c8c0e0e4cc2bdbc084d97d202022022c6da2f0cfd9847b83e42e8efb1caf1bb12f58aff937c8b7071affae6f9770b294916f334f848594f47f1d80cdc5a8aa8066cae49ab879780c32be8dd184955bec8ad84c6314f0224bf62b8c273b4780acb813cfec13e1c2e54f46aae5b88395d0ea6ba0ab48a28fe254591e152981f6bbb7c499156f972a225890122309b26760760df423f1b2ee9a8c257355f6de3106032dfd3402bf5826624b21fc5f2795b8169d430b733828dbf3c9bc5058243247b3fd2c9ff7e3578b1ba42407a8ec77a0a616280ae656e2cb30a5602b9fc8cd0f31f05e81127a1ffd6122378bad9b7be1e5fb6d3add0a036c05d05cc8a7792ba6e393586225161338b0c5e73b1a8a8ae82676c5d90cc69ea8b41a7f8f622a419d523aeeba319ee25c182e84cb0a876f46e38dc927a6607249472599449c43cad37017edd06c44854f32c6a530a2ba1684afb5bb7f990683c25e0af842773ca1dc544664d9ea1a33a9c34d749e350437e28948d25fe8bce22205e9e64779965a90371e83f18070a0be16ca1c52a9e0942389612e78fe49197066b667bff481b5235a034ac3e20ff38397c234c9639b011580640fe2fa70d9d05b07103d48f5db969bb6ee9210cb22b9288894f5a1858c83d1fda6853dd465cd8746e9ae38b76b3ea6b26a12c807852e801755a3912eed950f8e9e6a8b2942811fa52a5694cfe43ba71842108c628c75d8e76d1565917349dab0f5de87d07ada48e63a86d5873d7041e2544c040addc9e4f24547190a1c37ebaa53f1d40f74e070affde7556a8455ab16f110e175c8c012dbceb8bf6c4fe01e6bb653d105c4a0dbbc0077f194fda64173a13b16a16285c322486a4686740b10f6edcc097de6b01b65a96a79e65806f1851588146f64c1147e91697e9d533f67659563ed5f532ef74255f5a3f0fb5d0fbd90c8df91f400f3ce1c0ad5d88b30507b91deaceabd55e2d7829e5cf48eadbcaa6049d675f187d54708400b6e25143cd806ae541d4ea1d75078e2629f8af197102a8704802f8cda3a3bbe9b42e42e42406afec569b68da2011f0b26f270771d1eacd0e1c51864849c35304f3b3675281381949c71af2defcba6573da0332552d5ab10700b10df5c632b44807397e502cd30e4453aaeac10a82bbcdb6d38bf6664d7923d161c5fd6893c1f27fe55ad050a6a85cd2d02b3afb01bc95d3fe53c8364cbce9f999b953b37e37211bf006a221b9d5cba4ef87cf1e7291801cdccce8151331ced351d958fe36157e3198df6f7006c0680c7c543c7444b59f1466620081cd43ea411948803fd2676471a475f185535f742f8e59ca83014c7e29a0b6457819cf97e58e2ee61818caaa0bfb9f91b9408421b3d52bef5e83b5cc09d14a6a882b59338c54387f814ab5b3a05b0350113f5f896e6b45d9a237bcf787512753835e730551328fb8847a3854c05070d8cbc7bb8d010678944c2cae247fa84a0506c6bb94f2b9ab0587092b8a0659a98d7746884568947620299e044056fa3874491c000a8f5565ef4aad64239eebd058661a007b3da4858b3829d328436f4c2ed70d4d34eb049f43134eb139e3721314321e05c38c7e03885225716bde74a31f1c1098520c43c16ce6e26e64b2bdf0473d2424a8189c56e5c775c79c748a0b262e6dca406946198cec722c2657160bfc70f5cf9f0842de350ca281c4a834a00e7d48243e10891d41236c203d409cde66bdbe819b14fe2ee1472a2081da8e12ac5d3649929042f7af67079de41709f5963eaaaf79e9f1594f165fffb4a57d045888440c94d9755307aa21d54f019e27d0c8216e3ab4bf117534fa427c7f1446312cb9c372755e2b66083c850e9d2001cc60aa974793f752a42b4557e4ec03640c22959418c919d3821fa258fc174ce09ae7250109ba504f1de5f7e79a37a52f914bfa5a7e0cefbd7154f5d0889ba72ac6aa4964d5bc9e58f48d3562d72b5297f64ff6750e123ac4e6acd28860023519840909fb43fada223b66311d388d094404322a6d81752ee818253a9475a2fb0b6b2ae3549f32b2811898298450f86ff0cb3fdc48f53bb8230702f67e12ed94b7ad29b8c917adc1306050403c989e093c80bce848b458a84a13f358877bf01f884de93e85512e2c7153e1ad916bf64c1df46668851f33a4bdcde32062c47cffe8a411aa31293889b08094b2ce29617d72e6e04ffcb778e5810608d2775c6788c49f3ccf212632cc670202d8cd64c836584edddbf866d5a0a1bc51401eff4cc7f351687cc147b15661266053ae7f6c8758d154d1f059bcf321eb6727e4ae69830d0b043e9d8f75ea822d4b700d0ba5e5fdab12608d61963078f0078fd33cb595f1300aa5ea9ce52296a2e039553ba9d8991e8f27c20e8816e6c1fb57e3157e301ba114ef298cb44f7fd4bb61d338feb444b042b57e7eedfb53ee0a3ab66f535a028bb72844cef7f5a0b8c22614c858bea2d218984b811260a63091f0aef29d9eeb7a11815f0c2905cf5eadb94e33714d9886953569ac27a6fb49e10f57571d9bafbb59e0a5d5621967e02475a8c2e75bf1ce78830441babba6eac0b78749ee37e7f0d68a7730c56dc53fe8eaa8ac4f48b90f7420ffc94eed65e7298b2d9fcbe137a03422cf1b724d06af5551c167a9f7a53f8a590381853a2d9a2ea00d2d50c025a428b41463159ef5cfe4c7984ba8db0e18d69d9cf0e72f6dfcf9e917b8febe5142629084316c0af9b2eaced12e01d56e8fd3d44f6e52f55936e5d97d6851ca352de91c81493f91fd0e64d93f3d6c7daf0a656f602c4b8081f0528030b13d18456ee6464e448f8c13cd3b331461eff815ad05d282e07149ad290b601d055f8e0111f93049a2954da61346a0fec500c8eadbcdfe0e0526d191cc2ea3be1fe87891c06b944c7b0b125a07fca4756f2baca4f08e4e56030db3349397af129be3fc727ca4bb8595889c6ec668213e8bc1ed7601ec83d3dccb74c98408e2fa004471da85a0006f66f129137092f1cdac0b76ebb385bcb05dd286d28b860576031f4cfa9e88f1048f3fb9cf46ccc22c59943d6d92ce16c059de43c51cef8609baccee8f78cea9af5a1273d3444b197fb00066485f965a7cf34029c64ee9f45c2060eb133ae04852df3418c4ea30864b06a977140c5a1c044fcfea0b6fe884108ebc68f7bccc8bff275ee807813e4de89913b1dee7782cbcf40ea551612d4b79302bacb1caffe4fffeb96de05a8854900b5ba20a5fb6bf1584be07c3bf0d02e5c812ad2d116ae18c23a1089e5affd38d0ac94707b71ef49fac74b0724f1211c6767ed483039a1410930a174526e59327a7f5e2f3ee385cfdf8e2da109c8d2876de7e698397bdf3850b84a6bd0016e7b09068f770f89b05b6a3dbba8e655024d92742890112a7b79d42e3bb80cd87fdf4175f1b579516260fc2e4192c67711a730a0f56db68958fe5d10bca0f12d0f76c9b1073818ccd3d9aee9487a7c5d856fd330c4fde9b739a8fad795cb67c55e2f12437b75fc936224bfea1f595484495d23c3d38511b4d9aa91314dd4db93640c24631901099ec6187349d5eb5a046337edc560176394477350dd4cfe8ddb7522552ec1e7eb27030b5d0eaf75916c871985d8a599455baea984c8509597bd51b0b394997e3ec15d0b8470f6b9c48323805a40d99ea0712ee671de2931f48d1c4ce2f678656c4272f546e417d4bb1ed47aeb9dd636f57e448effbe41ef4872ac6d4188ac656f06620d33684baf83ae163074f9c0b3bf89668a1938eeba77a9617225fa2a48f7d070530ea2b3870c738ca7d9f8d6bbdf50316c2b9feb501a7363c141db6f6f17085974c80a4bb6f113addfdb706abfee03fc750c0e7d5b839e99032044c39c00c6abff8630149cf357ef7e2e911688e86ad65d72623901887a88be3b5e57f352b2dd49f6017998e92d6f2293f96a9424dddac370d836728eeaa65b3dd9e291028da4c372102a4bcd78449a80e8a8065c9e1082af5c9822f7376f4144d2618735d662042b620d952883594c635fd48598c935a64ffae196a05363467158fab00ff2c46f0ed5bcb6c0d7694cbf3603eeaf4df65f57de22899fb2252a56ffd87334ea66c268fe4dee7691ff316bdb3e8f5d2068d03019e46d575624748de53eae6cf657e062f68b285dff153220dfbe8175298e486c8902c34e86a817486ab2b633665da1405b7e8049858838486c0f2bc9980a26dc256ab2b9b23f674edfa2fce7235d4359ea7658298f414f35cbd01640261e685d312c712108b5222968d3c3987024f1b2a13ed8d435b48a84964f13defb8c2d3e3298cdb00214e9256f6695d5e90eb07291830191623f0af066c90ee6d67e442f72d2b595d051eccd5dd13fea3f49bd8e59c8c14e54e07c69a4daf75c65d6a6d2fae2228c1b54becd429455926636a0ace266e5cf4f8858c594513daf01a9cabc4c0564558d66727d3072cceacf30b07f3e41001731226a910b6f8276d68b44a9d65ff07fe6bf78e6161bc560e7030658f74ca8b837e5e83bf40eef8f01580e61c01bc4ff4fb9331bb1afaa942c46aeca2954f37c91e34b09d336d8981d37b9f6f61b022d73c6b97a7974149990735b37f23909c0f09186d4158a94a58b36baf38f31732d504c915688541ac72b56c2c87b1a5fa209d10953532cada4a532da955deb38c9814f23dd2c1453f80c22f3c9c18b3421054ad533db055a0aae0e7aae0d5e951214edada2a811d1851ba1c8b7cabb5563d6056f5769aabe79506acd399fe2c875212435e645d02787b8e7d7fade0b24b4bde5b9e52b71e227e41d4b07f3430fcf261b8b99be508bea32967486ec4396a98e13b64bad948190c46aac272f97caf07ed42c51ec9776bbfcb3c4a699d73c2b80c885eca8e7463523a0b889de55d7185a86e9885e770afb57511084999f110c09b3c63a7f6cd78f01f42b069ca42bc9fa2d11fe1210ae06b41501874b81d31b006bac794b47a1d201387f46ca7e2e1167a5265b7f3e353366f14531bff649b245ebbeded86883ca460ec39f0860a5aa7281f847e09979cfafcf47f8006ad47d16524db1cbf1d310963ae63b1240d5f325aaa5026c4787616ac1a09f81f42c24d07ea2c05980f7c681cac3ac5e847e0414346aed0d876f7cc9c33c2a63c764e58fc93e4f7ae519d9b1974dced44df90761c450b14122b05f36092138d1aeec66293ac44530db8618f03d71ccbcd36c92d20b5e07c41e6253add0700279ef9b2d7cef8d4c3a923611012b10a89b80419e26544ca2fea672cc2c28e163542330a68908587ac90ac57adcc862c432134ef64b084392fb386aad160b4b703844c19d21804f2b98763f552238065ea0b7fd7186d1fe20f7d79f736ff1a05f9c2e06bb41ee331069e9404784803eb505bc46a8f24aa40338824c1fa000b77c9d44240c71d4d7b68b1ea24d264c7da65561c885d65671c103c7e56d801dec5127a3adb15e303839db0c82ee7ecd17ed56f2d0f20e06057ce49c57769103694b1010a433c147bd771e300378834c29198f197d8d0e9ffac14e907e436d1d8ae8624ef204eff905f469d5729333409bcfedacce25d0903d30ce8b54c7e76279adeebdb84cf8f5d66380a53006eea85a178a9cf05e129cc31f756f8893105df9953a6166a3c33351207e60432db7243c1ec41b3b73d601984a5a7f0ee4696610c95f373d4b8aa9caf945ea1791710abe924e452be6fc9dcbdc0b251f924bb820eb7e98833190365658e4293f1a5f6af0ff2f2e15fe9341e8849a4d6b70f2fc15a4824457cac95e7a2d30d39ba5560deccfcd58bd7a50b5c8855b769b5fe6e2c7b72ccef80220646beb053f334f22cf764e10dec45ccb17cd0c0540b2a97f8ea3741ef1db376b805527201b7645ef7faa321831c0b03d98259d82eb724e0cd2b0a138860b8acb35d5d9b9eb09de88b95fbfd7be3c1466e75bedb81a699c2d5889bb2554854abd8c9d1c189e6243dd99cb9d6c8b73ffabb7989c34b63b7887a3ac6928db3dca0fa63c8c56381a3fe0686887c0e47e645506c321425b54040c153e555231a09b9376a81e79de082b82a254f0a6693db3949fcebd7b1dbfc6fd33d321bf5f0d0353bece660bfa19d4fe1175da9f69e559682a219de1df66a5bab7e28a921014a9f8bfe681b583b0d702c90188ac48c1e9ccd5f3307889c4e2105e92fb2a0e018d613836e00e3571c32d4ff8f274cbc8a04c1c0904f06542e9336e08e1dc27a1519f1493dc9e73620b81ba39c593b322c67022931ac76765c0e6dd4a9940b9f59f24295e81dcb8d12e8a5863b7b54cb915579de039814d4c7adaf18099c5d668c724afcfe10b53132a61cc41ac3bc06aaeb1ee2c2c77c87035c1616fd62db4071a3d152df9a0b0d9177a6240975f44f56ab707943e36c17f189b5af8e73504a39d0dda3981f048c9ac48b4e5fc38a8d4176680e6f89069d7f71c789ac227b2de79c4e2efaaf1d1414787fc87ca298095c170fb3aea2f083818f3274d873b111dc7411d6208ead0d47d1d9be8d2b8076ce138704d7f60214f1d1daafebc96461478ed828977aeeb4204bac214d937098be2c02bcdc97bdbe28d6f46d4c23e9135a4a277cd71083b9159341509b3d4de4f0350229ff097076f753f06b1e66f89ca0e039ea6865b32227eb63b76c49ab9057873ff92c391da1ee4eefd8c029c51af368649cfcd8623e08e9fdb05055a838870b0abe6a4bda39a8aed0e5bb24601876032a741fa37852f0ef039bb4d455304f46c9644476b1d00b41c02381a3b9cc992b6ef9aad63473f53756d0537340e8d5642b1fa9e4196606c700fa70146945eacc5571e38c495859754dbc3232553d8f5c0699cfcfd4a5a35dd3511225cf8450642ba9f3321bde972e9351531e9bd9413844da740b8bf309f19e45a1610b4e176226b1169a670e826dc16d676ad84255e50844b413fc7ba54358fea8bb49d00625e6ca0c0ebeb282bb681705f83e8048130d6b18e91ed12b39dba076bc84b58ba4662e3a2e2532e6630ddf0a7acaf3910e9588875f7dda762d42824c8cb5ef7c91c72fc55b3da33dbae9e889d9b93172692ade1f5ce045f148dab01cc73776b06a7d3c3cd96da8234740bf7db378e6102309e6b8f0d86ddbbc4819bad68017438d0db7aec077aef7a0ddfad8014df250ac238a405e462996acc1a43d725d462c88bd1a175d717c1a6cf89966cdf1180b314116431543e5e4d40970fba20b1e48495278d860d9ffb443511023eddf5e048d6aca4a5272f4a6d592e937641c4b4f459df1330c850d078f8c0ce221a9f19b63c5a43c6b6664a141cf9ed8d00f23c0d37329b564aff1dac36a89f2d163327e7f4836759869728bba09862a666a3e05815ffadd58a714b00f158b87dc75ebe3f97282e2917ba40228bed2c9a203c042d40a950698de91388ea1c8a2b9e0d9033d841c033128e3ed30087cbd016357ee214d3e2f9514d6fe078b979ebda8c7bd24d56a2dcd4d6b6965352d3980705d8aae2c062e36b67a0c808b2ca59212cf4e8336e54804f0920662c18faf3065665067cfc5b082176fc9269c74f6030cf63ad2e2eb780a6bcb131f572dd14f16a6aa58862c7561b7c0d5d3025f54e31984535a99d7850359306ed70fc8e0c2e24d475a2552f3543c6b181f77a72b761d57955617905f75c041b9e9ae9db88b65e302844c1a07e888043ab5e2e9a78a0e1cdf373cc917b6b8945e7c931782a30da6f0111a1c1d90c94bcda1a77df52d099bec8402db00b8abb87b2b07808fbd728f9bbc3aff50260b602c5ab2af1324a9ddb96a52ef2eacc93801b4bd9a2700007c1bd444add0a132a0a0a0ba86fc5a05ca2c757a2a23b97eea31a38f80b07913250cb407f33b1baa77a34d92024cb275ee28e75903a3341fabdb9a12ad56308d0efae3ab4801f82816985621dbc7556f0c65aa6cd1586a9e52c5110242d65343baae0145546b39b702c4a1d569adb74e207bb743933f63e9413c512f94c64487e0b142521fea3c761813c05f4ebbe99ef18ca375a5fd5e04452779900d1c7522b8de91ce200fbd0c59faa87a81e548af11c18d2af48ea9c109212f7c679645a01332578b2d2242db7100a5eb8e0417f29f68fc8d164ff316b71aa416d9950cf7a29563f613e3f16672d967d62c24bc3b4c65b21cdef234a916ead7d8c1e9a294061427ceccca4d076e68e48e56ae01e8647b3c1f5ec022de731009d17f2813eefc80f16694a2e40e45b405b2d1fcd6b57296ddde3e18c6170fc189b8bbf3b048928ef7b2c601df936529917932e1e0c52a53ec169527e3a7aabbf1ad5bd99a37f50c9bbd59826c0981a4860e61f9a3b5368c3015b7b2637e451c1144b46997315ada4641ae75c9f17536f00ee9d1990d12db08d629a81c497f4846b3848eef90b9d7b67dd7c27727260e6a435e639d97fd15a07702654a0d1e831e8c451887b89ed8cf13f9dae7ff5566f404be0121650b965f0fb5c65812550484d95520764075359f4ac27497061432a090e94a0fc0ea218750d0bb567d8dd719a0375e0edfe92feaf5b827ba19fa1537951c905798cac56e09c3de108508439417fe50c3c94a08e63bce4dbe5a4d05b69d7accb6ad45ea35319c8b76c4fbe0179d380187c8ba1f838fed08deb2f8b202003743566e3b65c8d33c6288a8374eb0360091f98a642b48737ae2f6420da0ab5a1b1a3a6f19fd241716c56e951bf5ae5276caadfea6c1217dd341ca5646ce42734f97faad047be255d12ad393ea004e35f765c104e334ebb4f58dc8f2bb3bdaa20f2c0fd8e2274a1102785ee0bece23fd287fb7f08de82d8f227447ffc966aa6c79691a4b1cfff6c815fdb2aac31d6822f8d3f741774463953d2183f823b048f2cacc90b8aa3d096ca412cb493a83232d379b687b90c7614c7768022fc51845be31c018c2e0142122e4db06e546280327cb0f54b267516ae8a8bfd0083bb3011e938aaa404e3ae36eceed60cb012231528cde08c23755ab41cadf38dc00f968ff95bc66dc43e34ae366b560ba055b695e5b7f55fd76b38bc1d03583bd4198879a84f9758ee8c00d7414e807c36de7a2f1b0f326a01d41a01cb872e0ccd630c2b74a1f9da7d57b5d262152048d5352f15f535e9a9da88b6fdfc496440b870899a10d4320ead191deed54ea74da287c68e070d5189a4cbed827ebd794a0dcca362ad821a684b729e48bf08e6bf29523122cf60571ba80c3442d91c398fad4cd7263dcbc1cb2800f30a59a0da744a2cfc18c3c3436b94144e4f40b39ed86c524daa63669758c8a37c4e6ce59e6b6365153878b9c52c5d4308f04f761a5a17d3fa8491202d1fb7f9d3ad59695cc1b9cf7e6457fc8d695a8d56a9b7e7e00b48f9bfe7fb6f33c9f7bc9f1680f597543902a72e80fe45cee91102dbbb63d7985be4805a3ca15194736d14819c4e9a5d221acfe25677a54aa0a62235ed0459c7c8054ee379c0e77f7890dc8f5f73ad6b6238bcf4d1d4b6671a872e5c03e0caa50ac2dc316ef302825325d42e8505d842064cc2032889494ed272f680eb0b23fdee6fc00789772ea23c2548567496592a912667c9735e1c095f1f145bf52509e45ac1d8d48fda7ce244df0b6ae12c9563ef6b49c108573af7a268ba901c116fb399801325a5f2d1714746f1f24787e2bc9bfc9f5c5724f457dd8adf441f3afbe24b774d2056f4943caa088f328449b30c808c2d92511f3aec150614012a8ffecc2144eab0afd0d3add672a69dd8cc132451d8e663080753f9ef83222969b14c13c571d3b81b363fef25bb62d7311e8a9f4cb4f761e9c3edd77e076e725752be56b5f314d3d9347b09a9e96c092cd0f4a1ec3ec097d32ce72bd6fb68078730385c5831d5c3b0f8755b61be951e11546802a798a40372b4aef37f8b28d81dd4e3f168ca4f592c5f591ea7e4eeff1eb9e010af1bdfeb61bb6273d82d9557534c3e8a81a6370af7593625c017d34d00edf161f6d2e552c08773d73d1ab09aeee2f356efebd36937d22efdcc07e03f4e1c76d26075c03d72f9999d6940c6a0888b93c88bc4655dc77e164a37ed7f67a815ab1b9c70d976cfc2e031e26982cbd66748c4eab2d3b2cfdf62765b37cde94d7d2bac2e8c2d59bf9c529750cf3e78e7789f1de221757979fd9af9a1213b2933feb0bd25b5562d111f3c380d24f73c0ff63d60cee1508a963bb04b4e4e656780ef2b5b698b827b115f910cfbacd7816de0bcd22e2e6ef56ec7843d76d1e9a6c0f675f5679c6c0ed91eb91d92220d7b56e60c1598e124c34f0fb21301b9a43a5bd514c633e8600b73b57fe5052fb0028f685ed39632f0ee6f5fef163f051889171a1f7b87239c4c70c13c83f7f71adc86016dd486d40deb844d180cc6532bd5c221cd8382cfff4b2b44c002faf299625b408ec24d07a63688fad22bf043ab5c5c187ceaae8193f607f0691ba76d217fdd27fc45a196f82370fe87723ba0e012ddc817ccd51e8f2887ddaf844c49a1b45c0ba17ca7d2d202e2d465af90cf88a2ec4dfa93ddd6e49652a69452f805d8053906b1c2df7e761fabcedfba8f06a9a522ac1a7f9b9d7cad13227decb86e91be7f92ba1dbdea59b559a7b7a6f45864e8d76f63443d41542b465456b7a3554c6a6263530cf4b92e91952eb5022f9d2134dc3eed2c20911c7a71198c3a4352d06f675c53848eba44af9e3aa3ee101a195c38014d0b473c0c490146077e0d2d7183c2217ab9406f567587d254516bea0ea179d58fbe1fc9ea76eafa0158897025f8aadf842043747eb46a278b47ab9af5db25c6440ac25c2102315e2ee8bd2f9aaad3dda3071d4450c30b8a9e6892a676ac478c2d70c801cc13495c5dc65e41030e5ac400cc92277870359adacff2164f09b2bca0c40b8aa32f4ae0da337503301461051193166e08729181802c8e82c8b081872021d718750063ca583942872860f4e06a33b56555a7e1170d660c002d09164874810489255c9814456f28f5170080c4911f236237281c002c216141340350858fa38c1f6668a17ef46316395cf86051a424899433ae9e69508279e081e6af79aee567a5f6d757d1737941ded56fa305fd1dcac1ce258aa1df1a31185442a0c5c56f02878145a356c57ce8c730d210b26ac2cc42b7c2d8a57d0f9207c0d8955a2f45827fe9a2491a97f624c89f9e0a5484f8972e9cbc5cda4b2fb52f7f5d24683b3b3b3819f372695e6abd20f3b55fd7ba3eca0c73fee96cb8a027d4b0c0c884cd046f31cc796b7424b2ff756b2a04f7d61be20569150b09b24be79445d7b66491e2a86e96161ccda89b458a9e7afa22b26d1a8170d2227b5442ab360c2fef6e74ae8456b551152202bf18d60be8d7c00bfd180b6311837efc7a796bd670a5095f93f33e8a7a7ebd58f59b95f95579540dbed01f22f090a9b5208d9df4abcdf78ec725a59c7472a847996c389b5289a462a99a0b4f2655a9526302815193068d86314628e1151a3538ef52f2fd795cdb7492823f9fc7c5ccf3a7553d817808f19fde8e7b3abeeaf9337f3ac7490bb5f6a55b7406edaa9f6bcc1d76a7d47eba260ad440771387e2a4a9f49b348d407209b937837cd55dc3c68c9248ac7131ce19a18c124a19238c304219531cc9247f23994620b9e6901618e4ab8655a257a57acb8593c3130a7f5d906150c32af01b6ecf2a0eabe098a1f2359c3254be264b2610a20d6f1b366cd880bc36aa74643ac6eeeed831c618db3dc6f81d9d061a67ee8e31c68edddddddd104a8fb1bd638cdddd1d638c1dbbbbbb3b7677c7eeeeee8edddd1d638c1dbbbbbb3b76777777c7eeeea884fa73dede1d638c1d3b76cfd8dd7ea236b1db04828c31cad8de9e5624d9f3d998999bb999390061b53d22ecf138731532fe3c33c40d55cef86083c280a642a8f1a86b61882a9950a3d843f937c952c62e624c83cc0b8a000ca1c8c837389df3801a6fbc552e732398829894818f66b1d87db053da10421c14cac708ebf2b19563ccdcc5470a3e7cf8586ed24e384c5118ff8c78757776e7304eeaec66f3731cbc51e3028f2167e8b32dda2b5612a67ac7c12f8c857dea766286710f29ff639fba1ad4e04aef63c94ab497bf0c83cd4ad8a77320967ac33847e8c75aae57fb9095700ff6a9dda15ab53b34024fc29dd4ed04e3b3b807c949ddff8ca09cf83689cf83aadd6824ef650258c75c16f7584e00f770b249d4d9b5475bb55cab3c4042b76791b3ceeeb7a342b82301dc8341804eaa77340e19d5afabc416382861e4a5b2ea2a612465888c583540dda1318ef0a9dba98766d43ebef61fe753fb6f2a7f46b40a1b56293dad5461bf34f990af2d07e31ebdb59ff3c15219a82baa55dc43837888ab7495282c65e7c3bab5aee594700fae3e754dd0bb6e19dc5d3284504a97efd2a5bbfb426f27b60e9a80c4f8907d709a8a02a791df5ecac7d6f66c98f98cc4fa01aefdddff240c6e676766666666e631ccee0e7d32ce3fea067583e3eceeeeeeeeccccccccccecec1edddddd238450fec89470e8eeeeee349a803b2187e26e7748e10d24030251d4c72414369bcd24f3eb3884cf0e5be0fe106846b13973373373944e0859f27a4df430636294504ec8691ace3fea06758333e7e4267cdd50a91ee771d684628e296772f78f30caecbc516a63e333664076e6f7b6332216c528a2929824090e4551c427222c2a89b0088b4a6a9f02e21109da3c0e6a293bdc83a1b08efe662875cf745afff8aaff4bfdd80796d27194563114eec122581d3b700e2678cb5d5d23349f4d24b06b7a3b2bb834af4d2aa022f0540fa0aa11548ded4261d3d4e8c5159c077afcb231150d17e414ca20c182a231313082869e0a9fbebca8f06f503a5e4705e0d2240a3050b850c5071774a1c2d799555285ffc35b3c301c8922c4183060a14516176ca1c21fc242856f81ce8915c65475895e4abc84a81ffd325befcefebb56ce2f68bfeae351bbe1deec4a3eecb85dc98fddae4ad6cfc84e0810c76b9e108437a017c402ed3c6c3bc9d0afb355bb3d28ebe05f6f32e51ecf3af8b9b7fb8cd4dde19b5ef14e3a244647b9553cdc99d1cf4825b24f324580f424efdb87afe3cb35c21a2117f7bedff6b2fef24980af792a680f5f7a2a5011a2bd0af299f0ff9c52beeca8552c6b15ff9cb32be23197c97cd639cb9b93692d60aa54555d2d6060553b42b5e75408fbf3eb7a9f7b31bd2897c665bee2f79904368b1a5fd3d2398c926dc2c1816a20e0e840b5ff6610d26f91635310d2af0984203e84481eca57fc42d0fbf9cdda09c16fc1f7a359a9cb3e2d56b72a50dbd2f18a6da94ded4b6a7fa428e00f5f08842fbd1d085ffb1df752f1d7e59d77b07fb68f35939986d323229fb74951a8d73c227376df13d17eabe67dcc44e273add1143df6a6ce65eba762e0e0496d94a0fc8d9a1409faf563c1a0d48fbeeac76a1b1a40b75f22254eeaf6fb73772757a7cf8681abad1e2a722bcddf6efa76f17d3f7e45b68f1de94b5d693dceb8f9e611d9df4a5de9b7680221caf5844c2f4dd2132ab58f17553301d966073f76f3b90e48fce911d9f7875ed79f915a84abdbcbeebb01425a2f0564a68010716fa7b745b8ba79a9999a0febf4d68b2467aae67d1fbbc951129c571a46a9cd9df1050da3d496fa4a93b1ab8c5dbb602763086ae771efd8169fff87b7e6f3b8a6f647785cf0f763c7e34a5140fbf942b49fde0e152904a6dc9bd45756c0d058c1a17e5f61036d24271e7840bdd5ff3dabf28ecabf759167ac1276ed5a130841a6af7630417fb9b9c190a0c2cecd51347fea3a841036f4eeee7ee81042d8d0bb658f3c227b644f64c51d2c96dcc16a150ed9237b5ef67477b7ec913dcfff3f5fded264bedadff9aafb7c9a42777b8aa89f16abebd928437ffe6c5026f747e7e6d8ff20ded2f15517028c031750af423a876b1573d7da6d15d23929b0f3176f6e0efed9ec697aa2b012ddbb1d3b76dcf7dd85be4b37a7dd4b16f91be10c58773c917b895d0877631a8f3511aa6fee336a5e60bbb87b03e98d8aa1aa55436c8ef663574405c9e087346ccc5fa5f458d334cdfb1badf2879dca48acfbaa56e160175bb1a2f2afc760fbf855df84aaf2be4eb74e2f111219d48f0e21866fd3cb105ff174459bd92a117c48e758c00776d22d1fd240e7ec125ca2d4a39d557e71c1c2a6a025b608d58f7d2ad39c4f25a4739885ca437c4e4afd835609b5c762181615ff0c8a49b614ff8d661893edce00a3a6c90c6b284ae94d1c143317d4df0703d92caa7bdc09c98fecd18b9164189249641b372e8c2a954aa5da36ee628c1eb9771d274428922f3d944ab584721f6afaa38228e3a070a0bc055dfdaf920155c5b648d65386ed0f5ad59bf79550b71fa552c9d3f9a03312abce0f1f12a173dc7b9d1fff46e2f61cf3b6711b7f5f8d44fec9fa2963c03de9bf7eacd80de91c0d85627e9217a455ad692f04be6624d6186448b4808f524571a8520c343ef4a6f6f1db48acdacf19e37b989a0ae18baf793c959ba82da89e584c2ed94acf1b3397f8b7d297a18fe359b105b78352ed87ddce099be4ea37bf033c95fb8faba637bd29c22f6da9e3189f3b147c525aaa1408ba5520fedb973a22fedb6fde7969ebb852a9e4a54e4f84bff427fed2b3e9495fe36dab4c9cf7f97f806be9e3f3d4f9a56ebe4bad4bb90ce813c1c4085146fd58b568f6c0b3b7641a837e1522798be4cd923763f34ba881d5af06b6754382f8b036548c55ea9affbe964effa9aaac79daaafe42e3476d0b1bdbc2c0e26c07a59f04a82d46f6809257c2e67082aeaf50140a1a557bc9ec7dda7b11168e5ef5541979f98963280a055946d860614a4266aea40788014c510c4354940d1224104208a17b00ce70e952fb6f9a883e99e006910f50ed20d0a3040a2d4c00c5a70726b02708d31162d81f03644481c689155cf9a9f2037ba2ccadfc9c190ac312036001818a5203098c4d490a6c985f14955ad004288c930fc030225232d3d2f3f3e344c991941c927c10c68b879f0fbe9011c16085c9074746f5a70ad1922bb40ad64334413e241289442a23ebd59699cdd98bce60a8d9cfcf807ab52c343ed0e03be13413336364466666d6abad1f0a084a8406cd96cacfb1406dea0ea11153673082479a0e103e73fceef627d2120ae5f76f0e635b4839cbec7e6766a960cb82eeeeee6a4177777706babbbbfb023318daefdccc1dc6bd194ddc9bdc446c8cbbee857b052dc8bd68405b8a390e569830a1849929bab0c28b25362f5049400f689a8009fde033830c37498cd062742bac50e0282181e24b305814698aa012861831c89e22a8501c47b9ba8a10439040cc14a1218270c2675d5081bb3b6fd971021b5ef8c122cd0f6438c3e05848ef9b147a65a84851c3141ece60f941c9d60297fe30b59b0ba4be1fb4bb1ba165062a8a78c2ccd0172e7e6146fd761cd1d005bb59e04932d352032c8a0a6430050cee70a1769c0dbd49863ca986d09ae8a250ed356f8205ab436ad91cf2fd87c6d7de59b03d66bcaa7cad9bf1aadec476b05576bffad5afd2ec97fc8e798bf4f2dd49b74853aa5036336233bcf595d4a4bc513df99f63712dd0061a1f76156f7191afe4cf4929eaff53c9a22a532490fef4274f855398f6f2b916d446ea546881f4f477a89722e1f4f4a9a702fdd3af6b87f4d40b42f2a6af98a948c9411cc44127c8643ab3869a50533eb743bfee3ff2e5a4534b95ef5a8adc8b6cd352d272f3aafb1dab32d6393fde5a977c07f2168f4b3ea9e37179907cbf22a7f7a1b41ff8a23eaaba9dcc18b1557e39c60a808864a07941fec94f7108818689e69fcc4c7698eedb8d84320ab2319e3c71f24344191727a9fc373a6706a7c586f338db42082184ed9c9360db1b9b8c428bd81cf03f77225607fc8d39c042bfeea02ef296e9e17b4fb74c9e0a456dde86fa506f7d053d8752e345a9f08aff7490b7784e4a51a87f19940d0d0d0d0d0d0df10ffff0cf0ffffcf0cfe4e816631b9b1cdd58a5f797b738ef9b30420eb050f87e65484b8c74655ea9f0fd05f3168f0bbeffbc4bd90e98abf43ed4ab461e526f28d852a0af6db9bb53ddfb289c246afc1f42ba6563e806961ae329c6d8b74335afa12666eab74ea86afcde9c88a4c6ad5ce7b444c2232cca5bd24b51805d9b2241aa203d572c71c72d5b0a466685f9540eea6a4922ab5b731f9815052d4d19afeadfeef9120a7f738e4915d640e1a34c1458d7f455fcbec65265ae81f2f7936d7f6788a1fbfc6acd905122fefbf9f796ca9559a8eb7dfcaaf0b7fb4007e4c4f3c14f8550aad043e154f7b74b65d56fd3d4cfb7a3f1a2bd807d36a1f0b47a16a2253d75899e48a9457589643041dd4e7b83c78e9d151410f484914bfb15b68b172780b9a810d97e7eff8eeda06bd7fc67246e359d0e8faff9ed759abb8d33bd4eeb6ca78e796c907b1b6a4365cd7bc73d77a7e7d139a7aff993e7a3e66b5c1ce77d089a98ba797f230494558455a727a479ee00e992afc35f034bcde97f83cc3ba7183e0f138c74eb011f0c51fbb7bf8dd5dea13874864bfd760c7f84391f4ef391fae1a8cd1e0f0974c5892b340f94a424b695396c61ce5dcf7ce57fc2ca9c5ff4c7e74bbb827efc83b7560b132e7f2f0523b4d23ffde723a8ee4754ff1a63a0bf66b4b29df16bb25fa9ee4254f72913e63b54772fdc7fbec59bf81c89adb9d2abae7c42bf38ab4143d9134a09f138908252e1f7968cf9ca65cd10a59de6c2e6f03f751a0babc37fc2bca5f5f4ca6bbc8f831070de77533fed0573cda7460bba757a297095316fadc759f5e72f2a19dbe27625e31ebc3af8fd198ce5322b6b17aad78d9a36f788faf10fed1ae24a4e6c9c97ed0153219c2afc53855e0a0857f85ca1f7f1188155e89522815df2d9253d18e78adef4d5d26e81650cf9e3677e67ae7338044a68ff77a3f273b31e1356e66a9755bf412b492f49d7e2a780c085af294b4e22cd15b894f1a76318d943b77c9156d0ef4656217b2415920affa9cd26784bfe7275b78c1dd6d1bf35a494dea3fced0985011b163a9c000a8704f5a1b12ed1096cc04297d070021810941301ddbad862940466eba15a111704b53182238296aca88086418f7c41b9a02aa220c8548884846290a28c0c21e47a7a8011f990438908221f64d8c8104d29d304d1142e484034a54b1744539a989285680a124453ac104da902030a3ad95286d4c29824aa08832a2141081a85aa4b44822395465d221ebec0b2fd0761f0a7ee0d9ea81bb5bbdda33b3b843c81dcddddb51997567507d1b62331d4655a5d6f69335404323263e483ab42a4d7665a6a532fa8ca4d20ae6e46382f308a13080a94d059965ca894444d01ded0ce4831545bf69a93516d6de63259ed97b136d366da8c0619977d34c8b8cc8f220d32dbc19ec29c62b1d39852c9db707aa09fcbe877723ff299f45c165db6196d46d1a3d176b0db985e75257daa6d4c2f004bfdb6a34dd6aa9d920bfa4d2019a3fcd81581409bd10c286a314e206f919e144bcccccbcccb1ce366f49ae647da439fb96c33da8cbc3581269036816ea886c2919bb63b77e7082417c9db8c7cd58fd383cadddd519de4a49809bd09844306edb88d69553f0e994db619010101e11cd1ef143bc93a2716e664741ad3399f36e3228e344b5bf37293864c362b87387b42e7e6f013bc355b77a0ea4e805af5b339bc67be9a00ac0e5f46fd7a754fc3a2ccccabba4fe623daffccafd3903d9fb54a424167da51e7ec7cc140434ed100d8bbe27f260f602c57fcef0449eb80f85b19365dd2d3c2f4cab558ccf7e4458bb991cb9c8c7bb10a10b30bf06f37325941bfcdc8c88d649ca90afa6d469a0cf62079570f12ead25e7e8c69dd098b4580bfec4e2f5805f8c7ee44c52ec0df4f5e3687ffe6469a4c9bb999ea1f37a3cde16fb2827edae65acc0608eadd5de837b5eede65ad9fc650f73cc2a160b8ebdeb7b3fb3aeeee0e7721162cb8c8b62be8e7339fbdaca031df623640d0cf67b2ba7093ad7c017c41d876c0ff82d16634d705b47e1c7b1f945de414b2471e914fba4ce1821ef9a447f6c827f2883c22b9c8232ea0920bfd6637336f0a422943748b0145afd78b0517d1922ad57f3f7652dd7fc781aa3bb797a582b91041599a80c40a5fe8835e39c3aac356c14f0121114995bed43f4e3e20a0d4573c0479dae511db8c59942cb498619bb78b0a305832012c7cdc47782226030b1b7705d68f58263399c08c8111d8aa26db1cdd7e66a3593e46084f336094c5587608bd9772e1890266285280c2fd0766bf71d60bac6e5f1e2c16120a211cb212638cd17405e5871be37a8c4fb950fe58c423d3e03debce5ef507c1f966102a68bb9bbef8f24c81c6779918db16b252118a1362044c04d58f724a68d7257a9243551d795da227383c5992c4b6db9abf4d4fddd264f7d4dae1171f7ad0bb57689ed87e24083aa32ed10d68aa17052b8b940af7460b54f55617cd20abfed07f2e51fdb9ced9aa3fbd41356941f5c7f928d5dd090caa6fa161081e1ee8f49caaff8f2675870154ff2116e81296a8fe1ae81c0daa13d56045f52f72820ed5df48e720a0fa83a0a8faef740edc4a640397ea5c7ea4545fa0ce5922a034d59fa138d10d5daa3f47e99c9aea52ea32b4f23bcc601e2433783283a22d8c0803c89b788d23990251eda1f88c941830b1040c28a63833834d4f13e8f22dba683b60269b437b4df2f0968d5f9cd47fff3cae1a29e805e9413d07cfe3dac04637e9b4f1fd361c05fb01aadad7459f5fe922239c0ee52bed531bc31ed51c745dd4756c7d055d5478832b745da91fe22bed7f878a900dbec6ef50d9a1228483efd71ee5ed501182fa94b7f3c357daa3be86b74345488d47793b3c6a6ce0ed68d95171e075918a870ba5bd8d31e8ba36f875a1bc14003c135aa5bd4946658a1414f1f37ab94ef095f63656141955ada749fd68b5b243dda0e397afb4ef8e4403fdbaa86a2921fd1b7cff061eff6c0eed6fc050edbb48fbf6a27dc7b48730edd7db4803efeb59d56ebccf5f34bccf6133bccf7f6cbccf81a8f779d0c9fb36a6d5789f5fa99ac9fb7ca86a9cf7b996aa6d9a7b21799f1b550d6af204b92c207cc8ae72ef05e0d3045b07707777e1b6480f7f7a949e48d09b2357c2aecbdfb6737fb891c6196c27f046aebca809631956bee882d684d96ee0b20dd19bba444c864a46505a97884995ca440ad1cf955dc7d1b2a6006b8a280616d636537b06b57fd7668aa0b56010ef879721f3090e5289685f8445224540f33e5699aea874ee353531ea14cd8800000000d314000020140a8844229140241e57b6f10314800b76924676541a4b845110e4388a52c81842082000000300103243334327089d468be4be765352a73dd5ed262642eae596a9725c95dca7054125919e68e3a3cc940bc95f5c8f91f97771b40249f677a9e9704ecf67ed24ff31a3d784e96706897c95934c7360d6b90e99f7f7d9ae0cb02eff6d3be1b40078aa9dbc0ce74ba6effca33574d15c33ab308fb3e186b4120c1287f08388d6d210665b805380457b04bc0b0905a8b4127cabe81854421bcf39245a825a188d4f9e4ec79544fb6a8a239f877bb05dec2c5709a30a92853f79cd9cc30953432b1356a17264ed65cba4015c2f4f8954133b6b96d3072df603e9f2d399495755285072e6e1a409f314c8e2b47a50e56b1397a7203ff554151538c5ab50b29444fd23f53d1e73ee33da0631f7c8164db75aa10e4acb4fd5af6acfdc2a19aa6ee639a6cbf897ac9de862103cf57abb70112e47aeee7cd94fc876f49088b019d71b1a7e4fd1aaa92c88fdf77367de7512329aa8f60d60bc049bf96da3dece087041e8357e2c3e25fe6fbc96378406544fc50a4eeda8d5fe5df1bc815af362af772ec70b1cbf24ee92091edc1641fdb788d99ed7e8d3fd894c2ebae832755322153daff39ffe3de63acab2e4938b146e932cd313151bf4f435d08b0f7a5a1c5a56568cd44b702cc62b5801921c7dec94faa3065019fb4878fff5313e8602e027ca77481fdb354d14409322bcd95c582c87c34a4e6ab8075346a6c56b94c5f1f2a29703ab2a3ac0d397d20328be874ea0fac8c07b0c3b8195fa14c78da6577adb8233ab4a6e4c27dd34bbf63629458b4a5c7c540c44c10511813db558e3e3a156ad12d54cd1e73d552fc0e28c31b6f4e53124ef7e51350682611627ab8ac03e2a88846306e6ef1873bf1956434541a516ecc108f914115adb91abc39f88a8a08f8112c5ceb2fdb483c8c68455a9175d2ad11ab8d7ca5aa0c65d96c8a8342919aaa072d09393a986ba297232e42434329867ef7c962d09cc9f12104343c7a33dab3931dcd8d33e1cd4f5d292635a7a534dcdfd6d6331c01fa821e45f9935f1a428b65a58792614e2fd65add6882ad0bcbb590734e5831c672d8e4960832b438a93b933800e458dd8482cae12ea52f94bb8b8c55f49c010c131d7ae1d09f39d1cffdc45e571976ce4f06f1d67701295f0fa093b047949c7017c7e45a68c2906c6303a65ee58765a658719a529e85d843c735b03c12e310ef3c719390d6e2fd8779f0e5b4a29c0701d1ccad155ed83740b476a8f73c970dea7c3a4f7dab3f76923cab0a34d4afe7ef4bf13f371a44b14d655c117e3877516ad9e1b25c6be3f2e782867974b31b13ee26991353b2f4263f01a9c856ee690f05c0405aea9d7b1b325e5cf875ef49615517dc50e828b0d27b28c68c54a73bee3fb129e022508e0e9ec06f1ecd8981d6607fcccd9e41a98dca96049207b527c467f0c71f42850dec2243511683aaaddc22da60d7d04a54da83e6280e1bcd25ad3fd499c966e0813bd2a0479ece3fb115f503c9900b7a1a329e255471b5ea55c29fed3e880c84a9efeb5c33205131c2d457581d6f9a2b12e523f6552d19b68253833bc4e9dd95240a83ac8c387de693e6bddffe03761595868b4e3b2c3b5b7d62fcc22d69591c8d1a08f9db1e396e61ec8a0b77234ea2aec4a8f43118b18b0ad36f6e68e90731f22e694911fcb9a9f675a36f2dfd9f06e4b629aeba8462f26175f1e252c71714ce67e30cb708d5ee94170ddc782c537d1d8fa01dd5e0495a154e45a8cb2ec513f3312c5932370823c4852220a53e4072bca48bf343be65217b7f6fc15d542f82d52f44ee7e47ad0aed11355bea84c924373565adff25ba0945359bc3fc6082641321dc25c42ded3eafc0ea668828760731d2f32b5e4ea95123752321d39a6972bcfdc92a8eb434e2b23090b90a8afa6953ad4b40ff19c11daa36b77e3667210fbc2be744b64d0e24d926ed184607c9b471e83bd0e45027a9650df2bd452bdc24b1064718257c7fd5ff7e3f0ba56a5bce115f0023c270b98891b72b444e5ba82df42e1820c2c0930392d7ea4a8a84362ce5a39c4896f4dbc30210997fc674fed0c25996c5cdca64683600f4fa9634ebe690709aac3c13a3b3afbd7f50a6e7e06ee61c10710cd0f97de0c55b73aa02b2fcc9bdbfabe47debef3e27a1a584f5b65bfec08814de69633117bc3f11ff4b149b24b3d3082d3c6c5262d2b579d4479209d86c01478b47a8575e99d7c8b2563bec376b729cdb46d164f4abdda37dc6ec1071ec5d523d0cbc68e6246945c46ada35c8a763187c899c189c82fa0f8ad01e203f566c73ed7353051e0df45762ab5c8a188b6f67fdb74e4e6d917e0a44959c804b84e3ec19dba0a6e989193e664735b9d1c061443fef0298dad56a0704d5f54a2aa92ac7ce0b8e9dfab15beef972da607f8f0a600d674f325bbed2a4298c376d075a578ec6d0907e66c0f31074a285caeee7f0986beee279a715290f4963d68b8786691fb216f431d29e950a4161402c15aa902d5bd9f82ca739e5d2d11d8011f8e3460cc1ef0e827b13794f40947af72266211d03e3f8c5c002724600cf0430c4270990b5d2940abec8510abe8eb803d9cf33d21a72c883152b48bdbb6ab6c15251bf22d9b79dd9c40887c38303328eb2491158c2df97d2bed738a37cefc71860f62df3bddfa2b5f154bbe8d5fe506d1075987eef2a520b6cee262c363ef5734515ec61da71af9c043273838c64437aa7a321f9fc516b1a1d23bb0f41ecf07445a153a5c11d612b66351087b9b8969df19ac7fdb18611c6cca5a9bbe5f4db9ec05aeee7add44223e077301f6ce9be123c05060a528f6d7c54a160bd6f4a655deb7d0addd87c436deddeb1f9491d836fa1418e5ca9000456318106ffaba28bcfa945b866d22fdea8b21a2e343a465dac29c3fdfffb2a3657339d2b486cd3c490a29f11e225c8d65e1f9c75fd7c291ba7dc45b911c0cf0b8a4bc0820ea2019d0b40d8d0582038acaae9874085eb80fed52ddd30c5b3fed91a7fa1ed5d54974e691edca8c4e37eedf4c0c0e15c6605dad622fcf712ffcdcc98435e4d6bc0b9cb25be4f0680bfb68fc54cd0e61acd3d497565ae87c8dfd9a4ec204af576c1b9843ea6ce86e607e948d5cf434cd307491117748721811238aaa101666b135fc2ecc5179692eedf5b603be39af3ad305e12b8eb51dec118b3cfa84d1b7f06b4d39d160bb0a960e37031b6246fc0c7b880c45e0a4b9a9311f508008e96176a504328e878fba0d20837c4bf2f1e3156fd8d0680cdab23267ff44e4e4e4f5a472c2e684f4948e6469731d5ef8344feeea350ee42297a492d58eaecfcc8c0b142b885cab8050609133ef99a6e33d09c0a2f988a8181807dda500fd86a0127127b4240e643cc623727c0592608ec9e6341a75b04e6c50da29f92d0da2bf70fb8b157ea924f807f9ffa1c1354769d8680d19366cba8f1d2f8ddd855b1d9a9f039189d086de3cc6cb16669e364434a19cb682c620f3209f610ec31b7fd57a284736806f0809bf1072c3c57285654a793c7300425cd96f960c43dbe4d90e0e335de4e26915d408d1af0df3d9e42b6aa76c8993c59345aa8bfa8b46d875870d20eeb6ed6e30da6c547979a46bc61b7e5136391e38811ec43cb51c715ba512f4f251f145a1dcce0807a1e8ff2c58a7ef9686cad3d52068d6950fe22152c1a1ee86bd682c5f140fcbe1825dd6dfe1b99f90aafcd2cd9c663798806bbd563466ea4fcd466753529d35489d9ada72e593f6750ddb48dfb7a4a61c50fb36afdafb9dfb694252e8834bbc3a10e87d258a6f5ea33344583039078d056dd7f0d8a08cb736a9256678b7d0accae65e4b1357520284a2c9caec892eb9a0d980cc938196fd779a4b034596c566b2b47c62fc383da106ec6a738fd0e7f29fc205a352fce1ebbfe698650f0e4a1558c9237af033d6ac195b45dad555db8f62abeddac6c16ab5adec672833a5cd29e529dc903b6c788cd46edada86c90d0b6ab411492185275b2c2ceb48f6462496d558f02d37a444f7faf4e7de9cef057adedb94a79b44a162c3aa59c9190b6fef4b49ee2e24e78fcabf03b62e5633f955d3a0e1b33b38e84a2294ae844fc0bc1d7ae0f9f083b0c1ee8e1aa606e5640ed2d3824ceb14091e277bb60aaf66bfc8d9be00348715c64aa8eb5776ceb8089ea650d875c5e31e83d4834bcaa8a77016d8ef5e354383c96e464d0209a981933aa2b0cb72679aad1180d493c7c9949f83af251ab334545c3a36825071adeda622ad8b2df044a6d4340c944a0b683a16137b9b3f18ea8be3649c267388b8e831433f095e9da76c0312e9324432b84ac7259b23dd90212caf534a8346810e5eeae484b56d76b508161713dde5f1732bf009e17dde607d6fde1b13eb22fc181dcfe7241150dab927d341c1d694ddbe8ab5d47f83183d2556c659c0df1f635f79581ea9c83263f72cbef8f9ef6e0ee9d36b9c68f8f05b95c071555ca7f8c6f01c14d506ead5c368ebf446216883cc3d42da9d131d10ce2a2d4cb7adbe1e039fd1c3c9034ecef011d695cdb43f4310da96aff8d6843ebe1113e57a6e1274131dc56174263a9579017dcb67b58c0092419ba81b0efef6be03d98da4d2431b5698799246325798b3cdf9e57376b335dc8c3be458c46147f46663800aa4e4a237c5fb322644ffd0cc33d297156a967042550a9bc1ff65c7f6c5c0d7fd81b744be7358c253fc79222ee95d6dc1fa6ed875a4cec9f008945d15e558c1366cdd37f5884e3309f0ff38a0bbc793663edb01f2a47b1c7af644a12c6463344a471eea14fc053bc08e6a10534ef5365a635ea0a04c47a62c37299f2c31bd1865cf5ea07a034bbbb83bd884756e7350af0f5fc87da625c47313149fd942e1d0779246264855554586ff74d2c56d0abcb66efe148bd01c9852997e48a181fd0efccd46802749108710fff4de68e8af2d1fc5722a9b4e23d89dd5570bee57b4778ed5038da229fd839190b9be1ef8bda563a8df516e8de8288f9040587b7b342be5f42f4f8e7643eadb5b080f7565a06abf9551ccb888c19e1b8090a836e178e4ef9662a0630f79b9915793fc66f2fc27ff96f27a955f6a79b5cbcfc1fca2f16b86439664b443a4401e1084f7fff1afaa5ee9da7fe080b66c5f4923de68a7ccde4647bab9691c4dfc7c34a7971531a24f994beeb5a34473a45df9491b74ed750a11866543ae205a039a8f54c4f366cfab291e4252e134969b0ad7c99c678ba23172be2afb7cf4962ee73352b5e1074c193212562befa44f635dcd637063e58651b45b91d13e158cdc54987e4e1717e37aba0ca64f8802d837536d60f87fb12510e8859877c9c53ca04b9e7f1e3152040831fb7a1c4e94881e34499c2cc0b8211d7b8a42f3c894213c1608606f983e7b25a11091bd3b215210ed49923be2e0159deba1806eefd0a8b640d6df80f008a83076fdac8a2feb30eb3e624f04b673de1fb8d500e569423a253be543cd3a3f3fe64934c4dc98f6e43be1f1075ec559e54f97bc0014cdffb2e3e7ee166beef294c7df099b6ff4c8a44c76738535279dbc9ba0e593597cfdb20c8618ceac5d118d4cc1568e9b3760e89c7b3495a1bd1fe1bc5684800f97d9ebc742b2ef6ce320057c4027395fdc1d4356e90ec8f00c998039c19df618a879f377f5175eacda8576f6a299d302ed0b26ab58a89491c0130a945c77e8b70ba28f72775ebf08d5045c99958d2840d1a5152a74943d676e5dfccb54781ba9ab180d84817f6733467aab2e2675d0a5e7d881468f6c3af6a2c963d694d55c5a07ca96fba427686315c0c54d661409ebb5b658a621baaa5c6154d87dc7a3fd17f0a8091f77410dff36ce6872fa830fcff5b506a07eb05c684a739d0a0826089b9a71cbef2c288adc1e231bf8a6452e33b1893d4cfc3ff3cc9bf31ad2deff8c219236fd87ac2c25400e8ceb05c5cf52f30aff99db8e70389dd2dd8ddd2874a0d7adcc779ddf65b06296b6a4dd14ce722e5e7a6c95e0bb6846513232522cf9aa242009ab841ccf203502cc1774ce9d864eedcb689f5fa870081c0f8fb588f5fd0c12d97c7a94dee9cbfcdd0e583e43a5e1a8f53430a6057e6de3c5ae56528428dd1d70399f8c02039a6a52863cdddff01224587e16f37152d9a5204be9c0d8b705f7666d8d96c29fa6340d9d284353ae925b04dd92e455d30a17489c8dfb9d9918ea48a0d26431541277f344d6dcf6abdad4c7faa07acb5d51c329aa412122cad1424cc6a7e558c5f1c423bf06b14cfcb947d5a72e4ec07781d4123c17c002152a98d587db1b68dc3f65bae2094c843470546ec93909cb644875d33fab9c7ce442e2e7a5d630bb41342d470ac3ff76fd561008c6880b2b9d7b2eea6b07fc40cb9995363511d9d4cc557ba1210bef0f820a4d1c60fdaadf7206f7fada7aa8dd0243c853059b859a211d7b056ec68e13167876205dda4c79104423045d39998b639c4dfa167a91111c0a5161fbc1180e57d44eec3444ee6151015ebf8b6bfcaf0f51d05e93901854a49754b512031d008f5f846990d4cee1bfe4d42c47b126c41299e4783c992cbd977b96ce54169af2436ff3dd1b31d44ca9264ca42662b33313e1f34406fa6ca76258d441557268f14f1080fbd1ac2a2cbe31d5d2e83eedd4b08c834fc9a3996fa962117f906a4934f913e71f082583e67ce22b396e3e94d66d5e01ba08768ace1ff428c9912682ae49f3b4aabaad61d16f76dccd8f11bba92684ed34e76406d921766571212de25357189e790754414bbd63cb11bc042600472688a27ac436f68dd5d9235c9c1e8a36d2cd20d05b602d4f6745455eec19cc8e7d04ad88f02583719e17d3e19aaadb5025f4887ce8f2112d2f67fd9950e4932433a0915cc8fbffa87c5f2135230174924b9159ccd3b0e1fe68fe43f8183c4ea1f7c300b2145bdad9db0ee04459ce13ae286d2f0d3c006303854e0a8e2b81d2cd647e1abdc5661fef8f4f09c8db663ad1899585ebaac986e4e8e9b245ee3b30df1fe65c97a8246a01b339953b1754e908b1550105f9c35309525aa81a7c979916dd7e53a1128d44bd0594c827069152d27d3f670abb7c9e1a2c7e3bd2ee25fa82e79022a23fd940e015180d09119ff8d6bc650152b6f8e3633e52ca8c8f714a5906d7db9bffee6f4b6f5d374a8868365bce4ec26e7532c385f5c99b17d113ae12a414178d8e7d2624d67f8cfab050ce8c983cf143b9c9784f414b3b5e3c467587f86db44a5a6227c5d92ec1fe2b1e921c46911dfc8606a5fe0c274963fbe8878aa0cf624e131907fd27ab385944ed75992e1eb0c0266f309f89b1b31f9aef24be994d40ce3d3839b25fe65de12fe5c17b6013c0bf9ba72c8429c90b80cf520af7b67c126cc0d2a163b9e327420a7c3873a1487ec4cec3830988e5306279c06b5a9f79b0b47484bcb3c8a8b81284408b079a1901ef285629b89960aff95ec6c1a8329fa75c7b2369704eebc5affdb0418f7ee3fbe319759cd648437e9f3351a6281d1185df1330ad052492923742a231beaeff8df13cbf08a72a055795fcb09b3950aec024503c258133c05276b620ae1cc1eea1e4c226112238a3c4dc352c9ff5a5586b38bea9c9286ab3f973bccddb4c1a9cda6609b730ba69a3fbddaa1ef086e8260a4133f35d130ed69857cc2a93431e08614659205b41205c2f54359bc0d0b0d1294954890f6ab886d022e0d609089ce27db349be210d453524a56e0a75d296b81c2d25fd544f9264eb82f3207a46e6a426a2c083c0ce8ca50da08e482b7fd84a90a21e9c13d8219f88bcb17a8180fd7fad129601b3cb1be4ec9b77fb7fe2734c7e852ee4892f3b1cb4366faa77ddd59e83d3b309d3a81c3835e4270d5e961c17684a455d19cfead64363a03e50c78f9f252184d9013dfa47c07d1687ab808c2867668e0d882390346dd4e4da19f178744b86a8957ca7ebf60c00b6689ec280146b706c86b60fb991b282c21d2422881c1ae605bfa7f0897b6de9993d860ee009eb06a25f3266b8363a710f4a4b9bc3166482e36b5a54b9efa7c13a7785d3d6d89beee61436bee22c1687b50c2da168b10824f86a9e6e93575b782d9597e9f0624f544779818597dc867422b85d5c7b7bf3a8800b14cff05570cdd1e654339fc404943c16dbe5ee1f1d3f45dfd5c1875a5fa94dd6971c30931c2a77be5ac3591cd6beb8446c7f0a452d4aadac2f486c21e482f356a21ca3f30f1621b41ad34250b21f2cb84febd5840a27d56532bf022fa668d7bfafb08b832a8f3a75dbb543c0458281bc3f197eba1b1f7504ba073ebf6eb34a8f7aeff144bdf595c9642a88b52f492d77e9fe9c3ba54592344813e6c0bd80dec7a1ed7a40090170778d0ab7a73c53f3140eff586914f26bc102a92a2ef495dedf582886103c0846e4516ad0090b307e4d4a84da4a102f137e2f357226ae100249e6b85481c3165ce9c1a0b16d2e39a41fc3aeaaf73f48549c49344103e1e6591fc6382f701d6f95fc01cce112aecdea9a36f191b60a824ebf4c76d2b601836a5a23b9b2361d7d1978138eced9c7d22a85389052296b0b08d8f8bd3ba33c415dda683ce0df805bebc85816c40e785b9384913f32053b4afd8827dd2020a60470a3f7da2f23b056662cb6ca6853fb1f3296525fccf321a2c3412a7114dfc7f3c47927f69314e165968e4dad23c1899a603f3c16faf65b608387aff87a96de8b5461cefb854d57323d85dfa49ea2ed62dbe90bcb2bce6449f890e698ef0e050c011d481d659bb9bb7be54365e47a3163e2abb72bf21e0cca328ccbb68037ffd1f023c072cfcffa68eabd1586814fc0eab93b3ed6e96a5eb3b9aa3f4841724e509002ce09a29c5099ad13eb986c24f334b1fa49dd4c8fa2e17c48025c3e7bc3b4a69ee6ddafb508006733769134d14028cf2fb85bcb384add6cfc707b67620b5d7bc252c2468fecb027c295254d732829a8ea9018aac16303719536a3e0ac95c695b965a7da25d8337d9721d2b3a4ab6aaf9a77475177845e786b789c3afe0c0fa02a994925d345f492ff8056bc4ccb4f588fa16b58f2d497e4c3aa5bc2d2246258bf9f534317f5745b879c85b37aa6cb4d90ff01e7b950e0108163cadebe66011da4e50dfbfe02715103124a067870a5acc8e4c721cb1882d2a00ee81888a93c737670f7c9cbd11ce0dc284dfdf23d8e4fc676398598608507889ee357735770748b1656b65da0bdbd9636570cbf4b639df5f926032fd3f6ac04fe1e46c6153020edf0cc1bd1f5534aa3187e0f33d08c1ea7f01e197c60c781717daddd1fb656f3a5ae291e8aebda3deda97dbaca9a16817e4b0f6329d83b114bfd6b9a59ce364b215bff3a7a3957a6d8348c13396280bd5da7c42a18423b361ef5c0debed5eaaedfbccfcb2ce2912eec9cf115b2dbcca61bffe31e79f402caa492b2f39c2433eadd01cf15a601d634d8a2f3308a6596291a2dd5e428b583677c14c0fa5411c2f6228a34a162e3e525b275a68ccf283d1cfdb1c671dab75dc41afc7967c3da7f6f1357335377c61dcfad4ad56d2ed6479787763a7ef7537165858eb3f8f1e994597d5a0647ac14f24c5f1328974a21a53de7894a15926048d58e2dee9491b6a3c07851c556955537ed5e672043032cfa2456b2acfc5f96925abf273d2ba158d8e0e78fbe8d3cdda6ff3787778e309f98229ac8adb608f244cd8dc721fceaa7f678487b904ad98fc03bae7ed439e439838d4f78361e05f500c7cd189f084a4a4df5349291f4702de37105e4d0f2d03ff091ba8a74da3033dff71478ba6999745a35c13bacfe2c7808089e49b82be24dcc7afb193da0012a3b7a9261f318388296d461164e0b53d2296b6252d18cc4860acf58a8389e9d60e9f5065d0a16d3b04f816a07031b82c39179c8b3740eec5ffc5a103500c14e9367d148e323a619c75c24b7e18e630a8ca09101434b392c04f642f3b4c30f563d1205f184c130afda38e2c0a9a14037a634cf061cc2d164eb62992ce5b40a2ad86b15a142a5ca42fe087a9d5d391646127e432ced972ddd23c16236bc52c7e31862bf10ec710f1945c33cf104ca746a1defe9a44d1dab1c20f0bd27ad86e08867f2d37c51854bf743f85be48337576c5fc0389e05574f89780977e0a02eed4e0f4819abaf43de761efeef438bc038cebfbb9d6b99d63e323c97257b200fc35bb791ad7c035c2386cd3a20360e624e0d8b60a8b5d59d5a6d001397ba48df653ccd072612878993d4fdc72b39649c27d7dd02057145e42c78b137d5f7a932b5e145c7a5304a659d90bed42fbf7173beb6a58324cf4daf9f3e514320e756517d45cca23aff9af3e66e45c35de69b71df5db0f50b85590ec4d81e40ee067e5d75badc30a196c48bb4375c6299347d2f06b7db72300c0c03ef9d93eecef89019cbaf9024110ed22527f77b7bb0ec045e2b61ec435239d3fb77d2023e7f1e3c6d3b1cf679342395047ea2d25e064a75590535eae5ea7b105e55221fa4fe612e0752bbf76b42727429d6b0f5bdad01a4b86259c17c4851a958534228af66092a344fb64ad211e699328de8f65fd2591d19d86b0c88d7c003366100dde18d43cc66ac58ed6e3423c59769a891fd2fc46e806cbe749c3c715a03506336d64450ea32677475a86cafca67efc479d4cef6fe308d9ff80d4d5de4ac0e886abba94da86c074b9723d268434d3bdbe72b8429f65313e66e65470678268a1a5b1fb5a2ea6330fc7fc8aec927bcd2d1b9a1ae814551129dc98f410c7b38009d4fc566135fefbe4ea7cd62eca8363eacdf9e386c9959f0fd49ca0c27492c52f4e05d519841610d780a831efba7966d781931d84be7a47cab132a7d18291399952cf2d45c556004a8d8417d1166803d8e9a240810c42be041101c953de5cc43b406c695729a1210c792620afdb8ec25a526b07efda13f9850bc738f6427ee2fd3bc037d6ec49db799d77229e4b114f2be8bcc325c46fde28df6c6ecc341dcef1ac6279656e45b431162bbb806a88117247bcc78aa9b6d0ff6c6a0d8af3f2b43b61ee62fdd6faea09424fbe9bf0f403d429d94d24fd9ecfaf3cb71cd2ca04544a007519ad06f25c6a5e2fedaf07eaccc92aefebd9c45a69a162aae391893db947a6298ef1488f8eef3087e1e7abcdbcc761ca6a62dabb64504dee2ed57e0c272b9b4c30e7d88f69a5d34eec54dc3ee4e2d1adec1a1c374c441ae6307d3097a740c8d340609726b0d950609b6f762fad9048ae93484a2facbd02168d97914a6aecdf40131d268dc5fd2a5a19dee6ebd5fb76db349316603ea187dc4a2f97f77f1e3318dc8f1b13d09973ebb27833ccac3c134e1931a7a9e86b60c50bd880e9ab9586e56e70f373ef5f762a2e13ab10119086e8fc8d9fb592aff4b8b3e2e9edc575ff9b51f160e13ff207b6d5eff1fb790fb6e0c6255a6c028c51d1564523cca4c76f6e9486d99d7b03e126974f2ddbe8d1591d3e2eda566ca7c1214c8e4dfefd5ec3e15fe4838693db4a19a639a84001f6fa08f702b0d9f2691a8003307885f1e51f70337c23ee440c0d91f0f53e9e6046efe9cf610cea878e05a3ca828e3e17d4d59f7a07bf927f62c40b46cec9defe93c5360ea2e2273d0510d8b79d16a39c9d4c7867172cc3d24c0a2c1a76c3af9093f77dae2533b632d3afc1245044fb7ba6197fe7e205d098b68291f39da6410a7d45c4921d2346af9ed1ea57658f6a4283d245af6b056cd0a6bdc71ac3874d629177dc0e80b6f849dfbf3ce1aec3c798740fa1f6da3cab102aa7d1ab1eb539c2dc0d3691a255548c7ba4b103dd09c199485bfc25a45d903e9a81dee701d9eefb2a5b88a7473c5ae8b6fdd66678a45f42e86dc808ef5e7f300e3be5c0a3ad3e9b071490482481b6ee260da3c1eb0caec37f30a892e2fb95ee7b7c284d2244baa78d9dc1ca58932f416993a2c12a73ed89981754408b3edd21c5736682a45c874ba448334a0e97c0a55ee7bd890d595cae60a13cf36e78c0512598522175d6086d3c98119a19eb96046bebfecbf018fe9c488d90b13d72a8c0b9cef543462fd1f7c45d026174ecb58328d2895c14fa5ce7d3df845d30ae43f608313576857834bbd64a2dc63b6cd2566ff35af0853c50d4f8d9999d0d577b3e25461cf5854a053e6ea518b4ba1666847a649db99c0e277a6eaec35f4c9e0b165757bf487425c0de386987b8ec184adfc1936e561b425e951f30ba98d405cdf1f7a15931a0f483e6eef6739b154b6ff70f73567680c0ca52a5c3105bef34a26f2ea287649b6aaf8f789289344893a071eb1a95b9e2b446d647a9fddb6a948a1aea010aca943f381771f4132b75341426723265bd4c659e71af5f50e47004bbf6b1ac45c5069e75ba9e246d44e138615b33731cc26290bf66e760c8f81b714218b3e2a9bf38798fafe4f731329772b4c1c8d9e03d98968644304bc20ce66fbff20eaaeee63b87615cb0598e6474e3c40d5ebd84443d1f3111d390a1df953c8af788b6591590c908e70dd1df12855cf370b24cf9ff068a89688b0e811611fd5ed25c7eea59771412333368c0c54c31827c2098d71cd5d8ce8c1331fbd62f79ffe3091e8e71cec8f3c2755d093e3e3987b92a33196ad12f686d31ec9f1ccd91b19dfe84d18189171a4d2ce65134d86268f95b2c3f86b10ad9c33e7aebc544bdabd15c3fd8471fdd3a1d05b317c98286e25d5065634f690728b502d9fb460636f226847feba1d4de1b0c516ee0233722aef94332e4c707526e8d5e581b956d957877efccbcdfa90d79ae373ca481bacec873b70776cec22a0c78ab59b4c1b6a91a0a68d6d45d0c1a29d6b61be83cda63289ed933a1caec5fcca387c3167cf56de52375ba0f5686eb0f7a0531c1725b6b1b01d922a041b127a7a47e2e8f59b9751476fa3a2ad7083966dcc42c8e9c97d830b8b94492933519af3e0e24b75695e630f30750235179ecf5ecf215c7e8a9d037a2d03fa7543f556b4855c302e0e16b5c0b6c2f9f0d3d4c145a2e4a40c3454023e2eed7834ac55127d765073105518097e12ae00fba16ee71669c6f1b82b03ad6098be244e9280cf2c9d21eda4dec39bc279b764a07ec6c5f786dc6743feb1396c452f8cfb8aa7caa1630a0f980ac66dba1ced129f0291081e9213ce34c08b187505e85158a20259f38bb05241f9a15f612101fb729f499ea646211357b13d09f7206f8b8ac1bee12a76db95c12e4da6f1af1cc85f4689b93dacb23efbf1d79f9d3594120b5fc2c639706f7b951622d693110080ee39bfcaeeac8d9eedd059bbdc489d923a6b5bf65f5801e392e71ffa5838cf0a14d8b57e7a1a4939c9fdb8f89b9eb3f796eb8464055947162a9bae3ed48f58457b197439aff28523e2fc240a10fea6083da94bdbc7e86786d148763fcf4a84599a38adfc9c2a2dca1ca2304277aefc37baf6577b19f76cb87b2107aca6a947f6fc1b10e1ec02fa4bac77cbf9b83db74a47f7c367de1e6be77b41ce5c78d1ef599ad1119de2e13a1c7575792306aecc1ca7b4cb52eb44137ce1d20f371689aaa2b000687f0be373ebee6586515cd262d1507e7943d7ede3deed0c7c545083c8fbc9963ae07d85b2f40aae9c9e800faba05cb144bfd0209dd01f52f541132ca5e1b3b7d4ee4362c666bad2a0c8dc5a87c6a8b87c71930052ecb0d39dbf8c037211ee5bffd1a3d6d15b6015559b67a4acd1e9ce0fb2741cf0a4627838d752674470fdcf5ffb3e8e966782ebbd259b75df8ca5e46d157e5241a3944ca8d59623935884f445576dbd4f971b740647786727a3a504809b739186eea5ca0c12f6c7dd586f2ef70eda801cee5984bca8e4a399c772252dd9092f6618e8ebf44a132bb2e727e9c07fe56dfd093763d6a0c0218adc54e17795d95abdab986a2bca1d5158ae8ba2b04dabecab4fb68ef017ff321315ec635ab145cd0cd71e5706d78a555c8758c401d6affd30de2ac3b2fd70fdc97f06e83cb4ea7d5e547a0bead0e7f83eebe9620895792c6970fd47d8dc3a4141bebdeefaa3c97c02a4f85a823bd6cb183ba1b9b871cd96681a545c23f44733efd38ab8aacee93e7fcfbf2a5042434134d625caea1a87966937424ffbe3a5fbd25f933c293b5d20d3c0833f737577ac1327f0f776e379c19469c12e8d042e91faba6cf2d67ab89dccf1314706b87e1350d5ba344800b9f8480bbaa34567302a490bafe8cbb6d4855ef312c54ccb92b317a4de15a3c45c9dae8083de461643c8091c3bc9633043cf00bad89e76befaa63d217213b3ee8348dcdb9d16e4f9b953f06fe4f8db292cfd38bb08831194058995cb869a230178b364afcc12c88e0f8cd1be36332a7333ad98f12bbd1bf81a04ee63eadb78eb3707329982f9a4842e102bcfe0f394440487a82d4e57e805642c29ec283dcbe2e7ce7abcf7e44226b1e294af8a4281ec68a1d0608e09827449ccf84f5882a7a0711af2512064fefb5d96c09857cc01253b5eda9065de8afc5f4315d917d2ad0bd3af5d392b425dcf9bef2c7443ee3ded224d7b114634c302f2492fc606cecf97e098b651f7e089c12a487064f183d78f0846bf59f5072286a41b5342c46fff63189730e9a73ee43c282aadaf352563bb127e391b2ba311c836782108dcc3324df0bd60e2a69e0d5aa600bf1e8fefad47664e4bbeab7b955ac495d26653357d795747f9afb50a58850cf87ef7f17d39452a27dcd6fc4a94d497beb9b37d12d3895474400caf9bc66fd4cce470655c645e8bb9b84796ae1bae03e8bdc861dcf4d24ddb6838668f13b8ec3f29b56bb8cb337c6d9dc08dc7a37cd390e234e44ee03d9b31896bc13022b03f10ef0317e81d0dad119693aa16496eed55290b4e7228137389fce33c416aed94ab3cf95908f3a92ee2a07dd321d4a72beb7468ecaf738ea32ef6bf820025d5d79d67bd275d58988c0ccef5a409de74216e99786ff36853f3a4784c173bcf8637ad95720c69e54e7aa58180f88d00cb06dbbc66faf7ad915d22ac4b88347fcf487c7f7663dab296cb56e14bccba4921e32dcb69fc7caeba369bf20c5867389d344ee610176c916ddc865cfa332b28d2cfe911e8c1b16045c40ac2d6edb5d766f3a631cc34e23afe158ca0dadfc548c7bdbbbc224e3d101f29d7382a2a11b1076adfc1a1a6ef6164f5d6ec10068a1ef63c5050fe08f66de31a5d4d980379a7066d3832874de19babfb18b46b8f90d58786a58bdb5ab39a6fd9b82f228a36e7fadb696a4041e97a891a204c3e740f224df35796dc12a997ebe60a14f4017b13bf80f21e1b3b8cbfef513de9dfd18023e749dd9a6254a25516000d42b9634db7d12d37e6d47d89157359f4218431dc574147382401c1af2cd8e1445d65d33a1776e093b613a0c7a3c7249cba9405839e8d018b1ca50b720d13cc6a392865e31635b60de9f4f10ec40eea42a1a0dbcb2abdd70df909d2bfc88eb1c8683c78ee789fa33c74be264c1fc015b0da86122daf394162ed9e6e2e39539e4ba017a631d3709662d95b1a251cd2c333858e735db5158b7f4952ad06459712208c316b91a401637f68b88d1926fe1485588d71fea67bf78194c89e4c9c24a4b798015694fe84dccac33a73a6710cf42517b54d424c8a236f174f9dbec5c7ce9db1bd0166ecce8df03d116ccc6183a8935c646a67a704b98a2f98e67130343168c378c933efd6ee3e9a92ece5e6371ebf9ea5a16fb92e87e32541ae8b8ba31202cbeec7821be798d60f496a1d4307bb3a53c9e14006aff2117c498c341ab5466bfde49c46329089677e9d1b7e8e01da2c4439b66e44a119135d5edced3de7f2f4c231f334b04bc0cf6818683dde76ab6234a30bd20cec33f814ae38fab47a35fcecbf1d0d774497ac089dfdaaece168f2ef98ed4c664a2bd8e410724697a0122f38473b49ed66a6745a1ac654678951827d5203e862a10272188fc4e2308a326ce097c9e6c23db6f8f96bd55bda215f21c9c91472f887db5ec9e0471c60a7c4cf3e3775b760b3cb3a71101b180ea9ab5ce4387e5dff2bc14912fc6ac3b9914469efffd98f69cf1f5a9c4220805673dce33cfeb568ed443c92860e512c2f9ee11c189fb261ae09b07a0f742b571d08b6ede5d9f1b3c43f227df798561aa17db5b2dd0c5f4230e6fb6fb2e0c4015a59cba327dcd7f16523149f0cd6784eba4995ef0d42628d3a60a51a646c4741cae6f2bde451db8a33be0245c1a515eb1959de0d794651ee99580ccccc7fdad0b38de275c447ef509a11ec70b9fb09247b1a1e0f16ab605cfc30bdc95a69aeb0cf9f6c0c692ece0db1b66be74dfd99016b63b82c9d6a2a794a225a666275b0a21d07cd607a6d0c61f2901b83b0e8f74b815605db9b6a0d1b53866854ea78666a85f523bc2e8e061cd9fd632172a3e9524d47191c564ce264b9e1f589f58388430e5af8adcafbe2be09b49ca73275eb9d53ee8c5ea321dad47534f48e3f8279607007a679b9064b3dbeefa5da2fbc3ade63ede1d7c44ee414532a7983711aa43e57ffa855265f88793348ec8d2f515d83a16883695def7a05a2008c20a96028d4ec541b064e5ac430023c8bb49d764475058aaeed07da2f7b42be21b1b9fec700e5b2743caa6f75a45591dd92c858e7520b6d19fdbc09b00125e5715e3e96cf01912b786d0635745f28db22ab5f71bb1e20438497a91a92c158078658f09651e68fdd828be44e6157f579082535d64ba565d3b87514bf54ca10638bd0084b6e918df243ec0e86dcb8ed76894a94ea4edbca73ab8178355f7bec6ad86062a865c488b2d4e347a5665e6f25f1b5d8eb513d436d900a459adbc3fae92fb5aabdfff1f25ba50b0cfa24399a2b8708748428f69b4c02fd84131e7edd8c6f2428c0c1bfb79e9c32942d5a82b692d4928769ad34b802efc78463add301124cfdbb3125eec2c5191bfd8ca9e4f0c8cf2a3a7ed0ccb88b6339a25b48a8ba4b2e93464bcd915a8e1d1c5ced98312476c6d4d9d14f234c3144689b86310f2f52a91a9a180edb4f054f8996c6087eec83943d2991112945ecf31cdc41ada670b6e3a960b60b44105bcc57c11a769ba58515634557248faa9c0f2f91c214c0da67b2ed2ba9db0c9eecaccf145f291550d8fcedfd3b8ce8e5bc2820f913651aff08a243095c132933ec5f9d5cbd41f5141d9b85d8ec01c3899ea8c4b6789984bdbed8d11ed995bcac2cdc2e96278b5ea0bbad0a296a0c0adc84b0daea90e38d90c33d11597ed904e6bcaf35439f82247359d80b8c330a42996c726eaf76955d438f6cab109fab17c3d7b89d8398c174e52fa3f24ca1726778866f8d1ed996dc0654e755b3ff15eb12cb90a9ed26ff0f27fc92e22aef8c9756167c52415d23620d6a5e7da33241e81ce3a4bda7e31f33adb016d4cceee615ca0ffd300e5c82a982a01bb36e022fcba32345acf4eaa76c3168695bd3724a2e6d21fc4a6711a828cbbd9e0264092a64a78c85f8216857f53e8ff5c75c5a389334764627ae9e890793b1ea603c3382ab6e9fed04b5139d6f29285c7a5def72df4aed58591b7b8229b0b58780e5043465b59ef0caed0a814d129eabc66c515d227766ee28bec6dc4bf4be57f5b27021b556d48a5eb95cf29fdde9fdfa64363499908bb6ef07d5f0189a5f2d6bf66f3728a5d88d494fe7988532b82b7014819e2a18dff44d2c89b4d39c2042a8a94dc88ed6ef16737a814854225d216e7d720a211a3bc4cd9cc446b3d2d80a01e24b40e65ba9d31d8cdbd942b31de500b492a65f0856c8448805e47c3556509c3f35c1a8cea1d7afbfe1402ddfee41974b3d6e75a41adb360e67fba9d27bf93928ad88b1848a2b2ea136aace5460b8ea52e49c4acdf2c7591d328bb2a200d67b417114cf980b4453ea57380acfa45c72ea23e1443ee9bbdc418ef9524fa308f1f8222ee5efc0111ca92c8022218647c1505f7c3d6ac6f7dca6575ba498cc0849f59d0a7b5f80863c2ad78bf36d21207e8409f7fc13d06eb93052fc5c1973da5f18faeea53639f572bf2153aa19a49bd856446f6d1c7dbf38e4cb60e09711ab52b6aed8d7bef6764f72a6a7c0ba6437e76eff030d7cc0bc8f7c386d1cc191268527332f85adb36c4ece43183a40933e276ef87ec2e398f59ea3f75a57d1736050822df9e1d9186d4ebc7e9a28ceceb8e4f35c40875d12900e05fbbc10f0b2cc758240b4c160673e4567f04c02c603cce81bf8495b010d0efe11c6d36fda7759dfd981ea02225e96250321b6706d7084aa85e6306f398fa17513b72f48518ec4e1c0110c67040c8970c1974897f27ce53b884196eb79510a18210c29dba34befb05295cfd854a2cb131edf78959a05f25837278f92ee45c515828c3105bd1321a71de532051a42dea44c1f74e27e1753863f27122535947ffe5c99a3a10a2ad2e5b014adcdf768f9882c58de56d459445c27b6bcfaa997a77bae50b00c125ecc2055f38b715732b62ed3f7087f49e118224c676244ea600fda38ba018a1812b066ae40931bad1c2da21695a5b869aa7a3787fa4e6e432dc3b8b3ab04b1116fa7629375bfbfdf241fb087cbc3c8e31826ca3beab1070a8819b60efae6b41a28e6b21b05866664197d41a9c138572dea1ddfeb1932eb9a849511c5dccc2afbefa7b18b2912b50d420c219c91ee472830733ea1aeb6de150479b239f5514e15fc1597b6fdaed06dcf31260a7300bfe8b94e450e76ee7e1a596b7c42bc3919d341f33ddc53a8f6132b9b4369944ed19fb05391d62acdb66954671edc873a33b8aa93ebcc4318615c0659100a51703287fe3993420d8fb165e835898b203e215aa5cb1a0059bf95412c18820f13f33f34b8d443b5d307b0e27c6ac0182e55204021213ff0b3e586b227121ea8346ce3c222d7a4c206c90904d04401c9a7f0a39448209153c960d09f8ea8d5d97dfcc10b021c786faeef6b65f17dfc448de6c410f0fc7c68e1fc8e268e73bdc2456d868a31a91608188e8911e3ab8a1ae75cc2bb2e088259561cd4a35e55c28e40fc236fc44fe6da1da41629e6186ab8c89218f42f5a6d50e301c4349069c53ba9865a599ccf67756059350e759dc6b4b6d7546af168c0dd6f1d50d90bd5d0c81cbab9a065d6fb6443a215f59355a8dca27b65b869ce86bd408635287683d5ac8f83120cf5182a4b12d7c5e06676a19b401f953fda10d1d934985b286acb40dcf45f01cf3843669624e19458006ba54c38a9a7ba479e375c5d1a28f9d865c801203fe5fee8e0ea739e1cbf53bb48018d5fa38af8e04cbc909dcabedc796bc8362e645d7f551c46bbf94c571cd859e2b23d80da3aebc0b02bf5a6826a9d269145f142742e500b808ca8302c156d3324c52357ad4b64779983ec905dda34d8417880f1ce4cc4fd19200371bb856af42cc509df3311627ee9e9cf21a9d49f02c70f0b0b4b62073f4526cc14c33557b95485153d52c902607ec428be07ca7bc7123ecf6b684368c6dcaccb8c4f7e8f13aaf5b7025a73c1b9f7750f2013b61126a0f4d1cce1181c27354da901dbf83ffbaf27fe81d85ec93b97188ed8850a6c8303a14e1bbf1c0ee0d1cb4bf7b6b36bb28e0b5f9289c2c788e3a8bc50d50a6c03d0e4c3b75c8678342cf7b671a09dbf7165f8e1e7b063acbfc5bd35960e30221611d9f80bcf3038c0a787225fd3038f080f48031ce7039b86d31eb7aa4a9b701f9d44a3af9d1cf45c6d71b6d8e42b9633c8d1d546b5a486e7f9ae9e24d46f0ffbc6f6c7083889471c85ddf70a03283760eea35a0307f006720525967a16bd9967a1ef8a1fbcb4593b6c9030116fd583635b44ac308128c22ea6fe0f5acb1465124e001bba8191edd183194289f5c52c33ac4967f92b9967a2d202f76c1f2d5b9f978651b0d8dc755b5302d8670865cf3cb69c9e478b4d5bc670e551e0e4119a3781d5128be2546c9e018f0e6e40d8b7f734c2857d4d2190caabcf10df0164d08e3ec8625f73c69176fed57364bbd0d309251c9ccbe1e766cf30861b19829586ca16f36cdbd78f26aabb837607d1dc621140934713460a162eae3999113ed960096c050c9462bf68ee3da9beed52cabf72408eb85ff08b720281aafe234970a8b76cda24cead1605c8b8c8d3349cb41ec9562b6222d7976452995b9782865b86e96312bc8baf9998842a6d7ae2e6712cd9204e6a0eeed08995992c0f0487b648677e1d53ea3515a8fa90f7fb0216de20e8e6e9f57434bc0c818c92ccc2e13dcdafaf4052d66a5c6e48790e521ffa50b24be82d3685b00bd58231fa50a4984a577349d83ec93079bcc7d32c08bddf0e719fbc79895b22558de3a91a7c59bdfad8c4d24e4a5583d9464b30d388cfab0a3183bdf89985f916535cd151e9bcaac6cf31f27cd51b0132845a316845df20ec1b5df0ca2e1ba53f2c43ac40dd304a568f19953a0c1f867b1448f64838c3511820f5e710aa98a2f69afb504cab7fa786bf0bde2f1af52fcb7743632a23a5b66c4c0ce6f1f3c2ccbd6bf08b11cda48e69c154e9d47c15398d234dff854c87972dfbaf4a97e56a5e490020b81432add31d90e9fde15a359217d8745b133b3bf3e10d07697c4c915114e4709626722535fafd76e6081637cc17525681ef8fe6582d2bad4e2b8052c834c41f8e614219c95a33dd688d4b364aa43bb2a8a0623f777a200d4a98a18429a2a5a356cab4b7c3b2241d8058c830a118d0776d875332e855b8d845c9ca85307b4de1d9402411bf1a0e05aacd8fb9c4a8dead1f30e75d648617424e63c44599763aa7035174605344ef88fb06769f4f485fdf3b8d00e6aebae784d4ac8f72c24a036b3b7104cba00bcad7edfb1e4159cdd3d8b10e1efd23563ca6ef9461196a7d5649959fb545a59e297f60d75d00280364a2408229cf177f93f6b8fbab62a082a0c2cc269a1642f68bf11d02f0b264976bcd5528a1bfa4074265ab68b1c575e96cc3ace7a88797aeaf5261b0ba785f4faf9b2f327aa05afea5e7d576a64c9fabe20a3fce15d8ea80c5a4351d35bd2dd0e2a4a43567f1c097390e075c662d968b87a1c3e29aaa74eb9a6163ec92012d51a96bd008a3e16efeb29dcb11c93217305eb00f6ac59a91960535b822edde1e5e7b12ec164f1a65c6ee87a2593da49c6096ead7b50a4c866a9083904f4e94a0d6886b8a00df3466c7b64eb2902da456241c48a237ddeb9364f35201221ba86ca39c9fe4808f5508f1680040a261d128949eccd6a0380d559a7ae170bdd39025e36873ef5cc9a864aa8334bb50d10803fd7f5c63b3fc31d6317cd4681b61e45c2f89e499d37d424344017d77fd0bc1eac4d394f7ae76cb8be61f72c0c4aa2ddc9605910346c676a440d86b9083434c03768119d5a520b61f8081e5858a526ce37ab7f52c1c59aef26779b36416afb3ac36cd1e1478915a372e034cdba610a1c7610affaf3e300876ddb017c1ec01bb0c049bb0ed432b34f54a8fd523d1fea8848969d5b02e23c4b232a8268c74ebc591db4375f516337d8cba9e526a371f300386467d0a51854f997d66e824d5432263d1fdbd2108a1d6a5658229a86f30afca70d9631b56d5ca1a1b29df8b72601675bd659c07ea1312b6e904942a21d14c8abb96b41317702dbee9692143d762057fc888e9bdbc9cc4b5cb3e79c64ee8a0b810938fef5d0b011cdfbd5fbab1d76cfeae85e04f9b887f5ad46758da810a8c503423feefc651824a2bc1fe3060e8055a6192d1bfc74c6899a5daf93fef91d12f50c5420dfd0d10f568ba816532d33648d1476a6cd2dcfbff53b91e541e4f9bbbc0ef42bc0ae82cc9ebd7dea300ee6de1de7318f2b17fb6fed5055ffc430e4f88b50682080caf3c10007c3559e806bad12d0886b786018195166ce9846884600913b035019e3a29025d27f2f319deefcceac033b3431b8f49fa7ee29b6dfa2eced5100e944e9dd1a3060f2f924e73a6e6f23d4e2861a2955adc07bdd9d9f871502fd4435772f94a970b3066b626f5bda72902ad5f0cc6be7ae0b4b295706392109af0c1fe67fe52e2e053f93b6f53d5e8eeb25fc52e24ff97ba71b3c9fa6ae45baf77ea07acf182c6a46b80a4a0a3e1689773f9121c6f32110f8f1650d28a02860a3b066d5b021bddaedf8a524c7b1a116f7b58717ecd5afbd6eaf1ed960de901fe6bfe7b7802182b4b109e248bc80d09313fd3c43c6404f3cedef94fab99bdfe46ea098e4c4168d009cfb838215951f15c475f5d2e6478157bf4e1510e85c98832feac05a6725e8f7864eb2cdf30e00b318cf45668bee41dc7ab5e214294af11355e729e120de2b4b8ba01afbb2d0684d2b8bda823127c2742f51d3cc998ee55e45b60cebd45dff0e0871b5ad3d6f9f71040376143a35a043621cbedbbe92b04155f20c316f3a4846b069cb90c3a2559eded7dc5f6745a7bb467bcefe5b15dedc58eb7e51294995468babe80068aeca0ff922064dd4e95672afe5978d8c71df85742df558e888e2d744d2ffcd01fcc2a9889d91888e08bb0ded039170c3c3f719930578b4cb0a031e9ef0b5f7b594403467d3f0a8271934964c20f0de67be803c17ecd4ca8e846be89ffbd0481ca27d76b2a4ed1d7af79de0d6fc53ff2b9132e159cd0c8b9145d691ecd6f6c037ab49335260ac1f72b0dc49e543c8baaa4805d7061a3398374e8c7b9a00e191e7b7d2d9d97d6021251f193e2f841b03d5cb8385d06afcd76a8d0df43384c5651c59e640296ddb8ac7bc2a57fbfa028aa0739c13fdae4e07689c35582faab9e3935596f37975ca3febb31e92e14700718c3990c225c4f598e72449c2c37ad5f4116a35f0330960f374b2d85fd6ad045af70bdebed2612f139923bb074aaedeac0f6f95b0416dfb34ecfad729fa15bab08248b030a841a7e59409cd1360791e7a8662800b870566342397e40615c999f390da6b31194a703ec42183a8e4f3717c77de90ebfe85a31bef7bea5ed2fb0ef8019e4b3cc50ae006a9be7d2d95d74e500bfa71ab073aae3e56d77f7cade32c99464b707dc07d107afd2a4d9851010e48a8532225cd36b87fef9c87fb8c85724336797992f717e28af1a0911121f096e306005f2a79d7ca1052b5d80105ecf43d20508a3fb6150bb8c46be43769d9d20f6e7952e3eb0dce9211f78dcd979885dace721eba1d1431eb2b534e79c52ded01fec3fda46d2e0976f80dbf7f4827a674781b8d82e5a318586d111b4421baa718fbd0deeb1e7c7b0d7ba1b3c68bf3d96f91b3cf8e001fbec39ee7380e6ecf4b4566a58a008459ef4f61ab6bd564306bf0d4d06771fc03efb106021d07eeb2848c3f991c1bf7d0e503f25cd8f0cee647c80e4b3b7419275377c706723fbadbbc143e6b9cfecdfe0c1070fdb674f42f239401bbb21d9945c619f5596071f36b8cf3c0fd96fcf03f799eff936b6cfde4646c6ec3eb07df621d8ba10643a393b5c47bf0d8a9668090ad6a3e027d21105e747fb06d14f4a10b6a1a2f9d9be33191eb8e1c306f6dadfd83a393bd786d6ddc83aac939e0516570be9f12da4c8349c08e3d005154e66e86bbd7671b4f6cc589925581437350708385a39b13891216eff8f540baa0827c260cd717549b8f2d17da421fd414797df63688882b4857e74c7e5f79652d66aad46c33d457e14140ee75fa3f191384753bcc13f9c010c2a900f14141f89a34fc8651a0a729bc78dc73c613d4fb9fbc8437e0b05db93039b09d31d9ea2f5d4fcccc9856a8a291dab298ee338562d8acccab5cf5dfbb4921644dba1a289b45003a2811acbe5f7eeeeeebf4a7206b326ced7a1a7383ff3f903196876576976f82b12aca77d97b52f43632ac94fa791a6f80bbf0b7194189322d252ca4986cb9fd937bbd3dd457eacf2244376bbf393c87a1ef2d0fcf8113eaa4c849eb83e0a623d3f8dfcd422498a6d759bd212a5b444456a8406690aa4a9e9364ddda630b7e9e9367db9fd945b32fda6d682427d28bf9ea35a98d947281d1c2567b814e4873e812a394acee8928ba4a5f670b7a915540ab7dfa353dca6abdb74e4c2cad9a94eb0b4761b9220ac474b4fbfda69614b127602b4249920126f8f4af3436bb5d60ac17a34bc7d67474b46686907b73dac47bfdb4f6d40697081909e1c482a84fc98064d611cfa5b0cb7db57455c4749e799e1af26ebd1d295265af2509e38c9c51f34c57bdcfe76213414e4760359dd76256ed3944b4bb4c4366c2b6f6e0bb25b4a29533d7be35daa943ce166feae82f5ae544acef0cb57bafc400852ca6eac2fcf6b8b39e75cf9c85b66cc34324717398b875ce5f24f664e7e76b5ed3dfdec2129ced55c59447023a7a23b152d90c5085b22bab23e6b858e56cae5f7165bba5d9c1f17893b64d745cfef41c80f950245a1449e593ea45584cbd6112e5b515c7eeb06f2e3a72fc80f15511839a33541b03eb07670d99ac1657a864bc570f9bba3a88c184ea8cb6fb5582afda12498feb8383b627b482c96cb6fad583bac141a43c58cc95292383f54a4d1745ea5a4cb1a6b5d2211cca76237edb67e6e58d0ef32fae59d0ed31c8691d11d154ba2607dd5b9d89ccc683d2ad20113ae10d2d303e929427e3c9c1d11d3f0208c8317818a42242e4f39a3af48cee0cb926711d9e1e7a21ea13a2e8bf22413c47ad4452aba4a7336a1911b6416b9fc9e6267cce59f5a5cf620978a547411372ae101774d691fb5b7dc6e96522b912d9737d9b57eb02d35b7ab3c6939c5f7c25c8dcc12ac37479e23fb117e6dca98f33a5d637b52fa53552f2f282686f05f42da23a56062c8e54b5c0d41c7f5ae181291299b378d6577e6a539f216b1fd5a8b56113b45d9dd39a6aa8865c934b096e6c89b415da7f65cdcbd5e2e0b097239c875ba5046b84e9925d8d314278c569281ef3ab5c76346c3ed2e461516c695529088dc0190c15a55982f89740f2f1c0ed8870be3f2a614ae24d1b21b38dc4495d8f72cf800035cf9d26bc0952fbdcd95af611a4cc3eababe19ac4a898387c476927b1dda96bce4d8921e8c2b5f566b3d3024a7dff313393b3136afe47a1a18d22300c9e937919c7e18d7d3f4f5b6929737d3c819f2b634e9d01e9212ee68c8eb15200024575e9e172fdfa33fcc9f2afe29680ff7fd27a0df3f02ebfb3320694889c3f5fd25d8800e72867d4f6a21afb84eb8fd62dbbea493b3c3249bcc4600bd006dc38f558e8779269dcbefcd292ebf8b70f0a56da1eaa83aaa0eeb16b1365cb25e56edd86abce36e8af2a4a76a7642791206cb8f79d5ab252e96057cdf446333fc91a07e0410e0f64ba6313db4bb4180911c79677783b09238c8eb790db6eeec480c067ad1ebadee869d9d860189c716d6e3dcbf3616886e2488bd43c1ec88dc8d009ad3cf59c077fb456082fe3809023f08f50f84b89e14adb45c4f0eb9ddefec40d0a80f1bfed4676732c839084ddee0d90ba469922301f6b5bb913df60c03928dfa5977a33930d8fe666e5992f1647025b6a90fba3612c49be638e06f7528a01d73f1da5535adf655350290f2c4fb8b811b9ea383076c9460012875c69875629d1580bde1dffbd5184c2a2ad0c81c452396961913124b2a2230aab95acd18d36b5e525f867679735535adbe87295f7b6ab8fd3e9a9ffee140fa23bb709597dbefa2a96d326003d188c5e3f9e9f6730f6ebb1431bada57eeca4ae6678f82fada7bb576727ac9fc7e1959f5d02646736464dd0e7db394561541a4082235a040a03f299b0b11a58fe4c26585e56675863ca53dcc83dbef9a6f9313803ce1a79fbdd6f1c0bed69e13eb3ce42157c9defa8d07f65a7d0d6458e7dde9a741388ebaba90018d9910b945ac67229aa49ad32f482f46d6aba16b60afb7deab41a4894e2f7e90b2eb3ab5975159dd0bd215ac679232496554262f48a28caa065146558328a33a852c76bd8cbf97d13180913c7941b2c260bd397e477a417225ac67927a4132314999a436224a72054a6c16666ee76ed9c6f9a9d55acd481a4923c9034eb282ad55249550a3b812c5c6c6e0eece52cad56ad5b29a1f0741bb04286a2a2867b40f213fb487ecf46319154ca5c0a82c18b50546512b4cb1a22e4fd090867609d05732fcd0151ace0f5330a4a53074410633f8ca8725ec753d0741db623d47adc295cf1d1a12494818d64c1236150d290d698a12f9d1b4a587dce67e81f1a2c46a188c17d696683456e3703014e69e355c8f8638343f315e6ab6e4058c189dc3404179c1e194fcdb2eece4eca830d5b5a243bbcac5fec10d5442a01b38e4aa085308817c587f03c746c50e4220ed716c50180204f9a8efd9316cfae3b6a540443960120d7b60a58b1138b81e0d2bbf8339c893dee866d62758cdec70ecec88acc6f477e0e7deb91a4c3f733d6fb227a1dc06c33eeb64f0f365eaa1b7505247c3e6d48e8e3a0a5a1b796d12d6a394d3c06ca9c15940c809c116faf4d20e0228145ca121257561fb7a34d480f461275783051ee610de5173421aae7250390ebeac92268c4a42c21f234b29254b9652327b3747231e0a79881261ad6f1087628c34671c6ba86a21f291fb0835a4e5c4129a5e48406ebf8f46da388ea37134ba8b9aea2fafd1383fb5cba4c18edae3612ab75fce089986bf300e51dc4aa1b8fdd2a3449874892a5c4ca53de3fc788f3d4acd8f1f919dfe5410e368dc01ca93d24ba9f472e9888e2a26d2be0cca7a73d421e7e841ccf1ada9a9cccd19bcdc39ceb9aa9a355a96252d29a5e56f6dacafcdb12c4d0aa98e75c442ec0796828db01006622dd887ed60296518862f1d4e51280a45f47a2ea2948e1c8d8bea913a8a44d8113024dc7ecc0767909f6a9a9d4dcee022f8180541b3037b03133603509e68158673b17555c5e6c460dffc741d41d71184d86204f2ea28dc04e0cfeff25347f3f24d0577708d612c54c7e654538d698f57eb8885da93827d2a4c8385587b651460c0c2f5eaad638f8c4315cd4f75919dfe2942295851aa2679d25fc76aaae36d4dada3c692323d489672cac9cc73f2026ef09fd77aba8279e76f97c3c9dddd30ddcdcda0041dd468acd556dc2b07e747823428281c8e051dd5dde027aa40831408471686201f3c3b2ee4877efe83a5a3e434a2a7d9b1f8a9c73cb81206eb51d1faee4a7ba6383ff5fbe96a7ee87747c5f9a9b493c1dd155d832ddc470e360dac47433983f6d31ef243359a92925082c4011cb9ba1df8ad7701bd9d83205f9982f50ec8d0d08006d73b8f8e2cbf3d1e9591017af9e9e58e43397708d9e93fe2f63be88d726114c14519ae23d68b718d56918b0c171926382778f21716d3caa82424c452580a4b6129cd2e614bae87a5ac9b92339af9454dbd80b05e0d61291bbc0aeb3908824bd817d7c35256c68b410d35c7c3520e56f136966a4e6741acb0d929c352b73f1363bdcc74fb335467a86b79d85a4476fab9b8fd476ebf8e2a56f1f6830e3a98adb01e6a18cdcdca42ca6eae9a236a2acfcec839ce51c60ed79d8f5dee7a73cc6cb8b3d348d407b655a3469a59d8694356bbde1c4180814848be172992ef45aa86118c9c915d5a9f609be004190579f229c88f87ae0afd8a392747e37c7d66a89f586818a42f2be4c0a57b73c8de216ef1864272d8447a1c0a1f72797e5c09b2e356480e09892be172d536377078172513487b1c578a04f2d1afd56ad9553464f5b0977f76036da3db867503484178d9307a3dbf8fda43bf0357c743ebae972067e90ecbb89eefd5f90815a2a16e1a6a0f0f2101e90f8a48a53dd28525c8651fad5ca61f1d4d11cb161c4262c41eafc25c2ef13b4b85694f3f7f370db1eac8e5e71f441aa2a1519d56474644ad14a556eafaae1d16910e592a6bbc542cd13272fb294b2965ec905dbaaa2ba65058b75058a629cde168e84ace68cb922b2b75f9405a67901f2f5957901f4dce983508d687bc8aa0d981bdc135038d182e687dc1ea42b582b5de9960adf7bc246787350b85add7a32bba32b2aa2b0b85a5efd115e831b79fc248f1da60a5accf09eb5925ab346bb5d66282f5ac9497da235da0a0c5edb786584498865396e634a54356a9f9b1a0b56a2323d781f9cd3838a54c3c31b252d44add1da2e6a43427d41c95dbcf56ca4a854499294418cadd9da594222a7a612a9a1f2f79898abc242a75f6d87bd8080bd29ca64032f6eb1b79315af20e3b61be327968e468bc2484b52eaf3c6c74a5c93486db4f4dede13f512194312080e122213d3cb011d370184c09f971945f011ba58830bd546a5fcd0f0d820eb13a62d56345451a96b0392d2179f2390a6665870f3ec250dbcae9d49e4e7911d29d22723ab16c8d3ce9fa045b4373633d6f5cc8c9eafc5412054b3b0f7dd49cccd8df83091bf2d1a97be37eb2629c080d0d518d5445746626919cf432c771b43d52cab9cf51cef8b815768eae43ced082fcb8687652ede1c2234528893b3f623d1791f8c0e72673ab102b418d444a174d30854017f01ed673d165ce7f6eb2d4903f62ff75983a346feac77f74a7bf532ab6a175d1fc3813b2d3ff447599e23a29487fca539eb24dc04220787a6131ad8c4a42c21f20283bbe9a9fab7390e47abe3232e7ca411ae2717b76be92c2f24511e15028c2082424d370218cc31140aa843b95b46706353fce457fff0fb71f058277c75cf53ba9b9b81df435feebba2ecbb2b04ccbacccb2fa7a6cd68d9702b99a62c7cccc3ce7b451d89ed7368560fb22d21effc93f55dc0ab84b8a58ab9ba306e678e97cdecc3979724b645d8821b32887012ddbec12566b294f5809fb62a294d2d108ec1df2e4c5a218a6041636e73125dc0a12d3654913568ac2ed77eeb070f45120787848cff571151d310d8f71151dd151bdace78bd900881c08213f34343b4c83ae70d7a3a14f86ae877d5d528524ef418c4f1aa22b211aa22b25ccc41b164a8c1c70a54b12307703bd7a931812812b5d92601925b1a3bbd2a5c7ea6ee37644ceb0be3f0669e3388edb388ee3389fdbc693b36f767a2b42725af256044cf6cd8f53213bfd5e645281917edcc83cc967a50c48b5fedaf870bd75bf5edacd8d1ca0ebad8d97e35a7f5d9d0fd7f3c63baff210baf37598d75fb5762dd98fdb9f85cd8159a934221bce0a8b01690e368e77a3a9b894c5c4395dcef95c12c02f0910d4aaa5d29cee3c4da8393d95b07fbd2d55c3952e3ee0e07af6a6e6e7fa0d7c0e4a0e5e8ceb69a91e7603b5d4ecf4bf771ecaecbc1c4abaf8a2b875a5b7517366a8607b3c8c745358e7d5d47b1aeebc67e1b4dcfe4d4b5deec7edd7b42758d2fc6c5c4af5b65123619dc7edb8cdad6850b0b40c7605bcad34a72f202567c372a1cbccdd16b3c1c8c26e23006861b5980d1c723770035d422157bab4946e01ae74095b6ef6cdcf16c3a5886e3f0e4e5218f149f183172988285176154ec4d285d772cbc2c02a6c4dd521477c1ce8991fe2543851103f951c88f3e46a493bbd34a7c7f450f548b1c7a5dc7e1edf83aee7a75746a1052cae766db695ee30771bd89ce62e83b27cb9100d9eb81ef7dd760957ee36863b6eff16c37d9c4a3777db116e831105eb655f78c78bdb6008b1de067e2f896ce34a7f248804c6cea7fd95ab31b36f7eb020dde917525fec90b6b2eff6675f7bf8ad0d068403d69708b12657bafc0085cb1890e6f4db5081580f9ba20629171be70763e916717e301153690eb60323cd4f5555d1ae34a4fba9b6f1a6b85ceeb6cdc57adb665a6d1bbbc9c698d41360064fa5be1d4ec4873033b36ce6176666beb82d6b9c9f3aa43b0c43e48652f2c48a94944e92cd043393524e620c89d0e8323733333333f36c905b48325cb59ae77cf3f3a22ba9d55abb6934da7ff699fc335dc182982874f9e90f2129286770c54a2e269a1fbe44971f0b61298d7dbdf18fa4fb329dfb0ff273f66f84f1959b4efcd910736de66889bce21e5dbe350182a71716d3caa82424fc0182231ee09c9a4aa2c37a58c8fa15b80229490889240404455812b61f4896924acacca552a9343f3e1a9546a512e9d61f13b0328a5074e95b234ae9eaed74facccccc17bd38775e9b15b05dc2c2b89e8f463ae4a79e2416fe119a216c10f5f443146aada26641562fdceeb6b8fd3466fec7bf39d76b418ecbc13697d501fa562704cb9e97847432eaa9395dc285c6be3a8ea252ad6cb72634510459a61198b9fa56e6386573775b16a7d828ba042330d26da6ddf2a2c4f20b0062c020c97000e862d40ac35a128d0675053b42f5c85e5e0f46b1d1ecfa226c0706b6673ee360917cbfe84a3adb791a922e7344e5baad7367f60bd436be63e3a2946984b20823798ecc37115b8d63f82325a6bbbb9f626188bd60e1fcf86824676428d4fcd45a2b8642b5f4070b61426e63416e63406e877eec90b2b91d321e5d8f85349ec542b71d0b2f4b7b8c1761adaaaa5be082f442d5a2aa54b58b4bdf473e923398623d3026b0275c382c94275868d171e415a7450deaaa050585c3f9d768acadb5566b359a7f0e0705c54925ba23055e4a612e20ec849140587fcd512f97554cda46868dfada6bdd8df0c667418408ba81830405921d011cb3082650fd1c20fa4d61f29110162ad00d1c191a46201ffd377054c004f2613d8e468338ce18af8295cdf932d0b747b74560d667595f2908dd4155a82804424196cb6fc9a65ff70ba97442c9eee6a4c456b01d2addb14cb07c3d47592d28281c0e4943ca24cb2a20a1851308875b710255fe419e30f65961a53ca1ff5d7efacd5a5dec8df7fd19f63a4c19d6f3b51eab9dd5cd113463baf37df388ece858d110fd60e847bf119d991e76748729223f5ababbfb3d0cfda3d49d524aa97f9e12f2904824121961e75b545409f9d79c6efe986229974a324b29f92b4b13b248817064529c403e98375ec5385aa0260adb89f80f47b5b0b7733b9d9d8b98f6901d7e264a46ec90c913feed0aebcd718ea1aec07c0fc3b0c77ed946966859d9bb08b2b81198eeee7e2b6366abb5382872d75d1c633a14a25996dd9075679c6d366b73939f86901feefbb5f723ee679dd6895ce72192acf348e618ace7a653738a7031e66007d188f59c546a4eb684cdb2ec2dcdb2322d47965d9b5dc2721a6f5e09aea5bd6b9de7a6e6f8497bcf4d41b4ce4fdb660064b0d96bbfbd767135b62d7be634c069b859a93d1a4d6a4eca365eca3eebbce4225fc6ac1216dba4e086eb0e22955ca4a2b88db48e81056e9eec4edcf6509bdf4cd184a1c8091aaa717d7d154d020b5709e9f125a46708e34004f984d054a3b0529e58ef39d5f1832a08d510aa504893a23264644193d76048188a3418151758a448912cb2b87a90c54664923249d9f0d9b0c384880da1db6f32c4446532daa062229a18a119554695516554afd18df5d8c686acd6524ad94d231768af1e58e76a4c3ae96b4cb58c4ace689a510dc074fb5126abdb6f926acfc52629132226a209cced3751ddc6b0f6c1d2d76162d8d38dc990e6042b27b455c4ce5516aca769e135ce0ebf268ea22692a85823e205eab66ba076d25e34965ed1465a4913a285da8fdbef607b1c740dbc50de7956fb1312ac066a20bf40f5e50487ba8c89738a1998b16046388361cebecbd9ca656cbc9ca55c6eee97e983e470888afc6b0ee683f43810241d10b6af958f2e206a91aa05c9e1e7310d974f15c882184610fd1c208d6e648480a66a6976b8a2668759e462fbe79c734e0e73d10585f5b0101602356eadfa5409d6c3444c6c8f740143eaf2672a4c03a63fd9b38719b98cc55c7e2f4b611ce65fe3fc641da64376f86be7613f5cbeb0202c36c4e5c742f2845fbc4cd67311263663224f8bdb820c80ca8636b42922f647db164bb2273bc4966c905aadd568fe399c17bf359c9f3986ff359c63a83ef6589d366c8f75d910b361c52cc986cdb16125b11502d6900856ceceace168c316da30dcb6603d3bbafdf57a5b78fbed88a574db86b6a539f687250db19554c3e690d8c0cad9e11028b2a10d6d68435e0540c59db6d9c4756713d543af5830b6855f54898ab93401735dd0596bf21d01f70006b8ddf58dc75c675e4cbb91cc18579670b409cb3f6b48f6e7af55d46de3a6e0992d2c07e14cd647adcf2a5941ac1d4c62d165067219bc4c65778f66e7a5d60b08abf1a4a3f99955f3cfe1cc150feba29d0c1bd70d186313a38f7e1cad43045d9f03a459dddddda26f234193e3917d06653deb63427ee8c8325d7ec2fa2c1539835eb64874343fd657e9e8a33f803db86c89b2979c075cccf8e926bb17107b45613d2fc2e154690e8bbee65c461059dffc30a83bebb3bef648fad8d7d761caa07f599d0cdad11165b1accf4447d6677dd7b2be5e7126f7121f68f2068f8ec01bec0035841316d4ea392fd29c200f86e841b5d51be60266762d5189b0b9b4d260fdd49ee9298ddbb81958e6ae093b6dd57055689e425206da83c5aec88eb09ee790148bf919e9b11282b8871b984ab2a9d0a3082a50db60940610e481020b14e8c60c296248201c5c0e8e08635c7e49335e8eebf971041148561f16e041c408925f9946bb3471bafc020f06973b17ccebf284df7be8e1921cb1389a67125a3599ae7741bdd87b7d2d4d4ac97540fb6debb4b999779a6a0abb70f0e800ba20af8ead0bc88b95ae37b3b719b67941bdd74fd3fccc54ca3453a62b65df6a52f2e422d569f5c856b3344b72069940a669a626cc3ccd97db2f2f66d6a0501a45524754844038780c4288201ff37380bc56310a4aa7ec73967575da079490f9ee6e142a8fe06accc6b81afeb3fed5611b191a0adf0cca9a7adb1a35274fde6c604fd2dd2079ec35924d875d7fb3d33dba8080a32cf3bcb9196f025cb6b92e6a836b930229de4b0552bc2cdef9940a49dc79758d9a256bbd374bb3344b93fa0b1710ac3b64a4b09e8320088a191486612d6eca90b0af39a4f9e1c00c89cb90b80ce9f667bef9e14ab3d35f355e9252343f6e32611ff635478421224ffa839c6a9b325f0fd6c344d7e3655256dae371a5517bbc6dcca4b42763b2fd1b1aac877d5c89992bddff76930913b1c0af878930956de4400e09d9058e082f704548ce08e9e13f03078e1c388954b19ff341c8585d6e19ea126e9b41a6417a58235fb89ae4490d524f990ffb2a262aa59a3328d728a594d2d7e866aa8a88aca504eb49f17635642d89419f7653d59c6601cb1379d28f0202c954b5e9d6f6b047bafc60fe4d8ee626826be101d60907380f05542f743030705ef4b049a2005010a0d68ddb410d0e04003387c89f3a215757c6d86a15b24d76e5a8e0cc96599164365116b240f0f462b198ac9155b28458a1f58344a2244aa22f94dd8a91a16fe42c6125cd8fd76aad46f3cfe14c14140f641f9a1f064921493dee8fdbbe91973a213fd6c80a9370db22494145f2a49f44a5b0403aa261e8ebba916103fb8a7537b2901024108e4b04f9f0cf3a1f6707740119fd88fc786a764639833541d81f525407d89c5eb146cdf12cd002ad517b249802575898065bf447739a020149e0fc78c9024b6029864a22d7297599a24402491678639a63c4022d90c7d09506a013461328a5b4994eabad49329b7a6885ed4ddf306c161d31e59c3d5b4af98282c2e13cc949a5d2a925c8ba28a575353f56f79fd58a595b351aab7a807eb353e95b4fa728766f5a68a29aaaa96f472512aaaa3a622a55ac46b4203f354c7d8fe9b86daa47c2ca4558e4f612f2533f27444900a588c2ed2f59d94f19725353bc2151534537555315aca99ae22aba8ed8405b79c94ba2110fe240dc9482f1d34bc9457e34cc6cc56593924b3d88212e77a292c84b5eead56505e6ee9e1ba719f8589a23b9ab2a2b8acd74dbd9e90eaad2ddddef52a552a924ea2508f9f123dc35b5dc90c6482d06196c7fcae7b9e9b6a7a58b114126a8dfa33bc0ebc5b81efda653e1a9e670483e8545794427d21c517bb87355f3b0aada55842293f659f3b01ff6243cb0cdc37a3eaa7f49fe022c55df867ed7cadef2b07715b7a9f55d40ddd49eec5bcb324bc3dee34f330ba3f5db6db89eab4435341923a5946f55312cae3677c1865687fee6d876335925845cba7357554b29a564d933f8e589ddeaea4f409e504076fa8544f1f32301d9e977f170b8fd33872b6cf3cc81abc2cecf21075a639abbbbbbbbbb9bbbb9bbbbfba59bfdbf49d2a2408a09647d0ed0ec48dc61b779f6f4d5ec5827d8f6808bb3d35fc204ebef62735630cde99829ac874880b072763a1386d54684266fb0645856cf39e79c73ce39dfea3979cee91da248a8248e5407450bd58800004000002315000028100a874402a168442c4b8afb14800c7788448250a10a644990c2300c52ca10631c3100040060448066340a0280c7932054502e9c53bf2005f3f61a83cf1d9a062621cbc7dbb7ef09e3ec809cc1dec87e692b5094c0481f981b0f1c452ef0380461b1dd1ee04993023067948ee0663181101e7b5d9b09e33b55f7e15be30ddaa81759d2713b1dfdbc0f50dc30932582f06cac59ed6205eafdeb8b31ecb2800a526f42d309cb80d0c90fb3db22242d2df4dba7977c9ffdb1a427554cc580b4ce99f244be8fa45e8ac58e5a91d5a6c0cb5b43d9a4042e9749c8d7bef6a2ba5398044c0a28ea75b154eabb8e528487c3c24491a9d9b754aa1b279125286cbdae3e5ed85fa45ec48d630881d3f9afab62744ea6b7b330557dc53a2a5a520d995a812de4b8ec71f1098b80b110435c9e0e6f64832f0ce81e39b4545dfa2a0f3137e6219741c24933fd8a2e4c997186ca730f9bb5003af5bff8ed23746488156ef214a25c74791750ac3459b5d25a247f412ba46ea244305447ec6ec1fa75ee58915a50bc0208ee884dd709a9db262792cc455aa38e1c382a2bdc4ffbd74667bd07573bb928e2e459bf30d49e0e10464ebc074b1e1aa4bb01fef825884c5a8f171fae7ea9bbf88c26426a0bfaeb832166e18babb2bde5013b0a2782e986b98ce37523e8585f362841dff01085944994b14af8e62a4c5ac13945b63076e32b9f84e43a6a1b5be880c63d889f7f1f2022646a7598ebf08361d1381143a3c5e2319a11335c052798c67fd7e5856e62c9e666ff8714900909df056aa33cabc84a1cd53900eeb50f70e8c93fd0f692acdc7f1d2f4735934e8b027defa87aa68abe9bf59c0e886cdf0fa1552527301ef5102a1ad32813c8d6c3969568a91fb1d5db71d4ce6d6607c86771b13f6bf37f79306013a280dc701d7663971ac81e7306247e3a70a833edae80d5f78e9aefbe29d10b7e982e62b1b4761fe1a7f8e04b897e23e59c1c0ceba41b79d65da923eda41a2ecfb69badbcb5844a88e2b1fac6e372a866b4ba848b59b7bc8f9be1a48608a48c860b75a957a1cb5ec8681742b8d4597a50f869d0d3a3e0465b69689a4086d472b283dad138a63ef7dea04204ddfa1bcc87fc8b3076680a93cc31d10f0410643de8d820d15a2c5a70f9044353d9f9a00583003da8d034e81298922bb267f589279aa3b0d2333cb532ce42710035df28370adeb68e0e04303eaea1951e4825be4fdb3440ca47054dbb578ddfb186c31719459dfc9fda806b0e0e55b5a5774411463c4243f2f1eed73c8a77a9451ed794bdede391ca92552c877994eae22a39c7e36a9923711a259ef7b589f80b77128f6576938bb5897bbe68b62f4c54e3381b6b67ea850a94fdb8396c0473df04d66de2e93a8a4ad9e39202daf69a9afc72f974c484c2c09fc8662888006fe37286c2f541cdf436149b62a0756040db5a3e29c8c67603426c8f19a332b971811102d2bef48575959c3d73613d17535fc79b28f6695a3e31162a9dfc1a98f785c7b8d38edd3ad6b5be44c4184c01e174a183f269872d8d25bb8da0d54cd684668c5e34fcb8ed6226c66d4370e7e7f4da31a996d868470c7b26130b62a2183af2b678b719e9c697f6c8a3526060b52dd59108e976e24a9bd128a0dfd4ca3d7819dffe740abd0533102cc988f139261ad049d790d67f28a34c9cc655bc69bb793ce750c87cbe1685bc3085b0a0f71dbf3aed5e4a333c2c74d8fcb969cb10fe84c2ec3452119c5aa6281443268bb3172086b9b4e4e904985572c7b9bf72fadcedb01982fd682c3c531e97f4e848f8c14c8c7a8341a2b050b895d4ede4ea9d2c0f49a36f4d8c5714b1b08ea6d254ee3fa1630a2464c6ff817c3a2b13aa3615d6055a4633502f2789b063e32d3edb21f1cecee3f9c252873d81c3a44ff606d6c6d405df2ef5a277da2d37ee7f044c6ed967dc58663f64d974aa40d47bfea7cc0d1e6f4d79379a362ec9e868b5bfcb9c02a7ab74256a94ec8548f5a4baea3785f0996ff65b9f99c55077b7d11b7f921a1368cd9d3cc82321f9c2ab721f270d93ef0ca8082f859d9748894f040896295cbc148fade996cb808954eeeaead31677f5d78286bb60d152b1ed6412a0888c7011eceffe55363df5084a5a850126439bda71206ea3a96a355200f9dac53650d1f9a5e3e12e238f3f5470b41d6fa2867b46c9f1b2e362a7b0e0a2ff445e7019dd4a9f9e5d1b18aa33487e987be0302148817c29ac65c47da17d0786dafafff0d0eacbc503880f0d432d02b682c5cdfb1dd5118714108ac92ed49762c3670ae95ea8ae9f3050e28369b97daa2832be28a815a165c36427d3a262167fc7069d3a9189bf5696a64d1f21332f0d9dc8b473ff9a83072937645f47291f8169f23ddf142e73a86982213caca7cfef6ab801f91d90b7515603e691c7a086e805fc0bf4e1eb3b162b7e5bc65a95121ded129a941cced0757611b6058282105a682b11116da504a61fd9fe3394eec22df8172091ff40060c162942fc41790d9bbd8f47879b4e0588e6415ecb02beb0f43f22d449791eb8b1e657cf3573d6566ef50b1a43863b95e3ae2e2dcfc1b278c8f56d29c5764c9d5b9b9f0e0944c990842986259e6b876a9752b60de1c4d13316afeb897c0b74ea048eb942356e0d46ea50f53d8b6d46e2021c122648fa365c50e628f82a2d880a565f4cc63317bc49581a156d250c7a65473aa1c05c433df64be1a604fdb772bccf6d85b477666620c998ace9da13e24aa12aacae234e10d2622573dedff0fd600525c6b295137c52450f6dac5670051bece81dfe0f989240481d86d8bf916ef17b4b23ea2b52401cfc2c78fca489d717d24a1e6c3ea20b16216795c16dddd471dba6f2c1c90503f68fe7deb8ba973ff439f138cb92ad68ce1299a5182b577c57499934de90080a623819861d5c140f6148a5f2e13f546e60f6154cf837bb8aa02616f66f5ce6064f4d4a35a9e854eeadba012405cba2bcca72348e2b8e599a691fc73641f8df29d3f8d3f94de6d213773e335ce46efd1781fc061064bcecf4a435d6045a383ce8b0a01e784c258f483bfbaf506f42906c8630e27ba41c229958b483d50cc531ef0237c87a55a9d769a597418e400fe7c81dfe96748cf90d5cdfefc591b5bed321c82dd8f6c94869442e7260849941b52af5e5ac4666625cc8343c87daa2a732c1b50852b48992bd7283254ef9f7dd5a4f0a18a053cb29b08db9d02e584c2c33b99961a400c65060770c2dfc7bc29c382e0ac90be7239c37c83d8fd1e5daae09b77ac622939c57cadf356a4f45153199415326eb9ee26c6e6f51cdb7c701fc5018c7c45b12e12b6ea5ef5741e2fd10c82e1f2774e5fbfa303db9228fc1d928cea3c8c77801ff24c271e15a762054842cf5dd623d60b12b0ac9fc7874fa5256fba58ca398e991cecbc74ce8dffb123798772bd14ea427f009ec59ac33cef4d999dca50aa4bd54e8750f54ede3998108a782958c53e99a983596c1ba753bf419ef110f23bf79f289ba54747dc86c8e14e9f06d38d1dd72b70810e25ff2ce136b50bf2890d290ac7af7469b088a68e51c513d6462b2590624217886a685f14bd36aa4ba11d4d0e06ea6b678c27f68fc9d2002f4b9dcd7db065586e4530408b31f09d131204891c3fde482221f385aae35e908f9f1ee501ae162c8c8d0dfe358f3a39d3d922ea54782a028522b6821a7dc76df48c009ed8332c3f9bb799e922679129d851070dbed3f654ed4ba2f8b8066343a6cb207767d8e02d4a90afa9735885ff4f6952c49fb3876ae6306ca50b1ded14dd89ef58aac8412441e94beaecad23704aab68103d2c4c8ee296e33374822668b892b976e9ac62c8dcaf51b06c7f4c29279546df784f527c22a3dd461792269d5c8f7a17ed6e4fa9ed2af9ec15c81d7e3025a178874b121f1e97a6432a63b1301c33bdbf5f965c09d0aed4c3d56e19f61cadc9f1ba395a7b9e3fdf4e0e53639064a8cc017943e84e6d0ef19b7d2288d0df6f64fbd048f0ed13e4e1e5a13169c6f34c15c9239ed6527a1ad2f4b0d898bd8e503ecfbe3ae6abd18684b679594b075b1bdc44b9c4d8845489d010cc7ff8d60262dc210be76d5a2ed192e04859e30a41d0acb4dc488d4456b16fd06a7591ee15ee862ed9c577a2d2e9ecad9d5c836b69440a484ea556c644ff5bef8175c4f067d6601ae00dfa7e2d36d22626608e841e2f9731cc7616b6cd143add933d793efa8873766757407ec74714ef507e50e82464d8c3332dd699526ea11283165f35c87828c2a7d7b8d515de78a281231138740c300bb7a289dc8ef1573a66166877efaae5bdd5b4e4bd23adc2d3071ba9a9792db486b15b2a3f29eb3e4284272829d24b742cc448aa6b60109fa087cc470d71a8d1fe760b3d5d0158c1176718f4f35826461b5491c5609521d1a6320f6693a7fa60dc37bd99705f00e16bea46b063d73abae6975de91d3d49f57cd50eb9329779fda176e75ee74bb5f4c8bab2a25a1c630019d453b1a5c556552e34283b98c9ab295356304bbe4cb97c0de7281828944f06653fecdbdabb21d7e82cec5501cc3239c20e31e258846d09286195969a71bfe0605e172de10aa4dac9c27fdaba4b1128b6080b39520d04fc12da43a0c49ba22b2b221cee21f1ba2bb417935b9bf1b9e7cf297d4692a91ed633adc46549d06c93959d621cd2c6f9d17b32d124b16042ad079ce27a10de7fee524bb80bd904ed8d24bc015f952299ae5e61714de645573f20763fe08ecad1ced315300a39a4e0f1efe216964347a20792390a31f0d9029019346b68b40fcaa35bea6a82eaa21f6075bab80890cf8d400e4b7f5042b2526b58083a94131758adde0cc658ac8b091c18378d81a4ffc56ca5a040c2df74763b7f3847b5ee69d89291710fed33a0a28378381691d6e51fe4aed0ec5e293731a15141d8bc8a8bfe069c5e248c849a340a7f348814b3f3d8cef33174c6b89c1d01789b825e672033474ef380b9688172e282f70186c1b704b40efba1a588fa684a812d891e83398690c0aa2a2a533c77db44c4678537d77612a1a56421fb7e69898605c51c1170112e2b541d275db11a1ce3af90775c95f0729ea791e23e3259b4ebb81aa876e90755b956f22a78e2e7fe8e6acc275aac7c9c251c0cd4d8057061c8c88c9a03493f5c28e80e91a57b11b77cffcd2d4b89b145cf8ca15752a5a2648388a92cbe2083823825101220815a6a9ce5cdcf15e9dcfccd18010213b228c46c01a72f2cc62a58447b40a5a65b5465a2bd6af3e2fe5427322296874fd6e7aded1210c28c72a505a23c6b11ca1e63e79910c5a86ec8c4258463d61868e758ece0b8d392903455e52821c2eb33a1b26728c6e1dcc0d0751f3ff1fc1585792b159e4f164c7c3724ffe547f24e920917758ae503a1a2535c3c939df55aa2412435cd56a7993ee0f79b0b85e86e9458f331c5a919c48f5efdb7548e2aea6c09a67334fefebde102bcf2e17ab8b8e063201de840dc91f3bc70c9ad166a29e544499fea3229253f44f09af95771001e68aef4456031c031288b46a6dea0310dea586951af28aece5ba70667070256128b219a4417746d550e52a09d125f1220de0fbf14c6b72c31da6bc48662c2089ca193d50feda734239abfbf028f9541c1e392fb516895ec43701401034184dcadf9c972366cbd9f00298dfcd03255103a96f3d769493551082ce5e4ee190b4f1c4fe0fccda07c54cbf0cf4e2fb57191358ddcf09a39e3599db2401e43074cee9cc312db3060c50b65e12bd1558d2fc0459241139cc951d92b4bcf9119c4dd0676bec2f720ba6c7f4dcc586c425250c2149e82528ab2139a4fcb67f09b7e8406a3dda7bf89e28117f486c9381ba640d133190bef62c236a2b212049dc569ecea9a7c18ff600eee857eb637173984c962678c660028035d119349992bfc2fdcad5e6adff068b85230d87875a69220db701b7c70fc9aee8b0454168747c3aee4722c993f62a44a5f81088262c9d1f5d0b88547a43769a5d92c535743d1f9a893b5e85fa649d23edc7227ffe4cc379615cc57fbc041676f8809fe88fe7a69bd86692da91489e80c866a1cafc99eb6724fac5db86ee9f4a6868b58fa9fb09307c63d6267e4586caeddd6bd9fbea9dbf464c4ca7a50f8c83855fef853430b15af87019510c2925464fabe8cbb823a9e9462e30343c44f02247ed064170b59612ab0f9f5b3401b923158fb79a4e72f4cf0f330187fcdc4f099d5f76ca67aa5748140511f0642c4f0c9a8f3457b65bbc7c7c95758cce948fe25f450c4f7ed8b5ad4b130c44445b805a755951d72ef8987879c33222d033231dbe57b9442a723b055cbe8706eaad13b8ae4ea8f2cac5035d5f8d962e4bee97b6b0d4f1dc704ca6a5429b02f68b889e36e78ad57db0679e17e0f9ecce49d6a75f1eaf3de7fd9e0d9cfe2422d1b54eeedd9a323b02218749df3ef5de03c1620f8ff141540ad18640b7a063e06dea00c4fe7b9677e6b78ee8ac0e39eb4cd04aa4c75b115c1bc899bca4cd76b7d2de5a78492045bd8ae4e7f449c2ef464eef27c5a121c11f216ea539f5ab73b253ea70bd38256c2b285bff62d54b1f22e025242f32422ffb8bac209a6fe2b8de523d6e68db5809168453a88bf5c70a63a52db8f95464a7068ec6919c32a2688f48d9b5b091a9cd41e445905362154f8ac50d9543c906757be7968c973a6da85a184740b0a0d598e5295948d1547c303145aa33cd8e0235083e5165bcccfe4faaf55d2902054fcac2580dc58183d5dc80bbd21f7b1cea5d01cded894c0c35f57539713e221c7d37e34ce468a78f0785c41bbd711cf497824868450e1dfaff98a4af9e70b5ad08e446a58f63e1b4e3f510d0ca5a4c9fcf6b0c1a370e641c2a1c8986ad63ac7cc72c8d8114baeb5f1b94af02ca1b7b2289af8bebfb5756fd48186143f0f3ba73908e38995b26c68255086d3b4cc4ddbeefbc0e51c075ac57fb1a4f2d7bc31580f9e3dccc23b9061871ed07a1f3436b775fc826c291cb6fc22a2cb1be8daa52903dc689183f7a4a4148052970498874bf237449d2260688e2f839a4c2e323077cc75d56c2ac0a340d0f49921acf0ea905695dcb44fbac700badf74529ca295dc0f3f18e7688291b3edbe5645213de3dc17263b542b2e807e0acd6a2dc40b5ee2844304f4e9ac71d814c58481999a58a47575de4976d986eac463e0188901a44d4f1769c5983839084fa53c0651c831e8f2871894536ea45081a459e0d92122522e38bcd70453c48bab79fe7137e95e24b6d0c7ba7edf1e2c80f497ee369839eec850574d0aa87ec1c24088d5f7ee6a939fdd94073e6b4bd6b3292ae3c4580fb47ef433c5c6db538d460515b6de41577f5c0690e2027c1f246ae4357a27b7e3f8f0e7b0db4ea3f7c286e9c14849ff13b9273314f494b71b02f9367ed3d72bbec0cbf6d5ec404a554dd323246272e16426db9ae9095c750f6b7a52faec1bd3230190e13575730919837b62640dc27e520cf31eed00080c8d1f4df44c44a84929f0ff94a28d2ad646c642170e617572c6b638e18e9dea2955861ca29dbdc224b6078f60fb393da320d5af75d3764c667fcf8f23c2cb56ff699e751e532e77c5c9a70ddc9ef49f7de620a9e42476bb1b8b47071a128ca442d2a46c258114305d0dd5c9a05dcdbb025df615613ee130af9f615a7741dc6d48a571f982c35b4b2ff45300c2288c91fee834538fcc6331a7d0d8fe0eb48d1ff8910521f3635ef664e72b00ace4d4ae5e7384eb7b84b6ff2fc5a57a2e3a8d196b28c0236520cc84c621a15f4018c8521c4d56a45b30d0836df17ece905a52143155fd872806328da1944f6440273583c0f43cdb1d83a6666dcc73b4842de0916adae873a76a86e2695d3910ffcb16ab58b2b88a98fc35743e479ffee2275c025888bd05a6ab61defdc2e6f68268417a14a4d885340cd198b0cec13e8e869e53301583b7912f5b5c06fea5f3a4cf9e533140a8485b17140c1174301753133da51a86539fe46a1724edd05ce3948385e9b80ecf6eb8e52245958b069161197d5c2a5c6596e3498e55cecc723a9f306ff1d14bbe0c41e1a399d2545ba01548880bfe18309671502671e66c62f1a33c5ab067f650fc9c405c6346636ed89133e03dad7e96330185557e8bce471a871f5ef088ee84b4786157069e284dcbc7a56f6ed4da959737ca4c6e998f11c1212c8ee8b16f5ddfad1170704994a19e64c73def64ae671d3424956814f0192afb7793bb941d867b4bdf4d3f56291b7c29366dfa72d37cd506b4bfff0a984423860ffc87909591ca7fa710def943d891a824170b9802e1b8b4b20f0e658595f8f5f77880e2000923e9a3813b200e0e0d65f5e02fd3ff56adaa0e6e8ca19c7667f2fa546cc6249da1e44fd8a3eeb00682158135abd98c44427112dffc027c8612800b32d95a2f8fa9fa6f072ac7e23b8d270f6533f5e816c0cf0968e77856c4888af9e09634ca0f64fb1d599b63fc4cd9787c62f6863579d642815094dbf24ad9404cdbc339d7cadf6b36988af343def6e9e4f4a00377bdf8228f44d1f00e573fd7eaefe17c12b051a42826d0f5706283b2a93e087567e44a85937a7950c41b02fdddb9954b5c7dedcc48853183f3c7d6ef8a5586e574e2d6791b0d55f420acd2572e0ea96e7a4f7c17529730458665b793a90f6d3d49d0d5b951813ab9a2c359f3c43d7cc3ec1d3157e15825fc26ad6edac6aa499b881637734eba8ce23dc27eed681da6d0c787f89ddfa72b3220228142388eceeff2b7eac9d586dae3b245518bb4b37a14a9e536942718bf29194900ffb3dce973bbebb018c86429840d84556a73504de138500c18414b9f0b1e90bef422f5d11924f846af1b9e89906b1ec10361d68d8b4d6676bb22558ddebc2c87e453ea08967d0d0b5eab812c0d33376bb28ce6780fd1b55bc437efe9019aa22056cfc6ca70021e7b160c344409b2c990aad06850d839098d9e6c759609d90e051dbd895cb1160ffcdb8261925a45088b7a8d6c22580f974573b0c984ab505c697fd8070fa78b536ea65410b9138db98f701d90f6874458e5f97e476194b0680e49a4724f305f013bc1908ba7d7302ed01c3effe395bcb706d2189dfd6ed00fbd2de0dda679032b63bc786b2bcecf12040cb1027c8ff6311b8c5f33025a80b2d9659e032bf2465546aeac3f2fa93ca38093b1b2113b5e1afbc40f0367311cbaafd93847d24d0a00fb431cb854b0a6a7a66e94a6e25b8bfd9eedbac48e2b2e09ef6a94ca33d42b5392953e5d635e2bd952c3d2bfef7757ba011df15f7380cb31b318223b6449006595e23204cb6dd3b16935d272d564df49b2fc4f8ee54596fd06727565ee1570593aa3f9454329d6962e44627fe549bccd296150131d17b7406bff15480ad41acc0d61e9d27b94844c34567a6841a4c7077b9279cc6547591a9b8a3d39a0d69d5872daf280d59fecf9e940d9c7d12e32ec52051046a66e74436b57726fff955e839850024f77c8d193862ca460b74c7688651b873962d00ad3a50d45ce53cdba5f9cabce181de0bb44f574d4a7a99e6ab0771aea3242981f4368d15c131526c9603969a3bb2a777aebe2b05bcde535860fca20835b30079ead7b09d3bf66674fc730f978a40a5461345af20fdb9efb0439302402f16ff7dff49eb69f18e84ea2061fc6b58877a8165a6922a8f6750eee686c618f41facb9a36ac517c84be2f82b36425f80f1a26ffd77d24c109739b63457cd3de2ce89096e04e7e2304e7a3427c5ec841eabf419fdafd22622ae49c832d83a40f27ae7db0485dd6599f6f5c9fcf934fe0871345926f8b614c0cfc6c5e678a2293fb03cfe7416100c81aa56e3a11c9acd5bee81119a3416736f73210e9498031a8db72405f0026c2a09ba4d9e49c9aa8d973aaacd2f4aa0d0b77088d06090a74cef71634f1554269d3157bfda94ff6cfab437e676a2e17576a04e66bf1590cb02a5f0e7f963d7625df4d2a8a7c5a28f5aac40824764c174c5da3205e68d36be0c0afc2b628184f50ffc142952ee56bed54216b16ade1c69d2664d971dc091b993e5ec56beaf17cf0fdb7efb9eb233f8e1e39f1f2a6798400140296ec3c1b4b53b93fa6848c32e9534b0c2d72f91b900679e969d56f396bbbeb2e11d0e7a7217c9b83a86e26d021930ea49d9df907da84380f51cd61801331a55f94fa725f4f906b033865e63674691dec255f8e6ea42bcdc8332c86ce6d5f4c2c2d96e7f8e8e9d2b2335368eb2905e8d4f023b6811321b45905f2339951ed7c2eecd306822e155bd8db9636a8d90af5d82658b2411dbe762a058a767b9b0d21e3ba62761cdb9847e903c7bfc215129a5acffcd5b190f1bae8c245ffbf7318ed3b32fabee93d84055fd59f5d9b604b04339a5eebbb30f308c3a4f2d6653f60a5479a13b2a2f7484381a7bf2848355714c78a370bcbb4c0fc01b622363a66238227b03d0dc408140bb8b6f44149e7527311ae500207dc7b23097adb6d03cc5ee5c7f708140d504bc51438da64cc673731af23470ae7cfc3dbc41a24ccdfcaa43df668a7a1ed68d82b2c48cf68f354ede69978b15895e42dc68d0270e5c20facde2d3104dacbcc051222ffa6b82ec4f29bc299552f2ce322c99ddc788e081880cf94cdab68f0203a5457d5062b0e9112b0cc25b82549f2ab0ff261678005291ebf608b93e83d251fb9e7631074c97b4557f53ca5b1f8d4298cba41cec8099827a6dd5c8f9f1181d90b8e69bd520b462ae6ebfa73e712d4dac070d8211d0be05d6e84ee3e5ab7ada98537a9afd701151e94153134d5f7e76b45431c63a72bfddc84e0c289c2ad1951c400689195cc3a338a4ce901608c0cd8526a5c2973172d715083e896c52df0f6c7419dd4cfff461d6f2cb8d6df9f7423697377df78f84a1ef35c1a01952bac3c1686b36c6041adb74fef5c9ee474d1748ac4d3821eeb33935e3fe3b98a65b42b96561effe8f6e7a7ed8cdd74bdf02faf30a414ebf3c4501a9bf2e375750735ab797e6ca9ce550fcd53eeec930e7c9ded4620c07aeceefd85fce80881677685bceb688bf49bcc61515e6533c8ac534cc616a8734d3f6b572ac1417c0fa0a62fc311592bb143c41f0673ccc6c64a79cc686974e5102bf425212676e85c35e40bec86802ed186fe77b5eeb37a2ab1b87eff8d0e9d7a9d8195006bac7786ba1ec7773f6a90f456f8108499d1d3c0dcf36946314ddec2efde3c248e484fda99cf4b3fa87e87c4493291da8743df52c924c894523b3475855b8b220ac1d1ff3c27e3cec4226f60aa313ae436527c75fad2a1e7dd6f04a121b7c2c681f7c9f70ed7cf19aa413a4e6f02f1f19d9cf972942db5f9aecd56d13f7a6db6648fb35e4f45c6d3c648dfbda35ad6c09ed4db19db578922cfdd08c4126a2ceaac3898546d8b1871182a657f7a42ee86dfb19957b82893e5d14b0946b9d5692ed314e3d53f53f88aa49c793ecd721f0e364b445b88b63ec69af54388e5e56c39a01790c2b39349e0e2fe95d039429db0b0ef5bbe7b11643b61ef887567f5c9caf6d5a5388470900bfb68495016e0ed65c6a0e98a0968a0d65fb95d9d02494db6858eeb7b531464ee5bb8da05624bdc043d00b0dc9bd95f76a2ee68a58d15958ed8a85df73585d96670afd4b7ee23797887b435c736421ea8d6811bfe78bc64ed032fee46fed7c552fb48639a1e1e8eb5dc32e82530911f33d14fd0994b413423443c2d94d7ff13ea78f6f499c01cd6bdbd860090a2bd11334c5e7ce9f8ab35fa560a81256824ef38766796aae0f95c48df135b6fc3572c11faa029546389d5349752304b0c08790764433c24c4e3823d9008dd6468889fa406f01828e81bb4aa6bceb7fc8505b5f7c7520ffc91b08985618fdd816387c431014c950e4448d0de443cd4831502cf2656173bbbb667bc14a037cfd05a88ebd9f31e678e38dda0cdf3838099cd462a9fd17af6be9277c6872f047d07efef66b2ea879b3c989548e0a63e0f7faf3959a39a8ad910b755d2fabb8627a743310a720bf32e37ea4d1d0c8b8609ea7c0fd8e79ed084de7926ce0de3480374de83686439284fd513b84cec232a81754a8f8ea8c1a2f825147213978e5ff3c5ab9fbb725f499c455240900593634c3e421581d2e386738de9d2fdbee9451400feccea51f04275ec6a59a59d73b9336ce8fc61e1c5465dae2e339637ffb6a91641260427b98cde0792e819de2917d9d158904fb3f1769e1858813b2037f5a0cea192deb455ecad19dd65d3e3e6b4f877f1d91fe807aa07b8cb71662bf9bb24f65c6faadacd802f6464549973983637a14fed8a74715e60d9dc3d4d67c778cabf50f0327a2a4bf9e9ae2e5fec6810fead6e9ef4c967352aaf69c76cfaa182177cb89b42549d4d6400a3ad0a89abc51b43f5165e88ce0a04cc62be224d3a408390f14ee3cd0019969c74f30b298b15e146ee81f08477d67d027d6f92802a564297ae6b6484d5d08797776a0aa816927681b2e392b45780f3a5375dec6c493523199081752a54fc973868b8f953d39c6294ee3791ad1d8508fd8b1e31fbd5c32089b9f9561a5602f51ce108c12e5688b4787ab62f094af760bcff2372ee856011eb0651a89ecda4d45c4be221b9bde38d7b49700027bce48c460cb398101b0f47d7139e868cf4243d377b8b4518e62a04d9b7548f9f0f938ada9793687ad7cb66d896b68c0907e128623525a8bd68e7059a136f8d2ec7122e65de0d1ad11ed93ae8f76fc70a351237ebcd3d4df3e055d4bb4c4b52d3db5c891540bbabf8e695ef4eb0e113f10fe2b276d32a6cddf16c70fbedcc860e66010d10faf5c5309eaa92c1643c9e21cdf8aeb750566c2b106b382535e9b4f7236ca06ca20eb1c0c415da7df7ca7c6e2346308fe0573002cade0e7b49faa157d9c271ac76816434d32ba6686e516d1366d11e88f03fab9a8210fe11275080fadb8f30dd44149b1663af3d2931fed191b00bec84c4e0ed4d2cf082f075bac830115e9e8c17f7f88260766fb37b839729be6a277fc3203ca8672543dea7484dcf06f8287bdaf5d7a1aa87eb8e1ebe140eadd8df2e2911cd10186213d3acc5c1692a352323037d2889c882d814b010162e095cdc069661a20a5a297229f715749c60b82c9ddd94d381a281a2a2a1621cc083e829ff2798d9ebcb23d99fe197e59be675f369582130bd7a878202100ac20e6d0a7076e80102d42cddac635f3924d03da009091f96bb27fd0dd19b675731a690f6b9a275228d145cba9bffc3bac6674635e0d9b016b8b062dec647dbc0a8340785b720ad03a435e6b0e25b8d445ff0c8ff5d815d5c7ff7de261ac8bbda01e0d83a837f02e8bb25bca6b7c6bd061d20c208b448474c4addc1983312fafe5c32d10b6696acf51bad3a0c3acfc78b289f5268e5668f35b8b6fb9459b951d2343b3b67276cfa3e2b1baa5304b51713162044deb617be95bbad2fb54465e1857f227efa74f4bd529635c2f590ebe0deb10528870d1267dfcaca2477adeff0b734fc2a139383cfe3ab7e94ab04e54036d11f1c532e09888d73f29c1c46ab20c319823614024d377544cebc075d737540beecfc30f77ead54a5e7c9c833f651934eb24aa9037661418f9c074e5bb803f105c5577dc5db00b22023a57334bba66535dac6016529018ae030b2bd9a72ab5d37982dc6e79653a4b3b82b20a08155c268f307c4a7b0b9e91cdd26d61d242f0a02ae68a953c71d0ae662f1301eda8b05873782b1b6ba8ede59160d2b38cdc74639187449f4ebfd936ca32b11b693b4cdcb0358f29b891c206a52e94f3f18d749dd7c555f4c084c1bb888aaae6e15d7428395b91bb9825f45310a0408a43807e5a040187f1c92954464c6118aa557148c2086f2c23f822172ec8ab852821ff726cd3316db3bf25326d547666ba151fd09e147b15311bd49111233ecc0966a4165db0c46d841f61f40438af241daa80905f42fa7b044d1188e62bb81250445a41e4d880e1f8b077c3537a054ded8f5b09671c1eb88c9ba61fa6df4fe24e63c80e5cb33cc08e923163f66bc7c45ae200636e19e8aec4e1645bfd5b8a7910f2b5610c35896e65b822f93eb79161868077fc2fd3cafbf1415682243e2f8ea905dec1d53e31a300128a1a467768345049c6b0d474d460a2e1ac1474000a9cb2327b3259266f8bb508d5dfee44feb1b285c0858f8bffb703e35d2d2a75f5ad20cffbc952b93c9e8d77ac4ad742215e5263c83a3df0050cd379743a8db93f1c6335e1dc63241e7e7faf1e3b1f10f3a611d43b9958511e29997265565a2b5ebba6a118e71f059978ab4685fe3ee8bd941e5e2b0f65c6764cc2915eba4fbaefab9bec7172414e29673d7293d41e8f94293a90de0a7bb7f0142c4b34cdf7f69b50ef175f65bb0527b356e46daaf18b4239a70d7bb572b3fe60a815ec888a6593a12550f3a8da6c5a6b9504381b220c40e051bdfda7ccca63fd3dc126141315cbb23e5b3990687812dc76e8a682e4ab8600c453e2b4596f0decd92f97ec24ea0a2473eb2e3d29e6e62c734a278682f54c7188cd4d2a4087ddb8c9f1c88677f0dcf5dfd9f1114ab440dab4dbd02a561f511f94324c64206a55ea83ab6e20b05ce66eaae89aa89c2dba92aa1252b2489f022820a948bca04313cbd3b2066b56e3b74991d02a6667620d04fb0a2e8cc3053fb45278d7b155d6d25272ca1e1c048b896391a556a5beb0872ace2ded7ea110acd2415fb372e58a132149c35b472d1af3585f94db518ee8a4211a3dabc3c9d1ebb628ed89165385414d1592219ee00459c83832439425d5c56c67ef744a9e76b96d02fbca4307ecf6dae1f96324d2ab17f4ad9f72bd4289ec623a70073a612b9f1980aa59508ed08bbef9b07a24a744888e47c2c91b89a35f9bc41515a65869eaa9834e7bd02ae173008586d5cb03a29b8687263810af2da3f22a865b729ce42bd8d4eb4a58c0b0f9a3704cded78010898dc3ebb98ae2e9368a4773449b8c4ecd0683b3eb0c841e695aba70019965b8a46dfeba64f401720c1c28b93d032c882ab46d19536c40719f8c2c9966476a46e7e0e081d4ae8a5fbc0c6b088d35c320a6e2a3d5d0b52aa5935c2e77793b4b4326c73609ffc2de7ac9965efbf7321fcd56cd7da12e3af2a3bfe98d1ce7588caa96cd4265c1c9e5a547f94802a24f6f6277b906a364c529ca11d9b4e2e5916f87e6be721750e638a23bf6b0980528ccfa2cf0b0612a59ec3385f6f464d103d91ac8b516531e8eafb262d8946bd58a79af6f36d7d2c62bea11db905fa2470c5e5b0a30661c73d629761b7d2dabb1515c61d00ede0cdfa1efc3ff0ae1976ee23efdacc0f4bebdfea2e6214840a7d90fbd6fc5eacb474f2eb71180a2b3d9c5c8405c62b57c6778ee7497e74cfc514afe82c6a8037123a6cf9ef885c5f6241aceb646a69f3b8685b418228f2382fb580a67f0685ca1179decb1afdf8839f77b56165b385e40c24033312c914a27b365e8eb5299ee86b29262ba154bb51f61cafb06a77fdf6f67d44b9df3d63ef1c16a90598881ec5780de659768df2575b6cf499394e349a7ab6c89c23f91fca7174042f489969436fc7a6a486dcad7d010b2b6926d66798842dbb12ff74985593d04060f65aaa847b3fde62a893651c52bf532bd42bc4bc8586b1f6f57373db4973ec92ac7593612768784eaede420f1d7a10e038352e950f727fbc34df22b3318b69a36ff77b7dff2bfa4bce0f0f8cb70d9bb226acd103ee1ed40607c5f1c2ac2626736347f3e19f2c6f88dcae325b998189b6a3034fdffdeb92fc94c30a41cfe0913b9b4cd223aed55121661887b6f81f75fa03ef6d662e031e7de5952b9bec1d5b54a612cbcc9d30d9ea01878f1a0a1b88d7bccb3416f400b1e16c4f8dd356813664ae0c14a454c6c41697a4349810ba89e0c4f1c16e20b15b229cc5ffced28256471299d43740471be8007801a518969de0156ef0a4b02349bb5428e4d15c8d75c37fca3b37ec636977a52e1b6a9071c9ec611895b748e203b8d04aee3f02e4c8e25e49af60565968d2fef5206b291b46d096ee8b87a7de26410d6c8ef15ab142712246ed47bd0dd16e88944a23aa480b26b6d84c43b5a58e2628b37a8406c24a4928d2528c843edb7f70f306104f36b512bca1f57d56f7416ffb642f80a7e73db0f19c38a9e52d7c349f5012f024b88dd29e1d739d3fcc5fdb85339dc5bc24cbc9f84646ed6e86b8a2b97e7d84ff085ee6ff60e15b5d85f44930fe43f2f9f3f483089ac7d89f8494072962d5f71851ab019bd678eaa1f3760af050c268e510fd152cf9d8168fb0bf9415f84362932f6aa7066eced27535c6aac149c35f1e6a920c6111e64a3ad854ed9f5401190bd9ef29ab6975139e7aa10cdd9d76c9af9bb5077620ba8d1a1a7470c0996f596ac6164004619445e9869b77b485c32188a918cae47177295a717e80ff0c2229713211352d163c08f23014b2a078b149ec3573c05011745dcbbede69ea7af389ee7c6a44763828ac3fafcc8ee2f3862516c0009d33a093881a2ad4698f4c78d6d2230764161e53091fa57cc78ade606802c2417c4befe9821b03e5ae55da657c13f463f200314346ad8f09b3376a821be1f42d6980f3c77d8127d31580c428257c3692a7a20bf0f7b51efdaf0617bd4e260646f7dcd78e4f3610b4110fb529350ac6b807184414029985a95ffc52a78e6014554da8324d0c9e1bad8678a4473ec734eb0e83cc85ab25470084cb46756b0ec3b20bf0920024f8def5cb81b402c17407678215c8cc65de042599bc4f7a428aba6e848f03f29493a81bd9a0000289418c4f61eed48414f2e590b84e9490e75bb139a3720de104fa50e979b7664be282bf97b98b4b450ae608b9beb1dc4084ccb2a45379fbe2a392bb1b2b8e27d24ad196116006a8990fc261835a96e33b4fc0f568ecf391da586e5843d15de7d2a8c46fa5d775ecd179619e68a119aa8ef899b7d4862a30ecee2833921b47a7dbc4d82ac9f5537ebabe4fd97f827aa4a719b9c1eb081bbda1dd2615670651ddcddf805624e9ad21af152a7fac0cf7ca8770ea9be7edc83b2685581bbf42762b82169dad32c25b22f876ed036461acd23ad19a0e44d604fb3dd4c3f9071a219af9d03e7476ac473f89efbf3c6881ac65bfde430d251dae088ce2794932c7512cdc6072a45c0f88be8d65e4f03fd1068aec290b05effa38e12cc23a56322f55e901192851b1f43dd4b1f25498fa80bc121896908082be096145c495027c8d65ab79b920dfb06a50175a6066c660a25460d18f96b4d4e506ab8f83f5030654c1bc3aabf67f46424923aac1a60d19a86ed4ad432e380d21af2aa120223708910b307e92be48d1d150f15dabe3de78bebbc9c92169ee1f4459e77987e8270e4ad90935650c9e18a01eb5b6dee2416415f26cf5a62c3123c4af2589cc6d9ba23907d0265d771b6408c515452e71894ad906e9fc32f702c437374cba687c0aa4526326226e8b783b4f5fb735880a4802c23bcf0e1bf66f2557f12cf9e6edba500b6cf0833c855e8b669052d382b2ced3ce698b53a6476878d5fb5e868f27cbb6a509464da7023699d72c091f80d32ffa475cc6cc7791293d16f9201c57323ebf671d68ae4943cf79921caea7cade607d1a04cff152df2082de7694fd704e2612544f84a5aae3ba5ea43af36b25b6d60f0c9a671fa6d513e0be1a14b12be0488cd2a57dc2181916286dfe93fd641c752b9c9c4b65d10f39065ec3762af099bf1c5e7a27e05c8215a9c95695a1596636b39321fe68128d1635960d354df1f86bc8749287f0a61ac458af7bbdd3f4d03adeefb226dac4ccb0f400065fd8b74ee88715dd0686b89c686ee10f10a6bcb509e6a0f6c8285c23b6bcb166970cd6e707eb988360dd72607b9d15a45ec2a44dd03e28b0db1f1a207e028aa7fc80376920e3c49ca245a07fb1b33552038ed40090ae622a933c60916dfa51f1c7862630b76a29693944839d324c52ec074506ef8288c11211321a0e4614d39edd5dd7e82a568c5b79d59e85e3ad59832abef4e3e46974636ac7098ec49626041d1ee384f0d29a72a5e96e1b3fd8025a02339669ef0357decedf13400a3cd0af3f937aeab230c73a1f2fa409bc87a8caa6dea20259edea81877c350ef0f20661dff4ffc10c4c1379a6210fecdc7b45f1b456ea63720978a0a6062e44a97e66dd850c5a36815bffb083b8a77cbe572cc466f31ffbe6bbbdde8a6403bbf2d261b7802fc5405fdde21b19a3ea60a4b14383e068169653d2d09aabaacf192f259894cc2a797af6b928d8a3a626edf5578cb7f7cc5f6834816643ede862f2ff296794687768edbbc5870381df081f102e65a37f7480300815f06e8685b6fafc188634a88b0019ef572d351f82a655becfd0100da5c4b49f5df9b7d415c2cafc114255219585c8e462014e18342734396642fb6179ac5b0df4be49f2b5def1b502b354ceadbbc4190416c3161e5092787cc84eed4bd894822e74568d092cc9477d802aa206fdf6775263586ac80d553518100df07b6c57e1b241709da65afdcc7f99e7cc9c5ab4482e0123e2e1088ef9bb3b2973d29a16ba0adb70dc65a7de0dd0d735d3c656efacba83ef3006ed108370c499241ea3cdc00c2b93e63e5000767f7bc803a8c5c68068f02eccf16742e5f56b25025332a639e04d0a2048e18cbe146a7535ce9c9fdb48d8034e857be080737e1014a50309b5b85174736a2750c3ab5fe97e64d8009219c134d587df3d77181d6e0dac4d67c7d70dcb5262f9a0d702c002cdb8e698f91e4638d3424a81c625b6b39a5164d487d9758b2ca5075285942205ddf00b93e250d1cfc951b579eb591b3695c2ad7d74a0e80ece92d3db9e8954a393949b4356fb307d02af0f711622ab37b3a09329ad5fb9111fe84ba7cdae104d401a78134af9d5c0995c8182b0ee6692b1278d398259257eeba0758b487376f56fc3ed3b4b19491ccd45f3ca39e79414a0a69965a38b7e0f98ef5f656c69ce92bc800d7dab7b29971adba085c15f80f4eb801851365d601ab8faf2f2be33a2eb6b02d52a632797eceb01a863f335f217849c80964962e2f12cfd400222287a4ba98eb0e2ec919b19a3f4f668282131cadaa2a82f0bac1751a09fbbfb7e83dd940e932b0368e8421c7e4069a4759df359858d5fd5ce0107d331c06c1c3441cd0264073be21cd1f995dd8cf0c190d69f32746fe1a68398a88541ba1de2bc71ab3a2fad5fd3c28f4b4484068bb45f8c7be2f61d1671b9968b2fe03ef195fd219d891f89e51b1c785c3862d568bf19d5e46df0058326f01fe97fc736b639bb1b6a9053857ddab8d0608e7e20c2064452571846827e4a77d3586de17d89876b1976d5d328242967bd110a0b2342b453d64db85253ccca562a603e2ebab1cb781bbde441e1e3d3b23a19148486f94e9cfa786623d0a30c49baf8932d244287d31e125f69f500ae80439562062081bb16e02cffcc9d3c30f766146c22d9f4f106cf50b1297b3271b2a886b4e31e0da8f76d1baa3ce0bd4f1dcbcdc59a81039885398eb9d76e0e677a0021e7df3cd70adf57ca06cfd78b35fe2ccab1becf37c12b5d44ab2b751cc1d0560e7e0812960406529e340884da26d2f8d84ada410c34281c2186ac8a110b603ac42895edae01c3576910459a95b60d4c7b46113041eb3a3e68849eabf75c72ef384ca766a1610603f773368ad5cb19d2a0080c4297209268a24e77d9ae5022fa178036830b57474305f30a70ad854f7eed013743b2430bad7158640dcf8fe625f976b66bae118242ab70fe56cfdfc0513441a144f5fda125419881955bef5e96bf29e6a8e88883eb7c84bbe9c0d29691514afd93213d14aff18363a05c8e46fce73f47cedf174d276bcdf9e343bac213b4ca3738bc01b36054b1dbeed154c46f8580742e3a463d180fe79ac7c36bfbf9264ea7127bda6b319854c0bc6404decc40d7a8079b2fe4491b69dbe75c7a0048295272f18e8c035cbb5a780539f73f214dc07b8afccbb68e89c9648865aee048420bcd9256700a8c0ffa23afef661281caedf7f4244fad1e60618992801d200b222307c02b17116a41882aabc71959ab4178abb4900443dc0c133dfa43c43cee0664612df23d3a54929a780830e0af2c2efae20a097167ac12561c7a3c7a226bfb7d068bfd88c1109384ef83dbdf9fc4f4824f13a68f101f7fd9102a61702bd4ad99224e0c5c397bb5767e891044d76647769b77512e5e28c6c0770ce3eaef4e6ea9c2916d02caf82ff2a6398c327dbbd519ccc1403f75e721266c4ffa14a93d93b6bb064bf53c1f24bb51328f046f1ca3404229a12fbb0210dcb37b374608ede7ce272aa687e71a47991dce23f60e040e1a8e86bb596d40edebb9e7d3d930dcc37c6f5ecab19d82999a2b580ad072c282ee51e4258ec5aaa8b6911e4d1239bcce4ebdc65e56e70703c85749456ab61b02a276db749d907cb5cbf547b8b9df00d1c2f5fdbbd7d1883c1d79297bec550beffed378729c059d783242b118e1b00dbb2c31ca6d1a4e8286efb59b554829c1772b27b1e6335b42175486af92b97b3322460f8ff75d3979ab8ffdb8829bb5fe4a84c1d9f611c3faf4011ad6ed630750489a3cf17dee3643c422075bd8a304775f4486d88e62883f9f7fc740550a13f6fc4597d6de0d2faf040eade66649acb68bd1c24062a45c78821df8759f924fd428f22db95d0d475b6415953939848191ca3d928855a1d3444d9f0fcd4d3b0fe1265565108b7136c91debbc0b8c34fef8cad3bed899485380fc55991adb31f272be06f4556617a032f3a8eb4828b0e86989012ea3002b36c1562822ded8ced4a91eec6c8d1e80b21241e8f6de141b2c7419987e85d5cdeffe4171462ce827e10c84662283fd5e2872fb33d1d967f169d98ea7eb9a0b63199b692d412471e0f9dc0a30b3305ba6e94c5fc01357250ef2bb9427fcb719f6b4c5ab463996540b596504c8ede3899698b32c06f848ae17c7b82da88ba915527d29594767e08442fc25874f9c21296869498330619ffc1d948fc060513a162c46f4238f60ba343342edc608d92473b52569b6ba75e34038c926a92cc46cdef91db8b8bd9e35aaf9945664a9792dfef9bea69011392ebee119c8dede5f4736b83ddc24e8d0fac291bf9bc57a79812edb44f0ed70775be212de2aa2a966e2163296151a0ab5d2f052661ebe846239b8769cd7ed0727af63efb619debb0c5a86d4010dff2a61b11911768c132f7285686bc8dc961946774fe92c9e082cc04353b961592d891194d32ae29e08e6a1293665e85c0f2f719740f54df025d2ab46c346d5d98db846c9e1f262cecfcea2e5138831c42669d4e77a1eb09547045d2da81d4fe48c73b0a565a03e980c5c3477dd8f9f01120c25b611a5fb47f8e81303fc662d4a18c92c5054f64cade6038f82d5d5b4588428443d1264f3b3a9db1991653c2322e6199f241e5fbf1e9e3290c871d16535be3ad3f32ea5e0e4853a7b8abbb0d7718ebd2947503da0c7f3bb6193886cd4cda0c197070aa10bd2221ac68edbfd843c9182e47cb53a48181a4978037935bb7bd656988012de2f6a447f4f993c1c5dae449983dbb3775aa2eff174b5c3cf64fc4745329ed7a13725223ab85df23b136385b1dfb0c3dfb18a7c3e3c9bc73a2e64dd83c88d388fdbf674cfc315dc4a5517dd42d14230d624c759c20f72614eb403f754831c03bd13462698503de338cafff8fb7a0f6994935ef6f78cb16a3b159798cf6540970c9e14a1c110b5b2c4cd49a8b54a700d73a83f00d56f0a92cdd01ae4e6cacc520286a893c0d98e42c8c094eda002b4d5bae3d71200d4e2c1566857e4b031d52d9ab88a5a1abfc738460ac48b6a84a5ed6b8c6845ac47c04da1c03d7f3297c6603824fcaff6cd38d7ca2260438398800705232f211d0e63fdc8bdc08c04c442d7ca65e93044d7d19c4c495d96730cd263c82ad5810c49f7217cf707021b04450445fac44d73f5dabfa1936eba5963d32444e41b09591718834ea810d40460161939941782a004df83ab58537b8cc30a5d25263c6dd49288489874c3466bd3a63b3dacd8325a8feaf08380ff5b5fb91fc69d4e34c87b873479c32405c9e5add7384020ee33ca5d214db9d5d316b85f7f0de99d6dd59f16a83045c5d31ad7505fbc15784da7a946ec3203a46a90c214754d9478e70294756eb8be9d7f43aadaa00f494a0b7c09853796fbae6980e9904cc6b371ead79e09d22f54585150e2e4de9966ce0402a01869aae90a54f5409bac36b5f04e6aa8962d5680257883a5c3f2cb79d980c4c9f646a09c05f2df8160b2468e2ea2c7b1891c0fa11d612ec339615ddf5b1b0a5ff27f17c98051ee75ab19b5210d1deb02db70573f9c4fb21be813767e1538e22288e21dbe5355b92144b0669c260fca5e867ff31d14aaa2f15d9478068cba8a1fb934e82a0f0392ba702a0494977c681ffe0070ae317f9132f5a4d66818d9a60bbed3209fca10a882dc54a6c623c75e33bb7d2f5994a38e782f612c17482dd669c26cd2f3503a94095407e020e771e125796ec07be4c66927f1d4863d542cc9d7cff5f10c3b0e4e20144611a87e15bcaff67fac69ff6d173bf5a7e3da7fee73a0acc87d90927b61a5066f362ae1bc6f4b8ed1fd56111480d5dbb00a89b57edd6f0bf1f82e7996fa4d037e64494d9a170716fa199110050115d8b8ba4002680f6989aadef9c8e4b908b81f4b8f8d27a4647c208119e42873928e75e0828ef878a63accf42b966871281a4c2eacb01567aa8ba2b39e3130a2925514ee40a6dcf659b4e7dea79d4b3f1c73a3830e690424fcc2cbd1274262b569502a8f1db501361a959b8f687cd2587a3f79c072b7af7d70ff8a33e432143cb48e8b4c8cc4564c1822a4f77750f2cdacb0e16d6e32e4370b1a1638575373db44a98670a885cb9fc2279e40a86d89e505036bc950c8577f26bf831eb0854fab988de76d44c221d49101ed946e412a1ebbb166c0a02288bb9e8233d0b232acbfc3253198ee0a9096c4ddb8ec5217b060c7e4b559762815d4222c435e25e4e0d126080593af1229e3493db5112fb44d0352c4869c2524bfe5d2bb77d82b8c3a31e107027870f428c5ad09f88da16baaa6a46837a80313f9fd334d291710a30f5398340db6cf71b949400089b90ad892fa05dd601e6b6901553d341f37c8232982d3c5f1b0727e8c4a72a6d3b5960bc2e35a7c5576e05eae19345a68df29dcafe0747f36e4d6e7fc7ee73043df21da6bacf908fe72681f86e81b9a0bc7878bfcf3de804aac6b5e8959c87f327a46b513ef633d4a5070ca221151ef118019ce03e10767ee2fc385e75a830153adc0b29f685da8688b5244fd09ed6994ddc64be7cf9b9867b0aaa88b88797b2f064a510fb63e983008ff3913636fdeda18adf9be0c8aeb7182cb749b0ed59ae4bac29779f4350fa7c6065ce35fb950afdf334584c1c409bb8abd708f0ab2ee65e6792f182c43cf22fb0044cbe86dece4cc28348bda35cb96098cd135a9217772c11e04f538fffb253f77520d812e753b4d862f2001679e9bac034215dad532be0dab578ae1c29369fb246705b2765133f7d14d9ae82f5e62e45cbacacc22c00447f98b81a73e0802efb96ec31c10d988290a7651c7a912aaa4464ddf75c7e149622e2f61e11b216ffaeb2534ab674f9685880ea3f0b30acb420f31c9378302fc6e13b0912b5d92d6e1a5d46bf7eba01661c3406ff4fa9d631e73df184453c60a5f5d3f42e7b7bbf05ebdf84bf3fb9bba87d2eca34b0a8ed91524c9a44a7a59fd3da59529c23b405bb6bb91c41354740203c3ae0fbb7091090e913686ecb3e12214d9eaaac0a2e2e2a692dd8d1e9a2890d26534f5bfe4ab190c6a818bd7a514323249657b4a5f675c4bbf29cb437c1f34a4d4d008684bbb9f45830305362d05ecb2b3fa56a6b61a8649ae7df05ffab0ef9908cd53d54f33f8ef141880751af10888bb782550e162f9c892c7826b1709b5c8f82b59cddc6a0df89346345aadba4ebf291f61e20a62d326ff22f76de17b08f3a20c9cbe38f7d0d080efee4fc05074601e278db09c3a42273e44e6c458519f386fca2e24279823a40a183ffc12ab61cc91259f5bd7d9111e69d77282b0293e1aedca9e24f2a9dac227e52c49823f2a6874164ab489ef24b3a762e88f9ccf47a59b09737b71e4031092634b2a083f49feeb85d73f9251b6293988a12bec48cc7b912472f9b00628fd40b2f4e2a35ba4406e3958ec6999dbad17740aa918f03ffc922e2d780e4e22631e656672d8008d0d34d14ab5a7db2ca367844c8035f2b856a07e0ffd67ac0ca32e10afe74c6ee1903f511a581f0f9f94f13eb0a9b778ed47ab97362180bcbdcd882a87d30e164308cae82fcfb953e73e3748d9d4622a229e5d8f627790e021cd9d413760a77bf9372a5190410bfe7aebcf43f2c0aa1583359222e8d470e784290e25b75268deb5ceac9d098d46b399f5cfb1c0fdb421bac2d121ddea38a7988500d3dbdbec6f0805ac85b429f51125664d4333ae1f252cae9164438231016e6128e20beaee1e0b780819da8a410ee456526aa3422a3d8ec3c318adaad50882951ea48c5c9afced15a99a50024b8939a34cbe09a674a159dcc3f00157033e09a0a15f786a32fc63a0d3aed53677c2ed2532251a1778df5717a4b2a4a93e74c27379c798fec7d96e3a0194686def323dcdb695199af71bc8d26dfa00d8e16fd6e35d00fc4dde4f255a09a6f6eebd781756b34982d7a2454b1a81972550ab67a89fb7ba804540da22180ef4c13aa650ddea1ccf979df9277aadbbe8903840401e1bb86815a54837888bb847853450d80efa68373e2eaaccbd206c3c83d18c8489ae0748aa406671f4c8633670cf837332fa0fc7b1cb32bfa0298f2472708c2b1da1c83e419042c694e388435a5b6b4719c38da1d084fb2cf66198668fd28ded77b9162c6cef92788ad13f6e7233ca75b0b4ba41fe32750f7f05cd282b8e65cbbc51d5f196cb98cbe88db2ce75c11fe677e198f2132339ab844d1170634bb8fccc4e832c40e36804a78c4ac58cf05e5fd8fa14c85472e744bdfc6529a6c4c495c1e4762b06e72404ff38d0b960e6e1e211febf24994fca75fd5bd448d6a33fa318f1855345eb90f27f3e605ab166d7befbc63e6ceea157ae2e70afd078b5e903e7dcfb52182631d1b069ea255c8403b05f6ebfc0bd2315b5e2551fcab687e8c2c093214f12ee71e7c21ca040445b5e8e3e9556ba1b5ed5d49fff41aa844ce782cfe3ded80bae4abfc70cf2dcf012e9281d785d81802b7f7ce8a1f4f84e866839e96a1b002384c888029fb79fe463d1a4b3bf414b09f76f3fb4c573cf6d7e97d881bd40d791ce3b653ea807da0cae78947e854b2292db984c42bbd00216ce2270a935a6be8bd63d377e71e3c6eb1bd90f996108606c1bf8e07b5d051e0aecddbcfd2c419a5e6e06c2e8aff994aa8cf35d38f28d309c8ff59c2a375ef43570d10c899024ef55c0094bc4e0e7ecaef2b1f8ddb1d256b59806716ec66e95a5c45e3285a25536a0401f159337e12c75e7e542c90e08f6352b53564537ce80139d8f975dcdb3557acf60304e0978b1c49f61596b23f30609dbafe764928559cf914fe1df68bb1e27789bcbca64f2c19128f0897764929e1824aa5ec1dcd6baaab500f3e61bcc723a20f47b53990e9de7dda2d32654fa10cdee710cfcddb96df08e826cebb4f1b6d210ec05089dbcc033579b819b90e777d6efd57d7789860c459b5a95e7971815852fba5222b19c4dbdb326f17023d076c212b2285b0f6889534776c0c9b22bb01370d9378321c08ac082219b7258b3b59a907bce81d54d8c56c6cf67aa32142a3853ca51f4fb95de59031c5db7998e06e68f4bb08d4603009fa3f67209a80cb8ff17a9109fd1bb3cac7f8a10f5506332af402ccab34deda91d773e8a7c1bc0815eb25ce3a786b611787db51829b5eb8b243b037660cb6267fa72a7e0e2cffcb1ed61e4f37ee3129546651f0da97018322b694ccc7f3c48caac14d608badc58bcd5d50e30537c798d864411c69945770d4ca623a403fc455342ea2fd7913b406ce6151572a442dea91505917b6d8aa1477139ba26836876c189f30e7f7a8542e95f9692b723c8c5008f82fb672840cf6f15660d5eac6b652d511b988b75d22bc072c6b662e4e8def5059241d54f90ef114f63c28a4c34620fe1205ea90aff98921899aba0cfc397aa8ab59903720f33f903082cfde8529d5152428f7b0d158ecb5a88a14fb0f9348dc08fb3d5fb8cb68e77906828f59c114c35f32ea132af602f59b807a98a569b4489648ad9ab8d39432ed2c8dd23d179ed18a4ccd7606dfc49b66815bbb44d004cbb108083e9bfc257fa614b4b9bf174b0d66719e466d7db1fcd518ed24a07817175da13b95d61dba7bfe2ae8bc7eb9c676be04cc4323ee582fbaf959b2d3976d33321a8a0de119942c23f5ca882136564a12004596a453af46ff8db315e10d0c0d31f3c438cd61e792287f9a5d872b8d42c81a74c32512f21458bfb2fcc6431e0ab29ce6b96c8dd03d7a767c70484e063744231642803d0479adccc6cb1a8d247d338db605128a9650c0354f6dbe4294c08d61867d6f6d541b5e93e5cf3440df4232d434c94dfc4924dd05b013b06e932a0a5738e3c81c31835b3c7cefc84574efd7f44ccebbef905e946e69d02319b91f912fada3f46df24cce9eb63bda1761fb2ede049731c0f26f256929e9193dc82f3c409c544c5015374193af523694336c1952383d91416579e143786469aaccd060e0390130f9416d5d5e9fefcf35196936d28f82f189e347de54b596ab05e112000c85c4b28a1f005be0ca21a0fff7fcdb00a5aebf7af9d17fdae0d87dda8fbad2092da619a9fc4c1c13c9d5172e82b86608f8e8c8a0c264bc5b6ebac7372cb2082f7bea2c2d9f577bf96978997c25669ba84e578696c93e2e08ed62d3b14883f4e77dca15680dfa5447577a0aae987e5d95334c37fc432a1c196e0cd3e2ca135966c6cd150e2cbf014f6d5980a36a0163e0dd3d8157b155a5722e61066f211eb66d2b6d8ea3fb82c64f0e164c42ec40d945f517a114a8d8acc75d909154aca6b797ec1f7f9c7e8264a0f2cb194fdad5a1fd84a5bf7901a20b656337899af402d33978706593e09832c987892e09472138d46853c910a4e69f08bf0e11fd81c5a3c3271b099c85160168736e27c2612adaa368f8aff23c4487aa65627733042a7fd1c89afd2fb4967618908d7b3e07419ccacaae1765894917a59830a8b6c21a1a7551e0f2b5e29c0d2698ec3aaf3ceabd069573330e7e35d9992ec5578b2d8d0d7430f88dc25923fb0e4b20dbd0adfac0deb62305850fc32b991d107c4cd132c75459798e7803e0231b35193d3b9435b4307025b800b153473c09ba706b9dbc660f1abc42227b24374cd8ee497bb3cb667e68a35e1e130e636a8bd04f74ffc4899c4019af8738681269a4ef7e70f26b7e6c1c0d1b4a92c5b326575bc30bff580943c5ed8a9b249336344a6075995f8584da2a5e0056110ffa596bf1d48431b510160eef825eece201875b9b3e4bcd0fbd3faeda7fbb19dd06293bc8ead05d432c25a8bc1644beb7e8c1fa185f07f8f172b642bc7f3b35773c6422bc721c406d8aebb30b6cdab86f3fe46994b5b258c09eb2d6f441ad7946ee2fa43b20adce6b807031a97941b1f1b76977ea748dbbc0a6cfca7b3c2cd57a29ee8137a0f797120906d68af395b7dd4df0d6d4689f66ae9296b966d9ea1cee4d62227e600bc73629811619889367da81dddd2118effa81b2061a57b8f1539f3fa5134f9ecaf1653444c67200c332f64a124baa85727094de60831289783d998cb60d8aeeea253d705d1ff7cd7bf9f3d9b37db35887359e4079523eef70ad618220b1fb2be97002600d19a899b5921b488d1720717d9a4c2f1ff5b982296a6bff9cfb1248b846e5a38741afea0d9a1334b94c270b1265e8b3392a7c5cf5387014eb3d9a9439ef818180d3cb5cfa32a063851222879b54dad096144d10976f8f53749704f8fc615ad952049b950be11f06466217a2f3035e612dc4fd0333300bee1db01b2bbfb7fb08de55cc37a3c067413264ed61997784ac3844d67c5daec6d8ccbd98c62e5b29164e4ba751c02d62d2ee2b89095d73293e8843d58d2ff6423c909a00a56b9306ac6c58f5226c0607ecca7e736058f4800fa8fb1bcc58661867ca1ff5d897ff00239525eae547704520f0c112fc1c90deca5fd070d74ec22d6c5ef859082f82581a303cea8d3694486d8322193c3921ec4a57d601f260267fb9067e557adbc77526f4202dc5c2e2aad0f0926ecf7ca47ad36122a3713b3e0cb418a8d7f5c57cd62dc9463537ebf32bf9fb4377078a2c7e9b54f4000f42b67ecabcda6ba1b66579126a8e2387ca3878840edd0260363931ce5bcf63a105e4e7ca98969f4672a76a1cc9325c090142b429f8e9b170a1cf0ac1450c99551ed63b29a48953905a9ded680f8c6265c6034de7049bbdffd26137a50eb4e85fc16c5d1e6e07c0f97be7da6e18d2a6ff5475e66feb53e74dcea1fc575ddb8e49f614212ba425fd73a734fc36a669aa1fad223052f232a9f16e81aeb1d4753b658cd85e2e93cd008870cdee912cab174844a44ab98a9321e767b844ca20a2cfac6662660e267e4b1088262bacce3b37db66aaf7f94a0e12971d8eb3635b9f3c03a89a64ce49c903a03c3a1567dd71cb6be4c9b41c11fd9db93e422e303592027f56f6b2e86cb5b7fdd01d3b33cd36c3fccfc79fce947fb05afd25f867c367a04222b7f708023fcdfa6f01cc9a86c0f04e57ce4e23a7821589ba0fbf9f97ec2384a9e4f7f87a454459d4ad1b29dacff28fd7d29c3ed202fbc6799fb99077943220fee02f65f4ea62fc5612fdf51ffd0af367d6a881b14249f8c52df3a343383ffe74d885a6184e1e9f4d772b53a31d884c7d0e9df2f179ad28f5e766b1f010b201dad16399849db7ee080085a492691f8b34fc314a77aa394046f62aabb26e0dbb1147c641b7ff38f0bff47c47ac5ef2847b314ea1cd28107ab046c14a6a6f8172e1ddd3e4e30dd30506d52a4af0a1cf059eab9606739a17794975a3c97d83cdd77508693c485adb8aef239c1a56b26cb6db8caac6f7f37b2d2e3388c8651f6c6c73e8feb1963ec5f116752c90590276c1d0d4479524075796900fa176a633a2b8dbefa1ce2ddd72f6e78b0183fa0832ef631f48e8b8f5e435900fb7fb8f514739998006429df444ed609c2efc576770217be0c3ee1d5a4ef5fa9260f18b5437a58d772fc1f0e673cc5441c4289f26bd4debee1147b4901946bc9e8717e62f2b2333b3c2a5a7270c3688994ec09579a7013b8b1804a442e9ae7b0ed45516fadee5187f8da19636ea731f9c7478b640df28e5b70ffe1aba3d9da4496671c9a3725a5e4c05cb65f36e0869dcf54186555517ed0b8114d8e7c07d092d0038b0af3a3934b5038a685fb05510402939e955bd76b5ae70b2b3f509f747989f603fd14e0e67174a7eba8f6e36bac9e866e3bff7c7eaa71cad5b061e728b14dbdbfd44e2f60e2e318ae082ce19ba73023d72aa73044432a4d608516b8410b2f79632e20ae30a9a0a4b62a408d1209d628ea385e5532c38c6aa4d272ba6e5b36a33c64242424242eac64ba19026174996a5c45a624d41e3d032281d49d3f0bc7ed7631269a5abfbad989a9309ead8f9ee1f072e0162554af2d5c900c936aa947ac28857a5e45229d12b6420aaeea6c4cc502c9fe2e158187587d7b85c2e97cb1546cd18abc6aa856114ab1646cdd0037b59350f2c85fae118cbe34004c135e425b0aca8cdd80e0e92af4e414f224091105563815195dc76a23752f1c776631229ad4a898564e5bd6621495816263ad3c3245e9717d765b9d14e31c4ab5232e286cd1526b8a28857eca61079091d88cb8788c37268198a5bc0319552d4a15c4cb4fdf51ab866208aa1f4022bed8e6df4a94a6e65ccfb35a18e57f188ed237eb76d18e2cf136abb3b69d94ea5f4c27c373e69bbfdc8e49a6c53a52461ec8589d84818334f3ae5326353b22c266aaa64b7589ab5d21d5139d6d138484e1a22e9aa708cbbec8ab0f2dcc832a8479fda59912f493b122fc8443b4304996e4b31c9e93420ce71c78cf2fc05b23ce7afcfed2c73d0e4d7dcb8046621f37c4ac476d844ecfc5421c92d6d24c98df91888137d2ce57f2d276de176851e5be772bd24d327392e8defab55e8aad93b64a7685bfe7b49185572db1d6cd9fe66c1cb7a87ec1c3241851868c0e18723a42d4b636a6ca0da0b0963d523319fecba05baf25a00922f9f3104b310efbbefa084ad93b98691ddaea42d272db8ea279ebecb70850cd8d55f12f6ad40ff8d57da151d81ee93279888df9e93f6c6d972cad91b8b7b576f06c62122f235c442f379c4fb03bd7a4af506a859d4052d67d42b2412c4de97fd40f07bbd8686ac386652f0892e4137369f9393f7c536d442547538d5ec4f1f6c7bb4f57abd5e9ee50701b2f7653dd0e5fab7253c5537cdb4b8a9574fadb2c820f9ea46026af3e29747bb7fb23deb75e3eadbb8117c200df2aa22f690af97cb054ecb483c58c87b136e74b25a200b3dd55e2f19241f44c67a0a7c35524fc9d718622b6481df8aa562791d8bdb286bb264339116d5b1e6db802886f0b10d35444e63e6c8ceefa04a6e79e011e7132b5881135e8fbec2cb3195c646bbb1097df7cd8dc8d6b39b9b1e29c41e5cd7b5ed7aec9eb088b7a5d43d754f4a3d2cb310bd5777687bbba71c33ca773f2bcfb4c8f69824e908d955911f6f4996cf762c9fbaa14f948986b14293f2e28a9ad29634ee40b919c38424add49172bac28b521b0121470623449ad22b2cdf8b12354a430e54d3982c485375d8382d793992465172ce342565b1a3c3130b415ede642866a16f09104bfb345432026d1bab078b8fa912dd92c61d2837639826d2b45247cae90a2f52491aa52107aa694c6769a4291c988d0a2fa0af9b016de6eeee89ee1d944cab6465657799efff580e5fd86c8f4eda3e71c25cd80e5fe86c8f1703962a99a11295a51b774fd67d62e9e994dc746339e9ac0c39b043245d88a49b33f442256d6792ed4e3acf74d279e61684fd49025a7ab6520948596846b5659a659ee3b61791648303529452ba75146906c53aafa3b419c49d688326c2e14497dce8a494524a299d1c06a43a29fe4629a594cadba07d9f9b9e944e96309e21199339ae0383638eb38145ea9bb3674a0a725ba7f2561fc802bf70ced90a9170a72c0639ee36a8702a109be3388ee34419ce194302ee39e59c66a6f783679fe61cc19427231f28f66c44868642568f0d2ace4967d786cea62914a90deda6ef39e99ce2d1846843e57c5f8b0b830b83bb25ed5e205eea799e07522446810a01e84ec11db1cc6a2527a51ca4839dbdd18dc324a0f5c41450a419e3b25061058e81463348b20a40a319f368a09195520a1854b3f08b11231f28f66c44868642568f0d1ae4f512c549f37a74402810412e0cf1321b76b2d7a3b990a8a048ec44916816a6483ea1682344b2dd0041271b5244cfa3ed20821e920d293e06ba4356b2ddcee38f4ee95009e8b6512a670f94522244ba31d19f7d296976ea36594e96f3b652b5ad040307cdc731e2c2cecf3b4c5888caa53c579046761b9b1027978438df89409cb349bb37b1189f8b2cad346f46cfd51864bd41d8fb845aee3f4b5ac972db1c6f107672dce8a465b7f10b65a336b23368caf9ac197376677d721ba536fc206134090b4fbf5556c541c2b6d3d148d8894345b36d8e3f3078978fc1bb1c8110330f84bc378a9e4a9c45b3f631225f2b900ec91711f9a2f7b18578598a9f6c90b01aa5f44ca89c544e7aafcaaa3242bc2c65c38cc9d31944dffd749d0d3824b51719ab4c3d3c597ac45354d2cd035aec35c152914ecd223a3b321c17664e4eb59281bfd38d0de5efbc422a895e920784ea57e438aee366084315dfc671dc6ac5711c37aec083231020f85300f0e143f04c7fdcaf0996db42249c52c771dd83a636679d773a998684cd918e912f7a0547572042414141c917126592b3e6846a63da98a2ea6c671aaabdb0dd92a93b69c628a5928985da1bc522448f858678555bc648d8a552504cb4bd3df178545b24ecdb104554b942bd402229a97b4a26262ad5df682cd467da681c120b3979e1c5c6b43149a5cf0c2a61f75be228c76daf292b4869be6449f3254b4dc304176ea31e1addb2e91a2bbb9b6a6b3abc22de2d694b9a4a9a76e0b0a2baa56e09ca8b6e4c988ea973eae4744ddd155050505050505050524343af175454b7c4715242cd98e789a2cbf5bfeed09c126ac6c44bcf0c134a332082e83c2e609a89b92d45b0b2f51b64e5d82d55db49a8b9a4c35ed9dd755d87c484b41476d8db4169c6136f3fe630f45ef65d3f56189ef52482dd12cfa452ab5bfa74e8584262eaa492845ae26a12d6b158acb358ac8ef52e44d2b1584bbab3ce12c61ab926f992507cc55218daaf5e1922e9e6b0eb464e42754b50dd52b7c48af2f98007ac2c1dd194c6206de13632eae6c237e2a546974d29fbd4a88d8c7afb82529ae4c54e9ddeb2499692627672720ad3484e9fa474a8945419dc78585cc2a9a5ec846218cf7e1cc731333377283e215eeab4596a027a02ce82a90a9892a12dd8b68d632929f9797143c9ca56cbffb45a524a59474a29e55bdcdd341a8d46a379b4a1a1d70b4a8ed18c716ba446f4b3237e69d068348fe6d13c1a929ef116d91e513c73ebd765c5f1f6b7b35aa7ad564f55bd916cf583922fa94475956afca2e40b8a3869494a9f54eb4cad35d2a68fc6443d975e78e618ebe0f7d50fdb57bda78a9559486b4758c17a45578fbb019484c991b1233193a325cd70db26474754d1260f86d58c1b3d9a944793776e28752d3c524a29b9ddcca98bb4eab01f07c54c12f6b364066d1165e7f8338b2c947c45214d0a45c7801e85a24c509e274e28cab4854aa06e06ac93cef6d8b2c11a3383dddd7d069190be304b1b1586d15a5bc1afbe4a9c502faed3102f558d630b6cff02591006ba2cf8ca300ac5af3e08de9bb179f067a2efe0489daa9c2386bfd4692e8961124a5577907c4520b881971594524af02a9554813f22655589508838e83f0f54854ac2835f5531f25f58291b70a44f3ed050bd0b91a8a47ca24e33e6cd566087f25fa77a6c35d22c14e9055050534af6b7a65634f3ab5b22752c2c0c3e6ddbb66ddbb66ddbc6b227c8ec46aeba70cc3b3fdd8d690363e5bb53a619f3c62da91b936c4db254cbd2972ed4686539645285c8e4711cc771dbb6c99944b7cd7b5a196ddbb6b1e8862ed196684b51d3139758e8486d426d524b53cda98dc8d5bed1f56d6c5de9a634fa3344a4eeb03d6cac6c266c481b4dbe64eb48a45c70903c1d2b6b2e3b431a45ab7d627c5f57258c303a36619ca0abd28adaa4b68ded3458e79b0269e096ef0e7824b963b3b111af2737e68db7d619dbad26f9ea4f6ab69a66ec739235db9fd30c97b968522fd3b9f5721937d4cb786ca8b7a148a0dea612817a1b0b04ea6d2d0fa8b7bb38a0de06d3807a3b8a1aea6d3334d4db6918506f63b1807a5b0b05d4db7112506f7381807a9bce01eaed3266a8b7f1c850af8462807a259502d42bb110a05ea925867a659701d42bc108a05e19050cf54a334cea95695ea85762e142bd528b16ea957158a85772b142bd924e00ea95652ca957e251a1de094549bd934a927a271624f54e2d29d43bbba050ef0433ab774661eb9d668ed43bd3847c02edad1364275cde63a21f2e2f32910f26fc8626fcb67a58664209bf384af8d5b183652510fdfa20fafd51594644c22f10127e3d08621909467e858cfc0a1181654662bf4562bf3112581683fd9e00fb058065194c4d915f5eb3846545da10f9e52c6060199137437e19ce0c2c1b3267845fdea206968df08508bf0cc60d2c13618ca15f26c309cb86cc10f2cb6858806542d408e197f34061590852847e7b0a1596091111e4b7af606159102340f8ed23b4b00c84243ef86d2e5d58f6c11241bffd050ccb82c4bc7e1b8a2858f622e3c16f4f6186651e50d1c16fa349c3b20ed400f9ed3558b00c481ba0dfce420b9601bde1e0b7e1c461190773c6dfde820b968d5fd4df06830ecbea18ff6d32ba0c96dd8c1fbf8d46e361d90f3536f8ed3c5058b681141fbf720a1596f920a2c7afbc8285653d8cf8f995476861d94f123c7e25972e2ce3b1c48e5ff9050ccb768871fd4a28a260998b8c8e5f39851996e9a022c7af4493866539d4e0f8956bb060198e363ebf320b2d58e6f3e6c6af8413876537e6d8f8955b70c1321b5ff4fc4a30e8b0ac670cf1579221cb60996846eb57a221f1b0aca506eb57e681c2329694f0774ea1c2b29008f0775ec1c232d088ef771ea185655f12abdfc9a50bcb564ba87ee717302c5389f17e271451b0cc23d3fdce29ccb0aca382fb9d68d2b08cbb9c6ae61a2c58b6b5a1bf330b2d58462fdfccdf09c7ce382c9b7ff29662bc6205de518cd7d5c39b69bce7e10dc5785f3bbc9f18ef9093b798f11ad1e11d66bc5ca3c0db89f1b2530eef26c6cb4f137883192f43e1f05e1a2f4735797f192f4bdd3713e3e5a91bde4b8c97efd8f0f632de3692c05b89f1362d026f108cb79120f0ee32de4e7ac05b69bcade4803797f1f65203de1f186f33d5f04e62bcdd44c37bcb78bbc6803712e36da705bc3d30de7e52c05bcb781b2a01efa4f1761402de478cb7a50ef0eec0787b6a86b711e3ed3b32bcb38c571a19e05dc47825ad006f0e8c572211e08d65bc32298637d278a5d200de57c62b9704f0dec07825130c6f22c62b9b98bcad8c57d65e785719af7472e13dc478e5530b6f2ae395502cbc69e395512bbca78c574a05e02dc478e5d492b794f1ca3b2abc8fc63b8d94bca38c77d292bc3530de8984e40d65bc332985b7d178a7120a2f1aef5c9a3d88f14e26fb0c8c77361d3910e39d35001c03b25fc00223b3d00f9559c887ca2cf4a4029559a8071e2ab3d00e9559c8890e14c801caf6278043931b6c900092ed4720c9f621f08025db7740039a6cbf869aedd3e064fb0c580094ed2b200152b68f8003f41ddb9fc1c8f665a0d9be01906cbf00048861c9f607208026db87a166fb4c9c6cff05175a88b27d165698b2fd00c83bb6bfc4c8f655a0d9be1224db4f9264fb485258b27d14986c7fd664fbb666fb472ab3100064f5845668820e1c25fcf041e401101284081989158901e004126c1fb6464d1adb2f92451b2c6c9f089c375ad8fe902de6c4b1fd11c0f8820bdb17818c31e8d8fe101a669461fb42380fabc1786c3f84295284ae1041c5f6831c610416db07814b125a6cff832f4b74b1fd2028c480b1fdd71464a2b07d0fd05061c6f63b58a3268ded03c9a20d16b60f04e78d16b6cfc11673e2d8fe08c6175cd87e25630c3ab67f34cc28c3f67f749e56a3f1d8fe0653a440b17d1f5788a062fb3d8e30028bedff7049428bedf3f8b24417dbdf01851830b6ef9a824c14b6af030d15666c3fc71a35696c1f47166db0b07d1f386fb4b0fd1b5bcc8963fb36c0f8820bdbef21630c3ab62fa2614619b6df9279a41a128fedb3a6488162fbe11522a8d83e788411586cffe3928416db5f7d59a28bedaba01003c6f6bd29c84461fb1d1a2accd83eb7464d1adbdfb26843e1bcd1c2f6e71643ee9c53e4ce38b6e70a453f04514251532098f8e43ff964bea5644ec96f4b43be0c956c2d93f0e9c842f2df94538e3f49ec9cb365994f12f13c4b29a594a2b764e72513f529a54be6ec46e32c8a3eae1e5ee7796bd0e819b42986145ddc455589d199d7d6f33cef2d7aa3e779694230c77a9ef5c68b03901802371df86eb035817845d1c7d5c3f3bc8e7a51789e774fc23cb0de453cd653c37ae3edb88dba449f28bcb0577c156e2ca709e36483584e13c592f5e6276b4905b641248cbb096017b1df4306cd4fcfe50346bc2f3b5f4333c6cd6614494c4af615c444f2b6ad0c0fd0464646461b730c9f04a51c83bce46bfe96d75ce9396b92098f773c3a1e1d8f8ec7ef6dc7e3f76599d8afca21fef9f17eea156d6bbc380c0d316939f4ca7129608e712864c21b3787a807ba7a6c36bcf8b61f8c8c8ca058fa02e288f3a0d9820c346aa0c61a7966e0a3f44c4ad18cd6cdc0b1fb28e8495813eeabb7eb2c964bbae48e7f0df278e7ca6377fc538d975ad5b472da4eda4e86a763375e15ab88c97e5d1e1b52f14e3c3a3ed911566621d578e5c5775574e29d8726aabbde4475297aa2f7eea2eaaa8baad109f5fed363031fbfe1a3d5dac047ed512fb3b1adffd4cb6d6ccb75b63acea3ba2e9e43256d649985768cd735ca8b52bc0eb1e88ea8ba28feaa2e5e152e5175e7704967a5ca765edffb38442293f05064e5e99d84bf3f3cd96159bf1cb250244727e16f77f09449f8ee54beb3e0188539e876a313d6f8850a7829cff1f03407b30897db5879107c0e6f066d3d4343dcfeedde8ce500738c545c3329360e8e54bc99141c97227290fc8d4bf1b9949e4b192f0efc64c5fbdce73ddfce1ce4ce7f3f2271f854d70c9abf51a5d818815871e942468b11684ea0340b82a196d490e2c68b376b8899f58ce20c2a62b2df98a4c87a6fd526dcc35b64bfd3ea230d91f5ce636ff8ee1dc33ccf76d849b9b1c670fc02826310fc3413f3d59f25945a5a6fdb2712b8453687cef630ad5422efa4f3e459e25939feacd05dbe1b5b78d27635fee0d0d927d34a2624bb411146dc5ee0b8f1963928f282e0bacda7ced79f35cafc36cf560251748b2afd9c639479ae54ca299b76179e846ddb397ca1c9f67dbd711dd771455bb7755c6d22e5462de5b84dde2ba594f45bf76d3bb735d7719be43aaee36a130ee4ba8d485aca711b156aac3ebdfee657dff7afbdd70e5e0f6dfb9fbc6ab552ad56aa2d88e51e843b1dbdc93acff03c41d5bb1d53a5ea542a4ea51a2fbd5e585df65f7fb55a558e7b87dd65a55bb7f23eeffb5ab6c7a9549e4ae5755e5579aa95ca6ba2eaba52ad54aaafeed5262a956ac5712a95d78ddcd86408091aa45183ee3d65fb2b288cec376e755ed2efc6eefaf5b70377fa597be88fd6798f7aa7d41b0a5fa856fec89c54b65a72bc9e77f63e9b27cbc9b4de832499d61b3d16daeed540ecdef60e71ed7ab689ba6f4f8189e437eff78755a9542ad58724acc7c6b71b91b0ed5f4f05e52bbc8d2aca576863a4f215b2eed5db95ed138f93728a95db61b3ad7a55361cc16fa4f2f5bd3b8847c242ee9dfc42ec73f317e26ad5b28f30d1b42da1705d552c54e45527add0f63b597f56904dbccbb3fd3e0a72d88d5dbb55747a57bdab4d3c097a3d4622dbed294858f7cd93e3a5f649db6efc5932f3e4c93325154529a594524ae9134a2fd7eb89243b1fc4c844c2ce3462d2b0735e9f5a10013448c11370ce30c1a6ccacb758f921cecad339a21802519442bc9b9148b98897be40bc34e96e462d2868189b977e42819da71b6dbb9802bbdd47c26ed86dfb6bbb6b4b43c6d207769ef3de344143249b0d28e29d51e29c42ec5943bc52caf6c52b629845e49a702889961ee8256343f4ae1ef47cc50e49a20a1292a8819df791302076ba2c336c8211b99ac8a1113d15885e0ac4cd880323decd88ce8c66cc0bc188e1921866215e0e43644919d923725b7507715ad0c1a11b08c974a19ab27c7a837aad061faad1f8da32edba9847e3c20be1cdbcdfd606ddaf2a94758f79a685c8ef7d1d4c04da78ebaa1b513acfacbbd7a24d353c240d1791b751e71b1e22dfaa5f8d8582cef43c636537f976601987ed2e90d5c1b1d6f93f9888757e084c049e2f844bf8ceeff9e497f05ffdd27a4f9d7038485eac738d370b3f6bb3ab346fd66a1d45e93c33ef42783315eb127c09dfe5aabb3cb7ea64d5095567ad4ea73ab16021f25d3d12e233e621ab515569e2ac3b871dcd9b75236fb5b96603dbd701a77b166d9c87f431d0ccdb6c77b643db6d429bd02574094dd4444d4293d046da48c73ad6b08675912ed2449a480fe9213d428fd022b4083dd4432da48574081d420bb55007e9200d4283d01ff4071dd441fdea577bd01e7407dd410369200dd440cd4173d0638f5dbbf6fbfda37ff406bd41fb681fdda37bf44fff348fe6d13b7a47bbdad53a5a47e7e81c8da371b44ffbf48dbed136da46f7744f8b2d76ab5bcd6a56871d36d8607ffdf5aa57ad6a557bed75d75d73cdf5d65bd3a63dc7369105dedd77fd7f7de8467ee42a30910e14785f86d3c0441378df86ebf01fde466fda1be99dc4441150622208bc99de4d4cd40026aae1fd767a3fbda1de514ca480f7d4fbcea5d125ed12e932e952e972e992e9b2e9b276e974f9c4442f5c465d4a5d4e5ddef934faa47d227d267d2a7d2e7d3231110aefcf26269abd3f6b4c64df47de00787f423191ecfdeeeeeeee86bd8bbc89bc87bc47788bf01e7a0b7987f0167a077983f0fee01df47ebd3d7877f006f2067a73f01edff5fdf78ff7066f1fef1eef9f378ff78eb7ebade39de38de3edf3bef1b6f1ee798befd69bf50edfe0fb7b77777777997ad4d9de8a58a0b6fde691233f32c32397b0233ff8f0273c3033df4eb2ccccb7a12cdf8eb2ccb7ef5866e62b932c335fc96499af74b2cc574e59bef28e65be9366f94e24cbcc77d62cdfe964f9cea7b0cbfcb64eb83a2cfbb0fcc33210cb1e5816b22cc47211cb31cb27580680e518c798db588671112ec244780bcb43180ccb23f0082c028bc0433cc442580887c021b0100b71100ec2203008fc014361998ce5292c5361f9c56a2c7bc01d70070c848130106f61990306c3f2c82357ae7c3effe01fbc016fc03ed807f7e01efcc33fcc8379f00edec12e76b10ed6c1393807e3601cecc33e7c836fb00db6c13ddcc3228bdce216b398c546580e1964903ffe78c5505856b18a3df6588de58e39cec2f2c69b05ce57b1accb9cdfc3b213cedfc13213ceaf2c2be1fc2096119d2f02cb48389f04961939dfb22c76fe1296c1ce87816545ce9f816544ceaf816543cebf8165239cef8465229c6f01960d9d859c43380b9d839c41387f700e3abfce1e9c3b38bfb560199033d09983f378aee79f7f9c3738fb38f738ff9c799c779c5d671de71c671c679ff38db38d73cf593cb7ceac7378fed4c232f0fc9d5767d5d93b7767eebcbdc77cab479de7d2e85c3d6a35de6bbcab475d83771af7ea51e379d3e0aa7ad468bcef7c558fda8cf719ffea51cfe06de7603dea32de3278588f9a8cf7d459f5a8c778c7e0ad7ad462bceb5cac474de71dc67bea5183f196ba8d7ad45fbc61f01bf5a85ff0f6e23ef5a8b97877711cf5a8b778473d473dea396f175c473dea16bce5dc558f3ace9b05df518f1ace1bea3cea51bf79afe03ff5a855f076f31ef5a8b578a7e03eea5167f17efa06f5a8dbbc51f01ff5a84ff066f3d7a3c6e26d82d77ad46bde4e1feb51ab7997e01cd4a3b6e27dc581ea51a779577120f5a8d1bc6befa01e35156f12dc837ad423789ff9ab1eb599b7081e548f7a8a77d33fa84741ffe020d4230ffe7a907a04e41d5ca81e7170a087508feac70ba9473ffe0fd5231fdfe022d4a39ff7f808f568c7797c483dd271d789d4231ccff122f5e8c67d0eab473db7f1583d6a5dbc917a149e7512ead177f044f548f5d54ba847ddbd9b508f363a6287e01c32f17c20f32752bc0251bc07a6f300c57778e24ec45c8730a78013cfa1894f00cc71587a932fbf4cfc86256e83974b40894700048740973f40e90ee0f2067ce03524711ab69c01487c011eb802b43c014947c0113f40073e83119721cb0d50c40bc0811300cb6340fa00ae5c001b380c449c8995bf50e52e0cf116a89c05da5798f20008f12552aec2d1954479120d1c0994a7d04647a1320b157d56998582c80010974647de798e1c79af61df6a58fb4e63f6aec16cf6a6010a6f3c28a0f0be93c21b8d1452789f81e46d0612246f3b49de334892e42d0325ef329428794fa9f026430515de3158f21e63c992779d00bcc5084000de61acf0a6b3c20a6f2916de60b0c0c21b062dbcbf68a185b7172ebc5fe0820bef2e5e7873f1c20bef2826ef2d983079bb0086f71c186078cb11c0bb050210c09b050378c719c000de5031bce1c410c37b050478bf210001de6e0af05641010af04e8101de5a18c000ef2719de59c820c31b0533bcdbcc30c39bcd01de2738c001de2640c01b0b0420e0ed9480f79a0424e05d0205bcd5284001ef2b16f0b662010b7857c180771a0630e05da3e18d86061ade24a8e14d450d35bccf34e03d820634e02d82ca5cc4016f330e70c0bba9321779c07b8a073ce01f40e0411080c05f11b8071188c03b90c08148400207b2e11cd860c3c71b5e6fb8e1bfff71ef3768721f4d9abc070effc10187f398c0774c600277e5701d39e4f01c14380e0a50e03e3afc860e3adc8693f73871727187b776d8e12c1e1ef2c0c3c11efef5d0c35715b8aa0215b8f7e4dd9327457cf85639eb03b53efc3b52efd4028b2347a1daa7506747525178929ac295542457a126f992aae401a82a7c85bae42cd400bc85bac25da82cfc85dac29954170e437de102a84c3e800ac363a8023801ea005e801ac30d500970196a013e4335c00f50653802ea0ccf40c5c081a8177802ea01ae808a802fa026e00ca80a380d7501afa132e00da834dc01b5863fa036e010a80e7804ea032e810a81db5023f01baa047eab0d6f526f380ef57e02b5c973a8389c027502d7a1e670279502dfa1ea701eaa93f7507778052a0f7f527bb80fb5020fa202f1a29a81b7510de20da516bd3550dbe81da53694f7516d0dbca5d48ef216a2f6d17b4a6d296f5a6d21de546a4f790f519bf6ae529bcadb4aed21de44d4aef2de406d2bef2bb5897823d5dec01b4bed2b6f0ed4467a17511bcb3b4b6d0ebc8da85dc4bb03b5b3bc8fa86dc43ba97607de5a6a1ff1f640eda43712b5b5bcb7d4f6c03b89da48bc3f507bcb9b4bed24de4ab53ff0ee529bcb1b04b595de4ad4eef2f6521b04ef256a2bf166a2b697f797da4bbc976a33f10653fbcbbb89da4b6f276a837987a9ddc45b4c6d27de4fd40ef386a2b6983753ed27de51d486e22d456da63799da51dc02f587da656411f913641132b5437000d429abf384cab31f2a5b0bd4b614ce9b22521691f7a15ed5937a7b7accd87386d82118af672b50ef8e1eeaad3cd41bb443bd22d44b820ef5721a0ad4cb58e4502f6b31817a390e0e35f6baac3ccfcde5cd0ad6ec4c8fcba4948add67cf0629adcd20797a6f498a526eecbaaedb3ee946f976aded1c7b4c5043438ee51a0da6a4b024f0d2d49a07e9b65191167d594009934af2352fbdc8a0297fc0b3fd58ad1f0e48c27eba53db7dd54a3228fc1cc3f1878ed725c508efab6016ab6e0553d048affab089f2468e9141f35c954c634c3aa708613733dc797074a39ee442ec3aa674eb10942b7479f2e459c352d03583e6b72f498996d3cc41b268922ca771419375594e3347c97e1204a9e7f5202db7c922fa4297274f9e3c96ca1afda0f8c033d007d630499cff56bfdef779a01b4b6f240519f3948c8c8ca0cc689a336c2ca54f51f60e6d4a67d498c2c97edceafb2ab310f755bd3f30adbe74e76db50a917ce7daf7de40192ae9efa09c3d19645d0c5866a1ef6c3dafe32af3d336676f7d1922e919aac076ced73cfde5e863b367f33190284a97bc7c31b17cb6419af45ff245b73be1f89ee7799e373ae9ce8d972f0f8b2839a43d6e412e8f4eb8dffec6bdebe5f78f4c9e3d3ae9c62ff3dc38241ab9bfaf8d8920403d7c449708413e4c2ce8646e67ab8a420f44d18c7eab17a04ee6ef6aec84e8d9f78f3e0a1041e499d14b299ad1518af76f54051185f3cc683b66dcbbeae40b3752a1dfe848bfb514ea92b28de20c6ad758d4dddde604f71dac6137dbed8b028294d27b65c4db48361e0b6998e2eaaad65dfdbe6c657d1d38437a1b97adabde23fe6bf560c5eb60c573e802dbd6088415c7218f8c781ac6eba9c62bb6c6ebb2977bb0adb767637ced1945c9c4b6c2b3dd5867d528e081289ab16a94f04014cdc21104c177f5c06d030fd6f9d50ee4c1dc23ca17730f285fed7dd543970c6145c27ebcf73d2e810be4d836f2e89221868858a5d55459b1d1c4e65a0a47e8112dd48ecc22e5919d340d8f899a85e4cc42e575dca6f23a6ee3366e3b521323dea6d59ab24c6d63b630148a9fe8c6adb1fafc3eeb8adbb8cd68dea10121d16a4e43947bba91c6c7407753a9542a9514f1b692912d3a7409d4c87c1a6a0926698b122d4899a6eee9d261aa36caa9c4529930536dd464e7e7b72db2871509e4c566b14d5d421926329a9bd7711bf53a6ea374a31b35236eb449698d7545f471f5a0947a513cd125fa8822162b4e3d96def5571009eb869ef8e26c451350525df27881c414cd82125c7102d55f07fab9296ad4882237e002099e30e3ce9d1a9c2d3a4e098628c36d407f05a9c5b1d495a666a62686bd1fe2c6f8a8881748ca095296454c230f0a51fe05615ed0d4815d3391eadba9f77d2a90c71e32625f4e2421f7237282deb9da6db77faaea4407cb2ce4852dd8102ea1efd1c9e98ced17e86d902fae6377d85600b23dd2d056be4e464937f22563205e3965e5edbeba6cd25d757939c544df89bccb7f5e75d25abdab5f6deb852fa8ee39a971b22acfbbeab6b32429f516f9e2a6dc9ab26e916d24f912af8f9ddceb77b9362903dd81c988462b244e4367caf630f9c7ac4d973883e4dc7aba7355b008830b7b452b3f44640e2da16285e3daca197c0cf435a5cc3368e41f913da5837c4929a59452524a39ca518e8e1b6b4972f5e4eb229501d7adbe6fd5715b70ddeafb561d4746092fc65871d0b67a22b9aee3c0745cc7898053718d245ff20c400175f1cb63bbfa54dca6aa9b9d96ab9283b6772bbb6d392c11adf76f82aa2a2d77014b83c82039be7ab85c736b8134c80da28f1b6f7e612d3aaee3622075a8604804372052a739226b0b9bafcc17a74c1565ca38f1217dab8debbaa61903c7aea90b2ba35a085729bf54973eaaa8de367eb5eafa6069f3aba7b7cd6ef6e7c641754d3368f3d264e55d2b292dedcf8d72e3e6492fea8ba96293c23870ec681dcdc9a339755eb7f16b3b5755b4190b3968bbbcf75d6e38ecf6db217dde8ae3d7eac9fc5a0eb1dcc675ddc6417553e98d1d8d45292bf148b26179ae6833a8a3cd8e36c5710176bee9d82cb4c9e6cae24666a1ed1b1de9ea89a3ab21bed0cc102f065f23e594f21e0bf17f885c9879da59fa985655acd2706006ab27c4d5192b17889f186e4455175f1262f7b45a23f6a079126d287186e821b1720254a24c14b48b2162d308b4cb07542a88aaa65ed44694ead5f916e6c73cb30185d149670e49392a7070557c1ed42a74d32d9618737e5cbe1f57135278d4c86e35db30a8a28509c698f17dc6886d025b3482273450a60a0bd8ac51c1ec6e4a631877a6382171c1040b668d0513519bc3cb3651fdaeceddcfcdab7e64aec66d49be7adc94eae66509f131d967e161d8a665d3c262b1865879169494956729cd580e726a543ad0e58b1d373379d69284b553910792d89440a9060225dacce4596bac3cab36639b07a478c1115348c869c14c9e55022bcf7223612c2bcfd2c2304a87ce162bcf4a62a211ac3ccb8a8c51cacac232b2616dc654f040133058811431599a98c9874e12d66aac7cf8346331bc69c11466d2cc19c365261f4249585f61a54bce0698c2f880185ea898c9875212d65658f9704a3eb42361661846cd983963e5c32626fac0ca8761648cd6c2a419a34a61d48c51248a48a34d1d341c5063260f4a49585761e5c1a9192b12e20e0bbcb0d140131318b334563e349ab1a2326a8e88828402178860aa6b563e44920fb348581c86512c148b1c2b0f423151909507d924b9b1f2600d74b23246c41b33ea8051a74a9e993c4893b04663e541a41913d28239456cd1040dc07862269b04561e549a3186928325cf962a63c01c3193079724aca9601a03365db1f2e0990f0fc3261e3c694cc9987887895e961a7961e53fa5192bb2a2f4654b124bac81e68c99fcb724617d86e7542102323cf0e48406accce4bf2609eb1158f9af3663498cb278c102355858d1c54cfe7392b0168195ff9e68dd4cfed3c2b01927ce16183351b5f2ab3b3336a3a23ea3556dc6363a5b8e58a0e58a193833f9959384b5991288a001ad882eea8400895947cd18c389521bc2898a1564916626bf9292b09ec2caafa6244c7e6547c2cc306ca65985598d593531d1adfc6a8b8c4d2719d42b2f56721a130cd18604429cd1812a3379d51d09eb32567e653463322c45c4b1435303c6163332567e857486955f6591b1d54c5e158761b38b8a8dca8d0a8a897e587955d38ccda525556dc968c6188e16567c61461a12ac19c14cf6182bd988096304493580b26606b30ec18c711d19345144194a6d8cbecc5a0a2baf6212c3c3c3b039a1a451c78e84f11d26dac0ca7b5033366993163583b17559794f69c68a8838e3022b456c91c3549b31cd18d7ba68b3e45403830e9899bcd724615e6dc6f84d15a82ba4aea0428b9599f724619e1b2925e51949d998d7c4443a248ce53b3bf249a963c3b98162a21c569e9392b03b12c648302a9b9ab85a13b7d9b9c34438ac3c673463b6042b1043cd192bc8126626cfd124ac9fb0f21cd28c010983052880228618366c662dc6ca734a3306003370e2905933022a8e66f2dc928475182bcf3149983c3746c2ba19934a4a514565c450a38a295d98a9c11a33d94e5816e30452a4d0b860cc0ba6ccba0913c038538416a53388e862d660acfcf68466d3c230094542f1b19246db8c588d140ea4408a285290e1c44cf69265039441c118a42eb8987367d65fa6c8d891b09595a76618d65ad02626fa6caca1644b29edc8c3654d1934a820a366c6849548f2348b84d98075970935d9c8582f2db9e9a66e9a35f96934634557f07c9962c454139e2a66f2932661bd8495564861c419222883036b2c31939f4912d65eacfc549a3119cd0e9ea9139cc942652695b0f29309092b3fc74818aca934953ad2ce1d269a5636529384b19384f1931ba8103603c7d962e56592b4226334cca07e5416db77fa3012483863e5bb36634fb2e8428d242e508caacc6483004a6a4a4a8791316f26df63ba368fccc03015bffaf2aa3a8b84b5ac7c239dd1c5ca211584200d0aa0349569c14c2a59791d666c88121825bec0019344c54c7261010c2e43c0c00c9d28303329caa82943849167032420a2ca4c7ec0ca1384e00b284d8881a2a993b002089ff0a8a44b17094455889899010100000020000316000028140806c3e170602c8b5451f70114800d888c5e7046170844698cc2300821848801060000004144046068664600361bc90fc54ccc6f73f94ded1658190351bd2d5a70dca9c95f32f0333690455aeb2b00490be5b8980e8da8013d086950b11ec2e471a7f66c39fc3c46dbcca0647e3cbf1b1f34b6f6565bd91b3c7f66ecea2d2c8b2f680b11b2eb4337b4f931e0648a0f49b27d26e41aa33848f698a3cdd8a3f57805d99d11401927edf2c8b1d36e40052338c93c0754aae63196a18730b4acd69f31e8b6c8057186fa41b6fec2bbf854408c3382ac28c0a73a9e806d0093add63d7d4e27b82615c27c5136dbfb6d5d8eb74d21b4ecf7fd2a97c95c6258c528f6981c36d8e2af66f2d0f3d67c735cbd2d7ac11bdcbe67cf8dd61dcc8de4e4dd8947d0070bca6ad858f2af22194f5da6ea15e323b94e3643fb46e867f7c75084c5c3cca17248a923221892c814bc74cd5c0ecede8ba6be981d9354e56968dc9284c882aa93c0645def86e496cb88a1002301f954b71561f5e18ed002df49e27bf41782400b86940ce60b6e32999a4eca91a938f6c187973c86160f77af973e52ab90b7d2738b73d60996f5d852dfe60ea0116c90ef9dd15c5ed42781836203f821f20bcdfae753dda56904dd721ea8dac9d15d985be90ce8c54a2bacc3784364d4e17c16e8fda9ca534163bd870e8669861d9d99a717fa022000d57b4258df0ccd5451977943ca696b19d51fe5653a8fc6be837b0cd09cebd543eafdd1f3e3d6aa18359cc4c5967443fe1913aec4b28b6b81ab6cabdf6e6d36f24b563717ac0647b3f01f3dd7f5080318043f990c643a2ddd4df258ee283ebe378581455e0366b100dfbc05e895ed2cb1212996544e900463e0541281b3d781380a000414267fb388ab5aa9201a6aaddc73e8728ca33ff365f57edbd8e71eaccdd72a26848de3cd0e0591240510088006b37ffb5531119dd15bb68e7b760efb5921a6e8e2b4e78e911c1971136015a13be2e380a4e598ba6f0b49278bb89008ca85b9249e54ea3b568a1ea1023b632a6203b040a94d8216f4339f7664b41ae2587f49b0a0f6b5ab942094a1ec49e05260a56103f474b20323f417ddac61582ee55c5d42df8b373afa591a104ed3730a7d5cb4e6fcf8143f7f5e199755b2c3a3dbf4c60eab2017713416033e3e9fe7eac72edfb6f80182c83b089a261ac3b04cb05d602a29b5cd68997a6ca14afefecefac56b876adb73032f341205eb53f62ccf2ee4d0b411e3df5f31d0d7618ce276b693ba387620992fab45dadf370b9541c642ac6e129c4115b10d40789dc232ef233b732e6b1abea3c8721cd6154fedfd8a04c02388ac3fca5a19e307b70984cf008a9ea221a51bd2d57cf44a8339381dccc1b4c7123a0bdb082497dfd74f75ab1b8ec4005def07ea5caf507c755e35e074c5189c5d1d5db3670be19e3743f2894316cb7acae04c605038f180d11f794f5aa18a27ab8bc3670c9f7b8030340584b952945acc4dd0d01f33b99cdc2a213049a07c5eab21246367b806bff7bc7cd457eef6d3105c148dcbd1252827918d207ec0aff7ec9df93420324cd83fad6c20be12bbf2b01b9bb595788ed6861dcc0c8414f0a4f64c408019cd35009ae0ac913248386603a97e3c570c667e1b347c222be962566d9881fecd576b0006098aad58393a044166e15ce0378712d600ce033228da4ac2661279d67222fa0575d71a247ce21a6361d9a5e3c8f5fefcd332e58aee1571b1a52349d2cd20946bea39ae0ea448aaf6b8a321f60af11e1069dfdd4583a8ca68a9b5f4fb6d3032ddd35b641dc9e3a9a65bc783ee481cc06b030e56cb73c176f0511306e529fed41b913db13e11959f9ba75f54e77a04aec7c63fd91ab67587777d0c6483bdc75dd0fff083bba9f51680dc69c2f87d990f229b62670481558746859b24384a3d9a99d7b7daa59deba0bf6649eb6a8296ce95bfec8d539d3634dbeb0b085552b7ec18d14868d248ca46b8afba2af3812a488c8f142349eccb5305eeffd824231230f202d35fad30d24bc64694494e2026422901f9a718d7ece3c7f6fd08157401ce077b0e2c752cb53d15249cb72e654bb1caf3fe6178c235e4450e68f6b0415b69e03a74af88d253b1dd64023f9a03e6b517ae5e90adf489aa04bb82f571097d1401c7a218f692335860981c135cccec562970358710f268c66fae342cb7baf1e8d1194b27bc7429147a366d3123bb556fc0ebfe0887d384083b000a0e2dfe38759638a8102177109117088a0fbd4c6949c13e83c7dc661bd2275490569695c2ef2179f4b8be02a221b12c69eea14f3989c72a7783a1076de9c383b82db80c565677088adbbae745bbe509e7a45104ec6c987edcb16374f1167c1ae657672c9a90c6f780fa1443b616c1b5e81e8b69ca1cb43178954b55e2176ce541db81c1348b115415d300eb8af82402c65f3ff9485cc81cb723bc4c77f7f8b95fbc51675e0b1ede5ced55ef4f0c01e73134ca230a0fae9a5e324fcff84f6b2df8e07e237ae9a9c87817b2da642a6fb4d321a73439a45342d0897821fcb71526700ada0963f0d2e1694349d70be3fb2493cffab09f14547b13b8a72f30d4972bf422884b2cf921efb9bd8151445a0326e8a6f77549cf8fb67418f83acd65ab9bf4eed3007cd32650bb7bf2430a674a7ee34cd9360d3898ed608ad5ccb55ede1a88849f4f69c55888de418ef52c2ca3a0c2532fd41a494705290368b37a5be52aebedcc312ce5baaca8da39bbb9b3e0118b5d5a8dc90321bfa164c5827497822be7116045014a53d01c03442122a0db8006454d4c730aeab1453e776bde500bcd05855045e9f84701d73c34270934a1b8fe262ba08202e638e3080ecf5f9146b20ee02642bb83176152eec5a203f4dfeccded4fe0c47e893ae811f12980b0c750ab772d3414688d8fe67df95d2591d95446e23e79d3b8a261da3a215dea57d69ca8a7b1b997741d001e97727e8c3f4a74d52501ada13684bd3509adceccda86b21f34144b2a415fd8631ef86a0c4d0d32de425637263c48ec9d06fc3441cf36fa642101777b18199e49fa732bc03996acd81402c86fd5761d5ca01530592e4eac0d5d058840a3ee83d57d3d2c1b5fb2385ee9ce7d3f2ef2fb84b41400059c623f84caa6e43b16f25001cb90534c8275ab1ab9f0fda87db940f4a429ddfe05baa88ca24061f427a2e65f652334f5f27eb9a0c2ab0372ff9764ff787be6706c143ee8e143b7e9a05c89d7abeca4531289bb8fdee99b0f3d0a2fe914e61c353228f48634a6194ee78ac2739da4765353fe4daf891070c048fdf0c989d2eee423fa4716cb1408c0ed23c287f7d79208228ec084210ee3887ea85d6e26f043801c0b4b1c413dfb79936e9f1974a85c417df72904b1cdbc3679f104b6e9917eb672478433f143cbd70f6a9cdac6a63cc7be4c19d4503cade1ded0b25fae22fa422194154fe7db51caa829368f01e51f228568bb692d341aaf0400093fbb46033cdcd5fa64fb01984ef7a0f1196b9f0e9ac356d9e2ecab191a653595625f2a412c717f873c9b7f32f4195b3b9fed5718dad1606f50b53e716df61a16fb8576e4a6b906d828c575b251d88d1110f3961b3fb7e74008556ed50233bcae854f78e96837bb9c2777fbe314718d4759463e0a1d136dccc4e054cbb8c889b1c72846e6abb60b69ab3623c60406258b6469cdde28832b060e3f541dc24171a7c2fb9a4eb2f40ef628b79ad5ca6241f16bac76f4c8c6d752b0a3144fcd1b62a0db0fd4fc99147aa72e81650174f4d2ba19542a2ef2e5713874477722ba0fc5ff81cfccf0885b3a015ec400b12b769e2f469bbf5a78314af64f4c1f0460ab7a30e60f1e82bebefad895ae45a931daeeeaf2d0c519b6816c090d1bf1f373df338fdeca5bc567e5575ac8e1e75273afd52adc609b15b0e552fdf1b01ee6ee32f1996453eda38bb0c0c50300ed6866dba9281815000154fab51f248b10bec2b643dc32fc967c6b48fe21bd11f592b3851de809e10034df75cd0538c0ff178be88fcef82908a3fb83a8ae88e82b9b455e44311d9cfc70d0d9c9da2bc65fe53f054e98b8739860b004dce1ac54a952430d3207bc26c653c055b191a633d4dfba733c4e49418d4a29348acdf4bf79bf84e929bbf03b3812533968a3a96d9aa184172e9f8adac2af0a48a59f6dd7fd00b22e24858f36a0d9ae026d9e40afbc46f701a9aead557924ac6ccb5e1b4f5617d9fc9cdc3113ca6950d9068d6763b8feea4a98d39e009cacb1a129c103f951151d05a96c6267cbd8c1b4040a265f428e070a0e059025fa4ee733436441e4c416071c474cae3a839597ac7601da3512b2693905ef8fbfc49372c10d8935702b0829d46806d75d74dc59ed6ab6118f3b1978e79dbebf3a705e7ebed564f48e77f838379e9bd3c7b6f093b2a91d08e1230c88e10fdcd4bf28284091de464d6c09b5578786c1d07ee3e9104ed48bff99fe9e8f69dacbcfdef5f94c783a748be18620c1bf2c29d1d06909c6701c83f5d0d30a0a560762b83bc3bd362d83580ddc8500a622663d11eff243131ff48545fd73cdfdc100876950259222c9bfce8fc28f70bf04e2ec11964148439a2cd064b53c12bee17dcbccc7445466ba9e7ba2e9106673c9898d2e95dee0d645d73e9418e0d7258edbafa079da67a4ef663fb4d1168a977b01b85d67ffe36e52865d430dc2786c378487ba6e846e9bfc0ac8bb6fae5b25dc8a6e2279a3669b92de64609573118b10c051033eaa187a273c6ccc8488641b3119e9434fe17ef719b6a7c2534ae1847a8ceaaaf0e665e5fb3e1902ef303cc28526ccbb86bbd85ff495d5bc149f956be105457c77c879d66760cdd3140efe14bdb00c429822568c74bee0a5985038da6d2f7462a506a090ce637fcaaa940429ed3a2e7bc67fa04e065893954cf0890eff1b9df22f93dd6d1b389cd9d0bd1c9db58323785a586999e4401de03c53b8f9fbca20381aff7b6d5435575a9d6219a8428623460334fc499fc2db46d0c4897ef9e3fe5d13dd43209e6896752f87e846a3642515818d533b848bece6786a6a342b6074e5c23912f9dd4d38912366bf0baa8b085b1cc8b7100f68550c733d2b9b412c8ff9031f29d884fa33529b18859e36e89709392543fa31e035e4dd98b90d1c128059dfa572cbcf897de0daefc91e3beb0422ea402a8ad8324ad8afd9f96fa023e1091ccf58848c3fa1fd98eb0287d40132ab6af31c444aa56a4dd404154c58045fc3ab2100fe398341ffd4447725a2db79be6b5ae8ba4ba265055aa8582a69abf241c5416faf74f537a16bf1ab45e99ec30d8a8f78a4b4b59e6a4c00ae6dc0a3b2181b3dd707b2262b81230acd56b0a6a3a11f734acc6c044e2ad710b180ca40c493beca3b78ea2b3e88503749fa468d7bb89445baa167178c52f69802bf08ad7c0bbb711cbc67242ca8bc8e5e3b22400097af79d7171446daa115138a8acb9c756c4a4a9a0c4c0afc1ef70e7782326d8ee14c1f873f6d9a0e27ef845660f2354340317999aaba7c72353baccc05821c29829af1cf36e13cab2893e7296413c667b4fdb9e247c2de009762c61ba0727692cb0f76f90cecaea812add80aea8d7506c147798938c657347be5a1c8c40a3c7be480e686bbd35110d4209b07fc40a24f5168fdf85382533f27bda9e0f70363380ad823cec60db5efd9448af601c801f9232434ddf261a3677a73ce61d40c27535aae3e4c14eae0ea93386cd20031e3836bc27bffe9acc556972afdc523afca44562d66c1cccd5fae7a71ed8faa3dd3855c527623a934230bedcd390f5f38f03f15fd18c456e5bc9840c72db92d7c331f830fd180b7d5f22849786b9694c414492a87d27365484acb8a0f511cc54a39292628472dac94ab62b9c28632f16994263129313ee2282f82832b9135deacade795b5cae318751710dea6ea23ee61fc5014bbb384cfcfe531e0e67567b152667c1465218642c9b8f08909e357d029a1d200518d5a430d5baac6a68e796e3dd26037197d57e777e499329170d8e56bb119f3dd7dfeb30e9e22b76fb2bfe30e3a3e01dd8c70b3b90cf29a5ee361ac1d438257ae2b81b2f6638d83502d6e3e49534a80d206284501996253e351257c4a568ec617a74730219a69e2f80980d33b407ddba9be169e9ec67c2ad6a7734dfb7c417cb3fa7f1674c51ae3312352a1f390f1c62199a879c8a7371873d7965360e95b76c53a23520d1aa536aa72c18a0bf85dc414c4d2bfdf44815fed07306a410711cbd735383dcc010dff3a78ebffa88f755a5c82c96aed69efec07ff3702190ef6e619f299908b0e54cf68f02e5719fc3656374427b8413fe3ad39df85f5f75e42bde3385486a60213c025c122dfbe20bc65ea228696919c59f69b6feaa95d58fbd290c8f6398670599f40689a450e157096903413a893d41b7b08594ff67725f55bafa2703c64788a72d827b95339c26cf6ce1bf471be074f013b97b49535a94cee7736317de496e7a2a1c3dbf5b70912fed8fdd14cf412f7e9090d440973c744972a4dd9516bd921a57d3896ccb396762c294e484994bf96309476866244cd15c5ee05c1c53975a556573e2fa236a9e3882b91e75e3e777a26fe1b99ed2125559a14840c61a5bde10807d4daa79adb4ff8d08c8483735e3feed1a9f3946aac120f13d63dac04b0ccabc403c03b70ea1bbb3da0188d9159c2c6a5b78647d5e28f1bd0ec47ebefcee6862ef30537ba7d9b9bfcefcb324829319455a173d6fcefcaa52e619efe379808073e8a822be124c66a946c7a33683c447db4cab8783dd31691656c94d56114601f8b5c4b50ada84971737a0419956b5c251e77e9c5cc414170a00cd2a36e64109baef8aac8d39dc9da209766a40c9f646b661c5d9047788ef7a857b40b4f6437d818b5dd7882707de9bb8ff643bd7dfb3756a998442ba1ab438cac53701903f06b8122e8fed93b5404b70b964085f4bb2a5460108481e82d303ae214ee4d01596caebae0445281d4abeff00a527c275ded3579414503c38f7a82189a0d582b2e9f42afe3b84528c62a25a7e418b63c876ef84f3fdb1186baa986b4ceacc63d8226a68de07daa2e7da59086a021387ff4c0c9bf6a4746caf7a2334490cd475df4aa2324455b698095b270ba1dab491751c29899ea85239296e60e70124e274d5c3f7a1ae4aaa158f3c00bf7f6d13a7ece60316b1fc3ccedd87897f69c71cc3599948b322e653546594a926224114ab72fe51ad827df1d22509112903f25f5aff5d21cd58342f44bd775c006f88df50ffcb90ee5f8952c18db9cd39c168f83f0dbcb5000c08d9e1f60a50cf20d22a153b749e5b174adf9bd17fb8411ce078d8c84c22e2b350bef04872a97b49aac80ab134a809495f4bfccce32ef10a83d9fb74765e41c0d6d4b15fa50f15cd23d9557c2384e0f696ec85fe96faf1cbb58fe9c72ee0219999797b7c2992abd30a793ebb20b49b250e7a54732d72d0cfb411500a35ab32260ca0501ee27a04f8b081b6a04da0d583a0f17c6d4f291658dfba3085e022e519a1b17ee31c997d3874e48cbce1566b32174dc64b587eae45031acbc12f5b5be332ae03c93f987570d10dfb30d08ce1a7f2566aac08fab95d7900ac5cd88d0f703aac7342ac5917243485b2421dcd7538d8150bb0abfbff32dd93166fff91deb4b9fa0d7a8cddfa8e4dc9d82892d4c3db4149d87bb11f48705d0628ba9e409e80a15c991acefc05ed90bd6630cc4bf6358416b9e5a872871c8f8e9a37a9dff043dd0bc055e7033ec715b9ccb16dcd9ec190f4213f58467e50865e85ca358cfbe4bcb2c28cb174b5cff0da6de42a73b6d2353a605444e732f8664a81bd5b3571ca5c891e6be6b743b4f5489675c025aa9785e8da4a2d6ebb495d1562b78d0b802239e683c5188510b3f15e98ae99ab843a7fb8d467c85a036044febeb01a40212e9877e99e56cdbfaa6fee4f5593145cdadc8fd64a17904abf963e5168b3e51999510d4a2ae1652e5ad94989b8f3e1bd31a43376c8c9e4e87462fe35d0b51fcb580d38096b349617eaaf3d2bf3b2a09ab434eafe4f56b46869faf2024a493c5d1e0a34acead44b7142eeb7f924e239cd9adc458c15cdceab6b8e595ec4a418e75ce4a532bf54fff27c42518b2cc55a8f42d262a2cf183951e58d741e79c0853ddc63c39aee43a54151a48d1c1f1c270d8fbc0a288ce01a23f3c1aa84934291dd0c53e1a0e259968bd4c9319c30ee3747dd3653d3d5ad4537c38710f152fac83257ddf5ff51b82c018381d65f7cdd1ee1932fc2280e24f72f784d52ff1e577f69f477d48fc4b17fb6d10184386b616bd4f939c05d572511beba4ff5c7ceeac8a515356d22955564a16c21cf0e2a769d775d07c4250fb883fac6a101a04b6c80799253f598ab55738b51b160a0c4653e503c561d388a9bc0081d8fca412e1d018a6cf1482744b0403749aa93e6d0411a2d971bb870400a5c6490f2615295762689da1c9b25303088e598bc50b000aed5d66e92c00c3b45e8764068986860646bad696644a2160f3b34e0b450090be4b0bc42a518cf45325e2b1314c136904e99e0a068814a77dda49224483e17d0f29084a8d103e4c2a56afc410324793e5b7061010721d8b1f489128d00814f11e4556c7d7b5238df96064220644912d5791486811a35e64e7c648baad74e0bac6d1dfefd14a01a9ee42fa328ab4a68e547126e970f7cc52d9094a9354291922b952ea2f4b3cb925eb7497041540e06662fabb645af966aa4e9abede9ad66e9b2aff4d3f474e2b8f4e856ba7bf8fa795b3a7d2af4f0f21bbedfc40b9845059cd504c88285bae2851d0280e7a94e58d94189e14f758ca6a963025604aaa8ac06db1902d1b97d5900f7bf9699f3f6e31e75defc0153af10a6ce7a104542eb706e18410f40b7832debd9d4e6e9fa7ebe8f079b91cdc5e0f97a3ebf7723a3abd1e4e779381f841f806113bc688408584d729b12f9908be4e381a8a31679bcd446a9a8018a899480797a622324ae15efc3b231f9a0fb1032a10f7fef80dfbf05533f6eda04892199977fbc9d908baaf0ec00addbce3117baf2d621f6186b2654122c199008a48fc2c9b6c8e44a461d34449cadc26c46912e1cd954c50f211471ec994f0bbc1f1cc4a56df4ca065c9f354a214e312a62f31e448741113669518d35626fba65d9e4213010688b9d6e4cd83f43bdcc425339634e2a44adce10aa29359ed4e9cf424e751977d7df2ad259b2e409967502cdd1c14321412cd769f4491a1f300218ce2f628c957393724c52e0e873a550a134cb1c67644379b62417c55b5f314be503197aeed432acc985d3e399585565c9e52151488e9759b56716cb0926b56c84c4bbc205b5922b952c52b7fa55bddf02b2e112c14090baf77ab0f8a653d79ab65c882f6fc78d7ca528a9ae59b3fcb6a6f6a98e5dcca5df0f5500c50be429c9986348e0de17b3b5cb13c3cfe0651d20db1568744853e89cdbc13033a281a59f11161db478ab516491e84a41d49641a589161e847869ed0a8b0614992d18d044b4e828f3c9909186538949415e1a92c04adb23c109649305986a16f590f91cb32a62f8361c04c8516b31e77ccd2786626a29c59089e66186b95346358c20564b9eadf720133ce03a32ffd40eaa4007fa7062b9e32d8f62420e05300d84f19a29a4db504f53a701382ba50148c8652f012858251140932a308908d0280825406245208f24941a052aa8074a901064c15e03585c06eaa05ce53118c4f018043a50029aa0e5ea932584ca5204755003055034cac32f0b4aa03fe2a0928ac2050b36a80a05500db5630d05b69a0e9aac1b2ab04e65e09087d15800bd6044758167c62b500164b00842c0044b27ae09795606556e0a56b4f05b42af3a5bd619cf60497b50b34d71e80b33de32cd60454b71430de2ac1069706345c61d7b33d0ae5aa983ff794715a08a47551b0b02b766ab147e54943185911cd7804234dda87970ee24db202545d444aa944d5049b55f0548b1ee682897b6d85b0a3c898ac54560b3b5325a675a16b01e036fafd0d0620b7bed01d8ceca433bcca514fe9cad738fb85dc01298741984be1e27478764b94fc70b1aafca8708fec1c2803174bd20913e2a6b939725e17a5b97432796a51150eb7c37f37952b6554a1ac08fc13f065bdbb5d9e5e5fa7c3dbe7eb76bc7dfe0eb7b7d7c7e9f6f27ddd2e2f9f8fdbe5e949f82cbfd800b28f2764c9585f4d7a5b85a20dc3e0ba7a0b6c03a690746f18d8e6ff216d6e3cd8ce1c036c962db41d9802a4bd63689b9f0fb4bbf3601b660cb15bb6806de00a91f60683edfe3ed0c6cdc3ed9831806df942b6815140fa3b0cb6f1fb503b370f6c63ce10b66516d80e4e0169de30dcceef03dadc3db48d1906d8975b601bb0a140253190af32949b6f035863429e912cf2f45d6997b785981346b1b0cd7ae02a643ca15edfe7974a4ecfb731a1867af9882d805449fe826839efdf8a1c9cdbc9980ccd723c431a5eb93098d852b718ea104527810797a21072a0d8061fa66c32e309bbfae1bb665acba2ddeac65eac90d275499bc0aeabc87b07b6e4155b1b52164c3ff1b349bc1ddb7fb110e376c8fa202784aa0b418d7c802e3edbda70dedb1bfb66177cfb3563ddb91fef9636dc76f7c5bcbd13cf7e6d9877edc67fb305b77dbdb16eee8ebb4f1bb61defb63f304070ddc7e7d53f87c51d8f4a1c6fe29498c48a1f94d4fd5d1d268009f93121bbc96331df65f5fec4c2e2172719a98c4719f50870d497d2d57bed439dc03bf54759529cf5a652c54ef6a14600b6590089384af8a34ca58a7bec45cde0f7e9891a24b8d59b8ad53aec47f9a077e989e20471d6972295faed45a580f7e88d9ae4f1d5931a55bad98b8ac176e88ff2a471d593e21576da87228176ec9fda28e8f74abd082def439148ebf54e25c668ea454defebec498d24a3e98d8a6438ea4ff9aabbec41f10077ea8b2244f8eb4da58a7bec45cde0f7e9891a24b8d59b8ad53aec47f9a077e989e20438ee4369ebb5f4a58ee2abf44c118628eb43114ff5f6a652c263f4464df2f8ea498d2addec45c5603bf44779d2b8ea49f10a6077157703e8960d09a0d11b4e93c399239a68eee74fd4129cc879b59f790434254ad51a278295d689016b75374f74e97f9d3894e44bc4a7347d4cec4bdd17c4a7443e238e4aedfbc5ae04be222ea5e7436256eabf271e4af21171534adf26f625f705e2292d9f11a352f67df17e25eae1a38e58b13213c8fad98c4f40f3794bd2f062d77c3484f6e15afe7328721032e9cb7df1527a6a7a985ad20de9c3371be0f9387ab05185611dc879da7b2028bd5d9e68e49af4c367556286ee33142e817608988a5a8d10a726295ab31430c7de54f6811a6b22d71d54fee78b4fa5524e0810326d93f5991af62eae8fa9ad05e0d824f15806cb652635da6e60d5174bc6000374f1795f98ea65a912bc77df5e3dea0d1adfffc808ab330d878aea1c1d98a12027d183d84a6f121d849e2432a30b022e82395d38aeb6315bb4258126213af38a855a6e8fa5104c2ab13278422ee8d1a80054f120053846e6fee50da72cbedf3644783a25f4c16ae12059bb83710d8670cf342e4ffd105c3581685852104873a32046c140ca9fb60858720e80a22eea06270805391b0a84741cc618d070ffeb21e0ab66e26051b9a16d0b82f0ce06284efaae5f3d00d0d535498b873d5a10a1d420cd488bf3b10f01a022ea07a7c807b98d0b84f51ec63901a89275758e424153263724b68b4b4d5f92aaf9f2dd0e1471b31744f884fcc6f612aec318e1ddc983b5782ff6a777e8f7e4d613349df7ba758bb013ba27fb2694312fb4c639dcb201564363c86b95bf2417629950bac2ec2f897fae30c745b905268e3ce6f93f449daed8d867f666fbed18d620939acdec110ea645cceab8748d48aa3f5bd1f2fbd4b5524884bd5dc7f19f7c902fbc338042798c1f18b476d04e963502d14392834d48e6bab936a8a21560b9c71951e3b916b7167d5b967a1fb9f815a2cbef95a5edd0f138bc32aa4fd1808cafa0299518f58413d3e2e23f29da2391e0e63021a9c3e088789536fb69b877c30bf2099bf46a5f69f77172477b6eb70bd74da74482fbc91ecc7c254a0ed764c22f8f603c2d9d63ebef619ad59e78ada5d2d14e885c5a38fa0001cc380ef4c863e8cccd490037ef79dae9076aa579bfb3bf566d8b53cbb5e376dd8df4ca920cc8981e02f6b3de07079806a8df9e4a4fe4baa16de681a470bab6fd38c14a8c2e51fd211f0b765e04a1dfdc5d32e4dd6bb768d5382582f75e9238e99082f5a41496e606a20956e3db2a60e8f6f163b592489b1c1a89fe780c669f66556d01ae76960e21358f732be9f42e0c13f54bc93524bf6abd48f5101ae29138a478d84060ab2d6d5bfd2a994688c980ad382faeb983eabaa29e5fb1fac29c6bb941524103ce6d11be19e19a47c43ceafa194a670aab581a4f42ec66e4427742ee48e022055b244c90523ae9e88d82c298b810db5dc93dabad90d7f38c2768c1a2ced262a3869f9c01c6ceb08bcfb908ec7585c218b13ae665d00017c04661be2149eaf78c536c1fb11f0f15163e52b91a84a92c8617dc5f1a51617a67e53fc75b7b1a08c89942acc7a2a4855b64b8315d3438d05f46e2f3286583af2cd46c74e907a6e8bdf19e6b652bbebb25e25b52bbc90d9cc1e5bb51cbac50f51d7d873391d40da8d51ae03ec29c73a5e6ed79453d6902507c70627d9cd21c7257d3774f515af834bc95cb397862f285cd6ae45ca75489e0cd8a9c06d19c806b720a560c9c00fa74e2216cc40fd1233f6c9c525477afb997015b3d3fa20a45efd05e4e1f572470abc87b14ff418f974bd6dfad1491fef1fcf79dd07516850fe893dfa930f89d9c0ba6a61fc88b93417f2a5eb81ab79be5fddef779428f1b80e6f1adba3dfb410137c50d54d23738ac93a760030d7914767c851e7a8197a46062860e56a169ad4bc8d3a7414cbefe653701a15024f7e10153255bb097e84fac1a2291b5c8749ed90497d6f6ba2ef1d5b00809c26626cf37fdde48b6fbd5ddabdc28231fa3aab18546b5bffe5fee68ba0574f9fe703857195ce1365a247049531c01ce88bd8773259f0bf3a8e020a1ae6d7ab995fe632edcb6d87cc3e8054375bfd28a79514bdaf9e77c2c3c65501633b82e60e15c8ca691c676248f31d2e2d0be07960255a45b4800d093b2d23c35050259996252a35ad388c8afd3caea1ef8899c262b3185b9c25d2155797f455156ae70ac3552f8b01f4af3c121a0cc672a41aed59b57d02a1745a24b60316ca9dd6f02e5cc80d98ec45cee12fa86a35cfb9468f9f3bb5c3fa245a9b84f4db6ad84402570ad2c03c31c5bd8aabeca94b200cd7c9ec61f12922e29614045b1954e39001a74b202c2124417f04a04aaed8c7c219458f946890f2214f0e55dd73a30fb26d665cd83b496ab3cab83a9e8b4fcc2488b9ccbb66e070700c377d9668ac44e4df1ed689eabb2211c9c050e139d01d7e5db66e4eeeee01a5769165bf69dce06f31b50ea42658d453f2311e751a769232e7ecd68f90e63d2e60f04d395958287586ee37cd7f7a05b0e9e2d67085064005a2a81fac20a0a92036e95bcc1875f3b00d8e11405d1b921ae804d203118c9df4fe495106981f9e49f437d646a8dda1513ca3ad71b7a727a8869ce0d373e13cafa9b180c0a94df546d14dc8a5e062794b5c8857257f6bc035cce915f45a58c2394951a00a43a397f872f59f10f17ca1eec810d185672e26d6c6f3133f4f5e93f8c7355e53631741fa473b411b1a8c448c4b9b66c8ab95945d34b8a26898dbf6d5ae2be0e09030c27f69e9f97e0425083fed83f3ea34e007232d3799364f214cf30fffc455d02fe86b6ac8c5f437e3290e712cd336d2e2415bc0ae8ff492d1dbe98d043f2af4320b98c4182182805a45a669f370c0183321e8631d2b76a5958f144e379e48a955ff8c0533d4c9d54fb8efc8720d58bcec1a8a57aec326ed03d05b2a5f657735a9dbb1422b0032801b7ca82f649dc2b99bbd809a34b94d801f7b0d6c5eab28ebe5472c3a9ff7ac6ec91b2ee6a8affa968bfd1e9348d6fd319f05264fa848942c7966e45b431d796644e1bd7f1f3b721aede7db50c0fe7897c180e161c567e0d99ce26a171f8772669897c25911cfe0d54405c17a43cec60e8fa5f668149880d2ebbd2825e3a58cc6cdda8c6d10dc84c480971cf7d2415a9a9c3fdcc5ab2455ec50335c4115226aeef01154829f7841076863aaa7345a46ba8f2cfa0bb86cdf8b7fedb5af3141797572b8c74eaba3ff5ba3763ee3ec8f623fe10b172301a77dfab931c3f30d6bf2bfd8dc3cde9acc3b64c3f7df54888e3ceab3976a16d214a716afeaad3798797360e423dadba63bafdd586e5d2fd9d1bb011921935b24a0bf2a1835848995ff527bf8e593e01a3b80b09388bf81509589558ea6cd947c5e91517649f39347db76d47da0eb3da51d56c98fd2fe36be3e97a9fd431258e39023c3443851ddde026cb76caf8a780909cff3c556d7392b04e3f5bbf709a7953406b1658d86c3e759372da61e36af940983583504b7d6c9c5aa91842752aafd8d1a0482b44612c4a94162f5918a959baa92bf015bcd1cd4d66c40da0519cf87985041963a8a56472c6d5d966b8a497934ef279f052d420878c789d5700da812aa779d8406044ff068c8762492111fd62b4bdaa4cce6070c1bf979161cd5854655442111435b9d70565da6bdffbeb4fed996da58a46690f4cb336f49f63009f688a8c2ab318a28fefaedc8ee48ad4ea90ec8a36945e3106f8387941d2a8522b69c783d62964dea30cdd183a2df8d122d1c8caabe834cc4a54ed02c549d51d65806f2b25a57701ffe3af6084b3ff998556476f75ac59103558f2831aa73c6f052cd90ebb31252bcd1b5bac82dd16fb526a315d6cf40ed7d8f5d7dcbf178b764ea8aacd4919df54bab883dad176ded024a8a1dab5a7bd2f217806e80ea412a2bc6e8ddc9cb709786cebfe7133fa7417ff40ac8f57209c8083eee720ad6dadd2fac083eeadbbc0c2dc6ffdbe72748b72fc4294f24e0653bf2432ca020450717ce65f2a5f35d95ade716b2d547daa37a5cc3a7cd96b112e3064922fd043d4886f0ebf7f47eaa9904cbbeff230e2c2049b2123a0ddf57caa3afd31c35dd104cdf78db6454d0d4fef1b3d5fd206cea6215135328ff37740c2141be070fb2c5aba35814970b4839a345cbda187555c76c0753cfbd229f4e0b6e2482e125dad262ac51090202305a562a340dd4e5ab450bd72161fc8d61a899f5758ef50f8b5d9d5666b03b86d0ce8e6a0555ab7c157611085eb44ed23c2fa90df5799b7be69d8ef3d782a37e5c68c1f7fb987fa0d529b3e7afff86f1ea908b9a2b8dcc215bca87f03e06a26b01056ed13d04a2cc31192c65ee0e3054203b7c4be84bf0e88e43d874ff46607023ef425d0c60566dd1bfdb362acc3433aa690b8b08ae092aefc1623794498ca4b9d0cfb71d0080d031760e52d5c1d63ac067eff13224ec391dc16a2aba684da81c5f39a2c8c01fd83631f16106516d62a0cd0c9c2e176dc333ac4a81a293c756db166aa5784ccf42fe8f59d999883572993a07039a5c0282626277179a3a01e01effc84204f2ef5b02b26d2fb1a5a902f9e1cc7402f4cbe758465c2c0666d1ac1f6c1cf53cd47d394656854e59ce25881a90348746a2e5cd5346f35170e6b9adf9a0b714d97af39d89e67d2ca5de1c74ad00558dd5682708181add4dc3e9f4a0c04d156fb50ad69c4e078d3d6752473a9e2723ff30cea21741f58d7d8bce03cda24cf90316254a090f5b5ae71e308c78b063a08c299c2553d548975e100884afa9b8a3c7322b8d1d4ad6ce99a8551fb5e80309542840b4f059eb9d115cb3a9efe03a891260dd5b35edb0f8123336d301010bd362f2a5ccf72fda11d6a53b861c9126b40492573e256899949cc12b1fad906cb73880f6b6a16d6641411a5388d8e84a50bf8540734151fc9f8ac909e87233b6475981489892e32052ec5ca16b4c38668ee9eac990809ba0a252854800422166e03ac324429756cc6d73b1321a5a0e3eef8540d8750b57423e9293954b8daaab775fe71b538d850b9ea6ff426de4d45813a5313c621170a1a662964f2520c764b0531d4ea20ebfdbce53c1c4d1cbb352145d70bd51e95bbd9e93620111d121d6825a43e3174a4f4119af4c2a2819c46906d7486a621fe0946559a9847b65c4e6d0a0fa72ad46dab90172bf00d3c6c440c773e04b1fe97a8856eaa5175e8f488610320fe37b7babae768ad899cb9f3d07112d45e10b48b5e2aa37a74b34ae6fad2f11dfd4bed5fe714485c27c44f3f38a5da983df7f005433d494ba8a8cd095ac796154096dfaf1d9206429e9556b11ce1c66233e1f39d85e2363ff4643b772747bc7e33ce93923f2b075d954e5b8ad0d1cc1bc78884d45e0231dcc4c3011ae2c4a45129cf450940b6cab3f9e250f8a70af0ea69e04e85ff395d8f50cc3a53ec229fd3dd2e0add0caee00aad060a2c81d16266c428068df0bdc0a2f6530a6022fb75e46a676ef435123cb6fa3a4aeff571d8d256df8556a98f935d821a16c880fd34dd620006ad985ee7dd1cf7f547c77729e01a20db8e9643f283a5d00a79542d4c465dbad0b2b266aaacd74fa25d23268da5849436a0aaf6cdf456f3f561a8b2b8edf7e9a1936aa771852d7c47768ae88b0bd1ea96c2f8583bad27ade19a7482d763d371d32d4eb6c1ac951cb324d5e76820472ec26b0b86c2fd558e6eb731a1b199cc4dbdbc8bf4093baa52ffe367988734b306f1e72632354db70ebd7a98c9471507b6344e4cae206e1c68796853e022e6432f6bfb6f916537db46968543d6d0796d9220de2f723e0a7169a7bcccf6c63a96f029ba05f3b67fa567e6a98b9199bb23c80622abd2cc0d9234bc2c49cf67e1f922eabe14a46204dd4e5f378191f6f82e0e86bb51a6b71edfe2c449210031f6e4fbbc9cf99f6a8b0a96bdeab57c65d3365d77179d6f93b9dae1b193338a17e4d0a6f86464499646fcd3035075123f867654e6cfdb43c5db9cf4b640a91c94df7e1d6dc3275eb0125b8753633879f43ff6be28ab445b840b5f647218f7bac84f8d8800a220f045a1b7382f1ce1659d8d26dde52704f10f0f3b4442b74f135e07d025e82a8d0a283dc257d9087adf773567054f932bd1b241f54b22ee3b5220e7a1ff7da833184a5150a8148c4a6578d3db732de024b03e7edf77dd038284073416d201cc58dc9476f7b1ddb771cde246012a252cf909ab331de3ed67a6de273eaf81d6b84209ab0a779b7f4a5047603bd5d4a2da10d971a7cb917ba55f3e2bbf4c65ca4ad5f0efdd724cd4a01d9f5737a512fe155366d42d555e6fe297f61ba981fa6d8799529e7446e30b19ffdfe6a3409e584381b4b4d4042286b001ac114053f307fd03666efed038af32e1697786310c2e0e5cd4136a87423c9cce3056928351636f7aa77b10a3ffce918f4c9292b8ecd68cfb2f215594768e212d4e0f52d50a229ccd01d8fc7728acdbb56a2c27d011188a58a5012d685c064a19f32c2ad762e16a33c0f55c09f2f5ab7d30db742a351c0fbd37723a9a007d1e715420f5b577d45d6e7014bd8bb9b115b14c1659ceb6c29e4419b2b127cd3ba61bf12cda19009841c21db53cfaaac52e4f3e15431c64845b98758341e60cfd80bd8d61a50bb5851639cc86cf505ec63154f42a523f74b568422b11d72fbf14708246a9621aaa5255287e9db6f47c40a710df93459d850948ce90cde2f799f6c4a27df21474cf3111904750daf99dbd320f68b83ad02e8991f46465de9774e6cef2ca557a50eba0a97891da70398e309705a0ac2c31bd53e120e7852481b8c83bd8b61e238f5a4f22ecc14288b165e220e44e0f1c06d3421cb32b6e855eea59908c203ba3063b5332b47c3fdc79575ba122d6834bf3f52f4e131d0a7ae0faa90d5fd251e087f003a503bf47a6cb2306f9ed13abe804f558ecfb5606f44bb9cd81e4ffd0e94a7cca5e82c1dbd94eaaa0997e314ea867570a4416f1ed66888df1cb597612bfd4ad0aa3304bc34cb50fbf419393112803497005224a8d3b5fd07ad515b4d09ff23c384a85a8ec8855d8921ec92282ae263b0b3b12263ad343df9f532e2bd7c1048a7915bd39d9ff88172899fe09a3dc6505645ac482e368c8d781a73c4df29e8e0af6b696e2a918d1ce0a6134043f8f5ef8b151c1d856b68f67fa8733715c6a7b1b44decbc45f5feb0922cf8dda125209faae65f887620c63b7aceda27d1c03f56d8e43cbbe3d0486ec6fde318f8a0ff8a7863a19ffb254190f8cda86724a553ef00990ee2aff00e525346f5a96241ac4c8ca4175b3260f3a01293e207f7d5fcfb76474f0aa8266238fc6f4f88c818357490fba72d20bc9baf003587bef4e97bb470d187127882cfe95005389a6cdd77181649ad869f83256604d2712507c353ed04d3c3130a46c88f00adf21cc5d4c9018d0d9a77d05242c9b9f0b0e67012a3017baa6bdff3691ef4bc367e303d9141169f271fc4098222ecdbe5b231fc60ba4c9c4a5e193c67dd7a87da089f75f121949996fa1f991bed10551706e072abb0bb7d4f02ae70156913924a71b95f6f6a188b6006421ab3781bd001219660ad1576cb6ae70ce5ee5968672bdfb5b04926d125e4655924445837d8d171813894e5bf608543e8f1d3853c40bf4dd3f6dbec614383101fed99f5a01ddfb063586fd7ed0b26f40fe54f8e023ecaab8279ac15ea8ed63046382f279d7dce47dd5b8d8e56d9c99c05f427dc326c0b9e5c14c826489e5b6218af154f833de7bed3758f57dca67d5629b05889899225d2883e4510db2db200d9c4effbdd64b7b2771159e5eb40228bb9e37bd2b6e34ee7610f08c6cead879dd0c61420937b117d3dce2c56159333d595b7c2d78f8c199535c9f2126d402251aa5115cce52b3d30e12610624b6e251e7c0e9cdd02bdf137f96c9e1dde78f94cc4f08e3ad092501006d03aa88c27dbbd235a6ac3e94f730f06f8c9d1ee3bb9e1f37ccef4391b7380ebb379d7033033d35a6661110537a0ffd434bef75f05f80ebf89f5f07515111a667df964cb5cab84a402541d3a36330818b4180831f9ce72cfe19c8ef8dedacfc96cd69344b7d5a8c84aacf9db0f224718b56543b2354b80be9f8d9dff9fcd06af2820923967fa59b4f2d7e2a2381fa80e0f46c63c2f8ed2181f64e9e99fcbd836ccca51afdce3df244da96aff7955b0643d29378982dd8a6b3b4568799f70b790e8b54976cc709fb2d21cbf4562d3723a9879efa245709249129e68a2e9778c0501a47dd10205f2b125dea9e4d54385624b481b25a61675bcb32b7bc9ef3b864ed43fb2e8d77f089de1c1978ce72f2eae37e0e4d49d0ba7790bae58d18680b4028c9d28932f73fc685eac7db735e9ac9238291482b9c089b78bae73cb37a93fb2ddbaa8072c37367259ce6f10b492fa87c6dfad183cac987ad0529df118dbcd8821f0e479612eaba49c8ffdd94666b2eb773e1432d929183667d44ba5f80aaa0dc37e0518db51a80b55ece22af2d77f868fcd0a506c20a67eefbdb36b70974b8548376b8cfa5f3c0f13496c3e7a05dd919b952a8bd3cab308e8f0cb29cc9207c37df990619b167951a62a41926e4057432dbecb766650d5fae9004a9ec88d11544bb0064ff07a5665f3faa59fbefb57e610115618960de323f5d3bbc534ccaa97850881003cdbc3d21bd308cbeb1dd1779a5581f63bbff6cd9b9c6f565027615e285797ee6dbdcaee6e733beeeb59f2c43656e8552a8074303d4165a214fa918fdc16efeeef9d950363db441764122c60343c93a31e11b634dab351e35fad2f2d01930bf1bd037d738022a93fd06f15d81b275f79ccdad1555047bfc6cfcfe862e19d181a95c0279ce83e080defe46ac71a3af4855ea4ddfcfb6344a53f3a2e4bfa29648757a1eb9e5c9c52c1f40c7fb2da5a025cecf2a06c023fccea567fe521d8d9978ffbdce122923d63504442a6535f8c86a4b19f5d8c49c27076a145cd9bb1f2f80958fc005666be5751545624d5398b0fad8d191cc89a05396fe37b142c003dc77a076eb0e9ee2002798720ce66336d138d17ce5d6678177c8ad6f52a357f50bcf22c5c071ebdf0b268c7cedd61bf57a2ec5d607dae30efcc619373909684cee288f236a68b77e23c1680ca5047f47912a4dcdd848886f1dd118ddd2c58295a05c81b2a500ce8dbcfce65a6704bfe6a1f9094ae7c074032017ad306dc550960c924d74cf50887deab5c6ea8eef44d99043b3d53142dc42d8adc722263f1d43d1d0e68a233c25b97f38b61b68b6ee715e4874d03e70226de0b6b49c3ecea5fb6210e64295721453538d187b3bbabf2d974d8f7f38abb129d0703b8ff4ed38fec434f3857ce49db3d359030d633b02f219c0cc751f7499904c74185012006adaac4131de844287bc2e7b46c80a4314c5a9f61b41806a2858ed8e665a50d296358c39f727466a82442f37fdd556ae07b615720c0e9e7f4a55241e4941ca346953fd2853b6e8014c9e9e1b78be4a568be8480118cf1fb559c6f0141a54cef4311b878b7b41733ff64be58fe136ab9821b0953a2abab81e1a51df19773bca4930e2d267b9fc9492d257028fb72536e0d61a9f2dc1f5283c27e668e07da533857c9e2130bcadf6b23dabab588abca7bbb35cfe4ee59b768da6e013a2c11c65d2de29532726082339347db743e70a0d7ab17c28d62715e07bc451106c5d6555aa4e2c359b5e057198712ba0a9ed149321f4bc4debde59414ac18240255641069b6367ab9b15349d4f09bc1f6d0a927c6a4607047d45d454c23a4599424c70d3427dea15b496889dd5599b1085ce83b1e99af2613e38a7bb46e879cd35dbde6643535bf2ea61876fb76d72d6755a82b1615370aed8ee6b99fcd36645a4dda77045556b16683be759685af4be6a62a38d156c296f3b6240ad8e34080b739a5674b6eb3ec97ae127a6dcb41f7392392726126716e9010c2115ee8bbf6d0dda79d7d2d2a4f7fc7f45c6382f476f6a45ccdc04d6a1de030a50c4bbf9b67e43d702c3b5226e421e9f35e374c5d909e158ee34870ae37d87359f4be9ff8895039e8d1a147e233edbe537f1393119584b7c5ea40e03af700df603e8e5f54cc09cbae0d97a150ec56719ea421dd292914b9cefe90fdf331ffa20a9f9a7831d1eb667cd035acd5e360f4c6faffad8da3da9b0554ac0b1a3874a69a6e35135cf284dbe95b03d716a08722a1b2643b2ee895d2e8ddea05b92a7da6020d482064206072d175f9fc2d4098e02baff4f0f29bc99ed2b6615cad1ceb265bf55778d623dcf4078fabd22062da3d1944b81f35f40f7c306264648d1bee689f51e8a4fb8f0ff6ba2d92e5d1d20e0ec91c515a13a1fd591dba6041ef77b07c9c363d4006b01f10b8a025d6bb9c5910e0dc2f111f5298705aff0aca5894310fc5c7b19722b78641a7c16cbf2e2b73e0faad6f6a7b0aac997dda79a008f011dccecdf3dd607bae52aa895c74bce32c98b5b70d0c9b241be7d3cb0a0cdbc88b19001ce5d5e17356781b4f7fa3530184f084f3163a2398ada27bd966b8c6e92e46203a06edc8a8adb28fc3f0d70c54a41e3c14cb53b3df28a4b2556fcdae169b12cdc2609516305d5a6743f19955e29684ed910f600e6562700f5db7b4594390067f075714d94665e9ee0b028152108df0bdccad92cb5b74c1cc77e58a662af6f0e56b673926fdf6defc2cc1b2c8fa0fb8e30c1b167e1cd33a512a70ac1e81334006e6481911341c33a2741e59d7ef69d467b982f3017636ed6973b3e1581218cb9013a447b02f62813496a388ffb5c8d477969c867406c1167df8100c7e393a2799c14194d68d6392673536a4c3bd81a15c757cdbb64a4605a8d8a97cd7cca863f1f508451b1a505464f8afb9b53e793a9977e01b22f5a1ebaf1b4779753e315ee145ffe1382155fe760241a9b57dea5ee50c8832b5a4a91f91624ff23b416e96526aaa5f1ae2134e17f269a8dc9ced28e920c2f0de0e048661a5b1a4606e47344b37450e02d782d4780fd188598f12892f9c166809a75f082a6bbe5dd58aa59198d00d2599d84bfc1bca31186ae50c118569049d278cc6e6369f54bcc7216411a89cc942364097f03264b79a366a5302eac2de0e3fb04bc82123709da482912d8ca3661be1e3b4222270b0c742005504d47a8ef873434e5e484b23e21630ea656aea2960d4dc2ab907cd896a60e698aca24c4fa2b8d48bdde92fd93704b043460046c25debfa12e4a7fb0112f0325799c6b37b86c5febcb72acb71b155aa7c5ab582505c446464e524e2bed3f5b209697a0e2a40a835fa017192127a93bee1a2b367721086c60b0d68a86005e037e6aa0732b204bde4ebc4877c6753f47e4a2fcc1386b1d60e8bb6d2bd29329db813ffddd9a4924d3ece011487747904848470988adde7db9a01f98cc811bd23f4d323e1fd2518020079df253d0dfbf2acf39db5ef08bc32795a80862d7ae0d9b2cc66155c76c492b5abbfbcfc517790d5c2830d88206582a5ff711817d85c7356aada9eca9ebed680afbe535ec50ee0290e7d0b3476bf8e046c187c164f3b2eefb15f38b646f9dd4c1042306a765fd0b1ae307d37d152673a88f042403aa9481d14a8f54576cb769434bb24090c913ffa39e0a6d5e0dda80518c479562ff55c313ce4275835057f05d0d21f9770c3b19c00dac08ef2122531888e9d8438e53e017ace408b070b74baca8869eb4225a97bb3ed958d2a0ae3500fdf4531a23d1997bb0fb7923b7bd139fdb3c5a00509c121e5da12c44d1829c1067a42dc3d7abea09b2142d0936457dc4637f8b5bbe31e27b5a919aebf4cdd77e843cd932e2e4d614268b4a0d37d39955dacfab19c605a2764fc758e08b73078da522578b554e7c17c8c83fc45a415987853ad991e2a139eb789fef1fe61cb7d95a99b72429aad52ba1f3abe267645276009f4b54546f04413d0dfe57c4a544bf18021417a8920c355eab53953eaf7ee65a5db3370f194520abd2fb99584156fdae8055dc892e55fd72adac4be9fd457455b66d8c8f371d9b3a46a86f42c061dc5b0541b858b8e31ecb57e761cd1ba01f9aaef345ba33cece53433bb3c8f835242ba834616d06c3b6d75969756624281eb6059fe3c60683ca211358c8d3c8f6399d720588490fc59e3c9178397c4e2cbb7facdb1666f7c6eae04cbb08edbf8b80b86263dc99fd7e0273269a40bb6c44c8fe59e95024799fba17a3720d378103a7a002d68c99eaabb23330b586f5c2a1331ecd5bf799ed55ef49e770d4070884a2f7f28bb7e4720d4ae2b49f747090d4f04a483b137ffe3b9f8339426f68ea39b03b4f71b27fd0e6184c0ba8a99e2c800cfd6a6ac818922c0f8b65aa175826fc317dad0b1e4f03602e1ea331a52e3d6fa3e69154d223b16ed8e95df075fcb6e7b11dfaa8d261a8b75cac765c81139480087d02c6e66ddf58dbc86d2b6072136d7169804500c0f64cec47e84f315e1ed4e15c44b01a7a97773fd9d916738ed06beb897de8e8658e199bf6c3dc3cd97bf767e79a7291b937f22e97cb95b314791e992c9eb325c32c8ebb0a81f5073cb783548755cadf758773fa6eed12fb869ddb4176dbd74c9a71a46c44a88a11bb7f23f279a6e2919ea6dc03325413ced8fff3aa66ef7ed61f64af0a73e2cc1252a7906a7ec29fc755df1d74e8d1ba63dff436cbf53d0f148683da034d88baf31b682c51b9ad5174c1b9603c7f756942ce763ecf557acae10200ded9059d9f2f337bed276055b28a20ae621797bbd57a992db8961e8ac8df332e434583b3fe3f9848a6093d58279348fbab0d6215485e6755cf11c6cff5fd928f30e67f9b908102f7fcf7cec99bee70233a6b3782d58d3cb4b553e73f62ce14a15c3c1e826ecaa61148d3511ba1084db588c10aa385b7b877ac572e0162226b64b11bc4ed455cb33819dde332ad2ea60d26b349fb964ca38d87ebe7d49ca94f1c1057c85cf35f9c6ef31094534a64e24f561ab9fbf706cc4164960c286bcbcac5d4e98d2d19475bd2c7774ae211a01f93de9fb664b5b301a8ebab9f62158138fdc32f3b2374f14ab136a3ba839f7f095942ff74789b7ae0dfdba0b2db177ed7d651ed3b363bc96108cb108921102e2b31a93b1d6452c253188f923431013a283577fa344dc500b3ff0f1740d1022ad282d5a11e86bed58683807c97486f258cac3f8ba08eda568aa3556335a146499bccf78f34d5721963a08f3d000e380d38247a5171cc67030b73b12fd16642fa01cf1e8097f1821ec9a6e0b88757b1df42808287419b862f25aef848c45daca1d03d0e082bca82a1967176045870f008aa64bd119bef934cc987747f608e2077dbe13b7fd8ad6924fb3a5a22b9f5a770883a4521c7184d2e0e0c25bea6ff8d0f74ffd2d6ce29272ce6339db953b3c96d02a5c1d0de81d881ea3bc703c5f12d0f72606104964397818d50376053d220e1e4009c0d3a996d43a20d85a7002c1ca91915101198bd5735e794221267611d59379d5203ba3da6f9b502deed70cc930669ba33141e8914c000e264696886134b63651c33bc30130f8eb92671229ba7cfca9255faa55164f667a1594999ef477366833429fdbb7f4070b6005ee6fc73f3538c4882694f5bac8e7e3d5a5e74f5711e348479e16fb4c00b4bc9083548fa381d4c220f38bb53d0b540fde9b746a7e5419580757c78e6ed40a83385a442ae3c425205213fcc9b62721b4b2749bec6d56993b23c597dd3db0de52b7a6dfa22a39cdfa8713211ff1b98b6d7cde8aa776ba27348a7dcd6218c28046cace6779f284b5d7f352b83537e484b00bb3bde41af46b105fff152a1400f0ccac7ab5a340428b89d4db15f0790de0a5866933abe5564ec7de4a0244991fdb05a2b8006ac4cea019f36e42e8f160c2c084aa8b71ca41f5de42aacbdf921c5be7be8fc4919c4bb7c56a8f8519e3fb08dda2f123c8b9dcc80949b9c7788b503ffb80ce41df866f8516bf8b2ea2722c1632ce0854c4d7af186e40e8e55962dac76a5977aa920de7327aa8fbdc29b31aa2118622e17d5112f1d0937432a9b9aa639afd5441957f76402df3fd0c47b3dd0163e7021ae659c12ca6b21bc018e7b026d1bb406fa75037741976b19ba2bfdd83262a7083341f1469b5e6390604efd157c9b64006cbee9a9f6d11d8f19e896375a8e75f40d6f3e447806119b95d4886d83228caa97359b04de5ad15793802d29eaf5379ca51aa51f5394f8226a34fcb729a61b7fda493146e6786f916e51e08f503ee0e25f76c0676380f0d3cebf4708fc7644c1928fe1b2aca6bfb0bf405b65de3b28f381e4d81d825dc0c661c01c58ebe274f2b36a3212e2ab4d4f7fb70f5877484fd83a1a563cc749916dcbce5890ef6314aca041c88ba1430d9c79bd7ac4362da9e0baa9499684d6b6f370622bdbb65ce879db96898e56de8afe112c75fda7ce797ef0e83cd113d8b663b00763028ccb2a66995e9e205919e46e9923ef2da929938102dcb538aacc1080ed2eb33e62abf2c4eb5e2a0b1cc67b47458a4ee9d20b5578076af8718f96fbcd42c4453c79a6e6818241fadb1bae032bdb9da1b32bfc3aa856edc5d6e13a8e4dec08d1d98fb03df2f711d269f3286ed394ff8ce902edb91435e0d093f01007e00fcf07bfb1868d5cc41b768f06fca5d56ad3c349d082d34923763de7478401152887482b80662ebfa9f6261d64fb4ee8d46a47cea5e5c5ece50320e8ec97793a53e0419756b500d85958cb9b6c93afbd8813a1eebda4fcbc5121a7e5928d0ddb707b4df22fa98f29ccef861398ab41b8e5082a5fd85f0c634cdc28598f4545df39294b3f3764babc6f0232db5c9f0aaf3646be36da3bc453d71ac40a11b87029b380af08dd38b5e8772d4c8a1611f81f5736a8a68aa9cab234b0f428cd8bdb6a5475582d2be6457dd70769092c3c4d7b1a6faa023ef7f8e4d06b8621c4750656abf5552a87c1bf8a1a4aa501b466254e7326e8c6555aaf39693495ff8f391f63ea14d9bfd36d047d72c027f2c611b10f7e3548ef8cc2603a5f21c5feee0ade5048b17235875bc53a50816754bd0340f0064d7ea128ae197e0ee1f2e826f9ec1109810adfb2cc9b60490b0876a67b4e3815d43fbb9d2dc753df9f228e1a0645e900acb66f45de210172890a936975820d8039f5e93f4bc8c3897b2b66e0e683e49e282f37c0b17b5f406b2a368730e26008f6355e9596c764f64e3596dc9b8a30f135db96e24a8e5919cc85803e380f35951404f987876a309829d00d0a56612e27d908b4a6d233ab7d0e84184ffcc4051a52ce45fe7730e480aa17fdbe146cb7c391b8272f41f7a031f96e6502c1ba42655d08f46d3883c6d2a6768a9927079fb8a2cde2346eae4d257a8a1088fbcf7596c9e4cdbb1ac3266885e0c17d4da268e3b22ea3905888ab84fc1d80b244539f1a8f0d3c68dc5481d611ff4f28cd64b961db2e7688f5b73e17a9ea187d019a9d1cafbc84286f65d0f3ac5c6ced68449e6d4e16fec6451c5e706ed6005ce47eaaf23da6bee3f0e85b9f1feb2c560c9a1cb150df69cb8f3d08c6cfe8d060899f1235b2ee95d31ddf2c1409fa2ec2fa67ee65d2df26580a344c133a2bb111252e825401c86a19722001fc800e41d37780828acc73a1375aac2bfc56d02a1b57c02cc01fef234472f397f81704e3e082abcbfa6c6fb106f9a3ff093dd603f086c2b80e987a6b45ed690e2f8640ac2eed2d0a46106b05c16058999bc0153bd64d84c2592e6ec714895a973f6346029414033a5ec2765c40d855a503f9594dbcb836f0f782ddac1138a3a18c1ec762a9708a0254efe4431b48cdca032c42687673731dd80db7da7b8fb08de5cfd0bedbce85a3e316ac65151741f14ca5d3750b7b3d3b3ec941364424d97bcbbda59432c9246545076d076d07eed4e7ec76da0dbbf1a8bbac3bce786473f49ccdd9ee6963a3208a7eec6677a516e76e77977d5dc6c002430861cced22cf095ff017f193ffcd77779f5f37a54bf78fbabbfbe7d58010e2762f62423084104e3b63467d4a39a54b4f3664b9d309e784744e3827d4c25d3a75af743a719f7376d09db8573a7dbcd2e9844ea7d387ce4aa713af743a711f1f77e25ee9f4f14aa7932c7a832b0869a0d6ddd229c417773790efc72bbdbec71871224e0c41ee586154cd3969751c9a0d14c9001ccaa6676f2f19715eb031e0f0102100fe9b17221ecd0d0d45744ca744707062763b9ac873333bef686e349922ff30d20517a95123f2d88fd25247459c488371b8a3121c196188474017fa69129126ea401afd5107421af26550f512102c4ee53b8a5fea134a7ea90183846c73fc1c32ece8d3fcf8341891e3df5079e0845c97c8f5a926536d027890e484cad3499e109e0e800025ac0442c210678169955160310692040653b022891d04f9011640db155260a1891318d1f30397ec4a2015b900d97b8234911d89a4a1a1a1b9514205d995c8fe36c32513cb6b33b22fd1823c82ec5f23069806e49041872afbefe8136422fbd340810a04657f0cf409cbfe19c8aec411b26bd9957092fd7df46906cd136afa24c3c648f68f4222cf91ec4e24e230f143f68f44f80e1345c8fef1489f2015d93faafa047774b0939d07d93fee4087ec1f95f409ae6ca61005b05304d31113c10bb6ea41043ab0524230000b9c22411820a4a3faa1a504100cb022478a20543b3b47e081015704e51d26371b102f1fe4e9ebba749040a2029c65b88384121b20d113041254602d24b4600112449949aa5f9c60c2091dc46f5142933dc31d2776f2f72fbe046c5c82f2a58635e5902e3920840fd31290300859f6cc4ae594db133866393a13824eb7a6bf9fb9bbbb7be6d7357777f71b0f8766edf96b1977b1cb56df7a7066c30524b613f9d18fbde4b0ee87fcd9129b73ce88531fa6e79c73625b0ff0c72201185353639f3ed474603fb18bdb80add4660e755bcf3a60737c538ed1658c5d8bc43410bfe5bb440bd0e05afca4e4f7f603fc79053cf61ca2ba0fe1e3f8d88a04ea5f3f837dacfbd16fffea7e20d9d16fff87fca22ac678d9ca792cca89aa0802d82613441ffc253bc6bd48177716980cd0205dfc2d97e3be7056baf8cf280305fe609107faf4997c441ad75153737dfd1aeced5f1d97f380dbeab5e731322aaf2c306129c8c1dddd8bb8aeebbaec13bc480e16974cdf1294bf7fb13f5c38e79c2f35e6ece67c88b144f5d349e98c10876e497361cb676346e196f6b08fd87d98a694524a695349ffd2c7e85fb652dbdc1605a52b37f4e953f1c00628c556a2fae9afa8401b6e71da9da07f3da3407b9409b18364da20c8346e1163ec9baf712e6907264aa3ada41de0ebfd8340e567d3690f94f4255703c7445f85297d687b7a249c144e1a7bb04ec7c6c2110a888230d2a845a6d18a18844ce943dfd11eb51cfd4a03dd7c80bf48e9d30f864f9f3ee893e9d33e457ffa1006b4319ffe4513a5e5b9b00523811b5b9100fdfe1964fffd19e467df7fefed951b2b3c3ac3bc121f7b18d3dc4afceb614cc6adc4dcb658953a6cb5b556d833b8d77ef633d0a79f753f90ecb8dd4afcfb6325762b3ab2bf9f753f7c2099e107fdec7f20d9413feb56e2cf0712f3c37ef6f777647f3ffebd3f3b1f188c8131f661cc8d9a4cf7e0e18098fd7bc86caf63255a6e256a72e376b4077f5624903dfd19b2f9f77facc4b74f3ffb19eed7eec7ececd39fa1fefcd7fcde8cab924a18733918036364062ab035815b16484bd7812db245b6c816d9225b648b6c912db245b6c816c5872d97077f5eb63c38727609964f866cab9d254f72e3219fd3f81119e19779b2c52245fe5a240bee4aff4a7d9831acdb767dfdf5304dff93f6d3916bc7a388c308638411422881f4f41ebc61f6ce1173d63972b13bab049652ca187470e3c3dcdd57a7bd588772fc89f507d2e001c7d8c187dd156285f5d825f89345f5672872b27583ebcf1503351cfe4bf027575a784c937680e7d38f346a3aeadf8d8579b42948761064b7feeefe96736769cf9f72d3fd371ffcc1a1fc9fdd409f3e161bfa144f51478d7c6c2d4ec44418ee0c81a6a80918ee0065403af80918ee00d5e4fe4c052b77770e86c01a1d13ce7c209356da7d25aae1c84c32b6c0f4617bd6b637bbac3d20b63d6d663ebda1f3ecffe25722b224a5ab22507b92e5d3de11b80912d4a43e4984489fbec892421a15573d59fe27877c9047b64b93e9dff35e5ebec8e2a173ce3929a6efd4622ba555d92b7e7e32dc21c24ffe4c3f3ad92451912732d9a28585504927083d19ee04611559d147f6b4d792c90a509f3ef983aaa9ad9fa1050449548c41d5d81510689e340a45c5a44f70470835b93fb2e894722581fa14a9c8fd72d52b198984cce953aa4fb2a64f387da272c84d118eab3ef1f409eefc0c2d20c72947b0454a295dca77e9b78656ffe272b81ea3f47a88713e80c45c22904077bde468f7d979cd4ec6559fe44fae79fa34bf27fae4f8d36a4f36517b32fde407fc99be6ec59eb8aa0f8556b266b649067d8a45c83093b8191b9e9e51cf903ec52c32cc989bb11972836f88e85314ca308fb8191b22724839407d8a586498376ec60628082588489fe21519668d9bb12182938293a44fd18a0c73c6cdd824d129e928e9530cca305f6ec646c9cac54aa84fb18a0c33c6cdd8080dbd188234609eb161d2a748840cf3c5cdd8b0320c8d47cc33362c4803e69821133228cadf2c923348ce21e937eeb3ce5a5dd2b4d7fdc4ae74daeb4f02a6dd1775644e0df0d743f2a6077fb148a232a12189ca7e660b35ea4ad22e3f1275c59a2fd6c8d6b401b44a90a0f21a470f17f68936ceb57dc2d6a2dcd66f0959da718840ba65eada3ec5f852e3bd5abb6fbeff857176b3b3300688e3d0dd42dd1d21b616356dfdeeee865842d143c9880b03a4d1859e1d3dba30e505694c1c305b48c37d4eef2774df0db685fdb31c2710ee67e9ee0d616b71d3ca72c02844b853600d0a95265e9670af2dda5dba4b6babbb7497ed03d3bf6081ac954e57c97027892664cd1652ac5aa0ca8114383b4811847429bde7a4b0096dcf8d81f6a494d1bd2d36c1873bdedd33a248414a395dbabfb40767b47c52ba944e6d85912e50ca39a3e5a56bf7abca775a650b8b108e6f290cfee1185d802fa5745a91707777ace4561e1c1fd3efebfe152cb998bf95977ce5cf5ed8a71b66eeb730b6ec763967d4cc7a73f59a19f77573df7440739fcc2d65e7ee43e755e9bca4112655a062747a74f7b087eee3fa347907572d355e7899e18de8acf5c2bc5620d7f7899dc554c2d65daeebaad8e5dd75612423346e420fc3deeb3b867d20d7f70eda3aa90b2d299deed5d238804e298227b4c6455a2d33eb2f2f642c926240e8625d489c478343efbad7ed3e0f4078f96031993ab8c230ce192f2fd478e8e2d190b1cf3407d44cf1d6d9eec2302eda2bdbcc5ef6c22e369a257c1b3ff43cd79bd18bc445e8321a594da6e6ed2fe662be5b06bd656f783402d239e906d9757da4117ad7fc805f344e20ba0bf247679f693253dbe2d792fb61a6c9441bda451b21edc5547628bd35ea910e6dc22f5194e0c67fa9e1b3448b5f0189ca400a92d06471850f8d504c1c821424d87c986418608042d9e79c514021cf2676a218c2b4440e0d144d703b501c21cb67e9d3ff00069049963f8042962c27bc541c2cc1081398700fa4b08326a46864d3430644ce260410d7879406031eb0944da6a3c3f5c3d05dc2fa3084f9c0099b9aeab9a2008207561182e08166c70752f86107d50e3ef4a052810f3fdcc8a007213dac1c603c14b5e98994b52513cb8b1bd36572c410121cd1029d236ad08323928826531234785989a5686a2f9ae28c3109bb24071fae14fe4a570f76c9c5c3c5c375dfe1d6b2b21ddc28dfaa03fe60900ced750fb434f8832c1df273f429feecb21a3bdb9e8c4cda9391157ba280e3b74aa8c2c9c5cc390062713d734d66fb0b3515d8441556d8c4f8c0a10e2949713860d6be6a330a21f2448bf438502a5431483810b3cab7d6d7cc224ee9573604ff1783646b3cb0c701f3b57130df1b3b766e4d4546e53be6db19ed7c888a237bc8f5a1e3401a54601833d424460de561fa5a087158913f62c5d4a118d2fb58911f853842958a8142b0620a3d313820b1bf229f1269c5d02439311fce17cb02e63a8330d5ea39c0dfb449f9faf3a64f285fe7d377f1b3e4822bb968751231393fd23c4aeadb205cbf53b753d8d52929b38fb60afc491a2dcb324de67ea6c9647f214ce318ccadeca08f1fd3ce476472c54e0e7e1cea12866290d807121333b78028c731fd474110a3ce5686f1df24ca75163d01513aa4c8750e21d72c72fd89e4bfc944ae1307b94e1be4fa7307386dfa7473fd2904da6817cc14cc207235d518b5d65a697d98aed3a64a2d20ea25aa749fc94180b7c8f521d45e9890aba4b14fe0d8d3e483ac1de8902ef53bd97d266d06fa920673b011f0d51411f0075bddb16fee4e665128d7c749602c7f9fe1bd1ca77de894cb20d7a79da2e29334ac692369644da3f05b8b65181733fd5490fa5e57906b77d306d2a86f99e0942c6a289fc2f940b223e5694a57739055a8420c92c63ad5a751ae9f4ac763a63b7f1c307bedd5f78fc1cd68affefcc1712806b557fff360744038b02efed4875c11dc434850e0bee9547bae835f7cfd8b5d7f43a3f0d7df409fb2afaf43a25e74d346bad477d14169b18b428ad065fe9522dde43a5bbc19b1e78cb153b97a8e8dc2e180f92a42ea6c3e067717e79af62251d3a69ab0ff6c9e3ac09daadf43fa34fafa4d24c2d05fb5975aa7daab3fe27a487b55eb3e9bb32692eb5b205c7fdac8db7d164359df716afdd6220085b2fd6879642bbfa6cb932b93c0f13f8701fba32e94aca1c6eea3f9ebfbc7bf5ccd50bb2010f3d5458ee6a7587e91d9f665880b5b3ed3c7dc36bac12c2f51f07548d415c30b996a38b05cbb8734e85b26d83b1f4876d8bfde07921dfef67d5c9d8f8a8325184113633b1f56bad0f7b8440e4d0c8c41d281993f165adafbf6e86f51c0fd2c7d6a18247352f609ec3f9fa55d647ca1013b684caca27f9309dfd6419202cb2e4707d3de16050cff83aba6c209218c085b20ac075729b2144659a2e788d50c321d3056a4c80aa6d00321787a90cab907362dde8c276e80b8d7bdfdea68bbdbdb9fcb90060eb95b59eb25b6704bcae8044465a52872472625a0f68ae476f7e720aa71a27ce73eefcbe2d792bd947524aab7fbbe56dbf540d7bc05101589e29322727fb437c05f479ce8b0b7ca0dd9e065f931a8bd51965d048a114ab97d386455142e18b3d1e32771f8af8ffcc1a4bf31289348230eff68347a12f745a23c7a38eae28b92d193b627ed585193498f474fda9ef4b7667595f5e417ffb56059d470cc8f99f497c47d1130e93f5366694ffe0af0e75d425e9a48f2ca24920e7e4f3d00772ea4f31b9526b8861b626e826bc07f43cca4574102fe3cccb512ae75da9348c0dd726edded91bacf86489449ff7d2275df9eca73a80a531d686334e262a647d0d15f6c7447a36dfbd1b65d2ac0a4ff5cc77388720ada8030636f53570ab0e3b427df7594f489f4f27d056d6c2fffee901e937efb7b1f73f4459b21fdd66d2e9ef4518b00e95d5cccbd702fb4275d745e7bf431d7819871b7a33de944da93f123a4e63a9086fc8b08fe5aa51344946126fdc5b218351992cc9c23bdc67d9db57722fddbc3f48b776e7ba8911ea69d880be913cca5ab922ef2efe8e5371018bb0e0b2c984c18a7a08bfceae2257e59eab88bfda3e6a2b3c1cb38df51e67d223d894422919e8328d7812ef2494f8a21fd9531b694731b3de662cee48fb84ed29efc9195d7933c0948facf974879fba4cea6242aa5939d0c01c65d0da4c73f92a4c724eec6087776c4c12cbbcd1c66533d3c57d7e9313b9fb1e36a3590917421d476659f10616c1995706b90409c6574efe4c7517c37411ad663126e86329d634b8b0669e0689b1d47a75d191bca0d768c4410aac2c72f0c05f883ab8769408efbee6fb31af2457ad9fd62dcc6797b539b9172f6669cb767b1eba2dde740727b758576387fa51ce5123778dcb87123422b514876743e907c45fa67884ab0010f68fafb070e1d0e7389218cc4c88ea63b1c64bc809412626b51d4be95d259bc7329256c913ff16fb09a49e9000b2515c3300cc32e2edd8744fda45b2c685969036d408b311c9f6b7dece7df4c9399138031d7df58e4faca15b937cbe2e9c6783527c309866199c52c8661d85f8b59ac5e4ca85dfa47ba5c2cbb1986610fd3d9c55c50a4e6c3b5c3a5835d7209b155ece0c216e0071d629411c935611d2fb91fbee4f89dc527eef51b2d16b831eb19324a01e3d070fcccd81b8e1832bc71218dbddd780143f72dca282e11d825b60abbc42eb1555c422e2157cd25e412c155133b06517385a0b5e8337a6619e30f2a593cc950890c77b2d0c9376a38688edf9c0c2778ae20f798993e8134ba9b3eb123c0df4633379a3ec51b33c78f3fee2fffcb70369a1804d322498b6891cb0e4a26d82ae02fcbfae42581832496dc0bdbc32e8b5db6b978efbdf1c61b6fccb218b3786f37c39322fbce3e07b8fee7c1ee8e306b82e5d7bf90c09ff7f13d89b2d6629be95fdbb623c4482ded5d2fd046f6f46fc623b60c90e9bbf680feecafcff4675dcdeebddcccb5f2881d883976182703675d6509b56ba173090ded41a07cfd25674366cafa61a4e4a08c96e57b88ab04a3f855c8a08626a60019fe17e0e98550c2bcd9e992092c8864ba592c9bd483bf2dc36f850cb717212004b164b803049e3c454d863b44e849c97007082d558e9255fe0c5749d4206baadc4264275dcaebd2a59cfe73d659679da52844c621f3c8cd24929b883c6fdaeb160b2c14adb0428f0c193f2c2caa95151d1595a11831724ca6201830582f5e0459b970a12a957e52525a28283d24d20dc639a351d0b6e1689a4e96adee1d823660c61ee6191b16b401f3f5306f43e0cfeaf8734decca32b12c2a447fda6b0a944ba6773b27a63fee348832c18ab027d810d60423c286b02649e0ef0ec18fb6be1b1424747f80220c58939b036d9874746c4ecb23b9adc5d8f4de4ba44974daeb6f31657f539eb3c392f08898122810b5a0d01a72c29c42d29f643417507705b5e7c43dd77ab1dabb7ceecd6e184d91e5cb01333301cb975f69b2ff6de5a629b24f6e72669309a1df0297430b4f80395b784880169ed2f92db4d0420b2fb9d9827b0b2db86743329bf632211609fcd1564ea6ad3e7d9745d4a78f1ec9fdf2863229fab01e9f211963d2278cd5a7ef0ef9441884f4a907da803f9e5b67c50acaad211974f9604732a6b24fae9e9bef0eedfce4641a19ee4c5194e76cb5f864eebf3bd4f2274abdb7df03f8cf2480ff70005a7f2f9b246097d7d13dddf1d32fc000f86b5bd2e56bb4e7ff5f3519972e068fc3a596440da0fb4c02e85a5d005ab9bf8593e104d3b7dfd29203b66476e586771d03a50b8c0400f7c155c77d574deee7b81e9e9ffb6c13cb240bc96e3313a4499f22518699056e264893d61443f9bb433b5304a1e27d32849bfcd92128695464925b447d8a4ec830afc0cd04212aea229e3ec526649865703341787a648f4f9f221332cc2cdc4c109f1fff39d2a7d8ca30af7033418ea8a62a499fe21232cc2adc4c90243a5447a84f510919e618dc4c10a1a13a44449f621232cc266e260811393607a84fb14986190637130428e80a62d2a788840cf30b6e26081316c60aa2a44ff108196617dc4c1025415637c8ea489fa21619e6123763734495a97cfa148732cc29dc8c8dcf8ff6d3a44fd1081966146ec6a6496b6bf104488a28a288228e1c3972e4c89123478e1c3972a488228a28e2060b9b8cf3cdbabb1e6eaf2218b6a7434aef0efa5cff2b80ec28f786a125bae0ffcd6ed8d227fab33fe6e624f4688b53da929bbb628065ce470ee678448b392fc0d1a62927c3099e4fbf7bf69cb355d3c89d7fa1500d1310f6c161624b98e56bb93a38d265e2d34d4997ce9ec9b4719167f526e993567b6137d3b61126a1acf22db97801c31443658545c60a2c3cd765d97fbe2dd90694e7b7f8b437bfd3645a2da256006e0032cac97c53d6ae6ea502feb2562b236a54fdf9770019e53c93b82f6b65445cd692383795b55aadb8a202feb016d6c2885ad086cc1325aee26adbb62dc66fdbb66ddc6fdbb66d307edbb66d63f96ddbb62dfb6ddbb64de5b76ddbb66ddbb6cdf4dbb66d9bffb66ddbf6e2b76ddbb66ddbb68f495cfcb66ddbb66ddb564af98dfeb66ddbb66d1afe6d236d5fd264b66d658518cf828c182e8c70cfc20a3256626c294660acc480b1a11861598901632319c962c0d8326c4425068c2d1b1981b16577336282b1655733e25b763d33f262cbae5f2331bb1e31232eb2ebf132925d2fa55cd9bd7465873ae5b65ec315a8bd799b34a2d848c3b8a64fda4f9b9c5d94213779aea00d8903a75192c5ca61a95ebc7cf9a451d24ef9b2a84f2bbc7cf9d3287719e472c8a54f9f4a2f5f266994bb54e292c725932c5faafa14e3e5cb54a3dcde609c7c4279f9dd84a8f5a4256b86fa04a3a751339562a57e523c7dba2fbf8968d4b447721225597ee3f4c945a3a6b5c1f2e3933e01356a5aa1dc6ad2224a79f951a751d4ae704fa6964826e24896f425f6261b1c6972a3284bbacc37097d32348ab66ce8530f3cea713dae917a31b1e0d297a16aea5ba44abacc1ed9cb178026235759b6242ac32b9f9228acd54ab552ad549e188ba562a95813c31c73ccbd255198b5de4a49d4d56aa55aa9d675cd6b5e73b224eabae635af395b12755df39ad7b4ad56aa956aa5541265592c154bc552b124caaa542c154bc5cad3a6a4cb7c6b53f36b4aa26a4bbaccb716e3562acf7fc1451e954455968c9fb3aa5855a562f9cf84ed7c395a216bc96059e93e93a9fb30ee02b0955aa617ad52ab458bc132bd60955800c85030d58b12a642c154f3bb0b034bbd286129142c85a5f27c0ebbad124aebb6642bcfffcb05ab84c2ba2c399f051b55a64b65e7af5053ae14cabd52f24acd974169abd59af98b3cac186462759695e7afe460cf9f5c59d5b52a6955d4aaf06885e8499e44eda56e4ada14b5a9cb55e836843bd79644612ddb226d314aedcd0da85de66f4279c274654914d6b2b8b2f206c403079adc1dd69a4158cb84b530d6caf34d5a5cb537ff2a82fd31cca74fd8fcac2521bc1ea6b3ce240e66b9ead3b7b164cfec2c79286762613f7f03ead3fdf96d2e378523e79b4c18e3e469b1e9626ec455e8f56f5c8f986fb0b95db8336585e3733652d90267dff7592a4cc01ff6d75f4fbb1eee4300ba5591e77f2f99ba64fa1c446d2c4a23849700b26b24c0dce86b9c8d903c9f729187a54d37ae567165a170537366ad3ce9160544d99f1b15797ee46994ed6a079b499eacf6e6f7f06c4380e54fac8a61838a524a29a594524a29a536a0f429a594524a29a594524a99e0a6f65c47ee8f52daf092e1c796a13d6b313699decbd146ef0ee506587ecb90d90ff2d488e1e5056fc67f2ca51ceda11881539e04fab789258a4f32ac1192e1a908b6d92b8a62d6df296823663e58130c9169d72366235fcb8c79b5c4c89594eb95ebc76ee5fa16e8c119f0e45fff059eecd7a87d7bb1b5eb997495d8a7daa34f9dda10e0da15917f41148cfde1700cbfa1ff9172e7744ad617da853e8c44754abad03799308c91656ce993fd0a6d263519ebb27b21d5b7fed65311861fa08dfaf41b0878ca9e7e0b0151dad3118caf5315bad8cf38093d6bff72f631ce7eed5c6bb00e497d153aa5e5643891f269ad37feea5cb666b6e4c22b8630ccf6b6b438296bcffe37a04910431b0db35be7b2bb645780cdc7cc68796f17efee9632116ab3237d78be3f76ec514af944500dd10aa0a6699aa6699aa6699ae622e51f638c354dd3344dd3344dd3344dd3344dd3344dd3344dd334adf49af6a55249d3fedeac3519cdb314eeebbcbde310d12cd43e8573d17d316f9f524a29a57cd44a2958d3344dd3344d4b49d1344dd3344dd31e6a9aa6695f35194dd35048afa19034ad6a339af6303d1f73fe236edaf6b41f7150bbe11d6c0f4672306b9ccce436f9020558e8c09714420a299554aa2801f747f9f4bb5bfee4788c24572330dfe77b9e1dc88e8023507b30c2ee39b7165c6849105fc6b7a227b764b863051179488619ea7c963f3599197daa5fbb18f451089e4f236bc66a6d700d37c49c99a876a3338434a64a16f8b3de3c6013cb67d97db86b987f43cc157bfbf2bd17a08dab06ec2b02b21cc54cb508d4a79d515a1fa6aff91d8879f6bc50ce95fece315725388ff5c93106e812219c027f70f53954601ad0279f9a0cb576769c8c8c2db0ff0b95e1c47d46b91afac9f4e5b72af7dfe883d8d334402d5e149d39a8842c99aa82d4291a0106800002d315000030100c064422814096c7a922fa0114800c799a42725c1d49a3590ec528ca1963102186004080000000111a9a51003875e8b5b2974b7b89aad7caa94fe08db58213cb46cfc7ded1e1636de8b9d857f45c6c1d3798da8bd15eae562f8561dc1ac203a5ac6cd52632a0caa91f725cbe89c4ec7744e94b9181b89dcf3121fcacdc56d09830fc4f190fcbaddc8ed2f9e9b4cd009e49ea545ab955ff0fb91889b37c9241d725cac10d0c4be9354438779d041e52002c824a42718eb331150059d20175e5a70f22d18118d36670a4f035ab2056f5b1cf604e6d3aa16875fd2c2840868bf74419770abd730b7e70fcea5f6e217a44a4170d1b751ce76c3006be87d6d47eddf4528c88579a0ed4eed84265b24f89117a0c1a89d3c76360e6678813ae4e7caf3d3916889011f5a60a05df64607d21c83b29c31a5869529c9838e0685b0831df40c630a083d64e788afbde61f0713c18939e07f75c48c661fd3e749700579375511680b3b928c0c0bb7c15935a6b76a603c569739eb8072675ca71037782a6a873808c7a91afd7210ab6f7c25d7557d2d28600fa6fa2007703eee346ec0abffcc68191012032e897ef06898a680c74f545dca4cd1595baddfd2042627f3912e5f5fe4f1067f064b1077acb2da7dd3165e100fb2e3d9ea88faa11a038f4f017dda67eee82f807d3487367a6c00723f8386e2a8bae4544deb21fcce77169068f9771f97712e12d166dc38cc76a97488fa15026d2404f8f620dd2e467ee147c58444e66279648de65e55d2cbec7daf758793feb77b35cefd52cac9598215747a64c58790feb77b2fc3eebde63f51dcec2f4dd6b3856480d4170e1ef39d0c9433c1c0b19ae3122560ce047a19bdf69dcb1f252045c2699f83d8f151a38447173cd2575295b63283a4c63d7ac857a1ca08aae320191584f190f8a962935cadc2ce6638f80c2abf8f9e6d87197b125549d05f288fdb8c285ac325592b3cecf12f81182871ce3d0d0eab2386ae48a5c21b37c2c5ffb1ee6b489802ecd60984d5f4092d91079aa256fccbe57215c43d6f75a142430cf47892036302c84a8b2ec14a48a383b180c62a9986c0b528d1813004e441420f785a7468894991715c7efe9d36b5161dc14821a2164307c882822b5e13c8bc8293ab98c5ba75bb88660f50a8588463e654e9111af822ce1bfd8a28a04709c53a4c092f339a576032462b917b6349668ffb8fdbf872ce18c2ec77db9b9dc6328e17a2be74eb63961507c9933e8d75949ddabf2245c6d98e9bec92168ead225edcd3888f16ab99075f6715fbf937053e492bcb56152fb9653d0a9a34abcaf734ad87ab0d0bfcc3168ebd624e5e141f2abdcd12bbd21a8e554ab788fcc0f05ba6c3df8bcafbee03e893c90db80362520e8310190e0b015de98a2a1f17e6f54becefa4e4ce96e79b24b4bbb4cc4952b773ed36a90a458610d60969752135a86fea6947aff89af25892a273e0def14ee419cb9a9ab236d50d93b42523040b69a41f4460c8e88d80d648207934f9e23e2fe0a7fa6b2f02e42ca19a076adaa0d79261dbc86068bb036797921c58bb89599aa1d4039d930a421f6d9a4bc2021330c61c0fb0c2aed42e4bb680d5dcc0aea3e211d929941b099517f32a07271697d76fb07b72c838acb29810f22cd2ab3045c7d496640d1a3b0586741b75905d5a3b7496f1751ef22404d952e02f72cc14fc1e2d8d16807e78221d56d1f91254820e2a90c1213030529c298b76cace6150820c54081c0d0015a8774374151af1b8446f016627082b249b220dce6319f4c896a93fc0acdea7c438cd1cd47ba4a8486847517948422a8870971f2031402812d2042b019cda08d58f137c44ec21de9d8b48fd6d60409efd82c9a2a043202a369264f567ae2d44d0874798e7ae903408f30c5b3492da78ce00b0eae68b0bcc67da377889dd128c625547f60ecab455a24c30044afbc0ce50094c085038ab63a3d0677b5c52e32e392c635346fa5c712e4afbafb4cc1ade4a0141892d9650bebc2428d2a4773b1d7713797e866ac4a353eaa9c17fd54cf2d7f61d8cc85e3c00116972d7829844138073b7c39873958470be472622a9d9b26427d1ac89ced710ad5a2b495eca08be572b7c7ed2445a6f2fabcde2a92e27fc1f9a6219e8a28537af6ef23407876a5bbb93449e833e8f63e2ca4edb565591c0c1e0a0e8505a4b981648510e8eb9f4e471b58c089a84adf2ebc34108697747de3e696dcf7268d1ef5852164884312193af5fc413ddba42bb7d2a59054ec50122470260e703645a4f366ecef40ab6087ccc12a22863c9310824d715523ae57766572c5f5758475336724b9496127301a4515e01c8390b3c50480a048db635b21d6085dae4baaa93a762a511202681128183fea6b1634e589cf3c32a04f22e6da3d88685422cef206d70cf631df2b1d7a926992eb1d6c0436a38a5eb84f6005733584f9c380bf6476e4dc390ab45275c1847452932742c5ba4a08f58676201f04033ad695737d935a1093b012ab1745f5cba4037def88e52ba82b0ab15901bd9ad40ebd2caf64c09d275e953aaa35164e31cdca18cd29fdac35be5246a843b0b837296a95d2b10e04e51ea4bc6cec1657f05e4064f5d14b014b28a89fa5d478f16aebac00ea736b108d08e6941a5f5d3800dd0ab79e3c3277472170012963ce51115e8c63f4993e6e6dc90c9625735a9b4ff0a5f182a2e36b4c9ca42bbba0b5ea7ae2cf3757f53c8ccdd7b1d473aeed93f73a825c794d3bb1a7848a50ef38e2421bb1e7a9c117580e7ce16b0f1a2c0c680fc088456395faa3acb399f9ac3ac15521602a8373d9d820e903536acf2c31cd1121471d35494fce596cbba005becdace5aeec793f2b0b3c7aac556f89505c2b44986ae78eb41b3b8558c8901a44916fd3a9859d25c67648032abffb15379a3bbc5adab3804e0c90d004c4e54d07b90cdabc8253b95c769254f86054d01160b141316ff0709ece641ff18905c70d7d21640b12bc2032666cc588cab191c8bc37a4df83a2f8d734c2cc2ee51d1df8544a08f72028e1e6f93560c90f69c0a08c7db49266a5f431f6722510da77125141fd9b9a41ff7851173e8c7ec3766d7a8f203fa0bed45ef4e14f39c7c3ad93c71ec5a666376058fafb52a62d3a5738f2b84b0ed525b5137752430f18cd2695299300e1dc90c6cc5b6fb9a556ad6ce1859d1d44bddb6c0b0fbd4b217da8c000db9e6f9b65c7690346f66cc10221e4083758b00cbbcc915710bc0e1a2fe3984717279fd2dbf85900cdc6ac06ac8057fdca00ac44ef86a2bd5bfe2f53a251f7b6ba0bbe27a6c55fabbc306516f595fb754015907f37dbbbd28ade57f71c6be54a26a59b360b66adda8490e3a8af70f06b71a914c1cc6ec43b3d838bb40995f41ec44d42876fc42bed1e13f9df11f786b6f88f7e870b3ae356729ea7aa6c656c9f8e498a82b62d05567db27e5a20b39e740a0e55a019e793cab698be2dcf72e7cc105c0b22d907033df67a46c46981fc0ccba3d6cb7d16ce470b24d96b083c6d12ec72504ea205b22d825fbc082a5e4c14f277501f6ed91467c1b2d4662d91ffdcc82ebb2b994ae061f04c0c5e335381369822ce6070b265cda044ad1aa425a6d8d2559135593cbb2acf1a0d4284688e6293c34135fb0a12539b8d23d111cf0eefc7840eb8f5d47deb8bf7fb00f82958345fd89e203f907420b5924b92a21fd7ea7f4b8971b7bd853bf10e1dda2d06c4ff979617c17431c84a072391221de90b82563ae28557562148a2544370100e0f17635dd980b36f6e7f64c7f9770328488afe0e4f297fd3bd3aaa93a88039913c1e375ed6749d6ef3a5e72f1ebf2f16130e9160ed60265830f2b2cbde5b02b6ce628ca0cb262785205c2f00a242f3b517ef9caba4ac75673d10d6d94baa640c9fc69d6975d4f1c5efdc7b37afbff91bedbe1d6da5c49a1d5713e252a65ff867847b02bf0d80b1b495e783cf7a3ae0e0a1e736e0493602663ae257ed24340f03a5854b1be4a3c2033a9c891a56f1a3e4cf1ad5e3f4e7335f1732cc1ad20307208538bcb8f5e223488f4d20030065ca79bdb2f8db7bd6c0d523c282f34ed61bc14268d3cd74a0487836560a4b70d34f8c03ee9a5d7c656ec76dace14e6bb3a5f10830863cda5cf6bc84df634b0a544a1ab92d86a577ee4f1ee7ac7b2dfe4bcb2f99731e595a420ceeb66e7f1c21709610af928b2c8ed957d9d3e82b8867fb98cd985d5a7c4d0a6b688897c6397aa5f3d2a348836eb12211d77d755f43fb2cca819d5983d03d83fd6d5ad54c3724fc0fb896ad3c48e0d6088457d837a3d10d50b3f243849bc807575da6747e8b8d0e53f7b51904fe79e364efce4336a8e23317bb07d94f4e651419db5e8db2c3e46c6a698cd9af97430756abc43d0d55e734015fd2c8717df232db19821010019cba4a1f2c4d2d7b72c5c05bc5482b0f427cccc902deb475d1605be639ff9c629cae0afdfa8d4cfedbd4d2fd7e076d4549ea2ff67f64d617a8232e36d6a9bfca18ccc8fa0a7b05a0bada8931cebd16361cbcd626131df56c02ff6c23277b2140cc2981da1d7eb87ac0a9693e8de4f414cce08b88d4af5428d649df1ab71543a1cd5c58bc4a0c0e1e15c6ae0eb49676301ca965c872a5f49051e2170a71008aef87a977bce10697e35ba55397b6bedff7c2bbf1756d5e72f82dd79ac96651fc2e20c02ce8bc36fd7da6853141755a88469d9de9f9abc0a66b237722cb1af929d756b1c91d19aa19efd49df1b590415548aaee022257651fbd080c21d59b9943b57979d6c471832da50d708463882495c19ef7160f8272ec8f9f32f9e9a55c08f9ce88d5f00e923b3d945b7d2de91f042620c11a14e16861a50c733111b2be5bd67425a7efe46bdf8751ea16a0bbab0604f73c0206375c00549981c74b46de4d23a87ca16925ae9beccd84c35d60721e5490949d2c1e3c845c8616dbe029290bdabc13be3ec12257f21b7f18ab4d52ed69b402259db5b02bb1ac6fd982c5fc25f7a724a5f16d52f4438d5f004c573a6472146e77ee02ca3b129db922dcd0f458bcb91d9c9d6920ed79bce2dee71ae997381c6d2de70e5c9bf727c402d236c8fa61b4d92350017fb09e11d6e92086ced57cd7aebb6f492845c60b8a32734d65e140643511a754c8c1b15fa1a80f429b5081546cdbed54fdec2c5aafed643b744b0998dd87f8519b2f7b10ae3573100454fbadc8a4fbb7ed95c28340e01e60147a9719a65477878ca1241deee04f77916a83b52370305ce4b3876290268211b57a01a005595deaaeda07e2193c9beda4c280adccd224a407dd0211d253e8001a973fa4f6228d9fc0559d4231dc8af50ef01ed4b273c04b374f0b0fc7923684f740534b9735b06558039db9b83d7b7ce463a2826b3a79c98412fa8e000940f5f95351c01de81ab25a263378ee93271c350b90a0bf5d52db93ba78e0e21c64f5780a052e01485021c115f4abf86702b6cb15a1d0213da3b2bcfb019776ab1b01eb32d3837002c873e28d10e26ccaaac26369899f0a80c21da782fa452c12203c1af3a63d9f3100bad2949fd361c69ea5784c351b63029cd0f5f2369d49710719b9e2ec0206efd580020b63368000c093cd4e1307426d69262d84ca2e5e2a20b4d9009f9a695f3fe76125cda0b2a61d8b7fdd8083a98443f3e63272fa4a4b9a953cfdb7717cdc5713f4f172837b79b8b479087550222a05b255c856c94ef1b1a05ca62578b9cf7f083e8ec8fb9a3696228f2da4f624dbc55449675e7cdb4c43cc6f4ec8515d14a44a58a3ab03b87a04ede05de15abb1cfb9d409a130fb0ca321dd67954a8f89e08eb3efe418552f9bbb50147fdfd76efcff9e10b069298747bc1bfcd74462b69a3007ae92489cb6fc97482e8332a37e0631ea007d2f958b4865a6b66438c834aec9bede07de13cdcb1a14e72f67c6a3e497ff6f08d2b8e493412edd15083e6dbde28cb7bc86acc8ffd6700f948b7cef31bdcab0045bcf6f38d0ab826c0d906ce7acd450a69af131d064afbc6ef56d4e64d99f861ecb946492a57ba93a75688b3c020af5d81a2490976197831221843e416998235e2a723b327db8534bc659ffda1c3c7b786da4e25406891bf905c317f6cb6a47f06564b9beaa1b1b474203f54d7938b96dd67b641484444f13981d1cf003e890e2a4028c2f5b1f34f5307c064de18020baa5fdacc5aac3a4ac36e3d4a468b725c79443d9f94b777574523af3f0f9fc8e3719863cec627044f95a401c858bd9187d4499b79930c0b684e8c8d18a043b43a6be97719de5d4f81f314984e74eb78872d0b4a9cd03de5aa77faadde10111f43873afc026d31ab54aa0e20beb16c28c91bdac953134f94878ed737b00799816da71f05130ce285e9f258cfe58ab05d5c9d91126954244deb3c5d0ae3c8bc61057afd97fca7e4fd08b0c407577215e1d88e3ea5accae7933bf100fd711a9e37879cd8ce180583aab93f26e10af65fcf1d8cdb716682138aca457d78c4be525a891702dfb0113b95476963d9ea1445e859f5e02e0b5b3d3dbba0498176dd401755d40b0156017914239d6af6c7d05e4b2250bfb7fef593b9b8d69179c0ad3f7111ec0dea9bece9f2148862166ce702f9334118f7c4583d34fee60e26c08f1f01aed7dc21d56b74dbe906afcd81bbaf08ee00221a93fe23df212a018d18d78c2582ed376d5099e4b7a80824563ca18b723d520288dd7470c9222a8535530cdc7294e6818344b950086ef8c3a7208ebc53dd88c04d7bd8d9b47c0c6923b95a5775a59f55fcfcd39d9fe3ec2a30a0e3a64e610c935f2aa03a051f6a51b2db6b32cfa74ba2d48c002774ab977c6928fc930388094a96a6b10092149e95b6672ff3d9396331e9d6cf6f91809422f2be931a31eb13172a60dd2409aa4c6cc9786bc8bbf33d38892907ad4d69305b957087629e7e811a589132ed99220a2c912cdab8dc58a61e93e4400bb43e062625734f44007293cefcd87133d2219c944d295b888a646a19d27a1a8fe6b0fe98fa2c28e04060c3c2a460b0d7d0e4cca8b56eefb7841b4dc57c828c52d827c29f710ec0f0b00af78bc5c9db54f0deaf2dafbed2750e5433f36348feb8cadb1730613e1b7c0eca577e39b4869c7fc00e141f3acd97f12ff4e1765ff8966fbc04ac2d33a34d994057b17005ef1d9fc6e51637e623feef253c37a1112bcf105653e766e14660168b70356e2ccca2b10b644ce66771b4ea09eec5f1f96f09a20d08bcb4cd27abd7b442a933a0c2c2177621e6dc1f3c52552d5aa54d8add2b2902618571e023779df1d22ffa81026c9e6c70eb6298ae13703f81339d4e188ae2e71a85e7577aea2ab8be3f8fecbcb74e1425ca8cfce472d9a465bcacbe9ce2604a048a831af1740fa9dc7129cea8704b5a7f10ada12b9d9214ab0459a7e1caad30611644c16ed9a901c81682f1ebb92caa09f56bc75b1233b05cb0628ce97645bbc82587f161724816bb0940c19d83d497a8ff0b77921343e430034f07c2b223b60777a5d86bbe82924d5803afecebdb451e2307499990772f37f099d4e977a2324d0f04eab584c051fd8d07d2f04c9ce55218529a6f6bf04a187c2b8fa984217d6fdb7a56dea41919613ce43d7afd499c78349772fc00174be9ec7bbdcde6dd27d57a218a719dedfc892cc5745742e20de7a8d7397c6cc13c739cd6b11e360956178329527d9c70379b81056eb85180f5e8afc7922c70c929d55b051010732309a808325cf2a3b696ad3eced396cd5dc8a9764be5db58e71c0408c3d492aa31447e0e76eaf1bc2b49b0e1e080a89074d6ab915898c03cd65f6ab2a78c38b30fcae9ad15ed27a070716e5c13404d92a41c6cf956e42c8d20c39e30b221da15259a6081a28b9faa71dbfbf1803bef12c4256fae6a5c3c3f28520b34887da1e1648e8a6fa0cb54273760c09d8a2cc234966f760c1ecf002a95e7f290b5995ed99802f3a6a2a6bf64cf546b876eb191693a0bacea08344435ce13d516b9002386080b239230e385ffe36c7afe470086d92418618205b6681f65e71e61a76c4f83b289ee98656f5fc903d914dd686c16242d49498fd679a803fc88e0cb4ed0a8e54f86a9d9b25c1be26f4d6cf15ea8b253c5d9cf6b0e3b75c437e3943b1cc484ab72d37763cd724aa7ab84a3403d6e80c47d87b9715df80a488b68588c6ae01c0f9ba5578e441c192914eb6c1989a2c14699ce0de770142be3d5b1eb6e9399b1ba35782250162fb7abc3531e850104d9c94fef3253cf35b364813ab248b090b1b62220af5b18e3fc945f89cd482bc1e133b18fc4aed842c0a69489c919320cd70949d2d1b5e1e7f901fe65303e4bc7aa7fce219a8ec318931132a0059b1c6db649a5367bfa3a1a42c21d5064b5e18630de7f56b331783d74fe774252a6ed1daa18339563e114e8235e044b01b778072d3ff1b0773cdf18c122d39ffd515d572e998581935b320a0f059a89c57cac9226311cf949c8daf9825e58b941abdae3e28dfc958ded8d786769e64047971582d73fec64f6d31e294eccddabd3eac505deebac6de650919c67bfeea4f73f4a255722bcb529c795648413ffeac1f676850a70e07b2f4a230f729775ca7b6aeaf7686903f2886ab9f79b21c87d581b2416b1054e43d34c2e46c992a221ac71d3938343f6f65b316bd14bd2258cd14a7abdb01fadb6cf647a1dda352e13274a28f90c9c58c8102514b0bbdf8bd7abe6cd328a1f0f1f4eff2f06d87f79db7e939963e3bad19b6cda314ebb833264f2eed3443429ccd19854ae11849aacd1e94d3f853bea4fdc26a5ce67db4d3a961555071fe67acb462428f2492448d0923b47a6e860b06338cadd10373754e0de18bb016f33dd8bd788b54a1f1b6de8fb82db350680a954234a0d51bb8817ad28ea53d294b444f3e44d6e9d65a1153949225c5918505d3e3c427368631383243ddeb958cd87f679c280ab747c51359951685cc6571dd35dacb09ec46ab5cfd02a0d291df8e92f9d48b8039f769331fb8bab898766374218a458e329ac5181e5aaab9ea478064393e297bc48da25208f1735a4544ad31bb6507f98c7aae00106575be7865747d0f3ce8ed9a95cb27db298f66c7e0721a9566beb48026a90b4a4588e83bb50839c62bf88f5bba0329b7b6fc30b70a0159f4fd585f170e07ba4cbeaee74f2b8bcb531339bed6bcab3e599b955b907fcf2e7e1dabc556e0109f5d34c6fdb39ed956eabe29a1253817764fcbbf33d8324381a33552820a36c4ae909415006978089b999258f6260656db2a468bd631b67a815a457993ce7e158faa018a20d18f42db5512b4304e3c39b7c9dbc3ba816373b459a3062b5d51ae36fb10625041738aed873d4aa6a506162aa0be670e15721552b191f9194c26554316cd9512386addae77899839a1049674605877f38a68d40eec3cb36851aa4e4e6bb8308d316bed512f4d8136f345951e6bb91fbd65f0761b2208b537d01c71c1145773360bd1033a3cd21aa3dad2bec46a4afe9eb15c552bc7f64b0d47fbce7f0f3fa161158b8ba145c9c2737f21eac133ff230c8324da9d3b59ee3ba336b1170fb4e2793aa022484dfa41b75bb4cabd0bb0de6b53ef3f895e9c305df2e64249f7ef04387e34a20c116716ebd3947e029b3bffaae6ce28fbba7f8544284fc7a472508237e8330072c103eb65c0b4ff678eec8b6b849b64ab6c349bf1258057384d25e72fab8111496c46a002bcb06c900ca1db34d8f6cf983f8b20fc0860362c8ee3ab7299ff79b529961a7ecb4c6907dd22b1ecfa4a5f84405c0f1981af07663f7aa8930747b00311c731127bb83a91e00fdf5c96b773df0cbaf1d724b8c7d163e0af701ad35e52a711c718cc318f2ac0c7299a7e98ce368b29306dfc113630de2d0049f0dbeb2c7d98dcc4984150e9f7b67508e868790fcd1416fe634d9f13845d6e0c12be044e8411984e0df836ed6f1ee237882b0fee166ef8c0ca43004011bc455c3b955485019a93904fc77a6ba91e852d079ad28f915758ee6b5b8216603b5fb3945add080041b86cd2848c1ce09131108ab9f7448d21922eff4899cceb00c1b760742a7b2a9f71a41908854908bb05eedf1995735ed7813e4d88929ec6b62e0de29377683a28a72799514c5035418506dafd33d9966515223a8a76aef1bac1128a9934d1949f7f23b57906fb000520539b0b00f1e8588f94f94d4c1f55c9a2d92316731ee2d087c0e833520c7342782b283f0f694f7b6097e75bf8c267600f5cb575ee2c435c007f98256c4f882c4229c2589c686ca58eb0a844c6323758b9fc35479c738d006efae84de0a2345c72ce01092c5268b721d3b1e45299cc41e6887f7374eadb26d610b62eca056f5310a23d7529f6302d1c031bb45830fd2e4a0b1f179d07a67c6a3f38b4281ee089565b4694172bcf9e3611a7b037c00ea4e91e0792b7ab539da0582e8bfe410df66f10f1383d6415a3f71b7fba45363b008529336f01a252777932928d39b60d7d5185c5c190049307fcc81821275865288bde7cd2dfef52dfb4726252d604554fd82a9fc0b4cdf641e8d0001b2164111b4b47ee322f0b51dc68d0aa2f010c5b4452d8bc014bd338e82d8c80ac3cd51d825b7974560786d9ebb2e0c21a74ed498ea64e4d9f8dfda4eefa38510b0d0a8e5355d158cadb292f5ea467fb4192076521645ca24aed9b30a70e7cec7edb954f66ec3de65671712479d398c386ba02b0bfb4e59984e856a6db6a649f62880e8ce3c09252cf8317a39fffd69977d5ed01b526fbfddfa7fc7eb886e35f6252652dab31a909fe8a303585521b1c7cf5ff4ac76597d301131ff67fefe15a63832e513b05010cfa352c734064d9d68b6e0cd26ccdb2e5a0e76143829f1999781bf4a736c3b7466814ae64e00ed7e3b8e121b1da0983ec4893b6fad39a5f0b459cfb379da3f364902969a163f50db1a90dca915020c1904ce9d8f78a34929109fd8cc126fe322bf005c5fe49fdf63dde5bb9378a8906063aeb8f79e9f9aa5d440faf3a63f34339ff4786274b9f5f40d1e223358f5c8531d424447c418020f419e0fffd08e1daf07c66008e6b2c097126ed6510388f43cda197b1192cf60c8873e269f4d0b17fec3ecdb19bd14f322e569341830bdc7d5d311b1741a276b4c6782e96946ac4caf4bc46915c132ed7d4e0b427420519e6b0f6554d9a484ae389465c69592a4b228af2913a594c1a13c876d94aa8690725d6ba75de15d5b052e24a00546afc26ae3872dd9e5ca2c8a412c1deb1ed35ace47559f865dbbe5dd5c0a839d0facdfef56e9aec2a9cefa92d9d52c1ff7ec336337facab46241f6ef8ae1702fb9942ecac0db2c291fe2e5a1eee708bc0821ae408476217841bfa82729adcc3f9a83598c200ec5c4ac9c0206113d3b244796d10a7ca019abed7c02e3a03331e0104d9defd934cb60206738108b642e0dcc8b36cfd656f78d08e25a1968fdf55b5dd6db78e7d345436263e65be2b28223afc79acb0968bab1a85c5ba68ed7a9800fd6bdbb8b3f602f82aa8fd98e6419e4c86290042f7a23c32b2832f0b2dc9f2005f66af0504169d331ec9d195a8206fc7c85e99146d845ec79cb279c5c8c0981e3f8bd76ed6b98ba01c4adce425336a888d4663b6508c09a6861b8012b368123e16b26966b8852a73d6ec26f9964ba10e0795cd50323e0b79ae83ad40958a21f0f552d07791c1157ff315c0c5e04617f3e1d7ed6b0025a1b5ffaa7fb35aa4bcc012179fdb6df006a89142c668e093fc98c95b0021e81fe2075794906769d43fa097e36a484f0c0244569d33dd308732090dd8cae7a158e17829caa29da62f12f1e1126d29720597112fb511e285169beda042542d507e282c46f49889cf89152b0a3c4bfe5147f1b2133c62d6b26c128ec3a5554bd9d0183182a01e715f9374c584e66204e7b965127c03f9ef284b5098b2b2a1ff866d4bf37f260b955cb868dfb653824f72b0a96256c877f50c8c019d37ec7a958443ecd02d239173cb1c9acc45a72f30d628eb5b8202a11776e2d9e8a4e95d6048410e3b8b6287f1e23c131c0229b7871dacb9e982884407e49ad09b1a3c1ef15b7bf2c96c1fe55773a0c2eb54b4e8ffa81cc416bc7fbe6429e329a0a470938e657f7181873397329fe5b4b5d06f0d14c6c3939209b325489c24a37181a53c1109cd1202c449650d2de506f74574a3ba1866628b86a726c12ebf6259d699ec749d0eede4bbf19f67deddd5802dba006aba138ad3c25cca227e871b69dc4eab5483159a32d3fe51485f5e6ff9bb660e62f67528974e01bf3ce3ab9894ad24627848a804c4eb54de8b965509a706394da0c885e188a198028134ef27879a413ceb8dc21591fe3e0664d595ff1bf34a360f407d1c695f44fd74d38799d124835ee8526a0e4765d68d368317efea2ec568b198029ab42a85bbbc5ac2adaa74a0c97d00b4796d534c4227a7cc71924a730a523e981545e401a938da0ffb5232407eddab0bd283caa4ddad0aebf6a917b910473eb9d14d163c69d1bc7c7986c9c945af4eea62a965c640148b4c8d30129c6ab85f39e2a326d84bb295ffb85bba4adf2db17024784cb5e6eb5ef7e3178b1544b2f7fd05bd366705258ab378630f7eda5f0a246c0467d2c4b5d278932fcd824c0703c6ccdd67701ce923217b71ae9bbcfd2447289690fac045a57f4b906a04d279b34783266295e9ecdbc3992dc14e248eb84bc80ba8f6ea19dd0db83188330fe52b1f082ad4e4c001658ae03ee0c09c927da102acb9f5b51230fc48c58f7ab85bb2b170039fc9ba55c3959cdc7af8698c6adad6bfd5d796380200b6cd946c9be325a8d611e2e890c8dd5a2c6f6c6648dbdbe5cd52d62f62bd7aebdbab0ad7ac095993192c5623bc5f751a10138c90dd7b57f0b298e1c70786a390b6c67f210d92c941bef6635acbcfe490287fa717dc259218dfc18856d98a450deb9e63425e8f001875f6c4c47a2c04398e20bbc58da12844e65e9414289cb61c202abe9eded57a89661c69c26b2ecbb5192f3c80849918a71ac9f2fde82c319565d632262f4fabaf88e60dca3bffcad93783bab1b03c84adb814f94c55fb7a4f82d49f2878053c84788465a8c0dd58be9b3fbf6b53f58f695a986eb9e33754adf2bc4920d3bf6fc76527b77e49576a4ae02d186c491f3c1e000e20d257a1c79b255b22e4f9b061e34ad2706d5e3e728161a0b822ae1a2323f30ab6698681f77854a39ebc8797a40b4a4d15e1eba63eb7d49432943b3cf33bd3a9c8f3347b1404ce52480b339ade2270802805f5bca80eb0ab8fc3b1e3bccc3c20038c148c7e0270ae73151d078936ffbf092522f10a98abb89487b79b1291b88722bb10f4bd2cd80d94fe75af0279483fc910e23defb27c636826b9aa191abd14c69e04aae3998b7ff95c728f41e1205212d001ea05611200f030a1de11e60ebefdb83521203f5af31f1418cfe4389d9590522856e52a58099c19fd65360a7a4e01ef631c9ef3b1197d1fd973009f55a41477605bc42f41928a3b8a1e2f885478eba85b6c0b4116a5659d4d47f0a22c0fd21d507ccd76132b1f4e3ec90722876f5edf4050650cf288d31ade7fbef0933e3a530006addc6d82bd76c17763871cb188836e55f90f953ce010e30538f011606f5ab1f0252901eb90d2180d5e7f9553ee551eb4cfe8ef5307071118c87e0aa3894a82d894051e2b5e10dece4a3bb69cceea908cd5b169d35efb67e8fe4d64fc20b216b31da4b8df9df529589868e3dc8d68d698d1a6ff214deb8a9fb35116e34dc1ef249ef47a1ef19475d48a16eff2d73c0966550712a5fbb20b6d23effe869965855d90ffb0bd84f445907377b245b821081491e28a6b9571d407c5f2f45d8583f155d94a6fa6a34342940428a85a739c3e07314fb34c4c660db8028f0c50c3686699adbaa7d251c1a536b44e9f9ae2b9f983ed65cb27cac4757f0095571ddec284e37cfb441d2be2c0f7a489efdeccd271fa10db6b9c1d31adbf65dc2769c3a159950fc67b751fe330877f10b91127bb1755563d352162695d7a1494724fde4e2ba5708f133cdd3b0866986f9e63425cd20048e2a8736a930c6f2ad0de4fd705d7cf97c9a02493a44ced2734b8352ca6846943f6fe5546b7287bcd5a8547916832c228368c476036040279437ac4cef2e56a6e990eb906b25f1ba3898e09644df5bd79363076c571ff98df33240fbc4f5e672511312c14a9d7edb861a5cb2756f235f9075031a6c417b2c092364a49091c331b519252bfbfc0e14cdfa21d7aff5bd69c99182583279f15abffdeb030ffb68ee2553bad4eec1aa6f4eb18e3a978503b438c0bb79d22bbb4101423fb30af8ccb0a14aa1a4c7b33ac3ccba055ec310defb2e20c5280510f66a9caaad541d6da318b477239fd679cbb80ebb4b551f0d02cbb7e414e089779bd47d9887763805105cd3076bd46c4e39a107b075ee98bf8807305510c771f1319bf1c77417c4b430379087fec2f872a21e333fd2278c33798bba846bf1984da88a94bd533f227c4ce1f6b089b51ed370f633240c17818a507b705ed7155badc722c2e35661910cc1bc616ab07e9ff2050ad5ea3b0508537617f83836ac15cba8156de15b0a6b55aa19b964d3be159912263dab3e8f9d4f16473c5c4900f5e8a73a332785a9edef217b3196df8a05b75e6615edfb905d0ce3b7d2c02def5945fb3d0453bad3442d0b0547fd9fada8d7648866124aabbe6e07fe9838d1e97b3b7b268048bc0a3ec24c747ab58dca2c82952aef6d809f512716f2deee46a6cd55d1688b4b5b018c4eb3b63b7fc422deafaaa910a6f405c7a447fc952b3806e7f1d24b4126565660a09be3600d85619b1f61011d1493c06d6d2e012507f62121b2481f4145fe3f88422445a36cbe2e698301508c56e265d0276c4a6a7f7f456bc89b9bd04565a8704e6bbe1069c19c35426c76d505a9bb800a09bbb9491bb255c02e0050ce78f3e855860c1686c1dbe1e66f2de55dcd3c49556c827a245888ac97c531d76c180fb9a6868263e2c013f3e347ad8ff80a8c10b5bf78d01436cb9356a07ad258776de09c67fa57297fcec20d71951e5f331b93d4a56327ac350a80cb599b7fc579eaf17622dbb1589e35e5b2b1851697f59228b256861e9bfb41bb5ad963b0c5e58e150afddc476ec2e81fcef15dc6d47d86f4316a6f1e7123cecf542d3ccd082e4c4e6d2b212450e493975ddb89a29cd96693e5322da19d218c66cd54ba9ab2d28125d21cc644b78c05458231e2354cda7b9b48264a23656725f8cafcb2c3fca34f99d9221d25466fccdab1d14f311d2b4954b9db7fd42f921dd789b44a23b98bc24d950f15fe5105fb2ec2f098e9fb13804047249056cef2776ca7464d94ca4d43f11df3d35164c2282e0d8b2ff1a76cc2bcb5c59f0354ae280c1f7210ad1517efba2ec5719534156c9d0b0224f04833db4710049202bcd2896da80103dc2153c15e719644263e0794d89ff72c2b3b82a4b014fa4026d6e1ba260e37977620c74ffc864c319af1c04682b3d1219e80ae8d6c37b122cc6e6986e2bb75cfa0fd674e97b2dd8ab9600f50eb46e41f131d774b8de03101f7c8ea3ef7e652773df37299701c23804a5419ac188837415c0854ed3f0d5b9f50a710d7f0e55563128dbf9f3291591195a938c77bd0f91c9a311845e3169ea8876936e811b7fa672c510a29a3e04a24be0b09f823513fa48cd091062ee43ba6ab004a3dcc89cdab8fe22efbafc7bbd6b9f929b6992f246bbe9b91970c06495730863ec176a45b0bb0eb3f86fb11cc37b75d109e9f8c9d87be3a156ace227c711961e4d8a9b22bd2894652c6d1d7e4ef53c798b2f062521fcdb1e128f46f5d097ef1037e3890a148fd78de95105b54505729425158e4cc2525ada19f140035abddfb7cfe21731e35b6f8a13ecc215521d33e7b8c08f6c805722c046eee62f4a3f6958ea7c1691185ab6ea1a4600919ac2f08aadbe2796054353124027a8b5d899aa25168c8d7a1a26b3025332f13c04f5a8925b74278b337fdc852b4a8f0c22783d8745c12a3552693098ddaaf20e8b1a18b58159493914a5396828d9b061a59b004c6f01a9c7e5edcf56b7a2be8ce1da1e524a340cf789c2c27c80211b9b446d5c64f6f05054ac8edc0dde5008013bb22500a4258551959a2450442c0a2b71294a02c4d9d44305d566cbe90d34a1cda8ae7475634215d08742927fe7460836c66cba4aba249e581eaaea098dfa6aac0779f9250a27bd2f7270c2e343c7508873259f84c28d046d728286d1c97c25dfe0b9a80f45b69fdc50e4151febe9b459abe536a4198b58a1aad70261af924be7c3895698b4bf86aa1b6c6ad77ac7068c63cfb03736c41330370ede7a1f907ce0f7023ab49ed522cae580309cae92461d6cbd0e415a95009eae266bffb6e09c406e19a21c4e37ed32475245e1df2a9a7e883d5542d6b1271836dcbed50078202618c05f41ac48fc8e3eaf911b9180101d5fcb40a0c8c8b479257ffbff715ad22e68925b41ec301753c87044ed47fca7ffa74bcdbc40bfd989f8d75ed28f7794d0f45db7d34a9ebd54796942433bb40e488b813680f92a5a27136ba0c4c7a6a4821e50593e0e5b6780554ec2a548a0faa6297ca19bd846fbaf63ce9ac576013c22b3493810a7444164c54cbf5cef03d4b1d72f0d9025e8ff4c445bae1531d3efbdf2f3f1065d82d1fc16763c38bab5a8507e5d6007fbaf2fef33aac7fc22744fd012ec318d0adf87379bc74067d07b1e23070d047fdda82d471a26c395b9f63ac1203458377c4d74efc0aa48a158c586411992c67ad81dc7b3b10b0c2390a59ad5f4a45cac782e885049373be84e14c1d4e08ec237ae717793e13304047aec0a1e111e7194ec147edf14c12c12f4b5455696bc44f7122cfac12ac12d77b06ba92b69db9f96930911bd2846b39d427507c789c7692aa38beabfa828b4caa73360a42f6570c813bd609950d8bf73051b451b97eb4f988185adfc28931b3fbc51ed893a4ede7c77f291ac13a22aae28f5cf6050da3bc67a38aac63c3a1e56a933e228fcebcec44ca4ee92c6e777878389d8d42876069244729955dc15741568357f30bc700ac96f76eb4a11d40e5c882e22e6ed157fe5310ebbe53e439c2a4a9283718bb29bcb647e630c54de26358803895c6b1aa89016c14169bc11b2d0315745766ef75709a9fa1196830e445a5023e0652241d409934cf0ce6827639e2359a494cff156d2853817ea1d576bdfaffedac3aed08b5051c9dec746026ddd0b51564c5584fea1e4b820a5721f4ab6eb52119aca67cce3683793a25cbbd30e9670a17071eb81c09e419293dd1ae0581ee1e34b96128f1adac46f391ae35330d3c241f7b5c7374a0da8c85894d144d2767c49f140f04e6cc0fe968b87d28fc49001009b1d157dd41c362c9af2a2dde0d538e3b8089301d0321f87467249e2810b4358cd70681d62e59a47614719754de4eec593f05af4fd83031c5bf5c53b9d293d2bd59503d7b26a0ce4eac2ce2b821f4b022d8b2fdeb9ca361962995f8a6b1bf6993139b41cdfb75a5e38f6a145521feb7849e57dc0b9d3ec5a2310f4e1755540e6d0b1a0202314b6f408cd1ebc9074e0e0c85f978808b1eee0815a9b10f88c8347d070abb6089f7bb1636dfeca6e57acd95b63bd6ebc8f053560250c2a88cc8ae96da1afa9a90f2eccea482cb8c506eae8d92cace4a047f72aeb3c31dbcb0d2b47d454b286c8978305c93f44c968a298a6ff0c61586fe8defa6541eb64739dcb7df5d04769ab86edb4c005cf0eddd5ed6582ad551115b80319c5d41218aa68f57a1dddcaa302919f9ef9336b3873465e25450c1df1e4b91f45ae8b96e6c26028afaeeed0d4a3bb474e53c2b4f02b026bcb48a23ea0591da1dd00f0e0f812d2169be9541b87b6655448c2c0f321e44775d38ab5068b9b51de9f92a91909be8a2622d78f0a28566be2a437b528f253ea61411bfc3b05ce8170f8535ed4e8bfd26d059da2717c30819b9e5374fb630a0143b5850b8904ec6f1275cecd6b1f4fbd89dab8e63515c3fdeb68f494ba8486c9a72d94d07456080a9b6a53acc37bf444dec6afaaf20de0e4a12cb875816c0cb8fa7ea83b4f24d06b5520e8311121cf29cbf9585008a5665deeaa5bdcf5a58eecf7cadaba2a92c62d8fb9757f4221058b41df7c47aae0039e1aec2d7aa54989c250ca62a038e3f5ef60b48806e3a23e7943e92442449137649f87ce99133a809604b8288de67e1bfe7a9d92844318bec8ed31c5b4d999249a2d8db19b414dce408541dbb2a2499e249d2397b97a4e13ccb7e2e02ec66f094f6269ef84a741652c3af0c6baecb94e4cdaa49e510d342ec3436198ea0f7e8c376cf8d3f9cd4ddc498d1e35ae85b8c21db70c5a70f6ba30dd383682fbb4392b4fac7bb8e0c5591356c57648ebc09dfeaa88932f309b199963cfd4bf3944db74048d1819f19ea264c48ab5c4795085f6bf00e019a7bc5daaf61ea6c3a6a00faaa5639173839f4805175f6473a5ba97448bb26c596f5363580d8172d36ac7335a4471d4b0055097aef591f09c48984b81d7fd0fd33279dab6827ddc5d80a7023fab7ad26b8c3dab86f0cc0879b883858f72f664389c7e1b57951bfa63f0d4d1498fdd346530408ad758af8516a8a572e91633a0dcd716b08499b7442e0de97131ac2156a7a3671e185d48ab1f22130e8cb5665bf66655a10b1afd6d5f318394e8d84768bef4f64ffa8932d53486ab571f81868f073b164946267b97d465fd4bc89f10b0914f7191fd057ffb83b2796582c7b2ff4fa883ae1cc13b2d5c6e1c30480a93e6b95cf9574dcc238eba8b65481837cb08bcbcf9a219fbe5b1f65fee63e7a141be0de047d804d4c274882608f421bca37bdea909f1e31892a9deeba4a500f1cc8176d727685898c185c38e13ffb987323d63d47ec9555d873a73b82302e3e12b6b291701e5b4f8ed524da791c9ae9b9a0649a008708d37c4a4e14ac078316c5b357968ffa6cc7657d0ee7bc7bdfc829402013429013ab8495610794c88869d91d35038c1518cd1d50cfe2e5c98e696586920340eb7a9de3b4a12a46e92da5983431584a0ba42e043f70e6cb19586d778b717b432acd1f3f663dd611c1bbcaba199f995b282389cfee63fe80ba276018c4a52b1e88aa9eca544612eda6fb347978d872e420fba1862039b69c3247956cf60b905d259b6b960d07aa96cb9d59ce110ae728da9c1c5b26866e10e22cfe112b4850c1965cc000b42a0b52daa7bc341602d707034c898cddb755f017a994e1a33dc6b4796a8360817c042ea1b0c557d944fecba66a4bd9ca07f682ffc0aca618970399029b65b6324deab1e5bacc90f10ad0bed90514cda481da16ddd95d9f3b982c38c90022fb4b873b13a5956c8768aa56c17afa4bfe91258a0762c21fe6f4c58762496e6aba168c0490a947dee009601b4f627ed48aaee0195fb5f5520d36174c41332d2364bee2c738244b8e5a563c43dfccbd1de620250e9bb8fa1d13da5fd4307a049769a3da8368ebfaf3feef5d94796f288fae9c080f280241cd8932ceb4e6216efa22e896f151bcf0291c8ddde81d0587c959377d54981cd3c8c78d0ee4ba8c4f7a9ebfa98c184829b838e3a3505b1c4dd8238d71a846b225cbea8a2e3e904b251f6d3558ba408b534971e404839597c8d258cf9bcd9e53855a38d18070ec61c3495b3c4c86c4db3eb8c7f46f03b1d0f0d3e05ff24926f4d761390d7919bb799dd8bbf46325ece63e2b0718fdebdb96995294a69e877e777b5e4dc0388f0a806e8f0f4c7e05ec46f4b93d6377f2c2aef7ba517113219099a839e97523f311d0795beb2fd804d6a34747a57367d94dba901e92b96178472503991773735a1dfff33d956e3ab09ef0c66d0fc189d9b2e4db319117f86028bfa2e1c90d789b8d2d72ce16c8f9dad8689ca2fabaaf1a41711e8997fa29cff8984f592066dbd1cc8310164eff1bec7114b3c2f0efc51fd6793627371bb0e7fd282c6ac8bfc18fbdf0f6b42bac8cc4834bc5b1ca47890176ecfe01980d443adc0f57b882701a38ff065ce1b0d7c2151bfd4a9ef0f6a106a049fedf1211f00c0579208fffcd1127dc668fb14880fc02223feec403292676a06e746c9e8ddb53929d77acf585944eac7ab6cd8c7d2a24ce44a7a76d4d99225859e5b9bd3e53542b4f9eb72fb4ab0ac59958f5683b2f930856843cb74f58cbe7abbef32ead78be5d1f004b34a2e227977434c5fb7d48ea7d68818644c644d2454f8e7ca72e394322052c218763a89423c918086e0e1299fda825dc1c0408c65190758e372f8a8e31474157ab438ac6863ba2d17281c007639f39eee998ed49c719be8223ed71f90aa92eb2fc39393c5d1036704053f0978506c08b855880cc862940151f174ab2b60689c7dee7bce5349698026010fbc080b24c34bf3cdd4478c0ac08fac758bc2b106ab9fb26a9c998a69d15af84f61ae87bec1e8b9bb749e788eedc62a15df9e05c32fbf96da6e2fbf6586ca4232b5041445c1e5c4de2d77c6b14a0884e487481247b96bbea488e1805d5554389f8702169f39136020768251b6df481bba944594e6d6ff108764bc6ba2997bce48e301bd20389627309600f55e099395160162cb0b38226215392bc91fd8969350fb2d2c76b1f41821bda2e91d4c33a8c796634a9c96d7857e5f69ab5023db4c15e92979f7ee27a79979beb6299ee6e52eb4c6b8973e2c377c1f6bfe4fcc7de6ee94edd4e1175b691814d1da0d641d97e7560decc04b7f455bbf122b38e698ae0da89cc74d1a278251e57cfff494143b59998152caa795c7f3002879e6b1b4c522b01684a2028cffecc478fb8bf1d4640fa112b50d8729f7749b71fc357c7d85b4266ab51986f394edc65c40bc46b500dc407128d1903f8c5a6005a9321e3dc6f0632d00e435348ddfe1157d2a310e712a1d9fca90623c8e5f6a7a3ac1147c594e418b645ae5d1d3c1e326ce67c5921fabe9b1443faba441302c49bb93389c59b5ce7d328f72a0d8019e95312996ada084caea59347e6e1b625e616c1fcbb5d69125d1e4c679fb87b5bd38ab6b61c76ab89cb243ccc89a2ea8d22effa0e875d74ab2cd79f9b4653f4c58eb7e7854ae5759b8cf47c60e5345a98914cb151c7508e0630662346db2fe8ed083e982dda421e62d5b3d78f1fc718da91ae0bbc60bfaccd92e94ba0fbc9c4d006512add2c14ab4881118d014ddd0ac428d9aa225c5b28b77852f4ef14929102264ad60ff6566641c74390eceab590f993e76ae2fd111ced8be203023e6d4ec6fd7592ba08ee008340405db3a7e159117e28fb7215d2461e0ca47e61ea59ba0e9f54ae5f5d4fb137f8e89eeba8d66d438f27b00321c18f94f932195d2332d2410fce72b4f538c930247d2ce53b0a77db6c7ca284f3cae0f4651e3d6e7670d6c7b2b7c37994a5ec4672e07f1773dd9b49936cc62ed94428b4417319f5ab9407a78188b4720c4357dfd910ff8882175d73cd1d9460236da97b8e2107ce96c28ca6ed250ddee897547096e3c49dad9d84953a40643499af8e99c71ed89604459b5c8ae72dcc6f10899ab486cbc95da258c313b690dea3d3737c48d9548ccccd4a689c56c35a66004c2a6cbe89482a15bd438e351f2ad4ff21f85956f9d89241ebf3f0e06f53a091e9861f17b559d09c610aa0a4e896156f43c60d04ca539b2530c360e47f0392df0ddf971865bd0e1c7bc19316cca9e0e8de14ca239aa1ace175a8778c12595053065aeafbef499e9369bb21f0769986d0eb27bfc9f64023878bb8c33decee8919bc7cbf5a49253c4d9839179a4bb8a2da791c5c37e5979e1261f8ad04f00e4079c2b4ce1f76d2b3a9dafaf613680baa60594eb0c6110c62aa65decde9528c2d6f1e60527cf8cd3cbdc125b8d0f9265d984862b5b2bc565f7326b512828326219a453193fec1bc47500a5e788e4861439bdae1e87cfffeba9684cab09bcfbd921c8851729ce0aa15ce36257f0fa6ee02eec83ee8f3da877019af2198ebf8f085c6b9190f4cd5a076e3841991aa385e3128fb6aa2d6e38001094eee9a87ed1a7169148193ee121fddbb9990c3475ecda5000611061cac99669c8095cace984dd3cd9c7f19cbe913db010354e90ed5620cff1374bd78ce2439a65a77cb60b565ef5d64d87847119c4dd0e0a9a52d90775f48da932e11516306ef866bf1b142200da74d18b2259621e5fcf3acab4603ce61a3bd718816f33b0532270a0e3a0cda258e2764e2501da92e4fbf7cc7f1cc1e3c07319a161e471389c12365a685ba51141191f2b0f07ddda158db3d114b47383b3996eee3c4e246718e9271524038af52ceb05a049d44f4f76ea5a049c45bad1685ee1ba50e17ea566bdb91be0577fde0e9226b008ed099a37b2b4ce0d9ad26a142297f1d582734ffd9e63d96c7460f86a014570be4ba68244a7a92ca0484ee52be550a4f985dc460810d555b5df228ce8b8a8c25321ca9928259ca96dd829f31882f4ac2270a7ae0b7d445bd6e8430200c9ca57d28dfd3087f76c8fff0a5abc399663f7990afa37a5b7295bd4141b4e4bffced78e98751b642c3b7f1b85d1139676039c6c13a4a3795e086bd4b4f3cd79d6384cf421714bd3d97762f9e4a90422f12b4893d45f9f56e2ce78120a3fdd298e76c10ee36c99353a23579044b01f958ffd27e3b640f4289829f7b9680ba3da1aa2be7e156393542a3f3a006cd5cccd49e418f1b25779c1daca3c681910c4bdd55fb696b6980b9f14684ff7b6442ee264a62d5dfab72beda94eb00caff16888141e4c6202de5652c574fabdd698430e1f0a50338d61d341b5b23933c48966e81b7eced292e76c38da7ce4f940bb29190888ef27798c6ffd2e6a51774cc2b429226e0f845c2dba12612bc8140b6226eb8138e136e16b9918f13509bdd7a3c11e96750c391c4d504054552d66dab88581434d92631ea89aa83e7bac07baa6cbe07f9b703c9a91157f40561220903e61357e9a29ce11f7b2f80e270e39216a59cdda6f80a5d3ffa7fe8f191439bb87b4f97784aedc697685f2a41e3a897e47e1587877e25db50e951b7cf700568221227a7d01ff3001312d21b8e80caf70d5e99524c99a3105beac641d95b28c4e47380f2201b06b0c9415258ee94390035e206919600751a999afe1383d5eff9f5630bfe90b09491af8e01a1ac00472165294619a7db903616fc1c0463e21a5409a7edaa15511dc2d0b777fd37a0b40d7505a447c94869d4ba1972950691034aea6c539ed080344abc923a495827570601c44b64dc24e13f934d9838aa30f804435395e4fdb65bc911f4c3a43ca891cd4c33abb0630605866e8313c8ad88129b2ca7ed46ee027edb9508ef084e190466c2de11869cd9701b89a7a47d0a99181b601f8a636bf3bd948c9c24173737e3ddf3e8db25eaf855c93b033026cf8f00817e1439104fd114dae352132d0fba1cc3b9762918e4b42c59c1b615cece5338591450de8b5f77c92e765f1ced225c3205b0bdb9171babe3a606c539034eaa70a9a2221cbb3afa74fd5ba77e798b897d1bc524ecb2b55dca0c94bde51c96d53f630e280adeb7a300ee973c883bc5ddff5e8fc5f0f88aa720a454bb55e5cafaba6285b0a8ae2fb341b8b69906c26f8b1e624a1933d5b901a5365d4fcee7456517932448284bd3506f7ca58e97cda26d97e69d243ae09570f04d34bcea1349cff5ef12da7e728fbe69b3c1a96db2954eef79874893cecca13195af035a091c66efdaa386089983363e748ea6fd3a35b44f41f2eab35b308c87dfb152837f4ec3c0a9bda5134f9cdd6266aa3b3432382d79393efffeec16d96c6d412d40d9ec016a1ee1eb3fdae36c7b2556f4fba2d5fbfbe094db0475eedc4bafb5eed072788ade31689c9819049cfa6ed39edb548e90f183af1c16271aa7b547547578bea11a80149c7c2dd906987aed19fe33ea2d047b9e81c54c6995aac2a5483b46771c9d91505b2089c04b1cd65951b978230cb525ba41e204b267979aaf993754388c429b4278c96330288178531fd78b1b8f75d317e2b812ae4956c877b602344f753e88de0bf19b078b12a2b7d06b4a11d104ffb798b4b5c11263a34aba03e581f650885eec7f24835fac10d3ffdf132b7aade77addaf2228e1a2710bb56778d4f80f1aef1b90ef374553d95eb9d293dc6c021aee319a72bb20ba782819bc43ae1426e5ab79f02bd7a847da10e3656813ea6514cc9b355f25f4858f0e6f1606863761401517b7822a89c747cfebf148c7d9ad6642f2f77db3550bce82f4ede12c3cfea27578bc4bda2e997469a54c4c8bd360fd5f05b135ff286546dfdd977ee8fef6856f439a80190990545e5c72ec6d5456ce7034de229d6c47f682e6a8a50e555f28e8a43c6b6da29ca36aa8651fdbb840c5117f86953b89f9e47551a8d8811d97968ed51cbd9405df88e9049c17607aec5d1476957d23622fb361c4efe3a85f6b053552d6aba5137a65f8bd7fb69e1d3de5f424cf87ec1466dcbd84fb90dfb32e2291fa932f9b7c610005301d34cec92e09e1c0cec95e12cd4ab10da43ff86502f383074e3ef041396be4f77e6aa41ae11ba1f2f99cb7e8ba71ec0f1c0a854fb0c4c24d2a398e5340c399461649423a7ea7d2cb804d86aeb120bc6e2421a669a6dade65cb2c7eff0044999212b64e018c8a2a7f76ebd073428f2b0240425cf363fb7331ef79ce3b98dff307e559388443e252ea4e45b0d3127d04b5f24ec193b3fc181651dae6c693ea9daaa7112d1108fc2ec05fb21345ba9552e56cd0fd186ca96e9a5fc313b494025afef56359405a554d07c8bbbc99b976be40a95760b662685c32a1767ee038b887004852f0556d59798b989dc4fe17c36ec47bfa87aad6711bfdcaafa4b16b6a2df769f94d6f2596b064be974a70df5ef3f1ef55b37bef2df7de52a624657e06fd05f10551878d404d9ad1ca7e68e34f175fbe88df4041b88bea247dd08159c650491e7e8c0e3b1e48a03562925c52105eda9e9baace4297ebb71c70dbee5ab4146ec48db811f872fde65cb4d209dc36b7c80ec2977855ae875876d107be5c2f1ac7785d97ec78f9753d29cb6a1d8d26e94563ed4af8223f5a89a995389bff1dc3699e89102cd4e04c8a134e38a154d9d124f8fe432effa670c40c6510c2c15088d00f2ce136618c106758d881a110a116ee2e42a8e1f8e198c2a27164e1250a5de47bdfd96553549959b47816410891cd2bdd26672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276707424a6750a1102886301402c58ac80a02b984a69f951f7a89006882d98fb4b185e5111c1f5bedc0524c25b02ecc13c61a038e9f1be339519934025faead81250545c5c9906bad8df84a1c2b4f35b0d420c4d293828262234ef11e282d15272736621541273a4dc3f2893e8e40558b15d94ade307c13493339c4091cdfa320554f481f74e0eca1740caff4913f6089c5073e4b1c0f7c963c1db8e1fb650ea0c987213ecb1dc09987252038f0599e36f059d668e0b344d9ef773240930d213efb14b8df5b70e6c2521119f8ec4218f8ec452ef0d98da83ac686284053a409e2b34b2108ceaca46029d658e0b3f754e0b3ff50e0b30f617953c49940d7f0fd6e034b5147029fbd47043efb0f087c761cacf2fdae04344520203e3b0d9c1995e290199fbbf580cfbee387cf7e8a41d10234c5223e7c6e2eb0e04c0a102cc521199f3bc8019f9b488ccf2d448313d0d4343d7cee277ce08cc90d2c750d8ccfadf3e273a778e8ef1f1d73f2a6c669c0e7f6019c51f1fdcd03965a87019f9b6687cf6d8377744c8919a0a98174f81ccf7004ced4152cf590057c8e2c057c8e430978ef4d5dc4c5e74805159cf982c0520f993e479f99cf1108011f53910968729a08e3329f230f9ce160c96b4a9fa38f98cff1268798ee5b7c8e3330390e0e58f2027c86470c7080cf9106b3e8170134395084a929c2069cc1603e4316013ec3d50b10b0e443dcc5577c864e30799108e3eff219fa08e0b38b017c6e81fb5740a7affdf5a4cf01c001f8fca3daf2384093ac89307006963268923611868597b00f78e076e0fa104d189108e33f04101cb839f30ddc5c35706d4413a6120216c15219b839c3c0bd001ca289262c28889bdb3194056ece2a5043811a9c68c2782680a3e3a5ab25019d08e8404007289a301b20802ed58c210f18f2439168ba8cf8708b60bf321937670eb83168a2e90aea81a6c64b170ac6cdd98b1a1e6a70a2e9e269000ef6d96280ce0e3a5807289a2e1b1d80b04f95bb2c6088028624e01689a6e9a28b60ff1ef2d24cb94b344d2f4dc789a669ba333757045c191a5caa89c9a1a6058e6cb90b50344d9b0833c48b4493341261fc0fa063009d02e8b00082b9794480fb7257dcdc9eaa89261994fdb84d34499e08e303b82e80eb72493737002e0eb7e5daac3022d1e443d80a5b612b1fc288dcf0ff36e21bfedfdf87feffffb3834105876fc1a1e562aa51ad59a6b2d75e1bb1b5d65a6badbd2a2d7f43cb0d37fb916b1bbf6dbc61a9a0540a4b05d9b0b2b26223b66165656565656545c5fedbbfd955180ae3c150180a43613c2c35b0d46023666161616161616161b92aff36bc0d373b4f0db6f14a0bb369b55a988dca6834b211ab8c46a3d168345261f91596959bbd466544a5521941494149b111a3a0a0a0a0a0a0a0a05c9595575951b9b98ba4d8c623db78bb5241a9d495ba8268303131b111d360626262626262a282f22394d1cdfd83238a0775f19ca8385161233e3939393939393939b92aa3a76144c3cdfd43856d6cd2ba6c5aadd66553526bc425b5d65a6b5539799313939b7b87ca884aa532e27dde6723f63ccff33ccff3ae8ac997989434de662a28959aa92011c7452ce2388ee3384ec5fbead59b636aa226cf444dd4e4e948ba88bbaeebbaaeebbaab525f54ef8b8e8db956abd59a361b866118866118865d95eeb98ebb190ea98ca8542a2354a394524a29a5f4aa70bf71f74537c65241a9542ae892f292524a29257d8cde178d493fee124dd8cabdfdb76c66d98f97b276c92284c9deb3ef2c832f59673f2e329f9cfd04b9fb8a1ca0095b4518ffec073bd5a9fdd82afb59390cf28c5d017b0b38d309a04e3ce1e6169848d6f9a003cb57c530d48b847620c61a30c1fac1ed9f6d5dc49f22511ddf80e1cd36e2e9468e37aa86b0841086000408102040800001020408901c9c0b97d9c6d4de8867c02588ddc71b51aeb54f93e00b4af4117b74cf10b0f7209064ffe3be91b8cd764f93b0ae7d4a3e7ffd3c127536a2fc26097e33b2a934d979e43e82b196a2fb52bc69172cf718ba318433d9e73642f26eee225f72730b8d2a26c2bca7373750c9639f899e7eae4f3f4bef8eba18f5e688b8e4e67eed450dede9f700b8ed2191235135002eb34eda6eb49176f3c265d6f1cda5b3836f3ae651ba19f2fbc67174469d0c7b936ddd135551d53d70464a16c6be85b4100c978deabfcc567b732d6a5a7f0eb9bd66557433b4ef6e0e4de52a954a2557703c18fb15384dc2220dc620bc34e00bd63e2bb8ce4a6b03b26ac017ec4300613059b3dff8cd0a9621abce798330e962c83b8410ae1355dd63850b9d077b932ec67573444c6f7669671dcf9f9a168968128639cb57ddd3249f6b1d8dde5518c3d9ad803128b24c3f760f24b99af6f19e7431e8cdd4a49b315f8b249608e72c12bf0310f92452f69b2bd47e18fd35e29d5776282da766bfd15472487c230ef9fb8dc41886611886612a954a9559e01ee04c0d4f77b36874ba05ceb4fb07b1dd9bfb876812e6afc2be76312e0ac391bcd43dee823de97f84f55021354794350247c5df7bbfd91bd187e873e401aedd8ced5b24ea646cdfb9e469d45a47a312b743649f8d54802fd87b364e01c2603f2d89ed9eeee99e9e6dde20eae5ba187d73fc96d921ac1014557354d1802fd847159ce91e7bd8d9de81b18f538847bab8c2988cefd158bf62d17017cc6fda05fbcc65267565d4f22b52ac503354ddb84f935eeba13df5fae841c0b6c7fe51503caf219ce9ae4a0e89b7bf21c2db6b9f6def7533e8953922ee6eeecf6274dfb7467687d8ae100d5541083144cfcf10d54a4814405800180a89c207f60e86f654b3d1078e88456d451a0d129bd9cee61c5c68229be1173066a349d867191a2cd85ad981e5fec1d8b74fc77432be46261feb60f4ad416ff4d124ec7144dcddd823050aecb18fa88ed91efbd8a3637c744cbcd9b69b0dc3a1d102f763994f051a05c51b2f71d9ca6805f61b013869bbe739cb03887c247e87a8ea1cb0d72c8e88653c9edfef38ed820d01c2980fc63ec39e2018fb2c83311e8c7dca176af6d7ae11d271308c7631fcf69536629518164f0c832dd8ad21756a0aa28e298960c208491081085310415e1faff8fd91a5c2fe14899a5760f99bcc3a1e369a3dc4fa479322f48a50513423c903cb9691d87217f959d00116a0a97b4418f95956518002a9f9e59f5d0b583ed7fdc0755d8cf8975f1ee36f7fb9bbfb8a2679f41574914fe567cf5bb053588ed41afd8f21ceede3f60decbe991235fb101fd231415de2563837ac226d04ce6cf1bbfbdc52907cd7bd6633c9edae96e33bca87f770ce3a4ebbc847a5260cc79df22cabd547fe4ff2234652db8a7b1dda575ee26e77affc49beaa89d8699ad466c87e5a653fb9100dcb59233ff909d658d94158deddcd6aa10e026a1f1c644bdcdf1da449b28960d929f8221f06b586bf0f91ef371d83d3313c513a13767bedb279bb397a3723fe85ea62f4c7f71eee83a766f98e92abec5a70a10ed2d7c74ec54ec54ee5166ae934dfd2bee2fa473f6d9de6e918196dac8ff5950bc117195b45b07ce9588030f2a5943c6ab0949f5b7e0bcb2cc017f9b975e0859a7b958233d8cbef23d4e89e88f5c718b11c11fb8d36978d3ee4536c84c4f2860a8c23d6e015be922f49ffa39a92fef1a30c0267a047d9283076714793ba0cbe4879b38d1ffafd5e7fd92f0835ab71a3860bec5ef0a7df6bec0ab6130c3b0caf942b600d9ca2e63a7f7a3d82338d2f17d6876d8bd0f6d0a4eb61375f879ef7c57c7f9f0fa5f7d0311005420b5d6026b196ee4e428757454209a1aa6b015fe284f32291af4343082184f22ff872098982e6afefa16372f561e45926b19a42862adfb121178f1fde9dc119f9fe5ee5dce616594608658bc7203f7ecc0cc60e4663ad070c3ffa95d1860ceeb62390c1f0d6884f7f8b36cbe0d837cbc4da24ef21841042cf8a60bcb94f2bb95e1b3238de9f339e7a0067e2cfbf80101d93a30f9e3fb3c49b94579c1368d224fd8f46b7f6a8f183b0f361845bc6219ee01861e20f8499a72ebeccb89b6dc8e0d1142adc525a35c79f4363f8be0ffb1fb0ffb0ef7bd16f9fa8c4c4e4137dff5dd8a4922b7a1d5a45fef5f23dab22dffbefb74dda29330307fc25009668f8f9322ee08cfcd9c2a2e2f389cca4812ff33f3b4f4da2e14e25a0cb7c1527f33494e7a9a505b8e4f3f7f4374f0555e6a046fcbd0e5d628da85ff29b5b93a7b666dae069f2d29adc796a520b2eb1378ac0dfd71e799ef0fc799a349ff797c521717d179ef7592743bee779ffbd0e7d79b606c9e3885845460beebe7bed256bbea3a6644d583f7b1a3a18fe5996d53aafcf01c01bfc5e5aef3f9be5671fbb1752087b37b76029ad8d968aab15e1287bc097ec45b85a921609aeb60bea70b59c0e87abdd9c66c3d56a2c0d574b7d28ae366b1f19ae163b82e16a2fd585ab9d3c13572b638dc4d5ba0df892bd0edd838b6e0b7cc95e462cba2f544622209a3a08d33fe714614c1bcb26f56f2a5c5f574d7512f4600921e8d4744c2c12051168848c34f1d4a448c33397d915e50542e4c1f2b3ab65c7c479b2d12e72a7ce2b89930cb09438d826d2748c0e9a788a34dacb9025af8799376a929c71c6ef9aec081d3a383ec4b7c6f6a44ffb1bd86713cc7cf706ccd17edff77ddf7d585323867083db16b5ed33d5ee0decb7d7727cfa3a78f4d5bcdf65f2f5494c7eabd5e4b337b0cfde7fdf1d0ff2250f40f865813f0a74ecf0e2ea7880f085850c55f426304a5ef49b892dc938e05872ff06f6f9fb1c8e817002ef80f0eb7e8fe85e7eaffd67e97b19079caba8e3ee096507ff4d6bb9915d20f84dc2ff88b77e87709766413cc30e402e1aeed24e24c35512a31d8ea0e125e9fef2083fe288ea2e5e8497e4ad3a18de80a5a075c42962c1124d34b184b851d7b828e5f51cf79da669de57e9514e8bdfc5e7342d7b4dd3342d6e525e4eb5af7a4d504a29a55dc6695fedbc8ceb5ecbb8d7b48e8b9b949753ad2b69826a99573f8d769b4697a05d4729a5947ed5ebb2fa79dc77da679a5bf9979d9146ea24a7ce451aa9ab384efbfe94b8c5e8947b4da34d50aa518e524a29a5dd129da6691ac7957cf5b392ac7e9ec6699ac6d1cf2817b5295ff328a71238aed3344dd3bce4f344748926344dd338ae2bf9bcef4535fbec7df67995d2cf344ea323ca754ffb689a1228a59c4639fa1cd5a8c74de396d08926adebb2ab1d6bbe846794feb5627124dd3b47b9f7eee68898e466936e467cae9fd208315da252eea2d7755dd7755dd7755dd7755d97a6719cd6c1a0b4aed3b44e139188ba9e2c48057a52d791681a1755947baa048ea39a96691cc7699aa66954a39fd18c769c46359a699c0d9d0cedfb674629a594669ca6659ca6699a46356e5a20528b5e0aa20e293970848c59d682a3971a937dc986b2493e553efcf7121011c6a5cc70025eb76963c7ac03cfb9433ee1737ecf0b6a4648c7810da009cef4631f691c85723f39993fa84ff51bc0991cd551d1441f7bec461158bed6cdd8de9f6eef99cd810358ca321f8c86005930867dc7d69119f69687e83e508eba4e92fecc220f9cd1fe4ccaf939e299699aa4f3ca0b7f6cdb748d13f5e6c7a4dd8cf92d7fc89bac9331a7a3dafd1ada6cb061150205552250e649a40e9232bccde4a84ac0d0d42ff10623b510432336a4bcaeae7b5abf44f42dfaaafd25a5fcd6beebf9f4e76bbfbd5f42aea0c2f43728582a275adbb7cf0fb6c1fa4df69b4ce495d41e47d5e4eec9b04786e47317c15813e90ee2fce692dc7b6f0d1d0f7d43bbdf3ef76f37a2b2cbd2c5e8ef7efbbba292327a12cae84445f7c8745fbfe4bd875efa27f1d25fed66920d17b64b564390ca72b7d744d9df10e1ec7be56679923bbca572b30fe1940b516e96c1d96f4697869bab77efc9bd26b7bbdff5ea779f4bbe23a1df5d961c7dac7433ba17ddbc3d7d15c8653662ad7de08b8bec69a0279c80301809fbc748b547f5ef98c2d8efc87ba35a4d1555c74c22ab944e86dcbedf6fb24cd3ecec5a486c8d3c55ec311eae058b0d61ac881069a57ad2c86f7ca43d6ced6a4d60edb32ef98dbb60af691fa1a97b220cf699f6392416fd0d1116414cd2185bb990dce12d1f7228b25be1ebf6bee4e9e7f6f96e4a17a3e4e688d8f371837df7c48a5bbabbbbbbbbbb471d0f2db234743344df77c3c1710010a5f6e12ed35f351a527f3a188d69e85cd5042bc0526c792b3843f2d34796f363cb4bd715fd77453550f4dbcd5d033c5f23113d89c8bb24f73bdacdf0aef4cf647ad5a4d6e3d812b5ba94286af6d56ae5590ac7d9883feb73a393f21c4098f9d5b6d00e7ae0495a795d688173af5c89378314bd821d7f9c484b3c5bb4ea8f8c8c542fe22a1c5722d1ddba19a27755c7c0950cd195a26c9565243a4574786c2c4444ecc15508a0cbfc58238524864415fc90e10b8e4bec4f1cfa812ff33d3a81091006a8898c6688ba17f3bac837918b44ed23bba93aa3d4ebe88874747474b4d7a13faeb60e0f7c893f4cfcfc34918ec213464e2001cf7f51a3594d9a42b7572dd43ade369b27fec41f1d1d1d9d1e327f43e1361b71f5523716a04b579dda854c8ada66c0f3e711783e8d1470af5a08becc1428eafc1c5bb8c6f5f4b75b43f438223e125ba2dbab12ebd608d17bb7165ac8e698c251b1e85ba7079e3f79463878fe8ff9221ce0f91e6d80e74b4744bbcce73223bd3a8267af268d4a7b842a93648826cde71a471f38a3dd17f4e288f3331b312b650f493f003584a7fb753d142cd56f9a3cc2414897a8928711383258b3651273ccdd5dbabb4fd6759a2cd67cd61658d1d43f2f9eec3a5d3424dd8cebe577d74bec7a497f7201966018e61478badf489b796c27f1cf761c69d97242f5ffc9c2ec6c9aabeb93d7386a66b70176ecbbe6dda6938161d864cdbe9efe45b1c6b00cc3b20bcbb06b88440c4c5862094c58428cb11d93355e3548c0087d154651a84f804ec860170980a52c86e39c020c4f92932d62b20e96248b99b16e300c8642b2a0c21be5289d0f5710ca547f7799924158f00b36e649a652344a4c463c227da2469c65648874ffa8a68f2a48c6f538e1ccd3294b2132d5a4994ab1583e75d654cf10d1e71984b32248542781005132e52829aff2d083f094c192c5557a69694ebd68240bbab05a13aa56190b4f2028f353656458c84097f999f4a954ed9280a6c923c2e48983e7d3a8f4f2eca6b20ae1842d4f652aa72d56866522969347344939925284bd94dfd9efdd6699c23278e64a8242a1ee94ac08339fc747378f6abd19aba5badaf53c47495634394f84999fe249354bd5ad542aa552b55a1be57c62e080fbd434f27b1a5e6a958c97bae5a89ab55027479d5037e219b4dfa4f4bc0feb3aeff37e823449665f7f7e117046f4f3a70b9a078e012c45d60be03c4553f38830f37700a1b5033cc4039224119024dfb30d80241a3d4017f971c7a83594ad462a5593b4fbd91648927f91785ade62d1ead1a87a76f1fc705ddee7615df779988a57ad8af7f2bfdfbcfedaeb138ca68133decf6f25604b61ce39e97bf43def3f918501b1e8b7130d1b228834f10868062952dfc322be9fdd0fded3df3e6bc48ce13dbdb4d6dfbe2abadee469d27cfaa29f4f230470a6067def331caa3662ef6678ff79ff7d6f632a0ab93148ca166a8a172ac4f36d744c068778ba9b11bffb41ec4d25a00b8e147e3024073f34e8f9e8df2802d7cfa2ef7eeb44df3c05e1c7700949e0c11bfca650a530c43a300b15c511fc3d3685ea331519df7bdd6f94eb8e074db3df6f1a27fa29faeeb5df362e7630bef73eac93e1b58844572546e3ef7380400786f8bb39624f64bdffba96ee85f7dd3c6dbc3b4fb547f53eab76e338918dd8c32131fda6f15e7a2fffea64782fbd97de4b7b4384650974e098fa1e47cc3125b30e9c6193e48d3ff246f99fcd3c99c872d13c66d008a84656098939371209a110a110128b796a9789a56290a6e1f17e3707e0c526e2e81315c6d49c4880a5085d681a4f222851f09e90a7139367c7fc31a78d37bd875ef634e2842c1b15fb2c7399a2d49250db51cbe96cd46ad4526a336a316a2f6a27a536a8c9eaa7308242650214f25809ca94742fb613eee404f6c907cf27320af239b990c9e664c19407f14fa6be4c6590264d9962a466f7201d935bd52a38537fbea7b269535be611929f6f832b431870b722ccfc4cb998b3fadd5c47a3ff2cfc60128642b2e0036fb0218c9284fad4789a9f912a8b914ccf4f64c29341e69c382b21d24573f13862a4888af4f35086c5361a753170c0dd6f3d324d9aef02be4cf9d0c620cd7d76d234699e7c525e9ab30849e8898c82f07ca01489f43f1ad5536a6ef4a7c6204d9a1f534eccf9f3656abeec9142f0fc4c025892ac1a904634392ac2cc9f33982fa8842c587541f154cd084000002315000038140c0644a3c178288b535dcd0114800c81884672663a92474192a3200e0308110000000400030000080464860c00f15574c39282b5f117c87c884521baef4cd67316a23120203acc43381a1707cd4ebdff2ec356b11f98f8bb54870108f72e45faa5756116341a717da3c9d55f27fc7a2f2aceaf0df9b692974f426938c16ca663cd5f4ca4c56468759f92fb7abb801c47d1e8b4a43e76da9a72cd70ff5a9359fcbf7066ca3d845788994ef45a9b877cc2946109507e67876f59599423f3056b9490243415d456f44296e75faac4c4ba7dffa1816bd722ce29a58ecf9eae4391eb8d9e350d4e45348a915d86e9d1fd7d825f3ea9059a2508fbfb4ec901015443765a1ab8307b276dda42a338db62b9eb72f43c84b216790af1caacad850e8623b7ca5a146553aec69809828cc9e4770b857573223298304f2b1e600d12ab9a367c9254b1be39ced81a0e04225e6e0fdfe826ff4fc1b0efc84deaa3e6d6816b28b8d3880ab41f47d049b5367d03ab74ea5cf767cf05aecbb3f8cdfd0e4c2c85970729d663c06750bd946ea1d114f0e4ecc169a8c3a12bce618de48336a3624b188b9cb35bbb1ded9dcc7c0bfe23061eae79b3f4a3d294004b686243a9def891f9bb771a42c847f4edaf1d12b59675f156b87fc59bc0f575756c6054c8b837b5759da4ec37e7e2de5db361ba3fbf047bec875e96f20b9ad80e8e7f25f4ee6cec6816a1bf835c2ee5457167c0f7b2285b3428885444639aa1f4893c705058339ffefeb7a79b3e56b027b703459203b52683a83a0f75e9eb78e65c5bfd7d763f8f157618075428364bf79b1289a990db9daba20d3f2a0508272f78a5f2913f7784b3da612f4de8d2da67b8bb763738909e44417c523814736483e6c3c0083a3f469a494b57a0e88625844d5b2537ce115c309c7cf88ded6da10b53d0475686f48ac76194320d9adfdcf3f4a960c06f4db75c7fe1d0d17d81a2a168fdc799fb91ed22617d2b6833c947395aac1ddd6718fafc77673e2e5d5ba48cc57223569eadaec40dac37d075047a2abc4fc8c9d74d40c24102c3677dd5335533460c720517ccd61ae6490fb20de8cbe56bc01e4e84af591e3002f50532de8e34a8e4918d74a19e0f21d03352b60d24cd5fa36ef510a4fef2a629fbe4f4b4085466222212b7ce817bdbee963ed7b8fbb35c26f2afaf3aa02c7acba0517f1a811535e843f79a76d7c682e61d44219142c2420047b7885d429cd2fed3bd144f0e63163a33787e2954a373248afc0885e6c86f3ef8a1e16b7cf276119b81aedc842665ee1944418adb295f67b3a157e5542673d6ad0db6416fd0ea450a635798e37670c75e181ca342984a664e0ae883f14cbdb67951e6a473180acb8d2110316b89963683741b4f0cd10d1eae58ee3a34a55afd3eb85ba8625f2939743f496ad8b69fb4c61c12dbed15c13f1ee17bbc2f258ac69a24e77eeeeb7c1a6145729f8a157851a25bdead6186d0d855ac26852756910439de2241d3ff47c6fabffeefdcd59a2ca19a3041f7cfd6a7550077f487979d6c56987804987ac7067bb7965844b57c97d10266e0d6c98c406a98a538dd54c7b4678fe4ca176f939fcf027d38d86a2f99ee458988e23ba27ce11ba9eaaf02ba0dab4f621feb274cd7b61bf60ea510f4567a078dd9c517be2f2aee163f8c5f0fc2a24a0f3ab7f698a407c10895b36b01a5317cd4a1f44440e8844dac8ae1b92d7484dc387aa3ac0c664c9a6713652cbd799ae84b6307fdd33d854c37ece5a621b66901af377c3855c1fd109141a192bef12571297dd11b7393a5b7ca9c895ef746044c379cb468d92cbdbfc2505ca33b9d87111ee51da3b1fc42e857032d939e6073d973209f0163fee8c5e6b52657e4eeea9eea0539a88e6ee612ba73cc6061043cf72e125db9d123833d95686c229a596f2f80c06c71109e28cfb54de7fbe19dd205f697a9c0cf9133619d3313c38cd442051d05730533a16d174e0008563b4b84a9fdc6dd04422f5b0606b05896a142a63506cdb4eefe1bc55a61c087bea2bf01e4ec06f72bec2db940214c19db2fda092c6c8cf88a78837ca71eb483e2b33ffc5ef3ed2ab0bc0251b943a85ec18af93077a65455c4d05a19f1e916d4dc1d67302a8b1b7b7ca322afe4b4ff16edcac5e0aae3bdf3c36fa5dc93a4ee9fb4b9bf842d8cac7967ac702ccc59c9f27cef29ac1fa63a87c220893f90c4c2408425786b6812a21e32571b1f9298a74535a7b18761e054ef524ff2ede3ce4610ef34ee3cf529bfd97ec88d6514e1010861d643a3d937e15de87d6734b79200fe63716b64200de9a30d4e3bbeb9c8f5bb8a33efa876a4b00033824f5bc1f5f4dc8539160c8ed7850633d8ea346e43724675581fc0b9e66df1fa79b5e4d211672664f9c5ed49d383c15c2f30da6995a75d78f196dac1f2067dd73c84510f15b24301071a2ea9da0fd9b0937ab7e864faceb467b9ac13709d5b25086ff70b9886e46546ba96439161ce6b962ea74115960cafa01baf856c7abc03fde711141cb77a464209d8095313b4a1b52d5d06572b1dd95395d2514ba29f2525252f18b6baebb2ae77367ed75055af6c8e1d1422613e80be3bba82ad95fede01bff96ac4363001b980f5dc2fc097a266f64956638a5620cd0ce64f89eb2a5c768d99cc6c033b984540eef0ecf1f166adb0eae6fe094cdd6a56f25a1941ffedbf40c6967f0d56615f4191904974a1fa19a275855fcd2cadc306b50a82566867232444155d64cf1c9811e91f3118bc153fe50f8da3c73866c5cdde285eaeb674c72b588018e42ece0a2589db63862d71aab912e7786e6d46b1b5b18a1ea98ca40937a6812f050e74a81a0ee48a51c8b7cf1c4051f85373616427a307f23b7b892bd14f28c73778dc2801a8c97c2ab851b6f68253dd3c5b54367f21344e528f247b76846161ab81896570a57be2f9c0bbf7c3bddb0ec68701d78b573622d6df09a8e9e6265142994e285a9f94fe54479096ec302a05022903674e00bc557b6d2957f75edd734f82c020fbd7dbb9cacf967996c2f02ff98c8684aa45504fa3fb95589546c3095cb26c9251f11d82897c3c84b09dde6ad1ff43ef65619d9246d1c4e1aa8f58d3f0ef6c2cba0721fb5fa9a0109b179e988b6fedd1366da724f99f0f45df55f5878cfa4e39c52422be250485c636c12b9c6b8b4d140dbbabeae0583ddba0e7fe939a9c6345135f798bfbc675a97cc4fdd490cacadbb790a54a62db0f866c4b58fc2f950e00aa71c62e1a39d6d3b1d3fda1aef7e7dbf841a2a26c72b227e831c6988829b3bfc2df03be788d5183009510a01da47d123dd1e2762de0a22a3f399e400dc39e6da837d0e0afb94172aba35c7a16cdb9327d29d7f00b220fa6aa33eddf9a7bed9ff319fa9518cad20eeffdfedda82ff4f498877f4134ba4dafcf505e90b69c84bb78f7ee22f599e1382556fac8fd9f5f7ecd1e1ed39fc78228d79734f352f303500b3f29d2b028fe43a709ce96332928aa51ff7ba1dcd3ae1bd722f918a49f2965d94a67738a917dfb9db517b00fc4686ba7ac9b34fcb7182835925c26a03b6948d556568cda2d2badf8241b055015b5befa7bec815879a71d3edb348c26ee9ef659c5c65edef46f597f04962f8a74f31a64bec72fbd15f317f56fac8ea6799c72c744a992cf1e71f5855445516942a0417e136c0623b98e93f7a1ccaeec13a98ea3c873240272c97b12d14103437463d731abf0883fe71751f6368a5ab79f1f8011f33a6c9a4f6ea7fe4a65a0b13c7f450012657e75b0c29d23ca6ea182cf4ea94d2c07cb285c6b5eb667ea8e0cfac72077fd5cb351cf6c71f7c5909325c04a6e1f709c5c0c63451f120e0c45671f3e6f2160961e94ace87c18eec93633003ba2befac7a762d8282bdeb93774a49abd4761f28971fb2cab14bba48acd72b26acbcb5a2ec65db7a37507530f9ad5edf7a4516d8b42a832a0a507ad88b44afc08cddafb5fdd40a85e9ede0d9ac84e45fb33299b54c41aa94e9160e34051bdfd9bbd2670f17f622cbee8a6ee5738b5f165498232d2766da020bb07ee90d6fdbd21fd2a97080ad741bbcb80b64f29f418f60c62a6e7559e6448ab4df93a2ca045eb8c6ba75ce4a8e71755a0eecd4731c088d32ef89cc8e842cc8e615ccc04ed8e51310be083a52231d89637a121918503c3e8554bbd590843139c2e521de80d8c3da09b5eda2bf2cd25bb382b7acc3525823df6e971894dd33201b6a1e32a22d7235b2e529d743db841e98e7bf7edf2c4c429b5adf666c986ac2373e4d0b1f22a383c165aedc8b777327ceb26ac91b81728956ea783a538e040738414691550bbc9d5c250fe02d337ec6f32ee9a5c31866016969a6dad665d109be622704a2cfb362f2036feb59f0fb515e3466ce66d67eb6aaf658173e71cbe05a1f4fc73f90b02faeeebea1ced5d284019b2398ca1bcbfc4c067ea1c53f2f8eb34ba05da9f09c65ec139afacfd76d59083916229c84a276eea7e18e74c4a9e8ce43efb60543c4affcbaaa0d681b442bc809526282f79c956e68b5d5a009f557f6db5fc5593cbd124d0fbeec4dd7a530ebeecae98e7d82f7b744963018d394f366e38f3fa2b84457a74c911fce17f31471a9b3784ee91862a41c5cd09a558a1d186258c06bf7938705687a33024d93159c0b6f4555bb69806aed278eab7f6841292712dbe9edefdce870e66200a8c360b69858c7a4bd9896f401fd506ee45b553546ec89ea376992a44d5073af4c261c05a5111f7db4a847b95f77cbc3bcfa6a62a00b42121e6dc959ce32cd6c1e92e403e4dd1d9ab055dfd520c095189be2b2215bfce3cd6e8f0e576ebfec4e0ccb5035970c7988faff832b42b48faf936e3ad39ac12157b6c7adc6fd5e9b61079c9c91f14319c2b88e1aec790edb2cadec2530d16c31a4b6036a0040826bb06bbb0719f1a95152a5101e8312ba6eddb4e6c56403195b5ee817bf9551ef7cc1bb34e2a284b335ab025715b84076eb97c07ed7de576452ac51f06ed23649ae0f82372cd09f3bb056d71519a763be286bda420b43de0a8c51980ca7882388a846742d7e41d28a8fe8e152505fec7a8a723a8c3a8ea0f2eaa173e0100b58e3a147b608f8392713e60ceca22acce80454257295f9910a51618e3ae40f80d43e4b8c32f61bb3f89d7833e1816205a85c2b430dddd4cd38a46cf09a08b12a8864a18cae7cf8ab643bda57c31a71f6f9795a4cc0e8db3f2cdce80ca3b634039099cfe0daaebd5561c33c74698f36b3d8eb65d5317ad4ac958b354f5456c56f37ac3bb5f5457850a5c5668c6253122273c66f9713178683622e2566e185fdd88712a7a8a31d90b19839a8824edb57c90838c93ea930cd6444819ce346a19a3b58b19c42d573396de5c353983dcaa672c3c8ccc355c130d6ba4e17eb54a22151be417c23980882669be2f624609868903ab09011213eb0b3ac807512a0e32005fdb72e829438cb583ccc37b93402ec4fa0c0037bce6c4047644f4f5927f304a9e63145d4358d0a0848d2fcbfa54029355b885f4ff14068fdbb1b50f1311278836e8695b482fa64852d26e6a7116b3256d138ad986d34ba680b67a6b5ea9247c466a563c86f4bb0b535a323fdba89f3820d92fe06bf70c39d20aa079d074022fef1af042381df2936d2f8ceee67c1f36ee5dc7e2e7467044a273717ac78128dc6b0f45ff761620bb045de5ce14c022a75bb11d2db01ef710eeca04e05eba1562a0ac7f54e8c7c25ba27ea00482d4f1c0cefa0a8a930b6fd9886796717feff002e5635dd81602c9899f82b97cb05e87fb0ee8ceb52e75126a07f4fd4625dadb21cbff17f8c9d19702206c7057a82f47c502aefc85db4bfed1738ad0e79a3d145f031c67c0d19137aa52a690d0972e0c81b9aac918f89f84c246128cc0347d0851435312755b954367bedeb2a47c1122f196a55e4598fb628da19c5caac755e3987a1a9fed6672a90ecccfe8f39ee02b76d5c35334f0e2d7db30365a5feea4b85762eaef96672daa6ad137c4b047938b743d5336798984c4eee56e50e4759ba12e5815bb36df1672e083321fa00bf2f02e4cde9385f186abaa1a2724ca607aefc46b6af853c41f5d504c563999f3ed6015f0a260676ec381d999ef01b21c337ad76cd64681c0b36b6ae88830d1587c80441a899bb71aa9d783e66697927ada2950807b2013090340340c2096d309cbb7ed7f34d9f99a742415ca93e7463472f1fc4eac1e701bb5287f758ea6695d25b46fb44d840f2ab8db7accc145da5ff2eee7ee1730779d47b0de739f5270b8db1073b895a236a83c4b857b94ed39d813788fcb82486ed4d163bbd198cf4c3f1172fbfe2bb0c678729aab0994b53ec749d008d77ea1c9153dc71d7b4c61911ddd624b33bcb2f4897a82c7d6fbf76aa4843e25ae9dd239fcad4c451446eadf066504e7ff136fc77fef01bdc259a937637fe53ab632efcd3bd662e5d008da1e2ceb6015ea1606d004ae49089b3585c47f758a4bc6d5ef6240915dbcd6b288c64931cd3c2192e9e69617164fec8c812d4bdf22212867c04aea13e610edad3d316a58f7be73863ac1c9a7bdb545974443c01e67d492cccf66b1d71073aa78d9539d2059d8ea6b6fd8446693978227fa808940cd1e94eb67027444b02ca6f2e071983fa4e6cbb587ae0b8f9c52a49aa22ac4c1696d91e3684cf26fd32c1903d4a9e7439c8868748bb0ea29aa858995f3194698e6dad3e244bf7522ede5f8f69ea0f10984f2d9130bb22ac8f33228b6cb7256466f7b6b7fa6ec9dd74ef841f8582514cdc4ba51c6be2a788ad48fe4b1cbb033cb851f4b83e3d4382be8aa8d0e0e4be0dd5420d86a30d3a5e7575beaf8da06ee1d2465dc4e39e6a1df59ab078c0a9676ac189c589aec6cc7beee4036350a8ba37162adbe8dc431dc033cfa27b9fc5d4332d65cd59d63fe05d0e3c56d4c01f42a4ac586174f4a83402f3710e6807ce9a551873e9d255636318e5de5ef56cfd78e0192ae5f77e50f887333042112e9bd71f738c29c9507f83e25b3604a91fcbe31701c789e4fc544c0878646e16be31c909b316c152cb4fe5a6521493fa79af62d053965c32d464ec590d74532686a29b3687292623a25df38c4c8350c008223c2cf9a8a52a4b6e5baf3b2c56c9d8075fefd2d9da2262d0a629b02cd943d71a6be97e9579325d37b0b27b48413396da17f9e0a73b3149369be21cbc9f68e25b45a95b053b5ec29f9d94c42be943bd973c0a472a27d6725471e720ca8cba4a603accb9d2fa6dc58f8b52473510d99ee2a297e598d7b2751f27c3a1633004c1dda161493a616d224d3c994d136fbada6b4253bac3dd60e6809d149e332819e69526920190ddd801d032882a28e3f28efb9115a94371e0bb454fe4f6ad50671c84610d0069421aa3790689db7bdd3ec4c0cba8b1f3335e4fe285bccbb428d0eb6372bba73f36704dc25342dc6f07bbe7b314fb0bdd5257c9194ff2178a27790ea5a4f1a484902afce31217677b8940fecec37897d5cc32407f35fa3bb4ea148400338aafdbde323ac4c61d5608f8d88b4f108ae6deada15cc1f4791b4f5531a48926cb02bba4daa64281efd0173a0cfbe595a369ff51c2a4fec65ebf7b951d48279162af4d8889d66b81d0f2328e0c94b804e2c7362360ffc1ea4d95c2c7fd526a6697306f412b702df6ba47f5a210e0a9ee73dddbc49fd1446064516defa0e96fac6d2e5bd955d2cec0a7acb532fcc9f4c948be2d245e8a14853e05422437484137b8eef3dac68291ab9eb35e8973f42439f3b0034c9fae498f187a1e1966f34b3724b036c1b59eeb0f6a6bd806e4510186ecfee30d75bdbfb4abe33cfd4fdcfea1ebaf6f0cc8a90f726981d7e5a4b5df386fced8e422fcfd70af7ce11c88063c900f1be3ed01dfe8521a2a7003c10ee2cc5b221ab6a14404cade73e77bbe5cc81aa95778c4125e90eeb84b62c0fb8f7809cddc42a112cf04c955ab2af6a63d569b341fa5e437f61a993bb78c0c904b5ac2233286e2fd5b342567b87d1558195ac9e3e324eb40401a950bae283f3ac7e4699fde24b16ca38be938c731da8e4687b53d0fa318da4ba202bf44f5ec4f14ca96166f4b18e9160c3234a532fa3444558fcf39766ca170360fb1417626b4213762bc15fe53bbb3d464b77367bb79b977db313309e8a7f25083b767a44e7d45ec595e0e9751c460102b1081eebec6adc19ac8a18138eb066a8b1337aae87080defc44628ca70d6753575b96a3e7234999369f82286902a3c0526b3e725f6fab0ee4e147a10139df3f3dd45799b5cef0a187f7eb312ae9164e1d0c08cf37f0840370e334ae1bbf21627359217885b298a04631282e3a60910abfd0409452ca85aba2c835280548b9a3dfff84a1632f399af96cf914e6d5207ba21bf70187c8fd7395dba36c951577eec6559cbc49500042ebaad12a2b8f1d15da14bde7e29573e20a6e22a32dbb7abd084c8cb59f02a912e37c28f3cb46cf48f40d667810c6bae553a963279b9a917d545e28b55d32aa69bb32c7f2142a4bafd58e6a2e338d6b928d01334f78bd2c02959e31feac74b9da5a44f42605abf24ba647c117335bb3452d62b75e52770cb751d1ad2a19fbaf787d94ed3f94db31d693f04555ed3afbf0bcf85594c44df674040781a5865e04e8bbf9f4de16c27c062b299b130b80ea3a89c2e51914441432f76177702f95458f90f74193ce1ca69d5993938d17f39332e0745a1ad6778a081c754071fcdbc7e76dc7cd37489875ccbdb2964734f2c41ff0e6fed4277afe31c927ca140cd41a484a4e1866c7d7ea0ccfc31bd8df3eb64abd9d2575827b2414076c4f497d0a8829a57fae97b806913dd12105a27803a1b0a8b927d840f83994cee873e971ca699a8799a4619327f96c1f362b9b56c3d8547ba92459069390efdfdab9a647953ff04a096858f5ad19ad772fd0caf23ed6f8b683a3b14bd213752daae8c4b81b3adfe8345bf1d67bf3ac50016ae1cadfe9816f77a7da3f578fe0c2415ef6bf019b302cb97686dabfb9554225dab6f6b7bfd74bce05a84dbd49d962afe306505a07b434e999631d8e2ff8c15d8ca2ba86848095ca9a0885e3c7a169f1ddc10b0f4678369817eb0bfe1bf7f297fa0756690e2a1d9713d8d1db0d25212f85638aa742a2c5c2daed48a42d47a36d804207bd38e4259372a0275491c53816a4a70df953e9ae7f09314889290fb40a9e1930e21b00136551499c6aa53a6000535fb6de3138db560b855bfc5854211976db5e9ca1e6c92c1dd564bc4db09cc597037b4a49fafdc7ee6e6afda63b12b18a3bd63a0739947091021d7fa11d9ee0cf9f2ca9c6c3c069b8dde0611d9943572ff37a7daf2d812d59dfadf9cd25e1c5bb61e3268f54214b445693bddcfcad4610b9fabd6f14894c01e1d1da3fee20d36d1471c058b103d51a93538a93f42f9164c2458f1f4d9da519226ac4acc5d3e8e2211a41add6ee86eb33d0eeac80377c203d7ac1bac48ac56272bcec40fdb60218b74a49c799c6752b40af944840ce53b78d89628a92ace322214ab4187fca0745043d45849d73dc81ac9402e0c1c84a91c628a76096d65a82bdcba05b94a2cfab8cb89627ade6a3c3daf5d130bc1284acaec4fafb84345b41089180775ac9f61b909d30a842ef5e6179977bef020785365db17aebc2eb6f942165b3b374d092f552a3e72771a1257ca4d80e2717d2a491be1ec63fd623fd45a8c827027d1d29173e20812c1ef54ed075c2d42160155a26d565539069d4caca77987de3d369488fcf8e61d0c4c306c666754453e3256aa1aaca40930a2b454f5040931405280deaf11475dd14e6c5c6b7f42f9e72250472e52245415ea4ed78be3997555d0138c68d754a8ae9935cc4281d21b44524388d9cc8a654f1e88106f5fb7c3228b5e9f08bdfbe7ff934ca4b57be7b8e50bf3696cd00ff80a7b1390b9f685ed81ae97d7f2c192d49059026c2d31f55a26ec672a005855edea4cfe7728f271f3603a20cf188d64e772a9a60f489ba8b93f4152798289643e6bd41893c9816d5a4abfa4811cdb536a238a2a563f3145a39e328454a3a6caa85d164b7bfe6096d05740367701e2cc0a087799d8298ee97f7534bba15935cf5cf73adfc97a86c780f77736cf89a9a0cc62da5387457cd860bcebe58846af5a724c591583911e8e310298fb90948abed17c6b9101b576896aba07161187194fcdb7658756704429bbcec8724a108cd2124da64ddb392ffc09ea84b698d3bc597ad1d5f3f0e40a1d150339fd5e58e57717deaa7feaa646099e374ac5b8306be4bd2981c63e8e01661833cf7963f9ed18bd65b279965fac8abcbdf59d05330ae0f80e60621c5357292e47625226445d1d1aa31361acf5caa413b0635b675ac60c6fe2caf56f5432b9909e1b1c6ec67508c47621718f186dd42531b317ed27cd1b51298e3ee7cf4ac5008f6f937a8673e35cf3e73b7fce4c85e81a5491d1be85aa863d159147b0c2b0458f3c7d79e44954fc4ee4703e57744ef685b7349e3d654a25f45631de496dbe1d46860cf45220410a15f0b6ee12d4769740c8d8df9c1927414d2da171f84a0d6157b1d1fa59e4b4699f3651ff5645b521066f43010de5c90477e0394328cef650376a3fd99d69592d19ed60ae5e69b0fd2c1057ac1efe9e5ebc8a5f19ed6f31e1dd751f08ec3617a1f8762625fd41c5e33fba4f805c9109a2f8d72513a44667d9c4472343af20f896f223c5bd2989d27880366f5bf565588972f54197d239f546d7a595ab8890cb728c79fa274260d59a6ee7515a5cc8816eacb208401192990f2fd7f8c93fe6a11a89ecd0c5289298231282e610de805483da9a1cf819301e5a6f32c4a0604cb0bca5caf091d1b75537b7425e6b7468059a7ce3628bd0fd97b7fd628743af6ad13a2cbbc3b0679c2c8964696fd7200415eb59f25caaf4dd2e6baaf102a3486a243082f627ce82f083aa9c841324cd5add0c04c25260dea10b33649d77688ca47b795d219bdca171529d82f503262d210e509723f76686c04a965966d92629582829c240aeea0c05f3c124a362cbdaccef1b5351322ec4b92d59647179c790fc236168be90b36afebb3ce0fe65947a2bdcb4d4c0ce89a4408a67120a97218d20c91c8c969785f2c9674d468db8a68e7eaa0faff20559f74faaf7eb4e0950147ead0f407ea9b57edfe5b58ddc721d6df4c15b719efe2ee2bcd10adf0f07a3d911454354621f4132bd14e68d42c7767494a0e7786094e77555932db49ec0b043647e10fc665ee75a6a8b3f10c88335ce30c7224870000306e01dcb03522913273be1d750f56dcc384506c3034c6f9d461b65fff35778f09f3784769848972b952f605c7f4cf8bb317e12997267f190b77801ba54e8d113ac4b79ea8d714f846f6730c8e28924e50a32b9b8123289046204df779453341c9a05e05813c494b23998a228dc9aa498cb098b912449b3234aa307af70d7f9005afba312a4fa0512a69cabf305b554ec6e48fd497fe9edf872037e9a59b4414e1394741f8054bbbd4641f9642dca08049d14e7247e93f24012b9da9148bf3551f6d0200063c63b7d83ae04763085454e8a237431412d3c3929b028e28b668f1bb281d7376b21f6bd4181c7ca674fc4e59ca5ab200d1287300e88d0a816b47fc08f22d2a262215fae07649c92fe1ed383b92b310ffa1ed77c42b2b68e073a88545d7d245787fa55989f54bb416de462455d10f411a98a6a7cf24f96ff49b6d06eee9a7374964852ac1c9cce4d307affcf6252adf069035b6af568cd448f44d8aa7a5954d8807343f412a61f84359b67231de282fd8f2bc738bde6743fc8800741da92961da0104df4cb576723d4ee1a5ef241e27a349739d595188425f480c2ac9573716c606966fda62b81e6c2168655a3cead19675ce6099952facbbd70dc1757b8bfaf3a894a11fce0b9d9899065720f7c4c79223fececb3cd086cd934427564ba8c269f8d3a31eee14629d4bd70471ad80ab18f1421c50324ee97c9cbd8375ab1f1899e74db4fcda824e090ec6489b0a7540131895b3ca11461b2dbdd7bc0d7d8f039326871ae66fe4074bde6bf41a0e06367e25c604bd2603cb6b8234228188f9a71d488a7a50a74d0eae48a90e15f5ad968f517888265f16a450a64ae684b9229efcbfd3bc6b9d68ea91859fcd6e309223f889c71bdea373da2550dcb9a69215ddee73dcb0b38a2ba878959e603211f140d03431e01e4586877c832647260c22f639d34c75b3d7572d472ec7a2846a0a69aaa1437ee76e88502947b71e0b97109a2bd75c4619c7fc2d557a2882b17e9455f80a160bbf32e0acb3c22d6fe9ee88efbf3836d1c246b5c9731d94a196880f4e4c09c916b5a40a3897895b7c7c4830532b035fa5479ca6193c9213fb8f529795f309f4078d476207f33d201fdbd832f2020063bc631ecc00d2051fb1c729debc398c75578576e0934cb63e67f182d43a1cf19520bc4bbcff0f524f25151a39465acbc87d458a8aaff218b463b925c892852fef597866c2086bdf4a36b7a8fa05d23f38f40a5642b96bb97f8c88388a0d638f9c6133979b937955f22dc7582261d92eb1ef40389ed4f2c6bf818ee5c60118d0a179c17e2dad7bba8e685f7d3549df6e729433efa240156624c34f71016f2b7e5479036b3209e4d4e0f03207f35a1fcb16b8a67410855a1579533d6f35575dcb19444fd1e20a2dfa927424641df175c8a29cf695826202685a3c53b8346e3449f894c9fa6252bcdba92285064012652be64e3219ab991db436ef4c8b72a616da81942a5cc4933b1290dbf112383ca5a3666fe0785a2ed96d2318d27981ad2e01d6d9206016315cf08e04a9afcc5a2c9bfb020472e1a98bca5017410c65579da2019aae52f78cdd0cfe5dc3e66458617c46f9767588657e19804506c28d51045efaa90686146e599e02dae1abbfab0e087147244348631e4230cff24753e24828600a3149947111079831d4d78b18edf47bad25bf44d8bae2534c01dbe7d39845435d69cb7acc480ce3ad017a9d36f784ddf898ee3364d1c56c499313cc1b26fde218291c0ab0a0c581024d8483f585af7b8e853aa3dd488cd5db814452faadcaef1c19273887069b7f19aafbdb2446ff15b0872483deef982c0b69085d598a59d574fc7ebad6f7736095f0fe0c4126639259baf8a122d4f0f170025f0796c00c9a4541c48dbba94b6f3b80b2a4160daffd3cea21edf5455c4f098f76c1b90905a1e6f06c0ba36e22f3dfc70a21804027ea825065df2be8fe0f4eefdcc313dbde9ee467344b17dcc04315ed3c50990a9879b440cb8a7bd000d885e5f499da2440c308b5180f1f6a3049c3cf4c63fdcaa0658cae59cfe4c6fd8b5f28a39988517e0a13245f2563aadaedf9bb213ff563c425f5784744054cfd020a38849f261794abc30c5fa0ca84c21541437135506f8071906138d3d2abc2fbb6c7ecde8a26423d5a4250d1afc01ed81b7515c4c75825a84ed1737346360f3f2daa1adae99bc23d3bd38f1a45e346a6a388f9fd25a14a237f14709d79ec8f0c5894cb268bcf90896b8f2dc520cb2e9437bd00fa6f767cc8cceb50275a9eeb399dc35aa1c78c1eb1e4ef5f72a1b56e358b14465bf583a1befd8d37605e29355008118b7f18d4f3954290dc67416f39557580ef42fb9e35f24d1d469cde6b17061e286c5137099a82f3818a544d92619413e8f9cc15cd741199f3633a82d8977a5b52574f65c90acc8d65763505a0b943289958e2a8a708632ac415c2a9d9deaca7f2983ee1ca23ddb79bcfe74b11f8b3bcaf729c0c19f732920e6b864a76d82865ef5d1506796b518f0e2c15ada58eb606e56b5d133e5d5c31447087d01704b32ce0d66da1215a9747df1c4aabb29c2bb50fa2128b004df8b96dc96958ae85d3dd52743d6036b897da4160d67303ebebf58dfdbd32f0155e18a5d490ed81370bfb5dfaf9fc5c45ac40e1dfbfe6ed60acfab164c760e26328c68738ed7c5812ce9498ded59dbdd64f425cdec827e009fc15c77325001035f05c7b8fe0f9c74a62f005e59808cb3cfcfed242e843a4fb5b83153f016d05b7b9363a58505dfbf0e013ea9da9d2e448d8cf4b4e3fa9f6db018f22979a09671c4091690b62ee3e3da0a36a969ea1ad77f3291186b5347a308229c2ebaa609548b071653bb58ea2f5218480d57edada859dc3c3e6f092003610ed1e9ea2ac49537541fac198424c7dfd95b9c153f329045421c7ba24e86d37c19bd4b1589ad778e2e29b46e0615763aba4f81032e29bffa9674a26af8f172130bba438f526b8470b27b0866d1955a561b95b6012188de32aa42cc956c9d5f50a14e6f7613c376827174e9ce7424ff6f80be46dd7fb85723bd66f20b54b1c54044559454b0154f25fef75993264effa23d6ecf65dbd19f23db0f3997974c4298822c241efef7462d393e40d64b83286e44d65e9242cea185ab7ffd17e2361ee08cf09593f875a14f51159246040df2a6567c60d00b02d661c3d928fd859ea59f1b7ce5fd9a587e139aad58ec6ac220d5c9d8ad7b0a97ff8095d98b8328683393f7948a716dcb9090b847239baacf70659d113d4fd6a482dd97b2aef3eea4e31d71c4fde1f1831370b67061ec94ab8c1dd8ec0478ea090a4e4be01309c149012cc521107058e2a594ab4672ca250987402692f05255483b920204f0fa3c4c7e965b01d20c0382286ce3c6a9de21c14e94a484a18ed6091ccc7d43c58602b2a184a3f189f7470a15614528d20276d8202b45122d1404fbdc9a3c80e696abd84702ec54cb7024e5b32d159c98e26ac8f9c46b41588fe5498042a49734a95ed558d121e53400e0662999b0a1c93627f541eb4a81429d40091e24a9db45df10881e3d3c10c1a424296ff0e3c4e246273e0797dd31fb2164082af8ae4f416b13503c912b738747c1e83c40c4a42114dfb55de2e58884e50069e0eb1440d7de7d625d8f974488d34fc16cef8bc9dd01eed01fc447dfa378148cc4e23202c5774872cf67834c0132398f4d54b4c8fb76d17a46e32fc50fe891938afc26406aca3ef41c5060ad8ab9afa817ce9039e81471bf404bd5853302602192782fe27533b1228c94beea393cd10008217ed18fe6420ca0cb38b0f867a80fde3ca08bf018426f57a7a175feea45b4d6cfeca7296195e3017e9751ad6ac53aa0a0785356aa093c81b65a35aa06fb6e09f9725e0ecdffca03bf2088ac5bd952659db96cd577b8a6c52e0e6c8e06cf2bc07f4d0b620b9adffdb411ec2fb527b84677c22c3b1152328ac7ee4ddb51ac4771a39ec1920f71b2ebbc73a69fbea37e208e6507fc656a52f1f8beb0213189dacaec9ab779cbc411fb70d63f7dbcbdc906502a136e8aa0324e4b48abb3627a6a087e118777c822fa562aacdccd9f98349ce713490bb5cfea577cc10e5ae633a010f7d30437a089e486224be9bd3dc8e0b0a0baa60fcb85d81427a55322a996ebfad86bca9d145ca92a749c8abeb5ce75f20472f6e3cfc995e3248b6682a99c1ec95393e7ecae5baa430e9a6c41207932df9e60a9ef964af9590d13f9c9dcb34f40b7956f8f3685069c6c4c22d1a65087fcde6b6cf3b5216f0a5d707cbd8219a2e77b5075f380e50d03a261bf7ba0fa4ef3ce36a23ea2a2e8e2202f401fd0d4d896c2f95f29dd384f11d61c00c23290909d45324a4e92602e50c06b3b253e33c571bb1d6f101b6cee388c991585813d2b50ac5c45d3b11b1529353091ebf27b18f973673a099e25544b878a822ddcdbcd25b6697fbdaa0d4aa88706c23a38b0ce6493c37063d98585b78ab90dcec9db55b4938cb67608b946356e8c8589e4230766c999e2136811b96fed8b46bd8cc367be81fd0918d41549951a0a2a7941685e0e04a3b485218e77009a63d2160dd102c32209163795c27a297b517dcf5295b251164c1838d4b41b827a6ea558abaad1011ddb51d1a06e061dbc42c401b74768a61978db5b7d0a33ec2aa5e178a9dce0a948d1ce0b5670f9adb23afe554c0b0d1102257f30fa149204b449a8ebad40c88cfed556e6316753df439ec24aa14184ada382eed8875625edf034d0dc0dac76a22167b8ff62713250606cc27021a7fb6e7f84483d1ad0a19c8d48d089ebd8feef0a39ba045fb5ff97262068ae27c13131293d68f8d4ae5a9b64d0ea68833681ce0c8ddeb415d4a985a276d1a4d368c9681bcb029b5984d311da69dca15700342d9a0e9926d06402921972637ed5ba21cb4cc50ee25660191247d25574a27f1234818c534ba543a2c559b5e29eea0b399453a5dd17720dad0dfe3af7e10ce839d86b111721dae0b50f22791f965952a49793a71706221fb331a0a55e611df0d796efc5bce2dda8684419bf441a2c23405efe798a02f5d0c3f1672195225f7d8b012356585c6ac0ad69c64eb9712cbdfecf20a7b5c8756f04c2128066218d8a86a96045084566bd278a06bd0085f88d037dd4df371ea79930bc8f5ebbc5c365756a886e562bddbf8e867dff9f7e1725b06de63567ce786a284205d2b2864d1a922c77b2d7694a6e1ffc7279027c3188448b7509754e1a61dcde6263c74aa05c608e0989a4088b9348ec73282705fae615c4a1d8dde603b6996711dbfa6b3af5fe25d29dada993d9cd437a845f4bc00c6c15b7381a624c76f2a67a0b860dc8496a557c5c86b795e1f38f9474e239029269d6e5e2c8c9d143b51cac8df4b8d54e1fbc0d876bcc1b0503eb29b2b5835ee3a0217b8d1617992934a005ecfb4548a50ac02ebad1401b38809fd50b454c713d6864380cf33dc3822300a18711d538041c91a3f244cca3c076b74970088335d5034192e25c76f50ce81f1f8f685f4e5f1746d0e0b9ad7ccd115ccdbf1a98e1f03227a196b3a8ca5fca32171d5f0d4bb73ce9422da35e035401d9eec1b77a73cd6b8b379b87640cbb1ff4b907f2cebff9f19442f33877e858f11b815a602dd1d345f94501f5c8f22ea08963f1cf0fe6901a97a3cb333fd2022915011abd02e00be9423d80681251cfe9ad600d1fed5da7601ad4d7e7c8d9760b028d883f1f88e0a04222083c7d68d63d6727db25ffd2620d7295e0dd51b934d53d9f8010324c3569cec8f06403d06269eb9cf00c67f55b07b12409bda4476e747265a5f669ea7c7c29bcac658a6775cb8f41b6a065a29cb2d7c9729f1333f03c44b5549d269cbf1042519ee8126bae30597160d9cb260fac29f05e85b09a6cf7e771fedaeb1a31aa88e4abc216df535e6686c07a86a2e0bae76d80725a93b02e6931a7a5c34a912268c477da2818f0ff7966b4e6c8a49c229c2cb9907ce2bbb16c630af0677335a7a9c84eeb59a91e89e3cf2b192512f6b9b3f858516d7fc00a06dc239b009fe3e7a5e4ee7ce8912ef29398efba8ac4df4982337ed38c4f69be20a02ff95db2ebf999586e733c9b577c11998481ac64585243556cbc722d8091282efd1caa19e355d2eed1842ac99d8305b4870e781842731b8f688c87e26805680dac6a3504000e025b350d2401cac23c34824906c6c2e1f94523ec7160717240e46825f98e6aaa4c0ee8e229a4f5d0e0be1bc01c2acb387f4d631ff72b90d9c68783f8ec1abd4d769adc1688315572fd12960f31d60561a9dec5299b750bbd45376730b04a1a31b85d1a1eba9993247a243447fa804a125da0704497d024e8241447fa014d127da0714497d048d027348e740145129d4071442fa148d025748ef4015d2aa87d1a1eba9d93247a263447ba804a127da07244975049d02514477a014d12fd4073449f5048d025748ef4014d12bd4073443fa149d025f48d7401dd31fa187a70775166f4b22e1032fb0a8e5c5619ceca74068200460444b3da334382f14692dae483901dccabe3eae0bd31ddaa9af93596f8b5fb7493a0cd99362728251fb46d235d6c6871808b4910b162fb48ed666de3232c24508f918d6f8cd4de2c3179117fc0c958d60743b04e0c8e64f83887884a23404b2dae7f9177f05e322114363a216622c210e488d399d348988691394a2bc737a3db871a564e89865bfd40593a645023e475ff2edcbfc5ebca98b020a54aa958b9e2ba28e9cd01d73430772ce9c529992967820559f592d8b962bb29261c24eaa5628d247d949b24f581da2309df0c6543d443aa5d43ae6b2dd7876a97c9c0e711f18abf4da0bf1022aa4506431e40eb239a593059e6d993c7c06e371b21b17371c6b3e37da0c4895cbad783f19cac014c86f04b78ef075490e73d47633f084d38b4b381e899a8df1ab9d2f0750d50a81819cbc20a6de9c248ee7ea02650e8f2a9d5ccc9b0928db2f51dfe84a6ba19762ca1a2a17eaf014224ca715c40a564423000e5ac80f4b185c0abfcc0c4b771afb717149dd73057a42ecde5a82df8a9622294e3e923cd1fc7e6a6d7575947b8103492ad547d2c7047dec24f142e6365997330b278fc312cd599f1036e826834d075eaf1a052aa45d28ce381b275aed73f5e1168b06b518213858c38754080c3dfbdf34735c746d5ce0969c71624ba694e1db5507991367724a3e5adbfb5d0ff1c5f5802c7602268f7ab0454684b2f9dea80cabd65f758ae3ea27674cdd6874b4a9c241d5a82db6d16756e8ecb5c58950bbc5c8f9503779e414c78b0d81c6f9188ac79d68a05c78c3a496418a21ebda9d00a91da9b3d5b868c15a0c6fea2b303648d8dc2b5e7284ca01695c07d9d7e71c7158ef8755a945732f87558b545685078a3092c4344adfa66d4d035de30a0b8ad15e8ac869bf18fb18ed668bc49654286538c77b3f035909f6b348d75f4082028ef4c233e64d32b2e623d54d3fb17620704d0e316c16798cde9a4a4d8cee6a6e45ae239046a018497cedc6ba931c228b0272498ac7f10f0c85b5e3a335813f951aa48a7970c60eaf820573813a8e671cfb35445063f08c05ce3560f47ea0094d3354d80296bf2059c09e2719a6db3ce316ee0aafcf98c65c0bbbe32d4956ba23f20df2089784c5f9dc7f400c4cbc0d41648ea23768956adac880fd228a8e6379d2278863ea3ad7c008f2f4f6bbb553c8f153805b36b0d9a202071dddd3ad86d89411bdc5b2b1d0f327ed38bcd84d8f16c83a435113a98a9f61ab32de88036c078a53ac959e44d4786afc3eb9d8646cb05c59ae9a15c5ab4a67037a39f2ea484cbce7c000c3b3308ef51ca0fc8aae72904c8ed312344da1a025a61cc6f9fe3ee7df98473389531c0a7ad4c0227416fd30f9ba47a28d1d85e4b10a017e1389b9ef1c0dd66e0ca8f27ce38e0fbdc29b28ebb5d20ae6823be8d908d977f860dd369d1351a59b5e36932acd4cc5c0ab4f2780be91caa94e2301ee68d994e4a8e56332c3a40d9d4965e9e4b2506c7b492fd4c09d5877548692e56a0e6ae2b75c2b7e29bbc753bd3d146c5db5b6f00d45056ed8f823ef4b3335ea09f8543ec244431ac8f6d08e266b69333a269482285221033a8bec1e37feb9a6d1bcc0a74dd0103324462082d5d49e08c57119472df01bd1a394484057a32f95a7b5e0ab2f3faddbc35ecc31df755420c96e4144d9d2a84db012f309676b36562a870417d5b61c777d8180b2b31492367cab3bc8afcb83a3449a31fd587e5496249a3da2ba7cd939f4e169e78cac5f450a6b02022eebe8337afeb4e1831e1329369724a3dccabc0f3dba526156ea270f1c91e8e719d1246c2244e6ac6999a1c1df95861d9329b27861217ae27d3bc5d396ec8c0924ca5a91391695e22f9897c3900948b58510797610e70801cc4f3d35df952025b9ab5b774ec3efc73b6ec44250e290b728305f170e96bdc79bbf0120515bc750f0dfd70b6e4761d2f09ab9f4a9522a4441237ac7ddb8435cea3023904a9294d39554b57be7ec5ea5b544f11169a1ddfd52983182a5c54df5af8f13b6edcb19f1ee6e3e2bc861ac8075e8b5e2a7d016bea1f85697fd7c8500defaedc42a423f3fb93463f1c5a38539da7943c0ee6fa6b3b4b28f1689412018c83040222e3eec3b87375f5ae028cce2102a2bb2cbb8628655f16bf1c529f531d715cf37509ebf817a7cda8b07f5093af9913c5c153583be62d12b49d796dcae1e2c7339a656270e5f32ebc719ce38cf38f2bef028a7725658867502026eb691d165da29fc17002cb454387baae42d0af6d79220ed6c3e019712e5283edc4c1ff610e06aea4b2573e97dd0561cc9be8b019c416a0e5c1ac95cb8e2a11580ce6e3633d9a3d18f4b7415d31f4bbf5b29596c87cf3a9259327e1bd718eb43d34429d965b260c3871623f5f22b7426adb8c88bf803c5428903f7a5d9033795d6466fb89125a59bcdc16817f1687d540049c329e08093f819ef1a732598c490e960529ed3d327c580451e329230e34ca1e03b133bca0345230b41401f61d60912d6ac062ae71926df895a496eb7ee25c5ac8841685b4870992d50309c246284eb4fe681dcafb5f97a1aee85f672bc2f14f94c0463690c9c77749491a814980d6db5a1c6b039466347cdf249eb002578c4cd9ed26a840f59db547a699218fc3028577cc3bc5631bb2695a82612f4acf72c3e6951f040d8d839eba7bdf94936ab1813b149a5cce6022d5b5cbf09bf149558a04487c8f81008f8f1a4a334de9a3e188ff9aa0f3a38ba37d4d47a9d4b16d30e454b5969a74fbe7ae54c3a3137750d45feb377f31ff832a0ffedd36d45a4ab367751c60bf86e6bd9daf72966427b848113b8df0379987b1f78eca3d416ed70f5ce9eb47bed4e523afd4fa90577afdb095323012fccc031a10539656309c11b5c509d9130914c7b78e9b62e31c5596cdb934b3b85d8a94c5d7b95d3a37789af12d83a8e80f031033dd470009c70841d24d340cbf28e0769466a8914ffc568edc4b7dd034eca3511309b5c8761391c8eede01bc09da0880085d18220a90f201bc940743444182173e1fbc4b708895284c39903c1bd219218b9f9c735373ce20a8385ad9916777612301f7d4931a322587710e98438a39e65f9279b3326fa49cf147a4927d41842df306aa44988305b06545063b2ab10273f85037f551cf464f7ca9be903bf145ee4048c5e1f4aabffa24178f45d279a378e9095d041132042787880e4f8fcf8fb401723304278788ce0e129f9f6803e426480f12b8037520911c1904df84825cc868c80acecefb193d842920a31b5f098d9698629e7a474920f866a96649470749179145928e44961d4aa9a5d28d14648b47251d69477a827444dae2e5905e783ec02d1e0b7c232aed483a0f07dc11890e7da1b9933c32a89c704f338e5e268ac23814fa47234944fe50f8060f8ac23814f2c1793e3870483c4561dc3364f60c993d4366cf102a240689a7288c85f008813c4278280ae350e81f8de88a742381c816e9e6e6e6267443511888a40344d20122e9c0a0ce4c6d297792c88ea7b9934178368c50fe4c3c31e24871889c3dd4670a993991522412da48373bd26cc1007758ca9da45355d7d436d2a4f18439e77b46706771f0fcf9f1c1398d53c4fba097f4688708cb87744bd7bc44dd8d7436d49d19b0c5994b364e6489395e4c2216278e2c0e8d22b8a3904c247bf25463c02973c23f2dc6f0623f2dc6d8c1965904b50f9b65e310a4e14404bbca1e72577789314012879f0d354ddc3da6bd811904cb845da9955993c216517f3a22f0c2a62eb3883ab7a7d7c9ca6cad615397797a7dd42455cfba7a601b3ed3dc1df3d311c118fbf1d042fa1012783b6fa7879587a3c707f05a90802af3136577cf2714750745f09eeeacbd52e9a86189ddd93d794868c0a338a2f9f90c111f0e1e707e6e34f880708a28b9d9d3e238f17e6e98983869c0c1ee60147bca881359ba949cc8d28d884496ae075b45647945acd89301bbb346f64c892cf01807ceeb444551d484b1140ad17f8e462149e39725e08ea22c051370e34614648b09fe3255a2b4829c3ab88336ddf3993611fa002f6fc19787472b1535fdf43ac61879aa2f70076fa04d9cb480bbe7c383266e1fe803fc0fa9064aec83fae07bf0c1f7a02449f230f790f1e7d9d8c00b44204e2c1147b40a0c3f9b4051894ea79fd59c3d4e84e2a801510441438e0f91dde103a1d241f5d153fe2a831030d10226625013821b1bbc20470c57d8e0e06546110616610821348327d4208061051880e1058b83ef7e45c020436502a6fb1501430c9f1c93fd8a9841087bee57e40c61084315fb4664818739d8508b3044b1e17b48c08687a18fe2e14d7040cda46cfde61458ee57240c2a7617da46c071bf22614cb1573e23b4b2b2e3a978fc831dcf85644b07747a7eb490061468810811073b8621c58e3fc4996798dce06e148a61e840da905211548905f8fd4d55fbc1338e322560686dc0f0d93d13f65a7bad33515955f5fb775c2d6bfd5e67a25ef7d55e4b7f6f7f5fe70d9000a92255a8fc4b2aa549527a792aa994306aa1be94ee3ee04d165af0f3f2638a81cfcbbcd43e20174ae022e7e50715061b1105e8756af003212f3f261d9e178985289e40f2f2636201901ea2955a4481294fb588029a8a28305dfaa47df898fa07b6f332ff4382c2e7455ed23e7c50fd63ea7999fac503fc90aa8807e8ecfcd43e9ef6f1b28042163ef2352fa1788029a550e1211658fe3d092504824d09e58c17bdbf0d9f6da69e0d79ad8a9622601ed287cb34fab47fb1bedcf18800dc3e36d5433c22e0c3d0a65f89a377896a30d49722658cf70778f9ee03deb671e41263159c40c4eaec7429371e6502e2685e078d379e8df9996829253411714427d4507b4189a7325fc4cd401c4d1f1f48f1c0cb910295088243f8c91b0f87dcf3a31e228ba454ca04009d520e91141b471294a474490a3d23e2487a1c4977891d25c54bf2d26110192bcc68e0e52002fa205d7a061e0eead2b1241dfeecf844f8ac304178897e0a2901f6648b09ea99b0aa25bd526762a2a6e9b53a13544559d4ab3d1395adafac6ac9faea2b457a7a76a5e2e899953acb38e98c324629e35443233502154638811b86e0063758d6ed2d7bab161187c41ebc16fce29018840d0bb0e1bb78c4b21a2e7968a831c663b96629574508425df885ee833c4d440c859ed61d656922e2c83ad5d106fec4d161ae401255de8657f044cb3ef9f36c34813b99c39343af439dd9839363e4e1c86616db35ed37779ba6e7906c0e79d7c4f9be641b9e0d388758dafaa1288c6548fea31f9d5a11013f49439ec9233371e2084a114790da483987c89c21524c1c4a79201d892d92865ec02371042d4bcb9f6703cad8d3c09933adc8e199604c336ced59ee81edec2f775aa6eddd11ad757963ac24e0b6af57fe9e3212105a3a2d89232889c4117cccd28a6f8a44acb20d6e802d93a79b22984db040c6c1664ff3084f053e5a3d7f66ce121c733a89237320754288754bf7907bca892cd62191c862e111b9244e7f4a680617ed3e12e125844b7ee06565891359a014d10b1d259105ca20038e7a87bda5938032514729340ddcf630486481021ac9c9d18a3882531c1271e2a887c9a6b9f476897108140f87dd367c2cc18e9610d66db46c9ce8f52c11ab9f17d3fafcdb32682cc15db5e7e1185bd2883384663dc451f66b0f0f8fc01d982376017d808f38356c9e9ee521e2e8fd6608c4d1e3614f0fed09ef38244af170dcc34f1ed92221056748771436d15dc8e21c26afa4b0eda99b3c286c7b50b6e7b23dcef6988d6d5f6b6c7ba9235beae1a63b0a675aa5e62bbf0667db577a298f60882dfd6dabe64592a448c4b6bafe6d6b04f53e6a5eea69ee6ab27dcd4cd47725a0a5c76c754759b9fb80cdb6ee2225090712744bf68fde485aa9c8603e528f88227c449647df211027e0cde3cec4c66dd8b99b203b1338c3db3913686722d3b2ec9c094067420371d7b673db14f6dcb773d7fe560cb09f7cf2492fc48fc16777295cde322555e0b57ca9026ff3757b982f6bef755d6b0f6fa5b5effe502dfbc3a43bdc85b60c85a4d4d46f9ccea0c5112db438a2c5112db4000214a090050563d3197b7eb050cc172f391f8c5707827d84110a53bcbd7b3c3bef5eef1e110c4bfa2affaa94550970079fcd72c4c97257c9ce39afcbebf2baac56bd844f90197699a51735c350150e85ec1876895d561007062809d49148e04ef60e72b175aebb03fbd4892cd9cec3f182c03e5fabee64ea69e0c69f975d905b78396e279750f8072e893654c4f2c46a8ebbe224a87dfd0a9468454c8d3d7bc8f745185e0e79fafb705c3650077b7d56b39a7f98c72e19189d93461ce905676b864140c2c516458e304346c4c1c1b9aeeceeb82e83b8ae6b06cc1890bb9ed820118c27228fd4912a546eec1f852e91481c7164d4c15a86a223351d88a4833cf08b4d0f2f29df03db52bf5f77070ecf68848138e22c16d99824f2f0749127f2481da923039f6e45f8f7d931ec7a17da1826c23ae66aab3b23f674ec3a8581ba2cd3978e6919d0ed675236f62977999e49d9a0184d3f144d23b7c9437a9e681ab9b9d3cf2b042784c9f4cae5ee47c572866176ba9e1de3a653ecfe503f4d99d51d9d303a4d739aa6c9be5ec9bb57eee0be8e7367c4c6af2fcee042f85ac67670346fd732762eff4ad9f49426c0451e031d8838cab479f95008e3d89265592633d04ccaae7f57cbd4db0ce76e26e5cacf25debbc4ecef66d63ebb745763c44ef9c6bee98c4d8f8f717f9125b4e510b7e941d82905e9ed5cc65363aa9dfab55d2d93dddaec1604ca31dc3bdcdb6fee8cd8f43acdf75bc638c77d73a7699be5ce7e03359bfe629d113bfbcd3197c64e7307e9f15d6496bb99149cbb1f98b67f33299bfe7535f52e32c327ba9a1c235ecacb1420d0925fb93b625fc7b4acded2d6b15b6fbd47b85cb7f2abecefdfb3b4a6b37395c572cdbef269e8a42e0f92cf5eab94b2ea2ef42704e8326e97da4f2e75677221b2eaf7d52f73bdf79b94070581fdbeca568bac8bac5fbf14f5de115b6469acbb238e9036775295d6e5abee7a7c2721636fa0665bcfdd77b5b5beba7cad8ee5ce828076ecf40201b7f64ad31003bf4ef04600eeea95b255c66eeeee314d430c7cb5575a463ba665b6dfcbdc594d43b7a6e71604fc7dbc319ba6911bf4faabbb13a93b930ad2d2da7bad4b37666ef9eaf657ba31d25696eeea69e4ad32cacf2e60f9ead40e6b5bbf993a96bb233666dfa3b610a635cb55e62bcbf538eb11b582bde6b86fc63dbebea7419bd67417baf7ea8e864a6d6919ea550ca5bb1a1789659b65eeabfb776f55fd5addd57447ecaa830e39e44083c68c1922910c192828a1d0c989890908c471dba669598631865dd7bdd6d66a59d5aed596589d76a5b6cc28dd49bb5efb96dfb3a1e94edaf25796d97b362eddcd5d8fe55dff1e0bf62a6beeaed35bccd232f755755fbd7bec367747ecabb16c59dda5a59bbbaadeaaf7661a6dc0f0eaa8b77791140db5b9fbb12b1abaabee7e745dcdae2014e272847c529332c68834dba7b59be6a12dcf38ea1e45edf99a8df1676c8c1125c6508c49e8603745d150140dcd8c9db133162514638c31d298b0dcd02df790499e71445133d6d2ecfbed4a1a6ac6ce581a6ac652d48c9db146648026461ec8bffbc3be4c61b2ed00eb786cee75cea91dd31dd61d8f3d7587fdba8bb4f6da9f39197c38adfd8bf6d665eeb15b989d5c7efbea6ab61225fb25c0c89eaf60a862cf676f80c74ba2d8f8274fecf94c8c25f67cb5ee0f15d5f1d83472cb649f577722ea0a51a7c9657cea0ef4174732f831d6a7c58e75d703ef24441bffe60e77d4be5a04c4db568bb8cb68b7e7b4bd66e7e7ef5d24cef856eeecdf1f6012013a8ff316c4764c8bb8cf631117b588d340bc2dba2e639dfb659dbba5397d7ced36773c3636ed2520e036e9b06f9a861818d33b4c8eb58cc9352d73723c7387699ab94df43d09021e9fde9813fd449a46eefa7bac3b3d419a46eeecf7335e21aaee60861d8337466e8c81aded987b0ad1d977347267ba030165b3fb43f5b943ee794c4fade9ee9e46ee29f79d73ce49c11b6355d772c7636bafd8b153b125740c02d767c69e652e77297bd35dcdde8e758777a432ee19a7b95f7ffdbb31b2a336f7507eb185bb689bdfe6af9e97ee686eb58c75632aed22b5dcd14c4a880a1fde624392aa692c7798470b4a4be8f7dc51f28b2a9ceea88dfdc5630fe51755b00e74e9268f37266eab65f0ad5b7f3706df02e2a4da72c7639b68bfd77ecfddfe24cb687ac611f77bdd2467c7f296e5b8b7dc81f48473677d03355bbbadef46e06d11f7ebdc6dde7e33768dcbd8efb1df6fdafeca3298c63ae4ae686696bb1fdbbac7f7f857cf38c28eb14b773fb6f55bffaaae2e2195bb21f6fb94bb23f6fbecf1928031a00d4172bb011b80ace1670b60bf224ac2d8f11415638cb9fbb1a7ec66ec443bb8239e660b04fa00638c6d02fa204f0f03afdc00ccdb13e66da92728a7986f9a12ce19d1dbd4eee69e3f2b9061041ca4804314fbbd3308d9efeda82f523cd567f5392d94940a159ad1c986e6e0b5c02451253ec61fec481fdc100c890438fe559208e4a142a8109b4af374934d9238c236324a39271b0d79e228eb200f9038bd9b4cb0ab4f9bc8b2446401f270bc202a2a4f9a8a238a2707d51ac1934f3e09678806e8522ac96803e60190bf48388ee2ef0658c40d50ecaaa25edd7a8cd986d586f207f8fa666657561e8eb8a9138181c8224f7d008fa2a89e0e01b848f7b6d8d4a79438a20eb37e1c512bd45724758ab2288bb2e285f9ae5ee1ab2a285515a5659e0f1582942def49dd419b1b0496c4dc53f778f23dbefd06c0454b8b74e9723acd4b00a15e32106a22c18d97394d9388d243ccbf4d047ea11435691ed04767d6ce20a784f20b778929d18a08638442ad94c4f7946078e9105373ce19319f2d1fa6f3f3e35355f3d527b2c4fae3859436d5278ea44f5db2e56914c12b41b6942bd51830c502dc551fb944f54282bf4c01a788ef70a4f086271b52a10d639431db0db50d61164dd18cd9da10e6f9688067433e1fe0d9908ff96ea8835706f06cc816026c31c222e340792b766505aeac502b2b06386226b66c4412b0537d8edcd841928448ad3f4aea12ca623e71d6799302ec225ba87479295357fc0fc7ceafe505aac84b2cdc98c296ef06b0e5df73c296ef549ecbb3211f10e922437124a7684e177907c8f3f0115b3421af881a866c29a3942ff3b29b91227bd832346f661830fb06fc4e51f31d1ecef72015a74cd46f9fe051f9a894543eaa8592b189075160489ec4f9de7b99daefb5502929276d93466515b6b07ad97bed55310b5719a54d9bc451d03491ef9dc4f7a09412e5bd88129271c9786da11f182a155964506418b21fdc15a3228b0c941dda2792c906a9ccbb01eac6505be2f6b66b95ed5aabb53263bb5ed7ae9795f9ee8a556c65aebb6675b353b5eb56392bf3b42bc8ca2ced7a524faccc73d7909559ee8a6267a088645c7b7e60c7c3d1f4b1638435344a2ed4f7f26695f2bd37df9bd204f3cdf96484efcd48e3881ea955ca7864d3c42d4572ca8ec8a6891b3e1b9ad22ad9183f19c1f0f15d4e31d4f9a81d60783a299d53c6285d4658136442c2eb8953ce291fa501140e0e121387239afe424f05fe1d85250f45e79ca45b3a4e800bf928f5a8f7e8ebe113c628d497f2b9236a99296df07c8cfac5d19334cd738a7b3e781a8804bc28c336dc6ce9f83f292bd2674892f42d496fc722f82b9145fa230bdcd253546c3c1cd525eac796ba1b94ee01f785af6bc7ebb02bcce139e4b0e319b06bec5cb6c8fadb325964e92016b0a9235163b32b2d8a59c002767ccd12b64847dcd345937e7b6eb85d229114c0fd9a208632ec501cbd07611745c2a0024218631131928460646cb9136db694e87b3670090b56d410eb3ce2ad436bd344967bcb5ad7b2a2bd4b9cde7bef5959c9cf9687b0aa3e1d52aa7ad411c61861ece6b4a635ad39e39caf7c7680bb077d78289104f6d0602003d1c632428cf0bdf734bcf548c117df8b2fbe0769841042f828b57ea664f9544aa03e2267e0f160208eaa30e0eef1c024903a815ed772376331dd68f64a2f973b586fefed8ad05ef3cb7ecd5fec4fb6745b965dd755b3b5dc71dc86bf280bc213534a08d0a9c69c09a5713dcd17c330cdb2d7dccdecfa6e0cd5a2ebf4dbafe8baf65abb992dbaf486dd7ebaafd4d29c840e7b0335dbd64aa30d98aacf72674d9e9d567d2f5d39bb726692d5aa654c9e6919ee98c52e13eeef32a25c3d4ff02f3ea5186358c570c5300a630a5b0c9b79c8e4f8d564fbcd9ac968dfb8bb103edc214c03694e77185f8d6118762fdeaebb6d17fef44cc3b6cc5ebfd95ecb59c5b02bdf77dcbe10bb95da5737c371201d5010973bb8398aab34d3dc69be9452a8e1c360c7dcd67e43165475f7bed59b1d06d3d9bd87a91794bb9a0d3acd16a4bb90bdae9fd89095113a4131b1d82fee945edaafdfec6637cbb4c3604dd7ec4c8b62b46787d174a66bf675fa7b9dcb5df677edda2ee9f457aeaf15db57f6ab9dbbb88b1361ee30204ed76cac4531dcf161388db54d7f6557d534c4c0d7a565b68b72f73a9111fafd8562626dc8da7a59ecbab4cbd24cbbb22c5bdfb26685a81859b0eb0e6efcdf7b0f39d061b28334b7b9d76c1779f3769ce1c6d7c9c9c9af8b60328d5fb32f2d8ac17e1de6e4fdbad996bb194eabd5b256ad377733fb1e6bf74e8cb54fcde4d3af2dabf627d643a0cc85ac139b63b40b6f1904ea4cf40c57bf819a2dd22ec2e75eb3352d025d59fbcd57360373c55c1a468bd1f47bdb9ae13611a61de6d274cdc634ccc5d775401133744a9010e83d86d5ed945a78755c1abf5e099d4ddfd1f4bc4cbb1aa699a6b926e76a1cbd462d4ab5d310dd7e727a6ba5d929d63becebf1af4cc758fd4a7f7575bbbdf8ba747a9c31acf3216407d5227c7a2bc217611d437f9fdddb5a3f6d186b99ed7686e6ee6e7a6a4ebf90c9899e20ed573ba5af1abd2e4c31adbf8e35fa6b9dd2ab5e8a29b52ca5942a79f6375bcf32b9fd827e3512ee26af5cbeaff5d9a871f93aa6e92eee20dbc4c26d02ba9bd616d6d6ab95e56e46f25cb55ad6aaf517e7eec299861818e3cefaf4ccd65aafeb196671ceee223b4b53b5dedb9bfdcaf6183fcb31f6bac76e7edbaaffb12f6d75f7a39b913cfbc26d592e112aa104111f42a8e4799942fa703f600d94380db26e734eddc9dcebd667b6ba9a7d35f67a8476ecfae3084f8cb74b77355aeef03cd9b2ed84da3eadee649c6428a14d62b5cebba3defab55a74e9986ae9f779eb5aeeeadf1fc0599875ab7dce5bb7c7eab15bb5a56fb538cdb2b40c77ac6297b31996c938b93d8612da6eb7133d5fb779efb42aa6375b5d6d55dd59ccd6eaf7f2a84eded96d6df6ed35e3348b5dcbddb7bdf62f5aee8fa30d74b96d07e51955b6bfc872a2b90dab5aa6ba55593433cb60b72cac629835b906d2ae9b5cd61e64b156b50c6671bf793b9763b6f76bb57a2d5fb7195f59ad37d763b9e31153affd65b1cbba96f55d559f32d668329342d342efb63d9fbd1c0ffa304d3eb94fd0a7454d6de50bcfd768ed9cdbb6d5b9dd1e66b314c3aa4f8cabf5f3301584ed27beae1cb795e1a6b48c06734c6ce6ecf9306f9267287be53228e36763d6f9ea75dee27e72abe27ef213ce823e2f8a017d1e06a4f1fbbc37c3282dcf3cc36ded2e3294bbb8a3465140f3fe30e7047dcef8bb42a044eea24fddc9b8df7e8ffde6895daff8f5efeed87e61b88d6118d63a6a8e699aa669d6abc358afb26cc651566f4d8d9f8d3ae7df8500773c8f9dce09a2f6e6aafa767877542d9aafb78e7dcba279edd2a2a975d458fb9a737ec264530413bac96bf6bbf76ab7d6eff69012bbfedd395f3f7d4c2d8ab19f87b17a6aafd9170858717789db7cddc17d6a19ee58cb9c7c723b7756cf70bb1e3b8939d133348ddc28af9fba7b7aca805708d0e7df1502457770834018db6937ecf816a43b10ecb9e9aeda4a59baa22e51eab3aa71325e6f234be8f5f8e13879053dfbeb6faea08c61331b7b8dd5565ba909877d33b9897e7114b2f6f530f604c3afd8b3d7ecb841196e5086dbc21cb5e6ecf990c9c82f8e6a7694ec35944fb2ad15c3b0cbda7aee56d7834247f9bb18d7fc36e8dee4387494a3dc874e4e5e0f73f27ab5d7c368d724777353d583a8b6f567e55a5f71ad87b92a4c76edd6e2aa453ab6edf530db5571ad16572abf2458dbdccd70bb5e97ad75c3b84fc73909b8b58a7aa5038e61bfcde0dc511b7fcb1db5b7579b453ab2db3f1b1626d32fc63ae8ef5ed7b61de7cb3ae8a0ed96d5221dd7ed4531d7ed612e8d67b8cddac3607a666fba9be1ec6b76cd7dcdf81ab6e5b871ee383dc3edea52cdc6aff5e58ec259a4e33afeb381f5757c984b635db3e5dfb5d7b7dcc12d0a425fd7815f2f8ac1af87c11a3f1bd7abaed95a1483bd1e06bb6e9de16a2afc9c29627218450bf9cd5bee8cd81b07d2f4f54ab30c7ddcb54ec77297b2b1d768fb4bb5ee6a723686e5ed76073e10717465f4baaeeb9aa66bd34193e6b0119bd23f9ab7dca5ecee7d2665c36759a237a1e730ecda746eba09757fa8d344b953149353d043a7ba3be14eaf67bf4eb74ff8d38e7bfb0ba318c52846b1ab9f7e9fae8c7dcbddf5f707806e1f01ecf4d2f42b8377c7a445383fc01309a669f2624f3388c29e24499224c932811ab210c448167040c5a8a212c513555e0fe58391f013555e126ca28a64b9400a5f245183185b8cb1c4132f533cc29eb05042135555555535954092a42bc2b0a5699aa66942810fc610853158a0862a9e98424e16f8ed4495e700387414963ccf72c2081cc060640d4024133749783f2bd0c7c6c64605f0fdec87850c8efcec945f2300031a3a2a060ae042073837325043183b30021435f8e8297f55c30c8a3003249216b219e0116480061c1c0745c842054cc8c1633c01a88a22e010e630a656f0a2862a0871c20ee0d0f38648042e88015f6ea1bae05d410842728ad0040daa708358851324c801a4020ac902054ed838d03651b6502f73ce39a10a6255821eb614021250010b5458158d5fdc4895b729b5aaa989699aa698c489699a9840862eb0a0820abe427f10a7143c306a9086244a78820a2986c42134d1041c5010f3f3042cc030053604b98942b80289a4021d4350029227aef0c5156010042ca008d2840fa80842922445515f4ab7524dd234a53c8e6c0a02508630d83c818a230cc10a384e00810977092eb050640c2a7cf4944f2e3e7aca2f8de02131c2d304164780f0d1538e3f8120052d9e20831b98810652885498218b13a0e1ff0a9cb024612eb6cc17e9972449a2a6c7b5200d516ca1041a6091c58b04842d499244351561a033a51b1b1b9b18bc4ca7b8c8627d9aa669fa0475f663421750ec4967bbc42a73388e68133b40c282306e50248c28c429c8c0041e9ee3380a7981a577589a58aa4c694e4f4cd3b4c49eb09841177bc2020e3a7b92e89cf34f7faee058926fea420b6b0082900925317c72a818c7e0020e950be8c21a7e5ea4f86c508799d23aa6431fd27f4036b420bbc8d7e13d51cf2b171121f978b2e6c5455279c9a6e00eb93b7a9ad9436e4af7783541bad723e5e318638c31f37ae8a56ee6f5dc1fa8b6b7047573980398ca40ad5317547c7a8a9876262a68931636adb1c3a1a63eb2a5867e5165da41478ada0733eda45415dc29f5bde9daa54f3b9392e987fa5014f5a14a66a63e294f39f5a14a262e5ecbbc99b0b0e9e4854da7316cfa97f2144d95c428e6cd1373881353486449f97bad962a8923ea431de7d2631471f4a3840d946ecaebce64b9d0a7b1aaf4bb6ceb7728bb9b76262529efa69f69c9a64296d8d4c8747fd03edd1fa6a7e414fd0af3acb40ef84f178807754a1ce917293ded4c5dd4005bd7d6544464e9a29068c444a4e9b7a91805c614471c1c1c8baa2c3ded88727811304775fa0a58e0b1e81db61a1bb56dd7155563076d551235ed58afa60ea75e6bacc2469c69a767f2997e262fe004c6a464e29992d82186b8346648b18a2ae2441ce97556184ed9210583734e1d262f269ec832934c547fe69987c094bc6696fac4910dae0f1d05006fa971faa8135976220b8a1591e5864ec4080070c48938b18a98436386d6dd8ca5de03db94ceefa61d1d4e51941ee2d51337d5129125e5f41510d9b2c341d444326f2add51738959311a339e0e1de24aa80f8dd3ceb433753121d994c68cea2959ee90e592a8627224eae468248e6814a2a310ea7333bda33ea2e70c441cd13fd3c0ad8386c0b423fab433ed3c1c4a7ea625459c9c9c9c501acf21c72a228d2c9aa1bfeb8e6c2902091224221d7142efa61d94771167c2c2d44564813b91e54e3bf69685331741d3ce344d99c640606a55230a6f58e1c01ca88a082211d8835dc653299d883739d35de20473e2c88a9823cc1145ad237eea629e391a45a12465232903b2c5e4a05f930cca9434bd2974f24c8b37b02756f12e8600b621349d6849ba74e956866552ed0172443c228ea8b5a83ab3a80214e6162e23d7352190c802248ee8e98fa82a49ca7044e168430b0a0ccf5dfa133d63782df0e68928240e914e21fe067b1e0e2d65d308c5a6516caa67ac62534dc4cd1ab6f4a8d8f482374c6ce957dfc081a2b4744c7731041702356f47e99914238cb18838a2938e4906ea23a236e2ba30db0306263d8b4e4416098b5a04a326228ee893f2c47f45de7044e67461052462846620e44464e19080f197eea8d14a11b28522a20242b650fa4515498a44f6dbe1c7acb13f608d9c34c07815b35e6d4a4759cfe5e188db3a0668228bbcf5fd5a30b41e187b3ebcc5b9b01eef12df60c57e60ec57c40d3bbbc6a7044e7082503e295d9625fd15718315bb5bb10c1059acdf70f9ad6a67168a6559704667a34b6499521c1059a2b67ecbfa4bb1b40cb491c4b05ea925ace0a874198583430e617b127838d4d24e54e11ee1ac2419873afbc91d932e0716fd2e4a22d226c283a670789052533834743a8a087c4f12912dd28e2489549208a56aa89dc8226ae1419f075d4dad8f8cb0916d45aeb18b0d0377759758493b5217334b3bd5ab39458779ee485d44967c08ed0ed3060a37595c21fab4912d5348c8daba235b54aec3437fdc55327c2af0a35c5dbf5676da84de611b7c43b6846e3c2eb608bd22a1d973a3278e6e5822e470c59c73f64c30de0b71ba43c0a673d05da8d23a84b47d48bcb8b6a75bb9eeac55cd0267b1c5f4c2c4029e3d130c23189b9367f2c4113ded60b5666559eb2344880fade026b76dcbfa0db80bf984e2e8068490082cfa34048597c5a6576c7a51a62084a2d3cf882cf9740d1bfe065d41c8041b3e135d44a15002753793b24549cc0ddf03db507fee18a0bad649c0adffae0ead5f1c8974b7a2279238a25d60988c2fb045025c330ba768fefe30f53cf26094933ee9cab9833bcfb7fdbdedb3eaf0aef43c1247147339fc15818315f3c8cecf92c8d2cd6e26d93449749139bf9d43e6e268876fd366d3eba03b4adae1f491c8428447b6483b3b3c7a87cbc727331c474a36e5818787878787670708af89634efdae127d3e25b2e4cff7802355e88cc3fb038d87600e7d7a190f073cbde8b1e4536a83f006bd077ad6551e651ef2cc59942d12fc36d452a5e31b5216de1fa628d7989762a7fc71c0d939bc7abd281c690707675eda99b38767be9390cc6f58c90a82e18de01790078e21f54031241e78060909fc4215a92454105e0be4a15eec9e1eea0854116a8b4d5f419eea565ff6600926d19007f2ec9a694284682d446bad355543080e748d1ad73beca0c139e7d44940ca0a2291651aa1b29402278ef2679eb06a5bdea377283ca8a8e8e923557468a47978d04faaec401fde1bd5989e4a8d1aa7355ea3468d77df2952a2c21b4957787307e69076a43300f96253a90b9b4e614e61d3b8447c027ae1b548359ef22e3ab169102463e041c3a6126c43ca6bbc937600709708808da330094cdc5977337643fd7714ce8e1c5ec1ab035ea6d2322f8e74145a0618709524b2ec70faaa47b6f0f093579f36f99a077a00645923cb9c38a24fc9d28a797548970106dc491ed97349cb484ae2887eda48153a370ae7e1989b9eaa821e4639e1a397fe0e590e09bdbbb197c01fa824c324d306663d29f7197f963a641ab873d032898cdcc12de3d2a5704480e167d4790a87ea8242125966782155e8512894099364285d88235b42149e7a063d8563a923e044960baf20aee3505550390fc70be23afcb42e12e5b765e4b75132127077144e677717a23fa8348cb7b5454d15d58c000000b314000028140a07c482e16840ca2259f60d14800f8ba04a6e4c99c8c22487619432c618630001000000080080d0d0300020920a5694c3a3df35811a3266c07df9a64927ad46db93ba48650db7d00b97d9251a065bc4d39f0b9bc78751861155ee7172885b89267b1aed20da221d12422fcbc1f7ebd2dfa891fe21342c1a06150d62fefc68d6442c0d35346cc626ada7c341854b0b4dec8323bc66e620764598da3092af118ac061ac31970929d1bd82dd0f86096064f6d521332b114b69afed33b330d2bacf489e9cfd4289bf2ead9bc58d29230bb9fef87fc094c7eaba5d585e46e97d14bb594f4e55d4821bbc270e0efbbdadeb9848343024aea0bbb051b290ae3a375a71edbe65f481810f5f8ba3ed019760b3635dced0110b439b0466e99f9bd638dae9b61c8cddd5629303feb992f63c32ee93461353b9a1f14f890f35e713bab36088302a27adc00c62169c82519a9fae4e169ef07f4e4c33ca4bc57b05a33092e60b524662783db3cbb12408589af2e8b5befdeae0a827f07f3fb4d351b1399f845b1965e31abc854ee4b6c1f9160d441cdb18e55563b90423d4b0f61e0e3fa0c55ec646340bea621571fb5e7791e17e6d970c2daeaac587b5f2378020e52ac14c26b800f7fc450682aada486d5bbbf30c4d48ab8c5a64bdbc947606a76a69307b8ee283dc81b49c42e2e60bf19b1125dcbc3c8816825452d1acb6705436d4c39361939690ea07e0054c939f9df0de4adbe7d7fbdc7ee05a2a858aa1a0a18a6100d0c8fbfd892c85cdbee36b7ba85455b181f96a2d1ff548040181268462a4fb560aec65e0c490217d1b35f8180dbac248d3f0d76bf403b8493ea5d5b8cb884c708a48d88a66f94eba0c84a989f69c05c175d5cad1afc1161f3ae06b838d4289b0a3dcdaf3c4294102834de374b035c93e324879c43e26e9455283d3f3933e54dcb0ca53abe43c5f19862b18bd0d1905b3ea8732c7afbb46fa5a42fcd1d58d8e672c11c9bbe99e9e57b397cc20a41935d33feb61346f86170513ea996cbbfe3a20ef1176c5a8555d98335c2b55e10cc797cfd5cedf0631be9dbca84c06b6745a3ba75bd0625851e428e3a25f0165ad43b44d50a3f138d9025d3a65de0b26ac10a49321a73da809d7a0cd91efe27468042d74a3561837e68ba878f5a8f5184e056484268d2404eacf80c181304f874c7ad9b84fc078d10cc951bf70abede43d7d94a5b3cb2bb1ca02d56e7a32aa4cb06ab5d50abe77dd890d5fc3b11b97e477a97eab0208c6f9e10d5c2d004d2e253394b83f4c27dc2f974c12929b8952ce3ee6aa95f68f5024666ae53e1f7189a5692945ec0986d04bca0709f0c734d1b2fedcaaa3c4a728abd956fff45d7e6961efddbe42051c0e9718c8fe0ce34fdb4165cae2954ad10276ce7fff9528d78b2a70838544b39e3bb665212ffb10cd222ee5cd81515eb98ab386fce9109fa41e36db731ce8e7ab14f5b045adb3ca673c214ad0990f154a1cc9c14fb69f9613ba828284dc5c070b185c610522c9e18ff67669518fbfdcac1bc789f3da9643707b8766c9786dd6b57fe161e5dea173293280aef45733101a54f79d1aa34aa97fa81aed9eda5cfbabebfd374a652d07a3407069d28ae3f8ffaaace3b3a8c1f88a03ef66dbb63604a56e0825e64b4a53e10340d149b84bfbdd6a63efec352e08d71c54740249e42c6b23c85fd934a18c500a659f3bc121e8e68400857c905dd7ce0eab0461306fa70ccf6085873296371291883ef97eb01a2cd49057720298b19e6a1dc60c6b8baadb108722d9e0582cda27c5b021ebfe8607b7865cc10b1f63a01990235243a55ff87c00968f92130a29caaf260cd6375f83a9e37f62b4a1e55d6aaf9efa0db30a0d1f1b45e3f6063e7a6a2b68b7016086a12d947c04a344a079242068089caf36a4bbe93b1effe9e9da94b5182e5938478c2b31529967e6f615003b9462cf9328edc8c6f472d2620ae52dc4eeae38902a196f2637d0d8cca94e265575bbf7e106dc9e7f4351ac20ba27d55b9afd0f0b37f1e690a1298cbab094793bb8e01a9b637c294fcc264add20f7832dcd518b0ab64a96dab9df31efa5c2f079530bd04667ae3002995c33fc55a5e2c62164367b7756652edf00789885998719ce3f3f9c8443a486a4dd9668531d9ec1e54d35044819cc66f61cf6759e0b23e41f038c115f864ab3142bf7c00c2ccfac8978b38793436908d9ab881415d0fdeef6bc409197dbde424729fda602015c69600a97f73d38e83aaf4a3772dd06513f129e441a515e0160e127bd6e5a42aefc783d2a4e7aa222fd492f93edcfb62d569957352ac25ca0cef54b8423e2393dfc809e0f4e64075bb19c697afbef065c88e7a31e133ffb533510126d18ccb353f98841e16efb25aa87bd74ff7f0280b7f5898336bdced43a3351bd25710310a4291c40972e6d50f445e419f77e687c0e9f10203b259804a77c0c1aa3a018e48de56311dd2c373100adc6516428f55fd012748b605f5c44cef2c0126845ff4163b9839c3a5b3be58a78d47b6c9270fab941cf8050fa99d5d8b23339f6fabdf576202f96b8671f4ca4368f71942d476e98fbfd04068f43d9ad235ebf97fb2120691e15a426875a8cc0af1424e5bd4232115a24c7078e9eac15559e2f35219a714c2ae44d72a4f5d7622ab41e9bd88c1fb1cd1d3f6e99cafe47abbfed2ab917230ec642828f329509b96bdd37a07e240285c35957143e71fc7bd68b5294f346c5f93306f224163c0ed05ab53a55bafcf7fbc700977762b7a3e3310b433c48afdfca237b741beb1f0c2a30b8e556a373c3e63101cbd1601cdeabf3306f341a0f9a162fa7808daf4c435836ddcbd8edf17e2277c167e315e819c11b7f9dff5ff7f625caa1ec3b98a8f55feb9979522b600b67ccbd1c9f3791d9c7eb49b3421c992473f48e01e1c7efdf813c8a96b04f0de2dbc7629cc66c9f5120df7a8bb0534370c173417dec3e02f2abbe3012dbbc6a3ed3aeccf154acef74fdb276f9e890f9ffa5911fa3c310de3c653f87670e90f6d36cb4ed4085e20b6d66819f7569e3eb621cdf0ad170a22ac946db667f2f48fc46727409150fbbc4c39f169bc5f1bf8c353be22c337f254bcaf8a5bfcc58982de5112f665d392edbc63e74839fad6404990053294d1ab1112c820c3d0d574272bf7a70109f13dd0b346ab80f5fc20dce968c31097104e12d37021156627ef862b959ef0c153643bfc2227cce898f970fb86184cf2d3f10ac99f8feb14db3cf7f0169e7ba65bd6f109f5b6908dcbef609ea01785345c912058a436d5afa6d6a6f3524de829b96a7f655b2ea494e3e5ade2dae4da0ec3ddacc2dcefe6b7e78bc2deec026afb4072651e3227b3058537359f93d4abda60f5901c8dc04d0bfdd42a845eb495c0203b8789eb762ad8c8ff30378d99742c6c70efaebcbe30260b73246dc7e0b4dfbba830023020af617a1524177f79109fc9c3fb342230dce8431eb402650ad9593f31d969c6402bf9e2ace952601a75b6e10b7b25f4d5b99ca6f32e42efda58971f793d6d808f291d01e670c458df55b595cd81774a820449d94ef1984ba427385076b6563d491b100604b4a7bd67ef725147e0753646646b58d588b9389ddc0a55f2a131bf3ec82f5201d3d2b016c3d1381765504d9e0000aab408036a3a50a504ba906f07e33da343f0819405f742f111f2b75f7085784e60011aeedad6762f5b6e8364264d7dc485a48332fda5774bac54155fe47f647b40a91a914d2e83b81cdce7aa404cad8c954dd4897424ee9d4953ab01c53086b67d4d1a836033024b062a01b4f451d89bfeee1fd8ab9bc82d2cac6fc93adfb29cc3a812448625707b1c12981ee272c4c598ee611636075b97509178a686e845d39c65a2bec1ea0a2a34aa3d56ae30e19e82613c2f90a20ff6c4d3b24f61bb153f82c97a4eaa94e2d846e0556aafcd7cbb364393bf82067d8a69f9ca20c4e9892f1d744a5cf882a8101ec6aff062c5d688e43dc38a0b67f56342380ff98441c5855a6f547985cf87b0e5519b96ec9ff36df807a222a852f2a8f0771f3cf55d7042862176cf9da2cfb860b3e461784855fb7cba045ecb35af2cbc764e6edb55a31d7fd56bb0c3d8eae05cbb2de18f1d3ff5716491aabb23ae7f6dc87c0491662003c3a60ec22e24902a2bd93c701a70a89595a9baccee05a0c9020a84a1f8b8a45bb9a8cb05a24bfc0f0c948fa9b01aa6e3f2de4fd2cc122ded37b2cc191dfd5fcfd74031451f27a2e03f4769d021e407880426729bfcc66ae39eb22b03d9d7d73590dc6dd508132957db78412c5c6ba0dc259ddc5f6e7b210927fb3e069240c6af3eed610de34944ba0d400af8842dba19414b755c52a7a57aad8b7e05148421b16f80f792f9cc7c8216aee864c1cc43ce5fa1e6acfddb8f418b579d86af4dc06131e90c74874b786d87ea29bb462beecd95dddf61226f8d66752bd7f73bbfb215b494676351afcccfbbda75dbd8262fdb09d16ccb89201cbe0126f0bb44c6e96287b00848cfac648fd5c21a2f2532a2f65373fd1ab44a62db6120f66e87f75e5c2406c364092536b652509a8140434b1d016fca18317ee34dbeb09798b510876e4a5ee8e87777d6e55735c5c1585a064408a71ace37bcdb5d13a03ca5c9a897818825ecec936bf85adca365c6b0c0577f60efb218dfb3b2eca5b6cab639cf815b63534443a31fb0a4cb21379d1a22d66f3876db500dcff96c9011408405fac559e477199e1bba9ed368ee13f4a421912a1025a91a83d78c78e1e01856f54513ee1fe56332b8741b6572929368a1d7631a9cc63357efb70edea66e3b7a8a362b73495e723e4c7196eb2039455c8d4c9a934dd13fd374d00a3ad298b5d9a3a1ebefeb7cf48b43714c8e430419c082ba32fe947cee5a17a86703496aa4cbe2e855bf17e3a652c7a7df7c09997becedc3d8a423c2bb889cd63e2fe0cd031053f673652d7d69c0343685f744bf4d07bd6dacdd11faa2b9196aa4f2fc4d2a1541bdcae5d81564b79fbc499aa2256517bf6b40062479f1647448872e00b4b6ac2e0592190df582baa70930d1bee0d6fc3c1027e6a0e25d8e695f9b4ef57dd3c3272a6b6483212a6d8fad039b6208b8b2e3eb2d7c5cacd54aab74221def02f481c49a03925ef402404317338052b24a032e998cf3771db1484c32b961d04776c8c6a07b9cd5f868fd15f204f64778fd2e7f4f98376cb2c2dad16e9b8b7a95119de18ee3bda617787da3ed27c0bd0d78e3a829c00c39fc4f2797f3fa24541bf659995bd9c39501e51aa9c3058e6dfdc3df33e5ffdda0c752ad09274a9a52f0cd8a9005fffbf4022e8b53d2846851c8712bee422101546c267bd3cc763a8ea66c8c14ef3bb93a8650b640b7220736ae9061f87c907b4c4498107102f68889c3844f55dce74f2b758ea60b0129a696ec522f6b2a079328507d5f7bbed03c9a0a5aa9f6875f5b7caf7fdadb0a1698e3fd866eb506388bae8ea2af4963bfe42aa0c35bcf0d1d5e958f0b9b5d95076ef2f4e730a622c06adb93027ea67a67d68a50f42b71451a5b285acc3a577505e9f2f98c97e44e4d5840574ae0d7069a68d92d4f9b16733995e30a8fd4580871b9af5ae166d3a53962ad5304c288e151194ae352682ee7293ad1a88cbe3ee5799cdb44e571a53a4bf4a47bce41656e15719258797f36d02efa6e3551936158291e625ffa0813f14f06aa11d5636e4ac150d0e92d22ad978aec4aad20185570e6a006faf20da9d807baf2f8a7dbbe465d4f03d6059f115fd0790c756cf04b421a2da7d9bad04a2e07dbed8800fb754a6a18ef38aeec82f4f4b8bfb61a7ce2b78abc8f8194800af27d72ea4012803fc6d9129e3113b8bc19b85dbb26835f34d0ab80702b60dee16df9dc40fce30e65733f417e1154489a7582a6428eb787ec85e81e82d42e970649991e3464750c675c3f09e37abd8cd743c42fdd0720187cc051523ca294bf993dc54a9af491717901607c6be1480ce904123766aa2d865aca3737d2ef23eb7ed81a8cd21e0decd3a4a071274ba84a1c248cdedc74cc909569cbf6df039008320fe907102ea671b889af2c5c85aa0a1010f9d96cf960c132234b7843065a0600a55185ea0b9e6debca01b996a361ec5e907f7fee2e080de0fcf2d8c94611a6434a2533932c6b9135e29b088ae541faeec55a3af0ddb3ebc7f87e77656b7048d11e15bdb97fcee02c1e6289fb8eaef470320ff3cff4c40611114309aa0d3b60dd6124a490765bef5ee8235cabca83fdab3d7b72e76061e6dd6cea0ebe037fe53e6e89d14c803ce4d131ce4356ff5fcd2cecb8d208f4f0e6b3512e09fa016382ca1da9f2221bf8f759d8f88600124c6209f0862eb3cfe93c0a911152c9bf41efa87246ba209c7a2e416ac41ac6edd493155c7f49da7595aeeefde903c63507824ac2c1a47452b70a24cac17d8fef0116c7b95b5470730301417364103327b8234aac8cd1443c71c03a9d16ef50aecee4998db2ae5181c05b11c71e360a1affaa0ed0f6c8b43c192bf047d7aecb81248bf5ff87508a06f8f5c542feda21a672881595860c68664ad24752b680812243f0b3c5130c8e655d294dc8e3ba8dd426fa61d6297fb506f7f17c30e5796d80b3ad2a9d1630b9e8954402abb23f5cd96ab12767f935301f5144c76d0afa90ff879c13347cf2acaba2a058dcb585ec22e0299dcd0184b1a3cf7e4221562a2494921bc726978f60c435d728c5e5371b23b447976f57b3bbc1aee474981fbe712c3917a82b724afd27a13ff47190a23514a9dd48cf86415093ba0f08551ced409505a11a3dc416a12e2232151eb67e5f01a70e94897f483d4a6a098e007c73830850fa428ccd87943134400340c9e480cab0029a0f981b8c86d75a41df4b95c536ed68596830a96ac9aaf85e785169e868bfdc5167155e5bb5a147c8071bfa17dc99b6ab02b0a1e3684d5b8ca11e14b44cb117b1a713ff8cd2373a1e6d53e64870081b612acc03eb32056ab28b5a26da4ed8985cb3af51c0b6f7951d482adff584b6296947c74838a1065c4696bf0efdad4f31b75fa0c51ed73ceefd5391dd9a9bdca06be520f12ae3015f5d427a43e84a8de6303100b381aa7cb72beea74523eef111d3f33c0c1a88b631c995e540f9ba6a1189ed0693b8359e7b65a42bb52c02023c97caf64ee96afb83992064987737aae553544e84376c5130df32a2803b70a92287dba1a5e4bfbdcf59685367c913aabdb7fee148080d83ff5880079d013c8cec2e3f3a831de10883e160b2261627370789dc8b657aa43f1e10dcc4d4374c0081c8a4225e3e849265ab4c824ff8ab41080e2b8bf2e32940aaf411daf4d5b30343dc048e92e93cc48dc123cdb455220be644a1aa6f541d9829aad75a1d6e6cc41171a2fa209a3be2814069d05cbedde23ba19ef669761b6bc061af86d26f75a3b273dddf7365a908cda5b0ba97bdc2c612d47d8631c54875593ae5cca13b08f80619280fd410c818d09bd9b0bb8b24052c65c1f6429073852bde5d4d7cfc971906f2ef03b4160742a9a40ce71a1387812d44ccb4b58121a9d6541400e85c07c02c03742e3c7738572c1abcd5108a3c9dc7382339ef5ea6962941ca1e708cca6bb1a08162639ac5180ca4878fc4c7af7461bb05ea87ca17a36f06927fab9980672f2a73056566040616fa082ebcf8522e76cb9261c4cf5df89a4fa59bbc3b1082347ffd55c80fea1e1223f8d861251cad9450efc63d3254bd8234769cf7aa650a558f2ef8b6ab726aa5a66cb5d33756c1192048f305be0d19789a8806cc7ae39ca4a15a1036ad3a13412a5923cd73df0963cb89e9cedfc849041a838fc1199738db0e9323224a05de1d45fe4c230d30a0a7ec764e99551cffb24c62609ca8e778e926b518e53a78282fc5104bdde88f84ab28705705eb2600c9185a1fc2d8431cab96859e686c62476297c3f8b09ae58a0dcdb5362b018903ad26200ae76a685c49c2e281a7c085c6cedb2fab92f20b36e69388ee3adcffe32258db6bf1155a60024b7d9fb473937100fe3e1cebcb85ce86580e24cc259703fc9bac7b13e471af70344f8c35ccc02f410dfacf8c0c7e05154a35182998f693b48f2302564d67be83e045e0e3575e2970b3b03ab16e5d80c9900e2d18207f4e5a3b0066222e0c18c8c60e6f05d6d089e11cc800d0fbecf378d096267c348f7c4604e877700dd211614a70c351207be7e75e86b8c9e1ca604d7e1388d8190cdcf1f965b0dd9efea6516aa1c91bae347e8861126ece4cc5fbba1ccb3452fea09917ef829b809dc2536e04b05e74c3ba901ca2f83a420fa2e194a62068a008587d182e0d9649ce0462c3509365f4a6e98e32b4caa7dc13bc6836e2b707b4eb869ff698bec12e35211820f971f80bf42b9878384824df4c5b324fbf4edb48f52f26bc04a41b74c0a3d2c716edd08a821d40613560aa5fc2cdce3ccc4fae560c416ea9d95d080e83f326def8c9d5821a729f06c981320dc1dc6fc4c07a0c90572f3ac2c6cc1fbc2a9487eb91b8414b6fc473a816aa3c30c8753c87a23227521e4cdbe9df98e2366d67d72684712bf928cec970e89f99719e66d52426813df655a9625d935ca644abf974e690958ce834b2d0ff9c209d4545c91fcf31496bfb1bb89d0d3ef5ec81e5a148a9d94d92ca2d83eda6532fb33786b6bc838657884ab7a7d3bbc2b7fef6214707392bd5950ea2000d392bad4d170f7fdf12f0e00feb95a854d1e0bd822f1b08c62eaccaf59c785508b75db03858db4c34c2a39e83db654cd478c3e5cabb0e7c73d4a9a8208a04ac0d0d6dc7e6f871810f1a445f16e02e763d22b7a1d7e4142f7c362ee60e183820efe01fd0a6243a7d310ee819dc1d244b3cb79712e866692503466623e0c9820d1ba31d759be0010d4bc8e732b905af195a8706ece40dabfc5e85f2347596a03cc0d1be1a092373a2e5801e90c93371abdec861e3df4f3ae35c5e56ec3b46aa6882c9360076742129155bb19b584711951efda47b0281d58945e7c6b3f74b9b5483b2e0ec339375996190c6cfdb9d56dcaba0f5409649521278fcec896f154d45bebf5df3d8769c79452f200316a5f8c0b0cfc0046eec4c15f5bb90945e6a0e733ea49c6a7d94224e703a1a73e4f68526b158cafdc3ea21457a70b3c449cad3df8a07b2ff998179522ce6a6e0e83c1622a40c541f60f403e88e4d658f40581797a6116999a37d6c57b5783443b7f4c9f1b4ba1c4d85424e30cc7f4d88b6361efbcb9413f83d6ecee174549f0d1ddf95e7e48dcfe8449dcb9f8c3b07d50230355ff9dfe4c5d66e9a03bb669df19c7ce3cf9b3b87cbd33c655ba67b2e2f2929421a8afc8387d8f1bb4da114e4bb21b94699b6363c800e49a3d084608a84a227c21c891fd21c067420ab908605ead1c7e5514111d31c6802b336ff7353dabd52e0de5163ddd60ec0dd511befb7f494d3894456741e43ba55db5eefde71493dc177a00aec08cad8d20385cb3a1d49c19715614bd6ba1f9abb5d880ad04996bf20226d2c25b944f16642ad756a01d54bef4ce8259e532dedd0fab772911bcd0fa6191344beaa8e2c5a811b87025d96a18c9332d32c290c12fb832b6298ffd0b1b8b9968774dc3539ae9ca66cd36396e558d71a86f56e369a65fc6dc624fc6629a56d5dc1f286345b98cd033a7ea5b326c1b5d1a95c69bb51bdd1c7b4efffcca3ec7bc741ac9f91f65d3ec8fe001904ac0060e1158d08495bec70cdb6c11dd126673404ed2e752a4998034100452c4a662a46f5424305c1e7a5069f8d061fe6b962941dc3ee0901c6ae60233dc2b4434236f9426a5b5e21164effc0484379ae9324afa2eeec38f4201a53fbf50922b16c686de1ab2b2e2f25895b5992e605d8a299803b25b7d1555bfe98223fbe47532a212c3d9b7269e98261eec614114472cfdda39bf23eb67200f03572fce11534e2ca68ba9d2e1da1a59470c03daee802d630988d10e36d280031a3cd69f3ae1ff12b9675da2d3d2b1359dad3c9d9f30355aa870d43b2f3ecaf70c32fb1dd480cc7f2c974b3131d9fb71069ec75a47424e90e92c662b5503c8ca4e109ca7afb77115a81ee683c89249122385186e8345f2bb6825c0f515ca77d5c8ff2489294ce1f5bc8091039303a14c5bc4f067203a180464acf2be2919fb4003f36845d2c855ab605843ac77492ed6cd240cca26828f50b8ae7b9e9c2387498bd01499d12172acf5567271dd639937d408ceb3f6e9fd858a519479f73788e71c8001e0482b32afc397691001db4046bbdf7b3241b3dbfb4a9d3dfdb63079f2993caa9e188f593399e76d3f1b382b5a3b9b79265e2b8606725634e7ca18d89c4baead8c7aa769bd76681b06fa5bd823a6bd6843d8dd3af49e3c7ed537141e5b7006d10e066d26e562095b3116e6a0d36f4b147888ce13cfd66f433ed45a1ff83851462795700fd707adbb9b99b802579ec7d55f02279781411ddd188c91d36a81146f4574da6346dca06a15aa4334358c19096a01a8b6a994948b03289a405787c3e79f230e6abe716e79de25f6e834c3bf427e4d8d1763399364fd80092d8c7ff2d1879461c58ae08086795e24030b01c34d4c8ce2f18b4f28b6bdb8e2ebc30018309105bf2160f4e318f9f40928b7f9d4320f4ec471988eb53bf17ef6b254b523d94fcc12124ed3602b7720e99901d5c9941a86b57a8169b017d50c1fc3be03e5748aa32cb1639f35b8ce6e2442885b67973198172bc3aef85d11531a85ae2ca6deb7975e6d8de1fdc2651ac3a45c3d2a2e4246213dd61abd343f015d05fe8fecc4f7a592e69a041abf698bd98462268a79a008ade3918495cc8fd6cbcca49bd7ea10afc81d9b1e016e4321f4601ee422106e2405c3d6ea6dc18eb944df77707c830250d9c0e871630184763070907ebd624ba0518720764f6f999828b5c0c83b513e31d16a4103258a82c74ee0e15e3d8182bd1e2ecb593d3097d9d52d0c5ce2e6bfaaa061c17455784470922fd9c1df3aa8e37e98e671603064dcfb269a164d5e78bf6be97cb73339145ae6fa17892e5aa96b85c8758dd42a23cd199b11975277b5730a5cfa4f7e9b103f3bac22735578207a88024f60910576fed52f5ec394b5919c917fe7fa245538e926d2d6d4342195c0dc867a08ad0497d91fd4a0017fc30e7b992e282e25620fc861730edae9104610df6eeffb3d120895a1f755d0e350b09f74d79e9c8ae2e78b0cfc3961a9ef25c62b214136a656f3c9b058eecefda873b522399d750071514a5c4da1e4933f91b2ee14e473d0886db2e37328d094329dbf8fd606d3d6938a827cff5cd232e1d6d148048267ba7090e49c37832c631067829d10cb9c9e3087a9e281e82c533fb0c39c9f8865eb427b6301054cb511e688450cdf622b6d9a90d9257f8202235f68556f30ca98e5b71fab4870b68b9069ca3c3a446a9e67b240122cacccca92403931952b691c4592ecd23314a404627e424e52cb7ced7eaa636d3fa7f63aafc7bf65bf062d463fa22427a1011389371123e4abdaf4f09d698eb90e6b262ccd75d2f0ec680d502e7099b6a3f12aaa4389cf75aac3c961a1e7432374b4d84a6fc4085048ee2c55023856c3bd3793e9abd812d7e47595d66620aea3dd0c6e2195b0756e411ed1d1e2e8f456b44b7be31b847ea6f24d50d551238ac722ff574cd08019133c8e7c4aab3904e23004fec37bbfaafba289e23ef67663a0d1de1028739138217910c21f99f804f607cf8a4fedf3f09a01866ce7370b9def3d5ea618762f7084a12406429162590c56e7d1aec90484e518c2bbb53c61e64a472ddae02ed622c99468e80f9e666a310cc6cd9b28386537f317f933b8701c2ebdf7601624b4f6df79c4e06b1414615faca754659cf97223e0327d6191d48f486a5ad2cc24f5c6e0f89cdd1fc00b288be987443c932c745e5c245af448d6a36899d0cd60cf03f3107f7bceed4f160e3b8db1d0b4e15c1940f1058146c4611928e56ac3f01eec005feaa953393ae348918ea3cbe46d8c6a24f291d1c7aa90c5df32a3dbe9c4787458eb0620a411fcd9235524ba7d4f6682fad06e48a540c2e7bdff635976cca3cf90de85f6d877d5eabf94a63657b6a615e2f455835eb78b5766b22baa85e305243b50f654b70bae68a068dfbb2421fc96cc306cf72eaa2362122d3e125db542d977089c21c66ea35be3848e875fc36b10e3164f523854f38fe89dbf8232b291712e66fa44d9e27916db1611f822d1b3d5207a4fe2588ac1b2f187ee1da14f8c2f7ee106e40edb62600f70fe90a6083c1450947162e0a44f6296b9e84c0a03238be42b09e33db996cd02d6de896d16c9959c27c71192f748c90a8ff9f08961ee2b119e9e663c54434d0aeb170972e4edfced661fd3a27096b968b246b694c8c4e847df94043010df28037293012a1890dfea734d14179185899697d07c164f3df509827ec6714e4996c25b1da418294704e4b11353b2e2a328a614157c3642b4939b837ee0b6f64a5cfa1498a542222a3c3c9c4a5d9946c114660fe31959d5a21d1f812baeefa9ef20f015817345eac7d9b82077436424d7952d2b90bc031b2f6be67ad26940616ce68ea70b4bcd48aed597420d76514aae96286a2e0ffe9f0bca8bdf2d99f8a431f8706930c219f5b34c1a326be9609a38a4e736ee41923e1f3202eee17fc472e8729e234140f24f7751fa43ccd92ffca960e15024188d0390e34b5522f124586b3e0ed1b6648292d55d3e63be05cc38650a0de6ee462e16e04f499fce04f63439f1d04d48a9f36856d418325a1fa22bd4fd496394677988c675f4154799c9a2850f2e5288995106b24f649b80ae9b10b40c67e4ec2263ad35374c912a154325717c41a7820796b38299c1e43a02121f48acf3326f99031190b65eeb623b8bdfaadcaac8ec0ad974fc7189ae49a07b25831ab2f8bb3cb43145fc72badbf77fac217d4d55cc12e807d8e6d4af0fee45518489d594ec22bb76d7a321b897cd43a65b223c5f9436abeeda099b90d81555a1c42662b7f2b632b9d5587b7947203932caceab8c7a434e7b29276dfe55cfa17fb2e0f744983880454b85ab5c32bd14683f7a496c4c5bfbaa2d803c533d1a6b695fb367955fed964c01c9af8772b1b56444f7ddac201b348e8a30cac8f0cd06c92b258e52b47dd7e5a251f636c21af25f0f0cce80661b32bfcd020b5b3610438ad9b4f457905bfc13a7880832a07130ebb23e6cde5aeec5cd345da94b18be456ea5a128ea9b38609062dda05ebe2df9d25fdca442bb980a2219528ffc7919ec755813927ba61b9816e266ce4a85bb71e6675acd2899a5d2d3153107faa96fd7f760cc7617db80ce6c625e28ec080af0270139c2e0768c99ea484438f3525c8cf9c3911c64bfc235756b989dd1e4db5fdecf2be2c229f94591f0b7c6bc7408cd6c6e8f8117c9a0180e4325c1e0ba08dbb3a9958e628d3078b46da148a857731b2be7b06014007d79b7b702201aa277aa8d37c8f6aec9252f9f6667da52f8d2d813383f13604963a8b13e10f34def24fb2b7dbb612214f6fc96d12ec8c2654c0932277e20e39b7b7d441d2d421f6911c164cb4821c949fdd328cb9968300ac342d9074953fe61f119c4df7db8092247da7e42510fa258b4ad6be26d2f8e3eaea7fe1e6d195b9f16bf6d2429573fb874e85fa242a6bd0e8e064d35c16ad5739a91a4ccdfc3366619a8df80357d36b45cc6fe7251362cab354ab5b9b3278165dd9938f60648114b7ab0ac142bb01a43b2375f25b77f4993e951acdeefe7a2963faa1509534c3e2793d4865821f52314049c23134e554b2ae4589b3f75c075d3259eb9d3ced8baf811766e40fe5984ac1306da55190a99b3a0adaf2c25895ac5f897b4d859211e4693dedb3d9524981cc0cba6e96d8f179ddf1e9f57721a585eb65080a55969d1a22a3c0d61e0e46843ccf8b20249d341c67b8b596bbd0bfce8fd6eb921ae1f46e0128e905eac4beb8fcd675395bdc4d01522af95f075ac7e2b8e85502d1138c766f4fb5008f8db51b4e451520bd0f3f36fba7b0ef43d4a73d98d6d7c30b9819cbcbc9584bb574beea53eb9eb8b9980c65b8629abab9dd373c1b16299df106ff42d681a8534fa04de806d06f6ce694491b98f1e8bbc15c26b6c7022188e058e1897ed659c7e54392f6d5329031ddfabe912954645dc477932714acf8be2ded944bfe7a03f084214e2982460a6c9dd07eb7925a1c5d40e2b4ddc98acca63f8e0ab14cb1823ec56e51b811fafe9beb94eb8a15f75d4caa2080b8263754e21281ba91ee952c6ac7996828a70208d0c742dda9142e9c7120f61d5e2714e4ed5c862787217a571ad8631c24b29a8010405e82d587d3b0bf127065a8c39bbcd068a14f702b5adc7e2a767417a692841400bacc8bf520c95d3bbd44808c634fcced027a06838d7808088a50a9cd68f1a16b1a1a2bcfd6ce3c1dc4d179e4a3e27f6004d0b649a35325d2a5f4e95d7d2f6f67ad4b4606f8940a8b8e41d33789959e53fc3341ad36115a25ab943edda2beffcf4c13f83055069acc8b7afae750f3289b986f8436f3fa61b1cff73731cecdc8465d7f789f7622e10bc99b08f5a990ba8a4b870283db66c357f061a8dc6315c1c9b211739ed482a9fa15e4407938cca5b17a43f439af359aca317af6837f359a64f45637dbcf3bad9c1ca189c650783aa0693e7345368906407fb57bac86496423e64017e777ff301a26d28e4eca5f0e27831a7d0cf7c015f6e5612f87d7b329961c46aa2c70d1a55e46e05163c416e0db3947fccae8052c9a272f8435a10d3433318f34f4c2e3f061a5a858033f36bb60f622f064c2c12e9dabc6e050cbb1444652560ebbc84d32434200ef7ab8a5706ca6d6aa52ef2c462a90ec6336a5477cca9d64a0d6bc3d954cff06a0586a3b09806798085ce567af0351e58974174028b66c73ae727f5148998d014c7879dc806647faf5d159f45ccb88a54d435ae16834cbf5de97cb17fa72d85b0b34f8fd7b2e1c08ecc6c8b7a7cd176de4e76095ea9842b9240c7411811cbe824b0c5d205227fd69acd8834d053315b706b2cb0debc12457481cb75cb25300b0a1a311f50624eddaad7f2b8733160f97385e12bfc9a900e13965c675005c05698fcfcff0d1a97f485e66a3a7d19f810f11576d130f8b6b5a2094a70830e622fbc43b46ae9fdc672b8e95144ebb374c4263cf5251eccfc3a92c1b4bd21db2267bca6efb68dc212386029e7f7cb8ba110f5b385126010a32d0b22a9e15a3d727829cfe04bfdadb6de92209904017d969d4f96c07b900942134093f69a3147102ee824688baf64032d5f45ace92890cb8e7e40a022db35952647ae17ce88b36b71110613ad180951dd3b79c7c9fb84b561c2f22cd03436380897ff15d7e6d9dd4a9ceea60d6ba5e2e09b6e66b3acf93371ca830929240a8f772c9641c85235a377a51b3d6028d077d559a449e403940ed9795a54d8d38e9dd2422b1130c920229c3e731874335ba0b51d152aa6401d7107d81e39c9c88cefa40df024fe30fc2d89595fdce6ea1af1b3126a33c97168fc220497eb479b829dfdd0f2bb6bc9690be1d14683ce95cbc115b3a2a09d49dc4398eadc5f3caec085cd1958814a4bf4e9ace923ee9ceb21bcfbd1428fa33b44bdc5ef225bb909c9b11c0cffd2fcbddcac0c7a5eabfef6386a8a325c5eabdcb6046a25e5784d735148d91a0ffb18e030acab7aaa806d03e9109856647f9540a9af6a878dacc2f68789a347e3da5b892add4b802c2ddc4fc0ebd7a0e22c1a8e7587dcfa35b99f5d8165b44c26ed984f60d014fea2a5d9521ee29c81f699ff66f4c1e2e939e0728b142abd2a82aea114abd43cbcd57346cb458392d8acb208c010a8d31c74fdd1c1fa3ffe153b43d22c43334f2347f7f3e49c34ac3b5566333fd779463b16f7eca5975726895900b194256afc825ad61f9ea69e8387ec666b1ae3a6735069f3a9ccc110742a38c24962be7ac40b4321620d1890b248084ea264ce60882d49924fb2bfb99f4424cdfb2fcc46298985f5c77928983b1f53f74c5e6f70650b41f7928f41854bd5102ba8639a033f7530636862025e9a4147a16502a814078d40830150e9063196160660a41b741c0d66804935d838341a00916270636933011a947c51774560d62d39483d1ea86eabb744c6ab2132c088206af153f2fe3a4130dc71e95354478e745b0b02a8eaae439b11d16b2f146f3aae4316f208f12b61b139baa8972016e5c91604408c82ac7b726bd19e9675398b86d39c20752151c48cf2f7ae61dba23bf1885a5deab8e2cd40c370a473d59c60e39ae6c4f612cb3f9abb082bd91f3d9446fd59cec76e43e5fb30e7806616227838bf33fafd38986314d469184b6ac06bd46ced486f2ee9a82ea3bb1095ae6f9a46030f9986563ce3da45ea533a2b5106cb5090c85e0d6d84252a6eefe0bc1a15b492dc37ad07145a51df64597769806b84e54131fb1d4560791118201072e6dad4db0b0611cdccef7455122d1c899868e8b032278d995c982f0357c12a94c926d030fb82bfb743836011c1b756af696a9b4f6be5310b025140a09946176a18a4f803d6e25c348973e33813924c9881349dcec523094304ad34abd2f7a2d92180b6dc219c59b1232518b4c6626d651272eeec13f4c54a99589fb92826ff438a596d70140d8061f6223b34cdcaf72ed66f65a5b52247801e6817d029ff64aea0361edbd9589e307c59f1b2e541d661b0e0819421a334b30686001fd32b30ec89dd2d9c6c42b3e22d4bbf8cef0f84055e2738b13bdad6d389155bf316b9f80a4eb06a48661b0a469fd6e292661d4516c9ef6cc988700c0f9054f17cd6f1ac39c09a4b82c9106c329c52feaead4d80000a21a303a62602b5097edfb2f24ea2bf4ddb9cad8f48913ee0078d2eb28a13ea7bc7d1cf940c9d8728bf92fd9b6479779abb1f5a89e875fb2c7ed2af699cf265c8d41822b341780c27e83710192ce1a982e1d23ba47fc84bf3509471bb929ccab794ebd530448310f3933c0a77f0188d019baed0638a9876b324978c34d426b0234f3050febe941c163493863c759387221bc76d94a376404ac9240d0a18babbcf072fc10e76a7ad0082237f0abf5284196e7058061aff7c0f7b632c786bdabe68e6652b1017b62465e9c4f4e18870b63275dd902243929c65b7b7c738cd580b872d002cdc486903e2780ad865daedf76ebf621d45c3738fb643b52a2d995d45665568d7b0a21af2a83049613da86a254c44f15abad62ca174e41847d143ee797641a03ec4f85f1ac79d6d9bbd8cc0bed6866ae30279609ef0bbd2216651177fcbffb6f136e6037ac49c402800960a1a46d89c99b349e7a6582ab39003395a5f09d4023a99dc4426d0373ab825a1df78b19be206358a20ec18176c2816416c82865e6e395654ce88f15f3a1d6798d1e299890ca1bb901e0fb1c7f7118d05b1e5ffb55d380ad1fc87edd00eed728b5704ed0ba23aab1b501bab02ec3a71bf92ee50018f2dac78e8ca7fa003526924d175ab947af6ecca4dc5d2fd2af587e2b6f3afcb85543c6d9ebfd2413b043605d4406cef7bb92534bd3e2496394aad1b69356f36e6f6df83c367d1a88b213257ff8b06a70e3c7104a9b911980b0acbdf6c32d10174d663d77a97c70e70bb9a79d99f5be2c59a502b57944a4da8c4b10396aefd3ffa5b9055ecbf1a94f30a3ddb0ec1bfbe0202f1779d1e0213d2c31d727e43343beaaf0981fd5404449f7bb3ac3ced9250910cf0d5418f4f7e83772e4740d4b61a5965c85546571d01bae97201ca1c1e8b244e0936bfe374369f18abccdae0fc25a061789556963b852f5cad31dfc2072a572dcb8100e4bfb0833f73aa8ce9456282110764899be5a6c18302f0e931bbb4ea274f9adcc5637f7fc259e80d63375f5fee307e6705d7e45288c1b1643648391b4862fe03f165afd6489d013521869c797745ad75aea64e1e9859098c8e7fc46bf83453d21e200732004a5d937865bc183f80c3aa6aa061fe7138f66e3794629a0171c765a63ddae13980afb746e5c9d8d2df47f5cd0734fc045aafe1679d53f7a992024127bcafd1ddccd112c0bea3d7e03ef50ea71f6025a0a4b594dd83e405211cdffa97bd134e407253aa66df9490d76b2e844c04c45d7dc4b7c95d70532f50f432c4b7c6ec0047f708c863f4c538c73c47a46716afac09d5814b3c3726dfce788cfcc62ed09b01a29b8a620f2b338db21c01a207d6ebbd10b03472426ccfd9aa3983b1998078cae17bcd38386cd291206a637bfb9ffeacffde949464c91df15b6ea21ecb7d99e7fe47f0274374efe092dda2870727093d3fd6de405ad1c367f555b125a387ab72d7b7c441d54c595c4ab8c0057664713db2fbfaa8bbd18cd3e686bce993a66bb931b89e9e4edeae687d557f265a76964d1a65576508951bfcbc453b43287308f5db17580336d1c2bffb2bea1f8dd930e11c31b2c472fc3afde0e5a691e338be346ace794b344663cfe58b029bf6e5f929fbea221dd50a8362885d120fafaaa0b3a595ef5d9e454509564ef707a899bae4ad63e23d98c7d702c4385afd890193f67386f6a2c16d293ad0d93bfae6eac401afcc2eeea2144fe67a0aee3ca8e4d6c5d99f02e067a60e291bc64059e5f92ade00ebb86d319215400fd6812010684da1607e4562649306953b8036f210a8006e1019bad049d6c8e32cea469b3ba33bd9b39030c8ca9aff1e9b36763eedfdc3029afcbf2a1690c73b7bf492c3143377997165426aa44da207f1f2eb54ac21e8c37c020a1eaf515b9e6fd2fdee74506089366aae7d32335afada6a29c6c259d2bb73aaed2397fc19acfef998f20a5d361052baf363b7a67b466f43982bc134d1d795753fb6244fcfb43991500d84f68104fe77d99ed11bff8f7762674147e7c078b51a81580d5de685133ca4ae90c6a0e2658cadae2d3d4363e5e384696c2f4853fa0bc0786a6d2f62bdf45972a629025d731184ff32014c4e8df21dc5565999c9c472fb26fd637a12b9ddf05c627c8209117bf861b62ed67ae1ddcb29709d1042f529cae024c8ff1dfa56750449f7e173990fe838b3d3defa80c4fba2a85110e0975047efb1be6869eb459e8be8b49d215ff4d88a5b69eaef87f396ea45d7ee44f89a171d4ff8360bfb481d0e77d149cf9d319c1eb65754c78b0eadede220683a6cf8db1c256806ada5bceffe34f446ff0c8a2ad989765d53a83bd2890eaffbe411b49bd602534d363c4b8ea4052ed80ec448ddeef519900018efa043453f0dbacacb6fdff10bd373ffc0f47e16c7dfd61de1769c87736d386671e294db3fb44c51a1b0205285101454a119215a1f7a4267f496086e590fd23f718dc89b25cdd5634d6cea43615e4212de4f02d2fa01ab29b13ea2d54e00e7d9aae1ebb9bd2098062ace70ede86d3176b8ce78464123d2b6b6d233805e5a8bf6a58f8c84d86dabf3c7ecb782eb0e580c0a8187817580e455428b95926d6d250a92b6d5d7c64b5a46da5f892a7d82de41c15399c7a5392e7059214ae9c26fabc2c55ea6b290301b3224b7b6faa5c27b374bb24878eb8755dfe656bdb4fee324e70ca2544f89cd59116f26501cc2b994ca19c9815efb28cc5b8cac36913ffc62d05ede34e44556ec9697367d5a6662ccabd1a8a9c07af1dfaf272cb26a22f4730c8143c7accaf693cbba07e594d2adaf4f0a0f1dd170a21090d0509e601e2c767988fe5102a14a1fcc897f2ff4a8fb63b96cf6e8e6d7a09fa86f044f2820cfeef57876317b0d67da909bff7e80389f3fce385d2e0f2a2a25397465710278685f1d9c438e70940f9430b4e386be4ecd6f06a24cb49b7450d409c2e287a8ca90c9d8ad8aa23d29e0c8642671e2e2340b57df6028d25118863927d08fdcc1cc0ad07afaaf1a9ccac118ea99832ffae9abadd17676a7f2f0ec91d832dfc21caf2f4f94157cf2d07991d9c9766268c96d26fe249c2bb7df044d7443bed73c3f7a1c1766ab562ac921889980106f7e89ff4b55e2bc4937da4f621f2b0ad4e6033d7b47a280e6ecb1b5c46a2c013df9d7aeef11c07efe437cde5310d3a792d467e87b865ed093069b1ab8506d95e7a1fa0d24b74dd1b17ef8d243168857ad5cc6cb559fa44239e6fa097cd4edc3e20e3dbad52957d8faa89165f2b35504cbeb37f73f215d76c274858f234ef4f130bb8aecaa6121ab807ee270df145e5f008646eb8fd605cb399ba8a453d08a0ccbb4bce83f692a769f081c3e48927bcb76cf598ebca80892cc69c9743150b7925877ce1c6c76d8ae28c642d91772c21da09b4ea6f70c85353096f3e4597295158fc2b691d871690552b3a89068e366cde9e089019527710385943b2b9ee01cfe114741f2814dac82c91726e10a262f18ca28407e6009af207b81a53c05e90393710ba2070cc229805e3084154b40bc8a9279f306dcb5c6d4094fd7fc64083b18070656c0af692778125976667548f38c3caabadbdfd077c31eb512e4a67f8ad765744dde1907f185e8b6bfc7058a26509d243c4128726931291ce14355c436e8010b585c683ebb572414d89819247d1b22896e8904960312f1a05f30c1447eef358cc66f78f04657ad1e8250cb866cc14b933a2499b938fcb325a42137c699780e0ddd9afb86b20e82b79f07b823fafeac01674b03001ba30434ed8e7f18555f0835413b6b63c74374e602aaa102de5895ef832936c508aaafa069cdefd819c983e13532f371d6aa145c87e34ab9eb37e90712b931fe268c3cf129a58eade43f3b323e77def45e885314c937b9fef9d6c72ee3156b0ee833d13f52a434d3f8c03f94562dd9cbf59361b4f318cad3a91bd92be336878e55a906202596371b08c17b8462d2c7e553f5c56e6c556531bf079a20001268ab77ea5aae020cbdfdc2100c3f39faae4d6df8cffd18382dfb24caa59a288b370785fb54107e5405b0d5982bab7ad7e0592900835c23b59e960e2f4b54a6db9a01483cff57d0f47b92eeb6458b7100d00196e20021ce7f45a159777d4cf021280562d2b24356d913c7252a165cefd3a81192c5fb3f57e3e72d39cee7309bdf13e64f4e5622eb3859b850b0838e63da483f481a68f3c85ea3205f5c67fc42f0eef0e1933b7810c9f0e20058a566a5afa2dd7356f7b7b0eb9b8f7a17cbe04cd821749c76b0e8647f55aa370cebfcc64d38803c19f9055d36dfdce46e1cb4958bfc2bce9b81ab9ba045776dbc4101385dbdd99eaa6800cf14b021e42e71dc49d20da3a4c5f49c569efd6cf0d5823e236efcbae768fd0129c8b422e72d30cbbd84855eac84280dcfcf90577ebd6100b25600bd0323b113fabdaf382203f561592ad71d01da2bb08c8681085de230b456709a721a0f0189dc004952932fe86e9dbafeeb55f6ed9b1981f1fd63bff16fde0e689dbe24f241f0e1a20839de1d583daa8c56f26299c6cc1f7e981a02a61e89df640c507685acf14a179abc0fbc7df4453f00cfc62d9b684fa0e1338a320af9e305562c112d6a0b3f3e49e0a04294e8ea1fa1b91cb05b9c9cb323c43c380555854ffa7f6e683037aed8968e41a3640494ddff34cc9f38a1511a3d1a6cbae863c3b1f43789dffd6fe45f5480b71bfa25c9f76cfe02932fcdea38a0d167886583d9ba3c87edbea42c2c25e0e0492d8be527e4c475f5ae6445bc66eb7fc42f03d8ff5b468560050bc62da4abe5eda5227686c07d65ce818d756407b72fb898f2f0f90e73f1bcc04ba494b9b085fb4b24f082ea656b545194e4e8c0162a07e2d5f5edd978e84d579c98f038f1f809f148d101fb808beb361318c6fd89b61861afe44354daab991907bf41199799fff9024ef5c053b9b3140641e13d1b94c731e8e5811c792c52adcf0c8e761abb1c2fffd78267c1e31742eb99c644d3d2c514664029834cc8442632939530b2990632c8ccb2b8f8c334106a8d36d8e560237f506481b05e9aa49197fc7681028fb8f813c5368a94de4ea0fef29c68fc1552d360b169a6fe108b0cebb19275648fe2cf398bf7eac10b5035804235e6ef72e3afef9687308c838b89a2c40e099830ded4b968df01b4a7fc72f774323549147861720e9b1ef40b7f4aaa9c939c94fdd96d4d2a208009193f840b953032f5dd46e93b9f10d6bc48c66253a65152d92c93c14338c5787a2c699e5805fe020e0cfb9a3f8800c723492adb9cf455af7461d489d5d4ec57562595ed1066e4ad90db773ff97485c56bb95eae0ebecc831a2cd7e976f189470aa2c821c3e8f4001dda46bd6a47c4689f2220e71e4f230ff0f8e48b86906bcf4e0737a14dbec02b8b0113921cb20fec2203a535ca522e9997ec80fa50ecb53f41c2b4c03941723ef172f3e7793ea3c7ccd9c2a536f6b9d492eb084280e4967b76ef521126f1042f9ff6e8f8e6f1383904cc0b7c8adddb89bddc5de71f7ba006afaf8c2e3e9f1dc7749115a215aa0c79016f47e76387a8c032245f171b2d8274dc699d28ca4cf3a420d689f5e472cbd1a79eb275630e8d414194cc17bd1e73962a5f6996dc32851b4341923bfd7ba2ae8559715aeeecad94e7967b6a25ff6dcbcdb09be4ecd2114c68614bda6ac96fe5a82d644fbe8acbf50cae16744268482d122028503598fd18c6ea7ccf6eff6006485cd816080bf41efcee097a33672e5caffc874496f37436c91f59ddefa1d1d7e4bfe2852069c5d1b8040ee6c6c0c8056eda7162e0c1b77a001e57a54e1533128fa85199cc6ff6a906fc802400d15efcf872df2676e769547f805e50006bdbeb0d98512a2585abc67b56971229bfd3218e4cff9bee3e0df859083b8c5929b695dc4638371855ffe90b3c18685c772335fa062bcf916fdef6541a8d56b90c20184282be13df15a3ecedb1c62560b8945723bb95e7c1c3baa73a51a64b60364778a9cfd72a84dcb45aec05c68806eae7aac47b2e4029492d29e192d62736124ed451b2e80d867af56a9f74cc4da55927dde5fcda818edcf3d350aaaad603a60ba21f2a875a48a717ec88bd77871f7c41503f9471430d9f899f3fa25082fee6879330562372e082723b673f1be3e3a3225f306b1f8f8482a71389c77946489c0ce6330baa080c6bd6dcce48721ac7d06f19e6047fd78143602f7782458bcca449547f14ae01b7bfc393535950f5047dd049c1ddc5c337094d2ab6be6d9fcc381170ba78ccc19847fdc662db8f35d1e8abeef6a64d90d5c333d9431bf8039304d10a329b3268623a720fe8eaa28a2c8f0ba6e95cf9832dfd884e473bacbcef192b37ad012475728d4bdee82c32298e77687829a60a1235785de445fc2819175e2ff0066b7386b18a830d4faa13d203ed023e873b665b8ea1ace3cb90228aa7bf92591158aa974dd2ce83355333fcfe4da09f6df628340b47f0da85c04c70a6c3d6b2b5bc8893417b2e28c9890ec8473405dbe198eae208485d7e78d91ccf56647c30c32f03a6bee7868ffd20fe8e222221688810049a28d3b8d5e43aa45acbd337f66a8fdb41da3e24bb5544087fd4516abc1742c8fb1ab817222db5f808779b78e739c45277e1bbc0a3e5d7dfcc71fc96b294659b994410c03bf1a4e0a981c96182c8c4d80dbe862c8548944c9f6a770524792007d2c6a88463790b0752cf53420a0ca470b61d8bfc00847a21332ca8cf76fa124ada93933c2d54814d348056a9af2cca2754714357c9d195a31feddee3d9abb344ecc4dad2a65d7aa738d3e3acda45cc187f56d21b1e6c57264ac95c6e605277ecdf5e40cdec56a8140af8299e44bca8fde84063b343489935b21d99dd17b78962a9a45ac3e3fd46cffebe2c162bf1aefead779494cfa3b8fc35e414ecd1d1d4f67ee43431ca84545896de472c5b24e8b7c40155dbf7f6921555f454c923fb2fce14e2712acfcccea6cf6891f24bc0eb281bcbe5bae17211e38fa2935a87cd04463aa177d11b270912eb03efa615712b9bda797cbebcc4e1b4d23e0f158e7b94ddc4a3a572acf320f66360cf8614a2385d55117ba538a5e19be307a98e6206cec407404d441fbc0d330c4e8696b842b8653922152f222ac8cbb9f2864be58542daa02874e8db448f9daece7abc674059ae57a4dffeae30094f458d985cff558c5d0dbb45f2cbf986411872c868f1269c19b7d2ffdbdb843f4b06d387737b4ad6c93d184088c9afd16577d80c301bb582d79c140aad9c965ce8b62eef0b8cad900a43b5cb3f843b422a056361a1abd3acd0d64b7df644c6cfef632e9e0b86089f40773b42794b347d27773196d39e83a2a2904669aaa460465db41c354172491048a39caa70d188223dab6bdb2586043511258ff7c04badfe908517f977eaa835238ab3a1e5737100321aa3cb047a28245436e89b032ffdcffd8a75023c425197ee7cdb4763f11b13de513aa2f4b390271097e994b9fa47aadc96bc77200d2bd06799a0a4d2fe30fd66ca0e7ddcb57042480cab26040f6e849217140d9d7d71104495101746c754307016b0c30ea5a4f1a83447a7aeb87dbdc68b98eed9ad4ace74873a53a2f82f8ba3664045bea119ef457d1bdff5b8bf55d00a0b919311374fdca44bf2abca042b6f753530519bca1e83b65e2ca5d8852e0bd6b3ca73737f579d16910b40982d4b061052b8d59de564546728f1cbc77375d3b362adea7c4f1f83c62c5d9c0d4ddd57255638332e98ee8965b47e90f58cdaf03b9438081e62fbb73ca0a6bd164b4ff35e94d061252360a1b63a3f58cd785826b3d4fcc84023ccf57f62b3cf61e485c3b0a2bc741c09e42cddbf0f2bec85b4765ece041f563035b41adbfecca3c888caf6a5108671a26cb320242af1e9ccba8c21a9f4aadc97b0de7e5d0a8c3153a7c0a654c69db04893580dc00bc8dfae4e2761697c5379511e1d13425888270b466b8db0f44d92d4075c505651079f18af5b7573182d7f5642a88a32130e8531a5c1aae12d6c5a3e142d3ec24cbe4cbe44511403a37ddf937d5765daf4a85db34d598ba2dd3520216b0b19499f644fd2eb557a0b9a038fbd032ff121057d76f2ccfdd9e491169faab107f0b2ae5fd5889fd2bbae0cc5fbdfc5f734b3a7d5b5a6c6329d634a9919fde1815c601bcf2ec6590879550d5eec20a41e88bea3ffb7d46f68942231587aacd90f0e2efe9d0a5414144d681b90da30f27e5f3255167d0a09328d66be590a7d1f69c1ab086a7e451ee7ffba814402ad97002d42a87ea3859d1c58f23bfc66c1efc4fdd3dd98fbb074c32205c9a6dbd630bed5e1f3e50660c39d15df1dea191f5409669618ce4d20954ec5bbc2c0d0a81c12bafa71d10ea881118fdebb10949475ca01b5eb14bf67ff47a21170188b82bb90db29f29e8b9e976789d0a07fc6b2674186bedcee515f76828bd8fcca2326d19037afdadef6f2b0ed49d9849f21ac7d2c6e8d1f824bcb81b2e94d06c5f3f6ef5441f245f75326309382ad3c2f9ee655f0aa1081d02a2c0b3858f83083fe06a2fb376b106cb1590087aa1bcada0367f305282baa43acc36fee341b63b522eed1a27e438852b9bd8acba91084b3064a81b5f06e625d964e2f56047dd9874c2d565002c6933573917d0d2bfc0331acd8b8623228f5c10e857ac93fa927dbd3968169d12cce40745eede48d88b7fd5d5be1ec6ace220690f9514c7ac4c610141d790f6635ca61a83b6c6a900f12b604537d5a94620ea52615824799d3da22751baca2bcaa3fa17ec34ae3f89fec0fab5aa2dfa3ed553ea05bc8ae7672b991d4ada6d9b2c1a96ea5aafaeec39fd5b71617f0fa9b9ba435f03648e626b94d2ff7468353a52ef9115cbed71dbc1d0c3eb9f8a0237caa3de0fd18deae24d997b5818b210222230444ff5fe563d5a4f47df62495961a932585a2e1f01a626a536d935d4af49d9b862ec81a0281abc9c3d6b05548d534be8a6a1fcc933c1283c9e9b9a9e11fab7acc0a9c24db1e06dee52e23ef9db947ac7d0c6c915e01f2796324eadc218162ad124308d96fa96f18facfc959ccf34422e0f4c7ba0c0b4f521376f4a8f3fe5915a0263e3d34d733028d831f7eaba9b652d1b20bfd66325015190da2751f31f82938b48d856821c749595cdfcc064643eb90b41b9d6c067dfa47fa6c96a3ba14fa9591ba2a5db2466e328b745c45214807dde0890a8063264158a8aed8e50344afe501f7404e397c3efeffa3c21ba5877a1a0472b39d3d79e54d50921fcee9c87417b961454edabc0e9cc6573399bbfab05b2614036d6a0343693e622bd613f638a03d7a19c69347956378b8513fc1aa2a7285564602a6a4d2af0d70cf530e451855690b1d33fc18794d33231d6328eae3d9c583992594b438ba2147c7689f56009f4133c25cd41603da9a93e9e55cec95eba50b57c35212536c4002754bd9c6b4310adecd0d77252ce130d6a56c299eafe27a49faf0277721d1304823d9ed904d4c697fb86bdc6361cf38b503577fd50426d525c3a5eccd27dcc0987c362c415d9fd3cd6fac5752f28b203ef7e48b467e637a51b6f88ee193e0f770d207727fba5b4f9322a893b6e2e3dd4a21c55cee233ecbe7f60e0829c5669e95f57dd4d80bc49b594891f222a26b772336402171ae90c3574f7f85bac7709e98c60bdb54a81996ae217ce60d3a86da1583c9e0f72d38c0630cbe73223cd000f716cba5555505c846a1c719b8da09aebbd0751e013bccc1ac47b5330dff49aaa985a91ee480d887c88ed2dab7bb29289638c59761603cedbad646f64ef314f1d56d886a095c360089eb6ff81c4220c019902a2f5669bd1377a18254401ce0aa4edc3d4dc93bfeb743ff7595374c9769de505322a80136d3b390067e2033196bb98d77ae8d4c578d9ef8a2e11447977812c21ac339a85b2070909f3fd76b68c7aec54301093569b8d6069e6351a619a8c15afb4fb94d8f13cd294723aa5d4270b6e1f5413f27111d5408aeff05357ad81476029efc44bc0e644731b9a6f56297ea52cee83d76ed2e56d2b639da124269f7a5dd33f808150ce708ff5b08ae51ac0579d91c7d1cd13fc7400a9325d8324e7a4a5c4eceb115b13aa23607f62f743c24d4f349a3e380c7c12e3cf5f14c22173c4cbf987f210d5bf408492ad386b091836106abdc907946373e1c30105bcdf027aa1207ccc24beb1e4d9fb341be01b8d922bd3d03c6c857072674654f268364ec0fd23e3c78035c2715e7baa1096096451e049eeec904fc4970b41ff3899584cd91a82eb1f035e2cfe03c83e7461fa3c059e45a8d810d3c1706df5a2d4e609a800889f30c01b3cf8e3fa3a36b53eb2e4783b33c18c0ef39675e0379c4b2a58e77cec8dd04f5c9e6ed97b67765f6a2060d44fd4a87c82317335ce4ce6b353c2442d1987da5139f550053613331aca8dca6b0e79b93a7638085b55002624bf7f26046593b3d2a43ccf223a5d062de016137cc52e78d030927519b1f2ffc9831dc4b52cdaf1c3be91b95192317198152094c8413a2bd4687654f0548b43ed71d0667995a802db5d5b02f7204864ea2beb71eaa53c4a168e89adf7ed4e286d2fa5a51682f3520d6f3c0eeffdd05777fb3ba717d84442b2ecdefa9a1e97603648d27c236f6684f800b23444c8f6db8f312c7ed6dfb4934329d430eb79690a34f7beb001b1f226463ff98f4bbf221848286cc69f87d2d4f6eb5a54093b6b5b90f94952d1ee8ebc7d1bc3607b05172c6f8d7f18630a7485236d87357dd1f8eacaab692ee03a2a4bb1cfa9141267b0d72ce82f7a4e1eb98c4908fb93697f1c889ded4a7504ca77324176f6daeff72c6afea9e7d4771db053fa01fef9ff5e41d63df31e7e60cb6cff1bfcc66f16762dfac4ce85c1515692915a85c48e84b2a795b14252099de34ce9b978d1e32905de7cd12339185a54b1a74b2429bc9532b8ee4d2446aae10db333163f35b0886652ca52e94613cf1a280e3b908c79885c9f49d9690ea38de3d04733d0243ccd1b998680eb1666761f82036a5659fb3c7366fe281fade80ef78b9ee0c431ec84c5d48cc46f2d98a41c78e816c313ce4953f257b877f5fa2c3f7cfdf1aa6182567d41387ec5ddcbdc1212aac2502278ca6464d3f415706cd565c9e5886521898504178ca5105c80894732ceff3d0bf2cf351e23d902207208aabec434832b56d75dcb864fa8f1c02171d37205d1f7b254565f3c0aab954795ac24742d9f569d4a0df1e2476ff7473819f2271759cd02b8a139c484bb78f02ea8d0f84fd90695aca143431280142155a859267b5c71c6846d57ee83f9d2a051ed15f62ab1027ee1a46965a8141372b1202597114d1b05b64e8fdbc42a4914d6f61bd4634749ef8d72102759840288728e210f1876cf3b1dc8e1bc28f581befb79351a0d94b1bb5080cbedf3eae33750897d15e458cae073e3cbd5b2870f423601e09b955bdd65345c5d4dc1d80dabdccf77ad0cdbd8a3df074a0178d311cb26b6d47fdb9e574e8e51c59603e00e483a15a9290a730798558db5b0444dd0092788ef86617b279042218990ddaba4d87c7ac5d0a7704cb867ddc93c804e530c93b4e68daabd3d0821cf5b4a45578c9767e627647ee8c2d5ba34fa2bd71f0a7db9d78aba5da0dc474f01dd83cb5d48d3d7e2ae104152bd1843575dbbc2d29eb59ddae1153d00a08bbb6da2b896c4a8640064e14900fc3a4c79d59a2fdb86ad18621b03a11311d04587a1c4a92c3a413b4c8b5ac69656a9f4a8d203d5e828874a70b08a99eeee874d0ac03213040c2be180f1ac5b5cd2b847f1900606e41fc16983b6d77ae8ba2be0cfc278d7a886ddb7ce168b3e024e2dcea09a8122d89f5d0e80cc897b49ebcd5ac053edf7cf233582018384b780acefd7e1e03662dc88c7e8143fd74929921eddd3a7655435ba6555bed9ec754aac4e34a06e7a14375cb78ad55cc61ae00bb68c1d458e466c68a10f710f0956b75616b0605ece83da2f2214dfcbe8ae7ad5ec0c517877ced107f39e2e73bef4b2c7e99f95a447edb954e689ecf66f2b4913879c1caab883814222ea744a36afc0648102260e3859fd040ea2764f15f91231f3af9db4fc533d2b30913ffb072e8e318106880378ae6961134548dc28f3d788007f35ec4f36a519f3fac893f87c9cc4b25d4fe21fe7f833041e2966978c34acc4c7561e74f67d02dfa7365f582c2e22d31341784f255917fee069826fb751fa3ee1f8b6354cc2092613eb6b1e1cc42497d39e11a0d9807524f785a9a53222533a2ee302cf54aee11f966bd9118129beed07010bdcdbaa1ab0a15c51ea70c28ac3ebc957959326dd3c29f951bf96cb32d8d912360f0585900ac2580daddd83b737000a96cd9c0e42f18474423dbbdef3fef52fb3e8ac949b80f674fdb1e11216c76830ed706c1b036a9a6d75752fd0cbbbed274ed6829cd4fb4c11d846201162c03438260821501bc064a0f4b3ccbf63a413b1dacab5ffe1127600dc4aa02424b935074b0f399023e37575984019ff95319e1ea11940a6f2b8b7bab0b949c6262407f61949c16a4ea3d71c75aac42ca3e41cd1bbfa192577a5ad29fe7b1635224b98d730df869c849f34d2ccd2275ed69a4aa5c40f363e45eda892df7fb11b0c95f25ff9c46b3faeb29c275876e645ba0a6e65107e4fef97034605fb3d98c9d1d799060c89f37bda31a010642dc22a3cdf6bdada1ce8bbcede7ca85ac58c11c0d92e6544eefbad59c9e42c947138dc864ba873bb13e09e4ec242c8764c83cdc80a31bc76fb361925cbe987db68220383e3bf8cc439be83c84784ef23170be0ce92363562dc4dd240128251f8cd2c5809f7787d2110181f7694fa71aeed7b3e18a0180cb7d1f03026f3766420a46df839ddca64e5129428c6a315076130bb525502c967a5456a18514687c0b037b2a3321ff6d2320c4d876a4c28ccad81de4d6c86428e89f3dba6500eab9745880a3a2f76ca7aa6daa9cdc11abde75ea33b9cbb4583123f65dad98894b1f17097758d9ca13a195af8428c639c2e376b624f538a170709329172515e85973c01a7852a19531291532ddbd7143f85167e722ba9dcd65bd563db281b92f519e5c2a1185b9f4ecbaf3406eb63d4f4c6b180b4263186cc6382672131f0d4ba6177ff71d6f96b191c2007fe4e8feb59f2a3820b97a6d747e9a24e28fc9634af0ab74f583c0d3c09f6a93f81b4a8e46958eb9a7828c120b7b7682b0c56dc62ab0d29c0d1c98c80450999e87eed87e9c4b86fdb270ce5a0060fee3b952c11d8e5f6b40224bc19e3fd973c3664557209e539c84c797003e7c00f0052c89da95ac0250f79967f3ff1766edbe67a3d10a6188aac53a197118daeb9677dd0e974c054f068efc3a38a202a435011ad9cc2e54800e2d75a69300d6c428a4363a71d38041ec339a0c0cadf8943a1340024d0808d2b0a5005cfd4b8445dbbd354cc7309873149b336e97c568361364859baf5f43cd7ccdd0bd322289284849be0ed93b25b9b7dc3be902c802e1023b83fbffff3a2a5887bed4e40d9d9d8dd7985bcee9611d0ae4c809dede7fee29f43cb038b229e311e2b0e126803c80485e005d3d870f5183e7004a06ee7861e81ea5400a648213c0ea54eb4193c0a0a7ae10345f31cbab3543cc790001bc12177dd336add9103486b1a12f11b16488309c44e2eeeebec45475a8bbbb7b0adc1165fc901094431f294ab27e66b00b22924c2b58cfdebaeeee7e345475289b6194bc62b0c40053567ce012247e5ea4f6b76bfe151058501c99203e56702a616a5627ab9db62e3807f42c18a377aa56b9bb679d611dfaf6806dc78a60dbaace73774fb6a8719dc5c366cf9c72ebcb4aeb629d4c80be9d088b9a74a3e905a0e402102542a6931a21ad169a3c34f5e89bb6691d800fcf8850a22f864112693b694454aba020030c02969529473052480c9626b120d6b3bbbbfb86b7ddd06b3700db0dc176833027000a06c99a34b42c991e15923021605c5083bbc5fd0932f6c20f8bcb43b8e148a4932d9ad71089b1731bb7b7c67177777717d6b3bbbbbb6f3039dbd6dddd1dc56ef3fa63cc3fcafcc3dcf869def6ffbbbbbb6ff0aeffffffa05fc1d48093e6fc8e28732c7730d174ab81098608c0ffff4f08f703f02dfd903f667f550c7bdf97652dbae891aaa4e8665e3a1543270631ffccd25cd44a1e2d4df883aa686a6c35bf97d51054ab4409d9534406bdf8682c92599d1e78498f80473a99b408093833b357ac339bd6376dd35ad51baf22009cb80ad7b78e41fa90fda429cfb6d794b572c2be3bb7717b7f071849ae15967e69451a7c447256a2429b5ce9f953fa62f4e803a6efce4da74d672c6993a324948ade7825a9fd8b71cceaff7f074086d8ce6ddcdebcffa9d423efd4a68129ac0ca108c97418d61c8d4e889ca96e01d37cb560741137be28d9b2d4376dd3dae31f02b0644ab2250643ab288d052f888948609ca1f0aafa30f369f21a2ad64a5c70e0091815876508872fa2112522f6ce77f61b6d1ae76a2c3e901157392c63236758c4115292be699bd68e041c5151f4541dca66a809ac9169d357faa66d5a3b929aec69e6bdcb2c4820a694f9b9333d7cb2a2c82a66afe6042b6085876b66577bff36ffffdf30b10e6d668e1be7edc3d0fcbeff29d6a768e2d18438c39d4cc7f55d7bff36ffff2f39b10eed587ab25adfb44deb90ff4fa3dc77eaadc6c07a7677f77625cc75cfc109cc50ba964368214c6cf8134d124953c2cadd5da706eb500e9d1d56bbbbbb6f750d21b950d13c77ccf77d7de9d3458f4fe2ce6ddcde3fffffff424321a25051c828a4f45c6edbb66ddbbdc319995b4947007d43254c81b5501213e3039ad3773db10e0debe83a7b3bbc7aaabb7b075504b3174c19b01666364dfaa66d5aabab8d564fd876beeffb43c35c14f973bafff9ffdf84e9fe1a82b6583691264f7ae3d564b71a09719b256b6b561f2e1ed533f084392f487cdf9706075d34f996045dd42899e13dfc5350228c8c6b85b2175e1bcf44e24362148044d87e0c2b666a988cf07204637624666cb154d54c566115d0d513bcc1bb5588e2d7459337409c5be59b55447832fe953ff7d39214744628f5708a604c318d9c76b5f7ffff7fa451d5a16ced48432b009e060eeeef1dce39eeee4841ac438543e20652d14308081a69b1adbb3b8a2ea2bbbba325b10e455bb2684efa86e63cfbff577a621ddaa114c66aecb1731bb7b74a9241dcdddd31fb71f312b175e7366eef2f669168f82ae2eaa4c147ce9a4c8dcf05fe9a5159c166852d302caa70f3cecdc8d0927073dbb66ddbb66ddb5665a9e2a422a582a5d2a5328675be63dddd3d86eb3759835eb1654f7c222baeddfd667377f71243588726d9a576ba496dac5c17d63d4789310b8c6e06b8a61143cb3a9beeeeeeaa8b012ee2255b29afc9c173b636a4c7d2ce6ddcde2130385013c809f4040afbf4476f958a2b8d49e9d5de5f63188475e870881d26f56de4254adfb44d6bbdf1fa536bc99ddbb8bd7b1d58d130e9e0bc28655e281211b27799b74b71bbb9731bb7778df7a166d3ffa2144f5587b2ee03b6731bb7f7ffac90b1209887000d9209ca96488c4ce91cc99e205e90d87714c1a2c945774f77aa0b4e490c53dcdeb98ddbbb2541857c48af8b55c4cb8bdb1a40380831a5c365f204b3b5f12b5260a762eaea017559395b64ad3dde891325b8963ac7142a965f3e1d52fe570502563582092ba5056be7366e6fde8801269c230994c0e84189b20f4242ae9c2c0c038ac7f62d25d6a15b4c76aba9b79cb73da2e234719c384f9cb026ebd9ddddbded6074dd45925a8c2dc82b9813c4607262ce663e70e1ab9311365ec35c7fac677777676a3b98b4bbbb4fd58e4fa95d4af5b69e7b26a4a950430c4a39d1650574ffcb7d7777f7ffffff9e047088262fda4c89effb92a4685227e8fe375d8d2af7f54ddbb466657c8c6898bb678008621d2adc0031bca9383fb8aff91e45479b8c9c0fbf60aa01485383afb86b10f930024d7e9408d72767ee84effbb6fcffd7982e9a1461baff4c3739b5d50fb13e2900c521051a3a7a541134c404a4414c7cdf37054d832e8a7479d3a087307f6ce02180ac11a6039009b99e3d58f34a6d569e745e462f2e64e6bad4376dd3ba4a8196a8a227d5cbf3c0cfcc7cdf97277dba2812c6cbf36be7366e6fdf8e14ef97d65c7671a0b2c26d4e1ad2a2000a0d4c51cc4c0b67464d78eaa4b9d6dcc9545cf73585e6e30cc41717d20dd0ce6ddcde05ec34703b24f5c86d26221215898c444a2266fb39e7dce6d6ddddfdffff7fefbe8cb99130674c9b6e573c904b8f981f8b2c291a2b9a2dbd5794086492c029549902dff71571776f952e7a6c61cc7577feffffce6ddcde1e5613cd8c3466df072d5c44cd88ad78e049b14cda99d9b3697dd336addddd7b9eaa0e655777e7da4bf29424831e4047271b8e51b82e258151da02104d98852e7a1c3b13ba2d4fca7fcefcafc2fdbdc3eceb6b912529c0d79425200b151b11a66454889ddbb8bd0be0a5648ca4e0e1aa0398d7d61146a9b9845209aa3a94f59f916a08c3a6ec664608e5f1e5317656fb97136356faa66d5aef4b9f250821fdaa8d940d964d571b5596af8457c32be255f1ca68034b871c8e2ecdaebd7f9b73732737839a43faa60ed7a921ab05d40a6a09b5865ac49c734e1a4a4a262d939c92a492b05cbbde2b54eddbcfbef6b00e05068543cfe5b66ddbb6dd3b9cb75288d9e0a55534f195c2859886321d169f14392385cf8cabbbbb94ebffff4ba5aa43d9ffff8f9a61a9f1a8f0bcf0d4a8380ab29e5da74b674c07ad6d55dcdd89caba766b1411b733e8ecdcc6edfdff3ddbdb8c6ff24dbec937f926e7dcffeb9bb669edffff8fd71e20d75e85bdd09aeb8622d68b75680f186c3bb0843995f702e3eb4902433660c154c613238b61a985082305c2d2a01615dafcff4f74c23a548a8388956b2d4f29dd31ee287798b790ffa34cf306ef70ecb09edddd9db7c43ad4496a8387d5eea6c8ca12840298934543bbdafbffff071573903148a98398b76de5eeeefeffffcf02da72f6c333684830204d444d162e6fd26564d7b267dbce39e70f25d6a1cca6f3b9f111f6bb8c11257dd336ad599430f7414e60a820a821a824d412ca094aea77bbddedea2e5ea4514577577bee9e1e812829748f516ae75b3b5b417a0010b212c51f15cb09221e06db1adac242932c869e1a6bb20125a30b1727558b07fe4249a24af6c53a5b7e840131a30ad99ddbb8bdd51d9f3b033b9f7ae236eb823e50ec8583fc8873e58453458f49af93ed016a90509bee9e41fd79481608139062cfe7b54c85c3fdff5f233ab9fffaa66d5a9ba12f88aa0e55dddd05f0154f9eb8bd731bb77786d8faff9fb6d367e6786a9bd6376dd33ad81eb9882488ab98b2f6f2dfa51adbfc33dbb98ddb5be97eaba2495539ab75a8e0e444a5c3d2b2e889cb28009ea1ba74b68abc99d7737d001f934911db3d0994fb3bb7717b6b0089284e9c59ad003e01f196d9f1e5b547a9cffdb6be4f0e8ad4fb553d7618b3691ca41f0b684840421ead3118eaffffffffffff46a5c26cfaff6befffff1f8ebba8542c5faac8041800431a38040d8481284e049761031480091d4c50485e4c0c141a321c044443610000040380603018100000c180701810060693f3311a1b60225d48bb007f460bbc8c335c6466b4154565b464471169eb99a12bbd2cb476ff31f63d89cd9d90c7319c1a91d85a3a11d00273a1ca6ef73834a51f1efa1da1e2a2a0cb5bf19a0c946208c4df0f9221f7e786b92fc0e805b5d35295e8a11a7e55dbcb13aeb361c9f6af8106f7a1144990ffac9357fc5487352972b5d53590fb34b9c9741fa1ad9e83686747cc768ee45e386a7b2617adf0e2cdb27c5e7886a8bc6e75b20d57395644280e120d470460c33594433983f7648b9575cfb147bd3b5a4256bab73dd4ec2378da9d6a73931ab2143124770163b69888c11543795ba2a7fdce8513927fe36ca73beef4d32d4cbf941fcbc10e4b078a29b5deaf1baac2ed5fd83470ae53ebc8ad968968209f29f6410d2548dddf37346964bda5487db96fcf5bad3410210e23fc1aaf541f339463ffc2e785c1a6e8c4989e5afe0abda5c2590e8d40a043be1ae35b44445b9a8410071dbb5cb7adcbeab9e84659a07ebf69c68a9699916f9c0a6a5b2073dfd8c3ccf3821b03ab57a2356a30e84b1d98063b172034662565f6056790c48027fb7c9cb1095efc1322352da156436fc07d571e11197ce3ee2ac2e8fa40c3503957d4b7b4aa691a8f45184b3ece6e0447661b21b05a7b5d55330b9eddf5bbd87684078ec8fe280d72f6306661e77f1bef30a6a7232f704c8ca62569cfedd45c25faf6ed512a8240df29f28c9d581c20dad6fd3e54f1c5cabf1df810e0dc414fb709e3327ce28edcce4b3a97d0a9048c838e15028c67dc4e6f3b44fabf6844895c98c4f19b683a1968d6855b302461c6606a3c57d3105321fe022e643868cdbeac51d001df690e6473839c6d65adba51676bfd08641cac2ea6a02cdaba485ba0136b9c65f8b260f4834e3c2c9e980fc09305f7f950f0782c5206dceff97c61ec4d8db865e7c938d2f4e7d8dcaa3104ef37c9adb341e474c0072c1a780728b1d0a51e3fc1bcac09019b70f35e2b52c408b561a81060a45cac722e4d31448ed64385180702da6e457ebb6d98b00d09c15ba19e4eafcbe1bfb251b8372b4ba8f1b19858d189bc808260495151f86df2bc49b1c69fc5327e528518ae71c1c00ee0a24ac7ec84e2fe1810627091c1848e7e8edd1fbd7c93b76dda3bd54175f2a3ab3f7eda2d58285a3b4e5c4f0d19d4949bd1ec2230f8081c864b251924a820f1a007ad83748fee0b7ec70a5a0fec408083ee0e2f201f99d405ae16cd192273aee038427891b72d34ed28a892029b541ab456f716d8e4d4df95bd39e056e2e172e19c47a83b71ad8d9468ef882e2cc3e784d912e22c123d3404c7d31e8427f16bb6773c09d511544a9e6e90de15395ecafd027a7c12f9324971a5c8f99deb260004942950c8f441292e6d57124fe9d311b00650a816085b5272ce85497889899fe35bd0269a8f81b5f5a58b4638ac0a0bc3c5e987bc0e8be7ee0298a2c1ce0b7a3af960a8f831cf4192fae7470a53517a636787b4c45d81e5c04e29ca9ac031b2f1a63b7c7a3d22feb114679ef441d46bcbf906efb8fc4b33df68958868fef1c828dd64da2bdceabac5e4c0a7fe3c1897d2b72b074dd1ac2e8802a4d321a474276327c4cc02a0a1c709eb1a2d768b15fa3924ec5511b2b2efd06204c7e74b5e335389ef1146028e7d4799b16ef1c7e0cf1acb0519885dc7fc3d2a9c34235a18d5c22e1cd0f5f124810d7b1a5b7968e19bc14c422d6828eb2280a3d20de2cd6b9a5954a98dd268c7f624b20bb4a0f2d7f4378026c4c5f09d8262ecf184282a89836ddaca1605e9c5c7e9b2a2464de2f01ae6467ed088b5a77630a5bc36aa30b9495aa9a45af13e4d70c242278995ba59728a846eb3517cf8709eb0c5f082e007181ce3023290298b8c31dc75760796d3c3c6352e34ad4d0d4a9bd06add15aeb1cc1d050d3c28fced3808f1746a8ddf57ef64bd2a7cf47dc1034c5af05fc8589e3ea3a53064527de354170623cc8a25e50b2875c7ee08ddec50655393d6046ebb2e9cfa5551cc0421fda8fc11e1378ebeae28e39f53b86bf3439c4c69f1bf6b1bd77590f2fe915c900aceafc4e177c2c51d103ece852aa05f8023c211b242f7f575311291384648a79e2ff80bc630c9b3da6cc0b716f04145bea9406422a8b8058f91fed0e680e308250f4c13d79047675f031a530724c999516e6e887904341353af413a4f7aae7f4c6c8ec8c59ac5ef227368f663dfa4f938bf3fa58d3a59dfd626958f160fc6cf098a80712536e3db70254e63cd46f100c1cb44cf64e81f2935913aa87f4340e234535b1d0cda23ec008e68bf1d5981c96133f3885dbef64a69083f6611a686ed20da7ce9f9a100f1ec925021a8ac569876486113ea0064c60443c24a77d08fcd2097425410ac99f0e5881b6da292b8767e5396dcefa2cb1ad6502ea3af407c76d8521618b0039ca842b2836a0b1ad6033a81d3390757a1da34cdea03f9ae71052a4f301db0af967e289d79099b410af4448096b5aad58af48e736b67c321847760669ecaa4839a28217b2e00875ccedec490207f1b63ed8ed99ae0aaad9e4ac727a4f1d7da471cb6a5b194587ca25803b6358fe2d5520ce961aeecb4855f3becebe04ba121047da6d8e728993fa566fb870bcbcf0c149270c1ad6431bf569d31414a45c6d3baaa4f4da248329b4cb53dd885ed51dfe674a8fa316e3073ebbd22a3b8f4b0003cc3e3d2dd9bce1d17df3c17c812452d9ea412149d7f01db8395c5eb952b0624af1cc145f206b761ffcd312adb4dc3f767202fb0edb414b4f2fa04bcb72136ccdfbcbb91ab7ac39442717049309b3d6d6a2c0c1e9842f22892b1af2884c4848cb46111965c61110ae246e0762c06730b0ef04f9edeb30a9f64e082f76a4b14fbe3fbc87327a2eccc49444fd23964659a314e500ee08a23924d53087bd390424230093652251d7702503c1e6cc61554a168c39c3833d5ff7e9527ae6ef73a07108eaef325c35cb680927783e396cbacac6940192b93a0e3ec2fc4d63cf8163f49346a2d092f64ef9ce4a75a2c06f1c0aa933cfb46da64036acd92029d10e05a19a0f406eae8c4d176b613ffff071df56646223357257b90ac16ff051ea700fc66b5ced6619bd73c1b1fca9f4c700fc04788f3f5b805b3bf8ff6e0dad63c61044523374f0b44f247fa411095892dfe8b6d1af6325e7c4173a8e8ac86ed947783f8fb54df503a6bae6d3a5deb74fb408747aaa52e01b07b739f147c264993b97e44f6c59e1dc466c9a7cdd4a9b560dcb84698e19fc1a3420f078c4b1204e3463e7906edc2a41c5aeed839ccafb4fb98434684482f8374e6a76f9e92adb7b65ec52e02b382edf96dc0c46ec97258c5a3417210a37f9c48dabd2dc1b313f00c65f8c8f6bbaa1dc17f79ef28714e726a1a3c855c8c3d2fa87f3b73ce4b39bcc138bcea9177a98a7c8bf9a753fe4d14e52bb7cd872b6aa6f910e91075632e77485249fce0e56393fc19dd2f6a6541953b3e6a34d1e00c413a99a9e224fee0da6c3a014d36722f15f666395b8267f4192eb20e15d6431a2f245438fa5b548718f4a685c90c2b00bd737ad562c7f2559ed27259559a56be59bba61d5a68a00dc57a0fe93b6d26bba24c796b0dd422e8d528f2287065644e7eecbbbeb40b5ae4049a005943121a7124ae37026a08eafc11881417daae480f538d5bce51aef037c361bfac653c62b6274aa78656261880d6d3c6cc76ab5fc2561d268752b1b162500c7fc1b58ecc824c28ea9943a5aa0f3a324752ea9d11ce8b62a8e3e2b46cb6f7153cbe3356fce1a4860317102d315b0ee69f5798c694ff4a3c08266eb44244fe6b9f956b57bb47364eba976415112254b084ad24f7c15709357c35bb052d3d28ff231b79dee77f41c5cd02fdbbe6f5635b2c92497a57483268ab7c6fd9ff9e46da8a3e2f01569d9d6377ce2437b01a0ad61928432245fb5471407fbe9c72b9ba6744b4a2f205278335f39d3b06897d710d5fc5570fde0c50e3d81ba530648492054eaa9106665576469210b956187655546ef9c96088930c074a619f109fbee26663e39916d04a08c44684f68f23e8d2adeeb810a7a4406c668d5cc02207ba6cf853d792132f025e7e0b962c592b90bad91e2c03ec0a703373f534c6060c7702dc569fb5486f8c93d499aeae5d5b139899319b28b689f4e002ad7a197c70552d6162e09829aec9c23d63e54d1c46162ca542d5acd671c6c43a8d36f27ca6625b65d24774bb598722ee9e9730ebbe446ea9419422c4eae17e4412397f184c922fc1591bcaf0731ac29177b44dd1b8d805dd5061363d35a24693c71af798da75887e23dfbd7e5f66116089b92f2c21665eb26c6a072a3c3923c6fd873692cca612013bbdd9f568d168c441d645e21391f765c4145303b14764801b71b56a993183423b4f2c3ad308521fb9a5e510431e8df5e0990bf25171dc95cf08dcc8ece1c5e268aedf92c76562e847bf994ec6e3952d052d82445d5036cdd2a9c9e8a4ef5c55d79ed759a1aa4d5d8fe6297c8d91d6d85d899c0c8cacdaf19f2ae1ad8b2c40d4cb89903f249e792d25ac54126dedc8b08237eaae067f381442eba1af18b27f125dd8b44682ca8f604cda13d830fffbc203dda5dae0158b8afb94e15cefbef32c1db52a4e07657914995491ac3bff1151ebfc81e162f1f6765f047e31ab866bc060882ed7a07f263e6aba08c86ab09036775e5df9882dbe3b771eb93756b6fc8e0c70a85fee556ea63dfcd7df260834780ae3747f6c358ed097ca2b50f320fa686a46419c296a2e0c68d9d800858e2a822c283b7c55ee7d78ace683666ae6651f5269a27b11c494a040e7db027c7e12179c86355dea436e25ae475c4e3f4d5789e7006ce084668511f1fb74af68e1aab6afb6a8f00d70eccad0ac494b53775bdba1cd2e2a323234f37f82278c21b0893c993ce1248b6ec99979431558155986e0ae828f26f4784a6868d4fd32d1a10ca30f779e2c2d73f9a82de54752696f99b3363788f3bbc9d9e679f293cb03a0369011d1ad101a75a9810f76465225b81ce584712873f81a74faa91415919e4b5299fd51a87c9014e5ec7ecea8dc164522bedccb6d5513e1d518f6ec2017183d8834b22e308b10d29d67fe41f4a0619a759c654d4bf23642fb2de11b33e6d782dac356a49b0c6b057eca70a12884fa851913dbc29b5905c5d27e34c41b42014a3fe9c201240e8e249fb56f80cdd23ceb63b5a1aa69cca15b3a44620731b926a717d1355c84724378832b93c687a9614275a2ed0290de6901317a0164f9d60b934c2b80ad871f315cefd954066b73f0fec33b4ded139788f4a3c7f07cde01aa7a44542c7ded8b12d98bb5714719a186d1431ba07a2ed4da1777f784f193c57e087e12c480739f8f4274b5d6c29a6cf9f5063ea69550b741c3bf71082ca7b7b43a77a82e4b552e3808680835ed8c5e909b4abd9a18d9cdb79bc74c566f49ff6f4d206679ee1d43b8547f5cdc3fa266c4c341bca265857b1929a1ad99b75688926cc8658f5ae6bd0d103605244ba67aff3c8189840281ed3622d14c6bcc418d44942f25ba8b2e744779b28625148e1d1e7ee6c3040277f65194ed41b9a5de05bb0de663a3332863ca96ebc2fa6eaeb776114a2eeee86cc50a242fc0840c87564d92b10a96036fd48497ca0ed2b29b0a19eea2bff6c324c03f5f7dd7405f935c654d5d8c094e5ac757ab9ab850ce2e33ab5cb8ba9bfd59427f3a00ce67e7894ccccaa6621480b763ad29cae2a2423026e548e93077d51767ec716a935b580e5dc1485c5567024346c9fe7942a7b9339925b5b6dec6cd784c41a82cf921cb58c7a8cfa1e33108f20fb5eee47db41e90c14cbdbc0f6f9f01617b8b65f31669a92d047d1a68861096c2c3de95cce055971f7f33c4208c953ff9cc56fce5ac32628f8bc06c660ac3bc129e7e138865c0f17a3165697d8cc0594a3606f65022037fbcd3fef494e63dcdfd4049673d5f056ba02a323439efa343103e70ef7a1e1d6d80ea2544e6b06201efeb631cdaf9616b25be1d868d86293725fd29b9cc8cc7fc1a56d29af3b52ee129a7cd2ec3ccab9fa1c2582a3a4f77ad9c47e782729856fda4ea24ecc51440377222218875201c85acfbca75bd259af9ccebacf3ed51014758d29f8a306a098304ac528a43a90544ff396bfc8f4d3c3b8d52487887631900c269dd86496974f33c84d2cbbe23ee358b906232035933108303ed9ee5b8a48a5b76d0450f4631d6fcda3ee994cb5f757cb809381018954ad118b4bd8d44f647c9d29d453981f7bcb6d6d06d08adc163e82ebe9a75c239d5cb29463bbfa3a3b1491049e03bb0f97c6066e025678af232bdd3f46c7814e6b22be1e62380351d63f395f5dac4b789513c075e0bb6bda20a855505c323807e03b849ec5ab48e9690244d3cf7bf79915eb3dfd65c97fb1d623fb9bfc3e59a14d30c435cce00fcdce8517f6896f3fc66d68aedad7b3c0e81173eb8c5f4505d51c6dda72700dd4962e1c71502396f8384159ac4838d857f77ddd5254ae5c40034272bea5c11cf2261b50c99c5467a71f024d86591d47fe08b0a9a2ebdf413c4610b6bb652c8eff5331c004943dd2212656bb2127ef1306f28b1bfd92ca17f69cb1f39b124632d0cc708556674bd2127af2633f8e377c2e9364d4de0a2e9cbbc21d52c2101b22513bbcda5f04c3cdd17497be586c65c27108b0caa7400b370dfa13b87ca9733491967000914c7b21e2767dd2e57691065e4717ad9bcb80e1dc13e78fd03cc2b82e17fa50f9816b32b1c03afa737633d95348a27671de4686369303d12a44998f168986d4a51935c7342e2f06d4741dce067f4a6942fc6511bc4c927453214344beb4f24e4282fb231b40a45600a32f67ec9478c3223d9b45041f998302838d91f87c8463029a140be38ecd024548b41ccc4eef0914a7349a11943518fc71d85ee4293f8497114aaeda982922eca5a4fc904f40c74f5f68951a06537373774cb907e0618f6fa21ad7aca2b7a5b5ca77fc37da56e68a9b9a5e04ea66739c4361031705c9f79f5048c836b803412c50a5cff696ef324b41dcd9cfa1e1079a09edadbe1f2b5fa3b22d6f74943473c250686c1a6f4ca970b9401614494443b4112fa6a88256d42e53ad1addd3bfb70b808fc062eeaaac22fd3f07d68dafd329e6c9ab876226a10ffa78f1e8a89ad546b84162ea172faff5e0607d4addfd943cb38a00b695761a8c9534916f10430d158555eccccc05fcb02289f32f36040e7dd13699d95520bdb9d356661b3db0c363deab0bac017441f3ab010215bda966b3cd0db158b75df585de6fa6b0d1d62953262b60923d66744ab6dda12210434fde85c4a16df99e5d22064d1b16140874e67474cd22256a17ea4743b7007965b86893d2060213f5dd231f77eaf7f97143bd335baa05b14d04a354f17d334411c823a4a461ab9dd979d6630b8ef4ce32eacb88e585c51dbd2d3e623022b0755103c0a27042ce24a18b64c847664bc15fab1467262d7f82da92a63fd60f52e3e978dd58ce4072a5dd2da636edeb67aa6648728e0e40fb6306783cde4377b37d354ed4cd692315ea159ffe7c9d1ebf803c64469e6d2da100463e094571eda2e33813572f7fe8404891e6c0dace225e4d7fce36549a71237fc1b0361a992be2603006eb721c7b2a74fb32c5138ca83c9a29f6005b8477dd3c5e35139a3afd2384d01b1201c2d0cf6bd07ee4849c84c6c4050f947798758f115ea5ccf62b10274cdb5f01e55e2fd004e79f36aac8f102a612c744529b9171b0b4c330c3b1d07c3198112d178086375961be363d82ae3d41ac9c5b6c3574bab1b7154fe18c39cd0d3a4c31c468eae45f24a13652f8bc66192d9cc078dab9e017acd8e6743344c936a2bf172da47ff99c63ec4779455d6a7f551be6d84d4d7287df3f365ce2d7171e354e1f4facce89b272f693951394003be555eb83a8badfdf7684ee0b7f647bba157a89116b42292c391959460d32c858de06a94de3dfe180d6d7716dc7db3456fa889682333c758cb364c4888dca54e4705ad8128c43254bb7457af7c4117a6b69de626a83b0d735435485f018cbf8ec547ca9792aa86e6f6c9261587a419dccf908a1f3de6a664b338308c580cc1cce58a3fcdb068dc4bcd822a8fb294240f30a3e17b176b3aaa5309094545194a30bdbacabcd7f34e1ebb27fd54a58e8c561c9dd0f54d25823c81516321eb4b2c4dc2a3e72fdab4ed49f6d170a7eb805be699fc40f8dd638ee254bfa358ae105ffb0f5a344a67fedcbe4b3d7e8273547c99f4ca255b0f75bbc6749137e97e250e94938fe812d21541d7923bc99e9931111269b43a61b531a0157beeb6b5a610e7427d4d2010e35a0f0886f12d8897042f68bde487d3f82f006086e569b033ce7c7c0869b07f44cf34da36686e393c16f02ca58ebb814dc5369702584af2e47641fcd20ac2cfa81c1da3c44df0e2462f68d9b3d88cfadad330e75dc2a5e67a3b200d4bf9cb6d40b125368106a9b273c12302c9a2eea39abb8da85603eb9614d933b814882341b21263ce2c14712256a9c88a2136d48d42a886c6f95ad4ce2b769e8e296f0ba9a8dc69e5cf9b158bb04eae415ba4379f53d960886eaf4fbca618c327fd740e02d9078c20f1667f88912aecf5dc26718fa4276802f128b8c0a812bb22368be9463d1702b689fe46fa33582104c32ce792a1d7c7027c72e89adc68f6e79613588c5b21de3ec3890652e76bd1195339d17fd2c7f55931ca6d6f4cf36a6da12732766413f343b825b7eaebbe7e944e166752c5642cd731e5c765622954df9086139440efbc14a1c1a4ca5b6a8074949eaeb9921c14d8a3e66a424fbd8ae7d5641567970097e941bc6fb52c854fd3043ab3f137bce27694d34e3725c8f2f3d28656b62e68aae35f838e4262f48bdaccc5602a9f408742722e8962d1a60c432cccbeaaf9b28d422e93f159331ce47b4d3a48ccce3f50e7003ef9404a999e52c0b8837c0246d01744b85b47eb4bacf532a2eb68f6e333d4146d3e2135519c354e44a115b941eaa57322f5495e626b3494e53bd7bca43de753f4959fa7caa20716536c44eb4c1dbdb76517df03d457f347a5bd0b2d3dd1f1338a254da1477dda7dab4a67689ad181e4fdb51d843ca2a42880d4aa3eeaf48f90ce6d8e8182915f035a26908bb561508aece85f182d1abd584bb13c858af8c1c32fa14dd0d4fee7a5a8703ddfd7a672b95651aa70134d623338fccdbd3f51a5eb6f764991128191c90746524f7eeb56f1d695453026e20e2c60b2c8bf7f0b11bd8b42309d131267ecc7a975f55d9ec430dc721510a38cbb2a00b94a3af705c097f26e7c4304c70dbdbb8b9087b6259427ae47b1fb205c4e3e4932e9bdb9a3dbad2617646a82ba8af39a3a184206d1cd88833eb9ef4ee34a68f2edaf6782511e017638c32187faf93492e7b6e01b3063e70c3e1f50de7c8bba0f6a15ce904431b080968f69e10c5e9315738ae030a7e974303b99787d1863fea97c732373ca51b4b1c36fc5503403a5f5e5542a2342e097fe7fd8fced48b2b8402798ee2b48001ccbda8bcebaad5585669aed4b498e6a6490da28bddaaded2b588294c30e5d27874d6959c1f6813f2abbed091ac1812a9c78e40eb5178692155b5c08a149133c4d03ea48fe74592054ba4a070d9fea5354d55a7d86fa9d6e743ec04eecca6b062288e01bdd6810363e1d75ada643f41258c7eb45bfe3cb01c0404c003010683a4a34b68b4bf5d1ee61258feab8b578df351da9497513b17b6fb2e5de52a624536b0716071b0749add3dddd110acfa46e0fe7184e6932f56cead837da4b688c68bb8202c11584134dcb05e5e582e27a7224b53961547a0e67da43bae585601fee0c08a2093c84d06f14bfae2753bea9d4302625c526bc3f06c5b0c0203f41e2392a81b16d8ef48db121e4e0a85a9575a9e1aa480927994828520a6da9d4353869dfe6c067c33a5c2bf5b831320b1ef6effe662f44be83a12ae73d0c4b4adf6521f15b763f7271ec8e6efa42e437281d5c1c3c74b6670251a7bd974975836f300477ec4e3bcd96caf4eddc764776a279b40959cf7c81e8a3a209d13f6d77a2f4dda5339b3ba767eceb65fe9bed66ce9bb1532f4883363822d435b239c71851bf35c71ae5ddc92437b1df320edb28976d1a47fb3714a76d1b87e2b8ad53a17d511acd36e24081bbb34e5b67ae87285f94371de5024acbbc497ba4dcd6d14137333333373703b1ad6743536d6a646c8c7bce293d7f8dc6f88573ce89c9754cdafcb099dc2d846577638c2da758a5c531250d176ce6fcf53c30e9eab0dbece27840c639b1c9c36a972636a5e61a1960b08c0193c4874e050c13e90273e4a5fc40a2d6d1362d5f5e28d717a7a226077fbe34e580365c505e5ebe500c0b15642193831aa8503a9ad23118c0045ab69812250b235e3674cb0693368694524aed88173b78a9491db8ca0d5fe4804d97920c99745111f3f4d745e50b174694846e20a34910cabc645006004a5a4a29a9bc94524a69e5d3240e3d4cf1e249b3416af306894d8d0a10369a5f972b063f7f5d2e25ad0bab088c295e8cd1c310af222440c96a5555ee39a08d9803dad8c088a9a16abfae265e966affba9a68f1a1c750e7afab49175410ae26574c9903da20a189d24bb751491a9ad480f31cd5d1734a3ef415b6c4084f95254934f460c316621081daa870401e569c9452caf052d6b061c50f4c689aa66935316c112386a120235f14b1650745ba68eac264acc061c98a18603307b461238a2c2a1a5168f995e728f124fcbaa230fad0579226a5bcdc5005cc114ab872184201948c39aa81115b8c94896285100650c69532420082176348312508043022a524619d681882a18099a4605b2f4518020c92e081d11141f0e2a9c8c88ad017a22fa880c1cd8e2b4e961842073165e80084295e34b1610865305164a90b4bfe00a7071b18c5e084183192680289c53e78f6aa62e7294c32d87278c2889452da38e1c18992976ec37f5d4d86f0a85f57133278a09152cf8641579827ee4bad62b8a81b0e5c61a8708549728599011357981d362aae30457eb0e150bb2e3620d411ac4025551abfae2d9eb052bb5fd71646bc742501866b8b27dfbfae2d9c7c589d896d73c2ac6aa9fdaba5ceaaa5c6aaa572d5522507eec71cda258d25e2fb53233bfc8c30a8cef30b7dba1e36ba1fd04bf51f7a423bee82c4a6c141edfe429f6730fb328120026f7cc8cd6bf74c47513aa5a3b676944b6fba07846699461980494fc1943cb2d9d90119470f77a763b3654b1878cc8a8cbaae208e3e540551f42155e1809aefa3bc62d41332e2c3d23ee9439485fa683e73cd1bf2615147794246288bfa900f4bf36dc8bb6ca79e0ca2fa19c4900a07b491bd09528f791624fbf9b95079f0fb39b9994e64955829684f8194ae812e53867d7abcd9cf87f4f9616059f2eb06635b1e6e1ed92c7f85c4e71e5ba6cc6f7c666620ee1181df8f088e9a6ff7605e7be6f1c0bcb5cec1ed39d13eb9e190c77c9dba00c48f7d2ff4afd7bce491cd3262182624be740cc3b0e901f13b91fdf94c525f755d4c9edec5e4e8d9f75fbb02b7582e26452e26442ea3a79bccfb26fb5460f537e4c3ab06a5b31afb1d52b1da31efdfa1aa42f6fbbdd09a017e3f272968cfc1b2cb94e1cdc11a8800abbf6d9d65703b8b2b4ae69b966d5176fb349a124c1d0d0518b7ad20b52fee0973051be0becd37b00e0022d420fb447dc57c102b88c5d23f21cdabd0e6db3a28000ca106d9a707eac77c837eaa10b4a124d6f560c063edb38bf202633dbb5b7633f47b81833a93738a9b385d2e31b7c7a5255298b999dbb7ae80d89a48f4028985f9742391158503994fff6e12f0621149c08b456996aa776b1ffee05c4b983cf8eb02828c0b08307e5d5c20d9f975fd8083af8b23fe2aa9880829784862cb1856fb0fee235724755d3f5cf1d297a328d9b67ba260eefb2bc813a45c21b65aad16fde2ea48898267fa1d454e29bd28b39b52ca0d0c4509e2f32e801fc4a29a07896584a81b8912c4e7815a015e18a403634d6f5f7a21c330bb1e353f2dd0df8e75d78e512fca0b9c75379d33d9f702ffc4b04f622d7fd8a86f95a49f4c397313e2174aa6df2ed85980889c3c5830bd99aa1c7d7bd077a723e8dbfb0bf99b66bed18c7a8645efae02f38b3650d99679640cd265c8b43e4897291377674ef656ebb32f2e3857f002f390add6c74f08e640f48500d59f1ed784c91ebfbd5dca17300ecb3cfb82f407619197baa42b495c92b4480a53830fda0e8c6ca81edbb58485942fa80ccbb439bb286a9da54d029151abd5720125fab592840c11c526866118a6b95a4a1ec360b0648474583246107ef032e6b130ec544488c716104674f9f003158a4d8c5e216a9da523f40f0d4fdec41619142d2886a02082a2687a966559e6c36755556d6ac5b0225602927972949c9ee5d10d9670f9d0b30c9bd273401b4252a86855559b5a2546b76aa3fdba948e7c587d32d1aa3ce84147460d6dba57d7eac6e8c690cd5f74b126482675fa9c52dbb32a757ee13649e92c6677a4cbf6a49192ca2eb32cc3329ad18c6659967db2481acd5c514359248bba47b2e40d27e5d14b8c683ed96088b2fe45faa2e2c451c54c5b54887e3ddca5c89dc3addba876b9653f81e5e71756f0b7f2c78a1dbbd90929d81727a0d0ac8b7339d1456c8ebd2f06236fef6eef723bf3e4c99399f9db8edbbbeb13a6ae2351d7afa87c54d7bb1eea0d8d0ea66e4e0c8113ad8f31726143816dd9294cebd9b50328cf1f10ff09540fa4fae842949416474c61a9ebdbeca2464f5da9de6da0bf1b7679b302911bd6fc6ef8f3c10a6205b1b28f2936f1935214d31a22523a424a526252b50e7f345c28b5640f58f7c365ec0e7bd864ac095cc473f7d2a825a6546575d8b9a908cc0766d43afc335e6a288ddc08fc10337237525569443f7ebd3e266a7b8811f19cc14165f6e8430d31277e550619fb22199b81165f31f29ccc2846318ab9f9a35a9dc1a2fa1711e3671775fb38df3c88d579102bfaaa5bed4ef4f88a4fdc8ad1e8082949e9233b7d64311f5ffc34f4b12895a5ce5c5143fa9b97a2a26edf0df71131a18b95166bf32056108b3df6e6754054160aa926ab150a1f35d4a6793ab647f95639c286df4ec7f637d3d997698a57398391e7874393e555c489ef2ffacc0d2af37480f4e992729579b45903893ae75785500f0243eb51ae494f08507dd9fdccd9edc83c1396c11a4b35945f51ccf560db9c1b3e37506072f4b17932cfc993b9e5469b366ddacdcd5e7f91c90785cc9829495390a2d1bcb29286070d5c7e997890f2f30b57ef62a20926a4f4512da3ae6b09321f765112a22e629e752d91e4a3b792d8470d6506358c46dd03763e542140f59b8718ac09d143b009264d289932254ac1d8c3302ccb7444dad15a77c13082dde9e074b4f41c3cdb658d2eb5bfe9399abd7dcc67f743bf9b1ed3d9d9e7c731e8dde998cef3c3e12fa757333ac068780c91e97aa899cf80a972d63067c7d7f3367d8381e8dbd90be3ab8b76277aa7a486d1a8a8a57934ba40b3b46f570cf6f723be4a18e26d343c8e2861d0d5c4ebc368f4b18b22528cae269844291fbd8b28f6eacca9cf30e89ffeb0671ee605f13228fb03c2e086ab8fad84c155f7c41f5627ba104b7c5c4526a336ea19a71a067dec78a8db4836483057220953a2a8462a2941c50c91126350aee2c4cf9ad8dbbb5b81bfd609877cd77c0c22808f2b10f31d0e41fa1f59d326e697b65a343c507bfced7aa8bebf2f768c9bbd88588adb2a94f04102c060c660ce8f8f22a93265ca1481654394d44d1caa33283787411aa2229ca26fd7433e7dba5833ed0ee6ce60671485cc4e0d683e3f164cd7be1c7c036c1de972be740921f4d2e3d06cadeb28cc4b9f709d7ebf0871530e124988264f33cc73304f9803fa609ef0060acc13810f77e9a5d03fe0439c0f7d5e625efbf4d83d07bc8123dda8064bf4ee67e348ab2cf7761329c9cc719275e456a95c655c62b72ccbb2e99d61986318867d2186c5cc0b390c5b220aca5833229e7cb76f29246a749b248a7c1be0db51dd4f53e6498199190521869620a1450ea434c1457806330d4b9e9999190928df2e291257bedd86072d2e295ed4f876dafd34187568015143123dd021072dc39125d911413cbb9623c6f83c3bb6557434e820ca98c508323a443cbbac5cf70c56bea5777777b7cb08a26767d4d014323830b2238e304d31e254e50609e46094650709103db990b840228116bc6c543892064c5413a38db8a8210c09450d4d6c488cc678150d946c5438ae20c478f9eb4a020ca7a6a1295953cea6458dddfb448479427008838b433abbcef6ece0063c7b7966a32a7f7fa46077d877748f0aa20e3be7e0a586e78e32f01852326477587e405a6090999999a5f8528deafcf93173a5621e356fe721e612b2136b3197a616bc2cec8b5f0b3df400db433f46f229f9f610c767ede102bebd1ad57e21f2431efafe6961775a4c0c26d30ea9c4201383d3677373734f2f1229112d2561b0bd88884125a5b8d4c2163b4ac4adb43b2d250989c154911a4622249ec66ca881176098660ba78cd41d2d84477dcce5e723f3b8c4dd4ee3458d4c0cb6cb2f2a31d81ef250546ad7b6272ea5ffe57700b2b71e984708ca39a76ec45951fa4b87f9a4efbce6bcb82644df3c57f52d3a207e2fd0afdc03287ee63f3a4dd3344d437d1a55c50ee2ee1c6c9b6382b9ed4ebbb626344bf909910e445fdb9dfe613781f702bf34417c1eb2d5d2166c6f9f3dfa650cd22f3fba3b7dc363bef4f93fbf190b5711423af6a56f0e33f8c3607bbbb4c1b6399a5cb994524620361ad4c80282b5ecee55eafe646b4ed6267da338d29756a9a1bf6b58d4964d3de594435aa77d2275ad1ac62f4dbb63440d572947d434a21ac6a6a421dd13370e3d1119a20de15239259a6153d20c9b72ca293328358c4d2fc43d7129065d180113850f2d3247599a06d5abd56ad160448c6eae6a38786e6a3d3b3539dd7c53195a54a1e5390bd79627af7ad6b2e4d987468d235962b65268f1edd85661636487387db230f976496f08e207658cc4f8608cab8d2c938f0f668ebfda37b05cf976aeb3ecf0ddbe452a9aa5c148ea091554ba5cd1210057a4d800cb0ddb2bd5d0c8b104adfd5595332d5176d560c9f36b8a17fc17cfee39ccb3cf5314e19977c6a015a50492ac889206450ed811e58264fec4c0947de941166152104106fd33c3d364dac14818362a19907e6448629dfd9056a61e92fc083119f1829f22435e9c6c543834609aa9e1862447434009338413ae21aef8d07f552486dff670b56a5ef1184a9243ed7ab41766ca20f3159cb10f611e21eed92cbeb0af40f4fc92a2685d521409e0c3659191595720ba00665c01c960e661fcec8b99f496b2c3989c988872d0b1c3a44fcf85b91d8fe8f443e1e7e4326cb2185e7289ed62125b892373a48d94986c0ecb322c6e1832d32486a293fac47c17fb309b4afb892dd5458d55c69591e59c2d838d8dcde2e0b7e13caaa2474f79a90b4edfe9b139599b2e387f027d63b18b907229875df2527b7ab7d7d4baa02eb8db1cb5a0bdbb91599873c608343f7adcdde5311bbba02e09a9dd9aaaadd3d505b55d82deac9648e49c3e59a0fe32cbbe70cea640b3bb2511765725bb720c52398bb86ec3d2f9b679646ddd9639d76d996318e5b62c433986722b4f508a4279e8b35a9f2aaf658e510cc3be0582c61912b193ce3f925be89ecdd781740fe7280f7d2adb705f88f35d7316874639c039ea83e146039185f2c8427d431c8bf321c91242b911ca8aab00ea9b1759dcad2059dc67a4488a85726651cc23eadb5500e5aff29a5b79e231aff29917997dbac7c767b502417795aab7cad3202a8fade4b81d67a59c0db11181210abb9434547d644a575d597e41c60d5a2c9641518bd545557da4dfc473290aa21ffae840b1b5a552f0a464e6f639e7ccbc54179a9939f3ad665f08e43117da65e6409e7b4a6f7a0331183f20f9d837040852bde9c1ee57aaf75b4568ccb7db50c30502c43c4388ac28ad2a953b08ae56ab21622aed1ea0d7ab22098178d917cd13e62fac7163e2a6ed18d536c9c9c53cce40a5437612f96e23b6df95524a29a56c669eec5106e59c524a3228215c495b2af6eb721df161e5a6700d31e5ba9e44179118b1a394c2c767716464ec4ef45893626f652f1b1df8e4e81ddbb462f6b54fb115877ca2513c8a483149a9c949aa16a1d2b8cfc7cee3e298711acfc1130a1a9fb129f9ac4f3bdbd0f090fefa0ca7e1d978ebb3ab5f5f9d755943e3eba57c464dcd07843d8d73a783c669bc983d3118535ef6f20c1083ba23049aef64c859ecebd1516008f0ba1b206e06b8598f344dece1b04e9c410d9969780c85f1ecc53cdd27c730189d260772bada31f96d5bcbe9a9e9c52446e94b4b6988a9c849c999767d3c2f744a6bdd2dae8705e9a74104d0a930bf50f3cdb7efc6515e90761d8d01614f3f27fb65af6c0cebc4f8345464af3fb2c4a7fbcd9ae24421c9476f01887b56cb97149044a1f80589c96f4d607c949dbd9827b4c9c6304fcff0f1667d7c80cc0cfd3a4b43e2b09aa2ede50f5555716ca4af16872dfa6fbbdb1b9d73301106dbc7af7e3273d0ef8f1511065bc7b639987dfafc825ef3ad8428342ba1881ac697538faf9e73cbba9f49998b502a3be5ba1f27db763f32eb32b0accd87a8dddcbe183bf6e8c525069b881aee13a651afc72742b19113917c0b7d5715e8abf985a0fc92be9d7d861009a232a97b139dbe0d83219591dbc1b639dbeefad649a9eb5a22b302f3b80fda9479e63e59e6e00acb321b996fbb9b7959c6be3b99774fb2ce5204121be1f889eed43ad3297f4fddddddfd45290caa544f4fdd138d589de973faf41a1045a4dd99461051a7d3117b189fe2537c7a8a43d1697a08fed1d4be2cf384448a7df16977a66b55d41947d490b21185b24d1b0cce39e7d640677526b83bd3a5b3f00304b135c6c70a4d54e560f77ca00b70b2b03bd3e3ffb26943355280f32637e79c4d89a8ddbe69393da7e654db77b80fe6f1b183418c8bda4e0106311fcc83b90f0631e76ed5a0df1ded8379760705ba1fce786c7cc59cc8ed689d88247671f322120631df4131251f9fd52a0441fa85eed917aa5418e639dcb32ccc55388eb94ff72ccbc663a1ca732d91798e796a6cd284b06d0e73390c4e27282f01cbc0b25011f5c59ce9bd4abf01e6992b28fd7420334c8e1418dcd9dbd3e70453bbf8e9d9e76377a63fa9ec2d198653aa42fac1a044428a48dd2382a49731306d33a04491483212750f0bab135d0c7d3d11818079a44b6741aba27ec15cdbe648a9f3ab23b51d7c62cfb2e4929897ee433aed171a7443b8969c5eba7743d430475b9aad91d33d393ad3e12f3fda1da5bcc160af186cffa14adf2f9f02f36c1460a07c3b0bddb3ace5f2ed2558a9eca14b2868ddf2dd735c21beada842a68b152bba40f104fc4ec08bceb0526ad2497bc71d32cfdc4c0244709a5966962c3166995966962c185df29931a3c6866d80e08dd5aaa6c686461c1ac18810b0905824162cdd58241689058b9c554a508212d01063cea6d9d441c042629158b07463915824162c5129525444c2e21131861149caee34143a183644a31fc684c4269629b1c0229689833a513e3366d4d8b00d10bcb15ad5d4d8d088382a159649022c134b1c01896d73426e6751c76db1a8757e9c44a2a3d6895c1546f3884c8d9e8323d23cda388dc89027a1562b22e9e210d77940ddccb62c73cbd2b5b062287dea54a81f91acac0eea05ade3417bf4d32feecee414971634d9b03db368ce17bc36a40d6947f4b538a6b3d4868aa6124a863eadd0542bcd8c59c43c9a43cc8d48514a44a200d28e19dc760f4645eb797474d469515155f8cc985163c33640f0c66a5553634323e2a85439ee364c44a5a144445a1d7624b6873e4df9795459a85cc4be8964c84a0db5a1210d09f74c28f36804f3a8765bd7714d349ed8babb6777cb962d656f9518bd65efea88d213ee5df10e713b1e59486597d270a0bcb954126473727163772867d9a1bcfba2721dcaeb8692d29f5948f7a339ed50de955119cb32546f43ceeabc2609f7749db775eced9930e8b34d725cc665bbbb7277e52ee79917fee0382f3eaaa6552354a3715e4d8b41a21a21d661a29a560d370ae5e940755f541fd46bca8bbfa166bcc63011b56bd570339add663463cc8c578d109fc09ea21fd6b46a5a3544ad67af51c23c9913d524611eced96b8a6ad634e335e3a579f2eb8c373db3e66d5f3d27a9548d66437fa3c1655f3d94173d8975950446692a2e7ef59c6c9eaa297af699ae26099fc0de753ff2ab212253c3cda8868809f3600ea5763a502fbb326ab819a980f3f2db8cc294d177b619a9105f3ac79bc669f1f726dbc5a66c8d6e1c2bce4ce61ef72500e0a9665a5e48e6389f7dbb3bedd1eb293faa65349898d154a6629a369f1aa58452437c42d7aaa9969612c2b0d41083a9d68c31668c81a130f619632c0ea3eec95c1a15b50ecf9b18b26c358dd28cc3bc88426998f4f5288739d9bc3d9a31e1138ef80476b26d5d336190a56c97de8fac293bca8c184cb5362223e6214ac23c982b49b516c74e89d9a8bad9df9e93cda927b332354cb5b8eec7c996d10d531cd7fda076b50e5bcc0f39443b0cb4976ab553c68475f8cb8c1864c751aa1b11a33477c23ceca3978551b1ae5517f5481ff6abbff07c7d7bfb1b51aab565a9d6971926a2fe885a1bd146d47198a7cd7098477f7a290ef3b29f9e879a584635d4363343002ed84af0cdc9e15c73f6341cd77ed850d636e7405f52fda67afb082e696a4c4d39a1720b24aff3ebd2c197df683890eea9b13aebebaa75badba97c34a5998a92a0a224acd7f0548dd5320dc3b039b12cfb280935bc1b2b06a5d3f0c21f287cf42dc16b23eacd322869eb484ff98cd32c49faa93cf3526050aadca609db2ca99541cc298318095e3dfe08de0d093e82d3f06df332d73c1ace79e12ab9c0cedecca2da2c3d331106a503910be4867a83411630df5cfa063ac03c9c97f972d69d6fdd77a3a3db3ce8352f94210b5a0ddf4ec78f0f39e8d9fbf1280f687e8d6f01395ee591e009f9a9de6304a73163e3d578a12a8b495e3aaddea6d8673c05de56ddb302eb4897f206f72c8be68baaa15e50c37d819f4f51c37dc524ae7d7128741d34fd72f9758121f3dbb66dd7835d73ce738181743f9b77ae79dce61df785ec2fc4e77cdd79d3985dd334cd993d2006e510c99cec7e2a0f15257d0811f6d88b490cb26b5e07c93ec33222e60983f8260342bf9fcca503310fe612937304a611c605060ca63a9d37e9ddddddbe5e9095eb3b1aacbd5d60d6581b60ae7d21a5fc852a30663456ea0df529a5d43cc99ced609ed960f7f0581df62a9ec180ddb32cb963771864f2f2f20b7d9e5bdd548b5086b2c1d6017576a70fb0009a2d4d50dcd0758ef36ef3056d70f754665ad2714b688c48d668183a5854ffbef285ab88491ec418b360669ad16c4ac6264b2925c693b9fb6129254bc9bccb2d999953cccbbc748b8dbd1bfbd9ffecb5528dce547a573567942ca594734ed93342d41871a87be577c6914f57831abd2586459459763d90858afc214a6e777168a836a4be9cc58734c2c8c4c4e013d54822416bad5425552a5ff9aca28f8c947b683333ab987906183c33333373f9f6eece810fdf517cbbab6cd0ec0c5c84581c3868f2ed5200b4c6911a02804502b468fa7600302961063016074eeca2051009f8ce828a6fbfe97eba7a42634ab041162d40e10634f8f61a95060d64bcf876a9ea7e9a32df8067985986309e9999892495470009dd4f6344d840079d6766661fa1fbe14e480b0dd0498c6fb7e97e5a55e48a9a053821e100a718be7d46f7d3aa2d90fca0ca1128925899c286eab4a4a68eba14b185a6fb61ec490d2916313c008b27545d7678769cea0898e28a1fb608f13a92a5069aa1279b9ae20a259e7d2648480a27a7262172e892c391118ae0b05ced6c704510339ebddaa8703c07b4b1bac1e5cab3733e1c704268074c18d1011153865243aedd14b0a58c2cacc86205971f10f0bcc5cab3a3ba1f5e059e3ea8c48d36653d0a11d10000008002c314000020100c08842291402c20cd4171fb0114800b779242765a381287d31c876118c518640c2180184000200688313544c441005698e0c6b33aa5cb3dc42b0d2e9319bf9412f582b028ae05add4b65f46f1dcd741ba7500912cfee1b48f2d60f5e83360c5e7cb9e68c169390e586549073e5f21dc83043ad8bd2ee6a5176725a5153c8d378dba9231fe284fe409715195308128a6cf96924b2be48fa9470c7a87915e34ea3ee4753d3eb0aed907bfa131d6537ad18b78d5a02b59e347c9048f105a9438fb9b528a09ef15642e82d1485620027a574a03063aaa87e6688d6a34e5a2602fc4b30c080f1ab0bf205e218a123203942223b1930a3aa1d8c44802264dce1e9e0d8a3d3b5c4297509f2ec43e1e2cb8732d0e324a898a877db6cd819fa4515a22ed37b3dafffc972937452bae41ae0a9d72c62ad0310ade9a29153dbf8a54faca692c2d8f5902b2d70a8de91ad2b29c5b43a977031b71dfd2b522f6a3343c4bc0d5e26b5825df4bbe68515a6715b4d581f307d1982e0af42718e02c5908d58ad6a10664499a293cf3ee3f56b1b2f4cc52381560c5922e9cfe07a60a54287e3deb07829e6d9d714fe723e9a297631cd787892b334e94e40696c1139597406a50b80b9cd47bc83a958480d073c51c862a2c4a45c97cd9e2706f4fc6d380f73a169b362523724eecc48a38a111f8588c4b4abe605cf6c24fd94eb3c130029fc50011b6734bf853935979254c8e4bfbf4fb345287e9b8a0711fcd7e8d7eb1219d81f00b0c1eaad288f409c56731489d680745329ead0553efb7cc72b52eaf06f65d4473b821c5ca9bf4afa23a839fb2320e35a91e2f354273dc833795954476a8cc24e5cc9c3541df169b6c9429cd93d5d6bf85ebe7f07ee4b3f5721d79c2b1b28a614073e5de1fce7316922f36e89b51dfda17880617a953d36351fc4211eef837fe54c560b33d0b78670e57e143bfe8b13dec949b1b53e9311610289059babf6536294d5d0d4c65af6694074561129612575e8fd8356479051859c963e785c1293e020b16c6f0b6a23455c0b9d08f886b123c230803d5cb1d51d7e926c0954dd47b81ad86ef383b5a2a86a0d326f03031870f10778fc20d0d880c9a5fd17ff4b1309388bc8b8c29f164b07865cf847f613b940d4c227752514648c4052bca7af36d5c9a3735d3aa1d8a664aed3f2da4e959c056855f0315fd5eeca1b5693d5bd02ae1d74237a35d5a0497e28f0eaebfca4eeab72d41fd1378fc9a683c0f243be1de9d7fc17f0e9793e64cd86322288149a552b98d34ed2b2441b9af7a9199cd39042e3b98932d37aaf004f7a3b4c7f57421dcb32ae6596ac84a6f83bce91768ac6ff98ed351a0616d9aed2d2027c1b37eeaee1a186a34ed04802b117bc8beeb6cf5d00306b344174299c3bac90cff12e5b7ea80616ac9412d91050e2a1626c8ca50fd254cf6344f03b072750d7350e5cc46a474739263243d17c7e64a556debbc9875ab8e79f265a4109f21711c2c23561175aa5dbe55204b60c22cc722d720308b9ddcf67162b1bbecda5e64ea354176dbd18a25358f76fde2c3af50957b4122014534d1a23a4b4df20b7e36155eaf337df7d99c5dd0900343a9e5631c668f26b2566fe67c4d630e646b3e3389158c768835c08f733d034c9d7c30d4c04a6d088f1820f2f5930f2853e3f8710f7ab23bb7da8713b60a7936454c8985a766dc4b67ac4c064a0c3307bee7528d31c2ad37117ef470b54ac4e4a4a29239d5b47a2e52132ca2d65755d4917700f6d038b6e9cdacc136ed7283bb15762c21944a2d0e6fd8d62582457d152eed950c51e319032fdbfc708a13d54f340ac87a0504e7575864390ea752cf5d9e0eef0cda79473ae70cc9199e9aa0ff1be854003f0efd3aeeab92baddd6d84b4cb7ebfb63e9a5d5a057456d3ea11900b3d6126420bcc1b1b233c49714584d7fc42a6835a3a17872cac20e0966972722d5bb57e0f5b6f7555cf28f5ba79b718819d9e075b3532b23796da420416e6925a49b9eb11868069439afa97fdb679943e071d8e3662a922b4292738181db779aeb4702276ef77f9387a3cf7843ca3595f472cb14703132c904a85d24c83e8daf41438685881f87c60661c54623e69b54c89f336e00205b93431a15337a2110d09e8d25f485d8040139837d1b975a87b76ecb64f291ebec039ba3d01da00cd3b06fd55fcdbaf8def5c41b7a5f31335b682a25cbb647d92022a6973a73d01fc5fe11a1faaaf6dbfc35c390561823225f4a884fd732782732ab29e45afdad647ab3b9479fca70cf21fe326a2e1222c9232558c2f60991f460a04d9906d369b2199698f09fc701c9d4744b379304192faa60d7c52c68b5e131f73a3ffee16ec7d18d1ec94fccd76ebf72abee30a64b5744a0d55b320f0bbfd4f3667f7fd85636e236f5bf9f4d02521399b41b6a2a54b9c670cca72410147e8fe90a8a9d7e89e7b43c4ded644a6e2e03415a54040d8283be5252a45127b0ef4fb7a95a4d2d38d1b03982711e4b510b97e22c238a68bbfd25d0a85153fad251bb7ba76b4b0c7b3377535066d5ebc612853c618367f3b28c1bfe26f334fd30d96feacd75a8266ca9fc1444269ee9565f10696eb9119c1fa4190cd72c3299f052189c9dff2f7735720c48992a173dff4cc3d77fa9fa2f20732f711b31d37108c3c4ce4434a9dac8c95dd4c26aa5ee905457f64882b300846be113412ee46b85205eddc8ba08976caabf703d3ce8290495c7541474772c2da76014756640c45face25631d16f1311334dac102a9c9561a799be91f80e244bec9bada064efa309a2ff208beb956bf2ec423a433acff14aa74efa22293ce3dad979504d031e5fe2a9ea84be1caeba4467cc67ff8641afa963fd097de19cf64d5480fe462ae9443334e42a4d08f73252833bbfb9da8afa2f2a6b86868e6d3c2dc65e0834b0d5b9a0d52450b6bedf28b0329ef9f1c36d085afdb03a33a3fb424a3630bda050fbaa942e7fc8601a3d1f24f85ebc000120db80887aa6cca2a3f5ddbee2aaec431f48ad26afb29351273f068dec1a80e153b8c80301dc2cd9a1f5ab92491ac6aebc7a459e68b8f91250be6e42df3a978830c0ed90871425f79a879ccea0b501634229cb21a985ae00f656db127d41fa291cac9423ef86d1da25004f4d632eb8c688b7398b492dca06cf0e65692c79636bd41b593dcafd80a52f20aad6ae69dae1c32db6f3c6f215d6d418e3d82c10c6f7176a47004078fbf8382d6691c8188eedaf7560eb2a97223477d02afe33e9da6969fce571ecebaf860256684368f4f236759bd91f755cafa1bfce1e633327a8533b624854cd55af1dcbe953ece624fba5de3168e6f0f10e36e13b380d3c77cca6e589c8a2f51ca0e6ea70148984fb637a4b1b7d66f065d7f139b5736ef53eab444f9dd7699b6b90ddc7aef141d7a5ad61c2663e68ba3f21ccf4c6443d59af9cccb2c69b4d0cf595910d9782d1ef2bd144e1f632ef606b4766eda86f768eb6f6b7e857548d6d9c48ec2851cb2cf09ea28e9bed262addf63c170dbbc0ac57241c31b72b36b2121f4ffb5c1a5d7ad6b2026837c731a77d72951bbd8ae0db776fcd5022b2557ed22b8112b4cc5631df0037f5eebd235b1efe56709d8f369eff715560e4b2a1ee7624b64cc1bbb9b487e523ada1ab2e4ef2c92e627631d32aa4af5dc46ea14227ee92902fc61470290f3bac6e0d4c25f74c523e86ef77cbe8fd0c28b1d64cb3fb4103ec1ca02b3e76e87fcdaf228cdead443823d89e6c9405c23fae75c0a3c7ef4ef10544c1cfd64a11a2f8c348b95c95bc49e929825c6979d33f10bfb627d9e6c1d47fd2197aaa53567c2e28efa9970683902b82bb31788ce830cf0ddefb38941edd5a57c1f04313b1e95e6074883c9292df6dd9b846fa962f4060d03095bddbe3fb1c7b18ef29930bedae2f0f956715fde037f0b9e2628dceec73e77569a8a1fbc6f20d75d6506ede4832e86754a95d6721165927901366cf35205b1b407d0a648a2e16a214183ea4ce2f5ad8bb1c33a8066eef3d2fa0e72e019a9e5f282c269cc1c4327a959c48dcb1512e8dc2d73cee99ad81d9cfc28c6884a76fc80458b5a5bfa8a3f50fcea49479baf5b4465ad6b48fa57b9fd3dab8169e28e4c42b24bbc7857096520e69348a6be8e984afd2d6cf7ab439ace9f77a8886262dc6fa5ba3f5532aa230c21e7ed83a3c91c2f7342eeb14c68782b6040fa6128690c005f5290e5aeed1a1427c423bccc2dcb3a8c8091c12babda9404b7c84904c9d15dd86201deb246a0f3abac6421545d839752c294c3f7cf2e7fb1fdb45bf34cee68bb136bc50c94f2e3c8019e8456d05e54b5722b51f52f75ce5e6994dcb98d4e996494ce5fcf3a98b87ccf696dc204ae1fffd5350818f71aacfc8b13792ea9fc568603ba0a6a7573c59a12a35630d8a1ebec439109d02d4b6863225461e53cda6ae8a3cef435b1018da31f4fc593d1bf30cc626d49b4493ac8f4e8049628001f044fe9ce26e3a8ade88bd5283c5357c00324bec0c3984d18f662ca8cf77380b931c55a0cc5cc975ae19e4dc7621c836ba72b3862f7435b46a301cf53dd22fc1204f773df9690b6418c10dfdbc202c4a73da8adadbe9c00b7cffd40bec32b4ad4e70fdcedcf159a9855603176174f9a788754cf7a90a217bb70e90c79407c32f121d3c380c39d34998bc9f75548ca2e23cad8f7fa64273a0d21c83ff4470d20384ab53e1b4e04c6bb596c95e8e3061863268519c952a67c55d0ffd4a776004dafe6d75b48be477eb11984820696655cda5d5b0a35fd4808230da14bfc67666aaf44de97192570004b243ed5c87943ef050711fd3269b7df390758167f90277c4a6925ed95b63d5e894f1042482c615a4b49b68a4779db233c6b5f4a1786b511cc91b21dfc8d506566a3045bedf7de0790ad31ce49ff8850f8fcd7719b04c890e3c832fad91eeaf16b304dc56a35fbb7da24c192aebdbb6854df704442530168dd836cda519556109c3205124e0a2566cbcc356b29b999f58d2f83d689ca80567fd675495e64142bfe500585ccd006f5f0b37a582736d1951f87fc97926c678504a3c120d82963e80956ac685b4ae3b9c16253700844efcf70492964a797905eddbadfed870a39490df2fb41b6c1aae7bc879726f765398f158b7893577efb9640554d35ef5d4d0d2c6697e18656c4f2972766a64ca39d8ea7f873de91a82bfdaad8f99821ab881aab4326c3aef86f948e9cc9f223c0e18d5a108d65cb311a3a261b5ea06a0ff2a2b2b8658b752ac5d96baa8235e1a07a673a79820eb353073624bb7da6a7227c213fb0c3da51f1d2015abf3ca600a367635ddb904ceed4369b87a65412f5f3c9f6cb6595931e01515d01fd749d6d48e03cb02178d30c6656717d86476b3c747b7ccdca7fb1a0f2cdd961653a1f9516fa54f4174429d9fd9b353466ef1413b5d8614618d392da881065cc120d2d6966af6291f6770ef2a243ec97c73694bfac19a014759c5b6dbbf45dc21bb5d1eec5f3b8746f53f9224412997ffbcbe3082e6fd023d8064a88dbb199464ba5eb33b2f60326772cdf104a5188a0b164a036f5f3fc8ab1e8d14019537cfa3fd5d3d420e1fb8aeabe8a123bb092f9bd1ca8462c2cd9b00b11ec1934093a74c094e4f86fa1795125d2ebd9570fb7196030963d1b91787d61084d8e486150ac8c6e724899464b50be22d664f541dfe983149fb450424e62beb2ef138ed5233d8b5987cde37203155482f5bd16c68c29204b3e33cf8748a97054bc0160be961233655b11b49edc3beb86115c81bb2e9802c1032769a76bc2eb9f736efcf8e212a0f2f8954142cf086e716506a5854d0c8627e312490bc27e9100929a47719091e2e0a279b876923e1e339fc2c3c7af0aa864d312431f643b9b5605ebc6344213c3b13d0bd5c336853503d7704356b5a5890f0381e372c180e86a2d5ac814a5ac19a50c9a23029b8fbd34ec80440c6ab4d8258b3c1c739202dddf8d585b29b187f6b4ce8910fafa5a6cd558b84145ec63d2c80eeb68d046442a2d93d35e844c23d5244d99d264ab2c6d80d7f8302ae16905ac5a93260d9c6b5521d130917adbcaa883c068f6e64dc0af7cbd89d2a762309eaa025c94baef6dc5bb5f2a490dc7e4b2919e412c930b08f613289350c4053e4582ea79d5b7d2e34086d670a982b1f0aaf97be0e126de8965c2c70500af628778cd37de65bc125532177c78886a4d3a533a66376380b2f4eed778b65e6bd009c6377f0972d2b86aea947b754c8ab3be5cdda6524d5df71dc28e2ba230c9b0284750e5806450eb782a58e86aba2da446dbb51807d2f4bdb89a41c2077b3349a0a949ae5fd5ed4464aba7ca855bef53f02810b8137ebbedbfd815873a0a75ff811cac5c46fcbc0e3a2bedb65d583eff5657525d0f636db4b435ec0d7906bac067075c3dd55c1de8b351a0a7b42b4ccc9897eeb56ccb724a5320228f0a1f25c7122a5317e85edf05ca6e6423f6a7c8674e4c78609cb35ad41d2957a22328e6af3332c06c935bc06498835d8218768f9414e1a6f743226dbef8e3d78fa58b930990b50dadf9852936c899853f75a52e75ebdb31224b765b986b8801e97607a13bba229086daa1b5fae264a16ac9f2e9f9bc25343b9b35ae3983c97f89a481821a3051a3170b53e8cf9249a9c1a0bbbd101da5cda591c033604204222395b6f294ab90a884aa274b814dd1c1ae48606c74804dc59ce885522295aaff4512d3084cf02c9f12e423656fb81efcdf52c55416797a705d2f1b1e370e142073303e509764e95f35477d499d56b40dc59fba9d2471812a2e2931d3d39255f83d7c27529938b7c35de342006600514af6bda777c1136e261c1b51101055eca559c9e7a65b3bc52820249c721b00ffd5533b9a25adb83f4e23b808aec7cc2fa01a0b07acd0edc93b253e145edc9789c6834f3c2a79803b1ac45645f1d15ceb3539f60e7543999bc6e2e7950e38e04026731e300ef2b6efa91ea67527c4657c7cc299bae972e80931706782aca42267681acca41a5023de17f52963a9ab45b29bb51c9c58b064b8a80e00434e7291d05459bd0af3f5fee0200c17c9798128c9d97ec58ad3f1390ddbc1a4bc318a7c81406103639e31133e33dc8643256ab571dd858452581ad08d25c79ac5f0a6a54a860be0118829d87b14ad838323ad9760e0db91680adf55ef890cf053a2b2993ba4b4dab1223bc808f758183aa8daebc1202b204b55118e5cdb004f6ab3ec8f306527ef59ea0a1477de5e7d91f111e3339ae8abf212eebd3cd56c64538568f6009744fd2fab377ee50854314ec53659f44adb4bdfc8759e9be4e7593d142d1e2e971abb24baa56da1ec09399655f83a3f022a9a5e28927272fc099141921a819bcb70a0164fe8de2a2639ce3b5b1adcde900fc1316367c463034311663920e20ac275eea534d6e7c0cf9b0d225a1a09b6bd4300b502eedf8211506d5b9167a7976f486f374bc698e2b961ba043a62b7f536aec0d080ba67510077ea7b8f6cd585555b063e7a8526e23fbd36c8afe18bea869ea15a597749d50b5223589923ba6be0e6ec086576c34267b44befa27b4733edb37b8b686cad3efaf284df6b6e0016688f9f0cc6e48160d33db2fdc0e1a0d62a19bd681ffd2f53a7e3c36db306a5e04c9a3541b3e46a6021b975b92f5465bc767176be711cd09be540cad36efede24633cdf194369d457991d0daa57ab7b827d37de796d0dc7e7c33640cf5389a6874ea0a0e4024d70148ebded2e00e763a2007f1a8a50b1f32ac30e7f4edd3e00462ad1dd59d4641a160caec19aced3792839720456678d640b586fe0a54e26fd6446a3d98e6c91fc0dd40677bec04ca65f5e1262374d4919cfd5ec49d2125d06c169fa348fb0272645de60267c57e9750660e1fbda2f2508c94aac41879f27d9ec1126f647344a082fb28ff41672b54a9e1711da109322a0a4d40a37f08094fced5b6cf026f524ba8242a2c55e2c4f7224b7f9ab12a845facbe9f3cb5aceec0ad46c1f20c9cc177d9f108f7a1a7497312a2913a4cfdecd7aa90ac63586c217fbe084bf9184909c138e0d34e44bf782b3a1bd4ea75e05945da8404d0dc2a45b3b644341237f4385e5da940662257784f37344faf26027e02e64661efd94a8990e1fe6f93e2333a59cc69f2ee3a7b2fcb846a0cdac1a1b46e65a97e2be0e215f52b9325eccdc3da940280e700d09dd948a5c24731e2a924abbe95d51c9bf227291dea5d3d7b515b5e45605ddb5f2326d3bf35952f47bf5937ecb04c27940cdf01d4a737ed4b2419a323797265b148630a4c03e5145e37a8f17bb7406d8472d1debd5c99a8aa4278d27c46a885591dff8a89baef31319fb1e6e6cd2deb0b9e8659b0fd0e128c7c2e469e874fcbf8034af3f023dd0b8288604834f2b8b4dfb913b827c636a10970339414df97df99539089d16468144effe83c2deada7ed052b3ddf7ebe91c7080ea93eac2c376ba5f85aa3125cc7a9771890fbeb5976999df5f4e3feaed098e501a1ec0f19d4c0af262f77e60793e7d47990900ce5d22c63339e4febdc240c218c887c3c26fd9ff6c4930b967f4e3b488029f16b28280da5fd5bb81c683973f79fb06c8fc3c5e200acce4e2aab81a8e7ba909eb77bc33e9007758acbc2a6dcbb404d1a3ca05cd82bcadad1196377391b4d90664411cad309bc463af7f68745a2c24f683fbfae9e9d145b2ff1ea7322d84b55955f558ba19c56e3285f94dd81a0eb433f4aa877cfe8da4e6eb4f6e9e77ee45c318100affc37b4c4fb8bd54ca90c7acaa618a756151e22360e54fbef451f38132f22541fe0116f0a7f791e3c41d70a41240ca6ea7f1bd9ff0ebfeb3b976311744b12d1fbca5fbc252922761f48a6bbfbbeb7d8782eeb8fdf71272273e912a5ac098d07dc0f0b3d23eb289771f47adbcabfb9108039324f90b64a0553ed8079168482bfe99f3545e4d05e1dc5f1c22a52253023324b59deac3ff058a3e31115278e00b3b2bfffb0d53ebdf3c4a28870b9fd63b442c8031cd89d90a0d2cf76cb037a1deac99d75efc2f96bc332451256df30be07f4c5cac10b790e250472b4ade3823a4ee0c63034efa5b10ee0508284b7cfc2d2d7fbb1df10d93941552ec7e3429b79bf9aa941293262a11275eb22a95f472124237e266bd3ee11c81c646aa956fa704bfb3385a921706fcb6b139bcf312e0f465020c1d735a7cd6833e661ee83752ca6c81aa10e0e1f8ee842b916db99a7a1eee1b9a2ff53430ffdcfb097df25bf46e792884752ae8f8fbf887b6427ba117173ff62e10c4b4b8c85b8f1f173abc9acb89f22ae1e558d326925e92ff818f3f13cf7d70bfb8701bb3ea05dc63e7d44c1e75a854adbda6e836dde30d8aad80d078757762f55b22914907fde37c02d93f6c85614a5c6ba13608f46c08f0daa5d5db5c9b6562ed88da4377f8e918b12522a8752921bbbce06d974614aa837b603717450f19b1ce72449809f0d8925d14aedddcf3ec6bbe9abc2464f5b63b1b064ca660c984271600de0f499dd449955c087a8fd5fdea13ffeb8c1799fef56d426d17bed8bcdd8734c70a68ec616a4701164d959983f49141cec7a41d6968a6f9cd26f9bfe1875d38347a3c4cc0cd4efb8e119d63c0b1438d38de57b896680df65feb0094068fce554f741e449a871a4f86eed838ca486c32c36761e0b0005149aa8d4383ed8e8b8635a47b2ce4d0604bde3ca29e3e23aac4c4c7757924723c23429aec53d5238f607516ed62d3086a527889c56ea6aecb138fa0b9fa64a5f83825b8eca4a379acb1ade2386194803dc05681ff6aa397fdf9c0c646a666f252cd0bda0b8093c3dbb0d3e1cc8487ebf6ce10faad1c345abf88715437e50ac6e59ae3569ec6e9ad9d6f257cbcb02da5404e751be6e2b1f13ca2ca5c88c888f45d32fcf2522d0f607284151ae745540df86c081adce6305107893d96ae6e85af9c85674857794b47e4bc689358d7ff11590d178175a3b866bbece98649e865a735c191e3fa52b83ebb62a275b9902a093943da53f33bb0a6c39ed7e46d8f2a4abd66b676491119ee676456bd635f76ab184209adb6dc268c1b6708ceb4c8d79bf9574e56720da20da5d43e7238925b10bdd2ff0c2edadf0733355f139a94452f9aa789b3df7d454cfa5d31aa3288fcea1e8dfce527f81182fc77e3f52cb09332303a56ff89f5e832c9db9ab03fe8dda02dbecd5f723069e8aa07627afafe0bfa4e6a1909af3d1621f2193ea213dd88dd66a4b3cf459d12072836ba7fc8d704522ee7ed3cb1601ed54173c6e00e25eca7581b7c7cd7e17afd1b4ad36014cf4c3711fb349ee933e80ca75614201c1b890525ca2fa78e5d493a41a94ebd04a0dcd21318044ce650dbc7568914fa45e840c8cf8c801860f32f7e3430521533a07bf609eabeab99b01a4cb61cfd7b18db09e6c7bf9bb97b1d19686e253144a07de514b45af695cf0f4488f09ac138ce202bf0c1f0a5f5d57db717872992052216f98fd61c5910869ed36127d312e0d89b29772356074e450531440d415dd33dae8b1308ef1a73fe675e2bc1722c4409786f3c72ba63968c2da5b4bc868d0c3b7876ddc9c2b9542670706643125d6c560f7322ca1607b40e22840593bf02ab250f4cac7f769be025314b326b8992fa8550faa9cbc5035062c386f08ee4bab82b7eb13f9f3d9e4b31fa655b51f1d07444a820321f6b290e4cdf06f1728e206782af0c93de51c96198ea75244a77d828f3c0025b2c9f0fcc700c1e704193d8a9002c8567edebdb828780586bd4c29d142348bc33aedc3218bebfbc0524f2a566e87ada9872f0dea7060e0e404d9ccb32c29f4ce50ba44cbe70d1cb0cb763f65679c93b7a9b2292e17542fc028734eea7defd438a41101e413c5cfd7b1bb5b22f27813783976d3e507575b1c77499e0dc5a86e3a158f813f990b58adfa3d497b3de41dd13a1245be8e2952db660f511e513e10e7a62044d109e9fb5cc81a12e24f062c169a41face3110639c955c9374a130b1017c5542d5ebe9ef58a6964bc2c6958fb121fd534df230288ac1cfbf436f0694185475c4724ac04009588360f258e0b6ab67dd4950d15983919d7e33c1bc53dbfa7e59e1de258a5766f930c56f27dfb8bcd325807fc491205e5032de576593f9014c3dbf27d35912a63b27dc3b5fa3a78204df24194f0db9c84ba3fe5c62d9b4e35826a1898de814d5e8342658d8e1c889860f54c7fbb3470e720bbfda7a30f902cda0b52489d4e3f33a0bc7533fccb6e0cdaaffc0d6754858eea665233fea1ef3652c2d4e8d6560b516be7352e311f80803edb22e636f40382281334b90cd90af1da07e2cd4509bf0ac981d917b0373d393de87db9614eb786d00c71c52c8c53d77c3bc1ef8a9bde6fed6bb8a327c21623900c25e08760b05727cb03bcc6f0370e1701c27b5e8e6c96c46252057883605c58e473c1ab366cac6b8641d1949301033a36345c0ccbd29fba6e751c1b40d1819c282f9cabd3d25c9c95a662dd3ad4c73bab19eca7f1553642010f44227c23dc9600e62e76509b0564d9a2f851ac3e18c846986c7f1053089c4c5a2a2bcc29fc22cdda20ea47ecf3ad9d04d4815af97a96124a07ac128e0b25fdb6b6026f2d64321a7a8ce0c42be7c92c8c113a847b7d87b6b590bb9047252c400637d12ad8dfb5b8896acf86bed06957ae9aa53dc8d97a946769cc59f84e33fd417580ee9c4e8f55a8d3af754a985cfd4497af501a3b2874fe6af37a2d9cc880f1f94a80315c6cca3d16d7ef7781c5d8491946761f94c64e2ca4cb8a2fbdbb8880d238c97561348b7adaf839268fb9ebe1a635137ce08767d20e43e63ef63910c20a14bd5198070690f5d9f92ab6d9fc6583f04b313a370e98e7d6dd6d1a6712fff4f175085af614f5ced42e0457d4edc295c279b971d8522a50bf246f45102f0c6f171966bb31ab8503c6c181d6243f47e7f637d79ddb87f15fc9305d1d2b029aa66c58f0ad298b3b9d51382c1e45e3c42b821a92366cf4a46920726d30e035b998364f441ab0f404174f2afb845c8631cc99c32fe470cb260de33464c7293f60d86999de5bb6f4fa6760f14853d25f798759f88e4d0a9c3709565c54b87f05c38e0539fe399a62807d48cb73f7898bf56f21e120e9d2194a955e3b13f281bb1e1c6e5f15e4a8f87232271ae95725d181e078012660061a93394b40d24411e2b8c64c13bdce0e7a8d60487d7ff786bf19ab287da4887fe0426fffb37d3a5c0f29f589e8d25a691c4209597316c3f8e01a4383c6d6f1a196cd457157fece3a81acea6bb98e263c02293dfbaef49a9a5caea0bcafe146a08d7d5463e6d5940bbe20986b2cd83d9df32d9e2837ef2e0aa729f2001249daf924f8784a74dc2db955c81305a80f03506ec2dfea9fe8b928dbbc851980406c7c57482708d757551aa5279ad527f68231757688371af5482f90af33dae7f8a22048eed5dea5013cf3196a4a0a7bf9aeb103b1ac09c0df5f9879c81e8ce0a1c786a12840249864b1bb07e98bf3275a3a5471f708c461cce6e8299f4196f18e81e4bc4c81a9c140e8ff623031deecf037795cc5d86f719020c562875f6b3e53be2b1efc96574230c7ff0632e71b808897b9e4a4452fc4d739f65da69a233f08773483f82cdfd58d4e983d8efc57770eab510848b99fd3375115c8377e6fcf665353ffb0fae2ee1739a65c20a4438608d7a8a8691032daeaef82f628f68b3236f9d4036b61cedd569816b2311ef022683e2f0452393722bf43f026f592523a0cd056bda47dd70f0deb2511ad6e628ac666049ac384e6f7bd832e29a406cd56a67a3d407cf39231a8c45d39f8c56debae37446b720649c696612bc4522f446be4d4f9ed9f74aed7d882c29327ba70ef5e86e82acea22a0f7c3f3dc8c8891ad53be3d4e539316dfb9791d074604cac094c26103968eccb67d1e06ed947299bf55be1195a6cf5952843ea525d3fec49cb8b0fd44dba07ee0af7a8547067a39cd8cfa8c5b5dd11e5c2baa16989d22692f5fe728bf864e49a294b0d1a85eefc3661677d5b225f9eb1b94eb48d9de05198f1adc06e71b113860c30020d662c53b7697b39b15ca25545d4a60e5a9d87378c6f015e3d70a1ffa4e643c8e852dca007dc2c060250a0890cb0aa291f49e97bb74e59a0a3c42e4ce8884495cd6cf7a379012668db531155d3a84e706dbf33e5ed5221cdd1ec12be8c9a51e48451b3690a625eca7c55b77750d331df13ff7074542134bfc581d47a68d58d156e425edeaef011c65908aeb9af58d4fee7f717e29091376fe1a8fd3638cff02a8600d0feec95dc16a6f758df6ebf2454d3c72985a17174b868a218b168b52c36fe7f1f0a992483d886b4c9304de0231df356c6c9fa9a353acb455443b26833ca4f978428b6db0c0790f61abc5941c8dbe2a6394d3774dc6fe1d07388ef4b67fceefce2832cb5975305af0ea0e8dd3ad3836cd2385260d4aeb8211f349b52589bcc108656a6d3e337314c6f1e204ebf12e0adacce0d707387d6beeb4e3855810567a395d30c1791af92b49322f9c1c9d3ce1365b689b3e250f2fa6667d11600847515333abfa1238e956af046a9b85d11f575614451d055ce012714c7ca7a1e575d23d30cdfb4e7d67a60fc8c85552c7d64325dd048e0180fbdf50661e43f0eddc124db337f13b252e49545f1bac18480209614d3b10839766e0df6b60f15831e0049bfc3b1e6a4f87a36c0c224a95e1599c9c1b2ed91ccba5e0505e953c867eb098c57f2613d1fb594a85e08ad41fbdcc9fd39bb7fdbac31336680e914aaad7c79fff90b573c648ef282539fcd275d1d0f1927089062fd11e122da96f6bf6458ccf2f5424af20ee6164cf960a03e775313a29b02277a94571aab5bc01ca1cc62c88394e6c032ae8cf5e8cbe856a3d92088d50f45ce4e1f0c02305f14d2b59ce3387271ac28a03a49da1af1fbb4ce90c30b45ed85da61db1679c83a26df00c9491b683e184411b0d8b1a7ce1d859f1bf4673cd61575d4a75957e873d3a057561b3212a51bbc30aefa5933b9b36572e2ff66e30e007b92e9bb1ae93f4cd7f53c9035d454262a42051e8c031fed6c6a64ab599b5b233a29573efdf44eda844906c97b3e42a1c4dadf669c95b3be739ec938813ed183e902143eb66d39d3eb470acc4bfb12a607b626ce65356cc2a8f5fcaa382bbe1501fecb084bf3411a0b5e5b1768e47352155746bc21c360b356164b29e5e8ab61894fb39d02a63d53edfa05952c110ce3b18a6ba1d21efb41e62ccab407df86919fbddb939ebcacdc9e1ccb6dd520256f8f9075661e3b086c55550a168618c7527524e9375eb90283e40dd33b41512a6a49f4f8128286a558025eafaabb817f8361f73c3cab45d99cec08cbfd4384f08a7a9ed8356fb9a539b4081789935cf1cfe5eb2a84de36a0158c1333ba465fd4e0ec2dd0afe1b9d20c329d4188f072b58c546598730d2fc734003dac1d1426be39dc1b98fa113b87fde7ed24037166a116de0fb050b71b42d764e66ca6b85f94ac8b3e866f1c0a82e5292793d8ad4f5495997f5a12cb3d25ec6fb4e264f6629156117ad6fd81023c175a40c12e22927ef303d9dcb94d9dbeba388b3fa84e7d7a04ccad28b6a250f656cf4484967271544b2bf0c80a0a244c75b216224306f06a7a121ab2436d472483be67b460e466eb680aba05aada28099d431d776bac0ee22ba6f66ca14627ee6ecd22c6f3fc2d227f0374b59617d01d5ee7a72ba0cfa82190b03896319fba673822286145dae33bf6c82820b557ba0ca348362c28670ec28dbad559bee89013a9797816646618c72c142433f992e1ea091474fb34613d09e0bcf55566861f17ba4d16f020c1739b393afe71887c8b728e71124e88c1694cfbb046f339ee0b349327dae9cb8f694144fc0986bde1aadd92679c967f51b0a0403eca694f8c414ffc0afa88a3aab1b2a32a132297f427d3a8411fd0614c1d3a4781b2b583f4beec088205a1a6c8374fb4f637bc8702dbbe4d6a065aa9dcd5bb1b3fbe500519be8dd1fa9876d72ab0ca5f287a8cee695e89364b9a24ea883081ccd0709ff4646e61102b07412a241824fdc681c9998fe74085db512e1d4084a5d029fe025bf994c1d5873e1ebfd3677367c801b6761bc8161e3d3becafe0f435367da1483333bb803f67485b3496e0ac71c44455a51d85f54601715bacf95c9ed71aaf36b5ddd45c95e86dacddb9f41597d3d36f3cf6dc42a2c1001e33d06e9b8e3ac623dfe2ade676cccdc68f0928a36519716f2b694d26c7f14d149cb7453db35480439a2a53bea4a21318532edab20f52b9e13edca8398a620470fb8e3c9c5bd737bc5098926738c3250d89f984f0088ac6c4ce61c657c94594efdae3b6a3c8ac02b60eff847ed8c4ec99fe2a927e65605f05b5496237952a1d81960690789ec7de7ccc07d19f136a34a055245df5ddee97650d898f2ab3c2e9ce8bd38355c9439ecaa66e7ba35d0ce846b171081b74f78c73f3f0dc6f13063a3aca4581189601a127c733865d7089905a183210f771c1aa8fe804038057598e448da810400576dc75c140f40fcc7075442b511e78fc4b6afcf297d7b08e0f9d3f1a3faf3931315817a3742af5a8abf78218a4617ba9f8ad7303ba82051c055e9ea77aede02703c94f8d8fe8bb67586126f0795364ce4b77ad6decf390329c712d2f3117f5f59eda354dfacdaafd7369ca9a5ef054614e7f19589d4dc8a77f153f1d521f77e6cb251eacb7830ec7f374e9bd2736f8568be36591417d82b6ed1de3b6bd3ed8f8e247e191a3b9dd6dd32e30335e908dcc33ea34f193947a4b0da279e6dfcc0b74a1462783e4e602aba55da0f3c1ced86c8f20b1fd952647f12acf0b72806e32d40f8746c9cf9cc582c5ddf48955a803887328708e6096a43f55e44b0081b54dd9ceff58fbb74b334eee9ec601e0dd5871363e9554edcf73f5ea05f03dac65c8c051d2d65a28ba9e3b39453910682f0796fee3c691f63b6ba3587696c8c4936ed7583d9ba878b5fab4806027373e69d35dd1c3d6d986d54968ba10d2f2af6208c8279b9b0b0df1d9868ea9869f327fb598066d9d3da49a9933e45c2354466373f03ca77343ae403bb68676968f9f223ae5d93731b6d0d05441ddb6342facb349d2d077b1c362d45d66354b1c3a6b8fb02a8642a591d7719842e5659960a9e2c24ad468f627cee9054402e537ec49830bed83868e09593ea34160d285a275cbb9dd80e7b56fc936f517dc8f19274767314b390bec440c925fa0ddbe2ea143871a8c8b7b2c971d2e438ece11cd3c9515b23e2a7a8b7f24a42d7d875ae8c7a3ed17047c702284e45436ef181890e440e6b46a952f400715c5699915f5994a37f15e65abc20ad2a0ff46cefc06aa95e2154d8a322cf4f156ab47b6b9e850f7c3a16b38095d705fdb2056bf8e49e0d1dc2f5c7df9b1616120fed21d032c5a945449e9af294ff1426db42d2e7939545cdd1dec56d86129a82f0cd7e08c97e76b87b044abb3e8e9933e69fc39e603de0d1a0f135a693d6df900aa188fc1648823b5efe00c41241a26204c9be3639d2830eac732445043f533887c7971798b9acdfffd5a77cd8994d6efbeb0d31698df85d1226076e1b115839cbc927b2d77d4ff6cf9f5bcc37427dbaf5adba3d89a516ebd0afe09384187171672c2886b571caf8fae8cf18000d75a984835c037cbec110d00ca5f0587394bb24d3780f1a618052ac29ae132e6367031bfa7facf22e1019f78a8d4a80ca043f0ed2a0a62e5444dd6f184ca4adc81d8f5f369bf2c2785465149f0b8614c9099de1d879ae487c677c775546e5b337d5eff3cd8caba598c3a2be9be8e8b7d479f6138de94d5394473038601b601be8dcdeba3f6419dc2ea19fb522319b519404761a12ea8b447ec83e6fce0a17b5d1213314ede26217c59db0650fdb1593ea61cd6c39da15ad9275d977a7e8a26566b08f47255d24a59cd3dd0fec2857cf5d6e510660033177dd40e5f124ef849c137467191ea0e8bc60b308087f634eff261d9c0c198be68f26c5c1073e05bfb926d91e8c54b2b2f88587ff85debbfeb66955e115c9b1972bab2e0c27eebba0de07fcc31c565542274602051b7a63270a3a95579a3e3fcc0e9b3fdc7742ec3ffd6e903b0ae269565e465decf7cc509e862382cd224b596d4fd99138f9d542e41940a9f77a83192b5ae9a98fd8b1ecbf97872a4feac4167fcc2fddb85b835e2de05255d1d4333ccad2802214bf66544847e5e511f8a5c336458656aabee41c555d78b5559076311a16ab4d9408950bc106964909e485b5f56313c55a036f1294d6163fc7a113df7aef7fd5335bc058901c63995844ff3eb1d19173861aff782edb57f710960dfdea85e36739e3ed577340f57ae22f63cfc52e765455eee96bed8db70b5f0086d1f4e98aefe6a34b39c914eedb597ff65244ed01bc5ce137330655262452a9bec8fd7cb2482069e950e0c1d977c23c4ff52bb6edc593399333f47774e3129281829878991ab8d273e3bf74e63d64d18b1e8572975b29e08f30d3aa39ef8b457c10e277110894895934f5210856312f65e0d2b524365934d1f8c93d64ef16f260cc1d6bb9588fb38fe8222db84b12e167bb39d3b8f0680e74bfd64d87afa5136857b19a3db7889445ebd9107b81b1118016f3f6ce905c2646bdd9c2cd656f95c92d5119d0c04e09b4baf568257726e07536363ae198a6d85af0475adeb20190512321cf9a2194754784334ae420ece1ce21b42240f5945dd8311d3d0b15c6ca06e0064eb5d6b9ceecb1ab2d93a8e367b733362e31f7a51eb99ba024d00dd63385038499a5691653e2f3b7e61ced6c8356b3511617cb6a34686051140d139c98dff7aa8ed4b3fc8e5e194d300bb0a0195b7ab61e154b742af6e2f31eff3e383e104e2ecc6f54278bc8b37c1218c65b56c07c620f3ff6c352b52de3c396e4acbdb814f663ccf11417fd94ab7b9b6e8153039dceb56ad850caaf99efcaa1936234a2654f37de936a8ba62df22f10a8ecdb54db27536c4a3f55cbdd35ff282b1d7c385b4db36349fe66bca7cb9108ec7e602260a9c63c87f42213cde4f532466cae048fb6c06d5a8e3d6fc6585d47970a5b937549bbbffee5a77498c029a36e37de83a6c2189a0bc2c23f43187a71da475a854c9461a2beac4f228148b9220209d9b4e4f556d69ece8e69f1d331531414fba3c5bd11a4cc5eef7669a4ff8b5bebd545c55b44f5e1ffc5de951cc5d3cc14ea1acb355f538561dde127a5188c12fa7c65ad109a1130d8925d09f0f81e33ce0e83d184b51fec7dcbefd7767a500fb47c3d0023ebf3b1e36a2b96000446ad4ae48eb33e7bbb9c49886d0739587853d0a91548220ee032eb6185c325a215ab2b84edcffe46f280e199417d9baee47b55d49752f0b4574f4f53a5332b27d9198211fef8b1967901d65de7e468f98d7fc6580fb82024e189b220af85d2066fcba3513fef00b8b067c690147dae67b786f58fc25c400c5d1c0c2520ddda91185d7c33a39febbb984169c5e8c1b836a9846f991e42172614e832532087a8493970261602b19ca521c145933413c0dbc99b6e74b5dca38e46ded63226814ec815c795056ae2572c2d06cc143aafaecc6dea3dac84ba1c793101744b0e5ad59bec14c7f58dc44ad8bc197cb477f2a682e311d9c355b2eea3bcfb0f33ac5b87767908f31d208aa96f76e28ac7bf7576306560fbe1508b5d62eaa2b99dd97145aed65b0b6b8cfa37fbc9dc34a4d020243628f7747ea5b0fa85c936b44918aeac077a8f6b392a88eef88f0fb960ee0a4e0ff9a68182c67f5f2fcc7c45cf054735f1691380fb3f8ff6ce65db1313781a20cc5ca475eaad2401ef343c90888ff0297641dd82dd35aa1b25475d4c48e4263a34ffb9c2595555f4e795e9c2e8c74660af84e6e8f669256b40f9f8721f50875ad014880f325a03964cfd99b6225982bf96eb51160470d04ae65f51c9c036333f1440b06e7d3da0a96a65472e68fae3c94d411d2df3d047accadb6a2b237b15a6f6da859fb8083f32ea2283c95541fb82e139ce43c07febdba8637411969c264b124a67cecc0474f927fe8224c2d5bcc1b28a93ac0d6c251341a3d53572a1dfeeccc4a69c483bac847f27a0d67ebaaeaad3db0a3fa1ce6374713c80120a645ac77d157e7f9dfd16a1c27870094a4574e81c6aaadc196e31c5ec494eb452d45ecc9d34e6f7bfda3414acea42c04026266b269a6f17ae0926f8af06910edf73162d99e9502fd81064d5bd318a5567a2b10389d3eb69ed907eb6edbc71d8106b3ddeb9eb67c147bc0b77d3b24bed39f9f384b7a9b2ca607f23e0fd49a791b11f3c83c7da97c9092704b3255a5f73420e461446dd44917a95d45b54702b1547791f2834eaab4902ed2cca159b78c391c141c657e1ad70a84bca15a31eb4c052d9eab2f5ff0f336d1fd58ba903b0a5eba9ff03e90845319258830f6362ca0e0d68eb2118c9ac8dabd3f8666bea29d8d501a58758406c727189db3cb418f343532ce1604e486d5593e91e7b6b7cecdfea00514a72f3bf23e1578c73c405471735e9da9c697b56a8eea6f239586a19c7090939e4abf0ac9d52126241cf6ab2a3c230886cfac5f0479893a2201c2e427b2290fc11a08190f057078d4bbbde9e246f20148c753facf197250a51cc3b133d369f2587fba9fac4c84b0cc802bbb95e62ddc0554f22ea4e12527a97820d2fced949cf6f7d051004456c562f18cb7e41b550648fc8715fc212c1f51b2764c4b285a12f8a6091c85353bb6ea1422b1c3b307c9a5fbec6c749c07413b37ff96d7a28aa67622f51b0dcd730ed68738b3810d6fb4c157762b1a6d403ba5d7095ef8086d0043920b4b68b836aa8582809d1767e2d6ac6e92db5aae7c32dde51ec476170c424ceacffce30570034dc10185af1d6ed7446bab546ce4be2cc0ca6a570df373383fbf843847403ba9e87c29a0667e74296be61a12802eb12ea5a4f502bf5b3310415a93ec7efc0a277b061454626d6d4174cd5273cdbbc67eb74f53a601f535370f605d601bb8e106813b65a7a2cb3a058e261e485c3fb47c217c7c50f7fd94039cdabd943bb10a08286a2182fb3a08168c694b461b1c58b2537acbc2643d6f4e8026cc5fb073361e3d8062abb9eb9c22541336df217122a5254375742e30230d60892a05130c0c789875b3ea182e054fe415e9769f45a55a06b807fdaa382c73eea2aac55e9e128ea7282a5b06ea867c3d446313910182baa8671d89c9f6364e93f64427f88e6e297ef25ca15306040974086cca602a7942f6105493afe943b32c72ad2a87899e10e23a3f7d60f41f7588f38ab6122ac5dcb154bca32add1e340129fe0fca8a022676b6fbdffc6a20ebb43c7b1938215b14af31c1e5c671754bd2f0700588837d87a1404aa53400f5745f0bf15d03cbc46bd56e20bdd3d16f78252ce53e5e2ba339155ce81170842585665747f587abe8d0a97c72041bc4d93b4ed7304e5f64dcdcd960be4311b95f6c1a44378548f156a6d4770ce2d04f7d56b6edf8b007adae472212e9d2029d88cb617683b953164c1ae31126bcd3d9dd7668579824a30b8a431510f035d4d65151224c83ef63c5b9bf494fd762e401c95c490f4ac3687bd09f6b2b50bdc7938238edaafa729610f46c12c2d0020090780e3a955c00a74f76e9e991e5d5ae4828af7b124ea4c4817639e77251fe5765ae584e674b1ae12f7e83147a69c61c659ac6abe1a520d3bc6509674e147cd7b965bd7eba2a11366c1531301dd019ad87bc51d39ce7154c3f94629c9abc174fbbb6aba6b0098fa1ac8d1139044a87da492cc7f7e381fb0369824568bf3af57f89ae743c4c91abd5916bd25863c47b7f21d0617117cfc115c00eca01ec8b6f6028cabb5f715adfbab26e89042a500b24358c603f1e4a1c4e4e20598c8c3eeffea8bd0f8d62c891ba7740b8bf7e4476764ab973ce66b0c32be241f48f27a95bca3d1527ce142d8878c0bcd6442119f1cc7b3b6057cc9c125defb2b747a39f0c7194ddc5f03890adc82c6e913333a0adf1a9d0d283aec91c746b2af76137bb740661b22e159ec59ffe7b667ae719be7062de8a06223060dd3b554500835a07a16ce4a478e5380c88e28cc0ad2774a085d6c884a6433322004663a221d1d861e4d1c84e546feb62342d660dd0d4c4597b08aa9140850dedd9461e8e49f6c5d6072ed137e26a88de4ceb5e35e034c8c3e30b91b578c4d47e87c690452385a7c1453c21f2d011680d6ef5f37ca91b1791f2e9cd0563a4a6c8531ac784268cd741c326e47b71e47f30b0c0412209442c6fd84dc7165428ee30d5246c17c8ffaf2efe1f9a0df552bb3ae95abcce6cecb784c4e81cac7715c9d4ec3b2e8565b9b20899440f42bb95798d4a70408c8c5bedb918317eb03402b5ba35e5163a28e9985feb71115a1003ef1069394228d14d70618a649ed120b08fdb4fa9649de556c2c2c4941e232806fef7ad0151d0c9fa0c6074927550a21ea10cdb44401ac400211d98ddebe7ff5617c334227183a9c2a5dda03fb4c4fc4b21a05aeb038ffa028cd11d380681968063c223f82fac6399199a7fb072fa41d0db12ee99dc9f1723eb4b61a0867eecb1d4bc3d589536ea2aeb548a242fca8d912e2a8443f06279a806df39f4755109e3513a72e8b0d1c22d8b76d426bec434d0bdc284958f9eeff0c45d1b9136eb28a1b789dbb3aab5550fad0a68c27b98845709283673f1462dbbbae324830b6e4db38d8f916c50b1d697630dc6af4298e26b025ef88c56b2caa806c5c8256609f8ace0e07f18e35a36dabc53a006033628d278deb58946b28a54c1b90e61e12781169c27fc6348ca74b074c814e868e73218b702d6784776ad663c3dbb777ceebff3724f6e95077703e30ffc479c22cf0f297fe3c5bbfe285a99741dceb72f62ed926c541edbf1dcf674ceebb011d6357fe29a034d6e456f92e99c5de59d66aa319234ab2023c404c7f3c5b82617866fd2be8da834051404b9feb5bf95b81c8caaf552673f41c6206170b61eb69cfc8453d6cb7360734486c2621f17257ea4cb72b0552d8067eaa35ace7cf0160d8874191b8c5deae470e5f33fded98e5c017ec817ed36aa7545ef1e5739517303fb9628b87136b9e602df81860716582e1421d27a3fea94285a4bcec9e841a8d9513cf7d181b8fa71c032aebc82e58be3b24da3df573ab31024d4e0cddf8c870514844615218af1a4dab2873189b77c6eefefb4faf83821b2e19763b51ceb03709a4b94c1a715ba7c0655fb8b5f0eeffbc0edf59a39290c64cdb4339add5d0dfee39441acab5d82162cd8c2b44aa2f7f1d61cd056ea1dd12e2a14edceb1cc2cb0a01ba49304abdf02a3f0ef091a2d55119a12c46c30b9940efe6565a360746216793668c042e961d8d18e211ef190a766b6fbbd3e34f28bf5ac457b427d82e2e06a2ca7ef202877b032c528c0b072fccf9d47814003c17f11a6fb605dee1223bb9326a424b46c20e2941ee3e5fb0229f0d2adb1d7cd5fed0d1ef517f13f14aa8fc0a5eada639b41ed11ece506ec7f2cdc1f01bb5043b6d848e1c6d4ab90263666e115017eef34dd2e9a5f2220e6eeaf6e0e036c85fabbfa1cd7f2b0dfd20e2ffad06ff38f5e18905e9a540cf95316aa69e4ead59ce9268f19647b053ea9d8c70d184aff7a2991af53d80f6bd9c7d9ee5a808a2ff07eb06d4a387cd4f376b08c24fb0b78c2e2494e3d095ced0ed552a423eed35e66c10f74cf2659d132cbfe09538b4c4b6085bc56c1318a5500a9efbe89defe6b4618700cbbba96f5884adf51323f104b44adbe39ba9974028d472aa8962a9a47fa410cd7157537c11676105838f61347d1ae518ac7a431f110bd28860026de997fd5c626b56169df06396ea86958ed4fa30c56ee7656c88d98ad541355e1c485aca0334ac833f0f37784ea596aeefa58568518423fc3de9fd6fad2b7e8e1efd1bc89278ab3ccb122013653467dca6dc9ef4a5e43b3e0f4618b5f745aa18e9f162e4e4ef62d14c27fc7f443725f9ae00d15f91c11a3860f7219471fda33c12adc0447ded50662ee53c57a631c2312f9095de63692cae441024a4cef2414376b623e783cd30b5a63308f6dce5c6991303099a52ca5a4d2e0f2c46cea1063b9466d80b408bb873685e0e77961788952492473c227fbcf777fe9173a4e9366c272d256848588ff12aad3fff64ca50e45d5053d4c60227cc5f4d672792d6e8d7379da051484b83937b820f44e704fa4efaf2a023d4e1d679b82633203e1c9679cae0ffaf3509203b6b4e248937c0868caee391828de0b7f7091781eee4785310df7ebe6c2507b3a3731768cdb147a91dcdfeb0d77ed77f349e99a0c619513f2cc13315052d2b90abd9c8127910a0676f6dc736ca437c3b5af3142d8ce3f7f121ba186fbc56c62129ea81992b23f20dee7cf3e60e9630b9f2eb24abe2a6323262a7186528a288e241034121479328e684fa4176a27e7d873676f66ce466938e0737e166a776f230527ecbcbb825dc69f29d124e39b3b1f14b587b4dcb20c6d354f2c60b06901a5daac173192c0ba1cfa3dda8d5480688dd16e1355eb059287628aa8dcfd8fd0ec831905a91eda0643ba535c519e83a1471643c422ac1088f79b40d653c5d4aa22e0c447eeaa104021abe62ecea694560dae4e4d2027ccdd510a79e375a0c444bfcf05ae68c3efd6452921190a7fb9c695b60c6104bc61bdfb08fe9af0039c5af9265695f1697cf5028b3d12f23a65dcebd13dfb3a9b81744490ba163b139ff8794f83decdb357decf40130c8050edf5750c8a4100f3630e9b3a88138c41352ee4cb4d1a15525354fb4ce377443beacc7b0a1d510af29a6a856f30a5253356cccc0e2ee9fd685e37acf04d003f572082ad8e53329caa832bc047c02f8c2cf841b6ae3b95034a41ee468c6b1fea845b25079ea0b72581e70d7b2ca25d8b4e2783696e7faae82428e2b531cf69457f189b390df400cd1dffb7fad403854a1235198c26f2e9673b2c6b9906fbe38642b7d21b6ed8d48c38dfd9df5a6630b5c83e6485691783363bda965d9eed71707407079d34cf4466e6520911d91a0af3f99ce1e9568052985cf16733976662539c65eb4671a2f9850bb9cd6bb81c19542c60c60a38f929dce2e48a364283b876201d91106305502e9e02cc73d2114f7c4ae475f793887a01c3f54f27baf09e5353128b11c4681da57a4c09071104446ce84bbbe4298dea19a8fcb28a17e1ab3954498c80b4959aeb2e9c2e442e4636e4eb141cd50f95dee9a020845d3856a028efd1034f2b8c06e8ebdae92c62abbecba908d1ed0cd0d4b5de5993563e28a77859e8a2e5f99dfd4bc64f7a4c9dd5fab8dbd865bc549ea04a21807b19af9cff45ef11599b5be4fc99ab4a5458bdf62babe710dfa7f8d07acf3b54508b8278cec39fc7d3500bca0f5357a51881014d5dc9ce1d55e2fd2625ef195c9d10c0997a5a9e5003fbd6cc681577c55333b91de98f761bcc4f5fef12a2548008c4d956344b1f59b15e02aa8d6ea55772e916d47a016b804be5c3fa8e9bd37d75cd80316db53468cd1b02c613bd4c85289357667bfb2a77060bddc0087192afc13cbadf4a76e725392b3c809bd9a4922cbfbcd5b494945a2ee68b31659a62a3d48a195111ac4868e7039f075cbe77275a566aee028e73fa007a4f56cccf5dfac577c4a84076e884a56ec18155c3dc8e57395504160e2cbd86d27763709d7084d181bfbe2765c9451d64bc7c10fabb8a1e326c542bcbb1903ccedb39c63d0355fd10ea173e939d2989c2d0c45c23562d6e59ace68a70132ae1d9ae499c328a964c28837565c4551e1480942ee989dc1c11ea57c2cbb528309d74b93e689cf42e3b1ed40cc14f3f38b1cad0972105b32bc0ffff0cd52e3b5bee5c24a0cdd852f81eebf22f0de6d9b80fea8bf9d19528a7d6f9719810cc5bd1d5765aa9e57e87c34621ec33d42976310943ec4b2c4a666233e12d8836373431c8eafbe91a365c4420cfd822e45fcc39ce0b11484807d58780c5822c307c0302a2540daed86602d82f0938d45a6bc4f019aba492861cefa1c247b412d49c9048190309673d1036719ba1211d9ab2aa11c72d9525f9046cae48804c5ee7b8d6a2ed82bb77c657a1af2476b08fd67c9b66c28eb6fafa076a5b29299559d2ba8716b19f661367af23556a11788e90bd448456c84be1f8990f5d1a3ae9615e7c632bfb78342a06f59ebaf622e38f393e6d24429e18dabc156dea0c86ad716cd58cd0d22f2517917b5c419344ed24855668b9fea9e23ae89dc2aa2e6d2d09167b3caf989098bd1fa49b057700ccae3d783f9619eea3534d23cdaef486d14017017d3dda2794af736d869c2f34b9a1e6833209ed0b28ea4aaa802fc3c6d26f6a082b1604abe694b151474cbb15fb5a7a2074e3fad35bdcc8e3d9f0521596d4309f3082a8ce82c858fb6f9c11526a369ccfa266165ce1d026a1d8be0aab1bd452530b9de3fa7ca8e22e58b672c4bca72b04a1c75ce317cadb7b29a083002a73570828c84aefd424b8160bfa5a564de306547a21454d1ff46869208335d1f499aaa400d926b98628e134d6f97c6fee5246a5c3f261f613d33c4d4f05df4aed6275c9cf2bffccb8689d49c173d145ab3274dba315cd0c98a5e36d09afb29fafc54b07fa9a61f2f010d77fcf945da7e737895c15f595b848177316c13ff6ae1c3980b929ada4eb81a6f54808b0a691f4c239d5b510e27245c56470ad39e7596ee402d0d1d8265ddf894c9052521cc17920e6d858836a27fbd3d8a55725a4075b5fa8e64e5f5a1621ecb0b6da8feacbe0125df55d8e3547c366a83c0bf681d8d0f3284d834cc09fedcb2b3231cb644b037fb018c11c2a6558bf67e99b6f74763fe070981c88eb7eb096e7e834a81cfb90570c478482b4e9770d14891a30d494ef260c3f51707c7ed300d7212b78da16ab956fb9e1357fe8bb89435db63f42957ff05e40dcb691cc2e6a079cf50bbcfb89c812b5dd172bd8ae02dbc2bd108da4a1c62681b17a0780b33543b1a013b0e3f2626b08c6035bd5ab442284111a8899fd4f8c58bfb629cdc7d3862a681658703e5f43baeab754416123e79fe5065e0b592c44cefbbbf94c742ad13482e95e594268cc3726b00874f1b0f1a7eb63182c77b5d9658b36b14eae2827c7ed2de5ec21b42dfd9885bc08cd98a667ef6fd5f16a59ec829a23973c8dcca04cad40bdbff90e1a5d3ff2b9d8302b2adf318cefb1e9d5d947a04ff321ac835848a3bc299f042e82515698356e1fd57aa9a51f0caf04d01fe1bee01c61dd369ff3c482233648224bff9524d6d33df8157a0ef9a7bc39cb55b538d6b4120965d209d3eb542a0f6a7d4b4f347735d74c471eb99ae2ebfc347d595ddfba0b98df35ce39f8215e0f3eb0ca3601f929808a90a43c9c255bc0d5fe3c3269cb8cee7ea7c675a697869bc4d4ac048753f7c3eeaed6085c82715905115224678baee9c39de99a0fa62f5ab3adec262ed32bef06b26c30190bd8ac68bab2619e976f4402db2888b63178608d438fcf51e4c9f3f7d2bf211b7c53499fe22e9567b81646c984a682d24a565cfa882071bf4c19e9d907c77db57e5b3f351ba6e602a87d03c8578e75d022243b14d50b3765cf920da0326c542b082c03ada40b172237ac14ea05fcf91e9abdf3bc7a9158234b41d839653ba8d2048cc457f822cebbda45124c7cf9c00e162d117f4d8d6e9190e89fe4f2b9750243bba4af66c24ac6c72f02f12c07348fc99f88e4e409ec94ad42db8112f84a241e77c3f4ba655712fd8c5f7b0cd1d5b7a45b5a2e5a490d1088202298163b4e6963cc2a3ce420c5a2c2dd6329c24ad7074fe2c176aafc1e3ddd48146c3d432d40de45c1c8e9a3ab376f42fbf2e7bc516b7c9a55e54f5f75be5677508bdc3402db1ae00f235227c17ab536cd239c8ed354d0a2dcba4f8f4f9fd7010493a6db5534f5441ec3a9a49cad89e682553ec00be925236d81db80ab060da24aa6d0cb7a22b9c50d3802ed15be8d3f2b6542b87dc752e4964d4998de3dcdc95c00479f03542d3e15b276fa36101282d85fef76096aa9d662de5b1edb568861daf33ff41ada7ae7761b37bd4089140f1acb13b71a1523df4acc2050dc379317d2b96c20ee2e4bd005b6bd615d079d19de0053eeeaac643baccc0accc147f85368c3f45bb8a7023517571c9f666c7c8f7066d63426ee5408b80a95a169505d49d93013220dd18eb56f25ed121f59a50329c64043bf2085759cba1fb65722163468cd90c648cd695e6207915730b5499e4ebb1b37fd779d90fc0ffa05bb0044763199a06601e25dd9b3e9084b733ff78e2910b788fe56d7e4be1c73a859ad0411938f1143e6857f1e249a37061d68cbea2f323af6bcd4b774aad346715aad414376dd22b68227f4b9f25da29038a5ab4b35007f37bd81c15118e3d082b50d53119786afa15a3153255bacd6af860bbf940906e1140ca8234001645c034a50267359309c55a5038d3c5fa222d40987dbf50913abed0841f29446750a566eeaadbfa7ea238f5d3831089170b6418d701004910d868d701b7f4f58c3d425bdb7fef4d347cdbc5b06e4d25b908d408d104224d97b6fb2a59452a69464bc06e106420724894d38992117f921b79603763396d7470cc6947689ff22840edd6a0f210d7cfaf3bb0c52ed55ed9259fa9166b6e369a9d31f494d46eedc2bca0b21fc3ba1635eb790c5ac08a4ef498f550ef5e8570ed53a99633d1a8d6c9aa3d12229c68edf4d22bd0fae81fdec6c48b6ebab4d0deb38314bd3afbdfc0e93764ac99fc998f5dcceb1ef71e5cba27d5dc6733b1bef6cfe6dba01f1b18fe9965c97ed5c97d26236d3e5b434f1b197dfd56418bb0ef131395d4ed8f215d8006dd664f04eabd29edf5bc75f204f66752e94f165a6c33564b623e5ce4e863d299e3e7e57f31d8c59fceea153fec9421f18e5679abc1af76ec72bb97865d4302b9d8b7109e48149b44bf41ec8e32fd0272b712a4b2ab7ee9cf427cfe93fa9d53219adcdbc5afc66cdd2c49f9a6466d6b9dc1c65f7f8f80b85f033f9f3f27736f36abf699f516d56ee419bc93af34732a318638c31f3c136480a4b8ca2849f9bddd3cbd7b905b8ef481641f74816432ec6449a1cd5eb25db5e7257c6452efe88e3df4adaf618e6a3d1c8a69da3a1f24d2fe7bb7c9fa393e9a76cd49f2c6ab6c9f44ee34fbf6dd776e2dcf4905bc7e3f6b3fd1897ddf6364d63fa1eb7b9ceefe831ac93cf45b7b3694da6e33beafa9a9e37cca6ad4d5fd95dd36e69e49bbe6d67e3b6db74906f327d73fe94ed66bb1c246b3cc8f9dcb73b9bee98a86a364edf96a6dff4a453eddf4cbe83973b1bdf341bf269a6ed5893739ad80edeedb17ed476ba3f2ee6dc6bbfcd45f94c9b0edb30fffa8d931fe353ca9fff206f14eb6ab2c953beffb4ddf4c1353af97734b29db4dde8d9b28ddfcdd2581e75cfb6f12b5ffee4ac8afee8dbdf5f209cdf35355907ef68dbb1c14fb3d98e351eb2cbcfb23ddcacb6e2777eb3ed328073e7639647ffa02633bae2a5f2d24e0357fe06ae7c29ffd21cb03bfbeac13812b5842c7c8a96dc2417c67d47b4883e3009efe91f9675b8c6bbf16374bc83bd3fc36bd3ddb4367de773d4e2e70ae0be235af45c4c66acd960089fbf6cfeb27d6fdceb15dad564d9a576646bb20bbfabc9a06b3668e463b6e3182a4b6a4de6836b5c96663e7cf7cb43bc32eeb00fb6813f6be80419e974861eef7c520e4927c61184a387238841e897c34c2ba294b9371a5d1763178d5042d873f93b87b9fee959462f1963942d8830ca8f178d50621af52b492d528b94d32fd3b2679a26b3c4f5f49a17d534190c8e4654464aa3bb53888db4a22a5d687425b7c4f5d329fd4b93a17123e29ad7c5dc75a98cccd14b999b97729323b1989357724bf8478aa4be25fe822df1d6edaf3caf069e337c2147e0a3440742081fdba1cb44a624f51dc122e8a61a04d893d112bdb0e9558c9fe14073e2099ec1fb62a4e38e381befa27eab18ebf449f70c9ecbe8e39f6845c0e9637ac5e4e33f93ef7a858b7c6af794f4103719c7d15e618f01eca30d1b0cf42adef42a6e231d7f7927d68e84e013031182399b08d32b13c7d2d2abf818186287773328aa535aabb34e85dddd3a153ef6de0d2e98e6e229dac3b44b248d4630fe1d4b8b85e95551acdbc8f20fc74560f7df2ef29528d35ce42f71b35866b1778b3ddb8e455b0036ca8868322817b31ca457f19f9603ca75cb8cf1f38d81f42a7e092a74aded255451ee3b8205910b71b8b005cab83005c63fc07d05b8af06ad53b9ef01003290cd0229ca2c177d110b8c9b9aa8ddfbb9b143bf23582871e3eb88ef875911d52f08888f6220fe422b9da96a8b807092a8f58038ec275ec09e8c8e427805e12fd7c36725ef067ef8ac85f7d23dfc850b9b880b3b041736111ba383437a3c15bbc844af1c0e893dbee23cfc8dd0a7933e439c352512b5833ed2a721f4814a00e18153e014a924a8feef1941c1c714952ffda2314629b3f854be94111a8135057c341ad9eefad7fd75c137a5f5c8d9c4fbde6b2d30a614c21863b4d0a9cf688132deca7bfadebb9ebe17f9d13e5f81d51d1261517e37e79cb2abc9a0f580bbc7f7de83f0bd07df839c09de7b0fbef7de7bf0bdf7de7bef3df81e8431079b01c3485a4b6b692dada56da161416b655f684a6c8185d7ab27e1bf7b83c3c220e42294e9215a165a4b53426b694a645f645f6845d9175a165a11db1338c1094ec8ae10238cf1bd54139ad0842d60cc1c238430527ed90f4e428d1913baf7de93344229af18e57cefbdf84388be36cd26e01a42f0b589d8755d578c16c2499de5d684072184451fb7ac0ee1bd1763ac813a32c608a1bfd2bf4a218430c6d8a54ab54d25c64e995b51f9a14993791f21845a768ad155ba78427c42c4a8c4b226c15a6b94252f9512c00d3f4a6b8aff4877cbeecdb29396c5cd1fc6e8ee5dc55030144de6c5f85e15a5ecc4543aa1321413d4094a96d26452190a06237b314608638c30b40c86bf5b3725b901efc8164b5cefde0206b7bb572b3a25a7fa05b71f15b9149b4412b1077f7178192d7d75dbff11852c4e80840a44c861350b6e7fb51db5352c77d52bb642c66a46fbd8e28816c11648a06a95d147b628c1650984fd6b17c7febbebe96393d29fd4d2eb3bffd1e8aff7318e4de73aecdfe8ba14fb1127319bf56ac63bffe28af88b8e454a5ff7758dae6b74494ae5a4f4a76b32944a3929a553363fdf3a5e38e2a944119f5f54fe15f6e47bf21ad9ee1a8db0f7eee8d91df33eec7afa9099601be0536efea4d7755186ceed23864444315d0411918f1a940fa21f47802c2104b8b9e07bd5cda5527af51a658b4145b9fdef3a0a8459af1a087b32beb97e7ebdd9b7f86f45655a8ca8f051f735e73f9ebff8f0aeba14972686445023a3691411c5900d307ec8c96fc9bd20b05b72af05dac4396daf4c50fd9959f13108656cf85da368faae8c5ef5ffa6939ac1d2f26e4a5c5d4ba7a8abd50d6ab21fb8742ba05be342d77f6549119b6b46ab5771075dcd23024291e844923804843be69ddf6347b6e46172eb8086160d2d1a5a2b63a0a1756918b2e2c5ca92953154e112ba84ae2a2ea13bd2b9947055c13b3b3b3e762e17d1f1d1dddd3cb7bb8bc0828970134ce4721133c14d683c1a8fc6a315a1f15ced47dbd18ac022dbc97676b26ce76645329d97f9c06286ce0c9d193a333ec03644f9908b3374ee0c22337266b4667ca00afec37fd0f01fd78db0d0b80263bee0ec71258c7e052bee00ee3b5205255a0ede9caa9f896effb831edf0658cfb601b283716d37dfad3b7019f5a9ceb8e232d0d9cc81cc59b939952fa36dea5967770eee4baf98f732367e3175af6e14018f6b2d309aa9c4ef4742a3d0bd730f9d29b7c7c1a5cc38462258e7e89a3a512a5a5a7316ec2a9a89c4a4f836bbc5b7ad6644aa7120ba5414bf474a2416987c3a5ae0365aa4f839ee8a39ca45c46205009f7e924f8c69e2b59a2f51f2394e78f271fbf1b7d94291f553160d8aef4a7ef6a8ad5a1b2312c0cfb52d7eb48d9ef67311ca809d7997cfcf737d1373dca7629fa27ce26de93c95eafd9f43d7d8742ad76b234257bba5aae3cb136dd8d68d0e01a271d4e6c626dfa62d99768649106db10e324cdbfef1a4ded33ed5f74a0ec8fc996ec50ea66cfdc7c1d7ec9b8f2754829252f407b99fd831ce5b2ca92babea271e2a724625c02b9e04a3ac98df14a2ba56522269a2fa9b4d134fa877d499a4c26abbd69c524ad9b6c973dfc371a914a9c4a1715b3367e47a487b6441fde91a521d9d1fbd2b54373fd6834db763897a5a1d49aa4644ec61823954f29757901d48d9686fee86f887ce0fc9c724ed33391c9fa60661f44edc2d30733d1641d1f443ca70f78a58ff9a3bfaef7c76c87bab4fa8a937ca8bfd9ead7d315965c975d4a69579ffe131111f920f2116b105c7a16a780406ea4255f5ae4caa7d8531bb505f08dccb6ab6feade8fbe6aef1b655a7a7afde9f4f4df753dbf8953e9a2565b935d13b41dcbc87699651b34fcf09a2c4db526feadfe663b16ccdaf4adf2b989fa261d4cf3646dfa966c87532d0d7fbc7ed198a6111bc9c99199d9426ec7fb22a39945448a4a524a66826b989e76367d3a9978908f514e522a257d19e326ae546a8252229009d944d1a5dc8331c2d8726913314a8b4d6ef417f76e6d1759df5f48ef1ce925b73da671a4afdc5535fa92a3924a29997eadff6aa5cfdc8ef7c51231cd9a0dfa1b2471f32b773dc69974ed5993e9aa67931bfdfc2a537bc5931b71d7d3a73672449a903272a3688a02db385031148c31c60919c2676e87cf0b6437daec8fa88ec5ec065e31b2434d866164f115d77818d9f8d8e4628c5326c6b8e43a9c391febc0e71dc8dcb3109b198c96c55fa87d9681d1be1f51bddb6f6e7cc859c93ed806f830c623ce1df5b01bf11f17aaba1418717465df8e79c6fd4bce1403464a3f868de69c7394c5388a3f9ae1794e151a5c237b9e32a8c860bbbe934a4c4a1d99ca4f154b335f85716e9cc5dde776fd364da33259b2700def58e5fd69700dfea6df5d56fbf7a44b972ffd25b536adf2f2bbcbfeb8ed503a948ec395b66b159577cdda74cb658a7da5c136f00c56c5aab447fdf31316f61fdec9f0edacf2244631393d0dae21bf3beeed0cce32e8801463f99ced5a9e7bbd9a81860c9a8c6373cea96269b00dcdd29cc2759d7aa88a517a18b64ba56c8cafc02fa1d82e9532b128fb7ce5644dbe914a3abc6d2571cf57304abd69b4b4c4683b9b18af166d628f5eb6e7302d0db6c13b9b761deedac7581ab1e57636b1e58ea0a643d3346d2eb1691a34a0ffa0114733750489995f4abbb49452be941c3b8b367dd9d2f0670f69c38a4a5d8f3de6ae7f23089fc2a71472cfcdbec7850fa39467c73c4d314b333fab0d61d75dd3f9d97735990e19db0e721dbcf2470de01cf821eb5809a3d4341ba48796067ef6194956d8411ba41ff5c8c20fa6a7ff43357de93721b09ff4f54d9ce94bff43b5aa7ed43f16e94b6fb2aa36fd0ff54fff83e951f6e606063f92b458a63f591e424c5fed8d101cf34df626fefc1bd9ab2ed9e72b95dba29c1487207a7c747894e888811982f9e11e5492807ea2505f07ea2c2215b9fca422ede242bd622ba250bbd47d56f5e0140c821ddc9e41eda25a80dfcb3f85862e1371ae6405da9667519d4b2ecf22d28f0bc94967f8ef6a4a86ef49e19ef7f35cfc1938f9327027afc2913e853bbd8a3341fd738f85ddf0e79ed210eae8b1df822acfe0bda4b8a75d5cf05eb2772770709d8138c807665d8fdd9869cb3d303ea619c02fd27212ed04979355c03ddc93d2fecab05724276c94cf00a76090be9ff624d1b3495139c53d56ca5f585410fe4481f06f4e2c24d91cbee22fed0d132e085ff1477143f88affe9a259c5806058369619923f3d42edf83beed9d9fe0736e33772f8cb7c7fff21fc057b579231eb86bf3c5690d050919216c93e16dcc12748887f18e8fa1026c23d33377a75f585d3d41484417803c23ff90ee6fda870f453b8eb555cfd189ce96170d8a7b8d1a370da9f70d93f0d7502218410b265f941f543faf37fb85e5a1ef2af9ff6ba28fdc782cc3d0a21c3d6664e2eca975540afc087d6b245d1e010c2ada6562c30ef0765f219e01b4f6c4e4e7dfa39a6bfa2899596d2faf432fd85e2dec52e4ed59453b53d3d0e0b33519998a03e46014317be9c0c4152849015774238c4082bdc2c08090f076ef7b870a109aa53edf290182174e1c9de947e7e5b1cf22f7b437ac983f4f42bc743080e527dfa3c4a2452b5cf579ec43d16c6d96361dc636d8f359393a37d0e16e18d4cc3380a872084dd63c369b8c9a0f97d806eccf84b0af7b068cf3a2a5cfc146ebe8adb3e0647fa140c0d05857b2c8da7e786af385b18965203cdf972cee72181261010d00cca9c7607201a3c875783f769ca9476a8de877742b13939dbc7cf216d5254fe13f75852568b23be9c2f5fda1b92891302597ad5d2a3cb521ff38c856bb44ed45433f27d782c6955fd835b7105137c81c90c52f9f471c8a7dbcb6f8bc374437ad3e3b0a2e92b176f6b3b74e05b7a1f1e2b7e6b3331857f7ccaa4f6a0f6ed52dd83fcf83f987e3e2bc1a9dace3c56498bca40d8e7e43bf699c979be5252cda03e7edb696faaafa09e3e0eab72f0527f898f42fd0967c265bdea61cefa37a7477db53862b4b087f8f27f882fe7f338d9e72bd1fe30df6479d06763daaf666774942c192a12ba0134c47b344ef7c0705ad6211a45f5dfe1065480db182328b9fd949f60221cc56d46c2ed26c06d8a0adf816817fa8d53733d26e9b72623c47cfa98742961075a4a98903032112fd2cf45fc011f36c285db2d749bb768e2070b4d345016825ce88cc9dee4c7b86cf740f4aa26a54585b62a913e97fd9b1f8820fc855945e08ef785cb4cc4650ec1e5572423447cf840a9223154bca80fe8ba7dd4a7a5f0dd9cb3a3b4dde468abfe7df7e9e8a87cfed7edaa5755541605b48b3f118bf373243e46d01fc41f6bd9a6a89d44cc0d7f91c157ba9af25d4ae5bb8ff1dd4af51d4b07f3dd4f7c1938f92adcc9a770a88fc1a9a08a53b1529c0ac2e054aca7691fd333708f2503f7582adc63a5708fa5e21e2b06f75830b8c74a718f85a59ce7afb785616161ed9feafd107f52cb83befc495f5ad59b8f557a427d1d315cb803246ef77e6652905fe4bfef3296d13e7681f6d1604ad1597a37662382b603bea6a9faff69289c101f1e2b657372e29f7c8e7cd4639ca1708f856d52544dd576665a55ff7c1cd6bb38a855b555f5107f3e8ef8d3de0831f99b136b6271c81b94c561993821f11fab722a48e25470e372b2cf197d0e7df939d8e75c9f339fa571efc2941bbee25c8b0e05c57ceafda446381c71b807c5699a0d79af993529c8560a887882044fa0207aa0025cf820073a28c1149c80c2054f80e0899d931f4c1081144ea4200a413e50e01770122609600ba86002841042cc8b2b9899afbf2e1d2eaee0819f287e8c20a3c91650c42088b0051e58d193c516a6e02dd86208d97d47b668e262f71dd9a2063eba4cb763dc6e5ee97faf86c7eff5eb870369e6b03bf63fd8b2b9bdbdbddb8790f0fadf6b8e8ba0a85dea3227b9dcd1b0526150221beceeeece291f72251cc054fc323a968cdf7b0f8893fb4cf235c947d90ddb0584dbd9cbdf5927ea15cb707d50b9db0160453579c356bfff75b067b88d52faaed6279148241289f44fe357033f89f321edbafc590946df9129c6e567a91c8b7a07be67379640e3f9717f3f9a87484abb340a2e211c70cb619320db19f2026911444c14a4b3b92ecf8cd60c9d0e40589399203a13813508e26e55baa8424f83806ee42d05b583b7cba8fcc8915f8bbeb2a457ed435c8f34b47a15774c1ce8d007b13513a4c34410e5d6413bec6666d8318b1981c3957b10b79f631ad6a46ef734024624a29c0922523bd609520297c829bf10433120d06b262806b5631dec5d5b87135b2a55604f468411c612aa5f54bb38aa5dbad76edb0a57b40fb0289c18c1c006981352e8415683273020b40fb221a03841834ec929e94b18e3d54da8f006f0be2018485989acd042176c104208b72c84dcee57d11411463806122290b8fd19929691db0f4393e9540a09263a4ae014155f68e1f6a3d4e08b242e7cf82729f6e99acac1065578210b3e8e104317acee7d89dbad30d8ddddddcd25a8ef42134dc6b5b8308a30e800006110baf0533ec88548f0420c06b8f0595a60c4d0c4858f434c08a87847c660c585bf43bb68327004821d9c08008622b7df14a476758911ab0b9f664b7870e1854bc670e1a7b44bcb85fff065acbe90830b7f06fc82186e022efc922603619e167460fc80c21852df85b70b2a70b8fd5548173c48494128a1078ca0c938145ee8c2edd77ee53a80187b4106a914349971c54411ace006bb5ff6c68aa9ed689596056fc4c8442fb46e07e0f64f4da62b075210d48521b73fca256a576314d08522ae852610c2874a11800ba9545751eed08f16471811c4470d5e20830991f818c113ba82a563d9d161e9586e4baff861f876cce2303154bc602ec8e08654bdd85691aa35455b3b9175842173c708e8233b2e903081b38a002472618315741091a09f20a05e7917a6b820c211f04712f50817581851d42bcf084a7ae5dd8ed625a8540a920f083926f4c415bcf8c1086650b3fb8e24e9b9dd6341922871832437c8742abdef48122446ea76df912446187d51e57d479258f1823abaef48922b16f08120d47d47b0f002241fe88015b02703875e5149e90e41fc078912daa54b3111b76f38a5b57a4baf7a09689dad10e4c0b5022d1ab2407e2b7ff694afbc2a1972f43dc81d89b6a0e43e243b4566dc77640b462e4662953fbcfe2aef686a553f75c1d097fa5ed887e5bd786be6bdf0cf8db7fce53db743f48a67b8dcb2e2766f49bb8eb77a6581165cf83998aeb8b0ffdd1c3980c008126affeb098df40a7ffc429dd45bde7a37f013af06ee874a1806437c440b565cfe16d06556f7ab96cb82dede32a203c433450f127c9200848a214a20c2c5e3c265eeb8e316b4e0ddd0cf0e839deb3f526ee72d258278ab889129627095b89d5bd1add5edbcd5798b7d18880f90219c8222f9917d0891d60fb786682d192203ef064fa2aa667e567e5433f1e7d5d0721de7e9f156ebc781822e336ce95c6620975ffef80abfed9ce7328e1cfc3f58f00fd601075454f5a17f5aadab82ff62402e95d2ab540fef0647a2aa5ec6efd02eaad50c6e154b8b02da45058343dbae7aeb3afc711978b0f79c5222ba70dd629a0de6276c55bca220da85ad8aee782f3bbc95fed4900aa4bbbb9fc0c37b49c1acee7b265c87e9afe9f9018f8d15b7ff75c793c4ed7f53c6ee4df1887680c1ed17dc4ec67df639e03de1f6f56e1062017caf5783ab7ef0c73e65803deeeeae9101dfabc121a352290e3519523f46225151fb796cf1c748b285a5571dcbfb793fb51eae6edba5dcb74151bbcafcddfccd1b141b145714341dbcc7457404b93c240ec5cb0f044fbff08f9f1a252effb8fcbcb8fcb11fe4de0d62e4be7e43ed2e85a79a9132b4a445ed7f5647af80e815f7f773eb75da055a869052cb3adc62eee7d6fb08d906d12bd6d12b6e6ee574f3c48e3c95e945e28303fc727c70f93d9eeaf761ee9a4cd42a4fd5747840525cfabc3d7ced33bead71292337026ddda2764f284704a015193b15efa5ae663c29ffcd39bba7b69313f294990d57305d0b7f2311c10a6e97722bd46c3b40a16474c7afa3a52840757df641083726d487cfbeba5551df3d82a0776016202c3e294230846208a108a584de4f0a275fc5c58fc1d187c1cdcb84c39ec507080c0b4c8e991b4240da4d09274a160a43faf893f4716ba1d4a784522d2464d2342270430bf90372089d4c5192b64a7af81aea336032b13939f465b7c0db6de21e8b512429e9cb78e284c0d7b8d347cef4a509f8e7785fd082e6f24f8f43fec9646f48af9ad92ce9b5e8e0e969e9e48061e9150b0ff790922405f408f48a4936a4e79c768121942328f52c52e7e44d9cc9d32aa7aa63dac43d56cd112434946348670892c5808e9298a3a4e3b797dbf3306d5eb91bbef2862aca1621c02f9be59d2b9e161c021d7f9e82f97942a03ef5aced207dca3e6d07caaa5ac8c9eef0e1b172724e3e7e8ec9979e64b71702bfbea358491f477cfa28a577fb60ea16549904af53334039ca2f897530cf6a0faa5f2109bc170ec15bf1f78fc0bba1dfdddf17d759e7d5e04f91d4f8a57faf86d39bbe3eca35d5ccf63e3cd6666f84e030f9ed6fe49ffc666fb63779d50cb53742502c8ed2cfbf39b12af8f4da1b135bfa98469dea6fcfc3447ab97dc9f220d96753787e808610f101d2a3f3d3239ca6252afc700ae32f0c43a79532f96ef596c487c1d14f71f35138f926272813eeb150dc6369eece3c30546e13068583431837000c0c899a3613cae6e4c854ca7bdb4cdbe388bfcded377b234b42269722e3fabf544ad543fced7fa06ffa611ada608a7a785eaf60af5a9bc939bde95b53f5b06da5bf39fdf6258b83f4d2de989e44a29c4952cbc314a364a82848080806e682da901f14294ad3a99670f873917661a9bcbf219837340463e80d696fe8fdc8c0c93f811123b53d9606036488ebc831836dd474aa946230303191c77c2cee57ff86521fd351dec02fd10221a190c227a0e3d5e028529414e6fd00056d2824f9279f13df848442a53c313d8d4f7a92bd31b13c4c382c1ea6277d89e3210487c9aa9ef43c4e369fcfa8146ef66439eb100d0000000000e314000028100c078442d17030cb533d133f14000c88943e785a9a08b328486114838c418420620c21c0004360680a46ab200058a94c6615efff580384dabe2369e1b2f1f9793833fc1ce482b9fd9fbf693cae090b8e2bdcca7b8da570da1cc8910c942d6b96a3c8ebf3f12e1b9756310770a95f49881fbd48f4de0fbea466f076015ff961e44a74f62a3b6ff82abf5d6316edec222f6921385655e72653e354d987a4e85127e7c064a2519e33eaf90a97d795e6099861ac23dc964b4b6e63bb269c1d104f9aed8bc7b104bfe4d92c82638cdfa9515285cb9a266c27e170af4fd73f6e765e10334c2eddf90b2b0c9758f992b80c0f40d5fef28acd44531b79e52cff7ebf3805600c2b307405b21afb09657e31f157b5683589bc2f285ad043192a7c3f6154f2120aa240945cd06c14831a153b5594b56bf01c79a3fad2610a45621f78f3d8c5d71d6312eaae31a9e3c09901011a88b3f0dbef8cc0491d546a95cddeca5b2a42192c49fabcc42c65788a205785411ea7b4a8e6c02556bbc850e093980dc7a4a38515eaed460588be19a819aa3d108f4bc7456cbcb5551a6569505d3979d4849a0dd048fb193f37a33f9d549f8841ac4439f2123ea2a704a642b2ce180b8ace6874db99981e220691210145fc53efa76ea1dbc5ab0b4577bd1686d147ec4f70bd8c11e5223dde268d7e0fb2b77f44fa064794b75347b423ff3c431cb4cd058d3101d4d21cae95f562d8a8cfc4634266a70b91c240b9b838f2f9c8fbc839b2518da640e7ba2d28533685f2d072380b8be37b26e54a6957234d40aa1d156519e798d050b6d883f8c745ba3e8e94e51ef6c42ec1d952900cf2dfd53c684c399231fa60269bc86cd3581da3d568ceccaef62ad608530f98829d35bd7593699ee7cd9639ae74e9619536f2e16dcea9a86e791bb06be03032e82a28e07ead6b58190fc6f3efbc1b5cae9d654bf8c6c3900ca60c32d8df4c2ca889676abe67f81222b3765d42c7aa686f93a80130f2f34eba06fcc850a876cda36322386bc7a4e6d6e22c1f65cdee4addad071a6f9c7a4c7f7c07c37caf795693a53841a842a1be57dc8b82a7f3c45f3ad95e3e02b77cd4f842e87bb0abf1c44b61b240cd563942868183dc3b84983d2f69e6dc5a5602b9ba6ac245efce4c722717f64c6e96de12fa4897258dbd6c14bc1a1f3b52446d0f374b2d7ce79d5bb66f97ce1b1087847a1f1bd01598de42fc3dfd9b0dff75ac7552a252c2865cbe59d443625ffc0de7c0c515c980293cc93c3bdc3d9c11bf3caf71ba131665eb72a40a18bfa9fe1cddb56306843a493fd6d7a86f202b58dc0b31dca21e4f6561e06b3f5152d364ca4ad80248af4336af98594cdf8b026082e888f2574755f922a767926f86271011d129ad52d84833aa453752e8edcbc25a2b4924c75524bec891ffb18a2ff7c0da88e2c60c8bf7415f96d4bb8f73ba09f6b0c7405fc7d5de49223bad30c8739cd8cb4438ac7aba1f421cf6db29edc8c211cb88e33741af8ed9941652637b59414439907dadb17b5e7621c7ab276738f7e4e00d5912e9397056adcbe7f3bfc905ef365a0c5fbd4deb640c25a8875babfc266867c9dc776a3ecb540ee0b3027250ccfc59af037f7a86534c0e1339ebf0d2a3e2466f599397ac30488d1f49b17b3018ba7c1f5dce32222f21997e6703d56a80bce48ca3970c97f15ae3f337dabe0ce630804dfbb6234a1d900725ae99c77349c7cc8a0295c142dbbbfc6877d3ec0a1eba25831fa03a202ab3cfbbd4c13dcbec270d0410b02601b80d9130084ed5c5ebc8882ea0e211e760f05d3a2496e8ad7ccb2f6315280efb00b2d3113288ab5f8b5f3deb7205434fd05d834bcfea3062f41baed06acbbb747aced3fc8aaae3116e75699800a0a4080cf3bb642045d4c48a6ad77eb50c09f93e19249c086a187c4b059d0734f92f13a3bd65f8965cdc902e34ca716e7ed19352b2ad0cd1ff23756ea52be58cf51734aa1d7c005575f0be275497bd04163032244fc2e6697c3f438551455067d01843e1ba5d3cd6aaa5e002aa3ebf57ec65334c89c34cfc2f9e86b96dc0d3c0e0c41f365fce4962e28f436f1b7dd1d70ec1b8e157c79198594631807fc5b142d983d7ea8bda2e927c7e8d74bd402052d7eed0b1fd7824e026c30e49506f5dc217e5ce4a424326cfa7af2694e20c0e694e04102e8b49de14f947e7823a5de895084e589fcf50ba02a7786a69b843104a1a10ec4a2724d2fae2a41042ff493f539b2c0743889d4b5ddf8823ece20379c7c31ccd3a5e4683091c03889560195d9d92c68c704a426675ad9fdbdcc583fdab534c3455c5ada471d3ca8f465315d1b39e653679d6e3089bd62355348161d1a2387485a511d7588db67b7952edcca1e5782be21fbd1d13f5311a5e50de59d1f8e7a430dd2664e87ebafe228b4fc50dc27ea21d7b7b90de3e1c3151794d5dcd2f17ac97bbd03eb2bb4d6d2ea72860cf66875ac9b004d7752fbceb6efd7f3b926cf50024dc9003e971bf9749813fa23fc9261e8c34ce9e79bf8a7162c8fc1a52bb008cfc8bbba8728430bb6db3d43ee9492e5c69ee24c513f90cfb387153830f99127679ea76898f635487c82a84008c4ddcc7001372a5201108d6e36c4491151b133329c28083926930ee9a4b994d44a3529bd99b93bc098a48749b8bf805ebca66b83566b2436e553452b43e14198a609f30e47b0e5b901f25d447b3f7e069878485b385ec8e55f0b523cb3c76f28b36ebde6bcf7ef8c57cf35fe421dab6307aea233e9c020b22a02a5e90176e6e725a78b0d85b72348b6419161684e035068c2bb0c09b2f5d9461ce1ea33dcfc897de3e57b2846b66a7eb6d87dbdaf77090c81b38849d2bea403de2a8e0786d83f791bb01391ee310b7c68ee220f054342b15d92c2e374a0a7184c1f9299763e906c326afe2fa405f27d47be3e2aa813cd69fc0c1bcc641140872a5d4196db40609313ecc1c8085c4b0df65a4a12d64f36f270e96137b1d2bd17562a9ed4ee4f125a444fa38b15976d11668a3f2d0fb6d94b67b3d15009bb5018ee3d3df03dbae7db052f3458dacfaba2e213e5129109709137e042b90913cbd30e6a70bb753c118e00266458efe8e0c10d365cec09e83e7f675756b3b3215a77a4d25d748aed06fc32f8906b35c6da6114e794d0990a50540d7a53521349dd7b3359279c13dae4aa4c75308f451606cbf53c21be7dc6eddcf665bfb2837c5642dff9d7d91268613e30b32a3dbc5e2e6b47ed45eb9c7a0045a93a32a6a4553211493f6085dcf8f9ca702368d32bbda871f8a4b29c52301db0e6d494d1848f27531afc5b5b7843b57f351caa7a6482acfa3b50aa8c72a4106d0f916acfcf4990e93e6782b5469073d4b00a9adfaf1a765760202f2f7a47f060ee63b208a8b67ccf35cb302b344e14e545218cc42fdb89a0814e76f9de20650f13ee67fe3bd7be0a967b808ce0f8b3d962a0ec91ae79b1f887c4e676f3c00a221ce749f9514fe21c5f708f16fd0b0dbcced8214097657862be86678be569ac13e3cc4379fd1194394ac0234c15dd415b5727a5b4c17451f739a6b3c04f95aa324ba33bd0177a3bc6b11a258c59e7024bbc3dc5b28028722676861671e85381154a6885371ebd84ed0c35b62159e86bd89440d64eac39e83282694155c87c4012e0ea89e66e7972272740de11a0811bc8a1a83de7ab4bc6a533d9d833ff1faa6cd55df89141992e480be7dda1ce658f966eaffcf8bbaeb253d2462c13ad0944bd353a61afcca21155eacb85053da036a75d59181a05f21027e228a166f3034a8334f1d35cdaca74fa83d16c40c44b528adfd0ae1ae63f31446ad6e0a832f3aacc2e04250c672dd951131637423b0b2fe645e9d1ad704bb3c31704fe2cce19465e78d294f4ef23caa4c635710342c757273da01b7d3ae92447d7ebc0ea56ec381f71af563cf034e6bc1269ea53769e0a0764f7915ac6c08907c419edce569c5f0e5fcb40757f9d22f4a8aae23317dcd6414b21ff7c29a268c1d76c56b59b8ab7ea50f03ee1009f3eba53d3e11a255ca26c11e06caff4b3188d25e33eb21ab38ddfc11c8ca85fe5791148a483daf0b6b9508265a39e8e179b2084c4de499d7c0732df7646b534361bb9f4746c502335c268ad1c981ea4951bc8f244855fd92625834a9bafc0673d2637eb82e761661bfd83679b0478f115ec8e6d7cd4ba7de483be3e53ed11fc54409a3553dcd4b08cf8193882d51dee7528273a3243ee6d4b1bc3cadccac9284126f811d2f033c8bdcbd3d6b137f2bf4f0e29be28a971ed268f03d35e62a0773de442c3696b1e09e5e3394d87108e8625fba125ee2e51a7a85f25c4820d33769b4dad948c0bfbcb359ee34a6dcaea99c5a6b407c74db29e2fdee281866f8ffd12e725f73df4f61ded2849d15e3a9c05ac435730e83faa7141c75232e8a909042f9bd101a55c613ded7da971826d0ffd41a24e5469cf04e0714e3b998adee3bdd4102d15e4c3eeeb4284d6b4ebc8958b81ee9af9af3da8925d632f772da5f8c7253b5c7bdc692f1d7a9c9e4f67b888421a4712d49e843b3e42ee8082592f8f032e73822c06689d6fff4a843cef62585a1741621d0487d23fd90b144521908f3c0270a7cdeec4024f989dd150d6f3438e88b3f7a5c819af40a2be098999253862023151ebdc872e419f98dace0e76ae4493192f3b4e087202b5d3266f073b4f8bbf41b7d535d5e6020705ddd30f915ce78c8050a64c184226bf93c3ec8d8b0ae026734b2a802d413b53006d24d80ba4e7829f8998417cf606fa161e066008a6862e72cfa74efe55be8674a99409029b8fdced6c8f8aea84c7fd07655e86b3f566bcf771aed5fa18162f098e101ed8d0640d7b72a4b7c6a0de4d7fc7edddf78f62010ab1a19f0890c9c10a94fc11983bc44c143a2dee7e51de43d609383799b8395e22878b1605e9b9dc3f0d5279b9463e9fd6f5f2b73c2bb62c61033c8203436b07266e5b52f61c63529a80be87b9bd151918319a63c38089af684331ceacc08aad79586861a3dd39c894bf499c75300e71f37b8aa3ebd575b398d1d13dfd6e634e9c7eda8aa0c4fba4f21dc201710d61aba387a719a39e63f770ad90d1fcce0018a0d96a5a3177a84a08339e7115d4b1185d1bfcb1eacd82bee100c51c63734fc05ffb9699e073b3dac35f885f93a72d14baab08ea700bc025c5a1cf72ab8f99b99f5fb47103d6b1a82d86ecf89e64ef0044c033261e15b86bbf090ffa0a253df6cca0fe4075dcab6334ce586133af109978a27606c37c5074c44e6f3bec842183b6fdeeb4af970b9db335f631443926b61031be2559a09952552047a12ca8a4d5d48a1f65765677a93261f346921c935cc0542b31faca90e113bf2fb3e3bcb2fce30cb97f553cbd1c9237a4d6480eae8f132de54f8c33b85f456f8e0facf57493b712fdcaef292c8eb5567f0d383ca1a2abeaf56fafd0d088090edd4fb26e7fa0207fb03c05c3fb00ae2df58c54b638647cf21b6ef02217cb83bbbc82362d2e4542500bc1588700563a61f226135232a39844e7b0104739a2535a5a3b783e70b3006acf3bf1a9686ac75f6e2af6de374b2a399adba4cf0ad25e633784634ebea22ad3ccd0ed2b7319a0d44494498f789dc13b0ee07e95d15e91f71308a02b6c947491c9fd2ff1973622bffdcb1ec246fc2c701e9108b2259e359b9c9b1f7bc4954a340cb27c3b9ee079603feca15013b2008809bc96ed71f9243d5c10637b0729320dba6f09c505f6553244b39cceea296481a155567390d8448e8fb398d808b36ac0bc3d78b396724299abb27e92fb153889ef2e0f6db4cd9d672b87af9ae5d7bc7414f493737f1a699c588d6fc2908d8b18604e9a37d15e8bfef3050df21ccfa4a70b6f2656d62f717a391ae3de27c07120a3712ef01026d5612666fb15de203e90c192dfab65c77ce65201f1cc3625de490c7d2253d9ab7a7b5a13cd81f4c013058e1d2ff85d41b08671a81aa59292a66df5cc4f70b78363c656fa1ba8808f4be9570da94992677103c0390568813acfc70c4bb6eb58d3a7c8e46d45cf8d10481bca766aeb60ad3715351b42b566492f77f7ef491225b0f3dc220c56ce341cd82be4e786aec65d4cab81abfa6fd2b4239f115986473dddd14b7a1e6c052a0bf76dc79fb4c92496bbc476244ac91d7e91460c796ea8241f06c762e726fa072fdb07179832d39e37b14aee3d51de1cd0ff99603ff3b1a9a16a516fca19b7de8a883f73b3b91314d9fc4b84de45e0a894c9a382a79b65c9effbe3151870cb5c65dc0d038fd6127f643fd43ec533d8361ae3e0ca0b5f9d1b5149297447b6a812db9de51b94d95c924b46d29c93d5a20127d6e1d2534d899bd19e5816835e01c5cd7f01e0278554535f7215fc54a3fb6c15757b3f178d1fa50b0f08531c65fea8195bf8d0552034cac996ff8ad59c31f6a8873a0fd1f92c166a0550ddc376283fbb78cf01822c9a304d8b519a9730fdf058e3670bcb1a25cdc43513e41826cdb431b084a94713a19e65a3f5c7054192b47a430cca16edaceb5ca3ff69b7e8a0de27bd9802767bef135c6276ab35039136325cc9f601c4cb9d2ffc3618974b863f9dd40fa168597519aee1f8d6f427f03d0e2ec25bfffea39d09252f5751b5f5a0f0e160a4e67767a8ce1495028ef0b755ec914c8b7ab00d904d4d28a81ee1326d7b3cb52d16273e77bb3c1afc28b4248835f81f8be241bb5b3e2c5105f284c0da0b7ac24d2b6fb5963193cf99b8af601d04626d989fe0f3b1887fdb8383114e8e7cda770e16b20c62b33fd626a51fb74d233b17ec21d08a2f010f5bd41f18bce88b754125e6ff139abad2c08c059f2e79406326d62700a9da8d2d7673e42f07880e43bf84319e6ac74cf39f7e48b8593826780cc2a4ed20e389e3df4b0c0d6fd3c9b18ad2b271b4f9e620fcca152cb9bd2137255376cd3efab07b1159aae35ae066e1df466b01cb29dc4824ba865cc9fe0d268c5a7e52d97b65693215b244f3ce6f9ab2b33872f8162afac74ec3acb9fae550de179c7ce3e1e005b1444954262b012ee85981f44f4b26f7f6a74e5d884791c77e4af1894009da4bd7ee15ae13870c465a953b6ad2c4acf144bc9ca9028a5e78a085d4566454a06740a653010b6408fba1b24bec52ea1bfc0976faa2ec3481806d026ee0ee5137a6c624b6cf64fb7345ab90f5c466dcd5c4e630aeaa8e59efcb33d9c8b369cf08983d94799e8dcd44ccb4cab7877157cb0dfd9455cd4d707321efb4d0fcb376c229f6e5994aabae7e4b1a80c3c29a305e62affd4a14c1f109a862953f924b413d9e1256c5f3e8704c483cb92b92a832f33d2949ac9a69067b38fed433cd33345172f708484f2a106fdc22e7971026a59bddf900f33aeed3e0f21ba7d61c4b1412c78c911982264123c1410a51c34401be71ae56141b5fe3053f63cba098743c9f99947df70ed6f597beb54e9929321a93dedb3aa32691ac132bc49cba816c4662a87a56447d552c831faf3b29386078537ad17850d1f78defc6c21cb241cb01baa284a75b40ef7b8de061c72999a3cd3d49a8c6c79a29bf29445d3f196f831df2d844f7b40e0b1f05c0865c2b3dded0fd5010839b4cf99068eda27e16cf2501d1e1080dc106af4404f19164979fd575f9c48893fc01c1b12cc9b176e6ec03680e58ff8a7777cd558544905e17ef57297ef2c9bbe3a634a06ac14483b17530b4c0486fd0151e4985feeff420982fd29957037cc9920081ec1265c0b50dd53b76082cd679a5d2610908d963130ba3a02c26a68035aeafef27a88d072e268618049fd90c45c9cdf111954689b433967d85094a4be261143ae9a44bfa16ba3ce6255f470c5f819b102cc1ae1a4d810652279bbdae97dccb6e6b81a969205940c06eb451d28bb12c0a165f12512af9d7ba211fdfa4e7e806f1b079097fc20792f63eb6f34c9b30979687d2b1a227d46de925fa229c0689f111ebb108302f38e8ec5ee012b33ed7d32feceffc722abb9a0a9ec22a485c1a205e38806c6017d77b926eb7f2971ab9f44b079b676edcc6ce252fcfa51b236cd790baa405413e66e5c72741705bc2674206b9aa004357ce71874ead70d9512bb3072545a138a79430914355da8ec7636119654f9de0e905c0c5e5d67d22c1c8421cf9d695e619f44277a46ba3f2b54d5c53993355fa559c122068eccfdc2f610aef7c800851b7ee9c51eacf7f943131b6a4b974f6a9fbc21a85f386cfdd627badc57881e278813ab100d276312ae24b7d48fb61717339d42fd6bbf87d2580ddc77334b53d8cf65b4c5060e1262e846b46432fdbdc5dc449a4070bd5cf8c4ac1d1b4218f47964df4465230f25c8cf54c80297228d6b0eda2a9a36fb4b1391cb72d3356f4823f22343491ebc35570d0fd4f3830b4d441adb886db418768aff443d185c80d3d9fbadb5cdd03fe1447c3a867de6b341bd6c7c120d0166b1a6f7347f795f52aaf5273e6cd0616007159bc0935a2bbc0c6b6e8be400c581f31436d0c0ac803de55b7a0a1b3f2c68f8950271ebaee887e758fabdebb0d78384dad2c4937440fa810103e331c72c9bbbb42f2cc519b3b83e8ee83812039e340ccf23a53ad06942e30107fdb3f7cfb71da168cdf9484898e005aa92fe8bfe0df243ec92d792151d52ead5fc10c9daa3c6c4c0834b095a2458b3f1635c80fa55cc0c5b532cc0e00db4565ed330b7ef89aba3e634705b62da68252020241e769e99be36391f82466e92673552cf2412749e290904ab9851efa6f814b0bcc39c62535f4a72ce9f993dc882ab51516a44e405bff2ef65636ed8bd5091080a596ee205399e83e637cbc56af07d0ecbed4c0c8a0f2cfae91c90d6a12ab117584fbc4f44e4751d510c0aa0df09da42b0b957cd1a0830f3469c2d8d3c1dd2b5870b3f051d63b33f707359b9f6f0b2c56a4955872f651d4038c7b495189cdfd38221f0b528a39ab2b8c1c2e0a28fc9b46089822a0552bcced5d3e2c343d7c7f1ac8eb9540565144e4f891649144183e8b86a282e318129a0a28652ead76c6ac6344828805648ff5cf4367118f1eccd5d81d2ada8c2e011d02177b5d975a34e3b2a1705e4c9e060076b350c9e9ba7401bad57aeed391fbe9437fa74ff946440918a49866cbb4bd9d8fe148c9c3716a937bf1b446c1a7326491c9deb8f9d4b6dbb61eb5d056e6abf76eda2178cc5bfd85c72e4fe71233e63b62ef5a3e9299a46cb8c0981cd82c8b2f4dfd65e59ccce54b8ccd43457007c601f20d64dccd28b46572495d7a8026d0100794400940e202085d639cec0d61e6f98a1f078dcd5ad77bdbb98b46aef7de92a6c84fca34889d50bedf1ea751db9803252e0c57c097bc4dd6617f4ce7311e5b7ce01033499f25eaf8bc85f1694766db53b4ec9886157634df4806b53afd40dedee22f4ae4bd3a44115c156e79e743cf08c12d12428cf37fba37facc673305beb4322bc0370e740c7a02436246fc9076a4a76f8f4dfb08c0f69077aba97d8a549c0721472ec2f5665ae4e83c88cfcd19789490c8af21ddb5722eb2ce21d957612857cadb6b2dee878da19a371e84440e8d4c5cc36f0c0a33d5c719a205bac5d8defdd693d62c9bc4e8160ca40b95e206408b1f918cc900cbffb8198cacb92e568747890c017206ca4370ada2b197ddf4e843c1438f5f7d4996b4bf4f4df24f3dc2849a0c021719fdd9996ae87fc9560a817d0adae360fdeba1d81231fd4047c907982a30383b30ebcb3bf37f12096fcbf114a616faf4f83435040c1d017af3e8f5e5d8e11ff8787d5365e8f62bfd8301da3491964ebdf4e2badcb466bbf751e7204c60ba918ba533387ad5526e86738c941c427ef4fb5e7cfb401cc90107987cd1dcff077903cea60d642bdcbc0b268263ab58f386dbf5ad1abff328ba5996cac8bd38b6aa81387e3b285031f5826fb2b6b2a98e86fbd581040548af97425eb45fedacb3c08216994044a33c9ecea129838ae57a025ef2049748f284ba9fb039c9a9382735c213915b6edc3c96364cabe5b0fbecc5710dae181f357157fce3e2dbc10a0359bd7e04d0983416c3aa01e85b88b887d8687eb7d4d198ba711896017c0799ee2c83486b32458cf33dc9828351c5264975e9978f12cbb0999c3118da6bf590dc27aabb6ab1ed721948f653204b5b05713095fbd531d241ac7df16a358d1bcab85519e6035d1f846cc005f224d53aa4107a087d596bf291df8753143944737eb8ca258ba4d20910ef20d6bd2197e8bd1d164e1de2d7c50b0b0ce108c9ca64ac98c59d1943685e766923946943397a3ca4314ef70531fdacdb8afe89930e8be54d2481f924ae2709131026143b2143b1c1bee00a2deca44ff42b1db5030ccc4742ca6519cc881e21f699379a0d5f14aa480003dc3c0923da3556036e53a3e93b1664e4cc906cf0c4c43a45adf2cb717a94ed4337df6aed8e270c689cc32cc65aba6c2f228280918fa2f108f6b36af0c986fce05fd3075657fbbd174c9b0ce58bc75224e26990561d44ffabd839e594c9bc8c5a340d0ed96d0ecc61781cc164e3891e6cc2cea1b191b387c6600e7129a2a16e0c3636076ae8179fef1b1c7e46912f66126ed8bea43980f53dd24b98caccb3ea4d79e63e40c57b4b0dbdb20a30394a53fba358e212dc39ccfd2dd96653026e4b99c05c99a7278562746c3e5c90c104673a1778df455a66ed6a9b6da230b98509f901933916055b4b09612e6e01c58e5e5d25fa4ffc8ffd23f7bb54af56d688d2fd07f48551959c11ca7e64fa0cd2231af9a1610660e5a8af0bb68699c01aa534626841a7ffe462ced74cbd5f77fa2786665459c4be725045fb2479440685031d7f45011c5148bed003bc37e891eb1bab3c4d6a980e4324bed881d73c35e2462117bdbcdd0620878a164c5bab0bdb779bfe2e818f3d540d229f70990867da3792cb12940b1062841ad1d0b0bf5958d66a51fa645f54aa0fbe57e1480b9214aa4924724318665d0b379537c5768b2eb076ebc89610b2a8a37609e9fd5933b0076f38a8f602d536e94a96f1f87c09fb2053f989b1dcbe706a920301cab438b7c72907a9a0082d36bcf80d85f68314f54f91331e51d89cfdf5b1aff4edd1019f7164f2460c3ec16f5bfe6487752a613857f53a2aae4b28f89bfd16b568066d5242005c5df99f39b9a0c7effd2e6ac27eec6849cb69ae726402a882e6379cfa761fcb2e12437aa281c6f50ef326919db05cee753479f6e7561366c542262b185b6a0d5b149a751f85aa321a14fea16776321d598df5b40c471def14468c4532542152f0d37ea6c9fda0c4d399697ea740dd94fbad975675fa44403853865df013fd26452699b8fca2174c5d089ebac8281754eaaba475f3d8f3f42ef9789f076e3d29eca7ef30385ec617bbff7d8f4d6ddf05845829986bafb72bef278be1c644cfd0db6fd9b9f3d18ed16aef3855c3bc35c8362e4529d625cab141b7402f0ac141a4d4a81605930b813807183aa51c0981bf92662bd83fd6fb99911f1acdb9485160b00735f8ee7769557b668ea3b53fdb260d6ea68195fcfa2a6b5b7996d5fe856335bf8d8455e6cc00cfa929f445d59b449b5a38d27a5f389133163ff7fcfc70771b79dcc07c002666c63173a2fd1fe233f7b71d1ac80f47896017f1c777f341d9908b8aca2bf61ebd56f4f19688e246c93148c5dd00e20be2530713d3ef74cb34c63ad4bf8ba5824d7602edbb227bf59c73cb36fee3114d736f7410fe39a5cf3e02261178152f12219e4e05705ed14c4a57f5f5010e2501640a0f959c8e1a1a47b857ee91ef7a6bf1f9ec63011ba1882b464c89861aef7925b5fad7dcfce7d20498deadfe2591d4a8f24438bf495720d1973f321d144a3313e1f22ce484188292d4c58200674ab0bfa549003d2834efd22b8cb6a4233846505dfbff877d7df63bc5593119d99371bd8d8a094c5879a93f64acd2c28596e7c9e6cc161e9c9d978afacc5cba940f78eb095d38dddc5498a0a869b9726e08820c2d1c629651ddc9b80e0654d992c4bfc420367eb79b7770bb0157e2d41c76885a85170d6f487069038488b51665de1fcc463663340c6722a55e96e3d5c1b0dc1cb1a993caa1b42df3719c53b828ee54a96766f5c53063864765143577bb428bc1e2e8d44f0ba466e87c2842ced83fbfc5e80c6b052c7e0479f92aa501bb3601b427471d449595f1a073c3a5bac877be313785d2bb787744248fb4427bf07a061583126eb4cb25a15630ad7d00240436339e2f8e6b499ac837b23772dd766724e0dcf9eb46632ef3d681c578a403babebba450cbb2c60c8a4db191dbebb2261ad346dd7b8b331d101f9dd048dd14a30228ec4987d70f68dba8e6b1135179f9369beecea0f47c64fdf09c19409f7131cbdd455d0e3b5503c3fb18f48087a5a3601ef9ea0810fb90e14cae0b50a927fc6b4f20cb47136b063fc1e6e479877a60aece116e4553d19f7c6ddb19c4541aaf7553e52412e8854c295a11da78666f545619d1d77d751fd798d7c97d71fdb940ca8378c8912e7c9a57f0bbab79d8db63cbdfd1a04c26e3fcdc17429cbdaf4d099ec19c871cf1e4b07f46b9fb13a961e391c02e51d62c8b7cb6d7f5f3d0c961cb8968fb2784b719beb8da01ac590c7d5588d62619da50d8bebef22cb23a3ae0f65312abe9c8f5778570d0bbd2318a7e8100654f8686b5e1bcddb005e33637669c330b513fbd834d286393129e49295a8c11210a2c7accd1b8f25f583c38e54ea128542e5a65b00b48295d7a28a55b2016d6273b41cad2592a77801b86d6a85de5b8eb515eccab64444714e71289386999a943b1eda6805b530da328b9893b6ae0ef7a8a71d6828990e86cc59c01081ace9bee530e7d4e8cdd42acfe5aa456f1e1517f7965c1c4c68ef20d724b81e6ead753318b9e922908a11e44ba97fb7aa1ea722d0d28d5e7bf431df3bdf38ca22cf5f6db46f757cad655ea0d39a1bf2a8c4214135a666df1e6d869c298349c8ab1b40eeeb8f7dc2b1b9500fe28992af92e7fd2e4b6a9991072789f1ba75450b1c24be3563a1b7d3fff935cd12a29f7e9f0d05092824d657689b09229a6cb7622812cdd8d6a2ebf8f2eb5734d7e1c80e4a3c0146db36eb87b916e3aa9c7b9e680d4bd048e01fcf366e02b94a600f1318faa267e878ada0d724be87e92bd0035042f656638fe45ecca489cdf32ea6a64d2ff397d39f1c7829b6f20690d8c35c7a6b2b24d0687af63081454f082471ef55f480047a95be36ad8656b0f70a7a94ec5542af470f65d758bf8cbd58e613e9b1cfd6010e7e562732b94f092025aa6702b3b1c0bce806ceb55bc6d155f32946e1ecd9f66dd59414eb420ff066e2f63935ca7c8459e76175065dbe18b07d2eb0afe11169f39cf28adde70c656c2f1c772c094583d464af9983ccfd4168dd67d11d0914ed3e62f541efe90627b5a71a51583baab6ea6cf3d59511e07dda7325641b12bcddacd95347f8eb993e5dfc6e33f5d46cacea898b7e2f3e17e48fcb7ab50c99c9fb893edb00b42ed7b53fac5d719cac4fb1f05b6df67e90614f9801a45ddaf8e6ed6e21d40c7baeda87fbba0c56e7340c5c8774e5cbb027f5937671151d954b0b0fd88c57e40098e27a4a3a71989c903e0867d87344bcc0a4d81870f42762c211889eb1c81021e24d8f83d6b28f726adc694c0691d4508a9f176962293f33cbaa6a06d1f749badc63771223d41580b7d8c1b20cbc05cb97e9e397466ef0977af0d523a7129e4afb2039904f2b1ab50765bad2dc24869c315db3594a8abb041ff341d8ee2671b4e1931fa0d78cfdf01718aaf0c780b98df91b8ded5ba73a13fb23d91b501dc13eabab800883d4b08ac83a4b6b1d1356c450c3274597780aa7395c56797e434c5c9b49c10a15460e7a291c138004b39bf659ab9266fdd910a345fd7f19412292dc3ed3099458f093c857f2297a22878a2a9cc36686a6649cad48ed77c97cf600a947a7980691e284488b3b632ad625ef547e2c3ca0b7cc37352ad24f78efd83dab4deb6bd4836db5e44f545ff77f5dc16591964358f7204896895395c36f349e245a8fbf485b003bcc8d47730924fb4966e726617b867fabc304797518bcd8a7182d2754252b255982e287e60f4c757ba99d020a743fcaace752c9409ced5266bb89c6b60cfaacc9fa75361f677a232bec74a28a3e0aba25b6b8a8edcb8e7e290f94d834cd4e5a9991aad3ffc741b80c23b58d65d7a39012631f692cba3c9675eeaa49e7a0add0c5c08a9b9c37fecf5e95783dd8cfd576abcf586856ac053dd717c514b959bc748421d8d407a46b030eeacbe4dce12d0f49dde04faf2caa7eef6c58c7dc62a7186a60c59ada310bcc09068c5075354f88e9e2141ce74de466201663c43ebcd7bfaed2a22cec67e7eb8be55fcde240896c58c1da614faf3cbca328243cfb1565af9c20c60f766f91e98439c1b5bdccbc40f16b0b2864dd2d6c4a6d121329d7cad65919a12c75a39d7b3417b9dba360fa3e94a3420c3899387bcd5a8bd958b4e6a2012c3f793a07d72b22610fb7b931bb017cc5a3a3a11ba952e29ff0e58afc19853ed15b1ca3e8f07f5cfd43a51ca7a9d2865a8a4a5b732b3f6f9131151892a3a56c7064b23c09f0f0c3131f45958e39a29aa2cb2dd1f5a5764d80e8d28fe76f2800eef5f43b9ad87d29423cc6fce3b4d80040253bffdd87ffe55a0217312147965d1e9982b465c31be81c32796f04ab9857e06140470d8f669f312a0b9fdf71251abdb6c51aa4def3e402ebfb809f1bf246651b3e3bfa555f3318589e6d5e9921fa8c967a1e0f2f662d4f121cd2deee62f511dbfc41049bbfe1cf75950fed989dac5e2d926fcf507da855bbbf38435697f6c167d3446bccbcd663ec18e355e018a9444d4a22f670a15fd7aa08954a146825b0fc9448e803b65475f06081d3e0d5ee35c29b95c3055dcdc5ece25acaca2a59ee52dc9ddfd22aa00dc81d45b92e9cb816a5bba4cb41d13508e9e2c220f2a170a9b8b46d953f48a0071a1f1af06ca991d7a4e656340566d7da1123bd0181ee643485e56356102f7558d81705082276205e2ef102559474acba29c35b4c8f4d55f16305015c3a8a59bdef11c0a9168a659fae6b42794a96701a2b6a845dca0aa142659ca2ce1e86c36b3bf29da6b9bccdd3c3feebed10a01a8b4eef5c0db07720c5d944b3f3f195a98e7a2ea91265e825400b2aca234956c08eb1913d7af2f264f08380cb61c952c62bbc0edefe697b987f1fd57b43996ae83901458bfbbf470155fae318ebf23962b015d6775819d3b519a8328b525e83a9f2c0425794b5040904ae7265323e3c6696ee5a1dbf7a5dcbccad40ec6f9d1fc254eccf0968b4b0a3018a52853a38e3d42308206abbf4111f0c421586e1290e94403c4b5bb2b9b45585a45c2b75c471842f4bd6afa73c0f79dd5811a971444c88f0fd24e5434a1d779e0f3a3b6cb6ff742d53dfd9636d37828ebb5d875944a0d16b31a2f7832a14466bf307f4bd3366073330d7916fc4a103ca9d5ce606a3a2505789cc78e63a7dc10895aa53f47bd0e8263ffaa39a1052945eefe81ef474cb4ffd214d64a4160da5c43b09e6b4cf54d9d89929e9da76dcc35b6bfa00b61b4c815255806e0f0a50365ac91fbe77ca986abd12d2d0f85b4b33eb41110a5d9dd840e0cfda20cab6ee62a82641a5d47795c9f4833e9488b74eaed9f8eaa101bbed67a8672701d0a2e4dbbe67f6410dcaf8a1253ce7d9dcb0a6470318487b4aa7669f1dec280b5f090e13b911ccfd08cb57ea802215b87f7c605a16feae3cd507d95197afd4966088105c44d25553dd5dea00cf4930c3c85e20577b270b717f77f0f06a12b3ea22997d28f3505ed77c03e7eb2945ca77c07ae53fbc73885711bcf5ef92bf26db071ce34917bba36e491d357307d3c5324d7568c734b852af42fd569b763a13e00146a4c3d13920ba981d104a0ee74575eae16f57b6b60e28b2c9079e1b3f4c1b2c2a4c75740e6ae47b11282746d4781508985683054b139ad1ae5c05730cccb40d163b2a593e2b561f1234ac45896c12ff3fb3595847d60da4025fd1ef680882f7514d08627296b4ef943f433ae67d188706a8b71e501650e358f2fb4f975b8b106ba5de4fe1e049d545ed8941910101d07b3e886af0f493d91ca2022818bb6c0baf4c6d7513dee7e66c33a13bd66973aa69e846ac3fe72e3d8df12faf19a804d05b41774d6b4f52cf6866087f81c603507aad24dc147342dcdd818610d410de9351f5f1a8b38b7da63a530286ada80795bdf00e49184363d617679c37668d1c8a12f0e00ba7466e3cfb326907ebedd767459589ab7ddd7f9c8a59796437b8329e40225f70b6df13a3261f768a39f6f9571dd8b4b6df4bb5039b903ac214d20a1abfe69c324f67eed39c3753bc948475e04d7a27a15cf2a48f59bbd521b0d058afda5102914a63c55a8b44e329dda3227da0ffe252640d327e30d25b62773b8616062363d59a26cb3193494858ddbc89471e21eef9caeb5c9ab844223e5a89703165350f3b21505ad79ad09a304afc1fb5329de49c13e865727be49c3de54ccdc905c0a9b1ec19abe634cf4d21590bca40a01751b4c5e508589a0c4290e58d371fd32239a4ac41b1f1dc1b14241a21ca26e13bd1f89a193e2e2b06565ee75f7209d3bda5d26c1df98f81acf849954bc6f55cdae38a30c3283c6583acd24397636b460b0847e7bce99943177788fc3fe1bf53c163194c92716c3bf9f17036183d01208fd106d361ac08d10391f34114fc2b8d80058748496b58c2a6d497354864dcb81ca4631aa65729cf8f6db5043f225c98c5eea672d4ad51cf632d84127ec9bead032a774c2865b9fb3385cc03f113f0dc457050cb02493c1fbea785c8c8f16d418ed75e088be8f7313e68bc1b88c4a35fc39e503797d14803a01ac9d37870e952a90dc4522f63576a015844a99cf74741704e8749d945229cb357dd4e3ef3878a68f46a6bf51ca529d77c19971ea94d7e9d1fab14c031402cabf07aca65ea57b9d59b91acf91d7f18b7685781fc6238a626b731d13237d63666773955a1dd41571f4276ced6142beb74bcc15c57a0615c0b3b3e7ef3b3edc511d9da98836dc086b8e3077e2306ce37c8d3f8b8ce369a4f4505d2500557a1013ff431282ea858725fe1fa6f3eed49d52db8e72bd58bb16221c24957ce2c1b550d52647ed0f758d69dbcfd02c64b559924ef31bb34459dab6a42bebdaad3d1cea54d94725478f955493f53a9709e2a411c4ad2498c073cb14a426d76c3aad6f08459e22a856df1b6205ed613739d44059f9218c36b765c5991819811bea11aaef1ba95d879432f929d7b03762d106f5bbf9c4abab2c18d73ce8ac87fd40d7121b844a4d72ed2bcb2230013bdff42aa1fbba7c887407d2fd44244c178b01cb4c262313e86ff6ff27c53dc071d51ef96ee50360eef0631e31da2e024ad96c80337fd1b2f27ab847942befa32b191491a51d8144c4b86b324ac121275796827685d954382f662f95b39c0da7643b31396a6b9cb7181f232ad9e7283f7b24ca139cd3e35c4da865ba8a74c39a66668f6a56e4c0a4b75fd688e246fba48d9bda0ce41ad79d5d03cc2491b6015628445b6b9b2cd0acdc96bb0bd9de7d72d2e4273089c6029134b6f77fa5213749105456ed713218c144743b1aabc43950e4e03c087dadafd67fcacc0cf6022f639bf0eef14988bccbd125fed4bcea1a62a096a69e462a4a940f5e993e0ff7c82cad95c020aa67ac5dabf5d2761cdd313d2e6f4847ad6edbd383850cb853ecae5db125600c7313726a34fb7fe4fe2d9aa3be282729847a4bfc79dcf1cde6f23c323a64d134c5ad92c252a2f552baf014cca39a8ff6faac19c9b48b798f1c9c73650a3647bbfd596537a1bd9ae8163e10d83ffaa127df605e00e3fdc62b79863fa8e393d4f4b4ac281facb1fa587dd55c54466880cd459801b8addf0f205300ff31a8d9c3df5ca4d55040153dd1a25d1e734b51d9f446731e5bb541825e3a19af5a23a87d6a8c0c3ae55bb411ee5a5ce96b47a6c7eb7197dc184468035a9fbab1d6283012e6255594b45e56bb6227462bb5c7c4090a37702027267200d81ecad1c8ea5f3c47d9982851f86096070398ef503a69070654dbb82693b46372924730d74900f2c7fcf3763e13fcf645055fae30ba3e815bbd5e4897ad6e45c309576a6faacddd2163e9d10d0df06d21606c2df12f61a2e2b3f7bd29018e395d0a692c3b8540d3b142b847a30f96d0f319e820dd1acc98580abe8509a7ed409e467e753bdb69dcbc9e684a09ee2732f10a541212d1efa1d4208c17a42ad623f4eaf6abfe45c901015f97332d2a878a68c60095a6481d6ba3c7123bab0b1822be7ba1685d0c2bc1fdc1cb2be451c5a99d7476c67b6b129a600933e6e8851388fc5b06027b80a9d8949d4855cc5d250f832c9e01f66592a91af40403e79a326eba3c3810799e438a1b66c1fed61248a2444155b69996134059f4deacd0dbac108de722c1d6e1a50d741584077a12834c0eb76f4111f8d3ae85540539485271157d410245e6bda8cf483809106603ecbc633b4ac827b5588932fef68a4270c285e4d9b1c19e73455e5edb3895c2e090db2b1699e79d0320b1eee0be02bce4983a72a593ec7fba45bf1e74138b4ee4e3dbce35d5c131267b14d4ca490e2ff92dcb3f50c0190b18e0d96616ae710d31a073970231913c546c04047b38d08b0d0b393aeffc750b8970582106c749d7c021a7fe096585d2eb4e0ca28f77b12910fdb030963f7b18405ff20be2ec76e75269fcce4e458c93dbec1500e22a8361e9cf10f22f91171f0c7ba7e215b139ae4640cb405e8bcb2cc4fd9f65d80f3b7004b4e1a52490389c5f19681eab8012b81dba2ade793a8904af18d5f9ba6163550ab0d80cb3751dface1561faf717a8c113cc14f465b3c6f08075fe6eb4b41b6c8911a3c93d93dbf8d5df54dcfe6a9cd17550461f3d0a49923390dec98db6381bb31f5bb58607db3c404b809dd7cc349a2efdb0fbb752853a98741a4f33f92f30f20386547c841b9b9381e06eb002a4e5194cb92934d6349c15385adb5549ea298b564828bdc708a9fb0c263927dedc4de47dd0ef8d6752d1e53b2971fd3623afeb66fee73a0d1a666238701d1e746e1f9bd95ca5c7520c8694370073dc483d12955f767d5bc58c23f1151611528eea82c3d50277b205835016e2229c8616ac8d37feee01e4aacce959a21998141429b9027b088545473e1be1a0fe004815882a1a929857eb63937c839166e9a444919242aa1ff9487882c58a4a1c6058c92745d9bf4ddecf8ea1b40897afaa492c2ae7b72d618fa083017ed2523a07cb2a89a229f458a57586a4c0d9ef04cbb16f0a12a93dec5d525a5d52375f683e9305fc04b6e1e384d9c9e48363ba8dcab8ace1a89c69264b8a4905c786498d1f69f12c21c3b73a93b86a9c9f1d21a5d8ab420f7b42788978dddbb6e8407de23172d0b23ca99f2ef25755f82bb70f3501aaf6cf775bb6c34eeec5b88a20d3a28e613aec85f4ab6313d5f2238087f1f1c93d49c4e59bdc82b50262c05a75210c4fa88fa28599baefa3e1f14dfb05f4479c0b0870f5ab9b8a988c0c88f230855f822fd6a3a70a65c225269b37f185517fcd9da1a6993ab9810ab2f4e70ed3f0fa63232102a5e7a36906332715a729c5a9c18788a9c8a3b32e5322ba792ad05d2322b5efbc3e3f96bdcb14d61fadd32f74dbd4812bf5783ce0cd8b0f85e771c0914ef60da064c66122910f435d5ccdabd24a8f74085a3a90e950ef68ef8624ad063fbdaed262c029615a386e0f85554186ed149a13dc90bae864006ddb845f234f082fb36edc80db1d91b665936fc066a375990b0ae338cd9109f7c255decefdc6eb43b34de4149a23574d678fac01c0d57a673148c84403aede4e6d36643100ab90edd499b7eda42cfb8c16703c89d55a6d3a74992cb307a50b941ec9dcfe46d5ac96e8962911173c7e35e0bdd7e20d70d9254386741c246e31959e4917177e0fe26e0ec3a358e4f4fdaeb7a5d80498b7aa52aa16025ea553cc0470e759fd98cb3b439a9d33dd009d0949e88f6d38f80305b7a2a125145bf07fd43233312018aeabc9afe923713c985deb577c8e8201a128b2ceaebaa86497de491d8f9216fa957faa946741226e34062a0e809ba2206077dddb422acb36aa7597f05072cee1d54abaf7bba47a123c6c261a3d4fadab4c51143329c565d4871dc4d1c97c436b2ee80405f434cc1044a377e06e9272f7f3b84c7494b984b1ef3d0dcc38b1e1ea43e1a699e89a88d66be2223b80fb2d9df2e757bd2f329c719aaa4ab0fad47e1cabb8b030928bda52ad56dc478b1c4e281ad1ed306ec1a1537d68de8c720e5793392521cc28a009ba2a1a1294794fa213ffeea27118ba1ce92cea9d382354d89446f168b88948685b58e90902b736795eb9eea5b8b25d12db3604dd1fa69be195cda27b84ed51f0b49e7171885346ae2e184aa195d97130e71c9dfee70ffd6af293a9ad378b2e8ac6d44f38ff886d8dbceb83884e4ac4f4e6414286f90d24c75f810c97a778bcaba8887336370d030debfb443b12eea31ef3e796229c26514044c9efc8ba215f8eaa150bb83561087e0cdec5721b339942ab971d5a6b9538186c4f042b10ddd6e0233d63b4841cae560ec74c0a0dca4de251c567412ae3453d166d2f637cdff9ec2701d9d0f48baa0a6081c61ac0ed60c16cc8261f03ca11b7424eccad0f36d3662ca6e64970c2d63935b1aac8bdafe4743932b45a4aa7428f277335cb4d043475364c6642f091add0716ed37c4addff9644cfe1d919794eeda1acff0c4d0f42af5fe923404dba1f46b5e0dbd1f660ed0f1ba294c5ce4634c2486915efc4c13c3a458a221a38f915550974609418ac9a1f11e0b7a8f607462528a890cf9df3c978f3d95037742976c97bab2a1a6588c8d45c43fc538441248c7dc11e9ba0738427f962048be456c594c112079772d6dec4057cf3f18ac90bd5d2b8f260c3e2080f095d2e2fb01618192ecf86537ecc58e0cee204cf6167a33de1e0f9b220e5022fc618ae4ef57f0ee72a85e031cb67b7d31edf2e26a1ef57f93074e6c09e69673ee13680ef9896dbe496878796357789b6601d030de44dc6b95cd70bcca1962f6f5caf7a871624795d3945ebf7243a7f961936d3636186e265ebc8635279979f28c4a56b2f0707aae1ee7469417557740f55590bd49100e4f87bdadf54d8bb51512f05db42e8dad3e8e5a9ad4e1805b997b65df625a29b77719a06fbb05de559e2c7e8cd4be8dda79b491088eb7f56d6d845dc9f6a90d5c036c5ba2e46d00c1bbba98e57a9d3d45c7534cd3b9e18a00d8201003b66daa1f454d77b062f68da5448c0489cca7465469370a891681d3bbd3ad259c4a8f62a78fd7f00dc9cd4c04c4273997ca352cea3ec7827491c1886111642a94568d1a7f4cbae9be3531ab83e137dce3787967cec7fd6f2980da7adbdb888b1dba7f85fc440b1f4529b497188701887e7d07b6ff641602fdcbb50c9c916cc41c980ff5ab23a5b7214f4d7a1bf82580ad0f9db7adf19823f702143da8e9cada1290ac467d72d4dc86eb860747039c2dca0a6ca2b5b5f32dd43eb9e04e6c59c1b03958690f1773036a9f5728de58e515ca786bc1aa76343ad8cb0ccdeb9aae9f7694779f7051d4e015bee13107e36fc7eec298573402e223220536e3a9929ce584211e1a967d8c6d84b8b72f5d86ff8506b79c4c44cc64378e04718b2b532e8f3a00bacc8ee4e25963dd914fea107f57720c7ca89c90c9f141e3fe9b7554a72f545a892bce72a50c4f3522cd0749e25428003420c6c1db6bd162dea40ad516a7a883a14bd1e4a1c63df147058e1105f902f557807f57d15302c4c681c9ad9c646173324c7ce25caf50a1c1e9e1bac27e5c39198602029a45b3ae0368b6514169789b92fea2e08111256f96b26996aa95b62709df74fdef130441ce0c9fa86d1e683daac925ad62ff126129c4053353173581fd5d87e62769652d689b7478502b080b0e06401cf5c43f588627d1fff42789c3a33235187cd4d743b69551e7591038c17dfc8eb22243dd3a1818c82c1228a548e0b075d3614c41f56c453c5a706068adc44063342c8ac7d167785a24ceeb68621a4f68c1a290ba1a0ded9055e08bcb822aab7e1a6e52a8eb57cb2b698e2f44bd9f1f819c7aa1fa9f7e436231b69c8d0fb9c972482f475a569c08d210d339fc8ab4fe80f265b9dc5932f6ecb40649884f8ac8c50cc0599470a883f30edfdfba9f11cbd98daa113a603fb7d70357b1390e055a9236f907eb026bdc6f4631dfe129aec14c9d69488ac03513c5112ca5d42acfa210dd2c0e5e83b52f09e4efddc01f53695599f7bad5b9a8fb2d193526322ffffe2c70e0fc5c5c3c6d32d9cf40f01d00d30264d5168125ada8efdc0107b6259a65447c1ae53838c04ac5bc0c1bb3b02ef0964460b470de4230da456c81c4731908762b42f50c3693c3e6d65e79566576a48cfa381eec267781052d65c2fd5863cf18fc6d9038691fbe2e721c06543cf4555b00df5dfdc7d790145c1c344a565207bb0d4f57cb0a7ba2681f235b412b595e6328ec29e03bb55055ce753876b94c03a9b706ccf4f6c9a57b4d402b97d1fa606f3b0636007bec6f06f967bdcbf8bb92db69f73129f0c5ce19bc350851f4d62a87f4982d77285f86cd134e0047b05ac6ad9ece32b5aaca6a687cbd9bedba659199c12ceaab28b37f5f3b0b353e2b816e2d6ad0ef0a0832ca5c10871128ede41e486fa168e84797c5040ce9aa0698a9e5c12b35b76c27d722ac20895b3654ba039f91411f9337552bffbe3ee1f2df241c49bf481a3c5c7010862af380342d6bc8d65dfdec77bd90d01ef8067144b21caa7b0bd2ff931a10657a79235136a2a8cffa60b1de1d21efa19ea20ac7e30be43fd1243cc5b156252564179245711a9fb34478368a031396d2850d8868ee483ffc945799b686d51574fcb32c9782d3c15d585623383bdfea9549c958cdca53698f6410677291d525cb6480141ff1de03cad8c502c05db84ccfff1327527f7f77687bb1a503657877e37e5e1ad4f492813c760584bc88ab8e35b83216bdda280b4f3ffd5b416afcaae531ecbf68d54a2f78b0829a87114a54a69129cfab053653c1d42c9f4a23e8f869f6040fd4987ad00037d756de340d73e9fee30a8113953d515120875c6e3444372d0885be939454cf9aa93c49e93f227d74e1b124b6aca84a2e84140ffaacc833616930a4c1593d98d41c5ff3ae8817c9cb442cac52245bc4f021deaa8b5d1077b94baa0edd7baaaae6d15df935c8ca4f9d779fa3506abea693be21ba1422d309ad08a5e2ed4db2d67065bea67ae907240eae4eb9f40c19383b6d6c0c93ada661eb5c34910a50fa273179032fe9f035a4d328a05edfe515e4b730577a4f30bee8578a6d050e3d346add7901f7eeb345a55fd035c785026cd8786799f82a0892e0aa3f6e3a432347998c1e3ae791e5e8a0e5bfd048f5a43f57f81ad31485fd06fc19ed73bac8d9b8847b5969e1bb4c6ad0ace222aa03b5b963361bef3ed2ac4d714665597e6aff8d87573b73407b8908998a410700cdcd594a367cc51d1f449ae9d8bb2d7c39a007d3fcac4f5cd0aac262e17316016c7ad334e4bc17bf9bf540e8ff1364060c8145f88259d9134a8f98113a0d1860bce19d92113a52526c714de46ac09682e8d7766cee86c7162c7cb2bc42e58f3cb484c159f84a721866c9a14807ae69332026b5e0d620072b9ced2e1fde8d74d5bc8625e17b58a8227f3109d632ba07375e0606a08665e770a0dc8cb29cf17b938d71d205d8f17546208e4f65ef771dcc2483df9b46dae4f81295d97181427e3fe83fe0f7c27662776514379b23bd99e949ec0f8b142fd913bfe77cbc2efa9ea5c6be1953fd39d0f54a8bef8920befef2df5f50f2bf2039566e2e35323ecc8ad068e50021210774c1e318937b527b147d9b97e755bda925000753f6ce6e93b28f9fac963cc9e06d602ebe9641ba01336aa80c71f8ace4b0bd40ab6bef7a9f0a9496d0933fb186e9e6fc30401992873c5828cb687d10585ddd06b47551968daadeb55af2746ccd3281410adb0664b4bc4330f3b3609f725b6cdabd610509907c5c9ecae789d322c9e3e29e0d43008642ad2325823ca198ae0e5de17458aa258893e898756dce7dbba463270cc3bbc4bac557cc32e32bb760655e297f716862250855a91cda9194d08a864b4632286b450ea107f3916532986e3c80bc6b23390846884880c03e644f1959d3a21a9c9dc48d4bc8dba4f2ed35f14db3258496870c5cdb198e20ce440c7a7dce589a945601aa2885a513dc8c1e535f795fb55fbc21ee18332989013a30f686c8693e41a97c1640a1b0990caa0050868610094e6d11a86617f63b3674eebabac1301a6e5abc2f972a86f91a9bac1da9774055ed3b81d86b98c51a7a3e4395648b6bfe09e57038cc8057c6ddde8b94aef282bfc4e28f8d306162123d266a00de11e43fa9cc6b830ff592a71520c4b522c517e380bb7ddefa6bbce4028b63ab0f687f2f9be0a9895950932a7dd29032a2ca5932c08a76ef5412173bbc30d1a9298d5700288cbf87cba32c6c682eb7e72c592e3b05063c98c36f00e55b989eb2f68c99de50b869a7700d459ec2c201ee5c4c2b4abc8d3894f9979585d5786cb2491d508d54dd89d8a9263d2075368dc22752266d9883397963f82f35ad74ed316d8dabc19e52a4fe3c2cfec96edc0200ac9977c3f2d2740d9bdd9f26c22bc2ce6f12955e295d9db57e698bbf2c7117b2a5a1f513b5ab0f21cd4dc05e3b7b8233a16d336b2898df1002ec4a660544bf356236781052df20350194c2c36d534b66f9d03792098c030c97e4c341437c26a79fc4ab8101cd2612b8baa5b9200bc571afd60d414628b48fd48b5d6a6106855f4832762df3c390465feaab675891becea58952aa44573a1dfe522362e4da160d6ed8680a226ff443bd57a49c5885813d91463e8f6bda4da1d2444c444c9fa34e6ac9a3067e2023841bee124b9c50a9a44ba96fbbd7d3a817510b96d1dbe75d30dc7b887f43704377cbbc1e37d2a0ec7c988ad222a2ef6f5ea672c354b8c9be09c40c264a218a3633b2e17b809aee1fd158a2671b56b51e0cb4ca0a7684fa8b521850777b1a03087ef332bb9fcf9b7f33957ce24c25dd22b939c34db9519a098fe09e051c39269ba4ba2991b3d6666f4fb2073244b98599a51efe25b8ad896f6807d592b6a9d9b2c7c3b29198e01062a72dd821f24cea2abc039a347ccc0176f7678bd0cb1959e4b8c631a0abadb2a2a4b74290f7918bc50a57e4f65fc9ea3dc0360c256dd77fc96b2105dc20c811c2db941b8ba4843765509eab35b783060604b50a3b9d44193296ab7dec2c3443d0ce68c7dec6a21c768a472766b1c68251bcf058c4bbd1a42da5c9a0615f3a8f1e37eedbde08513f6971bbfc644237ea6bbc1f4f99209fa73f573c53b6d060c8423383ab088a06d1c8826361fdb16ece5cee32351f56ca1335c7e1404d7ddb54309ce291fc7671a90c65ee5bee939c11db1a846f0907547089d7a62b8b636b800f5e1bbc063d02724a8cef5db3ddd3eb10134edc649def795114a78f46944b25625a12048ed57d64f03305d157218fc556f2b844cc5ace5165efcc33ce5e592503d47d69ce6bd749791a7384f9d080155a8191cde34b1d297628373ef93f4de3a1a06c5554babc8a1c32e7f587749c11544099034abfcca898270e8536aaca94610460b28d52cf01272f7ca12201f844a7091ad2b1285acf009cc3930a76c8b82e2e43176bfa394f13a82d70707cd51638b2bf960b01ca598f6d4d012b217ec9247621fa9d75894aa8e856f6ce9c30c9e1f8cc85dd383178853d84678ef5563a5d12d547213507a2c3bea3dccc5d377f5b630834abf1306c380445107f1af497c04fce0bff060f4049f7c585543dff5677c4099c7e71ae715b17828649d13686bc47614aaa1109cd9835f2c8a2c1cf2722e0718b54a427ecf15f07d65640f7c96ec3e43181e484b206212530c3ae1c62f37b36d25461f6d57a19662da52a25d41b31e2248c347eeb98e4cf3168b2bb52cecd132aa7c21e9e454ab12f920c1dd3a2e746ebcb08b5f881afc97b32664a3ca969e02e78aaedaab92c5308331e03bf7822a29db0f4be66b75da2ce863f9c48956818a9a316dea1736994a0a101383d8bfa21f6163150919dcbe41dc30dadd2f9b0ee4c0a32c6c2e53c7d4e0cddc11ed7f365a60a223113330303b44b4bcf9024e2f91949ac4dea18727b1ebe4ce3de1f67d263c5b292b1b8dac8494ec5aac36f0d0681a1b9ae59c7fabcb498b0aa76a082f072fcf12811dc01b8af83676a00df07a1407891b37ad365b3d171d0bbc8dab7a42aad54dedc173d5731a784143ff6ee6cfa449c65e14ac2081e2f0406ac43ee40dec8a596b27bd4de1dcf542f21f4c7de9f7a0874b792c253494f0e0a00e1efb8918a17d4b1e8d8f9af826fbb656a71ec637541cfdd779d9385758922366692355f5d1a7f8979d6eb2a75c0bf00481d7478852f35dc3740190511e76ae7ca208f6a15f5328276eab0aa57d0b4e7f1c4c2cf7a82286e36695797f300dd687fd4e782bce2070bd73fbf9ce9093351f4002ea07b0547a835a55ff11164701d66f349169eba69b0e09f1a7c76af54d591037d83f68e1d893d8e139be80423711fc59a2b1f6b746fff4518ffb5c0c359343c37998215d8f08a334869c25d4d8a15ece72699321071c46e807bf0b944140d509b7ea76a265e5c33d88126a5991a7d78e002876093963ee76faa6616a2273fcf77391364eca86fb586f020d0f3d917b27643ac42bfc5d8e5a0076c6e357f9e0dba994b3fb0cd3c59592c1f17065c32917a67dfd942022554a5756874e811761d77043c0909a204e775563f89efddfabba8a1403aee9f67244053d98f91898b7833746d99a572423d6cb1b1129b4ff87dab854f0628f5d9ef43c269359cf2a18b6ddaf91dd7aa940f9d9b154dec92921b3c6ceb6d09746fb4e8a13bcd1d929af3f892a38993ecae71778d01e49f0b5ed1f9ac3cef7324f88a384b0f2a578585f321b9e5d2eeb84b5d7995b0fbb513ea377334e3155901d209181b41942ed8df7d3fcb144adb5ac8d64f8c824da1e27076d1a2c908620726c77475243d50b6c1ab26d785df9f2677e649e1ecc1ce7a96954ddbd3b8e6c24a8db15bee7f788d31197ea3587daf3906d38e7deb16ebdff4574af0bc36efbcaa270d3b57bb0a424df436c4101846f342b4abe1ad8de337199f20c31d98e79bcb6e2534b7ac8c1759586b31008dabacb7a7fd56ca8b11431c836415ec9d4fe49593e34cd6e06d565d0be96736398728f77051e936839e335208b9c6d7434859e9f8cdda145ac08ede05b5a922ae182a78a47a282247d1dd24a894fc90023a9b9bc5e94d21c7df0d633915f73b14f36815acd92557902b81f90afa98af661fdd085c5372a41907d4cda9e150aa5262ab03cbc195ae64305909dc70865b7a842943cb7468c365d11ba97b10289d207c8815e6d929436449a99853327391aead437905588811d3b7d75fb4c74e4eb0ffce43f96155041e1bc204e899050ad03613a5bffc678a6dbad5139ef51448c7c648bd748aee17a4d7131557b0632f5f8292b471c69e139f5788f8785a2b12836d0d6076d068725557bc5bd174e153437603c96baa4f912a8b904879cfbc87d829cc759711d02fb3ce7d7b09a4a734ceba2cd85da9dc275665a7dd19b4aa94a5c03e38d3afa803ced96bdfa34eeaf691c236f80d16ea409b30d4550d36bd56daaeb28163be792e77dc5e53b151464c8f0d88e85e593c4b4637231b921043f01784dfbc3a0d394d0041582108ec8da12b683690591d368fa976aace2dd36196e24c29d0d0d0538cf5c77ed6ec1ec6e28c5009a73145e6193431f060515615b61429bbead88e009926abb5ce0dc1cb948d61ab06444904338e218b36999c3411d726ac556e65a8254a5d13b7bd11221844be4fc9e7dbb1ad137f9aaabad6d8c622d1b03fd2ce64445633752a2a8c30c23d7c56b7d1d9b1f94f53707d23074ba887f093ca9da867ba9486b6cb9c8eed2b5e69f7d670c006c53dc487b27d152b3aec4b5d1aeb8d1316d388db5c568ac4dbff707ef0521a14b8d55c09ca3189debb1d2b1f8fd7fb2577e2c4d65badef7a65441eeff65c9015eccc3265455728a7cf5ccfc89e9fc75fd5c4de38474551947f19af4e04ee2c2b6c48796983273a1b7994fd68d90e8c32b4296d477399c8fac724f24198d2fee581e7e36032a4859bfa6fb88bbcaa78526ef937460aac5e03fa71ba7e5c301616a9037a5025507ef2ea23665adbfe6908923c526b7e0e6535da22ed7718f614db3eeabfce623b152a8f6f51a79b0af0f81ae6ec38c6d27c3da1a139ebb12f89228c88856b17a9bd04015a5843f94d08d9bbc9967b4b99929401a607d907c4076088086b9b4c2bdc566baddbea0e82d4bf0ffcbabb6d6db7ee21d847708f2528128d461f88473bc02548514a7ca31f30fdaaeac72edeee207cdf488bf932f201d3b723c0a5df3c4a8f72c093d672ac05943ef5a7eeee943aa594babbbfc0bbf3b8c0f47d94a1554dad0c569ca1556ddbced02e3bde8b7f2c397106195a5593a10233d8fe19dc855a05da45a717f485788e6d8b44088e6c914b6cabab7e0d15309fdc116cd236e02ac0dddf52965b07abd3afe1e62e85e4fa958e73f678e7ea3acafdd218a05f2259a995ed8358a5c40a72a9c3e4f506120d483608f92489dd6b395b695a56f83817517289493dc06560fa05b05dd7756fefbd5cf7f7bfeedafadcb5b7b39cadaa92c6c9fdfe4e0bffa28aa9fa6fdda80f24022842e06244442e716dfdcbbd5305c5dd69e1606fe8a0a19476dfa150d7f47e214a2fbd1ffa20de7f546cfa7d437f437fdf47e86f2814facffb2f44bf344dd847434f81c0337428e4ddaee36c15b1e5018d149a8640ab5c033d41203f2c305934ed6aef41af431ee007f1c0af2215638040930e7a1f04f4bcf7017a1e08820bf81e656895ff0fd83ef7fd27ea68d2ff8686e6090d1936c6b59da27bf906e9082e80640620b3a65216d0216e984f9863f878fe2ffd027fe547faa10fb2f2dfdb770f9cd346e7cb02b3675809f2fdcadb0fbd8f95ff3ef433d3b1c7ca88ea8185e83c0c1c71c09fb0ef6dba14fd0672f28cf701779eaff254fcd133def218fde84ba816484f1f7500d2d3e7417a5aa294e2d28cb16cfa9e8a28fa163d49cc009d221adfa60dd026274daed872d2f46ec28f7b84784e576f113c9f7e024260888a48c1ee744649fe74f6b3f66af2698b780b6a4fa3e39b2108babe2f140a7d5fd27cafe38340bbbc226fba77ce2f3f7f2357ea66f66efedf9fbee7af82b4f484c66928ed502804e6649bf69edeefc423ee971a5f510736d1dc4953ab1d94eec8ed8ab4cac9c0f7bba7e188193cfe9ac1638ae189f99a73081fcc9afa0ece1ad7410ee814d995c88e64ce785f017f74c6973e88caaf7c90195f7afb313860be68109e0d5b08055979950f52fa196f1fd5df63e555be47e9673c0c2baff23e56461c243d54481fa5d18511a76b02073488c1544613bd81123d3d7affa0ff7d87441a27609abfef75b4ca0f40ff13fb47e20ffafdd4661ab640f3e83f1ab6909379803ffad1381a512d887ef4281ea21f8d2f73451a8d9ec7cca3f1cb9a7bf4a1cfc958fc9e7e2f1243a73cfea2c149ff7b31a6a15de0386bd899359512f1dcf3ffbe102d4279280fe5a9f90b91aec0776ca9a27056355777d4a10dbaaee338b7550a8d2cdfb889a15d1aa0b4092626cb5fd48926fde94fcfa0186aa0410ae67e6678c44783bfbe918686864728c7e003a631b8e0f4c70a1c04498fd07b1fe4d69d4c803c81749a641a76ffdd1ce02048827c7fbfbfefc3fb100a86fbdffbb8ff8d38487a7cefbd8f50134e282206fb469726e009f3121c61069b30245d48b45102642ac9f46d6878e86895d3a7d1d1af1a5a5a4a359fbac2fc6dda35d2f00473634b252203d3af34db1d16dfc7852a154363f939f46e32cd39c9d0f7d80afdcc27d6605b3ada45c723dc7168e8de346b42d9bd1fcb23badb420c70cdf443ef893f3ce441a7e40cd029dff398f91bdb1b4bfa1ca0d97b2e24dea7ddd8d2a46b81ed88af480998da276aaa1bf567ad94ab1dd785375d73ad56a95aa5e3851e31d07722a5a4a30d8d8d116ead88afa3652a12754b4451606ab34dbac2a44d5d93aa6afea45dfd940655a1221a129fc584af373ea1289c326d02f797150499d61b746a0e99be7fd14518b3c6366b46ef4fc8f47d8c4c7d4aa6ce844c7d0999521723d3dbcca3b7699148246a95e8673845a2d7e637579e783bae432af9d4d1ba147cb55f1376a9756b6bad96eb1cbc5fbd5a02696e863cdf5226a6f9d3da5aad73b7db759ad3dad92a5badad0e1ee1fbe60c65c955afb5863cdfa758968098f27ceecbdafd5c9bb25b6b476ae39d58860700c5b27ed9dffd57bbee6b37de12c40098ed0804ccf3c59203bbecaa5b0ebce14d67ceaf577ab9c5727a9e9d5b2c2f0dda63e215d75ac7daaab68b00bea152598e9b007ef9e73acbe456265ea825c084d2914e55b5dfe9e06b4f07cdf4ee9fe9b0556d5703bea1b21cd701fcf2cf75b6c5d4dd5ac2def5c0b5b9b199d9c73955b4e2d4ebcdb9aa4fbb31ff72806f9e40398811c2010ef304cae1c937060ee50994c31640395cb1c3a89a85aec0a33c81729805619c27500e3e59958311275f5437fe2587582ebf657130e7a7307dfaf4c962f2aead2c26effaf5f69eb3a67d4ef790404b1312309d7e8ba86e9d21dbad9f46e9ef1813727f0f699d767ddfdf44fa7ba75db59f06f9eb27a7091f173c6189308c3cf101d6fe8212e4ee723f35d2230619fa6768d74aeea72188dcfd1ec0b92c1d96d82181143818b20258bb0b723fede9c27573bfa8ca10430b31be18c10b6244602dc8fd364ce47e039832f002db11536460451753606dc40630f79020729d4043a460d283154037f8a025cfb9c2ccdfdff0e6a3b79b183914fa2ebc09f51491690fc9ad13a3b723b8a4b7d38dbe0d4764ef3d1aa55d657d2f0abd512851ca4aa7927ce774a9d472575b21e021dbe04a60e0f26ff4a68ac5622198c56230fa559cfefabf22dbafed9ab9898680cbcff46f47a338495f5547d5979f6f4ed2131d4dd194ce59c779c7952aa6b70a68a53cfee8be9f1b5108680ef4e8fe33b471b1945d9c403bcc728b3494f27c2134a7773efbf5736039b0926c364322491151cb0de80723d8ee1334d0e78925b3d91345f099d12008081bde9a40020a26ae48c2c3fda2882783e28b1d24a0f86249121d2f566357f8849124766bcf0d9c0645134320c3f280ade83b188b28f60684c5ed4682da039405122eba271d0da807273e403d34e1eb012ac108785057b329580006adf37c6430b00149b6439acd6444642e00633399144a84cae049215686acf6947145282b438cf945685034b1d337289c88d5a05862c909f27c7056b3a26fb320d86ab320dc389f991070c8f3473116d03c66c4909b0a7450e2062f1c824d797e0b913c5fa6d9145f0c99c934a60af2fcd2bcdc146fe04dadadb37a0f152328307deb95ae9d9ddd82bb5f3ab5eeb6549a61ab9b46eadd71959bd5ad7badfe396dffcab9dbea2d15757f6955fdea5e3d95128c80307ddade95f30a4eced6aed60af6c096ea4b7593833ba8d5625bbf7b7e59bbcce5cfb35f77f7ba312a7530080cba6010a6f3d6f75abb7b345bf585d76aed8de2de7b6f28079f10e0eddc72dd15e27a4dbcd00c85beae3a570252fa3e0b5e1a08da0fbbea1cc7518eda2b44d874d62a0a45ee391085c224dd3636527c5f2772397ffd39d8899e3f0b7662e77abb5027f25973bb02cc970c55c810f2429cf74eeae06f4d5f2f544d2dff122a012995461ab8f1bfd539376127b1705f7253c1a622edfe0b81dcfd7e865842e21c2bfd4876b40902d39fb58ae85cd9cf9409180a85ba06cb60c2840913264c2865e26f278db6d73ad36ae9e89086a65ace5ffe6fa8545cd752dbe561d5410d47adcfe9a0cfe9d5a7bbbbadd3badb5a337d4e6fd508a800434abb26156028e9176dd7a4e20b2bb2dbd9aca920982b7f777beb77efe3396eecd1ef8d38383934cc5e90e146b3a9d526adc77deffbfba43184e2dee37cf47b6310effb47141704c585df02c31107ff1cdffb0ef793bcf771df1b8384cad603c2079f84228d9e88225d118fa8cf8c5869c4a1b21e1f596c468f9d599ae8c54ada33a2b8cf81adc8ee88e2c61786d078d3e7c06afc84e12fa98fcad39b93fe8f43ffbeca884343a11187d2c61b0e0e9d39edf328bd599ad8224af416251a5130f4d7ef416b5c1c8142464f2c061bbdca23e981bffbaefbd1f7e87e14cb4e1abb1bbb47d6b1aec763b55bac763389766669882be27492bbb5be793f63a5efc7dff9eb1000a6f2a31107498fd197469cd28ff08f469cd2d8b81b71da07070a53e9d957b6cf37a2489f03ebd04f58684491c617864c27457666694dcb8ef24161dd535887a4c7e843281842ff7d8f90e871fc433e3d428f471c97b9fb8cc69e99d76aa5cbee1804490faff49e26c08278234af4e0877f479468f431e22041bd709f011376471f5c14132061882196c462309f39e98fa3d3b0ef85841e1c513e3ad40bde5ff7c9fe2e64e00923dd891d9460c2e4492c069bb06f0c222434c6c21b921dd0a00959f7a5d3b2ff8a12f08e21b33cabc8a5d76aacea38e96e67b944bd101be519d6989dd558f6b733bbc4d2fcb928fed3ad2dbb73b1ec9c4e764e96ddceb27346b2733ed9b99fecdc6c4950e69c5c8182272c04a3b9f45b8ee5090021ddad1154c324c512401039010f38d0927447945827497431250820f0c0032328c1ed6044f757ce91b46a403902143a2c11842b909044b8832c9cc2faa046173d70420721ccca10e23603bbc30e4c5031e4e3de6d0410bc1d42d03742348aab7246cc1bacd005e3075caa54a616ac6ad788934d61018913cc8e48c20f4020051254d619c132f103ca12426881830c7820850cae0e40589942092540a243061547b0c1c76ed13c981a891a0baac1141cec000832f8028b18f8f073854bf7678d773f2109b38a1a5a5f45a23470d5d90c42c187224c21031290412b0306a1eb33d332995a70cbce76a8b13222a28b984ac89125c10230c0c0a107260c41628bbccc7ef79a0828068204b12060f013021ed8915c9a5e757be7360b68a99a99b72a014fd8c5a6b781560374a53a0089004a7f09ce7eaa059dd5e79cd3a953a77449a6ddac083c9fb6d3e944a67fe7f8a3c3d3fb814cc55bbf1aba304b4b2746e2a6b1e4c69ba9297b1eb57b8ea5fd43bbec585e7b6ba6de97f443e3a49452dad9daa2acfa34bcb196526b29b53473dc674aa79db6565b3fcad99cb05f494f6899a179b92b56b1fcb8f73cb14559b6b3ef2de05aeb71dc5bcb79997274baa8abd77441ec2fd91251e7fb8fc952045cd63c7f8b911005985354066d17be22d305da03154bad128fe01efb8b1bdfc96efba26a171d9f76f7a52bbb37e1ee47f75f7aa3eae9abbaf9b3edfcf9d56bcf8d56cd1fa3847ff4f8fb5fea83ee71c0e61f21076cfef06778130affc51ff8492a6ffa9268fa9cc2bb7c795f28903e051105714e92c6bb88739235e6a39e45fc311ff5df6c6141892d2c2c2c335ac672b2fc0925b2fc6419af492c3f976a8ce5bd78652c4db9344922fe92887f8658cec7b8069bf1f8ad6ad34bfdfa2f690bcc8df89a4ca63a8642684e68af0af03b0f7852a05604db340b807630a26798a6351202cfbeb767940b9218b89fd2bfd786d2ea73ce49a977d581534aa93b7577a794fa53a74ee90bb8ee47cff3ba11974c5d770b1078761794de3a0ac225c889a2c0a32bae37da62d4035c964641a2282c773ba765e006622d17de74a696735cd775375a2a105f10dfefbb91e77fb3bbf77a5e28f48537fff2228c7b04c39b6adbbbdbbbadbfedecb5ee95ab2d5cfa40300c455654e6e4502a2e67804ec9a4cf5ca59a8430348c34e2a4ffe866bab5cbb3bfe9461ae9ec52132d814bd36df5e3afeebf99a098a2b4abc6dad543dac57a7f161d1659bb5aefcfb2d32e199e22ed2aa25d3246da15f3fe2c4758926817aac7d4939c8a1153b55450abfc5b62ca49abfc5962aa498ae6f203dc4f533401fc5804ea4ba9fce0f224abc94e3b7e7b8c65fff246ee87f95ebd445b93feb46ce3ffe7770f23928c38b9126b39650f46ff1b4dc1f4734181822459bbb8d5b3b0bce9e6afd548d69af417850cf06030630a084cdfc69727198988b9f25f892423b7c68aa9c43243e54442b5b8a09082ad236f4a63b688483d73e54fbbf1de6cd6543132b571e30d5103540062796d882526450d549558de0088a5d75410cb159eec9f124bd24ff67f11cb959eec0f00b14c6991fd47512c5976b2ff8b650aa2ad4c39c9fe2e628b587a0d25965ecb25592b2f0b4956924464ff1a62e9371aa22dfbafb8d4b27f89ac9145647f95934c0395ac69a0e6d2742b7198a2954e2bbbdbdd29af4ed753763f993e6957d9414eda65dfd6ae59bf24f564b74fea6997cdfea42266d99f442339e9570dd291764da0217ab27b33520fc9c82cfb09a2c8256949f61330c925a9497692adde121a2d28a85d6557cb334f49bb1c08cca537f39a649f5a78b3ecab9b4848e7d8a874c78a6fbe7c1d386b66a61fce1a064c98f5012e6fb6dfb5fd20c635256e95fddb2a9bed7553cbbfa8fcd599fcd58d2d32824d2a9adc7223db1618023b7320f784b3200882604eee7e2ef4365d83678fe3de34c90e193061fe330c6d1d43082541516cd497b9aa7594cd7931aeb5d61e6774bccc52f54612848c0a2354cc269d2c14a901174230e207082aa6f8747aa82fb3659e11a480f822f75393028cfc2c81032448e8e20757f20dd101228bdcb966618258ce9127900964f508ee438004083cc9d9b6448540619c0c30007b680b01f6b4734df09a836ab1b09c165caddbe92e0870497dae678417a285be243dfef3813e788884cf6bb6e571db9343ef76deed44b52568115b44bb8a5cb7a2910ea6d1cc0d1556bd40356bb4273bed9935f6fd65a86190de784eac4093fe54948104ca30575b609e769557555fe56fc56953f8f966bb38c0e51f134f007c3d5f5fcb8f6628f2d774967fb4edb694ce48554c2b07cd8c00b5566f9faf561e337bf4d6eadece556be79cd3154ed5ac3e57eeddf59c7d29cd7789fbe52de5d24443d0f2958b7f4588eec7254a99b04b1081942638dc0a032078235aabb3dc4bd7755dd73d7d3a84e3387b39ae765dd7d9207e3c28ea0a5010537c4732982750103d950302e8072279023921ab224fa01f8a64d25c810337cf1a0e98722d996679020141c9b5f4402c16cb35986a52c825187635775fbbff3ab1ac23f7271729d8c71ffe9d67eebe3e37fef0af7ec7f2be11ddb71746537069ea4fa508f69f43e052f572c39db3e30dce0041f3058686b9cdc9aa936f5d147fdd5719a2ff76230a705973ad95b3b5becd5f0de386f8aa0d8a53971812c6129890d00d33e8c1a1439810050f4cc8d442466b2d7268d2036b1b644c88c1be0ab6d84fcc800735d867c1163bd683430fece3c016e7942c663218bde5a0841becbb3ec4c007f679608b738a2634198cc688111d188e10308b1f62302414a7633b42d0603842ba16cc601e111d536e1187862146184b6042463411d822ad82074a7a60df086c7186f1441536d8874798d4448ed468b01c2aa4db4dd0fdfd1eab55486713d21a62c80f0c09ea0034273b136ab62a8455860f4660b37194e09d619040093db0ea220e92eeb9c711e23121fe41848c31fb762c09a19ff6d3feeeeeeeeeeeee6e1cf4bf3973cc0a223b4a5c266013b0e0c6c4d3324be446cc49ee1a973da806af653774b2e8ae4d99abb5044a88c0dfe275efdc20c04ec01c57c71ec82836c0e505e241f902612346ab11d6d63999989a62aab24ee9280126b5457bce169369daa6258c5d7e3fbcd5bb97f6f1c3d9b37acf39a927f21a86eda775bdf18aa41a0af148e5a78a2844402877dd83ffcd2ebca1ffa2fabe8dc055c812afac658b3ad1fa4972c12492fc805f60faf32529c1dcddeb3d4d4257c8746c23702bb772d724497eb818f090e0a7bc798ec692e6127cd257efc3bf57349634444028df90c70d6f385c6a95bf29f4e10d47b92c0ac59212c916142ba5f4ade805a6449cea70bdefec87e1023e310c6f3c17aec8e5ce8e28d7034c05a64bf2fcd9edddfdc4d5d55adb4d96a6dd5ec7ee2faad7cad95a395b6bf531878fb3f6b9aed556f746f2957372d6ba6ff1dd4984afa35d296d253e0f0aa695560ac637db45bbbb85744e6dfa840e7ca803d83c9fcb73a473552715b9fc8db8fc4d6af39c739c5ccea914e79bb366d61c4ba90b3e1e33cf39e79c13680456985af544707fb24e70d70b7e5796727322edfe8a654ebe2038a27884ff037c7ff0fdc3b79f93a9588235e4d07f6248bf9c1c128180d91ba90ef4d6596fe7c009efb9ef4bcfe33c8fbba1e7aabbbbcf27d37598f3dde7fc2b76f33bfac4ddddbd4eb74c8c9a8cb2681b44518cb4f8685a453fbc99e30f94c82dc2e88726598cb018fd204514457884ef1bfd30d262a4c58836d2e2f230c262449b5448b18218ccd61e513dfaef1348f003ebff969d618e5404fcb9c4f9099c04af00cf6f317402d34a97409282270eb6dcf6e98f6618e5ef24a54da7982d99cd327d03f48bd226fd4d3f6c62d6aa0d9ffd46f5b07f41d2f44183c0a603eda024cf9087ffe046d401722320380a8e02a3627961eeb3f6d08bf952ae6ed9df3ec1250dcafea455cefd87654efa9f3249c6834b52cf9c1e66e07be23625d7d04f73870830e51e493d73d52ee33af1c8c8e0b031c02c012e2c89a9332d96141997cce3a0a11173b45aaf57cdfb7f35e2ccbfc499636a4c8d38f38b469c5945e5593c84819e644bc0a54b2da6c6d499168bd562b172b4ea4c4c4a462419211d79f9d2a546836266646aeb63aa8c58b6c69866b5582d1c2e19968b25c362c9e0687dff420f1a04826266aa0539d1e6af93cca5e6a28991f9ca7ad789e72493f92e5932ef4af180ce578a36499f00f8390190a291ac6f962d0525152525c535a3828e0a4454d811a388524428e24df442b4a164a8408a960a2279c85a090839c3b4cdc4e480d22e1cadd7fbf330e008b85f6439c94e474eb2d3cec9e7f4739a9d949cace81749762ae224fb9f7a4c3793946a0baa273a2a03b717e2ad5d5162de5f9432c6469d76a1627ee61cef3f126957cb76da55a4a75d38de7f2c623cd22e54eb35e2089a11a9cd4523a3c2734e52b5d1142cfa8f5e3a5dd48537a9a054939493148dacb9b4ac288ce9e634d3cda595b02a2b0aaa6d0c69978c0e111b3bed92b1c163a34811ed42d5f1d4733a1539f19c764e2e647992a1a80e254292ab15287487ca604493cdc900d8b0640fe953a326dab2e9e77489b6a9f237919fa2a582fc356143607e557fc71bf117aa8e281858f81def8385df310641d263f53b3e08ccb330fad8f12c3c0b6390d5ef183b23301a8485dff13ce274d2fb0197291a0b23cac78e877998df31763d4ec2882e35279b559bc5ea8fa2c0075056e4c87823428755dba5468570a9f90b660533ae6618c36aec8266ed3a65fa5fb792494642dc174a35a932c0291aa5618a667ff0ea61fe043132acff5a64bd0b172d1df332a2cb93b2b66246971a586b95cb935639abd6ca1a5d6a2eb656b9ed018b38739974016da110cf4e11db6c34faf9a9f96bf5f43d8fc895a568fe226b385dcd49fa302b91fa38590b6fc8da48b2c09c1a719224c9efb1bc55277f23d0658b1dbffaf2ee1861305e8db3bf49b2eff17f86379d13fcf7cb14cd5f2c3ccc97379f4ecf82986ad2a4cf2651789811852fafca8c9c3c5d50601acf12d4ae6eb175f2081495dc884b46e2287c417479e26253fd0c5d6a270a5bf171d205f0a54bad24495f9224591e4d59324f1965830054402cc4c80718557ab2a6123e160297c21646f9246b5514291d0de503e677fc8e31088aa5f62c303f61abb1a3754e6096209b8fd5c38ca6db938cc2e3ef1768b8dfa58e544e2c52f6276b79e545ab2ae9711d5982589cf48bc656b6769da2acbc68172ad62acf55d6ae51f6afe249d62a16607ec7d3a834768c2e35afa24fe15d6aa43a7ea5d797c29b155eaf1ca2ad569aaf6fd3a39e1a299a2c9335951f7f996e4ebae924136d346fd3b6099eb955c63c8be64b201ded6389a666028ef9cea5e9c6123bb7c4b23ecdc7d4114847cb35ef3f67cd74bd5c2b7c3f385d39be43b956d40e98f5df7591b5ab66ff0f05024c236b386056f8295af8e549b61a5334940eb8146dafaf2290aa9373bc4dbb78d12e54eb499e71a9b98b4d34d26a92453a9ee6a6009734333333332927a9a0144db4a5682f1c3968441d22298956f9d788a49f56b9fc6b851c2b2be10d4d8e1747dac89b9334723c8df08626c7b3c4b2e673fc0c6f5e6fd3a3293870fc688ceed6d79a61cdd46e36623322796b95abcebc3f09858cd2ae19f2898c487a31339236991609858c42d66cb84cd16c3c46ccf138c49a9ad7db740e9a170d1a34421e3493624452123f4eac9cec0d78f5304f3f4573b7f136dec697a64c73b24678e39a79168eb7e98fc6cccff0c6d55debf8a35fe63fea3232dfa3e916c3fa94173131a21a14276258d5742300eb6dba8aa61bab767777d7feebc2f25f0567be431c2f239633acb1fc4014d311b068aba4fa658ad68af99417ed2ac95a6d8d2d746ea568a9262bd93f754b45f15721a6c2107f1588f40b4c39a965ff54ad15534999ad5da568cb4fda4580ec4f7ad1ae0985d87f9289362930fd9ec1f1363de3c26162d55a59312ca01d0246b15ca4b4cb5528d6d84267964bcde54911d9dfc586420c051d7f0db13e35c8fe28c8dab5d3af21a32553bac8fe2814e95795b978d1aeb964ca4ef677b9b1aaab5cd9b2bf2fc9ee54645fd9da55a66807d06127a85d1447cb4c8b4c4b4b8b098cf919deb4a8073919f3a22d26e671c4fc4ccccbc4c4c4bcc7bc490a9098f78f69c5d4004fa71d56ad56a7b2582c11035527f7f8a33eeb3f96782a820a6f5a1fc3faeeee66354e0f6b2c717862c41248b543f0572a88c4e3af54edc433c39999af228e77e1028fc6e8fe6244d7b70c4b86f5acb7e9d10da76aa99b8c98aab5ca534d82524f52b676c97c931b993115d41267ae9d63c49959a24b4cd952b428987e49ae7e5a5fbe29b37eba6873d21ff541646d358a367fd56f8de547c9f563c6d274cbf559e3ac38c6539176b1c67266045275aaabf5fe279e76d527154132d2aa23adc23cb8f4b0bf503d560ff330230eccaf46dc63f53023ceeabf95e82d71d25722cc5bf101ab875975340ff81c41978481abb71227ac7b0339b947cf8a56cd49ebafc409bbc10d46f2bc810db73c803c6f3044083994b1b0fc67ba91467af496b07aff1696a096c912d4f2d35f2c414efab7bc684bd1da3580f7ff5cc0d194d11858646981010d83f99548612b25ab2573359babd50ff984b49d7e8664edc7c90188fd302285b104cde8193da367f40c295232e94b975a8f2226b00823368c65a755ce12e4f7626c32a158829a64fc0310c95aab7c35ae7e9c74d2c75fe28f9346fc3561e2ec273b9944abc89f0e9ef0a804ee75453d0a15d108040000003315002020100a86c562916828cd34598b3d14000d7090447658381408b328c7711c848c3186004200200610440819a29a6d10004073909c42480e7050358d50263a604c452821075c940437322dd99952a46a7484522e6e3200d29b0df7a963090655e0e05740e366b5289af79631aaf07468595ac7927e4b575a12971cde8a969a13f1d21a0a153f9e6f7cf10d6ed03662e64c26c2412e4bde605ae0ea2e2cad416fdba6b2ca8ad934a71c7754ca6505392dc5a8830aed8bee6440e08364dcdbb69903b22a042fa578e4521a25465894c88b1e98c5840b85f713f3b9a2f42d2efeb5f9a956b46934f10ec496c742584c8682b408e455de00a20edbde87ca3d622ed839f1b550f250b06a30fc805d5e2e55c3c6619425a9a0bfa3e0cb0464add7110763111e76e6f3a0a7f2b7ef4dfbc959a6d061ea396fda68c4041eaf06bd9912627441458a157fdccd57ec44cc83f3d925bd57df69f2535c3f349240947e5ea4338fbb9f2fa832b9277bdacb5e1e412a4fe9f54370ac8e6a794a8b12fd002dc5782f04b1c82895e57d18b8b9f92853f44fa33e137edfc685ac1dae082e9e9dfa1c84897d9f9614e645742e0f5285acc4323248baab2a2c3c5958f555f0d6835ccaa8f90aa42633d000a7c1fbf0b09a31418a82e37fb6ee8d6428acee2e4b9ed5046288514858cf3b2c26b07a8d06d197ca44c917609d4d5fd6d1f771708bcfceb3747395965a6078290fd94871133cfdb062b512ab28470bec4868610a839cc3b02ea15ed6079b4b8b61bb50ead3d666f765bdac3dc849c2b3fa9537d6b4400fabd86a568d1929a365b9c442fce702ff629d1015e782f6a559658dbd968f054c71fc31e9c46fd8933dc0a298fa1079181b466b3e47c6bbea82ec288fe1b5c076d586fdeac96be81e31e6377410118c3190c20b56835b1ccfc42e6d2183b3087494c1068610883142fab6352a8bb0fa48c9c92e2696e93dcfa8000f837418589994793f0a52cdd9570a3343f9c82a19b110b653e0d0359e00056483f341c98319d6daaeb6612c6326968b9b1407aff42c47f5f000bddbf13a8193cd5b1984a4950eecac403f6658c730639145b1272283b8ca1023c82e5622c34f2782160d8cbc30e96daf07dc79c10bd44681308b2a0b0007356d58ea1d47eeda68d1015b1986348a481a59d0a9dc18c1a1cbc9de4ee6624b32be0495519a15a471c3a42f045deca40ac0a53b629611b0e1f4437e058bca247fb32cc817fcc9a0b1dc6d7af41b22952f04c40bf9e84e476ddf7e9974957e64b0c3d32722a2f6b1f77e0c9b07c61664ccfbe1e7542515179e133cf954dee11c75ce261a3045f3a56736400e8a1cbcd7e64c1375298eab8f5459e85d4145550d97ec5b16c697eb103f44dc35f361003f665d62daef24f93929bbd99d7f9ee682b894effe52f7f1ab90c5e630c2e6fe00c3c7a8b4cc41e3ce49c0db3bbd9b1c59c62c48346ac07bbe9e0f2d228978d4754b5ee11d2218877ebbba08ed3c4719f78769a4b3039b0fcda94fd3678ee544060df31de564d82ffc53180915c0a1632c8230067ba70f874d897bc249749614effabeae8ed9d459af309617e31d49ba26639cc14468cc00c9e0da437b85a9c4d7709fc9a72084697c8fd411a9ffae66d9f5c192f906e329f46cb88d7482526b704185f22b5208771f86b6069129548dda23eab522fbca092d0a6bcac4908656449685f105b0e302e859000624e45b865eaf22cb744216b86b34778b8323a042933dea804b969c4b0aec4ab28235d083236f647b394960bb92698ec8ad05eb079eb29d2064eca3b54ed825af95a8fc55c1cb31324c72794880ea7fef1e64160d9c89b577e19254720655a0df6502896edb0f94eeb1c085bedb45664b438ae86a2aa89123219d8cdc28e1174aba6a16cb513936f73a014b8f2eb534ee3a0b2a2ae825b6a22a1bba40cac6beb5a0678bae520fa37331632957f9378082f19edbb35ac2e9f2adceb54b0a1e6040134c5f4819d4d0d708250b7d460a623492782ee6dc5d60e1be6561075ee963217badaaaec0f6b429de902347e94ffe035cd36b293402dc115d011c444a4bc83dbf129a6aecde7d89acfb6f72e7f8bf5d7a6be461bce49120ccafc7856a470e823b581f805ba8a515bb309892dce55197bfa4a99e44adb4528d98fce830ea4ade08bbe0f4dc295b2f9db8a9d9850a084d4d548cb9c35ae2e7143fac1de9f1cda5b7f561a78ba86f9357d43552d685a119defe8f4a5c8a99749b85a0a7029411e8cad61f117c2f7aca5676c8c64be5eba3c5225f9510b8522476d720eaa48175f05f175137cf327d890c9a33435c97e9f108a9a3e003001f9d4fd19c89a1df2479d2abd1253c18e529f4e0d011758d0ed125ff1b3006201f61f01fd64db4511b50be6674d45270e1987e703926333a83bb7f510ca2f485176b2d1ae4602c3c0ddfcd6d7607af623ed96c2bbe2e4f90dddb8b092114e874194bd919b2fa5e40f9ec9644770b0e000e2bbf5c2d12edb288c8022f56ce168a650e4f4ff9bdf1e32c292186771f8c0d5dad02dd9eb3895ae7075558760e9a9bbd8b4dade4f9ad8a693edb3a19061812ecc4d0355d6686d2c7e0f6610dd3399f13c8395fbe229d0d7246981319c478563cc79d6751e9926ffeea3dc40e4ba88bb9c0cc84d7e2873fe014db2576fa0fe9b2cec44e5da2a31b2d0c7f620f6b0f60840a0b4b20c03f28a767d04b918ccc8fc42370c2532bf20576d09d772fd02670e454934174d1a8bd2052b0edbfdeed38a8499498a41c65a6b5e1fd1ed11eebb1e8b676e10de1afa77428ecaf5bae40bf783f0e4b40cb53ca0a61de0540e68b98298a51319c7f12df8a54665ff6b5e98ec99d4466450c00df699fd340d7440bcb21827a042f488208b7bb2ac0829aac46fc9ca7daf93d21420a20b7884b83dc4222a25cd1db4c0df2c81df681febd2dfccb278331deffa0eb34f61abb1cc50af3e9a98cc76ded2d7190f0cd9606a266b6d72b39875f0f0c90b64d9123f68f7c1761dc3531a7bd1c4242d34bb296d4d72067abdfa6bf55eb48a92643561ac15ec9d9635b3000e2fea34744c1be592044ecabe84776f87fc69ac80317205419a6572618e20f47d9d243009572083e374368c0a8aabc6b356d24476dfe9a72446f4b22d08bd1e3c8415d600dc3f5ce32a0330e75c712d165524725f7df22c7c5ae1939b8fe565966e28e26ec3208f041ca06e7d193cb4fc93806e8830ad3b124b6d43b1e2316e994da3c116fac25aaf3d213dd5156e46cd5d0482d8f9b6fe0b0cd9f733a0614ae3b211a704151bec7b4adadf2b28e353096ec68b810f5ff77f4869e707e44149fba50c44fd14022370a35b7bcff292abfc596d4c0c4d1b0c9995b715b541eec2ae87a2f0208b7b6dcd15cb3df0c2a1d3dc123fd8fa8511cd915310da6467317a98d366ac30c7802c9f9ca4802fa1ff73302d60435211f5ddf2f9b2c4f1f858e95a02a722cdb6060bac65084e13a24846d5d52cda797b8228b4983934e64c4a618fb27d8f765104ec78652936ca9b65a9cd490af37483006907d92c2bebb3746615ad654a47b8361426f9cfb66de600a94f04953cb3f880edfaddc123d97128760170e4430a8bf84a58ff67058263755a44ba97f985446cccf18c644c04e41079672f00333cd4d5b9e99b4e9452d708c9a7f8849bb289129e916d4d784e42b3bb96f632476b96088ba7f78b61e0b9d81dbb7c5a23ba54e14ccfcbf2ca49cd20787b2fd7f43a7e6cc16e37e60eb740b88c4a8a8714979272bb9529b85342132d971a34a50f44c3a081cbce304adef5439d6845bceb99e7a250356cc24850b8ca91195213fd651d94342e24d67466c1533000e160719c43133c9816533a416aca3cc0af53559077beff520b32742e7eb8c2c71311e9fb0d02236dc03c13ea11591282c8fc04654fb6799395ee70bcb7d0292a1a8fb58a7f529cc8bb29e4133169e8fd8562ea622fa94d5bd3e1bfd045a819a010b331c2ad4e80f399fb8c328c988058db70d4e0bb62ea60ce8251fcad69c6acf3fa31a78f052638a66c90a3c09d568306a6b74f1db6861be2dca50b1421e1b79a0f3f118604fdd3b695441c344065bfb1d83352c0e1812f1abf18544bbd829119cda894ada195c12708de21ff26ab61b91895217ae1fd6d03d45acfcb8e26d8e4580921153c15a3d9c1664d59142706941e1a654fed72f7c0e8c7c82109852feb68e291ba19b3a6224ed77cc41e1cac0e011124857ab6e0b8c1703c588d898573d064c93a859ea2cc492a86f227274452031b066be11a58b2c6e9fd2ff7d5563eeee6f9d120b2624824ec3e269d5e7875ddf53244222f7ad07cded2535789b54db7842030d19436df1a141947db93aa6df76e0a19f3248aec946e3fd6fa217d6dce50564c35a1a4cb70c1c94c31a1898009a0a7698f5d099e20b37e957ff578a316d9fe798b20200132725b5eb72cc1678670c5408e5a73069fdfe0ebe72136736cc35ed2b72639780ff5e606789f622fa821390144584627cae9e5881e6fe059ae176785847215f1a8660c68a1058daacfd1c10c8429595039f13284ab64adb27796259fccca76d246ecfccd6ed3d7e91623e0d3941fb5ad34182ce9d415ddea6513fe5ba09fb75419f005e0ede853e360b9c0a1c7ce01aa8d13d633a955ce63386043ad73f11c170c2b188cbb722cbddf75b2031817a73087245441a4e784492d6c3cc70438e66ca38167ce29563796a7313e48fa3ff87168d8eef320a226af199b47c61839f94aa6c610694b33fe165831721cb65c900f342c7b383fd4a34565ee617037ae4483547279642a9177985695b7c992cb1b45e3781ddbb8703055879e5784b6c249e6255a0362b727b51b6cd1ee446c2032bffd70e73c913cd87fc572e7c087440470292f404643d0ef225de91d892dde0a53c3b872f57144835b5d6d26916c142024784afd64d3856d6136f30923eaeccd00b457e999cb2d960e516b51b16d3806eb0cc5842bc591db8fff717414bd64e83e8250bea75c4967b36c2fd92bfb1026b18fea7ae6aae5a9f899953968d682eb5f49618116aff151232e55a3664f61d95a4b7aa1e9eefe754568fba65b785fa9f7a47a28c44b85fa7b54f52b387fffff1a379b2fbdca6f80cb62157fe9eff175fda5d99bf6997d9598b97bb13754b486e8a4f8d498fb6ef571e5d104cdc7965cef444eed8b4ad316a79c17196b3c9fa7271d90a671dd661085994737d1385550b4360b211a30478a77b68897e083a3b139f2504d25ff1f655510614c4e6d465a695de5ece8c4330d77ec89d71d6349a8c2ddd74d00d8ebb4092d79c38cc5f2c0704c51423f608650dbc7c115af9b7ace8e718f81f9283d9e1c00dc13b9452de8fe290e153bd4900c5819d752c7f8da1efa27d7983f95bcdfbf433ccf55d3719df6875e47cb7d90c6d6d9a2490f0c5747818c8c5a62b9cf70543e824b52378f444066712daf8e1278ab272c6efb08fb7d7ff4d8589d7ea52fb2523092afea96d24fb642f234bcdb22bf5a728987b02ad58e781b5c8bb6b560df8dc71caf792bc08ea6ed186a876aeb2fdda5d200f75caebbc2b40133119959fd20fac1555dccbacfdc05ad69b2865916de46e7018cb7e633bb2a032a8a06d1166872d77c86b73954d1f79ad939e29dfa6cfbf8199fecb263b056301fccf7801f75be6e7ec44b001f370a073a46c3b1a579185e068b2a097def1866324f48ada1a415392a3dba08f7b965b52e87a51b00e5515c1ff50c466d3ff5406c937fa6f33d268e7e6c751219ded92485ace895d61d3d0c186ebdf7e1e926a068d8ec70903bd8fc25016db6e67a9d63754a9e797c187c761d0248626da4f946b3076a50d4672bd69f8c582873165dfbafc1eee9b3d508c0a52cfc9eb30634db788785020b80e7ed580c75064f9cedd6010e39e02105fef8531050bc4763a15e75c32c030ada15b8a14b4b9b374a922b2a79b66f7163d5447e6acffa37999df8115a083e54a4b0af09d06181b3c9b02266fd17427a96c724599caff13d4ea34b4e344b0576b23422a1f35bf081b378c0b1a38d20c1a00b5bac1790f4d6f5e4d5417aead3594dc3224dac1610c0ab0f691353bd733a215c685ddaa6a41a686a3210e8a48ab38c2671a7e47d2e1bf2a961426c7921c7a89755755f6aa671ccc9bb38ad2f2544fbd2ef5040443eb40c8bdf4ca371a649205ec8d44970562b2dc34bec1597adf268da01329c7515a5a9bd2d9a5281c52e461c51dd2a0f11bb8c6c974fe843e57f954a90fa10d13cf129002cfeface06c99a04b99144ebdd4bf73b96e5cf8945e5faea2860875185f7e3a824ee6a4bbdfd938d3b8a392fa5bced4c12d1e5a9249df1dcd710fcfcec34c168feba3764b76ef2113f151bd2f313458335c2e09a10b37a952c30319ca50ca2d7ca8002df4e632be9fb2460ff3472993d2da63d0f3ecf36ea92f3b6e834bab4ee1d10af9ddd1e40b90958219054e681470fbb690dde969399472e97b464c226687b58a6ff942f2fa1563ec63b4994e031ab822b6c81bb279be1c064b29d0e3769c957583ce8ba301a839cb1ade68d0723b5d436fde6e2e27a41f62a3612ed0293e99fbc32ca746a4f46e453cf9099b840f4b3dcfb608551f78b5552dc8c7a2fdf9304033eb4cc012cbd53b11e5c1fdc63ca86b3608c80b4990e2379d7ed5df36e3379c2c6815ae91e7a483044183e9b5eff18e4445b46a300238838d0aabef355ec183ff76c7fedb742226f0c0bf4b345f22a417c112e268e1d6fb19b9cbb75a6d13ef580108afe137d674f76b0752fca7bf9efc2031a297b1f788c9b521fc2896733c01d05659a9f34ef4c638c79ee545ce76b24ea03ad644ca1ab9259b38112578029057d3b966f03e5c5fb432795c6025f254de749ce5503e41b03330597423d8fb79fee7d672f6b7556c119cddf6aadf3a736ac60d6edaaa8d6a828d978a3d27630fd9513b34fd697d8d561c1ee39a7046e353ba2b14654c7dc0b942217345344d5487ebf8ef141e2adaea080bcc58868baab41c966e77ad4ca0623ea22e00c119687932dc471dde84af7e43b06400c091d905ac1af8db92f92e44101f028edb0684dc5263ff3d53884b8e92bd235d051e880a7e8fc97412b18341320bdffb759d124b02191b8df0bdc84e932a699164495f8a4d3fb5ced905ad1ca08b5cea9df995d775730c59dc44a92a4704ed1a37524a071c5d139c7f34fe0e9eb84a8b31452ea145ac6ab82c5e40e20dcbbc0749bddd1bebd44972afc434a3b01945ab4aad4f6a6b3df616559eaa5d124cd4ff1b1a8aafeceab7d9f6bcda397ccca7416267fe56220dae93e11561426846069887624ebb201623bf10dc1466f909ef8d13519f2b45d985375a4c096ad1c8a2a705915e00e62561c8707aded80fd94378d7a40e8803cc0d719805a8dff68da3bd4d07aa0a5e23ebd393c36fcc9446fa5d30e1d9ef4f12ba423042a6a9f41135300b2654cc50427556e9d65ddf8b3d65db2e6c8114be263274c3aac7f43b7e8c03bbe47421995be5200fa031f22ae414cf2b4e99d6d7cb08368a030d70a42c16ec37b1c5ddc150c138523cc224fa08ed9c5cd2221d64b2a2c7a68dc836ab2a1cb6f241e70f64a28f23471d5e4addc6e95be603355957c55203c031af0d7d6488d62116986237874813ad1401c52322cb7e46623f8cfda906253e526b1c0b16077bdac8229cd4cae958aed40e9b7beb03810476186d27fbbbacb8e9f73be0c29242f9a73d941528bff127a839e1ed30e48640cc063e924cd7e80457faa7319f8f3a2710d339d5a3df04fe04ad25d9c112b6f2244dd2626fc8c3783712a43d5b44a60af1b273251c8b27113dd85b713c5df0eaafd4cc84dbebea96e4f2308e147173c4a08fbdf5ba51b447d68f7d6d41476a841b22c71ebd61275a3964ad75c4150868b365a08bae31fa48acaf59044649af449f115400df1414947aaf0552e6896f1b673f0e5db2dcfde7a860aa57922296ccfdd0640eabb1c1d146c35e1ef4e21193257376c2e21d2ee5f27614abcfa6fea5671705d26ef224203f78da8a1edac6297e6b3f51231068660c3ab51e16198e02a38cb90529867e9af334a1f59649fbfbe348bb0611c0826df3a197df280742d8f0ee2c38e359c02da806011d61e4a1a508246df9a079d7b7db0dd4c74a3786145763d48368df5e4323d6894ca5fe1e06910c1171eef5ca954fcb4e9bc2fed495029185d1cfda86ec6794633d41df568c7dfc90e1d87c439368d850a7b74d3bb26042bff3909f0198b460df50ea8b96a14ea2ad8bfbc242c0b205e3ba68b0b35b62b4f44c13290e78850f32a17c60949a61566810b5cb322c192352d94d9eb7fcf395b8d9484c7d6e2e2020d11e14b1ff7b54ec559192975a5691fef489adfae4bff62e619b0b55b6fe635cbf5d82131e98f1e052fb14dfabc4a12625728e9443e6a6887ab3b5c06b7ae4e9183271b2e7bac3c68f4f1cb933e99543f4ad74ef85437a5b661a2b7d5c82183393031c1661b63a718d1ef3b216f461ce408f02603ccc77e590492564f138640a133584942f7d2d20a3b7e7f2f94bee67173dd5e3f9b5978d5a4a6c742bcd9dd2a56d57d26af630ba37128d73d7fba39decbffe94a9d998a988a81cbad609595215f6d5fb23b2cab43e6ae3e438633bbb8b39e09e0a05f071c7d579eff5db2a5ec1b7972893d0c87a35c482da94924f201c401131ee6be54b4c693ad835c3e414b563f3fa16080d71f2cb0a56a533be67bce6c81dd56c55e0b628e7f0e1a02c26c4fd293eea94760d041b0fb162c1c0d5befb878ee43dc7a583729c265b0eeec2467ed0f5122093e44e721aba0b4b2b79c3fe8ed2ad0da8f890b85b76b03fd7b5938c568230735b9a80ec06334af580e0221f09d74775ff335fbf881db434bd0ba5a53ab55dcd9d0a6e6f8f0b538e00fedcd3398fcaf05229e67e2d75de8da03fe15a1b08c55ec32fccfb1e05259e96852280eebbd2e74d2d997103a7a104808de6306879321d3c7cea5a5cab82b5a8ea53da65c769b6acbeb9c60aa290aab6481751d14e56e47e5814c0cd4c2dd78b9667090669595eb298b421154b25325a8a4495b9538538fc4c0d0032208f1e08c19c8a0902630ee14cab9c43012f0cc7ee453f69954cc6a3c56250b31756654d7765eca21cca66ce6f17380d2821fcd4f0e15fded2148da36011394d81fd4896f8d9e923a8e4df2bbbda253e0c59d70ea389ed5a8b7909a5e144baef00699daa1b5958f4f8362b11bcf21e8baf4390dd1d3529f86baa030a8a7d7bac3d44d919c4ddda6b89604eeca56018f003c1435e0b24df985e693d78e19c2977df667cc6b1aecf234bdc142c9f9e35306e603b3de2ce2ecb4334901aa6801bcfc1c5591eb107507533ecc51431d65fecd8c218f0b59bbbd9e44ac3506a7fdd1ce7203e6d956189283cb4a4f73f80c7572f148e6c5376b0202b70229e25d988cfa6a681b6c255273efcb33597f842bca0eb5404a7b66a091cce2592d068614627a2f2b521737a7a8c3b8008ceae9b494f9efa17d957fc3297ffcaf42b7e53620969aa6ea02d631cd3c2c423439ad7194bb3a86b604c69e58ed55da8a4e39434fc404fefa2641dd86965128b5e7b29ef383c2012e3c820268e2c4a7ffbdbc03d734039ef18534bbfdba8d80c4f11683cdf2e69f6469f3321c607c2954e44c6779072caaee60a9364535ae40637bc4136b92d2179ddb1c95fbe84c2d1fedd8e201cd51c07574d0ed042219299326f913f34645159488d45a04b36b04682f55d04a386745edcd15213d7f35be7c26ca6fc447ac3aeaa37b8564267208251c00af5f77d7f91a2a72a51bee3e23497efc387fd6298857178026962cc1c0411eba11d8cf692ac789e6d9a62906afad386cb79ed679e5df52f00f9d7530c051510fee5b8030ad871936c64cde71d41586ba9fc3a4bb6ac8692065e0e4944b89f9d540ff311600a536f53e45e08c87815cbd7b876e0cb4da4a183643dc9e492d1212c0a899debd028c783ac5bd4d110f618788e4d423d4955e5240b5d6547143a675fc1f4132445e0aaf0b07fce3e9324199b645abec9945c310c270ad72d5dbafd63eda583155e0f3d445bd56ba2efbd5112fee19d160f2655ba070c5847d3a191d121d0772df27f37c175a1977dacdd85ed9909779748ec33e1450658633c50ed265cf342f93b7d95dafe95a28452b3bb9a1535869e49e4a6280115288caa8b04d4670675f7fe1f92bd94403c08fbd5d7d2ada20c8398813b3223828b15235638abc28bc992e5094580de36786463b02fb7753580bcc9e62360621c384c93704d70c0622426660002e318d8c9c7be4d772b62d4a10f46504f345d1b189e46c9368d715f31cfb8de231c6a1907f6488dd6e75764d761f51409d2872e875e3539f22b1959a7c37d2a81f42702daf0ea9d4cbb19f50421c3f3c1b526d8eec89ce52d3e645f966ee06e8b986522f0531d6dd5b844ae45e3118d9df0ea1f214d4ce3c554fb7308ff72e33866035ec9a8217ee7c7343be5b25c694f3e9ddce704cd811139fbbe370dee8f32bcf6ac04f4ff37b22ab5b0e35b5aea9e6162214b3b619834f208693dfa0d8cd6dd630a3cb35ba4c0b50d551ac332929448665d04827f732830ea1023852901f2774383c3630c40a1c17690b748c0cf4a5cfb7693a20036c8a47826a9edf3744b107e07d420cc56447198d191072acca2405e5fbca7ff2a7454cc8506596da322a8489b4572f5563822c331880e5db4dfdf17eef23b767cebde091b480567ecaa69d09e6ee0c3c73ee706c97578cb6da3f88724e87767eb52f8d0f13cc526ab7a515d8261a724cf621ab7b4ea0dcd90121861c7c4d22c6563b8961ac724c5c7f7a40ff09e62c0697dc5ba805a6f85706a752896645d3bb8c0457cf160a773505743eceffbbcc4c1701bff752fbe933ea82dfbf498184b38f1456cd91e3f42e6116a18d00b414a7b4742b6e33edf48c6398c626202d4594fb2fbeedb0be113a22c128570e1dc732f4131b7e99887be2068559c8efb4a9af38da85a8db1540881a21d0fdd2bea0e26226f8a94defeb92ea61b2289503fd38715a3354be288e2103efd0658681a2bd6f1abcb8c0156c39d25a1ba96ae86944474418d8bffe9b33c1a89adb32ea009ab2e5af3f848680a87bc5fe38195bff8ecab903347505773964651de7d9a51d0035d270c50a8810695fc1a5379d0165bd68dbe0ce579aad864585774b0675172e805ee4535d2071205d609573df91558f6b2e7d07c0a60a2911a43efae6e4bfb5000c3e1316f09b7e300c3089668f0f2f8abd7533cee57ec64eddd807972f87604f3c205a0e031db9de6a124be1bcd3461259b6b8da41247c87ab73a70a7f6927ef2cd738647d3a9f81c983caa4a4fb376234f60a8d098bd25e843141adaadf7450b2a346a60da445b8ea8b782c0de0ec7ee0e774854dba29330d9181a0809b765f946dafd344f0c7f591bd37ffd1d636858821092841f8a57c21a0316b2e0062f30868670f25362686767fcf3985868bc7ed0e5e24a89488c2a495de7b190849cd832fc9241c4222a398e7d00e496f41cfc83893be7ba276eef46ec2fbb86fb7174f0e62909e2f6c48fde9a521f47190be2ec1c91bc09eff088955f4d7ea05e5439932bfa8fb85c46ca9f861ef420717f07a7038c0bd26df691f5ac564471556af3b3912b05487484f086592893358998e0cba259db0a7de0bd048ac1d09b25a88dd6f216e5e7fa5504ede726911a0a8a6def3c4e8b31b3e0666ea5636b8b6c9200e974aaf36610942241f635277b8a50a2ec854cb285d98652971b1439f8fd7ff6c9f1d5ff6ffe17f500c1d44fe5e13c62a45013c7330de333559985baac0525cb96f7e93a464243b42274f4d92298a5b08357def17e445c89cb1802031fa4b8aa66117ed6f505d5498c1fc8b20577c96768ca732b3a976fb86bd7075de85444d8c72d0ced2a04fa2580f8c0290418ff3090c26cf1130b53f083956d12213b472e892aca5ce29617861637c74e192f8c05983729c61f5bf115eb990475fe89c629fb59953d836a1cba2f086489d619a2b67945bd5466bf26ac87cf50d71361633efb2c7eaf2c9070544d7ad64c1d376423f45f5d3eab0df48b0c14d09bb9589ba29a2ca00069bb91fcb93f8d389755cf8d69313e583eb3891eb3fe5df45b60e84876fc86bd6ba62ef03a8e83b0a7a116f4689ad217edb901247d68141d1d6784a92cc76482b43b94b4a06736f5b404d864c0b18cc610b343ddee0733b4c08aec432c947150157155697206e90044de9a024910fb2005753cea7d096c69e41a5ae9e1f608715e263a52fafe8b148018e0708763e7319d86150f326a7dcfdcb94374b180a337864e2eebb400c0daa07f9547b2fd729abb465f9b01f655bb96535041ba142852fa78e5b8d3f95242aadc3f047c02a8f139ae1488bb9267a5cd01c03547309628e6f43650af34138ccf3a79b937618ca71a365bdaff4801148bd1f3a226e76915d0fc55d28abbdbed32bacb3c846a85e0aff43be98b4d77b33d6bd9613616d53ed45cb8b0a095b613c30434fab03ee6356f1a22081c9d7ba00ffe79e4d06d4b12470514d0c086d3bf0344f1a36bb72a4c4f7ce3d567ab6f2801406caa2dfb7f90e04100552d91bb1efcadc7038cfa750aaa4df2af972845ae750472c01eb71a32c82f5308f6cc7a1ab41523a3f50133579f941b761620c14afbf0163df16ef7a0a733660027d66d2c2fa3b079c0d610621f99ddae9d1fe1c91169faf9cd511d42b88e1732627066128e84187845656d5011e4a358f06d48be741016e0facde6f2e80e95d24564b716588f21e58a340c934b27be442479d70d7ad1d082a2f4d00724561028b634dcdfc5f195e2c190aacb61a3900d1bfb53fefbd8b2a11530bd28ae838a42cca09d645e941fdfd64cc9e2c170ed3e12308855bee598ebdc411233363201fde284631c221984572d3bc689894eae4024ac19da97c303e744114ab66e46b8b6766d8d3e22a46d5b12b9a79bb1ad1e144b1d9bf71fed9b448ecbcab7a5722e08032f550eacba884af3339121ff0dfec0f08e74eeff251ba2accff1e2397f09065c9d52cada3a4ffe9a75a6985115a304d47b21307795428cb8bac3cea5e8d45bcb98cbdda4818d17f6d8c90dae554e6ed38f5464287965aaff2b309611ae39b5867d53edcd30d39a762bcffa59e6909e3f42e78f5a1cae3ad010c2af504d2bc59c90ed8cf7b30a6395aeac92572ffd279ae1d92ec8e55dd4a68c461f1d926b20d354369283c8e170d09898286d464fc76191570a0f85ba43a9db64072a9e085691acf8fee165889d33154fed87fc9fb1ec3e5bf37c4714804c704b3264003b865ad1bf58a0656048d7e679b33e7cb4c57704e2f87d96f9526f0418bb24a9519dc522c1af940daeeb9f9575985849077f33556730f18e601b66414ea6c6985179423198f4ed01b5be4a50195f09e20e329b1ab817540a019b371b5f7fb060d17dc0055e687714593825425650c041dc351511e37b0c3a377243a8d121d09db5491c0fa0f1ceacee61e4451bba722396252ff310c66bd54f1a4326e316799b9b8a5bb9d76137096bc10b36bbee8a62144531bd769b7f3b81ad67de498f1e31a7e9a7a2c1d37e948b5572e8c109b1e2f6143482d07bb60cdda2aea3500dbd3aa40d2640bb0f97e094e1c164653b02760b0c6485a56c845c98a81a73d7efba5b5d2c6498ea97b3693527f8a3e33ecdb55324a9034f95e4917e8b4d2bba5c85494edb0bc6fdf34382ecc86a4c5d4aee8d1d390418f0a84a7203b2b018f10cbaf1ab47bed374184819b880f16a84689ee08fee0e081efc8dd44a1b7f7245c2d25bfe9639f91475b5421b39517f72a41557e7914b661692a3304afff1161ca735164eca72c22748eadd2023bda93685e4dd954fe96c968d1a3e48e019e44c8aedbea7133be7b184081dd3299af35f472ecebf4154116ac2d3a241bbbebb04ab4d71d1e0c96bbd4a06817392deb76a2e702cca2f3f222b8015388964b988e63dec3879ad67b01b4cc7b7e7e430c9ac8628eb0d1d609a93be69b967035161068e33723c55df6d974631ddaffb806f374de9d18dfba03ad9a7e479d194f679fa12d5e327e22ca71f02e9e18e382cd5557f9ff363dae8ffde1c09a834803d655234a225e16ebb5b46a3ea5c650c78c2f8bff30e6210c1ce91b6a9a6bf1d779b1d5aa95e709c2bc0c84a783571136b7b465fc9e0bf1ffc88a27e40f35cdeb0bd3320e13c58814174d913763d3f1fc0c9539821e130e8e3190fd614499eab795e03af46aa969bc8c9327049f0f14814c7435c0332421447e8d9126fa63ebbb4636d20423a8c5c2b8c94c2b1ff3f202c8ae68dd18c3e7f58aa42f1dcb2854157bcc4d2b639a950550fecfd75195a343d6aa3351c695df3753628225da46074e5c581239c230d09c1665015cac65c63aec61c86070add6622e82e0fa9c41b74c4824a75608e0b5fd3bd1898763899e8878224800a97c0151a1459a9d11ad8d8405542f4baa151d1d5670aacb20634bdd27a2db4ac96520667e356180a8d138d6826b7145063f45ecc741d828e8c5247e88c588b0df1b24a51ba2f0da5aa2b7d14c6e7cdf6e171fb5c53d82c9564eb135d278976c8d9afad5d92fe01e493f5833cd4b7f85d57cac16ebb31e23988a4ad358a7959ddd5f7a6d84a41ded0a247a0a4360effd77a1e3714bc4c64c94daa6bc4db6f88d608f59bc2d312580e6b390b2b78c71f1c5c7f529afb999b60741091a1282af4b091dc2a2759d6689b8c9263ea5e29bb986bf430bf720c00e4285cfbc57a2695bec4b675c86f7b22a0b87ce9bec3100b907758f44ba0c1162926d19782f393aa95518ae781f17f06617aa4fbaad710124d1f50ee847e978362def2ac339505fd0034a484062899a499d726fe38aeab0f4f98fc10049aaf299ef8aa88d0294ec4fc27df94d43f2aebefed2a20b9b2f246cb57409e97c1828139de4c3c90f92bcff8f6f2d16aa454102b311f889682547b55863c75b12277ae5cbf232c085b5b3543272dd3ae2a9e590256cf92ad4a14253842a265328a9e943804ea3a9851e00b94023d8086956f07b1db35efd187a5359acd940e2a34d2530e4dd39c6b73029c22def05b38508173b7bb3748542e91dc083c87825378e594325142942875091774ece691608c70dd89be55c4b69509e310334d38a8043ae26942b017b5a258c17be01763e90a848ac47c0a9abad890978c7f2a441fa30d51f795c370eb23a6f2be9499c38480eb1fbbc19e4ff59402354e2b77a552ba21dbef0fe56cf486a59cf351d2b47cf1c8717b439861eec22af05aba902df4996400852904c15549bb3d0c8366be6a3cd524d9981e132a9a42278656c3daff375a2ee045af3477af5521315b688611044a1c703bd0871af8c3cc10885e851a046f0151a50c415f553e0288d4121cfb840e4d2de6a1f849352010fdef91eb364e74be78cd8998322f07b54e9c8a0d4ae78304b7f83738dae4a6beb8ff134016bb5f85d802b45122e4cb3b4e657a0b944d16dd908a9af7f76d7894b861e91a25940901d809397b431c26cdaea90f625253f4a13f730e3a2f35c2749474181e66a56fd6227b1ae931bc8d9a4147f9004de831f6e2c75d88b731dc5050c50461b33276ae56ca202e41c00bd29f913b0770a5be90dea1116b0d3e3f7d01f4593d66f114ec51998f3b84892c2655915b5e87b60e61fe1dfc33592fbcfb0f4402ba36be5a32a21eb34c97c53574e9e1a6588d4c28f5f507d574dbddb05be9318b7eb8e8a590646addc2802bb6b91e6df4648f15169cbf98ee57e3a17245c407cf2ffa33c14cf006dc5ec9afe343dea7bbf50c3db047056a9b37eec6cd1b02364707b679591033010b006a547b64750cbd529f63dbdc1288e6869dcc26da66e1c8ce49930f9e9e165095c0d1a088fbe59b74516611c5ba66381de2eb9ae29632c9ff81d5c41ab19838bce6b1da513d6bbeb0f0350cafc154ab86e785ea1f07b22f842fda91379eeb4f5e90763e0c1a0e4be23081256965f2d7d745fe66198db4536bcb2ba8019454453e409a1c40e70174e053d36a3510ce479760fbd4dd046498ae998d6e6587af26535d420bd96882e270d3acfaeff8b9d2f1d430918dcdeb252985bc3f314c554c64463ad992f68de20ab0b48b67770484039a87110fb4b9c6d1926a88212caf281d00edf6c16239e55e675ffaf0db4e536012224387a675195eb1291919f06dd7f620b8b6f3b52881d1375f2df1538c4a7d32d4759895a2f4754c6d10e4c581bfdbd5b7148e34da03f0c1fdc32c379fd1a361314e37925249210a5b27af8940bf1ed39ae84b380d39e432359487a9e43edc9d566e3cf8896f51b037badab19a1ebcd4d29440ac64378601fe7c6879d23436c0dfdf5fc07ba0ebc2a2e237da33dd33217750a2827a25d59ba95e6f558b2455ccfbbfea1671b1db145c9eeffca3c9bf1158deb9f9d8e91bb8cc0cef6ebecbfdf958128250f3d13b7dc4e50cd330b1c95499c6a6b71a6ba716e45c032589ed61ae099c8464a2a50ca695fe984cb0eaf294c8e2b96691e1b0d96d595387d7be1547a0c571da7b1172cf3a75839856b262640ec73974a5d99a5488ede4f1880d641a07acbc5613cb5d783aaffe86716a4cf0fb632e432416f7896470e4f6f87f3633e3b4bbf6bfaa8f44054d966fae13ada011d710912a2224561d7ee4d336ba082bf0e69bea0d305fa15912fd2a4ed7cf27292f17423149af4d000b43bfead2246e4246493c85d6b0032112ac16a652de04dbae02c1a54e3ab58a4b9428e5caf742ef770123f1476ac0e785c345eba3f8d17eacef4c54dd17767be09d34d37898f6ee9809ddc07c4ba24fe51a86b9a7690723403fcb00ac7979a72e1c48112dca911dbe6cdd3e73b640481169d1077557e8d79033af1dc2f70b791f9a115f15a49102bc95ae01048b3be07c189e038d57274f05f44dd79aebeaf1d2324c54dbddb75c7f0f8190d9b6ed5ac56d1dbd38bc38118f9ec4e77d4615d58c12acbcaf50f19e4df0f904669b2df509b4fe2a31a6135dee7909708b9f3aa2d49ef0f61873be29c0f2122ee1476f32ac3ab6e19c4b6976ef3e1fac3d7df84f9c6d3720d0364338c1a778d9c2d2c879a515a5cfaa91470805148a28680d912facd7facf193a704d6cd8e89644f68f121021da47a73e20df14dbbc07059a43cca642338051b429e8b59d23eeb59a22ae346e7306beaac18aa97c8e0ec2933450fc9fd82345b91368a5a75fff06ce5c6cf269402c53c99dcd9bf60dfa57c14435d719c7fd3ab721c80697225e22c47d5ecdf0f6c2bb13d2b03856484a876f240d0ff01ad984670e54b4555b43491894336f4d53615912bfc0559935f5385781b47395a31cf05f36b3e89b615f7b8096acb415ecba89bf3cda2f2f16e66bd53f7b3af73cf435872cb166b4373a6cf0f08cfe31995d5ca5fe5e367905df533834a36191676516e8b5fb43330c1cf0a08ea9006e67d17a6391ab6c084756cc04a9acaa5cbdad9188e68da673279569208394669159cb76b1f34d435dfbab3f18f901cb3806e7cc645005207915f4bdab12189943a6332f26374f8525aaba4b64aef2f3e4cf0d77608c129aa8209ff34a1e2fb68415be3c2b82dfb774134932d796e9093698fe6374fe567e2302f29629598a0897e955726427f52c8605ec80f8a63493792b5ce65814904395ae63d04a8901c5197be45de6158622338b419561ce8f4a135d6ee296198315517de0649ebc3d4044d9f88c9d34fc509a8e15ace0f6ca2089f746f942c89e9624c77f42152e8523db8b482d6fc8d9929ce7f5e4e68ab6ad1ec6d3c4722b9bd296d43baa8fd91691d1c0803e3ebb18e3e4af0c7aab568a652b21b8fd5309a59036140436d5a4c73269d374aed2c2352fb2120fd3413354c706f49e23aa47c755ff36b8974af6aadad20f229c889d2e55b367f1951511aaedd76c585ac7b660bc6f113528078b057fb0723c0328534388c98c70f3676126573f386a19afdc35deb21910c567cd182d4beacf0c8503371a74ba9b4ab33c21b0c6132eea1c4c505312661555e97f630ac1b6103b857d9de70ba38185af39e76c73baffb22018790ce0a440c599bf8b982cd165800a7182d6b27f2e91de7a02b24d2fcb63c43b273ff41a8abb55c67d6816b230f2635e14d952ea84568fc9d5bb47f4951416db3d02b57344fdf1753ee629c413c34a66ffbb2e1bdc7cab0bff167eadd912c4c133f0db9410c4254fc422818a2f828b4d9884f654bf0b241bb4dd439b110e4e8c0e2a075152ec887a3a472a5d4b87797f3ee666b4d77d31ff6bd2aeec7a6e81df581952a56365085fce0288c9b9852bf167f7f668e60fe36d6e0f53a44824b304331d9380958da38f1c25161f0136faa9fe09561443001f6c76be6de9e28504926958cba2418b063457506b516c910794a1530674b718007a9219043cb9d8cd222804cf9ebefe1d0070ff7a05acd435d6078ca510b1b09941dfd1de267b8bfc7d8bab2ccb528eb6d864d3570b3804d2c6501290776512dff1ac5e78f843d6deb472e845b98458caf43a58e4a01bebc8a31822a519f24d5bf48acbc559e041198f1985082205a9ba23b46a3d833a1b82cb26c9c3e0e6ed35dd9daef704f9e21e00b5d5fa9822bd0252c636ce30bd368ada58d33facf8521e2c41c3b621864f55837e037856d9d0553db643863a180a710bb27095f82e92f464d351598948d76e2af268ace5ec194a7f5dda82479dd5cf39a764e372536aac96cd24997b526fe62c26887f456e9ef3672f8060ad4fefa69a250c5ab452520492169001c9b10a4082ff6deb9a8b60a965111e913b4371bac49daec591446b9af1023e0c299d96ee84d8f7c7e865f2e5ed0d7169f2fa49e15f158d13af616214c527e55c6c8b15c3a7a7692ad2fe5f6fe3f546b29389de3da31b5db06a8ac868389aae1d20c63dcd564cf33bb0fb9b9d8e700ea9a94b59e7c0897f3451b14e3c7f870102110fd02acb07947c2ed38109848128acf085b0f98331160f974896113310d4f02503615592f15528f165dff16a8f4b705e6664abc6b9cf6618d0e3ab7d5f00745b717ebe30085c2eeea6f5ee1500e8b3b8bec03cebc5815a1ec3701bae34f805395dd60ffeda0d22c433117b64ffe24d97688f188eeecabdc2ba10fafdc3fca56d69d0e16d95371bdba22a208906b361bdeb333813d6ecbcbc107744cece1cb29ca8fb51ca38bbb267e247b40fbc387d2e64a1ac6b37a0965dc441f26a6415581541e97867a38a581fe7c58bb02b32063dfcac5922439220f95937b60edd46d9dc393faeccaf0ba9cd4a2994a1e41b7e0894bbe0fe657c88916e60e87664a7dea4276302e448b8381bd09a9cc7f8294d8c872e9a7c43c32a438d311c9b8df729db41b6cab1a5b76aa3c6d5bab384df71ee0ce7d38db19496896e50c8b33d288c67125cab9284d11683d5cec0d2297bd2a1bc92d2ec3541093003004daa0f72f38b1a8c47276d2b88e0fda5f5706b1af0c6f93ed8c92b5c8d69979613a6cbba17ef335e0db6e4053e8932d3538a1d245c1af2264672f4c2a5441851ecf4cea07bbbe2d6d955f40aa0e1d164d88562b146eb09a3f3ebebd53718b2d030ae8a07acff115b21b68fce8308ad0c155a8c701951020975a38e8deda630ce13e231982b2aebbf62b8108bf7823f36119fb36757ba358e13302152e3a5360451da0155c9fff84c0345fe004284df2b669001856eac0865c82ce6d27c067808ade1e2606542ccb15f0a17c4faca777f45b3ed4718176f7e1786ec4d3d74629bdfdc3e12b390416ee9b85c24c80ed84b09ec3bcfe15e1b62e735a4c622fd0914919cefd22aa53f404b88b655735cbcbe6444717d43c2199b14222e1736169a227906c19b7e382dfb11d2eaec292b3360c098c63bda8436368f79598c1da17b8cb5a4b8cd9a91d22d8b4cfc87d69f76b33d10532395bb280a352e07381230378565d7161b23870853537a1158dc3e85d6da56dadb0b52d3199e59ab8089bed941b2cd06174406649a6a607b477855b22f70832205f3074b0e7eb70e61ac1e9ee4c6eca2fc3a020dc0ad215ed1eb7ebafaaba61df20e3cc10df39d8edf4f03814af84b07f2102ea0cfd54d8f2d618d5529ebd05ee7f3ecadc47f015feb0d44765af2a8848568e74060f9d51bbc663e4efb089f2d743a773d1e6df84af24534fcba89ae8f10750ea710f43bff882cf11520350438b8f030ec0246951d4c6b7206df5d5203c8506f0919246c92a92b7aee0bdde4c859840f54ae530cf73f7abf042c99b913fd8b084e0d02f34507fe327ef9d124b338259ab3a09429c8b97179656c927d972940be11c2160883905b4127978be1679b8b6eb4ac07168b5f3da129d077c6f930883ca7b9b6e8d7c80113644008691b458c884625d20663e8665a31de85369adb2ebdcd1556cb1e963c8e767445dedad4a5d78d9ecd7430735a6a6495489421a11ed94f713644ee6d4f4ee76585c906932600c28de680521eff20713cdc703a5b28d40d876b8053b8b92cba96fe8371133cca03af66f9e5618d9ea6ec5cd08c5518eeabb12aec65fd40fbb3b1a7b87270db43fe4ff8309a492408cbbbf6923a597d92739b51292feed5cd66fab2a6c44da38e8c707b972ae6b6744faff3e3e976f54d35c3a31f9d7d2cf045844355132711af4b0da892416c82b8314d3b57871413470e8efb6da99094c65e59b20849b253ec845c92110619f9a6cfa1ccd510a3a750fbed6a2c64f3d7ff63d99496b4e0d3105d84d3cfa9464c66d5d045c8b46bc8eb2b816d459d97a18564124f8aabfe5567d83f919a17971fb7c296d0edcd0618822b1902fbcb628bae0e3d5ef6c912c47ad1de134c88b894413f239a09b7b60d46cfe220c45b158d55ae66628d3a28df4c11c006c9898d405fb4bea36b3d0c2c0a3d9b5a2d40a721fcef176b29dc5ac869843959f168ba7d4709f97e3442e85485736368002cb6c7ad18f297e61bd3a492cc22adc59016bdfef687eb39120dd511db1a1cb8ff66df52f71c695b08a8c7f69d2b95d582937d1869aed7fda4bd33249206dafe150e00f594232e7d44f125500efad69a7892f6cf6ff00e6c400353630fb5b04531b92ade1f15f019efdae71f850a92a96becb142458b005d8d18af359bfd35f4524f2c336e28015df4e8cb78b28b5a1080c3d1b629635bc4dd0c7d446d6a551a50ab58ee647e59a8658f9b9bc222dd2707b394b1b69ab7cb586d54c92253a3d73c7551d88441d8e359975c31378418fef7d31ecf4200584944ff2324e7fc68ed800606bfd6778c043125d2e3af6011092da4c91948ee0267807bd9c619111d23f8b5a7b3e67b355b759783ecc29f5536cd0d747b91087763de961a9a151582f7a83dad5de5f244b0f5fd0f5a062efd70b6c22efeac744fd3a90ba15c856cf03c8dcc17007ba15ad4fba7a43651041f141d58e4fa1ed3b84aadfbf18d8f080161f15c9efcdc35b03222a5ae26bc23a889254b209e9752e47cb9a0479bb694e4f1a9214dac04e80ac112d12bbd10d9bc3bab61a5e88775342153e9273b84462b1849a2246adcf231b927a3450d6a3dad8aff40ef59ea467a716e26f3ff80fc53731237666d3439105d37c4a53c57cd84aadc90c3dc5504b683f6fbe8cc3906571b4c2b952a455d564c19af8d265d42bf906b9d46fc1729613160234bbc50465681c92793266b57ea3d131b0d05bd130bb1781782add9990e08f758c19939f4b3cf250e1736e59b2b07dd2af953dbcf2aff26db22313439b8a11653e235e06eb1becf72d3d16a328620d8a339aefb929f2fb4c93bd7d077f6a23daaf8e2f621a42fab2a29073ce05df22e29f5c84afd0c025d3020d27a198a112884071cebdcfc2d8318fadbdad4983745873a557b0321bcb7383901ef6e078d71efad65a1231d1c08129079f2d97029f8050dda7ceb689c663ed2201cafe0b46a9010d630996fcd2ae6b56b407a1c615b2fd2529a40609bc0aa048df2320b44e13f552aa64991c3090d8f8d2b71b5df7c8a8925598903d5af72283cfaa2d3efad6a3e2c5dd1ea289293189a509e3940a60ee8de0e0f43400eef90037539e0ce65cd7e50e386b053fa8db9db67c79939de77f6ce40202c56444ca16f0f4f97dc22403fa7e51c4d76a06735a4da167084125e3aa585451b2b2e20590001606352f8d10be680998f51f28299078473ef399233e5f3bea9f32502891f892977eaab311b3edb016200f774a39246bb45e8e9623678024e7c0e2a569ef1b65ed66f3fb685c33e1d781b5adf60690c890b3f8e48f470e063238cfe4e3ca932b7a83f906ea1ef1cb94ecc75e96d3f906e5adf65e92f0a9110855a0ea8e8c76f6d8082b73b89fc841ff4fb84c4ffdba3033d84a841fb80892ad661ff1c0f2d1fe9ef6043dc9c16a4721128c01fe78c26ab0d672641eaaacb24379ca94cfa0a02b72a2b407b4068822942e7b3c34f3a55b033b1bd118c9f98a39c11516a455f7487466b8663b5f37e3814c3934297f00ff43f620b837b4a98d03dd9e90cf0b35d944ae887d259c81af86fd0313186daa59859d4afe9a8d0ac7b57e3a49325ec7f6d9fad7ca555066b8e41579ac0baeb139255aec8c3b9c79e933dca824729bb83210eaab9420843cee1650320c7542290c2f0931098ae86ca864c002f8cb2bfc60c721fc6356455b6aa9f0b038519088ed4cc158f61133c0e3c9a31636c188806807098e21b4526e68e7e6f7570b9731eac1386829332b2e598e58b2d2445460702d7f21463ac026c3ddef92e0d7c236322eda9ea015a2fb06e16f4d1baa828a68bc9c7e6e873638ffc442084036320cd1c42a4806f94b024ff4eb67dff0acfed085cbdbe3f748b43eae9c4a1d8bc4d9ba7bf85b71c8bd169ed002a3466cff33f430792fc05d84702bf26df77c6a26bc9cb6e58b4de1c1c071c4850d837c173dbda0e2c62682d5062406cbe18ac397243c76da40dce2e036ffbfb83b30302b68b11209872dc75eac7c7d950cc3421bd7abb9e8b19032f0979aa889a703f52cd1c7908171ec50cb51b81dff3a4e8546daadc1c2229e823172de89d80f119f211d33e6499d1319d4207fd164e9abb4da04adb0160848d223a93359722d1f4acd8664965386c3e0a8e1349ebdfd5959ae25164d3bf15caf50bd11a93e090f80b54adfafc2036dd056c883160bff0b8023aca6e8e165c49b0aefd36086e97ef469c286ee45b11b104af5d1db4190392e557b7575073c672b97fc7400881d0940431a10e164e00a8a1d5fe1b41e0e278e9d436e7f5146a047871c0d34c6c3078a6c8f2a69f36857e1873095a4fac6aadb12685fb9fc0ef79cd819722f19895465434f3b401163467db1e0b6dddf4d06cd5e79cf4ca4d9409967b8e64ab12212d29fa5a1f88d623928cc98d28e6062856f643e732a94c1afd9289cd5f6ec5953e9230882f06488412e40479125f396826a13fdb01c38acc580e5e929328414d13222f3af2e3e34c4c51265411573849a865e88eb1af386a343b3fa8d5384ee38b4013beb462822108d87008bbd5d75384456411db3fe410ea92162d3cc11f46d5381c56b788352af83a5160c27b7b106542246e11a26432602714d1fe01f191bb2f54ae1309582f2481791077a246e94165cc733eea24b4e1de4ed412b6a3a625bdaf0fc49daf90b5ca18b90c405da020868e99b64cffd983ee11c0a7cac4853778b69e21a73341e32610b5b56221a0e12c3be4b0c7926aada337321980e86d13fb33a992a1c4bc89e38b24892b3f1b019b358cafca4d2374ff8130cc6cc6a68aac7b3e1b06266e80265c4513cad126564f4c782e3af7d44064d6d75035bd5e361480fcf7a63d0203e9197736fc431c27cc61ebfacc20a251f4f95f33dfe64e889b6bb789bee8e5f30909de52aa2e88bd6028e5b84add62b7e0f82627e556c6a6f8e2b8408d5430e4681d9cfdf79402a0feaaf720c074268b7c384a03b4fabbdb1afd3a1390aae3f37e88214c25a5bbede631581365f6c6b5802591e84449f05cb5b5ab7f0df4494ee4e7fc6b70ce5ae59d09b38c30d07159683515f5817e7fc12d68a4c8186b7e3fb5a6e61d6b2183523d7a1d08f9105d6fbac34dd403f50a5845ed0c3b343469c0ab23c00f80a0f458d51b67333afca2b0efada0eadcf77d3f26889b61d0fe514626a507e741643198854fd6560054082238dd1d17b029cc0b55d50a50cd585b7dac431785503207873db0ba66cdc01dc4ea3dab5acaaf0625ca8d41417e5470eceb397fa3d17a506db22700ec07eb0da3157e01f092c38127cead19a2bf0937f6a6df241c74e01e64e21f360550403a5da87515d46b9e4bec51a0ac8b7335fc9b45c6dbcf90eea6970ccf5f8054a10ab76f9b88f54087e7967cdfd29e0c85f30068549d00b8175c8acd6145731ab7808b571fa80e40eff0ca1d20772289ae4804764b2ed04159a6e46fd34edf28cbb60af8a346a0b3bcc826a2621fc5a60e5e8eb57615b1b204178dfc60197685d997da6a1e80d3fd6d768934bcd7f464669e585938ca68d64dea0e2b6be8ff2699738631aaa802c272e5f652321cd9e287cbd86a96179526876659a1a3ec714692c7d553969d8585cc2671fc5c6a1233f142f50c5bbda6704b51b53bb9c91c61aec6bc6f2609803ea48a169c4d7b711e89b415f3c2cffaed0c55e660732567c238c677406263bacd47722f7792544cdb95b1b977b34f9715e60162d0d87fc3bcf67df51a7c1264d593bc7cd62eff9b4a1856a5a7976b1571397574185f33abefca9ed6ac03537fadb5f2d74d7414e29a0e01ec52058bd7964ebd642ece8e38d71a539097c020ccea2b4464341a12fb250143e0a638028651e0af30f43b4d56668184cae3bcb2fe7c7f4f8b262c067b98418ffbee00ec3a8fb0f58a3a8955e29656c7ef720998db9d2fa09b3de71e944a6f32b3330f83259bc1f3d746147a5bfa19a638e95e81844fb09bcca391fe385936c360b8030a807a1e9697f9245a3ad76dad85c10ff091fd1a950d5f705f9b708f6b7c4086c8ca096c832ec94c03616d6e5f2a029103165f37333507fa9b5ff829efd2b9e62fb826fae7d5d71e967659fca3e7f691d570a2a0052243452fdd0ce097ed2dc83fd553eef79b67aa19b8bccd908787a0ad69f4049028cd208329b169d4b48f4b098879265b3a672297a5b13e6e7cac89b1e5986f1f831b693b7aa033fcc1ce59066890059d2af5ecd11b4317c895c6d9ce752176cf6413a4e2903912ae044418a309971e809e6c09439354da8a29121769f64f9c7384b55ca4c6bc691c3e7093e1cc1623a43e2a46dd172f95fee511db2d2fc84f7e3572826d5187cb7121a42df2f142e8f07d76f7b7a17f2297990f7701542374e00ef67aeea3294d0293adb1ad83a898de1ddc86d2c163c02f571b6d580d052161070764609bca58a65ba76386a9c769a18e4dd0092bfd375149f785b4f196a4b36161eeb85d5aec93a204479b072c93e436e4bba3195f694d4141fd10a2ded3f0b5dc1127e4738b193161da1f02bc4db056cc0268c420d67289a62f68e882c1478706b748e130465247aa0b359fd055e61e5ab5fe8b24d5fc1b457ae803c890e778cc0e8e2eddd2954298480cda781e82d1e54fcb15cf5b6887f36ec4bb39773258c75b0b4da199c2f0dbea3ca99a39458e80f832a8d74b886e4ad25fa5f61f8ada19df7786677593b7ddd6b19c40e44063c19030253abe9ca6535407f569c08557abd1350c5137db3f1c7c38394f49065f317c12a073b6e9bcc5b484d8856bec08a4ddc7b005ce3ae1c4f78b000c68aeeb1d18af7cdefa031bf7faf5050d4691350e8430c9003195b165713fcc8fda707d696eab22cb044036ff0004f9fe18bd2ba0f2a1679d60a49ca5a1b01e37e248654dc4df0b2286e0c424b90457dd256205c296b5243c10686b506c6c456c5df704844ed1bfdbfa45e6da646a04c0624a41180c25d8b5309ebd39b03e48d1af3a7d19318e30a1486f2663ec0af6ce7280c3b26685188285bb52dd243e3a57249d849010e1aa109a1e0f401a03cf679f52d5051e908ac08ff48c6927180ba09d47bb8df74271e1a6c5c4476006afb0b0da1838adf203f696f4e47ceea324e5bcaa35fb4eaad8bf03135064ca38f7debf6ead8768dc442e7d188040fa316b380d4ac204f15bb8217e2b1cb73e9bff5958aed53b3cb7eeec0287a708c08028070c1c87ef6ad544d66fed881da23d04103e35bb21c6f12922b0a0ccf680408e9458681ac2fdf7b8ba7e7c8868236bd6558e01786a46fc153133af0c34b548e25032a8e3a62d34b3777879002b1d0ae05a3e41b24444e788ab82b3700be9c542da8cb31091f75b389025903807b435958ebc102a48bcc741ae972098044b4bb8e24cc889cf9b1e760a2337bbd59181431bd1727f9259cf86b39ec5ea062177211b7bc94ed3a67e53653272525aa8fae66d1c2dd39c4c9ffd2d5e4345d00378276e80c3a5daa4d538467a9df95324a669b9a09899f55ad30cfdf1106c2ed4f1d02c9253c290f2461ecc9e87682b4951529172317313a4784151200ba4626a8d43ea3e3c8f08422b88d0707e70e146ebada575ea958edeb5728786d62a4e6032196910c869be28327654230bb71efe0af79709e50b1d2067d8cad42de94d108da355e2534a63461c8a9c61604421574f35d1ca314c86064ecf46515c8d6865370cd566117abdbc915a527ffc0491c2f6c176a231873a80cac9100fee0180b06030a960535810545f4685c15f0f4bcb3800d55500e490e608fd517e54f1a41f893048460f7d548f483f0427b6fffcb871bd58f083b602b7a7494226cea5a1ab354368c4897bcac7b88f58be38497c82db9b1d93713841e7aa8e73dde1fee7f9c26a7c933ce7a2eb27b28cc8545904029796c87174abbfb141ad6a3bdcace19a1c9deb3d99152bbf40cc7870a19cb9d6bfb46189cdf6bfe3d2e1a58c1f52a81e5e9c81f63f0dd02b935a77640e9df09088db85d54d10780d89a60e2339d44a5bbb09f28bb60225b517462c7a311c9d031ec28b0158ecb7ef26f900b47e2dc6a231845be00af0e6924211a9bb59cb52ba23a8e287de1dbda08b0512cb426c49d2a7d841f47c83df20f24516672cfdd6b92c1d52a5f138850378b354dc0609fed98f2e0457d8619006cef528952431dce4fd5be8a0b7db27c12a3aa302382cc390ab9665a898b9398acff823e09fb4f0eba4d0fae1af51018b15ae90e9e6295a52eedac22b6d9ce0ada48d3ca159f10ab590e2a3f442cbfe54dc3950788d3d0902e230a52611bb2cdbc70d927ebfabad9fc348e8afc3c84384b24404bc042f74690b16b992e71d667153cac471c72ceb1a76be90de09934e083639b584065cfc024af1ad615c40d619a7032ee93f588bc2b951c6019761daa4c6e0369ba7ad6100fde2a2001070906be43076a3b6bee9e30d1ab047d7e6959f273ad2d0bdfafa4534e64ba91bc3b29933d00b1d665bd877dc80dee28bffd2dade7b6f29a59429c9143806f705fe0591e40348882837becf1037c86e5419818120840d4c77b4844d25b9dd1fb79ba641fba474f0dadd1dc38322288106545442c06926bd759f000ab7bbbb8b60b1c2fd2a01ee67a38f275c638502b8fd35882b6ebf66493e4588dc862288276ef715d5d6fa3d13536bfd010a0e309660c1fce084167049582f400041a5d0040a061044707881e4870302891b5c9ae84901082784909c68bd00628a15b42441b90021041d5868d02201d1041d569058794b25f2c33eb16221821a3242925a21828447b46259224e72d894001a1129420eda133a22225aa0322774b615f080ad863419e070c5aac48c801216890e7589210c0738502484ae2a56306990aa506e904be45025a02036013465f08414f8133f53065d04a9b5564e052e80b7d65a2b1343fed55a8390c1ad2db0a94f2ad12454962b225a92fcb99f7d02acec8cacb16f9474523ab51c2c8ccb3e2cc02205f6058e1636dbc1b3ef830d9be52c892be2a30890e934ffb6c8a5da9b4c42a084e0c986b09a133be89083fbfd434a7d74a8e2d22036f3b21cc9e3525343816d21c2155a643fb65ef6d1a10b8c0896da80c46a41b426ac6c410f3d0cb1f1b28f901f341e4b2ffb0809828896cbf0954c840f1f227eec604104cef5f383939e1ca41040c3ffa58c96ee5eff9c0fe3fd0d8dc8606c781f8c7c86f1672645ce92aac6d96ae11159ffecba6f3bc9663f77cdcdccb5b9bb1d3ec3ede7eed3e4fb77b4d3a1ddeac5a64af85b24feec68f0cb77f6faa5cbe87d6c222b423e84b08b37cba447bb7a33dc7926c1fa920b9fd4f057b06ddd3a17993f97be991d34f8fad3e0db0f6bdfef39fad65c4c106b7a1c321af1fda78c9ed1ebf79c87890f6f7c124c746844c6a520d65fb60f710eff22f46707338bc4f7ae08ed607ac2fb597e861ca9b09c67454eb02c7bc5fe71085bdb042f8410da20ac3fdc5ce82b3dcb311cbb222e2cdc02073e495450fa627aaeac355766b54f302e474ce544f2a4b807282a52b8990fab49638e8947b5622a525424d194b449925857be922557be8c26adda24935cd28ad473e51320a4b423218170724a3a2377aaaeece15a7dca48296ea5e44a8e45e269932472e5cfae2fec7ac61895cf10251e67d0900b8e1497c9fd48545c7cb8470aea534b90ffcb6d11bab2eb640f4e25e145af2b83d1d17969bfe8509f3e8b23d427d8824ba21279ae0c48aefcd4950f434d62e373aa6e75e5cf1c6be33ee2bbca69fce5732ba7891e90b7a80004fb71249e2b3fc6047c2205714c8ed3b08d555df9a4568ad4e2b99284041f3706e7ca2f46e7ca18d4952421559f78e5fd5b5a4e5382d18b5e4e683f3e0cf6a35782232558f1d86d0bd0950f4374afb2f7b5fc5cc9a93895d38c3c1818441f3fbec86b69b94cec481cc72191cf0149e1922cb9925bb5ae7cfeb89f2b9f3f0eca84a4966c394d7cf9a49ce8c1c0105ff422af044ecaf148382e23bff2dc2fea64aed53e7197e326f40311396356a894ca75c0d30327481cc6e86540d990d3b08d779990cb64da9039e77cd869288d47fb6c68761a9194913ef135d226b9693c7d620da50dd17858afa95c463ea79a1dc76a138c0568e07abc0cc865e4f3b0919caa4d726ad96b4bfaf49184a6a6adfaf4d2fa813212f261e8cad77ab46c9284faf4712a52167df21c5cb9f371aa2b5f53554df5654b8688b486729a6a233f03f24ce5346c6344e309ca5a9eadbec883f5a173a5b6d595fd666030b98cfc1ca7a99e14b2fd5453f5495ee9f382d495af0169529ae6c2d192f4897d78845c293f6d75a5d6ba52fbb9528372a5d673e5d379fa6a52514844399191c89551e74a8fe9292589c10f74ef20d39c3edfe767b3fbdcfbdacbd133ba0b902174e71e3d04b1502c232f60ffbdea8a85c1353343e13e4e39a7ecc186b6dcf4e9018727953be794d17296e4038322c0e0c9fdecc71b64dc27a9c1cf606ec877fad5b5b9d5cfa41699051b03a00fb71ba519f2bdbb186f946477b767a3679779175f76d12bdd2c6a33e358afa7b2e38fa5cb9b0b03b8d373ec61273ffb20ec3e18b719cdddd42ed3e971e92b9c113d0b039b037ebb13768a9d62a7d829768a9d62a7d829768a9d62a7d82993893d823dc2a88a1d42bdac148b04fb91ec116c9451151bc546b1519cd828360a0c0e10c6ae59b4db98f705cddaca32c8a1c819698531ff1c47b230e2944ca6ff18ced942efd34655ac0baa8caab4b4b4b4c000c20e7dce52ba941e5972dcddd99da5a4ee524ae9d5dd99ddd9dd3577cfa4f0677fd2b57649d9adabdd1633c7c487d78d9663b8bb4b0959524063c4202d020f7ef4e087949107b28994b1073236f9914d66f99169b289b6450d34711b348f99d00f1d020acab9fd798b06b966a7b09431caaaa9899456a6f7056f590568b4e3a6b51658c164ba308a65f372e409a2413428d364ab564ddbe2cf0b2f6c2eb29a96a97090c2a40708d2408809caa587079dcb3fb8dcb34312b76b0093237afe5ad80078f9610f963fc2c4e8cc8491cb8cb598092297817a94b81f073161c5fd388be890adcbecc03dd8af421da1956a09eb090096a0e2e30325977d7cd0c49dd1f45eb7a301ef0e588527e34881f68ac8df72b0f10447e0cb18d9bb49a589956a15e2c0326b3527bbb0fa55ee1982aaa0e6f9719d49eb45ebc73d435005839aa77f26adb30e41150c6a1e39a9a4b3fbb86708aa82e6c7af0e4155942e87fc5950cddd1c7b5850ddddcddd5c45976a099614434b7812a0c48f14523c21f574104bf1518158215c875cdae2548d899fe32a136ccee73b7ab9692d85fd3ac7db5db469cf3bb05fe74020a894d5bc9721363ecc6c1643197c20cd8dcd6ef4d2838dded7421a48e7b449bea86b9d36b18e3072bf0eea13b38e20d2437d625611496e53b9d26b210c5bee2da569d8a6b3b8f2abfc9eca921067c69a462fe2362d9b1db15ef17038f7789c8b161358513a88fbff4c1d74e52711741b70d92789212efd8a83bd3a95e3341068e6a773feb23a47f33edb3d99f7cdc8ff4c6de44a08e4fdd5391d0e8e7143df9d5a283ae7a6dc7f66fe39ce6f4ad77b600b928c4b5feb5cc951200e6601babfd6f5d0febab68e061e369aa669da43da7d25c0b954fb7eadb1ccfb3679292788c746c8f509d287a192ca8bc28743f23ba7befc2089957432207c1df9e31d6bd3c7216977587758774bda545215b6b0ee53645c7a29a2e3534a6b866159c5bc1e9847af8b561a3d5523e491c59723b1848359902f6bd7a35e577dbeb3d65abbcbfbea9cb5ce6f856f93bc997074a3c762028acb9b8dd18df1868c4bb606f6b3d76d5f209b9f75edeeda1ffd58a594f12b918b80cb5138218bda7d3a90f030cb15967d90e85c1f243917be021a6e37b1934cb0f06514ecf5bc61e07a3964371bb555f6b35dbd0b6ef539ea20410863f47ee6e31e0803fbd52be32422631b8e4840694991237344163ad0d1810a9b693a299d198e5db9ec73448f2a6c0a52aab02e3ef0c16a526048ecf64410ac0a3e3461c48e0a8cc88962592efba8b4d842450416d8ebb28fca0a2558ecb28faa6552b1be54c4cffd7e466e91c518678dd1b386588cf2090b4b377a8cee750854cee81ee710dcdddda7cf4be36d4e9692e7cb8f33c638658cd13d466f0cc6e859f4185d13f58b1c32b619904f94ee9ca316f936a7d4643684c56b4e592fba9285853fe59cb2d37e64b669bcb9738c7506f9a59829e59c730679e7943fa79c536e1e277655ecaa34ba8b341a9d46ef39a594524e59e78457a551c239e58552b329008199994b52426f9fdef1bcd2a7e672def851c3649cd97623218dac6da2915d19d9159616927db1c2c2cc2d24ef7a74af85f4e2bab4b05c49d25cb61bf94e7a713d05935685bb7bee234e83e12577f717cd9d2ab1f0e58d0d63575a7e24099a90a009845a40a805845a504ab9a094724129e5a2499338251667cf9cb14762b3024d68133ac50ccb45eb552994d05f3699ef229b10b1f0659315ee898c4b1f9c742503315c58541b02fbc2858d449b569150e537d08383827542cde04adb4234b2975da92b2c9ae93b1840178e0e300d5cb94c3f0ab82add9e0efce118433676129031811a76bba92b2ef17a8c8ba9198e1a0005ddb887a38536f58f9890620cc7b27d9b3a966d6686c5855fb87cf1752bb0b31418b6c849db0d74c1e11cc7fc385c361b9f820bac7f578d59b61bbbb202e43cdcb926d868a1d0cd46fc5c6d149704bb68c101df037d6221f4642ee4627b20ab4f2e171e61c285a30b1ffec027303bf2e3664b6e76648a9bbdd6a7b79714351ae05223395cfa73bba1f32bd3b04decd300ae9cc10fa457b92d7433389560dff2d0e10951aeb0a2c8931358e14d72a20cc10401375f3feb4a4eb37926affe57ef8684fd6aeefb774d9f4a26d204faf47d0d53e9495ccc4b1036b6a9be7f5fff4284bd3cc6300ccbba529bb0dfba1edb8f44a28c061e36db6bdd7775a2df36afc7f65727daba2cdbb6abd33cec65f4b7092bb509f36aabc085f57e6e492232f61e6c6c130c95b1fb74cd1ae05cf67102c82dc0659f2440b7f6a908f6fe5ad4e8261f6ab3ab0f6bbd2952036773440777e35f7773615e39ebedf89dfcab93b77fd239e7c729a5bcb4a30d4e76266bf93c6af0dcdeddbde38bfe9f8c2b9f07c7901e8c8d075c7707c00300001068914814809b653cbfab5cd9c9ed463ec31cfcfd371e70dbab72b3d8dccc7d353169bd24e6360a5fcda2286e0e83005ceaed0840b6cdb07707149af1770704c2a08cb44d40a7a6519a65d0bba001abd46d86df6bbb219ff246019a790f3ff3c79e7a1f8f76e2625d8efa7caf2e87ec0b814bbd1d10b814c6f6280a415f11cc1bf25a42364f6029c03426ae61834fd200573e64d52800d3d424e0cadfa0b035a03771ecc75df9f283782e6b770cc35c83879c2b7f04d047d3c4ec3074e5262554f1b073a95cf9709a6ae4afe01b0566109edb37905e4572fed966859691dff3e195bf62042b93f0c16d1fcb3e4f38b9f3bf19e6ed8773358a317bd8c595df3caef655d68fdb8df9b00b9cfbd560822b9fbf1aaee67db07ef0aff7edc6fcac4a952bc33bc8c56a97837a3037e0e581c1c621631d108e7c60f96538ec20902ce3748c78084ab9dc4f80829cbca0845b2dd4ac305373b94b709b41d2eaa783bbf065c481e54222c169dcfb4050dfa3ac9e83e07e1eb30c7f23b81f7fdbdb1fe50ffff93fe2435e007fa48113c01fbb2f7acc07e0871b0d786de20d789b86f8feb2ba0c3ce232d2085a651ca44879f264c99224498c186181e2e3c4902b9fbf7657f9818c4b0f33d127fa391a59db7d3c7638b79783bf191bb2fff2597e71be3c1d1a3f7bf7d18757c43e5edd77c5177539e4777f5d1e86c58b7e845786d72ec70e1a6e7c1ddacdd1cfa28ec2d8a8da14fdd6b197833f7ebbc0d775d1af6e1ebc74b3d194fef65dddd77fb9c07fc9cfa2f7f5431deee5e067a9b197e38b0f67b8adc36df433cc8de718f34c876cf4ecee33620dcea31b42e1bed1f0867176cefd1bb041168b51153b8575810d1a55c182db42b12eb053d8292c11ec14168a25c2ea9d0197bf035c96b9b0ecbf4be4b1bb4c562b66ad7bef32cc02fc9ed238bdcb3db63d193e72707abcbda18eec782463be2e266aadb57e35d51905e418a00130870dd0ffc55001c8e5faebfbb2f7e9a831d51f587e1a2f439606e401733aba317b3378068f186ab5d699b14e852decf5145e32c85a63b3fa31d4effaf5eb021cc0513093ee2744410671cfe2d618bc7ed7faf5237cf6bea8c421cb9653f4dd4b12ec176f658f39467d39822d92536d5c462ba04f2bb4893f0613ff54feb93ec47ef4e1c7900166818b50ea719b8af8c72ee76dbc7940d75ee0f384108c262a14f11285aeaf0956ae902763e1c142161e602c626767676767676767676767676767676767676767676767676767676767676767676767c787f8f991710942202ab7df873a7ae7b48f180481dc95dc7ed9d373093472c5ebf2865715c1d49c35e79aa11fcb66d0a2a67943ad8a4080615aabb716188806bc34e06da14d5d33d2b61b19e20ad72c2d25d24603dee8125d5cbca14b15710d0ba5209015f66b179f15d34401f8fad3401d2434e438dccf38ca793ce52a5ff1d329a3d7d4d4d4d4d4d430c3c83416124c81c0d6d4d4d45420db415c0bfd900967ca542a954aa5baa6a6a66685a4bde0a6d050e3748e909050a75ad5abee6956b7f8654ca552a9540a042cc4422f52d060c048555dd91e8ef52dd34f0b020d551c9bc3e93c8a6726050453a9144c090d354ee7e8cca062abd56ab55adedd40a9542a954aa55e6054d0a28de3c01c863c178542a15028aed55a8e7b20b8823d90055bf00702c146a15028140a42a0570100da8c89b39555ab7d136aa606b65aad56eb51d7434d94444594a302a0592bec6bdd32dd19e71f06ea56e5388f7a9ef45a9e535feb34d7b196e3fe4da6999919d7f51c8eb183e7d40b14e1907555d8c2565b85b76e905974778fdea2c2c29f974be9312b42ac08319f4b73658819b18f1df61c7327e9cef9991096db24f21982916b1bb68b440f451e738cf995dbbc8fb39ae759378136f99b38ae46fd61e37fcceafa729f34981bf6d2b797de2814877acee81db3f83ab89b18a3f434b8456c1a1ff46d781bea1d91ef9d3ff46a9ba27c1ddc9d2fa79411bbc1ea90654341babba11051f65982e40c0d0d3573b70e6f9618502a82750642104249d2af69c1df03ee84c8f56777772992cef4c91f9aa0a6e6460376ce7e137c97734e034439df67bb9c73b6f4da2b12dfbd18af461cc9f20e720cb657d8affab8f8db6f91cb83610f86becd111960d3e7ae7a5fe97166b867afbf7f0d3877868ae37aa9fb080df7dd7d50a8f3e9f12efbf80cb932ea0b7e4d423ed3ecaccb7855ab61e5352081dca28fc7ad41f5d5a07363ba041b006fcb8134fc22ec325458f8e4c687397d8250e8ba57b3b07cd9728c1e16d6232ce1238921444164f5847a1fdc584a64719985e4e7d65c662961e4b252ab5b80cbac22436e144256d69bd95e88581f767ee571fdb4a9eea0f7aa372f32b07ceb853dc4300f0e69533fcf0b11cb32c49eb88592213cbd82cb3e370012858f164771d9474992abc4081cbd24613bc6f85da94dd775714b8bf3e53c922d5d8f9627b1b0b43c935ade5a966f69f17ab4bc772c5e4bc7dc22bfc5b32b8673fffa5ccaaeebbaaeecb7ebb3cd03be3d773ab81f89362048458985377a6dda5e90b0ad62e92c888631c60845f682048410d239e9f47a4cafdb3b42870d636c27d90b9297232c63ee43b6471d5c9b7cb489ff6565fb3f48e5e248c82463ffc17db031cbb8f435907d96e29a8ca422faadeb24dda3a44d70f58daa161bd244db4d7cd17623a2d77643afad06c31b6327a9df28972b52ae3cf57ac531e47f6f52524a690dbe9b0753bffe25ca44bf19b176b4aaacab6a90d5a8ebbd4675f0422316eb48a3ff2ce416d597d159ede0854152245fc8174ab7692fc3471d4bb7d2c900af49e260af57a311e98e7456149ad824819520ecd72809b449dacebe0d6f63ff45fa4ddc6e6aad32da3e0d34d86bd3be5e6a3b1fb517402b1793b5767926ef4b375828010b57b4fb4cab3e5d2faa2fc39d5932449304fac4ec411da7e94e22a5903e0d8110c28717ec607061b117fde821aa42213ada853a45f48a33390dcc01937fc9af50671bc27603b58b92ec4509cbf2244695f58fd15f0525cd62cf25aad1a71ba514fb09d0af4129a54f3f66ebba1795edc76aad15ebaeaec45b26dab6abcbb06ec3bacdd3baebd234ecca2a56af4a5997f665af6dcfbf75a5365daf75dfa6ebabd3883c93cb5c3ff290b0713481ebbaaeeb495ccca8eb5e8cb0f1356d7b51d743341a899e6f26faadd3bad18b4422d16bdd487b912612699b56babc1cdc5a12059218634cc246588a26809f753db2d7bacfb2ac83de573be30eca8d1f57504a5983efcb11db7c2f140a859228160ad52cc85a25596533ccc2065728d47cd8737d9497077b56ab4a39f873bb81b06705678cb00e594bfaf4d327faf161507c0214b34d835eab4f166539c2b220cb4296758b8a3ab6a2ae8e8140a02b3d272dc86a537c185c58f928d68d90ddb1c11229238c52ca28a594524a295f4a29a594f237958d2f656441c61e83249265c4ea32956be4d2aeed26fb6bbb710ca39c6570bba9b5668f751ce83c30da701461e15fbd69da76d3dd35f8560fa63f078c2103dbcde55980b7ed067a37d8f8429ff88536c50e7b199e75d7d7380dc61d6b568ab4d0343eaad8686fc3db681fbfa64fd856832f06b5ff3c703fec75705886410cf3664c264d0135c32a7683fd2c8e8c031cbbb05fcd8db76fac0f3b1999d7428d5f849d9ef470b023cc171dec679db7c8c4c63611c1f5697efcebad5f735e33e288717651ced95d75d63a699c317a560c71f8107a1cc7f0df8cd0e07e88824cc6b4ec8611421e64dc34d1da0048675acb6c1b1136bec7e89a111bfb47846d2b9d9eec68a188df922753eef85198c00584cd31a243b7a287ca659f24aa99cb3e3580121fba7b1fc7299b399301deaf063a0d0358267e8c31be6f46ac7fafd0a61958d30ab2fa9aed9328e37b89ba4ff417079d37a8146ed705b1746a06000820007315002020100c0804227140208b535d157e14000d78923c74549cca8349920439885188188308010010030c10304363322500f82043d765e8920cba2c639764d855197421f3ae64d6b52cc3d3a58cba90597740fff714deb8ab2a2e935dc8a82b997749665dc9b86b9975a18c5d91a9cb32ea9a0c5d7e32bd2ec87c17024b07f48f85033adc28146b1d6de489383c88c993bb80b27c4d2ce70504171a77cee98380b0e67af1c9f5325e3f1ae49c52d542725fe0eff8ab5ab60e8166cf5c3a40b119a552ded9f65ea2d0f6628325ce62f6405307451ff7c447d5de0caccd649849f1a41c557bd23ed14670cae9064af6e8cec6250fa488e7195144186b6e29dba106a1cd4a5d44e48d68668affb2dd1fb036643e12f430d9ae4544d9189993de02ee82227b9c1b18ce1cea5a6625da8f95d6fcd7a0c13c15b5addb89481bb429ced2cc4d848b0677a7d0fc1235c070415c58d00860baf7db2614e597bf15f1de5958b142c15d8adc8e4aa3146a0956f2c4e9cffdcd8d4ef693e3a4b1d8072337681d1997569404c94574ad9c7e48110463a34e9ac4e590fdf17e85d2304b5586720f3c62257c6f07afc8cc995ec592d052929d6d7b28941a6a7f613fbfbc5f7c57631f9de13c8a23ede9bf13ff578742fa4a1ebe5ebb18531b0e6791e04c4f7d3cdc18e565498e2e06adc75bb372b1d72c7be1564fb4c3fb27e72523fa7f39aa78cac8caecfa5f6db863eadcd68215b22fa7122663fa637b4442c4bceeff10f82375d0ac8d2eb18ec7d127d1a55a523eb5a3c9b3e6d1d1f4166f508953c09298cd65825c56e7e9e6cc3de5ad2de2effd1db9ed7c18ce099826117aa2f39ac7c33ee20c876689c1304e17ea169ea650b9b9fc45d35fae3d82407a7ff03414819c117db6f23febbd7041135761bb74c3d41841a0650aba9a7d226007468876388ae8bee26c55e0683df9025706c4ac0481c747992adab0a5c6cac5cce733d9e82616f3cc7c3d8fabec8ee3e6355b95686de5b369ad759a6e2aeb3dd5c54217e6ff8f8ecc44cc1ae82f1728469bb26365225eb556f4b6d60150e12378856a6895936ca9f88e8360ca442c43c1cb065b569b49b8f9a948e2a0816de22d79811b156d2f7bfa6b5f61a838e331a9c0924c6e50aab6390704d1cdca06b6857a2def07b08d51f4793322c60f2b000165d195655c6504eba71b6e10d6ba01b2e37178a44478b4a448dc8eb5c1e758f87c8b0ef750c8b06e3b9f20fe0bd73b16405a6da4916343d3c729aac7822929cb0cc459eb6923be3f45664f456e19824bbe4bb5d18305b4f7ace884f8660b37d53eb577be91e8d304ae91ba4f906834bf4f4a536a5b780d0657daec3704a692c7fb6f9afa927ec05af25346e5bf450377cb37a391e5c02d4c0ce251b2c87a76e484188b1697e017ec9bb97f6e57d56f157eebef3056512d455687d484391902f1b929234cb453617ca2dfe24a5760a51a01b4e204885cfebace24f7d99a008816f12c05e8631f700c359b2a1e1a087a652ba6378d9fc0866e732d67408c80837dae638214de6c8ec5ff914be5e400d693b84391ad59c8d2ec3283ad0df0009d8d8a2ee51fd79589081a7ef782aa012785e96f2b5a0881aa77b68505774046c92ae5bedd43b1d204949ef21199b6234b16c359546bf72b6d18a40f28ef90878ea449f2bd1d87ba40c3630edad4ae36b1ac69792cba883b513bec4b6bdb9c708061fd1a1c5fec699bc193b62cfb99eeca7d96399a046fc0b9b2064452d59c50898564a7ab03ecc0da9c1f21dd4c6debf604990d51ca90f5f460ced2d98338f3390a777c441187b98f84b10f80b4be5c10c92439d22222b49a03b8e60ba10e0c13fa95b9223180c63e2aa122de0cf82c46b7dfecae4890eabe21fb624083dc5a68430b1facc00eea2eacb0c26fe76a32835791f4cb37cc0a9c9ac332c105766abbed9aaecbffde61d3435081f478f8ac56493eecc460c803a0061f52109730e6ea589c731d27589763be69afa2e384cf4554f8ed9b1dab874006a9d8b48be8091ce6c3ca001ef9bb431d59c4b4b4befaebf8d2c0c6a63126fc02a6f9436f0cc4b1f02c7fa292f1e69f2abe6917fa9565885fc1506e6a9038aeb4d9021136894a9be15a3b0f088a4c6d4a559cbc3de8199894ce4d5d14922751623f5224a58b27712a94c2b8c9a44a748c28198e2e1e6fcbdc649368f48ed6360628e86170583c0ef6d4803492f5de2481095e586c2f23a56660dd911ca0a39ebd461d012ac2c9a4a26516de176da08db514d7c5d1f15101cbe2b5319a8997114547fe72ebad0eee21460d86df5065cb6ad84f4af4cf648ef0d5aaa08dda5a8c6236c598cc26a4f1ef38bb53df685a14d04ffe081f940c03b550784dcf9de5bd2628d9df99832e455a57095d341061f52080a0366d3f40ffdd8114ffeee785c6007f03c162c873c9787da07713851dd1871d326cf7611432a54004e74903b3a6bc73e5574ce4f40942b4e876a5325582eca8cb08540a1429d7ab0947447af4aafb1f4176a4ec1724a4897738d4bd612f2de49abf6eea630b05243e7a4ad355709e20e31a8a77214afa2d4d85f911043e97372d68473ace0a011d7d9ce0f749cf3d2be510033f3b4b34914d26a2fc3f1f17cfaa35a1b854aa659e83dedc6280345a973ff511635b795164f21401edd2db3ad90efb81d91278043d16bad540f759a8b19ac8df0754cecdf0385a33f46ffb250afc7e5cd559ff23a004046218933fd885c8c0fc1bc35a1f934c14379b923475cf22e6755a5ec1031dc0fe286c88f749357d888bc7eff6d10e84f0f35d87ea5830c7db4955e45ac27048689a3d1cfc27cf56055b00e34bf4b39158684c0fc52f7bf27accedb84f24e174c56e052fe5c54c973b1c7435e6f96d4e320b5c02e7d81b30baa77884933476abaf0cfe63edd3d64e49f41a7a86cf803f2e1d0d0c1712c58832aaa176afeecce2d2343494cde36ae52ef9a1e1542b25c55c08732f446a0be9b634af695e2f39567aa558f69ac1466789327c67f4dfabd00a90ba5b81d1fb99ae809d9d93590cba0056c8325d11476af0b596509dace02bbabd50682ee6d15a3ef34f1d9f8ab4a0fb7d25a93a504b3fdb040eac786f7d30cfeb67d44515522f8f6b74ba5e40425a97ac28536677cba367694840a2a44f672b68e2221ae672d59d36338f2aa32a72fd73680bc5d6c50ef9e1a326efbfb8220d525fc76f10646a56314feca396054419bc493d6bc507aac03b8b791720a2b37c1ac48844d244182f85433fcb2ad118c938fd22f0d1f28de221d5768383abc41ca98890b814de6b13a7da84e064d8bff4296e86ceb2f9aa1821f286fd6c4d3f9308c79d5ba6c29ff889412fba53f1decb0bc7049579b813d077da2402e1c5af4f53c39d27a664212c3ef6d2c027929ca1cf6f695d3dbc6edfdbfc071be665852661ad506d135826ba12f20659b30cb4a6c43eb52f404f93d1c32d8265ab1b728c27d8028cc05740997237b254160a6ce4054bae2fad5b4c588de51ab20b358c650efa41a96a3d54ca16a120f6798dc5f8a462830d67c4ca53c9525caa08a2d8a01506a2e2a66a1bdcb0118115bdafa30b6d949957105f5bb2fa05cf06310dd92525e506f8d3b168ad4cd43558c290cb02a50f27dc6e572bb60d7e72a4605bc788f3aa640d76dcd215ddd6c5b002630aab7b219f33e222faaaca6db338424b426a2706cebef345c3c78d36b43c78637d588b7775d54b0414e4a86bcbe2aab0c0d34ea3c6fe821a79c0860c5d3eac3c41c8c5043224486cf7f0d614623a7cfe46c40558a31e90e068e8491cca8032a3511fb0647c7106d5d70f61d23d3a99b6446246ffd4fbfa0c6dd36e0ce56738ec7d100ec856eaf454614429a2e862811d59dcd889cd29be398078e3b37f9e9e82cf1ae39fa9267f28d3cbb809d974215a2fe490282e6ae23910d50ed96d861f49d619a8662950db973a651e1d0f7301bf3869ed4a6748905aade15e87696f8db03517a032fd8dc596f4bbed334b2643297a845b48d0313797a1c91cdea51b6626c5a4f2f1ff4c93bfabf05233b7c0a5f82c29fc26414c87eba695468275b954945c3ee22f3bcaa055bff237e3f47768d6c54bbd8927781811cc8c14ff162229057b239e38cf70443b4a277907601cb840f0e2c4ac97e4028a32003560d9aeccb38b51e951c39c986e34d476d15b2e02471bbf31a425aabf8b73ba823e2ff03fecd23419bdde5721015c0cf3af5eb7e78b5e7939a830789e06bb3ca8f024c43a42c34ac12432830f691891ef728744ba766a2b937b2721a723b4aeae7ec45ba8d367bdb2a347bef5ef60c26cd8712b5d6c1dc9fc486f2e90d6e78ea602aaf67ad45eeb7c539bd2b16e50304ab52eb4851f401eed4c9db52aaa0a4e9a5a9d92155ff0ba47f9cb1c42fb2b531834e1910d473ad8324ab892b4fde66900479e035fbe019ce0f9170e119757cbcf469872d4ce21910ff78dcdc298d0a78489a4653eca822cd2d57560c12f68b17463125fd095bccf511754cad37371a586c2904ea9266f610a747dec6b47fef184cafc63ef5cb252f642facf34fcb739791b84da688f2e3d6dd9d20bb364d923821e18f52aad7f9b01fee798da74333fde46fdbe7eb71380197614b6db0201212280956de32907858c27b4961b2ddd5c74be0dabb5f3b49c94637ad89f65b4f3d32a3a9bdce5583abed2441b478fe0bca1ef19954b79e33282503ea8c6f69f926d1564ec241ec40a8ff93a8e59fac56855dd9c6b65596bd72d6a580228e2400640b026d1d19c41e8c425f61402e4dbe8f87e2064b89f2e9308f6a85da24287ae30a83ffe5e3c4d9238d13259967d45b30ae756e25ac24bec55e12bea306ea21f84852f5cfa1b4a2477d4d2af65c57a665ca01fc283486ad40c1c096b92ce7ebf00da4053313cb8b261c5df8512fd0647b3a09906210e94b62d233b04507c20bd98cf812e162c233da8476a137545d1706d5c73be4f8aa328d16d87678495296eae3343e8ca9c70e43386a5708b8e40c2ccfe45e444c587f6eea4ff9c963216a73a714273a919f839fb3ffad546acdf181eb27cc35ce7267bd0030a8d994e28900262794815c09736277a2ca28e41c18a44fc90d9cf0f0eac84280ce01235ba5ffe269995fad8612c1cc034016df7abc4c3e7566264d259141200782ad4f8e055cfaef1adccabe283ec0267ed02c6e070ab8fc547a6e5f1381c012e4f62a28ed33e248412c231287540739891ef79a65c5b842246efa89d5592e158bd54a2304be2645bd413eefeb3f22b1a6074402ad057983185a328679b8beab3210377c3b64fccc1dba40dbb36648e256b14f64c6d82b63d168d1109ab1c0bf307ddf8ae135e4fbb17a56041794d37fee36c238d9e7b5e534198677828381923cc49089164e74a29495b2c6d73bb9b7f3655d198dcbcb40e810022cfcd889e89c11c9b69f707ab97f5a5ba115dd2e759ea27881118e475b544a1a1b5b32f6d0e4f9327fa699ce631554d2b097e4f0d6bdd472f9bc075ddd7bdef1f4e94adb113b5948cabf53e039310a5ead42aa3e42083c79aa0540fc2acf7812404b1882a8eb4d9fef6276a80e8f67cafa36dec28086d15b7476e439c1d41724d13f48cb9de9e5fb33ac3e87135e7b794ced663c3adee6c9a39e0d3d4f77d6881a6e3ed5ef2062cfa3b60989fdb38b1a627ed7a4785b8c1be90f0cd4ac259f9183a2a90b8c93c459378db286b3d606d76606bec2a40871a26b00190463a4b9d716bccb6b72c727abcedecbba31275f00aee4e09066a148cc3337e562fc8c37bff4da1ed322f9cb72fd63a5c816046fbd3a31f01b8679149070b8a80081d7db37b75e5296c3adbd8f478a4dfd92cfdf476e149dde86d1b41b0c0863b6fa5ad5aaaa8ccd8dc09d983cd2b955ea3107bfe36637f107e78d835784ad42aa92ea8117351754a5d6ee4a010097aa0704723286bf95c0a4a1e64e1978370fb22ef483255b9fba42f5ad3f3b2d70508f862ca5fd7937e0ce55c3b8214e0990dc553f104ffe7af45e53fd5451ab40eb50dc1e2062d38d4ee02c9a6f065edc82c46ac008bca8ad38b0b4a05c7291617eb9c8c0fae9c6cbdb4db186304c6dda541858768bc170bcb62ddbc4debbbdd2e84f1d4b2c09fcb623646d11d4e5ba47b17baafc4ee9bb5cd6916cc994f0961a16cc9feec02f3f21557dde11f1017f969645d941faa17cf22d29018a0cba3993dc83cac81281fe50d930b34c5782057edf2dc793fe0a0f0568f4b65849da4636c5bfe900b39651bd835218b5134e1cd537b928e2063b235cc99a27818c0843af181edd8e0da5a07c969f680ed0156c8063ee7f2788e013181daf43945f045e34cc06e604ce36c7c6bf523a509f564863d01f3ea5c6bea576f0da9012ebf065fe4d098979f84f9036c3fd3f55eb7f9530904b963d5ae07f87de8d81b7ab77b56021597b390994c9523e0b0f48167284184aa154ab47b239f1b7226a778b83d541e71c38babd50f8d1ac48807ebdd15de3d5ed2c6001f73392449909aaffe6aef3eabdc29a3173a8a4d95fb036503dd23bd0ff4fc824596eda9be12849d40864f00f73843514d984ca2fbae00d4d28673a304507c31730ab91f0426e4d2618a1190a8ef6c6657579d9457bca8fabaccaaaf137bc8054b48d1c79756a54b3a45cc66eb4a8b8284ba12413150d0425c6009e513fcb9dc63526781ee479ba96c17fa0902d990446b5a3742c4775f213f00f72089976da2e06a96840da61fab624ede72c67dff8c859869c32956a46c293ac69a9955257ad9775f2f2ac72c721ae80fd2347e7fc413d42afb03599a9bdb05ba35b5b3d52e4892487b1b97fd33cb613a84d8372e2bf63d112af7532be8c46f189ed4495aba8d44032398b31ebba236611f2f7e84df7f1e12df87c24a59a5bac9776ce0c3b38cdf86ab6acccfb0c90585cafaae2697493313f191c00891d16d13a689902e7db52f96dd9ff40f1f266435caac5059671821af96597fc2675061587ef559c6083348575f6eac6fd3c75636f3b2dcdc7593973f20012a66cf01c8f26ff95cecb3549f8956f6fffae1f96fb865bb1584eddade0704dc9afdb34441cee887f88340013b9b8008f6d5013d78e0123bb83b0815e2335bad96129f3f68edbd1c86a1dd932ddecd688c59f16d0ed638008439eb1adef9dae087428090a05715d700e651b8e18368dfcd0cc4ebc37e0e33a48710dd97d0976e8da4573d8c8a061148a267eb3f6134436a851c2a873a32d44c21c33b8be14b26263e53157a4fb420b1d86c16fd1015b704383c41d6643ed09748b7be8baf573fa5d54ee679b7f9f6c3bc3d3ec37b868f3988d683b4132c5ec7cd7de8d8a4a2e25dffc69f02f96cd5d03223ca6c6941138932533960148a7c2270ea313dfdb87251bf9980dc582143219410d7bb4674691ff41f9463d3aabb8ef4a868968d1e95687009609822de09e603aa9d92aebb52aa3e863c23b5e5e4becc4146026ba84e93991316558e5ccc26378f262b64939e2279f8e27f2e3b271b7c542aac5bc0a7da6c7ff230738bfd877b92b547b2c24ac612f15c61e3294406b468e610e3f15ee1e475871ff87619037caf8a00015cf93ab1b7ca0f1ed6a2659a488942516c4c54ed823ccb2cde2332882e14be95d271b389c49abde45b03986704b642a0c0ff562b01bd40aff44bd4f0f31a56588eec765460dad4c9084c86a461eb04b6981571296359160cd6ed507256ea430cd97e74c2e67c67301a7d0b4191c7c4196d2de63ef9e39cdb2625d361781e0813fe9c2df6a3eb5b66bcc6a9fc807e562b3e94c281510afa29b18e7328f1385021d274977567522425a790ea80dcecc8bdddb88e8ea448b7ee22fb2b0a3a698ce017daa99dccd0fe123c96083ca83863cb8cb77628ab2fdeccc75f1a8ea1a650c90dc24ebad70dcea84c3924cc0d2e52017b4bf33ef0fa807c3a970b1830cbb96f74bbe5ad8c3782a8453bd5d8eb19d24e2dbf13e1e9b86f63cfd7d45ec834395734ec44bff8084bab5f622730d5f380daeabdd879876abecd74f9041b2ff19b681aba9c8b08275ad665560011de534f8a811905949e5fb0192f6532a4dcd17b1f1a942d39b5eabf2b126595f72b30b39e79d247e423c7aab9f391e28f4bbd33a5ec8ecb890a049fa9997cd2c4741e61bbefcc6c9809eaec12dedd12b26ac06370f87be0d945314d19c5fae8a0a591aaa73507d6ec44d22ae89b51fc5442dcadd891d1b2538ababe6a82625781688470338ac7cd363bbb45c3db1b0e4cd333317808f51199a88d430e0c93ea162af453c33eddfac419207e8dacd621b623a8d08f850f2a16abe7863cff28d70849cb147d7e374701dfbf945cdfc17e0fddc7bbad49c038caafe496dc0397f387b830a28bdcfedcdc4f831d2a6cd5f77e442f71937fe0baeaa343ccb57cdd131b3662f1f50866f9140543a153afcdfc3a2bc69052db2cc6f8a4b41601bc04e061b721188d1fa3f1d99754c479b0c5d99965d77d4a3411badeeaadb34c8ec2ecb7043b2e429c03e7fcfca58aeb5479c6eb619bc92c6a77e5847eb2966f379d96a8735aed61bac8a5a39ad554e570b91a394c109d403f152484cc32ad0e88c3255fc706a5cf12626b0f29e75b8425fbbdbe42e8bdbab3ce585532eb58026b692c4873526821642d606d2243da95888a08cca434c08e3f67430998600901f606056ea8627d082b40e0a6480a5d983d82aa4e5dc44708491363bd3fb9d60fab54353c9a80f4b8e74a736f8b76d97e9ad58f773f24f78919bda0a023431c351d091770554f6dac3429c578be6187c00d7d515f253dc394d45e48a41a14e6324e856b80a7682d15e13739fc26e57e18e4541d00ac3d0e0bb9ab3f7a3ffccda0d606f90a864f4f214e8ec2bc654785c158b43d43ce4afeeb79b13ebf2c2453b00749809e72fa2787367759dadbdbbdcc7d7cddc86ca87de27692aef5230b726c557fa20534029fb759e8361186cc6ca2c78902f0978af65b08a5ea87b39936ab36db72377ce67f427953ac4c5a8ad4566bda105f1be1774ead0a9e3382ae2279edb4208e20e3dc9be4426cc88a29340e37108f1998c30ccca36310df42b6a9a3fe205e2249c56d3f2b83ca40778239195e19bb60a9faa4ecc52358ddcbdede8878872dd60843b4501bbaf64fc6a1b0c478e505dd8eae7debdf1805caaa3cce117645ed9ef6ecd9900b11fbff6028835be25a39b53c4acc5d035c0b6a30306cdfa07a9efcadcb9600eae138e367bd51661382aa6bdc26ea4c2265530e93ab8697201d545e9d2e7eca7e008875431cab97492918929166e6a5c81692959afa220a6088c4bafc629681f4b95cb952fbbf4436cc7531cbc9bb22e1308132d3d62e65f005314324012e8b0b9d3248420e09d7f44e82a27672f20aa8e5034e2d2fdded1dedb77d7ebdebcc1cf980ceef509882f0783fd8403bb5c849b4b1db788cd93d79c4fbbdc3820699972349f85dd1649869117a6967cb320b4ba334e6c0ecb2f4b81eefd81ed12cbb893f3e575ced747aea999a5a9e70382aebdc4b285127d21842cf83867908fe737277d91968bd3c755176224f38173381cc54e5dea180d1e26432d8c1d704662a4398dc72e6214727bea01540231f4f785534871d2da971fad875aa88210b22c4df42446c0dc992c40f0367c251da215500479f7996318f8ed5464ad5b631bbdc566425ba70f71f7aa72b7a89e62d68d9fa0a2632b107ab8e7202e96a1e417d5ed60eee7b80f1c51baf5b4ba450942232c7fe18beaf5adf1f3661d2eae6c5bbe63df3c37a9a40ea57e7e2cd36d03ac6c97e710a8ec9552dad596d779ed49b4fb4852ae0bee82a354497d26a094364b2515624e483007069010429c20ce32748ef23404f7b2f92a139b8cb20c9503214694cf88239acf1352b98ec52a111e87b5e0cdad105afdcac0195f21aba59c900789086f95383b0ec85aa382bf023bd476f24e573c8d8c82055856d72d0a42129b3c799d3052b03a4bad98b56c1dfc2d872d11f3659799c8da6ac156bc3fd3e0e804f206e9cdc03d4810b97feed2e9070e2d4f038112abc0dcabe0ea0d9d9e89085138791afe44068782cbcf2282d0a33a2ebce6682aed85959626236fd72e310592b2230bbe1a5897b11b21c08eb85833ed598aed9e04dccc5ba8f7a891a8eaf565ae4d07fe503f7c813b4e27b0e9e5bdfc235dd81d80d72628ef50c0446513016835029b1dcf78f98bfbf23f50e438d40eb90161944cef1b3a2f8369329f95047850987a9c245cc3d38b4f4d4481b60902c56afc9770ff580c0783d972d346e59c7f95b9ea3bbf7ade64850b98ae572fce41222999f9430dcfdf4f4f2bc36046ee8bc0ab4fbec288fcaa5018d54d586df759e18e2ecdab9ce6782e33d395f2238872d0efe87216a76400ef59cf20aedb2d690655fbcd94f66dcef75099f0a7e9d330e3d41ebdf9f0d538b1fb50fb736ee35ca261c0d89f430b3f7548a42980c4231bd7bc2ff517f189ab3d07408e0afe1edcce90a74a79a019bbf7d0d99659731bb8a70878ffc55d86d90bb3436aad93b13c17850a42e8da99bbd33928997067bfae214673d54d98ca17ee03b652f37b00ccdef7c706c111f6ca0b5b4ab311b058335f2d90dde68c2e23d24f2036f4aaf54794a267e2c5ae4498ed33a9590f427eb299a48ea2155f2d7c69b91ceacf4a924a911cd29e0007d0c3e0eccfd7c439b1ed909b234817ec34f7d561ae375951b59581a611ff0cf68ec91a604a3ac1325858d9bde4504307214dd3e787ef5b2bc44244c733ca4bf547062de09f1dec868bfad9939f086a9ce405861cc6ef1508d3513a86d9882dab997883543ac7dabd215c20f8668c8b444c1cdde856d1e3795b11603be7196adddeea388b2d5c1e462424eb4697ff3141787c49faa797223f6c143d63dd7a1620b0b6b908966a55e4f06a82e37cd4d78c5d1ef29b43c42f4902c040749b95d602647397db1098b6c8514d3f30e7c45eddd4c99f0f0537629cb4e4b121204c5190d6124ed347ac0e3703d64be57578009607e26eb6a8680685f90acd6dd5806399da46e69dd2273be3e39be21119bac329ed22fc9b34e58ebc95ec9672933ab39beb80df85740f8ae712c81183a318463e5c4eead8ad1db87f10863e98a211843377640cca0d8a19ed72886504c9d58c2b1c5b171583ec198ba31046213c536e2fc4631846208c56e7d0f223d5df46de91ad3a3a087c6dfddb70d23d0ffbeda5dee1d5643263eb517f4e06f9b5e0cfc050cc49a4266e9bc509be2c46674d96578b7965700bdb482c723cf3d286f7e91a065dec6d1cb5285618ba55f07ec201ade32da6aee99e47c734bd5dabba7b354c4e8a2ed1495837bb9046f4c146208a397f67d93438cdeda4859a2b2b968a19a05a922c5fd5a540a2b66bd696f1c29ac2a1028681ff3951fdd4ba1acec145c55bd5f98265cf0c8ff1f8c309999d6f8e916df1213f653b1da8d3a9665b5f1a2219305e500c58c9e1621aef4722fe190d66c43dfb9cf405a67a9f046880c0ab45620249faaa61a3896d262a5285304c812e62ce7cd9357742dd96ca0514c62516012f7f9c592e58c28c4f62b6ce56f3688b8e4ca273cec2a330416f0efd8432d3eb5325abd3cc297ba29e14ba411385a92450b07af86fc88db655fa4e8595611b94fd4e070e79a9046e910d2e9a64710f436fe47ff6b7000a3808031950060a20036bd80343996298846be4eff84dd15c5e25eb200803803acb8dbe9aba603d1be54fd2d17f7d6bd8110383c0121692aac5059ff1fed51393cd3418ac28ae6bb7600ab71ad53a0be8c6e84243af4165a3afcf12d5131e1b2990a098ea0754320b0232104989239abd601a6ffc3bac6dd4824c5cca229e631d1ae6761dd25de5717a4e8ea9444b7ba21505607a25b754e469a10921a091212d9ff6210e9c7d7a7deb231e057bd66d91214f5dda97ad74dc01e9bd47b48d5459277f2026defe05c2d3da15daf1a74f76e25bd1be0f1c0a35be67763ed9282cb5771d1a6193b851478559346487f8362a180688b5d17b24ec3d7b856aecd6a430f7786305169f130d4af04569b3ebbce4938b67488f6e4d24a639129b43c321d05bf1d9c8a98276045f138079709dcc23614171ee03203b746ca73454ae88a545deb6a1457ba1c6d2561d2b8abb72b35e46f5bc5bc6b4d224bcc4480d8c1bcc3d3cdaf65ac7ae7c552719098a697bba3e9bd2668990b754c4f0e6ea3c00752de768a6b8db8e31b72b2acd3c84dc0c9559d99457b885e251c071d27b4e9d00a9d3567878e34041a9b59127789282207e655650123d58e4d899580b029ed6886da5a1d86ae76a3b5bd951e482a34ed043e3259e9ca34572a105da1d49a54d6374076d4cede9b7dcdfdca1090af706453596112be98e73489045689a74b4e5d3822fa34eb9c845f409f7a4c816dc6909d04bc3b0c95258523e1053c15777530a48abf1edc68f157c94290d8c19fa8ba0818fddd917f0045ea94063ddac47302250ccbc4164caf623b760833d7c1f65d45141fd50320542119c4cb0f47c8f3f75092f48adc3d4eacd6f8f5ae794db810b11c060b717c4c2bc485a2aa3ee659912412a48bcf5a55aceaa1d7177ac3d8e4dce2ce418e17c964e72025c42026e48be10e47b8c2c970b92c8b1a89c22634d2504c6c19066f2e7adff0f258d809600c86fe7b66650fc086bf91f9299edf432e8e9651bc4bd57ee7c1d8ed65e5941e3d3a4c56661e0112411963dae7cfcba28a6cbdb4dad488db4d566f62e82a0992293794d954104a821e9b98befca0e420083e9943aae07794e6444f040d8df6146e42f5877408e01bd2c06c44528d29f7803b76f33d5e143826224810c3a59019619d8e4a987f106af99dbe6314c61dd2c62877e3d1e9de4adeaaa4b7f921ef18711789138484e47b2d830290eb02362d78643663028e42fdcf544ef266c9ea645e7c6a39407f4c9b1215d9a30c188fbabfb2b6046b6a13f26861f1b69f221cb8a790a7ee2be6cbdba84cf73d08d1c8b58be39d7957f145ad87db8b20a5100bbe938239366bd3c333baabf55153fe1b26e30e2bd17b0544d65e266c7454b2c2a719656f9f0302af152210692f676343e71fc9695e2b1e9b6ca0bc00abf970c2dffd2923c005a30fbf1339b27383d8080b3942b8ecf4bb57fcaa468306e1ccf28d3442033b7682bd7a3cdc7a9845b27b18b458ea47e86ba5bf1786395dee18b75c832836349815ff249fc956e94766de967ed477046de403d91b92f8912337c98cbe41012deba5fd2c67630dfc8423268a4adc860d5c273d9d2f3ce6ae78080dc4394faa3a3fd49b1b574fcf95dc589063cd460a7e57b8945faf83871d6575c017fc5c876f42b75e85568ae271ff4a1d6ef2ba43fab018c4156b75d50c5351d9bf3897dca7329b84f7aa53d1f2134ddfd70c0694f9a6674ea5279d06e15522ef12b5fa6e48b526097f10c7444c10f054bbe17c6a110a1b466ce49415b6957b34e6c705cedccc4ec5e0904fc46062f67be88d979b6dda08615d16395879f6190436248dbfc5fed736a628fcfdc5b2f166b3638bafdf5019e64051b423da48c0a113717692fb3857950976cc86502d287f650f8bb0fba60df83a5d65130753a7f8e4004ac5afdef2a98136afdbeac96916faec8aa3b0769111f6c83a4ce9e831d821caf1e5980b3f1e34e46015f70012201cc42cd6ce89e8374cd74283ef07adc6ebcdcb458757a838a0a7ac43288e0a6dd23cdc145a3caf7ba4cd3ae833fe6461a2a465efa66d7c081b70f6f48fd1565e1bb7903d07409f7c78dbab59f96a09bbdc53cd6f6df4437c3954219f0dbd409d5e64ff3b128c03c3b68a4b8fa9452d544435bac231b6f51978c161e66c6b4cd9ec901cd4f31c95fd686466babb304f694551dc58d3a17f0e9908ab65deb507d9501d127d9c43e81a1b9cbed079bcd06575e3f720d0eb7d32a1b41591e3673e19e395e29f7de1a2e871d1108a797d2428cb40f137e2622ea16cdd5e283e48cb2e52d174d32f65fbea5fabc1b52f43945dee29310789e59d36ba4194caca65977a72e7d8517e4e2aa71d5119c78d38cce6efe11bd29399aad4bf912c5b0a6ba09fb4d4557e44c029be002898c5ca5255694b5af9f96598e5120a0b73797454bf3134c6da5fbce1506945bb435de8bec0a93db53020e0dc6a057f949e1668e02520289d4b3ed5262e6f25bd2ccc6c3d3355e08f96267ff22d11fb492626831b0dc805571cf826c778297693640ab5530cb1f06788af4e8bf95be705b98ab8fc43ff151549f8dba075fd808ca2c9105afce4e08dca11086451af22134bd748284357f184de2c58e70d50ffaa230d075531c254c76587f59cfd35f780c81452de6dde4954e3879a854b6cfcca296aad712654a61270e3b588d54c4e224c02036570c942e5c083d9cbda0d8326f67d3567259bfa1b3c71440dbe05625bd49bbb036b2d5414937b445f7c29e3a3b6b1f8141b015d6a736428b77ad898ae2cdc873113861b518057cd40560f7022fd76d24f3e610d881ab3be4b160f75fd8326dfedea11702a0cc9677dda844c9b63f5f67bf7814166da1c9db9bd4288bc65e2fe18ab3e8421d82118f0ccf9a3cc82690290c8a3179a94c84d18952a5697270440646d31fbe216c5308037b59b8148a9915bf965684973170429b0310f2f011ece2772a6ea7f98022d52323e59ad1f72e28453fc04521ebd13bd52a50e083ff39d685e59535126d375ef089f436de3619f3c4f7800da49f9588655ac47a4da87058745f4fe80ab14567cda1c22b3996f67980956a0ddb27e155ebc941ea0ac98d822c5e7662677d301d3978ce2b40855728ab23cde8fc5d59fc79aa3911dfd455db236748c1d16b1243a14bf162b303ac619f27819215843ccd8647976c12ff57dfee922c28e828e9975db833ac9084255510cc45c088503222e4df55878923323a5014a1c10ca6bc14a73b4b56137536aebac35ac75aa19ba2e5e37ab1f1fc3b06e0f0de988a3cbd0117e78557e83660aec544bff5201c505061225d8caa459d1b8d6a4b5a4dc9a7c0d23ea669ba5656f1cea31919ae8139fb0e584d296db804b030791813125712e94a17358810164e0d96a4cca6d369db8a5e553c3eeb1087b0c51c22050448ed208e67b591a14456e51c6507636d89a2560eafc5cf138cab807c93c0f3132fb0a12d25c1acd42027c2c3875344a3c0ce38a6d02ab1caeba29118916924b988eaecef87eb210a61ed3f3123622244b00359ae60c6f521a91ea1dfd03708e16b39e555a09cbb471e4651deff60f37e9e96dd2a0ab67df36541d82ae1ab39c8b30c6e9bfa5e89f8596a1c227215fc642c89f409a0acec05e7988361c170e89b1e70529e42470a13d8d78b42a8cb32db83e07ba8439e9062319bb13b6a78ddd427a485c5b3196062104f563f3ca818828fb1499165e1383bbf7c3b367319ee4befc90853f7e806433a3516e3adabe48bc5a6999a41dc1869a3c480d7b4d845a8cd3a9374e2200631b73231f10a3e65a15d5aa33c6d42fbaa2ecafc1c700a32567a8523feb2f4ee02f23620a0969b1e2331e62b43e59e401a91affc199150cc3470c75eec565ae0800f72a3baee4c3f692b14c5796f0422c3522d2c517bf92fc4c0484e4ad22dabf6b946d450210fd3d2c145174fd087e577ed435ce7382c5fbabcdf2eab8e29ac7ac2b435d347f41fb518ecce82ed109cb7ec6453c1fb90fcfe00e541a19dd3d36b1612e5161c4db01157407422a6f03756082bc8c38d87c1c1864076a42d6ef028515ac4212cadc484e14d9abe753e945f18ae9db64b4ebc5950fbf00b6ffe63b3efbf854ed8567be0c00b6c2483c60df8ac138ea9cc98b04c4ccdab66b50a6821227f4410677e58c0fa960cc7fe88c2c8d3ad72396902736504226cc0714ee54621eab632b6bf5716306b3cef924038c9e55f9bde12be63bb37fc0c67d9d884e34638f900199d80263fb8a044620df55f0c83ee7c0b5989900ce45b7931ecfbb8b0b78209120a1aff4c6ae8af0a8a1e5437c955da78e74a97053b4a2b309d8ab9eb367fb03e63250d6b5f5ec3c40f5658803ca0d0dc2392dec1c660941824c8a9b4d869d3891499560a2d6243080fd0190a41535199d0139cd1e5c196a709e4c5d794d45127699ac2dc5951c3af313654152b5edc798d415ac885918a66ef69799e2abfc86c6c446e64685ec8114d1aca5b0d99631fcd78d55977560ca480cfd0076a4ebc20228a1829e292aadb2b010c7a810dcb331fd0424547a9734396a7abf34c9b740f04b44a35f1d65235b3a6cdcb801376bcae724b306dd2ed47b6cc3eced671c5f40a11bb8d19c24e4ad592ab33740713ab69ce3da4938995b81443940db43104f109717aa7c816a93b24146232a512008c2238781587d2480e96f840f5df8d24d2e8e2aba2b34674c932566764a8ef69132d93e0f0e1c9328a984503380cf385e3f9b1d52f0afe8ef4b7acd50a54be9cbec95dca352ba01d072409a5322e1e121f703732e250ec1c928cd2aee94e0fc3d435b6780431e287e18010c9ae463ff2527da24384f8b0cd50a1ef91f5c507f15a3255cd739078067e56425fce6b3bf03ebc15467aefbd52e71e09ff90fe6785cc5d59f240e85a044ab408d1e818f3518ba6e2e0ff2c84a0e16731459eb7d155e7be02590efba8bc2644012a4088fcd03966b57fe57eb968f8e7a208a788d33e776de9b5226f3e2a1a3ce5d0dbc7f324b63209a3fdf7a9cb70c33ecacd1bf036d4b42dc71e84b39ec4bdb7c526e3fecd4e42148bfee8947328d181bb213f4bbae1495d3e465ba4eead97c114ad6b5648baad9cf8be9213bb701045db4b24548e9a27418cddf34cd5711ff873218bd2c1074a04c2b0a4b2fd03a17d0ebdbbf73901fc035d86507b78ece9b72346351b27427d3df29531292627d724cfdbb3208521f35725b07319633f6973f09645bbae8b68e4a6a1e0b4fbe271e75bde76ad058d27d488e4e19936c18e7f8e506246426cf6ef08213736ccb1d201dfa5b2f4bceda7b7e1508a8f90052ebff399ad9b923dee12306da6aca77945e372713470e8c40c4cf873020a54e6f39fa7a9000e0737b4c2a8a873c0423c37b890d2fb5cd8914115f0d703016e409e6f5f544cd6bd0e8c6ff9bcae1fa3fb5ea98e26512547bf574e1e6eb469afb6e791a1ff44e5754df31da557c180363796b6f81f33acb2363c770fa33a35519406b57e2c33024b98947d046b6030f3be12e72c4232078c5c55effea0df508a5a6a04fe58e0093dfff46ca1bfb1cfa8cd8e3ccee3b226c42d5b0e3e27c7fc4a465b354c061854f31e3defad7eee894426ec927b3ce565fa15d90240b937c461c6b8895ca648c493f6d8ed55b7c777fc120981647a2177bcd04dd0ff1ce427e545f497bf20006c08145fc6c96ef5ab6b6bc56d9d11c10cb9aa313212af82d79edc2792c2755461987a2e69c6fd3c1d433162d3adaeee6f3d12e374667505a55780370e558cd625d3405e0beecf100c8a9f57d2941338058f2fcf755d2efe41eeec68b1b3b624ebd9b3cd5fa523857ee46fa5373df87cc6d9d292ae8b295a9d8fe9242ef831b0d022fc350cf05b46ab8dde7d3d8aca5803839f22da26bee0d0925c14f83c44743933aca6d2a73b852ed672bca1e5a894154f8de42ccf771645f545360a5781ff4c7c7288a6ea4b13799639af8afdda0d768eeaa3183bc18bc3041900faa097376ef4205d20c71c4747d40ed3793fc29d290eb06d73dd8683fe21dfb1d902f7a89724649d23b78861bb8bdc427730e2542991cf813078b051a185768b8c879a95090584fad1c9101479618b2e8da024fc36401704b4a1870dc2c323018d225b216b80bfdec73b66c981d8bbe9b7ac77c8440104274a0428decd2a206a71e19efb96854d2688d3de6bd36a3fca41ee4cf69468fe4c6a544361ae0f63e449fec8e0fd567b919daebe85430e9be2dae4be787eda986417ef60f1d66243302df2c6dc0c118d3cf7667abee61852843ab2b85a5bd9007433226f4b856c63764a854882ca74e740ab8ffa364d62be831845bf194c61e149ec203b9ca1e0f796956206a92349fcba2a948246f80142e1dcf32c9913da750e6e3754fa0d54d2b1f9510154ef363276fa050725101f9490b1d6834aa316d165e818bc0a3e35afc807ab53784c59ed61508390a3c2146494c2ba4f981533011fe70d7e39965e141e1a1e994733f199ff5561aa004764e6691d94468fc6596d2da1a15f197e4398a881efe6ea9fa23764abaca0bd008429f2522e530f1a31f625d35a4def44e62bae569235ae9807dd0efced66d2ce72ce0c0e292cee6d7e4941a3aac6d64a59a57ff8f0d9775a93d68eb759341927201053dd445229016c0f1c5449879079b31598b73045f82428a14707aa4c4181b584b07df5e758f06852f9079b056cf5698b40305b90401e2fd658fffd3ce898bce35ea4bd4b9e0673fd7b914d1c76a4058c4a14132631249824f1c0bbb98db257a535e4c831a9ce5915e376b5135cb19f5f141114337223f955572fafed871ca4ebb0cc2430cb7dc0f735b516221fd307d16738637cac806a2c5c30c60932bb63db54b3fdc7a37edb9abf0d9d892c0d36f16e485e12567c83aa0725b8d272098935bf6dff3bbd8eecf6130713ac4300cf351fe2ff0d27c61c6b17ae362b6cc83d509b356b764ceba10049947aa05ccee8a6730b69dbb968e91af44350ead56b63f3d60daaa92c1772212f0adbf7d456a9759ea90af49e313e572ba34f9d24403f801a469510d9f7770bfefc75c100e4cec77c957ee23194bb8c1fb63253dcec90f89b1f01dfcb04bb050ed1bd79391aa02de8dbf5a9e82fefde4fcf827a9648f89cc3eaae7a02c9720d45a6a4144ca0e122adcc4a411e8c213f05b4e614e56cf8b10f0e79cfce4e00df884abf3851842fc62235a45a6388561405900bd91ce523dc244c49298886c1a7d34ba5060080f3b725c344ceb5fc0a4bdf61c5c03b4e4f309fbd6d8a6962b24e8174640c8e288e5d85294bd743c6175e6b966aa7162da743c5c19a0369d0dcbb4d44f9d610fa789d3a0cc80d785d1ac98c5c4d244b78ef04313a3015d8c4f9ac7843951d63fae39cf89801142e7fac128a43ab0500aab071cdc47adc253e92073d3f11112d4a11efd5289d6be8ed487c9dfb859242d7ff4d08555ef817d2f21fd667058eb2574510f794a3f753ce581f420d6e36306f2692148a48d1facf5b320fcac8aa00a42faa8eb3c3fa657faf9a83b0e94be7294c815a3fcad9aa5af33e16ec43cae6f7556aaba5d4776b13217d7eb24aba6d4d7a5816cd594f6ba6dd57891488642dd727f05b21be458436c1b62095f84fa1e7637e189c86bb83a444c521cbc4d91142ffb9d2f2384aa93a051d434ae36fe2a469e670cee8cad1420fac438ce542a3a9e31fb88e8ae2ff497660f205221408068dcf33df52d103160fe9e7093fede8eb686f7ab4f649543a85d43e681de453316deef984047df352b08ab3e5221f2c591c022874883e518f67b39018ee0f4ffe0e308b3eb7c6c85e55a2f6676c43ec995057b8e4feabf3e5c75cf10199394b9c671c1a474a70c63105b501fd0a31b12223e332d7984cd82588039176380bef583abcb5a3c3cb3ff43fc50adabbc552892b44c6226ec3784583cc6a6b2e3e151c8f382cfebfbb81cdfac6d2dada15c4bad4bac3069cc336ddfa51be2436d7935c2eb05526fda8759303aecbeeef0ccbab79f47a20b9fa7d04350855be72e46482f2dd98bda1077dc32464cc58bc7c45e4c1b38d67dfa40d46aa8f8d1de046e16f0016d2e244c23295965572ff88139f660d1b56ef640d47445441991dfbcf79262291e7a42f79b08a2f05461fd03ec048963667a0ff598435330c9e22151e5734413a26e8076c3b124f633fc74b6db0df9f0293a688e32fb2ecd23b09897b0336ee5f9c349a81154d11ce57e3c1fe4f6e2e47559e967a9b36a843af9b3aef54d6a56c0503500f8fabfd6481a874e19ce9ddb6f4bf193b04ba059af210ad023e2f882a4772bbbc740f8135d75664f899f04f17dbe7e1b53300aa1ba2bdcb68dd3957a9c562288c0ed8426c9ee557ea15d2f9224ffdb6acd44ad25b3a269fc528fd0476ba5730d07bf002268b5aa1c8de6cc4de1b1c379274860a9966ea11e6fba105adc31f01eb2d101db0af66bcac1c3e7960bdcfa32905e40a2444caf44d8f0067d861afe5b107dccc54a486c771e45de74804e18857ac47edcad8b0466fadb2344a38d5e709d4a5cc8397da8ddefcb9c364f3a8cdc160067a5381217bb3bc4dc293cd534c3f92dbbf83fc2794363a86692cc133eba6d8d8d27c4199bde4915c743df102cdd7164808e06c723b038b5e59b8c34284cccdb47c52c64d0d0d003cfa71991d09d8c70d75cedaa664bb2ac994d665a948da465e819d9213cfd322fc464e418ff7bd10f3daf072855e79437e11a165cc60937c56b012f9ef6e384d3a50625873d36bdda5fef0905309e07205d281aa6f487dc2529a93f12648ea0997d9d781ab7e18c76b331f3a8d2891627f39383869049c94f62bea207912c4af53575683e6fc363312725b766565f8ef0780d378768364226e1428c7f4d1694e0e89617bd455161fc871669391f792e22e40c369b098087e83d75da2e8d2b3ea43bd18b70b56101d58c31de84bb644d6874e0e6049cd0cd476566c6799fc2d5e7bff4f426945b4df284ecdaa0cc52d4213b0879adc1c9c209871b5ef604bd8c080cf557b210bab92df0fbad40b9a2e233f106e4037a7c72e737b8c2e14a30d87d835a38e56e186ec490066cb1b916d66180eae0398ed4be7a69aa0f518daf36df8ebe01f382f453456c3eba6d3907009a3b07e77dcf149fe71c806a1e646908ff14caffa9010508313444c027c2c507f57ad2ca4e45149e7433960e70957f7a64f72aac39a4cc483740b5ccf911fa5384ca4f6176a90354f9ce46e257311a6faa194505d4c90761f8ed1bd06acb7f497a0219ab6bb86c806bb99347bc4951c53969765504a2739c8df09fc2355e72b3690fb09a796684f61516b78419e93e40f974567e881194a85a7d979014f64cc459ed8126bbf39357786c136505e38b92f167fb4aaa34d0b615e2bfe83cf89a7d66f4a297adb70a39fa57b4f1269b597480f58c7323b4bcd37976df2846918b9df6592554b2e6b814de41d1374e26a40f80665534f2819cc506940ca9a310e43ab97f1f1db0426c58717235cf9238b1118d8213fc2e6a5f2671ee4bc98e76949e191676240bc5b2b63d2d300eb0a92073b9a2d97ac65b6819f17c09fb6b737c30eb0e6e3a469498fddddc1b6588caceed1d3994b9c3786b48bb91dd75c23ba7b59a5919b48599acc9818a980acf2fc1cd55990d6c7d801f1c13e36cf15359a12e92b3377052b1049cbbd8f18cfce5c94c56800ab806033fe769cac9942c20b22d08a93ab69e1345d92a2c80b2b8e111c5fb30e1feec6e70698a1d8ba6ab732d88b93198925d7af63bbc2999899a863a3938d8516817b37232df30dde743d60a45be8a6a12a060f7463ad30f3578d517e5271673fa7816350389fd439693b787ba0688486f127af540f2cec7564ce5aea7bb8ce8aff1df44c85d9a995485f81a04b9ef9980488e20e871312e034aa6d51de3620b1f31bd3c171c8304d06a67531e88a587aa8dfe8181035f6553f82e5189390955e5f63b99276abf69eaf2f29d5cd25465adf748dd573c65dc9fccbe215e3245bc7d987e5149fdb2296f271984f12491f48d7eb9611360afd73ccdf5df8a9e11a4387d99583d1ea2c610cc880ab6970d395467544cdd64fc6c85fd0f7b6ab28b65aa9412c01a7f23a4194ef8cea2952bc2235ad68f43b2fbaeaf31638e8b774da42ba16fe02d4a3337c9c4fdf4e98676cffcc963d092ebe8792469040f1df5904ea51e76e5d1a12dd0dbe0616414aa7c16d1e35e390c4c28100d1f24fb927cc6a627c157f2d1ac2a257afaea7fb8c3c55527348850ca631ad47d3a3fcf70a1412902add107e57b5f961cf871ed89206ec6843b3eedafbf1e50226077c8fe468f991ed6f23a03311cb52b54cd03888289f48746375671d5a649e12940bbced132ae744f858e1527b7b6356a4714f3a298e642891c2cdbee87ad13c2d46d1df5ff4943fce65fe08cc8a75bbbe5df2fd2970cdf80309a97024d04581f2622dd60310966ee31ccf59f37c8cc31ae40ce0e19869c77a3b58226c876332c0fe2109d4ee47308eeb6e36bc37493a4bf5e46144d6457b1285037c3bd1c02f944820bffa364fc6c1a03e86002a7c1ea7abcc7dc0de9003927fa629984705d609079150aefc7e5fd6ed3699f387f75a80411825a6a89c449d73292eb5de215bc21e3178d624db699c9223bb085831ccaac639401c19dfbe114d720fe2126eec7c990a113ade4c5523eb7f21e55cc8943a7716447e39449e395bb101effe5a2db3e47797f59f943d91a0634d20b4b6f1148a5a2409252113113c51021007c8e2c1bae3a8623681a6f964a5e6b8ee5d875dcbf6f5444ed0cc635eacd2a04aebcd369aa06a8fca37e1ca3ac36c220964139002c952d3e53130510d07bbdcaa5287d630340f5086d5c3c6dd876a5013a6b65f2583a076937514067004c055dcc86e2b98021d79efeb0ddcf2a0d1c6c28469c3d5fdb12a86ce5de09c8d6b279c8478c1612762258cac15eb7b13530d83f8cb21f09fd461335cead4eb477ccdd3162389b1181c91cf343df8f1f6c6274c1004ef8317407bfe56fd2958e62b332b1402391a6656cf35b8a62238e864c065f25a8ba55a985ad300def54c6a7205ac627aba697d1ba059048aef38865a6de006aee759aee1ee97afd3ad3fe855a8da4a2341339920e8cdc3568b3d07d88124fced21881b98deeeb0503f38fb87c7dc7613614b60a14641571c798d4b2cee3eac260d0e8848c7999b56679e53a1f32df7fcc814448979ca4da5235f65ab4387cbeeac0ff6e42d2621fe1a3618b418d54da9ee4470bdcbc7f50cf63aaf431430c125d1da0eec25c4a1b341a10054c09f6b4414984b499a5a3032818eddc83a4938e245a86b9f6319c9dccdad22f55a047fb066cdf9d330b71e88995cd94970705208ebf7f02584c818a9e3ab66e5fa61ea07a087b0561a40511598273f8db6a9ea3249ff26972b8c339d511b239ddda549f69ffe6b6405d737ba7e49f95f7c817c235ff1ebcd871b5ef84d602eac2ad652d9053c8bcae4efe046c52d1c9e13de1c68454d8d4f7d2b6bfe5972f56fe4d6cb65eae2212c6d99886071091e42944bff35c10b291ed47bf3799edca33a2ab90268550d078836364f8b80c003e177479644aed61e5d674355f40faa8fea05dd8185a67523676e53eeb9eee27b7f4c32df466db25bea3ef051b7de22215cce1d50bfec28a97c8b8a96dc44f8ebf1f3e01ae09a9f084ad489f9ad8c0d8d3ca364a08ff38141f444f65b6f42890086a49e154381895dc38a2f19ccae944e47dd85dc1cf3befd10eb86569c3e189c88af4935052323dc36b3f1c7f08edcc6e723adbf5bc74d33c612ab747fff81456498d4e817c17b384bbb811326c4d615bfac949f693e341afd87c95db6d4dc65081b35930ae1d7e88060233e547a99735a639b4d13ddd50d3a42b1cb3e723e3c0ca2caec8eeeceecf648b008e721cc72011dd6e312a708efd891e87dec71e4540db24ce5cc8d7815a749d3b15e37f7b43fa7968544b4202c81044009b13213452165f2cd83104d5bffab11a3d58ef1b7853c142a0b793ee7cb788c5a1458256e20372ea497488f56d68391bbb6ac70cb42ce2517b3f32d52027d49a28f09056fec6fa6659d342f1181b3bd94c036ad8af9c046b0fec41511dcd5f4287fc7b863688272596cd47d3524e1ce49353296ce6b4544ddc5b25391d28aca6f1d3f566f71fd226acfbe3990544df1be6ab500028f301843899dfef38d658746eb8006d895a487e4b65f969fcaf4987b3b747740b3487692d53243ecc401b94ef8b060e707cc9b15da17b3a42c2e471f4585a6e605c913e2abedffa1cc3639de0137284e6ebabc9764a1a7bbd8c2e48e9abb71877f195584fbc04d00c3d6de691e5e02262de61290eaee5a290a8ea3c00cd9ebeab478e5da5d82c4861ce1e144e069c055f961088c9a10a31ad775de30f6ef57ff8db6fb011d97faf16593ac42bfec6d67ef03b32c69a2156266a1e20da19fc9d1418797db7b39a509cf04e7d8c56686713aa5057343cb4dfeb32acd688a768433dfe00a8b9e3897cd686ba49dfddb862ca84b73fd6c26eee23e430c73694dda8308912594809560af3a082ffcbaf6b52824f4c595a95cf87d12b3d9a3614fb6071c884e196262cba657bad9eaec0962126cdb43bf277a590d2e2489900b63cf3974edfdbdc1cdb9635897b36228dabd495d27b93e2f9dac3d34d3e10b3ef0f80d305010402da2ceca8ecfd8117f6cd94dcc4756d5246895822c12c4b04e51b3c6762751288d663ccf31e842955e1e05f0da7213d6f308ae029e286412143d309100a5e06a2ea083b0384cc835ac509b04be5b1aa8f7836df236a7814b3944763d27c6a251049c82e5ffd5c93d30576fa9003e141187fb8a352ac8fb69d000f66762faad0bc2dc6db16805b9d359166b40a4a4f4baa4593165806edfe96f3aba7e0e20043e000349d6961f01499dfe6e39d0c06857d82e2e9609c6ed9a407a82a1d1c27c63edb32f78ddf9c4d4cf2c6e809afee12ca30bc3745876220077e4269e59f34a9cca72a13384ad5d08ff90a04743ead75e1d061d16ef1dd824d3f8f7edebeae3c251b2ca39ca03573ca710b2a63528ed40415dda98f5cdfb0af292e177c3ef99534958f0f777f6da2173a8572cdefd6e03340c5c8e4900f64d401ecbd0c01d010753b6c6dd02184a235bb0ba21fffc63537912ceaae5f3c047474132f20bcc8fc3d9c2f19e232ae54bc5f21928408272671b624395fc57456b2b93e47b724f2af24797819272c984e0274d06596221d6acd53d5e9bfd5c4a05b40dda2a5de6fe33b018dcc9e0aad7881aae5c494f524cdaa6d68e4512d628d4960222c0fdd487837a15936266fd679650358330dffe9b7b55cd0c5465a3f13983909d4a578ced5f34f8b90fd6703665c29b7517ee590c2c24f5a05b9447ec6f836100b3f67ea78bcf07336f35430042dbb6c7223997ab9860389e040700c35687af662b0f09373ede7537c26e89a072c967914ed859f7021993987c7aaa52de792a18e2812d75c40943b7a7a6ccad5f8948b465350020c3fec9ce5049fd560200aa500580f0c0e0c2f84d95ad3239a745009751fc7ec9c0cc8f0026c438d058e40ee2c933849289e1f3663d4ea930fb17d7e056ae02315f729bf4de855eb63dc79c84e37c6dd94764456141149c44cb3547c51c960487746a6f30c41b5b31200ef631915bbb68e8b0648dfb9eb0336db419e038fdc6bc25b805dee26f30bff1fa21f726950995742ab50e478a0aaa1ef7e76da3d1cff5be8c8038437221a32d4b587a858d48833a9b40a366083ea43370916f8cffa6247c1cd4115a952942487a2245b7e4c45a05f2cd07f3e9a027c5b00a6b1baf2dc223d139b877f997c016ccf014a21b5385a4018daa40375a44dd18862cada6c5d8d12c5adde8e64ae353f3184da8fdee79455b008ebbf8951aa046cff2efbc4f5669d2873405d83aafa3f432d90f1a76759dadb03775d8116f671351ecc945842e4de644bb2a59429a52465610374036c03586a94708e0738f519515d8e153c754e593d50c5cc1757d765f57bef59d18a6f4610b3207961aa2b94df6565592f5706c4c3821056cc7c71755d9feafa51b7203195dfe2cf6aff79cee42fb899be71c1bdd4e89ccd0dcf7893ae6c2351ef1b494956b67d9f3e39567b25cbf292e52577c3ea13cfac8da6fd934894fab55919e7709030978c82e6c4b65ad8f67c58b5afdad6dbba71606b8d1e5cb71feaa8be3ab957638c2bc4aa2cd6e8c1959f2b67db0fd5faf96c3d4ffa96186254eb2f9d16d4f91c46f556956afd14c3fa29a54aa5f5fa19aa2caceb0a5d807e7f8fb86af593826ab09ead677eebe7ccdec22c10a8c76cb14055f5a2ad662309745b9b6d12fa05723d7d110eebf7a78509b9ac0ffd856daf5a2fa26fd1b77e6e65594f5fc78aaeefe1d52bfbed0272bdf512e4a37aeb23a8c79591b220aafc8db44d2c6ca924e8ab9b97aeb77e93381cf35d090dfcf3e7e82d8c7a520ffe99b9acd6fc9585915c567b4de57802f4fb8db33240e65bbfdf372b13413edee98b5abdf50f4443f5568ff9d6759a2fa3ce9fcfc2e9d495bb31bf0b7a7dbf0c5bf92dac2b837c5cf5fa49b1ca8a29d579515d8e942fea9c51adf005dd5e25552b7841fb374ae45520bd825ba3e5b5360ed41146d5b9303a5bdb0f75b4cfadd01608ab303a1d00eab63632a4956d6db6769b8f81921bac8b1054a67f0b52b96c0f4159876eff3b823943595ab604ad91a7ef7aef32a3086018d9699d66f939bdb02f6ccf8953b7a8449cdd8f01f3f38e4118a3fb3c82cd24fbc2fe94f2cd59720fd235ec6abcdd27f3d449513ba78378f43bcb098ad92c852c506ca95a403cf843a027837aee09a326d6ac26e2a246c405a420170e878b35b186611c7361826e16cf2c59582c62614259e874ee8162166b569398dbf130581b7beec6fb0fa642255a01ed7fcd338561f63f18634ee45f201e91a7fa11ea9057b7592255a225b4be6c96422fd82c9e2a9fccd22cb93021ba71389cd50fa348d5c3648d34aa87c51a3d4608a9267d2c22dac49ad5f6146b9c4fa792e50ef2d7a1101d8d5a66cc2331c624abed2cad166bdc8d7d1727d0cde229d57dab6765b6585397e70b0b8be58495a979b1a76807f63fd191220823d35da12c6b85ad7cf17a6557fc5cfe4923d2487625bbf4a269eff22e2fa45016ea5cf5a873bbbb6e9d732e94856ea49615cc79cd1013cf091d010e218c112e6cb2557a7cf7a4d2b0a424e59474f9f948ca69f01863c718b321314629e376bcf276df7bf145814659e5bf9763615807ac877df0b537e441e80f427fefed2f840cdd4127af766cac3ee85eb10b2050b9918359976f07b31a91fafca1d0d16394517a8e85e177fedcb520fd77883f1159dddd801aa8ef3973a7ed530caaa1abf7b0d51d7bd6eec67accb47edd7e6562ceb5f02ed68811bef7de7befbdf7203fcf5eb84712295ef2119004747f1e79bf5f3de7dcabee76381295cebd75a2de0137231d4ccfca5044d0115477aea4bae3dc549f1f8cfae99e736c39798d83b91d336ae3ace62feb1b86a14850b7e3fdd63c7d6a9ed34e4f8f18aec4137ee4a6c76bb034f1599241ede11b9c272bb3f5ce133df02ed170eff0cce9f9eb01e56c48d74deba1f19775a3e1ae6e786514a67f0e163ba89f7f3f173443ff8ec915c718419f18c3924803fafd1cfbf049508c918a9410f7fc10a30cb3528b5fe3061779cc8c48d71af1bbc6186ac427d004e8904fbc86ceaa084150f277fb3b249432ca08dd31e76064dd57f1123656eb8f1e238cd0dd8e1d9267a49022f5bd101f5eb69893fea7f45d64c5379837ce39aa85a23a24d27c59e71ca45e4aa88366b57521a0af94150901e5a7d917ea1d4639e71cf5123a6ca355c26ce3a15212888c3fe58bb01913d32d44ba8e9efa39c262306df49b5667183910d53ebc1da1506f101e501e3210d0d0fbf04a27bab91e19bf2afc7e915722919cb3aeb75e5b19d20c8dc68f9ec2462312455134b08d48571a3ffae94675f434fe57c084381a3123124565201a44ff791d4bc2bacec06af8f83cf5b901f42a38e683bf0e86c9a1a3e7df9791c978191b4d5d6dc402bab99e222bd3f2fbcec11f25414719bbd54814ad14c5b657c490beb08daac1cf82cd0b744a32c487fff9fd5d6d65dcafb63d74a5322032abba3a16325186317253b79784677450d2f6c89b0582970a6569f9621cccfe6e31fcde7b06e4fd5797d5e8f1957f5f34194804255734a1f2ff4b075a5abe8508222425d111a51aa95b70e291e828c7ca14566eea46df89705c6c1066d4fd5f2eeaae115b448144931985912af281208713135270454e890b19ec602dea468bc4d030b608c20554d484cf1468cb8e0eaa545137fa39556c306a62225141cf082a27558ee4505942dde80f818a954a1b7abf683672a62c9143658bcad5e550d1024a81c07c3b335a987d2a23e0490256b2f0000a9e580245158a26298242a1aeb15002ad9b89923084128851e3c5079c500131b3919bd11574abb0a852574ad340497777c78005168afa7477ffa83f36949445cf88e4e2c4cba2e44180c2031d19a6f4e45c6145ce94253428a8441b16eabed4f981a9ee8f807044dd20d405c218350733f1cc61bdeca2306207b500d5e5a0c0c6c3a0ef9fb5cd684c256de826eb7bc18443d04dd601c4f774ac8381b09f83810e62a0f6bf08fd04ef70f8777fa8a8a385a164ec7ee89937dc9dc1837c30c807915749ab6dcf20ab733776b11a1ea02f0b651dd6f981fbb7fb1c40a594324a29a38c92a2627bcf7c10420879a18c104287d06770f5dd8d35022451ba1a7fbf7b0833e95ce688a0a47f61d8d1c5bd8ee5215d21bbd8a80cb1de205575f7c23cbdccd17d70f5773266cd33f237dbe037bd6218665feaaeac266c8e9b3b3f10ef7e66eee72548b8d9cec82825f77b7763e98211792610bbea8a81c0e80ebd63101428c928a54b8f2ebc189f9d1633509fe4da831b6aa0dbd9dd5877f77537f69903f53dfb5acfddd8ead3f739d856377cc2443a1d2913a0001b68ac9c78b088213d077cd54a826e3475c642826e4ee707cf2860c6e170fb9824714c798b79ee765039edbddf341d0ee6b5db78a8ebeeafea266cd5a4f4f292999999999999a5a49444fad7b4181a1aae017d921b67fdc5dd07c46bc7965bd8b56a864b6c76188293d4b9ad480f59f11536304ce261527ec484bc1542dfc7dde585d11d7ac72168980bd8798043e8c2a323e734af9c745a105ad59709f161bd620288582346876ddddddddddddd08e2d1efdcaef57a39a3eb5c1e0692728a8214f48aaa8848ead383a440179094a46c60a03e1b9a746802e835284a32333333335332b67330b462201ef314327a8c3042a7a1d1018a824a1ee3bd689a0d1c7470e15111a373aaa2c93cdf1e9377d934e320c20eb80ddac65fc64819e3420e4172740dcd698a9598ea621c09ba359366c255db34e7e0407a71d46544f331201e4e9cf433a8065a33ad025f0469c0fa7bfbd885e0524affe1fde046ee10e4d5bc2644de112c2fc963f28a80bee5a89b0bd586454724979db99eaf189eb1b21d18869f6370f087c1690740c0670d50f761702de4886119061c9b0c1f774903c30cf53defc009a8ef4924f736ece0192d6243d7fd9171932a594503a043f7e811ba07f2715548c357f886a0f0bddd7d0e775fa2266ead98e2caa95ed39d7ab0507fd42d883bc18771b66da054d77db7df4f7165a70aa0ba29b6c0a9cfbd6d82be8c3a51f71c83392fd112d112d112271203487f37a9afbe1c233c51e17b676b0413ccb76e2d977d5278cc3c78df63ee292559265b63c3a33d894a49a24fd23e46a369826b767667955825b060c1c179a557723aa226e846e3654476a9a77a7ff8f98d79aa33c0fc8d85501d11aa7b9111741ff4c12400b250f9fe55853df7aa0a65026ccc03b9ca9dfa43a90a958db3780a13f243a9cacc49cc76a2e5dfee39d82a9c6832b33b5c488eb7a8fbce0293bba090a0e305142a0956a7f305924a729ca48a1e1ce176dd8e1d6ce6f66ed7ede4eb6e1e85e8a885db753b275d39a0ef9db999fbc551476877ced1d83e627e6176ce5176ed64841445511425638c31c628a3845142caa9a65846296594d4524f822ce62896138aa264570129a79aa298a296a21e45554f4a45514ae8a28b2e409510dd2daf5cb932850fa45cba6e574de976dd0e56eedabddbbbdddfb5bbbbbb7f77bb77741516eeedde3c655c4abafba73ff250ee036ff7fe34533026fb8c47102999953f3bf7ccbe0f64c9484177772573865cc82b2050506555227a8544554b8b68e4dcf3e1101226a51f12c021871891a8655ffe6d685a4bcbe891a49046ee8edb7d8082082e7ac30d3788c670ccb362ee930cb3762671dc8d7d51084442ccaa79682a0a15056445b1fa87047098a24305ca61e79a144a1d8923a378337d3a499cae02fd43817c70edeca2a29676c611c2b94f51422166513b0be11c45d44283534c4bcb686d68da6824e34591e1ccccac423b67208a73671207491415b6858ae6b7dc5535e79cfd404f8659399338a22188b8eb39522acd203bf0d8f0e324011ca6e890c3ce943812e74351d64b32af199a229c3ed5a04fed83ee9302280db5c4f9c4a0e3093b2916664a9c18501a86592731312251cbbefcdbd0b49696d11bb990fad9b9c491124708da4e8ad5e4902945c6b4113d618059a3477ddd97cea57341b9a05c502e2817940bca05e5826232994c2693c96432994c2693c96432994c2693c96432994c2693c96432994c5040ea8848596f87a2282583b29c0809dd6844482811928f08c94784e42342f21121f988907c2e2a44483e17159f8b0a4c52371f2974aa256620032a4eb0a0b4ba1c2a2830019520aa1468d1a305162d4a4dd0ee6e6f8e81ad3d83f10178dd59ef5cc27432cad7dccdbb458ca4c11426950614f4fdbf8c511988266c029268a814ee598412b2190100002316000018100886c30171402c0a1461973e14800e65863872523695c8237114865118844108c2000cc3308831c6188090428a30ce06000b1e6ad3c152c456cbfb06f53a0f340760027c6795e9f1b79008d4d2a33f86830072a59292ddfb176bb028874a7c0fbf78a44d2a882f1488f356fdd68b06c38ad8dc336aa30b8939218825b27bc4176d91e7e3723826574741b76bed27485dd349cff550fba504b8cd6daa27600bdf6663e892c0cc5dfc5262ca5674d88371bd2ab9d017f2bd28de5bf73f3ac5bd58eee2d0f5c4db718a2b7c06a3d673e64b7d738fa3b1601e85760918cf6815709d1f508b8dec2947ee5b8d3a6897b2d91ebec6d1f0802a093059011b35814aba52465a090c72dc6bb122c544353f5ac056e7115ca2ba142bf727deb807d89202b4d232c75241f32173f52a3710a6782f656661a79458164600a6bd11d4f71910a3ef950956b6f904d888c3480adcc9a6d2b79d368b7c75c5a7614747f08a06dc1fc01276c5235f60ea44d0cae1bb41351839ce5b82d854ea8047f1c4260275e6e61df1653c4dfc4cbd9bed34b47c1612b6a5a7526547ec25531522a4de00cc4fcde5de2132b926e9b41fc7659cc9042e689418ae32ac8323625846a4170e63b18d5baf1845d967c78eb84ddffb993f3e610dd1916c82e35abdf781815efcfe0cf5391fa21d5defa0bd97e09c461d7fd78ca3c748e0df267966486ffa22056d9d135cdc21fdc3e4837e06fce52f8bf2b5d80e168b91a989002838306b58f8c3e156fa10e0784eed31a348dd1d11b251646412805e6a81a52770edd78e20f76ebc7372f0c2ac69c5c39d6053cdb1531ff70481312bc8e68b863c492cc7b7a2c03b26c43a07c9197f63b48db33937335d6c93df8d7d3e4ed5d8ddb486bb5aa34563c2f6205d4398771a79f6a997abca081844b4a307e43c62e8579d0d69e3518a8560e79aba6d83e787690ef012275cfb49ba5e38ec833d91be282d177cbaf872467f643ef223bca4a54f6723a31b2125d4809c79377e4483c7803a77e597b487146bd4b952ba81d92699dad499bade164151ff9a934d9d2d6bff819122233ce6be135679972c843bf8bb5b2acc938b958dc217a30b1449f6f9faa7c870fcc00431eaf301197d74d24dcac8347cbcee24e8d907a85b255a07d5d181779cfed6db59959653005b0beae5edd5aed9d92762865a5cdc992182ab020e5c05048030b1ed2dd4f8a02ad0714506cdbdca8a690fdbe60c851e2b3f8714c9238645cf92317506dabe543cb799edba22795c8fc10202d5a66aab097582ad01e9a3b4c07eaa997d8d2b0672a9f07d7c1ea1af93fc11845354ffa7a031af121407d281745065b9a634729b3d02134b95cf21c1ce91d0e0409d26a273e27e9fd88794fb39adda4c0885c68118c7f6149ab2e577465f93e9b2e23f362ee626d4c581803c53dce55365bbb6a815f9721d4d025282b279793d44f708de9624c4d22000260e54266130f4aac81755e9491ca8dd9ae185b32f256eaaba91a860172b26b579ca8553e6385724640dd057314c6b83e5855a6b32a8a9d983a0079558a26c9c438fc7a4ed26e733533e0c875de9f1505a5600da7d0e76607b50dfc9b7ff42c5251d1d22f78cc40e5a36484ce52bbf41561b85c168cfe85542f8a02d3983587b96602aa69a78285616ae2424639974c1ecab661ed44e9a960717765211fd05491f5cf141258af0af8f8930c050fbf309a8e991e0a34507d611df6ec857f477a20fa228662d19113b72986aa34335baf2b3d53050ee5d6f721926e9d31f44ca480e077b18798fb3dcc5b717d099b2cf5784072684bcc352609da3063f70d96f3dbd01b56767ff05c94ef3fa7c6246b03864d310273b8471e619ad04b4880f8d192cc7dfa21cd9eeb217297207350965bf1cf2408d04f3f7e4635d2fce580356d7dcb00cb8f50f8754ee9fa03b1259af567d84d4e6e2a9617d5181de2d11419412383d692d51636a514fcbddbea4d4e9e9b93012300e1e340d7e7bce0f24777d3c6614c4b62c64c6484bea7093441f955ed171292b37274479757b7b9437ef2467bbc68c8d6151c6af3fc09e8764248ca434a7409e956d76e443a33c57a94c4383dade8e4d33235363a01cc44283275d49bcdd07966b57f8f3f5c6ca6110e73cc3abec14d4332a52a2ec709a29e32ae64173960eb5e31027646eb2f3f082ebc13e79deb222adfae116cf364bf34a57e2ab384d53c3470876b633023c578290d9673b91755e8bb872a4b9cba210d784d218f616c2697b31e7fc5f0783724dcc1f51342e0629f3050a6c1d7d64da4eb5cfb60dc053060e0c3b0a4774018b30e807e95b66bb6d0f1666308fd325eac5cbb4189373fde4a8651a3af1a058897d31da930456d593fc88b5b30e4aa3126de2aefb27d727f6cd22a38cba469c617267cec363319a808d8a7da58abde289e89d6b797b4b89d9b0d88b2e5aed849b00ec5b6470552352f43f781c24bd901d0498223b0bc237e4c8ee589f9d055ea6217776601ec2a6b6d8a93fa762a2e2ab8a9c9d98d64f650e17fb2adb592de646b35668fe6ab09e11a4d9cfd6bd930b753a8aafa562c6ba9c6de9d425a806a578c8f03dc57ec9219d10a045ce2d776efbaf312f73ea18b6a5942daa3e3a49fa3fef7c72ee487e4d1e3ac557b8f2af7811256f9210329772fef1992b6884e916610d5c19ce515d5dd913125fbfcbfbfc0a7971e69b1c9db137dc4cb8e2bf6e00b5ebc2d4366fd0536d24b6903209068b7766ce43f90cc89d1648b0e13a73b58add9f011f95789903866930794d8066ffe9826f334411f9e2b46e90e7b2754c24d4e0375101fd4c2a71c1a1b5cc023b289faa458f8c42e19713fdc5444cf9de4ce1b6ecf821d1219742fb26c9d0f022be16844428460edf9db2d6f818715f3a3e6530dcaba848f909614af1a7a62a4c4cbd255c815414389370cc1fedb077a3f55722bbb2a0b1d287155090ce6facc981d0c155a04d2b3a569dc4ef2a2008a76e060a640741029e7651790b1e116fa5952daa3f38491540df4581a4fd9229707f35eb27725a016df4eed95fff89b963f49dca840297c5d5f6bd51a058fad606990528d015010956259b487684af5597c0304f3ee2ec3f91addb7e70c8ab53a7974b2ae25b350f0c0863756e92a5879e608e8e2425eb413934b049a2f6895badcc12bac39547424dcbacee13121d0794bdcf7f05f912ae90295cd128af0d211e6b14751b726ff62d524f82cff72fb6ba76338b3972ea395becff6bd2aac5e7078e9ebfe90187d29425c81e4b7d0e1db575cc3a5d9dcf5f9011ce725caae7b5fd96d9e2554e07459b0fad7a939608e1868eceef256ac825a7082d382a5125f9ca00b321612698fb088d1485b37a2ac00e2540b5cc9789286948c86f1820e021fc99cb11090e39c7f7e693161cfb6e8622e5c398087ae43c494fae76e296937c5a1a64575a784c45826a6326968c04eb106580a21fe6fca54a985f20dd6c8e719831e59c4dcdcdd40e0b210409ce1aa88bb24190dd75761790b3a288f6cfac3db21cdd48c92e572fc6ae17bf74518984cfbc6dafe8bd4152fe6ea6bf709abf28cc572d62fc02402ee51b5319fad635b5ef7d750f2118ebaa5c36c38498d232827c4041be2b563e42019d22edc7c0da849b88985a5e408934f727c408e13f5c0ac05747bbe0e120c9faec524c38e5cfc1ea6858c18718922c2b1327964227e898231f017bfb9047d87b9c958b1beb1f89e9ffc192100f6222e3bd929484def8b476779955c876bc2b0d2f81613e496bea2ae7c26caa9720387e8a112e09c989b8e96b755cd91da41f2c2f2790c41df12955a1660df8d62088dc1edb08523f3e88e629cbe87372a64b3dfb098d2d458caba31b5319693a1307ef649e5429e82d429e518b90a04b4478e636e8f931a5fab047c0a64b1014e99c069b6013a1d2353e0934ba5382d0222b0e778414740ec296c80423ea8c1e040de109eb5c044e57accd69dca0dc84ba184305de6f31d8fcc31e31fb3cfe8ac0626cf66021fea515e277ac3601bb9207011259c79b2b781094961bf100e20ec29eca451ac6f665736949ec202829e5364fee441d849d60324e8ed8b1ebce54b9b25a418a6045947db36e875b8b908ce383572ffc5bcc663c009e70e11f6146e2501f2798b78075c04b166583bb5fd4cff81eec78e1f9e244c6b760e785e7142730de38d0554d650d570f767fb3ec9bef1dae2c7267bc1e8cbe706ed12a63cf3b71d8fadcd58a3046bda75fbc992b3f287abde5c26d7efdf244b1957542a8f56705a3dfe4de7d7501d7fdb551f231f90869223fde7b97264b6f35d22bd5da977ef05320ca3bee59b31a430721267d595c8c19f9f4f2a4eb718fab9e50ae4f93704a3df9271558b572ff0b885c7f4896f508c8b8096af6f3f3463374d52fe857be6ba09ae32b33db6fd30c03368f2cdf05320d96c00b397c3c9676e98a0afbf40c6ba00a9b60aa2012b1ba5d9b8707322812c32b7879d740cbdba583078d25658e3fb72136649111bf9a8068dc8cc0bafddd6540d58897e1bb904d586de17e32b567411faf050fd201c7fc52462081e0ff8883f8bdcd0d1c7441d230a9bd8f892bccf3e873de10e4d300d456ee9a67878e80d55cc0013b09dc27f0986ca5fe81b4ce323681bb86ac06981431bd4b5138226e90be4e720716bd9cf0bc07c72d12020d7642b4571fedd7cb8d13de65744dcb31291c92e0b53c9a4e31eb7aa70afa61d3770645050fe45f074205346a95c416954753e7781ebd063feffbdbe8d813cfeb13c097763850c6abe634d6e71e6a342cb50e77dc54613c376402608cf036d26bc4e8dea2b0aeca06ede17fe8ac02611af3a09b694d58803228b83ea15b3e328aa5f9e779408555a4f890f0ea17487e069a26f31b55051e3750d869dfd70691005663d189c8053ef63a9e6a2d3d5e88873ab1c18bdb45afa142a9ee2e961752207dba9ab591024c36191f446ae3e61dc31a0e3274a76c71354b9c107a55a7e4836b5ca767d3a87ce69c3e33406f5c0d01cf239621dd668a359957c2636bb9b1238405699b3e759d2cf558e083eb7b1ec3d221f9ab7deee958c66f2693f211e2d58eb3d2c7ea5d5c93cc0fe2d5e3a4038c8507aa5c2a402e4cd6d2640ee200c1f58f1439e88784fd1b54120c974e3f250fe3d90996373afdbce406d79040afa82caf936d8bdecb44ff44bead8e5402c2013675bf2c412284ad2e79d7ee26d268a1727039aca16916a18a1d15a9593009e9aed14141b648a596286c46b7d71eb3979d2b00c99c2ddd0efeb434296b1d13c2bfb33c2763a5e0f266e73a61c2da4139cc2683534c1021642b45e448f1c7ca0d9c1f475102a640d7d447d0145e174c2928d678e9a1d9c0fb7d136b018ed12c4229c2176e3abd795b37c735fcd52324e80249da0c0cf04e21803babdc0aa7856c35c07b477f63de7376a004eac7bd7e6de4897bbcd0af46c7a031dffe3e1ad02b3a13b174bd600b576f91f3b7433dd865f6914364858e8f64a60fe45c81ca5720a4d6da5f5f866be280b17ced5fb2a08805785668b33beffafa3a4db2d0940f4ec69c44707e8bf76648e88857fcdd0893682b311ef0a36fa329138dff017a8cb4c5503eb835088aa653f030f51f9deb5388f0c1ddb3f46ade36c80afaa25dc301282ee37ea2f2633be0dcd38a53828570366ea37a17a3ad93e16e6fc9407f07a40cce7438bb1247fcab158b2347e291070d6f497f0b6dc6fcc4558165a7d01774a6f04e8badaf8397da5a8ec4bcd2ad3edb02d0dda08c4bf2608c5a92383afc58515b69503ba0f8d2e7e8f04cfdf2ea6eccced1855bda71b51117c711e7565dc4bfc024043e21fe9381c26513a66f12b51de281767941b856a4a59eb1c23a01a5b2da21180aee64615ed8562a9190b8e96d4cc2745284c4f446eafbe40e401cda55fb26997bb912ff528c4ff3c363e62c35bcb3a5f718ae6e27f211dd9c7188422470097073294b4c918f8fda5330ff8c5b132576dc11480c5cf818fa06a326a539ea632baa03ffe7f7cd88c8b165bd9e15830785fffbd349fc4eeeaf906ea4c7d8397e577d8c96f5d67524101fe724b419ece99b742ed4e7b07eb777dc55e4472101881f636d67c266229fddabd50c5e60da04eddd7446a7580fe411cb1979e2165efd0ab144c276b2e7492e8c12e9b75e5d2a1d0c6eb015146534a54af00e47eabb56a97e41555b65ba987bb812838bcef2a8e52d9facb5eeaeaf48e05ad333f80f19ed15392e2e03962281bf20f20d00d144873a663d4d14a6b675fa6ec7c3ed16a26d8664111f44c4477db245197748182f6c7b340399eb27f34034e67fff6db5aa1c7d1e2f3895d32d2fdcec58e9d02faa787f4a377ded1c893747478a7fa44425e59102b8cfaeb2eac306edb2d67409f35f07a3ff620e1192d66fabd80a688ea72d4ad8f5f4558667f28cb0551a66203d0ce731991b07466e0e06e346c15c10ca6336cf88ca2c36d27ac24abb7e7f84cde80728f0f3e645619cff635ea3ded2e1466a3a69e809748db27deb87fb180a5c51d4577e61b21715603d6f7fa85f8d73bbd58dafe7b27395c5ab26a8d700ccb707249664fee7d084612262b9d4e29f301096585247539d8d7860eb59fe9df2197d294c8501ad5419b6433610100a891511e73578b7252097998fe08c14f010c34f68c01115a0fd6bc7826fb9ae33b3f440bc09c43dca12f7f7c91c0b5850bba11b78c8408f2b92b928c7bea86171c56e5a6d2b4ef2bb30a07c94da98892a3ca5c86547d973236039711bc279d4a604ef41fec19c3e83ab905e27958e1445ded925b519b96ec42974bcda62414a9db9922b08114ed11039ce370269e6c75b6923a087e9fd8f37e51cc249dbbeb88c49b88541e739dc1b8ee93446a51a51e890f179eef3c06169e6452733e28f4b2724f4dc133f86d498fb3891be566e0016abe8e2530d2bf5e6a7d318ef5277a687895c6ce6890027cc9679ed7830cf02b4699d36cac1ff1f61dfe5b2a4f2618f36424d51d6956cfd350c89800bd2476cb16c4062ecc66c007882c90e90040ba201e99782c78438bae24813bd72b3e4e0440e49c29ba4ad01cd0112507236ab926a48102d05b4d1a4cead505dc84d7c4b01047b7c2dc305ec9db54fbce96da3c3820ec168d9cf65771460ccbf79943640e0bd9133dffedf575bda81a827b0ff3bc0bd4b28534b1e59762952537bedb891ebc7d85c5432ed385b3e6da970e71488d83cd899037c7209efd13da0bcc26d7a5718bbca341cb46628bc71d5e978667687c0fa59fa86d9040810ac7eb8755547dada3399aecce9462b1d73886f19cfb0cc0d23295ad22aba5a89f5d7f362051efc8e3f2b69eb3a595ac765c378e636ef0e8f4a004da1341400fbfc63b893c5d541e35fb287280d8722f46edb0a2912545709713f5b4ac270058ccac71232e127bc76595b09dbeee3bf764602034a8d3cebbf1dd3500116186417cbf2298b1b87b876712d782a076770fc2e7fd936360ef2830ccc25e385d36843349cff0cd73f97871486d8d72cba082d4c77890bb9535e9c60f9e5574f524336bfa51bf1ebd59321914d9750ac33949c4bf44eceb48ea52d215c4c69023ad090e29d532859afb176efbe8d8924d51be65fb9395e0dfe89ac8de5a8d31125906e3312e6ae3ac60feb58bd4e32dbb617c7398d47fceeaa7355b1ce87235597e49bcdce6daf906d777c3648ae357030da96f43fae3eeaa3004633115bb14d61754e213c78f200763c5129563731905be9dd2473df5be1f4907d5b50f3022e938b118f2e734b108f5310b2c8f253216ba9515eb47f5cf7dcc0eddd513897435429c013b9f01f996176b6368022db0e4de38548e77b89ff4bc5ad162cd2cac16c8cf42aa147b91b258d2a5d77e564bf4c95abd0b3f26409b1818974c87b86c444b68e49f1c0aed97cfbbcdd16903d38608072008c5e55f65066bfd6168b37802c086a711a62c4a1c3153b689bbcdaf07e5ba5bceabe41188333d7353fcba4132221eb8fff7ce41aa4b88056bb7dde5db10d26b222b06ba64c2ee1097373af5de8c7720f1af1418c6ca82fb8621beeb8f6f4e2251810850431670d12f62cf1a7dffbefd82db908d9e4d5c0bf59b1f429ad79811d20857b90a1047ad14d979c0407fe94ecfc469b14585b607b4dc1b469ac82ded0af100bb5670da6816f65d0f9f084ab8d717ea678b6e96ddaca608b9b44644e66eb771e0fb0268b31dc23ce9f146a605fc637f94befec9a14e0dfcd153db84d60e75c268b47017a9ecef45a16ccccd0b7c2381db27d08926f11cbf9c4140494c262db3a3627c17800537a21550136214af7ae987a3b9248dc8d45ac161a1bc109b73dcbb662a4333972159b549bbdcd54273e6f7e2717740be78d7cbb91c9487fcf8d654194c4b1358ed57a7373cccb1beaa035169f64a09ce6371c94f2be79ecd8ae1d07f9e6cd8d4ff81c3e3cc3872d06b532b3d648bb1970ec95c18f9236c5fffcfd85106f856d56d4e9d3906ce5d341cfbfcdcb2dd2cd8ee2c51d0af69a68c1058e3b03b2c35499a941994bbebb1110cfb07a4ad499b1f2ba63ff8b9173dbc71373b886430f1ac8a4f330726dc8defbc53c6c5e00d011ee1d8c763debf6e3b8a6b46f994cea1e03686543e4a61665dc17b2a3815cf993041bdd7e83d84502c7981998ee157ae3fe20bf344ae65821382ac1641b3b9004434874817b11f9057b327bad99a04bbaabd3b650b13fbdce48489e9bd9a98cf3ff9bfd32891200037a52ace7e8fcf22dd38a5a2f9557b928958cf04db50e03c0d6d440885235c7452946c6977f40d951501a6a32113521ec3114bcd462f787f082df05eb43ca812db34b76fb83989f164fa3212364b23e7a62ef36356df682d40a11ec2b22e75d1e3d0b4499d0d8c890142ebafc0005459d5940ff4290de4e126a873941d24544c849f47b98bfbde1719b6461bef4126f76d225d6f54fd8d26dd0e84c8fbf58a540d33b7cf5c912d74a7a711f6466b7fd17623b59bd0025ccf927cd48ec263ffe092ea5f0090429d98e3b07f4a9a003dd31180cf38429e268eb26e72808c73ec8883b07dc198738efff35e22083cf47d78be4a8a02c4083d89f1f670682c78ba4cbb87cca8fb05c6f17e1d4287c5817ad1ab21951e2404c67feb88b610335c38bcb3cc628bacbed9e02cc03d813b714278830886727cf6b4124d05e5fa5699931ef90b7662b5e61916db258153e8bfabb3a1a6ea16bc00ce4cdde2f6d21d08215d4817c00d2f90a76b40e3fa5d5b6985ce33bef84f7c1d8868d697bd8693da6988c45e2caeda3908123ee2e32422922dcca87b8807df20c403d7580c88992a595c6b1b6a6cbcda7794fd7e0607b57c007452b2111bcd02de65ace8a66f42a2200aa9ab1cfa80649aec647746d7fc30e41d715f692d4a92e73cc589e7330cec21293fe554f7a23ac1f4333e1936543a29452852f8e94db93131ba6eed8a048615de319a891a69b7730e804195264b6e9960829ca62bf4fa4f70fb989e29aac1d7523c6db2867cda869bd738f19b6289a754fb104008d9130cbc4b5c0cee599e2c3d737ec3433e700a17c60a590e90bf1e1fbf0335818567b985f32a32b2247799464aa2843ecca2898797730287119e45ebf88bbdecfbe444b9f985a62176481b6965be42423272f9b8a810d51c11ea9069f0c49dd67f0d3754586f309cf06cd0473c62106252c3a80a5dbb0ec641a3416dc0a7e1613930f82968fb06ccaa06cb246c4b4d8fbaba278291711423d59a49aacb310163e37467cd88de9ea4f77ccc41d329c31569f0100eeb0bf4b24a269ece6c1e6360d545d9dd968e8dd8fbaeec1b07cf22031e026c07c3fde4637ae79b2f84904e503f1a37b715f2ee72a75262aea108a207cd8fbb245b5af107236e3f349fa6388728cf79a5c2bac1db7ed0e007b1af9ecc3712a9d09f8de2c47352655169ca81c644b531d74a1b10e644d056eb939fc6bf8fef015ce3bbdb9c3dadb493734e7228579e99071d52c08a66778570eb8dfd127879332aca0f13f60e8d9b1cfdbd3446bcf138911bc2c8c9b2d99b046e19173009b15b9789011a581cd40d97e6bad18de104b079424005521c8e7720ab3770cd6ba0782162b9e138160086697653d5ea8e07c9268427a5f64274e8fb7d41b290947d523c741c540303ca625601303235491a06ddbf62dc3036d6bbda64e7400ed0348f5124f28a4044afb8c93e3736cdfa4240611a5c0e8857072ddfed0de95dc98b636df7e4817e8eda72a35e00c7b7f76ac8f13a3db79f4156bbd8eceae50150fb1b97a1bda54f9320590ca29968e83a609c9767c40961f2d46c5ce5fe53b4d27f55f544a7ebff37ab51a457aacbb258c26a70d71d19345d398112ca0a6e74259c0f0120de47538d7f11da0aa77c8c4b80cdb958541198c93cdb6ce37a0e94d912704e0dddc55c086e6c4ecbb625277f6adf9e884322899be688c3d20a257c3d9c6d803a33a99c09c3dcb667275c07adb34b0d2e4228e2fbaba6499acb4b13b1666f124003c20e1c11fd308d475405d068cba213000eb64b58ec89131788ea5e23cb6e4e8fa552f66ad549feb08ba07c03471231a482d751cb758b8052f8d1f27e6231ed0622a01ae0a5f2c86739490210c4141020c746b53abd37d99d22f0410240b8eb50b4635db152000e218b01e5b0e3f33da0c6fa80c2ae02ee20c7a8ad1ba4796f531e0872c761cec756cc098405f27b47810980a86bcaa2d48907ce6ae2dabddc65d1b8a95b55120b5e3eef73026c1f749497317ed55df61b9f1390959681b52817e4837e002d490436bbe59c3e2314390950104005593155d96d390fdba5f79c6cc91297e3d2889a026c961a3340208c691ce76b79170be9467ab0d3e1efa588499c1d767c300ba22a8f769c0f8a7b35ced877558bfeec86e61ea1ad42fe9b2e984fb3662de03747ed83c70c4baa1a01a07950f852699255dc16441098e5554db6f77d8a531304a40a3d56513cf0c7b8ceb96c7187f80e536c6f8e438963b39bfe4c43ba1dfd0d0aff795088d0bc37b62c5c9a205373ab1a16fae31dd1d864eb1a2a079acab1caf32ea240fe0326d279057aabb2a4412b37d86c7ea322eda1cf98563bc8f2859389f774590fd9c6357a9d89203f9810cc117551a942897eb9f516f30bcbc47206c00770e4de999e589b3a3f5985816f5067a6d9834c94a25db5c8e42ab6ebfd2cedc1d993cd1cc8479c8e46c94340ba54095f0823eea4d48c08a29b511117314fbaf5fd603180ed6e17e7ce4c5feeca6b13086202f47dc96be0dcf798e4adc925a856bd726ba130c2abb3e019dad99a60f4c196df8479d200fd694c5590c3efbf3ca330a6127e5aa80d819d412cb79208ece2c62fa11d8ade40b9ae83b8e35a8884e885d5298168dc1cd65b4476c12c2ac7b9f8e92c845c47511a2ca2b3baa9ac2f894bbc777790f8a320c8b697d1f63a8250d30ab600ef319aa710d221b70b57e50047a1da992e94fcace6037fa9c0692fdd45c58bfa4e67e6600ab12813c3e02cb355a64815edf82af84568854470868598b23061230555238e5231385b0dcb4c237445658ed82169ccd96592e42b2317e02cb40a5cf7c6887a3e72fa109aa57e64cebf27fc30f135383103ed05a87745fed569b3938a336b79ded521cce3348fcc3c03ff53b25dd8b4feae4c6f99b1dfbecb9241cda63d2816adc18f4ac691330ddc0e29eb08ccc5c3cdf68b1ff86932596d8d9fa10f083ad9bb4f513993653ea0a77aa831003f88355dd854fbbd2e5091cb04e3a8312f6194286e592e11b87c7202bc8743de03489232cb1e537a70a3e409199035a7a9adf39d45cf79de001d095b624f2b3c384edd495705b043f889b7cb664cf798c1728211110b5883ad56c4b9ffa2dcb3c11fea628b299c7f9362a93f0653fb060354db6b20f37ed068d0eeb1d019c811ceec8488af0e0ec738355e96b6939aea5601d76175e4eeab2574a5975b1a83bcbeadf0ca5ac5c3df406cdc66f059c76aceb2c77b081aea0c2c69e69c612a5f181184c8189a64c9056d4130665a27ff1712f7133c9b096e6e4b6dd70c156c531388f471e357e6adb7fde65b152747857a9689f14ad65dd9fd25dba9a27c821c0a1bd3bdfc30d1ee6e74f5468170ffbfc7c55cec2df822c196f4fecf00225effe6d4af35e887ac72237524a37f7ef163a3e0aca7b3216a77e7df5e6798c38f456debc08c1f00cdd242539ff4441f95aa714f4d68b083c8470a546362cac7611f240a391ddc6305f75e87335033024ea8daa200e031b42d438559622a3b70b73cb1dcec66735170883a567fe413c430ddaca988c05d3cd56661f5b19d057954a0f49eb6cb4b74634869a74d47c22fc0768729df23d80e7e4a801c762e3c41488a6bc10c028bfce5a992c6f4a7eaed6b2695653048b0c8a2e8deee9ebb8c7f1c5e764c500eaa9a9781eb0a64c7b620c91a937468a2f35618df8df6b23af4589e5822f9446372a0f2a944db1babca9fa938eca9848b85f1695ff925af04ff1ea5405af2cc7ec2f06fe821028dc393a0ac5c6dff562c11beec9d603614d0d91dd74766d383ad38cb9799dc173783da5c2439bbec895c328baffcc3d4315c83bb5451aa15f3c04e3d5988f74fbe158f17b8a16ab19d4af490571a74abdd6b94f2f6b124d05e25c52a862c3c545341726d4dfe7d1129f8d3e7026558d1efe688635ffa37b4403da3f073dc29f47212e630134ea38e8bd313e12306c6b957e261ca4d64d897405924ac08e74d11615f840d7fcf817c8f8bd5d5569197e876ce13c7c5ed725211261bea0158cffd7a06023745b0ede10b32e74ef393823b23142ea2a29f690bc03b05f3322f717e9b90fa1b590fb38376e0fddd7f97d1c3ae4b85e8ecfb4b09988fddc7f26d4feaab48de6073e9f4c5769a75a9a08666ee2712f6eb5c7ea8cc2035f55a9941c998046f3f8a270f48b6c3aa06358112eeab6630023577274ec021d35f2fbe0f68d42b723804d573d096ceb49bd03cc694da8d7179420f3405095f2a0c211836f0a849ea1d24bd84ed56a50c2c92e674c3d4352c31966f54601dd931974a59767748706c64e101ec9774a98b97096cb03c25502c2c817e3b0f309decef3215b3abaf44eba89907094cbf6a98498cb62c9ecbce9cf7f64abe07510eafd103020c6af7d6eb716dc7dcf2be5c476783d868c3fe7258e0f26c60fb419dc15adf3783adaa2b33052eb0665327a5736e1434c9ed62cbb9a50afc051f811131a6b272538533c17d14d30698a09a3e4165840a81c9b44d2af62077f5a71885c4f3f9e313255dcf387bd16a34d1a100f1b98b03680d82198d0e967cbf90cffe006a66344219d408eba31f59da1f32a4743070ccc865ec988c76101127bc06210f02c8eeae415f23db25dd1aadf81eb2f684a79adf84d1f10b4d71617fbce58af49533b16e14e890157fa26c9f28c76eb8e30632e7d355dbe81fc6b592f1b7c251a246b4b4fcc3dfc907620e2e8f77d895b06ddf6faf408d09cc509c015ee0865ad8f06cfab24c0fcf28a4eb2688148d01abc84ac1d1142283e25d331659d06731702c9a4fe4b3f57b4be48bb657a9a55d625ac9a21ae5a16b3b233a925c3f31cdac7c3a1f906038c7eee2ed427f200ebffd3658cfb5db042ecf0de4aed58f28de97d76c1d87b2b9530da56742026659c500c094cc2100071596534636b02bfa8814159fb5ef6e480cfaf089a229715142745740755b688edf122542ec6ffa9dce1725e87aaaf6f8b72a1d19c15323bb688c669d0328d67a33b00881d455a182122e167cff1364767efb5d66162d9a3d6f98b8ec0a145ab80e341dcc4cf5af2e89ee78a9d30d08f661f4d40693471e45918e6d18afc8052d03137040253be1fa6657e2c8c20b84ef178e325a2fd619071882e8af4f99f22543c8e3e136f4b4090c179574c25aad7843e698ff6505dc27bfa9856e427acd080becfd2b738003ac4068e32436948ab3104aad6ba6ed4112a1f17685c5e1617dce630cc8bfba4bb021960dd2f3c6c2369bea077a57f056458c07651145437f7cbd7bb5b835ce99dc8a0efc197d38fc797245b4416392b2fb71bc540b380f488814fa1d4012a534089cbe69cb6b77e9e98f6be3584570a620fc6c278c15e5e7ce51768360881530d35af4139641adce6cfa6b16a0c313ec601613fa4dd51d63b2aa63a29d79efeabd0bd8999e40497f823abe006652f79dd69337ef0c11f2e080518f5b8301044e8e4118e88f9506004ea50a4230bca65ce47812e98498d6ebc55ba8e43efec17a30f7515ba62df222710f72c84f3d6010bf1bb7fd5f58e713d86b35e8e68f83686550b75ece386cc47d7bf566bba532c3bf6751530580b7f662f6cc57756dece9be0cdef4d3a8568c2dcea52985e737bbde7e5e4cacbe157459d10bd9ab9d672e5d96072ff544e7cca2fc1aee0efb5ef53fa49d063f3af9784e965f3bf5b9b31709c8140a63990c4df6622b4ca64a79457507969561cd644bfc894ad0bcecaf2cbdf2f6e31d98345a28b6e134e881111c0ae465a92c02e2f75008ef22df4b774f23b0c7e17e86228f405c0b76ed656fd649324667f5e25b383e8535e5ff0574fc192cd267e9fe125a73859de9fb94fb706bacbad2f29dc9fa96b962efbc07b6a43b35a7fd8b0e59f244eec60953c44257d4d1397f947776e40e9f8e9b6cb835859c6d103db080c77c9c430bfc244b29dc033e1e2a6a09d050e09fd7dc0bbd0a467bf273e216d1b04b04e41a4c274f6d76fd1d6e960cd0380131f8c637761943bab896db2bbcac37a1d1e575b7eacc15bc14d8e7b5fa157e587460f4e20c95fd63c3be0bb4ec6d7838e6476b802c58ecabb0cc4f1d1789ac49f3de649c610b0f432efdabacc4ed2aba93a4da3623aaf28c99e2d103f83f2d5c65d1babe5503e9a28380229271626ef9b295c0c868b580451565ff51ba75c9b2939643d22333519a077f4255083c5174d7f1c3f82efb202e09f4b122bbcf71e35d4f170d375cde629d6e72480aac67527b5a8d87b3f1ce5736c00d7e1350813fc8412bad0b2a9a96a9e39282a25abfcc4c76983207f6e88b2184b8cd4683e97bf23fae5237bc384a5e62d1e8dcc7c2cdda42dd72dba44179429f408289de04f67cf566c922e54ffaf2bbb3782c9b40a2bb48483466b0afb97411e0e5ed22079454a86f056d7a009941a95c9d43785981bac1de86c9643a28a71260ab8553498bedb611d22c6f7d5a9c3b2b1af1811c3a83a14e99b616e05002dd748b4b3ab3f43ae90cea2c5b16cd8037d8e7efd19460f40758c6dfde88a756d63bc9017a68da9c0d2ed326bf75b298d76549b159a135e6227f39cb08e9a2ccd705f811a8525fd316f8a147152fe2772a3f3899ed642646c7abfba0f01f993fef6ac3e4020dfbe81a0be7d7be40b12c0c45e5ff3ed3bee4291bb66f8fdfc0548f0d8d1fa8e7fcfc293a86984ff98492c0a392dada056e88880a586bb5b8fa10d259ab4fa8e2127a6e96ed4a69c362544c15212f03cdc6db86187e4ec242f4ebfe95bf88cd0012d0a3f42fdab1de69432c40a529a5272905af3c96afc5914bb9a01490035620218e77a68bac0ee08d94b006d29837396872a0f4f5023eeba8a660df13e8a5d97f04bdb30fb16d9e4e7d1a6e6117819095b9b141b593bd8983d31c78e8d8146083f8337c7330bb481f86e511605090a048cadb7b4a0e90c4119253e640f36598322b606aa06145e034a7bee7e5b3052ba4a075a6849a309ef8d37911ada8af6325948295d4a6a0c6dd9cc242340648bab09552b3a58400fe7dfbd5b4a64d175b863106390ab5cb0f6d801ea4337a8c48d02e9f5f09fbd90fb068d180922237fefbdb794524a99640a7607b307c307d3e5925d0f5709622f2ed70bcd3c751944687bbac277902012be5927ba50c5e99d19845da8fe5c004710091f5927f6c79c23f64413889a9035ba0ce5100948e08275a13f273281a88967ce71bf10c87ea174ea9c0ff9d9fc8424f8f6d8d2b5c895c0e3997384eded3c5afe446f5fddf40e175a9e7a1c7d7292971b9e7af4bbde6137e38c33e218cec14e1b40d4c4b78b7370bb9e391f7da79727349e79c974a1d2058918247d61e5c31b3fe90b2537cf334f74592ac31863c601f9634927d9d4c09c4cd3b40ce3ee2cf6d269e9b7e26f3658afbdf7da4a7b8aa6dbe41d160b35df34c77cd3b66dd3325b691cc3c2019d39be22fb58528776cc7df8d999995d35257f7c3dfb32cc3b8b8f7df79b64201dbdf4cce58c51b5b2f1719879733e9aeba16961864d2a9d7126188d71428de925ed9dfa592c9db3592519a50bef92f42ea7e9a3c8e8669ec839f384d22a9fc40596ef4f88857ead06ac333344174aa62c328bd462cf96914bda12eb48e7a2e8426d49b3c255896ecaa5f959f974079db5a2597929955847bac65479606d5b8c3182dc3ce8a20fa53f1e084bce399b67641d1675e2d2b6e7d523493006d299e6689ecdb556611e7295f6d6927cfbcc9a7c7bed9cb09f7cbb6d24be8d7cb75257e9feae8bc9367da2b553d9dbb3023aebd2db1a6cedc3dc7ad7a717b27802617d873f7ef36683b1e98d3eed2c10bdb593d6cf28f3ca6a45e9f9cc35137dcb8f0522a208e40d4af939d6d37e7f0ac56fea3352689c6e8f34c609adeba76bad44859a71ceab4d58a7ba36ad75ce3a676302686ce1d4423a8d4198974e33a7d42d75bbf24d0b245efab65ab98dcceff5242d45cf543c276911c56b02f0b89ecd8542d818ccd922ef1040a409000e4eca6d709c5b26ede37ea2b51ee783730bd2d0d0d458afaed9388d57e3c5c761ad6b3ab5d61ac781e3c6cd0d4d8dd358eb98ddacb5d6db579bdbe07a363fb93680ad95c8d5aaeb6aadbee2e65183b556a6afbef2701ef9807704452fef5e7aa7230ad2a9970aa677c2f08e1fe9d4535f183fb4e129af5a7a27b4754bef00d95a5d53713f313b21739ae27c7035bef290a4cac3eb4892875bb7ab639eab5e83ebe9afd99ec643d6531aaf711baf3547bc8386579f49f08ecdab6b9b17747a1bafa1e1c5477128ac7c5bf9b6f9ca79340d8f9f3f9ba0f8d685ccdf3ce8f41b8d6f9eb79f3e2105885e74a7c7e6518d962e9c4540585aacd1828b76441f7b7296e1268d67bd391fd6575ee3f14b2e287e8d5b4f48fc9aed0b6df8e695c629e70354e3366af559d43b365f68e349efac3e201bbef2ea134aefd47cdcca37ce878d156b8bbca30768f31a2d6e0d0fbab08dcca31a5e81e29cd23bee1bf793f9758df311bf5583d469e48ccadcae411a1a4e7d0b407823d278ba857bba3da594fa507bf93747794231ac3e7c7519cff2e89a5a8df491de915e2b92cca95eeb173615ae36f9e91549f2541f3867ba0ac25594ae0ef1d36d45faa97d4754a4cc2321ba385bc90cef5fa6df952368371f3becc75ba7b752ba7db4abe88da131ce0fa2a37c0b2d8ff2936bbdb19432d487917efb4e1ecab3251d13e72177df4ff4c139eaf3e9d34fb31e3ab90596ef1e35e4bb2a1f9d3a8fdee9de42ca67ae6d0106db7830a077362b16b56d5eb91e1bea0bef95f372b9f33af5de4ace27e37cbaedf342ea9c967128748f3a7d21903fa97c82e298476928749ff3901bd0f60151713ddc4f74da930151dd6ee520eba70ea0f6ceb61a29bae940de396af30f373e7d9ce78ff2e26fdbb64d6ebb9b6f5ecdabdb5ccefbd3aed99c5c73edd47d9c17c6e722d703f5f530eb6cceacc3f909f3ce93f193c7bfd9fc709e79e6dcb67d34bb407c6a356831460ee32c67adc5ac732a7c3f1a8c2928d13df6951029fd84e20a422d6f852ce639bb428398b31ad48179c8f211e1d30182de60d0e9ad83946ed1512a6462200539aab9b576851fbd63a5ccb77da12afb7444a1e63c1d1e4b07dd6cb144d0d152a89f06f9704a23f609c51f0dde06a9cc922efba142057a07dbb80fc382ec7b21510a0d4615ea0af43ae659cfbc20f3b97f60a077ec2714bf7e3d660a325fbab07b99c8350102882ab014155db1020820aac0d2489fad644ee699671e9bd23aa39606330dfb7a4883998ecf62d34ee25abc72e79d77de46d260e698151de635469f3de433975e28d4034b5603fde2528399c72f2a3598795f894ad4336927364517eaf8cc1b49ef64e1aa9388f9ccbb49ef6416c967be9a7e6fd76559c638d907d448f64851d1152bae6bcc3632f9d91f7433deb879c452b71920baf0fed5a29638e3ec291314c7f4cefca216d762155dacb53a5383d7312c9df5e9e1653a8a58fe7a7c92d520bf08a5c1ebd9178b1abcde55c4a22b3179b129ae96dee1242624feb65f8f5c2218fa85dd6d2495ca8d3b3a4a0ea790fce839d098a7cb81981c4cf1da69f64ed8421d0ab1cf1efcb590fc803e1f27ccef631fa1f8debca213eaef911e245da85fba507f4ff985ed5bec1848292dd37b595ac93c27cff61cb0cffed843573b554b29a9ed06992ff5ee6eeaa4934ee903cd27e6ed01494d66ce9ecf67a33910f5761b1fd4dba9b5be7d3785eb9b43e0bad69f4dcff4761b1fd3db7da6f7e7aca365edb13d288e79671d79654e0b66864091310336d6a3ac51560cab326c46501cc332da29c39ead335774fdc2b3d3af6b3004b9257adf53e77676da9c09444dc8f662d6ae79e6f1620eb479a879731ce79c8d8fecb32fe88472c6e259286f392d6519e9d4b4b959cf9c76ce9f7941581f145f88507fe7329e4df78397f1fab5ce3c6e7a19196fbe6639b69cb6ca9cdc8c97917f92716d729c73ca9cb27c7bf14f5efba0aea639733e3c7a7225f0c8689665aeb9166eac23fd468e1da74c5fd14dd70bcfb9740df3247772291f73eee43232980bd597712d3ee69c1744c685ea9f9cb99f0b7c07e1c082e298680286b973bc28fb750dd6ef7bda591f68f2e4a37abd2ead5f6729f95a21f1ebf5fbf9d313ae94d24a29a5944143de77668cae9d9e6ca4f7b5b65d7a2cef5d01030d20ca719d475f0792577a10a1ed834810aa2f5daed08f81bff763ce213bbaadf123aad132a1b1446dabe9da742d727c51ddf4aaa4a0c521d97c873ec6f64834ad0d87e690b54136b607c98f41f30b85fa33ae077521dd0399ae173e6c0fb2625e18f3422e90d76d61bb10fb4177080c2f7c1021f5a30bb1cf02d173f50ed9ab508bf9e99f8d8f88f4d22352e809e99f9ca3bd56e71c0de0383465b7330b41b206c9972efd0b1aba4268e007dacc96ae6592b844f1e1fc8e317a0666b674d1c3e7bcbc9099ef477a2195dbe47342eac6f4423619de1124ba3e88848f284c1783d1a64b0f89bc2773a94566c9eeace3e37aecd757370db247ae07f3d8832faa6b3024f2306f7a42e2875148cca6943241f26d7ae4638e7dce3aecf1af17744fb88e7dbce266a276875e9bb2c306c8a0a1764cbe7c39334627bda55b4fe76b18a9c72f287e25c013d968af68ed335e3a20eb217c68bf78a4b738b201de1184f546ec44cc854767fee837a4884e8bba91542bfa54fdf49a1b62ba10c8b3b6f83184ce74e9a60fb1773287a8c54d4d58f0030b8e985cae1675cd234a20040c4130d11a5244a715dd48aa35a448b7aa1b59402b3af58c2ca035f443e6c81cea4351787c435152a01ebf219739d3e9c7320789c7904106465fd8c0081d5cb95146c72d221da260c2891327965220468b5bec212b0577b95af148ef8480640aa131ef085932f33aa787b26af1f30b9263c684179b20602de17520444978f9fa5d0fe5170efd94de9ce286bf9f11ad1ebaf061f4b03a10a2267f41a080214820e029907cf570043fef0702d6f2f5fb01e50505c00206930b95bf794ee2e2c31b0db1bb40d4a4658d5c34384822061eb85c2d3672ddb061882445418456602d6fe42a001630700951c010a4165c3c0592167b3882af9ce485152f14df0806d6d2b29f8bb5b4f81b627701044e80a8c10b625c435cae167fa1f4e62450002c9c182301940e7040c419318c19d3e212542f3f5a913439a717eda5d4a55fafa3b4ced8dcd40b15fcaa415a29523369ec523ae6b2faadd5a594b206efa09dc4a41eddc6662a61ebbcac23db8bc63e29ef88223448bd307a960cefcc962e73cda9dff40e751dbcc359e7769d7373569d739dfaaac6532f8c7c0d0d934f2ecaa53f27f100ccdf3478e3751b6b93e4c511cf495e14f1ab06afd7495987751869051acf4cd151e79605d078260a6f678f5c8f479f335e74ecd5bd76aed5bb7a94dc09957af4f6fa85318c99e601596776ebcc27602d0c81e105d707c99c05a20f0a45f00333c63c0bac0425090daf390b44af7d8c7d3ed9d75a29a5734e29657747d6b994eb896f29d7c3665f183feb09b3cce6c7da16de025d0f1afa50fe751eed61e5d1ed2789da9e93bc28fac94e7b302f6589407d1586a75b7484a7d4b7de892f68cc91396e40e3abf2a3c864bab55d3dd471758c605d051e6079eb15689ed9b2bcc455de82d171d33becd92d118cb7ab2facba8c6365121acfe8c0a5ec22cb4bc9f303b2cb16a66f1f1ad7f0a1db8ebebd53ad78477c125a72ec6409282de5eaa2c7e73e003bcb308d163bd4a44b4fc9b7e7681ed9ea10fc2d76627010209a82c50d53c2d0a10b2d35b498bbd275d216a5efeeae776418f1db9e93b6207d3ca2f1cc0ebabe9b00349eb141d71e3d287e87b1e4b339f5f65888d847592788c7f46c9e65af7d2158bdd08abadcbcb03a75ccdb37c75cd328e651274aec673ae69be6d1d324f7733dc6fe304cc8158a44357617479e3ef1f28c26ef4fcd10f31e149f3ab34ec84963aa7cfbf46c7ee81340d1432134a44f277a2134ace0f8a64f7cff3450fb8cd225a59f90f6675479a17e295dfa4bcf5f487b2f1a374f0a4fa0f8d0e70c211f3e14727180e9432124aea00f8576a0f4d1c31098e0250513d3472f4e3e88c78c39e375c400c6c71e334b5da3e039a969e9bbe839498c290f3e2785b1e5b999a54eaee039a90c261f919e93c2dce007f09c144686bf2ed710568ac2827d21fd1c08123f62d1c910daf5fd7de47a044d97abcb7318cf605ea35be57a38cb67798d69adb5ceae55c65aeb0565a2bff458ef4224ea9651c830d19e93ba4002c60b64f8610b2b46a0404a8b398deb21247fb68fd9e0e58b9a0d0ac9d7ac6631cc76aaedcbcfcd33b742f231d762739432b6f32e778e74f0e6f90bab4b26819b2f8a6389dae4fcc2f84171f50ef20ef9383c48a762e64a175e9ad485916fa6939ba1a28b8ed342349e91415237b946e3992a3330e82fc27cb165061a6f44b2861b9cf1427e91d20597f7a2f443052f5364972e927e79723715303064b66697308a4af8a1020656267c09f3d345681edaf2f2216301e3adcc2e93b27eba8fd1f5234bcf2d218bc53c4448badc708222aa28d1458b567b34c23cdb172e20038c1e7cf0440ce621f261075e3871c4888933a4609e0d3811c28a179223a868221635921a363f447aa51c226a596b3febedc9af6d74fb51dec13b2479de12534cba7de84266923cdcd4a54563a3ca5add3a87ba54d2cdd5948e2e806ed76337161ae384bc319539d486c524468373a68b8043e727b8518d521c218ea720751054029ffea03cbf90860fff10e867cbf4a7629de8ddc660f41b41554ff7dd3f690a3f1aa4eca51ed1b8b5283828f1c261895f35e801160f2cd66a87d58a06896e1a79e6c2054530e172658c2996b4d899c6f4e2de6ce288512acca904f3b494cea1545c702b8ee6399d3c174eaea596e8c23e9a51ba8f1aeb6eacfb0804afde478da597e6d13c9a52e61111e6d19b47534a12ccd3f512ed44cb00fba6942eea269589058ce2a9df2a4f7d7ed8d1f5a106a9b7a082e499453227f611e6dad19604efe83eea234a1df3b0979e660101eb9ed2474f7459f5a24f128f8000c22c6a81c370180ec361384c9c31c6183d471fc5e8de3cd5c0a9716b44afe19f27f97a38d14fd1678cd1371c3abe77d290b21d1d016089ca0daebbbb070429d811081784d39c20d0584da42af1624f1aa4452ee834bfe10070e94701e0c171eab37700e0d4e79c373c9c730660ce3955a939e754a5e6bdf1b08f68f89c930693728be43939751bd3e30d008e2a358b6866d12ceaa33e6a293d459502e1646f9cdf5784038757ae8f523d74d1ddc33eb2f1b08ffaa8b1f452efb853ef2c353335a89a1a9f1ea786681f7df4c8bf166e78d84700f090c3f41253faa8a5f494c7e1f103c0eb6e3ca393db78dc601f59cf86176e1ff6d15110fb212f09c5a7f199d02075956793faf8b5195477faa617950b9128a3200daf1baca49c4821bd8e84995c5e47b6bc6a10f3aa614b6a895709965e25509a30bc68008382c6adc52d328b94e262520ac924952493bc9209934c9e1223cb96540f5ddc22e78dd14b7be412b7c42d914bf4325dd58a967ac16495f1aa61e931f753631836b1c6fc48435ac5d884c66d834e355d7a0a8b2e3cfdf4d07fb6c78ebc8365a9b59dcad285fed67639c0b794525a5966441dd0a0a937f9065da75a492965cc62e2a00bbb9f9d6a524a61106b8fd415ab9bd0c1afd5b7dee9ac8dd1c67ac5adb50259b79f8d0feb4d5975efbd7eefbdf7621876bb8949a9a7aae842771cffd8b5f28086293f80e7170d47b610f3399e5f33283dfbd2950ec7e41a48c00a0b50ee9862eac2ee29a51b09b4aed3a20b4fdfddc72c40d07cf83995832e3a1b60bb0d4a2d13d01887b914966e426006a4c7797e19597aed54edb4f1413d3af5f8b5cb9ada810c6480d2c523524ee6a7c47427eb73d2f8c9fd8c4fa7ac4af9fc72e4007b07483a582368d6d03c8c5e8d1a343e3fc74999d13dca83e27f3154f97d41d3c31afee30b9a2ebdde1a5fe347e7abaffb1adffdccd63b33422d3820be1c5ae1e31752a71f10d603054d0fa30b916fb48d800b9a1ed2f8c23b31c7388e732299639fd71a5f10cd67b4f9fc6878fc2acf88f314e7d20b7f7cfd70b4cf888dd6f6cdb039110cc38810d91873229b6b4e24fb3a99c3ce3911edcb7c05c9c37d2c19675c47836ce9164f1eb2bea37b377cd0596735c84eadebb8414667fd14016eddfb09754e3bcaebbc20f44fdf0a355374e19d3daf7c1951922f2356364fcbbc49e9acd64eaf934ea75a7e3a4f4a27bb6089aa4c55994d78474f23349bf6fee136fb8a3eeae82fc5c429929a990d8922c3f9766ad7091e5fc6db6e6456bcb97456d2329e51e75c87f4d2d3fc657c4eee04996fbbd46594a452962d128ceb8892274754ac6061e2d22f7b4814ee723fdf6f3e9b5f46a63ce7db8facd2a0ea3b752ce84289d48ff9e47a04f161eb3eb15f66fb69e79cb91f1258e91dae7fe827ab34185f46a07c7be6dadca2cf965638ed0b8ad20ae5c89152994b82bf5f5094581af4a1a91fba502221f54e95deb1d23b4c91707d6130533a74d4a564b0d6d9e08eadf613eaaf42fa67af00098b8564b5ea8e148b115a518cacf7b09536451263dc0095ce1c731c01ab5bb9e38039b010fb1ca7c1ee066c49075f1ec3300c73c66e0ddc1b04efcdb01a300cc3bcabf298afa678ec0b81b01c741ceef92543101f3a4b0ca78e4c3a679122224aa46cb8f7da5be4defbe4af77477f5f455ef0f70b6d6a86d4912bbd4ef5928186cf9e5f32b83eecdc08160d2c165796d181acdefaada1efb3e4b95648fcf87d20587dfd80e63665903265e47ea59fcdcffccfe6a7975e44a0f8f0c713a08075fa4544097d7e1131410f3a4e3a03899fcf2f22367cfbc693f20e7e1191e1570d8a5971c1e5db6fba0363347db8f5a0cd50d16df439e90c2a32674e0fe143a24a3d9c5fe8c26bf1f53372b64643ec2e1025e1a5453f174f812484d722731408e1db0a2a7268dc3c321e5e2e63ae93e8338ff3eb11bda6699acdf553b8bd0c6b56d7eaf4aa694471c3304cd3e46bfe329a5f209b9f694ff6c79eec750dc3b2afe73ae698162c3f1da38e6d7ebdf858967d40d8c6a1307dfb306cfbc2a1dfbc7ae1945d84d900b13544c68b301ba07a6cf1909b1734f453ba8cc72ded7a3fd807c479a8b99cf50b39d73e1bcdad5377eeb3d1be9febd5af572f730b74affdb9f6fa988e7d6175cd351bccd906fb7aa83f1855b4de8032d7aa6fbe79f5f8b7e67a34d73ccd79c8c8a331b91501c61129050d64083fadac5156761e5dd99bba741bebfc525abfd50b360973ae34a0e8aa4b8fb68677d62a420ed75446dcf0e6d9466be3cab7eac3af837562ad4a7095af000ef3cde76810e7994550c58f7a0e967711c808cf3e5792abc81268a1ab56f45e672fbaa65a55e7fa711009daec0944c78d140b5b6b259dec92554e7446a89ce8a2472e342dbc1c399cf44645e9a4743aeba8a2d05a69ad5475441727956e29a56429a5e4962e4fa0dd59a382d285ac766128b6a80f45991e9d1915fd3e8fc6b90165e4e156c4811155de9f5f451891f23222865714d7eb08307ce3b7e1187520523bc89779bacee1197f4ee96d599abc8ed0f23a02899711625e4660791d71c4bbdb27addd7d738830024e5fbe5fcf7bef8d7c335d30c3bdf7429142e7aa534121a3c91226a922401c9068ea420547f8c03483300a03a5862428265372707224060a6070e2c904c2280aa32c92a07490468c88306241927be2611619b98c6e48b2e405e50a14268a9833aa9ccc39a7e482c5ea5625583204181b8e9e48e2031430349ab2f81acfaf27494ea60f54523f60e202197ce9820552e60f7cdd71c01c20e6e13898a3c4510d465cc03446d1fcaab0184378a1a28a2523a61ba60f31e0a6f2b112913774f9f2848821b43c19e3af6a09add43a55319973de996436b9c20696882a2f22a05025512da1f17aa23d89e167be7cd8f913960e2cd60e93c98fa0090c5f927eb0010c0b54bfe4196906527a0073c58b932a5aec4c2307550eb3e6098cc609b8c3300c0b424910506e1784917baf4c0c6590818a810b20c838c5000b23cba2c510b398a2061f3704a30208268098c1bdf75e1b6c70d9228b286890a4071b7a00e20803c288060577062a1b8a907ea84275a4338267d084e4c40d5e70a484134a8abe283203c3300ca3474ea002c51048621c3143063c146529d2412d821529155da19281c6f34b88256384b0c1bb4eb5bab9f6de21d1de7b5f42c0f0f75e55914e6583cac6f32b081efcf6fc0a228b0f3b6fb2521959ad58aa1958ac1d1e051ad000059227a0808196163bab706019428327905051658c0e2c161122447866eb56ff8ad42a850a8620562b29552e1c9c186bb052c5b05ab122a61ad275cfaf1f9878c7bed70f53884cd50b734ccdf3eb07275f9f5f3f28b12ec42babfe84d888db988fdddd3fbe732d723d30acbbdbbd970f605e3e209982c5911793a5d79229a92f2dc42348346e8dfd5afb854058777a767a964aa7b355b00496d4184d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4da931524daf265a5261bc9640498191222305460a4c2a0c97a452f44dee52bc5d7c8e8dd65d626e459ff706cc333ba7bd372d6e96067b498c2e8c4c4bdf41e6b773aa874ec615c5ab07a497121568a7d412a925524ba4bca4bc748acb93170f499e5f3b4079eda043aa4a8a4baa072f265b669720b524b5842887266ec0050a5e567c21c4bca185baaeb3b606897f9dcb8779e67a0455cc63a4214ccf9c35a1b33ea79c73decc7bbb6ed632a4941868d087ff5e5ae566b55a3186e2219dfabdb4a9ad3de96ca50ef503c3e2cf19b4d2aa4395d64ad408dd5dad68a573529e2c5740bbbb99b15bb1696bb593ca6fd2d9524ed952baaeb34e512aac6a6aedac656614c6485aa99c93ceba444a796fbdaa132a85063becf6cecc386cbb71521a3ba5225a69cf3c6231ccf6c0543228131aece6bc97bb5c6d3da3844631a0c12e9c7f6fb575525ae984c16446add01d979873ce792f4a030dfa703ba5d5da7ae3663dfa9c35ced9f40b2786d16aeba4b4cea4465520c3b42ccbb0ad41332616294575a041cddbdbe7adb5c6f73ae954723eaa67dfbc5da582b69414a5c2a4d3b5cbf598b5b677d6da681dc3acb591cae8734e9e74f67063b17e91527a86021bec1a9c7332563d9e714e1aa5bc9366c90109cea1c98a09e93463440169b06b90483af550a8b919b7f95d798f9e5f49c2fcf32bc92b49d1f34b0723bf7a7e25617aadb79694ce3985e49413c592fb9b52b49ef5669b4cc71c917841a2458cb1250d923927ad3588b0d65e8c86892ccb326dcbaae0384ee654b3e8baae43cdcc68914aa5522a1a2f1334d1d0d0d0d458cd186a361b366cd8a8b141c97063bbe17adcdcdc703ef1061714c77cf4d899e397095c1f1f7b7ee1a004c716bd170e40d000226987213a28799d9410816118d6052113a58b112b66e8f2820d6800a364c8bdd7060d4444dc108549982e6614399a33f040050f5ee4b09920070f527840ca21093cc0f30bc9099ee6f9854409142da41f6d7afa9f7a3dfd92461b1fcfa5d07de4e8779144e0a1230a114410a177248fb4020a2caa7045d1428a56fb8a79889228e1c00a0e2b50a205575aedce3c444c9cf8e00c2c456028c249ab1d649e08d04003248ee0e0062d28a3a565f28efaecd45e0c673a83d235ef8641e999b76215830c4ac9dcefe337ab57f5d27757caa0310e0f06a0ba549c892d29879bd6cdf5e0b27f017b00ebf4365fab1b23c0008cf3dc391c004e00e6ec21f08e8bea542a2fa1049b99148f6d2b810125a46cac8d4d1b913b33dfe6a184fa4f3c5cc2c965be70e8675c47efe8a8e1218bc643d06b3c9cbce3864ba7bce3c6a5d798001b975f08648497cef234e9e948d2491f11740c619df61b2f12619d761b2f16890568aff16cfc587d2158e3a3f9c255d33a039516d5962512581084120aca48c28915b4dae316e651804b8c2a9088b2640a16ad761e0ce89d948c534fa87f4b99a0e36f54e745979292d20f15bce8a4a7c43aed29283a576c2496528c91ca0c5c48b1620bd7122f584c1254aeb88e2881d214feb203122bb8018a962e3eb01524a8708939820692db9c7a6d846a1e338334c8e63ee66f2e157e44252c514b548a51461ebd438b8441460f5e988871a28928071ca078a10b9752d1510a3734717112440e8428630137602106941e6e208613ada206a3d31a9d8c332ab9240fb78c7c885561fb52caccc3bceb49d6913a92728ef41b1e68bc94aefa710a0d462b1189c6972e9deba8b42d1685350b152a120000001000d314000020140a8744029150281826daaefb14000d9094406a4e974743490cc3300a62083286114000310a1040081933345403445a04f33c0c1ee287358498db2ef5793266d3f48fa5cee9e013a9bac27d0d0b27c3107243f447589745d5020edbcb65b57673fa4323511c0c1e8bbd32ebfa2a2936a9f5f23998f9be5dc9ca9df374cf84d1b15702c5aa42b39955f83fe5fc443eac36533b3937676d52dd1f234118c032182a387c96eb0427ada3f169671f24cf85f3718d7f2f84da7740f5c3f9b196202a8fa47178a41308468360cbf00a613fd89c6e14de10d6959b8a80af0680116b508f00f96047b184f075540a9cf9dc7fe6210577ae874d160a75b7275b01ba365568cbcca1876eacfe7cd1ec4ddd422351521f4af412254d1678a12432448b45d9eed4dcca491932e9979906ca3c3c8b3118e60e0d70fccffa8355f61b13b09f9d12d1d424f4d15ffb0cf6add121df60f23719cafea3e22765f623c9f627f7540179cef6022e913b9cca2280110342cb48ae7728abb97b5d9291c8a7139eac6174570a6e5577151e83f7259d9c74acd3f2662d0b9572b4754906dd0ecf87c22e50708d0de20f932fe63b2bfb84eb8c3aee4390ec9e40696aaee828b075250341bd65f47dee5d51967f4f6b48584a362bcc47ea6b5c9657523f5012984bccf0ad608c910f70cdb7722ec7bae0e10b20a3a609c9a3a1458c37c6941656b383496567517927a35a5c8f02291523fc28f87889c40ff67ce7f7e2a557d5b59877ed608781e761ade641da164b39fb8944874d7b90b911625367504a860e4fa21d526ec88dd745b815644852e620bc50aa94e0532e3f1f2cf9657e1f1807271f96ae701c84d8360e277e489edaedfe1197572f6fd1ca3023b89e953b5ee7de79590d56eebb0e9acae82df5e1a47acdbd0095d49d2be1900266280eb50b81f3071ee4819303fa67557dfbeb2b07d83c296e5c519b54bbb6f0b6bde88998ac284f68f5511fdd0f9dc01eca71844958741f72948967a42f0ed97e2d905dbe4596311427dca822744f6f67ee4430175330d6851c8d3a772c297a0507ee58c6963bb5a4d31b745b032a603253a2d7f6a8943326ed47eb78b7badca915109f8c96612ee8f9ccbfdc364a6e7cc4317dcbeff9f9607e427ab067250d391689fcde257094ed789a0848212113b8134811e242ad4d591eaec96d3371f909cad517d568e2425f0ad1a00794697fa0fb9adcab668feaedc2014406f0f9ea9aff94e750268792ca1ac5ea3332f2e5e7d4b32f48b4a16aa2844359f41b31b788eac63ef8c99e3700cd91215251f415d058f319f1b0e362499f7c9666b584cc1972a61ddc070f2c3bbfc7f56f27bf80b9c2bb8b3ae17a229097f9d2f3b42677415913967eaabf941e6e1e69146ef3f8e6b48d42e1db60c56ce98a8e51738b6aa0214dcda2852b1e1aaf84e6e7fd695df16e1b67f63df89367d6971dcd36e6075eb0f0401a3a267a6da4c24dfe06f99ffe84ef0dba5323b9e64e128e4f64b7953f82c3d40f0e7f09ce32f9e345299ee45920a4b81c396321830bba951d9cef80e6c1dcdac2c47697151827de0a8227608b4141fed5f1c230a165fc2c7663fe0c872e02b1829dbb19fec7018be77a1271abc058b2fb89296da1dca0601fbf63a80c0bf3b6ba526dd72a3134e0d9a7197ea83163275e75ae4bc6ac5f4bedb8671fe15268d6a1df12fb1786246c3fec86ae32e1f9ec46606379872de85fc60f1ffe22b9978b084df804626994d97af79d594184b52ede078b61f77fa81f122e797f8d750721b9915f064955eecc6d588a7abd7442df869281d4581dc1013c2f07f0fdb375001903b99e9fa66cb152f952f17a2f0f4c6758ffb3436610749e17c131a0084a73d9904ceb157a975951c49adaa4c322426d2fdc7d8bf043766b4f21a30a68d8a82181eca87f97bd0c8429e7eae0e8c496388c85ab67ac72a825533f4f38319ad2eec8c7754d1338a209a3d2e0606120068da55e635b96004dd889536ba296ed19ccf73474f7cf8313b6a5dbf8313805fd95ff82d830abede56ea079b44ab7bce7ca5458d8077a65102a999712924de101a41668c95809c1c8c63421d8aed98533e305619f413fdafd71abafcfa840b19c417a67d61db44944c266e220e8e0c8c4301d8349ae0175b6eeca9961e74882bf060f55d79a7a55e904a3381bc4906d1a232315f5e27e1825b77d596f039d8430c21a9713cb0f7c2256f612304182b1e45796580a40feb9a00317f69924dd79ffe852a06bfd77d3ff3368c5a012645c1db990ba0ffb222950e506d50f6c9539116ee5a379cd1420a42ed0fd34886dafcbf0dec0750bb003ef4b568fe4b57a1c40316a8e1366ac36af990f8c55f38555ac741b5c5664f594ca22c2519b7afaf6f21e2eaf28f8e513e656618e8ba4fbc3508ceaa84348e5b993f1b10fc2fa65d53f255cc999b5228c682cc25fa243023d8cdeeaf5d068512f9a9b61882245fd45a42fd7f001dc188c880fbfe40b7417001ef12d9f78f2e7824aee5940f199bbfc5cd6f3d4e6017954ae5f4e1d7b40e71ed484c4652b0d3f289b504879d46ca3808b7fe02998e0b50cc2fd06c33f86261ea440b809ce81012d49e2d0d6ecd86cb142d0c4d49659847d8e0db7c2238f949031bb78a316880471c94679dfb260b3a36400ce0d36dec029be9855118bd1de8c2f221ebf979b201242e20b7ff38f4a5af132849863008bbb78473c367b8608eaa0adb0c96d750331219faacb228b69f46dbe17b410c481fe17622dce82761acd2ef213af428036dce4db4411da64b416002695527107760708918df6e0443b543ed05470f8a97dd5d2c79abf5cb9a41458ae386359f210185e4d1af50b10bf286910b554665d2a66783abd025ce6dd0afeb3f74110416685f5f55b5779434d12e89154d17562b7588f8d42745430b0cb62b0cb3c47428f43e52342bb81aa49de95f49fe495e19093954238233d265d66d126107ecdbe47e00621e4ed42ffd7f783fa411b228aa1ac177d1ecc046f4a73275fc5d76240e8c0f608bcd113ed39afd204ddd72b23790c0caec9417a4907d3b1c141bf0e5ef5a87182115408910324bbac99eae7ea4f974c3d553acd43b4f8188c24d75a1af1546fd6a9b2fccaa39171046ee309a2e2aa8c0125328af4ce47afa4c9271dc0912b30b36c8542464e54b691b3cfdac81b40c6d3f4512223d38d00ce50a11d53718c44463c3252e7fdfc58289151e72f9d1b75feecc751195dc1d7f70c293242f39f283d22dc6ec459d939f76d328b3f689fe10e00278b8cb48ec9d79091be9fc1d48945a669e8c2659acb0a276503402f11cb6eb4b1992b32c2fd0538e68539fcac308cdbabc1a4bfd862158dde0518dbf2e32881d163795ef18b9eeef32aea3f07deded25a707913af8a19d1b7183d9672d8c02aab4b9962a7c34cc1f4af3445ab8a541a1942a0bdd36f8e8cb4ed6a26585085457a373b9c0e0858a48d9d93c324ce7d85ce87caf295bb6de3b47b14534f4e133a99ea3b69449a73d4e1622edccb24bc4c10aed4bca2bcc5e76275456a6f51f7d31b3a705b29595ec027fe0e57d935fec3af748deff1283d0deef895b9467bb0e1fe95ffc63bba4aa7e1399cf2dff80eaf926bfc475ed91ad68361930efa0dbd57b9fc8468efdcddef5ee9d16959b12158b959482fcddeb6c62533c96a776ba527f8901c07b76fd7a076f3c5e9622f1d4773926f5a0655665c9c4b28a5316ad78813af5b6f653341bad923d799d97aafe1cac180e132d9983fdb507191b0be66e6c72ad9e5d038d0278f8336ea1aa2deebea1affe067e235fccc999f1d3ad38e755e641d710a234d5c9c9dd477cb774e2f12b5b046ab78dc6f4bdd3686c39e4ca54f00bb2c133471d349ef7f65a3a7d084eef38fa79b57826803545b577ab1d5cd4313876e859b300deec7a48968c638da5494631c6f3edab80e9811657c874c8c32b6c366d1ac318fc366a3e440bbcb0c329406e9ebdc85f8611f66cca339862366511ecf41b3a8c7edc06414e371643eba311d01266ff4b11df83a3d44180877d9a0296c11f13869f13b07033f18fc647ed4e31c35138d318e9b8be23887cd4719a70326a28cdfb136fba28de110d3e9234e40784b263ed0c3b774b8a50be1484ce503537adfdbd64c705789447d5f3690158475a4f7ee87e2d802750ab8283581551b00ab86cc90abc20d1da340ca9957de6922fd9424efc9c6d5111b05ed59b69d678687b5e4de6d2d05dcd80bbfc1d5c48daa4affab797e5ab40df4804b1ca463ae9dfc63313c241c7dbc8d854a4eca23e01f47d127e7f7b65296a5416fda9885ce48d114f27ad026efb91f2c966c01f28737386b2f46b6cd9b5aea7454df5e5667119751ddea298583388f0dacad8b5acb5617864767bd9a7b2839dabdedf1fcbf571c5d93cca58823df18503499f90abea8a41d1be00cdd5060aaec07e5aff3b29b8753a1d5161b363b0878fb23a96b1f5ab3e12200cd09258de88faafefa07a1dc8da5274bd7de4110f7c30a51d2fb2c3809d791f9e2102ed408fb15689fb4997ff7088ae7ebc84215447c809b06f4ffb6c2f2cfc8c2f5552233e41bff26961d79b5c198b8fcd8497df459caaba1718ba04d8ff91aafa0d2aa989250b5e06946f6a31d7928241e5ecc089371372bdf7b02e7f32a58fa5486f0200000ad839c6ff834e5142b18cc22838d314c43b87b6de9a1e5e40ba1095793251e511e481905420ceae168631e63ec373bcdb77eb32101c0b00a83bafe57b28847ae0fb0db1ecd66b697b00d1ca9352d40dce5be33679f86ba977219b2eda62119463e564acd16cf14624fe3f2bd26974d84a5187d1d4fc8d06f08f8e27f48beae5388b2a7020e7b6556fef95e051b5933b149a0d546b3201c7681323be81316578f740261bd117978f35945f2e6f25aa8281531027ec8055b08f228dc6c5b38011393f3985e8cf0bd07ed155f22861301e8a7cd67e92cced9a8b08027b5edb3a63b456b1ccf116bbb2ab9206a96f62715c99ef28c867972f0e2cd1a01ea87dac4f69b95a4e6a2b57c027b0c9416fc6d7e2a4e584688aacee56781572438cbb441345628dc6e99b860fcb559f76409ca6bbc82968e67684db412b4341950b2a8e6f6b59501be182e72508635d73b2e28272e5a1f152b798383e11e4934de179933304c2f2d3b2659d001db58795039545785560496bbd01935842435ae57d9b971699d765a0484aec18a05c0f27ba9893a0c14c1d7f310cee030a118d0419d6ba9635739532d071febe662c2b50acb63b832c73a6e1506f12175fdbda28a96bd24e048732a9425b2123213382dfb501a9467e90689b6a2f70c82a9b85af1665df16e093c42ff51780c7ff757b017e7be0cf9973a806058bd09906a7ffba130816755a42f0fdd48150de93b36ca4041c04e54d65894183b52a9534aa4848e5e0614632f713c5f883a7ccb79657fd999297b1d42a38d179c123274dfcc9d13bbcc26db9831ededeaeb0c97c1bc09547945cb4146e5f9d60d6b983dfc8a7a9ad9c6debcdaead240f212f1984b53aaba6a7c6c1624b0d61f416ee44c0bc1e5db488ef60b4f53b900bcda9c82ce66d14891b676e43539f3a95ad70442fb1cff014d3c053c1667bb4008893c1043ffea4b03c3a4ebdcb1ae7f75b397b8bf867aac36c7cae813290a1e173f8a3bf7ffe3fc69f32bd1f1e0efc25a7bad9601a2c5ce53a457c2f79d3534c04d46cf4cd16bbc2b95d7368f5a7c11b6fbcf597a7f6e95055fd015d2a2a1c68e25e4a060795d9d2b3b993b28ee56b8be2188d78a2ac9dd8d54f4dc247a206fcddc6910bedbbd8665ea8d069516b0dfaa32e7ccaa0a0c17add8fedb38c31e5574715a2f3e5cd2832d355f7dae50d0a6fe9814f78248880b009502a99616a1c8c475a65d2b0f6ad1a0d3684fe5e0c5fb6441a5dda5c9b6346b44ed25b03de58c507f3956fb02ac241155413b78d0d3c0f54137643909510739be38a962f926084b0b01522aa35781a83e84f70f89677f2a26653a05c00575b437a875cf311d5514b00831e52ca8b7a7e598505f631f34c333338edecfebe6f041b98f69675900d45619e0269b59af076d2a3485ba4d461817d6f5c716868e49cc51e661222913bbcd2713f7763b5bcb35d7713bdc2646db90ab285cb49d58e5aeed345a6d8d59740439f44e12000be562fb0c51ea16103864b0a179417b7f7949ec7463f5640d5f4d5a46f81ae314a49b6bca2c31a354c42a3e1ec1eb8f1cc149064196c97426826f3047122386c8ebaaf8b2abbb9b236778e818dcb6d79cf5b3bd158e1e80ac7369c2acde02121e66d889bb7be48cd678ae8a74ecb95dcde35c1d79b8e9ccb35432b2ad91f07045573467ad7f6bd0936b64fca298f3e91b703e5074a8a992de7836cc6c9235a40107482430ad9c30719c7183867657827090ef041e2290862dabdd63d44248c50906dd67e1bd2bb2d5e25002ba742e268f4a900e0314357c40cb8913b571381fc5b3df696328c142a131ab8fa45a94a2e06a93bfb62a1c31714dee7f2c30031f1c889ad167f9aa77eacfb7303b641c1e57a1b65c02082c4a41ebbb02fb1b240d33cf4ecf9330ccb8609023314d789ac024100b06a85f524e074c7af2f84c1f6644a613ac59192b111fdd3ab27e6d468222ebb88ead33754e9dd5e975acebc83501d4790510c5ef5ecbc5c01dd8b081f87cd3730146bf76f8f94e478e2adc22ef43e823213a6cd307b97ca8f27336ec688c09898f59855d9d53167d7118ea7c356d6029f395455f767ed343c61f94a6751815244a56e945ca08a5d606478d8a00b81aa6d8c01226057b19ecd7e0381b2bb80b57855f16fe79bb445f0a5ec050662b53e1522b30cc8a75253683a8b40251212240641f46b50d8d2a2e7000be64e3df4a5cece9df2c6f5ed1b40f9741e9bf0763af845c6ea142b26f64d8ea85e596c55eab7d66cab97be7dc3cbb9044ecef97191a11df0f2ca08995148745ca9c4385b8e2dbca9bde60119695daccdc1246f7ffd5aaf27a24c2be76b791b52584e1934470149f30010f09fe0e00f453d288ef327b26c0a7e5f1c857efb4d94d776ebad3987702f822e07398285ffb5b781eef65b84f86675a0e42849e41dc86999d9925d2c5cda8d1eda336981159b1b8b8a179da2ece6a9f1290f50b49cb1173c955f33d11e91d0e3e28943b1f0f42cbd0a592abe87773e72133df574f8619a1c89cb34c779061c2b6d396951063a58faeaf4a0ddd84a8ef1e978953dddae162470416cd81456431b6131d1f41d866438bb57143570ce9d9d83f1a1d729fb8e56549f97a99eadfce35ee8c17d2d3419383a9119c8326a8e204dc65d642db2842ffd02244b8b651cf1ef7c042fe1416213ede84a7d3fd58a34257993e65fb05058238c16edd69530a56721f77f3385c749645f91037c1d51ea4cbd0c27da745e815f760621c79649dcdc05437ab246bc12ff154389144bd8707ade87311ed09bbbc98955fcfad7cd0c43e20062024b9416e6f0acb64c7f670616056da7181d022198e4841bd8a07c8f1b13fe5e9b3089902f3873d5e10b410d4efe537cc701fbca11cf5a42d552862bbb01d4cb4ff8a473efc4f37f20348616f062f427ea5e44ca8f813652e178efe9c73014bdebb7a8b22c2a1af23cf21a252d170673f7cb2a2037c509eae537495cec997b8c7edd2d16956a2210fa6c7e9eacfd3ac9f70ffc8c282c0d2c645705bcea406be3072d4e8a7752f1d74e141ee3ab1d41333ef42d2f7c1625d1dd6041dee00d1b7aea1224820e3b32325f33028ccac4b2ee4e91a8dcd78c8763ef2de4d7731917c87272cd6e2868e0bc4c90d8fc3dd01d8143f2caa5438fa8242eff2054a7cb51648065ead0bb497add9b95885c15c4d1ecdd954957c85e861cba57e7dfdd914f1f03c507c39344f0215618a639dc9b663e7e638c5366fceef2bddf74278eeb92ba3c30eecc8afa3d8ee09cb4bc4c4968fafb5654e342be5b0e62f69bab429513efe5413fe7681cb32827767490d6e1bb4946aca02eda3b0efbbc2aa62020b877e322065295ee049574d59b71f01b0e4d8e4ff1c58b8ef4ecaf3a137d5c2aeaac69079bff7181be9d4a3b10aa9e9e5c245092e995296b0770f08b8f08a52f949ed155e8f3b876f5e8457e1de9614c2a066df1fa1ef96f2dd49730394081a97d128ab493469c6c6cd68f95df87944341cd1e17046509f2eb90d3761085314a873d64498b8dc3c3eba1fa51b6ad62b1c6315ce93f0d2f9c1d8f6160bbc6801066ed765a7045f4a33ae9a04ae223c9778396d85d39aa8fc8f3b6c51a84a1173a8c5abeb7a376862b07b54083d38c12097276a0ba738ab799b4076e553b0490cf160b291abe0af05ce83150c00a49c66662956110b6a575e14e51ee5952ecacbca28ef5acf2445e1ae49191e99b17c9639b26abeb59be0b9cc1d79fe50bd657dfa19807bd6ffa6e98e199ff7a6e23feda38ba925388da01aedd6000de4b65ea5db78ad7e3b27fa438baedbd98c7ccc1863aa30369a4c9f14b736d474e9f80a6c45d3e88b85abb0eaa0bceb94760f6fa04a6b064644cf855e6577862529673829b93032b55c5c65e25977f71f11d3f87655398266a44134e89f486061d4e6b408e15a97bab1c77209d0323f04d9c9d711ba1d28008d7804f88ef081cc5c5841292bc88ddf8a6d897de82a55f938b898e4a515b42f7970f13ff260b8e539a54ecfa624ea4a8c2ec1534ec00cfbd09c723c60ab8de78e3f2d0e39317957190f8de478e0b6d2a739bee858f6f55d65300ce598db0f2b541114ff57c6bb4a61d4007d7bac70f678900b2ef119535c1592b810df74551fe4aa2e22b302ca22d3b5c7c64d17fb97a317faa0ab0e3587582cc04aa945e7a3a906a9243ab844fe42ffb889d037c34e5f497a385d6e4461b9afaae8bf03625d946b4e8aa4f1c1736b5cd6de193aa37a06ae7e4f5c934186d6bcd21895c6bd114294a04c6bf2d0b64b52f237c668171c86b859cdc1207f557231b2e8f24c3710b2e2ca28253c1e8643532fe22b5a64ac7671d4384b199835371df124603c321bb9a00ad91e2655a627c5ba5fd48a7f87b7b1eee12865829ee8d0cfcb94932cb5cbc4d820242f05034aa281295ae89aa6174c96c4869bc8391001f4e9028a212ca2fd440d2574283f81a06cda854a3fd6a45863fabb0e70a4e8f63828c38ad9b8391e11c1ad01ea23819041664b882e1f51e8dcf8a4afeaf531dae637ab75356e4ceaa6c705292331f106ebd5b853c966640283025b39ce808ae5734d9d29b03e95195b82d591f7d515650ebb0e1f82b9a37bd681f5caf8bc50627ae17858bea5673caea7b7ff0213cb2203bef568916c4145fca543c8bbb4bff756573a99c92e6eed047862fcca742863e201aefd0b71e9d5ebdd50e590cacc536246d78c0dd10aa343682cd0bf630f3a1f52b861fe5243fde480513a625ff32478c1f34864c019f44134aec444af7aa6dabcf0a3a41b008f34c2ca79c383309258b8603892617381581a39dc012f028f83b0fd003bdec556b302924ee6ce0e0c4912a56da6d3151d270331e81a19de5fd1fd241383afa15c8b6ccfd3a979bc21021ad84d44aaa5e43d345e8bd8c51fd861a8b8cfb955cd8019eff9ecd5cbde8d28f2432054903e8a2dc7d3a20062e60bd31c6ce93da7dac27c1d4e8235d6dd2a650937b43d312b0a064b87d4e5809f4a6a235575890e0b8530908a0fbd9616a3ce558a20c3fa9bdc3ac38784b95a8377b7fcc0b1501d5715f08834af2f4177aef75a8a7a6e9d4e999475f9ed3e18fc345f4b43d0d923da3359dee309687d59eab6faafa54ccf82dc6e575789cd6e035baadb1b42f55fdf60ec426d574a6b9691310f096ce92c87d966323807033c1ccbd677a9d491009243c988281a73ba548c9609d22c65424c45435bff0d989f540841916cda246460d202380a1919436e0da079604bf3a67c82e982ae8668387d94ade5d82c440f864644ee3f06b6946999f1f830a85f4b0d8d456e8e8519483dca40d458daf467afa592b9854ecaa52c0db85ceb342894d29827665033a127c96e1070b6d56b69a6e222f2fcc36bdcfe5f7a2d0d026e21fca342efa2596b412a4818ee16bd0a67c250bbcdc485a9d7d249352b2fdb8c4307c090bda4a12bfd58d10793ae9089907a2db5bafe542c5a238b5e4b8b57284b557d3b46e61e6122c3d8f9d72ce56a50522cfb72eb31298e8be94cdd9f1c6811b102582438f2fda8adc7627a887a2d95b63046462401a9b3472b0b33839eda0a8e20596741a71ebe0e1ac1fac2d5ad60cc709d39ae031341043210860932362768b05bb263280cc7b5b4bc350f5d690f8ac2b2bad43431c9f4985f83ebaf95aea38e042628a9e23bc56b69919b90b36a192dcc5cc4b72cf26f44591a734507afb999696c1611801988be336e15ca8c277bc89ced923ef844e874c34491e1156c62774bcab6c6cf1be9e2098cfe13381776fa438647c44aa70452d48b8289d7d2d29f0c210834eb5ab92fadd2decb575ab9416e6cc825a58b326a24d987d1336e7a63ab561f7d391af95b458348f078d23c6f75994f02afa592bcc21639bbd6d7502caabb62e81181df05e8c76b8c406ea9e56aed7758428b9071d52499569c702970c4b6bfdc1ade2d2d351848f93a06b0171ef263f844249f26df0129d24623589473ec006bfb02122e1d20b7d848d31cfb89bf8d4d7f507fb7b4990f90847d65e9146fc273e0b6cd9781d02d358aa9c0a1a81dce9216f25a7ba582b390079332d1a619c510734b998d3b915fe6625e83b5b6e35ba61d07ad6d496de92b75ffb8d96f10ab7766e596cefd76fbe0b7a52f785dfc39ae097c2cdc36863752e596facc62c38c3b7652bbd9109afbec6294cd17bad27e30df7dd9087d08bd2809766a9781c985431144c3beaae0ecfd899558d04964284eebed33696705aa8713545453ca70875937f29c986dfa2be368165060ddfc17f6462ddda3bcf877f1b72f5a899642f7fbe1cf5ebb61be39852e2d5b0763e68193ee211db7b0923c695736c1bd76c765062d5b7471dfe1cfba40a3244a223a98e721812c5d63c6c4f0b51b3dec2ce286f972517267338c1f008916936fb9a114beafc4a764ce4187f19b741573feabab72defcf8bd89e0546fe8f244be76b9f14bd67ab6e80277edae8e471d49f2b51b5a91703efca7f59c4d1ad71661a98e0f68e9e91640f5b5eb0d4f70fc2763e9c14ff13bed361059f9f0b9555d859066488a53a6bedaf832abbd80844ec85ac546dcab7edb7c56ad7cccba354f43c581be29edab0d5985a1bc578bc0237d821845945c63d39ce3dc69a52e280b13b213bc5651607a7cb12f7a32b53c56a5bd8eb00729893b2355982193e611345e6c8fc79dd804e4501fd62629099ed8416b5d4145aea1a6cae02c4c7bf10dbb1a26c7fe3535b94dd3eaef880e85710d0ad18977298844710ad23a1349dc3a2d3dc8713bc065f2a7e6e8652e8e172d7bc05342f6ec5e7cd90e459325f38878db787b5b60097be028983bae5b668db448b5071198cb42617b1e2118160eaeedea2378bbe6c1664a672b4ffdfedfd992a5bdc39be69242157af1598fbe35ebc74bdef2cf3d749c636240cb641500480af28496052ff4b1172f86897ef25f580c86a3fa9a581fb5219ae640464c30e7e32a65eb0b266c723c2289c3afddca4630119761b941e5f4a7ab28e26b21a95843e010c251556bb7fff0f0258de703b56d12d3356b1ef4993fa709ab86edec48b9bcc5d4d057054c2327e6bc03514929e582116002356069ac3ec2baa620b38d60ab49f6dccfb04a94e8174d481cdaff0d5b900c199462d9dba5468567f23907f7b7d90980e659616c3e7110aa2e13ccb9224080bac0cda9ec6dd1a630cff397451e5cf17748f2ea16d8e93e4cf839bf015b5d504f3b57e3785e0fb1bbf026951511a0c6d373d14dc022c36f3fdb96c8bce069210b12ef3572392e6f305872830f4fce3c06f1d8e2de288f12ac85477616158c4e7d8cc875f7d99674de1ae1c6883e28207431b9577824cad219d27866e8ee06aada1114bd4ad599ec811730a494370c2f18187e4a1fb0a684a59aa2ae7e871333a6ff64f5db8142116dad6e9d7b0be7e761b6054d6938424bd110befee6743909b9d301a14e4982b2d299ac459679a77569f5c64c0f5f23e935398907b966c34589248cc1c4b68db744ca0c683da1b585fc8648507abc7e07e790a70f0f54d986f0c89dbdbd74d4dbeb9260ef7b9e649f26d51fa8343f0af2c2d79a57e2f18327a7ea02438ec04ddf3de23ec7b76393097aeeded9bde3c468cb1a74ba848e97514248481eb2d3a89136847abdb47246787202ce89bb36360167353b42bda449debd3e2a02d10d61a7f55f56898e2641567cf5581efe94fee0bbaff7332ea39a81cdcd4210159fc55d57f8daaae082bb3ca6a7c2bb7c2fc561a0bc08905371c10fc0a430ad3f3f2497a29ef9f4d7f1e835ad9ff31650019241f29b9cb7fe905654833828a12863554c6c2cefe931dd02ab84984572a08e010af963f6c2dd5c4d49603cda4036b3fb1d40d6291183a5991e61285b93ffc18c5cc18e83abeb7c3d12cb103ee50c4b22b23ae0c833ffb2a3d3ce0764163db187164575d4c90a675ad1d31b2e6e2643e87179bedd927a74171c32be03fb437338bd801048e9da72f5af318b52279e94928413f97ddaced1089825cc552de32e34409ae5fba6020d1e88769596febdb1aec2a686e7553ac1aa42d22e6f3c6c7e7618424fd0f4353ab9191d878a274c2763d6d121870ca81bb64cd877ce656fa778b6a0044dce5c9a507a19d217ed706d99e25f51ca25260c659942f01c0d2866adfa9e99b275a70229204292c62dd532b483b644d0dd8c5f1804246cdcbe99980870f97afaa32815b7b0a4fbb0948a048d59f35fdf2a3db0e97cf1ba3c5ad23ea4c8418521bb9da5c3a612c4544e6cd2c47373df9e5b10dcc44987fdc8709c25e789132af86f8ff93935569088e364e582c7e175f18091591c2ef1557984358e9ed6560523b3c424c42c313b2968116bdc9f82c181dd0eeaa4c0199bc74b4bbabfa9dcdf01b8340b9d023926e64dd68569611732a5155561cd73223debbbae11855846c48855fde0d0863224c71c9f4e18694371d485523233a717b3957ac2d52bd11b2823f026b023c7893628cb716b0fc4f20d11adf14c8c1aab80c9c066731ffb8e22a61da26d105e4bc1a73add08d7233e7812d94632946939a321510b1cd19ba45b570df10f41dfc0f0904211fed88f1bb08514a2c4a1b57821f78307e08262753c74bccf67e934c076e593fd001600931aef5127cb60beb42bcbef9e36035ac2553691e54e44c7668427c996a4d68a2296440825dd052ae9214579c6906c774b86bad5d3eda908ac4443080f013ed0efebe7d0f20f54681b6e52153cc7692b28db82fb38d4e8b168b90aa10274668274a3e4c9cf59a91f20f891111ada7c318bbfa86feeb7ffaa5db2b0dbfd328c3d453f92a63715ce6a03dc0a2c6e4fa366e1428298a75b0046b35117d6a73d59b95b1e9a6463eabe9150388ad4f16511ee80846461ae56d58a1dd9ba333cd7e5204c7637bc02eb81d86e5292af50472b13cd10e0bcc3b87ee3cf9f8f2884d9ca98603dde60c278573507462a23a862aa26ac798f6d9e27d84026ad1ac73196fdbe0a66a3a48ea2c23b40b306053da06b438a795b2e22b13d111ea2b0a75e17f9d8994e62d3358f1adf9317da0a9a2830d85aaa52fa737b771b77c95efe3cc827d0c9711e3f3bff9bc584fcffcc5e5a14fe58a8b6a27fbe07911bfe23d8875fceacd768ae3ae8cfcef0c9a6427dc0c1bacc2810dfe2d954b45f4cf070cb38d301e0cfa917edcf96c33e8af1aa9e60261a5f5513fcb51cd73a7290557daeacb93129a83ea1c1c176b49c2dcce70dc28bd6eab1b06ef86b5cdd7d21a9105dbe59aefcbd505fbfb9a64c38ad75cbee79fb302ef4af528168d8a056d1c8e55294bf376af7781f1111f7db507ac3a284e0aaa2639e54e3e2bd9a28f4b680ef4ce101a7bf4d876fd6a3b4ff5f047ce7f2c40b7d7714d75c62de0ecc84f21b1deaf8795cb6963b34738c8007887a4ce1828e920bb6b28b885083261f6cf38901fa3514d4294a8de561fb88b21605a1ae047f046504fa5c9f4956a98e9e4179399dea9170b3b7a6c9ae6faa0eb4f998a7dc4c4386a06213141f5b6252be7f0e401b0563039a79c3d6d42bf6cbd334366771665bcf28e6abc051c873243d283d900eb3da8d243d0d285cc220af3eabc465e415b295542745fdcd42b7113cb4c936e2359061ca2e813815d33a04502792ab953e0962daeb32cc3ee6814498aff7b5af7686ff4f3b1a3bc1386daa1b05408597f22a2c0a59c0da0b20cf1456ba32eb7fd850bb64429b8671c19dfdce0b159b0950474e02685eac871d52d60e33d25a7d2cb369587c1b8d147bec2c2b7d6d0e71b45037be9d392df196ccf839e021b3abcdba538efac37574ac56376da4629b5196d44b840e7557bf764b94546cd523fbc0544af4759a7561d8fa651db72c3bd16c59028ca0a5b51b213c696c97eb692e977438259f5cef678e104a09d48cb0a9512e8fe70d26130aa278ffff1906f240b241d6703ad69506441c964d3d63e490fae1aaf418246b5d6764b17e262c563be67588fa57d9f22903056cc6a865af857d228781238b5732647af0635ed133121f710d8b1e1616f1fea05b5ff0112844c18472c262381e6d3661396797ea3f225451fb43f73f76755044bd0180ec40424795c22551bb25b4728b4fc5b176cc20cf341579e4f3153f4cffee1ea18875d76234fa77ee231b20ca8eb8c36bcca8993c5384c72c9ae54f3f83e9d30e3059d8d0f2da08f454217337caec8fa1c0af17b1b3c47e47bd2986b4880332fd4fae05918cca01e12020cac814a069f98fe2e14da14ddfea6be27a282d2bc60671439a12306fd9945fc5a1c31ae4c66049c883bec70a059a42442349cdb4bb406a32d5ec0fe7cbd1d82d8652a85017cee5b0c844dd572bff36eb9b07b04210660524e1ecd90f3d082c8eed4eea446a43ece7e9d024b602f02b689f5a72874ea86f08be1e4a1c85bd662e606559fd059a67942757672b019e518a9157a564b2e9022c68f165229778159249888aa85492e0c651613ca1f4fd4d4e2ec6f48e61e49d8699a21e3aff671e09259785f1689638abe20360f73eb44b4d18831c3298081dee1fcfd80d7309257125dc9c9871bff5c7959ce2d6375346f772429e61f7a7dd7ed8f6f9bf322a9f5e7ab3f67320fcf775429a75af88eb6fdefc3a0e086964d250f770c6505361cc145828dc8e0fc5fec74b8f0859c4b239aafb87e0cef567b8600d7ae36d3ae2f74821f53dfbae5b077120a0af8f74231ef7ef79818a4264297fe8aa8e4fa1822189f2654cd5909041120c3f0b515f6c59cfb856acbdca8e6421c1446c682258d7dd6c70569d82012d604149ca163afbd0582544f3368f25ce6717d3e98a22ef6a52911b64e4c4e65191393914a2bc77c6c2e88e880cf1cd1ceecf5df5d12cfe872aa65fcd8b45d67f33bcf53aea9ff11ed70a6c47fc892bd1fdf370a25ab1666cad6a18d694cc60dd823cb9b37fcc3aaa01301e8f40617e7ab5905b6d0b346442701d64dc254036a1d675768915d0bdbf9a316e89bc063124ba500148623c7f1dc1e7fa31a024444518f2453ec60d3e3718697336de7eef26bdbcd3d18b1dc0d92bd5c72e5e26a790f2641756b7f3ef7c43c3d3eb50475e436ae586e0f0c17e01c349d2e84bbfbcce17fa253f7a3d9f13f87231e3377760473f72ad62a109a4c05a6965950b1857fc1f1c83ab5682ca5d166baf8cf817fcee050ef138974d803462b2f21406df191d06ef7bc3749947f9d3a01bead17444ec79db2951132f0c5cae574d1bf7562fc0ff91fc9f46552714fa8b8530f9d51d03025e9a9112819c65a12992cbf74f5a116684011bd57ce249e6250f13399fcd415d054f65d2346431a0ae7eaf29f91f70ad98e174f77c370d082635ead62ab7188257e43100a73f3761e3fd42a6db23dde509ea58c1cc45014da470da2d0cfd42642ac4cea32e09582e7476589d3c9b1f05ae45b34226b20247ca36c1b3684e1f960d5598fef29cd1e446bbd29e8693313be27f27c7dc851e607ccfe2a83523e2640fc462e8718c46be61a3a0f8eac4d1cf3cac9f1b7d42b20b9dcd69114c16ea75c59e849afdb5f8ac1454e8984b352077f834538ebdd607bad33243dc43627fd56e4b95fef9b0db5012507c70d4cd05c4b0644a4a2989f36c2786bf2e7138ef1d9f4acfd8cd64a5f7c07e0bbba1e3cd2d432db1a7919948e58ac4d02d7f973cb3a1da68bdf339c2822baa3b5542f29b281ef37297f4db23b96bd7f6ca253a28f15af26e302384bfca4039fa89ca0362ea5ab4ed1a082d239a53bca1aa00f8bbc846e07ad0b2223ea04bd492606daa0e0240ac4a45d694f4cff2b98c29b6d5777d49b35f7d8b4248d7533573d2f856077ed7e2af460d0d3f46655d94a4bc8c6e102ff253909429e607c4946d46bf7b2eb1ef718a245b32941e8e94ebaf2d86412c561549ced05ad1a67b47f8799f211515805580d41a384494165e480f052d128f186b930d5c0697d7ac9be852df6098e1fe40d54a8e06b71681d5dd886ed7821f873e609aa2c8d6dc5fee11deac1da18ddefce5d5984d1860fa799985e07a01b7d5d3632c24009863d405ef8b19de4e9214126714f04073f0dab82a5e32d9c084187d16e93db35a6c577e6f1ca96199fa4f209b2dd548e1e7412d2146920937f044ec4e07567aa7f170d3d22382ff2cb0c841bebdf565491e5c3e4421ab5ffd9640d927d10bb14b2a31f8a827f5e29a6a8dbc11381fe26e2651974cd0df383d80b19cb1e922e75cf65dd973476902e6843d9a6766f74ea1f4d0ff67a0a2348c8e10c9f6037d12a087eece0583e9ba7d97d7ec421c97211133364fad0348a38e85054c3ac017f01f4bc7093db2a8828605096473f38d6736e1cf69f781022950f103021495c8e950a97ca7da8bcc93194914006145135a7fbbe28cb2b1c6a0fd5da15899d43113c7d6c641caac053627418fba7954222cfa59f6e87d5edc9b4919c4136c99b8b2c432ccba2a3bf5d626bbbed4d532921763e69659a7171cf8fae2cb30a86458c3eb4fe7651695404e1044dcd55413712cfe80b9d97ab622d5965abee04fa85f99e1ae92af0746ff7b86e2167fafbf18deaadfbc82c41a4211d36c6d079c998b754858cd0d94cdbae933fcae35b5532c2766a5fc14123c0e23cd344c5a28c5f74d683e429cbfe146fca72473a4388da00f95a8a98f74eb5c090f0b6f3b1a4ba2df4f8b8c2c17539957a12bb6be19f80813814b6508515a10a6a00ba0f23644520630541ceeec537f0c2bb2669c598a0f8008cc6aecbcba4d89306cb2a6885e62c75c4d7361f1957ab56c9e8eb042b608b15de00b86a0bfd73050acf7d2e8d23a3be037aee778f5e2ae2a892df36fcd5a41251ef71667ecd336424b48d06fb8f00fa88966c72610813fd84b9c03fff437893241295f87cda2e2803cbd215b29fd23bcd54e3ff86b6a012a5998524bcf9673fabd7a5aae3df6ed660978fca7543b86e35570a1211b938722d17f31f161e344f7be2b522f6c6620ff61e111323fe61d13dee240329e9f7b7576ed01a560086d416ec6f5cc404ce3768d021a1458370405d6d7ff70c13c3d60ba41f21a17de241905acd18b5d28e63fadd37509c18b8361e0fc971be6ed51ee4de2a6adb2a2afacaa43e32933443c6928a24f76eac7fa547232c6828ad01ca8e80e4dfc675085d223c48a0ba7199ff69bdec89f5ad0e734fa032d2b8a4dc63ae16a07add9acf81beda718f5de5487aa84ccde4e300809a0d1f502179566e114c13fdec26cd4eed858387b87b4ad1901382d15db4d30314effa6c63459c8d016314ba4c9ffcdd26cb806415e5efefd32463e7c4d56d0acbe6170f72789e5acbedb8f6d4561fde20f7bb5120225eb4b2ac98d1ba22e7a90dad3d3d012b4daa3699a55bda8db8fddf45e7d4a584bbc111713090f8e830636c6e6007df4c9828cadd93ca2848c9240ae6709518c48bd65148e0e21c654bf6d6751cf23241306ba2283aae3099e9415991affdabf67b1e4bd88495dec3cbc3eb13fd6f2e242ecc56f4e62048bec880174b23040e8e7b52141424f8cb88d5d1f91890c61dbfc4f8d69d9208fbe662b36b0db2dda30a232f2e805c2fd1feba65183998d5b69910e7db7885b7c9de13b9f91f4e3a33b8be723a2d58e18cdc11a54ee506fd83a6c76e1f497e743972d0d78c466c909ee15decb55e24dd4f9d6ca77830885ef1535f79e58d1cfc4e5440338e1fb18c03cdbc24718aee180b2290b545a5b7cedd025f79b955738833f12a7a4a9b7dbbf0996fcb51a0072002eab143f4ba79d44c797c4284ad984e5da2828c9747a94b8d9fc8ee3e5f07f4fc5293bd3d97d39bdc4d71f1708897a389887d5f4f8cc966c60110f3be08b06774fc82b8369bfc9ed7d9a4c20fa5a76290480608137554c86f431f5d4c710df1ee11786d1548451a1d97af93370f81c654be5a84b7c1e085404c91069f03068cd4df29920becf0654c8be5f06ce91337a2b03bf730032d78d6d11c00f93824d5f44de8e2eac15a5ebe40dce76903bb7913071d7ee514f80787e23aa4813d738a1b724079502a8f57339b86febc1ebb29565783951a3f898268e0e1fc098338b924b1ae91dd58cdb9dd24140a0494132a3e0518037ad2631542809e9141cc151dc7e9989c8320d0bccaa07c71990eee5294a0a58d2deef7fc68b66f3876c969c80c55cc86675f96576ad7377abb704a786dc3cfb409db9198001e8b2dc1395a7188d39ab6e5693af8f656f77ef9334ecee14bbf98be763007444de1aa26218b5af1350f23c70f5ab44bfabeef23518cff471684800eef57b22209a094032a073f8a7892275ff77ee27416b325b34dec52a61df73b8b954eda104e4a09d85b08adbde6a01e51375f952c66edc13cffce7991a35469eb33e15edbb5e273d9fca93e3c7d859f7b5c58c18339e14b66d949d257a98f44b6e97b124f5b035864232c8a5c48731f9d73fc45de54e6be314ce1f0d98212816d7bcfa81a6838960f0e3de3fcf7563149dee9a0f335f005e2cd9fd7a6368b80820ce0c09bfa28d25173fbfd8de8224902001022b1c096c67f1e2d807a5a59ed21918470514436ceea27d25bb17f600122e8d7a8628881becc21a9e341db577886a71d17e25727141d4caf76f7d65726d131b2b70d5a765a2a407da2ffb1224b80209d7be72ea4e86636996e712dcd912251710a08cb2a54acdcbe5c45c3146c89eae0462464bc683bb77bb339d89af791ec91680700248df16ffc054722649abff22667f510b3498b73517a251e358bec101146dbe419891f6aea7c261e17d4830d4056b8f7fc4bcd9e2d1cc91d3f1e664ed4ffd613409bf85f39b2e483755f0b0cc922a8656bdc82e374ba54717479f3be3e88f79419d05332ed69910ee2d94daa2dffd3648bbf5793992884db861b7d9835508bd53018957d72c30666e817276315f45c354a8741f6206020cf723f374e9d4ef430ade860f7a5f5ad8f0fb9ce1f0b37253fa6bbb1ca80429346624c6181e14ef307457c6ee03982aaf180b6fb02628c2a70f0e7f124093b346cf84afd7b7d15ad44754493c7ee1fd60f5968051bbb89225b7b6a173955dc1d15f601ccdc87e55bff853a9961cacf9d9889842000aec8ce84b89e901912b38e217b56064341c0d375e49d00495049389581dfbda17020f4403abec0cceb74f960faa1030bcb86653dbd154838384120e4cb211a315ca1da642678a328c351fe0cc6a3b8df7b70871ae2c090f72da838fc4e29daa5e2adad4eee1fafd3eed26782dec9fbc1c01360ca751f7da202e41204858f4f928c55e34bca9a9ff1b408063fbd7044e34ef1491dc0fad3442c7799f0441951bb9d1e79eedcdfe65c1d93829979fb00a2cbc2b9f227f601764a231b8497b79e62285203a2f06b03cfb113ae089ee2eecc2dca0749f705f259e3c9801c03ad5255ab772994a34db5b464b7feb53540abb52ae2abc7fabfa90af04e924b1eac17a6c6e996d6315ec8ebba72a96abaeffc0bf5f1c892f058e1b412e2ecc20c9dfb7cc439099f98f6514e4f4a0d4f4d3720e8e5c7583af8b92da7d4c28800415297d73a5baae81cef339297c4c482b0471e8a7ee74cc10efec988b1b7783b7cb7167eca1dc6f27173e516cbcfc1d4433e7471f00d2bf236e497d28ecfe87ddee8129ebebff21e94d20d9fc29607f1de89f9df991de8aac71b7c872a45fda9c9407117ee36fe119687d862ba9b1d5cd552073247e367b21658ef3ead6dd60b3de67334edbec630815ed6ced8ff2ad3afd2f646a235e470b828ce7276c7f044f6bc9a6b84582232c701907f9cfc2ad37066c5e3ea64ca61671e20fab290a930c08aa0c5acb4061acdb2944d379b1ff41235185708001a4d050ea34d711362548e0881b2e50c7a423e71c09267cbbfde84c5b38319e17b6237ac14f175557bd5c7ffa71e5a7aceaed77700cce76242bab5c676a6bb759ed6c2c217fccdf01168e92b448aa265d09e82ee39589f93e00388ad65712d1d8fda697429a753b99e244e0e64d97ebc010b0d65dfb9b85d5c0bad261d761143fb6633a66edd4bd4e72e16512dbf4195af84eadb689714ea480baae261218ac8f4791479be0f7bacd9aca58f654af31bda89d5e79a4645638deef0d46eb8d0f0d21445eb45b3d815beaef8be9a1b0f5114a6c7ceab2a735a7eed1f62a02456b5aaebfced217d515a55f980c218ecadf0771890e24618b627a91d9d75eae61f5bf3f487bd9a68d0119864d6fe7eefe449fd07394187340433baf4e262ce571ba5d1852e0491b330f8a907648192e31c09fda2dae4d1b24d63cf666c0774698a4b9aafd84fff2670f83dd1992669d6cc5443f993745981992e837d2c59fe661ef77b94f2025f8c2f449957123c343a567e8275304ebe58d36a0c69e7c9070d14c0edb5db66c2e8a549ff8db1a64d67d32d18c82b8ccbd3b7597deb4ea29589208ecaaad40c30f167aace242bc8356704d0d3b775a66ecd640ff0f94fd772fb7fd0beb742561a158e79f6586b329da65b2e6f8e2102e6b64f2d4d5a6605184b6be2b857ea6e45515d17344780f2ea291b471d4b8c05ae21533cf0699b1b030e3892e7596b370127ed65d1ebf80fe47fc3baaef240a61af0bd5131836d4de92007311dd6b0cb10d92e2b05c6c943fcae9792a3e70d58eab19a89e206086f13f808a963fd3f4ada42b0cc3d50066e66b9a1393f89741df8e30251811d7215044dc45c23f780aa6d0c4271463108150c3c69aad4a97618cbe9917e2e82e29d2f57703b902888240ea38a2ab6abcfceb1984c2c3625d1ea8283a7c194a17a71319a5cd7efb313665cac0baa5fc91aac3dd8906db85b5084c9bba32f91ae8921a929ed9eb0a5f3470e0242f70a5abdd26017ede3c92ce3870252a361206324aeb1603daf016464270e5a0c8b9f63b46725cbd9ce8b20bcf317924ecf098a7fbb47c765ac9d745c64ac719691f13b32c1e50b8493f0b24ea616017063289b4344001c61573ead0ba550a9f3310d8c5a2ab64a7fc41ef9f1d2f269c1ceb2f47302cad0d9939db26a11db7cd4ca17bea6c28ee1bfa0a2cd88e1ed868013268fcd697f818a5f5b361957df573f7a935fa82023ac9e30c2c5d218edc72b9863e89fa0a083c30e2846fce84d59ca5aeed217e7ae524b29c0eb6af3b07a81366c090f614e197e19f5f47237f056f84a596ac13d9e6e307c9b1954be0bfcc1a78c5a78de4da327023463d71707929592a3d35143dc849972fc9dd6017533939a40d740270a5321566e666cc20f3532a86a8200e8cbc4babbeceb300d2434f3c525cc41fa8d49d5064c0815a94e247a2b4cc28dbded8ea078e2ea85a44507228d2fe1a7fd862c173662ae4a3b5b1f9d05276d2abd118c9f3848b9193bf9cbbbc1997eed5ba98bd924990a4a56048246e057505cf84a3684f9bd661338ea81fec30d50be4ccf1b36f4ba3841d3285d691a8178652020dc3006a87a16c1088617c3d62f86a96920e045a78883c16538e7448b35abbdc17d147551c2bd4022f84e92149234976e610d5ae032ef3148384ff9196dd9ec7457b3b5cda904206ac3bc376842a52764c156d850405557d43ea0b1b5b3a1940610b82a9c05e2ee4daab7884d18b60617ed010742fc479c49ac338c729c19c86f0517e1e3c68d4faf08cbec1eec372b136de459b61a525901833899c14ccf27b5705303f6f49e79e94f740dde241973179f479cd351bb701a8cf044bc2f9bf57f468806555b38c9e55eefd437acc8b1cd9b2ecfd9ba2f46f77fa7378e218256ad2e9ad40f509430220ecc6ab6f675cd1c28fef0e8c99d5f63dfc291527724786d1cac26b68ba629e917a7cdb7398a754632fe540b07d1d490c233f4a20896faedcd07d0e69565cc281962f3e6b05486000cec5d4132e809b3e759b547e0a005557aeb09d5e87727d812a797aac86953d71ecacf29730dc3cb24f408c9bb6970f168cdd9e63c0969c80babcb1e808da469069c6a5e1ee015987f04abd7417df1633afc9d0df47f9e563783d0d4e69ff43f36613fee40eaa1f8b5649b756673c59707e316f51fd378694391a746a22c72c401ba6b2445bab824f00f69dc9de8e7b8ba115d80e8f4029d8d8c6a7ecc94daf5924761f0fc00921fd6dd492ec52d21e85205c2dfda72ed09acab46db2422a94711989b394dae81c2e604633e1028de65e01a12fdd6b5e2e4f2c1e58e22c0304c45b9a9490e12b43381a32a25b4f34cc87ceed2621fb45923420193481fbd050ac93eda9982fd0fcce1b332c88041fd41e88859f04520e6bc78b63120629a0e3a5f9ed1702587b00071480242e44a007e911d3056e271bcafd03cb94146bba9c5ded8b29711af054d402e023feff6bb498ca1324c01bc223e859a988b3e21f1d9ad1bd8a7b8b82593240f0464641a6a586b9d2d4c93a2f47752ace9e2ad5b0298e33c4bf96f208045c00e3e8b63b6ea41efe851070f99b65e375e9d0f4975f3bd4d22baf4f2e1f8bda2371964bf0cdb724cd7a8c4a1a5157c2e8254d72d92c7b6adb48d5ce64a6f21b335541930abb681f9529118196047276f3a876e1b9c2a50912d2f3ab3471ccc30762bf0c3f0c9cfb52a57878ddcf2494813ccbfb0fcfc1fef336feced1abf5a1acf791fd69948d8f9c2dfaa41e621726306ce04a8e5b16e43cfd1aace7fd45730f14d324417c7c40fcee22240308ecd8c065f5dab86ab83b645a56f5666d209469086fa570ca3eb2e3ab4c947d69dd44ed13fa55aecd71a692c978642628c3b5424bba500ffcf28cb721fcff08fe8c573dd97164dfcc3048207f66e872e0d6b2fc8e013d789631e3505a5ba684311c1439bdbc2c4ad852b4cc0ce91fe6302d9329321aaebd480e4faf2539b7f11a569396f56aee7c6a8825501af023694dede57f995809fcfac82c9ca21edffe009a8ea344574f778000fa28f429778e8ced69fc830e0b0c73b760dd1909ec36ce2e9856ab43eb38f6d954f15d567fa7b62bf8622c57871d73f23d0a647420e548eed81849c1b1815b40fbdecaf095d57d5956ed28a159c5497790de88b69f78b51bc63034b15515f94128bc9133b3c687123cfad3f80103710d22be745193d1e32acfe6803fbf7d014219cfea985683d69d57b2b90abc55eb7ef64214f3155b37f253138535a6e2a7c2e8a22f6e22f4fa1659e4be99dbf4e97225acc60944b48b37ea7e55953eea273ca895f7b1b6fe2176ea71d73fd8529e6799e0e9b1937d4654e77bf1dd2e18d7f2b3ef644b23517bb34cad048aa2ba3d27faa725d5ba1fa008fdb272f77913b6f43a789210ca5c7980969eeebc18de0cb23369fe57f1ef99ede6ccbd342022652a159e1211bd0fbf10c931997fe18decac6bde0979fbf17a6c94675e586483a0fcdd535dde3bca7a19a0c9dddffb0617927b7ff28a6f619c4388ad19549063376292146df6f4203f8031c9897794b1381e44a822f180722c2781f40aeb4e61759582f42636667af96682ee9ad994f73475cd5a95230fe502488d9ecf5853416b1eb223e5b5d959778c7e3e7c049787f32f3d2955269cc210dc5a7b5ce683118566106985882e5bd62a6efca0e2f27b229e0b0e75508d46c6293ba9b2d79b6894ecc5a7b1954650a5cf53c4c309a3cee3c3df3099ebd80441bf4bcb69a824e0bc60c9bdfff28e6173ab5da911e7c4d15eac1effe81c0e1b570a50b5f7f432f48124a1a6016044ce33d511c292452f9d508c8f72ed044b46c4dde9dc52f4549d944d620c03a3887596c6b4f5fc261082498f595e0de231bc61cd9e989a1948721da1e589345a5698981ed959d0ef7cf811dbb740b07475bc5d1d2beb3bd20c6928e68772dce4ea5dc38f2048f8c149c3195a83020a1570317978afd6c8f3b65d432448b23b0e67c3642f29ed9acb145108eec8f87e831d324cd8e07bb790540c5f3b3001b8b60d38cdfb8da403b1de387584e1d537c8d03c2eda837b0eee7086aad26097f0964ee4f7ed84c48acb6f6b5a1a17f2a4e65a93bc42d4f210843166644366baed011bc4ebce8f39c23e026fe141d792ae41b7e087492883983a4ce6fa9592a92b01c7589e8d5c0d26e8e017f983dabfa9aa54b033f986cb2561b7a9f1bbd28ce7030fe21670335dbb18538fc569a6d8c26612953001d9ff1d7f2796777203f1a701eaea00b3171697a13768a44dc14c0a339df20c124717343169742eb56f25489515f0729c4c99cee8f64f9f48eb95af8e9d1aade340dfa47489958400e2830b0951d5c6d4cda29da882841c04437ad833d97d82f146a9f365a44df1f0a5cff66cf72f3482f76691676a3542be3b0dc791ca4a39df39e96e29e872689bde07f2d001c5bef8247927d9d487ace8156a43054a74abe1e4ee8d19c46e918ab6119ee5bb1727a8cb47ca37dc5d36050f999040a95bc1702594d554fa684c28d6677f366d4e777e3751fbb9662fef840a7eac45bee1962fe085b6cd5705bd7c6f003494950a32a183a8d9ee4bc4a4702a0d5648fc6e9bff9d2ca30301349497d0c2461721db9542a5bfe825015d8e5ba259cb06266581f94896e532ff3fb8e87c76c81b42bbf3d94af92b36b460cd92c0e791c95d996ebeb32a9672f283099484623afac60f73a0ede4e256a1dc6df6e5a8e741a1876324a2e22254a2d6f2b724b86929335c7089f3ca9d17037a6d836d69c9b5a8a4aca0b4edfda9892b962d807cea1c439324c1bb8959fec5732666fd7a5f7b69eb19443d7ba11ab62ede751ee155a2a218f30cf13718faa0eef3f538e2f33f4890616225652b305bf4430eb3b31efb0794c7c0090653df6c3ec8f22e1bcfa128d927277c35f5b330e229826f766ef93a14ce2b3c306a6239339c2151384444d19437067c47ab0b8f09e2dffcc31daed5e0247cede14db87a48f9b82ff8acb14307554e67c3bc0cb0d7c9d1d97b4e657a6d11ab00f3d3867f93daddc659048f90b8bb9365a79ee05001ec5369fb6d00dbfec7db0d0ae1e559e2bf4a29f4f19eea507ce1110948c1e9bbc396c30055a3673899593bf27a69e9b8bd12e4148989af1add1ef9972dbaf3c19b3dc9f616f36dfcd34d0dca143ecc923cc16ee05f5c5861d8ffe89892f450d2927fa62b416273b7987a361ba3739bb1477d528d21abf98cb0a8467476d0756fce2b3e40c8d2ccc285f67b299d7d46f228040c32f304c688d01c67e0cae4b5786f0ca5aa52e6f312d0ee9a15feea3d290dc2ad59c97f3db39220dd1b58291bb99610f2fc34f4ff44f56ac3e3a65184572d1d4cf206e8e9ab6726231b6330328a6883c9618645ca3bf06cd2cebff10391117178203e6b3d6a03ed93cf26e0c8c700e0327eded34f473bfde7d97c31e04c4d5ce3d307f6aaf2acfd7d19c5d34c24c5dc9fe1512bfaa67b326527f7b37dd3bde6d7d58248a1ad6ea465468be95072ee3855f92e40bab3cab122a0c4ea34140c066bfb6cc70ab091061423712789593db376786af79c4481f4b34932a77c1181745c81461e44b57778c887ce28809e1b42147ac1383a48896ab5b6acc16d38c67abbdefd74ce70b18aaa60ff07a78020864d7b56224cf8600f92ccf39220dd1b582916342a61b4eea9c5f7ef593c2e5a9dce490066baef8bd6b0cd2f6237deb94e4e428f2726c67e841cf617a33fb79cdf0e6b140bfe350072b73d727065ebae7011a8da948bac7c73223042d2adf210945fccfb03b2e8acf8555ddd9f9efa174a04afd96a703c9e31deed1920877323ecf36f2a6a835fca033c970dfeaf3b35768394827c5e25801ec37f76f24ebd1f5ae54469279a2896ffb618fc28d10069413e1a9190ae42fd74528ee75d8b7711abd25a305dd1b0260406d07fd8240ecaad612e521f479f55a20f951c9471940c7e61825c99f758ce95ce6457d1455e90c17531baacce11796f23fc405a0733b39953ceec7f0baf088005ce2e6a1a3653cb2468ce033a4a4c31b8771d1925f786ecd3bc98afea23a1fc9b51da33e1de92139375ff8211a6fd12bbcc94203034c555c5508ea728b67413f04fe523574604d28a68a5ad48c514d6ff310553f1db5e7db154da6c6570afe112db4b84868cf4ccbf0860f75ca9ca25f00fd77118ec89e1f9c2a6490242e310e69eb865bf6750c62c77e8ec96bbb15770c8236d84a302feb52beca12be7388a72427d5ee86d6fb16adaa98c3359d707126925a8469dff1805d29c8c1cfc65e27fc7afccea150165c3f3684ff3abe93040e479a4945f8845b015a150b00bdb8caa8bb0693e34a438954ec8e0945252c687d475ffb1f80a6ed94f502854dea6a37db9d65b9be428ded687a6e0cc4f84b669a5e7b4416170dc4e9e686f1b9799e0d8a0325b9f8ce39b4e898e86926c1b4ccb51c23607dd83b7a3e18adfd0e68697202aa1d51721d4e4777dcf13f1d3c971e40026938c2707084db095187810123b669f383bb6032510dcabd49cc0a7e04f5aac7c026bef1c1f9222a6665630212810f49da702c322696a17dde5abde9301396625ea1e44707851e8d8b9d9607d39c87f914ca5f9bd00d0dc419ee0ba46b7c5abb1d83077a445e383b13d625a092e8aa3955d393e030ff45913be6887eb8c4fd0ed815da6a2159e77b7550f9a2b17d52169242b9797f2ae69a986d59323cee2228095ee378c54822e104fad7717cd43883a8d3e9f134b7edc26a27528d8ede873246439c2a93575280457fa453b164717d4c7239d18804768f566917eb14c0154ed020af5e5655d300ed24a07d28e18257f64caf7b0dac85b482be946e3c72341cc14fd5dc6dc63d736870d9fa1902d41a303621bc2afbd08956128846b74ceef88bc84ca45876021bc5464c10130175172b92f1b76231c7e9384ecbdf796524a99a4940178067706ef052f84734a930a02a54aac8a97346b523bc6ac88e00b3da1832753a8286285128e5a7812a507fcaf77fdd72a2b4883af094f428a3021e4c8891529280f5594546192668def18b3b2829522255861058512acb83bc6ac0459a314c687342b20f68810179008a11243971c70a02ca822a44a0a693255baa24a0969d6548162673bc6aa8081c90006fbd47c9f0f5310712b7c285364850f618658e1c312265841bd35311f8af0018b3d4283060d9aeac3931dbdec18eb010a7b53fee0afdf0206e6095dbb7ef3357b66cf7c0cdac824cbec48b738bd27625488d832a96801428a9831307440494d0e6960986249540aa63099c2c3cd5ff672e6b216b28c264d61614a0c4f984ad20ef353232ebe179f6085fcdd4b8504fbde7befbd374c4eed18a342444c6c8a9a5d778c4d39d3c3162aa11a080948f1918278f0883f3507b6fc191b9e3ef383a4d458124d2985c8b62cde98cc355f5913d9bfbc77fd6f643c1b82284f9b466162d30ce36b6b0b241baa94995282982a8068932955c829503bef189bc2d405e60218ec53e2fb923c1d794904894d29e26534344111030f452041840a3a486142ca982ccbb22c3b42068dcb9318285e808cc1b12ceb0163dcad10d3746982099a294680f09283941aa4243da5a4b02045862731af7701910394233151b44059628cbb90811d6e58220463b4a449a23844391325cd939818941df6b6630c8a92a83ddf5b2287531271b0f581fda15b1ff85b9bc3293ad3e73ffe53025130fb0ffbbe492e0212e88748b0ef5fa926c1ea381510ca295bbebf954edfea56042450eb03fb0e731667b29c5172d298dcf1c996f5e77fe0f347fd49e7dfaba7aedfcaa144615567ef896842f0f101fdfa1ff8d7cf513f761fb43ea83fecd7568efbd8470eac8d80ae8ede23bf95237acf1011100940b1d3d1b23a87fcb863886af7ef43020673b966f5907072ff4d15a5016402bac42f44c490d44cd99c4e22311e80c478388ab1200496d21bf6fc2895d43a9d06159071c2b48b622a28b2a7d725cf77d9cf58b2f6716b2fff6a3788caad7632329ad9b8f76547e3a5ae0606040cf6c5be6ffac4e933df6a8c2db6d8628b2db68faf0eb238f419f623c5d32768fec5f75a5b2ba5ee73d2d0bf3ec6189c3f3f7641f3dd9f26b1c548a5044a428248d2972200ec184b7292a4e463cedec7e37d3cde7cd52a46377fd9cb39a359966519959de92bb8e9cb5ed2d1a5d40b2c662fb8884887234e78c195353b3ce9b0a4490a9a40c9b22ccbaa0a2688819035406a302a13842a6932439324576c93169ac070a5e9f5aea42245b1a42027ccdb044d0a4b530c69e284d7a3264094b0d4044b90a5a658132e9bee186b9265c6909e90c844b1c5d9c4040d93225e30c617e32018e326449a185d6902778c2145417272c39473cbcff45b37b694d47bb0620506b3e25971b9aac400dd617126468f31c8165d95fb0b723a7ced9b776431c9da67cfe197f7cc2bef6f3cbb7b8ed3dc9e52b61c3009f2806dc901d86f60e8dadbf621cfdebee973f35bfe2df5db8df72b30fcbdfa18be026f3c1c9cf7e11b477b600346255c98f774cd17c6da4b2d63d4f763f896d9a83995c1165ddbbdf75e7c6374da5107ddc7dbbd110c3dd833ce38e38c334e8f05597b5a238740b7be3152a743b6e8f2a044fbf2f35690a1605ec54a553ab14939a73ba5b5cad82c27ff7632bc26396a8f498e96871cbfa6bac9f946b59ae1e9137aad3a628fe108db5d8b01ec75a595ee3ad145a5434e9f3acf7c3975a7765e4f070bc2235d2f07c7a92fba88df63d32842b4628cb10db1906f51dc123ac1a11e42af3d9be4d2d46174dad303ea9247848a50d29d34c04bcaf263b4b65a5bf1520b1564f9f3f5eea5204beaae3d2959be87030f1878698bae942a620ca305e813b4a1d4e66717124ddf9d6c80d2eb07c6ecd140b9552990c52473efdd077620076ee07687e5703909b2ba93bfd83122073ba20bf9fb05a3c5f4e15e7bef79793ee4306f0ecbb089350f57535665ef915dc6817277208b494ea538fff13caf878d83317db2c79fbd7f039cfc6b6cdf384ef3f0802ec1ec9257daf5c3d7377f6a784f658d20df67b5905937e4398f28f197457a58ad6a90c524d7d81139d8bebea794c30805c205a60ff7b5e61e42218fd7960f983e97d3616cea645c2d44a593e882c52487f2e8084b7944a57e0fa16af5f449327d421e47d3e7c8f4b15f5f22f100468c8a358fb884e9f6264facf5a3d235da28e7e1e0524e2929952da86e6da4d7d20be280936c3168a5b5520f76d494564a2b8c0a783bd4fa723dc9f2eb4b199366d693ec94d2fa6195533c25edf0c9f6f7624828b9b6bfd53a8840b43db0c19e40f62df8dee3453d22c89fcf7a92a3f77898b78b403fa4da031b6cf9f25da9464dd3344dd3341b58cbb0165f04a28d27e8f9acf3a9bbfff49f58bbd7da5a29759f130cebdfcfb2d7344a3f86f54520daf46b266f095ab00489223b8c4a4a39b0ecd9b49a825ee0e75fc9e90a4cb64fe4f07ffafbea893c3f7c49a7c09c80c19ab8f8de1b3bc2867d2f13348aef8816bc04382b9265d9921392d30a32cda986cca904d90985d41735dc97289c1d634700d9e1c3322856517841e30585a8cf29cbb22c6ba5f065872f5bf4172317991c2f2b25160ef8f1cd5167440a4610592d118513d3d6d931e60483ce0802ec70044892154071668a28464c15196a78e107234878d9a20bb667485d73c25e4a2e2c2e17e7c59ff883992247543186e98b1440f379e2cf43a5b042112d2aa0b0022029a5119bfb36411cfe6d0e06d19f5ce73f411d34bfe5da06d126da4e9f9b60cbc67ce9208ef95287410e06d19f74be5fb1ada4c8e17ff8c977c15e3e9eaf4c399ab3e3ace4054e5a9cb030b18ac229e654858925a0603028a8ef83828a1ea3cb21df8bdc227469d5629715d8f75f99122a37d898eeecfeb595f6149139bc4ac281749181095dc070e9a2e568c5a58b148cb10973c7581728be436c6df9ab2f4d514d25188131be26e01f36f6026435c4170d768c7589a14b0b3bccaf82fa62be5c7e8475c9b1857318df0f298db6be5c2991a38ceec447c4f7c19860b0e84d1a2fae2ea0b24a292b15a3fa210169be9c14a493c6a32d30d89659575ba6cf07dd10a246410498bab9f5b7f689f6563b08c8355b6aae5b2de5b9b7cb61f00336564b99c698bb460ef0fff51b20d836e80eb25f27579dd618d3fe7b9e4faa8eee4363f4193b9831fafc187dc613d4a744346dfabe554a3f8073f5a77abace3ace9734407c229713862d99a07698b7071e54415365872ff68cd13eb53671beb8a79ff7542a829ae1377210b53acfd72ae64f564f563cac7458e5b082b282b2c261b5e487f9e4878d02ab64b2602d0b638e1809f1039216274056695b2e4ef64a490ddbacf6e20cc759edc5378699489c66b5d7c6596d8d686452984ae38e5109cd8cab2a92cea774c627c232231363f45a6badb6d6ea313a95814a9f2bbcf2e81e698cee91f2b05959278dd1a37b5ce1e0eed5dd7d8554bd56a71edd635512a34b77269224897131b281d5142e2c7049e15a25f9d1295c5088712982c97fd7ab05be18df1e32de3136841a2a4358f179f9f5ae21a8d8e1c3e6144794c0575286b8b28760f2c2102fbcb042015d2979b121846c89ba012aae6ec8f23dc4f2099625a7b4566b2fa618fb941867d5da7b31ce2ec659a66d38d3b46de3b82e954a651bc7755d2aa5ea5229952a671b7a73e353dedc646ad03861590a0306cb524a95b38d0d963dff66e9c697ecf9389ec4a39ee7537a8e248acc0c23e774a7b466cee6e60607c7f36e381ccf5bad58ac9c8f7e9f4ff979dc8ac5cac9f93e9d9cefd3d1d9d969f1501e1e9f92c77576765a2d9e261e161a500d34f02935884c3b5c8bc7795838a88117d180737003324fff7dcac7e2d4f4643a9949468e641e9940d4a0710a0306cb929244e2541ac9229288f49f617408cd5774d221e774a7b462ccf3a0d6000080cb150001500108c0a71400b6b9c1c1f1bcd58a954373727cca1c0c009cf297d39dd25a2dadd6de8b71a6514df32935ede22cd3b48deb68d7f9945da76d1cd775a9549752a972b6b1b9c1a138383e250e4eb6b9b9c1c1f1bc158bb2583e258bb562e5e47c9f8ece4e8bb65a3e65abb5ad380759b09ccf419d8e86dc3c3b7467c7a7dcd9c9525f74313f9cf25f45c971be5c6677a8092c896d51024366e524c7d816a8d816262d59c0ac5490636c4b524c0b546ccb123236d860c36a8658961c5634c4b2dc90454996255968d8f5c8cdd404595c58c9902585adaf50c1b124794ffccf2f389aff7ad70bca7bfeb34c08a79d655996bd2fb6648524e71d6342601142e9d610449520a6ecf061f8668940d000e2de5b83ac9c92a848a894209604c1e4098780c6100410efa956050b0414104e94000918dc2b0c94042438ba9244092f5c693ae10517ae44b9b2835c89206b3bc6ae2ca17105c95d8de0f5aea5132cc9b0c387113152c5d50a6668fca0a62b52b42482bd62613ef17d93aaf07dee2b14be5591efb362081543f0187c31b6122688153045415629ac4eb0524496ec7d3c2b2094523c24caa65409cda63ac469aeaddec7e35909c28a103466e5062b33ec3007419ac6db73253e22187f9f8b7502a52e9775efe677ad2930c4a9d46b291dd29d7a9c5781e16f1c2ec5b22187af17f55f2d60f5a5fd0d48e74b7b1bd09b2fed33f8d185f62ab00335199ab62f73e5e64bc9ad64a9c34ce767f3b116b3ac026563736deebdf76d3430fcad69391f7e5be3d99af61eebb5f7a6cfeab5d5cedbd87c0cb701573b3a3a3a3a1ff8009005c6f9b2f915c862d2005049ea61fe937fe24feaf0b78f3a7c6557e94d6b9628f32a450ce9e63a90e2346c8554a052406e367b2ba15e4ecff461a15487de9e990ea5751a378d513e738be822c79aac018c730e13a15e4ecf04833a9891400165c4055fa08a9428628771028325db6887cd76d0df6194bdbc675217d5de8b870524cb8f30fc44bf023b1cf494a8919c52ce59ed04adc62e1793f7b96a583f564db3fce9da5107fd44a5f813c444554e2e3b58254869c482180c88c49c9001ab496605a151af18b1a6416cf29d78ba3bc69cf0b2e7734e2c394166cf5964db549352ccd5f9b2421e058c991d634d346d04ec186be2051b840bb81ccb60ed90e37c6d19fae3a74332fdaa310b879c43c7f4911dc83d778c350166d34f9a1ccb84ac7dc8ed1d1609323717307fdba4512aa55b1fccef5e02f3bb27da1ca881e1081b673f3a5d4ffa1097dca21641caf021c16deb7edb01e9eb80f43dd04196917dbf75c3ff3ecf5f192d0743ff1cfa31bac0efaee50ffd3327fb3e6d22c9e6de7fbb9ced64b4dec16fc3913df7ae43a28ec67dd66720eb6fc020ee6f3e839ef72bb0d5fab8756c1e83add6ef7cdcb1a3c13dcf73cfa35b2d3d8368afbe7563e76d7e27763982482022311e00e7b32cfb9dd57f600e1874f33163e990fb6c057ada0562efa97f0306656f9335104650aad335d3f8673743db4490e0f62e14b5b510b417b27b83daae377fcd3ffb58134bfb3efeeb17cfc0fafeec52d1457d0ace17bbd6bfb922e5778939edbbbbcbea306058779fb3fef40f6f217729bfb084b84b272fa644d1a8285a8646ed8a849289b48c3432326222890b7430da5269c775bf8e75cb067efa34282d2304557a8af1b3f771e07c0dcc14c4db67a07cbbbd06e6e7c0f99beabbedb78dea905a7087bfef70b7bfc3ddfe0ef72319187435f7fa99fd8cdab876b5ee6b462fd5eeab2868a3bb90ba535a6ba532fc116e2f3483ba27615730f4bdeda0a13462bb97db4bfff07ead1a6bae85e6764dbfdbea7ff79283c0b5adfbf2b7faf5774c1fab65adaa0fa591aaa361bfeaa0fadda73a1cdca66feb6f54a54349f3ec3a1aa1e43a1c1cd5a14aca904a7b73bb2fa595de6e7b22d200f56b47c33efecdc61ddbcb94ecacb49d0ea2bfbdbd5af512055d43a1fa9b0ea29994990ee5b4b1c9a76fbbaf5fbf769ac5992ce45b6e5f3f7be2c0e83df58336ad3ded70705bdaec774c1fa38dadb5ba6624c86c6edbf78a640927506a369416a824504f7bdb5cd474450ef247a51a9e0b05508e7e074e07b3d7c01a35780dac2f77de82f341f80d588438ccaec16f1b77efbd60906ae3389e9757c5d132b283ce55be71aadf42588fb5d65a9d54a7fa3ee4f122e4f1e2d341f7556f3fa22112fc2999aafda99a9c49cdeca0693f2767ee9ca83d250b9bf6ecfa5127fe8c503f1c70569d13f27811f27891f3f543a159674493e323f80f7ee1bc715927f55196719eeffbfa1304caf3bf010bddd23950ee6fdfbe25233ba05176871bfcfc9046edaa83e4e778e5d13a3aa55b2acde43c55ebbc06e0175dd84f7534fc8354a9efdc5a6c7fb32cb495cfa35b5ac7e5a73ebb3f6ba57d89a3e64c4ac663bcfc4732711fe6e01a38bf4d0cff9149de435fa5439c94b399fc4786f11efa4caee9cd8738ccde87dfcfeac3677df882b90eabe6f16283acd7eabd0f4df41e7c7508db12fb8736202d8371cedf575d873c5e481527bfbe5f390295f7fbfe5faf11704eced5da69191e2f36f7218f175bf59ad0dcdc87748736835f7421b90f52713f82ffe848167a32c8e3c5be2f5a4676c0d13251b48c3480d57402a94429d73f7c69becf8a504a19ce7cdf1918ccfdccc72b5c6024892533208281704192159a2b9e9a36dd31964412f95287922651b45bd02b7bfe7b479f969e947684514a3fc60ae40e081f5fb0d6b0d66cf1468d136d29a5acaa6cbb1b730604ba1b16d0e00ea23febc4e193049b7c273bc6ce1ced173bc66260b47de41c636caa9899a82d34b78fbb4568516badb6d65a6badf5a66cad4db62e1721d1fa5a8973d925d086ff82dc7ce1cf39ca5bbe5f8454ed87588baeeaca39410e3f9e77bd2cf52c9fb0cd901bb7eebd17b39ec8b017303ca037efb055f5b7b95d84e43407869cbda834a16c3617214dff22a4f843fedb6e90a839521a63d49e8b90aa1ef240df54009843439656bc83280d10fef62accec183b43a4003bc6aa589a2de6cb9f35831cbe5e2d601fdf4aad84c6ce2cd9158cb1334ee6d4619b21b7ccf16e33e48ed9bf0849fe9007425ae5ee86cf5a6b9010f1bdd7cc399243bc7110ab8979647ff325a59cae654ad4669898d162e6893ad9e274313cd06b2bf539cd149911e7ec7d3c2d885171851921741e31c5e0c4ce62200391212aa8204505a61b7808c31443d6f294b56c0b8409270471d2449813c6a0e0062e45a8a0324411154ca8a8e1fbf27d302718ac09066bfa3e56d30cf2d46790164c61668a2147102142418a2a94666892822e2ad02d54b460440b62524421c50c64c822c55394145aa4208325cb8d129b22710426040cf605f17db1588c75250a48142eb096581881a989a72a98a89451d21265c4aac2ba32801d63514ea2987c56be0ff6030ca60483297d9f126c0a0c46250a2b4a1156024919a8288a5c9afd8fed07928e4dc73b84a423dbb6f9dbe3681da9773d243ff5d977cf224db6397bcf7dfa58fb6f93f52bd6733f84a4c3fbf94348ad08484a5f3e8ed691f3ae87fc73748ed54b3d045b3d4baff4500cad87a61e7aefb9efe9fb38f51db86d7a08090747ebd03e755fdbf4500fefb93f3fcbf4d4431288369a2ff5d010920ef9530f011942d291bdd44320643fd4bd0a963f02dd7c04ba361f81640402d2c00874030e21e9d8de460f49a0edb9cfe08fecf1abc01f483a322d9178cf7dfc3f2250c7220da7372d9390ecfb2caec8fac71092042210d63fea47a05026edfb19188162501c6d9d1d635024cdd47f20812a905422612392f4e2c0ea818cd198242c1fc824614961f530a6688c0c31e00c110366873bc6c43ce11d63629a6262ccd013b63837fa3ee2cb2a750836b41c9b7e08ef4392507dd8098966d8f4a5129bea185db80cafac224f346df9f1a9035ad07710876ef9d3185fd15b98726ed95e9ba57edddd350e2be599af39e9a44edf411f0c883c3edd65ac26a0fe298cb9fb99cdb2ec661acf177e7b310679b8f06f9b04af94944a1f0cb8af5d189c06992ea8a56ad9eeb05ec835fc07e39cbfefb11c1d914ba68fdc1ec0542304f768fa4c22ac1c72fc501e4d9ce7744d9f0ce47e8b1d966098b7fcf6ed9e5e99b7cf787cfbcacb738bc0a1ec7db782313c03abb5b682747e943678be24b7428e2e554a5d675dfb0707df2de78cfa9e4fe59a6c6ad87cbdaeb49b460eeaa696523c9f87f3e60f8f377d78e6cbad4441e4206ecab3fd43a0fe39ecb1b399b93de79641b96d5460ca661b0786dcb674dbde47dcb4375f5986f1b46004a38ba6e65d618bfe03042884451caa48dfff93564616921cc2b00b69a129f102ec8734c4d66e5672c0b583e44f1732cb088b868c67a5b4fab36ce0a1f9ed0c98a27a084dbc244fda23852cf70d89e876105bd09b3d84e64f9e727eac2539fc670a33637435a49452c2d8f463a0907bd03fa24f8d44171cc5a90ff10e954ac78ef9ca315f527e1fd3c7346b609cefebf0f582ddf9d3feec600021b90d0963631a581ad9f35948aca21c02dde1e7d269d47c39cf95d153df7c4d18dff765423cb1b4ebab3cc87d3e88fe7d1bd7856cc07cc9387d62e4407291832a5949b20bc67cbdf0a082fe5ce44004ff8b31e843aec1a0a67d96dd17b23b0b41c39fdd8f9d03ae0e6b572386ec6644e7a28b17d14598da52868de8427e2542d57159b66defe1485d0bd53ddf070326514ace2b5415df9c7959e420b3cf812cce64ee33954a0b398dd4fb487d74219f033d2559a3bbba9d1df51f0ab4a1c09a216329ebae0f5e30831c80edaa8360b26953d94881d9f3586ffa6023dbbf75237bfffc18ffe67d8c2e7070c030fbec6fc2ecf1134eb6bff744925d39dcc9b09f81dd7bdce397a1f7f3e97b87c3dfd3990e53dcec64bcc4f918336bd94f656ff3f96fc010ff7c1bb075a37efefa59b7ecb76ea45efbd46baf653f5ff5415c9bc0a8742d3845a974886800000000008315000020100a8703e270482898c6ca683e14000c788a3c82549809439120c7501404310cc420080311400c20c618c39c72c878009e3a49d06b239f4e6fc96794c4007ede770ffc09b1fcaadb95003a04b996ae8d0baf0977c373246d66ac1161ec605bc92043f7d8a4035843593d1aa5860ca9588e6beaefda424f6f9b554961eac8568a0b46adc95e8999120512214d29c8b1aac2f8309859aa3a49863cf3b1ce3f6358dbb7d4f40fc95c9cab2779e30eafaaa72c6c4782e48b9be2f833e3ac433339182465060eb76accf559521ed0d0b0226c46eb9bca082550985091107008fad6f59b027e52c1646786578beb5a2e97eb0e08fee0c24640195be0a26b2b898d4a396952d72571825e2d818bba389ec1bc3dfb6a1b0bc7d7c6019cf4486af3a10bfae6537c0f0853db4955f7b8efb6d80bbc79c5052f98a2969faf74c9a8b7a0ab83b773d8388c8014a87effc74a6c4ebda745dd59e635f045ce9a89f4c8a79a2cb43e0b3c74957bf9d39581b1ee12a15d81113e299ab0e905b5a0f994e82b359fedee9680b7f2d9426b7b78852656dcf74c9666b539e3742e564db2433602bb7ea33c60f036a8e23c442665922247eaa738711599a85a2839de3f42dce24b12b8c8c233a7cdf23b273a7227f664ac0d5ade691b789dc989212728d3ad1ea250e450b90f20086aad042cb3599e90e24d95a465ade152b632247139de59ccb8511a875b27b4bb66a314bb4ffbe7b21e4a3947b5a358b7abd78338bfadadf890366abd1b36b2abc7384b0b4bf606195eb949645c9c937fedf650ce1c7ea4eb6dcb3636001c0aca08c1200812cb2f3efaa2282b436e48c30af1b1df1b1d86a59cb18454e29dc0a4602b9b20f6508dca4f02a077f6f7eac732d06a4fac8d97654f2e0bd63eb7bd96d68f30c6142f093c54fec4305ae8470593bf4812142cfeda5ed362c53ab9cbffd0a1fe46fa6039dd805c96233a012b3a606fb9498384b10ccb4d46ccedc28e70f33c185aa7295905047328d50f08965be34b4e911c99f2fea067817ac89352ad1ec55a4a56a90fec443ad19215bc8c83810931b8d82c64dc599bb68e8e952a0ad4631b4e554bded344e9ac82ce677a9945ae28e09a30fe9a7178404112632e6a05ed5f7ff96c25ca8a373745a5b41bd402138d2288e108c014df897c325b664c9d37ac67d6590865f431774242bf91bdfe89afda21a9c2e0b5b1ca27601e0eecc5e594e6a6b236cec0c61a4c1b196f7c2f2f2ab3b948a87382dd6b2f45a10236777cd4ed93d572b1b85fe9a11db6a7d3850c5983065a6a6691cbeb3c76ec37ca9614101026ebfe7434b4ac730264ebb0665191a7b003cc0717fd9a0edf607ffb75a4e81c4be5065dbfdd18475b4fb407508d4bfded94cd11bee42e86d6cbcfd9d4438acea487213526c877d6650ee0525060523cca66236bae5cb3cb618e585ce7985e6cee6ef4381088c90d1be4e8302ec90a688a3bd417f9f26b0e1f74a94752d8e2eb1c5d744186d65007081b2239c4e1244b21d013c35072969058735232b442184bb8b1d0d1117b5976c29b5b5da8d7b35574fc181d6522762c40e2cf14807dad980e5e2419845fbc22b0be2bb5e59b45742f9f1dc36dab6bfd3096a04be62ca14b7619cab65e2dbb1efa6935d333099de01f1164654cbfac39aa1c80cbcc54831df49d3e3f3360f5615c829ec4514297ec6e886dc58d762274f3a63a11c78d34c0e8593f894f509a4c86af02ed161083c4655ef64eb31ae50325d6f4d3b03ea529f4666480d97c3c588b29053184fa9da9c779892f3720971415307b9e1cfbe4f39e5695c4f0a020d4791e1fd30c3cd2ae075151c5a561649fa2d8143315fee20d256be9908c280feb60b764a1c32a7dcc6dab9c129bd1d98fade83a5c363fcd413be3a605082fac8d618afa0dd3619c983cb57d8f4c48882f12ac4c900aaae11ec72afcf48922ac759983881f176ee38f5363b560cbcedec7a38d4646d4087b215f3e85d988dc7fb859187d19c6bc501b0a887c153da50a89dd6ce0f61804a1a5e35cd2cc845ed68b8f238b198610954c60f618edac8587e57e3dc4108c8f92b1bca59a6884d21e5a658ea887e94f576100da9d70121fa5ce7d5236d590d42be5bdf7121b423d5ddfa63f3b42610fdd15bc77ee53b78fc8ecdf7f34dd45d907e210f439162543b19cec88d00562290174558d166d1ab5240d229e0226e38770e68b38742579947e7542b64e1cc836fecabf2b943f584b4e61d6c4213aa40ad5679b54ebf406a921aab35db28b332d9f2a23d4bfcec65e3dbbbb76a506d3a9996e86674cff1a13beff720f054260f34dc476d93ee8319f69c863c24431ac8b6852b7d806574a6992fcb8280df933bb14ca9b0a8e883b124391ed3444d3a9b548f274c807d141503a907340a43d1ce0c0510341e1188879d4f2f224ec3b22a49a893e5e4b59853baa85e361cfd4545a53b3b5c4445aabdc31a7837580298e98e6e434b811f33fa68aaa76c2523d42374af45dcafbcaa65c9608c744206fa8c6d46c025d0013e5232db209b3e00a0ec0ef7ca71380673010ef2fd8877a4f0bf4cce566338b107f45218a74ff281b14a135351697a08d1a72ce98a49db45f5820f4905f2b4755f916a03e446ce6094d4ab029bc03e39965f5ed3ae24164a252609f56c820971ca464928e297d1fcf1b7e11336657d652693b2844930277a759cf54bce1dd17ba2c0f181463294f8c86ee3d79a25569e736d6c57db1cb58ff2a3f060a56252de31f5e188f0a1caf05d9945d085d9151a730e745a2c7b6ca7af4e9310091c49e062b999cc9b01e41a8eb4a90ef324a8aba37a90993a4b8cae5d4b4d832a17e7ed540bddd6f91d9878fbdb169a48b29b55769bf45d4263e72bcdf88dae08069d478eaa2b1fe0906b42385d81d84e983bd28681532645639acd4a046408dc77701b4621f313bd0b47c52217155fa3893b0109a96cd2c5c26e58ced380ebdd98284d1edc6ec49a397b66616a142913440c7f1ec38d1384128e3776b317692386f5b60be00caa95f14356c383f51d207f19856288e8c1e93cd727cd5e8b3d6f000231723107257168fd15a7fe591706d728049b1d18b8f90969a6a51cb6230c15501a822f0e02f5e2ea481cbb96af30a8ef34905cee87bd5fa4f595986ce0e339716408576e1d5ca05ec7f845a8aebe9b24b5177c6b208c663adad9ea96f122c902833496505b1ea15185fdb4d4d7616c541b5248d27e7c23d61e194476dd8c087dfa7c017b8605d0d33c9a14aeb2201709c24d13db449d41bb9f6bd002b407fe39158e3877f413538bd4d8d712a3df1e06e13865d18a0a6e08ee22201c8f46b22a549e1a07522125352e003573658e93d7aa90e7f2af9668e9378ac8c050f8489beb744efa75698e0802009f30173e102a3a4bcb29aefb2c9521229e89d1549c4d3949202b4f9446edf125d82800329408548d1fc2e60da39be98e48cc1046875476c2940b3f82ea5b8bb70d14e5b9b232a0bdebf4a7545ab5579bb00f9fd8e6ba9724747950fe7a330edddccebedd1a06ca51ee039cc0633d68b9e6ac028155be29e1a86c5f6accd2c095413ba36e23a98dc415199e23fa4057e1c180a848c5d7b6a1b8918808337f725723802a0a30873e6cd103214310ccd228ed7ab9f788a36d5b1c89de2c55153e9fd9891408700a3024e41d4432e1472867f881ed98f7cdc0f7d5068c65e51a5506fb0278fa57a9b2a09b1ec3f8512aad6a5aff93444deca039a67c46a40eff7d2ce1c3ef4ce080a12752355c37c9a71b792184cc584235fab2504ab9f4081c046656f3b03fc17c4fc8a22f2ac30e0b142a6aa00b4c3d6879cf185dcfb1d7395bc23fa6848e78e67d1fcb427492a38ab4828c9db329def85dbf98f60c13bda7cbf8233aec078945a8cba49013e96790f8c7010bbea3e42c59ea58ca7c7db9ba49da488bcb08df31dc7773b4aacde56297a82dca57cd26588b6a4cf542c3e005a2560717a8f07e078c44d6a16a4c1334e04dddd9cfbf0e3c3ec64924c03f12db8b7890d48d99b2e3a6f7b3a92214c0dbbcc1e9e1eb13bc6e966fe57cc28b20205973b0e365a31a9dc0c3281984f4701dbfbb4e401279e26b0f0c30391776e07a482861ec3c52f5005f58c27153585fb8460831203afb76812fc88d7d2e25660839e80e7fa26ce0f89db362c8c03da6d054914053519c4c15bb56503221c647936a5179743e1300e08405292f7bfa901776f32b9263c0c5e68e6ae6f2f49a5e6e20add4dfa1ca0c0bb4be4a6023d134420f341a1c98d166e3ba63e60ad7d7268f6d5814180154f4c8114f4a091ea7bd94ec7e86bc503fc41d7fbf474906b13935d897d7137d7700ebf7d509802258adba6f9186bb0309e3fd6480e57cf09087d41eff6822359f4fe1f6ff95c40703fd153e3596f89a591fa9ba07d3a9373f2d3497eab65ddc6b7a68473978d34b4ce234b6f3cb724bd87e42406a4c0dbe52af90bde4cd93aa10bad2d8f4c4556714594bb167058aa73d0d33c85d4a262471899b102d0c03ffb3087eeecbf180c0d3e2e92ac60cd841157cec0a170e850753dd24f70210c5fc21cd8394480d777206617e9b465422861f24cb6d104f69c310c824dcaf9eb659c24ad0940a021e5adc73008230eee4f4cbd604915f7d5da2110e0eb5a00cbf02466406022c2574d3dee0be3cb58c545dbc899138f6445139b463320692a483c5f360ae7acdd7b8c8d57f924dee442c67ea7739318cdbaf7c101f3cfa8cab89917aac6e0cd29771d0b773fd9935cf91fcaf5dc47d7ca90d93ba8a4fe23a3d13f3e7793070ea1072d97462e093d1b37550b15806fe41a4052169c7b0e447e928e72a9af63a05aa3511f71a8a132f18968a189b3427dbcb509eb34777d6cee9b5c43baeae89379ee85f1a470363e613666c427974b9fa5a2aeadf286c998d7ce2b25c3608e86a07c426e0d309423dadeda397cc0d2213d3d07ea638edb75f17a10234852db46dcbf200442b6627a67819fe61f614c19071dc7efb0cc3b2bd7f87544655c8762831f8a29208a45b22eb3abe440e54572d48a23f5786d9d0e9f779d404428992bb9438f1ee14985eaf20c1458ebdd9f9074d08c960a0012f2143925c7a3e6ee9b016f606806cdaa66c25fea44146fce439ce174e52a7d10906795f7cddca5ded10ceb78fd2c0fce16a94f089aa81b0ebe31a48f718e5eee96013262d132d73646ba57064ecb93e8c07aab53a831a578a982dce273391f48f55ab6c0cde71366eb7aaadc0c34b54bd9e1d46234a766c130161b0e7d2cfe411976177a58d552c58a3a66b5a57f0a285540b156a9d44141fb4931b9ff333a4445c5a4083730b902b6d0bd35f76935a03d0a3d4ef6e58ad58089ce8ec1f7847b9628ea5f51abe816895782741b3d41bc2b3d44aa31bc4340736c61a776cd6a063d15b28326f43d6232a12b580df8cfe7f9c4eec0beda98a1872df102fac440057f12d9643c556620bec80274ffced8193648aa5b051f15b67e20621a0f8b32387e1e03b48b83e4a8de77feb410f4d02de5adad155b8077516c614c2079bb7aa730d58ecf3fd9eb2cb952d14cd9bf0b7e97b034c07108e0f6004cf093a27ad64a0586657c64578732ebd896cb530665740daba5281542b66794f000c593546b89f0409b46d5d4d4be4f1f7cdeafdd6145c19c6afe6aaf286a62e47ba019ea3f840673e85c824ae12b69ce1a38b58f1c77843769a4078dcacb7ddcf5c1ca9bab2e893bd4330afa4ce4b2e966b61056ea3278c9de879dc2c3b1ce9c57b9aa57149dc9220d8ad14ddfe81285f9b6ffa9550147bcd7a2d79680e9ff24cbce045e28cfd65ff34fcc7946ac517a243af5142accd4cae01e735abe13deea7c001b96e2a6c57089abaa93a3b671e9a9253c88eac49236aa2e097c5effac0f92b1ff484e82b3ea08ad47292e8efb71d80bbdc98a235cc847ae4d2f6eb52582978dcba61d8333bcbe9fbb576aa00e7c1405159119f1c0af8134a18d8ba80309e63dda8c0fe05d4ea8bcbc19f034a027d7f663dc3422a7973edbc341de4e40d6d812fed46a9022c663fc10cb2275b45f8da4af80b08163c4c72dde40f9d3e89032f1823b97a5b975da9065e0dac265ca8be6d6a990ac47de172e61f529c9a330e24c4d461d8155032fb8389f370fd0cd018cd864c1aed51355f2f777a0367041c7c6ee223f3d9c8a266040c612b37f388139a8752da2084ab1d5cd78ef60f1aece08e894b55e70f411300f86829363060754fc09ee3a39102b879d668aac64e19f9984f6de80883e6cfe8dba28e56605e2378c0ea689c9ad5b1fc1fdf782da0f54233771c2b43425d7416d9578f704045aa6bd7a07c6b6b9b2b2d87ee056788b0ecb43be8afca4569383c2e269f2b6fbbeb21661457264bebecd44ba6fc8f52d8757e43663108429c1639e58a3d8b9ea0fe10e481b1d77d0fb27756cdd104cd2b96c31467be106e5b371a031395f94991e7b360c76a01710e1157f49ded9216b23d003fffb76b87d31e45e753eb6a69656995957f6876abb37032f2d9e4449e2d575e1515aa7bd1ed5164330a411445035f83b43c53149ba2ad61edee20064b7cd208ce5ae0e874e23fc405dd03041b5b7bd86db449fa159f1c21b4afc538a77db44543c27f4b6ffd82c751972664312f7729f8ffe058e03ee4f5b729f8366e13d52a31c7a328d4ef086e60f6cd01c3d420b22d9cbd63e9c0d224827779628825f66451e58db502e611edeb249f2eedbfb3bf232f82596c2b0d66461e5c2cb320f8e3bd6215a33962e8a82bae605284a565528af80b0825781bfa5837076092104425b8f6c22d3929f844285df30b1262eff116ecc7d31a0b18d5c62bd7dc138b5462fed37025e14a8c5cd52f6c77d5c0577053a291070dd604f25316048410df82c74b79aaddaafe539b1201c8216bed90e31f24e851df926df50ca37004c94515c26c7175146a1c8d52a2a2582918f75723ddf27c61dccf6d63c50eb52badd92707d719c8d575bb6ca19db761f2f874d573147eac19ee263b2baaa214b54855a3342ee3c4f040deaba1eff87b248223bfa1b390d534d233f1bfe2cea30bfbee52c6633d4a23b996b1d9da3a440f55876d4d7bfa43d54a0f2450b95004055405e5133eab9a1db3311061fecfe2dbf9d91c4b4e694c08661c91611f156a7a360f3817f6f15a58798d1ab10de163cbb22a5fd9ecbd741248ecf9a37fd7c1516738ffa48e05eb42cb7f08e5757bd005954f431f1bebf49c2425b16142805bc31a6e5c3647c18b38942d7320d30d59ddf9d1ad149b3a7aa9fd14d3d69e1189ce1f03bdf091b62fb9dc9733adafe7bcbd68931d222a213c34bc031ff1d47fcc65b98c7ac72e9c806bbfc921068003b71d71b2086b121ceb5ae40af754885ad5b89ed28170c66746276a00114f31b98b4b08cd1e1210860698629511e3a2543ef3886ed118ee2cce0e9299b545c3f0e2b121420e4fec777d19654fd912a825d199764442d9693445428941e313452c9ad99f0532cec05e45b2d42ae0439ba0c386be20e7b6b6d7e641ecdc1e03594353eee90f57a5ac246fddd45eb55dda63ef112d23a4b9f4eae580078710aba23f607cfab2e1ca64581b507c9c20c80488f14b003ea5b64fbf9af249d7fa43047f6ff127d1b64c15ba20ac42480d016bd32507ae731f895506970a40b3990e8a0fc8bde0ced26725d31972d9817c759068fbad8a5545a9c43f09b4330a8462889d164a10c3eb8ceb36b34147bdfb5708939dc7a65ce969993b96ff25ace26f345f0130ec5012dc5cc2d03b07ac7a8168752f4f05c384d5c29548c521b8d5ef8cc78ef4c8090e86e28bd7ee74417aaa14891f1309b4eb2370d00814a784b452ea2763dc380063662ba282b13ee89bcce724bbccb5b8abbdf65e066ec1de33acfe84e366f81dac6aff808360c81b847a2772d5b5ae13b1937ace60b5f4385ec84b09f839472e6f946596dbde1b08fef3aa44195695db3be31bc72442d22506f3273ad9dcca1d65d9360310781f08e7ed604c6905e38c41d30ceba634383752f7d91086a7aad3d07375be0f3aacb52deec21dec0f2c7d855d9d59620e2d37106bbd7487a742aa1d23cd851751933e80de3af8300a83074a13d1444312f8036d9f2e4256b6579bebba7672d0de46849bded2f48170c77b530312324b0249d2854ccb7df5e1ed697eb8fab4102090bf48b103dce625149bcc154849f751e82d03209c7188c306c7f4328ea51729cb558d1200599b5690079b6d5c8b6bfb69c9e009b1f16d41a8078dc1df14c8f20068fa246f75a7ae2304ace0d447121b83197e328831b953cd39f9344aaa8c50ffc806c70aefdc0c19d385bf78c0d29a9c87a94b3233bc6882249f81275f426e268ddc045a0f4a9ec206b61b6ded41b68ce8eecee4a903ab51d4cc7dfab9e87d5659b3b3d010034124ae467a363a371a43f7762733ea6082401149d6b68ecf5bed99c6e952716e6a6cffdbf7a3ccd53949410662549f0cbd5d89cdcf71534e7afbf6acdbb403c921c35f052e99cac04abf12767f02cc44dde369677fd1ba8ba95d719ab3d2afe300cb884a2f4eb9d5f835e072da4e9269419e03faf2d397e07bd8ed5dc1dfef70e2d7c10deab30114fc13b2c57e2394760edbaed8976e887fac0723054f1a3b7ba29b10eb61588a3cbf2aaefb3363f617b40ee0443b21c4ba5825749c78dab0209ab12f5df184df5ed6f8fc788816079394a55269a19457ac99f86bb8da5d2766b1fca1aee6ddc2b9decb59961e4a0f9925b9f6839fb67bba687128e4a1da3783649e6443bfde3f7d6173f32cabe3d2e335f6cb1ab970eb37b9a27ac7499ae5809aa5340a63aef294da64886b484811c351f5a099e63af2e5112523ef24fc0c3058d2cefae1dc53ee9edf0156d282a58ce7026c0d108c93d1bd2a801b1336e828d5c644054addab07eef509a662dae4c891328f17fc7faed91869aaa6280eeb16a4558bd6d7b85267c23f5f1cb1e14a34beb98dff0a3aa9642e978864808af94a645df95da37de95dab2ff279c3b313074531010907e2c0ed30da51fdb7b6e97c532179d5855c7a16bab1718bb4c09dfadabb30f4e62b949971ba86629f69d1fb9ebc601299698de33fe1b9b32ba3a3657f9a9338d58fe8c6cea67a8c4f3bec7320d306fb5fd022e895cdde67bace28e631416f0e198671d91ef782ff012efc9adf3998ffd554940003bcaebc92da7e6640f0e316a0617dd5a7868821eeff5af720c4012e686818cedd6bed7f23b735c80c4599e42ac419c832490bf1f60f12726f4b5fc626e0debd9d438a9e53a61e129b836b9b542e88138225277a692221ab4eb10d1e4e249b70e3a62691e64614e00a8aa7328c28f022954ca2bab62670ec45a563e6203f24ad0ba1cce71d8ae81d225b2019dc7c5cabfd94ba7bc2751b5b9d5a0b6705ece4c118ed26c9cb5385c8ad5f82b74de51e35cf9aae607ea47853f209352742c8a4656a5af0eb7fb81b088fbfe36e4ca2335c5e3248e23c6aedc34a683079288b3842550c611a0e526da7a050d1a4fd9fff28259b0f12aa1bec6895bc82009d36908aa3002b0a22dee98d66a2a003a8de487612a41d5ab31283d558835e29d8dee91de408c00419317939aea041bdcf06c1a8de43cead5ad0107d382fecfc4ea5ba8466bd2bd2a9b9912efbe9a202b7a8009340a5cadb59b09d1fc0109bb47d760d3393d962187f55ddc25aba1be53aa56fc1b08725ec9e83c156bfc0a1fdbc40d4a653b6f07621d74537c1ee8a6d6426f0c7f8e0f351bed1a67da1b9130d07ac0ff297a7ac2ad3fd3ab22695f75c26ded60a06ede5f09f44da195ebaed6d4ae5f614330703ac5ccfc9e140276cc84c62e9682ac5bb82e8658c180e37929c882e46c4186b4be19792a7bf0860e5e90b5614fc15eaa85c4d8b4ddcc394104627bd7dd5d5b53c3ba9cb9ef8853f47d2a055711d5f5c49668d95516310008b5c4f1f36e4541e87b3a2b9de45b70b4e6a5202e5af4f14a6519fc5ccd1e77652467b362f3938c37df243383cdbf92c3b1b2691e56d93b69be814e859a7dccfb6c3233a8f646e47d3d2a033b64f7f9dc427e43bd5f3b90b4ded87216fe2ff05ebe28c613836cdf30b71274e015b32ae0407ef1327c12586a0b24e4b961eb3c09cd7a364e999815f49d8870f21dbe35312b5df88046528cf6c8ebf4e5a86ee6ca3cbd762b16de2897362e1520016549755c8f4ed35a5b0fe9a5924e99a089a8ac7ae897f0aa438076e0503aa0cbd2cfc064ffbf741d3ad674464eff019e7424e229ab25083fc826b83ad606cd5a65471b7acebcda11032fbda7bea4b81e05b649983fe2030202fc94537cae88be4a6006b8fea2ba96152b2fc048c83ec8ccdbd546aa71a65847e8020621737de63a1616e35cbeb78ea1081ad632c2aadad5262edaf1fc8afeb28a02efe4e8ccc4e2b32caa57a54cded2b99cf48d14efc53d896fe665c79232f92034735bcd09828538efa9f40d8f5e0238c1b5c6c2bcc485f816cacb387a1c18f538c299ea9bc5feffcff3057098c067d6b7cc522208a35d92997a40a9b658e19fa775b90f9b7bb02d05276c185eb20b99833ac0f06855e39e7f6cb9e3bf9d689ac92fb1da4ed527c82e343aebc5493b70ccb0e2d0fa268267646bb22dff0eaaec208bed6606ae2d5a5aacc523d9d15361f3b321c30a93aa7586e549e84a5b62add0dba0dbfec5c48ea8c522ff3871759e6fc7e38e0c2a3d68efbae4f6b78414925f294a3eca1b270ee7888f9c503925718ff15501066d5cf596b90fea0f79627c22c43f211e1a1c83ef5e25a4fe096df4f3174ecc300af0466d4ca75848bb9b309d61310a38701f55d47154c6bf0318ab1f12a2d0f6917e7cbe80a0e60880fafbdcbeaf2a4d2c68ee63c43415304e925a87b48d0257b6eacac3688e6316545dedc7fc04d538ab3a99af405b75fc00dd71a6d21e58a15cb8fd7217362ffc44b9c7b86d2702d8175241f48e7b9e015767ea60e54b193575620d347dbd4fccd995bc36d9002d84c656a48eab359cb09295b3676f2da9b45aab9346af02ec4e2454dd060d850a8799fbdd9fc45df8110b6090d41332a3eb472332336c14257237150633338348ad092ce4bfdef00ce468f0f0891fb5fbfb6d727ea4583e148a79d20e772be98436a7f591eaffdbd293a3616c84ba323f8efc94fffc423c8c194c029e2a9bb6a86a07994f4f2514834fc09ec7932150a8bab55e55f3f78dbe88f40cc2453c97b63b6382ab2a959729815b3008d15d6d31d84af7dba237c0b44689bf62cb66e92aedd882da966a94e9dadd8a4ee699cdabea32bb16b3941085aa1cd77608ad4a244320af799509ae97435d021dfa1c027ca9f6374028951cd54ebf730f67608bbc3ee8a9b03d59121107e0510dd633b88654a1ecba6286b8e11cf6181aba45a3c196d99809b9a2e1668ca2ed0382b4812b5e3d7d2cd4fa890a3c725db5f90d36ab91e6d60df7d033cb344ccb8f06c33ad8adc5c94a67dca7553a569a55086a376e0398482aefc17eb4320caa90263b694efa0380a558155c8ad78468e384e5ba1cbd4010b61a335ca7b3b0eed8358ec2d5f7b96af7f401f3279eab9861ab938b56abe302f44592c19540b80532c0dc0284e151e5208b525c01b55a71e2a9417ea23d6edb8d358c70050e8223a87729d8ee6a05644212f854c9e2570506cb29405975d026af131cda706ec3bc2fad9bd34f8eefeaea63e6444abfff5d5ca587635ba708df63ac989a596767262573a45cbf51cd1e7ab4996b8586019ce9015153daf65b281679aa2c1ee1af6df90a4bba060fb33eea1999bfb584fcc1caeeec362c91907bd50ef361f7a2b75bd95e23f0a4da1509d8eda3bdb9f6ea64cb95ce3e08607ce7602dd0b5900f7d93fb984fad9e481ad46dbc83d284dc12d70ff9b693bbbb6dab1839fa7f7ce025584cde5349e2b3d3476812e6a2031c83de8e3bfe881b821825c59b03cab6ab752f06a9a30a7b65de4ab21336e42582e486c8d48c2da06f1a28ad314d4b177cbf51856e91580e8f4212f8d6d1334d709fde222f8181404b553be5a2660601c71a031bb6151b5e03d44ffe32937e9b8446826c5da200bf76d4b97e657ec5ae824e240532fd6dc723d3ffe25ed82447275cee2b16490ae89fb63e225d1794a77615d0ff743003c1254540de8c828e219ef227a7d556b51f9f3fba54bbf4d0081dac5f9369e940b9f31b2f4866580a50dd5ab9247ec4189ae0e401d85516a2534e002082702aae996527744b7db7a13e67d5d639e0c0d084aa323ec8331c75220fe16205411482da3d1e019827ce8fa109158198857ca736122193e8be6e608869dc76a25efd2715a31eba1c9118bf84d61f06f23ac6971d4e809c713ae185f6c4c3d80907e17098b739e615f0c8dceaffe8d346ec9348280cbfaec969d577aec1845980a3801a01b30032b52888d91a89c803f3d0fdaddcce2508e0452d80a71d28793d856d5d68e192b650a4f7a8006774739d203be4d08401843c0e8d974e6122b9ddf380ebf0c6f8d88d74619053a3a61deb9b9e14b170a88fd0080668e0f4518dd19a45671bfd6ba5bebe79bc486296723110693d09a35b3987c2c24a3c811e48327c1d68b7817dc4fdb9bbbeb1b3761262039a8dce37b52aad64b281dd2a016d6f60fb061173698dfd8d141859a3d896b9bf3736334600f23476c5098feb64513a539e5c3b37d1c7a739a827118b2dc9c3e0784a9a8ebbd4d33542cff285eebb95997db777e237138aebc7ac1cb6c5328101fb96681d2a2210ef63190223d909e2b1bcac4790ef748d5acecde4e0f7cbf243c3772a37b48c64ba6d435a47ebfe4fb9cad537fe49d4ba07b24e51fa1b0f1fa15d304773c41b422a893346246de80ca71bf3e91b5f968f6c9951419ec1849c92a86bf9fa69383019a11dc9e7e5a240d66efb76c31decfbeda93345b0dd395069d54d50a0a24ae401bf5132d85f252b358219613d4cacf7ae0227ec9aa5c32c8f304d8bc38124dae220e6ac7cdc14b17b44b1f1df61526638a1cb9a289a3578cefa650173c594f8eefa99d20f9447748389574108718098969bc2f03fbb94e3ae0ff6e26ad6a774b2e606f16f0f5eaf6235bf1adeab6a898100f1ef08639e018353d015bf9430f222bebf6bdea7625d180fdbc6c159ec2e99ce2b607d827dab9aca8d82d6db302cdd23784d8002d50381a76e772b0eda0952d8d943918ba06a22ddb3028217a07514dee8d4926486994896d31b334497da11aa28aca62499ac8d20fa0181672e057d6ad4ec7d5e92dc4ccc5d5168fb69ed4927422597ede5a4a1bcbdf6235f4768aadee99972e5c740d82784c1268735e830001033345de1ee965080f35e6668047b215da61b228af3955d0d3b2afe68c4a1c2d823e229bd0aa41568f084571eb4e175003b8b502390b628ee22102ca746a05dfbdac3b65e0c9fe3ef901935e3662f4223e432afffda521d27e39fa585e2bcb4de3ee496daefebe35951a642f22fbd06915f7f3d20855e89891656f95397582e1b8aee9aec7dd095133e45cc0b246e4adc52f71926aa0df1fc00e221a420e7b3e3cd19743c55514331e034388cc0ed3b66ca00b8c4cc573c5da5c0a0e29ee675e55006fccf03dcb4603c595f106c3dfe1a7f0c2ae038a936d32baae170d13716b3dc99f14b73f8277eb01b47ce3295bcad7cf25d7a549bc1187cfbb639dfbfd38392f6a0c425e6e0ce38d4650176458fd2cd6bb9a7041c81e53239d723331bc2da7133fe43664970341b52259c5e78e498e91fdf8aaa3094ef26cc0da971fdc4705be042651b252e5cd9faffb0ec4fcad2ae5b27147e723c9f079412aa69eec1863935d95d89203e3aed25924cb82e023e94b9a290ed16ecb0c4b6520563d101447413a2daf17b139a489cd7f34fbab38c811013ed83dae56fb7a085f9ab3379c86799ae0f84115853e7f614d62496d5bc29a62e3fc4665090244357176e5c65770ff50766962e886a72811d7e55cca0c3078c28fca0393ffc62988f58ba5745d72eee1fea3ebb22f1e83f40e712cc7c6305079ea6ca14299cb8e7db69ab6dfcd818497e01082d3bd4095e3b449e44c9f595383e3e1a42b220ee1bfcefee013e9a79a9b064a55c0e5ae851f4d2717dd6a02f0e27a2de44d8d7dbd4a8658a10e6b5fda32dc96a7d804d7744982be6e022cb2afcbc84dcf03f50d0c65d36bd4a7e665ca3ec52711c39599cce7bf1b03bd4178a6308efd531556e0f9d0fd7f74a487205e40090c8aec51dfc793a002195dc2e6188508362aeb34801c9bd3dd972ba1ac8f35c8ef334fbc293767ad0e1db06b69ce67691a16a1a5dcabee11bf218e36420b4935099d3609f7d7672ba95205b9c454911ffb7382db9b6ef7dc89d140390d24244106e3f3cbcfec265125fa15bfab0885025197b3f3c81b0f945810bc09d6f9393b30765cfba890030b4b7a00081bc068fd2b6f7e8bf9f971b50d036d391787e1cf8f3c97ef463e80589ec0155d48ccdf58608ea5ec0358e4a7efff6d7f7bd947cdc184b0fc9c22723e404ef915c035766e379cec645e6333ca0e2060e9eec14fa19655c6072c2130a6c64ca7c2a32c9551e5dc6786f913f03b77111f524af3f02dfda3562b5d46689031250778bddb48453a623096cdc0f67f7b4cd67cb95453b7dc622beb9d12d1f3f25410180b732eb9dcf6cc6c6d5b51878e476be95bc87df06d91728344e23897953a97414796f275000b9eb7f11e089dad1e3230722aba960128e47289563fda6d4ce1878ce3b1d8d8b07e95b76490370b9d45374ba0fc60dba5dea6b58462989af71908d794cc1d186f8808b077b1f4db582849812cdd38fc88adb81e86caa723eada2214179177c231e4aa42f4feca9629aac4d6fd45ccffaf145843731acb4113399c828ceefeeeca441aa6a2d68e8935282c02d903989393ee3067c130da2678a3908636bbda463f9ecbc0aad564bdfc4a460f5c9216c5699904346eea36ecee92f6bb1501a931f1ee19ea1152ea16cc4696e914c169a1bc70af06e169e05b99d056867aa155c41cdd26a37ee6e66ec4b53bf68e4fabed90932d7e240d1df92de2ee8926b22f4693344607207ae65c9e1ca986f7989eba6becff6d8c9e037e047fd95c7f5c77a86842845a1ae7c7855d584d72978bb094d8918b8c8f8e223329cca9e9af5cb4bccf66cd7215042a664041795451e10078d9d2cf735de32c24a4e7d6b1771962138c16c967a578469c9e0e2ae9b65ba095e4e17d9e44da139bf5fc41963be7e3d4419a30e954dfca49feb01727a710c4c82535078cdcd5d0de29370b1b4a5e242c67a6bc2cfb9f67caeb567fbb59999e39b9f0d6f61b90f45733c5ea4858b149e7d9a32c65fcb338461445820ae61c87b9364787ebe329f9b404850e1046cd380b36c7202226b55a9d2229c91808cd1679da2b80aa73137bca3535cd05f239a5c084895c29b23a8943d9d00eccddffd5b4859054c6f982e06bd4e8002795471c75b0363bf64e91a0a1d7770660177e9d90a7edcfde30bf721baeb5091173484a9f95e38e36d83acc9739326575cf70e4fd31610a795d55c992182fca28904b9594a09ffcedb4866bb2a23ac601ba1bea2f6a827bc55b0357956e750f05df09621dbc407c3dd636fe4607e1ee22c5755a3e3f83750f22592be26932cb32fa353670421922e4997e0c17e8bb1a606dd1607e0ba3600b8b0452080d6ddd1a6095bd5677790d8bf9eb103a24c22b1ad41e77b67f4ffec11c917ca10917162b34b4163cb7e4deedb6a674db396b5a5e1e54a1efa8f389da4d94e7eeafb7ed6dc694c04785ed5d4f8d6f51bd2643c22b20600a5a4d06c0efa8b4c3a1356a8987505db433711971d8c100a1f143c382e3b40acbb3f4dcc08061fbcf068dea547840c01c7ca885440c7298deeea68ec73c881049fbb517578da74d8f09825f2f55576da1f3fae2585bd013904e60c20b1f68cfe42d14394b90d214efab774964f57c2235d7a900c4ef0a26c5ceadd243304a9a8f773bd92c2ec5af7248e36c39be141840c49a37c703e98ec6cddab97ef15e85121c5677fe4454b940741cda6595c4ca762126e0ed559ff3789f986db23866e3f3d8f1de2154ca45fd30b31928a48ee18b3918b60b291cc232b903444d57d667ca5ed09433ead018aa31a3caa41e610e66d75a9e388328a59433e9b8db6cb8e0adebb52f91fb3f5848dba5f05f45f8d370c746399a94948d344ba8961fa72ad3a580c45e5d4ff394f293518e3308aea2f2f7ef2ab82a0a9a19e062f95be60454c83619e6e997b00b9d77ade6ceb7ab1f889af7a995bf77d03bf6880309b81def61f05d965b56f89d7cd85b82a7c62d7336e20fc17ed110b8cce3006921b3843e1b189f5ec328e57cfb13099004433d2ca48de41a41bf70ec8a986771a45b70fc16446ad2775cd3564f896845b151177abaf2aabdde14c0f7a12dd69d7d350e52d4c8e3989c6edc6398ee36cd8d2de624eb2a53d68d11ebb47641c347ac13e5794b54a7a3d719c14158d13ba424217fead28a72edb4ec378da6597907cf497ab8a7f78bb09ee5161916eb942c30c7587ef0d9564114fc1a1d51d1fcfba0836f7bbdc9dfed63589c48b2e9ee7efdf07b95486cfb8f4282b119a2f2f2084d4b97cde54c628b75ffe0e5c19b3e74383e1f89b4dcfd194677a3c6fb087d9b2b4de2ce384c39029c9aebdfa60b8635ffbfebf007d7ac7e3e4c86e94a67bbf488830e27bd08377e0f252706df0c557a7d78fb44adeb1bcb8489fde21ebaf43678fd28f7e957347d180efc1e42cf57f9e2099e8d0f09b5653d053ba8bb25582f530505b834c3f961d8f9b8a093d31f78c78ba8129a323531315aeb5b65b433ec95c11ffaf901077bd0ae21409758cb2d5c499ab2a861f7cf1abc8d663b753653cd7f2dd523c9f81af131b3e5ab8fa0b1552d7a7293004d0ea9d00f7e37dc82033a53369cdc6014cf51e7d9bbd769060e44f27669c466f2d241a6462895dccf6883e54277bb32a99c0f6625ea82b2eeeab5636d25a535fdbdbc333f024e1e8dc516f17128c3c69f8483db83bf062fb748689136ec437e589d58026b2f536a352a70b5920ff89e92bb964b110d7f1467588c9f6ddfbcca98eb3fa2f66c2f92ed4184bf698cacb29fb088c7a8e5274d1e4feb437eaf6d3748ae99429fb8d8c0e758599aa017233db8d2c1d3afe60165b57a031417dea11a0d0ee9ba3d70af2797ec130ed1d2c0955f5f12e72fdb830d90c9022d5bc41839182a39c9d980764f56f2ddda917fdef9009d2e0004bb17fb5bafad869f2be5e92d4d893b0b7661ab3bc8764761e4ce77e2d359e317600bf18dae87c0fe5954eafe0bf96621b760ce3940028071e2dd1f927ad766abbe4d3dc50cef5bb8a385a04678e0037fb08e7c360a03f5a326056d623232424f78fce65dfa24f13665dd12ca1177d1b74b63b4fe98d485dfba385a0524beac389dbc33b9efc7fab9d0f67cc07e598c3e42f77dfb0b0376785370ccb7df4a1ed273c0cf72729dd9b9f538099555ae882a3fe1b06e40765c632242163e686178fa517d029fa2051da816d5e11e5cfded2c5b7796802259c1a10b620658eb9461d85e0eef133db967d914f05479dff0d555a7237c9d38ac3d4b35135dcb67e6842ace1cab9f0321c0d5b178663f49ed65817be14a2c07480fa4895623e73fc816a4595a7f440a27030abf6d8b3047e0c36186de872b9246f71672c6fa4544a046e4790a958d8aa7a47d458c2b09a1089f11091a858a513b17f454ffbbd6dd3099072d2efab79885d5d46ca74b50531d218eea0d35ba4c30b400bdf3bbd21e4cd149e171e4ef88b45fc2a987aa801952db9d8007f4372ab805f07e4d0510cc4442e8cdf477e12bd9879a7661d00ee207e1fe95c405644a450bde0e2764ac4f2e4d8426af96a81faa1f78a8a54d164da04b9a5fa68a6b8c91dd04ce835ca403fe4fbc30561b261220e9c36497de1e735a58da203edfa808a1d3d5fd5f6cbfbd234d75ecba7a04ed314e2844479426f050f7793f6fa0571b4fa9dbcb50d251b7dfebe72cd0c3d6f0009f7f3b2e18ac6cdd09e1ed233b62216aaaac170d3d86418ac9f80b78cec8478ba57bd83e7d98be276bac7b48f092b30158ed37893dd7d616b802300a54ee84c6bc391735ffaadc808a210f30aca2e140306c171e85428fb85165d00a896026eebad59f77ae78ca7420a6b0b509505914ce4de2f6e49c574cc1ffb45ea1f198e697976a1f31b417b91e278b04d161d7e2221334e97f473c842e2e3ace5c6394fa49e42d8cc01e3c8208173740347b751c083bc6f51cbef46113464e7559eba343c73c46909f343c2f42b779c43bb5dfda93180cc62a1a37e07b00cc2305747ef3c371ab27015088276c6e71f4c72fa1b99fc3b34af8582aff0787ba861d2cd959269b8dbf9d2eb4fc513f44b96e1eb955b2ea93b84301199321ad575e9aeba6d1d9058dd5d12818da99c43047c6d38ec3cddfab03d190023a256981e2117f5845b4b980183491ec30c3434779e602619a255c2abebebd8d7718f8605b1a59416bee0dd78db8b6e9071e63133df69ff44ad9da466d8a50d4a034eb80869bec8bf65b9d4b97a8e04cce82860bcf19dc09fb3a00c519911c07ebd7fec10a7c0ed32d76033d082b053776b3c1a9d80db379060ebdf27ab659a18925b4e5a76a71baada13c698c669b3635c0ae1a8c1afd4318a60ebeb469bfda54ff16c61b981ca8ce1f621e9e73b40d7bf4bfd71957b7d6fe82e046b081d9158c4892de7aa4451337dc7380db0e54502bd5eef258be43f9fc5bc128fcf288987c003b83d0cb9c2618378f113f3901742a4e3fecbb682ee39834224f30eb7277e5a6514546fe2d454e055bc2e04d8fa0784da5c5957fa79846d1fe7b765aafd554c5766790ebca2a1f167f50f6ef411e2f9c60041254bdffcc8a4fb90b230b082d733aaacc97ff42e28fe33bceb00d7c916bf328cd529560574ea3c8740f51f0e21c365539b861a4da12a5e73927116a96adf7ac95016542dba9e5446b09a376d068db2b1b60da2539ffba1955061700782cfd2afaa72dac2a9fa4a7a4ccda5ead8daecee2b3214b06ca7bf9c8eddfb54a987783097241d2f05a47f327cd7bf6eb9eac9005df6cf0012fce5a1820f6d60587f921af7b0e5a1415d08c334b49e87b966ca3ac7b51719d658ad8b4fa00299e6ebca315c2061dc001249cb8be2a53a3f3cd724c20c451c11559ae41b9b391c831a360a96cdc574d7bf863c907397055f6574aa1ad02cb88162442a8ca6b19dfe244db4c63e3c3d71e246a572d8704009134a3cbd6a5c8a54c89ce300af9636373c910034762efe80d2044bcb16b98bc9ef3075e73e902453d2d951859caa553b905558b7693d50a9046b4b5174bab40b8fe88168f627234bff79e60e37867760b5c46d0cd3cc2ece7271a9b62f3a9775d9c6170d867b33bc1fb61941b24fa1a84e5c9da3fe10f3338f44187d2c3f3faa93aafce2420300cf003e5c0ce81d5b144e4e1131d624086fb212f5195cbe00a28f912f42843d2db70b5e166edb355f2e5643f56be8a17353cc1f917d7614672a219bf0f9c84110cd0ebae1e6f40d5dd84beaf594317962e1a95f627fd2af1873a57fba24d5e976cf77ba3016d305cc9bceaa7ec5f397ae12343c2bcb249631582680b3beb2a4f8967c80616c3643871503307577000ee16561ed64a4057c321e21ff258a797952375f7f052eebc4e67a14d6412c000e25c4f42d3ade106ae7772ae38aa293a78c6838f6c4773211eed8a53de7d30a5575209b8e8b8be55b409c03460733c53907bee0c8af473c79a3df9c134851bc476fb4ff247046c2d3c51506f91ef113d42e90d7d9641e52bb28b9639c44666c526612410c97137b31d4a0ef5b02d92ad195037d27403797045335f685049c4659babcdc0283c065768057c23a70ec5e0af87a4ac6805e1d4814a940f91ca07a3bdf2f05a36abd4703d770517bd4289ed4550f6a8b3bbd3a2ce40ec055c37422be3203a38e0d48ac1c0413ae74bdc5d694be13a9297d192db938789b3a4e6071eb395cd2a27f3761ae38da3e3a21124f6fe7ec67b4f449dab019a138e5c0629676af46484f70ebcc00ab40959815fe7cb3677d122e2239ddcb82081ad34b2841c5453231ef6b3b44aec98990b964848a4b733eca97c525f162d615b563e5f7c5ec63cf274ecb9bb54e3ff873883143fb74e49ac0982f566c7d0b09d3b8ac7d70239edc109da148868a3fc3dd44113c0d6704b3143b1e315cde031a9828ab27da665d35afdf48747ec091d33fb3ab43cad11bb2d8c59c42218369ad1263358c734c46e8934b3c717b526c3f8af06714fb37cfe1bc8f68c5ad4b6d4e8aca03c34d982431990bb007e3dc09e167dfe309b4cbe79d728622cb9fe6e611b251af214f7d0050359651223a8659b019d6e106ebe776e08b6f3b07565f9c160b8b98d7635c7bc9b0c6d5ba78023dc8022716832121e01b7236be5d8d9adeab3e46c2f34141efb2d9c4ce92472f92a53981c005f73fca32baa6b06dad563c20b32112fcd0c08fe08474aa192fe22350b1334e81b1fd3bf48bfae520af1f2589251e9829180646b6be40a8425a17310e6aa3d63bfc22fad3229b994697b31aeb74714028ade89cd9ceae04db4aad355383fa46c9f14b19f687972dabd46827161eeaf7bc699909ec60d5685f91ea8de29f26a64e8dbb497bd10e3c054526a170ca890f53b2127ea6eb289b8a3ad2addd7ba0f689cb6023eb5f0862a8b9a7c36bb1241cb97dee3e5e60eba21a9ce38ce4e59c8e939d91cced00a3e056eb43a3b497e63415c318a2deebc68c24faf8a5c039cff455a68a4e5f9be83cdbef03189dea07be516e353ef99d22e1ecc9f3a28ceaf1d1289e3094db1946d3b34fe426ba6600d75a0c198477ea64a6613ab712f8a6ffa4ff97f3688e12d47cea890a1db4f5045d715968120cb6bb291fe9451908dce6f404768e309f4fc776e25d2a9dd263105d21602178f5c046019de8543fa39492d0aadc672927da7c95200401bb00593e442aca1b3fd4c9637992e99d3139c776b6daa3dc2557e078c7b628dbd526b9240b8901404c916b97bd390590d6075b2cef26643a98eba23293470eb2e542c4f6bb56dc39a9d88d19cde1e410a111c5f6e646a1886c01100e073aababa56e2ffa8a87296d0f6a56845a3676917801b83a2e8a1b3d895e37d3f9d59ca3184949f15c295a85d577b2e9e5625fe9f1a104e6aafbb3616744773f48772548250e9a0eb9f5b3084a5cf26feb746a822bb5fbb7465d133e3435c614d05d86d574e1fb7c84a7209361c5e4c9335e1c53619a6066b3beadec2046e9e9a60aaf2e16f349fa1f693b44ed4479e68d211965ac643f8d2e60fd5dc00d5fce1612289fbe0e7a00e6689df4aecddfe453fb1d3a50d304c8b2f4c17223d9c85e38979a7745f119a9f0e71d6ea9120d2e6fd7530590e50891fc0514fdecad542cd3baaa7a00184172552fac9749a69bf7f6f63ee34f4c05c342521df69bbc34a0f4f7def17ea2f0830a55872515929f4605cf3508cc8c48d7960bc49f168cd801f76133c2080b1cc5be98bf8644b651fad74ab6c1a8c4b2cd15596c720641174f5abc9305e8f51d7d07e3f0ce3431a4b2df71a6047acb28a802ca2cb54560066f60f93025c87dc41a29744838239e116b25b351010c482aab3c05c19d4593604223fe6f845cf6c22d6ce1e2452cbd1c19163889e4b3f1adac55af085c1916cf7286b6681db47f53172eb865ca039819877c86316d655fe17c5544ad3a6902c46f333851252c9e57033b220539459cc370657e5406d34490a1c5a33cabb0fdee41c8d387cf643a60f1d52b176f5f1031359faeb2b29ea9220bf1a69c127751960ec80b6dfc01e61927e2854e6af457b8e4273e8940a2d6944b8e5711c4c7312a8a204174ddd5c545a3b3330087a3b4f11763e7ada0ebdedb90ceacca92ded66d828542d42f916bc79796abadc63276763d15da9744311fd4ec9e88d11b08a7105cb7962ff109eaa695b17c0ba6a9988290b1941a15282d875e2cd84651a77c568283bba4815dad6b8a76ac92279a6c7f95cfac51515b3ad3811a8209817ff523e8f81a3e3626fb66d96da1713eecfe534eb7cc42af1534779c8acccda32fb5b4078825a45f886bd9cbc7bedc6b2944c38d603ff75dec371d6c97c081b579de215e541ea5effa0c1d59a2a371168848ff6d9a6f80249c4016e700d17541a87e20abcd8733f927c44dbc5066ff40c68dcf3044679f333b9b7353234dff479d065335bbe9f089d6653a73cfd7c86744e546f64593858a5a2b5e2f42c4e24f6deb81bbe32938aef92e45245a1cf5aec8a85f1f5b1134be5afa21e3aa345b511416de19e32f8d17ccba3ec432a8894f00e75a14c7ae64698cd6ef91b7163d3888705ffc206336621616d00846fb5b41b3a361b5916f3822b24bc1551242192a2e91c176b2ba502c68386ae8461294da7524603d5434aac857de59ac5b59c8d621a5b2673af10e1c19a62f1213a9bb8b1aaabbe0d651aa3639868bb4ac4b4ae928e516731a829b38eaa097ea733bb1fc7297bc1c72c66027306eac99ee305bd1f52a6a340f578512a38d2d5f45811f1ed4b80769c1b2ee67607c840a631455ac3f21f880e2c22a2c1c49df475b83e2524c869bf155f8adef1564fbaba5940bbab3774a299b8835a5e4479f26a148e5df77314bf02ebcae32b8bcf8f0940ad847feb42f397227e6a3d51b562c83baaf8e5c038e87341557dea23b082b3f5f04f432b275feb46c00527e2426e90a9d21e86ff9f29290f1312bceba49257111271534d0a18e7508f5d1ad8bc3912e39da6ca36a8024a03b0376711301b6f2253f6bbd9f19002717e9b4b7c27f04bc7ac2eb9a55e80ba76b208c7a4807a35063ae9d7451bc24daaa0a752128c29c40880a9297dc414d39dfbe7180f5e18b26b1bc1ab6a8f8ae62086397d775f23d3495d979e04d9e6d4dfd50296a75c632e2b5246de87f6df2b8b0df35a038c72e6eaa1878d337dfd514fc2e2a7af9d10bbfca90f7925b41317eceeac3260093358c378f06af6f4a92a5e833b9c19963fe1587f5bb23e2c054e2fa38e23319aad264ee5af38aa7a8353eaf3787ac40fd1bc616f06dc9a362726a503abc2aba858292da11af494b2ddab8c26ce59e724b67b07e14217ac8bf2d67ed240c1582e18d615c6009e5c72d6a8ef82c86600d36e40dc971f0c7ef2dc88404d38daac2242b64654bcdbf862d9ff4e9e836666aa9a76f470d1455c4a8df81711ffb5de7f5ab475eba13383e06bfb7652d16ec7c37ce95270ba8710b68a402adae54498fc5e6e90f87e1caaae6becd217149af1b0e3d71ee0d60c4a3c0ece0b38cd8048a510f63c31f3ab9eb55fccef56c600d465283899dd63f042950d0a03b9684e98ad0162e07ab5d2afcb94c25b7baba54fae4295b097a85fcd740f2ba1d4fdc05e61b36a0910f313101bfb2ae1d201882274d4065c7b8aab76f0ff1a8219f4a05e37425b5761234842fa06b2f4ee542e93e7d8f20aecc82b792698476243e1856fedaeb8a7f5f152a2b0a2a8169573c3f4a0a0479595bf4111c99a8e2954ebc9b60e1d90e14ec83a2ec5e78ef7523dfc98507762cdc5dd7e78dd6190b818040ba9d2f01401fd304b203cfcaf3680127c65e8eaa51ac9d076c02cad8a8748197774f3e4548c33b7e586d973fae53a4df9502a543082dc8bf01e24b6d11a5663aea5aca6edf7a82d06c1c4e57286482661e25d865463cb6162268426da1ced0790f15f06a030234c3fcef95582014d6211d3bacf5da8a8eda61786189ac5148946db0b0c3902c3f680fece487dc6973a9725dc88f6c50a899d1336a46bfa59556848452dff88c108eb7be8ef802cd26664348cb097cf4ceaa7e9b646a2ce0dcd1223c2396f49ca0e82a0604120cb068bea222cad16ab6243bc533a4fe11c07a5b5120ed110414af8393c04d3e4f5ae5b29c4882f68cc00ca94abb18684ed7eaf766d485aec99e464ff666ab9705ae365e5c76a9a9e58da902cb091f313ba84b9a4a7a1882d2a65ff7de1df7418055f4d899513f214c0cbd7e262858de1b45940f35f39756e381e79173c34de8156fa87b627832ef63afe9109fd91f03d35270f2f4aca1116931372ca85360ead62cc29adf5a067c6eebcf47f8ad2d143fc75249c2c25f4b0d1dfb633e3dafe01649d8b456973979e23dbfae11b834e84605ea1df7a3402835cf901126f60abfcefc52744a1bd7220b2bee83b200c7d0892aa491befa37ef704261a29a81b0fb8957843f0cd1247620460ed7ba9214dd09b982dea13d9d4f27a23890065e074e6216807db2836a92038c6491c1941c3e8873e98690a29da5639670cb2d450debb4e6f5c1e3819f9cf2d067ca6a606be6ce0c7d6a5b57555fed45ecb002c541125958946bc029c3e392a2019dd8cb4cdc3adb61df303981d731cee39587116afa307c8c5b07812f97dcff6d59f168f2d78951e31f07d4d4e6d5c83ee534eb8e9a76a07081c14c05bcae01fa2a094060508c694d073258b0cac25c05c01967486bf61e6ffcae842eddb4f7dbff6e99f09daf1dfe75811d9582d0d1cc45772b51ec6e10580fa30000000044c8301cf5a44217559ab0fdd870a5a2ba08c546d41db6b52ada425a93b29bdc7b6f29659201260456048e039bc65aad564beb8c81a9805bcf965bcf15baa222e4e2c643240be2eaf3c6e3434422d544e68ae8027774a7664c75d1976b71a782a668a2904f44b2750d8e0e5bd02d6c174b7d0769afcfdb4e1011898ef19b559fb71d1f9dd5e76d67a8931c67079c14eca9ea5cc0c0439847109f1d4011869b0f939b0f944f148f50df371ea2bee7057878bcaa2d566e3b4eb79d19bedb4e922370521393c60020aef08928882970b47e801b9686a85e382a62443eb7a4b5d62a99735a1a7b266f0408389e791e3fb09ce32b2c30420499b36ce8e4b119819b62f6d85400fd0cfb2a09ca6f40cc6d30bec16f332b5f6191885ef1cb3b9d5ba361a47e0f0a3843b0a40cd2ec540412fdafc28dc8099c74ef8af1d79a1a8e8a277003685192a8e99afd2e13a845292fa8d5c0bc90c142f93b6c28b99404a0a95d994da21250fb22ddd37c5272b52fc645810a9411bc8c911204a4efe031a6dc3556ed996655d10a3a6ce8f15e6ee5ac024549091755b34b6d6a8418250d251101d482286f78212e33886610d3896dd53e8409e57dcc2ccf03131d7a88617af119b3844259a69c824309abf54c1760e408da11a6050f199052290750ad1fcdbaaeebbaaeeb3a1eff03e8811881809a0fe5eb306b78c00e4a254ecdca9772fe60a654408d06a47440cd05116ae616aa2665046a38ccf038a264e86a73ca4b9967861800cb016a7fe386a9728a812a19500b9a609094260420c99272872425044c54806725e6abcc909194b876653e4da9b20035a372c68f13aae01083069825495e18e93d9aa2f450fe8c0ba4e810228b121a12e527866ee401e5ec4cb928235484ca141746dde8c8938fe19316509b4d93872c357c90a166a41cfa1d1aa54d0d0633a50ae5d4624188da87f1c8bc15259306593997d4cacc1cb490a1928254c9a4acb5b0964329a2e67ac156de1917d8b88490c2cc8626193e656674a3b1c654ce3035d4b6b450fe0f0c2505784eed0b102595d2c9d74e285fb5149ca0754035eb910313a232555ccf14956e444259c2e7544aa0c6a25641ed6ddcd4e60bffc3c4e2746b40ed8fa44cdb192148509ce7f1744fea4b67adb65686e7793b4ba4a23e089518a4138568dbd1104cfa6be500a551ead94a27fd2cb6521f0060467f65599e35f81cc09f7382167682feb08f769c8d1960ec730919a63e0300ce39573419bca8a2b149e648ff0e014d726ccd9021f2f3e64b5065b92e6bf05f3950b9e5381637d2bea27b9a039c7409199e9af3e19f262c8d593b8ea0e3fcce7559878ff408be779cf3f11c05b5cf51d02d16e3fa7d5acf0268ca672531a21b79684373b40bc733a905555b8ee3382e64317e218bf92af0119000377af2d90d6084713d2d2880f9d14ac700e8e7340260057a5a10d358c7c352db686e03b5d65a6bad754408f5c66687489adcdb86dfc444e8370366e0bbb8f5b42100b4e62981fb700b7cd4020a819a9bef7b3d00dcdba541007e1f8d0e4b97cabab7b77793a8ac77fccbf9cb63c7f3ec4ffc489260cc33cff332adafeebd37cfaceb45dc0045264d451634e5f3c6d227429a37a2222d2276d3e9be11f13cf971449df65702be6b4a8b4bf67603861b2cd818938ac70a3b104902c60521dc0d2929a9aaaecfdb8da539ffe7ffd7d071246dfabcdd409af373fda729f4cf18ed355730a56bad1c05a55d174b3f127ff9c8fff951ae5a1859f9ffff7fb56bd27a73d6de6e04756bad75bae113fab8d1627399126de82eddde869c86985425f071702ea8961a6912a772fc4915377de33ce03624a4d73e6f4327f4f0470fcd24c218a13343412a0cb5d853bbca4b98430fa10e39e80065d3e064db600ab9a88014642b49f2d1218e6043cc51c21852f2cc40b50398b02a4b68260a880d3f326c2c4a6847422d436a9020c28eeda4dc446a31c2a89a4f7843102910838316a51d361051f68ba63069c90f0b620d14c41d20418e786e8434d8903165e367039d49610cd50f3b569448d9456ac00186508c4d29053b8709a10d3c421f70e8a021c2a801b459a811c29e21153e750965e041dc818308e4b47b9a84532e84608a8835a51de523449223a452838a906c4b09ed6c13ca84247ce981e54685e969470ce10a49b6cdc81321210b235015ed16b5ed038d99e882468f28a32a1c214c68820f5ba6431194183483f8e2051b565881080a3ff617a34dc290d40c5a0f335c943113a60044105bc45409c7dc008606d1e886a48532296c2825402185588836d28c5d838c17473258843190115970d9e1cabe61ca2e9f846498882520d9b254e484137a846144d85e8444192d28e4416b115a99da495ef6ac872d398834284b9cf860aa4185a320e12da98a0e3336c2c480b193c4e03142157e01b363c892254a880dfb8a0ce1192544fa1e7941df2122cf8f0dc3d1e681481ca211be300b0aabcc76f614aa2061c212b48c50c587941e4f441d4d760ca6adc54868648828f4a3c951988588050d2118414360ec6c2b545dc28837b4ec1eaa389122f63c097968121261125b18c131247cf263473932220242630fc9829ac876c424aa508530a14dcb5eaab289a4883d9ec0d0e40653e8c5c86632a4851fe109479b07d1121a620841413b84a01d17a8c432cc9e41cbfe51450422255c7ab24b68b261308960048521a2093f9c8ea410854c686c324041bb0868274c01151061b696304a952629628c27529a845798ba18d94786842efc08a18e441c443f68fcf022489cbdd8a1412523cc0e427f5a764d7f55441e53c22350c21f64d8429688346c220945a6fc08e9248e0c3f7a98e407a993383838b5d6fa83a3d75a712a025aa0a005e5cf3fa8fcc71122f8fa1ea0e307b6ea7f80c90c2aea45abcf9b4f969eaaa0ce850f07c30ec9aa9d3e3c7c82fcf8147111c46e5db3eaf3e663eba4e64250b438436f1f2da375a3872388f321c38eb1fda46fd30baa7ba2c8f4fe7aaef4d818bfc97dde76649de438d706b5dd77cb7dde788afc3fad566e3c50d65aaebbf154f188e91bd623eb1bc491697cac562b10b4f52cb56ed3c37aa2f43f1868eb5cbf31464a46453ba4b0f406f479db41c4abb5e31ed45af557f9ecc63a33ad7650fbfc3868e7f3999f4f1d8ecffe7335e7bfb52399853860efbdf7fbcd351781b9089d53707c6539a62e9c31c699e316a594ba5c2eeae22c976b246946dd62d18cc1d103afaff26ceb5f91ed55a2946959966999a6f47596525949785a73eab978cdbd2359d36f9953c33f1e023629895b039b94c40bb677d757c6da9bcaf6ceb33ccbb33cab4a9a7a4c3b908aaa8ab67403f4792b4a5244a43ba0cf5b118ba2eec1488b659d7cf2479276fc7d23fef9139f4e071ff42f83fab57f32f2470f2889f9ccf813d1cac9fcb2a8394f1b29c5948ee4ffb038f5f8d36a8e8b7be3c7b5a6e11873176c5212342369bb66b1bcee81377b9f53aceec59563a03ff18d3acf3dde719a3378ee75a30660e76a91a6dd982334ab1fa86e3938ab9af4e6e056d7d6d7e93adda7d7cbcb20e5bceb74ad5ca73be53e5da85e3535d1e21d6df2bab17efd68936d82e2e03ed58ce4e7a2b94ede85fa0be55da8fefc5e1a9afbf4259ed626d66bec78e55eefd17cb0dae4791d0f5179cd586db6da68c6fbb4fab94fd76976562d22b114f526140bdad46b4e2d2afa5b11ac02293dad74cfbb4f5ce6f87daabca8e67c45f6b134e57040da902aa6951a2c9ac632e740c5b4529b2cbf4f7fe2efd385ba4f35ca456d4670516a5b515a54acfb7fce5b755d47499ad547699dabd5d66a57a3f5eaf7f18f4fba5a511925298e8e613a1e07a15b1a4a31a7980aad68461dccbd1aded9101bd48c24a594f6728d765c61ee594edace76e3881506e0cdc0722afb139677238a4a734ee1e276c47983bfbce6f5e2a44d41f306b8538ec16b242da5b3ffa7b60e62d8ec2b4c29a674e55118957d89e71f07b334303a8be9bdf76a35f598b1d53a96efcced080fa7e66070c32b4eaad85f4eb1e23a78bc2b8e41c5b33fb1ba239d7d098eff533aab2bc0ea9a92c4d9bc740bfabce958d2f1d3637dde7244e9283b9869dd3675fb48fce65bf195868508c1bd5549ab3749d7f33cefc27432d7e2b8cbf1fbdecdb3f7ee67f072aff7dd4f6996d18c83d22cfb13340b557083cb29bd9996f44f7937d6ee41ded1aabf766fbf3c1b49ca2bade6d82216a5619b6534d33ed33ae5ab157d8da4aea11ca7cffdf71dafa9dc2ed5d738922ab6ce334a69b675f0decbf18ecb60e559b67ace16dd24d5a4b74bb668a9e87e77e719a59cf4c0eb97d351c5ee39c35e5f2aeb977e9e7d89ab625f4faa9334c92e556d9702bcc23e1ab318539eede77f98b70239981884aedcf29b58c56295e65f0f590f9e0dcc9a31780dcc3e62b5baac4a29ebe361eb3724a86e39de5d0a8f3e65ad78cec0f7cfd258adb15e0db056b0b6480c701cc771dcf3f8e51f5fe141ef3e8fe43837aac0ddd62a20cde1f6cb3fe2729d8ed7cef187d9af36a1f457fc7b0ef2150b966276d6cc1db0ac9104398bc562f18ec53bce1a3f3e5774905f1415afe817a662f76fccb3eae115e0531deed3c7711f77c7112966bfe3e5f672bbe295afe81c8cc41e746f767ce6baa27b3015b8776fe5cba292cb34cfb37154c6ddcff2eb8d644d07c12ccb33229d5bea5f02f1790684ad13017c6b4713502ca3318f528e13514b6cedf8d5e3dc37daf1e74bd84fea1548a7483456f997a2184df9072307f4252c87c5e889237f4a2ea24a1c23b5e1ef075b929b932627283bbde86ab3699bb6692e365b929b932627a82c54a12ad4942ccb33305ad76c9b1b1e137fb8dc05a375cdb6b9e1312efa6bb6cd0d8fe55916b2e9265dc36d49b42dcfb24cdb4a5db9cd56a90d83b6bdda3acfa29680f685fa8ff7f38f355a6fc11c7cf047fce5bf5aa7d845eb5cce75f29796a88915f778ed9c50134dd40438621aafb77af3c0ee35b0fd3e9024d82b7d123561f92b51131fffcbbd123501f2cac52dcf2f7747318cfef8ece416bbe8ef36fc2686833bf99d1c318dc63ade413d73e69603c727919f74cb21d42bb749d22b27ea75de4490ca790bfc12c63f5fa2837ae6cc5e922dd51c6fe9c191fcd56a5cea35a9e6d491fc3a18ae4df888e6c23fb874b93897cbc5f18f0b972e17a6b95c2e2cfb1fedfa1f8d35cdd769b44bd3600c8481301006b2658e9cfacbe8f36664b3e4ec977b718cbdc7de63efb1f71e7fc174c88e7f1c84fe30b2768cbdbffc3fee690c5b759c97f1485aad5f98bff4eba55f2ffdc2fca5398aaa359f1debd748aee8afae356f8d282a7e8d28280de62c16d7af166f751c6f912defc547f26968c696d57cd249f548babc174b73974b734b63f5f3d6e87116d600ecab91ecf8e52328ffbc8ed3ffe9a0b5386e61a056abc5f14f0b97ad16fec1b456ab8565ffd3d23887d5d2b3e6600c8481301006f28e20d1fa01fabc1d59e9600bc37440e8d7cb59ebfc91b6e7d9bd5c5faeb3e6f9729dc98c4307e4f55e9c39be6307b56b1284ae7339c867de00e499a3a01a733c5259c7bcd3917c166bc4ad9c716e699b6e7be6ac91d63c858df61bc95187221996e11f5ce21f4cc3328c8b68ceb8c5bdfce239e7170cd30f9108a8f44b9a935246a301000843170000280c0886c342410e0421164cee0314000c689a365c4026250d23511445510cc3300cc33008820008020008c02010c61802723d000a6a9b8dcc186e4bffe3fb4fdfaf9bca47bf4bcd91320bf9f1d0f5f159fa5ad8101ba38f2655d947b54f5d5e9ed3ae7f46cb0f7a3d2c5ac7158a3e99e2c1489b2f256d0ca989984cb813f5fa1c3d8ba414903c4d52524125f03e21e45c2eb89e75be867eba8d3541ea07d1ce73dd85949fdbb973b91812de62398ae7091aa09990b5426d1120221a3a707e1c8d8fcf47c239bb71105da9cbe53dfedd9f28eafc73b801ad076fd6b188f75756c702279fd3974351200aa8ef3361ea1263f4269c9ff05427289479fd78a3e321899542385a781b8857f42b1091bbdf6936d9d9e42824d1af065bfc393cc0003f66a0abac4d51d9e3e5ca8b0d8beeb09b027c1267a0a17661621a1b39a45f746aa9942c8d284597a3b666cd37d71a97b19699878710460018e6f3f66b9d4a384589404288ef7438ed1bf4fc85ee145c911a6c771876aa64fac9ce98903af46075c31cd862b8b1b733ff4de750b87c227894653dc09248cdd004af27ef299c81fbaa3e98815bfedfd1b48bb6f0420682e8430af8b953dab3406ac809f71525eb24213336854504be296a4e76dfc2799702a856e6a01114aea6e2293a1a5bf1d55f0b7b92c5a0f46fbc2319826ec663661891fae9b195847c95839e6036b081b56669729f08d34f7c822bcba9a91105047b5280955ecebfe43c2e8316002fa1b1646a4ed8e107c79e1cf0321aa517ba67f9d19151b6c46dcb6c8f8689d877b2f9bc69a148799db2e71b2e2d59766feeb6651912049309fe8e903016c9cff78c4ec40c19cd473ab158038e012ad1f94196475b1fc4469fb5d6718c3b9a0b7f02322b176a5f05f2d47f4ea038c9565a7a56c7077d2241eea8b4b8956b15ba593d00d137e744df6b1f11677877979614e9db64095adcc0cd8b9ec6121f9f37bd870b2af094ff4b7922cb67667951cd0b121009a39a61ebb8df0213196a6c9feae3f749f125956b92eb944edb2ae4fea8740273d78b7c1b8f07db27dd667502b4807b548a67fcbbc3c76bca12f6b6e5bf0998393c5cf0b42abb7b9c3f409d87a09703ed125e8b21a6c794aa794adc63657f3096f0301e3d2a307f035b0f099a6d8261e1d1b018513fe2fad02518982a8d4b5a55425ed685a4cffff87592ff7d9e5e53e1acc48705bafbf117d953213dfe9dccd4783a19f86cd39d5837b5ad6d275bf8a6f543ed949d92a0186053588ce380363ab655bf01d4501a8dbe8841327b1b5e7cd6829f89aae5cfb4985693f003db4b096e6408094d8aafca98d3c1030494a8d9fe0b9ac08443a78e764b7068f97ae767aedfd174236c6895c5a3adc79f261cfcbea4908bed05aa1ad9ef5a6e8361ecf67412baa8fd780280789c9daaf834a94a3b8e398745db7cbb6d338c5d589170423ab5d7d7063c1e0ea3c34161d7bea59afac356102d409200cf4a51537098635f47cf340531e732b96b8d26437c504b4c7ea0b7af91000b6bfed34bcd724ddffd1266bb1d8accbd94c952f6431f335d9a4294b9511247e73fc91b4d65446308fa67f1068f2283e5cd4ff2a3cf84671deb422ddfea0a916cdb93651553b33698954892afc1fbeb76d7cdef3b6198aff353173f59bb14caac93f1c2390d62206a1c8276bedf510cabc12c362986f7c90a8457e666a54f65bc26726ccfef864f4e161004781b4aa4aa470c5553a30879eee947bfd4f05f1cd383105d4a4f471f853818c49339d792e5e297c3af0826da51fc440418ddca167314e778cdfbff1ea1b5d4790d754a5b3c31a07bc4160db0b59c849efa43eaef11c3a64d5b9b3b1a4dd18e36927251006c4eecb92c762935552bc6c1de1798000c3a89a99ca518e094c8a589eb428b0b6e9b0568a79119d0502b980f0d71d584f2f693570621e0e0e448743d28fcce3182bc7573a4fd1d4099589b2f475443f5329b3721c41b18e8a53311a0bee939b4b0a3d978ec54cb0df71d33eb4504ad7ab0b983f6d28326b9546d154d0339b2467e890eb5e765932af06c5aedfd3de27c5f3bfbef8f7ca57aa2eaafaf699fbc89817cd9bd9bd47c61fbc623e24689d4f899b649dd31f7283069d4ee65ca4b1d4f48460dec0c2db0f38d3429809ebfa9456f60ef0287f58871575a0938b082cb7057bc1282bd981b9e9902f2b4577b88d017b13ebd5d2c377f014de0356a6022ca19e503f8818b58b895f5588aa20d33d2cd84cdf0e112b1af278bfa0186cdbdfef40c82139b6e4b5b0370f04c2d605f8bc70a541cc3c2e4fb773c24a81a6e29f556c8b1d3423589ba10302d55724a0e130df0a3676edbb73d4585155013fb6d58c8197733b8e6c2d6a39fceec87c70970ad58d404ea36f5f998242b9d6d8046745631dc84f0a77d7496f73ab586cb0e2855ac4fd4014aada02ca73f6f2bee9724345c4384771fccc976cc9e7decf29e9fdda1575b26dd05401a564f4a690bb971ff7d66d5ff1aabe0737e7eb7c9b4fbbdf8cd12dc8f060672e89ea2b46260ddfbff7a42e84f0cf250cd46024b30d1e2f5b1e21752b08e03877e4a88c1681b9b5fb7f5bb8282ac90f694b79345c1cfc15f13b87688a30dbe84ecb856eda06b707b8df589e6b54d4c2d51939b49fe0bce30dc4a899e79ef6bac3ee8722353a99ef01510f0d1dc4b5bd5ced8f6efb50492f95ddb3ad0ca8065ee4d17731fe4a618a83c1151afd8eb2476f99e6a621856477b804873d38f60e58e5ac03147388b7b63aa80017317421a1a8dba202db9fff721436bd18a5501a068c87df9b72819fea6e87aee222b1100b9a3b50ee85543b9d6e38f96b60d04d25b8841dce2e68833ec68c358ba953ff3bce1724fdf561405193df4d1571e32e6dcd71d51e706c69002dd98a7cdbde2243e9c8eddcd12334b9b6286c7083edd27f2648e3ccfcfbd8a48f5ac89f9c70f557a2a9dc72e8f6630b8fc0887e758890998478626bca34f7520bdc26110f8b7f15759476c8a8f6ddef1d83a242f51b6a00935230d5e77860b62fcdafaf027bc8ef430f8418cc9126e5aed0a0a934aa1cec7471a03e71bfe63da8184089bab18e7f14bae240428f3cc57d801d24395d4ee20a7239e59d1369208942929da3a8936e4c490fcad53c17a40b8c87f38706d64a04b922560ae86063268ba4309132f121b6490b32be37d0b8803641d396ce97656a933634f8201076a80ba20b572031758af09b267250e8dc568709882b29224db6907ad046bb45a03488623742b9c48808323dbcf6085d45611d8d3275d144cdac88cf302be21ac4ea61908c871e96022041ac067819cac2160469b3984a464522afc5ee4f80cd0d2b2a573450233a10bec21580f0313be0c02cfb0b6e346acf24613c5dbd2a9b64f64073ca05540601ab118e81e1c4149bcd64ce68e267268c96e3c5b1688c1b73b2cd009ff71bbd66c39777921cba5cf284cae8f62073115e21a924156dc83a385e4499b44bdcc85843a70bcf0a28906288294c79294eaa11eda3dd594e04541e9cb8a44f206a3083c2d9862c131ddf97029a53deb0008d4dcd054ee09500ffb1c08902d77ebe21888cd69a9d74613d499af2f110a1313450113ee21eaa1d805a7ae3feb4bc9424403fdb19f2d7481841fc213a1531fdfd0420a5ff8526e0f11320b1e6be37a1927356146232310fe9139351799c08e9a1475f2d1b5393f809a8f70e1cc85a610c523470024b831297e77e8646fe4d25d7cfe0f1aa83f0294225c7c2747f0e0db7c7f3ea2cf48a45c16fdba2540dd8132626e8931b88fd0641e3c306816c6b78a2d924e24b342e848798b68b0bacf741f42e0b831b95860453d1607778ab4ddf95e5cf42b11778a306620dcbd64b6bcf230f44da233f151efe2fcc258bed0668635e5f7513c45462f587bd4f645d657ac6f30e31514044dabfb788afdf4c4eea0de145abcc19dfc764eda1a715241cf2e0ab045fba8e294bb8a6c92160ee79b567a8c75a1819a9fcfb1f526958fb362ab1279e3921a46d360a56e41569ffe46ec7c8ca638747df6c25cf39e35366be10d81834602b2f516cbc13d6f54e2ae8ab1abe53e81b1ecf5d6cab6114fda37a60bff3693542ccafc88bcd7a02276c3397ecb0c682dad6c270d90008a0b8e3ca759ffb04cc827c135829772637977247a37e9dca834dbb683bb5b353b3fc240bdbb4452750113f960b5cb5057328779c66d416a0656ec6c7ee4720d5efb0c9f0faf50cfcb08987d035cf89c7f67b708616fb8ab45249de58e56fc598ac96f5c4cfb915ff9becce5bdcdcd1a1e40d6f0dec1e4c2ef5e52c21742d5dc3bd3574861c18aafd3d0e428e5ca33cd530f1a7b54c9908295312e5160cf002441e2f0b4f5398dbc4d1ca668362b96bd3277d582159ad7f306920fabeb24013de9c5c18eac2b286172908ff52aa78a7aecef18c2637a396ff98ee0735fc2fb144b052fea8b6b1805bdce0b828b682fc851e576bcfdd0b560472afc80b982682f1a03b920bb3cb2a4f60b0548ff90c1f1a41f7d4039a8cb2c52129dc061a68e91073ca020f1460ec0fb6b7b472bc4275567031680327176fc67961120b5e057c8ac0b859b032e2f22958e644d2fdceb5eb000064c36d00690bec8b08f6ca55be3be353b50baf84473ae7b1a8d32df8e44c1fd754fc33a3910b1aa5231003e09ba8ab826b30beef378e38000b8d6bb21437986684941b6524e7631f45362e31c062d05d8ad075b8cc8780491978a9a5164bdaa9c7394ab010b3d2b7e497dd66b9373fc8fb2ffcf396a3f34b00d2636e867b9600a06b2bdeb888d11e06f72685e3919b1819bbbb8b675a77f1f8cd95131d41cacb37fca570d6fab714757ec419ac71c6ddecb1c75d633473d7798a7e8e93d6b88544742e1b08d3b78b5860d52c053695a36e85c9163a095f5c60d01d31a3419585d394a18e0d6488e6eb776ef128df541bb1976309a760d342ecb2608ce89a8e957dc701ccd58504b7e7a8f5bc4452e6a76b11a171b4b5e1a4736daea1447edcab95ac120cbd803016a2e9a4f3810093be3665029c3d1a5f545d88cf069fc19d3d79cbf2d5070d4c2f0c25b9851625af763ef578f1c2480c96becd733a0d100f2460be854abfd46852e9b2aa6f51aec5310063dc99831e1530035db07a20102a17919e5fffe46b1c06b9720af43b63577a15dedc472c2bb5690a00020185fa39668068cba2828992290e08afb2f2b47b84e0b267b21e1e445e8bec2a7dc1c89005e5aa06e0e8eb030344c28a820401c6848a1001aa839b8ccd6b979efabd679bc85d92cdab851d2430230f9d6cb950c85e6095bb53c2ab620134434040608aa73af85ef8ef2cfd6cbc293fcfa9f14274a89973262a7dd61f5c11f3b0b7a899e136351aa3fbab414359cf59251c37c62362352e6fcd812f4271dc110d0cbf23df41fcbf5d828cffc0bc556e1812dec335eb17f2683a4af90795188bbc646c9a9613db35a545983f311ca0fe768bab1f9e418fa4708d89605afd05702f1ed081ca820f9602e9d42289fb6ef238dd08c2b6f30b52ed54e2f4e0869915e798f01c3149eae1a257ff54ac1d075dc88ca768a2881e0bc38712b3d561d883e5b0b9f1af543640ede3cbeab58a951c846cfe0ffbe7867a4119f7f1b245fd988d3373783862f9066c2529aabab0dc9a02454101d88f79cb4d5f60dc32cd907feab74acf441012288d9a5128650ab576bcba1a3244c9d92a36d659f33a1a8d90e7decb282efd121b7afe86a3110c7d66f5b2c9d95e89db185baf538b8de3d21fc004ad5437cf7b8b97fb6fc06ab91a5fad80d1806402f9b3a90f60ffe8ca0507f9a3265c680f40c075b2802f487b65821078d4f98a07088f980e1151439e0d74e2b6194b2a08361502b4ab49361c914f2029d3b299c21b634a7e7960c907e0b25e34f4448d2800f6d27e2797dfd40b9c766257d3c66031f4bc6df74dcd8da04551b133a0a757828c49cfd98e8325e8787fb7a282defd0f32bb2a1ceda2b2e8b60f1a3890edc7844cf25dc50439087bb2fe790e82a7741173d76ef805ddc1ba31bb4f88a78c0ddaf8be0e127f059c3bfeb110c1fcfb402d7126007b425a1582c40e1e110341721eee38ead5eef1e6f1db0bd02bc363fd0a8f0756610a792bb96da8f11f91b2823e2e3b3f2f63533b66906bbc7a19a06d8f72a7a0a854c60d21245de2fc9a9bcd429c166587d5f346019a418677e04cf4cddf01e3c1d735ea237133297a86bafcc7f29a1f12b9968a885b4d0c141ac6a209cfc54683ededbee3d24d2f770d0bda23947e82417b43f1a874f63de8f0ecc3f397da24b0842724121dd7f309d6682909a312bfb58112eb7a0880c13b954e01f2763ac06870acdfa7c7fbe9cfe91328d85d33cda84611ea3a7b8a4d0267856fd0926b8613893df5850d4bac7c50b4966f0906cb56ad42d1b003a7f2bd38763c2b0bdb65afa50c6596fb2d38c31af8a099726e5d7c79054251cee9f0f949fe32b908ff6029dc1c82624fd2f73f563631077810637cde1240d87197908613e843fd6901cb4deb42598b2be0a0ae0371167478550f8701ea63415c214a9031e383d4a3821d3a3aeecb3a56cd2fa5e3bc68759f6828961f32a684effb617319f289411475f2465deecbabeeb1789ea79ccefc05503c41ffb0dc1fd85e831cb6d793c706a8a437c5a935382d5fa1c09fc1658f46d82122a9f310e154037e0851b68fcc170c08ea2cbe77c77fb2b56a4cba7ea2b6db61770c400ae952c83478c5df3583e69ca65470b36ea9cace60e91d4e990b0555df73b08b94276a390374f6328acb77bfebe018ed981ec00297f792c9f851960266bb30b67481e89c3420ba85ed22025fbcbe4f8c5d7b795633d77efe41db3581efc3e4f063c880ddafa299f7e7da5977959a56d77f050b7e8533e39310cfb54721a6d08f6b24e72f700e8aa6f29412669eeb87bfb94cfde97634930b89d4c307014a56756b6424ab15786394404fd7fa027f96cda173870b784914ba0fa506cb8b8c1fe38c55c74dcbd99094f5ce9828d133ed19045ce2b9139f2f3e81ae9eb3a5fd022a7c7715e1690c7e34582995a554c04c946d266b5ebf5ec21270c235f2079c8c9a70d4b6202ddb71e50db00f96c6c4c6b7398dd4325d1f8769ca18cc71f64dac6e92b0b17b7e33366707b4606228b37e1cb2fe67f1bfaedf8248d8ed6a8fed3a1bc03c4871604f0fdb0338e4309922e80ee6b7c9e7a307051d628d1d297ebaef1a9b837f8ce758d894010b56fb4a9c5dd19c3aef1d94fb8c41e369e2139ca750ae2b7e3f379dbc0f2b84d6fa1c3dfe51aef8c0ecf96c6f8ec7b68fa509f413525dadfa1c1d46fc4971f3e63422ec469c68a4f4b59ca06587201a0c649ee38f129ae30d71120a7b74fe2b09088c00b44824ff7a10821ea3269f8a9794ec3905916d768da784c1ed96bd5a978f05f4e783e7c229aebeb55b0575428d9f44f3a0a832acc97cd3a7da4d2f63daf408b51bec6b03010e6d8f0b9140b34a02b0782af9f52bde144ca08eb86982f7d274e5e85cf45e480462501096838872a7c16044800dbe0c53c43fe5f8aa5f5c2228c3aecd0be94c75b2fa1dd64fc8dceef5179fb20921fc05d0d43e10e62b28f736c8d1c3830f5b2df3be0c7b49feefbd737fd14b940af7f8718490f0be2222810d889d4103545f1b1b9d5533c4178c7c486b3a0fafebbd7a740b0e94c0005f34da5fb807c87f9667b0bec78faa30239d88b1365b98099b0360201a9da6a1ad990df6209471c8d582a468625cef97ece84dbb1a34135ccc2f0fbccd88448f80cbe5e885ee3559282348adcf6f3d549a49b05e054cf963d0af5566902a1c2184645134a479219eecbf8154cb6f6c068c365a4989da7d8d06aee6dee65af5cfce5159b8201fbe90eca055fa2b544f964df80047877195ebc0a33804b4571339014883212309ab378af90e9cd86b77c3cd720e82da6f8935b980185259f9d068a3649e0ea01cc4c7a3e8c756b20690bd39c7ec972f8620809146ee58af297dcc31301d36150026645a433f14ef21d7f465d38c2883b2c4ea29400d10f86130b579a51e5f132564d4990008375b1fa1677ebf762943c144547172148b34a6904b8bdad3c5a02805c4e5991e46ad05c860f984941fd509fa40371b534c91de018e68ec9d8a592f2b32b7973916fac2fb4702eb613cb2a60b0a3f852fa78942e2fd3fa16028237098f769accd613f542ca94387185de2a647cb758310f69c93b6b281f2315a47188d5b9d8f16b3dbe04ecb4cc53fb6078be38992828a64d7aab40e4103d2a656da24bdc0075977ad8622f82011435f050ac8f9e947cb54a6abe89af0eb0b9f654d2e7c2cc660fb7f3bc2e577c3256645b27d43544dc0086c15df556f2b97c97107d9865c3a0c13016df578182f24ba307f2c5079ac087c36a588744c23a322a7ebe4a3e4c7d01f7eccaed7daacedca4e01b47c631d84e9e9730b789c57622501ad648a2b3d48385bcdd3534f456300820a8457f20051d84b5cf978232d2f0c71a9d173d89c71a6cb799a3ebc7282516fae5cc7eda21ead7edac638437c4b3027e9f8387d3a8549363bc6b8ee5b59bba7b5094cd6b2797cc0b47e9f03385478fc9de48ae2b186bccb8ef2231a4192efc559423128cf85363bb8ab5fdbd508358223ebbee8303a78be23ab9b8db77de115b75f21cd3e1349c6fdd8217b208bbdf43a5c7f57c7c4a5081b4524292149a8179bb39a7ba2716b37dcaf58a844d55a70a898648d5e8057988ebf9fa0dc3126911d5eb1b8b1a1cca7a469420981b56d466164caae9beb8c0fdbc90496f33395ab4c3de7a98565282384e192812f66adf1ea04548d8e32a4a0a84b8615d6d6301c701af539357955eafbdb1d82660c47f9792b6a999e3fde7f50d5e4a7120b708bdfe9f035e322ca3bbe2554a9ba62c52d6553e83d9adaf5b311b857bdbee70048222f35ba6f219cc6e7dd5ebbb03eeffef75475131f4aeea500f7271396e728bf0819dacf37500b4c64df73d1b9867d9535e6a290282d6ccd272811dfa7d435026eda4325f956a16b19b4d439408139cd891248602f9b07c8bfa5aab979e911a030899de8ea7f17410b8cf9a34c6683c16fa727ccdf1e8389e0db4a6fa3787ac5c044772b7386c531a394c691cc71a4ca07405953201308723504489e9edeef22cef82d7e9db16b3a8d91ce6b030c2e05d35c7b7050b2cb5376e507f13b39f74d9edd1c2f78093b0b9afb96c5c6ff44fe038f7cbcd6414bc1a721181d59e93ee8b3c4e56da0e5abc8906ab03f01e0ebbcca990c473ea4deefaa3f25c0349bb98df20becf945284062b969d18affd93b1232b0ab5c44a4db4bb89f19ff3fb05864210c0566a2696156006232171408e09c0320e12aeb34f5b75b09e3dc6e637635cd357e015d7ebdcc50e23c03b4b02bab5e42e074ed80ce550982842ddccc10e5a843a4cbc71ff982c210f7d386f60f0ed58e3dae42389cad953aa67fe4e0b4ffe3858b6a6352af75ea65a4dc536501a6d79088f43952a1b52c37d764141affdf03c84f956e881a0fd783c2029dbcb8216437de99a886cb044dd4473d7cea2aeefb07f377b166243bf3e1e2d46d0d4c2920906d3ed194fe33f11a185e230622856118c0edcda8236b37fe10d41c33574d51a9190f935c3f7a5d927f804a68f6d4e5439d38d041bbff16d3c9ca5d0472d42ccd5b099822551c5365e07caa7774ae615f6b09942286b621b1fa8ac1855d66db532e0f567d0d5f49b68ad4b1999b4b47c05088eec0c9d95e5a770ba9abc954117c6674932d6ee67234e50e074e00814614a3d67f1acfb69a22d662d2423526b89c2d243485fb48ad42e0e13bc5416ae0c692007994f4e08676e87dd4b6bd655213ca743fcc6edc9d3d3235e62cccc4260928c33cb591bb390a160976f800d1991b18eeecfad9b411d96306b7a06891f0cb6b7ed760f76421bbcb11995b15f4e0368e3c32e3849137003d2af8fb1a2f927d28f306b113096e71f0c8011c1eba609289319d2953d7df1e37e08a150d9f3a1b6ed64a8b9fc2f248742950bfb1686aee6cd612088602a67708cd6823c6103b6ef3009f6746f830f0b11ee2899a068522660d30a2c2e1756731ae62338a7dd838c7524b38d7e05e5111222ddc61c815ea31ed593de09b225fc6c14ff565de4fbe97b568addd63ae123128aa0c359c2e4eac06565dfa06e44c6f89474508499b578a978903035e2e53627706d78f77d9c45570b040304c029e0e8771da083e5bf88506d4ebd489aba9b21aabfd4588c951251552a9cd1608141bee7d4e62f7741bb9b6edcfb50a70139958bc23d580c03697fda6aef932b363e621c8eb12e078306801a4d0cf172aff583423a86dc213a8f0561a804767b0d9c3173c6305df725ab41683d05df6cfc5072de6cd3d2d651addf5e76a8e8da9f28756f237a77741435753e9e887d461eade37aa6940e169b093d773d111738ab6bdd5c971403002f5f49662e7db4e9f3c6ef946b6690381c62bd42fcfd3e9c94d098063a5f81d438c5cd322e05d0141b818a645b26a94afcbdf91b0ed8d716c1f8b184ba2e527e0b8661da6e0d6f8e1464c5cbe50adb3b370e8f610a65427d741ebbde65c4e01a48c8f4c0ff62dbed149b615ef022b90c963b9f438a33ba416a06e4499d8e53c8589638a9c37cb23e0281c28f42384e36bd1eb07b731cd2e264e12355af1796470b72970487234dc1d8b4875a1173fd35876c05b91331f0d8aeebd57a677059cf9f415b8b1c76b0a45d1f7147f286052351209f2d7c0b5a0b34f6a42b370e48a468b4a73a12a2a95b81bd0a1b1c5236b868c890e2dd6ae89088aaab34a7487757668167b11b8b0e362959b37a8bc1f6242839db23484c8def2a38fc24757754e946bb4d66f1bc528c366dfdfd480c9bbd0af4a78699d8b1aef05a48b1ff2684ed476452a3d195442ba5b260e71f99859191e086b248638b4488c64143ba5883ca4ee2d57457fc2dc616ab16288b050b2e15ee5a744491f06ffb16bf85b882629162b1a4c2bb253564e8e6a13f2779b99d85c858745848f7eda07292548ed01536d824437637ea24986b5d516b71b6d85b70abe85401a9f0f45305dc32374f47480e9af20abe15a22ba857a0592c2d3a16af05b48ab416260b9d85755a74a41bca57bbd13c1d0eb9a4953bda026a7692221b079d14e75855d42d9a2d90ae85a1a11bda721a15889e4a2226e906bd5106254cfa9a3bab627731da57fca64154df4262b6c016542ad215b4a8e0b4b809be491b1eb7d00224647237f624e4ad5ec5bea2c3a21e0ba85124ef358e1d12841bdde2862e298936a805540b297b378e4e92ca41cae27616d2271a478d04ee5a2cea15e62b7416d56da1c68b7499c6412485716d0bfa9293b66cf159d4a8428dca24674d6905df0af112d3e957fc1635aab0414972d0942d9a67d1214662deae6f01b59fa4aac68126dd3859159fb3f0544bb2756515388bdd58a4a79d94745db778f22e29b9452b2e4b5e8db798555c5be0a9a8b56055f863d1a97192321b87ecc1a879e1713d15332aea02b21a2137685e2149c6e0f2e01da17a4a4cd4c75d4220507a9215f1d8916f284a72eb78317667b5605b8b8e6187f94a7e7a1a0788168fed7f3d1131c986326d0db4a21f761c9149b8b4859652f246a782fa0aa8b924636d7605bec5c6a265f1b7105b34c5e2069a24e0bcad40c1428d6712c1360e3652cfd9cee2c63fc9d72e0d34e9769bad287cc5530dc96e9355c0b1d054c1b2f0af1859545ba4aaf065491a27bb462983486ab89d159f85b845c52265e197161d1c2418dd537312796d1c1cd2ad9a0d14c9ec5d1a72d27fb71a9d24754b5b3ccb621bfea475933269b959ed0f82309220a2414593a08deb9093bc699dc5cb2e416dc3cd305f4742724db7e8d893906f835808f69ae4d5f88a9aade0b890beddee2d3a649380e94ea82321ba7a85eca18d027276d7989584a68d83fd5e4b81cf1a9914426c6ed60aadb509b6cf0f772a10f1c1a332a30d15dd0ec3396877cfb0224d9d5f05aa16b54f2191a071b890fa9ded4bd000c289b87d3dc9f066839d945f9b7e851aff24950d5d45bb0adf626ca9e17c5f61c34752d1d02db0aaf02cc41694168f2a750c1cbe2c91ebb75d54960babd6d0fa307015aae2bfe80bcd4dcbef9545ce8d82d2f9780f5cfe02926333a10bcb883ddc716c005d7caeec8480216844abe5c1dff28dd24b1dc4a7ce30c6eae0d02184106e595ce952ff17f34fc491ff22b700e8e77539dd5f4f42a5cfe516ca700c7cf6ee5de4eacd224949947c3a41143494369ddfcb1d84e93fc6f9187baf5053b5fe42c820e91692043e20ace6e0761081bf8a536965ccbc79ec5b56f921e3744bc46824c710fe6b801ce303407ef7f78835c8f0bda98c4541c1ec9d9922df90876d5a03b094d5388002682b5f84988a40de5c8118c44162bee7a13467b4fc81f3e6da5a587887923445c2fea0b5983cb1a141fe2e4717afc59a13ac3c5ffac785653a1a0eea9f3128af83d290836c588693cccc699939e999c2a457fec8f64cdd4618736f906d462a3f607d814b5f81b3f13d66d59c0d2f1a91d402d47b1581cbdef453c6c586462161351a96a56345cd4077f3750d9a45a43959bc64fe9bb1d0a0929358a9871944cc804bebd2410a4e91acc020acd57ea716fccac0e79c284aec52f43dfdc42a01a334746429c49bae726a347f282b8eb46eb6f51f54a298e72a4f213e7b80a10e80075330fbc564f8df3eef71a92fb20415b902cad31bf4553a84c7f160a1ddeb1deec17ffd59a0117c33d2df4602b111c80f95309a284960ac0ab6e6f6aaf4daf2ee426c5c6408c1c87c05b24421a481f897f259fe1a9e72aa87d1682203d6ed190953217041754e9092af5182c74311809c27e1be9a67eb506b5b74165cf173755817819e9023aa5e779fca90c7a8c3197e3703a750d5b61e0514bf0ca3d342649f0ccf69386803d54fed7d90858d77b2a87051b40535cb9ea3b544cab124cda817ecb738bd04c8d8e50d6ef0d1229ee3084b517fd40b89ad2829f18bdc179f82dfdf2692102091c282df3aa0841350eb3c71b0d7b2089ba38928a1d3e2ab076519d90666079dfd41f65469a0eac9e3073d6cb3539dfcbd128bfcf5d218f40bec2545785a498910641dcadfd6442828c9847741d6ac548724a509efdf950fa603362e126cad60c78231eb6bec6c0b8a52916358a5244abd7078940abde6d037730cc6f310f113bca2f0ed9807a5bad2237f6da1c266c45c1f2e4b693d7f49d52afe4c672a8d7ed506ea3d1918a122c8561816374d8abcd98467c95ff22c43a0ccdf87d1e2044f400e531fb7c2e2c32df694c96feadda4c79dbfad6645731b3677775ee846e599ebc14874aaa5f94c1d21aad8566b2a405c2fab6abe603a73c6f7341e48b73052cc376c1fe8e617109daf7378c653df7b6b8be8f433713c139d7e66305a241828029bee1145465de43e5308ef2149cb1909a55618a700871b8a767f07bfe08ea5fde832cb3fec1dac4c1d58ab8bfb416b82a96d147ca0ce8b45de704ed47723b8483166f748b2adfb4596f1b838fa3d8c0c4e03fa215a6a5c4016d6a60d9d35c27473b419ed92b0dd585d575cc045bb3b66a6a966ac657422f1f607453175ce6863968a35c7bc9777f1736cbdfc80543257a998c6c1e70b2088150167b40dcbc088ffb54548c0426b5434b196104224b27b73e50e7e0694068c06b387a6ff6b5d39ede0120ded1217e4025cdfde79e7bd57c313fb994d3cafe7b3eb66d98cf69fcfe769a0fee49493afb97ff257a7f31ecfc907777017447b3a09e8ce96656fc3352ccb762cdd7b6992f82023205965add5567949979aedafebaa15c7482446095c1fef154b75462a670d30100b707dfbdb7befcedb81a2684a23608661da73279e9e538b5dcde7b70cdb4e7610dd79bacd743e45c6d7dcc7fe3ef6323e0b42447f6474309e749e871b3ee982e84f27018d3ddb964d6ddbe0679d0b5fe0cfbcd2bfd4e17ca832778841a25792945242e8c15a83e8e936644627a57452297330d6f0532247d3b711640459e263cfa284c408c402ac816280e13f9e0fa36108e6ff29a31094524aa5ec48d99112bf863bb2133bb2d3e9c80e9d9183e73bad156a6bbf73e7f6747d1b5ee3679226c9c1c979018e86df115ce8794416a84a6107ec435fe1362cbd0e4499eb2b110132ef0ba537233b09a597836d605f82a406488aa0ecd390c9477d1aa9ebcc6a75ec7134c006ac66d96758ad58ad17eb30c730af8efd25cae8a061b3629473aae786ab972ed41fa5e2ea412932fb5005857535488fc2482f3e8db4ddc6de6a31cab7e106e952ebd3408d7d2663ccda6b91ce2bbdecb34c6615467a18f695824080af8cf35791527635a3d169b41be7306b902e1bd7fa344a9610197d128e066458f658d623eb2a50c56ac9e751924272d329722252b236241e44db0f1d7a5400070ad8e00d3f56a6693283b244b33b9d73c648639ca50f8710b0a4b6f9670f8a19f6fe11cb8cdc8f1decba1c12332c62d8e390731c026569db7248c44adab36c843764c5c741cec49fc1a40d86fdb015c0210c1c9a2f6d0858acea2727582119a2a3151a7e3350a233090a02efebb307d7001cd24382443c7d8898e290483a19754087fb2e29e0374060fbd706e0e8c131e007bc43299e678c9dc7a6cc3edd8e272d1f66dd0c9e0e7e0f6809ecb903dadfc8d5237f2b9ccddde98c13e74ece39f3f8f46d47a40ef201d3b7e12fa11c66e86f3af3c55eebe836a3514ae9e3d9ed1f7a8a74e73dd83dddf6709b50cfcd8d5c1fb11c922e565e1b3de07d658a3fd4fb3acd349bd97fdb6143362b64816ffde4071664f271bfde4eea0c440df2017bbe87a66fed3cfd3bafe766cd1f74034c3f43e168d88713a35896659e14fc359eb78fb37dcff541f4bd9e4e0ba2b7ae87a6350cce0dcbb3466b43f488cf25def8d70f89727ddd66eed77b6fbc571663846f7febb2eebad16e3331deec6117df6af76f47358c30d26d067617c2ace3af9cc10e34c23ff4868ff76f950cbe6639140d6dd6304809de346a682a3d4a51e40bc4d765461878c3148a7cb1e12bf4e96f189d27087bfb0d506511c757977b3dbd386e246156d870830622026fa892807471678900e7cb2a2809867f63fe0f89a2e908df6197b197298375b75215d097f5af6b5f7615d65a3fab7546beac9dcd3aa8cd8fc3e0388ee38208228319449a734e381d44c2fbd290906a199d9041f9c560a5e10783d60703283e1920f1c9c046d3344d73bfaecdb9cd6079f7d0b40eba600ccb1a6e9d7675d8a5fdd651ad7136dc068137a7df632086fe68f8c500474b193a82446e33f1b71b20206a56b5209abef75ffac578d8c7b285d005d7c7d29335a39c00cfcb04064834fd0f06456030e46297587aae49cf2776ecffd2d05c83d5dcc79ed28c37c7cd88ce494e079c9c5b9b770df6f73b62c9114a7c5fbdd1d01cd8cbefa8be179cfa4a971ca4be3006662cd6486cda1bf5674c400e516bdf74c031c6d0d7d3941cf192ba6e396e1735d6499dcd8c074ce9eb33ecc62d47d431cf28b0cd8e5991417984066805d8aa6c33d2b7fa1746b12e7c81ef753954b12d90b08746350d339419a804f86509cb0fbdceb3d3f303514a996be4cf0932018610c226b0b4d045601009709e3106159c101a68365a53024a410689349b2f6c401fb021c285920f054ff85280c447448c23454040a4a2117b8d5ec6d22ccb1b890e118b44226e3b24667c81771c423b0f72c5e3103006465118d453f3872254bad3f02b020993f6cf20cda8fc48b366236f0f9788a78b5b176d641cc91952c03bf6a05dc33dbcddb66dcb299dafd99e7e677bfa5bd57ee8acb369590f4d63d9de0ca549935e850caa641804c201de9e9ef3358cc26d1ad8bd7f5d97e76ba847765bd3527b0cf374577a327bb86941b4d6f5d074765f6236fcba241f018889983140829ac09b0bd5c0cda06174cac614f0e6e07358e54a803e106d4c30638c93870309992e60c2880d0ea49448f85c20c6870228ae26f3e1cdb2ee422d035a481cf9b2256f24121803b5dcf3d2e9d947d424193280e25b52848a1ac74186a3e7cb1e7c7abeec014acfa73d58512d7651673be4cb07e2c36a4dbe3ffd8cfef061f5852cf1bd6e3be84fe931de8dc77c99c3214bfcd9c4c69fa025607f286be83b01cf8fb376d85f9d0f0f9677bcf62b8d3356810bedef592cd1f1ab121dbf2e19a25fd0f09bc20bbd7fc4eb77fcfbd98d353e8e51fb5b3f76da5fa8c1abdbd7cfeb3331b43fa7451acfd7f7749db71df6377bdb798ff6d78df88eed205367baeda8105a38fd6b4dfcfa36ef48b71cf16b9dfe90c6da8fdb8d1ad283ff23d6f0e1d1f1e6400c225a0a9b8f8b2c96488144e6a9215d760dedb30d675fb36e7bcfd76e7bcfd6a968addb94d6ac5a0c080dfd83d3dbff981a731b0dee4296ed6fd7f9acc39fcedf4ed4d8b6e37aadc3b61df5f3dd519fe60fbe301893830f0cd4f73c90a92bd5326d47ede87b687dfa9ecfe85f4a61e729842cdb67ddf59eee3eedb6ef742a7acb706e3bead5a477a1a6144b927d363abedc018d5d0dad4686fb837cfd0877d435f2e9571e33d7c41df165ae21bd28a1c085ce1a7e3bf852e80399da87474f38afcfae88451aed15ff66a8a26b4817aae918a33b087680d2311a7e51883185165350a1614c0ef12164a95ff30ea2b7fd2aedd4f16b85428570d6802cf099c88f39e6dba79937a286f0696276887d103d3390c883d659738d4bf943ad13cb344dfb2d4a6cc62d4bd9344dc37ed3321df5319a1a5bdcf811b57dd011f09d7fa3e022cb2696bd16b128e3bc91a23d90b9b38fd8bdf72f1f71479681c49981444dbf6e9e6fc0aff18ad1d68f30ba10e4fb14565abee7687945ed1e180335cc3448b2afac7947cd6342ffe9f9ca20f3faf0a4fde716252dffd2c148fb4f28723cf7fdefdb8d2605c8c43ec2f7e1d130675f371ef46ddecea33ecc40a2def573c8817506e45f6faf9797ddf57fe4141d7ebddc41c76e6e39e67b9e578cfa6e3e3c3a03908587f3907f4d2071bbd9e61af9b986fa887ae68bc579832cceb72b6dbf42f1418133b57b31e6b890f44258d3108f1874cc33804061e010132c85f6cb090d57fc370d311ac4d025be5f68e9c663fefd995d0f72e10b7cd129339028a50b5fc418eecb2e47fdfbbed9bc2590b8e347d4b326c9a074f111415de02dff0289daf39500164238220858d090459321543431f283228e788208fe44160ec2e2cb8192cf092620216c35c8c125e38915dcbfb30726c6c8c20745aa9002264432d791219e40c1133f686330410c2300b1e4cb8115a0205c10164f50f104147a7f485be29e6409668004245418c20623900235c25dc171ab261cd724146ac25dc9022414911773202aa80b54bc1af231f739f18920831a680a1cf5c3f7dc0e32c1839ea1e1c784496754dbba941cdb77b24ea7937aeb6860a675fe99dc3a1aa8cd4ede9c66a3829e7f2bc4b61bdb6b52c7ed06a66ddda681baa647fdeded6ff902f52db6cd6c340eb3bf1f738890e5fe8fa92164b9f6958c74d4df0d7234d459bedb8cfdbbcddc97716a710c7d757b072139a4087652d319f59c7b071d1fb3f302b95a66185b826cb14e21c48350880349c1712dc0411125251d4c492595b17b0a9a02cb5905863f1f04043c5d36fd0bc65c3f7f8331765f4db9a8a9a53536e5661d0bd0d4d25f80960fc7f82620265f13453e269280a8c0842802153a40c2a90a4d44461441f235c104e80331f996c8d19a86df125c44110a45c171d1dda3478135e752baf41897c822091531c627e2d76f41d79748ee0de00ad4dba3e943f88223091270056a28700b1a6e392ca0a3f46d86cad8828e119492d261266d2449c3995134944158f9504212b49e5554b4195be00d3f1c11067e94281e65a7428385c50c26ac804a12bcaa70873db68d113e9d50bac0951890935a457a51b4042ce5298efc45832bed1d476a02cb3edd482279f3c6f5ed6f3652c21312356e94807764e9f83b4299f831caf8a194a45468481b1469b305f11e4b075f12221f8a043370dce348b38150d220a474e934082025384eea0c3404a3462bd8b7888c73043de88203f503f4a0deaebd0a385e4425f12607c6c41c0d7fa5e187e4d3d0090d3f258668efb074f11b604cd4fe72bb01b278763c2975779f3ea7bbbbcfbc64088c89930ae805cc74e9fe6eafd59c9ccf90e3e754a807f512221ef9a016e0a84142602d640efd968da595f4621645e0fb201260491a01de1247e2482ea44b2bc6eb772c7935429757458063fc8f713aa8088e9a158378b51b51514944c51bcfdac7d66694cb769cf4ead7bf3aaaabe6990677dff39728133f3483b5d7aaca5a63487a1587fd98c3f46d46be0713bf460d3ad6f7fe6e41e93a7fd2dd8717bce0052f785dbf5b503acf9f74d757ec770bc420063188410c7e30e6b87fcf832d2d28d87f3e9fcfe7f3f9ddb2427769944e463ee93e9e0eb26c1d4eb672028c24b630e20a98962db49041c3cf8a1b197b70495b5abc97991dc9aefe65f7b55744554a0f302625c7189ae62d79c8141df3a996db8d4bcfcfa609fb89844d777d0629a493529791629d99e708b278f6293d6099c3c4ba3d8b6827ed79b367f62fd74c1bd2d6afb986667d95b0eeeeeeeeeeeeeeeeeeeeeea89bc21fa75ab1704237dee94d5e1ab96ac5c26979303ff2d1bd1873dc3f942a19599fe5382d0d45a452c9643a9d6e6e501aa6345cb134841042082584104208a3a99583d362e1ac58aad5a7faa0c3b02e0e6e7132e7378c76c780349dee0d4671a9ff5aaae9a7f8ad538e8e7e92a393249d6489ca4496bff8a36e0a7f9c2ab258baba2c89ee0893b8284b27eb5235f2975608c763fd8a8bf872f839ef43deedd86ca4ca5019aa9041955d5508f87d67f88d0ff09bd3d400d4d334e42dbf6f017e6396df5c8ddf4f80dfde00ec8af5ac006c006c0c56c5c2f0fbe6dfb8fbcdfdefd7d7d337a4ef45e3f5b53d7d85f415d2d86b0cdb5863107be8218d7f7b3a7b9d71d9ca5fa6df0b7fb819dfed150dbd09f857fe4540de17cf9037e60e900d7065b83a94a7c857e45f5c80bc31c79237f735f27e8f00797b03c83ba475907f57f2bed8cb1b7302c89bfb00e4fd316495bc437ab67c45fe8521ef8b73de98ebf2e63edfdcbc80e32ff4e42bf2af0b795f4c236fcc710fcafb6770798728cb57e4df16f2be9885bc31b742dedca3e4fd9e8cbcbd95bfd4d027ef9087f3f6feb94ede9c56b393fc5e8c39ee7ffbed6db9456f27c9f857ba267ce26e1ee5c94c11a5222aa2222aa2a290969928bf17638efbf7bc1d9a32b3e52fb06567cbce969d2d3b5b76b6b4cbd0d3bdf474e9e9d2d3a5a74b4f5abe94a12cf9a190e7fd731cc6176569995af27bb15ac22af6254fef5af25aba57c7ffd25a7721cbbde2dfb8d2b1aa642880121954d91a49bb15260dbf2a78d003d0f0ab62889e3ec0974bf2398231d7378142257173e46484898892764f11e273a3b9f495ed25b5b478de3fc7e1f936a47f294270fc991202bcb31569a4fdb395ffbd1873dcbfe785fc9de42f33ee4b1ad92bb45f293c60bf7a1b991a894a20f07ce81bcd7cea49afbe27bd5068daed019cafd4e76aa534b26e2e808151b4b52a74a3e1a457ed461321cbd4ee3663030f21c021b8be427566350cdb68aab6d9a5691aa66d1bcd46a3d1cfb4281d4e8a423fd3b48d066f345706d176a3d1f6b30b5e515e1dfb347646560804f68fd275901babe9e5ac17d3228c22c628e59c935221586befcd02c3b02c1bc2b66d9d0e0b63fcf91821c6181fa27c4dbeaf89164d92a0254a1819880a4d4c4d4a4d464d8468f99a155e80209b30ef2ab47f840289fff542fb472d80f8b09a066491d7cc368351a280f76bfdd265a3a878d23d8b5fdfc68d35eff67dbaedb81ffd47a40fbb1df7b563ee8876dbb1ed883fb7990b84221a42adbeed229d3ce2fba34817687fa00289861f93151324f4c4999c3e3aa0b7f3f0809e3f8ba8f53131c448a9aa5841ac06d3112bf615d36e482d371d396ebef7e97dd7108a0b97a4e45fff9b83da94fb37a496fadeaff7ab2a0b2ea6e06f6db4fd6bfffa53faf573f2f9601928db8d98d2f7ea6a3e9b8e782fae34a7607f1fde90da7e26b50db7186a9c4aa8061c37e0d043071e484490481729374dbb2e0b1a7d5973dffee6767db9e9881f1322dadfdac772dcb70f377cdd48b3cb19a1d34eaa9353858eefc50f7406371df0ebcbfbd7efa8f7a5adbe1ed357760ac487d510b2f8fff0616fde7207b63be8083fbe9441151a6ae8032db2acc3de359c61d97f5eb8c67f7ad43e3cd2ab4fb37fe6f9c2b9df49725543a5f2d148499496f42164894fa5921be98244a2a412d7dcb3a9cd5cf8a1f2e6fabaddf7a7bee9f09f28e92991dea5a2e174a821a5a13fb354223d9923064db3bc919efc2b07aa638eccf117c9922c95cf0ac380670481cb5cd7e4bb5fb1c27b4f862a420008d100049817603415365c48e5608283c6e700950d29aa08fc0002a0d5047c80c30c96057a50010ec7c7120cb4d0d2c0143ab0007384f040b482c80729462823213e920c12113b289d948c88c2f4311dd1c1099f9280e2c67393e4095407e5440e525b4a0a273eed63925265aa2b9a5861ab58042622eb8aacb8050e702e4e1790452a69d95604e30631a7c61c214b88a8c887247a3485802c92e42425608c24a2244b368031d208136491358031f20864912f4fa016de92c50a578ca82428144a060a85ba99567bcd155064b868d6cb29a594525a6badb5566badb5d6de7befbdf7baae6b659bb9590dcd4218cd539ec49338e24638111abe0b015f9c04efeab2300ed77a99e389423e42a5be297292936826d54cf22baf1051178ca8568b063b08534478fb37450a5899eabdf68331ebf7e61b3f18b3323aadf776d1fab4700b6b5d2d7b73ee07633630f7de5d61e1d26aa5f06f05ff50fcc3fc73ff26adf6c2dcdddd7dce39e79c94524a29adb5d65aebbdf7de7bef9571f2c10508f907533e7221607421b79045b802bedc6857d2a43a9d4ea7d3e98442a15028144a2412894422d1c5f2bdf7e5baeee9c8e9743aa1e0e0e0e0e0e0e06032e2cdcdcd0d2a090a8542a14e74f049abbd3f4530e6122212894422d1754d5aedb5d65a6bedc90763d1462a954aa5523268f7005225857422491247347c69047cb121ab34e1dc16cee1443ff248215942a53ed5ea743a9d4ea7d36ca15028140a85b2015330e5163e41cbf7884422914824ba17c6ba3eabd56ab53a1d399d4e272c4d2693c9648a1e29c327ad28187393a05028140a75eff549ab5dad6aadb5d67af2c157d661060d762e11c7244b42481fa4103030f8710bf8a283539c9b8bc229ee7b95b772d6e9743a9d4ea7d96ab55a3a5c1b8d68f91b2a5eb5544bbfbb9528128944229108bbe1dff77ddff79d8e9c4ea7d3dde44aca38f1495b30c6befcd9c56ccdd66ccdd66c596bad4f5a4522914824a294524a29ce585edd7c73737373731359f10a0d2313299cd0137e4c02bec49b3965ea15e11147fa9267a2acd3e9743a9d4e3757689a37fee0bf6e2311b47c9796cf1ab1930fbe2118ed445997c62ec61cf76f73cc228cf9a42718538f9c4ea7d3e9547355d55aab4f7777779f73ce3927cefb8a44379b4c2693c9648a38110746a3414b11d5a049533c4123221150080da30f508886af01e832f05e8c39eedf8b386e8b80b7d85c176068f9d7105a7e96002d4584efc598e3fe639e2d8c05638a405994455994455994524aa94f777777bf355ff96693c964329968d062b414119671f21f8cd5128c992fbf12015faeab85bc3f9f1933b26ad7d29c7664473863d973cd1bdbccfa9b63a694524a69adb5d65aadb5d65a7befbdf7deebbaaeebba12a081c6c03156c3c8b0d2cdd0f0822f9e87efc995095c91dfb9eef6c1da8cd5aeaa956b75f3f61eb48cb9aa9280b7ad2a140a8542a1502291482412f917a38950b375a2ac12680c6c47f762ec76a4adae2a7fb97756d5acaa595594524a29a52ccaa22ccaa22c3b5bd7755dd7856118866118dcee0559ae6b2b9d309a7f17d23882e3db140d7239c502755330e726e298320f0cdb03ae4ca6a281182a9dded91b0840865d777636070440338f6b8185155064d4cef6c0ca03e0051768a4806c67ef3080154f0001884105867c3b3b88ce08105fce11a484e19fa6fd55c36af7b3db712ca7f080218dfb46a33df5a4e730d33fab95baf6d9d4bc6a557b6da3a1da671567f0eb4643b5f699d5ae4bd3a457b5cfae866197966598a66d34db775edb681c4689cdce0ed2e9b08d46cb343617c0c0da6f345ade6e5c0f6a1b4d8597f63664dc720a10b8e68dcc8fd8a6a1f7bd3a65978002a5962204d31aaacc5172c025432fcb5762378b687f6aa2d5a6ded044ed1b85a4fdef4613b58d7694142178e394486f8c85ad46d8a37294930ff6a8608ca5b9341e8db6af700acac40ecb4b1d969b3a2c3f75587ed361a13aac548795f2947c85757170cb53caf1945ce429f9a8e4248f4a9e503c2a7923c3a3429d7854afddf3a856235f712ccafb4958c6a38c47ee2bf795fbca7de5ee2bf7955bb76eddba75ebd65530663e4e394e394e394eb9e314b6f2421eb6d238e52bfe598a0deeb05625edd153b272254d2aedd2a31a69773ca21127de4c5f4d195bd24e6dc9736cb7714afbd7141bdb6d6ca5fd2b944149754e9a64584b7b8a10bcad29e5071cdf864c1101de765f6bf297f9fe79db9376933561ad784371561f4a3422954ca7508ed77a1c8e8557572533a1359d6e50290cdc8846a412bd41a5e22ab252a211a9643a95ae54b94aa5ba1d9a8d4c87a9e2d21a6802680ca581c2d097df2d302673794f86972618a37d7c082f073d027cc481315b0cbf5bbce7f005c0ef160f761cbef1468719bf5b2008a6401ad005f802e47eb7e88ff7faf3c1f0f336600cfe78618c8c156a48400c0d302f79b7b82060860318a025d45200961a2d0358f104108016151872f72d2fb8402305d4d2d2020b8e72b24287727272727272e2a493936ebb103abe7f1225fb938e7eada22aaaa22aaaa2fabba5d3fea4ab6fadb5d6dadf2d28ddf6279d7df9f7de1ba28fa8d46e97243154430300140013160000281008860322c1609aa639a22a1f14800d6f8a546a58389288c4491083680c116314000240440000640430180501b8b2935b6114a098675414a452b03a0b9e18d70fb96bb191ec9d658996b6ac4f2cdcff62544b18c96e63ef707a2f08fdd292ec19ac8f873cbc63be8814209b51034ae06241c526b0cdb929bad1e04c3fcd9d14c3b37b991eb48c14231864be600a5e8318863b747faa28fd6ba2c7e7af2ffde5e5727a549c939b7bddcf80af4b4ad1651a2923fde6e5e7de1224ff86fb9b72c63b59dcdb174d061a943ffce41816c6a4b6a9b1de67a4816b577a99a59aaec28750ff8664e90a2d272a119532cb9536eea7f1ee3708ce6cbb974a6c3a19f771dcc3db92048016d6a8b7d2121369baf5be992c75c92ed197f805774ddd359657e6e5be7dac1ad96acf34c28aa8ddd94bc303b5937f68d245d5e4bd4bf1d662a1c4ca3a04b10c0e2156ad21c412339458118626dab7504226e5866dcf88a8e1f34a713eb926820f1b9cf9e9b7047d5c8330c3e9cdb2dca264c4193530e1c74ef4345cb11d6f2d097e29d298f00bbfdccec39d34c4e5f4c801ae2fafd937f08dd11313aeb92b0dfbe3662b96c15cde2713f047a812088b894cae7289cba7489f0af661f348c53fa02adb2fc727c51e714a2fd6804445cc261434ae421641a0ecc2bdd68cccb6474389569747390d0ef146bdafc2acd2ef012a7e1a6eb8d936712fe9927870910590ff096634c566451bf876c2eddf0e97054565235918e76406fc905c1505561b4a4f24acc40935398376901b790c120e834be5133ccee9557670a21483f7f32921c69b2fe18920cb52c6849f29cd0f302caa57f29aa2cd7afbd472de7689000aaf96e533ac99914fd5801a27c4488ea7113da8cd7e4ba5a269a1dad664998e1c621c4cac2030a4517d2c41637d7516e4808d3088c80bba387fa411acec3b9c104ea30c4682d5252272838cdc86e04f72434187462e6aa0a10ba62759e681066bb84bd695034b8077bf6127c98689f3903548ff1eb375cbf6364df2c6668885e1a68999017ceb24abc9041cffb177020e08c98902c923c03485993a13a1efa1ad3cf5c50814f71e32e78cc03bb43d43932549a9d55d0f2b59a080a4c304b35e8dfacfee6cc04e0f570d34afd0fbb03ad0037eb06fd11f9339a999dbddda73ae7272be654a302d0a71cb419dc1544a543206258eb09d04d31a4cc2c9341cd030c58f2ed1e8be1c612897fbda7f1e6fe4fc721d967e06fa5fa38a5c246d17d83dd591f7c22456ddca2faca6d51b824194bcc87d188426d68bc50063b36e95515e2ee7a5dfe4c790bbcfafee7732482ad7eb4902aa68f9c963ab740d504ab092e2a1e46ddebf2f7f3db24c2b9c66bc7157ee1eb090a681c58f1eb5205804d11092be56d55bea4206e4b00790a6db9a7b1c153105229c71e4f2f283f8c491ed6c0f0b0c475f393c7030384ae713577df81156044bd152b3166b2582da72c8dc09a471e6a49330645ee331d591af04759014f2edaf9685f9eb6a3e6d57d0c7371054482adfb1ea77fcf65e0e93d93a00c80926d245369449b29975b2d11b654fab730a5bd973ca2133f3ff0f1a35e50800b0e5e98468a7891908d0dfb211d93bede1c003ac2e7f821effae34bbc3f12e86242a8758f6dfe12c2a625be165ee50ef158b1637cbd82c49fb3c0fd191fabf143405f141042448595c4a82324e694a804b3e3da92f426df221e07a6765ce34d78be2c23fbd1d6fee39907ce4d9070131f6b376e9c5ae0837a84f8b3d0add3f232568b5454a9263c919570156dcf1f276bf25d1283603c67e9a4df2872df3a704910634363de75eebd5cb23e4f9bfb2cccf3fc2464a7f67587b3fc79a278355b49615c609cc726e288fbc6a5f514e5096b9c1f3c88bd592734399a8139c59c2debcdc5891f826ba6361e97b533f160dbfc5362149fd2ddec85a04b82a4bb6c535ab6bbf7839ee0bfcf0394e564b61c46a2db0acd64093d51a68582d266f1af8de16514cd3d98e5c74c60cce3431f620e8ef99959d76beeb3b955632ec7b5991eb0230702673647503bbd22b541df854c61936c6c1f9527adc5bbf5a66f7f9701ea375450f8c7c1a6fa5418d6d3e8d74d2bc97b1599a4cbf1ba475356cd36c7935f556862ec3d2e532ac34ae87bee0eacf82ac7c852e5ae182bb1ef7f364fad7014a389d025935e6f97b82608c01a925d6f8a0c75cf9fbac785f916143e98434f166fd74e68a6137f8ec97139b4ede4d7e3e05d26b7d71673d3af7d553163bcc6dceeb8a72272f2502136332fdc031946690a86c4ada129c922f089722b0125c4a12fed7b559f6cb5e77274411b7e0e1d2cf1fc307c4124239805882dae83ea834757a3a256cd63adece2c12be68c900abc504a4ad2ac8deb20f5e562dd22a43ebe98921ea31561608a5ac52d341e312182f12f0af84788d1a3778d6fc744d9a67c23fa9fe4c518533dd0fb9d26191384f200f78ae6433d31a5a333740a4f7961a79f668897612e8d2c8c3603acf6ccd3041ad7293a687ef00ec0c7b41a12f074ec9913e8e9fdb956b722eecaf532e80500364104ac00c428981eb8dd7970a84ea85c6550700650fc0dc63fe8179dc01cb8f5ceadd4b664d85a7e26082255b0b6f628878017c714d4cc71bcfca28d3989665a63bf31a1cca06a28f96b0be8fbe6e30a61500f99c031c9e58f554725f18bf6cfdc83e62d9ed6fe6f347b25a08170c2573ab8ad77ce950323e4ebff112743cdb9ee9de7c46d69dd2cfc761921607aad3d4345d4018cf4828dd9c10070dcb0a0736c28cae7d545cdc9e7b5c8b9a35357fe7641fd63db71956f5c044886ff92582c82adb6737d2eb23b63ad0274db685ac2a2d59f641d9e06b5992bd50999cd16db1a79fb102cb5997fbe53106d04e7ce57a62c8941b62c96117442aadee7e7b3f7b45135156b41359d55235ba3a795fc1dc86a48cbafc482ce73ff694c59990ce516cf9691529fd754d5630c3f285c74e80519c575d02b0b63515a991ed13d3bb79cde84e864ace72334939368fe1c2cfc068c4383d2871c7c0ec65a7042b504979496bf4ada18f8d0be97aff1c38032bb00abc905694f33deffc4b04a0b6e3f3e963a03c8d467ad4041cf87749068c7d70cd39090f844cdbb2517bdc8d1021c09193458e0cf1d39193a51d39f06a51a4d96d9ddfeb704108696661330649adabf924718cababb11e716c53979b2bf65f3b1e21f54aeeea638faf2fb0f6db6f388775c3f2cc0d8cf6bde546963558e3ee0447376f4333728136ba2023a90e299805e0b8b0a0623542a268dce5c25d8e10b4750a9a6bd5acc434e6b0c699d742b14dda9d4daeda58b2d355313253f9c0c20219777360304f088ddd074460141a8bea90bec774eb548b37abc94a69059d5bad41aa49db72102b5f508c2ea6d2a685f3cd4574e1aca29bc7adbd0c5a9c51422a0318c2510a8e64ff4a6618cbf68ccd74944ee0795a16cd849e3658034fc82408bc832516d788845ec3218f764d15f6f35e637a6ace2692c00a071fb8b78dc50bc63eb489affb0823e4a341d4d8ca97797eeb400124e00bc1c6c80ae6457078742a71b672786251a6a875531aa0d5a3a0f4fe1ea797b7f0134a786f1b42f7c64745804b408dd86148be7d8ad0d6d44390e8cc94247b3ba5627c2eadfc94433e314ba32c7f4ccad0179837015e82542bfa911740f26daff0f92a9368e3d4682a3bd59d90075878f6a24a0629e140139358d0a5e629ac4178bfa6602bb0cd99c5e51f5c390e4e8a7173752ed37f668c980ee44959ed6b286fc8d3a9f56907980b33b47e31630fd25def6324cb01a37008983dcc1f20c71de13cea02847c5db3196b172e51ee01e998dbb615a940d3dda7e04319d6d0602d7115d8d2dc8e910aab471be9292164dcf95b655bf98450fd219ad3501d9300246deef30da25c5d2b51d292a8966bf55405d5927c289572561ca2126062a6b24fb00e955a66401cdb8cbd34fbeece68fdb2c1be7f5371854da80d3532bc004c82558f404091aeca805e7fa3288fa1a9463d3c2f38b863d5111691b66eb077241a5485a49eb184819cd7584dfb8f6371fe19b7841a4816c46a1da20e2c79afc0d5f11981fe20dfc8e3fd9f7b07fe2dbb47056fdfd941c4e8ead7d8dcba9423cc555e182077caaf220dd3f2f49a91a4de35116fcf596e0543e9802229a0f9507581201dca996a755135f9aadad3aa2c5fb13a66e90bd6be00969a2af6e77a36266e861a0f363593765f7f23b0d07f02c3c01cb805caa210c01661eefc7758f60e496b833fb2f6eb597845d42f8e1c4e5e30c90023e51e39c067a34cc388223650cc483752fae0d7f8f133d2a735a6634652ae4673401bd0e2cffbf2bee506ce2658739d40c8ef2e9db156a135e50621bd77d989678fad991b18d57f4b8d2c6bb4c6bb0986686af376f4726d77793612dd6f4c508ed0867a572c01cddde8c80bd1e5270664576484e6e5bff4841a739f70a30e5e7364e187bdd3755a978fffa7049cc994ec0004efc2502f5a44a9cd402f3a8340a0a738ec38c3605e9428f4e9a178050253501e931d610d0a06ec5e14f757485ea9ff9d1abee70d3f2cdb6887639a8ebc54f9b04fa880ce3aa88f5cb6ab1aa86ac462eaef03d2f33efef8ac5acbea9366ea2760de5310638340639cf4037810a20a38db16491b471fe4b79d1eda17697358fc20f4bd921e5d510325d47fdc3c4ecb1305e7b95bfec4eb21899f9f73699f9be0b938a31530735c152d729dbd1e2d0357eb6e924fcf999a21a577afa9abb278695e82a6b930758c8f64c08ab7f5da296031b82b0971c4930b476c8b84230e1a1cf1ca65845760e5084880e5d5957bf3d45457f5ce1a486c9a59d9b6493d30020b682ab96d1308d91a1e686f00e51ded26375fada91dbf0c5dd25d2f95008bb0ac619e4635811551ff251dc80535ba01a449f53fb9702eace8ac609ad0fa8e04d2c4472bbdcfaf4d53a4424daedb56a4bff8739c263e810326a4c4776c499c06457ecf3a515a414b7e48310bcafd156ec4624aaad277009e4d6f9f8384a8dac43346eab7cd81b25046040b94451911fa2213ad354d3a4e27e76b379f0fed979ee48bea59df3e7e6517d35d68ce1f88879a75e6a50669c1fc1c4b7fce5000d0b147eebb7638ac95671b613c385cb2d60e0073c405ca92ee4162fcccb5f4532aba7fad621976704a96930705c9bf77805f2dbeca71b996c3edac5dc724af3e0deb6a6829a6ed6ec97731d345f72fe09518d518fd6b8c3a585c73f0b7ba9aa2a56fd615d19adc6e66ab2d35062345dcc87a7228c1d28aa34d0451948b53a53ab6ea47a0efd84fb81f3fc9090b8850e40e601e41d87f1642f2af1e1fb9d78945fc91bf237cde3ed63129e79bd5b4410ec3be685b86bf994169284bb7e48b44e65c62fb1ba8fe97dde0d1ad45b5cf7ab3fd851852d9ec873c9a991bbb3e519066d0f108edde2da17cc9096e204c1c644675c2814d6d224014045f9e4614b350be902866238313459082eb4c752d0ab8b306e4f62daa81a890c4e07373ef0ce8ae720c5483b872ba0e672d9c270e26a64e7b791ccf3dc86d2ccfd1ecc14ba3cec519c71789d9dfdbc1555aee88355b0b40d3384e88bd7cc6f0318e34bc52f137c7157718bd290fec98f904900736d81b4ff3fb389ed7ef4804df1c5f7762113188986ab74fb802ca2934193d3e2a1048278f6cfe82a148f07200daf0b8774030a0d7808c1eb96ce18db254ae8eb2742057e696c2f4226c0999b56101a14f5fd21da08a4e07f20de41f9652bdad33e1343a1ae47453716701cc88e83fd609724ce2319193bb2ba129928ddab7292110083409189b98a272a5f9173ba0b1b9e60371db2793d9820737bf2c7e56bf4a62fb69196f73bcd9b392e5a4977ae5125fede1a1d00a7a44d24b541b831b728dbccdb6940e843111a2bdcc7d9c18c987f7b89891cd04f670fe303af0752a7bee1c655ac9bca4e0859f8289f57a0d9bd5ad116c5f3561d4b0997e466ac6dfd3d47ab212bef4cc36b403b6d47713d86424874a19ca11b7e1ae1f1d5d10c1ab8df55b8fced81ab944339f7ed889f3345eec2f78579278ee781790db847f723c8f58c0f29b351a0ec0e72a96834494b94e04d18a842f0939a0d6a36ad788008adecd5ee81a19184326be2195946934a4b09fd29c844f2b5ee846bedef700040b00478b6e27549b038828b38cef5aacfd6b9461a429ba3e943e4ea025cf2eea80c5eeb04a053156cf252b7c6a421f801468253a70ca5cb888b6887d2248b35240e11c1f4dbea8c1258bd3210d4ca5beb45d58c1f042a5de9d5473d05f1902ed9383dba997b29cc264f6d8c54ed6610f083fb37b74491f1e6b83f2ad63ae9e5c85232ee8d4d8272ac25daca99b8ed2d366a6ade6c6f3cee072d8772a0a03159471984b5683574167a8e9e466735904f8be3b0a8888faa8f37d9d53c660446cb596bf672881343469c4faec11340f5a5e575708def15f93a4f7fb960c793d38bc960814d71c908cda98f4fb542f21265fff6961b2b77a70b8251144794741e5ce884f2a7c3f26f1417359688827d38558af784e29340676f738d4b753e496f7b213a80f39b910082d756e9f7dedfb64f5e0b6607f3728eed42964d923c7cedb4aaf7e412f76f9c44e22a70d4defc9fca35a1d3d2c241a517914638514d1adced6978707d8aec77a0b56883e9bc2a68a186429b807dc6a5d43b6ca92d674c5c0a4f19b0837fe3e0c9ae2fb9cafab62ff2f6f92efb88c3d2e6abdc3dadb91d30f70603882f5f37f4152f6313c98248c8167de28c9e899ee32ac4c01f60aa806dcc6557bde7c90222c23e698e105ae3edc3d0e798ee35fd650f48646b178dcaf60c76739131e03bf79dca1ecb156e76341a4c58a6998b16ada792e78905cd05b3361e5659533ad547ea7956438129a158a2db4a523c932d4d133e93e43476063f865570dec50fd1730b1719cbbc1aea08e993da6f7e17e6bb9bf7833e815c4534b40d2de069f790275f56e2a5d0c8b9299ca6ef5d9342e304145a138aed156975d86c9c0d185dd401967ca5359f902f44eeb9e57e5e850bbe24eb5e0a7a03b6902a822ccf621d94e7bc44d6e3cde9fcdce1b1891464200c1dbc6c52f72344f5447006e1ae437fe8d27b52d35764e6a1f29d04d82f4d52c6b21e5d2092946d538ebc18c1a41a3f0811148150af970f804c5289dc0ffd32614a16502708a43dfaa06559f0d5ecbf457e9368f54e64c9c54ab47395493190a867be40f4ce3ca68e044dc88fa5135791fdf112ed3f49620ddf39e3304e9d21756807b74e92f4da165cf7a1efa02e0ae87a894fe62908e68244bd901287451efc8d2363672683943dac3895877b7a9ee194c779e53dad76ca42c01721a9d6e8ffd8260eae459ab829ddb94c59d3ca9e67ec1bcac1b29cb008e4647c78f9f533075fc8603fae73ee5e071eb9cbb8424eb278d2a4b06a0b2a394150d75515d951408a6cd44294895768ede0a409754db8692377c0750dfe87c4a0cb53c4d76a13963447f81196860a965527d2da6d61d76e000e75d151f17869e2a199423aec14e87d555c185fe827b2a4dac71750c2b0b400be505f6568a5863ca0f2b6bc416fa05ec538aa8063b85528da316fa2a8ea3836121943ba8fb900307b931a614d6e6cafd4ead4a7427848624e8a9de7350fc354062fc7e780521cbcf93431008fa39f205c2ab9f9b6f408cdd73e703889f46f127c1cba0ff40a5eaee21a04eab4af7221da76354fc12fd4b880ad28f4c4822a562201420d4d293e065dcb8546a3700d2d6edff4f9d8a3cb54ba080b9a22dd7ddc8ea918715c5ac12e06169fc36259ca669cbbb58e717d432ae95ae14ab19c24a8bae0919d764b7090d9ea63148b3ae1eac7eb8e4aba6059c9cd24684ee14341f23b57399ea0c5317728d5f77435d38c071f45ad50d153e4045763bdd303daeca4d554fb0345afd00525256b01dd0c4bd96b9cd760795335e8a081022ecf1d78e2e491629e655dca554b5dfad6eefa3ef1ee45e7aa78d217269e93d8c6cf217a5668d19f489b1f51666c1a488f35f61871522c99f71bfe035f21a9abcf53afa4811f27d99b646fcd0e5fe207d4425eff2352ae42aaeff362a9e9b8121880e6b5bec1b65ea12cb67e5ca4e686c426229d2254aad44fa5d69bdfb3813e95b7fdc69c108453a3b3a15a248cb331f900ae980f2822c6d5d1917d5a55c7670ed97f87af322bf57b29ed05947776016e2d2c3f22fa8be611d521732b9558ca1ed3897075c81f89756cb61aa6a85400151ac7ea92c037c5f5de43022a252e39dc21a250482a190b2d946927a38e06117f95c5306f734c8b0b7efbb403738c6bace37fd089189c61d7cf8324a6a07108c81dc49858d66f6c19b529cb82c650a89f948eac71cc0fe6592f24f752aa25b002c7ae74859cfff9d9160bc292129f627d305cddcebfe397bd14bf482ba9c56278869d3d4345b99833426660cd58b0c4a8952304d1e91861387d1584f1e2c6479b2509179bccec089cc7c66024b500b945f2890df45455b444b06563c17c8dd9012dcfd10ce3e825c1da14ca7080e1f1111c121006a31a43a0410376b65a778a6820192c6cc47e85e7574572514650c5a50c7a1de7446ca289cb87d0edfc277e02683235de381212a1679e79316e231eb2bed0624a2a92c2f0532e4ccb796c9df48863eb1141ea88d6e22d40740d2f535153319826959d4658a22bb901874f0743d1269a8b9c8832a68b81aac9801108fee695c172f5c5ddde72aca9cec8ec18214b5b0df8b866a91156d27ede32c6367fb61dbccbddb9dd27d6a3fb822d38593c2723f6f2ca44ebaae772212d86e7dc84c3155dc90260b24c26d0aa8d5c2229c14b9165025c279616de7d5e8cebabd3275c20bdc2977b937e3dea9fa14742d0d025f1e6f9a790481c4a933cf3dd3db40f3c94a5181d1545c74b3c734b5ef69eda9a9a1b30fb201fa4b9f4e1bf0980be6a4041eaf099c5e31f045ba75f003df6a9520a25cf303f5e6e918e07412da37b719d5d6d9f2c68c5f022d85be6d8547fb9e744540d75bdda81a6453f73312b532b260ed2f3bf198f0e0118afc0686daec710a18225009f5384d4b13085a64771d4c4398e1ed319d21347afb8a7a84d2f8a644692c80df6ab1cc2ffaefcb8374ad14ae513b3da4d994c7002d1c85c790887a0774a078d95632c9266b4c82283d18801b2228d5ac576fe942550ee9fce8c185211000ca06ed0d31cfd6d792ec28a6ccb3b2de0a2caa64911f4ca48d5ea0b4a7c1f9cd31cd990bacfb84767ed278ce5c45fdaba8671bdbb78010bde0c263e9e9e845ec140ed222b6a4f3cf48d2cfa53175d3195d0b0b1fb9002094b7a1d17239270cc55e1771cfc373658b409294d5f195be8e8968de38eccfa74d4fbd3bd270190ec6bba79c9af64d258d5f1bedb59e493ee4a602519c7ac0a91c44686a8c0bcde257278c95183415ec99f51bbe8545b1a1bd51e313ef5b8dd9205cb4e4927c73c7952fca105fcddc7a9bcec432bb744c3a993408ae4e16830207818df2a87e2d6fab70319bb052d221c4072a448116b2e653340ed97371e936000fa9cc0ca5510027037c9b86666f1b4b938ef3e0fdcac5bb95618291be1257871758001b2dc0055c22bbf49dc279a11d0e05f6e8c812f3b4def78492b29c010e03767e67b6aa671a114db11c739448a45f280acb09e9924963e9f3ce31aa465772499443e545afd3c1e4134cb3a5ebb8bd75e9b44b253e19ea626859be5479950df1023de528f44ea9912b0587307f441d4d59377169c0b068350151f780d53be78bc6b73e9c90b3279b6d6fad6abed65dd21f968bddc59bf5d0c93e1ea9933ceab3849cfe307a0bd901a5b459ca14954a8dd8e0a5a2a1c720f6a10e3c1ac8530bce6bd528410ec152b981deec47bc57c38a8d54b889c2250aeee1060131884360ab4ecb7d10394324ccc7753a2c62611d62c30a51bf16aad7203d8682f262647a23a7cd7b7db26291bf8a947d3fe490be72326944593c43928def31d0554c49cc8ce240b48ab136d5dc735c872cb48708af447f5f7394e488edaae3e253b54bbf4192b33414c4a0280645d186a281d1b23a203dd1b507acb8f134eaa32dfa3f02017c36cad74190ec0dc17a5863b457d0dbc8e5c1d5817c015c0d00bc7cc1f596cb767f8d7b53b9d5dfc01adbf6b883b74f1e413c83c90c802be4c7e1357bc5e2eb0bef26e330e2010242b3d51cbe5242a355029984cecbcf32493f48874a43716bb379bcaf5e84168f56397e3a892d89d14db75bd0b8ab8932212576346f55399447ff01042cda16e132c5330709a839331ff8806eef84082c08e152996d9a9de69806d5c38918f93d5aab5dbb922e0b8a2cf826a1fe04afa0f26c52b3afb534671e03e4cabde8d99bd4d242a1a00004b49b50b31a8dc5185290e3f5e1242c1b6de1444697773b27225a5619481b67e291761354754d6da30ed01db5a8d355dbc5b4b698f6f17416c5fc167f4fbf7e6b1b53c5fb55e6e33cc99a4285b37fdd5706e0cc3342073a7943950dba7d00b64c8826e3cd545d0f38fa53da8cc81fbdca0ab04c0fc078b14b897fb910ca0dcbb6fd8e401ec6c14ba507218fc1f02ab3cc9de44bda15c7ad62f340d40e8f372f6ade9723858883acb9afc4eb60a4a0522acb5e7eb29fd20a0e1743a03a9f69733c13e4a5cbdeb5285813215060f250aabe37dd954261bbdfd1d9cd88b174b6c505abafa34d261d22a7f947c4f5459111eb5db62e18f25c9592a5754b49eddedfd7a3910281356fcf0cb9688bb4d331c6ca6303f7fa8108bfb5dafc9d57f0bd679a8ea30dd66865fb384554c284a51f58992d3da2dc6cfa909b623d506e52f287701d89ba8095d4bab38846b604cf487fe607e540ac6cd30c1d17d736f1548c4c608373212b71dc963dc586d06d1a72ae0f5a11010f8f38b0203dc11b5573acda71298ac9b399704a231050fe29fa088645fc300ae8b4b8cf80295a4251fa325fe519f23024c1b2953d7abe8ae4af27ddc5cf7a4e626a3a15235ada78d4c0dc5800b5eb4db3d592ecc9e3005d3aaa34fc0964b847e3dbf32ad872e6d7239a4082f6146a0e205fdfb8e7d2a85bda4c7dec9c10644e5bc349b407b7cf152951054b610822d6cdcc3a3f93a3c3e4f1b7c5a1e94f1e1e41964060c1ba5f3fe9e449bf30cf8cc911bdc5ea9161adff801f64f37cee571dfcc235109dbf2f061a6949a635bd9a5a9609f961e2f2b55217a1a87d00cf4455dc8d7502275f1970e66453cfe45639f99d120cbeed50cfb10c6bf5a0a8dc05ae195abf5187c16ddc889b71636ea7b8e91eea3b72050b4d46d3070a811307b9917ffa0478c0c0d95cbc44dd050a9dcc5c79392800d701c7b8e53b3b1dc2872e331777a38a52b14ead0fffc48b8b659d7fba97f152108d80867a1f2e8a47508ae2fea00bcc84af8fe55081abde8fc3f13019050afcd3adb290fb56b954ec5776e1db782c80c45686d35dc315a92977e10cc57e5c1a0f7890989c4eb75f4d8da35cbc352bbaf07cfc6af093a575a1ee101ce9a0af8f6383af1ea43f44b9c9955c846d97fcdd13401d01cb9191293b77e2a82871226e7ea92aca5b3ea20d64faf5b59d3f0bee2d2c1885c4bc68d36a9a800fe4a8d4402cd3270c4f754cd38d110af840af80a6d182e199e6bb1aadd1c866ceedf7bc2e8166bca2c8578e645098ee7a843623c14a744879e5fff2171fc08644628d02cf331e735e9720d18538e00c831a1b73136dd45b8399bb57f7d535c742c695b66286584f55807ee08f0097cf3c9090b453d5f1c9a21c3609d2e483aaa6b51952f9b9ae3be5430118b09cc1081ac75dccd144a9e50f8837137f07f2d98c0757e09136b7ab2f06853a37a7fce7a6349966f7ae1f39e1c3d1999405939904a5d64538e92f7d62284218dfa766f910e9a128c37ae643fd851c3a005f74396121b18098b2653e01dfd165ed2569c7d1679530ea575a6ecd47a70472b19a0460c47e57f903a3d2670b0ebe7a901d6d43a1a4857679a42f0aff0c51905b72f68ccdc6934de3cf2554b0f5045aa603f015522a158bfdad225d7bc2dc8b52271777855b9457b20bc1cbbb763565dc0a9055e572866ae2b2a01e0b246b882ee92ff459d929b32e430e4324eb2331f0bf927e489de282639d8c5752610baf597d6414610a96f59e465697b4003857313d4a5a3ce151d069ba17f9c44bbb349ee41ca853767adcd6ba3cde0579f76560cbe7303a8912e321ebab312524009b165450cb4b3e7eba4a7ca19d548cb09232446cc68df41548390fae45991231d078de707388249698b5a8e7f54540b7894e8ae173f1ed7d786eb2d81c0849c06af2d2a35d4d691c65499d51ad16735d9d8e66db88366ab15d72b26d948b9ae50ac41f680ff61780064006cce98f60f70c8aba881950dfd6de0d5fa03d855caab097f59738ea4976ad7344382dd37ce82146b7d4a78e611b4a39717e1a064ca9615b231ed32e5b01d80ae0685bf4719ba23249c81477fc559247672ac49b61b34a27067eb0d452b61422f3ae1bf77aa7b42d8de02dab2f1865afbc943c893782822bfa67f9d8f416e8621dbbdaefcfa43138dea3a45d06333cdf44bdf573fbe66359381db6bb5518e7548b5d01b4eda74c1d6b233a2d0047aa715ab40a309c00606d5364bce6b8b23163c953610da36171dced34bb58ca390c58baefa068364e66dcc88df569146378633a5d404608a8ab5d7f591c29c210b9cc554c21877c02d917a8c2bcbfe59b6e69322ce67fb181ce083414dfa56af112678c348261afd39c8272c40e8e124dac519d7f21ca8660d24c32695da0ed4301cd57bccff34cef4545750091b1d08f8b930023e7f449a8020415bb4a526e7a17f4f55e43711d60e30da0e83bfb43995b6a24e9748f4214b13bc7552b47ae0f76a48600dad9289d7c9469867fb3f58b86c46b5c96d4890fa728086604ebe03e851989f012881cefdf2c0665f41efc5d1aa7651be78c077916d1753397d3626961ec85b1c76796f6c9a9ef4056ce294a2e0b6ee07bccf271b1516d86f5b33244b46c587334e57545161ac67c305bf34015c86527c4e21c3fb2d44351cda5684110566bf72166851d028189f276dc64270af9514715b8530b60b36d33048404878d9c56af17b243337c1a17d45e3eb7b83c494cbcdb0d9210efabcc5005b50edb853847ae3251361d89b66c542cf79217e7c0042e08a4147034d4e83480a916d15e686cefdc0691313b49343fa083bbf8129a184639ae037a75e200c632d2776aa3986b64ad077f18d89344f2c4927b01228728284f3caef858f62cf7fe2ca73fa929e8eecce9d8c512404c75d032b8e8e5d5d89cf27f2d67bde1f748ec854483060c60c7f95255a5da00ca0e77d026239c26d10ef055f1b9469baa67ea675cf2af359b97376d4e6530e717e5a7f50ba7a0b414c2be2b0dd9dcffb6e064d6fd09242998d48a3818edfd1579844a8e6f90490ce6ea220a675bfbbcc563f02300197d4b668853c6ac9a35d6f21d546f9d065e1016d6aca19475607deb38d0c2b8b070cdbaac03ea7ac7c856431810ac798320634e327e25cf6ddd3324a0b9d46406f874809469cee2bdb21a712cd3878e751463b51c12a2bf152de95dc5d09dd485a42ac0aac1bb89e29eaf0e1a76df6d8047acfa21656610b5347bdeb76e2c756744bf444d2797f23a6bf4eb188b020eed71ba87c009900ebab1dc364af103b2fd5687be36b0eb1441d8600a55b4bb600f55dc8c5d4908b321c008ed817c84302c7654fe2aeb4c44d8909253dddb457a2622a0fc55d612b6d700cfb197bf8bb2cca1465833eb3e2af6cd4267370db5d2e7fcb4d9e7b48d66a29b61b29df95f86c27b48555d3f607337ae007d9145388fa45b3d6d61f7b0cfb08e066e9a3bae105d0cfa1fac0c34bde32454ec037c9b84c86787dd8a908bf47d4ecc1352c01582e57216c1482b9249c9547fced42f4e6f1b0eb157ae92aca29919a8b344229f76ac5abd16e811dc2f2e676e7d79f5e32ac2020398ca521b5d1389b2b3e1687ca4752ae0a951c389d7f91219c3d30c822a0d19f0f2b2b09736e9d5b242f9091777e6c3648b9ee3e14ded94e673a44d57f83f28654df0259daf57094ca0f1b7900855bae439f16848468e3d0c554c80d4061ebd48dc233d14c9deca9a266a573129a90353a015144300247a1a1961e3593c8758158605559a26a3db8812e8317d4ecee7537601de31528f0d5dffd9a6ad6af139ed6064b6ac3a19214b0283b87890c503e6821564ad08a6a5f638d67a628e42f7faef00534a2d62e5dae1f63328f3b6ae6b5844538a960442df15bab7ea9d731e20452835633d6a94ccdfb0ef2d7d2555f5224fc2b5b28376591ca0d60e6e4a4feb544d11924ae4b8130ce0bbea47e64bd7852b7aa5f4763aa6a72f0c3a2d43a04ded6ca3fc1cde2376896b5ee9e36d328eca74f3fcd9a9ce4bd92668690e879d6a48b28bc0b037c004a5a5749ff5037fe3bb4e7d387f1d3a29b20d1b20cc0998c8c3bc901e5dea8490de551f165d2d888db4b9cac9bc14d853693da52a588ede37751a877854b0814d09884e9a1e821d88fe4a9369fda302d7aeb6286a08734e77d1f3b47fc3fad29dd3b37c7111bd3131c0a7eeff1893ed00852b3f48dc754a386dd863f80eb2894ec21f8597323977d5e4efebfc5a7f8fb6d7f5e85bb8b0734072bc35f151d8dff16f5e60d7fb0f73a70a771d42411ae6f000f4f0a02022336d7501ae24e405a1d94ca14faecd9529c8ac1178e5149403d1578d65f57aeea6aeeb24f09999745ac7c85b8acca6a14372a2ccfe38bf7b2337deb6404dcbc235cc9a462b328ba13dc80bdb6b63ec45a5c83f11f4188264c95a57693cd3b0757425afc24a47996264d681e26940b34acf964662667b436b155b6ee9e6e2101a5601b68bbcca5174267e30331e8f62fff2364de0ebe8ba8330b7de4fc443d6c278d2e99d3f784e8076d28ce65c8c3acd00bd96b0fde1eada652e99cba830007d8cf14a78c8a4f653894513882afba88bd1526e873f73c94c4b0a5d1df615a0d14ff0612fd3d0bac14c4858179830f83596de989ede088055ed45501d5d0c239e27aa1971774ca0c2af8a9f54890c888587eae6aab7cdf44801443be6b5ade03554fa797c50c32f9a5f24801d28acb2dee21e0920725338a542baf9b779ab0c59f6cb91e652dc3fe03e50d43d49cfe0f364760590a1a8f2a4252c57631b3dedab0790135be781dd592723d933670aeea084c806091c2a46e54d1636ca0bff1b27fef158534d5d4bd4fa476e4f3d8503e6a61eb98a72a83313284573fc25d0c9c9ed906dc9e177251a6433d15d53b918b6ccfc67dde221acde358d88725ac384944e4b7c69ce84fec073e37e704418b0c8bc0b544375f23c4a47a9f44f633287a324acfa53b4e3c1e773ac0f0781456099124b1967f446c08c085737fc29de9d0d0bd19308b3c1dc3af26359deea17b91241b5aa6f81bc080ac9daff6b6503ed111e2586d2b89f57e0d0b84f4b3ab5e09172f5a45c24af129c172a97d5ee80b9b116c4eafb82bf2b4295c9e95fa3a35285ee6215751e04c7971d01796ca29625736517494bbebe44cb0630001952bc08d5369481475562ea14e0d10470efe601ccba8b64e00d8cf3da27eed162a8edd4c275e72c1ec24f599038ec39e79eba331d87b6661b8b4e65c2cda2c1316f97ce66068f813c2d41971efe1e9d4d3eab24e1e21cef8c09bcba0e250f71dded47bbdfaabe82321ae6bb5172ec9435abeeba8db46bf4dc93393e112f955142ea85ed7f77b8991c7c67114fdc484dcada16e584fc3bf610dc26cc962fbad8fcfa28ca2804981bdea9ec6235767dbb0e5ef12a268513e214cb793525382536bfe4c24c6dd5ac5c5a2d89db413c87450d0c8442953ed40574b12457e794a60bee336740bfe93b90dc6f0c4e0fbf9488028dd43e24568c9c6f30d925213cba02d9930f08e4f840fb1a87016de3d12cdd57c04ee8db1549625fd1c4c94080512831cbcc062302ce5d34524f298bb8237cca1cbb3dfcbc0ada7e7286985e45310169217813e5ac2ec3a0a086eff738540c34d21bf689538f4406ae31a3d58d1cf23ae0c40561325f8f2246123338403156ea237f3fe58751a044e8074bcc07a88909bfb6d58f7adf3681249e9e083b549e2b576a2f828845e0d24fc248dcb7861c685e8e376782069aa3313efe597ca6b9d831cd2c929bfa483695592bda123fa582caac07c123de39e686e5074e28a2066023a79dc9cfa178b18e512c3b8ab68e76dba277d6abefdaa0d08e2a63a1bcc6c1c571bf39b380eaee26e80f718b4632db449591965bfeea7e2679871176786386fa7c42aa333a8fb413f9e84c4efb625c8e6fe9d35a85ac46af99e337c7798546ac22995141ec1b833e7e4f208ea4dcf03029b2965dd7e2037cd98f239f71e890648fcdd118d75e614c313c0e5e609b2592d50e7f1484aa8e130bee0ea0b7448234dba773b15815a9e82f4231cc4e4cd736796890b1ac628c9d1036699c689938eee694ae16dd132d3a4c2c0168e80ece61d33ffa0d82733ea06478e5085f7c87f5eb47ccba9011b05bc132ece5b9ab8c7bd106ca769fb91f581745f6017cfd7a4bb2921a56751837660e192bd4c7407f6962d69f731c39d88e17beebbffbfaf5f9846ddeca9cc5bac43036a3050fdbddb7d3f76d1f6dd7fe1f5c2940e189b1d35dcc2708baeec122e2b0aadce79abfceadef858ded6fc3883f77133f84122651a00f7b6a9b6fc5e5b127270dbd76dd5ed00a95f906c400a08dc58f15aa71e6b51c77e507f44290714c4db8f6a7eb88e17f87861c9d83b8186698c937f4224c4d29e4246eae1512b3aa2e201c0ceace12769d769d71bb62febf11c2362af58e87defb4f2c0cf5b5cdad1f30be3bb637783717f38aff0d25cbcb1beae0dab718f99f954ef9b9ae4a04fec85c73777a42ed2a90929fcbeaf69399b7eb120a85a47c00b214ba78bf9ab10273530d781c0064c7bd7c8eb70616e8c7affda2fbfd7f7644f66fc5fe7f799585b75a62b08eeafa4f8edcc76f3de33e380853687d467a74d38c6dc7714f15b12ee675dc5affaf872813938955d711f8308e09864942e2fd2f6121941ad227567f804f2362a1e8a17de016cb04445297777bfc2eceef7622408a81f5d6d8b01aef73fa97819240e90d80f01beb4a43d7a5887a1f3a974260bd8f3beadbeb4d09bac7258e9b3beb50a4bb4b972e994a8216bf644d4c7c63e90dd03b6c5fe70d9b9d38e2e5d09f7776f97446087ad95bf999380935de9add302b08c68487bb31dd6445066fcc9e84df98330ffa13e5c83d667d2ce7305a3ac5cac47dd4654811d661551884c6090b8a902b13fc8e044c37ab40bd08923ca0ad1b1235cb122ff84e5b54dd1669716bd2e00d12c535630f3a7276844e96708ce1b846d96ef112aa00d89d31975ba3454e386da3642ca1a732e46195d1da0b8e46badf475155e6ce8af436e6d51463be0a43ce8e7d629e89204af9b03c2907bdf74c78708b916f35dee070fcc9b945c3fe1ad75399cae361e2c03b25e58855856423da2974b9c3c0842d81b61ec057fc2d2462fbd2258610768ecebbe6464c78b9177b928148e496b84b542ead516fe00667c8ceb0226695a9edbb2f13176c1d1605895e5cd7a04de012cf640a247150dcbd464a1afb67730bf3de0b32b827fc1b681fd6f2fc46df2e210eeec892652c46ba4300bc3f63910bf7648efbb5fdcba0f4ca5da0cbfbddfedca95262e4a8c06a32038f35b084c3428a3ca055c18c0058c20b5bdba9448fb76c914b615a96e17c96b63f75e4f574f6ae0784a42e6583fbfa292feb0e8ab91856af2843b01c405c8f189ca71466448fab481a62daf4a1c7041bc2b28418c4d55f6ff2ca31e94205446303cfbf695549389a92d84f11c578a146d6388d2c4dbbc1a662e8b9969938c5f3ed3a63f41683a30e6e487a3fd2a88c23533b14e4ab98a3390f01413ee76a3cb472bace30aa1f760c96e85543ee002e585fd87115f1c7ec357eb7b76b8f03d27f9666b7ae766140c6d4950eed40fc80e531a4f221d49c13fa2c5d4933e2c5326ff40c9d4bfd583f7ecf4de8e94ac158bdad006dd9c2d5826f61b3ff5ec5fd30bf52ffda3dd26c1519df8d9ce528dec1d8a8edcc257d2cb149301aa669094a0f7d981d9eb9dd3f71ff801aa6711df2efbc7d1efc902763e61ae8391dfb3dfd910ef1bed27f517d3cf2a37ed44143455544939ab69979c363a5456b308ea3eea3792cafcb133a38623619114e207aea126e451fed4de103cd1c59b52ad46c3a64a66c94e1c84b5222bc5eb2907142b18079fc730ce9f29866e956d0f7b012fb1a7b6e183ee5406e5efde5b3ea54280bff65cd013224c059d61ef4c0c2559150a1e35f3d980e4f82e6ea65c32ff3b64334ca5fd93d06508c1cc049280f746cd2065b64c03c513b937d1b751feff8bd2b93ee8de12851a1cc086470967f4a1b3da2152c783590e21390fab330b1a0d6e11dc3dca9de5e9bf151167ccefbd57c1925e12077e2ac2f2a7a090b24a4c363dfe7fddbd7978e1483520c19ee09495b5972dbc397aec4f1cf8c05662c87ead5b4934987e4cc6109649c03f4623c8fbc5ef29382bbd0fa0e63ba39393f0132435492fdf7e17ab52116e54721aae96ac930692755ef9bfe05cdcc98a8d753244548dfe5fd88204d2f04148615f94d7132ff9e2ce88b3d5d8db73b7c95dcd956d1dc4d83ea65073194a9ec82fa778729b0e8e0e2401db88fb85a86198f16a53a01ed2a8e4f10d19d51622ce1a71ccfd00a3ebec0d2ead09311b7df06772cad4f271fc3bef5b05c13e2b93074503ed5a955d1c7c4a8f448a4ae8a1258d05dba2c58451a4e1ef3296421e85c7de5e86eb42a2896bca3da7f9eb258b8f648855a9cbd167fe464e632e546733d91a784330f94be1f452aa7c29eb7006268ba6171be7ebbf3fa869aec67604ed3a4757a2eba1a57dc0b3ff26304ca276c52197f18308c773c032fb601903dcd003bef629eee2ec0d1d31719bac42071f57c4c97e82a6f651ab4f829381c2c698c7a10ed629e8b8c9f06f0d09e835a71875ba3fef25c57157cf5d8e98ae5ee69eca3e74e12ed899627e1c1036699a0c686d688f44a2a45de0eeb4a4e25fc557bd99bb3261cf0cbbafbcb93c5793c924ef2fbf297b519e768e4bd1e58dcea9150cedeb625fa93c8fa82114ab97e470dd19cfbb3f68d5da12560107ac1c4b9c70d72a4eb8d11e112a18f9cb141fa8e5108545e73d004b56260cd5264f20c5b71a517eace05a9db7af051e6eedcc6303330e05a45159c3143e952b9279d582fc7c9c334856c5fca0119ceedbe5e38f324c12854b33fff7c09b8b281aa3cd6ee6eda174b7ead099757282d24c0b87f6e434a6ac946ab583741f350a382e681fd7dad35afdc9e829ea50fbff638008cc4dcad550c46e83c36eecce6917f4393ad671cfee03a976596a4f0e7e7b93f1262927e7f8dd8e0c71a961b69a387fc00eb5b1e35ed422a4f974a95be6148463f26c19aec5d959800e89e1f5a27ed7452b9736d7c89c0945e8bb6c378cffe7f1f58836b8c9e9a7c043ae024171f14ef27bd47859373eed0334983a2365199c567080009436eb9dd6ea5f0428a4c4e5db683cf92ac86f0aca11c71c026e09e4c92e348681a714b5d974f00f10636f689b0c141e1f188959109534031631e098a02fac1516a46493264a138483001a1272d165c0ae52a6e44f9ae8112b9ceda027fb93a232ea42c46b580aa8bdf084f7e50ddae41414c5707dcf8463c3dd2396e0c8d783c65ce1d7b87a5599ce4c230564b8b34a7994490af7577e1f48151bc0c862676248d242460ce75c1741d6022832a3d6cb34b5d5dab51bc41581d7f554930006cb4987eaa56ff4288a2361cf909066dc928488b11d47ce29f2ec52df659aae58ba9c93ce910522a5d6a4daf3d6f82049df8e4e322d99f25767cd9686eaf9d2ad7c6261398290c20fc64f171da5e83220668f1715c09368570a12a8b35e01f39e8591cbe815bd9ca3e852579da56bea1af22bd196a433b83d0bb837506f08cc8c8a5f99241de3637043acd355255d93b57d7a0bdbd79dbf56c4d76363dfd42a6cce1b3643c2a1369c6562197fc4f3ea33f246576e1e0929aa38da16d8fab881516a3e6f23448128c84c1e618ddaee01c5711ad8675b30056a5b3146a8695e7e7c565d656e03dffd66b286462c6f2ce7dc13e1e8cd8d7d3ca79f2786210ebf5e2db9d71635a74cd3af8938659146530e4f9cbb7c3aaf8afbc52059ac2039013878541eb9894ca35804c5fa0e87c550a48776b422e207d78923007e959818871b7b2323f99b9205836f3c29e0ec753affcf831272f2a65cce9a04e085b041c5268ed7226080e7fd90b1f7a3e82e7bbae24ea1e4cb163d1015905bfbed36e3674883341dbe22bdbf29d7ef7b95a42ad63b84b71729746477933c95bb52feac84506995a0b88e47e4afcae66ad49b712ce3a9e512469d9e614245ae62434127789f7744861874e20872050fbf949c60d3aea5823d5a53a76bd9459d86a100f305d90456f5e505a7a19346866a1280622409e0429fb3202c9dc65f40c1d5ee11c8acc52c13766b28e2ddc2b0a7fd68cae3363136f2faf9d8b6bc76473082e6f606463d21742a935c1c540b7d02746c4640d2dc15eba963826bb5c6e199713849464299e70db4147ef8605ebc5823059b242821ebc3ef9c10330bd2864b1821b351bb81af060bbbb186dcbb1882e0fc938316754c36b8e11292b5d641bb91b784b7108c83183760f4e74191ca097d8ea062e65071fa7aab4699c727149531e2f42f74b39c2ac0d0ef747d23291613f6bc9e8b5e20e7b2f18eeaab005d843a1eff1782bac48da841670938d045df3a7942c5162fdf4f2b6f80ba6c65dab20ea26170390563fa4bc48dd3c9f0ee14a7dd356128c9a55305a60dce4fcea95d841cf78c126509ae3fbafe9493f5951898762ebcb94cb1a8785c49f22863745741403def0d9dcc86e18117e548dc6baf8e14601f63ce92e5870e529f33652355def93f7bf3696b37936dbca80194fa61866c1e7eaa47057095a4a387cafd1212fa79ebfb15b3262451f6d74badaad823722bc51486ab74714c5b856d9ad6939785b0296b86946b5601a05f45722caa778b65a5701a6f78d5ca2cd26b87391cace01fa3fd17f1f9031d0c17ef706cc66ffefe7f7486a761984fce0a984b75bf6db86f9b8d6b0f36ca8e192e97a853fbd6c48a8e1d5f9d23d03da2100a636bc205957aa80259d1da33465a60be9c09b4bd5aa6bfec513c6e112f7b8970fd83ef0a7cc5729c637f3b0af22a2e118e35ca8fbc274ec70c5fba7e4f71c571d4e11c19a7bbd9375e581b598735fc8fb6934e1f953cb78ac6984529c77c955eaf359820dcba5c3031a88141e338f7f81962828dd58204cb8bcab9b058aa76f234f3488824eaf54435b404244cb6df0c31b28820dc8307bca46e321817b8e5bf0da6f36d08a3ff54f85af98293cc784f2a70893ed945c5fd24ec83d5db7346a05df76b83ccd9d5c9ed57b78ebd01938c923fa63233c58e34153026f09b65d3bdd2c2a6e92b24a6ba9571caebab33925352ccca18bfdc904b11416924f7b8545fccb7be4b570a56e3228c41283238a6da5e1f2453a2706538f64bc723ca12d3d62c8c08ed223bcfc758c00c64c0d302fe76084b6358cadc38dbe4b9d998707b4b56acb70b37574242f602d7f269361e87c40ee8409e579b19ab948397c6d398b62bdcaee159f293f771a0720bd2655d50c67c292e8d0674a127afd07641652b26aa1461ecf927a3152b418a066038dffd2e9bf3d7854420dc1e9a23040fc4fc1d81f2c55c51609fd5cda0c8d4aec9489f640902585816176acd564ddc6b80e5424bff2ac339853d5059ee026f0e0d719d405b2935108389fe46104efcac2490ffaa742d473512fbcca325b3319e1f98eb3eab868a7a8606de71bb59db82351c2eb179bec0d604193ace31dac48253b90e7333bec911a83357f52a5984bf38867ea69de4d2755afa09a6dacfd96a2bc5123bc662af22144ef8477e7e015d32caae045955df4dc8d3f26794c1b88fa649375ebc1f2cab2c1cf5a36105cd254b0792ad8e4874bf974ceb04e2888ac03bf3ee76d37b586169faa939654e293010b94aad986c4ebec8e47845015a41e28879a89b52ca6cecfb8215597464fddc096ee0e2fea60cc4f52020b56378fd898aa8b36478f4781b512565d3f46e8bd0b094c39e355ff21e5524e11cde4c42d1d2bd802d2a0e6caa2cbf1d9a7e2dbc980e88e8259d2de50a7d510f887b62db722771ae051569448da7072397b567613e68b1183c3aa42cb38f60e476352b1b458cbc74764dd7a64da2c56cd44f0e4fed76043daae3a87483751106a05d1cbf010116841f79e5838144f713c0f6191d2de376b6b89f91f4990f9233021fb542ea78c660f0e6026177a969010182a54a96b207b04104fa9892dc488a097adc65ce1da2ba21a4403d0eee579315ffd88658aef34b73724c4e03b23bb22743f2fffc0d827614042d11ea35bcabf3a32c3afe568503ea01a3a2e7552801195d39213e1c642b4b23c70720332dd9eec7eee08aa6cae79a88502818f782f285740824a685c8fa34f08e1368ae4a3e6e2601c293b17f5599b2ce826503b5d737012367245582b045c4936d81549826253e1a9b6aabd58ab226b23e7802124a9a9823e409c9142cde16f48206661a97acd04647ac6db6e10964ca9da7ab6784e16e0801f9b45694a5731057070aada6fd414c3a07f7b400f5b7d724d9208755794804c724c321942adb6b9262ac1ddee91e849600ee3959c660fb6c1e228fdcfc543163e59d3ff671d7c09072ae630f06dd106eb83ca2d4484498ac4167343db829e9db12003d093866a0a350005592d575f6b3717bb818aedcd756a9b73e77abdc3e5bbb3f1f1942517af3447c24a6b90968934833f9442927a157c5fdd09bf3a40992971960c7805e93b656e9d78aa4894ce663c6adeea73af3f79447a51442a5f70680c3b0b7a1b09abb3b0a6121e8e8f7ed8037c1104ca932a73073ecdf6217f038d3a1391ed750e74a1bad8d96a4874b3254741ae0ef3edd35467dae3dec20e26a9a8e02254a6c4b739ea73761a464389bb244681051635ea862990ee6f516c713e539253c951fe394174c30e8a294a49be673d657a4fd4657277931b58e515a994a1a8b991eaeffa6751b5e7f42f89c644fa9067d71f3ad435023002bfed92bc6af2de5f6b1ac3e63ce5c226919540d3d53e487c29ec811327b9ddad96c2f0706b4f65a8028e63713d0d1da3c058bbd100fe01e39fa71f0c22278ca5460486bb705a1e77736268ae1fc68b7747e8d5fd127207594cb294eaae6a8cee9683d0babbe02492f71e8a795485f836b94d57940805291e612ca8d9f88c1f9eb5308cf01876b574577f90526be4565f4e4dcda73b6232deeadc53eaffc05a2b30a4a8103b655da00ceb526a0b4a21f0bd63421eac856f4e1f99f609d45c43a4c78045337b7a52dcb322e08e8810d19f09f969d7260a8e0dd731fe8e7191a118b5b50aed28dcabde0f140b4df449d8fb6847281a4c971b7b1234b90187ee6c165db11c730091e6745c969c66721015cc0616a44798f5211c886ef56dc9ecef9dcd10c3630fb3d00592c1d4634bf76dad52d1247d5ce4d1e8eb6db1df1d5ac492bf6f38a4a8565ebc918e00cc928b1db275e2bced9a173562ea336f304695f767eb27d63167377423133f7dad480be22e81ca91b95425b40d2c5eea57941a7326b0fddca94f5e0c079c600313e3ca9425c10671a798349236135b505e8d8025894026a864980573a93dfac1daf70748b38eb0297f5854d003323d5cbd5b1729401035e7e29098007d18a1cf16dc9676e1835d106ff3638621b072e7ca5e231382e8bcb2d3df044fb8b94face986b770351558d3340d4bd4f47207d05a3492e94b9098373049cd0aa54a94b254127c6ff5af440e30a0432d4b8edd51f0bb7a39c9eb7979fd7c6ada37f629fbdeaa4ebbff44c714837b40d016f90aedb789f8263b6c3076431d262e7f452e566c0a0b68cdc5c7d2b2676c5d920577a524030c9f0c64fcff52b264c9f2e9fcb979ed09cf0451fb543ee3fc185c09a19a6e662e60cf982e41f1ff47ead6c45f661d1c542b33372c03506071269b9c19e7560e93af690ceeea83a4d40ec8647312332f1c8aa7993da4461f28bd589c82deb66eb107ee0e68b87b312a40e3aa5d359131835f104ff5a6bf69de2158c149d337108c4a34d734805b880b8040571554853a91c4f8b39bd3f32841d708529b0e036617d7459d55005d8f2a89b95017e3a4da812748e5cc334382913047daae0bb6e6da1cf06307b49e79b54a551f7206ea5b07a7393a883b2b5454654392437db9abf09a746fc2235e3f1cbad4d582009c581c37635ce1eb5a73344e0672907a21f92131935b337625099a73b4b19b238735b771531c91718be21c918468b65b859700e8093c44c3cb0377708eb0dd9cb123e7e2b069803909f2af5c56019a0c7be49d8c2bdfa2586ccb4a3abe01f8744f5d1337b02e5dd44bf880c580e3dfbc47564ea620d9cd183a3e73b67a6c3fa6280089e87ece5b484f3a7e8bb3713641f9d2d733fd32af0f1a622f3c0568e09a017b25ddd8de2f5ee62875e81d72bed337d5d37c3d28d434a889d068bccba6ef92a675d2bac1ae7a43598c254a79660941d1179344f50ad4b6f578530f32109fc00f44c6d235cdc2cc6bf13d24bb2bd67dbd425d411721805e293b0e286123cc054b81c88689cae25213b24379047b71602c9855d8b0084b2b7d1f062c2dc71369d67091075fc8ad9e4c356e5a3be5ee4e2b0ebd409227fc5797221b3c2788092d53161fa472e8201195c288be2e4e98f96c8560ba9d99dea13b098fdc5c35d98300d9fb0bf82de521f02d3507855d800d23a5e431783e092294e97b72e9fb23c2f460b548c95f225772e08bacd631975fa64f1d32acb36ab2b0f4d0f866f579b61d6ed9090278760b6762ccc0c88898646939e9b520e6daee5bb118b0aa7e5f32f89f9b3e9f5e9a1f406cecc6b0621d11e54f90303cae686c4c1aa28bf690ddffb0f4965ced2c5ba06261a5193dcbe2568f6be719a9aab54a195cd4225f31ae92f9386927d20d4e86c464313412932fd6486aa54626d0b12cea25859560e9aeac4f13b0fa71001c8916593c706628c05c33598a7099c8d50a70a1b2a447f41a7cfb12710c93f18ac0e8f552985b5062850172dfcbfa76dccd8937d26304751343e6c4a533ed14122288870d333f012609d1ac17fb3fd06d4804ca85ac3d51261318fa16840cfb901d77fe93cadee73870f93f73c2c450746122e6a6a91cf138d8f722e8894b1a5ab91452ecf661e26ee29d6b21d86b44f7dd4182f4a832d9a3b41aea4132d8827c792c62104f445c1024493f3a47bd7a15d2d2b637675a1b97193c221fca896b45eb5015155466530ab80de515128837c469a1540894f9fc09f4681f365eb17da9473d3121081d4f88da3399be5eeeb2dc3872cfd29e27b3b5bd5eb299d34898338b9f1910f444fa6dea1799d62f01e97d0e16563818fc3b76536d96f728c72ee9254195ea4c85c00618ca204e937cf789bea8110e07913b047110da07c1e732bb3e5263aa05356c2dc83360e0225b39e95dc84b94c551da5653926ab7c9a6d4bcfb9299a0804f039d4a400e73d6ad494e7f3ec67b78c47681869f7e7e0b18b582b99a521c2c081d0b21ebffc419b86dc2e23d24551cc9f2086ac804ffb5a2a739a895bfc01c8b960490c7f03e5831ee0072c88d592c4ced204ab9df5d4f10e15a0615f31c9948c020eb21d007b717a478634ef7051504ef6b1201750799d7c7c3a9b46be4d633761e2d08ff7536d350196a166558b86a9fc51f830066ce6459670ff41ce6e40413feed238ea91fbcc69303352e92b5e40e61afaab20710f6f39713113fd349a10b2ace7f0d26354595947f3a368bd3094ca1c635e7d041bc4fd69d4e22fb6639e085e4cd3bf4aac0761fe2b7c6e34037ea48e99841780b6593ec7aa560d1e074d2a324534acdb20953edc1a6a8a30d6de9004a772d0d11ff2a6f06bdf2eabf28b692e7e2b1be24805150aedb44707427e64fef2e1dc206cd44bb104c9c4cf28ada283fa1540957f745e65d9572765fc2a310e55ff1583ef0f34474853dd1d163bbd2c0e81b88cfd4088b689695da0c3f30d220b98a75cb317179220c7c7e21ebe6c71ac947455c6aea11404655b6e75611d8d7095b78bbd7aa10271a3993e89c912b998b5041ddad20b2a729177158a1c6f5f4742ca783b165217c4814a474841d5b20acd4d59bb44bcfde204e1c4f6a6f87c124be1b2f82a2d38b1e82ac5b5c6fa992bd2a151f4157fa2fd146dceb84e60dd84327bc72d80195930ef7a2f12dcd6e7be3b450a25797f84022b5ea904d860e44a8a765b37c1928a611766fc7c7e93e6011b57765595edd63811f52da96fe91491df6988ba2e772490f7cd500ceef92cce111aec704ba55b7e2fe7695988b5cc4628246759a30d5263a6c612377cc7402595d7e42431dd5986510e3e124691a9e1c36305c5e6e84f1644ce8e3a5544b37b4e95ee8e80e3980bdc19c89cdb1b9669bb1647a2bff771c3819a1abe1c53bb6989915320b71dcc840749013227d795ff080e398694071152a363198bfa66c91eed344855f25111d1073407cb1ea3f2adec049b21debf9b4cb9c38bf576c411ef6859bcdc31f543ed8cd2ff4ecc56ea2094144d80e1444dfb396dfbc38e64ccd62e5dc10660c06fa21d64af86868e4efcc540895a4a3348cd0720920162615a892d757fe009f7f0501684c2451aedc8458d10bac20da535dd4d70b89c472c5530deaf7739a5763d21e615edbc540d33a2cf7c0ad3118209a2f7182855590a7830acea9fbeb7029b1c30d7302917569e61bef5ef8600722fc5f1db9af88a7ebb02e75f7e1d457d3992c0dbaa2bda188ef82d5752a2dd31805a2203d9d881838acbf5f76fc3326ac447c9509cb026d7188dd4af17aa0808b9745e8dec2dd2b0f46fccc08d25018c19d831144fcff3e81955a29b3c68fcf9e0a94dfab12bf8da41b2a1fd0ba74d14ab59e90509ac03869ef2c8b76e00d76d5ed76013112248142d603e1c0397be2dc150c283eb75acd89cd7f07359c70b7a7b299040aa03ccf04f659d88752ce7e3cfc80fe96d8dd3d92113bc65f974ebcfcdf128f0e431d50e29928bdc04055cbc38f4f8d525702c628ecebf5e12c2dbdb12f5b485b5af969447c12bc0f314a2e4417ec6ed2c3c29d89c7a729f1e4f8f48fdbc9a5e2e04cd2611016061823191beadcaea2b7e6ba475a3b495bb3c48c0a7cbefade57ae82209aa7da9c4279f20745941130f0e6f3385b69a60a54000ef0d98810d7a31e16ab0e98f8c1deea67b78158dbabe8a30f8ec9dc922aaf6f06b846c7e0c55dc7299a09a177f8624f96759c89a5b369b12882ade105f9c43b08d88732a152dcbf850c39abbec719944fb364a98112f25f4e9cd404c2399cfb0fa7f92048651f6fade5b552a73803bd5dfd7d1cf2fc9eeb21135a937951ed0ae166aad5ffbeb4aca57b39fa710685ed2363765297083da179cf385f71f3933d57fe21e276463cb3ca262892aa88988b13aa2619a5120a976dc6e821dd90b35f8b55d10cb628fd6608524e567d2e7523a2c9c60bcd6059b0a462993ff0d60b554002b4b43d2adf7505be7c0139ba834b4848aeefe3174a3d1f28caf30659b23a77acf77439056466c54521bacb200989a5e3ebec72f441c87b3dcc31f84bbbe372c87b825020f9631e7854a43f69db9ab61f9d5d66318db7464b1dec24ca80417c24242d96b2f35e546e719c01606ee134810d7b4718e99a3f292213c8cfbd57cef4f86beed349200fbef70ec645246dbf70a267b82f335e81b6c5e6a02db6bc2e710662b290eeca9387fcc1abac9985f0bb00fb7022f598afd81cf672d04e3a8697276565d5ca1a2f9b1e0d4c5b6e6157400bdc037e45213807de2979a776a48a3716003b7642d57a57dc1d7ceea907325736d4d71d240c4ae00a7062fc377e267d246b36b3e8af6b2d98cce012c1b7175029c9cbf44b778389141abc626d54e1feebe3357ea6c2977a04a2aa04d0bda1cc7785ce51e0a500dc4cfee0b565be31a75f364f0b08a94cbb1360acd931f3ad78334da363c8a4d1441c4d6ff4c01deb102a51bf04a221d828b19efc8361569f3f99414b929f7cdbed412544181e8e7f1d7addba4a652ebd1128dd9c11e9a65c1f994025b967afd1bd1d6af4374b1dd750b57bae1fc6895ed4a034dc9694574f25550fce2147e58450ba92b6a0a9a3ae0822365024719ed09c4f8107f9276b6c0616e8202b5089f65cf9f0c9762a503dcba82f0408d62b0df6b656d480396f12f40dbe41c884ba1d8485011ae6982e55809615758dcd43b0791007985caeff8f7930a247763a96d171fd03771cc0825f391d4cc3567b24dd810610e2332f87a8ff2494ea3f04535dd0142bc25db9017ee85125b1a4a4215fcf6fdc12bb9bc894929452ca1db702940212031ecce7eeeeee16638c31c6ffffffef2eae162fd996d3962cd059ed6dc78f69341a8d466b7d9446a3d16818638c31feffff7fd78731aeeeeeeedefa7038738b16414c8434c3e06816aab990e6d793f016d20c6b2117d6858b4aa70b17f8d4e549ab6dd94e4833ac565d74fbcc1a27007c6ad925491cffffff2f93c964325aabb5f7f6ffd37f7981f960f27769dda5d12eac61d561187697f8ab6b71f9f0b73efceac21f5d1f167fc2bef9315f002f607c0574659744c7a4af0d3b1a3a6bea40d7b27a61b5abaf66decc97f298ca81a4acbce63a2a9ec36f50192b4346a553860c7cb26066117aacd27830d634a0653deb1d2679a384341b7073ab0354bef9b2e9584833027d830b694ea0898c4fc55493024b15ab26cda5a1b195d2d0e0d3253b023a5cc224c8ca3f55beeed280429a597e5858aca090e6969b24a4d96bf9ba97cdadd5ccf0ea5c1a021f6e3b764f92244992a41d478b046dd934d53c7695558a4f5caa5298094992a493aa14e85f69b4b22ccbb26cd80c7fef80ef71b575369bcd66b34109696ea9f6f64f4f81258c11484006c984244992c429d0deee6eb01b638c31c615666117e6d28f3dd7f7b6855048f34bd00b0cccf7af6c8df2f72f1bfb13d2fcb23e300b83553a61307cb2e3379d756559966559d2d98c0611d29c31f6ae7ee5934c48922449f253a56a2f14655996657953edf8bbbbbbdb4551144511e30ab3b01917bf2eb0309c90661732173131b49066002c10003efcb2b1b190e600eccd0bfbe245a5f3c50b7cb2341ff659eb1c0390024b3e33aba986644292244992b384a22ccb52559629b054adca2a45656f3beeeeee6e777777ffffffff1438e303f8fc7581f55e7cfe92216560c0f004f8fc653340921836468c4a678c18f8f4dd4047036bac31ffc8d86ad0388ee3388ea2288aa228fefcfc0830df5360c91b7f77bfdadb3f5360c9c96a6fffe31458c24e7f062e263cc018eff020fae136221db6db102e25ae2588a88551bc2ec6c6bbbbdce7a019ccd9c4b153cc0083f93f34976edd03347f5d1353031d0134e33973777777ff5cb2f0ec9205689ae1359c71777777b7e9048238151553680e7ac3964c4c5c37934cdbbc09cd71eecc5a4700cdb89fd58631c6ffeac26e74fcddeeed76bbdd4a184c0c72b95c2ed7ef9f62c1521d898ce3388ea3bdd65a6badfdffffafd56ab55aade6b9640153a3b55aad56abd96b55d6df3ec618638c71b88ac3e170b813985279ca5a6badb5222896c42a8a62adb5d65ac1d4ccce66b3d96c468348b16dadb5d65a5b8ee3388ee3288aa2288ab5d65a6b4a754bb6d65a6bad305d6d361bc618638c6badb5d6fa62adb5d65aff4e39d30cd3f47ef6eeeeee81a94f456ff44948f38a962a51486ac4c2277aebe69c73b5f209695e1959581488d228103af3ffffac366bdb276ee26aabeab66396159515bef8de7befbdffffffb3d96c369bcd66d471c9f37f556a1cc7711c4711144b6215ad288a258fdeeaed76ab364cd55ebff7de7befedae561445511445eff3db0d964a6badb5d65e511445f1de7befbde3388ee338b6ebbbf7de7b6f5b6badb5f6aa3ed38cb932cdc01863ecadbe9515568b8b8b2556511445511c426ff376bbdd66b557956ac72c2b2aabc76f5db2a8365aa1f8ab52607777779765398ee3388ea378af78c52b5ef18a576caf9e024be3388ee368c7711c478b44777777bbbbbb3b49922449628c31c6b82ccbb2eceeeeeefbffffff18638c31bef7de7bef8a6946374d1dad6fade8b15a5aae162f301606a6d20903d375b4ab9ded463a8ee3388e2fede2c4e28ba228da2134dab3aca8bcaf52548ee7cf558a2ae5eeeeee0e96aabd7d9b567bdb31f66a6fffffff7f777777575b96a5bbbbbb638c31c6f8ffffff03b74891cd1ec9f99c7d52d4c4e218a5b4561c5b1ae1dedb6d34beceffe392d1cd94a3869dede806eb74b47314833dcd6e771454c424348a62f42406f59d4ea7130a75b4000b45c46b1531738c4c8c189918fe3214dd72a501c16c140bdd4196b788c0d2083e3a36231b11f00b3b9b116e083c859ded689604f4c2ce7604247444cad8906ec20f3bdb5194d026cf94ad23b62224477028f2e9a9960ea140f308094daffb0e3f39e408f16e14502c129b0f3faebbbb7b777777b7bbbb7b774f0f0839d69da7bbbbbbdddddd79aaa8366c361f34baef0e3faa8dd568022949121a357cf0820e4341e0286ac1a7fb4ecf38438e90128a74dce8ee3288bd3dc0ae4556d8415a1f78dea0431045717777f7eeee6e779e3c8371a8eedddddddd3c3c47b3e290a1c38d9013215c5062490e484c501b3848538070058d1e383d807a8696b49125eecee8a37df4bd512c31654e50f2739301881bdb13385c115cfc60042ea6038622166e20aa517b547724361f66c811d243e82d72ebb1c3dd57d841be7b4ff7f474f7f4dc668f904475e428da61050e1551a008717f888afcc87f6d0c8a1a55f820c3121a78d8704b2aa2862b8809585c21850ab9216e0db72124119a4867babb3bd8eeee0e448312da0165e2d3d7ddddbdbbbb9bc773e00fc14891cc861e1c724a8e7c3044c28da2dd799a87a79b8747083d3264454ef7f5196a2188ede93c73a7781bd7c8123b7ee4f8edeeee28c21ee2eeeeeedddddd3d3dddddddeeeeee7906fbb0f0a3babbbb777777bb7b4f9eb144f3de2261671085db8e9a0a8d5b0e3e46e86e222082d4e86e433d41de9da77978ba7978f24c89b4d17d890c2199b3529113391ce4f420c3e28e4ba628f58d063937129ce881c409204cb8340cdd28019bca70839274a3bb83288acd347677f7b6b6bdebeeeeb69e6d724cfe9bc19c15e8c0c80e209c5c5104504fce79e65b8875444436b0814511409c48826788051d28dde919dd3d70afc288189c2881040f280ef80ca1df7242177239702969a500b672b8bd40a46334041210d9d201b666201147dcb884326b05e62c936370d8d9885022b4c93348ae256c4b481b114e025d68a90b0778bb93a043170ed0e6df447988b71615a0cd875fcd315c8ed25a5a58c54ae3e162b9fa8961ad2fd22805d4018779b70aa366970da0cd1713431b1bda2f16d6fcc5a80c4a657c61ed4c3535673fd7595108af234d13549cba536bf5c7a7ca9a44c9e1704dc849abb5f776fbed76ffc7fe8f71a9e4e152c9f3becf34bdef33994e2754974fb9130aec3a4a76047499ea00fd0425a1354a7b426fd058ee49e92314f4e3431afdf88cf366e24cd914bb2ed3da65db45d09d68add6dedbf676bbff637f8c4b25cffb4adef7994ca713ca7442a1403095528129952a2565b5525159616161b15a5a5c668cb0cb2ba69a19caacb0b07cb3cbac2ee3f05a117461976bbab0eb26ec611f6a3027035ecd852d27e0ac945627a0cdb769867f5528acd95b4ec0cefbda7fefd451994ae9a44b3c5c3873474e60636373279c99d668adb370ce2ac33589926b42567b6bdabffd658f4d35b8f42a05799fa9e633a12c0a55e944fde9339d6a50e02b8502533f2995a94695b27aa5d028e1cc2b9a5ba9acdc8493a509ad511d0a447f68104da24369b927e1a4b12754a6e349f9e32314e4431af98cf366e24cd9a44d20f3668a13826baa99a1ad63557bbbfd1d974adee7994ea8130a44a55429aa9495a94626c50481ca0acb0a0b8ba5c5a5e56bb95abc986a64582b045eafeed5c25423e33241b0ea5e30a69a19be7c39b4af57a5f3f527983f7599763e3b241d91f444f8ff4352ce060e481021b401f3121227b4c96012492b81ec094222217ba841068536790689073008a4015c014c1aea4026c72089a024d647205c9c07168a161160528e9b241d6ec4841a188947ecff5f067648230d21cb025740a191ab8343ff501667d6f7591ac3ff430de6ac46781d4532216421f1a094d66aef0fa4d15227bc1613aa14666a870e0993746c520e354928e9879934e438afa5c42bb9de51e342d63791a0b0d6de9b2456e1eeff4834a41fa5a41c9787d7c275266ae37a5ffd5751312d54c22e833495aa19a49f875209a9a98341c19839e7cc5d57410e944fa8748f5bbba101048000a3190000002114858138cbb25049d80314800b26524a407632202a3a26924802413a1063281061000601180418830c428c3184652d72b8d54c76d73db0cee0fe7d9f5d3fb5f3e4f5fc1dbefcccc7088a44dc784af9ae9f93e91b5017e84586f0eca1dfcaf36287d334ae5970484ab91740695e20571ebbf66ceb7424ba793392972f06bec0345e01abfe02d3d7bb6b2365085b06a68977d7c64d39cca07305371076baeab87989577fd434dc15cf8fb36315afeda338d2507a11c9d894e12e83d07dfc38a652c59cf22f082444b417ad9cb4f6d54d65586b4cf8c649d82cb6f21236ebb2cf1b62e20e4597ae95de774f68a6dd0735a988d57b251ac2573d16a331e125866302fda0856d7242657c006bc496adf0f6c57188b34b23510bf7c0876730a56a61e296e166e39691afbda3e42d28821a991ccc30c091e48fc0f7244eb259220f8f1a35becb84cc05c9198eb70aac904474457b3635e8d13fab48d9749b43e16443d3651413f2c8d626632d2b03412803be32de01a7049c941af3013c9b023ee0413952759c383a52e83e1ed7dc28395efb77f07b2ff7c533f4fc0cb910cb2aacfb528361180834b4ae8dc30dc35c62b1f167ff3a2fc6379a0fcdee69cc221b41b3ec552db3babf16564c96f762a02fb7ae9bc4c26a2b1feb7a30f342675756789ac6a7819c08d2c44a99572afaecd952448328744eeeabc731ed8dad8a9f45bcf80c31b228f34aa83f198f8975edc23a88c4bebb7163268ef818856251f6badc64ecb87fef148f3bddc414222e5c6e5ed14179634368c777af519096a9a90221ea5ddbacd2712c28360ff2ad8fde90ee55375f45feaf6117cd5e43f391839eab58dc27c80fbd240568adc1b6ab0e760991fd0f4062beffc0cf3009bfb5647772324118a42fabca70bf468c3f211568851f52ccfe039431ee3f70be4cc2ae1ad91d18491026e6cbaa23bcad31c34b480552be8cfec0ad57be6ccd9171bbdd675eebd353387fef188bcb2fb3d4ad8d55976663a1d9324c29b8cf4f788ee770a94efa2af265314a32e294cc912ed546d8cf17571c35fb0173370e72d6d9b2f44861d4594f12baf9de7d14df111c80fbb92b2bf4f617c3bf964a9034de1c98b93d4ba83830a25499c571789d21d77f3cd8d4825a6a735cb6ed7ff3f44d85b42dedbe229e57f7f45bbbf96d25b66543517ada592ce13cb0197fd06ce12e7d15e2c55600c23c1d73660d357c9a9eeaf492205fa8da7fbcd3b71a0aef5c698840123f7cb6876b9ea82adaf33d76cc4632f4d45deaa060687068dc754c0bdfb1eac12c85050cd5a154c0eac67ad9f2f52842d76af6ad4f47c4259b02bea2697b5e5bc1cca882ff7aa29bea8c85c833c0b4e5e3259806f2bcd25a45c1b0572ba5eda7f823b852b5f229a57c261bd2b08aea4a1563e7da12b701fcd822f31a2015e7ef4f11c682740b93dbe8e3770d9b049e96f98a856df9fbed729833afbba53d7e7e966bf9332eac970a4d8c135f859c642b8516720779c7eae0acfdaf76c134f081322c7b859264eb699f48e1d2c93f4dfe34551d5ce2a35b803e50ed729c06309ae2638d143afbdf5ec23ab02e9d9e8372538eb58f0f918cffd69b3f649ba7ef1cc258d7fff7d3615e5a696bcbd56c966b42e085c8a8543dae4d8d7e2c81293db0bebddcda23d8df0f9b62806bf9a9c4dda6120ea71d990769197d746061a653afd40700e37d6aaa0b350a4b016db159ceb7288870d5ffe657a2fcbab1a9add1ecc624f7df44f1cd918a56a40a3f593b976ccbf85d53f131d4993c00d86805275a8133fd21ba1d451923f945f8141ac2e3ff2f37584a2a4850504ef6054758cad51f2bbe75a5a0192291c08cf1e70decc9a94cd3bf40812589585295acde0cc9271a32d5110b6cbb0fd437b2f25d35ce4de3e73ab1b008e6903b3bdafff65ae0446f1d92fa345a10db3564a709989d108d1ef358026eee0364699f0839554b3d07bbcd4147cbb930d0a86d64e57d42763ffd708fd96ee35b670831a4ff54969c538c7d1f8b9c8c09886ba94c9f9be09248997b6aaa3d35308c9e70d9df176f8608c455af51b53e0d2374f17eda6ae66eb19bba16d517ae213c85752cd1535ff6079867b7a2b9788b08a17d71862611478fa3c5d78a102c33e09ec504f3f46280533fdc15c54d0360a43afc384317548a85040fe6a7366fcded381d3c95940fb430ff8604589ef0c70f807f9441eb2ec304c5787ea00039575646f4ef6757564ab7399595fc3bdbd2ab7b2bc370de2a1dbc1bde5b1906a2737fabdb4d28797983ecadd2c409fcc452ff58e5399a1364dc9601388b2ad8f02c733eceb0a628722001854523d9a1c6fd99430d8fd99efc6bd80666f54bc6b79d6116f2cbc64a7c6eb8a11b93bd9cae44a6139d73e0c30f63386f54ae5a0144a0504fea498612942fc051141cc8e2cdcfff992e846252e50c303b99a5aafca1955ec7827ab9e0a7c86791380326673227692d291ada8add0be650b67d1f312793c656716a04b5495a94fa8aa7b8cb806ca4b6a3c7229ed43c1fb0a9161a30831a6d1c000f7db4512d4bdaeb73420968012fb84738d37cfa187a8b4f2e5edae4f01586a1ebfb4cea3a113b772fdda99e319b8b9f61e8892b1a09bc864064fdcfa54595de4fca517b5ce4b8dc1667d79929f23271e7055a53cc1e29e4d7c8ea0935ffbc9cdaa532e601e10982676485ce62ecb013be71653fa13cfc17acb6a05ff2752b98ee1a7879236bb32385bc97965a441355b137b6877db345a946d79b3d9d5112cb225ce4adb5d41fd46831e425313fb8afdd1290ac0f51c9b88ca0fbb709b8b9b13771df0a299cbf6ec7fc767d004d2b410aeef7a8a3aa281de8bbadda7aa8b9e23feb59acc1c07c4427d697796420d49ab71d0df60360dbb26b9efb955d8136ee04120e2baed7d3414fead29bc40d71af1784dde8878cbf58f1e0e1b350b9b618926a65ee2f62d337bc1e9d5eb1ea86495700665cf63e347fde6755e9fc51b799bb92c162ff9985c7734be70182c00f062aa263d9970dd1dab2279554a9ca0f61d675ad65c0d76afa2d8645c0b1bcd98ae42368e2a7cad669995f959be8bf5e1fd28a9d3dc6ae453646e3eb82403746cd446743ddcdeef6d2c96c586c1c193474baffd2059b9c00db15c2d1176a13d6b7726893cd50c6bbe93a6477b4225d6b872a140b086d0bc7c9358a39f621d1a0e8760571122e47586eb51a519adac2a1f3281307a2795d94f77d78a80712305085a12056ddfc081ee38bb83e12a4a0f25472e50f832d0c2feb2e3c37d4e2a7ca95ff7c5eaca6d981945008798022288efe93bd12ccaa01186a0b3d8a6aab59cf854d64f1861d78aceb3be76b959b0ce81a9402074a7ec74aea0908e900b8276c4645bcfcc1f59ad835c77261aed8ab7d2c6fc8352cb59b0902050754eaddf7a602d2390428757380aa3c4bf4397198b64e3fd13c6a4ce19f1d471351869a8af9677fa9b66e2bfce9b75a98a403b929a9a6ef91908fd8bc800d310853db1310baa37339bcdd775c4d92fb8461421eb451051c8893e22045ef97736de3eac8ddcc8c6455ad822dab3d0320051b26c7755ef77d095f064f3e56a3619ce1d47306dc8492e80d02d6c4ad485fe0a3f33ffbaf6416431b3573306ba190108a9f33842293480fb1194c750fbc6c48242ecd3b8e9c06252f0324b142abe57af26cd8183f3cd7ede6ad49b76e03f66863cef5e489963e6d49706b274f048992a05adf117a0c06d5b792a8a6adbafbf4aa96d60885afeb65dbeb18b7c70193ff3521576047eaa8ed57258cac82e879a215363c0b5afebf88a0121466ee2a13f2e6b65344d0424c9d3a52e3480161214f6fcb62d8af22d4153b52f2bef23a34e51c350b98b23168e152e3940c756200740d45c546937377df52d007e7b2bbf13f8d5e995d3313d11113c201b657350cd22c2c2e1edb354a001288e1df45d1862d822677aa0ca0b9320da2612d4710ca229632133de4e777c37f3bf868b8238c73380a80a26a02a91c4f4ccd6b260df9a8baee05da9b60543b6100e94a05fcfb33c65a9c2df7dd0293d61c288dcf7a7004a7a163e1c0f6489616dbe781e048ff1aaf73f676b3d3c67eb9996cac5a8bb20b923590d8d93d1581dcccc20d6ed1b86db26d2a8688199a341a33596c0a6aa8733faebae434ba27addc2a2a03499dc2827a71687d60e77bcb6bc0211c698d5ada47a4a4455365360842df58d26bcd0d71a9f52e500c6a8a2d2a091914e3faaa29f534cd782bbe401946c7f762795d62d466a1cef8b5f509fd8d41b9cb2fd6effeb87be5966adaf34683439aec99046e35d25e22cd5fb6f53fe8c41d0773a17430ab640ade5c8b8c8d4851f2fad6498585cc16a721936c6dfac82789b89060149fd04aaa8babbe5be2d5bf82fabd3865b395b1b9511ba2f7aab0ff23d9b86d6eb9f1a3d42490f57b8835f34b8815820b19704e45586969bfe92b0f0bb7480d2be1327cf261b2d3cc2e0bc341a2edb2aa6275b1cd89b8c43d2011501a1f40471e9f16208be9a52156751abd1c5c7e9cdbbf20d2b23d0a9cb88c64e0ef7a1ace61d111fd2916a428301801d1ec00e7c64d1e5510609daf634ab8599e19674c33d3b0b743146496524999b62455020c3a2db264bec2273cb7be9e511706e19af04dc3da2f21eacfe6788516ccfb0a47ba16341037298f43976528cb6d57429885f03365554cb64de0640550db9ba7fa71c1183c4b57a8f909142083e0f7d038f2c9b9b84cc7ae4e3c6116ffaadd942b79e5bc75417030e62cacdbec41ccee065ed39debae0a41e85192c69075fe78ff286a6d6cc1706a2a9e702a4a9f0f5db6079a3033fb80e24a77f7aa96e3c51bf95ab12c79e7655dc79ac569714f76e93ddc7baff6aedfdfb7eed01312f4313e38116b4dc0eb74b2e8b9c35e714635586b981650c2760d91341ab6d20cd0f78305c726f940b48965e53822eeb29705e018e918a94909471ae8299d3ca92b91c473c8e24aff8249ebc3aad4f9e0f0493b1165bf3f0075ff052d9a676eda94bd239145b32368e1e609133326cd142488eea5fc931cba1dbf3be3912bc29d8b5a28768c1d39ffb89e1728b813f7a245c40a73e30e7251a96c1149094d9946b66b91c50efde0ffff4f150f4f8b962d2b4961147370ea922ded5732756944638a6d49aa00aab6260ea150b2559f312a437b35634a8322627a54b880ead39ed5ecd2af41be46c19f9876be60208c97b21685858c51b92b4136d6a081f50e76bcd81d89e3efac0b009c23dc715083cf68671421112524a8501b67d16862c6b23d5ba68b3e92ae2c2c94e724fe2dddd0d41f494e334aac28292ba28a511eecf88ed2b9a4023cf262f7c23ca29a121bc8c863893bec292c28cbcd0e9a5580e2f58c58244d56ac1253cf36c90da245acab2f1131975d16c01764c3484d4ab8b197504268214b402ff9a1366666b54008f9e8b290172190e1595076140da26af688e19a06a9e51bc24edbffedf9d0164ed3a7de1a8f916091f585676262bf815665284dc3292598190ba6ad5c600c19e7654438112706596a0ab93a373ac855ba41ca08b3131f17df474a964c047cd077267a14923828f667876a6bf9b746cc5b5d6682e4a0315578357a62a3bf020e484f531434c9ed86ef91850ec3b3a58fb854b9ef121691cc6a9881e506feb3d8cbe54a9b07d9d627f7e41d10713776dac6230ae71f42bf6144f7caa0e1226454ee03e61a6627042a5026bb5a1eb8f902765d27dc44e40325610acfed099c243c1fe3e676aaeaf85840e99e3e35f82abc9fd45f658c028a0fea14f6dcc365ea83c5c041e26247f4a0a67e7df12c63e5eb6131cb6d92e31b5a1c41eb03a04ee6f04bdbe6352b3d2aa80ff3bce79c1b8a86dc3abd5d745a7c5f9e831825de1b1542d86f4abc0f827a5c9d6476c18dae75222d28aa0601a3b97092f4ee33db579f5bf838e5745930087208d8f833cbece0521d21c7ad544d9f99e5de4a7fa1dd76942e1897321dbace50fe951eb7874de9e129ea6a6b7026339486930bc4ab28eb9bfbfc9d3cde069494ddcb78a3fc8301cfe3eda03b8b51c01c4702bc0d1686f1b4ae858b0505fb5bb37d8120644fc2892804c76ea462b28fd60c8b9687fcf615a4c5ab4458e454913b0d8994234d519466ee89f9e24490f916bb1ac4d500491463f6b880857cde93151ea22c912b15e206554f1743940a77bc9b3868c491d3b664cba8def02ec12dd05b9803b62be7a2835f625f5d449e6aa987d88621cb63ab35a8d4b8ec9689d95012d18935b1dae908af41c62c90a90d87c2eeda951217a24901ccbf6b075fb5a964b9180d21517c289af6e11cfbc209a33a430243d6edea10da9b0651c3cc9ed10ba8289554fce84fbcbb86a270e410709d71405cbc8ad404e5a706f785a504726665660cb59ce406273522d64a6c123f606db9501c8e12a5ae39e27bc32b04aa46ec7f492969729d5acfc880d8b4597b5c0daf8aac10a53c5a6aaaac746c91a1cedd86ca5bc3aaae20f37bc28ac5f043752f1796141ece9c1a3d811a234fe4413459aa8345974393c74c4344947b697a2ce0b887095c4aa24296227190b000bf8a811a433f92481d3dc0c9c535b4c00751247ca01c7b6a71ca450ea4061742943de46556701174400ea0eeec2157646fa6696bb72fa79bc4bac85e3330638a2da6a32edf62d2c868d015adea3e697066109d7ef8eeebb02d4ba04a3556341e6b2877b8f18086b52e4caa5a7c3b1a1bc0e13d46ee78a87317b48e75b1ba0e49a0995e1257c7a37e31bcae94a0472f949dfe25ba8317785ffe6e52cd195402b8d03f982a3a3ecb14bf5186869ae102bc80c27b2b7227bae75a48103a4282018e4028860a9d0f840f3be54b682a67bbab0c1a6f25cde7954106f253c5a26e65d3cbebb1446e075609e748a1d87281efe5a3db795bec00c0d0225484b52ae46527b010de2d165a935608af9aea1ef5afcc13c5e9d0875291e871557463d361707a3369baa2aa2f4032499f8739879521544f482a7d5bd0d473298f24587d8453b7a60fdf00c092f87818783e073e41fa136687c85a70c3cb235818171d08e1f7c2b5d3f7ce7b46d23587b0cdc6e0c11981c06ea1fc4a20e8eb6fa2a945c0d3245a9a21360fb4e9275d11e3ef1e28da7eca8c419f9453d06fd39bb5f426213fe47909df7a82b1190f0b51dda427bcf39eefee73918721320708c8df87d3958fd08c7bbeba2f8ae4603cfd6935ce1b7c18a9010e234006736823b837fae44a848b29485d79c88a880f1dc168bed12b09844a0ccf7d8b1124b88de288e0bca8c6efd5d02b0c852d0d668f019620535d3a5bfa87e80db55760c206f163168d44485c6a611429a410dab99b62d1752d8540433674562d333aae380d0abe0c29731d7c7e7a0dcb98d4cd27856e28961e01ad94fdf4753f211242b02aa1733a8f8255ca7aa0b5a926c157f3535801c0f8955559858f57265731812a1559d93dc678bdd76459e0a7650a13b9427dbeec95b847e998693a1d414369470ca4e111141439e650fa689868b7c525f57b9a07b0e5b32903d70dad878f996aff6c7c1929c3d78c3ce67489acef24a52227539dd5744f1462424a0611821114c38cefa4c72901a00bddd7d02730e34756a0ed3128a4feaf37e9bbc6703446ade058cbc3618da6ea6f73e5bec7b23840878d4b8fc7cfc620d1bc3e65c0e1e8fbd2b3f078caa165e121f29b02b5972dcae2e873164c9460b20122725c2a9d3bdd9c59d8832b29dbb87f4be823ad31c0bcfee18395b2562ee0a5a39c7a64510acfc8555b6383493d4b9f8ad6a909915698f52a659b80d3c9ec8e82b7f35b8e707697ebc4fb68e6e489f793b7c403d50df148fff9117af9cb365efed098ea7e2e5e3a560e02437196e9b26e58dfb99a2e3771cf8addc25bf6cb42459c67a66e6daaa1c8f495786d166cf23bb77b0eb6fa5063b9baf973e8649cecb2367a3a09cdb324a363857943a74ec9a735232ba23da71025279e23851d2730c7f0a3695a2b87ef0898fd292259f03b2aaa92cab481c352466966e902bd575a83ee263efd4f199c1ea64d1743da3ba1f93bb23dcd4afcbe24f0eac366d3774b33595d4f66ffe6d6beee6b7f839b45db8a55d9eab6ea0703ac2aa61b26702d865cf07b590763c61eb9103cd47f429a3167654fda2bd7d5743fc4d5d4404a1e537993440a3d6209abb76a6cd2c25ca514cf2d620a55e1199a74980018d49957f2fe1147a50054262b74af08e0e65ef1a92b70a26eb5ad2ffa0eda39269c73021e3c0353186ac812e4cbe24ef25cce85bd34e9c5b0efc493fb2994258986feca93d4360c29524de17384ac1822be64281c3ad7ba7fd4a12505c309605c4b5762ecbc6a7d1e7883f7dd9d2bb3fe8b8b5c14a88d2d3aa904648a147463a0cc5e560afe32161524d845428779e5807d4a98389027a2979ac3f1f7c15b081d8a178b0df2a12612c6a646fdbc2e84acfde098e041c9df56c78a74d570dcfad2ec3a4a883f6bbe2af51c81b0aaf4f821d5a258caae6cd64ef0c041a109911cf3465c08565abb8b8d27382e0b42feee4ea7ec7a061184594c89304030866208a34a000792a66459a1ad88e9b7d40250f1fbe30ae56cfb41dcc7f86f35682a4e9d8fca836a9cfee623a1f1d966cc199fe661a5b2c9b18aaea7159ba9f86064d275a84e7fe7feaad4fdafc86be2fd1276545150b87ca956324097f22081164593f5c754715821a8090ee5c5c363bfbfcf6672078477438c3bffd47a03772cf603443cb2208850af4dd06b458d0f9357c405cb4b560a6d33a0a77a905e2bac0a24610621452383f01165106644144c0da854d001234a79e3e6d6a650aa232d13a3222ae782fead859eb24aa22c0db3d1861eac866e52a21b768028601595a6209c578ef3b4801f9aaece43244f58cc539977bd8f71695c20544e62bfcc51a5e56e4c71d7779e114d4cffb257e6f9c5026098c78b23a68a75a8aa12136eaa188f135572029e8aea244de5237600cb85901c477c826cc55c9135a3e735d091cf531add507165c58b17dd9fcc3c1bd3fa6fbc054348ca5ebcfed2f7af3f1e209429da7731e169321888374e23c6327e8995129e98376b8ae9e2ac98d6881643e957846bea6cf7d2ecb972c39bdb3a98c6afe5427e70f7a5fc4861d48d671d961e21445f6ce45b64834d1b510906388671540c998d2dfcc6accc6e4d309b8ad7ff775d00be77709a07e06470a96630b387a9486626b3bef45d8bacb1b3f8e0b2df4487b6df1df828bce6fd17ef82859dacf42bf69c76d6e3bc63f432b21e696b6264b6a8acc4c6f14a0def75cfc2057f21867f3ae18f86920413ff140c62122739be9cfcb3a6c8b3228a4c6210978a4ac99c80d25fb7c843a69f00fbe88185242fda1a175234ad6b24eb2873166224849363516b7911c2098a2afa0810ed24ed27215886b7d83128a98526e756cee491936c43c5c4b38264b9f713cacdc84a32b7d077f7144aa496fcef9b417e29b29fa4041e0a599bfee344baee935c57091fe517782ec1e4b0ac9a92e937dd27f40243b9adf4941e6016c359caa4f9d94b9c1305cd0f1356c6155a53de0f111a0a1e2bc5e1a0eccdc0a66b74a09bf31529c237c3e77fbfa4461381fefd2fb9282a2ac0c018a9b08536e85b8c070b21a2982653919ece341099d2f33b47d18802e3665e6f08d8a17e36199099bb31dfb82886160e8baa77ffdab2d3b9036fd18a4255ba706b3d46a3108314b1f468939560e4720c957c1afc995932bac77b5db7622bd5d0d54991a19df281028d1835e756295a14496761136b18b147b8a4ec9119cb1e8924003eda88b81f13d3f88d224922e16c2cc42f0980c6c4c9133571bb208d6c2d13964ca46e76502a626e3a089b32843d980dd8c372d1f7f19483dadf01742eace9fcd183c21af755f174b7a52c8ccf5a424c2d602183cc9c48baea3d63990328ba9e9a1f50254aefa093334f07fa3928e32ad0c9fb5b9bb83af31861c29b20c1335eea2321210d8260bbf69919f99661e49809f36596f72527e5b5abeb19dc47c8024ba25a50388a0b340977c128d6c3c817409de217f8ffbb1b2b19f8f90dbf5728187599e1138996054af99686b92a9151827ded7c4118317f8ea948cce8bdd186872550cfa5383549a0e5f333be428a28e424c8b73dfbe50a20c2c612f16a10e3b61fcd5b012b66d6ae46fa29000245d357b30352e469c4ab013d7f50ae09b28c5668611544dbe016817520ba497730794b5d2d221580f347b5894175e11b46500489100c61f8a155e196d37b63f0a421f082c5c6cce44b9267c8ed5599bf50082289957a4c37fedd87814c72559521d309f569ce3cb416f785890aee6826d5583baa4290a8a061bca81f9e18be205aa5fbc30ada591106584f940d2c26bab64047b9b6df8ad1ba969804cf6efd38544b1cc8a61c972556ec11560127b2955a92b9b1b2ff740b0eed8f6598ed4d16d99e96d504e43076b52e90155815b3cc9c481bfe8252caf882af526adaa14e06515d60a34aa08bb59a7d185f22caafbda190090801c4088e9042fd2783e34967162afa614579702e06f2329002db756c31a75827224ff0cd05ad858ff6c0f8aeaee39e6b9dae75509e2d156c54ce09b77fd4a8836e6f6745030d277170469ae1f6508388d301554d56345128d36a61c4a6c81e9b0275800de30705c63d07799d6e91f7380c816e83cda2dacb7d7c9ff709a822a234b6c35b9c5b1a04919be37e31f11089c52cb708f2e8ba3526413466358c0ab34ec7efce588ac154b560a89da766f65d23ddf28710a34140943cd2e5ca46b955cce2fced06c3dd480da279d92f25222cf0fe7c68ab85bfe2248221ba4881223e43c0ad0f127e2ad0f1847dc097e16de66f118c0e9eb2b1cf6018ee8ccbafcd45164199685c73dd214fba8179f8414f40bb788c8433290a8e06ca0095670f7e32e4aa39a09b7c46bcaea09624df6309ce6103060d870ffa3ee7e79a69700411234085fdda2b73541748efb84d031f45a0192a469250432299de9db5f74c6aff06602759b6c182b3a483c50966f29981d474ce842efc2642d0187463698e5de5b435e89940151f2ae042bb8d02e8d11da12156d533945f18f859325a083727e2c8942f1416b48389ee4eaec6c93dbc4cee10b0996f42c9e192380ba6ca9f9923730a135ad4f61c3be1e42103bbb6858f91fbf26cb67ec69d9fdea5b3cff49ce3216b66b5c500a376ecf7bda06cfa3d8aca5a39279dd002f23b7105cf7ca13907c893cb4b7a9f514c58b2b11257d06840c9b91d329e43664683e8dd86019a7e6a94812d83fba878a86de648850a4867afd6d30168a0532ea7022996e50eb1f7ffa52ffa9239405f195681f75a0ad798e5d46af1bd82891b498ed736f5024516f64301b218c1ffd9f13e8eae41c2583cf98cd53f8990f138005d133b77a66218699517e359a1e1a6f8cb157b72b8ccd078b357c892c122463f7b404d0fa634aaf7ae5a0174cf9324c73d6d9ee83fc62faee041361136bf22959a4ea14710667acd8d99b17fce732ca2406b1e44c0ca5ed28a947d7dce5ec1f949ce107fab84868b5840828064b99e2bf24d26a4334188f8603f4826540fc28f6e44e01cc4e1352224410da3b70af91d5584d1f5d8b61d45113b0a5b580d3a360f4d2e685e10a13ed7afd800588284b1d406a04e5aa1d461d0ea81566fb89256e2d1ecc7557695b0cab90ceecac6c3e168f87cb25dd15c896e8ea5c5a2e32c5ed7041d6f4c4476b50474574a407791047ca5a3cc6fb6616f9c1b1247693451f98f6081bb4ad7ac16bcd89c97a61cce01d2c5cfac00740f42e6ca4bb624dc099c10ea7ca608ed890af2fe0d2f019d286bd502b4270815d7379860815f8b1378c26c252fcefc506fe71d5f99aab7f3c25e3998b7f34eaf4c793b5f0ee7080ab5ef04489fbd36a915a9422a8ef20e242f5d1ed9be3eef62f06f444557d58223ddd4d4bcc0d6199e66ada3e8daf9e8d8bbb6d3897d302a6d3a69afc8fe4d99397380d2922fbf5651b5e039774ab6fa27aca885faceb1a55754375af706b44e15b9e9fd896af73fe319fc63556a6fcbf3cd10eed733062e43e3f539c06c22ddcd1ab9deb645da4d22576e68a3dcb635a936f2872456d8382f60203e59dde9b48e9a8aefdb6d42e15265febd82393c680785a534431eafc3b2ec5de4acc789f85b395428efc97311552726d9dc0f0f0533675f9924d7691ea6e1b9dcb410fe92a2e8db8983833927173c27d2c1b336e2947fc8147b2b8fa6592d874b7c6975d88eb48389a63d64d9512411f7df45aa8ef8d34e472113394444510a9e931e82a8882abef95b179243ddb8cdad5c6dd2c0923e0dac6c5d9efb394d66042a70504a66d41398f874ce4af8bfd82a8ec49709c99bc1f53216c372ed3ececeab6d6f32b00122966be2e3115b1793c71b9ddad14e038b72af2ba4b6c903c99451030947f4023f403e991736c9033eb385ed94a157372c1a3af2a2cb177f34deda91ae1ab524c0c47d3bb87e22cc1994c29f14ac0e6de0bac104ab3719ccbcf260e11d09d34912e0ae8126374650bb2fa3c4cdcd3fc9e788e0330ad15f62d3eb185e48adff71beb9bc28defd29a0a0ac5c5a4ab43b72828bf4a5fa1805aa2ad79cda7381a91d1794da9f9421f70c66e6380465b2af6146b3089d33544c05ead5de0d514e5d5fb1831ab78f30649a438a6a08fc6c27aea81533f4de46237a8f7b64a859887c2a7bbd1502804f2318072ef88ac525615f91cf06cfdf6b36d0d34a70564a7659451061aa9865950aae695021e1773624490039f312ee8fe91b434fba38cfacdc0e09f36f61cc441beae399435d0aa6e78cc4bdb6480608957597819e029622cd9cdcf4d529711c544817376941df57bdd4db44cae3f0c0b7f80320d720f7d85945910c6030a169aae9f90204cf6a8644983f9644e10f305b3996cbeb1e89840655a8c33ccb491092f009bba4fdff85e0de78c16c3cddac88fd3b179deb4b51bfc14010551dfeb1f1716e9dd18ef790fa8e1c771b14101bf2b39fea98d63151d05d85542897f13437a75ac8cf80f21cb3946986394005f069c9289b748227dc1903d1ea03c70874007ebd0deccf9481c14117881dad4d0580c1064c8378ab22a5658116f7d59720a7e5348845a2eb72786f912c42c67f54814be72b2cd3c51058f567b135b2af70be79d15f543000e5fe735a7fb43030001096fa66cd5d950a43ee3c5aa04f07b14c1939a526e818bc8abf574edc595c716034e1aa27065b9b42fd78fa32c64f15f5d03e1d414efd852c0f0c33052cc9017a0b89365e801211b10ea8bee70d8a94aacf8ae8ee4e1ab252b4aebba4e42ff3799e001077a83de30a04f416639d2c5a413367dca04094a5aa11466f29b7fb1c06c5bb4f5f025706ea503d0943b8aab0f78db124b54835701bc5c02fb7513699a494014903490362037ff9a992b02fa24057129a0cf777dc7eb33077d4b2df32992c53f77661ba31dbe2e82fee877d11988eb13386d8bef16e7f7143b00e28e812bbf7de6bebbd321fd98dd716ef77ff7ddd98f768ed14465b49841849159e1747ec1bbb116f11232ce4f98e5102b59288000ca2ddf19b672c094916ddf724d9bdc655ae0439dadde96c184c37fa1631b218c5b184c58fe377ff4f8ebf7108a87b24f5dbdd7d646754117e0a23c6ef10418608498eb15a15cacb194b58747fe20a228820429cdfba311489445b2412eded62ba11138944e077bfd9809f01372009d28d38d375a3dddf582f4df71d69b7d6546ede54794f9b8a303ff94a02d85af1dc4abb7a60b01b0dc3842ad2a0ed5b1c622b8f96004ecff3bc8df7791ef8f6451abacdd78d9beffbbeeffb3ecff33ccff3369b71fbcff33ccff3bccd88f9cff33ccff3bccdc8fde7799ee779de66ccfce7799ee779de66d4fce7799ee779de66d4ff799ee7799e0792dfe891dda8ed28f88007a04b088890c30e7c40b9a0e4c4070cf8aea80f17d89c5d511f549820a28828228a8822a28828228a8822a28828228a88d203f1443c114ff0756c658c0676658cb1851d3b76c78e2f76c78ead630739895d1f104d4413d14434114d4413d14434114d4413d164b5aa2aa209564deea697fc4c31a9a42b173dc84903409de9006e3e534c2ae8c9344dd334cdf33ccff33c2190d6f4964eb754a6699aa6699ee7799ee7a9324f930a7a42d994699aa6699a366553299b32324dd3344d73059282549f0a51fa743a9daaca3d6198d6e18340445397d8b50078d9fc371ff1fd0b0281808c5c171cc3b4f6125814ebfd10b3602b09ab85121d43f58f7defc8258a40831837e286be7f2dc702b6c98b1bc92a5692ec6b3521bbd8c5d86575a1f81e78f3101da3319c65d8414a38f7b594315105e3d16a8bb92a091b97c70df96b80fc5f57a8dbef88b12a36e1856b47a5c8047df106b17ad0c40f683f85f245dafed6d18e0ee8d235451b74e9a88996989842d7c7f5de6b3da3a5ecbd4ae8810225b6d9a59e00b6ab0e9d1446881d2242707036e0e775fa12c1e7755a93e1309b966157b6300d1e34190eb36919cec0952dfc43490d569f5271006b30141f941521dd98050a43051b7f00404014c6686750bbd4ef3d60ec3588b97b03b6add60a0a2693c9945de414b7322aab6474dfaf79259bb295e7c52385253af38abc22d7905dec9c6bc836e4157925a7e4151f9325e268a2344dd3344df39971c82af99457724a5e91cf7c86962805ccc599a8a10ff42e9b3b285005aad2344dd3344dd3344dd37cba8865029df9747c793ef399cf7ce6339ff9bca8c78647e59607c9b3f210798c3c4a3c693e3f387c583029f3b4785a3c303c36b6a7e58678ef81e1f1c1d3e251e251795a3a284cc2240e91069dcf7ca6699aa6699aad4c2693c904aa36251bd186b44101a6600d50c5a19e94c7b3baee31f228f1a83c2d9e5467a29ed4e7fce0f051f99c3e2b9f94cf8a8fca456ca863a393bea8f3828d6527d561b9a0db41852617b1a10e0ac3b40ec3ffc7e4947d4dd4503ef39966ab2bd561c8c956d98ae4f25b8e39349b30ad39c8320cff03551ccaa196c87a675aa00ad33a0cff412011a8ea4cffe84c8c8a5c768c91a00a7b522e82d1abc390c49e14a8f2a44095382289237144964f1247a1c93fa78b6012a67518fe8340d9189afc6309baf4a452ef49ed16b2efa05cc4519893a5d6982cc3f01f04eaa0c4917fd86c5f3b6f0b7f5cf8d6ac979f8fcadebefca0e5e7b47df959f99c1f93c5d8f6a45c380181bf46b0634305e659c0188b1bb1de6f355b395feb19cb603f123ba80eaab343c708df6141b141980eaa7c8f2cb10eea737ecebac23566fbda795b78f4a1cc971f175b7ff97ef7a7868f0d9600dfdf07096b01f4e73440f959d99f94cfb9afdd9f1537c4fb8b6d70cc2a09cdaaf09ed4c44afa0c5353aa624a612a9d862f02894e2c459b4295176df4a2fb3e265d4cdaf71d75513b6455b0a18203965d778c2d2b632be7ebc2b0ecc2b24cd3b60da36d180cc765321a2ea3d168dd759eee3ceffb4070b3e17070846188102236186ce43c070706f3c0c610185649d0a0b1169ee41f1886611f9a442c53805f644983be756771b4ef93fce386a61169df0f4d7585d12785492eeb9a690c965dd124882c8d5dd124a45ba9f493f7757bbf3957a28550a4211cfde41ff64515bad454254d5557e8debee6525748e1ed6b3f580270bc7dadc60df9defe26729112169d106f7f1bb9088b118f012cc421dd904d8acdbc21e0dbd75217114574bcc6e1db0f47cc3f6cf7dd08aab017998deb85ff56b76cdbfcda6dcb32f7c71ce7a9751075d8154575d07e9160fb0b0299081dc3ee86c90e20742986a18f54d2926cdc8191d9ea18b1ef80faf72b499273e8006204ff7d8d4b00266d107b73f7bf306012bf39049b0d626f1aebd3149360cb8d5cec7223ae71fe4d635924dbe24672c6fa9cc90e17fcef2f00fb92189cac1f0346fae3b748158ec791baad8b1c714367d2ba206bc286ee357143d7dd84872ec61887ae655996151a73ce39e790355ed7755dd715ba6eba994addf39e696a325991155594145de88c338185ee6f9a8a4b5a98458e64926457ceea48407eebed26d99563219375b3988bc71ac2985423b668d1e2c2b4d0db4d6bcb0e2fa8022143c60cd6daeb2a268cb19565a0649caeebc23219a90c95a6691b66c6688688e3b84c66c68c940d874d7c81b5324ebc438d193084b0892d7049e1e2019719760bb65bad55915427acb5f7a2334aae2a552fc226ae40f5427542a9545433d8e1059dc864c83206d4c0e4860e2728d016a18c879dc1b8b4cdac66df6698cdb22ccbb26f5774460eaa16c020460d13c458020862a44388e10415316c902006104788b152890185182fa80c0e6c6e575486e893daf7fd74939b4e4a5d54758c2d2be7cbcaf9ba30ecc2b02cd3b40d9369dab66130dc86c1705ce6acaa8aaa60b83425f2e84ce83d6f29bda454859a50269b624b56b4b2d7b1a5c160d85733dba10b035c3b6f0bfbd677872dc21b2c01fcef87a6d014b2ec50250b4da18b1b7261bf309b96751f462499a821f0054cdde236e646b419711bd20605b80a4d9d0b445267762b1d87822ab006580374015f3658e386780fba803f80353628c014acc1a15ea8c2c178680255a02a5b752bba925bb943bb94ce943b95ce4577822aae857bc96777d29d7426dd8add9ddc10ef3b936e04dd49e7a22b7527397f21064c71677a3ecff3ecccceecccceecccceeccccbb17027b7b81597e2545ccad5e0509da9a5d0567c4e6e855be174c0b16c6ee58678cfe980db01b7c2a15c0deec4ade49c73ce9f13ec4a1ccab570292ee56a70276e8513813151431cea229e148843fdc37128877228877228875e0d8526722bd54e8da499a956d24eb41187661c324b9abd642fd90d0dc5ce5e6e88f7d98d0c0ad98b76a289b29734dd642b2d8546d24ada8926ca5eb255b64ad3344dd354c470a77d4dd4d0e7fc9cd90a94add2344dd3d4d39cb355b6ca56d92a5b65ab6c754d01bb7e7511ebc30f2f15b96efb22b55c1066cca1bbbbb65376e9290c463a6a83d62ec2658ec276769576493c6320365cdf5a6b6db5d6566bfdb15fe213ee0dfdaa2b78dc1cb67a512944a02205fa8b010ab4dec1097e3082e9879406344e208186c9d62b3ae0346e90e16a1a39386169a0252094061168acecf2417a7010901d76f095afdcdd1dbfbbfbe5c1c3c3dd8a40b87884473cc840d7a0f5aea84b8b8b0bcce5052e2fb0cb0a0eb4cb0c2740efe1a242754206ab2a8d5c44bbd47f826518967900c358c0011ef80045097a10c2583686852d282c9a853eed0bf40cfada159df172036d037d997ea083a04df40af48c140dcc6801831cd8ab19b1fe3ad93182df3ec946807f7d3b03a75abf44932e2f5434692ca241713feefbd56c9a91872a3dd4b5628de8755b2debba36a919d94033b222fec24f1724b2a02bd7e97a8131a764adb4ec9c5bc8d855ad940b3624ca40677f65648a9dff4291359bb57bb3e6ee59c318e3ac5996655959cb39e79cb37695dc54a572ca3d57a98ac91a59d169e7bf381107396bbf69ae42233b1290fdf523d985daf9affc24fb00f722f1c87aaf1bbf8047f65ebb89b76aad65fc99cc39e7edeab0a11f8047db01f92bb0c21c068f5c04e47080258df92806413b66fcc0918b5ccd7390a3cd2141b0b473876b6387ffe6495e443654398e158773fe009763fc5a3ed50569501a1eb9c8adfea13f864f93e27c302a08749ff3dbc564cec407a37edcd7ec503fee733487f3fe7bce6f1626e346dcd01cffb5b08c7c1ca486c3f98f436adc840d6d326f398ed5d8e102fecd2f00ff465bc0e637d202db6fb69506e55f6ad4c6ea1fe00cb47fb9ad368fff43b9c8c696e1b62bffb8dd6b4e2e827291edafee204b6c6b2d822c5db5cbed5ae50f419658cecf4196617e0eb9dae4f25395b6dc5615586debbb725b6d4f77b97de9be9fe158ed1b5e2254f50f6d2c5fc0a3ed2edc10261d35e284f6bfc87a4372ad781462e1255c146530dc4b0383cd069aa57cc12d39b27bb35b6cb1e1addaebb88a98ebebd7ec2a4c6f6cacd64f1597b070cc5b6309063ec4627b1638e52b5fa1fb3eea27b7a40d5dd9b2175bc7999202dbc98de47e1961c3e20dda5fbc41a35ce486f055ea9041e3bf4a99bce4551a3b36a0ef3bd6d2abb2951871438b3a9410894ca69494a824d22fc790a91100000050006317000028140c0a44519885388e04827c1400095482426a6a38134d4471398c433186c418220418600c200400cccc0c910902919c1103bf40d0a12b72231362628c88420e07be6394428bdcec76158e1eb20c8b3c85649c37600d5403999316df13106f3719e503945c14072a79aa864c8a5ed70b4ae9e74c125f9a1e03e7a75b2b2c833b987ddd6f534aae089ec40930cafa62f5cbbcb0887a5ea8bd4411e2f8c0653f06592e29d40e315d22498fc186e4852830488e5fc9e9ed08d661f638d1f230a7c63413ac45c82ee43790f7a008ab22990ecef63be756104db94c971b1f8cd2bbd36109d1367250e1d2275cdfc7753394743c4430ab6549aa4111f43d2ce0803fafb27709692ec1d3bda9b3e385e062f765068cbd35bbc58dfac10652110cbb9e2caa6ece72ade85720860ad45422e1212216cba2ef0b286326f604af0717fc3e5cdd6f186b91a26cd339d690533b27af8d8ac4e3022ead05976b6ca0217d7b703d7f883873c95821f4204572d8d856b985039a0412151ff815e7678cdea1a438974b092609b6aa6a722446b10aaaf19e4c6a52d5c587d6240f0de50148888e0cea47f982a704460f4bce7304ec6579c9c1ff136d973233c4533239e889a5b31e04700b2469c0d8af1cda264c2ba4c13ccfdbdb3ae85ca6b71e1e314ed5f3def7d26f59e900f5dfd52a6635977ee3268db84ab26b66296662543333c29e140096615443cc71e20aba947483a7fda419a39f4f76b91d9239ead9a3a16de772e5ca88f89e3ad483e8b500330f94d8d27e5193730d64308d9fb5053e761b466b21207a8ed4d6a16a88fc4ba2fb94ca904695eefedb982ded61e2db8be0353e0014145f70fd7d0e319d3344515fb75e5698f1e1d60d6e6882ebad5227a271f7b4fb0dc79db5f86b74e4f14635536864c9c3a46b73a30e8a574d4e16ce65ebc5f6c741a953ef82cb9dc07fa7d677ca3b12ccee7ac11d70fb0911ddeb05aa462e1debf637913267e2d49b476dc35eda3747e6d9595aef602b843f72449cdc2ae0a56e0cd85efa9a8cac959c5ee75eee0f7da03dbb8459fd1b8569d59b8de01ed6f68834aea2285d10acf0d300c36feb716f7cdaeafcb3dbd07fe6fb116077b702d519f72d9a7dc407bf232e4f5a39096597441800eeafcde8453fea85ec6ea36372408a809eb4d64dd2d8d48434cd79c5e6bc41c153c17320d5d2dc3480e47c83747607b598d17e1ccb5869c3a254520d12b0d60068341b4400fc3703fc49f5ab49581ff248fa492d2f7e297976a908acd85b9f292da67776c32160c78aed53581cfa8e36e6d969d346c08aedcf2f655f4c2e695831be9401001b924c5a436435b45915f556d7ec1f0f9f12ddfc0a937ca037667bbc96f02112279eceb37aa2df71218d8c7e6e4ea34281ef24b2e0b41b060e7a3602918d3ae53461d1b335aa558dd2e26c7f56b126ba867d2300459836aa7e60317e1aa04a2d3e67e596c322305ebd163066b6c59d277eb63a7023d8602de81eccf91577d0c1c8e7fa55561e2b1239daf424adef0743da9c1d0e117658a923da62085c2c052823af76e5b0eb2068f96ddf8264235d3018293068663a40361256c976c7a2cba100ddf2dc60cf4b04f3c8849ff52c24d23d6f5adc79bd26d51de2897ea30453194fd6149c22d1436cc8509c4a22b54d26d818560b1321906a77db7e583b93b8c8e7a35ad10217239b04d37c912f47b5a2002e402619d248214abe1a7556e89b803cb2e44936392dd7c9a84d3ebf84c8264f8614c9a03ee533161569e19778469518eff424bbec91fe04396cd0421b5325caaba019e46e26845281a2fef431b6890026d837d19bb756c082a83d16475ade722a9d92c6ed49a32f6a89b18eb5c6cfe98124eaf17db09d72882f73d5f0908c3a2e7b289faeb38e6a67274c6b8d7f21bac674d428fb75d020f4f1a23c1970ee2253a552de6c3bb1e1887d0b3c7b8f6030cb1abdf3c60e5f4a0154294228318eae9c1e209fe9c84887e871938481f2d91149c16813a8c2d4aaaf9c4b6f22363fb3f0d619b38f6c13e32450a3221413eb4440500eb4e59bd3c462003ebe991d7252146975572aa17b5b1d93fc8e4ea63309808691a901bc8cb2087ee7bccfac9aebbcc653ad15d1b8d82b06b392994b138d8c3f681c053f4b7ed4aceae9bf80408c0f97fcbba7ef31b5e008a88fc3b7b1d7cabceb1449c8923010c63cede7fa8bbb20946629303aaf01cea64b4f363f195330cb5f57cf1e039df23d6731008c9007828e4ed8cc2aeb811c95f01656d9c8a66e23a14787c7a0f440a529afa1369756eb33b5114c36d4208ebc867260def48394efccdb1709034de4c41f1f9c016b6d108e85561712c5aa8348e3dccde12936747da8b47ce3b91a1a86b941cda95db949453382cfc4ec8217703ced06d7d26445d2f9fd6b6d2480a767502256c1c7fe7a410d6be8bfe0737bec7997886608fc0e134b8113a7b63a540d52285d4821d4ffc253ee711a3f2528b97010c93e9010ff4c1a580dc22152b332f28959bfd2392c1c503f972eeae079303a742036bdb8962df60541aa394398432f4ad10932c400f3ffc7a54e89b47740c2a18034d396175bc75a53d045558c279375e6bcbb88a9bf4d95cbeba85f1690112f11dfe7cf25fe71e157b97a40f58b4e26f854f3625728cab52b2225dc25e209b3bc8f82b88ed4a52d8d44b6e6fa40b2d5c55d66c91ffc3132063196c44644f3b74b778e08163d1cf2cecca4a43eacef9176eb478694f8aba419bf924ec3583b5c8d03cf670043ff8d4ef674c0e0ac2d702d6b38acf18e5a81b752cd954e0c907aaa8c9b2f729d9a763c74b9240c460ca401b8fb3cbb388cf6771c5014cd0068fb4fe776822a0b19fd3fbb8fc2b45f39ca8718841ad2190cc4614d050d394d4fd4212583cd8363edc09f6dc6323e69e09064b312e3e434e4e6835f6896e379e91c6f6daa17c5e0eb63f4f6d015e8783080a111a78b2313e5660aad138419df54f6e77709a3622caa987cda8e30ae807ab3ff5489d2660e4f6f02099f55d6e140793f0c1f146215356fdd92c6dc79ed11708a8c76cd6aa468c7d4ea2603af0542ef9f5d762132b86975f11cf6f8254bed96812282105eeaeb6e852e98a0b81b4d1cb1a57672f9933849758b12b4c8422be3c0de9f0efebc47a5cc4d2236e335be99a80422efced1cd66e12c4eba521d9a91b5ed94ffe014f4fa0241b1d5b657e65e95c42e0b9a853a5f54de691fe363d85aa96eeea85ded1543cbc0a392daa0fff4782619ca7a1eec7807b9e1c63378752defd9085825a45ebb9dec3a332527ed3818037dd3e18197d5ad9efe304a47ffb017310ad0ee6f0ca15feab5adc60ba39aa6e08a08d0a6497833219b9bd6dc1c180c9bbb6af630d6b94e343eba719379dab1220ce88964211fa232210bc7e64a928af9f9662a92d918760f60e61ea28bf71025e384a62029942356d56c6c4035b83ba353ba53b007e17a9f5a19f2a30ed55bdab0aea864e0acad6c46621a7712870edd0043c6c7e4b2fddf70e6d81de9d4d548705e2ff1196e453b80fd79cdffc81c3eabe324454efd3974a71e159c520b53840010b06a9276400cc7acbeea516731ce4ec7c8440681a2f5df222932f9c61811596455075f480a090bb413c521936ca242c871edc0a593f34292e753019b1e7c09c6a2685956909484c5575311fa06db4fae0e9ebd4c14f7c0228e13262ff9b90805e651010d819ad7f8311a6e40c7b0942f36bbec0affa3fb9669a2af6ecd49363ead09f1a1b3826020337578c962c80e934aab906bdd74d12aacd89646677a4838605bd51e6f9b52a0752c56b854610be6283a00106940abdd9de3089de7047949469bfb7ab94d5782f659e17eb995706839827450b20a2f055bdf4570e7ac3b32f15555b183b3f2cd96acc054450d62563b6488f74245bcddb36bf31d3495c7896cd4526785079d15468d91487588aed8908db13ad924a73ff216f164615678a5357ebc12bc34be93e7ca88e2b9c77f2937d27c0dbbe39deeacab8196fa95d21db94310346c57505d394da9d607b06d2222edfb04b4cde1ef621313b2dd1b33b0f8d9ef9cd5e50965fa3d712cde2841cb78c4eb811a05b8d57e1dcf42bad02b604c645057f8d63f139b8a64f46c81a554df87d1130af26da85b9b4284d183c321b60ba382ca92b7659f4fbd32eeb7911cf387d213b82950c994bddc9b42d101c346f6c039afb6bc476158d7c1d0703566d2825ecccec71812a15c33fe47a2034e229259382e75d9f69d1c453d5fe6f8f5a154871730c49cc719a770f2f0cef222fbe507a9e9e6ce9ed973d37b0081e403beca82a756953a35a5eaed56d437634c56d4ddefe350f2eaeacefb575435bf2b56096052f7097637926e6058616fe028e70d89c11b2a4eff4062807f7af2801cbc85fc74946395c778a429714820d7f303fa272f3eb41e29ca819a730e1e38778388c27473df01f4b886b25393527aeb1eb772f03360dad3e379c5fb84767b7ec3f7db895b0e72cfdae78d7126bae225185cb037131bf39cefb3ef9d89e1100c980ae6c35f2f151c3fe0472a2bd05924c44a6860bec559dadbefe55fd82ef65538b4906fe46c83be1d1cf8aa062c7dbb65fdb3afc2358f447b055672b991a7f3c2350a1de0fb07103fe31560c9ef569ea6fa040681245a2af0a5b7db65ba2e3dbca79e9d8d5f1b243352012e7def82b01bd59f3737a328fdfcf352a5ad323d70658eae001c134f6b7f536d3961567c7506390b1b20a7938754ae6579c5d522bd672de0d41188ebcfdf7bac1bb59f649d932549a5e2f54662a4576b55fdd7416c8eb5c643481fda9b757256096bffbccccce5b6b208c2f055676a3cb1f2ed3f52eff948233031c108fc448056885bf1b4386e8d8d465b686ba16288b7d580a57d5eae6886969024b27423460c4f9fd2ef94c6f17584bddc628bd689d685679b04f4a6f0a4a4c6a08afa1bea8a3ead8f5834d229103cfd4d32a06c3b9daef7d99517077509ec2d975217438987c4694247e1a9336e5b16cab2a21dd4c1cd289b967e1dab063e4c163dde0d15ae82e58039088e9e0115a2b4c3421e7ab734550dc51eab54acb73cfcb779ea04c289050d9816dd4a07d70cae326c94d1a94ce41fdc471f421df013c2f1cf512a27c6cd82593e0d9703e7680a5ec37db067267030d1dde8b77bf188864203bf6ce3e1018c8f2082bf8b5db5df3f43eb7df38f60cf782697b520389543b6794d189a1945c1e971004d8e2eab3d48cd419d1024703cb902bc442396830c28d69e04dde4c1a6e8ecf925e385e68969d5bc50977473f0e9304bd5d1a031e9d56c2963226742f12a873ef39a3073642c21a990d5f364c3d958b25dfb0c275d3b23573fa8a720a9206038f87c23febc7f5e34cc9053fb4c5a769b2ff8191e94095e8d4e3192771b055e6f3d006dd375f54b37ab01e69d714ad4481b83238779ee6292295c1c78984d5f7fe4fc8e7d8b91d662bf0b170d5a1f43d92790830deee6be57cc76bf8b6dbc838619ab6380059c4fbabf7ad5cfc0566c9cdaeae071f4a53eeaf12953955590d03cb27209efdf42fda66929098a0a1472120d04cd339e65e7cb8f3b22be9377e6e5aa747f9f7c08d8e599fbffcb4e0ba58400612405455c3869e3bfb8ce8d1a2543ba34cd2736c4dba1da59e3f360630eaabcd694b7e6e80a357b7dcff18ca909bd040062bd1b4c692685b56ba552ba330b509deeffc273c75b8a7f1176e428ce9e5e8b7f112054a559b43acdd647688ea6f07c6af99d734f4e7dc9bd99b75348fbf689491d7315b2fd7c50aabf1a9157b2b562499b87b927e4ec85a3d46744415dc5d9537d9790071b2f6ec41e8c021832bc4342e62c9fa4f2d99a08097d0a2b8bac83c7ce7b3fa2d76cdd452284646a932b687e4ced264a8fe34a05da65063d99be1902cb7a0d36792263fbafb0d06c88a00829b5520fa8f35ee5e2ba135122f23b9402cbfb443c82d892224117e61aee5dd07745a19e8436c80cebe6e99f88678f36c1655e8b4e84e862c0956a3817e04205c2594dac5c210409d287f043b7409f709192480e589c08eb2d48da62971545d4e372d501cda3fb60bd2261d61d41388bd3f9abae2a81b5b9d4b29059c5f32699a8a923e924ad0e4cb2cff35004deee0a8db20418396112862e9127603e0d1f5d71b564155911e8d395df40374a49e5b73351a328bb6447fc4a8c20de92a822ec786c43238812981d595948e75000d87173844318ea7b3baa6130a64f1a5629ec07a66b581db0c10266fcb1638dcb3ea5fc10d9841fa7004b861d656d30b2a1ad8b1cfa8781e7765c41dbc99ecfb37ba51405584f700d465a88c8a46b4cff0cdb2ba9bce346c919ed94bbda6871557fac406847efb28bd6ea44548491bf26c27c9e7c8e7dc30b73b1c259fbc564507a22f9c800021fe091314846921394d45b852f4b5437058dc51de6cd1b84475f1dadc289bc66c023d1c51a6c38a8eb6491d2fa90af82fc82de31cb7b7f962f66acd25092c61bf1481689219e19c3e8abe18d58e978ca5e1288f692a1aedaff6005d3fa6816a200df50a7d313cd34a808a717ba15fa2aa7a0dcc63462502f83502b4ca12b3543588e435154884248683e0642ca820f72d4a7be9709adf9b4c5a7e92daeb571329c10d71a8000eed555f6a8d3333e3fd8617321d9b982eccd67f0630a9f1df0f0ae150bebb99a2acfc91cfd63dd0919eac9fe8e6326481aa3e74715d4d1aec08011ed0973a3ecb44fa8e8d1e668ffa22ac000628df61fa582f30f6b683f79e4cf96ca796e53ab7ea4467b6f961a25197c2830926dacd35eca05dbd27412e90721f1018526edbf361ebab1dd481af0cbf073daaf536e92e6e661aa25fa845843320d063de8dcc47d015be36449018b45b7321ef862785eb6923ddd471b2deeeacf4802b4e7935b05fe5388abc437fc6ecd43a7af890daf0cb6c6b2a8232b91430ec6f3aad930015b740a680ccdb6bd2f100352e4af861770fae59ea71cd9c8a75f2d96deec8db657f20320d7676728dbfb2e0e74d946d74460a8f107e0e8fbc26cc522fa22c11eef52b7e788b6df908f041bf8237d45ac9b1d8236b5c29dd51586bf20e1349b90f2da2eb1d2b021741e0d4139dd7d5ef8c7b46a78946c95d0f5221cd984ea082c5cfb65688891d0b0741bfab0eae8911896d267e07dd500bc7f83f0490eb4945c3f84e31b2c7b8707be4ea1d1654801324005cd7cc8876cc933e1942f52963fa9317f248e0fbc19d7488aad0c2a74cfad705f6101fda185f02a175a68a1f1b98631d2f6aa925328412dccf7d75d04da303e5dd0fadd0b382dc2062994d887616a36480a9e7b0f03dbd5282404d281df5018ffe25542afae2d0f032a7747cca7621ae2a198f4a054d49fcff3610e6740c6f725722e99d525b0d5b0f5abd041888a28a2f60d7c1031ddc30847e12c27ce308e848420db33923f4f1fc69f8c35729251ac141fd58711ce39116b34e06150d16cab1a027c98d4106a5817084054bec8344a3fcc8f92ed00be7d122a0974e4f630792e26a42f2302fa8c1425ebbb874170c3a20df8c624f001a3ba3fcc84c926af6cb21a2f237dc18871e9c03bc9d14e74da39beab1258a071cbd0af28ff24656d34b86bdf0c0278989f59d86176a12370fe1ed08ec80c528f9e9a19050267281334f811312f35ab666815917f9869feaf23a6445012522161dd58b33d97f7ab04c353a0099541dcbcf423c6128fc9e69cd7a211c37531e04a359c0b70a182b437d98f6c576930b4d2c6904af0766ce2f26431622cacbfeb6ea0df399da785f44ce42dd0687f86567c520345f79c99e34ff43ed1211085176730cfc94d2807cc31581c181973023705a16c19b72be1c3e646ad1dcfa16710c901318e2e6765175c6497f3210165c7851d2e296601050d97ee5ba562503f03ec852671321ac1a13483c769a813095a0642c89174c539ebf4a5af494179fd26c8f2389e3356a0d2c0ed3784db1f23eebddab8782772e329cab510022a4fe9974415af520af6cf57bfcfd50469da442874ec3497dc31ee15cf50b7fa475024817ac9e4a325dc3679786ae69799f7fb85e893a12cf6b08cce0248c1136fc980bffb8784c09c3c8dc2809174afa95b6acceb76a791ed62c92e6898099ad9c96de68da9a6a9d7c980cb771fd023c91131f8ef170d40cf25c7760e04179f47ef9103e792a15fa29359fd881f5c12416bd0a9d9999a53f6854f4eda9c2e4e3f94003855d736c3ddc72f4bd6f422bf743f45bab3a484c0925932d11b03ddd8dc511af865f8e992ad61ed04cb4d533b66da07185f1419c8423cf8c42de12cab44e263c98a26cb8f9dca837ed62bada1b641ff411b0dee22bf440f4be6f35f76d356e58af0fe3615042d2ade51480a1ac8a7aa816c6a137a8e3f27d2c036022122e888994d2a341922883929a2ea61bad9fb8b9bb32cdc9344770118ba59929a2c7f0e9d04ce2ed564d6e9dd72c63a35d6c8a14fa51975f71e69191a99e6468eec1b89e81c9bc95a18273659ae8518cd0d650695603c6f898abb3059423013f51736616ffa61daae2a8c3f41c6283ba46a531cf70499ed1628955270ec8f09e30d5cec1cf138576cb116b02191ad984e47dbc49e03eeb5c4252f303c7ab5105b2595247cf18e4e0589ea9b2cdd970bbf1f0b644135ce705964b08d4db861b862d683a889a70dfd88a6a60bc65b9798a45d74c277d98c78a15e246919089523b82bb6b55a0fe2632b3266f8105c9cea36c309cdd1b6f4e21a51782f8361cdb3c3ce5710037f482c5ea1580ba9079ffd837c9a0e16ea62fea85b8ea92f813482a4b2b1f1696372332d781c165e7d03649292ed4ffc1df43926b3088a0daadd096285b70badb535f7947afc6bee56c35de0c4f53d39f1f885c00b651e0ebd1e7f126db97df34891df7299e1c9659aed345a128239fa8e245cf85f5f2600ba66ffbfcc79c656698cfd6dd3c309c3520cc4d7593ee61330f99d740b32c52415fd1062db3138b69739c72433d06eb10d60bef27b345ec9540971996ae03428eee1ccd499f3cbcced66460c1be7cb14d356885a6a45142a2cab10e2a799e2bbe0042ed36808986c13a5d03b6a21cb2f53d4c56ce9a38bcc5e27b1bcfaf832d16c18bd615caa84becca8d1977970a2c90b4ea1d2cc430f3095281ac8903c1e0a5fa06bdda0245c66d1309b080355128f9484a1e62c950aeeda7fc10d2ef307168e3ae0a9a0ffd3face18f13c775adb7c662249503d2aa3bc43ce1f22feefa8572e6766739014520ad00b5a8dfa61ec7379044d46434063bc7969cd4c4b3ca6cd29af513393eb63a02f6db8ac024309da9c59bf82f82463411f690b2a613eaf45ba2bd9c84c04dc643535e207b8e3d746976906c489b33f5bd374c8a6facf645e32d10c2867a16a14cb9d3031c50642b555863921c1542b54a5291ce3c29c6d16844aa371f6070957360786acf53ab198e807a866860a062abeff81b4ec67f272cca5e78a57486453c80f82f2ffa52b5133656f01421e6106234faf6ba97f320179ffe1b41caf03b61945361964fbc2493c4109de20a4fc0a5b0d3e5bedff020bdae03572e8006f809e12c58242f3d4d6a8af624ce4aeb80d201b58151050869560bbd08e1ba1c64d3a08b6029028892221eca48800ec898a502b7084fa4912ce9325a86df80c756956949814906d158c99c61aa890e016037089c1cb4be93b19763183ac8319b8010b42e02af4cde3cb70e875c2441dcb37b3e00a911834fa26cfa31a4cfe111af9ac9cfc3065fa9fd4f259a79f092ad08ab7d6fd231b1e8ee8dc0dc221814afc2d2180cb0e10fcd31269ad9dc4124ef69fbd2457d14fdb665606fee21cf5c9508fbbd270682285a7c9a337bf0249a7e15ad0c1f2b22091ec942457700acf2245cf60d3f37325b60c3b58c30a93ef0e0d52013d3a881ce9082a49f215170a5307af3206924303e4e8e2e22b8bb28587cefe4eb911ebfbbddaace48a5ef89705425e548044e98368e7fc1a5fa008a2dc66330739748a9effe2e571ccc091c35ba1fbb44ca322dd150b051edde59a0ee1908d3c6a8b6869598dbb0769e999e00fa385acbb641611a74f23e198b02550453c33d144b34a7588b09e87937c23767635e0889c977a3ecc36e2720c6612683de818a1bc4839135c6ed2edcd21b5b765d5e9e2493db9747d14fd4a3d02025e9f365ef8455f7753c98b21d604e8a1f207056b08b73681aaafb18245d69b893d8ca2656f738a94651b696da5f6fe3b3220b01da67ea07a7a5794dc2605502827d3feed0a48df33091081fc82713fcd08347996970e9c5a3c9ba30d5b70f1aec8a9136caa5413eced88b1151b003290a244d45465e7cd8239fba06e84292af205a86ab5f4fc717d2ef26e71554ade0839204b850f4a0c06e347ca5585a92d838f1e202f9486caa607eb7804c242a440287845e5203d2aa86ea366bbd6c8eef1ccd24d2f0d9c78c0139bdbcec3c0f33146fa45bb003eb06fb930917a9ae8ad36f78d6700b6d283413f7e704a555e117ce1a61a69853dcf3065bdd6555a9792da241566ccaa65c11e06c4ba6209fc1afc01c03bbf946b9c2ff7c1877d7dac46286b90b87f0c665f54c88e39abc40b845429ea2162e30801d6687c7175f16fe759928f818461e1922e6f2625b3836e2ace29c0be533e4902f1ef06405b0df0db6a0d2e9ccd7472673c0d8a2b9cf8f7c7fef8dcaa3fb9f2ab7503f495c8d50c2615106028e74f2ff805a7bb441d3c6af626d9bfa82785eae4c3e99aaf0bdc7eabe1b4969dc4fce6a6ccb43a24ba920d51535e5345242be6b5c37f485f025425056d36c9cce42cd939dcf82528e4f7d513b71685a8f6bddfaa4493df1fda26e13e2af123586272e7db66a4dc1887121937b6e93e1b2ff951ee0da5a0b3dae17eb88a1a4c82ae5297c4330a537d3d7308244f84dae6e5c56087d4bbd2b1696feab1c5d055e42272ac9217690168f453768981fe3e1072165d8c83ba22d9681ad139efc72e4b7142c279941fe21362c062ee55f3efca2c9028b46b884d81d8161541b625204b37109b6bcd09cf9e2cd2fac356f370ed8cbff061a30c49931f7fb4eeed9c98c41a982f278f5f449d1d7644bb59d1ab16fccc64f8e86635c7dae1dd72d8155603da553c891316c1135c7882583b97779dd581765447e684453422f32ecd1dded579ad5818884b08ca9a3a2c1b72b71e1ce64822726d480c44174ef060178f10bd7b96e91887311df182f624e6113bba5ee5336cf8934fe16e3c79b3de7a448482f394054138751d7cb6ee00f1a215b519435690f0a703d1b6826a0116789f8026fab499bf3a8e78adc489deb7e4be78ff2ea48024e2f639013f08a78814ee702189229ee2577b993667ae6611b7cdf96982ad5e261eaf1b253c88ac9d4ce037e931268278dd2891c7bf044dbd78b4ae4c77425c5367a3248971428048dd16dd9d95bfd6daaa4ed8be216a171dfa6bbe044834046eaaf6a86516c5ae044aae00c35031563ff088f72a5b1d0adb39791c89b43b475154af4801ff80a05a017483f0cd28c56fbaab76812db6a9a1645cab29dc01bad2534772d767a415c8182ecca488b85d14c8c2acd802893159b870a1ad84e452dcfa3aab45bbb2501f1cc0a6412d3cb23f6aac2f1820e35896bd19ec8ce48d72ddaf88e74700d5c772b4660e61c42fdf00a38d4229bf9ad109f1f0dd9171c373927a670d8082f99abfbb72ad18ced25af02d12fda57b2f1f57fb37682bcaccfb92dfb48896ae331cd7a8981ed97fcfa29b5434589d400a69c09a18f4ed1537a8d71290f3be1b1fd5472e94610b65b4823cf2c30c808955a2f0ada249af4b2543ea6116ffd30b340e4889c2250a1718a46a5980f88ca9531d18be332083b685447c33aad61bbf67a89c27e5b970f073edf53ff639afc0d250940fff21199a99e1e94f5271f860a5f5f22e610d301bdcc862eab433fcc77603fa5b95e3a9b94c745659c685e609893de5b64a6ba81e98086130e214d93a81839f889fd364ab570458f32d335f4429e2028210f3985ebe23f5fee94597be6ede50426fa319410cb05a193cce49af35cfaf19e601471f80908345e4ce756765b808df961388fe42a4c02dbab5f9f201c9fe83a7112a43d4fbc308e8d7fffba56be02cce3714f7744ca72f38e8638f560d23143b4a7f1927a6103243f2408d1249872c06ebdb5e01d59e15d47089fe582fb16605aa4f4c8a23e63db7c5ea6a2f893a6eb44a566414ea6ea60c228d7666a09bbe68c607056c6ca27e02a522364f9b3afd62cde94e4eab12c9d9f119632e97f0aeefd16f2e636147bfcbec0985f1cb7171028279639d0e9661992023d2720edf5e15a82f93a7321232085d215041a87fe680e0113f178445c4f665be4f2b5c186bed1fbc9a390b4312c43add649359fe3b7cb866b34fb0bec239199905de27435c017606315eb67ba53c6a97d1b86797fa19edde0b7d89846ff5e2000f0c523b71f1e71645c2f6fee8c86b1d91b31b6c42fda69dafcd78f29f400e32b8a44db9a8893902f01687cc78f0c77e9a1932f3ab874be6bcfb922c81ca081668cd30366ac46fff003116b1e81b3a785ebb52f206d0d033cc90c1c395eb0e11f207d0d033c8b0a1c319539f7b04dc18bb91483cdd782b8e3d026f8cdd48148f6eb8957913a837590c5dc346034cae04d2d53f60d0b0d18045a0697c9d838679b0a28f45e1753cdfa1480b8428e863f50d11871cfde3abfc353d9affa89b8a54a452c97769f45ec469bac875df1d7517398d4974b3e48e94927929335a74ff9b3a12ddd86c92f7464b808cde38287892b8a2d777c8241ac41306e169ab06889ce55a04f88fec4468b12098ee466ef967fe432a00bf68779c0f1275f64cb1c246460a132c2561db3c483967a92568e814f0f30151c6eecaac389c479f6802a9645432c4c9560568f423d58894e240760b34dcfc3ec967b4857a00c03bef2642968b0804cafc8dba5786ca0c5a1fb8514dbc03818afb6164d5a1958fd4c7f80096680ccd1c71fcea788b61dfe960c11bce1f95633362afc9a4bcc3185b8a4bcf7c7824c510d8e6c3f78590783befb77eba5418a6d5ca0146f4d4a6360205c4c133ecde2dbcdb96ad1d047353b50ea0185389d05ac130bd1bb9f19ff98f5002fca2dd711f4cd4dab31051615e8b0e68a2609ef09158b442456851ccb16c4203faaba3d6f428a66a37766ce85c4c752ff4eace96599829109ffb900dd44dff1f56ab69f0cd69d51bb0958197df855d29d5ef10020f49d8baf6f029a8b94f35e79654098198d59ad359ae390b107e5645d0e63dab89781485970cca44e2aa73480fcbab9ef2908896a06f92ab06c30db8bad02fc984d5ce87c2d44842fcebc1dc56987122c4b996a8a1c3c00225377cfc2291d9dbabc69ce9c35276fc6ff0bcc80329ac74ea71dcbb7955ec183c249c4f508f15166a49bdb668d912b7964b62ea5caa8ad8327b40cadf1c7d9da25ab7085b46f3dbc7bb6b89f1c36be908e4b5acac2e7d16e7db11cf14dcd1cce2638f0e85ca2e0eeb39e6513db740dfc571d921c1246f58053b261e92d46d8066154fae49971c9c57841468e2e81b387800744b81667c355a98172c47f0f4cd0fd896b5119055b8c7a4a98485f3355c0bc3338b2208f20f08e7a51fa8a73eb04f7aa09ef0a09b37b50c4853194b266fac1872665be191d4a900a45ff351aab7fa281194fb2809f385b79c20eb693340a1408db5c15386cc98668bf7ed0d17bb4025789d3ba5f9329bd28150d30a66034bc9eb0c9ea91dd8c65abf4719eb1d3e64d06060d2468874643a5df63d9d5cc7f142ba3f5c03bff071f8163eb95affa49c277c826ade8bcf2c59315d169e444cd6f4bcf9c4e98134982475e37192d43ba0dda456d3665bcc2ceff63cfd54df60dd9e6e3064f6e4131a409278abce7aeadf3c622ca092f25acddd0f430645b189547306cb505fd062b6a2130393cdae8ca7bd6c8b30ef27bc5671d08e4c9a1281a2708de63f63bc7ff0eddbd235cfefd1a4ce98dd95bb702275c37ee1f66b47c91e1dc1a209e26399bedb2b49b1264ba8092757d792b177b44ab5276d895c41cc65348f76b69208efb1260f090efc23e603c6b1357bedbaf39717a71e7fdbda71da0901d4cb8dca27e45c7290f5484700d3c268f88043dd7aa681208446aaf0011b473859e5e4c8021e5f30328a1cd98ac66e2c24c4223a55b5388283069ccd39a1160bf48b3a9e7adc186ee5c9de33f92fa00b28f1b81852f45a4a8dc752e943e828bdcc14084a6bf832758352324e4c1b1d93386a66b9c0a8bf9f6d8cf15256185f7f37f0c0b5467432af99dc95e84b75c39d75b12e8a2f61e6b0ce623d0017dce3ae1e858bb24c4594df4eac802101bb28b2cd89c764c12c7849d0bc72a010ce7604debb764cb760d217dea3030947e6857ec16e05b0de9b464f502e65ead0a3a3b693759290aaab1f0f604ec3e51bd90e1a0431eb4560894e786e9af30acf406e786301c6c682448d56160908dad75bd673a898c70daeb062baf92386b01d249d9c65b083613cd46b314e0a7a206a1d30182a10515388a992bf84f9de058095dca759cb14e4e31f471b4e299265fb86b39018de0ffd59b1ad71a371c5ba266cd7172e31966f667e0fc415fcde5f721cf594a244bda3d768bb16cad77c01a16d94a1acdd1ff327b13ab69857c30015f8f9b1e4907b5e5b5ef56047c7938e73b43eaf12a4b70d2387f03bae9d2d7b54f8a4bb4ff08185dc500ae35bd334cf06a8ba33449683101c02c8569be59de4d5011882630b9240f8dc0b7e8384d047a48a2afd0d6927e574c570b65add898e2ba8833df977f52e961682f61487cc3f99587f4d3e1dee086378a3df07b2d48f47240ab1841265f328efbea5dc5ba01c07e1ff7fdc4856f7f454dad92b064e390dc41628e4431aca29d7b6957e9fb953b557067276c424909b92be8a4147bdc65525fa0e01f1fb135e5d5a2b6f8fb5c5bd0aa876c7e7e44dea99a8a6dc282154c8ddc6139d59f692932e78f36a532b4f5b719d1ffebceceaf643160d3e00af095aca2c55329a5762eaa965512e9257222b1b71716fef6b37ce9adda889bac9e8740fbcb7ec975a12db7ea1fb6cf0dc8cc27c5a11a484efc90da3941d6e11071ddefd7a3d89f66d01af0d6f2448c4f9d22ac24b38898e0277a8b6ca177f8e8953ea380a4a1c45e13c50cb87b406afd7f04d93a917a6392c65ef701cbabe4c27d151c259b4c43219f751ea2c5a8a1c6c6ce1908db2401404fe391bc7d10f9dce4cf729521edc01deb1e40f054e08e89d8143d72e59029c158ff32892044f0676471161bc993c91d230fc137c43e69aa986249006000249a933919cf8278811cb7c02079960c5728f390019f443b0151307c988a6c1ccd75feeba64e646da8583231372d4f4860a7295318684c2fc2b41fc2cfcb18a92d20f12974d8a4217e4004161fc41575c3efa51b62fefa6cf0598ee9dad1886f63b02fec52af0124c1a62630b0c6d59f037a74957dd1ef5a13041245ec27cd263193c04d00fe80650b1e2f003fc10ad5495734f4c506c09f2a4d9898b54600ffb81265078b1effd0ecd3c9bf2ddeed009e41c0e8e8bce389f63ab747402bab861565b7016514d1b389217d7805ff0c1770b6062ac8b96f00820ccc07ec8626830a19401239c97fd48cb87fbfbeb81f24694d3f12df698d0b898d00cd3972da234f29630049cf23b2858e497a532c6052c7d33b39b88904d2485b6e4ca1da20515054605f649a27cf8171140e8eb65966599d691f2ad0750daf39ebc59c815142dff661dfb9d0d7fb65d2dd36b676fb76d5fcab79b8920609dfd7d12b758b8a0c1e6ed425fff2c1c70f47bba6d0ebcaf38ca15f902d26cc8aafe50840f628cee1ffd4a45dc545555515a844d113bb2109c7a3875301d8a23780a82a66918cbd3114aa79b13121f1e1e4271f4f1f1f1010272b2911efa958c8801c32d4288a6841296144c84e85732c20aa24e0700187a0840a8068fc1501cc12dc7126e0eac2807f85ee79d88fff03b61d2dbc40e99c03a0f015047fc4ab10545fc8002187c3082500cb0670845dca0e0e305451c51c40e1650083e3db4786250824e0e58701076d08ea04376ba51c13d2191028c8713d81798e08a9102ab0824a84a300135420a3a544658a1053347d783ccd1030bfc55f972d4c0258711489063092ba51c35f4d4af94030a2139885470947e9eeb14f0965dc8961d4ad31978dc1b94037ecbeea601bf1d47c56f3fb9691499303280378aaf7ffb0bc96f8761c06f9759c06fa751c00cbf234e3c459477297efbca489431402c11e063cb00de33e97700fd46fa6dfceebb037203b28abc3101de005e3cc5019c14bfeabc2b4966405e4056404e80c95360c049f16bc508c81b87427f80dce22920cc2c459802e4ce5344978ac653441b142846a3ff5008e318b28d4d75f214be426150a0188dfe43218c4fb5621c0afdd75cd7dbce0655c8168fff489638127afcf1250f201f5feaf0660041791ee663f378cf56691cfa4fa886260ed9a0309d134815a8f071edb1e1507e71f4d99e8e3a0452052a40fd01facef6c93040196f387bb6a755c8154fd172dd9f7745f6d57d77c5855adba0c69a7c912f2ff245bec817f96232994c269369b6cc96d9325b66cb6c992da5d2cd2cddccd22cddccd22cb9788a8ac649f13b97cea573e95c3a975a310e85bea2a94e4e8af4549d56aad329743a55ea35d46ba8d750afb126b880df676f5faabb6c69d2114a13bd89302d3ac6d95245983d4b3afa2ccd134da7a3ec24cdae68749c158deb6cdbd549c7eb4d700153986cdb1446c7bf1bd4efdd9c37b49bff650077b972a39f005050b880d60544714a72422a954aa552a9542a954aa552a9542a954aa552a9542a954aa552a9542a95faf0803afb93dea303d4a0a819e1d75ebe9bd51f8f8fdf7933787c947152046900e4e3873c1f3fdfb37d3c68ab34c8c767dff9dbf978fbd1f9c8b34383ca5019a93fb61a7e733d26f76cef9d00e9e4174720b1e3e104670268831a647bfae3c693617cf2cda0ede94b634f31a3957203d05f8f8fef343edef3f1dd090f011bc09a096f06fc8ed3f9e8369bc777b64a7b3c1effc75f8f0f8fbf1e1f1e263adbf47c801ce7a5f620c0fe0b0af97defc49601179d27eafbde09fc9161773adae3734119c6a7a2d9fd9bdf3bd1d9de8579d56ee329e275e975d1d6ef91e3f88d1ab7b15e83c2bbe24c2c7588c5ee0aad93d55ab1ec66ffbabd0c633ebdd35d40149f201d32f00b7613e20c80820296f5984d1c39c05f9004caaf9e80a19e31daabda7cc915ed5badc14a71648f84c04a3afec84738058624f0bd68124f216b9c14670dce8a125bc017709436818fc997359e027b71527c982a4313aad1f1436a705c85cc180aefd1ae353a6ecca4e347eca65a55e8747ce9f34becc0da8db6909a2ad4d75b9baf7f5088b2827a05d3d6bbd12491246eecea60d113d330639d14f0d6503abe86a2262745acd3119312d41d61a1c718e10aacd54c18f1301347e0ed37464c59d58882268ec01bd78ac92e64e208bc2b366285891c6fc20818403d9c4ea7d3f3017c27dc1f0b3a58c815ed1e442e8289214c98620eb4070cfafdfb300103a1030e21e0f801870f100710f10720601ee028601c2d3fc0f142ef47c1851ba51b3537704a374c3f278e0e85a32509fba20e6cb003981b2fd03764a0f7a38853c84208bce2d0e169018916986fa8a8946ea8a07483458a40eaa96dc4e8ab349c93f44ec424dce8f8f684131072292cf0bab895eb026d2214ae573eb1b495374aad9c4a0857282eb024914a824612337401f42b25d19255b512e928a5282d4828524a84c522a14829919489c25bea57fd16e96aad740bb1d56f166ec5af79dbbc47259dd9bfd666dfc96cf616672bb398cdfbca27525b39845d44944b5697da69caad4c9fdc8ac5add0fca813ebba6467696a59d939154ec56b7744121dca842aa15e502d3b6a50196d45910ed67fdbc611ab1e6b8c22dd25d2dd571ad9bc5bfef5b36d64a3abf5781b9dc810118a859b342d6fcbadbfd6e7cb59b849d3ebabf74bbe65b97c87a41c528ecbe827002b2b176890a3e156b4bdb0d749968dda87e987d88b5510a6d00cab3284f4257c492b2b9b482c7bf89c8a35ad8c6656b5ed8b613bf34669c1755c8ac5bdd0d7bbd0536252cfe73a2e05ce203f72957503c6a9c019b2af629c1ab7a22b8bfdccfbc4cae25f310257954b44aee352b8953927b7a2a1f6339bdc1b302d5f836fed7c4a4ba055d99f4fa17cae8b2392a3b92e29a7bc32fa5c0a8963b2258edc6dce594d28a5cc5ce729edefd85394a76e7c4b9bc81ba0d581d2fe9c0a9ca1b2ac6ade1bb094de5687f6c7b6138b53e154a00cf3ade73aebe55d61712b9c0afec18e148d69d057323b84d8f142236103091948e8d05643914e67367ec37560badd0ddecfe0d7fb78f3ef6cf243acb76ea3b5d6469a5555fdf8a454b559f6b5da14f4f4833da8669f8f55fd6493f8d8d3af282de8c3147d28c2a2f7fd93f879179a5a128a941249b9d57e1e5e4b23a5f924ea8a7ef514f8e9c73f89d9a4facfd3df778b74fa8e6c34cdfb7ee8fd3ca4d5fa2d35a570b3c825b0877fad1ae89350f549293803fd2ad2514af749dc229d867f6df896803eaf81a065d1bfa017edc0d73de883ee9bd4bce1adaaf5dac6e256f441f04928196da3c668f5f4739f948232d0af6e49adde23a1ac6d3a2a8e78280c0d3dbf62f561c5ee572b6f520ef57cf51427526e98b349659fd2fa968e4a1ade1a2efc0ae612d66b4fe79372e00cf5e989d4f0f789d4f7b1dfa392d6b2680766719fe24dab8fd17b034643ef2ba5e767a49cfad8db27a1ec57778515e9f435b5655549ca8132d05c339b88621dc4837defbdf7de8c38366e503a4e1342392b5a51ebbd6a59082f8bdd875d4dc39df71146948e930c1a3635326e6ad4c8a081d15dca392b39ab8ad25a2d5a2debbaacc52e8b61f7669976334dc3b8d3f1783c1ec87b3084000107582687165c90630b39bca062adf6de8bfe830c9ad20c87f921e2b8947356159d554569ad16add5b2aecb62d675598b61d762d8bd59a6c51b9ee29db7380b8c4008a16134451a91068828938a2d5d2abe441f629742cda8612acdc0b1519a510359a04c0cd80259e0caa3f1503a9ec906c6e82e258cee524e39ab8ad25a69b5acebb297c5b07bb3ec669a8671c7f301813c3c3e3e40e07f507c401e09f08851d3e27bfe7c6631cb9004fb62d8f2457ef6d6ca1d92f7f5d79a64f8baa4cc9ebe99c76bbd7d09c0af54c40b2dff53448a0e1dfa7a10226c68f9181134b4fccf5b4b31782300b57c1ce567797f7cb5e1f3526aeff1326fd0d78cafcffefadb7989b3bf4aaebf36cbcbfe7bedf1b55d577665dfe9dcb79f7d672b81330dd7dbcedb8bc43bda93444f16edc059662157b4bfb289f6389b806c72db99966f06f9f7d23fb2bff2f6c8329fb8c63efb786dc0fe9337dc2e740df6afb7d766af0bbbb0960faf0dfbbefd7de21acbfb035ad6e0dadebcb33ff12b6b29b365a513b0943366dc1b2e6d330fa1a193374adeb8a4457b1e7b30c6375f355879b3b0c1d2013566510caa0af9f13d6618d2632ef118eb0b6b5f8c1686c14b5f3903f00b5b763696b0d66dc4917f7daf114715f48f12fbac2512bb7c085d4ba2b6f8b51741f6f7e92d3101fcda57006b15c8eadfecf5ad9559c7e0bd017bfb170d98cd6e7a27ae2c6a018ef4eb93f8d3f4c4d2337343687f1712c58a3208b5457690722bb4aa62fec8a5545c4cd1f3655ed1b58ba3a9021c658a5ca92d73051607ca29af975576c012e92a4b56524e6bcefc293aa3b4d11a2ae3343a66932805387e0ab09bbc86df546a23e5b4c918ef60315b02bca50b4c85912e1546bab060130ba6c2d41855a6021147aa2aa3d6c4115b2a0961339772711da7c275d587ea525f5ce288fc9738421f5eb3be8876807fcd2b5f26902e3160645830943ec817f9430c18194e8563a92e71644b974a13477675912ed20798ea4385a931a44b85e154aecca5585ce7c2a96c1c502a942e9c8a8da5615f0c8e33a1bd4218eb90fdbd591591006f3f790a6a72927fad58c403355d6aa235e80db51147aa1bf414472e0a95aa4f4a411950a49c4c85a0a58ddad0521c914f6de2087d684d6a23d2c19a96a805d37fb424e201437d721d8ef2944c5949d15b40e94d4f1a278e6c5af2d349fbbb8eee8817ed4f85a0a638f24a5ba8e1276a22e5905295843a698795422bd7bc71407198f7f6132947d68e3a0683b7a21db009fda92bfad5ccdc0a06aa2a595522155cbd77a27a92d8c55195626b68f9cfa44f589ae49287505a7342e85c47a9bb731d9d93fe9c16a494c29ac2a9702bb4b6685971dd932da2237055b568f87293ef28970bac7d188494ceac7a92484241586155ded3a431d6524cd5c3ad82b0d2b62ca3104239453a38e753ea35da453a6093fa73eafafe189aa875d70c445d4f71e43a5c74f573bee884270bc7d1f5028ea351a938aa77b332165213868972e04d4d222330f5902da157d41447aa0885ad6a3b8eaeefa9ecf5afafd5d268b74cda3f93f8dc2aafaa696b2cc774d0a1dc0ad771295cc7a9702b9d0ed7712a9af65c8af65cc7a9702b7144e33a4e05748210d614e864e2b403e8c4a978742094c70ab702d2014a79a4804e9c0a4b1c4998242401ef2a035f88380ad9c4910c95de09f9a013d691c24f123194968fe9d0f2f1163ac5510a053af140ca8a464807e844a3868d1b3a7e8081e15464d7e2f262e284c958fbb02db81c81041da3bc35b8fe885b5c119f84ba443a10100b3e7c128a9422a1483922dd24716bfbf877577c5c978dd5e3adfa1747aaa7f19350a41c6cdf754bb1e7293c2008e67d222fa795465c41e9c35ca2942a7521a52dc4443a6013f853ebcf4d1cf998e208ccffc18923343e35e2888d3822ff631347ea8b54b0952e222170f62221f0ae2b5ac2076d9df7d83ca21e60a8a5687c40603c85e7e585c17c6c3cb6122d4e92dad6525afe6703a18923f99e0d04660391d112fb8dc17c6ce248be4807b82ae1a2650c2dff6e1b4486968f7d6cb4fc1a2302216386105abe65716991ebbf7b6d149dfd24a3fc122f2ee29d181118be065fd3e06b58d328d6264a0b4c7b128a94c2341116ad83f346911eed3d22299ac793e77bbef3d55380be93f789c45ae73d0f7292a743b146ca21e59072483911458b540b321af6a05f890b3ee00e7c29b9171d296987fe49d4554e94169dce73291de9e974b88e63e9749e247a6447a3f869276f68c9e75438154e855391a9ebee8ecd99cdcf22a7827dcc322e258b5a9663e4bac8b164c0b59861dc8ae537db10fbbb619953e1543895ae1a42176e74a1465bcddd5d9b73def91723e59072505a5c12ea3e29754558b0ccda4828ec3591947bb1ab8974f3b5acf3998675e67bd51b07ec318c9443caa9f4cd0daabb63feb0f2870edf436901fd3de45ebcd716b563c1a1ffc3110581e116f221749c2f185a18514954129544315c6affde461111b0b6d11a27d9cf4adabe7d0d48ed3871047b6be7a5378bd02b401c6c739c3872bfc2937e85aad67aeffdf8d66efb95753d7d59343f15960741f354ed506f67e656240cde89f82f9b7c71c15bc280e58584c143c0d372c50518ca952a1387b02f864d6b3269594f4544c02a424438b07ca7327144060582d2e8f910abfcaeb87faf69bba9058c45d171cba41c6bdb239a3a7f73d38b614a5f827d1f2222025716b9a259fc637c51776dd15b761dd4b40635bd1344687101deb26b91126e2b5986bc441cefe1eba146947d31bceb04583e2efe03fc41f171fc076908a1b5bdea3dcfc1da701c4d44046c59d6c7a774d39fee36427c80440c2456b48559a47b27fc452bc09b6a8b4deb2dc0d87693beae9f15455f6e9a55962df14684027fa1a3f441c78f21343ffe14fd20ca02dea35a310e8d467a8fa0ef20f2210810cc0822071ad10b4439984002103140d9c92e4503b2a6bcebfd45607dbddebf0257ae80b5257419a3acee1357b74462d5969d0f5132315ae75b6bde50fd7cd10eb0ec42628864e08d759296666666666666666666666666666666666666666666666666666666666666666666666666e2f653d5af565a4324832549b4a13520f5f6530d1d55f8298e447d8231663bc0db4f34c42812029e5f553ff909ca171abe48081886bf05a20a87ef4f78efbdf7de7b3041e4f0a27368b1f40b2287141d44a723888e8850101d154a98a044032525250fc2c0947c8c2850402f8114f05b12a534e1255e52f234ac443588100a3131313131313131313131313131313131313131313131313131313131313131313131312f86a93d864d0fc9db7ed679bb61dadb3ca7f674a6557ecd07cdbfd67e68fe9d0f9a8fb55a79e827fe8f9f797b7cbd365cfbdadbcf3c3f3bb6c47e866512b79b7d0ffe8edd2cfeecabf9d6934b747ebe2dd179ecb5f76c253a9906fbd8636fdff3989dd4e24f66e138f86d36c1dfc926a1b7f6e7b6359c65e8df4bbf3584b4b779bf2c3df289ebfbdac76bc37d509e77621b66a7edccecb1b777be660396b34ededab43e5f6403c791dbbf30cd433c79a3e4dd097dbeb369efd9eea7d3f91deae4cdc271323ba7b53f352d7b6dcb5ed37e87f0d3ef78b06c32dfdaf9b6858bfefc276f16efb12dd3be3333f69eadf3dad6d938b3709ca9bdc55c4433c0f3336de264a21960cc3acef5247e529271d14f45741cd9d1506202f4e55780bea438383750c6eaf8e16f1f423fafdcf4627429a59c73caaaaa2af9966271a394525a61c080010386dc44302c18160c0b8605c38261c1b06058578c7705847185fb0a29e58a39e75c51555555ad10d1608588063737a7130d8d8806d8d69a95c4d869428b63967543768b4e7bdef72f0bd3fcfeb34eac2b9fac3936b47f278786f6b7f0b19c191a7b8f1c20b4bfcdf941fb77a27d07fdebbce7eaf1fef19ff7bc3dffe25f9e1dc3015e96ff85bdb66debdf43e0e3b5278912c0fcb12dfbec6f2ea1bd3ff6d7dfad84f6d6df125a16c90063d8e3b7b6dd82c427f6f1f7b32cda81b16cf2f15a36f178ccd2379f58fa234b8f1abcb3b3f4e413d7d706fb9dbca1b6efdb7661b1cdc21cd3fcadc7b2bd7f6599f7752cdac0fef1c50b8df17b08bc346879a364f7493cfb6bb3152219e09bf78985e52b9bd4b7aa75f9bfebf0ad9c146dbddf1632fe25714cc3fed65bbfed161d7ef8f8ba2ceb7140d1f72febdb6ed1896480fdd270eb76219201de2796c6f276b14fac0a4fba0e74bb45956e7d06dc03663b443610bd886c00e332ad50f2c24ae98897189f0663747729a59c73ce595555555554857cab8962109808a8344eb576b1753513000401c315000030140e878322914092c469968d3e14800e838a4a6c4c9749a3d21c48519051921062082006000000c0ccc8cc2611004d78b15e92695fa2c4ab911704f200c20f008b99a4688ce6017528ba74e8ff27f705b50c3db9bb3a1673d9ea59c06d02e65aa872dc27152c911ec067a1e8ef4ad0f5f083a97d2861aceab3e937365e31e4c96ad81701a0d3792b23d6f71c7924c8872464e491c20a1255e491c23fa911e9086625729386f85a5fee4f30b19e999ead3b64fede7816e8467ab3498541db33fbd211e373d0a0eecf3b454d9ba6c3d5a3638820aaa867f040d20a102458c714ee37889964bf21c35c56c9239b99e682c5eca24ad59cd3c41bb5e22f70a33f07ba8a8432c2201e5e25941f930b23bab0f388c4b8a53ca5f673d386779f10793269e0dd7ded17c6a9de77a1ac43789c5c843a94eb9b73c27960ed922d6d04bb47dd5816597cb7211c4bc509189217475a4700a2f3eaac684a7f84b8e50bd7f1c3fa7549ea8578ee172e1075dfaf3890bf0c7eb6c47afb2588a63c879c555b80e7d80ecc83ced46304c30f659566c818b0ac00fffb2db32a4326482f6a6f2ebbf2a05f5626449f4d2629e64e82f2720966cecd32ccbb6a4eb0a4d693cfb3e40847f1e1f38c4495e1565814c0f9e3184f67668734306cadb36feb8e59d7809678695d2cef0e09e393d407c5f07387751f32996425c9dc623b60d6c36c050eca2d1e78dd0a9c656680bd1dd98d06dfeea51b5b01cf9bf6e59f8c224fbb0ed4500d85b4c92c7c3d1531714ca095ef78a9845293e514a49a22cac29cbadeda5a03e044a927c775472895b663405d83a6d83a68e7cb4bf61abec5364141b3019f0fa9636b8d299f73646013011ab041f58e0e0bcf5de8cb912ab661c1961c570ca0e445b4f77ee8cf93cc9dbaed2372861b3fee3587d26421ee85087421772f0f8c8d8520e474a8560d01f767eeaf2fd95cbdd92ffd29903a4f172a9de3d0b18c9a81532024daa579a6710c63d8b971327cbce079d4611b080bc0b16f4070df22db5e5e799afd29a49fac91b5607203b7e0a7b95de70bdcf6a3a8f0c5c397e0fcc5a889d8868e5de4bc06ed9ec716ea2ae5721bf2d732050f4d6bf9f3a0e536e5ac0325c53e6ed07a079333986afb0349d37d5f01c0b8231f114335be3d2728d1813ef4bc2410793d0500e65b3d891af07bbfdd5aafab04f598a8d0d993ad39e9a70fbf3b48deaaba662cae422463f891d466274edd0945fcda48e685eeb0a304644dfaf8f923bef6d68cc55a7d6e802fbcd97690eca7ea4756a86ea601e0b67d39e846a9186200aadd5ccd94b32b83a7eb88791a4a3e959bd9408a9bf890084e57dc1b2b6c1008ec995b95d691a66aa18935d4770d36df2f19bfb99a76519aa2df288a3f6d70ef67d468fcc35dd69db0cbaa0c9c202d82e504d06a92b1c0ec39d0c7a29b53ecb30ede2fd4afde790c313d54c70cd2b9b2345e49a0722be179ed821a1dbde0ee0cc6687ab33d3a6de9d153ffb73d653f58997523899a062d5ddae81a4cee1ac3f8cd0a4be946b128ac4cf65c488c8a3f787d5a3531ef3b1802888d180cd251826d90fa46d087e0395b5f8abe67fc6f0edddb630bc003dfd8484e7e891e5ec9d9aa94d22abb9e5735954688239be7dc49ffaa717c64ed204f7885b7372d6b4f457d20153f788317b3acf114dba362a5fd089a00f7403d646d3755e238218b0e3c26f9750883c2b7000c7ff6263a0bbbc9490a59eb3e79d20f83d2348caba181b5cdeea66cb9f722b5475bd94549e44c412e2a22d9f9485776bcccd303c84d30d4cddf114ea26c2d494166765fda4ae27a644aa4e178bd18724e4eb97e98899f472f72ae965c9f06dfebcf6ea61595113d562a009252313fd13fe14ef71b3833676a70cb08ca3eebc8bb97edc3e18b251e06f1f953bb8f337c9cc6853a425a81444e8b4c8f988bba47525debc531d49dc69d9fae015e66b05f9675422d2eab615a4695c0c5bb34d96fa2646124d7b36921ca10cf133190fc3024d8543816a84f6b549d354284bb3731028e0450b2fe2a9f48d6f4969ea24cbdee9d00151415e4d2664b960bc4c8b48e974e857bbfb30c6673c053d7707d19d3748109e5cd4d90ed5b914cc7ed364f7537fce0198649580f3e699a3475d3331003acd3a1048c48d117ff04bc94bfa42a9a0fd0079960865fa02955921a6b28596545056bf62c5363c39615ab5459b060cb3a4bca58d8b3c6ce262b6a58b366cd8a0d4b61e56248eb3758062c36099df1c2058f2cc5a33252dc76e3bb0fbc7b033b9a91c6c58351db84d843e137784a20ae8ea5afc90f317839f86c90221abaf6eaa8f697b5ac344a9a56a2d210efcade284abc4e3dc05c71da2b50d30922cee7f751a202fc8e62763d6464fd83b08ab814f4129e0eea318933beac9cd52974dba00753461dc01b0e9c09fa8125567fd8826befb50b9a005651e7345028fef554965de6e7f5495a2a4a2083413f901248644663c04daef8ae586e00fc5946381405cb8ebb2c9b676726b7cd21008ccdc5e84a4ca3979df020da2a667941c7c0c835b151ec62ebe3a1511f5236d3a069984371d4907be9dc2ff5a601f6bef788fbfd8b071e1b05a515987c05f38671318d513e4d9c8490b05c91174e2117f1390168eccfa02f655e000ed63ff5324b3ab436bcfbbe50b6495a8cb60064903ad1d68a804942806cd4007c3f9f355fa8acf30dc0070662263fcbb102aa01d82f696a5c5fc96e53b9cc4d0d7b0e5ba43735a27e53ab3fadd6b1eb724827811303504e3c7ff57249a22e70ea1a0f2a197343b7654e8d736be644c4d200242d225eb4b446a44e2b6a8a2969884c3f3dbd74a2534a4d315d3ad1d3a74d2925757a51534d4b253dedb49e0617e371dc07d6d6f582353c4a3eedc2e2eee1e0e4138dd6c1b4b01018031f34a6f125e165019a5823ea879914ce8f7e797b06083ca8eb9c45830b945f822f05d5fb0165c737683ff0c582fc94c5bb338a6968c3385053580abf401012a814aafca6b3fa7ba751685246ddfa1b7ef3c5604b62ac5159d283f652f8c2d04fdc4f37692cee1a60f8115269fb44772bfcb28b6b5a0f774c379af511f9c70406692a7f6a8fcf33cc5154ba58c01a841a03badf8d0eab1c255b971610439f531f95723df996084dab904fbe399e130497423efb33d53bc13e609c8ef7d1d6af502034104527d8a357682fa3ee7fc5c38e74f418b967b91d77ab125fcce7086b300aaa47845e0db8e1f4fefd8c40c4e192de7a20d759160e4d1be0db8e48be189f8ded17f9bc57a211b3b7b313810f17cda6617b9708e023ca5356fc27e3b12e5ee74fcc5296f787746f76e0b4245100c02a98f0c560d2e8052dfbd049dac9676f9f4cc986fc08a40320403399f6eb6d327fd26913551549b8aef1fa993f9d20b8fa4240c581a16438b05a34014df0372b049058f946ef41f6ff13d2a2c3fa1728af14a60d018483663c12cf9797986defd07b81db5fa0118dff64e34a34febecb6721e22b246a8a5f67e930475d54df45af8bba7c0a48b1949b5fa037b577363a89e78b41eabf40776daf4052c8eacc9c02c586e04d30509e457727c8ef748d2d92638d5be40296d4dc9700be5893af6bfa15e2dad20ee7bf2edae76b0e2755dbbbdc99b13b3f906de44f77966c27c9d6b973382faa3623c99d691e32f454e3ceee1ad5ff6d883bddb7cdc167744d6f3234c551bff5cadebe9de4942c85dbd98cdea02332a4ed868298d100befea4b6bff9f0ffc8ff6cbaa834183fe1cbbf6ad4a7dd56d93f2b156e916704364ee30d4d3ec45f91271db8385248a60d14fe66459e2b33e2cccaf8e5177b1e4d621579f27a082b6cac39fb1779562f9afa1e3372dc781b35352bd3248b3c5391331442043dce93e23afd916ae1a5cf65231e787e07ba19bc41feddc90360456fe20639094c11c5b1ad67a89295c1f33703b479d9ee19ca0b1e30ed10aff92518a5568d5fb7cdda859c3161ee5252e71530edf485cf57c340c9e60700bdaf9cdb15f1c4e66006867cbca2ef7c85fc350245cd432f0aed5ad0083fc589d6ac990ac42e926b464c6767d7102ab9204540282070bb7852ac9e7ecd3bb2a396548380051f5dd0e8a366f2585b4a1115aa0f46fac835ec90fd8204cddddab49c8250e97c628541c76119eb687d83b0e4c564295329453fe3bd6c9874857d0f6a434c0a65513783b0e6e687f0c7d84f3ac632b35a7696bbf7f3da29ac1ac8fd25d41daab049f9e66983c8984bcdc3e93bda1e165d3d439a9d398fb541508a377620aa20bdb9477d2ed806ec8ffa74a9c3f65232e8bb4861110e9685751d1dfd9c048932fe111d88514177770c2ae2cc4d57322e67541eae48ff6b0cf4a8c2cd69743c7914c075e49e7c830e320fb943bd69a6ee1c4afc410ccffb032bd390934c109fe011132ecc83a0e9426abca49bc61092deffd1ca4a928f0963317f1cd4e10ad61631fa82a8a19094bbe6dc2c8aab1b9a474b67cd83f6c46c7fea0a6a9e45ab11cb43ec57b45bc6bf6ec51220dd11cf838c8562dd45f465fb54ed7fa3961615c8726d91a8abc220b61b88b1640909921d9f8cd6ba1b5bc47a65de5457ec416acedb5460a88d054e1e0f8116d2d418c37d0af2149fe5b385323efa9f4ff8679907dd820635fb493e453d64da304c7cd20a5dfab3fc617c23cd95b14388185725a2ed34bdfc109a4306f19b8e879072c93e5f3dfa47757c0fa10dc72ec1bff86e12cd7ba4fbf4788cc3291b836e3446b8deeedcc2696b8cb23f5ad5ed11daec3f84249e444e7960fee9015d27092f9e7b8fff9d0676405d6ed6a7c36e6c8cae6461f49498e2f890c2ad20d84b8a622a0051759ef723289aa3b8c36f88ec85a54a9ab1af8e08fb0bff297155c7513e28ebc1d59b813e781b648fc71cd9764d08e09ab8f5dd756d6809c1eca0f1ca029bdae99e79cee6afb09590bd11ca3eb318e917da0b25d14e9ea3c5de5ac2edf66e98e6236e158ede180da7b9930abac58a8a57005a3ac94816d5534ae9b106b6521ae10e2e1a806c661d90fb4a8ff5fff78a4a2dd8283228a1678209b255392c48fb5b251a47a503c28b1cbd3aac9cb2dc03d1985b3318c42b29425d0b80eb7d63efbf30ccd14e2684b7c7620c7d239120a4e961530f4b863fff41d75a51865fbcf946a23e4883812d5d2cacb072f2b31efc6164b20c921e222ddee32cb5e53242fdc1d1398507dfa5b4c76d5894ed926ad8ec6120dd08d793711d2c65427b397d353528836a042819e17bc4fc30004e4648bf650fbd57f7f867ba0bb8f39d4a6c978704767ff6773d6d24741be9c535636cde99b234cdc364b651fd10ca4105456d9c135e3320b57628acac2ab6fa3f8be4416927c19e4a8d2d777e8b5de8fb455e0419d5328a92466c6c02b3c8b566c7380b19c753dd6324a474277aab9f7827a375f521e34fe80907b8f237ffda63b74416de7bf41ee41cf3e372c6137eee11138f2df8c0e591ed71bd35420fcf7171e9ea08430931ca00254c4167dd6f2a4dc7cf4ed910a60af9259577e90e23ecab5a9413e49010bad336cbf2a3d89cd8bde392a8c25ade42720fccdca48eb473e0c1d49a601bf08a0612a943d4d1fa8c2bb919cd81874e8b5e400ceeffb5c2de362fd8a009565e6783d7dc89b91b0ad76eebb4df81a4c7de733ce0f98318ecaf002f7211b43ff1bdb9303072adf12f4cd3557bc8ea931236955abb701118343bd911cbbf3f40e44d2b06f6d3d6ea9544a9d27e18d6a78916fa8ad39a287add458cdeb71cb391a34103aab56fd815ea598d9c13bf736afaff9330f695579575df15b981953f985640ae8fd5d7803042f68deb7ad130a6413889dbe37a8bb38de5156b286dc51a170d71643450bae2c58fc6d67e81f7cba615ac0c0b5792d2350b3ae7bb03c844d1c1aa7e6a603a12907d0edced7fd99f300f4acaca03912f6423b9b9f05b28ad66282c4377349aede4a49ba1a0d8d7d80394c735d518edbd4278acce510b71904d52031a5193a9311a3b0ddf313e6cdf45766c5a429ede090023d9e5dc5193a82a72cedeecdb3b01f7b260abcfdcf28e16a34752918054392a7d24a2f99d3db94705e809997d4b6320dc873d363dc2317cdf293e45c314e31c3de1ea0c251a4a96fda447119da5c54d467d8f54720da871f165966f77f63ac4adb307dee735c53283235aecd7bd1366f1dabe31f6f34425d1ea9f07fe11667411b0f790145d7efc8c4326cd9eb4b47d8514c9c01d785d6a762b79192357e32aad1420e5a0325d062b66e8f1a50c86caa22091650f6cd014c1c290402be5e19893f616e878e0e083a872494f5a7d1526e660666a6697c0028810c3d9a09aaaa35a9131cc592fe66f7994343aab9f7dd6060922b6828c73cb555d9a2892f05211d616b5361a4d6d243bf3fa3c94b7bd6a49619879ba7553454cbcc4295b7bcec03844a3cb6a7c44553fdb8d320b6b96cf9c329c1d30195acd4f898722597f1529a5a54d45fd4ca4f2d83968eec4126d5704bd68efc355f8337a9209c6dc6dad51186a26440359f71d6aae14b39733e1eb256ef7e4738dd64174a2c2df58bac9b8eae991de400c8508d0cebc0721e3b3ffb7c9fef3cc4fbbabea79169196ea616f6ecb5845912b5dbf9ba0c7170cac943c2f22ce345d85b2ad45bb8ce9ca5dc0441d09106d665ce8b9b7b34d695400fc0447821cfacae8016a44e5fdca68da6a5ebac3b2321a9255466f45abf5f5af2c2e2766d9b541769302a7f3bddc490416f662dec2d14c1da6599612899d3a2f37a38f10bbb11a470c6da79e0beb4e8d362c481a4dfbe1809701313572290823725433d43efd2740683030cacc0185de351abc49379f92180114d804a1786fec7b98a569d575279df6362f97779abea567d50535cafd9513cfc8e207ae7119fdeffe6e44b76d3d895b626cf932ea84cab42cedf1d5a3b92da7398402defae46507a05fbf0a7dfa0e0c4508308dd8004396304d98bc846c1ca247b359fca79fe18ae52c9448d24dad1d0dcf9646f4b2149dc68484cd44b4308e1bc4dd3c901701fb61db76669352b46fd1e6cd9bca498ef888633235a1c2d3616de9d53837270ca539d2516b07a13bb9c753c1e875f4ccaf981614a24814446b7c584625ead3534cfd1454b67630b8871a9684e11477e8606a922387b9560ad1f0b9d99544f1d69eaedabe3d59cb9d7924f4fa844a00991c2d065428fb748b86536f9739dce0a4451b43d0f06359ae9741300972301813e54822e3d015a8f0f00f4c5a42159d2b54052d2a82f097f465152c6155faf1b53363a338a6b87c7977d898e6ebebc7048f12a5385bfc7709f4d97cbedcc96c8e45feccd24f1dcfafab804e62b2633ac43680a8a79f397891dd11e7e8d3d44f202113b1e0e94a52ccd09584064d298fd3b039523a5c2347c1049232f18cc427831ccc5e843b174e80e6388b20d352585f926445dc46290f980b515b5802b59f26700a8b6573eadf58253c189ed76e8e9b0db933db77ea61556d0fb7ddcaa4f223a28153b493073cd0ec5977a43638a1bbabe71302c34317a9341d3996d055d84d1bc9cdc1b46886929e91634e6eaca609c1071b0cb3d1abb0f44daf82b4971932b0d9ec8332422b3309f5b9bc5cf9c8cd8c3446585664e14de404b938504bf2e0bc5b20302e225a8e2c83f086c4909c5b7750d3c77e66f4b93d740c31b3df9951047213dcca252808217771e1c24ebd7f297e6665e9dad1a5becdbf9a27fa1aa2083b55a1d92cdc5aeb661dad86246bc4fb9f778b7b6477b47e510af18d3b04d246cef66aa44c003347a82fa0c7a7ad612fb3ea50ca904d30e95357cabc6a5cefbb8da2cc07c974eae77ac3d71996456b6c41bca4250bff744ffac7c7d62a1847018d10e7387cd373462c7b46e2f71ac515338f54814f0797f41930bba91d804904701089dcb7dc0a0240311ca86420f500157ca9d64fd96cd25a8d6c28227748c8f48d0536d39e5149b60c123be407859efeb0468683a7afa73289dc0c032467c40dc6dbb71391aa58f6630258e0a8bd4193579967f49ec10bd4b85d02eb11924ae6f592cac92f6797568716502750d637392cffd0dca2145781ae158ce427a787ab466fef6880549dd33452144dfff84932882f56a0fea439b23295cb24f3789873f0f561b38f49967a8fb042253b2dfef013c322e30ae0bab6d81d1bb190db0f074eeb2f61141fdbc2adc0eca65baccc085c2948c22013c0b923cdda082d1f9a79484049008cc87a5651e5edce0f679a98a98d5a13c2235faec9387804239a0ad06b83eb89639081d553f4e228a2ace32fc35af03b54aa9d0c5951a0347da145c6934d7ac0f436572756d6901a62877faffb031c0d5d9d2c5fe61cc734f4bb316e14bae8adf2e8c88cf765b92e67b4f3a0d049d2ab9f09efc198f2a96fae9fc3cdfb05d9090ac72b066da5495685961a9816a9371672e93ee66c5a3c5b40d49855f2c121749c7338a5b484a85042386847e74271a7ff483964c64f7b2b503844ff6fdb8303845c08bd4213c7bcff8bdb59fd803aae6b1ae106b9c09b73ca05c280b5e365a8c08f5294d602d71fe8de34c7945b27be9dd50ddf1c02ac52fb7ab48f4697a35acd30a4fd63351b3da996a03157d13b601f73f15a000b185c09e952e5d6666640642328da7a3de822c2aa264560bcf101ba561e55825c521755ad07261cf7828c7a91192508160e0f573ced51a7237b1916c36515c911ca3adc91daa39af651b72e7c4428f135b79b96139fbd18b541343e906ad49c9da66ecbb040998b2aa2546ee4f7bf10a75b7cc55322961d6a44d2541ef86d27bb266e25e9e13ea9ffc825a172e68031551451cf6b7726cb3ae3a61626b13cd097eed4da4c5f4c7b7333681a6ef459e2add8ef11bdcd9d994010566fa15e7f3edfb2938dc6014e093e4b8bffcf56ac57d11d317890458962128395979290680fa420a26110f968ecef4b9f02684d6b704fa2f6e0ab9775c34ff58d9fac57d46f9b3b9e81b79fceced2281b380a0d28c094ec0c7464318eac9408dbb442e102f871210c14b520455b35f378bc13f2bb98575ee8ec53d9c5bc48a29b53e43f14e04700e450f49b3ab71937890c4fbd1bd30da8326f9e97ce623244fe9de77d0d3d000ef542974b5a48746c9bc91e4ed8772c7726465b2c9175e9d7158a475352634e3ad82bd479e10b190b73a13074b3c36909850af5374aa1d4f93ce0e5628140aabac52c07733d582588861d87824db7036ba26f857db1cb1ea9df1851b6cb827689d92b06e9d648419e817b3501e85fd9454977e442636020d8e56b9b92956932b630d11f2022bce958bd08ecf2842ac74918d3527de0afdfea7519203464bc2e171766e275b92f5705dc11a2ab35f5e4bd3c4b779cf2d532085085765d06ff6ed68bd55d65ed6c7660ac88d60142ac509d955de8cf0bd7201b1251ebd2b8d0ca55dbd9b3ed7ab4f2375170455e4a5fe3b17008fa9878cbf1b1f9300399bc434557e68b81efd7659600f3e0ffbc0da836c1d4027a098f10f4340b8fb7db10bdaba17a6c3bcbe99b166328c26efb7fdc31732cead76f5b550fdfd94a92e5a147f9467fa81c3323221e757b2872ceb25987a157efbe1e9aa9d868a5e02ce06b55977b285edf69dfd03c9fc55150a9f89ac5e0a06a219899cf2409cb3bec78955bbf4ee45d011ea0bc2d5e7cc1fc65838c059decf8aa0a13efb23e9e3ecea4d5c55f9e28c4ac8fe1b263c72a6e539ee29a4d240c83ffc357413567711afeb2ea94f25ffaa169418a6c25a6f1f8adf7cb80ae37f95a6fba5f3e397c915d9d1fa4ee97f994aed665946619261b42cd3541d9e386c2bee10252ce75e17ef99422c9bdb7ef7496ff043583c0b532fc7af87e8cdaa3b5e52de5dca92a986fe251e1375797eabd44181a8f1a0713549fc83509051b4a62cdc7771e4e243eae9269e18c9f3f65b36e583e9180570ecb6061535521e52f3eaa6af3a17864d13324567237e88bcacbf32989d407a97081ca2f67ed5b194933f8c0f38214dd53bfc3a0bb8ad63b2b75ccfaed73c5e554758d2ccc327afe06f486de856a8a14ebbeee1f7bda551afedcb54ad4c424ecfde40329ae37d1d8723ab7117d2c231fb7af563c6d856bdf603de1206a6802441cac410f9727c9c588dbdb8dfe67e34b06684d1e1097833ca32a9255a67a415a85ee3c9fe3ae250bed6ca326020eb1a4601994655326416050d1482b72a693c96b3f59a69b6bc070ac3c67da442455f6722f08cbc87164929e56552c8bcd8ae444cc999d309a2c47da8633bf1c1031d34c8e09fdff10730066fa513c1e553ac40c567af24e17c0285e52b1f983cd748d0a0066262b69c436510cc6f22c6adca8ed0ea76709e9bbe5311102cd5d585242c61c6d15f5d534579d832bc44cbfc227a2ce1436f5c4029a6602e18610f5e067a9be245f36729753607d498b33dff35b621b0c4a153f723192ce3ada564139c9d9a0d4002d77402ce43909b89519b8fad074b0da627389494e6945c0902c738e99acbe0ec981935f167df71ea5f0a07c08124a3444d5017839e32bbd858058ac54295520f8b1484f26635fb5f9703a0ed833fead453bbc68167c64294006cf44028bcf1a9d787fc0160c3eec6e0e7c0a3d84e2c5af9859a98ddcf2e5a8cd847a7997ced2383fbd3c6046fb0a8a99e5f7b64163e0aa46e33d91484af0d58c8aaba5d0c86040c5efea77540462e6a544df4cf307b563612722c739efe73a35a4f9a556973d42dcf3100d6614f02046b809b67c297723423aa0990efb96caa878c1439bdd6e4743f2d00ed2c0b9e0a11053690f25f783a3b9d743981d47fd21cc3ba0d0d6f3197d0659b4ad662789ac50e11c9b1937f36a7bcc741a35e088b4fe81ae96d2d57b1264b57cd0cd1cd45805ae9ac95ac7da749520c1d4bba71002d5ab293ea8c43c23432d4b40c94317d30b686171fbc0ef6bdf051433127e232ce8e8b54cdcf5ae6f7b7040ccd30bb56720a572d7cd29400c7b3fb63dacb1330e1d7ed18eafc95677ae2c1c7f26db6b9c6c1f875a454d4cc899fc5095a6cd2e6591bceef8cbe6ee4aae41e9f6a80325919b24e8e08d4b918862686258002e73c7f372fb4f09c4c57bc1444ffd82fc3b5620a399a2e0c484fd739cac22c71fba8a390124c28be23e1e93a2143b85ee9752ce537c8bfdb6c929feba56f9619ea06d1c79dcd337e992cb9d203f4ce1b408752e16b316e1e84f1504256bf606392280c6cbe7858e76c60fc3e92a8a5c79ec14a205de85988cd38c661a3a6397c36f5f9543d3a95c8c8f39b24c0dbc53ed4ef143f5855619713e4441e4d1ce87adb639583a1fda80b459d25e795229815511076aacbc28aad3ee56a37181988eda023103d32c831ef5773f195ca7aa22ed5d133e5014df5481789076df32c893f2fe1b0ced578457011bc4001cd3bd75233ca4eee5021d552066a68d4b64e0a5caa5b492c21488b90775df796d812d43ee956cd7574ebe06623a9f7dea6f6f71ffb08ac26c0585ed81b6795f380e961b7d006ea4c3eaa2a6135ce8cf9da40f98b83d74af089ab3046b082f25b1d4e324596b0289da77d932e5396e39d0ff2ca0f40a215a5de9a059d45b8e20d9a88ec64963a789ec6788e9450a11c322b36cece61d72e8ba3a415201306623438ced4742827fa575597a7a314097110d71f746d8d631317e7a3fc2d5380baaab5be556abd1486c06d34d36eaf8bf64f8fe8903e80ef86e1d58440e9457a72a24a512e3c12a2aa9f9c27488570c2c02c35162639d8996855c39136719b69ca2837eabc399305e7b9c70564431386c175405dbfb613790a7b08171865c96979d9a857f5e12f175b80809a07c53b60f5b49282fd726d6e363f66b2ae1cdc4f37b0e17e5723c9ade4f0f82cd14c09d60f8675636c212a3fe989d0068485fe6f0e7df908e6bd68a56136a770e17fff2a87d271911a9d307b5bab8cd3ce41919ed7d0993d188421a41a0d9b3f745191f282501495ce4238053588bac0b0a0079c5a95ac43c2171119b21590b06a8ebd982de3131449a4e37fc4b48bbec4dfcc67e5e968254e13bd79e3f666fc2e21cf7aab4a4862107ea7563d159b8b1bcca1ab127d2934322dfa40926b42b06328f40c7423ef0ef1513089818b63b779d540f0f7b63b8a5c5a87f06705333851935b294d23ef26a510800ef43d052d0b608af50be48f271776aa78ef7b0d66ac95f88d8fb61d14f7c745931ee0615bbd0424bcc4a0b6af270d80aad4278a1dcceb1a8403308c6d41c8de8d5e93da623c4a668d0749e3cb8c899d80dd8a83e501c546d8813009983601b541c936314e9b56143a841d1a39b8c697e2af5d1318a56c831262685d47dd65cd7332b02ef1695563baace442043efe13cc907b93ffdf2b891d3a3834be70f9281da2255179d1248cada16d634aa72a7c94949cc5819d0919d6eba08c5323332ca695723a8c37c36336801eafc29b55d19a59739c43952863a81b439b0600f7170d72d604ac8a1e696c86ad4278159b7bf6afda5d4983d1afc166ef990246e1a9466bb76ec906ac027fb67e0341f3ff07271b0cc1b83e7daf8781638ac842dbb2da1e040ca4dd427d0296b29ea4fefe6570f62031a7d050574d66fa4afa783fe683fcd64d49c1b7c691c5ad32f76eb971c46fb8b94f3c3ffe7ed13997291b3e98f35f34d7f8dfc813a045f992378e2c4e5da0419b5d718ced10cefdbacfbe5de2bf92b9a516197c3578eccbf009269e083042aa925e03d2f81b90d1c155f474f0fffae7786a065dbaa43252734f19ac7df282826d5c583170303a4c4bcd37f7a85248e3a60cec54807af17202f0e47c2e7546262206f1065459a249c05100390997998ff34667d464953cc47ed12bf7fdb409180f4afdd72b9e36f7cef97f94535b2f28f97d04c8a658e5f86b0fd8d914c1a9d5ad52ba23dee8b3166e319b47aa8bcb91c990faa0126f858a3de779603052042ac7c17a7f96af2e826550b932c701cca41bcffcba05103e8b5ab8c715f398b512259521097a31437ed5e80cd2c38f2cfc8ac34c41010107fbe943e5355e8ca797dc42345fe70045f817031f306587f7b0258b77259782abe9c599c5ad380c11bb8f6111f0a28c65e6a30a13c8b26a658877e897485e2248f9d50f76bef27f9cb61b9558e1139b2ed0ebc5ed957e5a0486aa0980129cfcf662bdd869a599546e060da1e33f873aaa27d0e01a25d78a929b7303a67b6e566b5829e505c429baf0e04148da1dd39a901bf6c95675e964a4eb976850d6353aea033271c38b4b5ca190064e8aeebf5de832957d2da8b2f097a26a103777a20846829f7f8537d69cd2ae580850fb371e0815fbfd64f2e3b29574b84d2ccfa05e007529f51d1f24757317c24f3bef3f7aa16049f9b9aac980481cf82381596c674cd8f79d404627f934c4800e100d9b822e0a30e6223d2c9213a6f0cf884c36ec7a0fb3511ad7794c2cb1e852a82b59a7e1e80aa81e5b91473981a1630905844832eb4a2d01a6369ea5fd5a71a8881a561fd5c4dad5512163cb4f56bee0156c4d47fa3ba01b5ba084c6bf027b7f19a7cf97433cef27efab79f2159999b4001551f06e957d0f156030a61eab7fed9068113d0d64253b74786d53be5fdd91bff2fb56aaacd393d606d8a8395a0185e912626d564d06eb3e0f93f6edf6c003dc9bec134de55755e459337dfcc515be361cc6a3b58d54a934bad836bcdd4f86b5d6a93e027b5444c54ceaf1c5a6d1d57fe5f9acde2a7c4dbbb2b90f1c89138c5845f965c97999157312318fc86aa0da22beba22fdb3fb109f821a6a7b3f528d94ea6d631779a8ba85018387a0bc53da295cb01003fc4e49ba142f81adc62069e27ceb4b4658230b92588536f1cdd4b3f6dfa8d56fa5d69656d9dd8d830490323ce65a438d287a10f74e6d22636299c110978c5c66142a1e9231eaa289bade1b84427ed115c2deb45ef34413d80656392784527937dc63e870f68c8a45b39c66dd40374954ac10369b471493869afc970b31a893c19de5e8da00bb2052d9a6b1e11c48d4efc428151b3a479bc6ec9688378ae294596ee435bd78f058d6361ac5434f33e67da862efc65196e8ebbb1e32b4dc924b22b0054f27d0c12576e8c99e3003a5854a86461e1b895ba0b57006ce65b2347fcae46c4a686f8d4650f59c4c3cafb2ed294f33f605195338b9d02c60d9993be7c9746181ac23c51c6abf3c393bcec978ef001903cd26c65a55470f315826427290e829e236d3b0e4f25ef108b1a6c38e2c33440a331bb83ea3b39a7824d6e5f2a6d3e87c918275ab8be95b9c21149d45e20462865e402e2c893cdb0f8969e0d2df8084eaea639eafec9ea514ee3d2593208b8a43b4e470e0a9716d7edd7bcc147b12ac44e025806d2bcd63a4359c484ce1072bc0fa99ab145f31c6e73e5020242b4b952b3f58410ffc34252dbd25bfb836d13b0e61730019c2b698a4ea53cc779f9dbb8d737572e3e690cc82caae315f320d36122e7762d2db5a0a9e7ca823cc176073b64f6f7fd1d813020f647159179ce24142804b5accd9505eb59da5ca98512fd46ffc1ca94dd1cd28dcf49a2525a3f93b4ad3c8b29deacbb90fc01e449ebfb1a960d2abdc8e1cac63dd0b81a546a062621bee2dad272c37e05dbf069d74e868c3fea0fb600ca34264cb80e9a17c3cca7b8751dfe105802ef1f3e253bc944eae316009b17d7198f206494d09c30022e34310880f69840577f4a1a2f2c810350b117711ba40385cb3d56b292c604f41661c125d84ef321a35cda215844e1bfd54b35cd132b626dcb719eb2cb224ec1aa70684c79e6543dbb9144ddbd10cce1f6b25b53cd42d288d1c2eaf16da0e345b5f4a371d4953afe63b11e42d4ff1fcc92de1377ee5102866c105a556130232d3fd7b356fd5b949ccde19931f36d02c45499a24691dfaa7e7798a67d2a2573c6827adf589987147f5226098b52ed7754d9b1e8556755b49aaea4594079de038bb850d6a1d9844bd51dd632235accdc92ea214c79a56130572dde142f31a2f89b3d02ce6dee2fee809fc3f88ec31fef4b8c00722a34dfd0216b0f8c685ac266bbef4fff79c229f156025558b007ef0c98354bdc1a249f735aa7ed3c3f3aec6ef8112a7c06755ecc3a12bc6dd544458443e3f9c12583c12b872b3459baac3c16107fbcaaddc26ebca9b649c86645d93cdb81c455fe8d5d73f26b5cb5c237c8834fdf1ae0a97643621af102e8df1793d574ce9260cbc75c12a5776c4c2b99da16f6748719f9c4c68984cd99b4ee250951207e3a7aec247be86c72053c9b6b8bc3e3a6de2c62faaa2eb9c1c8fbe58638b9f4effd134c064472c0d9b8c2c9fa398eabdae1cb6990f4d3d5c0da5ea15b3deb56b11f61511150c26068388f69082d18aac41cd338aa39e561a35cec048bdcbfaee1a6ac7e871036c29a8b51efd78a75b495549b74506ba53ba601e28d768ac5900fad99313c23843e76e294ce8443bc825e7e7cb04eb9ccbced3a821fd6d2d10cfae236465428c2d7bf7736b9b4667048a6c10d176ab3ed4856c129dc95cc70848ce00d6e7db3381a4330d391de2c8bc612dca5b3d28c1b125382b9804be14c32f02952d66a4085e5ec9c031ab6023ba3e11c87cf3bd9f6c6d5cac9dc48958eac422da20a97d81d724924531927aa714b822bc7df4745ca4cede2609a1e35f2413d8bea6dfc2223cdbb327130d6de629fc2b8f247d116b634724086e83e6b4175ccc4bb7eaf1725f33de02b80888cd9735ceaead8044e34a1244e25603f9041b456a16e98ed954362f32b26e3e093e20441be02c06a8dc2e324d652598650e8aa324cf0706aacaa82fedb532a981be4b52088534459205255404cca9584e20f0c717d159894757e30097cc7c1a4210df806931a106417068a54be69d413378e03b156546c8992524284b5ba662985d10a26692607c9c2c4f1ab95ee5da48e891263167ee76ab528acc483ab95863152bf5bad4c9591cad156ab4f715eb5400d69b512e401e4b46d22be8a28dfb512bf99a442ad95fc19a953b95ad1a79152786a75c55a068341ad34312669d1b4d27e237533214f3c6d3e916a15ef182936aad5b772287b51adc230d62014aa95be17e119a856b4f918ea7f6a458aae4c93aad5dd2f0c78e439d9514818a75a1db3cf8667aa95865b203b94cf9d3c9e37e48236c7e4130d98892bbeb3f92f1c6018f66dbf2362e4f3829afb670761ed56974c62fae4cd671554421307d2dd131b413798b2d7241db0d91118a45d04d855dee12f0ed8237b7229f76f9b429f83707bd46467a1e8bfe41393f17921b03b6f58a693637c7be1e44491662a21085b3cf2a448c0bf27ceaec80858786207c01241357d1da4acf221c676747462722549fe1aa41210aea4502cd734728095e808905b495fde004fcb1170bc92fe3647f73e1de6f25d41e1fd8c8308065849c69ca06864a86860257d28014653218060257d32023c293549e54280c9120404aca4ff7e00170e08f05a491f75005bc207f85a493f9e003b7f0f80b5927e96007f7a0f90b5927e1b014eea1e4096597d090196e01e602db3faf3012cae3dc0ee4afadb0160d06fa646ee9f716256d12251625654e7fcc4ac42884913b35a8ddd7d9534b0af8e7a56eb0933cfef33460c203b6407c02ab3caa2cf2d3418566615ac048862a6c5b756924207186a9816f7aea41e8402d4702694ad6116fe7f9574369026667555a697985554413c312b2a19ef57490d6e6a1a809d72528279f038a8be1d367230ef53ea67f0e0ebbe97d567ae898528e403251d781f5ca9fea6559dd581ed038e1b9aad8b7157e1060530ced82b81bd97d06cdfb49cc831a2b674ec179c6994d267f53202cc4661cb75d9cd4de880310d260e5a7f9c180c95c2da16862b41253b6543fca9a7c8ff7059dbaec0c896e1c2eab0b382a8c35adcce4d8b8b223fb1ca4e71d541e195dd9021ac0c2457e1408324450c0faa2647347f598c5cf65871e1782d0c68582716117cd9b3219cfed048ac192a312ad91215ea1dddb67150a1dacb0749d55c54f8a1881fbcd6bf17847a0f22e7b469539ff2a6dbbc04e7a1e0c0e63168441beffc11d63cf1d4058585ef023e187aee2d37f183cc0b26355c859c17599ae018c7773807ba93b14cca2499c8bc8c1e5f99e698c0fc268fc944deac967fb3addafba9b19597f57eb128f9da710f6a8d8d4480ee5c4957b3373d944293fdb16a55fcacb490d19b74dd4a29f9265b587881721210ea3a8281ac94be341ea948c6d28b2700ca36f38b8ea730ef7e24cd0c8925f0f70fd7a994c794ff1f95e445850b55e88330d2b2250bdd954f975934c550bc1adeacda19c73dbe8ab87aeef2616a9b45a583735088c5532c2bcb6af235e213c67a9ba5b7820001c1f0739b005d3044748067794e365ebf1924d36d8e57565306fae7c1869055a8dfd48d34e48b119a1fbe7547dac3bd256b2a4a7798e6ef90e30f0db2250062af8fe4fbb107b92bdfcb6055c28047918d81a892d54fc3d2912c996d57a484c79a4d88db05684a27be658d7a90c4fd767973c01d18f780837e2d4f0726b611b0b2852114a2a7c87eb7a5958f5491e559b5cfcafad7f4782cab6371dd378d7dd8b362f1abd875d3c58b846e9a977603a3ecaff2003d8f0400903467f26e9296a37df1aea8494a3fa5913c1dbc36a73e2c383c1d3751d0f6ea0a7e7b420b48d4ef1327591d45df669bbf7ae0e8dbcefefc2334cf300f5e1f2520bbd0a730f484f4d2907ff320a4f569a5de70503131f14d9a4554aa4b7afec590dd1b05477aaf64fea36d28d5962d31517c566b564be7e36e7201e4df195ba8add8598cad82a75aeff22ee7888829d6ec088fff38b55c58a2f0ab5c10b8b3525e3d4b1e26e9cb701cf166721788cb155c1531e1100a6a33a86ec76b9f10f2f4f27001857077ab10e8686022582b3cce7ccd48b1b4dbad6a219d1c5e9ec991a3c44a44dea58848d510bf10afd871cac3ad7668c2bac543f230d62b20cdd75c04266a2555c74d18bb321a93b2cf2c3dbbe869adf28bc5ba6923c6a4e2e2cdb3512826c2bb31f17e5e63eb1611172d59a34cddb1e2ee09ffac505ae9166afac41bcf6be664f08792e4757c6155c89248723c8fbf40314c6ae09bef63b2c46a76832ded8a639e16d0d4d03a11dfec22690805a13a5bbb37c7638cf934323ad7096f2419fac7c9ca7a905d4ea6c6f3ed38b22ace8a106a6c733ce58d1c4553f279411f0cf9972e35a48baec55d24cac87c5f1b77f7329216874ad4ed4c75058f204684482b42fff8cb38781d5bfb0c2327a80f4352b8c25ccf2cf8cad9322244e16ec4507e59cf67f459a987fc1642b9113e9901bd3e90994f1786746433b889a8db63b0d2d419625fb1cc42336e97bffbf72d466225e6347da96345d66b2f410fb3f8535a89ca61ae2ac819c2d58fd5a2120efbe4c4639e076c501eb7362d59462ded4405e3d6d56af3989eb23bb1bf816ad5b941f67c85c60871d6ad078d05d40ade0d575a6e17c779345a12338bfb9790cdde60141aa39edc125ed0dce46e008766ff2a2f58be49819c05d3c3fb22aa34d9ec60d0ab0b0631e005cb625583e5af174cefd8649b6b5c79eceaae94013c3ef0f6a593f5d57bf1c8e71a7d2314bd5b68fd95d8c8f016ca3cb75ba6ff0d0ee1dd8840fd3d8801daca7b268e0fe0f2cd58bc24f7293b6d83eab70445a452bda4041d6f6822f3a36073d05f63cbf16d5a3ee0e21f195f19cb0ca05916e1941953df97c222cde9634a2149b0d4a73adb4ad79cd1113505aa253ce7f30a9e42d37984cd0e54e286d3bb959f0a2ef63ec0610f9a216ea751504ea7e0e468abd93aa8c487977482ced5ddae16bd4ed3c3224f60ce034b18db53d030d54668af72f59586b638bd484537fdceb58728bab201f092b5c22e25975ef53960501228e2c51782925ae0248a0a5f95141ae288a7c004973ff100d450c285de9848cbd24a6cd898086c3175e498f01f0b56148f09250403726c96a38d14e611d22dc8435bee90685f4cccf59760913cb66d1054b43972082373242e42bdecc643bf76f03725c7e210b6e951c5484ac0790fae98a854549021ba6348aea59e67cb6f898c7828f8fad9bd3d6de2a9547b833c1f6f68e64a87e47c7a5f9d8b0926bd909abc27b59fe2f7fbd42c7a3b8aebcd0c7c907099a1bb4af46ccc5fdf3a9cc09930b6fab39ce549450b9ba7e84fb8ca6546bd1c7a72d6c8daf094522a38e349a7372f61e70577de8ad24b5ba4c79bb18230637d276f2fd53d4e2058b083c348a8f55df5ec078ec53c4e141fe9c7309612a137bb62b2e753313f5094981c860e0f10395e5311b460dae31b188f13f7abb39df76f748852f1a337e049fbc6f4d7e3e66d005f5208120931c07dce29e9a051c85d65825226881614aea76444b2e09b76a7ac4e8b9b61c472d62034e765d1c80d9289644d8b64c227bd474a8904d52471af8a3d2a1093440a0ac725f828b8868447999040a030c8ba7373e8383193804549c03eb0feb68dd8c7a3bfdd3fd1878b04774ded80c0c00e52515947f3acddc2a08a0e23c1a897c2e57d248fc86056b1a0a3d12d11d8c492d37f57ff31f3d8230ff441e0c0b475883db19117b7046178cbf6251c0b22dab56581454e98173a8481fbef68a2ede3afb8e0c1314dc1d038569c3cf50141a26b0e2e265b880af3b554fa91db643ccc86f70dc752347ddbb4d8fad141f0d8c0d8772c23a1bfd3b18e8f3ed8f10bcb7bc052d631d0648a09fa5821f17b8143df1a6791712c41160f6af14d40df679a81637a8c5d7472da4b4e2d61c724964ed0477521edf333150212795c341ee31e617cbbcccb8d5ad4213c9256ff8084fd547460c5f99cc8210d316b023cc19b630a734b017c09e80609464f0bdb442aea6e0b9eefb489548c5a582d1513695b08231b527e673f97c3f3eb2ca272e1610225e9b7612e8b5ee2e27705b7109cf14f6ad8cb7e88892b5c470532419048ab2a88ec33b7330381fb12318790b560ec720d59510f71a5a53a93e01f1754d7416d2a5fec336fde80aca50a05859f0f74da8470bda7e0bee88dd946844bea112d11da82cb83602c10c515e384709604e739cc8500b93b9e8f7c3c0faa0f3456ee86a8aa3fe3cc7cef5f80c0cb6846fa4fbdfb649eff15661ce4e2d9635c3221d7eab8b538f79b09ed0b5414eed1ae0da1598faf631cf98922733fbe86de4baa972dfcbb908f6bb14fadd2d7f2fdce28049200bb1bf7a8097409d1f77146b012564c33079cf9033fc60763764310fb9c5e80d9983b4c64baae31be209b58164413dcada85c0ddaa314f4150bd1c42ea99d5539c1c4f40c706c795a700c3d289e270422c79b1086fcc5df3a3856f04b85115d38d2e04eadffe95f273bec714e2c011c6eafd09247fef4bea67cb66e0f1c43c0b15cc0d76f97d92adaaea339e44e3d6b3f8b30022d4ac2cdcbdc54e272a50e853b83d5e427644eb901649a042e2f44b20d54107066351d800341213804af51aa801208e32914855229a72804c1711e0d2e61ed8436b15b4ab22de5f65fba91b4bbc94d986ee9f081874b267c7e5fb5a5756afcb632d029e8546022fcd0f83a26e65ab4de64a7360f380c1c0de20fbd117df093849f29b6e4f7bcd17dfc49f263eca2cd1bce3265522dcd607933ae3ea238797818b55a237834824dba15d0dd39dd7153baf3d1b3e62da70ece2f8a93d4e96eef8e8b82337e190d5d9c8f7d26295dfe2249b3588e1ed6d216d94cd0dd47ba2b6de96e1cbae37afcbeec4ed1a7dbec4595de19769b3d7c7a8774c0188c870e1d3d7cc4660c06448720030079c4e68f1e3d401d80c08080af2304127b1f3b7a04993a60c6e5d5b9dd2dd45de902f87a302aeef078783b58f8730da6d3834710f007000b0730001e3f40f077b0460b7ab07296a9ac7633a6b2bf3a567627a8733f146909d3f9d1ce74f2b5b0d9dd32babbee8ed1dd32f44c77cb74774c77c37437aabb5f5ea6d0e8aee49da94862fff2fc6474b771d12d4e9e1add6d5374774d775b13cdc37d5c6977c3e83ed9d832be5e68471df08db6eeb6263bdd3d4377dbaabbeb8b2ec41fe6a158da197695639af2a30f2bf537b2e3df173969b84bb0eeb6e96ee31a5f2f8fb16bef7dafd3c3afb7cc7fbd5a9a67ae3fbe488ed4339d37bbacd29ce7786dcc67e9d4dd3574d748dd4dd35d3bd1dd342bc6ee1b59af650a4e7282f87ae01bbd68f3ea8017eb805614a74eedce0ba36277bb7497bafbc499babb44002958b8c0050580a941050a150c7cf024680935188a11c10715664422291c2904a9328386f2c0c0c4163fa2039c800992a302c18e2a33687880c791b807070210211d31029411601a2045a6a94489e26a0ee6015374dbb6335384112577c98952f2cd717a4746c651322f302687294931b98c6f3845a07c2ba166a044c14182003b9cc3e04841da76384782003b3f987cc68738198fc1e99d9919878971a46d07468a0c4a8a8ccff88653048c6fa8cd8b8871199cde8189c199b9f1e204701571fe44ade42e335262dc0547ca8c23e13b30becde444e17cf32d474a1146700e931385938284efcc38070308ce67708a3082f3989c289c977e18e2bc34038383b4edc0380a0769db41790c8e142408b003e348db4e8ccbe0dcf8c1e4330e04e732ee822305c504cace4c4e11510cc5f8e645c0384e1131be790f9c0b4eefc0e0e02011c5b6f385eb25a7e8895ac99fa899dce4dc8d1f4c4125df600499dc4f50361717149ddc94d32e28dc660099369d505216a080ade425d3e60299deb6a2cd4dcee16c3026938948c961fc05657a8131712f2f309c6f30a89c22ce64329938cef48468330014d78b0f2677796254ca1cd19313777a823ae564ce005050ce9d8a4e394425df5038452f272ff9e652c8949c3bc178fb707ecac1b9d9e42e39462577f1138e131b57918bb72b26c7c913178c97709cd8b85c7232e782f10d8691cd85e25c303944262742e53879e27ac9e1dcc585e35c45ed1dc35572d456ba01aa7b67c3414232494142c20605ec94709088c209015c4898a42045e18400aecd9130e544e184002ece9b8a8b632283e2803c796244c939376273938b3f9182e43ba721183fb911288ff1ce798284ef9c729e18e1e2313948bec3394c8e11a81c24dfd98c70d9fc94c379bb112e5b95b161013644b9f902c5a94e6e0303b64d0817db16ba9294238ee00ac021a1539b73311c12623ce6e60b27578ccba0bed0c5784c4e4c0c872587c372a385cd63884c515c31be798c0b8e09c9940491498aabe49c9b904c51601481c9312561427a9942c965b62ebae862ebe2a68b2851a8a0a28b2953bab8e9627369d1420515446ebad8b64d054b74443578134e4c8181e2742382ae51eeee2e45c90afdd22fa617d32aca0a89151211ca944429d5a6244c4c2075442629b6dea294548dea128e290994140d40828b23b2bc6871712f39a2b8bab435d72e2eed27180540394cabb6a8c690230a0c220d8383c2e1b44099a234a02b39920d0e4b49d59eb2c2844a59c101d9bc9d2855c5d539375ee84ebe715abc683955114247b449b9094257641b22e2380f924207c565bae1e3e22f4e6c378a70ae17df9cf84aa99294520ac9758a92a523eaa4cd65db729e389d4c505ccea54aa9552945b472955c2bd429ca4d968e0865c5490a0c74513a2d3a84d075900ca3630adde67af1514a959c8bde5c5a4a3f5c72885a0b14aaeb6c6cdc75f8682e4ea753149729474b7321840ea565089d1657898b192d5c6871e5cc68a9428bab8483abb4a1b4cca009974c8cd28c53957c0be98242a15059665110b76df36deb98d83627b6263ad031d135f1f282738a42d45b8e7acb4ce4b09480b8c0f8064513ae2d36284a279fa1524a9576d09ddca506e9a5344325277440f795522517a2942a6d2eae44e5880312850372f2d2290a1514165412d1cc0c9528418204091224488d248e83d142c94ba51b2a74250ecb1525202f59945425d722cb165ab878f1224a2fe12a212d51da3121e1e0da1a07242e07290b0724498babe43741e8362ff58c125c154a5b89e360385329e70859b2dc4081e3361f1c81c50747f4c007475001a493e10bb88201493180f8cd0eba195ee38e330367a689192a34b849896e2d112343a6460ca7e1260af40e319cdb5054361714150e08aa0aa7e2505c0d1c193132dce4362e23c365626464c8c839b5aae433b2a0aa7040382dadea969191c32575aa94a5779462702e19385c5277ca1443864c8d19a6d229c7e6031d0c279a69829b99320345a924030d8d93175769c6899929a514374385060e11a704171a7088562e6eca35d1f84c13251ae77cc6899929353433546c9b8dcd56ba1142131f25a7d2415895525c1057c955723591b9f94127d340e84a7e3ad580b273c36b7ce886d7d4f88d9c52ce500d7ec36fe43cb9e135e440d98911c4c5d5f80d270ae22272259628fd80e1363887aa12a4f42386732ea487265036e0d0f806e3c589669a082204460e0e37706e94fcc66bf01a9c1ba59c1b3fd4f80d5f5283dff80dafa901e7064e0d0eaa03a514876aa294e2504c348b3351096252820372c339140ac5255141d5e050e92188063a0ed5440dcf28d70c9ca33a40830de71cc50467e3338ed240ef60e3dc4c13311e84064e0d1b35bce434d000a3060d354a35336c6cd030d3c44c13346c6cd030438d19336ad8d8a081069b276a7c861aa7513323088d49868c1c27db174432706e36d0999ca673184e8303c5558281e2808bd31203e35c16130e1cd79d6c6040e686085dc965ba534e11510cb9b80c5ec4c963382aa7081797c1512eb3ddf8e1e4311c8893c7c801c2c5517873c538e785290ab7a5591c91f3a0e3b6e4984c318e42c5981cc6e42893f7c0714938a59713924ce3406493749ac198999999999999114d45332e830c3ee325199443d9e1bc3920308ef2211847c170a59ca11a8771989c2730507664500e5345e9c7e944c34f369cc64d584c3549382fbe790f2513161a3438262ca55416a6241a3082a4dcf4a0231224a5c669f01aaff1225039373847b98ddb7829a708989c1b5cce8d1f6c1ce54b6c50bea4a6c66b72aa205243a5943a79a9868a669dba2494141c10183f75326460a9a1a2c4838ea84b72956aa8e080c0c040e254279f314326a76b9260207139449c16a28ec60c381c0c2233b84c0ce7445d928cbfbcd4e0a0b84a3568b80c0def819b0187064c0d0c4e4d0e87855395905c307c860c2213961957378303c363e06c527236a42d4a2945840e95e43293d4753636251848441b0c24170c120c2418a49a18278241828144844a4225698182794125a1925e3822744435495d854a475493942404ee492ea54e47262c594a3f4a2f38642975326551fac17992ebb4856b564a9d5ec452eaf4522a954a3754e85e9c7bd9904aa9d316a5943a71a746fd50da41e5a06e96d06d2520286f189c99920af5827323848e0806e925c70585eaba524d92094be9c78b277157b8883a534c151d110c120c52e947124cc04c29fdb8513ac12011c174000669862be1dc044186a8b3eca043d9c092e43a113d918253a14e5e93a445894694d28f1b2514514d92ebe42f2527e272505b14ee74229a71895b6c4a314694a0702f375e70c1c201d976fa250ba7dafc458b6bcbd22e3336924e377eb0e1337cc8c68c9c214ee6b4256d7e4384cec4040c93121ae8367ff19817295164948b468d6fce6591512e1aba35e31c127a871abe350744c696a384ab0667062fe1b8b868c031426d6e6363b2e1b628a54edca97b4bab4ece995c3538dc169da281638472cd90c365e9d4c965e048e1b4f48e9333c088283b325c869b0187cb42038e11ca6593c369d1a993cb986c70382d9a753a39e784d639cd701a384f20a17666784d0e97e5c42535cb756384ee0443061964f0120e1187e566035dc94f1d0c37c580812ac12002c329c1c58812941826981cc898fc460859e8665cdecde1cc70eed29dcbe42ab96e6ad0b58b977eb8985c870fa219213139352e1797e92587339db65045072f53925ea8c821e29236e71cca8ecb9673e30793733e64722ee74914a61cd4d08c9bdc94f3c4e4333736e8aed0716e9a223345e947bb0c14ae928c14a617177fc11284d34946464606e766039d8b13bd547932e5e43138505cdbcba94f2f59e0bc5c514abd6039bd54e19270701002e71ce72693e948e987c94d28940b8753729d70da7583838e68e626075ab8e478079552dc02b498895995bc942afd184311ae1b24742eee330e65e7e59473e307199ff121199fc97912c5c99fe40ce53c91c981b263c2d2b938e735a5944b4ee73720e860728c702eeee2f2e28293e374429d4e279759a9861908ba6be29ce370724431f550fae1d26466e448e9e5a4a3072fb970701fedada53443812b57ae5cb972e5ca952b57ae5cb972e5ca952b57ae5cb972e5ca952b57ae5cb972e5ca952b57ae5cb9c1e2068b1b2c6eb0b8c1e2068b1b2c6eb0b8c1e2068b1b2c8e707385152b56ac58b162c58a152b56ac58b162c58a152b56ac58b162c58a152b56ac5829c97407dd10a16b6f1e6a24b938992a64a8c850d12cce6f88d0d9b8d14129c60c2a382031a890498a219314432629864c528c18fe22f3f2f2f2528a913423890a0e08979494258b16a21949584e319238153723892846928b93499a91342329694612a7e272886624b938ef1a495b89c31283ae944394616e3cb0422ac116979b1874442287e5a60339a2705b38184ee3e28292e19b0c2f2f3164a0b8c0e1b6f8c9a55d2ea6929f648081d3a1545b3614ca73a06670b69c19207439a2a8c68072140704c66de0c4c00092b9f141f7e2a6ada41a831125282e9c4b0e641a48d70512175818508593c941c5c8109313e328183ec4b86662fc0546015e4c4a2cc1449f4e2e3088ccc89c4e2ea7189d0c9a538cee743a9d6464e0d0c4f02e46c965885921f112835482412406c6f4836e85544a41e1c28a18d38c69850417e3a7182019574c4e0c8e8b8be3a2f423c60b33ce6d51fa3133136306870aaecd61b4e0dadac509aecd5f38174785ac5c7fac4df2f51a0206d8bc5fc5d2a8d2577e1cfea5f8c3577e1c560b7bd5c019d2b04ef0953195e54a5f6f345fbc7f1f885aa6e2ccd72229027fc653ed63d6b5e4bcb48e072de4bc34b779f2e8de7ee0210abe5eede6fa3ae41c75fe6f86e9e06a6946ddfda952e4bcb45ab65a405ff8347baf857da618f64cc4abe4c13aa928e2d28a25595e10c7e8d1dd0e170c08a9811027bce51b1072d4dd13c0e9070889d13895c6789ad6ed6044eff076b0c46a2f35aa3fc3d3c8acd502e9fd70be1191ce2248c297d53954bf680e3dbe1ff6d4c2a7b5705625b9be906b004b188010fd0abfacbdc06b637f3f16d6c741800c89e2e4a985f3938ce0d12bac8f811ca1035265e5afcfb6a6bad34105edad6b635eadce97cd8c1de320823aa6abf0a7e779ffe3d1a3fcdcb3d9bf888a347f9a7b31ebe38fd7c62af5a739ae0ffef58ced288a4f733c7d754beb7f671eed8dd118cdb6867ffd8de64c145dee39161d9796666bd191d2c3bf1f525c2d8884a709febeda9fafd26c2daaa563eaa1c72c129e26ee367b8f7b2a519c9ea7e31db84c79f824f9b04bf18f34bb77e9245df57d1efe2ae531eb3f74e0e13cbe688a30ff59ed7d700f93f366f7a73f1bc29fa738ceeab376df8848f7fc5b95fc2deb0b857f3f8bb4c88bb05995bc08a33ed9fe549af1f7d4323912b97606d6f949b2ad75f2e070ee544b33697f421bab948575741461048f583a72e898d101828e0eba4b32e81cc1d7cb475f299d31b7f98848778f2296514cb35822c1f7e90be1fcb23b876a319aed0f6e27ddad43771e108d133e3845f26fed0e858fadc813f684aef0b35d12be8f87316c52a3397b987fb6469ec572c63efc4ac7fbf943c7a4f8b31fe9256bb094c51efeb5197b77c6dc62c7eec92ab532ebf8b35de21e8e4c3d467d35c37326ce32832ef7b0cf9fe139cbf68722f96c97d4c43b89583b848f04c9aabd4c382ed810b4b2c10991e480841c50900313eda9527ef458957277daff18a996e2199e46c6cf3eb59b2b91eede418e1ee47822c712f87a3a16b75ad7be728e592bdb0ae6f001da23932ea932faf78dac5097a33b4856a908a3423356dda9aaf0707dd2563a6fcf0a72e8ee19bca0bb71ba7b04dd1da5bb9417f87af975f02b7c1bbe911d6162aab5d8fdeb8b9e676d8af78d80bcba52479a478ff0ab8c0aa5bcdf88e6f9835d95ce194f6d8a9f045f4f07bc983582473a2378a4e3031604880e1f03d009f23ce6fb781d42203c62417ae8f0c1baff1ac1a36a297ee18875388e747b2bacb4c857def2fbb8bc4f9642d81526094357c8e30a5f001ee86e01dc04804a7777901fdf4f1168c59def9be169e4f3d5f7799d2e4ff5630748c95a4e61eadfe7d36755566b53fc90f523cd4147138927ca2ac5fe342b8ad363762c477a34c798f5547dd153a5bc1c9c478fcf8b66feaecde02c22abb4fe8ce62b5cce86dcc3f4e8597fc94abf276b431f5867c6959622e93c7ab8acd2300c3f0ca7d78e2cf978ee78a18fabf645fea91eac539c3ba9987d2228fe88a0d8c81fdb19cdc7cf549cd5d24cc3707a9d7e6d0cd31a88274c55fba294d77e96e73886e2cf3cd7d28e329b7d7527163f743c67e444e29e3fcef627db9f1761b32a11c9b2878ef783ec4f5895d48eec0d8a892f647f5eafd7ab468aa11d5ff87a3a00a80000aa177e069fc47fa9fb9316c45ea95f9bc137f2e931ebb32cab2f0a0d816ff47a15cda7b55ae19318fc253b45f3993c58edcf7dd8f8e32b3ffecfd6e8b1154171624bda4bbedec85e929c98863648d11da4bb277063047cbd114f1a3863ac6abd7ed1cce25ca2530bc3597b7a642f894b3bd6aaadf3258ab4e873fd31834ff4377cb096b6d6f9aa1dd94b7637b79960daa5698ad084a6294296a629c2154d530424d4f044142df8aae1eb6e2cd2993f7cfdc7ba1a8e74db58adc147773f586d7de55a5a109c35d88416fcf0c696eec6b52f7a554b317efcfaa4be5f742ded158bd91b3aa896e6d7e70945e3ee9ed1dd0d251ae7faf7679576378eba2b8dddf8fa55134972763782669ee1cc3f7637821041c51bdeddafbfd175b59d0d2f1a3fcdb4e4d3d970a2b391447787af6c45dcd920a2bb6f7467e3e5ad901ad94bfacc33f45c92957a3877f0f5583a5807cf3b49911ce92bdb701689967c812f8a16ecee1bbaa3c18a760f7f86a7883dbfd46c8eba3bdf37aa1624c92f86699e18bf0d3d87a0cb2a7d983f59cb5eabd3f125dd5e708ebec37734471c5c88ab8ee688838e9394481f741d77f2e1eb6159a5b3fcba4fd2fc63dba0bb0fd09dcd4c77e3dbc3fbe1e960fdb5e02bacf376b71041749b82d8907457a336bede2cd33b7530695529d2da9f566b87d1fdf002fdabd51ac1a3f0430b56223da15025428e60935c5f084978278d5452249c3be1dc11e92c82f1836029d4ddb3ee686c81818189093f673abe07e13f1b82818189c9f58d887818094f934a5d56e9686fccc3774c3d08094f93fc7f63229d46d3f3d1d7e9f845586943b75874b9f77de1b5e05fbf6ff48ebfcf2735f2f0bd268ab3ac73acfd2cbb48732d9d9c636d66ecf865610973f7a3397af8e13f78f4201d67ad8558b437570b7a09e2ea72afbe1195f9f44a737dec0f734b276d3aa6fe97fa97373ba62e5a0bab328abd96e9b5f492ac998cce7c7a581f7f7d3c41afd443c7d477f86a3d4faf54f630c7e21cafad7e6dec07f7f0f899ba0e3d74d0e1c7fd3cffcadc56a7d92b73fc6389f1f467e2de07f4f95704f44d7f98675c8efeb796c9117f9e20f5fab3ec2b71964e1e3f48c34addd2b28f7bb9b49ef11433be34e62fab74b4e0c3c26bbd526755ab13facc3b83fc3ef930af89d57e9eb2bf32d9f4710f835e292ef3cc421ed617b24323d8249c3b471f561fa070ee643ad223f78d80badbeb8e26d5ed2b52a4b348973ae0a39b63c279347473acce8aeef616129e26ac20243c4d5c5629c60fda1bd4dd01e82e11b1d1bd85217c27be43f81997448ee70eb54c8eef0febee9b6e0e08fda3bb0ed5edc92a25497b43af89b9be48b17b5ea9fb1361bd55801f9f9f242e26dd3d761723020d030313e3e5174518189818950e0be7fa468f411bb22a9da38ea59e87411beae8b43099f32c35040ec2479b71c903030313d3c5f0d1dd1e4871a5371fbdd7298a13f487799de08bb03903f324310d739df44e23ff6a1d573a73b53ca23879bc8f66ebe77f6dec61feedf01c1c7ffe77922c717e98ebfcd1319d0db957044e98e3214c67d92bf5fcd8a7ff7ddafd59fe1913f78a402bc262d65d8e671015a751f5c92f846b7522b1766826a346ac1d0a3f2c45b0fad4c2f95774bd085625a10814fe8360891dd7264d9c2e8a94e6efb4af3e5d56e90c97a45b8c63d6efc3c6b28675fa2afcb09616e6987e7d99df277d622afacff26682f0f39d19fbd3bcce5976ff6b479f654a73b2f4b0be671c7582fe3497555acb4bfafd1c9bdb94eefeba43f13416b6982dcd8553778bddcdb03aac5f044e58a533708eaccf33631dfc4634d3915e327c5bc127f1eb28cb867c6468ba6b300f1f7f321aab96e7737f5c4ef061ee3fcb1eb39eef241d530f62912378f4e5974e5eb814cbb1046388d0dd367417b3822e86ec62e8f7b991bf6c5e9bb1e7faf796a06323ff3eaf74ce405605724ff59e23cf6474cce13390ce6829c7e2acf773a58eff4e11fcd07d025464a1890d3c015f4fa7d5c2d5525c3f1f7dabf51a3fe31aee6050d0edaddab57986758e1ece9dfb46f6f52035baffaf113c0aeb93b8c4a4bde158e2bfa16867f8ef2cd726f8e12b83f466fcf725ceb2d2d7d11c5fe4081ebd3ecf902c8f869850fcf50b003e295404fe8c474747871ee0f40102d1d9c163ea00d203f411f6e8e123888e07c2fa3c6fc6b012ebe05cda22f067a04ea6b2568ba4337ced2c97f395af25c912b37e9c37d66afd48732def4b17daaf8d5d191ddd563fa2034fc02f82b57ce5c7dd6def13e135987f488d68e8367b26c7cf797677f72904ddfdd3dd8bd88daf773f539d07a988ff5ad0003e4644718219dbf195e7ebd2d249019eace5972582e2d7cb26c63fbe8ee698eb5392827fef87f5f1b5456a775290c6be3eacbb89bc8ee678df88ca6e77f7f4081e75370ffeb0bb77321da9f8ea6e17fe8f75770f04c85f04d2dcdd43707e8c679ec9e8d35ef77534c7eee621a4afdafdd249770be91d5ab82aa996e2fb4b1e462f8861a51039d229f21cd1b03e49baf20bdd17c33a8dbc102e45f29642612d639fa45a9a4bf08f88d4ca1d59a5a1688d7c9e34d3ea23ab73061e11b9f65e2249c2fa20fe9e4a65f402ddf9228fac526c459ef033f920e8c25f3af924f54920f16b9d331edaff90e33592c1793f86ebbc438fab25f127a9dd2f7f083f5f4b7e3c7af80e41ca2068d08180090f6f87c783f5e204f10cfaa1030f234354292123d8640850abd56a8de0d1b5f71219c12641cad0e703f4033a3c90e401a41e42085fadb258e29a9831f51cbe077878a0460770d001b17b08215621ad962ca7cdab3b6d073c0e8c8103528034cfd1e672d69f0d71c0080e040d21c42a0821bc3a853850da00141b68d2dea7f255e8f319cd5919fac376f84471f27c1ba8a1812d3d84102b1768e0eba9811a98d802131d58e13963e24806ba30820c0865a03100457b5606b397ac6f54ef1b59992371af26c228c696f49f655cdafbb23a43552eadcd1ecebf9ef2d21bffd6445c5a8a69f58711c1c0033a0c34e99e4e9260e006064cdd3d84102b3c69ae0b30e10253f41042e472d22e90800bfc2cb1a58710c27b7c5673a47d1dadc59316ba96c8c1122358e248af42ea4108e189e2046d7d7dd1ccdfcce10ceb5c8286ce0255ba8710621584102e0b4cc002b8bb957467011b2a60c5104278487d1584105e2ead87d7fa2af44933f5556dd6c2f7e93330cf31f40a90dd8d597f2b6024d7c715e8308e8e0254bcf0f35ff21bea2870d4f4fb7c880241dddeb5310a787b147851428aee8e59af4d9adbbac293a6c4874b3ccb943aa63bba53c2bbbd5a9da35b3bd44d204b7b0f4e008a090c757f2c56c2c049628f592f02a7e8139373763fc83d95acd25cdaeb36749bbdf768caeddf9f0d75b74d7713587577507712c8c2535df2887a32ef53feb3a1214386a852438688e2e469b586e09a90e3e94342848c6093e7d1a3cc74a447866021477667889023bb93f1874c92a8411260123f10d802010f40c00210e8a183c04c777bd673fc68718e176b628827ad9623db9ac33115cb18c62eefc339da0a7afe59c6d452d8677fbc9a284e9aef24af7d911c6578fc6698ba579717fe4a9cfe009cee06eace01561c80030790ed3dad26e63bebbc2fab56745b9374f70fdd215d00a9eceea2ee9062904a0d80a201430de8babdc77306de9244c2d364c5fa6cc7bf2caf3691780dcc45985ecff3615e9b238df97cb54a96bef2907000123f90481dd1832352d0ddb0ee8e3822a50bdd0d7627c502527ca4d4d0dd4dba63800eba7ba83b06901d037c58c016cf6b936cb1bcffd824ebb33c1e3d62d65ddefa3e6779a91d4d6cf64fa5f2bc94af523c9a7cfe301745cac43d9c8fbef565fc6158a7c72c39413cbde2ff55f8b52cf17fccaf8d7de367fafa8f7d31fbe10f53ff2f12de49bb16fb0218d02d00c90286747792ee14b0457bf8fb90f034f99ce5618a84a789c7ec4c56da3bcb3e41904e51b4f98888028c1490f266209dd197d579a7ecafe3d26b36fbf422ec8aa282281880324577b3ba8b42bb7b4977516674b717565f21e169d2fa3e6779d9da2448bcf57dcef25433cf592a36b1d0105590d25741ca949087d5e6984bfb23cda2b5b017a637cf232da3c596d147b48cae62092da3655a46f368197d04080d1c8eb36d465459552107dd1591d4b53a63311afa0cff6beddaf1c769450be2d26b30ff6beb9643f796a366cc79868f29f84cba3755f796da0240831e9e5069b22cb25644d26d84d63d4935bedeebe9cd09e0e2e9cde3fc9bb13fbdb97bc3b109600b80c9012624d3024c504c46984a5997001b9dee36d25d00223480aff779caa8d1acaa1411473c979688547713f152fba29664b3afbc35da1bab51d1ddb45a086a11f0969dd17c85af97c919ce570d3cc2e2884a9e33daab4ef088088d0a2f0f874fcbdddec2a288319e22cffda07b89140111194a52cb4646f47ef8c25314e70bcfd70ccc1306623aea80988e47dd953d5867067eae657a27a9e3795e7f3c5f247d87f0efcb64f4e637a2b87eec439f65aa2b53ddde42fd404a151828d0a091c680d4dd4d33c593190c0f2b8200b1c1f2c50d9e69e3ebe197acd2abf3a5930f5fe01b75a99666bb9400878b8e0b134f56eda5f98f56c83d0c2bf10cacf3eeb82841c91204adc75ee1e3d2064e86890baad40b539cee0da77bf32e5e8072693f53b7d857199706e8de00d0bdd9b0dd746f35740145778574f787b6fea5fd0f086ea562a5feb0eaa1ad2e83cec9146f5e1bfb5aadf02b0de843fbf309e16a29acf0d9d2dd220c46eb86640322a75af02fe9a19de51fbd06db3250e204d0bd5de9ee21ba236b3a0b58580290eecec21ed13a03db8d2e6458509510131f3b0f423ca4a3b7f014613397634d0dcad6deaed6cc8c58c629ba7b06e6397ac651371bdd1b0ddd9b4df756a37b9ba17ba3d1bdd56c32ba379aeeadebde62746f32746f30bab799ee4d6683e9de50dddb4bf7e6d2bd9d36ae7b2b756f5b7fd1dd63e86e3174b717dd1d86ee0643777fc10bdddd85ee3675218641c4d2dfe734039df844f8b8d54a42ca37f30c5faffcf8eb360280ee8aa8b4f7b794556a79788a96e8199edd423a9c3f73b207d01535be1eae4af21caf2d42fba389c4c39e692d3dd52a958ad91cdc8738419fd73af6faa41dfac1e2b43f31a05c02e1a7d7669ffb950694ed4fa596fc910ed1ec91a38924fc6bf38495988a349742374ff2935425a150c6f648c6654ff8341b5622310fc46ebe073e4713493d72349178d5d2f0bd267ab63fee79e47f38165d4bcb5f75783a3c1e462f14fe387fdc0bebea71f853087bb5ee628bc810d08f7b35b15afc7d3e1d3f2e71edce0f2996552b4eff3ec72b1c8bd90fe7cdf8470be672c7bdef2bed018a701f3244c8ccb3c75737c8574384b45a31f185848c7426444e24ce83ffb559c8dd13e0ad96fb8b941c2d68ebf77d44fc06f7aacd5824c779f4feb35c624c1d675a4b1767b619d7320d69e984e6fa14a4b15889abcf1b51d145fefbf06219fe0c14922d2132bf071781f6c8ccb3e7d60f7d669e3dafee758517145e56ac56defafc17ac36dd9dbaa1c6eceee5a36b5ff4122768c56e09b40310f084ce6b048f5aad6ac7d182affbf4de0943400d773cc493ee577e6c44c5f922ff8b445146f18ed70bcf17d8322104d0e5080b9fde8c613a412c0173da6862ecf4c065e90ea95d725f14278f4552cb54a45949cf0836e119c126414744e62d5df3962e215710b6b1ea2384a5bbaf1ca1bbb1e8ee2b806084eeb652842add4d842174d72ebe59a746ba78c407ebe4a9f6a7565d07b0e9c6c100ddbd1d40064679b05a808205aad0dddb1411982068c60cac00d2dd1b012a100490120ef04015ddbd41c00a0050dd9310147477e90811024401023820e085eee6684ca00a1632c0441556badb650317d8b25dd11a430fddbd69d105059e7891012800e96e1307be170dcc8040d484eedeae80f1d881101170b2846e5c7b1f8460cc3c4377eed42449b6e2fcdb0d44c7640adabc3c76783a5895662f6c86e78c8912d967781a316d32587413e1a43d904577c7ba5bd28489a93dd0edcf922aa1053dd7f7960ddddd80ee66d2dd4f04c00f2df812024c07a1bb4d40e816c5f24714278f0e0d8c18c8d8ce7aa340b5747be243774349b4cb16c057b58cb991fda985f367d3adcccbde6eccda4bba7b6d8a7fb726422ee8849ad03d679e3d9d900fdd5de9944dc745778e33b03ecc6b79bdb435df61c887f8d11c439f57922a49729004a9bb55a9e9d8c8552977cf3fcf9166fc6e731257921949ba083f04e9c6e2a4b97ee9e4b1d77f5a7e980f092dbd1f349623ad1489900b564a84ee7e7517a44477ebe82e280b0d561b0e91e3cc38ba0bfafa06f50479bbafbcf5aa95b0560b2be92eada0bb11d01d900ea02b0065d101c90048054014f0167e2a8a936645f163bef216be31f7d2d62f9b24397fd6fad102e3eb7d68ab0ecf070f4f070b16b29ede8caf87040ced79d6bee8958fbeb65a488a80448af696e7e9aa55ed8b52cd6da0bbbf3b2441bafb024b74ab523c96ec58a263c9081ed119f45fa45aea614cd20c4e72a4fe5424c7f934cf25cc57df57ad87e458c2bc965fe62b2be4de47d26cb1381d3f154972fa7dfa335cfad3fcc14a71b63ffe7d9fefa0cac177f01c9e83ffc75e34e53c3849f32bbfb8838aa439058a137cf1e09e5fbcb688ebe8f85f5b6574957179bfef73cf7f96a9d760be529134bbad290f9f088a5935f14e918eb5bcac5ced8d7d3f9fcfece31e2e417182532c657feb574bd22cced9cc30eb36fbf71f7b7d46dfe797626b73489a2f35caf1cf25395af01327d097a9588efe1f7397fb00c0c6aacf0fed69ff63848702d0a0004bb4633164a85b9c3853b1c47f49ebe41c5f31cf88d6c4cf93863f8ef4fb1cd7e93f5ad0e622ee65f0efb520ce437c471349ab158457fca23fec431afea519cf23eeb9ab7c55cbb496e368c154f84734e62b8a695fc4da2125d9fee0d0274f0a5a8c5df627fc24d9fe74d1dd39baeb9942ed7d087b42b0ce12631f71663b8479f45012b3f606656c8dfc486fd0cb6650b6a25058ed0e4f488ed7c8b5e18bb089690fed7fc46969123c8fccf034125a1ea10f2d4f7ea190f6e09e0fe9c5e11351bb6f64414c7b669e3de17c23f783f0bf582629ba73bc9f271372bc46669e3dd5d22598878ae47f917cf43faefb8fe72ca8d26c4ff84a92643c8ff02809690fcdfe7c9e59485669aed3e8c54fd283c3f9464027489c8c3d19cf23a1cf0836f9d814aa7f048ba28b8950aea5e5897d9217497a87e695914abafbd45d0f2ae86e55773d207183e7e98ec7c778ce9b8f88fc2df3ac322a84ff86a1ab24127e55f2b2f78978555bc7be9302fa9ce591a5e792f46b551f0f17e2a90f7bd73a0064d000a06de8820d36a0b1e1c8866b430ddd1d035ae5c039f0d10c0a4a017939fc46a6862b6af0410db8061d35bcdcc0e2c6076ec4686ef8d0d8f0c2091b1cb0c143c316342c4143830f5fa0b1f981cd91cd0d3435aa34eec1527d3b82be948b7446abd5c9232805f4b9efc4807a38ebf395b752cec3593c825e3647fa97dc11f47d8c95aad4773e1e419e83eff01c7ce7969f0fe7810757a586f0e8510a69b562f6f585f36fabf5b239a991f3b8f7790e5e98c37fac264eb0c4d5d20b9bb1796dfd988f17d639c3b4d298db5c83d5c831c3173433d080668618ccf03433cca0a165c9e71ffdd8f497dd390361a5907bd562ea93e6d1a0c18486860f355da0a909024d8d12ddbdd3e3397c2eab34e8fb907c1ee439f837630032b2d0c888a2bb659a46860864fc74f7a96964f8d0c8b8c10a342da001010d0d066868461a9bae0add1234dd0368ba9d18588881849aa689b1039a18962606101a19a44023030fbe5aa77d0d45bb6306cef76b634648f01784f3a70a72577da63705f4f9ea5321d9e971d61744fbeadf8f2a7c168b8559a168fd43f2e3397810921b6ef0c05ac3f9656219fb3bc1af565dde101ffe82f09fe55c5a07a9cc8ab259e768c4fafc67437e834771fe7aae12b27c856288fd7fa4e183b4faef78a57dfd9ce591748603d7660debe3af4d1994a0984686264d9d46061ddd5e28838d4703438b07c38aa698d2c060a2bb457068884dd3c00062c88f1649ab3544b37506023309a099b98146e68a0868642a4023b343230323860a9a981178de971fbf66feaaf6f32f9ab9d5fa3c6653be63547daa1db02fbf5005fa52eef37d5f0de673cef09c91d5d23ca783b44ed27dee93e11759a34a6595ca2a8d09a289f15206a3a56960a4e876d1c090210d8ce3681a9496f6b0eaaf1d535eab13c54437100d2a287fcd572e1a54d79ef86077fbd0342f54744fdafdb0962e9a97284dfb18cd4b93f6ae751e2fa86e98671c7507a771a16287d246c154a443342e41de8cc6c506e6299d4c1268c810212607d0987a684c291ad30b0d4785ee66d2345c0568b849c3cd74125f793256b5bea2292580a6a4034de98566eb01cd7644b3e1f0d5fe783c40a4803c9282ace93e5f2ce10b157c1181ee0b295f00f9c2c462a9c4f00031b8bcf8c215bc188217485ee8e0850d2f640843953070200c621870008311c020050c3f80810730b87c61055f08e20b34b60c610b145b685b6ef08210bcc0022fc0bc00c30bdd85157421d68556175e74f1042ec52067a9bebf36e3cf6334e57835441042eead9d1e67798e1c9ce68f51d171a675357ec62d96c7f23eef6801e9f838cb5309c9ac9802fa523e03ef7cecb53b2b157a917504041029a02f6605e0e2acc11cf4fc139a650bf3d50ae3495ecbaa5689b3bc4f258a93c77370203c07175a8914d36a81dcfb767c5e135f9c46b474e2cdbbfabec7655853fefd6885bedcfab29dd15c9572dc12c5077ddcc31f2e45d257f4f396f7bdbe1dcef2cf6336463d633a7d8890fa339a10f097cc6b6dfebfb1d1de98107e71c1052e9a206b19bf382b2de271d1c4662e7070010bb6a2e7d2ae7209e30213cd85a3e742eab790e4a9301dfddad816a6747bdd16a2587bb7d083a70a539326b4854e2787eeb480c5b53065470bb3c62e33722d04e9a6332d5ba61629b440c0bab539a47dfd529c46add6d0ff8dbd685fb380832ce42cec6c81050d6081070b37ae60852b28e10a0fb8428f2d94b0c5115bf4f40dee5ec697621cf77139ffbaeacb9b53fe4694fc2f72b7d96bf78dde558fc5194be13973519caff9a2b52cec79607e5fbd6cdeafd55983917fc9d5cffbb095eafb927e5efffe17d5895f2fc2a67bf5b7e8aca0457b4340404978bc07614aacb084155c560052052ddacb25cc595ef8344661e02d2d3e7a3183f38808158e40051750c1082ae0c852258b07b20865e92960610a495358620a760a35a460450a2590024c0a3851d8a2db1b777adc56b7b8522067b9e3e9b549f3ef0b6b29ce8ccb9e24df8bf6f5556dab45fb9f0ae4d86667b97bdfab4ef0f539cbbd95c42bfda8c6ecf47196f7427e9fb42b718234d35bcaeeec719677ed0ac7fdbc28241105044401480b2fbc1bc431cf3ccf5b23cd0118c0008a3cdb3a87f8be207e9c425a44408b1f2d60a040032818412189b5f7734c555fcaffae9e66c56b9de6e3d54452f57d292f31a6dee7619dffb7c837bd24b85a3cff82988eff37569f087b63afff58486ba238c3214f20bdfc582cef136c54f8b14e0a0b39c18abed40964f8f9c50ff187ee851f3ac126294bbb92a4486ad29d645304d2a2266069c294226ef390ee9af035a107af09364cc072951c49a2e4081398604290f7e1a389e4638277b635c912b27c18c9d144f2fd2cc18af696d04477376d094dba9b2e41c7126e1653b288d2dd338ba06e2f0bf169cc6b5324310d9550a53d8ca9387ef6518212ddedd9ac84991252fd4a8091042ada0b1fe6d78a4f1bffc3247cf4e6af799893a0a35b86842dddedc9c292c8436b656e6b2d631c48a0d29e2ae5a1572468c0e637a20d19e2e3ab212131a0f1b38f10f0978494e7c5f20ea989e21c224e6cc921437c84601131161ddd5eb51e7eb64657a2f0832b2ab842b637946dbdefe1f04e0babf68a91ee6e91c8159bf17dfcef39c2963e8214dd4710bb08a43e1cc13b820b1653747b5eccaea8af7cf5d54471be3e7f6279736961d37f0916140beff6feed57af268a2e4be4f6475be968abeb8a2c5c31c5cb8ff1d74c9978d888e6150cd39e2b1a70858ef6fed25ca963ec5466842c2ef762e2e38795424658c2abcdaf85a1cb083eac70e1857f2979f44ebf0773fdf1f54654f63d58430febfc4bf35f5f4dc72e2b505869d2edd1ac28fa0c3facef78ceacafa65bb9a15b2caff7f8f0b85091201fa77d15af92227cd143f091ddc113fc2545004011ba0a145586aa7044b88208503a2218f13e58895fe1cf6fc563470e0f0ae7675ce9a762d5d04b5bcb60696be1b36a89ebc77cbc4eefaf37d6aa0dcbc7a4873f84150c61034358c010123004030cc1c653a5f07cf9b45a439e03136779aa9d1eff0ae42c0f87f36ff8cef2543b5240cef25ed9da242f7fd80b6114828d1d04a116041c3e1eff592e63f7692e8a1fce71f585ef3303f3dcf97e96ebf4951d720f8f25782958a97740800284cfcb6479338e6a7155e2fd40053f28e20702f001161f28c007a00f6e5891d41e8f8a2705f41511c5c9f378eeb45a93acc170ca3df04e4c633e9eca739d19d3947fad5ca7675b453a45d15ed1ce68a3cdd38a29f6c78a285f14be1541dde3e3e18f876b5fe423758cc3888aef430fb2f84ab33de0a107347890041e4cc103920742ba1d74b1832a7ae5318bf3bbbc0fd7bee85f680734e8400b3a78810e22a0031d74d0e5a08a1c7c0e3a1c24e12005dd5fed7df8bc1552af7d510b7fa69709acc759dfeac3b5f7211ffdcfe7ab2f0614fad0a1cf5b389c9f04d6e32c4f95c2217dd5bea8d5c2b5f7a1d51ac2617df243cfd8824fd6543b789ce5a9667866ec54258af6ce94acd2e918478f8f1b3dec33f8b1d8ab70aaf645b52ace213ba365b17c3d0e52dddd0db2dc8005dd0d8ebabd59a6b4af37e8a1bd9a98c11bf8a4b9a85479d98bd4885ef2f31427889f878a1262aed6e69528529951493595eeae36c0523bf2309c8e147eb6410f8ce3c95a9ee468c14a5d3f7694435aada1199e464471f20c191212033a726477447182add6500d64d0a00a1a34d1edd55be6dae7fa63155734ae22a79b411466d08119f4ccc0a6bbbd3c65ef35d5f7a5f0a5d5ba2a4c4dafc190783218c014627081181489814b0ba8f8a8f8018324181801060a80c15077e339cbdfd02b1ffde72c8ffccf594378925e13efe7acf9304a9b247e010a5e007b4190f6fe5d507301ce145e98c20a5330d1ddb83c3a7a219cc2def7cd4f14670bb4d082285a208487abfdee5b16408005cf022444ba6301aa5bc10e562083153859410e5250410a12482184142715e8a0bd5690b3bc96cb592def739617b31e13ab1d59ad20ef13e7df8be7ce37473a3f92cea6bbfd5be632c69a612ac2caa0144c210529e8528094021f29d089228b2882104519054e141c1452402104142e284a2898a27b87cb2a45e22da01ea0212fe613dfcf3fce3bc9d538f10ad3af8867ef13e1a1a5f7491d75d2322e89bebf384a5bab4adc537ddf8f13af8e3e2c6514364e4cc3cf591e8c1ebd18b3d9ff8d48717a6f6459def77d1eb3993aa63458aef3ce5236c37f633ebdd2262984829c1304e104b413f49ca046777baaa0d46332470e2f632b622c8aae1c39dc7b11462b0dfd67f9ab0d3d466976e6abeff31accadf77a615a9588f3ef0c4f23a238c1d90c4f23add6d00ccfd9db58f5c1a1cfd0ac4d60849c7f5d2648b53e13d427c939f30a34054bf7a4b9a64ce9ee764d0992dd92747b9f08561dea9ee0c2135474b7b7e4bb9647142748896470de7cf4459e803d81c3389fe81248e1e50b7e083ed99520fcd18278ce420ad2526848ed8b86d4de0721e02f11450abb1f547b1f7cfc283fb42009923ad3f14990c4892f9cd88213217042891342bcda7d23d5d76a59fa2271ca3f95500ae8f396cdaffcf85527f879ece813fa843c071f81134690c4081630823b821f46e089208b7ba258c6fee6b0beb7c3599e2ae59fe9a5ed70967f3c1fcd3f158ff77d68c12ff621ed3b1150e96e4f044988408a088810c1d74384f80d9f6a470ae873d610217e835774e7f8f78b261211d8747be4fc99631c5e73c19ec90b85c08a982b044d74b76cbe5008749a7042131ee8f66e09827fef87b5745cfb2258894bb7395b9ba426fef567e23972e4c8e11dd1d85fd2070c52d266228fe72ce8f19c9118df1f4b5c2d88efcc339c9748ab35f4ca2569ed7d0d191202fe9221414a21e02f098f3eac43e8e03144a389a8e4efaad7a99e059d424423a2010200431100203020168c478462d9704a89caee1480037ac85c904c9b49b330c729440c41c4100000000010000084410001d4430040b59b41698cd39138229bd43c3125ab1b7187a0399ae379821afb001729652652c303328dabc4df413e69ecb0b89e51127fae4883f5fb04ec9952bd58b11dfde5609c2ecfa7c0162ee9312791709cee7e4ad0e101ce8d81e8474108e19169e85ebd5ac9972f6ae5d8392aee7c27730bc707ee12ad0c876ff670428c7f13f25a64e6b1bffb2ff8ebfca1d9c75c26e23e643e6dfca3cae320781fab8735f630b4bf75fe61907b2c74900fbee792bdc54b827b4c7c82adf64a82f1a595abe05d9be3829c2d4f18269c20ee4974ecd0bddb5a56188a5b194d46896994c9e4f041e98baa91c6b01500afba8b323007336cc45214391eac7808591385b5a906526455ae465445279e2a298dcb020b37dbda388f10d6201b23eed9089ea264c0c422530bc8663a31ef01381b614a9d344bcb8b9568dddf3088fc6779bacd8f1f7bee529ccb2d2ea676ea1da348621d2112ee9dd1dfcbc11c58aa6f6fd00f2f502eff5bd07db3102a04c9c46ae5c765a03b7024630e9c712c4be8fe2dd01a86f4bda6a98bb439d42c3b4b8167e3870955a26153f01c84ea8e0676c8614ab438d2a65f7e7dd4cc4381b07dca81cc6725f13654e688d05049414c9b1e08c8e2779c2cb765d82029b1e2e1a6dc8119886a39c21bc819302c9e588c856db05f91b5aa08925b5393d52423c3ddd3b6a8f903632ca34ac30a655ce7b07e32bbfe84b43943bd11032128014947fdd2f11f7658845ef1fbdd2b427e7cd26c5ad6023255e2d65b37db9fec93e08c4c3ec9554f153952802f0eb316c3132030047880e8f66e39829cd893b4f43f175d2f5934fb03c078332bcf8137fe53e90286252545af6142610ce025d6e9959bdac97e77bab650124b6d51443e55e2ec608371faaeb44ce4741ead369fdbe1656e8e865f35f7af61ff189ad963ae02d4bd99bc5bc6c970f0fb4f22cbc13641cee172597afa3f15b3ca545c667ec432ed2e904ec43493b4b0b010ade5b87ba35e869a5bce7ad27a215c67feab1269d37bd59d4355c8ae2913095d95f89984c77d66cf209fdaaeb92fd966a073540477c1f0996cde4b6703e180cec319d9f834c73fcdd1d0347ea2e709c03f37a8de3af2f82922696117e9b2a9f78697c568c41d05d9c5ac9fe431df029f667d0736e7396edd91bbfd15d60def24406a2f5f136ce4a9b4c2e875ad912b949f4501d428caf180251ceccd1f8d4111543598b451d4564d7d21c7fc64cd4af6c834aac34ee021862f1fcb40a4cca07cefcbdd13a29740df9cebddf185a1a2726cded036952996199763ac01f53a40dd436c728c733709701d99d3a300646058c5ba28bae1d39857d668e775ed2ac3638a61aa1969b28d35731ad6c20502c775ecea9efd4506a70e84aafe64e493b8d17b4c41aeb49377538b615a1476c11edfa329ea5e94991294eefd8770e80b35845f357f87f0589798aa0e63eb84b4ea9203f65591d66ce78d9c9eebae08ff157e9c8ae9e44aaac45f814542385b3eccef02de7c2fc975ca4cf95520b89fd5fa7df3e206519ad821730d00c319cbc0c65086e1554de67a02c4f462e99c968e6cf8cdc683c013ca0498489fccd7b8d6593661638598adf0f2fa729b812c05b34d7589cf4f3bce3898010e08e659e4874a7bf61ee7bda68727c952abfd072e40221c9ce8bf0e749724de524cb08f96fddb6b4e1a9686bc43322da7bcf1591e605f9090de95734edfc9b30816249561d2d11580dfb9d2a3936b2701206fc146d9b60a0f9585031e3f1c1dcff6daa6ef08c199ad26f4e30fb99652f929a076da07ce47b0d000fef0e50f00b20b0986135e25239a5407921f1cafb08921ae9a0cf282889544163877bdb98e668211ea9b8833a827abd1211590b49036b0fcfc5f4caffc13a9faa0e70310b24a036ae97f900ffb5b9d05f178936e67267174125260af13ad0da4d6c70baca51dd0b988268c32f936cc33a488ac9473d5c73a7318adc5be55f58cefadc996bf9c03e72f7ea9f27a209e48cc9d5a97af7426e6482da73acb5c4da8cbd91e4f8ce700686e13c119b73bab30b4c84e3ef79a3d883c501957a56bd0ded52c08bc9cf4b0a7819bce8d75d5c3c5def229560d0c09bcf99188fe0619e63975b67032ffa3fe03c2f267dde6488b33e5f4dfa65474a78165dcd877788c9c30d6d9c27eac92e38838bc48d5560d66dfbe948e1ee313a543cfaa9af3eef17f313f0d36910051713a80e52ad2eadead110a3929da5deedad8214d20a4a49ae9bede14cc43d6360241b44585eb146d64dd47e3b9497612849a5f51122002783dcea407a6bbb9d155587a1639f7515061aa8d12a1888d3228f54507c011dffc6e1823ad15d5b7409ce7d36f6e822464d09bfbfbb7cf925caa68fbb27ec4ecdbec2ed63150d07239527babe0367c36026396fd49f1919204f78802ca55733fb043a4bc76a9b401bdaa660c8457a50876f6357acf3968ffac192ff0fd725490363fb70d5589a6c5681df2ae8bef667f3c7c45f64c0ae08f404e504c3b6028bd4a9a7de4fb0a0b7e52a1af52261f4cab4f66ca740576da9a5d4995fa958e973eed1af75a3a03daf9ee98d8f452eced374c0756a10eaca34d77615037d7b569c97ff820d3201d895ee1a588e49f1d342c3ea83cfdafc1a8422856471433a5c88e8e4bb53125128b99240818ab1330c111869805c67b701cf41bd8ece0a59b134e3749f2b2d06708dfd72e4cf5d9971b9171b77d6e36c3ad2ee2ea127a111fbee1ab7ff751fa3be05f91bd43a0c9aaee47edd80174ca7efa44e192f8eb4327a05d4891437333a4b8e937e73c223b8b97ddacd20049a289a3ccc8f1291698ee6ae89e23267451b8f112836d42b962ea9c31f90e7d1690ee609cc5f8bc90ef2811b8c70cbc3913fd92e24f78d43718950b8550181ea53a5f79a4e81af012a2a2a9a55e3781cd5ff79f118f8ca435ca3d644b27ac5d9d07a68749e2cd84df9d78e6940b622e98bd92269f53a84b8bd91dbf19f3d3db55b18303edfff8d241b14b8bd2631571ba60668066769684f3aa598ef43925f7966498acb0923c1ae60fd3f08b197231421b9373e0a60ec5e5d3d155d32b601655b8e585ef319af6c7d5816c78c043eb88a156051881842574a1121072263163421fff9ca25d221b8ee5baab2468cb04cd688a0bc989e707429ab4232dbfea5614b6fe348e696d79a9d33684f31496891233ad336bd515954c6ad0fbe8355e1262cdd438b8ab79013c642ff1a6c68d617cd6a3453e9b6f1d86d8c24f692adea1eb4deff5dc516a8c9159e81d8ab35f99936b898383a4a18fe9f17fe631caaf9247e77fbdc20be8f81519215fcc82fb97a567d5db9734fd93ae4e3314f4a86b2a77ea32bf5ebdc59a10780ff88ec7dbf126545aa981272106a335769489af2f1f20c2e654dbfaabd60a95cde7b2dcf1c62894b8d16f11716048c9b7832393d54f34e6dbf0952c3e402e6e8b32469fb134221ceb1a2f8ae4749e3a3bce35aaa713369319a7b1beaf36bf975c2c9c85d01999be8d6e9b217f49ac1da655896bbb95f7724770875db02cf144f6f62aa73fa3e5904522de89bf9cbcb8aaadd5cd8d00c1d4ee89ab4d296001e340941a290a77de10d97c41fe90ab1127eac089b6be1a7da138715768d0ce3127212c194086801cb8b28ab3750f62dcf71c9b58b80d6bf13c048d0d8cafaf796332875e8c13bbf406027674e7b4dc17e855749b426aed7622b21158d91b211f11904c5661bb9b21c6dd8d96755900ebb09bd7da6a8d6b41dfbeff9b174117f06cd22594623641540cd86a5f8b635121ea1d8f279b26bb62da52dafa01bc8267e85bb592985269dd12b5324bbb81621008b2904faab1cac18b947511ca9272758ca414737f66fe0f6f67c9afd2e436ffa0d7349bb7ee07f242a0a0a5345cbeecc43d61dc03d1d63340fa0e7591b3da4b23408d7f8068e840b21a08be617ce04adbcb57334a4c90b33a3c8ef4c38f37bae2b309afe12f4c5df8b50388cdefeb33c62897c149c48b735fa80ecfd0074b9e54f1fc67dcd6c49f7a3a22c2c59e1915256ff04d7b79b64857d61a4b8493845b3a8ab905320f4a4f20377e1c6beb27198977d0112ef391ed7d540f748260696e2dcdc6efaf952874ef71c620bad516a43a0bc57173512b09caf1f79a62957cff04d7d9b14d3fce64a51e35aa9b549e1bc4955bc420108d40b7189b43f3ea2f6b4f3dd34e4ed681887216d6e48d51466f460dac63fa82588890b386941c6d846e9d7ae642b6d353a52d104a5190b09120ff43e8eab3125460f1c50247471a269c629679ca6865ddfc50c06ae1ae8c79dd3657986262ded226f9813b6868c46056c1edba61fb71f5585021c59cbd219fac94f9a520b707e165a99607cf493fa3e8d15f4be03b97fea6c3c372cec686f4d1c76cef25ce52d99be7bd07a0174f8817e200091ff33e3fd09e675a52e1727b52f64c04f21a1b4019505f8f12bf85a8ccc8aa407e13764b6f63c14ec5c48872ba456cab454660705da1d29f07273a56b4d384e0eee0e98b189d25776440e961319c21c743341f7dc21c697d074f0dc9b0b3b18125718e34b49509538789eb09c284e5322bdcbc64d181be8a09d7314d82366cd85ce12a1abd687b7e83f801588b76d0207c92d23f1d128460ba8cf83b107bad61fbfd966f50de177ee290b21741d2349bf7137577e2be89261b6709014509ce72bdd85778159cb83fc2f3909df811fa57d19ebc565bc3d7387b605c53394cddc1cffae7649279b1f4c2c158ba7df20262815f8a76f061d8db64fab80d147eb2c20b7a658c9f606d1b362821bb2cdb027fa9552cde24ca085640ef475469d841ee1463674be609c58baa64d673d9d951878b7282389b67792007c38e55eca9cd9a379b9fcbf2c8e321c1ac6566b38c0f5b99c7f087e1e771800deb27e41c4ef6706470b4c7af0cb98dbbec7c8993f5a6ea04277b37c23be6656adb134303a952ae59a9b062ae31a7cdc365c8f0dc949805c20a31028f6730aece9c32ea533d7f26a44d448288e70b790d99d506c4cb03dda40f27442f740e56376f87562c51e716c2591e0f8013f1fa82887a8c4b60e78501f7802fc2d5b4040c079fb008d91aa8b775fc6e8879829ce9e6623c745607ddd36dfa27a0938b3e9c49a92d1989b07c11850a7f0ad67a432c4701f3696d6c5a502806d53d836443ada7246744fcb0354441c392bc26214341b925257b11116978650c653de232d0c4b7f4839934cebac619b4641ed205415eb51438c40d36f54e8a8bb166b5fb73820c49dcbb7e063b43e4e5d5119eb8e8492a92773728c12937e45cd9e1e2871f4989d9996dd3daeae41ec1d3001a2f50c1f4caa8d65f59e1653a0482eec5a3779e9c1f05f9efc5e7db0b7ce216a076333bb663c3668337387a0139cf4d3444c40bf445647d3b2ee0d236bcc289b8d0365822adc69a08f39f5adc97661e24c2516fbeadb0df1cbd84951787393e7ecdacdfe941540fbe8c0c4255c4a1fc041703980801eb2260e2fecd1159740a4a340e52da78e0d0b5b7204806404dfddba3140aaee55128c67d15f7b9d359004a46c15f5a9024b3c5741860057e1db93050666561419f21db971e3a6458757b0720db74d083b6fc3f677cd943e5ec2ea050e203f2241d0b8651df299e5d1d0a25fc938935ab5bef62e80ebd50d080bb9963ac46c5f086d360d193913293601d18f8e2a4c3e1dd32355c92111df445212f937aa94a821f108a7f624f730400ad3d4838d96153c518caffe7b92d0f64133765e6f04cebd97a64b80ffd015b656a7a3e7aeb2483bf8bc7dd4f5f8986ae52c20c999dc9edd573c9cfb516865907f6f5fc0c4176cc1a159e523ae9d67e771899bd5071f68bb97197c20a35d35491cf1bd460a1a63e0dfbab414086dcb8434b36a94c36ba403588cf026179609cf38d68cfef94742a34caf07fe0da6c1bec9af700b26ea1db810baf7ff8a2f0fb26073ee41c6a6657e4ddb0b766204c4c65fbee3a329f4d885d9e170116cce4e441ede7a02a6345d46c6580135739b4fd9ecfb2fd5f861787cfdccc5fe1334bfdc36210588a8e655e14fcc6c8df2d89c88b162e22297b43cde44e2dd6c07170357733a3814e08c55032a592a85fde5e9b16535444dad3c73ada77dade134fc90b8ae3dafd722807c8011ef4a94b3e8584c00dc36174d234c57381be86cd7cb79e816d3997170a2524fde460a8ab814bc8d41287a2d178b35434448c8e4cfd9291fcf83e58fc56d86d4ce30882833320ebc003c5cc6230f4b8847ab175311f43832537ad181734181c08dff18f6eb0fd689bcf074817883f64b3cba0c01379a673268837749a7c05bc3b8a1696b67561ced492c7cc8d3a6605434a47477581927c8d49b07bd0ad50a3104b2bff4687688db972dc6737d372d2c9c983ff27e4d80b92ab8cdf30170eb298d2756b30f79ccc0049d9e71632b1b32be022d0a08f4948be36673d9f7d88f2ab23b89b345ae959906fff400eded03875f39faab7127233dd8717b3a705a8ec6208aca66837a703939f26b72331482b7e1191ba8db3cc32be857b5db7d1216942b348975288f619214b30dbf62e84bc5ca520c45c145b44201b1d7c420306281f9c7017093c09c8515f6906c0cc776ac2d64d8f92e010937f779e6c9853415c087383553bbe8ab8ac29ef3daa83e0ee986e14b070d035b996725a564429f630acdbd4ef87a1db09b71fb4414a21ce76123f647ccea1598407d21bc5fe38d3b16277bca8c5d89dc9bfec63d57d02d851666a223907c84135b23685949340fc4b3e5af27492884a20b24536fca8eef0e41744fa9ee87d16972729d6e53241988e10ff09ee01acb9dbbe91fed3463e8fd5bec61e50513d2260b543c23653e0cdfc576f3f5bdda7cebe6d734e14b173860fe334ed7e3938d0793216ec646029accc668c67a89c8167f7b30e69cbd1b668c775c49251e087461cf229e0f9afb65d38460aebc5fc4cf75a0d149117bf61a4c9c1dd4e4a45700aa1d3d74ec9be996350f988a372d3d7e2cc5a71247b46d6e20f9e59f8d0cb9c2e745698d356c5d5813fef4f499d6af61b03032ec65f5b479553d1a267f08763795726c71139d0943f0a7feeeba3194d1218dbde799f4531c629c50d90efd4849a616f131c0a4e3e3b4aad86e143742a989bd8aa19858d2814e0356047967de595fafa6877332b66695feec06932d05a2240296b693c8a3eabae29519214261146ac3a427b38230922b129de48ee646ca4c601c9285f69737fb56c09dcd221f835210dbfee0395e90e55e2816a152024073a2df0199da0b7720c738bdcdd6c536f9406fe007f85960e10f5aa63779b5cfe45be0291e7a3cd7299bf2628bbd0538aea5252018569d41fa58e3b563297e37198a1c1211a5931383a01e090d9391b41576568353379cce2eea6a959bcd31a6d0fd8f51cfc5bcdd919636c966cb821f4f523c706eac5dbaa90f349e3409c5bf18b4d93e31833953b78c1979da46a784c792754423df2eea1edae268f27a8dc4622f5ab17bfe13d9dacf5128df7f41d4e698f41fd0d8d5236e6ad29b161124f821bf2dd75961762618b786c2eaf896afdf3f4fcf3189199d73f2dd274582bceb3be997ab8f12998ed9d9ee5b498f62654a69ec2ae05ac4c02750049ab699da51cfb00687ef245d2d92b029ae6dfe719371371f9dcb8be203d9df49a08cdd2486e54c650c74b7018a1c63e0e7c068277178e256460c3865747d6ab61c9385200e7c95aebb87bc9f7904ae198d10978ee4966697ffa54bc023320d492780e02e5139cb7f2ca9dba02f4599b11b89b4c583c27c830ea745ce7ffb4a23acf35efa5b03dc42d59ceaea691f3d9cea38e196f68bf50bf76169f313eef6f294eb7c8139eed09ff597774a496117110f7a7a52d42f871dffa2f3bf76957c9436e4331058e97f065137bc371a901bdeba5a0b5d4b0d84a3ac70c36e893531b5a4621851e3d2933dce9eb234854ccfee7c2ee6cb77abb88bb155a6ffebd5ef426dced57e8b34ba3ad7832e717862152a0fcb0aeba8823c411c6637ddbab380a9146e74f157b456ea55ebdf9bcc00a03e98a6f94be77e2920e9626e2adfa4702d789d26108f4f105f23075135abc5467de298e22e9e1c51b891e922c7afc63154d395ad9ca93496445ba613e2adda63204588df54fa2f6095f9b2e2aab68554c053c29653357e6f80a0626032f48ca6b5f2dee62bb19177d526db3a95655804d610583f8424657cc213c9adc9b2c851b58ed0f5ce2e0155d17b8735c28b62da95a7c40cd17a10c8ded6030f67bc2fc1b23e3f9243213ed14b1e6608cbe1f272464728cfe81a1249efc4eb025cc08d73eb8c46dbfbc19c7ddfd8ccb98bb726bb185c85027c41a24a091ed100585aa0ec38db61dc6a4c7ff676c49ce591b7ef8cb2b61de06bafe28d1f355362ac9b63352fb28f274d5b9565c07a714d13f2b2b0a68a1c9044e69ec70258a29d3f66fef007f08391e934219f3581a0ee402bb1c3f873d6f4463929ef87151fbb9de98a79f8925f2f9974b180555da0b1fd1c8d13ff40a40f3b80cf96ecd065a79d06888e0cc9ecf067d9e198892f6f348c8b6be82e8fc1b104198247819841163db7b415f737d11c698b791cb8415f27d5fd1a014d5105bee3184eba83f921f35e72daac3d9941edf555eda16025d5d13211fd77fb23ed0ecb5929fb20da1b54064b44c0216013a062222b49ae407274958ba9f6417b6df1ee9e12197de3f4b3c20d31ca697fed0cc44c2feb80e40218335b2bf4322e3a895111a5df6728bf30e51bc34bdb9669bd6ba4c673144e4290925ef9062ffa6b456ff604aa7eb9965b974b0549e55ceb679ff85802b8df50654b82f679997b5736b58d291807e25520dfd90fb6ef9ec236711bffcb7a3ad7f6ba1db1d6d7e8351e426bb2ebffc64ce5e12a279a802366c0db559027cf84f5c9d53cc2ab09e3da5b2de91c734b7224a5239b69f8a956e9ca8e513e58b6eb7ccd9a206286ddd7b1cb2c37b0db8688a4093c0989f537c1b45401b8a53fab88da9148493402c044895799e3ce94734b0a1501a3eea3b7110c929ed51a0f05f81fec98da8b74713cdc14c3fc3fa415c9c4c765853f1a6b7ed8d4791047ad9c9151c9ac066c9d09ef3d1ae4808273f391f78eccdddf81d3f58bd3eed7845b9243e64c456196479ead7aec5db9b456759bcf6eaba43ffe256216913ab5d52aee391ea13e9828ba078e70c0e3194a962505f69b5deb58385e8f3c56c29c78127157526e317354562dc779f4bdb8d0e62ed4c8ca89b1cb65e18d497b09bfbf91b2a1868e3737c9f5578277537fc9714a6c53bc9378e4cac16fa37ff7e9df7c53320d789f5070a455e5c660c352957a871c6f54bc3025d0c7708f3dd80c2d04dc3b8aad5cb6281e9a456e635dbe1e315ff42e75053d9b379cb9741cd42c2ef112ff7566e407912faf7dffac2026b64e7cfcbe7ce627be4449553a9a9332e7991443c6fcb46c4e072b9d83277b81fe1a72c3699cb4180fa7ae51c186d16fedb6127d5119587cf3d4a37155cb4dc57579b118ec247bfc963039c108061f5ff728e014b28127946cc179c4da2031fe5d3cb13cd527aa21d0b3ce4a3a3ddd6256b6ee869842e9985ccb3e54f02ffc1a0c12fec97cabb2e1b306284a7d6df906de5d3c39b8fdde23047341370f7922d4b41039ccfc555f486338f843bc8379c934df4907a972ef49a50d8043483bc0d78ad6ae492eb632fb06bf168a6720077f6a7fb6c314f1c8cc6ee1e8cf3a4a03410e70c6162a23c150c7da6330ee64bba23b58253c598419a8fb4ff5589d2cb328fca2b2102b98535b720615ed05e4eb4758da2398c4dbbe87a8e93a7e87ed0af4f25feebfba1e7195bfeda4cbad2ff81240eff0c157d325063ae9b21719d20ee7f1fce780cecc1d47da53abddaf33e95d756a176db713cf73387e2db7919707a711b57677ed79f1c5e66b23127cf36a317ad1d7e7eba52ef4c0f7cbf5321ed2b0cd6a60f39b76aa6c55300d159fbc8c3ac4879d70d24009a28882eb8fce680939e0b5b88e8949259a0c74b550b05680a088a0c3dc5ff19bd3f5706cb426669dc7b7a1a7b6f59d03a5313303fed6486d3f0d687a38de3cc2de2b15f859c3e3bcb3b686da8757c1374e6c5964fb6d17d61c1ceb31904117de7623d342df9c09718541119cc160a914e1d5f28c88bf9352df9bb347195306b8743e1ab2d82caac5c70e56212f0fea09429a08fd0706348fa38f1558d26f672d4d14c2d9e415a5d0e7015f66e426cd836f2fdde7b7663bd80a0bf86b1cbdcc27761466fbcb36e15d7cea1d9fbd32edd93ebfe62d9781e28cd6f23b578e2b9c3fd2ba054178c2f8ab29e2854aaaa9e789d95c2bf4c254b4f0903001b00823e79caab894c5720e673f56e404bfb877c82872bb0eed7263dc3fb96abca3bdba817d0538310290c98419849c60950affe4a6b84d37ec5f58f5815efa12fb524798af56c696e435370fa8c723947c7d5e5daaee86507bd908082a67b868867d66f7c5b4698802708fd0a2d00234b1fd3d3c50309568711d4be1aa831d05061c94231cb88a112c8e6cb4c2026fc252b39100ab2d384e54b730b137a54d018e5960ef4d0130cf6231c36e1910755170c77e0fa67b71d71500b390062ce8511b685a1b8a72ff43523d97fc56f23000c820fb97be4b031b3e491e9ba13edffd4dd63d9567e718ead717f7e9f71dec372451ee22887b6eb0e050fa70d04a4bcb9b15d94479c1fd80586ed487472e6532ace0626cb7f4f11c4046d76c6d107db8a97dd61431dae824e18299b43bdb3c2cc4a721ade6a007b7b5624357e265595cd113552c9525ee575f39bd2f6121884b378d48d50af813e8f1a98418061d670aaf2a9598c798f0e4a834056f964318b4f0f305b0ee6283e960140392c5022d3d0c73303fc8b34e355844833ad01b5c1a48db9025bae15946e0b19a7141df339b9650a80ce13b47bdfab75d7ecadfbade89d8c7de3a523dd437600848d990b6db0dbf3d40b79d06a7bf876680770b58eec7ada595578cb1e1c7d4f327a61eb6f928784ca8f8613ea50a25ac54ea7c3c745f78c1207c23fcbf157d7fb15ae6924e995a1bc101dd046c63cc52e2ff9eb21cdebfdb688523fa07771f28f4cba6bd3fe82f80d34379e1d017da5cedcabd0a88b14a6b76e9cb41fec14a72c3230cf4e41311dca7b5479a1c98a8b06bb932b7683893c802c275c9002027115a534509cd421a701892300ef3f07a8ed78bf240186155010609d39f87ce4ed8eaabd15297d0af4fa353b1ccb8a68348f03bc73f7f2d9b8d9db4323b3e430a3f4fbd72ad70e10fbeed6553b7c499ae60f4122a6777075754793d058f326874cfd341f41e82029bf997575015ca5925d75717427c7d6f84bb29ce5bfebf1c2ddcdd793a2e92f63cd5c1d350986009879553724928371c60306c4d0562d8269f6e7f86a8671ed7fe09fb2ba82cf4e955a4fed8426d6039e9f4495b72804cab9e557ae41e8b2840d815bac02627a317792b732a6cfae2789c1c4f222e9f5c02b3f0b60bb02b7e3d70325fe50008d2f69561862fdec58ba68daef3644c0f2233055876f28bcb0f7ef78b41b9233a39b6557540c134c6bacf8a333d6415ec8a5334e1baa0e0cda3b0050e96091a34abd5c32475dde1b426a334f8911e561ad650f0e2e53853423054ae9810ea5b8395588941186bf4e497768c255c9526b800e52ea7d58b3f83be564811f01564aacf0535d7dbcca5ab2ea51f5e4ee7e9c0d1c151ab75bfdef0f2cb7ff43a6f2801ee36b4b9aedaf54caf49a829cc45117a00a6d0dd079e50893d6197e7f68a66c15e3926d8a9a470f6d5350a56ebc1ad174732ed29122588c9051ab1c7c13614398c164b9c255c5657e1e827394e4806bc62030174bd5f1bfb89a125c62b93ec992db0e455ecbecfd09617559bc30de041567c90fda6dfa73c7b124dac044ccd7b2637ca69e5f1bc4c2c703e3e8b635b85624e272362a773bf38eac8499911c0b870d0f7e267fee8cd7172de44dce4b26a7c6ed5831ae5cc8f9f8654520ae4326a7699339ab16b5ef4ea5e8bf4cfeca9978516a8b784b374eebe1aeadf1063f929ba5cfa02e0f6a680d38da0a48fe65910321f0c68d4ce9d99c034dd4a2fc60d887b332bf281db152eb39907ccc6e7b43b794bb7d5ba4ed1905a0e0732f1be980f84fbcccc23ad4e0c551a263dee45c7b1c66193eb787e8ad8d48f7a97edab4f8c008910623e3c524bff9d2213bc26e37c5a6ce24b88c16dbeb80208e72c4ef27358c8567000a4ee1a381aa7cc2d990ac043eadc9ef8626afc5942b42ee4572a89a0f1e5f6aff9a88cd80632455e5c7a40b17f1d73d8ed45707fd4c3b72df429da44b2e80024622421a096a30a9a0181892ff11b164af4f84ddefbc2241600ad833a2d6de7aabeb1a74e5aea47c19e6d63e7c0d205028e446e805653a4daf627e314eb3edb93d0673a63728bbf635730e6e618bdfded5d61159a2cc6fceb2dc7bdb3db7185f920349eaaac446af16c820c42132988b8bbb800ece575b47c14f0e0875440956d22915a11952c059f82a9d4f3aa4f135451a02d176621d1085b030a212f164d5f56f3f707ed963d78407a5d8aef7f2cf1d570a73c6303e9c87b9c79ccbb85feabc318486b8ac06ee1fb90adc90f2721919ca1f3eec41db8a072a85d00c1a3cac6e4369244fa38e69c6e75ec0ef1d30f05f82be2bd575611e42983ca34436bca095e744c19706f2d2b1f6c1c42a28a8129775810ecf0e533630f1571c7be8b49cdc441734ebad2aa65656450e4884e16c2ceed88008fbc8dd4ff9872b5c48fa23931efa13fe93b62d687c3318c83a4f6b005f365f30f5eaca6f0ce38031243445c65fdc1be7ec5109fec0efe4503938a3a0c8ba2deb4500299f748993735cf944020ae13be4c05c126cd074ca414965d008908ad92711e2030653e6443dfee6f3d4b10f5e8ae7c57a86f672b0db659b40d0878170d94118e44e8228a1979d08f94f3c88bc67a66d446c1d12a1e196f138bd386b066a87da434ec4b5debef30d7856e8073a33d7a76ce6be64ec02437897fdc4a11645cce863c6781b831980b2243dd4b36e53f04825bc83bc069acd5ea46deab0cd9916a34a544138835534ab23fd931fb26f0d4e69abe6f9a6bf3e347dc7f9b7679da15a4a37ad2f7d8be7f6e3fe4aaab5e42b4146df266373be42447012cf2b1210e757d179a829594a310b4c4b590ef5ab9be3467596c8e00bd5be0106c0b06da50aac0cb1450ed13fde4a9f3ba7ab6f1587ee6d1a611b169e175b7d625c0b47633081f7b6cd910381850482b879e0e6f37a64bbae739125e502961ea457963ed7b81d6c8136ab488aae71801cbab8af29dbc54fc1d9c761f720a1216f20da811ccd16c093349275798538608b8677b9a52ad956cc3a41820e32e112980df24ae5d75c853f71602dbe48febd55e29f416026276168067f0de10f542fb84ac68566eaa2b2515675be0b2438763d83ab29ce45eb17d8b1c8c0c114093d083839db40184e63b500f3b457064456e3307da9b91053112b90c07b33de3a0e3e0708f4887314480cfecec9e29157466055f10a33062956c4da531fcc59f9cb58a071f9da5f1df761bc0829f9525b80d3ac6ecf8eb04a0b2b58285b1407bc2cd3202a8a76872dded71edd1589f67ee46b574b7434f0ff6396ef8bc229b96ef70148ecc7fb9cbf3e47eff70ccdb5c0b3b2fdc77bb806b7cc2dd0f02195f6d8699fe18c782b386227fd85f1cc7202e20ccb903c5c34f51e46443840c2d24510bfac9da41f0fd4461736dee27b4579f5ee19c859678ac4b1df8b7cb1fd410f3209a10dad99f40286237fcd4f45004a1139a044b8498ad71a5f6820eba8bb6e7e8f18c912d2ccecc072896bc58e853c4f1380a14645a84e51b2b3bf98e78bb11fe8148bc667b1024c0f403d202a353e9be2eb93c1062c4078de3430511bac13085e9f29fe99706e2d71eb38bae9a4c63d2cb85a0a82d91497a3deae27ba3a8040a774fb447ce3aa9bfe38c4fbcb489323fed546945f499c6a297b303e49a5a4a977f44db5c846c0a85bb6ac697e45f92b53782f3020b21c55a85c88553830426b4d19f92a3730804cb4dd8c1160209e29c756b23ef3dd023fcefbede10104186e69e09f88fd60f6fdc57750293134399bc9f5d9e6992017c8328467df1fa224c24aeb969024a099deac706b66a2806d95c94efe6a89a098311d44915659cd69aa710957ff59914cb15acc9bd4435d92843bf7e547888c11ace521a18dde38b8128529c1d4790d24c1afc603f3a488991b9310a43049c264c5db23359351c9a3cbe7bde063dc881be092b89063059ba85d8a57c47b722fef8aa55c8ea3e360428f9df8b61df42fab37be627b98928cee76a2828fc2de8dc97672b7d43a60bba3d61dda693d0b7fa9956984193abfd7ea6ba373174b3c37ce63905efc4b9b5687e01e507d115e9d9749c381564108da740029a9bcef1d6125b6629e3904e4ed3bf4910e69104028acd87cea966629773eaaabfa13bef59dae42e69297f3de5b9a0e1208fc87eaf9deef96dd1181545a69938efbc70612abf2db344c872fc428eb0f4905c8defefbf85304348b10a953f94c28a390b093e715e25fb9014a14111633948a63366fbc13145a0b3421c06f53a7b1a45c093b0be28fdf36fc7baffbbf346abb741d1fdfc68fa1d38f21476f574cc80488b70a8663992f3aee1e60b2a2ce460085725b3c91edc5224ff19a9baab9c6ae191b0831b0ea0397682c583a0e107c7945f7d033f5a11f98b98208cdcc7ad5c20ee5ec59c12b064e4e1fcaeff073eae9d44e7e0bf2d34344845da36fb134a37eb039e71d0a8b69afe1ce6548487a5e373670a2f3fb6596b91dcad415035e39e83c76e833c3b4f86b58b2ce47cb97d902f04188cbe9e227be99b1a1125709f7f7490171289e388a09a2da2c4f709c79cc4bfaebc4089a7e3bbbff4510981f4f117e5e8ac95f9738b236506d80f6536ebe5484bbc8cacb38cc310ca7e974c5d11dd3410f918ea93478a2675eba9f71e1e2f39028289c932f68df5118f54cf5233431d364c6f56106d687ee9414c0bdf1bb4272eec16faa715d729818fa7487e1d8c24bb9b160435ecdca71119609a0e05d827b60918bb43a435cfb96cacd45ff9fd6f6e738641d836e74f11765f68ac45e81452ab0c64f0f0aaef4868692ca95169bd5d8c6f5579732121bb9afafda46e016fef6c749bfd42b669ebc62fbc99b4448dc611858a64a8b9cd2192731b681a495678ce4fc6bf85f15be7148fa98a863513c4e8d2cfd8a4786b2b0a37e62eaf5e280a5ac57a5366a5c463ef10b9b3d5cd17943786ed1cd370140f4f8a2408bdd3a1575dfd33449cd4c1b5479609de5f1787a0c7cf3e45cc46eb4c32ead5d33b3db7ecf33a996e508af8dc268725c107eb4d3e391c2e0019ef539df631b0da9e1802e3d07da7e4cce69d61afe548912327701ce3b1b2a813f19e001f8e698e68960092e6067931cd809b5c6b4ce71677fb2f7cc2c2bba18a302cff2fccd23e6a815f2646c80788335abb67f9f19c4cfd18af1424d2ffe25b15efaed5023848378aa2fad0c09cfadbc3c1bff38c3f8add7e1320486bbc89cc3694ae101f32bea26ddf52a5e1ea4aeaff6aebfb1e1a4aabf1c91f049c632ed57e7d9410d0e823b01cf84f46ef73561286786c1f0e87d86301485bb772024bef67c93a4d467e1ec24a227eb80e782fbc9d8e1c9369bc04f4ad13874c4920c7a4e5fd44cd811243aafaa7937d7f176bd20de91e41a80985aee13ee4d9cf776519bad2377a26ec35d4f6bda3240a67da315c9bc48f528222cb607381ccd37ad9b566a38011083ffc433d070eb12485c4aa55b3fe871b0b9704a7aa46adf36613701920bef1fb71f9795f7f273b87e9f205d6fba74ac44d6084fef0c0c79a9ee6ff555b016638e51569684c7e9a3d13d3a6337bd0137dbd8875a6d811c8e98d33487865a156bb93cb1a86137ddcf921e106208f28ae157e35042640d73f15df800c54d4d9dd78cac769bee700a05dffc269ce29dbc03a4ef979374514bc61a8271045a50bb5d5cfa7bf2ef3dce74a903fb6dd7f8942a7e43b185aa8f3dfa390c1f47dead53b021dd1d29a12d2e08c00b6e40191cac476ffcbef92e6ac22562bc0f424f826792b5485e43708b0ec78f6a61e52dc6810ad81ca8b73a82f20359d74833835222dd353cf481c8ceaf0447d941539e1f3b6a12c367c01c28ce8b4f9c062d81effe2280e20d266589c3c8142eb263dd7907899e28642b4ba10f64f5e4f0dbe0c8253c31553efd0e8f09371bb79883d6fb868967ec869f8f4c9c35e1c62f8c78c14902cb89c3bd48cb93244ce1781b750e51c025c592c1983a1e1b5c2fb2667c03c6d8d0c044fa4e7d252182357a823ef590196d2be4b1f8e994b996d3bdd431ff603e6c956fc986a59f16cbc28690253f3a84e8e7a2b4557a2c457c3d442bbcc52eef637572a17101349f68b434fc7a08f78499fc15cc58907eec415859bcff419a3b824b60661b2f14b7734c0559e86e5b80fb83e299e0766b70361ad7ae6210c19a1b7e26d7d138cb65f413b5356204c46d6ef36f91329855f8c0bd041d91a4a9d8249d4302f901bbdd3696eb81d6ecd9a79a5621a5d866dc1175d9a9dc20d47922c6add36fb5fa24df5c1687237de27486e8f501851d7c1569ed4c08742972e124a097c661e5beb161695929e2401c79e7cd49e2d082da3ed04e401d7cee4a7ddba81029007e931e2d9621f672f832fb0c60d68fef7ba411c4a6f0d0700be2d0a092e7a377277de649c698c8f99cc7050e23ebd4820493f3cbe76be637f8023c8836ca6a3b62255ebfd0fccfe7792d8ae16cf8b03b1ce82ebb9add6beeb3dafcd97ab2370740ba7e5e71330845ab4e9e7daa3a58325e74c4aab5c587eaba0527b0a6f240d7263c523d48532f20378b3a6687c3bb0ef64742fe43bc8124b06001dd565dc236b3137109ae96af2ee6c4dd409879c11b76e5b581df40dc0d11951e9acc86b99a416b7e6920cc67f2ca783f2c63f9b5038c4869ec68823ea13a7e6052805705cfa75bfe7d184bec2197b9efc31fd1b876cae8ed1d46ee850e51134ba63524df94327e5b16840d8f68e74464c93cfbc64aace6ace0755dc2afae946cda1fc3496a1e88f485841b05abf307a0c2a73f6b166c1248bc9f1a796aefb714025869ad6d1e72075ed436ecc9d9865e1d857eb8c914b9c9671c8bff33e73a7917e0eff939c6f25ffba07ebd9d9384175846fde9b99067450616275d3eee6c99d9bf8a0f99a504cd0303b981bb04488f3bb036b259e74480bf1332393a33f550baf2b4194c2de60c23f88b079599f255927fa65021e97f63b64fb95185bdfff9119693fc5ab998f6d9a00f9081c360e49f55c57eebf0f50feff983b640a6547af1931b967d915db39782bf6f950763006100eceb6761f416e5c3e7ca06ac6e71e789b2d71e5d29b63b802254800bba303bc8eee9d1385580cde8952101e201a09d9d607e6d38b7a012a47f217bb9d2d5b758b6905923046c47b5a569721dbe0d7d287d760b570c4b4763bbd3e5fc2c3140d45dc6cf17e0387ebc5934669d23bb3de377682b2b97ffba5e123e1b8d77417739f9a27df2ddd3d0b53cdd6a849abd1676933d7eed1c0b22623de842f89093310e3814d422e0043bed77fb1cd21fd5eec4e0558506c9bf38beb059f6f86dcf3132033b61451a9f103190931a2d88191aabc22a96de279cfb1434afb959c07274922f3de3717ad23f25add0c26bbb7826167eb8376141aac18ecf7b164018d116ffcc51a41145c8632a3bda1c05003a50238415cdc475ce941150ccb063ee178e7258afe9020e1072653e8c2e83ff63fda6e5ce2aa5d1b804bf0b95e1316308671ba5ad7d3d7a97a543c48fcf2bac8f5833af9f9a5d16ca2b3987e85b24ef71ade239f151a7540516d5e74148e6cb13032d72493ded5a8289cf010c147ca0d978ea3b614356c4ee74b81d92fa6e88142da23c18f498f215d6f61ccc43737c1831f47d90c325c01d276a6ff4961003176b4972c194be3c8eb331327e93f59c8010daf12eb00662f87ff1f1edb1676210e47ed12b9af234d580a79fe1b88682a94525e4d6dab7bbd2f0c9c0d618051b9098a13fb2967ecff64cd679b7679fafe9e65c8f3cc9ab92d32b01a3684c74aa151eaec1b2e7c324cd0ef95ff305683df46160ab2177010682b9d623996f414133b7a47241afa932a8f2aaef1e71a27967dd7c29a259155b84643e13884f58bd530f1784866e866c26119023f69000c25597da5b82834ed9d95499faa45367488ffabba35cf1a3845575773a08ac8679c8ac25fe3ceb206f71e63ee66fb8be6445fa8ae888a2fb736f659f2aa0d2f61a9d6f63e46bb23c7a28dfccaf41c31e66dc2cfd679c4f9407e22941e2afaaad138a876214086674ad4ad06db4ea26fc56e0bc9d0f15acb6e12f1e211cd7c798a3501cfa67ddf5b9f6362fea32b04ed88ebeab4ab230455043b9eb1c5586f3935d120dbfc96fdd93066cea2765ebf0332380383fff8d2037f41ffcdae059cbb90e9b5ee6a1c015e14bc99f14e798abd74ae6075f1af84d7fac8b3d37598fb4fe9fbdfe5689d1cf8674e5039157fcb0698de57bb4059fb35b5c4516b1ca7fbce564527529d10c191dbbe041de448a4ea1b813eef3ab7064a5bc8848eedf7189a26b2723fef1b5a99415d97ddf4a08773b6e339446c6d68b862d805dec0d32468bfa77d36fb2e0f3e015016b6709a608a2977832c85b9bfa3cd524df608a50a4460723254a90f38922e687f52471a4c370da07a79bbf192382364fd81fca3f9b27ef2dcb4ed8fbd50dd993cedb58374d532d17298214ccef3042db7f0e5ebc7451013475affcd04d1396c17090277593a7ae3614ae7a12172a107168854a813153d8312a6f290966d84a389829684d224e88c41bab0f98b0a8a249061efa37de28018bd38126e1ba90f61736ee8be8a2ea128094ec5804bd33a10759f0421849196037a30142f1de77bd28cd2563edd3da75a761fd73b4dc5aef1175a3769383590778337712df93e46b832ae40f63490534afe946b46a573af9f13a298377ccc301ac86cc3f4bcbdcc168f381881e1773f120567f527570ed15a8c6fb18f757f2dd6d008aa3d41f2deaaa01eaf24b59ad53820b91ff34d23167457b5847d9af62fa105357f298c7da198c3e96851cdcbc9bada59e4ab40d3c0951d198ea00c3908c56ef5174e14c84ac08dfe91210f2de94fc3312c75acb9acd8c2a00af89313e675dc24b377bdb382049507af6a793857ac651e224cfe2ab7fb5af5863cf3fb89f73a33443d5833eb71994a7b1e1b340f32fc53e8c5549a74780c4830549fbd9d1f63a213bcf4bec8c57a05fa79c969aad1c1082bdea9b188dc619205ce98b245c5889766670d70b08726b2150787f9ffcbb65642262dc4053e4b8364cccc66aceda35675ae213f5d2901b2b73cae1c9afb67260f0bafd2f84719b0dd08e1ecbc87e7c413be6c660b4fd0a25ac5a6cc84f2ba6e329786ad82eb7206e39acc2c07e7c18b1ad50e2f3619107bac81bcad6ad8fb6ba61fa5443fe849167e7c27d13ae8223a0ed9b579796a4372387a0eb0b1dc03119255b626053a360bdee8b997e84d4afa7c8ee602e53c3dbc3496466496e1e9d8fcdc0f2f0ce552d86634bc1a465f111e5853d87e67aadd2e9fbbf8ca2eb6c91b55db61ddd1d334ee4699138194c554f325cfe22972a2a471695f18714ed4faa4a36b3c02dd541aaa0d747cd49fa256690e4ee12ccf4490e4ad84951aa76a9b910fc9c17fe6c7a7084cf14d661f4f9c9b7778472a99ee42b95c0b05774b2fce073e9602c9261029e7d0e0bd08aa5c115c06eaad10f31bf4248086e25a2a56393129088dcc02d34e2382caee1b83cc1cdd2f17389141692ba999a1510128ecaea5405273098e5472d108d8e65b8f3b6f67376088d825fed8b7f3fe8d180f568e7dfe5cb2dbf07d8670778271cc27c1df3fd9cca6abc3a98196e5a922afc640917fc1f19a9a48f7a772b6cef6c6e51305977034ba8cca02cbfc1c2ac9acf21a02fbcd97479768f42786941326c9149c7eaa9dfdc1bb241a0805bc78fc57a2952f8896442d6a69982f9d02a7dcf1eac840eecc11ee61eec10c7218cf19d9c2c26c7cf95e78ab2a18a9511311636069307891e7cb88a9f3e49c3289cef0513bc643d16d0f447acc55323f283750fd2537fa2d0189c57a38731dfbc4787578f317444abfcc606b6e61e10296473457e230c24336e44e6a19248b848881cc6da9f06b5b1538a3ba8760bcdac4d7f95b517e5bc12afd2f67425cb2b267a4ab97c31cb19ce9eee1b5788f0e91fa9250cfcd092fdc294507396923207139704dd3f0f9b0c1b0fa92bd7a1cf978453393013bd56b6041c5b300da1e38751aef1f47fff0469d2206a4df1785398e5bb79be613147621eb92dad92aaa1d23f4b37c042e5a0dfcf200c7de92a21d2e9c90714d8e138cc2822c65f16b2e8c82f2573187d66ef4e1a9e0de534904f2837d208fe8aab42c7ef4c7f5971418caf4280e2a98b7632bb5fdabb96b313d36cecaf022b7d9d3aa845b475c0c41a64fb244fe14cd5c07502e7ead5f83b730fbd6c87f1a5779e668e3db8e371760fe6b5c87e54a367a574c3b99d8a81030ea6711ca6de76c7e24b3ac3d2b23dc8691613aaa878338a9ae154071dff797c5d385fb4a0ddcd8b4efefc795b4cd2d9d37632f2084b61a243245f24a34b08fbfaed18ca2d4b5abec1990f8144dceb923eec16dc46ca85ed4062ff46271d85770e672a2d192adae02023ebee9664904f7c90e617d390947a7bbc34eb00212c63ec2c42c13bcfaed0b059d94d96c469da7250e782908cce5a0bf0c063b530d2d6c1dbce29716cd850d6a1ddd391e1c2828b6dbecf82288556b23cf67ee41fdc4f38a8858d0b2f112551c27823546f862dc5c60171455aa4a03f5173a5b046a968682ba0553ef8b9777315408a42056fc857ee49a3defd683b14762dd2a1a349839e65ea5bec53c729ad093e334526a9b64df952abaf71c6238485a555458c89f5f4b7753a334b6925f22ba5608a5adec6121463f2d8c9e5b4923202d8a97b966c278e205639fa511c4f72c209a33d4cf6e78a5465d90b6c3195912c29349398517424626b645be0e81ed2e3c6dc1b99f1a78a789a240a3d8a15442f70d285d89edd8787785f5dda367f64c9957bae68b96f03048889ac0eb2a51666e198b77c2525ae6d27d412ce8021228ac598f3bef7dce9ebf31b032abc50131be8082ece720cafa4d4a0292c944e5b593322e533c9c05c931f3c52c2ddfbc4539adc74e01fd61c719ed5ebabb335bf6be8fae63224edd60d04ef5cd8749cbb1f4037cd124b338cdf009fddc0951cc3094e51ef2b79943ae3583a92ab9de03231cae763610edd8d8f432615a3481b1ea868122a9aa06860649483c0015b69bd2065eb694f887ead3eaa29bef13f86e9c1ca23d846d4cd118ed198b34c00f0340d92621f66936aa65f8358bdd6ef3751b3f1de43b96ef7f2ef91c93b6427b44609edecf4b7cb2bcc2efe5f125bc1ec447acfe9ff923dc14fa26b003019c70d7d18b48c3310ac8e22ce2c32c61b1f1ab659bca6d02f6640f4f3f9cbf4b591f34ddfd90c3feddf97373971f95d9e63faf92cffb498de854e0b029343a838b3e56246eaddfe6e9ce241855977f1cb0ad95371118bc231a1b11e9f48da2a007a1bbda9fd30c75bcecb08db3bfe4778cb85ab33f7a9dc2e01193002f4899b38c97a936a87aa466ebb21c4c9bf75ef08231493d76142c72b39f88fd8fbefd580154fb0c020c61e7b774c93f20948903462d8159d6b22de56b60f9dc325f6d0eaff800b16008cef50c8bdbb2a1a6c34a01a87ac5e4898d540c8c16873a2972f0eb0fcf7ff7c057a2eb7db318da7f42ae8aff8c4fffd6b573bd0f8583908039091ece267ba0b00f10f0189e5a259898b0c134cc235f722b074cba41ae2d8c4841289e0eba6c9620b44036ae133cd3780968f89302bab6004c6a130768d2c7486c188b89050732bba207b46a3a31e51bd9f66a33771c738dd136bfae35f5833e7e939ad34cf6f5be696ac544d50896eaf96f0322a1dac42b1297ac67ebeabebf4fdc7f0167d092842b203b4e0aa38558eba1cc7b498865d3e21793adfb49114e7fc6c655560e05ceb0b13136a6574e14e1edb23cfe7619794b366c23664ecbdd80f35697ddd24cf8d2e0c8a7a50d9007a19c609294ac70df450f68015db6cb6accfcdfc0dba386f6c71385400318c21396cf74e4cc95c219352a15fcbda656b646370c5fd3f124f942155e1ffed35b098669677d76eba7a93a015f5d9954fa0adc3d34f2f4b99fab8563e7af73056af1e27e8f41e8d0f23285da3027f496d0fb653f7206bd98b50fbf76b280fb9b7faf681022a8aa558857793c17096bd995216f10ee82ff6e8558d9d9aa8ffc060b4a07d7fd7837f5ad5af14e03feac52c5c693900baa040349fb662514d0f2d9da6985654ef542fb682ad4ff7588808745a79171d544a48ddfed98586d9b15ac3ee1233aabebe1e1d038f812a1317ffda3f88fdc0e968b5955498426c8115bb2b3fdf40b3fb108372c3cab8d839222a3ddc94ed7fd9161060295df476c4e74bca499c5fda6383e572832e425bc517e36e97140525a336327c8f16edfc23955c018ec4bf0da5026aa4088709f400c598893f5e89a189eb6c7b8268ec114c932fe2fbcb34b36cfe1d12942815c67f49033d12f95bd89038533beeae62cc2505f52556bae3b3cb89eaac18cdd0c03fea04215ae43458380306605b5235a2189d8e81e252ab85d8175faf27ea5d945c20217ed4b7a2cb63145e700aa338b3f8566cc1d542b846646ca502a656f283efbfae30511863fd3ea677677a2bb8e3c6eefdb0b145ba2c5f42556fe5dc17cb0b35dfc0ae4f829a982e3645206483ebff8869f996545fe39565e29a05d7d9e285467dbc621fd9bdd18027025db74b7d1b6d3cacabceeb51da8f476a80aa9be9b19c55c2dfa4f981c8c0f1373480d1e6a643aa380dc317e9decb632d7c541c3339ef39735a01af7a43500a7ccf250fedd000288fb651ff158ef4ead3fdd75479741fa687887edf05492fbf4c36ca1603008555ffc317fb6fe5df0f2ffe67a3158bcc81667e593f4aaabae605e18e3c2334cf5e5352e657da5275cde2dc85d1a734f8bff392bc7ca96791df99b6f48e3feb47b6a7f34d10a043cb789dfd5fc1df43796f5c9a7a03fafdf61221c97251ad805026f45e6eeb8a2c2c5f9afa416156506828806280fe86f0142f41876a9b126d11d3c891c494acc046f9188dd8e40edb71e8082f5e3122152faec87a5ddc3acd6946209c70edad638dd49d73be015093591e7f2786ed5a4b414ace50b8d2a541f17de069ab0fb26a41e408c44ebc53a0665a871274f866c22146ed8d82bf329c6daac78a52407a0999c21e38eb94180cff546c1df73ebcfc2944a6bcd212004f97fc2ae4db5268ff23a144885e823cfaf3bd556c40557fac31ee423a50967d13ba4960d0228db6b678fd9e391ac01fc94c6c1c9abc6d80e16b5a517fa4a862a86e021ed5bc6b525ca50fdea6e37458042002c743b0107ecf02b6ac837ea5cd6c5fea2bf352fe9cd4769d73ef8bf390c1b12046b8a8b454eafbb3a7b457cf0720438b7aa849bfcbc6cffb12230a0a2cce887f1b6c4c4d9b3864a8d839bf5e75bdade3a0230e53e7739c5dfc19851cff520bc1826b988102c5298e698aadacd37804f59b4e0f61407373437f60a79e2bc67c9f0184a2ee055553d24120e379eff269abf79f90f477c3a630be7b7bcd2c2774454df0c0b2ff460f3dc0406d0e4147187f23d66e66761f2cbe9c22a2404945aa172a8dcc634454831735719a2bbd322f583549fc8c0bdcd3ade5b49956532056d381aaea2617a3f48b4f76bd7e3129f75216118f79512a5b6b705381d300333e516595a528b37c81f5cdee7bfa5bf39a860fb0806e7d4ea0252cdd7ac448956d79c96d000cb65b3b4c05fe4de0c5d7829235afefcc5fb4f3d693134a53c9dee8f9f9f7c6584edfd3ad8447ef01e026cb92aa255993a590b73118c8df5625f9f192807b67189b64f800f1af4b425f9a38c47cecdd69fe205762b2e85bbd4dcbd39499c755737ddcf8f27c4bcce992711394ffce14a43fd7f191460d0bf6a22385cb1e4a92b62116db90babc79cb15ad8241f7be88e659d9e4ef59a7339ee338fbb4917d81eabdcf26573f279f7ca06046099c65dd78dd5ca1b520fdb349d73594fc3d01f5f7f0e07e3c516dbf977e60019d469d8008133dada766013509692aad2b1aac661cd70b857d5bec9fefa7225d382b475c9e97e565e60d8e1a85db2bdead22c8c03661f20ee5c09d850b642051aa79b7868eda4c4176be09d2fb2c5217e9a4457ab7b1dede5252308659199a443468cb538cca8adb27106a28f6bc9a4cc5be7a92769f8bcf13a23c9771729894c1e560c72c6701e9dc840d3c403d77956e8206421e561b426610ed38fc7eef24f8142239b425106597b8d3278dd373a20131811bf9a68e82eee1197ab8dfe4e60f7490d98fa01280c878cbd7b0f583c43bd415d67777c24b6fb6bdfdcc6600af5cf860a0f0783aa631323c8aa44a21ade3fc5cdb5bd77216d2b954227c45b38a2214ece129bb33512889d520d810e8ec9e8db679a47d17c3fc87c4e27963bf4cd2bdbc462cae07f6d724f1c8d1242eec9e5495be07cef1044620e677d2dba749dab7007f735d93a9bb355a731e9d88d49d173401aee0c43bbed7ffba5c2813e673139a7a4858a50aaff525ff61ee41394f1fe4dcf6f991e338b81860fa46480003a26d6cc6a313e897b5a7c677a1b18944f5e6f9726c0e1ff17f4137689cc778326475ff0be81af8c0279bfc202c9b8b7784f0cc4ae8506f0c25cd67c6b28939da85208393ec742b9ca9461680044279860caebe086dad866548b01944b6c476cbab8b484f584595fb2b9adaf9e9adb4e4a4c4fc7eceac0bbdc10ff62312d8377206290122fbb6af42d4e974a82aa9ea21811aac06b144ead456039ca2188f04077f666d5e4f18e946ad56952f6411db4a22e91956e38ea98be44e048a83e1280e0caeb044c16da93f93b5675a49a0c05f6d110764ca6d18afef4db07818f9b84b927859ca33937071dce151c043c111d9a07fdee6ea51c072390034c9bdeeaa47fae27ecc5ec3e2065dfaf8f53fc036a24d00f442832405f0caaa833ec116c4a2b6d7a3ea3cd044a00a4b70c1257424776f89c328d0b2475690c6c1359df432038d99b5fb23e7439f1897e98c02516a3f00ad32b63199c017339c6091c52d00b4edfb2f19f994b5fc780027126be061dd073353acf6b0484236004a1af20c2165bda11376b73613115fe904ce3a6f39717c7b22058affdc940e49e0798bbdc1ae822104b63ccc34b4a2b4a5c2c655b0bc03721169b1c6aa976d9e90b193c548fc38b393be5ee275be4336769e6aa42e6ca224288c741bc5eb5d518ebb36b4b28395f28ce0f35040ec90ce90c2913163e5debf69bb1f82a6dcbd2ceaafa9cf0fcd4400ec67f48202740681fb6022a5f1c08dfd44eef7f993426d100ec838e9b637116880c4b5ac7542e92586260570d2191bef0bd18db7760bdb176265b29de7380e8402c0c512c6e7c4b68bd1e6a3ed27775210793026797aa5bd5dbdfc414f21b8598bf569cd516dd43b4432819b329cee45c345e015025e51cd134aa540105d6735b72a5006663f0809f5861804c5ba02090531d8f5bfdc99935c7445f0cd2be09b1e7f2a828dc5fdc51a06a77ad192d4b3870b3696f94c2d6fa0389e096c25f595259e93ebfea6f89e673c16e73b8327815515d47d28740858f77eab1c540981562f433cf60e100b32900826601704f3ca2d389812b69fcd2319fd5502a4899823e44db0f74110067807a495b6f28c061d2ed613da70152e307b7783b2b819cdae5b3bb882c0c8a2f425b94b5ca445bdd70d6dfdc272f6eeaa1b8ec23f9ab2f3deb390445427419b8c9c4707a5b76a38bcd9a56ea3229c86871b35843ad5f065de791bbaae5115a0d3a22b3408e569814ea763f8d34a4a360b80fe0095acb358e3da0a4ec0cc7e2f48eb5b056343c414c2f2b3dd900a2e599066fae103127fd007fdc69488299f07c256101b024b76e8cabccc0c931609796dcf98c19e875d68f315065861b2cb077da0137cb75f2ad29135e2163a0a636306c26653c79c244ae1bc95bf304c84a0cbc888ea5105be571a3242701ef0b379190901917c9f59c74a089af13e83bc98109cc4d74a07e0ca57809487442422a1de0bbb2925a673d9a6f7020819dff40238ef845e6d0c0e031c67f4deb8ad669b2cfad589ce9aa723d8d8e337b144606e58af341cd06f22fb21a498f4813056bd39363a7f534c21ce790f3aa047422b8768109d48abae397c4e17a89c5b1ff3118727de6d56f7a09595fa61525204b657f5aa340d87782f350038a3ce0cb97721ae8636941cc4926ab15f0a31a0017e318299e331afbac14bac071d74d01b8212f3aff99ce37e6a2ce59cab996f0b9a2a50aecc078907775ebf4479845331c2d17926d55b7cad2481117d64c2a8164a28e4bc101b92d9d4398b7cf6455b9401f1a0bcaf501e0492309aa70a3e4590b5c8cd67ee51ace4039808a680359274ceb3131a627cc5ef46b822a5301d5604b874a11535bcecdbc40c2427eccc8bc40b3448ed14ec4e185add980868cef413b8117abf41587b69446b655562e405d52e572d362824d1c86254749ba9d17ea16f708b0a6465db96cefa57e0ccd9ebe726b1ef2bdc334c79abebf20d3a66e67a4f3f2a3d6fc60dc7e843372037820c3c5206fe4cca07af3daa37647acdfd50d17b5437f45b7a5f9dfdf4fd6af43d6d43ef3b105d29bf9225a9c90168004af10148dacbf31eba49f87815f1c877ef1f013568a0b7011b9d650f71cf0c75eefabf7bfb66361cf4f7a294194b59aa614940c1077837a01a6ba65781ada2a1b730f5c3882a71009b54485886f107601bb21ae334ccb93264895000830c81070ef102233acbc05d91847cb3005dc16518c47deb7d6d542717e2a92fdfe650bb1c22d2fad1c8c26c283c86f4a4914367fd17a00b289bbacd7ebe6e2cb638c0004df0fa705bac2c9af65c09393f17a00b03b24d5b25435717e2d56e7d814b00edfe6a5d22e854f8679122d8adab75d0f2b5df3c108b71b608e84846f4eec492016ccdfe40b74062fc15cf6904d056b2535468075bc38c6786656ba8910efd2fd4a4502129eeba3a6e256510c8256731c0ad18a0dc4b69813cdae4e7022be15a34870a1d5c8cd2b2473b9e22403caf07106c0c9cdf914f0dfe3c1c1fe41ca916062d5e131027c504dfceea166390b70f48e108256f7cca7d50b086b90618066825b6790e39af8b0be8047e2266fc85c301e23cd1b91a62219bede9e899a8cd7aaf33f9b3916fd9c35cc49a9d1c2abaa880638341ed0263ef5b3fe1ebd06b5b3d12e01ebba2cb47ae4733d4a3a4b97bae6e4ac4f3999ecb4c203879765046a52311020f95143848f8e0a1eebdbe10f7833b40936e3695a31def5bc74417400d45597e72e52006845f04e24ecb4d95a1373b69f04b30146ebcdaa27f1e102752b936e1cf0ae074e9fd1a0195fb7476e938f7e2c917ec140e0269dbc5fdcf29500bcbcb5618df0aef2835ac41fefca280d51131468c82586bee8379d03ca52389a6d0300452192bfab15b9fc9c50854708330b6e7531042faf22155b89226252bad5b3ce2183b9dafa3756a09e23ce6b05f30d1048f65a08e35419ef53aac74d6fa63abeba3481c2b6835dc15f5fa414e3ab881fbfae8dbb80a009f6be751a0a51c931190ccdf2440ee1fcc54b8ce4043d90d9e8e56e26621802348c6afb2f590db40a316bed4501ac056546aab32d0ccd6d4485a711f1b83c74c9ac03140f3fc71362b6712e10e0de928f1b34c7826cbce047d6030b8c805b431104c37814023bd6b2a007e8206d81ac6d2f5623678aff9e467eaf1f0ef555f6507b43d59e48ff24b14b4e022e5cf795c4c84887cfd0c4f129a3dfd6bdb3f98da93eba9f404e45f31b66033b7b79f5fd35d6ee8ec95c9078a31f9d7c50bb5ecb1a3da93c5a160645c7c8c2e5430e858b218acd2e9336edd981a7ff813a598e8fbb23dc298ab40221484b1c074def10beb70f39d51d71e83bd4746e731d9bc1043933597cbc86af2b26644ba2a4f8ee3bc444140a2d3b208963c63e020ef69eeaeb912a0baa48724594c6805fdb98e6e9de265cae550620778387a48899d337957b722158a2d2fa1eb9739e466ef78f7057f4fef156202bf0ed2fb690cf64def4849080c5679838f80be3e3e50bda49fb4849df623533687fcbf42b39bc8dd0815fc527261b3e1d2b4e80a6b4f2f48e5fa30fd49a305ed179f329ceb159eb640110c1da06603e54fdebe48c931c06d7cd1f48f1f183628bed66a1832a7a2e6c23eb4c7383b7bd23f91185df28031f756fa8f284500670390cc24e1122704c0f9b4c3419b7aabe237c196a8719bff50d7ac053644dfd96240bd14f5ebd71719614bb5339e5475d2b8a30d8b181b51d92f6785fcd98942ea1b5cbaab45d53af55b036186abcd5363811e23b1901e2d5668318601d120c6555ec40e73e8f45038897a879da857b5d0b8b2104a25da8084871c6ab968607c756896f1f122b332a7e44be3ffa3f012b319bb78254235d200d978c0ba246e00f3c44a3d295399bd9ccdcc385bb51d259af310b4734473db012eed66282ee277588211a32d3692ca564a6b595367cd23a92573441251262a210c2fc75cac78432a16c727464a2edce7588d470849203b13aeaa25355899e579eee90b017d9c6c0c56bb4914239279cfaa5896c80f9d130ff1152ad43d602136c835560854be98c8c0540d5a72b829d052ba92bca4dcf4d9f48832bcb33f62a396f113bf0d0db340eef0a2784672ffa3d71fda27cb842c3318ebd456d41cd8d24b4510a51fcea83a65ecca131335a80573bdf558ced5c0369045b2984a4110a031611156686dae224d4339196a90369b17c69570d1afc07646591850446749a6d108d2e9ae96c021e1be5bd591f2f5d62d5e85baaaf0589476bc5473a2c905593ef4820758070907b1c1a1122be7f6cad640974050626e3d4939e4e81acab794045171460dee07b101e10cd54fa35414e32f2b6fce386841dc6d8f06b849dbfe7b2840588f571602bc07d6ab0c6af92324e2f8e36fc9e337bfefb3d4ccb8f488992fbf012e096aa03db03d8c4ff36f129be939442bd1276e987d0fd6ab4f1700864b3e42255bc93e24e25731657a0916a9038255ef2b945d296df8766d035af39c9a3be40b8ce289d07411c1492022c8ee0324a12ad796c9c3f67c0ca13795329a016dfa60076a05b88161facf3bc879517f2ec4ab03ad99dc209afc248db66581e7f2dedfd0f5b6de41ad2d9f853f84680d3a5bca45304002479d783f42bc78e5cf8d081705c60bfafef714a0eb4d096d545c76236e84c68097ff62a0f2710a9c160b371bd31955c119d57b23e4e78103048a4807796de64f3eb174c29d576779ea97d1b9bbeca53f8a7f118b7a2a605f7142904197cda018b218b5b011a7991e00226fa2ac49ecd15b3017d49c2798f184eaa7f5bce32aa5561f800af4cda5163c7548296ecebf8b36f8da7659b6d85f4e23e86448be4dc6035d54b54ab829c6423b086cbdf5ad94dd43b212ccf4c66facc3fe4db9b482979da4fc35ec1ebc9e167ebdd2bd8b4c0c944c4f47a02b2c436e1d5637940081f89fd90975209657bd8e32cc39b444537456a570574b3bb9ca97458a5f8da924da2b5c377b8c0bb0e08b0b6218c27e58f0a20d5190e28a70c886d424511e4e15c019739446ad3ec8ba8fc958f5f004be2c3732e6c62258aa8b6082f43019d48cdcb39cad76c4a5e02af56ddc47ab2a4fbf88031ff0deb1a20f504e07594a0c91e194d6afb3d17882ede30e89d51acd924bcf613c4483f21d7f2736802bd723a29cbeba1e0c1cec920403760f6f5227b808e89b4bcefdd03926ef96e3450eb3df8ae94833078f2c2fcc8ff1f09c59945cb2bc57433d9148b71bd4e6bf47f07ec5f709b32b12efe1c25b4b8d58c9c20027de9fff425ab5053b389231e71832312b3e0b444b24faa459c4bce057cfc805ce8498efbd3a86aaba9b6fcb7494d43196cd3a67e6fd72c835b2cae337e6070e7aaf2c97d662b9983f7d99e956e4812661226c476eda0c82b76b69e0c1f8427aeeb77b0ee8891ad6c5945583e014304fd8a12067616cd55e88c48b02810ec8e7f9b91ee937971280dbac797c1540282773c973bb067227543fc0cc43f169b10091c372e1a408bf99f291fee8898f840778b36d24089f13d2e709b72b331d56444929bf16b3472d82e4c43b0b22a83876a38b11887627d77332ab6beb64fbcbdf66734263453b6983e7d07bcd5d58c9bb82aace2f6aeb345ff64d25912375304d9c70cf119b093d0acfa5cee20cfa16ba3aad6e69ffd99cf7b2cc27b0a292f9981fa4a2ab6a17de2021acf20ddccb73e655c59a8bd680556fbb4981fbfcb50b117d211690e3e4e8e1d715478599a9ff4145d474651474e524dbf3e7039d46d1e75c64b0cff146f65849dbd23db8e6104f414bd0c8395fd88dac2f0f00f115dd7622d6cfae44e2e94a99974c32380f57d97865362e401bd9d7786895ebf70fbaec09131644e92c5088f51ecaff35503761ecdee105266b64c28ac3cad35dabcd2f5b21eeeb41661dc5616383ac42ba3a38515814c72ccd288ca109bea6b57143b6d5d8212b984c160de6136328065c7d1b78d977581dcf437c5d11b173032207ff1864315c98400b761e790cae372a544f441a5027065d7fcd05c982b0b4377b5e40f1abea69b423bf6f2dfd773e5893313c41c24ce88cb3f36dd6edb60fed086f6e7f6c42eb59100ba95fcae70bd30c536ad5fc462ea65e382765660b347dc61a23b7d97adaa24f487c30dcbb32670373a6f5fa72a23195606405c32e27ad1c51b5702f7b61f641fb3656b8e772349d93df74e9aa3f175ea3b0395c9341a363152c173bcfecf462b7af63a00acb4e3fc6637fc33e617e668f00519ba3203594e616227f2f79090fbc6702ec6f27b76afb474b54a4b1ed9cf98c65360ef2bf758abb10cb4eb902528c30a4fb3334a9bba165bd74122fed4d4929cd24f2dd5939b12c74c9a0fd1c7a9781a345fe25a6dffde5685fc987f1042b145edd946c42b411a67d617e4a84991f709003ca0fc1e04815f1be81ce8199a0f19476a86c84f22aaf875e9025299587cedc17f68e6c8cfb2b4acdbf8aae7eafa8b5dfabd46e8842bc393791d978757a7e21a8b2559dbfeb4810821384e8c94342e8566f89a18390804887d4cdfb86104aea92ca7a696506b682d5012962c271c645e7a07fdada3b0745da42c21be97d748fc810fab636d98fe653794ae4312799ba9b0f4b1a8b1ed1c57e3c3f4c7d3e94bbdcc2b45cf588f4f37494709916f0bfcef593dc9b26c448394d6f9d555be23db2998862642e182561f56466686eec99c2872733fcc9b83d99a30fce15c43e99e14fc67dc4461ff04ce1f370c362d9e7e136cac43f02f7110b7f32ee237694897f04ee2316fe64dc476ce483961d80bf7f54777df7064b27fb09c70766cd2dc9fa7d6b2727d5b90f22f4ad6631627763f0729d5930c9ee439b9311154f03fda0041a90891bd0c8ec999e93043fb0a875ba5e6687f93bf45e0d69bfb314c4ee957e742fce3a45792fbd9d2bfcad31f6481955b9300a260a730d2e248ea6fc1f13f38767d9626446bf7c8edf3871786a3f32ab14cbe7f88d138767d9b1c514cde1fe5c65359ff62e83183abca13be94aba5b4f27bae9ae3947ef799dde5fe1b18b63d982d68be91dd3cbee1c50057977453496137b77d2b226746ec56a4917b4a633b45513fcbaa76d1520d1ba0e27a690e27782960aa85fc72bd98c7e844e4707d182c875b4964ab69107732941c18c1dfa88020c0fb54229aaffc09fdc02b91fb7798ebf59999b4196aa02bcb742662f2245d84012ef7f46ba532075402f919127e988721834b99526c25a656b0efa38a3563416855abc493c85deb74542cbac892a3ac2458df96daa0b7a49a8cdd16b58bc5791aeb42328b06e89013648da1d352061aea0a025a1b3b0727a492c219d27eac781e656606facda8b71591dc5bced878ec102ea4b8552bff43f6dd3eb06b84225e60852541f99738e50e2039a98fbd3bdee873e68bf920e29c9e0092684fb72c81714f479c56a444283ac63353ab32f99ab68fc27fcaf8ad43ef46adac4ec5c7c98f0381cbabad4ae82f58e38cbf3dc3a666fa16b1a9b4e7a3d96dd454474c005e8174483f804e39452fabfc5e4ddaf5587d8b98dacd4d6afbb7c9e6aca6bbc0f7e155a6a79fecd2b1a8cb549bd79e5fe4a717a148f15a679c895ab20580240d2dbd8dfae5ca7c2d669d1f97fe435b816450f57be587af40f707837d46ee21f53d78dcd8d4ae12d34061b0068213b9dbba8f85e35a1c197cc4af2afebd6d64eca974cdf02d75c4d166d45f645803597e480d669f88264b23059c8817cc9b5460f77c01b86c177abd58c4042c59db5016433264e111bda366ae19b2c1aeca359e896624b41a7ef19dddbdbea1c9e69b85a0db2630d00a9e3d4d3bcd225eff724ca94d7c24a8b21ae2d7d081c84a7b4d6057b7d7539d6b54ef7b73e54bc3baf1474209987a59ae4b1fe71aea8aec7c04047f4ef59396c19787af9575af41e62bc4df97c6ca010c84f1c65f3257b53d26c19b3bb72168fe2a746928417f091d7b128a6f70403a51320bf35082a425573a280d4da047e64f95b327cb036541fa134d6d5c79d4d57a56cf80f1785ea7d381b49dc62060246523df990b9c994b11e2b1e316b4006b125c0498fd268dcced5d57d2afb2f1cc891731dae907aa2410f58bde0ffa1e48e3797b3092ca35e788d4e84b72864eeff7535cee8a155d40a76f996198d1ff39b04b49fb7a5555a16c9d13d47bd8e141d8a405533bf00a52ebeea4b65381341f0ff963f1d773c35e1c5f8e59eee99c4ea6624c334ee1f6aa9691d47d140e439022b282a86319693acb8ff9ae0dba759da7d112d104211665986d2ca17e968e83cd4f8f4c89da6e52b53b646d7d87c7e3e6c494486ce044459045e0fc55a105010705a9303003088e5fb06d14304648c31495b2110e8924ad162519917daaf2dd96f48969876449d999929c75bff7bf5e52d283ed72d5aacae88888888a4e87aeac337fc5af0048a88989a594bc86e193b129c12df0d7244d143097b7be861041fc0e1461b6bcc60e543650b2d98241902c9d5524d60829121342ec8c4281180283b7be0600739d8210be845174444408e37d890810ad23043034648403c60d565c16d5270021e41e0c10e602082270c208025028025ca4e114d76d06106194e608227cc28c3000528e5808396daa10539e260e2a7cb1e7a50610a4b2831830ca33764100316a8208d117c200b2c125012401257a2ece8b0818318dc00055e3801c20fd8c0810c60a0821464e0020ba0420a27e0f1060f5490821380608a2ebeeb301905c1c38e3ae45803062628011a646c7185ef25012ca1c4151d26473222a3206ce0608d30bed8620adf0560844e132647b21682889e1d75b081031ac4c0042540e303647081c514598cd0417224bb3412113212bd3deca8230e1aac11031898a0041f20838b2db0b8628a2194b22c3184115216b0f0e408175a10020e5a58b1002c576005ae584010170ff8d823a4c795c70b16ae2bc87040b4818b8c4b0396bc62085aa41f45424284301976b870b06e88b1215483458368064b061f2f081112a211b910a4059a203600a9e1070e33231f31323031170ccccb4bc87acf0612c0973a6d2a23be6bfc945a3da1c613d440821a2fe8c16a30ec8471a7a04debf70aa0a9b1a99152a3e73d0cc90d5683e406d3924614d4d8410d18de7b5dd0ce42229194d0710263431a17486dbeebb4cac8d6a5a1d37842648934744843e6619dee34c6613a238003e3e2bb7f7404633c6e23191901d0083ab6697fd31db7bd67e9f19e95c77b5616a860d92102fcdecb11c3c1b66dc583c819e79b6dae99e699658e19e68c31bed8e28a299e58e28821ce17df7bedad97de79e58d17de6cb1bdd6da6aa99d56da68a1cd15d75b6dad95d659658d15d64c31bdd4d24a299d54d24821cd13cf3bedac93ce39e58c13ce2cb1bcd2ca2aa99c52ca28a1cc11c71b6dac91c619658c11c60c31bcd0c20a299c50c20821e402b98df4b34a19e97e7e1625666c6a666a0a801500230086d9ccd8cc10c0bac27b9615a8804614b0ac8d9e0da0210134ac40837bef61594f0f96cdd8f4f46059f73d0ac3667a8860ddf7a89a1e244890f08006942798cd90215adeb3aa40053466c842b04608c8781877f2286e05254908a6788f440a819610f451083a11ece6068b35980e365f14f12c18aec4d0c40202044bdc4882453a4ddb54de1fb15d795c705b7744c3f6cf6ae398c6b892d6a54ea50e34fac0933b7e70c60e1eb7c5b184f72c25bc6725e13d0b09ef594778cfbae38dce308dce58c232c27b5611e23883863380c421c38619aaf79ec482c0545aa5b965c77b561d4418021d735872c4312a438bf760c7adb4890b130fbc74808a0e901e7f6f0d32b4973a59d1a4685d476998dfb4d3160ef35bbaeeb46dd974ea8499b8e6409ba7824921a3c87bd9064658a729e136524fadb25269278a0e95294cac9498149133250a0f955229e3e24b7a5be9317e60757101137ce0c8cf09e3f496aefd1c09ea543f5e9fb64ea5755877e2e2b1f05d102ab5691ddfb59d244bfc69e3c17a4a67d9fe596d4aa0d080d6e9cd77272030f034de88bbe08df80ede88cff1463c8f37ea33bc51cfe18d7a7cefc9f0020d0d131f1e0d93ecd13041e2d130e98f86099747c3648a47c3a4018f8689041e0d130c3c1a262278ef0119f53c9a91f66846503c9a51158f66c4001a2133231b298fc6863f1a1ba047637380476383c5a3b111e3d1d878e0d1d8a4f1686c62f0686cde8001080d4d10213c9a20763c9a205678342dbc3c9a16468fa6051d1e4d0ba4f75e901684b8e0438047e3838047e3d3c5a3f1d9c0a3f151e3d1f8b8e0d1f8d4e0d1f8e8e0d1f814e1d1f860e1d198823c1a930e8fc664e4d19870de7b2ecc2024861ea047d343c5a3e9d1e2d1f468e0d1f49cf1687a5af0687a78f0687a90f0de73818699f75a78011bcd30f39e0f1bb6e86fb405f7465b58f1465b5ce08db608c11b6d818237dac28d37da428e37dae2096fc4c5cb1b7141c31b7141df880b9e37e2c2bf1117406fc405166fc40506de880b34de880b19bc11173d78232eea78232e98f0465c48e18db8d0e38d18f0e38d18f003cc0c58e41b6139f2465872de08cbce1b61f1efbd1f40de0f191aec008f06dbe2d160603c1a6c8c47837de0d160277834d80b1e0d6683f71e90179e0d415dde28c88a370afae28d82ca78a3a01abc51901d2d04792f427ec4fc68a2118f26627934913f9af8f36862138f2656f168a2031e4d8cc0a389207834f1058f26dae0d1c4373afd319fd28a508117a060059709d0b862c6bb3440e2d299563e18a6d234d4151f33240ec33addc4c70ce9e747e31af35bea07698b88f57478cf92f2acfcac17903012038627703095e6a52d3e65c1f7ac1c0964e1e174af529db68ecb7e38bde5e63dcb07ef5970583dc8a458847b20144aff70160fa630d9411bef8974d0c6b631e9c152397837f0f17e2c37da78ef3d800d6e234920237ce3b89486100611ef89c2108dc020e2bd178130addb561d437129bd759bf637afc2c000c2c41770bc6ed92f4c0f08a30854e17a611401d8b34567814014de3ba1a8bc32a680030230bcb7a4f79c1fdfe974af859f8ea0923a694604a150395bfc0ef7d33b4fc5a35653b6f89d2e84d045962e601ea987e3a2a170d1507e561cc9a3b46df32a128742e590304e777af3c1525a8a07db569d66da92839d388ff29d0654c4a7340ca54f3aa83b6dda00f44f91cdab561ce64d3ca8243a6da707a1503953b49ddee9ad082ee749a7ed703fbed3f149694f348d87eba955939eca59624450d735ad882b264e3bb1d2693b3a49ca039d8ae8b49d9dee394e4be9b41d6b678400d316ef3d26180f29ede4936881079669d1012dc8d0c28947c270301c1eae6841b18c07affad122940514b2b8e385c1e5bd770dc962e6f994b6d369da941516556071002c50232cfadb7cc90896756f842bd96091048b225886751aeb3e752afd702e9ccb15565c1134ba82e7bd47a484d258963a51b1e28e97d2be5f62e2b4930ec40af91e29486f2bbdadf468015a16a0f352abadc36cb4cd37c19d804e5d8f040479af891387d22b26bcafe3bd97e58d1450e43dadf340a7d42975d206a0859fb4f4ae4b25bdadb4de560888c1a88a9e2d1da8c21ba3030441a57f86704103d438c093d785e58267b5a0052c78cf5a810adeb352f09e8582f72c354ef09e65028b046abc67a5a13bbde447e1547ae3f951381f2d0589ee39fdc42775e241651ac5888bc712811456785c6a5b75259fd300fc861d81180e36e588eebba6440a2aa4c842458a1829b852a1923aad3446e25ec561a8ae8726b8725c0fb852a192f2c14845607b0989fb9a89d34e3a6eeb38df515a0df78341217119070486914c3d5c47a406f31c4a37c1483d3f3ad563ea308d8bef52fca44afd1e2236353d26ce7fcdffaffd70a7943671ff83e9adf3401e7542f1229dc9e784f2499df8499573a379fc5683611a0ad683c373d363ea4e5b7ebca9fb5a916ea5611a172d09462a923a61563429bfa3565d4fad30d2e66d9c60a49e1e2a1889083744a57f6a308cc4f9af612a0dc5a65ba950ba26c5839196e8acbeffd13bdcaba8a474341eae7bbfd3718d47c99294b6a36d3e00296da7fbf7b2814660e2b4695b693b3ee0e28211a0c185025c1ac0e50a2e5370d1465c7eb8a09e4ac388fc50630423f20366f30396a934cce6072c558361990d87655162c4c50a971b22353a0b6f8b099e37f52da955dfa2a17e152cdbb46df34f32265374a79768dfff68547c4adbe1b172844a43f17ee349320242a150a75f52715cb7d23cd7a53c902f597bbc6b889513cf2a41ecc58404074b7954a9fb1e55ea286d02523c519397f76046d0711d438204e31b3745978815418284e47dbabfb8116782f792e0d1519223254709768371e9a79c3d5ede680f1fde680f1fc4dbe1bd21efbd9cc7cd1be541e58df2c0c01be531c71be5b1c71be941e48df488f2467aa4de480f2ade488f0ebc911e76bc6785f12c2a44607cf1b252479d4c3c7bcf8a80ccb31a2085cb8fb635e93e769c7e129a001224d8b6e23d446ab46825ee4422c2614e102961365c0d104e6036a5a05d2a91b8d429c4a46f9a73a725394d469a1d23ad3f52d7de94653d4af4f4605fe3580e463a2dd1b690b668d31614ead455d9b690308e71409ac37a4a6b0db535bf85d35bf4a69938954e711a87d21d67a3376f3ae9cdff7893ca934e3fd8294b4f8f12dc89eb9b96d2c148284ea561a91cecb4759dcfd2d3a304e6ff698b4f7d0deb29a534bfb12c53715886695ce39ce728d4290b9325519464590985f25b94c8a204e64d9d4d11cd87f340279f1c8cd4fd0995d24e3a558292742fc5e79444d378723a6d874aa7ede4683b3d55850fd1532a75de67c78904ca32eec46d5e8a0a360cde7b3c046d27bfa930bf7fb42ea54d524a9cce163de53dcb8bf7ac2eacb01c20c67b5603de7b37bca037d272701bc9f394e7385f2271584ab3d1db2a07dbb42658ca6bd9346ec5a5bce73413c7b695960446e236ad52696cd5b54d85051184dee29360246e88cefbf4d3128c14821e21bc2406290855daa524de1b32a44b796cc810ac7b2dfc74c4a6355155e136529609408b478a4025ad2b41a02922b0b210007def69ccaa42008fd318c83283cd03511192c50ad2a6c9f2e49ac90264c9752d01c633b244cf7ba4ce6d24af0497a70494f70280c7eb3d5dc71fd1e3b5784d733da594d6b3698fe218d7799f94e61a87a9bc16ee81303f84f3a60eb3e1ae602793df984fea74e2a71f2da5718fe2c1301217e48fe841fe086d67e78a15ded39db6bd2b686cd15247580c78cfe2c2d2e23d2b8b37baa21a5de91616ef595758565cc1410aca03f9272a8dc70a1caf9fb42a55c54a17ef6159136e64656764058eaa346154e58e52a9afb852f74d9cb84ef97731a08a8f01a44edc9d339eb8206e23713c537896f0641eec61192f9dbadf94782d9ac7caf2dedbde884a188fdb4850cab9454fe93a5c7c4f8da6a8a1002904300572dae69be8daa330adc3fec9c45957a45848bcf1deeb9e09ec089c0290413f9b96d279ee0e23e891071233ef3da8d21df773eab820af25c86b29711ba9e3951449b348911f8e05b3b9d9b426a8ad67fa49b39265a55229e57b3f994a27952ea9380e277aaed34b5986c34fa8bd92a252e5683c59e63bbd711f304e637a5be5dce86da5716eb8b772dab413c779ff535aa9436993073af974db77eeadfc702e3838446a706eb86849b2ac7b2edaceb29e3a1d8173c3bd954deb70a004baf9e158b22c02f59f55aa54eada9b4a4cfcf425442c79a4ae048e1c255ef491929ead8b0469949297e48c51922eef3d6d2709f6b8ae3bed9349db543933786fb5adb81c2d1e298788f79ed661a31c1e8868e3a5561ba675a72ddc09dbaa138a882c8250276dc7c46993eef49221b030440846433c311a22cb1041709640f23f36244c75ea704880c3493d9a694bcf49ab6cbcff984d4f0e17fdd353da1e2101c20889132324f83d5290deb2f9748f753a87e4b795cfe963dcc9e7644aadb613d7d560be9f90d460375edc387924d426b26bba07d22622bae6067b8fb4b123691ce93992433683f7485c4f0fa6753d5cea04a507eb21a534cc03698ff27e49a9a7b4dd4f3899eabd9749c9e0cb68f0198fdcc67b5c16a3f3414b74b0cce56129cd55c95878f290f75e0a07e19aebc6c5e22671f123f560454858104aff643d3d5811cea6c06af1deeb569a118e34c5f6707aa34a826ae222f6b51c8c94d27c3a4effcd6fd150580ec9c4b58aab33548dd7c3f9a44e2aade3308e36194d248ca618ef917a8250dd899f502a2e1eeb5af3d91a2305a5f43c329a3c8ce409deebd9bca9db565fa56d5d363192354fc990f88258c6283a79af47ebb08ed2ba0e89006330820b78eff53782437a48bad34b7ab04dfb53fccf8fa67f3acd57dd6fde47abb855a74b5dca7338264e9b8ca861a4676484886f4486c4617a8a132c45c283443ae3bdd791b8bc4752ad4624295ab4110993ba4e322a824711385ed7498a2ce03d2959c63d5096f58e2ba9b8aee3933a75cfad4a5de7643303ae633ea9938de93d1277b2a9215541080b7027215a10226614440b82e86214841641e88c827081881c23222678ef91a260590fb72ad283653da420fdd3d383719c5639e9da0369aa1217fdb3532a65c14420098a122c35783c52cd0d6ac0789c0fd252a39a5d43f388d46043ce783a673484cb101e4640ccf11e89488f073a6929acfba09a0ed31e15b489d400a10569d3b6cd1f0142ca0f96f3031eef3d926a8571dd69d3f429e707387eb81394d10f6afca022d904a136ed79463f48793fd08c7c98c123713ddcd7b40f08e019f9d0e3037e231f6a781d03000e3d2c61d44309de7bf98d7a8062d4c3113de4c0031078f8000f2b1e9c8c78f081d900fb0253614a603f7640c268870ebc243fca4d4a3b4d8912b4fd14264e787498f818e4b594b28c3b490c098e0cda2bd44f9d306ef7100946b6ac9feff8a5a7716f0d4d59d66d599665484878f7fb71c5926a6f75f426ad94799e8a926a926559c6a9b45cc4d22ef99491f62e3387d09465280de44b1d973a599b3ae7f51f4e992df65c4753966d3e25c4c73b6fada5aeb05738a529cbb8ee3d57eabc4f96e1609ca63225cb4a3f5a4fe9cda46fb8204adc6a2b956c2082d5f430a4fb92ad3208207e74f861d33a8d830f3d00e077ab1c7a88256f2af1b0e96e0856c30e36e810440e36e0a0c30d35d880430d3534f430c30d32e01003b539c0c045dbd2e9f082ad520896b154d2266cc445ffec40134b1aaae4933af9f868a81a5c98b0056e4810d9691a90aefd56f3c366a6f33e437c442e08190963628908cc9017090051e98790fcd178c96fa552d462ab5471cfddab5463c552a954eab878003c1da690018b2158fe47a74432609184f71ee7815cc8b8934a9780585400f9f1d6508015392f0a28ba3c41802682b86c015a75dcc6844a4bfda0b40ce064f2f9bef3ad7b4a02c8b2841201b892b8b05c41e28de2c0e38de4e8b14208f8f1d6a8628a9c2744c90b33a0c27b2f482524c97bef6dab4e732594e63612370599f72e29e474621041847745e18282134a4f70c2db3423428640809021ba9775df693e386a08c1a9c982908d9193f09e9294ced6a5aaa050ab26a8ad3b6da7a334274f7c13272a1c133c54da96aaf273d228255ee3e1bc6fd2693b4c348d47a5379eaeed08b17734e1bd4b074c70a37b146ab5f3de7584c72de1bd4b074a7891ca0fc7e2af33debb92808423f8f7ae3b3aea740565841f0585ca79ef2a0277d9915afdf7ae3afae9bd8b081ea5edf4f7ae21743ce7fb8e83c7c5773ae81c0fcb61630e9e9c417a8b43085b432541a1563b188b1547d4e275cfc429a5753aa58f780edb29e27ffc164c7f94e77ab88d04817ee08347a486935698088166402bd1ca0fe7f2de05c71bef5d3de0c17b7276cf4f9a156e6bd271da3fe972b489c76f1a94ae73d2c16382d2fc943271cfe3814e3efe094a9ff8a9af8c8041a99cf7ae1bec40ff686e75c400debb7470e540ceee06b56d5c6c4019e48fb8ce40a170f0de7583207f04aa888e3a99945c36e836ad7aefaa413f6d2b9494f72e1aacf1dee3706eb8b722235096c1089465100887888d9c59c675d4e94a479daef8a4564d52abdfb3d888376ddb98749b9612d4b524dda6555d27a86b49b08c2bbc0af25aa85df553d7d9f9d152beff682939573838720a3185117ef34e2216896562a1582a168be56279ef0201c6926511e8fac07bd719667049a8ec44d1e151b253c58812961c28254b4810382f0271446adebbca78efc95c1e78ef0191e4190001419e20b2e489a0105273c77ba920eeea0007966031e1593fb04e80022135a21d86a86248e74366891020aa705981e601044f0ade0f4e08f901c8ce04240006185654514502a6a0828a0da70b727a5092a45227ec88c47ec0521e0531243c60298f7aef0901800c5014904cc10c0f2481801641bcf7b290f2ac0c218487391ecf164d898ac32beead7027550e7752699f144af573c286c0f38ac011821171821dd8e83c95aea584ec6084101dd0d041c97b4272c0e23d5589c3210f213864ef85e1854feab48003707eb38284d8607acf771eeb6e5839b0c07b2fe55551b41dcb6fdae74e9b8d0f1f3e7ccca47492a06e3b61394268a8820484d08085ccf0ae0af850b790a1a68b134f87189c784f771c057e20000c6d9484c0e0440c19bc1a84bc80434a889036de4988901e2142b0f7b8f494080a5b7cea251720b5848d0d121c2418112efd54d37dff24cbb628ddf74f300cc3524b1000e3d24f25efd37de90d0d64e0a50b1f243798104d442a10e28290166c20a40517debb2020864f693bfe47a32286902053bc774de0bd4b02ef5d613c21419600e3d92ab52d3c5e8b462541e9151328eda96c52f4e6f5c6a4d65a6bad94524a29a594ce39e79c73ce29a594524a29658c31c618638c5042092594504209259450429973ce39e79c33c618638c31c6f7de7befbdf75a6badb5d65a5b6badb5d65a2ba594524a29a573ce39e79c734a29a594524a19638c31c608218410420861cc39e79c73ce19638c31c618e37befbdf7de7badb5d65a6badadb5d65a6bad95524a29a594d239e79c73ce39a594524a29a58c31c618638c30667c6da55346283f3aef25f1de1bc01312e2f2dedbbc117eda7ccafb54d1361f80a024da8e3f2de9a89576658b86f24994f826b4adc97b1704366fea3a2d95ea3ac97b971753b41dae8bf7def580f72e074c09d24fb49df7ae065c0c78efe2620bcd75ce84c98f126ed3765239db8a732d9573023a2dd1a9953fed4e7329df84e738cd75dcc96f3e48a33094ee522b229cf77feb948edf56ddc64cdd76da1829a531d48ad3d8d62812e78ff89c38eccae2bd0b8bf7ae2bacc8c224003a544a4b982c89a2648749694a9429539894983ca9b2240a9412961c28599693f25a341e8f5a750d0ac6f9f19d8e8f86f2a9934f8a89122c4c61d3760e46f25840e3bde7e35d0570e23d2235d67b6fb3c6b8c20bb88d14b44b1ca7555d4aa74e3fa78d73a78efdac521ee37e38bd05d39c70ef5d56debbaaf02ce97ed3b68d094a77bac97b179529ddfb4deb54411b97b3d36aa9156678ef69ae734fedaa0a516828aed350544a2a95ceb2928acbb156b97154c80096b18a4c1853b0c17b54c83ede53bdd114869c3696b1c46d5e85f226395758c6951444906525151745c97bd711a86d63c235142a270a4600c016852844210a50d001148078ef5179efd229e2058d9e30851376f05a183d8106ad3212d475dc6a0af6e3e339ccd469158642e564d97b9793ab08110e3cbc78f162851396e0f182d7842d2f8b9c4c20c1c34258890944308188f7b8c0032c6105a5d112c0580256c20c94d001291228cb704c9c76e2c3a5b6681da569bcb4994a3fab949cab2fe45ce1e015125ee0a86c0d95a433f9e1587ca7794a53d275b2ec8623c8f0b88d7452e9521749bc926755607487ea873b649e119c3032421bef3d0cc90d86653d3d58c76915e6794a03719c9bf7ae21de8583e48763e9a828a91cce53f13ebaa35204931d4ab0a38c9cee7f7ca7d39daed4f1c61bd581005d0726c21d8f8469227044d8deeb72ae88408720c77b244e63363a182988f349a495544eb4b2c5ef8c8680e9b8c1888e27481de77d7c561ca74d3bb0044bd20a2cc152b4c2f92928540ee74e50bc6f4285a79f94442bd04a96c9b93271da64e2b409080707db1b39ab745c4a5382d9e0d50db52bdf358e33c78ff71e0a95e3511a0c9603c87bcf7fac874bad4a405a7a4e5b9120afe5bd1b4994048bf868a87acd378aa30e19070fde7bda4fe904a154aa1ccf6993141e9fd469eba86419f75de372ae704a9b5771d13f28dd69dd0d17fde339bdb9e81f94e609c213384ea3b2ccea001066f0b8d3919ed2a6957a92701b89eb4e3f4580a0e53d13a74da61ff4bcd76d9a89c334adcb3cb77920bf5d1f6481db48fd880fac78afe37caab4f9ee54fad1b66f847ba0910f5446501a8e2d8f4422f1536a48e7519df69b0fc6a13c5086f2401e55ca9ef75b9394d7a2753fa50325484be17c12da4ed77ee382b414ef7f890bd22a8ed3284eedea8d1c2e207eb072f9008027814a3da0400fb4788f0856fa7eabe9c10e6f07637813a79de0e0dca07497d2704a59e64f5b5752713edc8fee74df917395832a1e0ab56aa2ede84e2fe15027ddf9255aa2c8b9d2a8124ad37689f33844301b36ea78416c2cc186e8bdc703376584032f4638e86e90850b86f7ae172e2137e0327a3668c3063d1e87884f3f6d3b07b3e93a37dc5b2122e70ab3917355c399f82931f1d34735c05b6840c60d6fcbd5c2688d138cd6c0f1399da675eda7a0744751f14d9ca8a474543f9b13254c543f9b93f7ae201790ebc77b254f6509187821083c18a20247b0638d317c70a3440c304fc8886066240236b6c04cd0c49582c20870a082086afce002154f20c0831641a403c240038d224fa0e10134e08007642c31400e781480240e98910c4ca3185871c5bc77c15ca22b34828113231838c90215485ab8d6366d0788173841ea3c87d24c5c60c6d39d5ea23bbda4a7fce6bd8f96326ac10bdef5523e2794f64d04e9270f8f2e3d2fe627e68990582fe6bd8cac98e782f52283d582252345f7851a20d221e692917911852cebcd7091def52c244443582fe6c8cbbb9e6559a1cb8965c558976585609ab8accb8ab9649862593056ccbbac20a4d0050353338359a2eb126961892ceb9ab1a470593ede8b25ba42deb2067059d62553e5bae1b22e18d16525e1b22c98cb42c29ac1b242978c0b5e42312d583258560c32214b0c0be6b2ac2b54b22ed18c0f7a01b17064ac171f4248ac98eb12c5d0cc7559445cb0160144f10704ae277a17062c51a846f47259a1f7e2006b08d6bb1e0d0dcdb39e25b22e8b0996cc1584655d2fd715b2ac6919b1642c20d7755d304aac21d725ba2c1822fda84106082b88101bae2eac97ab064b6485ac7749b9b0194bf4ae13ccc37aac2b428f0717588f88185c210bc612c55841ac9017d72593852c1cb2ae4b845d407cd4582f961503457107685d333032976559568c6565d67501210463f9b8442120ab876b6559a122968f1f972513635d445c3a5c3a5c39845ee8592e5830d7650511d18444570dd775593096e85b3e7cb07ebc5cd68bd5c2b52ccbb26eb88c80f9e1e3b2b60c9098cb42c292b1acd065892c27560e57be70b87e5c31d78b15b22eebfa71c588acd04bc8b2ae15b26a2c1f1610cbb28e583a5c33a1184b46645d969559168c0c170c96e8b25e4456be7e58a14b072b14ba2ed125b2f27559365c33960f4b467459969559395c3331214b2423b22ceb62160d41c8dc848478b142960f4b4483e5c347f643891b74b00020b2ae0be68af1164d0cf08713cbbaaccbb2ac222fe6a9de953d2c3caea41e66858e3bdab0428121945145d301a9d031c79bc2c30f1e121470c323a1d9785228708230a4f0a0458942c700f078c2830e5028820e1c60a6000d46b26e8103978e203e5c1e662c4b879587edd9430216d3e3917ab0a043919e312e9b3932a0d960300821c4b069c20e3d18901db019843c315ec8f27a5eb67898488af742efbd67ed71e58814b80133c5cc0f35e8e223464606666606e6e54728071f31a197500c4078a0d8e941a6066646068b80b8608980c42401a40b0509d1bcc0214504bac0b470c5f810d904c90197d165c60a902eb269018a8bdef0524564c1dcb4a00b92274b46525ca219d1132254e832c714d64b36da8108282e910da1223ce822041d5d769032450c2e24a1225404145574a9c1c715203044a04b93185432dccc14badc743e8ae8e18226c64728c88b165102ac804246340a15995018a1023e82e8c1143255e8a285ebc70b11a3982c3ac22b7146142fbcd4cc349901026609511031390a1250a08828dcc8c2c81441f81305bca0cb8fd5ff428a20d2052b8d2e355828666232cc8c4c0ba1ab5344288799263150e804a122e3e406264d667c380142a5df90a0cb0c221b3b0393bd100466e607931e0490812e33324e74d80be8f212a279b1609080997939021344ce103f563e86c838819989a921c8121f3e88767ccc00030e40d820431032353b538080624686143383ccab2325068828c686972c647d00110dc18888f111332332f27284081361bddc10e2e14506e843868732932334c8ccc8e0e342a164e70795a911f920f20166035d826841b4e44588171d7cf820c2c18518ca218a2e242356e8878a88422f04e841000cd0526694d1c60ace3063031750c01305e0c269f99ef70860890060b152858a94274638c9f0ac01e2070060a218c0608f2628c10843e0fcd0830d35c48871031b68200348301922cb2106203f605e70821278600c0d5cc0021410238c2a35438c90be88c01e5988c20e401398a08292c64516a78f736426668c2db4b83e7c0007196364d9ce00c38f1999181c6e4863044bf81e65c7089d264c24804502aa103247458119656ce0892b56aea50106911b6d40c10a0e12eb2306e603072801082af000062c800013908004b288b283736408100b0bd715ae2a88f0c09870dd2132c245c7cb1cd60fae37ae1ef8e001901d5c6e5c6c5c2708997169110dc0f2412687171c82d470cd70c560c1307ae145c835b268442d5c3f5e662e1f3232574ccccb25b2429605f382b810ba2194822ea22bba889ec00481593152808226035d5e5e80c400f10328441488a219805c8003300ae8227ae24386191c6890a28b8f24440108e9f0a3830122d34406c3cc848ed030f352832e326a74816109287cdc50184f00224797973dbabc00b1a1075d80743da4a08b0f1a5ab8628ebc187969000262f85143175188ace8e2020f2ef0102a32322243c3688f285e8490c13137211742373217e81282128dc0ccc074a04be8078c0d229b1f31648980886c669abc081193048c0d3033300300020310187cd0e043869824427944016343e88c285e66d0e58701887eb0d20f398832202ec08c4456a8484889484a101960ae982b3137c4ecbcc4d08205f323f42202120a85ae504c4826e46306075128a64a8c1017a4cc8c626062ac508c888a8c882c991a423740e16387170e7469a103508c604437c82c894214b6e60fbb0a7ccfdf6a8a65ae9e6bca533023dd5cc3a8e38f5a7b14505fabf6db62de21fc729f20ebff35e531eeef23d5d80411e359e1b4b5622ebfbe2590ba67cbaf9f74f66c3909348e52d67d7bdf95436ad5e071ff7921bfdb477b314d8376ac29f7b24e4f7fa67304bd6e6bf1fcd6eaceab9422e0f1cf8f35e411fbdc6b442353db7187956f0eebec2188b77abe75dd18430d3708fcecf9631d2df7b0620d7178ae0f60abe9cd3bd33eef9d5a9f41e3fef0de7ca7197f46b8f1a7d56218bdc4654ce8b7afba66ddb997df037ce6c9a3943552c8b7b71db8926b88b98d599a7054dab6c4c9c581eeed8ff26f196fbe7d6f00fbfa69d738eaebabd5990cbba18716626827859eda31b4e4f37e5e3194f8432d35b077dc9c7bbe2d9c96e2d8e4ca00d41542fa25fe1ec37927940b03145aee2bbd74e68ce1f4179810c67f73c4944789a3b6008ddbfe6e7bcc106abf6192ab02d4736d31f535e31bf3c7445c14c0fd475da7d5114eaf693565e151e226cb7a2e317a8c11e6bbf59f36fbea27c0a18d555a6e3b9d326209dc3b3db4356e3d3f853787b16fc630eadcbdc63a6330b096dcc208f9aff2c78bbff0bdeb2829fdbdea787704e6aef4677bff9512e64b21c0af8f704778e1de965368ca321c1c1c1dab8acb8b9c279df6f318ffedd3ea2ee8d7d1ca8fb1971e73291f702b85fa732c67ad5edf68eafce6802a35ecf6d78f23cc50479391ab0153c2497dacb45f79bfd5a62cbb18e061ef34767cb5f51bd7dae4e282620b7ff77c7ebdb9967f8b5b219e74e7daf5ad7d622db09db7560fbbc6f9563d955c5970697ba5d1db1aadc41e0bc9e59f9ed34877f4d8da2bfe9ddafba969bc73ce1b2f2b24cfd8634af9b711e70caf05583b758434d73ce3ff325fb914a02bb53f632a259656ff4ae54a40ed5b56d9fdadbc478cb909c7a7349412242e04c83fe98f3edfef738c5266190ef756ba2cd3c2b529cb88b8aaf0ffd238e1ef34f3d0eb003fc77d21dd3d6fcfe9a7918a3d6bcd9dc33e35c73573f8af29b8ceb5724eebe6b4d7ef995c52f408f39f3857af77be749bb20ca7ca1585d772d6f93be737cb2baf12171413e6c8618edfef58e3fe3d57976cefee734a6ab9be3f475396e16c6b8f8bfbc5bb7388e9d4512c3da2b6706faf33c5d5d7a86d1b932ccba34308bdbcd57b99a5b63166a157ff25c6d7636eebf4446ab00031c7197f9ff9be9d6348c5ba82bfd37b3b7ddf52fa3c21b442fd3c671cab97f0fbf869095661e62df1bcb0527d39a6b3894585ff71ce14c30b2fd4145f130e8e9cab52add2dbc8d9756e7e7ca753e5867b2bd60eac29688c7df4f17a08a38fd943296cabbfbcffc2782b94159ab2cc5b51a8316fbbabdfda574be1ca8282853f5b2fb5d5f6dfecfb13e4dc5947eeadef96ffba9d00fb9f72564bedc6f37a8d07ee73dba96f84b576cc7113f8b593434e3fc4945acf84deb9c6777bdaa1cf99cf25ec6e2bcdb9cacd67c65e9a707c56db2fe101e2065a4ac015639d7fbfbec71d234f42ef37fe18a3defe4b3b2d1220b45457c96bd5fbc61d8f10f1be927258358ef2d26bca329c27d61d7b7f19a7ce38e7db25ce502c23dc1c39fc1d42ee7785379bb20c07c72a4295995e9a2796dbf7eb61cab2034ebe71df1cf3ecaf87b40e3be3b67b570cb5cc986b22482a2f9793c2d9bbcff90ee1465c21ce5bd23971d694098b0ee9e3d5d6636b23fcf2fb3978a6f376fffdad36ca8ee5e8196efd7b977b6a2e7d1c53d75a61d493fa7ae18edf1242c7f656f837bd3a625f7910fccd9b529f798cd3fa798110f9b432dbed6de694caff03ee39e736f389a9ef965a1ff8bc2dfcd1f64dadc6757a0b0e2c6f9f15db5a2b9c51da37beee957f3e77ce50ef1997b07a50bdf6f9c36b6fec5e57cd03eef7f4b7eabce1d776df92b503aa2bb49ddb08e7bf306a1ccdd2c1b593f34d6da754e26abba05d32712b5596e5e0c65865c551f6cfb7bdde8d68b984ff7f18fbaef8661c93d5869f1f6f0fa3841243f9331b5c6eb839e5fc760d658f4f583880bdda1a719470f3dde7bec1e655db1c31957c6aefb129cb7088c02936100994eae754f228d5aa2b3961d9005b5db385755bfaada6bd06d4f3e9a7de15d6ada3bda61f6d6b32854583de67e730779c2bb69377130e0e0ecfcde63b1dad4be9d8f0dcf494efb830e15e4525cb726c6e2c29ac352e86725b0c6dfd5c67db4d598653ca62cdc046ef2da77142b8a9c7560637777e3bdff4525d7da6a62cc39962c5e0eacfab87137f88e7bdd5946538482c184cd82396d1d2ffe996389ab22c68ebb20c27cb7eb4ad49d0c693dda8ac1774fb7d97f56b4c79ff1836b1a962a373a3d2503a8d6a926529df751af537cb0595d748eb8f3d734a63ff2df0f8fb3de187fff26ef16781867a6f783f95bd437aff0a7aedd456ede1e774d7ee5550e1ed57662ae3febd739f0219f384d77fce27de3c7b14e06f278dfe4a197feed89f007e5965e7d97ead658ede04fada9965c4b64e4a2de72598dccfcca99efad65fff2681cc9bf36db98c9ffa5bb51a784fbc3d8e597b5d35d469f8bb37d6327a7fadfd368fe05fbf3df7546b4eedac5904fed22e35f5b77a18a9cc68481cf1c5b262bc33c63187c0cecbaff75cde2e3fec170496db4d319472faa861bf1fe8bee74c27dc96538af93dc3e28aa7949446e8e9dfd60c0c3dce7a53ea6ff6bbd73268b711f2b973f45b4a5c3db0ebd591fa0ab3f533d7da812e2bf47b52eb27d6bf530e7c6fffdcb66bbbafde7f6e607bedafe59eeb1c35f5930ccf7bae33d6e87b8531c252b7c6d053725aefc497eec9e7d440c4b3768c79cc1c76ce3310fb9e3153893b8d78660c70acb1dffae208bfd6585e60db9b7bc61bc6caa3ee16d839d22b73c53f57fe7705a4b7705b5f25cf36d61b2960ad95dd57796fc6f87e31bcb67dd708bbcc594a3f01df25ec5a6b59bf8e504309c47c23e6d7475d71ed1886b1e1c77e73fefda7df5e0e06e61d5ec9218cd75639370eb7be8074d36e6dacd3ca6bff34e11049629353a30ae2c150aa9fd34d9671252b5604aa965b62ad7bd550f7a94d5986c365d98e05816aa5c5fd66dba3cf5b4b532acb70b20c27894dce4d96a54e3acb36df9d6e5096171f676d37c698d34c3feee2726b6f8497cb8d71beff0137fe0c73c49d6e0f6dbf3818a7312c3746580ed059dae86184fe4f6f236f80a5516a2a2bbdd794655a571ac262c0a7bfde78ebac35f37ca329cb98dc585ce069ff8fddf7cb399e329ab22ccb9828b1b6f8596f8cb5bf5ce7eaf3d7627e3d619d194fa873cd3c8b5c37e7de5a4a3fd7ff5e2c2cdefbfaa9fbae57631db554e90a6fe18e10e76bb5aeda5b216bf5936f6a2ded58f205cc4cb7fc1feb5dfb9c5b01fefe3c29f5345ad8614d40fcda767aabee55ca1d3f022aa414dbaf73cf37c35ec5e537c7eff5c772d6c90fc0a59ef7d38d37e4964f2abcfdbc5bcc679f9d72e9a7f810c78feb867edf7ebf145fdeae318f5562dfa58e42533c27bd5ff60c7785c2d20dfbf676f3da2bcdddea02addf73e3ca7d94b2df2728a79bee4b61ef3f7edb0db0b3b792f3acf38c18db02e01c6bb670ffada7e6923b41b9d452728fa7fe3d7f02e08ae196f5d36ae7cdbd09993b8f98e62d27cd7807cd4bf3b5b5f7cd21b5984bc4135ffe61bdfacb29b74cebe38c585adbbbbf7103794cf1ee16674dfdfe7e15b59610f61d7bbf98f38e73db3dfcb4532b69d45ce49bfef969ed7c738937aef9f7deea0e2dae796a263ecd5c436eebe5f6daacca32d20aede79e6b0db156a7ffb3ee1939ced1de9484b95bacf18756565ff34fa5f672dda7fdb64af851bbc7bbabc7f7d24ab3d632f9b55b5a8e7196b9533c0079fdde1a6e6fa18614df93debe5e6df7b5167b8b4d38ce5e29d5d97278f7b43e104a2ffb8e79f3ba61fe7963bfe3c7fb4ffcbfaf72c6ec69b713cfcbbbdc9077d8359e1c7b89b9e49ad68d279ff3ea5f77ef31ffeaf3d7f6df19abc6d74b3d2fbd3e5b597d8fad386ab927ad1e67de4b707e5b27a7d14fea631600ce5b5e9fff8cfe6349b37cac37bf784ffde7e4932ef16d8779ef7b6b8d547725eae433d28aa9c51dd21c005ffd873cebfd3dddf92651359e9ace0de3aed2532cd4434837cd7043aee995cd29a5dd479c63ed724e2bbdfa6b7fe5d3f6da2d9755f2ae3e624afdf5dc7b1e5d719d17739eef8c9b539918e60ae7c6f157bc659c727f9ed06b9ceb95757624ecd47eebfd2bb533532b05df0eebc51bea1823ac304abf567fecb9fe1befcaed4eedd2ea4efdd5b0e72fa129cb521e55e21ea86719cf4aa51c287e7efbb7ddd6caccfb3cfd92d6959e705ea3e4f84eacb7b75a9ab26c87233abf14decf3be67dfa6e63c4ecd36b7a2fa7f6d7dca9df483a7c73bbb9a6f06e3c3fd626ae88939a2d9c5cc34eabd67be2de355a44b5587a1eb7f534fb5a61ef9a6d92ef86f2e38c21977477ddbb56996cba3f9ff252bb3d9498d62596ea98ef9697533a77f557c9beb2cefbb1e53b421ba5492691d0763a31be3aeafcabd57eb44d657320ddd7ca2a2db61cceff4d59a6d2b66e4304ae3eef0bb59dbe5b0ca9a9a475a421e4acf9f3cb67e4f243be4d59e6531a8a97f8a9d31d97654570e4f7f9dabbe7be5ed638ffd74add09a5e272904c1da1cd94d2ac71eef8de400be19e944ed9699f70e31c899a6ffa69859d7e9be534655929cb9464f45aedf5f5b0d70aa7fda62cfb21ff685ac9672b9564f0ccbb7eb97fed54c329ad29cb4af4daaeb59d1ac3bd65c4f59ba6dd53fa2bbfa5345fdc3d3765d9166df321d5eb2dd63163ae7fe5136b53966d1d4765e5f0ca0fef8dd4fb484dd9dc16f74879b4f56bed3f3765594fe992d6b36c476ebfb3b6337e9f7bc7389bb2ccc4ad54a54dfba52cc3c9b1d9a2a764191191660f73e6b5ef4f7bc7d394659b36f15296e16459f7f3af60ddea07889b239052befbcd714a9efbf7d09465387805c44d2975cab2ad53c177fc7c23ae31c23ab7b5d91a21c71c39adfb4b5dbdefb508f0e60d21c619431f7d851d755aed2cc3b18620b2c3c6cfb7c65df66f7187515447ceb0c3bfa594d24a4d271130e497438e31a77cfa3c042b33af3edbb975d533563a26febd6be9219e1a571aaf10cda12dcd3aeeeae5e75d632f0795f26b1abfce59fe48a1024471f038e18d7ac379a5a6989ab20c47c7e6089110baadf34748bd9c11f30883202dd57e5f38e1d41553da4504841c2f847ac30dad8db8a4f52ca21f780871af5e5bd927fd306a4025ad2f21f281ad5af7dc358f5acb8b79e77d522238ee8dfedb8fe7be79c36eb588dee0f7fe5aabef91e6a9af366559f73de835637cfb8757d29d6737659949c4831d682f6fcf3b632cfddf979bb28cd3543e221dc02fb3ae7067df4d3710e5a0de3d6def7072bcb5f6fe0b911b70de9eb186b2db9dfffe6dd4bb23e7f95ffeebdcd012a974ca68039978946ac55373639d216283ce5deb19221cf09b61c734fa6e7bbd4159868313c50607af541a8af500d10d748539c619b9b772527cbb10d9c0737c3d9e1dea2cebaef3860c510d62863d7ac871bfbd7fde6d6e3220a241e55dd7da399cfc4e8913e526cb6e2c0888d6d8d1f399e3e450e2e96d9e019f18664b67d6dad27ab30c74fef7fa9b69cd300679c33cebd6b2ff4839e7a62c838194374a2fbdbf2f8898f6ca3dff9fca8ca17641c694e39cf1fc15c21d730bf2f4b2ce8ca1b5d4decd827ba9eddfc72fe3fc98c215609e73fddef20fbddcdaaaa05618a3c591f74cf7d733052214d09be7ae5e6accbddf1146407402d9a99471471b79cd326bd19d17221344f83fb6daf75bbba7599620d3c933fd31ea183bc49304ff5edcfb84fd5fc92bdc6ae8fbbbcfb6c2e869e6719ab2acf33e5d88d2d8fbde3eebcd384a2a3d1f0196d8573bbda618735ab108b086f5737babcfba56fdd1b89647ebe1fcbe4e0bf71485605feb3986dc5efbb3f63775d21c170dc52615c5a6a74e47d8f8154a5bb1913206f9236ce2e66fc4108160525a7b8dd9eaabe7bcf60319c279add4d0eb5a7790d7522aa94467e4eda994dd46effffe549bb24c55c229c28a8d3cc2261e71a3d250a878d4de340788ccc0fc66cc7daf7c471f2b2f43e48149edff58e309bbbd954b539631014412206e98602245f5c3451d80ba7adc739d5d577d2f356559c6248a88037362fa65f61b7f5d63ed36106d60f60871ff96de7a6de6119151f3c4307f9c719c11de3d46c593c6dcf7ad7ceeae2b14220dc47d75d41fe27dfd863367a043c8a3941ef3cf75951b0392cb1f77ec5156ef79a6a20becbee7dd76f219a5f53f1b406481fb2dc71877bd258dd4ca0af04ca7b6b5efaf6f94b44721a2c0dff47bfd6bbeffdac8411189d1e9fcf8fb9af3ed95e2b94434810bb9e510ea4cabbd7fd7954802fcebd9a5dc764351183d762ca5e75a5e8b25c526244460507dffbcfb573c4d3d75fa59864345f4c5fedc46aafdc6fc5b696704f2af7b7b8e21854e8820f0a3e43d623b29c45ac26885c88b4fa7bf7073396b13a22eb2ce79464cbdbc14de9c653829edc4dd1840f400286ff67e479ca39e1e662a440ed0facf1c75ddf6f74bafb52a206a40fed556692fed1c63adb3e72930440c9097cfeff3aef14668e7e7c272b97faf7652bbe3cc5bcc1e21dd724b9f3dedb06bb135d752567b33fdf5739ec59f73d6bf7d95127a593716926ab929a717c66fe3d7574c9afbeebed77ba5fd305b01efc77d42293bc5b6e705d05c318637768da9b4b82aa0d36ae9e4fd6e9b7fa63401b26a7ea5c49ddaba7384088872d7cd67c51beb5921e6f1a22ab684557e3a7b9c3b579b6d4c9c76626361213a0085d4ef3badb53c4f1e21151b9e9b2cbb4189a8f877d3fa35af78d2c93ddd229a42fb291d254a84104931441445e9a4ca918289a038a9723c4f693988baec10da830bf25a7808e97152e55c89c243280f1f1fcd2344280b1c16b81216bac20d212b9470085501ca284485184253d0c235d4161292029050145e0841a17452c5107ac294b1c6d97da7bfe67cad29cb747cfc4e96e1e004712537555251b2ece7a4faf13c369ce7dc046d2b4efb8d47e3b9b9901072c2975c5e7fff87dd63ec3d1edecbedb7afba476e879a702bce344fbfa3e59c637db3448809d44afea18f787e6e25c5a62cdbbdf4356d93c224b4045ab1cc387e19bbdef87f53112125f48e21a7dcfeccbf97309ab24ca57fb20c27cb0e7684478920bd6d5a8692502584844ee795d672c8f186184b2e89d0119408ddb14346a83bf25fe58d35631d3fec382062a808d18e2ca13a4244b05f5fcb299cbc4708ff265273034343b0f2ef1a37c5dfd3e171f41042ac3b87b26a3d47f7d2563a73b7dc46cdad1c527f0ea9fe1c4ea923ae7174aa21d5dff64caddc740ae1c6d8adbf70e33e37a53d08726e7e3bdddc47e83dc74098f5536a39b47f6a79a1fdc19e15d70c25deb67f3c6350c807537f5d2395704269a1e7706c9c69eeb6c24aa5f711bfd16fed19f6ef2daf747adb83100fa68478cb4a6bd51ee61d81423bf032f32fabec114fae6bd581e47dd27ced96d5df98650e309f79cfbfab8f12568edd88dc7e0a7186b9db7eff6fc3eeb9e9b4f1738eb9ff4f84d8889ae23af1fef3f7a87bc4c1a6f5761ae3f632fbde6f806dd77dee19e586f3cb1e45c80653f2ae2ff511eb1d799d0808d5a057cdb78e1a5a8f6bbf34e8df434dfbcdb7fa1f235fe3ee5ee5bc5042d9f39eb83b119a41bf71e33bb3fcbec399ad0c4231c890db6fffa7bfef1cb9244008067ef688fdeeb3734933ec2f88bbfede31eede7baaf776419594c30fa5cfb1cb7e6f0ba09dd75fecb7d5f1db0c2d2a422ce850ff4d6f8497ce8dbffc406805b2cbaaefde924a6cafff2ad8747699a5b418c3ade94d41965ede3dabec917349231b2114444d6d96d2c21c69b5f082113a41c45d7f8ba5ffd57a1bed172113744bf1b73febde39a5df97a0da0a3dd65c768afdacd48b100966c774d27aafcfde66e9bb94075283f3a9a3fe32faecabad1789501a157e986b9efbfe6ead855984466073b53c632dffbebafe8c45480431d6ccf9cf9fd3b9efdf213472b47eee5df5fcffff5e4d591602ddb7a7f7622ea7ce796b5396a17a2a150201f435dadae9fd57daadad29cb362765843e60e39cd55aaee5f5fe7f6fcab231426740334265503fa3be77eeeb4d59f6c3b1f494a7622120e4811f61dc98d36b758c3a625396dd843ae07fd652e65ae7f7d9d21be200e692f7c92f9e36e7babf0d946203a3d8c01d1b08c5063ea9b1b0086d205a7831bfbee33a73aeda94653a213234d69fd3fd71acfdf31a9f088dd16ddf76e7ff3fcd77d36a80900636de75d289f7cea62ceb364df5732af594ce321c2da10cd0fae3957e729ef5bf369bb20c6715c280f693deabfbb59afeeae1054217e052ebe8fde6dbde5bfb3765d918210b50eb7da53272bda3ce389b7c97d23e5242158830e3d9b7a7b2dfedb72f410951a0df5ea3c5127a7ab1c4db9465abef242446ec36ef5db3bd38729c532bad88d004a4a598d7eea5a694f7da4d599624cbb2ccff947ca7734212c09f7f08bbf7dbfb2d51fd8473e3515dc7022314469ef24e88f1d557cb3a2f1891e35b35975bce3d2185a62c43e98d6f5e4a962d097db1bdb4956b6efdd4b1b1627344f7dda65151adba5f5252adbaef59968050046e9c7f563ef9ed93634b4d59562aa1b64e55e1220401fce7def7e73d799f196a2fa084ba083de052dc6d9d9bf7cb44c801b75b0db19f1d6ea827a5a62cc38992659c164d335955841a1062c04e888b1965af9d625b79b67ff7d016ddd73b6f8e17577dfddea62cb312d28246bf358553ceebb3fcd894657e53052094859cfd7fb879dc9ac20e61b7811016d9ce0a7dcd7ef69ffdb413085dc1f3a799c6bd219cbce70a84aca0f5fb0c39bfd35e083db4ce082d004aaae985d976ceed96500112ea5de9ec53d20da7f7a85002aea69cd65829dfdbde6eb59fd2f14564d94d014208a8d45bf9effedc7fcef5af2267da2bc697e3ccadbdfb0017c758bbbe515be86dcd54dc6abfe4b94a2d6b841b4f11ed95de6e59adb73bcf2b059d90e2b923fcddc61d05d7bd432b65c7fdeeca2d14f7f2ede7bcf0d74c73aea12eb5538ce1ec53c2dde7a47b64eda3a6d667e979f577ea51b18edf576c3bc5dfd63cb8c55b5fda71849d7e2ab3d033aff7479f25f6356e2cf43825ffd9e26ea39cf50afbe7f8a1de387adae98c56e091da6b7bee315b9a7315fad75bff4cb19c3ad70b772e2ac0aaabb6b6431a7596fb4f81c38a739cbc73b9e3fc5c0af9625d67b693f73b29e551b0fb4b4fefffbdd75cbd8642a5317bde71b690572cf313fc85fc6f5a21adf97b7e9dc039e7dd6b4ef1eddad28bc7ff39e22e398fd7fbeb6d132abd95f3b8abdff0636b9930af9cf6f2ba2b851dfbba045be3d73b5ea9efacb45725709ceba5fdda24eccaf9be9efb6fa1afb522816a2c219db2f6de67f447b8327b19edcf9fde18f31d9372eea3e658726da1a446a81566af778554fa997911fa85b943de71f696663aed98bf668f3fd7f84ecaeb9878d73a63cd90f76a8940fbc4985f0a37debeee2148e8a1bcb463d9b79e938e1a79fe9c66bb73fd1fca39628d54ca6b3de774722f07d6f9f3f8bfedd056cce3e8d9fa7c3fdc19d70db710babd9063d9edecb9df1c83c065d5f87f69efa79057205ce86bc5bc7a6b21edf407bf5beae7e7d56eb8a184445c3e88374e5b29c6345f3c778703ca8ce1dcd366ce33f4d69465a953c977fac8f506c7b766a92fff7c5e9af1d503dba1fef4d39fbf9f527f1e60ecebbe30d7ca6b9df8ef20779fb1a697672c65fe5d075957a861f733e22f2be539f0136e0de3a437f61d297743f78f27e7967fedf5cdbb8d4b73941cd73ce5b4916b36a2f7b6ef7e6b86146aaa71e03fce5bdf4f67ef5ff27c037925f57e6ee9e5f69a631b5cfb35bdde6a3937f5fed680c7be65deb577bfbfed970650f69c79bc7ac635f28db16abde1e7f8773e8359efdf1af7bbffeef85619c4a9bdb4355aecfdfe98c600eeaaabf7f67faafbce30f85142b825ad5af71af17cc1f69a7e9d3f9676729ca50bbcfc9c7b2f3bbcf963c9af16fc6bb9cff44a783b945aebec8b0578472971cc7ef2eca35f81edb8560d6f0d9c45a8347169c59994c328c610020061291a0100007312003048241e8dc582d1905cb691bb001480014c8c6ab44c2e954983b11c85411404410c8340000084186400214649c6b207a5e84a4baf2e4dbb773186425f343b46284b55f1c9f21b886bb008b38f7d08ac36da0b9b2ddcccf4626a462c3321d4c0a5e907996084247703f2563bcc669aeb9d820fc2d01f4f3d2ec45cdc4b1dd1addfbc9d4540101631ed342da08654c64a3cd2aa43f32a011268a733781105e54ec87e1012ea6a2010a35e4dc1e5f48590b21f8c13d7c8d813cffa9761380a90f9ade8e748b6fca7e817c810bbdff1d0c0574eb00664067eee8114798bb792fd313f41cc0c3ffcb6c0c88d100cef1dbbdf2e2ea3087dc36a3a3bdeb0e73c199b6325f1546c2864b24bae768e9372faf7db8eeb0265e490328516ade0d230a22bb277bb6ae45c6b4936bc946b895e379b8c516fba82afd5d83e1d4b92286c458a7eba4909414a92a32ebd161e74733df7192d49bde98f25774a3e18c401f59dea3ca4021ba0e18e660a50f3212a7db52534d9cb47584105ee9269629d41ea95899d4c0da4657b898e08f00f8bd7be30d6516a27b1d2a9d802ea16929b27f190cd8f2308d461c755516b29724404d358113e20573fb7d42feddc2a0d2bd3d3361896ab13ad0c8a1ee4fe3f8cb792ebf2ccf73c6f1b9ffffffeb816393df14870b5e0ffd1731d01b43925847d740bd3f3af2fc2ad08a18b72d456cf59bd09846a598ad0314420143a9b6ddc9f8bd0eeed0a8aefafcfa6368e8b13f762f7c810dfcffbae72e179ce3356119abd2beeef63615dbcdfc8a4defccf5da55f44efaff42eff60d9b7c952fa11b1f47f94f3db7863678a40c898bd08e76c595423fe4159475df1c41c4df7131c99b3202107efb1818a0134eee626fd50ac14c4bf2e88d5c4b77994bcc860f5e083ded4726bc2db8c356f50c6dda8bcdf70fccc2bfdcdfb0cc9b9decc4f9c71857f9f8d0f4594810f4acbeb8e5fa254748bdd4a12e1188f6f0abcfe49bdab3cbcf7d81aeaf4beca0a1f2872e326a95bce12184c68464aaca381a13d2a88dd9a93c9f4d388df0f93b14f5a0942a1df1af61d6e7239685210eeec32e95126aa6fdd07bf90bcd60faf29bdc2005231873b8ceac2fb8766853079d8884604dd88959a2492d67c44ce0a47b02975e59bbb62a27cd61eaf32e700e5be0700e621484a58fd100cfd1cea9845443f6d2c43fa204a10891952715d05a0608ee588e839ccc4380b9907e68aabcb40e5113f65b94f97a280a17a5f17613a6aab440a22f57b8f42b682d832f5c3bef15a77e875b65a5946853250a1dc18b94428a0d292026c066c91c2624b707e6a72a3f10cadf55e1b64500427915942984ab1c41997a2e3cf43f173f57a3101adc9c6e539efbcff33a303a9687038eb31a624a2134339de4d6a6b430666d1b5dfd8d865627031d26c678371bf463d0b0ca1fba37145a1b12d15f33c1c58a7c8d76d13f31e7c82bdf6c7b535c40fac7e24e1b3c4a752bf4efe2eea1b6b9f277e29fda324df57c26f6028e21cbc94f1cb8e15e27ef9dbe0a20ffdd4885ddeb81ca9cc7b9f0c4e515316f569a725758065e530691fff7b3e673f83288686d032ecfec2c4d96dcde4c8cf4e4f0094a6ca7c34bd45bd20e185aa7bc44d52f3681dca9af9c7eb68e54b0b60b99a07ca669db7a10242b8df6a05bfd16eb69f0e77619dc60968374c49c7da6877fe1c9208d1681de868345d851aeda6f1aba163c4dc68d6a6592e1b7354e6f8d6745ceb088e4e81919a03c1555d44ae1e8ca68616a2e3c649d11fac461f60ec5d2fc3d31c36dbbd9a4536f483440aba0681664f9e5147bba825305267770cd0af99b6ce0dc9617b21fd429e3644712c12e3183d09d848099612c4dce3fce6aa2da1265f0e4a0a66af8300368ffe9c97800e022540a822bb5461a2f8f1f474bd416453927ab2f25148b24e654690c6f7472a066fcd1de881d6898a959f314a8e827fd4ef6f0c3ee6c4317cc6b5b8806724fcb17cddfe18ae2bd3db821f2501cc04b9e334a6fbf5a85e73f03a84f9fc9f22601b5e30feb1fbfb6eccca6697dd3d7dc9caa2a170dd5569f913b3c14aec7e8688b5248e28796267978cb8f1d5d6ad5127968ccca20d25684aff17c3a3febf7318df70d4d95bec770b33ff58b1a7c83745e2bee8a71297009acbaf97e970fda56eb9f0ce6d89b6eca0ebdc6d8343c93b35a36c472b129e9b327e341cfac8dfb19a9dd01c09799411f36e61dd1ba06b936d180679e2d2e1240cf432f88fd4e45b932c2783b6b92256a49747f23185b9b4c8204ce65bc7578d1de21e4506abb690dc7160f788718a6a2c34707838bed73b046e50ea2394707299c139a34230370cc0ae85dc4cccd1a24a1c7ee6d51928f44fd86d2ac56c37917142f1d173bddb6b9660656c3295b27cd63824d3e6f1682ae81de04a80e9ecdd3f1b96378ada8903d1335d8d60c336f8a38416b2d8bbf11709308fd6b0ec4ac293fd72a4065432d0dd53fd9323003469b7e20bc8e7f8b85bd768eb7aa061914420cbc788f8f9495bba5783af4d6c111f377de5560e2958cf66eacabf1de921422d40d801d1a4f6d832acfd62e2cb19a10f7753817400ef10344ff79077d52f3deee9e8f82fd5255c3fa37237c5e5abb836263653995b9b7be5da891f8b8cc8a44f8e6d0037956ab689ff1ab6624564e14772dc616a48062f8cce7cb323b92e3bc8d14d08616b025424c7e5e600741c9c4b2e09fcc1f6a70fd9f3c0906a72d3975e0f182bec51d200051f45a0856d99652e048876622e0ed5b2c07faa1888c749ddb9cce9a0391d300c5e94e5a49fd43560c8c2352ebd6aa416765b58531628145da39a7bd322605cf2f0061efced91b802e63d50382bc7d0856abd4f017813242b602f534a1bb4f03e90b9d413cd984115931088e805d7c0be2dbdaaa90adb341ddb1d3e801531ee124f332f53ae841f701089710c1e2ed219d8e4c863448a2f67ac4e72634710422847286d48bef2366b78f606ef3aed1ee3f56c2e44615b294fda7275833991081c525e11c4bf6e5f1d9fe5f77d03f76809872de4be4927593c6b64d0f554a3630b2277ef66cafa8e39cf6f7702ea0add7c13ce53013d2cd1ba5c8884a7483a426264dcd4887ff6d7b07469ec651d060842b44afe989f25010c96471a4df8948ef043f3770d3a22f421d61687e40774ec0d452b537cca76e657f0526e956494ba992b8b485f6aa22f38168185d158d23156b0d916bb8c5d62544d67a09aa92bd41b10ddff32922af77392dbb4c1f91863141b921ed0959ff2b53d1d8846f48454592b27206a3f6a4f04cdc1a7e34206f68108c0fe73cff22f829590ef3e61758a4d20c1b64e8c361b2ad539d14fb779cbe4d921b6da26b605eaecde9f5110ad29324faca5cf79869035924ea917f4f69625f55bbed36ab94fb16800f3255f353668565700a617e378e578bfdb9b19704c5ab5f6b67baf2d84c12b49a736f1feae2feb7db3d462be6b09bb09d0bb18c871333de939497339b017d99946dcbfc94266cb5e6deb46f53b7eb2deed2f642df66f5265afbbdfeadab977eac94879ff9a823a0fd0b08c9b2beff20e8a3e947e29e0a69047b18fa24e4aff947ba1ccb998385d6423c7bbd07006607ad4946c8722d3fbe7440dcd28371b346fd4346cc72133c14c0a9a9eef6c10d3c3a0e91be86ceaf7e7a60143b0c2fc67094ce811be0fd783cca5162bb5aec0d205ab4b2d506c91926565962ab4badcba45ac71d28c02cd9f3f62681c212f8512314427e895096d921ad4bf51cee2b3fb2d8e0dac0673529ee29b425140d3904490761043a5a5fbeaa8ec53ff1a2b47caf733653af4e95cf98efe36553a723f252d94b60ee7495096518e8caa46ec2ffc67f6186dbc9b73ace2ebe60ef4e14e6f15ceef95534dd4201024ea757bd9f95e9796d1ae33d184e76e93b9a5da10ddfaa63cc3ce799eb35a0ff234db89946f58f31b0b4c4a42e6ab4aeb0e87ac6536d43079be3b43e32fde7467756cc9ee5c16bb3c375ac75bdb650cc47713ae4379c9509965cc8763049d4d475fe5ff768bc3ea77cc12275a91949787e2d3db165c9596cdb55d5eed1b171f3473bc80f3470ef6a0fa4c5d3cab6733768ccd76fb64dba952c95e2563990e4d442d2875fb1b48b5067973e0c490ccceca915e163804246ac9d6daa740b6e5eaea0a0ff08b2791e596c3d2384236580b9f39b1622c58cdfed790f726071c8cb872fde1fc83f5d2e0b57b56cbb216a9f17fe08a9569413f61cd7529876bbd6941b80a553de28ce35a32409d412b0507d24f63c66fffa65321caa79d3ae7872a56155de729ddbacf99f39b485f3451b618d689eb5ccf3d8620741166b41bc1da3406401c9d1024831faa2d95e0c6042edf66c9928107ed3ea82b80783ba585e56eb5592bcc04234f97b6729ba6050acb159a186ef2b5814c248c0a2cd346c728fb0d4c7fda47336a1e9f24035bfbaf506a2592ab3ec849db155954846f9135ae0c1fdbe078b4b34042cf6402e21d67bdce431b8be6545a21953270f733fdf6cd5950e1132c841290bcd96913cfa0d5fb1bda346bde371536ee4e44ae27c4b42e53817dc6f9a291c4c8743695efcb2ae4ef2cec7a13ae3d5df1414b19005dc13d56a86a8403119f195de5aa47ca2a3b3533dd58cb15a8f8edeed650e7e792751da58225887c046ae3daa29e6ee23aad9767029bbacc1a923fa2874be82523c4aea85ea5a44dc4defd03811863f22216d4587a43be03a1a41af2c3985676b39b31d3ad452f36a8f651337268229c96554355c3bc5082169f04bd3eba4cbe19a48988f3bbe2697407a2d280f0b3535510f5d645070ca24e1ea0c2c2ccc89383bea5a2c3e719b84df9588283ee8f049f08fa2582bab5f9fbec701ca3e96c7281cd421747078242635ed6fb8b5eee90ee20e45d88e278ec811c6e087b497adfa6f01cb4edcefcb4cbcd96768010e4896083694a81309234e4d3d24b735eec2f184a8a1d5e4c7617c3bded87014fed40edd08b43affa796b16cd7f789b6793c4bedb4e1aa5c5aa49cc1d0c3738d1d341d0f80e880d5402ed72c8cba15484a8147ac5d02e415e06a54288ca41ef90396897425e0ea52244a540af643eb4cb909742a918a212f4caa05d087939948a4054cc30f44a401723a4e5133b5c3dc42ed75e8202c804103340770a6962a84d103883082164e62075520d754119ba8542c71216613ada9a2804e4822719eee007117b28e53a207327e4ab653afafe3423f801629f5d80931ebbdf1db53c4788da5cbaaf221df02b05be8720a38ee74150c4404dfaf6dde58188dd6bd2ee54ba54d43710bd3511214cb5b4ba2d9636c94b6144210ce99851d56215e5179ec891329405aaad67b10b045f3b80ae79d7fc4583acbbd8983eeed4f2b5f46af105a48bcc2e035e4a7eb578dde935c0974b57dacc2bd661d7be4611dd383dccc5e3e3e45304b20fca6e30eb109b622c32a9076737c83a944d611639eac1d80d643dce4a962228fbc2acfd28ee5129c8229f7a0fd9a8291bc56c43ec8db18649399c4d204b50f68559db510e6313902538fb1eb271caea9b72fda828633bc8ba3e3540d6a3ac74a7506223eceaee61fd265e28c6a761145cdb2b29e17a3c2807bbb3ea8325231e105c9a8cc02e5a243cc89841d170cf89c25010e655178540dea84d3915efdaa6c74bf99af6775bb86a9e02eb96dfbcca6b27d4fc72002b3481c94015b76d551e4771b7586cfab3b0a5958c2c124256d170899ec46db059b04e87d358d6ce8441624895dca4c8e117f9c40b72549d9d1c480bb189584054e11b786b80d9e543e87d37dd888cf60bb7d6c5ea23a78c58ce1d3d3fa90ccb5e4b1b6aff0b947d576aef7001ecc9e014881119df5672e3a56ad1b1d4b541a1e8e44aa2c48c0cb75db46ab03c92b667a194a8292e32d6a55675f5bf9cb10e838348c16b4ee8ee31865bb0525b01c61cad4b7a4c00ca170db011f3056ef7d2a9cf1117cf17a54dd9854d5a75755f97ea5a012b5daff5403a9bb27a5ce52cf500fcc4209aee76e1e881c3ca65dccf0c0256cdc5cb33733820c1922cf2c0de74ad71439c7cc700ed365a9b80466b86ad788709f3c0df47df32827e3d43e0930066820e10ec62cb015588cb6d970dc63c1f624904208121fe89e5874552478d33c3539e5c9e384318aa100c8fe1377aed30abb984a9df34bfa19639d02e05a61804625ef4a4c3304cfc202c4f283a6fe10c2024a5411a8a5261a17bdbdbbcb4149298850eced821602a4804c611ec07f6bd22ca9151253c7999144aaffc4b8ee9d220139deb787e6e2397008f153a7f8657e063d969067f9870037f90a08abd891e595cfe3fe6689335fb671435361907ca5901c620bdd72e7f2093ae821ca231d192aa388f134b8fc65c0deb56416b3be01f314cacc52cadaf64de5e402d2ca1ac11d1306b9a884aac884e0c035cd89fbbaf220a149c78c18abf802561df182d28208ccd1965333f559311be7156cc7e6c115aef44fb982b369ced12a1761e43e6917b5cd7c6a8be51468ed995e42b4afb1c5e390bce4ca88fcd019551c533f4bc94ce907791d4549db1f2f69b12048d53a1057c2299354d719cb5d2a55a218e0900962173b63518f0ef214feb70474ea6c17c9903a5f95ee475074b5699c278bfb4f205450b70fc6dbecea019155a4004ca7d77d1656cac4c0f58bd6d17e6740c4970ea09baaad5f51a479019663732e40c079e1bee21db47d5f3f87cbf57aa99fd1fa37893df853f73d16f31b62051e17ef5e2422b7acb67dbf2bb897deacaf308d48ce93d0ea62bfdb13a556182d57399fb3e5f915d82b5fd243138593d433556ad2dc414c766b35439efbd778083b3015da8285ff019c5f8ce9ec1c5ac104701c3056052624eff2174b2efe57773a7f05d54d5126557fe2dd6e57d258184fe5161990141d84f75d52bb6ddcde9344d9b7ed5f51ad16f25ae67e15801a9190b9070b6788d0ed5a803fa4d0f04c2a6686c6eecf252560889526b74cf027ec65cdef8d3578d36a04d75ccef31d4911baa4aaeca9f0c89f6f2ab818ee5eefd6047e622efa3ad70fc7bd1fb47942a64ce085dccb5cb50a912262bdc48adac52005f50dbd3b1d69e08f6ba2653dc09c282cfa0fa19cc6065ff5e75c7e963a9add3bb78bd19b038367bed94aaf6fa7c6789ff77d0183dd284b4cba069e12efbc36c03066caf7241f1b72bdeeb28b864fdda8ba9796b3c6cc185e7a76abb46f4a165db664e073d29249619d5af5935ef9c9492154f82243a9f2f466212cbd030abf72cd91346a405fa790d131b3f763087a13e55ab9683d607802535a71908e6709cfe89116d5af1a4137652e9ecc374e9f2a0fb7bf060572caa0a0fe55d097367ecde0b36ef30cadbd3b0e5619d837a74c96e54e750de95623cabb2b7930db7231c264d41be6cc02c0d889efd9e7ebad53c0e415d66f557e70b73a6305d97cb7c9fe79e3b868c58991ac030fad5fd0e96e8e42317b0b179025e39943fe6226b94dc488532b99eb0650460dc07412af3213a4665eb9785347345d004493ced526e8a30c008e1bff16ca18b164992b1f275ac201c6d1e559fe9c928200e235c74b21b90ad02b16b284734f2f4b198488fba7670bb61997e923cc3d74760670df3563a2bb0a2ebc90984f0117bfcadd0b0349ba2994175816540bf429ba4dc3ce0fcc5c2a23a37b2dcad2b27a3c85e99ea2e45c878bf94f27d46809ca75c54897c22f2cf9146baf0738788a6ad97ac5d1bb975036e949e0efe2561c20d83c28800b9d1d3ca525aaf3436d387d73590bb2c4e3efbe79e233e7a333e50c639ba07f116fee5f6f20c1e9fad2815d848c89289677525fcb9c21a662bcb7e70dce7d688ab492a732500c526b47c7068f59e2d1cf60bbc60b7e073496b7a5633e301e18bdc2f9c1528b6e4c50bdce3d0699dcf6b50a199711cea0de8b060c894fc8173de47e4e9f39f8a11086ee6948333ed7a1dab80e7254e963eee0a4cd300279040c1ab65e87b748634cc12d95e90d1db63afdd4a2677c7941dee18c91f2d60b925cf036670d85b6cf70fb960d105ffc4851de55f05ea8b9553f501ee8d4b8ff6d787f32b6e9ac1a287f31e4efa31fe3b065fe8580d8397f1b8fe7a1ce09c3275897b64d10f86e82799cbe34a5030e12b46f53d7874360c6ca23fe5c94c812a7af117f1ebcf81c0ba8edccffe3fa11f304cda6141f274dca1cafbc92d3ad9d9915d2239e5e23ab6f98d5663d278f57a0897e2a44587716e7ca993638decb3a9b46850993c005ad0449168d7714cb4a4ddf8f21590d1325843cf60ed1f955ec0edd5cacbba4fffc6945f6c30a5e378593b2d291df7d47eb48536cda03903d8e11025cf14c31309850e69da5db39fa66486f86727adcfaf3dcfd3eebbe13ae3f3f40935fd0715ea8340aa8ce5462c2384d5bbd97380fe612a90f572ac2123f1652026d168277eee51977d8f9ec0bbef5cf41d7f0eba7c33a1bfeecc9a375e0d3ae7f2a87e82ced72b3cd523b58e7fc8198d5067b23f1fd3ce4f4efc39b52a71e527998792ff06a8afa95ec28f113ff82fd9e9f078bc2bfa1c2fbb35441d854a59ed4ed0b6979b51fa850c7bda0ddedc14eaaa5dc26f9ca8780dbb9b023eca119d1105542e50645f217ff00838f4d901d22cd8dcb00c5c9e8fd4b66a6a4878c5501232249d138836ad0d31b9780b2679a915a65537c2f564181bedd77d8a95c7d42a74754264f8a491250f38adb64bccae2778cb269fc8c6d8ca991dd15e5812b174e1ff9ccaa7f63963fee46c0e49d63386a16d850ef0f40b5569a1e931292fc329cadf3f7152e635a1ffc6239c3cb6cb8d67a544dca7d6d0d7d062afb7b050fdf800da9be294e82c50402749be5341dee9fe9cc6b71f98be7a4d6c0ab4eec780e1b6a8bf9799d540da005b7e28ac067b13ba017c2af50b162f4fc2406e927427fa761b67b6e15f3e7d3eea1d8056f61d51cadbeec76739ffa6b64d9f25075638fdf5f17a9fb9d61f208f580e350c9fb53899fc8bebf7580b788dba697b248a8119251f5061ba614469cb3335f63c1ea128401420610bfd5e211bd86ca202abfa608f0702fdd17d0804f5094782364c728001ef3dfe78d07ede11d6f1f49eba3fded30707c3a024e4fccf7b653d0d4df627aab87d6fcb011ea1da6ebf2c3cc31d6f25a9d2356dfcff531bafad9f9c15069e24f4a1b186f8d01e3446dd7d542a9c690e3adb69667def8f147e99c0f85452fc37f31f8e6a6622cf58f787740e44e7e81863e9bf5d3102b66292b23997a74dbc6f0d830cc221be41e81be594b153af73b58b34663b957db8f6c8bfc64c89a619118f9fceef93827118bbaebe17dce2273183cf7a5eaf1bbfe2d993649a7021755c302a74a2c134f225afb3d08ea428763efd5fbb3626ffddd45dfb59f6bed167ce3fd5f91e7a9d53a218ee3373ae703111c54404e53fd367e825b89eab7ef0903ad8bf617f877c3372bfe8097f9b71b643cf94c0f94671f3d36775a63fce5f36d6d5bd0675d9d0f73892eb9a04bb261fdd6bc3554bda6568a7a31bef3caf6ba6db9d4dc9759e6738e26bee0790a7250330f67f863e433917fd91c0b56dda19893a4c1eee01d683c54e579a79c39b7e377d04a21ab39dd8e6aa2afdeee8e7c0eabd50afc3545107dcc663d7a17e958e5dd194d8d38b582cc55693c89513ee2713813356da0b47d9043c38661a89c32a5ca2e2bbbc45a7883f9976db1476123f6aea99f5cf881c8935ddf4f6d1bf496ad94547c8bdc9d7cc74ad31fee869ef6efb61687e216eff660a0ed27ce974192bd7f0fdd3b79964cd919ec8b599cfc6f07a33f6d8abed273d51d533f6cc113b17b5b8eaedd2bc93d5b7c50c917bcad499eb5f31f9d26bfa892da3bf93f4b20b8e107bb3eff949ad23ded195338fad90ba13eae8bad4a0a541b881dc36506d86b341846db86bc6b506546dfca859975d42e49de342fb718bd17c15d1c75ce170769709b67a10328ff471bd764676473072cc5ab9b1ba0d096fc834665b3f1cbf938605dc241b64ff99584dd30273d81df52fe758e02a0547ec3a1acf1bc7e0ad4531fea28b3336814e326144109ae2c189e3b0a62db3fca2d921c67fc226b26f16055e537a5b88679c10633d0f8135143e9b2e8b672f30ec841defd766fa955685cca188e448c3f82ed5960e84aa9787e1145ba19bd97d74e76da1ba7fb9de8d0ec184da7c0f8a20ea2ca0a7b51d5a77786b71defa251674eb089401d7622c4befea7cef43d2d734fc2854cb30aacfe307cdd868fdb29841f48934db6ae3ed18d1b36c1c05e38049b63b87305e22100cb34b383b67f068d3df3b1aeeaa4153e451834d3bf376a81a8ddec8a8c82c4b6c6a56ff94c142c1727635b45004badb22592a85235f9a6340d8e1734a6ea432a0cb0e2a462f6cbfdf11ed7ac2e4a73553c304124efc168df4cb76c620dfe131c8c329425245c5008306b881bfc503b76e508b8a9d0255a72d64750b6fd2c804246bea28b440569e48ae4d776905f0f5381e4357aaef7b301e1dd5759551703341051804fef7619da525830ad1a6d96582bfbfa0e53e82778c2849d581b36867b8f5962d712816527ca2e9ea456cd5ce0834b1e818527140c59bd0bfd8a30363411fa39ce54f029b9e07ea1453bc94d7f502e5cd14e32f6dbb8c28b6e8779a3ac6d25c0d3c8cb4fd4453a0de6ccd026d1388702191f60512567da2a4c58e552e32fcd858c26c756d2855c721fb53707c3530399064d317894a50d51dcb4358a69bca0258a54b2d00298804dc426531aec7c7ec3d6db78ee680bfcaae892ecd827df6d433a9f3c020c83a8dd08c4b689f9e876aadfec7f0d5112836b9dc7dd6144551ff2257d12c54b1dfee77cc83ab786c0e1487eab50fb168965fa99f89c870f662f284915e8a92cbd13b0670b13e099df5ff408f319d6637ef77f945f7136de9b9793f64393a52cd0d2223e25c5fc3ba77bb8b343dfe81be7765206a6418c76988f1ecab92133ba458b370f572bd8a32b02739d6c070c2b01359171293f1c81f370523de63ff099d4b676d1793e992e5246372c4bd7324c2686f9c8d57b5262876855793ab2f70fc0a884c774e9ec3f35b96e3fa9ebe6174318839ff2d41f482aba8b65d5e0e7c0a8aa94cf89bd75e119adad3b68c0e19d3b2879cb1cbbf88f85ac092bc6d68d106b7951a049746513bf5df984b513dec29387fb919bade65b73b91aecbc8ef99dd2a6cc1dcca60b902d69378395b8ed8789a1d68240d794c5a6edb6039ac041a1ec5377b2140e2d17fcb1f14d219f6c07f7570d7ee6c214d47f910f8a978efc83ab8dee9c4750b497ff4e7bacfe14c76f39593c0ab0d17c452ecda0b4da0c685969737fbf789270a2b076b35f032d31235d7c22ef36b261ff522ee74c84fe7f61f0ec51da8b4e3702ced1072b16baa38d5fdb201cc8b9c1aa1027378dc4b0f78f8c6b4fac28bb45aef95fed4b193ef71f184ff4190adec898be568b03dd61532c8eb6ace2999b7f7a4bca5fd58f14bc87077191c65388d0fcc312b77baf78386318258b14bd586cde2e47110936b0585b9cc47d2bc7a7f10d92feee367b2fad110d74d3cdcecf0402150f3e59288e697052c0570565ce3d8c08025440e0f2cb318324f636e8ba9e36ec66d82dcacde64b6b85321523f4321fab13cc7d7e0b82a9cbc19945a40610d95b4395537ec95adae98252f7d24ec7a41ad42499173efa71b7232be33b010a64280e9ac05d0dfa0af052d943c25114029a8d741ad523bcd9e96a44ace936f492f549fa6d5ff1bce77e67d1543e86b18905916854f1f95dd43f0b62e46350b532b589d8338d7c790095956dab88cc90cd84674e03e8cbb904cde1e3ab2d6bd97e8f9da08696717736abbf2b3d387c6ee9edff09fcefe33ea82fb27d8841b6aa6a3fbac33eb9da8d9043906832dde47bff7bd4e9f00c47a545133e28e7b1d481c581147e3f5c4da4abae8cce0b849dc419b45d788bac1d7fe194b0618ce301a7530b343f144dc2bf177e3aaa03b811c72094fedc967da5de43f370e63d99b1c1e8860503d197967abd62158e8bf18bc1023b5471ddd8011aabf45694c8f08cf27e03e20be8e094eb04a705b7a8c6ecf71130b964e0a8b710b48200a6425236341820a6de6654fe30e4fd8cad4342df56ebf9bfbfa3b78c3c5615458c80298fad83a6084a5a807cd51f2e4f42e83f7d6e90edf00a961d77a4902abd108ffd84cd76a7c921c5fa730e74641ce40ae96050dfa7e466e1282a0d20da3782098fb905312f54e0b109521e6b9370fd0031a20bd544b5616f629885edcd13241d61b50eefa1745dd18c501966fd3b48989540bb5b1de25462cdbd45353a2fe7030b6fd066dfd0fb0d5fea33b12fc3a632f13a821551e5cc27a695cf89bc483e01352d094837b3c50a65a96ef2f0b1a7f4fe100179d9ca8beb1793b1a65eb4180c74b8d2b7c3c01e2a8554ace7b20613b24e4aa3b856d386cfd3e7318ea108097a8c97699d0def0cb8b62def6231170e8bca3e51c198093e7d9799dd2adcc4c35995dc0a39e66459bd5afecef98d85c86d9db7a82ca9eb340c8a318338f549769da01756361c6663105987f3a740694d2e4c822b180adf34a8bbe4099dc7aa77905cd312a7ab828a97852e2d8eec16aff44fb618c3bda8d4ab889216961ec4ca7e1264c7f5d32d3a26efaf424a3d9a4495f131720ec5050f54638d23442e5d6f136ff5f893e6ef3b3d28dfad7fd7cae8e8a0ba2c93a073851aed5e88a1f91beb8f3afbc0e92a180ac9f98e35696e67b88ee43c660ebf51caf729a3e771942fb8e819f9efb8ad3d8154d0f71cadc285010fa81baf83a014ad337944f4ede666c2d061ee766a7557df2e1b7b3928fafd9d0a008e31c6e10e1d3f3c95fc3fd009e4503c4e1f2fe2dcfd830be5e615e4c67d5f69355c58e230c97043abed702ab8af1788ca0d4bb45cf663ce00ec1be736ec3b43efc0faf79482062dd07c58d9fa08d6feb50319de6fe25d7be58d8971e17f7a2e0a11ccba66144801a7efb1c5b2ceab3190f23fab44182cdd0b62c2507569ee5fe83e8d4a5734979b3eef8ef432b2b66289eeef77e2fe8413dbd720efb20bd1d0355f70cb71e3aaf5e2b388ac9f5ae3e2b8ae9eb108ecdcc2f86c572cf5eaf80810637d2421ebdf80d6e63c064b1011dc59fd2c08343efe6f88f9d1133b58991a2a87a5aa1dbf76eb26be09e7068009d541b5219a3120c380099f45f3476463e06812fc5d820488a429f2385068ed054b2de1c7804034cd8bb33b209fa798f6acee6a58c66b8a846e4bf4e95b164cae763ea5cabd495c4147aeed42d9529754f79cf450a61aa2b8c96cdc5b1902b0ecb2a168a803f63d2569be96d9ce2f64af09b52aafa83f42f16180a590388014f600a19a02da5824fb8f66f86d41c6119d724dbeb7214f06baef17f889765e7bbbb79e67b1000f059232223d31517585d2f47d3ceee75d1679439722a1e3854c14550473e1297011d13040d610452861e39225506d2c777467f6abfe41376f7331870a9d00d96c92ce3d620611e142417d2ff3178fab844f90ec0eda87ac23f72144953b5f06962f8b027377a77d37a07f18739b839b7db41cd62a5b971f9be17f70faecb972332a16d7863165ce1dc43ea61d0aed9a5f400ffbb1bbaa83db7b615f7c240c59de73908138ed2946d6de3f144f046404349d7962f51b13ea836e712467539e8b3861cdddabfef56bc5d39d873eab759fc690b3ac8edf77ccd1ff4dd9f73e59853c7595c39d50a9bfdf096d2ead66d508296f37144b3058b6a534c40f935e24d35a11f3cdc98d64d8ab8b213a0e15ba223317e4f22d4e833c902833b59ca4715f55d4a4674c7aad7f00a5bc12abfb943942c26aba1e976742f485d4ba9c7e1853142bcbc945983d7494e7dd8ea060f364f365036c2e018b8aee4d42909d81d69b540a1a144f6691309b0f5bb999953c6b871b8b0dd573061975e91029a29be6f2bf50aae7e91d030ab84f7a12d40907b6e23481754c1cf5ac6abe763c3fcfc00e2eea343a0b1569207d884cc03d3ff1956f9cb52a3b25224bb372e7643e4a64a33a648d58b21a21d7bc2c4c6405d40ce609d6de10d097a68b541bd054fe182d6f259458bc43f6ea23e3a02554c26418a6fa1f267489e0e043578cc06f3facaf55c429a35c0932e21bc8d8051c18d9c6f3c6621f397b76a9838d6ccad4a0cf94bdd7b80abd80b9d7a6d597ffc0ec60296e6f66964eebb1f71320ec7164fc030535d0db177b3250f71c84bd360eb238eb543d3a007692af60535a2b5cf0939de66d696575d44ae5a77c31ee4a7b9aeff5b3d67023caeccb33ff987876dc0b5be9e3ca954287369ec39484a520f67e3b7cd8d6a75b2f51b81173d5e831f84286b82842a6ed27e993acd9c8da3514ff1e463e47a21e32b2d2e7cece120948531ef905b25be4d0972444884d378f9cd8d5b7b44c5a519c680fff3085e5f5dcb5a4a7376334f21b30e02c5e34928e5579d720b73da7c7c34e3b58d011fb5f22e8eb5b305605e32fc98d953c2746ca89de1a49d8107cd9a00e749cfa84d9cabc80427334ed6208742cc0ea67e6094eaa1c01253107f871f9a9acf20c0742c333a2ab5d5d49e547b96d68d26d1e1adce22bfb2b37bf5b1c1d5a7d2e4f038efba092abace9e3d40e03244468781cf04155ba0b8b0d8b239849e99598331f794eadf09eb721575aae1351d7c37ab7fe7b416073c067ccf111a9d483c26601c8408dc2cafa62a2a34d7625bf413a8b3ecccef4fc96c6158b9a7a17a889855cbf09a8634fe85040f47d2e1b22511db9304873c736d4b86824d30315369c25836effc136ec4062553021e0276d2c5620ce8ceffc3989ffc9faf94f5a7d563b43c0365fe7296b8b92823625b19178df491d6730dd0f40ee20f205d01a9b3efb0ac2796198e9393da8fe189fc759203db41823017e573be77e4c8ec3ddd76a7f2ea7c12bfd700ab98b2ce338941cc8bfb60103a40a3f80d8be317591e53ae1241f2da01b72715aeb0f39ba72fd13c30bbd41c1d5347d363a0f49153f2c7878d3ab924b3e43279720af7de1ede2bdc6af63cd57b6fa221e0d8704c79e2d250a40989645fe3d2c34155883ba69aa071af94af989a118ba536456e4a07387dba36efe7dd5207ff677682aca151f3d6aae1ee2f0498fefb2a9ecb075cb3f9de8d0e26bde5bcef9e87a5377e10e9ea97689f9f2e1c12b6812972a5099f1a0c08d3790dcb4d4ae199bd2cbc21e58d5eb29da4e12a941cf958c6598f2cedf510bdd6bcc4bcb8dc1c4cbb7b78db6e5f334e0a1dd054beed0ee0bde50afeeb8423eee385b3d6dee8b0f1a7be1d4b15b5b42ab97ded68dea7e009162cc7d5d904d509082a26445405eb9af5dae352446de141043b21962a8ea4fbe66f1a9d5bac59b27f17c03ab7935cce7182bf373849dae0ff59533eab4e295264e61ca3f68be245d5956536d16b517d742961418151bcc6b531d740be1b0b5f062d5f7bbacecd9d8b1dfa08cf99b9acf2bf0c98945981d78179ae8e26c580674b305be76d6c622d9bf2da6af5b8e88b5504e722fd0d9d02d24f9e1b52c11c1d405c69b6c65b09e041a2538b18c9b359b9a1645cf7fb648b657d4cc3c178699dda0789f14aac0f430f552b19459f8388784fdcec533e6f9c7d3ef4fb86e92a4faec977679ae8616d5c3be23ba8f141fa685667e36589c16658fa89c07d7fdde08c833bb94f95fc717a24caa1a16cff639d39049dcfe56fb424b78ad1e344b2bb7c3cfa8f3e9bc49d5c9e30e7322ea6ebdae2c5f05f4219ec019df9636078886f1a86e3cade0f035c618c091914d261db5c3cb5287c05f4703724058bc8df0b5c89884e7b1bdd72328481537c95d18cdee446ff399544651f1956b32ae3912f3066eec5efaddfcd578f1bed8e563d044f9d3d3ec292e001580a9a7ba92d5c77f8f32b0ba24c8c5ce4c78a1ba92b472178d7b94739c519fca33a143e4c05e50d1bf0264f46d628ca6786c674323e0989b76eebf39cc42897ea23da4d544ff8a0ec8a4fb44d4ee751522ed652de048386cdf651a655fbc67388707c6c03290578c837db8f79aa37f3aea33b4a49074665196e75c97dbdac9808cf29cfd53b1f1d59fe701aff68f91924a02f67c1b3d75d68964ad62dc71bec056404fe80e96fe3019ea81bdc337e582e2c954ad8eb852b0795f39c204af63b8570ad88d4eb47460b797ef2195909ff2c792ec8277524fa0b3f5f9ef5497890338f7ced30b856fefe3ff8606da0fb1a92416629d5ba6b3f37bb54a0271918ae5afd0faa15aca23717bc2cf5ef1fb06f21b901a422913be8fc964973641e57045cf1d6339298247dd4d9fa0c391579bbb88ee80488be360e7af9f68734f4b5fea9ea39d8a527434a46da78e5ebfc783aa59969b5e4e7b5ba459d832b491b59eab717f8ba1c227b562851e26cf66fbbf6b5e9c53f697c6da00686f408568ab5dcc415622a1cfde465fe9e636f84cc94a839da3636c13a24c0b216df6630e1333512369c23e8c208f27400de1f467cf8996be50d5ee169f02f3e90b159f2c3531030a0f57031e4cd887a4cde7d3a87d83d17616b0a9e2e6178447b23a80dca11ea318e7e73ff7085fc27a31da077b1500ccec6e3e634b939b0dccbdc7d1cf9e0a533bdffbeb3872a53230e20fe823176249ceeede4ae16fa1392badb1d732bd803a93e2d8ff8949781f91849dbb0146ecd276e8e9ae9f5bffd30a75b8f97def07ec1fcf93a446650fa02811422ecbffae1b8d457f7cfa738585f05a197a6eeb523ebda9d1415d7cda62b7bd9c917d431478e7263dd8713db6d8af75c0698ee476850b9d707c4b4210474b0ab0c21b2423800803eafffd66cb7fbbdfb6526fe452b19e0adb16826f5acb09a2e6a9b0a3e04d21b5939b8731deee4bda41e081dc4a0dce2a11388139a2df4ea33131d34832479c1b2887d71019fe0d548cee042625df4d47500f70a517eb43282f29b4821183942bc1dccaca1b889941cd4c214d4c209318b99ac1c71ac7424aee55553c3c4dd71c365d137cf4a44c5d5b93ebe3eeef99308361aa1a6a6ba59b132c6fbac66be21b6ab3dffd74fe02ac6ee42fae30b28b824892407b08423b1588d9451605ecc1de724d8eb20b54e706f23a7ac78290e4abdd4e579b601346e35838225c3af6b3d3b26a343419ce5199f5e8b7f5573af014f7a50e9cf15cb3ccb522f6bf0e6ebd5f3174638d1d206e6434ab51d3e219b4ab64f86b76b367ec0bf97be1fb5c79d21a349df2d93f11ac1b5feabfe7fd4c21d8b763b76d82f5dff6477ea539a83348b812030ce44816f6055e9addfb77581f4f3f13b687b29dc34bd58f8c48a1ba2f1f39737908702bc35c1f99325d4fe0a1f4a5baf0dbdc78bbedbc14754a144f4f6127cbcc91f9056aadf772d8896234d77b05ad9178f9080a49f5f5a27fd48d464391941ae7e1e44e0986efa48efbc6f80eafc2872af25842a3d16188d151d8715180832a94447b170b3c016794c19738dfb7146a568fe833b61886676ab1822073ec8a59b58b4e9be47e5bf6230321f1400829ff1b9ae799352e96a5cb05034c7ed3b83d09bb12c9528b8d84967f91a94fb5ae1f89ebdcd222b470b816b004884a53c2b16b6a393d8ea4f116705d4ba881c21e8d09d09e3b4c05b0015fbc13a62c7edb6bd5f2704efd6576ec07d422af0f40129c4c41c0144b29ee06e88e3df3760f86cd242deaca3d121a2b571a2f68db03ab1c6ea20f5163b1e43a2d4363409a2b335847a4e767e66ffba6299cf6e20ca26f94d41f3834a0e9b67f384a0d0370568f1c60e52d092368ea2aeb925fbdf25a4b73151304175cedffa6422fdfa2131fc5f52b0ff427542bce83d3c3b8378466968f2ef7d9c3e2fc8320b1c0e53c350a9ed82ff194955358f40e03a60c80dede2a8e0eae44a53c87847ec7f126c4fcc05f0afeca9d96109a322f4039abe36dd81807c5963c4adc28399fba5e28ab16994688c98ba357cce0cdb0c469564604157d7134a8293b4098098fff09910cf91f901590151cecbe964c05e230ad8d07c913771b32a6bf14ed71730993d6e420413de0438fc60764ea21c3c57dfa600456a96b52a2f8bc6afcdc3270d15fd6d3649641192f31015d344d5d68311363c167b0a60dc25911473a30a1da09e89c57282f8b3265054aa815aa3745aee48b18feb2bb205349097a9aa642018275ce4c4b0ef4395783b61d624f5436bd7cb27a8007dae2dd379bba0cd6f164a1f674f280337f4a9b5149a13df4b3994e4fb83c36c34c9dae22991deb349c29bf807e78bf632cb49b955326eeafaa9ec527aa6a02f59426f1107d60afa3df206f8083182be626609235dcf4f8efa15d8a62821c14e0ed9c1171b474f13456681cca9dfa42aa34c1f9f1bb436008467a1d025c27e8ef064b94897dc696b48871ba4a82b47b601d91a50eecad0d888d7b744d0e96e2216eceb95b3f2c90409aba9e8e469c315b4b124bf82bc12f5a8d37fc4e858722f94d5e834d8d6ce11f88c83d686a6d931e312db72aced5e1e4bcd39127aa1b7dbc93f6a2ad3f1371af0396ff30b055760c7ddd61865b1df175ba7ddcd27eb2b99bb696e8765448a580b1cf8f2411babaee0deca60b29829b63ad6d87485607005328e662dd611675cf4e67f69701c33e1f4fbc732f81c43243cfdf7735a138316653c99e4a60968ed7c43d082cfe2dc23f8abc75396ef506ba7d130346d600b86472c490662752309f2e63110bf684436b161601abe8bb8666e931bd4f3591d5acb3daed88fd1d8d431d2b98c0496eae4a4aac335a954c7a0fa4b8d04203b5a96188847b666951d09989b4facd3b42ea194a48511c40fcce9bfb69502807549606cc9b69657cc0e7aa6d9e2f328b3bd94d0e29dedc8904253ec9448e274185eebdb529081538e9f1b0711d53e88e7294f933118c4ba0d9243109d60ae5a3a0f1bd1a31f2e8eb9936d9c5b7c6bfb0ead3510c326d838814e16c1aab65c92c09b1d08b80e83e019bec808a8b4c2e365161911db588f6c2a50d9c7340cee58ed3a89959c43373cbeb1a667b17dcb4441b3945b0b0577460afa2c148b79ba2a6fa5024fbc95b6d02338b63fbaefa876b9350b4b528b001fe9cac067ed922f5cf8350708da5c4e2055d3aee84f309d641227d0a2d13b383962c1cb8f62da5de0d7efac641bc25da71ec2b56f1334203f8a26a6e8c47ed63c52326ebd90e562efe8179c7d2f9167c3532ffe43dfe755c0f92c71b0e65a932673bd13ae26dbc4b6a9d814f9f0332300985756c0b4ee5617162e09db27552dfb1c7372cbd637e1cc21b0b846c6aab10a2db9916b029fd03522db1079f9c09ff17a2c25d066994ef93c523f1a14fd76b18fce5f1696e52a6d0215fe838899f3272823608caea61844c109889c561063aab13bad762586975a49f980feee1c18f110657da1e38e74534fbddd26ba791e03687123654caf61600f9a9368327ffd4c3cd18c6aa58fe99e76ce2e6d33e37a8fe5d937648c5381cef53243fd8df8fbcb626eaea7bf10ebb383339584973cffd2e6ab0819c7341f94b45c04ab514fdbd5896cdca086f722f48b5f86b76814f2de2d08d06035ba3155e29046ae49a3350fbb0e2dece5affce0ac6a4aa01494927ce5f2f129c4d8a8fe64d7173aed875b9cac7b2d8705a6c373a36ee18739d51eb3209c811bbe02d3b1314e1ed2d3163af23a33aaa00f2439e2302fec29f7b399479e975edaa630f4dbf68da5e0e6dc5619ff02fff9332fb155c55699361eb2ed6960eae5d457d42de25caf41726f32de3241b3d9f1dd17d5cd28ffae077c342dbc18c5ede1b403d65c85cb1a2127ac96dc22dc7c2eadf1a49dac232cfdb1cb6ccacb55402e25e016d4fe3a875d423b310817a51a34031d5e06f23b98984a538789a3aa07e00d51002c535f1504760e42d32308e497ae442318247df1fa1a8b2780dac5c497bed29810b93b484b419c9bba13ec689c076c795b6e465921dc8e63878b509cb26fb2b6a8159c797dc8aa65ae8bcd60ddc4341b230e85561485947dbdf5eee9df0d225f10f1065ce1b3bf400061dfd27d80f14123017e4ced1158713387edfc662b6d1675b32b6af5e5e258e95d5d91bcc058b248da7e1587fbb17f60ba17bde7a80191a8f83eeb516301914958f11fb3aba753293f85973e4cc6095758993be2130a9c3a6d23196a6e567714e4cb952168dc392bb09842b13a0dd669efcb590ac2f45365922deef14aead0703da9932aba739b14aedff179e783a430d974b92e352eb9e46d7f2fba1cc4083b1f128edc57652ea92470be2b78af11eddb02220a62bff3c88a53818aa2045b7d17887b88720a9107fabfa621aa6ebed73af14f78ecdca0f5aa1e042802ae9d2d0d35af0b1b5232588a69dc3b30e3d4f44374781ea21154d59f77108ac5ff360bee8fcfb7fa0a7713a05065541df969af0a02891830050a15fec2b6016cfd05ea103ffc1bee73995ca5ff74b157bb852700dfd44b387c18c0812168f5dfb21c36e2b1bd81ab6047ba6df3a565a0922054c870953f116fceb18c8384cb00bdbf565189332899924c907c4afd1e1940c743fec979ae809c93ea24d3eb5f37e5e3f22950a3f141572b077b6053ad5daefa2280b53ebf64cfcde8f304f09857ac3eb61aef7fc51035c39e02491a54fac70e87cb51cbc11875f5a360b37baaf9ce4926bf68707f43af603b820aebe1f5e7d829a682aab01d25599209e6781c42b900d3f3938e5b48385213327be0b9995a8d84a0a1874aadce107b39d2c722aed8a51a3e7edc90487f800298b220958f8dc4fc030b01d786a62ad84db3f14926906bb6f1ff14b6107b91549012a5c3b009f5411cf8a0f719209b742174491df15d09fad72746edf9477d81e498b4a32755de9e77a7c7e0db35f4df60c55b631098733becd52f18ae3fcbd8de11ddbb7c09218650afc15c689110120ca16694b4c70148cd51de211b826cc42e40c5c6eea41adac08eeda138bd2c0462bf177421b91f667d8c086488729869a287f0beb652242321f1322cb97a88d591ef947f2cfc5cac5ccedaadc240484d59b80e42bd9977246bd9cd637dc3a25fb1cf7fee553c37a14173e46cf5314be769908b3551520596344984c6cc8d0d95572f1a04a463effb9fa6ab74abe0c3e5222c654c5be458977c392064159f1c0e70762808acb85b72a5c0be70eab5f78c2468c2284b74ff3b699be85ed1cc95647302821d437785c67eb4d30f72b9b87c7c42db51e92d2a0f2e111b8c7db580670951b925432a5972006a30b890558530971b3131f4a6be9785d58c6cf7cbc5d7f2c166108c04863337c6273fcb1bb33b062e4de86b3a99289265d6113679a02e9ace4ca72d68dcd514d4fe2b3cf9c67c62e2a33b5d64fd1dc615800c15001effafbc7e8135b0c2e35ab92b67a72720ee9126b0a1b12670576bc105fac4aca34d84f2a0a02b48fcb6039ecb0e1d15d7fd24563caddcaf83b899f80d4537fbc7f9ad46396fb8944c7cb592951560c30b0df312709653e22bf679576bf39a7d82e3d81edffd59534eb4b5c007b9a18e2d842dea575d580745a871c63d0dafc377f83d981d2efa2f1dabacac6b80697c4d8b61878385f3791524f866e6c8bd6ebbc9d242fb2b507d01a45081b903373e58611af65099ddcd6268f9945998e0ea1e07f845556ce20aafc4ec9a999602aa10a7b3799ec44c4c5228c48df3e608754523ed846a114387a23aab1add4458dc30c5a137173ab0ebaf45f12390ec4274ace4b3a030f6538ce3beadb278f1dbdf740760292bfb728ffaaabbc459227e388eeff3d69fc5ce865deb93c0fab797a9233046e9ecf88de45e31f107b8e66923f843cfc6c6f8cf039d8d89c823b5ffa1ce59fbedf48f2c49e556d11dbe7184a035d2ca9e8b2ccb9017a39171fda83b20279948d2e3b24560ca9afa0148268228318280da2fff54f7b13cea8ded014749336cacd9f758d283178b67cd8e197f77a7a34c0e9b9ebf2f3423b120722766ff229a0a110dae02a0c8135a494613c26e3d51f1e819536f88b28be441280091f5f7f16282a659a117501e3c2d3c522c3f3b4956a3ed64103a8fd7051bc9f8ba97bb6b57491871a8e2c6191dbf47c5a3c0c05a25c2a714afecbd9fa1b0e4bb7af9276333581fe83c6ad71a87a44c90316122af10876149a1c921fb5409bc1452cfefbda08e03441a48ac5387451d919572628215d06972573f1dab312b48499d52a2e6900c5b13edff8199e738eae2098b10bdd11db83e6f288c71e81a93f581af731350612497414d9f7a9dcaa8dd0eb7f0fa194802767a24bbce8f5b9d3376bd2e57ce7f26a63fd8cafb022b0a3ec10347109c616be79b71b4b4e162d3abbb4dd98ca24687299f41e7a1a942ea27b1581a93a191c4926f6858244a3f18c72959a938eefc3e1fea0e63257dc17d2b21af87ca65361c17ee040dd4706ed6c3fd70f1c91f059f7d269e2f7652279a738f040b402b936e18e171e00032777135bf0e80ece8cb70c9f6812ec652681d2eec7808e0c1aa84afbca326baf3499a413f0fc0489b92560e1ec09214957a7752da9101fae5794b3c9e9599ce606043ffb0cb00a56011a72818b69d8df75a0ffdb35918f40851d94a2dc769772a73285375a54fca8c888a6a6192e09996160604d53a4aadb0a876029aee17051f3cb80789965bf188b780c598c6ea8857a3996f82809bcff23941cc4b3f2b5d11eb1fe4db22deba363e44912f162a1e3e210b59870349c05908b51f88f22bb19706dda0b4279be8ceb240a758eb8cecfda00467f75da4c62f7bb09dd92099576ab28cbe9bfbdd7d67a59d1188c80aa514bd672aa2dc717b89ea088ceabe69208400f5eb7a4399fd5ec64e52995fa7267ae7f75ffaedf87d51046bd7c3629dec153579bf339259926ca4661f7a510d165c34c9c3b79c9c90c62265ca6c988ec065896dd942980f72ce19e0bb28ee57de41e905655a3633f9e8b87e3d85cf2b166beb79588fa2f71341a022fa8d204f354e68e7f80712d9fe97a1e14868d8ac80c015e054904f0ed1ca5cc6699e9a3e43385c46afc696b8b07d5c4bd1a74eef9f547901d971947f52a9fa95395f3ebcdea2e55c464a01d3f70c9ffc0d912ea7e21d864aa40e1fed0c1faa6722db54580290c6fe0f236653a7e52d01724bc1dcf5a9f9b4ff76577861b241e9c48946f465b1239daa496fdf588ddfb2dc835a118d4d3d4337ef096312d22a87fd28385ffb3879204a301b94240af5c1269b91ab1971fc9f484b26585630c61d5714c889105265752bfe75123db9b92194261a1c90916bb58e4443d6899018543514d3d0928d41b470dee205901b5ec3eb83a547e8a9b76ba8b1e5e44c1722ed5c185d1b966b58dd80917a6a64dd43d2f6cc37c4f94bb61330d50c67ec8059357ed93a174481d479623196181bb8e37393dc8a3332af2ac5eb3dc540b3d013fec2f67203f45dd0e3dc0c48d6dcbe64616c50debcc154c79808ad1b90824aa671311f1ff052edb397f934426102868fe990fae7dc48c932fb8ca48b08303d21154ef4b1eba804d8097383f76f24fa3c8fdf3c4a9d9676641cbd8ad37df2d48c615e998af5b4c5e99179df42bb67daa3c05157041a2911aafb623c606fb58486f212ce3cf0b7d0704d55e033a1899a37cc9ecf2f3f740a9ba223c4c5e7b380f452b189c6e2ba5bb0fe2611bdcb2fa71159a38c4fe367aefecea2ccea4d47efa2b83b9bdc23345b213a0a915e366ee7da8224fe1c0779bb1a3ad473e93dc828d8da0535ace7ac01f5ee4fdbf02dc3562ad30df98e90b463ba8ab84f34b30b64f838c95639a44d850943d80d5f16b1f12d0335c21e9f903573a0f42e8b940350fbeedeb899c8ef0df1f6e089c82bb9871b8717bfce6dc774f218715d86b9ce34fda111af8881a56ca37b4cee29da85dbb9389a97e74caf86c1020aba77a131636586d4c805f36db57655793ab43cf8475dcd0a973ced973ebf7e9ccfd57a6eb2ebe584f9de403e8e3634f8c02ab7b2a0c08e78c34b16aea9ad94f5740593a8d83cce98e824de7e2550a2d785be928e093678c99fea016b255a7387fa9dae875d144dd7dc7015bd75b43d9b115180b47082ca3e29be3f37ae3ee4c3c30cb93ee61168ee758f7668953a81d95f6793eaf0dbbade40cfe37453f825016c1d5a58d981ca1a6902b8ee00650c05307914ef3ad7f8b211744690eec2024bb8695851daacb51c6f7a6d43752cdb702fa3e54c54cecc778a06c6fb62de7d741caf816288396c5b0893235fc00021644cd68488a352e592aa07d764b1f9bf51bbd2f5f5f25a2c5e795872fdc08fb7f857fc70090f5c8e579f376e4962c91d68d88e63214aa2db3cb4336a3589b62831bd31aab622342f75a557736cc6249db158a200cd444da2ae46cc32f00639e32388df4597d44f360d20359598e1de992cdb4e036b3d08f77ff85e04ee8e026b8e684d98d0c4e5994a388482049bee6059642d6109b8b2a5a8d10fd682c64f3c7077bbbef9d0e0ba1a12d5b25cf9765c9f0c8e2002b6afc82640570832ae3eed0cc907479a60db85140a86132c182ead419a6b2798b2b15687ebc7985cfd4cc0351f41b1bcda39f5d2fdeee74cb67a9cd11757ab2f071db71c2e7c37782b3c9ab22d256b36b8b45dba9cd4f32217975f7247d272456091d5c118f2a15b40fdb7b0a23429f2ed38956d4a87135f1281cbe426709280af505d6b65f2b1c2f1b959e6a4f676d43ac422db652c4054206cf5da7b21a1d18bfcdda6b690596aa3ac6c79e97387719bea86cfb77709c72abb3ffd762460ed0f1cc7d6c4c583c95137ec28632354d31af19f4a71925f5b737c4c1bb3dbddce712d8903f20d250394ec8845bf06b35dd5bda0f83f4e19b26c8f9752ee48a95cf724e164b6a4fd9bee67f38826b9ef13cb8d015796d21c061327c5b20010552d0c1375a502b2d8ea6bb8001ceb829a1e28c32f31dd795a1cdeaf74fa448dd39525af8c92a060e6976f2bd0b42fc13828e844ee5aee7d1ac111b90cfe79e90d0f8aa014cc6373a6933c3d58aa3094e289521d06c6680edeadf43ef739d738ff2bd02232c9b6f565cce33294051c15699276c300e1d65b7baf73c43e0b5c791fe644c55d4a41cd11ed7fd381ba1bc93487fc8cbe7f222d48093fda4aa2f134aeb95fc625d32524167cb687e90ec12bca2af2550d5e0b8cca6de823b3c79ecdcdcec698d283f8b8e9b88a117da3f7b93c0aef7c555764f9604ea9bccf8e81aede2af2c8d8482301b92a5a2ca7f6102729e8e3dbc063b395769de0b0ffa33be1d998263591aa2ad41f96ec59485c0040064f03185d96b43ebc5ae9f89009f6f0a7b7d2b055b0823af89d0cdc97809c7754d04fe2713c7cf3981839a35eccf9877ae0df5225bd4fe0d3f37648894f8bed92009416d535f00e933cb84f5f2e550e5863bca9ea793aebf50ca0db1e770e8e3a0179e885035cd5b39ef8e077a0298963120c11c99e21c627f4e00351a670ccfcff8f7149565a1f4fefd2eb3e4fecd933228217032e0ab32e38f4d845056064a25948f9c7f199844d24eecb5a0573daeeef157ccb41ca6dd6fd93b1d57851d1455004ce84051a1551e298cc05fccfcf6d886ca286c7c05d2c44fa6212be62019fc268312390ccaf8f4c29964123ba87a28dc0203fbf04ec2fc1826bc8da6defcd725b22b4b78a88f7290aabb7c221157ea6785d26be66ee3d8d778de170437f2899c69daadf99c39e4038c5f71e041d76d17c5f507e2b4cf612e14c013f97c0943acda07302b396f23bed05744c5550366cc5df0fd7637b579503b241653bba0fef2dd2c45d0e873913f5a6db93a0d6a19368e9c1328dbbdef245bf0377fa2e338345ab4039812fd0f29b98af87c937c9b17f1541658d17610fb8e57e7b3f19473e533b0cc97770a46144670aafb2b4bccd220263d82b9d5f3d1141f625c98f8ba2ab70f04c4ca8f569605d943690645007a08ff373459eac7775f8d9aec124459e14cc3dfb98650ef6119ee513a70b455be99f485e7a32f43a7db2b6586ab8ebfd69dd43e5f383be27cb10fb404fbc1bcf216c2160448be361002ae27f61238ada2f5acf54e850519300417b282e3e2e17e96bc2c05c765d94261448511fdd637e24db0b06dad8703836f1a792678f19592cf5ba146fac37ea588af2a790c4d8528e1dc4121e2e73a6ab604f3ce46282df6fa66d1e59792deadc357228d5fbaae491447245cbeec3e75402cb373cdf95c6f77f6087118675c2bcdb70162345f65befe7f953035bb559af631387b7b8cdd779a0b278abc62c6fe4e916c5c39268692fa1a3385e80167fb3352f29e25d8a43360603f9219e6426d8ea9ab5bd300dca2635b5787314d836d8225f18c753c34589e277d9fd49fbd18bca1e2ad6cfb6a372d204c4586b881aa9c1b7fb3fd3be4b2a58d48fb1004423e4405f26658443e4acc085bd3b8028603162ea5c08cf724965e5fc909d09fa74475585118721077bac4099b5284eade909cececf46259fad55024ceb020e4945c70d3a50ac26c90103c00030000c0003c00030000caa38fe5ae8af5453999b32d4048828e15b4bbb222252eedbeb010087510000000040e207faf8f94ae50d530ecf0c8cbfdbbee4f796dcc51dac132a2a25d75bedc20ef9aa09bb1bf11f2a8744223a0080882eea606c68cb9a133bfc4542177448f21ad77a13ae559f4361ac4a081fbdce5c0ead85c9f5395d4fb57178f7f2e47c2997c4281cae72cfab1b3bd46ef60de8d7df9bfbedc966dd906859e5a2c4d406ea4ed68f9627d225cb86634aa973ea4e26afaa6bc84266448923155fa36a48be3c4564d234f49792bc78c50f9ea3c1387eb924e146bf3f43a59a51dae629a58f19bc68ab2af38fe9da32b49aa49f9ed4e9960cebe5fca9613fae9531e89a443f4fad9f534e0c6c948ee5515ecec44c182a494ef7e46cb1d7070327e6d42016ee1a53ca17ca315e94dcf97cfaf18252f729254fbb4064ac9d145f72e18ccea0f5e516eaf23b498c575151d782256a56e612f4cfc35930c378fe3bdd146c462c707218cb1b5593ff825730af921452e9d337875638577e5d93990ebd6115ccc15a3e7f7bfb932015fccd268931a6b097d729901416d04514d0b72d413c7488d51c14d064ab621f92192bf7046b273d364997a4cf7342d572d6d59bae235e13f630bb1a7bf19bed9880b86a7fd0ec9660ea5dcaaa9d4ad14d0998fc1d2ec89564256b49307fb5a4bc716f52352460d1bace433e49a5b123dc316c45fb8f963f6346e8a2084f67ff50fd1dd522113c394f3272a9343304c5634e45ab965f2784fe4555c26312e5b620183ae45c46e7e6990c0877a67872ca26a942ff019b33db1a2a8587ec03538a789eaa98e7d383f36b85da7729a15c1e745963cebffcd889ee80b173f7cf705331aa2e74e08d5ffe6e9d8b2d89c16a738eba3de3c2181d294992f23829b7b02d99a429f753ca650bedca66c53b66c844b5b83bddc6f8668f2e2d4ac9a3a6cb8bf6a4cfe2bd4ef1c5a2eccd461666aecf29a6e85c6d89857dc25d0aff5d111116764c8274756ebe8892904824e48718328844c6d80cd478c5415a4454fda3c5898744221b8980b1e30c1f3fcaf0e6e1001d3edc023b9250c315754ae26e5c831aada8c10aca6f442e9e28d71e0e8944de7d3c2087037414e5a0c62adcdfbcceb13da63b1a12898001011d35a8a18ad39bf4df558c96442e418d54b0255ff83fc92e4ca6432211303490030239c2d001821aa828d786cc91269ad0ef9ea2ae1e1b934eea5039690af62d2a552da5b4180f0ee40843c70c6a948214a3c043d3594ffae99b4614c6c73371dec2754c01c00e6a8422f17553c9b7b61f75058596735bfe79ccb1800e0018a1c6272c6d89fd2ad74bb3a1a4862756d578ea6693c95dd389c2529e596d4a1d6585ec18638cdd11f2e3057eba0627d86e9bf9ccbe27a6b6c70f1e168000066a6c82d2ac194d08ab8a9fa48626ec98e9fa7eee4fcace84b122934d6cee7cb060a2bd750d9b97798811021d3d7ef0b0808e05d4b8440d4bd4a8440d4ad498440d49d488c4026a40a2c6236a38a24623f83129b8a9a6e6ae6480310107e8f8618606784c20a406236a2ca2d512f914a6e29ba58a2832685bc8d95a502311c5a81c2b8e8941d4f388304d78fa5789f2546287787d73e668d9bbf79421f0099373905bfd300b6a14c2ca5a4247c449f651e7518310e9c5134bacdcf4eb778c1a83f0a2b8ab64e793b6e282c0934973327da1a261204a721a957fbe35658b183500a16a9b5c99ec7d8d3ff45771f7637c7f09b91f0cad49e8a4be163cc614d4e8836952c7fed01cc4738f851a7cd8473d57a6f5434c6c0935f6b06abe9c43fc8d86664e50430f4962728987fb6492d31fa891873298b45e8cf3b94d432211ff61c60bc898410d3c7029d5a9b34a6a491b2bd4b84353c2a64959593185ac0a35ecd0f4e55652d5247bee52a85187b2749abaf01257e2a5436daee561f43ef83bcef0f1230435e650f8513191283d50430e74be9cbd6346fec7ab461cd00a9da16365cc24546ac0e17b759b2e9dced2ef0d5be80cf5b638de41e306f65467f457ceafa46bb4e1245b66b14ed241d584400d362c126635d7256e4c768d355019aace374dc99ee2851a6ac8356515adbc79ad7c1a52eda8bd9e5575fd45c3a993557a68a96469ce807d68afed1c9a21399a6fea49c9b65f86a2a4540d561e36858c0cea6ec6ed939593eb312454902ccff1ef3c586230ef8579ff4f1d93fc861a61d856366c35c34cb92524120143f595a7938934861a5fb804fb0cff69693567470d2f541a9f66426cd0f12d241261438d2e949baba52725ad774a482452460f34d4e04225058d2795bca6cef70079861a5b48ee3e134b91fda84c991904f0d1e30960060f0ad4d0821baebd7ce22c2503307c682012d1428d2c30b5d9fced3ebd430b89445cd01ea2c3c7e0cd420d2ca425d9eda8465914b5c615b0d7d2afd0bbed5ba1134f5cefe49b2ad4a002dd921a2cb6878f6656a8318534e5d12445935cb73d07e888449850430ae61c735f4d4cb9c763c288418d2860ded697e4fe637f5e50030a9468d1296fd45451fa271075e9335e8adf4fe24ee8b2ffd9dac598627a9a608b49962a675e13b6c3045330a9bbd54a33787a0949874af24d57ce9dc34a28bcf4669bd9749db349b082684fe7934542f1c2ad4432658b8d39025956f99759bf522a8d902cfb52d26f6b4ab71581fed35892f09fe3844584e7a4933ccfe4b4c933842fdbd967d90c76292484c2c7e624b72597d341d8c3ffc5f78ee13d0508357e50c3078a4929c7ae3576ca9d1e741f3ddcb8db87e834241221a3060fb0a0f9df13a126577690581653a7d01a2d945e43077ce676cf1f32cd3e85462e8c5d16acc2ebc999352e4ac1353fb2fa72ccf12dec922f3eaa6dfe4f638ba36fce484f9e1fafd5624d39494e12b9e64912335e408b4dfccd3673f5e777165c9b4931a7743b16d516d090452925e1d27ca4dec22716945a8e31a578c3424d51e1f42a37afe65eb14699f45e9613d53257dc9d2aa5533bc992a65a5170cb249e548dff95ec38c3c70f562c55d7799d319572c380c62a0af924c798f8af59351368a86213aa636aa6ec6be791038d54bc312769d3c34f2ac916030d5468728eb7922794b8bf14c831811c12c811811c10c8b1021aa7388b7b8e4fa9ef593105256f9d10a6d96726edf13c2cb0230c344a41b44dde9a1463d27092e220e937267d70cff293416314873dcb71b9188b9e432211ffd183470e31688802078d50289d9bab57275f2ce2410314cb89f9cfa7de3dc6cd27145ffdcc24ff4edde9893b76d42c4acc61d247021a9d30d4b5e4e217ac8f11442261d0e08439875f5a4b25b48935ee4a98e86a22c9040d4c2455986587097abbf225dc9d137d736c2b69244b5cd9f2afbb62b831f9c1637b45f0011a95c82cf6844ed3944c3443223b7cf48844c010410e0ce888443a408312573e9ddc24fce5381e1a9330cb78ef4b49a2572402460a948624ccec294fcc2565cc6f262134225146aaeaad56925445828467e69f1b2a76820ad07844d16a2b25ad2ce57c0ac03880014ee08810d068040d46d058040d45d0488469eec3c66d8c31bc29400311748814d030041502f774d2c56cbf2533134293f24a89712f2a9b86c620ccd99a52565df7f9bc20deb4dbc95d9b0cead141231009e69633eb7aa6ab3c20124f0e778dff1f32a99fabe898b2cfe3075ca44bc3626325ebfac0a4c9861e8ff18154aff99c613487a6f6705e2a39689c8d7b238644225ba0a107fa828dfe09591353f2041a79d8c3eefb77e79c84b19240030f55dc89fdeb77127632028d3b981d5db94a7c5940c30e9d9770b15d3c6b0a0934ea50d28aeb9e4ffcac27191289e418638c85400e1d0028020d3aa07de9f3758aae3b7f4824e23da031072dbca84949e23d853c2412f9e1637d9841430e69ee89ff0d5d7f731c8cfd295a6cc75250b50a34e090bc267eecb4513473f60d5e4caf296a9f5b4327051a6ed0b26a2ec94ed0bb126d8321b63bc8863c3dc10a89444040830ddb98f82af723b2b9b2062e099f45ead2e57e510dce6c9a9c9b33854e4b230d7ab0123cd2c4bddfca183e4290830734d090fab5e7ef20a992930e24d03883a92dd473adefece77140c30c58275593f7f2e5f7b60c2629f4673aa66e7fe90634c8a0b96ef419bda99263c660060d31d008030d309c3f7d666ffc2c99121ad0f802e227e7e50d992f74e80c1a5e7893e4e33154ca4bdae982319464c1921ce33ae5148106170a9b243c63b488125334b6c0c8c7bc6692c40c992442430b44e6106bda9fbac9008d2ca463b97a62ad57d41c0f332e40030b6ee6f8c7f709a9b38544223c765480c61568588146155c4d959b921cbeb9bd9048a4c7a14105c7e4ca277e1293f7851f40630a67a63026a5d41d3589c18086140e9f3676c2a4dd36e117d08842fb9924dd4ed5cab11ed0804226758e399dc62017cb27ecadb9357aafd459e604b3d533c5e093551f35c18f3b29a5fdc5cb4b1212899c317abc8006138e54b79061272fbf4886185b860f1a4b30b4c6d85c2759844e4309dcbaa7b85021ffad19d04882a9726e975acbb8cd85b0808718349090099a83e65c5e2eb7d33882261d65762dfec48f1b21a1624ac124b9643ee700392ecdc861ccc861cc30c005681481061176135b356e491a5af107680c6103348400021a41f83fe5a85bcd133dea011a4060d2de3f8da7f3ef93101e3d7e50be54ef49fde622341a3e38555a3386fc3c29fd212fe8e123029148193da8c4248fdbf4ab05cf5f40830775a885cf10f1359592d0d8015b71e3a1639e336b34748006fbce396ab3975f1310402e12f32dc9d9a73d76cac18531a34ef6a64c6ff1dcc229c9e4d8e28aacf7db683e22732d0e79e15d726f86932ab4507ebbebb4b2ca49e62cb28bbd7b628c25e624c922e935e6243973b61426b110002c04f00a01b88205d00a0d088015b48a0508401502488500502180537ce97d29f92575644000a630e7ca5f17bbee5b3a1304500a2a6a89d93d6d3fdc8714c6e576534bd198e1512494247d3eb18ed9ac440206cb4244704314648893b3567a2314c9bf2a72952463ba68106e80e2e89dbfa975ed7336156e7c6257db8a323bb6e2fd0d4fa8d9e454b7624c78ef831b9df8bedb9224db94d0dfcde0062738ff6ed91cd221d64b2047182db8b189ff2c9b7caf5b060b6e68223159bc7ecebc6e64e206268a153e3e6365676e7be3127a9949527a6c422211bc61892336665a4b25df4954c68d4aecff571772f343771912898ce00625c850391d27cabb7ef8fd0393384d12db4bcc399d9329c10d4958e5a6e936da891a321c043722d17df04ca2152db74972e00624ec9b4a41a6ba3bc594471c5e3c76348f92a3578ea0e49225af635790971b6165ae5effd4956f75317c84c188677dc3e2a4c9e31713024604427063115b4ee1352f378a38b2c7d44b7037391cc68d44101773cc5167ac529ec5308311b1b94fe5d08df325e70e9159c54e295ac8acad420cb1554a7ba3194d9c4e62e046214af25f67cea7593f9a10225dd37c9672f01ced0ee2f99252123b2fc7cc193d7cfc28c3cf0604b1d494a8bae7b5212a2191c88e1988f18120e4666633fbee330b08a65370cbdec152f22a2412f9c373eab1e35b82a49884a1e38783406ff8e1b28df274b29be5b57dd0d32f98eb7d788f9a0f59cc8ad9afc4c64fee8cd163c71ebad160e772e298dc181289fc583dec73a9d3f2c9eb1e1f3dc4d821811b79403f3337be096b1d3e78204d67cd7274cfab5d88036edca1964b9f3dab520e936be0861df8fe4ec256786a125375b8a4de9382f489ffd9840ec96f551626f97bf2650ee60fde2587d73bad0c10dc9043f17e6d26b2d6d33f71c864694fff6dc2cfd52170f0525aea9f6f8c31fa6f703bf47eb4da5482d66e28a5d7d849da8a4a761bdc12644fa8eca6d5dd026eb0e19ecbdf1bd768b25ad6f07d9a4929c9456506dc5083ea9ef1273d5e564d1a742f57d3f893a65502230368f0246dd47bbc36537c866f2cc5985ed54f2e49cc50124d716314bfdcaa96e1ddd81ebf637bde4fc9608acbace9333a86b2bf72f7538a9fd712c37163a5b0bf7031a7948f1e3bc0b81106f398e0167979e562320337c0e049f953ad6bce78921c1289b8c0bd8c1d3c3ce4c78e0edcf882b57175825bce59d332811b5ed8f2957872f7e5f04b8544223b7cf4d82183edc2b17bf7cf7e57aaabc80d2ee4499efda81773824a6114e0c616b21832d55b88544bab853c34b3e7fc379e52921e3fb2704ca7e1a35c7e69562d70030b7bd44fd1ad98addb0b29632b1052c686682047181fb871053ca35e28ff781687808e337cfce0210117f4fe00818f0878e086154a4928f9dab3cb36d9d1801b5550baf28e5a36b73c2f156831bf8ab410bd8f86ecd8c1e3779051c6ca60c78e1e3f1670630aab9f1c3435b2c413062e05cc24fb244a499139f6904824033a5c0c1f6168e04614921b50305da60917a1ff8e1e3f7664e0c613384bedf9a153499eb71b4ee8422463c79655e78c1d6359c0430c17b4183cb6dc6802277790509d33b17a64c10d26dc58c20d259ce04612f80612e80820b861841b45b841044c2fdf44c3eec92b86442225b83104f3bd3b8973d9d56d211ddc108296627e931c9f193b69702308c6f2d499dae277339e88e08c1b40b8f18314dcf08119377a60f624cde5a5720b91dde041e69bbfcb624ea2a6ce0eb6e91819a74a263d764307ae78a6fccef6a9f1f390de0cd8c88517f374dceac8062e9270919fbdee16ef8ec660e561a756dba2b08a91c944d10a366fc0462d0ed5e513265694ec9191011d3fccd040056cd0e212e2374af093c284fb430c1e6294b121703e63351089fc108387183cccd8e17cc692118990e16464c0c62c32604316975a9db9e9e7d8d4b1110b7d4d2e7b57b8974f12c236606149ddf59b92c6eb98ee1318838d5738d5619697935cc173aef04a32f7ce4884c9263a6cb482f45b19cf2727d1666745c99394c4fd84aa4df12a3041a7a23693fa9e50c1862aca9f2f6ac650ffe5978d5498fc8413edbdeeb3a78c600315859f1426d2298651e914a6dc5a5315639d078b0d532445cdac29e5246795dc0e6c940213af429f249fdac8860a3648516fe650e39bad75338a622c495dd484becc4a083644e15ffc24a7f07413431f0a2af7c450d6d920d800c55127d97c7ed6d4e2f9c4ba49b03bf14f88aacc13d8894992247736f5bb3b60a31398249f61d26ac9f2b11ad8e0849a241f2f312729a5f36d6c82bb349fe424f5e44860431399306dd88bea1d453bc711d8c0041997eeaa745ba32d021b97a0e4100d6fd5a51d16d8b044b77e19e6a6ef24eddd462516559fec6c273596131289f8581fa3043628416df08cf48b89de7e125ace4a62926a743a456d482229b6e7d87a6a2412bd84f7080b736727244c93a2f74bc6558ece234c1dd910bbb5996704820d471cb52b977491ba49f47cc04623dadfacacf1fcc2b262011b8c48361d3bab4b49d8136d2c8253998a9e3ac5063614714cd57e25f9b2ab5d861967878d44b89fcea6346fd64c794824620311f84c499f5d4ea80c246c1c623f49f5dfbcf0f738c286215c8f53b1faba9048e4f818bc3e066f256c14824a23221563ce889884304d74cadb60523a4bf1818d41b49b2e6a77da915c1098dc19d253aa277c272412c9838d40e49b64972fbbf0379a904884103600c15d0a1953dee6b57648243206f3b04024f27fb0e107553b548c7bf199732e241251838d3e983eb7da56f5dcc92963830f6ae5cae57d60544007080020041b7b6073964c4bf93161333d6cc0461ef8557b8b99e3f2e52436f0a09a58e733171f0d848d3b50567da2e6f63289dd0e6b5a4fa9888a8893ad43fa1b4aec68cf8e5ea1836ac2863a970c4d85fc104306dd230360d89843a331ebf9427806af42c0884464d0638c311c90e30c1e1e011d67f8088387878471060f8f402462430eb5eb54b81cc3574de54005747c2012a1818d3860b51a2e45f794a4b1e1e09b10a1157f4363d32120c821821c21656c052236de40b46eb86bda6a851f1289f42883470f084c0003392aa0e30111d0808e336cb821b913f35afe7cc2cc4a041b6df8444d4cb5ea11820d3618427f5b374d27d9cb21d858439f5d73564f1afa332e031b6ad035564d65b7db24e521395c0c1f611c000c30c030669c1e1be80f4422eda35d041b88440ca0231211848d34dc6ae2f569d9cb7d340367380622111d2db08186c7daa45d37f6e97a66d83803e749ce71c16ccbb22311e0c186193861d5e4254de8b33d453046fb7941197ab05106ccc773dff6c364b3c950308ffa175636efde43b031067d3ec554af269660ae18b87c62ca90f11573fe9a60230c9626f32454c893b33c146c80e14e92a0211e2d2bb6f2c0c617e8f64d5abbeda33a25c1861734c1cf76ab4dcad9dd0736bac0e55c5d41f3dada2609f9c0036c7041ab60ba317b5432670bafbbf527c9c4132ffb5a3844a23377ce63c2db5960cdbb525d5fc6b83116ceb06143e6fa5379642c8f48048c1e7f05fde2d66ffed86d726785b29689491acfe93cba21111b5568df4d92e47052126c508117fbb0e61219d59982eac12ecdf799a8e1337cfca0810d29785615a6ff5ae3a5310aa5925a37e77c52563cb00105cc7e4e52936578f42191888d2798e25ae54e1d321e4320d870c2fdd51de3a794772617828d26d4f291e51ee59e921912891cc0001a00e30006c871860f07e38c17c3878b40870e30cc580f7141f71883cbb811071b4c2873ce98ff1ca305dd2ca16499c16dd317e23e1a6043094a96fc67d8601d3713128994e163f0862183f5118930c04612927e6663928dfffa186d03098d544e5e3c93332ce708a8f8dd05132d79c6d6088cb7c7dfb41053932bc26fa1e9b33afb4a36229cde9d63eb5ba3bc830c1b43d02c3bf5573e93c91662430895cf5ee5cbb62f4b1204fc7b5f4fade4263d40e0c4fc3dff52524ee50756b2d5b0b396cd261682367ca06888cfe96c982448ce43063d76f4f811892cc0460f28cf0ca231fd630e8f1de30515d0d17e7a404087dbe0818d1d242bf351dd21277e116ce8e0cb9f743fd5bc885e5210c6097454a08b5c9825da83c64b21b752d9052e700d97933019dd92a8dd22ed58c296c966b9518544223bcef0f1e3bab04561d5c49b4fe2769f36461961e8681f0e88449ac719d4452dbaa04509ba98c509ba904517b1f0f6de5eed24643e1a8908a10b58b051d32a87b5f94b61081837b881fb30a38c1e63740d6a10899c318373361201e38718eb238c001ca18b57f09dfd996eb129c419128980d1862e5c918a65e8f9e5e4317d4222111474d18aaf82a8daf8ab9cdc219108182948228002c00023b12a1089e8383d361089f8e9c12312e173021c74c18a2e5661ac6426aeefabe2934a4eaafd1aefd949859562be127b432cd78d0a2e57a9ffcc673af14222911bdc800c3142ca48400c6a50830a74710aabe3dddd6fc65c96fd6186064a17a638e64f617d55235f9e904824e9a2148d26f5ef8f19f3342705776327768ae6132a338a840f9bc4ec68794e3751541e4f324952ceb691cee822149d74f2ac39a549080f28fc112fd9f2b098be7ec29534b38ff24de1e43cd14527fe3d51f3e6effb30931874c1092c49164ace7192e72ec142179bf82f67aea8daf949fc7474a109339b27394e8aeeb55e269edfacfa312553eda80b4cf43219bf4eea52df5c7671097ff34489bd1b12899cf511468e1c398e0572b84f408718bab004ea2ee9d51662ab5309b3798c663a13de6f4a9cb5a48c269918273393e8d3e5bc7ddee5952e09c2829fef57ea8ba34782d318d18d1e6ffa73489865fc56dff347d4f9b24eae92c92eb923ecce27baac6594d11bd1650d993aeb6b680f23aa7839bf999492a4bb08cba3c9d932e528e292720e5652760c194f224e4d594eb6fa9cb53a8840a5e72b776bf80c9dc410d445217839e1624c5f25779a10dc455d3be9132ac50c828a5b9fde4fdaca600ba2cfafcf7ed63fed09841e35aef37fc6cb1810f466ac9c0c19259691c3145dfc81cc731aaa37e34c7a3f64959314f2efdae93e58fd61528e4e95936788d0051f4ae69a72fecfe99caa195dec01bf0c2677326d2f131241177a38aa7c499eed440d16ee220f5e5e8c299d184bf493bbc04309fcc49bdc7b1d4acb2e4d27ed78e8d0814bcf9836f557a8f41cbaba7811b11c92becc3194892726e1385c152be84e94a678e14088a7c58d4af5297d83926973328b7183a65f52e6478d6199363467929d8bc906e37e9e18aed364b6863c57789e9aa8944e0d59d0502e9e3f2c6d69d0838ccae62bd91f0d865a341dd70d13277e86fe84e8a0b219303196760a76194cd5f162c65dd4d764b8d4ac464c760ca5b3acb1af37e64f1143aa22257166189a92b64b434db58b6028ee8cd69afc51f7173ee15363b494ada879210b271fe326c227eb82dd31ee3c9a1c2e1ca3677e4994705372b6d085454fdfb9164c711dd367935f2d9c8537a7eacd9d0b3e3216cca751db84b7af9050b59bea4eac60d1b6c2fe6d1ab332b763da5538a4c6971c5328b74d53814c51ccd3f465b8949ec2a12e26b97b978211963ef8a978a560145cc9ae3c9ea79b0205b353feecf172fd9ea0c6349375374858e784322afc4eba7cd142dd04baa5424ca887db30c1fc239e935c1974f32550e9f6f25446b7aa84e3b4db4459dd6c7292c0dea5ff999872dc1b098d4b6ce9edabe78f506aabb5aaffcdc84658c3092e59a563f12d4226e639297126936b8890249ebc96d1b4e26708c5a9872eef6e0fa710c85062c8935d3eda41686743a47aba7f3e2094d3a498d2db89afd90f8eca29e9bc5ab4b97ca046c5fdc9f6b361e21eb876f132ebb6739807d7e56fcc214334f63bb85657a6e35fe8609335ff2edada499d5ca0677672924eae17e362933b861234e6afe8dea21c63665b0a3fc135b6c024317db8122e67ce5ab4714dfa2a51ae2e498b2ae3c7c2e44a49e52cfe0a62f2395c5924bd6b4a9ae7a7f4db58e41ae773c52496696e61e1977b999462cc9e6c5fb18929a70ee6e1624deb0a53844b7e2569cda26dc5a2a31725ac983427cb8a725f3acafdab4828b35afb348fba2a4e1fe39438bdf7de49c5e9042b4136ab55dea8f8d2e54a42b8f6a69c02cfd96b326ffd86d614f988895ec45dcc4b51cc94eea3bac58a2a294e9ec3a56dbdb87c14b8ea89d9da7f6e445164e5f2d831a148d67c7279b02828f0d44c89ce27cc8a76314fa7f8d63ce1cb592ebbdc955aebc47352aecf7a498a9a13495216b6263474b43651e77839ad1b63d094263ad953846c4e0f93341377ee910ff59c3d4d1413e8bd9fe5bdc52fff12eea65c72f26837d95b228f1119be792594f1b6f1b0ee4a3925de96914c5f9b49a027e9d55ff6b20d1b496051a22475999e8c4d244e9deef324a571ad8104be1f5f974d4c55d53cc2ac529e9d72698951e388c7522e3fc534a26d4b8b373e1177318c304a73b4624c29a26216c169ce2a12fe317e1a452856d14f1c3d492e691241459e96381bad5c348830674d3c6263a482e610fe055d0b4b9bbecf186289381b2931954f640a61bd05b30d99ecbdc41022df9872b7561233ff412495c999faeb926d5e10f798a64b748d863d10a4266d51df4ef51c406cc1935dce4d5e61ffe1dc5592497b9b2bd77e502ac7bc244b89d9e13e9ce64dde642c5a74f960704fbfaaf3a1325bf670add9bc7492d3f55af4506ecd9d6ea62c845af29009699595fff2a5b4e0a174c2ad56ee76f24cb9c3792a45114b79d5946287a724a9648b1531b3943abc51d573d91635540a1daed8355f1baf3386650efc2539a6d0d40bbb15399c7c3ebc49716328b11287ec376c38986622ee7ca2e2a5f206475ba3b362099e4d8a1b12e53c7f4999c136496983653e7e2959be127c36e8a296d2a1b3e9f66b48aa9472f2cf13cb1e3598b1eb19b2a36677d3e0a7bcc6aeff286bd140dfbdc87ace7c5dcfa06b4a4b8f922b4b3543775e196931c4322d4352d29885b9907f1a32f49e2bfd7162e63263a8ba93dce9a6da7411032756783ab91286ea84194ba2892e6a82818d317f542b49cc5f7e810e936f39eea549985e703b55a478545a13cc2ebc63a627bae16c73c98523bc444f15992c77b9857c57bf04ef38bea9d442f561d7fb399f2b6516b8906526f49eba9a2416708f2aeaf2ee15ce925a82580aabd1add0547c088d774284a70afec968b4685625ca542876d96cea58629284a760bcb8a1af29f22f2b8583a674afc66c15d5281424c3d726ebb2325048fa8dfe74e713e8ae0fbf8c27d8974e28c5cfd22ca5cbf29a700cfea1116769b263c2ab59343c6a6b32b684e463fa2737aa4fa604a72429c25536947c12ecf827cd9c1412d0c9d8deca749b2a3c42e639469b8fca084ba94459e59aa8131681d3efbf0e33e76e824428471f1793e344e7ce10cc5e62b59712c2de39ae256ace9fc241a0df553ac9d96b1b20d49be6c4f18a3e17fd41e246cb8d3f9f63333ed8a3a4a5545f4fbe07c9d9abfc53ab870f0ff42425eff0269820ef00d3949473cb0074a05e447bc7e482d02cd55963876578b8304ae5f3cf47a457778b44cb5393b01a254b670b72b3a7e82d17aaf3b5b8fa7a3d7e4e25984f0ba3e5bce94cc1cffb59146c73672fb563e4b230e537d5dc27168ba789c59818d7c302d1f47956625c65fd0aabaec39f20bb82affc9db3b5565426fc58be9c537d31566839c8acb47b4c7bda2a8cae134e8cb3fe699a2a8e2d3529b35ca6312d157ba82cea6296a4933454fcfb35fd3326b88a760a4bb8c88b7f82be84668ac2db4bf3224d8c9a9522c99fa9bbbc8c971929c8f1247249ce280a9792580cee1f991605bfa963bf8576ac43518e6a2eefbc63515030a32a75b1963de513fd9fd027ab498c26eb095efe643d86d0fa742231a62476855e8929e584e16c72fbddabdd4d987d2dd2cf4cc8531325134ec37b69c99bc944492fa9645a0a13d889299f5096ba441a4d70cd26799858294b2c5e95251a1b7f2a5589d2be539e74b245c915259c8ab9f12fad6b8ed524d2a896cf52e79b182b49e4a37133a5962459ac22a1e6fdb4b61a5c3b2b4824d6b947d3cf55b8ea11858bb5693efe4aaaca11668ff9ebab3fceffd4884b46fce24d2ed97c6204beaada15db84f2382d023dcb139ec2dcde4e8a703b3ee8673a39859d12b175ec4db9ff728c7142445f5b52e668fd191e3ac41661154d0e29b31d32045aa1ef92501722513e4ea667b28999109cacc13377ce3c130f62fbae901f6edaea1504ebbed1c4e0a3e16b20ea3c61e355f874290a88e592446aa9da96fa877289966297462ea87e483c6dea54a51e2ca60fd54b69e793e2e4d0f081feaf91f1949d97b2072b548e116b99b356f4c0a6f7d7cb394985310f6e9233fb98f7c9ed111e08b1084f4ba20916a33bdc298772f3b6d854911df8124a3d7deee4724275d85b3cc5f384c5ced3a14dc994a657b6be9f4382fa469d6cbd6c8e1c28f943a714f9ad76c7418ba29abe73b3d78643153a4ce72fe63b7e43a2874af6a72f63af1bd0cad99226f92d54d306d3a6fcb24cc29b56d8a094dfef5996341d5c4397525d2eb152a58b6a587a62d37353f4bd347c967be282c614ebd0a0fa499a4bcef9fbb13324f98e7c753a1bd5cce058f40e1eb6c6f365a093943945ff3cc12743493368b6e8bd274c6378263fe7b2b23a411283a59f83668e997aa2303c267487971018ce37e9c9c8a81efd021d97e409ad34315e387dc99c20a3992b5d38fa7e969c3f4a4d922424128941245286088a175c7832dae7cc5dcfafedc5165aff24485e5732e801811178a1054c36e9434e30a942be9048c478918524f1ee4e4e713273c70b2c147cc3495e76035e5ca137ef150b96b4fcf4b35e58c19b28f97c39e6bbb75e54c17c9ee52262c122d790157841853f06a98d5bd51be90989442211304040c6ba8f1f65a0c08b29785379bdb14b7450c00b2968c08b28dcd99e243937099997175038a355563c85cef5e6c51312cdd7976b7ab6b613f4fb0cd3494a4c52b49b805c745ede4da5a82b134ebdb2e994c6e6374b58f6df44acce4efc8a1256bf987325493e8d79124aba37ea1b7d766e44c271a399611db5acb62394c376e61e934bad848cb0ed6849cdfe9895494824c2021f4e0602bc2802b7dd2d65ebd5a31e193e7a3c1822c881811cfe8233c2d0e12ce0b11ff8f50c44222cf08208fe9c7049c8f28bdfb91743c02d8d055fb9aee4792184a735db889d1c56e57a1184e20510bcf801ff297ec66d6b133bf5812e9ea14e2a786d6a767848bfc08c1d60782047067494c08b1ed8e27d5207139354375ef0a04bbbde9af33d1f3a2f764067467dca60f142074d8613eba3e887ec7c2e38a98c9ec77f63ad8b8ba3e424caf79c68c6945b6472bcdacdb9daa20d1bf75765ac05e3ba62de31ba9294a28526c79578e7b652d1c20119dc9845f1a7366ceaa8d4ad0471431664d8bdf093f6f9ac92e3878f1c3a1cb023103762d107c98e19de24692ee6062c92eddc52a8eb4f89d11baf58eee26e3d7bca98a219375cd14ac5f767af2e4bbf15c7cb762764500b75eb062b12724cf8fb2dc9365b53b8b18a43977cbaf29bd733a707375491f579a9a58c27afe95424f5ee6a31a4c4ddcb0f6ea042b9f419cbe1aab7ea5360c95693f49231aac6dc30c5f973537d3c75faa68970a314e9645b55cc9f374f38448706cad8518687f48f2503004bb8418a1ba3c8c2d3ed771c4bcb7c0c972a5b0ef5c0a2a8921edaf24df6b2bc22bb0a0bffea30ff0cc7400e1f1e52c656c01575254990d24a5ba168d8e9d2d8e89c151cac28687897300fc9988457b145eb5f7ed3cff3bd2a38c1d259aed7ac686a07385261e8f0964297d4e13e2a3ea1242c53be4bcd491ce038c57e639a25b9c76d9ca6303cefec9c766592523cc0518a73484d396be7b324896a000729f2f7fe9099ab3911e1188517e72cc96b65047088c224af6e6b87d911d5ccc0118ac2c79252897a6692f11f384051dc4a9dc4d9df4d5a0103c727dca84935ebb2675c3d51de1bdfdaf06db58e0c31c6e8045f49ac9b2a21638b1e128978000727682f295696cb581c9bc0a109a38f54ce497f2978161289ecc091892d5e8cd8933a211dc08109bd4cd37f4c7125e57b89d35fe5134e3a4322114b9457e953856bd84e7748250a2d26b7be9a64c594c82ef26a723dc99b7242229110e09844e94e9e9ece581279fa2e79d4e2e2538c4462d12413644acc122b1c90e83c3579c84080e311e5bb90717b2d273bdd11c6b7122cd964fa0d7a2336f9e7ad734aa6c40f23d6d73539ff36774367115cdad4f09b62be30e11f3c3c06ae021c8aa0a44df6b0a7aa41d7445067219f9225c95b1a44247dcc90ad394cc54987e87248af13dde03084f92aeb55bfcfc478fb29c4a3596d3c4569876547f310430438087149f1bab47d5bf7c459b028c031885a4b52324cf41a739c17ac0640b0e3b88f1e3fca30050e41709234bf66f1f2d16347e20884f6212f7c2cc43b833924a0830c1c80d02ede3b669a0c7d2f878e1ecfa30638feb09f94a424a59d2109c0e187f373bb4948542c31a70f38f850e9b7491b542dabc684f0d881630ffd599a8a16935f923afc038c21e0d0c31996ba83798e49bbffe8d1e30338f270aaeb3013664bca193c70f19349ec4e276d4adf819eec246ed4ec61826b872ea989b9e4e3ca73b20ea544589adb998b71a343df57b92b6b3ea1de9ac372a29847e70c337939381d26dcd692cb799238147d3c26d94aa9f8e90f70c0e1abd14d1634e5903fc1f186b4d5a7eb3c555d7b379c2f553586bcdf5ce26db8eb438ce7cb6103e335b9712be4bcd86b387fcec94b32ac86e44a974ffe2ffc4a9306b4645d194d6d51dd82862aa3462ffbda7237cf4064ce7cb8643daf55080e331c6347bc9abc61234338c05186fb84794dd22193894e86c3e72c6163593777d6078e31e8d1296d86c9a5b9490c78ac3df1f2ce30301f63496ccf83a1109dbaae515267927cc1d1b7ec0e2727c13aa6070e2ff8ab2126ed962ef82945b18d492b896a73a1ec396636d94c1237698b630b5976d52bef3f593e80087260c0003a7cf4f8b122c881011d3bc0a105cdf6c27530694f4c380b76a578f7715f2cdc26a58cfa7f8c31ad5730495bec3d8f66f2c658a17829996931a13459aac0c794dcb7fab1a98c0acb487ffd7ac820c3026ac03105c3b9f5a6760956f24b61cbb549d00cd96f4f147e4dd27dcc490a27c550784bb47099dbefb1fa13dc2c96379bd8dbc5dc0975aeae4fb97c667769c292ea39a3e61ad992c2842a666dcf67e199525bc2995af6ae235202995e2c4acbf2c97a12bc98f559b765010f31ce88c01d702041ffcc9ffcfb3e8217e34bf95427d52487eca0030e2360e25710db8ca9c7f245782acfc6d774255b5689706c782649b70df596212476b9cf8652fd4c08cc091ef2b9673d5512178c610603c0123882b07526cfead6f17e7220e06b163d4be426b7f507bd5eb4f714199eb5f9c08ea9b72ae75dbd6c8594e1c38c761f3b9c0547023fccd040007c80a3075b48cffa13f3cdfd8444226398f162fce0e163bc60c7f7d8c13b660086057c70e0d733904304393090c387bbc0c792f1fe8153e0e001b266514c68db69fb71ecc0934377879aa4d135c4a1032a76c9b1937c9ea6d90e905cd826c6cde96ed5ef1f128924082ef0b5942ce93ba9a72cc82d92c7ff52988e17cff3b638c63093da53c911d1d742cb31f64b8e8e16e530265a2a8deb64726661d6a85462cffc981495c55272a84ac79458a4596308f36cd2769282851ea3a535ff04f20abae44e1ffb7153ec9009405c01d20a105680ac02441520a9004105c82996fac9b01c3d668c38e405653400c414608094a258e2febf8798564b482f045c0c1f61e400e30cc74048195b811c8f002105c828404401128abc5536b6c3562ce54141869ccf5eaadb96ee273051d793675cbff2c813c5935c67563ffbe41331403a818ee79f1c724ea3ee9c2889261fe5af82fba89b48b0d1d89be731e9a568c291da144f281f2413c5b0196bea345fa70e01c1847eb12693d093e1fab9c4976747bc4b4fd47c1dc412556ce51e718d4a165525d81dd5ac52f9ea634e088412d6d988d96db2501a0e89444026c149163c86cc1b13df21c60e2580488268eb97133f73ba135f22804422d14a480fbf2327fb8644223f0081c429ddad76922cf3cec903904718fe39fd4458ba5f2c0610479ce264dc588d39fb6223fe689a317c95a79493308030e298ee244912be345c6b8b404f1253bb9ebc993279014411b8647dcca82645893a02904498620ceb3985150411df06bbec9a673f2c05e410c9e7342a57aaa9cf0a89440e0f07411b400c91da9bd431fa335bce844422659c01a410b46aa7689f192c193b7afc0fa700194008b16ef68dae5ff2687856001984d9267f8a915fa7eb4e01441059b42bab09d3ce5169024820deac9dc47aebf41425800002d7384136f64c877dfe70ce187fe65556b12a7ed08377aca871e39c1481f4e1347671db57c7524807081faaa8d0954cd65793fa3d9483543e3359cee3ba7a70bd829d7eaa943d2f1000c983514dde9cd8ec612ee321a136675647e8c7fce500e40e9acc742739c9fa71317000b1c3fb61fba4d04a622e31241299001b40eae055e59cad4e103a244a899a69aa1301640e4911e5266a789cbde40191431c8c258ce61493a161952f80c0a1acc184ee1bb1b5f8435200f206d7f2c6b4615b71352606206e285efcd292b2a38c33dc053b7afc1003a40d85f1cdcc65f2c99e3936f82e25f6c965c9fbacc178d27676d9f897581202a206b6baf723f27f4f4bdc053c5e009206bc53467c7449c9c78444220d8206b3e8699de4c99bbe9dc1947e3b77bebce627cc20660029c3275d12b27e5d2a3719b202103218d2f14c0acd2dc90bc818e858e9ae28a152be28881812dfee927ce7b53e1648180ab99a97ac70fd11a70002864cc2f7cadd837cce1740bc60de13268074e13ac1a32f49967d72b8501acf795ba962c9311812896ce11213aac2f698466504102d70f1b2f63d4f867141b2b0a650a2949ce358af068285b4d26235de258d7f8f1e21631c319c0072854bccf4ba463a49621f12891c01c40a7cf0d9501136d6d12404092055389c97ed094320e487182328638c311c9023c78f19f80f1e3d2090c36320461140a8003285bc22bb722c5924dea40b2052d0d34a305bcf71b4fe238044c110f1d4e8fe4e6332047254200708744840082050a02aba5f6892077942bb1596212c66e5392700e204422a95349fc1739a0ca409e87f3a51ad6b10265426e48969244dc6f2d1a301204bc0b25cdda492d537018812eebcf6d1e9fcbf630e89444092d0695cf8b42f7140c78e1c3b725860092048d8d4c468f92b5c4bde2e00720453bd546a7f3a29561f041023bc715a9f3ce684ec2863cb7000007a005284f3f633c63d314eba730042043fdcf37396879ae8e10064088cabc4c50f16635516c2714b922ae6d659cbfe062041e88470b9f8525a524e56200708744840070d408060b2b297ecb6785a412980fca01777adb463bbdfd611407c70872c9352fb9b31411f80f4e0fc1e4f6e1e4be52b203cd82fc79f7dad0c901d6c0044075fe4c24b9e799f24496aaf784824f23d768494b115b82f70f1f77a2ceb183d54fc849801060fbeb84569423febc439045ec60f3124f0852d5449b7934d4c9249f39ff1430c1e3dc420c317b53876dbc9f406bfa045d249b9e12fe5b38e3f8c59f8f1e6e46a5b2ce73418be90c566924ac7099b2e9a7c2cfecd1c9e520e3e96db2e7c018bfea35b861c8b5591f9e2159c24ad5fbc6adf5a8e2bacf469f3cbebe49cd75678521a938b7812432d168851c617acc83be6289299829df059859ee94da30679b1d6bf50c5fe19bc5389713ec3938a524531b1824e9d4679067e784ce10b54f4f1ace4133d750add2a2739c85b3690a3023a92f08529088ddccb1e6fa2a296c22f2bb9cf04c993aa26457b6197ffadaebf4a4661dafe4aed92a74dce4551d584c97d710f453909f3d7974992a663a028e54c2917e261cdac4f1c196ea67f53fe9c224f6c269add9909a21b4f66f045270e9ef33b69aeac6acf09d445bf921c19ce4a7e136a8961334b43f35f471385cf84d598a6cbce45f045267091acb74a1d3c9e184c1c4b54cf0ea3ddea9613beb8c41ab6e4fcb1c4f24a1f147c618953a44e924d4e315bc548040c00f8e08b4a64e9a77c4b653ca59e12cd2771a66b2e7cbde8e38b491c6791e13486dd664612a54d139ba4892271e612f6faa5c43cbcef1f80c1179068bcc34b9c6cc8becc23ee3ca2963d86924d8c99a231be7044276ec133423bcd2d667cd108efda3f562b0922ff09d9d1811f5f3082fb8dbb8cf166ee2da22d69ca84b874c16274a9084df0aa9ff7f413d24ec479cbd6f2af09de6b410453a231bcd44d4c387ff4be800c177c7188c2e74e48c99ae77d43acde95b2654f32fc422853bbd6eb6f1d3e8448d3d3de489f24d919841fbeac4c644198bf76b2740e9ac30d44755203e2cdf559bf12fa37fa877b2e5b9213dbd3523ff0d1fab52e9b654abf0f58d5b7c9696ddb449f0f64cc93d462a7cad8fc1e6ebbfef0acd1831d673a52c46a2de5f3a0b59494d484b83ccbe301db649b57aa6227f777e8926568918cfb63f27658daa4688de1a87410230261180a0582a140180800886a7c2600831308303044208d0563e1a05cdd7d0014000044321e504a2622261a1216121288c3a17030141005c38030201008864381906a10e76a62e305d72d1b211327c7bcf8ca84c08d040e1ae2cc94d42194d2169d7c484dacfe9d0c211dc1acb9e826198e76c5fcf9113288c78850643b891854103900fa3a02b39628ec340200dfa098f060433e91e90e826416daecd7233056d942e0c21329155dcf86002ab254246a4e64b4a5ef1e5adfefc5a05743283ea1268afc7d1ab3177c72f54f51292536d601df875dc1dc97399480e956ba1a712319615588a18a904dc18e27617a90ceabc86568f6750091a4d555bb7738da78049007eb138b9d0e6a900b8f98603088353bef28bcbcb107ea090bd91aa299828e8d69f14c89679de6c05c0940eac1cbf23859215fe5eca9b1003d2eb1438500e4568ea26e24e451256f747b71ddb996598ce06e344e38395cd7ede08f7fc3bfc88860606580a52e4da65449c3303118afa58ba4534e9c5546b7d391e0a15c14cb1d476cee12934bc4225b1d0e49e733bd4430bacd7b732ea0c89d2f54cb8d72f8ebb9ec5e70b0e88e63cae9510bd123d2e4b2cbadf2cf8796775f60f72268121323a01d530640daa954d1646f8aaaeec66f60e4674e544bfdc8097793e17bf807eea8e8c6fde7a978eabea8b0fc3f6a1aecd434ba0cd30dc54bc1e5892bc2d35af914c130bac09ff7274835308b64ae16e0da47549690e013ac02184ad4ee00d242ce8847342496f6bee0576244e99af3373d976cde4e19a42185693368592e5645922c865beab82d1bd969fab4064174188e4769d4784e41c19b7891cf706e88bb4ef074d55908754bfb812dc708ac3e8a8267d789a3b8eaa314f1a8446acf90fad7dd95177a064887b30f7a060985cc2a70ecd37093b53f64623793ca75d858fd164bbe9445ec20476c42209ce07d99d8652d5fed200d3e17f5bd66a4369de878ca3fa5efe59e9b32d0e5c11882605d8e13fa04b3a4660534a82c949331f8380fca014f1f28dac9aa8cd39fefbee0d3652a7486168c7aa4c92a71efae6fead18b151bbfef42d8a267b70328bb2b140acb3e1cdfb61e231b53532b89aa647e440ed2e193409a69e5b122dcce2b93b34cfb9c578a69b4a80685d677d8e5638ed4e8a1809f4ea3e011c881ac2f29e7260651cf20eb2d887a0af2f532203750c1bce16670f90e4ae04db83f8e1df1c65aee0d177aed726fb7d8fb167bb525bdd992bdd39642d416dcede5b4b05eb90b51d61e203f840e462d06993d7cdc94560924d0735312f12ceaa0a928e112dece640a1cc13d3897750f18a60ad6aae10e3b090ac954c4d04121d631165cf07b6a321591a928314da4732ce4a37c6443cd4547d7fd6a3f864b373efdc78bbe80901b8e481f12d7c848378f19534e6fbcf6f26f8ea9386c8d0b538690979f56c766ec21de8d715a966e6a9b84484d1b1089261bc8673abbfa3399f9e276a09b88110a52f3b0ee0ef1849f6190dab540ec392d6d9bd52540e6ec70d9097271c9e2a8a0abbdca200e4ccd948a50d5f0391881a23639763936860c13978ebf162c6d8cac2e907f4dceb20b0e9b36231d29734479da57d4479d9632ea458c7a844b9a7abaf494e9094403e569557994330df13ca904a7a4e9a8534b5230c15ccd373726ad1df80331bb474bebfbc3cede504e0ad936bc4cf3398167beb159aaf66c2998264d9294fdcb4632f895f5d2350a142e2868fa0d324dbc962bd797ccb6a0f6b1fd117af1b57e426ab14a9055775d6b2cd68062af9e97f2e63e6f1cb0e2fadc98d615c9101df28ff934fad23aa05b4994edfbe2d7103762db7dbd328553add2c39c488af4496fc0177aa22483907dd063298587c7c37ebfa157e335e88da74c503d6ac4ee9dee63a4637d14a592604c062e0d9426982abe230156c154ae5262c2659e6b5a30861baafdf1f0c56567b58e10136ce7bbab96b2ca049fa84fe7d9e0701471696aaed3b47794d5239463c769887fd2ac4293916816d87a7fbce8855265bd30e33c6ea32c544b698b2f559b75f957b2963b9f4d707bca2b1f02985a8169b47b57ae3846124b0f67ed003496c938a77632fba84d8cb29e4efc9591da43b0bd1945852dc63da9fc02e98a04dffccb81cadb6023700bfdbb5c95d3380d90a329f2efc3bbf0f35163c6ef39a783c6e645aa8c629b23c586c35161cfc817d055ea29b413cb6a9dc54a8853610897674357f0af27b2420d06c1fbb5b35c671fccd5d54de5683b59aa3decd1f034220ac33e1d4d4ae52d008a2013bdbb07d9a8b99f578951316640e3d447f4cd3a39c7205a3c007cbcb288f78a4a0a392ae9dd3d21cef3dc9987e8fbec9708314ab025dc1f5e512f6ffa842ecf7da0d129f530c728680b06c702a24c75d51a9d75e03d67b4196828ac2de15ba3b655091392d6a0dd22319199df13e63d36d728cb58700898732dc9fe68703b3136f36c125c41633387f9f085a61e05d2b26faee98c016538856b2b2a13048de0afd90421213cefd0a40d744b15a5f5d2bd9064fd06ed1c27afd38c4c9b100018091f3337c046c99e2a1fe362457afb949514f03e15a40d872358a9f1237f1fcecaba7ff3219074317d01495732e506fb772e02c551cf6e4b221331bf0a50af3c0849cc6e6290b90d47f1c1e58f0dfe3e5c8226eee096798b913d4967d90922b0b1f8d5a9ad3352a6c6b4ce30f5e3bcf797b1353cc5b47f7423219c0fcb1c82ffe09e1d324dccc39536eff5255021b12f7ead9f24584a948226f91280912a3eaf7f1d812a150b2609b3201b23ab058eeb858dc9533a6098806fa74c0d5c031f708db012d5affe4ac27cd68d97e9237fc28f5239ce6999c397287f2f55a2174d7e19e5480bbb55113ede2a7d4f8ed1be0720d97234e55957f4df582eea4d036703239de1a962b6b33cc4c4fef6d49b0b75574f7558ee1e3923deac039e443daa0b88b59fcd147deb23cff83f31790d016b49850215bc7783e8a77a03bd6b0dd29c1c4caab1ccc93c5302fcb2a2939dbc9956d56ab4e14c1a81850b3656498e283ae39e4859ab8853369ede65ad57074ce7aa4a3acd005298f33d9337ce78ca9a80a69af86791840850c41e0eaeaa2120de120598f0382fd029f082fc2446deed69a4a14bf76a38bd61d80f78f7a203c13f89173a0d03381c5f78c740566da12f0d00f485dec61a1d13b86d8594296ff65c45e6a6a7dfc63b78b47909eb958151198a9d32bf3935e06892b4db3c2d56ae870d1b8fdc9e31741cf1255e34fb0c7e776fe1382cd362ef73249118119fa8980f7f0f11c37f150105650e5c465b971104768adad7c5c20a4fae3d10e624548721590e534a72a26ae95bb52ca8c1505a61d82de060e87a84d8ea3792936a390d22ecf5b0a7a680ed19284d58e789a9305034c8721d2a719040a99c65c9b0ec959bb917905211a5db38593c3154ecce7bf3e274864cba75a21271a5da42c1d021f355c2b0a8c6d4e4a48978f08b34f0958d9ae8e6bcf36c04016d3dd24c2cf92554f06d02dc910c49152da55ccf4fdb4ba08875db45204c18bb6634ac6136a1508a121863e862cfa048239922026fca18e2e1814670922a4820318203e2fb22d3ab570a99353e95c6a8c52f305b2021cedd90753b3da4227871c27fa741a4e2a0c7c8af45ec87f18ca751730907535cbdabce24dcb24c027409462f61536840981f8a0c44389f323df77880f4f8cec41e49a137d679fc124ef4a2d3e284a9740b8db0dc75917a7e04a9ab6f6e847192bfc9929fafe189e3f900b023fc6886fc29d868e94104307c86b0aff9028adc1d8ee179bed3f9abdcfc8303c70a19227f76083da38d99a0455b102d209045b8dd56b8fc04bc1c941b2f054006ee841d85c31dd41d152682952db8f9fc5d873defe0617f35d645e42b3b9ad73d08bb5305c7cee13668202874d244a114d7f0dcb7936d5f42f5fa61a13c47753c60999446d6d570addda33258bfb6c6591fdcd86203d094ec8a04b768222174422f0a3ac3fff19d2ceca51297c02f338de2e00f9c3b64f0f69c9d666c352db68fb4cfd4ab4c6b06dc19bf89d1b5f1229920912acf1540f176ae4c4ab0b3eb1740ffcc0765f35046b5b420a6beface53ca3052889b04d7a1417486befdb5580e33355822bcb1ba83bc6b4408aa61fa2e4119beb7c4b862cf00fd2aeb9a637ac9338de99f6b31ec11bb2d311737cae334b14f06a841e08788bca1b20e20714bd4d67029ddfc3a31046a61106ab071f76106c3bcbc6f0e94dbae823d528eb7259585e792990cf0ea8892d9564f63115e07774794bca301f7a905f6fd458106901d02e12b549282003d085c624f648ff63a46ef7764b451a65488d046fa4843a5f3b50b4672ad46ef02025b21caea5fb71470efa3e6b186afa3ac6695ce0ede2cc6e4c2de512ee928b078f9ca847be35ba67ab5156b92f5f6902199c5aa3417e9255e58f564029156f38f66c961357dbe53ea14f8053b4fff9acdd63ccd54a18609b98f58d4542b50db8eda54fa756796fcb44be9318d81077f0f3f229cacaea2866dbe9a69d1610043a3dcaf9061eca116f6dcfd68b4df4f98b41624d9766dc981599bd36fc5f4d3c43e1954fd4c310e583e47f2747a9ad9ecb0a01e34ca9d3bc6cc7343bf818cd11e3256f12211d38e346ee59d735dc49f148fe41e4f28d3b55c406ac94ea0a4c548339b225096cad46fe58b2702043852c0f8260be559452012cc3efb5e484730c0720134c6a50b95e85fc84da43781c2d63743eed25f7269d34a5c06a5a62903fe0dd70469929e1f3428d35896ea423dc50dcb9e0d724d5f894853bbe29a99bedd9a2aa73613d8a24e45ca358f2f107809ee5a98805f23d4981d01c7e1c0f12f45017a64e7faaf1f0b83ff0b7a8d235a149d424f448be62d48ab6701b265f3c04a994b002b169f4bc8a3dd1043b7cfa33babfe36d71905aba66ce4fbf52bdbb475b70ecfe5a574c280198035e012549fe8f13c35c24c98b0c15773aa207d4ff59d74917897bb2649e4797236637bb31be66d98aaff1d29b79d648ca4fae5a8cdaa37b2341b63669e6f3e1d32a73f1f668a2c6464b6e81c425e1ddab0eab07c065fdabd7c08cfc96df6366670910cfde4f6f4d9587adb610142a753c59e01df713dff10cce8dd77820c0e6cb7d7ba6129ef2236392e1ad20dd438e458febe4c97528335454bbee476210080ba5715b4af00359e015cbd55b62d8e4d36ccf502704dabb01d07e3ab536cc854ed3bd7bf348defee9125c478df615b6ebe3b78796cc974c81638e7e249338668f792c5f60a7c4e20770f6adf25a75697e168ea045fdba81f4866882837e9eb63c567f53524e353b643e686a63cb9e9b6207884a0722e53240aa1ff98f88c97cbe3249801d18205ee68bb866e5e12b53bc4214beeb766cd7509fa4735e8ae6d778d9488159526f07fb071ded25919cf618a08c1cea20b50cb84df45fdc89ba751489ca6c192b50d1ae3cb09285dee383dfb411fa20e9447aa935ffbec3bee8f151dcb9be787f724c639647e050d023b9ac477aaf839c0020f27a21f049f2541939936aa7454e39ee0561aac2cb2ca1ef8fef7c9ac5f7daeb6e0ab12d51c0d2bb8da5601818f0fa51f41835b568c1eef83c261120748a7a4e76df806031d6943661459e8cedf493a77d40121665e8406aff8c97f68476585db25c6b40879c405f057139c9dbc2a5524734d6d92049dbe777819a16008191ac7d6dec4c42a14031443557072d959a3056435b9e4d2fb821b29e2cd917b3b8732e7180fb3460fd2498daf67d27639fd81ab129eca6a2529447f9f96c322aa953dbfb9d1fe4a11033a82d2cf84c409347f3ae7f378252c1f125143c2f7f4b92606410da9f08eb301d7c21aec7d193aa98b757f7939c2d6e34252080a0b4c60662bcc9ee4d5d583920d36d257d4bcada6ad5531321f17e9962f198de578e6896794915c59826ca580a1cee5cb2dab1e8e508fb587672ffae77e8c969c68a996b70d4ab304b932ae8c1ed78e0a90e558389c43fc49c240442d3d9d38f73004598eef51a0ea443ab29f2be4a81317458276782ce1dc3c730dde153823721fe162decdcc3224402a66d0450c8ded923924640d37f7ea60698e46678cb6b31a25d1010c984e39aa0e660afade5a84355d2bc46c48f2aa1ec3bb13fe485c7a6885638881205c510f1224e1c2bd85ab19b637e4d8c38f6030913b73c99c9bb8ae73a15b7cf59213027d4db348ac33b42a4a18d0455966f231381bccb7d96ea5ab8fc4ac7670cb4218ebb8d357d1d257bf315632cae2850aa256c9edcfdc6abfcea5ff3011329dc1e737c099f784a178b03ea3191f4c9cd82a4b056b180e4b998e2d047c1032af3050245b5b9eeebe0ba9abe6e027f0609ef442f5d88aa6e355da4664b939466f0cba42e9020ae84024b982438ea10f93967e8a380aade9be8e41fa953144b6d0e58a7fa85ec24ce632bc78ca3211ae0c4ff32573a143f3aab00e93d7d761c92231b2a2a74c2f63ca797653835ca393419c98f4650baad1da2a56b194e1800ffc42092616728be0ade4874f804e31180b39925c9203d2ec1af2204011c441e3490151e13c16b7297ddb103a20c54d65a6638796d2229443e228b6ec4b0a5d53a247aba7021219375105566a25920912847839975c8c37ea97ea7b4820bfc8ca9d133a6fa936d676127b29c727b108f2005a3c84bd1fba200f9dd2be4bd74aa95a815967b2655a2184e5680c4c6045101c0d5270193feb02ebfecdd4355090728272a6bb8f03853565f9b604d8c5614cf12d3a669ea2e9ae1109f888a6b5045a3af05e2a418c1db031c56110e181f867d7707ff22186c2d0811a706d052a97309b3a95d2036a10599bf5bfab1822ee3e4c54a0191730ce141d2bb65e76022c7ccd3532d4764d5c4253d53babc01d0ac9c93f2c847a1ba9154593db78bac759a578689e971ffea31c4ac8d770c3a95385bc7d14f2fcae8a04b5a60434cebfcb8d1f3bf56d79981807e79b67de3a20bbc2072e47a878a623732ca9ba19f48597c249486329339c671db51e640cf0fbee7b9e01c2fc70a32d95019cbbf255dee825b49a59b0132f60a946545228b3e982b33584998aa99228a3334cfd5d6cfa69a0aae97d9bc9fcae8352690f9ee564917fa214e365b839b86b2033235ca087f25d8d476143cb3ad6246d2759e481f0d08401014db3ec54e89b058cea9112501f6d4e999aadc1d16726a3f9f4ae06c42ae07e379c0a2d07045926c3de871aace863b55f87a7676fafa978d0d0eaaf112f98e9e2dc44025fc92544dd38a6ca291a5a0d52895607a022a4d775ca030ca4aa59fe64780a8bff786dd77af6f152db82ccb96c0bbad7879f511583d8b6ab97f3c8c1dc4a2263154173970ebe3c5a08c6965605b1865293c6854b605bb4430171bc53750c0bde1bb62d08cfd010c7c1c9fcf4e443edf91616456cd4391a2803496d6f8c2e1f153729e7594346690ccdf5291aa0064df8d90b2913f8b0a9bd38b063608b614959846da0ecdaa119825cc823585f557044cc1a285d6f1b4fb77f8ad8116d3fa11d7fa80e6112d2ea6407fc3ed8af5cb434d5b3409f70f9e751e5147ba13de84a502abdd683207379583aeb29d7466971f2cc93156fe6434fd136bd81c33719280b458e30c7db439ccee27f5c6cb9ba4391032e5f708cc04598ce95ed70bdef4b537c76ed6a88334af682adb91a2876a9cd70db3c29bb0d5c833189215d420ebcad8ea0e0be22e288e8cc1db074b9372772ec54458d25b18b3fc8bdf7a4eca871b2355537fc062197cae18ee2f989cb89b61ab9111565543df92fb31ec9988b8637cc93286a454dc226e3f01ead2d24fba1b37937f64db88d47243dbea33982b31123d37decef124a862ce55810eaf5771b5e702d5290cf96ec9c4243af5da908e3919ce0ceeac5fa3b1efb22e6029b2521b4dc016ee52c9547e547759455cdcd21b148b608b55022808f990218f1efaea44458f3fd36116a4e616ba28069e2a8d97157265b330567f7466eaa93184cab6aaeea0ab4eee2db981f2c1e720b9f13803d2395e3644d321540c1bcf0f2d8b197b588e28cbc2f38344f40bd34d9d1c9b95826897c43dcacc64529a9791f8a4a494c1d8d1816b4daa1458c9bddff24ba29e41db7c1877019894ce8e8b086b83b5241cb249ba50cc8cfa32fbce8d085897be9ca1a0ea48852319c3f60981a029ec1383833013435fd0c71e2f448097cbb04460ceb023dcc57da6e449dd1ceda35d80060dab3b5cb6234fefb8c0844446e33858e83f5702c2999a82cc475b7a28a259d6374c2e2292ca2965c7292fc7ef12fde28e04a26281623166ee91a237c92bbcae19075da3045cfec416ba5c6000d5b9abd9984765a5f0428b2efef04b791284190a53b6c7ae94b119d65a3196f65574b05dfd29ef2ac0d58a18058ed0213fb840640b5ded6a06c8239aa66c987c173f5ae40fbae9aaf3151d0870876c30109a1cd0ad791af057090ad6d2bde43cb095f4a88e4e301c25cdcce0841557a626dc31c6e514a761dd75247b8c2f3658f32fc12fe74c89c1b2c3c189c1cfe64f1630e1917e6c13a445865884042b11e4b9181b79b1b2fdb1afbb66608296f48f98f139579483dbd3ad825f7b0edc332d9249830cabeba1e3bd05885a8303aaa41a8fe0eb6b7af862cb408ddc76910ac4f3cb5c7813ce13416034b3e0ee8131062b7dea333db3e9bea4fe47951c57922e89d403cb0c722bf58b3cc5b9b887aca5500396c3f3847c0354d102d32f27a4f79ed405939a3487bd2f58e02da52e238ab2621268e3782788e9ab5bc19b186130779a92003f92882b7b2cb14ed930509150561026b16f65fba791aa483298602bc331aaa45327e65b0313be4175ffd3f9509123367f8e6075878cd2140278d0037c452d0092d1b2c668688b3fc900e67b0e91b46be16cdcd7edcb86ab26a0887a5844508bd7b49b23fcca749e4899bd0236b572293bf93fb43a0177a0f01a15278cc0d1da2b4fcb08798c73e4c3c86078eed4ba6acb7980039f3edbfdbea3dce951c88940fb9b64e0ca311423f2443328be296d46aebb6643facadc209f4ce857b0f479750968865441090c8e743d89df0207dd0b589e5232e47223847e8bbf7bab2b8dcd4e9c37eb2234c247f9857a229ee0b258f45f0591b3e2a7427841f5a5c889f27d6db38b0524764fb8eed8061fd9736823af47f35f8f98bdb50fa77c1d2c3d4f02a13ab11cfe06f4eb8c73b1bd757b49cc07dce24714228afc9eae6d730cfd14c90badedc299895ff69b01b4b362a36693d307e3d5eaa8ab52d66b1cad28e57f011d2c9d6c146da6e1754b6b36661dda3f3b3921e249a348933eaaf8841c98fbab00b54a403e1b635a88b5fdffac9dea3f0a54f28685d97291a18ac167ded10b9e212dd3a45c34059b4765cd4bb51d43f53e7afad1633cf21afdd4b9dae3e69ffe9f83c5b2f1350414d84b73123272d36cccd0f78b5bff95089024e7421b632b9bade492080f705f7d31f018a9b3bd10da6daeb80c3302543d73bb118aa60f6acf24f5b016aaa12f99f660f87dd2be59c83394b686ef244e668c4a247ff95a0617d56cbbae0a7a4c791e72c41ffc419a0d0057ce5cd618bb91c85a2b19479aef8b9f54d551128c3d8d0b6b9973e65873fe9adcf134e4c8762b5bf0bd9e4e889b0cc825d710b899d66d71efca6897d2b3d407cdf71fbab5a72dbdd9818b4cf17ff74ec97f9b251086c3f40b7bba8b4f61f11244a5ff463322b409c1c58e06df8b9ccf7c25b8bc2bc92c796c71a9271490c395a96412c73097dae31e23e2803d427c81b8f167d2ae7a2bfbaaa87068c95a11eafe6cbbbbf28ab2b292b73e565119d499da812e131a2ecca369b0b1d2228d19c6e1357745f7d1278fc92b5fb7a42f95060a6dba62995268b5a87a8914dd11542e15f93cd61b893b639323527475977dc24a1206876e20f1ee57d6c8fc5f93edbfb1703cf69cba5c88e12e133a9aa1a615b7a195bf237f3354a6a20528b0ea8f5f02db0d2aa0c6eb9c090a0a4d4960c54e799ef3dc49decd1abf18a1b2bab65d08ab7dbef26a9c1372aef23041f9ae59c1adc4351794e2e0ba5bf43524cdb9dcc9b024aaff40fd6ba4d5f86f5957eba3c7502d9dd00507bfb16bbc78ee0521ce6e38447738bde91c594861947771b5bcdeebe88a2fe6155cc04e417f737be578503616e690bfb0061b23286bade1eb6e4dada902c8e87acf2d7d9beec472c3fa4dcb9b90d67a46db71f9fa861de1a014e52c0f1a5e943dd634c99ac594843667429c9c1f8bbb68312776a0831f8ef0778add4db9818649bf77e8e2c37c34b7656cd064c0721f9f0b7641f19f02a3274f83df7165dcbc3e4969d555db704c23bd1f3246fb07375795dee9b6e32d858d131c92e251e21724073435f99d93453549e5685921843d8e88d25e340649f3f60ae5513461eabd1c20aa532e5a4c7849429304b526315c25845b14b37444e00b6e31cf6fedf73f1958099f70413e694241c00f67c83cdcdd28f1f12f0b8ca257d6d43c8fcf24d5b869232dffb948f1a7fe59b944404761f677f8fa2679110aaa3bedeed5e3cdae0742600e2af488d9d162825d4da9191f9655143d4b56859bf4ad0991568054ae03ff548d3f14789b80907349f02a8b494d5aa09bcdda2b0d00ea74b48fe1679dbb0f73111eb562b2406ce09b45ba240e4f927165a35f1806aa8200630f975c052050ae1abe319d7ce6e82cbb4d4c53ffec2ca497ed471bafb6a24a6af382b52724929246935cff9e7473dbf5822c3a0a2783fb7a2bb44cbc5ff7896cf7600947e6dfff440174d1eb446b23feaf51079c09a45765e068b364a7c3b8c2cf8b90438041466a8b67bb54f35b9f548b40d3e7b5d7b56ad0f5d716f57a88dcbd8e9b2ee95eb5f779e3137336175e73d9c9b6b1b8a2f9f638f327d3fe1524b38a8b257667d9ac924bc0f52b36358412f0ee9356c8bba19c5ac2d05d9ff4b4f9af98427ef35d4ef8edcb3c9a7767e25408c1f31d0a27a810b51dbcfc61829620b68de893115215682ff61e9a4c39cd52e0c058d272d916fa05e90c3378a2625a0f2383b95a1599574b2d4c05170fe67f817c28e4a9263815983be184a256df4d8b992322e3ec95a94ba15d602275ed4c6516a51f0c7240bb266151e7b716c0659839430d667a683410ea27bf15056b81bd8018c51456571fac3368c4c9a5ff11158b1882f2e1fe99db7a5bc1bbdeafc5974e075fa562b2bf24a94cead0b527c918f7046d8520b2fda86e08a2464fa2440c83b82499eac1797cf72d27e170be1288661151a8e9b5ecbd44e7d82c182575660a42e7b5b0ccc79f081c7585e47990618ed0153363fbb2804cd88c87e84abfc95e56b7b75aaff53b9a3addf7592d668d08fc68ea5ee96fe5d4aa07573938e484add69f24629b79bf25689e79b4e9212644953e0b214e9ade55795111cb23dc0011b38fbe9d9c5aade80b1a199f01dc106082ff8c392be67bcddf72ea6ba5960209e44bbbadbf540ee48c3a83d6abb9830b0412bb1c135ae5647a5fb9df9e09463a86365811a12432e8b65b73e055c044dd99527c308b3ef3cd02897d2b6e78b04c7b5e4c499fb67834de805d3d44183184b1900435f39a181a5ac068be224f4875de34d3de6e3b880302a02280d3dca08179fc32646dd44e98aede20d1216c2c01fdb991b7cf45fb87384eee469549a59dbee798ac2dea2a07ce3741215244e5ecb57492a60cddf552598d034cc9b528e48c25096b4a32661060cd35b1c4b2ee54b1ee8b25a598dac2e473fa7958d26f060a96008f09ebd9dd96576f33bd8cd761be756cf78af443e3e1a4a6764caa1c4f2912016cf4cc3292c23b0b3c2d709e5efd3e2bd72cc46a6bb99ddd93ee59fb14785e9e1a1081ec2ec60baa1eff45109f805b606a620b8c9532a1b746e5fbae3cb3345418d18b6676c206a08c2ccc4dd7774996700935f76092e7a05813bb0368f1ad9152a2ac07fe5b5f1bb8596458a213afd77b054ce0091e2e23d2a4ddb38e337d9728d078baba585a92dde8ad7bd6d4442dc0b6a1349dda4552f1b8849bcd726bdc456d24aaa109e8ae37e3cd339cfffde59ea1d65feade892a01703a93768c7db699458c8639701cbea8304184b4fb957375636b64758777c21b5e4415aba5b389bc16b765ff9b5953f687fded40e645e58df53b50a2cf3d426c4735e35601a8f025feae588751201e8dfa54e6935bf1ecb15f429aedf59dfdb52322951c42c446dc9524995c995a4902f7fcb82c85c8dfe2530e44a8b4333c7cbb3acde6757db032e4f96f2614ef3f2857a244006b5b86242e591f66e3f641e5d83ea90f545007d080f0f9e7624396a1d16491576c6d16e158db32df903eb7f233e7545a237ed7cb076425a75c01c66173aa600d0c43c9907e88decc2a45a563168f21f31d7edd2bbec8a2578df744dc0bf99f7ab44b6b6c13462d44b6f4667dda86a476309f427570f28dd20e74f376f1db407023ff1285ce0aaef4a257c5855872a48d9721cad247925a8d6f77ace2ab92c93eaffedc12ea5e1c6602eeccaed87f3e064030c749456f9aed2bdd0a635efabb5afe4ac07cf7a4278dea4e91e1ed1737470d36541284b2831cc71c8dd033aaa2bf404d8825b75ac53e80ab0756f4f94c064abc224fdafffd8051597d3248bfc50ed10e68440c2ef999067072cb2a54a782ca966ca984654ae3f99cddddd244666e8a46df053d698405601a0cea568115375e221e6e7d66b27d40c1ac7c5595c13c179ba0e563143848566a7d87961bd7df4457c267254f27ab6073b46f7630e1e1b4d581c2fd5b9616bd9f5a70358a80b4beb242020c5806e12d47cce56341767350892ba764fb4084322a383a59f757f1380e859f5189cc4c402c2222b7826e82e6d5d7052a0006608c4de509204b87c9d49aa9a8193fc1f7a62f8b3017af83daec101849f052881922c02455d78fc3aca286b93e854ce346535740a6eda202dd77fcdf2394181bf6a7829f9051d1455da4ca360ede755ef0de4727356de37ce17cbbcbcaf8b8212b443742a7ae23296365d3c0acd6770121688101e5b353db83fad635a7834fd8e65c80a553f21ad45854aa7e3f83abc29406f714425605732434d4ccfa2eeb39e83ff84e8db5fb04f4991345ce53d560b9aeb6ac2ce5b349a1c8a441e749eadfc8f5e8f0fb223e9fa25753804489876dd8e934609ee4902a40a705a7503c63ed26f72f2ed4a57ecccf4916790ff46fe9f0abbf29d1f3856eaf2a6dc830ade1cf15a2a25264ee96de8b5be1c5aa39b24f4291aaecc2277e5a57625a9862f5b230bf2956ce80e606222869f481d7b1314a3034133239e8d71c27d85df2f6fcf662751c931667f732cf65139b4082b1d13fa7bb24869d1c7321a1c97370a8bf442a6bfded79b25c76295241a15d1f5fc153cd94d018e538055f4843a4d13b571f5fa3e12e9bb034f3571516961d82534f450940d64a015e2fc6af0998a81ab53989ada7896cf1682aaa056a2b15e975808f07a2b1169f910cbed8aa0be7ff789ce739b7e327e3fc1edd293ac8d4c7aee21b31334132695adfea88a1b50980d1de600b5441e5354a8e145d3ba59251586f6945f4d71df71a747cdcd532032cf5bda9225ebb7bef18a1bd6a70ebf3c6194d13859d89b439bf1658ce5de35a5fbc731e6d018d64a06eccf387497200b469c56c13e3936414d50bc546dd0f0d4f9500aa53a590afc147166439a9bd35d26b931cd17641703eece45e70e3440aea69003033ccff33ccff33ccff3d819df570409bd3b2525c105da07554b4a922d5b041502665f6003cdfeff7fc17ec2890a02040f1e0fe90eb7a7f8d57292ad82b45c6e4d51bc889638a96392b5a5f02737c54fb775269f90e27edfd2a824c928b4da0da2959e2d8926a248cc635693523ab3c95070e55f529f78c28509419194fd7163e53bf90b7ee22bc16dd4a429b1b5f304df29ca86f25c270c3a5ad2eb6f68cec6893e732a648354a46c9b58f53cc6d52474c91ed30463f11aee2e9a3e6399284cee4d8247a765fe60c258ea9bf2ec32b3752ef10966f9377ed2287f59028ff927459b58e16255893d2bc58572effbb4a1c4193759d60c4d52d4cc244ec93de50df929749024c1e7d7ecbf28126cab6fb63651f919125efcb04b52863bd17bc431e5a4cd4c56371a47dca14dd68c2d4f67298de054b367e6a8bb49533d326083116b26bdb0986c2c42cf694d2b6f6efe9d4644d2f81124053614f15d12c5b385e8cf662326b09108ae843949d8bc41449967492a44b8fec687c824e55bca92ae6bb035e0041b8678727e767ee4263e6da3109410a6a1a2c48bbb2c21f49433d9dd4ac8cd19326c0c620dd33995a6d08620ba92f4c9cc7e201693d9ac492eae6d1410e71e9fb012cc3f6471a2c3f32559cf4b16d8f003b6e7264a8d8d7d0567a08218a8c0461f123ef4c526f19ecb5919d8e0c3d21e3cbf6d453f49923d989b97d5c349655e1d2036f4d0257dab50211b794033d6f677a3b5648307b23cd3642bc6a5fd55f0031b7758ee42fa6fae6dd8414d63be212eec99b6a50e5589ffb99fa43a474d0727b453b666f09eb750b131077f63873c4b9a5672921c4c42f4c60c2d6f15bf387c1d4ed8b8794a8ea1c1818e31ae728e11b71767c002e80d36dc60a30d5c122646f3e6b021d9ed45d24c4e986b0d67eeeec890e94fba940d35944cf490e12e5c3491478060230d47669993b59c4ada4643925cb9499aaad3c619b2dd0bb1d5f9fcc46bc48619c8d20dfd17438d7e090ed847ca50ff966c455f7bdac98888480f3690044934202202840cace6f8953ac93d7c70a4878d311c4eceb1f3c466ced41964f0600636c4a075bcd0912a9d31ad2322223db01186248d7aaac9b7a413346c80814d5207ddf51e4d511e11110162e30bd707b1da2a4912cc922322225eb84f784d1542a225a61111912e24c6d5899292a6eb587ed8e0421d3e229f625276ce16caf7ca870d2d7897bcb2de7420592835763eb1d6e536577260030be7fd98ac7246fb14f4326c5cc1eddc9ce9ad3c367d464444ac40d709766d975ee3d955382bff52fce6cb19aa1ad8a00226acaae76aaf1e19a7b087abb9a5fc9ce4b4e3c08614940bff19c777733c310a7994a84ae9c32423c306140c1adc73cfe6496c3ff2843edc9d14bd2bad47d706369cd06dcce5e5eba9c41c036942ff296b7d762ad32440c828c3839031c2831e41dc064c286e2ecf2699a53be1c4c6129a1ed32d29ccf6c99a12dcd0be2979eec94193842cc51c353ddfcb62030989317322b222db38c2bfb184db641d1b46e03a5512234a4ef8b247c828a38ce4cd204301368a70c7f84ee37539c78ebb0d2224573e09bff898d0e0860ca3967b0be5a7fa5af9910b8cf1830132081106561574a292c99df2d9c3db8719272418e57a8a7f861e18e798a41cd54ffe40c82fc81721bd08e185f26ff2a99ce7924493110a8c00493ca081905d5cc28925e5096dd72415a28b04b98b3ab35cb35e2e5a37d7cfd86fc9a4181774169ff4702715fade62eba0f7f526d7d9545b98b1692e874e6932adc5c1432beeacd7b7420b379c695d7a679de5233d7e0439c3c70f13320bb32abbb56aeddc47cda040882c8ae925c5fa13377bb623222269ec06426211028b905784b862435a11c28a0984acc2ee0ab249b0f89f0c5185f14c5c4bfab2dcc13292000a4945082a424e814688295ecd954d10138db7d15228a751734a6d95793f529cc5834bd66dbc7e276414f5a5b01e8d32e9045f14bb585ba84693343f0f452171974a2ef55c5382025171b9cd49d27c267e22afcab424a7784c2dc413e6d0bc1223ad3cdfea44a27a995ef4138b17e644a9f6fe4c0e1d4b737213cd9f60172a5f58b7146922c136dd4c26e9e4e3434c08c984ee56be9fd54bd83862c23a7963767989c1d58284904b789ace53453c689a6589904a109dfa3dcb9c249467005084104a248d99749d3b7dcacc43266196b4761a57cb1022094bd4f8a1736fc9a1f6911e3e82f470108444a2d8b0bc4ff5a36b9721041269bc4d29bfda63087944a1666ee346257cea1f6e86191f70800ac6e881770e7cfce0801f421c4157aa2ba411079796bff7123b9c68064218e19669ccd5b52f2164119a24ee6c0ebe9f6de30eae10a2885776fdbfa4f4cc2a552124118a7d7dacc949db2735c23d4210913c79f7717299f82e1016841ca26ecb2d49d66c374f7520c41049d9ae3eef718f200e64032185e85eaec4caf4022184e0c37f884ae9e69f6c4444444484021f320863b54f73ce37cc07472a102208a3cbfcad5289b173de0c218170329649456d9afb5b0b2180f8f72fc8f59a14b5da1f8e12fe2eb6dd42a6a81f9e8b9aad3e635627e1903e14a531a685ae9d861cc287f3b5e3e6f857624c1db287e37a554c42e798b358881e12db37254146d334e72179e8d393ac5f98a44975081ef8a0a36db3b796ab0ab903eed9db3aa2834cdd217638cdbea264fd42ea90647df617ad332793103af023a6f94dad4e8a61c81ce8f7d02dd29229351a111149a38c32921e40c80891439969794633c571130b89439b1697763e262b407a00494636040ea58f7fd2a61a4744448090518390375c425bb887d733dbb8a1d8b4bda3d5f13cc85e868f1f3dda50c8dd74fe7d7fa903848c1036906e62548e09bf31df0308196b48b078af90ee4dbddb87a86199540bbf25edddbe232222dd49481ad0107286effe44347d39222232460ed8056e76300600c0106286ad63e47fa494a8259721137f47e7c2774a0d3d21840cdb9a984b0aff17e1a990319472f09d8ad58e6f133150619e34f224e1e4670b094352126c636731e14aa3400e3cc8074444289046f2e3c7052e30c6183d063b0bca2823c9410a4444c6e0410818f21aa9fecb8ff52eb220e40b215ee84d3ebdfc960ce942081742b6d081102d942fb5492a7f5132e573c02e9840481612a52f3bea4dbce93c1a675820040b8de6a70f15d3a9b4845cc1109784d0eb8d1742ac60a8fa94d258ba4865ad105205ddc35a54e3433ae44b08a1c2952dac745647c7306720640ac692888cf9da05da0c32382022122285648d0f711fa6902814f79dd35212337841cc2063a487fb800c203e08814272876492d22b7cc7840368843c41f7cb8c3dba9b463641429c4096a471aebd0412d204747a3e8698af0cdd9980d4beba749be0fded12308f7d6238918d29a42d085102f3ed7731e7e53b3133e000178424c18dab7f9f0f7565d24828b4956eb29c34c670861c813e394bd4dd9d98311462844a66b5e2971c327815528433b985e474524b8b0921428d61f0225fc96367c9adbd8630fabd14e2f2332549b082b19fb879538e72b125a74727a10630ba9d0be17f1bb37964f4d81e1410110182010778608c203dd8408d5f3026c45c4e72a8862fb2974ea1f15dda537d468d5e9c3bdd634da6943d2abca8f2676b976f7ec69c5df449f64ed0cc1553ba75712c2d9d3d399b8b3236bea794afc4dc4970e19ce5acb868366626b738f97ab424f161d93a5bac1e4cd294e44f397d925a785671ca520ef71dd3824f297fdae4f7dbb3b32879aeb524768c8a5522224180b80dc868326ac8a29c3a2d8917357694198bc2f9c7531f71040d203dcca8018bdfce4fb82454dce82b0c95842c131719d15c71cce961fe613352d30a2dccc7d206b3ff4bb362170dbf71fd24e79157c18ea5ad2a3b37b15e557492fcb77392bcf2394c85593448caa59a4be64105e76d62a6fcdd299a4b424acd4ed7254906354cf17f8f584a6531f6fca5e03f894977c57facb3a450dfbc930917556c3a2fa8310ad2635cede59a94f8c6d8400d51d4dab999677c1568a046284c490ecfba15f4400d50945abeaa43fc26f1e4d4f8440d4fd4e8440d4e503a9636bd5bec586b6c626b686204353251031329a871891a96a851891a94a831092d444ba6640118a18624f6f4ae26566da64d91a83fc951cd5c531e17755103129c144c37c9f7a3521f06281111111169e2d9a90008a3c623ee0de6194accaeca51106a38224d3989291e4f73b9d688b453ee2ea16255a78a1189c9ab376a6846cb7a11c9df3979acb81a3c4720d450445b5567da131583fb89c87abc5ceaf7d2e7434451e52d658f99aa3c3f849bc32eac5518e44762821a8630346612c574f3e45f28e0831a85687d73de6039864d138d8888384044640c163820050ec841102068dca02fe0ce817644d42084694cec3831f5f6db0791860c3f9724614bba5d1089f717a5f285c5ce3810ecbf5c4e1219df1b06847a593fce43fb07f2dc733a398931733ef183f9e73f675d3b553ae903e6e15d296a273109257c28f77b65ce5eeb6e49f6a079fa18eba71e0c97d3c6964f8b0d691e703be97fb3968bfe89874cb2e8992edd6fbcf10ec95172e2ae8ca787ed700aa3ba31c77392d6abc359ade4f2b687757428b7b52449960b96f23687a36b062dc14c7d4a8e1c281d4d169d6bf3421387672f7cea8ff54e471135e050f4bac5142b2656ccdf409dfe5ef59cd470839a236d354aeab49ea4461b4cf5595ede5683af63d46043521e9150a9acfa8daec1f094e864fd9d573c3524853c978d5927c7aab750230d977e2e4d1706a98106caebe54b4a16262bc91914cb94a379864fcf9a19fccecded6ca1a9e25486af4ece2147dd5c3c4f8634c4e76c7af31832edf49f433a35c4d06494b6bbc78ae57518cae1175ba72e5b8a070c499ee2c6ca1dcf2ae22f9c755d9ea3bddc752f1026a6a4f9a1eb266e1756135df1d0b53279e542d29a4445da735ae8b750466ecab1552d94a04616ced20c7a99fd93540e0b35aea0776ffd8c4911420d2b605aa9bff4a4d09255c13cdd5cf558154502420d2a9439256f73132d7938853f6fec1469c2a546470acdaa87e5eadbf3e0d68842f9a772379e673767a0e0753e9d12243fc8983cc1202e6dd5b3f1d9a1130ada49be14bdc465c526783f2399744f7e5083095bfe6b7e7797eff0975067cea39ab48347754a404a736d4837edb72d099f64be75fde726a1470216d2e4ff937e4e74b3c611ea24974763de566adf08456b798494a0da9a1641cf39dc5cb387cfd4d42082d993f867e6f1b373c34818cd6a2568495d0e09a3afeef2a974d958371889afb261ed5a32b70b8c2b68364b4f51a36f4502017e714cd1ef43b389871b7d516c7bb599cdc70fb9175675c558df60e279f2e2fbb2b6bb789aa9c75d74f95ae51c8d1c7f7847a62bc5c6cf4843056904f1437193c96dc9c1377797a30f7c9c56be7e8f0a39f860b4859e19ab9876da1c7bf83d7f925cd34acbc51c7ad8ea93d86692a8e98236222272460f1f417ef830411a3f72e4c1fc2589dd59a493a5ff100b2a90030fe518735d8e7fe61c678e3b1cf2b397c9e92b8cc7cc48aa90c30e26d93acc78b4ec249639eac05d69cc7d52a7a4961fdac11472d0a1d196eedb78fb54e273b02f7ed7cb4a98f8b70772c881c84e098f69ba973c5d8693c10125e488437b65659e97d3f2db09193f1216a41104004ec8018775cd4f638ce75be97e83495c3d4b927a3d794e0739dc70b8d470f91b1f89418e3618175cfea73bba3e9d830d468bd6edd3299a753ac71a887eb11c3ffcdaa4d4600c655b52a98935ab9221471ada541d3f68673641939820071af64ed9f2cf5476db739ca1d4246566cf7eb3cf7398a150e2e67e665a0636c53cd5fd52410e326421773733bd9a145e8e31f8d953a62bf9a4cb9ee7104362aca0e331da74f270214718caa3f3275766127e2b58c80106638808bbf7a4296cfa0bc9a9a4a757f1b024e885dc5376c459122c74b80b073f4f726bbd5c304dcc8e25dbb485eda2d47f6b460babe87a5eca1aa7269385aba412f37cfb58d0a72fe564598cefe71572dfd8565552e7ec94127258c1cc49a622f38c428e2abc25a51376f523324950c84185a7a44de9d672eee4981c53a83b8913e1c1aa3bf423e490829dae6bc28a1a85c7d324db7299030a467d84c49998f75fccf184e3c6b7e5d8b9db258605399c60fc6871c3757a23f626147f59fedc42b78fcb04f4e244f7d51b49cd12e8b0254efb4709870d1eed7b3e772a4b427e2362b27b7220e192d0b6cc9aae536d24c871842b4cc60f390da9241b81d616ad4d621bff9a1c45484a4153446b98f34e92830885878bc12f598671b4cdf321d91d6f34611c2a2a3387a54f92e10886337d2f0e60e0c93b4d8d8f6892022bc0f18b34c599e5b64c3a1ac7e10bbc354bacbdae38276f70f4e2f4a956ef20d57125bc28d8546d7cca76a18b5c58d9152b72bdc72a830317b5e999b89b7370dc22d93dca788e3fbf9b9b000e5b2c1ef65bad5dcd4d08472db6932eef475687b611072df0d09ea34952ef963642c0310b3b7389b9566a34991dc0218b47acb2db7a16ed13138b3eaba7d4b93c94ab05072c3431f9337cc6385e710e25aa7bbf8ec315e7f9cdfd27599279c3d18ac535648e27a6a0177370b0823e9988cf796bf53c3856d16cecfed418aca7c48c6800872adad87fb71aa7474d3e15c5a451a3d52d6a668f0a435b434d93a7e0193fc59617433a33835ad9a638f3c94675e6122aa64b517d8eaba74fa1bd6252f82997873e39c5e0d78e82d58e21729d4c12cd44145645fb88096928ba7839cf5286cecaa03074e56d30f5f268e627923a4acda7f31ccff744e1bbfaba52ed44ec446927ae227d3b6b0a39918b96c7768ef2dad626369796f3dead93324613aecc5b4c92878f3766c25072e5af31ed5462840942e5e4d0bb6b9a3e9748f2cd8d7a62b650a9e0b0847ef627c7f7084d15bd018e4ab0e9b97f629079cff944e0a0845d413bbab24e7c24e9e1c3063d80806312491e6d2d4bc5ec26562322223d1222e090c451eb6d7ff25373ec8c888804014724cace41d39af4320e489c2e7ea6beac1f816da8bf8bfeaaa5f650010e471cf216e7e67b29646e2401381a41e660bee2597e5f3d8c384ce8978eef9b9e7811be5b6ee40991f69ea308f2d7735e13e924f9611c89a04b8c1bb5935827443810e1874eb914e5b26a26711c82ceefef5c29da48a7380c917431e55a594ba7cce028447135524ee2db63ff3808b1866ad83239bd76a7471c00081c83484a57961d3fe11084d966ee841283ad25393802d14e5abaf83d169d96077000e22fdd64ab17c2f187b36398cf992b9f2425191111e9212222820b60a00422e8000a70f8a198138fdd2598e059c3d1872b5734263964a9a59c0f898916ab744f2ae9a4e0d843a12ca7bcde1a3de43f6d31f7d46ef4110738f2d066f9d6c8afb8f5141ee0c04329fa7fce991c2adc7b872b4df766624b0c1db4831dc42f8a8672cdfba9c32966be4c79f33d96659081831fe0a083b1d337a7d706c13187b3f689277a5481c8e19839899c78551cce372ee96ede36610207bd35697f4a162038dee0a55ff10a11df70133470b8e1a43a6d96d7e4afcb7fe068c37267dbd1bc43060e369453cdd6ecdf6b284ac9c65cce9eb99b031c6a783ed33b6359dbdb9986e773f7a675fc7cf2674444e471a0410b15d359ffb464fa6c80e30cc9f93b8cae6a5a4a9f0dcc505b7774dc283943a78c348e326ca13289a9c2e8a5c546444480f818711c64308a9675c6dce118035349b29b170f87184e5373b2dd95901a33053c00003de008c31b2f47554c25edf63138c070b44af99d49f6c990491c5fa063f273efeae0f002f62166eafedb3e8aa30bf77c56faf052ae591c5cb832677a59ee3f3b7f0b6f6fe9690c570b6488cd6da7104716ea8ecf9ff973ada5c281854258989e9ed1ec1f8e2ba02af1ae73b17a43c76105c64fcfb29c45255909e0a8c29ac757c3ba26cf09a9d0f69cd0bd11ff572e8e2970aa953a45d5ffb89e21e09082b65ab26d118e2898ea511e3be6bf4c0a0e2858b379f753e6bd7be7094c9da75ae6121c4e386bfecc61b358bcba58004713d0607fd2559a92b25c389870a985ccb1e5e358026f1be3c768d5d86f7d0087128ce87b8d127912eeb8122c53c481044adea9edbfacbb6442011c47a02b85b0babcae1e5c12e030c21a5334754b0f13971c018e22a89a32858ba99e72da8c88889c8b000e22dcdf293a49f2592a95ac4044c4c70ff781193ecc20c18d61e021dbcccc3ff355f087a7e0479014888898718630d6d4a8a466f223222240c8c8410f33bc8c337c7030bca94e727d7ef408188826417253b67db0724444a402377ea16ff46c9bcbbcab9b6484c730377c617bafaa56a5201dc32040c6a01bbd40b4ce773f07dce08599664dd812db7d539a811bbba8e3caaaf38ea78cd60d5d186b293d25ad73711ccb917bbf8df5f2062edc363d13ecfa6398f3c62d4a132e65373b19b1051b3a967fca96cebd47e0462df4ceb1c755a79294ef1f36f0e48c20490e7ef8e080dda045ed5ac172d608bb943322229286d0e8112407df801bb3a8b3491f6a4cbaba74cfa1d1c381fc48ce9045c952899f323e496d4e2c4c16d95d662d2c1add90a788480a446ebce2dc9aac69df9cac6a4444c415ce499576aae7afb9c08d56309f9dd3ee7db678ba1313888800f9e129b8c18af38dc9397b9fb627fdc72a98943fa93446549779813134704315775a4d4d92955871bb54b0b17e5377d2d7c87e046fa0a2f4354bb75a3f39993d809c22d1a283d4acc9259a670a3b263a95c6d768934ab1f9fe44798e592c0cb8410ab4a3d4e9ab360aadc59220d96be2b896033244447280861924b8218aa43e5fadfd122faca168df3a7eeeb6427f0e8a2ec646e7af389bd46232cc484c30060a6e7c82faacd935f51ae9f1801b9e385acb7555082170a3135db6bc6de95df3f8991b9c687d2cd4c90f1bf4d8c4352e3e3efa9319dd480f1ba0b1de3dfc8c8481b88808057e2423dc3e4682780e44447e24237c431387a6abe76728d9e7f6c08d4c189f362b225e4d9ce806260ef6b71afda2e57d342222d269987101119134cc48e8c625cefeb768e9e92e21e086256e5402336dcd193eab2ae41ef4074444c600c10d4ae4155e2ed555489cfc24961bf5a8d614c2bd95046a172515eeb9965a24ee709d41e43e3720d186126fb3a27af6cf474444c6c88088483b1967f8e004f8b8f188630a8b3aff18644c331c03371c818d470b6f4f722c971b815f7994caf33de9638ce8dea42ff32a7f04a11b8b286795d6fd8b4c25c728825ff1f97fb31c2ba43fbc7ff8b0c08d44244972af4f59f28a332142f78bec8ffddfdb7ff430c3cbe8a1811b876063995fb987fc88cb888888218e1ffb46212eb92fb4a39d1c3509bbe00621740b7ba23925837873dc8b26e7f9687249c10d412c97eee55f6236f94c20ec907937348e5d8f090a6e00c29f2f2949e55e103446f087d44c14f90ab657158d8888a8e0861f1ccb1a37952407031a1803031a68e7e48c14a4e12128c18d3ed0ae2e799e53924d1d72c10d3e7c75b939c36e492e5e066eec61dbb312dd7f335db52322223c70336ee8c19cee2db7cee7461e4c13d6317b727633ef811b786864dfb5e27c0aafd911119105dcb8c3396c0cefa61e3327d934829c9103b74353721d63349ff3bdeb40577e56ae7cd241ab1caa4c8acd41dd4ea79926ecdf69e8861c722bb9f1de2c72e98b4325a6860d7926ccb9950429c3bb0137e070e30da564e749abf10d377c52d2eeeabcf95f62d0d0816b600337dae0776987ece828d96783daa1d22235e6c61a4eb9b2bb9a50dd50c38d344ce0061a6e9c6193e7d644cb29dbf7bf61062b499efc2b1f9541dbca6af184a8fa3811c20d32dc18c3b9fb4dda37b92dc9470cca9b9c73c44647fa0324b81186caa662092b13972d9be1e30637c070ec8d8f3b26674885cc8d2f1451f6ff9943bfc7df0b4fb5a711ddbad44ab9d105f272ecf5b7cf05eea42ceebd4929bb06c28d2da03b3da13b92b1bbd4029ac4848eaef39db7a471230b495317a32feeb22c8f05d5c4d7943db4956dee0a64d26072fab415ee4a2579a26c974945c68d2a2827c9c9d3e79cde3a4a854327d3a5cb583d710a8ec9da593fa53559298514dc8882313753dee6f3dbebfe06149cd6ef35314fbf49f92778a2cd6613a4b5e5351bdc70421bbe2d5c93e6dee534a1923afce4f8ece7280a3798e0654cbce5c877557f099406ff31f9183b7a2b3794704a3595c3c74e57a2e2841b496037c71ee99833ef9c48f04efd52ccb91b47b8373e4379c865704d176e18a17c2d958996db386f14a1dbfc124e4e69d9ac45e10611f8fca61bf382d4758c8d611463e36ff8c68926e64b604318b698b0c1f2c9631eb30bb0118c4cf44da2a7c4e6fbef061bc03047d728b117e6669367b0f10b254aed848bcf0c367cb1947d96a0e341fb62bd3098fc896dbfd9939c106cf0c2c62ebacc16c74e568b6a1aed030369b40f0c7c09d20842c60f1f37484600e4035fb0a18bc4a4986e1e55af76511bb928091e63b2f74646066ce0a2e4399cdb5594927eb2710bb425eaf472a6d795b630687e12a6ac4247ac5a2445d5379b9f12d70c1a67d0c24cd2b47f9e9db8e3cfe2123d4d983ed59c722f8b3da5b7d54cf499d36351bc2c6a9f938592731c1689264a6d45fd15a5ff080fb617615157601d6156c29fe798ba159a3457da93ad517956283a3d9226f468b8ab3885ffc669c5e89bc3aae83ee9a73d53b1540ae7d2d6a282527bb76806c9e6d39b400c2a988268cadf4d7258f2814c4193342731a7735238eaeeac56a85220461452936a2f06ab984b6606c480022126640917dede997a823b55a24b06dfdd11c57082727963963c254d3879e82467ae9c436f2e0613eedc1aef2eae8f592704622cc198f1977365992f4948036228a1b95c9264b82b3155b8013192b069e9a7b2eb943f392006121e3951db132d42ee801847e8241f932c2b7fd6d2474444ce8c11fe4b29dd83234092910f885104c2e414b3358979da1e3188507f68b6ec713da6941bec18069ec2bfe9954617bb760863d5f48e413f3f460c76042339d2846d998a59f2c00e6024d5a6a67aff707d5911111f64fc62954da13a35469ff97c41a69093c352896ba301e9c59b42744cf4a25e89f2420b92529ea2df85f9c49fcc51297f49c22bd8a10bd5be52dfacbb06b972518c1f43e79bce3377a560072e4ae2e7764f31a7fe2f5fb0e316b5c9591f22230a76d8a20ad14e62945cf761ac45425748c9e9774edc043b6851684bb158d65a9659f0e927c9e6fb9c4b7a9060872c8893b3c6b497e2d7a223222235d8118b04a98bc1ffc711119113ec8085bedd939f43752a497a4444a4870876bc82dbe8947b7b5f324e3b5cb156a5358beaec68052747ffbeaa32614a9a15bc274d692b136149cc2adc143ce7a48990f2fa023b54b19418c5eae75374149841da8e54ac6a397eb92a6dc20415f9479fb4b14f769ca2d8579aa2597efafc233b4c91c9276fbc0e36268ac7cff0c14030b0a31445f52593bdab2c1ff4c18216ec2085b5ee6963a3edc939368a76ee3dc6cf753c5a51a4d939db57baae2e83831da1386eb45bd44f69ed2f65ec00c515fd042929da66ecf884531eae5d3bc91b5bf384b92bc5faedea44e1dad5517beca7264eb8276da96a98cbdfd226ced9263f54cc5b59464d28e9d942b9949948b45cb17d82c5676730518aa11b276a697e7f893cc68d4887966edb96c8a7b62cc78b924f629530672c299524c5fdd0d70e4a309e71163f6c1262ea1d9328f58a9f667dc7f8c90448b3df608724ee4c62a936af417c9491821cec88045be9e1fa2df85709422239fd8995e35faad1ea116efa57f8609289976e479cc44dd95d3732891636c29cf94ab629d94c73ca08358ba5e69a0a9f6e2da294a3c465ebe31d8ad86476c66267546e34115a86aacfa4911ff34484fe9ff251bfa4ebe41ec2b4b1aff6d162564d3184de976309262741d35f85e82ec604ed6413a20da71317173753390832675ee7a32aef5304d159a79f9cf953c73809c49d5a3e5ee5ce6459020873ead7790cfe81abd41b2d4e97e417f3c321531c93cb739db104801176f4a1cedfe79de353f0243c2222b203325a0321d8c187e23a347994f8c5380b61c71eb8dc6d7337a3f9bdeed043d96a5e5bab2978bce48193a4ecb29304ed9b320320d881876f43e34b43848729f0811d77b073f5bc7b9ca8d9230810347ef400428688089032c8088246eeb083575749721313b3a30e599ed0a92eb3fac23be890fc2549b1257bfa1cdd1caa289725bce4a6f34a1a415060811d72304c7928094dd36a7d471cfac8983b7c9c5360831d70a8c44d733125b1fac3fbae013f230d15243bde909b7aee0a99ea5ebb1bae53e9f4f9c1edcbb3a30d9c4b75ace01fca2c638231829051c61929a0c10e36987f3774ff0793ea6e0dcb493a65326fb1f36584033bd490b8dfda7d096bb9ef1d697866f32c78417a9046d2021f3c50810476a001134da235ed9ea124e7d63be14cb69eca0e33944bb69370a26ebc4f193bcab0cf9f70f163395c98c990943e9a82c6a8bb4ad9310693a6ce147e532ecb80058821b92bbd24c9e58c69c3a069b69d4c093b1a27306c57b95a99a4cee48fa92f982b5612436f2c417edde1053d6783c5fe7e9a3449c18e2e94d17e42bc9bac69cf327cf8d815ece042dbd3b9e9f1a949aeb670a8e4f1637ca473857668c1941a2c58b69c6b5edd91852429fec44af7ce86754444a487193e7a04711bfcf0f122222fd88185d76635254a70c715aad3b98b724952596b87154ce28484ce88f49c35821d552023e5754a3629e76431c37360031f630715b04b8289276a9f58139b1d53b0d5c28479d17ef8e84101158cf1c333b0430a76b2def124f92341121388888c0449ce10114923c88e286826a74d51a2bd67d43d82fc20e347901f417640e14b67f2d459563bb17f0236b6b9bc72a86a779d60ca8ea7280b7de76a134c6269d2a7de4813333b9860d4ce398bc79790b9099a523831f52fdfa1844bd6fbd974525ab9b823096ece326a6a61a2fcdf8104b35334bb5ce9239416eee2c5ac3b8c704927d2d93e3db3293b8ae0c9aa58bbe7e99c991d44e0d3df65f4d87d1d2f3a8661a53799198f55d5be30d679edff97cfa4a709465ec2887b32314dc2a70318a7dec7244489c9793fbf58a3e6eb94a7a13d73be384b344c6dc6f4c2b8be3bb3f73d5162bc28ad7430d7cc39475776f1fe6fa67fde3d6ca043172639e5c5b4186e628af7c03df0c379e04304a523170957a29ba96c8a593f2eba984ede2dd9a38a949020881964f830c10b74dc22b768b136560e95abd1610b74c6364c4a928e5a24eaa7d16467426fedb4305f38d1aa68ce22d9c5d2e2671232643c093a64d15b4b4989be39c91da3041db1f8734e2bbe17ff4349ea80c52587cea1f63a62c2d8021dafd893d4d9e5dd84053a5c61598a4e7889584e738c76337c9491011191d6818e5664e7ee614dee74b0822faf1867ac5b0517edd69d664f10ab55e1ccbd8c7e4c97dc642a38b3b4dfd984fe2c295478c2a68e5315ab4ed3294e297b123654980a1337c5f9aaa5a33aee3a594a8106bf28d5f2e82045d7d1156e345a8e68758c823651e53fcb736ed245614af6a6a4dfafaf6528bc1c16c37375ca12962fe80045752544068930c1f6b3828e4fe8d57652bd0996fee7078ea0c313edb8ab6659b1093a3a71e8306fcdb1a7ca541d9c28d37f382bb19a0f3751479f8ba72b9bc79268c237213ecb7d9889c25da3a768cca4291d9838a2d2c68bb28cfad925f00ff64912f3abc3126c86dbfacbcf76925702d3cd2144ff3aeea39450b4427a524ff7dcce24daf3bba0db1f163949a22c265db9bc2a93f047c2368d96d1ad2f2ac6464444120d15e880c471e9355fcc8c92df3fe264177276498ef9d47684553a9deb4f8a043a1a8105bd60b94c8a283933810e4678b6b72925fd4d696d1d8b60935872e5c98707597528a2fc49db52ca1546fd2411e55776d6784ef1b9bb810e44e8aab6f5d1395ee936d2a3471034ce30e3033f7c00f9814606807890343000041d876035bad4ee49619f53f7011940d0f8800e439445e236ee422f874e54884a2c0b6352d684f0d36f4cd00ff14b2beb18c45a312726fb389e2e17046ad179a29ffaa7e804a2b0f13cac233f2a3a80d884e9682949795913fdc1b1101395c37a820e3f50139e3506cb4d9a1a1d7d7883bf86e53c81a0830f7f5ccfd456ff2eb5ebd8c3626539c9a9eec434d38321b764d14a7eb731a4230f9698a162495b999227c18391d39d476fc6f37750f7cdb269882701a4c30ea47c860af1de1bb175d4a1cf2bafdc8cc9df8d0f1d74c03409fe6e3926ef9cd331074cb3586e4979b30c02c4832422d02187c2ef04b77c313ae250b654d163653c4fe1d60187dcd34b0531fb0dc98974e4dfafc30d546e7e4b3dd136944b74d1f7ecf46c396c7835ee7aa5d4d7b057f470129b4fa898a9c1ab365fcf9a4c2eee693086c547cd98dc1a4b6ea0030df49f986ecdae34a5fc1912cb674bd5dbfb2e378319d2fcd7372a8339e547ef4a4f6fdf92c18d1735dc77f55878633886cfcffde311c31e3c46ff46eaefa784c1d9bd0c9ead3567d7c05094764dbfac693fc45f503556a95e0e7961731fd9cd77ed9bcc2e70628917b25e672a2f174e51355416d5fa924cb690ac57dda7e8b4f054cc262f13ff1db42c1865a97da6abd4333ab0a0e798b2ee437b73c53bd07185b28a9cac494a269b9d5670a3735af5c77454813a299a7472ec091b722a1c2cbb47d405fb6e7f0a7cb88fd7ef8ecd572285744ac8cddb4c92073d0aeb66a5d9937d12e88042394f9e379b8bb22beb7802e5fd751b7312b35cd4e1842c76b4bfee7b2ce96fc297f2c994fc25ece8a8830979942df92fcfa03ddd40c712c8f1244b74e7752861d7d7b0304bd1aa4e7424413529e1729e930f9b1d820e247c16ee6249f34a6b8e8e23a039e57c4c330f298d0e2350d1c49336ee454711dceca1e56e96e43b131d44306c5efbaf96c5df358ca22e4aae0d353b8b0b038df9b7a4d82f912ac9418e60fca395162ff3c0d8c2a7cbeec77ed12529e755f0cd17650b16a36bae62de7b91b86faf66d3a4397b7841fe9414a34d70a4c7193d7a3020c72ed0f8a8a16312f1b09932fe72e8a23b4b492b06cf33591b393972d1586e1354fe63650f4744446ce043040700921c2073e082de4f5249d5741bd8c08708cef0410211111bf8284302396ee1e776984b1dcbd24573d882f29c6d75edacad5120396a81550aafe1db3d62de1cb4c0463ce566c7149390e5608ccd318b3f655916c6c8d03d6262b148d4e4bae7b9d5f3c9c9018b4d922db69a58399724af38e693e24c37f304b5b8824dbd3661b3c9c39eb48250fd18ab1262c5f796cac3587efe93ed418e555c59f3335af4c9d1d3c8a18ae32b7cf6e3829f89e64805e3b9baa33295f67415e4400519362649a2a4b8d9570f729ce25c9d6e6b533822228201535829946c314b5aa5284c878ac7b0964f280024072992247d75fffcc4b31b8527de6ef93d5fb25ba2f0fdd2a3753299185d288c5223995b2d57a70814cfc6e8191f4e6c3fa14f1c1dfc3ddbc560f1724f9862887dd92739fa4f9d602cc95a576a0e4e7819ad84cda9dc52d71c9b48f0bb8b96951ef4a4736822e9c684ee36933e939709538c716d23ccee5208136e922429a1c265bbd4e5b8849d37a6e76a7da57a23222219c86109357649628d86f020191772542231aa53ee128ffdd721420e4aa49faa6b7669ebde24083926614e269f681dfaaec30824292303392461d20b7eb949aa50aa03492331418e4818a531d3fa3266caa91c9050e4845ded486790e311c9e935eb976b5c474768242087233c7945e3c46062703d0a391ae14d49e273b27c962c23de984bbc8b551a4ae54598f249954a2e8dcd495184257476d46f0c0df32622d16ece9327c9d01444046751bda17e94408e4378577662509bf29bd110578e3d93a3618e42f0167e5359fb84f8af4fb3ab6bcaee7910e5143266c959c5f27604816dea4cf23d26e58fc911883b8949b25d4d27db09fb1866e400049b367fe57c6594918cf1c3004948ce67629e2499b82f1e128c172e2a85b48c84057530c011ac746d3691e9fcc28911124deea63374bca7b508e598a149efd55e4dce0044b0e494b34982cca94589c7300c6e7d5752b6a6931e1428050f6158ddebbe71a354873e18b5c9e6f961ce1fce031f65f81969a8c00a3c80d10965c2fc7a8a9dcffd42b5132c4b7c5aa2c417f89944a75abca063f5e24e15c3a69b31bfa0e1c18b4c0ae9a541db63f2985db496c33e9ce749db0e70c0071eba40bc2bbe89279a0b3e3479b4f11739d9010e7a7ce265f4a0000558100237f0c0c51e5bf9f2b57e63bfb760aa2ec5ac4ca5296e83f6e6618bc23c9c14c6c39a5ce95adcfb316dcc9f112ed28888488f1af0a085791bbe9652acb7f6b3f8ec92744c668e8888c480872c2c297864ed89b12809953c7cda764c65241e04880dcc2003063c6061da05cde37bbfa2d0e17259ce2b155676c52a121df16bd28a572ca4d27c7bd2342b8e177d92d03e7ab25a3c5661d558af77accd5a29aa28ca82492789e6c13b4ac18f2040121ea9305bd2fa94a316ea5378a082cc2785889929b724798a742e83e895679362e7043c4cd1f99f14d7744e92c49412f028c5c13b87bc546b0a7890c2b09c5c4b925ceb67192ce0318a74d6efc48b16e463c54314e8c6b8d1dc4fde107e284a29e9b7af696aca37280c6e65728e316adcea7ca2f91825d77f33a85c3c3c71f449aa7f873c3ae1b5f84eb895eecb56041e9c68bbe64b8a9591a0a1032f234143071bc0018f4ddc953cba790ce21a0f4d6cb697d9534a77fbf68888080acae09109c3d87ec7545c860ef6e081092f4ff3ef7e8ea5bb59018f4be049ce2ed9b721621191e4c7064444921f8e3c2c618a48cfb1f3b77ee9088f4a9c52f2fd9996b3d9661e94784bfe8edb966f3ec6e7318937f3523ef788fbb61de02109f3aad42a3e2ce6d79491e080472454fd547234314d6b89360f481c2a661ebe922421b50d783ce2e4bd494d7fdaf7f32309303c1c614656dc901293feeb22221ae0d10872fd6eabd7deb26c466452f29cc9fe93c58b1671cede70ba6e9e53a5085d3f45973c9fe2560a8f44ace1b76d3ea34949d68c50e0fd876bc043c003119694b26fb3436a1cf3108cda788aea3c0f435c9e755fbbd7fdbdf12844ff490e91edccb0241202bf247b39e7247f09161e83a8dd4acc79622ff4f43c04f16670d168521acbea7804e2fe9610f70b2556ecdc0c3236073e584484072074d5a041ca3e4687cac81fb89462c5ce704f61353cfc704c32d2d773d61f551e7d386a53563473d74f2f0f3e1cec83e668bf9bc71e0e7149455cff6292e4f5a0448e985c92f4b9269e07afca4ef8d49d3f7742021e782849a2749f749736647d8753ca4e2f699ad33bda81f4b4f694e1c2a30ee78e95fd7c729e685278d081b7fbf46bf5caab180478cc41577f8d79b525efcba10e67b2b9751cfcd0b313d22439ae091cb029c9c3447d4d55df9054d94bca54dd607cf16cbaa627a5b6c1d0d997254afde2c986d2e5c9a5b9ccc1b53564996afe5316d5f2a8818f9262d0a824da6ed2b05ddeea58f2b5be060d649b701f3ea7249d9c014dd24b9b341b3b496f862da4442f3a5c4ea12fc3971a9de6c49001cb74223195f9c71e439edba492832d06faa4bf15f3e849c3906435975ad55ae382c1e05d929463af98e07ee136e1c3f49e78819293f3af4e0cd5245da8adfc4349a25c602f4df95aa9664fb76065df94a1452dd815b38d59f4cffab2d05ed818dabb93760e0be62b9363c89c5f614d8bcbaf5421bdb9154c318728f1afccae79150c9725d6c9c4509939155ad3ace9a88f3e954fc1ece4314e27974277bff66a278cf5517034465cc7f2bdbda150dc94502577d1357d42257c7b9a984453ef84773b2e7bcae136be26e4a9c2a2b38afbc530e1dc714343a96d892fe110f17d1a53c241b5e593863a0966ceaa26af3412eec93131d453defc1f41df1e0d2a5e266f845f63f4a6db7914e17ced9bf5a6d5e2e641845bb3c74cf1ee4eae876132cdefd8679772164665d1297abe2c266583a107c912e42401c6d253b133a7c9e9fa0b634b8c75ee1de3555f90a31627f5f3fa077b71c99e1dee355ed4513585cf10311ddb0527556dccf36fc93eba404ed0ca984bde1c4f2e36f10f2755258929830b3e75852679e25bac1f397d524c985fd816b665779cfb88320bd7c26b69352997450ba43b9f099ec349a6cf2249f7d89c2257f496c51ed3668a65ca3ee958944b9a79ff1a169a5758bdb994f5db576c5d826812db4336ea0a77ad3b9c099ee2275bc109369d84cf3e7382acb83d65a83e49b8f66f15a7dcf1b2ea946ce5a8e2cce3aff1747ee3a9e8b3b2797a8e37372accd615fc63730a3f097dff1b53fc96ad95b1346ac894c2935e4f4e5249cc9d14c7a5cc6cf796a96414644e9bb4dedf1c912896b034ea256543c1b9540ee182c22a0fef9997a4b0fe13961021259b30efb1f64497c49eb314dc737c3bb17d25b1a24a38818999c4f25c37c14d6870d998ee3daa092a53f87c5666c213ee52478d63ab494c50f115cd37599e944c2e81995ad8d82cb713134b5c1a53e70953492c4c2a816fa6a8923a7fa52da184d17aae3d3cc924acf866c2e7c6d968259248b828a7bd1dbc629544a214c5b4356f98852881c4e9b3c3d6f343e32579c479ad43760e558249491c714992c8ec6876664ad288feab4c537891dc9f11c5dd7d5459592ef945b82ef9c1a39820db2bc2e9b0599df5c2e47c22b23cffcf318f082eaa93e5d12477d00f910693d64ef4114b6143f45d95f37c2f4f302944a9844eb9bd2666af84d8375a32e9533ab9741064d068db252b51828228eea6eb92f1fb140c44995f92e42702a28c7d526eeba656ef0fc7d58d3639e927c9a37e3086e6944e4ab48b39da8752c8145af163a129e5831fce375b2add43d1ae715275bc4549f550f0d4896e4b5dfae7218dc88b131e65dde3a16abb5fafca517abfc3e92a5253743b64f919b3c22495933a30321e1bf33c9ec4743865bff98dc7dc53cea1ccfa0d4bea52ad1c8c29ae899d581cf2b89649f02ce14057ba13bb6ec5ef936f48d2cdb9169d74839a73b1e2d59caf26dbd05e66f6932b9de529d9806a051337c65d8bf935606fdaf1e29d901557439b7df66e3f2cd54e439227fb77c74fa6180d49e9b35c48545e74cf605c0e65bbef51c935c39aea92ac9a512d4aca90d89f4dcaea7176563270f2d58b56fb5a9b632827df3f31c978124a316042ae499bc478756218e8b5fcb37a8260286627d1fb84bff31cfc82993cc9619b553c58d00b7b4a29ef27f92eb8b21f374d997c1de78227e47b7e5e0c7bf12dbce6d983c9e95e096be1338ba9e07116ccf338f9a931f99260e170797165df83977a854ede5bd792c4c84bada04b6aba5adead18ad02726fb2e5db14fd2515ee7acb65625bbcf2a6406aced5a999140ef73497648fb9b8a250d8a731ddda24a5eaa0f04875104dbd69b3b92798f42fe59274d173e69c60b23f5bfde89a80a70bb2da6f41f5724c70f7b563ab7c72b3dc12e83bc132c7e83af62b2151353e2dc5e46d3f09867af95c7298389723a15815de363f82c133272977ac19d1087e45d5467ebda67011123627d3af9c3dc40520422edd31f9591b466995275f2d877cd68491e49673ca923eada8168cac3f362f7e88aece8091a51426a5e4999ec4ec17c52ce127e3ed6bcccc1747a7bb4fcf7a51f0963e170f1a4e0e2f7e493bd1dbbf525ab60bbafda362c911e619d3c591d9b2c2d88a5ac672518e51375d5b52521f175cf64af2e632b3a0dfc24c3153865f8fbbb52da864a2d5ab5d850cd782d050e298afee569816c6a0ea9e2932ccb2b3383bcd45b6e25497c8a24d616376990b25afb1385690f832fd0eb5c222e9fd779592d4f77c0575629597c7c5acd315a757c54ea12f9a5cb602cf4d214faa7c493f563cf6fb96af9d5594f5f156bd957b324715969860a772f56797930a4fb8b859d3725051b67cf18a29795dca3945736e173e9a8931e4a648f079ff68dd936d97224d3d3e9642a39b2c29d4d01323a2427d4f46c1469974264645415a387965baa7a2190a73f0ef3cff28a62528923cf24db4f38937a5dbf0bbcead95270c935da6a6f324a93a91e07b69d57739bc8613fdba7f74926a137a6be53eb9fb3ba794269293ece1f3fb99b8644bccd4f13f1913d8e4e68e758973bde524e6ff984c5b2259338485f954023b39b7b8b1987ba68441fde6d2633389844e49decffe245fd64842935f4a0ca196a49cc44482fb2417264a875b8981c4aba9dc73a7645b92e61175640cf19d6282891947a826a57c1f45ca3c338d68cf2ee550c9ae2b6618b126693cc87dcc228c490a255ffa2b9bcb2882cafb17aa59b3f2c624820a6ad597a454f13c22ae93cbc28c09e6a93f442b955d2f34f64636c439db9669f2ca3172218c529aefb62f782c2184521fed34c93f26940cc2cb5b226a42ab9a2a08672f63cae431d2c540d86f9a84125c635e1110858e1bd314d5b73b7f48c8d47c9a2a3fb469fd4e73ba856dfa704a72a5d2d928f788f870e757d77429ad2ea23d247e5cab545c0fc55ea6d8a99097fd3cb8991d76a28f87a478b131f97f52fa3b9c314f8b77c94ce47638e6f7c855374d61ae43219e2646534ae1b374387de6c6acab59373b87e28b65097afbb52772787e35dac6e370b8bafc999c9b32091c3ec125aba26db25cdf9028a15e7d49923e9a6e58835898c9b8283db6e19452d6ab1c73d42a366899227f728ee953660d4fe7fc9375f52f4e450c351ccade73ca39bed9a58891062c3f6a2ec1c3bd253968a03a8c6712b39c01b1f3dc147eb2538f6298e19c26899a92bf568c9b11111131ca9067c99673c57fb1b0c9a077bfd5aa948c21073e7c0c400c31b41964f0c00c346c88118643c6ca4ba12c4d3b2ba30c3242700331c060a8310b16ebee9953231110e30b6278014f0d1d4d88c8ed9bbb70bedc2f612bc74e192ee38c1c7c200d0c0001929840052222692c10c4e00261c1b635bc05a24f52ab4a92f1cf820f708003cec9f3400c2d7c56d933d56d23222239c8021f2265a2cd57979efc0f1f41122cd89bb15212770ba2962bd47772fc93db6ccefc206858215963fa9dc538b1a902de1d0d8dc3a894cee2a1c1a1482c1007c481300014b23c2b004313082040541e0c0623b168246aeb1e140000562c1c463e202024181220121009c3c16020100c85016130181408878381e06a9e86b1a0f321382943932685b316d3b89deeea1e35b62da4872d44e9014be98d0520430115105ce06db4bed536c8ef4910ab4e10f1e807afad1fc2607b13e892d5f4104481b8cc3551e1241a12bda36798d7fd1fc98b9f0f2a575d9ddbaa20c420554b99f463949f5792a651368dbc69eabbe8b8c571dfb1c096859c1aec77036ee11c2ec459637e885c46309546ccd52ce75b2cde47d7d988b93bb1b0a224b305ecc8b1faa84cd0e98b79e108d649bec69b7a51dd360b737bcc66811ae0f7786bc828c1d6b20f56f290018c23b58b71976022a6f09155d347e34c17ceec6bb04da2986986cd07e154aa9b6491bca55797a74f50560c8e1f4777f7d617b082f92d223b3a86ce6793c9959516497acc9a095c481e9d8e6351b6ea75bf0bbdf4c511a70900e9b93fe82a165726269eb3dd43ad46ff6cae6913edc19d5598b95b83c68725e6d2264181cb78d2e57af7f017e37297be88babd721615899b3ce61881211bd13f7df66d7f9b7243d59b296174d39fd26509917f1501ae8c1b4039179cd18194a05bda0084a0e023954fb6601b16c0fdb905ba617ec722307d9d2f13d253501de36613da5a05e5af05579f1b2f49ff96f0ab46c3e9edda2b381b7a79f265248fb807dff8148db979409dc2a20538c69534978162f027a60c3d6d472c4352925ec47e576b94ac36bce049efcb0a16346bf070738a71d0ab9a87671a571550b3b4a7fd675a687c71855258513a29030cd57604df50085341e823d93d5d34bf06b8543ab6cccca759dd3ae0b78885a22c6bf25efaf0a9e49ca416f2dc6a9773d9b03396714495d0f46d8991a6fc99be59db4afa23e290d272a56571bc146da35eca8b612fcb2e24cebb009b95355bbb8a96adb2791e881150586f0da9c94e4b4c85dc4bc7adb08d114cc5f58f82eb33f413d6cb32daba5fca832f220df42037a56c182ef4abeae3b846ca920aa909c014b78aabb2dbc61c9688696c40c8e523f9d3a85ea0bfe8f4b9cefda2843fb27efaee86f98bc6a3eaba266256ad582716d8f7bfdf9c5ea8a94f51f1d690de0d68f14d8c4948ed510a15859d2d01a75fc559e1460d9cd135ad882b3c765159cca94096101fcd90a732e90b81bd119750fa50cedaccd46252e2b808e5ce76a65fdf3fb2573da98fd03bcec835eacffdaa68ef40a1b325c3b42e6f369830fc39b98d61438f4b627db962ace7d92086f46bc1797b03aae835cea9ba583294c643d7a22613fe32e9f2bc76e1872534c4aafe6178b11a20b680c6b5b3f2762cceaca53745b53368b9a35ac0ce7661cd31bed32c0146d924f897e26ab3ec257d4ea3364ecf05b2dbf4cd99d54473eb772d7df3ee3eddf46fa7651afc05b3cace17d57da7abafcb5e22ce588800d47941fa79ac12b13918179d040685ea45b224e4601846591a6c17dbbd0ad001b481cd857aef365641847a5df5321dcf2a8f722a36031fb8af63fd7e68dfa77edd587d3ad6adb10dbfd035f0d61d9201298689eef14ace8c635455913a5c16b767e754f3965447cc5325d4c1911420f81a62e44949928e1072047af35fef3b16870c81a2c0a859a47babf3e508f5d67033ed4ef970c19f276693f47cb5bda9c1e7d5765ce1dfa9f5abd27fd3fa75b5f3690c9ab48a75336a3deccb718a827394c4164faead868fb54b6199a5341cc0eb567b921c643bc71eaf6fbf5aec56ce3ebb59ecf2d2ef3b276ec267950c8f86e74d72aec633d34feb3db4a292590b116d11bbd5f2b4b37a567c5f7c5443b119fbd07d9deaf5637b3ef3df39e41a5f1eeeac0566c9ce75db98092c41fdccbaef350c715f63e76ba8be27c5cc3395364086ae92a55bb2fb9cd23d8fd570958772f5f1fb4c36c898e2772bbdb42fb5e616dfc0f3b67aa1470b48652e225ac41195ae5f26e90e4052268c569b058bc60175694bf3e0577874ae6a4e23568b6d717530ccf5c518d7f3277de289225dbce9886a39a5066cc51c99832cf1ea78aaa03a2cd5d28c073d39f9fe01ef0737e01901f1891ce3a7ecc15e0bbde6fbbf90ed34a541cb15222d6b954844421564a8c7d9e159b1b0fe035cb5bbc1b427fb8d768afa69f441022c976b55a1b37c766375226fef68be7cbd99652cbb534a0457123dcf9cc387b2c576d051e68e4cf32a43f6755832c8158272b1e558f053b0120840a3d8042fc644a71454202f1a3858ea7013ce79dd9a9b2e7f2f47e6fd2f1f810f328a805d44aa01b32718c610b7aea189bc4216fb308827a762cfb482e3e3567cc3116b9d8a09f7c29e06c82b86f71b75ae95508781a95b124c1f9c2aabd8a2ab96f64bc5044245c62cad0dfe9b07b9cc2da1914eb565d8e49639be1ec34a492577b4cf1756c60fa539da8ba06e25f5e247c7a02528e1e72e6c0426aa7aed46429ff6073571d4c9fb3846b50e711f02bcb2fc1d7290c6a8ebe56c99b338c06c0907ecc62af3b24abb4817e5bb7662e331e80c57fe53863835f579de8a09172b4e28c058927d3655f7fdd7ffe62983496c2af84250ba9ddc33200a914129b50bf4b1661796750d123086b10593284c6d7158b130d0c2aa6500448b263319364d8429051a64dac2218c281397563f807c5be4609c352029a72e18d42236cd4a58b78ffbe6e995c95bb56c41e600a3325ea8f97f6a4130f1ab56ef3d0e9f0d721d3d52b48f54168bb63c22c7fc4d4d64fe2e118f7ee66c1a164f6cc5dce2787bb83b83a54a3056841736dd420117c17418ebadc8462a71f21f6b0671f2ebca612f5f53e831ed58fddd9ab8167d2f46e9dc238c784b01d9ea59ec0b1db9732a2ac882a0375eb73136d3d144bd7cc8a21bac4491381fcb55e487d47b677fe1632cad7d315826b9f61e9f7fc7c0559c7156374d1eb92ddfad936baa42782325f5dbc31502d17453c54e6f53e64bce18b85065b8e0b99f9710d64e1d5216c8629da440a4b35eeed7c13ffc6b2cdd04056f6874bdb24e756847c9264ec68f86f27ca62e937a9d2c8832e0d4a40bfca4a1356f8d5725f7ebdcbba65704560ab35f179997e2c3221707509c387389802a31ae650e845f937339e909ae2f156bb2177109a51ae0fdecb61a3e8edc2b7e3c51f1c7881293c0c852be80631470acc57ad2256dd5b217ad8691ff58945c0c93316dc1f184a114372d9f84df4d2d38d99a2175139f6c73f9d20b01fea09c4bfb9dce858c913449279b126c48749988a4681033a0cd06dbe202a03c3d3e29bdbad81ab963d6ef2a48e9ebd53ddf0b8e673d6925624c56f061843f2c67f5c803f4fc83f99f032bd44d4f4baa1904e671af07e7bc689e3f5de2b675da8132e2e89399aca60782dcf6aaedfcfcecd87c9b09dcb135ec426b82e642d56a0d30aa7431cf4ef6eaf680ebf1ee68cfa54b66396596b86759009480083bb66507864e93ab45205e5a1616711d16004db07ea757c3e200e19b4aca5104301d4146ee8274603f061fdb2d6cb39942533a50a4faf3e32671914228f69bd301881fe9c676293af18741e33611b928d82fdfea88b043de9b1ed6a6d2cc7162178b13a8fefdf1c4b7cd077547878993299a873e1fba144ea00f6c34df5b28d24b92141df6e0ebb7e044ed92a3a1b44f267a26e780e9ccb3350ffa4371261572335a185e0a4b9c37a15e88ec422e0c3839e44a80f5a47e8c2fbe37f95aa1f06d217a6db2fa5008162e953d49b977b21be60bbf8a7924e4cee9a270532f26544d4ec8c672f5f952ba416e72207701edf7bdc39fa0610ec3a1558f54295e7db6c5af7beb6b58714d94d78f0e49df704e6d8d3499004b8a5fd045da371f91b158da06ecac64dcbe48327019fcd90ad3c73c3b056b8a53a85e0f345d7867b5e9e84e6b932806650e2a5247396f03ea0c8ae89bc4952f40cdfff5a8b1075191c72b13995ec82da97df58fea95e43c46bce9a64a363dd3758455ea51ed2cf76f34c6a69da0fadb8f8a966322b462eca1aa9333016592d77ec9073c85293c36b0ddd3a1852574e8fcad0c2e468a59c2ea622a359fc91071c63eb57073a91e2cc967f046ed7799cb26803ed3a58a341bc7cd7dcb1baa24b8cce8dd91a69e4978a16e89e06f7213c46053e588a62c03e3cab02778e8be2950fcd7c87e881580208d55277884d16c53c89f154a1d1e3f18bad42d3490d33063dca7e639eaba30d4a2a117c7ad038b9884ae77f6e62fef21c1bee81f2380821ca0d3ef188fd5a42459e526f2a52e61c59af186272f1b07d2c4c529c7412c2ceb6b6c25b3f6d66537db56b2c784b0c4ebd5f00e009eb3b54e027e5254095259bf0892a0113c36541aa89c33fdebfdc69865545307478cf349d4c5b31eb0252b143f8de0d622812d71b6820bc842fea0322b630794639c9b6dec7ae70e0f9fe7b901e59de24311d74939d52626b896e4c7698bddb2a496593129f15913927068a74beab69d42d248d0c2aef82d8a62b95a5cf085444c1db33e2dbb170d9024de7eb462772beb02a96800c22a6d56ff1172336520630d6fb9fd4b17fff217b8f60a19f5f5f375b241f7553ddc6c6466a84c710cc502778818e508828763ce867e0a8b514027f2e8376e3c1c9e7739889fb76e643cbf6326d2cc6a8d8a2d1954fcd49a803184aedd1fec8701595c94c6f2ba8140f5916e65a0047e59d7fc76cfeb3de3d31ff1d2a681c074978a3a8a0be88d13abe73d7d34bfd9f0e932707f6d3b751c5dd773ab65caf6ae34af8f47b69b6dc6f0ecd883c72eb25f31dfd6c17a3fa44034567d611870f3ae94177aaedbe0839fc1c6e0e6b6de1ce24f0cf067cbe6d1418f41b904444abb2474c844e1269f8306765d1ebbc2b7251f03426180d8894f0a94f90cf7789eaf109da85349b89b0542171878c36c00ff420dbf1d1749715510a6cdb3017517b8538bd7d63155c3cb98814970782cf8427a174c777634c8dc43715003467d00909a65d40affd57481e7064bbbf592f1d92bef2ec0fe8dbfbf92baa51684eee88f24cb6aa082755902e0810838bc00d5a8cdb20044f637d0baf132f5b1be80ff09ca239322a1506d4e489768c93e83339d34ee3674d23a9eee2b16ac050209afcefa953a1603048d4c25f46325a08ff610c3722209c55998b628cbf2d71a505248fa72b93a21fc6dca31496f2426d7c53301af819a7e2d6cee1f23c98346d2d9aa6156145a2c9a8e3922c99edbcdcf3582cb506decac35b7468432258e7c811c9ae17014dba2d0e747c73fbeba8f2942691ab52b9330d9729ec2391657cb12f0c77238029502d13364c89ce974f1b292072d80cc34bf6dc989d785109d0e1b7fe8e2f06785233f94ff3ddff9a4b0b81d6ccd11ceac07d54ab2aa240fa610a886567b2e2b5a5e6f35dd4c34eb19e39638fa86e8a1c378ae83e3bfddc5031ddac03fd01dc649aaeaee22a86b63ea433462a3e0379cb66fa294526098efd0cd0818d0927cfd7ebe4205d2b660ae719af7d2d819ad4081f1fa1999b71bbe8d65af00d71b94fdcb307636c77683655ad028507c0f03980055081715124f93e14ebac08cd417f161daa2c33626673ee936d893d48f48c23463a70ae552aa017b20074861be9d11a30754113b28c18c7abe4fd34f0d46435a73f9c1169e9b2241a80fb50cec0caf24c1402d04ae3f3152719f560306d322e8e9ea4eb22573bf0e3946409aa4b3c55a18a606f6b69e3a61894ef9354358ba52778f690250fe7e9611c9117dc76f4defa10e31f4d179f61391110518cb5cba4d0edbc5bc14bb5d98eae08d84c3bb552f99ac355e682cb6d64b01944ae041419dbe72f5d06a0ce3d9f3d4f75ca8665e90325473b2557982929629a1393398a381f280bc6903d56c30766ccb036afb6d20d8eb0bac41b6aaf009386e3984915570e515e5420d49fc5b0323977449180e4c56a2007bbd6b065e6eb1563406c29938564a3ec6d5c0b0cefd6b1cabe652f02c01a2a29392c97dabe98e8caf217d09f109dda2d646e1d5dce4276b6f304794282be5b8e4b058e6838a5319876b89436030ded2dbd89e8608269d4812cffb0358cc45bd600a2c5852d0e7cb1195b615deb7c5eb5bfb03d13b17d7045cbdcffe85921a4215b24348fe7fb1fa718429465e8963eb9a4327012ea7d27da92b54ded76397bd0fe2611632bb3d1e700ac02cd06d3a0fcb13137b0571f868cae00f636010f9604dc06e69c5cc3ecd3d5e0141dcb7db708e0bb55757c9d909627eafd0cf56b1b918c9eb0050b0cbc92ca461eb3bf4339bd03949010a88c5bb4bfed7943a0f0df2e9d2f4bc79f5cbd35a8cdaeceb4b3215107ae6a77cfddb0b36af22d4ec1cb17ef5a1adfe07bd7a2aa2ecdd60fc186268361280adabf0d6c24df43423add2e922b6a68de1b4246d940d5bc24ad2db909756e24b522b84ad23b994e98646f5d66d04ffe9d8e5fdc9231d1129621f6c069e90f67ea86481b77258b1218216dba4dcb2441141fb61216e1da3586d0a81430233ed55f5b416148b493e07e5ae5ff7352fe3efab7898c2815bba205e7c558033294750245ecdbb64e75dfc3593ac25c0150c40517ea9f4ebc23bfc5484b63edd4fb99c9a5cdfeb3983ada01baad3f003255b3e866e9d3755a580f0c0d80b3901070e7b06f736712b4ac494e7357194a5000e5baa07ba3bfc80ae082a923975742e8e35ce886409a07dc8e9f542346dc530c2563828806d6126e210d9bf8aa8fe9ac58ad34599025532ab51626f194931fb30542d9013626932613f8d2b2257f4cd228648ae5814b46b510aeeb8c0f4fb22d43a54c1ba99aad0cfd2c43524b2165e70e2c2e926aba958fa0abd395999eee886a23b1bf76b63aa77ec75de0df77e5315390304b5201a55b1e1e8236fde6da7eac4e9c7ad41db2e81ea380551789fbee867c2970b2952b7a060d44d15e717e0f6a557500d7ea60ed86662e409fff19042287fc0e8732f280161587972d33f8142d4d912f373a727c27565706002e9ee41344c0e71a8f127672dc5074d3b8be0c14c3b6f045e714f5ff4115a50734ebe7672a3c5f006c0630277a2ac1488f55a60a176de723deb14b51ad1f8ae2266234b3e81df4d714d17733aedb18586ec43810b0e59546a3ee7cb93da21966aa03db07dd1d2563eae1761f9e172d78fc56886cf711aff27407c64a59b72fc79f824cfb5f166ba8ed29b9d0a9a14e1c0c803129b69560356a52642b39417882fda1f02c9d3c8e5702c199d24339bac1f9e238604998820f07d28786d0f719464a6b8f18ceed641bc20f6c7a2d478bf3b387928b6bdf86a226f25f3458d8a2b72555d3c53086253f7fa87e6117b680d91f7386993d6e46cc73c6cf56edeb892856afcadcae80eec15a5155e2f4a3dd31ac822d6b990132f38e908d81273ebe6b26fae17b46fe29eb1dc4d73c159c23d3f83ecf44e99f1a4ca0fc12e620fba7b52765efa77f1524f60f5c6be2f1a6adfe12da3efcb06c8b6e43fc907ce6df7a3edda3c0bc831776ddf2a08b0710641fd99895caaab3e6abc3716f86ab52651e97cedfa3909d39288baef5fee2e59a370b47c2f434faef9ef0166028271cfb7a946e945e80b395fa413ba35393372c6df2968269bac0c197bab01d6b326d33e10ed0cb267d9ea6b042fc02307ece29b3c67802df619eee6c60ce7c0a2a49860306117595dd40bfb12dc9803b0e0497acc951d605404879ea263d02c57cb63926029bb0a1238b12b3ee2e99adfa7255a887fb9afc9443fb4e36d4cb7132b26ec02ed625832a9aa6d172c9f9f28d0aef830c35cb8c7a94a5c17df4db8df653e7c0819a22867d8366b348f4d7aba6e835272ff96af12e2d174bd189a39b6c41e2f5eea66d0ae8a4e238f81209e18a22124726d6b5e35ebe5576ba45ba154f565367cf6cc5627084787d2cc5e8064c6619f11b5fc0477ba02539f669a49080c96cc8a86fb71bc2f880a19242c6197c9d31d7f603847a5ea3b6056519a8a94fa6b41bc3af71712f81248918a9181426249aa5f3502235a2fc7e2643f414e091c3143a8679efa0c795358b9e53d86331db70f8db8b1489114169d8e23dfb5808af84a0f3b21f407a8a0614bc6bb8fc894bfda2ae89cbb7efeb16399d51b469e9ade7179b6dd05d987274d72a653b3b49997c2a073b5f2a9e834381f78ad8bf3cd41f3efe63d59216909f9f986fee309ddb21a17dfafce3cfe12e236b63fc66a0f8cfe4d23c8edacff2106174ef373022d4f20053e782910c3c6c270f1d6861e6dfce10a5ca23cfc22d06b4e7a5404c806313475baf222bc4a50008c0f0bc7b469f9cc0799f72b5fd15af7eeffb9830e571449d06d937ac1f1349196630540f105943ecc68aadb354624759257f9e0b0703981e58717be48fe5248393aa7449086f3522db55c97ca934a3e6de72e9d0c9a3628e808dabd70033f61ea619efcdb841b9ec4e9e3f0c7268611aef43b0cbec896dd7f10807110a8f2f3cf439e56948cacfe42be06851054371d809897fe1e695d941d5ad4a2b78f0bfd26a108f2ec975c05d7d61cde0521d579a7a2574ad1335a8bdd0de184d903d09aff8627410f081e52de49c9cdb15770ea7f98ab53773193daba1cf8db4383ad97158732c9d0285d34dc2ef0b1913e94cf8281561c21e245aee6dc6fe989abf390db4a096be5e64e31453d519e4372b13d990fd7435dc97953debdc7930ee5eda23ed4c9d165e0b9dc5b2304be7df81ef164693c0c2a94af274f62d928b1802ac587937ca735f21f7073cc673e0ec6b7357f746fe5902c8036e025bf390c73243370eced38d75a5e6adbd2a21464f41ca2d2a9b2c99d08c89fa251ad7cd437e2e528cce8a903859e0fac35076b7ff084caabac03bf83ecb975bed5d03a1971d1c7b4ae3a50b28e10b293d58d1da14bf1476075750b4833579acb027effadf2cb6933163f57b963a8abdf9d2b6e7f47a3c5a5e51f04841db0bf5b302aa894d68c87a7843c873f49869f8f4cd768e0c5255f6b38199df465cbe281b05f5b4614e630896e4ebf41f11aa055fb56cf4a51db8a8acd2a5e46a3d3e9009fb9c08b33284c05ec54f40f571bd9796dc2b83e06a99356abcb7109109a8b64abfdf8aed6e9e6f34f72118ced25103aaf3cfd21e6a0002223e24288df8068892a0e809f70d68dec7f7566f2fcd5d56bfc032c442554baf2274a60e363541c855eab1dd56641eb81148779a0e90e6ffa068d20ee58c5899476d8b19379e7299b9ef7568c5ae1b0020c2c683688bfcc92c13550522c4d8a1dd44fdfab2ad30306d14129e89be90952e5ca4cc8932cf0ba224af7e1554a0b55af4e2450a7d2f02f957611f8c8e06c6e63eb5f8252fa32fd56b5969b2b13fdc09e246425a3bb20b01659d7743cded222fd81af44d55292982f5dce496391782b5a70054963712025c495a7cf91629ce06d99fd448977c2f78313684c6cad5312e0ccacca6ced253846d58726875cf4d729c651c9818e5b57fd2299bde6428c432dcc1da190731161a7afe59c329d0d2cf2d0decc72533b2224d8928d68a465c557a0561496f3d1185f0643b0e883124a571cb3591f189e3a613f02f05df76dfda008c5138a8f264da2a6c57fe0df0b411209ed8e5b7e2c8c5811f0dc7fdfea97d5f6e01d39a633c70e662ee61b9259c707565618a7797e8e87c08eeddc48d479e3110a6921072a9a417b8093298958d54356de3716091ed587515ac3b921eba5f880c4001dfee51a01361976578458b5555d996506afe40a2c82ec82d92c49793ebc2d3449b87226b155017c801d0f01c01c2eef4af242595cdfc1ab37ed745c3253cb1178803cf31c11da30e5ff1abfddc146b0d368a2a500070ac5d9f12c7f8af87fef7ee2b127f9cb4ed649f707e30c72190c15dd6ecfcfb0dc50069c6f489417717fd3c563f0c4bf567d3a5e76f5b76a3727bef7d373af418fd98955b14b472dfc89c39e7ce8d1172df58383ecb7c133abaf6b408119ee703c02bebc1c4268e2e1202ae61c6c1a1d29f938d39d9450ee2e9f3f2d5d1baeeb5cd7317fe9b18fa7405a0bb30bf6851e9fc4aa68b965b8e4a6a3bd84737862d1ea725023d285b4ed4b14240260462bc38d59eda7c75484d4a1ef53f29586704c80e7ed07e8e8995d31eeded9b015ea818cda1797d4d40efef13ee1fc2bc14e7712a59f279a8cc5208a6c1943f4f2d807f8c63cb96fc96cab6f3bb91b7d1a451ee230c085b6ce9f6c4e1b70e456344b4785b21a19849ccf186ea3849988a8d01f98c157a45c7c2dc8012d09119148af7396427c3e554044c5a3d5191fcdc244c79a0242d2d7b8a695027df393d19074db339ebbd4b9ec56d2bb7904e62b467ff107a9f1aff03e8ec9e8d61d95d308a5efb8eb5b99effeef53a06d8594a4683f980f8fbe5abcfaa15beb49d26e42ceca45966548dec1b84f5edc4388e2e672123c09852bb80c4c182d1ba4d4324675de4422dd2ee5a03c881e6b7d16e9e5b99b2f2d035424fe75fa511b7d4ea4505fc3722cb19247c9cce9483252841e173b89030c0040ea1cdd74f4d12ba2703e2f9c48973fb4c70dd02e17e1979b9b1a9fea555265fc07ed863ef26a9201f128ef37c90f622b680599b0b98a335a91082c3e445eac51b0c61938c59a7ba2eb0082e12efc39326d6bddd467a7b2ad00ab5641352684c2fd7dd3a79184b98bd8698c54e7006662c570d4aa86598698dd9bc394d370799f784fa53171b0d71ecaaee6be62a6919da2c4dcb46b5437bd77c60fb6c6577962554f859fa9a3a1f33297db5a8c6abdac2e702c55ea8516d312ebfe61c1d3b6d5325c76cb3347a43ed9c479c53e25837c912fd690a0893d213bddd91b0baad71038c34d2e308a5c2b91659e9141a839814f0aca6353beb9779fb4e8347699b0d139964f2bc787a0b03127e5c0efcf3cd87f6c5b942e15f5482623beb44f34e913f15aba358d1787bdb2a8cbca3edd34e895b738a379a5757a1c485da3f191a7e286aeccb56a22683aefda49b078f884e762ba90c6de17706a6771822d6225421da829f976f5160cdc75ce42dc1a926290bfd84105e02334a1b4ad312e25e53c30efbb9a433da7414f022f71e4fcc5fa1043e4d6115393a262550c976f9ffc4217038927d21cd0dcdbfc69a88e6ba48d110512ada2f6d0cf5141e4a02fbb6cdcf2d7dbcab105f5e576c00928974defec736369b7331ab4bfe5828407ebb76b4e3bf289bde93d171358508270ab432848fb9da5b854d2808af650ee2ecc3b2b35aa839cd14b95424bd7125f146dfa12167701fda193317c718d1e82b4ab84eeb40e96b35c141cede4e96292f037121b85826f1b08d31ebda52e7cea07fc217b8e073415a81a892f051eaf2e07caa08787cdf891a40d9bbdf18082ca1edb404e67d2b311acb72260c63679a7cc5e81385359aaff1e94009d45c81f3dcb8ebda8f38e223950f8a9f4a296abd26ba2d4c45f0fdda50b3df123b8d96bbddea882c37d043ddf8bf89ec7f48b2812f2d1136e2f100b87f279991f257195e319d4fdb0f0726b59459f330a33935417f1a685945a9173c25c139f6796890cb423b3674688a0f5d8abd105391b2cd4ae378ffa9e84257cc56e114711003c5d4efce54ec91a2a785dde35821723422988ec588c5226ecb819ee808091ce1a442ff17e748c3b353bb55d13fc28a3740964990d0e38eee0983106d9a269e5d194bfc5ec3045a1af626748a3437904c19015d6934be8c5aa5cf9a99b2c14f59e2b3da5c2464a976ff7a64e422a2890987ee09dbf9dad1121dcab8fae93258fa12d1d34a87faaa8cf9141f54e152ec4a30ec83006ed462c903f384be5843c8a91e807fb63411d0eacaad772f5c87afe1409885894047dc1ba7d102040b1bb96bb991871c5da472f5c0ca78544fbefb0e0d8ac0b68cd9fc3a263bcce26a1bfa43e5042accf070ba83870e78afbc36cc0178ec42a30d470212452e3c20bc08c42fd3e79ae7d0eb97894ad2495f8ea086705fc58fb29d29146289f0ac3237fc1bb39f98f12d71bd99ad2b6c6829f961718af78377b4ae9d3d9dd93b793f98d0dd94458971869c5ed51d31cc4ff8ec2bd65c84d337bcc507e69199090dc3e1318ba512974117fe26ca53834484ae7ca235be57a46752ec147d90b4381be448781dcd2b31f7ee96fdd5b525b0cab02d56a3e86cf4f48d1d2a9edff5960572c3c1b751f6798c0d97c05839479d7fac9966b5a32f094970b90f31a4d58915fa96c4715f01b616b273d45f945f2af5054843e9772a64a2511911aa45c91b03499b3adec69807445a1e12637282fe9ee70923b4a7bea50a2510a272850d7d6adc3038bd5bfc612ddbe61003b0280aaa296851a3dc856c28beebfd79e01c0472d30c0b0094331a8388a87f5772edb6dcd7a8d7659200e10df4a5d48830bb7d05358dc4b5a6d692afb71dafc5b5050c85a3f9d6dcf39e0601c905b36eaa9bbafa5e386b9ae007e6f1063b128a278c72bb3e0d13a42150d1a643fc9a26cf38d82e82f9d455bf0fc1684af54d7a907676443355eb31a42710190714d86a22616f0742daff1cfcdc4eb005249eab02873345814df6eb62458183c1ac1e6c3a89f91893f9adfa2a679b4a9b8c2606c198c22c8b15d6b05e509ac0d29c2359162c5bf6893413fd8dffbfdb495ed9f28c43705e32012e5da2d22209f86689407f2a56498d0dffd5e2f3379ec1479bee109cfd313f34d2444b11b0e139cfa5c169db120bf46e11b5ba5a09d758b39f50cf97a593baea00fcb6b12f66e016ae4b78ee1edaab492a76cf3b3307e9b6c62267ceb12591c94a0686dc1a548ddb1cce6610b2c7bdec910a61a571d87859adc19f40d7b7c889aabe87cb115b3ef08df15597ae3cc7c6e91f5fef6509ed26ebe74e6fbaf1016d5b28fe28385dd3cb52836dfc9867643367127d0c038b3d1377e1654548aa1f7b762f6799666ccff9b4d68a8814900beeec9837e8a62c89fba3040ee17ab66d26bf4866f163ee5d92aaeefe94e7d8cdf8f70813a43cb63277e833b6159307851a5016c7cab263e221004f0797fe9eade7ed1eda218c3e1f02d17f1b8bf72f6710421bb2d49af0ebdcc66bb9a536d78bea5034e686c227aed950c24a4c437d35eb38db46388c01541a5ba2453f7070d7e92a69bdee32bb0f561b2c88cb40564402b2129d4e6ee1114453d825c3152c7c07ff256aefd35fe9ebeb1362b4a5f3e36be62c03bdb20ca7c22e8f1c3d6ad8d15f62b38aa79f5252a6f35c28cee211462798bee1399cd71ef0ebcc353190e0018dbe4fa450fc09e92536cf722dae3cceb50e0691b3792e942a40183a1e66baa62bb2fe9e0d8fda3c0ac9217476b9bb72fad3a1999e80d159ffdfc590904d5168ccd2bcd190239fd698780ec45c921ae554c9ed5a24050ffc6df14f8f1fb12538ef4cf3aaa446f511e42ab1fe7f94685e985239246ca51cc46f1cc80c7d48418e2e292396a41ee578c134a716442ee9ce8780eea6e3870ba0b1b1d5e15d6f4e147c80c442233f6f71c54f8e8ee02a0239be34dcbec97ca74f36f4d137c09e02fe7839d8d8bf9dbfaffce28a3cbc983f97653751ffd26ec449831f219c6954280d539c085c132ba24fdbb49ca515e6ae350170622c8c622f0e1d4386dcc235b0bb129211dbda777293e750e3182a85f4da0c0b3ef8a60c488d8902b08e86b63bdc858b3cde2f634c42c6da5bfad9bb65971b6fa240c0602d56dd2d9c65d1b576c0317b09d5f21c60c1d79fb56dbabb4edc6b698dfa4736cdec47df5b6dcdb2666b666e92032c451e573357b44d9191707be01d3d2c43d7fa130345f25d1600df5467fc2d2ab04bb2cf03032b170b859e57c022b5f53b0afaa68f5fd11bd81e6fa8f6a263f5e3d875b69fc2795d7ecfd68c32a65db2c6c930925332988a9159137497e3542953b554892922e351045278d088d7862de46d81675c7096a0392c94e712354e636a6df5cf449775756e8ace752f692511b5d2144dd0d4b447f3900a8977ef518698131513c4c30713ee2c47a6fbee02a53f9ee16626b096497dfebeabeb66c3fe2d588ff330250a914598d20dfad5f9a6b3157341ab5a4cd5cdb59c90769c2a86e7173629541a60b3c7118f4364caa8ed7fbeca00a4418125d980e1ef77c7988173d912574018c01a515015ae9654f3650ae24c901cfcff033fc0c3fc3cff033711f11fabf087d42f021735332bd491553804f49b2256da0528702c06acd750b000000b2521fef04ba04d4046626715f6f3d414a74001831b8e4010d100103aaf098c596924bf6e7cc24a54a16dccd5654f7f4f9eb138b8428d19aaf5b0312b8a1811b9fe3010b4a92c49c623c6be6ccd9a041438cc5f17845afa169af2aa3862bd0904b57393f7cbe8f058f569c243954b4606d52ec30c78a0183072b4e1a3d2324530cb7a4e0b18ac7c259464fc971a62ae3860a1eaab0fa3f336e9c5708cd06182710018e11e4b821c6231586f3ae2cef168d1f04a35d05220840131ea848772643bf899939666ce43845628979bae0618aafd24dea34887abc67f02845656a72ee4aba393ffa82072912bc35df945cee713119638c4146e7b8d18f512c7a177ab36c1b354e20821c37fc218a44ff7431544cd2b9651b346880710211dc7884e224670cd90f1f3ddffe0728344bbf8bd0c814bbf3893e4ccaaf62954992b48287270a636299bab935a5a5824727486f2d490ef331d9e99c287a5434d1040b1695df846aaf6e25979cd4414d60ad67492eff3caf990953d0d4bfbe1126ae9bbcdddb0b19837a094dcaf61534bac9a66e09d33c6ed24fb933eff5e0510993ece13c7d44094e54cac4564d92a4ca63125e4a7b6ecf6dc1f3e721898305fd8c317ba7bbf688c49b1e97c9ea2fff49f280c49db39470827f8f4760192bacb36f6ed5ac2334a9d28cd1ba182f783422a9d5a498b346060fd7070f46545b62d6b9fa2292cef1a44d62ac0873c8edc8141ab5649388d3b4e593a05142878e88ae844ee1ee2fc54c8287583ecb49fb39b64a5d0cf1e6d458d3599ec287856826632bdd4d0841774e4d7e39ea06eb06a1668a964a9a3b00c64310b7cbc7f5f84134cb1488dbd5c42e59bc73a70610c6d1df0e5f7fb96efe439549aa0c156366932c7ed8ede4641932e46a82471f14937d7783e7ec489f0f5ccee2a1f355698c13123cf6b08951299ed7bbe43c2278e8610b6e7782c48496e77958f3cf5a2eb94d755b81071e1893ae3be935dac9dde30ec60ed50db1e36f96b643db274d5f788c9c9f6ce070336e781d28ed99e813f3e692e4d0a1fbdd6cd1f26bffa30c1e73504deaf8ef97c3d34be470a5989864f3d98d593078c481d1dbaafb7c154f1e1f70f0734e1a2696f882c71b0cb96f7d5a75c2698e1b922e55366e4dc1a30d5cf494d2cad53668d058c1830d9ac5fc1a4226e3835482c71a8e7b13736c68aad0c678a8c1e851dbe0f2193c7be391864eb69c72fe7e678ffa030d6a92429574827b8eb939c339a6c4b4daa525ff38dc060e6a6ce161066caf476c335450f994e1faac94e6277d8ef43668d0a0c1830cccdc96bc7ffeff92338682d5d749ee7be11b13c3499a0c5d52f0ac50d50d1c6c19fb08c35125e512bf23d35609860a5af000835e1bf6dd15eaa5ce2f24c45efac73c9eab752f909db26cba2e78a9e7e24ea5f34d9a0e3cb8502c295e56aa8d75cd630b68b4ccb40a3b2945c9430b776a55f579ef9185448bafb9c2e4246e4f36c2a8a1831b5bc36fd4c041468d143cb040bccc796e8d785dcbe30aa906cf99c49c7e58a14f52e85509bf9b6e03c1a30a986852cdc54691cbd90868d0a8f1a0c22e7d9b647de557330b50e03185e432f9723db7d3461f5238442b25393269755751f87373924b9e0a145e8ffba49fc34fe8c3de87137895b8b87cc184b9cfa309497256cc9ee52e554699b069be24f9a75b476e3696c079672a4b622765e84aa8aeadbc2e7892b09ef6d87f2c794cd60712e8e990e1545ef3e8477054d4d75ac34f760f8e8711f892d4932465621a0b9111a7cb4a39a1323a5e71926437394a345e9e6ad0e18a5678a2b525490cd7b1abf740072b928412e5c3fd0995ddb30acf54cbe5ebf3ec2fa40af44f663ca5cc96fa549c26c5ca9cfca9e72bb4810e54a8a9f7c4312d217bcc5314d333db751f961f7698a2f23519cd34be7549ce6000133a4a719bcb49f3d353b92d292ebff93ad0318a46cf2ac6287a6d53768822b1356f787d4f22f293d1118ad54e667366b2d1010a7a6ed3eb7a7ed7f73fb189c1c46a37c790d1f7041d1927c473f892f44eb8599ed22594568a73c29c67d7621bceecddc46bf3a929b49a30fedc4f68fee9707a268a6a61a4bc5cd63dc784153bc6a764fc126634bf8de2294e4e5a428f2b556252fe1faf129f6be7fa5c0e25feac9fd4453a935025634a93caa4b48e24fc78f213a9155172249428b9bc820809c7a44e19db7b44ef92c12a87da11e5e98e0e17ea461c34ab7ecc9ec9d3cc8ce8afa2f53d851791dc51fd4493a02b1f459817523b5abeada913c164e731e1241711e615d1981fe2dfca9a2fbd1a22394ccabb2b16c21013a16653532124c4196d378b6cef576510274136ffab8b4f452a08fb2d443ec67d0b4f209455cdb7613ee99980f844c33b6d93c9b9fd8134593e78949824e9c40f875aa7b534dbedf48136fdec71c345c6c287a2cec97aae96e48a720f666fcc641dc674f37af05737d8e807f370ccfda1b44dc4c3e59f1f932396cec33b589b529d31496515433b1426c4d96cfe8f4b5887d33eaddeb86f3e3974a8a34faaf41e56639d03121fa6521a8fe1bd9343496343956b170763b40b5b7b2a9725070777531893a5f23259ee0d89de79b3b92a99749d1b125736964979f196356d30850f1f63af6c68beddbf2fb69e46cd1a28d97c46befeaf47a386e345776bde0dba9a4983a12a77fc731acf914143a7b9259d669c6cf719aad18dad922709729b194c3b3b6fe265c04a78b994c25946930c768c5bedd4bdf3958d01b1ccf41b24e7245b0c7745ad1e59933050eaaa9b4a0483963263cc5b291734c9172c317b5ecf2f66cf122f383e9f633a29ba4fdf854f93f019e6399ee8295ce8243fabd30adada295b2844b44e36b7b440c6f4349d2bdea45859382dac8d4509160e99b62544fb2fa5ea0abd54fcc9ce29dbd35660a72f9b468f67265a85928da89c581b3f27a9806487bfbbe0714e6e0acc05d1147a518714126c24742c6e4af2af3be88842994af2784f21952aff830e281027ca9af831ef78025a194ff64b9b0018a1c309ca758c5464dc5039273b9ad0c18424d30993f22671d330722c81f8f46f1afb9ada7d184a2854a527d3d42a1dc771818e24984bbc8adbfc31e30619387e031d48487386314f33ff6953560c0a741ce1fd91880cbe69b2f58ea30c0d7418a1a4595749fcf24f5fe236729c5186053a8ab0864afe5152c36db06654a083082531495cde3c5f72ba876066938fb4d8c97c7331cac891810e2198d6627fde29cd59d18e20109fc4d10aefab030849258b49db65f2f8451dd3ea2d8baabb770f5fd8e9225d729eeb3069048f5ea0e1b9c65f462f75c38b2be956de548fad551ebbb8a2eea6942755e3a18bc3688ad96378bbe8a50d7de4a2f19eaa28b936a87b0f5c24e6789876fc8afc718b2c79a50d936a52f09f047ec810413d6c51dde68aca38ddc04d4083c60d1cc73f6a91f6465d5ed8899f6579d022640c1af3c9278416488961f9ca4467b1c67cf94a726fd55b21b210012416b0784539ee79d6726833ad5c911c6761937ad48a2b93d499673e9ddc291056f4a2feb2392c34570a64150595cdf1495315c674aa1e3459e80e995474b9375af55f3f5f0c828a246966a5be249101e41497247adfa5e9b0b5e90b404c619e2494e593b1c8b24b29c5e1db969645eae53a148090a27c25cc857eb2b23e29096414095d1763196c656fae12c59d31d346cfdef51f8784e290f1bafee2cc778762000185b9e27e7677b9fc97b200e413ea746da5f1db24cff8038827922d33e74c41cf33a5a9139f69ce5d9337837002b2092cdc764e6f6dadc40907104d249e1e3e553bd826e94c606296c27e0a236dc2983894bb79cca5b1d9ee259c34d18b2657209658cc43e4475f89b42c57c52be973a74e892e6bb6e5543efbb5491c2693662da182480293bcbe82680793b5038944af9d56ce3abec694f2000289c2a6a5fba7cfddaa90479c2c6992a63479f5ac038823f692b2efe6587177e39046ec27c78a9a26c9887b4acc97c4ba642f9645a0277beaf93c6537a11b4014c1babbaf2635cbc9e38303928852cef09b39fa398020a20e71e7277932041502b5a8412bce9f9016a7284008f159dafdcf91b7bf181b350671d699c5ee70712aa5b6c310a304104120ef299d49ee61f95e110112086eaba693b47a39649e0910406c6288dcfb68fc97493b80fce1d5932c6c850606c40f6ad2136d54c23e247d521e3fc93d2d3605e18319d37a7bafbcc99f7f00b2073de421e93439e51425bf29b201c183a1648dbfbf30c003903b9c736e75ec8f1edebb1d52cf9da28a8c75481236cb895bb962799c0e59e8f4888a2beb1803990361c1e3d45ccedd4ecb618bb15ed163300e27b153844474bba7050207adca728ad84f0f6a027983a7da26e655e6ccafb8214912cd3f26614e9ab0da7099d54e795aea0c081b8ab74e3165b856ee3010206bd04afeac24ef9a264b11440dc963d147b33c9ea7c3b841c68ded0d40d2405aa76aaf244d0082863caaad411a809ce19416f45ac4e7a40f310031431992da6edfe42d91b21e4206c8186cebb4e1bf6290de4a0d8818125d56bb4b0806903070e2fb540c92a22dfb42c000f94279a1ba505cd0378ba69c53df85a62b806c21bd986a6fb4e2df665800d182eaa511755aa167395950672be4539746454e21806001720533cb4ce89f3387054800b1423a369a621493a4f8da04902a502159637378ac163285bfcb3a564796426e17f6a6d52858a659552532a5ab640e2050803ce1ab0caba949d6c61910271ce3fae5566c4c39be0d4813204ca82de36d9d6674057709dfb5d7e5ea0ad7a32a81fd533d317c2da7924930c6fcbd34594173ee90c0e5587cf3db8eb0fa9dd86e494393746284e40f13bf7b290299bd7d35931411ba9c625ab7d455f186607fc689afc76930110297efc2f64c0409426af197573ee2a434438060760f6a969320a2e95f70217652cce4b8bfbd2fccd123fb3fcf5bcc6b2fa89256b6c48af2f9125e247c8e697f3d8d392d1dbb384b4e5e483bab1c950e5dd0f2e9c41ad5ed0fa93b72c16564b2bc1caa64773b706187c72713ad63123f07a3e316b7adc64a79e5c131021a34ca18e33b6c410697e8d82d75d4a2cc97c19264a7fffc5f408b7385c74a6289155f9f8e599416cb4b924f6551aa1265726cb6c43413c522c1528ca35ea1f29b58072c36290ec0028123089442650107dfad92dc062c8022502e02156933729c81830001d001432001003023c719261840009c067b060d6eac180710400e1c8e801000e04f495a0d15c6e4dbd846963a83068d311c478d1b84716a9c30dacbc80102050c81566bc9b513db9dcd86105ec9cf49d35a5f46b6a180201c3e5acdbdee3475aa2800085fb0a0d16673bcce0c31c238836be0a8c82f9230ccb84118c717491866e0b091438c1a351010e985199e8317491866886123c7d6a88180c82e921a350e10d1451963e4c26f40c61863f8180688e0420765f4183e460122b748c230e39031c619356a2020628baa05d1c25861d453cc9b434c27099159c8a2fc14da396b0eb67e2c60d1a5e42fbaf18ebc22eb3acd952d476e1e5de1c6f8d3f84fb5c2b43393b369e878f964857ec244e5cff874f32abcefec361193882a5251abed5a64b92631d5082ace49c64646e3c78aef2996540daf1eb64a3534853968f4f446568af24931f26f6166831a214572852f3d8b98ed0f23a3706dd66f4c3af136daa2b03a653777e3814828f8b0494e29c5ce5c6e8e611150109b52b62d66f8cb67e4887ca28a2925e9cbdbc46c02114f147f27eb52e5b4942f158874a23359cb344ab4d7ccdaa04143239c28ed6f9b9c327b1ad76dd0a091914d54a6d3e1cae40fe6711b7c460e1a34725020a2894e7c2c2599bd31f9ae48263051976883594ad1a4762f899225aa1294988424faee8a3a13f124b81c890426e533296ab2d662c786db60511081c4236cdd76f9dc2ee2882b9dece59e3fd2887e93143784c4554a7236c208fb63bc799efb786917416d7694949373b4d6228a8824a22288687e7b3ac99fa9eedf21ead6135aeb73fb55c5109618364b86ddbb4ff28530deefece325612aa508a1c91ba236f37ec71a07517b0cb32fcb392a78362282403327837eeadc64171b1b8804e2be95ad64678900e20f59b01cc6c32789f8c199fc1b7119ffcf5d1f3eedd5ecf1bca3678af0a19bb5b839a4b9873f7ad0db0ea31ef260b88a2f267c46d87df09064272639947e3ea1a4ef60873ad0e128f2298a6529f1d099831c164d694becf98ce676400234c0e12188c4010e89de6ed67862fe289f0e44de60875ef5f470b2f61e379c2f69e645bc8c56d6067c2fa5937dfa0e138cb0c13895dc6c25165903a9210d8486c8192a628632d87329bb09f7a7f769329cd4a3df26b39881838c1c913194dd4ccc9ac5124318280206ef6ceb53c61287c817ec1c2f6ad72f42f28343c40ba709237a93267c5eda85af2bc5cdf868e32f45b8f06a063f29670bdac5a429e7def3f92007225ae0d4c4948a7b6662362359486a5bf3e40ff5151d2c982b76bb87c944aeb066bbcd293bc98b3e6205f77e3454599f9fe045aa80fa6f86fa4ae1c3d30815cef9e5be96e66e3786139129246d8594bf9770994ac110715225f554ce256d9811468d00ac2212053f9cec7dbf1e359f5c040a98ac9bbac7ff3be1137942ee1e4bdc4c594389bf130e9e96c455b619449aa009a51a66c2af989832c1d553df38b1224b20ca4b9af831e924d288129a7af3cd14522afc154982ae75a9a4f57d77759140c6fd283932ee5fa5c811f8507a62b96a1b11daaf2d5aecfe1a448a60b9d9ec9cf4c6d8c973c34f702244a8e4fb924eecca4c114686101102ae7a29336b125c43c2402408d56a64ea8dceafe34780b05fdcce296b49da4c7e51458f7ec9b8f645df06c4179a7912be2d724ce83ca417c48b2a2426f6c31b80354076a10bbc36967df654e2dd950b5cbc412a09256ccaa50f728b34d7f64e995cc9dc93c00520b6d0c64ed670558266abb56844c20a852aa833976120864110055110832008629f3543135080b840180c46c3012d91663f13c0c0ca42d170280e8a420181300c463110053110835010c3401cc44044e224b3ac1bd1a3b4bb7862d3e55c44ae5e0b5dc3629e52e2d6b0480673e51de4bcc7f666fe27e6eb55dbcbbec433741adecc82357ed3a223bb8e58837bad264dc261d956e063aeb42b33186f49fda99e4347facc4d80688ec7d7458350310a38ffc72578f8e1a0ef2195131f5a30d5d47effc3644ac31b6eb58195ad1185a9755032ce6b0f7bfc4854445acc262d27c52b133f126f022dbade01c257af5fe2a1a8cc3963f8661b97c2c1e868121a49cf74f8b54b91cb24ab63361549521f874232b81958359b539d7e772b98b28420ebb1fa2c423c16803213309f88fc647f2a3b8154170f2a6bde166f60b5c6e0d7d078a82c206352e9ad3ef357e30620b69d274447210d9e71a495fbb9e33749f275ff9345652e9715cfeaeb2ace2200010b6c05db6fd8ae90e95955d3334adeca76c4e7e65b46071f245bfb96df60b37ec7be078000c94aa8fdd7f8be270c5706361a33694296fbf49bd35abf59792d843953325e5d9558a47384f12856efb4e0eddf5be58b5200a88bfac9959c89da14da347287413453eca907e02d294763cda4b3f4439991806b804917db384ed08c1534196cead8e94ccd788d7c53562d7267baadbc3a9bc2083a3764b6d3a2e78e834b0b95038fca587ad1546943e04591197967abd948364862b0603452052202ebe8034e11035397cae42c8ffc55134e86663f6c94b1264cb5b5ecdac72076a7ed829a6c9e88516cbb02f0e2f41ee4b8451ecf9ce1b08f7bfd800c0dbe61b24700258c1fd964aa2df4af91eb3e1a44f5549db0730eedd8514a63e1b77272ddc9f9b0728c8c0122bd44579c7e16d050c109419a43b709276f0374c13870d20ebd2dff536c312ed182d10187fa74f71b1fca900372737603b03f8bb970c899cd1ac2de8c816155aa74143ded8841f8e4814dd4009b9bc0ad064677bb5d6f1af9583d9f4646c7512eeb5ef04126125aeae72875b78568bb021699c7f4594c2fd158c500174dea61ee981d689efc28037aa9fe89bb68517ed26a484c604edc3519d115193796ba6099036accdbf1894eb8720b8beb56c4f7ee80ba25d6c950c9cfc428f2a56ac3e28cbf8c385342497225bf59f88c3b54cb94ac7f33121a8a3ed55792b259084d9829e9e7a42f80eecc23231789c8ee41778331403a55bbd137e5a02bfa7d9f3b7ecd50e1ec4341fed85b965bb5bb86b1cfadda7922a51c38b01feb6397eacc2771750ac086cd1daca1c0ee53a4e4b888bc2a114b5c34fa4de42db36e5366854bd99f090b450bd92a6e42e61ae312707d17009e025370dd58237a87c6cb44a338b35da5a2e0e2543c8633ed395b0867f7bc014057317047e6cc792d00a59e92d9b100fcd73f04e9ddaf4391a45e3d44f9ebb03bd9d783f2935ad1d78c2738e1c668ad1d99b0bafc8f29eea804f90ee37abde857561e150216e38775e961f24914135c6e2a5deb43e264ffc5b994b40b35fcace963c0a63a47af32c683c9a621143a94d9a36875526f79e59ecabcc9dffe528fb76300997ae1464eb586e179546b54189fc8e2e14085208dfb6672507c23514208bdfdeb70ef3fb22941d049a23be02c96c23a7788e58d00a00227c026ffa24d6629ce3d620d2b07be1c609a5fc1a8d4963701592f2382f93e27111304a9e385354bfd026ea5bc45a63f1685649531398964f5efe05bc1062084b8f6911521c8d7cdaf473f847c0677191b55ca7059d4ed8799f96d3c9faa13ccbc9d93661da50ae99bd93e3c57cb21f4b26d58788cc4515fa6134af11a2b29efbcd5c0b33b29cf4e65c09526fff27f6882d1cfcc1124d0df15737a85a09623bd4594795b6aef8a370f5e1ca16da384cea5dc3e295d7c27608332b7984139a48d1dc88f54bed80e45b9c4c50a40b030e937883c5aaac241d11205e2fa5d9c1d29ffe37a2cae7fddc58c73ef5d530c32606cd21dbefedbdf774d68d6d9b8ededd24887cc44588b591364a605116c21ee81652de57834ddf864949b3725a51192e530ebee788de475586014797b51c45e59c15d761133a9abe65b3ae5e07c04254cf62d8d93aef9c1d6d517a4b379b8624d9343e6f5ef8455344ea09c81f2b3735434220d0a6211843de10ed8f247d4b539585a06d396dca98d2f11619bfa94264d182c0020b7f726897b9f98c5c49adf0cfef1926e23cddabc2a7f69eb3273edb31eb1d3593b4de0a33b7ba01b45372a2685be4afa4fef228c9c9e2b3fbbbba8d5519ad108c6d21d25a133f1059cb68be3fa714e6b26655df3bdb0ea85ad4b308cc07ae9057fc0285e05f513366081247a71dd9dc6dd28bd78c3873e92161e0f1797a2934e8b36e93ce213fc760d03e876646a252ecade956b8f023afea30b608be4f2909af8655e8f4ddbbdeb919823597a4a43a0093e4efcb9cea82f4dd08c77f57c27989a08ad507d8a480b09ee37d9443008d4836a7b887beab566d3a080dfa0f2f0b2265957553e6f9327a29b577e907b80e59e9ecb7deb6b27655b243c2b301723d728fa7546426ee7a65e35081c7b68daeedb32802a5b9df058f058d7efd209e8a50b6268dfcb138de5c324c65baa14e425d534705f885c1c9f2eef6eccdae34f84f48e4d58f6d69a4134c619c8dcb9bad4c51a88f269275b462c2867b4362204af1c9241b11cc1d6afb36230df62eea6e82095b5fbbe4fb708ec5f81833a0981f3e384a1837d01ab3f5844a043a5b4e8e2bf3a3dd40553cc1c0b0a0da81cab1a7fcf56e3a87150eb664ac5b4b58a36f76a53933c32fb1a654c2236395b7f753d3c8e4fd2072c8f0f1987de535083774c10d5038ca0d50f6049c8690bad5853ec4bcd90227d88db44fde2996570e5936415923a4cbd2140e8ea99efffd48ced8e8bcbd5c77cf1266d799b7c15654f131d6937ed9351503f1c338921b0f8d53616c611f8fa71a087d18e8ebcd389884f36b17194f6ee7743dca03eb195223b90ad124e0abcf8b6ca6fd0a93f5b06b6a0f040b0ec74a7808c417431d0abc141ca159c35a338971dbcfb716c9457a2bf751535f7f0c3adaed15cd0adc31696d55caebfd603cd7fa15daeb07eed15b9f867c7980d49d9c216760de9dcca87b3f9b7c3d5e6d1cde609ad521baed2abc0b70f9188749d70fc04e22649a24577784e524704f3446a5e8d9219fc412029152cae13ee4b81f62c2f396ac8ea99594515d5c4f0f786f1cdf9d4df6376354f416ca32dacc510514c2a22923be7ddf7b0d579cfc4d8b1a53440312f4e3bc62a1110b1775121cb50df773a58238510dd4ff1ad27956d272624d6223dd2c1c9b3bd0f038971b0ba84b08f1a2550743406af8812b28b770ebb9bdfd5fbbef8d5afffda77fe5358f670e8dc3ba342bd43e164464155dd2bfbebdf7ffebbfffa5752effe3a18a850a0622a4855e6e4317e0a4edaa639cd299f1ed359ff84331b1f09250f854e75676486b4b154be20cf78f9f35df963bffde59fdcf08dd3b5e154a4be0c47435fb295c35cce65ee9d7747b76198475df03405e848189413f80695ebfb2f5109877604de82a23d6ce73a6bb6abf718ced8184ed4173d8d6471d69a852216c4fdc95e5372f0ef4a5198fbd7e76e6c69afbb94bc0ef54e5a9335c12bc271c208fb1bd8ca1005e8ec51a13e203744af8871daece8b57f2cd385cd83edaab80e9916b897fa9d9ac5e7142376cf8c48cdcb4a77ed6fab607e605c6229164fe82415a5ace5a5c9135cc0d0533559e606cda733cf2596e8f964374d6f16c853dddc583236b6e359829ffe8b513e2ff7cc18a08e669e97f892f1067762f40cfa711673a64f2695791917f0e13bf2e579bdf6bb87fac2caaa2b8438eb64f9e54a2e401d2983b868e503ca5e8239809a7fb12e3fa471ac7cb72a5f60de7d160d84402b0c2c02c6a01a4290e72bf6b8c22fa3cb6a394ddde3cb792c6428a21962b7c62485e20b577c4762781e203782f14a65b41008d1a81bd63db67ef3e01983d7a5b06908b58f0e365ff6001b796498fda6b9e7929da8ce0e9970de7a3b2a33c4ad95def7b9ad20abc0eb29c68493c5e663ad0562c9845af588d86dbcd13218c4c0a552b4c2fd2f1ca3efc9e2568f483dccb91c2c1d04e8279f4528daa56656e3cf687393ac9a0289685cf39568b5ba31390b885867f312b5747e98651bd9f7f8af63eb63397f7f8f88a0605695a43afbda70c218b08695385d4dde3db5e55917a68d8d16e09282191e46252bac10fa8ad6b590ae1f42ffb00f6b4cbc3f291eacf537c42c4283652d1fba90c71fd96c6a09799204144865866368b595c3063871677beaaa8651325c219a224c071e3ca901daed028f547e8dffdf6d8c637c2058db85c87034bfe1bdd1be75d9c964949a25c3f05ceb6023d72dd2496a09a08ba7b1d2331a2ee5f5cc7324bf3b79e7e254102157b6639982ccb17f823f154574594f4c3330244c38ff78dda9a1c5f0cc2d36fb1fbc5da228532d67ce05b0b0c80e8609e33b09f48b6002c88189c1836c3285c949809076ea8690a106aa7e9716b1269cfbb6bfcf210b7547ad0a99237b6bf37228e586c3f80ad3f8eb7f91cc6529b5ea5d092c15f0ed43ecdd78ce3e0f5aad7172ee2d4a3b65cff321b28a1b63c97ea6fd2a52c6176059f448f10bd1c3e24b277190d993e36555b4a7c32a7770e80cac33d96d64055b941856cac552f25bf8ec695ef2fd05a93382a9fbece87ec3f4be21e0344235f79c33466a2c77f045b95bea6ca690240eb8bf0f89e9b426b719c29e599f283c0824c9c3f331b509906c5770ec4dd2a81c493647a8b0492066d8f5f8f3ebf9859aad890e5ec20708657a8299955afc5d9d87ece8072f4e0fc3c80822af533492ab56454c01ad0ea9071b6386fc8b3013944934434427eab886ede78d9a2aef1134d175822a7cb178b710e57b2a6110584db2ee4e0dc445594b5f2c153a5a820c8533c70fc4ffbca131bc08e30b21cce1102868f647092eca610529e6090a03b1c74e475c7db706b78634e1c9c7984b2ff55c0595226fa27f2be5342ae7bf13666c4e59a2a9c86954862d7b3bc60d6b89debaf0db8a4f38f1f9ab63f2dc69e88235eb22125dce3b73b9691278784b70a7a5a7adc56f89c8bf887676ef09cae8279d12a432cf1a0e9df6ba903e1dfd291746aeec5df864fbdaf006ad580003952ddd4220e08c26eab5516f596bc1e9c66bc628368e23ea3498e310d0b6cec4b04f386ab628363726e68c4a669a860ec69ad2bc23150447debdd3849e58067ca1cbe04318b4735ef31f0289df26b03956e335" }, "parachainSystem": null, "parachainInfo": { - "parachainId": 1002 + "parachainId": 1001 }, "balances": { - "balances": [ - [ - "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", - 4096000000000 - ], - [ - "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty", - 4096000000000 - ], - [ - "5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY", - 4096000000000 - ], - [ - "5HpG9w8EBLe5XCrbczpwq5TSXvedjrBGCwqxK1iQ7qUsSWFc", - 4096000000000 - ] - ] + "balances": [] }, "collatorSelection": { "invulnerables": [ - "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" + "1NvWYSswSt5v95m5z9JycedzTXEWJ9Zcgbu5BMnGAwiWUC9", + "12n87jggYnvxvdHJaEiTAKZF7ZniJqxafYoKzEqfJCUDvJXP", + "13KNn7JmkSzxwrKZwTBUchTBZLVohPswv2jTPbmbyBHcHoN8", + "15SDaRyFoteK12K4oZFzCTUSsFckLYgaAjRwTAdsqvrziBtu" ], "candidacyBond": 16000000000, "desiredCandidates": 0 @@ -54,10 +51,31 @@ "session": { "keys": [ [ - "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", - "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + "1NvWYSswSt5v95m5z9JycedzTXEWJ9Zcgbu5BMnGAwiWUC9", + "1NvWYSswSt5v95m5z9JycedzTXEWJ9Zcgbu5BMnGAwiWUC9", + { + "aura": "5HoudDVmev8gct3rWm7rB1wuAMqgUAfjm8j1Ja8TW46R4za3" + } + ], + [ + "12n87jggYnvxvdHJaEiTAKZF7ZniJqxafYoKzEqfJCUDvJXP", + "12n87jggYnvxvdHJaEiTAKZF7ZniJqxafYoKzEqfJCUDvJXP", + { + "aura": "5CzM49boG39JkwR6pYQtFWqFhe2p7P51yV4mtMxGcQUUWQdu" + } + ], + [ + "13KNn7JmkSzxwrKZwTBUchTBZLVohPswv2jTPbmbyBHcHoN8", + "13KNn7JmkSzxwrKZwTBUchTBZLVohPswv2jTPbmbyBHcHoN8", + { + "aura": "5CdFKn2fUX8sCVstC1buyoHKMA4VN1GNjmG7nJ1ot9BiQZsx" + } + ], + [ + "15SDaRyFoteK12K4oZFzCTUSsFckLYgaAjRwTAdsqvrziBtu", + "15SDaRyFoteK12K4oZFzCTUSsFckLYgaAjRwTAdsqvrziBtu", { - "aura": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" + "aura": "5EEmq9QMQs8GciAQD5dixp482kAtAo181MorcJCEPyLrY1Go" } ] ] @@ -81,4 +99,4 @@ } } } -} \ No newline at end of file +} From 38bc912b13656a16505a5449bd347ed8152c79b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Sep 2022 09:37:42 +0200 Subject: [PATCH 103/148] Bump syn from 1.0.100 to 1.0.101 (#1696) Bumps [syn](https://github.com/dtolnay/syn) from 1.0.100 to 1.0.101. - [Release notes](https://github.com/dtolnay/syn/releases) - [Commits](https://github.com/dtolnay/syn/compare/1.0.100...1.0.101) --- updated-dependencies: - dependency-name: syn dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- pallets/parachain-system/proc-macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b461afeb855..2920c43e8f6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11971,9 +11971,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.100" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52205623b1b0f064a4e71182c3b18ae902267282930c6d5462c91b859668426e" +checksum = "e90cde112c4b9690b8cbe810cba9ddd8bc1d7472e2cae317b69e9438c1cba7d2" dependencies = [ "proc-macro2", "quote", diff --git a/pallets/parachain-system/proc-macro/Cargo.toml b/pallets/parachain-system/proc-macro/Cargo.toml index 990d2a894a4..2c85c8e9975 100644 --- a/pallets/parachain-system/proc-macro/Cargo.toml +++ b/pallets/parachain-system/proc-macro/Cargo.toml @@ -9,7 +9,7 @@ description = "Proc macros provided by the parachain-system pallet" proc-macro = true [dependencies] -syn = "1.0.100" +syn = "1.0.101" proc-macro2 = "1.0.44" quote = "1.0.21" proc-macro-crate = "1.2.1" From b268691e39c96ae942593f9ccdc23c279cfe4f20 Mon Sep 17 00:00:00 2001 From: Muharem Ismailov Date: Sun, 2 Oct 2022 17:45:06 +0200 Subject: [PATCH 104/148] Westend Collectives chain spec (#1712) --- .../chain-specs/collectives-westend.json | 179 +++++++++++------- 1 file changed, 108 insertions(+), 71 deletions(-) diff --git a/parachains/chain-specs/collectives-westend.json b/parachains/chain-specs/collectives-westend.json index 51ada3fdf23..83d2defefe5 100644 --- a/parachains/chain-specs/collectives-westend.json +++ b/parachains/chain-specs/collectives-westend.json @@ -27,78 +27,115 @@ "tokenSymbol": "WND" }, "relay_chain": "westend", - "para_id": 1002, - "codeSubstitutes": {}, + "para_id": 1001, "genesis": { - "raw": { - "top": { - "0x0d715f2646c8f85767b5d2764bb2782604a74d81251e398fd8a0a4d55023bb3f": "0xea030000", - "0x0d715f2646c8f85767b5d2764bb278264e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x15464cac3378d46f113cd5b7a4d71c84476f594316a7dfe49c1f352d95abdaf1": "0x00000000", - "0x15464cac3378d46f113cd5b7a4d71c844e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x15464cac3378d46f113cd5b7a4d71c845579297f4dfb9609e7e4c2ebab9ce40a": "0x20dc8b457d69477f29e5900b87ff546906bd6f1ddfc2805686ec571d905973883670b8271aa09a079120109444b69dbc16ccb9d11e205a77fe9aef105f00bfff4b8012cebd357b832321efbff52414503d834c38a806e496eea2b6ba93ed945d62b447c01b893738ad904fc7e6cde03268859354a7cb7622b5363787d85e57d55d040c2f09c4b32fd4ecda945acdd3a4bcf801557462020991f9231972fe04367684c41f0a7bf06c05d59c2dd733b82eff492211e9374ba640b95f48cb346cdf71b0e52b6106bc95f25285c8613dc39ac76cedb7671d0607a4f850ba81b1e9e50e8eb69560436bd1ee7c172144350591e743d3dae6ea0d6985dff5b3ebf93e9b18", - "0x15464cac3378d46f113cd5b7a4d71c84579f5a43435b04a98d64da0cefe18505": "0x00a0acb9030000000000000000000000", - "0x1809d78346727a0ef58c0fa03bafa3234e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96": "0x000000000000000000000000000000000000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", - "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", - "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", - "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da918b763ecdbfa0e9efe579ab017a80803b0e52b6106bc95f25285c8613dc39ac76cedb7671d0607a4f850ba81b1e9e50e": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da94f314a8c00e8b0528b8f220f6b1a0b6bb447c01b893738ad904fc7e6cde03268859354a7cb7622b5363787d85e57d55d": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9784d118b107450ca9b35a386b83111338eb69560436bd1ee7c172144350591e743d3dae6ea0d6985dff5b3ebf93e9b18": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da986d8ea84569c9b399ccbfa6db93abd715cf3f25f6fd01ed667f9a977a21c7d55ccd118245b028f066ca98c34c442dc73": "0x000000000000000001000000000000000000a0acb90300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da991900d6fe6db15f208663354a53d481584c41f0a7bf06c05d59c2dd733b82eff492211e9374ba640b95f48cb346cdf71": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da997e66c699225226d9a1f5d2af16a1dbfdc8b457d69477f29e5900b87ff546906bd6f1ddfc2805686ec571d9059738836": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9a6c3ff8820b374aba7da18a0926ac4088012cebd357b832321efbff52414503d834c38a806e496eea2b6ba93ed945d62": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b092f79eb1087906d0daba3075dd7eef70b8271aa09a079120109444b69dbc16ccb9d11e205a77fe9aef105f00bfff4b": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9f1513d64708f86b3fefadc2d3a952c84040c2f09c4b32fd4ecda945acdd3a4bcf801557462020991f9231972fe043676": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x91012c636f6c6c65637469766573", - "0x3a63": "0x", - "0x3a636f6465": "0x52bc537646db8e0528b52ffd00583ccf026a4ca7a9542010b34a078169fc3a6ee6c8895ee4c191b2dc3877c0737d80f41c9f7cee2eb327c74a1fbc2c75b6be9dddb4db2fce03a984699f83e21d6acf47457dafc842fa8bfd75c72f194124829add7b6f22e59649a694029d0bbe09710a3955724ad0ca9253440e11393ae428d1e2d232a345474b06ad2e5a3068896995d122a335464b8c56182d305a4ead2f5a5eb4a45a77b4ccb4ec689569d5d17a6abda0e582560b5a605a6fb4dc68b1a0d5468b8dd697d61a2d2f2d355a69b4d0689dd1ead2826ac5d182a315a6b5450b8bd69696162d2b5a55b492682dd142a2a5446b8a160ead282d1b70c4e040e1a8819306ce16384ce060c19182c303ce0e3839e00cc1f2830586f502d6130b0e9617961aac345868e4646181c1fa82e5054b0b1617d6192c33584cb0a86039c17a8275858585a5c4ca8f551eab33ab1bacfe58e9b1da63c5c7ca06ab32aba8551d2b323852acc0acb0acaeacda589db1eab27a62b5c40a8a1513ab35564ae038dd4cddd8e0868e1b19dc44dd90b9197313e686cb8dd34d1e3765dcb8e0e6cbcd1a375ddcdc7143c64d1b373ddc4c71a3e526cb0d153752dc587153050042b8b90133420585e1602879c30d158e0715159305344a8e095876b4a66c36d8f6b0019343839c3ce81b363dcc37280e9b1faa28544d344b3625880d3c7bd4bca1f3042b0a56172ca78d0f950e377bd02a355d3815d50dada61a316ac660bdc1527035401cb61a6c52345a40289b997807760553712dac154ca7f9a5cff4101c1a1d0417868b838383fb812301f786ea0995131c1b500ae7038cc2f5b0aa6145037744cb0a0e144c0403c156d804ac04636126d8094e62c3837fd8ee7014704dd05ce12cbe448b0a9a14b813384d2c29bc099e253c896d063c4cf028a1c3829d31fc042f61d3c4a302bee24a3812f1069e246890504d4173031a2c3b31e098e0235808d6c2a28105855fa1518255c0e3c48e144f183449b472f014700968967026564f8e65d38306053b77d8e8c043e080c1416c79f050e12a4cc56c829bd069830708e6a2c2817ea17b503928193a86ea41eba07f503f681fb406d406940f3a456540eda062281e540bbd83ce41a5681e940e3a031a45ada054d02ae8143406b40c850135436950738632d5dce006cb4d142a30544e2a3f545ba8b85069a1ea429585ea0b9517aa3fe8195515ab14ac50b0b2b23a6265c4aa881511ab13ac4cb02ac1aaca6a889510ab205640ac7e589160e5c38acaaa87150fab1d5653381ab63fb633dc1e34326841c939c18d0a543b604e1c95e9c6cd0b780a1a2370be5859a153021a2638285c04a780adb8a9325fc09ac366cad4327b983b4c1e269519c5f4610e31a1982498555657dcac600a31bd90666ce6b031630303151a2a28551a36556c92b02901c60616066b03ce80c507a401b7c5d607c7850d1e36774438221e310ecfc3a75c8f8906ab8ea9868d1e367ed8ec41b1a05b6e6cc0a86044603e6070cc34e61ad30b2d8222418d6075e113300ab80a4642da2048139c0d3943605b708a68215a5948293654e20d303070f0a8e14295438e1198160e853fe152605978149ea525854d0e3b62e6951c247292b0e1219eb1f121fec18201a7074e148e29072a1611fdf02a7088c0a9637507b401d6d0405026dc07cc8a6d0ae70e0c0b1b293c64e8b0c1838497e163f81b6cc45401ab0aa7020b0336e170d96eb0d100de80238563074e14ac1a20531482a7584c1c82b241d750458955588e0804c7419f8841a8a4300c780ebe837d60285a51f811140ab5817be01d388acd0e1c15f40d66179b28d8147209b74263656507a66565861506d230cfd8cac82bad12482c3c464826b63ab02a302a688e6012d8e0805306c70cf370538312889820801b36a21c1ad7654d0c55c32227473a40d4e448910b44441ac3244b8a8888328c099a38061222262d2c51e1e88849029290141d1d31490000a218ebe4c8e848525112a2a2a2164088612c93169618118100a9280618888c9ad4a425452f80e008043e82b14548963059427484c8a8492d42b284c9039296c4c00409921a243a256182a4284907f18b7502822225444e9c80a06885254c8c9c38299a4017bdd80f1835a948454a90985880852e76b145494792181d1d9181a82886a21822408124451ef0c0110a002072b14e9420297201c916eb2469491152910b4b8c3e6ab1c4a8859d98c5223172b2c40829e9491111088e9a343942845494e4c82806212548981c09f1c42dfb02d191a423498e241539c026621102a3a3234649464b8c70e215ab040993a30e101525c580a4e849d14db462919824608b55ac9322a3242324262e24c5706415a9d8254c8c928e20c590842889c9911322a326f508520c1567b9e8a803479296c4d0025112922224a3244b8c8888725a718ab4c2454c95ba4bda3a3131555e8239589c23cec14d583a8455084208a15085b566429c33f60d72779eb28564429c598ee02e33219e39679c792624132233212de5089c6542b28c3dcbdc9b331622c4b3cc39939eb910c992337767e6cc337709a5672da5d4dc5d36f76eb6bbbbac65ed72366719f4b26c4e9f92257b56e39239ebcce5ecd9cc9984599631a649a9d2daddb1766c9332c3a6cb55cdb935cd9c5a4d6732e3764700cb8cb33e80f41af7e9cef3039eb24d6877ce32e9e3eede52caf63999597ab3b3b774ef9eec193367ecee2ce500a47bd6ce2c9bb95dba37b74b9eee9c354bd92bb3ceb67ba1cc1a6699ccd82767ee0cbb67d768b3379a89619894d33d93bd35737b904d296506a1966519cc322106288084de947066598d749752126065967130cb38eb6e09dd6b58d3bc6ddb36bb3366ce9c998bb83b4bf7e99c674fc9cc7300f3b573fa9639afcc329bd9939937af619eb2a594d1997b97a7f39c5ad7d0eee92da1fb944de39910676f29653642c6197b26571963993326a56ca9e23846c9cc8ec2071f742b5d72266796b9a4fb9c3acc9eb93390f3fc71775ff79f1f5f7797cb528ec0cb2bbb653bccb2e95b4f9fd2a50f7b5682bb74963dadc8b9c718a3333b7bd7796f1bf39c734e39bb7ddb7adbba3bcba4dc6aa4dc6a32df30295bba4b5833e7365bb2fbf413584a969299a5fb949277d761bbc396b3bd5dc6e8dc792661cf3967cb6e96d2e5742939cea5ccdabdd9b35ef6ccb98c738e31caedb28e5db24b293d63e75d9673b294eecc26485631ab981de3185b1d56a93a95b38a4b6029b3cdd63bebde98db3def03e6ae6166964d8224d2ac9231c6eeeece65072e3321425cf2083c0213616e01481f1f9f000c11c1c766367332c6187df8c5dc5202c0d99b01c02c65d7416776c9ccef1973c6cc217807ee2e85b8af0f33bf1c0467963bd279ba0b9152ce0f5c4a9e3e5d4a77ce5cbaf778b07931b2772edba594eecc2e638ceeeed2b32ccba4942e33ce985d3a3bb33bfb4a29dda56ce9d2dd1d730933e919bbfbae074922c81210038184df11928e20152d29f20092930f3a58128a9c3829426af202132444484532304152844474c449122445442328f939818426488a9c00a95c409274a403442e38315a62d402072d182115c9403480114e3881842445444c929a8000098907aff3a428c91223a22546475c40d2420b4cbc178c9296c480e4e9b49014439022178892961821352142e2c4e8059e20498a908a92203121fa3981842223a4a410908e24816093c3e9284172a40347474c42e0d1d9e160272787075bc2c42809c911274b8e2025112519bdf0029317cbd3d9b15952d4a4c9119e7d81032e2a426a81088949d211244c8e8e8ef098f013e409930f2471f073020939289030021109454a8e1c75c00527475c78d58e502443d111d193232f74e0da113cc0e488c8034b8c3ce001264739251c1d19292102c40908ad25218909139c24478a905e2028524294f4a4688908aca4220f803082932427464f8a42b859129e18b55084d484880c4b8aa0cd8e40b484899113a4221988908e141d21212af2c0112426494e88921c19b9808428e92886232d1425214a7a52e423c39222b8da06011293178a5ec06458520443e0c26837b2d1c8124ba8e44a4b4a4a6d6495967a69c9a3929292d29292d2d2d212a6a4a4a4a4a4a4b4b4b4e4aba4b4e44ad0c8122bf11a595262a5256864091a5162234bacc44656496949092e292929b911a52556526a234aaca4a4048dac92924a1ad9a5a569448997d8c82e614696788977291ad935a2c44a4b6d649796dac8122f2d2d4123bbb4b4b4e44676898d2cf1121b490014c3bbcb2f3839b20160eabefcd7bf19d68e0a1f62b1004b0aa0b1eb41468c6905737718f541301048be7bdf9137c560a32e08b410baa00bba2ae67d5f3f57fdd6e9f32615b0ba3be47b0281853e1f0433031153e8378395eabfdcf62b3a8cdfdd77e44dd53f7a2e630f5ee5f32a73a34d4d569478c9619c620fc7b243a060d1b1f9f017be1652f80b81b68f3f219046a4cac75e93dddc36b6eed727bed6edfa7caf4aa409ad442611a55e9a0de3d096310c83dcd09c40f263f4be24af31aa4163c43aea823ef0354d6efdb16b96abbbef6b8c495efbf9316ec83d761f8d1d7bdbc1b0987b2c1b28e486fab5b839c0a327798deed5b36834ce299fb1e78fd28bafc5c7b8a11839066cf5d79c3a37c4628efcb1638cd1a3ede2ca9cff629eeff614db5da06dcff79485bd77d86b4eb78af1b755a69129f5d776736ec8e59240aaadfa53d71bd4ffa395e55275ee3f1ff38f8fbdec828041fda7275f932cf8c7ce7fab7ce786240396314e05f7366fb9cd0594ff9bce0df547ca726dbe3dd6314b24121fce8ad18a2de67d49b1c697afc56ef6cb0d1ae30735866118a641c80db1f0128b32462f29564c6232c4ea9ea7a0bf66fbc78194281313130d4250f4ef4725fdf0f9bd8b9ebfa613e40cdabfd51f7243dedf1c03b6b6f7732af443cffbb50499ab449b2d3bb91a3d67e2b86052a0aa44d51145262a0d325ac53c38b543e05332d6675454180c252646d121a662ffb1e052958d92daa89a1abd27fd9234d89d1bdd651e586a6ef2fdb1cebd5fd84a558cbbbb9f57dbee9b95b7fbbc323f377bde2facb78a7d500741d9619e4f5fa927bad18daaf263c74c98c750b02ee646b957ca578aa5226353b0396b6a608c11939a9452c68a79af1a3c5ed1b768dbf331950a5f5b668e1cd96be9fd626db7383d6e08fb2fc746ebf98202f4813f35ef9b74429fcf85c58e2b021668d7277bf82840a023bb40dbab7ef747f54d20d0e63113f4810f7ffbc7bd95aaf0316e8899fa059fdb81f27fcc54e156145c2e4a37a25021f64e54e5cf979c0a5fb5d7266fd3ec0ec1defbb8629ebff78fe67d4b55be7f10d4b02debbe8daaf055ddb7622afc897143d28bdc50bf7c2cca9e9eeafd728fa9a85ada40429181516940323354815175c028ad460f4ed132e0149c8251304a420151a70a5fdb7ef7be57f5e7712d337fac8a61af61dde7d535c8bbebdd7d47ac8a71fce586e26bdc5becb4b8dcd0697687f407b5771f0b630c5b3a236b0decb159536bea47638dde6b87c0af91a2fcdfebc5cd72d6621cf13013657d86e10b55e16bf2bfcfb1513d6fcf97395daefdd97d7d1dd4f8d2fb3aa81f8529c477ef5b2ed5ff25c2d753fd83dadd3fa88f7a6a7c6c87f4c0c0357e507bd71ed6c1006357cc4361879041f93f1450589f3ddeb3507188c934b7a6293aa6269d1fabc2ffbcfa14d446611eacad629e37f50b3ee5c29bbc7ede34370aa7e0d464e2e2a5c2d726a59f6b422039a918eaffcdba5108a6c6ff5c73b30235857219cabf9c045668a1cf372b849a54022d243d28057de00735460794fa66fda0d4dc281454752f753d50e2256f2885b63d1f11975ef61f8fea3f568df3bfadc6efd922d8c7dffed13ebe3710853ef0a3f71dbdaa9463a8941fd45ad7ed2b3e8defaaf133ef73d11a5fe57d747dbe59e34fef9bf5a3157e50e30c5efd9d5bc12be6fd0e895d8d4b43fe1bbdf53e23d59fdf3915befa07412cca6e2b26a577f4f2ba5c8c1fbd25afea9e135131f42362afc10d9ad9fed914668d41ed376052a69308a2bc8a1d5ec5abc0e1433896898363712c5ec5ab4ca79a2c4fb2482f35905ea49730528d59314f42b90d124a42492fd24b4d961f3a2bf652aac2d77c062ab5dfbb8fb7a0fe41b0bb232855fb3dde166efbcdfa2d55ecf9b78116fac0dfd7b04e5baebd6fe9e30affe3eabf5b047bf7be232855ddbb7e01f514bc5ff0dd9bfd821fd477d4f89f4d850fb9057015f39c6987c0e7cca0fc413076485c3f67aaf0971b5a6162eefde2e7d79a1b8ad833c780ad987704a56237eb72eeedacd0efefde122855bd5f52aaae074bce300c285ea06ce9ff6685f0217c082194a60a2184b007be20c686336ca0f2fdd3dfffea9fcf6bf7f7f40fd7aee1a9f66f0d0485ba7e22d4ae1f4feddf7e224db4bd79a2eb540311759d98a64aa8eb448397ca05f563bfeffd23bfee6bb2db8a755cb5fda15ce5c38db921ac014bf235e654c05e7a1ff6d86bcda9402bf6cb79bffc971b8a1fd4d82f07b5e5a6f72dd5f9b2fba6fc2028bbcfabfce586e66bb2fb1450e56bcba9bcef4955bdecbe75aaf2b1eedb7e3d69e282910b54f9dff6eb834095ff610c8058b755d5c100cf9c393355b197dd5780eaaff1263b7f166495b3834156ccfbb84a0f063e73e6cc99fa2dd5882541e6ff589527c333dab6c664dadeb841d78906a73afb679d68d852f7b70662a17d57ffac13d354ddfaf1d4fdedd9206d45e88e2b775cbd7ff877abf74fffbec61a6ffc5a6fcb360c98034abfb6c2f7ef87dc507bbb360c98634abfb6f27bb7fdea8e6b73fccb41cf971b9a5bbbe3badc0396bbd0b6f66f3fffb7af6dff3eec57b2d0dba5e60868fcdcdd98419d98a0eae7b57ff2cfcaffcd0a81b67d3e5af93f5a9d3909ec86104257fff8c3d7607ce8317ac7b5bdaf1f0251ad667bbeaffddb3ffdc3df69fb43f7bd5ffdcc0dadb7fdfa66ed5f6e68fbd51fd42750fe7e57ffc0efd760c795f64f3fab7f1c765b97f30feaa0e66e678559f967656f6705f8fcf0d94be2eade722af043efe3ca1fd4dbd39e92afebc11264de42dbba3d1fadfddaf6cfc70fdf5f27081894ffdb6aff077ffbb5afc16efbe54f02e587bfbf1c0bfc4aa0b7fd72ef9b757ffbf579dd0f6a8d3bafdc462303265565b8a9e18dbbae4e55068cd3e0b65b84ff83bffdda9ffdf37185bfafc16ef66b7f040a7f7fb914b65f9fd77de8cd7eed07b50637ee60e5b60812335518105065c02a7fffb6459018aacab055fe7e9a2d82c44c15060454fefee6587026a6cacf9c0a94a9f26ffdb3b57f391598a9f207755007755007f576dbaffded694f09adebc112e426a36d6beb43f9f757a56d0028fffeaab41d42f9f757a5f16fff7cfbec6dbff6f7979871b47562b252576a8b02e5df5f559024d80a27a8c88298208813414a10848620508230f1d48067053c5d7656c033064f193b4bf05cd9c183e7881d3e76f4d8c983678a9d19ececb133a5f3c50e193b5d7654c0a365a70f9e277878d821b313b5e365670d1e2d76beec4cb163c64e193b68ec70d98162e78c9d3476a4d87182478c1d267848b093c40e183c3ef0ecb0e3b4e3c64e183c5378a2d8f962e78a1d2b76aae00163670c1e2876c4d8a162a78d1d16ec28b17345c769470d9d3076b0e88ca1c3840e143a4ee834a13384ce097488c8d123674cce1c3952e44091f3448e13394de430913325074b4e10393ee4fc9003444e1439577296c81122e7881c1c726ec8899263430b052d2d01586ac328ace3aa6cc2300cb3f2e43465301aa9da8fd1444180060afab436a55fad51a91a15ad495b6ef7999fb750fe20c89dff7647508a67762c8475ab1ad49bd6047dfaa395ca1bd6694db55fc33655b742587753b1a906dae68f62926a82535498aa54f7a6caff492b154bfddcca190b2795ca2fbb853e9f57c1ba9a2aa67ef089da1f3bba457860478ca5efacb152d70325c84e9383b65c2abfa3b0ee1e34994b011ba3f247cfa9320afde2f9fe3daffec99e5f84fe81cf6f42ff68bf6d9e08fdcabab9f5ab1f7a345550fed67adbfe31e13d1ea0e98554bfbff50154deb64fcf4b7eeca484a149c55efe722ad03aa58481d6e97d4d622795c8c7b82942ff488fe32f9702e6ad27022452f961472594516810f1c71731e02207332a00c0132e4c54de60230a28539a08e189ea0712f8d1c50c1946d0e0439486192884e8a38f2a985e72a3ce9001828c103840810508360401c6173b2cf1822e3b088943f3629382e211450c324e629ab47c0080a93da2b0c00b2862b0d1f3811cf4f8238c2d88b8028c293c5872820d2d25e8e34b17289abc31ec18c30d1f9ac86892ea9eac94155a305166065cacd0e0378d216ce8630f15282186111d2c1c49f480c31a59f848830b074f57e031832857b0f8638b204f9a24510605357c11a54b0d783e70850bb4580197a72c64b083059430b888e20921b8a8436789091b98112688a836c4e02267e560b2a2a98f1a80a8018aab8b1e96887205192bd88106204f82b0e30b2b3558034c1e645a4fe60a44dcd134258a971598c1f92076c0838f16c8118326d607bc7881131b53a060a1e58ed51313d441071421fe98127523431572d850c41e7a94d962534215509870e8a28d2d51344e31071525b001991ceaa871810f30a26e38e38f3231a0f980161eccd02185cc54113f704b5bbaec2147193430028a33b69b34e89a5146956a53d70c329aa8aecafcf36d1fadced55dd5fb3f11eafe8bb921f8387b507e57ffc4e7e7e99fafa77ed13beaa913e383043bd916743841bdae53d3184d089ad5756a7adaa62f3900d9e9d34a9319d914ada9ebd4b405f39a9cd8816507dd8ef8a1e9874c0d4aeb3a35d9a0b98002294303e5e2c8cc8872867605ddea3a4571cacc50adae53142beca01c96854014faf0330b7d5b8dd1294a1135beb70e42f1590de442f17f8b64b587bfb0e7caa4e84d5da7283ae840575360d09c38343ce87c23d383b2c4c86440b92bb61f7060620b82b6ea3ae1f0836686e2d475bae106953fbb837278f05308e442cc4e37cc51bdbaab067550c38e76acf6e1c79983caba4e37bca06a759d6e18533f5af9957889a1ea8c9d230721aec0e18ad3123a684bf400c509a6ccfc8143964cf652165a5290a5055334a0c11342aafad11ef694d027daf6ec16f1ba9f3f1313530d4241387a50fecf843a85f8270462262626a626217e35900bed2f045262c30c185f9ec4bce186d0acfd140239412206486441c316523009d59ebd3ddccc59680bb1c02d552095baef1193d3e784cd733139b16dbb9daa4cdb7cdb60f3e6abda36d3368ec669686033cdeec6edb66db73452755fa3a9a9d9b6fb20d3765f43d57d9b1bbfb981cd3760eafe162e8da5ad345353918ae202660b67612a6c8599a6160c7418b55cbc6f9d2a7743e81e31c730d88c7143e81e23265d4ad82c3d62989473aa32cf32d89cc9a9526599a66d9c731c6ce6326ddb388e86a6863aa5b099721bd36c5c53b331a51bdbdcac7cb582cdab9b6d57dbb2b6fbe8b65adb0271b9cb059b5d361b77371b77abaffbda8ae52c22751f47c3d9b86b712970d516880301029b814c9ab94324161d36e34c9a2166b4edf9362ab55f4cbf1a46d586503ba47f3908cc6dff156a03aa81e453fbf48b892a2395079c927ed4dedf6f0251fda8485ebf09440bb1e74d3451d0afa7f2f6f48b75e02f04037da017040cea4df5f3a62808d4df2fa120d00a3584aafd9f94aa5df9b59a1950fee516002bcd1494c140a0168275fbb551a9eb81ffa0d5f40f75c041109e1d9d1c1790160e6b7563436b68b84dcb545362d161f30ed95f0e063e53afc00feacf0504bd5d9feeb6b2122f7577983c76e1c2850b7f17328f207adf7e7cff6f9763615f498410c25d8f6da0ed12a09b5900fbd3ac2ddce7f57aa99905c69ebd6ffacf769fddba4bee9f9ed7ed5f9efddac7ba2f09f6f6c3e8bc1e92d724d829800fbf9f172edcff5cfbf0eb72f06b502f31cb40dd8601738881df3fe3177ffbe51edfa337fbe5eeffb37f9abdbaa78446d121e57c89fd37a79c32ce3834f8eb7dacbaef43d0fe22296c8581cfd4e9af71877304ef0ef928f6dff43adf5f9bdd9c5e50630ebbef88b5843183f15fefa375bd8f5f7e9cffc997fcf23b724db4ffdb2afcad7fd8db873fbbfd91ff3577384750affc55097f50cb6efbb59ff32fd36147148e892b8389a906d371881bcd8335b7a6293aa626dd6af4bcc90bac87e6eee68e344ed7e486717c653e7314782626262626a1e9496e2862d18f18fb078b31c6b92fecb78acde08339f6644a2cca183189d116b318867547ae8a458c0e45efe5c5cbb190196342ed9caef9b3da17fc6e7fe86f91f82f365613be2b73a95cfd8e42f502545f2fd5fd55fb637cd5d891bba37701336095deb72d78cd57ff440c621e3baf1a6fceb1e00f1feb6027f50ad04beadadfbfe4cc5d7852d7aefe7bd578f31f911a6dfe43a1c6248c0cf7af95f7bd88dc781f91fa51146cbc0f85eca9f74ded6b685494f336974bf3a897cc9b73feaeea3f579dabfaa9f266f77d12c632604abe246174638fa6314f5216bb8389c5300cf3886118867d8c40f401a3238b94f4bf2235ff9140f35f08dc7f5f63a4f58335beb7dd16d98088401ff8a3da22d9c7e7254003580010803eb0490398003c8505009fd21a4a43b9edfaed19d8671d5755e7fb8adf04024d9ec204d815c0fcaf514aaac8ee90afebfcafebc7532a7c084020a6027de0cfe965b78e2b53d17e35a6a231953096bcf8cdeb3c0e0c6144bcaf183915246f4f8cb3d0f024a3a662de13a9b95133b620e359ae6fac3fda1e5da7346ece45cfc582cba5728cba628c3f9f23167f62f1b76218c69c0ad1db3cc6b89c0a5e1d6bf71a89d083875fd0f3ad17e7fe2b800935feb6083536911d030641fb8a4f24721b112295488563d4b84e357a3bc68eb15eea602c621d33f50bc61839c61823478fa170113d7ea1f3e34fd516516d6f40c18188d0dc12e243998fc30b659f29651db625c4a9d4d55f53a9bc8869181667b77b42f4197c7d6e1b65255e8aee34b06ff399b921eca1ab4a5ae5ac527a9f7b8b7513c3b44c158d54ec638c9c0a5fb1f8edd8f43c29628f7932c4c855066378f80df8b9c055586a8e8d32d3c755e6c6dea744a5f2b314fdb8e95b2e022db4d0e7dba8ea5e1fb154f5ef0e0a49afa3e40c9ae96b269662292825a5070f875977b1a05b46ef73a1c6f723578def1de6bdfac55f78b3cb05cd68901f3e0bddb1e7fd82419d058d516e110c7a716e85ae98e73b047b4c76bb2f0c9bc161c5242603a41d032d3e7791792a7fafca92bb8fc5414da9f424dd228e3d75b11e021121f29bec5c1c917ec1c700e5ff8854c855c3969bc63ddf21f18b358aa0fa737ce786b088795b29cbc56255f73c3631b7397d5b8e05676e88fb0f85edbf117cbaea3fff6355df5cd00716712ca800726cd41504812e007de073aeba799f6bb555794edf82716e015da5778445d5fbb5af717737773777f343e66668fae8a0fd70aaeb246043082134a369cb767019da65a0478c99994c19facd39339add21b3074daba1cced3dc7342c53f7218c82c0421f4a1d424d898e4ddf246741e7dcf46867ca827eb366e3f478568d8bc553c3a5c095dadcac6e563674b55aad563934ac27f69b950cfd66855b73d304a1f16029b3dbf1f48b8c73d59c1bfe76dfcd1c74cb18e329081e05b5fb18d8cd4e051a4f13947f9bc2050c9dbb1d11bb87c6df8ecd6c3be304d54573c3474d15ab31aa984f4c4a47774358c5f4313652eeea57565dfd9252ca393533b42dcbb24cd3bcc989d6961c9e702a3910510508f6c67c626e3fb89c4b0e7c8a638aeac8ba4e39d071868f8963c7995c3c39e0e1399c81bdb139059132c674f5abd56ab58000d1a1cae4b06845bc0a8b0d4ba7aaeba40316ab296ff3b251a799831f3a4c91138707bb9def9029404ce14187291da29e7abed1934313aceb94c393d775ca81cbb3c4f840ca9456d749872950d81b7e85908dbb14b66a0c47d72d438d38aa8bbddd1dd2be43322e884c79624a125055ccba4e529ef02d02bf3f6e9175f5abebbacef33ed87a7a7a7a3ef800e706af0d046e88eb96a18698eaea17081c0c5e41e08660e03355b543fa41e0527871fbdc71dd0e063e53f95fdcd00ee9d7b99183ae931428d5dc220b6d3657bfd6eb11acf0301ec63d4c172d5fbeb8a3d1838791d2c5c3307fe92285f94b1729cc5aa47ce9f224a5cb93140fd3c5c39c119fe2d313f3537c8a4f4f4e83073578180fe31ea68b162f5edcd1e8c1c348e9e26198bf7491c2fca58b14662d52be747992d2e5498a87e9e261ce884ff1e989f9293ec5a72787e261c0f8d2454b172d1ec3c41578182d5ab4c056e2a576af8b35d62012a59623d4fe325084629ffeafeb7e9c83a1cf17a168a0ec101b3c88a22d84820004b36ba4a9a169fba46dcf77c3d402fa452f0d390b8a496daa326de3686aa8cdcd8a85d302c2e3cad9f6359d9d4d270afaf46b3c57180aaaf69414cf16646330ec85bd04e1c0c5e286a6e0605febe05bdfe1b01addba807e2a290814bd87652ed0a7a3c74e9c86536d6eaa856cbc409ffee8c30ecff6c10d6361ee0a5b612b1ba3b8b600e1ae7016ce12840321361dfcb6d14b8412c24d81a0aa814a6a5f4583056a26551fcdd44c112a8ab7f114ea414f08659a492515a1a8977e26a24a156eaae7838df3a8e5c8403015a612b580ae517c369e12c206a19e34910242d1e0167785994200c0a646fd2294c6850c973400b0af89a0d2c005c024310275e4c3b93064a340bffad5bf5e6abf16806dfb073a170005141410e4d4807ef58bc031a05ffdcba5f66b02d8b022f017406b84aa81c80e77e5f5821e0c7ca6d23028bf26808da750225b84ea28cdb42a2931b5bf6d58a0e8e56b1daaab99d75049d5e6a6a00f1ad10bece8a5f6eb8cb0710b2809dc196e8aeb638154521f8d4a2842411f3454522aa9a1388546c2c6606809db7e93485dffefebee8b9ba294bb32a10f1cdc14048a13f3a2f7d10abdcf5575b805788d505d28ff17a172b82b2ee8d3bfc15182096dc2097cc2f6b36d24539b172842ad4f7f84c1027153d0a7b95847e5a6fa3505e5ffb8a9daafedf0dc3041f7c270c30d97135a7fb1fa6b5a54696ec08dd29b9b150b562caf52f77b8ae452f7bbb5691c901a1a4ad5b0d95c3736ab8d737058ad2ec6e84c2e9d0d6e855107ca3bcd1364630e3a80bf6dfff07685dd17e3fbc28fafc12e56afcb610fbbae58e460f32e88d6c1e6ddc72b20a076b779dcd07a5bc7ad00cf9cf1605b61cf9cc1628410421863841046acf360a36a50fee8eecc0df56c44f80ccabfc5408810104078b9fb0bbef6da79a28d365c5cf8aeebf8aed36d4c0e842ee80e1d88ef3a165b920d0c07ba43c99adb3686abe058a15cbf6d732ad0673fa8e36a1b23a7ea46352597a965369bb6b9c49c2a9de2b65843c35177778f5c689cc915d42eb7d48d3b507e8c8352be8d91df73a16f63b63ae5fad4768b64beeb37aa95effae7b07f13237d6e3042f9db2fde218b61d01d02d936f65baef8b9437788457d04b2512d283ff45d8f100cad0be11174d726c636e6db7d7f6d7dd731223a39bda3c31a8fbbef78bffc21f4873c3b3a392e202d1cd6eac686d6d0703c3d606ce029890b943c01c1dfa710087adf44df4c43c42216e1f01582cd364c08145b48e32d7613faf47bb7b3422db485d9862f44bb95346dfba7bb2ff673555bc8bcbc18cda7a4eee3d4855dacdd7dad799c42f99b1bdaff7654e01d159c898989a9ee633556a8c23ad58feb14ff428e5106104268e402770f3a6ca8877bff3c7cdef7f606c25c2ee8f3823e26b44f7f3fb7009d0a3d22fdea57d1b1dc34bc43e2ebd456aaf0796b9f7e1e1ce8e7aa0d2442fbf4f7ab022f77f8ec759dda60628f37c0d8e2471f48a86048184e6384f1851b2cbfadee874235a17ffc65e74e4c4c4c42087d3c15eba918151bb04841061757e8484208fbd93f22540c2323ca948a45af0dba95d7615da71bc0d06ec1969d9a63b818c3c5182e4968dbf3695eb88c8fe5a8fd124cff3012d78f17c055f624981d42078d02f2f66133e827c1d496aa120c6f431acd0bafb26c41595620ec3916648581cf745a43dfb00e96699ffe2da3e1e84639e8c1a81beddbdd5ddf5ddf9d1fe34f9c0debb4dd223b758be854089fd20ec8a6da22b36e11d99100cb02f8fca6c25f0662ca2afc662038c57c3090f6fd2e08843d2cd22dfb7c0cb4ec9379c73b849fa7c20adff7673efcb93ff2e16f0b843d9c53707243ee4130fdeae7e4a0300fd547f54f99fec9be1f4ad14ce5fa2ae7b6bcf0611f0b84414db5d1fed9f1e70a2b843f211006a40e399884e0471b6e087aa958c7715b535a23c60acbaa0ad7ae9f5c11b1b2b24a82b256dc102cd3af767fd87dac07851f046117df2194ea57c3a87ef5df704310cc0ee9ef2ce807a76abf06a67f342ed0060b34e1d416d9dada199fe6a5f6efa7b5516bd6a71f82d9220b6be0990981e0d4faf4b1d9b069996a4a8e067aab2c4abce47e3346db2dc2dd3bb4ff41f80c3de85e3307e5f709b7e5d6fb4430f5451e286f77e44d75bfb9a17dffa03bdc768b6cfde0c2670f36afd3403059edfe5c2e9efea1cfdd14837e93f6cf378130d9b47fa0d7ffc19ffdea8ef6abb97eb3d60d765cbd53ed90b943f8e1cfad8168c3acb6155ff7edbc5f50be36bbb902acf12be48664c759dd5363dfe57fee1dce11ecdcded6afc55e07fe275f763847502512636f42169e5878ead7981b8abf0f7dfabfedfd59fdeaf7ae69bffa3340b77ed1b9b9c00d571f2e974e102e14fbdefaf98b2fbfb1f7ff8e8868b2a766ed9f5206ae8c794afcbd5b42a42a81bff5cb839ee48eb285193366d4d8a279214d0d7bbf96eb21b4ed177b2c45f9995b404d5d3fba36f33c853a37342356b32f97f9b90694795dfe3933733373f3c3a8dea69c73ae46b33b649fa343db9eafc60a0452fd27b960b1f29f53a9fbb1ea7e0e3f36d6d154559749419f7ed84181821f871752bdec24962a536baaaa2ef3a34fc8a62a6313a3cee48a11eb68d57ce32c284fa13655477a915c6aff944eb55f5269208905faf4cf2afd48ae3575991fedd3d9142707fd6aa8d4fe2f9baafd3544f4cf7744a50688fec1bebfa68a63d34bfde0549669a884aad80a33390b328766666604000009931640302820100b06e469a02af2031480106f924c524a2c1646439118876118c55010c4308c2104116208320839a4e86c026e1d6845e8c04e82845ebc5ef04e18d9e20811eb216e3b77cd4ebf60a9c3499c40c659cbcbca4e1ade047ab0ba7238f19c19703899bb3c2a71a709d353b550a74bef8544e06a11e21b41fd55ed9c278ad4b6f6cdd660b8eba5a62e67237939106045530b83c2528b02ba0e220461af86a414e6ea015abfc2a1499bc1f7aa0c7633a24a4531bcd90d99cfe3e494521dfddf4ebe2bccf996a1559ced79a18ab4e6f66dca3e2de08db7695af7a2ad099b6cc0ad524c731c501f40d7ce2e1ca6f74213118fdd8c419f969d8bf2cdcac9378d8eb98c113080e56ede02e1ac92c4ee328bd2e99918ad6522f7d7f8e1b62e4a12b8ea1433e098798f3a210a90f373de4b497b6032124096ffe7332ddd41409fffb6f40f26bb130261c3e18fb0a7d447ed5be595c12b49de69c7b676b4bccec58af9c87a21d9e443b04ecd18dfb38362693912ee009e897e7aa14148fa5c8db0ff4ba22a778a2f43a2172d0fdef00cb42bc633084508ab6913a8f84f768d1efc87871a8ac0c8e03f593742061ad7ae34bb04b17dff545834e67d276a40ef76973f2e76cf64a0b095cef4d54313cec9bfcc1454513e0a24ce4599aca413b92981f8fc24332cb8aeb3a742f0eb646af6c667a43f7f22ca44e7939b7eff0e1046b8c10fcb004ec5fdcd3d9826fadc9966087841feeb0e44d68d98e64f50c16d43d9bc375fcfa78f3001bdc9b980dd2a14c2f8d087ad594807b0bcbcea32c41fd8bdad1e262227b52a468977e90e2dc3a103bd38b8f5d0c11de620870e0ebb746e9f5b14cc5e7712ab017ced16a45feb0a8ca188d25151aaf2ed9060078616a0e49529d49249d645d6e63a6e0e3c0419597a5f6145edc14c822ac4ef52f58b9ee3e29cbfe183589feb5942f7169cfe4dde5dc40d5d91ecf85d1bbc2c4158339695ba79ffc2521075c50de126b4be9fef9fdd1e31e38a0daf4694ef8dd242d1db66d561d05cec5bd13cb90968a8d9bec1362c53a4110dcdd4ab93425d1ab1890148102a913b5f11ff45917a0d8a2a22cf1928d6b55c8004348bd84bc02476ecdbc193da938f02449036d27e2421b40cb8fdfae2056889dabc23b8b1ef142913546c84be18538b06702adca197e3d2bb026d74c99e7d16b08ffe955b38aaeaf3950f6d99c1d89dcfd27a9fb0faed70637a47199137d351cba8e23a1bf19e7b7dc60a923464f2bb6414c89bfd5227caf46a125380354ad42d8ab597c379a554a3cf9053cfc1f55f7bea4d1648da5a93721254df0cc28d4d21328b0e443234f726e817c3d52e97e1e461c2d905123ad4939e84fcbb2e217f94636f17f63fcf6ab8ac20035eafa43f8ee93eb1ea80eb2a3739bcc7a8221545ea67621f9cca6d4be4917bf8a64af21a89c5b18577499602687d57501bb1a0cb8b8bac0cad6aa4899a1918701416046accb60c6708a007008193a34a6b2272182e880a42df9f2e36550371ed81a31d407e3b0fa14e21a66dd2204edb97a8fb8e64744d2391aca64d2d1019031b0538a2df4f98f52a791f395eb6247406cdee51685f52e7f402e7ae95764c7c545910a346b1a5f015e9d5acae6e24897761ca21ca100342bed4d29bcf582aaf5040cb10a04e3d8886171ec06c283240965c5bd19a44954d6d0d15850969d2f596a2b86d393817bf897fba2238286b5122c6a0d2e07381e6304062f718897109cda80402c30e311651c81709c5ff48d21773cc72187a2ab262ccd49446628402139c7c016f4aa05214236ae43641944e89c617af8944e9f4d45071989c4c5a7b098afb978253f19f98a72b828362092d6a042e0d3e12d20c0304a61e111a97f08c0a202ca2029d7c166b56944269f25f638d83f2a0cce29359b5bcc819328cada351d957ff93456c72221228abcc7442bb95559bf5a63f586c8e281d7ce2ccfc4789009e1dbc17df1ebed91a6d0285e8c0b56329a51b7814846f0236a3e7cc762a4760f3bfca4e459836547898714f29166a8f4e842284b56c3acdc2ce6173f3d50faab5c8faa7c93b224a9db785d39a6cec0f136021d4d561ae7c672b81849ec8da916ab38005a203ec2a6ef9f69f7e117b158728b28cd94960c626b7973cc41a96fe8c2844a641841422634682e119dfd9b2bbba9c435c504eba861420f9073da796443c12a3a1803128de4f6d7b243a42db611240e191b03dcd6d276a2334bf5d8c37e145cdce6921f1f6d43c70ed9aa50ab8d42766a2d1a7d6822d04ef6dfec68360587a85bd06a69d9dfba1c596a7550024dacc3a29ad9bd1f7a99ead403e70b3c261248b8745d62780bdc01068f77d0e53cbe5776e23093132236f89a85ddfba5c276da840922cb4595b4b6019b75c88e41870d08aa14849f8bbaf0bd33a99d4c81ff09dc3bf40e667a54a92d9701483e3a5c54df126d30586b7163df7568997d9527c4e89195e5aa5128c66d601858d80d38492bbfce4854c92c3518926a5caf8245d33174fd7237a735c888852cd96c6ebe1c381a4ca8ae01bf4c1bffa90e80f8a2cf453c5065abb37581e14713e3d3311b754a9051307ffbdd74d79068ce17cb35345fb4137baeb850519af99c2744bc73a87241c2b2944a68d1015954aec046ecbdc63e944b874640746b5232e8882f4906b9e75d1754770a4724f01ace10095f41ce115be534e8f09ea766494a8a66927640e156bb590350330d9f834ac463c88d27c4c86fffeaf585efc666abb4bcadc82702518b0ca6ccae2e88b1764ea5f4c5635519a25069deeb8d5a90f8f42096653e2d953fc14da0759a30de5432867c3a7000042f3a9a98042906315f7586a264bf326cd1e1851ae05727cd85093d9cd16baf560479f7481ddaa2ca101a72e68790624d0fab73f7f019fca41867102ef7ec236f380a1eb5e4bda998e9a76a403bcdc924bb865c9e8c39c2d0be3eeb95c25d568dccb300fe531ec645a22e2d1c50965ce8f1d78a79532400e2a2cb4b24fd407c5610a8713e0de24574c70f40b1edd953ee501d685273a1908c00852b0ab3ec8076b35946201084549eed02a06095230f70421559e7f2f021060dd2fffda96b0b746d3a16e8d6a69cd2d49024f6618369aa87614f8b34e737c90e961c8b4c23a07826ba8e224f6e740cd5389bff5ad8454a4746f45ad6310884ccd1bc8c660f0878ed604bc910be66b335482b65d87ac7e00485e9cb9200f072ddbd4564fc18d20b967106e1215b6fd92236c57a482d8fa33c3642228de3d2c4d189368f9592407c4f96112c6c3a27af623abf36fd331a4aa02f16b7e1451e60861713dc729fe038149857d5104d309341b3131742c5449851da12988fbf459d1b87c284ed6a332888558f5fc458ec5818cda3b73dfe2d190102d19085c02c9f17e20f9b6704a11a3703a5eb96e9ba01b08adc90df064e83646cee35f3b5486c7997ee82849672c9c5b689eb54e26c38ad53b9a4241e1727ee9f1d0dbb393fbd76324773d4d81e56a62825435cb6a81add12e09ce74c1b9de8bf2f6cc83fae32faa27db25f39468a088335b4dd4e40e5d04cfef18819c5094dc10b32d06513465b5563398908d78178ee54a258c231b74b0472052487d43fd3ef57746589db97893c8d4700bf76229886bf8e91a744de9892ff6e7ec76c21581664af80de29704201485df1965edf6fe9a55411f8cc8901d7daf0a72e35da2983e254c4e83e22c53e1095134eae4edc04d160fae35fb80e4399f7c99b42d28d558973a2f61622abe08deb1358b893fc4fc24001005ac4258a86938041315e958e8bf8b05ca0a67081bdcac905e17e0e06ccf272b3e92567f733545e0842c7f61778f66f117c2b2e2d3f21a18015ba38600a9d8b7e8079f1be751a0148f36cf23520f6ba49f44ec6b482a7fe2172c98a938c97ea3250cea9140eaa4e6b26722dc844e90682f705677dda06634073eb0d21b23d1df3585ade8de4829037121e7a8e4367458f7be1872df36f9b8dd8c8bab51c7b542f569ae71b9a4bddc068908acedbcaa5586c1232883b9e37418cd58e2dc3400fd08f94bbb56dd0d9cbeba608fef1c025189e61f4660ecdebe07777b7fb3bc8effb3c97cd4da2ceea1fdac694c2592f1ad0e6c58c58e06e29d636a9179632881a6ba2436019f8763eee6e37e61bfee076d0656ca859a8d626b2850bde4a1e5e5ab419917b30c4b09f8ddac7fa904493b67fc4e739b216c97c1a87543b4045a995aa7cef5a647f228f94a95d997991dd007de07a46aa5f82be9ac9135a63d8dd84f2399092a6398b51e2c2425b9a67059ebf32e1b08fccb8f5843a127ff0f289be177c5b1cc0dd7e8b2766d698f4ee45f2c00bbd8fda626af0445e6d8cbd9d108d03d595dd6f7707f900692c460c1eb4877f6c9dd364c7acc89714d7e5f59133535a100038049c9de657cb85deb3bca3aaeee7e27c224fcff857c75c5902ea27994a158daef7af43bdf1b0fa452536fdadee67192e5f98e4361e867d2fd10eb22663e27bf05518a0fecf983e3e40395839e6c3c67433059d4846693f0e63502c8b499670f8298356c298a05c308ed74f505124df869b327781be98154f1f68089b2f39e50a7044d02caf88e8bd0e84f2109fceb0a60c3930a91385e4b044122461a16044bf61966c5c0485b2e424410f1f36520e1fc6bbf08ef0a5ba4c0a17fb943c8ec97d54520c94fe048c6057c728876971f742743c61f2d3e6be45f9603e03dcf57df77e8e53d3dc0f7c60a4ef52c606f6843a25e9f52f85aa08c92cb46853593d0c0a15998d972e1280fcd1a4e3c9ba3b25065b21805ea68eb82333cde49065d440d195e28d8420a8d00bd4c49b029b0ca75260c0e32009922cbb5403cff45cfed97a6ea62bdcb16083ddc3ecb39fa89f22f969c0e7394b7fa945a4514e0c1b520786fe91ab66aa067bd2403e9b08b65188b5e3daf341c3b909c5bf4c223bc549c2a2c31486adc95a8f34654371046dd7cf582385dd08029610647c0f0d6bbd0b7fa7552a4b1e517f0dc128462c1ff5c4f82d20dffaa2e6b2913c1bc4e2e8d86e6c35850229f1404ac32c9c507d27137a5e00b909104ee2ba9b78b9fe4a7666bc5d21af354fa418fca257e2f0f021bb3de13b732b44629ef57bf2a680b4803bf93869ce9d8c5f3e0cdba5197113901fff7eaaa043a411e66f3d3ee8867b025dc09485c43b6a59a6adcf06175d995a70d8c11eb8dbd445cbfda3c701e346cd6052435dc23217a03795392df18d2f7eff39299cbb170fcea2e11d158714bd41a17941bd7ffadbcb786497a876d312bdf1f9a097665e8d95f6310b278a5d8d337eed493a002676fa6d4d3141a741cba5b4ff9d3a4b566589da8da384d68a48655f694b1581a44d4181c3f7eed9d7a5d84c0c22ce325e5a33bdbd26aa02eb65fd2baa693be30080968f084206251ae1d0b94164e4374bc0a613f4a453850a94de75d04ae3f3dda35e01b1917e0a6374ef65c092e88420e1b03b4624f8fb17a305f95a8b2b3ea7add4606e69d73772fe86709f84433c0d3a70e28299eb51629b960b4cadd2e035ae26384870fd80217cd9a6541077a26194423ad923a298c2f3f76fd304aa32cf4fd7e2382194e52abf016a1b8bbf29c9ec9e1c31d0ad527f99a3b0e24b6b14b80cff3dd8d41496c7f340e0405dfc118dfa36267a90624cd279f7ba689e5c30ceff933a9a96aaf11502c72735174cf3ae950613a249be10f7884eb9aa06a58f4cb7f499ac0214ea7d929d9467a36c9f52f576cda69e57912c92b25ae6411842880af330bfbec515be9cdc5165a1666dc198a69c05c242ab076403950a48674b800718f496749062e95103de8d8507244dfdec36ac9983b74c1e7c8c5430d80a0793992e536f0d6fe21bdad3916075bd8b056a0b4d3b49a9cb05d1b132ce2ca172d32ac283723e8170230b835f8a9ac0883f42d4c4c01d9dcbe7836b2dc29f4bd3a33fd54729583d238c239651c9e86294b0589a85a73c962621002be46120546207550adec9a7362a20b4ea670498249ae45a5020d4999e537f648a2d3ee4674e1d66e64176be864465e42238a413c5cec95ab737b869b01fbbf1bac0e6038547f4543f476a6401808a4a9a4e5053f1f454933280c398b228438c5ad46ebf00c18b800384b9865478472b3ce6fbe648536999ebdaecb78a2f5d04715b4859808f5027db5d73848c545e2a13fd447cea42c2f2e51fddcb87436b2f2e8c8a1430a98bb0d3d27f7d32e85249d90d17542418a9a8e0d8c08200909ce606b42e9ab9d918bcfdca46bc8e311da9dd64c6a26d7984344d2f9123611a3882cec5e2e99145ccd3830610d65ec7323c90b5570a0ec4ecdc27eba3c2525add111870a300e401094f903ebae430511efae0fc7cc0393658992a893344097279d0b0997787deb806f2ca9919df7cda400c617533a65be831b8f06c8d7b48d01c86b92ddbd5f2db8148e6f999508060d010eaa79f0cd5c3ff8f208800c2e928af7de673d8e7a70e076cf98c4c1a07c3b84bc428a86b09d7c49a949b33a1173a63f7e003e53ec6d6af7c2f327d7de4a7265d5006c321d28404cd485ee7224f796bda9af82ab29b14f4b7021ca4004781f20766024e1a56759d0b6f8e277953c786c62dcd30eda1ebc12d931d19306786bbd41daf516c134149291ff4a3de4d702d1cd663d9dfb6e6bdaed645caa40705e68a766ef9e098e8b1a978fd09c2963b66d7208fddd91c81eb014c7af012839daac3652a1631fa619fb77215b3924f96daad2b29ee610b76c3d78ade60b9a336e0b4170b67a72b72b152d98d3e2d4e1b9065933b6b45e1c69e01033746bbcae762eb1bbb2c908cff31390514f6d40d3cd76b1c6a8d6ce4ebf47f47fecd27e9f46d8c3195ff7efecf9a36129bef726f5e73fc55975d230b693e49d2b9155931b695bc73ca25cd1a184311f61bd31624ed47b590b9b846d36c8c9f78b42a6d8102c657874f9a2de25df58e2a6c71baf84ffb6299ef515b52c4c61a2bb38ba3693e0ff91499a20717dd628a989b668272dee5278c2bb662c7f6f8199af74371635c9ddc049b038018135f9494bc339243af9cc7044a9ce3b158931532f9368bc81be8cf454f06a9e8cfe6d30792c227e50d5c599c50fcf7afea512d353c172fa7d2761168dd9039c718e5ca828286e7ccd070e5497c3f21e1f60fc5052b463026affa3319f5709c29453e72fb041504a8ea1496da8486a296c19ab1ab550fe3012f26a8684a9b5a974a066969f30bc0d79ded0838b53b8e30fe1482e1c7b8a0a3b1c828148250f9ef1167d3c4b178f526b9b231b8c08b0a18ee2dfcf548893caab633ce0e77075d99019e1119a84fd538d21a4c33a630265179a2d6481cb974e5790df54bd66b52bf4e29750c17b2b0037eb6eb1690f0a454dfecdddb6160d2af1c408da621adaac7b88c3bd8242dac64043444557c16caf415cdb83cd7f4b85e7c26f2f771d1b104a4bafec31eb7dd354a7c925eaecb60dba35dc8f155ba9be0cdb04a8af8ec895dd770c26f1074b7fdfbfe7b23f2f1d0985d08b027449e7ec587316cb9ce7c83e48c10822475d3d18da90ae990bbe807c7c5ec3ebd1ec5b28b7c20ed4cf190069e6cdffa50a24bf1494003db9a7aee9dc4333e38bc592e0835f14b56a1cf2bc947de60602d190eb398cfa3227cd5bc6f05a649e3383719038a6ea907f0f32ac844e42f28c89c0240fa619831042a9b95ba0fb5de6a5edfd9f9b3d0a0e5148a91c4c94827510ae91682379b3ce7a85dcabec69db4dae1089cc3a643645437338f1e97307f58616e289442123822c6810c49915465441413e2ee49a1a052e21029e18de75977ba3c12c21034943542583bda0bff12a65aa71fcaa85f051bb3caa0ea1d2462b1318f93a022e8542af5daab42675a13664d00a19121ba86c9f5f9791a21108acc8e9ba78e513a708b24bb342fb73b4544ab4828fd8c9fe344fc6a04e2d0b66b9f0cf549f1f3d2a2351afe954b1127812895d947914f253e0483eec7f8f2357b18a0fe0fdcd0b2970cf4445a9187884e6d0ef3ca0e3fd3831c60261c88d622f1af89449ad7114f18808064f1efc294fe47540a82f03026f4430be940cfea33c7772edef381ddaecc0262e0561a0209e0a540cbe6df9ef5893bbd65fb26cf4b86b2089f70249b1b72c7f3bcea6eef58f784e4058c1645d84b25c056e200eb117077f25a502c6813fc9115a4d4f94b251de458233ea640aaa5ef43601af90b511f63c0d6c27545bd5f619592810512c64dcf4cc2c6fde43a54dccabf5d7cfc91a992d152516584c62c380faf913d66ac8fbf59f2cb682d9fbe2192482977735e7390d3ef2adeb64124c70824562447fb2a16d5964df6f691703a4e530a1b15c9925ed3d6c521a9cc8594ba6c9c1331a0186e44ec4cac40e58aa6bd1a4631c97f5267eef0a633e615ce4fa1fe3627e9a980c9e4b1ee0c67efa95146ed8b1d2f5292d2f5d1691a49a11e0952f9eb02610ac85e5c11f26620ebc06c5938bd66a0df9c786ba07b01a452864dc2d4dbf44f54dd8f2051758067f5c29d888bb94ad5108895a030d6539db3404350e2e6e6971c174b22773d22978b8688cedfb8ff689b5aa9de91bbf331cd310b4e61c370e31605c0437fb28348d44524f9ed894939cb69bc3d562a2413ba8d770b512fc4a72b62559be9a9256c749b23d38eda7aa31232ae9a3f66f5fac615834fb838940aa5f337baa83d84aa71116f2b3727bea8a8281281cdcae6934d55296e8cbb049cd518c420c7ed989513e5ed92ecc277bdb600b9de17daf3d71028bac48fe447b068dce0c573b0f45d666f687b0863f761a4c51c18dd3a853f59e39483043523d4d562610eb93ec06e0193339b18add93ab8a3fda27a075c547daf4a420f92ef9a9b269331be60a2850f6d1019fb0f1652e8ebfd6446e881ec99a8bbbf45352d9fc9d782e276aeace64c615754d7fe7eafd4ac253019e3c93970dc24019d74f0978b3e50d4d76452d7d661ba89ac3b913e18a27913db0e090fccd3ae304533cc8362145477acc8d90db818a8f5c623ea6879cd9064a7eae733ece8724dac1173eae3e2fe51a860865d9384689fb5047fa32ae47ee198d6222489ab1539eaabad0a12f6ac37a8859f176e321b04ad0b4d3ec8806abdb845df80ac3d04c254ef3a1d7500f8d1401831cba120a1c1149ad4bc7791bd01f639e4897d7a144073493a3f8d67c704674569a161caf74e3ccd94dc27bb9d4ed7cd28a998b6e25e202bba74b8dc764442ff5c254020c360a0cbd844a2e3c57b0ab2e248fc0e34e5223974a30810837e252a5291a078e76b7f1692bac80927a74f4a6cc982a1a8919b04371eb4d2aefcdd61a0f04c594887bdb80c37d16812ba5b3c14c9cbf02517a58c99bc16f1a24770f0e154a2707a811a2e86a649d44b238a4f19dfb089d0071f8e1dbf588c77a07be1a87217cb170c60fad1f689de51e105097b69d3d1bf67a0d813865dc1b898b7c41b5e43875b2f9e38205508ba7979c365bfd6d0c9c8ade7b1fb663b9d7ade2aa59a8cf69c14d9b6682891ad95b92282070462046fa5aefa07e8adfe1a0fbe7adbd50547366476d21041e4fda261972d150c06398e70bcff647c7060b854f0162b67781db7a42cd0d41c43699e98f0cea68c32ba4b2ebd8ebec916182f9aac97a2fa2d3d4a8c2eeea52f51ff028cc446c6cabc4376f2314f746ef069c41b24d95dc6fa12d1e5ba91cb45d774069293a508242fc17c40b67cf2d46f4083008015d38f9f197597d862395113e428585337f213a3ecb7080209a2527b4726a358ea27541aee20dc9d8a0222abb6a0dd827ab7a0fb2ef51c043edf06941cae78fe6d0c5678f65a9cb0c2310cabd24bf647bfb7cad7ceff64826e791cdbc8c85cdd4c2a2f1685075d3429c1d6d4e83e18c262153278638801c4d0ae81694683b7ae2421ac7049cf0491727bc6d5621cf2c48e11c23ce0bca3705676aab28fe40cca1a20bb80ac84376c653b78ba1b5fa6a5138b0be09fa12a1b10923f6a3b18fa9487e9b3be248990c7016e9330a34f822d70d4d70415a9e29f21e75f364210ca91f5dc009a9d071d7753cd3f9779606e886c05f07dde7521172ea83827b41ddf2f62537a89a5f3c72736735460ee03f44a208fd9d6e69fc477f9c73f094ac90f7a28f80db7e17966cbd80e744b409ad21d5166f8c074a5368eb769cacbd63d8c48b8c871e46f7f50f33babdba084af94f3809e80d764152a22eea1520b9d28d4a007ffd4d7c84ebe3608f76726167d4e358980048c68a661552dffaa182885e71323447638c3240be03bb3dca1aeb6413fb1d06c30c02bc77326eca1d4844e0785e4d81c115dd594f4522d00b73b9355093eacfcb7ab865c150a67661628c83323f4636bae5262ba94753ad9727204c88c17abc8d758895d2f458b639a834f840d7207399c904b15e6f255f876e10dc58d42b38986d9aa8aac762c975688b63ae7dcf200ac1456c3a50dfde50df45d4a763659f65dea23650c7260d34bb23ecc5c1be07f584d1d3f37cb1296a1ec6e383065727bd4d63c954471142a1dc97aa889eef5417f3e6737587c4fc5dd64a6dc1372f6c82653b6a066a2596635c4315bb3e009818c00618dc79a901fc4261b31d1549e785dd39832c6a737b01327a3709510ef4d24b90f74da05e22dce8f8bffe0b62c810801aca60e64451c91f55791099bb2281f12661c45e4387a441b85045b47936b3e5e8d53dc4eb7cdbea66e1be4bff0f2b805a8f12b3756e1751d0a585bb502c44cdd9330d1eaa70396d176d756bfc2d4b9f4ca4f3e33d1217810c9d1582ff949d20eb0c0f18d90a375c925f82ad51f30435c4f0b7596ef176442058fa49ce32fc458800625b706a5f6fdd34b52d92ce952a675bc4ee2647a140525e8dec28a0e10e3eeadada1e151b112c12eab0df8f63306ae8f0e3ae361598eee6cf2d23974783f82c73aedddece47fc8a17ef31b6cd2f0c99bb516fbe764d2c7a4f9a4296a942d32ff885fecc0a7298acd0caebb7cd574a8714a6910de9046c49db412c2056f3a0511b1f749eb2bb0fe47fa112e340b1d61fe48bdb9146f3c357667780a3b1025a645e941e2021bbaf7e80066c0906b6a1d7552e4b0a63ecf5e67b9afb1edc5f7b9ab162b6935f7e47163ce8c0a43872252613efe3fdcfedaa62069e13dbc0082378f7ab10e9017d5ad1383bcd67b71340dc9f4f49364e407533e62740e5fc9f9ae644e62647b76171117e00c7025c10ce3da9c2ba904930fafa35ef616c9b6b8925ae8d4f4eaa80e60773d42c786871f23854ee74f1f34bfda81f63df483cba4d359a4a40f5fdb1a062ce463f8b95788e255c7e4d292586226abd68c7a66582fa71cc443c75ce9d54ee3c0eb4a073b2495b4aa10b9f7f3da73c8d07d180e04f73ee67516e3e9921863d51e0cbbdd5f386e36e5e66b777ff33086e7ec76c073b401cf54337233a1fee7205b40cbaf158e60d574073a48cad4b5299c7f495a3aeef1dcf7efd22365de74b02c565bd8caaa14ba976e8af523c5a69066fa1d965283337d197cfea37930a73ed50c0a85659ffdacd18d7b3143ebc25544449c2913bf377894a45ebd70bf642fc3c7028ea1191078f8f6328adbd5764c1393b6bda9ab3a08dc5d053f1a9adac9bb6af25e17ed04554863eee01f4d780595430d5641ecf0a99befe425aceb8b38c0f125c5a545148270f7f37f426fa3824848ec0200d063c23b565803ee40e5e055099b172908917cb78c4b25341c5fa430824c25fc17f4c2bd2b843b34d27e3ef18f7782e9d98e39239c8b7caa81a3abdc62507930bde32a90cd8313996ca2ecaa0768d960a02fb6fce4a8b16dcfb479eaeeebf9e66dcec1afaa2c3c111a21a2d1e2b379a1046e4fb0b3b7c3f330d63971c4d26f74905fbbeb950245ffc905a6d1a3092a79a00e9d323ccec41bf13f3a9e4444882147b4f8b4cccd034d70810519acd9694a7197c0f0c0915d83eeb2c2d8bfa1c4280d4c46772eabb5cf0c3121cc019084e5fb7d5414e409fea04e64215bece25a528558702f354724664322a040853fabe33f6ddb9acca88df0acd25c1c3f108d2b8e20f80def6d29c1cb0f0bcfcec24e98310b6d0e072b59f3c7ae58403ca08a5b33a4687c049e3c824cd5ef2a767d9214c6dd363fa0c95bddb227d9040575d70a038afe976d83df0553480e0b8968fd12f7a8e904616717d6f9ece5d510bab8b781b2b888779d37b3512468ab4c1a798e0b726db67f14b4796861a0a51eb834470e4da5adef559e69af3fef4255c93d9eb4dc490fa817dfe0cf920e8f2895ca7ab426040796824d448c607672a41996b1e4d7d0706cb03a20c95a728db3f3ac70535567fc9630bf8ee476ad145e2602e7b0227621ada92584a5b0659c55309a7e46f2468f513f6cd3d49f185a790407b49d5bf1218e854c23206a9141813c45b84c4b6dc56180c62ebbeef4a2a70504f007d892d223ed8fb70831f770268283ac05cd861c05178fa000084de34a8228dc165080f72f91a624b757a8c8870e8d02485cd1fe2174a875315820e7429fe4a70601c50747e63d5aef4d9c374dc7379095decc2a1a1e23910c26df3e1d74335ebfef4533cb778d2f0d5928e7ab28648c8fa202faea06ff31e316957f600f176e443f9d4f940795ee0b9bc9bfba17d23420ccb2490a3bbb69409cda6e8484674715c886d66fa2f02721869c516764425d8e95f36f1554730b89a676abf183abaf69005306d8ac537da61a894cb355581340373d76335377ebadc6c2ca40186a8191c1ae543121c2fc671cbb6dc2d8e9e811c110024068047e918e372e5efd2398d47fc554a4e9a5d0696b9c7af841f9a78e817705697fb048c44e8f0b5e7656f582f0f46f7b0bf04d41f4423910516adb42c0a800237805f09a1337dd36903032661a4cb59ebff934757e4fed696c42513946352b82f4ef1e72cf0d09c743eec9d472f9ce827e3e70f88a4ef80df11b9d95b8324efc5f88612b795c0d54f2681bc5799c50acfb92a72773c21f727202e5c1744c0c562ac922ea977ba463e6e96985490ad129ca0cbbc9f92941b92d9e1fa20621be3d58e9e9b6459bb19f10366c6efc25b2593cb04638980a44c67f7b680a4a13c938a12541376bf879b5e09ec931f1d3509ba1eed1c777641335af17d30aab83717a63cfafa49a80047e97f1d3c194f081affda45def21714c8b6469757d978ca2e2f555e62596ae5e6de642e12f92b360de1a0b0e8944933d3d079ad820a2b7f8add09fb88d27d24c236ad269a5008c72aee8be60454a71df7c98045b7a031ac3716b27affc041e30af1e101fb140a2c295e0dfa5c539e9b60c9e00816c9d69b2c41d06e625723a54ace66de74e30afb4c55df569477d4e2a65d686fde41c8791a06a94a56b9734d1d16b45e1bab5941615180950a3b342000b28ce8774f260f7fad919c54a0a68f46aa79adee5b1d2827e5336969e82ee9d457204876274f59bd080a441f9887c72aa844072ac30284f325c44c530c0bbf3c157345afd6a0517cff64f39a22ef4a2a2f265c4235342242f060de6e5f60ab83a8340b9d611009a19d7abde3a0e7549b2009bfc9d5c0c187c49b5d34c72cb31565e7e4549e4d75de9ca2b74236f26dcdca18c476b82d91daee0e9c73ae3c681fbb6b913dfaea7e9cc98fad16b2ba492fff28732e4d76012c08745db36a55243a9bad9c42c372914e0b344fca9050c00224de8d3b361ba1d0b47247f32d8c31330857147ed5802bf1898acf3adcb95718a0f1070356118ec4ad6b44cc0121f1960a09b11409b0b87780b303206d2ba2cc3e860e045fa730506e620702e91a90493897ba7723ee97e4a4933da1b42014237ed03ad3a4fd0b00e33155a4a32fe773221f0f711241def33c700cd23073ba3824452d00fa48436aa3788adb13333482ee3aea76002ea6fd281fe3ca4a18dcddd81fb92ffc434d699b97fbe33f51178308db2c8e29a64a412dfe25f789f11ca7681bb148806502e40449d22b6cfccb172aa76f65d2c9d03a964cd5f81b5a3d51e968c91e09e6ea6290048c3e2f77a34d1a82076528234ce7127aef6bba168d0654e128fb5430a7f50542c80c3b7dbd316670bb171b10ade2c35a37e1668fcf6635b2874e0b986da8d4ed01a6b549729ce561a51df2a157fe1f0bf48c17a8211ac1eda76ed7b77351d86be506112bc50a657d058505ea585f5cc08f4ae6ab7d41e9a2b84ab0515c9c192933af1b33ab5ee8bd8190884801eb558fc0fa00500a6d2b77eb3bf8494174f5296356a16b7002fcbc95961ba5cb16b4fe3627d03c7dac8ac03ead71ef488a5e6bfc24c303b4a92cbf9add3b1ec998ffd4a9ab2397b5378b79c37ed7a2d2c465b39b8f40645a74ee19d9744653e873340c41577e6c0bc3ea920d11416f32a8ed083f22faa2330dc52ae17d8faf8c2dd5235a20238362ae6d93d84ab00c4ed0eda5bced726718fffc53fe2068338f95d306c6217c8cd7d2609d86a869e4fe05da0d7233331ca6fa495e6efab1beac02150e0ead5d0c0e5d630c836c7c9e317398a814dc28dddc7e129c938d86e92dd05c35a34633186d1b77e1a80878cf52913805422b3ef9ff38c2225cd76519df8b9b1670b60a700464e04729d3c86ef4c3cdcccdc77529a186dff3d4b9936e3178960fc07603acb9e247a2bf4f39d9316320c88f0ec4cf993b08f0e5bc05be59bc3d5c28dde716a2d70489bd3e3fbed55400f9189ab92069f1d271cca37eb86d3c2946b5395ded0c4516b7690efb2e61ce9fd458766733e8b012a3b1d36183ee5e8c2c9144450ce86090f545414b4d059f74f8cbc442eb254a6ed663113810c58ada52a7e2f967c0817baecf3af661ebc145b02e758e1dc6de738d3c30a30de32832115637701f306757bceb977d7fec6dc72570c88720b7c102b4ec992da961f8ea8d51f327d386638981018c1875e62818961d00fcc3eebff2b24e6603709f35137843db5106a720f2b69e77cb848da1a141a9abaf6bb37f4917a46cc239044a7dbccfb7ac488f146c9408929ab063adc5545abd2da9613d3d90222e93c545917e6992ce0243285b401ce04af218bdb800c93571f1ec2f4c7284537b10a9742c744ef05002c0d08b60a1db40ba8c6e1f0f73052c1ec3072a4419bbd816eb328664f4db5e64d085ea7e37ebf557ffc3f30e7a457fa6c23809473a68de4a16dabb3349cdf5bb43ec7daaec0731e5691fe4973a9c765796c0124043de736ff3210af3a1e58cc6d176e64dfa649fd0a8aec989f9466bfb40e847a436640a19f6e6606b081f9569cc01ca1fce8b87e9adc2c2772f4d060dd70ab01da155227252744328a1586960d9613f476dff3c25f714c894fa247ffb0d8aa0b08b263f842a8d76df35264b70a7e6c086f847aba2baaee9c9fb4a178137dbdd15b6374d5e1f51538aedad1cc5e445d0b5eb9c955b79cbfe35ed76f088397e9254c8ec2d1cbe2ba3cd329e2f972ed26396f85ff682eafd77dbe7d2c05c730b4ab688da2678802a064cdb6b7f70e3fa00620e71134a51482bea3fa0bdd08e584fda1401ada1d97c9c88e1744c057e02a828016e2efb5354008239afc477f507d3408323a7786ce88df6edcf3bf602b983a3d9ecb76311407e2485c51fa1c7048c3ed24a10d8cedb6d1e0a9d669c40e9e84a226c7b40e2b711eccffe9df4fdbaae560c51fc266712fd84b12e8901380b59ca0580240636703bf2bf022906c4c62565ae022e442bf10773b9ab85633efbdc0acdc43e93f886787989ffa55758b77f8a804b1ad79c8895a2ca20c6b165932f48f2c9bf1a8e6a53c49299d91201d07ee6190e48257176b2d96a3240c66730b9dd268d8bd7c0ff198ba2dfbf8fe51b879177ea338e28cb787e1984c6fd40c3576b1e202262fa254290a5485a13b2fe5c60c0f009be384acc42f439f0380de2e59c44c5a52f3c9837fa9ca865bada370efc07865ec4677db9c22204a9ee98e7885b4d4b55a3ca1f57e991a8a0329068556caa88e106e080a2f2609ac406313ac69382badce6514c3fe55d26a26cd34452e5402a8fc957b5ad0a5533fd70fa8ef7cb5f335d78da6e058816a50830a73c1960fba6f0b4811050167a88b611a5d6198fb3fc774df55f2299f252e75305a1c3313929dd6f865118340c54c97930b578229d89d41a5fd94f3acf59b98f5317ca1e34933bc2b8b26a6a526728889426e2194ff94fd48b4385adb5060db2a57d66fb4e653814dbd957c5be54286799ed3592e712921590dbc2c9a833637d8af19da5f655362c1b77955fb331b9fd2be1bce009acf4f44e2f05ddd11513aeda48c94598bf073633dd8a20469026e0b3bad5b0ebd493092d0f6e042307e576aa897657a407b5e435964a7800cd30910a199a6954cf94b9de04c5ca72a842f819625b6ff653b97033a625685d72c115e02e9790b104bf160e2c103769cdf4b51533c9a53e4ecb38714468352015a8cf85c821581f83825cdc131e4fd4d9ed2ef7d7f2a3cf36e9a6cd102ca4de60069549a7a35de5e615867b8ae2239a7220bb3cb126bd3ee72db0e0d3b597394e9c09be51b02c5a4adf96c285d5c9edc21ab8087b6454fdd25617812837005452ecece036e409eecb111abb5e1e53a9610c16b64feb372ec777cfc892566c6c635631e3ee36228d9059e0061012058caeac81e6a51ed27c40854b3a9f7886bc2336f6d44b347cff99082fe55291d7f12c2a1af1be9cef51b042c7165df022dc1bbdb1c81eb448e2b8a03e6225c2e361e4800bf3c76715c01a4f86861592b87df1b20e2a9175375809596293efd6a697cb847ccf9d148d6c801ae2748ce5efa637ce9c05a13aaaf49f53ee8fa4f6b45a5391956672e29e3d91df5882ce77ae7456c8ab7f66490830e98a260450caa65052d0d68290aa89416add0c07e81a88d915684828724c0bccd20fa40d137a40f7891a2cab813b637a4207fffef1261630dcd2c0b6d5fd558681a90471d3132374f2445c686fb8305fce73ca7b0f3acf1782a2982544f16c514d37587a6ad39266dc55b92de991aa79803a055de2bff90fded5ef1ce1aa15e342187669388802144a9c3fe41b03baa666825630a0d1a6032d1e79bc7bd11a0fc7be18d69fca0c4be140c00f863e7a631aeeba2acdc673ee61aa44bcd855da8803505021121b6e2cc2efe53bf37ae7124c7a7573edd912a87e5114fff926adedbdf7965b6e995292010f08fd0739089f065c8e39c6fdb8b8f756b7a4efa5c6ddbeef976bb90c59ac61238b599178c1e22b8735e55f76448b9b8d2a4cfff56a444d09e387acaadaf2127a557959bb97b27aa0842ee57b3a90f8caa367bb4560eec7f8037a3b7415d4b00a609ed93da7e7938fb005012a04e8404e3d346ac9d7ebd7d7f25daf787b4f477c620a6700c3bfd755127c8c5542fa3c0ac95e0266b34367c8906bd8a89940aaffb1fec0903b4506bdd730d9a13fd80da8bbf9f42a75706639f1ea7987bed1c720f613fa18a4037d0c9af43168ebcbd7cad733af290fb11d16db21a3f505ca78e232c6dd5c2e8cab411e73485f16082000a876be839738c7b31dbc963cf47a3d842e9be5c4db9f87ab38def21db88a637329a7cf903a3800b8134e07ee3d900957c25539b9f7401d8ec33d8dc3a812415eae12fb1252de5c2c263e3aa4954b3c4ad5accc4df7102ac1c410d6d7202fbfdb1ca944bfe49e95a32e331be67a55f10b631656242322f3cbe563c1bc6926abd9c1e86b90fff3ca23fdafcef3d773ffe738fec7738b22a1f29866abc8b177e50ddf2e842be8ddf7aa4a4281e72f571b003b68ff0139ee9ed6fd60772fece52c608410c2f71e8410422a053854d08a10565ebb821508843056fb2af8500e2fbed7d2a20ddfabd0b5a84e9676427bbc9a9a3e3d1d95d7688fb1dab7ac2dba26e605513957d2a2fcd96a16575fbeaa3c76cdb347df37d4348545a043d86de28632e892ec981eb54c937a86a64422914824122909955487f293c7a6a5635a2c9b132a75d3302d22914824128994047b4b4b4b4b4b8b0da98523cb308967684a35a6d168341a8d462412894422919278a9977a29962175854add300c8b388647a3d168341a8df64422914824120975c3bd3334a51a93cd9e46a3d168341aed694f7bdad39ef6b4a79d917f2361a6c813e3a34e664921368d46a3d16834ba193d370b8754521dca4f1e9bfa4a6c62139bd8c42636b1e995d8249ba5e59c1e8f7bd7750b8f44cfcdf242cfb37771ba248032346f93a941373325fd39cc24dd50a39a458811cdb1cdd93b09af2ca1c4cee13b1e9dbdc5f08210c17c30bc04709cbd4dcd62cd34885f10575b33cf6e7aeed34635bf68fc68238ba979f48e677173e9689a67ab7534aebf88b4937077d1ca9aa1f98bc2df687fc11d016aa7b07e2d76b84e5245fe0eed244fc73a872e0164be187ebdc1f08088bf6518552208cc6b5c918cb32c4e748c46ae4f4fc7fa45df67ab35aa4f0d5a6f9b50066973b7b51ffbd449da2259305656189273fa765883ab2f5fc3ad9a6601c29f4c8530cdd2a48631cda2c39fc351b30cc09ff7a9597ef0e78d6a96ce9f77aa5972f8f3be691601f8ab2df194f2428ca0e0f0e72acde28357fedcd32c3df873e715f7f75e101f8fbe2f08900d8f5c45c2aa4bdd3fb47da02a0dda2ac57ba0428cf0e02bf09011cee3c929f58c07caa168da877e3edbb40fadf1a134b88ee7a78d767232b50fdde1b312ed436798681f0a001b1c8684413a681f7af2d989f6a13accd0946a8c4ce0857e303121fd30004d7b0300b40f35a19165980d76c25058490910cb2963d63e61361f5af273072d46449ae1d0a4e6c4302c18d46e83360d771abc29cd0f9d9f793aff03c54a580d666a90c78a6950bcb160b8e3704e6cd8d832669d190ded43390f04c56876f0aea8102044303224ce0c8726a61ad425a9d3b60141bb7483360d84a9f1d4d03e749be1ed03a0d64807b5623833340d6acf21001a6f48dd1d277d93301a2dae6f191fed43b547a1456efc405fdfa01f9a3d0a2d72c371d0d103e0860f348339a5344d6636b40fbd3e547ea8f5365070681ebfa2428c0480532208cc07c02b148f6ec33314ef61f3f17e413dd0ea7fa09c5183da3bca9169507b0f54480a92e8c17f3841d97097653fd078c30768af685c32668da9f78f0f3e649c8683a2e8e0b569bedd078add34a8dd2986e2aebd078a9d2866736a96c71c991744c44edfbe7098ee2e250e1cd2298ae3903ffc50bdcdc50695ffa1f033aa55b4432915e5100fb448e51cf5986a16cc06b3e91c271e35deb9e5417b9b9428283c6c2e9173149ae2289b4b0aa80707f5c051f94ea9f340df73f4fddb382e94f5c0fb7a801ca7d42bfa4237b21406817ad80004c0070d0745f10f7d9f656fc3c1d597c7e19f8f475a4d70f3d125ad50f4d2f70df3e3db38288a4b6ac33f9b8b8d0f15c00d17c00d2e0814858ca0d840e17ef850ec77e371f9faa3d277740dca4e83d66cf4ed1e5abb1d68f519b4aa7c8d00a055e584562cf5ed3ad0da99d0caa1d527adb243ab05f3ed9c482b96e4db355a3131be3da34b408cd693af988de5cfe1dbcdc52a52396f45441eaab82096296404d2d0f3b7714eff780852bd7010f81283ec8b27c8beb0fce18b2134652032c6181547b6568ec1124671051ac660e612f0327aa8d443d10b64a9f9686459479b3df6c7208619e6091ba415b58b535ff83d1dccc93584b106d8bc708178be832b9538c390ddbd9a7d76f935c833079f0e29a7cbd5c1326d4b497179ee41cd4b9658b1a482cd252525cb815256cc1cca332f335c87b2c213b8db153b5f17c63453c9346d635a670fd62a4c939d0e1b667d5df8e06e0bf627814028e73339615621fe79a6696fe3854f47a631333384507bc8146adb3c823dda9e705c5c4a4cd64472eacb87b161ccaa3de7a874eacbbfa7a38a96dcae0dcb606fbc1c6b01f086ec71967586ec2a819725d49898b14c69e08d31a92b5262fc0deac4e38941c8e09370b5e5eddd094f4c808223307877a33642a181f70cb182444e36379776712e932b85aaa1b1a159e66e08e365c12a46cb9212bbb66bce4b87cb73ed700d20065906061860a0c112233b7159d9c53fb72c53c6c1419605ee0022786567b49dd1667c37178d972b92396743d45d6f6faefb0cb1ff43e55f3e5bad43c6ceb460d66773e4b9080d18b181245c3e319e3d07afe47015c9d5f745151fd0dc33c0b306b87b498ae018615629a56495aff25baa345d8d55b102d329754a560f66bd91fa1ba91d643aa64e0d0e17744a9d52e7080e17f8e0c5004803203d1dec38603aa5ce111fbc18800f5e3cf760d60ee93b24eefa4673d5b221c3ac1247c7340052c7646476680e70d331756856609a6049c90124d689f4eb92160790c42638187b619e1dfa7870b9cb6ba0a0e25f19ff6a9ea0420b2c94f102f8a78589c86752dbb1a3fdf28bab2f09ee3ee0f91fd7d2f71705d28301dc5910c83a13dc01218257faa5f41d6c49afa4840f73f68c882234c02baf024570179348823b26620948444b39a7c763aa7307037c587eb9c62bd2af6b07c35db8dccb7f86d8fa01cfff80fef2bbb9405fcad00052936c00ee26afb465591ee95bee2cd980ea21a771623097805f67369b65433c84a50de10efad2faf26b714a587fc29dc7dad71c155ee1e58a545e718f79f2e4c9b0eb1ea65b03830f272bd5a0d7e9a283a463f3dc3171c763cc2a616e583796bfbc95aa56aa872546e70c8f12a9c5058ecec94a5962eca0846787387650c25a489edb939c7e39cb66c7e081f24adcf81bbf9c945b0f94df25f62b0e918d5f4ec23c1dec71665ad5079b678779d4fb708a42f656300f131f9bf818b90add30f73ba3c06a5d98524ad99ec74e2ccb25b35c6e59aff497e42830357e16172d8f96d53d07959ff3f2a69ec730aeb64bcf249d62ccfde51dbc1b84aefd457fb4c3ba7f221d328be552aabc455318c4b0e2b4282327b9e39a7b2a55b70bb2ec79cdbcae61eefbf38e34d1c27c2528689ec6bf1214a6cf2a6da39f2136e73887ab1cdffce5330ec72de77028ffc6d235da9ef1467bbce770b88d79ebb1791c1ebae48fbc7197866d3c36fa5ef24bd768fb52fedd78d0f719a66db4f678ff0389e89b5bbe711f886e619b8be5d8e6b2f5e81e8f3bcc33ae662e7d97d8a7433a10f8efe9906ed11f995b7ee4f7f7b36762335f1670b0e2dfbfcfb84f03a25b6eb9dc5c2c97bcadf3bfad07f345df6bb4befcc5afd19dc35fb40671e22f98bf5caecc217d9f5125f6610df2eb189db1825204f2997b0bc4cbb6110e3cba0001240ce8c20980740009240ae84209de0792268cb8c08ef980b780f7de7bef75336cd8b061d793c748c8de7bef3d0a02984dfd06f87117f1cf79e6831041f2ec9d047cb0391bf80717424e10297ebf00229f1cb2f7de7befbdf7b8c83a2b59475e8450dbdddddd85d0ab585529b08a109e70439758c1181fc6c978b9a11966cdf14a96666d12b842af41cba148af2084154c911e0d9b1022a1c1934b5ab1ca60675996f1be0ea7be3c57c9dbfd304e6da26905c2bfce181cb2f7de7bfbdedbf79e11b2c7d5f772fccba13df9743c5fb629a2c5004fc7eb87e49f06b813e21fa7371efdcdb53c1dcf0dd0c34bc87d96db21bffeda09ed467cbbf49516088222dd6a011ca45f202f1a248c9132be5d0963b60adbdddbcb2fbc475425cc2f5a85f8cbdf63815e09f06be215f44b7f69fc6e8773f2eb96bf6639e15e834cb8d7a02ac447cf4ae8be37cb7bcf9f73f572e9259e493b1c2ab98bbe518dbbe81a9ddc45cfe80977d1315a5f1ef3aa25ad343e3aef0ab141986c5ffe7249ebc9cb996d5e67023afe3a5efb77b98d6a54bae6d9d2cc355ab5ce1cf33933bfb29971cb18ad7289128ee65bb6bb5fc2d9348d62f4fda44b705c8920303f5de395cd33ef60ae79766d2ed9ee72e87b3a36aad1f780a8bb8f55cdfb2ae9d1e1efc6435eb42dfaaaea2464a4b758924d6b12dfbed4f215e9d12f8734ab36970bca4b721a77b0a2bc8f03021f4b5e61872f72d9061d06add793f8ecd573435e619883b9048c1c8bb7da5ca0b5fbfa05f14a4a3c289ed2590a8a27c28ab529334babd7bf925faf25ff68fc7aa591d2e550d907da7d6c7381db36f778e55d520647b680c21e29030b23aa6b310448d5544261881a247733b6e4dc6d8131f7ab2aaa1c91e4a136c02bb2a565599665ad8a071e88dd8947c60b43e5089315ccba312fa659a49cb3973da664593731e0820631e082066cc85e4ac531f36e94ac937c61c012387ab0e4462923a3448af90138dac2acd6c93ac15146061ce950d33698f5337af6aa43cd7f46d6098eac930e35386660dee3e9b8cbc11d7be4645f8db5d65b73bad31d3df32ca31eaa32c6dc8f8ec21db3b0abf04a87ab2d1caeaa749dbb0aafac6885ec1b4048d7dd595de6ec2872669657ffacfb4ce5b396cffc3d961dbe9b4b06f37259b6050fc49ec5b3635c6d51c2b35f5c5529c2b34bae764178768babce038f0d368a676fdee5aaafe8e960ef3461d63599d6a5ac6b7ae6d19cc615e9b8b9a9ec9a42c93442b1008552430ad50614e7a60ca8ec06851aa1588042a1501c35b4007593a16eca80ca6e50a6948a02334f8f715986f9e5d945259331f7b11e185cebed5f34aecbdfe672cdd36b4ed0b064303f6099becac2ac70e60561997a5c3578e95573a2b24ccbcdd1d32184594f66467f32c3433e9c793a2a9c79f61d3d472830d85664c89462524fa4526540a5d490d2506a306db553659079e8444cea89542a95d2cae0442a43cd2b66cd4c2835983694a96445a7f41dae2adfad2aeec7fadccf5cd332c728b7616e8fcc35ee387a6f3d382fa3fb11131262af813986754a0f5bf0ecb5c65b2e9895cb071af5cbfda83c46afb8de7a707e2fafb005558f9ba7c30c7333d40b623dfbe55eefe0ebe6d965869adc454e839d4884ec7143ccd717bb2cebea1fedccde5072ecddb4ee4b874304a12ca3d54d8332fab140e69a6b5c1c71d54d83784331466231ab451259a88f6d98b58ab9792aaa185ec11c7ef40aa9888f55be21ded6ab98675ab9a42ff4b658238744a505217c3b8766760c667d2552a31672ac90bd94aac944b1cb0d61141db31573c38a5aa72173ad53cc560d836e58c50883d69e6b319a1419e40f7377777777773bc3aaad242f985612eedabb5b45a5ebdcfb3514b353ddddd68957aa95b292a036b509e00562bd3d835a3f315d9260c909779fca9f147070fafd541c0ffeca9f14a6e8e29f4b12aff0b34b1b998459e4895d5a7123049aaa343dbba482579e145e00f32c679ebdca9a17c29131f2a4f0821f7c95489eaba4a9f2888f2431d4071864a80f3010d986e0f791448aa865969649edc4dd7bbe0f659d9e857a4e7bfeb8faf23d645628ea1b4f02aeaf1e6ae6bc58f2b8fb1001fdd584a18b7f3561a0e25554bacedde3991372fdc4ac92f462898f307cc1ddfbaf92f4ec92c42b75570ebfdccd9f0861eaf04f0a50887e0737aa9d63b840ac26b33c14e9620b53175b6c117a30fb5400fafa724dbcaae4638113849e437f096590beaae4c3a3bdb916357d2518d4fcdb7abc120cb678e62a10fe7625b6048323bf30b0a475037f6f9e7850168bcb2be426777bd113eed60908a1b082210fb92a3924541662be13be971c28010d2ce8020b344dd042086af1d0a7075edcacf3e594f0c11b5168613fff4a23235ff2af349ac2aa50a0f2594704f0ab96b14be041010d46b8c2cd18e63087304290f3063114a0d005183250600614cc0006a1298067f76689801847e0c20934bc808c27841e1454580747e4c00a983184a10b98244f9057c440910220ac41b4050accd04588b3e0a8508529c0c10822992860f1bee0862f687183171069839105ec849757b1f2bce5550aaf4808c550841fd0e007271acc00b362ee20872bcc2d0ccd0633f8c2570fc3d4fe95668085afd32f0e42cfc3195ce117e671271d0bf379b340c9794e2613668af30a845170e1299c7fa51994befa579ac1155f5dc5aa9ec84017e09418f078bce86edeee6ef6a2bb211762c4a1695dc7cbfbcbdd0c9b9092527537c36d5e2ff072ecae2257db2727ed456fdceeeef674332fec877aa8defe26a8a8c488a3ebbc1089fad4a7234736b5292f082144dff4cd0ed921151cc19165b24c2ff5525ee854a7a4b4b6f06c9e0d736b5a6f570f21908ac7ba120b809e058f672b1595ae5b9892b271ab135640909322968b15abe5f5a27b7b3b03027f9f077cae76b9b0d57215669dcf4be59fb002d6d9e71689de1448bf4ba34246aa76f80d77bd0021dc1d41c65a0d1b5bccf5adfd6d3e389071476fdf2a8390b7b53141f768f28b0c6459969d68a69801c984e497d83d07983a6205c2d82d6e902e8fe0210477ecfbb6aaaaadaacda52f67cf7c34cb86fa75e50022b8631f47f00afb12f07dd4d4acb408c12b52f60ab558258b5c5555556dd5dd0dbb827ded6bcee4f95297171d13192211628c11422274775b3664200244c128a946ab3fe6dd556e5e2747bae42a18f333c4e51def5cd2abfc2af31dcce1aae7e3c6d5f951e35e2ca17674e66fa17873d9c11d9c7d79b79457e496d8bfae57bdf4b7f590aec402e6308739bce43e0df8c8714770d7fef21537693c162418d4de7e44b3ec6850fb0a214019df5e414f8c6faff4db3d1e29e796bc1d0f96404edbd67a41356322a223c6ac2b648574d630eb3b1921bb881ab53d7a16291169982f0f23fd0c11dd728bab4b24d20f8f7ecb8d10c21d143d6f12e05005f3c4acef4444058ae0958d711fe4d15dcba639b8633166cdf1fd393a6ba860f6895925a9a69ae18a065911444854c8bc8db1ac1df25047500d3434825776214743435315513f3be4eb7e56664954f8c9f3e6b22524ccfa504b5365111a3002f5e2a701fdebfdcbd54f8ecf0e11c0ffd1dc0eee98a12f850b77b7aa1c3eb8f0713589af7ec0961c1c1ac8241609b3caf7b6f8f5cdae10c9a8a8b461d657aa29af790baf4088e21cd120d654521def18a12232804c477666a7432f9f944954c84c8a79875696a98e68e7898229df2b92a90ff54a525673550cd0c22bfb5c71556a6d59964366d96159d139724152424660d78659e5cbc00af04302610549dab3cc334946c4dd10de2988189955ca6057ea861837cab87133c6185554d1a1a2634567668c31aa88534400490490c47cd6d1fca235e52f976c757b6de23b4bf10eeeb6dac232d6166b0be3bad71e44797922637e76c6615c9df2535efa6ae0a36c008eb7aeca07306e80a962aaf00ae434af275c8d2e3ddb7ce3529151e907a2cf58db8d470e879b4bb519b1691abd7ca32ce26e08778cb946b36a3fc254d1c25bad68ccd20299abca2b3740efd8cc966a73a938eda5da5cd6b34aa43dc3b0e8793986492501844130554c98ad64115a84f0b1c57377af1b63d61695ce89c508ae562ebd48195f9b86575ea98818cfde5870d78c7a8be70e0df3334411d16b97c37b73314283d7d631bcb2db1432bcc271261ac4be7987c3389451dcf1c97730df709731b171371add2f36c59de7b3bda9dad777aa2ddfd22cafa5b6bc74a6914d239b463a6f2eb23d212371c7984dc31d7369d615692be2951d32e2151712af7cd6df573bc54ad3348b117c62ef7831abf6954f9c844fdca1f86639fe823bb6f9ca42d88d6896159d9e574464663e666e93c4ba903d9679790669b57fc2a0f6074b7c84618a187adb2bc9624a2e72c0d8d10e77832db92296b7c505d14246a2bfed01ebf4c73a3b33166b62f1d120f69a0e19f3e4db8918c11d71b55df34ca33ebe989f213e0d804c7c86880ed921b7300ed8cd65471bfbceac154bc32b1c675f2cb6b447b666b768e2e29a58185e61e7d0a5d923ec126175710bc31dbbe456c85ac11d16744bdc9dfc46eb4af1cfa659a49cd3e371ef3a15151fbca239076110c2dd7b08df7bf0555b5567a85e550911f21eb731a7d91ea1575e21296608772921dc89482419c3991512a6aab6aa397e8a6a14ab1cf517a9a7a347ddb00676018970e9d9e114cc34cf5b3cf38e782b38e4d98530887d2984e18e77e5d3c1b0a407f32d10d057767cf374308f786525cc5a53c85e4ab5a4f8f59ae3e11028da7a600f45156ab62fc7af1d8a78857f1dd2f0ca917528c5c2995f874316927e2116bfdbeff9a6708e327e5d0c06a5b843750d663fe71ad5ef3deefa5f08fb4e3d1deb156a2e8abb85a2e66c643177b0955a2db2976d7bd3f7d0a5171179e8f230cbc54106f5be9cccb22c97af3fee96a27077c25d91e8904206555a6f3cd86137759941f685b90934342fc83a5d83ae41d7a086cc6856cc862482a96027c9bc8f5ccc950bc7e1f4b7594d61b63bbdf691183d7bbb33481c7f5b575ae4c7b00ce6d9b11b2cf5ecf28b4dc36c1a84d9cc903141c20760b7680de67561198659feb6ed9bdf327e3ddb3a838a19320d5ab7e8721d914639360d82e1a4501b6662b3d3c486a7654db7e625afab0676c92b46c8e94b464cc6eb9a41c5f38c196d469b41c4dfd6b45fa69e9d43438c67cf68dc3cfb5603a68f6048301b21337236464df690796d9133b1d9dd5c4c9070c74cccfc95868b2261994c4edc99d8d4d8014761625363079223e188bdc60e34ad6b30ab15e3c2f11dfcc090febab7095c218de3d4c0c2ac263364264d62619cf6f76ecef0acf8162dd2d9ed8c9e395dc4889e7de3a03a3073868ce43826ee5044980d86043bcd9069968eb3cf90e9701c530d2ccc8ad9786253eb2535913121424d28cdb337a9f4ec26a6679fe1988e704c9dcda508f65ef45744e421cc33ce8484928289d9cc20c220f66d7389dc0c19cee59ccd650611eed82deb8acb2d8a44a766902e3a43863b131b7e6256ce0c9967e79c78a59ad83c9bbae0d87090f08a34b17941bc7d3ad6258550c49e6d9be47c8d20d0f26188164566be00ffb42062b2a830b3f5146f960dad77b32406d3bffabf2c9ef0c15b253ec02086269730ab7ca52ab2acd3638cd17063f5f65591db5a14778fe7443e7e295de78ee279efbd9599cb7577d3109d783c736a52ae26278449e93a7794e719738cdc9bdd0db518778cf9fc6d44f1f59cc0aa1a32518f65e6e36a2739555a24625a59152d8b43b7b59662aef73684f5350424d2f3da56c4caf2fdf8168c14cd18cfc865ba8f2a1fb35366ca6cb6b06aac1af8d8f21578a8f21a29548d8c9c33d9c88a3f007b539ab72ccb825d13ad86f061b3cc5c025ab4fa6ac90b5523c3359d040b06b1451386593b32160d159647195e894478a549bc12dbaa99432629233d6732cf6ec5183b23d2349b82bbc8d53ecdca8a61185321094975c9ccd27a3f2b833beedc3c119cd414dc8dba66a36c6469157da18bbe9045ad8742b291152339929f599a45db8a67ef5841bab08a6bb5c5a921f8378323267b29158379ee2b9034cdebd86b7bf1cfdb6bdbcc3ce94b00918f79e5f7b6086ccee1fad4b4ff310b885a31e1d9f87dc9f1f7781fbb8836f3d2ba893735f1c6146f6ce24d3c3ddfd4a68937a266b1666662cc4c1ccd449999489a89333316ca42553616aa3a59a80a65a15216eac64255a3669152a69291321549ca543352a6a291325549ca5435cf0e4fcd226d20a959ae9806b14b1b94b449499b1b6953c1489b4a246de4cca4f194bce6aa691a15996ee4319eab06c6e2a4c7e3de344d339ad2e38d6c19d4afef8c85e2995f670b1579e646e6b965aa9b92cd339436b0b4a298e72aa6571469bd6a3e24d7e16856cf571992b47a2e4e48a322902ffdaa6996a6a9790b44e55fa935cd3206b3950e49c8ae2bdb0bc3a49452fadb30ec9aae834b6c0763f2233df39750a603dd7fa512aff3e79b52ce120ca315b82ecf24165798781593b1f41dbc5207fade24964c8b74651b8783611649c3b0064929a5dc8151de5ca05ff485a4945256b1b22a4d0a30cf5710fc19dc09c5845c3c96cb9f69fdbd950a4fbfd08b5f096bb6c29aced6acef8eb8f01b85e9378906adbf8d88231a84bdc462aecb1dccfa163ac7a199b04683e19682494966a24c9489b29866d1b84ce4f9f7987b8865c518a565edcc445535e26ebf45625598e2146a22c886f10451c888f43a555440a0a75f238d367820f64aa3da2cd26032b3461a1e2b3d6e2d37a1989968022f14615231295126a28111d1885244441512b936b4b412c9ac2513b598943a3bd85d2966d57ac88c010de00c663d815268ff6465edca6e97834f8795691be74deec15caee9eef2eef22e9f30efeeeeeef2eef264d6967797774f362273392803288319d7e979431b7a0f54ddd07fcec3eb569c86e5afbaf1300f6fe5d3a99d97dc2f980d218451d910bc79f60f14e3c908e3892a27888036f45381268448420551a8f29750565158d320fe58a0423d7bc5c11a78b2f1aa5631ed15d63c4378d970c7a7afd5cd10a63f1d55543155148f05923c3ba5c7344cf6ea86575e29e6e6d9e3149b00e8ec5519cc823947211f873c47299e1d8a9a05e3aa281e88fd925cad6c202dae563c8022ae564180a22ae6e96057c2acd54d15e3be4034aabfb84e1b251b3a9c4df3eadfa97438736e1e8fe6de7516e98564b368febc4e6ba659342e9b53721669022f243d7b314219ee7ec7d3213d8b5cc418b91feb9667cb9b0bf4c8c58cd6075e74cb651317a9640a351164bf200653c888744c019957ebc8b3570b8be76a59114bcd1263a6f4cccd3d1af71a248aa5cf224d847b05dc78f40e7e28ad37e8926e287b5b8c95473a3b4eccda3d53cb2337a198d52259a46651e14d021b8a22faa980f4cc33ae89cca5bf049dc1a8444c3776452d959a1901000000c315002020100a89c6a3a1309103651f14000f7c924c664a1c48845916e3308a638c21c600420000001043c0d0100d1508dc7ac9d01179fc4056674398e98a52485274f910fbff4b336551b86ba4279a71b316c3a0feff321fcb89f5ecb358c6736b0685e450b37eb5bce7131ab807e1ff4509cab3baba12ed56827fdb4c7e79fd697745035f7d7606babd8ac586f2520b14b553dbf0c5537e016898b559f4e104e928874b9e42e92be0eb81ea041a3ccfab9593d49c732dba0e1d89efcb6ea359e79520823ca0a4f964da930d4558579a454dd5572ffb1b85ad35ec4dd2fe74680f3f20e384644831db7b0bebfc5f79580cc5111ca29c65f89a3301430b66aa69bd4c88263d7beb7191a514e6f68ae53cf9db4808177a765de0560bf93693b31638fdeb1d8359aeeae23466df5364eb3fa63587599acfa929dd8753664e5868f49ce5c6d74cf97fb6cc7ff09033d07c15673434d797a5b52300240ae9d4a1dda6144e165ee51454bfe3f50144b336da653fe1754f43b06271bf9a1fa334855f471de0a0d845cc7f708ebe7ad49ea37c54ed513314a1befba598715392cf03bc7f3bc3c6f15816ad5b8b40a86984fd5929f43999371a1b03d893316ccade10da85cd6b1caa3008789dde09735113c690da9bc1b5ea2f1578a7d9deb6702d377e26a6ba8399433ffcef400a213920614fb7087b38905422bdf0f85663b0ae8d5ebc523d8f77be21ed8b8fb70a6c7094d6332dc23b08d32ed6569419093973a6682c10763cc6eeaee71f474e47aa6d550be90083c0886af60169fd8ad4cc6206359d0a514dcda1696f479774dad0bd1c9377c777671573901f83f53e7837cd9eb6a6c83759b863ba8de2b506cba42ff4cea03d76c272e5276d0a6d539b350913b9a56284c5316c5fb42d28cc6db4e5c88fe30e3ac8dca46dcb1eda033148a83fa2bef33422d5d5be717ba4cc8d13cd5cc0ca32431ddf310817b087724f8a18279dc9fe7bf366c3ada8cea4defbb0c742eb9ba1b1b50edead71c7f67bc444dce3305582c004fe7abf73fd7ae68920cb650dd8a2ec9d05273322e0a2cd438b3208b529776889689205c2b85f3ddd3e7b8151513a46b0b8fbcbab5959892e531d2799624cd6725e05c02209b97562a8295478d4d75c894a38b9275e1d8edf5e7ad15202131017fa9ba71bef8ca2132c43f4e55bb474affb4fada0a599840e88e34bd09f979d9cb19d4b2382f244f53d002ef13f309b71c950c8b4e8dff016c71901b08e716013642e72c9af8afb89c1b6b03e9b9c2e7201000774f88beb81b5441ff36cd299f9e00bc3721e8451132d70a2875c0531aafba8b469f0f46fb2d1c893c9f8a397c02e4d0bb4be59ff8d020029291491b50ca2ff205a2ea1f1c1c7fb027bcc198615e75904a84f8fbd00fd940ed8d8d08b2a169c9b8e4002656d0b0f0bc77163fbd549d216a85f44b930fca6f7a037499e9478c1ed6a5bbd74eb1e38c3d3edf1fcac921137d1bd95f0e63a154a116ca95422370be54e4b8de30103b647bdad05d3865de73fda6fcd65fbe77b03bebebb9c521fa3d2e8be4f3921b0ee69d2b53d1d52919bd6d430810f3ed590699f08fcd38e6e84891ec852e22c02bf87632fae8302ee4833d5ead484bc65505eddad28c8676434ed6f2f2b3334d7ae6826b0755820e71804e69ba94f955173da59f3645437434a1721784d714fac5c73c29cc2282a7062aae157a0d9e4f1f13b41f37f6378f962b2699063005dd838075ee803b67b08acf785e8d0f9c4b06468763c07915683b1cda2feeb56f78cd97bce391b19f2968d037dad82854b0da858ba1d86e8ceaeb673fe0ca218157bda709464a8bf66aa6f672fe880947d27b1bdf9bed9ebbcb7bd4bf676ec6cf1619e896a9d499b6e359135cd9da6bbd090c284d4c9b9b1823f11b264508e1d24d12bc949afd811559c85177f628ff36d9bde7b7ad0104051778ea9939800cf4cd8faba8daad93f11e43a3fef5058060b8c43d21281edbe2716215eaa87ad502dc3a392ded311c52f95614c465ab0b3ce95fcbb4b2fee525af316dd960d694d71b4df1ab93ba70b57afda0614d9716b15e1fd841fe057d593e69f2eeb669713fec2dae20b30174abc16191c40b3e9fe162300dfab41fa114c19a9ac0645094196e768c0abb7af7eb4ee232985164c34679fbc91e1b580bc193539c70c11ef17c28e1b1b9a294d7bb6780533291882956ad61dab8ffa23ca7f3df1f0c3042a5b591bf992c83aa100cf403bb8b4c725194c7d2fccb3d4685a8f606f5f6a8e78cd7a9c5bc28976468945effe906326d7058cca463a9a91b99e0358c14ddb6de8715e9e15d12636340078a9c415a981406f38a1de747384aeebc5f2276c307e82fea753d8757899e6614cdd2ddeae8ab00f790b60f4f6262a73ce339f043a39e9db6b6b784659c08a5c8ddb8d0d117d2cd8fcdbc438a6768c88bbb6aa527e3bdc9d8702b2be96efd0996a282d7f36898ca8b468f756f11dbbd46f117ba08f11df04961101f2d32ae92326a683a304c089402e7b105ac6f8dc6c042c2413d389472686ee0abd8970c575b6a7a300fb8f6575cd00c9869351361c8acc98acfe1e26a34c061437681525dbfed4609aab678cdd1f18836187b64fd8e1ae8eefd76b76d6a58db1b0e2d1e7193cebc4b6a1f9ce5db9f64b2927065b89334d37afdb808fa66cdb8e4728e07413d1fc7e7d925fe0c347963ac2b257a1821a3ddc5a35e84d6ccf64f1202a00496067505e13e787d73782f0161462c6f3625d7d18bb736e8ec36c98bed42b909e2225659133db90244d43f804923691112b37ce2ae75b13920e6bb3cb9af7b4078b34ded96abf95427e0ef3396deca310efc07df9102d48eccb64cacff25e1192c917929c289a610f9dfea7de18102688420fca97777db085c7ca78173db9481abb50ea9c4d7121e1b0cb113dfc3aae48450380e2e9eada3a2f70566d70d8843de6e73e00174722f7409d11e84d6cef2f09cac8b265d9c9d2154c9755e7a9f40e231afeeceedf0f8cb7948b65f6a1a0f90a1dd49107a24b8d60833809e2f42210484fb2ca4588226864cd930c157c13bf4d1270d0f113ee770ed2167ae51a90d7179cccabf5a92a8d0432fccecb40db66798b7a47e3aef87289c8dcfe47413e9f2ad1b2b2b42890a9526ca83a0b8e0bb031812a3e95e735e9c567b28bd3d35cbc9899e067d3cbfe28a2b369132560fc5317f90027d8b9c3c6f24bfbfea9fedf6b2201f83576f276ca6f8b9f79025e892348161d4b53104682e17a66afaa735ccbf8f34ee70aa0cc519b5e46044f4c437f372b3c44523f9731f3654cdc82ea29af02c2a8ec46096315921d581b2573e0a48e824a84fbe21b45f988222a4cfde8a96a01a6a76c22aa82513ed944675003c2eb27a0c663888fe98be637a16089889852264f16bb549e98b0c6626ba80ed94262ad0ed85a4375c3192b78384e4345b8c1b52aa4e2fffd65446422f46f350dd4951a4a720657715d7c2b2ab3bbeb027cf4901f052c53b56148abcfa894ee2f348a05c55c24a6a23580641bf7f6eb6b288679a9cac6d0a02e151216621c4c45e45d614a7b8ab3d2661e78af265d3d2fd5979ead6e676b6deb6a9976fdd9d2bf0c1766c399e0b2fb4a261ca8ed03f545ce71b563aa7f1bef58e984c6cd21d4678e08b98c0b88550b31d1f7989bc07e0e9078601aef360101f7f4eae473f86f7f473cef035b812e9c03c093215e501aff06b9cea7d64f7e05bfe7baea51b7713e667a7b49c197b28fb82b311c63b70a82093e0024a6d66a3a2afe22cef5e6a1079b7c6e029b2ce2b1a488966630c430592807c22187da20eaa70a4bf390ebc02e284da573bd95c42b186844368846d0d45b0f14a385c25f5d06ab09040f7e15f6f8e66266229042783ac09c474d47ad00c59de871759d5d2f8778487d98db0d75afd0895ff7ffa176860f15c6830accaddde0082cec0181a785bc9813e55bff0211608c59ddd630455370119c744012739035a210309ac9f3753a5be87d26d60fc3a52e63cd73a77a8a5b3513a63b40cf9683f98978ef44e4cc04887cec89867d4d3d0a236a192352af24cd4b63eb35dce22b60e895e121bef96ddf369cbdefd3db37cec7f463ce9c7b1f0fc3c4f372a0cc2ab9029a12d44edda7bd33a949b89f75a72170806712bd07d0460667fb795d0e0eb05c36acc9a0adfdef1af710960717716c48dd4b34ad4938ce4483757fb841b406c4062814f67db5dc824323ae869330d0f19e2b31abaeae41c5142332b4c5fa49d012d2ca3bb9684c171c1a4712ce001eaa0b6739978d1b12be9ba495a10070f2fc1c006742611fcd7ddbccddf7d405d7dd51640a70a854bed770b1afc67595fb4104140874626035b3e2c1d708939614f2cc7c1692647a41a2e22fb195a34d07de3a4df366d51ace00ecab57de43616c52f60e82790fd5ef0e7e005e14c84b82e42eab918afca5b4c0585f9bba0e8cb3beb624083ed19abc8b58a79f9bf705bb999b16aaa93dbd23ba3b5403cceb58993dbef259d212e55d0632fea0be811bdbc5002ed7555b653e9acbf142ee7258208d4871d03286a2a291b8cc502e77555554561275e5ca9643c266cc3dd4b07c9e2c62e38528bb72e91c932dcee4c62eb59985fed729b910b0c8ca3aced5885d5399571529331609b0e3422b1f2792223210b7b6d94cab3e8795df36d618230ce7aa204b7b2ed773ad92a95fab6021bdabe07755bc4ade0c0288499a837839b05676314907161e298b27b933b4b9e0301e852eef16b38f4507406089b42fcd068b39385095d9384b4a3d25312458276b6a49441e6b23ca4dd5a7dfa4c5d3c46c9b316b28bb9f26152c0cd132b259679dc2ba950d301a9a1ff2bcbebeafbdf4a4c9f7ec8d88be1a38bf682009aaf46560c3752735d9eb16f5e0d6571707386f014b24da63277abf44c57807e0ac30610f29f8a0f60f706e9182b92e1071e65c100dd839c5bbcd73223e87471ecbec200887207fae5a6976ae30f2bce3b594afee10f7a1ae2e76a1a98406e2c68977e738c958439fc566423ed8223296f578be63a6200469eb0749c8604444c9b0cb5925701140e6f46e0a352a9a39cc3ad05785d06508e238c6aae941d51d10f7fdaf89104c02f9271ad90966e6efe3435e47752a4d86f5d596c5b592b862d52e4bd3a04750ce84d7d6fc0196871cd21ffde7795a37dcc3b2c5c6f98eb938bbae4073207570f426cf052cf686ea893617c8a4ae5b37c1876a222ce755f720c16f5d38b3b492f90f66e6805776e1162b16e3d2fc0d07a9e790718d8e0f32605e2a8e4398df1b830d6757de645f7918f875b27776182b879b64c7446f765ef5ad155522ffc2e1840035ae1fde0ed778c827ac620f27cc89fa76133954c2f58fda3e21c28dcb2dc82b0f1c144dad0273b7f7cf1e2675bf267a3ba80a5f873ba58972aa824fa2b499401047cd6e81dc2b8ef8de8722bdcbae7469f85e3f36db3f4438f20367a13706c0f06f5ba169e20c557da9f3c940a31bd24df490284171866773e0387081e207e278cf66e8e9d7a5ff00d5dc0b41967060c6495819de7c0f071aa28d990002448e9c5f4ee67a5e02ca8f7740e922509d21f28d85ff2ca6f691ccef71dc4f4e134602cadd2e0102426014da2fe82710615f53532e051093288b9225a082db6af33818dc847d1611462e0753824d8341830454fd2363ded04d867e4f0b84d4a116763da865c7fcc4448e461da4324840315985a3a3bbe839a762fa47ffc0a407b4d338601e940a2e22b642b08d428c2dc35adade78484722a5498156c44319a546ea44dcf7d7b92f236a088855de28b2a0875afb331d55d2520725c54e6c9e8b9b905f2e0702cdb53f59e08700c9bea5e247e0ddbbe59148b50215ce611e8205e73e58e2f9b8f857b43f729008b421fee93175cb3263ec022893d4b7ef7e7c862650fd2ed1d17e9c76a731171504f2592b1f83e98a2fcfb501dcd4acf7e3dea4bc0f68949edda32857afe0e18d7e6190efc5379c5fe8741e17636f08085bf0b3a869ac1f288ee091e4aaba60eadb1d524e1edf7b0aa20ecfd77d52eabe982e6828b24c78c8c288d71eacdca9a1cb4b5c10c643ed2e1a7a889fa98f65958280da271ad27c5595d9361076484d1f6b7ada555e0fb6c9d61f2371096407a5ab9300ec4ab0fcb6cc5f8422835623b437dc9b1e9566f4e2c4dd38416db714a0d640c3f3e7bec16ffa3e31f4bc78022f95abfcaa5511e7e4d5f68a3c643ad0f1412408bb1322c869614e9297b1ecb93f02bd63ca137a04658f5a0bac54db38906f69eb1690122b4ffa40b0d690aea7e42a84036147feaa1efe95823275b078749738cd83e22fc902bc9bdbab6c5f0179fda3b6ee587d87588a2cf42f85b30ff98adf51c6d8f6daf60c86bd5d54dd8c1a24dd2604b4daee72695ab3d4ba3c644204d7e45f7f03ad6b1fa4ff30edc8d548989f681deb9e7c398b026e0dea1eb5ecd4e91c0601371d7462ba5658693e4b13f71d478ba621c40e30091d65e1a7620030637250caf393d5981d287553befb053cf25eccdb21145f2467cce842c872f2585e1283547536bec17c9bf7a1a2dddd1833890f209c1f1064e6e66a9e7ff2edbf79eb66e1e73240d6f00aa05f57bdc2601108d9337ce13ec12efb7ac3be611ba8093da8bb59c301376fe1b373c035184638b2e6b7215b92352d75aa12a74e2912b00745eb7506cb24c226e7f618f607fc4112b0ff266b49c021cce81b5d2e21b234d50110823c6cfe74f68f0e0a500571d6dd269cc2abb0123ca971d491c1347856b916a71b2aaf235b28bc9a8d6d9101ca62ecc2b600c5601b2f2f7afb6183f8cbb6ba3ee16f4f5835c1be6aa1ba71673dd8afafa5349512cf2c7057d5a7d337d537063152f1176652c54838e74e626f26a3e406d49289ba747b3bbac6cc7536e865ae3212bb461ce2fd76c3023675e643f61e120be7035c43e2e8f31102728591146942b8a0f3fe674c5495777e6e3c743900686015ea6219afd61048474161df5707a5e9fc9d91f25fb4008e9cf9e1a11e9fac0704e1ee394334f9d02f0a53447bd4b83963c37a5543a19bca3e2c308cad88e26646f4e04e849bba2634853821615e1e78177e4a9350a19e810f1b8e13b049e1e6983813e54421386ad874dd4e509ccc8175eff8e39127702d1db70779427935e2bb06642a56ff60e35770db692b950b24b3b337d6fb522d56a0242e6f057c5bc74941f921b86de59e48d43e1f37d7094d232470a806945fea9224ba5f744919761afea77b8ad3e9a8bf8498e074530c451cf01e079fa7befad8e9728f19c082424ae7688090bd1efa6fa823f3ff99384fab03c25564af82187809825e378cf9e168ce3fb91d8cc2bfc2b4a4aebf01593e20533b665607b702aacbf858737f8e350832359af3187a2ad3abb1315d015906ac6120e46de5d1e5de24a937db0fa174ed89c622382033c368a0aa962669ff4a5341668a63b76850b9653aa6387db81b2600260121db1c921d6c9682c83eea798113e360cda4cb908066a2551b67e7aa880980fd9a25140224cd652978920e3bab26225fd25c9f7bb7ba8ede63f452217c25b43d36bc9dec45c4cfe817c481bab2e5510c9291f81f592424c1312c7c232441892ccdc1570f8bfd51fe3d5ee3a60cf7afb60c6156ac5f43ee9046c58f5346700945c7fea236654d752692cc87b155793bff00a96ad0447d62b107ee8dd6dccbd82a1ca258fc55dcbdd9cd5fa8555627422c4a89dca1e13cb129e7cb902db0e810fc97e0c6027c3aacc55ca437a5ec763a8f15f4823ddef8af604665deb24ce98abae0fa215f0504332753c7a4ed8119e05e2443b23d1d83bebbacf96aa76d147d341929aa1434b2cb6e5a0668b17788817897d814ba1d91b8f0ddc52ff6b8d9fa99b67917ad3826f3a0047287db3b5d93d6c4b267c29cd231bfb8de2b914d63f602f2f1cb55da7b97958c716ac9de256a233662330646412d9354f48bbaeb2418504b177244ccce2dd7d52998bb4595b78a3195eb3cf0698ca5cb4045f11afbc5582d082de85ede3d07982a1097ee55476436e1fa09109b3d6c8080f974a8e93c2025f9d08df79208b316501a4207b55b6e0f620f0e76c06f119326e7460615d40d5886fa4559492f87a709b12b28437065dc2d81e07311cd525f93df84550a3bacd46d3453e84059bd03625c9a1ede6be6b003b42c894048c4344fc54dd1fceae96f905f2d5691222ca00e6f9b57eaf9803104ec0ffc52bdd2e4fdc12f2d2aa13d3e7fe6ae1156532c0129071c0437f718ed1cecd288057a73f350c2b58936950406c5c025b060dd214673d8f58157a228a1b63ec60bb07135099b6600f6b16a20248a8824967c9557e63cf94815ddb305249399237e10f3bfe3b254cd62707cb1b53667c6834efa2ab3cc1b815bd4bec1ad9730e876179de22078d7404230efd470aee0acdd1d6603a8f982096a5aaa5e8ba909eea068bd2a3942f348afbc8300b97d724ef68adda31081b0c4a2d20ca1c0551efd57b756e83fdcb8d2aa34433f7ab6804cbb18c7a4e89ae9c1cc3dc6be8797dc5c88447b7f941083e453d14d5f29b9c9c14fe4a0d70fd136e7528c8d1d2834b7a829111324e43b0da59b354400462c04374522904bc5decf12d1a559f6f0e4273762ecedd0eacda3c17d61fabcb032c52188055774ec3743ad58f7a1572a2509a4e36088708f82a5e0dee8692e4158147d032f7e4f2292b2180997c2002643a7b4a8e42d77c546820f13c50ae721f06e6e61c4c6ea11f9001295516927df5470a5e83079733faafadbd96e33ad94065bde302251b867a95a37b9252f397546c40c6e0100708b8d64a8956e522b08990ee0e2e767d0ae7ce7fea5733448c26f17dd4a0ebcf5fc0bdfe2f793918866e9608552742af2268b01d50cab6f2f45b7c78f70f9754ebedf6ddb3cd939eeaf4934a7a4d1a9bbd22f7dde24563ae2edc121baaccfa0450502fd33ef3875080b763650694a48aefae44dd2686d97d3be3716162edba1e91089ecb7a0e53fbba49e6975a24658aef92ce6c30c91da66666b0a071ecb0d8d22964caedf33e4bbbaa6bb1536aa5758aa53717ebe8ef1cd88974c1c5a69207e9554a93b9cc8790646ce122fbf93c9c9ed95526f9b3391d1922ea30f842a964eed9f58b25abef3e997441eac1020d6e281d17173cd767b849fa2c2893f0b49c55fad99347efa40375e93290c56df2fd2df82a82653bbef91aa761c901f7dfa210354325bfa1d02945d6d4dcd2b822a0732ac4d075782721c0cb2f64f4211dffe1e89b3f1edd907de35853e70808233437ecd1cf559271bff2f18e73b0689c1834d147ba435196bbbd3a6225a7aa8006b50aba193c4a8cb2be68b7e783c51428b89a3e88796d007a7dfef6b5168e59d32b19614633ab1ae2f339bad88694078450d22f7eac131f5322282e70c6a65066e98d7b774408bcb6a7afb483b99676a05ade670db441fdc93695e7afa9e29fec1d336f02a69b436198213b0047db8e8bf544af07bb9d35f6df76317b619565b922ec25414a5c3645877b9bc09e78413b300b09055d62859f1b824ab00cda34ec61f7fb3f477b59a57a46a296eeadf22fc400cef9e303c1f8dae4434e86fe600d0afae09106b3f7772daf57c7995a3e509abda585a24d8e9663803244d2cc40f6f8c53be8cd85a69d2fec22c37817ae7e0af6f2369825d6900afb117fe09276ed7c605aa23faa045f689a8f6183ae3c1d2395cbbf5436b1ff6587bf21221abdd603175683128ab90f7b7fd78b7e99740cd0f3891b35aeb0b016f466b6d02c46ed5e227bbe618ce908656155fe261a69ef05b061ab94e65cf98d7f7103ce476a3826ed71c57dcfc43d9fd8cfa0d91c86b8c1322a586f0d1125c0be11c7597afc235b57ad04c944750e50321fba0e0f4c0034e37dd44631a101c4a88b63a7b9ba524b83cdc5f049c3b88a2ba9e4d0697fea7bf760732d41f07caabcd7be24f82ecd9e17c3275dbfd5ab187a6a952f4cbe7057e27499bc06f986e00155358c017ecbe5110a92b377af09b5fd8905c8037cec2740a23e22a06cf35b45909c80239a0c98c6b3d6033945de404e0aef4aecca8b381865728143ab24a81cf6c3aed42c59cce48b5ce324ad1111d2858c82b7230f3c8a052072225db2a5ce2da56fb5052720ca682fc49afff2a2adeac3f2ca3196ef3c8572d68115eb1c4acd42e9128bf690306271af45a5c29eec4d2df12938e135b63f505e3f8e6cf2d25116f71e1a72bc6113a1c017a8d178e60f50116fdc2fe638ca585857d5e42293f4ef682c3a7b7a4c038b62e48f0cca593067dbffdf92ae8323352b0fac18809e0b3e8c452cb5c99648539ef46c474018a25247647502569147ad28c802becd65a2d56b28bbca218555e9cca5fafc42c68242abd5dc98cb8bc88f9bd85039336c47592dd3cbeadd10f6bef94d2db75cec4888cd9d02f211f264c1093b42d46933721971158ff1ced03356723001f63026e5eb1a278f5ed3915901cb9b0d33f0abaa21560012531819381189780e066b0426ca6a69eb2e21091cef1e45a6882f64cb054fe77fe386f51c2ae1313a81a1a8085990fd9a7a3776119aed0d77202d28326392ce30a1dab63f230b740b1774cc67630a86fcc83be17b3af3131c4da3b87698c2e96eb2e2f8e6e79fcc199972f0e6c1d862b089668a207e02534f65bb1075b08fb51595c946f0143d8f1f4d6ae7ce894d67e5b08a0fafa40e43f4a298ff6231939f6cb6d7b7aea29b43e8e608db68d343558c990979ed93d83f6ff585c3d35deeefb3b0e730e803351aa23e57cc1af2486e7ca4b61fae88b299b13af8f51069d2a70171e254c1ed2b28e53816976487655e1f1d025197c421c817711204ac773057965991a1b24deb9aa4bb3f3a35a1c2acbc869f78511727e7a64a4a8a73fd3156778e014b77cc88314ea0e9c694da126480c62a8beb2df58bbd1cd0db9572a88398c7e04332bee33ec6690371a327a3b568f75d7b0828c655fc590b71bd58bbb3adb05e2b76d860e928c1c03e274c2012993f0d507dcf2fcc281724674c35df98fd2b1d6c377c6ac666c2fbd41ac0fd4700420a96af40a973604511d61456b5ea3290f4481ffd54821aa59d6cc3175b805e531886decf9945b7bbcc609545af5f780740b97ff36606e8b8fe84ae4678f3a6d31b1d7423c49d382ddef4854ebb54040dfe7839c07bc7d9f03a60e34b6c49ca9c7a7a22549932d2840e38798aab893d0430c749166a1fe3e5f15f1656a36a9447d61108eab0dcfe8a892a37d5ab522fb1504d2c91b257047dfb422a48a12baaf7c7871367b16ea2c025ff6cce2861b326f6dbb0c06a0831155188cb068ec811fb48319e4decc1e7f5f02af0d7be3edf6e3d140eb31913aec3837b099814a03ba712f86fdc551efb7278571f0b24e7bba95ac5ca7026a9ee17fc8ca2003d15133ff6b4c2157adeebdd4c70b910fa7ab48d1ef34b2588757247b060d785b153f9014fc90481490fefececaaf3f05ab9f8405c4645b469c93e79cc601a9daf72a3f1fa31b3263d970b493258c850575853864f3e5ea74268d0766f47464b024964a646b3080b6d014e120f39b3fcd86d61326048804938f0d764aec6da3e2ad71e2ae64e7244073e19ee7342fc00ab961afbe8d2efe00ce5b314324dff33c6d4ac1a21bfdfdc22f102dcae8cb18cddc652c1c18b6e00c58500a7f196e248a633e717e76546f26379c843c7e1010418da1272b2137e1cafeb13d83073deaff0331b983628ea093abcf914e99313a4deaea9703a6f26ac6ef8c104b301f04651f9c753e03dee9ab29cbe054f56e25c2076a13d78ddf21cafb8da2e8029afd281d37c1891c9bd5922e38f52d3182ef703b51f9b36b43509dd51a81fd1aaf4e56e8015e2abd5408022603077994b591e6298ad544047afd4cfc29a1ce652491b069391b0910e25a89cab76aada5f6d659d03331cc4cc450d439e60e2cc78d202995baee4031a24ada1547e00907e42cae901d860f767958ab7c2978a5e27140711b8ec4dc4dd7e0a34295abfd71238f254980c3d01c8d2dcb49c3cbf0e3283891730961605476ad0f9ae79b8e3164bfa334449db6e0a24442d4a1d6fb6bf7e294995f84a4c2707a9cb61856444b92c749464dabd374a7065c671c5f9180756b12f8519d66153506eb2a73625afb0b248223d6bf81cf300fd9602e6fd3438b8496598708d156b5a06f0b9334c43de98a3b692da60754ed8c4b97c1407166b5e1aeb6d5cb9e823f695b341758ecaa195ab8aa14ed193528c2b47576efe67a7f643f7d7ac492221fb33231e78f6f52c340891ab9838f1b2bb63eb22331b82f23af318a1a9ef1ae1c94e22eacd0a308bfc6a9edf7bd93a10b32c692dceef9c8d2c17ea82d4b6708e96abd7f98142e1fa5911b7517a63c29f5d5a2646337b23da0d9d5c3ae4aa58d687b8ef4f9ba98b0ec17c86321bfc0cd2488e2c3ea69ca206fdd0125ed189efcd05003cbcfb6fd4f6e6b02f7339a9cd388b67a87d19340f9060109ae5ac04527ce8979a8ac8359ba8f448d75ed3543db4fdeb0bd2365ceb2ae209917fa5fe3c7b9101849e40827d32a262c60d0539eaf17d0ab65486e78bd7f368b29f15bc280d1db86c0019272ddb8a09591006f7e6e50f763c9436d13390a8c049fdd8556945d30ad44b78d41436d5760b18a171e9ae36164d2d7e164b38ae75d5dd93136d2a59cb6e38704eb189a3c12a8b2d76c7fb793b06d0ade6e0e62dd5b105f7f8433aef076462d9eb1a53b989c435688078982e8f1471e2562b048d3bb2113cb5e3c5c7e3f16d617523dfd3250ce588a12f002f7b960fe2e742fa119c9e10c4bbb0560ba50b2ca70bb1329de1cfd97b44bb68315c4dca4755f955103e2203a448ca28f07a024c41f8532e85caacc6bf146415a70756b5119ab5281c0cb44d5bf4b46e3923e1c77b68a39bd9a03ad756fdf2b0eee7e1f37dd2c002b5e4f6ff6495ff61feb25a5b76e5043aabc00f35aefe5c094a39ca696804d505a547238b6d114f175fc07592ee5df2fbea496c16edc53b6b4ffc12b2853f5a80dc7d0cd781c9017c7616147747848cbc6b9aa5da9ae2296a9aaae49b9631914d9bd3d048cd1fced378dedda8d54d04f31ed116087891b48f53ed17aa4477b62dab8a162d86a1e464c8d1229561de3df6490f64cab2eb9524590155a53f7146adc6e6da0cf8cfec0226de526caf2132910b0aab6b59f4135e80f44c5b45ad47f38ed24640d41a389cd8160b05c887f3df727c25d54ecd42e98fd0a1d698c7903b196c410908d3b7a782ebfc7b265ded161ebe19c87fd5bc6739c2e228ca6465925966a148c0d122094d84fb20e674e0c44e6f22fae7d9fa6fa09b62c3b6bfea96024d5361721da118906bb659b38a8f493ffefde7e093d8893b315dc42626eda7ffc1d43fc2ecac77c21dae7dcc3bd7faa88cda0309127c4b13be14418b1383a3066a8c558c983cbfd86c9bc8716fc50f47a3859f3a7f6dccbe1be66759e1f59dfc3af82bd6f08878baa8e06db43db6f2aa3aaedbdba129749b0d76003c8ab177031750ff2c2bdebc611a4b7422cf910ab87aed7c0fa2b185f7d3e3a1059b5620d3eb6794d8a2ad0b2f8be0f0c615288b2eca123b3e0960ba6c517b8fc3e416133231f62fa99fd2259bcf9e116ca427c404e1eba62e22650e60a603e1d20bb13d72995cc02b877e07145a769d13b47a82d5274ef4bff3567389e4bf3377b58304f4dc1e71ce13f82d5f707a71ca877cd01c00eb7be4d2f4f89a18a0de64acb4d168fd50a72cb131d6c4ff3308f9f3aa4f29d67c70e102c8f7cbb83bf2fd8ca67e6fde3509d620c28759ac6ef9377a5784adf43c899cf161a98686c8eb95240ae701cbcdbf0c8da8d8a5c358c9107473ca0c6da6b5781507d303708c02440a9c6bd1485f0d0af1fc04ac6fe1fcf1011d2b605264307e67a0078da234bbee67133421600d817280ecffb27821f270dd63a053d4c63460626abfa8a23f42a18cfcfabec5aafcff992a62116833cf7d28145dd2cb5863930736a798127acff511d0f2c2d8823f07187ffd1235afeda8212261070f8939cebfd8d5bf9d2051cc6edf0d2e1987b35890ed66325e3e16ea0a7c4db4b255e25dae5a9bb25ce50ecd8d06803ff0b32aed8b2bc81289db7b682a85bff98eebf694144b7890006204b021b45c6d928bbd867386438b34e1db50131a57c6dfd2b1fac7d4a793be5b409dff0e27f47ef2d444d916c88c9e05f8d9f51986a5a96a08170275b211367029fbc236656467c6011e86140fe019165db40f83bfef950178db6ae28f50b1afdced3e3c0df86aa4e3e6b0e90e12ed670c43d1ef714c31ad15e1de8c596783b43c911c11e3b569a653f98ccf0423fbe5805641b355b2a4ddf06daefbb343ae23775db442375f4839abd67f7c057850321eacc57b8430d080e708feafba1a4fba134fb3913b7ca138aaafd52bafd9c895a8dd2ece74cdc1abb890d639397180d11196586f5b50873696778739a6e082030401738dbb344a51a6614dcf372d74ecdedc1559fee5248fe4094618c1d50d2181c7c94edab02eb24cdd25b297b21138001907f6ec45a27ce6732461d4f614f2ed58642e5fe69dc1500b5e1d0c5299be450014cc2436c501a10769266c6a3a46227d446e44f18351d2bee4ae74a63de09cc973f036286c1ec9889ff6f236b182bdf016ab39994e70c7c1bdab4e4e5bf20b9ba093518c0a409480a4bf14e77d3384c2af1243e222097086dbed50f883542f9f447d7511a813d1f1749743b779573ca66daa2c0dae9c8fb04013d12c22d997a67262746b32547706c1abb3179fd17ca26680217efd5a6c20768cd1544b379eb2964ce8c3e230173fde20c0c32991d3f5d173543009d0e50418dac0890ce457f2b3de4965991af3379e5101df8599ad089559e6c94fd589e0882f150cc9c2001053a685e00f4e51d12194d787250e79e2a54edc66b5602c4bcf157e1ee96108d1e9b1f78e2f6517d734c95a4fe14492a043cc30f5f0356c23e03d9ecd25f1c6e872e77434d19ee3b75183c949d1fa736e3eee369e21781da3d1381cd479f5d4a8a33150e2584468741a5c4137b2fb37b368268eaba8a3321f0cb5944ec2357add1685060b5c9df834cc7ef481dfcc06a6e1dd4b3a4ac4f42df528303b7a1f42d6447ee427d90154272d24928311541f4fe7d6ac98daeea5281533b585115c078a869303c8ef3918ae12d1012dbcf3883206b49330629ad8db48058f536f77293cbaf5c206f5377b5783b2946d8e77e0a5706e70aec6fb7ec681ea34edc9b8d45b24140be5f1ed864e6f66a3e76d653729e1686be8b7b217224e8c880e727034b5606a0c3b7a9da9d1fa319d01b8d8df64bde0d847bd9f04f3b4960fc0090e5e8d57a24b3b5292645a18bbf169052d2f67878491c39c3e880ef1d3249f4671e607ae4eefa530177120773bf69c088d517df057ed71791d1ccd987e8d011a134cde5a81ba6bd4889742d00ae0b0bc0601973b519619c20a48c924419cab5f9456c7473fcc298b95258529f63bfbcb3835e37d840b91ad503266efc767827a83960ec7416d01503f12f0efa8b4adbe3079c6f444408406c4f13308a6b8a5de310d35e9a32055a8b72a238b1dfa761a8b008805c164001617c05589cd2fddce1f38897282348e0e0d9a813a22d20829fdd31c3b45b1af14136d2a556214fe911203224ac8d9fc5f2a2a8b4bb7230a2bff04a17ea031499fa67cf22ed30fe1de3a602d233a668f1420dd8e64c450d4196bf52f436f631f148192948c11eab012ee08c6094794db611873492c3c23c849dec1d22bb3e8a24233791a1e5b064811ae9183c500632cc6506c4500c48311b21f27a0144a4782a95818b9486fd94cd586c0a0b6fc91de736e6fedf49180188132e0b8be3ee33b0419c303bf9c32da8569d4618bdb0826e22b609ace870fb04592c0cd4d8c387b5981d35bfa29c1bf3479a6e3e56c5ddb18f9f1e1dfd43e5bc4c7abee72388b0147cf1c5f22698f873697ea69fe56e1a667049e69220e4d413efa709f48b51f63b42a4940852baff980a89393d2d18fae5e8475ebf08f62525670f4320fe6dda24549073c4a59b94b85dc828f179531afa0d076cd2a03a43986766ab7fd1f8469193ee26a04115882579070bea566cc99c802e631d7bf01d724d2e522d4bedfad2041333c9c8f0c88432cdcfae8fe2ac64df1416b60e91e72205c99d98a8a05004a78646d7a4b48d83a8892324b3893b26621669cd484447946ab14627ed4be224d29da900d16c7d9cd7e0e80d63f9fd6eec2d8c398b326f4e0097271a62e9937370988d86d3c8d06308bb1f3ce12a8bbd4ddcc843cf2596a0977ea499c4cc38b6992cd19e93c82e44c7a69a5c169eb16d11ccb1854c411654f40d3c5753c1c95b1778ded4331c93783af76b1f46765c2d09597b5c4cc2b33ea5ee2d0d8c77d2d8882cc4f7f1f52913a0f25b4e44d132caf4484390ae238d6a5b34d228c7663df1854f64cdb12d4165f5236329aa4ed8535a7ca212f18c2c24d07854c2dcaeec390451c80fc9e11c1163b952feb1e6726c9934710747db2bacf91d3af2d58220d932ed23f3c605420650caf0c8034537104e932ef768ca63a1afa6740d08b97cbbf03daedf5c1c6ec23a662c0ef0477d1aab617c61bcecf4953346a471c67d1ae06ffa392d30601505736b06be90ab913ffc34389853ccc32da3264535ad5c308424899c30c88761a188782e6ffd3949bae97ad2e9d26d0d0b93b19680c57083cc4518f52fce142da96f41b4e3cae7b44a6fd0bf68aebca4eb5c821ea134f01a4bdb8684a4aa8704bd423ec49738dd0563df0569217fc82c4428707ad4fd8cf07aa7a079da8f106f17614c4c7a16c1c87cc102dad644923b14048bb47e02ebe2fce950f8703cb9630f473069cd662e48f2309be1b9e100cb661870b889da635d7d9143aa4706f22f8ede20bd2403e1ad3fc75e54caa1d797186900fa2fd6b4b45d89f86d54e01157a7b36a0653ae1818044104723466b5aada8a061ae380fd21c389cd25f30815a8dcd3fdd3160a6d66108afdd7241a0e922482ceaae9d07c6a2690b8522c163ba8facbfa08d9ebf19e1e23d509ea2c2819b351ba8c453be5b462cac181f9d0b76baea070ca1f356501b46805e7e805692686a61453bb1b77053396ba613beecdd3ef12e9d72f61399cf768a613ba05a46891b9c3418bea8ab3c38114ebb646ed61848fbc3be2f6079033b964b044123b52a7eba58fd31894903a08eaa13f6c717a97d6355ac692200305d89e2c72b33451364960fff0b7fd714893e97156d5aae677c42211161a15877cf46dae54c72ff40af68006b10cef5c925a857bcb0387946419e918a38bb1def405d6e95b0b346dc1cc015f9fcc27ea22a3aafd12028879b523c01a727d28f994d9ea0a9004077498bb0b8ef4495a0f917fe930c0127e8a92c627965f3d0be13279167ede1fd26cca84df7c7a479716dc9d3377e69c490f3fe72f01d9abef8edfa93eab09a0c9f572607bf7eb4c9b965b9e309e0e60fe123831160313c60a61b85923b79d9cd3421f471807e563d1d3bb347da349b394d36d3eb64c11fb316159f9cb4c560960d188f2351304fa37fbb99733d18c21099baff61d22f633d55ac4405911f3d5daa7c267cb466267658b91ca6b0d38ee2b1e1726f35c95535d5eafec05840458c0e30b4c0b570d4c64b0bdc04cba2ea0ab050d4b26efe3c98e80a5c003ac015977de32312b287237e9736e4cf26688475701853e714e29ed303cc5f5ecaad15a6d74f02ecd15f3eb902a42fc680fb5ba9af7c765afad7a6e1fa07d452b10f304e14cfe85531e998fdc1e3adffd6eae7d484fd8d05c1e6722d0b706c8cf2238df8f8826b91e816761169df8db83ee9b6a8dc2afb57bc456a9fc725948d408cf1afc012d5a975a1637dad3ac6898eed636d228a873de1850697164a723773560b3216070f5fffa5c0b7121930b6816c42d5e38bd502e1984980279932287c8c640ea698f5133b6bccfb9d2d7af55740f5d3f5f6d7ca60a77207f826814700a53988c0b8e43f1d6d5cd1df1355a99c5e0801b1832996771b2d393a241ee664d45e5feb29a12fa180cd0aae4d2cafe76650042a6a95ee4cc39f105b48f1e6b186b722d916d97cd91e2af4375e9af1ef6e9fbe3f3272f5093394d4731922eb7ddfc91cb3921c60782b4e02ffbe4345e85f6ef091d47be22d358b58f4810078aa8436066f67d311c13b9eacb7b18b377c1813678fb820b318223cdc1677b1709cbfac419680eeff201260c66c1a9bad1abccbabb7cc45cd70709b274ddf0a3f174d45c2e803bac54bdd0e4ae858400160b877b12d68280a9d6e66ccd25b18654b8231d61933aec341afcf2e84b69834683c929ebecb5616ad9e98ebc73326909d922375137e59f7c8943d6b21e73c730fc440fd612775ea51031e1d6ea32c148df20522da0cade3a8772c78e19baeb60d4ce0b9aa9a4f3bf21bf0bef2bac2b601ab24841a16084e0127ac306827311457f7958ded0e069d42eea1f05818ef4aafc8ebcd32ed7371c5fe30cbb00fd1118b40abc463384028358d24003a11ffb041864d94d91e4fcaa6bc520dce25c89751cc40056568bdaf01a68943e7aa6f02d748a39ee881e17a64d778a0abaa20c34fc138f5b478411b2785cd590283eae6873bbcac17d73ffcb178106632b605a58cc6b862a82961de13f7e2134b68b64b453e0d40e750d0945f0fd91c6363b3747068cff257f5b3eadf921f63ce1e87ba20e62403792af1542b966f599aca838a6bf4970ec2afa0a3ad4130872c266ffc2eb78762851f18128f0d6a64d353f8a0fc2531b7cfd755c241299f06c302060f4fc95bda5b84fad5a70b04ed6680607c6f81ed896130f6e6f246a79ef701d617c9fc8055a41d8814a85e84a8e40d8be2ffbc1ec0a97c54ba573d7f063fccc5e576d9de69e201aef88afd9cfd8efe7905ce6f1b512d8abb54aeca3b590371f3c408291252fc50cbc6c4a694d4e36037ec71a6916af70fff58d22be0f70d9755e33482f6246c757df36e02d80a5c2586486d1e0181892d3f0223ec48fe9587200cf366f977ef03566dc65ac06abd91e4b991a0040df93b62fd85ca1b187c200493b6d7c25b660d57cd1d350a99a04e41d7a8cde3d05c954065a3d04b132fd5a9041e129016e46734807e2e84b276b66ab238575caca6a638a26adb6ae488b92f84282cbc75730009483785a596c29bbad7c26653af77f276a12d30b2db8492ff900bfeaa7c2bb46ccac8a354addb763ef927226f6f6f087a369c7b8402a45ccb1e26ed9d6a5f8c70c33c2d593300c5299f28f63f1dde9c5856d4de1f8f0b833a643a7e6986814c275ec12d72546ca20395cc79cb659e12d46200500a424e384258b19f9ee5596db082a685e3bbadb2ef910c93327c1211c7fa766ebcb619604fdc954c200114d2e4159cd767b83b2c30ab971638a9d8582eb0d76febe22c71def299cd7fbb451ecdc7a41e5680f542d95dc9e650b07370477b1425eaa72890a6502df6cd78187c231ee986de65fc1e912c3e4490a08249aaf5414c52f01afe90d809f979dd3c6df03cc85e8222631227c8c30a28f532f2a6462c09a85e36e26c85d217d41e17d4fb676834d988461c28e6820b24a07bb403d1761a3f10bb835a2d74f935ee9ff8251e6414128bfa00398d5021f4d3df81f173264bc4fb6f74aa1ada4af77a00abbf3e83ddf3dc934f50cb9dcb731fef897b3f6a08f00b538582bdfa0b531a322be0e2c308378d868182a0a109a623c11ac923e61e75853d5e72587c70a532efef8cb1811f29ff75654836e247a8187a6ee92300df832e205b1bc87074a733196f60ce628e53fe507be5a04dca646ba164a4a31a060002fc34667a2316f493a306f6edadbf3bfe66b83cfbc694968ec0e34cf78cca9f66633c3d91072133c587f8a08744788a45e06ab13b271b113d71b90609d33a64984c6c32e403f8c0c4dcfcbac23701244612e0b967b01db3b87af8c9a618840e8347de3aca008fa30602c14374aa4a47d679f480e35b4480ced6cf025f9eb0d5f973f4b9b034650db121ef4fe0f5e47881d28a2218208f6dda5c0b1d00112b49503cedff7157504222dce97cba2dca0e6fdfe0e4667dda14e0019d78d3035111e9b75409d3362a09b83ca44647cdc09e9c588d0fa3d9039428e022bc85954f6c52ae0478210b59b455c3a1804443820574fef1cc0563476fa00281c7820ada20589206dd14a4d90b9684d5590c468f95c90cf68e98cbfd329faca3698b7fd6489b67544dd78165ab0ccc24cc4f9e6d48481b0ce0409ea9f1121ea53cb7e04270514cead38ca3f21e4a32d4b58e96b51ae624cb7826d88099d408b7259949b624c1cdb278be48abc7b91d7dc00933395cd27950fe26c0a570baaa3b346768c5e350a83a468ceaa63d6cc727fbf63a3a96ea82f41c4d33b24db089d08582897e278d7beb08fa91ed9b932a95ea068c86cf3f7c21a00d23dd2cf3cfb4cb3cd7923e594c00d54250102335f9d27d0ed9937a00d1d3f10e69b5b31e6d7d8dc8747905587cf340d1ec4e3c24c49dc70aeafc71b84f10214ccb9782e3dccac4364f5ca90d91082e9dcb81c9335077279709faeda3bc3acf7b6f493f5cc24dd345ded056f46f0e65d8a672cc25413076381f9df6d95c38f42c54f8297c085232b6bd9bad62d6cec4daabf90d0e93aec7ed60657201c0ef51104296033fa7998894fb65a89fff1b05a85685c6607421a2f09e1a62499b6d1da83b56b9e35a1b46e41039b990149fd2224e4dc476542ae5ca7997be803a2a0ac5a83b008608a002297adb39bf8479c9e0b8cc88ef9f120bfc06004cec94f3310c741b175030dbf2e9c101ef49e2ad37993e83ee3187cf9c7e62d4c2640146941fb9a2e7548253572eea34146dea844dec3350d1aaf4dde4f03bf4538871f10d133eb034fcd546cab89b94ced3297afe201a298526b4417e8fd0be16b6798b8078fe694e587a87ed08b1678b2d50d8b018bd674addffbacf4a0cbd1221d6e2947c36289524c946ccdc1658e8b001e2cbcc4a3f7efedb5a3907eccae4e58ccd6f1855d11edb819cbe699cbe475f654733e917576ddec68e9b361cdf73fe7b70a144fb7b62696421ff1e7832803d5c54f6534110730e1e91c384527502a4b3d09901ff89c076a173a7be2c677927c9b23e18e8f5e1fee94ed30cd41a1b88ceeab37f504b092ab4d999462d314e015db475602f93a23681c78517a346196d42f08efcffca2f7e49ef1eba989cf13d546e1897d5ed9f177ed4999ac15695dbe59d948ca5d7f76e5b191d5f9434f2f2a40d97076b475152994e133d0d40f01e90ecd7700e5294e28b850f078db3a6dcebb0712e43ff28b3f91ce9d23e0e578c2e822f606e5ad90f0bb09e990eaacd944b6a1783ecf741ac30d63f9c71c003f182e817e9f0741915519c453c9b6d66954ac37be9ea7a0c18b94a62de7210c6151acdf09cb81bcab44cae0f8bfc6d5e88fed59a753b38c0ae5dfafa990aab4820b3b8e34ceae6d6c6792a7b8da5949425cb03eb50d10d96d82faa2a7d8d7d6eabe072bccbf7bc8093397d64ac59041d0c3e482b9e8b621fcd40f3b2e3a91d335808a3c0b54a188669976eeaf6b45153da1cbb92c66824c5ba6975849f88d5cf9653560390efd0c5edd2e228b1653079658766a7a7d848cfede2391548d5b56b27f6668dcc3e383e52e561b2fd5b57dced45eb5ede410eeab6c007f67aa82feacb7ac58816bf6f25411a999d020c1f71fe9557a8b6738624dee0994e1a59dfcaca90cf6b3ffcafa2421fc3a3ce295f874e27303398147f1054d6bcbed8492b8d46fb55a00755414277c2e0fa53e0931ad18148d04231a49f18912cbf3c6bb260b9d02b18d6fc697088c5d09bc1767d3dff491220173efb2b8d52a2eb9804b3c8d6a8f10e0b4623659263fad4423ec03ec4b24bdfa8dadf9dd8b3f6310c1b78ebefa788e041d160682634362d688697613b207e88dbaaf733189b2f9c0eb85a07ff58355def7d7e1492c6400b1917f70a077e70cf2c34db1314c4013b3f600f3310d3669c3956b6a14e45b20b1f0630aca194806b5d69bf4ca07dad282f1cec27a42dc2491b88b9526d0cc5961df8bbb742800a5d6f31656d192eea385752bd95c4a0b6ee80209bbe1e6f8d22b1e15e3b92a7739ff3b8f7298214696067f53e81890328acef21b254ec33d34707231d5c74cd5fc9d0d30b83540bbe8d286bd640343d64de907c0ecf68765449fb77612feeceaf361f08cedac63fc2944de701dd1edd27d6d688683746a144f30c686e1cfde3b0e1001f191edffdff9d95e528ae281750c2806fbb324ce732c8fc2984c9c0f345c98a0e030fd726b973acdf73772f6bdda20a03001562485f869d163f23f7a52d4ebb3040bd580074564e37f7bf8c884f4ba60ad34d9eb64f4ed2f1417c9c60d0eea66985c61892486019fa6dd10591de84b0118eb928555f3a7a533fd8c38ea4ec693a253f3f561011270470e34ce604a5328470ae1310bda8f89f9b105079942968ce3b8a5c6b81750bb2c617302934fe90ce7633f988f5da6c2500f6f4376e336220366c48174563a8c12a42c1247b0ce43e2291abb8a1621219218a29898f705cb2eb2b89adcd68b5c592719b633fba79e3575ecb5c95c7b6faa2e2d424663d48211a66a6e60f64af079327b213984ce15e2c195e9dd7a1b8eeea47cc32ba737aad86c7cc4c29f22c2a875d6d59b8d3edb80d91580e1e6ded51b02bde875cf6e4400c7e1e7acd43d9607607cf85a4b8d788f788c441112a7ca1a5d384f263d12fd900d46b7e95b640ec3486ca78b64cca2af1177d8e646c7f57b662eacc080f9676fc586d709cf6ef505d8eda923a10deae67bf73ca277dc7a53c5f8c346d796e2c70442ceb3919505c33c496540496cd9a802da79356a07ee50aee6fe39b36986300a29fac4470fd9b430754cb28828869f8b5fabaa067d5475bc5402a673c27c394924a0becf05ae6e018ea327533b4292e42d7d1f8c90ab79505ddb229ccafed795732a00ab9056de9d4965fc7c792b889577c35802a3b455f5369e0f093dddef9c3a31052976c34d2a5f49f4874cb97e0ca8aa3478ed08619b24acc21a70d01e5c13e966a1fc42c53f61b5bc233312e5696c4bacd2336d9e16969e83c93eedbb8ed6e8646c9737cb8dbc2043a4989939f94041a69c2fe805f4b49b71c6da9a5f4d6a15a3b8abb54ca2c81d5c1ff5b7027743f6543ff22b8a71bbaa953f8ffced711b2844c6c7b5df759736f4a070b27a59fe6d8bab85db0f20ec1a0ab3a470d3d09de4ec93e2e06cfa4858cc79a0cb604bf9daec60152630b8bfa9160b4477fdddacf96da91c60c22bc952a07f027c7b6405f6f2ae9b1a6301b78404d70a07ba205ea35c5d39e48238a4c9fd11de73a2a36e68348a88e522ccf866ec758955134107c40b916f9365ab141a54cfce2e54c42d3eb5ead65a8c4f01b00cf6315f9e5cc763bdade00b0dc381cb68d0e5bd5b73e5b2350352d5bcac295483a611000614640092dba3a12f515d6112bd6d0e80cb1e8afcde7133087c7919fbf5b745159bcc85f86efdfee88f654715b02cf65aa26338639e2d4a9c3f1e35dd4aeb178b336a1abbeb254332ea50d7fb97d8679464d157cf09a8e97b227e9aaa971e3fc3a769602cfcdd93a9a7695d9e2680f5a714e1dfa4d3342da7a9b48dee74f819364d5f6fb290a9697ab0a8739fef9b02eb4d314ddfc1340956d3fd10bbb0cab99f6277fd6428ef9b347ebdb054b4348d5e596755b034995ea38475a56983ac00aa374f4165091bb7f964ab0c4d637047e90895a6e83137f42a79d6ed50c514bce047a610509afac63b695ad138aa4bad490faa1e2a5308264dba15a1a4a96e239034e906d248532901c8cbc442f596c6dfaadf82bea37b88a3e18c6c8ac798eec811e49ceaed92d3c972d30fdcee0978f8c687a48b661a1e5483b655e41789a4c3220efa5398c4292df02bc5fdef8f4ec8c933677e240d4fc6bc3eb1c3367c15022a58a1405c80986dd30191c51ac0d9893b063a912522e39197c2ab848cbd4cb80b5902c24a6c46920de31c9f1de555bb8c6f79b79914728bcfb3d1bdfb1c8669b62b16c6dea8e32ec7b96a81b60159bc04f5a909428099c47713b2e59629a59464f103e103ed032f7ad3ab3c8dddf93276a3bb297447745bb4549bdab39467d162821cab3335cec92c15a7bde7ec74464c9c98ded499b0bd1bd49e9dbef15091d68b402f7ad18b340c10d50b38ad4dd4b4f842302bf645f52e29a06ce940a26e27a51083580f7a507f9e871e1ee4c383665006d592973ae57976aac45e11f9afff95f43850f84ff84394ff06e5a74179fef200e89b9bf7024ed0be801c2f59ce7b1f1653cb4be8ffff493fcabe781e1e0b9eef82f7c1d3f2132ce72b12d27a50e9419a0883bc0ccfc373866883d4a1f4d537f6ed699af6f52bb69d11a9423f1ab912a4ffe8471d14791b27caf36b3cf7a695273d0e0775dd75d75d77dd75d75d778f3da604f9a3d18f7e54853221a840ffffffffffff1ba9f9422e8ba1ac165ce0dcc60d2e7e96d2e2b9e8a96275fcd49f8fc1c3a9871365ee331f71df69d2444ca436261d41e04e250cc2f3b7e742eb8fc3d7f88941b8fe3814cfc3330aca93e366f0ecb960caa7f7c133fb2cd49f566116f19086be8fcf3e8ba0e70b0eb84823ca88a228aa7620ada8454ddb360cc3b0ad468988240bd1d04e30ecc444e3ce8ad09d2addd376202dcc463591b6f52762d926c2235a7fa80ea489300cc3302e894b4483243482551999c9beb7d7f5f839f47e8ebb4769fa8e3ba72931f0c2c20cf9d1e3014c9838af8058563894b68de4b184bcaa6b27285ed575711c8944faeb49703ce846a9fb11930a8934dab66ddbb6fe78ddb66ddb6aadb56edb56b7bad5adbaaacb6309f932992aba2226351951ed4fdc4675239148ae95540481296164605030214c283e21ad18c2c4501cc5d172b22c1bd930d94a34518d8a926551464489a1d013d2c27098d028c4f52782fae2e84e4ca83f71843d3b49e886765a988dae09dd10dd9d296419a654e9a08412180e83c160aa91b4e28689db2872342399dcdd37e388124f626de658df07cf6a242d4cc5d4fe444cc54494330da66e946796615c55038914a2282a96d08e2411e34e5311834548cbb38d31fbe93b7bd32bae827b77777777774fefa6a89edb293d77bbfbc122e484b37b466c678c523e8cf6f48d3f507f3a853d3d7b82deb2f89edf3d7dd31d77ba9b8519325431d173a96f366437c4d4cbccccccccccb397994fccd00597d78295d990f83a73763a314ae9f150083442f6b4622996fad3a7147aa74a28544a91c18ec23828f786b8d26436b32a6b0fc3cd8654597fbc72d07366e4c87650153574e7ec745660c856a16fe1e6855459e6a02aabb2ec7b27104b2523e44e2b032a519e19507f62d61e0651ae32ca71853ba15006ebb0e1f25af80fa18ee8d8bb73efaea288f40a283bb99c3a425aadd22192add25d09c600eb6e9493da355233ba489bbaeb957577f74ac281c29d8446374434284f7f5beb6e97509e24ecc1b81328508bd69f2759300b8925bbfae3e13e2d0dbcfae3c1715945151ef279ae9dd657baf3f275aff7b1135658df84e15851d27ed272e2b278082d21e8810baf086d10424862d829c07371009e9de5589dc3008fc503e999a1705a6f7b41797207be0fc8f1118723929a715a4ef2248ca041784a3c1fc2fbb8a83da47de136fc0792e80912181cc074773bef83bde7c52ffbd6bbe3491d17d9701be8fb81b2890807b741e96e1c853bd8fbc868276e161521a4cf9ece59662164cf5d4e9fb8134427ad588a1e9dec9440a242428a400821a4667bab3884eeefbdf7de7bef3d7ffededb8e3b2abb9c078293437ef60a774e2a2358a6d57fd4de0c4f86583d0f4f2d6a9cf83ffa1f752f62e3548333ad907e343ab5cacf8ba44142f13eae11f1a866064d06cb473928a770e7798ce7e1e93c440f0a05e89a6f46a30b14164ba422f5ff98f7eeeeeeeeee4eef5d4befeeeeb6a58ad4a5eb6abdd4cbc4d44ccdd40ce6d26dd9bc90ee62b5bb14b6b332425add3df622e7353c8d465d2876470e1036840d2b22feff971bc2f79ebf363dde8a8805f9e072f161a4fb084738c2105d822e418bfeffdf53dcddff537c902d9256f4eeee1cb2a7ef2916a12bac415a71ebd3d6595883f41112eeb4a0d7dbdbdbbbd3fb1d577bb6e3da2885f4939fb4135fc9bcc34c402396aa59348bd61fdfb66ddbb6ad230769f909c4206fee7c8cba0a83f47c11ba8ec2b42b77d64fe8f67beff5bfd76dd12c9a45db2cda66d1368b56992a135d29a4d571994896775c166df3939ffce49b8c8179e75d4511598deef495cde89ed0bde8f63605bb5e7191eede07a4602c7167230ef6ec849b14bab1144b1d42488a5addc5d273c1744bfd711293d22e16a3941cc771cced942176efc3871063bafec4956a4456227467f73e767a2821bdebfae318d6611db73346aefac189789e9d48c4253c07dd90733e48cbbbaeb1dec76993a6eb30e70e5254e1bf7777777777fbf107ce0ec342daf3811cafedd959fbb35548cee039463106f9d9d3a7ef6e0686768c63fd711e7aa03b5d8402ba93395e57a4d55d770cf213c4203eb7a6f05d2b66790145518f7a2ef47cb3da502ad4893b554555b1dac411f65cd52565202d6a27b5cb7177a7dea3dea462a42245518ff2f7dcf7bdb79c71808552271948eb723af5872a75cf93e9a26d7567318287093c4cd0831eac604f1f21af4b4483648499998f90965fd77541263c15deabbabbbbbbbb7bbe6a9bdf298aa2a859f15c0b534b658181ea18aaff87f3e7fbef8e01b394be59cddd545bedeeabe67bd5e3b4a9aaaaaaea6e07547339560b175a58516d380381a67137bd2f537134d0f4bb9bdab4a9eb4c64152058620969f5e954691405618c52c6100f15c9fe22f77e8d549b3755932b8e8396c50acc60a6d137008f70058c210c21e68839dcdd3d2e01949d5c24bb4bb8eceeeeee12d8238a28f8849982e39a68e237e514295855551561d5847cefc33f5230e59459f9ff7f26e4e3cee54ca4984e940dde2b711c07435659957995790773aeb91b9d0dd2e9454a291c47e2388ee3b8feb8c6711cc7699ad614c7711aa7711a0761c88c88cba2286e71143952c571c7338ecb54cc88b1ab381a855cb8860ddaf38d465e6973e7b9b0a44fae0c62e158313ac5791bba330d1fc37efb1a5fd23d9fa4fb43b4fb35da3dbfe37c8e3d174cfbbf8a9b065c3a36d94184b47e64c5151206b17cf4a2e7220b757d8c851ec8150631f5c76b84399ea7a1a0dd2337bd8f36755d791f8d3db6ec01d8191c4830c762c8dab5bfb7bbbbbbbbbbb7f6767777773f2c86ac582814c2300cdbde8e333adc999929d1c321ff72fd5fae8be842e3427209d19d97910b76a9171997ec6242773e9dd4ba889e8beda06f068c1a50eb9255f4cd2801825a97eb06d2a70278ae89029610e750a2f6ec8c38e4e562ea389d1451c4b28906b51d96854813f5a755de9aa815894c2a345806730ae57e7c62c2ebda0ecba267d4fad3dac94bde878b5c946d8ca2460d4a853a45212dbfa8d38b5150272aa2400a29286aabb8bdbdbd3edd247bfa7750c4468dddddddddddaeebbaaed65a6b4de10e53bbeb61923d1a65586032c1cc440562292778c1920e8abc3599b8a3a2e53261fd5a31a40bc972592c2a3a32988b4545470673b1643019cc65496b3ac1cb843989bbdb52bbdad5ae3d4ad2a765f6b4ded49f1fb56767bf900f7567b26c7af3a3d18fdef4a68a8bace20755e5bbbbbefebeeb4104c9ccbcbbcccccccccc3c97b9626666aee0bb255a2e8bb9ccd9e974570f636f134176678e68a2892492d04ada45856f886faca9a1bd79211427dd7d378fbabbf3724e79c61f9ca8f4bd8fbbd3cd2c652e5139628cefdffdf031dcf919b9436960a918341ee3c6a089ddbd17a0716edcc4a0a11fe772ac16715254e48e06961383867e633ab8847ceda9a147dd30ba2f0d23885a6bad75d44174f76e13bbbddd9f225f7b4870ea8812fa9047898f3ccf4e925862326a8ebfeeeeeeeeee7edb3268a3b027c49d0ebd8f9e1e25d2e7ce10d71f1f21e13893904a94ee27efa34fd5129ca8b5d65a4f27ee7838213b7c324110415842b0c20a49100744811cdd094f60088ee00d28823438735dd7e55766b3217ef5c74591f31c0b472432993ecb644ef090b3d3e2040fa9991dba1d39df931cf96a08144266e0f5daa240df044720f6da6baf993ec66b6e7acd4daf99e85a3044d7022b1cd1d55e73116bdef4939f2dbddbdd99cd0bf14be497c82fd13581d7da2384cc4c0b560b0679789f37b5a73e174bb7f2082fbc70bdf082c78a006860c8a963d0e9c495432ce28d47ccbdd75a6bad9b81d33b9dde290002c0a0a0c2966aadb5d617388ee338ae6badb5d69a820a2c6016f4de8a76dbd1724bda527396655996ed96b6b4a52d3d16b28ccb38634e87937513e47c9d16f391e87befc45c07a7311c4b5a38966672382da8c5f3b2c1602f06928afda9422a80d299518203fa98632d7d0c084188f546b4e7049e8b7da15db0210753ec70e2c1076a0801825a92360268cfd782419a63c5f048342221db5a81ae46094079c3e107fa6e509e9a18f40981be8da409340194b94315c0b1b17fefbddf44aa9d8ab2338fef13e7e35870ba6f9e54d1a23dcf7a81bed9c2aff02b301c0bce869382d077c2a900fe6f28e6fb075be3bf4c83f7de7b2d5e785b675be31ccbddfd31c7d2d07f9e37dfff9df2b4fcdfd793b8ecb3bce7ef79470b9efb6bde7d4f45470bdc7be3dc79d8f1b8f3352ecfdbbda924c89d2fce903bfd018082e578476ef7e6089d62c0272f8b37b793f0fdde2b71b944ee661b94034cdffb6815e8533984958d280798f6e3c4cbff05625ee63de8fea63721811bf137e3ef23ea4002377ae166f621611f8b6ffa733b407bee94c00d4a055da2cf442f2af657d068b8dda9bb2fec522b4137b04e9de3580e18a4db7b8594ce209607debee0173e1d079581a19f896e809fe3d8494620360bf7a639d0fd38b6fbe286fdb4680f83b4d881b6b0408bdf178f233663b760c33512e24f2317b00250353903432535386431aed0ac2057dc50a925270c2208351f0d7f87d3b9aa2a2472506b5e4034a8608690157d1b0d4da8302e927cfa361824b8416bcfa3e0fbd285210475fa361b88f012c429e214de0066fabdf1bacbbbbe7119d2f2aa522b05c4ffff93a08a4a45921d1172c821c36d24d7755dd7b58d8c6cec2b35dc4463e42557e1fcc6b67577378661188661dd5467ba732499da35544575aba35a6d23dbc8b661194e050d4e380104204c211f779e9031648ccc0d3237e8d8286aabd8d5c6ddedddededdd1b2497712755d6b3bbdb779a3e7b13954ee92ea1ddbda65e8cf6d59edecb45ddbdbb73763aaf4dbbddbd5767ee2ed79ee67ac21b3a3227abcafa13e34a1491231a12da1d19ed9939f52772ede9498a2569d29c689f2c17ed99829bdcb4eda28ecd4304a112120cd36a6f23b5921c070a77121add10d1a8b584045b4dfa5c0dab23b562a1384465a3b2914412223083191c411bd08437d628d7a05c29bfe55dcfdac3eb597f7cd416ccc839a3ae3b4145470673828a283ba426a39998d9b15a74643a381166d3fa50f498d60acadfc9f953639068498d7f0feebf035fa83dd46028f43e38d4d5841e1b1045bdc7cb3b9d91f408b5470869819f3d173ac01206696842795ab0febc09a33c2d208b085b2e06c9a2077fd71f151cd7e1c5a03c3baa5fd49f179275975ea8946eb8e510b2490000d3160000200c0885436381244e65c57c14000c587844724e4e30938642a128c76110064110a30c21c410608c21c6284464c60100a85947ab21f5ae119d62b3ab6897f13768bdfff6f108a8354b9a4763eca3709d27f0689dd0f571529a8b2ad0e5a54b81952e7f8269703d2828de0b70f5241098c76506c69189028b3687cad5f71d38f990e4d7af3a988938080dba3a9734bed9373dc639e3f498d4f5f438a616ea316d61711853b1fcd902ba708aa4912b1019b69d9971858a8d47c9248710599aacf5320376a6e302c52b53719bfa8452469e2eb6050f0d9d8ba128d4a5ec16b36a6d0780ab0536ab457a7e68377e940f295da8ecfb4539c47af6918319ed719edb19273aece21cb9469c120cc5855238aa5d7486e6b9b3ef0d1c1665e2d4af450f5d28fa4019e173f487cbd8308f3b4bd39eaa7353adef44f69864cb04e60cb95ec4fe182f3b70bc1410e8ad03135b705931ed71fd313371d11e5f931f507da0d80ba1675387ea0d8ada900c45b1bca1f79bc04b84858f85b81478ebc7853cd2078ef5c8a7a8055be0ed4c121dc6d003a57fc376815c34ca8516d7886eb1393b974dc9a88b2d804554f24a040283358b313fa673130cc6a9d37bac99d060b0c9f2c4f411eee11f70208ed936eabaa847fd0e325172bdea3ef3602c4637e385ce2f03ad9c1c014082ed47c5a102ee46601430b453c1d2e9c3cbc71e01e7b37cfd3b7200272566d37e6a8d968ea66ee1857c598146c8a67c57bf7b84af7e3153c3faf53a21373e8395f58bb254b28dec93c7c4e1f1406bbfe722bd300f59a21417d9e3d3fdc570439ebf99d297fda95d56c3502e769d4e6f292840b582b6bca1b22b06247bef1d79e7bb712096d8f7d02ba02d41847b88e35509e59252774cec792f2c385f74671d8818f29c59f15238a5841155f4a5bc19b2752331a137922bb5cbd01df755f7b8aae2130583cb059b71e33d864cf7115d3d67c47809d45917d10b2ae4825e168479f5f1bb9ddfc8a1d3583bf0d094c93eb74022125097c75cc7a590e7da6b16571501f34f87b784d4aa3a9a4f801a06f7eb29400687c1432559983dd534e718f25877f74ec89ce31cedea1f6ce21ee464a7c2d11487d65b17ba05f72ac2382250f322e233aa153ac7a004e217d11f79db78459ba4bb07382a049a39469487c51a5c343158d791848e20f66a70bc45477633927528a9a8c9a665ccc86d1cda47d3dbbae2fabbeeb8378b4c3f405e12b9c95783e19762f3b08c285253963a18830a8547469dfff3d786b2065774cef467ba586428cdf285e9d6cdccdb8c333f3e7d9beb619ec6735bb268aed45bb3fbb38cebe42b94b62ca51d23803b1a674506838a87a5718a4976c81b6b893ad3a6d3c429de1c5410e66fd200b721a423b523a7dd45e8aa714b159b6741b6dd224b776b3c73db9eea197f95904f0751130591c6d971dde906e26126d7aa2454f8eedf5e731da97bf6a7b958f11c5337e998d449cd41d10d7e006bf6f94e5f29e22be13e4a1aa71459f9590462e183b2d05440cd40533b997da6e092962fb4d2aea3437064e78463f264adda3274c7d2c2bc18fb1525bbc06d4d4a614b90de2e3721a62bbd7453b50fd3197925485d87796eaf05f84fb574b602cf9000366020d14ec452364cad8357d1f4c849f5df64163d791939dc9e7707cdeba5d8e6077d9b44624626aa5f32b2b1cf6c2502ea80415a647a32ac35c169e18c60c3303b8c790576e6d320e6627e47a151a8034b70165f00c1fc285e0944bc46111681a5bba0252efafcb04200b4ef72149b16d6aac46628f3a5424b731f86c968b8a0275d081b94d4c2edd8abc2d4cc76979d4b60074a6326b55aa75a90a96c13c38b92ad74ad4169acc0d19488035b405542b786f08a3b2c755b02dfa6854020a2d3676da8b08933bf0f44c4b316fdde7fd698a6be1bce7bd05a975264d7f4dc907c550858a16ebfa9784bd1e35ccbf3d662b903bca54bb8061b498f19011841d57ce8686ed0dfb18bc1c45aa6b3626cfb428b768f2789d409fa71aad9fc78eec36122555fd344c830dc829e612d3ac83f4b91327142b91229c99ba09490d906bae17bd11f9bf4b645737cc623a8d2f48803e00b901360393b0150ed3a6254de291e5b906c82f8ae475dabd4ec045b67cbf30aaf6a9587fddacb97681f1735117b5297cd466866c8a38ea1c5a4ab94d608326f0c9d340f7b430d1f7e2db38dc9d79b739a72256cd0b64fd960136e8e2f17cf344097eca75d318686953476b0552dcd759ee5a9bda138e734864606a4f2cc08971aa56bd7aabc62df71a96d034df4ba2a85c6e2137738a5512606857485a7eea929d55d87c116525a3c5e618c960ea708043143e902b876a2685a9d53c0e57e6faa75823d501ae1ffeb44b4863d259704d2c550155297cca5209408227ecd4b29ad5710d247a8efbcb19c81f1e807be9f4319951014ee24d5a193014ad0c5d7c38a64c523c2d52ae1d7bcde5687ee5ccff12047d415fc67a13868d7217566ce950fbbaee4c762a0f814778faa75fe4e70ee0d3166372eb748ba3a93302f4161155eed820b1aabeef5a21bb481596802bc99ae5845b7c58bf05c189d86339d3b861800c80daba04518952b99df84df404e55ba4ce3c7b2f3f4a73475a7c845352cf655354b388ca19f98d15696fc8b7ccdac477fb1ca09000da6f18d0e7865fe14020fce0089e24fa1812a20639d15a527458bc9b4afe8e846010536c05e041687b627203a49d3cf0c18cc6a245d96b9d84cde3b1784fdc16310b4a6b936664ccc7091ac17b0acc44d74de06e3ccf4562ebba2ac3b9699d487554a73b00516480082ebb2e4a207b41cac2bc65cb4ab4447aea56558d05f7ec38f2828e65a8804bbaaed846293e9ac56755c91579da6f399bda9104e51f48d361e2a6550eac333563ad147c7cd3aa1f416094be7db10b22919443040d1c5b13d86d60f6971e46850413310bd85af2f4dae7281104c64832b7daf35d53c97573d4d2a47e102891f412190b2d7fa756c62e142cbc18397a727b72a1ce91a8477521c3843c53b4baca822c3f5884df26b9a17c01c9214324a672169c775d3bc723cfc9baa9b68832371e58f9392d14d300b2ac88f6e32baaef70fa7274306a6da80c3ec2409b744aa384adae3a11a4838036e5330670edaf16b0f697962bbb28d29ee3a1af2261fa35cbdc6445d4a12d79e09d13e9785d945b8a6c32f35a62d0d919a50e6e4d2f840b3c23a74a2d03121a46dc116381215580b7c74a76f164bd3359c523b058e7aea2f35959529a3be06694c5676f9000e9ac6c727ba9dac0490fdb8a1c9a81f9396ed1c82842a32f783de76e9c844f0a8d63657bf092a873841cda4558ab5f5dc96fabc43ab9452c2850dcd063c7ee4e0d31525caa342583b680b48033f454710f35541f2330391242b24aa084eeb47bead899c99ddc4dacc83b63f5dbb30e7772df16316e6d8c7915d7a7e23581f6ab335058f4504146f909a3c3740f8734819c9225d044c3a265978ca8252d521dd4fdfe3f07bd8bd23f9fb0657b5320ff5a962abef8ce47f5fae245f1d1ece35686c2b517f1892bf45d2a1be1e717cda4866aaa97f1cb0cd4f68539e69fd22fa1add14d818d99028578057bfd1a94dd68ebd439dec9f11125549e8647599d16436671a06f66c9168b0ba667807f84f1afdc8dacdc32f938958f43f09ff132be1981823e458dd1b36992359420e49f808182171cf56a4a38c2c89418de6fbb5d40297313ca47dda3a62cb1e85a8dbdec60e6c33ec874814f01824c16b3c417690bb59e2764532c64acb8f8ea38f982dc5aa511f664fb6401fd0aa1e4c296d1794b964d0134e4c74e94f84118544c640e98789977e372efeca7edc8064ca8f999dbe921f37da11f36f25575d0282b1d7cec94760c11bce07ccbc67a54bd71134313dd76a5dcd51cc634d0e7e7274427faa75e88456744aa952a354e5af22d356efdd096a38665e6381654a537408e8a0d9c387e11c1d90650d6cab12f67d1fd958564b4c2c9e4ac3d41d0edf2d4bd31b5593fc63ea5b1209bbf72af2d92c38a8b6916184bf2425d999b295b438d1023c97d3e07f14193dd1fbdd90a9b001b331403bee237a92a0728e9512bf2e4eaa6c2cee3a746af924d18fb27d440cedaecabe21b63347d8a602c3a02ea58948a3a4afe7975f108843c628c8b632ad501b9968e7371ee7fa23b97da7e61a36312ecac5578262db31df81182da45cd4f2f3e0d2cbcecd37416305740490d65b982c240cb54d514ae13648f00ef8c03af04dc89d5541208a18258ae413f283e829f607b55028a021f2f12464f3b825c7906e849759172374ddc728a9ce5108e5102d4e11959fd6d89f205b84b0851f8a0da842891ad02af53bf9e393ee6b00c33e1ee65df24897250c865f86215ef9ac9b9f059198d06de12cb4addc8dcd95c6ca4a1b8a6fb1a7ef816e56412feb6c1c7954123be2a4510bb96db8a1c14f40c3cf385d0132c46879f9860695ab38ef391a57e49417abb0c74ac2acd7d80ee4829e990596941eaa5233f82799290240b3ad7e338e5e32fc647b3273c7da90031c35132bd857427883f90dea7d0a9380020a26016828e116080d3fc83e36eb61ba3ab413114519904d0d92fe06444e9504827e893e984975317c580e36c29dc74c5012981d3b2e7e052235df3835f369eb144fd6bc89c28a84d6dc38c2458b48e5e56479ce90239c8649277aa37a112e9e816f00716ae7a794c231601fab79cd74013c253683a3ee4016a4609db60f829b79907b42ca12d469f616c8cd9dca78fc8c7f06a1a245ce502de3497b831e41cf5972622d50619f1121b141e3c5a32ee852217978ae5096391051b9434f5062b6b80fea9eeb83a6ab05a1e8d438641c74f76a8c56852a7ee5c220746fb46579fbbe395703bb8d530c92513d1c0e6de164167d19675f415feade0dd407a16a67b0c6e227d6c8e266f41aa3ec2040862148c70b3914c116433e9a2892a1f2f4df061e0f1cde1c684db0a3e32bcca106390e34326eb38c29110705d61612db11a615ebe9db79f6c9c472c661a31b4c71e1bbe9bded872daca30f5cdbe1c067c5abb93e514fa0af2d8ee6eb4bd17fe554c0c829c4e5b4d13f6396a41d761174125d57e65e6d533b9f6d6212cdfd3ce3bd07361edc52c9ca780c0bee350aa9d84f4514915441be16fdcb1deb015c43826ffc767617cabb9a3062d871b6250a7ad078b36c1ea531ab5c6e5e769518c972470060c58e55da7461fd2b13931e189a11546b61540f0018ba7190cd2ca12f40711c6625d2d409cf83e53ede45827a3166da6138a055bc27930a2f0906e4ae225557999fcf0e9cb3ddb8567060e305c182191a998576018d9def0f16a1298140296b1d0cc7db2157acec120ed6ce78f74fce8717d048a63d66b1b80da1592161aad0f4e3746b4d67acad602f882fe8f6329375487f12dfa004a3495a1310290a82421d6a604166e6641fdb01d5163dc420fb784294e3824c47a4f42872438ad9cf00aa17b6ef4d2f8b13aee1bf160e137a81842480ac40c4ff21008c3060c520162407ffeb53e99bcfabf511dc8fa0e59abc2b32ad12e0f7404849715ec60549105092ff66448f3726e0fab601182009059985f282c2c39b545318e6cee6922e68e281f5ecb9f113e3277c94e14a1e419c5c5d46651ee21c8c1bc53d42bc44d87941e4df8c3b6f3cc495fc1c71461e3292564ea401bba68fb8830a1ae303c9810176ca3ee23a4a5c076fee58adbb88836b94389235fda29c383ea680a8cd9ce07e66c5beb9ad25071c4d7220f9a68d20956e514cc043c1e810a40f9c5c993372c68a23b3aaea1ff96bb3be91bb01f3637d0b7770daee1160ba82dc8b716d115e75c0c72a8d65fef23c7da5d3a9f1509c5f1e7248f2489e6ecfc8b2785836b70feec2c3cc571f9d1a42d95e823d617dc1bac3691b1e5fb3fa666217283c4b75f912a58282a01c9357d6df538c05b7081341f32920b326cf89509122b46faa3fd20d4a6738b657fd3b524990702994db0c144c9806eb443226871244e62abd9ab2182d465a7c371b12cf86d8b3467b183e3ca135bb83bbbfefa464410f660560262ad0330c67b2977afe3dca8633728906e59c0d06d688682699bdf84349d0863f6c23821a1880af0f5828f6f410a91239a44a3733d44dbd113c15469e032956e9525c2743df0ee0953d5f1fd06951b47468fbdbecbf3584aeff2e5402258e8fd328463567fefa4c49cef721012e17ac9a2dd0e9aeafd4f22b05e41a2ae7f47278a4b6c1bcb6538230cdfeec4fafff7a29a293d02988edb9e44d418b48e58dd7b66ce0a36031a7927bf320e2e8f5b0f29096aa7e42cfd0c693d9f023f177e9f8448263fab5ebbb83134171f251226457596d41d0d5489d7d8dda9c265f403019e5cc734f6bd49e05182c405c5f30a4f5fb1b9a804f13f1b1ee329d8fb012c05c839317e59afd1f9d22b2bb4a8dfb5e14a8b88c36654a23ca7a762b4a33b87a0493ce48132c6922a78de594d43a736a92f95939f11eb1c88f79d0654e1b262c4b3a464273e9f9b4b7ee3bc58bea34c0ae31cebc1ecf8970ba8dcc4368de8ea1247da804abd1bcd20df05c8d495413e512f3160970059b3ef68554188c8752785cc14d49ccbd03157c11c789b432c6d93299379614f285405a90e806a83d53b02ae8b373604442506e20033deddb09af20e630a7cc44e2822ae4b8e96e48e81867c2a63e2cb2b6e71867bf9aeedae38a9ad1e7e1cbb5e900df4296052be43b57f25aa115300173b02b855fa6f8b42513d9b8213101a415f236a724f4d3b7dff7c5fa59181de30911c485c94d15ee6e24cf724397a017025ba4c21739cb5b68cd03be492ad5599838cecb44a91f472c0ed88b03d33b82025779147776530d503686919503830718a613c86ab312d77b0946dbe5cca4c1bcedbd70ca221d7c6e32ae3ed02492c08d9ea928992aa89f0963e3cd7506f8ae036b6f17a67880ed64d03d5fc01776c932b191b95f4719c83521a2ec71ad58ee535dff4bef11af11d97227976a4f3ca4f694336ada54c320b5c342f5ca378212c68b5739452f19bc808504f795357c0667f0a7d5b5b2bd201a6f9adc9bd49d2a85f9212f96927d1278ddfaa7777aa4c07ba4344655a0755736650ce9c13ecb6f4eab004abfb35551d1ea4c3c9a361c2b8fc1e817b747e59e149530277499eb3fc0a44a4022a97af8e44ee3904aab2093c5c818119b113a8d430e407f841a8c28efdd640114819946dd5c96d6380d08f314b70627ab23e4c06db874930f99d1362287cd2db7ec7d60adb294667e0c6836f4e0fbebf9ff35a73faa50fdbb36be7b31302800743855441c331cbe7701b4dfe02aedd09c12f20d36c7a2097177f8bd0834dc05a71a8343d3ee826cec196e7dea16efdf154fd30ffd534349b8238b45e18ccd6a8eaad01b141dca1fc809585b1a96e92737695ba548d25d9b21f877f493888340c1fef7b20953ba22c423b639decf7110bd7e409f6a713168fb20fc9a4ffb7e2926d8d003fb73d98b1bb1e896c6f567974b43282d50e8bc615fe5d4b458598b624026fcb560bd04be782083b9889e4410bb3c6e6f75235f24f817e432a59fd564320cd0a7ae3fc5ebe0fc121b7e15a5c7885af13e9582b9f021ee9b8c4700bcb3004e5aa5618ec85dffa9a4e15e24f484ecf92b3b8db6f81d244f61da7d382d94553f86c6defd2a15f8a8064f6d5cc6db271b5df691534b852758affb38677a412c3a7013dc379bec1f5e05b0537e1d157f1a27cbc3f7941bb6977e19262326bf396a162d54f09f75b9c6d58eb46446eaecb1f2dc83f6280efe570bdd331a7f2cfd15f8ea966ca6c115fb05dc14e51b1f597e7ea80005f9281b9f4a0a8fb38969f82e36874be6660b43163984bfc0c0a4834c4fd1e8457112de603336d481b18d6112ecddff464235452cdafd9f0a3c272b15c7981dd1904efc015f38bb3893a53607bc98ac21351c82fef048fec6dd89475d49306ca139c03bf4d2b2ae69938caa5fc65d70ef7bc3c3a8b1f44dd2ab4bd3bde86c3cdba2458db7b3c16c62a1929d8ffe5e5d686a52c11373d268283cc657da9e8aa156d50b34797962e915faf2aa611c75b27f33f0fc68daeb5d0093b302a2b3392713d8ac2f1b92403641d20aff4cd610d8eb0e633ae7b7bd49ab0645a4440964896ec834f8d6a2f7842d65da7869570923c05804702dac912c103b6dd9c2f983062b34b2a7c9834f53e39a9a8480db511c6af10c0dbd1e2c0c11cf99ce8891f862c82021333f2a09bdd4f7086fc601d3764781d908e20b8366f25642f5bfd62b09d540efb60c55b6199f389e2a57715b388fb09cd7500b47c96262ce5f0d008844f9c8346bbe8899b08f90c54828e4268b6b0fea84874441f653308161032af825ef15b9826c30fc5cd816a341ee353358276eb24a54b85c81e8e19633a286b9fbea47e9692d8979e6580c18a0cc8a11fed9d78056882bcbd7b49592c246f8465e132ab916775e335de4af1d7626699ae775ba4c6babaf55b9911fa2ff171dc02e74367370946ff1de6eebd3615ddd00acf7bda0c1cae8f3fb37a9008094c75ce5f02b7934273a1851655f3cbf280d578022b3a73670f729cca920d21c02d192520da7e298618999f2af8befd984142651af2e184246cf7f4fcb73d592dbcd2364e1cb0b3d92d214e07382bffdbb31070f35f27b62ac17411eb0c4fecbe6e4c4fea614fd33f2bf7f36a8b3edb493c88355b7649c286e54536fe89283211f594a612e379d3acd0864320f9a40b8fc687f89bf8231d03e2577fc23d0ffb2390e501c287215b36c2805ca3f70c94458b9b4c6ab0c0ea3276f590a8febda1dfd4c07f3af18fa5206136ca191bca8d3ed9221a1bd48413e4d238e8af9747438938b8c9196af515603a5836a360ec966083751f1f53ec341d8b4da343bded4f0be5abce1608a01966b6b7cd0d1321c3522244908414e6f82931d17d1607a75645c8a70ee97df5bae211a0b1fd0a49a486e2479d036b6edbf4f7fd48fe42690e791be5d55f909c26d988c7489cd0230283ba81a890a73dec7524c27021cf4d9a2926bbb51acea64cf1fde7bad40529f0325f39557d7504eda9ff32935b34132b8934c0585470946515ca9669df734b1a3b6a7fe89cd0dd21393c92a1b36f144eee31c72f6aef99c8832d2c771fc586b89fed82204aac40e43e43ee5f31c733138ffa9a5493c4991ca19953691498bf439b88514f50238522e0e9d20e706c8962f7c0670d8a16eb7cfce944c9f9aeae1726db940707421072b6852525dc28f105a67c6a31b9aa1b6b7407ca5d4326ac7d1f10110443255338a3b7ced85354d2f5a9b0c8c9466158c62268361e3ff100cd3af21743dbe253813a68ded1043d30dec3123479177c857e7113eaef11f100fc26d17d2a06c3f64aa190f78c6d5c4bbfc7a56652ef3904a13f1e8c9f9c87fd8436a3c27cd2f41e54712064b4672fab89ba1b78636a46cd0fcbb21e2068fe00d8342b88ed5065558f7193fa5c1ea7d66de04fae0707b10545f2334a4ae5e2e53ce4d71be25d5fa1bb74f0e477ddc3850fa689ece0f6a18f88d28dab4c580adfc4666ff7d485f7795a783125ac672edab8e4cad924e6df64f8d236ae85d35a2d3e69115c538221941464c4efe373733cd04254c8db7784ed76a5bb4cdf0921ed1e9a406f160366e550472ca0a9360861c199c33b252e1e6e1769ee86073b671e6c463766c3aa0b68834ce540060db095b67b8e7bfb109e19a66105396eef2684f210680d2b4c35ab2369d86656d6db07ca1fa9dd3fc9aa87df46ea8ec3c0a44de5fe23e02cdfbf3f4d1b0e240429b64190cbccd6af5255b6d43b1ea6711dca6749a6ca2014cd5372b0ceceaced10fc5b402b4427ed05fc10fec80753520c56bcd6e24758178b318f46c9027e2930e1bdadc2d2e74d9a20d8c1bb37d6813041bdbaebc718b2c6dcab7c1519af9fe1b5b7221be8c25716504faad6f3089a83e32218682f0d5c54da9a4c050921bc7f55f19f571f14c595c4f9e41bf841799a46c1281ff31090f20f66e1fe385e8f53deaed439f50da1f7758182921f4443be7e58ab0e0472e36550ee141bc52c4d7f40cb76ebb766faca1c737474e73ed12cdd09b69af7722b1eb53d6a10942002a12c65d786ab168575e24d2bd0de7139c994eb2d54a2233dcac1e8bafe0ca87d45ba7baedc297d1aa12445f463eb3bc9baa2699e7edce4c3f22a68bfe9bc3095e4c0b35f8b3374d4b55e3974527cee2ac601586db17ca6cac39aa023b287b8478e9b4591683ba7613206c4e626e7bb3fe90a8dd3fbd5fb40c15650dfcc769725adb5ceb4e5f29c3e335c30826ee83aa510c5411f76f7db8b5f5c635158b2c57fe50e90a82b222ca651ca736ec2fee0902469288ae391526001126085dc44814cfc14b0b186ca02d93b52ddf9e3a00b82a55216bbe537a44e35d53fda9e43fccc054dd65be069581b7089c5e5457f4c159bb80c4dcc0364734ac8952878c7130898dfc53decfa7c12b35d365e890101421264b805c08c1399a133e42a9b907f54be24e21ae2189f8a7e33098465b6bcf5790c72e9b83e7f31f0707d20d8f2dfb471e3ca2268bf4d4b2b5f85250900974f0028598acf0bd1dd8a3e32804b8f0c5e4465b738f4f346d00245811fcf3e35deff2a02ebb845399c03e7677c952615092a554f876f8c9d0fe73503a8cb7bddc3850cb03498147eb6eb1d668f83825cb55a036f8dbaefcd4f5d916b79019a7540313ff5c0250f5d4f2e1eb8890b6095b16a038eca9c79f6a26ba7f86fe492c6b06758ec839a801557a5289947550c6b7cd17e31c4d697229a86edfc80acabc6a0695393db90dcee475111b4ced5104aee229d94a5227e19a05a63b4b091d709713a640ab598d63ba01e255a49575092075991c3459e79c260468459a76c7b12182c3f4b46a8d340c182c40846311cd8ee7fbc8f2378182f6276eb4d7bc125e71948b628b76cb103a31296f8a1869a943cf0b6d90ca42d645aa034d0b173ffa882a0e6f356161ed3eff4448d93544943d8134d5ae70936fe926a7b60fd5706fe2fd2dc24baeaaf88f09d7a5f55c38e6b33814bc33a8b255986dc226cba1e8d60d77f4fb64b972351ba5327973afed0123b0ce12ded2b21ddf97db87b00a87fec696bd6166912e186ee8d54bf7eebc7ffa2429a27a5bb5ea5b111f019ce0275cb35d30e381031731b1bbd312f76dbb683aaf6010cfc75d0f9ab6be33262bd79c1f00b685c1fca6887206c609451835c3a2034cce0171e434b25a8c86cef7d439e4aa3d347c101f289361bc5e9a6c2bdc00f463ae5aece0c5664024e693dae5911da3bf976045b914249436dabdb84817f808b4588c43049e152fd01a424375a733de0d9d20476a6192d0c5349720043c9a9a81e5f1c3bc1d1ffcb22b5f9c5b6ba77e3e0358a09f6d1b21ba30294fbab24588bcb7a231583f65c1cc58e63126f29c8184bdda34b40cb04bf78dbb6f1d935f5d7201d0c7f49302413104c4767c41335ba8b4c358976b6be68438f84a342900f33df9c9090cac6d76312be9f185bdb285947b46b33371b1dcec344ed8ef7c3308f7cc155f5fac9a92b8bb10918c01f4bc9e2a5be765e5c54413118fa6a6d5eb78b0a7c143ec3c96f13872b7ec934fb3d994557cd24e230db29332ce9a1f3782948a8152443195bf711f36563d2837343c7c001b1cd52cae571a25b1e0f17386a13d7c2afde50565560fa43db509957aac5e41399fd9c692dbfe23843ebf2b24ade9d94160ee38c3a27f62d6b04a6206f99a92851e932aab73bb9a0f83ad55d220878cf6bf68f0fe76ab04eb22c6dde1edfd2db5f47366851100dc0f4ffcbf3d45643d05b8144dd17a7274a2a03f7df40747e88d1b5eb983a753327609bbf5c8a58cdef4475ea9b1a59bb593c30bc010d3a401a837e338209546a8d70d2b1748d52040fb09150118d276b095622ba572f4c0c591f924b8ccd8fb07ed3b1144249485fc77c66f5b4af98cbd77eddd0884591d1c347521f60cd791a50b9b0dbc321b619d5ab5697ef871025ec405f4580fc22f802826e59c95e7c58d44124f16c06845ae53727a4a7f1113d0b8808b721124c89d977949993615fcf2b8b39f8f157c368f894c12d2245f84fad38f220db3f4fbe270579806d9210a08f3e687b63698c4faee99eb487c5fe40755d0ab746830512244ad6740b992fce221d0c8a800363c8abeed51546dd64b56456f488bca629607e7eaa705c5a8673016f07f477399470c97d4331657647d2a90ac9e367ecad36e09f83318353fb8fc0fd0c2e054216c6f2b47d6c6f8d0af6fbc85d44f170192e687a0a28fc191794aee07fc03cdcf2b7d093ee3b65eda0046257165433d972084ef8d88f21778517165a78bfd0cdbd8dd6d2e69ae8b2dad702ffa6039aece32aa4f3e5932e642b227633fd528b19e3a211e941d510431e22861c0d1a4cb15e857ba5363033aa733af80e613b771585117bddad4ee21177f9650f4e07e97c584cbd22fb0b62a4dd9892962851136a1b4320a788e3657f86b669e5960f2e6a023a28ee57243f35dcce121fd121f1e852372b0a2fcb6218b4694513f314c733f445ef5304bee32c5392f94aa0909da690c82141111dba4d37d0eaa92a1c37419baddc00a7ddfb57f90f8f0143e3dd8f184c6df2c8c9ac334bf63d2a7ea9073e69c064a7d5e8af1198d8438e50f40cad52274114728dac1e55ec4e4c924f93a75f7508f10002f503954e80e4182f03033323dd47fd58db1192e0c9cfd5e92cc9178cfcc275ebaf51c8a9e89220547898de36265c8cd4996d89122d980b59660ecbb68cf5dc7b67b7bfaa66b286220b5d4649c9f6aba3088f2c6b8ca16efd6662e657d51052b5615b86a200b8299463a107e573b378c4fae140a0ec574f1ff54991e724cbcddab84694d336104267c1aed95327a7d1cdee03770cb973fc61283446a834359f4be0d324670b298590643d7ffbc818fe5ba05baab1d751ab7fbeebe2a5943836f6e918e15399b9a8119fa784c7c83f41dcce5b52c30913456a82688558549dea8ed8cc3f3f880841d1aaec50ed8125b2526d529b79aafe020f475b6067bfb7710fd63484566ef535d42877e0525ef5f9c9e824ea1a89ee94a6a45ed7ecdaac766bfbb452e344c5c11c250f342f9c63f8ca6e8ea073f7b1b7c78f6e0872329b90119db59f3755bc407799f021b0fb55589260d8c303ec9a85fa09c15198dc8fd145f2a9355dc23a59969defcd9e58c1d3bdd26d9e08d27eff9d8ef6c25f316aae72e6b704c7576aff49d194bb198d2fda3efdcd0cbcb49cf462cfb929d5f6aa721c6da2f73fa346656ac91b68fe6463fd664340e1c2810242cd93556824aee853a2aa32eaf0eba5cba1c5d15dfd91a4416306419fd4e1a6218b81fe2b7432fd96be28302670c81fe485b7c593e6bbae112dc36df063539223077e5cf131f7014766c747b64d81c9d6c8afbf62bbd4f5fcc73eb6e32ff4afe663576e4368a5d717595db679718b44c5d523bf2e92050d61699462bc022bfdbe12e6b7020889c2a914f1bd9892a73075e111f5e69eb3c4bf8109079ee592291367762b1fe0f2eac0a78e4f8e36abda3a4880717e32041081aebd9eac6bdaf814b32f077a6529d9572fd13b17b4570ee2a73e026a0a8fcd03002f0fd73cc05452086f208d2a3f540fec473ff65f9681d7a098c6d07f42783b10a48d816420dd862003963521e8858a720654008c3e5ca4f524172d29e162a19c8841e563a1dcab7858544b8466820b4400e2a4c3c12cbea8d99063f22b3d40f0c8f0260eb91271c867d4393c24abb1752fba05c20a3315106365f6ee0cd183fb07c43ee7042072b686485aa9a2c94c2253c365bdee725789fe66bbc252a8f8a50ff3817b2d86ed337d5094d2ea8f549f4f84b6cf91d7932ae30d95dfec6ead17c5a8a7e71547c78177441b4e29f1c3befeb693ac5915c80d400e59dc34e563b893ce73a910486e4c78bf6a620bb4cbc5c9e3a36a138c6db788c8438de5416221f5ba5c078dffc5d56b27306f8f8c6a497242cabd7f29556ec46a8162d88e34b4df88c030329bdd2c8fcffc544a46651ddba4b4d12ed85bb5bf87517e2e7954ffa7d49130ee30e08de2bb56d19d9e7d218c6e94a7fb06f0254a4f5e4e2fe20be48c5d589dd2df4a0fe3b49a935bf31969fdc41a5d9349aebfc7395d76d1d9ca40220861d07e2608a6a5c4caa954f91d50a51883eb3d8dca940fea71104ff658c6ca17f69f6e985f9b56ad971241ff31242a46107f14e3127f827d283ab39c01f182b87c5084337afa56c0f0066edd3309fcf3edf2998df6750539c6aac3c8a613acc00bd9018473832c5480c8612394f1ecf1ee8fc83ed54f6142fa0a18a250b69f2f7a2be8d4b83fa5e0677f79d1f99c0eb5bb04adacec98c421ddf150656fc4ad44c7474bbeaeb41c1621f4c601accc012d3dd874dff3620f1ffd1d0b1c081a301c03f319e62f21d5ea389ff92071baede5d482659d570e941a6062ce044487c9449b8b6de65f6201abc1a5110be43cc34fe962574f6a65935460b1359c56a2b06b0d139ef3851089b505036fa315a5823aa9ac66c6418bde355048a8d7364ae87545be5d030eb369e8b2629211f98369315a1bbdea08cb997c03e4b521148b54f0c1492b04b031c40974a3c5d02a3143d86af8b600da2e5125d28b9c2b23553544d0368d4445b102fa8b0ad000cbcc5878a48ffd9cefb25550d5474e2166cec9ce3094157704e40618affb93947f0de1b2501fc926fe257a591a321d681c8c0d173d15841fff6f808a0380206101aa55dbd1e5ab5283f49725ed70b0b0850fcf92a1c7295188f1b8a9c71e94eaa231090ecdb5a339e69b6411d50df605c80953e7fff66d982d19db747426267dae411ebb0c064d0e229b582544890397186cd4c3449ad7790dc1b9ce0bca06a3ddce897463cf5366cc4c4d504e3e2fee7cd232585221a28ae6022d1f3cc7d12c94a6ed00c32d41b48cae97714c4c1197ebf0d4b86c87d40e2a69860835247ae2b7ecf07f912959f52697caa4594bb2e71299092c3aee0a0ebe6f12d6006ef571b3f4046e63c653417c7c817446a872122162ca200eed0363e504703a45becfa96616f232f49e475153586933bddceaf051f4c1dee934958e2b32333284866553efd54b2a54d10fad05baa1597132db4ef9ab9eab635d23e4af32415d4f0a744cfd3c0af09030ca93f0ea2161080161ef69fd10f544a27b968e0551b4f7c858c9852938d3554c690c9ea9e465ee89dda5c0049970713fcddb2990162b1a533cda40c99c73eed3e5bc9742106de12df357461d5d15828e76fd14b7bca06341e68cd26576b8c47e6549f8e6e971ba4830a85a26dbdbf709eb04b64d1a77894f38b620b652957a274399ff69cdc183a0d85b1a5ced0e39a835652ff8dd818e3e3d94d208aed91d047db1d1cfb915bf27cd489c35cdda5ac8548f5c5190d61ecdc989a27dc8fadae0e167824800e1a20f9693d008ec2bf042ef2e704cc50419beeec6bf5e22bc01945a7f5b593ee14ee8ca463c16687ce96e2c33f9f2a795976783f41323e7a87d972ee16e3eea011517f18defdbb5fe6a0e927b871bcc377762f23c325f61132aba49d13514ea9b94562dfc4d2d9eadb2f71766c2c5f9598a717d4feaa486105dfddde57151bdf3744a2eec5206d97d251cf42968cf662ef97a59d342b25d04ba8e3a5ef0d82241507ecc800f4746fc6ea579b144b98e5529468efec1cb8e0e84e61cc0e9a177378ecdaf4c48857d22c893487aa7f353771d2ba39b86ac5cc42fe0dfe3d181e41019b1354d78d4f0da28765f2e3984ec445effbcde8792efdb51c5384e88dcd1f6e7e0c8490c90f1ad1ad0d987cffe39122ef818f3d64b523816b9a6e5a40b2375c61dfa041c0fc30fffaf61ac2b00ded5b9ac3429366b793ef84f7163d619c607fdb4f20ede391252cc93c0b93dd61e2b6e1e159ab28f2cdc3bfdb5235226c719c046e7fd6ea427b93133c4ac8b8ecea8d96ad680983881280812778cb144888b703e22690af581373ea1cd5552c75b46363b30e3f28a8287d78d2955389fa50e47270143a54ea79813d62e41aa4445fc5f2e8f44c15543fa549625aec2c260795de9559ce0e9298464a0c916571c69e64abce7cadff3a13556e8077a8f149b8e8661e04c06e310d2a2d1de4549d6a73c6c46cbd65494652dae665acb1ca041d49f5de895d96af8634cbb751439adf770eaedfd001ae818b74246cefee2d88b62aa1dfabe0a3d64f6e74a588912a1f12e2923f6c174e75b8c7aaac36bd28181c7d371cb730346c73d0dbe401e8ee9863bd3f20628c1e16f341767327e13e9ec529d61dce6f314bf1433054870f1671cb42b0b4346b5012513e76c500173de94518b73e0aed66df846dbc7c7b54f9e111b438ba9b7bc7b9b1430e4faa07e81399b2c2af6163c147a810c04688d3df9f91f448b3a33dd2f4320e78c98f88df1d526ab0839df9f6028b65adf344de22789c5bc7c9e39c1ce34b5d49e7418975641cae013bee60d6cef19600c188b15c5bda90f7c05b57a3c70ac9f6c5e802cb2154f86de16e78f31f8b7d76f5a43fabaaa3d1f173ffcc70e9bc34c624a4f53b6abb0ec5680ad1e1fd3c94e4858ebb7ea02a015a8c496593c9b7d3d04fa8c0860b9011a5ca56636545af49dd720f8c5786982855197b13056851259551a82d4f6b396272696a439b395e2cef917381485aa1fc5b29122c0163158b3e637db6e847277fe2b52710c322f99be648eb101204438d44ef6b2ce1f9030fcf65ed63699c77309eeb8038e53aed349498f1130f125a68e3f11c5849d78cf461f566d189655ac5083f5aa3a2d5390aa0c287d86e9f616fb63aade82d713da44095b127930426b67a5e32074e5da53ecab254f8b4599032ffd2378a20864ce0e114cb1f490c48554e96581e8761ba6a403e60d8b3c3dede5f5081d00b1dc6407966abde2c2211bcf13a4c50849ccd16a1ca108e271a38d8d01b51b8a07634ed4456ef867424792da35f95435c7296e5dd53833b703cce876b87812b8efec7852f17889e77f2efe33075ed4bedf58a33617d8b87d088f93898e636eea8fa2af3c8fe5f3ca6fec196c36062b67d67815e0f35338436b1e61f01c9546c5130bf2da0356aef238dbd8dd8ef8d76bbb42caaa6e4ab4cb449f12cb0212d811e989fafc1ce2fadb27fc39ea667dcd5434558387db6b0cc2c8864e49645723894b9254837d3811f926f901f7ee8604d93ead9918e4f536e08b169301d951f1283f5b52f0104c5529061dd40140765b09b84af0f392c6b21df6f1853872969ff13caf77657931db4878376abca1c25e4546ec6bda6def3161b35a4f98b657240cd3b3ba4ebd2813550d345dc1cbc546ab2186a91d03a8eaef20314a8b95e6bdd4104794ec527240ffea616fbe265ab61a5b5e1de9a2ae03ec3d902159765d70071eb003dc829aeb6bd40d37ca57d5ce27738962b9c703df1a07fc570105bf1b8427d6a3ef95d6d27ca9f83f79dd9ace79138fa03c58758c6dfdadadefef94fa17ebf96c9472b5d128bc0091ccdfc25c5dd60238cefd62a4665e5ce02d36473068cfb7d2fe75e891775722e12cc5aa76c7ea0fa5e1177979198db4858dff19c9aeceec60548fd109b2538fa24ea028ba9bb0aa2f65bf786a6d9de2bd022c0ed5cc3f0c09e9a1fbdb0573434570a0bdff9409ca409badd125d14049b42ae1b6a56c2145ea30fa1c1a1a1f0c88fa423ecc03415eb0049cef54df067d2228bdb1ffd2e309b87141c08296b9c4d8317ec7856fbabe6b862752dbc8228def8f9e1189067d4b4c4b4ba8f0417531db441dc4548dfd69007c5362563dde507459e4a9a88f0a2fc357ac0e9dd7c99320d26404339f127549edfb9da99181af6f865e211021a4009525557790768f5a07c2fe4ba145dab9c734ed5e3ea812bac6fb3df1f10cb821d113a552115453ff4ef0b2141e27a82a60bc37ad882392c3ed7907884a4968a51a44a8ca911c066006969eccbed9069047d8df9f3d1cc0c6bf3edcd5e320e2ec6e7bae7b97873f479a17e8da87d6c16f39343440ee6bb81f23db3dae977c2376f51d382d4729dd3f302369b1cde6647ebef7e22b5cdd95ddde6c419f171dafc22575c9469030a06d39858209a59493ad519efc384bfc2a62314b0705cd137f916330e62d2517f09198e58a21c0fd9c4869c889568f342c38100001084cd449436566efd83b32096b170b416aca550ac9bc1223aae525bdb463e69a4914d08d952ee1d62091e09d9092c5e809109b3666c62afc725bcbaeec3f5392945a1fe0f16156598135be6f9d8ab09abaeffd0aaebd7137b7d52d43f58641397d80b652f54b320cef5ebb3d1d11ab217246200c4f1a1559711340af1771dbb7e6191bdce52c5754873d52062ebca629355a091c8c520b8d8ebeb140fa513316812831fdbf51e6123d1367bb015031f1b024ed21c5b60530238c50f98d08216563c49411694a0c3364a987f4eb0f2386c9680b2040d4a20edd6c166d940155f1b1bee5f1b9929341564c6c6df5853406efbb77de99d3ffe8cff4ef3f1eab3421252e082ed9f57cd92386d896a2c6cc9e006765382060b5b3570823559d85a8287a708522c6166d865c3c2560d7a604b66c85a0a382c6cd9a089a55d90974461975ca209f18685ad1a8cc1b2d84b2fe98e890b292b590ea6146a44ea0a33a8246162306d61686693c6ce243cf1020b4facb48543723e6182ddac3c4afebcaa61e5bf275a58791c36f23a78558395bfe1156c3d918295df8157989543f634270b5b4fa2b02c16b69e00d97b1b6c051b0b14141e661b6cd6c4810b5148c2c1a18b2e2cc14911e12272d869e1704d82b341ee861a4bb4e10945d0c10901470ca4885c4560bf9e04e78202bdbc9317744bc50f87140befc305983581608b064d2e9462737bb4b0b3450332d80b257b3fa8d064055735161ebe26f2882b9ac8830fabb037e6b4037a1816b6bac8828df5eab0f0b37dc35368106909de017740580423a420f108909051c6e005449319bbbab19a04270b03dd648f38bbf6c88e79370dbd22ec7cf42e6c7936c76a8a085644129c9b9ede153ba390bed78f489bbd3d2330fb06b93963e4cbcbc72d028fac7c63f58834713c13723932bed1f6e00e9733dc6105dce152b324608ee6cb09fe9a28121151c994e055ea337e278ddf8c89edff664d6c3f1245229e39733934ce5c8e4c0fee7a8962b133128543356062b1730d9e58ec32607e4fa85fcdc69c673c12b52ac623972363c6a67e51316c2a95fa85ab865fea5095ba3c843c20b421f52b629e8c14d33485423be33d6e67bc648a5c4ef61b76f1aecb6b1c8677611ca6b54489c5ce346860af318403200b731b305eb435bc6837c8e5d4432ea7c63718616c161b30609ac8068be635aac7d6c637981a87e172ea61b89c1a87b1719792cb21d7c3e55b0c0ccac8ca111748db0b4c0def465bf30d7239df2197a3fa1683a8a934117f7db904bdddba807abad5527895bddf437007b45de3fdcb095ed57bbf53f57b45b1ddcf7a3843996a70e466a9f1195eca93325497c1e57c97c1e5a82ea3c6d9cad422269be280b47c239de5ca5597d79cb91e359f71c8f9a839df4ba56696aaa920359ff11935bdc32b1bef374fb3686eba4c8a5733de8f557845e3fd68c4ab99f7a3155efd7d95d79fd74eb4108c12d7a3c6f9305e8d6fecd57cab79fc39202d0d1a333468d0f8e9d9311a33353515a4c6699c468d1a04ea471886e94617ce47ca48b430ce0159e3a7a78c445b730e486b2422591b37d2591b361ef38b1382bd46e540b430eae5bb5c7242606ea37220da9a7af9a8df740b97c39d3d685d381f5c0dc2e5f341a07e245a186ec9b7e1358dd74c58d5afe17513fefad5eb1ffefa9ed74ff86b2696fbbd9834e3c52f687811c98b5c7851c68b282fc278b10a7ffd182f16452a51e88ca77efb3364a4a0b18aa5ef7e9b28e5c5f88b77a37df9e4b21e18d019355bc25f3f860c2f5382bfbeb848d41355efa43091c8a5c6a8598ff6dfac270bb8c34844e2472144bc3abd1fa9f0aa08ee08829d2dcc39102d4cbd30de724a6f1a8607ed8b07ad8bd752e7c9a35e0f51bc12bd1bbfb0fdd29168243bc319ce70068b21799d82b2c9c3962e286cbd8089bd7e8b92714facab597e849673aec7776b5c4effc2b297e64ac35fac3f99f8933636b2bbbb4a948ff38c7ecc891c257ff23a42dc11f93abce2755db1e3149e100283eceeeeeeeedb47453876ecee8e1c59885b052db08914a5245221d484c65271828d8a1e48b1a898203431a594b265b7ec96a62329a594525e11e690525e2ff4c5a55b764bec325d414a2825942809a18c50052feb0d7750d0f84b764b1a931509a584706a1a163a211a1ff9ba3c84505e1b66ca5eae090bd70b0dcab4058d52cadf4b4a2ae5157f655b1bdb9f7d59c9706ad9162de575fda0a4c5b509c1349fcdbeb06c0a616a53d04ab04ba56dcaceb097222f73ce6c6edb659a523099ae73996c0cc3fec32d16af6912023759bab5809159eb18aec7656ff87302bbecc6a6cc93766bd3256715ad94b1c4d63048c50dd4014258c50f4f68f4d2bcb7ca886af0736aa546c59ca6d4250f42d54b9197974ee386c8e94fb9ea5f1345d1564561cbbcb66cb7364d0fda6c871c69e208a5cc4aa64d33611f8eb91d6aacd2ef4946c9f3fa872a77e08f3920b76dd96ea7abde3c41e39ba19416b2bd365e7926feaa4c2dc32ea96948199bba50853c1292002f86c11c1876e9d3aac9d2662697b40a66d984701acde64b76ef90f4922db123ae6b48ea308a0ae117c330cc13b25823450cc3305e41d81076d744c995358d6f3985c67723692d56c25818d6c55e4a2e14d092ec6bcb3039bba4c9ad392ede2459684fca04a4eb4281694e32f4c0090944618eeba401db87aaebf012c25e44d87eec2a913842ca2951d84ca7eb88eb89bce414297ba872c49323aae87eec2a8f987cbd18d14896332e32a40c296646a6d87c544be16fdb5a4336213e3adab266491f1a9185ca664496d4893587776037ad047748963109b67139cc0199369b444ccbd3b55ac5571299514794196d3fd976449dccb9994e17773459668b94d208c8ca240a2c6744cd425522d451b3aef33ba09695753bba2aaa557cba04b9433bfecadf0975362eb623c81835b5127a6a993026cc7644efccc98c8090196546462e13c6848999d176c4db510391d6683be26f3bcae6ec90ba5fa26cf2c2b2a9953e4bde9d17b692225051f7744f64725ed84a8a40f1887db8485e5836b19914818ed8e7c2b22b6b2545a023796112c256520492574366d84a92ccdcea9e6086cc7032336b405b27041a3b21d0a8492682828282828282828282828282828282828282828282828282828282828282828282828298d8784239610d62348a572cbf63124bde39b27ccc0a7f1c8dbae34f8bb126b2fc6c8a048a4f34a969cd51d33496f8836110292ab1fc1979b423a5a844928f688ff0c742944a570715cb37113187034b151cf8631ddd10f284e216ce4774993ea29530240c18cd11060c8d05ea80483fd1e80cf4320cd8129b61233e424ab27052c8bda47dfaa7815aa85b36c32ed93a74e8d0a14347843236138b89b6bcd8e8c02ec90147b62ccbb24a047f97d1e19c5a15a87cb3aec3ecf7eb1d5e6593a2b21a7df8bb4e04af88e02fcb98288b36a3bf340e09c1dff52df388b88266bf10e94825225639fdbaa83bb75f7aaab10a7fdf55eaea9d36cb5aea45d92c8b55784585879ac5441d057ae3d08c14d0ec824676625e3cfa69561c6ad5f56bd2a17a51d7b52da88445367b3c1b5939e215f7eb8cc45ff0caf4eb9cc42b965f6f9d8dc5eb735e1f831eb444cc24a8f6ed7ae4894ab6639e566424b3de4d62b3b813795a87bfcbe7462af69ade90bdb2eb5c93a25ac75e17a289b001bdb45ba61f3069e94089ed2c6cfd28b1b0250a2e2c6c0da1656d2c6c0d81c86a54e887ca8f3d5978042a4a582116cc44bd2badf6ee0261aff622284b8f416e88eea7df70c6e5689ab6bdf3a22d7d8611941e1ed21ed7ef11b6b442fe4af5bed8ed37bc959e7139a567255a3a79d0765eb4dbe9a7bf5813b3240eed0ebfd16b5c0e3de47a10a1a3a323024bab890b345a6ddb3c7ad87990bf532d495eb19c527ac8e550faee373cb91cfa8d7aa7775b9b4e9ef6cea3879b77d9ade4b19cb2bcfbfcb6713993e525963a6737597eea3ce6ba472e27d5d52097a5a73fd5c875a7def452f4d1d2973c273cc769398be7a4a5a628c431d10dba6c2e2e5a7de10fcba12d3e7442a3693a79d176dd2197733232df7d3b791afdc9bbd36a3ed8ce779f1e6f20da8e0a3d622fcb8b982c3de555f6eed851bc9ac72097432f3dc81ff5bcfb6221ad26fe60c6846eb7345fc9b4c56c4aec3dc2b6fb76d399cb319dd6d40f68e97d404b6beaf420aa4c153405847e9e7efef4d29358cdbb26ab9dc5bb472ccb3bef46dbfd44bd8d4d9dc71d722c5e12cbe2153159ae9a4e106dd8ae7957dacde441fe5e78557a8cc5682c8663939182ce679d6126e6a8b08088733dcb8432a1ec09be0c19a7d3d5eccd842413d82cb25eb58f8c8ce00e8f764646567a98302b8611174d9232a1be72a4c3a3045226c4ab4bb316af6e9745c9a4749911cb2d3841fb10864f13294c364833611ff511dc01616ca20ce6e85fb661eb063bb6a16565442d1b7c61bb68c77623b5110c2c877403217b251396918bda56e1156c826d2bec6d2b3c48a20ceee0b70eb8468fc2af3fbd09556da4082b8d1061a51752a448d981572e4f6018431ddf256d86a6886c2f9cc2f67b441efcb6691b2b433f5e70a04d7135d926e5d3c891630f1319c21f3363eff3907e9f087fdc7008f47c8044d0075ec1cad0076f08112222f043b8eab84d73777713416ec6b8c01c638c316a9aa6698fa55249d3b497be69a5184bb1a4c5d8dddd33ca31c47c386cbeefc301bda39a40ef87824de5d16c96125ec12b52fee027cf6cb66af2ef75c9eb92cd5e920e41e48885177b0313a8cd0dcc7ac1e9f8f24f8a9edd32da68b8230a1fff830f438628fca1591042088d2034a202e1140aa5123e4df8ebecf03d29fc9df026fe28864d186323351254f5a369c28614ca9f253e17257deefce1d5954c6493964f20521749a0ab686e75b6aa4f4dd078ae43f8eb8e1d7578cee71faaa64ec71d5ec533479d66459c7ee4691f7edc0ce12f5e6007881f90626cd4893a483c7127c9282ab1fdc3637a30c6a69cc6e60629a594128bb1b5d6a094d7342975dc865a61e6484484572dab5c91734a295b50987c01a560e285116684adf944043a447b4e14a0e0278388a620d9eb9b8c82f214ca903d53917d367f5defa3ecd7b718e914f64e30477ccbcd80e563d76bf6d3aaeb5287def91321b35098236ac0f22f9992d713c02c8a743da6652f067a19b217cad4830414ec8552ec757b5181c4127b71d8eb32724e09493e11c384689999b90a441f0e96bfcc0c312c9ee79c31ce189999d9e6bb0103e577efd0dddd2d284aa6d422dadcc05fff66879b3d66bf7e63cc1eb307210fb90b2acf87fc48a936a18aaf7d63cd8390358eb5fea83a6cbc1bfe9a881046d4462bd507fefab10ee10f4609e84b1354082322888ef0eac2a30b898634a51c759e70d3122c7c0cdc01a36cbee18f7f1cbbc1bc1fd88f0bbbbc1f373b74f1c30a93c73c686f5a569b9726e885adabc3f2bd61870ba75cb9817f8385ad27494c9860a5158ca4ec4bf248c92379240f4fb3faffbfea2916be9100dfc2891eb4f2baaeeb3a924b240fccc14378969425c11d10e668b882300bf8f1b356b1f401bd59d29631e9e16346bb7536fe5edd0de123fa90f2e2e1c15aad9c0904d45d4bd0db3e36feb6cfb5040331505252ab1579220f24ba96a0a5c9122dfb88d636e7a36b843920430bb91e10e688e7bac5761965d156dc4682cd86b2a1a1217bdb08094631b2602bac511ceaeece5a8d64b4fdf057940dc11cfc21d0c904bdb7bc015d57a4ce150da50a4da4a96760032db0d801bdd426f595a653eab41509680123865d47c5c08089e5ff20c22c1820d88281127b83657bafe3c256e703831bd88b5db2063f18f4ac139ee3748d61944441a3de02c84a1891e08e00c01cf2f25b6c1e269dd6bd8544e2615f7c59c7cadf88640373c8bf44a1fd2333d94b5af2587928e523927c4c92671dc94bac641f2bf9c74a06b29285ace4969511c94a2eb2928dace4232b19e9729295485306b9dedc7daca692d8ec0854fe6aa0ab8b6d08930e152b66a0620560e111b0d084a5c2055f5848450b7c8c2ca4c2052bb04d0477701230475f1e5b8e896892b3f43e2f6996e97df6e19e1e5ef1a98552f414c1c69748338e087caba2d7e78fe883439f0ecdc93ce47ce81491ad08aec6ada688944cb554b9a755dd43e9379c22b25d4b82f3eb174764bb568bd07e45a38e38f3905b40c4295554abe4bf56c96f44512eb12922b088364a82138de6214eeaba7688d3e79e66a5ae3a647be910e7e39e66cde31fdb3f1581deaa800436e628217a5156c87eb6e7250abdcd3db67ff1348bcb10a547a7e5d151abba5b885e604507a7df45cd8238fd36eac3be4df44519c4304507a767890f34b2533421093d3a386d05952648d1e1a184265a385712c178d4ac26c2c9ea651eac1e5df5c624db97f528883c7f8b10c66661aca66e692e0fdaec08547a2f5228b774742c6f41c4848ebdb22417774b30d9addb0179603a1626c1b9f4d2d8cf42782fda43b82afdf235bec61a6fd7e69c9bf6a869875acebcb81c4d48fcfc0d5ff3a4d5be7dd3bc4c7ba6fd86a7e919339bea66b39734899331979359c801998f155e803f2c3564b60abb3d194181a83ff087b15441b1431aac060191ae216c43c01f9936fe8a5e2a087c76b66d61f5c2f8e0c20099c036cc4f06846e29f2369f0be6e7bae4617e609ec014c1588171a2d3819102030433044304530546461d201e5eddcda7dbe99410f974336492666d68938734b7b66ca42972659117cbbdc88be704fbec4210dcb35f26ca452c77bed172875c7341f4390fdaad727f13c2f211cb1c44f668a5bc5c89ed47603ed50304813c3cc4a9f16c1ce38498eac7df67fabdaf889a4c3d4cf58b0b80b75193d37deb3cd9058dd6740ab2bdbbf48a90aff90671a0b005a4c442fbb61dbd131a3c98e299690131b1ddaf68024adf75ad148f97eae1af6b75523a1f580ae84df16016eec0ac89a65937ae7a7caa87bf9852224693be4263fcd4183efcb14c81def88de1633acdbbcfcc3c3e864fb38a8838376a8a1ee2dcf80d8fb62afed404fdec2c942209275800c84841674eef791df78387ea79d14a2e48f7999a0ad27de63335885a372b97a754931450b376ba67055b3d6012ad8c9f94502a0a0b3a21a504af600ba88a8d4f2d99a19d8b10af6e0c1f9728bc824eb0f1317c683cd288e1c3f9f05df5c8f550ba2a86953e292235575d558b90354f82239778414150f3cfd4b5a857e3f3523dd878cd6b2a08e46d1ce234d7a32d7606ca8a3ad1c80af53623febaba59e1afcbe984d0eedd330e88d4d119e208b5f411da208bb01d90b6f55b34d267b862bb4f0e08eb58233dc40cccc121985c4efda699b8ab117ef4570744da7a8d1322edcc39c07606368be755236d672a8439e88d1ebf59e155ad3789eda857e31897d3bdc6833846dad25be15557e337235ed578fc8c921a5eaa7bb4dd69f0525ded5a382729686aa6a678f89358509a0af9eb6efa4df14898a3ab903f54bdd29e6a3c88d3f1f77a4df67426a6d8ec2d4c44b1a6f399a8626558d86202c96e6db2e1a57a802f62dec66dd4226aaea31d043587d76ec3ab79e4806467c92d00bee6363c78c819d940b4dd5dba999999cf504ae92137f36ea6de24b4bafcf0176d86608e160c7d1c6a55ec5ad4839940473ea475110202edbe752ddb823ba28d9f39842c1a4e0f21cbc6bb43c8523dc637a366a92a84aa18ff66ea45a168a0f5526aa342a88af13ba19551d0eeb0599c0d67c3bdf3685c2e6956c4d97680e422757860048b0e0f6e802232ea807875533c9d10afee44a273a28b2297c8255ac4f089e153e4224405a3cdc826b23cc5d3aa2c28f7c46f33602ee35d0be688cf80406f0c1f97183e367640f2d43d3543df55e9bc17fe5233b507db99ee5d2bbe9312df0df10ac6a83b8aef90ba2fe2bb2bccba74ba294ed8f88ea8598c133f433b17211b1f3b2026f1b2493ce4805c2e2db803da7817211729bc323d3e864e07349138b508c9de52217fe7816f3ab4351ec49132bc2b69706f17c17877da781745c38bd1b56e8aa707f8f96bdba2e9c5e3c3f06478f8cbce95637edff499ea3dc2f6e55dcf5f6c215d3ffee25fce9e10d9f9323cbcbad1c2f811b6309e72e2c6179f13f28b27fcc52735a4b8503de1d5e582575c659af0177f6a00ba913a52a590be1f5e5d273400f1ea3a9147bcba4e6ade55c627068957d7898d7395f9e1f9f1f89412208f4ff52020c8e353348f4fd5787caa3e3ee53d3e25c4ab2b80fb787c2a0aaf6e00dea3c5ab9b73192129bcba3b5c264a6aa8018f4f4d61c0e353440b787c8aca90c7a78afef8549599c7a78c683c3e65a5e5f1a9245e5d9cebf0f8d4155edd9b5b9d03ec188047881205f4f0a04402969c98509fae098b10af2e0ecf210aafee8ef3787c4cab008f8f91a2e3f13143bcba308f8f99c2ab1be3f13144bcbaa8c7c750e1d595f1f898225e5d99738f8fa9c2ab1b73d3e3638c787553315678751f93c4abbb3aebf1315778756f38011e2fa3c3ab6bc36d1e2fb3c3ab9be30078bc0c50b38a90380378bc0c0f0c0fda0d7230ea4d6261bc7a3415380def1378e79d22f0f6380f49e6c36b50e0468def70e3f771a3feb801e4c6a946bd3f5e6ff8b8b1030d0adcb857811a35fc3d6ac8c94140bdf53582783935d490f31d28b5de1ed98fe75424d347bd39f3868f1eaf376abd34f76e54ef3b507ed4ebe4c67dd49073e33bd490b3c377a0f4a8b71e0134f57a0ff21a14f869d450030d9a1a6ad44053e33b505eaf931a4e83023550c0470f9affa871209f91c067803b731d2a92f9ed4069c0c780eff46fa6de069cc66700069c24f0bd650233aaba03e5ea705b91cc7bfa010e40e333435aec0f509150da7d070a8d7a75784b4592d16859c00f5091cc06d47b80f90dd1e1343e1a34eafd5b3e1a2ddf81b2807a9d7c1fa23ac077035424f40006a0f105bcde960ff98c046cbd3a9c01aad3bb8a64aa6c77d58caa926007ca77a0e850af13d5ad044eaa7712d0c1fe0d9839034ebd967507ca2572753c878a64ca1c4e9c02ea6ddae52075d4eb809f2a122a75288042a093678900a5a1ee40b9422e8f99030ff576a7158929012c3954249447bd39bc003cbe03a5ab3701199117a022990ea8b70053f2908077b2ebea3d9d45762cdf8142a45e27f23cd05000791d15092d808eef404940bddd7938d5cbf2049c4240c81540430e930605703fd1406938d1ef401152af131aae0008e440c3794020071edf81c2d57bba907ae91570130e1b00a848e624c232b50dae7b605524d4c6038870154966ebe5de36ce1e92cc3af1c1545377a05c075c02dca622992c1b930c661601ea65dda622a13504e87a51590f976103007f4045326dc840bd6d74b38de6ef40e9a15e27366e5303001b9751630380ef4041d5db47f165dc549164d6098e180e98d6490d6bd61081798c9a7a63dc5491986c25c10e14cef41d280ea8d749cd89e060d5eb84e73835274045422d0976a0b008f01d2830f572878951afe9317ed30d60c002860851000f09088200203f7c7802780f2f00cff16cf80e5e8eebe0e158ef26e20ce007f06cb801bc1ccfc1c38187b7837106f00278365c8797e32c6f4500ef86221a670075078a00aa0c107f310055c609fee26d3c1baa131c078097034795116a557c0d5ecd6f7836aef26afe79364e835753657c6c54999f56c5d37832afe1c5bc7aa97bde8cdf93f98c17731a5eea2dde8c9f3c99532fe69d973a8b37e39c2753657a38a6ca2891aa324bbc195586097ff130bc9295e161598820095f58949755c1a345133686d74b8860a80b16c6c3502005d216306078b0f5b9784658ce996a7b37b6e937cc793ed8b29c7bd7c6da081136bb496c66f28c64363b0d8b07eb11b6d98db40c0faf64846494905962a30c132be373659ad828f3d3f22bf34406c8c6eb58983a027ef1262f9502f8c57349d8789616d8f86e091b4f6560e34f35b0f12d1e84df4de120d5e2417bf2a0a51e64f1a009da131428850abe10515eaaa755f1a5948f8ddf524045441cd8291e9884d6147a7470342c053e3890cb19923afd80dede2ec573c55e6a6fd7eaa4b02afe86bb167f11e7a48478b2500a14f4c0f28988dede140fd79b5a62638aa7b66866921921689310216c8d339da03127a98f8e5a7a76a0d36a2ca23cb902d70cae19c06c715fac34819447d8e169517941c5d0972140b19c85ad21f8d84bdf59105245025ad0ce1ad9e2d90a396283342c4ca65cc7b296f397773fe7b359afcb4aefb237adfdf2b6a9d98959ad9af893973de48c402ca731eebee10fbe250637c45c34170e7bbd5cd7e5c1d8b1c9b0419af86d3ab4899574340b881f33061ad99a14af6b5ed3346d6a33f26c5ed4e12f2ae1d5f59e8b082e82a505266b52a209415f2810cd22a26112121d7a230f548257178a216a4862f843a1e67f342bf2a0e8bc1e83f070d5c4b3559e09d86bc61e2051097f3c343caf02648a2519c496cf95411823f60b5ed7855d879e1188412a10070bdf3ecccc45be4001b14411203ac05a449f6645a0567544604204f4c2a3c804104598803b30ac087f7c1dcd71c9f7c1a32320f863ee09dacaaad0f3bec8d92a66b16ed8071af85ddff5e1f0bbe03501f9f77fb0dd496c7466b35519eaba0e5bc551c6795df292f2e24b7637050863a6a355f0da16683cf775c9ec9b33fb5a05df4d81c6334c124b2bd820afda6e336698bc2e293b6b78082133336dd59c1642d63533c81a1694b06913429586646297859f3ce4c766292f2f42953cd4ac44a2758d871c8298a4590e65f292ac691a12429b17a2e4c0de4311e505518852822428cab041414b16b6a0f0420b545ad882c20b61a099852d288ea030ca32ec92341f8ed30801c9dedb38618334d705c8ca6f988c97bdb71d13b4b13e9ffb49702e4d32e9a0ec76c5a453b724fea24eab62277941fbd96f27c59a5dccde4eca926a203fedcd9078f505af78326f4b32edf0270f75fa0a7ff2377ca2824a1dc93205ca2c43f46e4936c9cabb181123fdb499acb9440ec6600617708108510c610a2cf6dea0022822d1134e6c7fe3727a6271c3c5010ef14b5c8e94fd44093cdb874f6cdb2e073b4130811441185a82900b602c7fde0046c001108aa8200a82cfa51b5f995d6029f0c189b7d1d1acf89b6641a2f81f4145e8671d0d8260302d20850654a218c39012295178c1c105842d581b6c5f9a011ac537a102cb4f68620b2a3f78020b2790c0c2892d2c9f06083ab07c1c4d93ace005312883d0144e20031be0643be860fea8a952fe4640bfd2086cf718e887c30737a033764d64405690903f1890172b6838e51cba7c40821230164912521fa040099c128bf6c10b76b8c288a28470049f10c3d4ba809a529357c4e0c754058d4182bdf4455bd8fb185c7902131694b6405116b698fc685acb6a4ae068f21a5b4dfb35efd3be232aac8255a615ca05abe0d117acba114ca8b4404af99728ac8252266b072c4c6115b4976e43b4c5c216932cd86f081976d17c383c0b5b34d0224a12ecbd4d3647204f53406517712585f8cb7e6518acbc6c4264012193e4c5a3852a58791859576a61e5e590b4c2267ef27228f2c8ea954375f3626bd66875b44a5ea69217711806470e350b76776c8ecd62c39f3c6582421c29d4ac2172c8fba155f258c4b06bca110ca2297888acec88c49364af44da80a638c204d462573cd24174232f9b00057b4df6da582dac1040342be2c84b20b8235af943b3faf2439af556c9db2978c84aec72885749d70eb3601540920aaf608b0927aeb462e5a19432649487523ec32e1b5ec9cb03c12bf922bc8259f0d0981726c925293648631329ea2589de6e43a1341bfe38d62b9f40bb6db27a6fb0dab7ccd3eaf46e1fb9e90b822226cf09f60b9334ac6269f9a8db1cb66c3a48d44ad8f8b20a94b9ad43c5749ee671dc21c71d76dcb56e7681de9e8353b280be98807697d4436141e7b55fbabdc4ab1e085979ee5b3475fdb57ce33c26a2dc5bb80af9ebaeb45dbdf4903fee524817145a8dda530e7340ae9f322844815e6a35296b4a1eda548f68e5d946bb490fc21cdb6f7abb4cd2cba6edbaee14ee80b6eb0e3b6f765d9dfcc94bb8c3741944be3be70521df7d93da5b0e3920da5b2aad455e2c57af3c07a2e5ced2795c4ffe4c5eb4a56f2518b9594c15c21cf21ee6a52e7b7929598758c8f58887872dd60eaceaf78d12e8eda5b74d69d4b290a209556c0d0ba5b0420b4eb2df300aeba6d020faf240ba06715dd620ae4f59e488bdde98ed6bb6a51744f79833461b2e086cb81fb0fdab59ec5a0f6dad875e1473d6d334ee17d7633bf7de5c4e2e2edd0d3f464602a211443d50c2f2bfbec1a53b451e9147bcfc8c3ca0e990579dc976d7bbaeeb3c6602ed4c41a8e7a4e5f1d0b697a2b5475f696194404ef128fe849c2a655a51fcc11b669102bd7e5192cb71d2f2c80539557a162f757ab427164e9d4e52d057147f57d0fe75c9f1d067a15ee751d8b159267f1c067ad53b35196d908f1e166d909f300776d39ca5aa1d6aafa920a9eb10c7c42a4e5d97f6b35c0a414c725d2c349053e414e905394576414621a39051c0d314d02a445656d4b3885718d218b2a32e8ab4609b04f64e1b99995966118f12fe7822d14f1e25fcf5e30d478923a0b3c55fff0a2a349f68bff140d76310f1f34996c45f049a403f168b3c6eb4fcc869df26933802fae432c9287a70c50ac0c2560f865a4638b25c8fb0bd1ebd00a365cd8b964b40b16749fc65bf1b8439b6fae487571c8555ec453b7f2690e653e712fefaf20a7a93585e62fb19c7838c36c473c5a20db1080f107efcece155acb387bfc863468936b410acd7378d67fe4e1eed373c85a2441ed076ec2345a6e7a474cd9b4a78f294bcf984552dede46996c4e9cf9ef983047a7ba7508b85522071033b856417aa18d906c3acc25f4f2b5632cb2cda92f8eb2bfc350fd9d4b9bcb6609845b6bb67959b75416f1bb5d110d20e21b9ce22fefa4ee89d4253a8852444c11c94bf224a7b6267c406692eb72c3fc218238c0db1c61a6bacbb0f3508638c313b9c52c22f6012bc523ad610890aab2203a88454f88b45962b108d22117fcc5fac12a9f0c751683cb7b01b5c31e914276218c30cb490e2042b8e0054e481560b6c9045125e1881cf13342638556690858f0ca07011032c28142576eb26945f8c800c4c1c818531d0600638975e612fca4a2f80c18b24783094842b70eeada4f262ef0d560ed9815990a50daffa524a0b210f4902cbf667eb7ed68d83bfaf25a4c1028d22a0d0c45fcc32288b986234dab01b9803072ee887618f7d5d18761dbbeac45a860f2864193ea0f12c8dba3be6853f282b27a4699a8683d52eb5d6aa6c29e74afb95b235a8d5fe67a3e3105e42b737a600e80e0b2bdbcb8339203ca39899a7fc895a2943425eb1b4d272d71433745eaca07d6861eb8912f6b217e687573703fae1d5ed60849af00a3681c5386d2f4c94ed09d0fc01bd303f9d0ecc4fa7a3454b5111158caa5106d4aafe0ca02d0382f981d1016469efc3fcc863cdd22a8c0e60a4c8609eb07dac42a8e29d34a8148cf67545ce3a85686600010000c314003028141009c5228150401a09c23e14800d8ba24c744a9788a32007521442c82043000000000000008c908c5400000aac11190708a1d133537602071518797ff5c7f633d2ee17e9d92c6f0d5b080d5d6a264d90adecf4a2e14e5779779115c51648636f58ea13629e07049e93c3e76372a6b10760e2940af415b10b740136bf64f79775bc627da231401c5202bea1613318c8e4fc18ebd683fc1dfb46d7b6239d1a0b4b2e15953776b6ca50a1e625e732a2acf98a651c3e1436ac286b3912619d96226ad91e1853b7d5d8dbf795e9874016d04260ba0840c7e355b558456ef937961ba80dcad5cfb78653bb64440d4e1f7a49da4eaab12300789900213905b91bba0cfeb650b082e7f86ef1211e29774c22f7d24d8790975536a16d064d937158d85375be14ff2f74d55afdf658b16cda1bf941e3fadf08c2d939ad61b6900ce01d0cb8169950c7a155b1588bd494d6aa4e8226f93fd720c4a23db8f5f8a4e98d862e741508eea66bfeadd76d10c8a226305373a92e3f3602e8093945a7a3b5b65510b71b5ce387eae221ca9d09dc10ee63f27ca10a1c56c6df226198fcaf41bb8fd10edfa9d31e2673f3080c2c82ec3fcd481643905902aec1638ab43a385dd50f9356a0d28b890a791575f3a844027744fb3a0b56b25514217f7db448e6baa17a3fea538b24a0ba2e4d5002e9647a0c048f92f664046319db1a9c079f2efb550566b4544d65fefe505622fa29400cd4dcf4ffd3931c3522a30ee29e5c8c500deff338a111d923ca03117b603b07abd3ab084fe4a16fcb118160127dc70108bc73470a657d992f87bc6c53f14f0cdd001507e69b4261030129e4a690b20d8522b6299497010c9b4282870ab3ef94507250d8f8840a55d74ef5144c9c406f6ea0b498c2f60d56b4d2e00c2a7d8100c3cf20b94c98a3a142060e1cd7447a5e9f3326b429b0b24fa8671254642e41e53cfa7087c75ac54b808613918e72b8c0df46b874e74770223ec011304f1f88b7e39aa2b0570db454424b1c9fc4e286e8cb2cf3fa37fbbc804a53a74fc3807dd4e22bb0ffe06b1797c0ef24752e147603d0183a44172ce474a05b4ce2a4e928236792762912033bcafef5d17ef6aa903c306691e4f8639beb924e1e3a1fc003c818c260942a02cfb3a625191e4e3a170d0ddabaa410515b7b1531322052a8e1df312b03210c50fa7e7348072762f7f0a407a198bc5622d653cb7fabf3ed1cc1af681ab562c6332d039e27b483cbf2db6cdae610327d468089c167d62a23ce7616d180c1fc38a0757c2cba1bee10f4629f3dbee5afd58a375e71a7eea88eb1f9c066bde376471f535b4770e2568d0b41661597a697d5473bf2546cdfdf137e1dc2f7c9dacd0c3cfb03b18bde78ebec0d44db55876d1a298aef9765d61a36eb4da22771c25b0d287a0a58c823c69063cdf48d15a5a3cdd9f98fbe4639a310ea071e4b6f873a6ecd620d1dce99fa3c46816d256cf77d0f386e44f6e489a0810f71265555cc63133bff7f926f05aca00e73a22ffb1a33609c340c4482f880e7f9f1038d3ae695e95f01ba7b27c3075af5d721ea5abd526dac7d532124c9113b398fa014eefebb6d6bc017f2622c7adb62dce393e316297736326ed56af7ccb73e7ae54c4ed11ec57aab8867ca43f31204c40949748e0228cfdedc4fb00adb1cb72b8b548c999065fd1f7dd6d4e69bd68b5aeaa103dc00e49e57840914528f4907f6545558d2aa130a269cd686a266b2cbae53990c2464e56c16a030d562e58f351f8aba894090a197aeadcb8ae0e2c25ac089168d9c166ee20a4898ae007193a7f2a556d8a8491c45a83a9ecc30c89f485d0aa08d97151e9fd780db051d53314f38ba98b4905842eb3f84dd38b780dc68846c74b06d5dbee88b28e1290118b739be8ae39948e688b0a97111d4aa3249b5ae4207e345eee200b88027239097aa159d22987055eef9802e099795bec409342a53e010a13b9d13b02da31cb72c6d99b908972e7842ec56fd4f8969ffd761796e15b4f7d8a6430a6afd3d89a5090eabcc21be3d13fc6925f917dfa0a00f80df6845a26f4a59ed5e85db9c73ca21dfa10a8eafd3860201764505db700555310deb36407e62e8398c6e9b6ea3fefdb2679de1463737443a28b54ab685e546b4799b4ff26052f66a021a7bcb98570d6d825296bacbc19c0cbe067b0a5322095c1bfb44c6f39d2ecd5116c680b29e7ebc3e1e549cc192d649cd060d46453a207bf7269e9f31ca2b43728d9df6c581430f8c8b02dcbef056a325e050788f2d4d869d65aae75b8e9a16ae58e4d3246f95e56622e94f875e1b81b8293a7e5621ee12c831d50b8a47c9522ee559534074fe1ec20526459e0ef870ab0c83ee733dc1ac96337ad2c302ed488c737b76c7fc2c4feab1614263ec84d8146e66fc87adcce7205c4f5f27a935a8093a85eb63a37162a499a9a1ac5b0593a16e32a8ce7b64a1a7b8944f8a38a134176df83158e6bc8e995c43f7f1a0303d33844a721c84b6cad478d4c924b34808f03259691ecccc945ffd04282f558fcb3680c14e53c467764a8926f01d1710eab4f3168cc07b5a21dffbc51d77ccfffd039adf089ec6643cfe879e055cdf2855f7fc5baa53458bd2f5c8491b87d39d04a4005d36755b0d2d2d2ec71531bd5636cc62f77cfb47d445a52702895e68f7eafdcadb7bb351026bcd4790731e696fb04e20c0d43855ee94b526c9acfd2de00820fe0233b92808d643a19536dc9da5aa2cbac49f518e94b0dce5cd00923f2356ff592e1daa2d80005efa4b42db6098390525e00ed491a1ca6be0b4a34a73a67db575b69971acf4ea029f806d284b254eee1a1667f8f894976e4f9c8bde1e3e66bdb535de53df654e82dbaf5f9440087b2e0e5b3ab8002eaf2c0cd87ad5873913592edd0b7ead530098808eee82b5ab31b1e5b5464ae0a392bb4b25a1aa709e0a1939a1660182ac51db77c265b9e1fd00bfeaa3167a69fd24b6df3fa930740dccbdb6f621d4530ce457274c724aa2b04f98e68357f652e2e9c0276b23843923b35493acf5e657e7abbd34d5e93ca884fd5090b83d84189a2a54fff5949427c45e2d4411a0d60f1a951ee3172b06c4f580caddf7f0b43f93a16642637af092ad0a3adc40fd94065868379d1779a83ab879e87c2daa12805332eda58d002a55ea5900b2d6adea24279eaca09c1c566e70b6fb86760d4c8b8cfa767e55d792270f34f8105940d4adb3eef27cf51b01b9fd12d6d5eecb47e322aae59540e05ceee059c805e58b831605719dc33be8d7dfaf694aae6789177a5adf3fe6b828a794a74088111a2496c243ed8f5ad5e825cbb953f0f8a907b8a8c327a7f6fe7027e329a841f4997dbafbcf33a247ff5c2d512137a2b38d3b10ba1feaee2f4bc10f6b3f28f4d3bdb67470b524779a960840ef4d9b915ad812b1a92998f3f4be80aa1dfb24e0c37f9132805bc78da6c5249dba1c803fcd6fae914e635d84bbd2795594c5bbc39557b1d1d49a250e615838f69ed1d940e1956b19e577f2ede01960c46cf4139cafb238be7a3121f111af3fbcd38c4fc9375fa23a2bbc2205f4090452ea8f5108f45ce59edf26c3f96530f3c9e0ace48265f9f181888003bf9eaffeb1af003f608b7c931f4587770539c4945a51baf77d2bdf5a370b75895f5418ee398fc47dc6db1c894b8767c56eea029d379fc86a05d573de0f8b7fc929fe05939bf2712ad2b20ba7a86be4175df34dac143d03f22ebd2abf9a77e3e734ca18089d263fecc25e0a7c53355d401eedd3e2a5f41a5f7bf19401eca81bd4be87a7b18de2cb9efbd3dbe4200a5c66d70da94cbfe412fd51151673dd1789cdd0c276bc25c504863d69e5e84ef00d285e64cbc1702b57658c308d303c48e53e0ed98095e598bf09f5048a3e15b7dd3f8a74c18c4d9670f10a7bb9d238d98acb1910ab0f9a4d807b808dd3416d1e28eb3afc77dd481bc108d48065097bdc1357da3a16bf400170c40ca8d10e29dca13b994d5de3d747f21d89521419a9a6fcda272bb62dae8364302835d95fbdc622d3384d368fdcacd0ace4fa52e29080efa5ac9c3a71995305198d4d8f92a2714888a4f4414693abf9329cc68e1a863f8eac840e243b5d46f4ad26ed518541cc4f8c9d9d46f8a4b5453102eca1078e9881cbddbed6e989b131ef42c1ddebb266b1ebc4f26e9fb823581f6780f3366a13babc67fe689f1f1ec85d662a512ad03ad269d8054bbb29a8008568039eb56f9374d73c3c8ce55df70a3ff6d5b47decdf62ab1c76562e063577603cf3e86fb4543eef6cf44b513526e8d3d9cbdc2d844c072a4d874ad9930354865c04f8eeb869bfef858698eece4e4468fa795e3fea4977792e230c1e151343c95c70e299b73186f4ad7618cb15afc3777898f4f0a05aed1650e9867d13989efabaafc3db9b60b455bdb80e12677d0b97595380f8f561c0d0a12105baad79127ce2660de478dabc881a4e119312c02f2b2bfd22c33b7023db6c765844ebabeef9ab2536fbb41cd67aa332ae98abf0844c4f21f5ccb999596a951807638dbc9d7c50854ac90f7416c79c8d0d8693e05f23b027153f9bd4e1259dff4055104b53988f9a4d94f3dd5b46e92e69315df6af219c7848879efbe4f424461241881055a67fbc77eb5277ff64aaa39f9aa538839a9a413f044ebcf8b4928b1c66bb2fb062a5ee91d1925216a24fd081e9b37e6b861ab57893eabc36f78508dde82a91e6a80fbf7adaa1a45a44328eed12f7374858fd9476d75b48979db3ff1e4efe5360abcbb144e0a00baf19aea9842ed26e0b09322c26fab1cd60f17485716a47dd999d316add5327837de74f880be7588c03d4ef481fd9f9db4c6cfac340db643e1829afb5efa77eaaed05dc6093c4c245f98bbd843b9a9b8524490bd602fe638500a44a26fc324d917e1dd3f494a5674863ddd2a7d211a54358ebf23d3f76b98069985ec8281ffe1f7e9bfc3740fd9f561c676a14cf8e6525e9f138a8423113201340dc4e376a469357c92268dab8eceee08268718e6a4bb1bf629e32150a064826cb1b8561efd87af4c2613aa511ca942fa9a70e8314010f645db917b1345e649d90ba53647782b1484f14c6a6105019841fcfca8f632f8a63f3d34f5058e37727d968ca18177dc971be2ef72b4f3aad3b691327d0ec867a73d4415ab3d1ac278532070eb1bbdecb9b01e05a003c75cfd5b9b80155c79a0a4000c1540dc97ba30e0f56607163b5d0323d26e48488cf06c651f555a74dcad6a8f35385a5f330d2d946e1db7c605dd0f3981b42177d9e6f4ffe1c41dc535c87110f78ced320cfb9de5b87eb24eb7935376edfe000d5b8d86b2a153a4e7adaa01766708778433977d572a5814c78c27b464ec5b02c09c3be4651b172859ed218b6e3ec5f747c898c42d3a907e716b2ca166c40ed5398a98b2adaf745b6f05c677f68107e9866b53a403c79af9c662f9a651e4461b3f58f37a1aa047e82f6488596afb0bd9cf80b919007a8f00a0e9ca04883a44bcf427175c0c1497f878cf6c03e06d1bdfa7e60770301d1d57587fdfee848fcd94c89334d8f6d9e9b6113cfd82b2365994343e76b636c8dde5449797488ea84643327b91707ffb380337b7d93d78e0a58374912028b10a026b022d0d628f775746debdc6530585cf46c9b354558825db3b029c602ffd66975b710754dabf9a4e84ae475b234c97aca2f6047f8fb65b389cc2b36542636ace689120053fd440769e8577197a7ced36a9d64f5c3057ec7b6a0f6f4f2e5a419e509effee661e1dc557e80dc45ea3bec4ee78daa18f32d605adb18f31896289b3fa1318aacea8284061219b3f995b188a23b538dafc1aaf2b7ddd240aa2804c723a2f98fb4e4b8740ad4b4e2e25d99263df38739cce423f117291de8936e0d318fb5aa2ae4fbc239234ef3d9aac1eb99fa1126e61fbfbcc83ddd9e8151370875e394d839231c6224d7e24723f6d55b64a81a85c14fbbc4180bf4a2b6a5769c8eafe0858b3376ec58738e76866926d0523f267e54cff98e50cf8e9023367ed13ea7e06d413645a557193cdeaea6748a388509a9039eb3550238f7093faf9d84646ca507b1f6843e930bd27a19c97f22eaafc84ad0d2a47ce9ee981d14186a99885ca8f122e514c8158c0503b52b6426e1cd9182600b944390895ae4f029ca5f1e01ab7291be465122d007dc06d04923ea98791237a82825469d9a53e090a094b2113a255962afc29d464451a3d0ec8c0fe18f40eb5ab4772ff0b0e5a003829d967c7ddae7b31173d0567625fbd7ff137ac99986c13fc3aaa8704043d2f746f7bfa02401400612d01cb309c969ced44e08e4ae884f77d9b7b3a81ee1f947872563fe59a89c80fadb7288cb6c70ec6d6e8087e54eba7b96db621fa5eb5404dd3212ffa361b1dd93a068ccf1dc7d88cb9eaf6cfd5ca31dc52b808ab84d007c6e2c82ec0641c465e3672b798eae53effb9c43bdd139fca813af0133a140c434c2b9e2a52166dddb2cbb5ba02f1d27b2799b31a74a502e384cd1039deca53db48d738e81013ca131a397f8ba5af4929f7206bb47879412a64f917edbe9d393544382f1f9df6d7e70cef99b974e4c2e4a06b5677a6ec9446beb10359fa44f11cff62eab695d7c58221c1f290e0d8197e92349abbac210e81d7b2ce28287c021921182a92218a48deb54c0910d23b8c051ac18340286bc3261e89295456858fbe0151be9553c50af6c80711b9ef6f6b858fc00b648cc0809dcc2f8a6a1810ed0e77bb4cd4295a4ffcab08007f541a081eda211612b15b8cabd186f67154711e1e81bcd91dd5acfd59cb91625ca709c8d1932abf547d7ccca35079359deb3fcc1876cbff0588fd7ad186b9f7f42e728e038122904177a7b4172c128fcf440a2148edf943c986c73af934c680f61c4f902eb7c2be0ee774b53692d4934128e62e785c7c7e409ee80f2854803f7e6304e4fb2c5fa23eb571e516493603fc3df780eb2a1219a1ffe3b9547e8da9bb2b7f15116f807d10b87297d557b9358b32a6d7a649621098a12aedd7bccaec1862cc0b40ae85453a99dcba2a8e28c2e72f04e84225d2079609617b7352a81dd161ac30bbce53eda71c68c3add3dc8f5289e3d68ff45ba8331b9f6952792734847cdc89e78aac85c33c4f825d993fb08a61edccde0c961a9859ac49a9d2ce30b4dbb5c1fa1ee0a57e9c5ee090ad63e84024ddbcb753e3042b43d25baa30923913ed10b7821a5ce7df61a61c86ae62fd709df17e8ae57c409b6168a53cf7139cc01acb28d203022351f0c52d404d01d7fbd0462488988882f76a148ee1e40af5303eb5dba82008c963f9d5b245a44b36a1977a4ebeec97d40ac13aba61f3924333b46703c261e2b68c4160614bc1eeec3e38728833e7501a721f80fc0f4a067962a4692b7efb79a2348f7022527a66b43ad526506c20bc2ad652c1d766659b935cfa35d1eb4e03d11fabfc9c2ff95194bdf0f388d77d8b897b02a0859785ba9d58b01876398acbec0c6bc97411507b4d1e4a13701dff2bffe5346f5481870e64e830091572c5fb5299fe199638de805ad8ea54ecf76ed48300195d98fec4ce079f8996dbcf6f7cbceed1328a40b2c11798c7d3e567f2130ea122d5d0847287a12aa5239a52184828fb787422414c2c2bc3120cdce49e3bfb374374f76d3a9335a1cbc5e78f1766789d9d6f73fd6eb709b552e9c036cd8a3d942ee42110a30e52a135a5bade25f7882bbf85558cbcaf5fdf8e6b4a9f02f52e2b0d80869c673043825310318f4aa10f613875a29077cb46d38219669853677d2c0b2db5a77c7e75fc38d9335d48e40ef8f4e68ca04829979b3e2694d4c4eed89b02295a205487158a7aed134de569182bb35d476ea0d249d6ca535b5b38dc9471682bdce6090a690d09365940378059ef424d827d02bae0eae7f6d7b8dad333776056195b96568b2be859f60e40937066272d5869b3462f8edcaedb5f4e55693f65335db0a49250a98ef98e62889595db69bb02ed35023837667092d5da9de75b9254fb6e93a595e4679b9bdde7903052801e653b70cd07b0cd4195b863cd1f93004adcbf4e0c25e35a41bea8e00d58ca1297e1bb9458449288489414a8fcb4c8b1e8b6150b01a1f0233330817a2b03ac799b47d74a1e14c70355b53d06c768d58c0cd1dfc16f70929237a8db88a3a111661140b68dd22b31db967f6cf79b6168a6f5e51c641af28fa4df5e6e7fb91bc2e82d470378af9d1732b86e22a6efa9fe167f40543f54392ac44f61689d85684956c68ca103120976ed3da3c31d4c0069aa6ff2d238d8dcb5c83a9d1e7011ca4700629f443481930ecbb1feaef9a2405dbdabc97d06a53fcd517b6c5e0699d1f8c84464aebf8a98bfc510d98f7d3066c45f20debc0e71b045f25cffa06c9318921e209bafb74b504e787a650fef76c87a16b01d1eaaac6c5dd59f6c411c9a0eca79efbc3a1044064f4a61a82a9d9ac45a0d26fae34aba64fbe5678bad0fe79f6a265377a0e17127d7278fa669e6ab96b760ab069a1bd0b9d8f25ae0b56911b965a2b2dc94e263270c23cab1491ae5bff4d6e5756be18a16ebb2513aceb2da22f42b412e698caed3656d3aa5e99e7cb3755e7002e565ec237328721e6e5d33886126e282e5571fece43878aa234541900c0bccbc50923b553ee3465cfcf61c9bae174b28d15a031ed0e3295715463524c530d6657de9aacef5e2a18867223400ab8191d9e018c48dae08020a74de738402da885584507784b26d4b8331e6c2a6f475530cf90530e1c1829843063ba3c0909c6470a0c27a48de79ce620973382025c6d4a5e46939d5397617f6016a3a4a7f7d857343e46182d4e1c964ef78ab7d779f55026fe0ffb44bd7d801302752aad3e9afa2e98fa76273f19f870105d1d1805919d0e466d8d0a3eadbfac070f0fcc7ffbb53e1a13284788e3f8559908ec59cd54557eac8e10da48a8da839faa9ceacbd22ec4812a3edd6f46159ebd989736ed8933b80951bc107f2db6b318a316312b13e44d7475c8ab4e2599c7a2fca3aff3abfc31843e48bf8aa50cbde9fb40e19ed154bff13610f2304ae9353bb661c524b0872087bf4982d146abf505536cd5459a2eb4b355aa2e0376aa6c693bd09019e905210cfdcf80a4517a7e2dd280bcd3fed200b8cc78860518c76e92d52b2b44ff23e4c776526eed732883a7f6ececad67807ba86003b315d84564d4a11bee367d116c991895e7e9d92f4edbbd69165ecfd650ae005df96c14ad94fd4e09becd8d11f645d8dfe22b148b87aa45821994be16494847c4371f860d134ef895a5684a6e252d5a3bc2564b4a38630e82da65623c40f7251ee841570bab2874e304e12ea4ec13465e9a6e282e9878f84a22b1d1aa699f55ba46045b24950031034ab7a1971286ac4f480d2370329caf0d4aacb984aae8b808af0054ef4b1e1356b1c70a31eec394a9d5c6d492b84c5224f49d1e84ce16f4445ca2bab9c330ab1323d35915a8291559291966aa80f22b21e0eac4f0bd8af1a598800ddd1d53929907a9da808578920902398c0ab9a2a7e5d9f35c8933838dae542c6923702e0a311a0f83bc6da40a813127086382a65e3d602c7e216c0cab96bec9a5915f5da7488f833937c17c3d51ec301425b44b2eb58bbac2ec1eb746d049e719e8daea97ca348b32905b698b3f4b505799f95a1223b49c0294a934cedf53b7bfa65f13d261b76ac53ac1b09b7704dc530820f6c101da5208514b518742904e800e1ff89276656a1aabb257a562fb3e257725061444838e91c5b13f82d2551ab4f3fb8c6d4f022a6a60a845e9660048c6ed8b77842ed361d275891d82c910435f81e8caa653a43108ee2bddea5e7adc47be6522b2c327906c6ed0e28c2f370f3eea06bcdbb7873ab70f8a30317f8bf24d6ca0e848133b43790f1bd2d4d13b2d895e7cdb8a15d8a60c28cf1603066dbb9fe81c47dc96135ec35bd3eab6579f1190b60d8f324b90f6eb480d6e3fa543dbac2c008e9634119a6113166df4b6778f476b5ea8e1d22acf397171c74a8cbcad39e40bd841af1a292b308bebc3e55d5d12f92cdfc46d6a73b3cdb54aded6779ae2540cd4261a5869c8b0c67edbfb2b2c1428f72419c908d39ee6c1af9ac12e774dc3dc86c0ec84a26d948956aad2b8ca684539a158bb5a48bded92c225bc634352b6b9e1921e068eaf6f53b8f7bd6f6b7f600486fc266473f8bac553d2446e5ca091b3a150429b67ab211bc976e3255e1ef3cec91d9ef3f94e1cf46d1408e4a4f37cc56f69196a00b4d009b5da2e7bbe4d28c89b6adbf6abfd0d01bcf0f0ac1969055f4c627eb3874bc3ab2174d809171cc0b1c1ab981045d8a384c4062cdbe56d30b14218ce231c902c251b59c9d837530e68ef614b26e287e2603da889294485e425813608fa665cf62d0bb84dbe94a8f8cbfa067f741f39984a7935a678bf4f34890b9afb98a4202d8a6c1586aa9495e232deb389124e9ebdb1097b1a1e78f8b0ca959680c230b360da528768f09226c4e341bf9c42f237348250a34c4df772b52b42cadbcee17b4317c9e289199b99885f9a8b74d4575832600f80e7cd901fd2d3d783e8822f7b541e8f874380d52f8178cba9c44dea03b330ecb56dd30a4f29e43a9754ab006019a45fb69e0f912de0bee66ccffe67f450a1bfe075fe67f978b20d529ee289186729ce4909f70925972abd2911a666b90cba37b0bdc9f379a5332fc4e5e18942dae14aa63042eed8cf68acefec03de419e3a6d945bd5d0c339263cab3c1ee0eaebfbfbcc8b6d4192d83e6002d019675d1c4fe6bf1c74cf35e8143cd4bc4ec98e96621309ade2c764d8fe0338847254b93607d7b7dbf204ac6583bbf876b3419a2db5bd84cb40af785e51c5963a62d842b45f77e099ca1b7f5a61199318a0ae4425f415bf62ffce8a8cf93bc64d015dc4f596507c5b178abd60316b60bfd862caf41a1295251e1c82241274e7bdc46ec08989c3e34be45cadd6d2f1c3ed66716f089465f88bddd857f18caca1459d96793f87b6d67eff05f1f5a1fce983392ee0132982bb209a4084af2fe110a8ed1ca159e46a70fc00504451b832ab60069936b48469df358ee9877fc6d49b69127d747842fa894669c573a0fbd3b94a534f9e86d4fc7def2335078f3f83d45ff49dfd17c77916f59fea996e94f4c12bbea8f68c4c97505c20c18fc1b4f4cdaca7aa50f4d6786849070e4e0ced6539239330ca2c167778e3de2fcb9a4dd5e4fc57778110def92459ec1946bc1bdd200502a2c657b4f905b6846eba2bb3d89dbc1243ddf23d778b354a2ebd4648a54cf465990825b82b254224d2df08ce2aa735763ca4154dfac4d8f4c5e0f353800b901778f6538a65a7a0290ede2ca4da4386c35f304d5c3aff1ec293071a3a1ef1dd264961a4219be3511e5cdded3cbbc2170c45a00ab682e2fce4953a7994509013ca02dc5112227b5b6b17b20d8e02af0dcee5092776600c6a5f20ed514afe620374a285b93506a9355df02cf6848d0efde91b084824e5ce42ada2cb5e28e989f0b011aa9c5a1de0cfcb4d6db6f1bbc146c30e042704a02ee12d32a40b9c5b29948de532de1e3833c1378764a619633620c9fef569d8844624cb563a4a391dd032d5cecf2079c06fdb0781db1fc9727fa7090f6bc58767816258d3abb002c4fc112ec6c7f4287375d7602fc0f05c633642d4e7761e0cb7cb1492dc7c3589015d88ff3e4c826961cf1a81b5ac9eb72cdcc6fa82dd6a47af8f4383f09efc748cfee30a3df923028778a11b025a2bb59f090b1d4b01ee4075496e735445af214b853eac1addd701a291d0b52d609913962fa0ebb14e0bdd6ea8ad014514f6e0d2441841eb99343eeaf376e4247681a61379dd42696e59ea282c68928028c45e4e286a05656cac875a89846e26e898da4633027ea4be92c17c7024fee767738666f86563bf8d8cb648dcc8cb797ab3b4d3ad1ca403ac4c2ebf35d36df5ae72536334cee97f272353aa8f97c25e692778cf51fb983e414ec270b1b472b80ff12070cee45a67143d26486685e9b542e1b249461ca40eeb63beb6d8833bdf8ca442d77572fc02657e9f8a515f0e91b70090cd18f536347943ca31f95e9f8a69e1b7bbe9835b90020208c30971b3a1b3fcdbca8d8167fbee4307ddcbfd14501d559817ab5b84091dee7f43993887684af21c94dca072e52f37ea9bed1d97959b6f0b182ceb7711d63bfe2709f500aff8895d170209efa7dab3f6d84eb33156acee8de99b62bc43b0a1bd926659c194ef106f1d5ada377fd46299e0acd0570c65cae7bcc3cf3e71235e1014c91c639b2b448deef3089768d2fd2092307c8a5b9fd47cb609448176b11666cc01eba5300507b8c6817806e01a039e270a4cb2c1a2fd6edd6d08fde0fcf4927cd722903746c1c24319f9123727641fdefc392149eb8a439438e780d630464aa5c080a9741b2ad646607d90fc9dd2384704604e459586ceb6b7df968bd76d848863c400e9d69c2d786cd07c88c09c05d98caecc4e2a0217aa5935296d24d4873c900aa592db2a8144a67f7a061261f43cd3e6bb5356de626d02f64b4d7356623171abc16f5236efcbcb57f6b7d4db4e283d21cc937e505f5c77c90fea244f6965dffe7e50f7f1c9405133482ea04f623f24ea633e9bb559770d660c1f85c71854d4175ca854530aadfbc1386a57fbc0da35a4e9aaab9c2172b4e0329c677f68bc61a9df8f991fcf54e24c47df418c0d14843f00cd7cd818d2f8ad231424282fc24e0184be53fa5749da648e8bb1206e891a1164c48e2bbe2b51cf158c99a9eec91e70dd1dc9d0203fe5161c174ab8cf97f5d6e8dc6dfc2e29fdb20300d05f68587b01eeb1239ab8c0205fb47220f59f5ab79bee42828c4cc5772b38940e96dc13f727293df6e041704c2acb26189a368e2b2d87291ce83be7de15d39e256efa7ee7c8075979aa19fc228621a1b8d28e1a92a78a7eaac90db57296a605a753486e9203fb9ed8a104cc960bbb27d2e7ceface6c6cc196b0327deb6b291f8205e8ccd70ec28368bb7810fe97b50063e26a29c2e16bd6ecf6f60fdb14a14ac53d077dea54f324b86a7e60a3b28bb94941822aebbc2a09fbfef032cdc32e8b0378061f482e9450a7bbbcdadefaebc031ea2749d0c28131e37d876de56a1c8c75fc267e79871094c16cd6622db496c69e834b1b3106afcb3eeed58bcac2bdfb4fce3c22003a1450c92f6fc7249534ded2b3a051bae80a53a0856c2ddf5db48ad81dfb9027ab7b4846a4d07655d2efe17073f8e9afd7cfab545d434ec847d4e298e572b9e8b51c494d66cad0927bff8a2b10f132898de37ae37c0daaaa278194b73dbc38e829e6bd9d043409f8b1b6a122657ccef03be8c32a4ae68bdb77bd820e711212711e18f821ab3f8d97ba891c9339d4231fb6cc488e047fc2281a14368486c2025e14d6e89366be0f4367888c4caeb4f0539dae2d0320f08423aa9058f89a1e3e11232b8175d02026524a27f6edc7ca27af51aadc43c478adf5210cb3e3fa17c6ebb1d9aee1e84c920d6963f3baf5d6a13b01483000e08487c539304bccae5910364fec7f96b86145b9e5afc1cedd4e944b62de1f85955f4022ff8f3005c59f4a7254722ee0aa3c6be5d8619119365a19a358f25da01f04459e5c5852955566cccadb0de5e67828274087e8c48c1ff5235a92077720215c4424164a9e761efa8f532eca0ae5aeccd06cfe2ba44b509ec38823d8dbc0ce86d2c69cf2b073297fdb2786fca8d233aed1b812b7aea05365d364d0cf1782cf8575fa11091878e7316332cd847d899f578cc4c467aaf6b39c8393075dc84cc5cd2068f5062a04189fe72f2f4cd5921dd487db8bb83eadfbc3bae9675d17043d9ac3850dad196473f7474aa911984a98cd2fd1d18391ddfbd91234a7804a35ece2b68c2968a8ed1b27e935a0c8faa0e5ce966f9a683e4ed712fd77c443abb74179b8e9de80435f58346537cdb7a3582d9f3696a05620ee4418e220330a9201bce168fc30a0e285b6fdc9a8bf8d8a2fa1cdebe0fcb5e0734e4640137bc2f128eeb73913f5772af1e0538c214745c0c0d5d99b004880becc5dab4048cd54dc327af681b516f2bd6b790b62a8add66c6599dda8c31dc49b476c53df16e77987e3ce4f18b53d2856eb1ef56e4e04c8b1d4dd3623a5769ac0a3c312cf77418fe4a96fe95627041f9daccb2d21d848b1d0dee353ae2b5eb56239e6450c41b95913fcd2473e8c346bf5a2269a13a471c7a8daa950de7cf9c7d1b50195749a8a50e664ca8b072a97f2990d1ad0ee92a582e5a1efeb4f95aaa50125a8804a05001124db172dd82020ae9c3b6e95514a537fb26b8896c9eff00be0fc7b99973b91e045a48e080897e451ca5b0c537e9d0679f3ea102901e03127156659c4a1139c6e435255bb5f23eeab636908b312f86cf4cc4156b59f019222c4a29458d72f7df3f424635136e1f704a4f04fe4a9f592dcceb40938899163442d0704a9d051582b8694e3e3e1215691e4b38a664817f3c88d4e737e7bff722c484343a99563ae1bc5c2979b1e4b19e46d9233976f174c74cb247506c0de70f4980fb0fe35a12ca0cfd947e627a5fd5d01ac09f12415fd1fb62f7bbf68561a6d5fa4dd60b14b68df4b0993f0418ea8e6dc4bbf83cdea9940d0026b48074d0207cf74e3bae6066fb2231a61350e11c55f023a5b8b2ed80e483ead11e2d8776dde021aecf71b53df39859a94abcb8043989b90ba7809213b23bd63eb091372370c08a2cd01879f6838719548e0dd769f170e7fe6df0c7a6be66d10904b144e26a25b26934a6870dfeefaaf3fa91a6dee01b32729f8e2d0465e88bef6246f51621b61f956e08be080371c15363ad5496bf910f2925201c32fb5ac9ab1655ba8c9114e80f62a40343bd55bb46e4f6f649effff191836a9e0559d4f4eecc2b173497ad5443846656e2d55d57aabd3c3143fbd0d72434c93ed8f20c43b0a54ae1bb851c62fdbb640eda0266328bc2f63e563061c418f74a119e202fb4b31b5b59cffde822b1e0cf043b8dd8c009386873d842fe21addd910e8f605a3007de6517d0289254ad4d6f0dce9b1f20ebe6256769927fd1002ce14be4bfc727e6bcf567d56b9ce1fe7a2efdd836db936bdaaa4818ecc9d20a78eee4b0b4ce7a6a8e8f861cac57e19915e1d69b9845f0c876079e8651891aede979718a54ba88f1ec788cc14678c83cb9e2f07f02cac11e38b9b7b5f250e3feb42942ff72d501178132a285d809e3d19a9b07ad4a8a5e098921c66521232a887a89dde2128c040b5c331121a76249ab58ce9eed67260d0d4c257ae1beea749559e92f0a789d97460b8cf536c240b09387c810ab44313f04fac574ae4c3a656207e4e87996e7e7677b4bce391ad19c87de9a1b07ab391599464fa9a148070ef21f8023390bb48661fee530a44c2c58222737db5c1907a08c1fb7832b55f8e6df3ff88751b506de0d711e9160b5129c4566cd840f8ca32631a8e2774c0998562203503d28602132409e7282eafa10080277f43f633fa0786e3011ce50f67df7b2e3c6d19a676acccc1410b51ef7393ac17f17a2dde7f27987e81a2d0e983d8f36a0ced6774929394c56da86fcad1db96ec24ad5cb4fce3e421f0c3ed30b498f3c14d6ce8c95ca89ea791420e8d6060ab8066cfbf7d84b7f4c264ceaeb085ae1b1c2260578360585d8b39b3a2addd85d50a70d1308ef24abb44a2f6aa228f1e5cc2edb934e911e89b3603ee3b1b88e70ff5fabfa64909eadc54de82b0b8edb93f62840138ad756e4cdf10d5f38a0830870bf40cf90c3d984cdface6d6b6b5ee75040a8343e1b5ee73560b29befbf746dbfb67101001401a2937c83501b835cf33a07fbf96b3cdf8d2afac962790c9758687f2584056e0d022a147839a6beacb96a6c5f79d1328f9fcd5c6d2e44cf91c4ef60b5acf5e34f32501df8f4f08292a4f387b8d1eeebdc6f1fd60c9774ca257c4faaed2a34cdcf7fd2ce7778c45fbca7e57239fb5a400c66ae4b429768002ed4e66935e01eb4d8c5a971b1a1503db17b2608002c4763cc79cb218a1c4e95dc849712c535817016a986a73d08e9377aba930b76904e406fc7da9466c81d10f8721448acc5359330ca2d92440d2dee653a1c1d63dfad66aa022c1c657bd9aa44b8761580eeea625f92c1541d510ff60871aeadb8e34508d5309ac4a386e68cfcf8fc257d80788fa4f454a7655c4c1f8ddbc28bc6e43a33347af0d89e91e07ddb59d52085d639ce746bfd0bde218a88afefb935c03a2ae6891e5f2fbe41f8160b50b262150b4a56fb1db0aa627111e22854b6b4c2fd9980eb64fe61c9917ba9255a7a258e88b844851089d494f8b62b52a0cfd562133d882c18b22f0af9326a2d0fb96d9fbed83d338fe94628acba82f6f7ef6b81a220b8b77108d61419147972c32a84460456013d9362e51af331226716c6ea1f7b0549123d7e97fbb830e2c65d000a6dc16209e6e12872fefd8481da7a41bc4f8565aa0fb22cc97bb909f35442ed575c14ed4739c8d648af53d7b0d509b9e6dd479c088fa7527a52d1a942d65d15a5979345e059541cf090a6401d19aec7591e43c11157b61a72d9239c7728ea3aae1a79c7ea756bf91b7c3fa038da6446a928a7e1af420c98ad127e64dbf68e2fbd05c8b0beeda811d21029b15035be00b726407f3e2247c8726a02abeed13f1d96a24fe55dc265ba744923dac3a0cf246d78e93ea988285de221c00a94a1033919307fc7262d30ff1b7464627344a2e8cc49acf2e4b0648e3ea4d283220a9c711cf4492feb9128a05ef7c9be90e8aebbb2615115b34d207d1113524f1db8ff1a87f604034e816b0fb14b3fc19746a5e02908e796c0d25d220ea420797fe40b28199fa5504e55bfec03257d3b61c0c20ef65632c22f9602bdb70e81bb214702059328cd5726e44d541cb9ab33a6103fc8b8f90ee61eda02a83020264204578c086e7e9039cc3ea6f0873a687dc3467402d1651dd8e97b6a6faea8e42927a17a258e2fc3a15d1a781b53bf8764f5559c56b2ac2562005f87454b61624053b1d55cf06ac668f9bb351fdb2bb39ead03cb13e8fffa47ab762b34db759ba2eb06e6a8d78603b4b60078e8017e767d07dd7cc6a1d81a04ec28b915c2a72e68bb9c4d118f1bd03adeb6cdceb2627ec3929e47f9c9d7d4c61dce19ea857a87265544ae9ca5a45953cd57c64d53bfaa27ca6fc1ed2b0a0f3ba3f5037135c214f3413526bab73e440b02da9a43220e4e5dc77e54b68d559e2c733b2213588207a32df59342a6a5ce2aab9e5a0c2e3a89299f87462f71eb5cff8cf4bea624e5a4926ba28eba92b13319e211bc39808d7fb0a9a7846cc42ba61fed824b7dcce00f27d200a1711245a12c7f210989bc5dd29705055a1bc8bea9f3f9880aae6d4a22f9f41e0ce3ceae912ce2f5d657a6a0e402c57080334d84f02ed3627d0521bbde60208ecbdd044801e12a0ee0408e19fa18aa7f0aba5aa5a72d808211513706b1c4ecac2378c5d10bddf39c074ac0ce138bab40365539430a661a1657c22118ab7e693da630867a2823aef41242460713b727220fdf36850ece87c9c5d1a007ca2c72622407102b0cbf0baddb65af025d252f482304e0a307fa2199429655000874115d898d23831795fc6a29618ff538d8cb317f5b74a55e45e09400a2b21ff4f11a9d07b1a9fffb4dc38a04618e02f1a0e30570fc8aac769eefe60ca5ce2650067a8449ccfd62f263aba98bcbeb0199d5f28d91a8fea8657b95247a53e41c987136dfb4863b2403eda74c6f38da29d6c307fa93bde5bc22f46e984d7803637c52a479a8881028a104e92f72d71ed6821a5f853860829dd44d6a69100eabde4b53f6570ad68d40c3c996a8286438b596deec834383c00078590a9f69fb72319a5d5ecadcb5b2d825fe04305eba47d0a947a8e321509cb6845a7150d004781a08428d2c03a9d69f76a8b3bd1d7cc3de44c56cd462444021a015a3cde21ea1a357597e309485113b7a98f46f953fdfd12697f8caf0f7eb0021e902e6a2fb8d47a7503456848acd9f9e32405014ccf00e71196b35e76dfbe87c0467dd9f6769bd2725588c561b8ba430ce1957299170f3a460aac5a85de92ea3937799855c7fbae01a4ff633807e7e092dff097f53094d5762f628de4c1167ed7a017da502371fb64c7f0b901bdd666499030feda624b8e3e52d7ba0faa2732a82e08eb86af4cb2bf02f307772067086463850df7f36a2bb588c4efbd07063b290c84fe99101a2132212c51f802d03096f54a26f5af335ea6baf6b96b0a885b86801b6019016c63d88b9c808452a4389673b26bc4c1cff98b2a67eb434d39cb0de44d27d3ae28d797bdffda116468656dfd83f4ef785761a31cd72cad8133242480580815106553c08b4d13aaf0c830bc06c5e760697089e513a28b3640df8532d06f16346918eae8b4c7cda8e20a9d440926976991ddbfcae05920ed0d6760b7b56335ff21e6e848fde405a0707d6021bd026d45cf2741ce0a4f7f3b0c7b103d19e4ca2cf051ab45e7e063ef30eb6c867aec2c47d1f3db56430c6056264c2325a98d94a1093c53e5ab018fdb4234e238210f082276dcd3f88c0f06f5c7ff37861c2ca1b2788980daf24f6b88b1aa291ba654570982084d05fbf80830a89339b17be9d97cc0ac77a4f7f18557ca03e5112d4da26f3b3faaf6a417bf6503a429c387acc30a6b7330376e4a706fc0586fc5826d334a71a6d78d66669c7c9f29d38e1ea438061f2bdea40920c519b167d265c5e9db5cdfdcc35da7888ff8bf47358314cef4bad132fb85592bee06c4e0f079dc75d8bf2afa4e3b5dec40dc645ea0cdc089ef1f133c3818975accac0874fdde1651ae96d558800fc7b6aa1ba978bfd81ac7971fc3ea448f037bc9e6eb50c485c7f6c6e93747ead8b28113a839d7ba5dc6a33d8ca3b3bed0ebd63f7c32b336e6e248ba981dbc3c22d5ba59798e2f08847b4794947af7e47298c1e1dda6cb32f56f415faf9d9788b0d0dcaef5044fdea0ff46bd4e2500a2438d6793bb63d4d7aa540f9b79eedf3322e503f54013a3c8839241e48b296f0accf6be429def0a67fd5e914cf6018f3e3ee169f8df7a952d7e9c04356ad290f1d8bdc32061baa9e16b27aa2f8c8cdf6ac5b77964528c34dc083e12e59a2ce2008d32750fc90708ea666ca0a908741d5d95d9e48123d7f94e33e61b366bdcbb973566d516681e8d154493d5a3a8991bcd343d67eb5e394e323cfb420dc37fadd7746be4b25f18562ee1ce343efb7188164e179948ade5f38f3d9e460da5fbe224377923ebc9df61fd0284222800fce10d5ae0f65166086c45526ca3f629c39a65e44aa3168eb24f3d0b052e25439a694446142ed509381b3ade91c0562e00f562a05120f866961dc595980a0431bba701dac9196dafff28d631784028b4f34570c5466cf42b120cd1493dd5c958daf81e619bf050b63c2984c74fe1f0427029640440a99b2cc21e4660a3a385e29475ac11c48664978aa91ee18f1ce8b738879df5ec8aa27af22858c1bb4437e67f2234c08bb4c531a0d0da61e19284df41972264a94b0f48ec17f5cceb027ad64e8b746fa4b76fe66c658eb3a86ea14a7ca1755acc6049a1f3b0a8c23f92685c281f84c50037c33c03f55c409718c4c63002791821830df605c35ec16726b4a49c8602535ecb1a7c758fb532d4b10a0ae1e034fa186aa8535e7c7aef2b747c3fd81ad4c08c645bb6913e390ec1171606ac034424521c8058c2623bd0cfdd75bb139f3200bd3f2b803aefee820e18e397eab4c5b6f19ea66ffda2a37f353fc16cdf39968a9339102ee8c51086a6801a230e669f134b11e0321a6e1f0c6c0053fca3e36fe62a7d4576a0b8305e468a8bddb501aec6221eef028ecac92e7e95bfb58d1420518be7df3bed4275926e08d18e9b274c9611c5946bd0cd4c5000485ac2ef50e60e8131e067f1eb83728416a7b343d66d7e43b4ecf34d9b0406472650f68aebffce7441b9da67565f34cd8984b1aeb90bf5ee119130e174d33ba017d5a18f42479e6c12bfe7303642d35a21a27b4946464a76921f59d2ff1ccd975a6ddc5a19d71724e7c8392e0f7f39a265e296905d69e50394246d16dca5c25e727ac735e17d74d19c1f0c92ac04787af64a48e0cf876448f53e956521571892589f95564aaaa471a701979067d140ab0414b2ba33ffc6a674ce9c711ab8031bdece8da37747d9a9dfeba894714836ec515c3079a4ffc7b724ad2c21161db092ba108e5aa5e99e21b601ecff7e9e83f7fa91ce26e943a43154582a93bea407969bdff70b74687cf3b4b999fe093863ea93e9c3ebc627eaa36986170f536ccd6c8cccf6d16b6b50299339548055095e423eb1689925a347cad61161c22641bd7dbcff5486b51508fc0838810add923ca47d771225abebac2f60ec41cd6a2a436e6ffee8a3faaa71475e29bcda30679e5f849b9eede9a95d625bcc5a11f70e904276614f2ca6cc55b73fefdd1863f3723cc2932ed05f72da645ed3943404e0b23e71ce5a2e9c24dc37126c9f9669393534abf7ce90dbf1ac7ae05dae1078678ceba171459c6a7e5e17ba099d704346d33c89ef02be7b9442a1bcc81ade35cbe815d116afdc43913341b21568e8d676e13846191dd8ea4b0c6fef476f4c749b22c5a6ddcfc3eb73c19ed33e8d8f17cd92ac6d002c48f21f33acef7fadc8ab3c8fe13d45a8a6f978bdc471d3ea641bdb5d419e1005adec9acb6c300cf90370884d2d6e3f48096b20167cb6561133e501f5bd30a1930f6a0fb9543145c140bd99128aa517cc1f26fca9d1d414a892a4dc86d9350946b807d26ab76951413aaa961850b14ec9b5ecd1feeea4899f1ef4fcde3bb06102f9a4375508297c9c858c7a3a263d5a20ef9117d224a0e8df004d5e982d0f0e09e4d2b5995143004e8ec64dee13824eb6956168a94535155f8f145f5e744428833ac0edc321cbbea43d3d519b29809a9e54e78355314b7ba810519fdce1b15d7004f32ea3e2893a4cb6582baa75b234f64a1c7df5cf11b7eae13b49fdb77793ec97cec4dc28fe525e5452df54dc8dc61e9658e38ff575a49838c21f2d318eec829ada578c5fa42a5826be7139cf1af089ca86b17605cfd6397380d4448873b6421ceaaf6c2878120e7c5a8fa1544b558400d49ccd7d2a191ce89f280c66726bcbc9038099d40642532473002f3b0e912fa89a0c77fc3f628c66d6e1c84c61009d3e0d886a4fc544ef38a631adbf3b625b190a42ff5d0274716e5f624d0ccdb3239a18b3dbc6a387988e75d977a2b460e4f1c2d2c103096b1318714ad8e26934f24f4e85936f4fc20b06adb5de236067b6bb9f1f0d4330eec721f73d01c6375bda08244b9b52228e312c964dd8c172468c3024b8a562b76fb985ab2d0db2e13a4012377260d0a70aeab061d0c7012cfce3180e723e0257adb4e7bed9b8865d219bfd4b0432ff7bad2e47b23a6d84d48c4f9561257610d77a82299b11ccd34c77b653fa0a1d20fa5fd204bc9acc8c794a6c833c736e4e0b526b871a20b389c745b29d88e0fb12cc6495bf14723a8635476f1bfa47afc537d25be41976ff14e75233b12724d0996f7563a08c9f24ecc9613ce9a54171e6d54b04a8af9526fd4274d89cd8c9f503d32473690409eb486e3ae8c17cacce8604a577116f808ac9ee6e2a8a58f2923a932c424bae33131fe49e8dfcfa547d93ad9457130e220d3a2e8eb48eefeb20d87b613c9aa52769a3c3f0b91c0ba99f9c42ff5ac2d7596dbe6e32352a7a1a3bd0e0e46039c0ff9ee4b72a5b4f1aa4f8e9ea1e98b3e40c0261e7d23a6c2dcc51c3e324753f23696f507a2aeaef0d5807520ed168c9f0e4ab79a95c8a8b124e4f02931d7cb163ecdf0c63faec2c28da1cd0d8d5828a8311630a26e9b50fe72f13331daafbf821d0fd252c7d73c2b0d58fc296b524f2adc9339b96dc1bbe75c5130cb2fea6fa26e5e574568c121544a6c1f28c81938935a09f580133c8176a01868c44970e3a0e89db8c9ee5ad6a5a2982cd8b3e8b23fcd784de78ea91c147059aec9c97897c55ea1d673590228ec5ee5affc5fbdbb871b8d05317f5b62e7624ca29497c85fdf062c79245a74f4b6557d1f5b9e412e9afcd53506bf90c1cd52e78ba12f23808a4c993636b5b1a96d250cae8e25b043d00e0cc2f305eb7bcf506fac061e14f64a145ee9408a882a650195e42e0165380676b697762b44b31f5a2c816b7f114ec653b229015fbad43666831edbe4d32ef13bb8050d71651b4a2952a88e55502e879d6d2c77a9b557fe4acfb071e876f251938c34e6be046ea521ef177a69c88509b5ff862742f4c2babcc13ae724168f574824e4cd9c68cc0100c660dcb6a79a8e12fc66a2971e5d5f09307c929eb0a61935745e136b398a0bad31cdfba09785c1085c72ca51e8955a00536c0de75bb0234c977bcc2644e04094f270b3abbd46ac8929b72627820d9aa90b2d8890f3e18a15741a58bd1f0f691cbca5f9c3a54c8bdbb1c9a955ec3cd8f75bd7d7d1bcf8a88828c36d54c1ff0d0959876bb943e58297ce5d786aeaad569ae11c060d317445bc6f72171c1fc38642c47bb4955f377d47233e10900524d5a2fdcb457127f83ac3ecea3944a95798c5ff3ff78eae1f3dd38945fbc755c55a25843fbb11154a92ad2c8d36ff0f0baf48818a6f41ab90ad20aeda23ef43850fcc316104d9ae610f371c55ab5a5a489b8702ed0f6896a11b460122a331bf7e653a9861a5e9f4390ade4a7116dea460ee80ff0d9554750a3a4e035785d52d975583d0be05bf0f1393c75e689cf097d4f2df94b3898a493760a594c6347ee2705033c101d5c7a4e92cde054be932afb3dc86abfcd3f208ddaa59ca87cacd2c5a8682a45501b5870dc9c8b88d6e252e9819e7f94f41b465fff2ccec62af37d80d7dd5dd88113bcc850f5a63393a1c0c0cec2b4e406b71da6082daeb71c0ea515f87bb97f7367869dcd7ed69b2040e7406d3661acccd4fd59643d69079460ef2e1fdfc4f80b883a280acf4ec021c7754d4faeded1357491185f7846ae027d04ab8ae0fa104669b6ea36699b3e864fcc3f44175a4a0fd5a4f36a78dfccd42b06b4609f2b44897ca019d7b688852d8528a64ce37c448840ec4b034cf0334db42fdd0d603830117ff59da5c643a5816c4822c43513b59bb57794d6f78ef4982dc08a71448f4351c7a8c3642d1b17349fd185b1e8cad08a7a8d4c73b44d93f48112886a106f50f1d11c4c452472a94264eae702b6ea82fd8820246586c202839e8e68277608e9f00957b53921f8dc8365fdf677c7706cb91cd852f1714ff6c267cb8b6f740409dfe0e42c54ef2764053dbb582a4438bdf14c469efac12a308b75fbdeb6331bc5a8b712ac91db88770648b7521d37cac20cb431d2246520c18c3ce80e34c33144628ab636891357655e9549bd8b2e43afaab2d2d8939fd24cbefc924625a1ffe17ce0a31a91526bb4f6624a6f4fc3983319b80b66566cbe494c09efa90b5d734bb5b203e7cb5a9abb4b261947e8c26b790d083a8b9324f1e9eb53a1641b956ec021ef053846141a4ff744ea42f3947678fe71a1575ed441f437fad287a2329a93a1848691a02430f3442365806a652d2fea753cd50f7d9657e5d39df6e5b0638bd0fdcac0f8d6d8acac4066ca114dfdf425aab0916565d1194e5f817e196100dde8197e0d8000015b69e832ea74c348456b488da720892ca56e8e17586b2eadf9c8e359bc1ec38c562969ec1434320caf5ddfd5a89c19fb1bca04f646637cfbe9f1193a61f55fc186ace4f517a201d19e4a19cb3a6c7be9a433c6499b39b0b3cce4b4bb01d42bdda3da3c54554274a87839f326b5de748fe75b4d8a00d2349266ce1829cd39de9158214a7caa0fed012c69875ad4986d9e54fc10aa85b6423ae41757a518a58d3c734616b3949d150a349acbe873e69316a96da9473c73ec9074ae93f63722a859b3229b8cc8ed23ee0cf921442dcbe35e496d25407da3a67d82171d871e56327fa0526cadc07b4a002b65b435b57165aaba6d5a1a9283b617fccda346e8ba9a3f16d94527913c4979b0772a87ddec7312d5cbc8fa30f4d12266dfd8e47ab86875f290564f0ec662b5a3353ca2ce2883c375e09319c232acd38e049052d0b4235c2bed28b6bc1132b0dc4422f6196bbb33b804c2df071c7f1b9ee536f453521993cb8cfb2b10a8f91c9ad206f543bd974a2555e9055e0f066fef0fb508e47f6a30b3978c2d626616a1263643c9adb4913c64bd7d6c873a01a2942f853fdc08254700af1597a19ab4dd4a259bb27ff47854f19cadb446874c66c4bfb02f33c37836fba01187baf4f4b0fba42b274c9f21fbf73718ed359a1d762b592f338553513bb5bd9b85595de6f41e6930fdde50855b1eb0beb430932bde671e0fb8ebee4dfa4e1503968e36e3eab379ce3666287c1334497f2bebf37f9178943903705c7466ebcaf6a98ca6005ab7dca2c0d824f13e443371fa3e9bc9b4db381601a1418bee21bd6c2f88849f0d6705c4f6f7743cc9826efb204d4768eb9f0b47b96ee36e2802108c40240cdfe9743539ad8bf8eeeaf696d82587c0a837e39394c7f14a307cb9fd547758221faa36d2bc26f4746b0b7e8e365c428c06b05d1ef404eb5e95a137538a37545c9b55c99eb88f6f333826f4f00563206b440ad8262ee01a589f75117a86469abd54288e78981ca33e9dfd7c40daf178789ba4230a9f321390b05a8e2094f745f8d6883e213a3a3d847ae6eca51b3b466f1f844b485f173d821e9dbd07f506eb1554f146f513a2d3d58ba0b768af1d164748bf0e1dc15ec47a19511c237d82f485f56a9d3c043d9d74daf51aeb8dc2ee8af5dc4ce8cb629be18dbf62020f3ec2b6b918eea3daaa4956f7246c4a5ac0c2af99f183cd92f42bcae90012642da73ca90f4de0c11fa2b46662f4f9be2da4783468646659cf468c0da7270db9313a0065344e29b14ab8d9a1d229506276b398467ff95baf53dfcf3d692ec56fdf5152afc0015652530b46f238d4991567de65003ec40b778fd98f4646f2cae69d77876a29044b36abfc0b1a6a1f9c37f4d0764d80308f9a7cb0df48acdf110db8f80282aaec45d2515ffa367ac0784300b8122f20044e6ba22060f9d36459ce177fcfac0787ca939dd9ad712e4371dd7028e3712401cc857df38270846ec9ae5a80298ec11246f64cba1b4ab3d7119e1526308ae244ee23c3e7bd3ee69d048de83211c80e3b3894ab5c1ac5836a01401d7d0f0274c69a22c80d610f6ac7fff98bf4c2aec5e6623aa00f51669c96af109afdc33202168870bcfce517dd48e6928e827d30e5e8bb4e0d3c1bb5f9595641a99b2b62fc86c02d9d1b427ac3c67f377ce80fd0ed11c0bc25606c14904e2fe0ed0ce8018d42a086841b234c45cc0f0266a77b71a8b25638959d7cccc0f3e9d63d9844a60c3360ffba00ebddeb15201b902dfeb5fa95c02c505a933c6dbe1024726f66fc70cb78a56b99d77111cc18bbf2320402fa74d1076af07047b4833e170321ac9df53d541a82e5daa450038a753e7c583058d6a603f1702e1a94a6d60493d56531dccdb3a06957b2adfb678f114312388cdcba6b9a59de1987710f62f71d0b63de6743d05b7cf932f07932bc0a4ea61482b5bef96a56b668df87352addaa7c6bbbad4929654a29c99307df07af07fd599c01dd9f9db33e24bf78875f2cf28e4faba08fa7a04e6af7b1a2064d1dbb6a6a06b49b385dcf549bbaf57aec8bd2c85e2acb7b6f7fe5c4b6348176ae721e3ef5674fd8096a04752cd5058f46074d5c70c5c794ca354f547620d4da4d9d87a2b476ee82caaf8252282fcc731c39a06f13026464c6b3f427ccb154a27395afe2e62bd56ba97c05e4013140d0ce55f46578f0c477ebe68c2f3752ed2dfe7359a99df75476d86e2f8dbac3bc92c97f333130973da9347dd298c7909674e8c10cda51d00f340a97b6318df562e110c5aaf26b3668200d170cb68aab35a5c502b26283eed6b5cb59efd56a756bf55cadca3fa488bb7cf0159024352e48e1513c06d2a13896d0feac09732ae678e7f5607e87b591ae54a3c905f35e3e92d4abbe0d86487cf845e2c37f0f372350de5604bedc58465a951f490a49ca552e36f4a55eca97783df8678ab9717ce7f5e04da7666707a76998a01d57391e1e638e42dcf0537ad910854de5d7c0d462b03cd69a848841bbf7b2815f95df86087f37ddc4f7a7a47fb061109fe2f805feb5a1dd8b7068f73eb81bfafc02ffcc0eb0f2e0b5339069a65f184058f224c7c6c66627f5de0afabab7a9c9a84308faea63c01d48cb870f287c2a7f0cd98b89e1f9203d2dcd94625a6251c34151a5f2f3a0a41917d669895fe0e714d08e93423b4a9d68a48e7bcbccf1d05853a801144f6c8022899009bc1ee7f133dd1d234f7e3107e317f833d1107487addd1409413b7e31eccdd7835fdcc3a7adbc2227b4f318f33ce669944f7934fc5754a63c1bab1dbf9a255202ed1eeb55f9813c00e64cb13bbd5afd547ed2ee6c93286f1405ed58c5c3a7d6aa98637ec22a768277679b30c72a5ef10bfc2d46d06e778c40bb5ead1ab539dd2bca4ab8c9e6d0c5a91dab769e0c41bb595955dbc4ce45760325babcfbbdf7ef8d2ff0cf14d0dda690ee6228c5b4408176a5520ce7e30918c72386511494f3c1834fafa68b61492e704fd0ae548aa124971a36a59f1e9e90a2f21b995accdec0de7abb777bbb574e39e594b2576e5a0f366cd06e8a6840bbb9391e85ec26884f3974f10b2ff083d2a0ddc6444cd0c7b1d9d84fb7b1d893cabf59f8f4aa3496ce92493568c73fbb3fccf1c65e0fe657a37cb7ee36d6b08d75ca376f4926d06e3e874f946a92fc8c0b3eb3fcef1c73ac8309dafdeb391d2afa6a69926040bb9f43a0dd47e181b9203dbcee7efdefc1071f7caf7900418b96a03af0e091297de2a6f2937440716a6f621cc2071fd498e3b8756b5375e8e1b9c1431c02ed2616463dffd4660fb24dbd19d10e9dabe346ed5667f2a9639d6e71d2a8fc5bc4d4623689929010949f6d6ab73a2698fdc7d281d5f7bc838497109695ca3f8167853f884ff9d794680b19c22ff47b19b47b7b4fc0c08dca3098932545e5d74a313c4850facd38293dbfc01f9750df607ac3c1022e4b0781f2b3ba094bc525272a7f4c1194a038c5ff60b59bb9599b7e2f60a9ee243f9507ae21f00ac22104cb0d7319ef60a9af0a09a3099fde146cb48460c9e1134cffd6de8460c9a9cb35f4d020d605aef1400d174b183a498234110e1f754359e6f22d0a82e35b14a4e54190757d999b877e9ab6863698ecb94a80ebcb672fa6c71ce9b327a20189122b1f9c908414285980917a8fe6e5a789b4bd9842a68e871aea8c54978d64ca41ab302d8f63a35b7b8c2d1b75c27c5cf62ffbe54164f2ce7aa8f31f973d8b20e035f4998cdef3b2d195bd998efbb30f3841414d0a0ac75cfb0746d0d58909e0bf1fe01b4162f2872620b22722b2c17f26dfd6d41db1a9fb1e4867ab41222f157f4062c3dac9c1b949810f36292090a4ba7d7e1e957710b1bb6a140edbdcde57c0f7cd278cdacf7da5f6efb69d51fbd7255a02e5676e82a0d037d99546060219e0f3cbe032f8723f1f75482a92dd0c6441c514cc5ad0fdc7cc6cf2165115a654e8fe4ed9ee963127afee96df3de511e2c7678653b614e0c65db4a4b474778ba65065ef63cbb1dab11555de3af67a888cd03109c3c95ebff75e47812e0b5afadf4ca7bd4691d879a3d10dfa243077b0cfe7d596ca1b0eefbbe7b32e1564efdf4c1772d57dd58fafba4babecebf1ef9dffedb3c4b1a1ef3b89b32117fbc097e04c70227815180443253008180454022a814a9421c333c7d5d4cccc2c919e935216cdc0a4daadc7c4307f493443cbe0a2197cc80d0562061844860aca33685a14cdd00271406344325450fe15c9d021a93cc37c1334da0ad1c8625af0040eb1fab66784d61339ad276e6290e8eef676effd154a0f80eef66e67dabdd116ef39656bbe8f7bdf752f6b3edbdd12890c70c10d4138ea0abbfbbded0e97ea401df6ec612e8c1182017f2023dc54842c80602c4e73f3e0fd90a6998702c2a3028961952404c90932994c1b70e928f99056971044820959ca9da6c752427628646fffd5a8f80b7fbf93af0a4d1d334dd96a548eac1dcba14e1eccb763b121e83e73c316d07db8cffd693efcaf61306e431871f0a619defbac1f6ebb1d6547d8deeddd9ef1ced70dd1c89efb3fdf2afc855033a37d3433e82eec3b08a1d6ff43f7bee359256493d765e62415e88971eb167c29dc7d1b62e1efee6e0d3df01908e9ea56065eab5b395a6439fc3a4d86b65277f06aca5a6b1873bc92a757f2e050e67edd28e984e4f1c07b2cca71254c2811680c96803bb42341264e044e064102544a1797cb8b39f89d8beb8b1d46b185612bfb2451f9178e62a6d1cf0cb0ba40a19d8bcbc5e56265077f9633ca69d4a6e00613ffa5e0234971dd46b1519617c221448c283fa31814b4ebda3e504aac322cba76864c2053ffcc177ffbbc6ef8b46eac9ba04dac8de81d886d7e3016e616860ee31960db88368dfa99995661472885720ee4a8c43f835468bfb6618da56ef758a9fb56f8d4ff824da1fb5cb757f55796c3c6ce12dd6945f64eb04a02193390e20220aea4caa045c0201bc01537a8fc2151107677cf828a1ff0e025860a585270323c87fb1139d5ddddf721a1f25f713de9b902a705761f2c7aacc04100aaff1405713fe3082ba8feee685491450cd53f8a82f8a4231628f1ae04e9571541542baae020083789eda8fe1a1543547f92536146f529aab72841bba839e674d7dcdd9df807bcae6c95a900a1720685eccd740460d549854e79a220d9432a704a77f65ab60e77178642bfef85a0667a50db0aa9d0d1121a35c982a11f2da113141ac1464b68ccb0d0ce85b5f96c69f00edd7e5ab011653975663b7a76bc989b3b60a325d4474ba8ac904a0b2b6801874fb2ce1656251bd4b9449d1d0e1d563c140b730b0a469d9b0e33ea7c9a030a7ad0773a5a2de0e868356ac76bb71c9069aec8c99bbfe3b5a3276bd59d3a5a8f66febe74bd1f38eabeb4f2e4eba15ec2f8e4c3275e1d543cd4e6b3f920a1ced744417647c6aaf03da751f1a19456e44bc25c589b1b3dac6a68cba0f0817428f4d0b4fd3017da5ab0616e3e109edf2227b469e6cb1dd06efba9f3b79fcd0d5885ffb27ae1791db1f74354e1ebc8c2a77df83a7e54b0e113578844cb12b23ed48ed7a3990f5fbabe65e7fd78a910ea68c92e1eaa059c1d63d4f9bc84769b4f9d9f8982403806ed5c58921503c4e6339a23589d3b76bc5c5875b2b06a9a9814d06e14836350f8a1ef58805100fefe0f68378ad5f9239fd0cf1f61e153f63347025c7554616eea6831373fd3d18ab96901a75db2ea7cee660116270bb0a699bf1d0bb03a77bcea04fd9ca04d47ab69e61781763a5a75b68053e7bf99b97d80002c1578269db4a5f5c50a3426ab518b0947643570895a6f1011da81a5767c348a33046806b08c0546cc2572424c8c904c62a02747c4d70c021070091e39a5083a29266ca66c919a41ce9433703855031d9fa20611db248d2659e8143788a0a0140d262d5d89914a31af29e47841162f9f2c1400f5b15e5390a05f1feb65832f280bf5b15e4484904057a88fb545133420b608438c2db888b245145911b68802842d565ba866381e5a7c2125092db88842b6a4abf022e2f7c38f4aa4b1dfac76a6e9226a2d250b9f3ab65e0cc10df803ead9038572ea6b0105ecd18737f9d4930cda3f79b7d93a06d8020a9b943606e7ae1d2be44a89336af77a9ab70a17a1fa3e7b0ff6d0af45c0a0421b23c078474a129a8d1455730c0b2c2c0c311a897b3e65500a99b7bc417b58b091928415df79895852964041890a5c4aab588f13342974a630ebfbeee62fc548b1a9ef85146114c75853ec3c1d30550d4d4184dabd2acd93f45a892654112c0e91c97f33357bdb72ec3ccd23de60e6bfca5f19470ea8f3f86a6406edb83aa70b39f056b3f960ae5d60aea594353e78301785b97ee3bdf3306f2e57cec3f1e0779f524a29a594529aa6d460b8a01dc7cd8eab9dedf3ddca26ff276a297f72fcdb2093ff34c16727f157c4eaceaac85ea3d078551ebabed76361004096412a6baca1513a7d6a54445a833edd96fd1815c8308363f466f7cfa1c46ef20a376d81f4131875233728b035530887eefa56e6bc839f43a9c620303e9c1608e1f1761aeb3c5df39e1bf35f22954831d335b799e1b85feeb4a5db319ee5d20b0db22c09ccccfc4a70865328ce4f127e3aea9ac769a4d168de1b64fd6f26dbe853a8d3da5ae611085a042c541e58a8fee00a1e81ae1ad6342d57edff5e6d198539963c9b5cc16866d36f64598402ffd8c80b6384fc4ed1e119540a74618cd0fbc16d369830091299b0584c82ac562c1693203b3b3f3f4c8244263e3e3f3f9149b75aaf471559f66228186b64c992250ba4c2466422cb1ab423c12c900ab7445c222ec12c568b7cb5dad98935a05de7d48d35d8ca3bbce3e3b3ab5dfdfcb0b63e51905803dacd39374aa142f7b3163885eedc4a1a937c86adbcd0876cffcd74315d69b52f91157ef1293ea945724da13c6283ca2ccc398b39978239a72d16f3432b684759b4c562938cedd05eaf85817d20b93ab7814788c59ac63fe6546827332bccf9abfaf30eed322b357331275f734a1773a0da915c304e422fbf3fe32a6015928bf482f9547f29d215242cbca3434839249da6f16fd314424ef5d75e6e3379a0bd5c8ddad48a6ae897920d3a7a83ae67b185827619abfa67ac46edfb67adf763be7f36e5fd70354aba32168575e6537d8dd6fbc1594a69682f528bd4621aff4ed37a18255d4de33f354a8a31d121288914abfe35fbc7f129ab51d9460a6daced35cddbba12a9c5a7aefea42a7c925698e3ea58aabf483dd5ff3baabddadfd398a4169f96d01d7c0727b5a48b397f516c456a412a28cfebe1df2dca8a55a7aca6f1672c286555872d54ffb95597ae399b9b5ddd1aa442a7b86bb045e1670fbe651fcd7fa9ec797cef813e9aba1c1c648a0f84a911f4bb926a8b8e7445f527b5f8242bc955bd93b5d35ed51f4aa12f6e4ee4ffebe1dd9154a50794e4da48ad118cee77a4568db1d9e12467ead09d92ea571c4fbfd784519f528cb3f1b133557455e27956cba5f289fdd8a81847c5392ad66197abc60757f35ce969a97102fb4e54537dac2f74bec0a92dd41c9f1c1e7ce1535d7c7aac2f6075bfad70c316cbee505657ca700819a3e30156fef75f3b5e6d05fcf9a310283fe1136f221ddae540aa1a733b57c8a1bcaa47b3bf8af1b0ea3ac171e5bcea2eccc9ebb1cf38b45b27759fb71dbc3a793f5e7502df4dbf3a70632ba6adabb33bcbae0ef28040711ad59bb3dfacfed98e5d6eb8dc256fb2d0bf996e078c0afaf28451373fb44c610a539842aa41bfffa2e2d3dc3427fdd91341f8314a19e37c1641e0915141db07e2bf9a854c46de13624086cd0c3b6a4b8b0cea220292f2bb179548b4c19f6f64a7e6d01f80bfd5f46ac8044a82c23615619afd3904c715946bf7a2da22cc0d616ebf08a39c3544abb1a5a5a7ae8be69340b09514031020ccadd6455a5c5c5e5a4ca26fad76f693b9111211c1400e18a0966c6a900aed9657113f02d57951bdac5e785e9c90d94fd3ec673f2dad9696740208bf9a1acae3fd584a326dc561ea64ed5a5a2f3aa8fb2fa64e85e7c28beafd20f27aace62e84544063606e33d1db18b8e103204c8d5001c707c7bfa85e56ef47143ef1a8c6b4e87e4b8b54da2816b4a32d2f4dda15b451a2df2f356af4fbcf27aefbce6a6951a9235fcaaf69d4e8e58a6880912f7a24a9185b5ad248b6468c959a81e50661c4a0f1e10f7c982f687ce82c91c947265f35cdbea8ba179e4e851c4e0dc901ed6a62e093f6d9efbe7516e5dad5d4d48ab4cfe65c50abc5c5a7d762a56e47e1a222156c9a86b68c44b465248aa28a8bb97dda0245b46524da2accb1a4606e69106120f4bec114f117bd6833e25450f8ddab2dadd7d282b942b9aa60c3dcbed48baa692414daf98baae5b7b49f8de67423d057bb1795efeb91c92694da1efb2418687749acba2d124fdd7f51edbfacf65f78f6c555f7e555f70556f7c5a7ee4baceecb4f5d524e5d924e5dd24e5d92aa23ad1af502daba9f5b576ac59656dd777f291c47a0bfbc75f445b503e64816058c04a28091b0248018d99be91cf6840f9460c663297cd4fd75bdea7e5ff131e912e873978d8643caa91db3eee2fcb5d161734913253b4d94285192c40b1d2f947891c48b245e24f1a208f88617395e24f1a2082f8aa8bb53fdb398167d9d4bd66e2c3f4295ac46f1fbcb967445f7972b19c5e3c7f8358dea07c2508a4bc97a42b276d80ad49c5336ac69de472980d018b1c8bdb5ecb5f78070c76eba8f99ee104846d8308310ce198aa0162c733e098a21add43493364dc3b7dcb0a76f1474df67d3341569efa1e69cb25f4de36a19c1285535ca6ea88162cfdf733a7ab159c852c682ca70f9ee72b28c2d307fcfa1f7fcce379f7273549cef4179d3924f4edfa0fbdabacb1fe8fe9482b77b731b1a19eb1a195d72777708dddddddddd2174777787d0b9ddbd8371e6e08442e5be475974bf9ffb7bef69cc65dedbf45941103ea13ec0c571832cf471964ade9a08e49082b28d4d8c5a9a68a14d501c10eee3dc2b0e7723ee2e2e2ffee2aa29a8a88b8e6ec2e525870a0e61136f22cba14385f54745415cd52a1f540e9bc001055c025442193cd9a1d6a050e8a12c953ad340f46b2aaf31ab883142178de6e8b5c86de153e4c7c13741ed4a714037e2dd7a3fe0770d0ecd5557d4ae5ae32a1c1a64c3c5e1ac3073d13a05b405478e866b50174d074756411ad0fd1ac80405e578597468300bed78bc9fbaa2fda9aa56d9d0e50199a01b9a3bb06911d99bd9979aae69ca78a17baa9d9da0410f172c4aaa8fd5232594a52707da0f3d31f0e931024b8f4da602aac219585c89a28b29a6e8224a28085d345183cefa585d28894217484ce1e28dda3d5d71d1c610b88871e133c3f1785fec951f27accfa6e1c3dd69546e18fb87b650a8613cb7e686bd3628fbbe22f368b766c9ddcc86433fa19fd660087dc7f5bdbae3fc0cb4030fb3f2ebe11fea2321d3be1eee737d6ecc4eabf0eb016136711fa3a072c3ef1123f1ce80504aa245165a6821a5092d8a30b58892fd8c1636888d842554a9a204d593ea9fa998f3385aa26acf56aa46c956abba2f4109b49bb559baca88ff22775fb97bd97a01ede4abf57a358dbfbf74ad13100d480526014e9981557f39b965549d29a7ba0cabfacba8649c905955dfdd35c93c61ce65a25497e1915171ed42312ab4cbf10385cae4342a874f0e1f99462309b49bf5b9df7b54b2f83059167a19159f60f59779a2a4facbbc64b0306a8188c944d1a288ea32395254af9dccaa555dc6555da6a7ba4c28ca34e15397c32767a7c90e9fba15583249f89400176a27a3a4ba043ccb110b59b135c6df21d3a2316e397cba1c3ea12d472c8d1c3239a80ea9a08f85c5aa8e72fc54ff6d83ce97dfe5f0a9be53dd1f640a6509fdc82d144b827632aa1558a1d8ce0a2e3ad5fbb502abbe1f3c5a42413480522c237c6c7a28d634ee04ed6454d5bf0bc5aabf8c6a0616454dfab32554abd9f23ed2a82b01a8b6d8b46857825f82a526b5618b4da364aa7b04a3de2eaeaebb500a15da4957296be236bbdb62235d2d36d2552ac11612b1aafd3032c8ba0faaa21d950cba4347b2623c5a42331a40a94ca7697ae453db65c54458c1b5cbbbdba2ddddb7bb6f57db7d2ff46fd7f458342115aaedeebedd7dabed5431375fafaeefa5ea6d9d7c52e7ec97b68db08c602358bf74e0e8c071e1e9d708e6c2e3c293e5b8f06439738ee6afe0ca8e8051e9df875368bf4f4c8b76a32c6714e3937fdc76f0ca3beafb111bb41bc55cac48c11ccb168b39684574befdb94f5dead6f80032a5ee3f40c8048ab00d7cc33e0e7c9a755f8724759f073e65757f6f16a70723675c51e5bbfc280a22675c408567b0e084aa308b0adf0901cea7177c769a9f28c83a1319dc8dbdb12af4e15354c8bd1ef0555706681802df02ef141ffe05de691fc2312a8c91e6d1c08790e35e0fc855e872d73aabe4cbaaf4b9937103550abeb842882adcc791c0b952da6dcdb852190095d98c1fae650666ac68aabba00c20d402542fc38cea53aad3a0f71fcc8deaeffe53a3a452cccff049c48325860fd583a8fe3e6200f20021131832c611d5bf88bf0d1ab88108d5bf037c0a557f1c72d0a155fd79e093a87a1859547f237ce26183841b3ec9e08ca18222f8d4394354ff4db23aab844f6f678c58133e3d2b2a2c523ce1d3eb62c5a4fa6f143e3d2ad51f8b8c33aaff3ac1a7e70ae2ac28449c638493f9960a00a645e5d00f596cce4c5bfc187fb7e84c6a7c8e1f71e8c67f09cdd7f24efcb13fd66efa729bd8d4516842cc09ef343f7e3fe19de4af507a899299473cb49b6ec69c35ff26a5a4524cc841ee60584142078c31886081b18417c0604008e1002f76604738a00b176ca7050ef88245613cc022a769de84b58ee88935cd9ba4524c8f5a5013e2a285044e4b0637ad264256e8a83e566b089a0dcdea63b5a8c8745a5a700d970426d59f474d8f13a2c8fc3ddefef5c0a1168880107f09bcd3e8fd2bf04efdde45f5518fa209a63f9baf7d0df1e36bd906d39fc1f40633447b1a5e4afbecb5ed8811283564db91f8da6b1b4c3f7c24a923f3617a8321a27df645b4cfbe3fdb8c40e9ad48f6f08d845e7b24a9977aa9f92f95ad6877008104b68e9e869782bf4390961f0243b0303b4d30fbf145429ac6bfc57f4d3044b48f5f83063ffb2330fbf3e36b5f43f6723b02b7f9f16b900fff453ba469fc359384a9ccf452a1697aa99712b22dffee4d8fc69f661ea0ba02de6bf96a22d9963dd99be9403955be946ac88e907576a2c906933b2804ea87ef3e4326ea732ea8412f7f1bf4f15f770da08f1b0e4d236158c2f0064324cb1e3ef356047edc8c1c097d7ca8bd9123508e6c308f24f5ccc9d74c5cd3c8cfa4dcd7cff0d81be6a68035ea089422f1437f04be37ea48fc100c7f117ff845421f7f4530bc11f1875f833fdc6a087ddc6c681a99bdf6ab89368c877aef25e5aa51a594d20873f2459a497e66921f92efbb36cc41f9513e3d82763eaa94cfa7ca97cf0d237c92af43a3e2cbc7a151f0e567d1f45236a4e4c31b1ae52fdf864635cc1023508ac007bd915aa47bd0486293026d46faa1039ef6e3fdf0b130ec3300bf7c185e03de695f4ac9bbbdafbaf24139a3242889b97e58e3a3d4429a2625a4dfeb371f08137942ba5f18b5df95daf08130c7ee6601d584682f38c21ffa3685b623fdbbbb903bf4f11d3a74e81e3d241f084308210cad8076313737f3e3df8886841e864c38e8d034d23fe2401f6648c6746d04b38ec07b86d04c7be0a166ff83e1d0bc14076c786a9cf17ae6389a43bbf7b241037ceafc869c6598c47f3eba1f52558f1b0c11f9a0af617e683bc23f1fb41d8152847ffe917ef92fd5ed6a7741fba3dad5f3c1bf878541f515540ffd94fc43a69aa689201390a6f167130e36348dff3409a931c1ad44d0eefd948cac8d0fb9b901bdfc9bd0cfcf8664de834dd3f8833ca73a8e1f28c79c7fdcfe51415337fdecabfa5a400174c9445cd30c7371cad06f687786640f84638c31c6c871a7e3c70f4517ec27d32262cc814f1d4c8d1f77d4f831468718981def87cf9d65a7227b331dc8a6c6cf5cd3007391d55816c2876da3468f3b190e1b9462dc2b53e2b00105bdff9587f2d134b13f42df5ec76df1f8d829c55fa9669cb3d50fc607e31385b6212023f68ac77bc68651e3951a63acc6e845988b0f324d9b1a5f9ae2afc80624e2c7df2a7c72f1a953a1c68fddb352e3c7df169ff8c41ffdbb51fef19f0aef077c904d23d99e5264f2b39614500ec11089cf5f037c987d13cc6e3044f8b3afa1ffb36f93f63032ac3fcc56aeafc2a4d804b39a0926959960521d0881e4af69c86c1af96c7a2d7f6e3730277f44055d29b70f3cd6813f330e1b50f8f137eece10f91935020438ac10d57da8feda98ee1e63e2d7b7807acc909bee9f3bcb6da586f7703b32ff7ddc8e402972e4f900e2c3c7eec0388c6f3044f6df17d9df8c40f1adc8fbb81999ffb6f846deef8624f5dc3f8c3f0f5b61e41789bf0ffaadfe47a0f41fd98f7f040a682b02fffd9108e31b8cdc88ecc72fb21fb722efe11f81db9018044c07b45b9b463d327af0c2811194b8e20b57aa3e8cc3f8bfd4be89364de3c00115d5f784114e6a6f1dbdd97f3086013f5b0187f6001fe6f8d7a3d72ea47f43f8241fbe06f8047af838342a7bd81386608e8db475dccbd6bdcbf6538254c43d2c156edd4ba3c2d0fb834020506bb424654f2b6c529de0f580df75099e014af060601f2a0c411df812e254f83dbc1ef0c9a0fe8f057d568d24f66c227b335ddca9becb711cf7b63806ed1e6c5b37348a01cffffd08d5271ac2358db71a05b79aa6f1e7aac31fd8c643c117fc793ff64b2ba04254fff75e3ed0c02958e10bbe9e6b1a0f6d13b4c92a7447d0f581649848a040fc07b4ffbd1edda461cedf17b44531602d10685ba0cdff86fdb975b3b78f3b730a18515c4f5e7cea56a75dd50a9f168c269c62336ac73d359edfa8e42d5556450bd58c40000000b31400202814108a8562c158248cc44dfb14800d8098467a541acac320876118648c31861040002100000300666868460100c3347648cfbca84956a68942b7181c57f62a2eb95e94b014d346f35ccd43903a651fe4bb154241a99ac4b586486600dbc010a147e17a1ffe10a11e1ce49bfd8fa618bf8c698126d382ff14dd01f45e119487248d215b6c31330442a47cdd463a5468f2939d1cd7ca9c95f3606514639085445c9f62993354b3e00ac9242179914dca9b40f7b0903c0395d386ad5375ba649c269691594296e5aa38804709405a06801d59bbed1970ebe243e3f1b7a0b13e2c8a27a3ccc915e87df4ae3248df4c6300da31d17a7d81d50350b0f1ba25618f7c3206e113de0dae712b3a8c4c538047ced5a7e6d2ad14dd9d6aed84437cb1720d9e152b8178e26fca26e72c29b57b3ecd0d6e06db0444003391f48d197706603a044f951d90147039e156be03736778bd1b8ed02654e958135d5af3d4e547b0bc8bed7a80fe22763ae67902ddb2f0d79ccb02ca969cb8b7311e3365ad6072c1e6d156f0ff16597fa74d3221a3b88a4becfd4f09fd5a0447d752128f5705ff390b201625d875605aca4ac39188d0ebcae2420b41709914875f496534986ccc5fd304a2ec816a04a3bf80fdbdae166824d8fa2fd42d5dc6aec9c099814553d846a8f769da2376145c99622db8205e3349b21e16e8061d293e0eb60932c6528b48363935dff27a701f5b5003295ebeaaa37b31706cf168617a70580d64e0bc4601a4302483f2131997b85133889a8780e468d520f1c8489c52462e4f33baaf6b123875fe31c592ec5a89733d847aa04f202882f0c0d1414b5779a1f4af5ec3838dbb1d76059addf0f3675d9710dde4a6534c14074c4e31792238c5027706df3c6ed8b1156788a289466a31e1c9c03b5c1250c46d2b9939d67658c87cf3ccc388dfc934bd93527e4c0ddcdff1cfc311b8f901c42d9be08c66b2997765b8c22014dc6a07ec892080a78eb1a34fd52f4862258ca7add2aa67154d26e024299ed85068d658bf1944a24a3582972103e448eab718f527a4467d03d5d3028104332f0e12ec217acb9ac160ff46ded99d0096db9f3f38032a52c142581bb8673613d09c5c362a9f2febab56e8569e7adc0b573cfa58b004d69cb97d054115b2ba389d0ef8a06576a16fd5261425ec6bf52841685b02f137d9757bba81a896caaf5529e0a11e70050526fdd543d3f5002c095d8258708f06cdd93e12cbe6d7ca8804517b3cb93d883b0114f00913c94cb7720d7c8e033e0ec0cdf9796603d0201bac3d40f45d0f08c80777ac50f6c55c93470fd0e2e0813580674c8c3f28fb37163aadad458738a7e57c326ede32417ceaf98a593b254858d4553e85e015f8e6063a3a5204c0e4c889230ca8406b40ebe3e2e795d4f2a2d761d50d659c2d0ad3131705041ad3451801efe5dc61c68dd833aeaaae70e7e70598522e4ea94f06e2905f9d9683eea18c40aaf61d889808d94dc3de25f8581241a78a1829f8e3f44aee1c9bcae3127cf16add649e18f03cb93489e046e68722f3706465dc521a67a22aa3a419cb0db7526e9126682b8cd86e99e4b090f638168658c104551a5b4c4f7d2ab83b08474713db1108d90f578d10ac25629d0fd849db56049b3beee4f0a3620d3a761126f968795abc60627360d9b5a0bbdb3b6f696e2a54b1cce61c2c3b0079331a8a187fcf6b739eb47a563a58128c9382e042194abb09e57ca390ea1ec93a86b0d28304348b9240af3179945d5bb5da2675ca30c7bde723de6ace78d4f9e110073a12e55e0437cf6adea9433a077dc8d31de953e9c5cb26b087eacd8e8b214ae10b55230ce94d4009f054bb756015abc5d6994dcd4d851e6335eb77703bd40f66baeeac7e5aa06101268731c0201ce96b473ee0d45002b7427ac52f8a40f9bf02fcd5aa1603517ad677eef21d740b25ded34d216068322019e08003f9cf24d0bdb22e4a35177f16a2a128825c881fac3424e9cb3f02a1d5e371c89561aaca8152ae2b11ad60872ec1c7c348981cf8d8851f908b7dccafa882104a90409175256dfd75c9682258916fa906af0821e5fecba6ea7d177babc72f070287a01fb3e0ab5b76f4c21797b35bc4cfc5bc0bdb7fbf75d49fc85005312566a196df871ecdba9b46b0dd497012b720b8e3c20db268a9ca0b7449b96d4f8b9ae4fc0ff723b829c821b3241a085e1e0d0c230c44f10e4f4d52979aaa30386edaf6f21c3b1579bc7a52e1c3654dd722b82360bc841746f480cd181f473818500eadd2493e2ccb33ff902255c938664f063beb4fa509d6f4337970505d63a1e4fbc5821304de98c1f275634e478dc92608fc95cbea70b093315832cdeae69271b4bd949eca0adf281f598a9217d39a2efba20f96bee9d4ad62b2eed23e408b09537c709484f34f8f20926ecae9081c1d3feef041e34152f8eda6cd65a9e919b73a531dc2a4ae51ebf41cfa53e54dd8e0ea5a154c91b11c791e401ba0449d014abc292eb3481c0a3e8e9a009d61a60ff0e04688846e832a36d64109405822d99f61c4183df5118d2c16735b612aeb54ce615c1c1cdde331eef2cc42a47f49c41863c984505e236cdf1c6fcefe1856c455810c95ccb226f5446848aa8ce7258079fc7bff2dce147b9b3ab2563d8a3757a39ace4f60a5c8efa767cda38b38a71071bd8e4efdbbabbd5665d6d28b8c49f4711f755402aaa23095c7894d4c6e4247e2e4c95995615c2630f84ff5e9f87c05d832aa920bb70d486298991800554c68f7276faafe938eb6131e518405aa95c5ba8d4abdc864e6f8479f12a74bea644ecc984ee601fba997cc7199b2882f5c36a13bc7813a167df65691406f3684b8c17a2f5926de1463c364b362b8eab12f3692ae6cde2e25f83be324b9bb8e6463976ec1b11aaacd122522a7f0706d36dd1df0a8f4938b64bc180a16acb5025494ec9c04de965192abc67a43a946893e028f6c23f9e346443733e531a20cf92a417846815c4f505838a10329e79656cc6d4832ee72ae7ecf11e66ca77fc4c5ec450503223e0f2045ccd28cff4f9b6ef4eb9b0d7f611c7c86533bb52407190ac5ed22563edb7f51191689d3011d5838c132f80b0459132546b3c0e968166f084025f9c634872ac79e9ebe953b01b138a2e14fd9ba19d38e33ead3f829558a439392f55efe810f689d68c47ae37739144da6497f0dd32932bd85326986fede31c2e39ea54a6e87b11683f2b8bbfd840a110acdbe1b71f882ff6502a78500dab83f6cbbe9dfa8b9f6e278f6c8c4dac919397628246688802daab5ac99137df1084c88f19fde1e2f3fc2ba8821e32138ca85caed2408bd9748df22636435c7d73da016397a2356cd76568dcf05a632dd59b90b7a05c2cb01acfc4b117e431b29d92b1310d73f95dc33855594ddefdf7cf83f9fea85e1b33b8c0c1300a1fe9bb4767f355219b512dd25fb3f2ff101511c32c738807dcd1ef2e456fb140e4a1c8e142867123f5eb3715519f3fcffde265273da1ab1c9a1adfb9f40b750b8ffac55dfd070a0b08becdb68459291a656ba27a11372c0455d1d43ddf3a3e1e951eb63684ecea1c67c422e9a93371e3c3cd9e179ae1bf00a5f120a470a608cfc56fa9e4e5d7fafbaea5bf40f1671507ec2699d8cfc4618cca658c8a6cbdc8b024ce33486a32cd3e853c9fd9f4124bf9375f0edb5fb642d64c82f10ec7e5fbf29bb60e95985bf1b6a74db73b752fa86b2c761cfd724962379c094c65dec5a2b49db65a77bdd6fdfad685c6daf147f7804384e39f5f1bbb0a7261c348d8708f1e00c3c124bfada955777a2282199a3a81738612ad08235cb94c892ab97fcd2a4355157189ec5617e2437012fcc3427ae84b18940c20f4fb470a4f74e57fa4417523a53b868fee8d83a02bfd714da4b8bfa2f04127dac239aec126113ed5dcf15b9f70ace70ff5bb0b6b3a8f530032a893568b1e47c8dcdb84c56cd0bd352b32390e4f7f538b40fe07a531da0f732309a0d4f9514506eb300d79fb44a7027b744082c0380e9b16c41204bc8ab4c95800a064be9d8514cc7398bbde43ef068457228c164a40fb058d5c8e10c7788ab1a3a9696ed475cf1b8c3e1f880293a6262b49a4e020c2c1dd0e21776d95ccabe37adb7a5c0182e930e7c688e7ce488ce5ef767e9baef3ce7bdde5b003f21863d007f85cdc985f1e52bfc7ab806243638eba6f45be1b3f00ba0d495498f728d0d35ad838d4224dcd58174464d4e972a71491e49e4f66fb737d31d2c38d2f474cec58a0773cb9ff1b163f2b48b882dca61d603d218114f37d7f6cf07005be9ab21fe4420d8e81f5a9f71be2ac6f842635a2900d4a54fa3daea46ad95657f073dffec1c3323be0dcc0358d115d9680e6ae3aba49dd9f08d1c5118c3897e65c320d552fcd49fa1e236da009e09bb6a2a751d6f3a885d546b8948b4cb1b3ca8b30e484098a8441e7d5961cfbc86bc9eb59d710b155dba9d19c049208593864fb60b08aa2abbf5dd4374f348cecc96e757fd524f2369ec6e043f2f44311fe580e761e6ac5f707139be0ce4888b0a54c7547ce2827cc21d4ca3787a10d6b99d6df87d094415cc628b1d528f9f2cd381ea699b62ac857d886712d0061dc1a193919927163f629d795d7cca009e153e934d5ff1109c19c0cb863c91eae5f136cdb0aa4f2ba09ddce2fccf83a2c31ece3c3b785d90d2c6c5dabc4d8a627a3cea0db88511910ce8bddb00144215f21909c7bcb1ea7117d20989a9e079662ff1f6393b373bfac905e026752592a70384dc232ef1a96cfd6721fb495107b9ec27e5e5f796d90fb147cf43eee79419c861d4980fa7d4364d72a1926009f564932caabdefc05f7fa80e30e5b4ceec2b3b905a3f2d1f8145f26322e97d62ed775e4b84fec06a91450b038ecdb08c4933d1a4c58c141c86b3c5a5971bdecbe3489099706eb387a2857f623f649ef3c50dc7b14ab27b80b140828204a664294f105ff03738599352b5278cd94ae64aa2ff93e30ae7c9d0baf9e405e5bc07d75644e3c668044da68b1e481d42135b4999dedb0b5891181cb5069fbf0cd09d4d730a7b97e00ed497a953f464dde138ca3be351239fa520312e76dbfc358e0b6d9baaf90cbe34b74b72757b4d4d3db5e270e3e85a22135d581de36ee958a59f6b17101f97b96855a3a9e571f151464d7e6a6aefef13ec2bbfc3aa1c5a5f4545faf821743909cac071e0331401b547223ddcd691ca525489015ceb771c6050532c8563293180c37ceca4ba85767ea953c36488eadbecab224bcab625716dc6bc146aff9958a008a2f8a5880b93962d810b52949513844644c975b1d8a803638a602dbb1f7e1c8a0cd10cf531c0a8cc259c84a1d4cc9e2a102dbd62bfd9678aab19525c865cea59ae1cc37fccd29c9496a8f0a90437a1e409392d39e6a85cb0af9ea83a18267b56e03421eb1177bb8e2782c85b984765d15d0460bbf5a13a0d4e29dc4d68e9f83375a5a32634a96f5f60c56bd5858e36729990c32ff6c0adb6d521079612e691d20753466ced2ae54fd4f7329abefe6d733d229ecee13b84f3e896c23139e85d979009aa6504c851a8541b8abb2a58786346690788ee3b9cb0ff6d113aa46c11af09c3d8e00625a5fc412f21b97f666ca94c62a487a17aa2d79ce30582a5047f570e6e11ddc32158c5f4f50065353954745e4da6514993e1db386e4de2835429505654226364063f678dcd07d7af9a51fed712c9363dd46d30e06de85891d00bf80237f2f24cc9c9ef953afe1801abc29b81cd9fa120fa523b0a428a431e120a009cd2396a8f51d27859fb8133eda9e7ad3009d218cc4534ef572a5f847a5a15425cb5ca75c5baf2dbe77acd2a27d219e78fa511250dbb3667c1f88a2c8b0268eedc8852eff81073120937f927d4891753976562e637f54468fc1e970c298306c82076132a483ccc52579baec74654023b9e67b5303256d370903d3dbaafa4da730025ef02319ec7a7c8941ea46f5bc2a7cd1c4b23309d57602ca4ca76574ed4c1be24cee866cebe3d1c75c9553ab626c27b69b470a14b13d76ea9b41e5d71362e38a76245825c8daec4aa99eb9c2aa775e4b62628b7b85dfed6a5ae2353ad7976ca92d527370318109e422885e4944dd733a88878f0b59ee93141a278db5dc5720082b0c700d523de939df77c92d10e417d1908e53f77fe796e2c58870633981fdf00921d54ea7ae7ee5c844a0627892fa97139eda8e8ec01d1c2e76fd26bb1171c5526c18d1b0e76e3d8c2cabb4a833abc778b5275ab69280ab98c9b34fab4043ba32bc46fa9407ebdb07cdf30ee46a28cbfe79a18ba423f1b4160081f5bac19083b7f4f049220fbba0e07fd92c08ce2a4ea0383d5ae777f01e06296842ff5d3aaa99a9e9d50c447eda659f8e345504cedfcb19b9832bfd9d625d760aca424b3557e437832810ad154e994e0cb53de12018091ebeb0b6cdb0b7b56e647655a856abc217e2629e018c0356bbb6fde42f5078a29d15b40b364bb63679ed6a2bd28408b2926983950ff818cb7f2dacb2cfcbbeb41dbbd6a18351bc2f317f477fc504fdd3694d02ec046b9b01f0ab11c32caae09b7ebe86e0370e29b20bdf3891c770b41a8f27daaaf5a7baceb96e50b41a991a829308908bce34e13c1bcdd297bbe0eb296f723bb89b6b4c4d91c2d6577406a2f69710586cdd872d00ead962756bf9e9c98f3da20151e01bd69748cd93f433e0467de484a6695ee823a5b13348825d524f876e9d3d7df07005e71988cc6e8a2bfe0d4d75d6d095539bd9f77e034381ed23825a74ab06a43bc47d68a45574cc61ea78c442972e27df0fd487c49b2a70ea41fc12cab5cbd2e1c0b0365bd588a168ddc2b271637e0dc08443c45c0613beddda16514ee2ab7606b1550101b51c99695d50b7d308aff9730e53171bf6ff1177883fa95c82ee78858aca58b861746dbb6d4c6664098094bdbf551d9e0f99f191a38259fb334685370b960c363907bb31ad29810da5933e2cdb32bf9e0bc33d1488aac27976913c379683f0af67fe08e1ee6dfa5ca19f8a17d6f98c6f64cef4cb22f43da6fb1270aa0a47104b7de0b830b1cdae7b905d2177f1f8995ee08a31cc91e892636b1894f646aeb04c8c5bc22938ca9dfc8a8476d92ca8a5dc01e8629cd1363d09919c2379088b71fca423b5ef80affd2cd62a97d146908a61fa50cfa7a2610fd0e8b9eb09049b563dd67bd1db8dae5a408566684b599ca7b7ce0c2638b768781398b081f12b7bee4876eac0a3cfb1c99586853483f2a40cea6fb529bc4aeea940ecbb999cee266d8f91f333d0e200043d0f53a550f22c4f348ce6e71a0f8e6380b449e17fc992f15c8075cfca20343b3d548792cd1614070ab80124d86e997f642eab74c4a04c13df891df94e4f022bcfe01440667049618a8ff6a30567b507ed9696b4458b63d193e931e6c4123cbc92ca294081824be4a0b82a35026e3220bbf0206164cca159901d9e0d232186980b9fe5b591c114aeb14184245e53db6d9441e906e1d780f11e8770075f43ccd144a85f6854ae7c59891f380606979a46d33db82f11667faa9af03fb961f7371a8af2d8713fd2674f7782f0d85f65c68f790da71e57c1f87d9910a12cf2867bbc2fa07d32d33b797cd3b064dd1421ded94a70612e960d7726d177d2557333045020878cc0116acc46bb4fc639a71bacbefcb12d9cf17689cb10c17de401fb986f28bcab9b3b4dc22b78a4b88e895b9bbfa598a10d6a293981a01aac351d034519e2b6523b1ab5e2d85845a0ad9a678907148d57ce05607946d7cadefac18403d09f6717c1220402d1408a11d9beba25e144a81d326b6a82bc836a415dbfb0a04b1fac82bfb49fe4640c7107661308770cd4672fd03cf5fad0d0368a577b120672fad8a62518a3053234834660ac9eebe7f103b4de716966b8fc6aec6a9241531e9872cff00788e968d0f58728be599cbb41fa75b732216de60b67482d98b90c3769e5250e6adcfd7d7f0de30955b62cbbbf816a7dddfcfc15b58d0524a4870587584df40d1ed544b6f931c587dea58006c470fff663297f69886aa5733ce42e7d28743dcd54cb6057a096cce8ee170906dfb9184b074d354193a38af99196a72336794086e7b488cbcf936ce0fbfda594bf342082ce5dfbf4b69cd1b7cbcf39fe8400a3e90eee560da8c12e047c3746081a1b0df3ed5b8b44029f0af18b0501fbfa123292fe6c1df27441284afeb412c0a850f01c5973b0c92268aad796ff7cddcd0fabcacf3039c351e613d177731388b83d019c256451552d63c2afe7640c4eae99b4fe570b5cb6d0ead568d90629644e5e77fe681304f0e0e7a13208c2bd6614343c2c17dd2202764111b4ab80ac3778d18808c35fa1fa55be915a7cb8f5917fd22b8ebd3dc0c6dd17886533b9e0d2ad001ae8a905aaf3be459179ece894427b2610879798e06c768e7e0ba3155f05570882c22fe724eb67d3a3a4560cb7a8e36c1afbd1bbe6683c215f355abe1a6522929f6635cb4588023fbb83d6584ebdb4a09dd0ec3218069ee04429b8b296b6bbc4533e447d4cdc7023999f9f7bb3841d9b2f43836a36094a5fcb6af692b0a6fcf6f75ee05412b5408dedd67b89916f55dafc07191905ed985ee2116d7d20a271f28e904a7d58117d0f5b5a16f7331087877f270e9f77e7a7ad0297a38eacd42558897dae9a45818c1c4c1cb9f924ea19a182861e2ccc74b7149d22645e4fe1895bc9fdc7d2f5fca3ebbb8ebc9b6deef7c578fa0d6a6aa21b6aa4b3f9c70896a90d4143e62b3237359b6bac3f2e085586768a360c492510ff3f02e2336174fa51caee98a501db997d51251c35b07869162b4b8e504107196d4ed9d57217f8b901458b7676c9ccade31d99241a8c4869f71b1ed46e8200f0c861f212374c731c6c2a0bdcae2f43a65c53b0ba49e3c6ee80d6b72b2992838b28c0e5f9afe3e70b34fae039ceaf046e380e1c7311a62f43e3dd4438359d0e5a2341b17bfb3bbacc12488eae55ec91688602941180991db17a973512bd1e74cdc4222f754ad5d5daaa489013ee1e5b3090434b9ba3b6fbc9e83dc102e5e38ab05fcf281998bc81c23fb8050c745cfea77addef6537bf5750114210208025435040bff4e7f9863d7869cf598a07f4ada9d32eef59264509fb2e263a3982e2733952b8faada522dc3b9e29de2f85db07ca103544b35a95b4e815ebcb140f19a53a8bb5fe14cb9c22b62e18a4ff3ed332de9b4850d08aae2556bb39239009802eccddea4b62bc55c7181276232949cb0184aafa54530c588346ce74def3f401e2b737a9e6595fc89cce572a21201442391a08c4859f4e6865a2f281de16e2edaf823c34352e353a01e214099014430047183bd96f435d271cdf96d1b7564daa65302f67de985411da189671294427ccbd510f9ea2123927831ad468aa823b2bde0fbb22c06313de45b15c229131b1a10da80a5f1347c5b10fed5fb9ea06faa767248ab6dd4bd7e1db384bfa9e6e9f54f19f3ae6af65108fa53a362044498b0c996fde5c8c357114ef71ef34ca81bbf09d683ab53ec03b952a5599335b76d945e0e173637fdceefcf22c22c9ffda4aa1df0d75d4f89920118c430aaf812006b64323e8713d8594adb872691229bb0c509ad810a7f5e19b2f15725491c76e6d607f851b1fa3ac79744d8f83905441ccddfaf50fa229595f9ec326e2491f897607c9e3b97d228112218176fc882f4e9f5ab6d3cdeb70a4c1d55586c0d544b048732b70c5cc02c1413764f775d54abae534f02412915254275c68161459d45a2a871c40da69aa712ab887ea28541efdc597efb2dfda391cdaf86be9cfe5a2ff4dcd34083a8011742c4df3acd2d3b85bb7839d3dd30531559594556243c5a20f2674ab8cb69012b0d2ce3d283e81f0146dde4edc4a51d55019a22c9fabbd61ebb21ac197d026ffc3211a9a5a13cca54515999fc2e2cb32680e6b62fd7e11e0f07d54f260857d71610d3dae91ccdd8ee0365c05427df115c1457b5892c665664d8c4f292eff25b0c39030d212d1fcb58774a7be4331ee81efa742b9f3b6bb11f4c12e7872ccf350e04764184a4cad6deaecd1bf346300e5aa20eef95edcde5127058d2d2c847eb7aeed489de3a406f448dafb701732abb5a26ee5b32775cad9a8bd142fa3e9fe6afe2e8da07fad9ca6f4df18f70ba9c1fbeffe2b7612c54e9f2884b57a375e695a641bbee48a1640d7874cdff8c1815f9bb8d9590ebbc162743ad27662b8f5d4cfe0d03ee636403b4ae3a7918e24a49c7386cf40c20c513eaea2176ca78848228b3a48529a09c80b06cbab8bd200e1b23b2caf17c4bcdee21d49618ba18b4649d3702832dcf057e60cbdb83505963ee8655f321247a78de9b58a2a237e6551beb60b9c6461a937554cc7087e87b23c7f3cfc09f108156a671bf2a081994864b1b0ff8519c14a0cf2f3e3a35cb0d5453a73a189acb0475d3d8f063cb15ac5f5efbbb85159c6ec930b63e7b5d768e366ea676107f35999fbd3a5e2e080eefb0a07a5b9c86e759696b8ef83c732bfd0396e899328a28a1f1baa717375b7d0337f519608f0b1050880cd5132e8c95e856dbfd2134997196202244da1368e9e8593933d6403c1fe47d744e2e6305c83651c0f6f1a750e16a3f1f7b2405c26ad7dfbcd3a5051343c7b8be40f790c80255f11b7a10702c527720bbb25c925574eee8237f15082da074ec6c334ab655b619034dc7170b7c6da0a18599c50aae1ac7bb628c7921d315b2ccced41525ee73df50ab44e592cb2d3bbb6b6c7abc353849c6ab8960cd6ec489527efd9a0ad31c122e26d53ce01b9300cf8544ee1c78e1803e6d2ad824e8539c9f94b5970a7dc8c831a3e508232d9ffe3b99752c93cb27dedb734e8985ec14c6b4c82512560b470c2389c0a70f9ad0ada819e9bdbe8a3d64d58bde48bce7c00ba14021cf1552926aa08d081d886b911e712aa3de7d2d06aec8b7feaba0c72c523d8fe2bd407db16cbcc99cb907c5d680b480243a7948ab51cfb647db9edf8a3b3ce4b4d98f4f94bfd3999b63f76fe7b57958cf364a6b05c4e6b159cd2e2955e105218e014825449316fca606d446d6688fc1758ae118cceb3e69090da9f8690406064de13190d9487dce2c940c3eaf1af2122d08c48204b366256df2868659143f8c0a7c966b81ad3eb5508a95037860f75a18da4719cadc10366fd149093c30de56f57ef7f1766b4b88651603749431a0f57512eb3be4764c29cd5d68d93075edc1ff4b6555312850f96046daa0bf7504f3e83d3ba774af9923e2cdef39cc07180efdbc978f5f44db90542f48bf29b10c20efb3f73cef39eab749eeb6f5ada478cff849cdf8a928f4060f1b98c0c3c6026070739de26bef2dadbba2ab9e22218cbf86c354f799356fe683b32a0f861bd62e743dadbec9596eaed557bd56c079b5625824c51a4c4dee65c3a3d035ceb746708cbe5d3b044926819fe848eecaa07b91045a69aaa0aff6a473f5eb2308afbeffb99b9eb816fadfd2f83d98392260e6d688db3a35c372f3aa7cd91cc80796e64372f7a0731e248b2e88d268789ac01e757e37005a3c979e4ed066a6b1006ed46883238f7024e95d4a28762d1db023c85d546dde688317d0f213f7b2e4cb57563b11305bb765dfa1864819b4487345f31ce2ce0ec5457079db6b0294558c9a5bf3b589565bf01dfc7896d02d73f4d21b3f0bb449cd6a81dac674d07a4097e6208f1ce9a3f33cad3524cd9b1a7a83ae99d8c026b9699a78abb01200d4dd4749b310e8179bb8b470cb84b9b0cf10b0c360d61cd1c8f00ed7421488dbe558491f9598fcd87783c2794b501a40eee09c1d68b18cf391e757db603148f8f6c08098eddbdad8047f71d981c5f047ae4591e1036a56d2c3e05b31963eaa85fa7cfe83527ffbdfd3127496d28795b12861c4c34e0430a7243485e24a53c916100ad0542f8fd4e911a72ae166102c40d9cd27891f14406edc88e300619d10948fcf005cb1807864ac5b0f7f428835558b7634fd1ebcd677632176eb059232c07ddf12c03c969c34880f60f7dfdac395ec1165045803ec697901a41092c85f83888d43921dd847036eb14e1b05d756310630504a039abcfa6aa816a38541fb91da7da5b5414f575b4e70873d8eed13b6f316deae1e6463c0aea19e55121d15b15fd4088bb239fca9ccab15d834e847faaabe20bdea6a57a8e4212b2bb5613d6f329ea0702e443cdb6261c3cba1940358f6bd50b5ff264f89c050ab0e078803362211ab8292cae84595c4c60241ca916ec2a490b4b51d99194b7b0e635f074fe9863e759e45760cd462ec9806b66cd3872e3c282d76208f13f463c32a92ef39588a844b2b33da6973e80a098905e98a7083cd4c60e16e7e9c8d9c5451f70fe80de7ace633914a1a8276d3333236ef5e48582197589fcc40ac1513a801cebe1c2f79e6329830d5c53d8372ce8b08db2c8fc038fcce6f250f66a654c1e063d40b00850a75fb1a26419d108b807c929599377de14bd26c4f2e90f5602a6e1a2a58cc438c465a6f04cdbe4f8ba9a58e373387d850d17683f1a455ae0c91befc59d3953c242061ae86642247dbd4d9f05324db279bceec1911be818b95014de3658c6df0f24e2aef1cf98704941d092c6c852c653edae891d420e45c3a167cbeee26835af4320b83521256f9042ffe1f7eaa011aff88ca064f5754c8c315b87163065e0f436acf4a781574f4385ccc4071d5d4d62ce4938aa3b118ec0b22f05a5aa52160fd0014f26526cde41119e87ed912c5cea1c5d23e9d3d8b78001c29f0bd9ba8873bf75c5094e88478c4fdfde61481afb84f0088b5372c4c4ba23ced509b65b4e7a5f0c95f4e389fbd931d0d9773d293f76817db061f7317bc6f1408832f28a23bb5709d7881c62298f799452f64b44718b7835da601d70dd2a8bec11a99192ed62d5eb9f595fe365b07585d6dd93e2329ff3f7df1b13d61ac3abbb40ac97dd556fb0d208628fb178b0c1c039b42c2416333e9f165a4c994c47fcb13646a7821f46972e97b4927f9efb6174b6676dcc77dbdd9e58a32ebea56c7e1f42249d8e1769207dbb6d5a9922d3dac39cc9303980697c18d217caf02e497c05e8d908c88bb1b54ae1ccf389e55071073db89f3a30983c8015530db6e96b841bd2bdf4057570d743554bf9144091d91416219a866bde805b22d81f2d340c721e65481766ee4849ff4130555c2c2cd3ac976e6622319632d5edf0ea53f213a2593320b09d031fd6d65bdaad8224d4d027d559d4d35aea42336872bf77f692c07d3a8082f42a429b2c910850e297ca018354d465b2cf40e9cda65fe5f9a4de2f4929b109fecbd26bb99b795756ddbd7c0c9c67e0b6ee46dd114089110e8ee6e812560acd538ac1e758907cb1e9f284476a910b44bc84b4a3bd63137ac5fd5691e9010d0d1e2c0d5922d085a5014ec0ee63318188c4a0ed6e034acf4e373f657fba8b49d2186f55b96ac0ceb54d855ad83f7908ce28f18a6cf606de9d47e3ee5e1c66b2e605689bad2271cd5b80b7c6f8afe76585e71221292e48170f4f3ac5006746eec2dd48c89275ab116003f01718039c42e00e416d3ee718edf20fcb64d11d01f386e057e653651acd293ea26c554e388092341ca8d237be1367464bb864012b469d8393a749429223a156bb9790a8411ef26532aeb561f7208ec9a34c667b739462b19779f3d5ab11d6cdf1230f82c19a42714b2320b8b342bed9bebcab0408336b62d4d8917c42b7f63825e4169b4636b7694216af9c95345874d6584732aabfb299a8f3ea7fa430d922705a92ca0ba68ad1cb13d9c43bdad217d4d5d75aa9a4df71d7c93d0e6522bdf83461efaac07787cbe642acfa5c017062a9ad3ed1940e977a0cd527f73d5f0cc396e35e98b68052d9b13c7881aaca393060c16ea2b3294c012043ee21220225a470605cb3a9b1c0746414461464b4f05c1f24f8404bbd740bd803b49648269f3a8295e7a5cee6736e7c00abe91277165d2a32043fb2e251a90ea7a1dea66416bf4dc13a5bb02bfb692a323fc45cd1f63c63d69634090b7de9f20f14ce006632701cd617772746c02a28b13dc67d2118a8d4a1a2df45b3c607451b34710df35fa083a17afff7dc214c3399517cd0def223aa42ee1e5a7f60bc0d947fd70e9de6354529f2fdd460664cd2208ce2c5f52a92be515049ed6d65d93ae3119356b7fef9860661bbc1942e9decde3b5e6df168089812962c20c37ad946254437ca725600ccdd123e607141552e6e60f6c3f5786b6d032459599012ef98ed2106ca8143a7a1f27e49741df8c0323d5c9c89865f593a313a2a3ca0c61ae647a0815cd94faf52981b446039d42df8640b681d281bb707fc708564201a3ede254dc9752309505752106e4ee3eb9d409b916c241070879c29ed518a4f229a54344bbe50d9c1b1f8b85de87cd6876f504dd997ba8df68d293bb7a5804e1ab18ce333689420f204191c56054581061ac08e6105c33fe854eafb813681110fd324b83ac9b0ff52e7be540ae1ecc5c2f30bee23119b8ea0dbbc4a30576167688fb1b7a9b4bad09579861c6aa94845db0665a3e24c15e2c2b90a158ce37a44ec289bd0b6e9818e14331c088156b26a5964440605928de5f000dc8a17b8317fbfb6fe1f174d48707fbcdde69736a142697f2cc635ba26b918b6558711132473915c8f14fb42123d321145ee45610b91c69a24b929d42cfaef863109d9c1b1c23ec3c23cfd6015f04978441e61655e8f989e20c9e9b0a208a625317693db83e7734337c0c7db039f5979d4b950628f8185a560e03941c24b9247462b3d1438f909e863a8d0785d407dacfb4b410e2affc8a89d2b4288403cb43e7880a4411a1620565644a31a078e65f8e9c02c55212f42561c6b37c8588fabaa8ab8088af43c4db1e8a14c53441b91307d4a63c7c6e0b5604f351dc484f149bb3963298f864c460eb8ea206a5238f568b76ee695fab0497a2d7577edc06b83c9b9148d91c05bec413f06e37f366e4255095cb4be0be481e16c10dd14e286682c7dfc753a464d0ef3e34b32685ea73d3d6d6cb003559e5ae48e82ac3dc189ae11382b9e1bb5dba492399dc969720dc7c0ae6a606d14d8a344659ba2149dbdb36ae4d0ebdcd3d40ff8e708366956b91469216fc3b3b5d63ab46299c40b8b9c3feb2dc7b1617bb151e7ceca713adcbe4a160e61e07b54c8c90737a716fc689605892181db872091d4b2a990a9ce1bb1dabd62201a60d09054627afdf219cc11ff7177fedbe33ccb5f8eff2a175b222f0c68993866da20e281f0a6df9c5af00b5701ca70a2d1246092c38872e26139d14a927960c0525a7e3c8afe922da6dd2099b1e1650f652be0739d731f817e2fb11446b16fda64fdaf499821f65d89738d0acf7f842de937ffbc747c51bfdc7056b5842b84ce44e9e484f0d77a3e0c6bc057cc922dd559b081008104bcecf35c1748d67b0715386ce20d4ce3fe67dca21bd42f30d670f67d11e440f5d36a15236e19770690c9d803a004ee479b0d582e46c621ea4b3ac623c4e6f6ae8bdb2b165dd7efd15582a8969d72b9cd3279bede2933c15c15a0132ec74aaa808fa50bf9c6250e82c0b4e7950a68d43f6bfaf1b4b324c56440244302d72855a0d93a4353030600d7db8908a0372094bd9b6f3633242bd0dc328c3e4f4fd500fa71f0eb0dad5d3c59e324c8627706e5597b34781052a859947b27f26fd37a45b1413696e9533e052fdf4cb26413d331217fb0805eec3e6bda1c821c4f45a971551c706dd16c95dfd3567d2f54b93e80b65250c64e9dd3705df1ba12a99db602adca09f5174258141b5816d4644ebd051e38be4646b4200e83d44271ae9d6350da74c9220e4ff8d3b256395abf5eea9c670ec16a562b0248294bf53dabbeb0b77b241d66c6381f01aec6d2b79ff4f24fff0eedb632f5a468b5dbdaa5846cac4645dc9f3f28a93c00bfee92dee1572f1ef35810f6741039ffd70d4204399f235a137255d120793f2a9bc2cfcd60b87178a83b37dad43e2dd0b72f9da0995c40b272861608f7c8cf6a0201219c5b478c40e2f4a1485f5d879954a27d19f2f4ee1f9a1d77d444752dd2b0de44978fb119bb33b128a843f5a5c3066bd92aad52c4e39c51d0f2fcc0824fb1ff104a60917702e2d35e0706461855d855f45afd854851e938cd0d73d68242d05985972b988041073df76337422dffdd11f28c2071331beac38991b52236513093254d8c551a8b656443f8df90638444cfe9861e6c852c35476e31ca74061e60e0b58e18ab06240eeffa2add0ef775d5090bdf8ddbbb18184585e992d549e3ccc259471daf62ac9b16aaf64fe44474b94f699fc14f19ace9b6007352eb85b87e711e94a8c8f767f18959f82bc58e49d8a2cf46f54dfe52016ec45bdc2e61d3c7a41ed790c7cbe215f80f89c328194f7d4c74eda572d763fb12dd9599686c8c06c4e575fd7c7cd795c7efefae9d8c33dd28b2491b4ab8fcf3165ac16c959356c8acf523653863fb95125fb869f79656281115f15a8c120c7b077f47fb1a27a434bbcee80ea407c0cd2449f4778c3afd83d9645aa51f31272c1e8f73bbd6997df1cee4bc6141e7636c475be3e06b42d50e7041544716fc79748818d82d8e42c06723829a3e3e7d4951a8af08842f44a264487b87b9e0f8fac4393798f18f164f2fc647b71bb722387956d488e857332e9cdd64825be290da4100bec4e6f6cd09f0d0d1c741cd2c9b44abf89ffc11316a65c1932cc41f1e975222958b7a588848670dab15ce96494d1a27677fb499701b937f516061404cd43a8b7bf54998cc2e39d4312d9615e524dd01e863b911b534f5135de3677ceaa8a56ba722a9316c1a0dc445ee4965e07ad6df722d03bf2824c97b30d940a5ebe1f5398df0f3c0d052df8cf5249ee0cbfc481adda2c5a2526a8e17e0b0da8a28eec4fc345d4a5a50bbaae10811442977929e8314e7c677c843114f81241a1132f42ce8698c16aaeab9152507f771548e2f91c79d64facafd066c4d44b879b16365c982154d9a46946a6b7d686eccad1132bda4959ba4c8b8b8e8ec7ac9414d34d5c8f5316a012e37f59138aeef9253b77758ea604ce495b9218c9527bc09ab64f25d9020c3243f09e8d4b067a2def0ee4d1b1288b8a384e6ca4299e4369fb10f15f6d7fa47ddefa9703c99f2b180272fe0108c112806be5ae2e7c7f3bf0e40f02e9e6f3e8f8fed2d9d24e98a61c758b43e26856d850e4bb985f24de5dda16fea9ec032008c13054b6e21271844988fbc26ece7257ac369cc0083c808923e838f149c089c08e803514bc74b2b6777758dd916af526605613413b448170711ae8b6098e241beaf70e58154245ac7f943be72c045c5222392e66b753cfc217102868a0d68b45408a1a4e280b41ec17a9c0220fcb400e2188417d4dc3701ff82262b8f1cbde61972519009359f14fa0db3006e2c88f86490dff247e231a86f6ba5df0eca4d1395e1a2c7162219ce53fd78759cea99a932313e877fdc081ca3e004caa84c6491eff1738c9e948a7222b62be5c3e23b0cb1501bdb5dea7f745c401c8096f2d9d84af4f01032c052f0c5dd9d6cf723998623df081553ac9f7d40ac26eebbd7a06434bcd03cdfb9849abfc10339f3285faed021160e4cca7d4bbacd5c7a042f3fd54a8366372c85f515340b64de23ca7999821f4610ffdf3528df1cdad8e0c1e5182544dad608a3f5dddf2e8f1b3de039f5ab565bb9d89aa6b3fd790cc6829c9b9c9f45483b74e96aaf087fa6420a4ec374eefd8932fda2a61117f8e3bf454630f8502caba47b8dba1a0c58e8a4e08963e047eb68c75715d7023a7077d24b267330b0499a5c7d44ca305ed351f1ff4bab974bfa90fd45bb8ced9b56407b306aa29c3f909c39630962736bb8fa13e8492c90e49ba3c83843f84bf25bb3887ae622c280d450ebe5672bdb94bfba207922eb5bcc85007dd18e25ec710b80acb0350d21fb03048d75fb2fdfcc72467373b3d5ffbd245b6621b189eafdba3d8faaa91e683118088bdf7be45cbb5e1580ed2786e74367287fce3fde4401f22ce3045bb7676e6597073da6de137e99bb8e3462bfa8ef9dbbc0ab6667d97d0ebe982e77a8f8b13b11aaf17a4d2b3b9a7ac7339c5a4d2d3a62c350f0359bf21a086721033d22845fb8f1b62172cc3d32693fb4b7aca2454f0393f85e9806d8c1b01c5cc326cdf2951930d0450c877a0ea65c50e85e079c4caf16ad548ed5e6aeb700429fa9e2e61caa414d17810ccf48abbdbf898b403840f61d356a064b7caf30cf9369ccc1a71b75929487f92b4348a110968747579bf0bd73244a252b4671b77ab5efdbbea3fc7e8f10853953094595000c802f50241a4a0801a1a6808709aee775831a18ad3e29b4dcf0010e3ba357691373e774862f4757d2bbc6c00272b37c743f3b14474ad3cdcacaf75b39d2266110ff997877f089195936de834b82324ed23036b9ec21df051c216392064e9d07b2f772030046f0a96a1e5947fb786d7e34f1b3bda3b0150dc431bd739475d9878607a67c9d2f9ea2f8ec395825ecc5ffe535b0840389dfd0ec866ee5874a7c31b8983833e3639ec2db7838999920f4db196fa263e68812a0688a82a2ad52291ab14f9989f2b8ac4ebd53f5fb8058ab8e898d51d90367c46d954f630dd5b79777cc1b8e9e509ac3fae98e618034805480d2d9f18f2069cd89dc3c40eea8847ba435f82677e1261a34494c173992cea0b5e38308ccb20d664511a6b075c7c164ebeea81ccce21109b0accd1fb1c33e809566c31cd76f1cfe4da253cf725687e3e4382459b23145609dd958b2db5c0a09104fb5d7705d57667da4307f8fbb7c30610b72d1df9caae946022d52eaa7e2d2fea4082fe1e9415941959f0360e4a65af85602e497977beb2fdc5cf06d9e34ef7927fd8d10d425794a83b36a041f680fee213106e28a1151e03198a92745b25b846f80f8d26a720e003e22925ff3144f4c866a0b59fbfe97496b0ea4537d3156c53fb41da14da7d13c432e8ef2f213200935a838f21ae21b86a994c8920a5a5554e27c41d936f35d82eda53bad9ef1b34881372149a9a49671ddd38a362ac5ac340314564827eebc4df572c8752347e5fd34f5261b63aa75e179add02cd3803d63e56f23027575797707da787fff15eaa4ec13f32ee4c47c8346c155314ba6718adac545035c25c23a1422047dc63f58be6123492bdc2a4adff8e89d42249e21104b9ec1efea03071ea1c028274ce8df905964ee483600d17dc8861a61e7f917c1208b93d3d4b06af5881a05b05cabd5cd46a00ee33285890d4d4f1df4c083d4101e75d8f18824b422c1b169d6cbdb61cad61e6d8c6aa6062ef42a3ac2143d7843f8b2ea03948bf2664f468c81eec45e29075cdb0032fa573a5f3acfc730bf1de0e4e4144d0143e552c94346d45b06408543771456a5175aa6990555394546d039985a215ccec894a68e77b50b020900a9910c68a8aa4c23e28827053295196fa47345aa4241c56c35d8a86035d8f9926088938d7d55802bce8dc3a3e18c2c7ec881595014301004e2c4e7ec8cf9cc6045d5206f218021b035069ca25842795005e5920d9f13a8c47e5cf99af78300bfb3989d210a43a1a3efa78733f5bda998fd154cda0c158540e2360b0d76a930581364c2081d41e720b7544a3cfb0c207bdc7399cec599c017aae96e0b9146ac206c68e00cb33c97d33587f36d4e953d83d883080d2d2663bcb7c4e8525e5587415a9a2c5ffba256fbbf15ba92217db6c715a2d26110e4b4cb8bf9f19aa2561f4cfd3e2cc64306c52932eb03163822f5fe4eaf11bf9fd9aa8c303ceca8a5f0f199c9916d8a3c9fdaacb6176bb1207eb7ab821302fbc01923e8514ba214277460e7cb8a0cf8363ac2266d82566991ee0c083022d21d8c7b5a0feab0a44cb5f8cd922971ec378d52aa3dd1551e67c77590adc8389c0a60a62b8db2dae742dc009296ef6c1394d6b17991c9a93db8079fc191c0660e048c6d67d0891970ce5fe0d44636d953d934a13c0e25e800a64367beb278a529b1d06ebe5481601a44f7e34610ba1e38c76f8f6893afad3c2ffbe8476b3e7ed31eac4b732d036db6ddc27902123718a404cb690154f0aba73069f9e1995754f4e4812ee24f9ec57b01eba274280e48539498778d5dc3a22b88f9955d57be9fac5f97deb48a13377e81ac9b49b31c19e4d08f96943d5aebb34782bbe19044ff9009c8a56891ceccc6ba82009428bb8cb109c15021308b0892bf133e325cea36b2d976929e4043a6b1ad1751e8ec205941ea476bc1996c7855a271df1a65d638799512a588e2495873b84913c2144b794386e270de48ad35a32cd28180d80bec3341262436d8a056e7d2aeb4ab012e578e2dd1c018458114f8d04c661f8062d3e9bb2f074a7308226b49f0479bb15eba8a109f2a1a9f1c7ddf18cb3832bf821174c096a561e9197c00904a20a022a9786bac7afc9c8b84354c28e59581fc63fd40f87a8880538c5bf6931538526697ca6a08234e08d30c35e6bd35a510972a35c01f556cbb537113af0f8b12001c4e04a83ff1bb358fe446ade836e284598c82c17fe0cec8ec02efb004e8b03816c7e76ced57ae49226da54cf81b96e8fca289242f3ed45f1a7d1cdb761e36228152c5acbdd5f1d0f6d7db04908501151e7ee97d4fa619f4243b128214725f6fe4de8c6840c0fb505aa432097c8d7b7b1e53dac96c4a594b92d02c7f3b877a04fbb99994ceb62fc21027ea0bef1e384138a91049b9351cbbe6e208972a42af427a6d36029069f6441a7c99d65122b01c3a538e283c4440f23f00594a02d47d33924f3cf711fb7fc44980be957e86f7971c89fe611e0d229196dabcb195dc7680088e968d4a8e9c94ab127904e8a67b3e868d51857a58db654deca908e686328e0e945cc9a6b750d5288e12893b25e45f2edb93a3845961308e7899a74e135c55a27d5071e70e0023fed5449a1b820f904f281779d5ba6f9ad016e2cb364a2f6261b3a3a95002955554d4f553dc0dde959bee28b7fe0212469989808c1a76ab008560c13dcb6cdc53b4fbe4f12cfe8beecea026ecae4c4a6a734f7c2fc98d33b8ad35dbbb16ca8160255a72b46735e76e681f5ee1f3c94057facc080e17ae304757bcf678a70376779bc3627c38d23d75ff9d14ea138380ab67b231e34e2540b575196c77160cbb3e15701a4a41b97315edaa1e895f9099fbbd8e4b7b3ddbcc3833ff66cf76235340e564435bb49a52981f179b16ef1d65a3fa708ef4c89b03a1a3ec907b2fcb7b0923141f09c5a038c080c7d0e88ca0944e9b02810091f7fcb07f27b5b1b5a656f5a56ca834479898ba573193c4376cb620ab423f273d46206423542043922620c9fe33b6e75f92a2073568e4ed89ad0a4e95f433b3fcc88ea68cbc4eb94e8293e25e28709b190ac40f73ffd29b2d11b986e58c8a2d49bc649882b76e53923be7546034e81f4d67b2e9b33cc872eeaf73907afb1cf590a1e30f278e809b17c4e389961ab4aa00dd22733ab9b97546a9550f000b0e255829bb34c37f49c77181d86531599129bea28df3e42c4688a86816f0f6054a70c470ef35f1487e7e1cf191e57e3c3013daf05da1aee83ebf2f109612883c161eba2c81a92cfaaca776a0b1ca22a801b346a0ad5057c448295e012a7713e3d01085c462596921a3182a0fb95a6a7e866d28f8933e064739aa6442a09fa1d461f24a1a50fe32995cf17f162f5d659f720355ce965cf85f5ddec41850a2c0051a7a44828483a25ad0a116bc053dcdf7ca90506ec9a57deb539be999ea55d59c911b127a1038048fcd467423e8493bb283587a9a6c948cdb981907aadae6daa82e0bdfcea4ddb799cdad36671ccbcc101f0bc9dc54ec5930b6de9c05d7aa9340e24724765e340601a9dce2879fea8e3946d29800fd2c26c443418f6dc87c688362d45b5b294e9202c7e47e9d448099fc8d6a997c6de2199f97c0ff38aa5adf026be57824c14ebbefc99485e34a2163a5f8a9449384ab125f1b216236eecb37ff3b971862efc79d574e41d242cfe30cee80062e2238323fc08513b03f123468951e25a099e8669a1f441f23b352cc6a4061ea827f16345454280cb04fc75e71d8b20c3104016b5b2a789a5fdf7fbb1e467705cc6e6fca6a5a84092b48ee83de56eea22d11b3df545b19c92d58c0330c90d90202e6f6701cca28ab5f81b080d6d33ad6e9bf422dfe8445686e3b7d5970a888d1229a51d5480ab435306621a5686deafcfdb41241dff25e6ccb3b43bad7fdc962d6df54327d956ae45ae0f81dc81d476de4a78df81044880ace9f9578d7d75fd5e9265817ad711eb777b0ccd1e7ab00065db3f7220a0706b044c0c1a7ceb27adcaa7b1db95d2510902457d18a44247af42a95ed28955da32d16141ef01dd177697ab359369a2045837d9398c148423951c1615ba04e80aae79fd7dfdf85496b8b21b4cd1a105eaf4561619dd8dc5488dda707951d1a9e6e2000811e1fdf01c5016a9e19e558740c45c05ae7cf96ee042fb623b9243c3a095792fc5d2377e667fc832e0ba34b83904e2515433859746b36fff4541f807ebbaee278b947ac83029f7d26f73fab82b4e1c12aabe4243ae21f9b515ab886474d829a664785126a2458505e5e7090aa8530e00a13e0ecce0fd210fd3c2b190ee67a46663551ae8029af843cf66b14b4687d0030fc3445c0f35e178fe1c8a1b5fbb9b4f66c1a7d5198bf196ba8ac562cb2d122b93fb564cb712c14bc2f1b0d1c7aa24ef0a332eb2674daedc90b52d93e91b17ab3042d7f8a79d9a45609477364809a83a86433b350076cefa9c4f8eb1c02b21ef60d7d26ad4c046b2e1092885987f4d6ae504ced218692391a1f429048285e4c809d6d5dc1b7dc89abf02ede69a8ec3784b55143d8219ca6e92354434dcc7a9899b956cdd6739b1a164e2a001def55c87267427829f2ff3e107026c3af12e43e5149963c1bfe18744739c624665c61a76149cf9f2d2a4f8f8b106297554f024b68821af22919b76238047c827a7aa1d7c4952fd24db41907609ea78b3c4a101d80c80b0e72731bd16d5789440186d23526ad0dd8948c4189cc363e095e540a925a70ee91b10038cacee974fa4296f4f4ca88901186a12ec033734a051be852b2c115325dde20461384e3a60c8a883d7b14041cd123bfc4ec41c2a0c544cc496a1d71758fd15dc57c7ae7bc89e26e65827b44472eecd531b2964343629722b5841800f4530006eaa96aaf84b051bc6475113f67c7207111d1fe8a00d3b0e3fce0a4aeec30ec43d637218f7bd01b60f33fbce4c32ae639fb2446fc699d4a9d2a6244a2d6f7e4e1d3dbea998ed709087f76bc6bfd182ce4569e281de0801f1157fb693de5337722212a5556b4543c3ad94e6c317031e620737212854dc4eb7d10b41b9596d70d5a3fdeebc7b5c538dec84b199d2ae6e5ecd98a1310f87aac081cbfb4bc33143dfb0dd4bfce5ba0889ac02d11847c8c54853405c9c5dffd87b594a9fcc448c994438515413ac5512a341fb2e9e6a7fcb9bf53c66ea6620d31891e576a80b8533a0d08c01b42326d52d030281e7b69b90a47530258834f8c606b7db6bea3a37396cc86db282876548a23f11d6193e83eb76af0cb2e9c310848f076c852dc6c1aef243b81f9fc5eb87d27fee15ddeb06e891735b22eee461f49d795ce100998546ee45ed139182da46c614479e47ad55306300db0dbf6d997b543c6a0f0714ae49e3e6a332112f4827a6b23f15264416a4888a96d0970e804c2f3e7266742503125817f241913996e3d2e04794201009a5cc6abb41ce9d4b1e06c993f697595805f45426fd513867222585beb4a378ee983abf0c7cce63237006525b133c9db408829c73c4ff167317d836145d086e0a6b9cc23885c8d0c40d5923ba375bb28e5dae615fd8d8e16583332a634be3090e0831798d75130345d29a295c9c9db834126fda659113d35052421cde2a58179b9a4862682b4a378c13cb8cf22901f318554a4d583e884c4235242504d922fff9b93b65624c05560a626311fccfffb2a0ac4eb97f1e3f7f4bac8f48da278973a2c46c994192ce7709596cabac3198aedc1b1f21e940ecf0691b8bddad61c2511b994b0e80135da4c6b47fa8db2e40c17a7b835608c19b9611ed459d8566691a4b01c8b5bdbf8d56ce344e0d7dab6eb318273451070401d000a0e9c0c355116090d0e358dd05b9513251864f29f110a6f0ebac1bc87e8220cc456fa7eb269b2353d030c18f56cec7e9696402e6c7666c409a748db5b20fe7f0541113813d2a5cca73eb31b49756a8bf5fafd02fda4ae22d649ed83fa3d5015cfacaae9e620cf3cf3f67985b61d103961f21df6473b3c6ecba3f3d7e5947b7570f038cb16cdfe980dcb81af6ca50dc1f20765e835d0e9642652a38c11606b2c592304ed96decd46b54454c9418d9aa19a9b468fe6e66a2f68b619954a601e3bb3832e89b1edacc3bd083be24686ecd997d02bd9ef9618d99a7081eb38aa57a5a204791a6c8b06045a266ba3bca7be039884039cbc8896b4c087ad92aec612bbde941f2fe0d7c13e58552914a55cac00ccd04431d6ec3a0c4415aeaf4dd110a0a773695433281763e5d423862d90d31ab7f852f5442c417544332f8e68a566af0c7a1094ad3832282c30992da38614d8babb25dc1678db1b99e423d5ddf7b3229d0be4d81d40b8581e9b8a7953e34883cb29a0399bfe1637e4ad766f6c82ae3bc8f6c4b94555fe6e495e05c79c1492e754b5a53427a7821b396248c828b6e3f07b917760a21b9e80721ddd69d7813531dcef7b217bca3998adf390f75c9f522c906701f592c037f00101a84e97e1297a45c8f5163ddfe2f29c4dc618cfa13ffd76eafb505cc57a7d40f6d05cc56d4402d6f0b48e51e609078c69a6884e04a734ff9c1cd8ed56e50a1f12770faa2505d77ab4f67bc93d906da23e620b5a44c712a0191f939b35e77ab547903e2c57cebbd0d718e24981f9e880ff356188f4a0d0862177fa364b363c75bac4c4d226ed94d8386f231d89c1e049517ae329ab0bc71eb0d25859c30e9244d791c5d73dfc24bdcac1ab2aed10ea16884917451cf3f1bd54c4a14c09af2114ce1bb1a3d4426a87df8f207410f491c14ee2fee56a14353905a6121b29956c2d2dd9d9a18f9520d09a22bad1d5a318f7f1bdd03d9e277299eb62db81ef0ea7a054602f53e7ba38a45588b7c188323753e886e0a0144e8fd0f7773f3fdb1479763de8100ba02ca1a6891827d12c3a5c41c6ec9803747ad46c77dc0f7118a8a9c60ad4a0c892b897251ddb75969288e9d3cea3e0a02266d3e7d4160bb3673365abe091d14a9633c63ffda51b95b330048a570d831ccbc9ae5d6899a799337e29cfa89ab88c591cf8fe347c7cb5c6e463a92eb16b1b1dd888e357544c32134a25849257f73fbedb0e447877362d8d6ce301c12856010d85ac3015f28eef8419ca72bef483396f1d1565cf8f07367f2b68dc9a7b34e195dbdee7eb9d78da62e17a77c052352b3f79f77c428b0ebd4cc84e662ead8e7d1d6aa795f1c6d4c9a7cda03d4242ee123a60f8db6984d6504297eb10c60673bc18f25bc7d89858d48fa69c257544070c83aa33e566620ca8a90ab402fe862e7b3d323610b9fe003b8a3023ecd8805d04742da752ee738fca195d0f620d48db6291ee397f749acfd624d189686d58d4a47f2a85154cfacfc585f6483a48c0dab3ba9abbe2c828c9a084416bd56516d22cfad98b31dd21e05d859f18a6428d9a102e30c718df8daa6b1d4a4bb37929e98048d7824be1bb84a04f39319fece65d2e183c65bdda399bdb8188d9e2ef497c9aff1c0a0af1174fb2a5ac12b5be92f83d937c9534e50591e40d0c2500f09f6e03769cc4ff3dba77b89cee717f18bda381f856af4e8a7411d91680f300e355c85d8fad5a0298e34746a38dbca577f7c78c7b110622d2c8cdb40c0d2571518d7199c7a58a24f8f6a42f3e8587d99a19ba353c7ec99a1d7257a52de987441bdb2b754def79c51c988f6c81bc8b2653ce76eb93d1c444d30cc8b40beb83af9d020107731e154453e4786d9001379fd2b433195076dca784e1b6d5463f128fa1a11d2b6eba0a45834f09e1ab1d77f2c515049e33236b93e919673577bbf73b5731648a28b94cca9e36dd798c8e629e052804d645720c17273ad78ef311eb43e4e4b1244b9b6d6be5fd509831042819802d01a77defc865ef64ca0122ad2ce786482ebea2613cf762008cadbffc495db77e30abcecbe6f310f9d9c5ae6fc67afd2b949b4e4d09d4b5eaea7790d0267a1258ce163352fc372077e653641b506a98e31cbe2b85c08caabe557d8f3db7afa26853009b37be872cf0036666700d15965d1efb87647473dab2122a28c0f2de2122e941ffa2e0e5b9f7d4b9d48d55cd7bf9adcb8c9958a341f382d59418f2adc657dce4da8177cd1ad3524e9cc0340d2013d0056436b7b4d30c005736f5fc8797e8b4c4f2c677aba76602afeb346748ed36a38e138d91101cdfbb07c2cad48c22ced5a3c00b8a4e93f2b0d10564155ae2d33efdda9b615857bdf1c3629cfb7d4b0979a4027a19729061df488823b427e5628d73071efaff51a5689592a7b367ec9a03fcb639c4869065fb57756db246a07ea720487b6c9feb2887a9f19c783f5375422ea28cc66bed0f55d4356b5329011605cd436190b137edba44df9705c0615265152e9734565efa4968d0d710119d34e9822270ec036d8695c4ed22957d79f44b70f08fcdec4628bc7c96d03484c172ea23e757d8285fdb379f9d7a4ae6e7099abc473a6aab6eebe7db5c7aa927fe670907c4d004db5cd8d48c3d0e835de346e53803204ed65b7b8f3395eb39b6dd9509e33932a5dd71ae0823bd688e4589fbe68bd7d59b3c65c4e71b522657d06cef45faf69d3ea90fe3a2f441631f18d25fb9b59a0c8587a6ccd342e68aff9f8a0d7cda1fbcd7dd05736ac13e5fd6a040134dc02cafe75645a3054324e079929aeb32e082db8fef3108bb2421eb22902a99a0666ab51d28f916f00404d735857d6270250d0449c80e7c7ed01a0c9d762d7f52daddef800eaa99f422f90289ff561eb9bae4a5e3034421a91ddd6a49432a5945266065a060906615c39be34e9a8e2c1b3026d7621f975f3154cfecdbff0ace0a7b90592d9ddf140a7d52549179d2ead2ead2ead2eac27d4e5862ead2eac2eac8f9b67aef4c36dee148ae9ce6dcfaac59cf33a4aaadf00aa6a6b313ebf6a1c0ac23c74b937aeaa26df96f78068e1eefead85bbbbbb5b96bb9f5c436d13248788c0011aa44f2729bb7d4c57a918c2303d2bb5f0dd2c266298ae65a2164d2842b6cc5c0dcb902b08b3165bf7559b6591fc2707b7a54e1e63c7d4a02e4d4c1b5383b82861c4c6952cac16f4f0438f142b3743288b2e4e6ca60675d199315383b84801c20b7a2048057cb0c0298d2a1e9c6232c8308015293d0819e15225881597a165e9810e3c30020e845e5054c4480e5830e5c70c31b808ad548dd3a3081e8e141d01069520563ac6d44017228cd1022746f8a0062b7e16f846c1b0d0a448871ee040058a25565f8ac4a0b544881c8c081384ce8adf037ca35e26f3cbb788af1b293e1c41424849949d2e90012d31aab0e18b27360062c55c76238c116259bcc820c3c1cb929a548e017859327dfa9f48f01283a9324d0df2c2439723186100539cd1022b8c40638ad0ab094c07308b4059428b16406cb14317596c5179fa9a548e548eafe1d43ba292a2630514166401e225860f3cd3b56da4c5a09aeeeeee2616f8909cf8e83b7224890a8b973fc292441985cfc4223ec7658c8703a02127653c71f22ad230b88471d5d770d962bea9415c7a30b7578da2b8a2892b9a68f72016c8c595660e420082deb32facc25921fd31ffd13fd4e86109088ef9be8a497a2c66fd34538fea20bd0f5e26e466ea99a44752d541d27008491f69b1673a1273ff694de69a7a70a050028263ba87570230f7d5009ae9dce3704e0b40d0b66bf493e970d00aba60433b61ce70af57e9f572bdb81cc9b61029f1127d9811823de9316d6663dbf0f66cd161e6f8ddee3e1a8d46a3456d319b71db6fa7331699cff5fb68e6a185e42c183f2becdd1fd995cf05b2779f69330478ad7208f05ac51a37e89e2aa463c5dc7e36115f6c61cdd4d42031b04c31a64c15b2c135754c0d0a0368ca1a8aa302e2a181142294b0e28b0b708ede7db3ecfbbff74824d203d149d2705491716e9b64925e83c2f8994526a3b6b81bbf7ffc51911951437a426d91ec0e7f1ffd768bb0f7121a2431558acfcf9c2ac527689a5e6b62786d1ce21e650c30704ab3acaeaabace5a83418676cd1738c5c20396b52d46003f0948c86da12c94d19629312623b1628ccb5a160f6d5924fc48161ec037fb25863d98d6c06d387a85ef4a1318ade237aac8eabd1765cc4e7f2ad5c86a904829556ae38e7e7e624a3ff694356ae6858e376ef0eebadd75bbfe6e9c90356ac6bfbfc80ad3d9c9e9775e441e1e3eda86a3cee48f3a71879930e48271628fdaf0c717a81e31f9a5962610532afd70de5dca4ed92b911e7b250a8c564c5a8b710461e65c8cce9f7bfe9e73eedc61a51fcfcd64a3d27b6c54a2c0e887074de9f11fb79a21c24c10a4ffca17e53dfef31c47763ffe43e3847c0f699ec8a7a8197cf3e97034e3c0810387afe2f871d413cc60dc7374ac2548881f2d403824ec91332df074cfd3fdd6aefe26c2fae7d65b170dc953bbdc145286536fdf73562c10af2ac2cc3ef5cb9fbbd96468f8e600b39d0cdf6cd6ef5abb869e1818906756a916c8b694ec7e3a01a180ae80e85c2376d707406600020488ae1630c05869e14d551d541c15221e0cace0304f3492dd6b0902284c10b87f2ca86bcd47544bbe90bac848448242c222b840dab8c2874a14421913923435080c26aaa8c10ec060d204183d5f93caa1fa01c3dcd97bd4cdeeec1dbb19ee541ddddaf69cf390106ad2a4b564a16db4ddbb1b32f7a3ba613333c347a19755719ef37677fd28288f4e5f545555559d6312a673ee2978aa84e5dfdcbbbb6bededbe3d77777758092b5b9bed3db7142909b61f35294dce39e79ce34e355f717fab5ac2412ea64ed5794a3e2adcfdb9c3e78eb83be79c1f7187cf09c1e173479ef3e784f01c7cee88c3e78eb81084e047dce1734270f8dc9157044c6b38a5e2a141aa31a81233b73f9518868960622dc889b9bb8b37f0b76c7bb6676d98bc509d730f7a0f4b041e70653f78669fc551eb15c5c229c404704f946d0053618ea9526233f5532c9e0a300902057b4a7a7a36c334566bdb46e1719ac6e281a51f4cfe7df0e0c1234a8c25203c5b3542d2487bda867b2c6b77f06f6eea9346a8b850808058db639de80e7e2c26af9527aa835b5ba0520ae4feb640af7587b80874992c560354c8f04215c73fb6cc620c1efa654e3598fd343dc696d956666b10194f668301524127b62c2104e698ab4236a7380716c43441713094cec54171768bdaf86febca94c502c01cbdab7138a036fe5f442e5a0480a9230c8ca8991746f1475ace1ba206585644a06be5f3bec464c442db788c4f5a509c140baac20e41fe40ab98ee22da1718b9adcbb52fbea92277eeb3ef0dac24d3ff5111a3afcb99b5ad416dfc73104275f8af6bfabbdc956e9213241da746e43a652cb0a34cf8bde4a1a1383c80a03827c6c25cb411da3eda4a3410bd43a7e00446865184f77e857cbff1a8409b8cc8e8990818124de8014e416c9ec00fb6a4c88d8118a871627c4027b8dfbff1e0147c186ccfeb84a54f58faf4dad784dfbb5b84dac087f0e13ae9511d103e9374220f4ed24bd00ea5568fc90b153d643bb462bc70f10386434fc9cb161e48395cc9bca0a1c3088717d66ac55611e98b4eebf585e78715924cf9720410455f827c584187265fac50c10a3b047de942052b1cc1f2e54b0f2b20f901634467851c8acee89139d198f15302cfe9882d3f536c79c2055b7840832d3e30a3494d2ac789cb91328c60ce3733ee75aa9353a5e802cbdca27c538574869834496889b57d027978444774600f7293813c3ca214dc01eed08fadfb671ee36a28d3d42b0fe0145f31cd057a00df38cdb40b8553bd410b14934573cf1298a3fc190502f70e64d398326c1aefb519203a59c351651be2260976f24ffe21b2a009512e6817407466afc4957e9072de13f1891f83c5a06050d1eaa1360543c0416b057d68ad1e4aa3b4c04b93156a043b4f9059d7ae9a22531ae1207fdba1765a49061b8fd289d940e9c474797972e984e7ac4b273c63bcfe9a5504ab7b98d07b548715a92b5d6ded7211c9bc96e48fd1cb726afc8cfc9cf541881aaeac88bc2d7e56ef73140b2068c15a11795df0ac9ee663a3e48ae08cd0250ac4490a099d0ab9b996d3691cd3c3773c7c933d7cd7c337eedf93f0374840dd40c5a0546d647e734a26743098d0653228e7147c8704bbb69da2404d62c27f5648f8ac63a334621dacbbb33dfdbe2ae4d6ac1249e6491a839a79e17dccc73c2d67a5f0f1d159e51041a16715f344483f3a2b9ff84cdefb60ef310102e037f76542574485e204713d98d0016142578409dff9fce6a498d03931a15362c2773b6013be4ba22ab0116e8903e26482b699a6b79c2788095530e1b7ab6de0bf48333e919b6bc1fe4271547b82b69dbc0659c6841a9709592f89dc2944133e1dc84daf6011c435ad24e4bd0f8663c8ad5908d85ae78a9c19bdce4d5fccd864adb32efd806f03a5d36404b5131b790fab8085601dafc184ff58c7cad62cd76a56dfc038314fca6ca076fa7b9acb416de043c833a1e399dc82097f5d4b75c07f3a48d3bfdf97f92dc91c9f174cff4c1a34d269a4b1f2e1df620376da40edc462c63a7c639a703b4193a105d66468203a536f022a07a7e03fcd35e19fb41d4a0140e302880dcdb1700afe967e4c81cbc329f8282631bfc329c83c9a4f9125bc8c8dd20f619c98872f02be193dfc208d5382e65a6d039f044ddb4646835296e668e55aee473a35782674bfb91e8c34da722c3bb7adf5c91af6b2942ab54e6742d74c46e4ced53097d54011315d59995e323169ad5fc568259497b25745fea6621d4ec1c750bca3a364c27f54c8cd7b5cab63742df8ded312d02c3346193a0b82a314183519c1b487741ceded6d6fb80d7113fe7bec7118ed2dc0f78f71db6c51706a6914819d230d479545bda9a50714f9371ae298b8d7a82a02d31af824ca888c8979c91cfcef8334ce284a025298ef3dd45e07e95a8ecf0bf1479fe3f3827ffc1c2d073ab16509d62a6a39b1174790d4d546d184b5d2950f09dcdc5098af86df43ed39f53e260bc94fc337fc43dde4798c52faa778a67af4f3c2305dca21dc87dac6ff9cf21a4ea538e5297e1fec2fa703a90df4f2a3363ae13fdfc077d7194a984e65057b49a47f90c6a1619bfd1a2c39e66e0a7357788153bbeffba7fe3f9d82d47042b6c682e68353315904e9f016efbdc70ddf7b0a44e7ab0e7de98573770c68a136cf3925b0871187f4ca84f45a828046999a0c8f9eafdabc5782e9507bcc2bd057555de7bc513f7777b547c139e7bcbb074c6f362e849a0cdb480948dee5124b591d161e0065ea9b806f6e609c0e7a816f740a9f24a66671b17caccc4d5fa52b482431370d23a70fbed9522bf08d9e3175ea0e9e29a88800456f3e6e3f8115f1d324c74f6b50c8a235a8ebb6aa2ad7c0832ebbfb4617eaeefe80162b48c7c1ae8c10954a750215171d44036ca3602f4591fbeedab9974fc87da7ceb976ceb9e67e41cd8946866df87182d04899a705d1412f97a2683d81ecd718a41b3871e5e48327a4279c0c41f254211b98d032b4f0534f15b22189994d15b2a1499477558daaaaaaaaaaaaaabaaaaaeb04a62eb5e577776df95ba170aaa5a28a8773ce3d8fdaa6cfdd87bcb9eec415929999a948666696bb5848fd2eb5a4eeb20e564e91aacd494e7099ddb12a2c10c9cc9cbde77d3ac508df09274c47a292b981d49bed738459e78d53724a6e316772977e388e52d535c87e7efb707fdf2174f89e5b77c2868c91d9d5ec8ed6685c9f9c72f2dbb031b95b1b0bbf5e771be43e2f1643931f915c2dea5c635926027b1a0be4196a2230e8708699164cd3df345d9b7181c90998b06684eceafdae9ed6ca564e6b1b77e7d633a5925058c50b091f7615d5f1bea9e88e374575bc7720e91e7e53d11e366cb066575115743e6656c424e9346256e4a19f987fdf3bfc6ad818b2a169db3cf85e1741e929be8474df3ffd3e4a92b6c9d36fffde8c10130d316f7a5d65e15763e19b930945830da6979f23b51921312f5f6a34c88f795de5985e6aa5202613aa88cfcc7bd94720b9c5f9b6677bb6677b44f07abd5eaf978f521683300dfad679f114a14c4d135ab2a75cc1f22269dba9a7c8b0a63e0fcdf73cc4373aef9be77df7bc6fa017b5ed04755891650c521333791162e77dd97d07868b14df8ffb520042b4c8188a99fb2c238f18fbdfddad6d31a4a6197265789931c4103b3a4ec8582d1a73ff95b051a437cb82d13c0dd658d69994a1bb5ff37921577bc4d727aac37feb76a23b4c68c92b8d537a2f454ffd493a5fa9219348ad774c5a2b81c1742426900335cec628e5e9f4bf71cff457505050505050d0eaacceeaac8eceea0c616e4887543193988ae4fd52d38496dc9ad54041538646401168fa37ab5b8d5364e5df3a8de32bff6ef29ac5ead788312630126b6a96d5e6930431739f0027d3090027144e8aa30c98ca63c7d4257d0696a43179bf2916f7d8968498d248238d23ac9c46830deee1e7c487da8c104843d4b47d66e2cc560f559a80ae9c16db661fdb4cf2681248d81b38d518501dfc16d01d19e042059166596d4a45057ce4b696c5a9182ca42bd21d5bd80c923557977986f9b464673a8723c82d49329d7326e77cc90b5ccccf122ace3dc3c0bd0b335dc6370cb32c8ae77bdacc0476a5ba9a11f26888daca45d5f14395dd15d80c43b07d295d104d13a64ae9e2cac43a23419c32c0348ec09afdad3913d29f31cf76345d09999a80ba9fcebd8ba4b9284522d741610db1b008d530656e52a886a06fd2dc6721fc390478ad5c9b511fbcb2872ce6c62c2137d941f82c84584394a67299fdde1f8f1065f667691031db07697499a9d98a4380574c8124e20bf51eb2e8d51125c62c5ac78a8d3568446d4284eca9412f2ae669890ab6146c89ac3135284c159d304f7c08730419617ac2f09cd1a49d7b448f7d7ab3cbbddd5d0738d5dddddeed519eb4b95588d9a1a6ba8d33dc5d9d43f553714a5f8e1aadbb9f7677bb1c352a8db9234cb50d6cf7473304b91fdfa18638efe1bf75b77bb73f0806869fddfddcbd5b42916fdbfab979466e33aa39e28829df6cffe057d4e63b9b59536f97c3239cfc70e4b2d20f9efc5896316a73931fc34a19a3b69edced583c175d950256c32455a24c28487a8e9422bd7a0ee627d734a886470aaa1c2913e0730db73522398461c277e9354f739271134ad566341a41d2c8b551cc8804d1902594d31489f40edf49a477f83e223d462a02dd83c199c88b79ceb3d20f6fd5406d5b2e3c07831625962fc0b8a3ab5270396ed4b011a34d0d544c55c03535c25ef966843d1de590684e27d54c98bace5529f078b5198d485a7201ce2763e28884394dc5d7d18c591cc511293e4a6724999c4c494a8cb747ffc633e533c3b237aa815ab531994a8061a51fa38f792c263371738cd4547598de14a36d45a2e61c46624e53a3d17b4d8d4628986ff4289d23e88e8616b2acf4c39562f6c6c9cd6b26ff6ecb8b74de31486fd797894d3af049aac8d80253f128e386d23e0c0b45195662ca50c1ecd143b3b8fbe83e73454fa67b19bed1dcddbdedbe91a7bbbb1b1661c129865782c0296dd347c87ec1a98d038b9a1d8f4b8b0b4836998c1e16054dfe299337a91559c15caeb689d9c45c3445b85ce449e2cfdd9de4ad6642fa287306af8161e01112ea768cc935d93558d42f5f58048b60d18d2dfdda6e6c71eec61655414d594c434344249286b9fa25bbbf74d1d3fae53017e672ed5caa8262446ec4831131021e94b9615fb017a7a2fae08884dc220fe6e2d4732e0c878ac179305711efe0a07391a771460f8f6855dd627098eb21ec2fdc2fcc85b91a27f2441e187964243cd144f86238f7c1ad2230bc28460a8c56230d73b50dff8c18a6a1a8846d52ddddada5530d44bd0c1e21b77ecde85ae4a179426ea6219ec9278711718a9f0607d80b73f1f0f0d038919b69c8f4e29ba12c7ce33211f1cd068bf6358a248c57b31873e3f558c502ecc868dd7d092072204283144668270ccc4768270b1213423b543028847696205921b433831808e54004a11d1ea19d1f7c078281814b1fd9200414a50742da89c65f6847052cf44319f3c654a11fbc6082ad96fa7d700e64cc54a125acccca1060603b4877068686970c898444a4293266f981c47890b5e4680a129084498c216b4c1552f282202469aa901221a890434824d2345588082d8c20df542122b0709e6a9aa9423c5b4c9f2a940311c6e86d54cef6100446d18ac8d3c25af5200a1ab45644483a2ff7fe4ecbd128c28c31b422028578ad1a8b225071ad72cc0871fdaecd08f17fef5a0ef4a1b5ea7fefa196e3dfffb41cd78898aeac5ccddc27f2bae061046c9967db286de685ced13e81f90ec2ee2eeff2aeb77a570b4c3a6666e7bc708e1d333be78573ec989979ddf739c7cdce39666676ce3976ccccccec98991d3333333b668e316b76cccccccccd3c626666c7cc9c357f89e5e91d7364c72c6b3866c7cc5a124c75d939666e76fc9899d931b3637edded9c7b76cb218057266b2058adc8db1b687821f97fb9bd57eb224ebd346411fcc237aa034482f3625440eb57eeb752025aaa95fbcd34f57901ee755b71f53498856d1a0e0db59ab0c0a176f5abb77418fd8522a09fdb5512921be672b5eb95655fc8bee1c8af6e382257f0dfbba1d926216801fa1fca04043dc00f1401fd6dc2a23afa31177cc1a2c6ca98fd0e73a98efe9290dce050f713d9dd0c75905b7cb8ccacba906354f96f043147287867b35cc9d2ba0de9d9dddbbd9b656746d4fb2cf39a32e4a6415bca874c71aa7d93288e649b459265362abbe25c6c126c5bdbe325990a1dba3e6ddbb748e0bfd76d392f12873265b413a34e9c521a33e4a652f5666ca3bebd4926a34e1da5772666f277afda1ea377afbf0d8930c2f85b026426d4b621ce00db63a46dfb4a2e90666b06d81d51b53d740dd03b516644b5ca8c539c803382b06e294c774f415f0db03d7667364a724a5d5013adf953a5007a228593a2a99a2a85932950a6112c730053856c7022c9c44cfa916f3007df0de1249365e636044e7f7e51dbe2d3a0b62d2cb9409aceff4a40de67adeda1cd3af9b3247ce30f65ee2c4faf92303d1bb43fbb3d4d945b735b1992edb15335c9d4923307f120a778ddfdf6e4d2a3abc3c8a9ee566f2b98f6e6ee1e238efb6f8e52c965605ab3610a7956480ec92772eb2257c75e5c820043ca0a9cd55215f6737061aea852c8b965fdda96bd3052ffe819058246614dc2f8579bc11e041a8e2a72a605ecdf630fe1675a7c217ef614889f6945661ae0cf3fd3823f3f107f8ca46dfd24d8e98347287e19368df9aa03f550f24464dbb909232cb777ef76777777f7eeeeeeeeeef6766f777bc7a5f93fc99c64bcb7bbbbbbbb7777777777b7b7db7577cb7ee2bfeddddddd7da38a6bf4ecb4ccdd1e86f3c8d33f2dad22308abcb578926ee7e98d3cc07a977977334924df6ac738f7fc45cf9ce6ffb431c6cc9d55934a3dcdd3d49c46bdd9caac65e47c4432cbbafb63b24724777ba5ac51a3311b36babbbbbbbbb73706d41350078804cc237a5a5e154fcbd3a2031286ad47f4aa78448fe855f1b43c2d1087a705b6200e5e4cf52ba850f9ee5ef7fd76e721104c89d2012952ec6a800b29a6e8305873677103d2a3727fd9d7ab549a82c8e50dc0267ca98e2864af76779c13a8a44d78153554884604000000a315000020100a888462813094a7a2b4f714800c6d8644765e3898c8634110e3288842c6106300210000400820c6d4d0d0090a037a073f68c9c5ff92633588a453b13b9d1cb5d2bf0b9e37506b43ecded5692bf1c6f10a6279e2ee1303426d09db7f8bffb63758a46e000605d19892eab7883cb17abdffa7656dd7bd97f533171f71db4f504f1f386b99e8c36086839a143c0a08893fa42deca9daa521ef3c4a48ded876c3d3df8e99a86a467c9dda392b40628d9a7af3105621079afdae07ec33e0aa16c6a8b1e3586557b76b190766b67c91894625e303dcd86e571797bb17e0219a01eb1febe76d9062d7c233acdba23db7c736274f23ee51d8254a233b8fefd90c71edd7334b25f67ad5e69e832b40c483b6ab5f86221aa3fe304f56bb57fff16892aad9efdcda16ee56d84316bd00a960ce740538988898b64431306ab9914c35bd4df2d210484771b455ac9b7beca6d5d98d44c67e4984e6460ee5947111e6430d2a12e59034c532d055c439f04102fb8dc06371bd043aea3a51d931cca85b06c8b375e3134edbbc5254fecb7f1d177c2e184637e0b578988f6350eef896fd811a93258a591658602f718623ae0e084fd07cd5358efd5ab2416c2558900d03a477ebe22be7b000bca1e927e9669d75f4eaea410ef816d30dc251978c74bc6c340533e852192ee5727d6f92c1d8da950222f4cf36c4bad9304e38bf41290de6dec81a14aeaed0c29ac97d2d7af0d453e462e92cedb0939b53a4f84b2f5cdf2482aad63e46c30609b59d1c034b385a3626e276cf7367a53791c466130d3c5d30db9e74da12a45c7909ec260e10231dccc326bb395c4f058f1f02b35e6676c3aff068ff5c258fc4743c6514f79a559dd5c1a46f7fd9f69a9d1608535a36e34156c13620d43c0013747f486f9a6e49c10dd6e53e7deed1c95c13056d9d9dccc6fdcb421cabbd65cb2e95cc6f093bdb091b9d798d6dd8e6ee907d15edfef9ee4254be7709a0c5f1b14501d04fbfaaa1054ac0a5917bd7a0653e694f8a68097f1c5e6759dacea5f99abb386ab0103d7985068b555940ebce9560f4e0f2cf742024da1ff5a719a5d1577142c49a28c2ebb88c4573981a3ddfa914275aa5af857da7a7acdd9f3052d0aa56395c4bfa36b1ddb34ed804193fd8fa4261439aa0ceb668e2e74e66e5e2513b2163d5fc2111785dd53c3b14f4bf54dfe5439c2fb2a32f994f3d30ceb2352b103b62dac5df924f5d8c5bf9056efc9675321e54cfe655f7bc2c1a190cd61dfb23ff4e021b1e4f0f129728a6d5212572bdaafa01ad7612481840ce1073a51f3e388fa87592b67c584c55e80d0bc97abb317e9c1f913863f839e7654164deeaf4922c3df53b0c6f61c60de0a91c049014924662b0b724b72a07c6603dfbc006b70627a8a7115798027a66b76ae0e3a48c723df84668c154a6279235535cb2aa78a5843fef54f28f54450d2a06c22199c58d6c737ac59fcb6492fd5bf138ce33abb716b78f48707daf58b14252dcd9875adf90fedc058a4a99e20b38b1f6e1ce2e9e330383b0152301909fde4c9af55c8a15028ff78f8db904c45de1a4d0e8a8f4d5939bc7f25872be12370fd15a512876dd31b9ac6e3a06283957898f594c91966dfbddfcbfc9a0ef05d0c88a6bd0fc0d4f3d279b8a096a7844ebbc5ad35753907a92490bc026f60493f8220b7001cc4e781c925e7540af0dd80d50641d7744d53fc2043046401b44eda9b9af1d80eb4151e59c3d58f78a5c5ed4b7f68c9a6a8fcb18b5072b560a0793f69430b51c692613efee0fea28d219e336d808f80a8acbdbee079a8591ac0cb09981beff76d1abfd43ba8d278616db1f38db5b27f21a67fd7acda2b60a4045a23de072ae5c7a22d136f658982f87439b40f95aed9ad54e7438702282c0f6da20d0d061ab7d90e17a3a346cd4cd427ae837e6e2841a9c744217c4b3b30e33dedd95a09c110c1fe88d34b6a595922c0c315539f3ed10bd0d2184bb531f69cee9c4437d3ee81e9c44867aaafb48e7fc0027ccb9fd9a70006b27df13c919d9187c308c11d2dd0777803023f513b18f1f1facfebbea046251cde4d5fe587b57fa6a27a7dc5ce498a52bb139e89b1abe3faa6891c819a8f5813a4398913a47a543ac8c9912f32bad10e17fa4a25305ee09c00e21942e7c5ca052d19588e79ff7a81b1083667b5a9188c36b937090a10f6ab44bebc67d2f579d24587c2422741b402a0b8f6308cd39005fd90702bb53471f9e2406f2f2c5ce206fb2735d5d4cb5892c0267566b92f0882c17668d7bed68ba868a8498ab93c4cd4a8076bad2d334fb1b667af7ff8a54ed5279a9492fe424414e035b455a471d457e01ed857e504f5d8e5a34da381c83c42f841c34e0957c66fef44194c2b6d67c879639e2fa05480138101c9c054b5c0ce77200c598778698fdf1114ee86d72178db2077dde209d8bce51d9853c5ab0ac2bbcf44a379702f0d52d8fa3a62d69bffaa97b7d32391a9d2dcc05e7e224e003540aafcdf18fc1bc6d50873d16d8242f58788549a1995f6c4b8c202741dc3b2775b9c2273825ee271f1ca736ba9e9fcbd724a2716510133e436dc81172cc811966f43259e01746a2599a5e859d758ee6cefc20b431539e65064f220bb6758084c7f2106e865b257464fa3b140c26ff17335b6506f510a7ae71c81e4150b8f2c41a1050f10b853af78bc0c9a3059811e4bde89bab77014e376e3e8b2da54ecb0b8830df847aa4f40fd702e1308c8c58d983435824cb5df9870d2cdc64a51e48dee9af079137106269125b0ee7d01369e2734d3cbc04f46782e4964f45118cd9c693a4e0a6fda46dacb094428baaedf5eb721bb5e0e8e3ff991d252d43fd47e0be09844e6031b05f061291a817fb1b665e8d01e37a24abfd3fe10394f955133b01cf53159bd8f71036c83e5d06c63f147050b35ba9d7bfd5f770deff760cf5241cf4d6fa2ba441deec30600fd74b7b6719a65e4ca13515009dff2c295207b8cbf1d40e301d2296f9824760dd3ce910dbafbde26f98caa2b4db14712aef0a6a81dd6a5fc8ebef80e32c4dce3991f445049a85d4e5140dc3f07f3e66a9c25530f7c26a13e88a05b200460a23910be5bfe350c247807710d93a3a8953756ab04e2e12e0c3e7e82e943b70cb6185d9b114d3e3ddf8946504a1ee08adced1bd211d32b4184f4021b3c6946d4a0cae0c7592563af3d0e9e423222d8ed83a25b1ce33e7ef1b4962a19fce8690afb671efe0554192014fbaca09d14d6c1da0f42ae577e878143d35f039e1083cd2c4b6321cf7a98f9c6db4071f5c85c7d4c018a2221acacd6dff00c4431b54c1d84ed669ba05297ce40836c8e83251c8be15c5464695c3b60c7f775cc5f6abfb9b304ee334b062d5677717ddd2553f58277669746a50c0754e4fb7ca452aa0c88f429b9872de4c0f333372bc38fe8a00c800ba41e6a01f2c668147968d29e8d24313a9a47885d0e202301530928879ddf464719e72495fa27a17f9bc791841e542600d6ddc455f2f6193de31a865ef431444c7de5f5e67837d30ab19131ddb49e873322b3a67e6b92816af4bd18992ea8802c6ba7b8e53acaa06584bb6bf540066a7a0ffb88d7687c94e5bbd57e6e81dca8b6cbfcf37611e9058178984123447a122a59e8d44d6351cbe7cc8a7abf8b02750a871237106632be62671b5335604feb60b63bf137be97bd618913f91d1d417649047ba24487f6692f54688806b59d0834fe90d50dac1a2d7f827373615664f24100d436060e33c6eb018e14e39f16eef21040391e3a418856fe654ee5881e5aa326179bfe0f3339451e908547e776ccc62317d0dc19f072f06d56e64917ce646ce271b4231680e681e9a12e73ea183c36103ab823fe52b98c4d377774599e94fd6a58590cac57335d520841b82f07d70fc6abfb8f0613090709d8d938e7873413376b53b1c700ee829ac0b207f32dd80b5f2926af2a8e936f84f8ec22b577dd0fec0e44d20d1fe11072c031e6d09542d69e5bca38e64f173684a031c7aa57bee8fbdc376f3adbd5971ec4c994ef98ac6bd4de7e9588e0cf91c9e2d92d31c60fcf9b7b48da41334922345f9f21de65eaedfc697db9b0a6cafd715d0e60b69de42ef34c8914693532039bf8deca86f55193e4073332347b50e630c9466e915b8fe22577c70cca8105ac95a94070f45f8f5c139295e209c1242c70990a8b98d1bae71ff4cb710d1c9d6aba4576a40cb102c457caab9ea4f48bf92c76aa0aefc8d8f5283adb7b716f37937db4761a149ba253d4b40d4e1cdebcf5a2de70a75346444124d222411f9127182c8f09164533e23da7a526a2e58f702a4efec876b2a4b8c27bbd19cb5387062c4318efbdef2370a0d9e15abbf4f5148bab2e5a4cb0e358824812cab2c92d523199910338eeee771243aea1e32b86d5604a3e8d388dbc5f84a098b9eb2dea9af9162eecfb77dd6fb41ade9f246a28c80b9bda1aa5ab6c2b345398bbda3c028e5d8180335d30f8e024279f27d41e1e6525de03ad49e241b0f90266c8758fe45b81bd8188b7b2070207d31b3829292bb0c6b60178406fa4059b0702e5582fdebf1c45c00b7d124ebf25a9586cb6ded1aa961830f68657a40b46e8fa023779ccf8558d6d0c113aff7744fdadcdb871bc8224006f3a8ea5a9f585e9c1910d2fe4a2b6e4fb120a74194016f1e80f1c4d68fc5bbe5bbceb0ffdeb673bcd7f27cc3d37fb6e94e83ec43d6652b183bc82002b09c180b6578d77195f2d4dda14d9f883e9596c03e099dae869003ec706b9ada5cfef7e2d8f65cb6a531c94099941d110a20092c1120f801301a0470c8807358e0f0080e0f598134b080160146a2d75f111c2bde645ce15a52af0b6fb8207c42be4c3abdb8b8df54badc4373d7bc769b24b765210468fe1c5bfafc4552a458f75b565c05d25e68815e6e2245cecff21f25eb64aad346025251a45151fa446961d83888e2142966413ec4dded61c5f9a4b57d6bc2c30d3fd9eb85fe6befbff52a7789d1962a9c7607c3f8ab21f5db857400cb40c39eee04b3d5a51ebe57cd2d2224957b458e452048ca35f759ad8ba4e9f4d833fc7b92d78ebfe13891227aaea34361a0470158aef84b8066d47a63e1abc4289418c8210fb4e077049308e5bb063a386a5a9aabc4b14a5dc68bb5ad160abe103d73a5c8489beaaff67833176f0538c0c079b24bb343e670413bd69e9ca1acc90b653414703a7bb34557e2589e5df9eabafb6f149ddff824d3e0efc0bc844593014d9441b3ee5711754ab6527e15d2000cefa72b49f6e5f373e853012a1c921a538995d6f8cd955356211ea61c8d734374f78e219bcc7e0262b7f2a90c2c662e51da48e249a0b5e9bb4344f2606a1500fc1295b1f1278231c2ee1bcd1e55827b0fbb1161e28f84ee988c16283dd0df55fa93909217cdec254daf837383f6bbb0ce95b5d206090f08c8f3f39eb5902b39bac1c41a7af6885e4af71f50829262406040d26f3a5945ac1681d359f4fa35cea29af7b28f491a2a6750be08a376db324e960ad7acf35883bb15951b8d3456526a587cdc3388a54463aba22ae478af64995fa1b1d2bbd10ff8509ef28948d81108575ce8ef83ac83ca78a0b21c4808c4ba6eb946f51b3df14b0678e376c011554faa1f84f849858101563572218275b2762077517c5c6ad62f87fbd5a0ab5ee08ad7d3cd48e43baa33b04fed2918fc0362e6e28bfab07a8356c5ff42b7f90f8ecd1cb9951386fc05cbb838e817cfa9114cb362c7e37a6501554380526546fb895de85b5990f68561dd8f55f6cac6c4a653c9674c5280c94304e7edd2122bb4a7a7d23329c623bff20e4f36aeda53ff886646e333a9e29e3850bba511fba10f4a92f5fa4b8243d709c2cd34b2052c3dd007520ebcd41f9312fd4a328c9918bb40e9844148e904e4910d8cf7d1ffaaf12a9a0c6fb7be4b46ce863a8ef608c2cf58fedf13cdc6c120b2ee7d3367d739cf0853a8e10b075d20634576e119bd3e10e4c0986585f53d6064bffb8d65c1ee0f4910068e37fc6971584cbbf07ed5a98015a5368a8f53c2a869cec14c7568fa15f40e602556588f953a98ed21734a77e3fed49d40887b6dfc4bc4bdc96c517412e9d27f9fa8e9ed15639a9b5c7c275d4571aaa2ca1325618c034f3d7c184f8250742d75f253097d444887485a2114af49750e80e3c7fc15f49055ffd464ac2ec710cac8ba7621bfa9edd0788ac66a1e7f77b400ea3fdcb4668ac6dcb1255ec74cd488572f1e6a38daa9bb29faffaabe900dcf8c3bb356127f898eabecc1aefddc3c2018609d0a88f546cb3256af58346c42be611624651d5c258d5043433ac08a82c547a2e21dab8ad445d8f1ede03de39da6f15e72c10ef86f65b0559fc417dd82317c9367b634658bdeb4944ef0558ffe4766ff2b06258e0bd49833978049a5600f50286ec1c25d206de7375d61a5836d44bf2899b865a8f9ce07067a14f764d3f53490ae4bd21a7ead4a2f8b83daa817ee384b2744bf067ac51af1447c9da67be1a9512617a32766c0ab74a3b691c60b9e2cd270ff6590e1c931ff45910f85f3031ecc1cebf2ba8affb8f4777d6ab29b9d8265bfc7391fde904195038cdc34f6cd758f1c4cbe429683faf23f69538b25b8cec301dac9db99cb7fad89f0c23d50185dd2fd23ba17d9315fb6f9d0df56dc9e2a68b1142eaf5e1a3b6c232c013123f7885954ed1e408687328b9ad522fa1664962aaf9e89391f062ebaf346dda66a54152e364f3163a3c713244bbffcc54af7d45797dfc2da9da12fe1bb5728210e873352236c9f771667274b70a4695447c515b351ade1902303a69fdb162f7989985a74d872f04367fff83b119eba2802eca8b16bf72091ce53730d447f7adeda1d10723aad652d074a05b6f21aa2fc5eb54594426ed02940524bb7b8197686cba8b2077c5b2783ac64f506442948833cd3c6be61376f8444e2c72ab03918a476e88fbf7d1381bfa5a5fd628782cde8c9efa9e22d6ec85e3244e8de1aa23d37eef50dca28d7702bba429512cd913f2c3b57506f6405e44b2076526a02633c0a18843d3eb31223006bc7fb5b09f9f64edb6d1ceff1dd7c1b63bdf54614cfba52bb2dc696335e0a2f9a286398c5d58c93408332968a61b24838cfc606c97032ed8132f2d8328a4498a576be85c4b1d688fa13d276891f81b9646fc415e99d3229b954df2130d8a7570411ed13403c06f03c486e86a5b5f6343a6a5b05c3be5739c08bb9020a80ba833b49113cbdef1f54101c8795838ec9b2a77c7d0120e47fabd091af0f96c10104f3ff7b0a0e625765d4792fcbbc1f003d79c02f7eaa2b20a6f23b009f5effb8e8b0d891332218b18c2f9ceaa9198300ae9ac57b5e72ced00ac188cdb66ed6d3c5b0ff3e04157b56a8cbd8fc44c7cc2f27dc205eb9a0684bdd2acbbd15763df6f04bbba53dd6775c8c195abf740f08d4342a7204ba82269f14bc96588b907e6cf5f70a6cd79f6b0a9d0e3628c4549cee7a6e09407ae94d51a46e166c6726cc98a5e8344c47785d3729b676f5291640c62780389fbc8ff88da23d1c2a5a09c44ed5f22624b77767a9e2613ad1a001efe5abb8e5163726436aec910c32c3070de08f8277ba2cd273c86a6be31e36f3462f1318fa569da622c4fb78d427bc415d0f3f2c92fe2500e438f959ca72fb1e54605fa8226f43d708e64ff4cd5ef8889f37f879b03cbeb8ab57f6b4a152030073a011d3999f822619cc3b994748a23f264729b52b3d9c7cf15dbbe4457d3d66447f800ae754bfa5ed68165a12e0b60e3de70c232280b3fd9d51b6f1e30342a22db0b46e45e7e620cc462a2c7490db15daf46f1b62aebb313d76b4c9466577cf369a9ff3c4dfcc58c1cc6f9aacba9c764db42f91f662ae92f67c59c73320d634e03444e90f570a11167f7b079dc6ae8262d72fbf826e51a41bc860d8d677087e19befe253bfcd94e43669d5e0210ebdab61cf00b7f071e6af57262dc2c0cfbf716e694ccfd61718836ebc859ab2b60137562699aafb06357b94e66a14502501d82eef00794da35a1e77f2a81bea7c9ff198215e7d95c230047267f62b6520a507e153a710ed2b8ae88952734b8f0c8eed8dedc4cbeb3d728c6e9665a12f32f462c0f49d1783d583e6c1a5677790e07c158f52575f52c318eb6d822ea74446c9e22a6d9a33f614b9bc36c1b1517bf83500aced7a02c2e6244793e4d7b53039f12abbf21d7de82d1e2098d7923168757b3c7335edc85ee67dec9e2a07a7b5d1277d179a95b51c4bb5950d5ff97695113977ca4000ff6453a8ee8d97df1ac185e2c4ad279ec8b6fac24249572cfeabbc2766f0fb2a14734a0b7e86a04e4c60c264de0c5872905f38e89dad5ac6ddfe7fcbef44be10f919e257514cd7165162b867ad97f40aac35501d22eec82537f1bd61ff88d3efec0548305651e52eb02563397cb5b4f3fe6e615d503666902181930612765f9476595a980ce3fa299ebc7897e1715f94ae628c4c8216ddf4aa757147ab9d53bcd656c7e98178209e840c41eb2260ab698b41ef2b8e4fc34e3943bbc180b562dc629d4021b3826fe0fdc2329e8568ea206755ac4c183711d43250c0b124c290454749cf0965ae0987baf555fde10a8b1d3036bdaff0629aa5eecffc9b1350369c065815dacc821a9942bd5bcb9f93be07e2dc24be79478f13a4cdbe76f1d88ec8d4644a4300c748a93f011c9d414e0fd8657a8914008ad3df536f306ac8650ce25ba8858898a29fb47e9ca7b035eed2c44d1b58d92da949b03a1f27dbcffcc7a2ec0505bc8a5dfd5538f82e3136f1a826943b5c5c4726d676689786d83c0e7e70d0c848c807a1ef8bfcf746c98c60677274e25806b1101f8f147911229d8c779e9f894e3b4f59ce3ebc9013ae1ec37cb1fa0236cb63de633144247c548d854d0b78170a50f2465c56460982bd3125bba24608b2118340a488b066d29e1b94dbb8e981fb78474c1b8bf5bb69a770e5ff15aa50c41e071eca4608a42f84abea5fecc2215b72681fd04fe38a6e272f6218c19b0bf5b6f9c15c3fd8a5c5365d87cc5f81b3b911ac19a6773acf3f323add63ee392808c0767095fa8302741a1b8f7265f2b2c0ad2b6404d7b01f920042e91d0b752e408cd350838e278b804e2b1e3be82f97805eaad5350499c08aa0b1d59be2234ce546f7c14775eb1cf7ae42b0b3ad92d54ece164571d04b993ab2bb1401175ea7d4964fe0c154edc22d913987a8b2486c20ed790e8e741854453b5f3d2ce2f5e5080a6935ab1add43aecbc713ab1aa79fd9ce7181eee5c2ed4f5caad0670e3a93ca71cbd9351675109b4ce0304eed10f14e6c49abfd9b2cbf0c333f99e90c7451c5dc8f6cab681646a838849c7c315d32f36b79dae9996339536f21ca157fa911a5b09dad237afabc9596fc4881ca92a383a46106c693ecf11e18ebfb88ac0fab7a4402c5f8218a743627a5c873c5fa354f063101bf06c567fa0707eadb8dea372f163a3b72f7e3ad03f67aaff657249f992dfdd1e7efb771267a51a5e2e30343b5f8c4a850d7fb394b9b65c377afbd2ecf661253117a0bd3788f151090ab2e50b1915496340d1256e8c93605f208cacca98b48114b5c44ce20f3eb43d510460ae2854506175ded0c51df6f5c11501395756f28612cfd3b3b7be26091f661eee36ef42752a33a75d450af71b8860fda5f239824afb849f6eb73311538c10905573a846a1dae80efad63482b1f282984a23c20f8141299b606c5874399c17d9ec438dd80fdfc7a42a22aea870a28955dfc0966eda3a2f55a13be7eeae96dbd8a212326e7b46649d27961f5decb0d86a7d5db9a6ebcff42b7f21c12c50c58ff93c69fe716f807b8b2406573eeb013acf60b6b5ab3da5b03318ea4eab6a40662ee05c8b4c7e0ffe4f9912331089c35073942106e37e2342d9c3085a6a23791511a212a7a9e72c9e2ebd6d85525e25abff48c8bf2eaa9fd9e98487709671d6c2ff974d75ccdcc6d6ea6c64789f20d22d3af7813692d0b0e9b6381b894a42e23f7093fcaeda239e2aa6f04bdbd4ba06f5a839acd7f013993d20b4bc9cabac268e2e14b3f1efa6ec161e4dbf3ca16c8dc253cad3d5a9ee80b268452c57bf9a6a4d2c6c8f7dfc6df2101f72d50bd2121c78428b1ab959fd47c19a0df095f038e1f1f34bb2c2b23044370f649276041985dbd7819079ec31431844457119e9f8d17c2af108f4a3c59418d3883c0a562bb16c7a27e751c84fd01c22224783e8b97b64b52ecf54951fb179feedf9c0fee81eb5c7c408f3defa122f7e151cc5f36f616d7dc7df42e283ed9ca16b082f8a27f6aa756aca4eaecdb1abf0ba885df91583ed95d0ee520a54479e20cc97bc58c4146ceb132861ccd1d458c268c1473a1c0eeb1739081f8987c80af11b83c6c71928b6d526345b1841361f10d1a5193e86e621c28d3b02e5197fd3e215c83e5b85c8f866c64cfdfcc44cbc0d915866bc88248b433995a994b33d5b0ef85d15f7b7e2eb23c8a01ff932791a442f183f6f7470a0dabc01cc91c9a16859d8c27b88fef51b229f529d36c2f077a8a810062dc86c1724a367b7248347255cf9cf25f6e24b16d49fe15daa2b38ca1c11607c6b3440e2c49a767d04cb93cbf3fa2200d1f25582c18cecd80152e213b251e889675691598266f53a8ee37b5e662c3c582084e3e6e91fc0e9fb39a25f5bf96043942a349c1a0da325e3d92aadd34175fccc4c0cd0fc85a455a71e565dcd604fd1174545a0e5a75f3a303c6d822e713a316441147640d643b6664ff8ad137c5293f2bd7f1f99ad7c0b1b65e82b829ad7a3c13144fe2c784fc9b663018c23e3d9484088e86efa7bbe0631f29606b7f77e161451719e44efbefa816260f49e0048c8723a9bf2094aafee6167194017698a53b94329cbdee40b037a95a1474512221f52c735f62dce4988bd177da17863ea70fe3a2dad19849994c92a3b130813cbcc4823b124d5b761d6b84e6990c96ed645e359ca5f901fab0db24622ba99c10f7355529f0ece39cd9dd1f26eca3e3c5a15a81a20280149f3a3cbd119c0d433ecf2bbc690979ce86c56fdcb78612a8e2b1dab990bc26afb669d8a3ed96094e209159c2881d012111b37797ccf7bb465971e4813f99096b6bbe61f7efd00d59b3cf9dfc0acb94ff0c9e5ce1531a40a9b746c7a61232ae7156049f7e2b0eadad6ec12e597a9bcabe3ae9a89b10a8409d0a4f85db2d38039a9208355560601275ae46a24ccfb3b97d0f09022acc0a780cbcc015893c535202641ebebd3b426ee98fb067692b3e15a1cb4fb38eb0122c9ddcdc98a900e601ade7ba9a5db7814f8fecf5682bbec70b6ce27f39298222261c495f09797337c78077377f494a4e4badf3d5210142ee1ec657c4f546675399b92c15401bf5ab92a68fd05743d34e827193c154342abdf5caba09b433fd2a1408557e8147a0d715480269e8bc7bbb243814c632b462b32d827477a32ccb784a7b87939dcbd9441d0435c14643384a43a02dc0b311cbf495a884ee428380dae84e0196d84ca07f7681e11391b8d818c71f4d8ae80ac0428d60197787c4abf0a5e6930f9d24f5770550c873ad2b0b84c464af64b28c60f01c9fbd1e223c57b25820099ed7b28e225114c3ad60d4c8e981198a6d4bfc7db83fdfb75c37c67cf240cc69097fe7552c6fda1d179ac240856ce908278513c6e334ea40ee1c6b024df0804ee0af03a142da0766156c2ca780aa0058a06c1d191bc4b8a82bcae819476edb7f3852115eabf60d05fd341de6b1b5b9a29141dd2eb9e96182767f30c8938a73598075a16e78525e893dbb1899bcb19c1d0da19c19402b553072fc8189d27387d8eecc8f377cb31534349d088d3f090c37f7a8c70ee389c2741a144c2d067dfca3ae7a4178b5a56a8e648963b93df691d12c4397b16e507f294c65041b380b5a497624fb5c9cd9522dd08f62d0631dbbe5503bbef81c31472fc482e9c71da6705902576b4b718991298ae2d12621654d820ced93e1d7a0572022d7046bab266d498ab1c6c1aa618f11049779a536f3b42c7d6b926269453a04680e4a9a006e5f9498d91bfec680c564af38f4c1651d094de4731234c9308e5309cfa22489aef031b8c5b4464ba1ddbaa32a3c6727335e9603bd491fb3f07caa4cebdcd13e4959667e4622e0131ea476e22ee78f8adc404d3b477ea5b23706fc37deddc64efc62ce2003fb0be6f2ee13d97cd798eb75b72356feca9bae9f90bce546fb44e5a093009dd3f7c017b34ea1a782f7b69874d9ef27e082e9bac1105780953186ec2119f3eecc273b7a058910d6a234bbfab080dcbae9e5fed752a4a553515776ec93e4b7dcd25f10bf80da1821e3d5de3dba726c9d2bda634a284d9bfe841afe8038d3204b266db6eea0931c50f1ac8ef0d0916c168ad417802a621826ef5291569d27e3f3e6f344f0935f87d30afe05ae6b5a637e8769d6db4607a467ae2cf6da8a9d81191f929d2c81c351fc037e7d376f134892a92063b49c364f62565923a6e43bb160dc0355164e852532a2c55fcfe6928aa56e1cd0f269e238c3cbdc752cd28a953b33452d1066ea41d687f36f70415ade8a0d078301d1a3ac4d3bddf8893fc6a629c4401febac875e359f0eb05ead779876b93d3f67c91343e155703d6449bb5298f13cd028e25474f8a37cc837fb559bec1f316b336e3920770d2dad474ca385d666d1e4dd5274e21cc1215bf57a86ed985a6ca6c16b2e614511cd572831517feaa97d369588856f441cb3173a35c5e646de42ebea26fcfa9f89c481eef5cfa0bfba61981f70cfd9c3b6675e038e327e738ac0020248311e36c135da3c9ef4671d895d2ced26ff7aae981640f26637e49e50ea8a3109ce0686643197046baeecab8f142c780414e13c6055d3738843ca3ba9a7f07b99c89d1cf3c06aa68538b18cc8fdf3793779eb969dd6659604eef4c0ed44b08a0b34f1f3e9d74fa0490b9ae8373c01741d5ffbc9010a0f9be6d9e4d2498f792514bbf5175152c4d8dc0cdc031c7b3cc32e2ef7039ee13e8c0bec52c9a6c4f2ee26bb6cadb008c4098b0369a8cb8cea487fa550b55e29c3c1f08ed0b370a7efd4b586006b8057200cc97039ba2bb9082ebbeefbc47066fc48ec393e3fa66a9ddfba140f10e7831f5a2e7eadddb2f01ee8daad542367f26f8fb0491ae22f9d462c2975d5a2534ca1b40d0b412a91b0becb42efb59937b3176709300b45e7c54195228fe7dff425c637a278863d3267afad499d8108a94611596bdf5159130bb5185a5222d6e7437e44635612102f59714294fe116b3e45e4d1103f0058beb011a8cc877ac91f48c9ec9cd0161b1cd59c7d3339705ecebaf227c4dc427d6bf695309606a9e24ab437b2b536697414bc438098384bd934ab8eba418fa76652344e0b8583a4b6ae86362c10fd05bcdc078c9b88d42c2b5dc0296ec1bc26de234daf41a29c804350066900d995e14bb3590885b6889048c3b847a51b8e853b1e254f8a737f4782f35c782342ab5fc0d90e6d912fb913dcd001122056df071047962805b855dc8a5943ceb34bed021924eeae0bcee39725854474c3930682e33b1d1304d8b97cce081abaef8e5f4958a0e84ff60c1bf504238e5b4ed530c06dd197644ecd8370c836afb68ebd2fbfde2f8840ff22b960d4f230301a283737f079cfca65334f65ecadff143285dd4af461a44a29ff21d26e1e673bd59cd8f9fe03afae3b209b1b163187290f8433bd24bdfb2254060307fb025e31d0c4ea1b028d34dba57d06fa58e4a76056b45d70a0dc084f6fd3b830f8cc6b0158afc7b79592e60ac44ac451cc299892ee74a2df86a3619809b3d6d6eb478ef5ff8d3b2751620f8057599920700de7b5ed273b25a140b9e8ad9d3895fcaee0c50b005e97aeabc8ffb2300f90714fcd6fd3562f8591fa12ac31471e2fe434fe48a7b869e8017f7077a2247dc33f42c76cf07a5e3b2344eaab492fa4f4278e2a010470fc19313944e8298fa170110cb107cfc391d83bf04beb9d69272f683b85088dac595b2ad1a996c7230b70138ae9cb4616b86c678cc9cfb3f572494413f0a7fab0d95202f366c47059583e25b5a0ec863f8cf7ca964d7a0c8b2e7f01ac9c62bfb863b41b263e0efeaaa85aea7732b65203745ffc3fb7da994087ed072160dc03a7245404ce3740c5a1bd21fd99e6a95edd02a8ba7f41ca218dedfcccddaad5071cd601664aff365957cf6d2dd24c059c2434ad9894f2b93695cd2bd5a60d1e831e6205058c0db1c9a15edd1d0f32d72f20d3d6f4d0a20566b907a89bcb78322e3fbac1a2c1be9be0e537615a1c476ad91c525e86b95f7943290262918dc31b4ff1542d2dcd05490d42c9e93c06eba1784e6464839487458ef1529c0b3e210ce3eab4340ff3cce05fa10f3c0967c4ba41d7c9c5de3b1ad4317867136aa4a49bf98530463f51030bc2dd55c28f376078761eda42a39eec07901fb1d3d424cf79c58de07338d331722e7a0f9a50ef947aedef83637aee5efd53b1e4bc2320a7564ead382749a1eeba42981521e48b4c65b5940586448981fc4039ef9170145cad50bbafadb49e0b7a6fac0a517f9e240ebc5f28680cf61ac744e5ba507dab202166c6bca18feea4c872f047e5808dabb0a70707b0c7857007b5722d4ed1ff51b56ca583f2a067453d7d8caa000a3e2e1ecf01836351717f04c2a5b235aa72e81f6334849fa5d82121a0e6485489380c7c6106d24d1c9efefb8ee7ed9df823d12cc73b0429cd046dd217f8debf289d825403dc27bc5d7350bbc3f2d7bed1e433bd6b0567b69b42aa8e92e02da2fb7ddb41d6326b5f7aeb891a51060e7ededda130ff8cecd531749c788b57bdb46c21ce0ca0521c6196dc8accb9838de2f6afa770d209b27724a8c96b503f8fe472f7e48683a66346ff28883a4ee47fa777e51f722cfef327a25183a1f0d23a75f0eea472dd2b93ea7ebc519b90cfe097a2778c0f486d5398ab60a7e65bd3068ffcf17665882b0c38c199328865b85663536b368637339da501ac17d09f84afd03745d0e68277e4519c1c7426eaba4e7b4a450fa91d044140f8fe6343c08580955ca57efac0a8e35d0c5167488419eb204c9e8adbd6beab4b83674e91664f99b00ac09e37136f0d122bb05622e9497b73b788b5b4c7553a0a423db3ccb7465f30bd7568c9df9feeb5a442bd87b0cc619305541dca61cfb74f85a713600232bae0d079dacdd6bcfbca5687e4ed62044dcec65f1aa7b2c48af84fc70985c004831e9dba88f6ef09b20516af284a05a311d6f317030e463c7ac5a62bb29147470af5cfa82a97b81b43441838a0bec624f3f7e830e8279e1561303903be8bc25279598330e6eb6f62635ed6c05ff4ae530a49743251406b10de6dc1d237aff14700d96552464be6d4fd9a6a416c49d8cf99f499c9f814d5d3f28f93c43047678507a1037d888ce84748c964a34bf9bf54962e95776691b6a70098f85d9ca54842c74306f255aed15f5467633293d4f481733a25690861d731d90dd0a1dcad50b55a24d847d6ed158e9bda6ed8f08d8ab0a61ca62f358007bd041f3f27944aff3715a27802d7707edfb6f43c147cba4af5df8eb0d0e76ca6467deb3c7ddb23d48949617c54e5d6702b537df58e10ce5b3360e861161c8b9240fd8a7063f0297a1fc146589672321d73230a3368028a87c8abd4f3106eeb7eefc6930c8173c12fbc5cd85e8a96594e5ea0d34b0082d9a3ac58b7c91dedffab88996429eae7a81d826daf5c25fb8373b6c7d41ce5518c5af08030da1cecda8c5a681f931abb96552035981e582b3d33ef7bf1cb72d0d8264937c4c7e6790c0df08bc115c372c3205bb58daab7c4e8d39baac9d6c2d2e04bb7472c9a73130b298feb8f5d87ce79c13e7d710b8028d7c415a577ad6d4000938c44a8e17583ba5bca0e23d1fc5f243a3039ba49d44c33c60376ab1072c1a915c1c95d05dc8db0ebc0d171acc2e073f23741a456216cc622739ab4757333f0f9bd7fe16531e547fa9dd205439013e2e44d7f7d24605883f70291db0b1ac65c28df91fc95792141bcf1477cf43185eae725fead6b55170293caf3f8275254c7d302cc46ea03530ff0b64723ac650d080e9b294ab366cbb1d081e54351fd7d9e33e296ebba69424a8bf524a55d179f78f06641209aaefb7f110bbe11a6f0e2a3820d438833a2602ae6db469f0d42ff593c9d0265f72511966f7fa1d06ca728036a6f3177362a965eaafcf2659ec7829d60510560fd178b0cc1d1c12cfab88fb015e2cdaf7a6fd660b6eba9a1aca2912001c091d9dbc8b522469bb946ea3c588ee0d87b7a1c00662e8ce99505c0865c2cf1b7b122debd6e9ac4ff8b93347974bd0ed59e873ad14ea97bd934a70094a3d1f1e139dc3c48999161989b096177cba6bb4cd6332d06f4edfbb066576bf7dd02f97a2c876c8f0d2700b9ece0ee6b06f2109a7257cea63763ec57eaa2877c8887d1301aa3ab468743aa8d48b85c6cd99021dd7c77c2e24ff4a99e29429d6efda3925773fda46c7e304908fb09c30a69e0947786c28cb08916d0044256031d55241ea94280f322109b0a13dede2bed550e28cc0b003cbe16f439b7d7b94602a64e35bd8653e6bb1fc8f495ef5de59915d01de6cd087d49ed2b36fd78994397ee31041f6360fe9e93c56c194a6b2e35219cd56d62fa665bd059648c2d32c83a55184adb84e166aa99c870e4ef3430316e0344dc509f0c5669c215fc8218d75569660a26be013a88092b9f6c1ee3da849b6fd113ad1eb90d9a7a92916418ac6f3dcad499c3f03d659ba967432a63f776829756c95af1560b9d572c3a343b17714fa1063e54637c7e032c3781a5418101edb5e20c28f20c997e008824c2da0de48f29a1d902e107d3792e3cee0ad1783139f32cfeb94f8db7f51ba2c63c7e8fec86fde5a3c786620f22a649bf88e8e2f6b71cf4b6280731fe849fb68f9e3b579592a4bff4beced32b4178ee8f832b406f44848a82cb4a5a82070bfab1c0376ef484a5a182a00f524860f811c987840c268ecbe88b0d41b94d56db42f4f4c645cb2e207bdce81d51a2d48bffd19db7ae3ea85de77a1f7e09000329906aaeaed723dddef2429977136c25d3b780450e26733056e9a6e17f8147f3ad357ac9393541194ceee5a4e02130e37fc54705db7070278a1b444cd6f5dc7a655e7dac19b0f705ac3f6c68af787001bceaaeefa0642c5146e9a1bd7d38d19750511a9d3f352bbd1373e8492b62e7e68845eb3a472d5d12509dc07d09ad9c0ed9fb835136f01736e8b27d69ff4a683a1925d8f201213aa75da5430b0e2974d5385be019294e9687d1ab833f6b142e864e14c733e248637b11a76cf7441ddc96128e2401f24f786bd081d575b3d45b2ef25dfedcc20a39409b7057c6ed933e5e6fe4bd95da1f1cc0ef1307c712a7f3e74a9de7541470e3c37f030761a315abd7507ae78b6b3746fdde7615a07c934bd4060dd1265ff35eb1658531c6a1858bd729a19d1f7e0467fef5f3630b1b700ef54b11529536817002d157be3371840831b34d934636081b36354c48ee11049826993cc76e533bc7c8b175e6c400073618411ed105a3930bd3e1df4c65f5868653f85c4bca10da4a5697c3fec1ab3891b406d89f5e6a268224bf2848438e8ef00e7a02abf6c28a0037a093c2858114321915ba4a646642fe08cf7814e38d29e6a9902333a8cb32a3d6f91f3b67ccbee5b4c9c771bb5d793cdd48bac6fc2293cf4125543530384b9054da11bafc05ab2a0a491758b7712342c0b1904de98b5a6a96da4c2aba846f215d17b18ca3d567c7bda7fb8a0d2eed6b41ccc1cabf5f4bc09677c9f0bfc4b9c29a200f21b2e9eed8289e78cefc003b204a4cecc61610e021f1586e53cdd398dfd2446f2920c05addfed556b565713b760e975cbb3d9d5a8ed36066641a610fb26a525ef8ff2e8934ee0b241e5c925fc5308e827a48d3a8a54288921d82afc537c02cbd6dae02a03ba2ccb0b95287e20828cd14a1ce01b4f97143d27773865d4f17a240688f497fd585827c964107e01b93ee5677b99519fae43ea6a4ab64983c53bc0a2a2ac77b53dcc98f55a1e4514bd0757099671e66bcece0551e3ea0d2e08b3ab237820be83785522eb5055afc273dcf72a8960f93fe6914abffcc83ec529b9c9085f7d1185b48da6b4c31e48f2f857650b8e5404da3c1b50f0f17a40fd123f8b7813a7304524c28dbbaa44b423c28f2b37cd8509a6fb8125873dc7476d49e451dc0afce67abfca4170114ae8d23cde8563510987a8f9315ce0419ad15cedb93ea8acdf4aae20d0b27dd51ddad02c5b7517e4525588e7940bc16603754fb977e68ff8ae395e37fe0963b3d2de0f40c6ec195824ac798b4d7ac1d86785d456e24fd258caebbfa1bd917d34530cd0435722d143c966726481e00e6fe82ae5d8e84cb269dcc1289a67d140f8815df42f082d5cce8f6b92fa8633a568afad5730721b72736b3b402b6589cde50f354d0fda90dbd98e825d2c87b8fe8ed24a07e0d5796f3bd7c24ee882cdaefc0a02be7a3a841d382b5393aee779eb07eb86ea5e11f938cfc1f1a36589fb00fc2cb183102ce032960a2bc795f346c6210b1f463135e9d3b059a9714d08fe432864d410d3134c351c3897e802bb14363b71235ad8ba6631ce8857d2f2b0ea3d428d5937a4c934174918eed2bf3a2e15f3e045dded623115d3db8b81b7c12d78463daf574e0bc01e84293c05d9578ec2a48662bef5e622df3cc8b138cb1be9709e851eb02c72a180fd415efd81452fadf7f9e99b3ae4ee75991caed251f685173a63d2ce87bc915ead6fa7d0dc686f3407abde5dda0e398a6bb2d2021e8141b1b5a55b9dc82a2e15a9808d9627f5c675b7a88edc86947852845ca1f9cd496b747764612e784efc1484072b55b84fbdfb365ec626cdac33cff47f82ca896562c46a9f70a68ca38c2c3350d2b68eb59deda71028f88c3a1f1da9b95ccd48ab9709f263bdc0192995804466b21eb57c016bc129d0d6d0094b23b8f25df7e493d9ef643c37255e63d1e0a31ee950a2a07052a3b48e4b08b888960c50477a496c4dbb2f2b9cdacd0cd433e9b73093105722a09b5e91b78c91f0349495c61825a3beeda2ca27ec9e6aebae73af0fb8fb967b8b5f03b7fb65d8b1374e6dabed97c51fb8d33c4346159f0f40c7bdd4a7d96b67790808c8f5a323fffe14cd7926f46b4a3c89dc28d6a1b6adefe56be33110144a085ce0a916e9d102a6e023f609a17afb29f18188b0698b37952aeb549668906097b58641ab1373cdaeb0f9bc2ac592309b9e67f9c9c43e65915270af8f44e32d5f4b95b9c551d22cd360b9dbb2e84c1923c5f4fb915b555aa7b2bb5a7ed4a7ccbc6e81b25e0f28f00e8df35baa4f769367111c64998a29c3d22889cf8165cacb9a8beee7cdeb7218a787065c84aa6cf51f938b0258a7378707bd48ba5c30de6fc174fa805837f07c1e1047d7de16f570e231b92aa88607c9c67b9e8a344aeaffa07abc5c342ed82b69270a03c3c52309ab4f2d8e6727dc8fa34197e54f89b4a52422616e3290e1e740b327902963a6694e00884b6c7fbbd888ffe140026288e401a8e4d29f7870c860506d7bee7f3d222cf37c0ac9effd8a216939d6e3a86a7575a22e8ee0313c2b146b37eb6a0b9bfaee1ef88f9c576d55276a564f69e6024d79af8c118992b41311951c6a0c443756b6976d7360f33bd15a43b3ed294f64e04dd7ec2fe5ece8b55ba28a577bcd91955cd08192a17cf6c13916c6f8e1e639c80fbdc8ee85292330467400f24157d2f6060a74e7199ceb421570ef55c636ded05cca623c8ae3b3981f9d29969f3de216ea2b0f5d38968eeb44a622b76b0d24e5df883dc0c16d66e7cb8576169f3ad32cb8d5d0e2b8834252ad043b7822039036fb1b019214cf8358700ebd0f5dc37de45d795ca34cb0ab6640f09ab29bd084a569fa1f127e52d74071b2b97f18f6d33ca60a297fbb7b13cd76b56a6ae54f5a7327b2d166833a39b3d55a7b7455dbfaab598b36d1ee09c2ddd8d7995aee2ce5688db125f1e7d2ee9b4e07f51be120cb1bc0d95b79ca2d777a5dcecce1d2159933c8001216f548a8b296d59a1a873bd3c08244789c28d3976dd55487c67c3311cdeb9f1f6143887af53e405f7db76b846ecff5252ca80465b3bbbd3f65a1eef97572de4acac6543b2d003d4c7c50b758d9564619bbfcd8eee60e429c792390bfe2448a79f7b3954cec13820096088b25e702281bd0434c38425d3069188081e032c949f1e31b9a3727aafe7e14d21fef1f70897e20ef4a567542ec9c12401903d28090b9aad9401fc566279c041d48b726336242598b8b42da98cf0fa01dce573132157ba6af1d018708b3f41cf090ef7e0d7b2b0ce6c86eb1b6628c38687c5c3606a3b30168666b5a1537d0d91b55c1a245e79aa9c63d09aeaa8545be1f29f6bf0f8e792c91a938a06d1af0514014746d4118e25f89e0019806f9bb3c370a22f9f1d1785a4381870a0453a9e0d1a0e6ac3557a0e7ce70012a1186ccb86f665d781399d17743f2368acc60fbdd566f4307462333324147661ce6366fca6bdc2b0fc90c1bb60800c780114b161e0ebbb35d247e535f264a116a6aa0f0581fe607ae4042a898a49671165e6f1218377b9ec6f7d99e85bf416d98335de0443a7df5a307426629ca04c3280aa2b5303c56014a200271a0e774d385b78ba6af7e0003203fea7dbb6bbe5c90261e323de7f21f42d856e967d1807de42c1c72a0c1092fe036a9b8916e660e38655df283d0216387d708563cb8db61186e27d8115a98e05c1afdc4559f745d420df7419c9876747f55909c8e4896f7cb4caf41e1955aafbb4aa43e865af31924f160829d3a8719deea59d9511bda9817a07f8c05182454ca21dd229900ddbc67cf3425b12e3ff1bf9675292c1a8bc2bb8577bbc87a65620a984ed85d23325a14893280630b2362bfcb3135d1ed676204b5738b284318198bd551116e589e01b3dc104624ccc36d76418beac9cf9a2f4ed4aba3f126d3b4cf5f80846f0db96e48ce31ba47b09a50370bc82009794a68cb698d24d8ce464444b795a86c663cca50782e7a60d0f3375a654a3a10aaab8a125c27e51430b037b4707a9e40d724130200244dfbe0def1d9b767a87fe277d4c1f1051a0a1cbac1d494076aaf8adfd78e7624c60814b53b45c31ebbb86a8a86882bcde2fb5f376078b85c65e4824e59497968c1c8fdcce32c5d6c6506095489b44ea93ffe9e43a7c92140deaeeb5bc86bc8d0258012ae18be02066a08f0c7a06de2aab9a645040754a231e3301287abfeae1b5c5ce5f541675ea11913fc5bf6fef6818ad7e7153f331a50764699599afeee474e90345cf876c11cfaaaef2d16e86e31577cb30628c10575d4842183c73e52f4f20b1a9e9f57267327072d18a5265e310e088bf24e5b8e12796d37086e42fcc196792dcaf0eb67be10f3405d4a7067a0a3c4167f38e1fbd58c09f067d9cf0ba93009e2e25a1c0f9413e360de60c96015aafcef59f322a3273404992af6bc64fc321638c82e141664570a8ea583ec5ec72b1163a8cd329e806a984ae7fee1b4156e77bbb0a252be92dbb13073fedecf613089a9ebd3adb95006437529769642c1915b3aaaac511dfd6ced7673237256d83dad9b3508e7aec9862a52575eba8551f728994277792b4401d8f2065b01521e09e436544b57d8acf178b7914cab1c659484e10845644db36d8d5d80a89b215e37d46929d02b094a75f6b25846c0a38bd05766574201b111c09784a8abba2454a7955c23cd40dd9e6b3f9c02b7b63b0c7a313467078f2cc64497204a5fcf90ebf7f950023bc8e0db6aa8945441415096b3fceb536ea1d66e28655249889aeef62f6760f87f1ccb2789bb5e08fea0da9225ad31709e97897f2e734dd1a71f9f46103d6efeb849bb97c0f6884456a6556392299682a29106fedc06e4a480b387ba3a3a896f0d757f5eee3db80947340b10f995c096ab8649cd00cf4bf0caad4392a68e6232a6def2b48afb0b7b89eacbf44e2aeb98bf041bf7408c502b0f08c6b32d21f1f56278172ed67fb161b8382d71540712db4e2a9637a0ea677ae17ab37b85cb3f6f550ae1670659df942c3b4285c3fba7178a2c74a0559ac71930bff2bf9e02fa6616b70d779a89c28b63c50db3303809f962a288b887cec2b312a520a789bd6cc1649503103745f6f7e62edbc75d932104c0910f098c2d90e02bf333f5a2817a4f48f4dc26558df91ab022c09d259710b8818b60501b897b0d9b4105da52b675fca75f12a9895b19d5ccba6c725044dfe9fd84643a81f2e554c0fac9c5f3626cdea0c18034ea65478f3e202707a40a4bfd7dc29e0ea1e70352a8c6a3c6b52ed2d73089ff2b6f20723dd94a4fb7d72f3f445b86407318a31abebd7002998868c344c18a9ae5ec51056323de57bb6ee8f9c4f51b82d97cd892a9b37cc32e285cc2bcde2bccd5c6e4f356b461337dd3f9351c6d12d1e87eb6a60e5350a342b95044bff6d54270023fb82b2332f8a4b4ce3337935b46e5fe69a085ca11663bf4f829859e376d76ebc736805eee83c8ba416e7791d30d29d3d49235c261fa625c0c45ee73cb6e182002ccb5841f5cc3c2a4964c84a146a66ec26c11fd34016bcb99cfb4b8bc8d393604594c7a12868ec933b31d01ec94ad651fda0c0769b94ddad8145ce2b6b50678170af22dd9461201bc530b683b2e0ff0c97410c912c8b6ecdd80f3758706ec9e01a12c220c1c4d1284a48e6f31d2e01215b405689b6196166201a9265c94c078a651a5502d632f530c05868477f89af5458b0be94e9fbbdfe364a8f422568f07e860cff5ca6cfeb761391f4ad50ef9deec9ff0578a11c5c4163bff7de16ca68a30ea7f468348cb593fba332a835827ea73a155e879593503ed1fb0ba06f01af58a8ddf783faf6030560a8ea02a35d7fe3820c2ae2ea034e30166c078a2c28b5ee5a7417878ca5efb43d755ac3eb1e9309ffed67e5e545f6094d7b58c0add5013b3e4504360bc25a1f63e52c1bb87186819e812dabc925a505325891f9070e2883cfd7f7cc381a55584cb320d4acd34e14d29d5d827f6cee9fc156a22aa649164fedf6ac1d032ba58b33ed7df4b7fa4e1b20e4454d08bce037cafc6d597462c56d00fbcdd89f3185ada7ca08021b93f986e8fe64a6726e91dbcf30af47b6c497ecc5171fef0e09729b5e0a6ccb0a3928ed41dc85c4962b7a9903d7ebce4bd4639d4766b184c8368c6e833aaf847cad99b173282b97045daa36ee9eec6312f521f81fb863ea3cdb04498d08bacd1879878a1beb4b3d508cd47f9268e8debd3effadda33d39eaa83a17f1dcdd62799bc32dda62b2edf8ccd4e51badeae0d6a2074ee1ebb451cc0e431cc5126594df1249b4330c4234c3943b1119ca88a6aed0563b2603efae09c0b06b8621634c076087518a91b17133b054deb45faf681bd35b45e8601cac4ef5eadba46f2d1b6ee917eb033b7d864f9f827070ae2a2218eea2de431a76b85f0426ea6b1095132e9268766427d80c6fcf01684b8c9ba632c3515ea26a90e3c9b26629b6bce2699cb0e43b09ab24107028ce3559f715af1b1782c3f224b32282fc9f5f25e69958a5b85127f8da897c856b31696263a27d57554cd79ce39ed0f5e18973bc07e13e8ca88365da0df90a12a5ff561b78edd75ecd04acf1c41a56b25634eb7a4c020fe51568923691dd5ceb74065aeeee0ac76aee42273c5c48cd8ab0533f61762e66c918c27e48f818aeee23ae80f386a61fa19fbd4910f856ebae3013586df9a8c4c7f83b947063364bf49b18e50ee16a10574d6138b6507f0f831c18ce634782ec510483069c409b6c566abb5d9961bbbe9304d9a05ce9addff41bddb2beca21052ce6c7291919164d872f6f457a48ac0304b5036a86d7b55510302b4bd201ef86d8bc296d48e34fc901b723346f8a735137654faee30e7e87511663204101094352730b23c6c3def0432d46d23f7dfdfde136a81a350559584d290f4a4ec4d5843a9f1fb5461a218410b2a59401e50a580b8d0b55a435e644d7026e13410862f8a512c28a86dfefb7bb1ff77db293d074a1ebfbceefdf94cbfda012bf3d189e9be05dd3f571e165384ad987aeb983eb21075bc2bddbf109f60e36e6f0aaa1e9baf1c9c56c045106f5f8fb30fcbe77f3359f70ff462967badfc659abd0292f1abe9b358882e74629e048e528f4e4137a22a5c871e937ee94170d5db5ad29501c2f65a837d66fe0f649a56081fd96c8aa37aee3b626c172ef9e82cbf5ee16707d7bd36aee230857c8f775dd47b5f0f0bf4f6a71ffe6148925b562526b79fc422cf9d511b9c6a2551a80436574ab34a08419d13b237a2ce46444a23b567905e322c27c10576ac921bedc2ac1abea1a264447a804a2f7fa41016150a0307902c7981ce23f6d6307006e3e6dfff613596a79564cc3284f8beebc6f3f0e0ceeae47e15cae87e315d728b4e1af70a3d08e4fd275a4da74cdded0f0be5fcb92885c845f5ddff8312779575122af6cbd43bcfc8fc596f1945441d8ffd182086c08911f63d10af13e54515464d544687de3aa50297b10360278f04afa1b2befacaf11c0b1eeb7a5dc46b9ed8ddcfa6ab7ddabad02428d0d8890bd32c4d9f68d52181cc3effb564a15ae5e8af7f5fe5d89bc17f2ab836d3dc4cc2dca2dba5bce8beebcf5deb4eb6eac6fb70aa9f675cf825493dfbb26526dfb959542bd8d51e45de39595423d3ec96faddb6a5c087a20f8819f9c226f2cfba3dd715840204060512c3a42898845df47bbae6d9f1c3af28478ba2db9de3a20d4444fde1b6bfda2fdd64628ef036d60db2922965b84cb719c10da1b37ab906eb9c96df3117adce6799ec77909c31fef8cd8a26c23d2b26e99907e074301ac7d5e7b66c09d58ae4dba5c2e57f3fe744f1b7a5a885e0844fe9224cdd3faeef9070871f764d0ea61d11d7f50899ed5c7f4c5868dd68fbb8adf5ec9379b908087937849a3f4ec1564459746e9990d4cebf7ed9cf15b22e6c2817f3dee9e907d48a2353627244284cd84a7f5dbf3a7802d8add6dc33a43626dfcad4dff94bb4ec69ee77963ddce6d42b68edbd6a34b25a60aca5f13fc94651c8b717b190a6999ac0a47f753b61bc41b6e373f952fe356d2ada4a998d060327672207033685bc97cca2a50ee3bbb37f2dc9c223b73e122174c376e1b7fdb3aae63b1d1901b6d6666666666f6ba9eccbd1c4b66e62aae10b6c2872aa1a7fed636eeb9b5ad6d7c24cd16859453dbc3b1ba40c3cbd9645d2ed7a8a4654d446832ab70544e254de4941c9f9434f9bff02fe630fcc2989c767f855c4fab70fcafe85f67823ef8bb40b9abd0338f0f8e505aa68277efdbbd2a1ce560dc95740bb158ec8bc87d1b3faf0a47b73e43f4ce3577c95b4c2ac6c403561744e83a87ccece28727f2228ef6797fbd68fd7e03127dbdbe28ecb0c35ce74b292573dc7952919f28bae817d2f0ae29453e7c285f97af2f8c89d0cfa5f05dffe1bbce778d5fcb6007ef336ecb602fd7b923d1707e77cdefb2fb3c2924bf51f96d0ac9a2a922abf0021c8bc5625ac4af0cf120144d715d57c4953f8e5904a23c137eb225a072e4f9d47d8ad69df3d143bd750ce8034c5cd06dd4b26d1bb7c97a65bdbdc4d8265f9b5442c6c221c1aa3bad1b63a10c04e24bb6462eda07bd88af1afb7aca8b4e79d1c613c4794288fc64eb5021275ee5ee21511f3122b16fa32c0af1545eaaa656031162495114a3c48edab08947c6a296d99922e2c96f0feaa3a5d78e5ca961bb0763d1949258c7450cef7a9558a15029dea71451f0e0c3b9126cd808de588bbe59795422e9476152b4c2e298641b7f2dc68eb4ac8bec88a74592068edf77d77df42c4acbfa9fcf5238558052472c8a422c922e29ba5c2eeedd7fe64b6c596f2172e7bc317e2ced85f5b146ae7f7508edd602006dd7e8c212f920ae1c8afd44891cfdf101f17b38ab0885baa67c4fe0b9f96a1af8fe07ce233dd4de473f49fbbab108880d96172a685d2daee848cbf89bb7813b842c6146881713c50a75645b972a235030157a522212f350f89ab0235caf5ff8bdbca92028ba6d565280494b726805816e4b5134ec5ce1744d25d2f5e49dab9e950cbf5349343c73af8631e1f0b225cb7df9d40ad05da270acae775f0a7673ad361dbc28da383c99055db94550ec2b2b3af25a23742b0774bf314e223909bfbb71f401bfdd225dfdc4716122508cc341978b348ed9176e62cb7a8663652dd5709196525ca4a51440efd32aa78c5c728a6e9cc4fbc245fa9e114ded8db569b8049d25ea074dd9c50e69b1b2384bd4c731e5153bd4f78cb0827ee124d26a8b34f54c4eadac2f43e07de13aef9cec7edac9a91f0fca1b3d276f09cf497c02fa8e38a41a9662299853d349499164690db2e3c7bbf1ddd2f796d688694b2e4d5a303b9c9c37defb728e84d3b31ff1657c41fb03b47fe3f5029a3fd367fa6822b2ca15a3fcc92ac86388f2ab7ce34571dee7f386c23c3322accdcec0854941fb30295852852d55185385355598538541555814edfab2aaafabfac2aaafacfad2a2f5b5555f53f525555f51f505555f4ef5d594c424755543ac1a66d550ab865bf59544eb6ba9865635acaae1540da56a18554328da50aeacead2aaaead1a26d570a9864c5dc725a667dffbae309b449ee122465e5d46d0be6bcbce64d4132e2eb40fea695807ae41fba016b8b546de5bf4b92869b2aa89a46d1d9c83b17e1cbc68ac62d18b8c3556e41b881b9c68243a1191c83518eba7c13318ab98c187c61a1bba6cac971d83b10a032949dbe6c7b1168db760ac320b2e64ac17f221638d0df90563152ff893fe2063fd821cc858c51f638dfdb88fb1dec785c62a13d292340eaaa1248de331d6221e8f8d55b663acdf711d638de518ab9803c758bfb18a071a6b6cacffcf5865dcf20c27e9c4709127a2a4a23022cfd07efdc41828a3589914909cb26265fd2876d629b13229d5b3cea96572aa671d54cba4153bebcc78db1726695d540763fd3818ab5834d65891b17e03591545fb44632da25556755944c6fa6930563183b1c686c67a591206499e931ceafe0563fd868c551432d6980563fd2835a53ed62fc8584520638dfd18eb7d6c5a42a396a47d4c1c96a47d453dc65a24e33156d963637d6cc75863a28eb18a3946a82f68ac9f8863ac62ec401cd6c761fd8cb54809100e7525491a980462c921319c0494b3459c7a06be81ea19d8663b333b03a55859fff3196b4c848df56092960c2a298a36a8057e411b7c4d309c60d512f55d13b4924357139ca3468cfa245397459bbb2cafafdac9a9a577c565316d35f755c9ad246eaa11b95750aa8252dd414f8e2328a52425695d6787fa9f580794b2816905b5bc2ffdb8cf1beb5687368fe0d208266db48249b40f2af5c1a49ef19610a480326f4b3c5c49b4b768835a0d6a812a6017102e1e687f99b6b50ab6417b1ba910582b5bca2315a2ce1661ba8d926118b0678119cee3441ca29ed28855d65d8d9372ebd06d9422c73a7456196dda27b2058da1695b54525212162a2d70bac36e2d74e8141c5a77cec6d24708b47df48c4f663b9a28dbb94d0ec196ecc65dc0305c180be0bff18aebe071888af2dd355ef91e7ef383795162bf6e5f33f702f9540a6c09dbbb510a37f21dab2d498c16d4a6e414a5468a8d0bd35695169e35b4b4b4f06c4adbd29664f583e0b95c5e17815e908f5ea27a0a42cf9a08b94c0994282d1029f2e416146b9928e45a2bc3dd803c21d7c6c573b9bc6f4d78a80ea6cd6909daa6c06aa9b2e071819e142b8d405caa2c5314bc77ef15f6caa158cb588a77f0d503c7a00d48be2f047af7d1b3a0960981e3084d4179190f4a3c28d1feeaa0fd2bc1a894ae681f84a6ed1d2c2a1e38401bf4e48c77a0fdf631259ef9eeaf9e75cdde9f80e3c68157cbb6298f877085d0bed7af134269370739e260f186f283bae0220bcac741070c39947f630c31c2a07c2034ceb043f9629e34ee50fe4fef69365a0fe5fb68c98285f26141fcb085f25f4480e942f9211263c250beeb890932940f3a81a60ce57f6cd6a4a17caf8a29da507e77851b2acae7e260f186f2b72eb8c882f2e52e0755d23152251848aa9443593e41c221872448bc5d69a2bb9b79f613611b85fdb0ad48263fb2f74aba37188c09c7ef46d86f7389fa0d5bd2524ac90d050d7799999969a2115c68f7b6935ead0d7f6477776fdf0bcf1af1e6447efb28b15a9687453128e6e3f3be8f8ca58d044b92bb68fa7d5fd07a70e8f73da8695bedfbbeef1319fc3eaa22ded0effbc63a45481153de1049422127dc8ebb44bc29d94f1483623ebeeff3be2abeeffbd7331cf4bb98867e6be894a2afe3b69818d46445abf8324a74a9c048d10ee8520d6106950dad515f52354dd1a502534589d0a56afa423f49e3b143f23e566c07817eaf1f3544f621bf58100f629571972f92b4ae26b766210a2775efc6dbb6f9106999c4d18578ba1d40811454b615b1561b5214bf7a1c298a86b3ae92e6efe16b0af9f804f2e30790594f7ffee33e665d38f4e742b32e16f467ad90a2da8ad6296b3565ad5ecf721d877d9b3a3878bdaee393431cd7160e1581c8fd6b1574a073478a62efe3d6aae3be9b18f405991172bd340cf7754569f75441078d3c6ab0d1c69edaeb3b702d0b526dc9abbdc6ed9994eeb1fbcc0a85fac47adcebe1f5f07a783dbc1e7b288f58f3781886fdda2828b729a9d7d46bd8e68d157cf8fe36c1fb5c890427141ace5a44bd3d14b689a7f26da3151eb0b94b24de9b54bedf20057cec52c0f795b4f889dfbd8be0c18be04865133a0ea1073d0b50d03fa15945fa2325f6a53bde63c62e26d15d221e638d8d7df1e277cc0a858a47aa12c18be22b78f12078ef3dbd7b63f5689f00820fb7b7ecfb812de96d4f3e7c95dd8044fbdb762ab0571cacf0a03eaf7d1809483d5281bd7a7f7d8302bbf7aff63dfa1a77d81daade48c5677cdaa2e33a5e3ac62db15a961b7f8d5bbe5a961ccf22ee501fc7b3043dcbee501fe859c63aa5888a0f3aec4ba4ca875f9a2368c6e4903c8e99e5c678c58504993561c054f101a75a0e7b05c546962dea70d1069a1ad028ca2128341c01897e97d21d569168f86dfe8023fa9cf7d00abbf78f32acfb04d87bac3e236c7c7a7d5f630e453534e195b49013ba512b0ea84894068f5691b48f44b99d7cdefb5e095698ba46a1291eb522e91073c0e0a1dc5f31ee84eeddf8e272e83cee469d90e3b6ef0e1bf76ddb5aeeb6e432c21552b92dca4c62cba4ac41d2b656ab7e599c6ca25f5a269b5a26999648f6961c925b52562775522bf56c89d3e2d6c31c3373ac864765191f38022028913b2f58aa60f3b8ad0fa41a038756e90eeb5e40875830d26d56a652c27ee4065bb2973314a9fc8f048275b0255b77b7ed8af81ac4b2894d7c1d07b024122f41f97b4941f78bd4cc27f88af8c27866bc33de9d22c2d4f081f1cc78773c339e19ef8e77e6fbf281f9be48be105dd8099c152a4cad50d93d94bf6150869de0511e6b05e8c644c298802c7daa15ba7d93bdbc713e543c0aeb5e0c5b126e2f0fb6c493122647e04e85f7d06e9c4b24a9f01eaee640854678d1ed4b99bcb6259258a10d4c2465e2a2eb020a6ad98bdf4c86e96e4d591ec80a6f7092bbe4bceee3d2ed765774ddb7675d27c729d95b874564313ace83819feb3eaf1026a5fc812de97cba4e94ddb7adebb84e52eedd8a0d03a3aa29eb0d2f116feb6d526ee26bebe426e526c664739bdcb82ab66ddbb64dca0a647d3decbeb76ddbb6adbfe9108652ca5d6e937293524a181c2833cb52b6944d4829a47c62047213c10b51ca4d8ae085dc44f062934fb20db989e0c5c62ce776967293b20db989e0c5268230fcf1ce9cf1ce2cf79745ac1bd3e77ddf077e2e49635a103411007308b6c434d2e56ab96d43db5db0255c0d549e19e6e4a31c0e54c2467851910aef8c18a7c993a5bd92b4782549dab784a67bf2c083f0250271478a8a603e40373622329928ca6fe95b92a20f4f8807fbbd3322d0566d4c1b530636a6adda9836a61b37604bb80fc7d2b7248792445e7ac1be4fbe986e64a097721f7f806f9b1b6edbb428771c8747e49ec25a9cc60760e8e1c286ca2a4e1e20e40db95eb650790f7ad60f81ecee962dbbbbbb3f6eb96d6bb926c461820c2811d1868c311ee01f828258f325894b370a02139010c366083582d07ae272230825c4240b5c40dcb9182a68820a13d0c9a2cb17f6a11ea1643419d147acd35c4e49c9058aeeeec6fa716315b7713b0f1479115a4e51c3cd195f4c40069b0e700f4018a0524ad95b52b85f21e7241aed8618a2943d27d1ba6fab1d28c34e602c7491e83697bedaf66e46e95973a85636da5dc8093bd16e9463cd218a58db8c6a7721272eda8d547e28373e6ddf2e6811ad483c3989eebc9186c867ca302a17a99c43b76741148f94deb787def4b9eccc5041061c7a06fb76ee618cc2a6cf288355b1c656d284e4bf23d5b87f92d6ff1ea5ff8d57d0c85ff9de6314f04a1f1cbf2b3b22d5f89b748197e358ff034a8c1ad14401dfafdbd478e53b38a2a94ffd14f8046b3c90d4630e9c1564cad42c90c398d4dfb62be9ada7e695e7a9d0c2b6cda8a5ea6189ad2ed616dd98cb667d0bddb6255a89d00d6bf3bc905fd2ca4d760d49f24b543e1613453ebfbbe96b6212e0e1a4384e4ad2f8fb44a9d8921f1f1027ad128b6bb343f254596fb82c26e5a496a8044e50796eaef4610c2c91fc934ea2ddf825795b7aa41d266f8da67d35d9c3ca4a4a2c0956499a27c12b2a2b8845e53d26aca6df11abc7444bb044616c1189b54475c4ea6d619dd558da6b87b452b09c6767dca556ef40bd3b225d6f03b43206bae68a1279088194c4fa814edc8042f4983042acdb7650db11429b16161244d5960d1f7858da66f314070bcb8b2c9a6a4776d01255bb62248d2ba95a0e30282bae6adb486a10e523494e58d596bb0a4189aaaa5a538d81a26ca5e24079ac22e9b644fc4d071da8d8869843b3bc4008648611108c0e809e32e8be18927964554c4e4f90cf7b6d6a00d96ddbcf0c1d406de4d86d5b89c4d451e1e282ba30ae178349bcfb24f2e56edb8672588b863fcbb02571abccccdcd911fb3e66c43e4c8bd867252a6558ad5a4b2d1aa6f35c61e8f23a3b9de70a4397d77dc1c4551aae1b34b8ac7c9de77529f03aafd3d3811d78c29c6ddbb604507976851c38392a6937db456fd020d2afe9b6bdc0c9d423d2433d25d649ae7939ca31c3200611d11f1822b7e1755ec7c4cfb6edd0a2035d1ce8e2baed424fa44c81e702b9eff330c08d481bcfd92437e713e39911e2886f8c58833e319e19d967c46744b30f1019dc4760478884af572cc65a4c3259511105e7c8ed5505d4c4c6c109abaa3a39dc8fab888b483cdd8f27f95202942fbf8fd9937d9c8c7eaf58ece7f27ca0b7ad00ec62342df14b0fc9984908c3fe5dbabc2de480d8085f1b11d913d1872c167bc996a86b82f970af1188bca1cfcf4bb6447b42f1352593c97a88c65a3459f77ddca8c55ae212e20fcce715ba7c409fcff3e9b8cd47fab40fef119f5da2dee1868936cbf0dd36ae7091fe7eb36a9052c2963cbc23d686a2b2c65de8c92865a3dda3a1c2919db4be2b9c84c5ec1af4eb26dadd4e4c7368e53350bc44cb9688cc16e92bc1475019244dd664fb3c8167580a5c03c72b39d4beb16168c408c4689518ed1a95dd43e5d8c9954c9ce4ea606d2c040a5020850653193c4eb0962f3c201fa0e2025b4f71d46083a7b6dd032526a0db45682269248499f282059d126c9551dbb2a041b16474a9b63cb1850cade247f02672886f854539ae9b48962c59f2b968c900909c1b5accf841cd7ab9d27dfb5cca749ddddda321f6ab4c26695ff580f672009c413bf4da956dbb2b930fe5ab4ea15c47e50ae5de2dd989eec5d3d8258dfb5efda011855888c7a73e4c0b8d0834100553fdb6b9b54fe81b4768faa9d0022f7d89613f6f563d88b2cd532228f1a067350602173934dff9fd37c817c8f7c7d7c757e8dbe3cbe31bfbeef8eaf8e6f8067d717c6f7c81bee2f7e7ebf3857d2fc3ecd1eb1b7e5d5ff0fb7dbd6ff7e5ce6ace4d25def34e7a3795988d731bf7a612ab715ee3df54623de7151c9c4a9ce7bc75d754e234ce2a7838953805673c7f4d25be7346c1615389d1386bdd672af119e713fc672a711967332e4e25b67326e3405389c73867fdc6546231ce26388ea9c42538d779d054e230ce24788ea9c474ce58d73195188cf308be632af117e7398f4d259673f6e23ca6127771be7a8fa9c45c9c4570a1a9c45a9cb7b88fa9c4599c43f01f5389e39cad0e642a311667103cc854e20f9ce1fc5389df9c3df03995f88a73d5c7a9c46ece1db8055389ad3873e042a612539d37f0215389ab384ffd82a9c4539ca938065389a3384b71d954e236670d7c682a319bb3d433984a43cfe01a4c250c2e3b91a934e4179c682a597021df602acd8f2f329582fc2f9a4a3f0ee41c4c25a1fb78075389c77bdcc854daf1d88f4ca51cd771245309c7833e9b4a40bf71da54fab9780fa612ec3eff602a857fdd682a81773dc954f2fe1d84a9c4bde327be30289f04d6dc4a061e8134af12f51b9cb80d18381534afe1cc2160e6345ce00f28f3295097f2f4dac46760e2322c710728f10624710690790c4e5f001287e188bf30e62e88b9028c78028a3802c2bc85a61f8088b330c457007315bedc00423c052f2f409747613a0182f80080380a3f1c0a979fe0c34de8e1256c39094b7fa2e502e0e14eb2bc89d299ecf01174f8122c1781931e80b94b84f4dadc25cac10257de494ace7b942839b741cf6c507a5ea37656a3563baf2000673d0108c0794b84731e114438ab60c9398d254bce784638a7608411ce286072bec384c959abc9198d264dce2770723ec38993b3190238972100019cc97872b6f3e4c9398b84f31824907036410967314a28e15cc78473094c30e14c8213ce619c70c2190bca990e1428e711a07006030514ce730670fe620003387b4180b31c0210e07c15e5dc459428671114e0cc45010a70de2285b31629a4700e8101ce5918c000672b15ce715450e10c8215ce58acb0c2190e0be70fb0c0c2d9030738bf39c001ce552d9caf68a18573071070768300049c399080b3150948c079030a3853294001e72917ce55b8e0c2998a17ce53bcf0c2590a18ce51c000c359037317c902ce6d16b080b3d4dc4512c3994d0c313c03067c88010cb8ac01c7a0010df8050ef8100738e04264b80532c8f07186cf1966f8eb83d47a2052fe438a94fb9872a12953dee301e7f180073c46c377d040c37540e03920008107d5701c35d4f01b540e4485ca451bfe63830df7b9e1b01b6ef8abcac32a55ee8ac0c10844e09f957b56ac2091c0b9d951096c54020f95cc2ab378a3e40198f422ccda97cc007c8429c299cc256f3247b893c9e402984dfe643a390953002f613eb90993849f304b389469c25198277c0013ca09305178943980176012e029cc2837c02cc05598297c856980b33055f801e60ab7c0acc0af4c0abc85c9c211300ff004cc16ae808980bb3013f017a6020ec374e10b982f3c8609c3193017f006cc18ee80c980cb301bf019a6035ea70c973267f89459ff8029e534cc2987c07cc06b98349cca84c06d9835fc8649e555a60d8fc0bce15666954b6046e039cc2b479a163827cd1cce5826d25987c949e71d2663392b4dd6e19c65f20e671e262b9db54cce725e9accc379cb642de71e262f9d7d98bce5cc65720fe71f26fb70066232977310937f38334d06e2dc657210672f9399ce424cee72fe32d9cb19cc6421ce434cfe722662329873d3e421ce612613712e6272d3d988c961ce622617711e33d988f31193c59c91983ce6ec34f9883399c9489c9398ec7456623299f3129393383331598973139397383f4d66e20c35b9897399c94fe70b4c863a9b995ce67c66f205ce68269b396360f299b31393d19ca32663e09c66b213e70c4c8e3aaf999ce6139838cc18148da41f4223e935939f3800a6b45aa2fed19421ccade130974e6032ddbae002493792be046605adcc0ac46a46202e447e62ac1f8dc0ac3caacc3a6f9875c886593998f5831a665d2a08ccba6f689875b378c0ac2b67caac1b869459d74e9d75efcc30ebea916156c6e28059794b0366e52e0c9895c3c4302b9359c0ac5c06865939cd0bb3721b1766652a05ccca6f12302b67818059594e0bb37218079895edb0302bdf596156d6a3c2ac8dc500b3f6961466ed2e0598b5c34499b5c91060d62e3380593b0d0ab3761b28b336d509b3f61b1366ed2c4a98b5e590306b87f164d6b6238059fb8e93595b4f9359251626b3ca2d23cc2abb2c995586116156492600b3ca32b559651a3aab6ca364564905db1096fe13c25108ef7f6b84c3fbe21a490084571808af3f407b044292d71c495e77f0d8a32446af3f8c5e83cc3d32fae075c807af180cedd1071ebc1279f05a84833df280f68a84f64afb608f68b3d71066af00a07b347383e475af70b24748b038f2ba7150d8a3235c1879dd2e56d823236074f0ba745ed8a30ec4e0e075c798618f3838a3e875d1a0b24745691479dd3c13d8a3226c6cf0ba7bb0ecd10659885e59cb963d22fa81c82b07d1658f8880d1e0958908b3471a8cc9e0959120b347193031f4ca4f65f668088dec959d48b347b23518bc329b367b84c11417bc7215547b74819b21af7cc59b3d1a828590578e93c51e09e1c28257ee42ce1e5900c6f8ca74c2d8a3518cf9ca63d8d9a379c65f198d3b7bf43482bc721ed6b34741d800f2ca7bb0ec11902c3f5e5bcb963dfaf1838fd70ea2cb1ef90023f4da4484d923a1313d5e1b09327bd483091eaffd54668f78a089bdb61369f628b666c76bb369b3473ba6d0f1da5550ed910e37395efb8a377b94038ba0d78e93c51e057181e3b5bb90b34738c0b8f1da74c2d8a31b6200bdf61876f608e80cf1b5d1b8b347621a3faf9da7f5ecd10f1b3eafbd07cb1ef96481bd4a2d5bf608f6c3eb5506d1658f5e60c2574944983d0ac7b85e251264f6c8c504f82a9fcaec1188e67b954ea4d9a36f8df72ad9b4d9236f8aee555641b547dd5bba91571c71586caf324e167bb4bdb9a0f5a32d5f6517b47e47f256ce1918ab1881739ab1c6aa9ca3c6fa1bce4e8c5566c31903632da2724633560f6a389f19eb4e41e06c66ac5b45c3f902635dab079ccb8c75afa69ca1c6ba5852ce4f63ddac7a6e62acab35c39989b1ee960ce725c6ca490e382b31565e6ac03989b1321303ce64c6ca4d319c9dc6ca4e0b382331568682e17cc45839ea85f398b1b2940b673163e529059c8d182b5725e05cc458d90a01e73063e5ab16ce4d6365ac039c89182b67b1701e62acacb5c219cc58794b85f397b1769201ce428cb59752387b196b3315e0dc65acdd14e5cc34d67622c03988b136d400ce408cb5a35038ff30d6968272e632d69e3ae1ecc358bbca84730f636dab12ce5bc6da57249c97c6da584fce5ac6da590238f330d6d67272ce32d6de6a72561aab4c6272de61ac726984b30e63954c4bce58c62a9b4438278d553a05e048639550b5e7305619456f81b14a2925bf32563905805760acb28a1e9d02f59bc0b84b84c3dc2592c0dc25b21281b94b54e586b94b64c3dc25a25203046878c0142933c8e0800630200628ca5f000c5294ff820b5594af002bca4f0002b028bf8503b0c05b94bf820a4b946f0026ca4fa10051a0289f000390a27c14a05451fe0956946f420958944fc2132dca17406f51be9324ca6fb244f94c4668a2fc252240517e00a228bf2645f95409008e66083f301076e44812e4070fca37c260c8a4fc0f8a10794043c201e5d30010c207943fbbc20d15e5238983c51bca3fd2051746e8802187f23b18438c30289f0334ceb043f94579d2b843f94576cfb2b17a287f032d59b0503e51103f6ca17c224480e942f91a2031260ce567f0c40419ca1f72024d19ca97b1599386f231a8628a36947fc1156ea8287f481c2cde50be902eb8c882f22da003861cca1fc710230cca9f689c6187f29f278d3b941f84f7301bac87f28168c98285f27f04f1c316caf74104982e942f84c4983094dfe389093294cfc3093465283fc6664d1acadf51c5146d285fc7156ea8283f94efca237e7b5c535cc680013ac3c806d2e9e0035222836ece90dc926db0a909a4756e0541b63580c85d39dbd7e678b76d943a6895fc03b427c70da5b033c205eac04988fc96bbd2b5151b0344d3b7c59268f8c326f0210b0f9c51db077511790aea75c1a2a3430accf08104b5ca395137553c657949e2caa9c652503e27c51a6d94061995f2bd5f63513dfb1e14825fd71fa32db929320eaa6523e734b9255ac6efc610b9a4e6fbe8d91917860be3b306edfb98e183c7676b8d8cd0becf95a4714e584e59b4efe32469484e6ba2ce0491859da7246a7d1fa89e7114b4ef132569485eb0ec90a76a0d31ce88a0d6f791ea196b80f67da6246d32a971b3c69d289660a2d6f7a9ea19b7a14b3526a9673eb4ef1366679b1d3b6268dfa7698d3aa07d1f2e4ddbb4be24f97049b40f9b92b4d543278e1a5ea0bca0a1a6d68755f58ca5681f66256948525a78f1858a2534b0d6a8f561573d6336b40fc392b4b5b3670d9a28ba40030d12b53e2cab670c05edc3b4fa303c3dfbb6366d286740fbb0334ddba6a69a604e2f2c4933b2450b18596bb26c20abd67f65f58cd7d0fe4b4bd290ce6cf1401b4598d14614afad9eb11ada8725495aed0463a4c8401d2b7e38a3d6872df58c9fa07d18931ab40ffbf292b3b3adcbd6e53587f65f576b3444fb2f384ddb9a5e5bd0fe6b4ad236a82ada0b023677dad8f2658c134fb5fe6ba9679c01da7f31499a5403851b2db608810f716afd5753cf5e4e92b62598c3c417619600438d12b5fe0baa671c15a5e625d5b397143dd3b333a9478f195ae1d61acd69da9614d6a1fdd049d290ce9499c28b9caa3c49d4a9f543a89eb113b41f46491a8d8d2c5940700599272e50eb87523d630cd0e63127cb0ab688e24b073450eb87553d6334b41f5af5ac1f6ed134afd60fc3ec4cca91c325fc1236add1a47dd796a4492cac3009cb352569484e308165ea8734b4988203b5beabaa677c86f65d56928644851caa35aa8650419ba85adf75d5333643fb2e2c495b371e40f3c515747e88424eadefcaea195f80f65d5a3debbbf0f4eca37d579b9d492a2a9714b4ef3ae352e3925aa3d3be4b4cd364956b09da0791c47ce112c68bab33546cf58ccbd03d23290bd616503d3479a9319317b4effad23457ad0fcad9992443069c43fb201c700bf06a8d82d03e282569120a0a9c824a92b465a34c1a3b623e200604666a7d70a967fc44fb2093a42121430f99103cb1822fa66a7db0a967dc04ed834e92d6021a78d200024a0360c0d4fa2054cf9809da07a37ad607d5f42ca4fd4fcfcea4c4b28619787ab65b6b0484f6bf2b49934b72094b2e657169da579b2d8dd1fee724692ee0e9016b045a7638a3aad6bc04ed7f519286f4031830572b9833078e10b5fe27d5335682f6bf2949d3008e17659480082fb8d8aaf5bfaa9e7112b4ff59f5bf2d7a066e495a67657d4959f48ca7466a8d765c6d37495a5b397970ba2d7ab6576ba423abdb5af298fade974e4ad25a4aaa9b92ea383cdcd61ae5a0fd2e49d22600c5192f3f889162034ab57eb7d4332643fb1d93a47979ce7c00ce1a2e62d8a8f5bba69eb193a42d176b5420a60a4c1c2db8a83112b4df45a9a1fd4e4dcf3cdae7ae24ad9d9cb0382749db3a4d28b843674c1269f0d4f888284943eac14d1972f664894203766a7d4eaa673c86f6b929495b14f490444619ad32563ed4fa5c55cfd84a891910ed736176d6581a8b981953d3c4a6350ada92b45eea252ea997b825da483e34d10689219aa48ec8aa351b41fbdb55cff68acd1a1eec3041ed90448d8bd00a83a7672edadfdaec8cb3d8a4d628e4ab2b35b4392b6b73925a922602171b487a020b8a3959b50e437b7bd637664c86cc1cda2e7e5f4af19b49078cb84a634c134a7a6a7db9d4336692b42222a6c2f880070acb13b5be6cea191341fbd249d2a2b0b9820d95099a8093a7d697503de321685f46a9e9d98cb7f0963568bfcd683c5bccc494b5553d5bab2dae60b315568e18daefa6e6d23417e4101feb4b739fb7f8b30f2a4b41fb3c256937a44146134588d941cb12b56630b4cf57593d5b0ad23e9f69da57ebb31aa6dc24694a56d819b85b41cafca5673fb4cf4c5e7ca18d020f58b0d1c66a4c1a1d6a2d04edd7206956405006176ddc90c0cb17ec85761c203600c4d41658b839a2d634b1ea528535da1b8430a3068e17387940d08576123f7c3122a98c375c98690b3673b04071a5c59b246a1d04ed17f58f00d511c1108071442024c4ba4d513ed01162d78558b7262ea91b7f9c3632446e893484a0db376e2949d2bedad7850a1c545e884c7697f2cb2c03ba2d1717a05d2761538855862156a90251b2010b23d6264304cac3713c7ca1dc837a2652ee4264dc633eb8ef0e547efba0a0f2af9e7d406507b2a041e5837a36844a395bba6d5c1bf1860ee20d2c2218b11342e49c2a084bd5a58a72dc4568da56e30e65eb50a89e6d87d5d111eb6e89a2938884584f93283785c1181c90106b3c00fa61ebace8619359525e5e9e73eac090517c2f1906135b88556d06951b9c6e027d71bd6406c4307c7549625dacf18d5817abea8e0c81e8c4124b9434b921e5d7cd6a8db8bc5f506eacdcdc9688b388bbe217e3a65e5f9ae338ae1f725362999942ec683d5d29c4ba5994b95162b5cc065ea27edf2a0931516c55785b7446a00026a60338b8060991506c1fb3b1bfcae379df52073b0f5fed3b03f15e41d81108d5fd5ba3f0fc1d6bf4baf19f833876e03d35ef9fa4f55b72b346fae094548ba47f634a2ed648ff6786534b0425a568794fc25e2fa09b837a5508ddb1b49fef83ac91cff71bacd1ebfb229b24040f9b5b7bcd27d8c3f9f4732071ca2bbe1a0cf6be3797bedacf8fd20ebca7f69d87af06fabc5fe1dbe5bd7fa6b492437d1fd89453fd70ca37bb465c233897c49af7276fe9ab0d15ed945700a1bca30bc692485cf731852ba4c651f628c32833080c0227e1246cc446fc017fc01eb0074c631acf78c64818091fe1236c848d7007dc0173c01c70111771112ec21bf0064cc4444c8489b006ac0167c019f0100fb18c658c0163c017f0053c8487b01016c216b0053cf2c893279fcf413808036120fc837fb00ff6c1422cc43db807f3601e1ce318efe01dac8375700ecec1411cc4381807dfe01b0cc4402cb2c83ffcc33eecc33086f18b5f1c72c82e7631c8207ffcb1c71e77dc31c71c6fbc3118948d2670667eecbfec45f7e04ade648d6a80c0f92adc85357ac0f932bc86e3704e3a2f9d99ce4d6bd400a73562c039ea2cb546309ccf536bf4c2f95c75b63a5f9db1ce5967adf3d63be9bdf4667a37bd9dde50efa8b7d47bea5df5b65aa313de58efacb7d67beb32e972e992e9b2e9d2e912ea326a8d0270be945aa3daf9726a8de859c9f9d26a8d0070bebc5aa3a3f399999999797646723e723672eee0ccc1b9e85ce4bcc199e84ce4acc13983f3d05976c6e07cc179c859c8d982f3789ee79f839c819c7f9c7d9c85ce3dce3cceb1f38eb38e738e73d019c7f9c619e82c9e7fce3e67d8f9750ecfcccccc0cc554f2287394cf8b640293a912254aae44c97ba664ac4814070958d9ddad0c457777b7f215ddca5874772b6fd1ddddddda57265499e464ab9ca25ba5158ca178fd09e13507dd6fdd41f707dd207487d0c5802e115d2474697443a04b5bda2e1674678b6491ec91a543d7c88e41b783ed6039580eb6688bb6c816d90d7683255aa225b2445683d560335827e8aea1cb86ee147465eb862e067bc15eb04376c80a593a742dd831e88e3beedcb9df6f900db24016c8fed81feb637dacd00a6d8fedb13c96c7c636b63b76c7ea581d9b63736cd0062d8ec5b137f6c6022dd08a2beecffeaccffa2c18bab07ded6bc30dd7b54ed00517dc6fbf7543f70abaddc6a1cb2d370186e27ba03d0ae17b1e7b04c2f7738f927c3fb44746df73b0471f7cffc11e79f03ddd23daf74ef668f63d0a7b84e4fb15f6e8c8f72fec9191ef67d8a30ebea7b2471c7c3f813d2afa16f96ef025fa12f96af0cde03bf4957d31f85ef03d67b14743be42be167cc79ec9a8644bd634c2ac64cc8c00000000001000a315002030140a0644e28060304b5369f60114000e8b925e724894c8b33446619832c6106000000000000000109a991905014058c444225fb40741c70982d374eda13f7608ff91b132fe186a9d7fbda01f9d1afe4d1dbf4c45f853b3d0461931da8294d449e342e9dd87729e38b0c7371cea83b8654d3b33f00e6c4f724a01721a47ec7dff2dc7547dc8bc12598f8481ae06a4472070fd989e4098252aba3c3473225ba3221e6bcbd7af424b53e19fa1e2f7d0017ea672aa0f20bdfc2365550477e4570a5bea972e070a0a97e0767944fed94bf3f78c8fa5ecaaadfc562a8d8e067b2832ad5559e744e7a5c5306e92087a15216038f5002a3bedcabff9726ab445876883f4984866b1d678a83b828cf42688bd61c2e0fb1432d827c60872ca0ac335bcf699e85991d52e652db72885cc493d6d0a247fbbdc81f8f3dd0065783e6c4b1aa8f453c95a9a6e70bf20923e9fcd0862d49ccbd8ead628f0db738b0766fc0e00635c4318d75c5f720f215c6ad6e8e9b2b50763ef86ba65e80f26261b20f62541f301e47db76ac3f450d9e8a6bcb494976879ddc8c559a76891e2755354a7c52a763da41f7636524a4e3022d154c6d5322d4339ea54a94f617dd98796711f41eed957796f53d672a7f4e6647e6fb7d4b2d6b730fdcf5e03e18176cba3f7120dab7b58c21a36103f904585a0011066a33e62536e8bc5cb4810e438a7b4cc2f2fad7a1fd1046459c99fdc3c8785688012aa5afb7c100d4b01feb4f2214ae038d7fae718eb816de0b81e5d4b32533703327cd76cd7227a8d109b75d59fe2074d77074bc660a2b543c67ee10dde68656d0bdcf354bb06e4139d5d9c3f861e2d383a6466b8a86f86856f6e205be7b46544447daf5f2595349e670bc33150a479e013fb6b5b13fffcccbda0b840a085becba42e2b593712317abec0b523b1aa63e20de5d33522d2431317c247bc4da3765b3d8ed9be8ccd99b168a149e4455873837c4a4874ccbddd9694e6df3f65d3ff5bfd73a3991656dfd57b7bc6d8c05d39ce4c090f80ebbdb8a6035b13dcca86863ab025c004202a08888614c49ee4d0f91fe57f154a5f9121198bf0ff47285b2fc83491ba178c5f560ee6b6bf5a2ea88b9844e62d1dbb51d9669244d29b52326cfc37b28a49c81e24ff3fe5182e6f39e7958cd9dcc728962d72a9b3179445432760b4513473cef096b321a21a48a9d49fd8a818c5b945510a759494a0e0b3fe80b3862f969b1426a07a21ba78612bcf67aeee1f3e69426fc2f9b2ec8c6fa19356b391f1419712222737726633f9f86a209e00b293fc30244115efa4dbb109b4db7b98c3379bdbc698794f8054e0c93cba863e4ab880fe5d19e3d0d9570160dc34586bd5e6a0427300ed52da59ed8ee054796084576c1e86839cdc153c40e7a589c8aeac64fd2536d7127aeebc6e76f1ac654073d834a1adef14d0782bdd469249299366ae332ac76449853d7c6a20552fa9e0ae3bff6fa3ab2901ea46089a0e936def8cfb7a5a93ff5c9dcf7fcb8c845362b426bca8b735687cba30d4711a257e3b2548e9136e49f2dbf276aa3204eb4c9ee87de6b6cf8499bb2572b63dfdb556e0853d69b86a7f2d41329fd1057aa5410713a61298111b27ba542e97895afb6440f3fd506a2a79e9c2582af72ea36b18ced2eabaaa7b31c7391282e45c4fcc4e91a3d5adba0d661b361e03373fb7807e20339edcd2e35bd590e279a67d00cc7b57e887616119e77df16f3cc79268782ee48da586178719a2987263b366dab11a0161eb1a87b8afa5cbb86a6f6772eb55c3ea7a3a65e347c1b446b1799628146861a2faef880333d10ac711a21a86784ea958d0beaa2a72f2d36d2a9f88205f7500a025d69202a10442b89df16d79ba7b363cfd71af6f50475309601137b0f63ee05efd8e05628bebc97b27027c44d2a1fa19ae774ca9908f0b45df21c16651e27d855af2bf53d873a36bae371cb429c8167caaaa8635aef9300b84f70d335694c0b474877a12fdcfc1c34f8e9d3704702af5dd4685b1c4c278f39d4f5c4354d2c83e841f4e08c91e2332bdaf764eb30f449234a0b739496ccc1c4ac243e86f5879b2ac942060b02aa291a243e9bdba35ef820c3ed97e967953229dd00161d24bdf5310b4695ac80e520323a51706663cfa0099c657ad3ee3658c84474e6a33205e656999fb61afdc1abd90b3a53f422920f5548db76b7a128515fce82f8b37e6410b2085a290ef5a768cc58049e550b35e9ae5611b68852d73f7cb4981bb13ccd7316746d104747e060f1837f9b744bae958781d06de6d9b1ccc74e881fbe3e9b185db4c660d3364e7799a1d4720db9723c5a36a9f413c3d79c85ef55469c54889dac295589ed7baf9425a8c2e21d03074a1f9c90d30582d255b0e5578687807d8b6dfd836bdc15a71e0c338c3874c1489bf8b5c48542d2e2d352b7f266cf0eaf795a21c97664f45292a76eec6a4450130ce72ba82234935e1da2efd5c0c1b51371596313968dbd22985ec228008718371074675ceff12d9cb1df7299668c9cbc3685a5ac9e22d21e237e1a81f77c1d9d842e32799c83e661055b73c7424e780f19df417c026504982f3968dd99c35c3dd99b30982270c163d165d9197faa92bd43f3749624cae48b373f01ebe647d2b3a0caec00f2398b3c988e345031195873761eece001e3474716808886ad930bc86a1791588db3d7c0ceea0ff62032f3d53da3511112fdb3fb898d80c7af80f4ee30f95b66d484bde82c22375d0fedb19801644e5fcb9d76fc751dae9c5585dcb8666a37b3a5f0019c7a7af4038540e0144d035b134a975c98c93729f55ce83892df84dea84edcc0fc42777388c9a026bf54b795ff209e2b82d11e6157ea9a3b06ea434288b206bf61a48dd60b21361657112ec07fe207bd50dcaf4aeb34754edb3b99d38c0ed7c10914c73a5f0d20c4ba3e3ba1ee7ad6d1b8332eb1db1fd701d63755e893987a99f644739338fcea068aed2cf1dde0e084c4d01c5f6be695860c9c915d078a90516d6d1ffa87e433bc74054762dadaa031bc68c5b2b751deb003892ca66b2e2edafaec900d7f1f330af092465314ec72da7a437e4e0a17c5319e0caf477f8b27c942341d46968b86c1808d037970a49b1ddcf2de9f2df064341fe94bfe1e7d44264d1e2816371e94eb254cf6301e3bba4c38a4077488f2d82de501d5b04bba03abab21fbef884352ae103ded12987f00563b4c3210ff29bdee8063e12933794c18bcd58a71236a29d9c79881f28621b1ef8103fe9856ff023117dc214de788e3a92a131eaa99986d88562b661910dd94b5ffc821e15e807cee08967b8a3191ae1964e398c6f10a31d8a5998bbe4c56ee853817ac10c5e7cc61b95b0016ff48c83f88231dea18807f9496f7c071f89c81b41a2953d285a6b14b9e4d7754e17f3a1c944a54451a45611fbb40889bd88146374438b469b751c5de91e2d312039b29084a4482577a4a86b9264f8b770502128c59c564a5ccb12aadc12e977e97680697d89c903c924cacd5408698aa63531639b90fc4d6423a7ab45a7c56b2707c79300d95319d4a7480682550fd4a521d4fa33948b224a8c2baa081a158d1ec5d748a1f74951c35237ea84a9e5fed73c642d9399d5f60e5be969b71c7760e74d7fe0309df8309f8a1f9f4cf886743c70b3b411740f58c468c0666125761ff088f180ed7227ea3d6091e381fbe242e83659b53fc8aa20e2618c885a484a9d92589309cf7582bea190f89a283e07d534bd953c8e41096bf8a9401528cc47c5b01833ea5f1fe9920884cd5039db9cdc6a466adac9cd6ca41e0e7826476a73c9dd78a45985ef441fa9a5496e2448fa8404634442693e86e048160e12689424f41bbabd26b9e8a34680929a0d0073a684482021cc4af2f09c20b224d19d02854b9ec6f743fa925f2744592226b53289cd0eae812681602355d6249011b80b6e72cb4d1311278743b6b08a4e6e913b59a0276e6e810a7d720de6371c8072c7a02cc46b588da13ce7a28f499477bee525308a2f2ebfdea3dc01703e95a4d4660158540a8342eb0ea6b0231e65645336491e65e129599c478d85ca739401e9472aeea53ea85132a88a73146ed85a857b1aa1e76025893df7899b95eff08e8df134e5caa7a83ed7e09522775179fd0a2d5e9431c2b2805e94a162c9772f6a00b23c368585bcb27cd52c84bc6e32fd2c99bff371873d4ed38e00515768e1a7a1c2ce86ad678781411ed2c94184618863c5635f182492ee2442b64edc038ad79a635d233e76bdf771c7a8c5c51a21875689fc3456e4ccf89167343446392c3940bad11a3627937c9e7c728c32969d944dee54ce725619ca0acb2b932c63f9b7dc67c9659cdf97a13cc0bc7216f3ce72cc7ba6ccfc393933e63acdbe6195c1312cc9355942676fd9f733ceddd8976f13759eccdf396414cfb9a13ddf66f83c33ede7b1a99a676e820e1fdc34875ce8235343b3cc123db351749e3da34dae8da659413aca42a43dc7934e79521a66e9d29b094ca3bc35ddb2b969cc97a7617e3e3db90ff56653d42b53a5bedc981a728fea2bd354d3cc58bdb2697596fdab5d8eb066d9cd3acc86d636775be7796f0d67a5eb95c1aeb1dcbdeeb3f435ce57b0615e84bdb926f666b3d83b53c8be5c241b73beec9b51669b4dbab6d7401b5d2f6dfcde69fba3ac6d4fb9b67c7eb6c18ec59ad1759b7de36de66f709f27c3dda13d7b90006dccfdb903dc69ad615b37e783ddde72b284697a0b20090da9ca8abae351e834893c5e828137ed09502711a96988ca32c2ac9456ad46992ba8ee450e844129634b53d9c1ec6c784cb3a2aea9c86d6df85b20408e5ea1832ed9ed33bc03a1ded8ca673ffba9d1013b84c15048211174085d4bdc77e0e2b9f971548fb415289523960d0933dca6491a72c20d527fb18e782c94c67bf93755e31181100cae972682e6331a310c5c2c8fc48d47143914b4589c899b4f24423870bd3012db4f288460f07ac9dc6eeafe03324c0939f5c65437136df0bd7c4131d4035eca583f31b486c9493077137d0bc28ca88fe32a1069a3400767eb17d0a3f02387aa95d7a3a81b672a23d5a1d82627ab2ad34e0116c75424a157f107ce542fa849617fced42aa647c15c4ed44da853a13e8eab40a48d021d9cad5f408fc28f1caa565e8fa26e9ca98c548762fb925f912edbadcc61deaa60d417d73666392aed390da0ce20444196fdc036ca0b1b61164f0dd5b2351a43bb401b912453b3cd292035832104b5f40bd6681eec08597a32ac46d881071911390a316776319712a599a507976e602c4cdb6b8b19b4cc34a96b73fc35d3d8b2fb9fd615dafe3cfe20245001b8034dc984add3730ba6356ce43c18ebf467b1b70ae474b527dcb92ee478f65f2b4dc461fab79865e43c1f56198cc1e46f31bb08f93f59311493c19f457691717ebec62016c31f8bd822e3fb70bd911846ff85cb2b30d6c8243644ec0ac7f8c6a77bf1d6549fbefa1b24808f4d08244ed7221e4a542db9da724aa95e0b0b5ff1d4c8d52f1ba5c4cd4f5b76f296e33c517a933fb60bb9fb7ba394b8f06d97455eaebc980e98bcc65523110580107f3731f8514c99c0b8d13a93bc58a83e39bd9811bc9b60bc514d91b878e83e9fbcd8289c98628c11bd935c7c684f9db8f8689c4d62cc289d905e4c48bf9f5cfc28a64c60dcb4cf21bf62224d985e2149db9fdc7a38524ae06c6fc940de2d5e4b965ec80cda4530dfaaa2485c337593475e60144e4c31c688de492e3eb4a74e5c7c34ce263166944e482f26a4df4f2e7e145326306edae7905f3191264caf90a4ed4f6e3d1c292570b6b76420ef16af254b2f6406ed22986f555124ae99bac9232f504635c33d78aee5ff779e57c6ffa4894236a1ac6e062fe7e89122fb9573bedf3d712f26df1a3333b813f3b96327a954b90f0dac4209b805cdae5689763f1a5c8d12712f1a5aad12e70634b08a12e25e34b5da25de8d68623525d64d686af54a801bd060554aacbbd0f4ea9740370934dd5951b7347d6ad2590432a3585f3204bc918945be0cb197b316827d5380f678c94fe2725b9b0648002324d62d5beee59631f6c24a83d46b9e547b754ca74e6e3bdf5db1e22f21d8552ff68fff9cfac5a2bcbdb28af79e5acffb5fc65ca8b054f343c1fbe9baba18e3e5dbc1dc0be59bab4d209624dd79e5cb1a3f06449637d5577943194df54bbe4ca422a3fdb9474d2aa3375ec760f7b876ed22499b5f76db1b2c27ad98b8ba9a8f452d2f20794192330ac877456f0893123fb99e8e760c01c8f6b572b2ff6849ed7e6d61b21d31e3c899362afaba92325033c43e13d389584e1d24397dd527f1ddb69b862f82db204f047d03cd83a05b836d8f1580d986de4773b37146eba0f581f322cf0152b1a8c5dc61b6e3b1e18be036c81341df4073b13847f5a1a514b1251093c0bc089742f6597474ed833163978c6ab037995f386c7983b84c72462317d09e8cced03d697f20bc899340f01dc2e1b44eda1f80afc49ca025a3daec256637c65b9e782e835cd1e865b427a33374e289ac974f6d94896b062fc6f745e76b2bb7ae51ce5db91da558568e46424da25abc216bd65ce47bd949a0ccadfb39778aa92aaf4b6dad224c5af09ae9c14cab7acbd3de3766c275628d608fd5dc92b65cc2b07f80ae1f45578e10e040b56adecb81888b7021016029ce55fefce7d9892a2e5ec9b46c61465c0bfb8ee77f0c7b7758847f2caf3504d24c6742881a3f00500481217f0f70dd00095160aaf3c728099ed42b5f7047656d58ae4aa72450e5d0f0798dc8659f164cf162945a66467bad1556dd91114aecaec48fc86491d9d8286ac17bf3e9f6c2c77e35f0b19cf2b24c5329457c3aeab80d92ecf5821122f9b6fbde027fa3d2a6b0722d40b16f34dc59a9860cd8fcc1ec167b93932bc2fc327609f7def807efdcd6000bc4a00ca4a68b8a4641b64c79a28ad7481d94562e2d8d97258aa846f0b04a37aba2dc8056598149dafd90054789fdfb7847431a2572fa46bcea6c807f0721fd3290b9a968d03b7c13069c06b557f9b113463b64ae71125266c8d261e9de0e88e4b3caf9effa8849308ead8ed18dbd58a1cdc7c14b36c4ba346ad28cbc7831893d5606f6a86065132cf9f0c907876524efd546e72b509fbf3981b8a32a2c6badfb2eeeb88de4cf3ad30bd7b358796f5101d979f295564f0d96a0c8f3dfe6ca7c557993dcbe5ba3fdfa5652502e1eefa2563b52805743ce4a037b96e85ed72748468afa09b91cdb5c0e49a9ad9312654c6e99bb6bea36a1ec5fd7257e0b2eba823565da604fdc4598eb36c793a84ef90d70795ed8570222e73c76a982fa07741552082cf991799d64bbe22e9e86b7d95bde94c340b3b53a2a35f838d9b1c0317508f774e92011eeec878c917d3593b1f815f80270fed84467cca3282627746ccc19b661860967f32c732614fb8ad8eecf9039f7f5cd78cdc0e40e1eebceb91b28bee58e00787f18046a82538a6fa04856104effaefb9f6690cdf732b157fbd569da90295625b996308479e5223e5d85444825250ecf2bf7ea339a4013d0b973fe4acd8f139b03da03f5d9329dbbcbe9c0ed7c34821ec9c260ab84e5092d4c35317e20c3a8bd48ead328cad07688622614e1f8433d4a8d44553d89cded9b83b8ff9b514cb768ccb7801d2e3612271a2d0ebc94872730c7e524a953419f73ba8cc32ee537a31f8ba8ae91c1c8ad492b336b2e1836f048f30f21046a118b852b4623bd66d8ee6deb41951d2dcb26cf1454e0a4628c455c0d2d7465cc054240c8b407f3ff6ff8cc7f586943a4b129c3e1b6fefa8a7d6a314e5a08bcc819ae1f2ca512dcaf2c84e615d92f6249e59b6e5cd92c0b43df6e6a246819f6ce22e12e2a34566a91ee354b4c308eba042c2d0f60eb2e69308c512658efb2b046cf1c4f64ec755f0129b51fe8fda0285f78615adae8d2125a7405610efaa0cdc0b406fab60127411624a91aa35bde572077e707b874f96ccd7d09a5df9466cdb4c310d30481c4ef38e79fb5fc36dd0b2da3f02f2db1f0005155afed749d251383f86c1a868a3be1dc00b8226751f7e3e37bfe20ebe9d37ddea03a5b6315140e06791f281a9cccfbb25b9b976b351736d3dd8f4c39652d97adae5b208b9e79981af5c789dfb82924b9f3f12590427530eb79d7b62eeec70bdf0e3a9ea56e8f3e5782fafa720b110b7d9c3bfab04e19249e311557b3fbba2a186d391b1d18bd622ba45193f8057c6fb55b760de347aa3921e8647600757c9ba25f22e02f4997f9009a4e5ce1257e42022aa6c8f728941f0e8e8e1b4fb06a942e1e42d7a42851bcfaf4e4af88c2590a45d103c9b28e667c39c113f778d48a75717530adbe74111d4f88a24cf8fa5e62f873e48208faf08d391f98dea6297b0242c57ce928b3856168400e0839cd11fb2dd5ab494ace4c76d7ad0ef20c3dbd7a6b3f889113ec259c3af237e089add3100d6e0fd0b00e6a8865d666ea72d0b86584e318edfc591a58e2da81cdac44ba54e2f31afa83106d1dee4bd8ed88fe8b75f16106490e613efecfd5bae756deaf1d6a973ab562a2aa5ea29e6a66f50ef449426784756381cc5877d1011c81a39f52ba70cd2d440c97d3e0964b311ca704376c3de46a2d24d30faf2a5f9cb0add4606528050dc79d55555958f620b0d3d18454700b0d68973c0fc6fa986c7241d8f9c864c0d954d3e43a5447233cd1afd22edf54936ace26a45f299ca69a0899b5d002ff700156da27677e8a5681d2f25413d2a48dca954df4a19d6112f8dcf0f7a2f9f7b5fc962e13039ffff926ceca96816f88aa1e983a2b1cfbe689d4a61cc9f7f8f4af532c510d13a8269c3ae32023834b82fe24527b4c3a6aff42e02fe085ac913b7a859105f4c966cc434983087ad98627edb67ef2c19e6a80d40aa8096a6591a7fd0e8941d0a7cbdd21710421b23843cd4c67a4b123c72190579276d98e708c4c4aabcc817e87c2bfe2e8279855f11f5679513dda403e34c128b02aecf43b779f140879ad0c06235d9dfec297a6512a0fab56dc698b0747a53ede6341c34f6b6c4d12b8b6dcc4c9ff73fe0684c07b1086160ad582ba060197b8a8a7035331ed6cd894b6b8fdc2a0c4d34a4a8c06e0b4c3ad815b4b54ac42c158637f8501b9b0082e3a26e3630033f9152e2a5584f6c599dfc892328067a6a760e9a45f75bfcbbe8d29da85d6c01dd9df67125fe9a40f0c61c21f3254c0495fd778d41f450eec169f4a82237206d3b82918fe6cf1e2da54cc254258004330a161ae527344995a4232ea3eef2d2135a06ef97044fa6cc4f6b907ab592d6028259148ceded4a8e5fcc36cd78be2710a460b6deb4305a2504d701a373723c560fc357d1082d46debd33c53b8f1c0c06f55eca4f49bdc2ff3c496c9d80a88abec0bae211d7f00e514ff50bc2e1a827d6a94772f7081b7d70d48c6eb4057f9eaae26d5b9468f666ef37b6b590e4f60bf2b3f5c4c530efce20dadd29355e147f8ccd46c10b7d2b01d481eb71ee60f537e63d3532ca6fc8c072c815ce0b2b8b2b6de8103be53eddbc6b4d6005167d62f357a15bbd3115e053b8bd0d297ecc3b98602e344a027f56d8c84077db41d4f85f65bccf2d478249cd050daf991b48f6ce6a7887cd9d47cef12a63e06b4516fb9b08134bf98b185e772af103e93fce694b9c00a0c77905d0b39f1fe890a626697ecf080718c533e563e0788ab0dfea9b4f0f5870550c0fdbf87dd9b814faff33de9c48feaf9d978878e4daf4eaa15495c1d1bfcfc0b2efdbf40dc78611b69854632dddb7eabeef9d1338cf568c7e7b37948e24adb9b1ad8d29cefd4d1cd1ca1202d5b0ad2375f61ff855860b754babdde6ba18595915baa12b8beb66571ab378a1cc46bb64cfee702ba4b59b491bb2bb51ecdb83ac108f60eadc393c58e56096e185c1c2f7916cc3ad4b80452e6f021ab5e8e6945bc6e7f9f098637e87340dce85e441454837e8d607f93032724a49a888cc289e739e287bddccf5983a7395387e9f7f385fbfc3814753a4d8c61fdbee73795904eaa5df59d298d53f238836773bce83850a39b1b8db7dcce5bc5cda846b244c2c32d48b75e8f7dbffaa9d1f8aa7fc850810dfe5164fc00f3aea9e34d3b15e0f0cb29b6b5738832fe4adff227c07e5b8d36a0f96916641493e0f874a6d511b5a6c6754a614f0752c55c5ebb9aed293509a66b6997a997c789d37a35458e88c936ff48f355aaa7775806b15619b43947ac3080cee93b3aa7ccd5e4b0109702cca1dffe0cc0b1c52ace63282d1964649acbeb2e1909515383db0ea2219cae1f361eb0803673e15cdc2a5c971fe13b88aaa04c6670db7b5e840ca6eb07ec5b75b855e9d50bbc9b61022eb92a69295d771e2df03976710f0f7a6274a6660dd4c130d1b5574eb4af9cc1fd7c93e45b6bea8aa62dbd8c4aa562f535367d196f199105070b3cb1051c113ee7511c0e99aaeceb2d26ec4d263be7e45a47f27fdab39463130d80225d54c4e2d6dfe79c120484bdd08a0954de546c63fad827e0da27a90c3176518b1e582b6ccc7b59fc51c2c738f77a36eb8467b5840a5097b7987f0732a1ec56e5bf087ea2373ca5f9ce429a26dbc5e3de931bc5654ee953d49e346d6762260e22536d1c8c6a6a64915cc35a272a1d62c999ef8bda727c44ac6809054f7a17419f2dbf52ccda9be2be8f798d1f16df081400746bd4ff7e7d49e6e3566afcaad430df1293edf08fa0a35879faf479ab3950d0233d974f6ddfb781cbf94d41f297a50a94a001f9a492fd1bd3e956e22edeb968608b62f385791b8a63a4a0535c30a91e6c938adaaf90c43db2339160dd7109217c0b9be0a0e02113cb44cb5ae4e2e288411a547cb81879aa6195f05107092d3557f6e6cd5ab9b2079f19a72c084fd9c57a76a014ecca8e11f4af8ab0bf5772a4f7340826cd7cb4b232bbfe4c86675b52cf6f8c372650d6961d77c52a74477a52e18536e4f18b56754b3631327a94bf692624b7e09d40d4d06648fef7c3a51d0d660825429947d7b98b3080498183e49e100f455daa465978eb658a81024357bc6aa4630b75a4a1f07aa7d72640266891c09804051e23beb674eaf1ccf920458ec7a4af2d0def3fb0f7b51f442eb3301930bbb9260f0506f40447f12b5c7ff19d1f02791ec99944c2526458ae975f077423fa4b169fedd29875e46f38557ee2a7217a3b29e033542582b1b01f36a8a3da89e5b10994e2d8936997471ce75a4bfb2df8c200157908397e3db872b0cf395dac8dcb0ff17e8b6d1297dd92c0f933b9e8b8d84d41e3ee5c885a78642fbfc2c49aa79a66eca5c57106529151c225aa9d599ca31abfe02c712bf3d874f0113950edc9efc0682baf945900d1d630638688a5dea2b0feaf867f444a3028784daccc2336884370b3abdbfca51b12363c3566b32d3e551b7c375cf83d2422855bc3ab0bfa57013928e29e1627be20abede673ec6aef849d8b7577cc652c52f1143d56f73524072c76e9687a469a77069cdca7ac12e00bf83cbf3710a63802b908cc6408c2e1c352afb27f048afb6a78eb11280a75ec3eb6ce2e609dcf60643870185622ea975e1cb4a603b4e00c9c71d248382b78ad5387a9dad804c3f160740fdceed52d3da80441ae8cdd6dcc00e986c663a6023c250a806424d42f2423912fd04c96d6db968a4cbe0c30e07f29ea0a372415bae55400b4473265dc25d43c90ece0d9c62c46445404d83ffe07263803166cac0bf051a92542d6020cedf7ba548adc14ea62a81ebfd28f10c0d9ae0e568f2a9d931b5e2ddf0b84bb59b38448c0b0ec820f02a32115a834a636acff0de4af8189d16991b6cdf8b6015e228cfc24c71cfd27a3f0e0240a3ee83368f98d24771cb4b69cd479f3d693c787e233b64744dc55f262a0f0354159f349469b6901709fac2ead6f3e3c5f1435ba2525dec26baaa744016dce44cd4e67cdddd08178cbb08c44f6355e7da696da9a0c09952b530878e455d68e20c01498589051daf1f75f5b1fae20f38e31c41f949a960c44f6e8a01e795efa5bf1890ab92f0785f51893259bff0b2b07dce63be82bb926e4259076ebfbb8d08c52f607c3f4a16a7d73ab827215b9b22c7bc48d6603b3fd9059994520fda5483506faa971ef39de784a8b995572212c726944a0deb22d1596f8646f5f484f0c39db04172c281dd3ecce4c6afa4203df7acca6d719a5732aa33deb68633d2250223b6889986e91072db37bd9bb1a6315578e608126594091edd84f84a3091223bbf85a7298c5544a2018991fff8cf509093081030999b02d7a147357aeb160d1f045cc89a9f952d01997e92f7f371c47d479656d751dd401e911deed60f79f739f42b660065a4152fc916596d8937cfc96005144d6f0e891d45cd280eb7578903192660dc57e34f3b1714b09fa45b8d8d31d21380262ab5ab10ce5dbbc720d20ba1ab86ffe0489b71301a0dbf5a820e9a07dc18f324fc3e3830fd54447039006527cadae655fbf153b1caf994ba2cabc49f4ece5b0ffe3267ca772e270f6e6a9d8c879fab54f0ebe158a7237d1f63e6100bde740e124a21f72ccc9848d9c9cf5c61463f39fecfdf7859685f85e7310a49518fabdee6e3044aa70fc890dfe27df27608d121d348a5ba904ad04a83520186fa81a250be78e134afda06ef1fd575e94691e7548342bd454a6dd4fc644d3cc417cc2db17427b8b4133300c2ffda69503729344bf57913897214a8c2aaea20f2130c9118dfc090801b14d8cc6f30822db55bc58a23f202bc68f3934a87ba4ca2e7cbc57cb96a82c6f43088238e9579d7bb862d0239617adbbe1dad24ce813d20db2a7602e8f593fb265b36fc57c5c550ed72d303c623fc7581f5427a84a95b0b9f4fb7c48552f4652c85244e600d584c438b6d5c8b4394ccc339ca6fb2e053983abd45f2161f68ce9283a71c00644954327d0f3373789101cb57179a94f0072de0b2c3f3bc7485978215070ee71197e22fc7c2ad571b91607b0a2e8c766e38d5a7942c90db55146902d84c8edf3558919104760e5128befa0ca03873287abfe938f2cfc1a7d45f506ef9bb344198fbf908438cd989d1966bcad22e01fc8988efb6dcaf39c72a35528f794b85372e297fd7afb789404028646ec668e4024131c8a34abd82d4ef5e45386c3e48ab94c835f69870363fc63deefa0caeb383d40b408dcf822e480f9810093f83253deb7aff71b81caaad9ab6a56b76887c8a10f0711f5a0770cfd11ee15c18599a50423d950313c3b845ab0dc9c00fa938357e3d3b69d9ba24eee809a1af913203124fc27b981204f242bb68c34b7ea31ee42a4982ba5d875945e43aa928cc1d2f383bb9f53bf97b45dca4cb90e91a5d36185162449931c7b7e076faefb0156680c50a48de0098da7ba55a3123bd4fb67f294725101d3c59069217c4802503ae2beb3c2104029b5317da0fb612ce8354ee1d199c0a863313ba3aef9b69dc3e5e274baad3c6018a0b9f8415fbe63d613454a0b5ab7046fbe532a5c64fef927f541a30474a5a0b3ec0ea79b762bc4d49d387fca5953e1523ff932ad53e53a4d6e58c5e2b3ab03acb5e71147a8e984178a559cc88e530c116e47bb189aba0f1c7105ebd119df624c4cf58d3e02155166d775e3f6448201b19a6a8ec60312849262b3570ce1db2493a24939ec95bc86e359826f21e38fc5a63585587a20e7ea7cd4429ef27f3b8d4c1c28a7c69002c58201fa05c6d0ff68abf8d840acface196e4c9cdd549deaf7a327c59f180ba3e0d930320072e2ce07ac01567a41fc76a3361c288dcbe50e9475ebee8555826e8ef3ac26f349079701aa773a9f144f9086d0a396f64058360190fcf0b28402f9ff9851bfdba9e437cd062a2f4fac23691168423eef9701792195d35183b10182438a83c7f9dff336641d36b8029f0bbe519f17e01614fb4b3a3ea3bd81d70e67b5031ce840ecffba9853c9f6ac72a0831c987d96d943ffc44d87862823b6806df69cb0a858e12d4f7f01e0a2dc7e62ffabd20cdbcc9bfea58be2b13ea4f34822f5a39fa9c4b427194f70e7036aef8c64863f91b1f44df593d22e087c0d82318b9ed81099e7330cb6fb6507ce8025268977e30f633572d9ab1959b4e6a746e65338b904edb220ad9fa232189a02b8543b41831bcfac537ae2bb2db2e371130048d2bcc393395b6d18f44ec7b10baf6617e1db4432f7dd0a0be99ee8c688409c4438d646e36503232bcd7ab632764d05f40cc5f2de97129d7ed2bcf960ddb3c20738880bc428de33c99c4207ead58cde48305a8255a47328c489e9ec9b4109d289f410e4dd60712d9862dad8350ee3b9ff2a1698ad19661992931f9498e7358ee14bc785885abf5e68421f5abe07e610360925573cc9e91e86bb8bc575429c2ef658cd63560477e7422b81e780fcc33a9910cceb80781fa3e305d583f83725cf80e5d27013cea68b896db6f490dd66d298fd9537aec6a00bb857f3ab4fd0d2a5dbe500fd0a4f1ac84e781a911d2ff4db17cbb1e6408fc1facc84a25d648513b22acd3c46d67d4bfa911cfe986acfebf681033461228fdcca5122b7dd22130e51d640b4565f63b8292b3bc894fbf77c9efee4b3621205f8fa99989c87b65fdefe8b926996f9ca2a2bf9617ab6fe092a9347ec63c3caa2ab268828996fcbc632a0d3bdab6a11e62a02f5100e3023a8c702c7c0d60f4e0853b4b09d4f813a1b77ed37f4a7838b92c06e96c40366f6252a74864e5621be9581baccfb5142a78fd2cc1971f8d530cba385de5e8ce9b577644d571053224a960540a057cec6ee2b7e7e743491dde071335c2a04a7b5ea826b9419c8f42831c9cea4106cbc0f980c302a04278a804350af46845e4eea109563471980a651ca6e6838fea391ae574760c56d2f07fdcdb716ab290db1d6af34820077b77e09e8e68beba75551e15e254e8bc815828e603d0f7b6c3ccbc7fd29ba15a4c4e1033e113785871dab4d935f1a34e983bbd0218545bfca5c85d0829e5f93689150f3b79ca1cdd0d63dc9d07bd7652b58adcb1065542617caee2307b9f307617e18c1b484f6ae9ad03f9e3769c6f3de449c53abe9e498551ff3ade2a12234c0780695021c043b6338ae1ec84dc006ba6ea24f8bf0e9a91970ed62bc470c1d4450a610ea66bd1f6c57450d5a2b045c3650b7b86072347a3185c71d6b474f8a4524b21e0e3cce7ffd60d8b11e2267e85aedfe0c28b5853c7ce381b4f5652f039a046c49f0496d0cd25d286117264418dc70970c14b743209ed2ba923ee088b09db635b3912e5a64d27ce16bd7d1fe49a80621ed428af2ce3897042a0eec9f0638829856c0a951e165feb91a0412c9e9734a901ff13200c57db89ae7aeac8a9d056e03514b67eae2c380aedf07b9e276d5ece78c68828ce22cbe11fe7df1d46a4c0e9a973c7bc36750aec3a4d66b6c9f1f1c7675da3a6a2546022cc8c46947b243ec0c3bd915ddb8538096fd9141020451ca571545caac6dedb9ad9904ec101bb1809cd2c99d2ab6b866a38b9dc3d80b3fc512317a8d1c9cf3b2b4c9fd945ba14bf8e045971cf78004abbf0ba9123d966169b54094a89cae8ae246b5b1875540181898f5a5908d890366d88b823b85273218770aacd0380b32393e16d3015ec8c1e790c5e803b6b6a11f48a7706d60e143ee2d46cc6ae1fcaf186ba35282f82b118c0293a23753eb0b317107e6ecb7b7d6d1b8e1dfa1bbf328f3a7fac2e1a71b58961ede6ffe37f55a0eb41ed671acf98c2ca07917a5a70e178bf5356d2b06e188a5e4fd87703eebaccfeae2e2eda01598a7581eae0552f3511fcf83c6333dd472680b0b54c4d6351eb9fcd92aea8391038bf5e43139e8e91c737701a4d91784b372a88c6d9bd9bf10bf5ac8a9cb3da4d2048013e03f60d843062ff2e296451baaedda696ece09f59c07d8298d72c8414b6facfa04610e8ef763e757a3f7b078e2c80eadd46990e80cc483a4f2d5c3aaa659df6f480821d963616840493f271a42777553fd554d484df1540b730ba236023df12abf3471578d4ef816186070917c128d08edcd396e2f1aa7992c0c24dda6b82352cb7a0fbaf499e6fc01aa0c850c89db9c84e021183d909658be24bc02c042a4701ff657c1ae9d677106f000bfb2221b8f77182605161488cc7c702557f4ffee9406f0488258dee0d01720ac9f94aaa6b6a43cc25c98d3ecc335cd1d825cb6100ce4ed55e1bee683a2caa5e7742989904f2b021edc5aa9973bd4ca01b0f73cf502421eebab826c1b58d4b91a79a33847c2a6a9be5f073646400c6ce89be55b0a499dc47a9d6254cc2dce928b82f2aeb6505d8b4238ff73cd326b0738992875aeb33bcc060a3618dfe17f6c2950e6a606a67dfc5f93294cd95987fa2403b031c904918a8cbbc1a38f5207139bafb0208d3edd66dee19afceef4eb4f595e9aed2f3c7d08b74fa6c8efe7a5fd7ef3be5c16e3e345c2ad5c9b2629ec9f6b1b0464f0f27c0f9f1c18a7be4a0d30f86094f9cb1f24ef3aa6c449b259431b902c1a264c1693ba1410c606ff70c72dafbba9e656ba4d5e7d807e06ecda1694e198270180a3882b1ff1092612a3d8748ddd40228077055b0ce6bdba5ae50dcb83d3f5a12b1ff2916a0904ebe25d8b6ac24bf0923be48983d25c30a3eeb7b0dae3b74e12fd09626031a27ed2f11ff4212f457d7c57ea3d29091c510e56a90486c8367dd19955740d3fe35b042e31d60a4ba6879f3d04bad3ce0c9a3f885557c16ab01681c65d976824a75c673357e14e97f28f14a71a5205788cac2ae3fb713804e7da1aa8489b806493bcf698048338de98fd1c2d64f2d3fc80050c12d4733b84f021d33c40c72b8f38bfc7ec705761ea1497348874db595a777d82f41eac74f4a147d2eba446bb42209ccecac4a2cd2522fa68d3b0bae97f9fac4eec06292123ac18f04a3f0617360d32f013842875b68e52ddd6b45c35cda375da00b7621711639ada60de168419c3b2e57c5da827cec9b7d0e098051b0193c78e5af142a508053075f6fa594b8c16c976e272fb50e21d62b013bf19bcdacca6bb3bd64226ad7972214a2ebae6147306b82ee43570810388b8da46a41fa096bbfd0cb8ca56014ddedac5bee3e97cef45f327880ace46398eab00cb18f4425cc07da3e6b02d8937fb5746e13724477bba659392436879a599a61b1d85e57bea0bc3e9b78afd1d79fc8fa29b6c53b0e329ae3808ced2627f18f27170a60c5369a0a070ae00a9833cb9ecf0097854a586538cd608ec0c2f53f73fb0c2a22221f676fc6e4d043b08098a762ffc0299e5aeebd5deb9645bdc64ca7baf6947c8d552bb514da37e9455b4b5c822f89bf63083175437531caa04855ded889557895aa812923b75b8dd22b1846c98bc8dfb9e7f726e5958202b29f81b0d76de40207d678432dd99fd681c3e2ea24c01d1383cd1ab9739e18ee7825499229b4a5c7f6d1676adac24352261796700d8f2c3de5a84633d6213c151c96b926cde6a999274882ccbf962ada4bef652a27306b132548ac3fb8e5e4fe7c74fcdc0e3fc021ab9571c061c90e843afa232a39f3eac4c1667fa54190b280a8a33124bd4e9b4041b1c9bc499de7ba19db7488ab7e8e1c209c9f953007ed9c03f890cef4198959080504cf22ca5b00d69f1d3e6633cae8375bb56dc2da3eb41dbd54123c5c8c0dd835473c0e9a4eddf63dd406591353ee9fc1d875134b7b6244e5e33ef55da933f1c4f3f3ae092f5c4a039d2d903fd20ff0dea4985f030eec9fcbf016f548b0d67b21fd5961812cef3bb62604575c6e9d89b00688c5875b117bed849800d453740bf2ab1fd908d54d3e6d0fdabcdcdccf1333defeaa84f9c54fb1cf7d57b1c934d91d10868011c14b7fbc9097374b0c74bea9902c702fc99ed0b2710aa58b4b8ef0c1139047d14f1a9fd54c73db413a93a56c5faabead0c3bd17d69919ac55e03842342cd74429683c406a7206fb4c3f75c2afd634b223f46fb90eabb046e66e5dd0874fa077dc421fa8fc2a542f520b02abf13bec23e2ced64cd427b44b7b729147de310691ccc0a78d4457c88f9c19eec8a88c35e1c78bacc16ac1bfc9dc536d972047d703a9345fb070fdbb7665fd870306b96ee8b9bf834418ec1c9f443a8cc565fb88587cdca5043d3c3f4ae253a54db1609ecbd3f8fb4444fda15d7fa0cc8d91a7589f940dfa7dfaf2de0591bfd1ca2a8f3f5793a6d887a9ff7b0859f0a43baaa943f7500cbf6ccdc30434bc94f5580ed880442ab91d446ed29ad81b70bc6aa622ba46138b39b310b90556e0ebc256dfe8b6f274409e5acff6b51821ccbb2d6a1b5b65299848bf394b475baae38bd4d46afe6a1ce7b8edace544e163b1e4d8b237ce3ddce007a77a68975c6d8293d642cd666c694103ae3d65de8f66910e0c6b53c5d40af3de439d014edc0a7db5468eef6c0cd47400fccb9af8111b57d14214547183f781413231083dfb7ac6835fb65bea00924f5801985df1211e6a81dab4e5ba3f9e23636001541cc1abbf37b58c89c3711575fb06239a9870103494d2a6465440278d756536ebb69190aa5d8df2e22e15708d8235bd09e2f950511d6af38d9a44b47eb06947cd045f31278d91e4c3635b9a9e10359935ef322748757703b39a144ffd063dc92a30484f6307f9c896e18cc8556c55eb183f2cb922ee124c9c584c60276517e0cfe4e6aca9a2d1b9e5460d31487aed5cb573e6b3eb4902c128630895052341e6536ac1675024ca5f86c3b074b477cb093b1a8a2777e9a9768ea2113cc8a4b649c7e9389bf4902d114c1a39117b1f5cc2243dc291461e99942da7053b183a71247364683af1f61c376c1b775ca66073cddd7f48b07350bb75a4b472a47ae5da9829a21e748399a3c3ace7e6c0a57e98ba2abfd59008abffdb71b3e26cba184a143884375ba7e64dafe963c86813c99ef35627dc1e55ff94d5afe9836f77705c5e45bd00bce68c0ef138cf2dd10ff14fa9dc336d4a229156249cea36bdcb0c013b246e50aff4fc2a3117f2a0dc8e8651c363835c2759b38f5bd2c6969394909564ebbcd0baf04db17b86b6f60680ad55deff3261326f5476502178d471646bed16acef316cb2535ab403ed3da0fa50408e0646c57c29bbab80281c37a1f6e18ee12b9af984d8301bb66d5bc6c713e33ac9bc828b757fd3be10cd248960a71be2789795c06c43bc95c85426dd245bb2cc96f70da9723d0112ec53eb9b3f66a0661fddc2c6772a068159dabb9aa974ee3ab250ec28095b61daf6de091456fa18cf1abb95a3638d83d0713cc27686d0ef5d31b6397829469ae32d70460be64580e8e4903439588542fcc02a08961ca65c252af29d2be5a557ed28c83029eae1468cb46f9367c8376a925b6982619c56642b6be398aae158c5dda8eef31261bff4a6b67e1f44cec421aaefc7564255c98cfe4c0421e1170bb9a7c8c0269235cd288344f7cc8cf87485aa9c4d1f65c2c7c61b3dc99babb7d7c5ee826fa5a13ac9149d41fd20e4d7f324c51a5c2a87138015d784ac4efbf90d22cde757b0ed97c0b3614f821d61b3ec3f91fe61715051081b3c5416259cf21b34bbc87f75982ab449cf348b4c1d0b85b3ba5125277128d7d440d6f2eeb980854b0227e61e1d38074e4a8745a299b7698163344ae9cc12bb9a78ff6311de1398727d6e3e10031432f54e2461563a4c9c9a6f733cc9b58acc36f295eb8966eedcc7c6caaad40a5a1f1fd34910c0a8f7307af7ef84b65173836244641e8c8240d419e0235934974242508228839a0d69299a090389fa120da842a1a13e38652c80870b3d041ca7d8b71f61104e134393198df431639fe9f2698e89d104efecc01a12f02f77535d17be41e46a823819196eed47f742cd8848ad6f8d689e6649ff90fdb503081114adb05bcd5b39dacb6c153549e55bf4c2b3bcbdfecb510305c54992179a54098f6a14ed1adcace3486e07dc77d57b63a0e208edb60de717d50b0ccc980b03559d8611d7915d6925aacc7ea34aec6bfeb9e81a65b276f5041d9b8409b1f3a49afe8bb90f4426f9c3524017a90178fe1677e20b0af91469e2a743c089480fa189d47b5685ce72dc57ffe6625cb45f40c042babd7e6924f83ea9917fc12a7aa8c062908f26682145ef4ac25c6a5092c664e6a3e7041434d749ae748b238ca4f402d131c5bad5b4a06e797a4bbd5a0bd36a56f1cdd3540778ccf1e20ad2ebd54b4b7f981311f4cf4e4750499488a6bc4ffee1a855262537c461d412bcd947de283f7a8fa206ec6dc59341f27502d70705ec2808d6ce2ed712ad61755f97a6833572b0b9494ae8235c29ff38ad43087981ae9ce5e61447e33aef3cb12c1b88bc9e26cbb80b2ea14041d14b019f2d426c959e6a7deccd71e4b3afba3fac4548f0aa2dbbeeafe41376af3795dd335ba6674eafffe8495d088c8da73c25d5adcca1560a0a92a01195e45ee6339755b1fbbb3aaa99380f9b4fb22668275d9f68fbbb4df2fed0e6a0403d4baa991c8b86153a810d7f06cdbcd754e786b3226d61adc38f6193b40b257286cd9e5e1429d624e9c016a30119fd9b319a78083648c13ad81cda336506145a1bc31926548df66f780148761a1952d5fb0245065c9e5887559cf2328efaf4b49bad36d2649975b20fb7e3c338eee6bf9426af14713138990533387307f779f3fdb900a9210fe3168ebb37a0754e3c19d7c2815e4059ec5b619b038b2d58ecdcb931499d444050955971707bcc7a4ed0af0c6db7306cc00741179374b531c1be4ac59bffceaf72635a469188ada6237cd049b4406ead8c090a12b294109a77991bc0c8d7511816e72acb6d4baca375a933c651013a9d136174baf46bbb4b442e8ea59c217b2ef1679099e91337d7bb87e379653cc8527fe90332dccd44aadb4b9d9c8270d748092556e0353943e506b7c1a381d1cc6dd1de3b029b016ab96081460b869a203e03051f64e9f0d04216944207ecf4d04a23a257f23f2f2ae293173012bcd842d2eddf15ee5b738b17cd4b18824aa571bed29135bbd850d0573d87366936200c357283566954f8b2b13344d15572dc0f91db1d8d967b3b96ca4832bed5ac6ba192181c1260065acbeb080db8b77c225f10774da802b4fa69391c3d945d57638fb2b65500c3ce120c05d893c7870958c8c35f0520cfecd6446268c268f25b70c3c9b33449f9e5db801e3b2411e87d4646d32642889d04334a548b1fd3baa1165c396fcc285a66cb24af7d7d5431fc83a2252590662a41648b75374f01f8281a28ac11b7cbef194a8e83a0badb3f27e473ef3a8e04b774e4a24f401983840eee658b5ba88123a5d052bc4d67649d18f0b45d8a0316dd7e5dc5dab0c240de285778baea85a0427a89407eab7770b4a81a3d9cfb0f70caf07d8ccaeb171d2f0e58b8a27200411833ea2c64d8803d3e0cd9a3cd4e4dd0a6ed47cd5bcaff874b2e2c6a4c7eaded6b4702dbd4a6bf8eb954589668f8ca76bc8f1757a1c1aa181b0dfae8e03d8e0935348d6c2efca3db767fcf4e7339ab571eda0842c415212363e4a9463ee3b1c509b9b5b07c5d6c5452424a4f01002f9b0a1f4b2f5717db140706df924a42af3e6b8c84002ebc1613fb3cac2a10a8fa11f09a4b8d0654b00a0f83d2d7575365efdb86140e2880f5a1330c8442723f3ea449dd4c32e5fd479de5d71413c77158d5df70c83ad4f179d2b819c7fcf605b9dbe778d2a992d1caa42f7c9f4790f839ee7473ed70b5419fd171181fa0cb32c97ff26af0066c23c1d6c2ee620c0485e76acdbdb42b5ebcc3288de43dfd0c0bd992f638849ff0c9cd68a3419a4272c50764d3b6aa0309e95cfa85d9947f99fef38cce326ab1ae3530cb1df11f8508446d7f7171b901d7f809d4f77fb139499f3587609476902898f9d1f68e24a34c2a810dcfa513ddd703cc29276f9126e0b22bc12412c7cf148405f0ad4c9bcd1d0798b061e123ab92b6275489eabd0d64756e730db83a7aac48c6c2aa53f0f1582df40de6db0106e0cb8e49c81ea5a486c1fe07a309d229b69890a48b08830b4155716bbe819e665858ee64ec01a00fbe1781cd2cd5720cea02d2d51ea5689c01b121ef6ab82df5a113086ff828b0ba1b487fc14ff8cb77238a22ab2fd3fd8d31b0f417237d94892255db1da57e878bf01466e4c48a25db63396e6e1c90cca4f0d7b3ed8ab3603789da8516ea9e628ea2116ec0396196a066d6305c5076ae793e205528023b02242a70b39e3ccbad19d84529b15e6b7be4031c59b36768bef96f71d807b301fb4cab592e84a4c84f0217c9c19c47755c85f42f4fd6faf5ef5fea15768a30d373dd3dd46bf975082a88a28b00c9fd1ca8bbcf05ac9b2b1d370fb5d3eb9af9b6d622061268c8d39285c1870ea1615782a25380dd6726840771e13c3c0afd4ec38947764b59068c475d9fb28473211a8386c8fcc04f5dcaa158736a2789ecd3da5e7a83f87a56e6aa9dcc33e0d21c95dffd559bc5c08de153f8e5d3253c78d118353391eb0adcad0688c57e97e2ca52e5d1c12679a9859c7c983fe72b32a581b8a803333b2531b79c2dea1971182292c74f1829a70dc1d3b2fcf79e3daf8153a109409602912b6472977d36e3e9d3d0a2e7e406f852e8cb206eb7c1241ed59a387da2845a884f0cf6908f90735fb7eaf51fe89674cf68e1270f9bcaa4d3c56f9cc7864294e0543a5fd15b6adc88505b54bb2d93918225ad62fcef4f555aaba18b2630553b5c24f7c4552535bc479d01bd4a841354ed922031193f6ca629dff118ea772084ca8a04c1cb6c2c4a74d2e68a89fd398b2a3a8b68b367ec4d00402ba58308c144ec1b18fa15bdc07bf1d91ddea43047ebf435fe74dad84933c002cb1c3b6abb7c0c119b366b3673731ce34e421405afd4c4d16dfe53851fd3dd28b52cc0890d7fa592b1e68bb9e91de16bbc5b248d50390ace947b60e798c757b53b5c32e34b33de191563b403e3c01518d7bb2d347393a952eff979992fa3a73989329b3279998a3668d73759bffa255625114df9610f1c7379fdd8860700e6a8c24096301cd5850bb46fc54605bed9af264cbb0f576fa809aca1423f842844eecdf596e6437a045de2e4850a19f467c3f58521d0675ad38d9af85aec171a80c5a569e247d9194fc07fe8cfe1ba7fb069ed445d817bdee8498005e050935796ce8d1075b9dfc236e7b8f3306602990b95e8247d582a8e21f034c3830638bb06e6396047e0d3c86d13f0b43cb364184bb9b8f33d41747d98542e39170380186081148a131dd8feac6867fe6054692ca61a388bcc46735392b608892c3dcbe262b9b3f0472df062e1f22b0c9532871326a06915dee74aef1c0a984a5727d6110cc12babfa4f92905e31ea0eb7dc01f5ed0c360e67feaf5d67fc5d5fb7061081decff42e6262a708797c6172a8b95f5b4d0144ff317786376d319985fa9c005f7ec076b0fd794948557c6ed4b53d34d6599f232b3a4847ba297f9066eba5e8328522c53beda65eb7e7d3857cf37fe7427f70c6697a016aae5cd12c3433df1591471ce5f16855f2ca34bea0419544c79cfe0608242a13e84b0c0fc6a865852c3cae7c6cd22f566c1c28007a15478d67969f1da87fbc68d4b136bc8a6978ea270bd3c29e1331293d807d4800a37d3c47faf1ba445a9d2f7f8096f46dcf4dfb1c10ef70d7245b8e6dd3c075ecc5d43b0b628249e1cc81283fdac977289746dd038bfd718f3bd902c103cc3392c5678534984ca484ae0e1c37e172b66398c309ac10e51e834b244890af8160ad27e2fb1dbdcce0f7ea2d97fe861a55e83a951348e1b92d2e8a430d38d6c8497ce5b83a888a2f44e51ea2021351c98ba8c84674f21b7274fe9a4404ed22bacf115d0c896e9844d786a26c4891fca648a25424f12a92c115c9088b6a3220129f6d0de9f046a4a268535146aa28bc2a4ae32acae41547fd0aa0830518c402b0b1002d59007b591050660ca1f0cd15f336383d1d8cf812bf9f7130628c18316f8c984946f97bbeddf04448fc6f215cb0d9feda5c39b62d18f0bdcba295c46897a9dc2e6708bbafd84e831a095331db824faf9600034d0ee778ea9713db1dec2c6ca74342677ad72345a9842a4454a6d8352a8a11eb47578de6a3a2865ffbfe88082c3796ed9e12dd049d8892ef507e106351a0184f0ceb8a29221c09da998f87f8a444b0d12f0d1db9e778a3b79e6e6ff98b5a9d61f4c3ecc970457331504706fd280d0b229d612a28b76745d5a858ec04c56a177519e47dc67ec94810d4e5167a38855e6474cf53619d2b7bfbcedbaaa88f87ead431f621efe648344f7bcc9c823fd7d57a33ad3f0f35fa4fea50338da31e58890a8276ab454561c6500dfc0789abd2358bb090f354872b07b5d2c2f7891a9d6b26cd6fd750d5658222e922468586e112ca0f488b291da655f4bf8940ffb42ce712bec580022cd58c9eeb26f15d11a2b965e365c679c919407b9213ec7e923eb483832e578e7b3af59dd8ec5ab2bed97f762555c4b0ab3176c9ec27d54494acae78606ae277730c2064c30a4737b6db6998053d9207035d4cb453a8c9a17cad0d0b03c3cbc2e9062172730a836126e593236440177ce33cc3b27b80e2577998e1d838fec1262cad59d78cec75ae4905f19885585a1dc12f03491443ba73cad4d1aaa7c0949bf508b09551b20e28d4053833fefcb0acda10f5b502c41e5a409d349485d2b279a8575f952fc03c4dc272f5ef65801d69ff777abbaa41e014499753ba54bb420ddffff169fbabe1c1c9b06b93a064ce1906d4141d93924198f118aeadaa5f9561a67f3baf4f8e959f97fea81bba4bf92f7d784e43ff7380d10d92e148a5fdaa33a4c17da09be1054a5d3a8bda6771f2c792297ea80c77e0d152c4aaadb7a3dd32bc11a719bea2f5b8a833fce8977e97436060bd4a6540c95d3629f19b51f19ad0bdad210b6d925cb7641d77f466bcea53828fa67c1d4daef034f885fa3ac83c44d4bac41550e4b35605e4a0e9c62cc376f2e5f8101e1ee72e7e14d56f2ee245e550e9beb95446f6fdcc593693469303156de3f81bdba8322fe7dab9c21088ec92ad7d24f3a91b84899a1bd1bf3891571d8566f1fad412c380753c137f9706a4c938ac78d8b3f649b426626730cb65d289fbc1f45ac8b90df71e82b6eb0676650c50ad64fa1bd6b05bcffb0b082dda461c5915a5ca9adbb0838cf5146de91300ad2c61b0d6900be0096b31a6d31d7f7c313a11341cf84e50c41da50637e35405491a800c11f02ae39d8368b06c89d253e0fb94c55a0c237d10f77c13271940884b42d8c42b3d2c73e35ab51a522435c2ff20570fd0fff3f664886890cd7862968435a1de65c1e54af3b1de238629f6e46ecebdde58994f9d0badcc42b22ef32ab847105f59a748b9f25162c11308792ce43e649c5313bb1b7edba5a534d08cfe8e4508916b168a01646e99dec8f74ebbab50ff64afe8f5c4953dbf77c25cbaa73c77438605e57a6ffc7e1eb35a6122f4535aba982b524f0fd990f10b48376ecd783ac1c1c2a5a87dce9553c0f9ffcbadf2650933382c817262f2c2685d19f8d919c573715faadea18ca424c2ef49ff2953086b509a21db1933b63d7b20a77478999cd839bd88d8de602cf380ee35cd5aaf10c7ba6103f88847d526408c1ca0a8eac2a8d73032204c6a586493d88833c8dcb85336f21a924fa8b9b3fcd6fb38d659749caccccfd072055fe1e2ee19a9bfc4390876077367135de0f05a4eb865f9abe472b15a432b918ff8e1f6c4eca1e80ce8c12916fbc5623227d945b0f1fe11f4284a71bce3d675609363d88b33ca3c1ec2dfe8d77680b96fd53f730f15ddf100b08600df2df44041efc58fbd7f94a2e28e30ec14ae17a89bef0d8963d7df4311f09c95fe78c30111c77d82bae3d244ef431605e1e6f45550bfb6cb7d2c02e47610a6e7329ca0b5d1c308a9ec1f89d8562a4f6006db18b7f4ede6eeb01080c66b446631a2cd7ec8f1ced95eeaa9e5103579d741b14ba055c0dcb54b83d5b5129bfcd35f1169e0ce2811993744a32dd84371961ca34d223e1d731b8293f3dcb7da16397f1b6b601acc94a41e09b84a33740af2dfbed1a5a9dd20c73ee196cdc39fbb333eca44c62883b0de345c496e48badf5e9f84c11bec5245bc7a57d4ae367d8ec212ccc22093facf03c584649ab66d03d177bbef0f4eff93c4facbe1dbb5301556db4def61ff332f4f5e6b54a00d5131f7fbf3cee6cac13ae286fb7cbfdd2eaef2a709067ca20ee84bcf390e5470d6a45f1344ddf4d18390b33e611ffd69f4a0107228d51735d24326328a80d06e3fabfbeb89eb7a3e777cc2f603a4ea349369898d71c323fec2baf197e19dbfe65fc7345c6f040aa1bbb15840d811a539e5e6645736f6f4f44010b387307881b39e24212d4f5d4c1f3c9185c05e99857df22088e39493f0677c57fe0cedc77fa3bfa77fc43b8377f9a63366f4721a14bb591633360b84acb5b6bb8990665b371112b203c00b110bff0933ddafa619d02606fc13ab9603924106bbca8c0add04a3bbb16bb56aed7911672a941da123826cbdd2628c5145478c37c6d78ad55165692cfde9c6698a6d7f743f1aea8da222454dd334cd698aad8606c315341c3048cb012f6110d884c6126f4ae3808739541c3046531f1602623435e20c835c5954787a0017a4f6dd8eb3514897867449481fc2b78d3b91a74b4276a230d225789e9d2e091112a3388691a6e5805555df15c28d942ce9e952dce9c130c3237807ba4c0a77838f5455ad425015886fe91845655b4f1c72a390c39bb6c37478d8446389cfa32c833d6838e03ff142212d077c1482e1692c9caa049d8314568332b4262cd1051e007eaf77e84110278620c6185454d15f34a8bbbbbb5bc892dbe077d1a8075cc0ef375e8e0f8a5003bfd28c1248a8c28c2d88810325baf0e2881e0a0a3370bf0b21383a707f6a64e48091e082e302f7a1d0c18186aede7c4fe75d4704de7b0f00b8bf01327c20833038610b2a3882dbb16a84e09430c1106f1a917a8486a3dd85445a8e3e465321ce90c84c0354029774a9e70ab584bb710947ebd6d371015805b81f95b040cf63b980c3d1efa8022c54156839faf1469b58d3a56b0b35c39d9db603fc8cb20ceec08ba3e1e8777db7d4dd8f37b10892d46f15b0baabf7e79fb7f4f4cfab720530757d40019b6bce35d7de4c4778235b4a43d87a70d839ec6eec5b25a955d5faf00ae9de2d8974c95149b0e3c1ee8ee2693998a8f9bd9e96a3bd5d89d334a8728401075b2e0d42082fa55369a1e6b784e249f258dedbf134d7f370744df27169f40512e12f89c4e9826c1817b5e5ecd02cd9a92da78bd90511cc8bda72ba00821ba381fbb05b3f51d39ea0896f29f9539ce8cda21b73648316753aa42fd59d5d9ac1ef8f565d7a33d3b34ce338a94063f4c59370364b6b7d6a0841d0c12d270a47dc805b0e10b0c0a3c7e28a348e7e6f6185148c6002e066c50e1945b25081888a2144f0909d36a2b345976026060f10aa27083c0fc07d77a481b005dc7768344be6b6e89596334409eebb9df81e0e765d609cc7f28408c1d9f1865c43a8f9d108a1a9e995f7de37bd025b099b2e75ed120992207438ae48afb49c20f0e007e097f2e2831076095eeae8525394f5b145582762c6c5ba7c96ba65ad6bfd59eaf5983e9f4f8cb74d0ee7c81257a457e2759c11ec78ba27bedb4abad48d060f6a1ee5764270763a2e34a492a8372438401a13439da6d16ba337aa66102a233c0a529082ef3df7de9c87ee893246b87bba14d55efcab0db7c37938bab9ecb6539da5d137f5e1b40d7eb357de4d97dedf13add22ba426cd372caf11c4d3f4b642a20e317512d5378d835e975e12bc79da66615b549120c04745e318d2c583594efd9b505073df549bc9b61b9bbee91b1bf870a0a402101ddc72642044063210e1276ea8a0b099396184af31c22ec52fd1a59a2e29515da166a8730520b8bd1d288618bd925f0dcba37938de81bc9aaa1a8dfe5249e5bd9a22b046992e354f7d69104e7666c253f61deabc27caa8b8e578d104bc032570cbf9020d3cc22dc78b2f7076d4344d325dd56a06bae78ae0f7e9c5dd1e14ecf91421abaad6d1a802b8bd6187038c7ba94b30dec7d45e55555555d707553db1a3e4c3dde86ebb3ea667f71ea7bbdbdc9ebb3ea80bc57b54a9adb5c803d91e8bc321e586c8fe534334c2394605d30be3e3c537182d09a08ff72c2b9002e7323f0f8b2882881f69b8c01b31e302af11d527f5cf5bdee7fe28a2a5e112a4860b14d35d017c84173e3a2360bc1146c46b04bcef3a2a0e41b614394dcbbaa895bf2c09e8a575698ba02762c6855e2364a316b06eaee05b1eacc838123a0b7d5bcfb057ff10fdebb183de9a853ebbacb6d11d32387b4b836c0e02676f94020dbb99089c397a81e6f2316a6ecfaf9e0caeb7a8956f34740fbab9b29edd5c6fae00aed7db885e5e569eda22e489987191b688eb44ccb85cd7883bfbb9f18e5ee0b534457b5ca0b9c84b396df54829698d9871a96a975aabacb7747319ec01c911bd42ba3d2069575811050d4dd5039223aed2a5141c6e7ef4277eac2049188044b822a2a0e3123fe3022f113fa4e8c3ba82daaaae548e40838808d717ce5003b79c167c81df6bf80533c2a071a9190337f5e1701536b0a171696fe40596f786f37397c2373b84f501c333f81dc2eb03c32db734707eefb702b0f89b0ed509447d939b5c224cde1f1cec6e62a912158da80ac7e370de5e52716d07bb76a425693d77415c8db37137140fb504bb51c5d3caded2544905bdfef379f98ac475d774c01e7a4b4f4a400fd1d60e61e78a4fa6877e624dec7b3c4c17bde5510bfab3f53924125d990983def4057410e856416c05c45634167b4155e9953cca32114311e42efde780befb4b18761323bddb6c88188dc3513cd9146a6eec4ed32b5705a44b59163537387e12033c552304ec280dcf929d1e9d243847687082e8d4ec381b1e9ceb34c8f3a07da3d1fcb3948f873f3e6e986eb63e3faf0ff897c61052f10ee164264c7ab7a271a98064571cd10391e0027ef22947b0ebe2080e3cd87d07ec4a6e073dd8c814614503a4571c17d891701264c0ef3e882b086e2e1f9cf9c34d221dc87c590ca0da175888e9f28033404e1347e076056e393745301069d4ec8810e9952a3e9665594a60eb2de7a68acfc7aa5c759cb6028e1a6a70d410c401c1ee52ece09623850e7697693938205283d4766a0bd5d11dfdce765ceb8980db01c2d7b16da4aea8ef0e0131bcd1be7eddfdea04f3fe2cf5207057f86763c95d1988a73b821b444f25f9d087a4f7c603744a5a8e0b76f0bb166a6e3d42c05ec953e5b10451eb68f4974a2a2a3a4650842127b8e5b8600778881b22d338dca7e8881c044eebc9bea08291b0a2918802eeeb26122565f42829a38c9c1c949193032415183939489293833272728024270748dea6a8141602ce14fc86c405d2c0b7d6570887dffb11d21df0e56c54039ba2565808582a351d78e0682c1270385ed319858173e90bfc4a3db41cef991455c99bed3d178548217cc85498fac75ace00115255a4628cf1144555d4bbea6eaa5f95a0ab2a23b5bda56139b10494532cf1f97c3e9f8a095f802a9062898a3a03524b2a0b7e240eb8b0220a2ea41802174b7071821b4008534a449e3ca3d6c02d070a492c28ecd8fc3b8a80824e5551534c29e190b3050fce57a926305a91fe7c3e6358c2064d50b14413560069c20a4f29e1f094eaf003e10ed6b0821a1ea820053d3c400209d10806441e8e56f1c0063448e28607531c01812470a2206201a1d450f3a981c1b486215513474434682829988068f04c59d8e0eda01912a740920208a1681401352c89c01a681a47c3b9aa5e50228d9c29d610833468b6d8c9d1c1929c286a2e16389aa784051042d89cf0822a30a4c152094cac01471124e707555411c42de7074420cf8852410760a0051454f8020a466801852a709cf07909baa0882c8c54251c5a5545a3a7a801e7ab4c5d4c2a684e98c112b0c28641113846600a2c01086458b204670a646c21ea950cc38fa013a2f80286c7210a2da2c0e162622107ce90235cd0e4e0800815140d24080c15b68ca26c0ca33ef75ef760383d49781e0d13f306070c5a50c9818c2000a171699cebabaad1a8e163a7a3e168779315540801bfeba06be71a75713a1c7cd7b143afb49c1c10c1ed1f9069968c2647073c461a8e0ed893a3832538b7239f9c1c28c1b995f15a058702144084c38d141d4d07371dad82d1545d9014165ebf9b639ba65319f55ca7bf1eb270f9e88e09e2f4189e7310767777dff696763d4174a9bbbbbb6184139ce004618b97136aff55f03ddb601a9e8367c849a4c2288c544b8ce984134cf080091bfc407eaaa70305a77975aa8a8aedd34af15490c7422b69430626383e5335b29aac216cb7529c486051f25a3d414841f8da7dac73f0d3d5a5825041faddd8b0a16a82504146a329c8148482d7b51c919a6e6b39e21db458201f278ac863993753442a2cbc2325f7f68e7cdeb83f3fe22acabdc9bd2957021c5d051d0f09c0ef12c653cfc508a7ec7828228f2212cfa8ee9922620364e1d60e4f5343f707e36b172184cd5eefc2aaab2392fe2001d919af4868d9d3fb54b51ced37a4d15efb4b22d1b0ac782208d6914a9531ad4012856a85b1852abb9860d4cf1550548a8a39839a393179501fa07949a2c3803e2fbaf3a0090f4fdff2aaadb76c9e6f97c0c9416f690ad4d3c7c3571b0a1d73b407bc24d1e12b49f4695d92e8f6d030e93a8c75d12feba25b5774e7eb419f707eaa27197be8da9053b1dbe3e4f5c29c1c7461505ea1cdd89581f8e44214f7fa4879a0dc46ba320fcbd3d79b2f34c94eb343991d5e66103b566105c179ec3583a710bb10743385b5cd4328a1ad3ec78ebd6a96d1b1095c87167b664536a7f010ba7906875ee128133d135dd1afdf821ee2f1441fd9aa7188de9a45f4462530834921f8103c3dbc6efbbc309f5b9fdbf24036cbc0aabed1ea6e59af07dd3c8341c72cb539085ce3d75bb38c4edffa8a5e43c4827d645be3c0b2c9a7834ee685a9b7dcad7aab07948b0e7ac8e62030f6cc66874f40a7079d5ef479140b23ba5906d6b71df55e3fb1d9311bca6ce390cd2697b26cb61e82190cfa9424d1af8b3e6de8d46207d9ec30e8d5e62070bdc862a7c74e1fbaf39785c12ebda33c809e816cabd6ab6736ffc0167da5afa71776097bbdf3baf907b64e6f96812dcf60eb7eee0e2b00440e02fa684338ec9cc90b35d1ea54c51b152cf1c8d61ae8521343ca8e99235197b20c7e317347c4ef4ecc0c0ebfe96e60d7da7513f27515cf3d2c485018aa7bcbda351424080cb571cbf1e26a8d8565faf4473d5a20412a97f80f15ffb129d0e102298a2255b702f00d63a0bac4aaa22e141123e99986b08a87b1b8d6decd8e86fa80b5f65a93dd0ee0856c292ba4ea10572755ed73bec9f6520e7f2cb5cb50ddf373e8cc81fda9bab8be80a33fd95aa41ec39e20179aeee88a2a3d1cb1bbbba7d8104238756c081bc2ceddadbb75bb6ed80d5f6badbbc5d8551664ffbd9e34b599f05a8bbf61846143d7a073d70daafb51dde3e16990b6056e201be8a0488031c2490a1c08c339e79c731c08630d154e21a583b335935163713aefa163239b38a7a3e374706be71c7c7e3d3db0c6f9f02c6c41bb37458d535487dbc4a6a82a264954b1bee3cd3a66a33ee0d0a5aa6aeae36df174e02e451dbcbf23b55de52f0ecb0875e80f3c96e9da86e341956606fceede2b34aaab79fda8d758a89b92c374f1733d341d40c0a3b16487e3fd04180df8351d0be796c48b0fb41cefafa60d997ae0bc188271e096e305102c7bca215d7a8e0afca6898aa4b3d3a9a594ded989b64824ea1785bbe912921d1e31f0234274fa5ca7be71b9c34d6febe3bd2436f524eb27c724b6a41e21df9225a05737ef5065d565d5e8a8e5a85e53f3c964cd64ad1efa8d50153f71ce795db3fadccce6cadeb0209b6376c026afa01995d4baf46ebcc63321541b58de396df6cf8d6717155133b4b1914d5e44536b97e6ab2ecddb70cb92eaad3b8c59523d76d0a505bd6d7e4b60dc3fce524c54096d72c06e5404bba36c811d7ca24bef008036a3371400dc060575defd19e9d2bbe995b944aff43f57027f0ee1a7bfc06833c440e0187aa32f3138bb19ec6c0ca6ac4cc4a18b006780cfa37d977d4b6616e1f96a85d861dd07eca00bbb346b8c2c8a0580cd236c8395375c8dfb92a0f1761ecb53a297e031d2535c1393976e529f0fd5d20de63a8ac352de1c23c2a494aea52feb6ccb9bb66194878e0232e37af625adeda083dd413c44b0bbd583f2364308ee571bec6e190922a59b16dd91d9bc20b0ccc330d60150d11f4077d86db8bbf9c65f0dfdc1babbcf06a63fbd1f79ccbbbbbb97194c1d4618213ce9e5731bbca4176a063e740960a7ded214e86b43cee86de5e5a7b7cd313ddc257d3e59d2e7d4a7392fe97379b83eff72cdf9cf5f269563700c76ef0c5f435e1b72ea746344a337da037b5f18ecd485a98f11e1e9c6883076617de813f5018547bd0d0057e6f5cd365c78e3ca3c487fb07e00ddecb065f30feca63bcae3e13ef570a33d20763f64f8e959e661eb661360f77859cd8ceec8ee6ce3e9c22bf3b08b3cdac626930fbb3f77259e4d97280f2bbb65730cb64ec9fa5cdfb14bfb997f993eaf087f6630e4f1b07c4b43eb30b45981a7b6c2d8ad177bfccb3483e325f1e8c7bf34963df47867e485c92cca23bb728c88b2d50f1f2c9f59f84621a807e5d7650399515b4e1492e0eb30db2cc2d37ceb95fab135c64fd3a5a87be335de7608caa3b1bc30f0d71df501e5d7afb7340fd86b76909ca06c3ebe6233f4fe7cb2f39695f9c6b571fd7a086648d4499fcfcf60ea92645bead1da1c83a75b565a1e3ded0bc583ba7d477980c7def2a6eba46336ffc017693a89479ffa4b4f97f412e1e7e61ff87ae853685e37b32827d91c011cba0d9b358043af61730c0efdd53c1bba6374fa46e9100ea3bca579986094fb7aba14b22f891535439b2a7a050aa9c1f9ed602d76b45802bf1a2d8e5080919745918b5b4e1637393b4a7033825bcece0df6c13dbe2d8cb3d086c8cbd4d361dfec3e84c9db9adc35774732c638d34bdcb8ea2ded7a5674c715834a3dd71b3c02225d7293b38e48cbf341e139a70f24d22bd72bba43bed11d266f694bfabc61ebfacafcf5f9cd7c861603ef26f6087eafbed32bf18edaa0c5abb1796e5491a84ff4841ca1d66815ec4111224b655049d39f1746be2842e3429fa1cd3b7c90da92107e9bcbab792cb0064de077214f0896a21f1d52d3b7a6a6853c1cef5547d1a511d4c292b784be5e6fefd5bca4a2238b706e51dfa062cf6eef3c1ccfc94bdde932a1665fd4b7e4927f7f4a3c1bca85ab778edd9d9de7d17577f38b6c81df413bd0484f0197681cef7d337ca2aa378b70863615bb195281df855c37c32ade1da553610d5a0e1b2a9e10c5ab79c211f8d5e8a0e1681e0b5ce28a338eb8c28c2aaee829238b9a2c824c38c327a0708fb8e570310696d43e251a077d3539d55d24301249e00c8550aebdcbdd5d58839683429b96e33d34849a1d0db4e9d2ab21f51b1225de74d981c6f11ecd732a36872ebd2b797746a859077e6f0cfc406ac111e8d2bbc34095859a9bceb4139036875864aaaa5a47a3bf92ca0caa3b91f89b3804bf473b0157c445574db0aa93f5d1626c6142cd39e06e9d32708636393a48a010e71eb4997eb8192bf6a0a948d4cc651cf8d957d375ee5551d55aab111c8daea243c5e970184be5baa9d111681825814513f81d8b2fe077d1471d80ac21a1a4a6e970c518f03bbca1aad10300300a700513f8dd06bae355306cc080064d871b6e0a5688a100f8596183df4974c7abd6053b36a850448c1d8a1481df6b5493247a608451e770c60ec8908112b0b8420d15faeaeeeeee2e023ae10802a0506934210bb8bbbbfb277447d3179cc1a4d48424e07711ddf1462df822848026d03020870bfc0ea23bdee802334882064ca8618a2128e0a90e062ab86c2a1683e68283c61719ddd1541a6aae98c04503705a40051c2417810e90e0820a4096d0850ea690b5e00b0dcb82094070ffba3942b841431576f083298071e2821dd0259c81bb5f45a31b4f29e1a092c3126a80fb53c70ccd14514883093870a20b44a4801d91459307a802a70a4ab8411494100602e454f102951c34d001164a869ca18622cec8a88786864605356298f56305dc4780026e1e24ec8084041c3192b044159260063c22a203d75a758d4e420c47352c88f400bf4fa228b8a8c30866e077582de10946a8e10927ba8041122e0add3debcbc10835c0eff31901097e14bf372de051d6de7bb3de18614910e1882910210bb83faba80827c04d05dc450803cb12f5ae2309fcde7b6fe4840003dc879d23841edc170de108ee2fe0fe7153a1458e2e9c00b70ca9ecbd4641cd6da7fad0dd4e0ab2a56457033311d51f0190666955c0c00deedc7a565a0e1084e056d290503f380c7b05a644fd07d825ea99ba9ffeaca30e29f807e1e9149b47670cf94e4df011c643ca837b55c5ec80e3cdef433cced6a5c9dea8b222344e11d97ac5b9be9155af38a7a2e325ea556369eddeea5637037f74371259f54aadaa8a7a37882be8f2c305364fdb1ce5e1baf5328f4007c76799242d035150a86637da198cd94c11a10d9e806a05452b46d0e328749447fafaeb52c6ac077dbd3de6e5ebafecf298f7f2c65f59863e69bd3e3dbe5a0ccb44dcf48897541f3f49f5f419fd94a742b55e98d0e763a2cd3474dd117d45b9d084821e25485650ad580561b5b6aa6a15a494889bc7d32ba15393d32bfac9a5c852d0a9c85ec74037d76ab3d390b4c12722ebf08935b14f8c2e51fad0a5d7aa97524a69b5f9aad76bb54e3d9b52caeb7a86cd6ab3c699cdd68d794728fdb4f2b2f3b53eb33ce6757aac614bfe73ddc98373cc3bf2b1790444468043c44d7c477a44f58c386b0cc5985d468ad9283f298dd100e8d2b6ecc26a28cbe20c06d92cbaaa6952ad18e30f268fb78a4eaa5b317951517c8dd9b15f36bbb43906cb4bba1e5b1ab3a4eba04b996330e9ba3d341c0f9aa72ea7381f2dbd86b8018760064f29afc75f8f97cf6c9e27cf1ee575fae9b2d965b3f849661746744c94af1b238aa2b7bfa63c44b7d5a0c76e1edd8c524feba3497dacf1baa28cf2d7b11a4fadc778c919b12ad618e3ab2ed518e5adcce6189c5926f49d9ebc5e9e844e2de8a48429a594d2c679544facc323ac3d932ba2d6a595d91c23baa4b4a625e5b1cbd27a41d7754a43a0439beba967d8a57ce8e618d0e7756ae74136bb9594d827769dda1c83e92f4b9f4598ce46ed47c688e8cd33d33a6c596f798f11d0006e87a2d00e645f3603812f59eba7b17cb5ae75acaa72cd23205aae5bb67d1eb5ac0ba237fb5cf4c1ec0cbe6c7e84ef26ef99a33e38fc5ef51bbd073acadfcd27ff9cfef3cf9f95943ef49ebd9bdc07ecf41f3b49d6dfebe55b9a5a92f5ebb4aa5afbdc0c042659b7de0c04109f967cd69fbcd9c7f11036700866b0f54f7e55d53ac2f33ef996f7b19fb7473a01500f0e834e2f1da580c39fcb6a7e40a7b407e89f0b033a766142a732715e9988411786e89bf208dd36a237a35c7822ef4c5ef6e6e925b59352ebd33f9fa713e5f1f0bc9f2b1fbdedfdbdf7de7bb43a66331018fbac42a31a6566e5b3d765b5ad3decd236a6cf446f2cf5ed5d939babeb86e4cd234c0f6a8a83d29b65e2bb9f6961e83f5665e91ba56f697ac30d0000800d36dcb84122d9b051a3c66884827272626222128542205096d58a61d745e99c525ad607cb0f7eb55e0cbbb9ba9e291d42afde9a0ed873c42fab6e9eb03ce821db5a0ed0cd137ebf2c7ed9bd725c178b58ca92cdd7e327f6a6ff7ce83f33592662fa762b03412f662debba32117fa665f347de9240d8a045bd749407f9d9e2b4f907febc999b1620def5f180077a36d200813e7a0e61f8ac31a03903f4e11b3c39141d9a1c5a15bc96bd6a3dbc6c0843a19084a1cfbf846e8b18f639c444521efe459ad47958afcb36b6aa0b03ba6b8e011083366b06803fb170945d8aac89ad2d0784365756c27f2ee12dd151dea8f599a2a31c45344d0e4fe26172f817939bdb21a51956812ce82d6f6473e306750d134877546df21b6f3fd46814d2e1cd36dee80f261d92d262a7161ebb2ee51bed113a7d11610cc3eae561061f0381402090f5cf5fac7fb26cdaecf38fbc056f6d3924846f7402a25778b147084d6ad8cfe7217949f0f2d6b1872c091ef4d075c1cbc38c852f08e121847fc920e965f4134a419f34f4d1956f14c2cb4322e05fe685a0cf60da83fb846c9eff5c1b72eabc31a27808510e7fd91c23c236cf1b23c2f2188a0f0ea5c6e5e1cda40b4d2eefe80f26af71b3c32626b54e3843d8eba789947447552f0cdd2ca7acaccfabfbb12e6df557e33984e5b3c680e90cd097f2f255afd8b8fcec95d1e56bd301e5d2e4993cb5f29a587a0c9337c760ecb26badb556596b8d2722eca1939fdcd6a5d19c977f992858bdcc3e831b9b586f6913ebf0740c906f2a6dd60c206f230be1ec356e6e9c27eeec726451ec9412c3b06b4e79d1e7953719bdc61b36a127afa3d7788d110acae55f502e29e8f22f207a6233c45975f38c0f1f6c49cbc254ffbcccc8cb2ae55f2ef9921df439abbc241e42a1cbbf842e59a59c55ca57d946b1b7bccfe7d5a584315884e585cd29e59b15965974ea15f4675d98ea9f4ff58f4b633e148365b5212ba725f1907dbee5982fd96d3cac9bbcd1eb0a855eed6559775e120fd7676d39b29bdb6768cebf60370687a8cd33f4d2d683b090e84e97f552369b2b592d8987ebf52d47bdd7eb5fae5bef0ca63cb283dee8b4f87ac86687493e64071d94ddeb3cd4cb9378d4cbbfd45b5b8eebf2d696637e0637dc68bd241ed8e55fb08bdefc03cb37d9d2ee304603f0d5b8372d133a9c13cb7c14b2b04bb9551586d5e6999889eb6366b5dd5da37bd43dc40d1357954c55c9c8c4cc9819336b8cbabbbb654e56e8e853f4d189855daaaa983965300d9dfec954313366ca5431b3aa6266ccecc007306e6f15fd31dd49c889989dda90cd1dc021910928deeb325a98f8c65252c76c4ec1d8b178e7697e07f00c118c6136f459df4397ae37cac3bda5e3755dd745814ca82baa37be451bb239252605bb6753fc49bc08445d44fd445254143dd638798c261f3dde8c227abcd5f5ec57e8543d75477b64bf7ad0cf5f58c42216b14baaf7fabcd7a947ec219bafb79b7c5e9602d8e327ea57e6680fea92eaa94f523d7d761dc3307ae7cd1dc0d4b1eb1566f296ce6cce30ecc2987c5e18d0b198148c9db239bb3129d804745b8d2bf3f0c94717a288443f9c5097222acba86b52d73311f5284f51d9bc395258a4a8b8332fbfa4d167565eaf367700d7bf93379467d1c48fa067972093b72e895ce8208b5d64af1877c0f145a2c97be852769075b83e16f8f72ccbb2eca39babec2837d797fde49adcd6a54cbe65f4c2c84f3963522edb5a9a4a9bbdd16cce67d7cd331dc0d831166fe078038b46318b7034c1a2c9cd55642b7ce8d643dbf2309b41af7e85e885c93e67f66962627988b2b763af96dadc81ec5e8f963e646b06ddcfcc6c9ef134d263b903383bb53cae8be1f81a9382e7ad579b7fe0999267a87558cab73c3ba3449e21d2010c5b8a8b1426685c86fe20b430f48daf5b98cd33985eecd2ba1908d0b11ed7dfa53a5f6bad0f5df7e61950bb0c440961d8b3104a153a9c37db40c944af310a4dd021ed216f9d7eceda9a745d7aebb6c34feb209be5db25207a7d4b5b17d1d3cfc7c3530b021d3ba5f5f0d6e7e53152bd3ce4b52e95960864591746f47a61b26312a3a29961990d94cf633546a1cf104a28448f5d62966298c4acd363a189514bde3cb1297b58581eb39f53fae88e0fcaf3c4735e6616eb219af67a766cce7a4cf477297493bfd04337b1b071844247b9a2d0a7298f8f9565a085c16ebd61127ba31836e7c94126a0eb27d79c3799d9a7571086894e6de822cb23743a7fb983ecf569eb651b579b33cb66ebb2623ce4a5f3d7c42e9b7ff0a0b77549423cdfe6e7f0fde819d0cba278bdc8e620b0e81242084bd8cdf5e62030bc199bf3a0df8a5eefe09c9fb70e438fddc24050641bbef20c8f86d63f5fd2e033f75a8f029f41981d9ede4c7a9387f0e4360e6f3679bb553df67a6a1dce1e3e2a1e8284eba9cd355738b661f7e88e868e34718fe7fedc8ec685d6ef55d1973d61e3426d78849673648997d63d1275e9bdb90a1f15644b51c12a871042a80332de081e4b106f8a10678cf7960aefb8afa1902de5c3448d30ba485875836f5cf83f4ed4ae7047b61547b5f639fd9f176d65d269a57e9bb4c0fdfc8cd8dc081942044727488d902144707476787a2ab7a4d28c82bca66423a46f5492948e9c67b45375703be27088d054416acdc8e637435496947a9e6474a4edeca8e0e850291d8814f0d573a533513bf14c3a91271ae915376d31edc418679c6a269b27b438e94c3b9316d316d313a627c46967d29978269d185f7349c15da4803ba6072787a30b5555b58e467fa9f470de9287a35f55b58e46bf8eb724885755b58e467fa90487c0244984241122042611029308814984e08e3791e7e1e8df1c893747e24d7447e2cd91c86313796c224fe4b1893c53cda4a2522afda3aaaa2fc8a41364d20932e9bc16d4f869b236edde12aa8fb8371c32b5909e24b81f4c127b1ade40222ef2e08e91e7399ac96a41cd959a93cd13bc3fe0cc046dd06207c306dba5d38142112a5dbd571c0e59058b2a14c10d8b2ab8003f4b72d60d805770b542182856f00296cfc709b0ecf972d248d2049a20d85d99c63e281c0258033c7f80659ccf828c8049d41b16633c01537f96445d843fd6b202a6feece7b27d9a75f9c0b03b0c5a0e252cc56d1b166370017f6ccd7ba5b9a0e6b953853c96e971c99297e41dc1f1332eeead4f44fc744b3b18a8aa3be3d23797da8622d4b91397c03bbdd23c184e244b1c993b3d776c60411502564b304cf270c07f88d4083457b38383f0d1d3330118b41cf0f016682c2e0987031ede5c03675733ea9b9d0edccd166e3baea6e580a786507be8d288dac046a04bf011c39663461418dee1b82d9ac56448cb19c37451389b2139383b22181ec931630c9c5d1197d73b457874b698467a450162e004e03c916018811e26b0e3e2f4c273d13d1b707cb164dfefea6e1e8d6cc82699e2a6437b397efdb6f8c21c820427bc203c27a230849a6f8c2520d11182f384b421382f09380ca1a2571e0b0e733e2d5454ec80df0e2a29d5e79a4f0c35371c28e4f50afceb99440e19687c72c8589243061a396428c92143496cae35d75c6b6e9a260797e4d6338fd0549af9764738205d6a25c02bb0c8098275acb82b608705ce12ec8ec30ed88d60a9c5c78c70c601b7976e52868a834a0e39643881f3081b21a309acf21b4e099d43af6495d66ac0fd9a03dc1795d1a30323476882a70642703982fba51bdcc7a1a1bd31ca42cda551d700bb188b90cda5a58886d43081832157c8208c0bb79351c4c64e0e1955f49011468d183736f042d502490425a40c4758e2f2e346125b10e19238c20b685c7e38279248e2d25800a20511971e43e704362e5dc410c8a0e322e36ceb8eb8220d475ce434dbf60bd0e862c745525970411097e6042eca10e2223fb3ed0a147482b8486bb6ed245680e4888b94a40cbc8d90820c3a2e7d4919e83f20419e80e3f20385884ba321032d6e5c7edc70e3d22539675bb7930616745c249d6d1b1896e005222ef2c23a892cec1c71f9d1aea5b0e4898ade8849e7a4d68df8589f4f95d6b44eaf1b212f7a39e98ca7cf4107b5cdcad2ff627c13f5e28b0f5a1b729e7baf82749740ab92d4f79c734130f8dc836dc48c3228a1eedc2dea114ed61b0f77ca392b9d0cfd63654216443d14b28d7a28e4b216ea1fa8dccdce51ce51593cc127d7c7c36e872e4577472d47fc670c35b7247874f2f898a603f57803ee9114f5ab935b7529b298dc0fdc5cef0df861cafd03b1be77e57029d8e12cd7d165f30db49b10ae5fda6394ddcec1749720750abaf6aea9b93bd71675add5ae5d9fc03df83ed07478b89dfd546f9b672aaa2dc9876e58ca38bbddc739f76caefe396561688f9e958dff407c4caf508f55574d5d128f97461a69d4543fdccc14435680104208218429b02a8d4a38e8a866e9876c2964d4201e4b6b227ac5e1162a96fab56c760a82020e372270bc15a8c6784b1bb978151d95a3c9826c29ef753f09343cbb2405b80279232c694d975f417523a88aa22e57f0b911d5a7aa2ebf8279233ef21febf2ae60e4628425c5fb3f6f3f1570704e79cba18c9c2908c17907dc2ead65ab8743c7b3b1b56cbef7eb1e905033b1a311e4836e7a7df7089f5d9f51fbce591b37f57516b25dd7755dd7755d9708b326ff651dceb22cbb2ed0755dd7755dd7755dd7755dd7755dd7755dd7755d57e8d7f5502874cda63b2e384db0c32a885cd575ddc48a2e28040a8540f5baaeebbaae50e8baaeebba4ed11d57d3cb5d1745795ccf2eaf2bcb62d5a5ebd5b68b07781bbebea30a32fe4d6d6ad3f4a667c308b5ef5e73fd1e698f181f151f15d525e95274ad3bc6cb097ac8a3048617f13c818fe3b10bcbde17a98fbd61907cbb59f4280f782a3ab4b9b1e852da21aa790de0ead30a31651c96f2366cc8a19496680f8be37ded1d4288adf8165bfacfb57759d695215bf1084fe966c3f1a47e7d3f534adf78c4c3d01ef130940689aebd0b446f76385a529ffe584a2b2fafbcb4ad0b557491a8b9767d02f7e06b693a3c0c46113096e014dc72c030826fd0c0f0b2ca515dda3cb343ce396725a5351b95d146eb8cea708cf32d2fda5cddfae70bb5bdc53120f47658ed10dd0cf1100e872e89c74b230d4cb5a9af3c834197d4cfee701930f33216a692b7e425bcbcec59f97016ccaa11ec4edd9c42915a453c401ace5ba650057e8f40055c18f8bd3404bfe3d02ccee5895acbf16c4c51aff969a2e686d31abbbbe40af78af5cfdff49ee3e7e9214cbcbcf581c1cfc789f690873a4d1c81e521948faf2aca4e2943381cef9c15d58e4cefa4089445aa2d766838dcab5ca9cf13b5071b2bf0f1325655adf14df02ad3fb04ddcec3b10982a7bff710dc97ae0ba7e36892a46078032ec1dd335d195d723d2a8fb7e73da7456399a228e0763aeff12ec96c287043c8d2370d4743f80e6d2eb92429373e4e4997fa87f7e94e47de7c8afae7e65a5d49410adb89c6e294b443e3079f22d4be89b0f5a504bbc798127e7765501f30fcae4be272e5da7b57fe81875468b05a976e3851554a5180402d065ca2c106ab6d9c2e41233d3b3b183b28070c2a30e8593dc88923989ad4e39947a624f83ddf30794e692cd3ce4b3cfc7b4582ecc3a8a0e7d173506b1128a457463576401fdc6014f487ec4221175261a3081546c6e1225498ec320e836e830835977a8bd6e9d22342ed17af7e6e1c1e22863b5d02dd2c5361d0475d02dd7749e7429c2ebd5aa77a6955592b86bd62d8070715f40c7760d3e021d5ab21ff3051611519ee54d91fe8ef90a7e980fd5d62d661087af66776ba0ae5013a76311d277ab0e8a08b6426b2397449005894d929b343389c5d0c5c48a44b0f7ad1723c0a775a8ef7cf1235370e184fe0864197d674f24d6841bf6c6e7c1d1281556476760974fb98353904bda5a79d979b18fdde46d40c77f2b47303ced5901b303584aa8654431a8e77ead34eaf88fe321399d9864516e2d01d15856e4c09679799ad5862a01a1906bd350cba6d3a64071de402ba7ccef57bf1aacfacc348b07c6e62c0ecf5799ad6e90365b6735a8e8763839a5d18d041af9720cb83c3ade500d956d52142409ce10e0e7effd8ca0e11c2e10c7784883897f08538606074ab06b700cc845ce809f732c46da26073fde00ff7e146a446a3d21dc208ee49b619f25686d5ac94e57a1ee1e65ec54e965eba53ba54c2e6db6615951d7ac0001031230052b384102a70b6b82c102964533fc0f7cd175ba73fa46451a94bcfd159859a4fed10e2a5611f6f0d3438fec5e1a9b175370525b8fbf24d7d3001b65eea15797973630bde943c84c32d3d05c7809623577755975e757d949a63409fa05f3f17afe994cd26b82a36872ea9b41c9817ea53647f6cd0b1bb5bc7c3d15e29a9eeaeb173ae9f0b83042245abb86207e17db19d736ed4723c77d7d081e18407f41826b3c7d063b43906a792a854ac76d5410d3b4523000000009314000028140c888442b1603c1ea9a2ec0314800d8b984674501b09e32488611053c618638000100000018091d10401004a4a3711366515505acedcba6bf6c4a2c74dc1e15dd1a60db96860abcedcc31e9d6fd1d933b580d7480763c9c5b1b9120cbc02cdc4afe0025ac411f34a8a0802f9fd4ec82ba030f51b6e33a7ede62de070559e24c84a960470be91ca1b69b93199001f44ab0e6c7cbf3bb6f64fa367c86393cfaf382ed02f778ef459468c9aeb2421dc3533632702bd3ac4a0ded8f559f759a411754cabfc5c8ac49d4cc82bc4abedac513b243cecbd148ce4a3bf2308d72dcb017c6453777e06f5645349aa0941a31de5bce54ec634bea0412787f8a4233662da26b3021b63d42bca7ddf1441e75f9fe272ec10a2f293481786c04c8f4a25344737a67251b927adc5c728ad13f94a4c4a3904ba90cec4889c0ed8ae2677a8624e789b098eeb5888c91778975e5e7bc1b7aa4bbb46326b1e847688a3a3b66fb4508c798131708caba60f9d395a7436cf3a96957a47673cac0a30dc0cdb0e8911d6d5059c936bda9600a76b3bbff4cc1324d3c40a674eafd4b05c6e1b1472cc45e929f281f65dcbc31c7acac210d26d5dae58eead6becf2660a69885565622858c645c04399e2da4379aa82d43089bcb643ebcfc6859f7d96ce5095d4a92d234893919b896487052820ac440af65c35b213d9becca1bcbe7770350195515ba3ffb1745a0e1f6181ea44ac4546c92310298e7497d452f42caa9e2745f533c98c637158648908240999e12d7667de30e5b6c513853621b941f9efc0805afcdc7b21cbdf93df202cef2f81f0faa9605c49b32c8b1258ace36576470be22117bf79d31b6f7cfb23caeeb375e42db8146c3a9686c9b4bec1f6713c7fd02e817d881b63522034c274ddc4ba63fec772f849f02c38099d5eb436909caf6131b50723b65aca3a39df10a7e1538b7683d3fcbaeb178e2138d86f0e34db6b20c662ea3428bb9ba65aea0c21bb65792690330e75a631a9a482c612c17cd95c1aa667b250bece59cea53c3e3a93bce540c1c2a7512abd46d1dbff0fa4266336f99e922e50b072dac0c850575ba429e84ddc9eff8a2866cb0c13c9524ca5039ab04d818225d86f69d7a8c6088082650853fb7351bf3c92525e3714f6ac666064802fdb57c1514578f1c3fcd6cda0a2ca33ff70af434c2b6b71fce412e1044a9167a92d76adb8134f70c00d29fc061b277488e9b1f4fca27d8312802c4007b367a736e28f108fd2926dab009cc116efbc45fbd4d2c866646633ab6c585517132d966e86076a09488f198a3a8bf95efbb50a7bcad4966ed98a3e97760a7e39d06c15d88d8389bed7a9abc82a2742570b108d270b619700b1ed596f3f1c55dfa14c082e40d183f3e72aec69d5228ebacd3a52fd64cffd7b232a10a8d034292cf408edd0ffb7f6d3833b371223f69327080a3a72bc574c3b696bd59883f6b48a287ac4ee873e3f8e9310ca6210608fbd955737476bd72aadddc14f7d15ff75c423904692397614b63e0345976cec98705e3076e73368adc07d1a2930b44753fa1ec0710338902b845b80b78f72e2c30cd9ecae1345a0465a37d26cccd666463aabc603b97bb795b5b06a522264f0a8323f34b0eac42a60df4603674c17ef34c0e4e030b0fd36724df30488a2fead564021527ce73d51dbfcba925eaefe4cb4550b8eb21b5f6d2d3a441d3d9c66eebfb1448726a4e8f1265b0fbef1119d67cc825584e90bf450e7f4842c955c18acc4126b29fbfafa2b304205f770e1f95164091abc9d805f161d149a272dec1f34708c29dd64d1d3a884b1bdefdbc5e4404044cc8becf9eabf890aebd8b31f46ece395d7097ea609be3330e7cc8d1d96309ac94f6aed25f4434efd119c82aec5d8bba90b43953c1a0a940f19424d322b4911cdea911d22c456a95bbd8f88f24f8766dc9240b81aabc6c998b3f1791145bd773091ca3db600b4da9a8f2772de5b177084e4090cc5577221aa549e560240f43c15ff9008ae9f1dbce0a2a4e8cc0ca6a4a9062046e0a4d2be2880b6edb0522a17fd2aa0f42300468c6d24f996cae46151441192a5b37628066a07d91e60a4f2cfe80af1e4c0cac63f48f0ef00791221cd239d5ca39555438d227a91c5e112365286c279924957ffc3527a255575803891a4b417fe1d83f44141098c5a12868892daaa8b302ed340c6206ad173b66b4f5e7bbc88d98b16751832ad743fddb94cbbe5ea9fb44a97241a781e6c1040c63ff5af8327ac291782881d0f598c179df2c0bc689e21751abc6be6d9905820812f31fe779f881490a1e04270c8cab3289e6edd3aefcea498aab01a2e63e1581abadf339b20a65c676a2c9518deb0ffa57b160acc84ba7ebcb58f8949ffcf51daa2375df042e12f56e37573e52065430199c6047b3ea80dac8211e902de0ff6e25319a371e8a5f5c467e7746b9857ecfe3e114674c911db91d181d8d88aff96ef91f74cb46efd3862bea194a32f4fad33fe16bb6343b793ee733c5a045f77a8c7ce743c77c3bfe4182f0146bc264463951641cc6ca27c1057b74a3ee68225af0ff5ccfd17fdc8215b68d365917a1ec70d593a3afad0dc0c28652b02d645ffc7fe0cdb0cf12d1e63acff779dff3368117189557d1aca3ebcce09d13a215e8efeb876fed3ebf860586f348c23733426f43b9aee8162488501975ce40feca3945831e85fe94425c6df2b6526f83e83f5cd785d06833051b8ee778857882b7c461bfaabc28d99c2a63ee34aff8749b49e08800ef1036d7f9688879019a7ad5802ce3eec0073f2ae2719a6f25fdc3d3c99dee304ff1142cd1368c710474150b9bfff8a3d0d3e6bda7f4f952281d6ee8ab89204ba1e5c13008e15e27c79641fdcc32c8f93d59b948a20681f5ade1e28d1c5835c59072f0f2756c2293f64ab66b79bb95916cee249fc70b918dd088d0305af976944428d85f37ae29b7995e30c85761b7d322129bf47639256c7418774917e5033672a35e3e4a4af641661489dcf9d8b1a085e6ddec3a5b94c41969d0efaf983f0b20c8cf614f1f1e8f52ab2fa7a07e9c5e524e4a19105591326b131fe029cca0e94b28897866351ad7d7c69e0d4d94cad954651ada4bf031e5c900a860cf4f3cda8a6c976b23a3891f9efaae1b9814972f0370bbc46e703fa96ca6ebe05db4383b2c95fd6880f79efc0f953955978adc13857019fa5452d34e39f472ad39db80a87692896d688ddc0aae34e142f9c4a79206deca6b07e5fcfe6ef44971a06dce914eff4a72b818767e921ab89503cc3b3c209505f39324c40c25a16ef967656c98f00e162fa1fb3ba013236f0a73bb22ee53569b6b4a1e9004f92f18c21d5655dd8d8a7caad79d74f24df349f796eac80ded93c634bcbbd86b16e81fcd87d8ec326a10ed018b51f29b70b9dbe7bed4425cb8faf4bc2abb342b1f0ca042f1401fcbba3adde19a81e85d8f869762ee566de49e0bad018a3694bc318c075173f34d0275fd06e04b440f557ffea32dad649dc81c6e4ebd9bcc620f33c71e36323145b597ef87b7f6f87dc27be6686466615496cdbb528f49e04fa46910ab90ce0ee128823cdefb78266f590ec47c6d917ed94d8c60ce7ea0baadd8fb3ae27416990b565204afd40c10f0e69257772f0a77a0b9826853eec8a723072ed2f3ab8015bb51140517f6c433812b2137758b54212920fa1590e2a0104cc440eca0b0c133c1a042ea49e1dce3e67831509e969c342bd68d740e9c31b9cb7630336e7001cefe3941d6bb5c88fe4f24c3c521f7ed0b78c34d367ec1b54ba195097a344f41c7d2ebec5f00669def9df51015b41b1b1e80e8adea0f6d643fcecbe89f6de3f74d438a5a0068825b99c2e70c3e131a2ba0f25a58fcbd5c6d2c3732ef4ec34fa1c99b970a066e01c70a997c28e8545d80c80ae0fac6c93344b3942a36be7f16b4ecabf0f72d6f801e4ae7bc5e17cb663fcdb89f8802e1e249d476f196daab81d0a654905b620d538c2e20dd1ed03f4d69c3df834c2b2dc7d5abc9b9cb8218a1c1709be72cb8df3c6a493a2c8792d445fbcd1144b4681c6f909d71a81370c63095139536832ff9f7b8f5170b314726ee00733a686613482a7b6494fcbd6f729050ce98570e84689ab48fadd3689258075bc49a2ca1b5d97b54914e33e26ae7b1a8040039a330f89d7eda395e7e282bfe2fb1756c116bd53e3d8f4e04fd37f2a8fc4a1b9d42fb0d571645d4f3b9d4b4ac6567740e3e56acb7904641505eef89ee10e866a38ad0053b34dac1d35bae8a3e082255bcd515eb8a3e11fa398d9b778a3fe54eb82b9e0a7d596de20c0f21368dd55a792cfb105a1688ba86801f9e408dba0002ea71664564ac6ef4a413950f8886fc2857d4cec8c2c5098c4a0e9d99a55f9c576e35cf91d2735110d6e6a16e5de3c922b3bc6148b9355051aac8a97edc8b68a27177ece23c08dca64c23630e1ab6c3b6961df274e0823cd038909ce0520437b156f50c5b73f98c97e6a28a866d93a2ad4e1c6741a5473a8c2e9a00ee4f19fface1d31bd2cd9de3f09ed48abc97461d90c6eb52c3581dd8e7e6bc778e862aaf76412f3a0dc02ebff51efc2167619898152b3c5cff807d5ffeb9d884a1dc8b36e04c06717de1c55ad48a7e040a2e8ee2ccea3dfb85936723fbb5fb2bfbe15e8eb619fc64352974c74f373b10a93c9562e3ced026a97b5c523ebcb71a4dfe227b92037e63ce693c1b7a2d4891c1c6af9592101ec7171cba894972851636a0d7c2b10a473dd936acbcb90fce8a98b6cde385e34cc14285cfffa1cdca522005cd873a1e03b998b3d038fa610f56094321b18909bbbb9c2283bbe087b0f484a81051be7beb9a22c7fbdcce8886e60bdce061b9b740a4a97073ca1f25b03a7114ef8f1918f4297761e9987333401ba421d98e09547994b6587bf7d6694b064d63c2124d544a235e0661f91abc22d3766471fb75f64a9cc884d7944a9b938541d528d9ad616484cbcf5d0e2b6867653af0f52f1f665c2e458a52ac2ef90a130680e6447a7deae7e900a854433089944e909507bc341c84c4c178e3a198547dcd8183cf994bca0a868a52890f2cde1c2befb3c73380e1ccb76fb77adc5397bc952ab16351a4b14d8c98cf34354bbc5bd6a2eb46ed1977a48317995d29bbe615b041db39d6fd6167b03b6455b8f6e7b8b77f71ffea92233e7df7df0f90dd38805e131876daa436a1d391990830fbd66e7c84603ff3255988aa4096ae0df4aa110ae54301fa656d3a550c6bf82c79f99394f9815ae35047faa73b30bfb0054a78909837bcd621b6bfe32c4001ac83bb75c3d113f5a0a3b1509330cf36fbdc0f51e22e8dce08e8fdc523496db9abf84501fd8b933a1c4be3ee13768b0d3425b7d2afd8f3cd829674774618e7c973c713f37db32f80a6db76f2c980add53b6a9b8b2146798c9869faab8305c4553aa801459efd1a7fd39ed0622ac47ea3d524d3a74fb00cd51a9579d38e3a0b134a04d4826f40b377a2bb0428a7bd78b76bb598a47081433781e5e3abd304965f1caad8a3c84195f198bfd9aa0308d333705f1e817893e4a0b460d219be987ff814eb40b91506040dfb3e570d4150114afe1d489e00a8eea990d0fbf9e809e623fb3acdca0301cb464e8c1f9cca00e7b18025d33016b8a104be7874175981c1e46e0d70edcd9c9be1fe5f5640055d943777152a57a991f48939b98abb25f756966332e0e38670fbcb2f8508b862502c8d4b1bb39eb6499df0f06ded9bb9564b7a8f219ef305e827fb52e64f39e6633bb9b9d7373dd0fd8367aa29a55d9a7872acb441b12b5e306a2eb452b95a3b943a441415ac98c691fd5bfb8944d06aad41b61f1833899428d006bde71253e7b19d29312b9e7b48587e9ce6f581024ede399b7d247942a37fcbce2088494e681749793117e7efa49404f26ba5677b37ef42b6c2debe413edd4f2ed755c984fc08240f63c4c9a63f86885573bfefaf94c65122829dbe4b7ee9b4e24d4daebdde9efab5c8f0f196c25dca4d52b333e0ef0c812ac13f67cfdeafaf211a1af11365dcff9cef0794016162fa53efca9d75499cd58902e382aeced8dc4ee30dbe388dc3382e374bec291ce3b0552046cad0db7781bb7644bfeb51ed5729a13307ac3ad9c431dae4fb8af7ae0da72b782ce81008c2b5f3cd6d5792032e0f3e4152a2d4b4551e1af2cb7308cf73a175eedf7140616128c5d658c60440d1cd0f177f406efb7d920d5b2c22749765ed3513b9c2bbea23d032d434711a2b4f9e3e4bd81707662dc1d8e7d256b0cb713b55d31e39ac0e96b2a3b2c5164ddf8106ae7b546614fc9b33c561d0d76972eb604573e72dff8476d2ea905d0dc9a3f275f1ca88fd1dc12e64092b89886fba8a446732e8c68ef7778fb8dbe0a016a6229dc1170344f86ed2c7107d6f4610c65e46de66b1b435e50e7451c094c5491d96a8e3251fc482e6fb1ab6b51cb4b31e72edf18ab1e2f0d7de69f25f133fc223d703dba0dbbf44cdf12468fb9032ae7f03639ddd47da4d286fbd11b05ba102a34973d61cd41a99b699a702ec0f9505d586212816af6236a42b98610ac6109704f67ef348b087c356df870875df8e155a5fa04ab0adc3566a8cfb158b328f121a5ff148683c2ffd5cd973594b90d6223ea4e5395ce5e9bbad5e1ba77cb4aa384d542e54deac3a877b66325d387fb7412f8f0359e5da032f69dfe8a7051cc97d335e4427ad2bd08846c26fb7821321c2afb1c3ef26290f6c4c2248d04fe335ec687fb730dd6dafdb207892eafe8c92785e9a096d32ed4393215cd74040b3f717f6ef78538d6a130faa5cb822364a21aef62329aa4215a9951ec7c36afa9e0bbeed7cb9423159216ebfdcae672c18987d597af0b94046e00c2c9d87c40369aa1931e07a20fe430187231402a05e335928436086527dd81f7986b08797f44e98bf9abe3c0232c5a2c6e74960540d2645dcff2fb4bd0961973c7c2b2c66dc846f03c6228dea88b247834e12b2cca4ed9a87104bde180f44c9c93a9b24609a49657141084a79a2d746be1388de6d587169aaf313f9b2dffa2d5cff3432c73acb13483406cac257699658c65c7b248de651d0879e33b8828edfbc2440818efd991e7cb95909d9014aef3201e87da4c46724b3637aedb4f5c1faadfd94028b753149f3b56a1988d6f5445982981544b352cc83df294db370933c3ed413863d4fce6bf195ec65d97dd76eac0db3af4fb00582822a872416cd8fd36f40e41c09d10ddef2edb55fe5ab6743cb16a634b3132c835489bb1db82176e6cf1aeb28644a55191f6dd61f8de895faca12bd48d81fd65cf2438410400f91608af823c6899ac3fba15a604d174bb5a584bf4552aaa09c1c162cfb0a9c57d1124388b03f60a053ed46cc97aefdb6659350a9839809d03c8e2f8557a982b7dea1599fecf055ab80b390ff821e928f875ca83ecdfa970cdf5c24999a4fafce34db5c245e1ce707ea98a7204d7661b84ff30ca8dce1f8f05555e31f56e3f8a82e3427493af629e89c896c087803249aa18ffe911605339ce5ebd918ebc3077df7de5edf875e144ca008719a7d45c7963d3c54a5715f467e567b08af5e9cab9e972ffa585f3653f50eba876183c35c0a674479dd9000b65fa2f5e3a5dc5e3346221b5308848766539218ae2052d31502449d245db9427a58a0337dc202294880136a615f01fcb474aa05f64c62c5f7f05c7c17d7ab917e1808ebd903a7a7f9ed80df3ea8611c6a7574efa3d09e684d6a43bdd5fe8d9245b723d380f87bd762b381f31dc9fca8403d8810a61e39cbfe9d9befd4ee9df3d137a2c7e68eef7949f098bbf2fe6aca8ad92c352072c70c33b4d6b1f813409b09865f25ad0b5339f6103a81968680e39414c261e7b2cba5462467888c8a2e9138be9ee8f648029af25e83858ca2316f9564dc9985f9aa0e3d807c165788e85f92f9c8649673a5a2d31910fa30b2c5cdcd59cf697c93bb6bf630b0e99a1fd6677d303ed1f61edf293029ebb2691622bba37f6b68c4f462768583a16d6c342fe1fdb319c90d983ed22dd5ea50e2b515e36fa1a978c047ce1415479a69b9390e44dfd4f00dcfb5cc7049663450157f918feb270dc92968520eefcc3937982a794b05be920d6f7d6bd9b61887af2665670acc91d6a256d67dc38d22b3257e462b1027ad3fff98d70b7279957684a4108f0dace29a6618f104628b7538e3b8800048dafe920333e475c1172c2cd603b72d172cc1a6fd2dcd1031996f05c9486a3229f0da5ee86e9f7d158ea67a319991a713df5695940b3bbb67f41e7836b60f93a886640c4b033809797e1ce994600c2455b87a93f6580bd4518cd5df7a245fb4c5c61c47995b054db66129ccc761daa53790f1600b580c540924139dd4c1d612f7687e8fcead4c66000a8c83c647efe0bdd64da45d821c87da5b2d9e96a269ccc343018c02540ff5aea467e0b224cc2a35a524459a8c295371c4cca066c59584aebd6b37a7b09438a0439fc8e84f0623637f252534c170bb324055d8534d668b3461603f068b52e6e524f31b783976b965e61e41e7297dc93d5e18c5e84e33b75ba181ab9174a86ca9afe4f35a1fc424f1e17d38210c917bb0b5cf843319fff6858653f210010732e7fd0804042f22ef7683f3f183429042ea3cdb7730aa4107324e536d5a28219c9af0e8123a240d9e5c7066f456cb90cbc9306841f132f714398bcfe2c7c1005e44e16879d641ed304882e79124103212b25cceab65c8c17319a9941725cbb64a140faab41c614e6b2bf6128395bf195e22175257456e160fb674777bccf583449595c1f5a9073437746132c78291520bbfd9a3a1535ad526763fe335a1ea78b046ba6163bdd8d223584ef345c3ff994fb8457b34dbae2c8f7c970af1e78d135c4dad7444bc39921884a5682861116a81014388723342f855f320ecaa91f85bd2aa7af027c7da6c0441654522c4fc483a01159e09d1d5c45895524dc80359f421a5d1e518a36072469f49cff862c4d03320ac01cc0c801e6e20bccbc9e445f93b2f916807b59040e115bb78481d2ff9fc9a6de7156fd58d276b872c74b4f3939391d31b92b5ef1f326332a10316fab16c960a033767a507c09198f3b3a72273d9ceccebb34f2d9da2cd4ac7f58ea50dfa757dcd9324addd49c440c49ee0489d017f43086d1e697e3ad38cc07f6b7eb14fce7b46d5a7fc87218d55754b932d0fbf20d3b1b7744fd4832a438d5525fbcd96356c8aa03b002f7cfdf709930a28e81cfc588e73f654f7095eb103d93cb0c19be3c9def73d091f0fd7ba59bb3114a10daef1627a6a2633f142e1485bd056b3942aee881272a26bb6d415a768aa40d212c7f5ce4760d3a9b3a97d466571b9ad31d801fe168f563b54d20719cbb2b9fbfe46dc08923aae3230bcdd34f6123e84b4083fe6a94d2f4d062afc9530866fad85d0f9934d99eb14b65971739be583c2362d39949a8e536546604a024f716f890110d214b1f6f7f0946ab48a111a99886822c00ab4202c09b2a1037996ced73a88f17af27230aa1ffa35dd9255b81fc1f1c1ee59f67c0d65078ce7d2187d2d1568ddc2f6e1f2b13ec9e19a5a9635dcef851f6599dc0815f6a9a47dee55818a68b41c43a8e3745e0e31732c08d2333c6dd945ad6a3d14b8a20b4f4a24314f3ec1dc1fe0a5009da844faec8e2621adf4591fc702cce907681ee5a6e2317bc06c93a0f5e6f56f08648e53a63983223bedb485c53944ae7404c1838dec456e42c0b498cce97d73a6b83442029f78c02c97e10473984394250ee8c2684dca29e2556bfbc0508e8e76991552c1e7d106e0faa2ca9e7ca12b4bc24e605972c1b5fcf4f82242e8911bd6d52d08b513d1e7ae8636802169993b45d30c56f466586997c2c08d9657af11770bbb2b763a75eedcadbe6f906ea576996415a27d99809c8f03858f7af3285973a21360ab7c83c97a6b1a30ab7b86aa42eca51d84ef486ba8e2b658b7b70438aa203eac6ef1b29a5fbdb3f7f4bf810b7049638f4c4815e1104a79e72e93a09e1781d306d98ea28041f742a4c28209117f7fc8d807b73aaa6db2cbcbeff6bae2a1bad6203947540f2dc1eef9188cbbd79f27fd3ad8880e7f5a23a01df1eb1db98e9b1b756856b987c84d7e05d23fe76b4fe3b4fdb12b2a7ae714ead66f8543fb831bfb29606996e90149e8ebe655a2c642177d36259b77818e714540cdc8324f90dd36eca7b1dd9de69c01e5c4676e309c792322438657d48d8961f2d8ea5c1c64ab63f4730c38530635d99be3a8c6866b8b8d0bb27bf8f886b47f925299b14a57594a81e0d011ae6a1106ece9dfa54a147701dd0ba6e2947e5616614d6bc591194b15b75037ecf2d9aa6b1b427527aedba7436867dbfe9cbb96301c4e2007e9728f8ef58f2590889ccdb18d7b40950d32f990887b522482771b170947d6f021141d4a2d489c60366e2932a69f12071136a3b24ad61169407f23bbd93eaf0ee40909410350dd37747f3a77d3b1d20502d7139d44c8a31186bb2d9ca6163c98cb117a842c34b1617382415e4d8617639c662f09c03222f3cc6160acc589ab120748a14397e25ad499bd51a031bdbd5f7ae9f3ed153415f1ffc94b3ba006498bceb88268fc0679929ed994495cb7185633ea92a196b037220ecbcb9765254603fe29a28f192ae0f786ddfde253c97839208d504f6e6c0024935ca739a59a1e950a980f604bd5f3643f0bfe9d7edc059a5a7a14623b11784d9394074a8f845cce9b10c56752f4e035a840adc9f7a9a183abbaa31c206fe94908e51fc1b32282473af2591c9bc6e1733a4c2b3e091579ee67488016943af067768ccb20273fe3314dc4bcd61de5358d68caaac2858e469163dfc1dbfdf755b8e02db584b9d5b33d6210a0a20e34bb3abe9149a2a53347d86758ac5eabb1d39a17c88a5e95ffdfc28ed8ff4829ac262b8d93d87102b263e90119e497cf5e793bea47ea65664733ee425323e8fbb136ee74c73e4d36b54caaf9c6be076e7034f9a4dbc909af9c81dc229da2982088040f89f802a4cb9cf217a02930263e2ac37efafa3fa9c0d870214ca99d21b2c6bb54e41df798568ab151bff8497728da6cc20e01aa66b50f904f340f5f64ed012e4bf7ea721f84ffa95e019c13eaca5334770e4335202e95d3ad2b1a417ac98ea1522b668d1df91b0ce362b73fdbe96fbbb2089b615f8162fc1b54b39b1411c7722c1e9a9760f4bf6cd2b922181abb7eaf71e7fe0d682790718fe4bf9717765919e442d3ce6d001f2c7ca4988fc4088e7116a8486651687897b408ca70fe3dcc84129bc9584edd6b7fc203be9404ebfb63fc4fd75cd0319c80dc60b562a1f40b3ee0f2c4a5e26dd01ea24cbb58d5e7c743cad82f8d14431a659271d7b043c7168ec995681752d58ce6acd41a57f0d1c7f8c69d7436b3e909ef7b812b821cc556e0fafcfb0c3dfe446466502f820ad167e0a7c00061a104d431f1f48f3ed472e8b51b989191bb280e1b69cf62ad6fb4c1d8c6e397ecbc00417e6c19f5befc59bfa9d8fd6404c9825aedd916b1236df15d334a6040ae11d1482b0767ad4c3cddd535856ca6cb8546d3edb214484d6436831fb0820cf07a85927641e868d6a91611594ffd8a4ee740b00a35910ff2875f5ecada12d8526273748512a2504184442787927ed5840d5b5b3f4ffe228a02b4b63f322ea0a8a9f0e12a52249fbd247fb149d303cf2f0894985d7568250238b664b12a5d63f80e138f84e59838df377cc4af915390127eca612fd28441de6f7127dc56fb72bb1cfb236eed4f4d2a09b365d5a74d2a49f865e1a74d3a64b8b4e9af4d3d04b836eda7469d149937e1a7a69d04d9b2e2d3a69d24f432f0d3a4d73bcd2ae585019ab75c2d884d47753392a439e16d3a21ea1a592df2c9e17c81a0095126726842ba8fb3ee5591fcbd07c07b71e7304259c8c9d82b37d2d7b07720bb1b1396d9d5f5432f2a1231843e017074feb762bb52364912d871e1dd75e2a9bff219470121dd90c3e4fcbc7d78e3c76e85ca9529b187fecd97185477c9ea66b23be2d2743590c4ab83a3ab56e558319d87e1b038b1eebe23b580bc3df9494f019651c4d3511c2bd32027fadc8308d94a0bc778b8aefc885b70b3f2b3399dd913c44e8999b2d4e65382a4c43fe21b1f79b4f53e09827f00f41b8dc99f77a44dd968ae189ae45d6004700682d4eca5806a3c04093eb1c09ee0300137b1240bcfe261cf6571a57941331d27b88cf97d3e48ba0e7c1fd21b454c06780040a9194c59c63221bd807b884e82a3c80d9b91016b8e0bc794b51ce94e4bfbf5f29183d93e617908282309e57030f1f920464b744ba09339e6be58ff95cb1d8388edf7baa49e5b72bfa211b7fab4f1b8fc54741d743e23fa290e6dce5f47f92866a27219fa77f6c2c94cf6a52fb94e158e0f2e30feb90af7f29f8ae780393a322e38f7a01e53e823fe08d33d7ba331cb1b46b2690348ce2f387a8444a24f55348297eab6c7d170d00b0ff0cad63a84aa5428f2390842cf3449a97f262aa46af89829b952a8faa1dc69a7257c979b5a4cefd4d435d9d3effbc12ecab2ae1cea424bf589d12cc2460c25ce88545e5bcde74238684af070b33af3cfdd93d88a81bd256aa5ce8909d7f98e5b389659b08ef60c97b74ffe0100ceb6a8eb82776afcfa689ad1e366f5134d78a15a48293b13781a82f73c2806ab8f163a547e37ce6a1d95fcfdb0ff340e8e52bf78faad9f4579821dafca7e03d440868d01f4587b9730e07d739bab1b0f2e6fad3edf06dba8cb4cbc9daf19b4244683f86e43ea1162f1f0bde0e6acf718ca93e2a6907100f171cf7d07e5be2a4ff8277a8fde468620849e2ec57a214dac1b06cd824a5a0cf1a1231b430d8b01d9de43cb816179f2892d43f50b61f759dbfa3596b53b1c636bc0d53ef2c237927473b732be036d89b013f8d75756748595f8f9941eba2bc698e767e5dd91f79e3d9c0ecbb1186f77175f911cd496476b64dd6bbab39249557ff47651126e34657a2ca373c7e5304cae51864e37a3874c8a17c1e5435d73e46b4f68bf04392d3a5593439fa3a4fd73f1a02bc3fdd5c355947d88fb971a21cb1c087388d219d0621196750528df09f75c0e6f61294a187743f286706da035c0c36cb50cd6536ef6bc3c1f2ed4c5c7b40926f2382ee9428c0cac0578cd3920ad57015973c68b79f802b65f9b91f43330083e5da0b4cb485de31b5d7f50493a18b63d3d5906a1164ac9a8140da7ad06e4c3a979c551203c3b594ea8fd63dd18b7ccf8710ee230c71b2777bfa7221a91d9ae694214d31f87242eafd6d8e7879a20c020dc63e0b60ab7337cd10fd9e3609c4e81d1d755acc0ca8ff0844500b80947d276d7ed9533834e56a880f13e9e1f51f06392dc97907018174ef34d9d164702d94020b2412d983dbace096bf0a29a3c1df67377c8b05cb3c47a60886fc76fb1ba5d437447c9132757c753e4833e61162acff951a07c282d3384b98e5d587a386f0c988d8b35b190ccbe4058eb2478d65a1c9750e6ba2102983ae660c056c93bdbaa3d6034a9934993e964e0e50f536b215771e78defc450d076b4db62c245caade5cb0c4ed5b659f543dcf2c7ddbb24e86d2d9fb6860cf71dca9cd545ae6e7a350a900f1d45b6a658559e99b7bd36301561a36524b0b69f88e94c1a9c7664553a90259ae276088b54b52816691bdde4f74091a1a7fa24c3eb47a054939c8ee6e4e025b7353e644311821de296b3bd867fb8953f38a672002a84812b5b7e834113fa28022e6f7ff5086be53f36959ff6dae2234ae296ae50ac8a05cddc891cfd8fb79ecfb90321bd0ba27f9ed6de0d4f985fe613c3bc6fbe34fff5100a129aca450c42744589c3cbb50d1d8d937ccf4c9e3017311aef1daba0465e3c84593402a7c1ff97f5cbf67c16af290d879d431328f7de35017e6d8c4ba0b252c5b638e36012fe87136683232d6652be152d3f36f5c253480511e43ff500a4cff65ab8c50e69963a9a843cf99f3d78d71639854f83faa7ac83b69a22b5c5bf9dfbb426dccb0137d514a3dfa73940ca6114314f7ca86602bb48833ca546c28e28022aebe58cab35a870fc80cac5548578557a7d28ec3e005980c32a51094cd20d118a235ab9411c5204ef0af65807fa172ea3fc65e30c246eeddf60f50e2c8044b29d09528c2968488b2c38c8f6ec918f71494d71b1c4228e28f842423d9ba3910a68155cf5ebb16f47515a4537ef1d135b26bb30aa102d22fc21c8904230bd48e724929ec855b452053d971c8f1119ddc3ceb59684606ccf820b84ca857f99ee2eec1f345fe8d646a3470def2750596d85d879306aa5185225f81bf7855fbbac587eeba82a7c5f534117649799fc8e39fc3aeda36eb8bdcbb05e5731ca1bae2d7b1062ec8090b4a4dad83e0398f154a5243e5c2c19d39d18f1332b8cbe1dbe24fca422616e871d7d228410b83bd1ca046f4029cc1972a0bd1a50781f50c828fd1f717b6cdebd0b888af4c3355df473493642a4b3bde8292831d2283be6529b6b54b598399c7a538c248008ccae4b398adadb008dd52423e0ffa625d922c137e09d472532894d67bd07fd037418bd4b375162ea420aaa6e4099e7273044ca612c31450e3c6f80a9c182a40f73048504b586c54f73b5753831c0d190e1eb00a6d0474735fa18471d1e9c2c21b04b07cbac1c1cfcc769c817fd1e907fcd59459a50893f50aa72ea5df8a9792eb8d781ee565062ddf9d060f9d5decfb47e58a96928cbe0cf6e7c9311a1bcfba0816f53845fab07c9b09ab87d064c09c70bf2df2065bd185f7ff1b9d471d8bd5518e2abc4757f820ccb1401c23812ceffef06c3ccf2d5e8c1227d4646a390eae1d16a52134394c46e50745c7d3b22d168b1a08dd328cc09ed266ac628bdd78076488e9ffa21fbfe81ce587290c13c8c490ce0b5314f72a07c726c994db6e9b843d047fab3f8f58ad3082ba5394166a272c63738d2fbd33362045aa038d0b37f687312a792d925bced4d12974b4da212a23e680030f77315ac07c288db964313ad2c895a5871e0cbc043d2b12ebc7292ec263785edab77064491ea26d02561bfa1597f43e3d223249f754f7f6dbc149acc671d46c9c31c32f5d4580e5f412bde9e5452ecf03fe341b30671394d4a4ac001c79a8e6414c926eb7da44b05bbd222c32605137dba4e04f93ddd2f4fe11235b3e22a2e787f7c626adc7eb33deb4bb0c5565ff3a64e32a2f7e3d7cd59067a95b8f2d182c5344c6b1f13b5a6fc9a3032e21d73fe9f6fdd4c18d32a7dd7f6fe2dd135f60a3f9c993ab9a8be2c48996cb61a7db8f5f1aadf3fc37a69abdc391e27123f2edba89595a5b387e822ecb577901ea8fc0deb5440d66cf0f0921de1227bae2fce53aa53b3a1519110bc4bc561a9d8a24dd9f37bf11b7dbe734267f46938a800466028aa560614feb5a04342ff1894adfaebc67ee35b7db3c311bd52c6976a3e8afc42207d1ec6f4de3a5b17f348806a14de34056aaf4d24cdc9ce37ea512d862793f54a9b2c620c4a149205afb295a197a6dbd82c306b531337d1de370c00ff2e3cc0a848f3a61844ca3f4a8fc3f3d5c9645a6aba2d3097eec9bb6d53aedc01ee3e7cd2c0fc2f240b2a65e4190a0323d35f7fbb02c16700825ed8b743881a918a61c8ab34a3f16ec549c7816ba89024f233c885d19e1d7013babd4e8bf7b5199ca5128a5ca41abc41693aaa4d52eda81aa341f33925a055dab56facbedf9d9eaa70b0b9af047dc9c2ad3a7343e3b372eccc94348520eb69f20822e6d50de66b6298efad9f250a3c8f0a7ec62ce2911f8854e248c82ed361015e1a988e1b7125656973dd5ed047de22fc1dd0f3456050b223c604b28c7e3f894f23eb392b41720a687fe36c35b6ad63168c91688fa9259eb94c00daf873738fe9c40f83bec0388dbc4158a31a01510ed7d033b294b6aa31019d09a2192fa67c6c7de9957f55119d04ab437dc40233bd07ac6824fb408adc0f0426c59c794ded961369eca81cbdeab526768b6f4d2ca5705d609d24920b35aa55c743717e08001e4f39ea3e47dd59acb3722adc7515561bb80309776e775de9e365e55c2dd3c7acfafe98f35a16a9ee0e7bf6084fca8b9f7d655a2a3400b80e28d10eb3fe61e91a9fd17801d545f3ca1ea4a51043842a471c81051e5046ab8ea554df8cfdd7a4622da87718baf0c01ae56302aea71597ccdf333679f69430dba1e21c3051feea999cc41d38cf8e3aac5972473d7b572c165c27ec20a868f5f0b05f895002dab13591e468cad9b1f5d14fe076b851871cbb8bd3158cdfabbc8197b6df69bad4797aa4fc2ed76eda738753a9947b21932852f036518b5750de5bc391b4d65ade4c55eaae5fc80803bbd114567472ef837e86c004f71c0568c85e02d71e7e51f9aeb0a5bd9078518c59d5016227113d770444ee3441e8b9c90e917fa7a31f81e9d771fb64db2b79221f60cb143fdfa0cf9aefe76db30e4f8c7fec2833dc89bcb6458591255dbde7a46ee592b1c9e343d0a2c8d7d8e51edb12cc3babf69b3ceb2282d6ea7210047b20b752bf94f5ea58b5f03138dfc04ae27f024fd436b4e06c9a92b9d44f84580a340860e071fc79efef14507a80def7e51fd4b7ba7c917450afc3c2281a708bebe0a42727cfb51d2fc4ad94978b0adf8b436375ecef5ef95eeae3faf737cb9758c80d0d1ad3a7c300a1e91468fc8073ffca7b157fdc9d07a405c20d32842895ff516989e1c3a7c4658fccc2da4d7f97b84923f3cbcc695d1e4cf08dbae920bb23189cfa83ea03f7aa4ffdae9784aad879421354a22018de85b0199350204f608e0401bb242e2e122e0dc9fa1aa89008922e8c79666addcef5a4580dd3679200ede0023d92913a930cb59c8e102d299aa1cefa6f3e70190022a570d06001549cb61bdf5bf6b5843719e650760a6c4abc9f5f3b9337ab8fe1a5775854fdc06567006a39cc8efa6e7fa05307328aece732911a60195307155de6a135c74a12fb122c428fa41657e3b89593e708dac610709acebc8084a91bfd2dec1bb390c1d259a5cc9a723299dbcc4e51d789437861d26ea92e165fac6d50619e5abd1a4bf5f8109652f18be0ad2f7a2722c4b687852750048dcd91a2cc4f383dcc0ac25a80a044b062f060500d411069bbffd6b4e8badcf4a90167efd93aac294585e95a0c3295ec5f33318dd6e0204d4610e18205dcc51763c706fea2bf26d25eab6604d55df2ffc2225fef9bf7fee654995a863cb2a95e4d170701af34d3e0b36c61119fe9f63e368a3b25f185fa36e3655225b77d4d7f54f46a84ab70df4b2dc0f9b5293edff89e9c2cec31792da865f580028c88825acf2df2672d7484a2a814aa90333f0cd78260441395e661f90c88d8150c743bcffe372017b8d0b8affac076690c5180d719e7326ed15d5f2fdab46239111b2b7356e39b52cc5a807cf05f25a83718e254310b199658619f2a52a4c7250bdeca8f03533eadf44641611a3a8be38db6646473b8342fbc457d5bbf9c4bbdd12424bdceb733f7c0e42dc75c8a16adae6025e8dd3b15b8b6937ec83b259e0ac5ce924545c1b0cae15a8ed70fe7231187da3f9e476d5b74274bff2a06061da70b648b5cd3b23808b2cd48019ccd8aabf109b66fcd9fa5acbafdfcef38b657cfe872d00c272a98ed936388d189f4d8a58e256c5b3ee0ddcd7af2a42752bb2df9a5bc380da649d3f22570dbf24cf30dd01f7c87cfa7024a50b0f54f993e97b4dc6fd5dd54be87eaf3632f036b0567d041072b68885b3f50ee88f279e28eb0545824306180981e1aa6f9d0924e6029d17acdaad346e3c155e90a139b0ce2f41343a763f42411e6bd229c0dbee28bc66a0fbcf4f646bd11dbe133cd903ee17aa199238bc3a2ed2d66b88b89168a8407d58f8d16246e0d87f6198603b0b67e16f1861207b248479011b0af4146bc88a4819905fe99b37851b78486eb584f4e98628d092fb9f24250a1adc0caed5dea457cbf1e564013ad7446bc7e4e3383de0658276084e699c40189166bb5a94ef919e0dc0b9db1b6d862e06b03693ec0d8d1a8c8708cde8bc04fc60607efd427dceaa935e9786fb251b52fe4245c92f01785af764b66faa12fe71ce178ebd4f83b7d1a599c95d928ec49ea4675eb465f3f67ba8d307d94d97131bcd80613deeaec0a7d3e55bbd4b270fd72f86f4408b73552927b539f693fc4c5740ccca0f02119982122364f599fe8b7aa0302adf54a0d41fe88053348121238d02618d5c9496107b8dacd443a03985d32c94ae88ce5dc01dd914c147d1ce38a2539e916cc07f7b255099d598efc13bbe3863613d9198db36cfe28b8d8316f43a8bd1e1e7087fe9b63c6d73948921900a3a37c73c77901ce454fa156ddcb85848c39057b7c0c3084b08114beba056e7fe31ed6d4951153594533f604918585c3df6c88f5cf8fd5edcb53841a749ac3b4505ea96f21a450227946ef4a5b560b11fd5045d17d6bdcad28c29d449fbfaa0569f93c386afb62fb70d5800ad569c8e6720728d392151329ac4ac8dbbf4876ec9b29789b98eab7cb03efc98c05113df24fdcf321535d72acf5364c9edc5343158006495d178755e88e3701cb97dad407c69032c8edc04cb1e159ec37c0ea1dcba84430969e256bc226355419d3ec6db34ef7076f451782a645169cfbd9d28c826adc508233e86ecce5f4d6819253e9a854836841e0fd2aacc184f923c22d1b7d082e5f5aed000fc5618168b5ebf93f2b8cc7b3b010d3ee2138c2b8a2994acce011afcd960bc5b1a27205a66fc691707d0e09054fda29a25210b80b28ae490cbbdbe0110ec869702c22983706d5aa5c8f1cc62eeb0f09f9e8fa5904b502fb487407101ec95ac1b87d575c3eb41e62ca9a235891de2a57b1a70518d943a7363303d10d0ed7a7cecd3221c348412e1c6f5326d6d920b8c69da771e7fd8b8f55a03f4ea33cccabf6fad78214041fad5c03b7fc5455df2ed8d04f759e644f5a128cd30b2d7fe3a13db1c8edcc8829a08de79fe69ca18e9831b93cf6ef9a799a814033a6c8c1d4e63b046c1afeaf37448b0cd76190d4cff8dba5f734abd6cd50b3d71a3d0b6f2e2b7e406ebc57c9f1696c73e322ae72d3450a6747f30901d15f61c1fa4a1d186b233e6aa37664a2243da89fec65159869caf73d83a280a6ea0fecfe5391f03bea6c7b83083f6312404c5b1fe0b078bc9abd3342243272a5a4825ae2602c8144841c0ba9130d9862611b690880e943c4ea6a1dabc61d0cdcb5e66039e25a37d7aefe4b8015d3442fc5a288a2e7e22e787ba8351d9165ddb8770edcd77082958ddcf2241a8743b638f359d7810ebe9c04f22c1f13113eac197fad827567ab244b3d4f15ad727a8e35a33064252ad0c91371661313cd3cabcc1b12ccff0215badd5d9438f0e29a4012cce670010c0e0e00f08911b4a0a784bf6a571e3d87ca4c2ff019a58970a8a6982bbb0016ce932bcf9743fc705f27b0520f1ceaeb5494dc9fb3a2701a0d33caa0868ce8e57541d235f8a0e3e8348310d6d7a56f4d5148789fac474e36b702471a67488591424b05d75811478c1d188d3fc1ce50e16a64bf940431e73aca9c3bf0111b282f19a4f7db6890d93a580cc0881f436c28ad821042793e99c171b0406f3b69b0c084bdec2088aa7a29b8a8d8e083d131052e7164cf35a26655ab116eaf335490e727a74e57f81c2b0ad6e0b764a2454c1ebe14733afa26c4009070f71567c3d594b886248d5eb6bd71d96aa40c2b8cc91a1e565bf1f02a444419da714c0df60a785c8864c54f7eaa405ceef7d74a8b3489022f1e1d57d8799984af6d7292a87438c8408f5605a51acf3b36406ddd1419ada4a136e1bfb2bfccce9c503d3f4abb0cc69597d02747f3cd19ce99319340acb1709ada174c803c0a71b2fbdf364cc7e38e1a43db5f63a94590b6b42eca47018f547674bb8d2331fff03df8fe33783eb9841b6216da1ace1521aefd3c44389323c34b1316ae69984d731c95f0117b88fd4474af1e4096ae0408b8b2954553ab7f426f1a3e8222407744b6dc870e2136f37e7ca69e6fce6b6d5c70432879b73d4e8bd1d724efb9e859cf695064d441781c0a78dc26a4691a65861368a31e27f9d842334de6a5720569698c00804b73f8a23948b8792a1ba9d4b49b2bdbad1fef28bb9fbd04fb8c1b1794be075a08fbbc9c382a2b704b134ec42b3683303751e2af5006ab5ea51b5c9ff463fc31adae4cd36a986ee6a08026e4f4c201c11604a1820925922d243c2d371f31c0400b3b5c352f853f8fd05437e4dfb32e8085395a6b5e434db05c9074a2fdbb9b12f0e99ec76740f3a8b825dcaffd164337d5a32f7dd6f5b8e8b9d289cae3068b3201ef7ca0e6eb5e01b2882cbe3e26e72bf130b92586e17cac43ee8c5d1f3ef204bbe26493a32ff22c53672a638fc18efcabbca4e12d31461227b33d83729640a192a2a7e9ae46b81ceb56380fc5a7a5bc353c47350492e5f44c56264eb9ad8dbad4b571febebb7b6f6a4446d1808c194dd7812337ce9c5c56ac47a0729d42e16891a330192df40cfcb5887afc4df85c7cf81ddd29ec20f460edb01fb2e3f36dfcf750a1ee04ceecc133eaf210ee33c8b2b5b3418dd76f726afd9edde112498129de5b1981b017f06b93a54ad2bdd2f09d7db62aea5f8588d933fac1b15b20aae1cc17aa8b724343913431b43cbdb64a1e928883c19003bf49dae00385a13124d37e25ec30bdebf4d0717510642482b51f35e5abdf41e8141e97ed80cdd26d719e9add945d524615985b5d4acdc1ba46a62bd1c3a7dcd7a525fa0040cfdbad4ca1196bc02a407488e66f50556822525bcd0c6e5933f059f9d8a47733dc57fb566540d18eb33a41634b944e9958af3b587a488f13aa51672ae8edd50588f7f6fb377fa262fd10574a8b7d64d07b887eecc1d7941d18907ce62bac3704dd5a7dd508e780d5599faad196dc38288ad1e4c422c196afe742491898517aa19d3f26211874b8c2abe4bbab5b49e7bf0148e5b1ced8a35f8c3181da3ac4fabdb695fcf802d1b9009742213be9eb333a5c6c862ef72d3b522f8b50ecfe3d5b1b1ff66484a5946f8ff5d84f79fa90e8db67b86156c70e1e9600927d719ae9084c095437e3652405e5554b6c7e4734fe7b566056605fe1e2c6df5c3ce4c24a3d57e01cf6436fe746bbe5bde65caf616b7c4633031edb91247c61d192849659a4823fe49c778652e272fbe3a3a66184636f7d65023ba0b28ef512a341df9cf28eb0a786903fb8d04b36fa234c7126fe6c006880dfae0947334216b394de8661c141c3e926387177f54792fc181ae345f39accafc1d70029cd1e38cf97e7b0b037bfd60ecb5a85f4892d3caa63750ec459a9d18cc8ab05aa4c312f8cafad95aae82aef7204942d6d2b5c4282eb560e718dba5ba6d57126054e1897d68bcaa45c92b32174397c5e28d351c377945a119573b65b31d9fc9d093ae5e1c17c2ca7a7184b67eab2accecb123ce82db4174bcf704a52c7bfc2b317ba2946805f3bd652172eef249230bb57c976dc058a80d2f7b807202a1685239d895e3224a00c84cfbdf61119d6f83f363f735dd2e495437917a82d810c52d1ddaf07e3536ed6cc44132b398fe5b935c80f1f6183654acd30c998eabaeee3f248e0ae48f3364246a0a2bd3154afd6d682daee0175a1b759c06771ab34a44828f2e830d87270b2b900921f819bb89d6e5572b66208ab179e7361019ffca720926d11681491f811bfdb07e72580b575afdca431fb754e42d6453eaf747f32a0828b869031d1a6d1836dbca24f3f677436eeabf2baf9c77c5c5fc8e11e3320c21aefddd9f42b3236f2273721e16480e92381c8411ae1bfb2078873308ecd650a58a99fff09ab1c88c1271ec57c330e084714a6ae880a5f1be3e02f1bc8cb46610b318af444ae2d40a4211a5d4ec90b5e255b45cd19b9c09408401746cd7d8d48a5a72ef9d71a7c475c6d71896563c49749bacdd215a41e8c811dc6f000f1a6f34a13d20d1867376e5e56002367f9e1b09f0cfcf98fced14e02d586c967577a4728a42a05f531d7366093466230666124daaf74dc446542b9b795b1684915dec9ce4ef4a3fdce5c051de41c3bc482169ecc33c36d887596cc8dd302670529a4b0f5c3c6d6dcf1e3c7f3565683ec97937fa9aad012bd3fdbc659c05855ba108fbef389fa24d7202be24ce60392be3f973bcd278aa9e986598fb2a0b09863e1865f3b0982b194dcb358e41e7be782a78dfdde1cb603253a9b744fa324c4a3809f0089705adfbfb5a58f752d7f7e8c3e6dba5ed36f3fd62b60d97bf9e3704232aa1f2dd8b74a5b27a1c9c48a697fd7d6ef70b990bc3acac89d3cc05098f06dfc18ee958a77006fc54f18ed2aa9bb4ffe0154254bd5036ed38119c5ceccf0bf538c40fee124a151117945c06037d7cfac538aaadf588919a8ca7e4fce90a65a61313af0bbbfac7b6c3599d7fb570152d205630ea4420d80f445f16f0fb2791832f29cf48a8098aaacfbfb7d70076b9ee8002c7c6e70aadcda9ef8e093d1fb59d3e980f5941d491e6b0845f957ecfbe828f183cbb73507966f77a926db501b77e0b57f91d8bc87b4bd83f94c388761c9d0531f742847b38fbbc570b4646f286e7ae528b82f448c50486c69f579c7f15bcdc9f345b908d67f54406df177df7c5fa165f71434f5a8876886b8983408f4c96c8ecff4ba36b10ceab7c361e5887149a345cbcc220c59fa5f59bf7b51593030848af28a014bc4575cba4c82262567be56af45fc3f0ae2387ddddf7936e4b2df4163d20ebe6f4edfc5b730ec4b06c959719dd7f007d2f801fdbf5782f2d139333f0abf3d158727a690828ca4f3179ebb67f166f72128c94c6dc760b819629626cd7be1155ee3f731bb27aaff856e00d632c23e34edd1c765735f4450dbf622830dacdb60485b39804d46e183b860460ca17bc005ed180e0e3c05a825e67191229e63726ea75bf3979370d3a0b5d33d18256d7e8945a5c2d3f88712bef4fd7347212257bf4aea5adacdb173d50aec8c114d4e4246e8eff89b85a96981650c14a6dfae1bf54deea324cccf9da1ace15cc3b3ef0926ed4947ca10c51e3d9ee8c4b76c7da8a48efaa2157a5f5f5d07d32ae0c46abbfc30d327aeb6e24108021faf3f87bee4e37f20b493b0eaf99662c136ddaa83dd0967abcdd3cef253ecd94396c375587817b67d06c306da67c597192f2c00676f661d075098208d9e0f4bc40a0d2347123a8aa01eedbc1cc779b71e002ce830fdf0c20e223ad55154139e86508f6bc6022ed5e3c720406b42356f699be0618b0cfb27aa2ffcedeb356ca616d562233e36293f62e30b2e32a9b811f5d91ded9400ff43ad6317221077a2b521f14e73ad213c5ed7a2761a31172a41a59763ae575b820f5c0537eb8913dd6ea10e3abbd137d6b7ff9191d2fa8c1b9f750c631569fa36b4f410c97a24298f55540849dfcdf373bb8057aa26bec1a3b45e52cf1abdf2f961706505c19f30666aa77ae5b325d501e920224ec6402d2b0c865b8b6c3dac98b5371e6c81babec51496fd0c899ee979ebe93148cc5eae2ef578ebb789f9d495b9a9ee8f96d396e84fbb88683b09c1e8cf764aa3b27d25cdcbd2ddcd9230e288589cc600bd43d5a5313bccc2fa113e738533347e6a37c7f7fdd7d9bf393489eac74b5bdb9b180f3f712bda9c7ae46b6e1df6418d27b2f3b9d107ab4614494fee3b0062dc08ed5f907a1009411d06b7c398a236ab12ec97e694791b03611b9e40b52df49ea376e7bd50acda8ebb7b76be99c5b0ac0bc4699633ef5036f72794a10b7df5d3e6a3994161ce5129a148b1f529f01c831a1e85dacc27e611d31774b9cc8b3bc853d2c38b8f0cfb17ca129785fa9fb482ec01c6cccde5a8d8ed20f2cb3ab1e4904b40bcb7e565aebde815c032da89161165a344f553c51fd9f6ba6d61b95fc335320ac71d83e0bb8b3e96b396fb61d388289a12e8a109932dcea9d28fb9f86fc731e4fbdebc4208a35208fdd273158dc6b3c6245bad2273034154c0c3e1519f378024ba63ebfaff0f46490af6b270eb095f85539867fa41db0a8b03e40ee422f0de0f60a69e415ec72bc3d351eca585a87160addc163690cffc3a6d4364f55d53adb46d81592d25a82c9027bf1b483c9abf2d4b37172fac2dad70fce000815c26daa8d63a70b68c1ee5b1a8e39e410dda0aeac5345e614a0a37bd72abbb46c219392f29e90f3fc1e008e73b3f22d362cac620da1ab0f47868fd95036d8fb2b06069d8583eb071f944860890bc3f126f95bbeb78f6fe8f30c805cf74941fbcf95ed2a17e85672a332d255aefb5dd76ba1cbee358edffd7fb83a2d1a2f9875be2cadaade23570d7d773bee5c0e44a8ebdbec27ff9a14ea5c7799235711649452300285fbda290e4fe4ffac1fd07386b34d027c98635db1ca77a204a5d532ca3b85d21e2638c76a19f4e6352a063243379f166bd2aaf7189b06f026dabd89908e1522d3a8f10685082952e258e1ae6f909409dd34c46e920fa10ee2b8e22f77c333d91ca0afe34f8c8f3bdb20a9932451df040af4079177f61a09a305fb26a3de93cf3aee3a7bdc102933279d00fde59befd4fb669ec155823dc3da09552e4c700b279f1a31d7ac216f7be245e644c24606aa2ecb1c47559d77380cc1c5acde83a2e3c88de299a37c2b48c1f7067f3ab99619a7012296c4c7e92c181d83fcc7561d1b0c8e1dab0e235d96962fafa4b8c8fc66d615a4c1f09054e755690203b902e6a04f8c551b41770206e3b2dfcd819a397894144374cc24e8ba41f37218224757503d4158b95b6fc19e22cb18109cb24b3c0d0151f1f88e0fd9fbea11316ced68d04f1e3c8bce41753a15a24bd2c61a19456c12c93474494e433dcd2da6541c68274a168c6596de7f6481d12241b6c7bc098de8059fc383991c71cc17d0037d58ee403ab48b3581199228ac2a4cb3a9f2c9fd24d4a12cd18c294c2cee32dce2a2f21dea72c909c22798936cba7a62e568793338ec3a6ea88d5217b8a93da463aa889a78f9975b4aed6e053ed61d2679a18f201c2270398347cbee603882fd30355b0edab5e74c375513274fb2b468ea100ed97c973d2766b2e485b5304a8039176241c5654bd243ca59dffd112837c14870fe0be036bf86ea8eb786e3e4a7ef7b21003ebc5f747aa391b467940af195fda7bea56ccf418a56acdb654ccf60bb9297b6cc66fdce094ae9d82101f3fdeb8af96018316856b9eb5bdea7f9f7af4ff029065b62561097f243aa50f072a04b5886efbcc1ca105cc051a9e770dac886012577deddd7c4563baa0d7875496ef1a14b8060af64eec8530c6a71149e18864517d787918fe4a9db121b69d7f14a6e6d739e262b30fd09f05bc78c75f7cd2934a00430cd595ceb7c5e773519eac7f334a66f87062e194dea8296b94e727bf3e3d3523d637d6e3c9f973c73926b575f46ab1be065fe0b65881da3c425c08db29434e4647e2542c52a30eafc61afa85bf33d21dc6f68f57103277edbcc6f9588f0e90507f06eb3b0649cc1996548a180c934b02119e6090e9b7a4d2c61f62fb3106c458405acc34fa48a95a68204d14358154b47b31a2dfed99716ac83d50d415888df5cdda41aa5753981d0b8e04939c7f42e6abf003214f3f3d34342725d046e249b160bc8129df41f2566db30d167a0578baa0545bf387bcf5fc0dfcb128590ded2498ca88a6ac8899647faf746cf8dc369f54be982e87cfd4d7d252e7989f8dac3a122c1eb2dc5248b76007df2c7a5fa8aeee0c07926ce5d114fe10defde493cc22460d46b575398935dfd08c987d662f648d814c0e080c76b31ed629a54b5821a13262aa0c5d65528c34ba4670c39e8fb6bb39ee61ec2657b0eb4a446ff141f392e20a062e860d82c56dc942db0db010d83a3f69ad06285433fa1d02a20d1122e105668f36f26662cd60357003cde13d8269d84c3aea5332e9080159590041d16377deff8e6709ad3117abbcae5585cc7876f5a84982eaad8af455d5c90d90bfb50fae92d466ae820c5ce76af2e298da51977fdb50095f3ed5b256aba411f8434bc9b648db71c7761ac18e65014ffa05aab1fa34756589874478ef91f38c032fa672af462b61ca268f4087ea42a865a28164b7d7724e32b5410899a38c94dce8f2c4fa5d79ccc53444788dccf2d68c7f85c2d793851225a5153f5a13b05afef5f9105bb97a363da329008cca07ecb6548103bbff626c89c892c7b091a04639c772b1b02323d8c695b25d64c032ecc5c64dac0491888841bdb09e5137b3c6705a3666dd5383116dd4f62b57d0f0f509603567eeee5b6b6e7b6c67006424e807d5ec6d818f54518bf1875af0e8869c08cf3cf15e194178d46a648fdfe5bdf8db3c0b644f0bbc1d8346e772d0343b84ba92e1b2682fc3395f972467030b10f9b5fe45e373e9a3ce8a4746750c041199dc6d7a5421cc8a1238476b2fbdcaea05f7376c0e760f3436f9cd951cd238706c73e4c58bcc281045682bcbe27ca3bc8985731572959d08102f2139b94752076b864a54d009fab0117c64fdd6a73622b0d6d4f5a50d3612100c9430689f910e2379670b84c4ff6dcfd60a11793bb1462abc21979458523989fe7fd74e24d0663e6ad808fb0fac6ee2504cd458d2f4be950d2e2122256a23724aaaa21c7155d374610cd47bd9d7621adecb9e4a102b81067472797cd55697de673e10b22e39759d6546dc1dfe9a46d7678771dd2cb1b54335da82ec89934902824180034aecd5ba9ecf9a04fa1ee99d91d6b59383326ff770d7ea349e603446bc0809f5ab29b02ebe4ec90fb3b0413b22826c3026b7cd2802f0bdf6d3e4f5f0d041a908734f043f6af279de5f8539542d1748eda302f922de4c1d9a3b11f6a15e1efeb6bdcd5f28daf41fc487e51e1b7a134ff426c054508a1f8454b828187f0ac3681b43af6b8ee20a021a1929e54960859b36968a38a15bcc7384e6aae36e75ea1a27a2504114214f1d4b9e75f709b3b25b7ab8d658e6d1cf82b5ce262ed94e008b5be7714a9a23e1b24ac5e8e0c71613dc7883162f52ed8c485f58e8bd53c542f2074229b14fab687076e3fbcf1e16f7f531678672319b56f775b537a2c2773624515e93f661b8956a66ea6b413100177c8c8986f4a699b5923657cfe156677a56ff81c2de3e7326c958f1ca48d14997c6575bcfdec41b447f6e56582c06a50979c303f16fbc0b3edf503c50fea69f63ac354e925b45b4bf6f53eca6315144706c459841eeb43d24296f0cbef737d75c6ee9ce635830f690c5ec692ad09820ea70d50ec7bd423f36b38faf8b40cd7f04c018b3806bcb64d5bb51b4bd47cf9a68a390e69b3ada864ff6bec5c8ce1417c32729d4e8ec3274c3d58a59cae4908b1e17fa728c3652b880d4095496df0edc3295230174728a98c518eff43b4c525e2151114ecca3c2cf951be997b24bb6d5c3e1c5af82635810443656b60d879765b19d89b3ec41908a6e2a80e11807db6912f9c36e175e6a9e0e479279f3076044ba68a98198b52be8073d4c9a265db7352d7e23e235f2d4b7197295840f2103aadd3e171efe999c7ba19d5e400e04dd746f905a8e2bc649d64153bc8882bd6f548f5cbc1a726d2c4c62716937b74c7ac46d9e48de8f1e4cebcee79ea4d0ae49dbd8476374b757748fb5bef43b9c72a93c5e5118eb951c3b4326611dc3560df34dd28ddf5099ff2a1f37b8d90783a1201b4d1732ab282def1e3fa08acc0c4b57f9977bb46ba38a5579728f6ac2c5b82d7dadf3a507c7284c2ea91f42a449f3534c85b2bb2bac0174fa5d700a15a526bf9b2a39ff229949e04941373ebddc0c8eb67d14edbc79358c7ade49bdae889dfffce9843656e4867d0d156c1d6cccbb0ae3cfa9e3545c5d46cc17a96fcfe2e5b7ef78e0e70f710dacd264d57b97f6e6c4f21c6e09ce2a5b27c9a3d5585ea004b7d9cf0545c884686109dba4fb3c5e9b6f06854abb39bc79b7bebfefd366c44822ebd9c5f62195b69e931fb5da6cab991e19f52e44e3ffdd0cff268e4e188ae3c9f8962e3ac3592f9e807d524b40b313c78a16b2cfc4ac8da911724f65715de4d6fff5b388ce1aa7e284871eaaae121946a13c4dc2975643e61ebfdc6685ef6367abeba60b43b06be71d7d8a193025254b662541afa2c426d6b850755accd631812edcdf095c3a8692236bf8e74d0db7a5ba566f03ce19b1898de1874545e4bb4b2886ad64851170fee3fc08aa96fdd06f4a310447f276994ec1cc65782d4520cb10961f234738db56b77951affc8a028556af69cf08c59a1503d9cbb01d4f220dc3326e36aedee39f5d76cc014626b46ae6cdaa55de324f97e885651b20afa9fffdf1849d68e6d65a62182600ea723a501c298ff87829a5baebe9c4542f32f22e21e4ffb59540b8118d76e62c1349fb2bbc403aa89a45b35f885b92fe8a6ae3c37fb57dde92f2eae232cb99872d414c666ed012ca089a5ce4a8d88b8f373bc892f89bdcff214e3456067e63564fc742b6e8780dee338e32fb2a53ab07ab96780c44997286f65299cbf0989d6e9a86c260b4b089d53f90553c558900376386f55cdfea4041fb91b88f8c0382c5d6ef44105a185b1e810e545ea6501fdc8110ff401741597858761d54d2cffc26bc38c750501c2b872fcd7b3737dc71935e8398c86535ded48a52e0f72332892e43391031720a0b4431aed2cb064b5ba0ca1cc8d52cd263b1c0493c6d87dabf47b5ad5a050d97d789801a0406626765afb57a6626f91bbdc18044b231b804af1aab4d0f1d19645422a8884c6b57ae077e87ddf2b389fdc973d2a4dd08371ba3e89b303e58d8b037d784669b82fe07eaf919e2c0b4688bc56147a3f4cb7d30b25b7f4eb92bd532116c35013663efb6069c4c91cb3c19a9e7f260ffb8cab8b103f3b0f03a1257af78eb5b7154a37110f86d7e9b4f50186ea6376af793f284a41644a13cb49c847ef274a0e5053d2217d9a56840366c458f1d371f43f17679e88f1a39d1dfcc1159e7afe285e209eaad5d7296338a7fa862ee1aa38b10f0e8151d7084d09a4fd566db1caf1aa24a6cf1213ae6656595ea2f44e15b1db7e06fe297b57ae3b256f5311975d31abd54026f81794afcb868d219812c68654c6dd4d646cab26d1ecac42a36db11d683e42b066e2158059b6cd29885f528fd7523c60642bb06c2273f765b0f8dcca3ee5cbcf0acaee5fd3383f1c0dbb7f4eb0d7530b9b7076009bf16f5810f8478084cccde7b5070b34e15354eef5f5bdc281833afc49517e607db9793f3fe2f16ab2fbd64d613f9d06197a43f5bbd44d24f976028e5cba3026ec02f1d7893e60aa069a51cfd78a41cb52e394c74c1e4d9cacc3f702aa1402e7b0be977da4bdf55877cdf76f8f7b0b7113163aebf992079013020b4090b9d6a48ab98d033e4e5f2871aaba45322e66af499b13f62f219439c9e0a95abb5a83b08f5262aa477bb48b15b004e598c30623e8c516bf48098fa8085c51be147209564034dc0f3cbdb50c73ac083f3ea77ebeddf00badbb37372c97082269c8e4413fd1a6e5a907be554bedc6cb603aeed5fd72084df77916429a2ade8f3b9f47ab6826ef60903fb05da9bbdea803e7c54211a8468f3c8cf475c87f59a3888fca2bbfb0c93316ff47f52aa2e461357c53dcd94c3ac5a792272a13d116b664c55b60ae021b7b391c55c9fc14a11e3c3d7e52ad066dc0e9ee02ef2c15cdc37f8461e7b0a514db7358a9b007619651ddece0d1603b2903d55f03bbd1de00d87a9ace2d30bdce331225766bc19b65ec2bf7300f3006f53b3bfaba9467ab7a8bff2dd8220bf197ada57e6c5b379f34016ca917029d3e759ed7923156c5e4a09ac17218aa7837ebdf87f346c83746829cf470462aede39c61667a9fc0989deb2da2582ab4778d7d9e27ecb207bbfae9ff9d511eb0441d7da29ae1fa1fb353918c46e478e64f2ebd2804dbf22d809bc7335e002ccf6c3b5394bfa3a31fc5d2d209756446c64a1611e712c67eb2b0989cdc87c8ac77edcaca880c79c42b9e823f4a16756b8c0b885df2143b601c0d6903b19d4a148824b17814dab8f8c78d1a0c8c583eb8e419adfa019919d9e378de73f2804719ab2b924735fe75f37a71ab42fbc8c342d74768d847b2773b74dcae06aeb9bc0dbd530169b4273f3204442535193073c83882b49023d8a5186f239c01e34de0e603e02c4ebe51da04cf43730e72463768957cdb3fcea4a02908d5da8a1a4639e7adec2856b702e6eed812da41073a5dd2747ed0944257d551169a32cfd118910853f3efee07f8d887509b78b8a129e3543664c574680a7b06cc71c0f79a4667c635250bf4db9b9fcdfde66646354efa76dac4282dc0975186306ccdcf58a1c410ced66efb6a7a9eaebc10ae9cab393d1edce21ca4cdf744389db58ef47690f5b9e3848ba9f4448cbacc0f80a62dbdbb9007a81f8d06e9f2ec5fc00ea5f6548aae8739dd68ec3ef106704ac177484d2eab5d7dc40bf3fc377e1547f1fb5d0b92604655b0ed16e712a03a9fe15abcb88b52cc143e3fad0c971d84964e2b0e26e432e006e52ab4179671f1be97bcf2cc71efacdf3bec078c5715555c068e900a19e5b44ccb485fc1572de706682b0f2c5ab9a0b980afb9a281daf4794c93f6f308d4c90fd92fab1cc3bd123f3ec43786d9de40b7aeffc0e9333cfbaf4b0502c4efe599a8d91edd6e2f3e9221dcf87fbe0295eacfaeba551cd262fa02eaf8807824421dc5325a42bc101156f676195c19792967283c058ec197bcd8d466a6b2fa57d38e9778c7d80aa0986d1141e803ee40ed42b5c2236a40ff0f8a8714020df0955ea57870e042a16dc7ac8be8204e17189ca7feca3647f52a942ce49f1f4ba3ae55e1b315fbe759fe7f5bfc74df8571609f81e724da6b72a3ce253c9c56ce032505c4402724aa8a9b1b854880909af7bbf435a4891975f7abb1a0b3bbe37aa412b6864aefd6cfb7ed0492af59714d48b8bd3a81895dc39e564622c008490f4d1201d649d95382f6896f6f4a7ca07377eb7c35f9ac000b802d174f09239670b19c917e70da8c64665869b319d53aa8b3b40223d3382c028cb9d70c4dde3b02b58c797a1b77b83ba027eb632ca229d3212ea51f11d9487f3bbcb6453e999a1c2da407e25a8c40ce8584d00d1f3e5e20fe894c89bbcea4b496e0f2b42683301cc3de28389af43ed9278a9e453033007d8ff93416bf4ba320baa5265024c10cf10a784cd143de08beed9f26794209168eae145c93db9e731244f6417930e65cc2fb299ece9ae6b1ddcd6fec0ddf1a6520872ef616dac8ddd3843c64c5b018a91e800aa87abd05a93f6e150b2bd88a26e8458ab6113d17813022a651737f48bacfbfd5fd73b0b856b4e463f73425a9b438256ede3a423fef3710c93a6a8ec8bcf92b23315275642524afbf15d5f39ac0350b30889c97ccf6215a624a08ea32bb6bd2be087d532b46baf1264f75ed1ad22a0d059b99a9c9770c5b96db398287f911b7ec81f1d433c725c261e4459289deb387c51adf940824c333f0fdca0a2e341e9e7dd8db42a7b7e7acb622dd72b2a30d040dfdb2105f944e929599c3d9e41d5563355b587684d694700a06ddf116430ffbac805f502a272bec09dd9c399cd580e00b085921bab258eecd111cfa5ab90280771ec06769adcceee95ad250ab7fd2af3b550a96e782d21a8a9d474f42337c7029be52a2085cd7e2891118823c64a8f0f25d3296c305c645d0531e75b7c85690e905d134548a0f734aec860e45369bc5a2ac315b14b4e63b9172cf9a69a032142e58d19468a90e13e8bcfcc1786805fd97b0e57a0e23dc5614a7fa16c878ea459291b7227ac9cf3f89b0e06589c4be8e6a8cb1666c8f6e523c46f1b179c8a303b5faf93449266ecdd6d6d3b8d4c233edf4381602c90fbd2d4b1b10ae613f89a09cbdfcfe81ddef68f6abe55bf33bdebae53a66dd8ba69f2632bb4934910cb494e7cfe339c187012374a7c2cdb6ecc39bb931933c13ae9159971543241691e05a9b5d3053e88782e244e4ad8bc0f5e7fd3847c5ec61c8a1822d84d4ef4e3a9cf552bbc3fc02d26f60da1d5a001b7336a5fad6750b355063c23dcc649b9d5953fe7227534c9d07e58fb5d53785a34436e9cfe22e1f91d39313de6ac8ae98fcdbf4120f86325325b1323daa8f17d8b8edc8f1904f62cee4935e6ab96432b9f0aedafd65788c81d5859194e4b3c5f44b541182b1726cd780fa423c47e03dc38bbee2d660af1408e80fc051483315e21f07a024cbe1ec9fadd6b24f7e0bd325fa401ea55a5cf06ee0d9ca74ce6943b1afcec96f4a26cff5e029705a9dc47065ca9685c01e17936c37fed11ff10b2230baf6222ae10d7617ac34d34ae82036518ddeb1c58f4677eeca83ab8ee703f63afd1604ebbac4b8ce0dd6357ca10eb730583307adf8783f974e0631e38d9889ea1238352861a19d708a3db1d1098953eac4c9437726eba4f397ba8d4a7a7735d3bb91859897af96d21985c799c4eb8b8455f08199f614683defcb4c84e928f7e36a8763676df4421bbe27af64bf35f8ed8be3bb152e03bb95cebbe177dd8ce0be7f7779d24fb93008f734fc1de0cf4613d82477ea5c8742b82f2437472432c418ebdad875da64c48d895d680f91c808462d13c4800690c84c76286aece7742044eafc4f579689670f9eb6719e8ba60381164a5fa73721740efaf8cac0c305ce27ce5a4c96537c1febbc38bbaac617eba695f85e1cf5f44dae93d9290f77d189316dacd80087d07fd3a7727063bc7d3be14afb212d8e79f84b4d7249289823fc029f57f18efefb71bde1ee5923ddcb627b6cedebc43cd44c754a6253d5af67add20d415dca53ed1ad664d14cd46255d5ae612dd20dc175eca9b28678a178a6cead3ce0289163d203abb1a11fae3ddd1f90c9e788cc0c2e242459a61b88a2a809670de1e6ba2db721ba6b6bb1b9d34ba5e83456a90777de755d177b8d5fbd939e7298acef84e11998c32a554a847bed1d58c6f22914533b15621393ca3518ae6c3aa46b40bdc3e4a350eb3999215ba5889bd608637c600da84b9086c17ecbb24fefb668698e12982968b06b1ffbdd8e88ad0376d8bab7c437bfacd3f3d943a4d2b65f329a8d205c6dea35fa0cf595dc2024bcd593f7ddd5c71403b1fa398434a2055b94ae7b5fdc5e002d581fb82829e1bac06c10b29856590f195572e208c5f14cd9256e04ce6c72c4bfa5ca10a71b23f8947b35ee4009abad362e199c78d5e729bab5d8c867b78afe48a68fa815b716033d2992d89ed49ec3bd9ae5af33e880147ad33d29cf5434e608a7113ca4d1c9a5e41063ae7891506eb42efe4f1f30d86253bdf80302b8b54698d0e495bfa16e2138e4fd9fc43a7fb8b463f8abf69bebe6843365ea6ac633c970afe11533c6029ba51721f8f2071e93ceef6f4a0d5607d8efa4f6b15c7ea84372f5f223e547fa32a6a6686dc0584f5c783529d6209276db34876dbc89bd282d03efc9b9f8f9c1705e5eeaea5317d52ce999876e68d789db5501523afa796337aa29045bb26efa3f58d7227fa5da66b5f4d258d7b7719249bda0fb4c75226b56ddcd8128af7a531ab5594035a514e6e40288d1bdb072475e555fa87baa0407817e1a78a5b514a9861021475ddafa3e18a55aa99167b546cbc18c42d8f19954f3c13697c4ac6fd58387c0169584a30e2a24db1aa89c24edaaf6e97ace47b1d3fc0ac9b30a358d4e54eecb4b0cb0c7ab43ba90bd970017ec49ed0cc8396c25421f5aa4397079de3c8bf83b1bd2cd96047c10efe8e73e997b05f29be23c8a381bcb06b8119cf4c54a0495f7380f58d29cbc5a1321c060e8d385a996627692b442806b4e49741ba1948bc31e657606f3cc891d4d5afb033cd7b76692e8e88eadec262d82e483b549e77fddef04c843a62c92736ba7ce633881db46c3af0e07b70a5dc02e9cf08fe3aaa62e5a48481c1566b745c490f414b1d3623771eb66859002e7508a5b8b55ce020c6fdd846b1acfe051c2dd419a5bb515e65b65f33d7270c797bcc14d71dd0dc009238c831fe21cdae377865bfcf824348c16b749166e130091ebacbe780bffa5d18a72cee2696d6f8764d9f621b71559218a137c8f2bc668e89c206d7136a00460462175ab8677073631dd297d2665169aed7321a67ffed022fe36b0c7f0cb3ff269e817f388a010b44d449df25e32d459b0a51303ccb8d880062448197200f0dd3218f998a3693a109916a46042bc455b90269770c227431d30b2495bd9cfde34ac300375c438c01f3af6e18d304fd0c1d1ed03cfe021b8c0f394a573eed8f75b8367322a207b525924d37b811790f21a1385205ef1e94be1a5a6b974b5979fca85ecfe4821d9bfefe2ba74397ad3b364c5f7ad403aad5d978ebd30235536b9d715a794b02ba7a3a7d587acdc2f9d321fe5fe5e34a07024980285e82379181ffc65bc442adb9001b82ba65a181e0b85636d33c6dc76c34efe064cb7e6670b625d54fba364e007ae78cca71e47101836e3fba743c6df9c91f4453d33ff979b85db80a9e715621c722d62445fd1d5bb0e60a8ffdf5181533ece1d1370bcf5165116f2e27b861f1d063d3330901115c2235dc358260f8cd711e50b8d30725dce64d0dc6dfa22034bf42fd9ed4d0667cdc136e5ea76e8f115c4d509b2b522600a0e54c4b323a0579baedbe6d5089acd7b53361338816c617dd0032b197205081e0b22e6f68df0e346ecc9d7e518addce22f9e605766fbc2b53c024d2b55229d3f88cf2aa9b2047506ab083a640a8a1011becbb0e38f1ebf58b792d3aeacee8d381c9c5ba9a723702ec5b24b93b5134126779edb51bb4be3aad4d1e3a80e7500f8796672427805c6398f441b051a18b5b49485341d89ae1a1a1032bd2f8ea5860efe8ea8e02fa139db11eaaee46b8d3333b23a9612257c5459d25dece801ebcf69069259fed75f43ad7b97d26e2082d5f759eabcfdc23306128caf18bc05650e6a76a9126c37bfac84966500b5b534e49608a3bcfb9f3fd116ea8055d842975e058d2072097148b9484e02f461bbb6e20eb7a13dfc59feaefa670fd37b518bb9734e10c1042607cb20a9fef3802ec603f96084d967e840e49b80047fd349046ce302ca2d0e6e5b30181aa503e92c0bc1d120dc8532e0d8b7723d0ae546292170d96452d92c5291dcfb4cc40d10d13cce123b978cf0b991f38353202cc14f715c77b187c73dc316b4a64729bb6a02f7c2bd8b0ef55bf79784ec2df7965b4a999294010807b706be06ceb1fce52302f01473a640dae25611052b07157b208e2244514b262b2cf990b9a1d607e3e076e72306f6341b1bd932ec573bc2a100835653735ba04bbb703f5710cc0b8c2cf29e9c4b8be683a3408bd6e365c20b831b47d16706132c94501261237485840387485c90ac20916c04e0859385009c8e524b2da7ee1d65c29592b341a41e394ae19c734e5113f7e57b40a0a78e5999e432da5dea984bed0673cb653c599d0cd3b4939a907e26575f72f0a3e5c42c31cd74389d450a4ead7d39712de61e102a013e01a7951b1fa7dbe74506edc6889e1e33ce978fd32dc38e92a748e3a1755f5d80f671fa9cdee33d3a320c9da63d34e401ee21e25925c433ff90ada11ebdee224a07d115f7ab892c4f5c1a3a1f3ab0d73a14bbd301e260ae1139a1a64f0e8034ec4fd83494c28af73134a4337ba8db26aec5d16257f5cfdfabb11d56eb756f25912c77e979b6b3eab593457c784d435956774a15555121200d7522aa0b2e2d0271504a5741d808b01eae299040c8fd5cb011603d789808301158a8cb894b83050ad7630f7adec6f230c6c854f47de021c4a1bd2c12248766107b1d65894b7fa80f7bdd2e72e2d2559f20847405e90ad255a533bae5d42517333dfebc11333b3924aff449820169da7bb83f7828222e21f0c8d6709ab8363eb943aebc153abc814b152d4accc0be103659438a28495df1c41236bde4b0a93269c2a62baa7ca0f8e8310a9b461fa5d82bb4786bbdfae0ad676cf2b78e6937f6627e693798bcae68f29757ede6aa6e693755bef0561894051e2b8630e3182f6510db48b5c04a5809e37268c9411fd00943f51ff0046e0c93d9cb0ceb2e7b6dbfab3974cc06699d8d0df519fd078170bf1b4462af3150044b751bbb1e6a0f69f7d56049d6a5b5d6da8c9be1b9985bcfdc4eed26c3b0311eebdab2f674438761375c356ad7937b7d241c4a3f49312885b1168485315cb8442ae747d00606b914cdc468c67707e0bb83f0856fb78a703f9b18f834bd71f0fee3000f9ff7b5fba4d549f6ec11935e178f46daf27088cb4e3b873b32a6895e3f7695a5c9f5ff6c60cf94c2bdd56b8f9f154081841a2011042354a4a027280901dcdb5408e20836c041175210e387295c8af850c5125ebaf4a01ad81550115485105a9e7d8e6a10841668c0540c31831744f8020c11a8600839e008c4cccc321f23b4e26fbc94240904d0132b005151e2891e38850c9e9500523db314f5d69a194d1c7169d22363352588961e04bdac84b6247c5c4660846507aa1624462e123fdb0c8c18f16008cb1229d10e94dc29b41ce88c78a4f842880c091d510994d81ee8682d4882e94028bb539240c105abac3ad849800e54f64e59c2486d3204fbf141aa8a2078b0c333c50b223b4a7a006227c80425c8410a7ed8c1aa8813eca8a8e4109144ce67a1735de6439e2aaaf613d4b8bca4bc302717e6210f14848488e28731ae6d41779d063ed84bba2ea41c9fc6a0a093351185932898384175cf4b5e0d8a6446b82d4de0c1ad562889828b24dcec214f1460643bb89304ff5d970210454421889f28a4e0abecd46ad1894516513ee4c1c28affbca6266161097bc8128034fd134510630f1580276f1ad8a491541053f0ed30462048607c908b6e1a6e3c267ac4918169fac785ce570880cd00bead87f25ae276777777f74f2da204ea59f4dd03d2b0e7a03d3737377ff58b291c8883d9f971fae42372ce1e7b73de1597fd73ec71200e766a820b77300c8448c1082ad40ef60f8a9ae01b2a9d46ea258e35efa9a89e43b096721693bb3ae30ed36d7c08d924a7f7004f36409ae9da4f1d46cc9aa6995ec54fb7003c39163fddba28e14ea0252f5f07367d8e9a3ee1d00ed36da032f4d32fc0a7de317b35a9fce7f2cd02c53d72654743e7833d235c1f34b0090917fee7b137dd860a0f54656e915083f9e5222d2ee459417966c1bd8e5ccbe3e7af39949c0d3ab009fe746abd834c1bd874f99c3a8838b735ab7c5db4de81bdc9c91471b54e07f6a60270d89445cd5ace3a5803039baa631ea14b09e375d5f69207618ef8a226ae4b0f38c55b5dad160bab895b9bb8f221db1400d2f4c353b5814f40c884bcf1c4adf1d88b3636362224dcff6c1e7bee6c208e761113eef79fcdb5c4fdaae5325add02d8299531c470e7dd609a76969daba3b3113171f95bb06a4731363642b4094ddc8e39c01bd8a47dc71fbebd3bf5c59c6f175db9d6bb330c4cb98cf9e537f4e972ac03e252b7fcb3698d47fc236ad7a22af78341365d57c313d786873c4ff4fc0dedb5de7b11e106111316d0cf9d12b7bba577b7e4e62a1517063553217b1d811dcc225afea32fee08cb2917c31e9ffd08e9cd1d6171314cfda3c7ebe23d190acbcc31c7ffeec7a75476ec41e673d2254692444c5cc8512cc76c59d5b9067976c84dca59ce1d0e59b5587ee093e3017dba850e3b863be48e33c42191983172fd2eb9760b68a7b206999ff5bcc19d52abcbb0a923df25903084e7eebbb7068c117f371e96bcd891030fbf068743c5ca100f3d6153a4c2c39fe170a83ce9e99e286c8a613c7c190e874a941ff9c3844d118c871fc3e15061a233759ab0290e3d7c1a1c0e95263b7407884d710a0f1f86c3a1021464052d6153fce2e193381c2a4b726a8e1436452f1efe0c0e878a94d5b582c2a668e5e1cbe070a840f1c17ca838615394c2c37fe170a838a1a2b254544cd814bb78f82e1cce14263a994e1436452e1e7e0b873325ca8ff653854d51e8e16f1cce942a4222a1276c8a5b3c7c160e67ca939e51cf1136452d1efee570a61c5172952c6153cce2e18f389c294b725872a4b0295679f8220e678a94d5b632824d118b87af7138538c48b5a49ab0295ef1f0330e674a931d971d276c8a563c7ccbe14c71a27a5101b129063d7c8cc3990214242308e2808f33050a9b62150fffe270a640610f3ece149f9fa1e5101f678a0fc401ff9b43733583a8b42c9f8d628fe32b565529d9618f1d0797765fdce91cfa83fbc52172489f38a895c4a13e6540417dca7e2603f1e96ac234dca72ba769d8ebce17857cb5414243ea0e75026bc74e6495bbc3a62a9ac73c5e703321d70e1f7c870da20d38b2753fcef868913e32671f99db3e462e46c648ec63e4a4b302208ef61b88a39d39ed231cfd344a7a866213f790ef23df5ee41bc55ea33222df3e03c455f58e6be792d8b3a6dc2f437d7b86d2f1833bccf11c3ced78c2083a90b832ec91543a14b0811df8d4a292a1c8374a4acf0a06412b3e198a4dfdc964423222243645463d5c8127a645d7fa10bab4a2b834d8d09072d5071b9843020580a709442e7cae60620a8f85c485813d3abfbd86ee2dd55d047ddb58812b22df3b640d01bee1936f69628fa9d44803e242ffe28b6870a1478f5542087f70c76f02cb459848ea19ff75b38410c297ff9aa70b6db1b6ca725d6c644599a665223bc2eec55237ab85bacc1729a3219cc1107677c36410428621d110358b9888c25636d1185536d17808f3a49f413919fff21637218dd45e72a06a3dea5397b7356baee5ed65b1ac3996b7d6665973a3b722d15b51d69cf67664dfb2d896ccbadeb65817fb923547e7db195973f22dc9c264323031344412e290fe2078f6e8edf0ec91bba662a3db1b6265e76a9053ebc1c2dfc05ed7c05eafdec7b384156a733287434d0dec7567a10e66b73cfce51666a86a37734a9830ee177daa471f36f5d050c5276c927e33eb940d33852b3dfa8c1632647e00dc6119e68b2b3dea4cc91eb55dcc699af6a8498f5c5c22bb989222a65cd8837e7196d7c027523c42440897601586407f3dafa989241ab81ab8b89c695ddc8ce7899e9897524a299986aead3d6161c94208617c0b83ee077d2c1f6cb22cb71c063e59965b1cc35b960d0e1b5a6e59966559ce0e71587e490157482c7141eaa73bcc71d3eefdacf55e6bb5d5ddc526ec4d1fd2a798034833bd07457898f8e93a10c77c010cee8c43b5decb3fd37f7e3a5b9f971387f424bd8d11c6a65d1c8238a6bfe06e31b8a549abb0b064d95a99b684cb6e6f54d93da714c1aec9a4b858f7c5b79023b336851bdde3f835ec51a71e7b94adb8c11ead6153ece8ace1bc2e2e0f0fbd3ec51df4a9c7a61b1e63782ec970c69e89a2488443d438e370608fba572954d9d8d4d4789e5bdd472235bd813dea35b81fe929a99d3af5129b628c5083cd72439f7814d1c334f069113eec41ea36cadb9851a1a0cf2eed7e449d165858faa0d04fc952cac0deec70b623aeacd5eb530f48335d09b57656f7b4c3b9a4103a818525aff55e1bb85b76d1863ec51f208d102e7829b716b0e07ed147c747ba4ed71a85ac3eda0069a207d5a18f7ebde04a671485818525c923f4e4a5fb77a9a6634dd748d832ca08436fa9ebd138414f5143650b1c08dd1715643e6c1144932d7ac0c2b899174768116499a04513a068a1840de25e0f79b4f08125420b9dd72287278b1d295bca969212a124bdb694cd1615708ea880ddddb4bbbbbbdb296d092985737a49464ad9523657d952b6942d65cbed05d121841096e6cdfc9ad6f0b0f93feee1a4d894d4f24b8fd2ad6b669a68745944a3cbb2b58cb2cb32b7161796ad653a6cd97e722ddacd6c6ecb5e3cf6b229a69591cdc8ba3449b0cbaaf439397e08b339115122dca654e3acad5602ac0497ac96552965e2469f944ed80da5848d6937d44b322428a53fa54d29a5744e4a679651616157c5aefa951ebaf4da926dc9e6e85c47a9c38ed2ab4ed97133522a33208f5e8128a5341b8dae28a308d9038a1e5074fbd0ed43b70f73ce9e3967cf9cb307abf2c2ea0c6ac56620af6a0314138a19458d94d6a45c8c2dbba384424251831b5d4221bd9be443f481d3a935922107c7aad01f9073731590a3e3c2b42cb3d5fe077db6f007402990b0b854ea13628e46024d34aaa36bdd2b0c085bbde51aaae1c54119ee8baada52d8f45d191c7f476153145db75cdc359616b733990c2ebe4db55ba255d3584e22dd6bd54b722bc335b4a0855efb0c07243ebfd02e5af56924b2c2a7a8e39fe8ca7f36be452bff1a1cfb66f90c075f46a6cab8a8d8b4b9e5347a70bfeb2217f9e5f189e6d646c6c11c6da399461b5324c36338cb697044de7218cb49ade42d9fc1ddb05c06179f70fdd27d24978dbb5c26e26ad4c93a9545c3894da9de02225f43bde59f4df173732229200e6b057158fe89566ff9add955b5b406846061a974e306c411258fd66c472ed9481dd2d9b061c308999bb0b0f4437671a53347dad1d674b00124e40e123d526109f530749e7aa986ba0ca5fe967924712be6d469600eebd471d01b4f43f0ec1f0cd4edc5418823e6104557247a761b6f630daf51e3d911f0963f1d1f8339fc1f570cd631e0005f1d080fa8bfba981e07f87a8067e741086f614c8cd5bdfcf8501584e5019f83508a780dc21881628ccc3c60582141f6da872784a828048b974809cc378079c43e089b34c7320cc338731d6c4108a3b4c21ee6d9d0636eb1aead182fd85d6e799cf39217663189494c62d22f219efbc195d0067460af2da0efa020ec1f1d85ed8019420861175d07738dcc1ca7cb28a38c324a191983439f597035f4367037c0d505d8bb7470818c10058c27efc2439e2119bc1dd5ca2c3b07ebbb2d6e3abb85da0cec93cb86c417da6506447ca17df2e05135ad39c003beec78c0efee79b062db8046d72046ce43bf62a4a4287958823360a8ab0a580fd718971318aa0a35ec414a4730e79c734ee628a5ec600fac2dc912848085f1467663c4fd63f303c3c38e013aec261718580f9713580f580f9713d718d718d7d035c605c635e4458e175e44b7a607891ffdeae242f6ac9565226d24f2e8d6c8f2ea222dba15dd127196e5d19a56b4ac68750fe412f6e4cf8a7a64ef1fc3e7dbaf30ee07c3cbeb62813432db610758594aec59ce1e7b08ccf1f10f1f9d46ad4774dac1ead16377ed6897c9c05eec6acd223c310ad2481f7215e11294fb833f4eb127b98b39ec411b79c912d7c1d711f7e3a013ab9a463ae6f24af471c2a64faa765e02c11c75febc9c223e9db50318c741aa3e7115a6912eaf3c5b79295d7ae5671d36d1266ce21d364594476550355ef9a24f0cae85475c7dba3a46a1dab3f092c1fd113d0807d148e2b2675ddc8c83bee8c3a62a6caa3e242828a8d2d8b9acf2a4d3c8c1dd812e9d7b982382e21f6077c425844f57c72866c22836828f7416a5f460e16314f6a476c34bd8934024bbe07290f45a775e06bd747ec2a62fba0ae6e08139dae58fe8dc559b81bdd99b6b674c05f763d4ce8a4d3f54bae42e466154f51bb3fb4a7e51318acf8dffa24fe9bfe843aa1281b2b884ddd26e9861d8a7683a735ff6c12a6cfab226d39250884422cfde009b1ca87fdc66c4ad3f72f8d11dec612eeb22a42d2c9f5ffc1fd683c4ab0bc8b7fea4d1e46251739823f3f60be610b9154dafae7199e5d3f2392dd7c199ed407cebbb9e01a5b724cb2cf60dec850594123616b14a29254b295bcae6141399873c5e04e185cf439ea1282d0f79bc70f25e5cf1c28a0894fc5777784450e414bf68f29f0de2f982891d5265917a7fa8aa528448772dbb5bb64be43ef9b94422f148ce6432954c237e2ef9a9843d16b26163a8468d9e99991f19199d98981d1a348260607248a4d58c193e32645051bdbce8b8b8fcb4b4086d5b0f0b8b927b7346a3954894d2b49d2c53591b0473c0c71c3ece141f9803fee5f04548ee5777fa874d555e7a55f95020d9f4873d2ae55d482eebac97fe40ba7a21dc8f427956620476050bc2aa6056b020accaea7e36083a15faec6a05647fa4440360556c0ecc41dab1f9afeed49c3ef590af87b41226cf4e856abd974472f7bc9a9a489becb0c79d915efa9ca49fb3c39ae4103127505811824228e88b3981da85fe4a86baa4ac465e4869d9b22e9f2bca4b8e6d916fd7d1d29bfb2e22cf1e19306dd090e56c5da81faa57d86325cf463c7b368408a52eb4c08dc00517a8bbe0820b2e7873d40529a70b5c0b2db430e511f6b221199129f7a33d52e43cf5a156d8f45126cfde4aae3c5328d4874d1fd663a3b009f24c41c87f75070a9b3e39e4c3a6cf066151b21e980342b8034a6c47e5b3aa4241bdbaa2604c309d2b578f1236959c3f1b4495fc17561ec7439e2f9efc14d24a519e2b3951b1e9099b58f0ea00807c3dff2a15727b0dd1e2d2b80ff6a4774eb51b9a0e02ec4922a4afe0b60a358ddbb027ddddd26e68ba185c84daebbe1a80eebb1d003aa16767812b71333c977af5925b4bbb29552e665576310b882b701f5475dc770979768e0322dfb9af56a9437088423854aab0298af1f06d703854aa0845212b6c8a57025ffddb2ba6a1fe65d5e5ca904a7e83c60daed647d8a3fec9b75e848bb0e0cea6ce432d053c45d82b98a33a758781a91f0ea5bf3ab75eb9199bb738bb658722adc533cf5aba1f236dd46dc06a1f042348ea76aa544fca27f5935a6d000a09513180be85873c62ec7c6b3c349fe1b6b59148734d07db1f9bdbee87e633ba18854da2ca3272aa5197c1652ddc478067bfdc170326fa6c3e189e7564764aaad87339753ec24a58d018509d7d7ed79bef2591ac7f6efdf3380c05d7d278b438bba5f1b8eee2166a3cb873f1a8f188e9808ce980fc1c72187ded5e3cd3661039d67520bed57dec23b7da0c2c5ebb8f7d731dfd12c380eb2dded2fdd8baca72bb1f23ea41a2c689b8cc354afd83e1d963a84f2e1452149792ea93ac3495fabcb7306496e3218eaf704082dce731200eea2c067c817ae5fad4404c439dfaedd5d72bbf42b2d2555437288974d931ffdab10e8834c14bebd15d07e2d7ae76923d7a0de152ef55535984522ae4c219f8024e969f11ce9891c0b85c402ba0142327816824c2aab5221fb996653efae13a09b43b724d3412593e72d1e7517ee0136f8cd57f371ed6d8c420e2b4e999c5a65b975b3ead6e72d6ac579dd6f47963cd0e0788366c1687b273ca1507d6625e31af73cec99367f5895d6d6db76d6b6df78555eec785d9ac3ae695d33ce37218695d6631afb656c72eac5e953eb946fc4586980f97b508b18fdb471a1f3947942e6f01482f795e5e0ed9abd62b90f89ff793dbe3c3e91f4bbdb41eec3d7b66ce9e7973d99c33ebb8a7639c0c13f320f1ade7c11c994ba78139349722d72ed79cb94fa4757006fb5d0eb51e975bc79cbbbad941f64ad087324135aa350ab7bdab0dfd0ae3f6aff09087ef78e0187f8650722449922449922449922449922449861862882190204182040912244890204132c410430c31c4932b51fe3e671d105931212e642ff3d135ddb025ccc1a367a7d2c253fac950f6e20bd4bf49e397bc1b5c43af429aead4bde8b4d65a3de63022eea437766213f6a84b2dea14f15884d258843a57ae4a97ac8ad306aab720f4cf86b4823a3ed5e5ca904a37749ac6f2186ad85406e351bb2179d46e60625c07476e39a9552fcc669a4806d73f6353b5de4b221171d914e3271a0ee35fe612635c07ebe06ddb3697dbb66d9bfbb66ddb56c3b76ddbb6ccb76ddbb619dfb66ddb5a7cdbb66d9bbe6ddbb65ddfb66ddbb66ddb361bbe6ddbb66ddbb66d22dfb66ddbb66dc361739c6ddbb66ddb4a325cc6b7cde1e622ed66db5e4698754db4c28cb8ad2396176ccb8cd478c16a6cd648f682d5d8302333588ded32d282d5d8aa9159639b96915b639bd4c836a7111bdb9446b6d94644db6423a26d6a2e2cdaa6a4f1e585a7a4edadddc8786b3732606470fc9e3bdbd40c270292a921aaf2f7b6eaad9cd4aa1766334d34ba2c1914563099e5305a0f16de45bbb1281712299391f10285692c2b2693c1c9b7c11179cb6bc870a255eb54b1a99110d21591156666de380dc59ee51b11f7b3288b62138c5b6e85b089e4d65765f897c9b80dff5c68ac605c43710744fea7096113d4f8d4ab9c95cecc153e49144a0a4149229f3cf2332cfcf049a652ab99169ff16ec22729db89ec27b2a1fc8cb70e9bdc67bc8bf049562577c69b089ba8cf4c54d3585eaddc16f2332c3ee3dcc3a7e963cdf4123e4d958a89aa89cac9cf38a7d8f4e233ce283ecd7a673c5e6153f4198f52f844512820541594959f99f1b8c3275a55b7e767e812263fe3b1c94c8c9386ccf806f8444940332e039f2c140e6c0252c3671c874d403417ffa02a6593aa21cd38646b66c63d3e59a9129b80489f71c9276bc6219b80589ff119dacd8cea25aa4f1aaa692c47a5fa6451a954ea2d6cb592aa955459980a53c915a6c2b0894d6cce549f306c62139b53d5a7eb9ad7bce65cf5e9bae635af49517dba2e7ad18bd2549fae5aef4da9fa54572bd54ab552bd55554d6379ad2aba42f5a9a652a8142a857acbad94e5b5de5b53222055af48a47b57aab748b75a4e1ab1a0a14a2b74dd47e2ba8f34eabedbcd745f7d19a2163bca6c8b9db12f9a63a30c6bc1665c32aa225dcb5b2c0b96ca5a6628967acb37ac3154cb0c86a218aa31d45bce72bdac5a665674d535aa66a8aa5551f5968f2cec4acdd02bd5572a5ea9b75c44ff6b9f95080875a12ed4857acbb519c389ea6a842291aee5590aaefcaf7daa4aa552d5b8b208c43416500dfe9aa235d535c529cdc55ed74f457d9764b99513bbecb535d2c193e3972e1c3f6db635ba34bbb81536c5380dff78e82dbf5e5ca070b7682e23f596cb2c79cb6de4bce5964616351efc2e6eadfa6451abb7960b17a17427024259231489742d4ab462cf724c884bb19b37a8a4ec98ca7a162a1a080340006315000030100c07030291402c1c2aaba60314000e819a3a6e581c8983598ec3304a1103142100000000010600cc94106d0300b69a25eb9655c208f58e68684ac4e23e0f846495a05e319c6898b175d5c47adc846e10e1d11601b76b84aac487875f90af99f5ae8fbbe1c39c53aef800fe5b0dfe277474bb5cebd6d0c5936c510aa3eb0eea9dac0037324c434a63c06ec8b7d93933951bdfe50662d742202624aac919315507b59a6b7b2e304272cd4aab5f12996c47bf10c5457a8afb03a16bfbc94a0b4a519d3307cd80859784320616d6a05fd287bd85788ec84d1729ce54c4ade56344e6979567bbc8a85b894d6489f4912f39f86a758cf75a1abc953339a3b043ad07482540fca758a0b4c53b43163931f9f751db34af4c1ac2b8232a59b5b9477ea1c98e1bd56c834e911beb0c44ec000a7b978b95d3b53b02dc2db621b64606bf2fc78314778163cc97fc402673322ab3d975b760cf103946eb586be3860fff464cb6867b9c64ea01d23a36a5b547407ef8a52221ff722a8d04bf64de2f5d52e960fc710421e2c22b7dce348f571f58c53aea167326647018c3d08089b26ae5ed7fca79ee2214afcbc2e3c6432bda6c365c1678c219ed935137fc611d6cc9e48a386cee13bf2ba9740cf34fe1856409a9636312505ed34b70da66173f7b231436e6f5cc9cf180386452efbb49ebcfc9ce7354e2a253145c005fa9051a6a457bc4ddbce7530b39272508090f62bd025b6dc6f527fdb420397d60963256164851654f865900d53a25d80b25045e8577e9079bbfae8ec1fa9d96368b6db42240d6fb1667a9f667bbce4b67412509d1f426c68a51899dc0e79233466ba9a440101d87553813d5354e6727e98438da1aaa75a150c3c112b9756d71095251105dae518cff705db3282ec80848ad14fa17b0bcfba2c04fb7f576203e48b6b313dbebeb48dae5e743b5f4fd2b19f22ed4e2a7047ebe6a7afb589561a74121628b04736c094ee44767e6cce913ea23331dab7b3ae69cef731020ebd2b325fe2dced6b86fd92228bce83b955d1a0af9b487534250639310a875b47d85f3318ecc6f44eea6fe5e94e500d3cdff40159c0d9501a96f45b0375726cc93c60bdae907e2cc0769b2fe20084b8d0238e59987820550cd6c5a6f40dc3ac0f2c2968b6a003d92fdbf712fc39a50ae1e63449feca180c712f0d7985d5380266a64268e987c47bead48907eb3a6080462f01b4a1888d096a12d02a1ecd7318388648abdd90c0bd8e18a4008f43c70b3f50dbf080412610b4cd07736c664511862cbf6a1763b9e1b174a6575e0a9069402f99be8435f452b1e4ad6350bc656db4fa43d9a5bd87f4f12e90c814b2799f853a3e64bcd101d7906e67cdfbb256be7c9ed49932e1b805c62ce8cbe9b115045fb5286527a481daf444419d39ef72e1c3e351575b8ae93629eb3c8ef00cec1c4fe983a251b105242d7209386bd6eea397a586d43fd36a521ef88ff0f379f32b140fce5afef6f4b3c37d6912d308889795cd1f225b4140e57106c9fd39c18738b3910927cef3ee1bf0a7520850546a7ea0f59acfbe688b7e63d4bf11db34dfcb58fc327fffc03b692267fe606215fda51e32fcaf979e927868bc36eb27754cb0ece7dbe00f52537c99e94817071c178c6c04c37cfb34147113185dfd13e099aa15f9f7b96dadd019726ec301e9d5d454e84bb0f45218fa7895a7ca2f1e602ef26c21bf0b28628e240bba4c4892f7d13c68683bcc962a57764e96294e3941373af81ecbda7f212a4eeb9238fb3368fd9e18b4ecbae2d5c2c8967780a2324d80d68d300fce4c516ca459013cbedda3f9b033f8e4346de100264f0eb39f04044874e025eea051282b55a76975f2dcaed272b8917a53b820ca26b383ce57c51f6ac7e469eddb5fb0cd10660672b8f18c44e5f7a324c19fe4e2990ce03397a12e3945c03ecde2e0a58ee09d844d0da18d669c13b1ae173df587c3f2fecfb8e392a7ac2ecbb3d5475f07e81a2267e0052a8827877137df9f1b48f4a7eacef7599ee687d93e88630bd0c815ef7817a932780fe42cf8dbd96c6b9ef2bf9d897529cfbba0237b60e3d5bf7ba3fbd18f41e4a4272026fae95fcd8bb748edb5a991b7b2dcdb9db57f2b175d05fa61790bdd7ece55f7a7da8a7331854b2d0d2e4650bb140169ed070cc3df558dae933b305818cbecd2fbf0c7c09c55c0de0de22bc5c49248b7738820f2f7dac304c28262e2f426d46782b636c42010053a27f755e864a83bd867bb4a19ee1628bae0d6980af678853f0dec5a9f539f1c82c19e01c20ec926407c41b4c702d0736810240ac6b0d59ef6050842f6de94c367b318f9354842a9f18c4a843692f499eb3dd149b5dfff47c8d9ca4c66a6949a78601fd2ecc8b9d5d61039db2dd85a413bda2ad377faae49aedbb464dc255cbcb11432a392d854c8fd4d472d62facca231e17b9c40367894ab81774364ceb2829ece6c7999334019b09ac702a36805b2141cf3363bd36371289d947182f3ab4117ba9dc1fb4318fbf3879cffa988ad50f67e03bfa04055ee46f1a44df3a0050f162c01651953b93178d0484ec59ad4b63358dabf7565cffa0a13fd8f504a38b9360079342b7f6118c9e879d4bd5210740d61ab01e6cbfb63f7f236a4d899ecbc4eb51f48b8cbcc8557078fa079ec3c7b0cce7be0fd7886733685318c2d8e8abebf7b2ce66278c9b0246491b4f4cf564829734d68342f938285d91f5cbcaba607ee223c62a6319d2fed280a5af2bad9edcdec4eeb9ec12e282377e9a6ee1087e53188327dd8b74d29e2eedf4d34997c634d34bdb6933f1c2e5177cfe241a3a032431a93aa8929b58615f311c63e6a55e461e86c83bf8206de8530d8b441615e2ad72df519fed72c8c6d3eda94589f1c4c252ae516b3491236bc8d4c47f35892226ed2f4d51ed4cfa5bf3686a52ffd424eac8843f1a8d3226f97f0da2154dfd47f3a869527fd4345a70b73d51a2cd9afabbc66862fed4309a783b0c57ae789904c51a3991e3365e8d481e5fb9f2e6b73a7a25621020821064f41816609323170dd1c934df4860967733d696603e527fe4b87c35fcaddb63a9b5be75cf6337055961acc51c030aa03b03aac7a4f07ac2f560f494746f80e6613cf91a77d917e458bdad829fb97988978f3c646607a06b75a30bf78945457d64382295bd37eda106b4b80b5af10edd900f3748968b05c6439f70dc16f7ef6c46af38eed8335653f1d370c95129f850663289246ba97b08b964c79d95f55b8cc33b5168eacfc0a62b302e458b24baaa971d4055524b32dde5ded8297025e2fcf6ce847755f228308f3b36b27d0fcda118aef0dd014251c75828bae2557285e52b3a5bf144d02273a19f14ad1bd2b4894d9a6c0253a631619a29a692a9b93481425b218e46c9f48cc25af6bc6454f4cba0c677a4dbeabdc9a315f4c4d8a29aa494ea2e6f2736b4e0dbd9b8a55ee60b658a92fd2b4e4f920a5dbeedbfc158c5f06d239972a5b02c77f684256ba53020a425c64c94519a68f2f1571db0d86ac4952979cfba77ac2387edf4b111737f999ff99e480ac361ac929121efb7245fc71bc965e56c137569446e8b4d72cd7a338824ab02dda49e453d5b4fc647de6b995b96764a2d1eb4005290a881eacd4256093e791acb8b8696d6689f1d5e37b4f1c177ac05bba9bbf5ff21f9d91904d38e2b58200ffbd0e1edd5247d52695d6a287dedf82ba3e14f3d37edf8c75c1c233ff7079f10477c05f0a5082df135de1b9e9e0e58ce2e4d719f6cb5cb83cf8641bf4601da887c5b5d2369a700301c16127d5a3d37ce5c4dec0114da35b4db1608f152f53874717cb22564d202c0ecdfc86834983a12515c4de21a415fef87f70593874f1f10cd416a4739919b42b658dd106ab8a75bde7318493d28a887961903d68763717ebcdd20071a0968f3882e238d0c8897df013b2744b2bfb31cbd13a3927aae2402866934c5bd3de0e70b81bc5cea0e862a35fb3321ee5758d3a60736cf7725b20c9ad887f260bbb1da2fd864968a1e2c7ab40203670fbd5001b44d65d0618d5e4d7556178cbc7866e59a5d9f2aa4dda2099e56352eeeb3c22058ecdede1691e5798c53bbfbbe5073e34327b8e182e3b32259659bef439b58b41b1a31843975693f35620873ead27e6ac410e6d4a5fdd48821cca94bfba911b92918bed0d8656142fa84a74de79f2e0e5b3abfda8679738767ee2a26c93b2afe78a324aa72289038316be4f5d750ddbe8a21ee3db2fb351a03bd7d8a777c6ea2f3f979dc6697fd9ab1a04c777a712668d10a5a876a4b0d581199be88fa989ea7a219256d8477c03a92275bff737c0a12a97bc12dfd192b81606d478521f0b9c4b1ac9b7f2347109af1e2ace7fa379f4e79eb7f2442b11ca708c498c683464d11720e28e26c4487e41d81a1ecf621501c2f617c40093c8fcd2ab5971f59a66aa48d787c1c265af5f3afe6916cb07c969e6c48789ab4ae511eb7e04695462d8cfb27b1147be85049373767eecd5065fd51c858852e3deed21b73c092bfd8536f62ee12b78d9fd910b7dd9877a5709b25421e0e7a2de136970323eaff366062ba954a1160a9334732fc6d3834811a047540a851d50f1b95d4637957f8e0b572158e24311d115faa12bb1ed9b793c8180893fb3e4fedbaf466366daa7bd64044deb6b34d175fb0aaa823430f1a9e660e5c59861000cc9a4cbc6cff25e92e556f2f827f0ce44212898481c50ea12570937efdb8121b0aa0c20439e3829377b1f6efc30fab62492f4b5732572ae86d902908aaca0c3ddf6b91b50b0c5d892601821b9c135f07f1362fb2f12a22715949485cd22717c619453517092d22cdd8fc1d2cb2ae6bf298d41ca301cb65137def4ab6dc549baaefe04e1d85b6e4bc39199f61b3deb22e350d270eba3d8e5a2e31f5ff4941d072fb375e554cec5bbe6b163101165a8041829781906f2f149e767ce44efb98d8a730c977413c1e2fb9d51781d4292ac5205d8bb4bea388428b9252de79058316c166650fc4097842aec12edebeb5750f1d8ee5092f0a63148bba00ecf0bfc83dae02eec04043d9ebd9f06fc66381fcdb3f40fe99c0b6b377459d2825378856bdedb0b43f79ef5aba932c59c8cdc42e0bed6da848a227746bba9d2ea10b29bab142b6c75ca75ae3dd3d834ea66a4c83a4eca557497225c32de5e1758e9f8636977d748837e36fd35a704634d1cc1e2176d80664b0b8fb501ec0fb403cdf55ba622b7a724f89e63218bd65433f0e5ac5827d3c3731088d4bd53ab0a3aa8f73448f2f03359cea07aed5d141686cd7a8ca8a3a9e90b1a0073285132e6104eff44c21af0bc6d8e1d5e2efbae927a2d399cb8fd99658d47e5a4a7ff2a625ea7e35b5380f9063f2d9511b82c0a82c7f2474941378cd6cbbc50745245e677628d79ba54da6d73fd233a98f546a7ce8241ff03eea09dc14cb408ac28d6856de077ff37c9aec6d13191d0a3b13e8878fa8687701d9a1004b89e3e42f598b4fcd60f995a8aeaf912136dec2c3be0b2733e1e3bf1c3ba97a9dfb101130e8959143db4d5a8a99f4373019d81f13d5c612f6836bf91b4c2213b7b9927540335d234c0b2611fbb7873d978d85b31944e154721c59216f86fb0cca2aff5c4a1c765571ec311ca02317b07f049753b8aa8320a17d97645c362aa18f55188fdb717c65ab7e32edd231e29971b91cc0d752358d9afb32fb991ff7032d3b67daa1d8eb0278fb41388bc84f176cdbde87f7b4947484df9f2904d4b2229c9b2a383b91419048b8ae614d648d0c4b15cb8e5aae08c7582c30d87a1f9e1664351aa2aa484450476634da50ccd7fe8af77d57f8c82d7ad049d56d5840194401c895045e5afba9531b3376ad825c488b7ab27f1f0adbe351d52318416f0ffd0e7f6282af7c188fd5c60820297669446376315730f288772820e3720ea7741ab7f31f8f4577458a5d517976f5337cb39cdb50e56106f6646a49f11e7c1a8a6174ece44ae4538fda702bc1b03c44059ade5524614bedf9a6bcfd5e89c831532e8cdac7e61283aeff5bd27b873b2e711e1766e5c9e1d9acad7e03515968d1e941a3e4c1e1506e41b7d52ffeec0ee5e3f881e8dc6c150a04b22f56f19205bc2c4116454d432f9937a0f56a1ace2d58e6a14a4bf43c6bbf722d9e79dbc315e7ffe672276d1df42b88e9eefe387f8236d20691202f217b0efed377541de08525ad7c92e497bad5492610180ce5b824927a9397e695823deb14e4a804fc0ccb123198e99f29845b098f992d91853d9058da234a634fe80514a6b0ed9c5b0e8e9d4576aa33a9af4aecfeb677656915aedb7a581e0ca7978af5a29292a08407bc35671ab085bcf9ff8a13a6c11d1ce26beba21b874bd16ede1cfc615a465af3eedc93dcd64237861874ad3ec17460acce967c7e274f5189d245af48256e483f063dafdaac8dcc4e13ea80f495d6685f2ff5d2d8114d74b573c32939616f93e430f23cbf6c7e82a0fe9ae52b08da980ebefcdcf318cd41213790f45ba4b87343388560905bfb29126dc909cd152494d7d8611dd5c5c8d915b361c058aefe67f783ed31b1e933ecbb1b62d243fbc88d7db9a86db0f605c71c65b3ceafa3a77e2edd1facbc2776f42b9052f68b4f425553cb777a6da30ca2024e491273983188d469324d12615704e3d7f41325a38c096baf219d511163e4ca988b3ac38b51d9cf34ab375a28c6346db24a671f0807291741beaa03b5397b0e0ab7928a02f380d32aef023617adc84494df05e22048b57908d1adf2c148410880488207813a25f7b1e7901a919191b02efd81c734b366abdbdf4a0daa9986b940669b52c4861994f16c2b0136fa3bd9f2e3a15c91d7ab4069832109592aef432d2eff801489a9c5256ec31746ae815f40873f256c0fe39d6e55f40246e16f7eab753e1efe195e6143748187fc4acb47da69d8ab211418b052802681cefa5cae9e2c975b6ff2d0cf21fc6638cba8280512c12a94dcfa49f42b73bb552a239ea17a5210a0f0d50815a577aa421ef3f923ae2f21e3bb9f5e7a914ccf9169933c84f928ad3d9a3c7a7a26e0ec56813802e99c7d3752b58f62c4630b8f0adbe03f8e5737f847d426360d2749f8d17ed26426b01c63203cc09247ab3651ac4676aa483ac72a9ba35abcc11258e257f3b2cba28bad990e5a4faf416a5847aab3809a2f58ff82c9cd69bca4b879e6455003d6cc33ab74f98f5583421dd1c42bb00a218e7de12ff57a434406bb0e0c130af9d4086cc11ae18aacc17d7e61e0754b5d355af55e5ffdf781680ff00a12b15328689c799b1dce01f3dd94a690dc99c53f668fc5958a53d838006f31bd5bdd9055cef3423a3af4c236f5a4d3e4688a5dc19d9b46fdc105476ffdd2371ad0679cfa9bb730d0a26f5d91d47ab1719f19132b4711760850c0291e459423bba3f23b29be95957303fffd42f6a70074312709acfebb206f4d92430425ac6b27c9b024ce21337b05ff14633b2443e7c5c42bdab79c80983576be87c1023db4c209a06b4d45ef0d2c57c71aa75062e89ab43d8723f441c9bfb52c0c27039186319153c497d66ea360840c7391beff1099c26d10fe30e4c9264e31aca2a09f110975fd5cbe0118bb912920fcf44e33a7a58426736f4a93151b2338b9c5d50a87fae1dc512463848220593209046cd6df99ede87568a15752f179961db3abb26f59514f639ec8c4cd683157b4f4289c61023ace280afa8b4bb4db65c35ccc80507c124024101469a36b71f87d518986930046d09d2eb3ebacc08addc41ce5ad33ee57fd75230f9d3f1abe954a81d432b2530e49df0bb13cede7349b84e5b80644983f40947d95eed2192232be836919b0a63527aec496f91b5ce5eaa0e749392438da86aa4813186ff7298abe66ceede948e7b9733701a833c64e47ae4af6749044bf9009c7a42017c097552211876234dced57ba44a447bc5b275c1ffd12dccdc69b1100b87d093e00e25c3a323d6f07eff450ceb4691364b892a5ae133d1d3896a1963d65e73b4ebb1837ed37806adc251cffd43777fb346cd65bbf41711b07469a113f48feade73f732d113c41cd6a5c052ff1a12662b2b066036aa82ccde56e927e81104d82d68e0eb058235b9e3c2dc071e479acc8077800f94b7fbf0961972e93ba773e7daf1d1672c00597885e7e23fcf514062c7dd86ac541f345b553a2d504256e621eac9d4ce59a49347708f9eefc1d98b4e8e9bc538e1510401d8097e38287dfa7aed03b5a501b338c52e1de84077f33dc79f4346faf1e853b62096160aab3632eb40ec8006ec70ae2ce880ed2030a7f2ba0c54a7d311d12e34679b0ef1121550171719dca7cdb15c6f0e3268386e1e445a1a3ac042bc486f2c578dedf164981bf85ef9e9427863080217180828d8ef6a5c8afc9152c172e442eae7ea7d93192a2532ac846194f08c8083192bf1565cfd6f6eb63962b905265114168660df165b2048d54c92117bf31a9b82205872686e04cb631b8928a6bd2592d3d9a49e4dbfa2c46e8425531579eca0f1392ba3b58d013d19d09cd8edcae1e67730a40c5de15139cd0d22c0737de8df7f442f7ca3456d957f15da6e425425c45ccc8fd9551d17f737f4d6e9fd869a7d93299d8c0cf2d2f9065db0dee54fd6a353372693c2f8a214685d34ee31c1e406b387b8fbc0322979b58447d6f0cd8af9cdad28f114481ce854cb8cdd6d6f40821cb958779ed0f2818e77a2a94069fccad6ba6072c9aecfe731b85a58f656f7bf905a07ff9ab84bb63bb77e1567a7484546ffed0353e57887c125afaae024bb998d2a715fef2734e0e2cbce01baa7a0fe95d8bdca43991df89e30cf5b5d36718bbe818d15cbf649489bb764fc56cd9cf8c17a50e324b7090f9f07700c193c63ba59a2d537d8f1eb115f9d1ed462f4c419efe22b61af0270b7ef51e3bdd4b4bb270e34cd8b29ab8c682b0abce2fe8698a2d22b5cb829624ba0b3a585574666097492ce52983905449b2d2d3e4c413049d99274eb226b60d6591c418772471f2c5eb236cfa2b8eb7ec69cf37ec017726d90f44c96781eb3eafe0fc311b9fceec14eb6437cbe61a07ba25af4e84f286429dcdb87239b495f4b8b1892751788a3c271f0bcdbc3488d899788582f7f1febfc6029f864a3124ea6726e7b7e2e262f0e16ea6122578b1c323aafd2cf569eef4e21b37c6b5bb3f9b2d1d2cc4a6c3e9fbe5bd478fee5155af2d99532a8096073c99743a42ed0833eb25e74fff12b87081c1cdc294163c8397fc526dd825233850d70259c6427f6278189fa55942d7e3e47ec997007b8a3b8727f5cd0cf2017a9205af757d10b8d02e6d7d1530392767ea4208095850f1ac2d82d2f77b77739784b90efd11789c62feac459d46920307f44ed277f7ec20abf7feab7254d8c9518aac344da1c160b9fe490068a9fa4cfcdf12fabcb0ee12928728fba5a551311966377b3137268f3ba152994be2403c3933f2933048338b95f057f3a46751cca6e76331eb666f3b31114e8a76429d9c9f2e04243adf9f08103ba59b890f78629f13f6794265c865b6f7204633ade4f3f6d9a26566df34d521482bccac941cfd6045297529d3432c33db953403f0d7e393b6265f093cd9c98729bac18d443092d9e6c36479066a07231eed0c6a5e5078b6f09462f091e6ed4f20481439248b2030274d2f7242cc2404da35f83be6eb6d778699169d7a2892a5105d31faf1a3da05b4df3ae896f12c9d1a1b94ad15a999758e760a68dc03e915e92516d9c3acc03621af69893a42d3e2ca3fc32eebf2e416624f43b0e34f133d74878f766c306704fc5d00e582f50b43546f2031f4e9959e50f428e8f876ea944b4bd68e619c619cd482181d47146e75821c1e814b143b09c390060be33057612f12532c221d23c61ddcc2f18d49dc4f88f16640b991ff5a3cb2603f9a8f0b12e03ebf7102bf389a72387f12c318fc80e91bf12036f0a343c810673d895e8ed6dd9316605a11b8f281c3f61b2aae97eea16e268516e74d292680c97e2f2ef7892234540852a05f9abbe6623d5fc17c3a07364465241041d77cea9f1bf6298898c877e3a5638107923038f1e2a4dd005210b04a095dcdf6a15df34b3467fd93969885a0e47000f2e0f79dbb38e0907ed60c5b7ee06db84d60ce03e10c4257bb2bf333cbc450f60c4d723cbcc934113aa118722934a8e7c96b6080c814114fa681837ec20912cb9369247dade3cdcb1af280bdc562c35dc69c248fe2984f93f55da19429128031f16cd446c5e94938cf1cd1dc3bcda1a20852ae7e391d253dc9c639c7f13238c8feeac29d79c2c16a89ca768b2150b7ed5c674864cf972aefdab53f11ea05e5581b30be53bcff361f3161781ba6e7d0962212a09d867a9416ab044f5e40c4f5277d566110d2479c3cf9675e5d34239f37e2e0b539dab41247c084040d5ab9149dfbe862eddc3f2a4059e38006ffa8b41e518707bb314033d95cab29ff58399b3852bf2087943e35c83cc39c891ab942dc3928891067a6061a5d21f089b8bf5c2ff031cc144af2afe689628aaddae3913f15492d177c7752ec9e3e1a41d18424679da1f674c974abbab73226a76059a2bbbdada3b3509eafb888b28b68b1dd39b15253f26bcb435eb5ca93cf5c57f2bafa539e05ad93d7df64f2d868497e7f21e5592b820f3149ac7945f9062f696dcf0bdf4c78a5aa3bef5869e13565ffbc25ae9d576ac7f132b52fbce69ce5dc8bc2b74a4f78ad720dc8ce107ec55ceb35f3a1698a978e2bb86ea53a679b88c75a2806b467297526338357ad8271214c362273905ca4c3c4252ebe35b8bce90ea52fc5c630b328aa0a51112e0e41c5c866f8bc0bc7868092936a18a6896f2f9b0c1d3cda518289e3cd1690bd0f67d497102a6d8f4177a84f383ca5d7659d11045b3f37fda5554278971a569651d9aad5a1e84b8af3ecb70bc12d50992586c2ddd0638dbb4b271f4834487ec44eeb69d47bba4776b03cf852f5eedd15f40b8e6b3a527eb8a029d19d2a3fbc4399e6b1398d2261b55a1782fe1aae8f9b1a22620b097adb40b699affe430709ffda0f5bbb34368dfb6925ec92c50e89fa050ea09ca9b4ffe62d7fd24a5fe3d9de044c14665611a13b23f58b652487d359ef58b63177819e825a0c8bfeee14b5b130795b9e43db9b6a4e86a45c5d0c767faced9d64c298d4f7471cce09400931ebb43374816e4ed408aab6d70abe979f518cd3e35e937a9447c00933c355f74852c33414b6774eda0dd547e61944cdf4e9a20e32f778ed89c05648607b2d8380b0dd7594607b2dd7e2964eb787e62c181ab6d70fb497bc6261607b47f39fe237898b3f5076d01bf7e2f38bcd1d8964019050b0ff900fdbde7017a7d719e1523a01f91c0f3c3356718b51657882125355da23aa3dbcf50891fc545174c5240634c63f91909c614b86465b6617c0a5928b766f986dbcc8d4be18f452f14f54c4868ac08f41e91d2d6c22178dbdd86809f445db19f17a97d8c9b3ef62dee7f0bf8166c6b92e4646f32bf29b22ead329500f4b71c65c9bda882a41825b884c4bd9c954652bb1b24694466dc17544844bda6c180c89ba1aaa221f8de13f936e3e1c8cebf4682ec2535da5a5af4a80731a0b8b6564eaf0edcd56cbeceb883f97ca2277e21a3a644574a7b36ae84607ba7ebbb92ade9e0241da8cc2be896e91a3e73c09786be37a0b09424a4710000f824658f111ced3e155743bfdbe157c0df96b45d7eaa27243118f0e2e6c9cc963ba96869fbe00b76a9833748b6d36b5197507bf80c5fee2d53ca4e3b1bab36b3d2ec8ef96070d55b834461166e8cfdfb260fd542e1d7d68314418705e9befca49019ce7bec02342bd2b27da5a3521c9c199724386b99ddda3e6ba0d25686e60b3f0289d536a047046dd595d55c9e59de99a8258ce3beab30f7347a4b9ec467b1e28307570fa2c19e8253c3ee0316d77829a094b016f061b1f6b0f3495019f48120418b2d9a46e5bdab5f17e3be9dad0667b6ab7734b1b35dbd2a68d37db48af9d76db51bf9d7bb201c24759036f1c9022c227c4a4603d0d15ef9523a073e1aafe295f5d2d5d5a7859602d90dc53c3b87abd83952b823c1e7a00fad6dad8601b158c55616514a910803f0b9de2163bd748d0a5fe9218030f77a7ebb8ab501546bd48e0d98678cf044866cde6bb316b26f4ddcc81d3535e95267081446f0dd5ec101771675736c0a1e6be5430b3dcd32126c194d3448105ef1530cdb4a64bdfff73a5fc78b0600cd79014220aad1ee896932b4d245b07ddc33c367ad5489310aa9ff6f66fdcb24531ed6cd0a46a92fbe9a8df8ccbbf893573cefd708ea9f735b9828f0ca3fe780404fda68f8153a8530f81f5616ed8581bd4ae650ecf8bcaba6b6a1188c1700987d879a9bc22ead8f275c8cf22f998d12b524be90374f3dbc292c1d8ccc3c786a4516f1930488140979527e1ea8abb0217c4959fbd0963efdad7c2bd3c0c651154c5c09de547f2a408bd6e8e045b982f01e4ec30701d87841d5cef9bf666e51504c28cd0634f369be54b02f6851c4d63192f9d9794af44eadf3cdb88985a8b1d073f90ad7e0f0cce79195696fd71ccdec5c3328d85600fa79337a1e9162961568b3be00d0b3630fb8e1e9c66f503e2c0f12c4271d258a15c3067e0328b24dfb2802c52b9011a9bec1f90834c016a24f0b65dd5cfbacb284d9015a6f418039e55f348258ac25f138d4300e178702d9aa6639f2339426c75a32b984494adffcc78a141c258026bd18b661236590eb00a1995633db766acebb7aacba7adee03aa787dcd922c3872215a7e582712a45a5ee3a3a4a09fea37a0e710a63fa5a4a025329177ddf719a36c53d6b96424c9ce784d33b0305c2c1d4ed6298a6f450fb0b33511f0a715846860aa89460a434eb97c9e1570f4c5f4472d580813591a3e6e4d1d389c5ab41dda49bd1e7d5a41796c5d01ae3ebe3b1ea8ecf9a061b95920f48007ba435955442669b5324dd6e4aeb0fd566a6f8f99e0cd336854ad54925ee356ee4531e43675bac438254edd9e887e76dd46fe5b0b549fa4ff018f9b0058ea387913c8655e70afe3bcd69626235012815a8866be3ce73a0dc945c3e0d96265e1fe60891551a8708fe89e67ef591fe02813d8aa1cb38650b05d3346fcc26dfc20710020809039cbbc12c739fdcc3148fdf40a89326520c85b849e77fc2c655cffabbfca21bcc4cbe12908bd719bbe215beb58dbf4cc7ff2741be59ab78e06fdf2f250f5ce4803745551860ebc28a2eaa4d3b18cf2d7cef692127d08e74ba87fa6764b8dafeb077a5594ac9c01fdd1fb63c7fee8ed4fcc3cfbb1532143980e8efc029d69be4738ade1f27d05f03f3a58c4dd683c2329aa76dc8eb948d9f852def413353a4dc79ddc7893a5fd6e3112c5b8fea7455d691f1e03985a5206d65e248a7abe304372d2ccbccdb5738b9e89175a69995b6edf09094a5551b907f8a813bd67cb6b1eb17c16324e10fa99f829101a1671d32c4e74519438f2e84985c4a1387f7df7bdd65a191156b0d807aca3d07ae9e58230402741230df904ee51383f5541010912df741815fd94850e6a6c6884bc283412609be42641d292651038bf3c1a1d1f7558e31bb43bbbc065e29efefa29fa40f73b8b2c983b07d84eab4d1174f9458c7b407d7dae5e35ff05e3874c3737aaf3c56d6f961e4d783b5e84e76b1fbce3a5593b6668e0a50df98092bd0f8bbf354d0316fe832c402cd7ad51ede1754610c08db67212861f68262e154723cdbcc5ad0c25745e8a387cb51f116f453f1e3dcbf4e3e84ba847485f234fd935ff5810e3d63b631776b87f172b4508c3d73852176e6007b57b450e24749f9e1ec39a5ce9245eb2ab2dc5c36352a954108f8553f0e557ec99f85b70b91437d97c3559ea98746b4509fc8a368e72912ff5bf275a792cfb805a143996a64d79dd3e0b813700a19b29347ccf051e9df3f4e5af024cf1d939d430ffae2bcf0fa899cfd6c4a3fcab7eccccb8bf9a2a6b4885c9cef44257c8a351347601bc933f7c12b09e395b934e779548fb422cd8c320cb76e2a356308b583b022cdd457011dc40b0a07190a83787c0d442246dec185a4033e1c4cc312f0ebfea2fe021311847784a7d4a806ec1c527608c605f8c11582a63a487292b2f0ec647cf30c873c93b6318213fe8f81bf46d96af3aa0f1b02a740ffb950ee81b56fdc13a70334cf0421e44f0ff49c1b09abc670cdc1116e215e3a89226ecb702b756d6984d860b61499aca62177371e4b0a23c66b0224e326b987deeb2db255dbb1bfe2aefcde653e1bd5264b1d9a1ba512d4e2fbb51dfde8d3f30d96a0b583f96d75a1e2291d05dc8ad4bdce0fa7cb48cc6729b9f29979d693a24ff444c5e3e656d1db3e6035a340a2180dfe1053140e82fb0b3205917bb0b64079678d16ab1f9fcd542e0f2a275a46c363aba7d89d0882d061f32cb051602945ac80c33f1bd71b30628d7629102a68a9d540aa5213a85088af5cadcadf211721738460a123fac603ba01290e011228f0cff1104a03b7ecc4d4cb4b420c6dadab808dc9e7490123255e84ab620d689fba95347719a05cc5b1cfb2ccd33e6d831db0252d820f95dc1bd5a9e59032e79b00e59d7fa084065e1d87c8830f0cf33e8c5ab9d6073d9eb614888c7c5b93f745dbce9b49313ee181f3a54da6083a6af18c1a6e1131d92319ab70fe56192aef631c6c534fa48be91d66c9934ccb988e6931ea16b491133a6b07dfd393fa025f70041b8caa5bd276dda3c453f615e400cb3d4518dd79c38a4c162c8f2628b9f042bc040dd44b99ee1a52f9ce2116d7c84e3780bc5af73b077d34f681cd6a9827cb2fbd5e22dd095e01153fe7851ea17b3db6b93101574b7c86ebda8616bc7c0281ab15b269e1d419bf7add0f6d06a2d0e5b5c62027f7260b3fc009c135590093223f545f9531453b830a8d7140dc80f45107101e6e053132a5075ac3ce555f5a5658a12083c0fa9c3e6703ae0a892b1b8745a564af7bf248958fbeb3f1de221b034c4d5fe501027cb36c5101fee27cbc91c0263e4ab5b4fc93787aa5c458ea09fd8f68df071668919756e984c738f729173c5886d4fe56b42b0995891d4e00bf8a661698b9e761ee0a8205c4df947ea1cad824e55380078eee87febf65b08ece56bd0818f6a8cbafc11a0d4f17c759fb3078f6fb7148e4b0dc256f94e1e476989b61334b75dbf9a109da4c1d07da3dc4bc960e9413c512a53969f2f4536726cacfb2abb694af43e3f5e9c36ea8488c7b950aa998dc60b248821ab921da98adfbfbbf9aa16ad6156f904c2f6d023d236590c9f8c3e35df07b5a29bbc3c1c5d539ef5d114fc605a8b27e98368149b828b476113b2aa0df24cf6886fb2641afec980542076e853cb09a2e8f3c241d70239c279ac651b5cfbed127459978c1b19f31b728e97aa0ac5d6481f89162fac3f56e8ac1b23fbfdff49814af6c5738d7d38d158e8a45ffc30f0b160c6e032851d126b11b03c6390aa451627be43230b2e2bd7c3f5a7f7ece5eb46a49841b905014648c4d5163ec80e3780b45466ed3b6a4633d435f5a7d5676f8608326ea91ca4117b058715121b2fa42ed509f9c348cc39fb8720924073266c0a2669cfda8a1dee3601e34e6ce688b2eddd7aea6979392ceb8e9ca4c76fcacd171409e7aa46d77850c009f81426b92c4ac67d60b9e94666bf1923b54983913a7962241063dcb22b2a64c32b10459ae9fbf1eeca9706446719931c22a31ad6d1fc29ce9ace793c1f2a1f26a48533a95edd974918b03b6add34fe4cdf3d7a127b0a5e6d0c668db20a99ce7762171125c9565007008bdd111d7434335aac4de3b37fe228cad0353fb8731119d808c1cd7ed0493e5d4f7df69ec4ed885338d377a935805d5a031878f24ab51b601f0f062cdc4372d208d97b81dd6efd1942f575c08136ff16887721f2eabbbfa51dcc5f84a20d7fa12285122b595b7022d7160b5130436273fbdfbdd345543eda413b35dfe132f9859c57a3631c75160ec0e95e962e7c63779a941b3d614c0c2305ed68cce354adc60bc6fffd0b06433eb503dbd13bd0b10532b0581eb59d78c0255716075175741d6902a944b5c4db9fc959828acc6ea4f5f4e14f4115c1767723e62a3e3e3d13e9917879aa8a1bfb99c6ffa15910d6a4829cc379c623d89d28a0c226abdbd5094d8c6def76ecaf92898c8e233c1c23cface19727e6fded45be7f624084080cc3ea0ba2a2e08670348f27662a2622e292dec887f5c3bece05ff3d4ec452dd9b44b861e2eb667293cfc4b733b7f8fcdc99dceb139fe56e967b7c40a63416f3633e2cb31cdbf8980f4eb74a9d04b0dcf0e7f6ae2f3e46c93a2eeaffbf9f002dd0b99458aa3f820a16adb5e183f9e41fd48b9d55360e7eda5691684c634f85cad65f42721f954cf24540e699e0d6c324aa6c1f9c5f172f41c75499ff927bed3b04a2a64978f4cd2c01ceaf1fbce867fcf86896fe5ff13b75f89135973de3fd7b3cc2d75da8d88b1174b692662c6f0bd702262dfe1c5c27d68e13cfbc8f79c2ac7f8451d047da6d60c0389f73675aebc77701163f458b5136262e6882f2ae16883efe0c762d2854412e0efe2b841e978cc0b6f5c8421a312b8ff8562abe2c4c77567d574fc43ffd289533cfca723a3ea9248c7fdf00a9b005f34ec807d0d024b69af58ec7d55587eabbfc144d420f164c34a54e09df6537111f2285c68210d850513030d5b22bc4ac78df06915946d3a497b2466f70711050fbc8415d343fd39eb66f6b27c65eadeef9e1a76047d7985ff8c0d60df6c9435d6f7a0b0c0534caee1baf47be214d4deade18cac0db3439bee9a66884276087572373cfec7b8a480b98d30dc18d8c882cbd44e77fd54bfcb005296ee33a3836791183297add71d7305ec6408f4ba6f4026f08b7c0d0eff7950695fa25677721e85db1959d26f1648e87d2600d3a9b4602512249fd45f2ad5b89120244cd4f202a21f47164ac47ec17b05fd876643dae535c05caa1c0a248e7d5b104e5d6475b5284b8a94a99de6e33952f99087aac75c609ad0848948aeee9a51d14f93e6f3985fbd8e2c45c48b052a7cf11fc2162772fe556a1fe2c25e11519337cf20af8b2852abd3a778e167d8c50842c8f0d007325a0504deb2e7dcab8cadabf2102858a5c6fd1f436e45bd8e274689717797b4da9423d086086c17584764602ae08b1c7331fb6039e77b211136c9e4b741d5cc9de19b63349e973571af9d95b216568538f3e402b3dfaa850958842f3f12cf540e2598c8229269ac7df19fa493c1eae10c183e6be01345e6f20de6e8a1105aa33a2d4bc9fe8a09a8ac53b81a7d24a8aca66bf719ce82d8f36f32368853dd3180ffbf46e92f2816cc7ad03eefd5d19e095f53b1a50ac64d1d2e0146cc90d5a4e9773d2505ab4fc64f1b51ce97df6d1209347a0d5ac562008823b54cd279851ea9254a8b402061142ddd38153748cb62414de7066e80cd081ade463b63c2afe9baa97f20360967e21f7b4b62cafc920c880265269db654dc70c561dac2a6699e338580937de0062c750e3aebfae6b520c7f95697d9c0079f91fb993831801370b307849f236dc11ee28352853d1077a14d29895c04352cf431b34004a852e05eee4cbff5ebc970ee85c387969a05cfb0dfce42977cdee44d34a3d2620fea280116fd7b223812994fd955bd5286ed579d4dd22c7b07f5ff457f093f2cc74b8c903401e05d097c4c4473b2f5dbaa88bb0907aa3487a9e298ac72f2457051387542dd9b6c4ace4983a3675125ccda14d938281c8ea9f3f6e784d2fccda66362afa1a605454853e25d0ad2c94596802fa16e6047ec7077a47c9d96928ee1df5da1f1e9d20c919a94287d187eee3d933b574687e4eaf1f0326d4e40895228bec9fbf3e0466961b9033ad6e5de01a2afde9f0655911cdee78e3ad86ebd011a2915ed980769bc93e9a5d7f2ec34479b85f7b8cd0c70f5269d431fd90499879aef58662d9208496c16aa2c28339c32f2e5e6ad57f3aa8c8920715ee9328b5144251269894354d3f331992581b3f04ad4213b9c8f2429e70ceb4c131752118bf060f1518407930cc428046826af2c8bd4622aed42aa06ec24a48fd20c08210592c2523f42bb257b126afcc85708f6300a790b983d19336d6a3d99d272a8c6d051deacda00f253f874ee272e22e9c52cf944e88e89917748fbb8cf23a68a50145026f8547df3245382a0148d621ca509277a587e8c977b92352590b3184ca8481d8af0c9633a7c27c9a7b05cf17a0c263f7ef98af32febac6734782eb8879f385fb756654eef8970ddea732f2dccb7e77ab1ca9a113145a49fd39d3c07f3287594a6d50b6c3ace53c06ac9d8dfa35609d78469999e5e995333a338dba55c69a48feadcf2d48c3e72b3677a1a357497a8c35c19991f16ea6405757a96ecde517403de7df23d015a59b468045c2c34eb26ba054e5fadc9c86497e42c6c24a94e83e4af8420e09333704905707b71d71b7e0f3afe016c0f39c6e9b611396c7d7a458c5ac799a3ab8f0d78f131e7fdabdecfafcda7b12120e4bd41525ee0a335a0124fb1c80d5d0ea8a4f2195bdee285becd0c826570ccb0d848e81654fa81f79ae734a391130d3bbeea3d96c0382843300c8f36bc79d3555e55b26667db39ff20eb40d6db43fd1d75b10b6b7f59285f3294a499f300042c87e634b85eb9744bcf55303e508073b6a1b024972d9a62938bcb1772ac84a400f1f3d9e7ef6470decf68b4921171b14430d14894371d33fa1b598ad8c534d31e1040262849ac69fc85967403f6bfdc58359089ce62ce5b73fcd4e41eb188c77e6e83e7e223db2989a7e187e158faaba3fc8ac89bf9f6554781ba11af2caafc584f2ac870237155d75687499a90241f4a10f1593aec0fa57972ce17a43e214f3d527470d419a423a5da8fd9f12482d932423c3ada70841962549653f9cd8ff11147fee39b1cb2cb51f4360545279b99b0b5d74a774f0d280ba50c0350359ab9531315031ba98ebace590040d4b88b171f2c695db9ad217c2aa7384deb02ca3eca1233fc4346e6389a7e3c8deb2ecd3881ad150d3ddc520c9eff74ba2ce160fd7b87e139391b0bbd3bef295d29aa8ff5ce62c74f4436ad1018535095df0b9e7326e060fbe9a51da6d4cf4cdc09589c418910e218a5cfdc16322f41f93c0305d71e3e12b4d2918a9a4d2809481b39edee3e0b1016609aad1e9a7a40a466d260a490cb0efc4b9560d5104269860a4b72f8e9a8713fc0b939376db79f4b76b9960b972a8d0adf774c480474ab1dddd909847ace84df81ac447bb127197e4b284263ee4e40d76215d0190796f6e3b7261681fa0bded6a91c0d35c68abb65e6d127dd634af1ed60d4e3d84d611dc9db2479a083aae1c6e5ddbe9b886269d9d025e5445f44c41cd8b6096c12e14aa0a38e8d9b67852b05a4b57631ad439e3c4a9689cf57f58a7e4684a75b3d2042c99d85dbee3ff322535ebd06ada0786007f79807ed7ea9d4e4da213e5e8571b4496a96f1f750246ee24ed428219c5e5f80aea95cfe9fc415f4a29b3644ceb54f7f328998064d30874d8697a55370c150586e20e21f86e004213329ecc9b81d06714703a1513dc5ccf2468d59f1ad6a392a62f57b468baad136bfba9a049c6b729ff6a7d04c36e04af560f9262064ea2488d89a8cf7926f62154af400e634edc015394ee7c4b1c99ef4f256e565afa97b678be8568780b78dd32bfac76a7a435d5334edda7102687e504f5dc5870a83c1b24ae837e29077322fa021094f5670b9b8725f648c308672a795a50cfc0182cb54105836d51e86fdd0f883a9312019b1a66a3708a3e9216cfc4e81fbbe465274ca5fb044bc49a4bb264b5f320fcfe63e5fa0962475b2f40423ab057ccf3cc44b07850b8a2f9245471cfcf0f78a6d97a198153f40d11295ef2637669a1974d95f1b6dfc5d488acef79f25e0b079356bdb0569d9df9139af5fd30749bf975092849699c4829c255d31b629604df9293004e8534f7c46297059a89a6ca61dca7c14d0c7d3a9341c1e66cea5f1129d6e69a05a400963cd554ee43534e2b1473003e82c09237e651c024381ead16cc15d63fca4e6fcc71795f702e4a3739df985fbeb92d009b8ad7c65d0bbd4627f58fd7a946f1fe6ff02681897e951d904651aa2c6cc6df814549179cb0823cc0344c7de49b7ad2c0db0ce8ec1d978934b0bea4c886c27e54898e02da7069ca9678b0ccab93c740e70fef8f01522ee00a26c7b57ba7da4c50f5992b62b401c57e8673861e507acb1b60e6ca9356a068a85338f12c3be94faa58c9a4e787456423c77674d9bf14822725caca176fb957f2779d88b1cf21d1e01d58f0364274d5efe6625b3814139c3e702730eda762af6bdf1995bb4bd98b4aa874385ada30331cc7976bf3a50ca627a13d95be5bb8f2b53366f829348579948f9de1307d610d9e997260a7703f7d06b052156fdba1cf052be7b23223415f15b78da08f602b4e62b45532a4a1ab12d3d6c067b41521f1daa264b60e7c6fb390a4a1bbece5fe8830fcc89971be43c7f794f73de771b983c05e2eb7e0c9fe4970a53b343b379179e4c1a41ac6cb4d01025df8fa1fc1220e576686af1b88e7876cdf072229ec6da36ead8f461675a05a55840ab2966f0897f9d791131b25a5b0a8adf5e4349515204a88118f00aacf1f3b125b8e4b26d5cbda337f9af0186bb5a08f27eb3d8c70af6fbb81273b8e0d9b261d314f6bf1eb3a6ae1174c8ca1d2b8197dc17002c8449618b105d60405b694cb4ba7886bed487b8672761c9f0f792e98e479dbe4dd3df6ffac727273d1fde13e8373dd7d0ac919fa0f61981095df3f2bec7220aa2f8e22dff2e50255b2485112c693672190ded8dcb46e92f271acc1e736d3d63191003aece2569c9d188b63ef00e5c99ebdc831ca917f02d4b655f71ba5b285efe5b8f2f6644038de8183db707269aeb4a9392c498710c080404c8e99f7350c12011d457a1d13b7db7186ba7a6219b766b050b4b853798ef9bc728e9048f3c3d2be80b4714200af343c056c38ee00195d806ab029240f0b1bb697ff015917395262475a8ee43c7f2bc64e69c0479c72aa798ee70172697b61f27aca9b18e149fb5c5afc95177f8106c1fa10bdf60fb5e651def1b0ce64fa0fe5ef03947e9b1372266d2164240e62e7b0b3bb1a0132af75313f75eb8909ce8333355e542dc627693b28a060e7cf657c3cb43fc9d78d2a8ea5ac89d515a08e13cb05e1dee0230f536d985ccaefd6c3c6e50c1522ff575046e310f0629faf94db39bd2e540855be8a73ee44b955f2b757348e52993402caea0ac9a82b68a5489dbc5c54a6a251e13fb4dc65eb7b786be06b40149b38160b0fe20172e9475a55d67115664a9ac0732a0fd9914b15b1f507634a658bdec8cfbc5727492ee27be613baaf50a48acbac2fb197cfc7a24e61c720d08b0bea10896d15235c28b7772f31de60db83fc1d7203b81eb6007d23ad5ab8fded815ccd915f0b1f2e711814f588ef22dc46013ece85e383cfb83b12fa0ab8e306e39dc2686c055b396e255db22300a87607296e51648221093917c4644ac628e4246120e6e0293fa78ed6c962e27facbe307138381a272fba798792492ead296e2221df76fd276a91c86a69ac9cfc6c70da99ab5886ba7dc4ccb1a884cdabbd60d360eadf164e7cd82db1f4dde7d041d2c8df0526b728275128a0a4d583b3c1cc1ab7f1cbf24b93094e7acd846a25516d2f8c5fa7a5cffcba80f4bea867d135dfc7838f116f3d3e9e7d6fc48525ef0d6fc23a264bfe4cf9a0afdd31b9357e62ed6c2759a345c58de7b53856c8a8357a34af490f97c3add3f52365731d45b4f1fa629902804f7b80ed27813b303d3a013ae2f7e268dfc8dbfdf06fdd6aaf41c992d70a0e6486b72937e4160041f013a2eaa589ae333eac2fab08fd57f54e8f90241db17e960ceef047f4742278397dc9f666230cab0b6f1b5569bb2690dcc5cd02e7edb95269690dc924e96a3d23e5d79df19e1a6275c6721881356b050ed8b16df9bf57b51b3f5d87eb5d05312900839ba080e6225bb781f9d61ccc860b701b1f17b36548074b7c6683f30b9697033f06011b10654caedf6d58a0f177b05fa42dd64fcad4482d2dbfcb959102efb025750fb5211c596c72d7872482322ec3c4c4af4013276a073ab0cc92c1b35c172cf1dc5ca15c2c84bd2bba33d3d7559a3a10e90e5a7c112941f02febeac7141eb5274c0f1697180ea4b5ef34d7054e119ac954631983269428e312fa1f7b47eb7dc5348e310e4f4c3a1aae9009ca4bc69264ceee945f91c37fa9282f721e60aeca9d7b66ad89c21ece2a99824b438e03b1d948d505a2915f64a1af04aa9995d9843530fa3f21080ad51191ea479846a4b13ac284030300ee86061f222ee7dad9855433259cefb562074cc6d971863b46d01efbf1c5dbee7c5dd22196bec5c9b6e9443570bc83a8fe7b85a2042fd21c44f5ff28d94418623564b66cf3d57b00ecb04b23128b2806471c3a4c986c66c9a3c83891871a47184643b1f9b7fd7b941a9ae8b3a0f50256d241f9d3098abbe52d6ee6d6610e982892bbb0e18350398086b705f22aa98415242f7f8ee63e99f2796878d61c8f11602f8da607b30cda4d6d6605cb71af115d042ea3ce58f2800975832cf402873519962cf3de6ea6f91419ef03587f01fef2936e2e1c71c17cc2a3c92cdf9139c2254b60ed1cf38c00a92a894424928191c05ceffa3c7ddf66410504a348e2ae6237e7d8d831869672449ce14991c2aeda8e49be75db59b7c89f468a0cdfd13b85109f89cab73a11bb6f71f5baa35c76714b48924951e9b9b71de0437ee19742333fdc0ed1a4d3db64de88325cad8d2c1a992ddacc386ab95ec7342e7d14292cab8eac5648ac0395dc0b067ebd0893c9f400058aab52dd5f655882bdacc4adb4f8d54644a47d919a5551f9843c6fcd27b2d0f73655b33395f3d2ada3d9a3e4bf0d74e782b5621016d24b7dd45591dec4aef38795154ca9dfce15e2603e2376340d3b77fad375929a73c316713aa6a8c6b78808a3f9e4f74e1edd0fba8b1a1c4efad9eae22e1b7435d2099a507e70a174091833863660bd8060fef99d70d3f87dbce2f6d581c7d52af044b233ec2119996684a6701a73bde49f558d988b76e1250e3b8c41a403bc978766fdc97ec308195c09a8e06cd7f24e5a2d6ecf0089bc8bc45277fd3a2832aa7e25f276ecfdb0d76c36f84d165400acb53bd582ddd36837b6900bcdaba8d1dbafbe1d9ae84af7bad6eeeb6b97d8e18414ed9f7204f7e80c7d78851362c7ac8c7d71e629ffd822f981c8103c18ef58606316998ae02e77f33019905b15c4afe481029ad0e95d5e40125a4d07931db9f2a1e2845b59e9d3578305ca59580d49e967c03a66d9f153d1018e182f7d3652cf65aa93e55ee9e6161cfa61714e90b940eb678ed831ddb35b0a72e0204d1dea8426f86a2f313db1787c6b216defbda594524a99a40c730595059b05bfbd164a996555a56dcbeb3fb5fca6b5b52d9ccac3713f4ca9debb1a2aaf52a301f337dbb180434ea9d102ea5b581ef55b8bc7d2e28532b664f95ee2b81faa7ee5a3d35ff170e67b40078df9cdf9ede85e45f59acacb9f9281fa621cf4efb84fc7058df99be682037f44e667c3fc1d4fff7edefc5e9838720a8d22ec37c5f6b7c064f9fca0845166813943e77cba63eed03b660581ebb820701df2a294f8bc5e40385f7c6fce19679cf3e39c73ce39e78bf30be78bf3cd38e357c63ef9de9c73ce39e79c73ce39e78cf3bd37e79c5f39e79b73ce39e7ec7371c69eef9b83e49b7d5ef8e69bf3cdd89bfb5e1faae17bc227fcb92bdf1ce4de7befbdf8668cefcd39dfec7371ce1f13be39fbe4fcf762fcf773bef96657f6c937e77c73c619e39c71c6f9de1b24e77c6fce39e78b73be39679c6fce38e79b73c6f9de7cf3cd37e39c6fce19e79b73ce193fb145178cb55eadfea59c73cef9337c4a98f9df8039633f4a33c6f8a3ad0fdcf46b4be6541ae38bac124699fcdcf77bdfef3be7838dd40992bba767c6387b668fdc2f609a901e7aa4cd7d4faa62fbbf4042e7884386fc5a77839f7ea6b1bb819fe6f021ce443c4413b1fd6364f197b6c7f6c0b083b386a4413fddec01a2eb4f9857985250feebcd40c3dddebded0b29f62eccfdccdd9bffb79bf1a642be7893437448837a6054287737f79d0a5158acb971efec993372cea079b7136c46b8c98ae66356e0364349b6f1a77b8b72536a3b1b32b6e78bb53f699af6aefdd5f06b7ffa397f68a71e638cdf4fefa7d7528f5f4db60c13c2298b45ddab52a8d099666c329945a1334d21a03b79b6e564e0feefebf0d7d5f02973190c8000802e562d8f3d7045c59d89d29cbefbd4ab3ece19121ef51a091f38c23797708c281ac6f73d75194dbbf7b18b2fa445ab4f84296bf9b82fd45ae50b57a94f7f1fcbf7ad7c610c932af59d3301a0b391fa72c87dfaafbb397dfe42d4fb47171762700d21c9a697912bedc08e2613fdc1ef753570ec6ef49bc0654feef903ae5640a7253ae4dec2f6bbcb7b7cb67de7f1bebb218093d7e4e76b265a68e8080d3284de193dae075740b4cf2de33ff7ea351ec2c68f7d66caf0cb68e34c12c63eee382fee16279ab019345fd48790fa9c346fcaf6bfb3a13993d42ace145d5c88c135146b3cd6f8cb28d6f80eec28d630c59a1f12ba1a3e427773fa6d0033e9040e266b40eed92de118f347cda995d0d97077ddc0feb4410bf7adb93d0138ec39530ebcb526b0fbf04f1fae32f626903873261966b3c9349a47e6508bfd5984cacf48950fa791ebf99e4220ea0b2750f785f3c7e5e4993bdb3efec299b32dc6a80ff1a33ed4be1093d0d9e8defff4fe05e0b00fb9cb87dc25930a908f6cfb3372a79d50281ba70370d79b7b0613131313d39c5ffc12ba1bed9d84ee86f651d7ece99eeee72ea62f052efa0a8ca1093117dff37d2ca54ccab29673ce52cbafe58b5d46f3627437dadf2f876441fb5c1aaf34e8a206e062d3b66f80ce868c4d8383f667a0d268dbe83c06e0344fbee41019e425817e4563f992af978cbd90480edab7bfdd57510f1313d3fc50fb39975e74364e1ffef0d4bcb97740aa69122c7aa2154c07512667d977bd5afd83b47bfcf943da84faf207a3b371bf1c72771ffe17dd0d7eedcbe19fa7ece4e9f023c258e77196fd29c353164ed94ac770b9cb887e1832fea84bc33d3a9cb2982d1f4f6aa9d1b6d65a4b7fb6c558ebd5eac398ed42ac710d4924d9f4722357da81cda3e8126b5c84eee6f41335bf93d27e4b88fa7bfa2d054ee33863ceb82b82df0c142c72b934207428a72cf5dda37e934ab7a5bbc1efcf227399fbf665925462f157d1546badfda63cd722bed8ef3c174284b17ff2dce52e97bb4edf7de8dfa93a1bfee59059fbf859032dccad7dce145fecb730b77ff2155f6c2d5201547ad90a49c7029ee6a343cb73aab109e7b8dd89b22b13149ce4ba2eed5a8f521f56a45d3fd6ea8a1d9119cd700dabab5593c3fe116dea8e84b90eebb47598d675164d567dfb9bca3ba53cd5670f85bdfc9b479ff3f04fcf7ab1299bc5422ab46393553f169b335336a32deada9136f447c2d49fd58fad39436574f6236d684cc2d497b57675c57e76fd17e64cad2d0993cd399b452e62ab6fe50bf1ea55544663d2661e9130f565b15d5d29866b9992928bb75c32b60fd1c4a040813056f1504fbdedab6bcefaf5e784b9e60b879cb2f21ba5299c4a619bc2a98f099083f475a552ace95ed7af23f0a45d798833b2a54394b1d2c693244c7dd963c44564572076cd8920fd95277522484f9e0522481fe5512082f4559e0b11a49f3d054490c6a0e7cc0268228b7e938eb2233daae0ca873d9708d24f796004e96f1e8e207d7bc28a8bac790405d7bf765d815906d8a796a63e949b7aa99ca92a45318c940723b5a55448c5c48d42ac497dfd14a28a2e7144e4041697d0a05d3f4cc0aea954ea552dc47d7f93c9245985e7c82d6416567c286531d6e8d4abbe760ca836528ffa505f4a555df7c321b7aa1e71b07e78a5b441ac81e17eea43a97ad45f4fdfa45e957a95ea7a0e437929cf9118d22f8ed0a194c55d5f26c57ac465220e19768c2fdedd48d5a74a0d2d51045110302041aafb3864d8fa43144aa57a89fa23a4fd3b2e3922daa929b01db78e29ae2da26cd5dfd98fea318c1baa4f7dea55b2aba1fd9651ded5d06afd17da6f1b27bb1654366e7723f52e1bf5c1b0e15bf5392aa063c7adfac22d73a8ea9aa1baecd46f1ad7a51ef5d59fd4575da7253af5587b91729d27370d74df4721d6f8ae4842b6bb917a9a7afaf23ed5808eed30d5d5b1c3fa5e443f3a69644b054f4a617b6b0607b5d6df4ea9c80418f3607539ab46870df94ca4515fcab0567da1099d16848e3b7498c36a5dc253bfd6241753a4a0d8b53ad9b5d6ea6212da55ce8076ad3fa99a8af145cae48e3559df7f59facad93b65afcb1e07dbb2a7652f670f67ef66cf66afe69ce5de56b8e832d104d94bb172223611efbd08889146a56361b2702c2c5b14da35e9a1ac8e741398114c051a29c3587b9c755659546d2a1ae61dd217fd289083f5e9eb05121dba52486554166bf4d777255c7d47bbe8a6fab2765f39ea031eec3a933073c66193551f63985ec1a4146d704726a4f4ec2d7a8c929e84e8591f833a664553445fb9a69e3efd90be28d08fc8aaef8383e822434a4ba0e5b13b36a7298a0c7c9a98556743c6ee5ee6441f7250e5551e26bbbe843571188e022e7dd20acaaef568d75a0482ffab95aebf694268771850ad2febd31705a241b126d79754e420cebc3059378852266d6a4bc2d48f4c536641d8f50a95eabbcf80fbaaab42fda642a9acaca8502ad4cf701834e5c1a09fa2aa9d5d7f862a63abb2cb1d714684af2f5b3227d6d0af2e23b47cc812763b94adca135feaab3c11beba4364d56f6199edda49a5b0ba2493cb9e5f28a784aacfbfa196f469055aeeb0baeaab66d0aff2dbf4563e7bf547e5ad3cf57275ad7cd5e56075d92a1e0e19b6ea4f4b347d5bbfba2a4fac89bbbeca0b5372cb1cfaa91bf453f453a98f5dca83e1f434c80de386cbeebe7bed5f98b5256d6484a15f69a595d6d6ae1ff18bd0b530f78a8b99186bbd5acd7f13b6fdd0841d554fbdd4abbc903e4edaa92f7489c1456feda1b6a43ff1053f6a6befc474dadaeb8ebaad3d0ec66ded6d7367dbdad394b4adbd6c94b7f6b0bff0d6de6dba5b7b16c96eedd5a1bab547a54b7b3386f8827f86bb105fb0f67c4797f8829f4aedc58dfa28c7e94c4311b07d4567d2a65b811aa3aaec58c01fdd6070d6bef494a1063eae18a54bfea05516c1bbba1ca4aff168f98531f6e7877136f3375b71cea2bf4d3953311cacd2b580d05f74081db02d3f6e18b60755ff38ee871b507d38e2944d84fbd053a9542a95ead362105aee18376fdba4b6c90fc7fd306b1f8e1b570a810817c567b8ef87c9777264d39639f3382867a072165fe4d4e9d1993373f6d3c59af8f2a94facb92f3ffa6fb7fb2ddfbbddf741ceee5317a53b73c841f9852e59cec073c8b7973a273c4c4ea3701ed9d2c86b38939c39788283fac3a93375e6ce74491bff9130d2934c0eca4779b2c941995f7b0d7030fec95b8083d1841d4e13767e9df3cb99cba05ebe8c126b4e2fb57cbcf2857af52a13e642daa87c086e18eceeb557894e76f72ebc25bbfb550276f722a4b0bb6f79d9dd733276f7f25522c895085e74568bd7b1ba4779af03b6bbdfbc9e64c86d2979e2479aa8428c2166ce4c20b2a6cc59f9b3c4e8aa2ff58128ffe8c5f8c245b9a3bf78fa42d97259c5d82e577c73ad63c0e69b775d44a1bccb9d04e20bb54fff048f7330cc9bbe9cd235606fee75cf71ee75dfcdc51202bbfbb087c3bd0774d0e036cedb413f2fecc003b8cfbdbbc13fc3bdf99a17ce275b7e9eedd041c372ef3f3d971d292c83405e2be30922431021320491218810e9218288214b1e953a7964d7f8f1fb8d7e60bfe0608db5002ccf05cb4acb4977a9adc5937b4671a2232e83e34e9932658a17c59a3879b68a8a7f3855f555a6152a2a2a338bb985a63b280e94276ff52dcb6f590b6d3994d7e2cdbd65ee729b57633ebe187b72ceb9d2a27d879f8391e258bcb8e5c07b8584953b5b8ec20e274d0972c9c17945f7f5dd8a68d33d4bac59f98a2b6ee99f5f6b8415aec63dcdb7259ca0ec4a345bb8242422abbecca588b913de843311c3899ca812b5b0b060acb5fbdc9c2751dedc27ec517e5c6922cd7dfa9e07a7925ee9795dc6b6966b5dcc964fcaba2f944af28a5dffde89e7e340edf99d5ee523aa55365bb612b89fd395744ccb84ae74a7d2449a4875824c1e6915d34c886293c5f7fc5c7433484b1dd454568a35f8ab8b1d7ad0ca17b4eb7b6b666ff942efeaa330bef6b3cf72ea6ef0cfbf77d25ce92d6fc9184b2c168bbd38810e2792ca5795bf9f8a8a8aca44fa181ce7496cb4ebd719b4ebd726304c34838830f55b3c5f2202b4ebb3d06411593586ae34779838ace60edf42c662d589280a5349c6f33b2b9ae3444d53c967b146e29033dddde09f2e63bf4e547703fffceb4a1363ad57abff99b37ddc26f7c9a38083f55b3c8af2627cb94064d597ae1030110216736f30e8be55763d4f22be201161eaaf784e145fea11675509c5d1aac9ae46bbca296415b2e926fffc6d7e2aa53dead4ddaca4f267195b798d92421e39d1f7c2411ab6222a6291b198f69b6f3debc7cc195722b2eaaf56582fc14e3414bbbe4f11f32419ecfadeb1a07f3eee545ef5dbf4f26f92ebba96adebba4f7d6ee17077a37db7c1b8d1c170fa9cc8c1da75aff26284394d4e7326fc48e7445ed4f2794c46c217ca185d0b307250eeedd3c781daf4d37fbb1bfc5c77937afae590bbe50be79f7ec684d1d5c831ba16f207c3fdfc309cbea9e4607d1aa4dc2cde8a8a2789e69f7ed3a970623197bc50f29ca40f0d7afbb0eb4fa539430167d5e7e62cca546a6a519dbdbd4f19bf9e5e70b0fee6d5681f0bf9a3416efcd4aa2403826c754e2421aa559e2d6a3eda35030db8bee89d77ce39e99c93c3b6d59a18cf5a43ac09d1b686589343db96b4f1afb68975823fb42f97891b689fba1bfbf43b7ac33eb5387106df6075a8731251dcc3535d45f4fc6b5b2eb3e432b3b65ef4e0dfaaff74de336d6b06d55964bfe8eb27d00c8a35b655ab75ed8abf9066ffebee77b39a96b1bd2ed40f223d43880c9132fad30fcb78fd50ce7b3f5aa57d0d21e9a758398931345b8504c49998c9aa6f63eecd5b9463c1ae55c68e2374315be5a6bc36cc8e4c4889ed2d73396f4b32c9c11726ab49a471b95cae25a90399545dd575eda4af6ba74cf21db92465b2494a2d082d772825acc2fc8589347195c5544daa4ba83524a3f83d0af368110a046a42ba0aab355689c419da9aac56f521ced05887fcb05d9ccc86f52af5c12e05f299e9e243da64f5a2479e76fa69dd0f1933ba82088673021ba2a40026c49213642184190c7a0819a201c183ce122c40903ffc084235c25a6bad4de23b244c90c490202191bd8f18fc307bc4e0a804af5d7befbdf7d6c0355911eb955ed17a6ad7de7bef5562a72ac15395f8a94a00fdbdf75e7befbdf7f618ca9928fbc05a1b440ce7f20fbecb3f35a287cc51e16ed8412787a0d8141f4420f90b80ccf44aaf684d7de800c4d20d5186545104c7498c8db28629e391fdc8806442b2a1182903269315b18e0380f0f08468091b84184113244bf8701da881892690ec7074448ebbe009104f88a09b114076aa029e08ca9b0dda080a1e4b6f48d21a02a8841e84b0e10a21914613b31e15582ad281942da0ec80871644e16406d856ab15d1e3acf8ca348a085a596bad5dca4abc5c3f7d68d2eebdf70728fbea22524870838f20a4211029813761c40f3f62131112a51b845c331f26e00e25f0f18410a913e3ae56abf523c7245b00e96cda63d48414279a47d6021d66e0c2a1870f1a9705528430c506dc839de2adb5d6da1f4c9c156348347ec81efbb0821c1dd8806db5d65a2ba4335911536bade519fa1e74a4c0a88a1c294376f4f8f1253b30cf794d56c4010040902254a55028708af8fac4e8499327472babed745aa4849924b2848705ab98b8c20a2bd4156724e9c177f9c74018c17a60afbc0406847d5f40a1c0a010412982c2044a6c5a1ccb832501a642c85971e888515600154d72b6464b4738e88989d172bdd65a9b24c85911868974d18a89b392c49c75af567d6c9144911cb4100229c8ec09949c73ced95a6badb543648f27413032f4315e9bb0b5d65a6b715c19a727e3bc324e50c68181a911c40076e405484c72c8624912205aec4c9f9714070cf8d8a207254720ed008909aa831345144df0a009114966e045498a66ff859a629fc13428a554879452042989a3a54c6705994b5f254e7d342b7a5c3e08f1233d1cce4a098c052678a9e3276705454881a3850a962c51031965100551901d28b0d0011247b2298d9eb7d58586aad0912a6454859a54a12350bfd312785608ed7044cce9f6b877680997c60308d21651e94f15d65a6b2d8e018038e28621b28fd128b6b4efe57824551148c1c2c889264e5db95e234046848c0c193962c4e8de7befcd39e79c7bb892d7aebdf7debb42d2ab562dfbb857c9131b4c253b7ca09ffa88b9dccf83eff2af97e0dca39e243f5418d141c7250415e4003f48c2e76888b5d6e2e092238220279d0a244a09c28a295424f13304091a56092a94187141f9172a384fe8955ed11af74092c50e3b2012b48226703812244345973046bb7795ffd696b3a20e76e91e67c51dae681479392b5acd73f177f0de7befadb5d65c79d81f7090efbdf7c61aec123c6c7befbdf5f640a274a3fc5dd1ae267aa557b4b637b8d0030a211bf478c2073c4882070aa8685992414660c54f7a7760a1577a456b2a020a480932cb0112b026295440448e115aeb97930677ea3082043594a02948143b3082c48e293c6ae872620d78fc10021ed488c58951183d71c28912ea23c5c3c5739d44a4bda15aadd60d34c2958cf6ae21ed988406b07d6f44da35072c24c91420da4e049e44618513a32348d003a21e52aac03b034802450f473ff80968bed46556eebdf7d21c62132f08e24710604eb44088237296e4102f0e3a8630018f12266ce041064e18b1640753122457fc5b6a29fd39839f7efc9edaebba1707b02a78b47e888c80078d9b827d9300e1615f1e38d8f73f7e31350715ae66087a262beebcb26d0f6ba4454f92a317cc608b2e368c31436958dfd65a4b2f0e1958428723968eb061ca101a7628e767db0f1fe9b8e953171224b99518e10933349315a1f8a44e135f680c0e46b9810f020e462c98e4c7b881c8a22f297d0f74c065d3a7cf8168e32261e8d3df00138e34b1666e3a9fca5d317d171a804dab7c59a12055ca1366a0d2e2f8626dcc09a0c553021370d0bef6830ef1cb25835ca6ba74570f0c51c470816803010963dfbe05620dd62b6b69b027696ca4d8f26d4c5a9fc1961fc628b68dfb4ac0043e45b2b8777b2a81999cc51a29735fba90c422dac81df9831865e63931298c5022522867331e9fd9c064c93fa110bf305ae12a2fcc1b6794b9efbefd83004cfc42b9a5cb41f9469ccbed5bbcf78007562b39fb20e0a064f2c92207fd433993cec5ccb3e56fdb27677908aa33f3cbfc6ad19d8ec725dd21a23cb96f4485b35995256d731643af7050de05b6e25bd47119dff2e36c460d0aa15f18a1ef671fe850ba60133687660c06bbde0b22ed1f7748e90d985ea8242df8453565686800000000b31500003810088604c3018992a67168f30114800b728846745c3e1287c3510ac3308821c60040000000000008008640e4ccd500e28fc228613d5ecb05a8318a74844ba73b26fb3148b0a705e1b896c2b64740acb2da2f49e42569846dcda5efacc1ef4d19a1f42c8283039c24ab7dc1585b881f508ba3171c791752abf8656c981f2326c03921821358b713a9d740c32dc83c7add25ae82aca32943658f6788c5571e72f20bce2289ada9919e90311733dd320a0bae7e64153f43375b2a23e21f3759fa864987231a8a8900ce71a6b3fd0cfd23490e5266fa7dd07585780c0b022208c427113358a99b97ef781050cb854562355967ec425492ac09bb2890cd6a007fcb6139e13532ebbb95e011d77104ea41b73c3106504c979091d0306bd88a691c09bad8bd162d6ce904ab962a75a0300d9b35720ddc8fa1853c7d34c2b0d7be38102e32d046170f72dbd08018c16e0b33021e9c49daa8871d13326e2df754419ead896b5222d2986db30a28818d135f4b00ddb5b97815554609b5b59480ba04aa0c8a2d4ec166d7b5d139a8a89fdb662291b8b2148dfc46dc98068f70b84939742bae8a45b5aa77d824f9ae5a0912085916674fbbd348c83dad9bda7e6dcacf7a3b96f27fc91f46a782be543ceb639e013ffdd51d7ea93bc2141fbb2323ad9b30a62661c2d442a1cc7e8553abaa01f550774e92596b3a80f7b5a7ff21ae369bb5d224e05898f6851a24ea80ef3a8cfed658833e764f4cf6a71029b2a4277459c13f31b9cc27dafe904d04c34af524576d18b425ad2692f6bab975bd95c48e1d691c48a51d37e4c35ade1a47bafe2d70c941fd59276e28d0cf16fd79a3129d5aac583f92aff660ec9b894e45a6c36d937b51dff5662b8f287c8a765946d67a1660ed845cc5a473252fed7810437e0eea87a47b261c716139df558cbda2f95d557480325523d86a878e5690d046f33620ba2e31cb17a65a0d6a04db91578569d2b8904b3771c5afbc8dcd34a216d7984000d409127ca1783645bb148324fb077118800a413628d25699d34024cfb9ac57c9134f6fd2384dba1ffbb7c1d5ce4aeb134c45d4e9ace8ef842673957ee29ccb46695a0c440226d295399abe7017e0adf1537b0d3e511c338c7529a1f33e796003580ee2ce2abfa06916047dc3af8918db23913b2a400556015e348b91236ae477c83ea991f7048fb0c7ed7d094647a9d48ac833d97bae6503b385b52ced6b7348a100b9530b02780af72bc1b1574384c0a7602ec6a0285832f218220f1e92f335ed0067d77c9e4936bd4216a199373914da9dda30c42b32f0efda1ca5a9d64bc050f5b9803844f737a496593502e22e0b7f88814d188f564c53b1206b259009e8f55cbcc4886650312554ec31bea70201d80fba3a0248e9ab56b0b9e3e3f3e772dda9ca6a49b029460f2239499da6091361bc5e7e3cb274d0bafe4f16a049d874206a399870c6ee944c4aaa87f4585e0805dc37f47212cd2e2bbc7ea544a4ad0a3a68ac04a374ad45e1345dbd44302dd4bdbc943b8a01d39a5969a9aa5c064734591a0d08d3680533aa852c36f3c10de1d5c125f47984ec844cb24dd20a9a40df264a3a491b469c91133715515289ef5bc5b3f03b3df50a2ae5535b52e9eb671fbdb6e20460c9d453c175554ac09fba0f74404ea0be86d981b279d82a624a3e2d8b220ed8a12ff434750e0df4ceefdcbac1e20d3b797f695806a137990a1a91f3701b7f737ff393f1cca371447472cc1f4c36cd876e62f50611e53cf8e31c9dfc7d92e4c5c8bec477fa55e04bb655ed534ede605c847eb274285bc2f2f159108a11d44f61c34fcee3e46d39c7e39d754d455778c9d19482b1f758813df2dc91da27347ce8c0fc935d915bce80096d34da18ff37a4e6aec05991c1bc57edeec1b1943413aad7314f6c5a1cfd68d89cffd9d685958ec7938b367cac8dd881ae4047210571dd8407210fef266bee2ad1f400d304d4589f0637c9e6f979c58e8d338ba409695916be709362574697a2bb2cd34f9c45af3d331731d5b9eab43b09e4822863447fcbaac4e78e208393a1c6ea4aa2292913455113e583567609f28309f9629055def6c78e1fac66ee6f35ed8e2bd76140952c5835a6c4818458a74fb5dbc5f670b908697b37b7cb96b5656bee0f6c43eb6c6456e25b436ef7c99293495b8c1cb2f4cbb6a582083d6ec19b07c9988b7503fbe02a6c51956d390e659c96d9cb79300a58a45eccae1a01ec5cfab34a1b41afe978a863910d319bb16a51b82d0e464bcbf4140e23d24ef325641190605092ab83353922f5b1e150284eea62adeb208a0f9bf34d6f04883c25582dd09b609c097228c6d6b68d3d39473e773812335ac8ca02f7aa538e5a6428fb40e5c7443d42db03544335690c13d0755a0b294f6e8dc89e3c3809190f83c514189371b4e003ae00e09af76a53e0154ac657a8e0c1d725bf0896b1b92b363d12200f278126b332a85ef2a7dae3a728148ff8c09a21f8a9631c3cd3b3997b094ae5267e9e86553c3b1c66a2e1e67872d41de9bb791319b89b12ce24b343014f069c1cc47e01e16480060b486eae5433744eb458b966ddf8af785f448a97f84a5d474b781073cb410e0a65ca959e954b368f81189968fa523db7804280b12421890e49f2ecc03b89fa8b958e62fdfc5715242c9d1806386117dd99546a652242e7a0a595a079bdd09982522aefa4c82864a9bc1356c90e48ebf41f285a2f096390514ca13ddb8ab8b2d522f25b0902d9f9dd27ba63fd3296e126e07395dab87adc3953d4de995bbde49b74e5d77a9d57bf34cdedac0f4e74c47a698ae0315e0109424378a9fa3b56bdecf4b0b3ccb892af27efdddad331348865dd443c298d7169683d25640b8ae57c010b6c1ca11766fe267f796e814a6af49d90e4e74ff2a5da2b0d6df27b3442f7fd3d249b9b374751e9b5d4b0b6cf7fa26e056a80aace745b5ca39ecf14fecc4eb67a3aba4c007e713f180817e2ac2d4c079d24566929d8140df18873ec46401004b0e36013ed1749f4a569b3b744d1f7dada63956106786630b8fae7d6eb7708bd3202e946fecd8d73c06f1e058fee6e3c4517d249b561a31022761a2834e88f0f2e270c7ca8169b0017dca309422afa5235546ce33790516d308e17b5e348163593f35cd5c254ba42a1c48cad5a0b9f2a48ac4ab774c067f2f98ea0a754629e6047a455eed5944d7ae9a807a2ca03e647abea777192b810066fc7a2416f08bd64d482914c2afd879ed9e2775bb993e50f26f0bbc0206a6b70493cc111844373fa60b988652d5100ef8495cbee217aab33caf18d90e293c2fc678af74e67a930c0708d2a6dcf7ae8f426611fe0950bbbb8722cb01c92f95dcfcbc53cfe93a5028c1bd2487b614dda28fdfb5ff13cf5f28cc8dd69d78b17897f1b2e1f8959cdee272394e1d48c6f36c0d492b82112c07b02cca36203dcb2ec565728be2547f4d676f8b1c8472131093515a1200928303ab1621cc906ca40efcd42a5b294aece42c972739fbbc7d46cb2dca6ea531d9a4dfd7ca634c4d1329931377e587a230e9ecaaf883827968d0ad9a4e7f3cb413308c1493a60f2be188a313965c92dcc9ac007fa18e1a7d672d88a548d8f2a71dbea2c8d09495a7818e856b750386776bf42ed0276e324ad066d585b604a1a2f6eb75caf91e5094c497f1f742fe3378efbff811a89e5a09b77b622bfec02c2b1380e9bbd1ff2b65e493169359efc4050c2d58350d3050b9942c5914537e5723922babd8f2692113880b230567b9454de144043d0720cdf7235d9adad2553711626b5f5be1e1b95b0ab015ba2242fac9df4031c162fde78bb43c361466ca352496c6395e90719b0d5abc6527a7c888fe2521d42bfa618fc15958da8adcb4fbc2ef714ec770009e2fa62555fcd5ac6b5db958c516936a1d45898da1ed28720a48bcdf9189ab31d12f0c91fcbe32414b560cfb25e091ccf99edb11942b2940e950f5d7e71c30285e4160ff4faaa0d348ed800d04cc722fd8a3490b20b6a7619855736d570e85c3c9d801d47bf92a69d778160a591876c95c362e086a8699158ef0d0171b7d909d47bd4d6d5caa61e0380d5689f8ae307b9cb803c3b9dcd7d940d246fdb75ae28537887a0d06c6cc2160409a2bac835c6f04f56517ce0a551df654ec9ca642a372e607af2dda2ed628bbb64ba2b36a9d456222d428daf59ee65e96b797b6bd284886b9668d290d0e9cf66c8c442ef172dd80b8e5bc097649343a2aee1c5d8ca3e0a2c79beeef5cce835cbc6785332a004f04c76484966ee012b0de4a7e99166a0450cc3ceafbebcd9f399e726a31394979a056f0df8a16ec5da60e38e52e0849e96755344ec5508c2b4db8701d940bcabe9d4d6463ae42d9e4de8a56ca44cb4f4f3d5c6f94e862de31308cbc1e0d7a22b5322b4bc702a5edbe1ec65b1e290d0035b4c970e81852978aaa0197f3fbbdfc6d533c05000764e813af059c9ea8d15f7cdb59cce5870d9030e6186ccc3bf196237999812a6cfac6c2a012caa6f0d02de7b3adade3d34eb039e0837826e6679852812ffbb8e4d1a6aa66e67f0aa7101d64e454095cbe4fb99f55df848893d543e0abe0185f77aa1998b9541e45d311acff9c8f52cd1152169d11db742ff86dbe46cca0013909d15692118a5a3f78800b0445d9db093cfc17c2e6ced2115cdb0686b462ccba9525d8155f3abcdaf1959945ca5115471eb4ee04a6cb0e7f747cae01f18425091644ae4decb1535e3fcbb23ec7aa0687094c81c129caf24322d05b710352f37fadba4b422ee172471af8792a6119bdc1c7533e8d7e4a4346ba93c6b4676e3b95f6e25ced2ceecd70bcb6d8840982e26f12a860d1c8b6df09547410824acbef7b1dd2feff181a88243d89942660aa50b40e02798f442a7f9648f59d990f4e4f02013bb1c9afa92a0f4cbf1e2c49b30a5aae4d32139fced832ea34d6f9158bd4df5b78f529c78397af5434e9166d47d6443015efb7c4298f45e9704371bc50653ae034e9c2330eed0b685a54ac64ccf0a4e9ec31254bcfe1454ac76b8c42e95b59ed2d925436fb663f2976bf4195b967731ea09fb6f1758bb994786489732eb741b1aeb6658533d3490d52e2483a6e8554b58aafa345ae06009c69235a462c323b9128daf653877aa56a8e32d13a05f103e7c004acf1b54d1f33852afa61af7c5d96a2fe4d3412dcae4f9be618455a327647eb980d3fc14e946e8596f8602cf957bce27c80cd7a0df495d7135ec445ae140bf39e494a14b414e28b050b585f4895a50d064d23f21452e7c7aa3b80280448b186bf9a5229bd44434055077cb2f9d8128aee97d05fd9e6aa30c03f0a4e50626cc2c739e531ef701c88cf4f5c3eb9e7039c81a8225dce6e8e72b25f35c459b4347a648265d192dbfe09f07d1366f9d7e2c8468fd181079023c88398a027d748ca352253b7c4cddeb4deda5f81412cb4c8b60f57010775016b9c156ddca8de697ea5b6519fe5ce324a7f9893e2c564f94a15bb35f9198322b191f5b2aa92aad84578bc0aec8a041eabd928b15070dc5571f637575513bcc645227ee9385498da5c11fb597fd5ac7e1c530855b7a744d505da73bcbfcbbe86a0b11145424011055df1a890b70bebf2993247807cfaccabc15f63e9af65fa3a5442c56a72d3a806bfbf3187d37b9ea1aa41629364db1db14db299cd1e372fb69ee6929c430ab1aedcfdb74aedd25f80c700769bf088f32adb5239ad87088895dcc4258372dcb423025d57aea87e90632744f4d721b1b9bd883c57628d2366c9c969f184da80e6dd84a103dd0af9d1a8f2d51b1876c5daaa03f48f5a03e357a66699700453387cb9f6f61ea769f0e4fa813a4287dd5d32b9600beb392558b86ce2332a1894e56329f1b2eaed0c81a9d9638c771012bf5e817cb4096ab9461e5f462c402d5811150c1d38f42e6c565e691675a6d140be6b29997329390d678534c52507b9c2ad37caf099f98487f6328786f53bd0dfd5066c2460cad25e755818a6ec93546c8f526c447f5a2225c9c12ab98bad1ecd65ecc3e71e18ed3f08b31badde8568ea8dfb26d53fa38648afb6946522e2e180af33feb7d91be355633952869bd9257880c8580ff2e50615428d87fffb72555af7c3ba420b1a93580fd71199e523a5cdf4013dce908157614e522f9cf58f7a3e2a7df07cee794e41dac84aaa5025107d24150248933da5e9b27f2b86e7f85d3c04ef9b898caf89382db4a93a87a3bf24a475d77d1eabe0032638e36a387fdc93d84ce0f001d8aa77568d85cccb039aa67448739b5531639c8b943a5e466475810b46b6738d8c7c1807ac57b369a133b76fafb0394551819a070187c0a4213561cf5b71336c1d4f438275511b06d414d96697a8532652f8bcfba13c8d0d5d86b9c11a72bb326d5897cc10ea89b4f4b6fd50b96974688b19abff21203b35bf98ccd62da12f180d4ebb4f9c162ee2d76b69917472f3acc2f9bf95a46fc429acb94b6f1bd6ee7385f931fa188ce779b9acb32a6153a4f2943f406b84990c61c8005fb904dfb43157b8688bc6cd2da826de10e28daa028897379a7eb8417402efb9ef17459aadff8dc42e422e3b6be98dab595966f8aef88542a7141724c9c232e8e484acc776f22820b6068cd4d739b9691a4baa83fa69181cce52dc89cbe617da7a1ae83a05bda744e81adcfa9bbbfbe8dc899b752e97b27bede6ff171cc1ebc131358797d11b2209b84086e1991b282e6a25bb82c08d6a8ab442602c4397fd18ad768622db8af8580392be287e9669344af001e2b7e29ffaeff734f136c007d6934e380ecf4db302b50a9e10ad76df02ae3de5b880df3fd54d61a62ac3509fc1bae5e541fd10797eaa950c96f03e822e5543e05ee8cc1c7e96eea9cf81ac52aa800e41c10cab47cbc3542cf70910832ef14f6d1a8b4ceea60eb27bf93b26e8601d93cdca2ce5cc76713c42b47816d7ad13d01a75200b8380c16cd66771375db361f2f295edffae9b2ed847880ac41f3b2daa7bf776d9da0d9673302119fc004407436e1865ec6332237c43be7f82aea772b066c0e3c865b25808a5521e0626bbf98b1b29121198d0cb1ef5984a8dbc7d0c7e479ea98c00002090b4b695ef5d4c0679e63d8bc62040cce282be4bf483aa055ba32542cc90d7777b1ed96917fa6d3ec20c459706c7a022425857d152ccbb48f4d022642a2a53a8822f889f5140edc2ff006a127f02dd5a12d0700931a8b8d0f3e4711bf04f4b83c769d46e78367a7df867a3d4c7250c4f37d9cd665e1f3fff0247a803c0d5e95c2e8184831a625652bb780387db8e204c10d5b822a8bad4ad3dbb07daa9ad5be7d313bc4e1ced01cbc9888a7b76ba8d0d6f4f7c25fa4edbcb5b12ea6f0307b46b6c0daba78045360eb42193a7989f399b7567852113fa98e66071ab65acc174dc1cef2019f2b476354875e00bf3c6fd7c3e89bb0fa61b2f05dce9b88624ae67b12c0ae678007444c7cb77dc636823fc695910a6c9a5c27588305542c6ba226040e30469b16af22cc61751922b71f4a02e8e06facc12da8862369430dc44ae6b0fff2841b406d32793bc01bae41292a7fec8d59c4d6cee3ebe4044bd3fb6a4d8b07fb3635834235414b1b4d3b175b055c1172a1ec947bca720f0e47e259c0a4c948704c8508ad70a01366557dc32061c73109f8a756688d954216c007d17d1c08322d006a658e70250dfe9322a66876263d578626c77a036aca56c7a7bf196db87b01e84e0ebbfafc6487e2a548a687ac27ea85fef097c10d9cc88f96d368192ae38804badcb7334d1268936d6b8b0e40d8f7b8406800c4ac71cc0b259452d8088661eba967fb6fa244613a59380ffc9798331cff1e61f7913b19451f3bb23fe2c4c20686c234ea076bd354930c31c41975fcc56ed0c442b55e99fe88053ab3868fcdd14d4dcb5c8a09217becae10ab1af4f8bbe879da15ad8e10632c08ec4eb6e062983d6fc329b554babefaca6197dac24f7e840c7cae9f50f3fa951d3d1fd048f3b16f46be54d5e3c501c4ae1dc62d94bfa1da57d57f012f30c920a4b7fed8b921ca5df88dd8a2de98f28a3a4bc1bfabc4ffea1f945247682ada7c7d63dc429f394ebf6c7cbc70c18edfc53c0d840308dd2e8aa3050ddccf19f676a7794d380e7330d0cb0ea9386e5dadf7c886d83bebd1a3fbcdc4656e4dccce360a0982734abf71074d22badb4c2671521d6cfd14b032a6bc1d152c2672d0d4ea9d595f18d56e23e9ac83397d188d4f0595288b11511b4dd73a5ee0f2d42e53186239bc034b08e8669f018b94752077fbbc4950c69aba1584bbb5c13293fb8d3b19dd80dfe75d4f08838b1fdee07118a205e56fd5bf745f558dba23042cf602625a2c3a9cefa3af13cdb99260b74333b3bbb528552fff84d86044795d1848775616eb8c77cfcd5e211b9bb597e0b1f139ddb669c57799d5f7293125e0dccbef170de73eaa3af530b0738c4a8d01f9c532e83a0342634a29e0ed8039f4d3ae4da49905226dbe8608360d3fd998b6016e660f3edc6c0369ca9d25bf66216f50193e7dfd23c7c323435b6aca3d6559aef50851cd65beaa922830d1ee02ca479278f64aa8ea2ebbc466a108ea970807b7ed2f56ae97bebae3e95cd7f0ac4d2c7f089ab1d3a60f95ab3c2a522fa579a4f8b8a81dc95663870af77b68ec45b57a91f96d94d44f5db2197a56800e817af9d65d32768c8a8440573860a2511af00d56b93880cfb478520ce2aeae9a9279a0137cc14d80534c7a2a20aff2f42db071c83a5e6df8e3cf2e5b6c45d4ebedf06f138865b1c3996544effc2b2c660cd306b7f310f58107b911c71fc28c584219dfe4ad025513e1446ff5d9a44a517fea62b88ae9bca84eaa107440a1f3f45665bb05863641979b76c934d085580aca0d7a4af77196569725560e800d636c8a0ccd4360148536971f2b50d9192d70a37c1ded6f2264b85458f486c30c69741cee55b198f608383d6490c2164111c9481f727b3c6b8510ded4afcbcf86a330354dcc2bc4f5607534daad1106d9e20a6ca958809d347d03209f40ab267e100d347821e8ef4378c2841282040fc32ea0b2b262b40fbb8cfd6d4f0e9126bc708bc1c75a7a5d901d04fe7e291289c44c5d06fa4a5a8dae5576c17ce5fbd969f197dc99a07b5275c46c6b697229ba3cfc9d916457801798287de8439a0519f2f8a5ae6ebfc491e31a6333759c3c5b0c8c63a90b1a9f84ebceae838752bd2167010f1b83c84825216104b407d7e9ae0871d96e4b48592ef03eb8f87c7fcd75245c81e4903f3e379bf210a4dddaeb2c5cf4547b67347e32fb208d227e87d8f77cd968e21be58480ce0f4445365471bbbec3676938d4ba2e34457646d4fe1ca202ca8d012db0aaa11cdd7692b647a56d348bbc87306af2728ba3be8319a176201bcf84813ddc405e72b63940ae485ec32b855df78aac844273c1cc653bc343f86961c0e318c0980067555163a458eb2aac743db901e4539bacd87e188886aa7a8527fbc80ac7b538aa1050f0fb251f92071fba445ec6af448a1c0222dcce0de66e20d4f7644fe571038c04d4a6050b3226de01946f5e441828e8aae9b025efdc523d5c92b6eb650f9372837445d234190b46dd1f7417c27456baff9727b852bfaf0fc3dd0496944421c2ce2a1dab5f962fed00a7b1c23dffa750b51db35163399bedf9e259aa46f7fb22d8f7ff152c25cbb869ff38d546c16069dee2b80e658df3ceb6e53c51c10597eaa1be1e137cf68590e9950ca713f7bf0af66a804b26448475ae2263a72733efbf4a27a4c6c2c422e54df2a7deabd78723175671e1e5a252a27f427fbbfc3bb5762e1652f914d2e429b990c9d77c3d9d029cf9529df0ec8bb91194fcc497008dcbe51d7140ccc3b6497fad04edb125f8a0a7b5c2112da66721c71483aae9eb79dc1234ba3d0b9db743381e6f5d6c92d597c1cf32f9e1203f80889f1fc7e7ea161f2b6064e2685804318d695b2615a642abd743db010513b8655a6276e6252e20f2ec8630118ba55e95b221ed88db6c8c15bac97c870b00ed463b0392a80e29cf59b2042191250cb3b1172cfdb1e91b10c5eb48a2f837dfd371ac1db264b744cce5806b4a9e53e70a40b5255c04653a5a10cc3123fbd3dfc666e9a270746a7d706b19fa847dd6bdce24786983639af6f441488f454edc68d62931c02f8a3a309d62309ca6c479303b3296526783c4ce96bce9e2217a49c32e957d7bbf4b84a9e25593c5436a8cd6413247d9d6a17f0de1007d403214b50bbbdd4628bddc2e70c332f73fffd3bc726070dce4bcaeb4592d4b755e41157ad143c2783347c2620e719a3e102aae194928f8697ed011a37fd3e41dc25b799067540fa9576fec88fce7e7b9ff8c45f4bd3179447ceb91f4d2e290685bd6746029aaf83cf3543a446bc7af5382d98c9855da5fa6dd66b46fe012826ddc289c0fb11a376ec8d5d3ff4dc67ec5631c829de5d80323060c1138319ae03b1901fe02d3c8c1b5b274963c0ca42366ef3743229d43233900b7b79d58c5bceb1f75524717aafdaac6696f75e4df98509d5c056c1de0c3a80bd47387d4eab593e7fbb176d95790dda530f53a311ac51888828c8f52998280990235a42c727ac4cfbf955750cb84bd1e10899416ad59c5c0cc0018bffd79c953326ec915a997dcb786dba2bbb9d27b9ca403db959dad05ff914d58d361816730710584d69d9dd62e3dca27600e94f12f38a98c7802519dfc5d961a1ac19d3919e25e28cbafe24cfe25934a35a94bd61bf98221ea8df1c4825a3acc2d9bc4a152debfc15ac9afd39bfd416779d34c48e2b68adfe81bb4f798a53cb2f8fd465461ddb41dc9b9cb4f6698ffa2fa9b08b1afaade3ac1d6384898a3e407a0e277a3f1631226b350e9a86b42b205bb5167af26725902f112db0542905fbbe680e79c032e3bf647a6c12b60e2610327212048ff10034e6de3368e7a1f9abaf403a3fca646500800ab51473176e4168f47ac5de033a4d049f784839806c902e25c5bf5b427e11a23e004938b1132fc60ffeb202e95cbeee40c3ee643a6f3c68476bb0c4f5879db56fdcad65332fa1458d878a24c54b91b5f0889ca61c6d712512159df5abc584ef1b419d79dfe39a22fe4c05de0a7f8e998c96bf52722f0f28831fe913622f45faa3c9662c7c1a2a2048015b36f8d36493a830f644a2d957fb4784b24c78218ff085adaaac022a62db8b74c41267e18f3a97728de984323500641e671073e96a9edfa7a228dc6fa6ac5d7d587d01d1623afa75eb124b3daade26381b637cc0e1a6c48763e13dcfc9ef7c2ac3995293f92a8ee994bb4cb229d54084629356d3e7161e4694139bf22f07663c2ac1f14d5be54764b35d186eef1432d30b8c4791049a8339de980389d213abb2f6980364ae064bb56cdf413b279186caf24313d66bf040169034559fb1a131047759b8017f0a0bcc30867828573cb4e71b4044200c639a9249f45830e7014fb216d3e44fc9006025b0f256095375d7f6c36d5ddf6314ac12d3dddfb631079be0b7679624322d305c71aec7b2e041c006fcc10b21c3cb7d36e2fe7d3d4b839cba653097a22590a6fafa4d97e38b47d089d336bd768be56d167d6788dffbe8bfb62ba91ea729ca0576c28d7dd9646de42da1f303d47313020e48c54940c3865471e044c806acfd89c8d6e78c5e3fd7155ef8ff60656b73dcec998d828a1746cf9348a3e0700622c08d90d374b69873e97d6e3afd0305b43640be91aaa2856dc8166d19368608b82c7b20b8e7cc6503c41a3d245df7a02ed8177938515aeff1f2dbefa4dad12a83fb0273bcf32e8512191ce203d9b3327a395810c47994c062a70897d7daf3497c8d09ef0c1e5c0679b6390d72f9bb9b666396f7bc9264bda4f8ced71e0ffea5aef351b5ca2f0cad8156f3fc16e654c35c270b549417df04fed4757607f2d5bfbfbe0d001a259b6f879af2d59a163ab3f18096911b8fe437d8d7c3eaf2bd604d56749dabfd75cba426f0a35262420f85b0a0033f27aa72fdf2544e29040761c978cfaeb2640bdb06fdd8b3dcf528559297f0bbffbdfd895ffad04597765ef266600a4c460c13d9bffdb9585ebb38486c66ea648b5b762910798156c216869d5d8427ae1dcd8bc881969a438bc8cad4a9b45a60a0164b7c1ad103fd24b3f4b57aa7f8742ade6e1975a5c8febad27ec35ef6d15c01f3ec13d36e41a8062d0c651b20ae026c794c280aeadb51018a9144b5feae2ad2b38c6e5f8200a7285dfce34e41717b5bb0b703378baef074230be50186f410a9161e239a62ff0f58438eeb1b799e5262b72b03dc1e71df500da110a887e0305b4b3df7d7b0a9249228b7bffc5a876c3bcb2efd8946e6d070656c1b6a99fe486db5df42bed30031c556b5dabb617635388646714bf470992fd19270c63eb405ef51cf784cb5f7458de53601e760e1ee0ce521606448cb3f2dfffb8fb065c08e4d43d5bec52ba89f7406ed5af096884ceb1458206017a68402e39c2f165bae727277bc496be06acd9c41676ff572476a6b55590ba784fdf0719427e76e0ab4a3e1957917a2bcb80f8ae981a4fd3bdeac17e7bec65c2c3d8a866f215cf3377f98d747e20180015e7f6a6259ec2624fe2406d54e560d54aea4aa7b00e4d101b1fdda5617e54fe50bd3b859524d6afac613551764eb530643eb4b8dad08b75640ab70c802caf4b82f4047dbdb741df5c07c3440be04320cffffa12a01b7da46331b211a6604ccec9af64e1cf1aa83331c3d14deb6e88aa998a2dbf7d4b6788a7eee05f4667cbaa7604103c1227f1e0687b3e4b55e08c8037d81d701a7a09aa439aba321d020e1c02cb60ccc0e1575e55ce385158e846d60c099fd1b3f4161091ac96e415a881bde9a477d78386ef4c5a41d56dfa36d5c0790fbb16f5796cd217460ccea5a42da48beb12e9a9ecac5c950515de2411c72d5393c91a7f281ef0cc4f101744d29e20a581408620d90db680ce7e510a00ccb026d2b70268c5cd2f4192016f9721fd299d02ade6a9cf8a90bd299073420a44581a6392ce898666327fc6512f0d30ffe808f4c5302d48eaefad04dc3e90d6252fefcec748f1d26c1d105eb6967e2e3c48239d00a97b5dd4768991eb60350f035a17cc8f8cc752fb563bfe5f0bec50c46a053d81e1f399ebb9e100acfabf49e0d02080bd91ea88270d7b101b0cab100ade843940f21a32629d8ab5738dc9036e0d06e13560b1656c38d9f66c1c78b5e3ca37cb02b73177a3b9a1864277e36e4c7b430e417f63ef548343febbb5311c210114471b8fa36c4e0ef1e590f76de2304206ef8c4f8d93bc62f49024dd3be22f66e93c98dd8ca1d1bc907c864c70fb8a352617b7f260fecdb10162f21c3e10b7ba5ea534802acca2ac6031d818b417531e1405e24cc1ee95cd4a05515bbe0346e36247571e620f4770a3836917fd5a38585fb76f7a217640a9a2f3098e94216552c4fa088f413c0c1adbc485d90f0a78cb93c5e92a8a0fa72037a4f613c35da59be12909b78d19f8b583eea608c21db6f9fd0c085eb22a64a13dcadf3524ece79007c9c47c81c8673602b64eaffd5116abedbea2bc4350f099e738450d108f16257748b0859f7c92aaa543f28f6d9fa4cf74fe616853756060d82259227badc20900a155b690f2b7a522aabf51d4192263b8bd529c23b6a997b3811d2f3c03ee43543b555831432c59bbd9dec3d09e3e77d087ac49b96649dfab13db34a0a20107112656320c3a94d9fcead2c3c2be64bd40083ead503efb486a584faee6feb316803601b56ce94c809656d7ccc37411be55d149445995c59efdd2f087f00d3d3c0bff4113af7377be2f737e34cc1c007776b5c8b1f1fb99ebc75def8b21cadc1a2abe0160d021e2f25df2696e5e7ffe27d0cc978ea13d973fe3c93f3b8bea9ffd696ea3c9caf4d83c004fc3547416cb78f1e200f3c58c85731403482c875ac949dcf9f7d81417bd4d2bce80d8b4cadc9c2434621ec8c110c0fa7477b0da0d5a53d7fb752b1e1d2b4e78c3ddb4b76e29d8e5cbcc144a3db0ca64b07dca08cb847ee3e99163135ac0839f5e236e0217419a9f7dd9db1dc99dd8292cf711eaf4eae803087aa52ad36b710a66fe7d4854c0c206edd5578fb8228caeb267a200caea20d897493779280e1d93bf7b05f74519dde1dca07a1b546886392746453e46d0a3711cdac79caa194960becbb3f0d818507d5f121deb62a8096db51ba8dcdbd94bbffa92ce02880a200ff6199a4128c20f6ae956e03c5838a8fb6849820b4cea31e6bedcf247ebcfc3784db843545c338db9a1140768c80e03dac3d0decd0a6e364f9b3ea4087380b03b1a866804029db5f074c2d9b852d7dde7e2d7c9d71752869a592995058b5e28f16f7770dfa4b484f36e3eacaab5927fab9d0166d682a6ff0a3a2dfd98cfedc81f7ee92102f81f6bb8b970550bd6fde16ed52681028f2630b25e92d28b35c8bf63f98dc5d1786dd0155d65b148d5c8bf21fb420822cf0afb16bf3bdaf8c6e021c32a441e4a690645c96258b597db3d261ce7e503f55b42c21e082309d4cdca3cc26f0f4dbf46f2df40be3f434f1c39baced9d7343d94f6ff72e9f82e4eacbc97f27b108e52a9723108a5aecac3259b6afebecf74b47077d697c40bf4f4d445bcbacfae236a3db14346548730a30a264a77c5066002a681fc1c53cfa493006ed08552d90c39b1b5019cfec18a6a85c926b8843fde9237f2e4371067ed7bd3e0669a46c5046b04fe9291ff629e116254eafacaa342ce2250cd42fa8e409784ed6fa8a7b4800ed47ef8b04bee9d5c6586f7d2e4f7a88f7c437383520fb246b59389a1c1a002ad23b17b5eaceea3df998326236572c03ebce3b6247e28dbad742b3654b609bf6b995adcc7491f4dac6adb5f860447bcdbb62e94f62156f1dc33b9d05bf4a51241ea8b14d5da171334986fc185edfafbb385d48342d23a921e6bdedbd605371892298976dc1c1eeb890838cb9ebc8c718337932763493fc39298f4f474f2e14046d440e363ff741f03d70daaf9a41dfbbd3ef151d4b908335167e065ac9eb674928e63e3c876ef9e4ee35bc730282c7785631c2041c755df5c0c77a4da28792007a50f54b37405a0df105cc18e4f407c4b1c1fd6741b77022e211459304fa5cf98d48e383ddced6e3c1854ea0e4a3edd5e5a28699a056f500eb20d1c89043fc490c8fa36e3c4f76d500e4479d105f94a032a1feb86fe274b0ecac1bca50b8c597ee5ce0f0fc53dc8a2dc3868d4e7e42c40759a0d2e0f62b528aefa8b047a04c3144f64722275e6202dbd75cb651a6d131379ffe01ee1e247d3a03b0a8cf12d8aab966ce5c82db159f354c9ff314d1bc8f49407d8b9d296b94f1afd26c9e3ed77b869353e2c91871bb787a7460e16ef7946c5d782ec5941d45d592bb360a20367679cba562d25f33fe6283c7623b7091a651f58f4273dff78128e9f484691b8c114d27976b10d6e1bcbc4d6abd605c15d65b141b3213a8a4b30b9e6a919f54882097f982cf8e1588a9fbed621b61b24845de37feddb28b0228e2c01a952b3b733ee173ea881619911f57626126386310e0ae118612f43bb3a30161e237081bb71ffafc3b8f8dda712031bd3c52460bfc6431b05f7c43f1c67f1fd80000b69f11beaa281640ae9be1db7ca54863e701f2dc19a804fc8d8063c7728d64d7a2961c69cdbb06844c94d1e0b7934da4882de7f92492616a007fb049aebba0620b262687eab55f4e842069a106aaecc0bea508c2821f30f5d8166524a4db17fd933e4991465602849c75fad22f67e282448d82d2c87e981529da745107db24ebd5de8d79f030d67d1b3b48534fa71d1cc121c75ad084aa5a8d441404920827d29229a4e468bbd712b6182e416e7fe21a261c6c98011fbcbf04100fe018027f27fa6fc19a533b969159db58f8a33012faf91d723b3deb63772d8f8ef8ababd3b5999fa923c5ef83a250d8ccfd36a682164a6cdb638598373896ea66e3ca2d0eaa9ebd46ae5c615b827c93d3a291903f6bfb59ff6c801b3f52fe53ed4259a8747e5cb5c94c5908ff563e55ed0e1c6289f8495911f6730e9a5212d249e68e8157d1486624d0806a27c2af4f4fbd4bd170cf34ee8251ac3a4773f54a36a4cd5c96bc81578050064a0a6520fa11a4931421f8bdd333e485ba105680da4188c2b914d540f7a210ac496e7dd9365faca8fba9c1ed8c59a783282515901dda3780cb080de431dc38f8869a63fa10edf4391a010875b59406ef9def5ba731a073fd61306c3a7d19d67a9208af2b8d863e1406f85fe4b2d6d16c4bc22353188ec37cd8e980127c78f2d83b1cc51dbcf8368cb991250af6a37110a15739324f4a028ab86696168b90c3fb23a5aeb259f5d6e61b5de070a4e3b88729fbd52cbb05f77f985285506e88f79ccadf164983c3c7a1035b0d499299f0e972cacaa0cc8eb9867109691eddaa95da8478afba4c60153163cf0320dd97949562d980821db5aecb4c2407e653e9bb8551913acd4fba46521aa47857de180cbeecca0691f942dd3c72aa31a3091291a244ede44df1b26fb0adcd3cee20f9414822f7126729f1ea73237135bb50d3f72a7d4395a04277f516189847cf56f0bfc08470e30001d4d4c87e25958c8880f445ff4caef874ab235cadb0f097d49e4ac7e3c471d13224020b32639451216370f1acf80625d32fdae8949e58f1f7730a9b64057fee64e2429c471c3200a7ac5cb07f1b522070a01763bb6f68e8da97bff18fc81e041768a8c24c23b57dfbccf360cddef36a994da6dc8e11a526fb22aa5a25cf24333f1285771fe6007def2ccde7cc1b8452faaead4251a8bf74b1a7174ee85e33ac2fb92686655bf2cf11b7b4e0c697bf5936579cb6864a0d818e3222167d26ff92e76d8394d8b4849c38a217b4e8c07b24dad8d17e95aca188c538f1f9b95003f2f6ba61c86a90cf4574280a8e4990541985ff21e9347b61eeb2b9695ce2519268f24d5bb1afe9129fa0703cfb4ed4e091d83c4e4b9ab2ecd36c89188457b9123b29283e82e562902391c340bffd8c416900c5e03aecb8610824b0bda62271e41ea276f218b82e448c4a4122420d651f99db4b866ec9a297fb3f177dd26e3270131b283baa3c2e8fdb5e37531a06a1ae0d515bda1f91b6cfbcb8fe451d4c637cfa736a989d18f4835c45fccba6eb8732d8edd19632040bf18393e192357ecd4308315108fadc24cacfe9f9ed0022410a09ee292b4ca7eeb27a1cf651e6ae35617dba3ed324ff76b6273ef53561d0226c25f03a7218d6af37a2076b780ff00a901063e253b3af004de3f121941809a2c3b693cea4fb8a79c96179989df9ed15164202c1a7d10e944924bdb8ae9abc1e4bf76617e9d9d9a7cfdf710eb2b45dc9f7fc23aaeee6b672cc25efe1dc7849549eea33e3d37ba713b372dffe6dcd0b7cbf4d02f65e948aa6eb6a8f5d419c24371d96b41eb405bfa0df10df38fe6e8b5e39e14bea9eedfdd8bde00ac87578f89a4f20c0bf0766460ddd3b9d45c84c7fcf2fa5c532c1a75313ed3ef835246cf4c815aa84933750b8bb649338588a641374f5159c416204430153cdd6b40769310e4151c8940a53b63f2c079007c1663ef0647b5253693de7c5944bd7922c68642d38f26ffcd82f829e64e284e8449dd1ae35042659215163942b1f35e473c1a0a22028f1700a506989cc38555c0ac66072ca5c359338926aead0541872e1544c345433138c84a4515bc004101f1b963a61a0184733d31008a5a09785c7e0999699aa1013353c101b9c6974f7eef718d1facc60ca5e76e5a9030978fb18a85350daca807715902f9a7fd0972044969a7b6a409ee5bee00ca7edf18e93fc399d0ec9be6ebee55e4c56c000a7eedd35884da833d0c792600cf34c81d1025f994aa0392272ef3876421c7472eaaa78f158a46fd162f72823817b46697b9ab1b717f4f9bcb872ce5f20dc55867c022430828ec5a024ba7ab5e95c8fdfe5347afacde9fb9f2120e2402c39b259708bc50f352c27ef6b251c4a62acf5397a817bed67bc016c578f192ab41b0817cb4c24936c7c56cee26ca086fc5d62ed4fc19090458451b3fc1d61935414e6f7eae6ce35d376e9c877ca3a142c3a118995eafe666a6f836fae8a51c16bd9d74d01c1d39a67bf51a605da52f5caa0d3069c807270c163cc1be334ff771440fdd28db8f6584ceec5ead2546f157a4b21902590bc48333dd6761f039a8236961a0825df131f7f224d0f6219cb343845e3bf510e6a147a2696860ec57c640e67e21e572302225fa72fd24f1d41aef89b1db54703296c81c31102f0e259a11a29f46bad2d8e09c2c146766215ce1c72313fdc9646cb8e5411670d4db4ef99e6587c6ca5f84cf4d3d456abd25d55cef020d6ed0f8c537450752763fdac2828528258011e0eee9b92f629f69180b8885a25c362c75612fe174aa88057b062b657d08a0521f36155c5f06c01713d21578f589d480009224d33b4c2b14a22b767024b613f4446a3561d946ddf24b35433647d71a6b8ab6273823fa011dcf0256cde341e23cb7e722085264e8f1e4155b3b0f6b71a1d84a75c6a7757ebd9ad2cb0c83f9d6d5a72e8fe1b0dbf9d2b28ac7185ae547c3f6fd9cb5eacd6c5d24ee1e776006685af0a6c5d6e53b90aaa6c0f0dc45e77b31bd89a65438262c36d2fbb53298e22d413f2461d69b64e6b9d370e8d5342aefc73c8890629560273179267e7b9092a3ae60dcbe3392582c1778ec36c45d616d88bf82dbc87f5794cb2be9c0a53562b27e99d6caa4ae28e02a98739dbe3c40bdb4b68d021295c5120a1d5ef2fc438a68b0772223beaa9dd98727a25872fdd07a613eaf9eca94a5b36058891984ff8ac4837edf887ccfc48ad67c1b6c344c06fb368fc394c623d23e3a39edbd0861b1fb0ea8e94b08224475776de304519bca9faaeb00896aa51097ac9be6b761fffcd9646469ffe958264f85c7ee2f650c5c067e2072443fe755c2815e251f64e98090352ddc67c27fb43a8862baed0948d241240d0b8a85d7bc86a389612ef7dd330e1cf3a1534148647b193debe16f555d9994177f098fd0c510f3755f51a1e8f37c2c42c02a35d01d035c7af80837e10b23ef90033848074ff8be59490c1b4ca22ded6a40d30635fc99b74831c585f90aa43780ca34f2142022fb9a4ee292ef0e8cd98b7468edebe7695147386ac66ddc9da4915ca19d68b03b9d558d2c54557573ee2314ae722471fd44b890c03c914a22e1f53320917950819966498c9a0f3f5469b58fef7d3b477ef7d41cf676b285ae53f28f24966ae09ead819a6b36dc6fafe8264bd3ccdb9b720cdc0f00e7845de36109beb6e7478082e5009dae632aa38006f8b1179e734f0db7203141102d0e0cb3b3f991d5536af4073b13bafe6b34e3729c8f9f236e858fc6ae65613181fb6e3b637c034ebddbe192f0712f83ab4607ee9d538f9196b3ab7cbe14359990b489dd990a00a7aadba8299225e2f591c80c83f01e5e88e7fae5317a004690004fdf5db2a8e8921513e7e42b4bd8c91ccad124938c111139ade8c8a6420761b356726475633bb2194241088047df1beca4a1ae1386990bf1fa26909ac9819a067f1e1ac2068091ca3305ea119a9d5bb40e317fc5b2a79363bb30dff9be5cc05c60ed5b1d74b6bc95e039b05e8ab52cf7e1d02cfcfec03739596ea5e6e37236a1176443dc6c5d243ccf9825847ad109b7a5c6830092b5601d3fda76a3d8682c8079a337f9e77d6cefb275d4e488ebc7563de789634675ceccb0ab5830bdafd7486df7ae5981f299f68993c50287c0400f36f3b90af8a34e7f3b1e18069e234e20c440368fc8aa01c6d2b44e4811e869fa4074cb25548a8ad7d3e69932a579b6462edcb00046bed5412c2a2692d3c5e6d73d0f4c618cb51b82ccf9545e88bcaeeaf0b77f7f552b94cd6666850011f1b461f71e496b5feb95faa4f14b637762ad1ee85c7356b18b891d4c5b0cf86036c530c98284a9e2c2faefe520d6201682b5301d22c8bd37a79cd1eab9a68d41ca43ef27f070c407c4adf4e7009c05c563b40e90c6357de76eb4434e6a895ea3f9c7462d15cc060cf61b240533feef379a336649f8b5843817a8b7c2a6c763827d82911f4115bf585631b318870cf0c2c3e776b31705a980b7a64a93860783bf8cd42f67ac4b08c83b8e344bbe0378352b689e03fbb9c8ef1bb0b427545b14357d192468b0e733dfca4937669b583d64cdba6c09fecaa1907bb1317f218802061ec7a40640efe9990bc4cbfa42ecc3ffe2c7904b540d6e688377dca2a674fe98192c1e8626bb8ed6e512ac8ec953f998801629b3fc4c12d7e84875f64b0c4b45d7a63297bb6db5d9d89c1393bbc55e6418744fb9d93a7c2e3e7f18c4b78de12434f5fefe6d8e8f762677dcb293f8884db24ceb9c0c058c8601da12853a5f508ca151074afabbff1e2b5c77febf22abb8ff9e0853d3f0e1fac7d500cc55cb3f651431a00066e282717457bff72f42d0533ae0582a1480c3af11c8b02774f81542d1ca22f077b3f228020e2457134b4ab288748b6436ee26654a524ab965a603a9038603b90750a6812efeffffffff3f54b2e97df8ff77daef2eaa5e606aa1a39bc1f7224a2786aee916ad45281035ee431abfbf6dfdffb7964eecf6bffdddd27e1a59e5080bbba3dd75ebeeee1818b5dd6b921935473019dd1ddbff7f233aac91a18c3fdc204589e5cf01000b9fa6133c6ed88186274528c8b21ccbf9ddddddc9d0b4c9a31e108f70e254a35074fcc6ceedd5a2dda35a38380290789001349bc671cc71a9848315d096b1ab2c1e40446985aa1352ac54994e645210224606cadddd5d3c8185c2ca0c27469698402283502e881663f9d67a7f6cffff8574d3268576576827cb7645feffff9f826d468f13413d63798754e59f50a36296300980ebea04eb66358e630adbfaff6f616dd97b11b5ffb1b607135b7d9b9628d8348ee34d28975a4005edad7e10240a5f1d29ba1a2b411d5590d880a272c2484215013c193b8c1c87d7a4e6c88f1b7aa6bc984d8c7242b22cc77266baf90178c2211434316054a47081c724542335c3c4c6440a3378b34de338068533b8e55296cc0cb6e8d64c4fcddd00438103493c86e0d039418614e692dc905c93aee916ad2bc809617dc337dcdd4760d1615cddc6dd7b585854690a61ad54c424f9627e59966339d314bbd64ef837453bc21c4e39a0724cc95ee805fb37ffbe18eeffff91c9430249aa3c827ed485fc6db9a4c4e6b7737d010be6d4d4aa719ac1c94ae6453982f8b8b8df930331d1339627d0feab022668a7042565858f1ccdd3d8648c6281ef087184a84d5eacbb21058deb03bb6801129a21c52709c60933865c0fbd191adc4b81c36188e5df85e04648159f153d7e3a18b22cc772ce3aa452efc259c00f951d560b19563d28a119650cd3c516638cf5c518638c73bc1c4fce27a72337943b9a36bfd5f013fe0e6003910e0f3ce18ee6eaba757777777777a1f0ca576cf7e1ac50e3f6ffff7ba23679e7115dd32d5a532347ffffff39ea1291a9d652935c96e558ce8f9582f47e138b8c82e4060b2eec8e783a38cd1144ac987ebb711c6bdcddf16fcbde0e4ddbfd573dc7fd25055480dcecd0d97982f317b6a3a0ffff93a84dde970d07422f0465103d994a3293e070fa91653996f3879b304a491414ae03ab4433c8261df68ce37882caa51857b22996b32cc772c63930364c52599c4ec4d0a1325df021b2e49324eb5957dcc21cd0b4c90f724237c7629494e440ade0ffffcfd5b07fba14ab711c71dcdd656fc86fbbbf78583149cd51ca9e0dde1c318aa59ececff24415a682b04461918306106905f15fc968bf4592432aee859eebd6dddd850431aeeeee1e082fc22942a1c5b716fd46baa65bb476ed72d07181aa05deb883d2bcc1c48916f8ca2a040e018f42e4f4d4f41071b8d039a101fb91c548c6c8c6884763a5c32ac00ac904859a223354f0e80999556c6478145e141e0b660e30c5850ba52a39a92b93ca1493a9aa3905ac533ffdff7f44376d72c491ddcd59966339ffff3fcd0a83ee8e24ba57f16dc74fd4266f96e558cef4ffbf052b3ba205ac6c91fcffffebdbbc33d7adbbbbe31e8ba7ed5ec37be2358142a9e4a408a231f5cd75581b58b12a305480b811a346375b3c539464598ee5fc42684bd640135ae0ee0eb57dc72b852428bbdbc489d2eeeeeeafc32f89aa40744db7681d22e6454a6868aa0a4b0590aa2420ce5dd13757e24592aa2e5cc242915a158f163e7789cc7d41002a3edb592cd9346c3c12d01f4161adb5b685d3b449a8a9aa2b5c8b2ce289165650ed8f9124eb5961d02debd65a6b754c5b6b2d500770087804ec018140a7bf5928cf5e677dd2ffff2a184d9b5421e9aaf0cbb22ccbb19cfdffffb3ae383823d6dd5dc8f616d6d90f971c4d9bec5d60769241e9a95ad5b4c92557d326b78b081715d6f8f2f0ff3c2e1b3f3a64e303f6c023031613269cdb30659b12aaa0b3ab91015208048512c53184e308470f0750f76f8121437a649861454c0cdcd7b09f2618c290653996f37f1027463a552aa560c748d7748bd6b447de585d1ff2e72efc3fd5e13ce9a12808d594243a824836c2dd6df68ce3b8e286bb2d957464447d9b9fa5dddd83a6a64d565d7d10944587272481c871128303931114b1c104a54a152f17e20a31f225bacb84c8ef7429f6bbbbbbfb90a5308898e32a5ae44c5115d140a26146c8aef18335e57f271df6ffbf8661ac5f64bf67598ee58cc2f7ffef6367daa48f9eeb0328cb783308c9f2ffff2f838402958a1b2699c4dd6fadf7c7f6ff1f4b66dae4082c9b9b294fb6feff1f4b67ff51180362c986ee5d3b6698a85c35fd784ca420b989b2e598c58a2c46a8f86498b0d91fbaa65bb42e0a11ca4c9bb4e1f1f838507d6a22714e3b77a74abe5e547e77770cc367bbef1069b24364c8440e0ae7533e3a7c7a486977f72a3ca24a5377f7798304f3e02dac907c4b3afe82ee509bbc618d3b029a4c1a146a377cea0e2c1e230f9df3e0e1995c2423340549aa743eaaa4a2ac44d9097ffc421cde944c56487be32b49edc69e94a7a06b8e701a9f06032ed890e317cc51446342797264066521caddaf5b9746ae8c64a10981477664289239bb168e9024ab15865a1892838773a99c9d5e0e8d39c4ddddfd04a5aa31f8a1c7d0b4c9a31ebd95cebaa503aa76a13494736ea9f79c5392303704b6a4d11dae03efa29870a6aaf058c7dff5d1084e559e6c64ad927084a895d31d9352e080b425f09b7c307a53088ad8e4837125484d71bbba5e5ddde5b5ce0e3eace275c90a72a20e670318726fa8ff3581aa5f20547d69e10c04b303b326d25ec26d2d2de4cdda6c42056f3883f36a62fda0322e3dc2eb517660427670ffde7befe501c2b3d068d6de27b5a1008e72076a5acb6439cf36306bf60669b7821cddb5a0f844d912f41a7f90c4b350a4e10a3e60b1b5205c51848a69a1d4c096a0ba7ea601174d529bd600d60358ca2f12eb6a19dc303818dcac2ea10cd65946d492da5a0320925f24d626012725035c60668d00cc9e491c9e495c6be622db539ab0a9aefe0a21034c77d56f5f35a8c4746a29a5f5f5e1d24a4c5b2935e1ab2d828228290741ae45a81ad44a672284e33886d256ebd4f7ce82aaad35b4b5560de8825e44ec116a1b0677b5285f2060ed12ca5c3d13f4226293401950eb4b02307be2ec4c6e136a080070852f0ad0f045b5df59107d4ae9b51f9e56626eebb417ba2d2d745a7990e40bdeb69adea9fdce9f0b704d93b2f6a28009aa3d817d856035fdbd90d954c36cfa92000cd57f5f8bf72fed85eea7515b431462f842b3b2cc71bfd0acaca9c7713f2d94355b82eafa598919d242e00b9854b4ae5a626e7fda0bdd3e5f24603c9c3d19e5eee1ce141ac791850c77b65caac10b77b00821c08d1a352cd46061a5cb2009846e6cb27143a8083873b029a269dc38517389ae88b214c914d914f1723cc04b3231258bee4ad595208c31c6d87b732ac9eedcc0ccc06171c509100611a82b1ae68c9fbb3b8e1efe0007300f51b5deffffffa7b3bf9dfdedd85f8ffebbc3638e101d0992752d6ac094d06887865de36dc84225436543c5a3e2f91b46f8fdffff63f9ff97a4acd89f653996f3ffff3f4df2e43f783f787ef8fcd0f1ffff3f776accb9b3652f6667eecc607dfb1e6640618e1339c29e10a11a250a0727de637bb6540a0ef5c4f856d8ef384e564a39bcd21d9f84c67184f1b4658fc7f8b43d98d86214be22e923e8c3ca0716cf9194f48ce5dd0f1f36062177975046d714531d512489a9f692a0987922133c618989959b13373a529bbcb70685568ea64df6f0082b408ca9bbfb6e3b16fd014e9b74fae007cab6b063994a297ca08836f5ba7577772b206a93d79b54204316c48c943f915546ac165d5b4e65bbaee916ad43c8252b4756ea576380c21b0db566202b458c17a36e872bb8aa832b9700192217342b6e80a10437b1f6d479ca9630084f54c175046cad101ee1db9d1932c66418543c83876f8690ded23723c56e6de99b9193b9b2599bc566cd5784e3127be4dc430c59c4c14724e52362f21111b9707c44412cf8885c10d9b86ef22b8b2a87d8d23754c30e19c496be21a71d6a51457e6de91b6a61570c7c3d6a6a8efd96bea1a44db7f40da160bb646d8188d44eb1eef66136b09db5d65a4b2ba6f5de70265b2d8c4351c4b7bacd219c4dfdd4e5aa586cf56a75c5b7e698ace5badb69301d4c07b3991c3c2da4aed7c58fef8b44cbd6abebc5145feb487275b5b6cf7eb0ae4fefd5f845e25a1b2a7e8c6b38c3fbba0d6777dfeb3f83e1c2996f9ffd506d453b935dc4dd63510e442c6a9ba3b80ba502eeeb1b51b6b8586025b34cbf5064778cedfd1e980d6c373578d964980e6603dbc1743452015345a6d9534f6f394d0fe5e075dd75f6236a3a9ba215802fbb88bb9718df1bb65a18bf48d4ba33e5def7991a004d0de6eb7d66cdfd9ba8fcc3aa8aec22ee60e24ee4ed883c730317984e76202dcd2eb374d3d98fa8ef4ca77122adbee87aa1c8ae17891f91d2bf32eb5c2f122d2925d622a5410f54dda6daded705e80ca6fbd9fb4cdbd4f845c2d21e0399ec22ee76d35b983ef9cc77380b67ae9792ec2f9ba9656bfba4512edf63adaeb31fbbdb49054c9d0b4c07d3bd3ec0743bcac1eb50dce9c4ddf7b8bccfb0cfeeb63397cf7edb598bce5056eb7f714bb4c0ca5602f0a0ab5d50812adad6bdb6ea96f858a4b5749d81e0fee39b81575d82ad1b543a69ffaeb58bd56e69a526ccab1b922c7d327ab68b4cc66ebb5c1906b50b2a80b5dc22cc11d7d256875bde99cc8c081ca655adbbb816ad82fd1acf74227057b76632331777b54e040e6b125c5da96c5b19a30c835a027e8b00b65dffcb6f4b1b216ff90a41d2b025ede702ab4d20937025505d42ad3a03342b6b6aabc30b24ad02555bda0524aed2240d2b9d217eed20b8a698d2d90fa655ed01ad3317126cb752da3b0209733bad04dd520360d70d2a9dd3015eb5b43312e6fea99526a98dd266b53cd8912c7d31acb62f46cf9e5aeea07491ed39479c2fc64ee78bb1dbf382d7543f2d02384ad38998375aabbea54e86a35bea32eeb7a495a078eb2ece005bd27e4aa0da83596956d6945959381a660002384a0b299328e50653534ae50601907aa8242d1b0a3a886668008000f31800040c8240144692304fa30ab23d1480093a564e52504a100b07c54130281086c1603000080483010100000808878118080fd325bb06070b52dbf84892117c706955ad0a4a710e9e828dfa509a8bfa7f99dcdc1cf10fa330a434db5d5682d9be4b75908b766eda31f0b80ab5eb977c5670bfc7ae18fd8c001fcf0a0786fed8bf86652871413701f975e64225ebd98578d6fd6bfea54614005f6ee068403977e1af512ba06b83d0550eda79bd589aef61cae96a5f9357946b53e89e1bfb70f2a425b6e6f92fef8a2efea148a9d907da21ab3f3abf7e263a9bf6faeca610f03c9e5aedc6036533bfc2a847d8a32963444704dbac2292d326a9ae8a0012a4aa690173e3d51514ffa260cbb8b357e3e6815b81f60eca215e85f7a901394d9ab6f70b9d29b6a6d26f290103a796c0170256461c1bcd22a02cc7cd6505ccec3c85cfdad1f96005f8ac3893b33fa8736e4cede858b6ed4e8004b716a16efb160bbd54560e0c4094b23b16a6bea8a72846ff37fac37eb5b0865ef1cb2e79cbaa07ff8f05e92535ca9a62dfd8ff651995b4fe9f230501f9920c9e8ca0b97ee51438940233b0a66056f6488a2925db1ef91a082d1eb545a8f1dfc5b3200115eb2ae07edef7e51f16171b18efe43fb956a93fd0bf9936dd51f709230da8e7f0edbe842cbf1b9ae2c704f5ca7769d254bf0de4506a342b40a559126c870f0e261b83b2ed7c243cb6bef2420b23f5796a45a87c1dcafc2d6d802934d988b0218f49dfbc02929c637e572e725657f6b1b73b337824a6bc661ed04a078e03206756171ff98043f3a99ed23f37c764383100775c6e253c46385015aa573e00f5ac86ecd8da904ff63bd0fb1a814827037ca6bfdaff85cab77c3042b8f0c5153ffba98d230e74a7af1495011a518a75e4a2dc52a7c1581f67ed984e9d0582379714b3e510038e280fe7a2952571295e6e0cf1f244c5015df0dbe3152c3c89694ec2daf1d896a9f2a2d13e69b4667300598b107505728c22f52fae56004fbde8f1a701d0982f2f33f27ab94363ac4787df22d64d847bedb67c8ae537ab4ef2f686ad2b2fd00f89ab7eb9e358f4d0486fac36dd01c252f48419c339ee82b87ed7dede9ec5373ef1d4e04dc633dd206435701f712f90cf62fba0f04210acc3c809441d0ef0756462ffd2eba296625811ceaa1a7b58d790a858c2744ffeecd37b71b7c2d457967f86fdf413d78364b22360109da8818577bcf8691df0cd0802a57152a7455cb06729f188f050c9b0abcccc8f7ae1399e51d7e3f806e3d3b57af6fc9699488a727a4ed39290e81fce26d23badb69596e05374a5830d0e7b34d901eec21685bbff4e44fcf8bc59f8a9891812eef3e96fb98c68d071e0ccaae912d123d80201f251298756cd78c7cf4a148f25801e1d09f4ca7fce188c48d7879709af6f89a6dd4839250ccade3ceb6229c16c0d220ae194a9eaa8036e5f82545633a5193e9388fae76341e8b9fbb8a9cf904a237045aa8a174bc8e871cc218e28c5cc87a3bfa04f9b0888c2d4eeece4d61bf62104a1bc9f60b1b1dd6010ac019580ed3563f8579db714e0cab42ce9e680e802feed7a145a00c4560aeee43e3486ab09ec41dc65475c682c9db10ee935936c1686cb3ce1ddd6e548060669b55babc3c1907898ba025a8375b5511e1843a04a1f16e80092ce988412768af502f20cf2e98c4435d89d45de5cc2a529897371296e8ae9099b676939940d4fbd0da157851d11c2759f0c459d029e0256889ae4eb734905cc67f310e92461af2905c097d9c7a626ffc4db6648107ec84c87ff355d0a8dae11b142ba925f6b2a1c87b14823e7fed17fb48e6929ae3b83489e0491caf09cfb6896eafda012977ca87b87ac4e55f5624b72b521d35c28fdaafad6d7a6bc349e002ad2af6e5c6a0ac6824600f08a1c2a529562070411d7e05c02b1388c51c5617202a51f655e7c98a57b634c956b47de9799c63d802a00ee9c9716a9968f578639ab119c54fc4e726a1fdbf4043bc5383db85c45019395efbd1695468b0cdd5db9b5b704fdc1bfe4288b3e09135f86936e91fb80eee43e64dda62184c5a0f6aba470657cdf106a7985e649133da1274c21eab016293a045aa09834d189394ab413e68a97b937bd598b0055b440f1ba29b42e3d52993c5cf23c013d488f8dc85281d8e1c80a57569428ebf8c30197b0d5158614ace74d050c2d062c3f80e4b58d6069255905692424e31c30fc4bc4a32cd782aad9a6bc15975260d4ba0c91dabf3961fe2206f589444a50f9312ca799ed72d7d1f465c7854d98f45c40421dbd1b8390660a27a4a26c3855bb0d8f33a5c9e1c1984e10892ca7e00ac354b9c73c5ccbf7c4c06943e94b57ed324825a4c14b323dc09f6b8a7089c8e9bc74bab44617c79d9aa4e6d3a81e979b440a1516e1ee3443879304ee338478e6127cafa3636d1a0bb14eb38ed429442e4d1f5c6bb4b16c2d561386e5116360a85d3d77f40151611bfe870a6c362602474b04c829241d91fdc8962403a6429ad7adfcb8ab5c385124d453faea54a8212bcd895030c0fa8b8ab74f0c74f744a68fa3669ebf0e372673eacef4a21746656e33dadde112c466b46d70880baca72fc9fba9e09be6ef4fe492ef0b143a240b8356c7e5597391562f22bc19ca3dcd0be80b0d77085c211ef5a9f4197ea2eacad68238099f26abf44f62f3500445e1a1106a170c992205837a8616e1a8e70881e2c61e7d6b9291b61afb5e58a73c7450b5e55f3ef539fb0577e1147dd6e71ca5afacabafdfae91ce6dc56930766cc413205665417f7c6f5fca4cdf40e9bf4fc84b8ab01a2150f4e8a0e01fc537471a66a6f7af0e3a19379ae9f9b13c7f705cb369861db056c834950f2f2f9d0cf4cd1ccb50a9b3a2fc1bb7cfb8348ac5d7e965a00cd2b6464fa8bceaedf786943052b7868ead0b4d9799d26639fa233803a3635931960de406e6a67d46aa3d8b822f4135002e9ee97319a7ea7f4b6af97e6a12e6ab116ca2b1f8ee84375465ca9629acd9e4cb096527621325d1a87e130581ab6656955666aef6d2586b0d5a9dfb3ced692ee6790e10980a1bf973c9505127337088d410b4ca5fd13ae21ad87c1a3ebd16cedce5428a689d0c53778b8a695c4b69803e70378830d01c43b45b0d17638a5ca75e71354410219da43468c5f376359bad6e2059a3526b260bde84b0cfd463d098437bd54667d1691330531d058507cce79819124863d5d68b9bcff18c8ac498add8245a103239329030e9f9404d9965768e74e96445f5d4c4caffbdb73a8f8a7326c1265dde223a01c73e5513332155c08b362c40508807b216ca0b4fb63bd748a0ce88b2c7138edab9200353e8d8c4ccdda00291c9233b7e66d4275f459a552ccfebc81a5e69f2dd1d5e0acd2251e96a891ea19d280169724d5c54634daba59a8e4a59bcdf78468279cb9ebb6039a0e0a54686435b813932bdd798e10620e839b0c67392c191d5c777883a596b5c3fbe50c1e07fa935e6b0280b5cc1830a313e1178a636d3fabe2fc7f79b62dafa5c7c78a927591039ad57fa8f7212e0e4e3bcaedc92485a92d0250d37d8e6ab637d7ee364e613236caf9829ea29df56ea9ab014fc21ff4a1457c9bfe7327b421159a045d369d0557c24c5c6943e6370b58d8a8c3b4a7c38c9656a2f364a76407bad98ce1cc733455b4d018f1be51a09fe18dbc03f1fe29f4d8cbb1ccfaa9e17989888067c13abd71c592b4408076a6359ca40646cef88245e54f96f4b3c4b11a440381927720e21a338ce5a5957aca824bd4f62a2fab2433cf66319310d9ee141b25ba70f343097d761ebe66ca5a0216df83491a4720243a5893feb43f88b137bbe505f513e6d81c4dafdd52c4bb4e18371ee58019d0d2f315c880f50675bb65b0392d09058242217832afbe50e4854ed4093ac46110d58082452d75730f25f342dce6cd9aec1a1405c0f09557cfb59660e8989e67ad662dff4618eb4a4d2852cae738ea1c4f632117a539e2047a071a9505347d00c57086b1f4f796fb92b24dc696b827c5b4be043b40e8c1b561f59d85bb02875058178c5d69f3784d50c0833e4ee14826d40773d17c4f61251f888874a347678f6e92456ac8ad944a50f40f960ed7fc08875f40319f098172aad0c84dc98cb18ffae67b0c90597628509e8014b319001398927b4c8fd718054f5b96b87ea01161eca9535f62b5089ccb25771e67c0046bb0b8ec7780907f0a7dcd9d47d2a3f704866582271cc703979cc0d4e4d111722e99c143fdf0655e9aafb5ed44087d2ccbda451668c34e95db424158f5cfec67d455fb56258edfc21aaf6e2b2d77c9d37a43d4e3822c6ea425d22f383428c7322091ca108f2488cf1275f9934b45c08e228704a12df49d24bd32653f0d2a4f17c7d47cf763a14c70d6f77917a5a4a016f9a4d60f1a4b0195c3d97b4931e1aefd7f6e47cef36506a83214b6f9a95005f2f22786bdba20b1653a96a59a914069321b8c1468cc7f279cdf69d52129441ab6b9d7d997c56214baa9b4841573df8f4c5e591786bf4ce616134ada02e74ef6a625afb9ef053414e466fe83f58d10da54776b3f19508deec3cbb38b7039ab844c288e4290c5893637465b30fe2a4df3700216d4613e82f7ac846c8980f7f2077e49cc9fcf045dadc882adc5dce865a14594d8ad603ffe01998459105a4b033c5fe1023f6ea06a7df226111e6964e7b4cc6ec6a01762791b0669b20890a65b68d6a7beaad92957edb33544dfa6b9042662ffafb4210bdfb39866069fe874dce27cfca733f72f8d7d4431e341d60f61840905064efd70b03605c237c2b31d939ae050aa0cfd5240d8d09d7ee56deb028bb794d09b9de26b4dc4515a29128780f885e22b6640e923a4eee3a5669f7c5e6af766db5328f6bb2c38b729c26794e385890032b669b155898fe6bdd887afce9a2957e2dd4e1c0f33fa9283a622a60560dcab3c32e31b98d6e70d2468283cda99c8d76da18e03cdd964bd5eeab7def6b380eb79bd837255aa2a42a140e42b63dd2ee332306d7d32e2bdd460a623e380d305bba90cfe748a04958388d7037697f830dd3e0ac21cdc6296d385fea249cc07d57caa5549fbeb28db5fd13478165a9b02b139402d906ca8eb2ff6aacc2d48ea0b8df1c807fd37ea26f38005addf2b7c64d772d52808386883b22c90886e7ee528e74f2622b54d83b1759eb2a02b0e288e06459b757dd34849befe9e4ea08ea6099a32819620013dd50d2dffa493b3d08de952206b1f465b5213efa1b94d794b7c49ff30c143d94970b07eb74242e015bd8af730ddb10665a3348ddef36ccc1282dae66d6e249bb4a8e4dbdbba6766710e98030d5170d9b8f60a7ac0b6a8df28f5fa3fb63439286c3545c119f0bffaf54f6ebeb41d814154e84b044fd4f67d327aaa904dc3a7bd2ce2c1e8bd0e3cd1f758a24ac63cd2267b85066ea48177a499875dd82013dc9b2c74aa19a1b8727f2459ffd0ff8fb903f0c509b50f08dfcc1fcddc782bac95eeaa60c7cf770345fa586466c9b2aa0efb904186a063093f55f00a4348ad1e36712b6903263d4bb1801f1a760ab6c6a8f654dbda0668e2734d1b35f93c0a72bdabddd2f6c7a4d802312a085221e363d944999d40ef3e341d042448071531b8958965e8bd13e2ca0ec6fc7ea7a475eec89f89d94eacb4812d773a864620c8737b5b734dee88b75384e2d1d8d75b0811bdffee8f104e5d7ebd0379167cdd48d60a5b6da4ea05c446c30978aaf47e6e876ce7d8d75770876958dff493f50ec5051fcae7652ecf053bfb7624c228c9902880c924784fe2d9184baa71e5ee95f0ad0dec9283ea924a09a5de23727d1920182857415f4cd2f39551e13623e23411d36202d0f0e00ae54c49c2803d0e7cbb8051e6d7891a687888312d676c15b2ad25b4f3aa446aafa03d1737479b6e558c180b0188967d5a39a97933f999c1b6814086bd165d4a731371db75c3374c0fe8bbc4e6f16cf4ea82665eea8f072970501a4afeb301f5d7b42ca9e5ce50e94ec9bb06329da001261a988253b432db1ec28698e9f9ce738065984eaa7612d37cc3c47a2bd949c53bd3ad9a5a04ff394f08a4153afa03ea366b0b0736f2dc9bcd28a839801b9c0d239527a1c41f851705f2a1cb5fe04106a79bd14d708768c8312c462d10e0a04e914310588ec344bf80e519a58952b08d4acd7b5f1d7decb62ab8661b4d49371f703d2915dc6583501d91ed1e9067be9a4d2a14999b6ebf1e8f8b1b6ba5114d0061c60e2d16dff47d701708864be2da1398af65200421b64bd0058e5707b50c22aa1241c4ad702a485864a4b6702b2516b30acc558b6f3328858178f2e5da160bcd222da8ecdd61e5c7122094e42ba43f38ab0407ca877dafd9de0b274dec463ba209d9b9b4f4943a9191e9ffadf108810b45b2568a64264acbf25252fc246e1ef6561ebd1ff795a9556906cb89684ad89b4de165e95e6d4e04b5be2b4aa4138bee4a36136087752ed3168863c434967257a16e658095a5ea5353e555a54e17f8ed562bac2fc1b4f37fc371e34686b3451d41a4a72b448003471d2fb03c3aa31940c9be383e034c0e414472b2e55f75bcebdcbedbc8f966321ef3137837e0a5d5e4b93ee297033aec611d3b0314a22f8a415281444808b473e2586aaabd0837c3fd6329a41be5fedaf1580927da902518d32fa7960a99d2c4643b95d43e80416485402929bbd27545935a35fed92216389c95ea3fd383f97f2a86233aa55c3f9df31cb358b297b82834778461b605b87ba6cc4a156bea731a70157829e9c4e2a4be2c710b127213c0bc606c753c034298b04b92acc1604a8b560ed04de420979eacdd4af6f66e40b2c234b2eeb2f3a42274656bd01bfdea79359eadae4b5903bae5ed8275a045f03e1301d8a6e27f47ac7914e6c6fbdfe5fb353c5082261665e49eb580817fb697b5292e65944ae3462b299f3e43af1594c0f628c5d63edf0772d85974dad0488883c9bfa070637cf1e57a5b143bc00a1eeef3196449b5327074aab8e7f86ef050ee300dd2d5e340f37a7b72c222d492f88914aec26f1464b0cdc51bd2530421f32765bc74e003dfaf25dae8e56a9715d7074410a45998a6f6a837efd481961929575b1ef0084846b0ce6ec51d7c369012fb1d6985e17f2b364e5bb8227c5ba3119fc147481abf0b608a2a61612cb03a3c009c03d7ac35cdbee4a1f5c0a40510ea48992d44a13e05c2becbe9f0b1041c9e395a674439133de4d74e90b2eb21d2f5aebf0421f977228471e36c94380ef30a7213416ae0836f010ca612ec98c823a9e23cad16c6861348495b4bed75f95758d55ed5dce10a77695633fc86690c9724aa3553239f182e90c1bfbbc1218eb11c42cd21905f17e5ff4e927682489e1a32ecf864d6d0ae17e204203d173b476272c7be662b20407dd3a5b8d3504ecef71f8974dbbcbdd2946021b15147a4129de8ac2581d1eaa9a8c545478d4e03a13b8afe303379f082eb5fb07e97660180d5776fe6f1ece61107283f4d5619da6d006bfa767e57680b2915bac2fdbedec2a2e665d2266478508defe81ad4b159436a670c9fa40e960e9db6e29fc1615e175016a98eda5c44a3aadd3d0e2fd8929d4dcebf0f28cae34bb4ed13a6c593b6bfa996c254b0ba96f75acaf55b87d4d670b9978c26235dc82af731386ab6b07c057948f03943198d7a0c1ce8365d3605ed5e3bbc28e6ae35354f822854760aef070e3ee9f7c5933c288058c5c55530d2d235afcdce618a08373fe3044d8574c3edd26be57186ee7db322bf0901cb46a7292b0d598928538a1797dba02a4d48c0461b6751c94d70a3cf64b963b58b4b1081dfbf894ddb50c6b08e33364679f12d43c456e7f704e50904562a884ccf39d53bff2918e12a04e4c85815c7384a8aea2e648ab2fd0aba4d96a51307281f2dc9eacbe22368781b4a401588a5dd8d4228136c390d4252f07a1bfe1db56d0a70a6ab5c57ba490f54fa1b3603a595f5d0e6d91738491dd77b4406996463ec369aa25d37ce9821a1be36d7a53a3394352737ef3b245ac632616fb25c3b26c3bd7287456e531fe1140e90e3e245f214bb8609c613d723b66748b172ea2cf30d6481e07f60b8a25f9260663a110ba5bb2995d443114dcfdf5924b1e3d7736625000ead863e31786b03fe7439bbae2dfed8a2474b56424a2262b33ec7b1a149aa0197773232be39e50537cae1ecea671fdec372025ad74e8b0930da1cd36fc1daf668d3380469fb8143869e270eabba24034081227b4340a24766db83c9c681cda7935e9120bcebde756572f34bd585ef996f1b9f86d59e9c6291621fec400a568d8e376ccbbb48ff893e63bc537a747712fcbe9c51e2669239987c5b7d2bdcccb007e13bd411d3343375f60c8e87a526bd301f1bf3a53fac4580b049f667a50ff3c1544473e86cacbbd7d6e7686211da05cb9fe04be7d4fda09fb0b45a229fb6d1f9cba0d5cc705c4d364ac5400908734d2de9349ac4e2c5a6ccc9b2efae75b1a0db75e5dfa5812246371b7cedbf5c5b6bca8894309cc63caa83d41ab66639743a8b5e1418135cf64cad92bd52d04358ee06ef2c939f7c7c76adc8607954e151f58b87b111ac324446f1ec98eb5bc5aa8b20e45fb9da2b254fd8714b2119dcd8eb4db35e0ef256aaaa5fa08af2bc80265a2d8821366522964fca80170f1097196fc168287e610e7b65163e1e88fd21655fcc6cb2eb7ebbb17157c46b7c58eb57794d0b4c3418d9aa24945d7e7fdc4af43d0e8b145b4a5d9a0ef6da2f5f66ebbda05c738b74c28d25f47786619f32d2040637bb040e1d0ba4ad9caca70c766ab44f4f848ff6bd29dd3ceea8b64f151fb0146ea586143ea6e1103e3d8e0f4e793c158a7754065d6d355d024d9e3387d462bb133dbdae04e4a52f44d074e104a13994657facd9a4111ed56ece8844d668b26d647a40b8b667450f0cc6bf5528a299edea411f550c124e6551c223c023f5808d94cd62271363c0028d55c28c4da1425893789cbc3dcb22fe16e3b32c03fde3bacf5891687b67ca9de788443cbfb0e9f0a54c434480c8d1135c3d108edc6ded7a2671136d79dc12edb0d5cea0241e1681ec244bd66615a3913b51ce191d3f822a7924b27b53fd507fb3da99a052246940a25c3204969f2d97b5829e3ca3380c991250d2dc2d321ffa70a488e18d75bef1f415826b3ce18c798d1fc486eb047a4644000bd4469abf993ec225d12e6ea8845f1127adf083894a33ea990b594a9021309cb20418f261609ab9cdd5541f8395d51786cded69efe364315658b0eddd2398da9041b378a8daf332d81cb72626526483cb966c27bb4ab6778736c9a63a5cf4608c932dab933c07a195f68749f3e3f44288a4d1661d3817f36dc9bdd6b38c0afe4063a5fd433d03341c05c1d21dc5baaf179d8c217b8e5ff669e54bf1c7b0d5a35cf1920d339c9cfa30434052fe4e747497585588864cf6722543a07dd58ed9af02b215ed3ec7c37839b0b24f0d8d9bc18df6ea00a0db0a60947c2b5400b34e0056b9bf7ce870c8fa42802de0dfbb4073b816e1b90af268b7b428008add5531aeb0a1f47a26c1be7bd752a0030cb40728ea3bbd15c05879451c53922c2796dfcc3f4048671f43d00884ee8a73eb65021b2dab88165140121049633b2f3d7fda65cba4358de9bd481c45c108aa25eebd7cf4b8a83f8f595b52990124cb1ef36606d82124e9ed062263de546892d14c76270ab1a706e120459d971e60dea2d6ecfac0971116aa16ae34c335e12b740de28b72f392037055fb2b9484f2a2a78d81227acb9b2081d150bedc565265c79a86e68ef1f65d082f84627ad3b44b202d816a56619e31e71a28bf65cb104babd54bf35ead2365a96196d10951f230c1f801ca5cec3076099d123514a80849fed2a09b16308ea2e4cc71504a99d0a844b7a449ec0035df00e55c1744e0a255bc69bb6546833044f8bdc9e75b09f0116e7a5c48ab98657d4f608c34a500b6ca48b8d08499406643e142ed423faad9e267c9ba2c3840475ed0158939831bab02b2175e6c24558b150f94500c894065d5f9f649f8f0dbc248aad894506b12a3475a8f98713e701c1216c271fb57de275b3837f0c43b9be9744d8bd23817760d119c0c7a6ee3ef76331852066316b1379752b890318e7fdc96ea6336e90f2dd761a577fcb76e61bf1dd67510fa2018e2083fa9fe49a4ebcef67ad7b8898744053fb03c2631cff42702452547d7876e38cc46c3c62876ce278c92803a8613dc4f34a0945719e6fab87a205dbf94620486ad7d956636198c4dba41ef8e125c72a3e8fd19619b539644adc5ad72309b7c08d930cf7cd0cb2bdde8e027e3d9e538966936f2b5e36f273924fa9d4f530d5cf4e7ceadca6056251f0f6a33210036938658ce2a2d0ec2e55e11f7c3f30f9a0b699da808f49909c43ac85cd10a9ed9477abbed0541b8234846f345f1cecbb29ebbfd4079bc65021279fdb0523ba93846636d4172917a070591b07fa8b4f4d53fd5289b804f851d41b418bbe5c191113837f475b9786901a84ac23e9eb032e4774d40057504e97a69338fc21c00c4a2b5bc3c239b188521235c3bc7528c15c3b9ebad8a402b62bca8f12cb5dc9e3f088e9ad949b74a3031639a07c8e88c9a7687211c15291fddf826dfea34fbc84cb2836c47089910d962792594fc640af4dc641c2c675422627a01c86cc7f183131c3e68e381127a3966a4cafed808ce8b9530276772b09814ccf6a203aa405275e3bd6f811aac6b993b1dc18df49ce518356ff345b1a5b19034d3440af03bebc89760cc095e87bebff008c301bf61c1cf211245bd9408c4a52688991345503bd4d159d6017cd8c6fc06dfdb60cca75bc007667b2414831ed25a27411e89fcd184abda660281fc6126e7152b0226cceef2cba62af89e14f31ae2b42c12d6b6ca87e4a09052060d7e907fa908041f5a9c901fd9ddb016ae8427008a7d205ea8e2a9ff798a924f94312d08619f9d4cf017da267171da2006255c92cc67300aa6fca4621c13eab3633c7397df4bee74d9851e5c283f95a4224a0e4b354f675e18ac58fcfdbf43e5dc0683f6c9c4a9c9ac825a33635fcb2dc9af884345cc10091042f1bad15338e06c3d1dd26cf054ab2218e61e5dfb03de9601c5d75472e447fc865df6c3dfaf5e3d82c6d347aa5d94289da541a14f425221fe3041de7b80d35d1cbc8f50556b6906a19022ef32c947329a540a136ed2913129ae7f9b0ebe36423d295e2225834310703a9edcad54d1992235059ec11c59193046af4c7955ad847349743ab88b9f3a503113c73a8f41cfafeb79e8a896cc6627a2fc53bade0d1b0db8193864adb98438e7221ce8b0ca22abbe44a96ee020cc0678a46ac468fa5fcbf0110e8b81afece20994c8448a3e1e596686bf461ea20cce6321b458929d62939f8696d2351d6efcca88d6214ccbade96afe5867c8b006e1cddf09f148cb85b7dce03d5e07c43007047953922e4974d024d44bf1e08a0fa6168199086901f6ddae57cbc03bed2445156c63adb2a8e6fd8a1aed4c0b1e258bf1dfdd4fb811f598a38996b8031cc3a693a6cc52848efda5131812489883902275c2eb64492fea331112627a478ef1458978ca5c814aecdc99016bf27f10153132ef828421fc64b38ee05f881f82e26a7912917d94a90d762fa46522f069207ed505eab8c6417bb358a650faf230a3bb0e93f514d796a003988c9bdbe306d88f64b7dd619f8bc9e02455f257031db557cea684a91709b2ca63d87b2c247c54bd61fac18ec18ec1ebb2d1c1dfa64e5ed33abebb125c64fee09482828c765cf1e5c7347e7a84a925e3e2e817e11ca2093ff4c870479e7c2f9ea198e88586f9b89b89ab53cd04999a8c9a3295063bc7b87849a96cbbf5018ae1b8410477a078080d2ec12d9df14153fe00f61582e04e29f4dc637e422341dc682161e25160d38d1fe9d26b47ee1286fa951acdc3c3d24bac5ccaf4b58353753b5452d58bac062fd2e045b8012bbb9f0c5ef5ee544d20c0aa35faf48e2f11a24e366caa4f1b44101d14555c9d5b3a4e94c8f73a198a53f386cbfafd79bbf558b5fd220006bf10c3ec1aaddfd8c97e543602108e7fd2259981e80ab37cf00b62c9a82c243c0fb6abfd6388c562215aa6bdbae91de948e748b0bc98b254d28862cf90027d5b2edc21a21fa2967509e69d4b2dd9eb0aab479ca7844349f21d3e44a05073ad28281958caec1ef1b01297df4ce802d5288f9e8252032e91168d81801bdc3f3b9e78b76a433d8b29298200ec9eb3f020c2a03ea30ce6c5940d855a503e5fe7a5aac928e660524ce6a8dd41e39b9f008cb02c3ea6d1408a17fbae4a278ef575bb643c1c30768e343677bf557ecd62a02089215c0e671b5c07a120420deba5cce118c24d8b62609915bee2da54c522699023207bd069e067c33ad4b5b1c6e766e766ea86507c392a4b5516b24403dd484825a3b6a484f9ad26d4b41dd3fb705a1891096f0b4a016643317e48c304704ad0eeadf7a820a83e0eedad26d9be3ae2d39228e694f95a8dde368aa6f2da801eea6b2ec6078493adb43cafce08ffc0c53664802129de22684ae236a6e49cfb4209ad69e9070a9a5c4dacd76eefbeb3e623bd731bedc299feb6c0f941b0ea2866474741dd26ded6b4c4d6ab6d37c4613f08594228f90d1ca2312d28289888915c8abd28054c78cebc3c6658e816c5f3a85031718fb4e356ecdad2cbd2048734cfda8b283f95897847a26dd21afe418c8461cf39da23c2f30e2949bcfd11cdca61ccc8b36fb71e18e952b7dbc706507942efc31747bc4a33b9574b41b250f0f08ae0efc7699d280baf0a553f1a8c84fbb334021025d87eaddfee05f410c474a422963110b90784f8a82beb8af2663a4cb4f8e98784f5820c5bd9111becc8043cf643810d03305b82f016f889b311302dc8cc6cd6a6c80d8ff4b0a078df76f85c9e4171f2c19a1bb270e0a924b3107a553ed2facf18df613ab41cde4e51c1aa8b7c9d0ac06e48d34f470555555554577b8279d6a2f23ea81703bed5c16937bc659728cd2e4979901f741a7dec931ee2bbee1fabd6fcffaf05e47de8a631c4e7f06300df4c332d0aead38e5de511e34b8fbdeb176dbb30f779f95d98e75e1e1f7bdbb2b65862d985c77d775df5738c637d4a7f6cf467160f736dd8e9a6f8eda91868aa24a000a159028f5a0e809a39b4c5ef7813983a638ef7f7270bb5570fb1bca39e78a5ce00197dbfd84d00223ee5811e80119b4875c54f7909b8d6bbfc57531a75e4cbd649a1a82ea414471a23f412de23e17729f2371211fba4ffee4c6ec4c4524f69038989b18f7217140df34fb861c4c3d52f946c9d1bca3a32751bef0279a06c691077122511cc883dc08f41a244744ef8997e42db98fe7a6fdfbf73ec5839abd28f7a55e949a4e3d16d4f73293d790ccc2f42f1a3272ad87ed2ec648add8b8106bbe1f01160dd6c39f3bdebbaf2864f91b63555572661562405c3a987e7a4475d1817fb8c924b43aef5ad2250ea1ce60236d9cdff0ac8b50c8f4af9ef94444eb41bdf40c6c2965c50f2184f02bcc075b9b9a4ef54b205da83f3ad56f7242edee6bf24b8ca5fc2bd9470f90a1cd7ab815e7c82abec4e2cfd9a68c0c4dcaafacac7ccbcf15ac054b5951571aa63cd316fb3020ede67d135ac1b29ab55b1f109e1e4d49b526a5fa1e48e37134295f4320e46854be63542854ad4e06eabbe561fc0a0663c5a661acacacb4b43c8c9f9d82f14c71603cb7c0f819980f6e918161539d6a192b2b56e7d9506560efa230171aac5ff915be3ad08f6177700c88bf8d83e923ea6735382d36c52244cd38ca8f9e61f9aeaa8a85a7c248b1dc30993c3dcbca3396d52b6d5a0573d1a17dcaa7d81f6e6c5c3d615943e2f65799c43017f701083a62c473f3e4cbc75e0a869eb1be6748f50c7fa7fa5f3ad5af81772b9b236db4ef3a468da83430e266ad67a21c8d4d8d836939d495cad174c9c18154bf73e3bf730383a8fc2488173e08e183f2bd97b15ce7c31d59e21ee072510b88ee112232477c6e7b1ced6dda92db28ceb5838a1db480e726dea04620547fa60f883aa8de2ea859bd3a76b05cc831d03d772f0dd35e92fa3793f15922f3d2de8b4426f78c06e0cd610980d9324cf37ce2cc88a888254644442d26d51740911244454a20a12328522249911244454a202952024911f77c41e09d656998ae11a84e7e48cf7cb7665577becbc9e6188ef7598777c60bfa9df28ab3baa4bbd3baaa392f8bea98d735a90ef7562563e318fedb3bae390d5a0eab4a710cbf7430ed6ae64a7e663d5b95956355cfa56fe15c777777b76b251e4b4a655979cd316ce7d8dfd65a737f0efaa0b5d6e3b677cddbb9083869adb5f6fef58061e4b0b8a3640a0b73df50afd7dce1737f4fc1f58670df931104005e3005572b41683185d9d300232c8c000916464682008108083f7849c10080a123507208a86888e7c6b85c74840b249a8c52c6207cb144ad2e17254185205477b92889252e54bf5c9484132e10d4be5c9404170ffa7b5b48028b7bc9142591e45e978b92185a42c6bdf7de11ee7befbd578477c410aaaaaaaa6ac8f3103ce82f29180650492d66d1911c1c8122c506845ec0040b2a48601484103082f43031448a2746461ca10a1ea02410928484255974c10650048182d2842c9470852496aca881e3591962001380228a2d6401740324435da88152aa2a41473c2182f9847aea02154e48e1661fe404164b70e208c709a318a1bf867affe2978b688074b39789014a881782aaaaaa0a06310410f4867aadc8d1ad978b8a1025808a251c29c2098e7064022ebc51258223285380a285f7de7b959027e4bed75a6bd6575fbd87c433e229e1044a500174d98416b3a88926c4011425d1e415357174e5e5a2268c9e64724516498cf081204ca10b9e2d6043e8a420094d0c45515202165f0060073faef8b18196d597f663881d236e2005291cf1c1901e2d6881c60b9c10411045b4e042115948321334a936630dbee3c89f34a9f6f351354d7aaaace95a8e28c637136bb7e76fe8b734691afafd2d47cdb133653bb776aadf27bc26c779bd4dbff8de9b1f27c79fd81cead47ca261dac19fed2c0bdb615db449c5c1d1344a9e2acc65f02ad31c9a4b6033a85315f688e4a9c2e6ad5891d3c9549de49df58ab7b6854dec415aedb43868099fca14a9f52fda9cea5ffcf9f1a785f1b5e28c473756d547ac7a1366fd104b4f0bc655e4fa530bd253aca5491ba0df44719e6d397a6223c8c61236846c1849a13bacfb6852a554078dfbac8d20d75226f62cacdd39e38a1833d6ac76e7d07ca2531d6314aafb88550cc4a33b6d8efbf8b188ca57c6222a06e2d1cd99ef3f6f116a76e2c1b253d08d3c9c83c6ed9f9867f1e8593f5f87bcd3b6b812d4cc46cbd1b511a483c63df1704c67f1c473fb6d5cc4dc5b2d47b7dfffc4dacf2147f37ae876bb2cc3e24a46f82675dd6898e263d79d51c3a8462bae0faddd8eb6b97f565a0ec092e5325a00db5fe69c0c74a76aa9fd7beff1ec6236c70e8bc92f596c377bff266a3bea56f71faa532807f39aa571a54851ab49a9f66712751f2a1eb92aa40c14c9c4d27d32ee7b425aa448157801052c90e0420817aee7bd294e450c5971fb5fcfd4dbdf52ee30810226f04069a88b24943810d01118618400041d31e2b9712b4349dc8a77022142401a52020442c0a1c10c9e48cf6289124bcc00a96806421842f8208434e27b105ef0a5a1f02f560c03d3800c2d7f877fa53b90c822e372304f5ad4561bbfe7ef3de73cc0c2c2c2391ac6afaeb9e6da734ce5943ffb37773d7f4ee73a7864362a7692f01229788916b59efc01a6292aa7985db7a4d9841a50eb597aa274547352aafcceb976fd9973ce35f34e03a2b58be2cd3cf7ee3b4814aad618ad7be7ee6f0bf0593a689aa2ba7777e39e0ff3d340b1d4e7ae4ec9e79c0339e71a5777cfc1d0c84ac4bcaca4eb2debdb8d7559f2e765c16f715a52ea408a18abaaaaaaaaaa98955c09bfbd8bff3e203bc660beefd737fcf35d3c389aeb69e3511280c6eeb2198de6ac0fed66f58573542f9f1f3608d09f1608171ddacdfc76336dcf7543bfe7dd04993f84bc694c80f817d66e9ae6f06ea81d4288d3cdfcbe89108769990910a1926bbd0ea4b891072bb992a8c6d5d4c8c8a452ff28946529b9d5c3296ee4c144577ef59685900555e910b5eae84474ee39282b1ace67f51e4ffee007e43a6b3537833999ddfb17da672edf7bee758ad97d7154e5e5a223495308155e2e3a72051747acf0c747aa68479e705240c98aaa2caf3ef85095a5ba5cd4441737abef2da03eb58a2350273563a146a03e298a44917eeefbe99cc031ef33d75cf08d2754fd6190eaa215aadb8c8f9638e67dcf030af2a2f60321d1a9e7eefe808854f76edebfe7223bf5aef780e08fc3e09b1db363c7ecbedbdbdbbb7db465c7a85ad3a9f6a62b547e1845e5af446aa3a066af8936c42f91aad55ec62507f8f265fc013e8418df44f8d0fe10976e9ac75af2228a75c9010271b981d6c5e546caafdce53dcb085df3a747f2b4283c404142434888da12d213a5a52897cd7e5acbd61a1907d33e62dd766969e83200de8ebf4804928b8222e8b656c38c8224481017d980c96dabd3bdd39a0f935f32f8e4f6cfa602c760dd05dfa02fe8f285444a18a6bfe1d191dbb007b77180410e06b36e3da2662f2808fec8a09682ea83413215edd2928dd24b4254f719fc41452bd48c91fa09591314aa4b77945ee298be42cd20d2ed5f5aba5ec027afe10aaae6691ece7139a67d6beddc39e7aedb6aabad6ed756562721f56f115bdcacc6263cd3bae430815c3f7fe786fece4d7b1bced1d4a679d82111ba28c7d33dfdd33c2dd4434888daa88f9a4769298ae3e9691e54a35032a956227562d2a84ef72edd7edb771024b77d0f7592a64111b54fcf701112ba87a88abb84842d6ed64fb43b1413076fc3a98101436c9854bd635eeb5909d0152ed31df3baf833948b6a1a37a82410f2d3be9aa0f67096e159b0aa1cc585ea6eab0ff27d00c173adafde7be855bce1de754ac64f6dcd11596d229afc82a30687906bef6eef76724a2965dbb6c413468c2c19516a41ee4c3ac5f7a5cc808426545c81c8759bc95ce1450c9ee08e4e42a85c1483276ee688808838a29ee1221818ddf66e497347aec96d1fc4399c12ba444dd116541f74ea753be098f64e09df689fa5929ac840e8662d48062c637c52365aeb0ee654c6a9a63b2ef7e80ee618f7cfca50a23aeb6fe39ae248eb42837f5f9dfaaceef0774be35947a467dabec8f8a94ea6a2a0729532c3165f48a4fa7ec62635734441954b0e1510f614171dac9f3fed0fd55bd5efdcd838171de80fd6d3e79bd317356b41433de3a3052d61745b27e1e866cd8865ade79bcabae430fbab0ffe3cf41099d4ac5ee7e1cef947d9296717e6f63cf440428347a767b86809a1ebde869628f20643107479f49d010a111b600882aec461f8f121d6df188e86f197f0db855686044aef664c45e522289a643af0f65085a467da06ea2579801042082184104208210c20841042082184104208e10bec62f20beac9dce69ceb2173d52065ad28d47f8a5f5b1523d57d0d7fbd25350890c19182e15f98064bfb81c2e497cc8faeff7c3d032184d6454af818e7880fe5132e372fda17ce29ce64aa25125c875d708c2f718cbffb8a69fac7c1380aab327eb8275ef06a18fffe41a16afd71ce390823cb8b3907c5711447d2e7acec14f832ce2d3519a6c039a8e0aec03457768a7133b794bd7033b714d9611616bfc2e2430c06a9ac0ce0cf80ee627ce7207450dae7afda62f24be61a0feff1a00744eefc49e9bf22d54b8a03dff4feafc9abcdea59d3e99c73488610906befe7b3a3314dcc05e9763c2957a7e067ee07a81f378c3b05e452accda4a977fc9df3e75f6f5973ceb769a738f129564309a5d424a9a4945249e3132830f4653fa1971ccc0f111310fde11ca7224c274ae9dbf4c9447bc8c1a804c9f6e63a1890f28b05948919b413308c77c1511c15b7832f8cbfa65a3f43ddee0738184f41cdcc7716c9c2f2cc0a60f91f0dd3f252ca685bbea52105d58c897a861a1e879eb91e93339501d6a6535e43a7bc53d647ebc29d0f785ced8991aeaffc84d1807c70cc8786e9c860383ae533d4d0b8d63affbdf7cd14a7be4b4abd09210d42ad3fdfc5f4d5f44c26d358cd15b51f87ade994a7d84c9a2cddf1d79f622d08bbb066a4538fe460fc1bd2659d6d366b481c23d4a966a4538e4450a73cc69db631e511e3b63f3b539342adffba5b52a71c4985092892dc9a2100070cb3d6afd7adfef5b967284e3dd5d4c8c85c364ba5a6cd1ed5b655625033762042d7bf05e919be0c70390686954ab5213992ab6ed90c01edc6bfa667b8c60f589aa615003f83e1fa8b57565624a086d4294fea947f95829ac98674db751005e2ed3427c309d5abfe7d5be21c5d304d03352cdc9775104278deb315d640ee0e7ae648aefb37c4310ec8c1b81bfefa0b7237314ac1f56db61f93c8eecc0d42e7d62eefca9bbdfb5a14ae2ccb66d5acaa8a23b363ee264c8fce7d603ae75c07a94c81597d7f93f27d65e57b8fead48341e2a8ef5f18e6bdbbaab219bfb4ef965fed07253ef9207495747787d01f3eb4af538e7904cccc8f9999f93133333b5799991fb3731e8499df4b4d912a4111ccfc98f93d7ceecf98498aea9e79c963368246154a508221481a0d07f2256b59ba1d0577f7f7b1089546168f3a1ec966e311c7b453d08cec14749bada1a4f67b57a75a968498340ee33fc338a6e3b93723e71b1066bf0eff07dd5760be30e789524a29a594524a29a594d22b2811a80f1d4285ae20c2637925a1aa73dffd9ec37ac8dc06047a447da8900ff5a14274081d42ada043e811b5a2a7a7e772c2101fe2437cbaf40a5a9712b29ac96ac5e9d55a1da6b8946e4fa55d9de286d79dcae99a2e531e8d87e7369e7957e86582efb9bbfb7bcfddff396667669f31660c8ac3eecc97125a54525658ae1830585a1e8ae2c498322e66e7feeeb697412f19ce59a7f20446091122640ab3b5e6eef2f79ebb6ccc7c7da02da92e6366be969031335fe90fc2ca1d7e64e6cf5efb401ba2c9e043bb5d5555e52e9ffbccfdb93f17a1830d9a84d0f7de537aaf3860668ee94014170184d0ddfddd9f7b63ae925e4b70192aa5b64a4a9b2b8f88dafea9501c7e76777ff45af1b73893d55d8d2b30c1c4933c29a9b5244ff2a424098374a0031d802145912a9e93e7c489734e9e93e7c4893f21aa0e1d3a5a9a70cfc2b370553c27cf8913e79c3c274a267a7a6da80d7940fea8a4853578d02fe0c45f1510429c67d92fe0c475e059f8029cf8059cf8029cf8059cf8029cf8059cd006830b76a0768f3abde06c400e06a748fb71302de8c2c29a2ef482dadea6af0ac88f284178789a4feb496a3d17a50dd3e9216989ba041e60811d9ef498940725133dc146d486e4f3371a341a176a43fe04c35494876d1cf34e23e8f1a3214ce3400e54825bf5543d465c482e553d550f902321bf905164941c7038aa3545c58fb810c3b4c7c09db88d74b9b52126b50de9309472391a38c5ed36543917127221ab46456585a56148a570c8c8acacb0c0683450a8977f168a53047e075518366843cd09a69151649428ae0bd55baf2419457ed134d0ba4f4fd5e33d954fd3b81117d2e1a293d2ebe8b916219c73ce5b0f0e337f2b99fe5a6b4d8724ff3ea2397781ee002cddfed914c7e246ad7f92a9f5b409b5be426abdbff730f681e2544fad0fa9f6f1ab7c89040a24503ccb557a303107611408bd807009c22740a804a16d50b20645560ffd5dc57a9e9ff295be7ba6a9afa2425f0546055aa762b3eba9cabf67ac86926ad91ed7b54e7f59fe14ac86923aad8ebbd6e99fcd72e4bf6bd99c93b5ae7f4af529366b3e39d55b1f63db6cc7afa337f8952af0d9a619839fba2ee14be9c331c072dde6c818dfa1408192b213238c51e59b9d0d83b011d1a038c581364e054b4989ad3528f14108df1b47bf4c1edd7ea3a9ef58aeac0ec67d11ea80fa95ad589527ac7a8941d92929df7ae970ae29affaef681c101b1d83e264ba4e3169948af2f7eeeeeefebe613e5cc4c075dde6bce917904779b85b3dc569cddd20e3682c8bf9efc4f8ee63e32056d96c274eee99d6c3f7fd6b8ecde766bcb869fc9289afddbe434175dfddedaeffc32c7c5823a2dd78bfe33bd7fd5940179fbe116940eefd84c91326bf622cdd73b939dbb22c9d6e2c87fac9bdfd3b5a397dba886832cc8f5d1fdaac3bd2d91ee1b4391d7780b4aba75d403773d36aedea6932b4ebe7663a7db9d7691bfcf2b9ae3efc676774f3a19bfe620f97ee7134efe7b2997c574fbc7c5aa6d3d9e573db35ff74a9acbcbf4a8bd7d306e2d7a9087fc5bea077cdeeee69a18b33de0f12a7f7e35eb3efaf14ac86516d3c3746f9b1c5e83e7ed6e3ba8870ff1663ec467bfc69bc7a5cf0fd0b72f1b6cf74e2a56fb2e85f92c68a9db0a7136f7c9395efb2d765e158d0be9d9416a3497b7f9619d98bccbf3b7617f6ec3243068dfe39ad18a34e5b580ebddc2d7feb856ff1a2356268325cdf6c3cac41df867475871a1f6bd89cf835a0ad7707889381efacf3ac5fa7736a3c1017baf8fc659a0ceeb356e3ddc7e0e467d5c3b799933aaee338aeb43a7da3cdf1aff1f0b3ca12b90d9fcdfaa2c1bf460d6a75fa7a86e3b6df41ce6a03b531b41beddd66edbe60759abe7b9b67d7f273429bf1f08737c84098d9f876eda1cd815fe34f1e03c60afcc63ec3715d66c3bef074877f4eb336fc77b01966331cff420c4d06876fc3b92577468c2f8597ba43e85fc3c6d06eb40c6cccbdff9f8bcde40c8b42591b07f33e2586cd502d36439d2c3b181876c5aab8538a7530d54e7630523afab3af189a0c59c3d13336c3c1cc4cae5ba8e3fef1d9715cc7c36514fe0ef46d50a8685f7cd874fcd2b7bed1879f3dba03fd479f72944ca7637044dcdddd636837a047140a4ead25f1b9347aa62184d0bfe537ef6b3e9d7636a7fdf50f4a9bbd076557d54f66ebd97aa594ef6d5cbb1e88fb784af962d67e5a4e9b13ffaa7d43b559dfeb536cd62de35f8f86eb61d9bbf09f47fbd7fae1cb9a8f434a779cfed99cf7d75f27585f9d6d4f6f395bad65df9fe08c2fb6f6306fff5a531ef35e0d6b3ded46f58ebdc7e07ceecff09bb459bbfedc73f669ce7bf9d14adb88683728b52ef12febe47bf62e7c79d9acc54bcab71e3e570eef7b3742972f6eba3a8527f7ba2b0f5fe81ae072110e96ee52e5221c1cdd79db5358af3759589b4c21e66f61eda3e9d9d154ca29d4f4733acbb22c2c4742150b3af82e5a2b2a1f61a6d3cd12bbad8aca676f73dccb6f9be9646de30e901f179ab21f6e7fb36fe360667a9dce517920aef57366f061674de9663a4d71b276adacafca37535f6775fa42a31eed6c0e7c956f9b3528d7f4dcb7db662695c6642e67838c0f6db42ef2db9bbe3a9a930d3ce0f747db4c9f3528d5e6f4abfc69a5f69b60b44cc799e80ef8392b4fe90dd7852fd3e37ad7f4f39dc5047fe5a2388d483bbff00657317deb895fbd09837ce1c7e72aaf8c53c616a5fb184d91882643d66e9cc9605b3683b6c7754d9f59df6c33d91cdb2c68437c4bc735cac3bac8b7bedd3b1a99f8dddeb520ddd13ec764b3e6f486ebb69779264bb36ef1a76d5683722bec46cce19519072efc0e5c08ff4a1ef3c6b64415106d07b21061f24b110e8a70007493f85c19978ba258bab32f0f7a4838a026d26e6bfe33b236df7dcbded5e96875baf944f1e40ae072511448e88ef6ac67d337bdb0ea2fbeaeb4598fcbb2598fcb7a4777e4c09f366b336a18d51e57d6e37a7efd1b114d86cae6c47fef5c0e7cbf36ed17ba4f23a2dd687ff573325df85fb04b85894ac3506cf00302c939de7b8f9bb501cfcdae0b09958ba058ba3d45aad635d765e0ff031cca6041cd640cc034cf0460ff0c01d77f0280697818c0f51d6ef7d033addaac3d0f3d3ae5dfb01e325692e9a1871e3ae5ac8462a99d0a9d79a8d4cd5665350b15d100004107b314000028100c08c422a150289087494c7e14800c898e427a561a88b33089511c638831c418000c0000802120323333548302445894ec00ac1008386fcfd46dd491856a3926316511e122ac890104d6304de4145c3db184a38deabbfeb1e5b8d526182587d2120c25c368520c1de5ed6c2e49d9841a83a18089ed42330f27d08620c5a3860777cf9159de1a4170476894a4226301e0c6ed4d2eeb63e4286ccc1d5b935278ddf85694fb849e40b0204506bd88ffeda4a79106c18df3b81a0d234f06485d53189cf41e9298bd4ed25d88e1a6570235bc3e6cb72fceee41d8a2000a6ec52bd7c5f327e52c14cd66f7ff4e26bd18349837a760978c3dadee18fb8e87723c51633c2fc13f9f7760a20ba89d5d924d2f615d12afa7371657464318c2e94b6c8e115ee3696153f36ca34351f8eac8f2a09a5822f8cdf66aa9df5e86b5b506bd7b12fe560aa96827c98680285efbc814ea1b7c6c31c75e8e53379946221d1c728a008ceab963fb393705c492352e1db3cc494291eb5e6230968e8b4c11582e3c6652c79955627b40645466ed5b42bf723fb24ea1392e64484573200d877b6ef37569d83c5de670e5bae0c2862960e815b0dad3848ae8d3e86ea19dc02b452a398fe83e5c72e83ec8fd15884147157cdc943df235ba8c8a130b2daca9d548e4ffa13dca2b702d940397495fa0e218835f9dc0eb07fdcd4942989ebc1c0ddd107b567ee97d007642f2ce6d286dd486c4c6816e7cbf8caf7a612e320631a6391bf4ec51e0dcd6fc43db3d108b3ca80c466be425ac1b2360fbd65241f570939083a2775afce1ac47773c878790754f05cc4319dccc9379bbab20bb60c54e66b3296e4a415a6b1415da52256d11f822dca02b993806e77746af1d0d98729148a5af65a0a463fd98fa88b44c5aec68748ac6cc1bb07e7eb2e698bd0afdf3010569c76458147843c8660b72e40009febc5d6a77bd190d1715e44f01c775dcf50551034417eb29470d5cf68af8f36a0727820612755eb70ff3d07c7ea3aa7e4a30a40e36968f61d99ad3dc9f00b469e8bbce4cdd0ed8d9513b213763cc1e4d115482a8da0b2702ed2b1b6cc6d7cd68cffaa609a6cebd6eddb580ae518a57cfaf7044fa750d1c896b5c21462de5be7324fb6f9432b864a30efbe9c3b4e43faaf9984835b9aea941fc6c3458a87b20eaba11bb23eedbe08206d5428c4b43beedbd1efe9654c38180e1da025a05f6ddc6fc28d731a503f849217a68c052b34b7e99d35046480b488aacf645123aec42fd3fbfad2306af7f6292cb5cbf115ccd6156d7725ef8afc962bb3fbfa68705188e0e295442fd4d8ab094fcd070e0ea3ff69307007062cb380917979b491da412da780868ffa6e1a0216b6525097054f36d5a86e070379cc917d0d6668d5d3ba099567008c891184773adf364d8f1a6f25d98230166e94c8b3b5ecbf39da474da026def69f5ac4c5d3a3d941dcd9eee460fc7a89348e9e202ff561851e5bcf111f328c808d5c570cb7a627b0934b4b846f6444a4b9e1edc22121be8328186cf03f4c75cfbcf1b88c0e1900f82453db59e4cac18fe8e26828cecdced584b945fcdc7b02bcc3cbb5fb54b3a0e02e526abc94c2a018fd2a1f0d923d2b8a1eb54dee725bbaa752decce8e047eddd5ecdd1079ce27ac6a28b811ef94afc7823c54099369b8a91f8253a1540b53c74a13640479281261a1b38571cd76d673f0a04f8b75b468e215d400f83f06c1d0df25c077347d5bb85fa7c35bf0bea000f8ecae01104b9e25018501101aee44f3e8862de9f14ed7a5ac7199e04a4034e509e88e015bae6f38c20e1a9fb0d8c707bc51c2f1e04781af1c6914e4385a3034675e3f32e5ef866faaadb81818ee5198b664253f4852b70e383c60daa5708c8a75c1275a16874e899b71bb8e8b8881879b62af5b2e75769ddcdcd6d67ffed4d5402963939c9fc7d2ab1afb5e49c160fba8b1c0747aa3b8086dcdbda5d379dfd3d66bac5645a76ba3e8e8af7ef16b69b9214fd80be1d7fa85c165716599734602fc3dc04dad67724004a3052ea781b165676059dc750dc3054eee508a2e13ea21db882128f446fcaa50df96805240ef284ea73b0b4cff38fa368cb359a760d5c42d4a3449016924a9f9a3a24c1f1cd6e1d0ee71c1b8418c12e7ad400d761b60637738faffa41e8a6b2a238f630b82ade3702271026530ac73a1584d0ec0c44b2d8bf74ba8ffbf0c9f24d7bf05196491d2669f0e46caf344706c05e8eec55488385e09a290b3111dda1613cf888294fca7c1bf13b1e980b80d801febd5a26a6021f3c911d95d0d55154d8c3fe6324995123659090aff983f67e5f3dc1a78802984cd24ab85b3068e08dabacc396371cddcf136775ae526e1014cf01c7f9b822cc33d93c5efac3ee95236aa602eb146bf6edf915852ed15f6d3d64df218348bd222848cb5d0eaac8fbebd2338dea2df5e9ca3d845c3479063f080ac0ccd8fef68d34e503bd63519809fa4ba0cf2aaa80b155827297ad085e21dd586ae92017645ccb9024e20a97bcce1d5eebb44ecf3a87952d0efdab77fe9f2ca9c9f7f7f40cc2386799e3b71e808e20759bb46332751f11c1422c972e0c48c60ae9732fea2629651765788d60519856520cadc56400ee6c4b6e8234a780ed133eb3f30e236c69aae225b53287b56e800a086a882d52447cc64b98c8ad76d2b495fb121dc5ce4c8a2075b68c55ecc1a23be1942d0999bbb6a368cd953907718210c0411e54ab22d99efb7698b409eda27520bcd2d473c53483442042cd2d34dd20e9051dd5cc89e6014db2d3ddcbe4a7d1b676eb15e3c2018af4f7403929d7f1e1381f9327df5c71ab4f1e210545c3119947e8fd5fed8d1e7470d4b71e1c5b928b226ca8d234e5827020f23652da537ffcf7a76f7687824880ad02600a2105ac58166d4a33ba1ba97c3a0a55cf34af85da22cdc74e58ded81f3af466aa4b90a7bd1f9ca3630521fb09c57d843ca6151418c8810ebe2648ed74699dff0cdaee2a480dc98362b3f190b0a0c9d9c6ce9e470a44eae35a26ebd28273d7ba4a9c20c7264803a9c29adc8445aea721657e472fd5ebf05272a9ac240bb02c7746e07e8bce1ce3ec3c7dcb7506f8e561523f4852ed4f816fc480a681d493cebc0f5b7ca3af2c6d190038c8d9a34a18450fbaafc14796a18b43a102ca404258cf1e690bb071d97f8e847ae180a699b98be420c9b1f25be56bdd4b5ea1aadd4a028a2ce62838ea5f232b6722e0ca2237fcf00ef393417173d242bb1f2629316c86e78c6a0d651c13d16e82f47a6bbb329144c7b65e90fbc7a0f9a1ce284af12b450c0352db2d5e87c9f6840823c193aea19059d51bd398b23a03f23939daa1d798d9d26b26f6dded602c6f9d405ea2fb745b1de6252d710b110acd6e909cee495d733915ff28bbbc0627adaefe2a6af1905d51af301dd03c5fd8437ef183cd0f36e9969d15bed13e648c501973730ef9cf3822cefaa54b0019270bcf2ed108c9c295086a817b720a661081d0cfa540412120da599a80957388f47c3a29dd6e9924de8acd92dda580915574148df8cabfef4c037cdcb0af016650e00ea91b6bb6659726d3bf5ab935f3e43b2f51601fee5fe6de7645f21535134615df6d928e6a96644e3767115a860d5488846b073a9f80a5579a0a92d35672a0f819a3c58541e5f788b90b9463af9b19835b982590b71fc64614aaf508c99ddf856bc34a9b2f45b9c65092da681f0a405da0a68a6a1cedb935e7a071ada7e9ee369be889f7deb4df90799b064b53e269da5228e7bdc64ac3910d520e2c0ce1d04b9134f4ebaa12f9f27b760c4a0838cf5a28bd72463730e529ee56f1bca3119fd2708da41f4a68bab292ed8067719c475e77d96d3ac090981885d9f0441888442a5a1231db535300f208ac586ac0c067f3be5c6f05f522b46f61dd99beca8203176c6981edeb5f29680e88b0b666e01201fac84b6b8621ed47f8abeef8c63815421c384eff365f239e62b959b465b2ce8c5b98263a29fbe21c14e8c946a6f8e6c5b684ca83bebf55d5ae0a1ac483365674aeaa78b82eb74f773ba2e522d393f604742eefeb5f9fe00db374df6cd4cab67b6691e76f8e05603199a320d9f2ce6991f1b4282d1e720bc8bae3f22ea7efab04b5aff0e43e6771c967a3613b0365d5c1f8ab0c8335a9a0b33a31f94d75f84f3a4e30f83b0aeea66780443b980f3512326b9329b88324311ea9b2b292b3d80d8634c05cc6d34a1504c027b88ab9d83880fd987cb124b611d5260e2a4ac18a430159f861afc06638f330a892a6ecff182aec4863b3ff835cd69a7389c22d49c46339a4b1ced5454fa04a51f723d55bf385488b1148c7610964321b47019455915de0de7e52de1cdabb705816adcfed0d8dfa43b0956fb58159d465b14dffab7743e49a3822f31346a4583118e0427ce8a52ab198ea64bad75a0cd42c65eff1c8a70220ad8046fb742428b8f169690c4b20156ac83f12189076161cc4a39348a81e09444f23a836d85c0f2a6324a0d4a7f1a0a3d574342a1596e8114693d2589ea5623c0a94e692f998a605c38259197fb55d751e23f9e7e2b898d30490e036d76dab9246405bb231de6086f64083eae82c2a33edcbdabefd4f12b6cd5679884b09caf02f55ab829d569950816e2d51a24e063d60afef014a74a2156af130082ff6dd20d29af552c036594e4753aa7ca385a0ae3e6089874969af7ad583f96135633e5dde4963b07b1c0fb12f6561069356a2916236843c169ace5fb934535c801f389166a6f611e261c54937388ace055bf862adc89544831a08ed80956fd0cd403193bbe82a7fc878c22e9307c87afb8121998867454deea5603dde5d31afec7cb825a80db7817348d486d20ed5b89018d6c5d444645baff7f616d53bc3795273d425b86a7cb148ce1892e0936e7d90a3f8318954525984e523dc5e9206a9490c58088a5d030422b8db235cb7c1dbf8199d124c65d74b88fad8249e7f822b02077f600638e5c4fb6f27e444a4f44bad5de1469a638f2f2229caa7c62044320c5e01eb410a6c1c45400ce000f3fc8f1f36c260648d913130ae0a2fe2a768098f9d4287cf20d805e3eeb749c27276b8f4632415b0284aa4a30b937b822e8e7bfe1f4a3a77e52bb178260a55e385e5cf99d83f950e0d58c25597fc772f8512a5e56d9985dd77d7c1cda19c318d24dbeb31c6d4e5ae543e2a2bb893a59ea05e7d3bf849460a5d397410cb3c7f9045b70b9914c801db7b1d22e525b9360bf70f041f06a46b152325a209c20527fa606bd393a04e7255ce4f0f0b5e6a2f62af464804f609a466568024edd8f43e5bc35d930ec6c500a59db5b70fcda35a612c89795ef05300cb0a2b013c5dcce05c928a82cd49ebf1559ef22f948265a8679db9e77e1493a2b30f74a11408ec14fb783a086046d4195d0a37ad8061b41c86cffdcdd0cf22c21cb12ce487c77187bc8dbd7c51af339e9ad34e79f9e86378a5ac35fb0ec820624ea27a7ef5dca2b49375f2a20b8de4d9e35b0bca723bef5987629bf857435278c0303866df7ab609911e77c5c927eb52583631d157a27af756aa7d2358c20b470a2724f626588bf5d82b212d04486417da314056c21e4ae029d0620203b40c716b51db733ad48215dbd5eb7939213d94cca8e6687c898f7b021f2635bf6bd83d34c86ce868329532f3086090a6f93facd1478b4edd0ce83e447cd9ab57f4f75182f57373c3f4823c6b6f60a6f7302e36194bff581c6ff4ca4a2fddd700ce3c991ad313a60dc29f9dddd61865ceab49265a07615654f70a25a877da42028bd4904636403deaf22a573f441f0bf4b70a47493551a7e88f4069ba4f899ef50cc1a47515233eeca128f4ffd52147342b5f25bb7230627ab0306c4bfd9b1e0fbd3a6d0c1cb1e8b629045c4ca49d3224c104aa7bf0e30c9731dcdbb7b1264b3d62eb173d017ee5850be3828c00a4c98e6f0b7331ae12ba181abf4844ae6736ba7ccb374cbf5586a3d2afe2979187bceceed40e41dd8e7facde676c069aba1524f363213891cafe085c51f682126606740ce327a6d2e0a9c529797758ca1dff7380dca5d6af993c7464dfbc2907bafb10011ad29c370bb6af9e858fcfb7522c7a0c6ba7d620c04a4adecf2d57372fa6c1c9dfbd4abb8e8e2fc69cb1b3a92bddd94154ee200aa4fd57cbfabd9b119598b2c86776041f9fabda8f51d7c61887e17cd70eb1298596533abbea995ead48e5776d1d4ef50c61e917c4d226745567a797dd525ef8e93fc5009ad44c423993c4413212549ba518aa07260cc8fe2bb12819e9ceb9e0ddaeda66eccff82cfb38287d2c2a512ee52a03f40692f66195bd22bc9c6f795b25e6f8a6cb8459a5f702158ecb38bb4f4e78d1f71f9d44334e014c621549046c46bcb31345913759b0a9288a61610b4980935b56291e2035612dbac75752edb38003a2d970d7270c6f74339282d0f89323b0a69f3f0d88c00abd36f48bd36f4a02b7554b42efff202628b0e954230699822e78876ad508c75032c2db5631130bf34cf3eb18de7c70d0eb5b56f87450954f04bffaf213397d67f5f75f5d821322975dcf5fb146df663e35347dc49d802760b8e23bf4ba72edcdc5731277810c75199c720e596d907346884943c5a24027051a912ee3c08241f2c241751e938884bf8ff51bd803c3e35f0638764da55465f34bf3dab5f07a7fca123892816ce335375605a816d90b78165f9fd581f159e5758df39a4dec289f928f6ba73fb66bf60504503632360181f232ddce2a0136536e5a2a0200a0451242fd9c11093c8fa0740cb6398a6901584b20dc7a694a9cbc90d9487c324fa4e023a2d076001a87723544e3ef59c6fa0d021d1474f1f01e1a2169c53990754446b02d74ad800530dd7ee8c5a308d4b28f2fc68a5020f29cedb56c75521267718bc817d0631aa1204f232a9034dca0710a118d955188010cad23a376c894ca61666246b1f3bd542387029d3719c637a07933ad9ec1cbf3c4694699e8ddac7b8b35628bd4480e240a9bc50327a1c41331217461c04750add6d319ece8a70d7d13909e2565cd654f3f417a8744dde56c4ae31030c0d30dc42b55c47d0b529fe051a1da38f5197ebf27698c796022b17f1cae84d4a7121c6d87f21546330028b915877bb93d01266b659889d0c4522ab839f154842dd8505557bcb8a8d491d48fe93f598cefb53f22746c478275d199090c40040f04e6e2a268eae3e6c7670c4182fe79a01a7cedc0e8b703bb2b09e53d06f8413de912521408368114454c8d07e8cac309b189e82b40ec1c7650920fefaf66c9651d459825df4dd4d39a49b0b3e7c2d71b161c06058a1dbe49ff4d50cf1d3c46bc11b4b1085701eadbf3f525e869b2215140c7e9ea26cd6a627e0084ba01ec85d5aca0011b3047f0f166d8d7a7ca75d5fff99e21d1e1513e1d2d963adc93dab053805303cd22dd4a8961e713e79d936a4dc10b1387250f2bf146e19dde2893eeea1aed67a2ee39d940e33982d96ded6408846756ef074e1ddf5b990cef7c849ec4a9732f4380f9392e2a6b411213bbcca060d6af02582403a2dbe56fb5ecac07d3c8c333889ca2269e267a2a4076313963d7433343f67af136c9c84e70984300a4a9bb0550decb004703aa14d8cebb27814cff260754f0c939bc4ba5233e07fca5e4512a56bcfb85a8247930bd7752d28196af2b3df7ac264394e9e89ae58be028a225397518e1b70e125dea6c5328a7cad50d5ce8474fdb2b19fb55bfdb90cd766914825ce8234343dae53631638db1596e9b776645008fd72a22c9f51dd82d910c348710f23c39043bb8f7c8edfd5109be3a7c514230876f6ed4f639c165cb4a1fe151926b14a461d109d467b9e9a137bd0fe390c9a70dd9eaf9bea40eecf057c232751f739b0120bca70c670b2afa503c5b676f96c3f365640bed599cbbd379f666450241fcf2b9632fdd0e9c99172282b84f34423f80a16e7d49d7e4def3f4a83d5c50d3e46189467ca94702a3b7839cd004d1fff9d4a2f3f03329d9d193e84373df0065ec87419568b4a1037db300482387f05544180e9e4f8a90f01461fa7ca0ba34ba52e1489961e1a9195371b5c7a5bf6cd035a7ab9f9d60910862a3b07f851b4192a307cda6c7651430dc87057b63d667dfb70a00936d11edcd9ce69a1e8db6544d6351efbffa7841ae2f2b27588b912baeac8a55cfce9280c16e698763cc2440648ea84a7d508497aa4f18dda5800751981c6cc8005521c59d5576a611643b74d554e90bef4d28403c8bc1837118771530dae513763cf1479069f0d7ea80031e02dd055ba0482a38eafbb184360ef1d558a23bce43b31e41f7ec8102d31e50f9be933f185312c09740dabb4a8aae808430328fd6869be1f4ce7408e56af4cdd2843b7af939e2658d226452726e9cc37ec3f59b4518a3db0e40ccd43e906deb166d4be4d76238c311cc00ec294a3e1519952797682c78dda2efdd188ccde5b99bda0cbe2b8d1a24c7594ab6f1c47338b1c4775c923793880948200d8778f9f41263197ee3365fc6774caae4578567c9d191397e3e3eeff9a8a5d17bd5f5d4df2b312210f80b59370c7b8dd8a681397f796fa710c74e5d1af04e44e6df25ac50eb7854657a036e6fdbca9a4e1ba58c0cf40d5bc6382342c3b4b860efd1f0b382763371050fb38e7413035cc65e5c9c08f077c436bcbdb0220b074f2682b77819e7164efc1370bd0220c2ff1749ee7bb8e2ec0b837687cc9e24edcca3165502c711d0c4f2c940c6d556904772a81dc8673b917d587e47b624bf807baa7d516213fb6bf7c36509710d93cdb1f6f9704c23d4af668abe168804e077e889ea38f9d4423444f2055964650778247c6edb7f2c173eb6262b18a789e820e7ba4b35403a110a2cd1105e5f2564845fd12d101c69ce3679216574741df892f66315d5ce6ab58b0c793425becb325ce3554bee775fdf6ea1dd4d82b28abdfe700b6c7a76a80e90319976d6242ed6c3e7e5394f685384692705045e0f775f6575f7f27dd0c4e5f0963161bd1d7af8ad864ce97fb1809c0cf09dec299ef8d96cfa99f406bbb51455ee241561e9806f36a99cb565097493812dfcd0ad057ca242442613eec3f8f29355410a7020c9a2158a45523c5fd06d101f284bb70277008f2e34e2f902f65f448a47fc4318c5a03f0013f8d609671d24dd44faf3fdf40fe930211a29b6eeb2c22acf0ff243c401f80e5e9af77c3078b0268343ba7bf0791e441bb02725c153c2d5ef081ccec0bb5b0349164b9a28977121df64a76adf33d31735f276a124f1bf922731fe99b1bfdc71d56c0bae8c4cabdc4d408363f76ced494dd97a6760a201f4976e690566acd44b1f278772524679c40e7911def5450761bcfc5c81a1059ea3bf31afe670744bbf70abfdcf7d1864b0b79a0d047084f4f29aaccef5694a0876f6441f0dee47b07684e606b01cfa42f1fe9f6c6f3c8b7948c68c4d87996ad167eaaca6f4469e9628a31001a9b12440dae0d474027cd2ccf1637126b936ec6135bd07b9c00e34821ef5abac5accfb7d0743f7f2ef8a8be31a6524e2f491984eb59f017d6e5ad66567dbe682edcb1dc7394bade118a345fda38db32c86b2d3ee84cb266c82fef8ac9e74e10223e0691db86bbd7deb83e6a4a0b30ab54dfca475c963271e76de9a7a4bdea3efa581048f57f70386ffa3ed74379413a90ec4d4e511751482566b3d668383731425c5826fcc29093908e4155f09b40ac5f101386854b9e968e75900beed11c1a9a20c08f98ffe0d84277f1c8b50b6baf40fc89b3bf746ca3450428e6091331b26f0a0cc3cb95c02c99d4ced1f16259713e2127a918482b7370ecd2f02b9e31e71143a97f027428bc66d2f8ce80fe0ae70df75f0ce266f3a1cbcf13f0a56f54e91303096f2d9b1990283645dc4a3b94dc6c74afb798ec8aab27a0d8b84464ae4a96427745801ea56e100e78f337df45fca716b36dded63d3140f30a55c02fc09bc22d268c8c19b60286914d6bd214a041a825b93837cd32efbdd4de58f7704d3b15d7225aacddc5588c4edd695db59820ce71b9b68cd9e51d8e9dc302c627efd92e5ec95b6a50a4fa671b39a54314e7fe1210b80340c76d04f104ffd8146228e6da736a56ecc9826ee1b5f56be570ec7f9e7f837c7f0f3f4442d61e23549ebe888e41488b09dbcfbf5646d7e54c0da38910a57660c694e3d525388345643eb3130bed18bbcc62e35eeacb72300d3c6bd7098f3d2dcf7f4bb3bfa61a348f91537453d78fb9f60a8bddb771bc3161b11a07485e5f62857e8905b33d26bc2393bfb2ddd1a49af4de5913cf28b79fae1fd6836784d757e85a098711c0e030713cd10b95aeee418c1861c19b40f1a0a6eebf7c136a1309454adab9214d3918209e3eed7e1b78b410ada99e95dfba4d1a9364479e3438d323b0a3c23ef829e1a4c59a864aa5d0bee262b1cab8a4b446eb1417ec42e92df6c5849815997cbd2a9c8470f0ef6a7c98905354f047231913f14e42471815d1135f27e4113059570c31a2c5f5754a7c2184f30a0343d642e9dee6284af82dc8cb9e230b9c8ec7e10fb298900e94502fd8ef1a0e63d631d865949ed82ca87784f23dc956f8b26d1c4beccbbd3b58b47bac45dc5e17fbe3d90be837ae3bcbfb8b1a57c067177d0f84b968135c925aec1dddf93ae4968857a31ca64908d90894a6a7891db737645540779d86dec78f526599bb1f1ca021bdc4ff512c1ff0a954e9e30304c82f05c49530131a2adfa12215ee5b7256d21994f44958dc942b1417c95facb98808721bf2933e7a384688532e06515cbe62f252f41a364d057dc8a73aca8e05eb05e1ce74695a2b6c26f592ba3849bf45885cff2e14f2d66fb8e1821a01a3b98046b8877023a16870cd229cee354f718e431ebaefee2dc660fe1ee765b6e6792ed2150b99b021a826bb602473b9a8251406c6482fee89be4e680efce93c7a4f027cd51ab17a04f00f4e161616352d9ad64fb033ea76bdd95f9fb47c962bf72b74b4d3b0cd5ab8ca5afdb4776e711b446ef07d37e000f41f58f7a183bc191df0d76f6351a9683af17f6877b1fdacd645837a40db23f18d7708b74845b0511f8e5e87c6c9c488050124b155e01ef493a41781bbcc11b8976dbda15fb1d8e3309d1eecdd65df0553cc4ffa4456f4d46a1e680468f96a38adde7065df2b7624ef3b78ecd6c83e09833cfa6c116c60203dd8ceeda437ea6903f0750567b0c6e98532e835a5d05b4ca25c03b01bf7b81d7b88645fb0749154c4e1972ed99a0406f25112766b7f799e1c449fb6aab59524a14d1db68757481699add17babb06b21b63db1808d7b2e98b128d8aa44b9a58c5a21a2d775fb41d78110c2c5adf51a2eb4af041797f691d9637518c1fc0d2ece9735d6c8ff1b34cf5f69308e048c045f510176dd5cf58bb1384e804742fb4fa8621087d0e49b0d0b563d235a913536808ce3324f801eddd4dd475003680c9ccce6315d298b1a0283267db9f3b7b009a0ef88a16a45244b834a13c2e42611ca3a3c47bfa70da016a7aa17319b0228e5163f7cb478bb94c72d3b67b65d2f59a1ded8be0db74240569dabdb0bafe9254a3bf1b3ef07c5a298cd65658f17ef148a10184adb5c63d8d8cea6a34dc8210f890c58c12522d700d66c18781be32a217574b3efe92774d257db703d051bcf0ae364c194350b5f96819f9b9b49c348f19ed22b3e80fb4420515327ddd56260f9cefe8e453ae443508bf16ee8a58b66980d416c5feed5c9bcd173fd06cdaf398cff46cef50a6c51f8e88acdbc516e4d188b14ae479c6e65b6d7a5eaf504835d3a85af4bbecab7d6e972590d6f76330019cdc1dcb1fb79e728dabd1e63e2a2582aac5357bfee9b5aa7de8c14409e49ff1fb1f0d2bf370791e97b2f0b74a01396e5ac6c3671e3c476b063b038164ff87d31a0ce971fcfe77c1f09a7ee7061cfa5a5a976e8c4075dec2aa8ebe2f0860ba18b0b3a25ba7bb83ccb4eaf10b5abda3e6ac1ed08de3691fee485656d0da7365fce01a761e1f1c01db74dc64734478412640dce696380963f55c1aaf4cf9e00a32c86f8ff8c7eef3b9a998e0035ac644275be8cf345db4196893fdb0ae6ee5efff5b9dd22a9252b528030275907b5ed8e211bb1b9b8132c9b9f971177c40e81d52a1504d4107709199f3cb9aac6e2c353ecbd1a9918f6098032e270d4b362df26e6779eb2719f28e1b2b0693866cd837c89a04ef33c096272336a71666166a7fa3557a9988525deccc2269c1f12bf053c2f765c6b1db03b0aef01e942a30b986a75fc845a7c40215adf3b2d8c99bc7d0c9053f8f50f406590a08bbff6f8ecc832049dc0b9fac4cbaf528ca2f9001257dde6195a72f41b99f92b976f0ec6912b68d67beaab412cd2f37240e81b38facc43b3d869276d5c53bdb42c867440506c5604f6b5e54b39fa7f38bb6f4ebc3254851865ab277fe1b7002350eda7c79497cc006f32b80b4847b71c116927de8ad63a0bfdaa89cf4fd09149fac0246df07878af976430965f4656f3367419a65d0a556c38496d5814ef9fe70952851c2cf598a0fcf704bbd503df2bc06ec0f7331e6fec0d372db7d0e2c79578180c8977794a796dafde06a324ddfdb3891563235e335799ca75869023e81e0a117539fc55ff0915fab613722527aeb80b48c0deb7d2e7fc3394c9103dc463f0c5699fd2d17d725fb59291f60b6fb0b7eed7c4f763d80c6b98fcb70913d418b126e36c0de5cfd7705d94a042b407a39e304bef122381e87d31b37a829b69d71963535863e6d7a69850cbc81a19978960b82d0f1b4d7fcc58457b61d40bb3de5cd4c3bb8d5801ea364a22b0801512fb7195d69863d984558cfcba890963241c24c5dd2512b597079e8a36284572d651ebc933d93d85a0d3e93b3309bafc4d17d8a5aa648beb15622a7806d4605e1f3215d1e4e92ed25b7f10b9aa8b69c4d42a763658a2c97856e87ffe182e4d622f1e6b0590f17803755f87b2fc8eac839f520ce94df05dd22635812ae89f42ac5c23ca33c17bfb5310abd788f226f0defe14c6ea1a519e09ecbd868991eba00d9c134fd194c2a2e9113269cbcfb5c4ee1d522e6fb8698423ec207148d5f80b44d1730327b0d81c0ccb69be3c824460d592ccc05f177481b9457505cd68084512ac1c55f7a032566b39a4741be79d793248fcc251cb0ab3db57127363b342859ff8fd27d018257bda6230e0b031b3a7ce85834405cc83f6f8cc43ae01382bfcb459827ba84596e9bd3b209dd0381d62dedd111084f19e4656640ee3f5a4e2919f6f9fccdc9d4c82d10ac41ef9a2604f27930b392006a20bb610efa0add2c8d6ac6751dffefbb18059d12098d0114ccbf9b8f7e62dfea87c43c2801806ff235fd5a7751518ee8c07984a3078c222a3fb7a26fc366d843acd3e16bbd66dcad1638b4f0f1f29d6815ffaf0bb28948df24b410cd3dfda41409876db1ce0fce861b3dfc5bfa531a4cdb421ac8a4161c664dca3b62c083525b397408a48dc47181a517135553a8c3ca2601d9d70cd50af97a6eb4ba1f132f9d297146ad005cd29fc1e35e8c91a42760c6a2c0b081555bb205986cab71d65b4daa998d263f29034f10b22100801ddbdc88a032ebb04da0a07c4607ba7704d2206ac43aa2d53677bc33e04704f218e2414a10005fbb84c025c42111617902cf1e806fb9c0c84e6226e8040f680c875a095da2a20d2a99dd75a6567fd6c2b273f2da0c4dd5587ab49c255cd481ce81870d5fbac7ffcf459193de0bafc8a54276e50b02acecb5f8c2a4ff11456f8167e11263c1cfb6be7dba0e2282374ced769f0fd2cc6a569192921ba8fd6dffb5bd73df15c4d023a5429d79b11eb3d0d3b64e6e0f77dd636881bf3c0f8828ea7e3d7042636010050ceaedc5c0d08d374e0dd4b0cedec558aaf71c05fcb234dd704d2644599920c62d8a658055023ab21774687f27072e3485cc1aa07a0a895412aacbc84a4f8f759164d265f75d75740ffdd44254849ac31f5f49a515a60bee714f488681df470b775c8f85c25c94a3d688039c0e7fd4e2b4be219c10e3cab10d12bc16bbccbb80eeb16049ce5a2845606105d2e881cf8dc93e93445d757c98a53e9e755073cc0d1619cf99ac5f632b00d54fc467c4511f6bac2246e38ddca175ba6738560463207ab60d40a54b9db2d49ca578994d8e3aa4f290e68ece0a9c672ff4e703221cb56729a0ae4323d8256e93fb52e5661e42e00f336c2a82052a1bbebb5da169ca7c4e571b3645f089df5081b8873b2983551723e2a11fa1096e53565fa765ca95a48c70cf93ec87643cda7d422814055100e5983e09ef110b93053ef02e0aed0865f6f31fc869b6590d1171612af4930643734856eb041aa30b2ed549f46ca7e158520b8e142845de5b089ef460769a84f028957e0e5861df8c6942dc9b9024174b7d43d124e98a10dd81eba193f149b3be9aa2c10dae8780c4e7d7f0993b6639f35c57718431ef774b6bb187842cd1b7addbc38f7b13b6998cf81d8b64ad5270c5e814f7fe4b15eeffa4ce4f3937bfe49830302ec5f104897633cd3fbd709806c3222e416b0b0f6195ea825d651386cde120d7c97f453b52ca01c54fd6c656b1efd96dd74f6368a4c9bf43913c4777360933026ac23828259a4a013f49aa1225d0e43231c996570286b091ae21e18c260b2a4d6278ffe945e026e1e440acb1cee004a0409585913680cc5e91d03e73b80b55a2dae8fcdf4e2e55ac992285724dae4b156bfee4b6a8ddbbcefd7a5192c90ad93c502bda8d8d21d30ffc235c0063903dac04ba58822e375171767d5b89a04b2c57b1906d5d094c1e1af23d31dfa8956cf02d28e4ce05bac2c114849cb457d5a3f94b8413baa87557d825ed4ff29301e580887f0fe97d718bed303d733667ba085516cf09cac0e126a3ca461575d2ea0cd76ef5efde050053c05fba425ad34f7c1b7947aa07db1aef407c7e86ac9e11003af488b5734cb88ffcb97caa6ebf74c5ddd1f96850f82c3cc11840a4281c2a74242c89c9b0bb1f8ee9a50b564b2a6fa5c78434f51c454714035b24e961aa7ef537fe845ac53b7dc3e0796d1c88e88ec3efa92bd2d3ebf550f868982f93c7841fc2305ab979bd92813e6f5f50f40807c38d07d99835d7426b2642b432b4c08447b982cb758846a567b72565072a4bbf8b99ea3bd4f5bc5300bb211575821c483a48ef994ee95c187ce3ef25ed30dd8b6c0efac6093134ae8e55521ea19985ae4c79c58858f77b461e7493e13f138f38bdfaa1c4f017ba6443203529e7625541e992c9fb0de57b2a5b6bc9aec32b5ec9fd90e571ab3135130e847c273961f072248aa7f4242bf92168a066c0ee2fab86fe8b9adcb60ff0ecf439eadd4be87a8a5c2a203310a785fc4724ebb488382b4326031f7e09cc168095d607f7974aa8243cea539565979e37c13f399f5ff6d05a08c8a060a08ad6561421c6c040bd2bdf84788f94a7726f4d1a5caa9238936fc16db5e2f2f3a5a7c212573e95cae534341a5894539c69f27b5a3277babcfac1c0bbef36fb5381bd43c062c94378cd06d1db8aa2fe62c4073e9378170f392c9bb78392311ef71f4d0dba0bca18b2bbfa599e14fdd7dbd187302e34fa8fd71f09e5887136eedff0425e2ec77133d6dbee650fead45e7a976c95ceb4d94c5339a562d98c1481a096b8b30c76efce4ccf316a0f96ad4fb04750ac40a0646d614a9ed6a9fe7d3ae11eec2fff707c6f356a3cc63a1e76641aa3dca9d9486dfedfe3cb90596858c68b1b800fbcd5e921ccb2567a2d452dc99cb5bcb2d830484717360bfda8b36de21c6564c5fe88942ecb9d06e658291c5a6d889827e0cac90190b3ad01085a13ef4a2829ae37ddc72fc13273c9815bd5974424ae195bbcfe3c35b5241f25c51ca94087431de7ac830466dd4c5dcc897219de8f8144e3d168db570b5555a4c499058be98d6e92c9849a4ed582df03e8e35aebd9c56c521db1007451ad3adf7ce137d31dde0d0c2863b0a84e7d9db1f19aec6ee1b35e863c7803873255858a9e4a3f95cf4988812df45ca1bf51fd4f396721e1d06e40a1169a5610d8e9e62ed184fd2d9de94aaef392fcb1e510ada775b43d34626b5ca601467d6767db5ca0022322695a8ed56a3349f1260e0e38c4729415d9e3a4d6bd860a284bb00c1b46eb2ba6de089793003e41db97c814b7fdf929dfa5a0eee754bcde26352052d7049bc425e302f56e599c74ea12ecada49268b8ce9e7a52553286bff2393f60de434e7fcfbbc7554428eae7239449596ec0a4582d5996bde1ba0f64bc4bbc2b36d0e619747f156f8255b542c74748313c382e4adf37f6c5c3cb1a6a4bdcd97e777a569d8eb5656bb744f2632dd14d1ef098ba9ea8d8cd3158642541fed3618efab4b34dd719a0c97766efd9bcb58471a2fb1903f8d09d1894dfcaa21d326f51ba70124800f4efd6a23d2e3b489bffc3d82f04d83b033b25dcf584049a976c975934592eabb4f8b0d4abd0b2561c0e1df137b90b7806083a431ec0f8be398296c17aadabfa716cbdb4222bb57c3ea1feb944757d74c8f2391bdb7e0f3cf65eba456e86540824b886f64a47d1cf78d1ce4677ea33068288f056f53b0fbb348d9c2b5592d78bf40b027a2f3727c35eb98dc8e2e9b3c75794d92b87edffdd3c575c1266d8436206c345f80f4e9398a7045bc400ef9d8b9573b63cee96b7812876d1b28be2f9382bce3b4a52033288c877bae8c77dbe4082045e7dff88a51dd3fb6009d7fe67da005f810215516ea0cb3dc05d08e21c63797e91874fd10c148d2a8aa4223c665424de9b212127bd8841c003debc70bc6edd5b8f231dafd95348cd724266b37fd973c902d293e380ea3018165d8b2662e712afd73935e55fbb2f380251062c80f558228ef0d3cc3ed90be6665c0e0609450080234b40c00b2a8db68728f64b1017572911550461846b13e6618203a037d9a424a12cdfa3ad13c74cdd05b84093f2bc7cab3fad44a42577b72499a9c5caaadd4036f07c139329700357b03bebf9f8e4db7406726c4fcc5984e0f186ce12ebfce4480051a36c04b04f06ae306654205a9272827d6bb0330df5f74a4a37c86c333f50726a1f0a03da9bc95ec0218b22d301ad36d6f81483cc2c0e27051d904887d0ee44293ad147b5cfa45672e6cdcf27e60fc2ae137c99a58aa676b09df5dd14c3bbd62ef469893832201a978bb0a41d5bf84f04c573853dcfe23b83c8d6c911915f6277aafcd9f6d3a9bcd280975485a11837193ac7c8f293d66a4b17f88d76846cc747e15946688022e1efca8e8a2418018b92ee052aaaaa8f0c082f7d61da69be3443bf8e959765a8d0fcb8d423f4ffd956d0c758622ca5ad23b2c0c1f2b2b0f7b40bab7b0aae44b58c4b3a5a1cfc0317b00fafdd12b7e753d814056191629fd20875e0a1c03289615dc9a8fa12c15033fdc094ceca2cb497730c633c864cddbc0e70c623e027a10dd96a687768f5fcfc90aca973a49df500f281e10de11bc25b0ed105bced16dcae31288d7367925c920a1e079ab56b01384ee7f6ec043c787b6001a97a0b273c2873846d6fb9399b37825dac7c9b8dd7c026316569f7fc4c48f0278a9a4ffb5c079e5491a62b32c9111cffbb68654ee993163a9132b226d6bad3463b4e2e50f00be56a8d5ee58961da4743a6df426a9a583b50d455843db3cfa4173e5d050b5b86eb297c9d71074f9ab627647a30369c0319bc243a4f28e6e003438bc0400cfaeebef19fc1035ab5e356d5fb607b7128817be70b9b75f5615a79b560bcc1fff2600b85919f72c130357c15da4cd0ef2445a2294267efab8bd6e95a94bb9b4055193beab5710cee155ca3f5cca17f6b653f87a801fb28b8cf749773b7f8cc2a4dcba8cd43250614eabd326e481979275d61a25a83614be8f558e9cf108108e7a6fa217d05059989523fec0d12bf1578adede2c1fc954d9039c18b0394b18449648964e34e8baa6ca82139cae67101cb18f64ba4093d4c354ba22fb59c560c1711f85ea667914eb3dcb75a18836e901ba6e53ba28f3d6e081169a4c19af8c594fd5a84f3d8bbe86dc3593a0dc46c4cfcc564f5b6caca98c74d985e39a6628fda17450df7ffcab6546cbe28c723c9038e4f4c4d8bebcea5bb2a4c9fce94b8391b719f9066be9e81a752fc05ee7bf9ffc4da01b0000b784c7a46687519dd235cd7bb412779b4e5a1c3f6bf34e23dfc0a8261657b2503052af7028fc371369d7f517f6cc9f3ed6b904ce812280ddc4064ee4444ab0fe10393320d09560fc3a37a5c10193165787accb46fae958ce2bfb1523adb85c94dcb8395f1703309a6230b1010784e5e626dbec4d057e9361a1d287e28d45fa736bdae6dfb64d29427b6c3373be7343a03517af327336a356d2e48faf15a724fd403f5254c581c8323023294fa65ae8039fe110c4a490394223b0bcd2a47ec3114827cdc7094b8aaa422f7028748114498c18cee0fcd8445fe17145bd29bda4e84b61e4b4ab079c112e3a221cca191d0dde6594e7d284d320105a29b4703cc8ca33263319e01427c95dd0ef0c51e7b1f14c092f44439e0b12ca8b45e8639eef262ba94070558aa3d37bc08e7876725e2505f44bee9081571d4c23502bd024087e60f7bd0aed3127d394068a0979d3aebdaa2b27aa48b81a64830a265dfb4657e162ed9c4c82d343afaae2e23941083b830888438b1fa408b04518dcdf00292244178d8794520afc7a8aa0dd9d7c5ff50df1037d279f254890b400894021ee45d043f2679a7dfe2a9b9f52485d4da1434e776b229defb91daedb139428984b455da1ae6cf77390d57dd5453cf3d5597d95b979a7c245b0321c8c98ff9e11112adea60d6f6d509537ffac4b47df2aa340a1ca2214e4249b30e39fffcf686991c081a54048a728436ab52c2730559a297a615444f0aefeeab3b72e6d6c39adb8ae40f0e90dbde2a925600da4b53e8d25ecd04f07a060c004dfbbe3e932dd6f3a6f25d013c0c673be280cf0d89c8dddb10c1ee70b9ca5d0c9e41ef6a5404436df5fb539487b38954f38336e3c76b2b36c91491493d287db45a8940a875dc27b8733ced2ddd6c3e9147a5abbdc491ae1066f76319fa8e78ac864d056769ce077940b45f0384aa85f31dbc0f3e159bb042635cb258058eff12f5abd5e95e77500c03d8a3f9695e7056246e09e3ccde96552413aebb22fe9447b26691f0cb97c14264a4c9f0723f8e66eabaeccc261f871fe67dfc5af8bd6e217da346e3930783c8447aa4dd79f7e4ccb7b91dc329d134539d9020d0108b767886dc5778e26c5c58565443cc024de5f71eb1e0f20382d3401dd94d983bf47159d0806dc67551569b59bbe0e1784eb48c8d8de88003fb256370f2e6b8a2ce7c1b431a2ac0892463590bc05d7ce6c660354c926b240900b52629d89206d120f05157396eac8e9c09467e23c379f0cdb74b9de4207a21e9c2a897bf7aad949d4818a7285fd321b34b84650270a45c0865da5d9e52351efcc3351694f10335a54c5b7faf7d8ab2eec9fdc7335828b287a537d9f63c9a8c3aa51f46eafc1e744547402196448a2687c389862f50247fef91d2b7acc1de584d11645b78b6a8ecf7d737a208b5edf2ba4400ccb906add82f8d3890794240412caa0fc6981b80177fc60f8d6a7a1564d6d0831c6bcecd4d874887078ce1ae6453fe06a001a2e83f757db5423595f9af360b98e91920555643bb9ed5d9ad0c9bba8f55d95a6bd83670ed97165e29f9f751844a6f5034b29f5ca3da3c1c41b3a0a47eac1eb0868563d14ca3a6a7b616eb74c2f953a7b3e88584a93753b63c5c1d09cd70db842c7b0e40b4521ec163ea18f2e83a345fdaef1e65e997e0268c19efc49f04619bd02839c6e46d4ad0f966042d8b3c1ef3b959e9f12a2e658b5b0cb69aebda61882535ed01fb49fdbccfdd429422a32a1fdee2bbb2305fb196167d89984bd1ee68053e32bba65f8365ed6ba8da579fa0174cb50aaaa86413f9c43a4e8c6bf49764bdc67779d52c1610b37a6ee464dda1ddc6fbb061ae1322b03a22a66fefceccaeace537175f5601d0cbc20b12f51f2a24379730158e7fe1caca30e12a43c8a559a2f53a44ebec48967fba0950855acc5ad9e3488f8c19d1927434187b5d81931f2e685e4d352efa0d813bc8050d80221d339e46848838078b6eacd728ea05fe4587e74c909d21d5b131934dfc625ab764586903c1b318180f35377c91e08aec39ce44e49c93c5bfb53a64e6ca55993fdf1a9604a5fb8681916a02341a24c7eff6c96f36fefdb18d5090e45b595b01a74cd195d73b8c83b724f1e56becf7e9aa7df2c5549419bd209ec9fcf336e61c1c186eb5654425798d6055d443512d1ccacf6c56fa10c6a769403d4f7ba32df50f399f9ade7efe9132f61d5d4bc7db1eb963431ed9b0f387746e8cfc5b2aefb0ce6444f82623b32ac424d558aa2b6bfbfedecd907a98b45c2c56a1d132e36e8618297825b8a98dbff305b3547f3c8ee793e034e0980635e7345b53f54468d04276c60853cf6c846c8a5a45116b5736075008f51038bda55e6696046b8ae2e64b7d90a65cfb5c294448076614a3f0d78ce07b87d85fe09379bcd69f82dded0a395f42082791010fd64191325107aa0159aa051d9450ac043c11e8b14bd01b5f7f708aa4316a0e18e220a1490c53e4b28ccbcde9205b45d593c6f8f044f0be79f2d239e0e6c567c989d2515bfed5982ae60b920f541e255c43b3a6bc47596802b6543b017db9a7afa0f09f858af2e2e66ce12304e92fddc9cee3b67eabe7005b94967e4a419f79d76ce01ab5cc59873f8f038d61e2439679d15cd88181a54555661cb5e10b480cc5fd780e41d86486534865af33c7e3bead9fe102057f94c2804b315fca198e90a707f83823e6ced86a46dc200ac42b2f668f3a75a966adc23e36c8a91fa065214873bc95929afc524f37dfa2a8b0afc239bb5b6680306c440417b645d3271353551389c104130f2432789e49a32367daf2a3da928578c9bb509c4b51960ecfaf0fe38051af7c15060be0e886bbc5263b01b4f90ed4f8663872c8058aab2b5b05d1f88a0f566f066b62b722c41aca202d748254125949a251cbfa028bdbafb9787730b63209b0268328a8c804ebc7fec52d9e1235193e00bca294809cdc17a3f27a575533f8e6940ec6b9f3a44720b9fc7721b03d3821ff50224b656fd6b92be971e9fb08d65f6441fdef69863c1d1d533eeaae8d9790107dd01b1bf3e3782b3cbd223ac40fafa781495877514b3f110f64220fc2c4653fd8c1ee343760422d22b0184db1e71772f066b398c3b921e525d39e87a3291e8b045344fcc373c0b7b1009f6fc726814c6f75fc980abb3e67431cf84156c07d8d903e842e24e587bb124544b8ea227da014bd08908b0aa5422283d02754a11b368768173895dc6b85cdfac3c7ba37f9918888be8cee4c9466d40779d22888319187337ae6e47abe1e40cb89839afe8a0c7f4e6b351166a278c905145afc1194d32229f35596135cabc56c13ed4730d4c3af9c7b939d32823d4dd27129d5830383cb3219562bacc333a523280086a24fa80377025d48241e66c67b968cee4c4926a28c60edd005051d418a417139d6e6782918102bcfe553f1d12f26c94608038ca02a6b70c2323c75f7000b104d9ea708c37fe43b4a9071c4449f40480b8f5b841ca27c909efbc952448113968170d3139fd0644899d18b5094970afb80b32e5c12d1bcda648ef3fc82b28a141260616a9d09aa24790ef56c47c77d671bca3077979b6b27644bef02c94fa138b1af6a329de0cb55c302eec9a22d429ed0b9727b127075a66de4adc25e91fafc8d4a30960c86ff0ac2d63ccd3f01ecc556dd8f383985af6d6a0494ca39971542472e2dcbc7618edc80d4c5bce603cdacc19e872d904241ce52e2fe79265a8b6906aabc2101cf6bb335d3a78b690c4dcc065df0a476f145e12fc754e0b74d128fa98fac28ff48f68b1515e52f46379b163167d6f525f6ec62ef26c13a8c3de5bf6c0e3af1ec963dcdf2f777e0649f7fbae431d7b1f53b2e85604723bb35f25049e6d64cf35ed159f1fc7fadc307b313e0e6cf6e0b51ae013aafb6c44acb47820464bc6a57d084e6490de80122d0719f185bc8f2d3c641645a672ecc1c4dab0ce8e465412d599dde7c0411b75004651aa603a46a16f947a62e8a85a8f2f3ada0759a3b146059b9d2142f779be6190c2177a1b8e71828b50317e00a892e7a164b32d37d132e2d4c69247381bd0c97f94a892ec0c2ba31e8ab5ca09b4c61f5d91e0978dd4cbd4e9d3aeef0ef7eb3336c358d9c1e993aa75069e107550e9b1759f567f87609bb68fd7b1f11bf425a33699da364d875978307f58ad6c585745c6975d731dde66126bd826c2127677a641d83e461b80ed4ca89ad735500710cabf70aa4af2024f9256e42aaf96d719a54b400fa74be12d30436259690d8fd9d23af4edb78977bedb760476bcb3e2da407b6f8f18044d4e2cdaad7c068119c6341da63628e4297401e0665287e0e7b3ea20f9eb9d6a6fb7612b6ee948924a3da0fafb6fa948530cc503dda6eb8a6bf98f5e31684daf63113e5c1889d5b6a38648b66457c2b0677f6abbf4a0f5bd19ccf4e09706f3bfcb4cdaa824d14e160efb2328c77d082907378e6c9ee0357a45b16442df8930a9487b0e00a3b5a33998749f41e76727dfae0e9520ef34146b71d9045b77fda3a2f1014ac2bb07a2ec163b246b5f17afa670f34f22904a8955a1155b86904c66efbe80b24d4e8cdea51e3afc0fc37052b585483aed3234c3b596097e26f4cfb7546f846bebe3911c707fb97962492b42e94497e15a2390634e6b3440743c85f107e86683f5fed689e1ba52c8705d1ac9cb81cddb98b300a8ffe152383bf8c4d8bb23ac17dc22b3cc23a29eeb7877e5abcf528b24b0a1e3e1e684d2626c11349cb6c0d48c1ff97f14036fcd1d1aa216bfb2bb2666074fc5546083055c7e54d28e93b465d6dcd6e2be977ecc5beb2bfe7246b2e10d142a3116ee0b79b862cc1f1f9f0cb5a061f5282fe433d294f3d3b8fd0ca6c5c7638dd2ba0444152a96fd3aaa91827adbd2d1f7593ceedbb5696a8c5b5987db1002a0c81b082917e0afd07c54a4d847149959defb81205c0d4096d2cbc6257b233b37323fbb281d5ca7f74c024c0477ee81733a541c49a73d026b9075c6f92135a3845ee65c75be09ea4b164ea081a4cf460092d41818802ea019066da71e059dc64ee5a9de7cb9cb1f85b90ef895ed197ae82f216780d1e19841aaf9ffb3a8f023b5e733c923a83f69decbd6ee62e01b671b607ef12dbc015a49f0f2d982c0ee9b40c1964c971a8095f62d7ef66cf118fb952403aea6f3e44d8ae106088f10d8292996e2919c6b84f5005728148f4ae66753b2cddf73de3cdc9c0be264051d7390217d26709b1c3d2688aefec8a7ac385c727474788f45798c8adbfdf2f28183ab3938debc20ee7300889f4582d8cab523bc83acad63f4453e353dc6bc9ddb94c74f73150884b2c25aa4df012b337d751e565e7d04a10f93ca4f8b4333ca90a7ffb0064fb1c1256214930f683b66ec819b9f0b420854750400d78655ec1e9363b47c7315db8f72718bcee4797ca8bc7af9bce59b335c1807813aab9831c74061288d467709f81be23d58d410d628f3e091dc62d100226e28cd6aa8dd8202e8ea5de7589d18c6247307b7052a5493cb99cddaa7d4c46b916baccb3e6026acf4d2d780c1db2009130b6d2beee4c40a0cf3097b732619a3fb1889014b7c9f150e9f636ba0c4b5c1daf74200342b891c873bab26563c227094453c87b89f5726f0b0df6d51af5541493e1355966c65a556c1a616d14c94d76367224a6d4799fa0ff274a7fcfbae28d66e38036bcbf5040b8bbd0a1eaea8380e6be500ad6392d0e1c83ee7127ae9ba4d58667a3aae7478e5bde9ed5ef93f34d6d31f8bbc6a0b69044b5faa385a5c89fde4386a46e34e8bf1c2aecca7a0fa430ff10bd9b84bda90e87b6975fbb1ebef0a6545bdc05ff5ba85efa1704d7d08a43eccbbcbe4fbb5a769288ee5036508129bbdbf1a4682bf3d8e393187479a94e1a128157cb83465016748aa6052a4b584129fc8000f7559825a22d00f6970268102a273bfd01c5905a44e052c52680e1f8ac2b5253487c7b0c2336054fe8ceb1c56ffefff0530f7d3a896c97a0ac87f7443e4abd40cca670e05e10cdb57f33d83a5e691300fb428199c1c965adf66ce420e745fcdb3abdf0079d614201639f0ec6eac9c59026152d676a19d576978488534bf0588d92a438ce7989ddb2076f21248de5bd089141a99eb2d33b8c69c8b4adc52534f476c020d85018d1e6f2a85652c4f8b98e02b877ce61eae445b2dbe0b4cddd85085a7f1985620d97ec122794902efc1d9f4b20da3337992cfb28ab07f7e3d90b42d4d8f75e8a30f744c7c511c627f3183f9cad089068430ba5659c5bb0ddf326cc1f20c2c66d1cdbc46bc58db8b8142db48f6934e416b7493ed0e41cb46c426f0566795f544062badce51ad6812fc8c4df5951a48444bc42c1a8ce2dc09f79966e37999f890e2de7d371b36915ff57c9704f88c663bbe40df86c7f2ee358f8e1223a485871b7d9e98ac2c9658ac6699c713db6bbacd3fe93dd2e5829e101561bec2d0527991a18d29d954fff525cb5dee8bd08eda03abe505158e0380503496ee177c84a11a1e668ab2f14c4527fecd79b303ae1364a88210aaa2836205a868fa00db4e84048673a9fd4e1ca051d5f2e59eb31a5a301d758df8e2fad1effa06b2ce2369d4bea50ed1f40b04db0aa110dc33ae59024375659d43c5ee61cbe67c36a1c458a2ff60b0a10f4b70cd627f109b7e078c9165cb2b33f3a825c6864e01168d5e22543714cb905f2b5a879178308bc1038859d09a5767e4259e9dedf396913afaf8b168688e05f8a874eb3f05df4a6bd48dfa1c7f42c2dfa1b36eb74b7ff6ad40e9bafe1909e4e4ca4d848593fca001b865e1b674119e831f77d50560c744f83f78be81b493e66adae1b9f535188dea29721f2c5e8921c06cfbdca98eca84ac006c7ac40a7275b9b672bbd2d1dc62e92f9d936de763dcbcaa3d02fc2069fc298dff448da764aaf38aa3416a45fdd8b858f9a5ae758b54a7d120a2e30505fa146908f32ab6de0b69bf2fc8a562701cb8c2cbf83236a808eda06fedcd5e3fccf53f29a500a97218acb8564388b40fe6f3a7d278596ae593832caa7e9b3946b5ac53d4348eaeceb837b6e966d6eea4df0228431abbee5ac2d8c3330d6789fb0e1084f0ac6fd8423371378ca62d81bf6624ff7f58e4bcd5e40e026d73b9080bb92cf43ac0a8472c56f76cbad97f1041f6142a27c2189497faec48f2f2810a921378728d4fac7dc4c68fec32380c18648181c9ff7bfbadd9ebcdf70971f24bea25dac1ff9be5f41186265fc5e89f8d081298488714d9fc7eb3e716ce10a4878597c59f22f386aa6365a10874cd6505291cb8ac88f8ed74c33964689fcc01449db60dbe26c786c5986544012f44306df539cde94798a295e5e3c6cd241af5f9f74b4eb0002ec38532d42b2997d2f4c80e81611c09f6ff9ee7dd30aafac8145a83692b5251ac94b99dfd1abcb0c72932ff9f509e8d7222bc9a1757fa09d7b2b43258c9d6f8b4a27a8bf9212a3844e0265ffd160aec485560d235a8ca708c300c334b492bf061234e954474f2ee7f352cdd6c3cba97c9750a9e8dfa478be904c421645e4b6c5e5d82e0aed4cc00ee86d157449b12b4789d4013c7212e1426ff7a45fadec5d905c3f7fd4a27451479d02792d0dc36015dd28597003f576b322d5ab0e150198452c3edd021f638ba22964ecfc2cfb962d8e6a151e0193d23f3fc8355d320299a7289e4447ccd4b5988b0a5032b712829693add48414245ea6a3a98291d762dfae3f8204afa843a6aa3714dff662f026b1446c206fa68e33c0a662dec8bbd91b08f21fbda714710126236835de45e464c90c213698b3bc14400b40a64f9612a2cfa544abef112b3c61acca89205e95b6ddfe61925002bca343614e04b17b0d2f6cd1e3890b559ab2e425670ba7a4be8251dfb56a27757037faac015d03d0580c54a219ba254be14f14a0dbf8a617a116b67d0a9f2f1d2a2f82cc846c346dcdf33420c8630bdb01ce436505ea603b2e4e82a0ff454d972f0c32bc39988fc701e021bb1fd8879b61a34786cc1a3e4c4832b26ee3990045ab4659ae5731fe4ecf35dc01fce88c2413e82e485dbb2a885d2c981e30a07c8c1dd35a105b9329dd29f858eb480ca44d0eaa49f379a7bb4b7250b522d553f3e140c2b9573511803727303400fa918e47930d1fb894f14d0fcf0c2c904c007508a8ebabcadead3ea1d4fd7fb762e22284bfee18894e97e9a8f9f1c593d53bd6f7f204757759d0c1d03b6b1c968c24eabf7abd1559d9006c79d912e15d89d27b60745e106c55fc733346a73993677287bf0d41d8a9f5ad2844e89d224d1f5b90996e2216fc69d1ff7b66a61d0a4e8e2732ab06471eb286e61addb9ca4602a6b2b640b5981fc749fac16a1f138a1f7c947ee9e71c6660904d93f8ecf67fa332406671dcd9dad18bd511072422999d1e1e7492482a0258aac33d40a0cfdd0dbc81ec32577918a9c8816d947b62bd220adf8d8134df4347605bc0703baebed605c40125ea503798d391050435fa363f85b5d13a11bbd65f780f20f4eb1289ca17e4fa6c92e239e07bdba276191bb4b864466fa6b60888b12efc06b4c6e30bbfb63d8f070ac3dd18782b85c9a7acc2b2241441242f6de5b6e29654a2905e305fa05be05dccdbdf7fc75c3fe7d1d7b84dad1d476a4172c6f73ac9d8698ace45e2a7723d0b0b899644257de2416637dfd05187561ea9e2aec62ddaeeb495cdd99aa8ba5e64fa91da575df015065541470b513406d02d47ed3e638cda751fbb77b22d4fef75d8cda2198be9bd58442a1502814ead7946247c22aff9649ae6b0623a3f2db4c864acfe6c9c044417841e1903570929320771a3a88e872876f541f04a2591ae1e7153123068c4b0ade44b22179d215c1ea72007acd4f0dd006bc20a95d91ab3e085f8594ca6dc6e9c87cb80fbdc34075c89982ba05737c85abfae734fb7bfe8ab4f7f065f0c2184ba6735e57dbbeea6638ed2a340821950a9f8b2a0f84ddb01b32265333068b7b9a96019673fa6d43299a095b31d9dd7e45f876fbc6b4adf7bafb7537f76ef79065e1295c0821832dae44e1e285d67628c056d44df416da16ee1b70c17aad1a1dace7f7f063b6b89e25ddcc89f9ea6299e2a5b6fc52aad73553775b8ee3e9509e5245ed86dc0cca62b55a35358835a8ec5ac01e6468e206a9a48976c05075b154095a239bf677c1eba2df8af4baf8c8159999a92c557141568141f3420509be78e56d74fccc8d0da76ebc62bc3210859627644862680b918b00522236b5d52d6639458a2d425acd39fb5f63992203f96280a5055dd4c572745495a88b650a929ada12549be302acb96205d5c532832b157618f8f9f9a945589545a8bb2d8717a45dd7ad5d630f1c768fcafee5d6b59712fbce3f7b2ccb1e5b58e4619df69b61556a9f71b1ae46733a5b619d33f190ef9cc328e57663588661191665bca4fccb4d3ca48cf192525eb179fdd40fd697f1f5c3725b250f93715a1a96d10ecb326d37cb96ae7055ae6ba1eeb597c45efe63285ce3fd5e7f490c5be1f2b9f871be40f4e74b227aef84c36c3dee6b1ec79ad1adee9b1094cc1bfd5b3d84cdf1b66e19693bf3cdf5f2e8eadb82373630df77739e647d193e0bef5b1b05e9f44364a66ddc4005e904ffb8b830f0d2afd94ff1afeedeebead64986e9cfac03df8b3e4fe3d7f9e4f88449f0ce7033bad56dfa627633ac1a9b22af3ace0c6bc6e3b6a0e9cf45ccaed5f2160a8a60353fdd12c28688280a14292de8886cd2144a04dc15b40009eaf54dd732aa5d9147c4b9fc75c9eeab85dab1a3d6344bdd7a7f714be1a4a424e6a4da499837241b926d860d49dda46c40db0c1dd4411dd4367450eda246b26dc31444441c85892a2b31148e32c2cf083f23fcd00461849f3ac2139a2e689668824005c605e382398171a91910c604e6440d500d500d500d07b8068cff385803546b886a8ed4fcd470800a46c24878064652590acf600a320599824c369882aaa9c884c464c314daf60d063c49b7304fd2ad77615cd7428d12fe9aa4100555ed041b5c03c26f8e874cbf2769e76cb8c6fbf86c708d479ffb486e1b346bbcb54fe5adceafada907bf7c13de4bea53dd7da20f644e42db4da57a34542aa952a5de864b88f9d4c73c7c1b5c428c96e2e4a738994a49997a99e3311c8d5f130f1aa9d4b389474a95b29136644aaa5436a4ec740859c1ccb7c1254015843204182c874dde0fbea473a0d106524f9285f0fc10c6c3efb224331ecac888f11dab42daa55ef5dd9c416350167c214ebb1b153e8b76ab85e51a463b1d15d2ae0894315c17f3f05fc2c0fc8a762c6c7bf92a8e069599a2456055c150ec4d454290d4a4a23c29aac2528fd1ee468d306891ee321b36b8848df2a45eb500550c2dd255db3e456d700d08afeb79b1ec32e1104255b40886a62895fe42dc336da6c617127f93f1e3b6a987e9e3b6d335dab1aa67d4c6cff381e1aa1c7c22d4f28cfc4a1755ae524aa54cd4adf8db5f2fe577fd3242eee6c37c26a564997a89bd8aeb542f7f31188e0695392991adc23cdad9d06ee38cff5518ca33290cff69468d66df35cde07c18984b458b744dd1ce67521e7e581d931266912133337d3c971291125114a22811c2bc6422952a4a1429e533141945a6388a94442ca1442152aa9239ca8337aa8cc22574cc51b806ccbe6fe2ec1bf9a8770ef5913bbd36396cca8f9c8c3146963fe74a2639cd2613e49f68ae9f1c36df69bc252fae9bd76357f6b303d5ff35f7294a4e856eb11e722ca7f14f6d603efe12b758f1cc4ff1bc710dfe14181a42c4c43a300860582f568b27d87fdf6038b69877dfca9fbd9198d71e32b73d623efbd531a27dcc4307ac4ef640625efb91fd56a63b31546667b6b0bdaa1f7b0de699e369d5433601f5a8954c8fd4f3cb9c907a7e1352cf2b66ae2b15edfa2fc0951f7b9f0ac39d4e9fe256e02f5878a8d38eee6272dac999a6f1d7de59b3a76cc17dae2773e01f1df22f9cf608b0d01a4784e399c0d6c0e99bc67e5bee53d1ecba43b637826deffccc058940d3f886bd910dc31ec88661dbb6a1d05448b7fc6598f0b5d732ce070f9c54103847b121965e6eb3940f1b40611fef737cecbfef9bb7fb7ce4ece816efe7ecf0c10f9fe7b88fcee9a68f2ddaddc6a2850b2341aae58b2de2943f177d51bb7792997db168c1a1df4df08efc1f8cf1c1f7e0a3dddddd37b42ca91dcbabd0de667323632ecb300cc368977d677f23e3708a401bce8659677b2af02cec691799b0582c6679cd1ee378f83313f88b8a699a8661f22f3ae3e2568735250bb6800679710eddf2179a62cabf5e88894ac871a8848458b386c92d581cbb3ad0607308f5cdb6399c9bd8c258aa0b517da83a7446523d4cb7a6fad51b81f99837a2fad5c30fb239fafd1f8035652123310ff34656af7a99fe9d9887f99dd5ab7e4d324d538879980712436168cfd00e0c0d9015f5d173159185053f3a3094c54908b144677586fa3b565397429d71388dc5641dddf2e71efdda73fd288e87bf9f6165530fae289f8ae24cd8b647a1506fc2e953ef5351a854fb4c4e7bd6fec4adc05fb0f09885a49c93c5aa40df6cb448e3e0249be33d0b091fd1b48c7360211662a157b58cb2500a8729af130c5a4b421fa1da24e5baae286d5a2d9c2e70b068499245380cd2372c301741c4d6f0f78f40e360294de34f14a448056e30e3c3c844ab80e3d0a89426643548d1e4da2d97203e1c07f67e44b424f8471a26f646e46b6f247becdf5be1521550178b15a1caa6ebb588641a19dac13e7b23dacb7f3229682f1f08f6994c0af2b507225fa33d433bda630f242b02083ffce86894e534fe348ae6eab8077250a4b33a43d7eb649c0fa7d1a13288ec152e07e7063abae58ca3a37114c1e9701a27c74705829891da9c8e26ffe3761c5d2f38820b14415024d9f06dcbe91b2dcb9ae27039da7738557b1d5c4eb7fc4d40b3c3e122d037d8fbe3e4f8b3564a1e7eec351a2f6e755d5bc2c47a64f59704ffd312d317803db7aa388ec3ccdd9f39f6cc6dcd38ece298c85f350e1975348de3402a6987c38f04fdca425ac1001fee3bba4573bab5bbc4d1cf5cbfd7755ddbdb30d2ee8a303adcd1373eb4d838fb917e27272df3bd4be91b7e1d27b51f0a2b56f839bd576ab74a2c76129fc02ac469fa9d94904531748d7c50cab834fd177d9710138f8b6dbaa5638f7ef4cd4edf74179a8393237fd0f6f94fbbbba7cb6888a9a4c4252c37df2c9ff89961c0f029e33e064b8c2601a0f2b6240a66d7df3d172ac31043e5772b70c083cd617a46bd7b51f95d8bcafe4565f741652e2a2f55e6ff823a9d4ea7d3e9c43912b76157ec2eab3055c67574eda0bdc6206f8e0bbe5f2f5d6bd3936c5ac08ca9077cbfde9b81dd9dd31a373da19f273af71ece54edd17def7484fcf7928b17e4567233754d2878c675b0dbaaf638f8cfd4a3dfc7bfb6baff385837d29da93d1edd4e474c1e96da65da1c0e7819d70eb393157227b9eedf66d34925ebb066f4cd4ccb716c7fb2325991db3aa36f3298c5ae91db6ef1165fc26ddbb6ed7d6a735cfb23967dfbd48c2be2157349e19b4c4b02942129a76b487a1f480a0291d50c4920c8b215529676b212c292d07faac2c50ad0134d8c46d81bd72e6ef84d6796847deff9d7e7af43f05cba5f7fddd03103a12f5cb870ffd16e1fa272b4f444d0fa6e339ba4b8ae8b49bd2ee8c25585872a40440883047670a1ca0fb4b082d485ce9543087260e2852e5928e10326562ca540e78da0c8056623b620c1a3e152a205151f5cd7755d1a951954b121c618230624a978a19214638c11c220ab1ca922831131c01e7478411020a0a2a4034aaea4be6f1981a4beaf990284aad5c532e58b4cf22f35c3606acba8dd4cd3bfbc246cf03df89c2ab17ce6d740654e3ea83d938fad1dac3b87b4ddf7dd0bb647ee2761f3912f8b7691d6c53ce5edec2efb8651deee0d82e67eb92b69cc0e8b92b507def7b0c7f6e2cba85e4546cc7d6e5e297589bac533c0b798ec1b66ceb8ee55ec31f3f5584a7ff6775dee1c27f163e618dfaf6949787449e01977905bfb0f666cb6302e863db4e11a9047a4f031142484306211b2e44c853cfc83bfbb3c315230ff68a9bf8d1eb718a9943174bbcb3d6f1c889c9cacd80925be44b1240aa30364e982064a511c596d164a4e038f4824495839d4fd993d3a6a82c34dde59466431fe56d443d3f65b34bddd4f0f4d5766d740485aa8c97cd8393c1a0307f33d6b338b258d76fc8312922cfbc8a16254311fed3a496d20ae83ba6564c392be59231b847aa96fd68806275d7751a1d34e1254b954a7ab033b8b2269e436b385fa13cb34b75fdf7e19469d2ef156f26f259b2c40b584ba5892d85289ba75bdf46162df4d806cb8b48edea8486b62d340ed24a39d94730ad91c2b6449b81e75a4819a38171be7a326384d901cc9e54c752f524109aab0db1a447e2154fbceb2ebb72cbb2e6cebdf34dab1c967bae548f51f7d7cc95cbfaaec65097e0329ad947258a85b6cc44157c31c18152dd1e0090d125aba1075e1926149e27e9e9ba39f7fc56a797bfb778f764e793cbe6f099ff2f857a654f61657b27842e9892e60f48bb0ed6d8395734618238c31c618af2089315e01aa31c68959b9c28ad2b3d28f7deceee8eedeedddddeee6e6eeeee626b49d59ee5f86cfcc4fa00c844254c8a171b00790881411556686cd72c257ead6d40666d3b9b4480a58d3ada762351ff53dbfb75fec02b0f2983ef5cb5d00d637fd8a33998a40d33fc7333fc5fa15c77a2dc5755f45781adf491c00487dc7aaa91781dba559d1c0781adc2e4d08fb321f83e3d997796d67c490e166c48811433583761be365c870313e06952caefbba0a817652c2a0dd9c317457affa1c4f71f357dc7c1507c375fb73168175b2664c5c8da4292733d2297b303bd6a3ac6a6a817d4c50f6a059802bfc931615865c1c8b47ecedee9739013eb3b00ff7cbcaa0a1a576ac3a4469c94c67c32fccd6aa5b8f6312e9c38b6bf5f32599597dd3ac79f15cff1d465bcfdf7ac831d9854bbf5b292af351b9a728e6bebf25d8921c68da6908d4113b73da623274c1e4f7a5bef9d2487319a9be1f13ec7b4eb7ba3bc747910f08d747ce8ea29c1d3e3cc787bb6fdb407ba82466b7c5d310b348622825505966b7422581323a0d2121bc2e1fa1fd329bc8426813634d8dad8a32ba2e2925866159966d9ab66dfbac197336959b89c77bd01dfac36b99f93df7171f0e5bdf40e85c1c3e08a1c3e7ae699b77377cfb36a76f65da7e984dbbed7442a1e64419cdd366c3ba01cb96133c20cc65fe95328779797797a59c93c57a4de4ccbdb0bfdc67c718a36c77d93fba15e463fc1f5c10fef841fa26ca18e307f9b1d3adfef132ee8f20cb17ff32afe4b80393149eb93015b0296488902143feff870851a15b2d4485214286b48f1c2415fa66c87a39fa0283d80245266144c0676ac026d5ad692091291be05f7cc1dbf287efbb863bfbfb43138fc73185af6b53d943f22968b5cd960e96bf6608834cdaa2240717c8a30b4a777f7777777777bf7e1c6e6efea62c4a85f421f593f2e1b97ddac5383aa4541cbea36ff6882128cbc422555e2fb3daf44dc7ba51b9dd16e564d2ec70a47c2fb00c1a5ae61e497fa6fcd3907f20c740fef0e173dfc05eb8702103753764e8403d4408fffcf44db70cd43b3c9b2f932514281c40921246f85a1d0e4e970e07474b128d64c57b0f4a29e325e15e30c2876323b56cf9c1a1f899bdb6f56f53d3d960d1720514b046070e3377965dcd52cb9825cbcfde08f69acc5e662f1f48f632cbb2d7b0d732fe8eb53a1a67cf33cc21ad946598bcae08e70f948136b5e51296a92c1325f182ea3c832aeb631586c4f72782c96f130f16ae97afc5189f0b4b8ce2631e9089a42871168d838f14f115a0eaeb5c3405086e44086ac75eaa17d58e9908bb376b43175d78f1d2a58b162d52a4c0cc00cb0b9c54ee0968cfdae94f1f51a8d9f9ace0db9467bf37337a2fa39bd843ec79314a64db5fff67ec65ff3e3b3dc675d87b8e07fe566d4d264c6cabd8561fb665afbdeb1fa36a8e4b8e67859efa7e6be4e9dfca2bf063cff1a4519efdf78dc26258d72f7f735c725c2fd3095df9a217c675dd4914f631a8b528f6fd4cc429cffe529efe6722456a13f113fa576601cfe2a0ccb50fa0904061390d813ae284051258b651554e439cb0380d711ae28405ea08d411282aa8235055505470bac56fe2b11406464205020c5017c72535d652b64ad48b225d1efc8ea3faa7b628e734c574e7ee3783b69edaba85aa8b25065a54d60c2d8692c9bf5bc3c7fb7c09773fae9b5db5b85d747b5b155b1f5ccdb0e47b70c2f7fddd5563bdb450c1e487d84a3e784577778770b552f9cc0cf89cf5a4f7255fdcf7dc9ffb8bc1c2a43fcdb91dba4d8b77863ef727ddbd613ca0c9f70ee17bdd28b7427bec5b12fbaebf265996610fc62b8b19ccb297659e659dbd8db9cbb60521cbb22cc3a494524a79bdbc3c93d9165d59cc60f62e795d97bc32cf5a33bdcdae3645e9d2a54b972e5d98bbf8436e7fef868d8d8e36e1e03c187de6bfa6d58ad7cf19accb9b880c7dd7b7a4c9effedcdd9fbb77ab86a3244a4840ec0229520815c52c8114c517298e0040044b209181bf589e88e0aa58e53e9005a96f16892c52aa3fcca27170df2c124938a91e8f54875f36c74bc192e0ef4faa4cf6f0b7f7da0381daef6b3e3b1bed19cae84ebf89f6f4f860c028c890251f464acb65677b13eab7bfe88ee9f4a6f771199914b4df1e48bf891a317d3f95c98cc864a9c799bf7d8af6b05ad269fc2795aeb1fa2f2a93c2f6a607b2bd891a19da39bde98da07e7b20a6d39b1e02a99f32178a93b9a88993b9364ef5abf7d18161a2182018b487859a100901ad38f825fe70d10404f31d37a132d9fbe88420446532fae308eb65bc8f4e8c5f1dd5774cb47a5e721affef19da313dea7b8676b6377dcfd00efff6be73fa15ede11dd49f680fa3e8528fff467bd8c8b96c461b17139ffc555cfce19a93890f65229549a1fffd0e2341e1248b2d96fcfce8c0fcea877654afbda63dccef680f437b86aeef016ab2a3fd8af6b446bb8990f65d0369424d1c48690948694906178363712170eb34d9a6b47dd74ba65f2018dfaffa9ea19d98d7bec71f48013a2b18b407c6c3bc8af60ceda81e86f6c0a0ade2d2d3319403acb36a23d4af0eeabb26425199eb7d74ba363afdea9ca8cc457f1cf1d1893f4ee3fe306898abf3a857fdd00ecc9ffe447b866452383dea774e8fa23d43f17b8488764eafa23d2ee4444ee30f43e117575aa18d1a19dae9bc89111395893f3ff51b95891448eae7a768cf90cc8fed1db03a1b05129770d0810e3a18fdfce8b891d3f8f700b50eea5b38fda43240647e989e861173759c8bd3b8141a84586289a49f1f9dd54151232d9ce88fe9cb90132c2822e8270689196b5852bd76aef49e388dffe6b593f981aa6b7a4fe097eb5a52fd12aa7e0555bf80aa03398dfbc32ffe7029fe38fc12856293eaf149f548543d1655f7c8a57a44aa1ebfc4a5ea5f7cc969628e98ab938023453a5c3b5f7a327d20eb09ad51a032de743e99ef703309cd7e1a7658f1c40c3f3802c20b2526e029ae2a90055630221a880164fb430eee67e9050f3158ba02081bac74a0095c28ed42b70a8e02e001181081440d7c00050fa46012e509b41b71c8091a434da6647181134c6a0022935b7eb861c39a316dfa66a1d370a4e4612127eb8baac31000b945c9cd8b40cca5d2a48b0894d0e10915484a20b778800511b882044bd85005133730f9e1da4203143605e1ca0c38dce0c397273e5c5b8e502b880ce9d9bdea56ab4059adeefe0b13cc7b05038ea6e8a2e4c31318aef400bf98a1dfadbed988e440544e573413365c848b2a946c3162034f62e0c1d4262166ebb4d3400a2eeecd847970c4e4fdecf4e1c1055a2cc982942508a325d726b1c55cc9df1cfebcb84c529e4e3f18f48061890f58d1830c3bb0a2b343ed5805900b250707e0841338b1050f6650e2051724d04cc047e6d6e7c3640500db252d23ede6c22c1c0000d4ae7503c771e050b51316b36bb59c67ab6f50fe8508580c3182235a4cd0e4051dd7a176ad1bd56f9841f33a118f5f376b01526f473fef0642832cec33e66d6218a5fc6cb8c665e201218430b233dc9cf9a8a48ef6343964664600000000d3140000201008060542a158341ea8829c3e14800c748e3e765c36914763510ea33088811842104106108000210620c410cd901000c5a8d107679bde79d6e1b8bd14eebea8fc768eb82a372f5496ad72f1f257ceb7896d377cafffec383d035293f0fb5d12d5ab4effee159f9872decd3b5cba1b2604889647c45f6bb7409d8cf7e02eb3319683692ab8c63e985997c5f2d7125838fd4def940179e7b66ae6fe2490cce985f4b0a15d41c59d8ecc5386f7931c0719f3e7488daa6ecf89e40f8a6c0c69f39e3da4403e8db3ac1c28b74c4f1a64b5f51c7439c43448172bd5bfdcbd223bd0315a3e6855a7d9464c5d1616612b2830e3bb7dd402cd3f184861844affe5fe84a0d6477aac98044d36a8894302f2966e5eeec8e0289de927f8a5e4b96098ffddd47f3f2a2a0b278e82f102d77c23db3af227cccc0c11a628b161f1450d776b8993e7c0d4c7c32a3996e72f42e8a19c079919a2b2441cf7bc07faea0b747a2cf3466b978421841c20fa7d8bc93174bf7e8e678491b444c1cfc7e512cfb5cf25dbab223d8d7919f969fd7f3bc1b0055cda78a8e77dc74488c09a89a27ae4d1dc127ab41b4fb916f0ea583c0534aa7d0add8fe8cc5e81008010d2705435cde2781022b038d714fb26d2978c462b1cd8082e350c483f3a7bf0fa064f7d78a5a429ea7a0376f0560272e6060bce360ef39481b6a643dc5d1e3028ff350adb860ef3678c82b9ef93112f183e14d8ff359e6bda096cb1893c99516e50f0e709949bf3899105204020c4f6afe11070031aa7d8427e1d7bd28ba4fd1de68eac9c464986f82c5f098db6385a612cc4ae7537b46a7d5f704bb7d46063137137e72eb12868429f5633ebc0a34e069a1989852c246e400953ed6d4f227830296266a630c7e60fa7b3eb63fe0121247006e152509227e341c9404877d42ae5d675a35f843f06be8038dfecd6bbc0c40dec14b6359624c3570c448f129a51118a00effd895224efafc5318e5cb25a2180f28aa2e2e8314e6fc5708e5c9ce4c0a69b63e73ceb1df63919b084f62300980d98ef0329fc2d41a35dcdb5d343e95daf75b59ad0c59c396c2e7826eb0fb2a4cc6f1614d8482ca36190840679ffdd73a50222dc0d0f645cdbfd7ad7ccc7c1431ea3020e78bdd7ea682bbe7d2f8a612b6c2090775b19ea8522a169f7b9fe75566ade27e96bffc9cbf6d8b08434c342551d519cc62221d98c1e944582a1b8d163df8b2c25b0633992e9ef003f213b99b60910ea9dc11fa5578b3e990b019c02910cf50b34f9e0c75f803cf9ef2058d225457bcd4387017e51f39085da4426bdff312875ef0fcf6d49dd5acc8ee1f4d8ba741bb238813abd731b35752c49e135dc6b8b1a4d2cf251dcc4322dbde4e8bd3888768a1bb08d987e78fd00aef96822d027e36c4fbd530645cd3cad70d41fb1dd74d6e8540f0ba3483f2543efd7221368125470cf1f41a3ae60c29b95a821d316f7f1e35dd36723529356ee8ca9c744dbc8c6c54da5507cf400bae60cd3487d323497a629529a05645c7891ef5d200b0305d812ef31f7cb63bce9f35024407e55a70cfea59df137a05d4c0360b6d3bdacf2c9ff7b4c4a1828d79da65881f41ff9e71fdec65f45d21d177c0be95a89de87140ffb668d4b6eb49d7c638f7ecab18755d067d24c70e2b8bfeaec695300612a380c21021a412b94d5dcfafb36470a3fc2f4c36a558ed3297b82551afc7aa7ff565735df991e1b047ca0a13a88af0e035856af5b5c701ce4343412aa4720fb5638b53226af05f07afbb90203e50b7bf61a476b8b3d512ea2ba0b22d34cf264967248df9b1b1710c6906d9e7001aa5bb777693ba3681ce30fb280f9525bda3d4dfc414cfd4cd67c35c1e1546dad9065b4720347ce75e2c12ecd97f5c61f2c53ec2b41ed3d7682bc1a0944d808754bae6905907a8e3914b43ea0d0505dcd9e3288bb073faee85ec15fd46b705acc463c95144a25fd9f528d712f96f4b9cb9aff36a604a268e69ad598b81e6f9ffe5ec8421129e24bcd0fde9c8f26726e4a4ce6361ea2a2295532c1c1afd0d45ec9601fc686017364527f98614e4b613988872a3e81d7a48379e8bec135c82a365c9284e6975293d80c76a2d089c84b8227646c7d29604c253264f54451b859245937cd69d07b56c4d6a908dd5ae419ab9c90e9c7e300dd50af0ff28c7a5ec83fe514ad3e72c407a299f5477084b891b4573c636de6cd1f21b8675770a9836ec6c3de4bb6522418b9b59f52504c34eba8760b9f18593b3c3de0f4fa06f9ee8810b026599970d4ee44741f062f948f27d619c856627f84893b1da3e6208262ee367b947e4ba1fad8ee09a8e439f1da0ef454c866e0902da4e7287185d94da45a40023d4b6749faccaf2f99b6c01b153b9cea2366161ae1c2cad55056b5f68f65e9a846e3d3d548e10e44d5b37681a70ece853b0e2d00eb6fd2ac97790415e82374effcee3f20c553a6d9097cfb3d5ac6ccb6eae34b4c3efb735fd6c97aa9d4dc1af70e703f4a1450a9da19837940bfe9adaa2a8889bb845e6498b89e667f00cb2d40168d01a690e587f4745c5188ba5cd4637a1c2353c00347e2636e9bac099a9525c2734a7b890b376369966a437e9ced303da1ed39b108fd0828983495477e61726a0d623017552882ac4a16845623005b855c8bef636f9cb584c58c838e00c83eb6c113d458619a9aa14145966891118a5ef55bffc61823ee24c24415cd3cb605e9481cffd15d3bcce2de56268d31070f9e365c6fcf247188085b8805eec32c66584fddea0cfe6947ed6d56ba228bdefce51a99d482d0adf4561b353c6df22b1aa82b632a40a30afcfcf97a89cb8e140210ca71e5ea2ef83dc9fe8fb3a8445c7508e1702438259b2f6c267c3d1b53cbb3f6cf731828b1b81babfdd00aa3845c83e91ad7c40a7ef5513b51bdfa2606cbba862263a17101c5670bcc67053d3d2ba17fb5cba632b0bb7d4f04af02146e0342e6d22dd66e929ae6fa80af33dc2167a3ab1338ea6fde39b0e11038d83a0a949c0f9721ab39bc233f45752a92c1c6173be77847d544915fe0ebe4af72a18c9ba6f982443b05d0b55569f5db2a7351b2d2a48bc174047e11d60e170f4dd8bbff0720600f206ea5f630d2953de7b54aec6089385c300d547d4f3740c329842c7c0c489272cd3e07f68f85e9e3e6fd518ec94b2b787afed01bf8ae4393c646ff79fab9c2296d4b4e200f0d3d88932ea3de11490728ce1354aabc96238957b574b7562ae82001cac6708fe8d9eb39a0f0a1d79da8d2b31b4dd62ee357b570c5770aebc4b44288f3c6fb57176b3b2e18c012efcddc964d03388ea02a8b8d82b3eb8615fdc5a0db1ceb70f2c415d7ab42a3476f63c855493514dde097379337aea5d37c23493d168e3ba5eb893dbafa2003e88928c89f96b0478fd86b579ed255c0bda6dfb8e648039b2deec5eb02f31c3fb559deaddb2cbe9b6e2e1ea6b6a0398fa27e6056305c91de1c3e6524099c73a9c9e38e8516e8d98e60c5ef80cadb16fd02dfecf530862b3463fa0ac79b0568b6ed9591979c0b3697f89940ef68af67b77683b66022e33b3fe66894f17ef887d96c1fc64646f0f77aa47677d8e9039c250cebed47cf5452313616e5e2ea5b47906a6ce6bba213aa319fe0c887b78015ef30f3f09645b00347e062f3b80f9c047cbb052703953e691309046ede2da843322f328cf7164e76da8e90956b031046fd2457b0e19b9ca3f60e8c5d6bf3f68e0aaab4e26ea8fa0934b4b7633a4af9cab992c868b6a4fc064a1d99703e536ac65884302663eb5bb4293d05ca3d4a364b7132dcbb29b1e4968e0a21c42b06cdbcfd35bc03dc61015bf4722f27b23346aa12bae6fdf956609e041e760eeb2c2d91df604a776e89781a2e2c4da61c863dadb4617d4ade09345a1f07575488ee84071df3e3dbfe5c2da1bbb78776e90d95d868aeacb08a8dc21f49c0baca13f828f44bfdbb7265b8add67382c7352a06533d0fd28a0acf13e056247f1aff45237e8ec1a84280276a1c94a1f55eb010711798906505453ed11f85f0511ce43e8076d5e93727124da3c2046022ed6bf80945780500006b982c6a51f609a48fc283151e8af95dc1054c13f788c91c7235b3a5a85b1e995ad949047c363d3e20bbfa22a570793658cd56cb47b74bc935c0b65e8c6f482339be4d4bd0126a138a4cb3d98b9815531ac4789b75a04e4c89bd4d79f32e96a5f2f0f52d06379a4e2a88f9b40a2f23072c10ab553e8988362e3b0060e0726afaec635f8b790807029a6f9307d9ce59dfff0bbc62ae3204f9f64e7ab7393270f8418b5e7b824b59b0e98915ce27d9f897897908d75de2003ce1b6742cf8fbd852b93999d0b7e8f67c026f5f80e044b289a05defe9fe604c6554e5ec0ab78a7162bb8d9677f05e3b1473773ac666323c909315632d640d93c271555124775768eb134d54046ca4b29a389513897d460327c67c570a1e52d86aaadf8c219744fb008dee4a1e4ace445172408f6b88085a5e0daafc810ee643bc30158af9010630021167bb64239087002156990c2dfa15d226c7a04331406a9543013ab43d4970cede50e9116e00afbc0a4a6e0e0e260bfe5f5462e78992f23d36495cc26bf684a34c16202cfa1d6a4ddeffad4268bc1a0ae2f67ea0ef905ab24a443a0a40b5ccc3ff36412d7faf17709d7412d0b492d5cd3177f74c75cb2085c22f62cbdbf127875e9ce96cd90fddf05929d7bd3c59aeed6fe1012e7e55b324b8f0efc7380628ee9626ec789b610edc63dc811812a81565f076ec61901d4dc194d9f94ff47997109809f519a5e85ef5798afc1e72487f4c04664c30f15ec0d481fab73b72ee26ff8de0b3b6aca71aaf9fba809d1738505a49629109894a98042496ae171bc8ac3e53879c496d9d9eafeb66a03f22cf3133f2983301c8290ee02d4d811795799604488ab9e79bdfa63e92c04eda3f0deeaa2448d604b9931b77ac9ad388adfe63d8863ec180203fc6ca27caf4df87474ec4c4f4f10efb45fb78114dd5b3854f21bd234e47201bc9069f08acdcfef5a5cec402a6cec7883d8fecb896580d0199e6c2151c5d1e5ab95fe1f354e9fdfb1b311b38699f860759000683558ecc8c43b38a5a55879d7038379463c4bdbe0eb3ce0a56beae84a38dde17ca9865bcb539a16d3a3394b068403127b7a58aee5b2e0e06afab695d31da4298d95a2be43463b57c0ae43b2b98e96529d30db68107b39e84c82358c71fd1392ecf94347b48a80bc20fa0b0608903fc4f4c4b82a250de01dfacdd9530410c1102a8a05fe0167746cee35a2933ce641001818e381b4f66f4adadc0546476fcd611c739d9e9d8c800aa12c3ce5be61ae7a08cb24a6003b8e9685bedd4abd114a8a2082b4cb5f89e8d73c03339beb5bcdc9a50cb02168182ccdc142de0abbfeeb5808e7caade6c2659f504e0036dfe773d81db03a151e436d34aed66600b28f6eaae11dbebbbd53e7626ea19ca2a07cb350e80312a9376cf04414685785fa1291443be49ce3e5c0734e9b4fb251f9871e57f1368aad6caaf4a44e9aac1aa3bbc185591949b8ce630621fa8a516038b51dfba2442b63d7e081827dcd76a05e3dfdd44381cfe447e4c8cf8647c9adc873911d053e338480ce3f7b79b5a5c4f3230884bdc4dc63ac3e50a506f2b5e1f4e60a0c58e8edaba67ea8910c11f28458473d22839d5dceced7210631f4ec0972521c62e8344309ec8f532e07e445d52e9cd97eac2b2ba0349b8595c91072a702e3e66d22c762810baf860443cd4eceb6ee7b1e1332540f53727f9ecb1d7ba0865bd4c0cc1a4c0b85d09655ee653da2ce5076d33eb7ab5ccbc1188ace376700b21028695e23d5f715c3bec24248b7f9925317b35c9af79b1dfa4de43b182afb41743543b780553e23bc005834c75b598df3732a5201c2f44b4989cb72c5ed9e6f73c1c4915af8cfab11a12128814cd3b0cc96137ac179ae52ba8048e0aaf84f945c3f9281b554c3f0336e2f3faaf22d8bc1e5ab8b9c4850c3bf98c99f69db86b5637110fa6bdddeabb8b160bda94103904fa9606a9100c5d7ec299d428ba102a7277ac907272ce033403d3555a5bf597a7bea780c1d6f22b568a45011c3033cf6e9a54202148062f020c548807c59492c0a6613212a2c704b3cbe813373e14ef494c7dfa091c26ab43a0f6124438ab18eec3177c58ac88da46197923abb847765bafab49e10f54ec78d780cdb4d5134b8284ad81ea9fb38ac1e323017212810b5f83938e8bf58c8c4b9950d38fc2ef8daef684a58a85c6d9e88d5fca9473661b7a031b680c56b34e4de28aeb18995fa9f1123bbaf34092b116609a0f7e22e4101661502a79098a06066b6b3c1af81cc809f8900e2b7fa53df992c23404a8efe38481f0371fb061f452b47a6c8612a317283d1fde72d941542c87c322e2c59d0f0f3d5bfde974f1a344c9277473a519603b4e577991143c3769e446c6191193d4b65ad04a7a1d7b3a94682b8618f6185b804ada3af6dd5eb70d6fac9cd5b1363be641d544982f4381cbee8c885e640fa9d62babeb9ff72fc0986b4604226a05b87b7827dc86ed411db2bb9f33c01162813a97a8804685e3d227b995d3e436a613b2a194c847e954d03ea71d89ab63a3cf05c7172e006e04516073b42e620c4e53dba93547f5824fc4f7ade4e8a5bcc3a48d24d7d85d7de65a46e3c36bcac68292a1b21ed095178c6dfb31cbb98b64da8701d9a7f8ea3aa8132f481a2f26e37590633ec1d1372b16c3fc07aafc7108b28f283efb4d9307777d68b9a565191636e8a1ec438fd1237c32600742d5bc8a9a391219493f262cbcece588eb48cd794249f1a49ed7460b7423e9a51714076480428ea1b6cb4c087796fceb0331aa975b91bd6e8dc52ef3ed91189eafe7033ccabf394acbcb486877bd330cde4b62f146c6b9c25cb33aa3a0d079b820c80064eb983b658e6ea1ffecbe7794971a6db49b2217dbd1156ee0f70cc3f1953449631893bdc3ef38ec92664c9d89e1180192c56726500704248c5cda9171b1d9555a55ca7206eca83d7fce2e2960c0b181369fb0f59ffa5d947a8242b3ce46c476f4b53d9d9f2d72a3b150704cbcb7e4b2f23aa1b8ff64c8e3bd2f05cc8585db2141d4cbba56dbaa178ccf3953a162ee86c15fe8a5ab66b1c59dcbba9a03237c8849b4333fc9245850d10ed3b1dd08ceb0c2e0e87e9ab166a5e9d7ac0c7881ce126b56a937aed20188400c0a74e3325ab6f4b0fd74a094fdabbbcf51e2d4a1320ae54265e084e94568cc9886849af74c7140f556d33605879793e65f1b8e33fb5175faa3891f480a2bf56850d50ef42f834f83ad2ac6b88272dadb995978ea665b119567731096962f3858b1c8f824b55c65501e90a801d1e53da0f76599734ab9fd6f2fa397e73f8e0d9417a5a174ea509596645310c73f25e4f20aa0be3e3b861351b0198fd89b575c67ce44bf001bfb93a2d837b46b6352f3e33e3ee8937cd837bbb6237dad509c90af15c52411d6f835f3b901ae4b15e307632b8d98cf43a8b3087e3a3dfe05ce2ce55b7676cf63a9ff3217f9242e635b92a91639360403b3073bb9b7a14391e46a3dd3bae778c5203cb4864bc5f87e21a6a821128d66378721909eac20e594385a57e5a2ad123520b018d33dad9d592f7ea69302639c56504a6b3a8b42407d3df659fc49168920d83cf9c07728deef34a9aa5575bd8c3c8059ab72d6903ec6f9a7d9cbe502e493439fcee28560613ec3be75764f247fefc4b2e255ea7a9d69b0cb4f2f4ba0b6f9afba4e5b3f10b22b782da8ddc789e4884035409061f37964f9074bde6ef0e0515678502a7b019ffad04e9ab026e0dd9d283b0fd1d487a48e2a862a198566b9079011f3140ecc9f3e7e83fadf47aca1c47c50724bcc7ed1bc317a15371442ee4172452bfbf9a9a2a07eed103e4eef4481926a8409bf0b3e9f0acb307c84ce40b164cda87a56ee715bfc85ea5b570bc35747478b30cf7b90dc9a94a1b99731ba652d1591b47640076abce2e4798dd445592ab12ff48d3e67c5afb6fec3095476683e0b819b2cdcd6b3f680b70a00f102308105684ad33cf8b96c50e760828160f8cb3c61717ba90e330d4cdee76fd5605267fedc7cd818b2407e9ab2e3cd60f1234d45934d6b76e3735e24286ad0f1b987f1ea9d7541a17157aea3b54a3e92f4af42d0dc0560805ba6314bd1fee00048c60aaf24e4728d13bcd1225e9ccbdecdc4350f74f90f6eae8c975ecaa456c2075c6702682d717762b4580f9b6544a30da654e00ea3d1cc6bfe7b9b7040662cad5af533927be7e40ec59591fb7136dcc682a017ba234b4d30e6db3b2082208dbac5b368ddc552e7cf2d0ecc1bf3a1d26be7cd5e6133e055538ab2102443caa1c717f9288e8f84064eae80303870996109b74985c690d4a16a0ae0baec26092dae2cee23ad18e83cfa07c1293106d8545da5b0e76e8d5ec1b252d3695fb899b5c3b389e4290904ac809fbeda42bdd7f7f143ecb9f4adc2370816617300d6ae791c63fbe90adbaa3da884d44c4707e2e9adbbb25f79071c1e3cedea1a4b66c56d440f163d3cba14011460b1f6e506844a77e1d47d2702c4cc0d9de6f20733f2c695cbd91da2f9fc1418600cb8750659714c00526fb6f0ce9fb5d6154e7b0518202f638a504cf455d25be36b6b2cde43fd463eca60b2b74c4a0599804088235cb1c4987add09a15a42d3e28197e3d2ce9e6effc41f0aa7f17d72f9c89d7580e0dd6f0dae82b00568b076acdf3a18c0e39215cbcec775ba058682651e50f5e9906eb62561105f41e0ca8e2d853a76d63123ea75b92626eb8863198045853b9e77d0270eb2847d9099bc69445d9fe209aea77490dbbce8dabe666944a75f234f1a5b4643125412773f7adb944cb4f00c7518ae77756ddbc8fd5c99b7d3d52f313995b87b26c18905496e07269a8a2db2a2a146b582d62c3e0061d92c2c69602e1fb0dee1847c287eeb1ba0e44e60e7295fa91206a514b24a9e5ae86ecb450999b3e90c2c5772bec2fb0d91853014acc6f37e265a11dcd3f08a04f5b541cdbddd3ccf2dcda8dbf3992fe5a436f67322326378b3691b343774008f62270f4c81a997a6fa9707266f232d440f0980f949da4a8040fe5b3cbd077ca63125c8f4da21a9c6719069fa44e2b275bd195408b1f8608ce2f14b81d63c71a929ff40aebe2bed17e1c20aa3366c578dfd01193cef3513c42d7f568015c1a53280cbc02c1fb7bee2ba6fa2470b38a04c165af4ec118265993ef7f622013c3fcfba95260bd9e592c911167961ae3a5a319d0d0fc5c660cab0a8ae9dd54b17a43df551e048ea0b2b51c3c77ae4c7f17c8a723fea442616bd66501e9ede32921471f973d4d78ea1aa132f4a6efe347d13bd4f0717c8ec61631ec811d7ee278c67dd714cdaed169417fd2abb0d9828d28122062398aabd4240bd4a1c111e97acae1121dce10421123294c8ca35326f897126ea1d36a8ecf813aad7dd2d1d0bc7837b31546035cc29c051d127716503a6745eb8e1bb150bdd0bc4bf2deee3e13df00bc1b36ee66b25a4d49cb9cade961994b7dd6d513024e2a266d30ca507c7dfe11c0f74a86ecbd20e7496448aedcf74ca2678f2887349c372d3d171cede7d220965371b543de76e3d0e629da4d0697e5d852ef53f116c417baa0ce3e2cf08926211809b2f94686bc88b68279f74bcc1dc4215d7b2c53d2eaa64852a02247f51d7cfee76108f4649985fc4935c2f557ba24a8e88318ba37f996fe91bffd256862c54f40e08fe98b5f2f0a1384d92990f5da10a9884021602a6089d21d0c324f6059d347f29d587b794e2ffc8d5fcb6e0050cb44f798e6742456b1f7089cda4d72c676b7ef2be761ec4a3b1b21fbe5abcf9a13234ab09a6e4813649bb6d112aced51065db899dd9170f89efb0aaffca01f49e5db7f09f877e2bbefbfd7f072895324978c9cedc03ac8553c6ac972cc0c07169a4156265b780fcf0fa7d33eccc2c6526514819d284deeea2738af3eee61c6c2c527ecc62a9a9e7e4437fa91298a3061bfe287255b6faef44da00cff22fd194523970d5a7ea80cf8acb65ac773abb32f499320d88a3103998ce0a71dbc5abaa9000f63d334872ccfa38837ba881908135ba47d868a90bed8465ead588c57d12d6189b01cb0e36571c32d98c5a80bd9695f190f8fb7b3603f09ece676049b55d96720f7ad52234b185af13cf415cdbe30b0b415576787b97e48a929471cc88cd41e86f2022945421dfeecfb8942403d0c709f9a6ac00a5f99ef23ddafe67d09dcfaa3e498aa31471bc56f2228fbe236393a6063be5deaf17bfc49b26f3e403b5ee88315fe893ae754e90f19ff24dae840059015cf9d92936a242d170191240e396d225d0546d9b5afc1d41c1c385c4339cc59f66053462c0fef5b61e866fb444c68a77944db6112bbfd3c44d76b64beda66beb4b40db637bc1a014e9d8ae64dd220cad6abdb77047ff793bcd5c5bf8a65f15e173a0929043e3b90361fba7ae914ddd6c14e8847b35d755d7c631d2688e6eb0df805a04543f1d62688186dab229a4a402c4a4605663361cd7582a2f995477a901861179354dcbf196816f5436ae4733d7dda494b21da7ae140feb73075cde5489bfdcf071f4293eeb0a985c1c6156b218910ffdfe9bc021e8c570fb84630a629d66ce2d197f563dd2837258416af2f7471a8f991ebe8f3c360003dfda9e6bda3ead5701a61c42fa0f11415d5d2bf3f986cd2bf75c63b91b420a9f5e0c2eb5e62aa7dcb05f442c1a913c375f0eae9c35e6a0570477ebe3ff6447be8e30940ce6f4debac41d23e3c344441cfee00bd37bf3367a11ab954f48043a97ba2fc2d921918654c865993bae064463e01921d97db6e51a04c372184b6db5a91c39e5429c872902c486696c57d303620b43340d49dd1830477f7f00e54646e7c0a1311f31414e268fa832c037570d95cae8674557b9bc7d551e822854b4da4cba1e110f9265b68fdad22dbb346dcea5abbd82ad176c565e58f5b7baff7d2acffb9c5fb6bc09137549664f97faf098560bfa9361c50e48eac73ed1dd49bc7c30418d83f6228fd05de5afca4d8e7915e86e7c53c02ec9e31db14e8454b58a97fff3eec1b94b7b27666f502606cd9c3b3c61f892eb4c485a77cef9249efb987d4e637919ed6d1be598f76facf025d051cc275c6ecef8866c09464d0360c9bb37671e906614ad26877da130195173c74deaaa477dcda0b309e0471d7f3870405c5a7b57242522c2ec95d2822d61c3d64bc06f82ea242b6622cac8efdf1cfdf96c3c6618be12aa1df9d5a8b3f5f3a20dd523f9dc3f1079d1869d75ecc957e4a9d30b66171f9f820eaf5ef1d193176587188953e59a00aab5b1c6b0ea56ed82be920ca91cc3e3120bed37b6bea82b16390d469ba3586ec2a27fe7b12cbba682b45b1e0d5895613cfa9f33fd8935d08f07cac6bdf2a985862a78219a2c37a0a62ad32a1cce7a34a9270e3d06d94138a05853f9bb8399bb1314680e519f40427d2b9c623610684a53a917d5b66bd3ef7184f6ffab6c4a3673a798e787e1f2e0a058b606b0e5f7c320c619026c4ee86fed7624a1897505c887123807e8e778a85535aaa48348785af4f943290d6cf87d13196d1384f1474729ab6b6625985f5202578b128b3d2ba0a3954eb6295f064b2b0425eb807ab8abd5dbb5caa7962e89b0b0c9d845e69fdc1b438ecabd0bc0157b5cad66a66c1bd290a39716bca24141f715873cda66d1b33b49615ddd8ac282dbfea20126381ae4bc388cd04319a2acbf0f9af67bb08ef5817ef5b8194719d177194a0378cd4b9a7dcbedb476bf39f6d4b2a2e2564a834d2f1f0d505846556d9b23d74c7f01d0250056b08683fc3fcfdaf157d297f19e275925c5dd8980e70dfc0a83341891b1d49b867d8b023901b648a5883c9f8130ac08843cdb16cd5f9048cb479dc1b2480f69b78dbf9d4782a249e57014dd3f1e938f73521dbe8029c5a66d70cc01152c75694078cdd5f9988b0528489341c2b084f72a8384e96fd391ffd226641ef824175a0ed20172a17d14f2dfd03eba22624a8e8687e39e6d6b8b9a815a923a8761a1e7ce4ace9c6772d323d475cb24d42caced3448c6bf1a0814d7d46020048d06dc655069b6cb20a6a441b230cf87b4089a7ca5002752fdce2a05366479f53cf2e4a90cd8de3841aaee134fa99060ad4d830166dd82a709ed4f1da76acfd3927ada1268290d502449e107b3401e01aadc496ac0b4e10946cc9484d6100027a98a40a2417c011c6746ed3638a99dc0a0607e1a3bfbf2af7ebec389f76c2236265855356ce07e43cbb49d31e1af87fa23a8c0586fc9e59b11680e53e4d822aa916e8d449e7a3256c45f561bc16e985132054a4d2f96fe60177669aa2ba904f52698c01b1911fc5a1872d5050352e01362b5b226697ec12912c8168bfd7939314a4f1c60080c80edb14a400a4b9f7483247603e1a25111ae51c234163753267015ceca52e8119db85bd7a026011b8999d71e0f4548ea88053e7cfd4f28601f2eb32e8ad4ae38615c15512e460ab729f19625bfe3f6e4ade6c7df0779bcfa30b2dffecd0a2a65ca0dd1bca1faf0bc790269404a11717a995f1e294f445707831f102911ac0d282c05b7c18b6402ab108ee9b91dbbb604e64150b9b10fefa2398726997e339262e87682c421626dbe2e7276786bede0023e21acbe78644cce84a1dd4e5de4ecf052254ad5bf3dd9f8d8e672b3b44aa03871485b1907f969bb6640f2ae1d22bd1aefb38f6825450c5c3b8cdecd96b5d7ffe23873162903bce8ae5db08a20b00e28757647160c3dcca543faae5e509e35219cb7e4cce51d023b802dde1d747a4aefd9ca4fced05a3f8a60e334fc5a9f5c7bf1a6f1c6f9be439c357f29c580d703277390504084abc971f460480c8ec5c13c52f1bc43b3969dbf4524114fb9a7b9952001204239302253bf78bc3cb594fab9134e01453652cd39f33c3a8fc46dd5921c38b0cf2870e0a6e23ebf80208f58f719885648cec92b28815c709b5f8742b4c014a94da081925edc01697b2855b10bdce4c3edf6d0653311c62a621c9594a9d39ebe3f1c1848d5e13de9b7d18ce98f66ec856e27117b1b1bca76a61c97d3ea0479ca26959afccf0dc90880746dfc5761cdf6b0d67eac438861779353c41f0b33e23938a5b603ed239f96cae9e71f7e1740dd4b51b867a9a767577d9a3d2f9c1ed2687af4495e44ee11d6d343257c227499189ad3a2866790f9b79c8ca71af139dd520559c42bbad4ec70d84731a35342e3a0074d8d57230afd457d1254e8c0599f7d957d9cf1ee620a8079af6c9d62dbaf8065193979f2889312e8cf036404271de6375c9315bea1037d11435cb3a4e3a05b6c97d479ca66ba553640ce678e8f65695adce04d98ee48d748efaf3e5588d3dcf9ee01f3aa6ae86bf01a7ca355c0076a8f2c7340924be82c29d503d427c8501aa47e10717a275458e648a47c3dfa04264999ae361b88a2db400c1e554a3137f716afaa207624286f24bcc4b732a5b562c827020d78af84467ce18aad4ccea7e7147262ae88437db968230810b348db9aa28c3bf69affa6147b3cb7001289a76b1b041059f1a440e1d32db57087f94593b1c4a076aeab2057a236b295a371ad72cba61dba1ab7e4cd10a393b889372a65ad8f0bc41602e642616d463ff6e82a8bc9ce5232e40676039ece0b4bc0b10b4775e013ff5906c8070ce18c03b898264c28fcf0bec7415f92b2a9aa9defa027b13de5597a6959bb1ba6364d6e26b698008752ba60e83712916ef905537ca9c55ce33a0a8c4817f4a4469348fa630571a7b7e38553dad220d82c008089313cbea453ee1a62c295941a33e2eba6a2182955c6f92f27de1269a825565a3731cacb07c77c7ea0a58cdba155be9c0a079763b78a7fbd27d9f0a5dbffa361d71b877f602348b58fa68ef260a7221938da1863aae1ce007f50f4c5fda19d047d5d594b8b0ccb2aab5b82be40d0262c9a0a38e4c1cdfa6e2ae70e1257f0111153d6b6329008fe5d144f8c2289d4835891b5370a8537c4a31c290aac703690ae65d273f350f0d23978231881f80b3a03594ece499d46eba240f2f578b066b487cada7e7e4fa16e41bbef63eb501eff9592dcaad7eea8b2b4717dac4ff306472617a1291cc0a9f1fea764a7bcd86da60690bdab2c21a3ec3d0de16a4266efcc67b573e2f4d91992a7c107341989e61699087b9bdfefca0bc27f49360a56b8e8f482a4380c5a232748bf10c54d486f43b09db7e22e79aed68150230246426d52c22759f32a5f132a718cba1b97c91350d85029447cf1d7b137399759d81106e82a83ca6b4e21009ad106f40f9201c383ed7650dbb92fe0ad03b963bc3a7e6d85075967fa4bfe10a05e976b044fcd07c7aaa5bf4bd2e8155012685de03553235a9e91f8087326a76dfd55aae4e101646b86b910ca0b40d077e21c655c802d68c2e76332619041f42ae6de9861b0615b3930233c958d398191eddbf69b5ce920eec2b9908512666a6d1922d83df1a17668ed7f58765bd845014c1dfedfd274340ef873d84e760ec4c2d5882f58061bdb2b66fffd3babb94319452ec3b9bafe3767c997bc3ee5f680338acbd02d71eddb79b4878f847c4c4af91232db1554a2ed37f7abeda554bf40ab1ba4dcf267627343dbfd0b38c2c5008059311097bfa193d060259ff4704efeefc3a7ba69926b0f2a2423496c68d2e8a922c05c50b9e46b79ccaff138a28f2fc16f382697cb93f5a0929b09e090b213b3419797820d5a12b3a995917343536a10c11d60d4adf6f21a83e5bce49ecdb39e0f4b74fccfecdce0a45b6dab81408d243e3449e7b6aeb370e98a812b90e8e86d7f00520a2f9be5f65bc18c9086fecab8c1f841bae8f3ba6a7d1470d4b772c5f45b3552e43d43e39f40194ae023b11128751c1f964d4058ee22089a043692d791d66c6403cca898cb17da97c17c4bcb6413ef369ca02f864d73421139460bbc57caa022b61a7fe54b2025844957f6782d4c4aabf9601307a20c4c35d942ca8bb029952f10182d68bb8487928c7e2c22bf20da5a04f88cf388a5f21e1e5366f9ce5d41c591a62a9aa01de55112c5834f868187d8a6f23b4aeadd3a5b894589777b8f6fc45aa335c3bea84e0f605ea35f9f35fc5154c2a53dd04493aa349ee6e0307b78e88a43b866c424053d52312acc680c041105552e12e8c80fe312ea293bf319d482c9154642da0161f999f3e15b5bb2cf0aab32590804aaacbab418879d07a9960c04828335dd11f842c87bdf97b0cab4ef8e373d1c7d020d79a70ed6a1a90b7643aa91403cf3396fccfa32d060132589fd86f767aafeb0a78ec377e2bf5acf4745bbf903549f07ac6082ae9f5aa50fda0ebb478727173654179a15f54762b3b266f4db02b70be2ff34bce9451391a37bd0238a4f4b985f710b8a7e95f40e7236d2fbebf777644f0296fef52f31d0c0322912cdd17dedab84f959e889fd26872f992f2064b062cac51b04599d766467c0dde21d2c55fcd818c98cf38103a7a1d724eebcc02823011fe848fa44e7e16ccad6c3854cec8cd7195d325114b61e730e3aa905992e4c6379f49c7309069b2dc1f29d939f6bf8c1d76bd7191c3450372f160a0abd1a80a8e9955bdef793cceb0f6b5c9d97e9d6de693d8c3790b050025e1471b4f504783b57c558a90e3dcf092fdbd2cc79fe8bfac0e1503c1161f84f349289a5105a31b2619d8ed00f67eaf0a2408be914428c1b2430729f8b4167826810585e5a43bf35b75910d039682c5f04cdd0d36f90acb89d46e0097742769a04793d8b3896c4e2ce6708f5f3225ab14e2995268b9aa93a4a6b2b40aa4467589713677a16a04e62dbc589016d2dfb80db68422091771cd68a0069795d26f558a969c336b5c9aaef0eb7f00c290de94b2647bb36dec31125c018285368dd5b12952ed8120429daedf93af0e2c6e46c6381cdaa84cb063bd178f8bbe6d0018e6385ad07b10ed00024e9e23b5143ef3b35570037647ec3a2d73b6e1a2a104760583b61239c1639d43e451164f0d0d3a39724e194111c151dc7069688a14f9119e3658bf061bc12c94add785961450a673742095751fd9bb57959ac963482aa5cc57f833126f351700581302e299b8f672653d935c2ced0dc84aeb14318551e4347dfdd20442562fbe03d604b3708b2119fcd3b569e6c252dfa6191d85764ce461ccfd6585c6e13b573614301fb4f454142f3d9ea0c2e2f53d09725a32874da99cbaf3a9437271f2d27b0b82a0d5b92a076953b5bb582578d8e668c6e33247b4560a44e2f5079ad05920722883089fa2d9119dce11b99b1801fe48cda497007e885ee44acfbf3f3442447482be9c3a55052e6b951d525d0e9ada8e4ac0b20bf49cb1e5f8082c7e75bfac5a470c70ab417009b20d6845c1a61c2d4caaef71869f4bb4508df16227932a616a92cf8f8c78e56755cd8bd2382b4fdd6189f1d7bf7460c2494c240738b714cd9a95f66d14c530298dae4c268c5f887805b32f61674557326a43ba730b9c9434efae143862957fa67316607e09d231d8b03206300db4c61f2fc2a6c977800865670cdfd851062169412c440d328116edf96a1eeb87256ff2cfd436d966e87e24c8f01d0e1d90f50f3847fb1934d12a7e8229c024e91f98de88dfeb9fabd38bce54d7a587d08a76025ffc1edd4535d02e78eeecfcdc4f649ee7378df93b783258d04324ec12e3275d017134ba611e3c070ee5ae39079b93d38d9a04c4a98df224c81283c21ae6993a5504e0a2f9b45750de44bdf243f4af575d359078ed9253cd838ab3f5480438f04992b3c3b029a83cb42bef735b1a52d6924aaf786df83820562213f98282f99b128e39c776284f82db5e616e4228050bc20e55db1a34fc14f70c7208901e1705be9e74e664c4b41d1bdacb6898119ea10e6b688c3eabefeb510d20502740baf19b1195e162cf5eff99f1e1faa418307049e944265ebd90a5cc5f1f954a252b44232d55d176b41ed3bcd08885ec5bea281e08782a248cc368273af2028dedf639300d2837b961e3d69e3f595f75814e97ac9377fd67b20f638122bfea76649f0642a1eb9fceafe8dd4b56b811bd724412e4c0179bd028f7a6dfb74c89b793d90882f9141821f32bd3b9ad8f12927ba4413b66497706c485e9e04e86d58a2f3a860833c4e1583d6dcc306912da1c809babd76bef13f2990578a7d3d9407c5873c1d922292064323f7e26afb5c4e647cae2d76d5ed6b55ac2842a61b5f93a2d881ce2ea504b185e9c7a3f1b5722c233c20b78532260b314d07f8d0222de4a4bac94f980e2238885e550cb13cfe2d50c125d1e9bf1584ed12b645d4c5ffb639e2e025c9163fe85decbd6dc89ca07843cbd802e824a517399161c4376b72de9b6205f291840da370f875ce230ddb5f2c8a455f106828ac6c9068cd655f65af5641b343d83807f5a06d40095406266a9e69bf6884c5f73da98818c0b0e04a7d8aa8c046b5b41f9f5ab0de03026b98382ac48f8fd547220d59da6c2eaed8c906d31b3efc2dba5615b832f75079f54448066fce7cc85faf5dc553ea7ada7f9ed614c451a36cc661c6648d0e6c03caadb2578f6fe6230ec137f2061d745076d4852617aa5f904fd7d6b6f58ea1466736193a0510afda253bc10329566a2583a2f889b8edaccaab912f1c179c8cbf0eb9926b8f50b8434028bf00b095f0b8b37f21d3d35ff50efc5de2cb4a1cf41088a95a7550890f844b2c94acde6e2d7c5b12ab9e959a1b3cc555af7c0a4955af976cd8dfb969d99e807a77a18d96bea10a4f7fb395551bd244e73fdf61d3ac51d131d069c941c043bd658abb93beec7f0b76ddf2c141e04c827a2174859f273bb9cb8615ce36a1bb6e47ddd450072c3696d21c3a0354abe1d34325eb55b4405b0532fd4d350892282cbdbc617196d70741bd956317c8dc19faa3fdf4dd09656aa05a3877cc218b8d81b01ca2447934c4262f4149d19249431a433312b21210f3b92e4f39445adc2b0c79c4c11f7abea088e3c80027fc156ad270e3a6a4a9ffb177020eb524ab9775fd8cb4ed5c27225e98503fc616f3b603ff548ad7309dd8a74f7dffc40a6f115da67c91f778eed3e39ee0a6cf701fed08cca6b874b383820abf536c9b69d9156e66cbd97d2e655e1e74de7e4f932653696a90fa1a8562a0e3b32a24ba1bfdaae14d4f302f764248872e9d9ad346733d4f1f96b68fb2ebf053a12676a567f01c25998f1facf6b4e5616870ce393daec17deb2509913d845dfc67a63d4f2ab4ae970d3a5c3044b653c50e9ec57e81afcf84e7cae4c3fa1bdeebb8abf610d767ef014806bce0c86d5cf0db172dd965a61129aa022d094a2a113ef289d6497d1d044c0e6885380d13ddd54a0f3c3f831042e8526e61959103d28f9f8a164e6373d184960959af18d9d1b1c2c4ffd8b75811d36545155cdef03b08b875acbcbd7231d9c7ff5e0a866bf25612f9bf7b44c08cc8dc9b4827ea09cf20e58cd5aafcef047a429f46514a545081eeae012297535344fb1f0e0fd5254a6d65df95e4edfa677c5f6d52c88a89e5fa529485efba518bf013a52a05e07fc6a38756fe3a3347cbc680a99b672e659639a84eb063740620e111fb681f8dd944ad7c3d9ced18ae4de6737902fe325162c925b89ec87c4ae0aa5ba8cb0c0aed381591f97ec95ca40328f0651417f7ba3fe2479891d58d225189c126f7279282cd73b08e19e22b9ffd74cb46ad40bda33f51922760c325e8bc02273a4c0406c43817d8feb83837f4b1109884234eeaa303a674f88ad9837b1db3772f9decfd0a4312f452f6e0f54b19db80d09f8a15e1c7b3ddf0cd405e6cef521522d5e21206594d895cca5a859c6ca9b99e343c35660776ab9275960854f5185b4f8b3bc0985303ce8f6341ebed30ee8333d94c057d4867b8da55b098edafc08e80e0c2a85d10c878b752877df49d77f0e049d6d614a6e4508db94e1e14ea958efdf00d8c02fc6e222282e9f4e1d1256b5cdc31068a18933767b6b2dc2958742333723d1dcbb81472ab295837a1173735493ad8820cbc1c21a15a208f070a44e31b6e640d1eda080d77df958adbaded4f194b0dd2745ef46c3b9ead78effaa8b28ec6256ac16893e728d89a57a628b5f63369e881e717e77c184ff6a19a6f63f608fd1a265fb34869251125b6ad2349c3cafc7a87ee64f40f132621e37e1d42ab18371e988248478c278a06d42dd98844edb4c419c26ee9c57f68a1a7c5dfd9c9942b7ffcabca06f6ea21a32bf87ee574d245ce2184113f2d716f526b12db6daa3b5eebb3265629a1bcf6bfabe36086fafb8153d6e7160fb445c5be1e1bcba833770a24527f312d78e784c089009f2da9f9612b72855e97d685858927292575270a490d122dbcbd929f49516b4a53431053151508e39107afb5ca36f0ee88133cb153a84099ccba04b84821e8e1b6e8a3206a8d95f5f38493040a990f7e508a7c75082f8da0c10fe049ade83cf11dad0cdeeae42ed36d45cb52f03d59924cafa1f9220a8109490eb73a103a0fd5fbbd47163bbc215146f3faae993a80091c77671a8a69d220e4961ffee10d077b68572d433216cd871a731c9826f2efd665d2425a0ce345356a0b611ffa60400246306c8192a920504923c0c6bf68cda6a727d66f616d415c10377ac82315de1ecdb9958b2a37eafa4b0df93bb921585690c3d3847bb677732eaefd39361430a8402c2d828cdf42c7fd532556c72493219151b048760ecace86cf45aa54cb4c6428d639f143082771925cc855ad0452106c528f11fe918b5ec7b105cb1f020816f5ce173eb786313172ac346c58dc1f091cc3b630987f3274e76ce0b1a13e4ad113547d270dba857ae30914211418d3e6920bbf38e63ba06c309952093c21e960d5870de597fe022f0b5de789c0debd1b1e3672607be8484b86cd89983319d23a36be4feb7d2bd0349ce870dec4cb0bdb810e1269a209a1cf0871ef1c0c70a52a5737e9c1fed2be37046f17b4ed09cf02894a298c3144496b6d949b42aed3c2ded7f9b53a49c80b6083bde3b2a71b96c161e404bed6e4d6eb173178117897c3cc52b18630b8fac2bb94f46758356f6d43b5650f92b61083066668418d70d5bcd31b82bc8086d9dc8f63e2f83ac461bc864b6f61462363674d0f6c08376af9d486a3f68dfcc2ba96dd7095dd4b2f4b92d113bab747328507b1f44e077d14e01cc461e51e9872094da47ae05c18727275bfc7c7a800b57b63b31648c69767375c65f7ea655932644a77e6886944cd3af17acb41ac0ab132904f62f12f2a6c66f5c9491376ccf787046559ac8a6a1fc2ee24809cf9cfa585fd5d84455d694535d05d5dce6f10a5e396a9ef6fea80b12816bdd35d2405581d0cb1d8caec6c99db8f46140cf7454e15a9d0e377ad6eb8c9fceaddb204fc92f4ae31d38e6a85e03a7280e74a3a681fa8e2ec7433a9c221d59538add3c57e617dd70077fd727883281d5392be4a60d251e5025f070ee0bf0241a514e7a2c1abbf3bbbe92abf575f64091801a1b1908fd57f75a7fc94c870d7af3ac4452efedfef089eaa99ce4da00e8b3890e3b581a87360a87c23f7a9e0c5247fc4efc8d3b8c0fbd3cd807a1a217509e62401b85fe45e4aece94eb272e15c417bff584017196e415e94a036cc9c1d46fd00180b3889c7860da5502256001023d2d35692baf60143598503e21e5f89580ff8374735120c563453421dfae0f19409df98045c304095a0a01f37ca6f94a5d0358446dd691dfdd151b34d64ab408046b88b21f886a72746fb2f9112fe026b0a0960bb65dd67e9ebb98caafc6def81064250adf202a9665f3d6b76da4bbb716276da13a6318185414dc6fb656f218ae25b4fe292755499e4d7ca24bd76e5b82efe905879f035a9fece3a9ee251db56eceeeb366c4262a28356ba098fc49336d49c3d78ef0646cbe644bb7b3653e0d8c379c50cb7e8b89e046e66c6f2a488cc72148a18770a7510f543b1a970c5f79d1971daa05d7281f27d84b18ae7f07eeecb5f1f1be2b931388ee1b0dadee22f411d0f2a108ff8cafd95b03ba709d155d17cb02a9ddce6170dec19425d69a06862bc8fe757971fddd28e964dadbd450deb6eb119c4431054e8c462ea03244d06bdcf8568377e10bcd16d2ca834f52bd7c5b72f1687049a8e348e9e59dfc08ed5d144cce9ffdc3826cf9d299d2fca650228818fce7f5980d4423a8937cf6010502c7ac8d28052f07b02eecb8b62890b413910df2667621d33878b79c3bc989cc1fd1677c8a699408f51303dd9bd1875fa02db573a9a8e025d454f11df6b5432f37b48f51a9ae2581c54b2cc3c69954ec4d27bb127dd261672eb5ee52ec27a177c3616cd743087abdd88e85918cb785d44a742a3a7225dec32e0d985ee66012dd23d3945a77a167b3a982489b4e94a7742668f81cf713c39a04e2674f99e959ee9c56c56394cb730db1f262174d57548a62961a8aea90f8beee6f01fc22d0f0593d4fb811c71cf424f80c29676715c2e79e60cf39ddda051220767e93cd7fd9b62d32a0e141127d3dc17353aa63c12da824ce4eddc916e865dad74b3f217a4522f170008f0e9722757619f535d4664a7632f3fc57b5760b787fe1dca186fa82f4d2b9fce6ffa393944b6b0cabf00632747f9dcfe251be42543403e398ae946a3d3fc97ce152ac5b995ba958f19539c21548c242b98b48a8410f59eb0815e95f2222a5b013192325ff167b07d1edca9258422ce489aa7bf7f85e31809e465b9fe2a2b82da1ed7d41b1616dfbc791ae0c280b32633df92bd11fa003f1d2b7140dcab21bcd4773822963e58fa2cb17d01dce63a28dda1890bb48c03c637cb007e2d6b1b1f9e2832183d18eef0bcc16fe0d06dd8f2acb8064b47efec9177363bc82a2c1d9599e4472412494d832812c34b850be4ed074095a94be1fd7e4299a6618d78640855882b42a9bfb37b1a80db2511fe44fe9c6b1b54390910c6f3aabad180fbb191349836b76ae1eb624627900bdf4aec00c13506f26c80b5616e3fa93f43414143bd16032616761a086ee1cc6babe0475f44ea69761aec3669d19889915e1a9cb470ad996d9253ffc50f06250fc6dba0b2ec34c451d08026d6c559aa7a23084c3d91aee7d3d135db99b1fd50a64848c2b12b296b4a420f9f81ccd295407d67e152d8509eb980ca1ef17b80fdf32e9a8edfbb3cc20a1f2cf3cedfce0f28d1321580c8199a15dc3cc40bbaf6f29c1de4168b5d5c34c4b74e20c691b233b3fb18f694589db93fe11a7d3500d2af02a0f9b16907ae42a5a3e09e0a777255fe9ca9573a44468f271240ff98342968ffefd676030c2943e83b1c30df6a5dc2b6efa0ca0fb96f0f942338aae21bbdcd063134b224b15515ed2dcfd273ae6d799bedede42e1b5c683bc8832c1475a167d47f9c07b80a6aa777b1b3cd96a3d97350735d50d5f3c99ab09167168c07c9a70ed82e09ff43d1fb70c290f8c45638d51f32edebc9c71b2df133db5f97a4637abff086169327c09bee4cc870bb71102323542558917ac3e76c21abb2f0840c0ae7fb550853f260a558e6616b12ee16bf4a8efa50c6ca0c20aaed02f5ac52bd6686c82a22236e14248df4b4a4432cd4fa9c3d84be2d347d407553f6080704873e09eea229edf13b49cc312c50f4b44a4d0a7363e485f755a6f2d2da61f3615a36afb20af345e8441861e3d55ba97e83ac4f042380d0a7070de1a8c61c9e7684bd66b75cdefca74e91ab405dd1831b85d00bff80348b7dbaef19b38dfa2ce3dcc42fca4d2276331fc81221473a0cd1bca11384a04255834b21f903bc2e66c99d23cab8871b72a2a0e069ae18481e9628dec781bdca7755cacdfac17aceb16767318c85d387bed960f5bbf07439c2cab7ca034189cbd86f736dbda3fef259351c992a04c4cf502371db9c9e892d8add26881d5c91fb93d3cc295d51fc1eace74f6c6a048f33fa9809177362c3753303cfc032103bf564525c9c24a8e6b25f0d374cbe8e9d3d78a2226eec332e8886973b0be2f260863740b2e2803d7b36c09feb7c485102354820c9d21e72b3bbb2fe5c6b14671d6602669a4547420b0ed87198cb0e76499a84a6ae1e72e94d38a577fed468156b5a580e68252c9fe39ed132cf0628142b2659d48e6aab560d8da651a5e4885f672d5838725ecae0ed515778405a1bc0712e0c2ca7e46443d03b5e8c9244ff1ad58cf2b2c0d003970e94c143c820f8b2ab49f7041ac471d56cb2de7f9e9ba401f2496a380350f61b11c2857a9b86322299cc010e5dc17f761a47116869edcf56fd9f40fec5a041e2ca9a98da6a0c151a809b0d63fd67878b55dca745ee9e0f1b8ff3c07f8bf484a6aae383bfbb74518bc76fc42db3535b92c599abe8cefb4273313afcc4cfcf8cb22fe393396f70b1262dfbbe9a2eb533e343ee78b1afcef89c924fb4e96566e4a8829e50d5b59bfd4bbaec4149ecca9310518624e72c135a17ef1846f7699591cdc46daae1664648ab6bf1d177b3d04f243fe6fa864d3fb434149002de99917501b653e2c4cbdce2bc177a2e283397c02f8b5963d09008cffb4e5bdd6641d35c62419f61b8dd05082a24173bf58dd637c60d88c6882c15e6d7e7cc9b75fc88c89b7eae803cc0228960e5d1986ba5cf7082201b35af9212827e222636ff49700af81109dc4c83ef25264ee785e45e20896653360362688ea10c5823611b078fadd2cbf0e13dc16975350a9e816a3301e8c39cc3938ae9b81a8dc0cc87cac25b551eb8aed6b137ce207ae17c8d36d6ce40b720028719f2fce7bfa67074a0edbd8dd8b4959ca91a63cfd955de02d048b7b4db77c4247805ab2efcd49bf4385ca66b043cc7ea9e0688638a8fed950e8f0b5b90dea54fcf44dee0555c8c64656c50906758c53c803850fcb802e8f0b855827a374effc875e75bfb5e91a9d563052d3ce7549c05e045baa507553b816467e4e596835051450302981e14204be7844af68b7117b2cd5a8301b71ccf51808ca483b098800a894330e8a0d8916b791ed5434f1490ae46122d175527ff3cc20c64c96be67c3762a2db3386c322c4bd0138efcc817f59a6a0cf0c4c880df25f6b99c62116ef2005f4369d879428114f96718e0c32b56e164d691f11e4350748c47e19189168739440b9a289ad4acad7db82423ba09c582c0f22c53ac558fa23b67ce40796d22a71f0bc53d5974569cb1d3ed96b8206843eda96581b0cf9b860b951fc008a7322e43ac551da479c7ce507204a2b325b1928f190e5356abde1ecc964787c7a5d6b621fb1e4eb87c988f7fc008fed105fa91dc3756aafa48f18f2921f28d526be07439a2642d0689d7d66b717c09c224d692a95fdc0a067d052610b6a60529177d918fdce4492e3440bd9bce1a58fbe3a9a017e9fe9196ed8a5c6727a1f3e3e82d2c0c990f862bfc4d6a82e5058e2ca711f8ce2ccdab22de27505e401a341a5983794a34f7d144364439729e331651a8850b0a3dda0030d3b857a6174ed0c2014e6a1aa8e217da716088fa36fbaff5d1eb18f24a8de09886cc02f69c94c588db2233ede1808cec7bb0d18da30428c44493d46dd49b9fc0cafb38fa046981b3df6124270a53b338c1a4647603d9e066a2bdad534d6ff844d42d1685f604fa0edc50df1b889f24b8698f9283bf668c9ab3f6eecc031070a442cdd4210f3ddc3d983bc7dbcb2cd7165b509fa6a048eab64fedbc027f226daefdfb6c6778d135a0c0ad2cad471cb64eaa87663f880534bc7eca50aaa125da1dc19e434864e65ac624191ae551dacf51247a66cf942b8948b1e94165b38d30131904cccd5b6eb0c81cb23c7a732aa9df0902fd1d4de6d4c6010acb7c57ef8c94cb5ef9e5c875dcc66313b572ef396e9c18223a19b2415a83a7fced1e3a75ca31b68e61fa31a7365b020dba9a2573ea380f98fdab3e026583f668ee79ce68f070a7fdb5866becb05e21fd954255847b2b9be89d5fb37502d09c343560f39806a5e29c078bb7471a8e1d8ef82dfefa082615040091d2fefb28865dcf65e379f8fe9c2560de57dc1b07c3a82cd10c12360e04d6071fa08426f884ffcb43ba25ea86eacffe4ac671f2948b462562fde4ed042d6d94a3cec4fc0a39964604daaeb648fe3dab22d65817cd9a4c9a9099bf8b7578ce8e4ab94dc511dcd284c91388015fbeb66c3f3e86e2546ff4410ead0920c80ab442122d26d49ab1836c95a5546420b221e0b096ff6f07effb6164377c8f58ea4bbcfd0d55ccad8a71fc212087ff11638cd7015d473d93ff1313a63869f7463c8983ce5be57a6f552936a9ddfd50f1a36118d3a7ad5a6b4542723ae92dcaf0f094e92249451ec7888540999b832844893edc9e782f539170459eaefd631f290d0553a6e053437a2c0eb89dc21865fa5b10a16c44cd0cccf0ac752edfe264686cf526033aec8aef0f6d320463030ab8c7dc16cc373602640c1d0ff1719d3b35619250aae14c8175d179c7f31aecc1492c2e852f8d3643d6eed0c06f02b66d32e95ad93004aa768f7853474b316b27d49cf7f804ec436de8433aefea8be7c7ec71085a9f1a216344e56dc2cc9e7011c4448d5338baa9f6c352b420ab38fc833530767926e0ba10ccd004091f43316e59e92a1581cca529eaf4aa1a1793249e009d13419919c0ae8d58ea71567fe8e795823999faef838b96aacf9647dd14ac150bdd1ca470911478600a42b14ae6b18c1039cf6bb68c69f320f8df8c0caab640940adb1d7dc785b346a7c938ab391542567e82577b6c321f7e67155cabce5e2125461d0c08b36d459c8529a07923b47e6e270322802c7ab9c1c3d0a87f7fd57a9e4978b1c0aeb86bc997b5985f26e30627951e4c8f222b08deb8ec689981bcb818fb7a4104f8e8bb8f4608664700f02d72574e223a4e0e8dfecee99602146f86f05be4eab1145fce3c0d83cd76daa20fd838e40ecdb8018294786b76ed9a5967a7ddb5783ccec8eb7553023a2b50d06a1c40af0527d47c8e30d68d1b6f973077891530898100224efe87a9e2172691ea91107a227d0bbde2e0de383d0107aab4918138bc8cda86ca201f39f03ef2104f562ffb0aa887829e05c678d6f39c416fef0420e8d5c1eb1535c5a8906e80f4af45f1c01cc171f8850dc168c67bc7ef1297525969085ce2f5e5a84c127959b66c755db09d4b2037ad8fe935c30d6555107e9b7595082ad3af9470a2660fe4441d2be0b0c06ffd17818dccfd23dbbe6588cc50524b8397487a71e7dccf0cecd57017cacfd6cc175ece2802503ae6b0e0fe4ebfeabc997bd4ec82f1eb7279446f62e217b6f29539232e2086f09440935a969deb3c8fb2b24f82a64e95348d48b64ca44aa52483ad3e132eafe5e8d1ce675a80a19d51eefefdf5ce6bd0f28ee085224511dcdd9506721cacae351655e5999a8465bd41f3a1d18195d8c2b13ba71c7a94d2bf07bee97fe649240cdf6c3179f6786029ac472a7f4f77740b0d25c47b591b5b673188a344acabd8c8cfae543e0ae47daac426d9e7e7cff90079779efafe37bffeae1fb986a900e97d1194da2f9d49cb4375c4eb74b6a1f23a3122d5300589e3e7d6064b1a8aca0541764214fcf22bd5f21b1ea822b249da9a0483a1b51be8e3929ef9dac77b2e3ea4732e5e47dea573aa8f7bfb91ecae9e4bdaadc4995e3efe0d27aa8d1d61e409ef6402884f4c58912caf543ec014c7d8033aa489bfe4218e536ea1713fdaa8f3d804f90969f128cd31f519bad193ce75a679f92ef1b4ad9007f97e7a7cbf5c3e58a04a3849a89d05f762945dd501ff52758a4cd4a84338459ff8a7d74779f45e55564ca83d8fb4e2326e9ccc3192232c231aa250ea81207ea07be99c8592ba7dbb32a3b953bdc72b703dbe30e1dedd859fe94f24041f17e656445e5eff7a47cca3b1959953ae3f3cc58e5f9ad06dfc67df0571e7c9ed9f9ca9e7abfb140d70d645fadc058bec927dd852ea27e60cf3c6ccea1b21d325019fdeea89296a911b2eb0002df4f3da53028af7afcab3fe9aea5737a1be8ec549e7ec77b9594a7e30c2d1db0dc31b252da48fdf73b2a65cbde7227a54c81a4d8af1abcbf7fc3fb5bf6306203ffe97b7865cbde387daaec41cb6b79a0f9d4806c41423a4021e7a93d98781a4411a9a7a37c8299e5ffacb6ec670daa42b585f49e85bccf2271aaf428269588d32d249db19074c622e96c354b9174a69a85385c4667d4ff54f2a063977d0a6c3ffca6c0295f65dfd35f40957d65ed6998bf57d26ad2aeb8a93e280ced7484ebd73f3d01d70779acec40ad94adfeef4fef32232ae50e1be8aca7c77bfc3df7c74781df1b39bdb7fa55cf334b29cf5706bdffde86f7953b46bab4715f55ee7c7f7f0797dff74079f08c19b1313efe1e28affa1ee3e33fa9d158b6fabf4fbd8f0ffe8dd4f8fead7eb2d565ab86f1557f2355b6fa574f67f8553f96ad2e5b37fc088b22ba988d7f23f5287f63fc55b9b37382204d68b3f151ca1e466c8c36be1fcb1defc1a733aa2aa9c352242e2da933fe255bd6b34f679f0d7436963d3de2f798be077cef7bc2ef297dcf073a583255dae5e91e4a3ced998ac20f09a637bc0f3e81e987a91fb83e3dc1fa75dbf6da6baf3df7debe9c15fe87e50982a6d29d8783a822f82bcf1cabdca924b59e313f5f99caa0e5921f47325d2244925c9f2a91e9121fbb5c3fd7245409d6c1cb1c94895cdf006dfad759cd5eead0ef2df191f3be7992e46fac41df499b832ac92923fc2ac28737da42faa203982201248adcb5962477fd810a1c1537fc03154ca8c05171a3e29684480b7c071e8323f8129fe83b77d16dedfd12520111a20f29c22558621238cc74898f123bac7a81103e2358e2e303144c4ff0ea082b380ab5c06313610b92c8e72f8151325d02840b4412e031d3254098e0da172f184f4062091021c89ee9122080ac119e88dd3b1d1caa7cb0ff7b4983e01730607832f48cbee897aeea1cd6bffb925c06be0a084b043e6d767777afaf7359cf3c11846e9f855a0277808f4a424b3cc0c4d69688800625db12236ea914519114424b4c81040253fd10d5ff4deffb3ded0cf63ff2eaf07d7f1d6bf437053aeb704d1deeb7f760671dbcb765095a73d55284211892b8a34c8b6eb932d3225c938ce3b297db0f2fa873ff4561fc4f4a6ece5749bd15e0fa670f43b98f08e5fe1e6a39870db68bc027ddb9f48b3aa3de8ae8faf52975180be851b65f7ddaac753705760257707645fbfc082183faa469d68945d2ed8e98b8e1941cc93d54898ad86a50905a2bbb7f402674b7bd1d247b8f4db2ba264e7237264746434994e4f6843cefadad8b841d24072bdb6e6b7b4a45947eb0fdf63c20500083e647b81d4a3fc0f0f9c1c903b49d7697b5fa68db1e094baa029f600ec765d0a7da14b070ad51e9eb7aad358eda22a94da90b8b45fd765d616c3a6877be17f719f02048ad37a5b496a8c5e293fcbc18040af5a2f8a9b76489f4c607c1d3d791862983230de0871f82638e87572cfa8d395e58caf924fe0421863e41fc2401d71f53101e58de1fc71ae138e69406403f3188207e50d573a20643ba2028f10f69a904c14f5993e947193e99cab382230d53febe9186efc50f67f08d39f55f902ffa0d026c1ff760543aed19b343f97aad2e92340bec2058aa7fdf541b04f87b9a6faccec07341485fdc5af23c263d9916f940486e21d3a2db2e836d1231bdcda18ff782ffe5801f49a43fbc650fac99119055c3cbde83b9df3e79bf646ff63ecff3debbb7bcf96b8b8489ebd31a0bfb3e0f0e6e7b77f7e73b6a76b760cbffc4c9f77972dfb2450018b2bba7f029a4104377b6a7d34905273b77912f498031e7d6ec3ad096973460a05d7691432b66da4d4b2af03eb0744d8e8202d7ffecc98e2e0215f257ee50219c01e71d7537c3e71d3597bf7a6df879e2f759b7f67ba4a176018e33783efd4b5fa2e301beb03c3df4373d38d2e0e92332cd255287fbd9c9d363c85fb92386fc55db6e4f12e84c012fe796b6044b4908bd7badbde5b5eeee5ef57a056db362d4e775b70db487e6b15da1107ad67ad65a6f20426c03dc5d91c293bee795b4de7b733f61db1dcc22a49fb7f56410daaede9476155fdefb5196aedd6e4beff6a6b49150d29dd0cbb4447939a4b5bbb45ee6b1b502210baa3bf3dc5a57606d48866115ab4721df6ff0826f471a343c0ab47cf6e023df2e72d84316c36f1f69f078175d641cef21b289a43a7c4f3348eaf0952d1ad72b6d25cfceb704fb85aacf63aa0d04b382e8da2adf9f300c690e140eb098eb4f18e660a1926a933ecae998e818d1db0b37306237997ef8a2bfae580f66113c73dc5c6d0ec2b0526f01c24f65f54b674369461d46dfc3f2d461c1f7f7c1bb257658fddebff2d491cf925218e5219ff41be7a6f6fae0efbd0ff6e9db1d4a6be85bf2b425a533f4eb48439d591a3537987bc7be1b7118b53cd55e2bbc6ff94680fba96d535c7964fd7ebeaee3eb20bebff8fee30ed934d6d09443cca5b27e6ff3370f2ca5945a4a29a5d4d20fd96fb69de97b64cd38dedff7f62bc1538c8098bdf2dc21df3287254fef3c3febb7c131a7737b4d1d2c99c426cf526ef2a40e9e3ca00d6a1c79f51a47361cdd7054e3a8c61185952a406b1cd55ade0f42d8a5176ea8283ad82ef418b3f7ab01c378bdaee74d00bff8f7beeb02da150579008d70401ad94b4a5fb5d60a963e2e4093974ae11518ccb4888b1770c1c510232e8c28e20288109d0b338051991671413bda62975f3aefbe78c1f8175b10e5f3633ba09496eeee7eadbbbb3b75a7b652777ab284e04add6912217d715a21c796e6325cda6a8164f0097697d1590ce3d26aa066c3eea65119a66cede9084c8322e5d23bea4f3f5abb82e1b9708582da2c52fb0524452d854ef06ad076ad6bb61ca24aba5d4d6a1a0d727ff7b44ffff4779006eaafb8ced5219e0da0e008263b21443c71c18c06b75beeaf4c6a900d1c38e4a06308b97f87364fb99f871def011c08dac248c81125a0cdfa2b509b3e83dc5f6d44727f1dd226380097b15ebc622e7bb540064580c111845000c44c06b9b570426ed0270958ec9cf06307447e667e440b24c4dc4e184276f7d183a2a4269808818b533ac394bbe60417e4d2db36c95cfa6fcc291129491264ab40b57e59d17276ad5645063f07046a53660849d066a73750bf3ac8d940b57ed5b36b4df8913d539563b1789059c877a5839bff8b46a3fd20a291a0cb74b41822bb30c6a00ee53aea5098fab59b9113b950d0cb5603b2d586888c6eb85c2dc969ee5303ca5da346af1b5bf61baa04f8c682201113af859ce86b035300c127cb9d609102b282d0d515e8445639f9e1388a142188a82a2030c105d93f35e638e863094f0401059445900e723f98851272bf8893e081dc4c9270850f764862e4fe980b373b27b9ff0525e420f7cbb0042372bf01dacc69931046a718246c91fdc7271806163cc0428bdcac24d985dcffba4c9bec723f8c4602921c037ebd68163f4a5834c07a5284c506b27f50b8420b979cf6da886a966c1257c420bb1148b989dcff8d39fd8123dc60859cc6b5242ebd65911d63ca4507a6005244104b583183f618f40d113e80b8c719d4d74bc7442eb3bf83a010b418dd084a804ff065042419b931c83a82853178e4e70a7d4440ec8a75ab791437518453d0823b87e594aab5564c91adb5d65a6b811a466d331f04358ce613b38aace8c2881ee07a902b320208803451a48923432b964bd1164021eeeb52a9d4815c90c8831a0881c54c8b724ac41b0e332dcadd92e4a008a1c060a645b925883ff029d3a2dc1645c05ea64552f898aac0a64c8ba420628bda138a56991649d183272091cf8f19c1895022f59b9634bb80a6cd6a49b365eb469dd9af335bee18b181ce7af4409166f6ebdb924691663774ba6ab12488239925d32541dcf2102120e227d325421459f283242f19828bdcfe11a89f83227919017f4acbb58c80972d1ad5cb93069a75c84191ca0850248a94e98bde593124d32541348191695115493944d5969f20eb0544a9d10d88635159058a5199d35c87ca7a9ce6b4acb47ed503a890abcf51bf68f69e7ed5f781000908a09a227fdf4f072085921be0162836814f302b21abd77c50587d0dd81c04194828d3284cfd4f09dc4ea3322a1214e6eb6f7d5f25aa4a9eb4ac9a80568baa00720967e7bf5c987ddeb47ac6c8f5eb296346509be70bf9a450e4dae6498f727dca85519bd57baaff04a10d29424ba20406f905f974265d83e8e9b4573e9dc6da6993567d2a06bcfa75ac2e34443b9d4674439b38e8e88c01540616825b3ab11b9e594be7125118a7553b6485822c50759afb788d559d7653ad4f761a9047e4b0fab67c01c765d508a7ce2a512a095afd197825a38968b4dcf2a72d4eb25cfa1583cac021c0ad7ff1825184cf574682ebd3f1009e533042485fa03480a9d756534aa698e09ac48ba6b84c6fe71b6eeeeb85ae95be6809e2dc0da0b21bda373e33a88cf57a2d915b090fc70d40b922a93900c92737e804cc8d4424d71fefde9c94c98d5076413e571f126ca34d5ac690834cfd86bfd3af552fd9425abbbbbbbb2dad5e2baadda2f00f7c04665d17fc4394e7c2159e54698c12d1ffc61a4ad086bb0459f8073eb1e9bb69d115ffc03f4a44a89585eb9803f2e45ac4840a6a8d2d3971d86e2da616e5836dc6280de0775b9e18080a06018508c1e16005d95870b8155c0a878243e1304e65fa94f828323ca95038b620231c231c201058c3d5aa2783adab94ebddf2060f87abae001c38ab32be2d2550b30aca8e288b9f67b62acf479d4edf7f4a953b1f4a8a3c3d26518f87c00d68fa04aa84ea731a515050611d5b3a279448d259a883838ee65303c281036d1e4f1da3b8816da3937870599db18c885892925692544949def72be449e5811e91110fb593543b494916e021c90355654fcf09f59fea4b95b5aa3ed0a39e077adee9db41e1344eab74fa6543277451676ce97865ab434fb420f836bc074fef7d97365428d563f2e61e77d0a839f536d0d9fd1e73ee0b3c38cc3f45d27ea53280716e5268e89cd3aa41f5dfe7f86c9787201d3924a9bc4e0f7558aaa5f37d2becb015266d065d767fb57a9594efc3bf83f25f69e33e58ee807f4beab0157855650ff044ab01d98284867848f2523eaab5958936ebcc3e0f2e1ba9b5281b5ad196acc95a143245243f1389bf449e1e8554bd47a69e8ead153a431980b5d6e68043cbd731a7f52a2905a832957287941f645b774f10d91d3a288cc5ac7fc578b0ec60ed60295b2b28abefd6f729df03becab3cad64aa983b27adbdedbd64a4b79beb25d295b35a4fcea6da4fcea577ea5f2a572077c95dff93ec5b254de862a646be5559e679642b656ca5f313dcf2c645969b1b0b05ec70e4db295a9d88280f443936a42454260423e2b106d0844e4b30ec996450a5bbfa41862d222212065fb0668b3e6560dab4f791bab4f29778cacbca9dc29fdea574a1b28af52ee788f02923dbc4ff98fec61c48657b6fa53fefb94ef51f25ee56f7c29aff25ea9524221bd5791e3a7c23fe9a0f0f8fd89a433cb03583285a21d4b3a6e299ef69316217d01561b35497630e5856e82f0f842c955a05085bc9f4282bff21e754a3d4e8fa8134967e10dd10d110e387472a9ef5107f59f9551655fe980242ccd790370707710e47152bdfdd40e6c04952abfbf37377546fbb87df09df5eab1d5a5cea96cd18c4bd5e96ddc3f7d7fbf4b1ba087228de88c2f34cc613714c61ff503e33f6f72ab86fba7bf01beea31d939e5fd7476225b5deae0d0e9974e0fcaabbec7d4efa0fce953a50dd47be58eea512850f5dff740497d0f963d525f497a46912772cc8126d17c6a40361c2a51c8d376844277c42a5152590da4a36bb89c6e9753fe0c37170e0604cbad7680e574ec6c68643869d39cb9797f201b8cc0cd826ba9b51469f364ed5a6a2d415a845a865a885a94b430d1b21445c28990ecdf6263ed584fac0e675b2af681bb09b96b3389e6fdc92725adf469b345f334cb78fff2a7cdae05695388ad4df3fdcb216591365b3337a589b321ab4e16a32600ef1df5cbf589f8073e7d638e0be762e23a72dd60b91797982ac3da396bf7b204c76c2ca9d52cf4b459e3f3c34290366b58006241c890365bb66cb1b50c6911d202d412e4050598e61376b6d45ab55683c06030b5965285542015c8902c9dc35e2d5c980d26b4b242ea32eb2935491d7df9b39eba2c0658ce7573e15c4667317ccc539987e165fe060c2f53f630d22386d2888d183ee661283fa15cbfdc81e163288d9c4462fe46cd42063ba0c5943d5c254aa002184a5acccb945f50ed1153b66e7cccc7949fcd6132e44bce611db31d8b35104cc2da4240442112fdc044990be22866fb255735f0927399ccfb7fb8189932868e3862ca0f47d4664bae1f7e2939158a26171317ce7573dd6a49ace3e502c7bcccb7009f2e9ca6a9897dd864ec5f867c126b875f9ae66bc817a4d3ced0942fb97ee5c69c17a47e79cc5a1b2b5f722f3a586ebc4ee0f32547e2ecbdbc883a9309288810dd100a252434c6b8acf403fa8035d7cd65bd231343d6202cbe6048fdb2f6bbc172309699579bc360804f580ec6020bd6278728f1e504efbab90c8687a194c138a6a44dbe379849123ff8a7ebe6b2185ee64f30b75a1f03e962d230a70d53e1654a15fe0455283c99923a52e7e2033e59702cb836bb49eb93875022a9248734429144a851871c7a417ad1c19e8e2fb91aea2c4508c69f2fb913963bca29554a4cd5f00f23da925b720043256223a8206097d5c37214c655e30ca8dc52eb57d293efd6ba21f3303c0c658f164bee59649ece62caef0622c12cb81396bb11f332256b87945578fcad4305ee7fb128552c95fdc34f09f884e5324c937ed9d4635bba6edf0e9f2c3896a396551a8caecd962498266db668b53651d9df922db57ec120f330bc8a5581a17cc9d9d3ffbfe452b60c5737bf1a735eb8f91879dec82075d6c678fb388db2ad18e1d37583e554465cc6dab15a6aa42ec6d33147008fd3df0630cd3327cdc7debf25c69f39be5b182359ad044cf39d4fd62e46769e214ffb319e868c408eef96673c356fcc17be5fa4a68cefff6e548629a36cb9a5091cfb107ca9b5698bf00d96db018e8defba8d7fb6d4624ad7ada507f82475376fc91cd627cb789c7e69d266eb0629bfd0af97dc8b8e74dd6e4e38200df049896c6c6c6c5c472e9ceb46ea5cb71b53460c5200646a06991aea570a7ff3828c94943127868c1b0fa683ed5464bcca981343c6c7c873c6cb783ae6dc98e6a39c74cf843336319bdc8e059a0d09dbf5cbb436ef0f73024b6ad306865443c29ad894305dcd0ccc092c0996a3013e5d384e43ca78939c31e3e6715a468c1b15159591869a5342fdf2a72153478692a4b4dc1ce09897f9faae5b0bef2d7c0bae16fe64e59bc356c61c99cdc7ccc7e950c5e6e99823ebb6b6d4a1bfe6c3ea3535df25c8dad1c4ded58486e69463c2139a9865ed6a628fd39664ed62b6bbfb67fa6962167c61f9d03669f33d9a5f439e36b1f2c440d21b8149dde9bacdd0bcab499b272c6767ca193acfb86e2e2645724af677ed5c49fe2bd056e8f15fe1a765a2cd752424fbbb7233341696d3b57992ba8c046bd2a64d7f4b8dd4b5d9efd2036c53e6b03ed97c9cb69199ac98b53646f30dc16d53fde74bece5499b67cbab152b67e81c7bc9bd20d9b2ff8b2e055a0a3e2eebb936c8fe29d45208d2b21e9491135564ff1484b4ccd65e9ab4498d9ca865ff975dcc9a278c2efbbb0db27b0df285d1b53900245c9bd57cb179a979797961d13c1d7366aae31c46f3a48e86e64d9ab7a1f91a1a1a9aa779d6931c34ef4f33435364a5a52548cc5a1b8bc5c808589fdca50ef6631fc6c81621ad31678626f6dddd1debee8f95e70e100d797e435ce6c2390cc865ae9cc3fcbd05a85f6e63f39634ff65084639e90e6948d9774dac26f63157ceb5ab215db97ed1ec62827321b9746dd63c939c9ad2859b2169b69d69489a63a48c74e95cb72c70fd130633f4347fb2b20bce2ed465a4ce61fe2ea115634a1ca973997dfb33e5f949d93e4d79b2ecc74a6acdd25b84b4192b4f9b32877d6bcebc7f0b509bf653435241fd2ad22f16e0b384635ee665ca1d998f29311d6dc4bc4ccc873164c9e87e0c29f3975c40cccbc47c371e8488542287f97f2fc07d23e9ac9914815b5e023cb9c444bf9cd2d4e9bc40b61f43d2d977cb465104656a44845daec9d4a80855e471861a66f9704729c5e92e4b488879ff67b158702f4f59702fb82775ae5b9b2ebc7ff822e21f2827b86461ed6ce899ccc7907506a304c688c2105118982118124cd77a3ac27230430e7381ec9721eb8c0587d2288dd2288d92faf325d7e5a905b894217bc612a45f2c3810c498c57261c1657ffc2e90b05cbf624a189890cbc821870591b0215c861dc9810df5cb61421406169433d6d0335890c3fc514bc0276bc7dab5e9d99fb58305757ec99d5e804fd60e66c89db573c24a6ad3d2daec9e3663efcfe2c3526b73e6fd5982b4590324a4cd216dd604b549f3fe2c45588eb4d9ead285945d34a42be7c2f5cb7f86741d912e26aedb0b11dc5ff309cb9dae1b8c07c09056e8baf5cb5f6504b7d45a82f8f922770943e63b4646ea1a766be149927c193215e4b0149a4b4bf659fd10ffc0357c49e1c554ad4d2fe659589eb573594c09cb35cc4fa30da5994ce9baad00d76fe1cf965aaa0414c63f864c05812b29ac150b8aaa25d572794941856b51de5585ba9c52360ae37f4bd95a60be4444655825643f75ed350cc9a3c2204fb005f2c42c903c2cec853c3d1700f24c01cafe2b90676a28fbbbc833c596fd5f90a70b08d91f002579b204c9fe24793e796215c8d3759422cafe2fe4e93917f2f45c0b96e36159523558097ca742eab27fca4b2efbaf60b9133624fbab5a6ad93fe582e578d87cb24e3cba6ea7dfbe1d1804ac43b99a7fbf53b6366ff64f0d09cafea95beaa8652ba9226dd2a228f864274ad9b2a782889ea4209f29a3ecb62730c8678a49f69450f6f7ae2d19dd6e385c9be797cb4425256dfa9098cf1251894976977c9688b25b98dda987e669c1d60ef810524a29e8eeb95faf7477ff4ed17aeeb6fab5f6e680ebdf1caca7d65e6bbdebf75aef82e0e7b07befbdfffd4929a5eeddafde7be9bdd7bae7231061487338dd5a4a9eab1cac4cff7bef4fdbfd5e97acb4b6974cb5d6b1ce10662fc121acc4145e1d349d1b70e0602a5d5b3aa1522ab71706f6fa058e30be37e5f6daeb17384aa98c5822a854282828f7aedc5e041cd9eb17385aade8bd296e2f028eecf50b1cdd57098954b4d7fb44d0245a7b737b9b21ccb60487284c3f56a2ba87a2dd41c76e8787a4d25869620e62b6a173030e9c03c411871c2ac41e38e4dd7b4ba8ea13e25015a20c516b6f0ebb11b9557b63d2afc6d99b016e03304aa554f682432619703e124cd230b06380ab47de108915218682b2ea17ff305eafd52aa5ae5c5252dcdd3d54a1d687861cd60f016cc124fd6aa21c5b824332804361188ab64c01a07a826d11c0fe0c2753a57b71f52ba5d4c56277f77b49b73e40ebc35a6baae257c50ded0fea4e6f5ec9ef75eb96defbd91fb8fef5eefddc2dbdf7fabd0e7aa99dba53ea4ec370895aee5e5bbbb6c6d1bd36776d8d234bab7154e3c85ffc21141245b7e10ef725e57c747efb742ee223b067fa8ca2b0df57b220bde938eccb3a148603b8be0d907e1fc9c2390a1b3a30fad55f327da6d028eb3e9dc3a280eb9f9f2e14aff884385a9c8ecee8272c8ad6432154a00541d3cda66dec17f485d6da10b6584d7fc9d2f32a59bfaf92f492614fdbf49bc8d0a76dfa4330874858ab3b1de2da7bc39e86b92e87a55287e1b5ef204a0cc7af0c69a9d3f8a18839fea9b1a6a48c39a5ff9cd62bbea7f75a2024007d40638e2a0a0ad3df43a8a2f04a9e2a0a2a837e401f90c32ed9cae2a4fb84ac425a8966f1955fb8aaa4974d247602db5045ac5687739208f8a831e7d31921f3a81f4bc447e030d732a46124bb1b5886b456162a212a839e6cb82256b2c4122b09e68f64112bf965ff3caf6459ff09b99fed03328d397efb80fc76fd76a39dee1def056d2a85572b9495953127ece957eff8b8c400e7f0a4d0a75f1dd2c69c0f88c2f4bbd4009f275d529be707945bd7e4b43b3901a232acd352c9047e5e4873f689420bc402b1402c100bc402b1402c1030d3ea229028aa9561e22db8e75e4b42c166c98d04c4e1a30944f82142092151380ebc227c1cc90d52af045f2af9c0c7fb000d7422c8fd00d1970124fc580f18794b32f00437ba3e0cd1327c00c872a0563d6073180597f4988003327420c961149c0188da8ae522f24089299060c9b4688a25bc5bb65ed8f4a22e6d9af484d6afeaeea527599abdf743d50f71ba36359d394c95ee722d7530fd89a250255409554295a84865aaa74fa7a03255699f52b3964b08cb2bb2fd10f503b6195f11f503ae19ff80bf8cff747a532dabd75abd56ff522af5e16973ab54f2686d564fc84be2fd78423c1f9b17e41df16a57e80eb579de1b748fdc24f7dadaddb6da4a963cb15f162c6192caa0b9d6771de9bbda848629d7d2774830ea07ecf1b841385d6b924c95d49c4f2febd7d2f84efa658350a8477d8333233772023eef90216d9e3c3ed2283d12ec91e2d336bf3187eeb2c94d26f09b0ccaf631c9a3e6f31ad58cfaa164bf552a21e5175af63b9189d3057ca127b0c8e70b8a1f4aee1965fbd622f1c451b6ef4fdaf41be4d3f6f811f9b43f1ead4dbae487926cdfeb69b30e912d78f29def2851ece615fb5a7d8b4a67781295b17547baae5ff69b0a6cfad37599065349247cf7d275dea46561e94f1a66dfda997ddf9952461f120c7e9e644bfa03f61c7497513fb8db5a9e385b9bef0cb0f56ea075fdb8edeffbbed283f79abec3f0c3d283df60a9fb03bffe7bebe7de8390be60d9029f38fff7d8dbfe078e6379e68899be8f1ccb130cc3cf640a49ef4d25f204dffb0ffc3eeb2a40b5692b4f68a22c4996defbbd278ae1d36cfa9225c50f494b8ae509f6a065d3fb58c34ba5f7be0492e7bfe8d7ad286ad40124998e0440e56b85c030c08e13b0440353bc385da8f703836db2646a4dbbdcf581e28995ec490ebb2fd294789f27b16ab620fa04d01345c4233e94ef1fe95792227915d42fa17c459bc3ae935abf5f0da9d5ab5e258564cf96af509b446d862ba07e5dd69036bd0f3a922f6b6855ebd75d05c9f73db273253b7f24cdd8b32ebb222814718bd3edce551327fe952b5c9b28b87eddbffe28b91cef43276f116a9759d54b5fa914b66e4e5ada4be1a76bf344ed726d569fbc6ab2aaf11892ef03e5fb37c01e9e0fd83ecb4606e5fb9f10f0c9b2d199db771b2b08e596515e86e093b5aae5fb2d25507385a3ad2497d119b6ad8880f225aae5bb8222df3f5b4e726b97af0b2d5f179f7c572c9bcda6d3937a7f142297f5b08ffafba7a733fca7bf81ff54f63062c3fff43d52a5111ba9f7c725ca2ddfbf71eae1fe298cf163b7a8b76f1f55a21095b43c518cc81591c3eeb358ac21f759b7235691fb3449beac20a27c9f9eac93c5c4ab2b22bb227299fdfb28493dfcedd3191d7178899254a2ec1c06daf26969a18b609bac4ced49e87a2e413e40364f52fb0114433c0ccb1d5b86b750e7323a7332cc392c147f3c4ff4e9d7156b1feac4202290108f1ca9e823fe88b5212cb26c0ebb6ff248d650bf5842e1cd61f779669765ebd7f5c4f05ce53c510c6ab385c88809165ae2a327df17855c0cbd55aecd93655b21b5e94870d0c9b2e5fbe2c7c3e624f97efd4a5d9873190dd2a28fcbc0d9fdf0e6a1cd65742644ace142220f0a85f27dd176cb7805387492ef53a7e5fba2ed9b013ebfff7ce51b2c87dd071fa73d69043bfcc4fbe290273ff9be78138f5a562212bbb0e52bdaf23dc5a07c45a27c45a37c4526f98a42f9565a9be7abd6e6c902b23d6dd21fe4fbd6e727df6b69f9fa5f17a11754e01ccee11ccee11ccee11ccee11ccee11cce793c081b0a7c8a3f301322e0237cae3014f8c7eb09fc047ea20508210affb0c20afc031bc13f3e14141414169613e022e022e02210b58f4d604e8091be49efc3fbb436434b4ed5300bc24ae9b8233c62d745dea1bfe61e69b07297291b8569af91b500d5d498033080910d9d1b8db599893d091a6b64356fc68841ca9899b9b999f1fee10cd2e66f489a692ccd0c92e69b1824cd2ada32161f6ba82d3524e0f385c6d2589b99586c26169331636d6856a8215341a922ae3f5f721547635363679ec6d690e74c49d3b199d88c29ab89c96235b1588d39133e8e1b700ec081d2d8d82b7aa4ce652db5979c2c064dcddbd8cbac255b805a6a35df67ace665ae21b86e14e6f4c50bd72df61dd3b99cb8925c4f4c9b157c56f859210899443e219d903bb209a973dd5a39e47005a135a8242d56563d6b15d10800004010002315003020140e08c462b1602cc943512b1f14800d749e4a76569c09e32408621406216410218410020821c600ccd0904620001060236e6feacaf147b92ef3d024ed5d6e98a2c2945e79ddabacf23ab31ec1e09d907787c2a460cc06f9c8fdad9050eb0c2bd20e5f8c032c9ad7caeb76ed5c78489869b5cbe3d2fd020bb8e5d2b1cd9c3993a3c114a468aaec787dbc79ad986f9126057c9b4175df344f4bda199829f17c83640b9fb2f9e1332e2be9819e9c5ea21b7d2496d61c3de79a7848bb2a34623ef36e585f84df121207d03acf2ec986dc635416a50a5964bb10a8117f092f228381b9e9582bb15548dda30da6870ff6af6d977b20c001047a154f65a457aebd08988121967b19c6d77c4ed0dfc682868c11c380f6a8b0973413faac33c48a7a3aa87e2f8742000c97dfa4e91e797aa70939feea98f6f51a8c55bdd602e29bccd47f605979b8470a834fc6be3d89560ad45e53e0853fb637600b187544c15369902ebc0bb20eaff3c1df6d1c19e0f06005f1faf99e7b6eb998e4ad6adc9512e7668bbc5235cf843bca61d600459039b2f59a8ebcdcbf4a8cb57ebdddea7fe2c20c1786eb2f49ffe24226aa04bd566e7486becb6ce4c3319e205273be313e2514ff7388cc2379fbe64b6428fdc1b55c60ecf84fb998239292ec19a15228412e0fdf4d297d344fd444926fec8dfe428f70a16175c7e222c4b7dd68f2c9bb0504c211ede9ecd22605ec405ba8731e1c69cb25c5f749ca249ec82008679587949ee760a590c00297c19998a005dacac0cdf2b8852683f7fb04d60ce6eaed3a4898443a1199c8d3bc8a66dfc495eed9477f9955e7ade720c0fdd9a90e733d2de65a5286e2a1cac189826554d005ed4a9418b420832a1193da5fd134425bf4cfbfdc79e12bdf0329e985f493e9822ed962d384ba8af2f485df5f4c7294d77d4dce466ed85dcf99732b51d499c16cb3465e3e4bf576fc977c2ff37f97f6fc347fbc5f00f9c6f85d7989fe7ac131ecbf4d31c5e49ae55500c93621d8b87cd4809bfe067e2b2dc45bb235da9709f26f8b713a223eac6e902fe529632bca006b148cfb3694de2d6631ee7a41c251c887052fc3865f909188ca5db6923248a9dfd8c136224e7034c4f60ef0baedda9dcc06f658f842176456e299689a1e162133e9c5a14160f179d51d1a2e1044c499a3657ef4e1cf85504b542130d965029501ae6d1b6c74b66302212b6a0325bd9ca5dcba80db1b28f873b48e6e5e32649bd43ada6c48da3b0979283d413ec368fadc3e87cc3b12273c53fb8601bd460a8e2684243761475f53d2f66a5eb452d4df09c917cc5e2a3e2804b80a62a4a26fc19006c0e6403b4f6efe0079f22e1dd9be0b3984d65524fe810afa4fd1ca2ea243edbe179b4dfbb0f396f92ace44ac8a14c14ce8168afdb475385e351287aa0e35827e7c75233de4639617015fdac920e7a9fa369152133c6164710a8b14b46de46b00d75ef468802d3ae7e0b8a8e67213ac9840655adea7f35870470e55350cd509faf359de8b23d422548a2f7441b0f88bb114926e629d76fdc7f428d07bf1488221bd6d9792b58b4ed8f2467fc0aa2cefed891afe5dc25725c6bbb3fc5bf6a4128f478b79acd2abd78a5e35605ee30698eba164ca2d7ee3f262550cd96cb961619d64cee8d3bc0c05c681a41eb43ab3c1eebd8349ce0c58d15bbcdf2023d6dbaf803f11ced28695a8664752557c5b862634bde8812deb7a0ee11b41f5a322faeb230da918eb9a7eb2e0a71fc485c70f68a181ea22cb7e79523e13236edfbd3cee8326cfc935584a46b5cd241264a61840958d354654dc9e78d02c0ac9e6880bf01bce14c3e0452c4c1c036c3c8f7585a3dfdce7b377e65e24d4c0cac53a4468d8be15f85e74ad45f0f43ff1cb04ae877c65822319313519751e8f45138a4999c5995ecb5b3d7f019604a80a7f643ed59b4e6891190479684fc8c28c90e013872ce23ca10a456ce315294bfebeff0e40d8d621b0ffe39fbf7c5fb2f6993667c71ce3f743d60fda3a390f1234692aba2489d2050e1f7998f639260ee4bbcff2543934fbc0a952f5a6eab94d23c1f370d42250ada5f7b3b2011ed486551491f9194a7760b5e77548ff0671f502958dcd4954672d17cd5e23a72f7d76a1530d91193df2bb842232e4e1463eb9f7721375052fa8f8f3ef7c185666c2f7dac72e5fb646f1ce458e4c4a7cfd011dd34ba1d43e23b1c3be32e111a1e5118fb210d1bfa876e631a13b5ec9ccdbdc8efebac9d14252d2358345435660b73ac6471ef94fb4f80a6736045166386522a35df4a8dc87cb5d910cb6d3c1bb796c33c2efd73dee4a407068a5e239c8c968832ac7ebcf0ebb22df75c4473fbfc3debb748b81376b09300588190fba4bd3887a8906c0109ad9f790fc17dd9da5dcdee7429246fe8682a73dd499cbefbab42fc99be144266f2585e80a2fe194d0bfe2a04bb90b0c804747e6b3e0ca87280114c6b0c7a7f4fb0f6c175478dc180ae7dcbd7937e230843bc1af5b85ac3bc02974cc1700e6f74fd9d8453e66a84e28dd060f0000e824c8d4233d2a898bcc2f7277bab4150a4015ed0072cd7a2bbca3433a470110c1981a0d831915d6839e7d830050eb8e1d9bd610f87b70c5ec117e1e71df8ea319a93d383bbd601cf2bf6d90b0e4d9556eabb0d2040c93af18d9f6ce85d1e136de2c0b8508018629df9578fb1c6c6a61c36cc9d2b136ce06c158a38b6cc66978e2a88f6b7abe335bc6e860aa675d93392bf34d0d5599834eb809f55d5eb6f0d86e029bb8ab02d79f995ae80482a5c13292f572c3be4342fe164c63275bd7d8f042828f8b6d749449fd2fd0d07cd479dade9b5891a5a2a93c5e4d7326f31f35d56a0a8713196be5ccbe3b756182c6e5faf5521539cd2197ae7d6c1624692864603361df3dbf714a113ca0b237a80097db5f632d534ec675e6bcf8e62d0b64c70d77f61d122a6c9bca0b8137e5511a3e6493237e7360ce21c0ec55cf423e70af973e015110a493bbc59488a74de7758960b8e8118f0195175632bc4f0d0c5d8639f70aebb3b2dc31dcd79e83c3ceb164db1d4e88289ffe87f735142fef9e9e2e51ef22c2a1ddfe5eb0613c7d721c76325595ef9360a3f3f66f8ab021accae3c9fd57bdccf037a5ac0997326310c9826afa327ca61cb84125260c91b617f06c6c81d17b4ce799dad323d2b7576e7a26c2eb579d8e007dbdf0b15a51fd957bb3694c9fefc65b4eabbdaa689552c68c1a27f2307ca551881d5230696e24643e33847bc3d94e79a9b5d131317e939b2930acdcbc7d778ed075904fc15a5851a7ea6d2eae750b337df00c79a24de1931e37931c4f8901af8410dbc7a72c691970a3395d5f28f57ae8bc480c7a7b3493c41153966cf3b1d1a34dc3e334e52a695ad8b81b4f95968b275351daeff76e43e3c4d7eebf334717ac5199ba04e7361a6623b4a9402a8ac11195635877dae82db3e3dbf114e20501158daae0ae4ac04182956fd1b09150dcd5233009949c39d3a260861c811159eb5bfc043997cea857d45bda4bd76b7f816cc5cc3cb0cc1d257a5fa697f66a754114e0157494534fabf44ba7cf9b7fca356a93b42536cf0b697594de7499df3f92b492217283590576f0b971602637591b87867496e9f5b89a050f011b115d441a1bf177eb96c2a2b078a92fd9894849808cf31da8bffa63b8897d8d789fb574e6d5963b151350545bc0d8e8b638deec3a8f142e0964e62aa3a9a25f006aeb4ebd35974464ab2b3b83207f8dc0ead337c2e8368bf431b4e6e8df4a56a6191a4bb73d6f93e7c441903615de4f2200146dd18d2527455ed99bbdf2f8f48d58712e62f666ee9507bbe944641f5c50cf3e44074a5178d3f40847dc1dfdb808921fae0d71cb64b47f96be9feba8f8eba341029370f3aa5bf7dcb0a87419f35de18708d9ccc7383a62bdc9bdd77b1586ddbdbc827c00fde1c1c62af12a38fcf28973d6b80188af272c31ba4d6c95bf68628904b674940ff1d1d1b420b3d4f1757c72f52c279224716405be1220c5117af5fe1f22fbe898484e790af68ed37f091d8e01a8c777f49e0e28d0515ce750c91c00ebcf270fcb59208ec91de70a481cedaf82da21a91d2bc1e5f321a6225ce2d0e020156c660c69b81bcdbcd9e4fe748207ceb5ddcfa5ad5a7a7cbf8c37f29e94b7c0f06e6106b3570b239a4b6ea85515d2b943115130713a593f8c336034879f4b0b71e05180ec7eec6bb273a98e70f57651db8d7313c1c3e49e939682427743b470c3d12a05c79a546a227f5a0ce78453a008991124b7ef1b927b943756430ff7d9f6298bd9d5c5e052d75f212af9bf7d4008300cec5b5c0403db5b69819996ab76277be521455ebb4aa82f1872c6f40eaf7652984c8f97af94f19e0c2bb08d47adb3ee4dd4bda790a65029a5161b8786004be4b910b755b981a068b849b27264a32be375c63533f4c0bfec1209848d0d80e67462c9ac2c71163b035da4c371337b355acb4b2290a8f786a06cd6fcd7068aefce9378fac1c165561732bdf3b675aa883f8175d5a8640ecf4f003062f7481839ddc805f932e567426657791ed81ccef8df8284740a42cd89a07bc63d7156499d64d9c4dbfd3b66e43cdfed043ea378275f8b99a4bced119c6fc1fdf563aa66fde417dcbdc76c6c6eade9c00ccb485b27b2c49d873fdbb516d799f9129256beb7a205447e7d1b9c2a0dece44fff3e295b05829eed871598655c2cb357a58beb0781e89372c975546c095744bff368f6791c7a14bafd6ab5d7f83f087ad4c85a920fde890d00a6be87644ff88b9725504b084358114b36d340fb3bc69579297d39a5b1e98fed5fc4c84c101ca553f724eb76163e256f1d1ca2ab7e8a286acda34fc874a0451f59a5703497669d4ed2b8780c1807084dd8fec14de0f7cb8d8bb381e54fe3d02aca4b6509fe8e67f8e2760aae82f1261cb9c830caadd6406881fd309c501208a7e22b4a8e450997c7b30748b8192e6aa456115e2ede84168835cea4236ee85f50b7edfe1eae6f240f35a9d3f03f156c6f65f1d1a471d3adbc4f1c4a0dcca71dc6e2b832c041e4c0c4b9a0529ed8354c2a18238def83fe8008cf26284527225bf83ee0f36f4c2644558b84b12689211f000f906463d69f7ae9a082c6d4d2cab6912ca008b55810fcf3c89ab6769108b65a97530e24af9041288f43a1e0852be77222a3e09c205b1cd3813d76a888b29eef5fd1814a12861f9b1599777a4eacb0773f04b7db3c08994fdfc3df2dff362e5a41645c35155fc465aa751b9629a3b27cc9605a915b644d7a848ab379904f5b492b0b743da01929beaccf97170e8b42bfd49b6db94282a155de13e35602297ab95a304cf9917953e333e5d765ba17ab311026a1406c5a98ccde23c01f6d41b190dafd0d665b65e78ac7777300046115cfd4968867c70807088195ac04e32f5df9b435b4992e554bc719006898849dab4a4ee36c92949a191c64756387709506c53c883d9d4ae4c9d8a43b0d13c7a6d48b2d1c49345e0d22072a2b04fbac296b069c784e4218d160f9d0845619b988544bd414cffa606cbdf1ee22da83b39038a978ed319552b0141caf5f96844a127d0d62a5aa0bf7d261d7dea3fd571c34755f57e978f5d339b05ed7f114d77fc937955b43c174ed36a43ca11ca9836981195e45b5c94357659eece943b33cf68fca2adc779dc5e166c721d1fb60e7e1f34247dac6bb5460935715d3fa5db3a56e1bf4a5eb3dc0bd4ab66e4cada28cf6f7e525c3e6cf133a3ab90786650b4b1f06361bfdb976425b623c27e11db6546c44273de777790c1aa94f219a7f4747c34ffb699985ebfd9253c7bf917a74606bca21c2960ee65868af458b49282a697c2adc6af93360823aba71a291f1512aa72c5473f04d03e8bfa94c42bc47a575721f12f3f1c88beb5f08dd211a2eb1d262dc6cc42a0ca247195525e85df0f25f608e27cfb539d67dd45eefd5e8405cf73a3932558632ea6d369ac7b136ea2432e2b8eec77fc22c583c8c5cc1a0cd8a1d32730a72a6fa89015a98e4a4a0be6b239a11d78f5180dbe3500d080d121519b1ef3c64528fd850fb0d4cb42ef8a9dac33d61349f068588359b81a859b8e00d4984e7e70335598c2291368c33c8e24850dd806cc7b38e83b13ab332dcc876a4301ecc54748e4a88fd75b046c6915bade14ce2d6e1f8af01d9ad9ddfd76aec33f83c10590c3774632cb51bf28b8e7be3da08ed799a44e82e2f16c6c434eb03cb1b6d7487a420870d36e1b2180df8eae73686ad856c41155659d6c0b7e9b5b3af4e4aac4d0863456c52984e63da2059382dba51cc1fd2bbafe921b4ba9d12d369a6ba9666f21f6529ca1a54512699e39ecbedb4b0f5b5c4dfcd597f087306fefb1faf86eb136021e7fbb567402004d4ff013c621588d3bc827157343ba61e43b5c25bd75cd600e846d0e20b0bfee800041e91ea5e3fbb9b5253213949c64d1dd76f18b9ea7fc4264449777a7ac29d023292f2a34324f388641a8301aef95eab40ddc91da1f56f6f336e14a5954ede28ac52ec5c18acfb18166c708d6fea539f98ad2588c29c182d8db5fe41848a22d786ba52c8ac7c829bc4d309ff6a684f77ca04c7b9e118e9357944636d736a93182b9824ec19d4d6ed29cbefec5e1cc5a4dbcc8d28268c20984472e4017e4949cf058def5011849f5848e51346930442847418f3089029c635dab254262ccafb21e731affe6ec433341a817d56f78872030f7ccaf045885e778fdb33f9d46e0e171169d96db339094f13a37659f0a3ac0a43d7aba1ec45ede2162d7aee301b0b5b6f84179b7d40d9651ee713c6d518216a95b6cbfc295e4ae0c8e4e037e347be85894efd9108afd81596a06fa281b522c40c72e50d880aacc603e46faa3d9577799308a04166786c375cacdbd6fcffac9b1c487979fe2bf855ebe8771faf5533c0df582ba378818d6ca8749588433c42cf7d5efcd32b1048abd807f853c9edc6b4a39dcf2261e45bd5a7448b3ff2ff4eb36bdd72e7feee2aa91d0a4411bc7f324aa8af36ef2f916538931b45debf99218789a2e96aca6681f29b7f60c4754fbad370dff04fefa2d9a9145c32957ea1a92d1b058b82f9a3ddce873204bd5bc5bcc6a037a8aa522b561fcf6b2c4ceb4a447db4f95c5517cfee9fa581ce0f92a4e5ff8bb16ca0975ac9b1d7757a2d1fc6018d88b614494644d1cfdab0b63756214b2d9d4ee8439687d1269bed6b06d0322b53a44f0a3026ceae1c7afee7661750b17d48b3a80df47daa79a90ff75ea31c2abdf7e296e508f6c040b6b5dca59d76d3f25296e15b72c9410b1c653dcd78c8e704ddf550415a2d682f1af91aee853ed701acea61c9c08c24e0ad0d8857dc8908356afa1845028363f2cc62125cf9de811b6e33026a1261293afe8be351098db0d097a5780dac24e9a259435969353c9b889a9005569da8a6142ba3d80ded197638e642b3d6901ec32a1ada72b0aae1c7de438486caf6be6980b10c84e66442b829408151048fbaec2009925b5a8a90408fd199881f699d274e077b46b11025210357d6436091e6955236f5c0ea2c490828bc896e3e99b6833f5d021062f176d2b7aeaec535dc101b50f345b71ee99155a3640f78d7343ce59cf0e86a8d1508a478a147d48be89ccef53d7a2f57aa9b10f888f3080d5cf9d966482f347c6e6a6ecdd9cbce117ad9ace51c49ff8f72af5984efcf0a09f68dd02aed6bc275d54b519a1ae5beb9f293a58219ea51f17ecc261abb8c2c4d3c5add2142f6c365b9b0f898263d36ac64fd95bd9af588a199e7f14cb03b88d0d57bd686dc0942b089784c8e8c9bd65153d3187e0f3e2b6d8b29de13cdd29cc9b3da501785f4dc43c62e395c1524ecc06f8597ba4912e89856431d8a6f7dc2fb88985d8534e22747a021a02ce73dac55a147bb8898c7c2ee2c7bb7429084ed525e4e23e71cd79838700c8598f32fecbde897126c77a798b00b8b1a540d2ec3149d5ced0cf962e0511aa684bdc12a3fd2bc9de2a2ffb04e2099be45acf7829f5e7c5408f6eca7d2d61a1f03f3c14679c763e879d70fb54c63b82136d5159f9acb385abb0c18db705b103ca1b02aa0b939020e7629f3f276e4351456d70de007191ea7fc25d4708121a74014a99421cd386946ca09fd33d54ebd3432adf03efbc0814c61a0003eb5642080f002f24f5a0b05a483a3181123b8aa04d00502d58330f1262b9174cfcf396c36a897edf3f2c29bd25e971d0679401ef987ef5a47068d138f8cd144da24a8169ac20e6418f8d365abf9468dcd31f07fbd22d523b0d68c3ceb93575e8fe575882aaaf5443d6e48f3ba09274291a5f12ee0860d531bece646e232ae65ec6ed1e681bad7bdf06cdeb86e33d37cc19386a6465b7a803b9252bdfac7eca05e010bd243760ddc8ebca2d029482c00016642bb0999c00cffefab5b3bb8fdf07ccfab3212d12905d9a6fe7d7ad54b915b7a0430b1a463275bfc914523aae7b8df39048db4be43df53c40493451cbcbdc3fa8f33710c2aad46907767c0aede6c63b4562b1ab69a34866c52fd70582f1bef9ea04983564c60c86a7d5250429417fb94f60aae89b767533e2e351ca4b83d528bc2a609915d650835152283ded8e3ad4b31a7e78ddb075b1bb1cd417b935cdc7b591d440fe2836b41bcc89c30d2a1fffce1c6fe77c4d1d6ec074e96cfaae778838198988744d0482d8cc1e6cc2a7c59714ea4460c0b82f87e585110d3d4c4702a4a3a5f2a76cba03a2a2bacdac5f0e22455c9489db9d510824ba7f6d4400bfd7cd577f22c86bde1be0ba6f16c9f6b13284714bc09b0a6401aea9f4e40f5836e929728e5181c7d23fab07f9c53d24b680bc547586f45dd0ac8afbaee5d054743669735f3059671f527355c04e40aebcfd69791d99e4016f7351ae57255165074fb4fc64202fad49afca9bf83d476a402ed958c5624fcee5cd9863264ca68dd358569ed4a9aad559829d6eae1d2852760c7b77700c486d52d10dbf994223361bf6a3025ec02fb9b6880962d57ae34383283c851505796c06618fec9904a3aa89d09f9fc040818e136f79accfaa3425bc9373dc35fdedc0c171ff59b2a5acd037ab8be48dade6c4e70efbddc7d3f8beb573c68f3ceaeb7a2a9ce3b0d02ab767b210c8806d3993268ce962b66740d8ac5e44448565c9605767f005a184cc81d8c781b13646b65ddadc1839d63ab9893e421c5a55f72dbca4f394d468c463302203a95eeb9fb0f9109770994b55d7acf76ee41e96f756f04e7b0929fd641c24d5c559b1e50a22854b7cfaa54c86b2f502ac72dc617ecad0e8f38a9540aa845788a19e41143407bd3d381837c50e92b7c126bcd812ab0bee5a22a9b50e5344ea7087f560a1f05e01207e987cedaa5e91960a71fcdda712031cd9aaa0c1b8eaa61d50823e62b55389286c67c28c8864c0469177861e3f9417283a7b5b6ba42e142690d684df5272af80258e92bb69e51f712a40453f0b16466b87e12c2f5866543716f793eed850085756d0f416fffaec12b90952a1901f499ee573ab82ed1d0f0ae4ba0c0a27eac12e9a4ef562a863b52f420efe71a4467a857a1ae6b658c38edec9fe5f8f555b88fe9c67be42e73c83cc533457907d84453a0a8acfbf8f0e6033a28ed65e262bf9f905b7fad2d128264990c06a05881518ac6379e4721f8bc8f1a7042b4e14d042056a3a80ef87711c6fafa16602ea7c9ff375114d7da993cfb8bfdec0182155608abbb64800ede459cd8fb9c3ccfe75b8bcc4c9d3023d6deae01fa9720349d76c33ce591026c82b013a2788ce13aa0014201712cc91b0e318614f10e0a0d50d8094c112484e3c8693182ad7bc8a11763126dbf7cd3cb93b2941c7a954bde7c90ae963891ec848088818babf788566cd46322d0ecc24ce38a01a9b79d87fd34b88bd589f96d56d90415177f0e28dfa0fb2e81e2c24b4fd088c27193df98f91255ef745a62cc3c948228ec740017d7b5a4a0ce39039058cc7f27304313988b7c4c7f8c7d640fdab6156e451af1db8f4caa494af02623838fd2ca5f8462e5793b4feab7052309eaa79ceb145195a1452b17ba931e07098c2a1d68aa7fdb2f06956b3c0be920f59444fb2e35ccbb7fb08321a52ea715b4218391388215668e8b3e59d39de573b10249892723511b339bb77c48609ffe1c0529de03815bd8f39676760468f9ca5c637c1790f0d80a0022c314adac49d522f103d193883621e8531ca2ceb855f24006381c8569174a29149f718a51a943f0dc1c1a1fa69880015b8e3796f3534e3b00278f445786f93c143b05c9ebf01b75c60da41974e3449199458d84ea3fb9e56b9097c97b92f300fc40e4fc502039f268e9a6c9cc56b00828838dc93a14780815f5c28128533b1fabda4dae56a798fa9de95e79447473aa0666411608a57358ab50f59946d3e8ef77898cf12e3f42b875357a6291b5f4c63391f889867a397c9b33ccf10af155478dfbb90784f36b4c7ecbbba6e28b6ff558cbc745d96337aebe4007e3283cbc4892645c2a36529445941a253b063902da9136d068a6756753c3c7166929b5225cc97202354aa0c2406dc96b2561d4a008278c1a40ddd20c10c15993b69b5533087178abc0a51c4bba19488c80990c157e814bf19af45c75d89348b828a2f9567d75072194ac4b9e08e2dc82e0a3a5422c486a2473715ad2bc3697ab00bc257504be6b4901923228fcc592f14aaa579996fa15fe184979e467dd6e55e9426669d31c94204c290e57558b70f23826a8f0f1b6b843140cd2a097116780194fa4c2293b86153cedc14f89eb214f4e268b8af2ee02a434f32d7595095e149505f105a61118d67c11c9da980ce616991da26426359c74a33aba9c3851c4f96f7299a4955068e8ff93c6759bb28125525f0c40cd468d143bfe90ec8d96aa0eafa433645b053ef7de6f856eac0e9d573be0c292ee040ae8d6652ee2bc42f7ca63c0710b26ce4d861cea42a59fc20d467730fae5f94b060b3d1580c8a80068558705487e4dfa6e68c98aeb37ada2980433fc59b0ada72465a908d9de4196b888868aefc51f29fc402fdbce872e7c93a9419425b712d57cff47d18a4c58b8f504d9dbc4f2ea379d0b58f848e016dbaf3b35bf37533ca380aee11d637276b5bd6671a55a55a4b74e01ec57858b77291d08c80f7c7164d9aac934ad1d7f9d1ca134562e9a0205b26131439d813345f3c2d89e29c547f0b12ef9b502b6c965090221f5854d62c060292d37630d860fe8063ccb2b820f8da088215d0befe7d9d88a59fa74c3c6f65cb6c2267f06b0362a02ed00fde2bfad40b7f095607eae094e5a007e5458a93e15f56f8b403cba150073d7e1d158d408c9ebf7deec4a13fdedb865e2db8a95507f6070d41e6030d7f6767232b247c7c05625dba30e236a3811dc3da12cfe03fc2cda87615b4925356f7e6e6c0b07d211e6233f8635b1faaf4a90b12f34074945e48e215597bed0bd338ee98ac92b3632e4ceff8594b5103edbe2fcea1469f05cd9b488238ab862fad3033ffb2990c9278fd1490a3442277193f445b3ab3468b72d9a98ea08413f9c98b38e00130e890b44c82ac95fe55e29d2693b2a2790959730a991545052dc651e32efef345f87495d470e489e7262a8442cd00ee0091c52a0d2225ce00911d65c5c160a6405f419d409e58d427c274721e09984d08e8ad8ba668efa0584fcaeba7edf001ca2102efe102415743864be1f50ac469ae4ba61b02f3a16d79e32d44d040d5e510ad2cce29c8679a8979555a399b0a32216b1c3c36a7719b6f109056c4cdbb602926fa3045b39b60dca6404b921c9659e9f1222e13c647d6817a32d8bc64a3ece04021185a82bdb9c22ba0d37d65eff93b93791e220a3cd20e59153a7d02f5450303d2d72d5c61ed5e51313f8e4e2175af8995388df0c28e77ce93db0aafe9db037da194f88d220f8e087a14d30772c413b76007d81e70085321ce9278e0d21e74fa70122326cbbde89cb87b68bc7133d9e932d5a0b65987d679847096ab6588de6b07303ecade6fe9f83a33cc1e85c9e3798e650b860660742c56172a9488954e96067f899fe7e138319f46db44bcab82625632d1a010d5cf7cfa4af34fb03aeb29495dd56686d80838b0f64654bf0c1c56c46963850c909ef252c8248896022be4fad00fb8b07c9502a46a62e48b32b5a2dceda82d5efa7363be6ad82771677b83cb4f0cc746704c992bf90aac92ce6469608c3f80e7c715dbd5eb7c5aa186035a91305d2bcafcc0fc6ead7eef31b2112887f01834b945c22624dfe4481ae1bade52bb8529f9f9886c4afbf213ad24c10430deee1b21d951f83f50bd9566e56deaafe851ac1f36ec7a4ad7e5db8081b5c82627872cc60b079850ec9558148e6626ca65184e41a35b92bec783a568ba804dd3bfc69f7245444bd545b0b38df3e0a86f5b0cd05a3fac229e229cc48cc1e7300dff28f41849677edd895e37b9c4d6e6dc78b85ac2a0964d0ae06d31609cd801c794cad49bcad434c364111ad835227dc1766edd5edea9988f51d05255de3b14674d8bfb3fb2411828105c657e6e5fd73f806e5653f522a33a2d155d20fab15f98ce06519935bbeadb3391d40b2c20a1ff09b1de48a045db0ac1c3dd7ce18f6b7b5636cbb43d2361b6628b993df9fd84bfe99ab3ecf569b026092877a3363f6bb2593d8b89a54453b3be9f8a30ce0448cdc32da52942ab6737843d174e36d301d6723de03ebd979891ff368197199beb5d79490df5df2734c0c1ade254266af335001f78a74b4fba0a7b8c895d1dab85a62ba244b5afd0e39a2d1f71520548d95050a791d4d0927f2301c05500916d1ee399f5742070a0c22b8e399152b952c6228241477aea65dda7c399d28c2c35aacb023d6313c519ea0d426226d1205af4c9e9c2a64fbc68c7c0c2e3a411f65441606ea7c6b1a8e7009fc0c0f8ce205128cdf007eb5769bfe4eb99a9f026ea96c9fdd5771f97f212488d041ec7b8ef507d1ff21e61a42c52212d445e499545e3ecdf90b84248cd658c789abc9c31085ea5c9ae1bba187ae628ab8a2d50b0eabeb1c5c9f2766c4e3e3958a22a95b00ba0cd446413ed5f9ffb9dae2161952b55b7779ffd3b507ac7d8412f5e34c5f4b760c772f067e2a4ee8722282b606bde2a5aadc503f16a0a6036158dcf96217904189e7e49afa3f0de684d78f7c51ed22228ac873ed8238d19ecee02fa9621a9949e03dfb80cf555db20596a340750602a7805f8e0dc7b96eb9a907fc427e07baceadf2dbb924c28b3cf2b841d46fc41076c88b136b3264024b53c97a7e5c49ab103bc472b3ac6ade27bde706603e805863f4048c1ef9be0caefd50e3b95d95a507fdfe6b6ffc0f81f2f4b4d5bf361b6ec09c3e3ef4cd2a2512a07f816a3378b4db58324b38059f03fa89c654ccaec8471a90d8dec57798235447d77254f571ef71e158d548ffed1e90dd3eeefff4afae3518d1630a276d2b00c0a673972f41c5a6d7399427f3ed4d8d55d6aa7b8ab272d2bc849d78d590f06a634ef5c50764edf6eb759b81f64deb02f247d5ff39720093c04a1fc0d3e4c651fa6d64335e19121c703f079f87a708c9b4b9003e7dc7f241760d9ef72e778345eb5accacc2b72d48e9a726b19a2ab57754d89b82e1b87db2d2c61731c7ac2432837406628677412f933142392c8948bd9cbcea2b2d31b7681db70627323041aa00aa9fb783b4da6697eb794eabcace2640f5af93dc627449677c2278fc785b34674649e3d98ea16243d67390302b23ad41510b01774b5cd369fe4ae1ad0f1bb9de92197d69f5c611621b6e31e79b373048d63d2715440561f6a70bb366c753fd66a8ffc15a846e5a9a343c168ade9618e2fd92080d1af5bb3cf4153c16f368326f7b86b3f519d4c0c58e1aff0698f309db08c94d8bd272e9979846fd2314e6fe8a8abcee78268c9aa3dec223e7b64830cf16017ae186170b448ff707af27e5a6de576ae68fe66b94b068e9d07a6cbdeb96c470ac03730b3c684b5c3d0c94c89e38f164d7c8ced6771824eef4918b42919c9da83d8b8d9193f48d1e2a95cbd8ea1e0ab925f5c438ff42433a1cf3038893af5d2be4d422432caa631651ed3baefad3d0ab9846f1412bd73e2d3f5b32123e038be1864ce9d05bfb6b83b5bb89e13b4651a84378ce55cb97a14bd8f4b5081438ac2dadfef8a7b80f6f5bbc35c60504991d87e01776b871791cc8a701e950670e4036932f0b5a1918fc34515a79e3bab54d64db6ce0f85f0029941e6027154017dc2b2408ada035d45d0db6bc9fbfa6331ab8b749392853c16dd50d4e152a25f4f4de9522ee0fe6224115344fe7c158911dd00e158d70414a86a2de08df6a97add06d5e9ef5148b45eef177a55009fb88cbed4042aacf0dacc5a6a267765eb6f3747030df04e7f52b0b18c10db0a03ac18687f926da5adb831e9b028c01b5a42c08c4c2267e3a80ca47dc9dda4903e4454e3548df3996773c73f36079c209202928e5eeb1ee1dc9fd360de1da39946b44b22d32747d956f755661fea3139a9030f7ff25b8b301a7588e6eeb3ba7711327c8332b22581960348339ec8133943b53552ea7b55d8eff1ff97a5182afc578e4057f26f72966151e3202af54a001f29588609d4522e214e96bfb3fa318ae9b74c37ec0017faea7161b01f872019d88cf3a57e607f1e54bba74c8f0e5e9817eac7c730aab5d24f7c1d7f06c63ffd3fb1e6487ee3d5e0d7f660494dfd8b3efb3b4e666edc14ee2084705f24a6df3ec3cb52b9f24f4456d0768778e87c04ad1e114a9890cf0bf2a4b2e2a9259992f164e199f884d1c856e3d916fe941dc60dcc986d9677ae0c1d054f087b811e27d7cc46cf267fc9af7e7722b48512aaeab819a2e74ae60daff63897aab475d9e1ddac6e6064b6a854d394959453cd3096ae4ebf672aeea0b443c5ff99d94282711be2eb7593a9e58ce7baad54a3485573ad1fa79598899a75c8caaa2ee57b2f39b4bff6787d62b645f2a0e5c0f5d97a76b382fb7840ba8f492315ce621b954b423e5d1357d6e4ffbad70464071722b8573532584649d34f2dfc2f2b0c81e2981bcb5eac3cd21147d66b5d37849957a997431372c220b3389d7c928c2d12ac5fa5ef0431625e189c8ca270a0620a0eff1dedc1e34d8f00afbe31e6cc442c5527ca93cbc0b16693b742dc0015421326b33307d35d3dc1e7a1476e85c5a1ee35b002c597b802591ad206a7006657690c1f209340bfa4ad41f5eb6c7aa14e6f30f7bc3d95b61f52869c1d0354cde1b1136bd7c60760f77326de6cdec34ccc70d0a19b4744cd9a95ae4193d47acfc498e7fc753cc2b22ae81202012e04135efc2839b04cfe1ae04f136ac934a0a899e7d6d9f1864181244d3d22a27430bcafaafa0df12c4715f08ba658bd6f379ea4f8335e7696937273b534017bf3d971af733076254328536b1f6fc67b4e71be1e74b4d312ab6b301dcaf477ccad47b0bd024174549bb5f5c481d89bf34710b31382b3786061f2298bd49e557bc69f2119490b3b45a542d0233e9f2a2b38e70e3c584f5a59b69a7b35602eb7e9400b45c504aa4250c3876d5177bbecd6e392723cb6acd9467340fe954d9462e9c1370470f26b1d83d1dca69148e19c3142ccb0b7a991c21c924ca1077a465be1faace60cc0b01bffefa241ec4042610f220cec461239e61efe8fd9b02d3e330a47bc06e766c51372c6c0dfdeb413cf2a3bac659b843f922cb5147e435f7361b0cf5e7bf5a027ccfbfd3b2b23119b3f0a946ada6398acb1f6a9a876ce37320609ee66499cc02b48b4b19c785e2b7e7103566cf197e2f0634973c3dc44a2ac1946a56e0b734f378da378187d32ec04586d9d29aa5219b6a32d26b18947918485732c2e120ddeac25e4d63e3e7f24d993238beb30455f68b3abc685418010f5e7cd17635c26e4fdcea058ab82c5b82b7d1252a1a1caea992b25effe51a9601316dcfb45a8963b668c6aa91ecbe632f9210aaf7bb84b0ee80dda1f3eca7569c348cbdbaf3c488f4eeccfbfca19335d5a9b7b3c6272201273fa700b03cea2c9548271c4ff877e172305bba3fa3902dee323d3b0adff73373b2afb74b65c0c618468e4429db2c6f6894a82072a846f2226fab518f43166cf929b77d4d053ec3ce9da52b5184db5ff8546cbbe922c894fe79ab8919486df55c9a4786755f4780dadda052be50607fce1a3e3ed0d874e842c303d34d6b18b61442ce8e61f3bc05941856b8c84b1fd01718da49a7d530fac30c6b2d2b036756728e8f8b28b8e616538e01691938d95ce5071a7d4b12a5201393c7a943e73076e0949656b76856895f8462cb077beefae976dfd3192f59c265d47ac363d8c7d47d2465061ee2e3916250b88337d4592b2af08b8aae3b168ac2e0b754fd99d852f871853e4080561c87334a04049763b806c822501538691646168e0719253801d4cbf815b216de1cb3d53bb7b72779ed1cf32891ab55c6ac9e6570fc43738015d365b445a0fecf5e0d9663eb6654623ade73e15804a73161bceceb1cd0f4403b42753a3fb5d8d2f05c01dfc5c85b8d04fa7f8e342e9a20e1d800b6a5a9cd867f63dc0af915d4af515bd341900dad0bf559e72c0510c8425baee2eb3128d470704ff6f9ae168ff20be6a3c5b80bcff2fba6423ecd46f72754fc1aa47ec2406cbfb0c9740f2a679822adf8135c84731f3d72532918795006a0473147595a671598901b9cd39232ec98608326865e17e9a88dd86a7850cd82e9845ab5338ab3bb112303e24b37cf253cfb6237b48b50cb21e7fcc595ef08a860e94d6bedbe4c58bd9eab91adbb97a1768af5d6f72c4d42570f7fd77593ac7222a357cb78c08a8c7e452a621054e6c07263f18d84be30e03e6dca342dc007188e3a861bfa7d60486b0538d71774e42a3d4522d758149ad7b62cde1106fe2c4c60562abc0a35020d36a706810ee56e8b540b66df5f5d81a57dd78601c843207189ae189d51911afe0acf15c199f742b872a1d9725b3005e173db02c2c0ace2e6b2c791ae069fcb9bf477f1f624b53d28f97a63556a157c749b82b6c66dbff128dbb59db2fb6cdbf25bb78798bb7f7c8ef9cd48c08b3e8fc3a8e0359615d964fd1c039e72b9fef9512d9e61232601f9e9d5d26c62951c8cde8ab5feed1854bc900b9101199ac6ec8aea7ffca5326e353f9b3b6a408bfd7edf26c45ab62f43c3266f7f03a78305b0b429196c5d69093f6b3d1909fe42268248d831b17ecb0d989808945c795f9fe60a8515fbface921a29a5ed92728ce8b467b2bd22d3e1698e41d4170cc1010d5440a857960b15170bb6962250cf4d1a04201950c0bbb035679b83e0474888e41915bb1010175697bb358181a707a49849257d383e4f7d6a8869e626f930aa168fbfb7c0dcbc56156ec104b3297006125cca0ff4363741e84b9a41d55a1b7acdce4cab21d48c356160f92e99d3dccfa2d69bdf0b67cd404be1e9cb2f8303cbdb0bef3c19612e7da80674605fdc57943c1103c76e968861de3a857e4bf92d10c9268b5948e643281cee8b924c82a81b7efc1e863f75186617c7a75ac2ece799c201a63f418224720cb8dd9c8bf0f1bd9aafae47222a9ab8642d4173f85be8373c18f83cd5eff7118e9ecd564c63c0e3b2b7961245f70c8e1e6ebe28e24e2a6cd08a0bac7704204f7192d04267804614fc9b0d17f2213f27ff52d11fcab1628c0e3eb64121fc324971fc21d650676c0627f70a06dfd322950f051b892356aaccd519f13d3114a354c59e2c4c30fe3a353261e925a7f2d058c63d22f9aea78bf37802465bfc2f57dc81f2826f083a2a004f6c287c7ba9b9f8a42197408c0f3584600daa523e7ee5b26d7263f7c642f9faed0218e4ea20987f6ef7a22ee5fb94363cbc0a6ecfe6980e404d941be9655ac822e5c1acc273af5a25003dc96acb406cc18f223af9044a93a5390ae2ce3c5b946b63d51eb6f386183c1746e93235b8bb6c2868df89fe323c6150ed26c740a60e6cd662092aeb1a53a86db8b5bf18a82073e00522cda887a224dc2a45e32abfae4f91a041fb92eb1e443cb2e3306b5ea3f306e511325a4354794346ca47d0fa19fd6e3a3987a6f860e6d958aae5ebc01e4c8a06ba6512454ce7cd5b5a2d075ca248b7b66cde935c7a5906969eddd58b210e9680f5aff5502f10d24f12ebd7cf70c288bc4d2423a0959846da2182fca084e2f223ecfe399f5246ced339a09808a33a5fad258a0e0685b2bc5ed7495c978290d2b572cd814b0d83b3870cfa544698a0aee73a1ce98d0b35370cbca99533bd0ae19ed112fd1bad8c9d306a275d2dc6f5c74e78ffda085d71ff2a317a9582e0e46a22aa202d8d00211f858cfed454ebb979a19027ca1f91ca14ec1f6de84ab044bfbcaa3c1043a1a882106a037242f824cef0f749ebcf4ea97e2d09f1bc8a69138700ef28d3a1738ea78ab532c9e880980ee373002aad921de829b00134dfdff31edc4433cf75ea7e3b926a28bef56bf747b55ae964fc79e23248b0d7ea889d400cdc88af0cc231446967ff42c397d150e8bbe8a9e745107189d6f689678a406decf470d371b523a6597c51137ce355ae32758a2700585064468e3a9fbbac264f2538e36fae4eab7599a22efa42d9f24e881da9af0985b80d27bd57ca0e8eb54a2db1a95f9e2d7dcb680dc30f6b0b7834a188beaa90b1e62bb08bd5382f902ec687742298b309aec7968ee0606d66717730af94df291169d157a7061a2775d8939f87a1cd078f9b0585015f6e3089cd0038993a8f4dce08d3171a12524873813ed0b713a13e908cbfc6e906a4a041c928e0b529dbb57e7a717f26057e4b000f19d12df4c9ed6cc0c5f5af9fd2e13437aca151e4a94a4f2ec2a90a7e33fbc2246c3201fdcbb88bb36e9a49978e4b435b9ce3655a39b54ceb2311c45618f961a898d6aaded8a604bc2457feaed382fd44c4969db50378ad46ca41cc3fe12294e638fcb21d829d9e98b229b6efa92c2d482b2a6a89fce6fedd57bec9ec01130552488d2fe631af81f542023042b08612533037a5e3f5865ab58a8b1921f96007ab22d80cca119c41dbd1ddb06a7515a8beae023a54a5939d797b1b8b86e84e5c524b1f813f94ca545c0f8f266e51da2a451aafdfa9166e1ebabeda3efb7454a8e49af62d0fd9fa2656f3b96b7d122a130cc21609fbdeda2de32f067f6294c17108982bd22df2ffc2d0ca8086188c3739798ce736b776ccf5bfbc012a686f7b58d00ca89c766f18fe4f1487eeb609f567a3d02694aa0439c4dd57b6d0e40fe2fce50de1d77c9f8353f77f17ffe9872c4873bac2f954f17f32e866d2c4eddb25dc36bdd9ff20a17d85eab6bb9415568b6e51d3e09ea8e26ce5798b45e0a291e55da6909759fc532faa2f4a68b32f0f2ac023e2d3fe9b401467a650aff4061cdb66e2091b47d89632201013d89b3a665c40b7b634371cb5fba92fdb60f6cd2c73022089a957e079311ac1f2707cc117a386e1d48dc460dc5e9cc63003072752af12d7f95cfc4d70049702c6bd0b4b3474969ee473305c1cb6e5bb6071965865fc56c808f6621b3a3aeb3ec00a6e0110819d8652d4107ba61c4cc30932ba11e7e08d250ab63d81de5ef854eb1a30becbefddc86f009a57014862b9b839894071dd83153ec241b8d2632c37bb3263dbcaa4d80a2b9a585e6ed1d90a148ed4e5432af706600e0179a672fd7399595bc882ee6f19074c65a97b0fc65dbc8851dcdf96c3a805f572c30e0e5ae64d5d39f369c9e6b7011279e4f977d9d8d1a95513609076ba22c004bbf5c2822ee0ab01d244f4dc426dbb2434d3810568566de8bc6263db71ed1cdb855bfa5da65bab8955b13768c5405e82c180ab55cc29543dcf67dc790745acd1022ebca68e7b1b5b93a8c654e02bd8acb8b01a3d409c701144b30774d594ee25d66e0c3922d9f36d231f917249a93fe6505f27e7e85a80ea425c41ad503e6425f14731cc76b347f4809b73e0ba0a3872c1a8c88fb4b1ce9f7aae55bd9863eac78b3a4c7204356ff712af21622db53b4e1727eafe6b07361e00f6abb3420e6a484ecf46be8f906022107f844a205b109508b1dbb8c28c458e171867f27b8045a75e98e052a8c3bfd97907056fced2d4b7db7309a00343873ee6851e3a876f8347904556100e494d7e0943793c441baace115590d333093918872dd4e17e6e7c7d1499265809c126405da929930c7172c2569880c6847dc3731af3c61cd1d36ad66cd29203433f3efba3a0cde697c0592641bb2d28468e025069c050ad96f99a98801638c0a00ec2543fc8bb4061c8511a7f46b54cd0f7d4690e819ff28f055e0dcce219d557a0b1631dcde5203167975358b0adb0dbaa1ce3ab62c936694a7e0bfe4c1c7390dde09f787d9b49e39d93954fae7bc2c9150624eb00a08edb417429ed62e230ad88508555a2f279449c65f956d44d7254e1540ba28b8a4de93e372e09e5c50686cdf3535d8e3d0063471412b28b8c39c569cf9843933516391d773182ec5c6fe89c606168a2d3521587fcf4cc8cc697c2d7a551192e620e0c10317d7b0b214138139329efa565a5b34530028d038082cee7f92f15d7cdfe088281d1d41c866d51c0410225adb9a24553c3038d2be905f091e87339a0688a164db9d0e003b8b8aa8b5c87cbeeca1b7343de649706c9cb1d5fae1d3a092eae9c5dac7fab0b7674fd6de29bb4009b680ec91ce66ffad1f9a232b006704e7be3109b9291a5aeb73622549ad22d8f15d21f1d342caaea557cb2733e44751ce8a0761ed7d63b3da9b00118293a5cd7689f4898e286dc32386c6d786de90d7b72180b1498c8e568163c5e5ead229e75296e4b698880a39a907fd1d5856bd248527fecee5fc81236b76bdb7a498aa13b254a7342eef6d2436c87f71d65709567710ba419783369b39848e92a4093a20c94cf953af3ea5eac1f6b4224fa9331ee02742fa05a8024cd879e549f2663327f1449472dd6ec00599b43e3b215003a3a4fc9f4fe63171d28bc59c539095ffbcd597e3ce513aa554d32b31ba24ee1dfe09f6cb2954cb04fe2ea2144aa5c3790b617ff8cd2544225b5aa46890d3ee62536b8bfd07b20dad6a01619b34a5e6006f5abe47d9ffffadb0e144444a1e824f2871722aee38b1fdb4380c029e5db43e71c501429b32ded40ab2ec4a1f83153a5b188c72eabce076000243534dbf0d3ab7428ec534671d70a07c3f7f8edb1e56554c3675f543f759fccde3611605f796221e6191eff8ce084caca6ec2b754875e844d31de0c02736e3054194ed840d08188297c38474ea0347cb113ce71e5cc763b53f223a7bd330497ea18f7c5b7ae373fd1b4a8e060e5a9b30a7aedcf89aa1d8d4b7622c6658ba9eae687256635390cd7c36be1ada6cad1eb421c25453019a2a9a78947bbd429c473fd268064677d3c393c9df288fb35ac8eead71b6debcc02d5df689a28c5d34960ab6f7ef92a151a806a4f174aea85f6020dbe2aa5f8e482f7b81cfa3b4a4e3f7ca0fc23adc3515cc9696556df352d94562d30bc9681249077a468109a20b22759246ac078a27dd10d5829325680a593c4229c20ac0f621aa8556ab14b9fc7c22cafc114bab13dcb5091d7eaa7af786ba3eaa966aa826ec53eaf8613d900092c4703ab7103a4885d9a11b65b27cc2188b87389579f9831e68c0bb65602814f2e0c8068da55995bb3af7bdeaaff420268ecc12652d0ca08c37b2970e23112193985d6b8d3cb9b8869cd16fbf5191ec55a8ef12d29c85e28a9c0e1b138e34946d09abf8fea823a544073ffa40d0a28c5fce35b0624eb37b7fe2637edf48452b42ce4d7629a3254c2ae26ddefc7957b2faf28dcc74073fd65dc9be45b7f05802cc0bdcd44741d769ce753f09ccba6b02d0e3a81f4dd6b0bc4442710db2003f1b837e5cdfb04fd2a63f4ee1002006b7da8e368df7b971e6c0e9016d25f4275f5dbe98081f1e599e51d017fc9d70cf00a3714882d87ef29030b40da46d6c1f8f3cced749dcf4200af1b023d3a067577caf07a5d84e6de911146be638bdf6f8a6d5d54559722814d96b05c226e42402fc2c0812a3d2b69b65536b764b23a094b6e57b07837a0b9fb3223469e691a554083d9341ac1028ffa76118b3352a57779e8cb74621f1e8ff52c94d82c19a4303042cdce5204959329b650383520208f6e6459c2af2df2c9f42921022fc432216e47d1062882b4d13a31aad4a59c4c05e416449fb33b17e0c5e99cc4ba958f4eb85ee3b6d7ee79931f6be1aaf3b6a42cf655562f0b41a6a43bb3e5db6ce43481a9026e464e550046f9207ee9aebbd70fcb1c198ccc53335a5db85ac17b6c2fd4d4a9e6843b58192b455912169416ab76fc2075bfc89fad7f6fddcb3314d588973f00e4a7d69d9f519b3b81b4353cecebc4d9258ede1c419660ec0ea8de27b1d0a864fc06f0930324bfdd9f3254176a2b18be5de1aa690c5055c7028630bc69e949f1928d5cfc4c8224b152b70f26ee2229bbb0f6d8f41764aabbb9c3f0ab6c15f6b8ad2661600af325824d165219b4c263db77578d3c974c78665b4334981402ae745a32c744f2c05ccb4fd0d6d502a24a20c28fad5044c0cba8b2940ba9e7afbc4929ef4dfcfa9efeb99dc1ed7746ce4c657c4a79a3934410ca0e535b466c715edaaa54712abbebcbe3b65b6cdfcb9ac4a0f739b701d5b87c36386e469b55f3d8438dd9f66f6bd106346694f06860714e43cf0a149ad29b699765ca648aead91084dfe4d9886cf2d89e0a7ae9a8a21b4fe9b9a269e3bdd2607559c999cc32c79b3d63437071447bb9932459d10aba7dadae278356a21f5be80d267e21a446293af7fa4696950e022ff8b235581e612f7ec6813228f65e92be5e82ab5ee119ca817bb3fb3db45d1f5047b2bfa5f8375b1e9b2721aa9df1ab47a69e5de84ecfb650fc27bbd00be37b8471a83a971eb86d5956a7f5c716b331438cc803092b7bb9da9a42fae91bb7bbeba7159c856111bce1fbc7ea5ce5921b79dc0de39e23a7529a75e0cecb15a843b142a406ec62c9118360be6dbaa400c0b67af1bd19f08b520c872e361631306b5275f769d43414ef89fba815eff4fe8ea05562f785ec6bf401bfc78f71428b00b878605f1c125b2f4661ac5f6484cda4d89d656f875644e0f811105a5b5ab72da54dedf53ce17600cc06f109bc6bb4eb9ca7de58cfa560237efc866466beca57bddc37fcfaa48266e9c7557b05c81a370a3766f56502742131fe61e10eb0be8b99f7a9c8babebb6092bb089d97e4a7508bef67ebb16772ec18001de1847488e7618333d639c9c01ecce08f57b1f6418a77e4b1f63d481c255597adb9fad0db4ee23223ad5c66a6a787c39b10e53e1af1c13cee1932cf575f013a0fd38a600a6e2e12169806c6b4cee1e2d0ac453ce5b9cdf035a70fb8daa3533c1271059d6ae6a6732af8b6191ddc1b91ff14ebc016b987ca6e980221908ef09f55db2fd00cc2d017a1cd5b3f02aece406e391f1951de9c0f1774721d865439c4637ca00bc39a545d89acff777f2fc15e16a3b148dcaeda4a1818636255495bb2b05a00fa63999962037323ff73dabea335f4a36e999506ce4b406e8bfbf4270f47b8d639c2592e268c2c82b00f8009ef1d2995c462509424425916c9e6e68028f2280927bb533f89e62261157ec1691cc985830bbc886f415cddb08c8343afe27d98678ea64eb568dacf5338267d0bf6a836d9be91f101fa2905008bba8973db6a00b0a518cfedaea06bf8719a5d6cbf89542c07d81631652465a11aed1478983af56b436911819e8fc8014b17a6914bd4fb3988debfc1e55d9138a0b79e5babca1c49746cb528c4002df3a6b39b6c851f1a224b85263914e542c951c62d71ce9ec13290abde3da2296dad1567e24306d9b84194e390347c243d87cb1d9d240a902140af2fefe066748c430b910fe9dbcabf21ad6e59e358b6be6e2a32d542e9a9d65a819735bca549e87c3466b59b12f122a5bf0b9c7107816d6afb78fd067d7f20cd51b51b07349da96dc335889f8d2963b06238883db3a92bad7349ed3989eee5b22a1c98b8abcf3e84ddc4faf8e7780e2196eb74ff3c554238583dd69390412e0831caedb0dd269b26d4251264e218c2855119ce35e2fcef52b095aba3dd1041210460f71a45d1d6886790b32db39f9a2e965de6615ee317e60ba1029842ee50a7b6f2d6bc9b05b6dc9eda45be26a37ca8e4a019626899a3bb56d5a223c922099a8a3c27ca70291356ad9fc3a0e2e8a285a770718639c78371e7bc6b71c5d940e6a4b9f1572a0fb1c579fe589b7eea166783a7476870543a5b6caf720ebeb529816f5e6083227ab5d7a0acf02cac62397fe522ec74a0b07cf112418cb42a20eee6f3b8ba6984d98a4e904311a3b605638e9120a2b7509eb63832ec2840caa6735345550fbaf2286d4e5733f8662c7789201d99a11f4ebb17156a3e64bdadfbb380c3d5c86e5e27eda1042b4aac68953415bc2351b9134990594f1a0cd2cb5c7f7c4dcb3a0be5f81800b97701f160c7e7612221764f6820900e76408623d187a1a30ea51f84da9126b36ecb31a9c7e8bc9c212683d32c7eef8caeecec1749cf0e4f244fdaaf330886192e4b9747c5957a312abb0bcc14ec1dbd9dbb44e3300d24849c0b204337b18eb00836fdde5e6e68bb5113083f2c217fec32024213afcae0c5b29356dbff0b8cc81827311be40eab7b702b827db86c904d9095c6f30fc67754835325d78ae36d4e1779a2f0cdedee110176ed0e33b914953d79be4ff193ae69004a7664bac0912aa961f3111cee9ecd6c002dcd769f9ebdde12745fad7bbb6dd6c4f628ba81fa06b435d8fcc2bab96b4f2c9875a1126b41b1352072ece932466f5d391dc67b04e9ad54088aa1b7778f41d77b9e8bab2bca85c8f1724163d8564683284e2d7480e5fc0eaf0d1edacb79a9643c08695cf508280f1f51f63263efdc398c35927d9786260515172ec8676470283c1f1c58dc3ef20cd623cbd6a4b7862183fbd1784c0e808eebbc5db1cbb5452b065a35f4f3519e0cca868716b37f303ed85a81324204bed47576944f98dcc7466b62235834c2e30a7bca22fb7434b54274ec5a8c9541068778509c9e7eb69ac6b33eeed5af071f4a230f0c973f2f041e55a187c6ba462cc0243b5b81c71a41acf147f9809d58494331a2919781f358219e796fed5e86ec64ca7df12727370ad7ab9823553ce4986052907dca548aa69633b18c4f3bfd81d50ae89105f0d9f507a39ac9309909204dd0cc3e4279f4bcba63efb8c01fffba8a9a10d09d3fb50ae788260e099d897af4e4dbaae3eb47cc7b2c3d1e44c1abf5c4eb0618e52b9e76ea0c974742a86998eb24658e336082a06d68186f8d93d71ef84ec5f452a171243594875d63ea6684dcc0b10f44414e200add624c378bf4e0ba8fa3aa7b6d6b6d89119779a005e3c15e891e30269d218e11c142534a5a76e9d06cda843e5503e0aee9d8694247bd792593244ec0ad3406a5d0ff1064ff8f4cb0ae80c563c0c8ac64ad25c4be48e925bda086662563a5c03e0a47d94335b540364469dea20674b598ebfa5f79797d8f407027869510157cd907d2788584a18f46d343dc4184a0dba002222d09571ddd6cc2f840b8c9bb27480f210a803acd14b89bdee539b1f3dc07847cecb5060a7fbb5e5a743d09ac5c76bbc3d8565e242435aaf5fcf6d253172b9a69b59e22dbcccf2df9eb7c111d383f8a4347fa10be1f5471427a8e006a5ba9007ae36ecf4b4c5d50c81ff924bc0fc8bf9187c2900ca35554b1d5008a422a05852781887488f78bf3a289c654b0efa8f5d163ba081ddf657027436728d79b4085f046d991343c1b9f9e78f44233e1a6e830e478bd424f82d4c58e5a3fb6790ca6abbecdb51f9b9c6a2a334abc901acf76ea5303b3cb883997f457189978cd07bc4c442ab5c09c68cc147168d8ff9a6cf6afc44a450b47c0b4a880518b4434149c96bafa37f21bfaff5933c4cc2437e199caa81189eba414048d716af32508adde658b60b1371d25e36b6ec14f1478c169c3605ac5884c4749f93713e5119adf3ebb76c610df25d1385339ef203b535aea918405e05deab3920b9799dbd39eaa2ac011bb1a02b311f1af11d42047545b8b83d844061ead15a08c52cb99de9b3bc86e4cb0fed13d15b510eec402e409583a440142b294e4d269ba97ce6260ffc204427b52285ec002ece9cc2153964eadf8068e637ffffe191977da1079fa9e4bc018bbe86ccab42e68ecd8cd96a10a5384185f7141bf9b351362182161f9bc38d1c13cd5de2a885097c780d4631914e7156bd1a03d11ff5ccccc41321c67860ec5cea50ccc46d193c3afcfa85aff237a2dd631547e5c4a18368c60265be0aeb6313b6386c3ae7eacbdab5a821760b0cd06040d5e07198263a6852b18ab4b9ae154e37412ef1b661053915baf36b2398fc1deadc056633fe9719d13d56f6cfa2a738f84f5d1d20f5bd95d2b87445b5bc76c9814f126bb21a1cb116d7049bcff59bd117e6532d23261c73ea653ae0dbde37109fdfb60705c18983646ec2824f0ba47c4f6097be94919d745fa09ef448983f8eafbd6464bfd6e19ff02f239a877312d334279e226698834fedabacc49ccdb0537f2b89412c26997b658908873dd82da6d029728c189708cd3f17d84aaf4c67f8c94acb980a2d76d55cdd66700a6123a579da28faa012cac448f33f0dc2489d14c707428cc18f19e3899a6a8750a17d447061ee76031e6f246b8bfed106b520146b62bf861848d0fcd95c530bba72f38baf4ea18c4841462eb5c8887295cc975f22f141e9fe3324ce0d81a57e1d692ac1c92fceb01ba6f3e5bbe0a47a01f92cd091c908bc64d5ba04639d677ec9e9e0be5c9ca087c25e8c6da1f855ef79b252230d188ce21c579e38c6d777969d9e7d77118d3cbb0644889531f95f73fb2c4c48ea2a247b408ed13ece148ca8e8b83eee7096bbf4bb0a21388262ab5e425f1f0659aceadcc746752623c882e3e477ccd7512e646dde546f8460c7174d64899d661c403688698e93a1b37ded316179c58caf2376143f864d8c4e7cc3a0499f29868fc636a8d69950d629322f25c33b57c95d14f34bb1b0f8d579b93b17ab6104c8a98e14570ef4a7ece820896fd47c6d03b2625531f03e9134704e322d28423f7c69e91f463bb522ef899674cf0df291d3bd9c2bd495ecf4fe2de834cfb19a6946fde4a2a8b7f463b85b229e9a02b78df0ac2ee58b94da4867416453b0d5f314b797f69a1ef5115095b39a294a3e1c155b0ec7a1ac39f03588227f5cf0f2772f2dd9f134e522e0d36aa4a78d3c2d9958c04265c39a6d7acedfc08ca0bef173aef91868d419e13288e7d585d209a33d101e6ddb2e934c0f52f26ea2c53a683ddfeca9826f04d79a733612343368dc5765123635836f7292205107f76d97e8d2b7b852ef0e57e4a90ee123c13083ca8fe83263b1d02e58e4ec0713118b889ff3ad4b9ef396a664d7101440847dd00620d1c83a6b5b757851d1ea2dd742e7b4d7564534f05d0749fab2fa355bf2287bda357a87068686a3ce85583fa61d54f412540aadbda44fa2c727892e31f2fb1450f160c07836dba8d86068fc682a4cfba00a0db4863a36dc85195ec33c28ebeda24462682a0900fe0923d45dc9bad081b3170161d0f77c4de555381532403e7fad998131180ddfa640b70d3c2ac2860fe1dba15ba53bcaf7336340e37404413726aceec4cf8a8d55ce6dbd88e9c5fc5eafa8a5a3d0e1aa2e354b5d96558d338f0f3e7f9ac45af0c5d6a6e6af1291a79aff282f3815dc553347feab65eb898f566e7012ff642b4ad4b0056f2ab11d299ecaf7ea2d0b4ddaa2061a6b6cc63b97ee74bdbe5cab9eb61209274b1f26c5a69f5da16903a559b456711a6b4d3b3c8f5040b3d491ef4d6b6f01d935a6747e16af8a469ec662b198ea4e415d1346513342e73a455cc6d08b9e19d69d04b3515ac1d385269d083555d35d8ba2ad32121d2190eedc23a71ef453519fdb5bc7180f0118d1b357bb3007b5f2a6176ddc34c8d245b495f42b6d2ba79f89f96280dd193bbae5246daf03d4c841fa5e68cd9a66f408594d34d029458e8524b7e9b335d4a888abba195c9a286bd0a9279c10decad48f1f13a354424795afaa8dce1c3d60f5af15ae041ad6cde612c8e5ad9e7651506917045897507735255723aebc7069c5d502980a1bd870c3da87eda8fcbc86febb83d52409ae064298439aa65b66b0a2ebc5c222a09b747b08916bea82ce1395a8156f80f05ba8a6df96e319b491ca5a566eda1568c308637f6818d8cdec931596c19dec5391f5b3918234597152c6b5e052bdbea3c720ed53bb3c1a3624ca8e678a162c324b18f6b97b72a22dcc5ab8f4d1a8136ce0b8b5eafc00ebf2408173218b6e59d5276952b29d242f456aa34112e75f2e14451f8d51cfc96fad71a4aaf2bceea2432c1ca83b52a542b95e752cd370a998452a381402fa1c83b06f70dbbaec07eff4195ff373151691f5e630b7a62532dc9bf8304f3f3e13ddf339d3b09ce79f8be232205961faf0900a98a254d6423c384336a50d7f18f89a26a3b9a7c60d1cf2d28845779f6215c3304a83d24d8c35863da1de17097dd7fba869666e3acab6cbef2dfcbbc15e1f9e567d87267d2010519ccca3a015fd0a65bbd67717d9560d60f954aa6fe8e4184a4ada215c31203870ee758adca65f27c7d1bf422ddab119c0a067a86b73701314c0e897630710d4c13929a1d58ca89fa3cd257dcd573f749178279270a7f86f023df8994f23b4153be4a03c9208aa7a5a72146901099e32db45aa04b64a51c69bf3c8288a614dd626ac9f3aac2083f82eeb21f6b17e8fc116410930bc4a29560f765f12e70355ff536f24ea19a99e2c144b3b786fe8b404a1cff2a56212c3ce2be900a368c2439f4a83ef2ff70aaf0cd9613164cb76848a5ff93e6e30acdbe21c391a712ae3a059f99303d916771ea07f06ace68471d795cf9aeda8269709bd8443011c9c46124c67a521102289205200b222d29661bb0365b8960435ec1279e7ebed3cdfef8ad4ea852abd31a73aa7e3ab2fbbe5dc5cd2e440243b9d85375b43480a01607409f1fe62737ce509908b7c99a3a97ebaf728cb8940e6df97ae9bb57b857d88171b1fc9087920196ee0455bc36f08e0276305ded0b9b55ceae55a464e9aa125078eb1672e6a87e5b182c344d81c35dd0aa807aa5518eba0455507c29c16b3da0d9f1392d97f52713318b18c9e9a520fbe66ece0707578f9004f2960904281d14b19bf40aeef0ebda64c26e125c60024a90d14d5b40541aa5031536854363cf78aa37a8240194ea581e31fadf4315e4e71c6128d6b8c8ddb47c5abf67eff156a2eb17df07faff0d7f0542b179cd846ae4ba884fad0080161406dedccc3e9fba21371e3522c9de7bef2da54c49a62403ad04dc040f05446cb0cdf66c8fb6757bd8897b0d773a72b597215aed897adadc243d3dbf757bacc4e720e8934ac2357243e05f51536edb13b7de1eaec22640b168e4405b7a4eed82d11e50d80dbf04b2cabea2a38b6a3172245f5e52caea1920df052ee65de4c3bc2481f25773ce693d45e908d374188ddeaa34faa3d168f49546b7d1675a77c38e8f0bc39e7aecd23aeba9af28abaa2635e546c32baa82fa8b6bae8efed5f26fc630c71c45a29eca288aca18405d4f5114f52ed4c364da0b19b4bfaaaa0a7baba585f44f0712e9ad4b6b79128944fa4b6b21690fcadcb0e323fbeb71e0684435eb4799d6616ffd855d570cb5d1f08aae08024b4b97f2bddeee65ee0afce8ce4ff3a7f9e3fd67add669566a07799147f17dc9b2a73d9d4e273f9da0cd129d4e4bc4414e822c9a978321b641a753fc15ea929c54bf0946044d0923c663572808dad0bc997eca0b0a7f7ef54bc435f27d0ad5557a797aae8d90e7c27eabe50494a8a484b9a660d0b9bdd6b852da3bb255aa6f9dceb3b2526aff1231d7ff3244fde3cbde80bc191a26ca8c8522d1c373e3bdedbedceeeeeeeefeeeeeee1edd06c6b5b315eb750eac1793c5ab2b5655fdc478542e488b17dbb72c6b311e73ce4aa380164487b9fe110684b97eca0adda7fe61f319e3bf2e8c0733d7e0a761b51f3330d77f613ca84d06e61ae3b11b0fed18b8e6c5503d0eb434ea6fe6a4b4bad182ea601b2365e45ccfc3e75c1f8027b4aaaaea75aaaaaa369a576d67a3f66ec5433b6a5100cb4b15f46bb8f6fcd57098b3361dccb5d0834259a17173ae82105f74403b5ae15378590f6b1cd0fe8ebe8c41ab875f9a0fe7c6d8dddd1e638cd1dd3fba8cb1bd713045eb629eaf3b650ef2f3af1816c3d5fa2d1e3ace5caabcbd9b85f5d8a62951a93a5f2ce3b307b4217f33bf8b39f71724d07ede615dc2a6f07b64a4dfd63577bfec7e7e330d17de60080441f50d7d800c9afa869028a9706edd7b4f46e66dbfe0a00d8e27d35f45ed7e17b295196e3aac962b656f3a98eb9b161f0a9f6f186e3698e35e8ed071af8abf60bea715d35eed30faefe78fb418a61b0765e6cf6dfe807637f1e12886736100d774ef0217f32e259851bf84419bb9f9f05fc6a0d4f6aaaaaaaeb74824faaf8e3ed374a0f42d4a233da5943ea591364afd68f410f3813df53830cbdefacc7a4cebaeb79eb22e8aaaac2d86b96a9b6ced456901b082428e991b0dafc85360bda6429bb91ab48bea42a05cd029d403540aea0417130c30c090734eac0653e816d4092a0595826a41a5a05b502de00728537d445044504bb13e222849f0583059683c79eb63359246d2484c2693c96432994c2693c96432994c2693c96432994c2693c96432994c549ba8363d2c0534f840c7996d9579f57541de6bce498b6877438b6811458b285a44d1228a1651b488ea23b4e82fad87d252e99fe3686e2ae4793347a89c0c01262c58b43b1c397204e3416e77479f3ef8e0c312aaa6aeedeeee28df83b24bdddeedded163cb17af86533235bdddbb7a148581b7b77bf7e370d3312ce83fd07dcf8fb8755d105e8f6b1ccba6a462e760592421926357d64247a496192d2e540866a920a987a1caf249c5279549e5c2a8606e51718b8a45251bcd1c6eb8e10631a8a832b2689c443368ba606dbaa8680635151c1c1c9ef182be933dbf99ec8ba00d33c7fd974a34a3827619fbf0122acb36cadc661ad74cebf685ac36d663543bb3966b7703d71a3d60ed8a5497bad5829566d680156e307b68d1cf9830a9d98f1e62b93ee3a9d95b61646f0d0d61a5d23a7a8b74655a571a4d2e0c7e0da3eb2d48311fd9c30c7ef696b57da66518d6c39a9161d715c33167837d7809d774a3273d0da3a7cfcf3e2f47cbf3f31156a6d530cabec507fd8caf2cfb87f5c89e3e0eb768af8e461b49a31a0da3cf7e622f5c9fbdc47a8cb612ef50e793345ec23e5868e73b40a3dfe19a8ce7e5b0de7d98180cf0adb75c3ed34cc07ac0b73618e6d66a1ff0af4c2bc15cdbcb7434e1ef20aea1c16a20ae81ffc22e71aa170cd7670f7b589ffdc34645d0c67a13aaf5d613a0e87a33d637a1a3ef6f816b073fd3ba42ec85511dbd45b5ab9eaad42784fa86863042b50070952e1a50d0fe97a701868667b05acbd045a3aac5513a0dde47a3b366ce7a0c6e3a345d006ac73e9d09ddac56e0a3c07a311d1d80d0ce15159608eb7084273b394510209473b10a5c7f82a0832c39dcd110592f8a8a8a728a9cc09353438626f22011139e7c71ca29322acae9c721471e814e2229b8e0c788500e9122720a50912e4290104d5def7d2ec6c8c115ca511efc1f14601b980284f051a9307a4d122acc79efbddd7e519e94fa4f66699eccee7737f3f5e3f63b0cd46bab8108dc8d62c9c20a030820f4e4ecff7839560a73db3f45db222bfb43f65f96d66414f4c78c3cf4559ecd916f848704e4c8ad06cfe6d4f0adc603e2cfed062764885b0db9d5f02d869c97b3dffd0c43a0ccbed4366ab49274a040b61fcced6756d0eeeb7e3f4187ec43baaf4a13590e2c78394f09b483a9fc9dce05537b081a03dafd338780bbc8a8a808cd8e1078729ca8d16371a830083eec68456e604112e4b38a5e452f22afe43c56a1bb5a23e204f5f38914e9974f6d3b45fa6f28b24361346f869f99233b435e666666666666666666ce89a5a902f545145a00e5406d2b10f40b888c1070114495a028188f143a2ab76e3120bea88fa8c749bda98f088825d5c8a91aa03e220f905183280aa268ae171ad0f8dd2cc1cc6aeb70a0a630379fd270600db2522e25e6a8c9e3050b7d933ed75055556dbb3e2f44a04f0ae92595dfda46421042471e15f50d0191a502d1d8a1fc38dcdd3d1fce9fd1a24d0cc239a5bea11f943092fa867a882a10579649ddf733341d5c5c5c5c5c5c5c9e8f961933fc67b468dddcbc5b4aa2605a2efa7efeab147c4a836f5114653d46bd456157900721c4fec1fd9196c2ab62690f0b193bd0adbd31f6b204066a61ab05bddddd53582f4bd8dded678a9aff74984f04879c39e79c0f356a9bd063640897d7590beba58c1725d057b191efadd321833936c2dc7b1a46286faeed15d6eb2add056dcb7a311d57a9fed632a1b41e3e59bb1a3b612186c2dcf2c72cd08627cd92613cfa338c472625c643525bbbd9c97c3e3989f4159f5ae03a370e7a33fed833e62ea5c4b61af3e753d95b332eec87d291564d226a6eb3d2ae96efe612f1897a8a4fdad6b9d14a73197d47399b8fc3d6a4b4bdc2dc17cc6161ce37d3b0c781d72f9090ae51846cd53609cbf85b1208c7356fe3a0d168d41344ebeec6edd81e29b4e3d30ee69c6af479f81cfa12e3b17067352755823e1122d4a2de6aaa1999ac829cf359a940a88d93dbc7f0d0ddb141cc759c3f07710df5d97c50aa5ba94e24a4b91d4002d3678897c38b1ae0c442517ba5a8dd5f01d3b399fd3a2f07974e4089a82d44eddda19f18b5dfb718de4c0d68f7aed8bca7c3fe4ba89299a4bb7b576414942bd5399f5b87ab3674825ca161aef9497f4b2cb0a2eadd6d33bfbb7aa08c6fa7239ecde41a25706ef1046d7c044fc6df9928f1fc6131741628e3a72c57e2c981aaff6c826e1cc1293e51fddf8b4b54ff7844f5f6676c7fb1788a4a98f3270941e1cf397bde8c9f4e5891c7e0e973f4a550315a64f801f781ec07e19a3945058ba8a0d09b820600e02b10cbfe66e19a3745103c7c8493700df64af8a062df5ca342c530ec29092af62e18132c157b18ae1940c5fec27860d7f516c6e38a522dcb4ac208d5caa25a4a0c55eb61b866562b09263f9fcdcba1aea8948ea113f4f0ed8e4410d5afa83e844495ea53aa0f2d09aa6e85ab020a9f9cfef9281432aca8f05de090097ea8b08aa1237a7819c50c5c806da543d34f8217e143c500957f4d40778acadf3e49882a87d12204698b0f0cd12202dab9b40841da826b49d29224dba9f14944507f2b13a2d2867a496d5bc4e2d9c8ebe57835cef72ad0466e9168ebe68c44dda83a9157f164e2c72936a8118ba21a1f08ca442650260ada45a2b842449d57a9f1671374a6a00aa297634b3ba831725163c4a2468fcf9a8d37137f85de4cfcd5aa9ae58076f16314aee9688aa4704d0dfcf8718a0c3112311785b9f8381ca518b48b44b1886b8862f7a5527ca14824a42b49081a896afc98ed6c08961ba6a0cd0065726057efed07730cb71b8ac2c3f184f214d68b89f10895c29cd4614ecaa7e4bf9cee3ae116842402da5b4fe922e6e46759d0ee2b6908dabd2b1c846bb8c61fdad427235f4a292517557e7783f366644743002f077cf9cd700473ceaa8823c81d1eca881c7e606187c88823474e469c7c6041071e238ef8c103558cf8e1c929a38a114d7858c841c808273db0e0811e26b2b89460a88bd737c4044fede86349a8baa0a3fa8692ec5c3ed01920b0aaa0334ca0023aa1b860403329ac312865453594440a122a065494d40a0a7ad5379484074f2855df5012309ea05edf501224548e893963381b434b00757d434bfc84418bf0a2fadbf04fe146c7ae0017e341bdbcaae7dcdddddd5d7361074bdca9f738e9c29ccf29b47a3bf4c282610e3e0ee7ec2e33f60284d188f56262accb06cbfec9bc15f60da011e0ddd83f8167264461ed7a61dcba1f95c35aa89ab116bcfaf6de4c1753b91aab4d4873357e8dfd965d63b7491201bda161ae3fcba225fb0f3d3f58c02e788200bf9983414f1034c052839f2c64fc507102240421112c82538a80b218018a11b8a6ebfe24c8d881108be6f37282425c132310bf6429a38cccd1e463836562a0ccfb257ee89179df8df64d487c1b662d410d3073b7303894e06c9f42080a14274e9c043971d2a44913a0264d7e7e7eca60d24e7aef0d29f9a970eb6c60c8da1b52b2a416611c20ef890a274c05871414a23494fa9ed4fd86519a803658f2d344a6eee28052aa25507e9a38b9aa4dc9e573317d620938e5c4350dbda01d4d55c24e5e0e7f6a09e9a7769357c542325d962aedac380cb549f94bfccf9160522a0aa2a6288aa2a00fb30d50026a488a25345a7d4344b0a062f50d49812489d902eff1017a6f8804427589a86fe88465b10b423882d76894c54ce30a77576ecd6426b56eae2531488009b95e5728fced7a59f6d95b188f2c5219b30b423882d768748d62a85d062bac85aecd1c84ef3d2a5478360d142dce5c7c07caf097465b57a2d41b685e9bf4e9a2efa22adb341dcced4e96f94e16bf2fbcf098b3616b89396605c0c91a8d21baff485bd07d48f466ded3c2a29aa226355b93d2a35fb088b7ccbb1aa03176473963ecee28e3c3b809990c35f0989a1dfd751671bba1ccbd8ff38180963e26ca3ec25c6cb9c1bc17d235be0763a3c27f1d4df4878cb9a073557f31f04a942b254b5e22bbbb5b6481ee727733776fdcee8dbcccdd71b7d79b87b90c073c1bcadda5cbed6a8365200603941c58587bb48c1de876866fc6ddf9cdecc31bfa3967fb66b65acefb6267afe31111f817c3959999999999f93167ef21b9400d12b0823c995c74ee7951970d93aa3430a9cd40e5e9ecd4a46036501906a6e445b0c0964a302ec8102314a5e43c5c73a45461a908b4db9d51af1119f018dde743c263747f93bed70da9350cd9ae15f868f78d36f4c9f0773035ff387e51bb1ef738fee54ea7eeeeeeeee3ab87f529714de4187d29002184998d4a5d4a301a035866cb4a258cd2292ee078dc0158a8fcd0725ea1eee3783774ec8038decc7e8eae05cb6fdecc7638aa022a3ffc01a10b154e99bf23886f7408ce8e924be9f2d853899e73faf4e9c365ddf73964d97d3b5059fa4a67ef37b32eb7f8da89625ec494980f311fb4ca870152e5c32fc5adc41c941b8ce6639997f70a9bb78028657422b4b8dd171ce2056f8cb0c361fbc1e802ebc3fa049c4f1fd4dd638c4eb90b91313ae53142eaa1c72f519b4bd992e59c326edc32d09157648801c77134343737ad843e717f4c0c33d8e8747042445264f4e6e9235d7c7dbdbd63a15def740f12ecbb2ea5948bc1f0acd4b8b910bacbbcbbcbccbbbbccbbfcbccbcb4378b2a574e91dafebc9ecbb5098d2f793591b6a436803b7669c53ce1cd7de939910feb03b7ee3373a82d8b0034208a1735c630372f0444fc886a0dd0dce0915be8e135e8ed7833975f629d1deb135b8cb8eb10f4d498a9ab0e90591f0e8ec8295246f695f5005b163f4e8fd3a8efba13c611713f8e75f43cac8cccccccc2ca3bf187eafc4f4e2913ca0fcd637e0fd42b83dfcd6ba98fa989b5b80e943f7bb1a2d787d6f86ab5bb103c2ee6eadbddb77b2ec86eeeededdedee1ee5e41578b7bd21dd79055ede1b5dd3eedd30ba3ff727b91b76c730a7ad1483eec7f480ee47777f0168eddeb0e2972fe82e04d294524acd39a947a23419147068dbd2bbbba1dfc06f00b988436f7fbcdb446055551977f764b231345913743fd3c1332109cbb0bd7a4fa09470a0501f3f1a8dee76772fa5944649cd39a9f742a23a4d06051c55863e1918c8a7a1b6b969d5a37fb7c5702ffdae79839dddadefb8767c37e69028b11e5c63ec000cd80b5dbb6155551993289af738f7f6b9448fbfb4981b2122fecdb016621de580eed3c05289d20ceb412da7d88589eb875ef50dfd1ca1557d433f455438f811a20c4aeb1bfad9e1e2a2892c2d3481a5899d21acee9a863b98e30dbec37e0fbe079b7985f71dbf96b337de7f57dfccebad9b99b5fa98396382eef2635f120fceb97b3bf172a06057e8f75fd3abc0b3a1814174dcddddfd3708733e03f60405b2fd602e880edbd021d0c6df0ff4e548298220824f4e47eb15d3ac8dde0c63200873fe5916b41b05798e66f4727096dba8f48d3864b56444230000005315000028100a8703e29058281285da30fc14800d758e42764c1a4b84590ec338888228861000083100006000000619830c6d0500fca2db39ec721bf411faa0b8bb69aaa87b6bc3a99e4699d70facadc8b4616f7113492b7503dd3da74431268af1c661f8d3e1bae4c43b751c1669c33c4243dc01b7f53a5a4b8eef2dc2acc9a57c4e103f1f2389a74ee8d881fbd23a19a4024e6881c96a62da8d1069ffa56c541cbb67bbe5b15378a45f0b1d946d860fb8092eb589ad785ff5e47f5de907924aad70adb3de209e804ebc2052eb04ba6587c48af12280f30d2233134af76b38a7ff91d1c9f69e384f096b9478e9e7d4d4444ef54e810a7e3723f7adbd69dbca545c16685225dc3f51811fd48d8155d3cb4e89678c0260c3cc88861ef347314246c69c4dd6ca6c2460df564b1c0012648b15dd1a8dc38a4796864649c0881ebad56f02d7b7cd72f7b511453e4a3988b912975d8d67c6c2e28cc0c5f0b402608eb82acdc8f4b7c5bc01c2ee479cc9e60872eeb8f26b1b5ac2014680f2d2ebbe31b5e4a4a08ff0a2c97f4e563e3ecabb21869f3237294c2af8088dda475ea5e0b8302c738e5a8ac5eaadd4e263e4cd2c8047ca3f752b66ec492827801c637adff41981671570f19828fe8ffb96691be071ca394b2c2059b9cd611e8f3ec496fb587777af4f14082b01c9935414ff25ff5598f64ce5fc7bd6b345f944286dc84aac04144657430c9168328910150a7da522d937b67b3036c089673fb74eafd9ece319a6a35f417622137095c5cdd8af787d9c6dac095e0b4641b493d36180c475b6ec156e3036e5a9333fdd33168e7e25978fbe535fc3065ae9d035d90c10845c5965f562e8e69e2bf4c091789ba4d47d05cd21a68122b7ceb1c4ce0445c7544a64786d351a886f401531d5a62bdfef52130c76b5cbfb5398268045b60b4ad559caca55b57f5823273c18b79885fc311a408472733c2a01b4f20e4680b1840d7bf592b93af767440ad3dc76f7c772af41b38a91ecf541e44e0dda555bbeb760e660bed4fe9ee8a3abedf3f1bf9751df7500cb758df1b9121b3d10eb901fc2dc46cdd516659824c7b4b8a7d5fc0f9c75a2b02c7de3ffe894cd90de0b05dc3ce9608e39b5dba3cf66fbd081dc1064004db9e494714780c142c649cd65f4e4c461a79b91a0bf6394d379017473acd2bf28ba393238ba2e762a7a9e6977a72cc71f173c0bfd18a2edb00789477aa27db4780282c8aa484b7fd40aabdf2de4b24c7958dc12390c9b57a280cca9766ae27e04287d5f5832e5fd62ca2aff7a7cd4957426339fc3cc4033693ce6cdda24a18ca363d4251091325f62fd8bb931d7c4b7cda91c137b39d37f4079c06d6ac89f3cdaa757f85ee9270e226c4673180377f986cf3647d22c9102c0040516e93d1e74c10693d3bfc1b4f94aaac2f26d5965066951ee26e74ded6a29740d9466a6ddc4fccbb9994bb09b50fafcc4098dd6835aa0825950ce627b2334466a15d155bb1d48e9e6264f68a00eb92bb811e77041df16ebe38d4ee5490061c24b5311f6a30feecb655a5c33de247ec88f974f37f7d602f3cf0edad7aac3fcd3530733dcf55a2894fd3e495ee8f30b7a02421fff222bade8a874ee0afb507a827011a18d9063b46b1e9ac8e3a3318b8392004f6a7a5b3e9072efe219ea434a8f0931f4f81010b90be1d8fbef757437d5ac17eaecf2d421e4b4e70a19cc812336b88fce22022c90d5fb48810576792e8fd29d1a4310a0de300072b58d140d4b2793b2f942d1543f4eda42f121854302fcda1f19a6b5f38ece4660db02657d226d3aab5f8b3f7e9183a97d431c0efa548f6c8a6fc3baada33f93b899280ce287aca4eb51560d2c7680659d41711358c7fc8ba7d1a3b4ea8f1ba0b003e9e4246141ae6fc3cab86f5c3fd090f4888d39ca6fbe9b95dfe1fcccfdf1ea0ab5d86e17642d4c28b91b6e16defefcb0a387d84001990e7e901ca1c1b673902e0294d0b8b54c2a6674df52678571fa3954998a58fcdc80cedda227690c64307ad36e6faca97080dc9b7a20d2249ec0b52be3eeab07bb1fe9d39f8203a8e0901974b352f51536769bbe9af50340101390deee8e4dfd733c96a4e41010be774933550600f1187a74cddfa11b04daec945cff457857b98e0b7e810ca8600d7eddbbfebca2decb553fb1ca27cc42e3de64ab345695fc4e4300ebc714911061500214c130118f350ad35f4efb5b8bb9a5607fdb69af73ecdad46397c858173f4d8b76942230f63982deaf8f006868ff04e4d6bfc7292c75f4c6bf12dc02120df3f6b1a319bccd953e0e89a20405b35e61cfeb9b2d12072e8a032e751d4fa807211569477b30d9f042cdbf8b7492dd06c92d83119144ed52a77eccb3105d268baae0436b048f779f243c130174971a1593c45b7ae0ba69c4862cf1d8a5c891213a963d189d8ba7979b6d188b10a9311ce84bcb0c4a722147ef930a99efa7e811daa857fe3cc2dee922fdaa058a4633d886f5edaa70bc01b19289f6a8056c9220cc0cfa185b00783e6a6e0b74e9db6e06a56cd5204c8067c2a8c66b183001a57cf65cb7cdbcc7a68f1f0278cd416a57983d4aae02d3c145a6734355bf2c8145cb041b2a4dca4f3725b2aac207ab7257264804e26541b11fb3c0314ecab2a3ff4db83358debe7ec5c3a929975500b57c0538789350a9a35e118d75c88ecee2379c015c878e5714b997922a39935b2b691a8e5ee3f6b292442e704daa10bebb63f3c62e6a856e377ebbb542dff42854dda2aadca71885b6c2731fbc5e942f859101baf4154d0f8bf8e454a6e14e24da40b095b284d8df4f57cc20fb6b3958cb29e095af57d596ce6f16ceb0feeb6b6b7d1e64454e610d653eb6569441742284409811b4bd10f6256f0ac68b92671943f4ed6f9cbaff92fcfc146b7c69baf4dca7a11ab0dd6ef7a5befb76f7e72d64c9864ed7513e75bd5ffe236dbfad3af029da50c9a0416c3d608fbf2ad566ed05dc7590d21fe67e8c351537503dfa13ef1f0a3e44244577a5bd6bee454ecce90165be2736991e7b24052166c17b0c04caf30305df4379510aa8d7e23289202f6ad7f1aba9481568cc82d7c8aec34250745c4c54f81019291f91aadff1163b4a856038eec0f636c90fa19bff133fe53d45a89139b0e065ac361c8f58a7a8d89c7276e0dcc507367b8b9281f5017017a6599606dbd0d181b71d72185a3b21daf46b73d52db88cea842d1cf94cae0ae43ac2a7b4769cb9f18adf0283bddc976412b2ecf1364f83154c636ae5ced4a72e2bbf427748dc940f6bbf505423bd7754e3d45e10e8932cf3e8ce66fe620b26c072d42ff5f1707be207e533c4833b24d175924d0f3bb2efd711536ffca6038b2f59e26e5161fa8edc20bace8e7a84022d613d5bf49cf3346cce9763504f4aef48cce8bc7b4feae5b793e7e17c29bcd9ac69b9c9f58e2a8507c3c0c39bd7b6229d555aa5ef38762531641658215bb520023e66af4d82f69f1e0bfb7a8b9e142ed2f39690986b2008001f751da33883a55a17bbd538df24603cbbc5027ac98503b9e7db7f6042f1e8a4f7fc1b3d425c4fc9ed450182922df047576490312bfdeb79a842be13ed221c5d12875ad1aba2203b3a859d3b230df8b9382860b646566946b0487ce451d02d37f6a4305569a0cb63aba976491545b288523f8f3cacbaddf361a55b19f7164f16e7d36a9ac76d0343175dff5f68568bbf41d2db82620b05b992969bcb2ff36cad7485319ee015decd9006cc734b2170983429b90f3248aeab3957cc4758b3810c7b7a8e58c85e47d9cef26bc16096dac93479874cc0661cfd632c9b02b1fc10dad9f0668e29b798bd959bbc94284796ecdaa0b41478aeb9d812245aa60a3638ba70845aedbf1e1cbdb4e3a8d6e6a886f64a62652989ba6d98133ebbd9fe0d98640762a018b11d0898fe6734e8bb59bbb0ec6602e29796cd8052f849181d79362cfb88e8c4efc8869fa5acccc3f72cb1112eb867b85bca7de746843208478acdb8fa438e33f0a7084ee33d4432d41157790969054272d1fc91f6904f47c954faac0fe68da7395ec037b8b9c1cb590ece3933f02fb081585feab1fca6763a416ce7f23af8bf860ecad886719ab9b5002ae5f3dba51632d12872b95ad015cd7a5cbc29db1af563b6064c6d1f96f2b7fa83baeabff5ccca54515120f4f3165c101814871c9774a68a17bd96c97cbde5d9127f19004202c002501f28d2eb9beda57cc6c44874aec83c0f63aa0d5d6c41865555e63ca8102470b5b8929d4ae00fd10714c05347aa36318642394a479f65b6bf7e145538547962ceb24ffb88249f77f09865be61fd891ddbeb5b5208af8f632b03e913b14fc537eb1447f76d6a4fa982d3a923d85a6b8e4c50891de9c2541530fc7225e5fa98e79ee484b2cc4cfbe95cb8b206d020dae738c140ad7ca67625d958cd2bddc795660ec6263b767fa89de88ebdd41e17a1a6de0cb08e27328e27a4f3f1584a552b5cedf993e4e5496967be2afbe6c9fd678f64ab026090a2fcf835a2509f7fe6294096e1ca1d779f319c42e8461619e54b069b536a3dd9526311a57e8f90fc201156da302602598ad646a62c1e58dad4cf68b95617b1351be94eda022fcc6c9200915cae4a9c8f89d939db38752c0d548bc1a7d21654cc8fe3011c65b7731b35bc91432dd4dc5d46a9032d7bbb1fc1d978aa73400b5a06ae8ab2146977401aa05af4a250d38ef304a89f808cd3699f21e169efb240cc1fec9f294d351c3a14e8863465bbf082440be0492ab7b1367d4a37dc3a8a7627c966c42e993d492eee6247389ba1a71d7a4d7730d6997207fd0fcce99edce9288a107a2b8c5e161484ba0702f60a0f3d9002890bbb1038a0e223ba83a97e6cf98505bdc9bd4bb713e1b72f62dbbc78a25499488986fc7638c3e67d3acc6154bdfe88e883415ed9ecb489840a1c4f07ffed2ebe883a8006afe3c2a7873711356ca4a71ecad67a040c7c9578c495f52d738471a31b58de0a7e3d0eae5674d3e39389c24d996438cfe7f4cc9a7fa7109edcadded9710be7b4e58ac4fe669ec16a13a5f02d267e4a282ea16a91cf9d7806a278049550908f9a888d6062117102fe4dace9d2c31d5755ac2e4a2e08de712a50a3580f456d820bb4984c60f7dfa5e654998476a84cb0d23b315f410ff5c5677db5f6a8f443c23a78b2d2a286228562bd7c38899e3bdf045fe9bb6af5736f57fd1ff5c2b66501661be2c8f28d2ad5609eb5f1a6f64faee7867adbc6aeb818efec690c7859c0b8c1ea647f44ee7c96983c750dd49d8081cac291f603c9ba714a74e7a129d5d953900a5f4852d6e45852556efff2d8e95f959bea5c7525d3a7b071e83b8a87fd82db67e7cb917428ade67dc6941dab6e27b39463bb5a194ed44158a92c3be279ee3df334093a454b11924c670f92a33c15550e9fe9e70fd8a21a8fc965b1638e569f4dd954302579b1588f08110757beaa50712340ab1037c8ac235ffc464317ffcc623133c0404bdf5e20aac23b30d80b6c4ce696f491154e4e47c966210879faff30aac2963f23065e50f128fd4385a9bdaa7d09d9db3c347f8c40430658181b419cf91b7c2ce5f2ca383d0f0d224233c0e0ce770b5ac9e71f712fa59b5b0547eddf2d64d22fa2275605ad0f062a89a51867699ff995a768d0dbd2cc69d3f38bb6e4939af59763ce4a85666273c05ee99445e557048411bb3a19c33cd45267b8285cc438d8d2a6b147c7300da026aa463df28f596bb5911dccee7f456bf78ec18ce820def694714eda3526918243a164031acfa70c5c303dd828e5189551cad7e451b41dae3bd4e377917ca2a95b4f92f3903c59e0b3053077565b2f588f865bb5556e8a8c1615d737712447b2f9723e57b2214893e2cefc2a5d8b20d78eb5c6a92fd23bf31c8e7407c254323dab6c880588166efe514c9bfab429a33a46f1cbd8e2c084ee8c24bfb9d1c9896a6473a3a686f0743b7d5ab378f098412acb8a016bc03f985dd3cde91f135b2305632d0f4687daae47b5255de545861eb3b20f5c40e0181c33dd2504b818352afd6bac1d28a681284428e66f3420497ffcefe20682924d1cf04477118820a2df79d84b2d6f35b43c6bda341a4b66bf276ccc31f5faab216420947e59399c148fd0a99a3d9a9049a6a649d4ccc6d643935106c5d5b2920b6364c730c6d210fd754cc0dd6f1a1fe385ae403cffd8c9bab5bb69ce52bc1090a445d0cd36171f8ca3bebab9c5c6c0b62eeaa93128fabbd122290302ba092c7da53917531165601f7427344cb1f90759c4a65a84394e74dd8c7803b85a27bcdd255230d5823f9832f14906914cb70dba193aa74f832112dab8111652c6ac630f3d6becf4296d673c8bdc6afe409753ce6175809e70b0f933cf1acf6c7ae85cc68df541f24ddc5c29611d3ed5b4a26976ec518de28218c08ae64f08a966282342377ffceeaa26fc117bf92b53abf48ad012ddb17832b5c4e2d964c763b705387e01694eced1b2d61b73a7817dd984f775e64983ee15b76a904ed659d35ea825e45c4c6266d3c2113bee94c60c325d7d4a425746f03113e8ebc04206159235cb266bf61a90e908bd7de5e8adca81273baa5e051968b2ae052212995e4c6632dbb8e86a00368b9ccbfa73648dd7e2e556c246cd7d89057f010190ca84b0e0f8274402e0bb0c609ad01843b441652920d56d4258ada457616b89f19a1d3fd7333164e0c0c5b5ccd368bbd932c20f882fa7dc634b98b8c4d6240f503e476ad7b71e582e24e26637fb841e5857b648aa25e35f2c45f0d65ed534868cdf6201322c6bac5722731d4ae9507d1a2909f5570aede40c06857e8a9e260d565920b722a2eff47641b7b6cad7ab42e8af57426a5a12e41de370da6b1fc06dfac9e257edecfa18d59d27a00a7bf11abfe316b12f682511e53ac7cb02d839e7a6ec9c13d5c2a9b93d9ede1471b3124f1bab3a5752c704f6df86b9f76b275bfffa8af3ad3fed05c609564ab3d70c0ce712531c88c7decfd741954f28595776654e294d143fbd70dfb19d19301b7991f30ec31a6f696c0c06302f14ef596d57590825cafa68016577e1df871f95fbb5580895fa1a65c042a84e1cbd1f9465003169d790a802684f4d25538d4f7906bf6dae0b3aad83d269645e64bf8c6e06900f8dc1f0ed7a79c1b6019163af7c2cc90cf917ccef5f114dc6cd97c5137e6099d941959cf649d421885870731db414029db4d242ec68f5c964c63e0d254a731d14152dc3a8f885818773d714af8375c1c2d7db1a9532d4cc1746ab14622a75f5131cded293558243a22e0939133212c16550bd00926759688db5c2cab6666822a99051524decd19c0f2f060bfa48007f54d1ecc662152b6fb9d71d265a48025ee742a3f6c6320378c4740087aa05fef3542b6856d48c950b3c635c40c2cb4bd2384e66b93ccca08be5abf1f5111a59540b95d002548f468b28a8792778c71eafeffa27ac448b7b8ebd50eb6fe6a0e5df021b35112ec41bf3eb424fd2a1bb0fa025e11da9d96987da677b08654569349fa4f7c6b59319b1c0a6c49fc05aa8316ccd447915749c27095ecf48168b762c02ab5cb7acb5cf9a04aec12e60fc6f59cd2e906a584925d2e8e1e9f50e5d9bfd03190bb1e0510cc664e168d9b739a3a29f116754b53af9013fa3365b8262c506950eb42ae53aa57406dafeeb2e699b773879c191490f2511d5e42b03f0fb5cc0896bc5d3e31f0484ff52a0679512d0dfc23f1bef9d2e06a544454069473f18b7b0de9437caa70e91fb4cddacefba0004f4687f0630ec7165803873761efa334dd3dd20fdd7f431fa9663a74570eef2a5efcf42cbcd0323531e93c42007a3c397f226366443abf342992fdf5433b720eafe16227931b243f190ae08a7f01461b74b689a593474b96a1d44b463c1394df0aa966e81090d2a7a5dd0ca850dfd700462deae0f43b094c8927f202a2e930d2ff53a9fb0df38874389d5333bffd078411f42c9fc52bd77a111f6fc30c6872c7ce5267cf7a413d5e38bbaf6a727f980b8edec37fef70726e310188cfb97e9deb0d28550a5d0ca0537171cddd1b8e07b591bb1a96b1e41ac4b09de2aad6ec96a3f676b514cd09b598043f81e66fae1d3f922af6c5626ef6cf6ac3ab886d35cd38c26ef959328127e7826756def08ae0fc45d398f4229a253c5ca57175fcb21e2d125f7457fc86da74816cad92d4de955873efc7242e4d14c5e5589eff604975ed3f48ed7f3a90e4daeeb7bbe3a3f1d5b16bc2a4a4ccf17fbac32f90b91800e4a470db51eb8454f02bd15608beb80f2fb194764136bc525dcbebf97ff79c501edbb0ce2e36e4818653f90e97b87a498f4ea38b8bc8d9c77c2eae18d471d2e44e431c5eab0f726559409729f5488de476f5ecf244eb596f1e4deaa57122807042f93926c76a38f1e6d63db612d19828bc4e983562a5613deb921f3715d3d0cbdea55abec8b76854ea06964e02a228a147056b1deed4c23504a62b4f0be9720375ff4645aa40df5ea4f0af7cbb47fe835e747b3750c6ef4c586ef1413c6c8202964548a5a968743d072120ef24dc5e5baca3366f537929df7e00202763097ad3a04f8ad9fc81bfb80237728c2c7409e5cf04577b4e6e0ef7225d6e35a439a70d2261b81cd1c1c4864508bffd0510853f13acc0e454c539c0f3943100ec4580c971e74e700d9a69f634d6518eae5198dcf423db299503111df4b7869d3ea6ec2da1337662cdf53724a24bbfc0008070c99600acfb8e59e809dc6c1322e1c81b3be02d2a7dca9dd67316d434c8b947a82216b9ff9bb919bbc868ba4195af839d29c123b409da9676a0090331d75c29333788c4174c2c4c2ba88f36e49c1930e34b18406ce24f152646ab9df76b52dad26477edf173966b9fb5a8a870e5b605207ceb197d5632e45c023fa87e1a39268fb29d62bb2a025701816cecd98bdad86af326623f39c642213624d741b08cb2b2038d682392198f7f9e709e53d5345650a510320e84eb5e72f8c9e643e56625a3bad1857a0ec34c32f6ad4d4a7264efa7996fd1e38745e9c6c39d79a0debfa29050c563151051ac6245dcca061d899e86fbe3d0b0975d536259739ba6286dbda19ce8d63a8f58426763b54e6c2a47796551542e8e4ff60e0d21f0033cba1c9b0f7dc64aa500c7d1a54f3f0f3c3144da09c50d4fe31d9e0d52e9b8576a7628954d29f8116aa2ce0dfb8a3fc9601f49208ac0947afc9a3182cd7aaa02038f43274c166c05eac469bdc8e7b1256f5e79d630a794a172d312842caaf220a0e6b472504c466e95325864961e30963f6553e65a34a428818b74ff442ba17eb2cf2ba63999eb9fbf51e18e5d27f8a4c31022499b3a573beb5a7d0a0238b0c502c7901331dd833c0f865937ec5634dac009a116aad7030e899878f9eeac04eb1318a9051f1570d28d2c454f90bd93432844a9bb2b39e580d46d94014badd694be523c5d52d06d6c5f89a07478321753d8ffd3192e9abca6b366f8305852b48975e58e75e5c729e88a10fb512241d5a09a85f3869650b3b0bd3e0a085bef15cb52834e571ac04a022559e15a66c33a9e25d41fa18a0ed0827ad0793c786590e3228d9a1ca8e8fdef0dabb297aff17c61a16b394e2fbcbe170e901c7185236a0617035117485810f789bf96a2e5b60482aafc10fac139811b4667090c9439be623175943a452f86c403df958a098b1d5cc7d40081c84ac3aea0b4371306895b976a7237d21c9f6db782b860a2d6ae9da552c8be0fa7a44271585f0e081619a82279b23ae730fb3c68a4b48be843c6eee7314ff6dc91a2c317af38c11523d401f6f9394e480a18605b75f6cf108f35a48b17cacb9217cb25fd444bdb5b02f14a20723233a2b075edd1590b573d00284181f9ee539161e2e6db26d935673b150319715a6292a5e7c7402ceca9d2a30f6b982bfe9274b4c2676c8081f288a4111c82b5fd37b732dd6d3a95d87c05bde213b55b6ec93ff7cd73174bd43fc7f9f2ad61f00e749f1f29fd8212793b5ad4f6ee603bb63916b0805323ce47190714180c28bf8a0cae6f7aa94e20131381f171b196784cf23be4cae7ebf1102967d28f909b440c9cd870600151b87a4f38595c1c238b38f8d05ec76a8dcd0eff32c1f2b86a767f55cb4b353a77b77858a9b44a9e80aedd419f9d2207b403978152aac7238833090311c3de0b3a599e559aff2f3ec46d0abf0592b6809a82a23b0a9823d8a55af7eb3bf1f2c317f592ac2c7e71874378f58968c0ace9e4c97dca33b02747a252661f59445fba738373e70be1cfe2367036e0b94ae5ae2fd58749ff892cfc61440841b0db76dc90cff700d347accf20a5f12d28e7fdde132840573da960a19df9d1bf0e507cf382bdc256d696c274ce8b07f01c4a473b2563bb41765d838961fbe2f9f425bd54b6b058dc2f277e8f66ef8ca0a367ca2bc8813ffbea11d44d4a4f888f5b4740040de5063f5a621bcf6832f60097e5b602adc20e2a56ac6fc72ae000092632e902db4fa0aaaff3e34765204e75ecef5b6998e22d5505dbb30911c7765acf71cd5d99f0ddb98cc6ff813316b1ac019b9778e6f3ff16976d059c880ffc07a9ece5f2b0347367bb2f2f22d489991834f206cda3445a9b1753036ad4f26e16cf8315ef78bc71bef26f6fcba25de60b7a040c1be5fa52b742a13f85d3227ead189aa0afd4eb9b0421731a8c04d8f5debb3cbd22f60cf69cb0f8a1880cc2f51445cf28a13e1135a4d982138b2e384b286369c0014fc3a0f4347d85469be949d18689863a19983a6afd86c1a81041fdc44a73655527905d166189aa0acea1bcf0576be2ccec56a15b7692dbd99f80e1954477a8a421d8565b025acecaf43a7838d6843bdefcb5712a6588ef2034b904aa02e8555fde49f901f315b1c03680b67a66c17bb267973ded5332386c36826c8159c11689bc600e929aede3e3dc51153e7cf5919295f3d66524a6a16b6649fdbf53811d0d53d67517c43b5ae039c0e06c184ae90879a66e1d1cf2ae1ad516585bd74b603aa940f1aba1f677333adbdcebae65431c1d77ac216942f53143ae3eaf2aa6d2f88304e2bbc9806f5d8ac15c2ce5f1697c74963582dae88728f4686998ff8d0487edf01e9cbc4828146b7d92002173bab0d91192b1f4523cbc0d656fe714f4269c5809a9787e3ae696cfa0369621c4c6e918cef968998344ba8f6d7929e503dd524d543435a11623940962f5152e0757999b50b4d61e34d1dc81477c7292e1b055608311a2fe2e4ace49936f59cd24489ce330a92f3b5604f3f9bd0c6d021b6afa8a4ab58bf22863ba8e6129f29f5af16161e6021b3c2bf41a65217ff1c7ae3e1c4c9bae7c959608a7508ae29cd60c797751f890a5ca1bf9a3bf8b3c647b25aac398a6a36c827998c70849520e788bf673530da214f5f09e65307707b49d91304c10c41682b7a36e44517830b1f6ec7cd9a881a36fe81881a811c1e606622b907f2b794c88918711ecdc30cb92a446d80743c5c8da88e97b7ef1bc71e9769386e972f2f7b733ce279a4267703aaa894c204bc3adc4ef8987835bd73330943dcdc2154c479f8c592923f4f844313638a55c2d05f9ec49ac71b41ec7379c2b147e88e371a8185621eec717e7eefebc73a3d4309df058043a41ebe764a7f78f45815293590ba6eba5ebabacbfef42114eb81e7f77b418842ffacbc25735af5daece2ebc621be6e7a9a30d762897186ae380019574732fb8ef160dff058c88381e63044ef13bf94198a5b4cffe3bdeb214d83ff2f1e134206144db48344caf10e4543a36441510263d8db555dc0029a7c2447574763096a271234a289504c3bd65b12237b5243cd3a94224554fd3b5c2210a6890b3142a8bd23c6d26eede53418f14971532f60199c02d12ee12e6aa641f04849e9b91b47d0814bef5f08f9d9a4afba7d35632e24b8adfd3f7c6e8d58417f1d3da9aee364fc96812c89367d52222b9cf398129e65327cc1c9ab8b893347083deb5a101a1864c38724653f871ffd813c497bcfddf06896fe00ef097a954987fafe804c774b1b74d5701f71574850c0a63fca813d9b8c7fe58f25a27342266b145a2783a16010de238083073516cc2aeeab4ca0b8b7ca8ab0701ee25a498d995aee1031df37e721d6767d9aa3f5bcd100d27324477b780bc0f3680e17c09ff2bfb93a3013a836a8b1c07d7a3d5f05f0306d711a46709c5c118c406c50e921d530704336f65c5ce8e70091c9ecbc5ed77e53b0752a7f5f435bc5af360ba561f78d283afa15d5b359691003b12d85d28123e8f1c5d78cd2557a3feac7735712f68ee5e3f1ff00851acd78652d595cce2fb82eb52f360ab0697c24a26f96e57b272d036336dba993a1c283d7d0d4b3322980db51d53b1695211cdf23749b2d62fa0976f8a53a38c0d1efe2071bb85723012a803f81dbc3000027212237790ee59beae35945668c4360f8d83a93017532cae182013e6b5029684a1a9b2d135f82ce0055eafdaef230d491203b71bdb4c2fea2b84e8c7b2f13859b16db0a80546eb1a8141cd35f142e00b165e28b96967f05dfed09af13463baa78614501851958623e78df0b62b39c30c8ffbcf107854157870b4abab1802a1d23a34e803127d920b0fbd93361e1df95822560366f78a0862c07e38cc0cbdb7f9bc3c2a310d0b7d7be6d8b7e38abc6421604803d6301d04d2e4dbb73c4721bd0de577436479e6aec21683408abf133b34d6e0e9817640b6598e858b5dc811ae80b7d2f42ec659b829ae3ab27184167f1837680fd2a930f3439a6b1332b3c29819230bb12666a37d55b1a8b99a391eb801f036627f16f428e60997e1646f97f7ca7771a983fdcee23abd2430a02b85317c02bb62c8791fca50919f557193e05df2cbf238efd89f77b6796db2271bf7a3f18bcb2c7e441c56c600fc8cdd00659517c7776356fabc6a4a5ed68db6feb08b259cc073d97b111ffc456ca1e08925ec6d035b458f694cc5e180087dc84ebf7aebcd2d3f2ec6b2a60f833a2dd3d4812243a573f333784d3b79d896c59ed5ce82b75da233c9e07cb7a72a44942864d9ab3f7b0dbe2d8c213e6db3ea0c4a8d1e334dd9053e5ebe3b4d091e843e11e919123a8f2b81272af283041b7afcbc5808b10c6374cda5d0b26069dddf2702ec3d1b4c4829c49989a131a213ea4f47dc9e2f6e9ca1b7fef9ea5f6b152ac3ca3d8e661ab84f39b5443651d43762218eed1e5140adc7a84c4df8c00b81cb47acc6872d18f7b011f93a734620f2c068ca3f3cad450b1a4a23f27951002d8167ab0f4ae078f894026b6ebc13956322f79cc3bc8b6a5c24af7c3b376ea563c92dc23064e4a94de1062e69370cb50463be9c035c51ddaf4f7d624256e2662390ba2ac6163646f85d14ad102078afbbfe53a360fb0a7b1bf73503cd61ff67bd500320ffe78b92acd60e574384c952b28f08a9565887d1b94c8e06f8d37b915d10dc92355af6ce5c46fd7e40a8158084189f70f83095427c1e065298822da4224cfe9f81b144f9e94681cd8492e48a19ef5712ebbe904ffd3e7e2a76f1b8ac61872b4e4d3d70794b8f3250ca3fab4711b6782f0f43b76213cc491f4744360d9940c926ba7b3a54b3311eac4d5bb34a88ef2fe02c36f1f113375576e6fe8459221afac69bd2e313360b1f3af51e505a2660352e4fe0857164e153db30c4c75d0850cf26c4c9c2e1ad2a38e5da13219d40adb6144d4e6a41647d32644f77c519b4b8c0cd6a7533dd6d9eaed33f233e64c8d17836e2620bb124164bbbbb9c3ed0b1baff84d61722a13411160e612c72790604b7184f768f0b2d859a22bb8b7cb4f6812ac04fcee4e23d89b3e1b774ac5c0b08d6e1f40e14cf3a8f6f4a4245edcdb6ae26ea775e116d96cf2ce388c3643cdd04818d1b04a405b749e0b4863e399b1a1fca626a760965ab791dc2a162486d13e1cf3c48ce192e651e6374d94bc8d698f5f7cade5acf7cfe7913e67234e9b485cd8e58eef5bb9a9ce9bfb7aaa6472325226d8e42054a45160b55596c99374732a30859c00194de7956581d72537cdde794ccc6e05cdcc4f5b465a4d7cb59736b73792829848f34f821eb4965c4746692145bd4ac30e02b428b3d4ec8c0158314a04733ff1be019d1621786fa8d460e781776cdfd27ef521cc0bbc401bd814323f30ecccef4b3930b91bdd801a05d2ecb1ea1fbfe466033811b261ac66cd9d57ca5371a62817c1adee589c7850ee5bd462cb9acbf82fdd033d4f4dffd8490bd72862767c6581e5ebd9a500d6501f4763b0249022d50b34bef0ea39624aa87deadb836fce51e019a37891ff44a9231bb0307ee572302859d663a3a2dd5d660db3a9eedcfb5b916c268a90fceca711791263b37a93edcbe64844efc7795ad47f5779fb8b8f207232973e26852c8704a126e8d912426e1a92391e7942f099efa9035cab30608a2cfc941e0f116b52d4f2fe4c4f2e35dd2232e9c83639238b0aef394ca534623620afd833b38915c12369a4224769695c2e8b1c2cc81bd0ccb074760af439ba244b111057b9992fd13490dc65b1d5f87790a66458facce5e67b56584b4ebe8184907b142f5a6a4e726f72e87c8c4573ade0bd53a8224246ab70c43b509af095d462b9c8601c93b94aaf65529e3e2c1eceac51464cd82dd55173d1990a9be9a5b1b786995811fd02de3fd349083425b397c268fc20c00307c6b7cd7a6b91449980530aefeffbdce60c264bb98b889c0e1a71028485653f17cd070564ed44425e0d03898da007a0e907925b10ab9c0511cd127f055f4c8435946b2566463c979eac060069c871897879c3da6f0dc331efc250f9ccfa2c9935421954ed9490094becd5d1978bf2d45f44a33ccd096579902727347e4a593eb6c4825e7211b9d95fada41009e678a183dbc644a93d480d4fcc2355f59e33e606d64b15d08f898a5da8b016bb16515c1ef2e860806a9a8d3f01a65bbd5e960c68dbd7d978c855c66893555b4eb430234b4651acd6a510a17517c65860174bcfe08252787a263174be6cf99558ecbf3a1a544d2dca4614cd6dd83838c76e8dd8a939c36e4e3353ede9835573f8b3959eee6a8e3810e81c03c23e2f83c0b1612f3cfe6e285485b7d2e4cbb99538a01b1bd6f1fc5ec8136ee1e0b680a56a3641762a126a59918fcfa7ca2e6e3d4366ac6c4924c7b51c5475045574170e4198af12c58bffe26ca2075df67c3565d47724623688442709b7935851d5d2873d5855c35474a272aa1fa5ff4b4210df363f7102b5fa83c00a45f814294dcb6b9f48e6951f5e5f220363bcd9d8c207f702e86a16604334d1068703408a3a878277fbb05fb4604909da142b72fa13b1c1bbd6c669cb3c9d397004d0c43a8a8d01b4277f92e52768460bf0a7606428a4441483996f163b9dd51a790bb1ab7f72a95f659b5998ca91bdf8d8f110e84d47256ada482b7f6a35dfa3932e41b4deb4eb577f21bb9a062037d3c6259f02f747ff7a873e850a415b51283523d2d9f828508edcf289320888d07d8da656722b8e33f43513446e8fcdc24777fb4b163cc83c2dce220e3ab2574aabc503fecf2eb78dc6f8dc3b400af2aa2193ec953498cbce61b555321dc8d6fe922f19b9854cd6c2ee7b2737fb30ee6034af074e2978a3fc4f344e5459ec608ee74d6c314612e99b5c23df50c94829ab445f94641a1a82ff2f4a7448f1f67eb1c266976d4d664c0131a9d1646e42553c8f14cfea466e4bda9f7d62c1eeb1fae90f59124abc0d3d2ca92a611e957921f92f89aa1da2d29f8aaf324d7045acf5bb8f199dd51c3258437ba8293fd1713e52765edd4a696634dbf4965c904f7102faa39122dabd01efdb056c31b3f18057186de110aac1df3c9ca1ad1c242e4c373094d4aaca35c1eafdcc2dcb00db36c4722a2583f514e7615b5aab75f65e76677193daab6c69674707132a943447ab86ad0ce5337ee3e879f67feec70a7bebeea433a22df16074b6d287af1abdba3c7249aa31bbed817861bd09bb9df674cbb0e48e187b85ae9009139144b7f848df2450bdc76829a1d753c88c41ef1d71e4c6a870f001b41cfc3fd899286ceede0ea85ee6830524b5dd79ce986f60a679523d2b0822e5a4113f03dd224eb8ba262d61885fa99111dcba3396e1837babaa3c158810f2754381981029c4637914f25eeea8d70da475d85fdd03cfea30e2f6738fb9dc7999f677ecfe1d99d7ea86b850e3815caaea3e3e8e0349ac78ca1915f96511f9185c9a2792caaf1e60a0684947da8ae3faf8099bf978923ab31978059b4162f70114ca6239c8b1bceea79be181d40315cf0d7e18ed37335b312f758ce366e1e09a79a85afe82b79f1c3a44acd60dbd1507cba83b67f8244416cc0707ec10eb48a84690886b703fd7e83320e4a4a7f522e8f475b28f03cc7aa4ad1a9248c14e4e4f56da84fe385fee9bcb40cbd628170f97c91b4454f33e58b19ddc40585e6f9636082438c6c7502edacf6926d4ee7948a11c25f982a4bc4c43b16814885b2703d791040bcb592f37363ee4b08c07035df00a62cca0884aaef03a91e0e7364b75aaf8e366e9592a48a5f9a38580874f63882e0a8bd08fe51c2706fd7bade3ee06dc113ba608f07e97a216fd87016b808c560e0693c1750fe1183a4d12a1705aa7b1c1ae2322fac71894eba3adc675cd71ff52264ed0414f7fd19f29c47d2df28aa4836e99438680a84c27cfcee0a1f3f9ecdeea8efd692fc0e58521f4f597ea450e24f09a352a4fa4ceaf7521e6fd619aac2f616b1b4a3207dcd85860bf4a5852ca782b96384f61cdc58c17b964b50cc0492b78c098699b8d2c5b3041bd750779f0541c2b26af96486856f50f36ad28c0097033ba447614881493a968ec6e1c2ac0a8d64a251b5797f28bee992c45c127cf5eece19d219b358a0784fe522f512d4268b7f344434b0d37b4e010a32135726f1172b7b0454a8be1063a5b4057646783bde62920fce672eab88dbaa35367fedd2eca0536d9bcee4ba9fbf36fbf6fc5d4aa2641176d77afb8ea020d85f369d8452a373a0456b174dd3101bf769bc9f4421c4e66984c45a58776a3fadb635de950cd97ae6ca95f411afbb70d89d0d608b4ddf7d17c2c15036e72e8833b018a6b70ea9e2126ee95670cccd3e92fac59a874ecea1b9da0bf29f2ea950ac90c9b49510335819cfc3b42df8b483e2af18d4b2f71c5069cfb94dde64a4583c953c28850c335692d9a8fe74a0db33938fadb5807ba10354b1141dd279ceef6cfc116c7e9b50b34344bf29f608ab34928a5ab52b25a0644b13fd0b6e3aebbe282e9f0a7a952bd2bae11007f8a5e0ef88119781195b653006b9b2e37617203ca8cea799d109cfcc6cbec556183801bbc4b3ab74ce0e0e6829a2b13484241f633d2027ab5c3bd115e522f75e4813d1f86817fd523bd41e41f48cfd18c7581be6885b8e92d835a8b10b5a20c3ef23ee23df2a0b72fd8bd6668a9a99d57b251a59699fe87815f6d10f80b416ff3100f9fca2d1c2907928e50b07a88269a4699641b8d0d5fe64211c012840e659b700eec8f59e6f68760c2f968253d407c6176775787f4ce968bb14fff90ae76e58706a11508708bb7c61c9ce84c37874d79320539938ece1b7ce704f18d3a1e3ffd9d8a730183b85f74e3631005cc9e26d9f211dc114f98133f9f64109db82818fc495302e1551cda66551276ca9a407bddba2d726ab83c25eb1d51e4becffd24f4e3f936c7edd67677a144c8fb89433c82986db03940bb4528775154fda142f1aa90a1404e27af28d61d89960c09f44d3c851ff6dc2e0079047c6f33b40c556dee6e921be06a41bf6191b76ac1ca53f44adf24a1d5b1b3a696c5d030d89f2adabe98147b4672e288b1c9cfcb6f00690e37fec3f7fd74aa071d0103fba40d48b5b382f9e7c336594caeea8218e7a488cb635ac9af858e544b258dfa0682536723c4c863103fcb2f5318fdf063c0654ae1b9811203d5026e3006ffea114615ff7296ef2fa504299a66f59270f91f2ec020f012d852f3c212f7200bfac42713d57754abc221050171481608b89f2236e2649f17799ffd30c832e9e97964da3e6f8dcc24723b6b420397445b40cd96cc1e6d5ab3d84bdb1a5c585c4b0b1cc030790dfb168840a7db118ec2c825e40397e796723a79b01f7784f1701538743fb779f7a1c66d2db2dad0e8e72a478cbb4f152f176814bbd0c5d9011e1a9d1f1e4717e6b27673d7a779613842a5daf596c380f809c27024ff03d3850053e820d6fd47e96a38a07213c27d4e6a5a5759a96f9e1de74335854153476e88451106ffa748328a40b74f640275884b172c7495aa8c3aa49cbde10d29b040d2ee1516cc170bd484d391a18c990c42ca34c37e898549a21a864a5aef70f03b6951d1c7dd0e1052a027050f304b976b010f020052d89d49417b14d35493e901553bc4873513a6fff3f44e6607d7d3fb2b7883482e623f44628fdba31e9733652e8c14783ef0dcb19326368277a36d6f93ba24f805810886212b2e48d45388c1a3631dc7e64b67bcee0c12aa4117faefe995405742e8d430d575a6e3dba9efe74972204a2e60988dcb0d999b08f94ad2ed590949fd8ef70f4c176349a6e95256a4956a00c8e5995e5ac59ec513e3131b6cfb20315e13a7972919a51a46733b7e89d8ac00e89409137c1df780c7a277f268c6df68fe7f00d6b53fab109fe23979caeb6a2e7c0612e0a6a6f77e07ed328346a8b652cf0be3fc848ba311d2abd1d2a1c74c4af640ed91b49a3c01a8da64f908843546a6840e5d28c2494eb75d456ca97cd04e38d1e12080d2991ce404a30fb51ee39fe09a4e97105574620ef7087c3a56091c62e81db16fec235c11ea66ed1d51ac33652016f9e42bf3d4f7feae752e50b41cd0b30b7ff5a0956f93a69315cc23e79bc53b4cd53bc652644c032d3e90a9b3614d032efef06bdea90c6eb2159002c9268b3892c1d29b7c2e6c54849baccfb10f0db530dc649b57f3520c8931e620381037d975a8576a25182413ec12c54dd6ed6ccd1825aabdcdfdde0caf170941f815715a9b67bb675afccf0f1cccff7ab845a4fcc0c07cd7c32544920fa40f1e662ed93b50d9fcbec1b616cfcbab15247b1974c1bc6c9a20b9974114ccc3a6e1a04c0579a5b8566d1e3741df1cb65bff058bd928419c2f532e80990de47d3e2c6f2cab097118f552bf00361b2808ffcbf00b90b281e4cd1fcb1a23049affa320754d6076e65bb0788d62d40ab1af751ae843ea7de9a6e7377076afb2d5d7d2e7cf73320febef8c9bacbf166be89530c933bed23f5800bb25a5d90de876f0272aa6817862286fe762ae5144eaba8be7b4e44e7767254e568761dfc76fba3ffe2656f51a98ff4c7a9ce4b6730e67f2b00ba6fae28414525173d7128d8d0a4ac7f4f2ec613d4da1ae6b0f62dad15dfafaf30a7f2ada23a2f36762b0ca86518ba996952386b9bfb0b0068723fc9abc03b90e13d83d0de2d8107da472bbcf38835a1349c986d417378752504e439749f5f40cf421643dec2fd6ac34f8c1f5df3aab52163000ff1d1bc90de68c83d4e9a35533fb237839403e10cf62b33d444f112abe62fccf81a40db91cc0268e7cab69e750499c76a7c130f0a41b79f96239abc0753b55036bb5f187a9d11986572f29292a3e61b5837c916c0a4539e3850c5cbc5127a2d9e131fa6283732ebe0739f9351c7ca369a71f18f974e2dde8c8448838978d05a94e1ad390bc69dcabad82444d0410f942618298fb73b1639a8c8933949d10fb00cdf8ab1e05d983782a10ced27f9e006d492cf12a4a7bdfce68f3e500b8f3e1afd7bd01227651141d674a2ddd9697034334ec1b49195b8dec3b345ed750503dc0ac84ff63cf005a4e42dba0bf658022d511fe22cd7e1cff7684b797059b200c18775aa123b1ba51e8b578e52d8ee0368a42cc03ee415c84a9db5307bb0883c35eedeea562ea9b552b7a7520fb8fcece365b9e587067ded0b402598e19e26599a43c18278c41d6d6c16a95d314167d2f88a502414b3706156222b099496b35a6b34a0865e61938754c6da504e111230342b0e48c23e1c2d6c24d1d932d390b09a6d198847b20bce9dc5cc02c6b76cc082c19a73a79734c13c6d3f26accb3bc63063d6eca3149bb6dc2db9b788c4930ebda7333643d0988bb9f309ff128cbe8dfa5f30cfdd8d733e460c0211103d226f930ba84f803ed6a06c41926a5624440a6b05ae1c326d4308425a96120306b98debf82790c894f3f4f0b069c220da38fce18a936ca9d9e3953935048343ad514f0414afda469cf521051b94f553ea3dc74efe3f9f156b6b9fbfc0d5abd78aa87fd8bea4da5f0c3c47bdead2704fcd4f74d31a239a3c2339c2aebe1f9f0760d0b2b3d765b9373aecb03fc0e041af35e965820d2b24a07dac3b29f6aaf6e322d2e8102cfe4177cc3fd961b0dc06c7f3985cde826ff92245c92dc014bb995d1fecd0d880e83c1405cd57b75361660a8125aa811eb13c046549e6f6090e6fe5612b2f7de5b4a29a54c32057f091a093e095bea6f9ec757a84425fae4643f2aa9c432bebfb05d8d0eb155bcd08bed2811257ae8d79227f4246d6253a92841c844b10df1a625c0125392945023257383151edfdd4ab4e03b0c2337503c187dd12f3411f580431841d080068884edd004956f6f7f2ac057c6960315464dde84ef235249f0c0054178924498179c31e54a0e2c40c3e88a0c780842d195249c9c11e60a144fd058bab2c5194a57bad880c6932b643cf9d274650d1dce380a93e2ae80a1e3f1baaeebaa49b561a573184b9636b4a4dae8c2dbe8d239ac735d5192fe6ac1eabaaeebba2e3042740e1751ad740ebf0a60b0740e7f6740442923092bc2732b8a1b38b032cfad1f6e60d5a46e6c0d77c53a8d018f7438068a27a6ac96d01d8656559022d20a586cbf22db2cc88f4ee5e274ce15ebde1dbd380202ca3397e7a3294c7c867abe802b6e7064df021e98246c57a38f0a5f9e3d86a0e6c192b88584972324daf88e995849f4f01d8389b02dccf10167b1bc621cbe49de1308831863bf67e6fe0110d63eb7aca44164679e5b5676904961650b7a35d9e7b2d2e64a6ba59d8573b5b6267503299d32ea786ef99085844d74b214d8f9dcb2a225a3813d35a1299144d6b219112808228a1529d912b63eb7acb840678baa634f28614378a7ec096184303e54e418994e0921a4714619238c114208af2813498011c2c8dc905645e82e1f330f6915bb43d89529cf18218c1036c738698a0b2a279553f6806257c5ae4a59152177dd0a499831c218219c0da146d9b0cf638c30463823eb446c4647c7085fdde2508431c289d221639bf75c9c5a8c51367cefeae69c51623b40a277f221f4694dced81146392984d005482b1862c02b46306234c2522d1f4eabc0c8a2f68c9ab453d491393683610fbb26c4300c831906a30b606c27a69e90b9877be6c9afedc46d9cc6e9a0a0c18dca8f1f2bb4aa9dcb80c79764447bc867944a61adc26017085fb641ef70a477aa1e3ab0eaef08e4c91a1a71d38d52296b21f757067e56ecbe9e0f0b0c8fceadcb252b87d3281b6cafb2ea416e460f4c1089a35575a1553635940d16f3946cef91c2b9f126ea1ce9cde33a28a87a384e131169d14b2f9b4b15ee229a28250537138dc4cbbef11d35d13b9a8fe80dc139d29fd19523ba6808e6bc21a221ee79d7ccd239f21d7d1bcd6bde77f402cc914c4c4c5d44ab641711b5eadd6ea226d2fc69e942665cd07b83d583a555d0122c8e29ab2acf839634e0685565fa928e8369555f96564997e96223511311f5f7bcb234d17b8273a45351b578c9e5a56ca22589e222fab4196783842a05d1844922cc2a68092a8909d38abad06a656fd081791e0bd6d830f8e8ef0ce6519d3efafbc23df2538d020b071b1f99604ef408ef63423179203665cedb9121304772d82331a4d67e948d8f2f93f9c1b6bfcb3bdf5880feee63e2b0af536cf7584aaf36d22bbd36f23ed6ea35e99c181f13784d81d588c859f6a295c793dda8e57681e565972cef7de751a3429dbf08620ca4d592c8056955a9601fd2bb5444621fd2657630c45d3ec730bfea1df215bd36f3fa0aa77328158cb46445c63842546186d26a093605d2aa4a434891e89152850f462821740d000f77dc1c0f93a00b5e8df1249dd850b9b47080e5db29c5810a34be3db6cb5ae1067118c24e9cb94197a67203237c3c7481b5356210f0105629ccb8210e15b0cad0c114d7132f8e50c2f976bea6d0d18cf0c2822b4b66841b2ca8512461452a78f2a4a8872156910c76601559b94185d694a22754605464450e524c2902430715a20853048414a82085524deae6593574b0387ce8e106563eb77ca832848dcf2d1f6ed04412592c7d6ef9c0041c3e6461b58e95167cf41e3aad1fa4e8d038e523942733e7cc9c50788850e69c93cae5554e99773777f750643de1220fb189cccc8c0c04f89f75ebfcbcbdce3cda04c93c7af48f43f4b50f358943ad9214c8b4286ef328c433ae0392cfd99c9c7ff3e66c9eb3f874398b59d606283ae2288bda7322fdd1dfa582dd215f5db14957496f676d8d749f159a47e7c94d8f94ce4b28454c7c129b4031ddfe4562b52bb8987ad4bccb0a968ab628825fa0543e79d4b4d8360e3d2cc030a2094af144260c1b264c182d8cd6535a08239a63597bf6ac4dd269ce82e69c107e6c66c685c7acfb40b7dc1bcda453d03a409ea007050dc020ad829650a4a55595e74bba486955e5e4ef85490347e5fe866866c258c7369a9b5d9fb9b7bbdb95ae42dd27a673a44bd84d508eba41f0063d2cb8bc016515b4e4aa026925e3414b4e185a415f1269485a553939ca85564f864b7502a4a338191dd8537c0f8e3062b867be4cb5e0a5bde165a3e0654fe95a884e002743dc64c4b0d0c3a498eb87db0bc33ea4d32f76238239cd81ed8dc8e636454eff36949f50f739e91cf9865a25fb85e1dfb827a66f986ed2bd30fd9c3c79432fcc55d4345ea494ad92d37b2e7f4343b0d6d41b7ad9ef0aee892e4f524824668f6daddacd6f6e4e5e73e26e4eded5bc3ca1b2b8fdc5310f9d76ca70f4deb08039bc371b1094ca665e230ac366cd699b1a37ddeb964516c0e3a1f788a752b2deeef1d07b8059847dac11b44afa298da38e19e4eb35ac6955a400f41706e644a76dc466faeea900f5cdd4aad88514162ac1a466824945da2b7fca2ac117502eb6ab69d02cad7a7ce99192a547ffbcc2584fff5ce31ef80f00ff767439fe4947d960fbbbf8b0ef2295177013700b16e01eb637bce4335e96f152c6e0c206608f1b581dd58f1f3fac055c803c6fd5350ca63c7456a239b0a7352cac5e2fce8782612947cfb0bdb56081266c57234d21fafcf0c276ac54ab6c81b2d1c2bc2d4cb1f049e5e2e8a99c5c7394532eb6936910dd38456908d2211477c311d2a512589d434fa2a2942ea594f224bd89490e5524b8777abb4392b661a3cba1972e6f601e6639d43ba797fd12bb9d9cc14bf9c3cb2b5ba01d7dd132a28befac16c7a13df44601e9482c8bc562ada4539137764ebb4fcb14c1dbb90e75fa4dab6694d9b4071ca8f8bedd8fe9f12404abfa396bbd9c7240b2fd51e1958c15d667bdf3e2c142c7dcafce85af4eb9548a521f7861587d29086daeab4e23867e4edf40f3f01bb3e9e7a499f389113eccf9e3a75f95ce2e959a7376da4f96138e1c1c3db7a488f249cfad259a6817b6c3b1414b121007144dabe94b980c2dba20adaa24c19c7a3bcea5b35dcee9a8ceb0cf37ef5440f231cc757a677baa2c6a9d0b1f9f7d9c03dd72d17d208adb1c9e5cd53b27dfbc7f1c3066cc98df6a3aa7df557ff0d8b5353bd84ef543e7e9a532ef90af648f6e80bc36cf1d7a97c20f7dbbb73fced6744ebbcc15ebdfa96cf7233ee800960da2d81fae70dd25c28753d3faee86e6c0ca252d046755820701ef0deef9794d61766c46a0d3a6de01d33b616eb622d0a9d374ef3b771a9f5e7aa7ab93a97792cca5dec17c7aa6632bf2524efd6d2ca49c3ac6f193b011d9b0ca1dc17a04797855eddc766c41fa31cc352fc1a7e6373a7c7a3c827b4a708debdefb113623374e6f9c52ea37eed33a78c8119c52cfb119d9e1d23305683aac58d45faee38aed62918e22dbc529efd9d3a1c3a60427a1bed4a43ed04687bb6b184fe927bd63824f7fb773a76e82d7d098702d6a23824979e3dacf7b1e2e3925ef798ce092e36c304c878661985f97d98cdcb88eabe4bdcdeda4f370bb19d9e1d855f25ebb9dbc5c0fb58abb3645dc31c76e12ea40ef77dcf69b848703bdbf719f9ed23b25dc0e13a2776e6e128ca877786cda4604cb7ab4c73d4176b874768e8794ce4349ac5e824fff41fdbcaec377362336ef76d26f3c019b11cca72c81eba16b53644712cd81de63bee326b9b9b79db42ac81ba30307b6eb211db7a34e824f8f567a07bb493c1af58e76bd55d5a76b5b91944bcf3622f4a65a555d6658c3c758f5146747b81d0c3a9fc345b84472b8742dc7d500f03b5ee6784cdb6fde692fab4b29a51422abeba85e7b07f3ea341cff0ce7329ce5badacd1f7efac9a7e7e42127f308e64c9ff336962dcac7f903e74447e2a36bb74b55b173061f9dce232f9f61b1128bb626db3514a6e90d25f64e95976ffed9ebc8539773ba4fc3a033e5f3970344c63b16e9872321fceccc0c8419e31ec997ab6397c8a5057bd7bdece3fa76375224c8bcd6223f1d13e0557df4a65534d52a7a0409a5484faa4dc11922dba95494461b62d37319e7e1651cc590e1d16b17c5c93886835ddabc83a1e651cef616792ee332d7a326a45f6237d88e8f9abc7d192b6fab00e3d33bdd557879cc33b742884bf3e91da97964a48c72fe927bdfd94df3598fb6dba52ae642ac76bbd74922a897c9b00dc8cf7b1bea76303caa2633622fbf86e2926877baa45b9153100c869a6ae38f4fd29ef9c575ad693aa0d8e849dabad655ad1d7537ce5f867b5faba6690e37205af4ad56cd59e374ec6035d7babdb722ed99679c4d91cc518ef2cc3394bd9dd0bfdf5c7314d7c9dc20cc3e3447b90fdcb8cb2dbf863a618ef9a65d895d8e9d9bb217648c93bda742abdee5526674a394fad6c23dd2aa878406b6e3bfee90db4cd827e5057a3100adc4fcb551eec88da155d2757e5cdee93c0a3fbc93eead52a9e40fac54122f9554f5f6a3559733a7340678bada4dc26ec74c0fd4d9c6fdd051b271a583c28fde805c10a88548e9f2caeb027a9f65476e0cadaaa72716f3232d58405eda76afeb87be44d242ab3a211f9855bf38ea18976473c485dea117e8fdbc40a23f24bd036b9ae93485edec93d3dba2e080830d8a6eb8c1882370c0c10645ac9f9ea560cebca60ead10be0706fbf133a977fa3e2cad9a3e3d7b8d1d61db5ff78cb21ba9474e86385d72d8f4ca75962b87789bde3ea2c2766d243d5adbf1b65a623e0567aa6a9045a56492f60478459f167bb01d1ff94497fc0e7d0a31f6f99c9bbc379b0f7ca4ecc8050e38d8a008a7eb24efee99f58561592af48c6a333748f8f3c654ef29bd93dde7e419a1724fa5ac856fe8089b397639261df694aeb3c8c9350f39d8ee0d35947eb2847d43f14518e1d01016c5b6736b0a2d6fa89366143cb6d5d2f203786eb5a4641e9d3d02e1db127adf24d29b8528af10a0f7cd45b6c276f68340ff79e840ffdadb5b0ac8ec9119028194426608e784537e33bfa16a5543dae3db7be460674d4308a1acddedd25bca08db77f0983516e2ddb0bb9b86eca655ec834fb58a2fb72ad22923ec369a61c18c0e325fccec20f3030b7480f03d87af9528e2092e51fe41ce5b05803ff21d0c9cf4de7b2580fe20c3acc8f327b814f1263c3fa18519ff3623108518d877b12a965de84127669cc87c21f383cc17325fc8fc30b3c3cc0e332b98d961c6c9cc0a66d2a05a92e8d223ede2dfbf6f59e1e5a7cb5b2fc756c59b6a555b91e5e6c151f9ad5873597dc2a60564dec131c878f6191b6c3bdb0ce36a75e99a569fb430cc438cf362800e324df89563f621bbe8a0001de4122f6e52a137a3f4241d074629ab80402034aa47162995e44a2ab8f44c49492957e9fce8ec0f10ca522f35d15c353519193dd66331d20fb6b396be46d1f06c1ee62f400524b572f065a9097418865e948717d62e6ca077a0152cbc157a487330c4cb61aabff0c60b58ec8b2def0a9d2373c55eadb22982796327326cc74c5f1d4a086b6d7e709691a50acbd0a62c841cd9fd7a091d47aa8c2c467f9f5b3f284d11df733be553df494c10f1d0bf6882c9670fddd6a49a70f2d06f9ad8c143e8aa280fb9683911841f29f838f1d0551882c5dbd691183b263cf4162ce0029387be81175cf0d061804f80b16380873e8215ecb0867278d8c5436e4141c643dff2b015c5120ffd4581597678e84f8887840d330118820ab428218565850bace234944ab5ea59787dc6a881b4650856105ca8d0c2a579e2aa72c31e1471cf0ffba04e3d4351f803f2486747c2c3bbdb79f0e0c1c379f0f0761e8ee32678e72eb4e28e3471bf2eb42ac17940da45cdd44d4953deaaa88b70b80a73a89bc065dd7153aab5cb715c1fc11ceace31cc49cd1ba6ac7855e5f1f02a486a501524ed3c6e50aa88ee38b2d4fb56a95dbd5e1b245d1d08b6fbd11403fba05e83c5528703cb1316dd716f6e07959edadc0e263dd541a993703b78f4d4bb887a1bf551ea168d70bb567a2ac2ed7a29c7ed9aa9e676dd4473bb0e33733bc892b95df4d4de0e42798aba1d9cf2f474b70b8d9efa10ead94dd9156cca71a2c125f35e7c2aaa2325ac5830333373bd52b27dee1dd931c219a5363720cccc91794e8eec32c218a1b4120ec9d03e8e015a96cdd3055be79471146189830a7b6ad2a42ced606b9e5b58b4bc8105cb6ba824f3b01f7a691e5513b5d23bdcc262e5212d02d2a2a7480f69978734cb439ff251a607a23e2dd6183a36c58783346a0065b5448a51f4806025bedf1143b80073fa3559c2760fca434a556f3fba505c803cf5327ca15226fba09461bb1f3fb827a500e6218173da39d5fdf84e559f59ea07af5230fa01cdb036f66b7cb036057914c039eded0fca8f07a56e3951a29475a8047996200ff4e8ef76364af7e918a38c1ee369a98aebb444897a273ea4568c1e522c0f3dcb50d6deae4fdd325ce61b908a5d1748669e51817de794887d40ef2055e21e198775d39c79871770b90cc73bbe515ce7049c92fec83ddae774eef1809fa08f1d747e5c6f17f4d59beb22ecf6f713c4fe66f881f307428f0ffd720d620343c866c2b07de2961662be8bdfef3dd7c04c184daf640675f44ae6a671cff3e6e06f4baf44fb6724b2f881c99e67a8a93943ef8482600eb3c70c21c7ecdce3ec43874875f69aba6915bf2dc8e58f7b196f401893b1adc2fcf2ac13e252ad62bfde2b79ffb0681304fee5d7f5cabd9fca42f54b7af4d436f3c53a077d1661770f787eb90f0c7ad87e19810f1fce00c1426fe8e367f7a4bffbf37e0ee0e91659fb4c193609f513bea3fc4e38c03d32e83c157621ee813f67bef236a9c1c74afa10cdea79acf9e83a7668b11d0caf53c6912672860c1b3d88ddc21ca115b311e54a0cae142db1582bc98a44e010c40964c0c4aa490d3e56cf876856dca4865e4d1f6ac0eab9e4861ab00a3a125405c9747983e60daa8244fabb410e7322b761031554ce00a306636cb1e255146a811626a4487942e9066bac78c5dee92071166bf59cf4ce094f5e0c2263eee974badec1fe07ce18bd83938c8ff7078e19d3d5cbbb257f5d10b0178741e888a69f17048cc593db057dac0eb988450e5f2f15d92df90e06a1285f41c0802647b71bc14310301624f858e73d42d44401b640116ff7bca5c597bf796e6971c55309625f2214654559228871040d3f60457f54583b6e98010f5364008a81bd3c155601b640c152c2802647236031164f56ec1d097e76dc4a42c103bda77202f6b2a27c83d89780400a105c988861b156f2b29ab0582bbe5d7b6f1428c09627c65040660c316810070d63c6ac7848cdc3db4b9e9c47198c8f5629ad9433026996657caa55724a3eeaa58c3d3ad471159c5ee77408211c817b7a0ce96fba8d4d2463baa49763acec037653c61e258742aba46f791dd8d59930ac431e2c8bfe837b9c7d54db393527d539d5a5cb118cbe43e1a58f3061178cc9387421beda501b6e65a183e756165c3e15ff621fcc4730898c67b258291b1620e39927bc9fbd83b0b33ff6e97326991ee774b8b1e0af7ddeee6518d7611a6fddeb38090d429ddd290bd4f972be5dfd194193133061bd0cd8fde944300438c6fc0c9c44c4830a3ef319843ebb7c5d21d8cf39a59431460861773ff651e516e43d951b108a5d975b10ec319b224e47f03449f59fa0efe057da4d6f47bd8fcfad2c923eb25f4f02217a5755636441c4d32b99c2cb9ac724637eccaf39903126a3718d63b1f4c0884e9bf6a43ef68514a8b7904593a76e81e6892bca4a9ce5a90f7ef04def3047a1bc183c4d01f1b48636c123207c573879e81a7f008e81c59347246311cab0dad2a7b8e7bd3be0c6c22132d9cc19964570af0dbbcba05f81f4ed3d9a07ae1ab6a77aa73bfb353d908090d1961c8cd468810fbcac60c59b8cd6aa38856d61c1faeeb6bd03cb78577b6e5dd1f4d049c6335b6cd700643c93856dd7b29ff7ad34a4b9f4e66678df499e5f2dc3631f3f3c2688e69863ce3704a9074ac1d7b88efbf176cd2fcf84607e5d8febae221b91cb3598f9e332bf38cde156a4fa7b7d9f675cd73f6fcc33a7a4fe0f8c83d5013da1f9da07585e46f150cbfb4b328af89ff7b2e5054cdc8274e46c8ac828923cbf4a72408f3f3c66cc182f22f494e408f3d05b46f19003ea229da4a143292f50f6648079a07e081dfa43ce1f287b7621f9ba29e3e6914884b0e23b217100fdf01d10ab034bdf013d61fd7c07c483a47fde85408729ae585a7aac49cafff0983171fc0f1a82f0cf67aeb06dc4734b0743df539e5b4a4caf7a6e294179e833575898c4736b0756fc3b7a6e89b18217c0732b8c2b5f592cf8926bc24933d057d2df0119de3f2d16be139e37203fcdfabeff36203f91c542e3d57806f399d4e61684bbfc73c87197cf58ce39679c3d277cb3aa4ecf751e6a3959913db7b41cd12401c507342891832e9aac58cb3620b703821f9b48654c26b68a3dd53b19cde885f9456d4df63621d0cbc7566940cd0f9e981f4b81af5437cfb79b0eb91993d9705ad5aa78bbf7d342957c81cfb466a6b05d955e8d3ac5cdb4ec739c5692f14c0e2cebc878e68a12334df41661b6407222634d08eae056cdece00b2f5744f9e8d2e117ac232d78c104c71803dac82fbaa85a0b2e7c6125aee2185b9286f44ee7382df44ea772a1773afb82cf0a5b883e3a0acd2357647cc75df0e091bc7c1ce33bfe5213e3434b240867f9e12616eb81665e3a9401487b23317ccbf0e380079a38bd136560079a4532f0257c3b733f0ef8f700a11e6f0b223be86f0bf2824c6082257449df15849c78e61ef576ed49e8eda0b37744e0b52972f9e5ed1ef786f83c738fae1bc2225a7878c931b7bc70e22527dfd6c011471c6f0cf760970f1072e29bc53db859cf1b9166f2cfb52b8a8c67b09cbe7459a2c505518b0b286d649fb3d72b7b5a843186156818ad32d8240b358656597c2d7062456995c996134e30adb2d9c5102c305a65b4f5644bd22aabda142c1043b4caaa06391b24308b2584c0b482cc1852184720ad9a88564bccb3330dc42ebe987154ce1b5fd7bd300cbb2a9d32422958cc3ae763ad589665d83565175a65a416a6f0b3d25a2bbd138b4cd32af7d0abcb5cbb976b99a6691946a77c63741c478561b005307b4f6e405ee6d16b52327618e6d533ef8d08e6104896dd0ebba6e47022988c71ba6ce9a1ece93c2feda2359a14cfb04956e60b3ba383ede0d2c7191da4b402ccb7b434f9813f437fc6857d4016d82eb04bab20cc5ec73e41a5ce94d807f4ea46a69421c11ca846861465a049f02715db6548482f43faa46c69be20d3d16ab536957a2a6e26fb846c317af7ebeec8c3a0c35ae7c45aad8ddcb78f743affde7bfcb4c73ea08e9402599fa1a2b49df67c0479549dd30ea5a83d9a47f3d66a384bb793ce69ef8c876f8f58946fef1cda450cbdaaadb4aaa8551d93faa5773cfa6edab75ed6c7251964ed12be6680a5def5afeab13d7677e4bbe8d7bc9df653b6cc9e90f61984a8c78b8b930ae613eb66a16f7867107aa1ac4be2ad82f0fa15a4bd5e49e8fd08f486b0d161744b8b32c6e968f422a65a635d66c6376e46611fd3b368e375629895524a998da0f5934982a6a39f3ce8140281e5a1d39453ea957abd71daa2a2c9ef705ae78debd881a55c5211e6598be71615427ca63380767280c73dd383ec70590002e83cf70108400034ee3ebdc8ead333d556e49db011c170304ed503c334e9d33359c27b0048e919cf9c934a1900e900901200524a13e495525e290320fd92544ac9f59011e99897b00591b79da0a03514984a593ba7f3d86251abe66c5afae95a2ae9724eecaa1e3dab1b904829a5d845fdba2895544e2d8d1863a4554746372075527ae375ad94927ae549e994d4df8dda8cb1e5ede275d14a5d4e3aa3943326358490cab4e0a9ee969cd55a15a3dc988d8ca9ccd64639258c514638dfec21d2f81e9579a15519d6af524c460cabd6c89820530ba6de321668d5959ad3a78d7023329dd239e9bcf24128e18d31f29b56d8686263094b4a08379a5c1ed22a5b5531c6b719997e39bf28398e5a17a163c68c89e3676c9e0ae6b9e58696b7cf2d377868c3cb73cb0d2cffdc7203c8fb68848e1933664c97ace3ac9876b233fcf8595983ca7bafa1085dc418e51ce1b9b5861994525a2f119860189669d80bb66d3ba12610d65a9999192a3434343435394e4a8ca089208208228c908a53e8d0482081041274d8c83cb7c058b143bbb9b9b9d9b1653cb4c7b1f3066f6b8d2c3d5797c76965740e2068880882121a4c354081e18ee39795018341020d2221a0180921c50d22a35a2b092a806d34a1a0498aa6830941600a02181a1b688848c0734b0d355e84e7961a5d680da2fcc73d5208bf844a03b841149610489ce1861a6c86194ffc10c40ba2e04107ac8c71da2194efa5c37f3641fabde482f43ff9c3d9bc799fbc3552ca5b538f90f8683952e2815e58b1850b561532ae58b5a798478887243190764802074b6cb16a77e611f241ca1b717451c3098690b26a5731cf04549045114ec4d0c1124258c52a32c689dc331db6a6d17ae1bce8dc0da7b88655ac824e398d5510c227c46f525ff3e2850fc21ba37c856430851aacafb58f0a3296e6cd3caad10d886dd9698f09fba81b900d62cf847db4765d1f01f6d1ceae0003643dd527d500e00560ce7e02f75c32b6a6c6870cb199a1f19172880a43686ca48d4d0fc19d992b03d44050437cfa76413fe3fde3a18e08ae837b763874c93d370e7dbe05d838bc1d0c293c741d2e83dc8f210b85a0f06307f79a700f05eca3dd867b35bc02b4ebe0de107764a66ea71ae1762ec2cd51738da8f15283456989791c704506494608e188279258b53f26e661006b0d2e8aa8d283d19655d3b80fa4e14e3e390ea85fea409efa83060596bf5528272f2929e9488e262c9224ad6d60bbc782ab466a55eb24bdf7b0a4a00756bc2883d583192ce6082c5bb088c021c988d370411149e440e4058d1f18a9082d586288c882850224d227d743af9a320489ff13f4d289c4973c5f93168ebca4e7e525bdf7e6e3239f1ad47003064d3e8879820d2116ec6005131fb092a61421c9818d2f5264b0832084d0801cb6ac4104031dacf1041ca159237cf792b8fbbde0fb3d102ad4c7748cbb38c83ea6572eb2208fe49ce97df3821c9375e79cfd90de518e2cb6e3a4c73ad2650a93f3083d4123071b0c9105076890b16a7f43cca39d9103378200833784588379847ee081194f38a1c2441c57300f07a404e1c5144f88d0c289553be4de941661c91392f0460719e3c438fd49d99cbc3434276f37a5cf29d7cddbbdbe9323f7f03fa29ff21d2fb59a7ef0ef284648c3058d17b6e325c93a4116f9c9aa5d5db9ca69b6553107e7c4127c7c8c2a4d66b284125ece235a52bcf248adb7cbf15d9253df1af6f12c571aa4c67ed7efefdb54902039d22ae9dc3499b2e890ca8c9d136304d23e4db99ace917605360a61bbfab201f2f5eb96345bfc888c3b4b038c1b60e0600fa46854904ae9d0a4404727c7180bd9f8078c09e24a0dc840c1104d56ec5c43b305cd1651897678060d443061c34b6b0a0493715fb1354e93c576a88f1e238410c53d3a5452ea4d5305b53d70a2a5d4a59472eac0f1a4c8a265642aacad4941086118cf287a4d94523a146fce491345ea26fa54b1a5f43dfae61775c687f99cd4dba777f4da10a1deb2a6d65abdd65a6bbdae4ba79d68299d8609db39c739dfd4f981121a454c814694eff1dc3aa3e9d99d80c29670a4440a0359733448d253b6c604194dcb76a86f14f7bc254cc884f0334d13f6391b00e6800219e3f04683c5c62a8133961ee7b9f565cb67a81969b42122fdb9f448f304238d41641f11514a9a1aacfc182bbd40fdd3a6482be98749a4523a3a10a600844ef9240d0dddfdb648c991048f033a36e58ea3ea71d1ebbafe9c7238f6cae1baae2f29f802838741e7afebbaaefa85894a556bc5ae63d70aaecbf9f2da3b5ffef2541b7fd5ebf4a66aacca71be54f19deb889919d3020252cb0c251ad6a906ae5f28b580d00331b68e790e395bd3fa7283c79e5b5f88beb33e84ce4c1c3a3acf6148fd0c1c563a7fd767c853e90541eae74d12350e04a94fd236e8e84008218429083bd5974bbf9921d8fa35dd80253a535e9bf8f03d2e4a9910fe27c60edc1ffb88662099f1c4bf25cb2d32ba7ca77d9bc104f770cb8c2b9f6a95986ca665359d283c70d55cf3dc0becfd03a6ef341d18c8e716195f628c7ec277cfdb85a65cf2d1bb8bc9f879a938d36ec9cf7a4140858e685ac9cb622c9e9cf0ce5b054e78d85eb47a6498678ea3127a8cdbbc72429f65596653fdf2cd3354a79d747e4ccf66f42c137adaf51394fdc0cff833af496c8a50974e33f7698aa245288a665e3dbb2eec06a97ef9c5c347c7bc68f2d12f977edd0bc3b09b6406212349a691a8ddebd26e17f49a4fae8bb06b6036c05b3539790dcc0698fe563ef027e82307fdc4f12ac222d7dd9c37ef66e6f3769b67d72673ba5d9bec16a93ebd3ae63449adb448a5d7eda6679ed95cce36d70d223df3acd50598acb5249867d335d764908c4876a15f977d44e70b6a437481054211c5091f299c704ef6960edd863a3f8493b3a1dc053e38af6b9ed8198e7f1cfc3986e1a3f1f4ccb58f192b6c337976796dab4e804cefbe746e7f8e796f2b0839019b7b587bc6efebe54930aecbbcb76df3cd8608f6d8fd41c9c878c348e93ca15c327c32cba2461d73699dbf139241e77fde2b01eab77ee26cec10fec4f5678d71ccc69f4e5cfc8cd209c79f38d4c9b3c82fc678423977f9e6dea3b81622c34def3ccb5c6e429e675986691886619ebdef34f601f9f58ba7b6c2461693df38b8a11c6e283f9d2e079a7ff2ecfde51b27c309e5fc53c2e5d70a975fee0331e779ef4bd4a36f64104564faf4c9d521f5ea0c2157ca29794f7d5e7f7a21572184144208e14fd0f3f69e01826d7f28ce06fab381de1ca55c3ba40fd65a9d372231bc0b0fe165ee5183649e55ae42970148fb1f073cd07ce8308636e2c2d71ed0efeb1aa74ca4a2bf8d3119ab0ac25990642f08760dfaf7038522a55d50108562fefdc07ff7a7c33620d295d88721b2987cd7fe43c53019f34a6a12aebb7c6afd539b9c80c9cba084fe0c42ddb14fa07eecfe3c311f1de807bea387de3d9f0e03a3c4a8b4ad75753deb98a21900001000003314000028140c8884228148301c136565ef0114800c8c9c4078549609b42087519842c61843882100800008808ccc0c6d400007dc24b134bbcd15fc2cb8023d2737381f2a38c0d6c74b53174531d5fa07af84dd27b0a87e603e9d322b39189a94a4768a495cf0e7278877827604001c1314a2015aa994fd0721df8a2aacbd9813532b9e434be01e8032d4a8320e14fe7e3f7b5bdbce5f658e32412d827ddce951e3552019f5dd142476e72cf4cb9a2a0a30daf2b4cd7efbc140c80150dc992b514229bb477e82670fcadec11e230ff089b384a5feab5d9a7ce49841fb2ba73d08261d4fec39f1ca31535d85d260fd78c2533c152947e36b61b2978ab4ff2793630622d9674586506f3d09845d25cd7fd434135a03c8eed3fb2a9b228f302c9d5497256de3d7291f38954bb68955242e1d2b84ff5de417ec77269f33da46f609550ce8c54f91bd49284100e1f9691f0bc4fe1efff3bb9ca17e7c7c1c8d2e63d98edd557beeca7501f6fb50c6b1ff8cda90bc9e13384bd21970a3e3111798421190c192fa447406ffc887570abb2a7d572d5e04e627ef1a23ca530b7e5f6d99f9c8d065201bb57e37f91ff0b49cf3196d2743d4b7b0b73a6245034674ed3cdd6d45b32dd332c54bbfd7f9dc948a23e25f0a6785e311d00a8885eb65af87ff00d10837068695cd7f1e658c13c67007b5f44d204796a77b00c1d8c9e7f540566575f82b9f10022d4147a7a1efa669caf914f6c3d845253567f96daf06e0c15a22e59cb6261ebb55dee751762f701c0c624de932edafd9be19c4423c9024cfdfe26c7ab6e67f71c3a7a88fdfc0067137c64dbfa0cee47aad67fc0cfe28a5c0140ad1264cf2379baa2f56e0580ccdd57b1261caf179449ecb9498198f9c8ec28af371c4d3a8f0d6c1c66c58e27a7ce4a0791a23578c5b0a6598d2fbc8306860e4018a8a18f605a5439aa96a22401eb12fdcc46d758ff16ee48b488d2863b21986a7f4553813b6bff51ef83ec0adfce868dfa4be700ab97e482c743d9e3c817813ad955a8b067f64dcb8923b05d6dbc6321bd885091d07de5c32595295955def6099e3d30bf7a86f79738054debec59424e68e0f674cba6b65244a0022b82234bd385e7ba010452e449fe2eed580890e7f5df3b7a751b3065a4157f1459d39ecc2264a21fb753198a6284d73f853d0e39c4aa3dc183a4c4f4233d7e12345197cbd025a06ce727aba9840dc5731d1aee0c96e0c7a134c830d25aaf0c68844f517e3aa571319cb03ac4ecde53821a3fddd657f3f9cf1050a20a3fb997437ea8daad1356a8db4916de48d88376e41f1de4a10d67b9f3e3f3c5f42fffcfe67d816abe160e8c37d48943d53f3d89b540e9e4861d3ca5cb01bc412a5419052f6cfc8b93f05b2e3683c666b3cd70cc1858ed468b4a269bc4474a61b2582f30824f6f46747b8871df4c8762368ccfb4bd7063de84c83ec3a1a8f9966cce57cee4317e97804897c17ac7a31f74789f83212473b273b5fda08862368e477647fa24270cd28f2c1adacb60df74c63840f499c26b4477b6585b8fbc8b3a930ca20aa935338ed000e6d69596385a0d1b0f7fc89c41f682648fe5f2b663e6bdaa2c2219326738a4dc20ec6960d9bd0a4b0f09ac0b03746a6253ea6fa2946338ba66550ad2011851e2041a884af2452bb03ccf25a4c5f4090e1c9621e18de1dbf797e5117428e66a081e9a70bd139326c12b13cc1a235789705b995e759f9971e752a90941c7455693b4b9183d92ae25b5da5817a33533ffca8f31867521222baadc733f27de65c93647105f85789b6e7bf2bf70b276c202c20634ca363f128d2fff138ab6bef916217d4e475c509d03409be9a71def9e3965ff83834a4fae1dd1cc82779c06e524b20265878913dfc81cea5c00aced423e10d485c36a20a1d8b503b84d2ac529aa51a2c0e9ee948034673af2bfafbce2aee2729721b8810513c4659a129c465ee3243407fdff9546f45e6324fba41a2f6d228de0a511ff40a588b7dd843610f66918e0d102bbf7180d414f0fdf1cda282948fad9439cfa9937d6afa7c83ffb96d52a96a3191125b3e94a9d1f9be04f35a6800820997115c83b86fff7e5c479239fd5adc3e38c08fbf1971e782b8835580f69b596752c85e1cb40faf65a60dd414ecff7887e27260f7418efa05ce7ac98a7d70f5d1faa632109ae025446de42837174281d2acbd68f2747a2728ef1bd0a684444504524a311df3b19bb718b0ba012d1f7f5a507e0f64b5f42c3325a154b0bd019ca79adbe7613498353c4bb44e14f0c4cf98f23cb150156f91022989823811f4d0013a9fbea76b5022d52f01ebd5ac1661c0132d2761b0cac30092f91d7835f4a95282251f3b45821a5e0e25fdab405d07ac0454fdc0ee31c04af13be20402df3478cf6dcf1f8d9587fd0111ca6a5ef81b7aefa3d84a7b32b9d6f5df1fe93b9f59f1cee2940bd1e940eb79b38e842057bd538888f8de0076ae113cecb09b8cb56d8d9f314b13a0c5e7e2e7375c1d41b569f9c3efad19e78b494f05dd06963fd241d92ec70712e5fc29d00dea076fcc591766fad1a77f4ab1a209e9260ea48959f21d3cc6657cc69c819ff3b5ff972de96278518b0718e717ce1441f1e1f4bf1a3cff96a702d9ef7866648d9312ab5da50a14d872951e482dfdfc142e047e9701990a73b4d63e540c72c4305f8b76a490a9ada759053069e2151223f26e7b2821c6c3e70a29734294887a637442b135a542428bbaad03a5aed9c697a4ad1b05ffcae6a04718bd4922f94a640aa8d8f5172748924b5cc22c8b7da5ca6f7e1acf02699c1273b8ba1a1fc57b1165d686bb6cef0b8aacaa0ef5c7942a5cc9fb753f9b83999c2de8359cca1ee8298af8c05f9537bf0b13672acb625734ced42e4edb7af41dd6e6436041d929a1c1c6ed952cda299b2387d18c1e8c4ff96d41e283759094b81e42fc8f6e69001fa3bdc4b411d20b7c7426e402b5f1cb89dde33b565c1204bbe440d6e814696d58d46391d842ad27d2a89ea75c511d369752570b88f3652cec4adff5260ba5d7154d6ccd0aedb99d3f2f6043fa030698610fcfac5aac48ae47b2ef2e0b513386e1684f27f495c6cbee171b4365279b5bfc54f2548d25a79869e60c37162bb702b3381d0ad6c8d55a36b8aabb456875788257fdbfdd7e1e2d8a7a44560e0efd8e29cb911adb4a0a9dd5137b54ab48c3017f7e274f4aef6770be20caef26699554670cd4c438c3964b9b2b86c2150846443ad0d249bfe06faf863212806e145393ad6bd29fb1d7a0fa6b7a727c404b7b5a50c802f3da3813ee1c3fc70fe656861d5f14816fc992b26ff3b5d4a2df032e761d9e234accac1894abf21a75e6bc8667515c88ab6a22917ba98c2dbef11728d686b192299a50a5332b2bf550de362242a85484da755cd748a60b73511f9e5192a17f4c4a4f9295370cb5af2fe5cc543e2da158aa5dd47bd25ff5eb1444003e8bb9d9761186402c3c958a9f001ce3bf017056d56fffbdcfd67dcaec38cc11e1baabb47fc38a723c466d9c3b0100ed901b07c64399839c09e5b60c25de0dd3dedcb8430ecd0ff16eb77a875c08856ec2ab7f8a99b8cf6024a356486e3049defdf943d9f3d13ecae5917b1840054965fe0ddc682616f194ae54164fe3928bd291c17e5857f57dcfd7942b1b8b5d301dcb7eb80bded97760e327a1d1ac57615ea814dcf52d926adb915f7203f9c0209720f4d9abdc603ad01fa22567425b9001067f02f1b90fd8c877d10d49409f65c61eee143a01679ef643ca0e6451f3d902cccc520cc53940724b22e11732e4365167db53d681266b803c0539b950a6cd8ff2c9454907c7b36b003d2dbef4b38ef2102bda620618906914b248de7ea23dab2829cac0740bd06bc9131f6c5df5dbb52ea369ddb5b6b530336f8831ed5218ea57805e09cbaf746dac8e40573330aa8afb6558ebe4b521eeaea4060fdb065f46b7b1d32028e07251d11abb68e19ad68aed888ffdb372a8eecbd8ad0ed4968ffea22c24fc39792dc8b1e4e0836896816971636a499fd93ccb6dc6e0f049145abe0e2d898c5765a29eb93295a24a5b31fc5125566d6034e8503ce31c6971d02578ef859355e8a2973ce8576d475d890a4d8ef3c45d25dd859a1a864f8f1ccbc52b0d3453c22a7d5954f5a46d79c9cb6d3a930c511283b8aa72a6a3c8f2db65923219ea3366e02a0a804ab8d9eac6c25cfae9807468d78ae8d6e4d16c012b50124eb17075b491f88ca0b9194fc1f36be8709a3b033024981a60b6c47e6203539d16215b3ab95bc1791723e3425eaf10fb8f46233afa8b4941f5e9fd24cbb4b15c1842297276dff5c6ce8d24b467ae06069300e8529c1c6cb054b7e02cf2ec74493638302f96b7a761ce8c7f39f552d789dbfeff0ab3bd5689ba795c76b8bd176de30b15901528079577bfaed77a07a39174cc913defa28a343b6faae4e3ab9ab84ad511cb884ba6fab2654e745313a33327017d1f007a84ac4f2f8857648b36ef36616861423b42612fe80e07d89e0e6a1b813e3faf0af0ebe1c99a4a61d81e42a51a85cd919555a820dbf5f0ffa777d9315bdb54394acbb9593b581083c494a4e027f37f8144cf17c5a188152c5ff0c2e568db77fcccb610aa3b34315742cb7ab3688cc9d390adbd15c31531d9ce6b8160343dd513ce1813ff14b9be80e4c83b65a8f211a80de78f05ff9b016f2bb9881370b673a0a9d15328ae1992032ae2677f441dd0952d39883716161c0dcaf8d1324411b6f2725692c74c4124d9637b1df3980ff5587484675991a03f7ee623790943cdd18e6acede1aecbfc221ed4d0a86c1a2723ba2c9f8f89cf8c3b306a6846859e5b50f15d5b8e8ce2d1210d4bea2a082885767cd26f2a2c72051ca7015df1e636722ad61a3fb8750e54ea3f7fb92e03df1b5e779ec01f82f5b399f920c151eb56a9e1e1536daa77af30321e2051fbcf60fbec5a33292f46ea0eedb324b77a7f7433952748bdad67e3ef27b50add7ea6f3032139a5c88f6b7e45817dd5c3de79bee7030ae67260dbdcfede5d9522038e44cf7696bfb2ba30d43bdce7268d009c62584a08c6d89b342e236d41b67853040c14d49901f04aa5452ff903c5ac5b100fa6066859c8302f5dcce4eb8814d8ca01a9fe3a4700a3ce7e9d5dafa88978edcb8e1f1a36c7a8cf0012707be8afb4293c05d824dbbfda4273822901ebb2086cb0f256f38508cf4f003f2e73e5d69a40dca8a6c15753d126f2c82e502396e594f2ae61a31ab3b294b2e3ba983899ac7c0a0c4e949cfc766ed15b016e38f570108771108162b7c434a5ad239c134bbf0471ad0606a23cdcbae2c5631cd26abb8cec966bfbfef2aee0a0885526386dc92511966b8174add69867d5dfa9ad6198984fff0bf8d2e10604e56769ff034a73bdf8582eb901d39f6590724c2d9a0d45fd5b1472d18c22bd8b232e557bbf0c935374bb247f957f9afe61ae67e6efbe28ecd8c04c304ee0cce24140042f91a14bd8e224f601777293c996bf07e35d49d6ac115155bfc133819b6b7fa2c9823c4f95110d4c66ea7af45693d907a8d0971f0714eb60aab5488ad5609aa5e0a31b15456e24b656e3de5835eac1a75d8da642a75c3cbb400439883191c6585c27247216747b17fef6cf4181fbd4494fa7eef676df2e2579b092c59255f56ac3cbe178441d819face303d8ef0eb35df0f60ad53e9e90806dbe89e1f83daaa9fe2acc3663899b25be0fbb99421aad8b5d7ab8f46c0a39bd714a50b49f51bf0fef86de317f0cc7301027f5df70c91485bbdc20ef182fe56a871a3d7b336ae4668f6aee28f5c75a51401c6c515578979f75dee4f795604a91d42dec5581a0b22b719219c0f8fcc9f5de9c40222ba75eb63b259f41b78b4b47a466cb498d7bae3e8c92efcd42730b44605fb4cfbac944d7830e066ce87a54eed849325d73c3f6c54ebf89e99cc023c09b91e47195e3dfd951ae9cdca89a6ab11e5f124046be31d3bd0955ec79b92f89d60247a35d86f1a64588109c18719ce8b74cfb3354ed7f4ee5ace2cfe578a914e9e8078f07205e76481d8e94fab3e54c1184b32bb1e5c84173fbf55850d310f181411b5b08aa0f327f9af9023201e06d246d1d0bbb6a3014f22c60fe46dc1b4c1e453d7586a62ae3d773db9e21bb815ab548c6477732f341b4aca1588c9d9fea25760ef6733b6e377b413fd1e2f7ccb28543dc13411ab1285327f1f33e461d766cf1387ee3e63a1d82458c41520079261498ff2db00d7af01ceb74516ba44323ddd482fe2e3488920264a260cb379af0bac39b6d6fa74aea59f42d820c9d1dabe043dc79cd3b70081d5a28f59b1818956b6456eba59ada48a0793aecef9b89e439782e371e669c29660e527eb1f506ab0724f90e71981abfb5e69569412badbfd0dfb26ea97724ffb8a304279f568c045cf3022c9bbdfd5cb4c5b5c65013ca1d50d9902f316a08f31c340194a8fc08732cdaf29c3b497efd7c825304525bb89f6cc77512ce2f71ad2abaab2981f09d78b6f7faa822d79beb6f0d2f9bcf8bb3f8148551d2c7cd05fa88e7040883de2a2ec48faf2636dfd4b63de4d54bd0e780b57e96461e242cb5d401fd99b7b9c6af631ffd33dd2c38f4460fd407150c916acbd20da45487530088605323fcd5e6cb1fd1322b41587a529ac075e698c956cbcd346385f0fc50d7dde586741bee6897c47642adc48dff47f7bf608c8d494c0dded994c86f4f1b61f0dfc62e26f56dbd5579eefe486584bdce79590050188e7a0e43edf941ded2ade071cfcc766a867524933830160c0655f975ccaabd179d275bcec68b865b1d87df8a57878fc299a56f37c3a0500f3104d078e4dcd4507ba8644ff2172694e0dd2d09e05f1759976fac0fd9fcf89635bba139dd0f12a660f9dcef4708341e6d37aa59093f530e6b24cad47a451fb2e67c050a1fe2157d2804bd2e51531463bde331ae068d6d9007a984811ddd643f2b96b73e9ae63d82bda6d69c73cb7429d4695faa9fc1e3e76f1d42347d89929929f9f22a05e7f1b05bc71a13b9f7eb0959b88cac8607035f4558b89fdab125e0a1cd2f23f914afa03bcb67904348da6dafdc9d6f578736202234e47f8fb6840d375ec167df63b8296a900abb6a05f3cc92bded9e802130a8e8a292956519fe0669ecb371f15f5eba022275065c5c29ae770334d2f5c62ad698347db09867b4e14d7bb264cde98a5dc108d75a8debb1b0bd18961a79f624a5fe45000f7deaf66f7e38d284bf89ba9daeb107b4354ff7ed5842b64f7b1770acc1fc1d5606fa6efb28fe2daf17e3f9faff5462e67de18ca4325589113945fd4ea25a2ca748fd246436b6292455f53f63517631444f965d63338f94ab682781e7b1e7f2c1d46ef28b18c752f6733012678f079e3552f5ed02b95307d98cb3314621feb4f8f0e8073841915d006065eb69ff1faa208c3a7fcb8ee5099171aff29960111b08138a5af4f5eb00ae6ef2c0ae1639cb44ffa473f110a979b9e2bb10c12750df068d4a05f6c63c600f7cb05f3b90072ff538772617fb303f61722e79f95bd206f3a5486871b76f18155cd5d2ae7c9a2a6201ca846dbfc82ec782c91ae3d65a519798efceb4c3a38f3ceafa5925c35e2dce3cdac74c5ff6685639e8612a25ac6a03072662fc264a13faa7f64e7327085362fb0995dcbbc8518b5b64fa593cb9baa71fb98a36d4f66d4a79e686662b51c8a9886d1ff3a85c4285197e0a0c79782221a7dcfe1adc082ed98e2c41f81ec9e1923938c9babc08763161442a11d3cbcb349d7109a5ec5a56c67def606df3754983c97a82d213e43931e37d8f093b12e588d7c52d9bc9b68e112935b4a0b86fd88f14cf48da4960d28251244f8d9e7a99d82b8b60e883d0da916ffa5a6d28f49941fd1da69601311ea38d639a98cd37eccf21662331ac7d4fd6e6596909059d50830cd6783f90b8e7d2e55855b91d2208b5d991a1208cd359c60d42c6aaa5716ba836b9005e910c04f19904e035ae68474aeae217a378e090f0f0b56781fa114bc46ed886129bc34fcce465cd55be0198bc8e9fe605666ae0e4b3656e8e3030c76f42283b693d002ec4e9aa98ca5d318385fdcb41d56994c4ac2ad43c402b762f95d8107097781793bf7837689ebde5770781545add9690624872b9f863a519611083f42ef6e6d96990324104f4497e61cb918e51c09a37af5800db5c0da7b47cbef4523db385c077736333298c5b6dc434450127b771688869bb22ae3246b3e3c466835339e88e85987c6745458c114644fdb2008aefeedb2bfd5b083aa2a4761ac2746f61e332491b3420c641c2b18587cb060d142c42d4396d1862930a190c613d8706651001dd52520bb1447a89256cbd7a144d60503a9b4397d393e8956dd041f75ac1bb45851f9b99cb76cb8c748981ac3066b89e82aacadeffe6f5140e573e44299d8d989bc6879d01d4f14e19bf9cb2b4d308f259d36305a23db2abcb840a50a7f1b0d11d2e9c52179b8856e923d8c378b797fb118fab07adb6806c45159a493cc3aaf9dd9384e88028443fd938d9d72a8d832c93eee7762604db9fcb915a1db84ca4618d82cc4370eaaa9794eb2b6c37d966e1c10d56e88be2cdcf17d5ba88bcf044c86780191a8e044782e6092917d87014f39cf7f051dce1d85f8c5ac7b10be99c35d8be8e7e97d34d43a6484aaf503ada8a19edda11b982e429d15c98734c7394949749b6aee224d34e82cd207181ae37d35fc581cf592de8b2ad192b2c80a95fc6fb34cac0a1d5f6fe42320535f952d08dd845c2871c6ed83275876a0e37afd8e772493207afddde9a800259940057124671c7cf075b8739168ce7e1f109215208445605207e24bb65c55425701a289189da527bb35ecdb82ad175ee48ffe75f6bcd30177c8c4205a8b55bdd043150f4dc550b91a2528bce13384e86f859114704d7e9b397035016f36abb384462b53143671e2fea9d693988ecdccac703e0dcf71f8b6e057bdfc9ffb91440dec5e0a2625280e4baeaced7e4e6536b5499ddb4e501635cef97cd3d3b2684c3e19551b24b8008275386406626221e99deac78c415f0dde0427e3aa58523c2be0c68714eed5b1b3b396c125427d95c423a962a9041485e68e848d5804539740529dc2b20436e732a0c8300ef520d96c025ddec66b2014f6ead4545891242980ef69876daec4a84d50fdde6d2a0880e6ab2bca94ef2d173cd2b55c5c5f564969f5ddefa32052ada18a04f074cd8246b1ac567ba64d67dc605318808309d9059e8155a1ae4016a7fc047cd81e3a88bcba1f026b7d8e39b3f9af70ca12043165e441b59dcdce0ffeb6e66ce34283d51a25fc443fcc3bc6b54712bd7f90b10060eaa0e6dc59833fd8496af3b42c1ac04c9e37c4858d7e86a5788bccea878a2d68f88e24cf0fdbf8b5bccbcd6fdf21f33c9b35401e07c6dcd0cac5c9b010bc762b4b8b1d9800c8d7c7d8e1e380d877015b23e55f2d27432a6a6f801c3b36cfb70f825d2ea07deff6311820d390dabda5db80740010291eea2f35a35836221264258d81e890835e6ab20a81cfb7e863092b22a17297d8408224aae594b7ce11b85b2f5634daddc99962f5a64bdbfabad26b78e4e8265bd556450cecd09c4345b4dbc115f1292462caa42aa91880542a1ec3819f5ee41508fcf5a822acf38da4b7328591fb11da0484b640f676b5a11fa7bf943d0d0b2c8d549619b03364840874ca6cc9e57bd920c2cb43646d4a5e079f5abcac2ac4d6f2c3e83bfe49636641421197040d53b87c0b2467ccba09ffc20f413f4eb793e7172adab61d5b2407172f454b9899efac45445a621058e07815b95d345d7542f5a29613ff7ab2e1c6e87f452547dcd0538a9f8d8c6234c56945e64ec1dfc95dd699ab388757a3fdbe7024388526d2fd789aeb2ace8f3cdedd0d4c1556945e60b5979d60a99f1329dc19a77417ca2d96fd71f17af00b2687ba68df69b97e4382c8e0fb33ff2785dc759632e0a994797902da683582dde6ef60cb8e35a681aaf9346f438d8bec18a52d7642431b958c75d7b66b280e468ea561649d505831af64be326da7a2d928bbba851ffa45b5958c1946b452a00a7aab45c8f0e353a972f90dd0a43a7a0808f82f6fd6fff256ea01653bb9a0067567db55db168acd9d19865a9cc898886a6aee3e88c81be5895134709ff88f13fea614b4717883ed89938bbeeb9cb14691f9547fe1e9cc2cf3a268b0d57c07288b9271b008c73004d1341178fc3e8152c61553187a952eb79fc5acef31afba6c8d03d32fd3dbf0c855f3c5650cc9ef594887b1bd4cc47892a284307dc23465be31e2b5400a2cd2c2b5337b9738a84515fbf8c7b24713ba2e013fe5b708b59e3d1ed34c92dab26df8413ed2c1ea15580f035eaa08577667d52d01992c1fd1105f90675fe7a9c101063f5410d5fcc7c9820911b99844a78e7e6bde279e31c5032b4a5772da5902f9085f48441b7dbf605e5707cff1ac81feed5713858969979d9efa374329835bb96efbf3359aac660500917232416331fd6b1148afde69df4bcbd8f29aaff5abbe1607366c0111b6ec48812616a5622826533a792880642f8ab018f966b658fc44af576e5bef258b637f952882d4260d1beb488b490e557a5ea7c15fdeb47a7da53242d077e3bea45e662f55ad9be526323dafbd1b4eee147fdcb45ac64be4a1fed68a1760290eb866070e0b43c7091a770ffb9ab922b2d0e856b920072ad0cacdce79073361e80710b9ff2c0364acf836a9e10e68b1be2aee71d5902a66f2ac3b933b6e4e9299140a4f59da15ddd91ddd4cdb66d2f132168833320179257586ab079bcd6b493bf45dd12aa2cb00b6985132d3b54155b101efcdf077fb9cb3247a7f5c4acfb71a1f97d6e5eee061951e1b9d4ff7a5ea50290d90918fe44a336b4a0f1f9cff982e45e5ec8ce7763bc7fbacf8430bbcc4ed1e5f33d9481e5ea17731d5a53c230e7fc70ea4b938da7d703e919bed55246c39405369a3d954a063c2a91e30885c4b14b0b9a470ee066a7865d4a34cf907f4de71bbe00affd847941dc0c5b5379fd92a6b25b1fe0b384061e60662e91a4b717e0df2bd6ab8c2a75c6bcd9d04721231f43171504558d3d7bf1658fbc3b7441b641ed50b980a52f426dd8fbcd2d6fdc0f83871ebbdc150918a6aba854d0fb8c671afabdb9d34c7ad0782965e54b2c04ee3869a9809e990f961fea3229a2626232f186ad8db1846f06821ffa4faddf04fe5ce071f74350f591f2557b6ab2995946c35d04f93dcef60e7386fbc8237b58fc6db8d2880334a8536e612dec7472cf26bca68934393a9a4b26788e25ffa32ad76e6e900dcb20be4799f006d782ed9fd35387230f2fcd260943a73ec848f7d70efcd7a6df8421c0922aac1bd3ca93ac8d9428ac7944923f874ff34f4648208ce4a6a25d2069751b4819ad515d2568178cd520e9d184026dae6ba5273452016f5d49fdde10fa84d49cbd6679b8bbc2fdee17891eb32f8558d0f101a3c42373f74c64f95a4b0a108a545994923a5538f97b33dc88da0789bfb27834976b7100a3073f0315be93b6d8f48fef7d34f4cda6207228340ca734da3210907ec57997b53f7aa99647d80d1cc5cba162399ba0973318777d199a51a98b51cf7bed17708ab9ca12325e3019780d711ffdca0c1cab2a6ebf3f03a1ee7d7802ca74f8c490289df28fce50782c381af82e335c8e757a562b8132d04a55abfbeb609baa065a3facfe448c6364d04ba9e5429c355aa1913c221f5b3bb1b218cd8f6578662749bd028161d6cf30f3b50b1bb3bffd9f2cc8122c0546aaa97b60be55f970bca69f9c1be5d5e00d07dd7075b4710c8d3b92ea267b269901213dc51d9a20f1ff416ecbf2cefbaa554a8592fe13047fd9096f53d0e01a964b1610f3aba38466fa8096875c0baf123a3374b6ceb3d2ae20ffecc4d481229e3915460c5263f8e4001d395c637cf149f8e9c4eadf8e63e67fb505ade958b5d3328eea66e1aa954844cfcfae201ee44f822e109ad2c7d151320437162cc264dcd1d341d587b1829b6f29c2a762b1658a3e5087211dc22b8b7cfa0ab84030dec2121238a2d4802e175e47e7079239aab40768f4652836a128a73c264b626c890c409d52722dc70c3de2311b9167f893cd8dc1555da3da18e8234fbfc3e981c1f1e5e09fb09de65874f27ca13a73b4ff0f449e2962fc6e4a267eacdd7bb8b9eac53b0643a42ff80a33c0a068badb0d202aa53c760b5906fb5d4aba579ca362d8a7b7020774cc3cd0689799e8fa2d9a0466ad6876288853ed8dd7b712cc9257d94bd6382a723e23afdf7c7424418e4baa4a5e4cf9f3418683ce950ab28df2f76dbcf81fb7eebcd243ccd9cba6e408ad160e16d6591ca4123d1cf3ca2c5cd6606f4df8c582bb68be6d74e086f371138ff688d9743b9e4482597285e68e19f8c632f9bc054944c2048b72a3dd2d3d7039dc17b99a0e691da3e5b23c58292359cd3ec48a3a5f021b3d5ea161a442adce09f426400a96fa6fa49ea4f35b60d755a329e5977e4bc50b434ec5b9f3bcfc471d7e757ecec4d948a4e62349747283d5793d37ad47464228f7b5068e84bb5b821a4d1e94d04dec0dfaa6fd4079cb9f7c5d14844377aeb8269c6988ba12457e603b4b1ae47275339d6126f540234f12ed6419ce2b43f21b8fcdb58ae35fd63d70ecc2b10ed5c9e779bda0ef45a5fdf06d68ff248b5e384f662b9ce34a29f4124c5a7330e6d2733b962b454a9e87fee12087360bcd6e5d0d31a6d4f4a7ab3fbf4383b0e47bf9ac8b74396a35a32c55c07762ed157c4d0c8bc1d9b99b48bc2459e7b3fb1cc03c62bf3022530d868660cb2de2a48188b356c0b6f93f368c517712740fe58c7bad04a1a3d19f01323002c5a62961cd5d309ea7f1737cd065bc69e0fb924ed7487e98a6dd83d82b0ce38e1401781d50bc4260d88ee8ba3ea144a3a4e8c9d3cc3c5576c4036857d8cc5b9eaefb9072f8087ba43fd2985c8515d3c75f021ab01ab5d6067ec2dbca17f98dee4ace8b031d22c4efc380a610faf6efe75eb323fd4a03a83c460a1283b7f6afeb42e730623f7a90f50a74370a4ffec861062121376ce81a87802a5d2aa3d9e48290e9db3fd47e893a99f20d739089d1174bb7f607065a6c5a658261d5431c32334790ddcea9c1b6426552be09ea6d9b63a16cda55e637f53a1975a831bdefc394597c3643985aa2acd2922a572774aa303ca1304b1bfe8bd0b11abb31de6846b85db62cc4535acde125ebb4ba10116d2a1fcb23d90b788ab7731567901e74163d6af881a68eda141f909b6b3c7ca631780853618be502f5720352d88e8934d90790337a75f0f4af0b52c62b012120bcee2d9a9239ecac3b581cebcf8a2cb25674075466b93ab1fa3c6ed9c8403d4bad0fb4c713e272e30e8c96b5eeb222aa41f7f33c0cdd7865bc3115ee0c99ec5aae0ff20448469b3415fa8de2387a8882000d147b3161b587ccc4f0201f8c926329a18ff1a84969538fa4445c5e826b782af1f57d265a9c7be63a0be6cfc32025037100d31afbfe64ce06cb279316470824abf2f3de4254d5a972e739a72330960081c8e10b94936168ab6c162b9519c1172bb7b25cdd872f92038af20efcbf71f0f3f5835f5ca8d7c0c9b932fd8f34dc7201e608e6a8fd81a3951e05a07b755d96e9911e0e2d8b215f2c8b604ed024be1afbc79cc9322606174b4b1d80f38493db4d68f20a143c494d8250522f68fdf49048ad448a57961f564b99d51e958b2912a9f687266c92dcc9e3a795504ecb0f449e83d7d47da33be4f66a14089fc61fc64f9b8ee0211c30a2ff517cffdfd86561ad30c747213dd8341dc5188f94648ee6091e06c8d9494d3bd1804866aec041db45e688d2c85d98e66fb354f9a162cf1c3bb4bcf75da05ba0c695c9150f2d611c7ca76938fd44ad05d6011b73e944de54a714721629b93eb3192a399c83dcabdc9aee757febe855fe525ce55fdd0effced287fc8a4ecdf9a41c1bc7bdec80de27f5302f9b847acc59213c1cd8dd2069f846bc107b69600cd46c7cdcc42ae091338991e3c7237bb85fe3dede5ceaa06f290dd6d7eb8e8c75f4911d158d076276c91d8a4c4020bf6419c1ddd93054fa2f8e35fdb48e7acda8341227efe8021b4bea9da7465f6c3dd3c8a6baeb4e775d3918424306781a5a6fa5fd8faca28d62cbe277241ed18964e9d4b89b597acd1eaddb9c20cedc2515dd78c0990a290ca7380faf85c44cd8b04f181b047eac1cebe76b08ee6892daf17eddc6d398232004359f4f4fd7a1ba8201e5e2980fa55433b31fc55a153cc00339ec7eca0c1cc991d7ffb5fea023d62dd341d4e08830502959845454c7357e21a0e32ab86608da4417c5222875af0e89ef6df127da5bdf3b3a1e1f850d28a84041bbae17fa140fa2a9a2507fc48baa565c4fd425a62ae3ee7ffd6ea810c8c1d870864ece76d896fb7c8019ec7225d060d1e2784414be7c4236e4b9b02e5927d5ec2d1e62e64ec79379070d296466236f7c8c8624c6569cb2e053d3e792561e8997f7bcf6a73aa1aa07f7a3c72d3db51473988e42fb7b123812a750fba0e603dca0475d0c4d00b1197320ddd6c5b07bdca71617f38caf9e8234da7c7b06c7caf9b1ae26c3150131989846bb8185f4590253029098d5e6be1409095e013aabfbcca938ec88786191c3027f04481108e25052adc50afb0ad577e77c690c95c8bbe3971e96f2087d6c42290de75f69c9ae3ddb735691097aa17b24e85ca996a43fcc4a92ff7755dd6c5dbbc415da270ad047211b22fd38fe5b021c61186f23725ad51d32d638e992177c57e9ac6ddba0f89448af85d1cc44eac40e5dbf312645453766a6ac84a4429987aac4e7ca2efb37da81c098bc70055c94e2df73840e4646cea982f998f9e69f40c928d095438e545889a774188245fee1ece4038f4141256c911af3bae3b574b6131e2e70b6ba11ea3bcdf562e8c34d45d511de13052343b87ee513e8124c18af03f395a3a414865ce2df8a9fe825540fb167da0c5215118cd664bf670f67a9ea31c64fb918dffc067ecf3768076911b3fead868f83c44b0cbe2b2e89c0105700252cde38ae0a6de504c73509f9d545cb2c9fac3b2b2b28ce747f59175c9c9eb2549893d90a4c20b316ecb44774385168ff8be84f16ea9fa8caf11a20a1894ad4b101e8700391569973becfd18acab680c31e0a4aa87ec588db24a09c8cfcf2cb15b1999d600ad825abd03988b3f43e949f7c5a0d51aa9e040ecb612234c07811a02989941cf058e8ca1023ebe2e2cf76ed39a93e2b05453ee952d9e0f0cea0e0541dd3729e1e1d3c328bdea39fd32a8cc1842f0d40616b63c75bc2a1f44f21f53c0c0e0892911d422cb67df469e53d93ae693cb444fc2034ed8625552538ccb4bc00904ca66bc27861c9a07dc6af82d070d47a1374fdc063b9aef110170636401e618f7904b6803d28b5e1245f14079615c3b015383fac7e582c61d57513fe23dc3fce69f048529ec1316c3f34cfdc6ce455a8924c3cde43dbecc5161cc6647bbc268fde02a1761979d9f9c988a20e855c6eca1fbb30fb72607c33fc0ee418fb880eefde32ce85cac0e3e15844fe0c0a3a90670800a6043b4c8bf9ce9239b8320db812cfa0a393362e35fc41cf616184d57570fcc0798191f0c9fe9c103cd3a85e3eb229efe4828573047bbf3b7c2d375bd3d42a7cfc7cc82567f1793fbf77b731279d6b569a1c471f48bea3ee082434e1bb7fd48acfc4997e50437fb14899371106e1f39ddb31fa78a9c13a3f8c6c7dd3f78b2ee607810b87e043d4b3e587602c933ae3228860e43781e80e1429242dc8ffa3a2a1fe44d3ef6d55441c1864af58972630e603f45577dcca8bb5dce200c74bfe0748bf085a278a7f4a8001c520988a40a79b812b9228895b5e6c7b63ab0cedcb33bdc290e21c840919963c845bb07078a6784ef8788ff682071b26fb19a30827117de71bfb98e259dabc6625ca3ace52764c234f5630c002f718bbd5fa2ec2d123c3094f6435703f008448b4b2938c6cc864d23b2b99ebd780e84f4e413d0c5b58bc304d487ace8d834c9f6073a5aa66c43b0a3a750b59f0754334d413f0d066a80068373abb1f66c8a5923710e288c0a3d8f030f8b924e8bbd13fdd1cfb406af63352de44caa336b246182505e480639a28c5b3652be109723091b7c29040f5a12198706ebf540e49cb728b7318606cb2344a7e3e8db111db113ecbb2971d8461480ab114150e57117cf75d6b698b41d4b50d0f24dbe7363b8844cd27f24b3b2f9b8392adeb15b8e44e07d336dd518eb86df82ee94adf9d743ad59f82120a071e9c57a1402b36a099baf27dead570628e9c00640f1cf105415a43c546ed1e505640655bcb3a3ac86c8b8018ca3e234653c72255e0f67809acf9f857e93a4441bd6069b900243bbc55b071acbdece41ed82d5f0d86a1c932f1f26d16c22b7f39f0445690515e08d8e3501e5e83e56967192bb1f2afbbb832924a88788e382194510ee3bad1ff8f15ca6f5a78de3325702c7ff14d60fd5d6e66da5e69669294454f2333fb02ab004024c96f508316b0a879596d49bcc76e1018f90e686f3c05ae0967d6aefdd184734e7049c845e04b6a26ce1d5eb92cee68acd377d583cc036d9aeb8470c8c0a237f1a99f8b229a60c7d771031c5fa024443008e264acb04a2da5adb2a28abed7e35d08bc56db9a96edba926fb8812fc270a2c8c15803d65596326fb2735095ac599423e69224243a71d22d0d02b9e1ab3b897e8b542a097474e2e9022dab7065414425e2e36a7cad6577959e156d444e2f32c25153db40f49a50be4d7a99529071928a5540e7e0689e76579e4b3fc16d3f35e30069756c4d8b01029bd7ec43803a2f4dcc0d48b755c2404495c1eb150697ba75ee502c5dd39ce7bd98afd44c3b6c55734ecd6ff9a524dc47540008b51c3beb2c68b48a24910efd27998033ad0aa85924ff50049823dfaf6639a856e16f5003470749064f9c993154c88ec4588b77fa4acb8159a8e449c1cb602ce65a1e9a0bd59559ab69379a69b419b1c7e4de42b0d8ddc6a42230c21f5d0f20928807e35f03d856011e2fc93df9f5af2c1020b4b8551ae8c898836b4a226b968457740761040512d230119fb8c90039198f1413fb2a4f5036875770a1fd6a3418fcc4ddcc5cfdb6a2c9d51a89acc67fc1f3b8f91901f08094884d59ccbaf343ea4f0fb710c18884f20154fff092cac0ed0c7f1970d557a5e55dc768544e3cc4c912290f8807b5f846441728239efd131fe42f98f50fdca7ffdc9ed9e5be40e022fa28126c2d257343d97eb840a965807d4a1919c14a58c641e6bd107f826ad25a0c3a1a6c1a040dae32edee4d6552f22bc77293f19884f0b28aea21b351306b9f8a3a2779efe5b9c96d1d5274b435f85d81e6e73bc8a3513c5714e706c85ed28e0573b6d46b494e033a6cebd827627c001cc299ad849bb4e127fae1e335b1c144ca4409a341d0c3b8660a86a3aec4a07d1c761e04e574d61056c8d34918e3f875d3086018492ccfda3b7b84aa75d2adf58879c2d47b1335e64f16927bae738ceea3a529719654099a7035f920b0cc87263cfe529e3160201626a31b11a944af838c07afc27888ce1e10fe5a1cb9fd09fe0dca02803bbf1e070cf9db2638f0d0c014ce44eb01a825c10603720cca451c7e48ef00f4ba9ba3105f12b0d3c99995e23e51c4205235e35ccac8714752e5e160488fe11e82b040c46f461df5ccf3e60d5df2e3b99a042f47787daf1ede71466d124ff0746754d5422a135b7b886cdf46d1848bc6f8a8348072f6783a039c08fcc84dcb360c066aa62511836470f9a1a70445cf6ce91957c69ecad81ee620c263d42d13060b841d302434801c12c79fb22d4a8a3efc2a44574eb09e0b627f2d014b3714e39d9088b82feddf53a73db674f40b7aacb72325930cccfd9445ec54760c97ff55584d0ac9554d13025e54006bcbf223f1cdad89311be813d21081c6cb673976f91aed3584303a53e3daf6fda3599ac134d165cf42707fead13c2cbc4554135eafa59eea09f4c8a8a0927417fa39f66afdd1bd0c7ef429f666fdd1bd0c7ff421f6defde6ee41c3d44dbfaf95b2bccc98814bd011d494f6c0b529f7731575e627cd6879923de4d484494106d602aec490e3e37486d546ad59379c05c3632272a4ecb04538070397e90ad27ecd5af09505b693b531d618e26057ac2c4557f29fd24dda2763c10a758f732d04801dabf490a85f1b23758855c2afb2b6b7815f169aedc0aa4d9c37866d5741563a25b73512e24ed390f6dccc94beda3b1062353955cce75ee563f56ede9db092e2ead799db5497364eb9d1a2575517b5dba76a72bb55508cfcf28b0a949e93dcf8dc60be1555d036fbc663e12adceabafbcac6f80cdeca6bd30bc5f2ebc404087ab78f5ce82024bd3be1e532b90a9c7947eed299ec90350702d338fe29449eb5c0c7f480b6b44b41c0293efc993bace27ba90c39b734e398460b652c026ce5e3409a4f8d7c01db9e465975c7132fd387ba50dcfd8f635571dbb751e79e32027aa44e532a9e2580248fb10cdca046c95aabec72a914665c70c26b51352b996b9666cb6a1f60b01989fded89b5296979292ad14da74fadcb4a9137e5fd05d6b5a4cd07b0013c297a8bce30b3fdc192e8b5b501f73505e5656733ede65fcae8658f23b1c7b692646d185c76e0a4c79cc4add6ea6d9abcf1b6f0869584faf7f6b10deea3c2c94fed48b5f43faf6bc8adf4650eeba7bdc3201a69a9007256946da4d613f92c7cdf81de5313d182f21d6c356dadbc0936a965fc78908e1e65551ce57763c80e8dff584595bc49450a16391fec195104709dd3ce04bf6cee67ebc3dc676642fe61a287d601b81c00a650d723a7f6ff5638392bdd1ace02022a0c2e736e6c6771c6c609887c3ddb1173a6ced1b02d02f2e4b586523d0149d40e784bb926acd5c001fa1f7ca1fd50815aa5dcdd6a09b86ba562bf7931a6ae8861d466c0dcbc2d83e0ad1660b22f3b4369d9127885ac04cbf55678bfa9da01cc91e9182bbcfae5f5a5f7990ac5e72a4287e80910d536c58f0a03c503b46f54dc65a082fab254e4b04322e2d4e536f99c5cea7f9f559078ccccd4f3c9e849a4a9441cae6cdc4431271d723821fdd2878e8ad2129a4a3e3c22890f295f31f1a10e86834806e372f96818d285d745fe95dcca0344f9df1dd7c305d0878b5fc053ebc22291a3effa9a2960720f6cf47afcdd86844bb1d26e4c50325eb4574d7e90a2b981292a605fa677c0bf1c9903eee5f5adb0f60dad2800943f5fdfc0e8a45aa355bec0428348569c0516b4e03ef5e8272097ee5618ff878549bca92a3ad3ac3618be757443fad41ea0e24f87e5a2df317b9ea5aecb3da9fd6329117ed140128f5b7e4034858da68b4e5107941bc0ab3b50f068a675d9cc670dc0559499ce582232ff2047ddc21362e916163c42ba913367b2d776fcbc9c50ab66bb2169cb02a33818b5b3d4a4cdf10cac4cfa54c9b8a3c7bf0423fdf607560be30983b112877f5ad3820c97dd56be611e960f2d9cac14c490ab57cd8a95b7dd79ba42a9df4f53d854c64b7a88d8fd8f54151c5b4db8658865f1c05db86bc9f0ce5a11ffb9739307b2884da6881f1f8e2c18e3c303c1ac51aecd90321d9f818f01cae8e755c97ba8b9aad8ad5a3f6fc852892569b636d5643fb5a702c6d4118d96366860f1ea268594b89d2e256789a5dc3fdd6e41af02364eaf5d00b89f738940ef896bd4d96dbfa924c49100dc9183196abe7e93cc61a3ce205a5ee9cf44e796115299add25cf6e060147196b461be273e7815f16fb32913a6ca3ca7c7ed28ebd15499e17bb9ce46c8b6889d2ebd6bd555228a87fec33ef274c264d244b94ded3181a832e84afa863b0cc17d9382446c70549ee124d97a84a812b7eeeab6fbcd452b0bd7372206f3c225ad42b6b7ad1aaecb550cf5c37c1f6650ad18af46918abc6fe9fc4acf3052a3fa5af9d36e6d6f0e3fa50ab9ba138785023d7a0a20ae68092d55b6f7936ce061bb1ae1db5e527916af05bf5a368e3c10e230ed2794554311b73652b99cfed5b4632b44129be74b948f287da33cc9de76856f301cd009beccf659f5f5a69f4524f9438e35aae45fdc3ae870838262092374efc1aabb3d6491b35d56e9358dc34e3d548515d248de549c0754c7fd65b39f3354c7a5a61f1f8f5b5adfbff1adfb1b608967314a02ba6d44dff3fd879e99a3c0051d68939b2f407b2e8eee31a5cd4ec9f6a9c82edccf6e83fb0ba2ae23411918758bb88567f527d078cf0eb619276ed42d843c37788950fa984b0a555ad1c822c78fed6be59f8980397fab4f25d86e4640764eb0a2c4dc7db81bdbd4521e9b6dda5a93ea559487f69650daa7dd23d49c836f2281f4d4d15a2962f0b00e380e09e264cbb74484c2e324fac4a99f6def180c0f0fef4d4ec15c98ca0f53742f33f0a550e14daf8ba10c13ac395c805fd627af2065964f36ef9d697b47f90a625b58dcab5806ff9d603321bc80bff742e8bec3b7a45298df127d72ee9937454964bc9ef505376427636ea65d4ab6a12e9ef76e8de2658024cac035e253f972d8539579b844bca9347fcc28f5d8212f84ab0bc48d29d0265dafc56895a38a5bd5f6768176c5c3cfee4d5f247b724380cec0746167e4c9da78c8b5f0a994768d527946240b93afeb3cbdebd11074411085a3867ae2f527500b7571ec66105913f83986c396de00a4aeef748f33c3d5060b76ff3325d2c451166dd71d23e3ee6804bbb3ffb76fe2f8d8851041343679a96685e0968a6a21677537bad7d1e48d4b5d0bd56a42a3d835796bea025d9a96139f12d5fdd837c8957e34e304029f78e2677f5c5383f91ac26396d3d571ecef75612dd9db92927c62981d83360c7ebab6ee2c8c54458c1eeaf0ecf6026cc96c801d66f6b55e300c6d684eb4f1b484df7e55258b432be096997d36f28195cf345c1f672e5086d079094e3b6dc15021882b76e9ca7e8582ddcf65e1f568ee50807c4d98fafc56bba9537b4e0184b493feefec115b84944b6814087b8af6af307c9908bcbf41e12040e010331ddf7974ab69deb80304e75cc28cd2b5b46827e25e2e99d0c465baf790f1bea84008c8929c0ea2d3f58ecb01a86c00fdaa51f9bfeb0d7b171a9171ae3bb84dce34f980efc9034d29515b684e5a1fc475cbdb3c282077af42b7a78f53548232e6fbab2b25ef9e3ee117fe4dfa30ef4aa5cf48ee2aa024986e3a43055b9a714e1c9b568b266058235d7ad7f0fd1132ee38d4b37e4a1aca6a6dc90ffe5cd702135b8f9b9f2e6a410a301e649d45397d925daf538f4c9bb36dcc594acd1406a8de382dacada15ab9d6e6a13a5be8d1b508b0943b8b551a80617a78f9c084f767b6d4b5fc7995ea8c6db45b079c6a9bbea1e7dae1de70a6e66f3362ffbce162f26536397cb160573ceaf7c14f09fa43fdf6b537c0060a4ed2a3324fd82cdfba5496161ae99677d1eba287bc28a34bce008e5203cbcc00d82ad046aaa30072507d117b7da1ece8ea919e67841f224a8444fe7f0672fb866d38fbaf1450ec87ebd26026c804bfa82cc9fd08c2e658dffdad28f401b458c3590ad0c5a7b1a7e350c451c412867430d227207298dfee700bd28fff85b746c6e3cbbad42c3f6ae1b17e5e38bc30196a41eda80e04154eed5704b0a850af8be8810a2be6912dc27c4345649b2a3e892093f76844128a7fb250d4257bfe62094f94d0f0212bf032198f7954d84488224099a34ea3d49fc81f67d2d557940369ba72fcc29a4274f0ae1a9a210014f05a1e672ffcd7358a800a9e572b21b72488f5c15b40b0d80fc04ef3276f6676cb14af90098923c57e93c276e1865eb877a8d91f855573bec0658508c2d4914bb058367f437c7d37e80ae48867989d6a9308696bec1bc61066c3649e4680f0fb3047506d1631c819d52d2a3fe82cada947649e5b4dae0368dc672e8019ba5bf65e65d5471197acb41570ade45b98a61a370bc0c2786f279b2797d72b27f409fae30b777fb8336a4bda34555cf015e92b5d095fc34cebd70a916f4d2650fbda691efb04f7f9def3c69be9c07d195488d7fe784938623bd40932b579b96d72e259abf95ec1232efd356f7d2a2c71e84b5eb9903b91f73bd6aef94c9815ab3f297c3422fb8409339a37fb7ebbd155c5e71b278904d93d64e187d1d4acdb11377fce65653847f3b7e9a0f5401bce77f48e51f2c9c60ed78f79c60171515f4405d1b4fade3bd086896efe2f9170e8823406c46dd0d0c97b30f283d90a608b55bbf2359ce93c68041bf1d3b5c2403a7d2c2a3e50010eda4df5ceb390e00916b14f747dc33d9caff3179633ded93f128124befebc2b612c83fbe0da3dcb917f8fe5fc85361efe90dc0e871ef311f5742e731c508f8e0e9d6b69b44765a04f550fa432d2b2bbb54e8d38d44415513d78808b82e0f35c9a2391551f92946459aa7d20fe31a94cd0658115831dcb892d41d24d444e7980c7ef0a27f039b79e212929f0333a9f30b2bd1e26891cac324da1feb3f47340c52b56c701c413abb3c088e9ef9930ccd1f0e6e95f2143674a4fb488bf356e190480afbc38fb5ad8377c69a1071a1d4c280e14658c11a7e66f3087d7c5c8ea99ac0cd05b46e9263893ef4da3876f8a240897c18b860a323275f1d3bc05af63e3416e22b4518b2def676eae5b3153ac9fd34614fd80fbe370a8b326adcdf0b3fe421b44c8f54f75c9fa80ae3b64c1f0c83c32d21d47f664d51a11aecc6bd5fbd409e7657e14b45088c9301adb63528937fe17467574f3f9ad1269419fc159784f5d9785f13212eb6bc8c3469f2f0c4084a6a77afb01353e87e1ba78b13a34304d64ae4848e8e177dcc2461d22ae194a58ffc454916934a1e3a1e7b02323f03cd4858d121349a4d289803a9b4d6ff60fbbce568a63590cf7f336942a3f8822c6540e672b896d4718895b3135d4bc19d0622c3e9c35e3da19d0743c7bad3b063d898e7c39340def0555ce900dca6a4422a798beeb7967789b2f40d657906c68341c8fabb4757f026d2af92dddc9050b1e1ce404694ba038d4bea8faa961cb0031365ec964a17f4fda13f99bc42a64b938553d5e875fa3baf5a340c07ef99ea697447f4f7340bda7539b784d72fbb3e506c858398e3bea724a0604e88fe1334fab62fdc0199ee8b5d189a05af4838e898669793fb20c0159e2a295db240de70bbb99a8a088e35d946edb0f12ffb89289edc4c59059a5917fcbe6170ed2e5cc22740f9adee3373ce66d4b11554bdedfc3628d086f2cc5811d86dc47d946662dfe34bf53fd3afbef0cf48c9899d28c3493a4d498d8a97cd30ec41aaf5f884aff8deaf968372f4f63abe16ed1a3c809373a3f90d9ed57817daaae387c6be96a800df50f38afb2abc0630b827e0929f21359667afd1ad807ad9893ba299755b9dbd599260c72834a46f800d7635050a1ecde266bf52567a496ed4f9cac8b0a3792d4e1169ee678628f6f4b43ba5591c2479e11b9166719ca37d8a82195ed772c0485509c0969aabf2fe5a26c48e102df18e4f0d2b018f5d2fd0ee3f1533278bc1446975d7dbb39c9e9e2dcb3d82035a5279b6ba110db4016d24350390273dde62bfa5c12adecafb0b9db7e645b0ae6d0706458659099f2490ce9f36a5f1dbc09fab0d154b3f67355a9e4c7ee61e7ad48b052f7e357beb6320cc946e9f3a48133195fbc5e4c914381fa943e1c149389d425248291e636047bed7182f13c3729f208f84a8186700cc1fdd7c13956b2c8b2d27a15adaf01993d6c500956a7925d3fa39b6e7191087bb46e02bd27a5236c3c4391b8a4bed2fbf27d21e3341a414353d1d6752a90a717342262ea892f22aa8e36bdf35d2d31f8822521e1380a600784307622975da6ac40e1ddbdb77abed28b74a3d63141ae177a5c25f9281641240c188143f4906cd263ac4a975ed263a684cbdf699732eb0886e366512d4a1fb3c35d2a72c7f3fcca16f354fd1654029e381b69d27973eecf417f43208f6d3a7bb985356ce36028152060151a7c70136c2bc49d8fe5a2e1f8b8bc00395208c74aa2e2681e3088325c5519cd86214391a3958b23056393a070e470696308e71ea16cb0da985acec89d92165062f56e0980e445bb8a725953e652c58795cce1140f193f7ef5b08dd9e88b49eb67433627be6e9ce3b00baf7da06327bdd9db7df4d9b27fb51486f1044759e71f9ab93cf79b2ad9a81945579b4b7517f4d1115a4c7642b96149d1386b88a200bfb44b5c45074dc0dd88ac9ca6c422857edaa66d3e937a2a460922a242adc5a1318137a0ca1a69810ebf666b3caf2239ee29f86e45440892810ac1b4d63885ac49ece4b71a51461dfd13a1049dfbf46ef819a6c78d5107e0c1f2c9281e64194d80be91ab822f3a057453a6c69a29857d94badf28556af02924f19a2bd184f2957cd302f3fb3ed7a47d4ec7937761050aade33f26d65f4238232b356720494999bfdc1ab891b25609ad74cf4db132cdba8e96b2d564bfc81ed41acfc58bee9eab3ce24a935136be2c59cfeb4e67b233b4ef2f5a39d024761969c35a6ebcc570501a3d0af10729e06dd03de2631fc87d673d6a6dc9b69b9e4b14aee64e4a9b44a0e7676d696130fe5b0f4a14917da060aec9f1aa91b1e2621fa633c971477184963c0496d59436710be20961fff2d4276910a3ade184bbfd2c24666d38d8c59e428d492d76022ca52bd0e2472f19598936fb983d653860c23353584dcb00eaf56df08702c98967d126cba00a10d80702851bc37062fd079eb12a8405de8cc7c4a5b128188a71bf2643ef8de19ffb0875a2abfa2cf3e30a82845abf5b50e7bfc68d507a972e7a677c636d44c77c8a1de9fca71dd5ed14791494667849a55ae9fb3e057ba64826a366004585fc3f676cc3f4021806378e6fa95b2ca01f1b60a7e81ea974ec6251e6af447917b5a68379431a99726dd9eb34ae4a7693aeaef2552ee4343f03fcd236189557e2d73617870bba06a63f37d86e8ef5f18d37f7c67a587e1e03b03756b4e8222d411961b1f7e3a58ef5695e583e9fd7bc0d546ee454b504885651ef45ecfb6bf7a86276863973bacc20706e64f4b6d85cb26a3d294bd14ffa16cdaaee97cdddc064e5a0751e0b7c39330444900e620adbc0eb885877348f0496b808c50896127aeba7305d2b777d664dedb10b544e6d853200a723e801d058db48691f92a5542e02f236847ed42d0adb4b222dd979288b8f0839030bfe7910c704b6e3d37035c75c0f9b2efe5f4ff42f1045d9f390c600287c57a085bfd785e7146b28fc10a0833831e698d298a4e7ee04017e70fe3f0454bb0775fc843b154c9220c48746fbf2721d9056a7ebcf2c43cb4e582f45c782fddc684d3db2f7a62d0daa57396e283c2e2638261b592882a0856eb66c1cdb410e07b42e907da0aeb670db73d8b2259b1297966bdb9caca623214d810bea1554b307b7905a957d17ae1aaa0997491e16fcd23bddc8638537c3ca87abf35dc2266424854ccab2367784146a47d2663220828eab92498e69977cb08db2c4e7be502bb888521db56edde5fa3796cdfeaf48abe6b1be8c2b5dc4d55d82a494c604e62f159ac4814d0a967429893f07672112e8bd8daf67ce3fd0191e0bb25fb030fe2ad19cdd4e9d4b409f115d36626a2065fcc4af333deca55c92d5d6292c60531188746b3959fd02e49a785f8050189351a110d016acda46848161e73f552cf8a117f414158898327d063a09f6c8f360e6b02a3a1265717cef13cdf12dce94d7493674b8cc3163efe2092d16560746f086a20e4b5dd7c1eab5800dfc2363ecc0bf9b91888e9af48f1c6a636c8018d38b68b87e74018ab5f653b76cbae83c3d6609240d58986cf15b9f43617b3b85bc7761cf8f60797d17649b8189c2d183453856df3fa16bdb60fcef2ef4081ae495b5029da4c1cd264d947ab6e881a831f3958b6324b5799c283fe939adb56208745608e9cde7206f1c0c3a0d30d1a424a5d9eb9c39913a71b232cd9cb7097e0a21e911833acbcad8e3c7fc060f7a03bc56e7bb00f749c62817d14bbfa11775d34961a0ccca002600b1cc42cfcf249425e2bde62b6f442b045769079f569593e333903944734ade10da43828db2c73bad3ef20b79988b25cbe2cf25670e8672e9cc0a2c90b353704cc10a2833aede8fd641e807cb9159f7bcc7dc984ef1f339ec89539d6d9fa8c4330f6a1dfc65982cc09707f404969d06d9f4a6fd6db65968adb852a9711d624606df548e39c39daf2c50fbd8d5648945c09bb21eae67c263b8d5480b865420be3c07554de4a10d7c56ac956936aca12fe6261dd6f1e5b551e3bc65ddc7d628bfbe153da3e9e70c09ff0cdaff37ff97d9df56145a6ea31ccae29451bceafc50f786b77182d149bba054d7bf963c9661c6379260149267c44fea4c39a8c60c3fbe37288f1647e50030fa2c5e37a21c15b9580718117fb79e0b3737ba6c22eee47a64f2237010fa45d187c046e05095795476b3abfe93b626b77897a6e78e8dac4dd96f5b58087ac205d3718d7c320a8d2db127297cf92fae56f2b2f1a23dce7d580e9184ff0871846de54e63bccbc6317df05be071171c774c02cb6a1807fc8af3bb87c6b91af87862111c537bde538eb68c0183a3cb1355d1a2249c0f8dc1923d7065de36e08dbee88386173a31b83855398f227b44c4a67b0b516431c80a4261de90cade4ff453bbe09260b65c3242e3d399984ded0266aee99cbf7c618ac5e1f556299a2be5c8b58650d815abe971a162fb983ac18a985455de2cd503ea87880c1f5a0148bb862d1e6774df46ba4f15bfbe112617835e523da6bfc80abe9ff4f820168c4d7e6c2f5b891eeb498a7570d74e4dfcfa37357203a1ba4d4830559d0d7a4c6f4cb34b6e73e127763477e2f9b105b1ffaa3636d96aa679855eace5d0a113ce5754579460c1d05c838d4ebded1e238bd3b1294e34422b73ee1c316170d99edd7923a3ce7dce401d23d68e8d3aba1ac3acfef9c4b01e86c8fafb4788f5453faf592335ddb7a2530579ca4d3ec307d7997e4fab5452cc3839a2880b74d7744f4225cd64ee995ba87af8a6417074231d715458dd729a729741cde0bcb16129465a2f4ab6ffe280cc4b60db2f745b20d697d64f742931972d147bf464c1f1717e8d176098623a664a0478df5324e35415ff2b67a718ad7135d8c096c265c6916f0d21324649b07f9f2322d5707c1c6a7310cdbca166cf3757d1e6a39ff13fbd89f8f35db48a59585f226d6c5f7278a13bb959649e54078eedc080fa23a282b88121922610c8725a9f5a0a4879c8ec95ad7807cc47415047ba941bcf3789a1baeab3eb71947fd56931e2d1bc65fbb5aaf4024dea73e25597cdda26c0401423fc4b9249134f3cf2ac58e96e3c9d6329f6f4146adbcdd7daf36d0871392e0b37e20a095158c7399534003c1b61b0ddc7650efe7274359a3e7b44afb86a976ddb7860cc7c5176aa48d5e11b5f2ab5c143efe3f109600aa409596b8f7647e03039041ace822978f2eab3617e8333000ed086712c0bf11089b776e64c557d5c29c86be6784a36b82d82be793c8b4b39a92ceaa164e497f80bf998e9a015f66f31506239ae84e5d72c20b2783ea95b3bfa8aa9abecb73b6499e4cf036bc4972121965f136b49a25b586bc8f0e69524641b218c238a2115d52149d1f73d43578a0597c8946aee5e18ad6ceca6e946364bb7b31047fe4fadc716edbd78569701ac0fb3e350b5af4eb3beb0bea025c79ca899af5064712a726a04a1a7518ff44c15a3d9c6ec26127ae43605bf6dbafe952645f87fcd93469a144b1e4c49cd1dba618c69ecfda0e9bea2111394c42f82b021a563fc3013395a4e0d49d714b405c98eb72b3938cff7d0555207835531113c58af78a19de8d15415b364520be3634d80e0a2b02f68222f9492fcb0f5814ae7ce6968d8d7464f02d9cdcc86729707d09a3084404fd78e82e64227f885970fff52c920b42ec375e204db6724e63aadf8ef48077d4b52b54cd59a1dce361c56bd1f81ccd2ac960e6e18a5377d82f1e580ec796dbe6eb5b95d3252b2698406344161991df4ac783a88bc11b169fcf633b0c8f0f4352ba4b906178bf19e26bf6f71b5a203bf541195f18818ca197a294ba01fea64f1d5ab342750c93dc1c5ee392d942e22b00dad7ebfa3a0f277d2a06bf711324ab6e3a9e87f5c9a84b6089d9f354979abb7d58de9c78506561f1012c0d2694b6eb46c17553359028f647df82a43a5cd1f63ab58067dc82c409db9031772eaa367e4d295516794aef77f0f1f83996d118dca342da495bc62c92fdad6d469ce981d36f3c3c35776bcb37b7f2a36d66034d37472de3193440a459cc9594e7790a565e8339acc4a6735147c0caf1101db14be897c3431d587929eed0b5a83afd8e2172adab0f3df3c000a56f400bdd148b7063f674bd8497a213e2ef01b39af03ed108d7a6a9860ebbb3c6749bc021e637613acc785b24262fa3b24c3d2df99a626ab9245a9b3092f285bcd1f5f6d6e2d12d70de85d86cd077586108887edc9ce7a0a499328a0bdd443a2f81058f5cfd3a73ca6b1673cc95d7b03055039cb9bca7ca38d5288db70d4b6a84a4cb72ecd960403b1d3433d5b461928e1b9c28ae1545650cf89daca6e98a531f08ebe152f0c661930d55944b7d92ee608b4c4606b30594534572e58864a4a9a2da55de120b85b4c4683bbb8ad2ac8a35e3dcc8c1136f82791ae40058a9cd15f51a0882254694de7d4e8b45324967f545d65867f7325b29ab26169aad9e66c424fb93ff43ab7b9fd4a7bf3c7fb5058a5ddd6988f672ea8bf94333928b55c540f76ab37a70e280760c538ab02bd667c3df80a6d8b132912e0c1e8b8786d8b280420f543e7dde4158ad3c31ea97783a91f347323ee34a4a4a0fbe0f5d9427235965e000c4d97b5c6f812f463a6547042b9dc7305cb579f401d7ab7e088ad57d0bc4e34662d0ca6aba824efad989b37b21d300f272114675629397df4681a391137cd579466bc1f57e305e006f855799d76809ae5baed3aa8f6be08d7d6c2dabb5f2dc3f7360ec84ac215c94cd6e7f01ca3c2712fd1707bb0969633f11cd1ec57039c839bd0faa30c5e5a1751cf8bb3bed628f1cbfa177132c0428c7c4f129173464ce39f5000c4862c78f037547eae80fae43fea01f3dbb1d08bd99dae9b1fdc816a1e6a4a737f7e5b7d5cf601a4676e23e9610f2cd037964fdfdd7d66f32a01900d6501be9ecfd6c2505b0aee26aa91a5a5735f6bb2ad44c873d65fbd9f2da38f99991fd656af911212a451180659963e14a5e7abc51c73c0be79e788e7111907e0480d6d8c93cd6e0d408a30557e403cecb385f483df08108c63e750ac42d8a243176381513cf2563b5c8976b43bda110448d6a206399e32edce4c963a5652eaf2fb5f0386c6ae2753dcf71376710b6d16a0a33d7022e33c1d3f09c05fcfdc91ecb0d8364320e42ba7a22970f1408bb671701b1a057c20546a71fbfa0a3a16959986db39a5ba9bd4ce218345bf0cfaade1057902ae0135e2a6ca036271449fc9bdf3952b3982f419cd1d45f2f10015ae1efe255b5ac30ff57fa1842aec608cdd47d7c05767b01a1b8ae5e408631af1a5972895d7444b88013e825485d9197b2192c8fc9617428fbead0da2151f961799b00b0a6fe64762e455c0ae1a3522687a7fe6498640f3203efbbd733b1d76a5e1e5fd8767d9bc1ee3829d5fa0573bf3358ae4b6c1d7371b264d4444a090635518124485a5b21945ac7160df0d15bc2c8a3bc69d423d328696bfb968d803d39eb38cc4e7bb23281cbf09e2a20b84ba19b9226023abdeb96050f995ccb21445e9b24d102998c3123625789af2b63bd038e5d9bd0f30eb534ed4fc9e2cbe270d301d5630e96f01f199a61a5874f497ea78426bccd6f93e7e58ea5428ce032bf329c3f8ed266b4c2a05f88d5ddcf986dc6c8b8c22e02a0ac612ff4f7496e1ad220edf680c82dceb363aee5d1463bebb468df593ee852883766df0ab4fe86c185a88ef270a564f96977d6a3b9d29ba6b7165d666dd966ccf22075c3f62eccc90adb44e78909c30179484deb51b0e8b5d9dfbbf6a19031d6ac7f027387537f3a96afe3ad166a7a6d786ab7f60c81747ea37cbbea127f352c7e2f4aafb54a895f2994112a41c1e12592e2eb5c4820bf8e3fd58d4686456440c0b33c2032dc388adcc6eb1ee6adbd793a547266f6b74379fe36c512446f2e14cc2f7b9f5f115597fedbad949255707dc67d39207a5b82777c53a66e2bc5a315ac2373bcbe795c93deb6613156d6fb5d395e1aba6f592175e9dcb0abbdb329ecb3cde4756546d3703c4b0ef7109839006c3360d7cea9d7edade49b2d03047175dbd630685eda27c8f56ace9c9801651389b1ed4d966369016a267c4f726798d026099a58c1015db4dacf3422ae229aa132b03cfd4fdb532f86865b42d68f7408b74c336f5f77a8856488efc6abeb90b4407fb89f500e475865f5230beabc9b345b7a1fcf0ee36135e6c2625c54fabc431df04310e3ac2f5abfd45105f09993dcfc8c0a3a0727b15d67a8d67a26902a3af607328f911ff9b3d9ffd91acd93a17ede68a55bb25a7488e7dcb0b5a6a04b2ac8d9c3ce99c323025a3bb79255cc7a232c13cc1610951256118cb693527a1663d36e0f00f4b4139c16e9ef9ffa71b05254f67ea7302d3afdc3399b4169978e6be35b09c20c4a6ac90a0dc4463d3edc7af7dc9447f392195c4d8a0f07807fc5fa7b39beb69a0443ef97c6e04797ac02b93141aaf9d2d02bc0702fb97c7ca4df2ff957401d28af9faa9cf285756e268461f4d710c3c518ad7d31af2be79f8c8f0e8f3611373c3628ecf4f03ceb01c3a88957a11134036870b63307f23f0e68cfa05474dc9623b30c2c4c1150ebf5a83e9740fb53ba2e470cbf5a4d58763a0377277a95a313843ea686c203cc127904dda7d8cfbb67931d2ff690313df164968a3c9acefdda3fbdb0a5ff47d3e937150b03e28ab97db7f6987fc225f2997627eff386f3cc87f0d5fc69be99f1ccdbd56761530ec0349fc1b79bcd3a4c853e66bcc24fe6ad8b913082e36d041ebb4ac75442839dafd40a62236bdb10e6fd9917a25bcb8b0000f62be63bd5e7f66249a2161dc3f13fea53750cad588c4fc620fd38235bafcb767d0f0e6b834f94e3bf1797ee550822b651cc31903a7daf4d1346f577e747f4024be212e7974e16368a3b51d6bc7db26bc34c558ab60b4c1f0d6865f528f8dffc225fb8dd5ada82fa24b83ec5ec5cafe6fa923a04e9b472bd65690956629ee3eb887e317c97c3a386376fe3bae6724dbaf0799e6b94b2060ad84ded98be44b8968bf31544c27352c024fb7b929756464bc48391aeea597244b2e08263611fe1412a829ef4157982a2dd1507c41a6886205c707c5d508e269c98e43693e16094b82920900e85ca93810403d5034c3d0aea6b90d50c0c30dc9b1fb2ee7e412822857f4ea5471367b09d2d6b5dbc0e6ef4eade4ed92ad8455a028b21165e9486320ceab4952a5f5a5410a7c4200d6e9e33472836cdf4e6c36dbed080e5337c7a23359c064124441efaea14b9cc840f25ce4fbf45d28ef2a587faea7fa3511499a7a55d9999982e67e1155ed5c126f1bac2c8aff2f42538f8fab494851d9cfea8276a1d2eaf51972578c60d40b0b37f4eeec84783e2514d4f283aba24385cef857237f652f646cd83e9419ec2327762b940acc98cb8e3236702badef685ff0d635c3cad8e48ea2e810906899bdb3555271e2078919743de22715b599635fe98b8dd96c7817e8abf79a1b5f9b0dc9a5663acc2594da9ccdcc66220d3d9074325deb21898aa171b38130ac342fdaf64624d57b3833a33c9245273d02152e8a559181cb70fdc1ace374b910660abd1da4f1c440a139dba6efa8cd4b1f7cf144ffc84cbd4031248a310584841c3658193a42659452da960d0c7db084a17c9e49b2cb650837599286c7084fa3dfe051d00658474cba77de4686029fb0242c99841f204a94528b39775188535e1733461d96f17888b86b185b440bdc1e754a24101b1e047ab4a0c3dcd2d91f86963dee911bfb1ac1b796cbf9c8d968d6580ad32328bb7ea81ab6be5c7957584f59fa3956e16100cac6f8fe268a59be33d04d477c9e8cc577596cf4e28a2e761862348f02b44280385d83f3205530aacdfe7bdff9235547400fa7c52cfaa989501ab8d113fce8dc124616be4ccaa95ea31f0cba7c114ab36992276c7e7049ee7fb658b5b72fb0b66925d2314208d413b87221b880315b224522113e7e0a19d65a23dc0ccef25060d973116d9b0c22b05241f6146972deb76ae3b006d9183b770c323fbd127999f52f9b7256d56fe3a084297adcca1561d94f242a1ca323ec79f2b05e5db4b61e483bc460cd1cdea56cd01e6508cbe48d96348a3053d91f6ac0d8a298349858dd8539e380c993a2a7bc512e408c7177e86c5af6eeae386da1201f2d570504f205dee8d8e2c0e8b03842dd83b82b505e54280106c992069f174dd57194f5e966011049f0f4329c639b67e4a867d67f4830f5183ebb20e322878b998e45e0bad92de5c81ddb07670581b52859eb7826d004ecb50b39a1ee35b81a6ddff1afc6266402df5ae3662c072cee569e453d00929cb65b0a0d92059b3b6734cad31e310c06a12cd39e092dfc170026b33fda2821c624eae3b8c3409a8db596a66c603782ee44c17e796af2a1db7b5395cd368c9a9e3f30448417bc863dd3e3ec38fd5449bda3748e1c9a1b6d5087c4ae2342c56d1078c2c4a8568890e258d2c0e76fc439d26f034b13474a7c5c9289b18b9330410b267d5a3be61045fbe29345b935016a9ca12af890bc0af231c058698f99c7d134924e71467017c0c5bae18a5e4f08a45199ce27a40315f819d1d6715fe0a402738c7af2fa3f87d8fb3b924159f240e48959257a3cd8b23a2b77fd032cdaab95aefb651a1c37f49306e4eb8253013e74f2d1428fd9bac3076d2e7516656bbe1fe27d673166eafed6d57cbca0aebc1ba18efcac61c59fe94834b856e8bac4b16514f6b7a0601fd9ea57df250e76c138acff8955642b1a38df556dc5908776864e8ee28fe4bcf183fd3b7576e02225afef80b228ceb36c3bb9fdc9023a71a6f24e5e2a0e908b382e8cb5a2c024adf03cc33ec0d802e86a0001c9df813e1c8d82f036cf2b798f3ccf7f7ef02056c6d02caa2ad565d40ccd1d21cf42b71b81b2ef0ff2cf4d8b4fd25a75001db42577ffbd668b82892971bad11600d73c11df18c1776db7d0ec5067662af81e73416cee6547c950709b111d5707275b719a43a7b09710622b3dfeb8fb45e5ab2724b2993943205056005a105adcf62cbc57d1186b6d7f9a1ed6debb6eee76f6dbf7d6b1b5d702e9ebfe1791cef6d2e8fa7f373e7fc8eceb7c291d419edb71e145b9f23922c760b7febc9dc7a127feba7e78198d9963dc07d9aadb5368b40b4ed6f997bb2843c92b0b3c127ed664717dc9359fb8dfb9c496bb53cba00c72449df2369daf7bda67dfa3597fd9b4742b279a4b1f538cffde6c211431149dbb4449245ee3c71c89f23aac006cd3dcddae4f6dd536f453776e00197447bf7b6fdbced560395862a8d25da342b2b2bab27db6cbcf6ed48d20a03671727c9ba6eb09927f2536f5390e2b0f09fe9010155d81cf2874d0d5c4f9f8e248bad93bd0babc3e9e8e4bc1d7f7cb976d0f36f602ea8db2775bccf461759276f1d161e8ee0d4bb0691e408bb84cd00ba6f08db47f27e36e48204df49ba9fdbc8fb174442de7762073c17f649107c9a3f7b9ef7484442de88b47d1e3f7b9dd145ce98a47bfba038f72726f1dee5bd8b1b37d6d811eac6a4ee73d77d4642eac6179b9021507aecf8400d4d42333f52f7dc236da3f69ff9de237163f821f8096fdc72cee3d5e3547c3bebad701c4eaca0068d9f0747a4dbe6c998e7e301f0a3b0790a8129a4fd3842fda9afc50ddc6d33865061433499b325b3cde4eb8a1aa9ed57d2746216eded2a8cb3d65afb17cbaaa87409464684fd2be2b8e939673f8db27f4124947d968d46d953319b5074e7751fc96aa58eae2cda3ea54b53032aba3efd262d7fc1386f01df12bbb711a9cfdc5a28a6b6c424fa3dd12fd5ef96ddb6f316d01a3b127cb7de8a555facfc4c91129311282a545ac00861b1ea3e6ae239550dcac6ddbda5bbbe97e6687bdf25c0a7486f741b5d44932e553d0ff0734077f636730a80ec9e7a3fbd0498b0bb5751a96a90f7fede48d604dcd1a72a8c04ba496a459ac419ce76f46d752aa7aab049ef6d659a093b1b47af125d4b8559f7a24997aaa2f52ee51058cb51fffae2d4408b348769d360b91456cbfdcb7617b313eef8e0681778a35d60055f4e77a4e7e6e1791555455dc1f33dbfc2e7f5ffe38824cebbae2061b5f1d79d9d77fdf89cab738974bf48f75bf0e38b16cc71a9f184f86f4189f1b99cee73bc15167c8eb7e23f677cbde9e72a708160c4580971c57d9deb4592eed773d35b81c1733a9d4b893ee5523868d22e2da9f0ef167c890fc093f60803c702c0935669fb7b559557799557fd07008300bc8faba5fff5fa9e57ce5edff33daf7108748d62cc8767e7439df70f80e818880e00d1a754986fde01feebbbc4bfe0029d27c1ee9d9d70e75dd8ec9d9d6f7da68377c20b767ee7c721d085f31ac7ffd605e3387e05ffd2ae1f2f007170c6210dba46f12d2811d3c2c525d22fa048c188e911a9d58e48437f1d91625598678f56cd0cfc5d551a4585f97f4f521315e6d7aba04b7f63acc25c7b925691b156ab5571dee6b5bbcd989b4a380f0e578ec0a2f54a59e1386e7a4e5d45c5185fa714632dcb30ce6a7ebf5869fc2f16b31efc5469532a9b9274be8bb5feb55d851da184e6cb9eb3d65b27add35f855bac83be8980b66d5a97a9b5d695aca6699936dadc28a0c2b45b8b3d9c617b2fa697da3539e79cb9dcba6151617a6b1a2c4fb7f6da1d23b83b0815c6c1dc3967f4e2ebd65eeb5361184eee464585e9fb39df5b6f86750e4315d5edb5d5ddd6aa1b0b541807b37ea7697e85db346edbb62cbb99e66a6e5a4cb74e6bf54aa37ceacd0696064aa9a5f5edcf9b106a7d5bdd8e23d4babd5a6dadd427a55eed086e9dd6ea95c2108621ce32bf495161bac26cd5390c2fbed66f941aee1a538826c499a4b319c9bc5f1596f3463e1de99c63f62a9cd31596c70e4fd76c121ca5b5ba5b7b5f9f0d3d47f2dbf43f253d47ac829e7f5b5eed9cb3dbd53aff3c4ea734ef39c91276a65b113158863769ad5beb3e9beecc0caefb0bb733c8bae39a7d499ad2dc81f027dcfd9f75d1a7c23cb7c299c17cebfff1d0f47d049b73ced8662277c5397196534055adb53e6c572d748acbae9f62c50433c1446db0670a14e69c185f8c6f9e025ad2f42becad2561df0d4db9f163d2f43f1adf02459ee2429f3d514c0db29f0f247aad7ff39323adbdf9ea9144d5b7473710a5602750d41ffad3a625e6c4d09efff73931740c5fc7cea533b1bfaa626a301f8602c8a706753f2fb7bd0ffde50d74ccbd155c1e5bbcb428a0c2a88dd6c69c18bad5f277ef1dc861da676d7bedfd3be8b8f76e6c91626fdc144561b153f71a2cac273af0ae9e40e13ff7c1313a7ba1a2823e68508d26291365aa3f7aeaa54a21f8f4ed8e624e0c7dbf83094c0db8bffffdd02058a006755fb7bf5fc28b1a44b6806daa801a94fded46726af15664dd3882a5513383bb51a69c189aa44c1e02d1e4bc0a61844b9d8cd420b28565aa413f6a10fefbb429050a15378f2de654feaa8f06ca542a5be26cf7d1d0d529ad94daaff3721de379e79c1f5a8cb1cd6e6462c7439e61328f807196e12cc330eea391499f3d339a65d7c33d270773a31042317ec2dd5731334861edb5f6a2a8c02b0513b0170d3a7db86f87a67f9fcecf5e41b1ebafc8e6ccd933f1efaccfa1d8e494c2188f53b4a2add6a2c8f46ae138ee2bf062923e1ba8c25e958ef7a5e9db2bb648b1e71c676d31a7769665d9b5f37dfa4743d3272d99bf209abe0f1c97dd9f94ccf65e7baf05e13b41d3b7ffdd0785507c3f4ba5566f81e743d2640cc60b2a74ff4513fb30322b21cf73ded0cf5b457df9c05ca427a6901425015649834a59c3aaac21a5b411559ee0f41d55952730954960ca24a832a946992455edc539572013295ed5d631576cad95e167d6fa0b7d72ce5952ce39bfb6ba36d41f0d269bd4ff030d964b8919a811f010b5444c12395078fa40991b16c040d1f185480c1b5ef0616fcc289a81a3cccd0eba05c90b120aca641b1e5609290aa94a193400d8b3a43163461926d656d85beb4a427b67adadee835394942a3168cae4f0c5c8a93452521ae12865209134c300c2a0097243912022b812b23636a94ba85a0ea926bedecc096a6445998189086e10aa27840fcb19be685e3020ac5d271158942879cac1851774d8a423ae3695c2978655e108eb280dce91f288a9345ae242e3c2729b82b535881cb1d6dacc06d25289c4a34cce2e3436973244c09532a4c8f0b249fd466244c462a19930d4f647634f2c255baa24110485274b3336d192222b2f3f6a582991119a3fc12bd795e541a3816172ce39cfd8c1862f9a4aceb9d5c28d910f26364768436c4b9aa6691a6744838cb2e8c698b3a7955933ef8d97218c102c4372945c90c4683ce49c20d700c49a336b8c82d04b24c0820f5d60c892858b0ef6286b4896134dd334ed2a11e1a862e3e9ca88a41c54ac51d652d60e3119cfd0b28eb24e10938180817b96317028f240f056eb2ff4c959cee3cc5392b29c731923cace39bb4ea05d407c650c20bbdbb38c8163bffd11f321160bc784a195b1b5922b1cbe8c00c911205fb838b91115c4192a24a1186162b13061c28460c2b0871e7a78bd28ed42b5ff170c8807adf7bca286086d24b3732681759900a646cbc67b5e5183c3263fa60375916006c61853b94a50c4d5456b43488595763c18d38a5d22a02e275d6f58e563b86e4b93b3a68d39d3795024596cf075746cf81ced763eefe49dbc9377f2ce93b09d75b276f8dc3692766fbeadef9c311e39eead1dc9ed4116bb1329d77a17971b49d8d9dc6fbf8da4fd5a2bccf0b5fe1acca1e7ac30a7ba3a059c4a264b4fa00d3d4b26502593a6253f943c814a7a964c8aca2550e512ac5249941a3561a8c6aab9267286463b119b0c8bd075cfd2a9ccc6b726011433a1c669080ac6e96ad707b2a28f1310466762d966b19c7af88e70caa2ffca0dd7a1fe422cff99ffba05a6fab07fc18e38f9cf53ad746a4221d3abcf08adf72c9d969c6a644924494a72b4c98fe51a2c15c638c7b84420b1f29f8931c648905c2131c2cc97cfb22c33b2748d30ddbbddc8c03835b946b9a93472e423e23353a64c194b86cc2d7244c610457e240d21445944061124aee80784def62c895c590e88586541c0fe35c4872126d8e4c76a5885f387291c0c91aa3f9af66dac443564cbf6a10231260cc78cb1a109c2b029861960a266e43dcba6a7262546609a8e1c8169226204464c938e26a512846109aefe421f2fd6da3ce348103121be75c7b4a613ca261ba590204a2160bcd8a41bb06c8ca0ca193165c618118244c8122143b2643494685c59e14b1822a4d8b04584e810e2234b17dfb314d283101e646811d24586966ccf52880e5d826801e28317fca3c88da22948f49892431591206582a0c97498457f5a5ba32041042193a58b102a5bdbb314f2e4dbf2ed0024cc9116205f666801b28586962e367b9640aeec6dcf1208151d74d0e1ea60813cedb965d7fa550a5483e69ef567eafa339f7ced1b3bb1fdd4d7c42c624a664fcbcd1ae20ce7c755ab55fb6828590081cfb06bfd0ff63e15b6030b54c2100847c1ee37862b56b41e1a904ac304891e669cae2c101f417c2491d2693a34cdfee891e5c34666a16993faed0e59ceb29c03051d6659c9c28c9d6559966559f655d1ad3d4b1f58574a1f42ecbb67e9e3070f70b90655ea9452a24a29168dc3318096a809c111274c6a8aa0842c0b593e2b9a0ddc977fbd8677d89669cbb65ace403e7ca03eaab6deb3f42155c307c337854c62c722184de637196ad1627e1d33b0e9c3a844b41e20cd3682f11745632cce1d36fea4f0d0863cd1a223cc9a2531640163997ae8d083074dd3344d0bc18dadc707788060931fcb8ae9d04a96a2692de49c3d141610e54697f2cbd39692470f1d3d9aa4b498b27adc907205f6af1792f038faae944c544a1e377c567cc73cc28a8c2c5047dc0093249457d8f9f50f4c417c52be2b258f209bdbb3e4a16309375f9f0c9aacb4869fc0264cffe9f9c0b15715fa091f4dc0ef53a8deb7ff02c608038fb31680a454367dc78fa7541875fb78ec710085f57c80bf5e1dc1d13de9fdfa1ff868c2fd6aeb67d958c7fb3d2ca4eea8fd6756f96fc0c507f6ef7fe07f9fc5fde97dd0f3c135c1fe1d7bf0df1e16990b16799cfef38049bf87c5f49f1744423084a617811e3cb298fe3327f0c28e75ccfe43290ceb76899b150a1428502e2d7714953b9686e066552a55b832f2f421d1e4bff6f55f9f38c5cf88de7eeeede9675bf643f633d53c0f86a86773663d4d58240c631f91584c47520d1d484717ec59e608b345cb9a76cd60c974a83fad2d9921d966cf324766ed96d8d49f935229aab431f541e5a30250290d51a344082b3274840942bb372e00440b388a484a01992c9b43a94a690b569a52c2b2b56fc8879f86fd2b470c312858c4152b39cb3973925475387320b191a369460e1d9bd4cf84e38c0c1c46187d4d9f9312879a6df72c711c3155e2a052e2d0522e51b1386096b321c15201500264d13970f3c51fa6684b25ac4a859b35a806d5c763c619679c7176c76e6bd050fd2c6719c6f7927663b7a4fffdfad545b687b0bf0844bbfe38da1eb859ad7b200cabfd84bc5ef7b96badd1b7c2e432718e24fd72e88c3ff62571293a869b2f32d67d26762309db99e8e5c4e832ac52cec7fbeeeb7b22f556c4aa0cdc7ce1fb599665599665d9cc2617727219a748a6d8f3ebacb3ce3a6b0cc5a7436f4f4e2a2d9bb41d50bd014b9ba89dc1b18851b1456cd30cc4f61c87b2cf5cc6713e9bfbb006e13cc771cfe17c0f8ae46f10e773d12766fd2173d63a0cff7623d9c24417b3c164ac1b495abbd192a102c868095918fec360b112fcc75ab98e4e368ed692696162774fb630b16d7eeb9eb49bc45a0c6706b4fb219bee4bf0133bf3875a92a620e616263c4b861aa0b364ec95254305802f51cbc72ae10d6118b321167b9c319a9c31b68f73facca240b06071c7f2330718b84cb1aa5a010a06ab1ac01ca6a830450c7dcac1db9fdaf55f409e9d7234a5a886bbbb3b16c2f77175ed3f22d0af9f63435777b74f5a291a52aea2606dfb9ffd9752b4edcff14904a2ea218068d3b74736c786f6afba8908f7c93b72c0824d9f5233776edbb66ddbb679a069dba6e59ff34520da7956f1f37addfd6bd6e8b66ddbb66d4f7adddb93f57e9645926e9fadfde9693623ef8b40b4ada8d1cc0714ab28366c7216edfa1b94506a80563439c180704fd497720bc2a0f1063368f2bffa5ba7af0aab0fcea0ebcf6aa98453c2500ad5fa0b7db29c6551636844b155c2a82c9bd4ef43d3b49c35254dd35a484111daf6e404da132f4fb03ca1d23d8172ed594649a500ace2640a14169086f00993a6699ad663c3cc931b63d5eb49e7851de00b453941e070f19cd4e0840a8452256a69efec594625f176e0e6cbbe6229f6cb76df3c31ab9c51ea62040aaa465046a8becf3cf1606ca0a064c38d13a054d11dbc8a0df0a723e721e722573bcfbfd671a87e8f8f1e106da24dabd8e3417dfa0df021ff21fbef967af59daee1e68b9ce0949e9b7e50d6bac25c67cf5e93c410a51455a34a148da81860140c42890ac328f77ac1284b67f8dc13985660670fd3de5e0b761e5fe0fb531f44023af1221764a0e182111ea50b4a4c6011db421239e72ce75cd6235ea03aae7962ce9e4d1f5c0205e5020d7b7a4c72ce198d9c73939d3394d4ce23998144c02525f62c5be0a1852c9bd4ffe49aa830bfb1247a02bd2accafb5f6864ff4a4f37d4ccc482c061ea9967e96ef0b94528c83b081d1c4ad07f59de9f50287d4a0990030c865523669b2f503dc75af7fc739bdd6206bbd1aa0cef9737a25022e81298047a0118803c401ca008b7420a929683548502687233288014208336972944564cd8d263ab28aacc159176759cb13ec01f6c8a6141685b2aa176778e23ba5b0289455bd764ad539a5b0ea047b68fad36ad61265aa09e1734ebff75e7aefb573ba0562a95750062843533adde7b452384caffb749feed3dda7fb0465b84ff77941a47befeddca7fbcc6e92399d3a1e5dd8f87b18ffb154ce9c299fc46000d4f15482271ed6d8244f5e9eb4d0ff170c28673967a00a3aef593ed900aef01402d8bff09ee553954d7eac9a7952e2c3c11d4f3bf664b286c71a263ff0580332e1ec5932d9c2444a09375f95fe5b30861ee9dc53a8a66ae7d6de8b716673f64a73d62ec65996b386b39c356ddbb84ecb9db66d1cd7751ed7759ed76ad978ad968d8dd63769b0b8504d5989a19ac25acb46eb9b1ba7daf5717c0ac79d767d971bf9ecf779a5df951056b456776b2fadd5dddaabbb1b1c1c97ebfb703ad7f781604e8e0e98a313863b3a61b8b3c3c3d3e3637d7cbc521fdfe1e1e9e9f1f1a920aa842d51c22b2dc1d3f5f8b84f052e9670a5129d8b1608f1f6df2bfdfa545cb44ca951156a294dfd518bd26071a19ab212433525e5146ad7b74ab406f5afd32a027672890039ab36add5ddda9b73f6c92f8ee30517bc5e00c0c0628081578a41bec171b9be0f04732ec82d7f5addadbd1767f6629c65396b9bdd36af74dbb2ac69dbc6719de779a59eb7715de779ad96f65a36365adfdce0b8accbe595ba5cfa0607c7e5fa3e30c7e6e478a53939608e8e4e18eeecf0f4d89e1eafb4a7e77391f4d9f6733c0ee8e672743c0c3b17777c782c0f8f57cac3139811a854cdf924a96434250001a000a316000018100807c3e1702848424d13640f14000e63863a7252321506c391400ca32888812806421808000803186488515241734a00e096f866db22a988182713f982baca44596c428129db6a7d5b756b109c6ae3441da7114123895505c2a92223c211f88eecfcfb7cac0d63bc27603d32652858679321d13f8a5eeff2be188de8dca4dfb3935b007276702483e4b7aec4ddb618d7e8a7a0ec438bf3890ceb4adf9437fec8f6189e1339585c498468e4960bdb82c5c5485648f5731677759bf7ccd36d11a2742d749e8dedaa7fdf57c8ae854d41a62c03271d6b212f8d26553bd2b0699e701ebb70fbbc392a740b8da647c3e6d8db76dd2d3e2db9ecd93fe3d9436616ea128a84326d6560095244db71e233d2e759e82c1b03c0275144037237a4e7536e584b0396047556ca507151e224bb80b41950300d71a0a553fc0a61fcd2e4fa56fbf709a9155e0215952072425d0e234055d3cbc94b67509c76543aaccef270e06676ea8fcc95087573b80fb86e025be1bb3eb48d5794bf197e9f3403bee1f91e9afac72c2bbe3d196b6ec660e371aec0b63d3a81f04bf1a5fa33bd7101d6b3b92befc5fc9a015781beaafa3c6f70427e585cea1ed546336dcf24059667cc89d6b02942e890b476afd4a860737a75c25d46662e5a389d0b728cc6c243840fd852180854e7d66a9aa94168ad4fb440a59045567f8cd27db4ec176bd036805a329da1c2932e4c6f741a288b74cc1041d8a39e2d51bd4c886ef212d03f4f885a9718b803d63e9b0b83de61c005c49e3ccd954c8d24f05ec7875caec6c888485036d90e062591ddf5afc7895180d0826299ac28d5a561e612395b304b7396a412693c66ac26c00e83f2d3ce4482ea145d6795bb3edf486077c6603e0c06b9791b535617a81214dd63a61133ecec1a4855b2ead7cfdfdf7ffe5f3ad402630c80f29ff1f674701be8514a9a036449760d2d1db68f8dc62679e088922c422ab77015f84faa9d3bf44d23a901e6469206841ba556b6633513cef6e64f981a368b4a48d5165832b557659e1eb52d131938a6a1bc94b0e53539b3fe77372f6ff06367e1f97b65e132a4656c98e0732e86634d650c7455bc0affea661cd60a8a4b9a3b6ec25ec8c5e0558db9a6b20016453480d14d201d1e314d0012fb01c1891a8a948c28356a1e4d770ec360aa74cade21ccb1a72c02b73c04fba139e26a4ebeac1b35bddb6c776293b7b99f14e31a049e24d4f44624795eb40e293bc86eac0ee952cb72c4476a19e9fe2f290362f2bba15a660a1a1d536ff469ec9ff6fa1f4002cbc173e22fcb36990110d43cb34557126a658fa82b2952892d2482768824e81da9a7817bb529751c0babd835ba38835b17f657f946fa28313d1129015636db8d47a3e30a429a5b2189c33d6aaebf9adc899423612cd09ec4ae2d25834201c10d90a0258038a29ded1997bab59191504f09361f0e48a068bec22e59fd04ae803467f4cac05298a328ea06ef436a0b0f35e8871d1b352a9978a5c8e317b8667bfb47e310b5ba6c946c07ac3a9e69898c27437ee0997fa5e543a92ad6a2c77887cfd1efa03ed9ef71f03e4be1a30516fe74f461dbfc28a696166ba29cacfd26876521283f3b491b05967f78abdc3be94d7ac258c006c0ea1f06933ad9010dc98476f581d2d6bea27d0533b188de3d1844e912e367114881be2b8edd1acabbc104e3848c77ddbf47c52953badd953336a10fa8b664c3577132a04d1e332048838ef2d5316b08d20d43181b6cf31019d0946e98f256291802242425b176eb7a47ce603302ca19d4904053a336817e2a32b2dca09306ea297f7f286c502c792d59165e2202eba0804dd99d0b09bc740c224221c8234f88d44dc2424405eaed5e7b2156157d705b6660ac25a84e65b76da1b73a987a6d2ee3ab03942cf164da7fb2d031da74d4e817129f8f797555fabb884fdf7eb7b3474dfe094bf1cb076e24f191459c21b84f8f32584087986eb99b3766f6f3da10d5990fcdb88a8b25825175ea7e1b9b1848ef1ea8d7e426dba05991872585471d33ae4a3a6f6665361a1072e8d5c2770843b541878be0451db41c9cd3c53bda39010b555026eb19a1a40904b60fa3aa9ad643e5e2e965ba43aea3aa57e91abd051308f7fe9e910e55343c52ab1836b659fadd331d84579995d423f29a20a0abbbd098e0461e0c491f8ba186eb45338ffe7304ab8d00d525224ef12c52eab6802c45d869352ffb6052918f07d496ec7838706ab7cb35582df0173f9f711de37aff6ffcb8b9cdccc9c4717759a9478a19bd556d204566e6fc120a836f16d20bff00c91c98f9411f1a839adb3e2ad55e5637d629c50c225fe1dc925da9c5a9de50e2eb9ad13857ee25b0ea98b16bc3fff179c74e378684d8fd322d40478138d361ca77e0e1af715cdced5ba89732e29c18b201a17c24aea5ffadf945c807b57bd39d9df7181a5ebc0bbfe01db536dfc0c10d2cff3d6827d41032e2115cc178557152b6d51e429fbfa80bf414a18235f7a04ef97efaa2a3c29d276c3733f6b053b45c39848ea30f34f232c2ad708982bc45131dea7e97c8eed5ed85cb61bf83ab748cd1803cf491ceb29939e3a2b62039a669b963943b7f4568d2dfccb8ec38c341d7ea2f34db37fa14e34706f88201bed465b09234435e493a784fd154782776640d9863b1331e31e603db93be5fe1db778b7ed9f99c654308a3fc81e7de678efa86f6e48289d5547b8959e500e6d678c5888ad69fd92dc6bd053b0822aec1469b8ab34fcb878bee6e9387d15557ccd0dcdba8c8c268b099ea42eba9f105e3f8e420999e5f57559d8e27172f26354a2588e0d0e4d3d9104bab01f52f2f6d3d82fc45e993ec62a564483800e206c6fca53732faca4224223340cb07968c871d51ebd7631eda0e0477c5ff949808826c687c2887c37069e6056472078c5d942dc6c947ca885f822546f926bad04439eaf2eeb08f1ca4120fa4b7bad16978391a47fc0e7926e828e9d86c9cc583d38c6fcd0d652ebff04aaf4858b5dfe6045f1ae10c9847f3157e23ed42cb84a23758511f61e95c18ef08eb4c7db1d7de4df7d7a9d2eb5d601423bfc8d5a36b42cc5d367da93962c43af1bf501a1a962131f90c1e4e165a315d1caac1a5e675d5cb35bf1b38ca6e405f979ee1f45e0e60465a39f9deebf6c381d0803b5663dd79e833299fb04dea0750e9593f3b1d72dc7ab9aa6da08498306814013bcadc1f62b6aac7f09d337f59a1b4f0d71de7fcf42b5be2f69b71560cb62d7e2608ddb7fa8c45e19e41e173072d7cfe53f3f5c4ecce007ef3c21db90666d041975b1d7bdad38721d819a4f369358d7ed67210523f9b3ce151be0d595b82a0dfa74a558073315db16303ecdaf2863827a28570688a89e6abd2d85ac9ee4efa82b8fb69a9e52320b09c1088b5fafae3a36b2c0a37003d2b3a3e7f2912b390bec2a7610158645fc767eba96d66ad7b67fa888b6fd523626c23bef26a67a4893dad0a99e21a1c46fc408e9904a895840717a5a02d280bc8f7f43adcf5d9652412bfb7d232b620c07074537e9248e4375a56b4b6364518e1307e417b93ad15051934773cea0e3911be04058c0fae18e954ba6b391742cd0285d2bf1d19052f8ef4b5d258950aa985e42aa553e704fa293b52a3a3ec8f9cabf29368c474bf683b658de27ebd49f2afed47cda2c81aa1507e0d904518cadabe00c766b2edcd2060bdd67e624941863c16669fc66d836811eb4a5a27821ce801a0f12b1c3e4c315593e56c9260821ba074895cc1b47223646106c0ce7cb2b7cbbf50d935ab550ac6c553ef3d56186627d3da5482fb986b16b404a105d841052c3074f849e551f408371da23e8f5d0755b122b3ce72a624f5b9fdba4711d803e23fa612715c0b9ebef00bf428c0e19ad37d9964ac68424f263a228aad55425d33c6307e0247c461833a7a702c03839622a62d29b84d61d0d71fa8a7bf915a80c808820e97a8c6e595d6a969449b2ef45f1c93c3ada2e2094ba3dbd66e9a4a28facfb71595965b4eeded2f187252c972cbdaae491edd06c0a16f918ad69b2a2535b8b447db704927d47d50c7e7beb23aa514c226e0302fbdd168e694f2c607445be4c685f5638af9c2cd01f5bc92e24fd571c333c7167a26b8855b6d358ed75bbb98e4a951e5346a9cabdcefc6c113c289f2a6a8710504d801b69309b65c374acbad6bf6b35bfb478b73d6944bb6204f9ed9d4882c8ec6d20d4e8341e25c78d72e8747b4aa5e1e1dab9f7755742cdeba70c581ec7c8a2ec7885aea1844d7642de55769f664d453ed57c0715748021d789ae7efe1568c42170feb00e0188fcd6bf1e052d94c616c07b8904bf9ca45278f4a4adeb6ab3e9b64cb0990eb4f5d6557af537f8e2dee070b1ff25a6634bd81bf569738b8733f1030884c500e9ed80317aef4e67fe84e9f6704d2f0029b8b9eda11635244dcc9988d8cf6d1302a69cd0c161c8969888a4f5b6d87c348cc1ae265b535b2c20fa9d54b9d8e6fb00dd5c08d6c6bc0256b4ca25fb37213951083266e1c7fff878de8be0abaac06b76e607e692847e424c92babc63f5d544871e295889a1abce1cd147d42107702e1cb5ff632fc20bb778069b4c90bb4048646392b06adbc38f6eb31a7baf70d97a221586306fae03f2a1650a155af4ae3ba2b91b6d6fa931ba9ebb3fb55ea0c9503e228065c0d9c31923b5e85ed53a98c5fd4c48b10cdc85647a2d0c88cb61edded1cd1fee8bacf5d6670fd1e7f8ab7df9d666c9ac6aa000449deb47eaae85f6fd7fc4cdba31198684b90ebbe8bbfdfaaeebecf96235711893cdde4aea8835807d8232567be4e830f99f412742fefaa74bc0d34b81fc79915471e802ee42c936fba4cf21fb05a29987b3f2da0fdc8839d8e283204b76c8d2ad5c04784a96c5a6ec6e8525a28c71995cc9dc16de751c28419d20d494978fa6574cf99ef0e40b1ae74037fd7d068bb9f62ed0a461f4bd64282b5ec238bc603530318e521de16f0cb3dca697e76a5c80311ca382e5c643d827091ce1d0939898095fea1c0eca199fac2e489a18f6175a6d59b1f9cf35fa04b67d1b806444242afd38d7a84c3f9bfb90c5195dd00ae6bdca50cce19c5cc5e82d8e585a648c67493dcd54848249672a394fcf638bba2272f5af8a2bfd1681c323f947b1bd505c9de183e24f4352d6c947d44493b6634bc136e8fc8e34c4e5140209dc920b056352ff246a78fdaa29f882fe59a7858abe24b295f9cdeccda90b4ad8cb1d089be719a2e013be30f3502319512cb2e8f29a64e975d2f91359180140dfd21d26149acd903beac2d211e4a6baa55e7d6d9a9f259b1793a836da8072e16f8207d4d7741413c3aadf46d128586e1e4e61bf3850fc98ba4543aa21027fe365b26ff429b84aa35a0a663b147717159ae3a9e0d44bc93bf8b2e21160d4e7862385008ed4161567a6b7d078115771630a9720a18265e68f643d6b6e159f95929efc9e0f58239018403ccd02a488835e0a6de4ef24ab9c75a54a263663a6088a946c9fff745028e4bce5220bc6f9f9e5768c86e3fdcaa1552f319525d0cd909f30ced014011fa6c5c769dc406524537005e2541fe57e08579a2f171ca6f6b65edbd688d5ef0158bf7128d84802b419e6f01c90846f816cd484306d05a87a01310f80b157736d670e0f039a5ee5583599b46c85e79d167b31d2d93b21763d0446642460e338d457be9685a0050253381273144f8d60c6042fa07e24362634d2328b08b649986e0788ae6811245fe67ba1ce763d919ba2f6b298f76933bb40ed427af998df4597437b3e7fb66d526a2d939dca2172b2fd408c42d2911a4c8f63c402fe0a9cbab3ec4957a7f16b77835012cc3db795bcb9525b0cb8a232a9b1ab58eb2d06f26025919be4fc1ccb705cd2042e191bc7014d35867d1e86c893a0c2e0a6f745503b4677bfa746a68ece4cdb6f6cd287ac0bfb04abf34e81f900135b5bc3c8b05d6087601c08450bc793d61f179795a6f5e11ba80e575a7523d58e63aaf7dd6e3f522ae27d847787d2c85552ccec079f1abdf4d84b212f30ffefb10495ce0633c9ec82d66b988f5ef0f8f8ca5f0a4032034b10acdd59137651d358f6a6d5d56321acd42ecc06a6aada4cda44d29bbe6bc96521ca999f880761277bdbb6629928b99c1a176525c4af72ca1b5b648f73da3fa5669634455c4b96e81bc0e58222ee6aef648fafe40ad221e672f045c1905a4640483175ab3e6be0e7accdc4ffff5d0696563f806c4296dd86be00ba981177fcf1c18ee8078e9cbcd9e73293368fa8aa51244c4e500d3fb2e5dd8acd2f17387ff6ca4cac8482b968fa71eafc3788feb271246192778a75c163444b6be67821108abebe58ada1afa34d45281dba2e4697499d28e2e42a671e3a8ee596aa594c6efa4ada868f574df125a1d8b746df1cbd3bbc546b9696800dd04e969b02af6c5a402c27e47d738710eb589a2dc11112ad5a7c139c4ecf2dfb311bfa322fad1147c86c4b278b10e89d8c3c2ab577d93157c266cb26a59d3836a404b53384d7bc6f0193d1356c69756e832932f4d1e7a7eecb3348015611831763d4d1b8237471a169b526504d879b8a3a135b46751a69a34e30c901276cb1f22f70d15f78064c640a04ee796788a54fe94b23338621ede770c9cee45c316bd9cfefd8762679671d081ad91f972ba97fe5f320c4d86533eb59086e9a96bea5164b40690dd992121387494ee63976b8ed311907b04e8b5ec95709dfe5bcaf66699ced6fe225df78caa17900b1f4355fcf51a232eeec0786736308311bcc52661e303d0a20c9d9a91b8311d990dad633cf74f9abfd88ebc5ea028d1e8f67a61d0c0f4fd1d6c18d62246c634483102d93e5a2bcdb20a64d094b12bf9d8b7a372c64d79751d662dc732895e13478ee1c7ca3de7586317615422a312c61be26bfecd24d74ed4218ab9c3bf693ce68bff3b46e3641349821117205f3eb60e2835bb736279e6a05b31cd5c42e077800395bb044cfc8ed84e18eb180dfd9a7a2e346dccc72ab7bf41eb3f77546e329a420a8e060de82f886e33a311de5b4cd16859116cba442a30c55af572e5086ad8d798e92114a527578ea0e65a011d1ebf93e503efcf47488a473f8baeb53421480ceb9aafb1515eb9a756806007d201a6cfada7e6c9b2ff59a4e38959aee0283e4461781a6758ea5fe462c340c57a0d9833ac62c0276c554e39c17dccb0437c11c150d6c8d0d3b5d18271d84fd5fe32781d75ab8adcc8f5a3e1158ccf343276cf461689679d47b85f067c773b7a6c7f164a60bb69ad160ac6018289276bb057d895a303d0ff2d3ca3492cafe053ac1874c5646916abcd07e6c4750f55ba1858b347010b243855eacd3a007176ef27677f6fa8d7e17b14c1e4321178b4a6c3758e8c800609d63f11f7782dbb400000a95223d9ec4e2ff25b490808ad43b05496931370df22aedcd31c2d620524d2e4f375d2c5d5899671bd722160093703d293a075821f284797a48f482df8089495248eaf8527635aef48f898b0bf5cc924502670618bde6e2eb9818b08701bd070140586b32a9679328f67df3c2c3e9c2e7dda3432fa34fd6d74076989b4f12c44e02a27cbae9d2572c400802aa4c166d39220e2dab62074d198a0f6494af2bcd2540158f94d02e9525d2498b8782c03eb6e7fa46d7bfb03ee3cf163db1a6c6e723c2f3cba6b7440e29401f1ace7a9fcc47cdce1e7531d6df228d1f3985a6a98d4b0dcb3895ff8660c34be29efe2695ee93e62679765887e28466bac12a4122cdb6241530cb92bc3324cc4ea7e09094a2db1e21d643ed6b039da1d76dfbca66a970acc619f0850dee6af2852b93d4b70a64eb32781a33fc394661ab872fad6f711dc266122542648c5b87b17c52fa6ba5d0001a50211974dba1f02502c5410cb34d55896963f1f35db90b91024cd251fe3635e1c7085a4e8648235814b42c65482aa99b44ac9f48e3964f42dd8d5ef7b55840b84be139b66f1ad69c9c6936e0b8a4eadf4ef0e17c39985940ec4850a84be9e00dec589434d4215eab1e3462003e8728356eab7af647351326e875ad8806b340e43d09ffb1e1d64b637b3beb4325f1633223a2ee8fc06efa0050cac199ea1e04e3d453bffa1d4ef92e383acfe43d33677f42959cf94964749ba79f93147969c10af1f8fd53afaafbe1d65d2fd5ef393cc8b51d9e2cee064109dd5877626c14c09b172d6a4ac2c05542d4e8edf549951eec588041290fbabc4ec867da5ea070f7df7765226015d45a5ec8a7b5572bdeef8d895cc8098e9eb4deee112822502a06bbe3a22a22bc6452265530017a105da7e364194c75fe1dd1cca1337df7fab0f28814ad044d074118a7a951fea7ed3b446a1d99168e2340b314fc4edf986f3476ba2d2e63d1450e74cd336a1b1ec4ad68c4670c2d153cb8525e6d85bfd76a54544b4ff2975061d3013c3f52c8010cfeb03dc9a24755ce13a7bb7538ba61adacb259546d6710584862db7ec5f8fda4f64a86cb1b61edb0d7d11311afd0745e10d09695ead8fc2bfcc63260b8ef69ce3c650ec2573d3ec32a5644870b15a423a02298920054ac7c3ed3a6a0a2ce03ff7273d15323e5baec87b5ddedb65cefc5633d72d5f1315a573b191a372bd2bf0cbc0e09127a70d847f66d921814f807da2bdef1f49c81c0ec2f11d13fd02e8f40809afee206eba2196cb1e3984b8bbb47b5124a82e25ab3bc21f430a67654c6a14c99a3512913ad56448c0c82cd964dc6216a1baa7e08a43696d5bc0bc26585105319efaa9934dc0fed6c5a7ec6108d2c2ebaaea0c72854617f46abcaa8cdeb85e44b5de37cf76269abe0d67f69935bb79b6b87cc7a7ba013d02a83bc01f7c6df1e79a56900fa19784ef66d05852508b344b471adcdbbd6174277eb0e44ed8616c29fbe1fc1aa43e18928002a3cdd13dfe78f0f38e3d3834dfa16d2d024a052dd2f5e9c64b1eef4aa499ef70496320af935240a58defa00b938f95eb8ef8ee8ee8d3972895e83aa46447df104c89ae3706fb7a9aea845ea93e511f651d6280e3631d5fe6c54113e9435052b62914f390295caba2177de3d4ffbd0f2dba47ef5cd14cd31c7a70e8510f9880bab7b86e0ddcd71da9f74132005b77ff9e30821d7bb7916c1b5f441bea51353145a23d689917a6f18cc4a12669256265562371c9265d9a116b5d17fea3b12f8e9d3ceac73717530c81e0f3d88049fc6069ec69d53d7ee7d0b25db160f2105a187de5ae710b455bad413087ecd9e55c556ae01dee7636a6738e202d97369a01270172c86513b22e73ae7a7099f34a26f9c31bc1472383c9760dac778d2215699a8eab357a9bf0bed450148d865ea7720f2de9998965588cf87ff8ed54f4b63bf4407983459cc0029309245108427364bd8b4e6fe13bd4cbc561530805a104f8dd77faf275dd2e52414dfbc550dbf0318bbd84f19e59fa1da25a22570af5268724586bda313d3b13fde7f798449153197ac4dd4698cc85dfec4481eb19391329baaff24c6c848adfdf9943c0d930d80706831c3f7abd0089ca16c7c39ec71d8d5f2e90abdb23da2ba051f4571f50460b5b28dced97597d4da5e28b19e080d30c82646762d5cbaff04e10e98635c0d1fd2810539e62b3299cf5d246187c6cd953b9a6f5285748dc27b21bc4e49649bbba8d18e737fdee98693e460b404c7c9fc6280119fabb84e8088fba789142b3c69a96c500abaca1b709f37a3888cbb6d19d2c3b0c575c02799eb9e1b23c5a8e9274d8a0d21f09b679ead121852dc12e24b116258b7d4e885dbde7938f9f5dc2bc4a6fa1d2ea5bed70e9ad20d3d28fef966dca8a8db741d6ae5137011d1edcc5d80214412b84eb4979c47b4ca05c9f7149db8ef7f33718299f136ec898094de623c41a14b2928c46790570637be4cde945b3a6d1f4d16b344bb4a64a14eb37f8c010d0e6ab57f2ddac9662d13caccf852d0eb2bc9365348d240f75401ad9433a8246973cd7b1a585aa4c3172988f7c6fa408c4c240f76a9702d06b9ebf75452c8848bbc73c8507ecbf1b0f69c13fde949184881e318eec500aede9bc96dbdca4f8b478221977b318f8e045f5776025f5d49b931921cfbf2081d434716afd2abe4d3aa5bd125541d5a966968c66b7662351083cd5b035425b78439bd7c82d8dcbc27a4020919eea939f06e9751879691149b738118f2b57dfe32730dd3738934eea90524eb8bdc437b8a2a1eb155bdf98060057f9ae362295676e6f926d84f44821aba308a6297f1a087a1c4b0c838bd83360f1568b2ba39f6d1b503111408d924b30345bea0ce7a3b5c51b7c897ab52a55908e05f5d4cf9773ec0ef2cd923d6211a03c06b220a58483ad620e67063cd82a337833fb991803ddea0a94dde0d66398b827a23a97cbc4cf41d351c7c3f593e5990cd91ab2fad84748de352f38113a3780774d421ed45b260f7278d87b707c5e940c8a5c0195663468df0fb4fb434d2c5022263081447598701d4c7d5218d464ec1837c5c18ef75724d94654d2cb2156587304785e4b17c0c5ec81ce2fd84d7dfc4c61ad4a2812a1b85f0ab5d002514a57cd3d09524f47f971623fa16e231a80a01a4995a9407519f937a9eb9cf7edb6d2b82248e99efd067ed4e8cd4b8dbfa9395f5d48a9b3bc0562e6303c2f8d0617de22271f9c33a07d68ea649de3d3ee4e703bc8411026759ef84cafb46203b3df920e8f7c0371d4e135293611ca07015132a54109e678d427187dafc86cfa4df90473bfb9593b5934804a36159e8f6d57547cbfdfc97b1bbf90cc960a4fa8a3a184e29dc689a6bdf36c6413ef4b3c4799f86ac1f99c9b9f9eda35fd1b99756b37297b90baad6f64d61487ba267f68eb770a540e86e7dde37770ca867bf697d46d3e0ee80a4dedf86581c4689584495989ddc1b31ab3a05ff6821ea28eef9339f29fc99b49db43e4877950e00f3da609b98479e56b9548a0e67aa7298153f8a366c849e81b74fd19f823e7127f70744282beb370405ad4bc3dcfa8ae7134324d372aa815b6a34d24f47f4e0f64253359bc191a02a2aef8d1c0a721a0ae9afed45673dd20fe451c6c9844f11cde95f72cbf47eb30720fd9cf262f1d922f56b90476d40158a6868140d4c064d2b018af4629b725287d5da83e69b95acfbcaf6d422f1a35b6220161ca9c15c8e8e7b872a318c4a6f7f93be20b7fdb9823b281ddf3962455f8ca0aed9843957f7de5c7a71088ef3c353a6fc0661a6af3fa1ecab8086badc5ab10ba348ea54b30e09ba41e28cdf17cbb2e0b021823bb75b3b821e380c5c0b392cdd103d7f04c7e1f7abb5ccf09f327649fef4a6d3dab5b6499c4751ce22a0e92131fc6cf974b96161ad95c067a46e401230486d30b1063112233efec9763f0def53aec3ff24013834b6757a04ddff482f87f491f9d1c4ffcb4dd1c658a81dd818692c5d1f0dd5d440720b86de8ec8e0ca2e41905a61760d9c0db9f5d8eaa196da115aac4e5aeb22c6ba57ffda536cb17b2f328c2b4481658ee34facdd4bb8239f3bc3b080f7e31bb55763b7089de5f0a64b59978b9ce390878e315a03644c2ac7651b5f3cd2d565a711c81f197ff761d3f6c2ab54f3498161e4349f900d1196fb5450edd47ba3c27368430a4b05ce60ebb9d9267fa32307858def52805b0a16f35d26da92697ad9e46e301148dafc2caef6637a2dd8e84a6d2980f2f47f27688ab36a4e9c2d9b9b0620f6a193e6422f0cf964a512dbb9e41a93198c863abf8466817fde0dd08799027c32490b189afbf05f8cb0ea69cc83e987d4818061a0c17849922e4f4a6027cbc7b6da140ffcef103f4c6693292e2ec8eeb71f6616908d63b1cd3b417c9c1b30f08e9cb11f36a2203b640289f9b734fc928534e9f015528630e823cfde0a7ef9a898dd722b138881cd1030fed263e444368c3cda941195d55ec3055062047bdf29897d0db37bda68e0a7045b9361f627a5f188b39c5fb333870f38333b0230a05d092327079552a11d936091e28d7736471df2f34e317f3a1cbf8693dcdeab2ad77319833d70a1972bcd2a8097ebbfa446598569d549578a59fe2882815cfa5077c09916b09d33884ee6df684ed2a535e6d496bcedd06418619f7ac8c74eb6fb607c64bb84388522bcb22f26f53f491f3a647a1cd9932b6d26e978df0bf23b0b4ad23790e0eb407f3a201441184682bd9185489079ec11c75ca2ef474b712a1fbf8fc031e4dc0fa0a2b94acb46ceb46292c0eddbe742bc41beecac96c19ae44f01091528708023b3a127568303c46651294b983a0aa2b455dba30a2b092f1403d2a2050d2965a47868472d19070f1ff3c02ef9c0b6ebf33a7d088939a10e807c906b848d525c1b7e3c3b9f242024e8cfd19f811b8088390e2568aea60a72f8994d041a41eb349fdf1449242180818aa0f13aca72f9418bd1304587f15d1c6aaab4d5711448f98578d8a28656ff11103215bc54db034c5bee5ccb839ce6e1c80f530259c4885a124f8f90e892edb5812789aa78bd48d5d530998477ed847d79fee38114b43f74767449fdd3b42a7b5a2857d51f5cb7c44c620592eff59e4c1c83a0f1d7e054e1bd23d18bc3a4074d1549d929b5e46acdb122c268bf3fd1105336943747d6728ac2977f8dbb2d510d12f00a1a898609c5ea986bbd9a2498e9fe12830ad09647c9f60178f594f8b7687dbdb51904430e058f44da39cec7b8de5ab8141ffe96e64a5fcc8165e91e1a7d3dbdfa200198f3bf0ebb0321bf0202dd7d1a464b2cf651ed739a0b3805d3feedf6643c1b3d679c4a6e4c79d3656f5fb3d3e0145830809b713e896d2e003c91ceab83dc8b3c844eab8646b426dd442c7dc9e73a468d79826277b1eb9e149820c5383b0d8f203de219991191eb51d76d30ea2cfa8eae09add026210a07d58266dc99a749a3e83ca046403f84de3e1455b5b0aa48d3fc4281730123a29ea2ed8b53c1585468fff44f6593c8db2b8462e96f9db5a068cac05f030d3bf219913e7360204d12771434cc1c9f7705a93650cc30869cc86ae62e8467bedcab74d192cf69e29068b9f0293df6ac9050455f0756f6d2449ac760ad137f107b65385479956529cd486b52f864f7d5a2579566c339e9e0ac202693db8ff3502021e4f79c09d7a89730bdba172c8bd24ba013f39f7930cf724588721de77d3dea8c6c93a327f8c7293c4ca8dd5876bd453e645a25238a6eed34a156aa109598b1b2eb7386fada49254b9b327c080058753eb4f357ccc295e3b48ad9fc9ee1fd69fc192489e51f514555fa76e272dd2a0aa0acccc1c05a433e391440dfe0fc6de0fa4b689eddc5ad25022827cf6b12097c2899a1a93517a5da53c009611f39d5e4a56f930ddcb270acfff75c3edb64f5ff9d99afb106ae1d67b518bb3c3789d88404814eed511406ee098229adf4c1e3b9b83f37e11f0dfbb9df4c481570fb3c711a1285ff303080e0538292c22a2810df3f2226f04cbbede82e8691f5e8f75122df1134bd9cce73942afb5a84b33ae3ff9262e3f5bdef2a5dd0eb8786452222961de2869cc5432334b642135ba2481675b02551546901a5dc41b16902b608c5fcb398184ee04bf495ade9636918069a12e175d4d1df4c2348dc3e961f64adef5ef355c6074f113b0187cae6ca6349dad0398965afb18bf121ad0e1fb8694a5834ea6b6436b00ccb5dd1f2ff195ff6e07faba5eb59148b7bf6aff8cb2a518300de47b2099aec4bd0156894c680ed4a248adf0119d2f5d46f07815a8126394e6f5cf36eb44bb112022ce039b47873e5bf76f6ff1bc4ca374552474c4419df9ef5c50693accb206a30256856df36d6fe4a6c5406856f5361be228f547882dda444d2178c3aadcf7cbe3cb45c683deadd7fd285c6475106eb511518bc3932c20ca2256b7ede41ee7beb26b23869eabc68e533dcb544b5539e3a4ad40bd66790e45383bc356435444818ccd49c26e2d229272b3a45dfeac8c5bc95d9ad04bb15e7f7f262323729162d52be36838964d8256316ff596bdcae0754cb369367b6f80eb1ae04bb9df9ab88b09eb045b83f73fe7740c6fcdd9fa828a9b79f5e404d586f870bec32c91cb6fd32718509dac78843bbcd7431906a205f176bbbe8f5ba1cf636e7ff177e09ea6a1f7e109211c375ac70d7befa9cd13d062b4d98c3d8faf7eb844defa98153c11740a144dd916cff227497be59c01a3db76b957a7773ce71cc726ec76703c4e72695f701e5fdfc9851d6f38582ea5c9f34f91c54a9c7acfc2a18c6b416ac2b10a16a80e8d01a1681c0a725c4a65c11fc7990110319f14635f2b4ec6eb1a5c6688c60350a84157542554a60e337fb44cc406356c514f0c5b847c29e04836c18de66fbf8273f838f22506ed86f2d68ad3d144029213294dca552ac32fcd4153fa32145b22697540cc314d845c4d4ab002dd9090b5d2e573a6537ec0885825cb474975932ed62212660c78768d2f1fd2a8590ca58cb06c613823c06f2748dcfaee0c61f300298a1e59508dc62741c0c25e61429b1d478b6e06271215cd9000cf97930fb7e2959400c58cfab9031b3136d764e590effad6973327681b4de80295de55a825a9bc5763753f40aae2894bb6e00cc6f7a6e150fe0ab6fe1bddc4a38086d58834af5120f5553f3dab01921cc9dc76d7e6dd469e27ce76574b475c454bf3431bf13d71fe423501dccb406b05c96829ffe47baae2c88400d875f2c572f97f03b83085c5af139d663752ce122c13945528c7211c23dc3a9a7c66facd94b0696f5ede991e62bf2a3ad68a255bb168891a9503d4a61efa52fa96d3629e9eaf09d1497421d48e2cee8edf5cc2f8b66eee668aaea79c606bea12dd5998344587b7dda7316f545e3af1ad989bc006c63aad8471f956e8a62a745d322362cd9245a080cb60c94b9af8f43098916b02cc8dbdee23af1d65d42f6bf417bb9653b400f9b5cf59b3f597f033a4679cbef2455369506cc21e31ac1005470fa97988d4a717648d4c13a595129128c3009d939650211ea73a93288dfb488b82567ef394dd3c893b6bce6ad757ae14a5f76ed7497615f213257f719f2db62384d31377ed4a359f0d42a26d001584493a1226b4fa6b8037047412eeb76b727f641732cea50179ce48ca430071bdcf3ad993b795a677b882401077b545e816dff1e4a590af3c8556e842f6291dd39d90002ea8982f6b580a6fadd9cb7c9e3b83f3b03edda965d3acfcd7094f6677096749d6096a6550a1542d5b0d751732bdc7ec5e37980839f7751f7e94c4446f9dabb825aa2100a9f86afdeaeffae38f3b727d5507e25aa13bcd2e93e2cc89a0e01956513ce31ae3e462fe0ecf914fc2e58e3ff4396dc61fce73ed786091c44c95f75d640bb60dbfcea7a43273dd2c8b72621c35b662e6f773bfd5d8f37c80a200d1037b95cd67d19b43e385757404e8f947449da51da18127ba20ccb3170daae949759c0975e927a89d40cfaa29b10febc743a070bc9e91d343c08cdc9dd0aef16982d3bc6f1663a12e2585801fc7188e4b7a5e46f9d2430393292d03ab57ae4866f674e2d0225df1de49008c4ed62b320e503d6c11438aecd68ef3a6db958de476535c93db754e0564f52ecdda328206a0590cc9bbf60f4fc4d90b09352265fe593124dd6480bf42cc1fa150db566083958d25eee4742605b78754793b4c304c7630a9ddc30d84a3f50367a4e69e09362f0b3f861da17540ab69d9ba8ff758a3966eb0124030d7697d8dab35f099c8e6c44fb75527d580b5445b42e60a49dbfd9cdaef70f00148357a9d3b7f2c473fbe44a06c60132c550440d9778374dcee6ec1c8e9ae9ca104c87a0c47e866a19cc96d637c6a3828e5f0109a35650723a7f8c94cc8a0a29ed0c8a5c6216cd69088b4f7b4a7f59a8d9bf9c16ffb0d8441642a6dd191680ca830d44d71333d84d783e4a79b184d995700420b7e6d9e8b37afe0c3271ee81064bf356ad11d478d40e98dbbadfc09e615ca1e6c17615e825f6433ef713f24342205ae48326387bc8031fc859306522490efd2120af31c52703964c3b66a32e6f430209b042f1d00518256bd6872544508e9fd2a50d02da7f7970902e88d2b4f0ecd3e8022306b070e7ec5563b3e2660175e07c6a5943095a84503d477512b2429df2fe1b2477dc5da8bf41a235d19eb3fba5904c1f94b76178ab2634f4c2ded9012e8c60bd17f1a06eed9e766deda400031b568f4b343a107435ab8df2589c6903d5143f771dfc0931c23531f2847a884a25c1cc8a75930954a9f97e4098034f800155de7b565a0218f03a87d57572eb3127b8a55a101fd94221fc519ee6a09f128017faccce1dfc84b71461700dd291408aa1655e4d4845c094f68d4ccd1b95587db87b95c5950b574b621007a4c234083b9d469ba9c98614aa6d986dcf9ed5a7f9ea93325666221e106fc0518dc2e0533d003e5ce5619e9d5e09a6d34a2b8808cb04049f4a2056239dd00680f199b7deac5024a398bc14a9fa1c2dd454355ba81793c5dd943b9f5e4efd792de27e025a05dbea68d5e2b92b941655ea106bc764a5ac8ead0acdc45a2b5994e977dd0c652276ee68b2803f1403c319f3e61662aec000b5ac4eb727bd8e49dca18ae290eef795c8526150d630577bad61fef11dfdb9e23430d2c6b53ace86693dc4a57b573b7dc192850f9d20e1959b4b4f58d8001e4445a13b056004c528f704f7e6d5e28c62a25b7646b0d38425a2f29151384a89e66e6254a290a6b0094243451de195a66ff0ad7d293847d80a70398e287d79dd03cb7b3930f51d6579c293c1f5d69e12bd5c3c7e2fd0164fd26455ff479343dfa35a862e4b9ba85b36fb54196b8411a94e312c99e431ab104b867468604b94fdfc81385cead937ab4231bc27b83e87eae56018078eae9b43837ffb7b8455762a10bbdfc67168683c18759e85905970e9f4e7043f06934d9a5d2f63560226a237562fa878ef6cb3230e94b0c7344f675e86413fe778a3ca0348b855a654fe425d19afb90be59bb8e68799f9887eef8d142608c16a4a29b81fe420959c6bc7f0353277f40994d1f064fd11cefa4a0c67ae26e1149f98daadce19098b936f14d465caaefc5f12b8a9d1262079a5d323d5fe2f9e98d3fb7265feba709a2231b07efed31f4cd1d7734c08331eebe862874ae4ba4a06f5ad6cb4dddf4eecddc16033fe6dc3ebfbd358b565290af9d71e62aa8b2df00153bb5805e6968e59a4bab71707f357c38d1d8b9bb5daa98fc094e25e577c0089f69512ed75879e30b4db76707a7c7921945ca0eb9d3b85bdfea2d0ad7c3e0f65735486fbcbf3297f3141b369b3eaa9aeec944b16785b927f5123e15cd49df0130daf3e5e6f2ab8c19cc6ca055d34dacd37a4d775bc81797a8bac205377ad0781b17b9e0eb03f926d8974f70841e73bcda136c7d01eff7087167171bcbce1efe377299bb29077ac9e3bf66b2b04b516e5449b978304d39339d023f298fe9a367307331573ceddc23469f5713ad3b6c7ba7fef4e6e828d32ebc8a24050f89f20e9883a51a1c4b8c5667736dda98ab517345ee13fe1d3762e2a7e8957801f8600c7b5e50d2bc8eb81ae0fd95f619f25f37661c51b002ef2f48ff821b3a91a293722145c971f2b22ba9e22b8e8732592256e0542ed03ca2aa8d652638a5c08e2ffb6d1326e11b6beae7888995cc58722b40af0adda920bc7b01489f4454b292f02cbf644dbc243acd868b9edaaa05b636a22241ad6db7387dcf7d1863d52e6cca14edaaa7f3d0fd83730259cf2681cb0b17bcde6c4431b8889c0262d0a2ae6197149b9d4004298bf3f4c8a16ae3501764a77e33efc493faa5f6e6ea3e9d86a1e27926866fc5e866add4ea08c33fde4b18ee1ef1142da0091a6d3894b72189091dd10ec3f52fd6e25f2694f526518e4b96dc9631d79757b839309d908d19bd75192073446411d1aaa4c6ec53359fe5a8e58171724f1f9803baaa65d013c2e8c8467350ca07c059dcb70d128eb57e6aae94b6529bbf2f4656a012810b7391f8612601ee813eb457be6fec9d1a88fb163746ffe02568d3876c3e7405cb81236db83c77b75eb0b306f7c155948b3601f3765cb2eb056a35300c37ac0d902aee11060948aca4d7bbe57f42e4c3d4362e022e4760cf37d4e02d1f9e3594bbd94aa9d3a9345154197cd92a3b9eea3cc97d1be5ac4623c6cf06a6beb93381d2a0bcb9d2c7051e285fca00050ecc899c876804879816fa06c3be5e6ae1161a792a4b80cbe727c2c78f99d1467ca174a5557d6f363009570be73f01cb2d334f786fbdd2fca0b00c335e8da7e48e09a64f72d78d145780de0291fb5e4129708012b35524df83d6c323284bc107e48851073d780243ba90b7e608b8384e697e38c61a705a50b259e9e24c551e57d368f4b4cb4ed62030253d0c947f5c27a419fd145a9fa54ee3a289ca44ff48a26ecc7673c60c0c52930c166b9daf42c1d5a31572ca4c2d0724891d04bb4151b9d3a010262a2cf14e558912f7948b2fd5d03a46f2638b97d2c4f6ff8c7552f5cc5f1a84d6bf2bff6dc00b8861d32066c005c4d1b381a9d75adf93c6bdee41b581cabfe708e1f380a3d092353347f149d203eaf465d4583ca925e28b1f89477f39b42b83fb6be4313a61e217812348925d2a51656aa548ee3406cadfa2f430c5fe5ff37ae59d9d0dcc055ad7f4578019361d987face26d062635ee46a0eb76b3cbbd305354e20c02f934490774c16bc0ea77a23ef48e98971d6e870f1802390672bbb0ca9dc7c73a1e98ee0a1826b8db95026d375ff8188e3538606f79dadf606663bc3f411e7e05fa25104cad0c229d35c9de9a18e29c281008e6e55ac7f34bcbfc441a1917d3462c13c21acf8e53d2e2d6e41927829aa0270c53b5b403b079d9f69c575d1a33abfea4044e3d08a7756592438fa7dd8eab6365cb01cef53bbd95b10ebbc9854429e99f0373fd93f280f7228a0f8d1c346f273b13d8040e2d3854c06515b666dee66e60eabf962ebf480d0fe08400ce421238d413f006adc150b2e819699258de71601747dfb63f0cb07c0fe1a1839b9e3b0576f368b1d104fda64739e630d1332c4021887069e6170af08ab24b363b833770b06da0b07f6939464eaeb869862a8cb3b4a8ab6fd9071bef5aec1b6ed8b9c892158ae1dc59665fa7ae0407cdceb8c50284bee197018d4e494a5b58c2892c1410dd698059f04068fc4924b1753b60459d9ed9076f4f4ae1bf7274b8ba55b873b008ebbb2652450a1778beed6690702ecec2c385e99d10fafe55040e269993513f75fa0793df496b9d089e81b483fd22473bcbf392f41d003956c18302ead0f6190830a01d5e0387f878d5b88f24198b5d24380c6ce5f03745311151831e23fa08439f3b2448d265bc496cfdbc19216145a51fef6e55e10652ffafdbb934e2c14c7de314f3cbf05597c2832fc69974cc9d453d5c902922eeeafb3df16421486710ca2ae29ef12823fc21480f0fe60b8441cd1b9e91e7012cc68478ced5e50e72936d7506a2d927792f2cf20bc639d423215ac2491b204abab8df2b7a4e7afc5bead7bb8d4f087bc6786b65a8cb0ffd6db3975cba02ef7ce0bff5d08e4641b1e353d9d4ee00caae4e551567040f8460f136232dca3c4fd6b25d5142a447974bda467cb6b3cc9dac38f59889eda30ab269bd7346242e46660fc97727644410f71e9557a7d08953e20bf2f20d57d911ee9bad9841b75dcd2962b82d53b5f5697f6c0c22a5cc3bdbd44b57c4f3296b49adfe85adb9b28a8003a6d99afa7b7a2b83fcf0bac6084aedca0980bdbf3be3fb409bac0244c9329ca61f507250feadb3d0749690dbd5f08bd2376ed83b1204223612f065b918bc24e5c0c408fbdc04d2c8ca957634fe32839d9b8195141c0378a84b13b1827bc790703961ed8abb1511f0d28ad4ac00beb84019c60e9988141e0698498d35bc1b88362514d3072021e0b7ba3af17d13b0a6b847499535445dbc14eb63e9f6c4ac919fa8e55d44ffe6e604a595411865e3f4bf7b2d1da4f40d965eb79b6adacade9b7e76d3050217b72c8c003ce921151f73b909a8d0dc8b6b8b6395199ae4e77d9d0a10dba6d41bda23c0bacb7ce12ad7acb21a71eb5feacafa333487d161f02f46b04085e8c173b463633b9d7362a1d2ea7e30cd415e6c0708a8b5f9fca52ffded388977929a863924069632c4c601da3505405d3010c29a0eba9c655b642dd7507c6297f35bf9dbf0c6f29dde21b65a369e48b908fffcd01f39af33d19d184436c6f42b62e02000280002f1d03184124c07552e02548b15152103f89a9a92cb3f81b2d665904937b2e5de724b29a54c329d03b803e80329ad9301f9a8b7807cd40fedee03efee9efb401136f71735ed472ddacae7092fc75187e034e887f17cd4e39c8f3ece477ff5cdafe5656bafe3c17ceda706b777bd4643e7e917f70dfd1879eecfc9e577548e0d0ad1ec8731bbfbf934747e7eded34ff53887d6fdd4e010fdb46ffdf6b5bee603eac0eef3af56cffa74743e6e9cbf347f3f1d9dcff9b8b1ab7bd777efd23a3abac6d066bd8e07394ff3394ff34110ff111223026c7edbb6cff9588ff3b1defbc0d46f7ff301d57cdc5b4b83dd6fac6fa55fdf05da9e464709cb1fb83d500af58143bbd335b4dff47d89aac1e110b8cf8763fcdc13c781c07d90ddd8694f3c9f9bbf3d8e354d39cea018d124300465fb1973fbc05be36aede7978a3cb5d688494d8dcbeb25a5fd39e7943a1ed4696b0c19e3e7c8d697538be7cde9d3274b8b7777963d51cea0399d3a123f10d1275ee44545db91763cd1a731331eb6a061e8d3ae4928983033c0719fbe0d4ac350a1485eb45db9fbe4735fa6dfc59fbfc5cf7df9bb4f3e563ddee8cfb963221961536e88dadf28cde4340ef575a31ad5a0dcdaab3428f7c7d168148ad6aa6dad95fe0e17521dc906f1dbfa8173fb0ea76ec48272a3def17bad1af4a2ad83e49e9a3e0ae3faef1fd85140b33adafbe36ab5177955bd0a65c3a23e65bd3ea62a0d3af5cf1285b2411f4845697d95ff0ed943c3f1fce2d6ecd6beb827adbb52147efbf7f1471fbfa71c65dda2f05b4dab5ef6d00afaf673630d4441af1207d64edf7afdfa15a55d246530686efc356e7920ac41df39baed76a3b115ed6baddd9aae23f8d09d798927bbdbf6674d1203a22755f613243e8c7992c3c6bb7bda58f58a32f247a418048ca703fa6003e4fcb6e7be8af3b7c1735f7dcf79fbc9f7c073e002bc370fe6b9c163dc699aa67d402adc75ae77ada3619c01a8a97a30485a0d7a6cdb1d6badb5382994ca7b90070c90070c94a7f2868446a060a8999b29e73b1db3c12009fad672683feddfdc8072df3c6d5924b683137d44a89ecd27abbe711e306ebe3e1824abbc79d0834498ce64de8c715214504d1d24b7f69ef7f5e592eb9f03ed4247dfe8392718a74fd5410ee8d3ae1ac8ffe655b6ba347893bb4f691d955ef297d355e7831c689cdfe0f35036e603a9528f9af6dac7da85b6fe2eada3733e9ce99f42d1a84936b6dbfbe2d6b67f757b8e7aa369180ae6c6ce804d1f5f9a3bf4bb076ff2eb86eca1791b373fcd07d2bfb9435aa25ef3e0b57930af1ef4aae601637f2d18eb579ecd17e74ecd17e7ced5f4d540f5bb9f2a077d6b019ff69da5281bf87dc43358feb6dd7be9b65f8c2f3516709c3e0ec662ec1c2afa9edbc8aa2283b1188c6eeb20b929a5f30136536bb1ed68085e1bc85f7ec94e64307763b2ac94c6492683d9f5d26af1c2b7878469e9eeee1e036bdf8c2db90705e34648a0372539207ba24aa56387847de03be5794bded204bd1d811bf766cfe334f81a16d3e46b23fb1265270eff39b48d6cf92d12f22a239141a0ee3f297d721fda2e358f33e549988ce16d54a8f79822685f0f19804374cfefdacacaa24790f4c93e3f970ff5248c9545067f69e98b10e1ae149c40f3e90c09c3a1f16853f6c428c3b7db28c35935c835c871dfafaf0ded181206a301f59bdf451921f8b6eff3b57b5fbb3efcccbe1ff793fb6dd33ec8ee0d04eefea65d1de30b4da36ecc70548d38bb8a8a91074c6d1a38228f7f2d4275bb8f51c686bbeef591c7bffb565864f07eb15a295f3f47536315e856dd8ddbba6ddbb6cdb5370d7e2e923256a974d0b4914a6917ea8b7745f7ad5125fda92ffd194ab9dc8225e67ad6abdcc92188edaa8162ce84e30a87f638f56defb22bd973bfecf93a1e6c3f3fffbd8f571f238f8dcd076ebf7dcd4c0821b320c8ecda5d140dfbdb87fa55f7f71d5cbdfca72b2d513952dd4af66cef36dcdb7c3af653dbd36c5ffe9a0fbc2f9fe6d3f1206b1dcb7deab9e7b697affa1912a803e2f46a36bd98a0f4f55a02db576ad6cf9fd2a89afa66cc54ea69de464a83f4037fab683ee5436877bb6391c9f761d487bd885518f7351f9530ee69be9584719fbf8f3cdcabba2f4a98a36860fdda9cb6efb97612a6f219858646a3d1344d7b1af037c7dd3ce86dceb5b9e756cf7d277b5acffd4af6b09e63e53c2b07070707c7fb26f0b5be286134cffae2d7021281cf28f5b1e9935f5ecf35f8f8a3066159a7749c588330cec90e6db352913598a9fc4dfee53c664f8a20dd9d08521d77ad091cd84014727fdbb1a328ca0b7b51bda2ae2cd93fc6e2160eec7015e6b742aa9316f9e0a587253e30f980c30e42481433bb3eb6dbdbcde79c5383ab2d7dd3a05b940d1a37a561e893eca1ef33eb2c61f145e4f9004bd60282796fce727ef1f865c7f4a172c72945929bce2452b874196db5d6dad76bc97bd5a5fa555f1ff1cc6b477de3cbefd29f2b3b584764ea5ed4641665cb2ce94aab840cc636c80306cb08fa74e914ec3f4b62b2779c252dd9b3a4300909aba6d34e5a30685ed9c30c4969c719141c7602769c4169b23df08159e735214f07b5a71a0ca21f4b894cbfb2cce4a5fdc1d6b1c319e0bb7e8d18283a6cfa4cb4e02e4e1fc97dc74a22730f763b870545aeef920f90f85a2dbe59ab1ca94d4dc699e828ca0ee4027056e5f8d1a65ef7a26044cfeb74e088338cf9ad2f393e09b67f57da4aa5e0c7a95b07b67cffb66abbbbfbc7170e3bceb208d930769c2d99d9aeb91c67e02dcf96b6ec20b97d683b8417b5d66a6fad313158cb4447b4bebe46746a9ba7ffdc7daf6b32baac597ba2a36a3f1b511fdb7ad27222c77d658f519df993c0357c4b1d2c5e769c6121b30db0e30c8b0e5bd33ebce5cfe8d2e87a8e73676ababb4d9fe8c8bb64d702c74c7424e7131dc58f1eae596a3511b23d0973773995e8a523b32527b32525aa038e7276858cd4a0d8940a2ac35c049722b61d028990138810f181c8d2921dbef4700585ec822828a410448726bea410050a96f040e6ca12214e9eae1cb952440529303232a22524058948418e8870b252450e428654a0e20a241a58d0822c44e80e449c59726465092b4fcc408315a52a499820483cc28a161968a8996d0a04120f89e7c56688c58ec462473cef484b3604152cc2225710e11445129622a0f0429b0c614436801d67559054814187580962310f06cf7be18517bc56d1bd9e176b1589c5e66c1191441708325482a0f2a46dfef1f3ffc03f8e74601d858e746c18cbc76fa375a43ef5dba3de0552b639cf1dede95f3d1fcbd6b35adfbdd0918e95163ad2a98053fafe365ac7cd4f2d34ff467fc07ad74231d6b7344b0bcdd09dd4423f77b45f69ed6fea519f0e9b17c27fdf46ebe03ea585bc68ee68cf612dd463ee682f7fdbb4d4424e822e72fd520b091de9d8deb59007e68ef6db0bc5b9135f15cb1f7fa213e824d47cfca101bda8e6133ad2819f460bf9cff763fbfbaaefc7918e4d7b921f71eea05c2075ce84c94cb2b5774125eb1f424716883f57ffa8affdf6c59f99d2988db3e36c4a914c19d5ff899f01ffa9ef4823e0960bb32f52c8b45a989969b1d072418a162954c820c5c9b63bcea430b93bcea428994951a229e028714d19fa3ee2fb50750d020e0e84f7e123542839e0100d9bbe376daa63e4e9244cb29a8450b2fd23ae2f68fcf97dcc513528a4339fce17a44b0f543bfe9c71be7c2b18e6b2746a73cea9afa55f5f2e09933f25a54175d29f9f0f0844979cd36335c1fcceefbddd66b76dd3ee5bed3e8fd7dd34f78844a9fb80c0e5b4ce3fb52516fdafa6c1a85423129773584f64302add983ef7e6ec79ff3047a2044f6089e9065306fda316ca1e2984b5458e7f63eec8bf3767cf53c22fd9b37df738a2ae576f01919e44f650cff8371eded65c6a2ee9437f9ce813ca2ba9d1fd81bfadad63224fc725c7e92a24146afb17b1d7f6b1a1376ab846d3b7924eb94998e69626cad875d32883daa7f4caed73752be9e3923b73257ba8f5325d8e32e2a6aef9ddb77d608fbdbdfc64b7a5c4f9f34d6337fc325d945250ed38eb528497152c97294ea856d0d805c890192f8d5d8874894148971a503843bd2e4a3698dfc88d53be0122df94203b8d29b2442bd4222d500df38a642e4e1ef6af9f3e994bd210e762c504cac4980d7e6c8301bba4f63241ed3873aac1dde5ac327342a294563b73f2e2b4c569ccf630118aa608c771182b49a2da9cf897b4bd4ea552a972762e4c9b72b1b25d4e724d4d6650700a32e44ccd8e33a7223844989c649982c342bd61dba4602a630412b5848d490c13194f8bebe5552c7bff2fd88b17ec8537251b793324b9a99263c0219261ff6a2ab2533bce9a806cf06341709460342f4c55664d4f664d3bdca61c6ec04d669c82449e18019c7201d2ac8b12f662a7e06205908e489718bad4b03d09eb82715c68e1a470633825c4621e0e10cf2bb3875a00059315c41c19a2c810743e4829a547728c31ba0381bf3eea515a887efd219d0c3ceae3cb25e3c3a28cc8e3a817eeded575afce5d9bc321c102e5ac4d2370dc1203b32386c42d738664f729fd0a30b158d7d1d76bb592d5cb82882c580869102e40860059c442e33298212c802c5ef122b21e52e03278096219317e44262a61c527732d914a102ec426187810124e7126344f21864538840c598c4200325f12cff89210b3307291451a70327a01912a9660fac18ad9b6c151809245266810ba64619a90b45032e64a788230ce2056d991f90e35b217841e939cc20e64b224a2941a8432071c091f304508011d594b2625f421ac41c8241e21b37e8277f0820c4c384105851e8a8c81c1b6c1cb132112e11818b2780503645dc258851fe1444c10a758610431c0a0491329560081859833db0628e2124ec22bcab813b14b13d65a6badb5f60403b8c9c28218064c48654dc22731083dc948a881080d4080c81445f8926d71257a64318b10452e4b228c2d081b20332274334bd14a0264918acd051230518209204cb0a045125594d9363c116e11ba181c52b1881c421732291c895218b77c09152023137a9248048d519ee0818725539a68a28a28a8b861a30008590d2107b21832d953e841dc2217c06189322d88c13245c993916d833751c4160738139dc8223421a461caa2844c71ca0a210064418c4a08a18456543257410727a7229b2de12a885a90e02d6809e397880515a18d4ca9ca10a1c3204716bd5ca4505321072294a0086285252d5c41a73042857d03f6644f6e8513f9c864104624624021e491d97083bf204504f34338247cc1ca58c200c8aaccab885074d10c10bb82d00555d3c23025d182a65129b6366352d23f85d8645cc21978673c2d6039d20154cf1340263af26407f3c18e7e2d2ad9a3c4d833de78e39d714a9e4634009906b886ef578e1aaee11b0079ea8f027e46ef38cb62b4e30638c678696e346146c2629624dbf70232f81dfd92257439c3324605e659b747eabbee219528ca0ee69ff0b4d65af56d7db1d3f2e8b6fc27cfc10632c618eb7f6037efcd59bbc8f2e3dcd1b1bac525cb29b02b478a75a2ec994652ea9c2c03e3e448adad55f3729de126cf2b73523ae79c734efa7346542bff155c238fdba804cd17663909d51004001000331500002010080744228138281a2413a33e14800a7f7a406e502210860281308862200661188061100640180000100061280aa220a6f9011607ee0f0bf4c67f2315e78444514906318cb50adcc3364063faed2fbba460c9b804e978368ed28a453076f340574da5c67ae2cba0a418424e38fa36e29083b19cd98cbfcad693858972c0c2319ccf3d9eed21a52b2b936013c12854ce71a502a179ccbdfc41750c8df2a81ff1f2c53479f070884261b2a19b502bd1060850cc0f1a6f6f1ad93b4c83c2032d05d41cc0489063545e7aa81fc0225aab8ce3ea967e6db06acfe1f9b728f11355c8d87bc49e470571e1ce1597c54d940318efb0302fcc7882b65b760e6b0bd9c2d71d1a76dbf44c43f5e4af71fb6f61e8ddce314300944c6ab3f56ccff6ca0fe10c4c599ea59a87a5a2013ed91c0ddb3b897ce00f347a80c78a06283b90c41fa66d2570a4920c2e836e20c5dac9233e60d1d97f6f14bfaf9c6b60ae8da342ab54315ef021a7e528e5ee00062050c0cbc46f4a26d16f729cc65408918f44f1274a9c381bbc6f282dc4c1a0fafe228f768dc272b80bca16d678686dc896f8057bd724daa8f5d374df807d448cad1bf617c4b3ec21e26266b9e22945a991b0c9f2c340319303593450b1d79c39e49bf51804950314a631127a1a3470bbeecb094dea6261da46de7ccb27c179a843a66602cf93dd182bb27e55c5e5878d7ff24ddb815495b6be05acf0bef368f41c697012efc0dc8a5545e3180cf6a5e4894994aafcdda9aaabbef0a0b54695d2f76be5dfca2c61aba1d18033e92928623f609c6044a9c8a4bea39d7c5581028ae058d709368410d3290e715e9bc35ec862d16217488d8986608af6ff9e453a5bba3ac4107004e2dfcc14f44bb8355218e78ec12a1df153df5e847ec31457b4c622cd2c968ba2470908f877107444b8485dcd09c3a91edf7914ac974b694eea68045505151a9928b8bf424c5a93860aceae03cff159c1cd3a55395a91ddeb231b3a180db5b8f099bb89873b5e7087869e4480017c09b3ea73f62b9fd4e973a2ce46bc20ae4ad87467e70229421877748fb53eb01395fccc8fc23277c752c1397c4e294f0b35e9ecc2fe4ce06c9dc00c3cef6a4b70599d80838feba7f6f5f24e9d4afc30b514e073c7959ab31ee70a253ddd1dbaf8358bca818d67924e083cb77fc94356e18f49b0a15836d8d9186ce2ed72cfc9f43f816fe2c9f8a596e26d0fbe7897fdce20e2cf6f4023991f774b8c83be96662908f56ff7dd184b62e4a3d73d2c14e9f9579fe30239bb39dd924dc9119943ab3bdb0759c9ba43b8e3df1643fea2f6265627989a78138ec7379380173c675e8ba13719f2ad7c4e1449869b885f6b9497b65ca28a31f14fc1402898c35d94966a3b62d24a5abda138a1407db5ce7e543796e46896234e353968ea9911403ca40fc3de942308150a6d900cd64bc283d957bd88ab225fadb1e86d14b04bc4f0a644a384a59f5e50acad954b8ce1cd80ed42abcad6afb1e4c69e93a4823a218bcdb5e8d82605e304e325f9b471282469a20d3687d4d5b654a054117a0ba86ed27c5a1aa248e59b2b2b865d62cf5977296b7d24a943b0b05d854fc5da2be02c5a56885a544b6d6aef16e6ad804a27addf4caef05a1cb1305151dbc2b7b03a8b1bf0a469b7b402a8c2c20acb8a71580c76441abbada8b0914bcaa501ab420d4a92fbad8d8a6f15ea169167d1a14d6adef22aac908fce531ba71dd426ddb72dac80aa21ddab496761b08424a1378e27d2aab35bcc5a445becb4702ca268d13187e429a70625127bdb2f4ddaaa50618326e9de56fc8ac10824afbb0e2724aba6af62e7166944277da6d5c024418d3ee6e432b37b12605746052f593c592fa148ee3dc1dc1ee1cfa46b2d370b1b67a49216170b34b4939a66f92a38ae243936a86e48bd731d7ba400ba4ee5498eae379834503412c77685534aa7dae60489eb86a46fb8552856e0fa7094eb571a80112307768b8e1f52c0dd60f22447d77615363c52580d672a08bb24f59abba191bed2c055c8a3626301bd222a2d26bfbd7482030a8f533f6df2ed08aab0ad45543ed2989bb5a0a8c2a5c28a94bc317653d9f004ea4488d5a41fc2c049caa84805bf2251acd9696425e3f66ec16351b7c2f12d08d3264ddb38f490262eb185d6c27a2c3aea24f59b9c5a70fa907a358c5a3c9d4acab4c812b7695d31141650ef49a76e1c77a4971352aadfea5c61838bf4538bb480b6e0b2c2ba161d45929a26a70ba86f527f1b87289292e30bc4a7f807b965b740bd02f415a8ba493eb79015e9c925f4cc82a81fe7b065137cbb8e05a4403835f0497a5a368b6a855d15f1b0803a22f548e35025c972c82af6b5e8504452ab995aec5b4d702bcdd684a912446d0e77a4d9bb8e3d49006d5605a50a39539360b11acd4a4532c43734b2499487dc3da89d1b3751ce87b9705dca946cf4e876c9db4e623d27189e24008de38c1486ed54d908009f5d7deaaccdca9128d0716396f470b3aff083069348acf48a2965a53029bedd5af82cd055e02d34ab88a885a71552da38a86f247aeef80a1b84a4a9b9a8cea41577ab82e52dd480220966e39820f54e9b45542c3aec904eeda0ea48df4ec21536f24851b64a8b90858b2a62519246540e6ed13724b713b2805b054b85288bea1555dfa2e325f9aa41acb0b4851ab849d5350e6ca4422768e10a8b8e2fc9c7ada01569a091646e112ac2b5d80691a4742dc83324178a6820725c4d56a1575611a45dd60a8e2ac9cdd996ec6f3b5418b1022a0e6952aee392a461eb5bc095851a16a4596d1c36d2db05b3c059a169315285515b74dc9142edd0d090bc5af052ad3955c4dbe2e988d4e38d4385a4196db009527fdbd65287a14d07a5181fb4be9524a257d35920aae0fc947f65b918b92401d7f2527fe3d6264eff87aeef1cd582ae32f76f9e342ede2e9ba1e8e0049f99986dde1d35f5505b42164d8edf76602e7230c345d553370f3a1a76f53b9931d88587fdb6256a1c21925a27274287757c7217053ad052b9aad4389e8bfc972cfd2c99d8bc27697e48e670dd95d51307fff994b197a4b30952dd86b95e0a2636c05f4048440b34bbb4c339fa4f81c5b234398a7f5cd1676fb9dbcc629e13380f1c7cc28f67d88c46a71811f579d92890ca0121d36aa627b42a5223c42c0cbc485943abe79cb35d9bffac1b3167d20a4b8c8cbcaedfd099bbd4888c5bdcd5d587b2bb115c19c712eddf7e8288f2561651212cf8773501a11664253af358babb3315a57c1cf0204c1281de037316d967c9d6c58c6a85de51a1d0bae1e6f78ae34b811ca67757b163bdf1054e48161eb53fc58e3319d013323068c3d6b780d017611d1e63802d3b4b234efc67d74e5b76b9f3f7f1774dab6649738a29e050a559368dc062bc0b81cb2899edfb61d26c20af26389796f47ecaac2f2f59cf05753f50c29e8178b992e8d82c79480441022d58847d521f3f4352935ab08b041a431122b6ea527852bd30a9d34487c0723defebf08a91e04cfd7dce3c91e78e6298540bd6a8ac879008cca958a7a58816236a4255b5582f4fb223533826dbbb555a90446f8eaba1cbe826595eea5489520cfd6300b56bde7200056c043a3f6845c116c9f188e6dfbfc3fd49ef3801415f8c415e5eba3bc8afd8e899a5344e58f8300ffbc89a34ad45462005ca562c449f6cb4311aa137df2bb35d54fbca9ad0e1b699c82d26816c7bb5b769b639ac71a12d170b6e20e7666c3588fbfb14f7f76012039be00e0ea14fa1c753a46dccfceac3f01c36274abc2851ad91348bff16c4a54a2e23d2567e017ab06e694306956854661c730c2f4951cd180963c10a42f240d0aed2c55c2f620c6f1b9e47630dc83401ba1f2b07934e535b711ecc373c1db6f4eedd4368d74dbafe5e9fb6f9e22820d0fef412ed73b22a8de1ec9b5ba70eb6887a2c327a027731e82f53f0243275ecbb633136bf27f5c02b791a61264f14ea7840aff25f3c4db138f7cbfbf328ee8ff513dc60bf0d84a273886cf0710189d0c1226e9af022f014620fc02a68fdc6406ab81ff9035e665bbe0899e06b4edec6332391099de2a97f85731a08ab8f0100adab0ab3b523755a46628e001281ced4f938a124f5a6d10fed6004b9cf1eece8b0a41f6576dc7aceb442e16066952de9f785a82644a943dee653d77ec09477a66664f7b1f1f71cd48548c043f462c74e1c46a654caf5190ccdbc65f6f1d734eec2b2e4d081728a0cee45800c3c1e9147007efe04f1ba30eefbf0565e4246a96c232e3d86167d38a174c3f5a0848599d22248c05e972763f6ecc35beb177645b70b0a9c5776ebc80dfcd1839ad3968c1333fa0f0cddb615973db68523126d63faf5ae24541d30b1dd72d9263ec223adf8b47e3e46e8db644ecd759488d36d8393145cfc5d8b8248b37511458fb7f146cdb6c4b989e53b1aa6c9b9e1f53ab642f81216a4401dfeb81dfc7f7d799270d80eeb636a97047729523cf54cd3d25eda3ecde0c6f4d6fd1e0e31b05979cbc83666d09dddff0bb3ea1ef0c40b1e629adcfb24804867b1fafd3aa183baaaf81ef3b5b5b9fb5f1e14e76c23c0dacae59c908c3617217a3b1cb84712aed438988524b01378d9720621913b671d58cd09c5695911e7afe2fec08116d4e7e278ed842ddf55d1c4f8d126f5418d5e76278ae6714473939da9222e73b076e2813fc9c94a03696a0048d1f2b0cc21655b7bfc13803e5767250c20df280e4a0b9f253510542dfd87650b250aa2cad2e3b3c926a83d9cc5505ab2399b48a2e86c9fd595748de1ed3bd3831770a11f9098a0ce6639b05b204e1abfbe5d0df348cc541d4a41f6eb1cd13587ca035d19a235a0d2a4e79215f0dfb85e765c0700e8095a0264098d0f35a68113287ab0622496b23198891aff3372bbb5840302e6a1c1c25689056a5c2f89910625279ad2d3839aef7929d641f9dba4b539085b7b9e7caf971b9168523976f148d09c6a1541425f117c1081d608ebd36ce662291d339504a2056d1ac0c93b72cb89ee9ab08d2c076841a48b617afb26611644330f771c39ee3b32d1586915d7ec555ed300bbac9646277b43e0ef99e3fe3b2457e3d8b5284af34e77c484ea0d5df2ea7cd7e1beb8709c956039dde51dd9ea8d96ce054d46af4651f3294d793f3f8426dd5b117b5534a157067ba606e8a84f0a5308a598c06cfec831222a8ea83b5f822a0d5783dda98db834ec3648aa2d0dd39ff4575e93dabe8dad3e9a48d1888d5429c471e5b53507cc49df121eaa8aaad1dcb0c6b92ef0d86b888b57989e5b9ec0115b621a36425cdb0057587a6e3b7202c77d24b478e8f85c524421aba5c97ebabb58c14f2b5106d483d044c35dd81574f297fa92ba591143247a5773794ff1961d607a4f04dc894c7a122264a89176cad3430fe563cb49d79a524ce0f0b3ad1019dd7d13b267e940372dbc46066139874e784768d5b22e0fe0fc218666726465f472fe670bf176f7b7407def955e37fc54c79de99d31d7acb38800e39449f8d6078c4b7e6a1a805d24acb22713899d71091556cf1d74f527eebe43bcd33a65c3f80c0cec7d47b366dfb3a238f22ce281147f48c4fa0d3f56216cf7c2458c1ab696fef05ffbc2707717711903ea57a03cc4ed5ac10c0631c2cad5c9b82ebca5a3b28906ddde21f9d20d36a9cdf71d99747a27fb650b0cda2516cbbf460e8117648cd239d3aa903398cdd445e4c9f7276e739bda9647fca4e0761bdb2543237233a4fc59f8baad21a44f75aa98c02e0162494eacefa8c18de01d0e07971fcaf8f53016c6285a0cf37d56971e1d39c549729152960d3692d5bf1a5dae5b825b23764bfbeee13f64feae252384bc5cfbd4d9713cf5f4b7ccc83c4d78e0aa1f30a0d89d804bdbbd1159594396e11fac106e8e5a82c86fb7e07635ce20f99c1d5b73b465ecebf1b227be2561cf48b13170bc1e541a8d6cd057c8eb328f978ef5827d69c6affe2500dbc757b6ef4401d2bd3fd077547e07b362461fd3d72ee57c1a6dabc1a34d724313ca53d10643bef6a42745b1299a52079bf05e4760bee80afa0a04591372b2572eba500075e64e895d6e4f1108a2152cafb0bf918dfff164617ffdf822d3c6f828eca5bd8592f5265df93fea58eee174845b8af059c25a7127efe0c47b56630b3a998dd625ea33571c437c8547e03b8c00740728e37560f09a0ffded01cdada6f0a2a72355356b329a15ab4f4e428c82785095481edf0b70885653c86114ced8f3bb3ea8473824221d56f4ac5102af7267eb616cd7867d7a4cd807c9b6b3694233aa582032d324ae6a68811a242182e3c0f4ad13abc76e679af367e97303ffdd6e80eb4b2abb26ac117d619e1ae0248e7ee020e19352f48b150666515035ca2fc4f8930a808226535ddeff65a2e0bdc885df5718f03345830729b2cc4eb59ecc2fb70703630ff77d1287cd800d5899a03120a90dd57d1316d5c7457c03d727b31cb422a2c1bd5f18393a7d0a3769acfc628e91c1e417bda796acd6593b635d386e9c62c00012329adfa91e5400e00290f7ad6156b878860aa87cd2ab6bc23eae86e98396831d9a51166cfdbda92c887136543232dbb730116161e39625964d7b38969003aa657730509722c02c614950daa2cbbde50542538af37dae8c6cb413d6593b32289d788fef416bd37329bb3f81b548438920b4f5e2a6c484c4bbbf7c05685179642cd5e43d307bd51582a1c95c668618f32b13f34b55f67e81b973447896f6f73591c0c2b9a0f0f9c0b828192ffd0530eab82a66150accb3c697198038012eb2d9f68daeeb25882d88d995befba09f776968b839b6a4205b383baa493939934f401c4808189e85f952c0ddeb47840c31baa74a8e1a7a825ad927916a52ad121d3e865c0c4b14f1505439a042fdf165c986706b881f1dab84fc7875fa9380fe1c125506be1fd02797349835e8be37f11b8c101ef43646144059f9d02f4fbfa716a5b13793a792c0852975e5005f66f4fa8aa6ebbd2a884415f0e21b3b746c882e68a42fa8febb0c5421a7a99bcda639c12a086698e8fc840b6c58ea9027433092755df7a50e1b96a0911ed05f448153b63216946d0adc0139980e3fc54fe9640963b432d704086a4ecd3ff624f7bda8a3f1e4bbafad75baae813f2509a3cbf1021b753a7881702811dc56c088d4f632bd723dd1233f84c774444cbe3d1125e89b027d26d9ba86d0bd2516a8b08a46497de46d0851472ffb885f160c81e43ebe7569fea8aaf214190e353c23cc15b5a215906a15a9acb2a55930969a2e2920d4701b6ff706c11597c439742e680eedde9ec61accae2c493326ec22ad8951541ce6744172963d1a9693469feae07b3e14c7900ced3734e68f9b5fdae9dc37bb2a1e1ded445d3ee617f44d4a43438205d185fe2955a2563a20a51fc80be2c661aa4994152c6b7b04be9de5189e221d1f1ab71ddb5d36bb3ad888246656b8fe098b98f4e906a76e2ba603875d8ea3dbc282a4fc9745d97dcc262ae7a9e305b81193217b1cc9461bc2fc683c3ec727429fdad80c74b02a9f14d6d3bbde3794d2716e7276213fc8722300ee382d511bf392f4d5d92f4ce530684dfe5015fc11f7ed1a6e39ec6b803924f94d957f1c6ea348a8f1f82336ad5437f27739fbf5456a2e51f50708faa63611ab800589a60c7a818d688f8c9851d4daa7955e45a0b3f367bc2aa8b08e080cebf21124bf4a4ee893bdbaa0edefd99fda64c8ed279582026324f46b7ff3855320a1a8e732d36d26311e2276c2b7fa4d6ddd5b43bdf53972b93a7c8ed5a3a6a1d61854f886cd730ff3e23d64ab5cf1ffce3c233c573686aaa2a991dab28a0657f21ec3c41b393ff7447c22166be6405c0043f1729528118ff79750b09f3b90ad2c76ba6cf55a79b5b6365ef3e5eba2290bf5cc1427a7ba94e57c944191df85bc2cbe09af05ffc6d1c235c9d2ca08569064603e505dfe3372262640e10198fb336078a66a6cabdb7d4a0308bb9bf73045c875db8f620321ea61730e971f15106c48b20ac82a2b5d0504c7526e933f5867dca538bf0b9d42f3179afec51d3c8a443b08bdf18fc52a5f7af95a4ac06f39a5e65b1c7b6c2aa330405d19a86c53f3e45639f12f48ffcbab0a38e1fc2e7cb1fe34db693e9eccba2e85b7e705d50303e20cdd64a0f197e2a4198219d82cd044152d6ea642d9454b2d93b04dc03a0c414499bcd5a03553b94523d243d1cb201591c92d620eb98b2833950c2bb2e33f517af84869647c8f55796414a642d8cc19e2ad65ea6148a96b57fc78090adc73e349b09f3ccdfa4077c4226e9abf853520211d80cf8805031d3f673f7141f4ded28829bcdc3b524092ad93fb8ec9ed64f04e6880c6d6695e4cc55938323a3e326b5d2fb5203e34a5e3937b2a5ad415cbb32cd7e3bf1658a1ff5f5b27d8055cff6de8d08022c3d0cd806b0ab7471b68ec9c5b51240bffbfebf805b2f76005c559305a05d2e5d748b12da7591f26f131e40fe5a20b7482e394806450ebec0a41f4ae42590017f7159149d4b26e426303c50c725b7b08b115baca65c673a2c500b1cbcb12c21b86998e4d5aa2c77cc91168dcb010fbb9fc3b2770bf019ba676d53f392c255c2d8d0eb16609f07afb3d80b081f86880c8e5b7c2a697b64de2c17b6a9596d6f59ee14cb55ccb03d0ea453bbabf824bf337df0274eb271b659f1303ef5b6fd74b8fc9a972fafbc05d135512eba050fbf975ddbcc77aa32cabaddf87b02e3797f99913d60501a4ab817e60380aff2b9287f953cca3fea99adb41dfe6063ca0f3c3617dad84f559ec35ae99efe31f300f8f0f7c02e39e8fbb8db945d061e57d32bbe5d7c01f8701cc82467afaac7e4fb3eedc205b0643f2572046a5a2af46ff2a9d08f23462557d752cae02cf5c1c45e84c66e179f0171e28a81da12caf929537f6e3d2f9b30d0633c15f9a3eeb59cc639ea86a7436f262ff30f641d2c2f8a10c60d156a37e061064060075922d8480fbf8df6bcdfea3e73a5d47ec356a6c224252638c21a6215f366a7387bdc274733620c437adba69435ae450fbdd7a8f6a8df51b32014e3d2abd87c13a8e2923c9c17bd0523d7d3cd7bae96731166e65103b55ceae3b8d2fe3ca2411389a139614b8621189b30dfdf1e2f76d558ff89430391ac99ffa5087a703b52ba24b8b2e3d1fdc42687016aac1b69d29fb5ab7a2a496780cff2e91125fd268f0829dd67f17dc9815c6d4326236aee578e7440481467c193b3bd71e4e97b76fddd5d16c030a521fad4b427d49ad34d6d7d38ac961edfdd95c1c5b5e807f46cf8380e6c3ee02e1d9fac28a2cd3fbc8775003d4fc1d43d25b659366bb1634d59ed9f0e39fd39ec281da87e23a635f7ae88921462db4a2f98ac6a82b295f2307ab3e21b38d7bb8cdf7ff96fb7c5cdbe9f61c6db974e142a8a374b6537fef222b184cd34aed45c5ce2dbbd6ac06c1dd6632b837ee2cd74eea2d5ecf17bc71486964e5e0481eedf2c71dc93012f071805940082ec76f3360600a03ed8b7d92f13c339dcf2985f28a03e02b0c82fd5e9e87d93910aaec2984ce75ae6e9b25d8a7189e6bf17ffd0cadbc1af9177c151b364a25b38e5892c05add57165863fc146b887067839888ee5849a3ab190c0e4479e46f07264fc74bb9a0516781f708ca4156e2c2f41ce9dbbb3f6173be6772fbc972f3f4c59ad5137b80731e10767f2c15cf1bf50f324f356b81b83458bcb2c3ec1bec97396414252948342d31748c3416381bac2524a9be61d2566f1c85fe634299232a8c129ab197f807461544693213857b9653aeb92ad60c4c542d45376016c73e9465846310139c81d7faf0f150963d48b62c6712cbcd6a4f4bf3e3cb60d9de58eb8c561a874d3f4b4cde5151445c434e4f301f8985e5ccdab8e47c62c20c4f3359f581e4a9973e7095ad29637403c460632035277e697e93f56bc984f17333ce962c85a0c9c40326af586db2ad25438ff59330bec60e3f548f841f6c1753bec0190d909a655871f4bcaf614e413429f9c5c3b15eb1899cd889c4b198fc585ecc877876ef597a8a35e34a24e848f1b74930d54c681a5af0dd4a8f3fce0490ed0a618b0039b87668ad571f460b16576dc93227375b15d48e3333e28e9a94cf98c0daafa57eea3856f551a0cc40dab6ac747a16c6f5f0d3044c4f30c97629b02135849bf78a0e34084c01ce0fcc833f7b27b3a544cf94bdd2922eaa5673c3f710b9da89ed4d8256e0f11d9bf0a39d175a2e32a26e5c1d6644fdf9f8df065d6edb2d5e078c37bb64071a5c4d7499a1687231cffa3644a231e07166ce1f820a3f21cdeaa616af88b845448666a1db14fd218869278d4ba0e99f6ff50dc3926146d2709c9a29f555bb6b8ab9adbaf1adac4bb9e54a31e8f33889dcf746efdffae141a1ad35053422d7495c340a697d48be17a140dca5e183041c8d3f9302ac9326e4371f55d056568403fd969ef9ac90420c3302dca54cf871975adcca5a7a1681214be541fab399e0b2cc06c3cb398ab914cae5c781ef70126d8c6e3bfed86851292a458b09f4f5cceb9ba2e88b71237d731e09675a9842699243165fdeba5fd5c6c14f3fea9360d8ed147f84d34e5189748df08fa137d05a511f925294b4a27a8f4816879d2de146baad39d01d125ad4980b1ebd221db04e99223e92111f6efdadd20c152107fec5b3607bab906888fcea7faebdd8a65e9a8c110de9d9b15a8f2bbda832a4a9ad9dfab812e3f1fb00e5be771e87b425aa4c90c285bafafb06221ab762ea2aeb7cc76c1b18b0cc3d4423229a5c3a8f7eeabe4e9dc2dfe9ba67b23b9a3abda3c1131ead88426611117d0f508a803b4ed1e77c6bea5e04981f1e93cf0a9d3df29d0d3b04d9816cbe3a01968d64b593062755430cfbabb26ba0cffcbf6f66bf8e22ee00cc015e7e12c7f378f52ebf8a280f90e1992c696d768dbcbacb7ec28e9b3ee24f5397b52c6ae59009a447518a59f0f3290b8cb8235c93681faebe5f1572ef19d1f14aeae5728abb685c35edb8ee4f27bfebfc1515194e45ec12ccffada7a2e803162a9edce5ee18eabd63e0ab43984dfb6de6c4513ef421c90d406e82a4c5a9283ff17e080727173c4a0249ebb1db9124684f25e407411a91df11fdeae61184bd47988d46c751a0658176974c6c4ba9bb0f8386452faafa34137a80985adbba0a6eb758b65491ba87d107d288bbea99df410006e58c0329b4782e747fb038cc6e9e9086c34be5466d2bb9c5e8c5303328990d8f48fa86cfcada64e80e955dc140c110b4e6ad294d80b47c4093da3dc64ff1cb64cd58092f4dabf7f9b7e00169d93afd5f57c46208d2e02b512487db21ec8eb872e281eb8beee662dc14fc740d013ee09c2ea47ccbf01834a6f19dcf4785bb2a5452d422d1aa4677a94d839f73b064a98cef173a2d89d26c4e8f9371a6a9e6a9ec2b7f94764e5520953bc9310e80293becb4928a73d2d602a0a0edd4f204361838698f58a506999846df033ccdbf4ad3e05b19ebb87adcceff10e2e5e4bdbc8ab3b4bc692c2620a62b230e05588f48e9f4fd5676988b7a93fb2404ea066f4c66a45f9e8cd55486aa003fbca7aa9640d66535b6dd99b28ffc89ac8b32b3613884539e47a9190f2a2f38e75e45685fcb12d59412f36b3d819a1c199c52179fa93d5e0d0fb3a058e011fb2d841e9700359c12ac1d9721e78ae84413cb1980da2fa133ea3f38487a8aa9b8fa3008d6cda7cd6daa28d106ca8904d431485e8709d9093c668720f558674b908f746ebcd46735a6aefa58d7051495b099868a6138d0dc97e404fa74726a879bfc59926bed03fdf1d575adbe2fe8337f8086a0bde7e9b49fb88ff96a4316fd584f40225ce0b6fc5c5903838b4c49a9d0c5ae1a1a8a5a287d09607f1891e2cc4e15b75473ca4c511ba6e2812849fc991b009c32c9fd89c6d2bf1d8daa8d8ad0a3fed423c54db8125f09203fd411c5194acb05f5f71534f262e5556fb6d862384bf52be057a622f40dec04e86244384b24c34c2a5fe6d23d3b268055b376a46729c5e96665aa1021d5698a52a0571b31396b4a08610513b3ee877f72bbcb18ff08f53b0adf7c255dc38ac84e663c5b994f5e23908bc3852488a992be826f9d6e67e576a0a486b9688a75a3cd97a415101e88b23d61b4d327f191c885cd6b6d90fa17bd80a65bd4b25b0f109f321ede063367b1d3c320040d8f1fcdd43e9ba78a5ac7412b47052620a4d7c08dd632195726c23f4bac8ac50e094035c7ab8e058897b48db6dfe321dfbd1a09d5c6febac2d83d120873ef539d77c9b525d77e73610c9697c0d78e92f5ce084e32d8a3aa1c1ec64a06de933c60a065f6a39fb83eeeb3c8bdbaa2d9e964924e34cdcb8c109ffb0be39a9e60ed1437e93b49748131c0fe9c8db74aa278ef9d9ad33da0e915d10e71b703e7ec138a31d91d8aa1e31b3e05bf72ff50caeb6800cd36df3a32d284dc3fea98fb27724be4fec9c1e3fee1629b319e176e305ca74fe05736966f3c8b319a488efead1cc9456dc54b98d6109b247ac355091f830faadfd7ce226e0e24bd4a09e726fcad157233638ede23f1362724c6ce1d8ed5b4813af9b44f13e9942732b8e83d32c16922392d60ea4010509e26126da88fb25f89ce95fdb9ca380e3562bfaefa0fcd3c2f1795ee2a7e5996b38954e4f9b7bfa11200d430df784688e257f9a034c39a6e0947b6c3883064c7214ae9fdc7c310646bc6f7bf40df009db6ca5d18a1619d233150442c271ee3c77fc33acf9e443e14db35f982906cf181960f00c7633236505b6917c9eadbc55c05d40f3998496c88131d86694fa2c9d9643be755fd3915f01c811e7641b7c4f604c484044494ef6731bd31e8e6f91a7fa93833c7e76b816f5166232630e9cc4d01ac8629edebba8a2229c3101b36b3f0b5f9bb06062d0e5608d21b78baf833236bb471c56ad0f68e9d81d49203348ab39f5743f60c515a9115a90db94642fd88c71cc7e0f78502ee9abf0bedb5c43687289c0c3e14118ffcdd033e0e55e247f8065e7f93699e1d4ba06713f45438098960d841ab6fc1e0c0403e5483f546f2736b3f5fd47099ed8e82b5c8496217c06eafde94afa5f6b90cbcb22eac9d932414b4b8122607d74789a5db821c11f585dee80a3a8cce595ede395d62aad87a16f0a5b94d1abec96b9cbb824286985dc73fa723991dada16cb4ceae632bfbd158fafb9289b26f489c845b16853ee2a34413f2022619ab96eede43c946eb3202098ad9c0ac50279784a17af0ccaa07761f1711a19bb60d9a7ccac1604724db07c8485d0f246346431c0c84b6f720c1ecf08c94444f9cef2b4f47b8089ce5cc25ee251452efe913e0cbe66b505ba2c323531c9498524114352fe08750757824ccd9e885b4b596136a62b5b414108fa831f9a93465eeb6facf5fd395c823eda102b497a3d9eca9f807236c91f77f77c681d7709e6437129d16ff2c361bc87775fa573ce99eade9850d2e10bc45fb9e1624ef88c283a75a72a21b3a01d3f662cd0164beb0921b6ec92464781957caf77b744282b20f6b7f78660cbcbd84a77f0ec77dfc8b807c10d382ae5462b9d9f2ae6d4009f7c56bac83be9bcac016f0e03739d13bfff105ef1f298d26d038a3407c02d88b6e4138c98972527c422736220d04da5cde24ad9e4d72226730193365786c5adcb2e27b75297e65286c3f39cd37434d9eb52843c3761f913b2b712b800877757671cf5135ebf54f945a839128326b226b57402c343f85e2b391028b7e62b293a1c4fde2ffe0bf9a285867514a6d192b90903cbd9a08d05d4328fe1f183152e18eaf9460e88d2a870ca55aa6ef02744204520b98a8825e25021e7cfa85ece7ae21f280150d8008577c51ac9e58355f254d82d80891ef9696d6b32d6af26baedddb586bcf698415b2e45f2d3f9300e6e8bb6b26e622cbd9bc4c3c79bf386da72ac890789e730ce8542b137243084d13abf9a30d128fd346bcb69a7b77c59037367ae2b34e2fb00586218a9e5eac7308ec0d22f5f74e0a6919717cbd18e8eaf9ec1068e3572248b861cbe7bf93c0be25a106a18c047e884a09cc40b97da35d2a77d339c2fc0c8468a655e49c99b409c21aa60055a7cab72533ed346bf7483789361fdd0eb3247ffb068ccbb98010c10e0e4976a6cf1f00f70e6339438a8e405ca80c7195f457277912854f092a73b2a42916d879ef180f4a83989887de12ad38e2b7f4697c083a59b3106e4c4d093a4774133788dd126a7f39f52f5bdc34c166f82f0e778fb741ffbe37ba08d280a519b395c5c30039e2fff82c19429d6e972ed2e8ab4ebb1164f5fbb2e3373e9225e1fb087fe20cbc5b967b93333c72264d812c8ac22c4d030e05272021bf5c9e94da917cd790079421b59ddc8660186a1d37e6dc5ef3c93e9188da6d3c11752211cf38d8214a64a545438fb2cd34322a8a42dcdeba2d9eb17c5f68bc31e02ad86292351f43cfc2399105e55bcd99f7f187379b57ab7a96b84c14105e35244291095cc7db2c141635a483ae40ac7629349f153c0fe515c66dded952f76aa8a0f7d0f0865ee1d32dc32d37fea3846a02f48e0355a5ce2d6248fec3d0cd981dfcf836498dfb403c371e31408389c6b36a553aca1a39c70c127f10fcbca1792af543062f768abd08448484fc6e87b05e25448adbd2c30d51723588003508546d038a509e765d40903a4a070a1fb5005e206da0b9b79883e31c99c0254f9213c2ff4300fa6a98086be05ec62a7f76ecab54676c6370c7da047a0eda5ca16738e82f48691594e15052d385622fde0896cbd58e8d1031594b882464cbbdb7dc5b4a99920cf10711071a074760af713e99cdde666f39fb5cf696fbb82339db47eeb38cfbdaf847ccf61b41cec97e7bc899b03df7376eeb03a9d87b32fe9a44aa258eab5cc9fe2723735f7a5a7a127699da6149f187a51062712cae873bc2f57046ee15f21e7aaa5cad95fb5a72773f9d4e7ebace55cee7dac8c94c89305861e8806104462b23204328601889b127c6cfd2f87d45587b28a4bf4908fb61dde98739f3616e87b0cafe2aeb47cc0d1f5effd52ccb68f699aa9ade3ece7cadfac771b5f41817c3913ea63be1cf846d89c4d50d03c1b28633bf968bb48b10c7e27a3816c7122209fd58fbd84926e6b30c7f3239fbb19179fa1e74d0676432ddbdd96619febc8774aff7dccbf9703e9c0fe723641d43028c2160ac80919207902114304ac018c909c810ca97a30c9431d95f63ebb9528aeb4e8f40737e8420d3873966da93bfc6403cd74a55a5d728c51ff719ab02b9ce0ee9b1d36314d3b7d6f4b5ab7feaa0cf30e14f664b226119db3e38c272786b0ee70b225ffb4fab9f8f1abff2f40814e7f4637fbd5f5b9e11c8fad5e5e44ea439ebc8bbbabb7330a8f5e598a9b576569e52c3393dfcb1d6f027b3a5f437faf054df35cdb54f047e245768d23459dfab1bd14c38a73e26f3fe37fe97c9ab7b20e301fe3c9eb0561f93fff9b8def1d7f2c233da8e2de321df7b7a04f9176e778ec339bdc4f5d432f8b331f2278e7fce85bfd638136af6dfe1eed3dd4e94b7dac1ac691dccd5bdfa4befecde794fd7f4d3bf89ee3e9eb4f75e4dfbd2df6863f167a59439f2b5c7ee73ada2cd8e96f69f8ffbc9ac7d4ebd3ed37e47ac78c6779f1e41739fae99dfedee13836cf164a572441c4b1641255e5a47d31eebfc6de781078f753f2c124d50866118967539dc2ccd99cdcf1acb389fc6b2deb82d9b6d6f76db9deb71ee48fea26fee5c4f8fe09c91b865efed19c70aeac7f16a9c33638ff9db77bcda8be57c2effd84ec22c16d7e31cab3956f6d7348fc19f3d61a0ebe3ec97f1d9deb3695f2f135f0ec9188c3f1fd7723eeece11e52dcbb28cf3e17afab5fe098a412d87e4d067e31050fca0655b876697f371c73e2ed7d666de9333efce3e1f37c38282e250b416caa1cc7b32762f9605654fc29ff7e4eb29e7c3f96018c6b1b2966559c6f974cd85298d54d9f06527d76cfaa9ed7c29faf2f345962f88bef092b7dc46792bc9dfc0c837ba47a50b64f6bb369b924dc9a8c4c4601bb7f9c4b22919966c4a6625a372d1d25f5e845d31522f8a1f35b2b9404645067fd4b6b229995166649a38a3d2351d89e20cf932b18874fa18200f621a33d12e1661d8f51ec497c1912862d7c7e04f9a704645dbc9a864536e22f6d5fcc5afb65c1ad1e844a0dbad96ed3e6859882563584665e24df5418b9b9f51c192e30345200894656729ba4011c402b1c864eebfce9225f717e0b09d589451e9113aa392196554e2d1c965f0b0a55eb0a5148ff58734d2bb18d2054cbeee41e94287bae72aef86e74fe3fa0ab995d8fa6485edd4902e3c74c981528ad1172cf065871d1f584a8e9ccc21538ea660e9f2036137ecee6ed8ddb0a56069da21c5940ca17419026173b1db3f8862e3d3861e8c5cac31c7f8370eb15f5748b721e9d7dd98fa8cb2fbe27777f7777715597ba7945c68c9525216eca4620b2e7020832862746199c8722643285c38e1a207211b99a357ab1b51ba8bf0f9a0c92b11b888818b1732aa082e58b04460106d819a428b1738b83c514c29423501e526298208103030b94524a9810d31c06c01030ac9163ba818c25c1eba2051c50cb0e8544169e1c4f581c10d44a82782b82e34e9e20431b03872a408ca055af05c19b420418c2cbca07cb8c205545ca31adc2ca6601105b5c405282e42080949b1e4da90c32d22038a8a2c7a50416421e40af92246182c50476489c10d6e0ba8dc2f629082248e1081ba61053df070a30042e1404310163ef70458ac50059824b488b203d490145f18dd2398107ac19016a0be384181f141890e5b6aa8c285757bb8b47087c208830b940d5b504cae5c16d02006174da0b2b4ae0e46a8c082185d5070a950828ae206d40e3168b9c285cbc4153a4674815a8115b735c57d62c5ca133b4bb870040c86504529400db1c38501072c8ca0a85841e4eec00a15ae0f5ef4704181910394161b5c2b505c1d48417981440b435c1ba800952408b5058915335c2f5594e0c650c510215f5040648142810e2e95231acc80880c6e0e4a10f184f503ea871e546082185e7e946c79e1ca600b0b281b8071822d6278a1e5090eb24481022a9a024a93226800e20a931a92dc1cd8708d6881012585961d9412612eabcb2541152816b0a056a8729b7022c61718dc8008658220502d687295380111363b82fab159911676406467074296f8f28316b7065aee0baea07caaa0a63c714b10e56241620744a074f8a1043e5c1324d1c10d45acd00191bb850e84a068f0058b16f70a2d2826aea0ae5419e289fb44947b84048a0544a0a0f8218a0f294872a5dc706f5004d545162231c822c4c917d40c5a0469b93d5c6152059583276688729d40e2762102ca0fa8177c405d91e4aee086fb5304e5440e88a070900321978b2f170a2d8cd0d2e50a8aa78a0a4f708982e202092188a8e287bb820fb728498c306ec8a208ca091544bc5021e4e2e00bea055ab4b4005d411955b9493c719744a90109140f44a08afc7087f870774842821b504b1441e53005911bc41442ae165f74b44035d182aa72e542a912e38b2750462c8d725160291231b47882a201883b832617c992186000a1c2d480122286fcad5e0544f205c2621942c132247f2bb88a315e0193638c2bc7055061053e443541ae78b2619b0f69a4b07672439161cb47286f7e738c31023bdc73e2cda4834c4780da48b3e26f3b21f800fdd8810cc4ffe25f11d8e1e3e60750b1df6a2662d94d7a4d3a3cfaa017968e6d8324fb25d50a36e210e4f84bb29fdd072447fcc5b7f88994c8c5489ab32d0997b08d184be83931742ff5849d7f13310a3ae67fb393f1eb9ec4b47693d351e79c5376a4ee6b9d4cfa92ed6094304b2e2ec9bee167f8013ec3e94daa897e0fcb8f333e57c204dcbb2a006bc0878dc51313292d3fe8e338e969e7d9039d534fd8d2fba8995ea49f4f252dd157b560e76f539bd943a94d6ddbb6d28cfd9cd263f6b30f9229853548e6aa36e794a1617979af660f5b77d3fe2c7b202e93fd459b52da34ebee868f3dd76d5b46bbe9f6b0ebc72a7ddacddc3d391df0e7c38e42887bcc8c37d8a5a0b040f207dfca6cf02b766532c4ac8a052bc29441234f19b781f9937101f7260a32a794b01f24721bd0e626ce988f255631b6f50eb791dd3c80f6c5d2a0984005208e4ea276134861b11f2cc2008f2b476f16ac3c5109b1405ca6e6861f21dc341b99e3c2b4bbe60ee6fbf5d97b77c1ebba2e1dfedbd561efb8c7c4e417f7de7bab54e9c6503628a59450c698a281fdcebecbe8c3db8a0d7a8ba79561cb052b2d17845a448eb478c0d45a6b8d345629391d3e6aed364d873605c775f569877dd66959b7bdd6d5e74cb872c5f0de448c06f6bbd9cb3c5bb229c3168f5176f7ec5730e29c8e2681d24f195d57c5be66fa1f6d600e7a5d13b0bf9e76745e6fddf3ebc23253d8c6d5bda64db80094e7bb0b2c1774a88d5bb5ee518aa3d2fe298733718e96435f7bfadfa57f531dafdf1e50de8861f8cbd19ebe7f8b051680e2e4a1bdcf6e669a411bd9479969067100f19c4988310deb1cd7ae97b3070c1306477b8a677874e679e37850cf1b25a1b3f69b099b469be3d19407fd0c4bf73cb801c31a141bf4d60a4a6ca4aab0d8d3703a3c5e9f5919ec83232c8d59ef800d69b013388435431c6b60a97bab98ba62fdbfd5ea5d76f9c6a15461ce77779ce33425858510c22ab0a472605351d8259c78f7e0df283ff4a4a4f4c05416fbf54e868e5331a83d5e175ea41c81d2051350bce881e2c5ca0a43524644bd04cb763e0736b70d73ac4943ec233f4e727cac63923ac27e4d438e3d34a4949891481211ca5d8650bee8c95b094eee6f7c96e46fb587d3415ba07da4d4352bcee8e97ac7bdf82917d8af5ba0d5b6f018c7718f439a4f9acf5d40f246e2eae6a3660d7b8c6207aa1ec3d8fa691ee02a950b96063ebdda1f40d31dd5718384fdee078968e28c38b18c416c2ad58efdbc2ce5572bf39f0c8dd2cfb2acf439b3040462c95a89bae7db43ae725d905c3b1f356ff49d461e15cf8de2ac1da474cf0c3ba925b61451abfb784f4b052b50ba509251a18195c35b4761a6d7f45a1d62de37c7639b9d4caa65e3d3ae427949b790004b04e08e8600cc339a96cde84ea21fbb160980f2475b3a4317fb0b677a3b49fbd879a6af6149a3c464d8628ca539e79c8f05f980e46bd2c63e6a8e1faf6c6ef32e699cc93ee7fac6be99751724531fb58b51322a1c37e7ccb297dac70f9267c660908c753e6abe70e5998d65a3dad3de5e2375383093202701299f84494fc21f09cfec8099f4383093f08cf639a4bf5e23fdf5244c1f7e90bc697f136b909c751ebb4f660fb2b54b21d4d3136b4fed710f739fb3f64ec43ed6bad59dca13942393ec4afa2745642b0f9150ffb4941fc8b29d63b987b95ff2eb99d11958264bfc6d1bd7d335b29de4399471ffa48cb0feb143806f22e7d335f232c2c6874722110e453d2c23b9b18cb5410c3d214aa225a5a827f56468e80edda12bc4d0d013a2245a528a2a2bb6622b4aa93b95a7887b653c0d0d6f950ac2ab3d45dc2be36968782b216ccb781a1adeaaf254d6d06d5d19ded0933b5479eace1deac99f0f5d1f1a1ad2b49da19a6595569ea2241ba4f9e28fdbe8c6383a6bae71a543f537a34a842522b2303584cdc97ee6af89364d8adbb8a66c9833f2d1281a452bd8d65c0f9933dc4c3ac83da10e721b4c84dc06fdce660ba586b2996a81a50ff3675343d88ecda3e6aff3c71971ef82e205981cbdd8a20b25397e336922b701a1786164d33962136598ebe91af823860963559f13113951b4e9a0e84439e22fc88635fc1da4618869503caa5058a7ba537f4ea7793a9dbeee9ceacfe9743a9d4ef2cade44b3097ff6647a68aa95a7f2549e2abf70921b860ca1840124bf8ff95ab1ae5857acabedb7584c97f35d4f7f04b9eb552bd6d9377dccd64ebb26c655fc496b63eac7d898181b533fc6c6d48fb17f13ad7d98abb5ddd73257fb257c136bfd114df54d507dd0b25fbae697be1216f3a5379970c99a6cc9d23f613124fba7937d69df246f09634feaaa7b5bd6f0777df633fe14c3d33645c22a7d2d559eca532a95beee94ea4fa954772aab542ad59ede29c9cc9148250ba34dad3c95a7f2541eec49182e99001942099344de4a391ff6f24790b339ade5e8ab3e0898867bed592401ca38c3960e607a66fef6dfd55acfc6b08e7ea6659426d3701b13c31af0aab9bba3101db6641c19b64c206507263bd49051e887b0c6f51ff69763d7775daa212e28330d58037e13fe3d7f83dd0c0ff9d8e3c80ce1e3349e4941e6fe1fa5dc387b88677e74be3e0599e1ff28bdf641b2e44cf06f9c429b301fe2143a5f18ce899eb513f18ffed1b38e25880366887fe02ac4e14244f93127fa7413e447f8b1b3639a824d3e662563cf45026dc9f42ff96e13235c79ab950921e4c622a8542db02baf6bc2c62fcb11ce88ff2d20c70a2db4d11f1c4121763d34413e7db96535ab533a4e017608f4bdbbb81e3cb81f3d7fe64c7c09b141b7f1e35542d80f4a9c82630c2c31a224680156a8187182ca1226723082e44a447214575005b572206ae150a45ac2654884784116b383c4e1065140d999218b2b39e4c88adc80a42279a12211a299ae40a24329a5a20445ad1ca250299932c87b9a16122a9994610b492b7fbfaa43508f61881856308513306860014f171840a03a816a87d52ac9bdaa2447a4dc60848a45f3a96480d87ba53158ece18f128dd24910698fd02a1b20a51fc38479209daf99254d7cc1b6c10a218efadfa692c1767ef8a59f2c399561ab069dbccdca75333cf047da485bede26f8e03ab2461ce399c6eeec1c8f2e9e51c2681a35f3d3747c2f5dc63cf610e5c8fbdc6e9c05eeb627338f1db9e7ea3d0b0067d20324358833ed6e56c8f7d96dcb945835186196e78a6c7f5d86394d341bdb3bbac35cbb2cf64eda6ec2cbf11e47e8d7629d02c710a343b865d1384ebebcb5519b977a59a61b582343e704e38278473c239618c118407010407788cee1ea3bb43e8d91338a3c241832108922659c060092b4418419183b2327daba4754393d6cf905c336cd1e0e5886dbefff49cee3eaa64b0fe31ea60e14baa4262e5c3b719c491bd7c0ee2c0689ef266096bf4779ed87c10b2bf0366e8c39c83fdfcac9ba1b84703f2fc09c3ccf088314c98a7d2bac148cb062577000f0300e15780dcafcae1553878e69ef97c4155c4c2fc3d55e540e3d1f0c9fe764bf697b9ad19b02059ad60680983cd37ba478fad19a6b46458a2db47362a5fef4ce80f7006cc5f29cf87d066870c4ae00c98a9bf60511966df804747e50e521149fd60897438f21e67619895b9eee33e9884441e0d9aca02fbc1d60e0861cbb47734f0a8ca7456c43e421f1f861b6212c20ce3f54ce35eebacc006d59fb1bbac2a5240c860c4480bf9c87b3896e73dd429fe2ce7c3b18298d0682127f6eba3dcff35ec567f0ff593268250c67b381fd67b7e3495708ff74e950a8ee52d75032cc396119d2aec7c4895cc2975a007f30e2342a007f31773cc338c231c98fdb7e8272de405e2e8224519b658528ec8b055a427c60a401c5d0158236229e59c31c628a39431c6d83f588a1188a3a51360e0961b327a8c11cb8ca49452e6ca95bd34d383518a91927f8a8b920c3f65c5b615f7d2b5b770afb1fe3172afadb8473f1585654db19f7bc9f27916b721b7b88dd9a92b6c67fff58fe7de2af33ed7c97d15d9ee7fd83feec13e92bac2763e6a422bed273dd4429e7b8dbdc5302ce35b26d35df7ae2beb66be6ac4322e7d2fda740e0cc3260df77660d87bfd37ae150372f7cff6d1ff923fbbcb084e815232c486a0292cecf518a594d28c526db35efa2da35b35994c8f03b309cf9c3ec7f4f44d4ffff41989f4a5d2c9643bee2147b25d905cea309049dcb6fd4dacdab66919fd49299d42a4b2b02abffcbaaecb49ce7d865d19e90b92b5ebfad25f6fbb8f746320fba659ffb46c2f685c02a1a5acb0de7b914a55eb484f6d819ba6d59727afcb313db769dc69723a4894d2c78199e29998cfa1afc5fc16e44836fda98be9609fbad243ce9eba20d9d46120db12c76db2721cecdfe25f5a6bd9fc6b4628492c7777083de8de84ee5d57902c2307a79c73cae99e84b519b68a70c9f36f82ecc01afdd1ca8e0e979415b6a6bcb0f0ffe5df802b88ffe5aa619873cee94e7227b9dbaf96e44e6a9293482427cd9984951fa777305f59f7c5ec6f1cc39e44a597affe99421c151db55094618b85a22c5920cad78421c07e7236da84a073d038a315e0f8a370b6fb9449d89b286583beb5583cb4583f73aeb4fcb81ec7f3f572bbaea8fd8e084c40bbb6ed37edbab479dd701b50fba869f18a9d434aed2f6dde38a5086ec3bedb98d15e1e84c1863da461a2750ce8c771acfbb4c76ab7bf8f9abbfebc1e0766ed37efc6f56b4fd9ef5a47dddb7ea379f3edbae19ee68d534cd86cbb4fe3beb95fdb7cf7e6bd7113b1ec93c90c701bf3eff5fd84414a951d11d8b4edb5cdc7d669608a919456e9099113219292a0233f580f6b880e07e4033e3470420666603fd83ada6ebc42c7b5be47fcf9cf36718c534ad93dbb5b3aa4d6094e1c79e54adac7df48cfa956686d5b42bf491a8d6ea4b7f6efd6b4ed044c31e45a8bdffec37d6ea4b70d0afbc1a3fe1350d0d1af43fbbc47d33e2058f6e19ebf064e70cfe50e9afdfc956cec04278e8e3c1d10d2d961fd040d1111e9ecb07e80822211f5a258545454845d13c71b5318f01f1de13f8be3bfbb80fffec67f9ecdbb11c4b1d9b8ef1de01d08e2a8d45e08bd027c678138b810feabf1fe5a0880ff6abcbf96b610c441fafe0f7c35500567a00cf8010401c2ff6abccfa66b4fa687d0f43710878538626678c08011702ce0860dfe6a6c2840840420a0665563801a346a0830c31b800042c05f0d4d0070f735207c2063465553838a11654e1e7432a7d3e9743afde9d47d11064aad95e920acb1fda99b7f5d3a97cea573e95c3ad77f355dfd53773d8661188661ffd5c874dc9f3aecfd29a594d2ff6a643ad29f3afa308319cc6006b3ecbf1a99ecb5ff6aa00635a8410d6a32da9b4c2693c964faafc6832ecb325d0ca6b046ffa933e1af44e22a90d1115ea840072688e2468d0ebc1c20c3160a92f08e127dce3927dc3029d76758b6cd0baaa2ccf0d8dc677ac89fd93912b22c7fdb1a487bc9c4bdb8c52a7bb2dfe08453ce19bda7469258eec01a717b5514eb7f1337b9f34925397ed67d9225853e8963abc77c79e3d84c0ff9d75f3867e21c69102a256c908cc518638c31c618638c31c63844896ceb16bd9177d4475956425ed003dd1fcbfad169d1226b748f3e8bc7057a594122efc6af76a27c48a9b51e67518eeb8b8c8eb270f12275583f3f4040414142424319c67894218410461650509090d0d01011512b430821d4c910fe644844d46a151519191d1d6581d0defb10c278e38866e1e2e546d4b9117762ec80030551213b7489bec5a5884b9690cb95a383a20d97202f41ae13e43b41ce0af29f99a38fa24dfc214a645bb7e88dbcb8bafa48e6f09fa84377acff345010566727bb98c38ba20d975516efe88d6e5b7aed5fef57de0d4ac2f092eb8b3b39c73c40181ba4f9ae2205fc4745f0f25cc59a4be3bfcf9797afd58cffa87705f0df87b0f20fc067ea6510b2c419fed947657cce3eef7e5ed6bef7e0b35983dac3b8caf63f2f6f4f8a35c668e3469166d67453df4523b2730fa902f047ad08f8b33701f8bb8f00fcfd01685e617f4aad01f067ef7d1af87baf00f8f30880bf55fe009d813f6a3dfcd93b00fcdd1700fe3e041afcadb2e41200212cd409bd1000843208f85be5191467f8d30ff047ad0cfcd97bffbd14febc8bbfd53c8a33fc29bd1ee0efbe0cfedef3e6d1ca8da2cdb532e16ff57f49f8bbf6fa31cafe911529b5f6de7fee3f8fc335f98b2c2c476cfd50201b74857ec8cb217522a553ea4ca933a54e0e39745d43d7d035740d5d43d750f697392497680331c905935c30c905935c30c925c71c3388523a83e80ca23388cea0ecdf798e79b45a79deffbdd6669de3fa89945a7befbfe769d70fcd48f1b35c3b0a6bd07eda5980aea20318a0b2724481930c5b4c7e0890618b4950962e401bca8a3376208eec8d181a5281100f412600aa21c71f1872a41027cb19c658b1a6c6f3feef85b1a55242eec419f15530b0df66c4328a4fa9b5f7fe7b1e8c5f2cfa3623a2cc8a363711a3ac2872242153b56ca4f95b2271654d2936ffcd3b5513563eecc8e1c89f9e7bd77beead56d2ebe428b05dd794f2e23e4c0636319c1b399c98310ea7610d49391d1318b2028c3356a071c6ccd86f57ddb0aa6915e370ae8cfd46ebb665b556ad721cce56e76fb53d4299c9b85bad1c8ee570300e87c3a119fb2d835947392fcc3312f638f372ce0338305f50d5848d4ffb6281bc1ea16ca0777951ad76430869d0ddee5ba494735a816118a55c344ddbb616caf0b3e0388e44dac25a6b3275e9ee7e2843610dff56132bad265e5a4dbe90f962531de18466d86ac2a4d5e448ab890cd9bfb69aec08f19261864c76b6df36fa5757b38fdddc341c5f7e590e0a3f4aeec5122e3875c8fe606c6293df5de32fcbb071961cbf8d7a68e5f8d4879d1cbf7bf092c20f2ccb80353c8b8fc9a888b0dfe7fc349f8cec316219d83dfb7aac217d9ad18f5c0934ce87dda7e589bffeac8412fae5635c095c09fdcfe9a03d0c7190da88e5c4baa6c9b3937149321891eb7a2d28682b9a6264c5e668aff5e8a9fda555123c3bd78307c528fd497f7e4c22432845e6ccefd12d3c439f04cf9e29fd8beefc70898f0d65ec2916d8d378994e26938da9321c094d94316ac33feb724c5c8ff8d452cbf1b8e68cf6f421099eb1df3cdf44ac5e9a15037654e0041f1f18c23a92a573f5a76634469df62106bfebb91e91b6727cecb1d778d81ef127a62e1bc6496aa29f256072ff91a09ebc41ae07fccbe967ff75ced9e70c7ffe580929c487b006901f58f6ebfb3d05ad253dad1db6c4165c5ba95faa9cd8f8d073b0570561e5b7dcae4efbacfb51ba346c02f697ec308472fc08c4cafd978e950c4286ad1d9ee4cefe6b8dd3d16d1bd6a84fafefae3e851566dd97bd7c1919c8cddc0391b9fea78428c7bfb5650c611ba7f417f7b583b006e9b14e7bba3dd6c1524793499f91d0ffcd0c851464c6b3fb2be1faebc25ef541cbe6f4f7e478f45f18c6873858fce64800d234544eec8f526eea828d28f7b79208e57e9fad834685ddc1afe137798420714ef77ba21ea8b46df755b9642403000000f315000028100a86432281481a4539320d3f14000e819e446e5019cea4248741c818638c4104180280101180191919190e008243b78bc04bf04bc79f73558e85ce0d1d8a73aeb65c073b54de2eea5b26dd7adde5fdf77edee69fe820a0aec5e24a1724a0e8a21cf97395392173d045c58fd589a395f2d180cb711dab4ba7e0984f7a9e5172798777d00174b2f2be25d8996d022121b69614248048005d97da3e6c51d31ef1e0c6936abbd9f1bb9f2e390410336c5c24454eb1899a0514bf477ea385f174e69264e7e472b44bbac99b1d63696ac2542b4675dab29a51ffc428b0c308fa0905c944ec26f5e03a41011487596ba94c2045714010c141ff9ee9011ff545e9ac66a42ac53ea9bc561a52867c24703c0f0302b45e1b75cd2365460c3056faa8ce6bac0ef6fe7e83bd3cba3437d4a5728ce823c6778bd81ad883b9e7d502f1545f54e01ca8b4da96a596922cfd06c2f2fbc50759babf96f31f0748336a4416e536754805d35c7d4a41b88d940fc0a5d1ec6e3abc07534dae2992b84dcffdc154213ca56da1464a0d3a43a3f71fd617d2608a5ab1d37bb87326357c527cea7290006cf704a85c1523efd3bd4df96fc809a639ac587da51ae9ed20c2862c0ea096ffb980309f7d348cc9d3bcbabca4e5175a8a0aedc32426999401976251faf6250dd6dfcb46a97aa6727f9adf3d70acde8be52ff5ab2abd0b956089bd37abf7b1c5aba32311ef63f1deecc9d5c7640bf55d44bf9be57753964e525a0b354eb0af7188875083772dabdf65f5cb0a96e28a5cf48bf69de63e3f3713628e203dcdc61e0cdf3980ee26991cbc6a56a59ba01f057fc140f543971b386ff738fb0350367e399cfaf0e54b56bcf2340062384e3d0251eabf2612459dde672485ad59e65ea2505f1322c495b522e208db2da70a8b755697d4008ad5205415e00135bc6dfaff34a5ac0ed989201063ec8a82c93647cf850e5299502251bbcdd92fa6a92902bd3bc697641e96df5b850c967e164290d0cbc7987499920c99b3d1617aa6c2f0e11a5a84e204305b17c0589e14f2c124f10c2be787e917499c413aa9967bf1b956fd889e3b9acbd54a3191e02e2dde8366e7dda0393f79850d8f1b089e83bee406f50e990e5e903d06a5d2d9f6ed735d56dd1fb246afcc92fdeded75b41b1eb2412bae0ec5582a2f2f471c518906a9a0313f3f3b4339b61f11a85e593bc39326a5486f78a92e51706085b79244aab9f307b990fe600b1aab02a7f4011de927a7e1de68c40c50ba3123bfdbdedc0b5fae555e49397f8b254f33ce9fb256e914384390eda3aedfe6645c089c62c37cb21b9570c767cb21109a4f98559df54e6e1dcf3819a32c73020a83d6e783470f447e07a1ed9f612f87556dfe59106ea0a8c8d7eaeb4b2b3d3f4490d3b1802d25263b8734334b7c40860a114adc2a87d7f898daa3503c464b4c31ba28979c7ffc1f55d20935b4c089ec0ca511455c44108368a4a82719454e275bc92bb22f4cbcc968e432f9485691b985828aa5964034187d45f8bc661b41e7f976bd7b93a67408f6c532af33b0863279c153999c27f0570ce2df16e5ac812ac9c62f8c406c18705975c53a7d499d079854fa315ed2ab94449be6b3709446527c032bcd9c5c3e4db13372daeadf4ad64886c329fd61f683264a9d3055b6ca4af284bb248358653d207303d5bc02e43a796b21fc0ddde8f6ab70354194cbf1a84ffb327972f5edc00112c8b04b10ee7cbe838f0c10c77ca25679867349f8c5bd4828f2d0b4618bbe36cf6b6e6557515e14dc48920748a972310b075388ee377371046cd749a181faf28830fa6a9706c0ed3ebad4aa7113e780a28296f722f28976345397aafa983a83f56b98a021d1fdd3c7d1606b44356f9a773180917d6a9cca26b06380aa25479e38224f4d010508f642b34a9b00fbba1b5a2f3a33ded94909ea1f82d64bf36d8b46eb9518dc26d37a7adef621b53efbaa3d4e8eb61968de9099d1a2dbad614b68bc6ebea55937bbfbf16620bdf1dea26f227bfc017272706061bb7769c687c71a33ba8a2ebe6705f7ec486063f0dca4b78462cfcdf8aee7f2a420bfd9bccf67e7fe57962c32ebe762501f865118f09851b6181cdcd3ce2cbf820c69673a920af3ab2cc53cdf79f72b5097ae85eaa2372a0d0bdd89e1b0360e13d95144d716e5a9812aeb2a8cda9b97c1803087e6e505a6276ba528ea4cb002dde57b865edca26da65bbda2c987b5b0895702315f2f3c1c7d47f4ae7d30ea08624e8dbb5131006861c9b380e2e458d54d81fa1a3aab2e1d70add25f44386e5380af0ad06313891f6fe53aa8f5aa3034c13f11916b4b0ba323f6680b7e2f076a1334c15f24a3daf25077a783086c1d3ce6f1041811b8c74a097d1e68800b432e4f8e99ba197cc78ec527b92ef8b2d3d61b2e228e8495caef28386f6a92408a1b08271832c8b64e12b6048ea88d9294fdaca6d8c6548ebd4e3062af4a1a1787176dad37d8c4d5ac72dbcbd0e9a332852461d04995957f8b7f024995e596547917234b89efa104e0dde56fa9c3dfee0fe66fd9a1da1d2efbb75ceffe2d95ec1cf2c6dede376080344f3514fe2d753630f4d84e5e9ca4b70e80cbe858c3bcbbb50f502539dba19fc7a11b152df8677b685f45ab8fcbfe96ef2e88fdc4b94d2965a83e54a512e234ee3494a91aefa839ec881b2f45ba002e036a781bc0d05f75958be5375db6be3d8cb2bf3ed9fa6bbe6188125885935adb1d089b9a0d01450d2e20d9e0208b4af14b9223ba0340b22d5d8e72efdc60e93b97d32c467df6641a902652b992da134051cd7f2ce9cd9c26d8ca91b41af6db7b1ee560bd5a28fb88fcad31aeb588cbc61b88c0a428fb098fee51e3096eb372cc412300e831bfda9677081cc6ea3126782ee564640dbb3c782ea364d01abefd7b9828ed79cf80cf261cdab764c81900947f42fc2338fcd35d44d45f5e5b9493497e1a58e7da3483b3b7edcaa4d8b033497061752371859543fa042b8164db8a1852229ecb88bd10f08874c7d18942f6e126cf536d2c273ada7399b5cc751b7cc9645ae29b41c35fa75316156dadf35cee05f5619ce7b22c25cfd44806b9102bb7dbc3fc9484319ab814655714f0eec3b47cf43a614c782e5f63ef83631135fb2be0d5076a1e3d5c7c713a900f40262e3f7b2f23e91cf5eadaa3930a25332e9ca6eb161c604d3a03071f111307c55a53d1fff7c004691a593c44e5245ef5220547f0ac46dcebe0338749677d011cd70d40b64197285ec7d65715a9227525b64ef70fdf78e053d35b79491e29045141330652e615d38ecfc940c8a4e01113652a857c750f8eec1f3283372772bb9f04292120020b4279ace9b3f81e7ebae0d7b7e0e5cdc0648aa2bb231605fff4d40522ef3b69570880fa0ad965f706880e9345043ce65c081e7b20e22d037d2d0b6ee20008ed374a16c04ddd220a703ece324bafa218ded5970fd80cb449689a50f48036dcff122e428cb3ba31e179bd95c921124c87ae53d410860d32904b9ab01110d27ed03389cc1485284ec5549fcd7973bc691d6e664c09033b0bdc2c9d5485f7cacaf22ea225f2ba1add85ebd2e017b7de68dd7b4fe7801f9bccd44fbbd790a8449cf2e98ae317bfaa6ad5f3fe3da4ad83cb5674e1cf817e7d8637fe12d5804d160996e0f64ab3165d142d8159ff3463cdc74cebec82b728fef32b43ac1dfc4598de76fd61d60f9c1f91fa11f03dcb4b62d29cc4a6a2a4121ff0b5be2e366d9ebd38266316e26599dcad32dd02d3545203c1554d5ee24a70a7c033c4a0c5c7dd18e057c0e134173126d0e0b0e4e615de115c5e727987d5d5926246e3124da6918c8426668b6e776ed467297fa9416432e83f19e619ed19bd1bbcf3ef2c94288a906efb9c114639cb63567186cee75b93d2f5832de190ce8d6491f955c7cd9b94957ca9ba887044e21a5f51b7d7de25386b5ddaec8690398dd26007a173c7c51a6cfae3c83494ed149de88a23e894200757d5b383351073cb169f00ab1380eb898bb2fe0234845e604b4ebaaa087c238106f232de44b9f03007493ce488278f39cdf0175c21aa678ae1bab604d261b8c9eb7fbf22a3f53d9bdedc244b5ed0de190a0ea43263c35dc37982fcc422910a09970e0cbe97eb186404de33e10234bf0e4ee2c2103fbbe0aeac39ca3ae4780f038c1ccaf8380240031b6ef60b9fdc47a2bf2969a9b1fa3f30c240280fb7f4c2599992f6979f962f60dfe56ebf3a9bf77a44bfaf7b207941fbe836b29e7303a4ca568e19ad625133cb2bff7d1ddda350949c5a90cad61871ccb5a94163c6e4af8304ea7ebd34a259efe64ca36d5ce3357a23df86a38b518be7805e491bb4cf19f78cd42a93427e9f7b4a71522d0695d742f7325862f390df99f0db03073173a9c85d2447f10414caff4d716917dc1d13cba0f9664362bf2e5cb90c6f4ad0dc56fb650233e983d619f6b1c2d4cabe4d99d849b44b262a0b38009dcd1e7748adec6f022a730fd6f03bb39cb9634358a5ecda14dc6fa952cef4578d0472a65fda81cae560f32a6111b16c32ab2664d25d2a49a2d4c105cdab71669cc11a6c538f9041b075469267fbece632c074d25e50330555a5f9cd5e89f3f6c579903d158313eafe028da37a45a64c96dfd69d0538a67b38e9a0e4eab4494ba1f1e29dba8946fc399d4e4e9928dc0a220eba2800b6a669d720298a5ae0238d2f2686c127a0ca8312a060b54580ec7357c25fb914fb777f975a00ea90d2d818cd41a4c558b4dd99a891a90bd46c029aa28343f1324b25b8daa1a63186e8abcee49cc99d043592f6f0553582ce620067552d80e7cc4e5b3400c7fde1cb2c712184e3f3134b86bc4fc0e2c95775af748217dfe73d0628ed586b181474cee24ea044e2f3431ade23a64b7ea0372316a56e6236847d973f0c5d3a23ce48da9a774cdf490fa02757126fe406dda5ec058a8f93992d2ff1f61f62c5d492af763e620784139bdc100041db40953a5be1216fe84ffd0151d1d25c5daf330f36192d4ec6826ff482954b5a8b2af65f032cfca3dc497719a75b7aedc6917e289cee7afb521bc3363be1974c701d3686cebfdb28254451a5159afd3d707650cf99ab47f573c61000929642dc18daf57f2d4ef8e0ab3a4a9b67d593435cc684aa577d960ef49490a0ec91034a1432b203a602990c0a6b6a20a4e107fe20c0649e245bd37e26867d0f0cbcf26da2ab197287c09ab5066ac49b5d82560dbfd604980f118d9e3f1e7fea8520f3d32db79daa1ade4efeba2365129777946ef70b51818fdd40073c44dca2efe8f0178b466ded125314dc985a3da3f3c5cf995585170e2f7c3161af4a063ced6636d5ac6fdfd781cf7c21000f9dbc24d4853c4d3bb3a6bb67916bdb1441b8a0dfc390db8ca4151c4e54203d77e58b7e5af490cae5fd16e76e28070f511ced4566b2f4edc08241d5ced438856174cda6029a12659ddabb5dacca5f93f92fbd125384def55f2120aca7df2731d2d596ca92a41f7a12dd265e8fe3230b3f1b4aabb2f1f1ab5f194e0d82c7c5dd1ed521f212650aa5c65f9da815e903711fa7145dd1b0f54a63121f3e9d78936eeb174b1838e6ba52b7b86a345e9abf67817ef303d5e030e35b2365a4e9a016a2f079309236e565f94e39209d6c2fb03c7d4ac9d7ef551bf8d9b1c4fa04b8aae05d2f8807aec18fc7138e1aa4c6446a570dbc9509ed66112e72d5ce29eb80b75bddfa3d7527ccf284453284cdf5fe640a36a5adbb5e366fa367198ac936e1ad4013d04c739bf4924c9e060397630d28439d92a000b522bfd14eeeda7bb26266f1bd098ee6b540cb42e561c38cf862b0b34737623147baa27b38d6c18f48d7d11b1aa31df2fdfa19e3bcfca48601b5ed9cfed6a3adb9883e68ab7816bb34f7bed58f119372786019d1834740ff4c2b1f73a8399c6ab01fcc02cd5a74a1275b51baffc9d132a5ea53bb94406613af357999fbb702a284d1b6f622101b76ccac0b016872811bc1432ef1d1b7269748702f2e1fbd5314bd659be47b2ee9d7595b85184322447218bc50f3e5bafb22c98a10a2083ad223135dce9e61c85e28ea9e0a2731f9b7892edb80405a84a8362793ee0714ba69a52431754bf05a80f9628f220941764fc33afa1528d4e66981da36c3d22739b98b596cfae32cc8153ef0784f29b03ec4d2a0fb921e7c44852c5c0c044152ef5cf1f8b141bab659f97ba997c136429a623ca33613befdf6dcf556a7928552e14335532b92fbe0009d891279f1e814692acd92457aaf2942d519566706c1624ca7b8aef8ac106fe1c56856df7dfe5ee7d2853c579b6c36e27e10811cd15960d0c06aceb0931ee0d17494dd19e3140daef98f692f7e803cf5268d7bbc052bebeec9cae4c5b8eb23b03acb889634647e89a18797f16375dbdfe5a863637e6c300a64c1583e0d58749585b3b6c94ada48649b4c14250e08e82a187d1c4a64c46c264beb00f8fc1b9a7419b50801abdb14f10d893e7cfe641155e40ac1917188eb349b37b74829f2658105df2606ea39d888468fa60fc6f26e34f8b2afb28dac02925ee939d226be345d4bbbd28dab92c8628a0e7c0fbd45201d22a8e9cbeac60404175a27c45e7dbcc667eb519501b8e0dbf83da2ac3485d5e5a7bfe2a329c9d28bb904b5e649694b13a4cddd87385a979c2c28664ec2079e6809bf86e45c4bcbd6fe5ce1104920f740a04a5b5ae0090808c785afe87277c1ec85f718bb058fdb39d89209d23dbb885f5dcfa3e4353449874e5b8fc5fe7b31445389aece5b8a02bc8a1f5f8de09485c590515a9fbad81c18bfdae933510bb3596edeb65a4d4ba8d2cd2f3ba407e0aee84afd32029f30593bc1224e9237c04766c5f06e1fb63f7c8bcd76a75f2f313205ac58ddc27f33f3d9aeaccf2362555bbaaf918af1233682ef6513b224084a83108944289b505d87cbab9508b3ff97f7014338bf905590bf1f58ce4d3c7562e27d15d5b4698ee5bd0caf5687314fabd2abf282eff6c045af4f96edfd2d3c8b80116175694ca36ad59f4a4aa00914ecd9313056c8f074be03bb00afd72dd1cb457f1f396e5bf78feadbeea9e01c9f80a79146f88ad4debc05b04cff63d8ad80481f594195c255be87bc0647a9ef1b1297f287ac4e93aa7cd852c84ce04cf265bf06a132f8d38f7177a98ccf9133a51c01e0cf76b4241600f3782e2d86fac3f19de293f484ce789543c041e888094006fe118b4aa9528b06ff172e23aafc5345b2f66d18eb8d3e792e8f7755068636d568f2769ccd8cb0011e425345c92897858632670a8dc3f2372742880e21d2ab511ceef51045cb375d065a3844d45ca19362fd58de1df8bf875c18729c3488804a160d0cbb516229d0b73b20e2c20384f3a5aeab218db8083e4fb5f6ed8d9128103ec52b3a566be5b36772a74f927f2644aa63bc00059787ddbae9a6446855af44305791b119ab823bb11126d30fd3df74e67f621b334a9a4d3278f46ea6e6fa7e3627a58d92e8330f839672a9416ba0e6703c94b23862606746b35dbd389ff0373060b0f34285568b4223cb09a91fd8e750c6e60f5ced859920612647b98378261ea42f0b0293c749a32886cb18f9c7c625511bc23188586dbc9230027fb95089c9699b3aaf3b11b2ace297e4f4d1fa61a475f76b1b2011d9c5dcf445c90293d1264e5af843ef6bcc023bd90da189976b4362d5325ebe9e75b61a072756c7d67c5b63f1c58cfe340167b4530a4d9a49b67429833902723e38a020a5e79cc0ba281b474b360c6200551805817ca13278cb5b5db2fd7b2369d52b722240b1c758cd3c584fcd92552a1a21805056b65f8548cdc546e9235d155ec1466134046180a69a1181c26e4b978b0c5c83623f9597de9279a543c79db847ad581d0ef28ef940663a52f9dadc11480a8154f2ff452274eaee1629e823848f82525f3e0c4e435622d04d8217777146d8f2a078aef275444a351f140bce6bb8048b1bf0b6c0d5d8103c0765afb41227061697cf75cf39f207e9348ae66b0b29d865474b6e1a70ab036e936940c3ef336f1de2eebab29ecc5e16de8f48ec2e78b3619e91a33200c67bd704af9a6664c9e804e6033998180787ddaaff2bf422ceca5858879248fb4474ff7003687099553b989581e822e806e83962d556172834507f4eda08ca7162d1a1401bc2d6c2b0063c432816c01b23a837f0629b7731e02e56bea20b55a804ee65d5c1e81eddc5402cd7f69d3742b5047b562f47bf345fa6ce6b1b71591076910bfb5abd8be270c23a52d0346744e44083effd3b1841da849822c59d877c8712c09c6114c93dc6eba764cf26c7dd76d315024487714d43b836dfa8ce1cac857a8e57988679d0b4a7f3e6bc27d7bbaa7b57f58193854ecc65b4a2fbb22824bca09086bf4b94f42695fa2a158a1a3976cab612f9712221dceaf9c17cfbc312f35f9123560bccdf9a970f4674a0328aaf312879ffb4348515637062252c52bccff086761a55cbe6a1b1ab27209df865013451d6edf9ab8be5e640a8d12464b1c72eab1ef8082beef8658b09ccef11b7921b64dd9fbf6ef143be5537d88655e238818a9b1a97f28d74251c821716097460ec33f2a3d08c41198314d12e977905ab62bd96707d6f3af04542c8b56bf76eb4afe2f9d4923f0fa160888c5554dedef004f5dff7cf9af691fd3be5198c049ad4d15a1866d4b0af5c57a9e63c287a4753974bc83c7db1abcd3a08950a1a462c5c9a0ad9951d2816e7d0314c9b4a293a7b743e14f9035c379fdc2b8d7b9e640a762cf8bc12a2969663cbf3bf3fa4fb90ab632f26bffc27b910f5e64ae0a512f4127e995608dfc929becc2b077a32210a77422f195b91bbdf46bd726b07925bf770c6ee65931bbc8f4d5b59678e1c5e75d4045ff91d83e640c596a936a055c094f1fef745dfd7e1527f38697a6dc45137d6aef19d2f6fd03c9f190143a2911a882dddd88eb4f4627e8f02e438386ec4122cf07836970f09d58fe4012be673634d64de60550883668d879704c250afc69278e6c6a004b2529b1bdbd25a424ea4a38c6577fb03c113cc8db53d3f80d06285ba8fff01e0d062a14003dcfd2404c76acffe47a91518823e3c3754e0cf6cb2c815bf4f84ebf8c68fcf25727189b1e6b008805c21b83809ba7a450fd3ac7ca5371283d8fea51f778b69e91f15c9b144ce02b9f0971d9a5b4fd67970e957e98c52effa257a0caa349c862bcbb99583b04e49e7c14f8aa974afc4064f2eab017869260bcefed0d02108699a8e33e417a6519b878e6c0aff9d67df5c0b649fdf2127c33ba20616c001382cc675c305722339f3434a54acb0630c55408303c675341dce3a60bcff0b75f9831305c055ab8aa3bc8f147ca02589385558ce6a98ba00e3e357545db7d2ce3992327daa224ed0ee15c42b22eef174d49a0ae2c3f600155a0890502d4339a74a5822a4949e9d52c21851934c34f97bbece4558e8c4c74acc05a5216d2bf765bf4e55c46df6eb5d29b8495a81bbaba5142a457d90dbd848bb5eecde5532a62bb347aab89e24e3d855a6df5b341543f120f8c69c5fbc145f1d1ada0a8963742d41b149e92934bcbb89e2555d850e3a21b02a629c8e51e5b750d9307bc4c723dd065454e50c9bdccf8c75dae6e186538ae0d8975538ba2efe839d631f97a5324e57a27af50ea2208cd657f6c5ba50223d3d69a58a51a0dc5c6330fd817630bd198fe7478f85468d955f51a39658c06b778e164a38a914adb7babb5f638f9e31b69c3701735cbd357a70f9e47ef390494a461c04184e69c6057abb955bbabc3751be36de8b40f22f58877aea326e760eefce6d393243c9c82d67b910e361e79c6da225d255b897fdf619746a214d338fa18a0e53b1746be496aeae114d78b3e2fd4d3b23b874286d2068025fbf69588e991b8a91acd1d458bbfafc5bdcf2d657ecb3d9d42bcf9f0011e1f8d7a418e70333fbb6359ec247d6e196aef6d61b6512ca216ec52733e1344296f4882e274f4339dc7c29d60d8310683068b76bb7387a378c4d2420ed5deb23ad1f8167d94e5643a4e60b2cd8ba9b3997c052046fdf63b008a2c4f2c4faef551acf0c4e06cb510cb146237a65d938316f079794e3254cead3eb95f53974e5315f289ed90fef3033ac66c6db7e20908f19627f97c8b0fb09c6aeacf1ea1fddb00089b3d994135713ed13434dbc64202a490081d15ddabf64e9f8bf38f3bb0bcc0d80c2021690f57505f06ed90ef0cd8d5a83d3336d1534b2cbc5d5c51e65c973a747773277e739db9eefdd0923cf14542915d3aead82542dc06e93d8df88e93980734bad978ec9b80855807caaa928882a09c2f033f235a3c53ffe03be966ef3d89d676f376742e68f8df8f18db046438b874dcd319742c0b2e7c50a735f5647521807b691843b03f45a864a0a4434cb0662b8ba8a7ae0ac87de59d17ab9806f3cca42168454bc6af4584c3c3c76abddf0e5d356d5a1b124e27ed1084d158aa7b2c5c69b9d97c15fa0eea7b3bd89eb0953aa090bb66d819d95be19b2d4b5bcb0fb1f3944b8f130d609dbdc5e81f8be095665bf4af1fd7b51e2b84e5671843ee582403b588627311b997499375750212cc1f12adf78946aa7229f849286b1dc020057be002842ed918781d73d57347b34e5762f792676774a6c2112ad6ded6f189314b51549952327df87ee08f4704d207c85f20145be076e599c16eb34b78ae56182a6d1703e987c7e0cdd56819ea62377e740b884bc7becc1aa2c4dc2711ec19feaab98cdf7c575df95e5bbfc49d653a1d6d02cc7e25185190600620a43aa4488fc4e6aa5d7310385b879d6234936806feef9de094a040cbaf74e6b673851661950aef462d57fd095eeffb56ad99ee0e8a644b826840f8a9f56da08867356eef9741269d562e2c5edfcd1bc0a26afa2e0531199f6b46fe868812bc349d6a3854fa237c361d89117f937f9cd27ec78434ef6c930db8ab81e51486402221f4529cea234ff803fe6333e3d3b77e543000a0be3a2601faaf758c2342302079a527e29a999a92e59547e1d0574994ca4ee81e6da4401b7b3d0c381aaf6487d694618f19e52ced5f81dc6f059f1442b81b3a0d27227237a411beace82479662bfcf3685d701a3129b179db3b0ec9f89ac08ab7ca89185cbc5bc1487f65ce7c55f19208ac7d34f72ebb58710d20906de980a1e57319e7cb2b8dc2aa8ff89e50e3a7c433ac9911f4a6f698525d1676009cede0beddacd300633bda1d39ab7a71f413c59deb843d7f62c81d17a2670ce53a6005687913ce11da81e958eddeb8de6a8932506d151b26c5be449f06dac4a6607da3764fd1b747b0c45b3df653ed0341475ae6e6fe81ed4ed9111d9b60d936eccbc1bf556ef76750df458d63bbfc648ddc637c626980f6c368043d17ea1ae46bba1bf764b1d7b7c33cfc42534127b8926b45a828642291b9189620a1ba9682b3a43d9ec46eb86182d24e17f47da7325189f684427a8676a19c5b79e153544019461631519701b7e0bb405df7b17e1b9ebfe241121d155132444e2cc9c561a3acc72f924e7176bbbab8d34ed48b29eac15a207eba82b2074c262688beac34840eab4c6af0524bbaf059b203daaa16f6f95794d324ced212938ed035afff8f1e9ef1c54ea2a7aa74e0bb956b59929a9e824a8f281bdd00ce183db7cd72713dc05aa67801ccb18584fbcfbb69676c0b1c03b9124a188d4ef36dd8e5c8054017add09917a0eade2abe022585fc72e664c9fc084b1d6d5c1ec45d0187f4c4ec4537e171d1537444a731d62cabe1c64466f5da5f164503c584f396e6251caf20501581e92a2b57f30f275d753ee9a0d3b0bd549545cbec10d46be63fb8f3a408583bd10b53db21273353557e27c58b145e010e5d4c9e7dc82cb2b12a2ae11e5b7f0ebfb91ba06acb9856243108c244b2f2f1a81b6af961f96de0c0dca678a729348f13b12d159098d3701ddefc73166bdc3eec6170e62e3d2989d8365a3396367d30626880d642666a016bc7f90f278d7588f303608aa2a58543e9c68c4fa91ea9f173306cf0e14c813b0d98db3a0b14fc531753df9e709b3465ed8c8d6930e76241d46fddcc2861d75c5bc6ec07f21f75def3502faf30e261d2fe6f092c5de6f0ec983a5074b01fd2cccf1dd450a19ab50c92a43b5657b72808086b79585a3aea07cc341c88b17cabdfa47f547c4328c941d578efb661f8c65ce6eb4f01b9be278182c62e5765ea0887bc448ced3896536511b1be4bfcc60e578e80737ea2e0a2f8b83148bb98881bdc9a3c6da904363f1e06834c92f4e6c084ae392a5eb0aa78ed7568360d4b137d1e52e72f76b23e161f7013c1d683ed7c60993f2ea403f0b220f593f0712361203aba4745f0faf960882039bdf9a1d82fb2af041bc4ca14fccbcc64fe867d3f2d832c4a3801cd182ece7145b203c602a09e4579353d8a84bc22a630ec402dbdcfe086320cbe3791ae86fafd4bedf53d148cfd7149c208c57937e8b26ce8db3ac4117bd4a94f2cd1f52561eb15ed655cac198090c31ac19c70bd12290a5367ea1729bb277498043016e6701417030f6765282ef292b784b9fc5f1de3bd0061d3484427fce52c9ebebbff1798bf1c5413474fc1b242fbb92964d7d49dc95a054f34925a9d319ae03ec4f7d39b6db8d20b8d74dee8ed956bf688b6ea528dba377fe7cd2663106e4fc2313e27579f41e975b76974799a1d2c4d48c0f9da34e5958d86e68797bfa5cf2c9deee1dfa03f483ec6f0b3ba340740e500078e1e5aadd53d48aeda5ae0698135a8c100c194f02a980a53804d6467a9e24194369e84636a86c16729adbd5754de134540dcb991b6905cc65f538de69b51214b75d71c2378c00e430909018914cc44fb79a0c5565a49ed375688664c06a570a24c907f479084be888cfa625d13b849c86ac6b1547f0af0ace353f28291956be40b0c0debb3837a8b151546ef49134a20d4e4f3d48970ac768305b8741b92c9b3e94907cbb1ecf63336174cccd5a26dd78808e32f7b015a02cfad3bc9ebcfa849f566788396c6ff7ca83cbff7532af8b6263b757cec449348939da24a5a955f4a2b9816f76b320f5bf0b46a71519475c7f17a68e71031fe3fa805edb3f3794aa279938ab34e29311bdca316e3aa9c705d6a1b4bdbed9fa6b922aa12ddf6db4b9756f055521c01c42977894cc6002ca84ca7b20a5f5562fb2d97a889e7b30154e2c2526ea330baffd87d69501269fad58da2fc3b453e373beb9b8cfa94e82278f38c303abe9ce6785e271acc73d1138895604dcfc6a2f9686b1854352856097a5ddfaba77838c8bdf35a81a6e6c7359ca870c7bd171d657f7e81d35381c8d3da73589b48bc6a8f24f0512470e51970fdafaf075a8a3743f08940e84562f8d24983c504a6d1bb6ae27c5ff3a0dde5666c26c05651308038dea4c06f4c3956ddc74a5c455a402c1a2d5973fab19c008f7975792bc85e7baf4fd2b5310b1a02367d84136f7af1accb94fcce6bbf7e761beb8341e64c1ac8e31faa782b61b285282a7cda76663cd72928c5e16785ae52e57ef80ea05e618df81659eabc3c86107829471b08811d90b00d172f35842f42f8588924d9f62f4597c641fefd53231516ede30130c1f6149d62f879bb549336201bd93d36dd5327f9d04f9802a4862919711bdbeedf475034ce0e06d1101300f8170669edbbd9d7c17ffa001dd1f3c8768777321eef3447be7e5622710d888999e8035f6f499d1bbf8fb1e40bb7458792e1b6981504711b65025502a23a67c62e8be213efebcfa3ca29943f771f17f8c7dd6b6ae6a2f2a0a4e86ebece35f62fb45e8907a448110c1ae53d9626cda2268aa2b51e8322177e18d6b4f9ea6dc6eb9b2261c94b6f9cc7a85a04d4e78bc7b84d764e093bc843315b9b945fa0db81d1447dd3db50f01294138209c445eae4c6a0b81ab24a21a3a914436c4048909d026d462f71cd04a92adc9d74ec42670d60a69bbc8129db56d9314271fc8cffe09e4488d66d11b1e7b9a579a4d89725dd88ce375931096a05a0d64501c8b16d176055b6293482413de0727a571550bd48489b76f6eb9b59398376656f2c81e9a439a0c522f8d87d3f5c6a092f565004a18fc6d6d29b49e8d305d5ffca0424511e16f85abb6dc1be9fb21c34aef5013a668eba15d56dd5d0b3353dfb34ddf3e4b0342aac33bb51aa0d920a2ee2a22f2716edc714d493ebd0b04b80e952005518a4ae662d5ae06cc53390ba16eed3f5596dcfc66fc329934561b6644600e87ed442a420ff12a4f42f3b17767fe61d7f8ae202c4431a2a7442c2ac2c70cbbcd5dde8914d274007aae806aaefe21f1d6da0e74f3dbfcd08ef737ff32469f4c13d575d02e928a9a843b95282a7c459f35bfc54a7c9449431a49936f575f55fc60b0ad8d16095afc2561aa0ddec0141d8ded5602c3b0d692b57ccd152d50e5c9a22ee2cd562801ed45c7897abddde1024e36dfcf8dbc24b189689da770a2949e9dbb07f76e174ac719aba6c2be32bc7f7a81c82fa592dd278fc2458f261cf618de1fc5d19b5aee43d1bf3f7d4c0bbd29e405ee1805c6ed6646f30f98e19da319fc0986b56f2fe9916c9055a6fb8328ac20147a37b8088c1a3aabb53e507f74914020ff7c6ac13d6a01cadc27959c344ef4cf9bc5e7617ad34722c013c9a1796180a0e6184b253e08969712e36e5d08249fc28e7bd7df48184fa8f94cc3e30be08f283daf0b09835340f15540f622d453f5858e428949183d129765170868ff534732244cfbd2aebe95669a2c1e1e5b28c7e06e0bc1c5a64fee8a412a76ebb1cf7cceea917be3105bfeb4876a72d679ad9de826c3de8fb584ab0c0db9b43b152eb9810bb45810dd30d7db1214a40a6dc5069371e103320f256603319d7aa290c4168b67982b47ea0dbaf99b45bcfcb722e37501af24f1cc470a495a6d34c9cd5f23c976880cdea73c818c0d9a373a2b076714643b5e51a86afec8eb04a427bae06996f7273f62b226b5c9b74360aa47049fea38d9fdc0ca6d85a61b9e0be433d4535bb2f4914cb2a83e3e4180966e422258fee5e43cc263b57aad16f13ef46287be140940cc4101570cd4cdecd9214202902c1a3fce7a8952cf0b12eee531e05a4ec3605e55f64696076c22232de3d013c25f6e77b670943178769376d1ed1612fff1cadd8f748d7a2a76c9640ed0c7e25ecddba77d54a0f8732492cae37e0988216b077655246ac25ee432f5672800c3e561a61bfdc4563f257250d5c9980a87ddb4e0b7e0499187790aed7eacfafc9b4f833c6ff89f8b456fcde5a2e8de664b58369132d95120210c14253918484ca4b3fe3fd63461b78e9f5251dd2e5976598e3be1f40824426a46a472ce8883e6c742793c068b4bbbf3e39502539104fc4d5b77f7eb2db70219140f88a86edc379f5d16666d098848e4470154c0827fcf821afb2f98ce28cd4c606cd8af4313b147c3a1a333f053847aa4e1f4b6fb7532924a4c23f2ae0292310b0224def42ca9b399304783a167856399c980d08ef602c0fbaaec8b79bf37623c3fb339957811cf0f03ddb1f0f9cd4c170357d93f6b1708a5440baa0219c09d9b4b246b9cb0f704181ba6c14b1310b9b9b4fc2ac893a4063ec5ac952b49465830545e3dcc407303823b6457b6451e8294528699428e32a6e051b99d089fc4b59b170b61b80fe4e72a56191d71e3b626e5490be819724b8225aea4d0f360f97173b73ac565e1841e727c9fdb24693649ea1ae96abdd9baa24af0af336f3df8a5eb6608aae84fd2a4720b511a0ff83b320cada94e4af528f6b9cd83fa859c89f6b04fc21bc2d14c2ca3834eec3b5e4db1811c25bf787a4d7960e88933d4cc0e21ca46a4c7173ef4a43d733ff880438fffd2a351ec57339f2fad0c14cd4b1b807d3409826068ca7b0d0ab7bc8591141d90452827023597125bcb971d557f1fcdee3a51df00241a0283d7268edcd8ad00650264e7e0a9806d5bd00cee071d295c7312be1e9b8700a09421b10101c6cd1d4357bd227643d622402304a8e52032a020b0e82d0c33ba4e36985616b156efeb910b07d4941c1a66d07951b0fa4077aff0cd92604188c38c4c59277fcf297e8030f67c84b9cd4d518719957c843f3d3ca670e2650584e128ce73f0ecb03b5e60aa68131abadda2e54c4b3f24ba9acb592993469049205a0d581f2ba51926f1c9fff99892d592b3ffec4cc6903d71e96ded455fa28037123998810f53871e373f2d0657b0367827c5048c886436e5322bd3f6051d6005dbf6e14a3d246684dd15ae644a56a269fc282c673b98106865cbae473755e26a4d08e4502d1a3826e566621574cdb9275677a4f42c0e32429c03d54a1596654b6cbe9d41e5c393fc666bed860351ded703a9bc12426188cb1679bc5297b1dc8aab21318e4438875b844a1e049475bf46515bad513407a9472fe5371dac5c5fb23b2391a626c359cffa95462576baf4c714ab96ef6bfb80c92acdc0f7b003de30379c1534aefe4e0b909b5e3dd0d1f427de1b5b0aed6795c8a0a6dc073b21f1e54c54f850ffd303d2c56753884c92a806ae686dd5b0886de5aa3aa8ad69d92279b6d61607ca19935948553b61035d18709b344f694543e817e2f380252e377200ba30d03e0146a32be96551a9c48f68ec3722cbfdd5a176001477a7a5139517969e813f0b03ffc4ae07f7099783d490f469e352c6d8a2cd8669375e2cd09dc138706b8546eaee9440b5ab50154a56cc32cb3f81d6c5752387449a2db355cf5707e117c30205f185df2dd97d600d7283ac6dc6d14a722461251aa74a939252e0aedb45aefb0f8ac0b7ed6ef20fc05edc3d8b31a7e6395e5db95817d463d0fb4b2ba9280a1c25af4397355fa19ec7297950147d8baf076d7d5d05490a98de564486a7a568d80a8db3e8a3c14f3e6467e5359109e1b15e9dea9577327afe68ba4abc26d8cb95de513ef132c75112cc8572410075ca1bd4cd5e0aa67939ba0d01ee47a3684e29f29be3fb3128e1e66f4c999bfc1f55644dc327616eb204c8ddd2e1e270144d35f80010060c0f6a83778582216bad8477309874a9327709b347bd9cf73868e5e6c1fcc8ac0c752616ac5e35f5b253b4804098fcc14c1766015397433d0743be4e6d9115e4d52c7d3632a00ef5fc4f9bf6fc81e2f3891f0fcb25476a657f7e4dcf2146c4a0177607f457b55f0ea06c1b7230a1faf456b18bc03e0b7d9ccb1bb156a169bcb9a2139b22ce65bcd7c06b2e4e5dd137513288020c8912e941aee9eb9c0a80240677e45a2a85379efc5963e884a916e02a8530c3d6e0fe25f0f2b460991dce2a7f76e081ea5d57a52124bd49e1574f382cc2a09d6751144a2a44799c27c64ab599308dde2feeac809d11a57b865955c96ecf1328ba47234281066395e691088840c2ff87c716e9cc69cb4584c9a4f687e9f459f85f05f91434515f980aec83b4e0d1a55625183cd8d390b528b855ba9c77d994ce46b171d1cc9860d348058c502e5a8a638accb4ac961ab1c323a442bda2c7f5b41b4fd16d637a7a68ab7ee29a4bd030563a652ec16bf83a671186d7fa3ee2d2d12b45c9a87db97818f4783bd93e14029b41ad2ae463e93eb9add1609277fe11e436f183b6198a31b1e1cc9f58a15ffbbe2de090624f392d3441cfa635f990731b0d2dd563b00f899c73520207060eb36eb8dee5daf369ecf336c8cab2b13ba092c5253c3271686f16f0ccb72b9a4f6e3dba59b5fd8de1940020439f897160112f48128b658a6a153e9f62456a5205ef70f68cac1ecbca2770850325e7569595615386c030189e58e2f7a3b52246228228668878680ef9c424271b5d78a9aab4cc11a834a437b410de57116ea7a6958c56904cb39478a5983021906948cab433f501f87c957e24988f51cc14eed692ab5087de391e6a3fac6c130bf1e1ce732f664738fa7bac60f221db1084e634d435bf1200f2de216c5790d5c71c1945a78fb189958148006515c8bd307188cd92be137636892fc53a00e7d89228900006fa3f59f8fbe29bda594c74c834d21411f6a0a5286f8ec20be7a5572f2ed58e027f0745e3041fcd482e28213316344b3a9444b327dda97c2d984aa9a47d12c053f41f2e70239231909b47c309a22ce72bcef2739c8b72806ce3e9eca6b05e64b609a5932e69e88484aae63db802bb9586ca3cbe349cae8ad24aee1a27134085294b6f57e44e26c99d13905b38a9635725a59476166ec0154521b0db21973dfb13d023c0c9fad2f946247619f8cf58a242e8ab2c515468b9f1b4dfce78bd2b2f26814a4b964638e443038d6c8340a74063c4505980d805687da2f43d431bcc65c8c9627045ce6a689b185d7978e2f6ed8d2158c4861bf4fe5ba13febff357da0955d303e7327224317958aef57fbd4bd5a76e40527eaf2f199e48e92f402e0f46864e7ecaf2de34c1452d64a1898ab0f5e432df2913f603aac8630a986a47c32b52baa0bc4844a09a893e923fc2aab532dadbe0f7e7358bbf971d6a8bdd0b53aa4edf93e613c8893e638bb44d268f39a66193cb5c18c075c514288d17e7f8d73815218de39c28b97d7fce991e161a5a4dba1311b41ebf5498f8e98aea90d13816c2547b95a435467f77d71711c306c92102a80331b0d1051c1ee83a96983de8f21ba58bd8a0e0d14c77dd96a6b798d4e001e25e2cc561ac8471d49ce6239f3f1c246fb009e3efc59dfb22019177804509e075753013f6afe48dda5d9dd9a558f2f950957fc90513bf8722819a1f3551c4ea61e8ed11f0e9d98ac86312631cd456c46ffca0fd7ab1fc537c76696934cd136c5f1e82cbaf9e05c04079f4cdfa5a82f1d5dd7cf11f715d00e64a1c8a285ef3a19e7ee0a5800f81edf64e99600d8176feb1f3e36bdc2456210b265a0bc781ae061065547c60e947d60d32566e2cd9e1caf8c2fc244b5a13f1081eca22cfbde37ca61cf81a7080a30697e782376afc563a9bad6edb3eaedbaa7e605e032acbb2c982c00d1db3b18d9993056db0ac4fa42d0aacacba40d072fb0967cd55bad82bd0ee9f7a54d022b2085a44058d40bc5eaa2a597c369e1c7cf1c06642bc8c1a8f03923bcf8cf4138e8f4dae5407175f96bd44e3c0b8a06a93585cc58f10a800fe652333c441431b610926b40f1c1c0c88922cfa2b28c670034483f6afbb7bad2c22a860884fdf3159a3733f8c241fdf0abb3449e807a1c13cece9fd332d4f6b748da047f1b0b7072974451aabaa16e146f72d345ceb5faae45b10173e9fd3d91e838ed5431dc32f5fcc502dbc0b0b10ea7944c37ced60f9642b7e8f3f6e5399e9e0ac39b92b684929a24b752023cbf3ed4ad6a7aadd013a66eb00c5cf9c8141dd0ec7f0c043724fdf65ab10c2adcf899031655ffc78dfb4a1b1c8ab29185ab36b4870ee7286c424960b821f82fef8a8cce8e20eee00eec472efda9b8631b6d8cb4ef35f627f4bce8386c7a4292615980568018d1c27af4c64484b64a5b181988f486b9955dff31bfea4247a0d2bb0135b39a438884af38fbc68ac68d40cf4021270cea80c726046a3a850906c1527acbe03fe33b267a9f52a6e239c054908805828edb9063645b753a2a0f5c9414f0547bd586b477e2e02803097d298c0e5111510568eaad715b6479d84b10d163e885504e87866ffa67ab677912f6176bd1e817f1ba2ab9d9783074a3180d3a8f52098e87519b9f75d241e1a87e6082a3292e5ff206736e051562e24d65244805de9ef0efcb8446a8dcc2b38b9319fba3adb2a8c2fb920f5d77d2e7d982f3ed282d9e10cfc8dca217a1ba603a60a34961a22a614b03f5d6d663d2e3f98ca0057f67b86338ef0c8d0da432fb60d4e0ef69ba4fe51401a184e3f445e008723fe4f811eab42f1721430753ac573eb02bd705aca7d5e20cbabc8486d9fb3d04b83834829da82f12111c487cc149a3ccf4abbfa52c910c0c37c32ee043d45b117a7708119c7762d96dfa72205eaaade70fad87881cc7209b4d72fdac8cb9117761cb3080022fe90c01626abb192d487e393d16f7d1fdfa0b62ef8702c07837205933166fac4a75f77a0e4d1c90150946076d1b0228d1e05e04e0608bd0491bae5124676cd096bb8ffc87fed6e461fa7c9558c43b5339d70a842289ee32e5c65b391b3712dbc67f1e217045efdec03dfb89027a9a6c46d8de0de5482cad0045c8695dc886808b58768480a7bdd77657a487e869fd3abab4317e852a72b91aede5661684413a078a876aca0737f3e3296e014a0cc7d1d9505d62503d0302b60e407af1cdfb90a5203423d62d36fddf0893dc453b3db95a263cb5db1e9b3a900e42e106a04979de985f0da13abc44db9fba3d9422932b29b5f801ee7702a1d181f48f233a634c6a0a75046d48ea02c71f41b9d99b143b794f9e6945570a3e96bb4adcc71c8dd87f74d91e0f8313f06f8c920ce05ff56f4d07bbaf03cb59a0585346e1e53fe362375d520fe91187498e693f6cfb8d99eac762315ad2122d7e75f32cb14ba60899a2746c3d3d48145f1d8c9a09831cf840e8637b044b286524af97a1dcb93fb54d468989fd465bf85f31e476199f495167d11150169408bf1e07c5188a8fedcc8fa740a33c1823f7522202635a92f09ff7bd742bb99719f29f2a8e0f72b0a5c1a7369ea81949f90f0cb9fe9e965c62c92126e7b4e2704a674c4051dedc18f7f76a0543ddfa6c221d5f72d6c6eb0415c0455064a1a028986c7f180e530108ec46b79d381839844851799860c751b0511e7ed073b1876194cd6e7c7e47abc2048e75b7e44e0044a854d407ead4f5c04c56fd0505e750f25096306ad2c54b3ebed32b8325b86afd9d3e76d3b2c08067d3026c26c19b758a70ad12c909cd605214612dcfed65a60da3000854f859ab3199c755484f7a326f6f39a69bc59336d1b629c8029c704f74b2c1130be168a1a69e13f5888b60772ee384a6ca693eeb3a248cd8d1467d6ec2455fde585abfe81309a815599f80a3035a1b83ef82cb5d1dd0e2cacac042e7bc69f9fd095f9825c2fa6951097058e0817351d0a7fb49b2a52f689456a47bbb7f2bb717567f3b24e3b699dccc76c68ece385b39dd8d1be55761365c5d91ccd746754fba6ce9989855c98d67175004d0d08517c5a95cb95ebce3b7765805124eaa965d399c652e2d8ae3f38986f99642c559ae9639d98937810df419f8c1548963eeed1490d7f5e6c14be0e8e40e02e9c367e61f5e7ce2e52b157d36cff94a1cc2ef8ed2da735f05f87b0c261e5753fd8dc90c7189fb213a017785839402d81d713eb224c2fe5503eb0ce3a3a59e32c4b83b9fb20b3c34354bd44822503dfc8251b6c9986d3c10e60c13b0886bd15187889adba7011f368ee01f94ae6816e6844c4ebf2895f2990289858f73114622238523a75007cb4d989d53169287d4eade8e6540c577e85255967662765cf59b4eebc8bc6277493147f0e8b8c5300b4dba64202d502c1ae459a32df005d5e0e49d3ed05e55a67c44138af3dc5d632441483edf0e38a2e4cdd617d2ab77703bc6096b5d7aacf6e2df87cf7cfe30c900383b470d4217022189281dbb1754d92a93ef03dcea33e285f1561971a843eedac30dda246abe26c3c1aabd0ee4cf1874d45782e2be38ea137f91c2b489aa0f870f913880130f8de1ba75a4d193b8e5807e6ab070c3b27f1ee1464e0fbeb60125f918254de937d534ec14b3713c8335b76d0e6f639bc6a2c383bc19e497a6021df9db8a667a74842922a36e42d9da4ef46a8478179bd49f794f4565c9af26559501a2e8a7c72ec50dd218100cdb16bd0c6ea2df247de299c308f65b32a3627c663334483526a36e36441702e112d6b7c4f6ae4f21477a2f009405aa29b2a03dc889a147e0044d6a87802290e33f5676afa224c75908ba5a555c5823ecb7d12cd9f9649f230689b40d49be5da70c6cf07c3ec0b10767f5864fc208df457c01397055f464cb40947a4a74b4c2d4bbcc96144990bf631e2a091856b2ad3ec98340f646e55e9729fb8a283c6a23c014e99a9bed6ff466374e6b8705e4e4620c4457effffc16c876bf53e3fa1cd680be4d92d54f06f14ca44127f30670b531f9be81adef5fed1f648066f1ca92fddf057fffd43e9185ebf2607f9b8b9a461ad419d4b7f173c2dedfbafc22c4340397ddff8f09a10ad4fcfd3324640970e8e4d824cc6cb2781ba0f87ae6d16b08bd22f8844f36659d6c3d0bf9e9ec577398e9f88ba18f5f4b9e4de39a273b76e6816b689e29bdaf8e381b34351dbfd1f802a3c7097fa4662cc255a992d23b08dd3cd94cb65ce1e77f45b86693dc93ac766894d18908651f1b7146712184bbaf72b7e7541632dc4a3b64e40895d613ffa9684617b8487b5e1427c8bd6bd2d2e0c6d2b4e76e1ef66ebe93908e7a0e884840eaa3833a628be59e9c7f40ac090a1c51a0ad96fbfd1685d8fa0e6fee77454450eef71415665aaffc7ad387efa3d2c58e6e597d38ab72a5c0049963eee8c5e6b0f9eb460b0ee3731f867a2401790c7ba21d968f9b0a1b9f861409341b5220d80fd0e87d5acc981b7aefc28a66a81c110f270742b69ebdab31868129cb7d40bc2e735f6170fed119e0ade42a1c3ef606c4eccdeb75dc82755b32ec3632ac83580f929227ae483dc9d0fb9c2aa6098e007020ebb894c6f0c1a9761912054c48835f10b98d0f4394596fc4f39182e9fc4ff07aef0f65c65c55098f77882cc03f301fe70ec24349281e0a71c8a180152f0e1d611088908b730a336288f02ae7b77f1fddfab329054d5c804767c84b714e7b1f22592f6711beb12ab4d2ca6c66e11eaf96caca4cbec15691d88c09ed86d97bb34921f1d31857db749b442b316b429821f42912eb243cdb649648f1f02dbec3579e33dbfe39e61c65e629e8d5bf9701ea405c56bd0f7a24c8bf041573c18e0860d004e9d4505e70623447e95d686ed8da4f4e19d88454c7cc879e37d2ae0153ee13fc8ac4662fcc5fbee5d317d5c1431c9d44f1238e8a09c3af3e3cedb8acabdc0433ea75b57e4ca46f8013333ca9cec1d28ab5e16f5f7ec838c6bc9a252448d595faf83133e13f9648451ba2301d818e106c40bb49bd46e41a5bb8c6a742d49f15e71d3171c72ec28e00811f8aa0492c7f2e5f022b3ee3c07dfe52cdd905c95e768e0fa79884b9d41f77da598ba93db6293fd4a603a9fc7581ac6567d92e396c47802646e3f6e70fee94d19913643f8abad6f1c0557167fbc6cac895190c1149faa689e00b96502367880d01b128411dd56bb62d8e93ebb38a92e9f12fc70a20f73f230f391ecdfd824bfdaffa2cae6892ff29d207dd37706c3e2c2d2260cb82a429c50076e017b4d0351c08c57a94f26b7ab41f4f9d66b13fe27a133a8720a90f04f63eab0479dcdc71dc6e034d0d4d1f08d5cc50e7b4fbf6a05fade7f290e3007a20602bef46f4ca04e96cd9833910c5f5e1722231369ae315ae18e103c66da8d5a0950069a5fe814e7aaef2c0eb63fbfda3bc8c9db06720384027bc3b5bc596f279e693510fc7331da6129d32ddf7122ac516d2477faae9009548fb18c821834c430c57d27e311868c867ef889fd8f142212fb38d73acf96058c7f11523407f4619f35b1be8c7ad268722a5e34a06a7758d01025f3e1e972d2efd03686cce60671855480cea1fdaced74530446dcffb839ae01f25490aef087740d9cc0741bef3abd05da7697b102ef6dba97b717b93d21d6bce76be248dd04608f1b7e5bda5fbbbe4ef646b9ed4439be4476d2a29f97cd00fe64d442eb8d97a4209536c271c83b1ee2e46d06f2d9920a11dcb3f2f51a98603352ac9b6c181522f2388eba897533f52281bb0f0ca67759e929e61f9c7534451083c9407a2b0ab2ed5680fe19b346d0d3a6487f976fdbfa5393322926ed6e73916083cee5ec826123dc4ac0a982505eb1c9700bef7e2c7d2b640cc5018d6f614fdf51a84ee7005f944d3f10b03330885306748b41d7a37d488ce6bf5d1d560a236b9b0b8a7429845711255201f28cb3278dd24cb1bfea4f40cd8d384ee52e2a1bc6a03381c83b2dd03c08c2c1fec95519cb6296fabb03e6cf2d352879e1ad7658d2097bdeb22d221c4f6d36863c1b494287b44f0f281b7387c83f9f8785600598cc33137f042ae0cdcc92a964b01debfba00f5676af82c06136bf1817f4fd1dc1ed9cb9dde0e02fdd097f446871093b063bd06addbc96fce06b2365af9a308e8c8182a787e6bb5cf35a9aec41fee2945ea782d5567cdef2e8e0ac77feab45354c48cd7a63e1e084b22760a75d27561b7334ec3d581b410190b18ec466d914df4c78aa7e1413694abb8cd89e9918687693ab34526391bafb58e85ca38a458625a65cb63c9b22f2eab7a58980f8eea6e586432ec2111a9a3be6decb3e577ed5be4257d3b3b4e462b6982a302694604fb5f13740cb08744abbb8bcd7ce549ad20112cd296d57b09de56d2bf268b8262ed577a2c89bdeeb0872cd2bba91945633d0498082d56aed61395cabc61b160cdc3c3e1b8816f354236d641d00765479d8d8ab53a8b216c64c862a7fcee1cce2f8136882ff7a1cc79374664b708fe208cda001eb2d52b8cda90156333810a3ca9f43b91d93efdfbb40f28765e5b8d1999c40cddd38475433e20f86c6d30ab579adf2d99786412ac3edffb4697ee052e2a1b6fd0185dca8c4c42c8e4252aab73a95a4af1b83c1d66303a25b698a4a079b568fc903ffa21e55ae63a9d7b83302b55d774d13b32b5e341b424a6339fefe2374208345d323c61062e3413019c074019410b894ef559c2ebf06a962c765000e6aa436842a5c70629e8a1d62d9f6a1d5240de12a487235da762f87b5912889ff0befc8e4293611a11e576715aa34e159c64be428283c5d505c72075c6af30aef198f7a5ef063903dac7e966902b5fd93752d06c33f2883a55da34c05e4323b2f2736ebed400dd889dfdbd00808c39644dc29a0fd62bc9082e26b0a0ab3e1807ca0d1b6917ca280219bed1979a630eb92364637372253b6c61a774b40f2130871c5247ba392a18b2e12f1e1a08c0bd394805e466ca71078b0aff074698d5d6169eff8371a8259c373abc88657718b66d56c53b8cbe151e768c5d3a5c7e5e61551cb1576f48eaed8fd2c007358726f38183a0cb8e78ce7681f7b667ba5c4e90c6467147f8f4901439834c54e6f0f4dc96fc43c69107d6b05a427da4e026a606d1462ef0a385957d3dab37d9308583090f160248fca80465271395a047c65c09e5f1647972e1e10766c6fe3a2d643e7931640a1b9819c5cf7d0f3f52ea6cb226ca918bd1b751b872cad564a981288f8e3ed3b04e6bb0a362f31168d9153e4b2faeac6ea745e625a79a736ba7c51daf94d247c15ca414ff85be9e655aa47e9b7a3afb25064772fdc90663eb0bfe57efa1d4398e0d274ef0ecef63a4f1dc37c92c080cba38bb1e3902976931b3eaf5c2dbf183dcc5fe12a97b67addeff98cf3f7cd97878d013784fa9e953716ec098479221bae42f9227b31fd948119ecdc94669719849931461c67abd6a1c4f1fff1730fc98dd2d53102f33515acc74ee7558bb8705301eb88745cb525804ac8bb9279f8473a3fbf31d89de2c09b06eb89fca9e28803c5b00a7651abfa271962d3c815f4d413871b08be63d0426ff0282bcceeaceb70bb6e269bf63051d0c916e8516b3f0c1803d13d2174d1f06f627122e236ee3ac428a8eb518c6b30e515d562348aaac40ef71012d968fce83ae164812db0afb63692327ef0515d022b704c9650e603c9c4bf13687ba7f04b5be7b53be3242e32500e22ed07677f89e4567b61f284f40ae2a0b2032ec4c2521e2435c2a256187ec2c9e6a304c13868b239de03395eeddbf1ef30c949b9dc535212cce81faaf00136c2208c2b6da9bfb40cc92eb184fdc229ad9817f0b1ae0c9a216f5041e841a5d527f2fccbe657830bdb5077fe3b2a08f0591a4539f9c8463aa3c9579663148743dfa8bad4115453c19d3acd92b4ec630b36ad525b9e229e244960b70cce2fe887eeb109206850b80a4eac87035541014c69d3daa52e597213242b286c18764dd71d2c12d8ba64a2297d615198d514c0ced07d03d7bfe7d0c24f76310425e9b9d98f0b8ca2226090d2e9743e007d881d8e7cfb877cbb47ef169672357c728949b38586c56b12240b7dd4f535083c25e4af25e0e12d22b2a57a6f590146f9d28dcbffca53b2c74ff072be3961fdc9e717076106595fb4d949122f91b800f59d6a8d49eec1db9804a3211c7ccdfe7ee46c204f28ad35db01dcf836d32252f07afd9dfbc403f6abff07341686fa193521ccbb5cce79d36114dc79b88f42f4e448e720d188a1e37f167921603424b283981b4a183a93ff04d5ac397ccf05edb8b06d308824da085f73e2f04d70b3f85fc0513719d2625c75303ff384a49f5e1d20dd8a9693d0ed8e16f13d168fb53b8a758e9201131b36b2e2ea8bb4f93006e854119a7e3074ac30006c9cfe267a371cd889833243b150e2e093e86161e34716cc5bc1c1411114798f399423bbf4af58488d8d167315a016d438987971623475ec1d3c4481ad0e554671cf442943b581388187c6cd3d508edc399e1f7957a5e6221526cd74033a10476901ce55db737ef9e07c86cf6f97752f5100939457d3f0072be4b40e9f46328fdff3631852521c8b43267bc4792bd433c6222670b35babb434411f86f4f4f2c92db06a3f5ff5a08637cf287fc034428c3f132222593bf4364a768ecb6003ac1d778bbfd745f094f8ca983015d52a043cc6af1f68a2826eee09e5b86f3cf4b2c1f036fd4446ad9f36aab9cab5fe3fdc61b7ee0b73456c38d967e60572b9450abb8b7a930a19f36c40dd94587927d92d8c0be33a78f7dae35af02653578bc99a69f842b98cf193d176ce8ed94115aa86688937a0bd6f6fd8b281233446c942bd203bff53b8d337304fa10b2c6a8a26b1962be940137ed7e3c5c5912b1ea7981279d05bd3540220d9973a85e6a58b4a55bd13e4e5f385460df79a7b071a4e640458543264c500ea8067ce6e1cfe4592c3c1e038b69822202ca8285c833590d5ca4dea0e3736b217208d702e6676c5a3bdbe0ea3398147ed60055888e0f2151244ec2d62be13afe4b1f312c0ad20034ffb7fa011efc54aa95626ea9be9e5615016bfc47cfea3f516a8fcbdc0c658e902ed8c59451bf752d89a43745768855440bc8ceaf66b995fecfdfe99a6604c80e014a6fe1ede52b5c29b581894d9cec7fec6964800728a40e76a9bb18bed7cf621704dbccff68fc75d28138b6e4056670f029ccf0079f7465415064fab6a5abb4270d7b30a779cadc05587e41ce0ea2055c964453ad1946b12750ef6963513ada1b70690a564989348b379656d97a14a694f089b200bd3d029dd19e95879e08dd8e92d74e1f7baccae94448e12445325265462c6bd9a71d72ce4f07a4bece0bf52e44c5c18bc420f310247e81d797621fd6f3ee0216e66440b0c83751624519811edc8cf029ba72bb8a01dcc4994efb2444d1d0fff2a97649ee28f06283347492580de1c580123c7971b982bf98b21f8d80be430c60f4bdb5a4f38967067ff9497557a764451a2af6ab98b0fde2785ec82e21189fc308f959458ee5d9c21e0a27d1ceae69f6693739d296f9fc6967b18d11d79ad7ed35ed4485e4992b044d34296b73fdbf601bc2ffba94e65e30dc8dadf3337a0a598505f6123c92f06040680f6a47ec63600b83624b2b869908569272fe4736af94460ef15fa76617b85bb995a3e70a942959cf7a2e401a2df00152d0032e943f96e715f612c881787761a1b4084c496f2c94fac4f29c2af8ec224ee699ab69816f0e7b70c57f622a3c4b89c173f861d68a769feadadfe62829f71b5020a94736841c08cf943145c20324d7b0a5da0f748bec3296e5da43cf9946c8a10188952ad712e907c87dfdec28245bc281f0584de6b7367e49c3d5e756802bae9a9db0f276cd260df5d31da272b09bb8657d82cc1e1a966d1fe56265cc97ffcbc43306c1a814cf989fe60a59a5c8bad10fb6d54de697dd57312b3f220a2ec6682bc215908fe678ed8b6e047555cfd6cc8af724b91f0f6f9cbce6cf742a22017ffeeb0212c0eedbc529a22bc02ec518c90ac39c793846f1ad400091e54693a4ef8f97465a512c1ec516e22bc3b42393c03edd15e1faf7e5a908042d8e96bc48d7bd78162084e851a25f0defbdec3c4a16960e4b1ea4f35e388b1072fc78fa834446a381263a805bf87429d113bc75a661c842f7afea6d57cb12ef118c6c98457a47d92116295c1c358c11828ee19e05d5562f2e3679f5d2e0ab882004c69a860bd195773e410cf4f1d70a338f1aaf18946c69f027ca11df99ae83982af3fc72133c0683e351900866bd9c4e09cf2c6f63888fda9a9538caf478f84358d6c6f015888f9b9dc2014cb6a876f0f57fe235c3e1d2cbee4b12e664f361a00bdc89d3b024741a3b8f9345e5c39341e19976de8b29cd5277b111a2c41ed5e30fc4b2b724ba74e6dbf2b51b5323cbae40cef18e5f2b8543dd1af327536eaa351309056495696cf9e56da8c68f73fd453f0ffbf7f9f447d04096321680edb2c656e41578efb3c17003c582012027bb65d086584b4f833fb0bceb2ff038b29f3fd162e0d5ab42e7a76f6957760094c82dc0490f8e3b0e3b9ce8309e15434b87354fa2532bbeb6e92a64e11db8450aedb45d29c9f4e07dd906031be2f3671efbe655f23cc3a5b35c96ec467b71aa4078ed0d642d6aa29974aea586f01cb482c8e65cfbf72ca5f61359310b50104187063bb5c01213ecede886d41ccefa12712430ac1c33744c5b58aea4e8864dab9ddeb4764e01379f49ab6944a9e06f64ce015a0fd5345c8094d5a603970cffdc13355875b9001cb6dab03390316eb3ac0d24cfab5e1a625f3c81f84c6fac7616e07ca6d5f1a91094d9eeb3cb398aed72ee6e292bcbd544410f73f6298e50fc63b6e9a1d7ab8a4f4f5aacf5265ba694a44c52ee38031203100317e8232f6666668e31c61823bd2a2badb4d26659966559f64c2b5807b08824c08299f664783044eab5f058c0a81a018a69fc53eaf1d4fa792636428fc03c47b06a040cd659fb02c111609008fda7d4e3a9f55db1ab5872940c59619546242739c9494e72524a292547666666febee67565599665d9012c19d609115ac2d9d0aa45940c18a895394d5ca0cde6c4091595cef5026a518c1c0f79c8437c715f1cf7799794524a29bbbbbbdbddddddffffff7fce39e79cb08400eb640825515305a334935a21a95425b93a08ca05ac9af9990db54e9440fdc22ee655fa0bc43a30f8ae7e4161030579e8e5de7befbdd65a6b2d9330322c7b63a7494ed443a887f89f528fa7d6cfc743fdc22bff947a3cb57e5a24a594524a4e7292f3d8c5fb4fa9c753ebe753555555555586ca50190a85f9db33c5b702f5140a20d0577d242f3059e2e0fe883a6dcf94c1d28a8c039e068645044c6819590392c009986a7ed48026d042623e1e13254c3a25ad0155c0454d51910205c5896b401600808b4f8b134c60b1e27a4c005e7d2fba80a2072659569d2fdc52f98a794d753d85028932676c58557ee087578818e68ae9968c8916b7d556b42a46725769554c67e0d905553b6343ce6959f0d356c5bc5555d3c2602acbcad8c8544db53236f8c12a6a401700554f0725938206d4aa191bd69561c0c30f5b117ebabe5531939a56b5615d2741d007d410eb8340c45030d03f5643741f74a8931fa8ac5d414cc228173560d290cfb18ba71269c0b8ca4cf60bbd61cc9d8c8d87bd80712744a1f00305d191e5aa548492bcf00a0d756a096743495e28198e3146435ca2238a8686639186e34cc3b1a6e178d37057c38d341cc62276c1bd89769e6a3f242216921776c15b09c90bc90b89e48569882f1aba4234c495a5ba68e8a221e6127389b9c45c622e3173899d9d9d9d9d9d9d4bb1d211d311d3111dd1d1a82a7d607c3cd5d3d10bd5702511c68f4404b3178c21c9cb338530661a92a6b7452ec5b7b174119f4618371d411a4fe5e48582aa12c6b5a30a933a237801c89c1b60aaee070af2cc331bd05767c09319d0cf7825d60be45abc3c7b1556dd264f145a4fa8b27c443032d387ab25d2b5211651a6c1387dba6af270b4f42fefa11129cfb4ed8eb0d3f6c0605d215ac1828586c16a020d26585305144318ac27c41c2d628b160c5f8b16531357ace96fa37c9af036b472188fe38c0dce08c7711cc7bdee48d7751da7eb36b4e22be4de7b39f7caf6d9ddddddeeeeeefeffffff734ebe6a3ce604ebc37d5cb8c000c0721550008abc882f5e307c2f5e4ccdf70cead6d187c42ff7de7befb5d65a6bed683402c0fb16b5a8452dbae6df8ea2e4bfe91c47d9ff7343abe9f039cafee71b5acdf9de1572ef2db9f72fd93ea349a784634f96524a2965777777bbbbbbfbffffffcf39a78b4c8dc7bcb09c5ac1e2110b6117fec132300c1855d903d40ab3505f7a8e9a3cb03b7dd8c2e0d01d91eebdf7de6badb5d65a66b958fa62e17999fcf30dadee7cb71b8045a950d409110a6252b40a2865fdef1b5a39ff5fff36b472b8c9fe3fd26d3ada55ddecfc4fa7dfd06a5eea514fbd7e96f84bb6cfc82413267598543189991465fbac98999939c618638c524a29a5eceeee6ef7939f4effffffff5fc2d9d08711000c26512366011a011e8147402344502bffbcf450a39be7d6d18ba6699aa669f7de7befb5d65a6bedffffaf60b072de9caffdd0344deb984c2693c964aa4adeb66ddb1572efbdf7393738caf6afd15232260bd65a6bede428dbdfdddddd37177dd78cd168341a8d08607d0af04506d0055088cb0f8caa50066a65066c9899bea3efe4b135f46181014577447a29699aa6699ad6dd7befbd7706359ad7889d1202062b89b5d65a6b7f56dcdc944aa552a9a4fdd0344da330cbb247024b38cabe948c1772efbdf7fe3f47d9deddddddceb93697a9bae6659a73ce39e70d8c0a16a5f26210f1006c01b26084231855df11d4ca0d96a6b7dd11e9a5c49cd462d7755d77e3a993bf1a305833cfd9d0f7f9acb5d65a5b31804924128944d27e689aa67d0696600987a3ec28195e618d476217bbd8c52e76eeee1c655b6badb5524a29a5a45775d56ddbb66d7b1c112f0819b880aacf855a795b8ca7b734e461a9a24f06e36992d3344dd3346d632230282f10dd50761d60b0c660d9afe26ce8c358c122a2496e6215a51e4fad7e813eef7a97a51547a95132fa87a6699aa6f5d52fdddd3506a512ebc870942ea594524ad9cdd15a6badb5188b7dca6e5a7531c618631c3264c89014d25a6bad94524a29bbbbbbdbddddddbbaeebbaeede7befbd8d624929a594b2638c31c62839962953e3d59321d4ea646abc4a65bece0927cf3867c72a51c273e204656a98e4b16cadb5d60681a5572a954a8fa3dcf4cf1f9aa6691dede74726414ec29fb3a15dd7dd7befbdd74a69a595565a69a56d67dfd0aafbffffffa594524a19efbdf7ded883eeeeee767777f739e79c734a29a594b2bbbbbbe5ffffffcf39e79c534a29a594255e867ac81fa3c578ac13285052a8a052624a0ac397923235140529a62275e1bdf7dedb6edfb4d65a1b8368da9b2861f20e3b259c8dcfef947036fe7dc9869c8d9b2861d26180bbbb3f26a572ecba18dcdddd7dce39e79c1cc7711ca7699aa6691a26c5727777f738e79c73ceffffff9f7fc23a4149a1a2c6eec52e06f838caf6f953d3344dd350689aa66973ce39e7fcffff7f0ec59a73b2bbbbbba3b026f66a8a142f4860b0a6986015824f18ac2a44b85a881571c50a866fc58aa9a1ea831c5580c17a6dbca279c8bac70953d322c9713bfeffff5f2412894490394629fbffe1ab509192522da9515293575fecd7bce410ae429d38b1e6df0e857551ac69aba562fdbbacf72cac135ab8b04e880ca0a38e304211410541558ca25ac4f2e266ef641818d6c6431ca7a1e39bdf80390b06ab01fc851831460c862f468ca9c1d419d043bc82b93c0568d1ecac63f03899040cd602c85327051e98584f05d4210c56153a070641d284c16a00c983189649c6c686563c392b726525325c59991ac951285073524f9d522382c16a6284bd60b09e9045305831276e909a0ad6ec78a97f1cc7711cc7c57b7b005bf432367e9a744adeec389b6984e338ceb90df5d7baaeebbaaeaf1afe9814ac9f4ca248241289444a0283f50447d9ff7c43ab395530006784e3388e9b1b1aa549a784d31bdadd73ce39e7e42b5ef23af989627d0a21305855bca8484929c27a1595c8c315af8be1bbaea989f71b6694c30cda0083b5ced94feb38231cc7711cf79b8aa334e994703ab9699fdfdddddd6eadb5d6ce59e355e3032d152767e0c183078f969696961698816e5844081fb1a5bbbbdbdddd5d1ea1079013b00e202edcebee6e17acb7e8e3bd17ba91c821043e5a5a5a1eefe0d1c590821c3e6860055d0a5c8a80430ea8e38512ecb8810f88b860c40f6e00c245083c6010bbbb1b4710a803052e447409e00bdd7d440e99c4614329073086340004238a14c1d1830b36c81f2e3de0c183070f1e3c3c804312eceeeededddd5d61c41cbc0ee040448669c46ba8030c3ac3f13a32cd86c73c0752c8a187203aece0324311cd878b0dbdc3c58716287b0801c23d58000476f798e181a0861c6e68c1800f7ed0fd0440bcb4b4b4b4b4b4b46c000710b4f460019076efeeee6e7777f7969696225c800c61c70b76c0c2102d9f821943b3c7d5018e93128af0011a924002d4c00a4bf8000e3de03802088e198038628429063e320c88e0470896e023c34e32b4806009db0e9c9461ebc07fcb963a5a665857ea820b8e209163e076e02db89001191081851f2668410d4cd0c30fd2ddddbdbbbbbbc27096aa7394c0a50710207401102e3b74c05288bb7ba52cc09c525a99c3d12d7b6c40dcddbdb2801f7777f7eeee6eef6e8fd13d86dc49c0c3103af83003222c0d973c3027b9e810e31bf276c01d4839f88002c34311033d1902899323040107dd8e219c9c2888a2c00045e1839e48408e90034514aba7436bfd541613a348409680812a0c2328948d14e4440aa20325c844f19f2dcc3973c0610727e1700369fb010a0c281b102218c502e4dda76781f3653de2b314b8f17e01940983d5a278909941a100eb9c2f73777777b74e8678cdd470eab4cd3abbbbbbbb298c656534943e530e0c560eb4252c2fc40e8967a2def68a3cd22b615088a782b75128c09afd63d29c7352d7a75592a552a954aa6ebc1ba7d3e974eaf78eb4e22be4de7bef8d32c618638cffffffdbb66ddbb6614e86a46c70dbb66ddba28c157747baaeebba8ef32693c9c42693866e38be8931c618efbdf75e4b6d65d95a9b65599665198559843628891d638c31c6287dc391557777777bc7cccccc4386a43493482429a59452ce39e79c9399999955c418638cd1999999395a9a1a9957dff6d9bb43678f902b0296307463716009120183b5033b932470b008cfd4c012f5de7b9d0e0f18ac25ae090f2402354803fcff67528cddfe4c6f72648e6c9f264a9874a69c524a29a5fcffffcfb22ccbb22c833e2b8cbfecbaaeeb2cb595651bad8d31c618232c7129992ea864109a339a01020883190000c300104581404ed352d1f514000b28545c4270301a2e402e1088e2b0521062281400c010400820c418431422c22a007c2a940141c2666bcee60ce2855bfcc620f59cba1f5dccc6ee1a0ddd22bdf49c6a32cc64039aae64c7d55407125b2e718b93e8a29e41f70391d9585d2b2e466377ad86de265da95b96871d4b6aa3552ebc39b84f9a20419b069b15796f3e889b401fc6955ece49c803aa2e03193ed8121fd214d58b54cf9d1c98952a0b94ea5a2f9928029ac468d0bea776198a0d3d5e161cad3eb12a9b6e6c25aedcc5b4c1f2b6d95747c5d6526f56daabc27de4f4334c90b038849f0590055fc91677cb850fef2ea2411abe1b23d5b27dcec9b465fefea26d74f5ee6599beebb5e4543b65c6384c95db523bb119aaf0ac2c01f6834213f42a3afac7ff25a11aaa33119cf64188b322b0ef907bb00c256efbb1cdb4c826b8167898a3b57b905cc3cc132effe487ecc0955eb2c057bbc3a9080b15f144e8e6994ce50d0a18b95ec1974a0d3a7252798f02eb765599e26405f1a1d445e7024e41973b91d95c5d2b2e6673778d86da225da95cb6879d84a5e97053514a2bae4e20935d6dcb12d5964109fd20a90968c60d84041f4972196f7eb493691bb3f4b86ea5e62e9b62973cce64bcc92c895621fc57659069d011ef112fd10d1aec62515f78b205d508a986b245878ef930c84928e33783ab375f22ea37817da17c809f4d52ae635083d08a5def0898744decd18750ad4d298241593a3807c447ae7a4532d9ca308e6d1059d6c201cbb7a51d517e9383e548d64ee613224e6f653cb11db172a1eff499d674ce24a51b88339ce3d255bcb3a214372464ead89245fb6d895ba2675528f916799b59bda01d69aa3acdb58b9080d67971c028c913714bc50ea5bbbcc6bbf40de9dd49eaad7423f05a9764eb3ac06a4e0c375aeb9312a45a5e43d3e2aed57557504b881259c51812908d1aa82978bdb5ffe92651fd86cb39c24cd3c38be35282d082f7c4ccb90b29222aaaf4e59582311351f8748ddc5c8e0d305a213a37d768d5e5dcd8a3d5d4b6fc287141393cab5b43c5422e3ec9121375d3a3d0f328c171fbd1802bfa0141654ba7b11581ed0fcf81bc18e1a47541c3735174636d7a5228afa29ac7faae794573a293c68aadba9c1a3bb69a4a9be8a0e7a9d86cc62d6309cce1db472d1a1cd6c62487a9e436c22c70a4b39c912cc7700779420b954d301d5e49723cb098285b571f55b3f3d38c60daf2a27e7e6fd9fe2a1537f6cf4b074e1f94f39fdc4ed6a27024a288144fd3101c8ef87325331e07c3278b38f6c765ab65395f52ee7e754f47b3fa2d700d9df47d160805167811c34e89c616ac135b8b551f7c97ab997730caafc353095ec046a7b5c9a09562b848a173c807baaf1565e43d2482d9e1212d72cf47cee4b45810e58fcdee51b9e62777754e2ee47024079d56f72767754e5e52c134d1d13813a4851bf7e24c6447f161fcbaf6e69346d190af6cc4259b46740eba0276f8ca1ea12b013156d45edfa0de80ce9ff6f9624f106789cc86d52d6a0fc4c45c757840c1fc88abd57759281396449170920a87e33032b5798fc9c20f525fc42672d1f4b90bd5f0de052225636837d1dc91040ce48297371bb347086bb8d9f535f56d837e7c4fb5ce0adf839ab47fb8e829a14d63324442be1d49121f13e098533c2d5a84ea0c4076d4703c65bf466d357908dc171148f438d5467f6ab92905a3ca19ba0a21b4da19ab5b8c484376a156caadf578ba02b4a34e805b8fb4301f4bf0aef91fb4ca76e719bd26439f6fcfbe76ae4ed1da5c342bfa3db5af16564fb83cf6b0ef6e72f8e0cbc24f634b991e49f42c4d50a57f47be89af0685b906bfc895d3d1147d35ff6495119af3c6e37143e0d222caa05edb87fa72e1dbb07a99f69fddfb32e22c2d3fe829f4323dffcf6214a018be0dfe05e993821645aff63b227dc15f644fc21e54b7bf51a8188ad1b166f52121df4b057f4e64a15ee4de9187f125029db4fa946e4fcada0c5e9cd0ad9c2df81c6b746876a5036e7224993409ab870026504f5159618c647838be34cd71f771d88bccf27a893d10bd01edbbae590adf2fd12260f8dc68c9caf60c013928952a1a6054900e2d040433af1df31866b22eb555084d5cd59a07b41a6b1fb53bd68dff5529c4a88d38c79e9e468983ea4919e487de3ba7b4318d5c0c30202f4c1e99b40f8adb3f61f34b6d7af8347bf74a806eb1c5d93e7f654b800ab0930a6546734151ac1e82f819e18c9b54468aa99154c709c192f6f248a97d69924c5743a6467c9efe045256510a5c9cf22f8b6273c45ec3cbc7aa4650bfa444a6334aa3678c6a6c364f7bd20f4bfaa4109e787c31721d8bfd3dfde10281b105864804b118a7a8fc154bec210985e5b6a633b7a3277eafe4092aa98d252efb0b1cf2488bca55b0a8e058551acc8b6d56860f50fb880a5a8e1cfd17a0ece1d46ea250ce0bc4440234040738b9c4821618238ab41528c7ce3def98954c52c3bf2afb09e16e159e7030eb43390329da43b691bd6d822d835e4e2c88752176cd00bc12b6786b5d9e3c4b238f4757481676498313d4b8e1c0f71dc336f10526ab26b688308ed11d6e31d070378e49150aea23da1bc0693521771c16b89b6684ba98ffbebdab997e88313162301cbdaeb05e4ffd28b799b05e8aee38e94d6565e2fb48d4728647c39e6270c1c9d4370356e452d468665271206220f65a96ee141cf00137f5946fbc5432df57b9c0da4acce72b45ce322cbdeeb60f3f748c65a67660eae88c85d28309776e47b7a44162d600ae08dfc84f79d09957c0706f272ca66f8a5a57ada233f52fd40773a043078ecaa51faf26686cb2010efd4c74f3a8aa8789295a2d677934ec61a1ed01cb46840900b0b4563e0c3cafa24f845bea43605f0b82363cc26f953d273348a739ef284a33b977be2ae5f8e10681bb0071b06c60e3f5cfc3f015dc171744534bc013132dcd35c23870da770f3d2bdc21756de37c2688f19bcad6dca70ab0fd94d3d2a76d29bd9cd2296bebbd3672a898aace7a82be199713bc86494f50d548c8a6946f5f7e5dfc97127618b7b6e6c07508de472290afc480ba199fac127c5168061997281f5eacc48c079143fbfe2bfa338275c0db8e7b5f54a05454f1290d627af13ec29ba55a29d5d622eec11968de202f430eb933b4fb2d2e01bef8b0756d50b4fdad1130a6c146459fd54e951e879b86aa350dab0bc3d0c08cbbacca37068b55c330d5d41f7c273a6f7449f52617686f50f5f0ed993edf924f14c2a9333b6194ecdd043c901deac670dce334481bd0653a7badf29ace43a6d708419f9c81caad6c7c27918d564a44a20a41916f3a4ed4cc32130704a7b3de5885ff0f3d39312ff7253066c7aadec2b20dddfeb82f070f74371e751fd2eb74745787a8c23c40a0ce9dbd4233281db375d211a4663b020e884700d4724c5089312d7c8409de60d1863c9a8eacd8e8d4d40e5cb717180e392e5bb9f5195ab0a719a967ba44e8e2e4a6b17aa02c247d28ac048ebd4f6fced5fa4e5679422d556f89411ed0d97ab74795ebfa9b37e9c1cfe2438e7afbb0263c79779805e483ef98ea45556001c932ccc6bd76515a1341866360967c41914ce92b723759b3174021ff99d3a3d1560077d4a218be37a8b90eae90efda37276b7b0e410f38d6dbc66c96d08d5aa3febcae2de5d6d11b5666490738c5caa2e436536ef66956bce472e12467ddeb04e23dc9c4c99880cdc6a4b2824712403e667eea77e0793b2be42b09b01c02dc775bb328fa8f1688945c7e40dfce4a966aef26de000ddd044477827933b13d10ad5ce5242a64a1998e760dffed94ead38f8f2b45a9a9668bebaff8da0c112351643cfdf6bd53b5a6ea06f7d02927d9e5a0749205eda70d5a190da1240c644978d70a33729dfa8ea73a44acac9da149f3f3786e46344e58631b9d1f9d8c07bff339a4a30f29e06051b25b66e962db67600f39d43bfd0f144efd99cc0d31a491426aa8e932ede10b1c7e0ebb71d8cc378513de86a88c4c0a9ec9a2712840a8c9ac632f9dd17af8601457b1919350b640629074b36d07833014ac1a88fd4f9c662c40fab9f1afde57f5ae996064998f1c7af266758a5ea77494deacb349c7dbb242dc629c16141f2cc90d401f9d9ac976636e3d52c690f328c3a521186483be24aa487988fcde608c4f0221bd3f21600d46435f639467ec4d192575dccaae99096969ee81de65228bf9d60e177269f2c181571e9fdc2a48961c52fe2b1fe48d27e4832f012a1412cb88b1974c356515a9bce64278735c5bf415d76ac77bbaabd6ec93bf326b83f79d0e315fdd32e864b269630b7e9500bc91529d9941fb67397ecae798689849b02b6f90e2e1032f3412fc9d05d15b4bc2f1f75a2d84aeb417530449f77fea235fa396f7ba14449a3a2505abb0d2460f69b8cca1df0f23a00e407ce5f02d1c184c6c39db27daf068104e43949d6dad4adf3bde3cf2dab24d06cd994a265019966d091ce9dc350ef0045eba9b96e5150d83d6010e2a679a455334d55d0926853cc1bae6e58e98667b2f8020ae5f0f4aadca0f02a0c57f8914aa8744c078a9403508fbc787bc8bd9c918987e669f47103be231a0594ca1bc759285d6cbcbc40fa3fb752aad4ff2ed8bc7ee12152a42bd5840b997c068674cc463aa0c601658dd1f959ccd01f2fb8ebe2377aeef98bb66f9f87d99f68d3220e2d58e2086a59a5c3e2934628b80c10091bc6ca6e236cb9eea27e0dadb6a7d023308357c1904477706e169523075986fd3016f4bd18b9444b15a95e8bd49756cf1e4d27cfe0ab3397936281e1a48141a618685e8417fcd4dca01226c11057ed8661ac2b18a9ca78ff5d074ddaa21b9af8b79227ed75b2d6b38e0d90bc16299833000afbd52dc6b398f3c623a6ccf5766d4b91907fe629ba9b25556559a1fa6caa0a8a8b2aee0a96474692ae66250c585907c2a1686b05563296bfac76bf0c9e763965c28767538d009bb3f25574de6f18da96e4ac7b0202467b55eff01eeebbf5913ca9185bfe0044cadc1c87920990508967f66a417c86b2f447ea6ffb275877f040c5ac85a47213a50dc083393c2a40d52346c89b4c8bac5b42fa69c83dac6e76c14410556913f398ba852719129198ce4fef42e9111f1025ba17182a611735b2c131e1d5ab32ec461567899a1631f4e58754e09d2732b60b8b000e855a6e33823ebd0c72696440ded5b23027595d378ccb87457ba085c201504cf80c2d96ee87acf4c769843089d4341819e7c487a7d91131a14cc303e1696ad0b59f88f8d2dafb60843192a3eb690f49c1913f61629ac4954e4cc19fc84d2af1a8b26028bf0e0b517b471a61afa4b1068e3699f5652845593e37f6ff24824d2513183299063f6fed83d047e3ee8fc8e53dd98087fcefe7dff06891c3f31b5a5a675bff9b529991f32fa191381a1cee8841ea38cddb7455356c2cc92abb00dd933058b775ba1323da48be1e1cae4cd7583a22676c4d81913a329c8db0c81052fbba4410298eceb66c0e9f5a6e09b9dce83024aae8a2df5cdc203b95955a3c9a27f3f502e0b857896c648dd2dea3fec301e6d10f1b3dc8cc2423a1ba95a049f35e25173dbd3107c9b04b7c880ec692ae2caf7b3e3f67289b7380a1e89a0fdce98b9e9d639ec1e71927cb1c9ac7beffd5a0564d093231c58874beb5b7680779f1dedd2b0eedfc4f5571d3cd6a7029aefb24646c447bbdf40566dbe7c6ec15b68c0b3213dd98bdd0433d93cfbb4db8b2234654eff4378d6909fd9e76b44a3723fe712de1fdabe4f98e1f35c5cf688ad314d7f98ce7448a0ed30a3d8e14ca33a2e340152d6463edb0c7b02eae9d4412ee80c5b3cd7e5c9f0700042f8af8b80539de85b50fa7b203088d476755f7422cc964dd5af9926db8e030fdb7edde740dc15038f513b8c54f6c16517b0a531882203f8706368583b7572e94de874e1937721b6ab063aa3778c087913dff572d9972ea2b4414f23bdcf909c30ee726da16bbe40bf0f39c1ab36299b196b5e1680aa6a81a018178814ed0285ade7c917ec3c8a87fd7f7672ba0e6232955897858251b5183e71b6ecd5463701b7362223ccfbdabb16a6477eae5249ccc2e0e1ec95e2d373284f4d0268c9f5e4f9a4f6931ccf6fab458f9ab0e2b3b7327d40a80cba3b6146006c75037235876ba0c0e242cbd13ed1847012af2695fec41311949e5e5955913743842765910c0fc4b5768747bdd4a5b50e0de775d666150b5afd6cd09626ac6108d5bc6a4cbd066310581b12122c667a265fcc3e43cc4b7b795584ff8e9c66621a828c35fc38a1470024a2b9f57e73bd156ea98e726b01f23794dc578849cc6b478f92252a60125d44b4d58bb9454685c687b5795876fac2e666b114878d6bfb2a1db9f5f85cfc255a5042bf65e250b12f90799c38122deb8df4b75eae3e68a1f1c6a2fe698711da0b6366fb9144762a514d440e8cadae0b7c069691101581756955500215879281d2de0e7d13c4b110875d0f14a2c00567718aa2fc66065a7b69502d254cc31af59f8ae2098e16ee44b24a029c4b1ab801186206e1015447e0c9893cc105f96b2dcba8f04caf43c6b54ba5ebf099ed0a5da81c83dbf360d481a9b7089481924b3c487a9a3166a801eda9b6aa864a43c1eae0d9fddcd7cca09e0515c59b0e8589c4c7e739b93a292bdd229bb3f6c2a28267f6b697daf4fb5c5640abd16437eb9556ef94c50edc7b935bd62042934badc8a86cfae99deebc8f0bdc1f2d2481a24f2d73a5b1c4e50f412d8344d4bea1e58a60b90518ac880a0ac6d434b6d86fb014f8d31ba1241a46fd6bf81d11b0f93f6d23357341f1958775cf5835068de10617b95f7c67289161db4801c697fc87c7c32f79c215d6a4d494e0290df90c0a7327fec3dadc1008ca5de99a4b429ef2b7e6b98e9eefb8309484c37683d00fe5391a3fcd6c46e4dfcde43540563df5c95c6fc21fe11e14432674f9810f11989f3eeadc6e23e01cfb958e7094be2e7ac1550683ea22ed8d44fab50590f74cb73e74d6e7c961e167e5b782aa0e566162f98c29d434f389baaf3411b563f0a64bd31f3fa73f969ef90a3eb38385860207c49e8e90bcaa777e98c4c7e70a1a5356749b68b2f456a236ddc07ef21742c2f24f7cc20dafc3a40fb085b9837856f1fbcd8106bc4fe23fc0dab4e1c748f578f2523f63f93937d5a84947f878f89bd53018e6bfb17e098909fc051fd39fad2806fb8ead6f4f68e589e60b533900d25c5a450368c6c12b82b091ba3cd388df92b35f643cb9bf0a536e9b063086ef1b65d8566980fe3f945655b56abc885291be1092d2947659baf4a11457185c147bff686408a677de16817a55bc0867e1ca062a8041a5b8ef38787f947393ec1556253cfbb1edacb3302622e3ea27d12d1e97ae6b625f772a37a45621fbcc4af54d311c5740010abe1d948dacb25790c4e0eaa33f4847d6839945a8e256adc0004401bcec50a8ea35146aee0bb5485fb6d9e4c9b6359c663adba7ff1a8fd83bfe79e35944f823c6b0491118d28a275095201a05b7857ff93caf0cce16515a0902f1723d40d572b411e27e6e4ebcf6b0015d0f828724d00039c8601a1101dddf2aa08d25270cdee418d34ece220bcac12b0fbae169fb70b2bb99854814001c461a0ad78f2b415ae15bdf2ff201ad969621c632883d46edb2cb2b56390fd55df1f7fb7ffc62e30ffe261b4c53c759d223e13ea551a1049b4b152b0e1b8c6494d7c438664c84f8b2443e1c25680a48a2be6d803b23836c6f030224e2d0e8d6f60f54447ad0359f76aa05657b2f87339c07ce51044ed0553227206096e0b6a523b35519187086f678fbfb6b3ffa9405b4275c3b41f1ddb6e0975db89db8be5e9cbf076f87005f07dadb41b717afe1ed50a1d70dde0ecac3798244a0b932619796309b87b55856e09c6c67828e0d389931e9c85fc9ba5ac7cebd14d87253800fad0d6d0f068de171d56419e90807750ad8ba2f1665dc47d63a3d805ccd28d65526935dfd3ee555a06baf166afb6a658a693aeefe2e3d039d2866c8646e464f7acfa0e584c6247f42b1ffdecde4586f0e8c7693ac959b87b4db6ee9d406f5aee79cf3d6de30e9a10d8eb4913cd1da3c725ea91cfdcd4109e984029b3295ba82451eb48682a514259ea6101f7550b0771936da180254339ce75d27cf890da0f1eedc5fc00613e6a3ccf8ec3463b8dcc41df625151c0d9b3498db5386a37f6382a591ab4ed10790f8db20f6efeb7ce36bd30ef8af77dd8d07666ed3c7d2dc86daed4885373b6aeabe8e9076d5110e6e3ab27518b8de22b3f01c255881315c74d415864494621c1dd8ec4b1a58cda7d72b8991e7243db506a0c231fb34962720fb69442520fff89a44c31d8605e3cda0a2235c4c817f4abbc1939f1ce3bc95e43a2eb944d51d3e14e0c1564e2d6a37b6653ae5290b6d5215644ac6eb388b5e80038a4fe6059ab601f7be605b42ebd5dc2e43730abafc534e6320eb7f1ed09104ba40df1e6a3f614e9d242023d4fa6b8c66567ac4f1f0568781753b09d648333898e5c15602126e975fa82f846b026f7cb69ccd9beee6624a72ce43f0a54a74c6b8e92386dfcdb52e3ac58392f94d59195d7103f8893d1710c997aae826a802f8726a321c536962756d5ef1a09b97cb645e632393f10b431d3efce9ecafa65623bf0415b74eb4db5cf4be8fd066e17f124c1946c931b96249e10147362f4111c223039f46641acaa609e7a1a5193e1df21536950cae1f69ab1875a48aa8b3547c954345bddfa941927878e6c9ea8f695561e2a06083810f5a4d5133e64660d1099ec9914b216e2b232546280d2592f45f23d55280d26b4d8aed960a38a850ebf29b34958697e25ef941007f0cddf6493d617acc4fae3d17e7ac62290360416704c02ebf00d958cd201bd7aaa58c0a80f81c213300d0a344d0c01b2c01491a2c41ce81a965c405649104e159ba795fe4dfc8176a6868f8d270ad41e32ae9d3ef92d87ab3f42e69f3eb12f8720b1bbce2b8d188534a1f1fdcc1d162184fb6a0457af4196865865d6a96221dc8312a849a9680b41936784ee218c8551f48d0d501f8446da0925106525ac4d0a4369cb59edd17b746ca9ab165727aa44c08d2f3a222b5c033fef9908775b0f8c5ead555c52c91227acb02d6dbc327a6ae5b8b8945cbba262509c018f1ad32128f27ec2bdea50b8d59057db131a351005af322ef5630dec7feb35dd92b6230e1cf285e589650b065065d61785544a5032a483b656808358177f87fbefa0c97a909479ffdbcdb3f315483a812863eff1eb1e337cf961d5e9ea4158684cd872f482a4896463231aa61cc5cd988a4440bed357249e221ff6551f1173a5bc2c8b0360c3d9cb20fe48bad1f81b0b91dbc04ce1794e2a824cfec63d245b1a00906ced5d6a49801c300673716290687335f1c8bdb1b7db1b2f3094a3f13d1315da96ec265401f365951c34486c0e0420144ab84fa31489ae07ee5b192dec0ec0b908086b1859fe8d2514fea7953e394cf680aaedee9c5186afa29dcbbfe1b0529b57cfdcc2f20cf423fad32d100de6f7b0af408070e348931967e020b2f97557c07e4adc0bae2bb1b9e4bed523f7d8e8cad96db2793bf07af0a2e96efa667d21e86e8e59ff1d77cf7e862faf253814ca9274a1a3ef3a3f319e7689f1998f979e7a24fae829567674cec57d034112c69221272a52976a291866b557c5abf6166d61b1347fb4a12e5d16e1a42fdd36305b8ae92398df08db22066b2e67ad2359c9d4f8a34924cf0dc73610191202634f5b9048cefc33a158c834d6b84e21505a5bf7476abd011dfa745ff5c182d951084c26eca8df47227a2eebbdee5522feb3e0da1e45997f004c2837c18bc5e85cfa0cf014280869131b64d56ba1d12ad81c9820bfe841a2b3c05004f084485c3251832e09c13428d9044541a40ebe21c409c40cdf069c798c363eee0f09649fe6069fb2a539628fd23f005bc902a2fe12882cc1f7bce6a8a8fa48c94a19c280de9c02166c4ab0da7cb4b5458ab1a2ee0842d00bbb388434156787c6ada28c0982ca3834d3c11dce6190c057d476c0496f535f42037d80813125959177347524dcab00e07a2d3e8cbc08e73aa5fcbdce01bc2cf36b07aad95364e2be3ae9debd627e90a874868b7b68f643d81e7ef274dab7d6f8ca7e27bb8edb23df63720ec3194b2e63a1e739a4047f0275b9900e0ffc29d002ac200a2186b04004d01548d0156b1e99236ef0844d356bde15036541697870099488fc95960a8a43bd9300b581b9001622f8ab72855045ad515226da5c8e38042a73ca785658fb48c6baa452229395de82d2508c5a1849ebd93287f31892111077a463c70b23aecaa476a82c140b6865265011fb62d81fa2e985a32cb586a81fa06e2abc557171f062c629d9662103eebe6f15066e5403a06ed2ebfe6d1c9d65211e2c965abe2e327bf5c853228396425a0a1846f265d7d957d098166bcef0f8deb01419206b01d3dd525abbad6fe91c99012094319501b572b5a791fa0e6e91ea83978080eaed960dc801429a0418d557370c4cab56abb2eb5c8edec3832a6c04a04fe9e5e7ac947dc60130629b070efd7500229bd63d3fee96ee6a310a1947fc4ad5d986d2bd8f8b9bdf1c344e800806d0dcb3a42640b338b9e7eb247b245936d2ff201952d4bdb2b00f03dcaef873c2429307d9afc060092341d4e0500a62ced4fdf692c818783766d1ed07ff0ec0e5100c3a539c3b245c3f97c111b67c9dc612c2ba33b97f186c0cbf36777dff7a29b0be2fbd536e87358a5e6d19cda0e922b3df8513f33ab07cc32d7ce36e75a9120fcbd07a3e648871584de1848cb90d0253183f099035704bf828f2ed3f8de91917126e70cd17e70b51a294ea43585cafd264f6b91c0554d336d291ffa721e5fdb1e74eafb2f0b5f65920545fbb140ea2e1644188605a1c3131f0d5991eb78c32c5dd771bd13848ecc9eebaadfd6e0b86c18a547ec5def8d1d886f501d8b52df9d3eb600bf1712b2f9fec67764df01ee64c9269470055d2774810786d54e4ed1673d5889d6cff337905bed16bf71b41a0a4179437ef894f150f8567856136fef9bf60c4ea2eae474fe3d9c9f30b6eda4cf33c3f5cee3b35389920cc85eb64dbb5805e7b92964d4c075ad689f51b92e5d04e7f58fcddeece2908b3332f20e51d9150edca38f57326615d7ade834df7862e2bba38b63f6b1bda07c75b3c9d09edc2e9789d35825bfe01b612d6e231ab9661a0e770bf5db84d6de420071753a9fb32e1aef4224ed5963e2ec72655d76a8eb62414e86f86f36d3693f863dc9f63befa693a71be21b489924c5b59c38f7d629e91ba9a9bf2e2a79f2181f5d9f2f0b83b7301830046587ac741fc954e1c0b9c68d266c81bae3a835f78baef27d7b9215e71dd4630505e01fb3c787318dcd01dda7b046a7b540f7cd428fcd2c8952b4afcc6a5d94b47d63f6f67e505925ab5522e4e961557285c91386324aa9c9d30c3cc425cf2fcef335edc14cc5116041bd27e8744530d337be95dee3729e69ad33b8d775dc39d41a160066c9b9d775d67769ee16a65a6a324d73d3d4c72a5dd8d4f3e117c0e942a5ef03429247aab43a3da64ac48a194e71058450d854c58440c4e282904199360a0839340d111bc7f65a715ada940beed2d3ec05c705140ef88eb87acbe2d3e78e6db11269af4b01910c3cb2f3e060f46409f825faa8c0b8868d42fc1e8050bce59732e027ce5b673b7bc72e6ffc1adaa04d485ff6e5983f2e28fb0d2241452061fd578391699d170387325d0e7c9abf1fd573c09199eba451ea34ebf1a51b4582280a639232f39c10011034db107e6b888b4852dce2c57ad20105354b36de3726ef83cb846d8ff1a30dc8b7b249722363f0f69b3d1d27e9ab42765824bba1941527cb328cca150d6258cdc56bf89a38940346373d41d5d239e8a558709ed33b7e2c1a6b5990345620ef62336eab38eb1f0c08d6ebd0d8786cb3ae776dce07ace71378d8d92564625a7f3fa325276dba33c8726c4ee4424d1f8deca767ccee31e04c774a1e07953c2d6903767999b7fb5aec08f1425eefa5deecb422ed04ae262a01a80b5d9fd2eb3cc5a9336ab699b0fee759565591dc07629a3f36ca9c7023e5051c198fe4087e878e98d7ed48d9e6ece06190af1b8c904599258976876eadc31108e2727533d381284c1da266f3681e0f684a0491254c001df1496e5ac79ed929c27525e86cf374d3501540018063c75dd6e1373a13c47a6bd708b21cd52126b3003217d64fabb9ea8b5a5fd5b704251cbdafa81cc8b9cf2ef0312d028513d745acfad900d9e991bd5749de2e061ceae51a440eb45fb078dead83a3ccf6a1134cf23a1548327c35dd15fb8ed06253194e2bc707c07473c1c182cc8ee03d6e88c59045c8ea6830642b5cce796124f057b2a5323071bed4d2b183f4d421ab46a2a79aac81a9476bd429ae51957a8d1a9d11850a2b5fbc06d6a9474d8458f09f8f6a1b9a0b060ab461aafb780b721e1a57c6e8f9850605dde00b9b219d1597fea213104e81e356a04d2c58695ef81048e0d6282cbb3c287a3d991dfb43b9916ae89e2e140fbeb022301b52f9a7706bcd7082143c54d28a604aaa432e5d790aaabb9c46fdf0bf4f61aec7205b7613c0f5a18c98662939178250c916e6f23769cf540e77eef413609d7a349e84a3ee4864c49abf42922530749953bb05263e8b6e02535938812d9b2c068992553bcfac2a1dd381a5960e5363566d1015667c6a2da21ce977e3611b14d40d6304f550e58da9285a21d0d299fe6d7760203fe50b948153a32487eb254177902fab564687cf1fd9f21414c87cabac12783e617d7ef9cce935c58469425cb2ff06d67b4f37254949873b1c8f92233ee33c0513ae8c6fe045eb8819614d38b341d98129077cc139a948d08c046b49debb35654479dd5115c92c7941a0156d1779d1f415d17fbce192454572bc03af326cc0f83bbfd90276a31eb6fc0459e081ebdb2b40579bea7ca295d66d77188dc216e93f593961d3760f0b9655dd8405d36249165894b544d86f22052d49f49ca2e80f70e98c336ce5de89bbdcd6804f26074666852e2e4255532e812973fd5d18d06ed49bb242e5f42d2a49cfd6a4e6f658e2667628a33892faa19a052e8394d8320dfba2fadbaa24680d6fb1f455cfd23a581708cb5bcf3b1aadd8add7a7ed10e6255eedbdbc38a2108c10e6d3021b49edd21acde1dab0c1b3d3299296b86a613267466024c929371b5481112c6303e48c6cbcf182f6aff10ba377d11ab5a6c7b67d3e04ab01aaa06d3b775d43397db04e9d6a5174542d0ca181d86b5bf5d7391c540d2314f550ed8ca9684a23b0214efeed4b622ef76ca3e89ea0a1dc3ddca1f08095851661a3038710956ae20a523140689eba285ef55693f3f603901c399de7cd047c0f9e5e1129703177a7a380bb674a0408765c7601029436b68707d072e9da25147d2cd9611c812b9537931dc1b09d01252f2afe2b218372c10ea5c609dee5315bb822a1740701c982011a0e9f6177ff5227b587d93be2a1c590b88f283dcbec4ece1a05ab4be119b2f4038d0d07e5f8e3efb6c9b8bb60f6a98f83ad6ff12c4295777d6a4d0503b3fdcbc8d4957918c410384a20805495c82347f1422318c78461ab0ab39bc172f1540d42b9058222a715326db59889b21dc23f7021c6911af2854725d36d5f57e0f0dae4022d7c7ef50f096a846c8b49ccd4dba5d1c53d12c4b8d8626fffc16f8e998e4107a646c710b372c27e760c31f9ca4d565e8f7b0393db5d68f4e0a2b446bf1d9007e523b7b95a0ca22b0566ff507e96647245ffcc400337b3272d7b8cc3710016115819238461e8a4f645692a758f06b5a2982de975de792a5d5f0d24948e95def79228c3cc3806c6fe621f31e4049e6ddf0ec8d1eb57e437ab139f0afab73c92f2eace746eb0d3a2cfe86ba6e8fa991c7888065f71ba10db1fa93f28982b45ea9c8254e04e274b6899eac941469051bb015ef8fe947e616343a7ba320610b42564449fe3685a3b5a233a6d4ae3a8bb2a5cbed7cbceb7aa831094c0f2d610e3c1ff4fd6f262181fb93df75b623c752d3d988aeebaf7d34365011ad2070595ef3d285f6d29f96597e8fe92bc211bbeb72b38c9a3a6611d7322ddcc1a5dcca0f3a96841e8335a1775900e507154197c5c379e97208aef11a42a18775864418b5e85b0f5bb902dc4d2e0549123d97acc2ef250f7688f69e500d55b0f865c42f5a25c3f6a7c27e5b07e074a6cc8a1088910b8459a5ad81ff461f2677a08c9d469a1912e83d99c1f2e118feb9e6fcc8a87ee9bf0feb21a9694ea7f4a904a9abe569d9250901b3dfbad14fbafb0ff002e026b99de526afaad71037cd0cc125b57785d3a053a4643bbcbde9d8ce68703858961aaa14d00286d42e140149f5c76220a275a564b14ce4768260a01b02ded95c8a2a09f52addd17cd416a2016afd18c8daa25e20caf2a3da31c79d534fcfcad1538e3e3175f304a28abcb651cc7f484eb3b0f9515eda15cfdc68de34eeb58f1909d2ac1bdb107b68237ac128e6b1c17a7a4cbd53488cce15071016273fcf30ecd4b5a4b37257ec9d5380e4e64deb06ffd32b901a580ee9ae68a14bb1778d5f9e1f82e1e8a98157afc24d7394610545aff0c91ddffde4b60401e871c4df115f137a86010c22093d8429f34322ced579f8e30ab8ad70987a4b541760233c65c4ceaec1506f2588a44297ef152efbdb17c1f6c89eefa9bbea10531ccb3d08fdf6be1f2cb2dbea184ec4eafdfbe36508218e8186e4bb7c67b057a6c21122709e8523781451ef2ced8e191139340159501db527549c5ca74709b5ba5c052ac6ed8ae15f1e8bccf561f87919a131441079bb16ef4b1408efb556054032dbdfacbfec76cfc901d6213d9829b0660d5065b870fc3450d986fd8dfd18b864f60d6c13988c356a9053106cc2a70fefc5cdeeb22e22aa5d4420f64e775330f444207a064e3fae1860a7a344bd67c9b452f694ad2a86e3c1421b0e02042ce17f3b935b95ec4c3f1807fd6a6099b36c6421cc27d78439d94b685a4b9045244b728d1531b841de06b32e95e1a0bbd44998a3407a3a753c02d82d92b3f6b87dc9622009a4eb78417c51a32d5f1b6c03ef427ac3aacd489bdc9b5186360f1a0979658d03a822cba0d202d2a9b8a95f7e81f2bc49d39d8398eb188a13140d180c18bf265ea6047d624362a769d112b551743ca4945af063f77558a80e0137650c3f4c1cb6865c61b08c400f97eb167bdfe167fd367505b9dbfdbcdec50b2867b4fe0ceca5c88220d3598f5d3beba019312e4e5c4cd9607ca70dc50b2a2b989df3d1643de971a50b9ef68d25f91bd3bf6385cf1ac2a590b422836c29b9b8df56ad09ef40897be577387dbba272eba799e571d36d6851588c6d9217439a0aad37b8a00a100535c9d1b568ce5e992d6d61cf7de06b11bad0ce95a88aee353ece5f9b9ed57b6b83a11bfbd2718e3ca577aac57b3201502aa72ce229d66de17d62bd7831a4b53f5062e1eb2dfdbd4b3553eba61bdea598e956faec13addbe5bf5db89d885379343a78346fffee980ebaf4401f93608bdd7b938a3af24c854bf03ad56d77443bc74e8d817a2298b478dbea1ec8bdec7231a5058e5b451faa952ae650d092aff3a298565326125188e2fa62aac7915ae713f26659c22ec52a80a4a4bc5ba558a997ac64f87d8d010fdc45fa390c682ae731e552806cbcae05cf49d1fa4da2da3c28ec23625fbb04df1bfd27d887f0cbb3d3ebf6ff83b18535c4a41c3c771dfb4058709917f7738482c7989bcff08b6fafff6d3ece3bdb544113cd715f56aebadbb80155980e91d8f39e26d70c855f6178c384fe4042bcef07ab00f4f5561ba0e64ed810d8d4aa74dae60c7b26ac163938288d54c9a586b7f14eb9e7ab1064065acb376de013e48cedc2c098babf7664b71209f50caaa38c1a2b5f9188edfdcc13181b61463d35e9505024cac018af5943253901a911b32baeee0aed2b401110502110001fa6707052bf9b120438daec3424e695ea7260082e8b7c8681ca759000000008009000f7a5774530d388d9e03926822a13225b08f94de1262b9b2376dda29a594023903070302031cd7751ed7791ee71ecf877b3e9fdebf0fec1f08824061180a8d909088624989893d8d909078b67ab19225b5d71975df53756194ea43e86a258db7fa5bbd256dd2b7c05a043a1cfb36a461eb48d3479a9e6dcd69681e16f2b1d7469abe77e7b9d75e253a3ce49e2cec5bfc6a00bb304acaf6f8d65f998b31ab05d7642fdf5e584571ce5ab4b6b5b6cdbdf1968d23bb8deb5a3ceef9e4cf075ffbf1b827e569f9f40e6610c4d7829ffeb13e90b780203204878076bef5612c0c8db87c4b32e4cadc9820ac964dcc3d6345ee8d9b2a724d1c4552568d90d6eba6666553d6c5be58d39eb605eb72f1ebf21a59d5f996b7d85feb0c11679c694d6b7be3b8ceebb8e7e3f9f4cf07824050080a8d843c92111291a4c4a4c41b453164f096933822802479cbf65432066f3989788db09223de62bf0ccfff4c92f85a727b46dbe36fcdab83f1fd061cec1147e754619c30850b37ddebf1c58ab5b31ac2b55a620585062bd847f914274ca0e84bf42a7aaad36491c1c99f7001c28c15293db38507194dc941a6e18003132a3acde9a27f45696234cd861d1ae08d476aefbd9de8332d0ccc2cf6f066e68898ed87397b9ee67db2287a8fcaf724006d6ffb5b602d8ea2ab17acc17e36f7874f1324d3e0601a1d94268a2c345837cae81d3ceebd18cfb4f2bda21b65b8d90a3bb3852ebfb871907939e79c653426cd089aa6ed3dc342676c2069ce2c4737c6f0cda2445b0bb7f7a9273142e2f7d91bfab7f67b3dfc41216bb5d65a5fbb4ffdd40c48576f0f558f1b3c76f20673efc5b847e660c8b24c6bdbda7bef8deb91f2d3470ba2577a6c501f3e64cfeafacab3ea03c6a38bef03878f1b271fcfe3f1783e1f74c645fcfce8c613e5f15a8207122ea474316759db5edb58f0483df6680f98af695dd44cace81c0ca3aa47900d7abca4e8deafa88f12a67b7e457daca2e8ddafa88f9bb183befd8afa889dfcc9f72b3af382cee0f8289f929a3c81f258028915780819c2061d9686859b695a0c2e9c578e1c3972e4c8912347a65b5805ad63c0612184c10a22e85083143af4bda1f585f148b9a069adb50e0104ad7390208207115e30c22583020b1787e9821c74f862e68622a898a1062334126d354dd3341a8608b2b5d69aa6699aa643870e4d878e1f2018024120187aeb47225f08f491211008040281402010044110044321b2f320100441100443a4e74120088220088648ee412008822008822008822018223f1e04822008826088ec1e04822008826048029120e923b98fda60421226b0f057d4860cc0d062ccc00452a48b14c61380a8807f4581bcfc915f512037588c3963ce9833e68c3963ce9833e68c3963ce9833e60831bec6d7f8ca17e74cef2ab6a673ce59c619678c33ce37639c71b638678cebd6481871469c1167c41971469c1167c41971469c1107069389c52a6bc4d91ebdda58854d0c834f9915eb3ccff33ccf0852d213ccbf0ae81eabc61bab9de7799ee719410118a563f194e23ad302ae3e65562cb4659aa6699ae6799ee7799e11a4694d2f8cf93a71669aa6699ae6799ee7799e3073c5425b2efb324dd3344dd3beeccbbeeceb65654cd3344dd38cb5cc144edd56abd56ab55a95755bbb77d19f52c69b8edad702b0d3d5c8d7dfd32925e53a80f7eebd056791e87a31d7b07546d6804bcf00ff7b5bb4b189beb9e5357e0d52cb567716db04f9dfeaf1b20c7fa2c89fe4ee4424662246c15edf79db70a581f929932ccc8ade221731fb7c3ddb2d4a9df143f337017db54be69dabc80704994d8978f49bef3da5644f70a3125dd5b21835a2a334f3c35c73bca2a3306aa2da1e5dbdfa5cefbd167baee75ef65e2b2a052a8ffe283fc8216f0002bffef170afe3b6ade9ac8f64c4108d262522c9482804815fff78b8d771dbd67496b512d01d5ac04d6c9f339d6da99fb71ed01f3efcdc43f407cc4ff11361dfd97f36c6f681aeabf57ec6237af6a9b5faf1888eda9b7bea3de5c0aef186eec22b2fec7186f938937089573a58aa4b3f8e79e5777dd42ecf6a80b571593452e7c228d88b30e8282f557e54f65257e5faabe2e1588e698fd44b5c44575fbc01fc827b60995ab1396427765ff6e29cb34c6b6d813aa3fa4c6b4ddb7bd3f6de368eeb368eeb3acfe39de771eef17caaf7c43ebdd6fbaa33aabf3141582d9b2b73cf22f7c64dc58aa435425aac9ad70dab66655dec8b356d59abbf382f60edc538e72cd339d35ad3f6deb4bd6d01214c94ea9c84ea2a518a84f22a514a5c61d38957b26af72e8ade9f4e1b29ae30ca584347955eafd2abf42abd4aafd2abf4fa9b1fb9f00a76edde45d1fbd3893472895218c56e5ffbfa67d954833f67b1c9c4fa9d47995094a9d57994c9c6749a5636ef5f7a39d03188a02ccb321c1579c1c3bc46f6b2aa33adafc57a7bb617a526c8bc013b728d961831e1473737fe4d397923970749a83d72994ed3d969e4f6b5af7f96539ec5e351a69adf3dca636d82a11a10faeb4d31d80340fefa027045a09bce0450269b6f92319dffda6f8ab92aa0df7bff90dc382b80f520594acd0dd34f315da5acd56bc37a2afaf2549e5ba6af4496474fe845fff55975ef0bbbaeebb35801ace741d2ed629c7396e99c69ad697b6fdade368eeb3a8feb3c8f738fe7c33d9f4fefdf07f60f0441a0300c8546484844b1a4c424e46d72c4939078fb6493257bd71944faf62a8cb2f7de5e5c89b6df18c01a0965313a12e9d72b80452a8c72bd025714a554ff7a71550d48d1c02ca657b640cbae99deb0f32b6ac3cbb755fc8ad684f03b18d057ff7598d368401c8988246e55d1519c06c3c1aa019fb79e23520d90e1ade7a8b0079078eb399dab02f2d677255e71d9312af1d67729bcb22386d760b38ca8ae4a0847675e9510af884c46dfb3e8ad1749fb91216c17d18460dfd56eeb3a7c6dd76d1eed35dcaa33ac1fa9e8a8ad3fdec333ef929cefb477c9cd779ecdf33bcdfbc8ed8b482ce4a258ef8d23b2a40391f7632157658f3874d4bef7de6bebd53c20d2476a5f743f0f025dd0fd48fdc9ec9790a4174a5e446e10f991f99bf4d46629f9919ca0d619125450fed17725d24524edf8fce7419e44fa3cc72ba74122ed1f8d48e23d5def23f13721779022d26587277d47facf7b4ffa8e2f503fd9bdfd1f8834225f10bd0c3206e9eb8ceb45e4c628d78f26a4129144428e902e3b3e8f8116461861b08cf8ee23c5b22c7f59967f976519facf8742a1f784a19094923ddf47da0f22b5cf47223faf00fe48fb3b09fbd67feecbb32b5ba22d1c9b206f3beaf4fa2b8c0e711e1623916ebdbd59ccd925bfcf063841307ffb4edb5b7bdadedbc6719db7715cd7791eef3c8f73cf59611565793c7d9527df0abde78549af2a85a12bd7caca58185bc6ecc539dba44fdfbefa4da2bcb9c9ed8b3509685fff2c8b361ffffbc51f22107b00f6d78b2b7125de7c9125d65c152d63cdebb8ed037922d5bf362a4bb813a638e321335486523ca40add0863e2eaeb21527de667f3713484853aa14e4824dcf9a1ce55017d4824a422d409dd08d35087a3a0c8e2e88867a3b284b01016c2b658ec8bf96070a63ff493f956fa637d35df19c2f810bec3517d7e2fdfcb67c217f3bf97ab02facf84ef84efe5abf960be17ad416298e6cfd45a6b8df5799e9ff9999ff9999ff9999f79f90d6fe18cc7f88bc378ca75b8eb33391c5c8ce9e436dc8603c16f3eb7b92aa0e740f020b80d47b90e6f719b4f6badb5e90c3f188ef221fcc553aec35bdc869b78dc4665e1285e29bd4e1cc526ce518e7294a31ce5e8e56e7025ce52eee4549c997230dc0b97e2a80ea26fd26d67dbd9bae06efc6de7aa807eeb62f362dbe15eb872db49d3d016e370702a0e867be1ca6d678b6db1344dd3344d451e6ffd6ba3b2984ed3b9c54e5b2c4dd3344d71aaf516db625b6c8b6db12db6c5ee6ab55aad748d96c159a95d9aa5b58d5e6db1d2ce098eac3c758c8ed130e89aaf350c3a061da36db48c8e31adb272842bd3344dd334d5a70ea259baa56db48c8ed1a73ec5ac9451bdc66d54163d7285b01096a6699aa6699aa6699aea13af64abd5e9d427ce1ad6a73ef5a94f7dea539f9784968a9460383b51956227e549eac4a594ead314c47493555b6948694829a754e497865c15d097724a5094869cb89460a5212357568d44ba3ef599a6699aa6e9165bad56ab55080bb984ca902a74234c439d10c6d132a5965ea5520c9fa44e5c4ab0d290d2eb33f7eedd749a829858a696c9c624638a31c1f08a6519b9464546a92f473b9b448d5ea39b7bba2397b8c22b9665efde45d17bef55167dea33dd625ada4571648b6d3112d73ec399a37ab54b48a8de45ef39cad1acb4f833b310d6bb287a7f3a9521ec3331cafd4c11d7386f5208cba5175ec9e8eda2e8fde914c24aaf951aa834d255a6ca080200028a025318000084c2500e456918524a996b0f14800a3d86486870402c980943831888720c46314408008018400801c6989a19332400f560764d08da75bccf2dbc04ba6d7894636ed6a233fd9790129a1ed154f3045c7246f1780e5faa4efdf615bdea85ed1215040aa1d0f9cccbf3ccc71a09499f5ecf433fda4899b1fd8092d69fd17c34a85727e92360b8ba7a23fe1a7c565a0be00ed34e0ac616f5a933fc75425d4b3ac528d26d53bdde2462469b1ec42f9dce1b609ef8271e1a690678959b279a590b6792e8743679b4dc229fa659c73ae498534df07b0419647c5e91b6e00ad3beb273a7b8d8c6a90399c1630c70f794e9f18b12a174a060e3e156718ba38ff7a33e189a017e17425fdf9eff62ffa6830699092b92682a19762dc90e5b5473062361c4d22b517b10cf273f3e140cfe43077672201e7172b11b5f1747de48d3c89058793fbb20c477560957e3d371534e80eab94700d4ecc136fb70087dfc88a29fa8433c084e5db631a3d0c3caff8042d5c41e9baf6cbc4d672ec2aa09a9d8d340e66f9a16aa2a039aa6f36bba7e04263a09af3e6bfffb38edf83682f416a24d7fc0f6174beb719587f3396954f5617135a3dd23dde1e3a14142782ec24a05be08b557b1c42db10959bb81990d658a31de32460649c8d1b12648f94cfc4296b6c282f6f9405e1ced47d1e1ef7d0777acc3dee4d7b91d7302941841135281aa06d013af2143a6a3d7dc94135931f70a8b427d10b5eda9052543fdc6447869de024b3c1349b3a5cc4839914fa0f252dae9b2b423ddcaeda7e666f5d26bf03b6ed0ac13f9f6685d79b3f70413f9165ff59d8636e454d2289cd5797ef3377dedb7d12d2096a469c9f6a1891371fff9d8f0cd4d5051c36743ca0e68ec260f6cd5fc4e47aad41cbb5cf99a9931c6a6ef2921d89d574ba3e5f7f3c4cd48599cda00f116749c899001670c13202672e3011b4e81409f3f8c4940651a3ef55d903f8a4a1876e48ff84a5319364a944e3b5ad8f01e44d56d473416421caadf768c8a104fc40cb0e37a0637fb64da4af13ab0a7613426daf896b16bc7792e794a454d045afab8712c11765cb681f10d981099d83e461edab18d112748622e0e570ef6c046f2ee405429b54ce30481df55f1efc58e9b5f327c6769ea00992ccdb1e28c1d6bae17759c43d4d494536b1301b6e0b002ebee91a40b335c61adbf2b32e85622836500ab65f0882ea84ce4c392e9db100c25b41f41df48ef612346c463b48e56cb93b16fc163b438ac0dd5f2ad69651f2b6490caef2127b349e3cf769934ad0d35a7a0b8c2a69168f68cd7595fdff688dd4552b67002edbf4b5d19f3c10adde6eef4f035be9c9db889e61271841a58da0abbc429e8db90030c6240218cd12abca318be5d3a2420202eec8e04fb4041bd09b52c7800996fc9dbc9375f223300580e0d877561d92b73cef8e7e0e72de9ecfcaec46f9cb14da2cd44ccaa6afb67790daa24a10106af68469c4cb934e655b20fd398f5954680e7c782308e2781ad45fb359928e3f5131cf66816da7356b50540c2d2de7aa947fee102ed8304fe3829a7904d15e8e729da4f5a4a34c9df1e08b4dec895f6622e4848612f7a9984dc48ac17b447b629f7866b4132897c06cfd3be05122642c25406b61cf6c006f4dd4056326a9b061ad826e8261fb0f0de165116d50ccffdb3a967339558982c6446624b7b1a0955501396b8b955a8bb2121277d5179787514c6d6128ffc4787ec07cf5eb3114a0493041a2b7edb97000955cad9d52c3baf03e97dabafa6767a5e7fec064569fb4f1f998b57f61e63fb6fe2abba6be8858e4a32df0c479930cc1af8a2a337198ea5a8a57cb5fdfff7fb33087d3091f8b0b12100522b1c97dbda8afeb84059d32967d8953917364371c61030d2dd3d83191b406b573e85f90ab30690997a47cac2b5c786864b8746a5d94040561dd58ee1af3303495b03e7d60df4ca1c14022516442de09959e201185768f4b952bcda53b10309b94550729945b96f6b990289b90b383e802e9d9814f8555440695b61a4b0f8b2d0a234c9452b9cd090baf0ec7b8607525c6c612edcba89400daaa70be7de3da24ea068102c840249c91074512d3b1e469eafa54d88ab038050d0bacdaba4cfaf1586015a6547b1a5e2c9a6a16d59303dfcc7853d0cd90fc88055455e8a5997045ab903f466ac22892851da87d32272760f5375c209a6392a1609d11ca7202950f33e4c3e076bdc9151eb14ffdac3e8c959256bdcf730ba6856538d0b1fc6af10351e010291ca184de3d10f235c3256c0ff764000e88e5f0f63f6228454f444aed5c8158792f030da36c8dd70284d22d6cfb0a387690787133e3137842f8731b091257730a57478a7f1ad98cce808095eae0c1fa7f5cf8911626da280cf609987a925809d9d6e1d91b59c867696e590faa237b3181ace682a681c8e182d6a36c2d025226b25d3376922e65dd00452f1c25a9dc23d4382a7e8e506e9fca2fb6e04c11193d0237039c9de6322e632f1b5de1a7aa3a2925fdb33cb47f6273d9877a131c0fc33924d2c134d8c98f7f577f70d4c07a4b3b14c3dbb7481de493274a1710d84c173f43afe1812b7edc781f3c0b6f09c7442c999481e70dabce824370521ceb3cc01b7ffe486d91dcf19eb00c9c1e4812ee7836eab48d15a240185708e90566b5c4049a04b78ad5240b5cfe686d0b0444683fc4b33af3a0d3873fb104626bfd84bce31ae7e46d3f8f0cb1fbfc1e378ce585260c065ab8503c926ceb836cedd02392a4539286c01d569fd97607f994c74c4075efde8693a5fd8682510769aa72e89f7ca1f7df3fda81c6e58c3aa2a0664db18ba4accd516ddefb7b93ea9876128291c812f8a05c7924ddcb7340971388908455d2361aec19647630e5214553b58b2621e66ba5676da0533270bab47a769477cf7a31e3313925a7c3f24015aab5c5425d20f76e11624056a794b96f344a7ced17dc0bcd98e29d08922cd34273d6491d32af513a76701004eb13d6ac0fa98ca92ddbd709196bee85129a9a5511c96ccd846b836dc046562fb1979b0646da030f912e7e61073b00736967706b296507f1a48896c958d7a89978cd50a0453c922c72a58680df54a3d3174d0c789d831599a4bf466c968ee8eddc070af88a44c4741083fc03b62e1a0c1cd550db7579b8032feb693c61323102302266652c86bb29120a4a488ab8741d7ef01aa38c5e9649e96de1a6bc3d13419431df8c32b635f93a54eef3c1d1328a5910fc77b01b5fb13f83278d5e7fe24f41dbc351f6232b3d0c4266367a1afb991ea5825464e2d79df81c93ed14c0833d884f6ea87cc07055f904d5a3099f04c5bb6b25f176abb21e168ebf4a07424816be9703c0e4d5626dc238ff713504ad1d1b6370eb57bfd48caab4943ef8a9456c9a4c0f770e1544aac72d58c00fef9e597af6fd426d90692e105bfc69103355c0fa6009e20f4135c9bee00b12e2e49bb80febb87d478833fb69fc2c0e72e7cc13633eac17cf96ab1581fc22dc275330c681c6d4b8f2346e11c288681b40e1bd2103f59485c9b50dc0adb8352470264535b0f385fccb1b8253fd424210d4f4513e7cfda48f31dce8add14dc2e853af9827823e1d55e8ea750967ce27cd0d79c4c20153bac1d3f109b68d78fb5b17d81a15147288bd201fa1925982ffe7cf0df3ae6e04e2b32c5e9da30fa1f1613da0b4b7289cb64f8f6bb13fc1ced2f2edc70022f5374baa6205f262762020e367ddb799c30d5c2c007df2611f30e26f2c83c273aa986e8539bcd46bb512ed312533250c0d8965cfa2af9fdad10ce6d7499f6000d324b38ffecfcd8651a1c2ca0316c5deef197cd622e95030a016615b6fd5483325c30d76556340404dbfe689c6d1f92dd650a5eec972288881a7dd28153af5f26c00d971b6423951d84196cf232894b3cc9a627657ae6c3066c4fdf063052d10db591e29b6f8d79337a99cc85d112ee996c6b5c120f3d881c902635ec82dc5e660d36383aaead826508a7f611e31c385a9b9799b548501d965186907399886c74d446ce999904548894def43291d2fd2b8252fa28c3d3afc8dd6f44cecc4cec91b89065efc1997999f85a6f0dbd5151c9d7e69cd357d01f3d166f425b02f3cf489fd3d2d18cccccc38d93650377808b7eedabf7dd83384527cf4698886c9eee4c860d13ada21ce13050f4f942652be38984023e980d2ed84ce85c2f5bd1de1ba8b5917c75e5785036d092ce90f3611d37134d0f026c5c23aa59df87f271a002fb0fbca23ed92f64b4fe4d1a51f21a690a7ef8e0cb87f0396663d6296c048b101d32ee6614f0f4c796befbe5945bce96e5e8dd70300036c3ca3718cb7942e8c0123cebd79d6a54b2bd1b25878730aaa36ff8f2e94216391f0307568ec0e78ef2efe43ad32e5866a3ad10a0e38f8f55a1793082ab4dbc120c3091680009746ba6cb861592172d0a05521ec1953609c47309cdb2743c009971e42b3c3f181a60b614096ac80fab810131947a994626038d9839783003bdd7a4614886b95c1568a79432c762590b9cb824067c4ee4ad4d0df67b04fcdf4ab5b795fcff4c64e84d06796f0d78cbe14a60c302477473c37edda912f08c130628a969b11f6d67eb9867eaf4602a54763d04576d1d9be0ac1af23531cae8a00a7505c810acd5b6a9872bbf0abd57766d7038ced4e81d3bd1de2bd08567e5dab3103db3d1270b54eaeab0bea9fb1c833c72905efd926e1e2528bf1a46817000f38cb49d7656323971800e44eb86ffc14670fe213af235206c40c96fe4f77bdad9dd2248b4ad11cda29f660b5e41f4d90635036b82e901ac3d44c740ab6dbbbd380391bbd6e966f42ab0c45db574a20511c1e360ec90c5aa7109429e6d4e878cdbd681b730b6897dbef9a976665458db0cd1cce966b124ba5d39fe9979448ef19e937347b4e8c30c0fc44b2225a44a6177054d91e9beb9a8ef8d08a22e3d83fea6abbba6e7e9da0bb625a74d67a25f90e00c95a3286e9789b03d70e1b53658307903cd1163df15b32e6a1637452a92995acc90bf816af6f555e1e66911890b99f8cd826d633909d0408c8ad63e66549a0cce171f8f2c35df8d48d19077e5b359c1665e3541428eb45a4d5fdd5f606a26fde62838a334d1e54c2b106b52f331e48833346bc3420ddfa26fee397203f9ac15ade4a3d3e8d1fb30e44d85b49ec0af370c4636e0288fe17b6016ea39e9f24025e31990de7e7b8f813d1723d2a01f0fd0777cd3dcbee219b9912fb5361020dac5b888968a9a4880e7baff9491d22add32fa2e8529b7e147f0c736369456e0740662161c547e5d6c204ff8b5b9e2beacca43703158ef158001d647bb93addcfd590df2bd49b5580b6a5c6d0ceae18ee91d456bb77b3c86f1cc11c2a2727ca841599673324efe96f2858028ff8717dc21ee86c33287feed1e4dc48399346408fde48ea4bb6aed574aee2e9aeae45e0eb0c69c6be3f86cd79fdbeaa745f2067d485a62a0cdeaf5941a9ba80c80a9c8b9ce86813200a176c35ced276fd56c6e8610c467b5e22c97ee705ea0154c6f112f75851cf158bcf699c8a7bde6a09d6c4e3ad46e804a795771370dba80ff35474a490005fca5f40f620a802f928a1715f005c7862747b4d09198e40a92454bb772811a66340635d0e1da103e24492cd1eb956170a68bb9363d2d90bdc4e38867bb6843770b469c58c7b05816f1e0280b428e34f1e244d2ce0728b9aabaccfe1ccd26bc866b606ba95a21d89c055cad4250ae73200a3dacb9b555cacee79c111c75a456d34edc3c8a69040a49fd98b7100322601186107d26f64318056182147e41c69f125bf2946727dc934392d8027e476028d223362348d91ff2d283df5ea743d2f0444c1a2655037e3fc4c60ae919c36f87c2c56e3b509be8bb62001ea93c0517c52116b9826a2f8edc2871a8309be8a2e491f5bf16f7bcf8cff48ae46d87ad6ca87473f26878a49377b8ac596b1c71986715d2b528ad6a52d063349a9f2873d543e206cd68b38cc458ae877e464c42bdb26cc4f1ec9395f7fde68403335065ad196ed539cf839798194ab520f1da6ff25fc4f1936fd927002f63b6bc5283b52116277a77120f10b2f47574782cf89c00bf800f95bf11f74558758a0f7efeb0fc8a6de65e2cfc3481932894c42b7791c161613241be030e4cf8c7dd6f32a8bf04022e986ecfaa74ca42f4ba5db51947dae3e1b9b90434750ce28e4760726cdb323d0c39d4ff058bac9fb7d0aa25c8ba3101c4d42c8d7325c8ce150014beb2aa59a2f86cd7b6cb8254b28c42704941a85372b05e01ebea3d2da020978be2de7579a4d3d7de41b0c459344b0e999f0d36aceb800ebb5edea502ca2ac1069a64358a4a006475611b879303415bb861291a7249b4cc1bd13ef4ad93fded4a88e9b8ab1bdb031bb0589a9338ef7f6ae7f45e1ac1f20540e8b1f535dc967c2d853542d4fc99edb68f8ab6fa4e88b1a13b1cf7031c0a6526ec0750d842f321204669e286d078050b3d5ce45baef697407b2d852efde341b937bf251ac41d49872952c16541c1d1ea9de94cb0fcac1156a4a8573ca7a3dc095eb48c72a7f5ecbc908e81c22317dd638e173b6f667fd0d3b732a3abd703ae88975edb3ed04e637b527cbec88158c5be0b00322edd0993b6333f5363dd2dc070a9419b54e7d0ce5aef5ce2a7545ae9118013fc0c7f0b7d321490be6ddd78c44733d7cafa8f288ee6ed694eef2f09fa9bed52fe4285dd65ee7ba2ffae2a2e5cef81d66a1a606041d9cb8401d3b057e3d6c06a928c91d861bbffb3578e1d3b8f398162db9d004928c9b8faa86575c01de5db5012e3c811fff422017e76b1520653b102d038be3366b1d6eecb5518e6830dd0dbefc5d4148ae50d3399cf95d1d8ba315241e2e86a8c583174c241121962d3dfd68b802c80e0fdef81aec6dcc5f9b3ff7db85734e7e5d9d183bf2e429419612c6a84b1009b1dd73ac82270a70502ea9908badb64584155f7a2034b50935d41f55508ff90ebc6cf760b441ccbce24b3703b19855c1e38ca916efa56b65bd1e9038b6d40213622b2dfa5d7cfe3e36780a5ae58abf2cc9364fbea725c6c17b20856cf627a398613e9e5cd105b4e796d35f25133a7fd8c4240e70e968d841b190903ce9d64a72f1c1a1073a0a1ee9d08f3240a7e3857da280e0070b415d29c55c3135c3b752df8cd5c7b58a5330e6a9e023cf593d9329ff0f8cadfed5ad899e260f488980197088fc27c8771c2a77baf83c8d94d82a166bdb9157368f78dfeaa86536d6a6f60ccee8bb7d06406f4208b8196c9bc2b2e2cd950b20473de570354e530d09b1af2e32aa1e360c8c0c14383cd4bed15706be426517cd56402a408bd019746ef25c5d510347cd61b4047dfe021032307ca1cf406d2d63318386c1880431e70326302e9f40c1c3a6008a0a0187863ec5692589d8bc63c3c6470c0b00d5a07b2d272441eed19a42580290e64d71b230e39828db6e43eeba27555ebca8be5bb2c1a3fa2564a0a7cfece31fe06c432d1c59d97c8ef14ac13511cddffc249af8bb1d94e2b1c839ed3301e5febe1edbd74dca02628066b52703b6da11ebf995adbfffe592682e9fd91e2dde4eeb8a6336e7cb35981c33e3111e39dcfe0ce010eb4998a2111f2245d5bb92502f929e6c1019ab1f8caacd035ffc7081a8464cd747db2ad3c41cc2fc3a831cd06ecf5ea56b874b26a5c74e901cccaa2f460f91711f088f95b3b62a192c152870fb5a10e08a85d7b90af4365816b1939c3a9f1a1d8e62ba2b33b00d25703e96319c6569af1305d15e8f653d12d7f6cdee0bd2e6b08788e8b98a8f50f4040a27a438cce3da5da994302d456c79edae95ca080360f59ed62f9c46c6975cafeb2acb5afe35424422b05b9a9dde4ca712573cef0665381c37e2211c4bff8a73a7b884d45c5ca5e3c25af0494d07236c7b75f225d89e51446ad5b39fe4c01f5638664c5549746b1d72f4f2fc13bf3630617e31c586e9cf49a0d3527ef4dac519a3989e3c44072878416ec91082f06242a281065bec0303a0114bc6c35a83763490f3230f105e9ec30156c1f86ac4d7abe911a2ca2290c487d4b59c0771286e5100df0994275c52480909a73c3d8402e0a6020a2736adfd2791e004fe734b7b7ea47ff9e229a79cf2a8b596d0e1b62460d261258d2658f479c8e2f165d8538d66cfcce384e25e30d0aa0086a36fa6e9c476708c1a0329171e7713a81110254139d2b8f87da433aae78cf5cf24326daf22a7b21412cd12c041f30f01b0f3032e5fd51d84973b1473b3a857a13114b03ff9a18a6c1648add6ece2dfd770e49eb314cac45d74bdfed6d3e17a58a5372517f261076f94f7d6d902eafffcd520f3196c3f8ce38bfe250652435804f42a8b609ab4a033961cbc7f3947fbc2ed8629cad48c2316b92f8109384c7599971b4425a1ceacde73864c4622a4637b0c4f1a3b3373f5bfe32a2b08e2dbc820acd442edc4953c8121ef629142604502b8240ade94efb6a0e9134aab588c3cae1786128fd21e63257e85239bac8b8439b3a6f1f29560124e3eb1b46df36503172a50db35a0e9c8a3b26152f61beb85647a4d118b5622b361576afe930066f6181448dd4e129df204e128824d3a7c1fb3f3463290f3195070c710e4ec34b1deeae7dbd91745621296d37f2b65c036be7e40b51f7252caa6c4b39bf0545415a89df8d9737b91d8fc890cb367435cd3afd5a9e22652c87d9d7bc1f42f9fe175a8e079e1efa4259e0cc447ac3b712c7f99294cdceb63e2aea50beb196aee3a289d29b88633eaf427dda1241b92887a0ac76202887cf07caf4a5c4d1c503d169481ca9a7b77ba92773b253cf4c25412777bd804e8b4c456a15651585a7bcba7af1b48779e9fadc2ac7d63dc006f28e901fd4323ca894496cddcd07cf302d90aa7dc8ae360cea52f2cb9e58a73904868982fed60cec9125c2fd3013ae9e9133636ff9727a630c93e5eb5dafc2dbd1c24dd24bd5d3a1ab52dcb82a6eaca72889b9d2464d501deb205b897838cbb01535f96ff4eeb28fb4566ff0315a925b5ebe0cfe4195d624438faf9c74f2ee1ddde4f5e72a1a7ae2d1e17ce09146e3c12d86a4d36e9085cce8e4fae364e420e1c23e05561b5effdcb241916ed9d916b757f887f1fbe332c63aa178d6315cfe4406e2a36c4d5cb231d4216f0d5615074710ad890bcf7fd658955699a4defff176e8a911306958c714880a2b1c12eda17fd0656adde7b2142073112674344e5145a85c3700239613cdd78bd003f5b76ad423c524cb484dcb9910bbd370f6f6ea3432438f184f8268e8bdbb9d296886a1891b6a5d1ca75564fe9d45fb01b8c7ac2e5a4b181b5da828c26fa70894c0072a19f624276b678d7478e2b6998ba66d2b4854cd78bb68f52682445a1714acb46a661365e6f114641b1196ac9bf6a9ba69ad7f0a40c589d5fb86f3d9083010d198f5121ddc603ac895ee55f40a4d45663579e109290b32062078a2b9ac9969b8b8fcc3f7a2019fba356b51c8f87925853a2ac5062863e2561710bfd87040b9d221da8ef28bc4859b4e448c82b6d9894c3aa0e779808e375c8b2757cec5990b7dd6ec38569ee72e703a34f449df03a6d093519b52c8be2f2ac64acdefa7b7ad8a560035713422ac5e13b48b1f42cf7ead742bd56bd31f3dcab4c9d3cce6795b5ce57298439882ea9ff748a58d7423922f1922eae4fae54206494cbb8bbc1486d31b0acc679b6ca17619c0df84a16eba6cc5826690d32d60e24418608141d50da90898a0f6d9258add46dc68de766f166efda646127c9b9eedba159a6c75765d712618d0c471d7a5c0e4e766cbe25cf78b08c2f1d2fce80e0849e8aba091eb7207e2bfc5e65ed6d5dd4dbf3927c848a59d07c7389b87d4e4e401928d9040b81abee0b644937f8674d5727636c58962d172646cfc9fa374017e6b03d0436ffb737e20e7b047bf785526dfb7c349356a83cedb332ea71af8006f78f76e61d4ce68f39207c85471cf434b6a60079b1671d1cfed57337cabffe226308a2cf592ddd67e81ec90b06b0b88425cc4c53dc4bfdd846bc27916f00113398f4908f8f766d0822166c404857e970d1e66e561ae74d640efafc56dc441870a3fa8d3e66919051a65e987f20384fea7e62bed75c0a17bb1030e3d94f927a7d00096440f3ecdba0a3e302718cadf8beef9273987ce68b8789278d8f519807d99e1d089b57fdba7a3d06f022d51eca7e0a50aff20c072c5fa11e4ce0a544eb604397541383ec3db6c169b3175deb8f5cfd97e5d8b7f0bb67ca1df045ab6e827819628f8b38065457f10748942bf045caec82f221807669ad8035c4524c46d31c1f8f3f0daf5003fa22eb065e3fe33c6cee2aaea0eece046012ecb07f6cdc2ea0f2a2e9e16f43b76211f20a2aebfc9d8297f900f20e62559118edd376d5a19eaf9ceb8180ca20026d3ffe5142cc1b46b216253f4547899d8444c378422552694270d3b3bb504562b2db0fe9f7bc709b226be9ec2fd8037003d00741b87dc613e22a82770adc144c0b2e0c9eca27fcc60662c36c822c45e4e6a653a16bdabca68c32231baa4531eb826179dd2c054cab7a7d15a9f3fff45a644333d8a78ce3ef55fe049e0344a5954533a35edf1cbf11c733c8675129efaab4a1bdfd1240eca3661377d7bfcef0e3d10a94f88ce6b9ad5f27f91f9e383ffcd71fb9075d90d9f281ec3ccd4e4bbf20522c40e376ebe02092a8aef1a646d30e8763c6bef40768375705099823dd61625dc183ff0623dda9b1a478ea5b12924bab90bda0a792873542fd8e5889c44d214867e23146b041c136be84011f7981469fd9dc5d71d7c81f24e8c57331d6e497882ed167284e6efaade9ecac2a30c2e07b31a22ccb1611d8359442b1d39dd69510f6a5c22bbbe6c8763a309992aad1539f8a7ccf00cdad0d30dc48f1be52d9337aa7295ca684eac210419bb4f04de364e7be10c43dce9eb43589d2a70642826244a10c7a81bfc1100e24b4457da7bd3267e0e20979e11aec8290b42338862b42f926db644d54c935af14c5b619d44e97c65bc5b93dcec06a124bebd9ef377204bd52d71228bd09d18d76c6f85b817a9af18e897d3ef196becd92493b26a2719a85ac9f9bd1f3aae8f70186bc000a7ec0a42f3b60a3b5658396b1a8132fb9f3aab7bd65a0c03bec5da5368943269a18e1276a4aa270696a2561b417a4c63d66e11d8395603834a85d3912d635441b00e6b6a25509e7e44159125d70d892ae35bcc53ad4d86a1b08523df2ae6ede86eb49561a7368c0ca5ccf9867995ede4e398ef7411a7a9268ef7002762ae52011183d6ea846fc7e4bc9ee35e635cf35b3f94541e9959fc3817b230872ac2a033df1b77b5f4b0da3703698bed4c442394b8940679b16ee46075108ceb49f26463e8f5680763744c7c8abb7f4eec9658dcce6aba2d1cc2556f0baf92bf72362e76be89a856081e32d654e231289c0d972d8c1f5ac708f793c092c67cedebd10c4f90c8fc083bedcd1d56121038e70e5358115e23eb553ee4e1c2b9c330f4a6c426ada362199b5717fb0ccc0e3adfa02e3e2512e2b76fdc7187e10c18afa50982d07ed625bea1dd4f2ce8d73ac374c1c43891803b4bbd1f90a14363e5065d71ee70bec90b298ebecbf14e5428e64aed7c3e8b0b244c4049de5c58c146e3270761adde682d9b3302b7986b7128027ec4b1cb0ff13d236e31118539b3b180a04931ce0198ec4c8cf5e68d168adcff182a7c1ec26c1a367d54a74f409f64a174882ef6a97df10a456e194e713b3c87539868d78c3e637d6541e97ccc6e992eaf7308a95fa42613abc01f6ff0f2e7ae466354ccff0cf83696ad6058fc42387ae18090c68b088201725ecf9d37ac203def2b16f02787ff6d6043d78123978258c802ac5a793702d5267ab1d5cacea1eb4a292eaba8435a293bc1d5aa0b8205aed4ea17c4d20f20554e529a3faf38e64e1c5898526966b9c82dc802e87e6feff50700cd1f0f380a0bb0ef6936506eb1881ff79e04c675c77c00719866383aa5ca0a39b955193f28e66a2a5271c727c347e47ec78a8692f1ea8ecdd98add1491e119f834997c146696eae6cc5bf7e86de707aa3bd8ad0610a0f87d9d4585f91f7e452f9c9427eac2d4042ed97eb5e3187fdd0535612d05e7588fc6a8d87f171e7a6109442e4b04975ba5e28544c95ec729e31a565b83c6784c9e3527527822f8f20148df83f42607d7e64c0bedf80a707318849535ac1e538139f20f01248dcde3e3b1ade6b025b17c5f470822828bfcaf5f41ddb07daf662933cf0b07b1b7bdf86ee26a436da273e6d53a585d60a6a7d0bcdbf692c0a7c914de6ecd69634e362b47746f56c618e527cb390ea2b0d2b4f80b7c50c83a1c1b69c9675c22cef2b6d412dc41581147eea53940b3511c6c15db0f881d74efc1a03f5bdc49e4bc63f9b6a07ece523c730f2062ced0fe9106a979a82378e47f4bb47ea3bdbd255273048f436b122e43e603607c406c3d2cbcf1b73bc3f4d26154a2ca17baf8dd9ec34fce7cef0a47a60a0bb9c9a466335860a8dcea0ca00dcaa3b792594416f58844d22227feb20046e47593853307fa3580c311277ab8a4fb1dec67748cd1a68e1b3c85f5e2ee92886bf7e302bf1501072a03cee84aa96d8c50fac1bba864303d427e27d236014c1006279e1c95b32283891d62ad5d970f4c340f8684bddc10b0f203584335bdffc730a16ad20fb9146e46ad9a01ea6fa356935e2b14a3565639c4fcad5e6f9eaaa04c4550a1ab09fca567131875c0dbff6c6e12bab23967ad0fdd74bd57acc0e2e60d330308503407fa9299003941514d42a823ee87d9489aa1a67aaef75b69e8c9271713daa35b41f0fcb1aeb2a73d217aeb757fb18cfa5182a8e1bc0666e7c20f49635f00a41cc5c50fef3e7b558112ccb7144f28980d51823a4c6960721de2e8d9099929393aa719184ff6c54a79cef4fb58b0766c4af635b90e7b2e1c8b172629324541cfad1063077a496e6b2c63831ac8f6dca69143492ae086c54f8a19328e94777e9e022c3293c2203c94b0f70f7b98263a269296712c2ce2b6cea468164d6085a796566a7c45d551e1fb84fe3a158832c692df89d862b64f9120aea42f3ce37c426fb7ff02ab9762b72687d97283c1b6c4be0bfc2eeadfb5b7b6f5be28e41cb3362f9a3f89f9881c35ff2850abe5d3565c3a5781e3fb41ddaa3fbcc7448e7d8e099246852888026d1f262d3507620286122a4ed4fd19a9e9a011669b6594902ba84ed5322c3c741c41892c8f821096374ddf0c548d80792f7a12be15fc006340751672eec44945a5755bdab8ac41e27db5b40e216d5b34baeaf056f686f637ce6d2013c876723c897676daf57cb8786657844a636446daf89acb63517ac85c5ee13958adc741a84d39b3fd19b13a7472db1b3c40d95d5f8b1ef46607e08b84c159f6efc88d3d5a299d754dadb83d54635ba5edce446877b93d3a9a5401d6ff45b639c52d288ee5d6fac785dcff82cc61d24e9e0dc455154200d1cfc0eef9eb4a51358b803d23834587cb7848813570884c15949cca203a52d58febd75f34a2fbcff736a7252c1d6bd4e9accdc16c7f50c63bd7759e05863ccaf3e34321f7d883c03921cd845ddee1adad6b189d3c8c19b9d2e2e891e1d91dfc30b169992dddd0b41650a9ea5cf95e70cfde9ef874eb5a1b621fc63513244a4606f30bef373da2cb8b224ef26aca3f661bbb00528372e05ad361d72072ac6d67f1714d0e0683a35caae9c420419c0db86a53ee90de3fefd665df4a82687fd6786751916272df6809b16bafec2a5e8f01f42addc1978beecb4d91c69fc9a4e4f6337c38c2558c93f8725bc1c107e54b8cada435ee4db29b6ffdefbc064c231ca4d0081d45ddf0a40b0841e72e6c17256c8eaeb952bd892254e021f203aec557a59a9991fa3cd46b27f87d2d83f6d6b5cd679e3b0dfb599ef867ee613f724d073f2a75aa9695158557e7bd4e6992cfd8983b82ef810fc7fbfaa58e2e9d52248d32628c1ff964a3e267e7146c723b56ecb9f96ac5fe1a31872beede549bd3022ba6bedbf5effefa52fbb6c912b682b2381a102ada695aa562b016db35272eac46c9af110afec85a640345939cc6027bbfc9879fb57e54b217e8bdfe1877afaa28ba216c614303358bf42fd08d2d6dfb163f92e813c971f044e1554eefea0ac8027492ad5cb796f410571774add40ecb83acdcd13e27697ff10958d566b7a41235ff20d2188d7b46b97f46c4e911516c9b752fd9d5136d1f3fae43ca630d3c613ada83d93cac1c7dd152e43150fc375974971f45902b88be14cbad74f953007b25d1bf62d9152e1f8a3bd79aa98b38b15a9d65224f3fc9d4ae5870cda4049d7d9fb5bd1da80d2bd9df2ba147e4fa6d1ff6649b027ba5e8da01af106b3e525bb128b44a812a4a29bdb6f08556b14f5c427ad88af9504a438ad939cb453622c3820fcba2ccbf80aad631b74bdae5b815310a2586b617850683af06dbafabeae1b00d1e5cf79798d96220771e23d045ba2a425887462c3a051daad136caad2ed59943f8dcc98356acc25921281974356b701ca8d10a383d28b0c688331600e66a942445131695d2b8f439a1a60edc4fb46e2d7ad63da587279b1b01cad67d2abf2571af1f1a8808cb57fce8425406e50351e1288f1a676b59c875f952d8b9d24c5c847898cbbd0174d002aaf941635c509a0da70d386a4e61f5f979756f64085297d9a9ef82d4791468e791dee71da8312251e709c59a86503ee23c5b5c49e2e47a0400000000000000ca58d62f5216da38bc43560e0b6decb27450cdc8fec6ee6e9288904d24b27b73e50e5c063906f805d7b580c7200c286120223d8c7831bf1ad33266cad476cec664aa4c1547bad28e4ce52567d968970dc34964cc8c7923237206bcb565c08ff2658c93642e6e8aff626fc08862761489b1d951ea0c47ee4a9d8dd93176d96ac78fcfb39aeb8a0ba10f1742196d7cef6e7381f732e907b9f39a1e4c49adccbcb5df937e90bb6c6d36a3ce489488f483dcd94cea81b4241f3ca9072e8056402a825404a9082034d4e1feefd5902977bd8488140391e805c9c68b179dfdfe7da213db46a6d1218924242193040e98040d1031c83ce414e4246ea450914411bbfb175990b191a94922a592694929e74cc22589969dc40d2cdc17afd044143eb210b60c12bbfb1751092728815b1914e820d3030bd432375051c9f8404688dde5a72d39c83df78d597d74c3393fbecb29a18e4ed4ecf877752313d52b08faee7e95a5879c9f7154e41eb15d33e326ab5d8545ee2a4b6571127c495f6dcab90d5613238a53698528257caf24981845b1bef08845114750a20a4398620a190a231f86900517b02401891f468084113bef48811f61878844134a0091b04929fd0b2a24ac80848fddfd8b25504185bb4724b8b7dca3b790f0c20b53a66274994202890777d843be22e7fd544348d15185d521858e1f52878f12641d3225903a9488f961071813936a91db7e2a1d2ed4860a74a02281112d50ccc0c5478995d9d68a322806180f1c56cc0f231ac45cd513b21572dd4f1563e3e626cb20d79516b20e199555f211333a1c41850f483ac0b899cc8fae4733c8876f221f4ec0ff3d0422f4bca6de114eeeaaca718c114ece1ec9b6124d316e774b7956abba2396e2e454d1e19bb3d6ed337a4be5b0a52089d3f84c2cc5af2a57eda8339546ca904bdc717b6c4a2f60ebabd974b4856c6ffd5b235bd9f4338a418ac5483177a7989452526cce3927c528a594528a55176fb1a9a137e24b8b150333531035b3e9574c3241ee64cba614fb8b791098aeab4dbfd247d93062d53245df9633646a477889b8ef858e145f893ec5a888caa79a524a6f1dc1e40cc8d496411fcff92227919974912927018542402e39927cc89e711f50ca49a287e8d40e6910c865cb1437728c1bf9833c0a4e2c45142c7938a415e2a1871143b84f8f8f4d2c6d2b4ca69c243e37e5cfe16353e3a618fa58f14aa5f8a1bf31a3d8868f15cf147fa3e299dcb39a43d8f39fd0df995db8451339e43f3daa30f984e8ad472cc50f7d6a1e0cf1437a731b600988f61087b44618900ff237c807d13486f0a781bd7cd73780fcd534ee83dcd6b6f28f0828a4b54923c8fedd6d81fc67e52420b0136dd872d36f33dbca49eec73cd24e926d76776b8bbe0bbab354d402d1f4415cf7b1d9b1bb9f9a1d82964c396b77b7f56185b47614d5c73a13ad9e9b301bc7402c9195d6272991fdab7ef4c954c910fe30220975d5cd07a41c7297b74b8e4f6a45fd5212c27de1288bbc4759e4bff23e185d4aad0381e364f88e65b07b03d97eb154dffea3ff244af5a0cff8eac994213cfbc9a5a87cc910f78790d95baa1d5fe533556c1859795f1a96d408a3842eb50e04dbf59528eef50857de514ef61fe5e49593c492ceab8bc81359be0813b9ab2ed585eaa8ab0b57841cdf25c68231c6512818989717d20ea41d9e4a45da2147af33f8582add60bfbe0d22b7365ea94740c81d49247293a721ca96765a4de7c8e4eda847f06568144a3a01104ce4c7c7f00c52c32decebee1f5de320513cd21e2edcc2bedb7c164ba248884da28dd8c4b36313097735d9e69cd8843ead43d9743eadbaf39a1106fce3df605fbe0daf242507d7fa7d0ed66be44f1d84e47c65e2a3fa9584b20196c4184ba2bb0d5e123929a52c99dc9c73ce924829a59496c45a6badb5964cce5bbca5a626bec417160b0606a220eaa93409952f6c832d897fb120a29e766a13aa51f6c37334c346d90fcb40f5b3e195c4181770ed2b37c197196b1b6591451635cb22dfa88345478a1572c84008a3d7aca49493e668e560d55aedc592c230ec6647bc1ce18231d6b423ec1130f988992b7347588030874a1e810508618c2b23e0714757d051848e1de890d93cb8ef41187323e60708618c47c4784ccc163d9fe28ea810f323861553139384ed5e821d5e143e1c21448c1170502306251712fb22020b9785d7755dd7f5d94f75841336b69f2a86c7142bc8b1d223470aacc8c13242410e16ec90a3c62825470f2254c8d122f223c70b72d850e51862e3fd54395c0850b3e3fb8bc3784bcd8a6503637497723e97724e4aeba4b4ca73ce4929a5b4d65aabb378cbaa26bac4171b16bc011383e484f497aa07836bc8bd1d9f44b3e34fe086a76a4226015b64772f5d9ac062772f46bba1dac1b2bbb7c3e193f3083b52f16a6c6a87080f920a56320b9ad861f443133c341103957bb7f79e742070c0a864fcc581701797724e4aeba4b4566baf6aed7561d8cd2e0cbb37cbf0cd5419c634da167d788aa39cc55722cb47b42962876a450353448438353644e144976823a2705a3255ac5432363d5432317005de1002b2c015987a343f561bcec018dda584d15dca2927a5b55a5bed7561d8c56e9661ac6958dbb69c3b9e0f080402120a853cae232560c3ffbcf8805e8c5b1647f08e2412faf3a9456d0027ee7ba1932e328b3886f6f7ca4ea40b416be32b43cb18a6bdd4b0c675288eafbfaf01456cf91f2094a8b1b10f512265cbcf88f063cbfffcbd3583b80270cbcf1ad827be65642f5fd35d88868f7c09f25277a0b73ac752c45ebb527733e44313ecb17c8cfdfbed33c6619886719ef7bcf69d8e1ee5978f8df2dfd7bec38db29601fbdbf98bdda798f61edd4247d6f40c99da1ed332364e729db669ac43febdf490f698eeb4d427beb3d73e621ab2ffe80e7638ec19ee637f31ee723296b00ccb8f618869e8f0dfef4e7c67ba13c196afd170b1eeb43ff113df9dde52eaebca1eb2943d7a5ccd4564c00fb10c1d2d5f77d984657b3e73da77b8ec1f8ce8c939638dcd70e90b3e46049a8dbdd4344deb608f85a0c561ad73bfc3e5cfdda62bf69df6770b5bcabfdc680b59caad3d7e187ecdc061773364eaea80cdfec07b3b8370f700dcf0a50b68eb715fa456091925a68831ba7ff653a928a5b4562558990fda0f2a2244b10445b1a442c2b66d39ab9a000aa140407a08797210228aa55028140a0951b124c87eaa2576b880ad10c920b70416a325b22089a8b4e8b800c005220220daa25882788b6209724c4801efe09292809dfc6068ed8ed4894859e73100ee98df7eaa246c5ea0844c0b5c50620a13885aa08412ac55a1b6b536b4adb5d68e60a06a810f2ba01f3e44b07874a4a0f3c44a5621e1049baa093a68a81e700f3c643960c115820ab01d3c5c56a0c02e81850aea1259e840555e309970598164820817f8b3f231c1440b134c40011352503181b3e77e2a26aee0223b882f8a2371476bbfe7dad6207712d5dad50620b8064a2047e03bb729795f9522140578a5f89dd364fb3b7781f19dbf40e03bbff180ef1cc601df798c471b06c496a34858e28d04c418044496023c8a82abfd60cb2f60bf4f7dc1df9280ce11d0250778057823f1a58bddbab31986eeb20802ba13fd0374f70ed0abf8d66606e82e8b44bf000d5fa6ca49600d4539499c79f1a254fa178906a029cb493c555f5ebc2895fe45a29c59d6e62c12fdc7607f3b1c2c912c20ff912b22b943c8c7973abc18425a9e0f7120efe1e8cea2ff88ac288baeb0e2a525519e0e2be40a2b3ebe41b82cd22f963edcdb718b42aeb002ee10e83bdc470701d2f9b9ac3ddcdb2532c582a97cc910187f7eedefc431b4a718ee8d833b6fdcdb0b7012e9e2225da48b8b7459ad56abd56a355926cb64992c9365b2c4b7366791e8bf145b9c84a2288c9be2a35a502da816540baac5da9c45a2ff1265b929d6172f4aa57f9128e7ea31d563aac7548fa92fa41cf9bdf6d7c57a8b5ced08e5aad6c4c842e34bf4a99aac28511206a260769c300e518fb276a49415f7c39e9423d7178debeacb8e8f39b8dfc39ad31df4c712e02e532f7080170788e2d5c48314438a21c58440e0d69e1577575a409cc9726bccddfd01f9f89d1703c8c71b6e8a200e847c7c9127343d5ce8411cdd21a1d7be13ea84fe863a213d3b34f546bd2177c86bb06705f270efc110d2d12f9642e2c60f0610e7e150ec077708f776a8c6a383f8e8100e6b10f7f6ce4e323fdc8bd7f69593a40cc1010cf2f19d26f49e8fef3cf2c7903fba4de72307f21d8e6e0fc8e70f8184401e83844034d7e1a62704729bc7c90df20ed03d06891cbf07c38b250ff776878b1bbf0743fe18a0eb78b8b7413e18a483f8d0aae1c7fa3d183adcc332b7db679c2462b8e216b7711f31d7ef25e1c89ddbcc2cff6638c6a67d074fe06d6dd3386b6da6617f5bf174e813f403076ac7a9a5cf1f05217712b5d57c8d6f421ffb7b35f6ef0598a4704f9df2e3da6ab65dd9f1bb0cafa4b20d7586a241eeb6d68ebfb56a86ca24084585ec92d5884e097861432028500b24754a817e8070405240ac938a5d89256959b67ce1216bdf8287dcd91b5bc2b7383b624934134b52a47a30c807b164d602b1e208fc1f5b7ee644ac58c269815859c892d2887e80583455f4f0f103889797938a44b1b4b89058d98d7b5ff6440d2794d8776634422891f30df88e31e29b5a980b544808aee1218641883dfc09c32f2ef40fc70861d88d9cfdcad1cf1c9df9edfca6d6db34df87eb0cd749402008eaee447e6630b7343146857ae4b2a5116a6c17f65349d1da1766241e5906fc3937a4ffa989239f15cac7268ed07caa88233d503e3371c4be2987f444beb2a5450f59fb163de4cea6b6fc0f071fc4751e84f36c216f38349f901727f1bcc4b297cf0c08376271937c10fe6ec309818925f91e2ee4850bb9b165f65df6f299c1c974d4b2a5105b3ee6ba101c5b7ef699d9f2ad105116b1a5c5b1a5cc962bf2658b93c4124943c3f0ab6295d3ce72ebad3c8a786658c8bc6d1bfc2d6f5bcddbf4fc96f3f6a6960927772e5636e9d9dee32265f378f4f4fc7392cf77de3a09e83bba3b9179d39df73cc84d9e4ecd9b29c79463ca31e5c82dd62808b1e10af653d1b4e40e7c294f353a52d64efd93b8ad9c28343a9d3fa574a4f4747487d2c113eab4d2e93c8ce8919dade6af1dddc1cf97fc93ca49e5a47252911ba438d8dd3d9bda7c2d9e54b28f9aa6fd2945839ba6633ca14e29a7154d7b18718b5a764ad177ace90e668fb9ec3aa99c544e2a289a430a9bed623f951438dcddb739f17c9c99724c391b0a0d6c6ae137e160172b5b76995ad96f2e5230cef0e602357fd33aaf6d99d67efb4e4935df77d781ecb3cc9463ca31e5b8ae19c2baa50e9ffe18fdf97be8efe1a9c683f094b20231ec947a386ba1ca16d327d7b6271551a62d9a148f168f191e311b01fba978ac688ea296ba4055295168985a261c172b97a965c2719132e9772e50d65aeb577c2bffeaaea4dada7d7cafa65ddd9d489116aaac2fed669cee307d22f7a545d971882898b42d970b9475eb0285b940e5a8c5cb57f7fded6b5c6966dbebb3ee4a2752a4856adb747769bf1e5f2f82f90c5fed8a61dd892ca91c9a724c39a69c1b11e54a0a832870a2a089426613603f5514365451aca8a05859543ca5608e99f538633ca5ae53ea55fd2e51bb3bb9304ca25ae8c8559f5cbb7e7772f9a5fda47252916e5154d836788239a5f6c5b2874a49c9957a5ffd8ccbf5452ece28842955cb20ac2fe1cb4a2f1831d31efe49e59ad9a555eda21767f9de8842e33aa14e29d7a9c6c61e873d6576429d52600cf2e369e58a8fd5909d54600cdad318673ca536bddfc9a9bb934b8b8fc50a60548fb03fa14e29a97d4a6dda5f5c43b6e56ff0ef9d5fe5cba0ba8317bd3fbf42f927d40966df1863c4b4faa7949ae19f73d29f504aa94f28c7d95e5b8e736d19f2f149051a00df1faded7f528131d0ebdaf7e75f4f67777f6cff8c3bb94e2a7ffd0975bdc431ae53eaa4b2b1b21150a076b6414f6f40a1da0ad84f0505cb9ea9d9a5fd5433307b86b5ef862e505b63f98fca610ee2d7b8ed2f07dfe2cf9c7f87932f72fdf51befbd574646356a3fbe09c75e4d7b4b2ba8868feee2ceacf6f948ed47cb889f7dfdce568d42a33ec4a90f5dacec0eff49fc3c0ebb725d35b54c382e527687ede7218e559fc44debd78f7f12b50cfa9fafdfcdf055e702b571696657dde1cfc36a2f8d860c7633f4287bf8f8bafedeaabb19ea9b5a7104be7d130e8ca1bed52e50b57627b17381daf0312e6313d0e73710bcaefa18841da43e08bf0cab3b88a9bd7eb3a69cfa20f8a6d68d7d23f728fdfac16fc28106a84fb189a50fc3ed33b562a93e375b71c433dfcace429be1b797ee4c393086ea798fee4ea4eca0867fbf5678752da95610cf80e1cf807a74fdf675daaf27526eacda9b6ea123cfc05f33b769d5aef633b9f17718ce9e337c65ca8131647fdfd4ba4f718ceb02b5b1b9afcbca7d596dca8106a8da6a3311e53a6887fbde8b363d6a5a3f583868666270d454118303264e08e5a415425a2f08ed855d08b19be197e16dcb9df73ec2d8fac1c24133e32ee57c30ba4b39a18cee52ce49e5a4b4566baf6aaf0bc3eecdb09b65186bda86b56dcbb9d3f178405ec87b4f040817421cdda59401ff62a923b9899bd8f04a4cde869444850dc229ee0803f5e5df505f561b9b1a28a3f5fcf03ba7623fea2b5f3d185e8c2ea594734e4929a5f26fcd22576badd55a9665599665599665d92b8b1c8975b12ed6c5ba5817eb625dac0b8b5cc431208c1163b8531c434a1963ce3963504a298d4192420c92146a6a582c18189214f2b5563381113b51dcf782678fb9ecc23450db75871fbbb2cd1dffbb4e2e6cfd3b59f62035def7c7ba03fdebbc6b0bf21efacfbbee3cff62f6f8b3c75cd7803feb00c42e7f2cfbed2910faed61440b641a7ba9698ff5687bffecb1c7dc68fbebf168d3242c72967dfe0b7f06c36716c2afe9163a32d61ffa4ccb085d1beb936b8730901940f48b25ef3cfe4c774f4b8f3ef18d69b8dfd17e3de3aeccb3cdb1bf3ebbba1301a6652c658fe90eff89ef0cc721b27fbcdee6fc2e02b10cfe9ad61e73f937ee6a5864acbb932bd317e6ffb05fd73be6647cecd996312dc3ffbafefafbfc69a072f619c3b84ed3f4babe03281b3f769deb68a04858647f8cf16318071216b93bb9767621d78100b51f6abf7f565ebf010781da156e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6ede0b73fb2c9b9d88eeee6b9dbf32b687f7ea39c36db2196eb351776c55b3e7cc9e8f5731fbbe687563cfc72b973d1f343f6fba0b71d04f17fdcc1ffaa93b90b73adfdffe7a7e766ad8fe9adcd7323db5fb1e0ae4ef58e06aede9e7f3db7b3c9d9f7f479dcf7e7bcfa8a365b89f7df6f73d9fdd596ffed490ff6a19f93b5a86e8ef4faedbb2965af4efa5e31944fa85e813dfa0dffeeaee6909a24f3c621af083f4c433e3b23b6f676a9ffded4430b3fb5a4777dbbc3ebfc510797e67331696b9b9c87cdd754433fbf31d6e7b0f873f9c48e73b5147d398be345c3b9bab156adf9fdb26da38cd267ffd8e27d332e6df3bffd268799f71da96bd87ebfcc675baac67b8cda4d142f291e79cdcfdeb358ee42367d76db087e127aa1b2d6e43faf104d20f2070d470826a8a14951336aa13de66038cd1dda59472ce3927a594525a4be4df8d04051b35090ab6447e7c8f3a08e9519b788cb6c6bd2f8b19cca04699e8d1bdda7bc492bf7daf229628f48f32fbb4149bf8be7f658671264ec5b62671dffcdbe7a03dfe8a4718c8bffd0d79d3cf4d3768da3ed66eff5ef721ae21fbfb980cd9d5bec234e98a1ceb53fb30fced7aeda99d8aed8f8344b9a20c8244c1594fa94a69d4a714ae7ba79892da16154b530939be4c91a9e9830d9453622f3baf01c185e20245e9e300a79df39a53e39872aa8c8aab31b5c2ec68ca59428e3fa59c3417ba8f0def431eda6316e6346c84dc39abaeea8a5557ceaa2b67d1d4d5aa56516b6a8f3842ab8f38c28a23b8d5c2c1da8493995aa61c53abeea8aa3a535575479d8923f5e135eb0c89c735af8b8a5cff55550a2a4593a1f596e3a4a052a61c172995556de2485755cef21fa8baa3ae6a15ceaa2b538e09c79a5a2c538ebdfed2563b749629c7a2aa6733805a947314d74e913bd9625fdce46fed7e69214991655c2ff6c50a71c3161147a8c5111347ae4ab5c39e524ea893cad4d6464bb42e2d71c486758923f52136ad0b290af8d8c434465ae5facf92a4c8704b1b2ef2c66965ab9ef8b16d4b1ce9a48589239d6dd9ee63fb4b1b4ed89738f2544fcc6c7f2b846cb12f27154c9f52e285ea3a8062e18bc0dac9167d69fe92a2c832eacf4d731c799881a8a494f444a6efc1401f4644c5124dd954ea5bc596ff56db882c65e887505e73423fa1fc6bad61a2cc3fa1ea9cf5e7bc60ad155af9734a59b96759b6a42794fc4eee27595ae0c894b26cf8180cee7d1984746a0f239a5a10d28cea6eae76cebaa335a4d0871c85906e9ca65508e17c4a5da020f76af51bb37dfe25f1c832eccfb9edfbe787246b3bfb637b0b23f29ce136db66c06d36d53226dca616e6ee8575154b2d8290bbba6a01845c5da493d0695dc511db42952fea36db3a8ed56edfb7bfed2eccb5da939b3f9f52a734663f015c9e11d1a9a7d409754a39a14e2aa754a773429d54b6ed4f29db9f502795532a8e6c27d44905428b0362915851805827959ba5a864ceb4563975884600005000d315002028140c08c402913894647116ce3e14000f7e8446664c99ca83c2248751108324638c21c01840000800c8d0cc108100830805f207eb85b741f43ad6a4f4e0534a63f6e444e717a30799f28858d4871e646cd4ab126bdd2cb1c45d8d01b319eb6126e0f3200e0e596689ad16078f5b4b2cdd3d2869e6b622cc895da3839cc80254f4200892fb8b90f02844fa6a79215a96a2e86b28abb8c6faa058967f4fd278621f107eb2ba893d8b341ecd7499d81d235886f1127bbf4ef257ff96d8e2ae88c1da174db1162ceb8ae6fa63f60e9053ddc53e6252d7f47fbcfd3e6cd25588cd6f5bf89ec7a612f4f91e215d4248a62ff4f226e4f1e5662b6c722b9be71a8ba65188f4ae270e7fd03596b3362180ac2e96157f2cd758be8384dcb2ba5031af476081aeb106124d95129584ffaeb149eb26f105d7b8b1ea48d4316a080d5f7d1781c71a5931458420222effd29a4cc34db88bfef54028c8f7cf2e4bd2d2162103bdedadaed95b4442d6b78e3bfa8e8e349b77426f125bb25378f0a409b02f2d70646b3b0e6a6d6b570791e2130120b058b62c24746db8825ac5fe7ffc210a34269eae3b72ff444c34b00c124c967f3cf6870ec54b1bba44dfec1a04260de24c681900fa530a50f1fba91e4edc4db490c5c156f77ba8b4eb1017ead11dfad7cd825d2bde362d43356b2301aff4ed69faf603b5fddeeb49b2abf437f8b621f9b32d480b9aa9bee239d9d326ac1a420d2939020d75e0202c79c9588a6fb753dbcbe3174cd20d968e9502ed483084ad5038eace5d4c930ec9e5b77d6ba5f31d2eb322d244dfc3b31ca2c114682f4640ad65f4e7280827a9d9dcffdecd455447bc52ed939593f43b5da5ba6eeef478b9a0cd41e110ad55b13733a6d8cec8d4db3c1fa92b8f8ea94715b04d887c2ec23a2bafeba03310b41b741e8afc0e17e043b4cce4729a380ee4246e475d46a786696c44f27725a9a4427c021f3524af61838e0517ddb80b438856e44e8741ed56d65722b39ecc6e540525ebfa0a45ca849ee15169356616afd4d1543fde2e84abf8c51b49bd1bb568736215fb8078780de8e984c045a9391146b5fe52236778aa7022439dde3b2cdd63c9562419a3a2b663b3dd4cfa12a6abf3fa5cb1b480325115986d49d07085b0764d9310c4a956367bc666a2f1b5f1a08a1ca2a646f2458b5745e7da85bea25dbe9910bb67040bcccab2984c179abdfdf7e17a00c64efd64cda5d5457aacc443d60bc9704da24c513d7f6dead791863a23949744672ea0c3600af5ef4dce62233d3dbfa7a439cec84e47a3bf4734add739057a664fa8a480ca2ab8ead8581a56a234211305396e2565199818e0d194504106cec4535808517697d3a0179a0d0d9be3257b979abad8fc542e7cab35b2834e5ea8391929763629541870cf703fe855c1ca8f344809d42c2997a04755a566d3822a455eb420f525e1e29272341c39f78735cdc54cb168b632794bdaacaa9efd92ac86f899c715dbdfab4749539869b695d1fbad00429312ff4004cfa2c50bd6a44923798a285c5c6441cdb469d5a601bc850b172faaa888823468d4d65ab336d050d7cfcd23ef112972a260f1f8f1bc8b8cbb87113f688d7f5625c2bbe0b3ecb62f32cb560bc4703b879976efb87ea91403803de8831e2311e5270b89bc54402cf57a77549cfc512e87c489d2413b4ddcdc04eb3a468a0215d7270ee74491bf1b29c38902c968cee85867523ff4cde1264e14fe2dd046d91a8d320a64970fb000422f71af718d297cb452f17ee251f35fcac65f961702b3a238a0998239a2571ffe24ec949de9b8496c27a84f72a260087bc2a5405e35fc2ac6a56874b10566015af47ff97fe6222eaa2b51608f9a22d32631522843bd6357beddaf32c754ddcdf60d25e4d06766b597952290fa7e6ae2735f98244d5ef397ca97137562bd19af85dc13ca5efde6f7614ed4d192d22932c782720dc48131f027f10ce644a9f72554e4c578ee0fed26f1eba00bbd5757d98c9d31034c0572e87be66a177f797658ab539e7c445cffac37555587957d2bc0830a34270a8f1a8910d0768ebf16c83dc40b9bd39075e481a1d7c3813f990a30958f2acb108b1c514e14897613425df4ea8313758cc5094f3b67514a08d8a1cb2f27aa5985d2e1784e941ff005f3bccd4d210639ab2b4b45057432dd3fa9e9c62a7952c240a6591b31fa36276a7e21127ab4c8cb9a7f86d1947bb214d518be992f2a4604e88a3a23ed9268918b60134177ef780608e2550bf8fbcf22c757a6e3be7a5c2946d53b608d4b2d1b502721752a270ac4cd596424c8e2ff0c6cf818c82570a2706679731320776f1a1e569b1d11b7ad06dd2ed6c6899287f6da36e2d266a32511ebfecd4a3e711878d6338289437935e8afa27b6ba714852cd8eaf840dd3c0aa955269d4d5a01629a241bad037f89dc606d3696c4dd71654875d909bbfe52e954380bcf3bad0c1c938290d1e8e5ae843ca90e3a90048f160d34e42bd3b81ae3aa2aff7558993730b8b29714b68beabf8b3f7887a18acea62902f80f36d4c9c598638da5af58fe2d16f372b8a64835d6dae2955a64f10b2cdf535e2d2ec3c07e4f448491a2211d5a8c18a50c2fc2856f7ba60d491dd1a8e6d8342a04b4d9604abd97451bb78234430610e533ef47aae4a318cacea31b8b367915a4c73fb1cdc5043dc0a317d7fdb9102761f4a28e9a828f1563b0fca8e3a1b727702209cb88f889bcfbe7beebdfccf0880ada920cd286de079310c4b5ea10e728335788087f2e7259959233e195ca0e98019a909d59b293ecb87050fddfeba1317121c1b1e2fdc4df57e837dbc28be4aeecda68d77889edc8aba0642d6465c2cc00eaccde7e4d0eebcc826e662a2bb26c585554507014fa540f1d5e23bfe81841777f42b7d8212561d1720d2f92aeaa1321ecc1064fea54b8d005e5ae7719867a23f2955889628b019e0f3f34ed37927038b22a29572e1462649e458468725a3e492ea08970000ba9f8d703712c3f3730fa2a95a3794a189ecf687cb9380ae03d40978fa6481d3799171087fb7ead30b3cd3d36c82cfcf3a00099163896e978abc3c9be29b00ddb6809e8db7d11ba212836bf51a0814e119aa3649919f07d3e8272a24455909e16a53e9c2287fefd29b5c087d004ec20d2108f2a35fc820377da764f2342b93a511e4b13be4cefcfc23819102dbc55dea788d672de2abe33963ff3928dc813605f176ccb4d8c2302ca6e0d272bd6b788bfffff55fd6ac5e62ae204c317156038292a598abe3bb5d3228496d7909dea32c038ec77adb2c8b0a06d957f5c771474d43ac625bc1c6b5c3462c1d1083d378a1f2570eddadf9cf76afe04f45094948ce4dec02ee77db53b534d0bbbce415ab402edceb73fe02697cee86e30a98f40c5e6511c845213bd65e38f750bea30e10c0c7cfc9751e484769e4998299d8337c5270ef711572d10e772bec2f1c2d288d7d0b942db792eae5d2cfefe3d5fe4e9cdb4c711da38115ead0c793fdd2c78e24b9c9a5ba9a0523c19b7999bc90e7645e8667bb482c905e3260e4b55ec0ca1a0b12262ff340685dd4c052b0bda5a5eac57848c9e98d7840445604a99d6f48127909d0dd4089329d9ff14a4a8c66603e8c5c12319d059d358a48c19607f9d95be11824d0a98f1c2d2bf5faed10b5d3f24b0fd070620e2a9125412b4011de1535c45338de781aa07984e84864b552b02dda7ee4cd3fe8c8e35978b459842203572a473a0394cba8b521ca6b0088b54a4639367e02f3a4902b189b546d87055bc0af0c2acdadbe21397da30811c8ed9563974e094b680ccbde3aea3168abe3ea18c46fb3aee4a776ffe4d4a8896a2948b95b81eeed56845cf3d3520a9a30ae726f64eb6f94f72b06879d8323cba66725224d5fedb886d2e70b7cae12c1d0d1f00ed1e81ecadb4a91d1b51e4603104db1d9a124e5e13aa77b5a9f2afcdf31c6c50f88744d53537dbc067803367e5ecf2800d4fe717e4b1a21502a6f5e0a0830389f4fc7136cf45179d09d460f3ec2de22ebfd6d97ec7599f4427809666da37a3d6de1bd836bcccb5ccf9277125d016d7c0bdfef9159e61bda533bb5a6ab33ef6ac1a7d7e1c828d67e93ab7ecce0b1085c0a6f244edaa3632b640d483a76c6e0299f9c2481d3a53cc9ce49da9e16a994dcbf378fd99af2e9a38e5bd71325ae5c6b7afbdd73581221210071a96e7487051f7cab3b887d85bc9ee825e9d12469b9351c3cc4ee6a593db8d667905d63229ab89ff3390d026e79631b3b7f8296ef5fc4bb0b63f27a483856135e8c595a1c811f30b1b4158cd93eaf431c9f16182f15ce814f36dd5ef7e6f05c79d48091fc91919e4c3f5379dca7eeaf6b7d42e3c73a7e9a217ba1c04c1a6913b2143d2dce0b7920ee3fd77030b75965c744ba6b76111ce2d6dda46a072db04b18e61b0b48dd891deaf9f3a5c616cc17269104ccb03b65cd81d27ebf9340eb9d190f8c8859d923a51bc17a048a3b56d88f6e84d3dc696bcbb54625542115c73669c257cd4d8ac45e91c0c31dc56c9299a25b5e11eeb8267ab864b64061f853e688065add676845066d247a0304341e978d2012bf720850219ad9db8aa7bc705a14a915ab22ef8e7d17a65e6bbec7365e840827f3cd466ad74d1f07cd995c0f4f2337495679319d2c1bdc43a697f69740fc853c236ec8c7d58e969cbec70c5ff126d1082ee5e9273b6518075f430a8f71fbfd2291ae471276f8c35743989fbd56d46f1125b41c8f4b82cc3087f4c87a9b1672ae82452b7befa2550fbfec3cc63c0406eb1904dc2da1cbe13966a09ebed57c8abc3d2f8d107bc98409827e2a24cfa877ea36b6b0d125e1ea72861a5908549953846739ddc9a4259d89d9546660030dbdfa61fa7a799a111640736b197dc5911d5523defd17fdae44f2021f6dd1c687bd462b5b493c1d0c9630ea7d2cdfbbdcb1837edebea451d221c6e332578bda670adb1c57e78c0c80acd18d5ac32b9963f364017e9eb1b942b5c316dfa20801acc8ea64ee6712460d8acc36aca037cf02970de3ccb7519aa941d1ee0ad219c8052adcb60c4fe7c605df348e2ef6835043cc89a4261323b9240a16c564a48228d397a5bf1c6306d49d1924ddf5714a5555198e18185ac520ecf67780cb144b25caebfcda448e98790f238c8dae6dff7d38631da3ed931097d307fc805b8aa2ceeeb542eb389d05ab503b1781292ae11637ede5aaeec3cee54bceedf7419b1d44a8f8a0d39f0ba18a04eb9f3e294c8da9da7fa29a0032ce62dcd0807d08a3db8e1367990ef685f79c351569917cde44446fad0204a7658c7a92450a63aa38250d61807b3350e561a069688ce3b9197aa198f48f91f2b60c3c90deee62da52b574d60285e513c2648bd1247148d993e29eebe62868b1ad95344682121ad990e4c3803034f6e3f2422d31817b837638de9414fc541254bb9ec01b467bf927255b2c4117929ccd8b0a1c081526e22af2ae55e2ffc7826deae23c446934ae98ced57483658a36c2ad49b43abbe7a28863d27d994535850aefaba755bd7880928b10aafee6a83652473862357e4d3e3f928cdff3e2424a94d61f49b9016405c951333a95a50f31bc0a2ddc20e7345e7f32da65e427d74a6b06f878a9ca532f0cc052356e4c1634daa6ad2c64f74802482f94ed94fd47fbf6234327cf439daa00224d3c868dea1163b5a61d6211991f8db9d41ee6bc56da622ed41e018215af37dd3231824c2883c03d595531f35d653c5328e7292b508bbe269af15d19719443cf61dbe636a7173d6e6a0484766837b00af290391ff63e703bc27051c425c9db84f309f9b49bebb159dcb4b90c59dd6238b1a5ff2f5e82a74decdc1a145f147b758a6b63211d82be57885618bb8e758012d6f452b82de48a159cd9a8e9f85dbed9cd09cd5a464f33b207c22b94101b24c50aea3bbf3f0e297b2c8a991aee97373c818c0535c3b1f4e5ed3485c9c32bbcd1644e892efb816efacee75f96e5e91e54fbadde457880e9d8fa21d2d1dd43786137f39868f0c006bbb3bce61cde6dc3412a22ff83332f50fec6ef584da29e3a9a5eccc15d51df8ee6808505564c029d74525b936858faccd17c6d659ff1ea43d7e8998ea9db8e51bc227e68f506683b7aa4c6c0041c5bf228b48ab4285a9988e157866eef896c561b85c2639341f4a4b21a04fbf571ff07ecc014ed4ece278e982b6c9885944739941d314d307925f5a66544ecae57ddf4b3951fa6f8d0d1745af897f0b201d6d0858a3a21ccdbc3532ea10f5b17b5a6cddfe8fad5f4fef124ed827422a2c09185fa248d3aed65bc7785f044a2f0808c3bf98299b5ba59b2bbdc18b5966b2244a237598c235d46f1ba6b7dccc8b4e6457c1f0be118854f0753283568d1f7220501fd730f5dba67be33cb3d1803551c827f10e42aea977313d8589434a7a319c428d7b7360d096901004327268e06791facc498446016756b5d7d75140826c91658b73f45a78a10a45de16cd8871a190a9cbe4cf6187dfb717ea9617318b58b99fcfb2affa409f1796b216d23f96360c31d2096e78d6501ddc0396b24e2d6206931199def9c7d7680270e8219c321d9222dfa80b438ea56462e4144b81293ac10b1586d7a6a44f4d332ad4a630558de5f5369ad8cd0ea72e178afc6faf421d4de731617853df93b511339b7f1c7c9e16e074b804463380f5fdb761d657f2f72ac53971e25e56b0410a2d543edfc1dceb0e7a63b08b230ba05bbdd49f5732faa3840798e12d7c22399512ce1456e7f14aee8bca4d39de70a10c0ed731d495cc5017125dc9b6ed8ef8713b5dc966f624615d5c96c511e1b965bb068ba0b9a354b0baaf520b6eae644aef260458f55536e366ed62a50d81e68e75b45ff240ff3997c5e45158874d8f01857ec8a0bfcdec78fc0fd9b91f304cfd580478df0d979c7c9fbf9f89d38c4363ba11cc3097eb64d3511d466d158f6f60b4d6d49419acd21e115f109a777af0bb5e432d52a1509db237dc566f57a77c399acc64cbc62f48574acd50b2a853ce807fce2867efabd701e671c83cee0d050a3f7028b8ac65023f2e27fe0f76680310bec5538e7742094ce80ed55b437a6b94b00984bd4c607c9d8914c261e97418b3897b9abca4cf9065285dddda7e6697517d3703fd4c4d934b3e676237a43c5003ff67987ab0baa9c22832592fd364316cc70984fddfdfa08eeed8962663dfda71990477255e311f57a934399cea7ee441eaa9ef6f0a4ee5e451c4db637e3294b5800f1e9e3f00a5c97c8536ce548b8b30c227903a4c1747572b02cfb76cddf2cf40d78440e7f3d75a0099f97fc1b2d698993a2eb96fa4e0cacfef76dbd99025f159a0a55f665c305776e65de4cf259cc27e6a93b59daa7f235cc9d633130430cac54055b45ad317ba4a1e0245d2aaa7ef3961aeec14a40fea35633ea0da74b40ad77c4f3d8fb1e6724d45805477c6a0357ae6b9f6f2894139affcf69d3cc3462c96d5eba76777654db00c976d3eb9decf299d5402e8d50d5fa2b447c41c21d1f7bdf16eb2d2d8f7a825a3f41051433f1d72bccca5fbfde337c9c8c4ad1c8ede9f802f01b40e31c94ba8708306ac6f314c2ed05e50ad68bce03d48db6b9e07e2f94a99d0059576c0e503e5528aab0218363545acd7dcbe1a396f674976726d3a03ebb237b6c8c72882927cd74e60e3450d94af2b32b9a7484e1d4219deea2432738cd4c8568a05c731f20265008c894affc302e5e7d260b002e5455d1ea7d61757d4a9f16effd3c042e84531c9f849e382108963a49505ac58474478561e6c80c5f2701025c507736c4eb2fd730fa180999aad84dd6d9287af1128e7a99df96be944349a6524c21752a6277571c08fa60b0c53ba2f2fdb535fd2e114a6768a30a04b808be654b1f3bdc9a1167a8492d86a80c4966f907001c9642712464869868f8bd508f5435612645e2e133aa49f191efb102e259deff606cd1a8342281f40d201c53a7498e957443742997a0834fe05f58d14b4ec2150b398f9e8b71e09d2ec7f77518d8f8b6e0c426a000406f1fc9b8ca2a9f28c287fa0e6292548493cb7e8c9468882409ad8d5f62f4f23a71307e9b44c913d7ed3ad7931a61ae74315c39f937b4aa261b58c5ba226a3187ecee06fbaa24bb7cc853335c274d9c32d8912022bf960ce4b8ebe4ad6ea413a3349ca7d951d101fb275021216430e947edfedaca6ef34a880230da7bd61d142e86941522e772a4c9dddba2f8030dcc46c58304c18a5c7b5b7f0f81a203cc8c1858818378a0fb73d431fcd0103917edb2e5ce8f3445079964b10fea60849931c200d4f573b3151d927ab84f43f91c22a0d4a5ba417d978fe0d1600abd214bd131783dce78525a8539205b8f12a2222aa8461489fdb888d946ad792d5422bd74db07e75612b01353c4b00ebea42c0c710a6e24f16040fb6902fff7a2b70ab931edbeac8ace3368ff7bdc0b80b136bbc65972f3aed93d75f1ecfd8aaf0b4867656f708129dda7d8636c50d89ca117781305013526cd2fb4cc84b30f63ee30045fd80fcdb23f168c09c502e7bcc5d1e0054a4f7d179bdd5b0db8ac34619c2d5fb1e565d1e026abc8e17bfec610356d5e5fdd15b976ca9eae299ed05031fe28595a73b9d2a994033dd1b95a45d478459a6354c5a37559716d8296fc7adbf88cc9f0b134230113dd204cc5586c6c001dfee2aa0024f6ff3f3450981acf8757cd5b8d242fde6f0ac624c511d83d0b78a83c8e7c30d0c008c989113dabcd2fffb6ab22c1ae9c0dade090eebe251a2bebc9a8b32accbd1a49b6248704dc7458cec708075510f076e5e9f0f0d0ae13eeb5969432ffeb076d37c807f9fa17f1b95bdff4097c2ba6c2f71378d70f8409d88ab5052e501ff708db02e10a917bdafd96d90625d2cb74a07dd564146be68b60f364dac050236d4214300fed27d44e6f8ddfb1241402e03933a5764ff7bc2707f2fc06aec074ab42ec8e87f6d765c260ec648df98e55d13939070cfffad76c887d5622ed5c24cb32682355b589a880ddd9ce75327e2fabaf02d6873a374706cdc403a0a253a60120ad052d7a571b795a3a018f81fad4c191d70360fac0a68ae4beb6afbe63fce21a841db9a2c2d1f9c3829f7f2a15069ef2e1811a281791dd4d2151506925799aa26a2c3c66068240aba75ba604f54dc25529a482f940bce7f791045d0180cbc29edd652db4fad6fd12eda44f6dfe2e678378f8f3126c496bc8b06045fec195fce1957e896f34f70b3c4ca2bd89268a8c490bc36b602c36cab8f98798257a3c5992580fd559abcf3f354248f9df80091d13be7a14a5d5ed96fec4727e778be7efc081ec145a833cc6a28298218306c40df28ba2a209658b3b888f8d8670b6950c174dde72513b5611ddcffef8966bbd6f26a005563e9e710aeb5f0dd7737696a81a51ea5cbb5e173821fed32bd3898adad412fb8f3b143882dd33aa71babf1a6d4eb932e0c1a58b5674b83bb840371de4b753387ec8059534a57ef4b146fcc16a7f0d0d2a574d854ba3a61209278a9e80cb5c948c11a54b228394f00868f1c0cadfa39ea97d6e1b08f3acff0221147b0718be0b76e6597b25c0df3deeb3c9620386952fb796014cc9c9c8b332c1c42b342628af721a0df7569c4e9182e06cfb2944855ed9a5943f2227738c5867ec5cf19bc359877f68576bae1305ab41936605de49d84b45aea42746cc3b4937040c99531f39853bf15cc1b2831b1adb85a3bf8e4d89949ffb573b039fb0f1514653e768a0b3836a74ace41189b2b4c9477a1a32c32d5483c2f5a0a962ca27a46bfcb0aa089e7a511ae69d4ac0deaf9f555752d472fd135f0764ea7ef13091c551e114bb6cc65a851ded2fed0f0ebeee1c69ba06659099f1de2790cdc0aa4688c52051879072fd4cf089114becfd01ce3d9b633b1c7c96d31420b7a1adcb8328fdac16751d45657d3fe2478753207f2eddd82c13a630d9c2671d312bb183a91705642d1ebb8df52b6884c4e5817e8d0fb1a7cec94db995c57251fca46118bbf75a0ca757e5323f4909be1197ca1530f956d40ad6195db33545110c98da84490bfb2ba898249ec19071b41a8050c5fa581eb5221cec867bfbde9f75291f6a54cfe90fdfc2abba076a82f9ba364678fbb86793e8dce61716688495fff27a414dccc7a5240f0edc02d68604582125ebb44f351fb98336a27c7f8431eef24c5d12578c5244501b73be5dad5f040f608997af817eec348ce562307461f99ec0cea5cceab6cb8b3f0af7a5c07c32a070f7f5e0e2e08086c7fafda3543397a89f59d45b5e4c29c3cfe846ca2482040557fa7ee26c9fd54e54a9a896072c5f7409743cc2ca58c3fbdafa0c49c3baf76dbee5ff71809f866cbe9d5bd97d82e4a35b9e764b01281c6fc1324741250f8c26d180d6a0102aeea67d45c869c08964bf543131f6bc4ef857604fe4ac0d63386e695356cc6fe454cbe422695c35fff1120a306f87e45daa3d6d955756e6642cc427246b419ebdcb79412814bb4f73a71a9d6712de2bed284b900aa010e5819479c1d362b7c335b1093c82c1572d4e56a65f387b7c9cd0e94c78267d79e1fc0056bf1209524de19f73415e07d928d208600d58c68bad4a81c998f4de170e1cd27b5d46e2313560fb752b894774e92371f935aae6f8fcbbd974933991d2595dd6cea624799b3f83e199923a9150b02414fa7c9c5833086cf89c14e6976e97389b272c958ded6454356cd91f5278412101524002ce2faabac530830f51b33ada896963c97b8102a5fc029bbe4483284949d9d30c0fb1cade35076e90b4a5ec43b0f17c2931d8c24b7f8b98dc39976935df62a04b20363b2db6859a719313fcf339ba061bb921db0c7ad6aefb736c3d6a91e72c4feea9800805bf8cd332b6eab79dd1520d295f4bfba1f1fc6bdff765d2355d69d8cc6e44de3af8625dc5eb4029bf3be6783aad8f91608f68ef079ef864ab1d63eb9197db1308fd587f3c0cc741ac021843b7c63efcf6529802ecf17560a6e757f040b3bdabfb8188e260303e1fe807d0067ccd395f3502467bc299be50f8c7497c96c96cdd7a03f8c1f641301e84ab004e17ec4ee122ca1649ecb52589036d11054cc1c4db56b9e11eec2f9ddcecc4bd6a2559e3569d13a5692eaee5a9fd5d7496f453f343fa3c9108a37f92f0b8893d36a37ed115f7e1555f86f39a055dc24b686efef74c96094042d8588fa8d2f2ed66e37d54a346999037214a064c7a2ab08dc66de774aafaaa683cffe292b8e7bfdbe61bab55763daf1c78cb93596dbd11512008641cd5704265ebea21af868e9f2ea7f7bdfd162c2f1eb528a1336c15249778a44be2410729f392b095a029f1d9615b0349a80c9bf1bab82b00622d57407c4591b334adc2042d2e25362ea62fce1ed571c675af3f50f00cd7dfd7c106e960fd3bf53c250007af7f2594bf69b9f816dbbfaa890d1095391f24fbb154e400d1f9a3eb4f934dd608d469d4980a9eba41aa3798fb58158610cc69a2b603f01855fee5a50dde2ff30be64d5e17f1a2aa72d1e6658c843cd474d2fe5caa7b9b8d26c00f798ef89950b84fadf83611e435503e27cf35d8e65b4561938166a0695132f5c8fb8e2a57679e319292c520687e474ba5de7bc9072263b30dfb49016b36a8707a9c74f760374620ee2d015b3cbc63bd775fa4119883a10b0880de5ffdbe6223a9409f292a1387069e5344d5de7d99accd58c9c696d8ec6663de1802867b34d9bdc591db9561e0a3672adfa946843ff0d0aeb775927cbca3d215dc837467c2c0239b00f2363025958b68eefc310f154c6c67ff01f7198e46e7a8a2a26e5125d35f3d81c75a9a06160ffacccc6bbf59ef0d8d4367d0a2a2647265d35fbdb5df5b4a8e961ff2cd2c6bbf31e70d8e436750a09a3e16dd4083576dbc2886bb09b8782c35f9a9d3d8cc212532274dde0a7fa60014c1ade38ca378e2fb7d262ecd6b192f3dce02f43bb65f336eb65a20d9c355975b9e7dfaf84935490b89caa28ac196687c5b96da8ea0a355718073bc3cf226435c229351d5442c6434fc02e1201c7fa3d751487f54c08d846edb2357d91779f5d0384498b83fb7800cfe45abfb0cc9759f860ebdd2f55d5e5941a79291729885082ace405e0f14a7c156bc13f2c60bb3e918b500f83722a17b6a0c8e66d3b341f62225c93f92c716d756f47b4e1a5ed481f12087e6c1637310aaf8820d0a93490c5d83d593d3ae7add8abc546b02fc4771d496a3318e5b1b8eebfa60a3e6056da236582e2c44fb2b84e70467da09ecbd8dc99fce8f122744e184b679d5b2dc8cdac966456fc46ebb05698ad1bfebe4bc202865c909039881165d1e743c15d4d696541fa653c98ea897f8b4cba2f99ef74ac10132353d6e45c889d70cba4903c7877afb450790ca704e9fbbb175c27fbf449aa84666473d005ae905f04e74638adf70bf7fa3e0dce771d6e56a95cedc5712525d9557b903b79196c0a4c6c6caad8d15ba70b37f2844b39362c6006fec24bb4c4b8d1b88b2adcc6225c96907f6db7913fece8d531704de7ef88ee91848aed7df3f02dbb1a30ee17bfd6966f973a765607ca40fcad39222f4a40b5e29d8006b65162474e18b26b11b607d1144e535bbdc4963225355f4d545307c822b097374bdf224464ddc66366047425941926c36f92af91ffdccf2ec649d66893bbc379673f1e02ea2b6f6210518128874b6adcb2316444a2c2fd9cc6b760dd2df5b16139c4178b975277f1a2146eb1098d68d0c1452c30b8729aa875b5c5c81fbdaaa773a0119379f7192d3a8bcb788833f4f23e3139d596a8ac67a171ee0b8a95f25863e97a8a350e8ea13ca3f166d22a683f2253930fb287417da4df58e58724568ecad53f4781d13b2a3c430f46abceee0d113db80efb1113058b374e8dbfc6c0a16ec2dd7287459c10189a8fa310ce653a36c34ce781bcfedb0c3ff6166778b380d8238aabfaea8795f1f9adfac07cc0674e0c408e7bcc0c7f639a62e31b4779767eddf86f009c12874c168605f90ab9b4f106ead320f97cfa3fb64b305a438714b07255410bc890da28c24a34d84a96844ff7589e391b9ac00d4d802bd1903788c6b080d36e44af1ca2fad60b94375c55ce910ddad758f9f82205ac5bba0c04df78824186cc1d99e9c2ce7774e9141e6034cc4826d7004591b2027126ed214a4c609042abc7cb4209ad59f00788446ad85ac9f1625861a370c071d3bc1621ce238e3cc9ba602c04e4a9ee81f6877c523e42f753a64355d04fba2fd22c22126544fd6bbcc2ce3db9a4e2bbc2db24b39ea39a733e52bc441bc122cae9192fab6dc0b6893d78393871a2d830eb4c53e739f37a8d74bd38d4bed14e31f65622a98ff876df2e698ac0f7d831ae36009ab50ac105a600d4c3807018a6cf070b522eb357bb8e11de24e787a14f5aa6bffd05475492628c7120e7bd8a3d5a490b6d01bb8663d4a4465e80afc28c3252202cc057f1479a54480b5d97708c5c52512fc8d7b072e4055cea4e86c29f226537c663d6e4e0ac283b088aeb7fbc44cb106f17e3a52e6c6fc6096277fd28e87b48820981deaf74ddb2bd90e1ed50e61d750e76a4cb4a7f60cf42562b909f4c1a6ef2911c6e7e2a9c044d9d29b4960eeca6278a54bf2eb692352c5b2f765ef148c43dbe68507b9235ba7ea54360a9fc47fdb404ed07381c6bf5beec6aaf4e16102eff1dc5a51e8b9a66ce40904d3cd9a9e867a63223f98476d6b4430df51ee672d600b888a95263df4055ab6a95ff142b15346910b6d11e430ce3d791498f22378460e8e7574105f9c6a4a06c66b74899b7c6a401318d498ee073c9a450ddfd7f747202438045472cc8fa675dabb8fd39b484314dd76a6501a68d14ceb956cd5a982ee65a5d882335bd281b674108b8566486953cdf5ad1b42335f3d62a1f8f5413ecd68a4297e94ab06d6b6590a41516c72cb602c19984dcd70a52211a1770ad920ed1c242b1563555b55a664c62f8a815cb20a92c1372f5b4896059abb0c7481a65adb22349c13a592b5e1795e731941e6bb55b1f8395b1563433492da0b54a5a68d3fcac15d9060eb59db55a7768136cd60a41a20dffcfddced6339bf5bcbd65b44193cf0c2186e79e900b004bd8378047c4fb0d54ff67173e0e14677002b6c91bd9fb555057af06dbd8dcdd3c6cc85caf3400832e844fbc21ec10076c65263bbe6d78646da8dc48f81c4a6cd3b23b6802d443008bcd5e553a1f2ea5e16e07940467412236d2ea4acbf06d2e76303c113c1a0e07a5257d0a216db7831c214962d66b334be2d15c1667f865496ef9bbefe5809ae708589525517f83d6fa56fe2c89b81a786c0e0ed7c651006f176e561ca6e7fb6d56112d2cc7362b750f49549b95267de8e981096d56ab7d8090f10e9fcd6a4fe928dd56f22ac324af8dcc0d9749bd5979debdf43310f46615e103ca2b7e63cf9202c60eec68934e3649bac8c2d5c366e5e2bbc26615af310b9b95d747019b15cf3bb8b5227e2fc3f2787e26804b96942e73b9cf8bc62fa2c5bb5dc809d44bdeac04d757c85f184a96b4f000e4b15f607a9644715480566766dc1a62799a6149ecd120d8ac468522d8ac2c3c6861b3e2fea41896b4720d4003e82d27a1eb3d2007a1e18c250705bf608106c93a6044b31aee1ae373855ca5a4b8efbfd2bac732fc59356e9f3f098ed1eec926e8a4b98aeb5798f8551256425c09696508a52d4f6be818c6581a1cac941227f532cf58a8f0f41e58ce4d42259e0d06cd63ff970ca60b4132d744d42b95a65f36bca74ddefe6ade535f2f2ffdcd49ce1a8db858c313c676f0591de453c4870ce46fd460ab52a6a42841e23569c760c2ed2402bd898bc5cf544fae3a5184e18bb70de1a48446d6cb105b788916b3df5153adec54a836e5d9c034fa8801cd2000af7fee05a4bd6755d32245c49a21d5072c97ff2fc23702823161ec9f3ab2f8c8dd7d300beefd34aef801a7ae075241818331d1da85c042a20ca2903f5c4abf8b5dedb2ae3a33418c287cc1e53a5db45090d04979634fe6ed7ec09afa76253ce5a075ae1e277f94af605c1e380c9808fd73ce6c5b7bb58d5b4bc0ab0e7c5676721aea90688c89dfea59fefb222f536f07ffbef8ef0848ecc74ee091b415dd38e5b353498a8bdf775e9caca9c53d2c0bdaaa8dd11245004d3924fcc35405622524442380435e31d90f9ec20ff98fb4362fef6ec1baa0050a19230581457b3c33313ffed840042e10c2b35a4d53c897b21a4e65ee172fec48ccaf5e6369603fb5efd2b9559af8c958e87ebf2ad16586518efb2b05094a4fb207439bc2bb04704cf266899b9cac12b5771587cb9de5a3a448a98f0fedf65d603023762ef44d934e2a69dc785e30d8397027cf6064953d303a8d6a37c75aee1e43b43a5be3e75654957814c1b090381ddefb1c7477a7357eef8a8ab2c78adb8022b6d96efaed600ddcf7e1b2a48e7f71b8a613f6f5b60f6f7b0981a81da864a1c69bcb6290a7fc6dec389ea8611e66271150744cd7119877a2456ea094bdd59f51cf238db4b4a3c3df0260390225782dd842e8cabd59bbb0ac3911c8c18226daad6e2a14c83ee503030bb100ec08ceae6db8d603c180ed701d15cbab97dbe8217f80adc4ed2a42cf63f546031060519355d418aec35dbf2a3a5f4b6cb31a53bd9d4958ee40f0bdf74aa682f3692a932d413f82777a416df7df3d9a4bfe1f5a941f65e87430b68abd762bd09ff31ed12ee9fd08e2193858011d5f108a4f89633d7cb2a2e5d73a8eb8609282acb2e124ca5c228450bec5ef3bd2e554e3a71788c4f882a39dc4b802423ee46559eb681491d16d82dbbf2aebf052f1264670892305c4a111222eaa8972103bdc6b76f350c3386ef0014b79e32b6f64119846ec93a6d004e9b54260f4b8d02292855f1c9779d37e735946d56c14ca8f6609193697b06dd9dff42932af597d1b51ce1a64df093eae5ac09ae2ee2ac2ea1675b7b784fc2bda38fe2ac2e83e7d5adef9b7b2547fb2626fafe44bf6e1a586f37c917e3314c0a2d63df79f6c5331252abda43b14e210ed74443f942806a50bcf6e195d66db099dfa1fc70817bab2eb25cd9e79ca3a1968968f6d1c4c97d0d4d294270c7aca9054173da4bb8f3f02812bbfc1131276ec65e2cc219596729aea1c3882b2c301bda0f0b1b072f00e1d8843372604f5012d1618249796f43b087e46782bdcd92bbfe8df60ce9ac6379ccb364eb6101bf6b47ec93c9ecbc70d1cc6d23892e555a1198768addd2f276e07abdf7d283971bf842db7643c495471fb703e28f7c6dc7669ebf35ec0cbec7a53549d015136e426a4bb54e589a9f982d2fac5af52c18e72b640b4b1ab18dbd7927efe8b7150d3abea948ab3b2506892632b70305c517f747140e696289b8cfd3a5d9ef822291bbcd4d84de3812e333437b91be3f0dbbb84a2b618c760dcda8390f8b26cf40b1d74a1baad5d34cf76c1636d6560541a43b60c26953174776c40b0fbe53379e60308ed4dc193343a05fc132576584858ef109ef33728e8b51db511dc6974107604f880635a0377e0c59945eb2270a4e245df86163282cbcdb3bb3230537f64073571f88e92aac2e505050ba2ea7a85818d2afe802b86160732bd756554e6217ff687c74e2733467873f1fc2c6a3fb589140db351f655a48059a9c0fbb6035b8e3062163cfb18423b082676d8bbcc68e7cc90aa30fb69b5a8b36e8111a5435373e1d4dc72fd62699ebf5c36dd3a3aa29dfe3629347056e3b534b0fd2342436f022f733ca471b3adac64f256070984cb207a095655963d774018f4eabf2b3791fb7efbd199a2b1e4ee2080cab490ffa1281749fdfae2f8da9b220086b262a0b45fba818e9c2304990f544996619c2118481a5c8404d204e03afea5b32ca8b408708e6bd6c88001b84b244ff0536f4dc0e35fa00a3250a14bf44616829412a8fba6b06e29f43ae5f6243e04c00f2f9664fff98e585a966e25779b6250f7d8384d45974e0fb8c74950763a618b7ba83c84dc114132220a719c22a1e870468488d6c0c5e936cd34f93125d193f561f4e58881dac12b9c4915db12235b03b2c9f81158933f03bd7bd03c79e0eaa6c1d99a7680c040d99a2b88c0112a0a4884cc4434d7bb9dd612183a1f3e51f27e70a7de0d34357ca1af3e86c3918526f17257913d3c9388f08bcc08cab9d8cb8801db1a0989a1fe183f8904763545e564541ddd8964a0fedb988683741c51b034c200e1890c2141b5d3cb415981eb2214669b5184c753e0e635b015e7fc6863fd4cc3218ace432f165dafebfb20b426e75879ea8c22e736b49181efba7909bf56cc491c07e3b28b5b754df2908fe8b724dfab66ac97f8705360db2cad8fcaa19879d1fcaa283f01efd1cf04986b6b55d9a62e6b70f46cfa6fb684e6a340f0a23594e7e233dd722608b2d890abc2cbe0a23e20801d06e7f137bdf3893c18c00812fe93dd6f8d641bd0cc12b374d3f52a8339a2e25bf5b54c3900105f85cc88307b6aebe2a68a1bd7a5c84f952066dc6c054503296c80de9529993a8d68cd13932572fff94cb4dd28d30600f80c54904b0000b3a64498653f459431a38dbec1ccdb06cc86d75e9ba508076d2a3d1d2b20b83b90fe8e6506ba3bd5ad347a39655c1f62de1db445c7c0043230c66e85541d099cf447802b3f4eaf1d1b90c541e31edf94f33aa49f81d367c7b24971960bf0d15bf57af3c3686c90725e4850528357161540c6d216b00eb552760386e588e9b0a2412487d5d27e641a0c69e946332233b870dcccd9919971a7f15cb9a9388dd306d9e0219570d45aa99b2b20ded92fb670eb3aab9328899840c911378c2be72510bf2bb007f1a05a17c05e002d9db862c26e3007419a2b16c751d3367299cc84b0b82f1ace2f1e0a5ee25f8105350d4c82a2328ac48d78de4cd749d4c14b225f1c5d7f0e40464b15edd0cf07c6e9024f774fe17cd077b38d902c99b2f606c32f0fe41d79b1898d87739ef61e62b0b000fd3aa45d54d811eba087284f1ce3ccdecec78016afd18cf4977a976f9e986bcdc4bdc2b3c6f2bb90cb4cdd5a7c229b0991ef80d432a9cb7e9bda89ef481580a2b8c74ac090a444a4b7458f59149853f65be1d53473da1961c1d7124e48b16854aa4dd0e5ec94c5d9889cb0029439ec9fff1f589d9574c37f4bc122b9e7513ea44c3ff1f9f3cf5327b5ff0cd9975d9d431913a918ff6b47775f6eb32a48d506f1464a368f50876b03eed2529b40ffb4523057734be3c5d28740fd120a6198a3fb30eb8f1557f7300a86c1565ea5554073bf7ea5401315f0581cb85c51853a546ee21a5ded4d114c71028846f475869268744cede7f247a05352bae8bc72b50b0e43293f33797063dddc85104220a4fda915cb7489111de5709c95471c6c095b844a8b36a0205989ea9cf7ea0a4e01cd49957eced99e11e7037e3c612afaa7866da250445f304da93310fbfc07d47299025e43350930435e119e844a506caefe42c07ddb169301bc396fdd1497e886a8da39e1dbd5ebd2726110b3ec37e92c1f9235942386d6afe78f55835fd68d9fcd0c42b096c16484dc6688c0805f517811a5e2a22195b5266420829588c50beb1ab58c52c3e9d025da3a0215a8c65725c8e18c13599a9441c500515b267f26707e2ebd3c792cdd9c5fa85fe61fe84272e92206043f4467398fab9059d20f301506620c59437b6492456fba0816d4b46d9257c017479a4592dda2ac4ab681b8faae77ad45de049bbab21f0dd0b923ac413455ea7cb687f0377c97e9f471b1125f349838e41e066fe057667e842b1052489121b11010a73828ae4da4d4e40241e77ea9c0395fc5918feaf15d4acc02295c18598e2426421f8df693493a4b138723af912099333e8d0af36a517f85b8794a4689e65569deca6969ef1f6c774a73e94d4b3dff1060266729788c9febcbcb3d9665e17349615a332bcb6f96aafc1fad09bd68f430b6693d7abcde8d6bc237eacd2cf9c9ed28fc0753fe5330575f40a8e37029d79f7b1ca87c902a153f4154454996b5d26b0d4d512f9ea6b8ca181d62f2939ea626476f3b5e6cdb696c451768b5913a1468d14ece8b6c54626b0eeda4a24db3b6c6c7de89b0cc621c9623072b44b38c8adf27bdeca60d69e2b44ea46ad5b487dcba56946d7ce4acf1fb5bae8b6a5594820b4b114adab8b9957995e7b5caf3eec93f14aa7fd613973af2b795af12b5c8250f27d6cb4efa484b6041b026a75d0965abec8d022a33a709a2fa315e37eb87d45715a877566889e104ff3222388fbb1c17f793a175e9b0bb081279804c9cf8e6d180ec25177324510aa2e9b60a827976fa2e116e1b13c88435fd5fea0c9d7b493e82b6ac20393d107f0d18fad251da2564ea9f71ad554d3582d64a13dc52121f45d92a5819480718413bbde08f535be9f7d951cc7f86bf6132099320469d0805893c2afbe48e41c0e2cfdb0058499b2d260da9f728be6d1c0454045fbf55f8411e0f936d479cd326d4389394c94612126ae650fa003cf2cde4806e520e8cc6432349ca4895d4e582d90cc0098b68772c0775094a969751ebb9bde39af5a9f408eac4c46535552c768b714a66d0bb298f431f1fd5ed29a114abf430a643da9cd3ebdc05c0807f7f3e2a4284e2202b32713e0ae5189989c85367b9561af5b6a8e3399e2c258a940a25a10a7affaeabeca43d851b9d14dc7121bfae3293c44685f04b85bb3add3d26cec536221b8efad0d104ff67cb5c0394970466e4ab1b732c1a7da3998a2018ee0ff4831b0551250f458bcf69f7146e657e2c2881297076fcf2f7701d93049a31583352e747ef227a3d31f2145f9a9577a10ddd37b92b45da5d09bb2875d36d611f2e92580904efabcbceca1a003cc5645134621e2b2040168c6f7d08a647a25965bbdd5cb204e81654ee2b26c8407d1af449edbaec079f1340dd955d03ee4ea3365630aed519d9276fa0f0aed824a105b1916a4f13bc4b162f8ba720f53bb75d3df1932a96527fd4695b60358b5280d49c941647655b0053231e554a4081104a6b54ebd137b5a250a24acda9a792d38cca0efaa59658d41451a2188a0f79f645cd6ef855b98154201b9b1771f350061bf3f2b5e1f42b6e8a56d0a63bada8364b168355453e796f3e7e909baf5e85a8b917da4cc8fa3097156d237f4b5ce86451d5c3cb11414fce7a0e556248750718c017ee9787d19d18095c06b33deb51a8553d9f96314186dc617de1c4c30021a0fcfc1fe98b4c09a1fb11e8885168f646f1844a1046c981eb1b9bbfd303845850b04f8e0663ce7c0ea9f30ea3f072240c05b642ecd18e8e3d73aec944892b11368bf3a588c352a334467cf5201046d4f11079bc8eac16ee8b3d24afe1eabc85910f61b86a83e8311d79e70464b8524eaa818100caebc7d90437d656c2bd865bb220e34ed2152c1eaf04aa94b3cd32cbb73276e28cf356540552f7bb47dcf41d62b1b8b4699e6e30d1a80d998c49be2da816d4ce8c1fcfa01b106c7e1a7ba5545cf423f3a8f644069d3cc2404231266362b05aeb86b72d0be86971fc2045041d522c8ace5acea695b6068ba00738691478c872072510ba4573144c9a69ab7b3621c11c9f83585d3cc60bc6c4ece338d114b22c5a15cde0df9c218545cf2b4229a356759844ced586a70bfb0d6505486d80d16186c02b44adbd424664cdaa4fbd2aac5d00bb960d517812f09f519d0069e263ed5cdce073a23bd347ec0c714ae385cc9d51a40f2463b840cde75688ec1db3587257827cc221c428f2be29f5ddeb5c0d022ea939a5f4c9e639053664731f5d1ab7ea7988651360d376769ed5d9b4deee9685820d517d6394c1474304c008afa5a0995c4f1a1333ecf801703254242c35c80ba1161f83b46864d893949d4950bb6af4e8c2a80df53203c99d16465d9d19b10e116a5e4c2ec03dc64b3c47ea90fc857ffecb926827a2221f6e85248732cee4f0da8b75c5ac9e986adb503930596da276fa0ce3f1941f03f868d4e377b8436ac658450331ab43a39e1c5503c960397f3d584d8c506575780dccf8e57f2d4953f8833a2192e64f251bef995db2736b514c1503e739780c30192e2a8191e3d9647fcc93151590c7013e4785df7120043cd6eff1f4ad54f87d23948955184f192ffcd0648d13e80503b3a6c45de5100c23ebf66eea34782d83f0a06e4dafcedf0470be2936f7204af11243f1b68f22d2eb3519682240c22e0ee88faab61a8b7c7dfadc7e9cddd0712c0dc294ff775a27cad1943c27279233926ee73f1df9c1cc56b74ded0fc6cf900f818b51da8f28ffac6d27cfb8edd53ec42dd501d535dafa7f9db050a9e785a27d44918ba210e00f6501b76ff0c8e4adf625e72ab49d0c06e43885c323c9d1c21914e72288333ed2758d31dd215a36375bb9bff0c14b00469782bb6a63c0b80bec6fe910237f62cbdca3088d376a1b837d2e83687acdba55f5ac90bdf739961fdac72f8279f0fc284a2139d1ee67287697c69069c7a804b17d7c3dc58099fb385ba7046122049fea3b1c2505ed30728035f872b8fe63a76525521dae771bb4f16725c4d9e64e86851fe9ca19861c0262d5ea3a5d4a11af062357d156866c302a4338acd5bd8817032df9862f536db62d38056a1f597e44b4d0a393707466cc38408ddcc390f13afd6c969e84ef5ca54e73575914935516800c0ed6d67d620ae9c39e7f09cfe2f11d164301125703446c98f46455540413881549099e39a67707f74ec12184471243b888ad0eb13053e0f23a4eaf6b6d953a128306bf710a5154f0153b2ecc4aeb3a94ce09c6e2d778ef977df219b0b6f666b563b30bf1e5ce27426e5d8370453af467226c3df48ba916ab2568801043f3db1748386c616983208e24a60c0832ef5c5964f2c6dd10a58e4c5eab87c21f9293075862a54c12b8d01063b481aa5ea4e393a4c1a7c083f8bae4b1806b9695a7947821a951327a3190e759261b3fb08ac649d097845c2478dc26c2708740ef855645c578c8ec0afdd1dc3947218894f729d95cd3acb5458178c8ac1c43a5f0acc46d69f541ad30305ad123466cd51115096d71ab7201dad249c9bbc5eabe140e61d697987d2103ad62195d13f434d797b28c435c5db0732c637e56f97c99e6845ad0a05a4b56ba7015ec968d5652ab0e801c4c25ceca3799acae80538d31ab5864ae7253c2b97bfea671d27c1c046c1338c8ea405a06641a8f0f851566b1293b7cd5e95f30fd7b78f6ecd822998bd4b88f9f2f608e651f73bc9388ea969792e4a2f4214389630282b4218e46529d5075028221a7a85a932ce52c73979700c74d42036380c72db5f5cf03633fd0a9a0fdb9541b806991e9fd92e2c03fe37e7d810695e8fd37c5ed3c40a7d357da1f6310d7a29ba4eba548e0f07ea26650c39ffc92bd3310b28ce70d828cf2084c0f0f92718a80ca6b984d50eba72c874a217da106a5f2191eca010221d742dc6844018cbe327ba20fa0362d2a90e6a1e58a0134b72a0ae1f6714d3b44dabb20ad887815a6fa980b600fd072ecb81c1f87c6bc78b41f82b995620b0b822293e28340930d893463ad6091c5c541514f41f56df6574e77fb3ab0132e0a833c644c593262d133c73c8e3fc1a9937723c4787b03a99d374fd51b3e47bfe9c2aaa09e743787b7d0b88eb9436e02674dee34904b6df54fb9b35731673fb4bf1665abb55783e3f542e40c356c01e06817cf48ecb2e65bf70eaffa09c89f708cf26d37e8b7af9f278e39a87aab2f0f6667e2fa707326a27ecedb9214cf448e2118361541a1bfc6255a7ad153fee723cd97aecbf4e45fa609c1f4b78645ecf553db8b60b3ee4ca7f54fe49cb8c87324ac76fc050f9fecf3cff58861262eed7c0b3e76792d3726857a171920de39d0eafb9e028d0ffbe87704893023957bbf050d3b2774cbc594d1dd4a5242f21c88759b17d0ea23cd6addbbdf856fef0a975124d7a803f27bcaedbbe2ab6e5611d0cf7fd145c335cb450c02a6b889cab5a8b0bb47f79a269595fe53c71bae1ce09eb18bd4de80202eeea4a787d74d911ccd56a64cd95803ad5dd8a9dacb0b217a9199512495d7f62fcbcc04c8575874d6b073ce8f687262488a9a75d299c5e2d81d8b770b515f631e0b41d3b9b6946ec03a755f689788328473235536be192552f0d31fe028a00ddb513751ac2fe5f7108075dcc18cb3277c810444cfb6b56a44fa604c3bbb6af59e4b8723d5f5fb3cec91bb67f5c654b413ec6c08d805396193501c78cde8a4a04c9c00b85fc90e82182e38562765dafa8d12a5f5e901a7833fb4bd3c0aae0ea2f0d18cb189d5310de7254d9ea6791cdcd0cdb279eeed4956599586bcc262f51470e8bd2a1cff1e1660c6484156e4c27d910900df561d1dc30f774583c6e7bd55f86dfc8146f855f40ad5a1b5119d63a48dbe555383ddbd25c71f89e0ad8dabf6e150a88deef347400c1183b5acf17f7a85d90ab0863a7c51733f0e0ce1edc21e51bd581433032a21c7a257205a1da903ae0980b1a94a54d40c6193424fd8a0a9a88143445431092a8d19ba20a878c2172511ff969241447223c40849bb29b1f097021dfa4b76e01f1b9460370577f008ae1935e75ce013acbf386a4f36dabdf74e01630bdb0962095e1705c8d3c1e29d7341a3a028a5295e4c5722e241a1a204edd8b163c78e1d2f883ccf34caf1623a0f803c9cd0299504d883dbe958de11cf7358002e093f1940589c74024e460f2f243977029850c7e286c2ce05204f13e5ecb070ab148c461f10ce3df7563ceeb13a16271376a14c2a89d22828e58218a32792e8ac10f54cea0560e74d5942a78344a58be9bc8a952e5c91829486b06b24c26e0889aee61ba211724da36371deea1b22115d093b9f924a02e4c2ee58cd79d735ea086f0b9e15cf4ac7759e67f2be26789ed7795eaa8928a630258a2900610a50583895254481480798c200d8c2619c678707a36aa1423d4145b9c1bf23daf5b5e452787af1e22efcdb401fe0c53dae1485632945f17494a478319ef742c5a285857f0e03c689050c16a38ee9bc859592144f8777a5633af74a52ba17aaee138b9547d4acce4adbe8bc9085ca23ea667d2f5cc8e2f4a2c5949ee9be6eb4829105d0c579504f3c1413a826bc4f051252d8a14e8062a2f3282e543c1e14586e50f1c8849e73aa158e7a827a62857b8e3a018a09981528281c070306d7a53c7044878ee5351142cf795a8a4cc7f2767461171ee9900051dd8aeb0e809d8f5e7c321cc67764380c8ccb5875ab9d192ec365ac92c8f019ab25352f3b420fc66538cf8ed0c32390e872b838004a527674395edcf38e080050ad70cee5c90e1e542e2b1a1d4b864a46e7299fe1302a1897e1466678ca6538cc0c950c158caaa444c7f24a4f3a96576ad233de8eef084f870cf74aa5924724435582517d517ee8589ee733aa803c5f1454e9c90bcfa5d0861b62b8e7a5261e0c477909047d0018eea19eb4f80e17aa17315e78e737dce0f2e286171d4c0b18316e403d413d710123c60d36bc68d1e2058c1837dc002305306e038cbb8069b163c5c782c5ea53f1b050cdb042d7ad58b1a2fb542ebe42b524ec5c4a4e5a3c37398f67e5a3d1e9e89a1aa1e781a318499c524dc0ce4fa08f564a9c5032f2172fad94b0b80a2ff9894381237ff1058cfc65b5001657b1fa5020e6c216f7d2f0057953f48cc7e3290d80de149e47b4fabe162f95967cfe8347f288ba2724188dea463a6828140a8542a14854ed41b90a158ef2ee54f225359ec94bbe63f2d22a89139d2729b9c9eb563b30a62535a7929b6ed0e5e0692ba52762d0e570e1a318bec2bf291f0c918ae49cffd07d535cac507d533a16958fc8854b8e50ea08f0264708c66f7098951227764c0ee34a4a2b199e971c86c3f06ea5c4b492e1ad640401c34b6e04c6ca080c8cc3ac606ed0b160a2c040e9991148f484a7c3e42390050b9e6f0a0c944e0320e83f7430503c1da6212f66e42d5a9c560d43e432b4e2f1ae802e6c507953665881e8e424d20b6f49d8bd70e12717fe836783ca8569280530261507d30d852ede8205cf3705158228958bbfa838a11537c40575ac266089880545040346e732c4c3b90c85a6219721d3104c8bf398864297219e125189a84ac9442a119588484d401e18a29652019007868828e58124d903faa65899a2cb41faa874393c270a475da075ac1149d564c71a91bad40b40927b242ea8638dbc519782e86a4aab520a05200f17148e9ceb7494bcdda44275311c2ae50190c734445ab1b4944a303a18a26f4a9783e444de12c2afc404e4310d9986ba1c46343131d1e590d18d4c433c26254c43e188eb54a9244e9ec200588a3185281cf12479c28b29410947533ad668e4304455ba91bb08ea72c8e84644e1c8499df378ab52e772e3f1a0c82960742d44744b3c52aa0c5c0dc98a17c339e98a152b57ae34c7828ae17d2e37328288e12d7c27c6aabd9816ab9dd30845254c3501bf262edf1155408ee73b8224e4442e852e609c738f4a2e8537b40be59e13fa002f9ce3823c2b302a1bbc53b18437a87c4a9cc380f1c1f0bad0b1465e958e35f251f7141d3372ef0b61545e179ae542e5530a6d5879569a3572162a21ef4adb18f9048808aa61e127cf069567e506954f2984b1f2aa340c9557a5674623f7a8d034a316ee429582a1524d0b87597956461e51cf8c3ca504387251a14285772a1e6fca0c2b809d8fc04ee5e2df8b4bc95d54260f0aa1a742b1c86fa87444b7e4e533f1e0d434521e8002a2c2f65428cf591a0cbff04b51006c16ef72b07c5e4307140fe1c7f2b9c7a2fac49081f6a49098202241e1ba158f47e449e1dcf325352cdc4a46109f7bbef3b9b74ae204e7493cff563b28fffc5b25f91cb55a52432249093dff9838c5a0cbd1a726784e4f7c242924d214228c46a7d3e9a49a610590c57948529230d1c2b1a846dea25a1272a4518f485454a425742cd29411498a47a43a49e1462c38a53ce08dbc8fa7a3f87e1ca105e9727c2ea5a97489c50b5317005346809cb7f777fa91d3b1462b24dc1aa85441b5b84c47c33b5697a34849982a01c8e28ef225353246ab244e8c48abd10ab54a725a2da94991c0f3195640d3eaf4c363711616128b2a87a05169341ab1fca0ddc09841b302de2f7416550e411f97e308ed47901fa55147a54687dee5e8c28e867f9ed7a136907a927a927a925a22b5446a89d412a925524ba496482d915a22b5446a89d408522270e2c48913274e9c3871e2c48913274e9c3871e2c48913274e9c3871e2c48913275de7a49a80edddc30ba2d03bdd203c4539a59a803c24a20c40f174bc403911bd9c885e4e442f27a29717279d482412a97b21f217503c1d444456ac5ce1694144c454f332e279210a3d276a41d48288a8059111c06ec5d38228f4dc7b41c4c54c919200c8437a53b09043903785e7791200bbd58c2bc80ca1e0d43ac0cf3bad48242fc90409a96859b578c905889610d5e224171f2837f989f41dd1b1bc0f898ee535691f8d5c6e50a7d18865f402b258317a0147a3d1e8c442b5e2c5c197af73152d2453cb50e772d382042833d4b196b47c324c62782d3e6a19720a3d2bed6a51b1849e145d8e1647b9d7852e070af582526921e4dc1486906b162a849c93bcd0d342177a5af09c107a573c1d9eb7951407404ed5b9495522a93c27c8301981dc890923f44028ac11761446584214a470bee2035590482f2516a59829628aa4f0a638f98805f417d5d7f948858b0a2ca14a31453904a154a58ec5ad501d0073f83e934f1995869c521c0049feb1a28829f24a44744b583c161ea43690da406a0333c8e07ddea586c01715298a177372155184a793df2ff4ac7439507e3a8d5c482e232f0b56502acf4ac7f2bc2c849e7b9e97857675e8b1944a251797938b698989b4ea518dc9b3c18b978652d014a7d14a66e81b41cf74fe44f53da102c8f38de03302896f04edeaf01baa02c83dd139a1f424468a0660c9882e470f859d874489a77444c8f3050575242a61479ad2334320cf17543aa20a20cf1774c4f705793143abef49e78553d3e0214551d1dd8aa7149a4c4e4a0d813cde94ae89919a01f8b9477aa2cb710396d1c85990706b085da6ccb002884ac2c4a9432d093bd52aa688e36141297955c291abbc29aaa631fabc23b473fd845237c5a96970bde229b1b47350003fdfc1228305e6033b5217721c67527d1d0b9117815315cfca4b6a08fc3894c9e49d937cc9c89b4203264255d85148110a4fdc2a87a09ef17c0611c8430a497eead1e914a256560051ee4d095b5a7c5472d29b3262597d4774444f6650f19008bb269f12a39bd1a742712115838e63b1584f3c0bf48c2b8cbc2099a1094441a507514001ca0c2cccf0811a68f09cac94ba542a91a854f1ae90a87857bc2b1dabeb54a001e4f1ae78574aa922c091b394bc2bde15ee4322e43c5504d884a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a222ee0bfa823a9650d8f90c33805fcdfd846abacbd1b5b8e745986404d1e29eefb4ac764c9cf7f9e8baafe4c3f346208b8b8f2f1cf960e1f9823c27f818a148a5919f4ca3212c3e4203d8758c26524c409ece53e0b991aec6e3dc53b517c3057da428babbbbbbbf9e81021350780242e10828083d418a2778e10944218c8ec5b912a7ee7c5c1f3e7c34178630f8f0aeab5183f37c70443c10fcbee08a9c6e778d95f6b88cbbfc3e2eefdb4a1d1ce6fa77e6886fc32fa03c13abada3155f6a1a7c41433786cda8ac5a1b182ea7f831f77c3d67c6561381befc12c94b09c017a1ee0e1b7cb1e96e52832f3c340ce63efeb3796dc69eebdf5b8a8e7d1c06f34a274d9ca943bc15f39e43a6cd682d07a78994f6c3724cce7a3f57eaf8ef24c51fdd3500050c4f4250057c5b342e17ae96e2fa19e85daeda677cc3a00a0874bbeb766d9e639d351f67cdeb45ea73ff5f351168ac6fc325b6d93bd64afc77242d0dffa5e5db147f7c6591de8cffbec85956fa029ab597ad2602bdba3bd6dd938646bc18bf0fcdb446af0d3505885a42776bfc2cbe0dfff56cab63eaee95fab5597c1ff7e932ebb43cab4feaec88eff37af5ccff71b9622f1b16dfc8f8632d6d4dcf7c2184c0147f7d1f2f568b23be4d0768a7477c9a8da95bd5dd9c8869cde5c22ed7eb4b24d336c4f60fc47d9b6d5e21ba7b06acc153134fc662b402a0010d9e7a685bd963ad8d168e1bad1a33b171e6e9cd34386eec10df00b1d10006b8914314dfc64ccd8aad5849cb747633a6b3bf366b71ee8fd7ba5c36ee8f7748ab5259c69f2769b38f9fe7682bfd638e6ff3879c4e92f4c731a5ed78cb88cdf1e9b34af31c29397d6e327adfc76df691b4fe3f9ecb98cb544b317eec3f5f7dbacd4e1333fdc1fe3f5e9ff6e3b01f8292af6a615ea9d7cf99de9ffb3ed6ffce4abd859f667a2d2d97d39f969f264ed1f174fc3ef775bcbb7b1a34cd984ca69616a6b4ec326b32995a62f0cc58e70ccef57d9e8606870f8da5ad1616ed4843e3c2b69c692c07600678cd665cda984ca616b0d4846e8914577a33d02de6e37fcceb143d4f5af62763d3efdb3cd749eff4f1afd671a533576bb34392d3e6d5c22439451fdf65d6efc76a65b5ee4fdb714c92d3e656a7106b7766acc4371b39da5a77bf74770e690cdd3d3e123f803f2d7ba5feb5597d3a9e34f7f7a1599c7ebbef739381fe356f395fafee4e4077ffe86e20ddfd8386e6068e1d64376ee4a0b17163d6d08143d461c48143871d355ec7cce779338e959806e7d2f6884fb3b33bc596cb75cb94a4b97ce56b6db612cf7c6d5e99cbf5359a6b794931daaf95dd19adb9ad5e841255781f9aa70fbd3fbef024c9f9c2f34513f3b4613ad2c43c63af17af95d9fb43f82de63f521f3abacd9e6db5cf79f68804dd8dd3200bad1bdfd6fd4c695ea424fe6b451a71d610471cb21da60e990e03e4d8a1a3c60d03d89838748c3a747803ec88e9d07123c7e790ed20ea4023665c5e9aee46400f3c1c8024a798b1adbdf27c5d5a22f9dbddaeb7ddf2cb0e41f1eb6713e3afbd80662dd7a7362afebd3fd6c7d71ae0762715a9ecebc7ba7bc70b68d6eefbd0d9ad8940ddad03ffd8dd3932ad51f2d5dd3be07f5977eb80237f8f487377dfc0f9319e9936a3fff3ba2fa059eb6e1b237dddee9748babb4677d3b4702d522dc5f78d7c8c5e11c74a1d5b8d4ed206888ef56db630bfce7d72acf3c7ebe092b4dd5267aca5ec89544b73293ed0cdadac99553a92f6c7e74933ad406675d244a09b6befbd2132d617f1f3a87446ef903b9fb499558a2d69337eb6bd2886f84b244fa4be6d08f9b54e9acdcfe3d86af74716e77d19aef3ee3caed6869fc8ed7e19c4f8f95adb93bff33ef4c527327ea6d8da9ec7fbdcc74f243fc6e1cfbc232d5321aaa5592c6fc61508494e9b1b3e2e574d04aa8947ba9b467747a0bb7f68b01bc2b715a36406fa9979cb4983f393e4b4d18cdf73adac9633b824cb5a29d2643aa3799b15f1937446f3354ba3e96e6fb083e18c7f464727e7639f44cad09fb4d14c96351f6b697b909870d160e79d2969c30ecb13c6a2414e8a6e72dabc68908b4177c334c83de91eeee34abbdba57b1483cbf8b6465ba311df876b903b52d3dd3634c8c974777dd279f08ff9489696863dc6316539d08f95fafbd8dadf976dfee0ee62dd0da341ce6b7c5bb926bbf6def73a7dfc7acbfcd7aba579e6fab5276d35ea99ce9b7d5669ceb376adcc6737eaee190df65077af68b04fd0dd3f9694ddf7b17ecb549cb629e2db12dfe7f5332f8d78318d684972d2dceebc314a76374b77d7dd23efebeece072126c840063e4c2fa2341143832024c98902143bb223e8a0051479c35261618794163fad3334e9020e5981139876ac624660434a8b1b2cd0f26c98070d1f78868a30414909252a089d3a4a5050d85ea94a0c4ea7d40f524028754da762c2e473ce3b95d010e74c523ee819f9b75ae2710938f5372a094920025ce7ddc7713d9c7feea938d3f77d379d9b9c54fa48a6cf23914ca4158fe79ca9b4eaf1beeffb3caf4bc293c4a7cb1e4f9291374a521a95bc7349c09290e4f58cbcc34fd5333a9d96f490469d77cef913a7eecebdd3c8e43d5a71aa9b3f6759f974cee223151218610f8b77d8b24292243479a74202236459652f3439e7f2830b4b5e685af17ca51592249d8f3c67f1babdf312d7e9e054f27474dea76ea81bfa8486be9513487ce8f1bcc38e127a42943c1d2dde2c281557d339cb2aa873ce3955d79c4e5e3a914c9f9bba4e48a5a4e45c57422d095231f1a1c673934a6888abf19c890f35417c8ef21defe42daaae399d1ad5a242a1dcd4e2435c8d49e854123a39ca399512937325ce95b478776a51a16490dc87b0c7f314dc3a674109b5388b4a08e51c6a15e439e7dc4a4809119e9b56419e9bdcb4121af21a947b2e0bf01ca5524284e72dab20cf5d8270d9f1bc439954435c8dc94baa21aea6e42d2a21263ed4987c88ab69f193ea14c4e7285f80e72767510995845852835a297162a7c539576272959216e7fc078f45d53526958a8913487c0849ced5a4820022e93584a4554f0a6e9da7e0f6f9e79e8c203eef7ce7cbe99c25e7736791c129d58392a7234912223af79c08ce3f67f12442435e33da31f9c88928798baf9230f19ad12a09112ceeb96945446935e4351c112c9c8f569eb713c1c2d553d328813be0381e5238e0a6d800ec848a28c2f3e139a1599c7b2d9e135ac0163f7da39616ceabd2b15a5abc292b6f4aaa069c872ddf508b73dec2f20d7d46b850d8b9d75272d3ea33e21b227559f0d12114292838285250040541810205134c409182e2ca1528506e5250701cd782ef891951f03e264c4d8c667821250377777fa2e342a949251926df271324c34466a847aacf88cf08ae091240aeb9a02126ba4e26488649a7fa8c283d41012229a660251c79d3e0219172080abbe3ba4d2c2ced23171f25377537cb4d9b5425d5145e95d2172405ecbcbd295d4c3b2b8acf4bac28ba5ea574008e38af0ae9a3020681576ad4e8283bb2a9460b402e2449d15c78a5cbc1b2e2e92a3f745d0d1d46a3a0f05b491196ae7c00bc1276528457a4f054f70b5157985c093b1a61e79c075eb1c14b472bf514369652a954b2427b02e4c21692e338e738b009c79d807ba2040736019f9048aa51104f4f01e4e9d8b163c70e1ae94de974b0989c6bc2643275a1893089d1c97354948ed56100660826a8434589510410e6015fa337c72663fb03d71fcb63fc9fcd9cf0068e22b996d646f6449eb4d1bb6377c61fe79dd98a3c5912e96e1c1abcd1a1ef0d0c1e52b4bb72fdda6dda5cc65daf5b1973b970ae5fadad668bcc9b816efe96f8ef3886e5cdf8b508bead574d0472b9aaadd5acf8c2f7e9bd3366238676b779028f0f447be0dbca310ddac468cfd36dbd7dcf2b037dad09438d947697e7e93132b7ef617920e86e5a833547faa7bb1fd06068a51b47cb46cbc60c59eda53ef5b92042207c5bb79bebd3d8668de6ffe6180dae5602ddcd450016c3b2cdfb534b976b08ec86111b466a18318204fc614a77abc6172769fbebf67691f083adbb44f218013c5cb1d223803fe07023735ad8abfd58a62e336f19fab53dbc356bbdb7be463319a3b83ea6b49e6b7f7089ebd7c79626fa2dad02bc85efb4d9a68ff6dabc47b4640e39c86474744ceffcf91a6fe1faff933fe6a3a5f76d3ee49ff94879782bdb380c0ad020021af062b5e39336e3ff3c4e0f4ef4b0030f52009a425a78f6f8929c337f6d95fa5f5bbb81c367958ea3dfb7e159d3ba81e3f63de32de6b0981819164b660be03ac01c539fda674ace6a69a6e338bdce917cdafd3cc979addf44997d3c636fb3eef56d8f77848c8f83c9195a9c9fef61ed8e6c482e87e0a7d7e609245b9cfbf56748b638b36aaf10b9526bfb1addf9b141acdd019a42c6bf367fa638f64290b7c88b755292c4a5254b5b79455c8bb85e2f9c21407488dc1879ddf808890cd9d179bd5c2f7b7f8857b575a7d6dd41dd4d44772fe96e22682e9748ef8ff37fdc322567be56c8fdfb0ba816e7b523a73b3f9e516ce3f53ef6da6cf385e78b7cb14ed14a168abad500e6b842679abfd76db599f1d7e84e0ddbccb846b30672d4c0b755c3f3479cb2995badd7ef99b9849362991870619f0368dddda01a84107577979258315181091ce96edbbc3fe00e10b0cdfbe3364fff4a6bf7f38fe3d3f02475c6cf93de3c6d4f642c32ea601b24e392c7f83f76ac374080a6901a04680aa9d18cff5ad9f87e233d5b1c079a35db7f4faea5ad4daf95355a69ade7da9ffcd57fbed668d568ddf071dbd2f1f16b13c75b6395793cfed4a959ecd53aee112de924a6ae9b9d2138deba91d56218cca7e3c725ec76e748f1ac5a72c2608effda8cb10c96c9ec8ff366c75fb3622e6b1ca6037b8bc9595a05380c067325ee0840000f334f1e2e73735c06013cb85c32f27578a8519a8e6d0ad1f11efcafcd3afeb65b7677878013717f92da6a56b4150683ddb800bce5d59f766dc6a4ad3681defd69b9c4983aceb4964ece6c71b594c82dd391964868909a5c9f8a54262b7105424e9aebbf0f2543db3f104f96e3d3449d99919bf93c7077bf7407d1a000a0e84e8286033440eef20e014d90eeeed640b7aa2dd00242ab2a95d97437d9d33cdd4dbb493a7b08196d76eaf7cc9dc7f7471eb7f1e96d9c405f8be4fa3aa18c1a64845ee3df5e634d047ae5b13e2ec0eb36ce2732ab74ac9f73bb5f065113815e637d9c431198c31432eecaf8c7d7675b590db292d0edae6b65ad5b9d2ea32ef3b399b1631c86a08ea9ccf8d3f3bcefb01b384a18692b7978cb66ff1e4afef8ff784b66bdf6b4ece3d7ae9555eaffe3b8bef8d733b63592fc1fc7d3656e69fdefcc357b655446b3ade367fc3e934692a1b71c938e4bfb636b8fff4f90d2c7bf3f525cad882dedc731ecabc581d51f5b7b6ae998fae8322bc4e688bbcd9ec972ca9e87b76248727a9e8e337519751bb8647dec52fc359abd75e9b4790c0ce6e3cbb0f0a4798e1d6ef88def9964cc9f767b20bc856df366c714e86795da59b5feb41d71fead45fe96249d3dc6fa3ae3dfcf24edf1646cd6224fc628906c712acdf879dcb2ad76732d4dacf389645bebb4c115c8386baaa5d96671c6db38ff92e12b3f7e1f4ace97edbf8724e7ebbeac96330218eaae894033ab29ac74b00a5addf08b75923346e3719fa9597a850e5af40a1dcce8153a28f50a1db8a8a090a4155f2a25ba1b9374e61f5fffb296065543dd565655b6ee9eaa1d950edd8d6fdff37a7d9ef7ebcf5433fa7ecfb53f2f99ccaafaf5561a3b111ae7faf7692a1af418b812fdba9136db7423669ee3cc5feb6eb041cfde80ee7ebd07e96abbfbd4a0efe86e0606a007334f9256a4c160009ae8eef1952d89c1007c20004946ea63afcd679ea3e7d256a98fb3a63b150168a0af94a453e63603dd74f728fecbe5aa8940e38f56ac373c00804392d366d4a937b9be4eaeaf33def9632b9267edda1ee3ac9935249d3d307e512c75ba5bd660aabcc54c2653cbf839d3da3b03fc693b2693a925d7f7b99991866e612136472af559a55eb357e6e33ba64ecbb4fc3421bcf55746d2e9333d033d192bede81693a1b760b0f15af1afdff779c730984feae3e3df48729675d66e4fcb4ed25c4bb7cd1aa6b799b1e39f8d65ccdd8166cdc71fff45a017696dd6db48da9bab154b11d7d05bf57de8cca7579aeb63ff98db4ce7cfa5fee5cd8ea993d6c6ea8c62bf657a2dbdb619da8cd27cfa581f7f7d3c45afd4c7034caf74f631c7e4ac5d5bfd5a5910dec2b5cfd477c0b1c30e39bc4e5af63b735bfdc7de99e3af95184f7f21bc058339ac67086ce2b2e67f6fd956c39fa74869d965c8592279fc221d2b75fb938178cb667ca98c96656695d6acf85ea9cf545b7b444bc6684620f3ce1cbf6ffb98dfc86a3fcfd9dfd96cbab7b0e8149779661d1febebd89d9a78649c35403f562043c65993698d06b9ef33048421d3ed323692ce1edd69c0eb51c34bddd0edcd78a14477bb4b88cd91991c2136477c5629c62fda9bd3dd03e8ee6e9a43030d9736cfb8e4713c7ffc0f70cbb6dafbc73ce350a7d8dda96eaf060dda40a5bb35abf446e6fa24c5def24add7f088a5d3e7080e0100985185fa702c1426c35f1482e87e019c53493a5107c9fe2fcb33b776e329a2dce8f6a292e49b102096978fec0e9112d5963a3347c2d2dd73e03b9dd5c6f9e146b91eef64177db1a7461021713e8ee160dbab035be2d1a7bedcb050f57f66cab2880065d802dda20931aa933faf77dac0e0843a5c57967ceac523246755a0a0e2c6a3370a7eeb60dc2c818ebf7883366eb19641a6c11450bd7b7d91f4b92b3d279793429407797400416e8ee0934d8e27b1afc1adf564a13676de6f3cc787cc734e349e2696aa9d662c7d3c7b7d9ec1d7dacd3aba539e3f9a4e7e9b44c7ffe8a98fa97e434729be47d9f215ec355832c766ee01881e45a5a510cc7af33aa23a341163874e3e0b0d249b3b94df289e0db9aa9894034351188e6738cbf830176a0d9f137e6ebf03b8c3a6ec876e0a8a1c34cb6e3ec21adedfe48d232f6aa8940d58a2f97abd4e00a9eee8ed1011548a2023f0c59e9d6e349136f6913627344c6673edbdadf99560fa6d7f3a430bf56469b95d656baccd01da2d1caf467754eefc1a18a0629e0010ae80052e085c90d9a623aaf9531e9a1bb751a2c620b4508a18857113d84aa0865a0bbc506850a30012a4c2006dd7da4c10934a0bb771a9c4089478312e841cb6fd3e69a69dda6106ffdcb6c16f34ceb060e98d7e9fe3199f5d05d3098cfb458368ed80c8b8969b5582ec3ba7104e61f13a9ed969d24a910de027a172ce31f613ed312627364acd365d636453cf1bfccf8f85ff62f83c92c0cc37e9c35c7f4bf47cb6609d0ee1ed2a0046248a0a5bb8934180128dd1aaf95ddc8fc03f39916be73f6d771797f562de9f84eb21469bed346240235118809dad1dd330d06a5a1bb8d34188482d693b189af75192136475c3098cfb4b2b54484b80b06f39956cc9c79d258b2f93a0888d951bacc8e92c5c3c76eb3465a1b9b2f4c6f905cdacfb3577c61a7577ca1d62bbe70822ff8a05778610cbde20b317ac51774d0e1a27168efbe328ca2001bcd461ae8d6acdafbe3b9fe8f7fcdea780bc74a4c13ebbc352320505b298ad665f446d6d7f8b89c8961ddb2adf62f4c5528008918bbfb473bce9fc70909a0640942ba7ffc804a7628f99ede5c9b7f33f6a737777338b81b5cffe8f69164cc73467d66158a61757336bab91add1c4d37d7eae666ba39996eae00dd5c0edd5c4c37c7eae670e8e608d0cd0da09ba3d1cd09a09b5b7573aa6ecebbb900747300e8e652dddc8c6e4e463717a39bbba19b83d1cdbde8e66ce8e65c747330dd5c8b6e8e4537b7827be9e65474732eddfd35d74b60b0ee1f1040756b566916a7ad666d6c86206a1a9edd3cd8da0043c874cf3cc721509e4b7bb3d2dd3720dc72d0dd0168f0f6c466977157cdde1b5077ffdc60b720ed2e4bfb71197c5bd936c7f902da0050923c693f2ef3e250dddca9a59b333de9e64add2d2349833f3fa88ff1bfc6310482084986e3576a137023c9f0e7714622b97e6dccaff36449c407073e37e51780a690160c680aa995d8d6d693f6fa7d1b069a426e24195e2b7bda4e90561022451c680a693d2dff645a8b9578e679675e6dadfd8f8e652499f3d7dc45bf95d6c7ef11694fcc636ea4b5b1fcef94d96ed9e6d16fe2a54fcb8e6d5388b7f0adceeb36bf8f7fb63e335fad93938a6fc33eff96e9b53cb33673df56629f4f96f7beb79e2caff30062e33a3d728074774cc0eaf60917ec6e245c4042846407f82949ce1f4b922f731977e1fbde8d40b2c5b9916438abb447a4405cdbc3560467da8c1299559aad118b33dee4797dd43048b638b8f61908798bcc2a1e6bd963ace16d92364c79ccc63201b73c5aeb23979696a910343c7f3c199b36bf916c7172fd1a15220493ba39966e6ed4cd7ddd9cd7a0ad04da34705d37c7adc1a2e0de9b9e21373b44def6d9fad8fc3e8f2d29e24c2b7db2bcaffc78566a792aadd97a23c9f9fafc97e6bfb5578f487bc671beca57d31a017c5bb9acc5c6da176e4bc4b44623625a036a90ac826968e2e75ba677da683c5f7f3c9fb4f901c6bf3f9bd1bfe5fb505c5ff6a3cf8e8ca2db5d6be8ee16403ba9037ecd2abd345f22f9f125be0f0daef663c21048444005e439d2a38296e816a7391c8e01ab6ac5bf361f2d2d7fcd6f31ae49f711a09b9b02f2e8a0bbe9cda3155f3fda4a6fa6f92af00d7d12f8967c44f4577e33902a3105299c5ed0dd421aa42edd31acfa644b463ef61e78f091d6c8d8cc652d8635821e7af05b8ab018568f7d61da8ac19e24e6e532984580242e8359b7ef79dd62af570b63fc7756a9bbf0f46e606652acbde00c89ee26e2a166224dccb336de2962ca23ec2173c0138120894ab90d544bb924403438dea043ebc3652a95591ceee676e6dce58e80a30d1ead6aa90360e37cda2b3f76b95ec75b3018597e4cf4d05b5fad0c0f7f5ab6b5d2d9fb58a7cccaf2a4953ff96f9e6d7592a4d9fffe4f7efce3394288fcf0960dc75ba2e3f17d26f6b1cef1c769c931667dbc95ce1cb38e27b6343cafd7c8bf96866db3628f4db7989c19cf9accacd298cbfcb5b2bf98dafc65d3f3634af38c43c56f47cfd4719d5f739a48efd79e66bbd78ad7de4b6bd401301803605fb33a30c7148fd7fe5420dec23336eb35f4d64fb7d5d2fb4278ebe9cdd5310e99deb739a68ea9036098e2fb393006f897d66d7519a589f35d663f3673236b59ab5991e6c793e62e970dbbcb5b3f96a458adf893c912ff75c00d8f21362e17be7dcf8b24ff87010e80fd6845178c01244965c8713e6dced859e9f87de82cf4d6f894b4d966b574249fca647cc43e81389e556ab3dd6ac6cf344669f6e6cc688db53b334f1e61b63863b638b34a69d9e28cb5c8919e233f1a0673ca01f0c80bec724d978b0242c8f06dd1e499412344ddadf201865fe4d7fc3398cf2a25c929e6c0c890ea1fffb5f9c7c6ffda23da99270f2a0332f3e4011a71d12a8283eed6ed7b7c2c80c346200f04aca7fed88961af6a61773e293ace3ff30cc45b34f1cec77ebbb3d258e93f758a163bf66cfb1ef17d46975920dec2383cc64f1302dfbe07fbf8e59748444afb98cf2acdf547ea22add96ac527ef8fb5f41d6fb57c808816e3d0e2dc1e8811df1e088b637188f4a0bb3ddbdbcd1240b78a480d7c5bb7ef799153b4dd647706ba2b10c4083a082341ecc82943ce959e798eaf577e5cbec61297aff9cae2acdf75608814dd3c95d6e69d36afa5ccabd58103870d8a6f380add0d85eea6d2dd5018d224870687b0b8eb472b7aaeef2efc18dfbee7f5b35bdabadb34e256bcd4fce059a1d6c87d929c365648111e35f1884d4d3c920374336f19ce5b86d5be8e8dd2704eb5d4ca2a902174b71082d0dd517437107ed0dd3ee8010fba7b07ddfd75eba03bbcd6a65a9c5b0ddf76dbb901d99b030611eae682fcc4680f360c56e8c016ba9b63a2042ac869618328747437e703071830e4880a88e006ddcd5d800b0188b9231e56d0dd5d901b1fae70011c2e5086eef65c6840ca173ed0e40649e86e961078600a6e09aea21fba9bab42860d2449c307aca0a3bb3f273012086843e0994277734b88ddf041033080240add2ffc3ef8f640e8d0f8f66600b144b7ccda6bcb96c4eeb749fe9d7f59ddaf06139086fe99b746eb868d568d99fa636f8c86272d0153b2d3f0fc11059503287eecbd364692658d11c8ebaf155f64008150a031ae89475e3675329e41788c78d27280dccf96d4f9915e3c83903f8f837f2c4efd209824437cedb5e393b189290fdc7367ed7e9e42e027c55aa4c84879e02763f37e254b9f0ac456bb3fc889adcdde1c1a9e3feee7e0fbb1da0bd199559aebf479f289dceefb5811531ee30ff1a3b5c9af33521e334f1ef8f3f897e2e7f1629d25c640c899edce8fd666e659ad117c7b20467c9f92b6ff1e19e87164d6de9ccf33ebf018e7ff1091084152e391f10c32565b7313e748c73a6db0584b5b6b18979da8e4ce6dc6a91e26195368666404080000c31200304020160b470312995cd5f2a4d50e1400068aae6480461909a328c7510a11a38c210400000440000044300c4100b89d64aac1fda39e991434b1d75597d044ee6a1b84d23605fe2e255afb28c4e25f56ed8f1e0f146bab106c54e7ded082af03655b1cadbadcf376b757b3e930ca3a57444e198a324ef881bfdf9ac06371101fdbe9cbe9cc191f9cb5f1ffa47ce629bfc9719f742a5c6ed9def9602216099bf55974e749cd4ec9d327ccfbadd2b4754dc6e94a19b5166922d91bf024db5302cea2463f60b2ada77d16c45021878d97a12177f115b27cfed921701c7b4960e499181e78ac7848ec98fd8ae07231faa85417e19827a0c43b4d6fcda5ba87e81fe7dcd3338df557c89ceb16e2898a5cd68987f2f2087f55a94966aa9fa2b6d18ba58bd50e54bf7a273ad759a6a6c95358f359e97299bc8831ba11227161218603ec9f1d392507e30a528a8a59f9c3d76798680c2d387eeb33c097ec75db5d8cd7b51930e682f4fa6fbaa5bb85afaf481f60aac974a191803a07d7df847a7844ab840f9d741513f6822b08a3ea5f694a42c63923a4135912f734147451e23bf26db2ebe5e4bf994c938f80fcb44137113a92060417cc1aa2585006612c2fd3372e7c8deb716fa062a3344bcf3933fa76b3ef0bf065c2c2b592bd1033642548084fc7637d97ea269e58f02ccc6e5417dc4d324c01d7bce970f0fa6af571f2e281983488c2ed4d1dd05122b85e362bce774b85708de221ef3547f348fc93692c67a4641cb241919cb408b41d9d9aba4564f01274888f0d3d49da322492f7b079c0582faa06e09a68585dfd4a009e73daeb56781518d53e919caa50f7c560b7d31de18e60b59596bd9fd3d8ce8181b1b439a23203aed67a1b13cda242f287336681d02c8466c545223445590ae350fdd7078e12882068fb52827f93a007aa8ebe373ee6e61d2d413e45981ad062021c3f6c355ff9fdabc6f5168bf28015efd6dfc8c0e6f1a59bab3d84b83150767881d82c2e93e3fa4c260dbefc3643a2f7fe2e947879b27e4cac0266efc5e6859eb5730e2e5e2ea3ffd454fd9924b67a9860c1d1b5e27f505f60e5fc3b2ff3e62832d41c950d771582a8c7dbdd24c9a706de1b3f39fbed166945be0a8bd9fe70ba444770eb40367ade4aec1b8f712194276eb6248c4bbf752595b53284fbe147ffa480f3a2ee2e32011ca6fcaed8624c70a096f04567d9df9defbcb54508e3bbae537d067624125b5cf50b06d835157fdb84766083fa3af437d091af34e8994447995e33cfef9572fe76dd2f83b3b16883958bdfa33a6117275dbff3e4b48d14fd9e47c8063d9db19074270cb8af06c4fed613b8260b372c8ddebda3e26a14b2417333db65c8e378108fe1b4ed237dadeab543eb9bc90d42fcb887129ff0c6ba53995aeb783f6b4851d1defe2373ad57186a257ab0a920195abdcba8ca9a0ee456ce3e992360a3e101a12a27da08dc31f4be6c2b2762c631ab53216b46cd362f8e6e4263be2ded0f488f7375414e036ef8e5dbd9d1a651392926438a2b43ec9076055276ccb140d19ad9dd03901f52c190712acab9434e9e0d40408684d8289944233caed03ce1e636917dbde3462fa8c20cf4d3050e84f22f571a37cec2eb48a4c9d3c45b4263e519c1aa72da36a68c8ef6c81a163a09472acb6b270edc6b6db193384c7bf516d25cbe8135f05c661e1142f8b876ec18133afb9f588503c6a6df22b41c6229da060908b2018aaeb6f4900a0bc07d5994eae5e7eca3030e82dc90c3ffc11671758f982625d86708f7fe80f47cca0327b81aed14cfe46b2c44d6fd77aa1c11f420fe3bd5dd3042fea385e3f60e537e050de699fdc30b9a8421dc436ad30423ec7103d16f8fa28e56004a5eed69ee0429bba625056562a7342ed140205f067add2807eedf6809614775f6ee72ddfe23d984b27d890a93f99f6774b007ed1b37497b6dc1213c7d8d47e1ccaffe4d0ecd138e8f44c0bd1b63f81c1728aa77619687427c625a78314507201824ea85f5bb8fe9e92e7932c2e79694020a46bc69733c81cacf31b2ada6c987e0a32a23261bb9b1230376ccc663c6e6fa432e5839adb4ac6498301e7850592529428d3977fbed94beff945dba03ce6f7f5b296e763ee5a21858a0093cbf61e9935dbdb9ab6bf41e0188842d5d85067289ed22f470a74a4e698cf3d603574844f427dcfb381b4a7d760aa37c55bbbfd9e6b8cd3387435fd8e149cfaf33bb0b7053f975d87cc0ba4b9dfc22a332e72d63ea9544f6c97e25a59ae282d31e4e9ecb1d1b974d608788589fa173b887b9d1b0c182301a3808bf6406f566c4f6b68377fcb3cf59cded1138f7d7b9b835ec6aeb26005274bfe9c88b0be1c5ab700ca42b57cb7639c77fc07f93c899fae7a7937ba54042a26f23651c83288ea62800b94c7ad978357252817c46ae6853c0e0ded58f991c3f841ad9e3e1873a70236d8fe5431035c73c282b4e60648deca31f4ec159c11d3feb64b5e3f6f84bea4b9dd8a3c0576728cb264e1888dbb4fe219ebfaa0067a474829cfa95bc73edbfce30f0fdd823ab2798e693e13e13aa68e952b38ae45ecf0800e384fdb54fb2939e3b059634e285cde6819e9da37fc829cd781a5506157ce06b3168aa7436f118f30483e79f62a420351c52d1946592ec57e1988cf377ed3c259b97d5e2915fd37fcba14fcf151a6ce1aa860d7cf69f61e85e5b50dd427ab12af8fee891100208179baeac81b59347cbc1d132171588053067918d031a01d972f338583c8e1c245cd0e667924e30bef50f8989ef0dbfb9c65c53f4d1086959d74b685542732e4fb63c43a653b956842d91c22c353250263e1306a920b5eb57edfbd0088e90fe3418ba6e43452a821fe43d09b17f96cc6720a1601a263677171a4d3343e9343bd628ccf8ec91929365727e32e1ad23ab512d8950041baa3d4b949768392960d9e8f97f89c84dbaec3493c846c28d15505f934f3c490ed8a420964ea55ff52d75daa231e342cb664afa22684e040a173925ee185184ac020964836cde99b9ecaecd290bfc1233c8fe69d6ade31881581cc03b5921ed94c795a10fcb208c7b24f214d38d7671087367f291d952e4a8e9d8a1631a24f9aec6b6190c2b3c307759366c794c8aa2f5b16a728a3a938f322c8080369596712d236e5f10e4585c1ba9010b9627daf01eb2e41f9c501240ad21fddf78248deab544b6c0f9911c55f04784153eecf618e58116b3f89443cb237e5589e65693868d3db78c7a4eb1dfb908870e407557416e56417cd4f5fa2e930598619362ae807177b849a8aef7b6aee3eda011c00d0ab2b140126403c583cbbd3e4d7af60ced10e7f4dd52a4e02163ee17ea1002ca17dc1d299f93c2964c77846301a41a8d01051895a0aa26e19ffb8b39fd2013e095938bede990640cc552a10f5425c09ce199d4c144d6294178ed23c2696d536bfde0fcd0c90ae2d9cb5f48f0db264e27a46d95754908d36f2dd767b74d6c9d0fa823c135a44b60de0b264901d40fa0d3604d8822059986d499eb138ea380c5dd0869e3fef1236dd2312679cbeea305fd3fc9fe466c42c1641aeb5c6209eb951d31e3a9391d9c740bcadf94807b7e6e169f5e1856655c5c72167eae0fca89a5bdd3f842aeb059d3df4de99aa983c2e7c926a06f91d6367e5af9016482beb5c28126218dbabdef0c83cc0308e4c2412eb962154bc17110dac0c1ac13b04c1100b5e6a6efece11091730a9668d604ae6f0935256fdea93dfa217a89be4d23b3681a0f7625dd0c4cfd80592c112789926578347ce2d1d8841cf6c4eb0e9b06b98d861a84906d85039968f67b6740d6ee4a6e7d896da3cf8178553dba64c7b9d7f0ad38e2660b8d9addc9e947d66c5ccffdcc577336690881471e076a60167a91367a843d6439c8c9d4c616569db43f80cf92645d591fa6f1ffb533aecda84a52ba81b041bcf570235f2c9daa2222a76928b17a73900e0d4bd298258006d827a3ac5d7335db382c18a86aad9e09da71538f7156aca1370d4578f6f5114d7de07491d798f28fab76eb55b7ffd79797b5e921481f0f6ab69c9e86a475fc0d390f80a9bc83eb1bf4ee169623397171caf8b66774f40d40e159be31d5fda47ad7b0406514d73dff26244876b34e52e4cacf5437dff744f6b6f3999dd522070d3a4230eb4ce3ab0d53e66d8f1e5080b940a503c87af72d11ca6b065089a8d8f59947366361d1b21aed3972b27cfd2044f514092bb0c24c86b8a7baeb3275c24517a43e3a9b9860b2d9303e996e41aa8c3a5b0601673c1b8e4cfa8c1cc36b32fd4295d22824eb38c9c8f331b32827812bdbd2da339514c0c2c4451066f156e755ede984b3e0a727a2e138cbd7c2bc5a0ec1a13f3f5facf736749912aead283632f66728b74237fc4b6417d97c2dd653a9a8e784b8556c046cde22ee86fd57948817c067b4d12af9875aecaff646cbbedad0102b46a3dcb3cf61c8a4b60cbd5a57e64ea3bcd84a059e476a4eaecd78343b8520dc3d9bacfb2d3553b392bc850207da3a151f5fdab737d3d4f65c652ed173ea2068af623965962aa97659c9fa9a1d696a656c849611bdf9abd2a5af4562404158671b1cb617c0385b0962029ea917825938557f163111fdc39639e8123041d15dbacbab5a86c9110fac70ed5f7e9fee1f0b29300b5778bf83ce7ca3de67b4c6997d07e066a4f18d6426d976d60108d4d905d40e88d84c719b210e39ad805d8d835b83ff042f0dd7719fc4f92c03637b0e1bc6110ab114bc74ef433cab2858d8227067f155b7e4afe8d3be53d4fcbbeae2cfff582bfef2a707a7ac9fbdbff9883d8ca54b19283ff8fc6a04cffa72bd77aabfef19bbcd29f7a7eb3509f6203345df404976e3a41ca9f6f0159b7c9f38ba32a9afd209006d4e4b7b69ddfabda2e2742f7703e92c7de9a1137059d3142db504bacbac3e57df833db18f00361237f5e30a1ee444325448e99328005de5441fcbf3a6f53561fe63f5faaa8421216835081aaa12ded6dfb3f9dad345b1c25419465e8e912bd6ee8230ac70f441555b115c083131d97fc6f07e72bc1fbe3b3c979845c6f5ea5dc4323b03909e35f51796b950bba97df3accde6ff44db3061f500f05437409fb141882cfba76cba210493ef3b76f25145ea1605bfe7303df885eee1b1e824766f0999fd97841cee1f4bb938794c268afc162d7d180dd0d3e803f41f10aaa706e4c1e523911bf5aa701b9b43ecf0b8b96c12fb8530f557d8450f3acc91ad9e4aec4350bf829358bc399ef508b11e17a72e73eca8726211a274a6c6830f11da1d54decd83b75ad21ab0269c714cfdf6d6ab92ef1d03bc18964a9c07947aafdfdef1e264982bd7bd6ee9aa2284681fc31c173ff82d1443a3b6e1a8c4f09d2e089b1e1a411342b4e5d2ac2462501d41661e14d9d04967039fe202a44a9017fb0a363450df0ba80140a855b2b7875602763af620bcefb014012bff2f52434fd0650285e187f4769340e4c7e14686fc58e3475d6598c90c5b20e8540b807f86862dcd48f269e52f4ccd0c2173316a37aeff40cf16ed4f7d19ebc01370f17781ab3f8bdaa9b6083f8107123482e0a48eb5edc3ad419fef9bdb320417f0333f9ac58e0b2df7a75b4bfaa3bd9adebd32844a4eea76b685df62d6c71fd8540a80901f0bf60dd6db3eef2c79aeb7b481e591002a0826b6d0f71e43602f7015d5d60419cd4a12075bb93ca9bcd5bf48f39e8cf07d938ea8be10de6633924c7258c3ec034c732b750b3aacab958502f9a3e5f32f83b77ddf3deef3c706c3d201e2763b4ea6bb0ee769df82d32c37916aa3208204950b291b1c34282fb3bf87bc8d4ee6ea9171ed143ae2b86e4d6a0d8f554e58c6ddfd33896c14fe8e13652b84256915a3608556691084397e9a085e58cb5752eb197a2a8cf5b2451db018d106f4ff90607801ea3d2e6b86ddfcca919f81dd86f880aa28779fd7f355d307479b8ac5c924d1cf477974d62f3e8ac7d38d347780e96db490d28f77d295723d3aa1bf7ac35bddbfb6e8b4ed810d2f377d8486d587ce927fdf12e34a1eae3adcdec3fb50e35589f0e4db4daba385b29866726ae7990f5e3d0b24d4c49e9446fcc30fa1d4a837c3cc1c26c843600892fa34bafdc28404e1f639b4d648e7c94065433e93f80f16829d5b466f65733a644281a2565d795254413340fe87a817a6ae37fd8d12534a8386f002286ec35607083357e6ba99aa768b49f5da2618bee59b4c78f0515d65a24299d50239dbcb0e3729cc50eac418116fe1a8ac70c9de8964e5071ad2666a5cf8b59369a0a176d254702a7808cd0a2d15247093edc178308679a39250023e1246ca5a97eed3d05968c78a75d34e3c7a73628498805e036af8ba22624da6f0887846295735f5750119676abb077f0ea90db18da8b854cdae26ca764681fda63a722cf42b7ae0f9c0101876308b83241303a9f72105d7f5a39358983f70dd99c13ae878bc94a2ea65c49a90c73e9528042fa3f1808c5f4567c002fbe67e157ebeb6f9a50eda56871261c5cccc145d540d7f8aa3bfd04df8ce48d6659a9ff11ea9f1a7a373c1de7fad5c279efc4a3ecc8f109a1520331f3cb7a84e378b75834d94aea3844388e14f36339d3cf9e1832cc03ceefd38f09f5536101347eda0bcee59af5c8f7642a3c7202ce9c087a69589b0dfea76206d6913d8079c388a93d430b0ac5c4983a77297b570a8d45b64bc00b1855ba13c3487a72248961d8c49d5c53191e32734c515ee839b3a70938e10253bcf8ba1e3348f5f15685121f1d211929659d70938e5b805bb904a8043e256b40c494ed8d54f7d5fdee0ce3dcf6543c977918d186c2bb0402ae7546542a86522a88dfa560b70696030ae445714a0383d0a14de369022c6e1123f407503b3e2c3bb3865099c758c0292210b14026ec546cdf50255e8946ed271d8c301310caffcac1e637f00a75615a3de89c43f514441cb83e8d4ac79e5ffa2894129b930a8523196198b1806804f4286ec39f5a5d838abc0cce7e9e0dd3c106e0ac2cff84e62576f3599bb43dda8bdea0fdbb89190b3158fced49abd315bb6e572c3432d9290979bc2d3713dc4020e42cc3fcce0ba53624aee36523c960329da0bf0cbeb8279d596a3899ff5be2d942c26ac7c59e1b3cc0e93a331a45225535b3f108313dc05b61e0c079a22528ada4fd1f37190e58df2ac0d8869e2e1bbefa205395e370a979a6c81c05a3d84badb9937dce2e3ed774630ed4742b383c21cc27400fb1cbf13db2804000f339725a59b99acd35502b744f5e10de0f5db2563543b11d545617bbf8c22e8a497f043a7f0d452e80800d7b4105809726e18b4d768030bf79bcaeadcf715abbacdbe3c3e7894053074959153e659bf66e8524912ae82a662192e4b01a20ec15e6eaa3f12a800511982a876ffbb798dadb98e41f5ccaa8377c50937ec4101abdd0cf31c70f30a6a3a7d627a1dcd9825c664b5b46476f606c9484e10e23f737a661e7ca17a9671353013e0751eca712039070d37bb67e9d8b29556c1a39c17fe8235d367b1c9aa043c68b9b0ca1106459dd025f77957d6a2d66944f9b38ca11e0e9be50b3be02f6d1947658378d15bf2551fa641679c89ad4314d336433681b2779aba179aee471f491e91c376c00015ec8c2dfd5b2b0320f227c0b9aed2888f6ee1a41c4630c6bf6a5f9bedf6357f370e157ab61115c29cb53e2a922011095c6a70d702d7be6c0f53b712f6f4bcb382ff7b6af3889d0f1f8fd1adcd0318b5bcebd094c65545b81e222a5108aff57fa532c7f5dec219f50aa48ee30e984433e5ece6c2f39d8770828960663ac7ed6de2a3f48ff533031e8d49023459a7a9e43ff108179fa09b2b589b2196db1fce181fd56c8c048dde018a5fce13f4953dcdf6c1d26d9ee3bf59cd2fe4ad9038e3f7bea857d87b85f2b899d1c9c9b5be81aa6b102cfd3f1db189a965b08776d9fb46ed3d6bb8b6bb7db2f51cb4816563440238e4a91c781c2abf51d004c4ac92b89cc305320bf19116d0e24cfdf361c618d3eecf0925b4f77c2c9f9b40019eb0a7427dc2e258b5b32613d0c035f3b4fc68be3ef23948e91f924e078a9fefc0ecff8efec072a8510b30c6402006e022e1a8476c78fb2d79be663d26e41646a5ed9cdb2b8bdca758716ad63500f278d37603a2d7c4d849669e6f1c254684a0d987d24e090a7c7a748a263dac68b813ae2ff6745312cf1a217ec64bb1adce51dbe4e91f8ca3bb1554c69cfcf784c1d6a204eeb554fdcf97589b5bca71121345c8295b3219c7a0ac6a8e6c45a56f1c421800045e8ad4343de962f996704ad67d6a16492478e625fb538788d94f6e0bad7d4b3947bbdf4c7671cde7a1f1012e94033fbd07b6aed77dc1923b45e819ca083445e74d3da2491f3ed2cc62d95ab8791598cff88c123f25afebf94f7bd64a502fca403c4f97f747e83d6ef2c4ec250a8cbf43226d62ee5d73969246d866d744f3c6132192560f6431345b026e8a5019344fdf047df2a71cd3199ac8f0fbb715ac472b08279cd08fabe67ee3fc1d483144704de5e42d31216e04a13a0fa90bc25dbaa2f6a77071a3f1ee84c96a0b3bb1d1bda31b0e0cd1489476acac931132c49def791d022e63d584333e74a7797ce4b359b74895f0a8d779d1de701df30310777bd6c95b62660c2aef1903c42f8298cac343e92d25a3d05f6202258d06d1ba40717e1adb8c959619dffb393cc217e3f9f7fa85ce1c76fff65b1c9c818e61c55b95895783538859b9918f700c9236838704e8e3d62d606e5c03c6edc8f43c3eef1c5bacf9d2de03b7fddc41a3504eae09de4842344a0fccf0717b12e2b884067cb88d8b618b5e8db020d068e19fe1df64a71f312abf2cac1ea8090b7988efe854a88e96ec8981a8b23b088e1ab8ea1a0b27b4fb37dcf19108bc4294c04bc7a0f7bb303d3dbfd52c9ccc05bcacef29b262a9f7e4557c51f8e539c39450af15a27a491c827ec891e6da877696966a6934f0879cfe0efe9410f8b1c98847cef0517cd394f3957fe68b591314ea9f99b2f37bd53b6b887c989b00f3a41650dce3080950e123549fe131e5c4d4091cfe99b28c3f8a247ae0a084cee3a65ba34eb1554cb4c3ed636ad02a32e8dc4f20f3983b9756f990b7602b25f9093c8c9c9b45fd80918e3d238d6dc78265e078c2f2f978c5c9a125726eb89713f7f9a194e7c0bb5cdebca46e9480aa52e1d8e529a3b86f7b98d6901fa9de98b465c6797a9c275b16dc4b79f990ec44da6a51031dc6ebfe39e481c2b8f0151ba2775c2f0979ff9f78b63f255523375d423238c9a09b14cfe6248f55bd6a379d777337ab0854b1ffd1ff939eff2f60d08134740482905263880f5d06f1f5c0f9935c9a06727f2838beedd9a0a90d0d7fa34452fd5016fa1f7462045b9ae8a42318a834236afccfaf14d580d1621adfd05f24ce93cf22da074f7ba16bcf69af7fe8f36a34b5d2240d7a96e520b7624593e01cd8ffd9e98f7ffe0936b6e9e6bb39f4fe86bb7f06139192fbfbe4ae79cc58cdecc6e7f4f717e1225a576fa04198b9545359f1568668f7626627f3d5f3be5af9c07f645ad826cb1e1633f95343ec40755a002e8b26571f313254455a2a1e64d2954f3dda43cba399ebaccc25feded758e82315dd8972e255fc07e22fb400be6aff4dac9f77153819bd1a14b4dfd2e5a9f5865f1461d4e5902f36aae8c4b9509c3de4e0a89eb535e7a1e6cc3b25c400205db7f57f45815ec389fcdd0a9fc1f7bcf1ffc90f04bd48bda3df1876e4b2ce34c7dc2640eb2bc06e533a759aff0e06d3021f9e67fe4ea6d23bbe493fb245cc096e6f492388a4fef7e61fa3b40a652349683b3daad23cdf2b429aeb2f69d74f8b5ffe28ad74a97277bc4a56097d8ee740e9fd59325873eccb556550da485e2ab2de044ff7148f17398901b05c09f7cb7e3b8ddd16fef4ed34189196b90da34e6404770c14e9cdeaead9014c4177fa5d68f8e5fa21ed968fe60c01d1311407db79be1274abc8859599f2c633395de7f00e24c7808edb433625caf4b6f1ac1b3ed9931f77968e3c836097270a0bfffaef9f1f7ceec7d3b1e20d6813a549f272d12a9c1e6f85eeafd8c21bfd90a926787ed97785fc8e0eae8c25c065ed09651102be27659bd229b07a9b5323bf76616d60e5f9440c7095641401ce30924268a9f3423b529b0042e8a6cfa11413c6ab2de1e2a83686de448b3a0ec86c797b6fd1bc0a2e57db90e6086cc4e5830959edc5d7b96d433168f6013cad9af4db8e3c70d6fd9540306bde2923376ab7dc170824d02a6e093b531492fa0a94eb938001aa5f292753b46dc1a5590287babd76529aee1e43423510fc4b555e7a0937ac7308333ce0aa315123b70eba8dae9207d9970c71052c04fe36b79412499839918af9521760374048b18f3d5010ff683aa7322e35eea0bf16825eca550921ad65ac76ea19bfcceb9a82995b262c2eefeaa31d99efaac7f9bfa375475abf34d8df1e7ee095d1d1be7c1fcd4ec343e3169f385858eeaf5cee8476c02488544d83d15ee709cdd39d11fe9da006da9a6b67af2092a705fb00000531dbf75ef69d58e2e5a07c31aed6a101b2f77d9296b4854490feca8214872d1dbfe34533737f8ce85f0a672b781136d1c41ac28930182a05088243badcd23e05fece49d2b453e86595b1dcbf9e63fc577b90e7851dbc10d4a7f6beab9171d0904954cc072d958a7431a9c3520eaf4a1699981b6adf15b6a124a499f1022b85572c246dc19fe80fc09a026f3b8bd69943321e5b0a105ad916c11ddbae174a7686fe955ca78c562ea167c811f206e2d0f8f5fc708f456029eb2b4dd3c7148b264417f02972a5d9f1a623801df8f71a4f546bf2a51fd82c5ea7082042a4af868422a056e6a752f3a201a12bce0c96f3419cf6fee672273267e548851a697899115096a10aac0f4f1c8d0a759585f8e2ad3315d0a810dc26e1256431c922357b780a6fbdd9bbc576653eeea33e071ba03f61cccadf794bcc0aa3212da3c20b6528c738e8c0299f7d0c2f66f21ca8648ad896b5258e591e23b18ec47ed05dba036854ca79f4546581b97b8e23b8bcac201d137c8a087bdb87c1b0062ea96753f69cd11c85296fa22d5684c6cb7ddd14b740c2758382040734538fa873b6e8905a1737c8435d2252c337645f83edcda45014d0d37f11af34bb202a954889c06c1413992c8fa73def720e5eeb31024fdecaeea36eabb2913a64b7c7bd5b68f5aa9fddffafad6fe4d7471125df0d6b9e17daae2be8db3a1aeee5513c32b745c1eeaba8fa77c80a7f3304ab83e1800ff9b86f7e7c561195a9fbe58ba310c2d9274a5db99ba73edb642df3506e985f6d6caace32a1a900049a2abcdf2fb18d7c03f61d7439b77dfc5999e36d3cba050382db048bcd68d92af4f500dd426a61b0927c39c726937f0a08f4aca376f0649f24f42ba48020252b73d24346b25c9eceb2d91725a951360206cf082fe2ce548c23dfafff0f5e6f00921092e26cad3a3943f2de5c7d402932f1018b2affc05903ac54d7c16e450b5e4317485b21836ecde3c0410b215a81e0d81b9da23f548598be02f23b5f014d40840ec907f58f6228bb1146e56ad63ef404915870eafcd7b176f70acb0d955c45af7f4b38324061ccbe2eba43268d6b41f9459905182821276c616e32e5a039300b4025cc7b0a4a221a04862172e34224efa756917381613f44f910dc900d6e7b9b4b8a802516f4a6ddebae080acd915e66af657430267d988d80fd28da80d9a278ba16c06ba53e4638fd1b2cdf3f8fce50c7909c83f1168a6f921bb1c4060a5418668821101059a6d335f6c64570c3be1f994aa7e436f8b18055ccf77e06c6060c90f4c3341452fd786ae6491533fd660788326c6d3f1ea889a4e5a3b5f39186a4363f40cf9cf63fc910abe3aa98af1bbebdaa951a5b16f90beffccf5920b08338ae1c9e1d1556816a5cacee4317342183bafb93fe87500f50f6f2bc8fab69bffb0da02aae4daf0b42f72d5cfc4b34abfbd01501e8d44c06b6097550fbef839778a71c0c0c86f7a0c45d963b81977955f8eef3a304d6ac374eddcc3ee059db3d084c274c4686c0825afa9fc14acb82f9f73fe36ee01f348f38d1a2cfac2b9121379ec6d3e4a3498c18cfcc7117d5850600ffc3e29ae8b9b510052ce645d97f18540d1538e0b969c03f9c9eb61ac8680a7e02db08663ae7d674a9951ab52cd70669d71f3d05e60907a4f21ceb4d83029552678bc7df5811c30449a31de4cd7b6f1ef3fd099a955a59db04ff0cbdbbf124c8f762d8e501b3e1502834280f6fd60a343f6609909f2e2351e8270955f1e447df05e58af1b76984f45667dc52145bc102d5f1e824a191ebedaef4497a0234d29fe9fb036143a22d13cbc3d0a4614b06a5bae037bfd640279ce8c557e4b59597e3476428b2ed3b800a1dc88a60471e2521b01761d2baba8d24a933f30fee62484641995ea33cf3357c92404a9a1a568a92709bed4f97809a4b4568f671295e9a9f5efd36c54af4018c77a0713cee38e813bc1b0a85ade42eec0a0185834c68eec0b73eb5cefc6cbfd6843fdca91ed8d78201f5f15341de13594765c248be08b781d841966ea66f90a899c206128935f40d558e9f8203be5816d12d0ec25c77a6e48743c06675f8df3d10179d4746ff6b97c86f5f8ad086e5e6eb5f6db283cad891825804a2c1b04b5e31c609a1800c44276b3006e2b1a547b01e0bf7b39ec5591a7e2058fd4956be4bd6caf770ad55ea42023169847eeea2050f3545465a45addd180558df7062a3d67b40059160cbd4a5fcde82dd307721821518bbf842997bc6391208a041da562bc19a094643718dcd67bd1752074d01d4c18f0dd0056c2657d342ac69d6f7ecf674ba9d439aab9ecb478dabe2d9982cfb79b546ccc344c47815700fe993b10fba04adc94f32ebef6577ae9c6d61b33bbbe2db3ca7ea9cf90e5b2c4336344461003fbecd36301a87459c9376587b41410fb1ba895ed4ee876a8febf76e5c043ecb43043a3a5f3176cbcc57438e3271d2d61191e73a988cd37dbad9a43621e3f40f30230c028490889fbed679573774e582e672ced5bcbfa009495d3001a5f47ed95215c3a0398db167f7f32c784b0023ea8547fbc8986879dbc1a9caa13d2bea17bd2483bb8c78f68807d29fcd3d08ccd0103e5001fae45cbddf7c5b7c14ee3cc67d8585d0aa9a453dd209e8a64a302a71d545bd706efc8cfbd11e3c2b72b0bce587abc02bbd4039a6e4592e31af90397463b0436187439b816be2e4ae9c2fab12bf775cd6ecc6d6b2ca1360bf60d977fe6b5f1100093db658628cbd3ddb465debc63b31f3bcb6778ad9b5557dbc3ea6592b5dfd79355e226a7c15a1310056c0b2a097634b8bd61273535020966dd018bd444f63c790e40b1dbda2e7d68381c83ad7cf6a0505583e62f541abded27f17be1f24e3e32177af296b7f04a6a6ac3afb8468c72265f39c186fb4673d08de3392b1549b30b0833c5912201feb72a70213e4685673eaab2362cef12a0cadaba030330c0940146464d0df662863cda302ec36c43a5c0d7ef9ad92470c98944468381fc398248c78f7ec3f00e00768cbcc126f5722e7e3aac371f16864621fc00bc683c2d7a907581de8e3242b440947633e4720e7e3091ffa88753fc0eec3365d09a744bb03a3aa53d1ef800bf1a219ed7f9a3e2762795d6f5f8282848fb90911eb0c3f297f6dac01a21512b0ce77c72b39c6d6fc0a910425e30f785f08800e676776351d5fc46c010bece7de4cd8ee227234016cbfcd479042a54af1b22be02f037d809a8801e4053328fe7a88d35d1e06d01a13a1d1614d01b45c9e217a8856a1ab80460e20f449008639c81ca94a464f9711d31f45c8ec2c86c5a47cc7c4c2496a4fdf7e28a76e583180f901d760f299e8293eec8cdfe67fee26078fed765357e0f368dda10045aab3055bac331d0efe4fe961ca94f7e1c2e21e7ae5d8a831a006b2ecc31f77e1f9a7b600266335d2bcf1c422ab249292caea39450d064fb5a896974068503973fdc07f8ff4437f91e98333d4f779e82180b599f2570d08d4a04520863ce6ca0d0e287410489c69ea874a6eb5c005bf985de9e1839ea26a1d45a42a25ed68c5c6875b7ea931054a98bc8fc93fcf5f40621318eda68bdddfb65e2d7e45b64ee32c0eea7c0d8a9badbeb20d12b41f11439129d86b2c425c36cda4105d10043c552c4314ebf2d187dd3636390ad6052724c6fc4e029db71b8ec2dd8752f95de19383944a72c851d0453b222baf84120b667894cb7508a16c6a27139f6941b5c3d74d0e4817d80152693d7022034d406043de20d06adb40e827ca51987226d5c781447031055abc1ba83a5a35c9423947d0d4ebe0026d77a01586d134647656909364f0f85c3a7e0615357970cbf37de7dffe8b5e9dcf7be66fb13dd8f3c729bf7786cb3bbf594d8360efabf51e816637dbc93d56d066079b029da0d410a4a4c073ad71c3dce6346d412b0e00ff6b25a08c237ec1cfa235273401f868c3908281d2136ce109ad5c7229f9215decdd299d6da8cf30bc65d964bcc0a43ecdfcca27a9e5e1313aa38281d5250b56cb331040d7061476266a6252e67d0e136c41e50883eba62739ecb26702b904408eaee805cb210b19c68a3d18d2127446443e071e7b156249cdd9e7c6041f833cf52ca94eef95456d90673f1c0c399bdd852e1898a14d12869f244e7dd62f13454df5b94f8f0dc361d69f4935cb98fde634fafd6edaed9c66ef4ba8731c767a1329543710135a79d2714b340216e55c5bf00e736e0d96409339dcf4615aceda2bef1bb8d963776694106fc8c753c643b42ed5c4491348a535cd46ea5eee1a4c5e220155806adff82dff975778b293ffba1cefe56e4161fa22925c709b6968ca7180e6ee553cb2937e30d41f7e74a01da8c438fbed39a9beb6545ce8e38f99408293426bf6802dce09c2e214a5e0b4f77be78c41a80077a333096bde8882ac6b0dd08abeb1c596e82561bf2cfba2c569491ce15995c971475f9b8f0e51515f2eabf8d989bef40b574f75aed52a5e4660c6f03be76906403ff0ec4f4b152bc19653e06c823dde5e7f44e1e1ba69071ae6a2c7cb9f8052d880d86e55b74962bca785f483799c6502aa4ebe3b147593de2c81be01ed01e40dd7c15916705165bf721d3f7cc0e4555a0b4b282717072653b1e18e4a794d12e244868e801b13da8c19cd1e6e4130abcc63d2018bf6257a486bf7ee9ef2c36626688c3836755318b9202e5e51218cc9bc9342c86e89fe4c7eae6a3c1a37bb686b6d3f56467e1dfb8a18dfe633a48f33f73ab6e19552fccec0858a578f7a4437449490d01fb46558abfbd53502ff7b0581be5aa9305dff5c5c69e874a57b9062c9a3f48462fa6066f594880d5cfc4298304b8c1841ee67c0ba8d6f5688f6bd322fe898636db37d37c7aa9c2f027a7d094315ff3da84a628c0d41d568457b489b720eccfb04cc4203df559c688800430daf706115442501aa4bc6338234bf38dd92f640a3591c3e6a013b74f2ddfaba51d89b837f14b2d2544fcdbbe55441a2098324146394071830d483c8e5103f19be65cab78eeaeb936536d021e46a281b4b251b552ea641ca2015a9bb11f834428ae09850fa26712a0b1480d59c51cc0d56bc1312f77871581f66d49c2eaef940da33b0ac145d5b72964d18134f6abb458870aed5b58cd2b4a0cec069758fa7599c5f56dcd189849a9b12680035076a9181be774721821de16395b47ea12db53b92a58e504dff4f88180966eb150d94481d5f58d5be42f9d784e307014889ca8853e47077b219046924cb1e2028598eb4262f906fbca5774020be43817a01263d9cd1e7dff79404517a2e643162cafa9e3315ee0d51dd56d8e457d7f7f37297e7fa7976813ee7f8212e89af59a66bfec72b078208b69cc60462d452327744b57232f9fbefb124d53fb6b7ed5b7653c4c89ede2f98a273ec8952fc5f6bb608a9a4161e07f8b7b5affd22016d4367256c88e641686cd15bd0a97fe2e401d98d5d5e787f023aed19a6b899e43ba848bad6f3d1c21c8777fa0f14a645fb8b2884996eeb8552d0bea31b94e8e83485c434a23103d407ca8c789f161d59d11f9cb671c4da882c5b7090d3503832a43425c88274d50b15ac68f15eec3c5e77929506a637c3e883ebf194cb9eca47febf60dc5a37ba03456365f3132413cf6999047b26a2584d5cd6600328fd33072e3848a219711cc619e5d3e7ff3b2890260dfc752e1c83a7566366a3665a1115e6dc81c0b18af72288f603dc8ac883dae28a86358e0c615054cb0c186849bb362d2c1031ddcda2ada80b985a9657907b9820a546c091feef2cb3a306b283ab381baddf5976d0f105950327f7fe52b4f0f1fe7c0d1a729c80f8f26b188ffb97e20c4570efd14894ef4c524c2ca496d3e34351a31366c4f178068ddd90324900725d0c20dcb13c3af75d3dff02d4039d6f9c9e309d9eacbb0053f191e59cd35c3022c8743b9429c63588cd47544efa231d8f1988ea43c1c74f98d2ffd96b0b2318288564993d80f66564214d43c799c39e02152d7ca2039aebda939d764ddaffe516dc41712654591952ba9f55d1cf285a71f16a7ecc78ce1c982e9d81599686734f8be66a7f5c052cebc9d3b2c58609d07832cd865a784c2e78bb0c576afb856cfc8e7a7e2fc0e6914fb6ba205c03f3bc0f05b90863569f108458209fb4710c54270f8853a607edb46b1b10b1c01f99b9f505b9b3cd6523717c140e069f3f8b4ec59497e4d76dc6161fccb907693f87e081df47064c9f6ebbf71314af8bd2b9e6250bec5844ece4991510e16e72f739036bfb77f3e40536bba2ecaefc6decdf5940a7adea0f28ac53f822087519a68019d944ec693e200c12197b98cb4b013013a73724dda252483e04ee12f4a090dd4d5457a7d3458bb28f9f755a60600c2695d2bc04455ae2ae742ac959cfdd44187db1392de1fbd42b67ebaae8cbd60fa9e3bc3a56a2885a1a0bbe47fb21530e058b8c92a3adfa7dba51ba58f7dd2d44c61cddb3cfd29726ad963ec90c35f1124890e159fc2581d2e020d69ebb3c342ffd9d01c8ab9ae8e7fd52a821c3920ca1554dbb854ab3e61aa74de5ea017eff9f303971942e508f4dd0a94ebe0262b4beb39961d6a221c0cb46d178d948cb569f479bab6d488ce690ae30cf2083030ece3746fbd23467e4b6e28c45fba0445bb185f57862ec6320dec0c279380488eb9d4f43436f9631ca0fd5968297a5e234f347e8ac89448b99b5162ddf0125b80a4d9e7c48105305343f34c2185af3d0477f9730c35de1530954fcc8221f8f055695f99088366734430152626d37dd9a95b958884f4ec263fb72df228d07df0da5288f9669f2ed2f342bca4e5a1f722c072ee31cf1de8a973c4da369197ee521e13f7aa1d6f4a00cb4e863b451e0edfc19c801c389b6d22e3bbb6b32cbe818443053e68714edeed400a415a27dbe3dc6dbdfc26794becd4656b5fc1116a46d7cd549f34084f9ae8b81e2471bf8fa550dac63006c3b754786c9c707ecf5fa982b209ad3e23829df2da41a33cff2a169248f8fa8dd7870e85f4ab89a4fd3b89ccc60c2f369db17e7f3864d0045e53b3e21744b6049b24b995fecb292b3edb182d851917b072cbd29f9032cabed2f2f63d01b7e99f070d20f27e64f9db5f8f37b39e764233a032677d7d9df675a8ae1be1e29de51430ce69909c6b5bba0118245a4a0ab5c12ff58adb54da7f01f934c4f1b70912d08d52902055ee8eb079c25668668a1c59838aabf211c899bc0bf97ef92f8bac0966dd5588d5be98d2d63f8a391bbf11d0952c0720193e38802cc011cc85942b804b0ffa2aa80851c7cd8f82443f5d5c9eb9e5ad3dabb73e30ef6226b4a3e4f2dbdb401c706ea5cb07e240be97a4813c563821ca47c4b3de3c8eb1affac9e817d1e0b10e446c5ada7835e079c82bbe67999df1670cb31d6959eda391ae12edc065d5da19366c83c5c0fd59ba4783e4ce035dc1e99b905aca2d15c358898c1a14ad20d4333784e377056ca6bd29a07daca45d00f06886dd90140bee3bed4cc8470b81d1b5535b2f6bde53b6e6d2ba4237421c2e9e02a40db8de6196557524a401418424eada4fba38d1ce3b8a2d6a36ab7242b9ea0a15624117b00fb53f9c860e3ef2c05d54be8b7d726dd36f6ca1ac3f3e4eb4cfec69e0e7f481c6db8875de59b93f1d10ff3f055be29473ffc2157a7a31fe6903dda70fbd08b299adf2bae1fa21b570dc3c1c8ef889143ba63b9eceb58933947eff722e1f2e3a9d1b3ec750e5420c1f3d8e553e33d9145db362fe295eaf922b92ad359bff2a6490dd4daa620adc68bb94b93aa7e682a0f6ee4a99b4ee5521138cae76efd7d9ef999dccca0111d35bb081e79f09a271ac2aee7c9989873ee52850c5e7171e8a4e57c22cd458e40d6d6e5805b218d2607226ca612ef5fa0437cc24f01625b275126b24bae9b173476f4de208cb976a20d2a37728cae924a0844c7026fad8afa7268f765a3df640c55b8b14d436fc867bcd2db6daa6b29998037c98577544e7ebf8b20a40135fb428d91b9e330b79ef0e22410bb7ee979755ac1deb00b9dea7f538a0562afa9de1d4f13ddf32e08a18e791f10c8aa6bd54f2964df87195e3ed87ceeadb330dd59ba5cea0c62cf35f7afe9f6c3140356ee7bd14bb7af830527ac7a73a38265b06c8a6254f4b7ae7933af9f3d3eaeec3721c9d9dcdecd96729850124c93bb93dd0c8e47d34d3f70f9c44126948a7ba7373cc26fa09569af060a129652136d90b44c671ab4517b59763db047e6f64886d8e9cd197b623e62bb632a2606d3c9eab1ca79036c8badf7a144c1c64cac0f75601f881df3a88fe4d6f2a83e064cf1c84039f5a91e03597fc647b60b4ef42a9f02005b036b922090486fc618edbf07ef103df80a000740e9464a5cfdf32e1d10c366596c39b0396f6badaa357eec68fbcd61dd528644987bec67552c2d44dff74f4d99494d1639e043e995a606d011bbc59540f5668e8a765ebc6ec3a077e44bbdeec8191b263bce6189ae3d8785fa12847127497b1234ce73b187219d788b1df60fda6a2e3d74c219fd316ce3bf28a80119effc6c6db2960c6672150f896f0236f32d825d549f6048dc0f2e67944e4f9cd950a67c6167e832eef0c201d7e3b69e7c8e414a4dabbb5c9827035c68ad83134d9fe6243a0b29b77fb57a74d6e8de303455b336dc780b66e49968d00f3bd65a2700e3aff7810d4b4c48c08a8802384b037f38828b825d870c125bdc7ba69334b4747c0b2bb5812ba9c048f5ce9b5eefe66869391907b6c49bfc1f56c49b1cdb1a7590c221ddc1d2a0b2a07fb36bd2d5f89a7efcbea047893aad024756f47d2268b32c6c7a0fc7fa67436051ca8d9f27cd87f0263aae12225424bd354ef970631d433a5462082b2dc9164cd66c8aa0bd701d166ec7e3675ad7e10b2f1b76f24f95be6c74460a6b2a3bfd6d4143944c41e17296624a46aa1636684a1b6cee2fac10ac81031cd198c69f3d32685d8b9a1110e181ec53e8872530ea3494ad73cccc7cbd358141372168aa89fe085e50c8038dd79fd7c445a9d3ac1cd0f820b79ac13705bce09d568e5eb299964425e88f90c1bfbbad045d1defaee8076a84f30e997baff1440508f4b94cbad3abb3917febf39a11f4dd4a6945f425a71ad1ea37919e45975811cf117af0e761acc2add031a41f5c4304d03916607b0620c51701851289e221e444bd3cefbd44c5d02b6c666b2e329a447d6f2ea176b32c1dfe54a75aaa55a0290d13bacdc2782e08744b0a2cf8ed8ded248d32a97fbb5c587e07602d1e9ddf6f2ec63fd5f8aaac8b99fc417574a5c2dc2492cbb84b96de33e9ec6ebc1ef96077f23fd312b328a1f816ccbb7dcde4e0d761e3626eb92aa7dbabe4fcc082a2eb6d80d84e6decc9fdcd81e132cc99c61da5df2c5c2fe43a9116f1ee39dda15a86e78b2a08378b10379b76ae56243f7d696bfe54994cb00e45ff62f324e6a045a57c18eac91537efa823d5c7d3061c8c5b2cf8effce93600b7878649999b8eef460fb3eda3bdd29e7dc5e1cd32135a36dca9b04a1228c530c9b29158d4325a381f92d196849d8f035f24589e1f7d3e20b3c6ceabbed17523dc067c046e986b6814c311beba9568007df19c450f28e1816cc47a682fe7144e19d01611b8c6a862daab8e6bda06b32938966df635f84c8b9612c8779302ec2ba23b6c5b029fe0ae7b885675e7cdb55cab876080b551ac6a1739f7967cdfeac30daa2622b61fab4671e669c5327904473c0e29724f518f5f8e5c721a24cc756e40ff64d95eb8ea11ef97ceb6ec911b85dd39f50427cc4d1e348a763fdd269a096e7aac6db77d1b17eac462ea92020b652fcd104d90105503e14ae4da921db748bce24886b876e4076f9a4fa73377660d1e7830f59d3ab36dde63aa5f38a290654f3e3fd5c85fa8acfa11444270ee51581aa8e98e12dd770fa15f35b4bb20eec7bc769f8346b5ed54e1a9d8ea9c4a60762c04f9dcd12b0675038defe8d83eac43fd0f456eaaa11d93cc6e05c0fc518ad534ea77b8fd5ccfeb2f1588daf6655b3d570d1809cea02cc46ea25c50d79903cf6d6311ecb03b61a3145dc6d1ae33e7ff3586db014306223931a871358a9df8c8005ed5929a5ae760f69608476c4dce2314c97de3985191bb56853da5d5ff9ae96466cabb66d0990950b0ed275e1840f48711b39ae4d52c4937288c60415e3b9fd926e94696c4cc1ce7123b480d1719266f1038549f36495b44ee531e1833ef9bbe7093f8544bb8288ad413f8829c7689fa446ad92ef3f35e9174111c711da7df2a53b5df9e6e7743b02e16b0fef1685181f999ee4f41b77f38113571db48037c86d35030a22d85ff4a86490ec9e8dac518c2c6a3bb338fd124bd31781d2c94ffff9c5ca3d3239df822e09c667ea4351801471bf71d039ce634538e1eb4ed130b2c39485a74707b3f08ee02fb280c78a0dc05c0fc580b749e637d43628316cd3f4a60f1e513b5d30ef1816ff42b245b521341667e25f06ff49a9f6d54024a7dab75ce9d34fafcb8d7ff3bfacaf3a74dd5903ee3134f5fb9deda07faa6d812a9587185387053f3ae462798193ccb1d9275bd8eb08c51fb1c19b6cc203f8db0495215b7993023379635803cc6bad41b3ebb22eb2409860a83f7885d3054bf57335a26b1666426b266a44c4b31b79a56246f08d8f49ebb21fd4eeb1a567a972b25433fbaac05f0572d1211f4e70634f2401b9594291ee2788361f7bf6d82fdc01f7cc5af5f7266e83db0c7fb749fbc00b9e305ffce3939adf7c34755b57a657a6e0d7ac9396626dea301f1f9b39be98836396cc1673bd36054e61075cf9d8939b5f4ee217238d1ab149a49bd333da495bc80e786063eb62808d2a9482f0442e0a9c5ef7e80ebe13ba5b606d39614581c823b0172489914f37a73452fd8617806b96aec2409ffac766d4706760482981adb02077a0408aa437f80431bdaa17b80431deaa11f9a071ecaa119faa10fcd031afaa10cedd086f6d01cf05087fe50867e284373d0c396f64b77a1cd7b1e444afa7b063a0b3e6727608538b29f8cd760822e7dfe65ce88b9f438dc438eea4aebc799cdd7831d2881f9cd4901f47bc41af756ef409f322da7e9e77d4691f87fb8682405779a3c9d3279f734767fa3166256114d70cb52d9196085b803abe2c5126f4307db92285a556271d26f729be377a3a7f1e8dfc7d25bcecd4d6340918db1af7e3b7eb9628605cb7f019aa4b9d9cff0dfe4f8ba9132249ed1959a01aea8c8f8aeea63902a16432f3df2b12a10cc520a08a14802b3f8abfa15918a21669ada6e7a18cf7cb3aacaa80a649b9c13755199d012bd01f90327bb6d98883ca18f228819ca254bfa0a5898144602931c412f81554170a4cbfdcd24b44824c8e34ccd013b52a4e89c068adda4a0921bb579daa4e209ec233b05704d45596e9be12fbe77450f1e1994b35e209c02d0fe34df6c3254f0399c4e9d2378b286695f88f9f3a95257559ba831b9e423e39997eaad8fc9d02b83ff33c2068d35ff35fa5c115468f8f83af78bbdd660f1dd7b44ab6a93b0642e21b4c2a07925db63dd4703db6768d9347c9a7494a9029b03f05443b0f73f5c7950c0f875cb465b812c8e7dfbb3d4838e3b286e57b9345fb97990d6fa2b91f1013409057ec5043310531038aea83afc992c9ea1dbd608e42bfe6f41d7ba907117cfdb32476c492cf04f066e406fa9564dd20bd3221121948d5a61dbb21a38610dab610fdbb02db7dc72d50db35e23856e959018bdae8678a037909d024910641025114ab40dce20a36da065834f028596c44bff7674ce4ee83ce1935d57473b78ca87774e8cc2e6c9c33bdb2ecaac75bb2d7cbaae56919b597c82384a14ac734a799f8bc73455aeda2dacfdd479bbe7899d6cda09cbae473da7aebe59d86ecbd1ecf2beb65bfdd93a67577d6d5715f357d3a06b4045d340d3326043cb20890cde0cbc0c6e340cc0c040011a0627062368484a80e40a243220f182c4e7823fb40bccd02ee8e17f8a1ae4094569f9aa25e8a5b554b942f453654fa1d2bdb61855374d35a8af1e8e92f2ba17ea62d576c51dc53b186f75e7d44ef14e9d4e083bc159b0133ce575b5b0cb754e0ff3e0133efba61d89a2e9a1695368da129a164d4399c08485a909cd0483a98911418c2ca1192142334264e48b8c402bb28656848c56e44723028846848ddd727cb45bcdf2cd6eddbddcc8e56a3f85fa7bea0861acb3dfd53d059d18750a1ded169f403b9ae5f8cc7202612758284b516e332b6d5ffddd45ac4bdd6e4e59afb6670b737ec17bf5be2e8ed3b588b345b93db7d1ce89f78a088fb0edb5bfe749c5ddd272a934dbf1deacd56db156bdd3b5c57b0a3edaedd16e4fbcb3b5d615132244444a181288360405da10096843a0d08630a10d19d2866042e2f8ff53e7d4c972f6730a15bca3b3b3b3d3b3641961846d6f35e35de4e6558aba86f0d6d77c44b4e976f7576efb7e654dc8114268d8ba264468a3ab9053bb6a427ed372c8f8ff1c29fe9f4d8952aaa3dd6a39ae2bb5593c8b69121df11667013809d070a068377d58a1dd3ca1dda8a0dd90a0d990a1d95cb16de7bbbb6a8575b698fc9ae689557ec21d4be7d4e9d0f3dd436dd089550e74c2e7cf799e2f14e7ddf3aa95ae6d6ee92d861bb56b51bb16b5abcdca867cad0690ff1eadc68b7f579156a3c31f6d55ab11d235287e99b4ef8aa160228d460a282e8ed45776d568c8df341aadc4c66f2ec71e51d2ffbf563afd076933806cf9cdda4c131c489b39f391bb75cb5b54cf474c5e9b69d275b6cb5927fc6a738a888765b34f2ac5a36145ffbfbd8695daebf13f089416fcd18206b440851698d0028c0560b0600616b458500a6287200810e48a2058206004821488088160b0822e5620801504ad405301163ae789d5f5d4711327ebbbd595c5fd5df7dbe90c1571f614749e70bbd91da45705154e1d96cdd8091e3a059d278a65d7be06e1edec4efc62579c5dd479baf86b7d5797e37ebafc4db395de5d6c0ba3d65368ebf00e56b9baa6ebdbd7ac021d1524014405804400100200920232420ad04841d277172b847776cb817cb06eb30ad80956e114b4bdac8bcd46ab6b4c6b4d375bd4ae1de79dac378bf58382150a464081062738c109da3841152788e2042e9c0065020f3c6132011226684d20f4870afe88e30f04fc51fe71538208fc63144685f93264ea8cb139850aded9d931773633e8c90fded9761ba4f212309bcf179a6ef81c5abd1cc52854efb9e5f29d966fc13b1b9b757bc22f5f1d611d779f54ee5ebd27ded98a765a8e51299e76af8e5cce936e2e79686f57e52f8bbb6a094e3b8f2781129a045f4870f3ff7db3b95dad6cdd0f32fe373f68e0ef090ff97172eef698fc48b2e9b87c35caab8df695d5071e7d94e99cc5afab45bd2ef4a88f2bbfe9e49e8ffac0efe44d7ce481f968e28b8c700f1f484ff8b8f2cff9cb47929fb2071bff6cde2387dfdb555547bbd547bb354da23d4e7a08f21b515090169f6da728ce7ae4a087901e424690c508904640f4dbf972ee9eb8af3ae7096f17e5f2a3ddbed896ce79ae5b168115119010023e800881941010c9430379b4f258210fa13c4a78c8818701f098824706203003043b8000ccffc69a4205f3f6e572d666e1760dc23bf94875ead6c5e6b7bba868395547bb55b5dc348f36501b845daeaeabc63b186fa7aacda9eac43b189b5a3617466af5ceef0fded9f61076378acde9faae6efaba5057919ba9e09dcde5e7893ae2ec46715f3193cd3df776ad9ce71d82dc21c61d59dcc16e23b0ac77b56dd8dcacf525a12c373139cc17bc5776a861070d7670b1e33fd0800f74f9c0933a06a9a38f3a8ca8e3043afaa023083abcfc8f80f1f6767765e2eeeecadb7dbb0b005867bbdcf784b7d1ca66cc5f8cd2d99dcdea09b3acaacd9be57c67c37b4534b46de9bb31aaefa2ec6e238eb6b6db72f1176a15833376513ae776b9ef799e70df5b4c9bdfbc7a559b4533ee5b4e5b3a6e263007147378f96db3f2506fa1ce13f79c91aa884939162dbde53d6f37ed2b6b6f576d770bdc55557babab96a32587142b98bf2f968d238fff389a78573d7108c5813d90478f078ef0c0159d13ee190f79e0b4bdbbf7c0e1c7eb9cb0c66d86a30a385adbd9e1b802077e438bdf582e57dddd6abda1c3bfe1e5ff3716b0e6bc08bfc1b991c77e42e486179b1b47fcff66e4867e75266e98b6b3b731c76f98fd69a38adfda403a3b9636aefc6facfdfeb4b1c3061bbfe98d6297b39b8d2a7e7bb13d6cc0904aa57e785e2c9b53a9ebe243a6994ad737bf584c938847af3e9b75b9a9d40f4611f1a841acfdfe6ce149379735ba354a5bbaa9d1851a46a881e57f73f7a672d48a5118759e9b8b1aa6ffade558ef971ba5a1079b4699ed95f72be3360da2ffad07abeceebbe578280d1c34b4f8dff6e6bcdd5e2cdb8357ce02e63d681cf11b1a5e5e17477346c38451bde70c3bb63663d6de54ce20e28c2bffdb1167599cf5d6edc63daf5c8ed2bc73d6e70cad7bcc20e368b766d8f0bfea99cd584cbaa2c0ba5bcc28fadf88521d894fe939dd5cca2053c6d606193890419e7abf58fdc15b6716ead4fb6795be79cab9576f9b31ca4584b7b7b35ca9bba6ed8ac780610c2a28cb7277b37c75c462f1378bd100317e10e305318ec41003c9a673ea59f5639a44d84917bcb3e94ca182771b8477b6aef376f5c63b9b4e770ac23b9beae55c8b0a6f7487a1c3f0de00030730443092983af0812d361f1d9f5310cb669fddf314d3ccad17da4f784bdddc57f567d3c1eb099fe6dbe6b7b73cc52f6f5f6d6eb9dc9749cb8f7abb65eb1d00a103cf81283840c481992fd0f80206d31757b613757555cfa7d73511d279bffdd4d9693576f1579adf8ed7eee22f7e53177fb57c95d11d576fb7fa83f3b65d2b1bebd572eddabd85f56ebf386d5e00f2547e80bcd082037951668bd1db8b2bff5b7f6d3198b5f28e51db68655f1b850d2460035e36f0a48b35ba8040172b7461c30504b8487a54dfad57bbe255cf6f3fad3a2ccbdd7cc2197726547ef046f7d0167d6c31c6164c6cc16e61658b4c036268c0089306ba68e00353ef7775bba054f0ced95f1b851769039d1875aa41a8d3ec3a6f2d2815a455c57dc5ab743d75bdaa5e5b0c0aa64974e2fe769ef6e0edd4e97cf0cef6a65b55b7cbf3cb7bb6b3bfb69854e7dd436c2672395f1da97606623065e0caffb67ad7a3ddf664e0f46fc2401e3d1890e2370ce8f0ff9f8f7a30b05a3190a433c92d164fdbb5470b2fb6feba7b45a4c511ffad1642ffbff55db4d9d568755bb8bf6b4efbce3e5a98d8b7e5fc45b16c1679bc90b0d6196701c5fff642e243a64994123b97691221f1292c9bd314118f1ac4669f0b087d0b16e816302d80440b2ca4c0220058d05c81c7153d5c21e50a12ac008115655cdce1a276cd82cd202a414419c5ca1dd5ee7deeee7abb8b05177fe173bb4c5cfcd56ec19bceb959b9a37a5eefcaaee88ab45995bf789f27de466cde465ce5abb7af47fb6db39b5d45b8afabbe5d1567dc1ee5d6500518500155053ca8a28d2a74a8a2a40020ff9bcafb76f3b97b9e72e66db7fccd4248394b6b5df5edba5e97bad35716750951e0870a1250b1012aaea062f51bedab6e33d21ec2e6d94f6fbb59af763b555ae7b3af27cd9b2610c8049a98c03a01122480c6c6dddd42deb896089c600111482102190432c021a0648a124c41c414394c11650ad3fff7bc3a8538d06945f522ed13ef6cf9e8c43b27770ae1ade7567615ad282bf7f5c43b9b7be29dadc5cf76558f72ab577993143f26296a4c0f58c1039478000dff9bcab1cae6d54671cbc564169bb77be21dd7f5beb603e470c00f0e607fd32bcbddad7eba7bafde13ef34008e0614a0015d034abfe9089d709326dbdb39db3bcbf6346982b7cda26bbbb6bbe51aabeb115f61d4d95d9cf56a799b4ffc4231dfda2d518031452146f101147d400101289880e285c2c913673cc1c4d6f34a08ef983d78c754393ef1ce667677bf9b95dd2cb4a95447f8a5739ea7def2aca3f78ac4ddd60967d95e99dd9addfa85c4dd169bb7bbeaf90acbe674b5553d5fe16afba37f889cc8c30b279af81e276868e5a31e27ce76b75a79d5063941fee7a39e2600414d78531352fcb6593ced7975a4d774750d3531d44492ffdfb89c2ef759abbc69765fa4cd0416badddcdd2decb4bc6562c5ca4c5059c204dbeba65ba7bb9562d91575b790e669eab551e0493797feda6240d1f5da282c01c4001530400d06e8807db6890157feb756de2bdc99a0acdd7b0fbabb14e51603f0ff03b28bf21e52228affdf5eb54789169438ff4f9d6e53e2f4efcada6e666d778bc9591640c502560b58f2ff1beb4ad99c66d795a6a8abf3f7e55ccbab0b6ed2a449930d6955b7db7addfcf62da6a390041549d09044988493243a40620548ec810411ff8fe54d4808216105899dff4ff1e011369675a9db7dbbe0ede56e23ddeeedd439e1fdaeee518777369d6db4f6f6344dbeaa5afdc4277cea0c9d824e6cf2177778e7dc9aabda9c9e58453a87cef3f439f1767586b013ec730a3af14e8a078fb06dcdd3a33dd4d3b5c5df2abbe795d0ee79d5ea6edaf236bf597777b35cbde569cf6e15d3245af5bc52ed37bffd75b53877553d45c4936e2e61bc2f0ce76128a4eb0bd2d66d8a74f1a49b8b05fe3fcc9b14804777376feb366f67b339ed3de3370b0599664a0c3d56ea8574e91f0534316205464491ae6f66f1d7955b235023866c3daf8ac0a208b5880b88d000112d2294fc8672b7d56e2377bf6d6edd6dc48b7016bcbd5874ed9db7f05ebdddc5dd5dd466adf3ba387fb1cedb3d6d2fb6bbf86ab4dd164ef2a621869040661ded9635c49821947c16a20b21a010828b1028bdb6fc4d337fddccda2e7eb97ca3558270230829583c7d5df9c814c40b4108850183fa02666bf350101e9441e33f0c982f60da1e1fca1895c161c06014959f2f6038eff948e7d507800003958f7a80800108158028fd20c59f3a18a57fceedbade6c94572e2827cb669f13e7d6f503024c3f80c93f74e0c320ffbfe54d3e3ce10351183058af18f5058ccb314ae3bcbe72c6abf4cdaccdb50f20f430480f4dfc7f18309865336f555b4c7ecffcd2d9ca9b7a287bf8044891002f1f060c46b1d9f5a61985d22bfe02667b59d798bebe7dc5d89400fcdb4e79d043ad79130f67fc7f9737f13080ff57397ee523cc5b54cf473cec90c7ffb655d585a6b9d5b1cab19834b338f7565eb95b086f3a45edfabab8cb35e6efb6b7f5847728b3e9fd6eb77512ed7076263bdcfcffb6b35d930e5afc7a9e984887329b9b7568fd6fff9fe44d3a5c31e500c8a6e3b6904eed5e119972a8e2599873a21cd8adbbd68efb9a4ab16cf631cd547f0de19e31114fea5d592b962e3c487c4a2aa573e261a55e52291e243ee5ed5b7b9f0b872e70108303171cfeffbfbce90606dc30c40d574c3720f9ff8de3269bc57b13282d5f5faceef9e8d5e4e56d13dcd715eb525d1df76c5b67166ff3bb576fef9be5ebc981b617cb6697e317bbdfcdb6583cc57a1775d689db9e0da5378acdd80623a61adaa881033520fdd6b3f87839f1cea6b756b9bb7a5996bf48550e60c407aea2a11d74a832c58428236ffbe0e3091393911b9b2f2a04010d22061a668090035706082942c8b1c6181bc882020f60e2c956c20fae3787ee9e80047ec091061a5c4c0086175600a3829720a013ac80f08106196071050c0f70c00b2ea83c50c25b108ac811c71856d2202d48010ac07cd120036d8d0d7481812c2840c5143920e000aa1502d02508e8670c31ba08c30265aebce1c618626c808b2c2eb084123610400612f8b1461a595c000b08cc90b4f54f158d881f77d821c7175c5c6185049cd80187ad552b80f9d2e5a70a145347233286185f1431c40e336cbd02007eac548162162152fa3bec18430c0e747185151298c2091e1030431800fc4481628e60a773442bfd2077d8110707bee8828b2bac98c2091e7640000e33d4a10a03c684279b20816041c148110f28d1e1061bbc74e192c0c1861752037006996941c6029a40b215dc40517a2273226302f3b26e86c336213b334e66700620644ab00e6c3898d9004b52d200cb00e7822347664c2523448a988870306403214a72341c9b9b1a9baca686866606fbe7008a39dad56d3dd99aa76beb82018a24a010028af7c4278c57dcd7979bf3bf0b1c0a11a0f8000ad33f8ec2834f5178b098279478628c27b6f8fff78586d9b6edcbcf951a0e9e206addfdbeb9f5c47d9fd09c104467a7ae8b8371420c27aa78ddee37e38e7f9ca001236dbd4127bc7c77b7274e94e00412ec72d5fdc748f08ff9f18ff52102ec0e26f2f8ffb2c329ecbaaeb4495992e5588a655882e5577a655772654992e4488a644882e4477a644772643992e3388a633882e3377a633772632992e2288a622882e2277a622772621992e1188a611882e1177a611772610992e0088a600882e0077a60077260f991dff8895ff881dff7795ff7715fe991dee8895ee881dee7795ee7715ed991ddd8895dd881ddd7795dd7715dc991dcc8895cc881dcc7795cc7711c12d7dd8de56a9fbc2c35cc971cd429e7e40276010b0063540e2a4700ff181fffd81eff981e226042096c32917432a10213404cf03031c279623307759ed87cd5cd629c73eae057ddece98c12254a084bb040108c62c244cc3f3602116cc05ce2b544001ef775b366776599b204f8bf6d4b74b004126d09243a9887077727fc016a88131e43d205032b58090cb8796e1bbb8ddb7939770bb066f785c231ca72b9e9d6bc55f1b75d555a8ca6c41232e6d0165085b68028c820038be31ff3c03f06c73ff6c66b0b58690b0083b9f18fb541c6df8c918416ffefe126b8955b39c5d650e33f0d34ce30e31f2b830c9d935eb3d0de56b6cedfd6bab22d563e4fdd62b9d022141fc2dbdb5adf0e45c70986829b6027786f5575c251706b7d55ef66a1e8b4d6f794b2395545c1f8ddec932718f576977b9e27de508cd269adef09efbc5837b32bab75b93b6fcb5df56433cb7d7f70516b7d71ce98bff83c5fefea7277e55c84d6fabaab910878bfae93cd41e7bbb22e568ffe51db1fddf229af14e8681f6da0224cf0dfaeb928e3deba5c0c8508a73052661541c6e334701062f3bba6dba89559aa4d4c9a51fc3a716f5fbc21e52ce79717bbf58c056fbde52beaf5aead8bc542f5970375bd5f0eb499a61064fe3b23cc5f8dd9de66b773d647ebfd722e7aff6c2aef2d76af5ee8c9cd2ae61d6f7de5186fab9e57bb0c16651e50e6fd7f9d5337c2fbe55c5eac9bab704ed45f6dcef2470d6e001105102c204c0002f59bce49e7040404063fe8f13f027e333edaf90724decc7dbabbe9d6a5758ff6d17c20800f447a988214cf55cf574e8c3a371db13b65a49c45e53aa70dd55d2b227cae2eb6b5e9d71673c22d47b959e38e777f71a0cda2b9ddd26e51d93dc481542a956a47a57a7757bdbbeb96a3aa57faee9e55abea1f1b438c303030fe7f10d56305c012f0c41150582beef9685557cd595056f7c5ea8af98bdf1569bbf0fdc5b66ec6db88a33f5b73a02954f6ea1261dd66d344592ed7678c0d05e8eee6f237bbfb5d6d88f26abded6669d5bf05b4c8ae90409707644c6c48afab08e316e76c179c9c0db7bc672b38395bbb5b2d168ba7196f578c9b59abb4ddea2beb60ff98d0632576c1bf08340360b179690400a3d53ad7bebeb9e7367337cd2c0ce544caac259807eb2065d69227634eecba53fc048f39bbbb7595bb5be9fa6e16868505b8c0b6d01af87f2c9019ecf8d5bbbaf9496ff1ee6e9ed193d4ed48aae76458b29d47bc3dcf0e3bc1dd3d7756ef7a2426cd5d707ff709aba2f50ae7447ab369bb45b3417af3de3be6847bd472bd4c8e5c8f35314627ddf08f4d1c42cbd73d256900d84c2293c2a49bdf700aa742e8028316d80c61b75830e400030c30bc9c932a525ee8e3053e5e40437b018c77b70af5049b7a3fe92ad40b4ebcd083deedaa62a54829920b2470210ecd850afceba8d88ccd95de5a50d05b731f17aab8e0c1d000ba1022c3a1a1767565bca5bbd571665f11c8b0771142726808ebbdf5c6e4048c52d97a7eb33e5af57ce5edeeea725bf8ed5bb3fcd459380b163169dfbad94bc0785bb556db5dbd5c6d5f9d13de9dcd56f076b2727b76d7eac51c69bf6dbab6ce7d84d55307753a577dab7cab2a67f5b5cdab74b37076dfd5bb8d36bbb2e9cebb2a5ad9746df5f064a2ed9e30ce59ce1411cfb97ad723d65ebd2adf795d1cf322fcf216894fc1db4ebbe2cc850ba99a75718cbeba75e10d85b7f31cc29bd6e94c7a2bb34e186f7daf7a5eb5729622fee2d7d562f3a9e38dca4f2bef95b9591928ddada11f4ed4f5de406fca897c5a0ea437cd50ab8e55cf2b0ef4839ba4b9633497bb5f5c20f70437e5829afbb5f8093fc13a24601409d86c718c22019f3036c37cd1dc6c4c1e3a27f31fcbc06318f8c7b4f87777ad5586655755d5eafd75f1777715cbae625443907899e14d5e7478931724dee4a5016ff2c2813779b1e34d5e44f0262f2dd0c0641a027d6d08a4d786c8e1b52192786d082a5e1b2203af0d61c66b43c0f1da101f786d883f8e0c49a2df94a4bf290901de94c486372501c2742447d380b0e3352052f05a999cd7ca70f05a19115e2b03be56a6e7b53228bc564685d7ca8841f2434c64ca788d4c1baf91d9e335322a782d069ad76238f25a0c22fc3f9122478c945abca90ce34d251c6f2afb7853c9823799376f324d6f3293bcc974f22653ca9b4c2d6f32d33799ef9b4c19fedf880647307882c69b9e7ce04d4ff8781347f326aec89b38fc26ee7b1377e5bfc80558d3c0c8101b222da037b5d037b55a6f6ac9f0a6d60f6f6a39f1a616176f6addf1a6160ade34c6e64d634078d318f14d63aabc698c97378d297ad318d79bc69079d3181bde348687378d19e24d639aa8d1404b0bde3464f3a621226f1ae2e04d43ddff0b19f2426e72307a2d0732afe570c36b3994792d07245ecb218ad77290c06b3960f1ff432e780e3af85a97f25a0f7aada3af75185eeb4114c921f23447842c59e14d4bf89b96b8f0a62534bc69090f6f5aa280372d89e24d4bac78d3922cdeb4648d372d09c19b9690e04d4b04f97fb38a77cb71c4a0e05f63418f530a20ff6bfcbf0aafb1b06a65d60c0c29dccaa9ea68b71887f5682b1129bd5badd57dbbc9eaf98887dcba9d741bb16c667d3d54a1ad4348cc014f620d08c077581450b86e9513b71814ff2fc3135f471118a5a2d6efe02225ff63d42fd4a0be8bb2506f6597a80bb13d85fc662a3d5d5b9c68d5f3153548ef9eb160e20d4fded07692fcd905ffefc26b5ae8cc47ef0038d44857d8a8a126f82f62868c097a64e8e55c0be6003ea42a5a59d82e86c2e114bef2ff2bbc964fff2d57379555cf577436a30242873f833e6f7d662e7dc459159b58aa6879c2d596c58776cb8188b8a0d0ca59f67689a6b4b0f66e87b60211d8209f99a0ada00453719866152585dbcdaa5e75b32acd7205c8f0252b34ff3554bc5de3285170eaf619923abc1325cab68bf4ceba06e6cb6b1e00a21f9f1ea11e1fcc8391f4daa3c71eafed31e4b53db2fcbf06ff509a3c084cfebf1cc192d74600e5b511e0f0da08bc786d0478bca687f69a1ee36b7a70794d0fd66b7af4f09a1e61fc636580283df6830fff580fff5802fe311efeb11d7478d3d4ecba4acd7f2c877f0c01ff7f83e100a4c3108bbb56f4eeb6bc3d63d96f77e51552952d56b40084d1bcdce10587ff2285d5ff035df18c4cb3ef977361f1b7cd2b2155ff39ca5a72982e2db42b3b54b4f61956e0a2c7ff672e1a972a563dbf5c925c171d5ca86ce8eabe727029616d6cd9824a19da16a1ff6db46a5b2ee8dddd36d1e941f0d86c8f788b42ef99f571b7906b6825c46ea38da5c5898696e835b7da2d9a963aacf45776b3ebca5a3a4841059fb62ef7c5a8ccdddd425f8d56ed6ebd24cc6b594ef0ff1abbe11fb3013bc07f77b7de8558100223948210f9d84c55aa556fd7678bc9ef7a2d680acef3bea3ac45ff206dddd620c30a404d74eeee16589d37dbdf15c5eabaeaffff58972c270069d17b0c86c27d2b78af36e3be59ae50765d59cbe280370db76efb767658a997218ce271b91516cd397ae55c4cd3345397ab52b55beb75a55a5b59d5ea3dd5edf4477795ca345369abd5c3894c73bfd94d97e09ef193265764a0c913fca409141968f28427bbaefc6e31e9faa65697affd45b7de466b51cb552f9b577d6f35dd5c5829528a07894f314dbd91386a9aba5d5148a5744ea9144fbab9709e110f2bf5629a9d9166b95a956a0c4b6b3d68eeb922250f2229474841ea91426edb843c4ca0e1fbdb3281fc7f136efebfc86ba910a4ca7ceb72317fd7a3be62b4b5b2a9f3b7d44deb725d3d8a06fec5ae1c28bf998a90e66994273c78683c11e0d981a78727846db3562e546b7da1ec010588ede4aba373cd2dd4de6a6b7d4fd4b9b7aa3a7b74cb51a4cc82a2516cc261066152f9ed6cd72c275edbcd522947502a5112fd7962fe9e278beaa0a76d94573af9b415bd469ea191af4672ffdb2b1fb9457ae337f76cdb751515ad2b97bb76179b9ef0d6eb08c86f5de784f5da552add72742cf3dfd771f5ee17951f3c4af9774cf2b8cde3ffbf38c7f72da2175b6c4244fa17bbfc131ded364441a8c49f2dfe768c551e8a1a180638800eabbc87bb2deceeb767d5dd479cc53ddb2acdadae8199f6a1f1ffaf8b3fd9b47c3c689f94f7e94c3c1f3c2add1edd139dab23faed5d592b9613ef6cf8c5babbc5dd5636cf13ef74ae0e8d2b80c6f1fc6fe78b7dd774655b481beb5766f12234e3edd5e6276c3cc980f604ccffc95fac59fe6e29d0362cb4cdcbb96e168ba7dbc5afcc7af3bba62ebdddd5bbf3c78e1ada0e16ffbf5fdbe9f27f6ef9cd544e2d7df5ba2eb5c55d1da47fb29b85f4eeaed4aae75556bdedeea83c503aa084febfdde035d4490cc7282764b870eba48acd49d2d671dba33959fd3b11fa3cc509f7ff9bce539ae4f12fa435d1c0ffa67f4c33dd46a6a9dfae6a75bdbb4b55d4aefa676dd289341d29feb7beeab4746efeffdff83f593999a0315901933134265e3021a331398189065a097ffc7f10364fbd6356d9baebc4e6b9e59559e7897bcf2d2023de52216596cefb8a4a1586d44a709540e54b28fdd6ba484063cbe2e3a5edfba591200409575ee7849700a22dd1025d72fe73d7dd507a96b45cb8bfabcbf3daa38de08436c2ea7fd339d96db4f6bd5fa717e7cd62d40bd559f5bc3a8d70d23dda0837ff4522cc1142164d042d5e8426587dcda2894083268294edc5ba791389f021b0f12194d14248613b7bc64768180178069c056b20d851f31a08718040c3ab41a8261d9bbd4947ca2c21a14def2698ca0781681ff4f18110da072ded03d0092e6a57a1cd83254af6505287921b94fc28c11df0a175504607337480ea60840e70f07210493ed060830c9460704222c2051d1c51a2b13e30b9fccd4a8c80a2074590f8d1fb011131f486905ea75215b5ebaae7151682945920e4742aceaa8adab5a888b31be07cdc4d6762e3bd9cd7e8bcdd130daaf4ee2226335d6f92791cd6a9dcbcd954f5226d9df7200c0cdea002dbacdc963078238bffefdbc888d9d756560dc1083044c87b61c70d3dcf8a6161dd3a45f3a95a210c982f2a04c04b172e5b8886b4a420140494050b0a00f8b97282952a54329f6c4a0f94d7c298e3353188666810f25ed03143cf73176056d0f1ffafd691275fd4beb9abd8dcddadcf71f39fc9b1bd47ec7c208b23f3c01b2a38def877396a8623a896a9f7cb8b9c48e08893254798b071848912474ac0e3dfa7bbdb11122870840425fedb1ff76db7b0accb0a8be6970369965fc1b25b5887aab0d1e26ebb85b566d66773a2beb795970355e19ca8955d22cd818e8c70f39fadf19f5da14605f4665917d07f56c6f734feb32bd0f86e88957ad9ff5999ffec0c33ac94b1ff333234bb7661c7508358b6e73f13230ba375a9ff19187afdcf3ab0590ea47ffe330e6c37edd1bb5dd5ada978a4adbf00bd7872036267c57bdf2bbb5d708172760acbba80482fff7ffac7e238e24114eb9bdb0c65770cb4b359ec3ec25965773f555c0630f03aa7ee71c9f92d7f44c9069ee3d27161a548ff991659fc6717c82cf0ef7d7aa72be7d25d2b6fcf1bcbdbd3e615d1767916fdb35ef155d89caeed2add44db682dda58d8bca6ab7601807bb53dffd904b0c8acdc5d28b0f09f5d6185f7e90a806215190538efb551c8cafc6754fc6713786d144ed0ecbaf2c924f0bab9f59f4540afae8b15facf2030c5fff7144fbab9789d9169729d91697246291d94f79966d7ecdaa56b76ed52d4baacb42e5587113bd2e5ae5be575b3d04bf329af9b5bfae7a5f914d2eb5ca42b0ce7bdb6185074e955ff00b178bb358bb7dee74aa5bc4f8332df01b0dd7da5f3e279f9bc805e422fa297d1cb7f2604e9c5343b23d3cc82f8cfca0031650828e887c807680b00545e7ab2604732d0d2ddadeb3aa776ff673ffcff4de6c3ffe3d85c8041992f61cabf4003111890b0f1420cf1066001090a0413febfc9ff1be002222670448b234784808a20421322d589ac1ecb7fcf11ada66d570cc5c324e076b31c8e12026e373b47943a860842e8b9fc9b70c4881d47dca793ae7473e96baba7afad5cd4ae6c8bb516a183892345c0fc1311c1fff7ad797b8448f87fc2a78e0c09e2c8100e54fd881016d1bb87724e7024c7fb22ca14b5ab0d05e8db7d1db901d3da6f17d3df8df516181738fcff6e0571200ccb6b8bc12e5771d6d745e1e0e0e0e4b4790adedefd7add15f71ca9d18300476a4e474a7afc7f76c3927087922969001fe4b7676103092f80239914af3a929d8e388231f11b1c7941da232fc57ae4a5888fdb1523e9b6f4c7d16e694a175a302854945414ac83a4d7d3ab6e2ca6e906bdeac68231c62d18016024bdaa7691deaa359858820688a2283c4eac94b210640e2c4814ffd80ca48fff4c861a76cb81368b0fd51088fecf0ef09fd1f09f19e0b54078c4d0e347445b4c66a7b0d93546b3790fb942d9ddd9ad128661188621088220088220087edff77ddff77d9fe7799ee7799ee7755dd7755dd7751de7711ee7711ee7711ee7711ee7715e5996655996655992244992244992e4388ee3388ee3388aa2288aa2288a621886611886611882200882200882e0f77ddff77ddff7799ee7799ee7795ed7755dd7751dc7711cc7711cc775655996655996654992244992244992e3388ee3388ee3288aa2288aa2288a611886611886610882200882200882dff77ddff77ddfe7799ee7799ee7795dd7755dd7751dd795e42886e0e77559583fff8ffa67bd4682f3ffddfd245db77077abf09ac281f64a45b32edee588b37bca6e81bb56fe33195edeb63a4ff9cf62d022c481c8fc7f96f49fc1a0e595b170a0ffec85ffcc85ff6c0002c85da755aae4292cd7a7bb1ca8b73dae2b4d79dbb31aad54f68a66577f5d287efbba5f99c56ceead4ba7efada2b9fdd9aeeb45f1ea755714e7d596379ad9adef0ea568ed387bfd6748ffd99151982a2afc0ca9a854a112e4035445a525488b962aaa2a58b65009caa2f2d293c5347bda2d86136dd6a5791632c5daef4f1167f5cf6ed7a2b68a4f08dc7897a33d78db5a08cafc6745eabfcee9dfc59ac8438aefeef64255bde7d6dbe67665ad6eda578d59ae76e3ceeaf908f32bfd3f93f29f9990a2a2379bdf6ce53f8bc2b35dbdf9db7ab9a9f785014311f43e3c6672d7e90645170858e06c7f393ba46ab5b2aad5cb2e0c3db7df5103e9755b6e8ab0238aff3b94e0fcf7d73e30c88a925ea7eaee6eb17be57d2ed2eb5c1f38c0bf69aa5a3dc8e73f0bc17fd675aba49c657beab86204b78e247430f173ace07fe83ffbba7fcde1450e25be488e3c72ebc9eb7dbb4b0b2eda1dafde1ed3fccfbcac2b290981a60ccd0d722089a3070ffc84f13e385eff62e85d793c8355703c1cff8fc4fd3f91d66b6f24757753bd01c60d40dca0c10df6853c23d34cad7abe52d4db23ae59ce5395bb52b15cadf7b9d8f8e27dae14e95ae38c2194b3537495dcee37a72df7d13fa6d9811a66acadac9a01e593e2f9cf9a7ca6737a56ea45b36d8f4fdf45f91d4a834443028f8651efd19bb5df9f77ed728602b43384f2196f86149bc5d90ca4ffdfba19e6bff63e57198294c1c4ffd63346619563a4fdea7b8ac7a5ede9b81c6d203204793210a09121a5a8c8d5310a8853712a8f0ba7e2541d97beb5b06c4fdad72c7b5be943447af5e9b8705c4c73d5f32a9522451eefdbf2f696fb6014e9e2014597182978b16ccf66b9961a320c41fe7fabf8ecad4b6524a6dd6c7edbcd5add9dd716f33f761bb8713b459c0de13fc3ff1908af858146f641185cfc3f57db9f17db6af51015b5abfb0e9966ba354fbdcf9552b9bb8594593c4899b57b4691328bcd441d88a3f7cc9aa60a7b820352fcaf504e95cb559a5d5de839a5bb5b7f5756c6c1ff631bfc6718201939a0a4bb9b86f24514adcaddefaa6271577d926e23ed8b1df676adb45b0c7fd5f627cb2b0bf51d000ee48513ab9e57ab9e571b28f3ffba7cd531e7afb9bbbb8db6dbdd8dcd5d0cf1dbb6317937dbd96dd4c564b7d16655e67f66ca8cbccedbedaf2cb4b7aaeaafdcea3db3291769fc6b5c0cbd06e0b8924af1b0f96d790babcb57299569eed57d55adae2aeaacfc660dd47a9f0b03576c967559e140f9cd543abbe677531113d4c5fb5c9955b19ca3aaceea605416485ebb809076019dffc75ac0020b20fdbf66811b0d0b22babbb15868582811e4b3902310ed8ab722862d44a5e7e55ce7ad85cd796b79393bb45b5887da9f16cbbde253a5c572affc632bc05400c8bfca34554359f660c00570a461421221b8e38b26dae0f982410d0c3713c8d12630c60ef88a16b2f60f2a9410e00355906084005882084107229e0f454840023b2548f2431231d27082ca0b6610d510258e57155b54c1fe7f087da7748af4eaa23d18a57f78d2cd45c7fb5c18e57dae533a86a51ac3d21478a5a0049b983473970395408500fe7f7b77af92df4c25bf998a6eb7bb775116d226b0feff637fb4452b9b770baf8ce5fd483adf8665f3a528d8db3c8d86d9bc118c2603ac0876e395c69fe9a1f4814d767343539ac1b0d720db3e7b2c859209d8db40a1f9ec310c9bc9ae60980d9661d84c4d0b1996613659065a30ac06b3f90c23b2cd643535a71c8c95b2aca40356c2b02c073b4186e13c0d56ca663686b190615876b325eb20c3b29a52868d20c3b09a0c4b01d300c366b21b0dd0ccd814c132c0300c6e66b023b09a0cc3b2191596957270c06c0896bac16896cc44c16cb2acd4cde46419a66344c40450ea8404917de9330660a599538926c3669ec607ac0eecb337994c8f3d56c2328c0fec266b8261194d96cd60d8873dc16eb021599665353e18932c2b651837b309d9e0a6048cc8110e3220309a6c03ac84cd609f096538072b7db6d63c3e311c663e040d602fa58b6c06abc14a3618116ca64c96dd98331839836559096743704e180d86d970a50e040ecb726a6e320cc3301b0c33b12c7b63a606c3c94a33469808990bc36676301c21197663836552b20fb20f320f667ee63123584d9661444aa69952b6419665580d5652319c2598109a0ca3c18a8c188661580719006a84e064187a33c426c352c06e306c26c34ad815cc83accc946442329b8c069bc1322c1392d994b0199a190c1bb119ec84e16043300c83827d90e5ccd86037252cc33013c36a32c89060a50ca329616526049bc93ec06666b2ac9495b032cb300eb21c0c07bb29651886999807598ecd0c56ba29611836622c49931b9e192734d80c86839592603838a6902f1d7c808d50c2b2ac26b3d99809034ec8150ccbb00cc3b09db7f9d6771904f3a34bfb980b1d7990c105893a1cb025d3c10dd131c76b09c18d4f018932760a798c1742028b228442e0414174b0e00796103ef8e3043a94702512499e94b90814231d44968c21e460221d180bc473102344dc82dfce403ed8399bc850732cc151986be2e408541f209c7808085883237fc40561fea4d9e1714986ff992aff5809feb57441610a323533e490d081241c9b9b9b9a9c9c1a1a21331ee0d8ccd0cc603084880c900837a79a9c1bb234c408561a62138021ef0c9119130d1b320891545324b3c129a18878403a202987cb105d42152193811dd06c2961353c19488a82858a264356ca2961d14941d21c336034a606821432598983999d34929cd0910482d00c18189942809913c8182069039c2e43900891640583d64dcf414112cf8b73c2c983c9066786088d98d2016e207353d266763e32782481d3448d196e0001a2482684468a66539650d85fa488e1029a538e959c126ac0949ad89431540089136228238727331049b1d4b0459210973a840c443c231805923610c9e4d8943539374566c69f13663cc8b16243e687c8d0cd950eaa58c9c1b9326448f354204983124acca9312f20529323a48a082b2c91947373e503d486249a19130d5693424d0e0d949a263d260871e130b9b9529363b301112a384b4a40381a20515202071934b939016929814ccecd66f311f9c61f219b21251b0e68cc1911674889099662836393537a428342899482d1743013024d061cce4d3a53568192e42627039c918c0f9010f0e6545a525a52f344529322252a344e683ec059525262a49bf12086a4ed0936a3ceec9466680420c20a09e0ed031c408616523ce009256a80c105a42e46dde9b9021815bc70d93224840500574cf23b9540c208b8d4051783f4a1071e26a4481081830d6c8e08030c269648a18a09a607180c1152b305165634a00926945800124714b1e5c4e4c93684108308620254853ef8c842c579c861555350726c9ad8418711a70d369c68c22c450d9008c9b9b151d20105a800b3751010007eac543102010730c09139420b3cc0014fc0d085cb282641522a838c3fb8a4a2883836355314c00a0824f143026c1080028c30228720a014142643b040b215648094fcc07c647994f0c8e8a0990373235b235303278d2168646564636458cc3c20135362015b72e3018d12221b641a64186048b40b688e641a662a15c984d0e464383737998d0d4d56c26630ace6891899e960e60249251c924a586a9a60cce604644c4b24d1d00cb129c10d322524ba9206439480a2a686a412169c0c72942491210927002515663e10f2d60cb9b17243d6e4cc40499243d381a49b2a929080218333ce145182217224d10c9244338403359286bc225c2009274991cc060acd139a1e68c040c80640c450ba21c94808464298d9d19edc24d1068981c6c90d69c333636486e74689a4992cdd939a9c9a28926684d470504209e966b0d290122ac70a8d139b00d470509353c3c210244390e024c1c9c02600332c88a18683192962a0f1228904164a2cac22c1839239c4488d56c26676667c4a424432a8c96cbad874600344834111ac46c80c4d69c8cccc4c36633373338393a3a43463b3c5e68811a11ccda6c6069bb12981a52725ec6683990ec8e080400345529128c86835a50e6ea8c4509223061154f80769011e6db05106195f78114a74e4a873e98d9bfbb4d6ba5c80f64650fdd23cea4ed5ea372651a668d8712039e6ae14f5282291ea940333ca7d5c0e476f1fb1bdb0d31dc86591e45074e456a91677a998668bbbfa4aa600cedb5bf5be2f454110ed46d58814243b4e1d3db4f3469db95d4409869d2aaa59dc2abaf74e89c8dca83d527b2958967be73c840e51b224514e153bcfdb9a144214bbad725e0aa2dc37a22268250b22cda5f6d24c827a8f9d279259b232219a8e5f587adfd6a4e87d231019fdca9114c90fd52058ee1f50550d3f4ed4e3d87d28e8893da829990ffa2bb991cc2a47822097bd4e4ad6033a721ca7b74a66f5fb4a515d8521fac2639a67968054d4a9ca85e457962aa8eecd4316c9adc1d053c9f4e3c230efa0a6fa1bc58daaa517eeb02b75e842cda5a93a761f97aa602ae6b0d16e93590d450d869bfb4004ec746b502d552f2d3f0f043d1cc04da6e4a8aaa80886db1b6f20c730dd24377e5b0d3914ec523f9801321bb8141cd30e24bb318b28d99135a86017925d4a826039ee0e140fb0bbae0bc931ec40310d47b25bbddba5e123bb5cee9dee1155c32fcdab279901c0912c49d053b747a6629a925901b69a51f053c9104c43521cbf95696604e052b44341b5ec38920bcbafb392cd008aa858966a088eaad6bad33284212792df0e4735ed38f04b63e8ca30674fdc25a93bb5dca34f4606cda017aa2557aaba534770674969178e5b0d4b35eb120dbb7410b4fc44520c771ae68ca2626e01daa1614e534fe45230f4becc0292ebf248761c5a86651e41dd0513247bba2c554fe5c650fdb69787b04034f7a1610635876a321db97095da2d677d4c73b79c4d53c056d085e8a7869b2cbb91ebf41e572afe9a662add5c5e771b8949f3ca34a5602a1041516f8ed35987e4deea470462807060de9faa9269b7d1712c7397821daaa48a861ec76955cdbae4540c05dda87639d4a4d6a9fa6d52ad829d4014c9310d39ae444131d51eba0533813a8adc97bfcc795e48e6f2fb82fd41725c597ea046510e1453b03bb11288df1e7538aae298bf91fcf6ca3453284682f21349d20bc70e1443348fe1ca3483303fc04e245115e5ca328b25b73377dd2aa6d94706c98c96a3a873f7a9de0e3b3ed490d35de7895c198e9f9af7d81e28a26929e67497aaf8852bd34c0d617a683424d1d203cb510cd35414b911885a15d351e4d29d3faf143d15278292243b71a3a3985550832368050b011872eaa8ee5c6635e4d28e5ba552dee75285a1b751dea77f7878d2cd054303cb630c430ee54a72cca2f6c64f7378e8d4db2a9ac992e4c84ecde3ca34370682b4144b50e5526ee74fed3a75659a2917760758966348a2e31e3ff1134b6d479992695a8a63dee507d05144c99d3ff523bd51cc641da857762a48a66329a22a397e74749cd7699553bfacea1124bd39400f4d45f15353b5e4ba727772ec31443bb50b3dee4bc38d72ab54910bdd54884ae0e1b038b4ce5be534e7ed1415cb12f500da8d5db7cb14fc72f8a99c0887f7811a2db90f0c454e04d337c0eca5fb03751e4514dc29ba32cd1416cc8d8f044111fc4a552df51647340bd606a9352a8e6319929f0876a3b832cd540a63231dc1b223bd52835d078e5dd8626b905d97a2de16334a6e95443d35424d7e5df6763986991cc9343e0f15c3b0f44a910c49526734d2922bb9fd75e5d8a164a87a63b0333639969953b3163b7244d5d40cdd7ddde640f52b399dd53497e1a56257769c8a6611cd9c5792a14591e4ba34832a87865cc9a9d818dff7796309963bcde326b51663f452522d4130dca1ba3397869135d88129a7aadbe3c252d46088398b6197a2a958722557a61d185532d42aea8d99d469e7911be3001a96645635a7399203d5bdbfd021f86d704cc351ed3c311dc1605ea05caab5988ea9d7851cb8f306d20ee5403197e02eb5e89525c7bad061b93fb1fb4aefcbddfe5015c605098a2088aa59d5e557e62eaf4c73bf2f54b5eaae96696e01723b44d3512d514f8fa828a656980648142ccb4c7ae416cb12edd40ca45bab796f8d76a5ee464d6200ed465454bd74733a553557c28069a176fb53c1fc65aedca3a8ee2c462ff4ba3224c7f24bc11c7a2bd34ce9705a505c0a6c8bb5aa36db72bdaa016017d06929e6cefb48102c3f10052d80829c983d30f5b4dedd087a2bd34ca552fc6d7f50443cee7e7f58dcb592eed69069f2603360587c9bfc38b1d360e871aab8b7ce290a7645f96951ab29a8d52fcda8b8add05a4dbf0ceeee53530f25b5601518d530a35ce7a1e306cb700457a69952f1b0522f61b02a3a0e0dd1b0fbbe2e875e4ae69569bedcd73453a6c9e2ae95974b64f2b4300a80e588a2a5086e32e5c2911bada0b6a07e785a39cb9b592ba6d9eef7cdacea6254741c07e62f2ccbd4dbaab8d509a0de9776a8a8d150f5f61e5509a01feaa9e2a8963993e338aa1120bf91444b4f2d49317761ba21f095e0a8bf0ecda9463d90dc537879f4c651e5f498a2597f5b0a11cde5c8896198f397414e3f004c53ce233b500dbb8ed3e4e7004fd4dc0ec7efeb3aef53d306747becb6979279876458766814aa87ee942cb72653556f140a2efc54b11cd33224c92ce62742728be588eaf0cb5f1e45274255fdca2edc68a839b50b731339253f6f8363f985e547924c78fb2bc34ca29c2649315ca224734976ead87d192c4190019d178ededebbdc59cde8572a817e5cd995a55772dadb5a25175096ea58867a6f0f0441524ca24c495473bb43d591ec40245012f5c05d8aa0a76eb2f3c62340ed71e907ea4e0553345515e071a406454fedd0112449d40815dc1c2aa6e00ec5d213c9b088f44b37c9815a454734fc3411281aa69ca88adfdeba234b7008719719edd28e54b93477fa1302dc20b8f7f6c2b1e3c45c7a41a8fb23b98f1c39adc1124ccba0aa188ea2eec01055bf70044214b5f7852a0992e948923fa41e888ee987e651143327fa30a22099517093b9fc48efeb7ae0b4f634da897b4c3fb4cc5c02b83c72e1988ea32e3f71045395c678187349a63ae54872971d99b91d341776204a6e7267aecb21a703ba4b35cd689aa69be45094cc8153391d76e94ebb5245432f4ca51802c62e7b397f7a9729c8a921b84ae94c41f59c5a2f22ccb6582b8f697615170c8790e37628921e995570043b72659aa96e9a40d80de856c5aecb5c89769ee869bd32cd1769b7a69932cdd414540f8f699a66374d77bf2b0f8bd9106a4d921da8e68ed329a8a235809eea7d5a54396fcc6ab7c10384397fa8973f708f652a861f0d9b545175ec5450fcc630d4292f3c00c00c806a2f7bde47925d9772a1160b907a6906d3b2fc4830f444fdad4c93bf2a13300284e0a8456fef9d72a1063d74659a3cd80c9eaac18da6e3f8a9a0087ea30c1b0d4794ec36aaa25fde69b7324dd3ace283c59082797768b93559a2a85655321cd989602ed1ac414e1c552c692cc31144c570f4c24f04b586a11b49352dbd52cd1c987e2a6f552f945c5aa6a2288629e771a9565de0c2346fb00b472e55d18c0ec0db5f888a99133d115553710b80033559963a25c5910bc7dd421e5135e5c4105541b1fcf26b2cb9ed6950043f521d55120955c11205435145457573e2d147aaa23a7eeae7711efa85469dca7169f6ba14dde3dea076ed302dbbae1443141df3565f8ffcb616cb52dd592543ddbd31fd74b7c32c961f878aae1a82694e439144c76fa76376276e9daa29ba49f2035b6a97aa5ede64877629d9712e14f3a741758f3a1439b0dd59dc79875bcddda8825dca42bbf1db5d3a96bad4dc9859711cb55a72642e51bd7529864b3b9014cb2eedc22e4c459405aeeb542d7efad3a9da657205354776ea06c72f1539305c895d06d53173e9977623f915715d1e3f6e7b61aa869ed765d5533339a22a9a663d8e9cdeba24c3718b6249925c596a2ed4225966ae44f53886394547d10b4950454b314dc5af44d58c8aa89a51358f9a43f318a65ca9a6a2faa9a947e67324c59d725e98a6a8bad55135e66fd45f1ec772d41e07922b907a2c394f6f11d4e8eed430e1e6bafd89990cd5904347307924bf2f7b5fea959d9abb2f62198e28a8553115c59dcb5105757b65ee420fec34f9796a004a5254b7e7811c198ea897bd6cafe3c0720c43afebbc32ecc2a5ea97d58f54cb5454d34fe432661104393124434e7761ba65e7b2144772eb4f7f59244ac12d6aad8225f991e1570e95e4f8653197e5e642950bb584a1576e5093e9e63627a6307e6157a268d7ed516b5028f536c7a1a2eeca6ea7dc17c4716a497a5acd9f2786db03814094445355ecc4740c5351fcb2885af5ba30cc5c487a2aaa6219d15497fb0bb398aa1c3aa2906a75dc9c06f52e3db2e43c00841adda8c8ed100535d8a93f5dce68a9470e54c93145afa8dd88e6114cb3a837eae513c632ef5ce6bdbf114db76845ecc412453d322c37a98661958c96dfe7951f89961e2a7a1d1570a35d464794e44a5daa3e2529a6e947aa1cd965fde529e8a837886a508f1ce9a53d6a2a867aab63387a6929825274f77522f7899e97c35035a10b51af2b515254bf11143b6e659aed6655e9365299a669aa543d29944cb972aba8176e51cd5faaaa5cf5ae6cabf74441d532fc40af2c735a8edfc8e379680ed372935fa73f95cc29285ae454f1cb69f86d4e4d556e659a2ad34c79276a30f4bcb24c3b1145d3bd324d124a16e7aa2257a5ba21c30d6ead7a6249861c08967b659a2a70d41cb8c172ebb0db1a04396ff589e41876293aa65e8876245a862bd33ce26ed1167ee0377aa338e6b1fbc6cded9569ba6f0745dd6d954373996e8fdc65ba32bf101c49aee43a11d5259872dfca3455bacd2aae4d13c84b511255bf4e6b4fec546ed55d2d95cb559569a67a5047598b694ae9b84c7aa0aa4b9d77e8e50dae4cd3cdab54659a29d37c59aa696e1777c1af8b55020f144e771a55bb8ef3cabd433245ba4ae051b5ab69ba6f8b7be28deae87921f7e59c8e69eaad4cf3754dd334a36c642972e2dea8ea892289ee71c555e64edba0d68a699a666ff172075543cf2b43d51bc75205d96cb455a6d9ae226aa364b93b2d8e994b3bb02457a6e9eed649b9bd3425d3fc8deae87d61b932cdaef7eeaa771799664a8b69aa585cb7d95d659ede44d55dae4ac5810e93933702934e4542091e8ba7aaedaa549d1831f45ae9ee2309aad392974a35c208580411421001abaf0b844eb5572a251fa8c4d06be2819b5f264a36e880030e9a6cc041a58ba8641169d7991a640a19020292480000007311002038241a8b062432b9704ad6031480015cb264ae4e1b8ba47190839431c618430c010000428000c08ccd940101f1fbb2be0ff4f39af880d3921e80bd4efc45135fdf4fc4a586b8b7c4255071994d20d5049d5184f95f8d367f76bd4f1fb40b4aef96697cf556c8177c8a57a99e8117799258660be20e872aafd89028f26d24276581eeebd0937c9c7ed3e3deea716f7adc5b3dee4d8f736b8f8b1decb52d00c77895ba43bf0c31f0dd4afea459e7ebb1235019e49c84125cbfee2ba9988a3888c1aeda0503c94d67777f36cb03199a7e6a086dc5022d0ed06635d55ac0500f25d73380f26e1c8aa5922e6f7095b87db9a6076df87a0035f73dfef8463fbea160f5a1fba9c361050eb9cff178b67dfb44cb6e978fbd249844c2b57caef105a2aed71dd38277fd8cb5895f445879f61afea0c43b7b1340130ead9859dc97dae7e10ab58ad13a508481d2bf61eb15b29de10cc76ab90171f2a7a43ad0a35e37886cd371637a7ae72df54f34707796af1fa3085595b0eab3f9283d01b70a71b512688aab7420dc63ddb3cb81d1788b618aa2fe870b5f0c6019e2fe79a969b110153de0ce2832ff08ec4700784b661ae0bbd96eadc224d8348ad2925e5167f99cb649643633402886aab38ccb714e63890e3c5b429fb871f9f3b10eabf87a06ce159a7a2e8390930ce9ac15c4ecb00cb36f56fc326eb7995a117760753390cf328d3a1ed89041459c151e2b15d8d893241c3b62ff77f77fb1ffbbf77f582fdd8a0fbed614361052b2dfe64635dddce83b15bbbd9d0eaa5d917fc64b025da591407812e27baffc57da97caff5aaaa336d151684de0064aff0d41ff823b7a314bea70b12c19cd98fa9ea82f5a89eb63e2621f5598f59b5e5cfbb9fa737fb9aef83972427d808316570ee5a36bee32ade0332104e91e498fa45c5fde8aee2bb2581e908613b3e54a3c428be400f3b6b085eafd3a450df91b7986141e2d8b8956f56941cddbcba3d5cadcb2e21066fe59596f49e58ff9c3b3875ca863f2e3845a8d71ccd6857f1842dbc9e3f69acf3c7439c31519f674750225001bb6e92e94e85902b4b78f90c8130d15020b9b987b873ba69a44d1d7b5753d74e1ee0eaaabe473637c091a132624df8d00cc3ae87fa83b16057d1164d505d9f03ff5ba5f51f00eea3acc7d5758dd1226899923374a0497f730a976bcb95e0cde9be8c5d69fd0d0f1694883cc54ae486221884e5cd322c5a13aa72ed5fe7bd1415866ff8008e82e89fe8ad15f51f4578cfe8aa2bf62f45714fd199611fa3b467f44d09f39fa3382feced11f11f487393a43828ecfd17111744c8e8e3d82ced2d13111746c8e8e8fa06372747c041d97a3e322e8981c1d1b41c79ea33324d1f149051d171b41c725d1f53a6018c199cb0705cf3a9a3d6cd70b0add62996ee2124aa9b4a4464ceccb790dc9b02b1fc5da00755af2ab2b4c8b67bf80fd3a55d0c25a2eb39dad716823b864e3b38bc0b175c672a951732dca0e268cbca9a58e1659773488cc761a8dde03f673ee72c84729d07e344b07eb1b9e0c3ce0085b8c7bb5681714bbd220ca1fb3b334f06f5012962b31dcca60298d4bf65bd300d00e000d7210f4cf788d307c870142b84cba8be222fa7fb528d778e36a395678660599acf0c60a62ad71e8d5a25ce18d15c45a894333472699f3462662c571e8d8a28ce18d38c42af68f182413c327714863ec1fb121994c3e89431a63ff2313c9c4f0491cd218fb470c9289e19338a431f68f182413c327714863ec1fb121994c3e89411ab1712b73049ac927714863fc1fc496238667e29089d857c6863432b915834063f8240e698cfd8f4c24131b9f64228dd8382b33310eeeda34ae16aacc97db8bbd2ee1d7327833f64b6c0d80d2cf26d5646c18b57dd0278488d43bb3f083d427ce3b3ca439e047a20f28da6a4523750622db3d102be8923c0c45b7c58dd6754560c0d22c395c7efe68191d53b074ed1a6924da32b905ba62f63e746e39334683ede9f06b5255e0bd13bd33ddd9c488ec7ff3f5645b3c3af3e91fe23d44a7b44371ce660b6989b8e720488b3d788f3e6a9235db80610c1c5a8d60cd153a1483ed33a4a739fc00d141ab02477e01150ec49c3e66b5bf5515a60b98b8ceae49568a5e2c4c151cd03d7fcfea746c2b9dcf1f2e33693e5be5944e15909b83f36aaebd0415c53cf141f4b059dafcd4e69f9d01015a6f74a71d901b30174e43aa3196200b890fff8b7bc2a4017e320d37d9636729ff911f02d50844d70c8cad6471d0118d0f901c13fea9c5dee2ea90ee8088c4011453b5a4bb4b63ab08028d3d0485d023ab3b4cc25cf4811d84428ab380d4ea3783eaa312030e821efc1d1f8e44c477080e7c22196062006ce5a5cd8585091fd99185ae85e131bb3c205255a0e397f21a7e62dfd087b550b272c8d6321883b1f5af24c0cb7dd4faa0e239842131037ac29322caa146252d7897014e420f5c14ff20563771c3c48e3c3d298303110f39a402d7d063ecbcb95a3bf52e4ba9ff3440039071320b0fe13ac22ce26dfeafcb4fec536751578721ed6edca08a0d0ad05722c3a6e180f385cb754fb93802a42936da0ad95116b7bce53e0087ac586c713b0adc0b24fd61d927c8ad71f40c51db0837c0a6239cbdc5db74887e30e90c5e87017a83a84f6cfb05bd05c6332dc502e81dc67629a3f4b5fa5fdb0c187e3f5e1c91976ad2cf202dce0c0e3d0e44eed026fe011d3b76cbe7d702442de20f3ce953563ff5cab899d6793a7254a6eabf649507dbbb5761026f28c7c2ec9ce389c978e36c910ffb5d17d719e60783130f8b1ff6eeebfd75b62deedf4e3d6447e0510e5d1ce09e5df6cd3e8aec17992bdec0d66c1957205706dd676b2ff2b041dbd327b3cccd52ccd1fee417c1897ad06fa42668764dbea2d951e04ef5037887a09cbf8485a602353e7ffa9978926932e0c787b577b392a3e7c4d70f79dd996bfe10c06c5a46a23d7c93c977b6d9eee9d5dc1a8fdceb5b863555b3e91b1cf8685fc5654293e9f54de50b383a630976ff147c308e4af72cd49ad6c345a648b18517a46aabf223bcffd910a40d597b00f742e773cb20f8d95fd563ee042e03fe1aa7e84c687aef4188634a990ced3eca906a297673c4c30104d80b61f2cbd22e770ccf04c083f4c22051e3e6d16dafa90c0982a26c5b4a99b6d8fcf22961b553782524ff52c45e8504ac461bd5e9912213fa329407f9b3dcef88669491510975920c4fa564c8f544433e535f344580f0065d0455a74b293b947ebf98b047c827ae08884e23510109e10e76583d2e2357c81ab885ed80fb4f0cf1967b4c982b21c60158de20d949a4d295efb6b3557e70d33a18af8454d1bb64fdfc339971c7dcfc3f1f15dc95de3b665862deb964fab72f0e3a745fb5577fa2358db16c5af4712178a0702f662ead693a2f8ab0e695a41cff296549937ea9ebaf368fdc90605133ea3085c46b438323c1d87453e3d80ef36f5b1d6ef0c3870568ffb64b53f3c4faec4fd95e0ff3aecfeff3ebfd8664aea247d12e8edf3987a135a091f393db307bf195be3cdfb168df7888b1349a89c76a5e5533e85b3223b4024a7dce5d5226e6878d7b70bf087e7c8b6fbcabeaaef377c6a82fcb7c9f00952ee160ce840002cbe477c6da1a6a34b2cc8418246328d3f2dcca59d68e6ea7a3fc2c70d2408470273a24a673a0825524e5097226529d455a8ce49340309533c11c36db48bf7dd031d31ef106efb2288c6e4da138af510e83bb9ed5b34fc96bac26bf018c4ae803fa22ab7d936fb8cbcd1a47ca5895bd33cc5d6e3c875f46f336cfe581692eb3e8f4825339b543cb34eccb705e256f34f74ad631dc2cbab494d3adc493cdc91e33ea8723c00abf177c7b2ccd4c47b5848d512277369954a2d380549a558fd5006e542b74d6bdf8ff5b03501d32000c232ac66d6e3c47674a685f559f6d7703b7969ebcc5874a362b9927c5d99ef4717aeef3daa6f142a6188947341d85d80219c127335df197a21969a87b485dda6386add49afd70ef5764a29d26f047df27e117fcd825437f4aa1e545da747b1b2da787ef736860561152a7b755d0c6e317f333694817d654fbb0a2a04943732a5c05ac655ac1da0c74758b5c1f8bdf06b2f8e5cb708c56fe3cc4ae54147b747443d8296005c57abb6c96dfe2ccf85637b4b771883e865c71a342ae04fe72064f0482965b609f22ebea996c90a60b6fa5a7b07cf44a4ecc2aa0eb117c78315e5e6b76f539148ef1005457aa74c492ce9b1ed1fc27db8cf3b3a66d0196f9fe03ba67a84f96384700e608e6a5c6534697b96e4ff1551a702c8292027c7184058ced4b1230617c76fbeb27699cde8bf3a6b1a69638803de1ae4e6dfeca707c2995f1fe8166f788cc6e487e98bd470ebb0ae15a25f07e73e79075995cc27d48a66fd40f7da7abb77753eee129f66cb7bac7a97993daea56e779d3142e2378690ed3e1e10a372c6ec4af1bac9a1fff190dfa1f25477fbe56681231cedbdffca9805ef0ec13f98f6dcdcf550684732717ad6d186997d539e85fe837e9ea377f3dab025567a83fd27b2bbce2cb10fc242b61a95968de677e797601c53f9e9c3363eabeafbfc731f236b8085da13fa5cda87cf325473e666c2616245b3a3543409b8fcd679ae95d7925a3e1d56472bdc37f3d2a61a0dd5e2d4e3ea0373c863723e10e4d02609051e550a884e24c093137f45e512745306b048fcd69edb5f7ba5cab0fb95f5b91741af3628f28e51ff0f55eee4a6ab2f2fe593d9b7298d7e83edab24ccc0530c918ad26797c235fae57fad902fe616d017705ca02ad8f426fa170b71c09a88324e0183041f589e395388e17fc86bc4c6c4a78d2be33841ee42c92f72384d231e673a3b8e998acbd3a749cd8a623b20277049b5ed8c0060673e79abcf1e31fcff7c45099ba99c2adcba3c924f2b98a16ccd7e97ce96cc8b7a61d9477008a5ebbc23fc8c01bb7b2fa20417228a6104691cfed97ad247f2009eb3fe6339302ed7028c53b934ab5e964ddf8969dbf161d752d6dea4b0b32346bdf753adf4bd0ddd41ea24a155082d463e8fa313ee0fa3f1b37644f690ba959da04faae11289ebb7cf0b584fed51570e95b22bf0e2523e4229861808e752094d19dcc43be5237f3b2efc1bcbdf1fed9948341ff641ecfcf8c0b679ecaa38e36dd776af358f52b5f10e51007e71ac916df1fea3e804343b7b18f352b68b813c0c71b2cef3783dddf1431dacd0094e08b853ff191a2e6d6e9bc00497d3d6664c2d9e28b9b30b6c8da457d8e3861c67f0bff2d8be23f15f9aa4702dfb81ed8f0654782e0e527a6cc60f07f4512b4cbdcd86ed4e7cdf164c4faad8904fc78a3d173c70ae8c97c7883c2d57374051ece968fd98c8f10a5db5936edcaccd55dbf86e7a35cdae712db36794e02f2c317d107cd859ab7a8be5b1e097fd67a53e2412483ab340f1dcca13f36ea4d84ae593267f33062f41fbdb16d7180332a2b9a8f8271f4f7e0c7918480ee4757d3dd84141b476770e42484bc2fa5a33f6679a0e67f546f206bcc0d08b3e522bba16517cb9005a4fddf6030582d946f2d5733fb3e3bb65740d2983d10e4824f3e1171402705c86c244437421f9617597eeedd25fea50637bbebe1b2ef808222053ea5efe15978979fe7c2a9ce5e2eff4a1b7ddc3a9d9643ceaeee7b0e92e0aab9cf1e483c1fc7911b70ef8c27579da34eeb64b6e749a41ec5f539e49c12585c22bcb592f8d22445b0a578ed531a4c8c3f352d1536d7604c976dd506ca3829e8abaebd02335a8ce9b3ad62442947457dd5b72862469b31dd366a0c29e9aaa8bf1a1b8a71a07de76abbaea0bd2a31a0c4471d3bed0cabf8516553ab5bdd1dfab8e8e7a6b687125f3aedaa35aec445113ff5ac1598d16450af5df506cab828e6a7b64511531a8deab5af62441937c5bcd5d8286452ab51fd366a8c28e7a6b0471d2b05cd6a35ae63478d31e59c15f8a8e5ea1c7189a525c4b95d6d735fdb0fd91e61fbefda6f6befaabd40ed5827687502abab00db41de00589dc16e0a405720f6856d8778bdc7d124687d63ea004e0701f516613fecfb00a935dc3d216807c186b0ed10aff7389a04ad6f4c1dc0e920a0de22ec877d1f20b586bb2704ed20d810b61de2f51e4793a0f58da90374260c4a0d8a740b9df0d9e7e0be6907a3a4e5b8617b5ba4dd089a206b89614af91a17fa44e38aaef7837181787fcb369d00f51a184436046c405600219014441e3196f9c66fa919eaf5268c01a9a157fc1aa233ab697dc6514573854bce5e82fc462d90d10192887a73bcbc0fd492b0df72259f7042ca53fe5a6faaae5bbfe0bea6834f8a2a8fd1c2a2e9ec5f929c7e09c65932ecfd368a63dc78cee21ce5e181c9cf1da7c2f7a1bed35d86e231dc9b5a63b71a2c045fd0978464e6455ecdc084b3d13077e186fa2da86aeb1dce5834dc3e77bbc34ab73b012919013aabfb65086cda038312ea925b679923cc73d783a503ff7129850070c05650389a6c4367665cc2d5d8fb7799fdc68f9f315e5428c2d235f3cf2e2705071795c5aa71b964e9f3bbf2729d5d2a0a6539ad1068624299c7b24b4b1700df7cb1fdd35d06d6c78c858df3cc5b3fa6077146a0868b4bcc944c24c0c1fe66d81a948658e15b683a5775fb21219931d1096fcdd79b032e4350f40ad114d1924129b5ffd86ab2bb31653227f1ec3f7a1a4461f5301ae44d3956e9842c7cd108cd74cd3a4dd40c16a5d6aead32789f0a385f874544caeae01c2051c720be10b69118e046f29d1aa9e70f5fb8ce3f35037e68e7f2ac99d5f9c64949bd467846130044693b449a0a840e7873c801eb912a63a5e750a2a3f0a40b1f6f607913c1a2bea190a326333daa5acfa5f603f66031a2569bfd8336df4a918119226789eb6017d4892d225071d963ea7a10668584530a63aba3e38a9e0d2c2094db7c3d69fb39c66039ed43a232a3c9e29aa1fc1ccae2f8329665d40d07cd01ab4646f2048079de56ba0bb813bace24d759ae64b506653fff441eb3434c8698acad192ff6fb70fe5c32886fd8a1aa478641ab99721edfa6fe88839113f3b2e0c66180489991ec9efd66baa68ddb1645d6108cd806001192a7169e05656d3a13e0a5387004b1a806bcd7098b73326c90b6c863dcd710897b54dc97bb4eb040330c611a9dd3540746d6d879c542c49c030ae518013320227cac473c177f7481ea1ddcbf482792efc843ff0c2705e24b22a6cfe4dad745c8e1eeaca6251dcac0049ca0c95428a6a7f58280e89bd6e08a6267f27084a7b3b0c5ff3ec36c5ebea1d08b5c397f23cc213fe155a469f2a032fe250f400c8d83d06c08337fc5be6440c50e876d530ed89dbf33b1d3542ca85bb8a04038c4dd7f94d9764305109d64ec7f6231e43d5838bec1864f46cee96a5b32f623ec656c8c920068287133e07b3da610342a7b94786d320ad7536962af496eefdbbfbd826d0b788a3d4eaee1bc3cb052689e8affba3dcb01da1ee0e6446ccbf644fff5ae99efd19161b9143d115e4efd704b52cd26206f69c659e03277f548bf21fb12c4c9287432b7295b0a79d8d3d50aa1fa9f748b97ea3bebd10c4ebff30872144c66ae9d54fcf2347b64a2fe8a7a1afbb65b80e8fb3c92fc6d15848bdc61dfc507b1a8be412fe7c19adf1ecceb4ac637207d6fd8743b188d17f03a6d1d79c65f6160759707fd8eb6189781e0c4a974cf08048f15d0f4233343ec8b6f1bff8a68eb8b0b5c6c1023e9103cdf08abbe7bb01da4d2cd6dc28d5a6dcd141df37a2d104c1d735a2a6deae2911c9c1ead6acbef99aed5c2b493efd616198b16487c5f8bf56ef8eb1bbdea90ba48812ad858c1e38733dbe7e46d2f07b239d279424f661146fef0841a5bd36e3096b6d2c091a0f68373104731df673a0787b059bafdcef8d6c17d83244cfcd77aefe8e60e3591d1bd4a4234300a535ce7bbd9dbd7baaa8d8177efb5a39144bde256d05f8c7ea013bea7031156e5acd453f854dc3019809023716bd547b6f84e73a33dc19ce2fb7c110662d2b0d2f66850177087cccfae8fef408247b21383d93a4da660b22b142d006b0191ca7ff640d34963efb10249cf19506dd4943253fa1cc72512079ad985d0e4fb15897f66be776547c2f98346f86d1dda94fb8c8920b9aed3a2d67ba35742a1b3961eda1b7df2c3a75c17742675d8bf31fa3817d05be943873a0a539d3f2c1dc29c85d16f3e4132c53b8d66ffecfc77e12d34d584715c6560bbc7273dffa5e3eeb8eceadb9977dee46d09d308d8ecbb80437ca17eab10651d47d0313da2e230b4c3de5e48a438db474807f2fb84722cf2210e8713ebf80af35af7c4c8c4ccae2d7386630c78607164e029892aa65b8edcb20792c855f84a050160d3936db5325c1782511763d73fc9d8e75f2f0892a74dea7f63a0e1398df1ead9869bddfbb92ff3793b75ec035033bd312879602acad6ffa15ee9db4d94b998f859376a5c17c744f0ed35236b482eff8a5f7706d2b0c756c17b933a62dd1c6aa8282d57b8e0ccbbf69cdc39965c17f528fce3ca34e25117301614bfefd383e7aa58106488f9e1672cf7254dc2fb11e1c95eb6b1d512b8e2840680de8f167762997a80f3f199e9d086fbbfc9bd373d9df0881a4882146cdd9c7caac7a47458275a06a0bc063903663e02fc6e980a45f274f65f168dadf5e652ed21cb1a06646ec51db5216b8676ab9cc1c48259ce1844b78148ee8a306506403d341c2ee5f3099524195ab59ba37c909fd0e1f084ada0f32dfecc40f42dd7d754f1782d23ee689ead902c998292f298e82ccbd1ed54ed1f4f5bd969f6487fc602759ec5e63edc5a5faf330a67898b5af68f0bc830684c2d5a4f47e8759c8b2f8b99f0003f8ec477d904a857517f4b313a0d990a3b84f24a6de8702be02837e31667c2493123070593e00453ef38bb9505a9f446fb5783df792c51927e5df62697fb68cb9560829d944c346ad29dfc1556862c3ff470df53b0495162d0b8ea3f332fb3017902006c760b8d28a9ae079d8c24552ea9f6245242981cca298f8e895934fd2789191de49193faa428927a892b650b4a11fff8aeb31fdcfaeae0aef91e7c96f7e0f1ada5a8523c45645f5a41cd0a1f431fdc91d4b401d0dc19b3d8ec9cb2491c7d151bc23337f2fa61fed167e2294297658f6e0815713dc6ae579b2e8cafdd9e8c16e14a877da55f658c6ca62f13f18f6679098c4074d6e7592febb67f00bac864507678159c408e8c2fad2c5612b5b72f37612dc6602c51ca8d02ac0d3839c5b44b156f4499fec0213a2110b59d30f1f881c6b00aba3b5f0dbf017103b0a0d583d194ecc86832a3baa24fdf442030c1a4f6f230552d157719d8bf47d81ea595b289a0b411dc953fada047bb3a47e45a5cc8560d28f00cc871427c4d80edb5446acc3ad382209c7403ecba33a9a8fb8a986943dba62a81f26dd8964785928b8e1dea79dcfabd168bc54b9e7a8dc435cfa3a7a1aa000f057500e814df11233fe33e4b08d9b2b89ac35e5473714f7e5bdc507aec22618226a45e1943283b32e53e0474cceb6d1ed33638f0fdc1d094d557ec459db2e22423ea073b32f1341cf0e053ebee0ffdce5732d215fffba1429a49ce93b6f8df4412d5523a7ba57497fcf7cb1d1d2279d9345aabb080953f00fe86701c4df2f5d2864ebccb7023f80bb338d0b95b750102980d68447cc10d535c092910f8692b6a55e558b1b61b77caffafc0e7705c8f199949701584518d17b736c118520253e693c15d305b171d845a7fa84d2312d626b7360d6df949ab4946cea0023eb4fe5f2e4cf621774fa7be33c9778bf349bf2f6226b9a0b308bff4070b8f877532eb2ae21d661b4afda5a7b38b69d98d71c663a6fc27a75044cf969383c5a9d844e3bcd8a685c66dc2150dffaccb845e769a77f84da2799f0def175cfdab14a3defe26ceab9f1692e21926ebd4422ae9a612895f68c950cc4b3b009c7b56862ed7114ea99dec8dffec0e8eeec0fb12dee3fdf6311adea2fd4e3d285bacbf852fef434e5057cbc38af68b5558e154f7b6ae172b0df4aae4e87ea9ed3e007be305aebf2debd5be8391604b9bd15b64aa3ed7531987a0579a8ad7951e99c55366d907b79dd3c8904d93ac196b7d3d482ba62fa8d1863e27c0361ea05c38cdb549728c84ada63f9e8bff6f9d57f478b3fc266a88861f6cb7aed45c60af09cde82a8940b2c00c5106e8a3de3f94f338be1b7361f6faf3da69deaab607c9c8fe1a60bbf475547521917dca555ed0f91ad4056327cdce2397ba032f18514e8946d2adca54ec3b4b1e143daa741141d20fff4d47d8190db8b2eef1e3722f88681dacf1f5b95c5611c6b9b5e3d8f90840fc5bfb05bcc2dad66aac4b5df39e09d3ebd6d36d59d1d4bdfecfa59e77d6abf0ac542dcee98d22841d273d288f5595a755d72f8bbbcc5beccf21869e1ef2ac745f970acac02e9c99da7a622a54fc3c764ade08869cff8b1ef69ec8264f475e2867fa9c68a802e69a7f6e456dab96eac29201c4a82e11e8b3c58e8b5bbfa615cf315688f0730fd9ee82204eca09fdd7ccf7a8442f5eefe58dcb57d384cd4d31c053288f82c3a22c19258853f46ce6105d44eba28527d3ad43ed5ac2af567f375d43c3361f84f4abaca7f9e4e67d76174d9e4686246f124da1d63099cc71fa034f7a80c0e500d8f5f382426f7b7396eface4f5a22bbcff18beb9661bc8d324b4706c2e4311c3d87f50757f697d75411ef294095a0e4544dc7d542937442d9ee5aeaed07285a20ea9d91968edda4c6cd6e5ad394b5bbeef62c44bf6b0c99ca0ace5175bfa076a3c1e1461741c928e472a9f9f479b39dd009ee438deeffe7cf2863a4dad3d2e42c0551283b5fa32db69867151b75eaa1890d34893aac2df3cf241e0d16692a8c4372f0db11885d15e1a1a8742f3841396887704ea0fb2669cc3d761893fe596f1d3dd222784894849e6a56e803e9705cf750902a78830721d53fc996d686444d0286abe42f876d626cae9dfbb9c566ea6cd0fdd74752653787d64d9bc763bc0b3ccc74660917e0706f169fa3ac727e308b2cd06802b12607bf3c9072d0acb80248b4022c48081631f5294891d2c542da4f23212be3d41312b969269c15c6d871aebdff2b43470653273ccd190796c6a348df8e18f3f4de1f87071a190d2a1df62d157829f5e4886981b23fa750f05f8732e22ce2c0f995309089d2caab0ee8a08320f5fa27b2e3530555df82376b24020a392b48f6dc0f3eaa6661aa91ee6fdf9ad581db7135e89f3cb5b504166706fa8619bc7d5d27960d932a0c96da216a93d6a8c0f70d4ec97e8e09009e8b6609d7aa6c2192079a42db37ee20f47d8febd835b7468088d0fb06075ccf187aa4a9ef8e3fab525d828ab5f869945381038f5f32f0e35a272c17b6e0839e9de072b6d6426b4a2bec2a3fddce8cf05522048c19d5586531afdc05a7c2724a03da129237a355d76c55a9ba9f1f21a695b32150a8a82302e28c3a8bdc3ef470c31455a435682c4b3a0e90b8c50ed70ed883024cc3bc4dacf4ca98a901140198bcd8d38979cadecc9d8a4a561e5e9532beb848ca1a5f2c254081053596acdeded9c68b789a62f7ce2796f639edb3f8c850065f0b1e512e14a86f3706daaab97d5af53791916c74a612715bbdb4e4df1e0f62e117f521b33d1fea94a5b65fccbe084fc848f6a07f9f8443362e552bf1a520d879b2323682b3e041b57dcccfbb90a85030fb4f0c62ffe53b041adf9cabf61b1b6040bdac5a6e68ff21377be16f23bf6c5308cdb308dcb13a6b11da686d5d72b8ae2db3dcc85161843621b25e16e22ca2d2cb74999a52135029f28efb7e9f34913fb894c9cfa9d3e32a75af66ebc28615bf88cb58e317e97bebff6d3bd490ef867ba7003a4261b3d79b27f46e893f1b1fdb18f2d55975a0f37055e95a3172e8c8f4512962b39f159152d771c76be9887cdb944b7ef7d619c3752cada637a53a9740c704a3af62fcc029ad60489192895dfbe21ed7b6a1763519a8fe33c5c9a2a46daadf6001389b4024f5911dcde7cbb2d6f13784aacee50107bec3e7f81c59f65f7cba2d8d691442c8185a2f5bbfe134ddd4d93ddc7d6cbdd1d3614cd499fcc29c35d5832528e981089da1a363e79f5f52001ea0374127810168c2e2d66d3e636a11d637f8613b99f76355a2b527f3ada9d2eaadd676cb9de001c26e9711f7795163d8c4b6951ec7f00f7e4c36aa71315568806d2958da3e9597e95fb4842e1c757d98ac8160ad5983695aee346abcb94e36d25323aa93d5e902d2544979d8911411d5c786cee87dbd67b5591ae702d4fa7252f6466e5156d551d93e5655c6d290e0602abeeaf2ddab6e39fd721c7288eecc02a40adf9b8591534f35925c4f06fd31796ae4ab757bbde5a356de506194b785096e6432eabb4976aa61602c796612e594d27da4c1d764eb1e935f427d3e487eff27717e949393cfc0b8cd737dcf739a15b071b0fc27c9274ce2f93ac7bf0ed0600fb38606edc94c6dc2afe2c5c9a382b89c86cfb3e85dd0ea990dc3a269a74875509d02058f1c5ca224dd4223f80e03d2b7ea58230d553b6931300b249fac603ba9f6a6250cefa4facd6957fa1d3e4716e6abc9fe73df1b843d3b0f4732857db24c78bb9bd46cb75851ee5f179fbb010fc8ac7f7eb507d6e567caaf55384046722a49332274df870d54a30e506f3615232803f914df8201457bed017c9588e29d8408b422b934ce774edfc67eef99b3ba845bd62c3ce774488d646bc9bf113de262601920e9ef95b2a69ab896e0f2a85d4360cb1f6f0f89f4f54529ba7baffa8ea605eeaf3fbe1baa1c4aed2b63377a4668118583b3d50c49f1e8b2a98a50cd791f3e7615bcf1ab3cc4e125c757c85b411b5ff5e8cf04703dfd15a982d3c9be3b6ee282c01c903cd50e05f3ea44106c426e24a47705662e4c6882613f915ac7de490a8b428332e9ebd02ea3be771f0ed687e2898bce69b0837fcefaeb2c194b7e7bfae7e0fe516048fcb4131bd349633ff2e185c75a2c95efb5a29568fd6fcad9a9d32810a95067eabc2ae5570a673567c11d77c1db4c3bd8e483f3d173d6f098b307e8867766e600449787285ea7fd8f624eed930d631f384d687edd00eca4df980f71d0e3d898a46cddc3bab86cfe4d855172e82789250f7f6a37f552dcadb1beb1291f6de8acd8ffc85e5f1dd8258364c7770a8c857010dde78076d2474c5a09fb3ff2e543dc81d41da8b413fb53902ed8d16b4dbcd72209689c245d84003651d6a2ffe47bd940453c9cf3615301a10200c78e495340fa9204e471dea86cd05927c5c4373440080877bd82cc2b5ce86662a804152ead50649ae8ea9ba909c6a1f3f47a906028ced26dbb2bb8a20820ec11084a1931b2eb3e4fa8ed672e56f5f9fb77868e18c7ede42e25a242a3a000111a2bbbc843888810395f6a80c4497e0a1d932269bee166da9f5c5a77400705b339cf9c023d45665159969ae7227e1905b6e41044400346f48e491e3dde2f08505d18dd9a932230092156b7200a14845f5ea4e4768550ff2a804835437cfc59ed79bf189924b4390697c96222668e2696440b4fbbc8e2ea9cffdf097f5c73b394227b1b9f453ef48b68abe99bc6497fe7f7a07691b64f0fb6eef2da0fa48d21aacf1ff4bdbc893ad95b35950de5ab36d97a98ec9eb6c4ef3686d363ccca80966fea136497b7a71e542bbfdfa23401d5c37d5bb58fca23920b9ea498a0fe4cda31e3af03df2ffb5e7eeceb04388d0564b94eeb64c0ee6aa20664244de5441fdc841aec94fc2b6ae2b62b32732f436313f878696ec0f724d363958c9578633b779abc76df808cb65ea931bc6ca4ffc86b121de90a2afde1a9b8a643208945ffd1da171697a2b9ce505cf1d3980901de8ed420efd95b2be70a2f50e7952cc702214a5c35c9c4431e80e913865868c5b38873a3eabb193c0583685699a5775133b7de342254a030a66c0c90afe1f05a295216ea294226132b0abd8917acb83789474a0060bb4c5de98d58b19a08ba9c3bcfbb4b0570db562b506e177fe2e82982ec5ff2b4c8d319075b8c8be2cfcd32fe89bd18975734363ff467d15782d4a6f62e70a661a34b768e5f19f13e6e08d87df7dd73ff8fdce9caa10b51f30e61812fe677649332958741c2dea860e03acaf621246c2be52f3922d28ec924b45a2bf64e52e968ab0473754d55fdb2856f3619df445a7141525f40a304846451c93c2062a2bb3c586dc4c70466d9911b468c9618bec9bea3341bb0dda5560c70c2ea5d1b4522aabd61a861218d67e875682d86904a7c1c3e7dfd023b4dc7bf99da2d460d8872779c5611f058f89cb225e0600c2617fe42e185603ac55363d199b2e618d9eaa6b9ee4ab1dfded8e0b70181936a1d9fdf8663627ed57032b125a0e90085c3b688736247fddf057ed099691d303b151f1f555c50059ed61010bf78dec48b6d27027a14808a830f60fdef417f94f8e9bf00541cf2eb447046bf640b5b925c8c685f5faa34d532a1eee7048e352fd42c6de5118554b24a79b8363ee44a8790c543ceb21cd302edf0a75361d324cf3d874c5e032722b1306df1c59896b9ea649b17b60d17ac5a522275533bfdd4dc79182afb6dfced26be0e41b2f6ca7fe0fa12ec608e7bbb0e948a1d5bbbd0b7c300deac5d93c364b11aeca00cc900d5a96355284e8cf87b629cc1cc9668970a88a7b3454b97c9ea0417c4df39fe00b5ae300016600a6c9c54999e7ba026c160c42a210e2ee00244c8bfea2f1ce6986e496f5842a1657ab7b530e7a625a9c8af827fef9b949c7940eb90c6e13f55bd90044329460e00e37c12fcb6a7b942ea841709eb6c9a5f46d8c6840fd30067e9da0e8845916746a5a6a30a78e82e0631ecef662affcc7cf656a5a1efeca3166d26436934a94a8d312bc24f54acf5723fd4ce1f5a4d8f4f915567dea370957648099fd321e1d3adafb8299a386c3eacefd2de267752f46f5ddd8a75c14befa10ac5a3ebc1922887d7ec1aafcad1e2be1ca4bc50b84ad876326c6541980a23d3d7c3df893e289a152e8e1eb2c47c70d492b3dbf49553dea317c4e81fbbe99840f24ab19d04ed1b1b6cecd6adfa3b18aadf76011f6405bfe9c68ca1056d71f03e1c059ec83c85364ef778d38beec5447518514de44ac2a6312cb17cbc81e16f04b0d27f8ba1bd8cc87a6e8711fb0ed8e8403b0a1f3db66a3bcf25e740870c03c6381e143b27090f28439634fdbc77c3dab58b5a36ad1c5ebdd01df768a41e9b612ee848dd2cdc415265af1636c83dd5c1ba47db759fdfde1e63f9e13557ededf3ab591c377f23e8c2abab417d1fa9b945166e9960def2d7004de75d07875a101b42083c3004abcd7c0eb5551635843dacdbbdde5e5bed0183847ff08d1e4f248bc16814403a1c9d3ecb2941b26cb56baa6ab612a22d367294cad592fa3f8c9254b44c7e1ce6965f8be2ef853383e8a713fa92151be25f77c2a65c51325f7c87f76389568ca59e6dd1ea44a277f04a06d693e6c2c8f1dd11962c39c75158879b9c3b849c5cf21f08cad766b2632e1396dc0190956d9460597760509f6a7137b6940cf9b967a03b1eed9bfc6e3266bb343c7e3bc6d5c30e30dfda3022d92474a29d40ee48b396961e0dc47c4a0105b36ff227f2f007e371352245799126bfd3da9e0c3400ab2222b07cbfcdde1c13edf07069acda49c13abfc3b56704d1f1fe3bd4e3bf43520fd6b388cc69c8e9ff5d81b399062fd8e56880a01dd46e3de183914201f1453a899ee17cc5477fd7683fc6fcd5bbbf847f1c017344135183276db4baad684c11dcdd3c853e9920f9bc5c3c7ec75c849302d838c96d8ed77fb14f5df4636ffa294cf5c14b50a7d1d820a122dc12e5cb311b74a67271eb371b3f541a4f8acf0235b5d74bf22a4b3f7d5f7dbd55e2c8b19e8cf45c8afd79791f8d18d809cef3bdd519745d364a0736c8cef3a8e64c42246a9b8d0639ced2c3dc9aeaf99b39414e986564cf5fe2e8993a9813ce3c09ff22248f06ab06fa4248ee4e94454a8b2476427aab1013e74bf1a09021fdb7b94e2e7c992900e8dce5eb0d8d9c88e7ea997fbffcee9e32775a14a19adf75918283bd5219b446f3c923f9133d810aa471ffcd42d7dbb0f78bcbe54b65897dc70997e586f85e4cbec534d8708b42cba15170c9020780cb9c00e0319af314f6b63190c4bee76883202087937bc7d784d2fbe9abc1b5e09210e9d874e8c4478bdd5636eb4fa07810bd9ac27b378095b5317e1158adaa61a9da077f406bb54dbbd0a442f853efcc16dd5667b370f3e25713e67e2a05379ef2a1d864be74dfb6f40fffbdf1cab024f8961d7f860ad2139a7feff5cbbae337ed0236397310be7c54ec221d07b8edc195000e62db917c63cf1692d51cdc4c726e9f4e5070f12a92a2fad422a8b2d1e4804269475558f37492fb42b5f97f50eadefec993c90bc714a258893e4286631b421cfea4ca773cebb7b6689db362ade3aa81d636537242cc5f5736344857e75d74e46a7ae7b77cef885ac78bdd73f7a8362931f2a5d12fad707ec5fe0700472620500f22b66c9e427258e5d1c7cddb074027dc70ece17f908ab67b064c619dba8f87bd3e3a42cc87ac4fe068e67a16f98cf3d47dab9da0135a9a3b655ac34b087751c1c372af1621f5642e9153365ceb0de82d880c0566fcb6d396b88f225b85c4dcf842fbcbf21774e47469da8190d234586c1d730f9e96871d5c9c671d42262f6bb161fae7d09e0a7e4873a0b701f88dbdf3c5c676ca899ede8f540b7b589fda79b23b7876c7bd7167aee9e8059e02e6626d24ae3dfa71d30f95a1c0161df07358b518a6f37cf2de2ce25c3885cdda7e2630d12cc266874d6a1f11db87cca50b12a4aecee991e3156b6902bc9aabfa5a5d281ce5f6eafc9cb1168f4de78bb25a5c3f708e6cad08f4fb9288dfb4d36d8b8041c792e94e30350e44874bfc71181e3f4e78b277260ef46bffaff5216c78a2c90a9e51229f024535ccdb284c8304191d75f7597156fd01dbc18eebce35080255de931a68d9d08df5b4fa7735677c07838bca7790bf2b23f57f567b73410264ccfe539f44271f9a1e662227be357d48820ac840c005fbf96f7c690e781aa7d8c8ce6641a6e88cbe86a00a05cb5d0e0ef80615542a00373cc697f9b04017d50a343a97dee859142f875a1207cd28659bf5470a11b46f472a12e2e053c081b2781d386cdb1118917ee18caa830d2a5c08c94626063a0eeb53f43f8f178e013f567d0e8dc454de5054f29faadd0480fc65e0140e73c7cd0514d1916c1bd30788e145e99aa1cc7a1491789527fe7c8a5a31f708632567710d3e881372be0c2fffd95e10f7d8cafb7d68a8eee58b5d6920416f28eb584db6759bff553f0cf867550b4e2dd855208d8b33576907849167d92163024968f24216656c736a388f5f8fdc882f764d91f9214797b64f6dd5ec8d29bf59a2160afa76fc1a22c22efa13dba77f699b2e82ae45f51fca4bce21602d6f64d6841e2e6ed4178cd2e88f430e279347597ef5c56b136600c3f82835232ed1aa818bb6b8c8ece110857171b08ac62f26b9778984b4b48a4e70cbae2800bdbd8cf4dd95d41f6b7d3b280134976c448f579f82f86cfd8fff66f4a7f4bc0fb4e033b732201d69c1e6fac2e70f6fe840a8c5651ebdfce89f4427190fbf6a9e445dd61dfa295a88db72c5d5b19a5e2e117ccc0366a6d0e0043f71e38465fdee28f56a08ca1863a811021f8c430ec5ded7d96f4e162ed110c31d90a47a4fb658cb6da2d97167b3a6258e1facc2b1704d94111a1a761e1f2d73cc1ff3d22ca330fc5a295e5c37b24a199472b77c6d315fc40f85eebf5fb2a18c515d5c58884bcc896edf808a02c4bbcb09ece3ee9626b1e25312eab811e590d77d4635bb4d8ce88d8d936fac978dfd71d234a6b4335a14315f9a8ca92f23eb9cd151b63b77885dda128eaaaf16c5dada7b329310bc9de31e635920d4b1203646112eb0d7df8fc1df6a8acb114cf8d3693cb927269d90c1566ebd4c0afadfd7e0da35b858ddcb1e3139ca9c1f71295f47182bc26a2188bf1338d152b07f19661ec00e96690a3351ffdd5b28548d7a68ef3cf76a24ee0f025d48d14cf773b038684e5887b3b360483b0e8b7c148c936b691d65f7c2269c1d6cb861264744add88f70bfb6b97afa32476e886baf9fe99fa9af914b6c52d654e4cc00ddc948a588e9e031d1b17f08a79a82a5730bd1b3c482cb90e8820b79473cda1db65d61657033d4cc29ceea46ceac2f6931afd0425d295c854b87f2c9607e77665fb0f6decef85c71779d8cf46e557adfcb96172d8e189c6097989a910b8238857f002c8177b91ff44796c038b361a41f14f298dc65dc174a58aaa5ab7378a62a2a4afb78b3e8d3606223878c745c1fe6773900739c450afc80e698147b5074a162133e666a5413060f772f6de9e82db472c4f80e0f22b12dd8e61d456141604d37c73d288d3871b6e1fe168bf6dd1d8e3a9c8947a6b0b23c3c7a40cae474bdae5dec51e4517646a00517a004f0075ae3229ba821adf6689a9dde71962464d17398dd9387f5f732b61f12565321a271cd5bef85b2fe2dc7553a89d4861ab60e7e0d276ae05097300088a61601a301a26b49e22c62b726f96ff2a4178c13285b2f6c5248992cadecd6fefc5b8fe33a5c8edcb84413dae26ae85a563be87bf3ef9749f84bbaae4de9c9224285e007ab1f2cc47681abd720c45810f2bfc7167bdbaa3844bd1e99bae53b6739fd5f49cebf1a0d168a7f9ba66a323af77a2f63690c33e4aea42363b3736f576ccc811651768a1fdf9f1e5496b8adfc6dbebf8b4302f5fd27cc3fcf9aced8c08892703da26536f393f8394d6b02b29438571e91a2a8052f68ebe21bd2d82cd8d7c4952ccf31da18380843006e39f982eb080d218a88ed04b5743238ba4a791068fed97628bee4eab4c959c7598f16479037e52dfb73be3b3ee39b16efc26242f0e491d21747d46035fe49c9279b4d5b852fb4e9fa2ae55877bd448fc998f89edc9ca13bdc6152c3ba29371c9ed4b7622cd9834f6178bbf2106aabc14666aee924a96972108cceb444516faa94bad99e6a7549000e1e77c0d65b12184ac648f4ecdc60aa7dbba76786844c71837aeae93a9d2ab1d5e9bd11432ac4283c522ea1239b74be6acfc17777402b5a2bf89659319fdeba4a4793268e6a661b5c82b893d98e698f679809d6477c25dba1716dbe7337a58ce9bbe8fbfde1330db28f8a6ea696949f808a0a0f2875d1f81a6bb030d439bef4a85aae93667d295e7db111467dc3d91e9239093797c790b5cb6d563332ab5e548c01c6046158a14a8ce4307bb20b1a8a8457e9a097de7e522de9d233eeea7490458266182a879206f6d5068b3e4af474765283662ef986dd0984bc198cee153c0c53d0e9bd68c24aca9802f7f20a3db2a1f8a4200374c410ebe407e8b33d679768db1d4c933ff33c0de71ec05d5b321975cf2a787522c61b1c4ba5859ab8da95e100a4240accf51bbddaecf03ba7a6a5866439c83911057ef41d013895d7922a3207c2640628fb2fc915838bb711b81c4d662d5f0999e43c553e7929020feb792bc0397edb789cb3e02882e2dd08793d060483ee514a2ff4fed0470c2c60c3fd55e169542601522109fc400d7b20a2fcba96f1681e207c32aaeeb15745d1988abe31f13d42967cce5c6cf994a4c9f0b16f45253bc28e034ec229b31bcdb237f3ecb1aef3954fea3327698508c6970cdb87a68ec46e979eb14130d80210c64de8262328f96c9b43b77768ed8ed9f6768b916fb51326b097d08fe7ecc1a565090a4c4b71339034ee2a1d274aedbcda283d3cc628be2af90903b11365d52e9675739510063d77f4da73c5b2e6cdbd171b4c2d2e6885d1d7bf11807e19f72c12e58fbcbe423de5e58f1ab88289d5b13ae820c8292660e3005441bd3a8e17624020dcb0024d633065e29898bf98a850fda057f63da73ec3eb8d455ac249ff339507d692a14ab577b2561ab72efed5aef272353dee77f0777888c9b19f03f0f20d9cdfc90842411bf1dc3abc5cdcedbb659793f10f894cb1c587bfaef3cf35a5e0c3893777b4cd2d6233fcb4142a2a01b45fc2e667da86bc3baab356334b1eb7bf93750bbaae0c49743fd2e217afc01cf6eda3153738ed9737d01628a3509b6b569dfef4fa250b57c40180be1d526df09e6d013031ee022b18027084f502be8fd22fdf989f434f0eae2272a31cbbc43269120c850c99863a2fb42d75548db452bbe34e4cabc351e9d3628beb481a5408953a0333d9dd122cc7c9045f86e4a848045046e013070ff1776d4e6f9ea25b0436c4e1b9411430ec64f00ad1aa42863e53b6026199750d3b62aefd4cd6710d23652d715365f8bf5614c9d296bfb06570fb1bed72baea297cec04bfa1e11d99273b11dc047aed74b78cf80be6f86826b214b820b3979743976a371d6e9d22f511f447c4881d40ddc2639f2f239fc341e46626c54d01b7db72e79f6f67908cfdfffd6066ab296971205e427455a60aa4fef24bc5db88b763b8a65c3eed3399f73597d4900efb36a84d861a45cd3d3095bf15710e939ccbacc8ed83496ac7793d2bd0d3c6343434b5b64d276c176dffefaf02463236c2163703c0b966dfde39b4300c525318cd9664c35b2db476a8c6498e5811cfe0cee665adb2b7d1b51bb69cc083ad766aef006ba9785cbdbaf98588944f0039d3982dbbb07d7a9be4bfade06e33890adb353760237d6b3eae0fd22702b12a35c293df2ce531e262411f389c7a472c47f5663485dab9c66cd87b7cef5873d94e1fa6d69eb0d814b8c47883d6a6cbb46f18babc99232c4748bb82b01bb06446d086ceead461d435892069aed41fbcb09626917ce897fdfe3db7df3f664a1a1464dd8382ac0495f19f8175f6801ba3b540e9005502f8fa1a6ced5763a9a7699fd4988ba54b73e26d2a72dbfd3d1fde8e81cdac98150a3467b91c8b6b8898a24df2724393e2b6f07e3f6d958ba52590dbbf87da0c3e60d77ab102287aa851de91622e97c5c13824d17ba22c83e0b1ffa7a3867f5c79d59fa1021b037159f0061852085332b06ee78fc9556d5c643af503b2f0b6b608c065b6149a42744783ffc0884f3dde7a3b8e4c879cfc9b5303bbf477820f86d29ffb5683ed8dbe711f30203c6e53a7d19fcfecfedeaa2ea82b49fc649ff21dc64f3f5242cf3fa92dba29c51ab58fbd9e146cd9578ea6ca0fdd8059244c7ca3ee4f61bf616c315f8067ff71bf4d8a283002800b16719a6820e0588d69cb35a113ca41ecdd03296f047e4de985dfc52048ba412d08590dc99e9e0bd03b3dbe5f622f0bda07badfc068866eabc749934d5089e71ff8766f8582bad131c1d050315cbd4e934c06018fa7cc30b82bfd603af862e1599f87b3b3b93886551044e905f3c34f4c557b3186498d8a265d3c5521a4ab5964a2a70a7ed8fc1fc3542f077f30130808dee8f59eaa02f08365b27eaeb94c2613e5bd8ad00aee5ce3242ebdfa500b9679343e8e7e65f936a81bcd32470ea215c8675763a2893dc5147789682b1b312220190a333947c7dc385d409239e4310d1919935e18cfd679124d208af0a36156e88863afa9d516f3860675975fa8748630fa4fda1f5e19825c384240aef77a2403de6df14a3257623846c329377c1dc75518839553a15a9160ecb1e24f2c999065eb9253a74fe00654df47ee4e60985f11150f806ccd1eaaed9275e26f7379750d7708a44341afd1f6cd67bbbcd227213c25089d9dc30f3581b3a6863adf06497d35d57471694889e043dcdd4e0050d0da359c79ee4b568e067eb5f27a22540630143352ed449a0df1f73f0ef5afb23868bdac3167ecd9dc2a0c50757bd3e750f3a7e0d1c2848f923a359c5b4a5f4dd069e878f30c0ae6a2e1ee0258a86a556528dff1b3ab6fcc0976213b6a1c92af83f165338e57e9ad7465ef29fad72c558ab7ed8ec877747823c012f5c43d203d6e640b4373770b21ee4005652436f23c96e343bf6c6d7e6140e7be96f2fb6d0a8b6eb3e31fb1d0533b528bc867dcd141f26dc064983fd5ee60c7b10acef25849e12cfa4fde3841d783120be0aa4dc43e6e01b75e62432f3117af10641ffb5d5e30b1747214c8fbb85f7295465417e8804efd63d4220066340a107d809f64142d3bd788096012e66edbd6f5470d9585ee9115a2e58caf36cd0ba25ac3af313770e1c7d8e8385099bed85dd2f7679639abd8b7fae37ef105534b40080c44b357f13deef0c783966a0b8cc99f0a74de44c5585a78658d197afa7ccc8aecddccbe83a1bc4c63944f1579824b329127bfb33dbdf8e400d1bfcdb3865627824d82c6b98de5cbcf77f467fa1e0d587131f9ee4c92ce8db72bfa3cbcdcbff956fc406c4ac21f2047289202c39821db869e0b153463d4a0eedddc9691744a93a813969b78a03f1bf444bbbf581136c7b8d617b8a0d627b0d451194e4ae1003ea9b8a0a7267606d4128ae59b5a4a86b43802e5d8a05c314aacc85bc5e3d4739430e7051623e665b82fdfab3741d42cfb226d0e66d6f10c5e65f19ad4c9c4508cc5d6a8e77195cb4d4b9db5e21900f3e857d63a153933b289ef2788bd026c808117b13edceb5eb60817b39a5c7e2d7ca76d19190e3cdc859ef01fefdac7660969512be9723dcf4a042c27c836149410c213bb3fa27348682ed02ecbbd84348edacd1f67b837e6a19ed33f129f010ae02f7fa6a2cf6035b4f6741da1663b5e765f6006f00062ec20d1b4f31102fe4b757e8f54ed8dd8a28e1436af17488b65a14812463bc9ef89d32b74dbe824c40df1de73e928401175326c6e281f3d23d5fd77440d8554f1f5802220483841c97eba03951e854ce0caea1c23e063f87beae9e315e50692cd575f4b1a8746b76f6cf6d1dbb2a54888ba526228638c9fe9746d1aecb57565f76dbd1bd640600f7ea4cdf3f165864fd76286434df8447dcf9ebdbd14ef70b901d5d22caf06235f2c11534bb77e67138293faa108dd6a03448a4aa06689dec43084ecc500e1d2ca2734ec4aa704dbace8599d9fd75146c81b5ba8247c2fd6be8f62fa17361fbc7407ad81f13ce52cdc0a91c06b192260dd63637f41126cae4b21b1eecd59fe4ca34d6002b0aa5a6512b79da93453bebc8ac24c0aba047b537ac6e6052a10c9962fea193d2d93aaf432ca8314d197597c03c24ac856d6e037114314c3d2e10d16d6ee7a0f24d589e7a45241b25f0569608ca9af41ad2044d17fd9c94e95568e12ac25a830d53fcff74cb05d0db4c8832bb3a23c092b8a83a482420cad94c21b4491d69c274636f8d9a7be25a9d4ef09fa86017497a2b95b73b47263019cd4b4fcb55d9298e421b9d7eb3d1c089b0fd7a37d85f6ac6165312b415f42c91bb0bad21703119aed551cb486f9b040cca8be3386c98dec7f3ecef51c17a81e5c5ea6936475ddd5922e24053643c2060dcdeff6ed1e212e2e75fc7a1dcf920190257f122b64bb6339e508513d8c345c8000d52c1226a2545dca2f856f627ffbb6251637b2ca8ae9ec89ecb2c6dfb0295b7b969aa265c40a0d2cc3f0659d6f8ae9bc8a7a1ec46f24c86924bc0a2b25e2ac1688f48d2aa5c4b02e4c72fddc220e89fd81c6f03e007fdd96cfff6d180ed6ca4c6e0d5e7c5bc4392c99d7af77a66de7e7eeaaed9842393f80e5d527442abc7c4aea50fac9b2f70134a702fb6edffcf25b9960dfac79668232e1b75a0d86d49cffcfe19c63a7167d90c230fb4714b7ee3f90a440b402de49f12f90a39fb5112de7afeb245b94ee119171fc07a5f1c7d04728c1ae15ee5346c25abba31076173d0299f5bd8db92eb2140962dc14f58ff35807f45050f8694a9992fe045093ed588991865c31d616a1a2e8d036e340b53f2c213fd1902ebf2732978b0697b4534208aaeba8c18c33b7c348ce3e34a0828f9e2b1843d4943e2117cc338235550435957950919db943bbd43558d841c752b2d49b5fa29b82f25e901a2e6c56305149d6344b2bb00c8cfc5f3fa2c42b266c3742ff9c843afd3420f8bf754e314e5b5c7749b8e216859a0f1683c37e77242407c0b74d9414153ed9c81a3d91e7c84e46c34213ab8c7d92735b3ae8dc46b90bf9fd2e4d5b00aeb78a5867fd6e14fbfa6a4a107f64f87ef6fa8451d3e61db767e753d952ead33430f90bdeaf7bf236a6acfb15c32bcebae7c097ad04752ae67327f8de71a99a7d3a208f966843ca880a985f2e19368e625255e4f7e1a323b0eff9c88d413f5dc07e3fd6fddc6b9d5274b568b198bce0bb813d0782442d898398e9cef5dfd97702c085e796bb5943977608d7313020d122d125a4224aa35a1e06ac9867741c3ce39890c3f2ccf3adaea0fe40acf3aa1fa27742bd377ec0cf10f39ffc66e0ef1d4b982cb312b0b0dea046fc1833ec9b3f972e74a3493c50545d24e4e35a4a5050f317f60c46ab99b8638e18afbf9673a8220f82f1b1e02cdab1203d39430a72b40b329b1ca5a1f90d4e753a1ebb74e026464b9b59537b61bf88a2c094ea15520cc633ac22521128ee0856ee30ee247113cbadd48692696cc03257c47f40ddd7c22ce475ecfe1e66161b65d5b756bba6ee0e7317699aec1a324ebfe20f8c34adeed3180bd4e27486ae3f888845fb723d1062bf2965071a0f4a46b2ba2e495257d74fe4db803f6a2576e9edc106d69d7be6262a3b5a8d7cc04f76530f02593de05c3eda0c03c2a95179b4ae36a54a26ab09b7b710700d6ac9922672321ae74ee7e0f3dc1678cb26625003d2cdcc95eada6376cce6179116ea27e15ab648a059332fe15fef04d1264d9d7157797f0b6c8c58288c30aea7bc034edb0ae79680350b9f6d9a87363abb67dd23af805d4c40d2d65e84a22e1aec8faf1d9343fdffb5d2bc937b1294b1999b559dfaf9dbcadc2be09e6680cedb03f49311263175e77bbc448f0027fe3ef2d9baceb0d518fff1867a6797dbd01ff1d84fd79007d28863c4a4580f056e39eb0d9ef4743a3950de2abd4608569c3a1b88a86522908ee576441e0887084741b66f597d73d704ef800a30860b4112cccbef18083498a775a72d4b4b3cd03bbc3a9bd8dcafd4e4707823efd30ba0f645894c7e2fba4df388964e7a1a48acea93613e785b51ce9584aa9c6805550104f3fe2e74d1e037cfdd50383824a4f4a5ec43cbc9945c43e1d9ad13c952b58d4fdc540218127820abfee29c4797bca5ce127b14855f8dea7bcbda2299037789e226a98a4fe363fb5c52c14859131096df18e56fa27ff4cf3f3d67f843867c856db6898cfc175db8f7b3b16df07c3521160d06fcafa1ec7274f0e9f6ead9f234d6e40080d5200d261e4a2b48cf76bd3e9933a5ffa3ec7d2919b1b74b06644bbc7e4eceacb75355080e09e146f2d2b6e1aab0a5bd0865404de6d637df37faa962ad316f9408580f0bbd300bca7fcb3380cf8f87fc01b79bf1c3b3fece2a84e8fe8689c3980c05b300e9ea807676496eaded621c9aa90cabb7ac4ce9b68f9904e23ed47abb053d6921a57c2f1b51d327748901b8973d4cdf6f38ac9dd8438bba4aa0f75d713f63e0d51574e9d5418db5b9d25e7397a648c203c7ffd51890cc315af6a0093533926a33f00170153705f7447da420fa671de869db53f8d1422dab0331157a88d9b27e9a9cdf79c18555269b6b328a444e04a09b0dbd933d802afe8d0d8e84f60470d3ef2c1c889a5c217e7c868181dda39ab086a91f7cd7351e4b8e0fec737232a13837dfbe9d5c93c22f8395f3a4a5eb81cf8f4ff4597014a362e46dec6fe2ed969bb21e70ba2fe8ab7fb558aeef69a31ce7e7bc8b6ccafcd3f104ac8d8d7ab6053c04f423077da9f66b181c7ddc0799a4e17299804e12c1fe24fe270c0419512279b1b72436b142f09da823d279e54e378a88aed6d890d4d5309e400281dc00ce55ee7e8ce6df4472be298494d044886330ee5c1156a1618b6ce777962a27935efa5477e378c9d03dbf436cb2a8c277519a6c8a76b15f6c9560fc6df02e1550d054b0298ea642098ef0e6ad301c5d08e754b2d0a5d9899998509f9a0bc7b7cec90a7f87226665d84b9735013213856480d562b31b129bd017ccccf2c389976678553b8808acb9e037309a377d1692f12fbdf8f69ae949e1ac9902a06490b4dde8fe2e228a99a620fe639906074e5d18ebd52b56961009e51102f323eedae6abb31a3b4d332dccbecda70f60e8a6e86f05f99ac6e6b91aebf4c0e0bacd3d89d3d2563b6631d5c1521033509908816612636093837cc331f18a1eebd0d2e472168c4d46aab620af2bf973332874bf777837bf186c7ec4007a5031c598e58f2c36f35c27be2e08b89f31df9e6f2964d684cef55d758e81991ba72fe67f7a1748d777aa8e405280cba338c89587cf56b50bb40ed068c3199b4892f848288d4252a643e71d171d59d5232936ac87ca4a3f9538bf564fb904312b610077049dfbaa4ce1685642b57a44b120371f4152f5dd150954c04998bd9efa8d779797b0e5321ef72549ad8251c7c50307fce4a9e0692735af0d25d5092c16d181807fb4c8e6e290ac1d1fc90c4c8b1897ff41d247a5605cd2a3f06b7f9d305f4a14ee14c20c77562083980bded3c1686aa88a4142649df03b5ef648260bb3f76dbeaec13567b1d0e9de7622084c08939c2dc176b22289e4018005a5d12624eb6d59c75b22e0a76ec6fc30835cc3dc79c1736725ba44a297c6ac085143e773c2efc441ccc3ff10f37e53681b4f08632c08de32b96e204059b9a599a4391887a29ff8c25dacb8bc4a1d85d5b9389e53a397a7a6ce9f7858cedd8bba4a3ed92082e1970a2fee66b2ef43a1360516d9d44f7c41901454cb1ae09ee6b55431d1fbc6b8949988240f9b5508e86ccc7bbfb0c9835d451c6992593cad3c34ea9eeebea8dc85ca69acdc3c1e86f154e985de9cd35ca6298a97808cacac806fdf33de0190d4bf71dc54708324582240c3f38dacf06fb6ce6e58cc96ee02355455cfab31ec512909fe60cb2c0bc320d93f641eec8aab27f38683a13107a870bf2d8b47b4a8bf4c42ddc1564f1e5869ca2d5fe221a5c47f6991b94c415104cf60d1ee5c8d3e85a696e62b57fd0463fa546c694b9d511539531af419a900a3dd8cfa5c77a89af46cee0e2ced1fce68d3c063a135f55d163880543d0b0298b229243ed0480fd318e421e091616cae92f288f2a4fdacf6dec2afa09b94f9e3390d98b840cd37edfebec507d4142e5313139f875dee2aa303b5d647238ea5a827468a49793dd04cf1456f5a272de05d8a1cc0c2b634a9d11c4a91e8d3c2eb9199263366700538aaf9919fccf024ab24ff06469ee66f85dd0b1609fd04f036a3646e56b9e7ced9937a0b5170c5aa608dad4e1754853e227ea1f5d963236704f3a995bc115188976a2977a6794b53451eee6ebb0308da76018198d2e20744c25ef812344544636de441c50a1d36c74a941ba804ec266496be63152a0c25449881478a2234419d1ca3efa8b6ff35e64b137530816d43ad0fb7cd839132b9f75a8086686bbe42775996871f506afcd49dbcfa0f06b2ae513299c2631dd006d686cef1954c21ae730b11432193127807acac907b4cb17812f0453d1b8726b74bde58bbd5d0dafadd51cd8dea0fbc9324275b8885b0a309d67c19490087fa1156686a718bbbc42f61d0d26dc677c26cb58785553125088e51138b09f09a87c1862f9943b50b92e9dabfae97933632329dc1ff0298134b1c8f72b3565f52bd804b96840801e15254973665700bec83bed0400857f335a74d2c1a7d5f52624b8260ed1ed332380589b1a8c9dab143cbdbe2bceb2c53fb6a5194c130e49b22c90d895808b29d76dd2cf9b11e27ca8b1a84b1d6c71039b8a5a17132e3b13519188f05802670f86e986c06a7f60b90fd67588a62717a3806057f5e8575f82866a55e494ed4cee628050ef70c9e6cfb2d251f0a40610df919f46da284bbf23d525520ade80f9dd7f12d7bab0f064b0ff3a3c79c426b23f6ba229c76a1cb8ff86e46d85775631721138ac2bbf0c79b645c00e1cf640bfe5a13fda27f6b01c590f9772073c44d0120c34b0263d2aa16e10c55a638ac4bdd74eb833736f7f7fdeb823349f3ed1d7462233913d0ac496be6f1cda6c9098e0c7e06a74fe795ba4d3af0e4476e4a8ca77191986b2686c9002598b85a03b94abdde4e474dc193364f3c121d31093c554d2bc8bda7359d6713973495dd1e599c099b7faa6b5b11ef531c17c43a7bb0f05ba6d84d670804bf2f8eb5c81e0d3543633059f15dd9ee6dbc0741ce78c1da93fd8ec881229a1f0a346ec71e0cf8574307248a5cffae566d4bae50ec96711416f1d52d12986851155b29585f8a9fb16bba26193cec64e3d0534a995ea04c467027386f0fad9c14c5acc8aa4c20bc38c111a0d79afe72a4a77ea78a04a135049a061010246481a5c3d23f2874c4f2ea2e7c9b4123d1bb3a5b32efe77838551f7d79855417744cf931e13868f3d0a32e832f45863929391dec842b18dbf8ff93866dcdb4b70b6d0aeae559fe9b4c305fdb090b5d425820da663bf2d35e3ba6f1a1f0ae9d74b349ede7f3260ea38749e0524f5ec3aa9b40a9cf7db339b876d5912a6c5e4fb3e09e3a0d4d7dc3894bb1617491c466f1c648e4fcff33a554e5a5dc31e883528ab050b8990580fb19e22b284bc532cf5a1bd606f80a45b99f240df3835e0a7cda8ffd4c59f19bd9b23b20db54ac047fc6f1e656feed890e999d2cce6cc848d04784e2ca6d5cb503e728bb3e8c262ea0eb7b9f09fe205194cfad7dd5ec6a5fbd5ee0efe7a5878b9eae44eae3f3554c7160cab7b14aeacf687fa19e4cfbea800f59ffbc89db6e04b7ea77898b998e06f26668cebfcec10121b932112dfc5cda25210ba1f62a9543ac07e9195eed7b44c8f6c746cf606c7f6ec5a351c43858b0e4561d1ee0997d4e6decea323b2b38ef6c4c1bd36a869be0d1694d0579670c5731a3ae7822e64a56c1c6e96e1a0aa256f847dad0b064a0be2da1c90a7e9386a2ab91d5dfcec5b80024a1fb3b841448c1a273ea2d35724d4679e5dc20adbc08d107abf3cc070e7d8920367c12acdda6e4a499ad413e75ffdfd725be8335565e05470f6f4aba49bc56af5cae3f18447633e5afe5cd1641ee164d147ba97e8cb078195c35914d8e157c32cc7e0ff0ea747e0bfce8d0c419c1732ec408e8c26c3bc3281934813574ab776def517a7f5acddea9fd119f693fe5d407758a768e8f3d88c8806cf8fb20a22fc731353849340c81199631f28257c9acf926153505cf33113c58302a97809392f9d00cea8cf02badc018ec47cff325f0e916513e8703a12c090bbf6a081628a0f3164cc147e9ec4d084b421335ef72e4ee8bcdf7e81d6df30e430cf3734243313b2c6ca3ad365e31432665e8d9c7470d9c315639cde14f5b29e1e2a738f6b4ca9e7dfd462c622e4105d7509185cb01c8506fac4e9a91fd9a232f9e0d602724e87500a7ead2dd1c78782ec2081b86bb934404e16f18673d97f02e871a804ef7619a1b480a95e958a6b9571698617bc4610d32623a2438cd5e09f4aebb6b858f132de1a7ad0c2f66a17cf51e740cdfd21adc4267e32b0008fe22dd6ae710098e91d47cd31c1308af3d9e551004b12c6ab9dd37827568c9f21c24ee360b2bc2c8f9c6b745d64b6da219bfde9dee2e9eaf1f107f656222f0a7facd62bd1e9a2089724b12ce5f48aeca421ab610eeb27c40cc7f955733bac42860eca681238e9b5784a483ca05ac2651405bc00058071287afe7f0bdbcc3c047c87d9793c4f34d00bdcd142b8c57e47c4444367e4e08ee35aef0102f2d25c09b0138c6947ba83328faa6a42ab9459b480b8fd692c5120e81e90dcc00c594024543929876368ca169bf597a376b37f729411f8bc75fad9f0f30e84eb1451522ceba1768d7bf9423311b9c8fb7d73eadf8f9820c2d38030d44c990884914a60bb4939037d95383a75c68a0caec7c9d03d3462fd2dd3a7d6a77caac9b49c2b3a09f9ceacb8bbf377f53f1e461775a80d08cbffc3e05558cfbe7769f4e3b6fab053899329cfa7292eb3866b622bca61bed83cbeb49231c8664f5f78c8da66a66c3da9020d623b7749792efc2ed7677094bc6b6a4ef93f8570da13481c274080d082f0f97b5a02388d9e9856f984df59c647edb918b625860fa7362f9babfcfa29778eebfae76d02ba1b0ed69749ea253331bdabf8ad6c9828033dc28662584d09695dcb1363dd40092a0a7e76c955fe68d74b40f6fcddca2fd7588dc81897eec1413202f6f0ed648c9421e0f65c66272a4d98cc870f865d53a751f54a643a9bca6bd4846d1b92d3ed3ada5b30ab8b6137410eacaced46333d6b06e328262ceebf15f89970ce5feb4051b016a68ada588534d0d84220b07b258d92c7cfeb9599941e491c3956cce3d30ffe0f94a59b05f457c10f6c04855116d7b894a76a63e80ac33d1ebddcb010374cc674f219fcd1f45936795416e7c7af31f5a23416efe5b4ce13b167002a4c45982342166d29bc32630c37be4aa997b7c9ceb2d5a77d2a45034335ae6c059cc892ccf164d35da7816e7699b7c46e9ec14dd0346e442ef197f23a7298ec0aa0268a42d7625ba0e85e64e14a0e2ec3467c81c0e797364902f8ec48765698d0722df31716f82ab16e679b22fdf8188080620596d01bbb7bb4654090e9c8878d4a69bc201a2a773970f25a051edfff46ef9f43f656e0ab48ee63e81417d6325ea00fa55c733d8520687b9915b06e689a9f55e68d6190091b771e375a31d531924e1d85e96640e2c4724246aaf17cb3dbe08a088aff6916135c45d1977dcdcaeb9bbbe9eb28f6145f364c98bf01f5b71b374eed4231d09b6efe6d6c3d16cbe61173b1610109867d63ce7bd80abf32e3ebb77202ff01e4741715e5427179a52bf3e0c19068019714d4b5f23e794fbb9d95e1f5d6be79c35b302de02f094877ab6440a9e9a699802af64d859213c31013fa4294d50e047173bb9be704a2f8cb0189b230c70942cd6192e551151127510a1e908953b7f111b08875d9e3f17c0e53d21f5d9bb783521a8bc21349e0b8611009bb87a93c16135d68c23b9c612ce8530e95ba7f3a7f3584cf01680c46b2f17ddbf89645d5ca5ce481e30aa9e52aaa819d33c54024d42235f8c0cdfbd46bba12863de025863f0e515f8ed19362c155a1cfdb9b3e72d1c5eb7fc91ba6159fe6a05cb5cc297f871c978b524c59cdee4806d7a0b9434dc551f75fed849cefe723d1057cfdc57f8943177fb64f404b2bce072dff18d1eaccb4e77d906c8d111d115ee062a21babce219862c318917d33722f262aa2fd3053dcd2aef1358adf3ad39e44bbf77dba250f5eab6e88e8b6040e5e622a04cb6e019d40813b60251965d95474176f90cf3a36227c1409d69aa2a2469e517409928adcefcd1bea01876509558c487da325481f0d59092d44896f01e8fe80fd7000661a1e0bfa3c20fccbc36925ea060857ef25646bcf86a10b74de075473914236fbdf4012cab7a56bd013706bf0f52d99e13f060e330c7779b7f598ee5bc80c20042bf1a7c335609447b581183f79d41362e4c5a0a97836275a74d661e7873e0082fbef199513ca9d4f85f3b4fdc37b73fd189cd0fb33be008e0f8eae39185b708bab05ccabf15c0e81767bdb88aaa3f6c67824245787c4d42f8853963c38e16a4676b8705d42bd1ca15075539056d26f69632f77caacbcbfa9494e9e1b3c1824bdb300f922a1010386f4f6f83a1cac3be8bccc2623f1fed6c73ec831d447c8637102ac14a0851fa844a58f99a0e9e983404abe7211e6a5d0f96776f91475a4a97ed7144cb0af5a6279bbedb96f96a7c98839b2973712f9a4e54abfa49b0d8e1fecf8913305e6eb7e8705212e5c41aa14229efd847b874076b0eab8fc9d016e597d6b3e53a2a799e2efa28fbef44512c38590fe943782937e6995f765f0fd01c3ae911bc13022030074bdb29d938e058614e4724c7f4fd2575a021a052e044f33f8b5eb1382fb5f88d8b6ef871bfb2d2a7fa9ad2165b909260da50ce013944819ba9e0da23dd5e527d84eef7fb30440387c06e807722d8b5bf37a36e46f1521131c2e5741fb604cfa31ec81a338bf5987c34645674243cc455f1f8ffbc41492f6350da31c6775708877b25bab0f29809fe7f27ec48c19e32faadb95cfe8728250d670483a330d2141ce03a2169ec6d5819c015db3cbff9b5d328a88c5d11b00eb474634e18260a2a35e40a793f6c631d7bd5e9635c093624df7dce3805d3ce5be8d3bdc68df9aa7e539690f5d84dc6a14651fb86d87a0bb94f0f291426fc1f269b0880d7578dbf4934f18bcf9f87234a73bd2665054d33020e1045fdee7db0c272736cc691314e4b352629923cced6801447c2a602dcf8aeda5a4d2b79ae30a5b869f4eb318fa1f5192bf5c58a9e4137c0c40fcb3ebefc1e6ba4305c3447ff7521d069bc5279b09d492d04144be9ca715141967a72c7fa1df1eb725295bd4f4f603162e31a42f86acc617136148370c0c086972322182c77b8b56f7509cb474be722d81ed04319cfa4451da42861fc1c6c60aed34679f0c07654b77861316c81e92cd261b94be2e9bbf359100d2981574e007b2e992af4993b451401515d24c1b71d7bfee3acd040cac4886ce76ccc99affbff34a03383c30f0175923ad860e4c00299a24162a739512e2386e1371f4068697cb5a298f4f56187c75424f396cd6f79992d3ca6d3ec89c149046039b936dd09361e6728e345d790a75c5a62f5cbee2f6bd62066d6605a06302c0b45c444d630072c8660ef253e8a1b3cacbb3bd7f7ef8d461581fab4722803acf0f69e517d98709af8cf7483c64d8fb4430bfae74ae13d369a466ec18c1fe7935b3df851d9226f323d8f557219b91f2f05b3fe2121f6951b9a57041a5e9000c4f292bc2fe2a06b0b48a370d203659670231b4ffe90a8767a4f7725e49ab504629f616d9d25d0320a0a346315a81bd11b0c225d5560d29b090a484ed9cafead0e66c0172345ee71470d62f2ca93d04cf01859b5dd7541fd8c268f1977a2ba8329e728e637ea5683f5eb7b1b08b6ab9ebf57e6c2fe1c67fa74a34c1e92eddf42a7dadf165dd8b49b7d4d8df90e1bcd3fc3b57fd61581d12224eacde4c90f3c1b6e3a0e6e46f067ba77fd56e19efebb7f1a51977b1dc4283c92d9b40056894d3aa3d918576d7a418933a2fc4ce5f00f3a0e2703d194fdb13b2e3f6f0d54982bb4fa35c2c5c5500fa2469715fe18e86849e081e8d0afa098c8a8e7c52adc767d5e0cf14a2db1662a32e432e8e12e21ec95fac03e317ac76648de21adf454ed287d8ffeeb92a0af59fcf00ff84eb4df68a1624c831294d65c08efdb76bcfb9b0ca07ec2e7b625476ca8255202990bf0eaf6235b261a6c0e557738ef7ef327262fe6cd07c1882cb67addca46577f45440d60518732fdeebf738bcd749cf8c71c4c2e1fb66e58da5364b7af671c5d2a5c5136ed21189e6dce19ccba47b4860333a701a70fb36054da33e64376dcb561334b526d7f15f8726d9e69af58478d04c587c067e62f81fc49b69649f475de42dfa6bea82789b5a7cd00b489a7860e0097ca21f6479014e01206730d9db6e3749707c7b54af5822cae819184abc133c89344ebc6ae0c456692c8b6620ec991ed6a6db65ef56e5d1d2e255c221a8738bcf3e561a19ba5ce7d1378691d6220f67d446ccf1b3966b7ae690539c5f5a9a2f072b0cde0b79bfa412918cbba6d56a5c3626e389cdbc61109db81245698449adbafb4013ee307df45a9c8cfd09bad073e7f7f6c07531301612e984052a9e056792853e578ecdc2fe64dd7a5a91802bc6a5f63e2dc1e15ece583598e45381dc9d554281c99423b1854c4991fd13772e064616ae650213771e013b8e61e1dab0b4473a3585bd9b1ffedbff9136b8f501a4d78b90c03b122621dfeed1c6652f5fdb456f28664d8de011450c25d4a33608ca6e8ba34f9554b8b6b12c9302c85a130c7b4bcdaf187c1395ba1566827b54aa308645680f89aebb1bd65fc68522dd1c01da964897ebd8ae61e0ff6886e4b7a59505e0e98cbcc5d2031c37d7fa9a9891b19fe372eb17d3187492c2caf6fdcda9b5a9bf04376a6817e28b2ce753a3b181594d373d38b613754b52401ac80eecbe3f882666c69102ff5607a33dfd72be2b050bd85ffe5b234118aae4ca3a00b77765ce4e7bb3c8ebe6973a269c162e021dea546c7963dbe06e2f9fed0649c0212deb94725e08a254849e684752d6a35ee535ac20276850e2601f56d8209224df1721f24c8f9d5bf34623c0281a798c043d86bedc4b41607df32df20a33a25697b2e220f7066bac0626ebe9e563a9f49458ae0f70661f98a38bbca36e72449021b837f4b9f99f3ce8c9105dbd1c030a77223f28875110ede96482462fa5d643d39bdaac9ff961a01d41729d563bd20c995ef5be299832d5669f94ed00cea8276983b266892fecac0d90f79be91b462e1689863559cd1919ded540cf5031fb20d97d79eb6f848708236bcd82c110091f7a55f80cebca575382f976d5877663b53bdd00ceff0248b181c1a8a13c3fea46c8beac9fb8ebd3c41aefe0a3b2a9f945a1336a651d464b447a3749260d40ab49179cca89b868e0e3ae67177cabde88cccc5a27a2f686310a3f0a8a9604f06bf0b77e06e438250c50af9a4b53f1520c6402034ea0459e0e3430b224c301fcf33ccff33ccf6c11b6b56e5b533a52644a32b9f7fadb26764a32c994921cde43e19625380837402f4b482304941b730e220f140fde00b002082caad4a96c93ea3091d15718a3dfa8f04afbd4cf157a96efcbb417b367ac159ed40b8b1eb2e65a4d26384a00005380b0a2f1f6fad120e321dc559cc4a7945468108d1f035145428d5023a2e48ec60524159bce3f4a897bcb69d22f80a0a28dee55ead4f3579a2560f00c0074003945424c73865bf3b9a8974c2638d0003105aa6534beffdd7ae75040079052e8c9eb6c84fcb20c5ec9ffd8c13740010829f0528dbef9544eb497a30420a3389f360b5b1db219fc92c9048d04021051a0a6abf37228934f4fc964f263071a3c3e00128a7b4c73acde96b354964c261a984c7cc7e7007167000414ccd8e697d3d992c9248dc904070e1b38148d33b8047f831d93c9ef28a304b11939cef001002d807c620b17748632bf9cbbbed106104f243b23e4aa8d3cf1151b37d400d209cbb463cd77e66cdb25931f384e706332b901802e8070e278932257c4a7e8d76e229fabcc3b3e1f979a26fa3fd54176a64f69ad4c5c62c1b53cdc9848d5b4d4089dc9fb724a2ec1ad85d1e1fb3c447b2c6166967d97b4ff4ea54aa44a6f0a15ee26be33252e3fa5358e7fdeead1082093d04725991ed292d6af92b85b7329d575b144a944020412958c53a29edf74dccb0b208f30d75ab8d8a84db19303fec10510475c261f5a6a99a4e852232a71a22feb48cf7037238ab935b5fa06d549264b26931f7f832d802c02a161e6357cfebd4f5144e9c963ebc4498ba34ec4efe7f175736cea140482085d936bb8fc3fb273de5106fbe80197c0c68e13d8f01d658cc0860db392c68fc046e9f128b841069043f8695174a61c774a8786c04fb77ee54ceba2e992c9248dcf418e1c678014022596738c07fd1b1c1f68810d1b818d32821b6770095e479fc166f4e09105104224e2920af27e4f3775060122882d45f94f496729bd6ac964a2830768e0013774d001149c6106020944622b47e9ea5514cf954c26931e68f8d8d181138000e28dcdccad702ae8585a01e40fc6ebfc9e453c482fb11faaa42faf69577aae0502481fcc7d8dbdd1f3be295b00c2075e833a75c24a9b992e06207bb8c2a38c8c25d36c5e2593890f40f4509a8ab374bde641f32593c9f7386332c1d1012180e4e1fd16cd8ba296325b008006103c20424bf3ed98a5650f7207367468581b1f006600b18373be3964d8d4cc942e994c5600520746654bdb5319fe323406103a9834bde6fc6ba16dea0dcc003287f26efcf8f519cfe279b4838709768001440eca87511ff23fa8a549079038a494c6bafc782a0f560f7e4c26007003081cf27c7ffd31ce9f87de507eb20f0f9a19ee7237a4b2de06fd24d486b2fb74b6c82036dc69daa2a9be0f59e135fc9f96a382d041ba6ed490b8d0a6365e909ff36930797c5175498cbe8ba1c1116266ff83d29fee19961dd561edafaf9e62862ac8d015995539255519b64fdbac6b75ba6267c046890f06810d298090013d97f2c27ad2ea2f3ec8183e1119465c6b33d43782002206e4c433988cddd1fb5b810d326e4c2637748084a114e5754cf9a52c65974c262060380965ea2e2b1a6e3d8fb423043ffe03931e205ff0d4a88a56862bfb0c3472e480070f1d0ae2057349efa0b46b789728053648706332693f20205cb854c5361d36fcbbb734204306374000b205168068e1516a55e1b1b1cd3e3e60009205198060a141ae006205acd72bf4a608a40a965ac5d21ae1993f20542873b04edf9d7a94d09902dac9f2692aa5362919208048e1aa5c3b1666a5318b5128c562ce3f6b4e9d050a6853ad31f345056ff7097aa9d217a4490b2a7c9c803669a37b8386d3296c026239a46cbc519bb9a501c28464b21c74791495d6ec25701bf7d732eceeaa47095c0eb320a4fe6edc4c124090608a97d2a43dce27cf0e408e806d59577d927f997b23a47bea848ce9f6ef3e51002942f264125f4fa13a850984085c4afd33a74de84c018118c3385975d49fd3ee4107002788218c3467515f5ffb94e3954c2627102318cf5d36551ad34e29c500862988a6a4f3a5466f8f18bfb0dfd4a9e43157caf917c3178d958f570915c3c9de46a1c0469dc04699c04695c04691200200908218bd487a6ef07c499a577d8e20062f4af9fd5d4285cd98f3bb503b3badd8c5a0627649104317b6c6379973d26227cf054af32e64e9305b410e00c00862e0a20a2a06f3dca0728f521a62dca20eaa39b9daa7c6b8e98118b6289b4eabba99540b7438ad3b1a4bb42845e5750755e7769a45c172dfe9bcd8a54db278d52d9767664cf9c7c2b1b8993465f18f1d16c8a7784ca1ac93c65f61f46cffeda75ef2be2b8c5ff367b1b99ad36f45ef419cded02ff39c67c5b14e2e46b7627bf057519875b76041e965ed5581ee5cca9655e6f053a15abc16a164babb1e156e1e536a2ade32b39fc23f21754b5d8e294a37456331737bfe0ef264bc14c5853539c22edb5a9c14e8cfa7bb676f722d1f45b92a658cf371a4e64814675e376bad12d51885c213f931bf6297cf45a0408ac56f1425bae4449f38a498b96d0cf2c4b5eb3a36e22273d99d40bfacd87abbdce79913a7b4639f73fc4edaf326328d1f35f9953c2db3264a952bd8c5e698d6e44c5432e88cb1f5cff818138a559ecd214f8db2f025b6f7a0e331a55cf7d712599cbbab8f16ac425b8973f0b9f84f3b39f752e2d5b4987276ea9cf54ee270ffd7e839944c7325d19aa9d592753187cc4602f5a01add2d8d3acb42a25025743f45cfe3957d44db9d54c7a49e1baf7544dbfda3fa3b6a275f1b511851622c82f1f9f0b09f7a23524598c2565af86e877c3511c96bcf75573125ed29229a37dd71dd4d8bd4f410e59bd418dc624c56a92114f9e8494498d0e9740ae16f10194625a19bff21c449c712aa396e0e919e4194733f9c8d9ffcf68e20d88a9b632ed6e8cf9d4094a66ff5d2bb7e7807108c504169a894a357eefc01b5d49afb9cb7a375fc50fa5062f0a153615310ca3f4511ee21cdb09251f4c9b74aeac1b658d149e4e99c3c0fe96c2e1964edee83f0d08572db60a66fe7be83db39648c0565a6ad1dd60f352a66f3fa57eb508e49ea0593a6b5493a5ca266d7c4ea7c3f8752c58529f313722b2307ad64a4060f525ffb38a85f9ea2589fd07938bc3bb661b12ef6f537282673ec145d6b67bac194f73b082b8bf70ab6a1649e1a66a37f69131b92395de68ddd4e29be062c37ffe7c28e98f7d4a0680aa64bd44b07d380484b8b96b994d02534a0ced57c3d78ac8b9fc10fa5f4732e744ea21932256cefb38c6b4a5919be7ce23c7bae91e593c1d5936f1375ae278f818d5632b67fdd4b5bc4906aaa66eebeb3d386a1edf9f71c7637c71c3020764d562aebaa8e55c96492634719938908c4f8c2bb595c46c66fae3887c0460b6c8c600567a0e1cf811c67a0e1ef934913c4f0c2fd7a22841a4bf3fb75214709c4e0c20ac4d8423906557731ada8c8980ec4d0422763e912965563be9492c9a4076264410c2ca0644c9f347d888b2cc5b882f13b2247b377b7e9b4400c2ba43f7774664cb194c7552898cbdfabe9b4d95a2a34ee1fc2f37f85a5398513882105364be76290417d864b0c28bc6be6a9b76d334853c9641284207c0f347cf0d0817ef0032c88f184a2a6eca994a2096d1aada379070b26932588e10445455e478b968f314df8844ab19452ccb93f87838c1b00e882184c70ab348bcc9c638ccd4b2693d7e165e0781d1e821d27984c7ce480078f9206f8e00648a0d8a80ebc8e33d020230237ce106309a70bae1fd495a753ab1292499ba7d45732dcf232c448c2df6649776ad3119ddb808d17888184af4de7ba7ed6c6fe08beb85c8bbe099d6263844453ab2e499116d3224611f63cf73a1ab48a552c0611127165ba726d4ce5611a9021033202308c3b7c52e2b677bb43a92300c2e082a7c8cbed9c7a0fc6235e226d6c83ff7b377c0400186daadce7dfedc5ceff4211a537e9b427362bef8b2a69af3c32dfda7f502f7add6bf320cb3ae99a17bd9eb2fca0f1622bde859fb3e5c7da24535c541726ad4c19ff4f2eba14637d90a1947bf8e0e2dff78c9a553b74776ea1084fdad98397883f6db16eb0319d99daddcf5a1864f090139f9aa34b5aa47327cd62e159144d6a29cb1f547fea64b175fc780559c974d86251a785eba766df931758147abbc4d3b8a991960902f08ab4569ae95db8e07b72459bf9d385bb78de792beab6585bb2e465ce678577e24584c69c73f85751a874bb14d3b795a30abe4eba29ff2a25359e0a37cea57055e92f99a8c8cb5230eb0ca5d943a738c7538d9129adddc7147b9da5cd9cb5d4525d0a5bdb738e889e5169264563add5735a326d6914e86779b6d2a584aa551426f38d7a32eb7838148bed6ae7509f72c6a060dcc73f5392991acb4ff8292f58daf92474123d61ef6d7b727bed387722db1c6b69e9f4ca9ce072df9858dd5cc7dc2652aa7474f75577f63581ed9ed648fd5cbe66e2324f6b29a86f0ed330c15cc86efa58eafb5f22a92745fc96b0e4b725d27223db74528d365722773319973e63332d94d043c6e9ffe8a0b23f09742e9941d6c4eb8c85810048c2d13dfbced6e134859128e5e552c9afa8585bc964b2a38c1cff832b100048a81f93e6b022a6c5830178446aba4effb46638a5e4084b95c7f4bd9e3765de087c5d6e3699e7a0839a11a5dce964920d3e3ae345ac29776ccfa5b44eaa8af05b45659936a5fb3f89387f3c534e082d612722f091a331c813ba3c3787d85290917d9d6ac46a0ce1ed473bedffbf2174853857dcb83f1313025de1a9ed3d779b3c88469b79b7894d392b278845e6f68810fa6bd381d0aee45db52c8b5002224fb21bc2c4e7f63f683957292ccf4b34f3439f1b77bc4d4c99de07f3b74ea7b751755be183b656eaf9f54f995d214001d803274cb67f4ab193b2aec40619377cc7ffe841073a007a28c7395d26429f6697f2f049515d3166ce9acce3c1d817ad54dd9745c5ef80705399153389d5dd0e59a9461342763476ea906c9e3ced13e24b87e8a09956ac12db398bce8153199412ffa1d308e5c086c9de4a7944c76ee3f078c62cbba0498a090eabbe781ef194528fdea07508539e97a386d70d6fb5b8ea66e950691b8c9f15eb5c536ad30c1b4aab956e9fb239056f0d7b474bb9c6ef3efb86838c00a8a1124a335a8fef7bfd69e062b646bf5911f1d1248ecc15d3bbb75c892ccb6b83303ba131a30625581395468b14a563c339a83109f4b6652d05753dd297c4e5c1948a8a5a31873e1286c80d22e64efd2e874415324f4763b9e6fd11b827df7fb3dc6944e40846442ea810b2d243dc0857e44da613fbd93d8c50d47dd2f77ab9373c34ce5804221ac284dc18f4674c0d456429bc77bcb21391724d2e1f5795a13f88a892f20a3a5399071b0f5185acfd5e6a9053311cd430c43f16effc2a2d43db42fc5a26966c3d84c5871009d73ce96ada493d3888826e51f98486ec2a09e2a869a56b4509ad200b8431780c6fca3d3ef8803007b35cb97fad42d67f603b2c674df5dad255c964e2877e4bc6b6d7a0b6d6ebd0418d3e1c62b53fccf2d279928c1b8f860ede410d3efc1dff3ee755cd49ab92c904471a3d7ef878b42303377a7c082613004ca1c61e789341a920737cf1d895e058c16492c3461a3b9e0337d2e841c68e2f21238d1dcf81c984ad50430fe6c78efb713a2593c90f6ae4a1061e5cd39a32161b32ef5c3299a4efa1011b19b86143a8710783beeabda4b26bd22a994c706ce0c68d1fd4b083df9da9c258124debc2a0461daa509ffec9fa3e5fb40447096c6cc00619375650830e676d9bcc54faa7f3cf01e9f1d3f7540e263a480e8618ab54415c6b3e95779cc00619377a50230e35e060821a6fa8d45a87da984ff6e9a0861bf0b8b95d61ff3624f3a77b6b95fcde908e1a6c3885a7fc6d99f52ae521b8010028d458c317b2ccc2c35e92290740116aa8c13475196e5ddfb4657cd44843e1c19387ca8b562234a494c96a2df1c94246cf80ab67fd9c43c80e5af3821a6630e9cde1692b3c6bd6121d3a38478e921f67bca31a65489f101963cc39e7f87f630435c890e865c928236a2ac663b8342dbb7473a5129f180ead1313eebbb3a9fcb18311b7400535c2a0a8cf71d3f7e03199e068818d11dc984c5050030c758ca7f2674b9ce7d10335be80c886c768d2f2e7b75ed8ceb73763b61be15f8d2e242e6b37a2eacdd3e6c2c1b62af372cad520ddc2493ea7201f4ae4f16347192cb8c1e3c78e10dcb0400d2de49b638ab99f1e333b5b230bc79c316e2ebd18514d95d4c042e3e9f347c6fa33c7cb15f4a0fe737d36fb6596063200410d2be023bc4c787e8f76a1010e094440061fa8510516d4a0428d29c8a086146a44a106146a3cc102359c60c58add5451edb24d3ecef081811a4da8c1841a4ba8a184f2289377d93209757b8d24b09ee6b387dd58239390f08e6f6ff4ec13a34c1cd438c29a2ccfa6b76a6d8c1a01a54bc7e9fbd16442a608668b5b635fb1f172578308e686be8f1ed466c77603916114ad84e950a7e37b7a8788303abb38ba211aa7d2498748302aad14da35676fa70e3052263ee57c0b9bde73bff8377c8c1934730ab79621e20bbf743c07953b89f4225533cff019b459b07951ea67bf5a315319643410d9c517de727b1c1574ca952ed0d6723298caf6fea65c947a37bcff8d09693f2eb81671b795ef5b643b9e47e43393d86dd1a5b439cf44bfee5a8b37fd64893d8f169555925921d2643d26328b72fbbddce90aa63e25220b4ba851f51075b2538c482c446021f28abf35586eb874fd690582882b9af9a026ad4b98109b482bf2204f8f690f6d39342593092b4cf12a232264e59441256d1059859f551ae6548576ca4b26131c2dc821a28aa4e5adef57c7c65281788eae26e782072bd941041599e676cc99da257b2d994c7cf09083c829d478b1b238dac2c88c04320e22a660339f5a7e52dac4eb15102905ff95cf2d64fc0b0ba640841466a59249ae5c781d2510888c02cd51a39e504f42c62a0a63aa0dea1b3ca8d0692858d36ca364b86eb41c268880e23a69de754165c4fd89e5829d924946df67cb12443c61b2b51c2b15b4d5e63be1c8d89bf2d0e963989120c209f355eaf3d1a5fea317d9c49a6a4d48eb98db31543299941c2310d144e254a55097f2aba22a994c26130f8864c22ab1f6f41d32c9cf0f4430f17b366fb5bb74997b914ba05bff2fc60efdd10b442c2152897d4eb66a121fed79ddc005229438296fcf5b236a4106954c26229338b768dacd9774d0750b44247149f35e0f994fe8b5e4f01d2c1289efc32a481f8940e294cfb865a65378ca1079c45e4af546cb39cad1835f070c441c918c79de4697c9f3f48a3442590d99d2e99c951e3342fbf97c2a05d3cbd880c8224cafe11d43f6efba3a0511451894b6e98d501d63f0a0209288e496a9b86d9f72b7f70111445c1ff6b23a6282c821ec183468d974714396440c91341d4feb50cf14f10665f8f0824821f49472f44f79a366372284283666fcd716d11bf320cc9a3ce91ce4426637bf202288b46344b99ccedf9c0fc417a466fed31e358e9c0b2280407dc7a48aca6739adc81f505157723f7818b11b1f44fc90a9a0fcf2e510bad603800d227d405f4ef5f57b6da7cd0fd8f0808d0ed8e0808d0dd8b081081f1ecb3aa3c662d04fa63d142e4fe33ae86ee6f5806650a77f55a4e818ccc39a45c7649fa6783a45470f16d810c1c3db2995ce8ff7f11ebd43996c2e53de67cbfd11b1032263953e7997399afa861444ea6027cd5342e64f074fc577ef94a47330d36a2ea564a8f00dca2115347cecdacc18213b43240ebe498f1d1a3d3cd948040e5e0e4fe2b3c68e9f739137d8219ec43bd885119e121c3f7e88b88100226de04e663d53a4bd897687081b3ab5aeb35d3add67700f174c266488aca16cb32ba347450dc638e65d57f5daa994864283c8195820620691329440840c2263d8f2f7a512d2a3777d44c480a71f5d3b5ae4c97c110943b9fcf793d0f090a201c35a295483f0a02296e204912f382e1e4befa53d697bc1b40ba2a626fae2979a20d205bdee3b6dd8ce29a971a1d8a247d389f5d1735182c816ca0a3266911f22630644b4b0851362bbf922e5532593898f1f2a10c9422947b3b5a58f9f9240040b65856ccd985533c70d81c815dca0a5ddd50744ace0e5a44773a8f0be3712a98225b22e5736730b3a05082254e83f9c67ddb09762b492c944870eced101912960dd5f39cc326d64b644440aa7a0bae7c972eea5f840c37394fc288307689891238d1e3f44a290bce81b25a745750c4b26134d8840e1147a19644c9ae9474c883c01137f56763953767e4b26137f1dcd9f107102fe621ecaeef2557c2593491312a73dfebb683e199b92c96410224c307a9e861babb0ea4ec964e20891256ccaf27da97ca336064b26931bec2823078e34d064b2081125b0597d9fb93a5cc52d61c18e134c266d4619371049025e392f85eff6d4719582081292b953589633b5d9d0a1833760e3062a03004f1039022a4f46e626b9643239828811da505315716f22fc2e994c8020520473ca97f73adc35e59313448870c878d1c2ae2f8cfec3f8544e55749937990be3531f3373f4515ddfb210120cf3c88a37f75d554f438051922d4a290bf5f7ff954c263f7a708f5fa4a6724a19447b16cf0921c417dfa6cb4ed2674f86b517faced58efc4b1042785187f6a9bc54a697da5de82217b8c8528aa57bf9e35b5c7d10728bfe92074db2a1f2de4c23c416cdb7c64ca372ec88580b54b3c7678c7e586e9f10428b6c73bcfb51493ceaa50821b3089145c5e2dc2b42e4b55568ec2593c986c0a2bca2425cf1a824a752c55ef64c2af19121ad40cd9dce7149ec997676a0a18210566079acf3343377b74641c82ab4ec3c1a72c2e75a2641882aca7a5a56365c90499f030421a9084145c8291ad552ea75327797ba6432d94088298a22b25be62d2a58a6819052e82f667933a5983a1c0821c595376c46a7fdfa797410328a3f7eb79f285dbd297546882850d5d2d2747acd42470809456b1d84254d7e7e1f0a018575c9527c8d234fcfe91388929b333a89f6a4b3104f24ebfaae4ae8d81c5e891965b08f904e544a5ef673d6e4ec82460827d40ff37d6d1a4fd3691327692f9b4fc698b436a5095d3b3e4b3cb3c5989309b398e5e77426c7731d3c3c1082893c850c56bd95bb395b2ee1c9be705fbbb6292d4008b1c426b5dd2c9587f01c2b914004661052895f73e730a2c448b1fb063bcae0410825d2db79439f860a5e59c824122772e36ae5d52c94049a9278ab4f112743543299e090800d4c346c281a36148d08882024129040258da1928aa1434ea66432f91d2a08798409421c512b086984755b32a38f78564c0a4218715e0c6117339796ee253b4e3099ece0b1883e3deb78278b0fbd8728c217a5ceb6df835e334b70f8f07146482278a41d21d8c0062610820808841c224719673420c410659c918105841482012184f091c6e7c0012183e041196764a0c7e7a0070f179cc0012182b8c10d988c098404c207207c3420e40f0908f1430e0584f4a100217c4040c81e728078e8680384e861002179f0f1651c20040f39ca380301217750bbf4b287ccfcf4dc0edb2725e32cbfe5f70ea94319d3a8a456dff5827a630621744829253a7fa97d48cd97241e3c7aa0a003217348bf5387ee3b8d3572c9c18ba93468bbb174158e43b9ce3cee863ba14bf340081c4aae3e2fd7ea496be90d075997f7e427d74a69371ce572fa88b8cebdb70d969c7153b93287ff0e1b9253a7458ef6974fafc153bafe5da96aff4535a0f3a2313bc6dcd4c13474c1d54eae423494b35487e59eda877686ccde3fc4d3c8ce75093143481942c82083903174881842c21002061a847c018d102f5ce9db634ea2554b7e2408e98256e726c3ed9a758ab860cdc9a4df933c7d4add82a6df363ec3b65ba685b7efe347645c8fc58464814ba795e39db6e8a40bc1423a5f7c86fcb78b975730731e9df479be53a2b2825666e93e4dee05a12a642a7c90f9fb976a562aa047a64e729f94856a86103285c4ae5568ee974bfa9742694149ada0564186521492b739e7fa1bbf0dd5082150b843b48c28e59f3b694c0879c24907f9eb7fe36bda7342e29fad46e7dea092de848206a563071dda3d258409969ade933978a84ae225842861d994d28387b87caffe202409a720faad63194cc81212be4d6d3a5c8472bff508ba65d1f462f351f563042c748eeb26273200908490226c492715f2d553871022182c7e86861f9d4aec6198b397faa06229d789c240f9b505757571d7d44980044353636a693a97f29281010418657aca8d991762c3fd05905f7c7283dcd8668d9fd717a7d638da2a56393fc905905e5c39b46c52f5b8729717df6aeacba6499f6a4cc964b202905ddc2bda4b75dc0cca4e01882e1063d2f7d3788551cd14407271a79697cdbea5d47aa400820b535ca50e212da6f516e658a534bd9eebbaa96432d1e13b7680d8a2364f73aa4197ca3904811c406a9138bdb7186dc336c62593490e3680d0a266514064d17bcd6b78521f446625938919e805bee357c00490583ca6ec2db66a5634d883478edf51868e1d65e018a30a5c1c75d9dd23c1185428d568d98688d735ad04634ce14be92d87dc0bd79ac16f8331a4b00769672d163fc6f42593c9648263053318230a081984c8a52bf1b2b91b1f18030a633c01d94a0b6777b152d09da06705a539ea95474f19a309c71c374f9b56161dcfc69f91061937fe063b5805899f0493c90dc66042df2696743535975ec658c279cdcdbfa3974a7b09e21d7cc6184a18230963204106631ca1c730c21845b0c018445801c9304884712c9df452c9cfbd7b6a8003fe88cf58411a3f823f9004e3cf59b56db4c9db1cd3f81194f86010d84802093014d1e1840925f53ef83e20f905236b2eea5ec85eabab0524701e264883c41724bd20e1051a24bb38a9aced286a4693ddba306f50512fe47fcef6e4224f2a6a8af929b85e1617ad5c74d16a2ff283e71666e6d7b8f89b72fda30c33cc20c18d1f6894200324b6409fd2b14d67a39a6a383c90811b3820a94525d57d94764af263e301092d2c9df96a19d673c555c24d320b54a610fe779764f89c1124b2d04feffec9113a739c6df4f812f4834b60e346061641120bf5e35d9638bf5031860416df46ddf020ef22548306c92bd224df6d2bf69cd25dc1e6fe6c6adb90b4c298433ed3c9db2445d6e377ecf841c28a527ed678f93e513b954c263978fcc8710392559c4aa9ea1ce35e1e0d5551ca59f58c5db2bc638924157bd2d26cb172faca328dcfc10e1254144be56d7968afda52c964c224a73069f7ea38528390a9db80c41465d399e9b527eca3a60624a540851b5d999385529d93908255d12a6263fee539925178953f598abb55429e24a248a4e77877d0fac92f925094f2f2498f1664ff4424a0d02b654b319f32a16c924fdc1fbb4e9b8c7373b76432f1442b56d5b16b5a3d6525930949274ca7f268f3d6cc5e9270c2b84d6f555ad4bc0b906c02d5fc4b77a531636bc96442a289139064c2d068a2699f4cc993954c263c7efc0e2c4082894cfc29153b56884f6fc964720955cf941ca5ed6a6d9358624df7df14f3aec1e692c9e4042495487595ae98103a3f09259ecd32eee1a6bbc2280424936093997c6cb30a5e35892432659d3993abcc88952412e53f79ab1f22741a12ad7dbb27652b17e42e994c481e81c894546638cdd42f974c2632207144312bb3a73fbb8e9f4a269346241797a36ad4aa9e841189fbcfa7a5296b4d26248b7084ccd226c4a2c92e79ec8044116b0ccac7aab47e8673f8e0922649c4fbde6349c9331d2f593299f828c306248828fb62a95d8b9f82e64a2693c423c7ebe0d123070e924314324ce7e83ce6abb30470d8a11101124c26432031c41b5f63f852c1bcd27b0249215016377e32f17440092484302525eb34a9d31ad7b40492417465a5f7da3f25397cb08f0c00e008248228ad57d3d666874012882ee389ce96fcc34313020920ee94175329f9ff50f0309f76b3e289520a02891f3219c542f38fe8701910d858c18d0edcf001491f48f8f006bddb9f6b44ada994b480640fa9a0c92e9becac1f2be761023378f4f0c0094070430593c90d1f90e861cba5a162ab54529a21c9437762be45cfc906170c2478408c8ef1b154b0dc5d91dce168316818a574d6f4272f90d8612b1d2d651c25b39fe1e8800d326efcd081060e48ea60eccbe94ba3b86c8549e8506719bd8d4b2ab58f48e6608a696e4ac98da7b84a2002378a440ec8cdb9d16b31dae7bf6332312471c8d45eae8fb9847e5c400287fcde84f6fec81853995e056fb0a409fdb30dbba9b51bceda1954f024f2b66e1b18316ef14173cc27231b4ad14ef1a2eaefef39cc205943716954d2d215396b9690a8c1af0a5a2a058fbb9e4b839e63ca2bbfb3395c5432993c621d6798f12b204183490519a5f45edc139613909cc11c3f994ee235253858406286ffc54c878c3d21554dfc3a1049198e172b3c7cc98c977b32141a5412af7e223be779fc2001c918b08f99d4e6e27bdc9cc78e109088e11c9b49e98a272c6ab4c40783a0c4079794c006192a20094323c3a636f59e3a32964c263d78df51c6a31dbc830de400f18f15f4e0400a48c0d0664b53d531cfccd5921f883140f285fe439aea0fefe30ed671460e10dc40ef3c36f0cec30493c98d27f1425293af25511b2f32a90b87f28e3bffd28aa1539223c78e94c30c1fcc831c3978fcb00009171ccf4a7759bc37a5bd05b45eac38a3d35ae84b8d7a8b4174a56db350865731b17f2546af58a82cebaf734e6a5ece15501567b73529adf0058fc14be759854d9d5cbc0c51217e2a24961b5af182ecf40d7abc19132099829ecfc52c877ad1ca934881240aa94b315fb2bc96e460c1771a5c82c9e447193bcad881c66462c69b410285abe2474dd408253f46f2044cc5b59c35d77c89de095dcaf73b2a0831f37213f2cf994f964ecad3b84c3077c762bf6c4f8474095efecf91d51c15bd128a4fca673dba89c993c09d9c7e141555731709124ef23584dce4b95d12488e90ba7ca9c6924d358b0d244638678f264527b7ed8b8bb005ad51992d3794e9ac818408976bcc1c459c4a339e6128a6c37c89ba386e2a348c08c3360f8ff91ad4150cc40955f263a9293b47c208306e3153d5bb3bb75729994c728cfcc2ce362a3aec7eb83c4b2693188cf8424b36574ab3ea6a5e30d20b534e6325c37cb5de72c1082f0c6ee565b5a36465057718d9c51e474efb37eb747cc4614417c6bfa5c6ca66c964d2033623470e1ee9c77fc00d23b930ca89b913ffe9aed57f0fb4610417e58fe377512bccc47a0b74ce992efdddf5b0d822f364723296069d2e538be46f9f1232cab4484779ed8a1b65fee72cca61de4fb36abd3f1c9185db2694e51efb8d3936120b63cc7732dcc6e4a1649230028bf329f94d5adddaaf8463e41506b9e419fa63f26e7b60c415c5e917ddf227573f34996060a4157db42053f0f6f1d45f4758e15ecaab319689030437be8c1e644c260060c2c82abc32b99fd329debaac8a928a3f7196ffdfeb2c994c5430928aadf394a7e84d42fb23a838947a6986f12862f653243b596c3e0b5a49e898a23695eed733c67edfa5d0df4685dcdff6141937d2f811e860c48304384648a1b6e5eb0c9e92fee6a3e835b534b8487105365a60a3c407836032228af4f9a70a999e83c7c3c70e1e1bf0c0086c80e086063850821b698c8422fd50e149fb0714662e35e3b9724a7a42bb914f9cd3b67f98d50b1e10463c81927572e2af43ad8d84914e60d96e64b60cfa474b9c28d6e36a88974736c1a8f3fc9b2de8f07eeac28826d42a21d48956d17fe648266c11cbc92ecc4aa78989ff4c27b1fa1462cf62c1ffe00e8c5c222d221acd5e2cc97f9640a75e1331cb1f5dde4a943bdb6fbe0c9af2895e18a10432cca60c95d74b2e93c6c824de1857649b7fe8ea392209a46a0795e72d5c35a6072391c03fccdea75c37e2cd1b3c1881045b979fe99d3bb888366e8c3ce25c7937ba555e7e4a3b82cd9829d6e6f35117d94823386562ae7ec6114618644dec2eaefa4e1e821bbc0926131f3718598451b3eb686d9c7aaf4b2613408c2882d194bd645dd2eeadea40ef39cef0218891445cdf15de9bd3268c20624dd22b670ce6a29d1ec2f568156bfe2b8c1802edbc5fa9e4c80c62d5a1430b23854094da7811d155dbb1114608c146bbec4f2d257b3f00a630328894881e35d557713f8784114194ccdddd52beb6684b890a343012883328d1a6b144bf3b74c20820fe11dff6a59794ca8ffcc1b4ee0f276bf733233fd82194c7cb119be1b47db8757f2e55df78de201f6a15a931cc69768aed410b319bdb389ae36206ef984c70f0487a308379b80e1554965d4b7cc062240fa67041671b714bb93c7840a69431b3bceeb628954c46eea067fe898ce2e322c40d4c61c40eb7cf59f42deddf395e87ac92c7a8fb252fb9964c263dd2e8f1c3072374684ec4fa83e68c9ea6643291c4c81cb82c37ad25373389931cda945b51f13c870900461889c3657d991f9fc42c653820b4842e71b527f3632593c9c81bd6b8d6d3da1a327e8e1246dc80fec5ded34a223f05b5015317fb216310233d4d851136d4b9aaf1d6b2eeeecf8491359455f5bcd7cd742d583299f890808d08d8c0218108d848a3078e16dcb881030d923d8ca8e1cae7235f34a979d96928834e6d391b53f23d303082864acfd7a47a550a152b994c7cfceb68268307dc6332b9c0c819d87c976a7e633c3ffd8819de74afa1524a4a687ca40ca9109963e560c274ca47c860fae668ee757ae39e23631811c3481846c0d0235f18f1c248170e424bb6077d16dd4f2569f480478f33021085112e682576e6d51d1b3653826332c9e1ce93098e1f65700f327e31b285b49cfd678ecbd1b62d994c70987187112d8c6461040b688c5ce1a4b7d28c85bf19cf5ac1ca31fddca81e934bab6049b1286e2aeed154a8803221c49e459d2d6d995146890f0aece0073f00c1c8143231efb933f4fec7b419397ea051823322852a661aa5e2ccdeae9128601fc53e946b8c6d110a86784e61a3b7d9c3f504343f0637df242c98e88494eacda95dd31869426a1654a5cf65f1428809e6943a7f0c5de9ddf5124ed25f741e0f2a574a2a6124095509cd15664468ba70072348e87f2cc7378f71b4ae621839c27a397fc5d1a64da66504acc4e7e8569327fa1f2982e9c38be5d49c9d0b8d1021d550f97dffc4da66189f874d9b6731a9a0ad30cc0f2b1ff4a8aecf6a30ee0e5f31c520b2741a18991c1d2d78d27e615a7afb9fbda0de2a79a8e18be67cc5a37f0c1f7b31d14063472f8cf2e9c3afa3872a9d92491adc830c1b363c0436fe3d70830d3578919689b3eed241e794964c26386ebc8ee631d4d8c5a22e5a69116b29378b460d5d744a4bcd8996ce994b0a357281c8a84199bef8f4d12f994c70d1a9dded58df68ab7a0bad2c484b1d45597a6c51a3166696adf466da82f6841ab430c71447e9bf91af904b261330d498851f457a6efeaf7f0e66e0c60e34ac50431655ce23cdac9362e166914199f08eb6d7c3025d99b488d395c406f92bce9a4f07ad18e37e0ab9029d53a8aa98c2f5ebd98ad73fb3372e759049861569ee58698b514f8bb244c7193556a1055d1e37c75cf3e755c1d5796fe546112dea5414277bb443a71e71362adc9493a5ec8fe5253f454907a9ee39dec9d1d914ac0665567a84883db914861419f25abead364a0a2b646a2feffc12ed8c42f535b3bed5746b4a51a4d931e3252f21dbcc503097deb27267ee4f1a50dc61844c9a2cc6341af389356532b1fe309672e889c27dcce1229bd22fec449a7b454cd39cd862797bc6ec06add984a7e13dfeaad304574ac8dd512a9940f5f9c7ac22d2dcae92c90413e70d31a1aa427a56d7a3c6256c7d8d5316475e88a56432c161460d4b9ca60e8f76b00ed6808d1b94e16300bc68753dd9eb85feb67117afa5942e3637623ba48b348cea385d0b6b79cd4517a4c7b831d596a7071709fd31a6163334ed798b8250217bec427334d78301d8a29cba2e5774bc16492d99ff5d399a32430b83c94e558ffa2b6e9985b71fe3c6e7dae6a01a802cf0a0c2e5585ace96552cb23af97bb7ba13b6616100b0c8342d9db4b06caaf70c06f08a764ba6b44a371355b9824f4bcb99298bd9c85506d08a45a9ab12317dfaf3c38ac4c459c694dd6c83aac7005651caa06abd4b54052363dcc5666b8490a56275712d31dfa032e573a457810e06800a65d32fefafa728fb65b95c67078b650f06600ad4a7a5e73856713e278d1f010e06508abac24f77bea7cb34499192b1d2b48b595d4ca9151d031885965a3be575c6a4b4a248f68d88173d6186c28a2d2528cea2728cdea139bb5d3e7110ed7945a79ccb79fd407c8619391880272e9d4d5f42c4e9534a9dd8f46b35a736f1c94f9cf8746ac709f9264e71c63c9f8a9fd335c199efc6efef15bb33c1bb48bb8dd953a619139aeda66e3995cade4bd459298dcc312e47d31229f9578da5612183a912e6a8d97d6bd4e7fd1225ce9349e5cb7695c49726f1457dcbcaac31c92d49a23ccb532a53b44e971489c553caa5f855e709129f0ed2d4f27c9f283da2ce2f96db5a6bcfe4882c6cea9e49194f428d504b97f2a0499bb7881166d7556e0dbffe418b40576edbb88a315790225cf71271b1fba6d289e837cdd2e991d12223a250a74226a56494490fd185cebcdc972733c710288d33215a7314310b815c72d16c1e21eabc39fec9cdaac54178794fb67d552e888258cdca638cc143a703a1c76ca24ef826551b208c77d7a43ef67fd03b06a1de7250495ade0f858d352a97d587d75b933c8fa78259cf873d698ae7532fe7ff1e10192e99acae18c4ae07fe3ba5b3cf4c79cfc39699f29527f1194678a85a7db7fd84524bdf61d7eb3cadea26dba16bb9fc6925cf2b5b8744755ccc3145f7553a689fe22521f45345e7e0763cd39dcfe496470ea82d0bf263124f1b138763ca682aad57ed0a07cc8258f85b8af0f00ddca58ddd1ef2213770aba3b4c45432d7da708a56bc0dcb756371366c97f5ea4234475f83f9c4984a224e966ad0733a0d963e67bb4fc3713284ee4c493d080d7586cc39e3b4f6f6339473f6d30fc23dc89019ec9c3cf7d7763fa8cb70f5e80ad579d9e36438c698afbd1cd3b131f0497e85cdfade292a064dc6ff8259eadbc3e0854b9daa74b89439604073103ab6855e8c7ec114f3fff3492fac355a5dbbe9026b9fd546e74249b97b4e4278120d6ee1a876e2ad31664f6bc14e42889b5958092f0b9becf65e9a8e9ab07010ee95ae41c9946257c8ba6389a57e3a252b949e36f9cfeccd5650153eebab244d4f8592a6f4a55b9fc2254bec6b5cfb432405c48cd2415e639cdb51487ea99c6356511966281ccf84c9ccf60965c51c537a693a4ddb09c714a7fbd4fb2913bb09069d29e3a69009a87996ca9669afb484b229192ef9c650f2290171e2a92a9e0c9ab1247c6e6a3bf574d86c41425283daa062e6c37f042d86d01657ad37af36c222d38753adafcc5311b0ccd197346f6dd20088605a5cb51ffd3072b9d296cbcce3f5c2e0c6fc47dafb7ee9c1d072e4947ec67abb81917b2e8ba33a67d3f62ff4bcc9e5ec63ca3afbc2302fe3a79d5b94db0b33e8d2a16764d014e505f26563ba9e7bfc8777c175e9dc27eeb2fcc3ba50dcd2c958ecde063917a9bc39081551a5a9312e9c4bebdf6472492b7c8b6444c57d34b7ad14db628fbf9a5df2cab2a916551699e1b3440bec9386ecb1d839fa2cb24cbacf54ec7f8e6491ca974ce7d04d9ba3589cd97ce3a8fcab1082451fbf643c9973eeaf5f510a993a6a595764256a6be63b8c655bb157be322f15d9522e2bce947917a6fb36c5ec2a4a96f7299b684d6a5955143cf526d98ca7beb2a9b054fb4ba86a51b186be454f0fd95f3a45bf7d59679f54fd37053efebb9664f62f7929bc8cb1721afd3e22440a43876be5e8286c9d8ba27257c65c8be2564d3acfa1b864dd5e67150028d08b95559fd9bd5805f089946c3717a51f3dbd2a004f384246dd4e762211710f9abad333cb092b73a5cd5756587613a9e95e5578aa978f26d28c9e529477f65066c20ce282bfa99838d73c8831afbc9ad14b7cbe1f3c26995aa2ec11fd95d274b7d24aaca147e894a5d34f89127bd0b01daa954f972661eaca660b113ada4b4251c14d9bcabf5b3a12e8dbd353e9fe965a489c4deeabbe4fc8bc9e47209492794ba8dc41aac711e8b2947e948ac9cb9c4674417969876fb6090f231a0b167ff36ad2a93a8b28a736f173f924e3491166b43cf7561e74f6139190cd8a232bff7a8f8846dee25be6f4f9fd1046d15e7974a7b3d80dd1a81c56e9ade6935e085faee46c724d737142a42cbf6f5a9059371a0497d7f26eb6a01f468270d692784bf6621b0ac4ed398f69d77cba8200517cb553ba496d5bfd876be4a8a6a05521c37e3857d2cd1a2e572adc874f868e05b19df5b27ca8c28a909693c814a37bd8b4a9cca0533ddc5622da2adbfa67320f57c66497df74ad8e8987422c67f1ce254606f30e8b5f079d435a1cd1a51dcce66e429e75c836a920659385cc1d1daccd7e16d43b4e757328da674cd52aa74c93c34167e8d806d38d57c6c1a064f0de13f2b2a6120ebab6acadc6dc9f93de60b8589add2be9a0f36e382b8758b4b112ebdbd0c9d9b051d7e2579c0dcbeba5bd135ac3251be349a7651821357cab298ad59d86c2ef5f9039a64fb568b02a6e7b4cb39aea7306d54ac8f5ca8d194cb1e389f30d3a8969cac0ac8d8a467fd121346438ed7e098fb3d6b13363408fc70d2a5f8c18cc31fb3574731c7d0ac36325277762348a1e0c889bd0e96fe35ee95fc873a578c2fcd63ee485e426d5f1830959f1ee42f9ceb2cf9e5abd9b0b57d9c9c889bd477b0ba7d393de5a4a65d65ad8e7b6675ebc8256b370d4f11c1debb2a2070bf599ad6abe79b79c2bdc96664e29255a2119b62ae9ef7c1a935885f53e77349983a8954885f2bee8becffb9c313885b2dca814ae548f67500a7b25d1f19bc3578b1805b46b4e83c6e91c11a1e08db2f11454c8584114c0131211d2fd736cf2f350004e50fc2d6c2e55eb19430134e1e01f738ed17a3f9a04c084b2cc44951add987d012c0195d16b3d7b595f1780120e42a84f9f3d4aa62e8024581544ecc91efdd0058004f367abfc9fb0d9b0008e906533b51ea1d53f1680114a6bbd593edba77c055084845608d9ff24c7dd1300118c1e357fc8cbe49bbd61a0d664bc6c96ad7b3d6194720cc22c6ecba6ce05e3ec39ceff860dffe701e37c5d6d5b96498ce67e71b8bc646ea93bf63b5f98328a4a5d2a658a97eb05aa33a816d3589e29c78b3c6c34152baed6566e177e6f8f54f7795deb7461b053ea64a47765ea72916cafec51bb33c91e17f5ff68abac96b3e56f9150419c88d2e176775b705932efd5b5b8bc63188b9edb644b0b3699f89c35a64c576771c5acd93e8ef2d75416b96cf9297111fb9d58a4457a460f2a276139b0d84fd3d4e906d33f5fa1e5a0543fbfe68ea7b9c23739f32754f011a5b5e2921a3fc35d27bdd358f1a92ea13b87d5968dade2bb1bed3519eea4c65471a564953a8d968ab6e22d85529e2f7f860ab46eac07bdcb1f9f9d22bd3152477e73079599a20faa495cc78c0da752685e3ae9bddaa4b24e8aa299bc2f6dd274e7a3e03c5355b65b5b131245579943a86bb118a25014ce5f63d0695058f12ee7cce1733cfc894aa751c1a205d96a3d51baad2832c4575ced0426cbc3ff7a348e0e274ceb9de3c7edac7d36616fd8f4e2a62dcdd4c4f1e4bfef4fa90f329930cba56afe249e39a660c2cc49c89c26f6941ccb25febe4ea9d1e462f48a257a1df11ad433898f954a383b97bdaa2a94a8c49a9cde9cf3e7691258296142c54d41cc2489d26dce94ccfaee5224becef6ccba23534b90287954112aff8fe0dcd6d3c9d85ce17704baaae57ed4c7ec7c23329ffdadf5f8267546184e0799b495ceef68117f8b868c25d3ed458ab053b634aa636ccea2449827d64969ca1e73230215cf472c567f8efb10866fcbb4f9adbf6c43b8a25a4577d4b7d6854873459b5b51254d4c083c274fe1d372bdcc8338e81995a3374af71544a96ab63595fd581b084b3634c797d89c5440dc33ee1a33fae9a4f38762a7749b5237e477fca0bfa8e45a9d1e54a70f6813be318e3c4b7bf2a1cf5aa1d4b9877454fbf7ba5b91a51e12b6a1c694ceec99c9c31664c83229765d413c24c45cdc950a153d760754cab52ea7e1aed9c164e2a30593c919c30e5c0c8de92e05fdb994eaa066bcac51276372dbd0e1b40d37b1797ea4bc73b88236e1b137f965f420430e85deeab20b62e9b21d076e94aa256d19e385958c31e0b07a46fb0d08cb14d56d444b4f5ee286c644da9cb6b92ef54630461bf6d149563b876ed5870de9b3d7167ff551a35f433157f78ea9941dd7523299a4c1a3c70f1fef6a6844c653e9a8dfb166490fca4869e0dc728549fb98bd361a4eee2a9f3e7c4e27639c41519aeb4e4f4bc68d1fbf821dc30cd9891326adcd54ff5c86724ef5478d2a6f29870c7bffe52cb2d3a5d3a5ebe091c303638ca1b0fa7ba5b4ff8f89c59007bff4a8fb71b5e5b1a38c1c1d18230cbb450d15c5a479c955329968600c3028322893330b3a8c8af90242a5ecd1f7455fbb2ab1c0185e48a918fd695b19cada2e18f36f43b4c70ca6943848c08536c7bca922becbc6db82163dba29d3418cada785e36d50aba7e6637bcd8279d9648ed5dd7faa5838695e8bda6196ec42577047fb94c7b314dc946358e11053b22af5973c8df5a81430030249180c040281401000048630386f00d3130830304c248cc482e1a0b28b7a140000403422503e26202a1a1016120c160e8882a1504010080342c15028180c04434a41a4cba9f01522210967c753dac63ccfdc0190fca3d721ff840da09580b7e8038ac78f8f6f1f8f3cc2e016f8969b6e584d61b54f98b8457f92095345895657f4f7ea8fb49549317603673eeec8e34dd9006f5a267b5f39059fd937d0e2397b1b7cf3f41f6a08add4582cbde457eeb35adbccb0f001a700b67b351a5b7eeda98846f414dcc05997257af76db0d4a6b2592536b661404dd5c08aa382193e7e7f3efc2cbb27b038d38316c9c0626399200c9aaa3eea8170956e4606577e50be039b91ec46dc588821097ad5739a2f634d2371651660aae2d738e5b2d4c4dddd29ee572b9abc1553137c030c9d4e4e81e1475be09ab40d9b64c5bb2bafaeb025a830982923da63d9b8665a60ab3916a897f8a4763ea9af605920ba166f3279b7a7b7898184697689b7b3113609530684a2af59a970927d8cd063b16d0b79f37d2aed6897ab9972d5c6234258cbc6dc595dca47f38c086173891474f1b9163dc37dba26196da1a709c715d800c95332f4cd85045b422814a2f5497b4d409aae7feb47ac26ee0bec0f389675f920c6c1f2896880864fec06958f401b6d6e19c4b4896ecbdf5dc506ea1b284b41938d90bf64e1a7b9522ccb295c53aae5bf0cee9795fa2c76c34cb58af0cb830fde2a7ae9fd655a6582129977e57e28eb2e6e19e12d5b14f23b09a20bbbbd4703713de0ba9e58f3260c9fe320fb6eb93f5c1ca04c3533dbb8bf49a4edd0258d6a6d49e95553843230f5453d436c9e7ea090c6a20ec8ac33a409ab0d6ad208f65a30a69996db629e05f6253e1bc1785e7f009d9acdee48e011d37a40a211e21d5833f50d99d41679e36bcf283635e018546ac007fd4a925f73abbadf3a8194ab04b2ebdf52362f3096cd9d0e74f6ae42135829873cd4696c67a53ed42b64971b48bde97cdef0b33de30e1564fc5608665995a695ada8b8f6f2165cb17a85945a4541a4186df9fb5d8a8a00eb88c4b299d380cdd63d58822aeba8846aa0ceab043fc53b7455093669347b2ca9ba4bfc9cb173721468736b0c99d0eabb57aa6e85448955233b049825a0c9164117f103ad55af69d4d59c82652c8d842693c2ae16ac338c69ab1b64aa11d6c34b3cb4f0ad1eb16a356023b6bdddb36feebcfecf0283c1e38226d0448cac343e2a0674bf1e2d6d68784e8bf1d0a8c10278f1ad69548d247079f5d1e47739b66e192f1741c7382752946118746029922c1d31c0d3a7d9e006d1919b3c9a6afded32b005050076921fd009bfcf2a12228e30aa71f399698c1430c810bed2422bf8e8811c0a6b00ba236902c0fa64d382fa6d143ad56615dbbdd334b06fc598880c6be66fd8625ff637a3de86d4e4f8d014c4c12d12d90262d3d8791ab055066c3773481703eb321099406af312507d9702ee580bf48cbd67f923e032fa8819608c517de31ce3e1b568081814457e3623be15180165f9a66546621d76402504303e1cd2ad7e376602e07d28ef19dc23ab5092bbedc7743c0480f1b0efa02fcdf50d92f35851a948fc97ae644f803cd08cefdd0dffab9774c1b1c33a0a608617d160fbd4a113e82e6ddb4fa9b9e157191ead41289892f6b91068958cac29e474f7d9be474449a5603345099cf4147a6c08dd6673948052d75261c58beb1774b6b44aa9d58cb95c7ddd36ed92feb289ae738f5a05e261f9a6b1e53432d31d8db90255fc151a7c646e2f21cb81119dc27fb3178746c9369484f46d0871c2ec7d683f19672767fa969946cea09fe811b60b45a975fd9dc87da9c2f70b0021109f7ec25543e960495572d77a3a0187226e997e3afefe910b4bdeb5ee3298b8b8047308e9f6ec784081b48b686bb1adf74e8379656bef7083326d9edc868d21ec61965e84e076c28e88a4619c77af4d6f745121f9f7c84ba752a51ccda1a4d309cf7b4ffe49ac8cf421b7183bb9ecdfa3b3b4cef055f0d8da543f1db525ee203b793b6064c448c2837e1aa554000927adeea2ab29a7c36b2bb4969c5050efdc7fe83293d2459fe194b11a982d1fed86bb11addf281aa23d34f9c48299db3b007568626e482bd1dc0b571e7d91879127dae721c2d5431539c516b37676ccc5ea47df920962952cf61cd4264b4d5722bdc269a50ba6b2de94ddcf56f3eaf74663b9cfe9ba55ba556ab16a271d7fbb42627d5a4ecb79d6ce9af72d78a58d9de9875b5c934dcb63530a7d0a9f7e8fc8196e149d44f0934ce55b7fed1b3f438688dcd5c2b49e10cd84479f25788d479cab93398bdc8a2838700abd16f27db0607e671316b81dc1f8b907972597077540f2789e7f907bc6abfe2c41cf0dcbb39f6831300936310ba404408ff6135b6b7e64a28bfd14c0505438a7682c7d8c15ed77bd70dbafa5e9c526fdec74ba8eb9b712484d70c9e4704e4dfbc193c13d7caf0fe6feb3a89d1f13024a36f70c100909f9b32f12ed4b3e386e574cc978258f2bf5534c6adc47de8c241d7b4726eb1dd2ba172792c29462664182f0d00e58508e13c9bdea11244b65defb752d09a7868565a341b02f39e9d7bb92f09c6ba51f2964418200648219bdd22d7a482105ee8b0b4cb61810b4dc71f6b54f685b6328b413161b0cd00a42433cd44a888df9f061f6666abf56446bc0520a5ed512ddbb5846eb5ceb70ae59e52f3ff5d35cedd9b191807a30d8800838127ce7e5261be75ad534209b8c3e83bdac2b2e58ea760dbe178f45d59a17f281c328a7f533ffbcb78c6269d89b1dced62da116a790e73ee728237dd5d9d0ecefdad4c0e240b17fcdb0737b247b006c1346a5737e7772650903c643f01de163443d8f011add85ef0150a5c681bc85a9f97a343b57e6d0d9ad919e849730d8158ec78fb1c25a185b993c24f3bf2e6f9e530317046b22300a69fd7b106db37ee1fe3f72d614b888b06b11102f9dc003094f1ae305fea58b3e8dad7c903a2ea3c36224bf5421d11fb2e346ec525475528ad4fc47d85fa3d7133aebb0c274d7b060ee8d1eee8a07a3117ccbc523324185bbfd50807d053ab8e09011656b5167b5101ce77c70e485fadc3184c4189c1308dbccdcfdb2d0e5d67a5effa444b6c0bb04869545bd790e6669a2ac3ce4ec446653051e05581bea9f41115c9986102fb5cf46e5ac06cfe8c6d86758ed7986ad55263817142347689556de6b7a0cb9bb9265db2ca25d5d8a256ea127c8ee36fcf398ab9e8c784332ad67535eebfe80c889d7f6ffd15443f8aed8e0bc38accb5ff2fb784e4e44012d012d0e2bd761d1f8d84e9d92193da1fdf8cc9a6658eb5d9a09a624ee3c55fcb6a12818583fe34db9f098963928bb2fff578486fc4f4e1b3e5a088401482e9a48bdfb26afc53bd0ea0218dee9316a7726d389c452cd8fb31e6275901d841a47c7d67f74150d5287a8371a6717a1ef5bbd12e102467a8b4ded05a3981306d4a6bf1bc408d4a9f2952b76a0b996828ac06d205069b84dceec198b0ec59bafc494ce80a443331fa5338e7cf1b80db78875f8ab8d228a694c640b12a15fc8f829228d7de2fa6110c977516a213ada31c87f50bcb8b4979305d0d653691779a5ac4004c51d8b90ca757dff9bd307f24e1a4b02946bd77273974df4d26e5f3b594a9e61b893e5b47a18167f7f04f225ba28b393d2916101135242af96c693b21ea5af488ffaa3b55ad3110830474e7103bd5cfd283f8de268a67e26272069581865cb0f4d0b7184a286930a0848921893dc0e87de597d959cd596e1b8e3ff862c0b6c3dfd709b71e47458aa127d11993b6bc9d12fa7cc38f594c9ae799c797bc0ae52a261e5a07d60ea6a351d66600a054a820b47faa797b934377d088caf52fa41c3bf45f815675082ee3d8b6266f0e8392ad66456e22401d44a5914011eb11d12aec0d8c84f4bd3e0c1850cdd6655931238fff5932565e06b772906a91d619946142809793dddfe1859072a22196a22da51ff60b4a71b2f90081d7ea4674fb8f0f36ece4e9b69d4005cb31fe8ddaeebb88d8ba0ba534f82df1f9155178db5fadd19af12bfe916cdd1822dfbf14f323bcc465844a9e53cc0669270a8ca6bdc727c4234182962ce34888f2d67538041841d655ce8ece03a913d40c1efb23c5ce9ccd679296afe49f520e3ecba016da1d5abf6c36a8dbb28d62a4f78b0ec237c91e19cd0d55962027d15a35ecc7aa18e613c540b0a1066c37a105e675d6ed0c1f7593f518e8d428ef404ae3e55f41e92e24b9b93ca62e4e3131de90b97772e1f84ffaea659df83bcedc295331feae5b26d5cd24b1aec93c960a2c747c401b3bcdffa31f02500729d3eabd9603c728ae4d185eec00355a49fdca3351e7903171e9d215a56cde820ffd7bee37663b11e117467c5190831d146280c0d4d7d8b66ffa30e016181eec007e72e3b457b6d27172b8e07ed92db98d3711b09ec0b1e9bc51e448bdbc33464b11d61cdb1dc73680b69a245cf2cbf6ee661311830e057181775306bca882ce260703503e2b165f0d40419472824ed2d86e278b716d9230404adaf5bb87ed3b1b30cbdac1f96381ca575facb50304bc5b917b30bbaa04bec3dd13ee9034fd04b92489264daa518033d1de5f5b02fbbee9e1afdd96bb231cf5266f6cba8132cc841a2344671ca20bb1e68ee3a4e7f1b42693b17476c0f3c8f80f7e32993764a08c701330dcc412eb1367ae0e42d97bd0c301d1ee75d34c45cfa34b2c466129e03534027bd17a9b8b65f328f5edbc8f01ff0de2346e022eab1fe63d212a675f29944af4f5cd121593f7d3db730ec1d876c034d0291093cc7359c6c2fddf077cdda7defd204dfa7b2d488f28ae543b8474465b36b4b0893de434592759ae491fc4cf8b743242cc06e578f1caf17a4c795d641c4349bca0ff3c9285419a30a4dbcd032a5e4f0d171cedd51fa752c11f1b7e673ed5fc5783d012cd03b2b31ebc792fd278c74ab14f781ec05d4be3365c308e00ba31f9af1c037a37045a77832dc68aab3b9ff7cae1a0d36810dd6c1830732d19cab19c795e83381df69217b2bc085be05336df300b8c1434dde8aaf1f2fe052fdd5830aab01c71ce61d6acaca8fe81bfbae5a9e02b290c74b0b1afdc31d0e37de049ba7f4d2a3778495fd8f9313678f28b72122c71e8d1a1d091122b4c5655954f85e05807bb996ae3a94de2b797b64e11216fed0f3d0def227348514a59c0f9d0b829b2baa5951412ac3fb993b9ef529133fdf462dd34c25cf5c45d852a990b5996eeecb46e05c9b450eae46738466b32edab7740bebcc10e95ee3d804ad07dde99262832ab32a830b5af4c13536c7faa79d85b774bed09ecf31c690a3b24848b55c6e6523814da78a8d250ff7fbc26a3ffcac7a924d6541ca7b2c3aa217d3b1482021b3b470c0e9eab66564ed5fba56b8daf7602afceba90c762a4ba30e1fd3ede7aed985be8e6668566f8f38be20db2a4e6668d7f54dcc20880159d95cd388dd48d12cf841cd528c32c761b318059a9d18268b1a72e20c02cf1dc8f8d5535132d8750a884e989052887c41954a860d739f6e2143238726cc0f8bebb0c01c4ea0a1c23ac79436d00e0fa927154fb4d08b46683d9ea935196e3a6a36ec29ab9f39b38a00286244b4d81f58eb31d4302d907f36513f82cf79ab7f7defd4dd270bac014d7f1e7c5fa2efdea60911fecb23fcad3767edf7d7d7d6605f23c21de2896847442ed0cff3f6cda63b2f659cafaff0878dc52d0b4fad0ad3495bcd6a973fd8e69289200c35c61c576bfaaafed92b72e3319e1ef22f9cb8c8fddfe2bbf3ad6b5cff23ed35b689217f4dc6b4a4bb52d1dcc47b4820820a5be2adf3c2a80851dd82e709283d87cde996ce9d17278afad7103be0a429c359c86b6f013c864fd9f4c0c5f44a0d9ca348d2817465ac114f2c3c6ab014ff2894e4e76c6b0a70a697de725abf46dbe64cf42294877f57181ed46ef537b6898794651ecc142c12619f24fc395a3071ef911098a5c6be50cb6b19506c3c6883703bda4e00189d33197c7d8658563be5b56a316048600c81607cbaf1210bbcde9959ea715721604e5e4f522ac9fdf156fa27c91b76af449e4a2cf2e793f402ac03b9fb16dbdfa5e945f5526869880b4fe70ae3c051b29aa8ea34394ac93272062e6dc3ca1833894c76ce9a49e61872662e91cb281eab2d6ea6322d89b167e637a2e8a3f2fcae7b3ca487e7a6db911a1c2c4008b7a59e077f6fd2d2f3ccae2699e46bba905df2256ddfe9c7dc3279e629942a4c2183b42366176334e963ade2e3f5c53132a1c93c35f9ac2efbc2544f35b6f83990ae39897b0cf709379a55d30113b69108cb0cf701ab4102a0b9e1c650003238c2cf9e73b742b6afd4001d73d7761dff0656e18ace510e5b7bb554715e5b982f9bb19d749141fa1db88bce1b4c70d244b95e4a36af439bbb03c885ccf9f7ed481c7dc54cd2b56b0ff0ab7e06c439650645a5e2cf37a9d19894369a6cd900a18af9e4d005fc85c9313677f3f6d15e44c0826e161da9304d0a3331acf0f4ecd17ba7eef8f1520d17614b761ebd42016bedc1bc39429e7d7aeaec4fd1d1b422350ec7367de3f748909d5f09451cb63224939490b551d16565ba20519a507cd48e2a645a7d14ee79f4fcf8f501df900a687be36c741be53adec41b215597c165b1e022c4b1597d9a7755d13ed621f700c1b593920b0e7490ab34d0bedc635a730cfb5f71ca9c119154615526e22db3f69eb983e5ae469ca86d4c58fbee25a8c6ad27a2859fb7c528e45e4f3906c7c68449d9acb610de658e4619d27162875e8ce0e7d1fe945f0edf1fde1e3fc600ea05d277833cbedd2a9cb3bd8e14be3e628c00ebd369b0d656df43b7b9482ddc835ced6073234b2ece79e330e281a530edd51397202956c2fe481858a4e82042d5709bcf491a343593cabaf23fad793ce2703e10b3a084a004592709038cff141dbc2f5fcc897fd1cb292e78dee657908939d8d013ab00a26ea45eb5ff6dee14bdfce72dd1da95bac40a6214387b4f5a2989f2da51ea2ae8c23edc22c4be366910ad6da102a6a41d6c365850c58dee1b5669a09df3406c4e4085d011de4b1dcbeddb5d13b6ebd5ba5e5d9eb07718e4e19f439b8037f1ad86a9b6d5a557eb2a8bbedb3a0ac58be62f67f96ea128e97c0d4799025aaf9479671b90457223d6c5e6adc8b60b6c095c79600d28323fec43a5303f7d215b600d85df95ce140223019a473ebe176a0f247c846c13a83bf1108fdcec53bcac6b89921aabf6a93142882fee0951df12b2dadcd04825f7919e0a716d34a157e5b0144c48e8d1205c777151e1ca337707507b64489a0376a707569ccad89043798448cad1020443102e21d4ec93e687a259601cfc58413ede575f76e4bc3b8fcf7c34a7a990583a46ad35bd730c273668b80d0820828a2cda17ebe29d76f58e864f16d12e1f127da36826a7ed8dc80a464185860c97beae51172739913fa8321a666676c46ed1ef42e763c7dfa60edc24a6d1e713143b1efaea2630a9aa3967dce9823ddbe3b4176809273b05882d66d70dbaec0c3a709934210e3a3286b79f8a4938b33e43618cd2cbbd81d994efe4ebf7d7bdcb4ecf00f80a0b48995c1586bab51fc98cf76c4d9ddc94f096d5310a1f273547ecd2eac6b63a4644c9ab4b34f4a3a3766bc4bcbe9a084698ad7e71937b49604efdcaad73317e011ff70c99e8a595c88c4884ecb8e330c664bd7e59daac2525d7807893ca9f706b77a7e3e276610255995ca1e3a696d5bea0f7fd78907cbc914a7f55755c809ce599648af9c1c900b5d2ba46971a78f88f2a5600259f84910124d05447c934425645f79e2a50438a0f64a9d35bf9a9dd1c4a10028d7c7683930fcce826e74e41109bf2189a5687247613f8216c323996dd004e47636d756a0be34389087e161251b9e0dab7293097f01fcab1cefb47816c7d42232ca484c91eaf5cfe37dd85c8af96e5e09eb347f0383ce2f33aea1e823dc0efa1d3bbd26989f297d4ff33115e244dc59b1e2b70a8adf73ca456f745826738722622dd863ef8cfb6dc11be97855c22834bece89d5885fdfb711b4a51ead5e02d0e8b9d02b064bb76e2786bcdf38e77a3fa557a4b9067711a1c4d13ac2d8d55e0e485c04533199ec91a81567f09b2b6b95497ce3286677da8470256b210ac76f39f663f55430abec6bf5d54adf95dcd0096a9901958c67110bc9bb9d2d24afd3d1c20db2dadc759d4f24660962f32eb219b5ee3a0d1805a49be0cf54a524b81a6212b7763c80103a3cc8083eb9776052b188fecc86e87c1772a27d548f54f908177f3548a1f458eb064cb3af18b259dbad3d8ce1caf82ab05984d76691edb466a601e0a87288f64a661d75aa4f6432bd202d9c3f847189889d4cb8c1e2df4108f5c84e4af5f43bad10a0493371559b910b48de77232094708a2d1966bc29d804c9ddf380b1b688844a7321cce9d1753b1f8ea5ec1a605a9767aad0d73dc228ac13a11f699f58c444224ecd6d1705098764184843c86560775849fa03973e14231f0b6eaa482a024078fd9b19b9b1ff8149554b3f2880ef234e8b8e492632980c33b2ad6d22106e6aa852b6a7630b9267e342b4ef35de8a7b2aa9802a25001d95a71386b5a9ab2cc3c62e8c0a980db26f0c248e00ae18913a73e0d9ee333dc0838d1963f54c79670665b313b3642e4c552b48d6404daffa73da268d36ab9acd33e91b3dc01568d16687bcecde2156966efa807581f035159618c90edd73e036fcb8bab4c66a11bbfd04a252785fc8ec0152b034512809615c8679140cda4dbdcf378db14f44c53818728c198e85536b505632c481f75c48857d4e5e159870bb05cdaf6f3915cbdccd78f1a976cc995d07152392d68057af1800d39c92b9d084188afefb251a5e5666c46ade28471348ae0e9d4d23ae7b30f47e98dc04bc0724be483e149e74120103579d1d1a1442d02852ad833dee6c5e0416d364d9e246d933d7deb7bbd631e471c70ae69dc5771225c10c55845cd9aa7b887e8f4ec80fab725275dbb52520f6103ad252b065a63538e680e30e9023ea0245b73e8405b95c8a5a5aa036bfa0fba2189790ad675a6e5620be79bb307f97f82cf75b5ea16fb38852f00ada87a9b10594af25fef0b19e4b9a362c6d207f854c534d2668f084c574407fd5b73e4d09dbbfb0458e3b2c1efda3252f83f60903f4e586c2093eac4f5c454cea0c8d306d3c4f5f3e6dc987be1a6c53000ac045d47893f6a2b0d19a25a258778b127c6245c764a62e11884b107d2e4455513bce730af824dad69db7030fb0b71d68a1142b996c07222da1a3a8c64852577e8dbf8606ca501604834f366ed8563f3eca70e60aacad176b9535f3d83ad83394474ee1b2e522baa9d836828c1ce278feff60d5054c870802b575a79de2ca13b00c8eb1f930014d94cd833a01eba02419fa144c051e39567664dae8b0ca7ab087fe9cf40f59e2984dbfb0d32af7cf5a427b450d430a59dcc3270620397d6b77d4672c8f53b026de1ff2bee37ed2da6c48ae8874c036522b923aaefcf5bd8160839581ba9816abaf64767ffa4080e3d7f45bb5b6fbe63b4e9f23e71aadc88b014f529d6ba84d358a27bfe94f6a54182a8083df29e822468ee704c60f988e234d3c3c1569341894b362dcb45ea3a1fcbcab8e79633410e5f8cc1438ee0aa0b549e7f3a53b7e00c39be4ed9d8899a12330936748a4ad17e284f215ae108c752dcc5987035b70663c147692a035e6a28104aa2a427ba673867f03d7c9b924c5de25062c093838357f66918230edaf290380b1a07f3d3679a9585836eecb495ef35c4d17f210ffd301b7e4014bfef62de601e174e01d99599d0370871bc6d21b6cb673cf054f6b5c171721bdcb81e264e42b6f99ff786450666b955ac6fcc3570162f44dd6104458c5c2b75893985b5badf914b5530c2d2c05d3f761a721f62b3f6fe1502e816f05a3eaa824b0e20937e7067518392efb14072101537623349a06f61c639db1d21d48f57659ba1addc515d6b42c6536be761fda5952b52850c24d13b2f0f2785b60b8b353d955182319384e9e4c04fe1b10c099e0bd51e7cd1acecab0305bb32abe9931eaa42d2604a649570cab694ed558aa071e87484a16240e4c5a33775d2090fffd032e022b90411a393cca1829731acad9dd53b172fe98ef3796a23637586272549d6a1cb7fd499fb49ce15e6395b3077c5f5784349702c2be81ca13a024034985624045c8d6673e46c129abe0542dc00f9f55edf0d893f1d84c1d0d145a8a5925bb3a6d21fc415f81890f11ff4ca65aa604c469082ab26e8bb7f51ab2dd001adddc7cdee23c702d0915f5d6f7d8fc0be242b9e418d10fa6bb583eb94ca6ffd08def5b75e37e5a77e414f63ddb994a1a0d2a3d61d564c48c1c563af96adc4c35406efd9875d22ddcb16a337f330b658049600ea85f9baa6acbdc319ce781bdcfc86d6caea63defc3fc1964e319136e99fb17f23d6c1e97e5ad1d5c772a517f045ce0a6065f094f872f45578767ebababc46b6e6d2e8d118814b4f7a177ddee553c340823084488eb54c90880f3b5446430e6a87fe30b09c4eb5f4072a4d36a99380ceaac6db1ec175f302d1a5ed6f179311139fe97eff6c538909f21e1b919ea00df6530beff2987d0130a6047b5288ec907f8aee1e2ef89b1158782fcc892a61a40bb9fde9a4d6d55730493dd1c0ad2067074048db8b899972af99071b26c4eb5e47cb359658ab3bef9c3a1511b2ec3034eb60329c346e2eef767bd09298f1f154e6502411235b89931232c6c3bb4d266f27105c3c74a450a33dd748a01bb5071b7e6d98f14fb8d1ccccf26da4167fbdb5cc682b61c1cd5f72ad0a858afdd12635b4af1199ee2d553f05ad2d55ef52be2d4d4b471ac9fe7f0ed50c3a75c418c16295008f267534c4af33564ae243bf7003f1e677657221059074965519da70234bc211459878de498ed0a05ef62c7031d9401e84f80855ac48ab4c129839ac0653e7ab7dfa0351de42800e03b160d85839ace5f6129bcbc0e471579655bd0fa79f32825ddc49093540016ebaa039c5fde01726b2d43f0e9e6c260a57089d5f9b24305501391c303735508aad9749b4d93d0cd14b18b6734fd8f8189f3381ef73547b578e60325f9fe593c158e4ff42d87baa3a2ef80ee81d826938cbd7b92ffb2247c06805c16843d278532eec12d975b845060065cfd448fbd6315cbecb7d352887b17ff8cfe9c9ebecda0a052e473b27b8d36e23f347710b470072d7d79147c5ba0dcc96abeec870def96d4ebf2f2b332b18180545a85a704f7a07286af72748cd2a42df5b7152fac4a6f2446873d415a1e8a9e21e47814b1c69da1b90ffd93b4702a9fe64f2f56d1fa51f4d4a3fc4b19c903168dcc7d5501b013e506738fd14f7e20ce3ed9e000cb9ee49527e0650ed82052724853932fd2ee92cda5bc15edebccdd20328ccc17198a5d69cbcf969ccb2fa5a7ba03bbc9db9df46dc74e2765d4f5865fe614f3cb0e10bc547bd02133669f523713c317a9461228b4679f88cef1a70c8a05975f01d03aceea4c631d170cf20b09c088279c0e3d81007693b3043ebdadc907e8be6616f570cb1cb24e8d62455f0b9efbaf2eb12b092e4ab31a90b817a659c8bf000e3dbddd064900d6efe08ea4eef68430dc30444f79821706a9a5915c9775f3f3767a399eeeff1ddb6b8a202942d03670e05039c9e8aac38c4210b2d6175463830f07e05a69f5025943a89a898cbde6b77c19922a919d286c9a3947dbb9480be7cc8fb7ebe9ce12f5cd73c6cea1664b78d862081f2060881ee7f4a3e7c6ef19c64a2d45f66ce565b45e4082e1596c9f7309e90e4cab85abcc10c795b0da68262f6235bc3ec30267e53f43fc9b6738a9e5393ce96a86bcb19b6f2c6b6a77b3d335858b3135a5d2ce75270d3364361788d961c4ed468d0f51859ae054b6b0d52ff8b8033a3b2882302bc980283991d584b6e41d881a9224aaff2c62ab8439b1545aa368a10643f5aec5eeada6ee4507b29c7d67ca251ce122e4b833387de51abd481117d924004a3caa272ed7090d48fd2a15951b22c115001b8e331aa27eccedd69ad697329271ea5b28807e924ce04e658887d047e1a6c390f9c7cefb7bfafa0360cdb60bc89b43eda58c42d796272db630cade40f9e205eb799a77f23688a83d69031d453cec4c7c8127437cbcf50989f9b3dff959fba72090eba626c77d34825f363a68face7358dea6c28032c0cf605623fa7d5938c3c8cfa1ffde425bdf8655375dfb85bd8bef0d276899a1c5864f10c177b072f8791a09c7c68f968a7c476eb84e8970ac9a9f5f0cc2db9beea5236b7ec71fb04d4525794ce7c06ad5ab6b3c900f97260e4db55e0d2d13626413ef1cae4bbee42695cb82c28a61fac41abcacad468d52c4a5b01b3e2e1da384256b4fb1dca50491c71f0fbdcfa7e65e0649eb6845b1376202d632670bd3c2720684ac9482ba9886d8ad40bce3273037081d6de9160a5bcffd92794334678bd0d9da583e5ded092db172803b5f68a9d507b587c149be82445aa909213e522319043b069196ea581725592a93cc94fd5943a111360da4ddd08a107237dc898dd83782a4d911cf616437aa4cec071315da761701cc4a17c2899aaa1c4c28ad38e3ad82885335a40b564b4f18f732efe911fd2676a061d97f932ce26d7241c0a837c68d5bc4349cb6b80538607456a14b011ce5657bc052fa51334114cad891b352ce5baa4523928b955a692152901527b756d69b25c29992aac2452452556b4044edd8420bce9199330de218a99b32db179b1cd130e6539db6c6b0329d2337e376dde70e894524b641eb2a43256299648cdb20a3ac00ab6af9da3f598c996d25fd2d3538e56b20a7b5ec7498746d49648e644e28cde342f38ac0af990268ed8dd0ce4eae2618b4db3639fa33a4cb3164acff60ddb1b574f066c93eb3a671e03319d4c1823f7f64bf024887bc2e66923b411535293ea5ea2b9e126b0dd05a11f3581d52158eb8903822c504dced95010880077ab050c795e6e51ff53dc6323e337bb8675aa59c89cd4ded6e805135806fd437319d3116fc0512a4bba5f599209d8f6ccd602e0189b93bf2b4d6365baefb060950ccfe072fa2f47b7771c4db93254a59eb20888bc46fb6edbbfe5280a0f7896092c128d5b186bf93d2a724ad4edf75096fe195a92348ac186ccebc961f9e14dc3f195a87339f26b43b92c3bd2c4de238111cee747628ff5ba626fd865dd2eb766dd74bb551fb4d9c54b6993dc8aadf4ec91c95990ae072ffbed7d291cbc2cb97bbb5b73f4da75806300cd7482471d25b0f4c6387db4df4f27ed46c44fa303380a9a52dc35948952dd1d9481522305f71606e6421e3c7d47954ab5a941aaa0887157075f7100a045ee76c95a4c1458054b215dc85eb20aa9a5302299e51a117b424c3a3049665382269694494a3f6594149b3579613dd65d6f751b6608ab020326513e47e1da84ab568c82b5a3a7db25b04acb2bc7a1e2f46720448553f64d3c5468cac6c44185a1ec509ca9c0a9fdd130f7711f1a9413b43b7fb6afe785c62fc9027cfa02de4445b50d3840b026c3013c0c3c0c3c0c3c0cbcc6f05bbb6f76668dfc945292531946dafcba654a29499928cf88d53fe38c73d08834696a193bc1fec705c60da00db50df5a3c786a0c61bd6b1ecf12c74d2a069306c50c30da798d5adf7ded6c769a8d186930999b6fded420d3674a93516775b3faaa80b35d6608ed3c1d446cebaa85ba8a106fcfc3afcc8ac24a35632997831997c61022fc2f0828c1f3ecc80414fc01d03ed3f5c8c1e4b82c9041035d280d8efe7525d1ae6e31ebe6307185e90e08b1a7893c1a30706ec50030d79d090e7f934bfff3f03fb9d4326f3cfe8c13783f95ac2ad4795a8e96530bab7a837cf92a1b89deceb45c4b4a5c7f06ac61455bd18d0a6330779fb9af3290ce5bfeebc36a143950c867744b528e1f17b33fe0297c9aa9386ee0e3979a1a44477ca6ff9f4e37601ddee9b99bff4fb2d173ad513d13126bd8a6f013da2ed62871e954fa4857464a7de5de5f5106561cb6cb7eabe6241d394aed48ef8f655af806ebaab69911538391e736dea9adc5461b5cb4f4984ec2c16158cedc9636d058b63d12978bd31b333f6d3862905a4960ca241bbf4cd15055543dd85ff5c5d4f1035a0a0a94e991f377b4cfb097e0ce57f99f4f3e6da095d103abba7bcaabcb8099ebd5b9c7ea906130c4299fe5cf7219ada1a4be8648e2ee3312dc630aaa1045cb36885cda756b5f2458d2414dfe4acf62da92591d06bd99a58d8f872fd114a1b93269d519e19a7110c1dbfebe35d11b8affc2c9fb25c7aad06114ca6a2ff6ca9f0ef1a30bc98c1136a0ca14baf9d97fd824ac16a420d219484bca4223d07a13e97708e1a4138e894fd92377d97411f26a80104d682a7cda98b71f5a9f1833bea5a10de195f4f5e420d1f5c9b529a9775b2a07e0f6ab7923be1173eb47a841a3cd0e36fca612ed84953a140631798583fb57a336173e96291f2fd1ab39e27cb73e17974b7d8a91a1a35b838ba59debd9eacf57c0bb475bc8c8bd1162695e9fba34fb5f3538bb354fa05a553ff9e460b47c35fb47fd1f97ecf82862c8c26a392c56c7be2722c8effe097ead2eacb030b1aafe84576ce3c3c6bbdae504786a58b2b55adb4e2b958ee6232afdf335660babae25c6793a14263156d304b1e5fb221e6a2031aaab83a4b66b3998df72f15cf6bc61c253779a70607345081b40c726454fc146dac783a9f3677fd638a83e997a6556a90ab29994c108d521c835c850ccf11a64552986633cf4c8c78877314484be1399a78b22a4561761d19eab456d24391aaca1584051528de4b196b932e6d8da54f1c742575511a6ef57ac20f1f234b5392393ad589724abae2a677baa83a27ce9653e964f83661eacd1d4f459126ecfb8af99fc2b3923e13797e9aedd931d18ad2a33cbd3fceee4b64ae6a6eb9a373d29325d8d0ad71c3ffcf3e8a40a31275caed71a72b1ea6438973aa5e58d13e5edbd2984467b9a4c94fa51ee34912858c6f6183e822e1fcfacc9a52417906218136edf9c64d8c9a111fb16d25399a496fb094e408647afe39933642f593516ff972b620c308563ce74ba394c5656e1175304be29d4ba48e484311c8d1d13929eba8ae9e44b0fbfe4954ae533956682022d9399d0e72a387c0bd34a98bd5d93755673807bcf0010d43a453bbea5f78acfccc021a8530dfecc7b5c876d5d020049bd72dd8d6ade59b83602cc9d86d7174b3c5a32188c4b25f458cf6754d92018133b6478f094ce08b2fd84d30c6184b461893c91734a0110875d53ccc68b3adf831a30c09d000c4d73eaabb746d8a15fd03a6594909bbcfb0def941b5b713df3b1e7ef6d187fd35e8202c978640830f9afbe9937721459bd00a34f670facccf1b6546c5e84ea0a18743e52d68cb780834f2c05f50aae466ed7dd2e9c12307d2c003d24a868ea5e46768cd8b0b7c41e30e950aa254d2b982cc0bf7c75ae00b1ebfe30634ec504c7ab5b6734fa7340368d4218dfaa762cbdd966a2574a03187ced3a3c8edafaa104b76e4702f68c8a10db931858cdaf271fec183c70868c4c1bd4b9a748e9279d487432ae72c89bbc8a42d7fc33aea1ba2bd65337643427c977d1ed3f4296e435b296fd28e22d7351b92711f7dd3296b69d01acad7986ef45bd88ba71af6d423336392277b3b69702e076549e64fe22b47030dadc87842f996da4aff078d3324aa378f0acffaa06186e242db462e8bb4cf97210fe6d9b61f3225992743293d688e5ea5b79dc7e07a12ef162a778a278b6153a7f7f4a9280c281dcce2c5274d3525180ad916623be51466c62f20475cea0d17152e2a2f9c57db3d94ba1c34564a687401e1693c9ee594d2464e830b7f3ced14d6c3253e560341a0b1052d9b9ce7d0f92dd8490734b4500717596e16a791052fa78b6b3db9a1848e8592a7b8e8e129c7e46b0f1a57288ed0b7dc78ab32b715eaf8413b9356f97a78d0a842379bd7b27934872da9a0fec6a0bf63ee589b338573ab45db1cbd47eebc34a4a0959b5a68022f3880802f7af0f8b100e8018d28a8a556e1f22fb5c35030c9686c7689ec06f51312df49c4dd9d728f9113fe9331e99266425fca690232856bd42063c5f48c0905cd5f29274e5f96b5842d7658952b0f196480c1061a4af8bc32fa874fa9f9f449a892fa98424be7e8dc2341ad7d3395434c06b98f508b4e71cdea1c96b211349fbbcf9e16c12cbd5939ca2eb7b2443086ebeb659b3a3f0de133cb24c34cf735454278ff459f6b6ad76cc22070aa73b2d8d1feb434404086e73925b4f77b568c1d3aceb0401e68fc20156ee73fc99862192ac951c23dd67dd881860fd2a76dabf3dd83626951d553aa519496060f14b127839e68a98ee52e5cd1174a4f3f3b6974f16af5a9935ac5600c3312264072b16bccf68edcb83063ba64e973106177ba85154aac6976cc7595638bc4d6fa5ffea4fe54e6a38719ec3d72b8187d0108fc30c303010002482d8a6e956286d72593c91866bc8e1f3b7c8c32723c8f1c29470d74fceee801825fef8009bce08017ed3b680082c9a487c7a0c792f13e821ae87800a4028416e7cad73432c70f32593af0858e1e246001c82cea114b0b7d2759682b37ca4b2e75dc1c20b1d0c278aa18762f75dc2513f8a247182c0081857677ba2726a4018f0a9c00e4159acb88cd7b4a6f3e563299c4c0dd478e1d5ef2234708405c81de6b7daa746a2f073b00d28ad463df768d5ed0a196e4e8c123070d16841568562fa53617bb372b06c82accdc75a24f5d4aba3f25930982a8a23a797926543e5c0c81a4c251693ad888875c8f3000828a42fc97d805d35ccf4f615ee777ccc579cab6292ea1365888dd956e5129dc5a9f5d8d272e4c2545326c3ea152c94e9ae1289266227f43070b6f124541ac7e7bf04251b96d99ef6a40f1eb47b3af8d9dfb2e904f701f4f7d773ef5b9929e683d0565a5c358da729cd1e3c701e944267f837ed19b32df5d4201104e9ce2464bea743b67f5c78e4da47183aa6432392369c21263daf9336a8e34550092890b806002e412209600a90408254026012289078044c220000289359defa9653a155919401ed1fbb5d57a1cd7cb3b007e00e288f405a1a974e7e512a3e2014823401801b20810452cb2f3e236d0e1030c90446472333e9d864a49fe8830e37f4c07995e93280f81efc77fb820f783ce31444ab8a65cf2c464c3a503a41069cbd88cd50f0dfe1202fde3de31be3708a489f8a052790e97328248e9ad10325cd8c8b53c482030dd6e6a4a4dc6c55602020845e4fe857ffa0fef8e559fbc134b2f3a881f181fb12cdb396a8966207de02fac657debfeb5182b80f001f54c9fcd3fa90a207b304be631194cc87ca53302103dbcb98486ccea664126e5a19853c48d6511081e522aa968353ac9b1dc90007207470661a393cd981e1d1640ec709cd351c3b826bb0b5601a40eca77d59614bbced97f02081d4e75b1a72b6c4a26132680cc219da2b57285e550cacda759ec573c47e390102394df76974cffc0a1deb81eba6af34b66be007903a2fb520899c17d5d37203daf6cc6eb4a57f13658513b65f5299d6b52367cf14bcbcb7d38193f90351c345de613a6abc1bc2929fd779ec16e0649c3bd15b36d55a64daa2480a0e1e41e1a5676ad5d5c90332c26343b43e4088d1d182066386b7c2ff62fc5d4f93340ca004206479bb0b77a59df3801640c7e0a76ba73901a933a954c266240c5242da94f73c96482049030b8d6f1e14bcc09d76c8180c1f9b85fd5496459a5205f30ad8fb651d63105292a994c9200e285ee3f8752a22e8c4c09205d28c89f527963c71c55c08b921f3a4ee0638c3126e085173f6ae03f76f0a880173e031d4700e102c816da949a2645985f12b22f8068c1d6d0be773608bec8e1450e2fc0d8c143c78f1e3dccf0b1e3024d00c9c26d216e3a775a4d7d320208168a213f66548dffb9321df0e6c10e72853b0695b5c4b6120a7ce1c3071893c9e7f041461340ac60bbd806d11742d9782a005205fc672f555bacde7b878e9f4c20d03b7460603201a1c2a6b284e913572987a9641206c814b24a3967f6364d19d792108048e1cede398f09954f5eb86432f15106196d81c9c4082051f04676b8fa789b71f32050682bf6ae66bc2de7aea32487db40870f1b803ca11793222a66d1646206881356bdfcd5e163755a91024813cea4fabe5b5e7b4c64c21f2ba98719d9e1f2fa0590256cf626452c5bea780a4409da25f96071413e4092f0011024801ca1986b39e55e116bb13ce3878e1d3c749801c408e8f4e1b593fdefc615a4086a12b3b43e1d3a689f042044e8458d54bdd2ea96be18408670c7ddd0baa217af4d42488ad0296c92315f0009022653b986baf6035e68e08b25800061bfabf294f2ae81f78e2a80fca0ce2474bae5fdeeb083f820154dcc97c685cf3ff5c0d3b6e949f78ccc4a82f0e0939d4f6e465f95cdecc2d1b3da69532b63d875d1e9b50beaba27ccfa5c3c16bee205add33b1b17bb07f963f2d3b4b9988401dc624d213f2b2df8c9fc4018802d3c29967469c8b9f8a65af8b9fa9fd92a5f4c163672c1ba9ad86d0e1acb465cb0d6a172d0994a84ad2593898d5b682944689edcaed9ae6432b1610b73a5cbf01b635cae16c56ae7ced0d894d7964c2623b0410bb3e7aa14e9273a7c66631668b514eb19d5478f6a43166f965a6690efbd16148b6fbe2aa4c9f8504f26b070c5657f94907141684a72f0f891c3c9d8808d576423fe969e34e6d6b4e18af542dd4edd9f8a236d45aaa56a5fe542c9fe6cb0e25c3ac59b1e3df51ef5c0c62ad0a62a5b8fb8cdb92a4a4184750c6a73321925d8480516b3af656ed2b12a4645fa63b6f0b499725c4c828d539c94a87ffe7850292699e218ff47e8b3ce08364ad1b856c9782652d89a827ece79496a278d82edf49a314da7c7cc11b0218a7477f40ca76275b0fc076c8422f161d44a5df4ebd33640c16fb27cfb56a6ff27bca4b5a2cc7810ba3b1ed8f0c4321b2fe9cdb9d2b35d82011b9d4873ad4e8e57f669dc021b9c4829cb41cd6a68ca7de131831c3c9a05363651ec18cf5fd33bf33f5c8c1cbd6377d8d0c41dfdd368ebe5fe626023139cccd64d336f96530c13cc565ae8579f6bce974c26397874898d4b943e77a9b0137171226c58a2f4f895c2929eb7cd88b051091b94309b8e49d6ad05811e2ec6ee580f70c1c6246c4882f5689a723c9992c9a47950e08ce6418107c1193f74f4e00183f5800f30ae60231276b8139662e957780d092bd76ad02b9e2ec95c09b2f1883e6f8c51e1fcf38d6c38c218fe6ac5443e08fd3722d5b184de60f2a17d6744f24fcb464477efee8b382bb4347ab6f6f0b8224ea5739df5efcc267522b04ede41d6a952f93522ce1bff2a19bf497bfa10db5a4e23b664f4986a432c239f16636ef4925c88b32e790c3b21773226441b6fc3051fa541942bd3d9a8a43be55012442174ad65301919bf1408af5c2ee7166d972c091025999722ce649decfb0747c950bf3739dfd0faa15261c54d8eaff5ab7d407786b2109f418853f9c0596f6ebdf64c31a37b4888e5f6482bf5d07c950895eba5b6948762c653abf5255546880793c7ac98d13a9e3fbc43f235b3be6cc815d9d9c10d9fa2bec469ebdca9c31f74f02045ab3cfe74c83cb5fa99cc1c126e15367a1e6551357238c8d9bb78260e48cbb623e42f577906077ed3557d4cde88c5dee0b7594e3e9f7bef2937e0de2975d818427d4cb561db1db7d2b16243b163fbca75e5967e0de6ef9437be7faae46a30b97a8958f6552fa5a10e8f1321dc473e080d59b589cca5695b34e50c273ba5c3a7bb30313947056c98210b627bd573b5510643fb83eb7d0ca2f99201771bfb14a5f5c0c6183019e45e4a2552b3c462c84e478cb8bf1435736c84c1cb34d73d7ba7634e3054517753d56e2639978d2fb42f4ab63248cf957d800d2f94c4fd35c5c793414e1b5df8746e5f34216b456c830b6b4a2fb24ddbc598a31eb0b18532fcfc4e78586b9e6c68c1461652137536d24d8637b96432b18185e4e46645fee57a934aae50acebe5df0fb1ce7fc96442011b56b0bc4ecf747374ebd70c1b556073521944fae68cccf961830af6baa8cba02bc9940a6c4ce18bcde46bfa22e6325228be664aada52a3c4c2561d88882ab9e31a9f2ac136c40e1dcab2253cc6e77459160e309a9a4d3668d796de9de09e98e74712d1d6d63bc0957dccda361d34c38f6cf34c9a09d9d739650b6d8770a1eb3a18432a8d7659cab77b704c14612d20fdb512ed948c874579699c75c17b723781bdf525241e5d5af3e40000790600527b061845347f3b6aad3f09ab35104a3ef67f7f4b431934d84c48a14e95d9ac473c88b31d818c22a5a29df3f9dd0a1b321044f8ba7d6a524ba711b4140058bb541aee7948506368070feccba1aa1d2636bd4c60f0aaa3f6d0cf5aff1ab0e1b3ea8ca3657affcffc7d4033c5b29f7caffb6494d82306e608307250ded9b547d8fd8cc21bb30681ed9cb25d2ef2a2344175c52baedab82d89ca692c92447482e8e395bade62984d6cad041831684e0026f17a9e9731c655aad41c82d92a7523aa54f45f7cc08b145aa3dc920be69af4c573299f808a985ee27f26bb2ac62b4687cacf3a638974c26b340dbdb469197eb11220b2fceee7869d2a6a78d85553b635a7a7bd3ca2304166dbd9892aff55a17741faf307f7aa8132a16263b32425c9109bdab62972d994cc6086985e92a7ffc4f7b8c3174c48015e6d2f023e279a63eb40a3d6b120bc2ff1784a8228b7aba73b8cf315ea9c03fed7644eacde66310820af44f549051c5d7633cc5f1cbf67546563299e8083145233e771ab31e751a538ac2adc618a5951821a428b563105d9a4bfd6e1fa3d894da1c7d451f3ac6f01f3a4a6890e3878b210aadc28aa975b08db1138afbda93d229cdcf860b28cca7bd9355783de1499f3827ad4d96b3e6b3423c911e4f2fb271c4219d284e846c224413219908c144c825528825422af180104a68a5f3665b4b964ff53d7ef808994488244222110289f3f6e3dce53bfe948fb87653e8ddace9fe46471832ccfe34c88b9ed588e6c2762ea7a0eecb104624d6435f9706392a438b58b47cd2184f29e2505d9eb39212b17e68e89eeb5356c14204329faca7517bc2842187f0eba259da8ca3ea2743f897572f85ffec17dc421c73d664f2e3f9f28208f1aeef8519cbe90819847aa1363659478f3d09a2b7ba20e3295fed418148e6fe8bab9401a258f1e46c8edd26717dc81f0a42bf5f724d93b5911f52a147f346b86ecab74307078a18217dd0767bd48ebe7ce1497cc8dc3bea5879ec4c1b1042f680a95aa60937bd98547a08c983bb75fe4967055142a5f420040feb888a41c754f72e9b2a2177c0b46cac4a3f7d0c21c40ec69b66dabcc94c9e85d461df19159b7ac4e4c41d84d0e15122937692ae1f22d441c81cd22e37293a8c92c9c792c924440e8c6ee5e6ae38e51dcf40481ceef091225355ebd55832b940081cca9695497ecf74f63881903718f3586cf9c9f8b13b9309043ec40dcffb8e87ba8f27e5521281903684b0c1144e55ca1b43e5c85f90c128709b011642d6a08d8c2e56e137be9d4c10a286903424b46bae1ca5a2767043d0107286138498a10c9d927f5d59f364300a1e1042064dd63ca3a5fcbc793486f23e7ff6534b0f42c4f09e9b9f6578c6f15318dcf455f9b5fa64a643c090ca72565273ff42ca455d56cd75485d43bca0a74f41cf568eefa6902eacdbd77ecacb2ba5dd03215c28778e53339dff952b0b846ca190532575f409152a6b46881692eb36d11c32e9f0991f2159703d05153a85b3f51bb1f07c9cb948133275944b26931c3f7638f7f0104c261608b9c231eb3f978e0842ac70c58a390999bded9f2c994c7c6c481542a870e6b02bb57052cffd121d63fce0b12347c814d2d16ff79d642521089102a74d75e678f964ce9720240a6ac9ac2d657afd6d2f994cc2088142c9e296744d53177f7f4249676f4bcb543125d90965d116f2c47c46fb52134e212c7a9bbc4e31499970cc369a6cf7ad32269760945173ad9849c46794908dee2a1d96f93228edf019b80b429250d07a531a55375f4e2141ed98b39b3c067d6af1a28cf5407b8ef61e3c7ef84045c8113e354269951e15fefd018110236867f36f1fe368993ca4085a9e90c13ca62cb150081190319907df6dff11396408b7bf675fe8f354d134851021b4362a8910b1f7b8a520840421e976bf39e67ed9a84058d5cee742e709d1110b427ef081101f9cd57d8358bcf9107f480fd02bfaa3ac3736a5afe4870e1a84f000a583ceca3b952b899da383506317e55842476a9833659d9463070f1d3ebc078f1f61e428c38706bef851830bd4d085eb15fc1ab928284fa5e973dbc9fc2f3c064b82921ab838e770f96ce3954c263e62c05ed2a3c62dd29bbe647e758b1673c96452830b7ce1a3862d92b94ecffd9754955e8be4eb3ae7b7905be2d3c2ebd693f7d944e94567718c144fcf205388a8c8c238a5d2cac88cdfe18f851e479c6cbf9ce4e7182cfc1d4da67d2ffdd2f70a6f943ccb31479afad915c636f5187d74eca4fc56e466f2f71de743e67532d151831567f74d4b314a2cc3be8af664985d532b3293aec40c1f3976d450451a4587364bedf8d36aa422994ae76dcd2b3d2797e818638cfd1d3a0e500315493fd3e35ae9625357e314a9b60d1936ed54c314a5e6f89cc6d5ce93bc14b7b8a69f1acbb83d29cc4c3978de50d92a6914f9ebe55c664c97d11685d97f4f4f893f9962381479be6e9dc77ab818148cb525fbeada9cad7ee2d0d9cbb29d396aa327ee50b6a953d67cb1349de8dd7456ffacb86b71e2bd55f1a0be7e7d3116d4d8c4fef1ff63ceaea763af89d2968c88f7f0b436cac495523625eb233762a5a006263e194f6d3cc8cdb6a41cde3c769c1a97e853cab9dd63c3b96b9640c38a8a6939acc4769ece62ae4684d680518312f5af074feba963b4ca1717a83109849eecbb502a22572db1400d491473a6b994543e378ff3082613ee61811a91287673fc6fa5811a90a85fb64b25fbd12ca51a8fd074ca7bfcb69461778441ceb4c818d2630aa546a0a1c54aa66897a54d46a0f2b9979ebad1af9845d441e6b4e4934c229622b0ce27cad69408bcac2ee5bbcbdb1897e4e8f1a30c1e3dac06226a1ca286216a1422d520440da2845143103502a1c6ae182f6b7db6fa4bcca80108b646a858f95be1f45662801a7fa8e1871a7da8c1073d7830bde1f31a7bf8c45bbc6fec341a7fc90f333cb003032535f4501efde6a1824aaa725c230f68f3cc7ad152eaf4530d3c241a7379626a29dc9d831a77586d4fe67aafee98643b146aa63d594cc96c54076389ca988398e837253aa4364a5a9cedfca05338a831079392536faa779621960342f6a95269e3777f7130ede910b5d9a38cfee0e088b64d2a9ffd277d7d55b046de70d0bd499aacf5bd588fb8e11255631b9fae62c646da501232870be249b5ad1a61c329c6f4cdf79bc37466c68ffd11c6c81adcfd8bada2f4e993691e8ca8a1a44ad80619fdf46ee760240d7752fa3278d575ae68040d886dbbd1b42245fff571c686c08c9133fc5b2aa6765a906e560546ccb0a5ac5e9aabcb6069b06097946bd07f22c3bb29a7091dcd91311c4a85fcd19b4f8eba47c46066fd245b7349550c1a09031bc3ebebb22c64f460c8849217f739fc853428b32f314a1f18f142d9b3d5bdc993275a77c16cc282b60c9e1ffd94c008173075a6b24c25dbbe7a640bcdee685785e9f6af235a40db488f31849e855350d7579a639e73584009ad9bb7d53a7d0e5e61b16c7983e66ac40aff57bab04984926d268f1f3bc0f01d235578358710dd6449a7b8bd8c334860c60815f44ee2a229f5d22f8b9771060946a65085cb35aa2969440a56ff88ca99ec2f7563c2481492496959ecd28f40618bd172e9d4fc97c4e263e409678e516ca36f89b28c1c3c7ef4e011821127a03a3356b4641831ba532688c04813543565a562da234cf87fc3a5d49cb37a4eeed8268c2ca1a8b956e1d2c7ce9707c0124694f0654a6f7af1eaf3955333184942dba7bf46e71f095989f1ac36cd17b5468e502abd9d7b4ddd32b43d86ebc08010468c70caf6f3bda36a64bc98e08c1f0030c24811ea1c2dc54c29f878c88c31420453d6ea113d51adcdc810109b2b2d06b3f5717f6ce758c188108a759ec973a95c30e548100ea72ae988a714f6e7112074b9c2ec6208a52c657fe0c5ea0a17a7a6e774b830e2033f46549a4fcd33ad8ef4e00e3d75da963b467c233c784f4c05b7ac253c443776d1d987f54d69baa10bd4ce6b4e29cb4b9749702317d8bfa898f1d49a99b9810b4d7694502a851072db1bb7c06ae44a995c051d6728dcb0053a557b54d0fa27464e851bb5f0bdfc4d3c73da4f715aaca5ffe6c25be3e9781645d14145d35ef5582559d89a6ddf628bb130e954bf1e2b69cc1883c53f42c67a2879af6d5f518fd6a68b8b41db45ae40dc8dabba89f1b0bb15afdc955c5ad2e8576205a22d699ee952083756914a22e37fcc41c8bd64126ea8a23bcf6ad2dcabe3e99170231587774aba53ccec7808841ba8f0fa62eb3acd9ebaf5831ba7305712eb24bce37d4e32c5174a650ae2de720e995218468edcd47121851d23f74ee76614887bb2a8f5bd28fce83352469b3c535b28dad7942e87d8a0f82b586ca88aa543ff44e6d9af96629cb54d7ac22c4236736d3a717534ad4e29c9469d135550425d8a1b73e5ce36a1877d79ab76363b4b137e6c75a8bb7fcf95cfc41a9a1fc77ec6745c31717a0d1b6e9bb2f7f98d4bd461e305a1377fc3127bfefffcdfce8d4a244377cbb7fc97d09b921c3926930e4c800220e840066e5082131de27addbe31894e5350b15be3a4967c4312e670353a5bc307b5a90634500600e4702312057939566c2ffd5eb21b9048be3c783c7d1964fcdc78c449e88da6f329854e49371cf187df20ff416d842784dc297bb16432413718f176ec28ef70523fbb1b8b3845fd140d965b2a8a371481908b1bb3730e9be47f23119bf41cbf2c7df47d6f2002bf11da1d2e4b9ee54b2c70e310058bf12ff8b8e87fdf10561eab39158318e17a210e32d4f3bce584380895cb4a3eefe6ae07c108f116f6435d78a5059156ef1c6c76462f9802d147931b545ad1785d02c4725ab5a76eae76df3fe03146dd11277ffd5e3f144cc72dc8aff4336e1ff638d61e3566bee7101f50bf109736688a39e71eca3bfbce59f3eb92520fef7cff6b90b34fbfc983a5efb44fdba9dd208387d4d8cb858d317748a3ab8dc5d3953fb3836afb7b96c262c3a5eaf0c713691a34e5061d9eef8c5174de92572937e6b098caaf73c173385582c10d39747729be42b6f9f581b81107b33ee5e3ff05ad94f5804329490ba5e27490f9c6cdc1430c1cdc78036a3b7cc55ac96f30959891637970c30d0777fd3771d9e29291831b6df03b06cbabdbf10d3668eafa3b8af898a94e6b48892ab567697297824870430da70de2a5d472a3ad5762801b69308da6adce6625ae3c6848772d838e99c4a58e9ea17b4f4dfa4767863269e6d8e97bf3e83cdf2843fa52c86c559badd3de20c3b92b35a7f8b1435c24841b6360fbb665e77437c4f0fe8ef67cdb10bbd18d301853e967314db5aa991b60604d6697d6d8fb4a991b5fe0f46cab7ea790c13d2f582a098de9620c6e7401cb4169d3772ae9644134b8c185f2e60ecab6cc639c750b5f9e2c6921f3f55c16f37bfb7b16d01c473c5cde9c79452593c90d6e60c10a3aad2da43f6e5c01d59ad95f33aaba2e3eac90f2f592ee5f9aa1cc2aa099e372a58f8f212a2a7c672a32a7f2e29ddf98829ec5d4c7cf96f38e66c60d29f4dbd983ac8d11313a3d6e44c16e53993ddb5ca78e1b50404513fbacca3ea192656a75eb2ee8d19071c3094973d998b2758907bb09891795f51b3efffe0d269c3ce4c736d5feb72cc68d2518db32c7f31c2fa892c55042e6fb31e66ed37ba794f48d2498a3a6cb79bff69f744a26131f3c4afc0612d2b1dc62aab64bd133378ea0c5fd249b7e22fffd1b4648eeb8c7d0bdd12c2b378af0860d968208f50d22dcb9ffc4c6ddc678d68d21e47193b4caee5ed56f08a1ac9eb76774d2dca37423089bc7eccecba7eedd3ae00610d690a56a369f88cfb91b3f28af5f4cc76cb5352a1fdcf081d92b83daabb32463b86407377a908745bf4aaab11de61b3c38ff3669f77c14df14915d9439a65b2ad5fa67491768522d5daada154dfb01915c1cc38b521ecc2e6cf81210c185697929c9387a915b707b19e5753c7d6ecb186088d802ad2e5b31c3e5209e5aa45f2bacbe9f4e1f3bb4d046f42b2f7390b1b210109945e695c1eea349d39a520f88c8c24e290595440763c19d7cab3491bb0d74f828c164c2a387db60078f1d1f108145a53fa7ad9ddf18d41e1e468f1f614c263bca78857bf7be796d6fc4ae92c9848c1c3b7c8c3278b02b2e4f2d4a5b7213b7159f0e594147df984358259349044458d1c99d513dca7e4c735bc25f98c82a8c656142e98a3159a77ef8f8a24454717d8ef32266c7aece92c9c40b91549c2f789cbdc9f5ce60054450d1e8c938696e2dc264444e914c9956df29ea08d131454a53fade354b763a2e528a52859d9d3125b5452f428a524e99828be9ed53ab641425d1dbd516aeb4a61b20220a43de4263ac8718be65fc58327af0c0c08984c2cb18f562a95b3299a89519397e90f10a1001459752ae2094b08e3dfd413372b88f1e5bc627feec7c6fdb314f9c8228d9f539c9203ea8139b0a6aa9e771d29d4cc2988870c234bbf420f4427c9ba8628e575f8be5e1ba92c96402229ab0ee84070d29ee97d31b8230443261e5b8a2a516c7bef632b6070d76988109d34fd7734ab5dfbb4de00b0b885c825326679bae326957c41257063daa396a52a412674cb669740a9b62da397c5062cf5974900dc24f7926714a49bc44063d42ca64bc24ead0a52a994c122012894fa9e879fc7a6733078933cf89c7de47d19bc93063c707441ea196ecf7e8b04faab223bcee28ba5b7e914658296d0e5b9562a6a6b08e1d1b822f4620c288d45cf8acdf024416f1654b5e1762662fa306ce001145303722538a31a698e1994822fed9981b6c7310a967c964b23dc4984c74ec3003118ae553a9a6d2b87e4c490e31cc48de39bc8c651f3e9940a0c796b0c8213e916fd6259b42955603228628a8e7df789cd84cd16432c618ce22852866767d2bebd7fbced83181c9e48c1d5b228438c99856fdf8964c26051019842058cdb8398db24f0d3235683026131763c7f6984c7c6c402410278dfaa9c63f73181b10a588eb1c5f44e6c8f50fdeabeb6ecea31fd049937755fad8ba0a45fa60084d9f295b3a5e5533bea8c064d2aea30c1e6c001e227c4847a3bd5f1e1d74682d20b2875ccd4eb7ef6ed6baf5f0cc7545513ad70521e701b1603936a99c1e3f4a040fea46f78a2522c45a7787d537cba58c1f5e1ae69080881df02b17996b3dc8db75302ebc8f58fd3cdaf592c9e4478f1c3b7c8c1c35f0f61c1410a143ea4b65e54b5e8c45640ea8258bc92c7b904173ca109143eb9f62bae952d9e989c40151d739c6987ed2410505227068f79432ad20d4280bbe614bdafd535231b3361d86881bacad4fbbaefc3919b5814baa447be9aa7cd38d40840d8b8ae9fb618607d680c50dd1d68c3968bd2010510363bdd7736741e671c96014f40e0f030522694029557ac487edf0a15540040de53a159356b9a4dd2672064de68676d8fe93890744cc704a617739952e7925c6c0ddc764a2019132acdd153478b632ad190928600112889081dd2adfcb529fc3b3317463fb9fc4aacd44808818d693cd1b6f1bd33f74c68f32c8f030a47139970af93985d08321af7bcbef737fa1bdb3d894aa671b4b2f9cc384ede63c93bd4d897421ad995976ab73019911fb36e7263d955b783eebc9a4e2bd0899db1f63782b40440b225948a70775a9e4656b69c0a3871866c8c02d7001112c14432835dd98fffa0ac8967091efae9f1916b14215635076992ba7145344aaa0f77a8ef58855107fc9f6e8b11910a182c81444a42012051128d413c2107182481374b3386e42e992b5b00813449680fa99dfe565ef8d5d29c119b9a3793597a933752092041124881cc10c1123b031630e5fa1a652f445e074c46573754851538408c9fae42773a3dd172ee90f880ca19446bf57b31211218804c19837f9976ef5368a5a1001421a535edc337b4fa516f98195dabd3a997c8b97b402111ff897734aafc6cc7c8af4c09156e2b3e93fcc28830c1e3c9940a006223ce02a88f98aa23fe5b7b1606317484b9dbcb53ee59eaf6043177e9a927bb169c2324885384641060f1e02c0218adea183063bccb08123145e38b9667df95f4259d2001ca0c0f109344397980ff1fc9b8e510619609c41011f3e360424984cce48383ce1c774d37fa13c37a8e8f837011818c0808fa5c1d3004727b819ad96bdb92aca553299cc8013f79edc4fbba473924fc964a2ffc38c4d94bc5364839a89ff70c964a209f55a8338f968422965c9649289e433a45525cb75a68209453789722da9b9a3ece31287a7309e4dcff907a9258a9564b26ebdbc684a9530ab3f25a575c53ac30ae0a0849af9f37a2fabdbc9491c3226db902949182fcbef641232bded4830db17fe43cd27f12148681a848e9e93199d641ee185fe8a9b7deb46df02381cf18ab8b533e1696fa1462c37a3947ef3b3d98b0c46acb9a4cf597887aaf917c0b18847080b5d65496fc710033814b1881711429d7f8a66004722aed1f4569db6528b678850ffb45e8c674a261330701cc22cea3b63f2a14d592593090e43b49d5134ce53304bd90a70146217534953ca6bf03580831077b8292da6fa5a546e32e1a1631067316941538875c44010c8c8196516d5d329cf4720f830daa34bd7c3790e204e954da8eb5f69131911e0f8c3f726e4c7ebb00438fcf0f8a65c69b5989b6e0870f441d7a8a33f65dbca2b8681830fde45739ff3bc1d449f021c7b40dce5ce1bc6d53cb41c3b7a8c00871e8e39c3e92da593dafce581d3216a9a9326a129c581879296f0dca26754ffe90e697fd029e75841c860dae1d5d1ee9f4a690238ea90577c4c316f0e071d0cea35978d89adf0f11c3e99b35436337df2270e39b81af3ee736fa64c138e3838aa1f64ca26f53278b00f0ae080c39b34559e8da23a8ec5c30427c0f18662503197fde6b49d6e3778c1c294bc69bcbf260638da80cab95eec3fc82ce6b3814f9eed42770af9d88d81630d6be82826e39d1d38d4c0bfcdcb6812c277f33420632e8f93f9ca753568c864b4afcdb40effcf197211d1cea661c4f56638ec78161537694c612cc3dd5642c6dfba34ee91015d9e82298f994a543306c7c5c55e54f08ed116432f269b7d3e280c5bf56eaf0671996603c3f99d84ae4d2938bef0e8942f3728d3614a8ec30be8bfc9f0d89dff54787d343b0c7074e1cd6d9fe6252aaba43f788c11061938b8f026793fbac62d6c9f2975d09aa405db94deb4418695d9370bc6af4ceaf9c182d72e7b6a5be43cc55ce14ca5a2295d995a5164054b375ad6a0e495901300aa80a30a77785175bf22e673940ad70759b92153a690bb898b5095d2688a4ba10d21aa84bee652c28b82b199d17fbf85829bf7479e30f91b2ff6848392fdb154a3389cc065dcc558c878260f4713d222732997bd3898900e5d4ba32d54d21ec3b18484aef72445b6a36e92047028e18f55174b777dc56a702421252ea8c7a60e001fe040c2a64f577aeaa09634031dcd011c47f8bd3fbf9a667480c30865ee1afdd67e5f1f84a308a8111f66b54dabe57e070f1d1bc04184fc2ac584d2663a8b0c00068e217841fce992da9d624a0bc11ea5a6237394e6cc974c26397ef830a3470e1f3a26131f63e8f86186e20842b759db9da479141d84030808ed674a269b71fc60fd9c295fcc5f0770f8a0d1b258a9632aad1ede630412c0d103ab5e572b8ba58d2ee2e0015f4a657bece88725954c26ce61bc5b400c925d94ea33780c2bbe5bc0cb3883044ba28bb4ce4d86b3d51925e6a218e4a2d5eb7b858fe1a2dc6d6736a313822f7ee818a38c305c40728bcb9306bd506f9a2b670bb5ac339eb8289af18201925a5ca292cea1930969990d818416ec76b9998ced239377c69e80070d48e0009259e8232b7b597ef94f2659a0f3c58de7f8d5872f16a6cee8392eda680d222cce9a4b2e5b3a25b39baff03354ed969aabfb20892b780b57f13b651b957f0210d08a4396ab790a1b7ad6c28adda28cba76cdbeac0faec2fc417eadff8c0519aae24d1736853badcc20492ab810a7e37d45d58c304850c1e905cfb9d1ee3263f0e0914a40720a3d578fb2e46fda45688aa45ededf189995db9094a2936b3ab467938ca94948d166b2b3b56469578f1c3b78e870315240328a53b8c80d3ac7fc7aba28ce967dc3a645120ac399bca850fb1c17f600092870511693dfe9d8511f5f907c824b7931bf848a22546b249eb855f4a5ca9bcd73567bf0c8d1c37bf88f1d3a2a40d289525af18a71b7c684b0e4c786603229f9f18384139baac7f82892a1a3c78f1e3f4836717fa5c7d1fa6ac2d11ac4f77c8aa9123381eabe57d5927e723d98b84d54669fcd5cc274b25d4bf4d95941d5250d163795c06b2db9a59a8e759812fba7553eb7ec21c56303c9241af7d129c5b83d224c12499c64d3c98b9f09912549241e996f84e8654d174e1248b8572a84dcd95349a61fb19d6bae4d6dd7b7391247346bc23d5fb855cfa146203ae52c95e2725eab18f1d7ede9553d2d9582248b40c5f8fa235f4daaac887334fb7992af0ba74cc43934c694e43756d00a115e34992de6d11f22cb39fdce694f3b326e884474ee68e962a6ad18cf3490430c9242bc392b085d9b2fae29d5c035d0c369c0a303868410ad8bd6c79862acfc7110a78dd7519f524cf29f1c93c98f1d3a788420052482485efe132d4b9104e29bf18c9553e8ce584900d15b06b931def26d12fa4337bf173322e3778e1f7a931b4d75e31d3c6504250802491f922563be4ef3cf416b4220e1c39a938f0cea83c6ec9140b2073688c8c698c21c6590d1a3c404247a78df3a0715a5935f1275cb80240f68fd3d8b175486d70f091e6acf1cbb0ed36959b943a1bc72c9feb9270bed50e8cb362ff515b71c923af031bbdb9ea7d89d36123a14c6764b54d37ad3453287b56d3c564e2342ae4e22072cf37aca799831ad91c4e1ca292e76e7ae2827091c4edf7239bb9ef3e60fc91b0a3a42667ecca6663a6e70eb54999bd8d89b3f6de0b73af77105123628efa12dafe7fffa202790ac01d5943daf2fe79c1f82f10312356832e3c13be42290a4414b9aafd4099d3fa64c8206de43988e7249d48a7906af54ec86d3a73267c70c8cbedcf5f3b875a92e435a453b7ef4c5568749c8c0b6788698d3fbb08ce1fd2f9dd182fc7a4c9388210b21b629e7bef8250ac339bf5494a9a867db0143794153cd08ef0d36927ca1f02ce279a4a8f9ee48bca0884fa63648b50b9ae99f1375d3119a4102122e20d4560c2ae9a89bf4df425294ca559e4ad97222d14295dee3b1eb4fe8fa3e409285d455a9a592a61090604133afb3a44eaa77a9245760e35758cab9baf5345628bd3ed7774eb6be7355154c2a871935273bc61f49a8f09fd2a92bab9f95c22453b094523532c596ca7f4bc1b5b3ac591745812f657b6284100b3a143e992e736c8b8c9e26c913eccd3957d69375e2da239038a1df5377cb23f5f582489a70dcd8b64fa6ea21b338206102a2df996e6ebba53bc912cef698622afc4ad84fe87cc1fe4eff4b2449406a4ead8a6e99df4b244840547d8c3cbd919ad611cc72a1e2bd436cb9586280223182ab27ae6495a757ef2445b84e636aa8ff74256a1e2444c083a73bd1f39df3834886b0c64ce6dab976231221205478ee9f2a1ba5bd314882700c1976b3a2a9ef13f7200102772ac4632ea635ff078fec6f67d1ead81f890ffcd4d1cc4c63d762f7a058a5e4c618f2deea22e1815922838b8cf1828b7a17eb06613ac62a757130eb56ef334fb33d175e5c565505d1082ecc77d73452e4b750446fa61e2d2ae7b6d8e27061c293c6ee69b4166bb62fff20263ccfa64599ba943c7d1694fc67818bbaa9189792c57139b5859031e39b128b32f6edc98b225824b7b2e773a5dc2cfe2bdc1032a22cf8dab5c915a9a02cc6d4156fc5b79bc43c7c523977cb8ab67316fd96e73bb55e45a5836d68089954a8ae0acfd266766c8d7551ebc1482a92d958b7967d97ef840a3f2fc7d2d162b890a1198c9ca2704d613abd678a520a27738a0a1b4e588a74e3a5d4ea9bd37d8a1489aca4c3a912ef96fb51202be6ceb0dc7974cda23066bd94719609855be6d9435f338a3681221561e7639bfda299188c7cc22a55156ee3317d476130e209f6647d2ead2f5a679dc832e6bd7d335e5c9d1367d2e9b7f483c919e126dcbf14372a4e2cc77644138d1cfd5173664dd1cf914cf875319d491921e7b323984868bde89e6aa76bfbd8121b8c5ca22e15a6dae25957ca9638ce2fa78e29bcfd4afca554f9eca73c42894a544ea99753f28e9231320945a95c6f32a697af4712a94d9e73c9bad6a69848189ed2666773485c2a7925912e3ee20e2a67b1ceb5c4788ee8d2faf5a6d2222d2795e4d051c6e6f03272e448c04823aa94be2ac5d2733985633c8e30c20e9a5f5e7a1743ec9233b288e44d89ce111fe24ea964321183470708e06309a0238ad03fab559de713f2ca1231c4e0d18132787c60321183c7180e1849c47b61479312eba2af1d41c495749e7d6716bd55fb1839049fd773fcaff83129a711439cf3773f8b8c65bba692c9a402238528271b31f7f9545912219ab9d076fd969141983db3ca56ee0882bf51e31ed62acc538148478f392f670e97a348c6170905238038ce4717119af29338ff908f927a1a3666d2f819f143de1e74c9cdbf51f51be94362bb6a1f83f813653a63840f5c895a1da519d90366258427cbe3295c0c0946f470a89c0bcb5195fc10638777a0062379f04c8caece67f93e0ae0010b3ad7a6a989ce4e2677486b763acb2235097df0d0e163c40e294b32376c9c17d7eb506b123f4d29362ea974c0b37bb4ceeb1e75790eeccefde90b3a2372c04f4307e5d9259ad22371304589c6ac7bf2f56fc1081c12b15ce777fa8dd9a85490420261240e8683c150200c048321fd4a00631208003854240c8663d1704c59b71f1400004a2e20504e26242c1812221888c3e1604018088542c13018100a8503a250582810d35c12e5036b4e1c78ce69932d132ac87f376c0a7c209a310af2c5da4b01719a7f77bbeecf40b83a11003077a21b8e286ca69b912ada660932ec00b973d7ca34aa109480a9304f34a8e233f879a150b7c7a19aaab013d05d6c6f5aabe031cbc9e8aed49704377f36b64211a95952f12d2da02a0607a140c34f1820783a98a4b36f44710ac172f37ed97c17d0e98a379442f309f8d0a0a4264a38f9667c0caec6f4db33297c1048eb05608e2610b7968de8b394666c8666f83fcdaa514d5f1fd9d66652278c5688843dfd590baf611c055b20399ee232b1ee02d8e5ca8d2147214f0bc35e042f0868a2c34cabe1c41e6638ccb04e6ba3b433822ee34d34d49e7e7e36d8b5e8b99ecc208c7f6cc2c68129d7c4058bb5bd0ecfc3c0fd886ac8ecf8729a06785670268031670ac6299cca909978d92198b035e6c85f4a8d40260ec7d5d999a6b9725e63bfc5c5d5cd96c415a8b1f2dfe169d5ba847c82f4b8fb26b56879d7f639117e0bf134d0773e33ecdb79c97f5ed7fd8c566265604d23c1e97678ca6b3742d94aa15944c2cda5bbc35d07da73ccbad33361ab7de894ad11e5aa476f39b9d79206ff5175e8dcf81938c52aa495f05a1d9bae28c15534ca96eb1f07206ca49079de830d3d66c0484533427eb3defeb55a5d9431a9fba558aa0124ebfb3a48a728e93c5d421f837f5d04595ab747b6ee7860994f1a497ee5a0512ecc0780e90c9dcf3db3cf8115112060055ec5e4a9f9e96c3a8b6d674f20895cc57121831e58ed7648c96d73b3565847fc56ee08af2a44562929b70b46816d768a550eeb6d4cccdd7c482696cb3b088b6672234b428ac14fc9083da71a0b02dffe3c4d7ba9318ac6e2dee64eec052b7a76ac085e64f5f72db268c491c922328b602ad105086478d86a1a3a7896d219173b338e2710e28064a4a8dbd9ee0732d962674e7aab7041ae42d67091930c820fee3db928f6038ae4ae834b415e074a93ea6bf6c28f44d846a34ef3671fabf37287ba6ddecadd3ee4437ae0f86bf653c1c3c994e2621c48848097f5a448c9561daf6a283b67318ac6124d7740647099503374f612322731e3835d524cb9025a950970f45245c26f5fe53b09d0716b7d8b89633bcbf8e21f71636da48f56dfa876e493994054ff0a6a727fb2c2c0b84933bb2f3396b6a0882e3e6979e6df810f93a1d3a3a04656c0dc8ed9eeba61c69266490ae69508342c01f14632d3a96a133fc8e35b87249701a4998157eda678d4fae8ac089f3c37036c7dd726ce480349363d41b0d013424917139cc641abba0ee938ecfa7ed2e2b92c6084cf4d2be71caac0adc6636c5155edd6b546a9a992a4514a515e60a00522b78ae5e7b63339f8c61d2eeaa5369da09bbb7838b00d010d579119c9e32f9b0486396f9466d21821835341c185629bec68d3d7c49f3dc17974bf944073c017ac5d2d2b8d68b2647020c1d8e294b47dd0e6abd83efe96f754f5ef78121551fc6bbe7aae5b98bd05ce7ca57de446b30838c03ee0863457ba0740d71d94c0ed40a55cba706473111585407c46ad5743f43946ae5c805a28c36b57667fa5a50a15a9c2e7f725e40e3c7e07a7f871fa5f7073e9cc9ea0c6f0802770643ab1a8672c79572a8731bfd317f6a3f91fc38f74c1afa91786bd5298a1e3b9d37729e5b6826d9df4fdfef811c1228487406369a524a86fce3af67069efa1569f2e129829c74f8c9ada05824621a08f5ef295be29c984d81aad01921ea056399500fdcd8322c428c4a10b39b16e253946037d1cef9706cb5acb9206fe87e7882e26da60e382227447c334072d974ae8e2ebaf71f377360febf2acdf70c2486680504d4a1023523e6426a469f50a67680e7ed2ecc7d7e5002ff27e6eb46028ef56f937886ba1f71f60b06b207565040d3e0f71e258d68b081c0da901eb0624b55212d0c891e2d672c103a2baf64adc6af391ee119d122ae6a04eb0c34dca983ae4778ef41cfb40e1c49730d41f40063328edd2168de7e88d1e2e4a86253ddee531cf3e2db554f8fea221989e0e5ad834b3cb7e8e7e7b8d4ebba5ef503e70dc832a3b2da6b628ee47bc659ce847bd7b37778623143074009efbd83b2a0bc40f9e3c94760fc63961cdc87a6ecea255d17d86b260e7f90ac03df5886b7d7bab32889826dd2532a7e0f7f4a5f51f962b46894d52cfbee68caf350cb8392bdc345d9a1a77e2c9fb0b57d86442d6628744dcb676f319966ac26d2bf14adc3085874bfb812e1a5aa2f19077dcfe44bac7956468fd80e670856c59db5c7b035b29e3dd0773d70d0a6214aa2384290a58dd311c3d3f8a5f502e58d42a83ce0f3017e10177c8717f08d2c39bb78fd057241f1400d19b83cffd5ed7765f32ba64db4a748b10f0cfce7329e5e03bf3cd4ce9c50286d30e77f38770f2cd06a8d902561755374aadefe2fe4b9e834612010fb3d9218c2dd9e1fc39d663a72eb210065567638d76a14adee0557b751ef0eb3b45a69d0bf1b40fad4fedb8ed090d8e4e826134f66f1c0238434a8090417870d765577fec5f048494f1e9e4097222f640da076d5e047e6e04ac9b40b80106b9cb53ed9d24fd8aab4f6528225641ef16bd0b2e78c7734b7fe9dc978b08b3324af0b0b18030b6b500ed69dea45ecf007ed3695d6a12195cf43735e9513d5830894ba161805c03182736c907493996510ebfa38e2afaa82a1727dcdf78a3db7a52a20bdfd3ae791ea357de998699410df62a32352b57161460ab5cf7c7688b2d760c41b71442a70627e40aee87869650b873b5c1f2e88084e8a79ba7e2bc0a8195e4117dd95e607a91fc6c637e27d015c7a85a80a7bdaf2b41f4a2284fca1a9156cc4907cbbc6c46ae38eba1c8c540f9bd15c767ca994a2fd09318d029625d4cbd9ff27f442ff70c8dfaac3793388c87e09ea48bc09a4e9bdad72f98712031c1d5b06d7cf885720904023ce04f4c2f1dd9e6f87a5c5e4749dd4b9ec264608e5735fc818c1da042f9195dd7caece35a8aa55b9d33e31119860c63a801228f0fc29b8a9d6aaea2615b393fd06bd0589889c81302e216a28e0912cc2fa27ebaa51f64467d9e3f2a9c1411d72745941dcdc367f519a3fc36034e47cc9d5492c278ffbb27439316d4d499d9971577e3ee1496c62179a1fd5612a9312f17349111a9742c46c077337de9d55c42c60473f118c4382776066fd51ca32957a0e693f84d4ad1ae225e2d31f2aff5e057d34999d59307928139b0f313143eb1606fab7437dfc795e63d6f3d2e0863be99a00ccc14e47bc880bf945fc8b6ee86240546e8e20f7ada005312d8a08a32402a3099dc48005b04ebd0350410f42b77daaa56391f9578c851be0f2683b43c0718770e5f2953bf4db7472985318e3a431e04e5bfca6e84490cac794fc1241a882cbb33a3d4d26739ce1f71ba8d8d56e7326e8cfa06f438c49d7a5c77529d24228428bc90cd615d316d069671ccf08c9082988711dbffce6a63a752f81dfb3632c08a486012ae2e0ba16312104e5b494c2199f22d45e3c0821519724cb68c18deec3e2c1d4bce31777e918acae67030084f1eae512c97a5f3822067b7e719f9fb2dc7c671493dcb43ffdb2145a023fcd961cc69c228bc0006281284120ee0ef59b22f8487dedc948b4923017625ee71c204b0b21cba4cd2c8b45f762d0ef6ab970fc800230cd34c766bcb9d74b8c5ec0851d98a5ec6cf620af54c871454eabe43289c1678f6b5d14a210541005d530b5a8b618e7d3d8e3475bf6e30276b4c79e8a216becd9c28f2fa42aace686c11667580bcfece921be0b4018e2f8482334438aa06737e68390d4a4fd2d98d06d7ebe76476262134902774f3cd2b86b2a02a574b85584d4144575b15abd89484d4414013ea855a66a574cefa2904ca42b6bc03af42e1fca042a20f27a6786c3a26900be509d1036057de7c678260e21e45465be19252ff7c51d25cc6f0c1ecfb51d7fecb45ef00114f2df730fd36561ea68b6a491bab9a48aad26461c82fe90296a42ced524abd5139ff7981e55983c4c4803da67ae7c31269ac4fd6fdbe7783db1bc66f89137c16d843e85a738b59666a3166c0594d7119bc25f895078ac08cf50c5c2cd0305d37a0912ec683d05181b91a86b148565dcbc160b15eeda31458e3ecb314d1a6939255981f2335be6927b73c937161576344f8fa0280db8d60f71270167a120873c80da051ea40afd078ee29023534696881e25508b7f7e3474f31f04054a338d3b26db5e9dc415dfab0787445ded7c903a564df78ddd24152fe6e8ad4e01db8e717fa99abafbb29233371b16f7351b080b6705962aba6af20152a1408fb108b66d83fab7abb4fb81e657745afe62c8964f08e19e0b7242903b5eb2c085ff8e03a7953370f34bd6b63c9ed999889afaa02460858988dbbadadb8b776f938720d0cada19348e1d0567303030eead4dbce4ab899ad5d03c5585c4647bd3d72a22ed7a3fb5e30a570462f1a3f9cbca0d65d63442e2068bd0db3873f00b1f0c9b1a2b074400c505692f761a62d667fd7d0a9aac345ac4cfced8664d64db5406a50f06dba1298d03708898d20728208a220fb036f31f609502042220600d9dc18768f309098b02c864bd72874ca841e93fee0fec2620c816145cb19e927290894f0f03b7a71f2bf15add5c93a9de4b71fad248c66bbd30db2ae99710c9e97252744d9a634d0610ae09f5bc8ec31f92e7693e8a272928fdecf34218c9544772a0636fb0818f9d95325d92d8effa1e8b22c58b3eb345b100992634b606942f08665ccf1a2a9a2e06f92fb858d055a932003cd9e154d1e9fbf56d5dade9042954c75460d6547e65a470ea1151ddb21a54d4594b3f5453571d8b83b7c1871de7c72255536ce41a98c46fa615d28ab6fb7f50c27ba8ee56662587ddd46810669bcd2cb8d271769295ecd8f650609e79ea4788ab28a078a2fe477e0b864b87bf366c8975215a29a669b6d0f40e899b50912f8b76b9d88662deeeaf4be0baf760621546927b2c0d25fea91e5b61417d10c6a3534fb5a60d8950f8c6d2d66dcee84b9452fbc80bfb5c2ed2b59a8b399d27b4dac4e54778d339c158a03dc48a9e34793046e3e37f40a9a98c426085c12049264e847b5c6f2323275ce1489010165fe223c96115140352403ea5eca2e48ad76664aca547b4b9b4bb14c9099e8434f5a3510b14e602d655fb27415c4e901da09dfe039c0f363b4590b1b78f24e557dce7ebc184bcbb47e9ac58d9666c8290484e9575f3b8ab3f31dd22cf753ebfdf442c89e34507893614b3bb07299b927ee03b2da468c441c351d40bfce8c42402604360c49994ce2958b031c14496bdd1a50aaaf02ffb49a3daf9ed9551e5d59004a2e4d37a8f6bb20625c693e88e959749c169f68db8277ccec9a514c12b1c3f91a3e2a43a72f52359a3b2f2fee09aedd29dccf6db5523e21299bdce2f293ab6cd48a1540d99100655d1601926bd8e8fe68c38e50c1b77882736a5156e68f74b077573e64b262b5eda1d5ae9f4550738d4f37477e6dbe3fae722501d6f83cda1cc456201644d0deea02fc86f4068a15cd3ca95a805aa9a8108b8cf3292bc72f28f4958731653a2006c90678bc86bf8f6065a648185ce8b5dd4f46993cb6783e5893a9c3e92cd24efa4b4e2c5fea510e756b4f8cc7d0a4e59c1413eb7037b70372f2c3358077fd9b3d9a125540f9082b53d885fa50ba48eddbadc6173b44b5fe51d5532e31ff04c6289f672b2b1bd9e9bed4a526406a0be99bad1d71a1d0b71d66169c835a3747e0479ae9d8c7944ea714dc724f71e6ca6118b7711f0ea1d14e14822e900eb577c7182823c7ab9e504fd1e12ca70e70c1341a6f6180ab8a3321ff7ab93976014af49352230862a94df25bebd623c4c32fddc652f40281b21d0a1d2238cfcb59dfca35cbaf7de910ea3fbe9db14271dca75c91ada22b8284cf1cf4668f05ec6697b8dc2e57d3c069db3865f3d482255a6881c06842d92111881e933f5fb443b402f0b92753310e81bec7f9dc374ad4671c0cd51aac3aef43fe05cd751cdcb411620c88b1e2458d71bc3ea874c853e42fdf436e3eb92b9d999fbf78a5f4155bcd6c2b506f97027e24aa80dc7b04fab6370c16ea5e18540b12e9868eb9f212a560d83b1bacaf6681f8081a8572bf77ecbba782357f2f7cdd07a5295fb423ac3b8ba3759d68e290bf6a8abd2f765b5a3c68ac2d58d6fb02235b1b2a82aea8f6b57b2b68b921e9212e1aeed56c7e1e263afb00ebd696a9030128ecb21ec0487bad873da1d10ff35ccbf5cd49a165023c18f8df1440a09fccc6be0efb9db4df1b580cab7dba59811b147c45ac5f898fabf9fa66d043b860df942d36ac7d83592a51384705167bd73b106eb6b355a5d8c50ca45ab65bab13dd1900f3e2a3dacf10eb25be48d6f8653c48a22ff2e813448532ecff188108b25ec8e3fa0b001cdf7e0c622474b33e45d307c9c9fd9942c03d7f774a54e3c3fd5f70a4b7f437706fb6c15b2fff38c0b59936e7f1320b833072823a1bd02ad3c34cd04d012fd6f716af2c290b945f6dd528caa7f70d5111e43ff2e6e7de08eb5fff682d9056f1f6c7a74b1116262d3c837f14e4e54c383c71f0d18b0df1dc5ff77fc85ba22643595e4af71d1e90d75f25ffffda1212941b734b8c3d910f846d95da8145630df6c374610938cff354c098e126037267c5384026da10c8e7cb7b2300f72fc46e66ef4f1638972a5462c33b4ea2b16426ca5a4482c8bf5d7b89dfaf3bd790eaa0707aff17225adfdb2c62a8f2c9fda242b9722a31f7d37897e4363a47939942ebfdfb239a341994c68d0ad792f29a280325249d3d00020de2668e8e482689fe80e8c8483bb29a292321ce725964f6c1b2654d286ce280d23d88e1ca933610efbf5bc4a981d12b1f0605a433d97291ca7a9b4be2b151cdebef5dfb649175da8945370c31133c8931fe018e6a42a575b0883d36f5101aebc0b9d022f71b19561f5af5d3422592d0c2b8c2e11935e01056ae90ff455d44c5f46a4053854aa85394b07ee53d0ef1d02ad0d569a754ee636282437376ce2745d3eda1c7f5d9774a8f50107218a54dc815c372a483c976cab057d50987832a14afb0e988de437c39ee53b720044aec89de5412d05877c49877a3070a6aeb46423ea242b7a0cd229dc752df20967810eddac69c1d82e41fa38624840e9bcb1d9f39b4d4c3039cfe7aa30464211d0825ca8ebaf15a00efecebdf0074523b13202b7a9399004f5ae6939c89dc98bbe519013de305967b3d17b353c4ab93e8c1d14fdf5cd663cbe528f0fafa73d9c7ea363b531e40c1da8b4b69f40ca49bf96fe44e623cc05dc6478aab04ad9caaf687d2c81a5204af9acef6891c82beb88619b62dec9fc27162a3c81f831ac23d84b1d941c3dc3fd0640bcda1cdf877e4ac99272d58b6364dfaa64993b1496e5a8285c86bb1903dbdbc2f1d4b298871a0b3f35a77d86c451e2ee413a966fe0b62ff2848731200dc89a72957879d2ad5d2890345c54395496d61e2bb5a5649ac826457cd4412c277603d093e7802a4f483176f07ec86e36162fb725bed3c9a817f635b08af9f11b233b2aff27e78426ff3f3be311c120c2a8de2a434e7c2a70a83c19c3801d23691af51cb380bf964a99235b22fbcfa6e7bde36a6435215e939cf5bb32e0caa02cc016e138f7fc67d43d87cc0a582dc563136d50e25f464f235223cd797640f91c15e6d39c6b760e0c677dccf4678ca5c6c1b47efc9da8d8c02e0eb9ad8f429dbebd240c7340f02ccfd936df0ac26288c70633f19a115a0399dc99d41f937338da3ffa640f30c4957ba0d953a1c21e63d71a893ab4d7d94d85044039f6dfc8667bfe21d20481beab89a7aad43222b06083b07c9e5071de4489119d67eb51f887da0ae1e95807d55277ef6ad1004838395e25b824b760f0bce27b2c106a0ab8f22a5eafeed0033bf3550304b2e1f4c5d9e88aab7e9286286141953eb8af3f375acf284f568d268fc9822d2a34fca8f8704523edda8707bcdfb677dde6e7accbd0ce4325acd34ebcb9ae8c6e5358641ca6e628ddb989700469b695ab73eb6f636e3df0aca4eb981f63a3090e78dbefaab20c86e7edcecafea2207ea95b89def7ee933d1fee36d9691c129fce04d138c34735e3419529b4beb103b0d11a6295a2baa7dad2306d1137d01b01a76c3e46db0bf4e65ea33ee8b6a361ece640edf420e77268cf5985e4a3f0e37be0a6426055d9c841c38a8a0c0e8e4f6939b3631d7400d8697d3a4e8d480722d93e06433148c08fbed825215b052296727f6a119890f9663ebf1553a800e36550bd1252170def7286cb75c2545a7b7798001931ef1e2f1da7e1b1290b6c9c6a1b3ba629ee88fda62b2a908f6900b5f85400118e9e843da5323f33e1f1aaac613edf32ccc2bc2292712eeaf27bac41276fe540e5a35f23d6bd8f55c249824c7d93eb14dc70d7dc4bc1fcaaf587599082438379c66d4cfa9162064eb3e61e2658f2ea332315b35e965d505f5bcd746ca4356f5a22312eadf806f21edb43dcadecbf1300faadd9d8059151ea5d72f3ee928a086b958a2c81f11c23f6ff817ab13c354f7253e92f40a0bb257210bf611562a83a8d5e133491be89fa2aa4a45c859139fbf4da8da12abc25c9df28a8804448f1580758d46ad8b4b1a57ea098a4e44b4e972886adafaa298382279893a896e743be695dd2b1a86befbeb91a8313fcdcfecfcc9165b6bba316a36f0107e266a3d84a6a7a6aa0fb27f1d07ae76e6913cbd7bf1b8b089ba250cfc8a5e8012de97253f5f641720100af0e30f3583b19f08246a7cb14a91077690a611474b60544213611ce17f7cffdeee430d6f9972bfaf4ad7ca85ae17cb5bc902686cb1a477e8da74bfab77a9b52a9fd7c0bb78997498446e483dd4c49b1f9a2e400617e081d336fa0a44d88edea42ce860eb9096093090842b51b3a52fd94f6c7a35a4220502b766a37048fc92dfabb1d2eeeb5cebd3d54991e73e839bee98fa1409c956b9a03095940106a0a080a99a6144f8f51e1aa144cce6dc0818072cc456fd1c12983a3bea6a6cf9387d209636216fa0410e63391aa4d1030cca584d707e641f8f1bd3fe47a32e1f6c7265ab7c4ce57b4d127b751545929c0c6dfbd0892a7e9fd65b0530aa3106c88bb50a3325902a9372d5a2d70730d5aaec2beca57202710740a17b647be1819a4511088fc93e54daa4feb7d85ebfda293a1ad639f3d286d6fdd99843a729580a7f11118f59ae4f0982d8198b0a09163c22e19f30b496ae5a7087f8dd4bd5c38f8854128ca3a591cd6900cf0c3016c9b3fada9c4323ecc9456998966a49ed5c1701c0e2a43d64641d7b610a0f1ffd1a125f5e57456a4c5c7ce5fcd8491d199e18010a6a92419e6d0bb3691a8d6728b88d0f7472ba3795cc5358d3f3004af6c09874f47319bb269be65ff53c581860d9f4e6b7ee63fb0160c718d9502cff639a22a17cbbdf66e22441c076f52d061d88e70b438cda3274b8486a77aa8095b0eb08b9e3358bd9375bd6321dfec46a4141db553342e6925b6a6d8ebd13265d44b8a6fc321b1e7bc512c3f34ac0c9968dcedfd4c02330e5b92bcf65b9dc97ccd5b2b9732b9d4bc54299e82bdd236f33365076081813190668d362beb0a1b97376454525ca7e0fdbd0eb8418589c4c30d090fe6178130f00c4e1814c541150bbac070e356e80b1f92e352939ae2f8233d09641e4bc5788b151b51d10fb3788cd264d9cae339694520df5d5cce20044b23e8e770bd8a26a14988c9d4fedb996d06d1c8641291983a0edd5b9976c7d4567072157e69a053a393ed5decc757e476a2b63b0dd3e6966cdd5668da96cc125d70f67ee3834c12af6570c63791f9b308831b62946950682b61ae8774775ee9bcbff29f83ab29dbb367d5dba784416234c9b2c5c355b46bd4576af64fb4dde847c52a74b81f452843918bfe4156a4995428a057420127ee16026fa36b63210d8d7f9eecee9e8d1ec8bfca3a6d484bf02e8e1b344ff5bea4cd21b2d1764d7bd23867bc84220d511a6454bcd47f1f6460e495667a53cf38689cac122eef8fa1a5ed137e0238d7b2529f972278a170e2842d3e1dffcd1ada46739330cb3b5d708bf7dd9958dfb9f7d78d98421141f2ae9f4357c719387955ed5e112c5bad10e59162c2ce1b82d18679633bc93b52ee704dea877cfd6e6599cbeac6c9da9656c9cf8d19027fbe315bb25fab9e7e531faa19068dbf4783cd6979f01eba5e64e01e1f1706d0d433b4b822f6628ce990860749231f734063c19c2cea8e705df0b09ee456b9d6bac88146b17927242a0e86caf60454258e550aa910d24d32c15568a58a568e6ca9f4111027bdf643186f8c22f01fa1f5c21369de416e967cf74ef0d8174642d0c1decb67e0c7552a145a627b12f5c362851bda0e6544f3a7a2bf9970128fb77cae1a8bf76d370c1b717536cb77aea61a78cd265a90bd3999b01fd600df3e2478a60a1079231b41099b978ff63a4b4b4ed3a33f1fe701a01e0f7fc22caca572c9944e777267dfa2538494e41bbb7c99557053b4eef4138f0f8346549d711fdf4b9686837d4433aa203a63b7de77aa117b604e47eb24cacdbc39fdcb9372c01c1ea4e783148b3b9f1c57bf3d0b6c39a4ea0fa4d735eaf82cb44017840e04f51efc279a6bf80acc20994a4a80703fa716abf9c8c73674634d9a83226c8deef4917c49c125d7ff1b4e72788d28e7b189db35d8ceaff53a06d80d881fc71206f957d8fb5176f99b5ed1b82e2c121af1ed28bac11651778b93f923eafb218ab80893ee84b0fc65af4b425bf4111e2d47815f0985540573ace98f336bb6d53d7cc7639ae3fc6d4563eca76be5ec7372b7db7e3bd2d569b63da12b3adb86d8bc7e6986f89db16b1b35d32c21e11f36eabf563fb650760e3436ea3e1561a6fa0d106bdb6a4c7d604ba7409f69a4e741c22180f929717a768509aac3d3c6921de997dee84cbc52b52b3cabd762af21ea44482920787cb958b4aa896848f2a57bdd223e017c38ce5d90311f790c89c8d77a811de353af47abcd1c3580bc589893398285400040827b7450a64f594c4aa9f00ef5413c4f135412c6d569f32658c8a612c4ddeba45a8585a3be91a9ce6ff887d41227f8b4374bae93eaab36520a22a994b2e907f93b6563915d368050d9701fe2ae8a67dab25584c7a7a2410ae86244742b07ac0cb5567f1a890d4851fc512cb17b029d92821552405ee57d522133fb115002c6a31d16d98df08c8c7e1c638b999865701eefc45386e6e84aad928c5ba4fceb9c522adb3aa786acacc4a5f2155041f88855d6e78095084f7e8fcdfb422c5dc8eb6c715b925eb3160c169268231c79d74f2ae782eec8f1793e3ad0c8cf9392b4fbebd424405d20ea1df566ff1c455b583c02bb25d3149d3c46cd815a3c4034080ef48f3645685e212a0569b613fc743cc103c18f81b5cc4a425aaf68e52beea0d850c3ed3b99d9bddca346c7959adc8a78e4fc5fa1e85750d55a2d4166d522c55454ef478bd4e52b9e460329b2a88c24f52bc9a47db8b50d3f984404c0b57d69802a08d078b751db42eda12bdb3adb605749345a3d5a9b840d90f44a341cd5101a4a5e0eb7a28324011c22c5431746f56fa71345da2ab3983d916a0600c4f7c4a7234fa064bf3baf3df58a1c6909a64906dc4b024956c4caf858d6b8686770d03e3093e46d30c2f7183403b2f56848b99d80a4fb8c5b7194303f17c1aed102c4ab177ecc1603a4d9352048be88ccef980843f4b4e7b662157f0669dcd4c1a4eeb8868ba361ee3a9fa8db6c36043caf13b5055bcb1a82be8666e5b913454f1802798d858b9639a3a176518eed49843062fa17b727c4232b505ccdca69baf93e983b591ba062bb032684f70adcc1d23571cfc03dee80fa135be2bcc042411b30855d007e1ca03db3e2e1fa0acbdf624654c7adfe5c3798ac4230e55015186c821384221c55404cf14e119c232e0692a341d608cb9b822d190318e81d706c5693cc11724b73cf25b44141c03e585134cb0c58ed374e94840ad11ddf84a4c6b9067ee87f28706ddebdc1ea8b8e231ee41eb61f0dc5f8881c2b9a0b3b61aba614f71b5c0a714ab6e0f591ebeec0b6f888ca29186f0a161b97f7fb3fa3a47aed4a316ff748081cc726bd5508a02417d08686ea92b1b42c9c51e780a8fc302822f204747f28781f90f2a6242ccba76722b0780a0e80d5245ac6ba9d67f698cf64229ca2aeb0ef84d30894caba7e31151f41ad659b3d937f60aa7c01b0ae23e0be74ac5716423b1bcea6d49233ef4b21e1c57003c14d81d69869b302eea2cc12753fff99d9a830ae3057f174e1ad67ed846fd3537243704a18720d14310de10e47b00901b10e840830deea2d7a6cd21e7dae4c8256d81deb770c396d4035b1287229c2f617017dcd0428f5da2d72dbc6dcbf7185b8840cbc367170ae7612f549275444393e3384249de2d39185be8929100e33c13059583402cbe1007612fa7228133e08775e7a9542ef030f735d536854c7fb2c437267eac39f6cf501da9065e643acd45a78e2cde6a144d8a6ce329a427323d894d5fa8b050fab9f0e48a407e64989f4e54edbc6cbac586281527dbe3b2309d54d03cfa03f304dae06323fd42d45661b04c87b009a48fcdc547b6ad0bd128f1e35ff61a37080f8ee7266bbe9be3dbd747c569b6b3163c5a87d80b97cc37580e27c4cbc83e446ed8d7f8a24128e81d51ecb3d6759c004ee99b1a0a457aa70c169a2d2b6c33094121a1c7e691328ec15837879a1444ac70317a741992a1463635ed25413e1c59d089379cf8bac2ae027d5f1a7bf9d8182e4788121bf51d335a0f316aa230e8d6833a800f858fc1e46202f283faa8bce4e7b363dca4e470551e750a2a9f7004224f20312a2c9cc6409a84b79e1287abd5f40556095aa209c49ea94121a8a6a607256143ea53335a5026de03f2dfdce0bb3d7869e41088362b10c50f926451088d3a478a4a1416026d6b0faa64660e299c1af7155cbcfb48c1bc32657a13353d1a44309298bdd0bdbe4594cc9f4c6b32b644a8e2d77d13b9b82880721ae377728e0aa02c2b8d1dde84388b4ddb69647ea81b246a444324ec010fe00b9177565b929b593b611b5e080bf9f4c890d807a48c9b4aae29322ba2507c6998506d7512e4549fadaa43178891d31ae1c5ee68cd7cf0b284fa94705b1fa81bb0b04219a1ab666da1f36955cec08de77bd34a0ebf21e4e4a7e585d3b6021d928130d85ca0a03b94e60675a491d2c091bd676ab93adab187a8fbe01f01d1e42a5c7b6ee5ad9b83019d9cacc0975b24dfd1dc30c684fee3207ed279b6659288e70c88b826fb26e30fa4320c35e3c4c4ee8255a779f31ab408554f493576e15a32646066525fdb73c696f50c5dd8dcb63305169ac6989186ec1e380423fc68ec3def027bc6959520a5d7562db44ab27981af09b65bcc0f5df682915ed6bd54b7cdc831db25e6ea6227de3209b71e2d52c40f45f59da53b12338558b4996e09a90544e7dae0749cc9e55dc5613091f77fcc7531ff7e3bbfa2887ab140a221af91e47cfe52ae3592b6e73d3a82919a092c5a4f8aa6af4a4814e2177ac6b215f9e87ebd7b6ae829c014b09c1ecdb048b7ee80f4d9730d74a63b79b23555ec448badbbf1727492b4bd54d5c6f0c64da5bd2ce20f19d006b4a67a60a31fcc51bd779ec65f4d7574513e4bda6c5e609cd7f80b30aab6fc2088094220a235bb19b72a9f059672f630430b340e53131605d769aaa456696d6dbd6183d17aa0e810a620c1a82dcac5021c071f56bd7b1b4c32f41cac8a87a32eec302b1c9fef195cbf15725354839950651be878965f05f8531c4b79ba281ea31e44107741c8774cbd4b0363ead170f97b0ca5670fd04e5dc2ec24fed01fb08578ddd101d74630dd664576b874e53955a5540bb9682ab82ab9974b3ac170da51784b7e6e547463d30b8c1c24e00062e71e9213989851a219d2ba0dad3bbc644f1d091c7ecc3a46891c6a6172590c84f0c7c7eeca44539b30b768ca7c91db5ded047daa4d87e9083b2da1b20686c6ecd3e697d3c8fe20ca4128bdfafa6687fe8e2205ba215a2b60d7e35a563d974ddf931b886ef694cb00dc26bc631267745bf0d0979edb7fbc62c0f891e23f5756ecac74b5e5b495d09e2e8a0e3dc55b8c064fd32506584c48a049111309373951749e8976a67ac4dbb53c1d96527ff23213261c904a1222a166a3f5658a278861a26ab3a6ddbdace6c001822a51c9dfa576607186cfffa53e96d30dafe1863db6835751079ad83d68983139bc39a33175640aaa2eb3c26a31cb0c2721fa3b8d587591cc76378fb9eefaaea2ad3ba8bc4d9f767b100f16cb0a0af9251729f5bdd804c73130362163256c40bc04b98f9980f10d0ad690187978169cc66945c4733d25580d5d2746e0acfd92cdc797e8fb764a4f818579a6112a0cf320eb00136e09e3180a805cdacf2450adaa013a4f5b863240ae24c901033ccff33ccff33ccf9fe30ffd285aa1b58814692754efbbdbdc69574444686c18ad7badb552ec3bc06e4ef105eb0752084908a6ceb0dae897c4181be29b59abb29c936c312ec4db3f7b9279f22c1213a22ebbc854f9a8d30f42f13649d0ed7b5b5d10eec5132dcec91e533c1047c9878af7c9686940b4369b96b397e0eefec1d97ca7df7ba9214dfca0c79cc4309dd287b2549958b5b9964f3e646e166c7734e5bf3d18e24e8a59fc83eda787b4840faf6abb71ba240ffef9a447893faa568207fe04cd1f636e2d85923b985dd6a542c8a50a2576c04dd672ccf89c62be0ec97b4a27bd7438ad2f4e5438312e9d4362a9a4922489c9d923073fbbe48769f13c0e4cf9a69cda2c1c7a4b72b46be60de7dba8d9937a12c3c50d59fce4f292b216c336249914fe83493995860da6bf9a13a53db5776bf8c28967864a07570d09aa129b2459934a4b83dfdee3d5e17b215a34144f520bdb1b2ae59f010b3a91db26e969da0ce5c93165cbcaf6c93234255ad285980c674993ea7232862f9994eeb6173353319456f9cce438d9ab138674c3e479f9d3b819305c52166395d12f2817cda42fe9f2a245bd40c9bde7943e9b8a45bb40db7c9eb415e5c273d298db776c3f51b750c63c56795c4e484db580488e78fe09179fcfc2d1d2ce243984f7f458e073e96565a976e657f832a63496e40a8d692bb4dd9d46d52a75a8abc0a789e965a159254c052e8799fcd77493265338472cc75817b39f891412376dec3349f4ff350a4befa5f6ccde26a750d04f70d1b7546df1739e70dc28eee7abf2f1394e4836cd78e59e425c7318d0846ca673eef22455180f039860f2df4d52dc5462120f0396805caeda39398916c4c3002554e26b4c93a288a79f0149703af4448b644cfa0c408237e6aeb3d215a37e8ce3fbdef47498d8db189ac6932c543344d7c52889e50a954a88b1bbf4e7181b2bee1dc6a984af8d69d4d6174676266e496bee9009c65ed5ff39f226561418879897d0f727ef9d5fecfb5679d2e98be54a334637bde8d3a269495a9993185e1ce6394ebbb68bfc349370aee3972eba386f5844daf40975c9c59fc4cca1e49373d7878bdc3ae6552ae95cb95be8deb596c458dae2f8b1657f32637d95b5783de3df56d786ab92167bbccff6e599599c2b5f778cb924d94416e78c499caacd9237b1a0fcfc7e35873281c5922657f4e0bfa29b4a37adb52bd8da4ae1f2e5c5326945c24d9dbceea9e75a56a0f5f7df5b792cd555e8d61b2d53de49545594eb2fa68d6eb6c94c45a61296efc46e0d13155afe979cbe555537a7f03a9428677527ab31452667e84478540a19538a2e5a0cfe52498c7931a4c8edde324ba2b243330aa567b3d34251a8fb6bf277b61f37138a4fccfa396b984c33195030972b674be724e7ff1325b7cd9631aa99f59ea8e4b0f631446b8e7b27cce5b1cfe5841377dc0f26c635cd65b289b385c4a7fc6a8210372f3d3161decd44229292e92657e70e26d8d3d31855fed69d4b203def5d69d91b632ce19d6ca95b07cd26a51249feb7e61a0b25be8fb050d5cb98af4ca24b2f3b6927487b5724518e3bd3e94d4e29632512d49b7bfd94ad665620611a4fe539b2f28855cee495c898d2ade2084f63facaf723c3541ab14d470b2a69194fa83022cfb61c17dcbd737e1165b4f8f958d2ee6145a439fd491df5f11d27e2b3245cdc6fcd758c08f64415b1dc1119f12188977d338b275fb586a8adb3c3868a85d0c492da122b749e1409c185c9dacd17dff28283a8be36a6244e0995525010ac98e454cc1888838965933a35ba2a0404a6d71f647b3306ff0f4693bacd277a56ccfdb0eaf58512da4536dc87b523c773123f5825e1c3419398f435477a28d9435e5d115be92df8ab0732e50ecfb649eaf4e6a12c3fe175536a36493c14a6ed7ebab93b94c3e6a01932a8c5cdd9a11bcb7931878fc9cdd5e1efdd7a79910ea64a9e62aa5cf629bc39f4916a2e269820db9d1cbad1529ffad529ede270d2d0baadaa69327670a075a7bb3fd8795bf78693577d7b9996e7d4b921e9ec3b2ada5a53be0d9590de3b7a278ef86c404ed4c84bddd0cbd76096b013ff4cb06c92a861cdd992375a865b933424846e853b99f7fca2e1581b9e77e74bb2e8194c1a2dc48431e1d634431a7ac5648d1b5b2f56863405ed8889f7cc8b9181f1d43c7be9da2cc5c670928eb9c40afa2aa18981b03d29b5aca48fcec2509f44b7a974fb6f06863e6c300dd9fda0ff17cc521dc3faa40adf7be1f44d6d963e7cf5de85d3c4ce95c7bff6c35c40b3891d53c9646abc8563d7cf9574af59b116f23f31c9bdd3574bb2c054b47a87be717fb140878dfd1ad6397fbdc22649d9219fc7ab3d56a0532af1a478aa693a55d8c376fd86f5654a52a1ea5431896692183e660a27c1575634fc7c55a4a0a7485cca657f0ea3a08665895131c7550805a378544dd749aeb62770d9b7af72ade5b172025eb7be6262d6d1ab16d084ac3dd7b2cf4ae6550b60c2d3d1df659ec1dfaa052c01134aee760fb5d2522d400996e05df1c4abbe8d6a0149f83ed78d6d4671f31780044bcc132cee5afff4c7283b2a7c8e4a1e763786c9a4af2449ec183d1723d9f7dddfe6c4b31362bce1325f328cc5bb62d2a4d871af30fae4b9736f8977adc1e0434fac57aab59c030c326b2fb464058df317063d39bdc49c157f244f12e4a334bd48362b71deffc4185378c1db6b5b8ed52ecea431634aa5956e2305e8a24a6b1315a5935e450ac885b3716755733629e52504040417d57dd0784288e856c92d4ab1a46072761a0202620205d8828ecbf227c6140202720305d4c2b4ef39212020b4603d467a7c16ad4d422120202450c02c3e9d89de98c4acf91c59bc9fe339f3bc58ec9fd584e9e0b13d6c5898717284a5a5af687e0709eb130c31495656ae2e3de47082362a27da657334a1ff4e1b2f88ffb9f91c4c5073fe4b39650d796216031c4bb8b249972edf9b9e398712ca94ea0bb131337bc49184de325afb321572c3d330c33990b0abd768b8d734a7e1312c31858de61962f551c4188708cd9572922c5392530c338e49337ee19ed6d220420c722ef7ff530a9f2435a4069161fc26c9c53c17d5b57d061161a851e2d3874e52d19960b8622952b67732b6dd820830724f92c9a5cee9625c2f88fce2f774520aafad59e2490a22bee8844ba1679a482f92dbd8345927ecfc6a468417d6a5897c4f8e576622bb28d95c491d4a74617cd894219d04cdfd86870021920b638e6476dbfb5f8e70b19c70a92e9fb871466e917cd77ad67edb02cb4bd9b6cfd62249eabaf12b29945b660061cf88d062dfcb60d6a5b1779364b8a00242b89186191d88416416ee8ac7bee84c166539c924589c63f1c958da309632851823b040ed424cfd63abc9455e51fc1283e6a87593af882bfaa415539d65ce921a6985c9d286ce4939c6d81f6105111b675e35e579f94240408460c6dee0418d164456e1d59b87bd748ee3abe2f35c3126cd252757a93044c5fa3c27981cea244104156d2e592a7d2e1090c829fc7c8f9e72e2f57ebc820b444cd19449e9c5444a92d3a602915254ed3a1d532a420ac43fd3526bdc8c5f4546c19475476cea8aa72d228aab5e4a0cf76e32662414dd4649cfe07f041487fdcd97c2cd69b8fb13b7e6182649e6bcf92fc4136f8e693ffa7c96f3bd1376f7a76a1af3f00f27f6f09a394c9e0d93d2914d24e52907d1fc9252ee9a2809fa6a59736c3aa1cd8431ae73723c0fe3418c60e24f93a563c8aed514bfc41f43eed286978962db5817e4216209532a4bcd955f093ba309ad623b25dc7ce1e369acfaf7ce240e2d2659888824dad4671e47334aa60619a98844e29c9f72c61b39892acf38c30790702a8b9fe852961ddc1b0e041ed8f03384c0022d441e61ec6cfdefe61d91fac5deeb147e62d88d288bac54bc5ecef918234ed1f5763ad7bb592ab20893589d49f8541147c8dd892fad1e2f1f0202f2031d48001091443096aed73a8f88c89238265a8ebef5f9810e6a9041860b462087c82188ca5d2d3a96c1c237c4ed666b214c6ad52c0eda3b528874ed629fe6e95c7e42883fc727616353eda5060ecc284307bc37d2b84164106b8e1f7b890b8f9a0a82b2e9bcd15e0b010199412410979863d5b3c770974e0051084d61d2d4a5ede8bb8d1a36d6d3404306913fe09f3a4995632e3b49da0fd64c54123fdbb2e4491ffe0af12967b2a57f950f9d34279b091df53d5e640f48b595ecc7f2d8138be8c11c73ae9cafe82a97c9036632a5e9a3660537d240632378483de43ae5fa0d7372913bb47d6951626cbc3f493b1c7af94aaacb4941a40e05dd09f5edd80922742893c68ceed51513cd0a2273e84cce6e592a454bccb1e182881cb6d4db26f88c5459c8227128c66cc32de3ceb50d875af37b92eaade48fe91b4edf9b43758d7d98e6864349e2abfc4915d3c6226d48d29f8a214cbce3b611369c738a757e6fff745712226b50dbdc434c2e4df67c0808480d1beb831e744007ec211bd041440d97587f9fd9faa11f2f2392064e643f7eaa146ecc130202a282081acc3d1dad2fbb1a9133e82993f1c44227f76c6f740004646f780b226630b3478b39fa151229839b359bb5c4a49a36394286fd35e79fecfc47c6406ff9c7dc31b9f3783e1011c37147facc4eb6b12cd041240c957ca9a5ece44e4f6347c080e70b71b217693949c141e40b7a65590f6f35bfd5431e60112f98f2e56d57712998de85bc2461755e552e24f96e7293640b9566f397ff8c12d3e240440bc6bce95965afc26b269205b7ef44bc523ed79e43de6f38077c04112c3427e679d48db942497d2a5cedb582e1e5bd369887789b2255a853864ef1d2ab769aa95006b7bcbd511df354640a6645f3b496d1c39a1d91029eee77252d722d7322512809a95f5a9ba523cc328050c3cd28238940e1cba17de962ea24e530e409f67c968b784ea9ee469c50ba4ad74b494cf2be186982a9fe5296a85369331a610297a2d679ae9cc4898c1b0d48c3073b784064098ac70a9792d4b1da75253ceafb1a5b1bde7e26c1cacb1c2dc4c5041124ac9b926839e4fdc5d41fe31c56599a69632fa5c640cb3493651b53ad18038ae1e62839f889666f9819408ccb53747332492e6994020c1846d3f192dcecd59f2f8c5385989cf08fb37d30b2f1ce9cf3e59fd68181eb9d24f559695fffc235d1462cf794a7ac2fd4d89a551e6241dc5e78f272621f6b46a3bc38b33da879ea4ba8bbd846e44dce39af8b848d796f3fc9612ae67381d4458b7d32b997f2b838f34ff643b7d554fe165edcf954f198b1dcdba2d571d9247a1cb1ee6b619cf93729b4ce74f6b4384abcb7f82a753ffd2cac4c5ec2d4f4b2506c75c544b774f9c7a29cb14bdeced2ff715898e3344929e5dfdbfb156509995ebb2c5a885d61ea34665ad6aefa6905a7e13d98fa7a4c0d2b98555b9379b3922eabf8576c433fc5d91454c56523b7feb9546c6e7a927841e535e5a828d9fbc58fb21d2ce4a7d836c7cf307672dac84d5149e94c2cfaa5a084b3971413a27b278529aed372cc65f4f82892da2dba5d164541c692d02559921c0e851d2fb4c778d97562509462db3ee57ce2d53bbdb9b4eea827aaae97cc59bde64c3a41c6cfbae8ceacf37202135364fdf36b8b9b30dafc9cdfab5cee6842e9bfe4db71417332a19aaf099ff3790e13139dd0a953b83d21ec4b7c31b7f54c92e673c61255aa5849924a258a12739460b2347788e8d3d12641997ce249a2d3c42591247f9e2f5dd9311589bbc2a6da6c9704891a129fe79c64f98f58c72c4a54dd11849510dae94624a5f42e19c3a6a6668429fc56244a5e441e6332546647770c2b824be6995f19ea7be144709a3a49f27fac1c4446446df9c3e7877c880adb746e34c90e4e6c827537378db579f47230d0a109dde3ebe9491b621d99e8c0c4967dc358cefe253c393f9bb072d9ae5a4bdc7e5b7fdb76796a530953c593ee4f8612e62ee193601ef79f9549e0f7761e644a2a5f49547e9f63cd3d26fd446253cf0bebcd233b1e24b89452d8307f21f3f988a4f49725b9558ed84626c584ddce93a2462475f68ee55be960c4d6b94edeac93ee8f2fc2ef1c3919d3b746651451d0cb1a37ca759a551291247c5cfd450957bf21e28bbfabe31046e6abcf2a4b87210c8d295cf80f2b4912e28e4260d515e25aca724ad04607215efb7c8267bd90d13188ecbd3c4705f39acb9cb183ef10049a433f414720ba8a949eb9abda1f6760820e40dc157a266f43c752bce30f491ed4673b6713cba91fee781fb99ab50f56e9ea581ee949b774f0a1d38e4df1f7e3d2513aa3630fe475885d889472d0a1873ca849335cb552e72d477848923a4a10c9fb0ee5fc296d989322820e3bf07bf1772e98b8774e1d3c31e86f54b1bcac207da0830ed6e5e09af57acc33650ef5a539ad306fd919d3218724d1b2ed66f7002a74c4a198ee4ebc306f083ae090e698dbf2d4d23a75c71b0ade92e93cbfe855d5e1063398a806bbd45beb78d0d106364b6e09621634a66848071bd4b6e8dbb8f390f1afe14b6ac2c95c10d7935743712ff6e48fded9ecd360aabc19fb45375af66850d774c3c27892f4f43394b29bbcc9e4ac4e62dc0cc44613f3982c6aff7919fe2463215d244ed89c0c4731edd4b0961fff1e83dd166a723acd7ebec5c086959236ed7774b1c3c0cfe6fe8e26e6face60e06a2ccb43b5c74ef3170ef763eefe7ae15c5799c4da9049ee7017c819ff29d56ef50a73e12e6193c8b76f768eb7606a3f69eb272d559e6841ad4f2f9d56d509932c78a5b9f2e7ff5af2b1a08c5c89f56e6942bd5738780a4f76e35ac118efa827f72539c5adc22575da245b2c39a79e0a7c78b3f99b750a4ad5a630d9f3456d550aac6b5b12d1340a964c9698ffa5cb3814124f3bc99b642b0ff7138eee59cfb4a5e2983821133eac5c0a9bcb529a70c9f7f67bdb1775644299fb35d35ab4ef2ce1bdf5aefaedcbe01d257c7b279fb3e76bec49f0939c2967acb3030954892942fbd62eb3790c4c8e8d6e3de998348d419724e6db98b218c74bbb1a4feaccfa1b62a4edea95efd4a34bcc30f60d13db35cfe9a011061ecfde63c74b3072939245e2d349a9a400c35aafcfe059924969f9c5d131e65be7a4984af14597b155412b095142a517aba7f7bc64232f5e8bf9695312555cc65db81a6353b97c0ca9a22e083d312ddefd86493117fd5a5eabfa3cedf9c305dd596751d35b7c92f0a1ad5a131bdbe294deeb254aeea9f46a71f84ccd19ad042b29478bebc4d8a0a1fe726b378bbabc3a6dd38fc5ea6491ac79726a9c9293c76341091a2b4f422d8926068b63a83ff96ce6d593d82bbed49cf2e4fd39abb92231c69d6f8db5c28ff630b9635dfa6cb102570d9af1c5f3f25aab504d08b3d4d6287a962a3eb92afda4a954186782e592a205ef60a1e2f133dbd87866e13fc523297576a92d64dc14ebe8ee4a8cd6f45d8a5c6ca3a6c7a430c55cfac1e48b994b4651b4d2abf3d5aca58ae20b5249f07028b829d7aaa8e992e580a28abbba6d9732a5f909fdbaf3753de2f004adb631db1e3ac65386c0d109e584f293a4cf16ea921c8183134c4685b05c29f55b926313895ffe61ecb35d924a02e0040e4d1ccde4d8515b391c99e0c0c4d1a3a3abbd0d010111c29761e38c1d9481c625aa241d4c2c7176ae50f2558e69420c0101b9a1018e4a7072621aafae7671cb073828f1c6e09ac4b8739ff3b9362ec031094b0e97b752ce774ec27ee30c0f704842df54529d657d9ae432c01189ebe274e349af1dd7c0000724fabc1c69e92d55be1e61f6a76023e9b171061a35da8c1d80807480c311c54b4d9ed94b9856310404840c13703402ff0a1534e8c678b916233a33abf827fb6666896311faa75426c9713a797f3814a1cc9968fc188d137024a2127a63e7b99831e720c2d96c5b1d26b4b73c8e439ca4da4f429f14a3936c1c86f07395b8f39aba599a34be8c10346a7014a21c1dfbed627c94d78cb58182e220c439cbc49c75732fef07ae0210901ff88de718843b3e1a0e41f4952fa64c8ee925368e40fc31e69cb3636cb0868dbdc1018834458f413ae354dc4e0808c81f92d2c414af3e732b0d1a6ba3c6193cb8d134e0f0c31a33c79c312b2de0e88371291d1da3e984cbb2ffc00c1770f021f18c2bb3132b8d292164acc0047de3043638f680b59c30f2d7fb195c1970e8c15fad8ee929bb01471eecfbf1eb0ba5a1bb9e01071e34cde7a12ce5dbba14020252030d339ce30e7499749f49538d45c60a4c0002e23692a48c1a1c76604cb22458e5f0abe839ea90e7e4fff58b05b11f071c7438bab9bdd76e5ec03107254d48bd124f1770c841d1ba7c592a158762640e9bd1fdbb4587033d26e6b87f25d97f83b93b1693f0ad1bf46ab95aa90ddddcdbe9c69dc9a5b3a1d3caf59ad25b9dfa351c35668dc9b6fc182a0e35dc6f51f39f0739d2a064664fbfc9fec48ed7b0b11c68e82443437bcb1c67f0372d4e8e99e6369b1c6658a77366d433d9d72a1c65c8542cf9465ccc41865ffea433e4599283c4310683498ed745478969730e319cf13edde7b69fb6d3081c6138a7c8fe670b9d3c49090101f9751b33e0008331e553b733a1a43b45e0f842b69dfb525209651af6027db1c4d7d59cc24aa50ba8ff7892564d8eb4900bd7c89e77f7ff88fb5b302541adc25894a55c6a418d97725be579773db3c06c66fdeacf26ca6e1c58a0f6e2c7a509bd7efd155a71d33865a7279c90151c3fdbfc397dfb55d879f06684a06d9411b2013238aab06a6815f9f0f4ef3954f8725ef7ab8fed9a64a740a5eaf08ca6a3e3be14cef4705287a81c51d03e5c765636cbd8a880030a693889dc8b0b6911c89a40a10998913500020d10828d34427050861913200a9ca1403980d340c30737081000212413480000d240c3072a1840001c07eb031c98b1360e2000346e38fba07970e30c04b4000069381a9438630793b832d2f841192d892b230d1b21686c8d1a08f88884013e2091c97f6731a1ce2b5f421e513cf9ec999b734cc90d71446a99b67d3442af4c0f26d6c1e4fa60c49591c68d10346cd4a881808f45a0ef951b35e7d7c768c8b1f20108c80efc468d1f94d135d8cf400304040d33ca48e306093e142184337807be83027c24e26ad438c00722ae8c349a073bf0418d1a08f838c48721a810959c4e2a69b4ff20c420dcb4cc9d728a414cac0822106bde1cf2e45a3f009147c854acd7fcc1f96bedb4d63ffcd088d7959cf9c384d1f4213f0f33b7f79c5d627c4816cd294939c7dbbfe8630f7af0cd5a773db522c5fec803db7132ac491a735bfc030f99d0953cfed86a67ebe30e4c0699bff1786131d9214937654faa54b5697dd4e18bb93daeecfaa043aa19d37a8ca1df24d13930177c2f324f22f890c329598555d08e19e2ef003fe280ee9d1835d4688e121fa0f10107ae83fb06332974f6e30d5c5d87dfce76ba4f63e0c30df9597b9ab86e72c72c0404443fda7066ffc6cc3949993c1f6c58937062de3987243e400304048d0b7cacc10b312625d74f7da8210d850666a52b3eb4e50c13e9e30c65868f3290610c4b67590be9fc8718aeed74629a98a5937809711d2c0b3ec200066dad2b6dccf4f105a73ae5d31cda0f2f14ba1b5bc3c59f71733fba70e8d6e826a9e4eef75c284a6ee9630b1f5af8c84271af75bb4fb070bebfb7afcc1925b72b98f227c9be490e0b96b182d1e48c1fda33f5baabc21da2b24249c25438e7503bbbab244e99847c4cc1b5acfbb24e7ee0430a26f3a439952c7fb9a47c44010a5f74a5bdc9e849924dc2c7134c5e394c5eed4e60f73ddd546bb7a48f2668c942b65f0ca6b17626f0c14a8af20c9792f8122a041f4ad0efd4f543a634c3e7230995e57093ca7be64ffc40c2318c41c5f0834bd77ec8748d27318661567fb87fcb48464d0808081a21a8c00d4f23048e831b5e021010c7c10df71046308a9b5dbd638a42e0018c5e65f23e764c9f73e8177c98ce8dfb31be38ce64e724e7b69436f5e84542c760c29750629498c48317b40b5d502e7061c62dbcd1baa8bb70f984cdc316986c49d3b7e56c0cb716b4b8fd3b98455e66218b5830ffb7e7c10316489c6aa6d817beee040f1eafb04dbe34c7f18e7d6957aceb2a6d1573d256cba315fb5b7dceaf61c5a3d9e1a1c4a692f820f058453e365142eb79da883c547158c9d819e3a324493815e69b754d2d0b203c5041ad6c124a7353095a728a63797a8887cac3147889aff1cb53aab74b61a5e612fbc6f22005563e7dab171e05a5fd721b7de3ad25f134caa8118059788882f33c17b4a34ab7b51ea138fd79c85eb3d0d8567b80a2bf4c25e5df68a2f5fe89d3e6a45791c8c313e55e8c97e2a713e5ecdb5ea7490f4e949e67b17288f19c921e9b302bdb7de70e1276621e9a28da65c6e83772d2cf9930ad86e56e8e522a9d0726d878ddd14b8c423c2ee16f6c7d9c349ac1e5103248d000139cc1c3125509a204b2251aca4edee49c4d822bad24cc98e0a5294712d9c9a56629ed39f088042789ab5e5972ef4f9be12b680f48e059d53e1e2e75b68cc7231cc15b76ec497171c0a31107b7490b53ab2a2d33a2be29a10451cf516f5b44969d92a0265c2cd12b0f4514c4bfe498523d1241886842c335259393607300e6e07108435ce934cb94f5746a0ae141885c65ade2828ca7147b0ce22c7143ee8354122ae3218853731a0d09d38bef06624d9dbaec2c2ab34e1e8028657d4ed1279860de8678fcc1cc99769f4ecac30f26f0e883071f3cf6e04977b1f7262f7ad67ad044b24437135ad3253df260d489255c741b0fc9a399639b4c1e77d07664a437ba9ea4277620a7d363562d5518b50e5c8a1e6f7d7f9d848e071d728beab017edd5a0d9c0630e7e92dbd7742b1af090436f17b3c9319f591c0a9e4cfd525ccc0d6b052ee00187e34962ea2bc1fa36f9211e6f480cd79d9199927296abdca0957c92328dead18662a9aac796554f824d35f0600311f29f3971b1bf9f0c78aca1386963b231136ecdacc0113cd470a80ab327e4e8c514a234bc416e25aed66a27831e68f038839f3525b8e718028287199ccce89f49b20c78f8b8b6d1b55e631232fcfaa9a245e5a66c2963b8845c3d792e137888c1582947ac85c5cce987c1d18d626b9b01c39a732ab776bfd53c7ea14e49deecf33cbc70091a4a30e9e43dbab05589a69cfb25b12444f0e002a3db25a54ad15b9ef1d8425a727f9c922fa6c3f2d042299a64268f957864e1f1bfb83f9153720ab1e0c907132234b6739a5ce1f9ebeff2a4d22afb0f3cac90a0b696c420e50d8f2a142a899bde36e7dc3a55103ca85053e0e2c22d6a9448c1230a8e256dfdb52865c1030a6d7bf0da4f614a2c49080a3c9e70da9c0409d30a973bef14783881ed7c425892a498e0d184e3ef83fae60d75b24b050f26acc1d7becc7234048f251816a23dbe09dfd239191e4a48ca8f1ffe32f748826fd14c6392cf22b22a0f24f83f6b69a2ddd2d367041dc73046318a1aec272bd82125e8204655a2299b6f0a9fbf0b7940c73028616e4ab0f6b20ebe302ecd170ac6f5bf31ad64cea3590646f6ba397bcabb954df2176bdaca61d2dc8396ac2fcc9dd1c376d37c6bb4178c54dade7becec1af282edb9133ff4a24b731dbb404a7c6dd5f574f194b82dd629d5c4ac7261cc99f3c5180b4f9de3830e5c306952f64793e43b9c48e8b845294a6eee982cc7f9451db628e5d1d0a9844eb9d46363b90c337860c6f2073a6a61aaed9bc8781ef7be053a686112de624fd65b833cd0318bdcf32e3dfd9f6d7b38d0218b585c3186f34d52c1d3e53a60d1f10a2d7abe91f3ab46872b8aa5166f212e34e8680527e51463e2eaeee67c3b58d1b18a5245a5a250a16ad0249b7249afbbbda0e314ba987f124f3a11cf260c3a4c91c6cdd9ca45099f96a2fd9b8e58a970828951093a4841828e519cf746bd6439c142fb28e810c5194e92b793a393e9d9110a506c2fdd275eda3a3e719cda5959ec67b3da1377644a71a2d32769d24e7cf94fbc02873da8f33549240c06c2308ca2180481c0e9690c93144820384c1e0c06435118e6b9ee031380804902b160240c0842e16020100a83018130180641200441208e41306ac61c4a561d1b6a7ea69bfd2fbbd6894fa4056a289b4206a10b401002ddd329fa98ec8a388c9f707a20a20088677aef54fd77fe4a236c26e7c1835f5db1a72a3a30c618189c6190dc6f3344b74bfd18085784cec044144bfb4cede3927b1ef037423212d7aa938bf891c1f722e0895f43c45466bc1e65b2539f063fd6f92ae181c1ba2c44181d97502f550c8e9773f9b8ac584987ebb1afb476d1756865db0911af6e93796c2b569c903ba6257e2da7b7d3fb9a8ae1dd1797c51d667a224958643f0a687159c91c375d782f764b7c405ed787d8df1f8f69f1016cc292b3aa8bcee0142e4ee3ed0f4f0d6879f97fe27cee89dfe8e339b57fe9a4dacc974ffaa00051ef3bd76991f628c4df052f4a9e27314073c3f7a07093541816a4161203e1c97bfeb8d426097c61cc2fbd06ea12ecbc623b72433f6f6e0fb172b5b2f19cb9c03eaf7931e8b933e8afdcf9a20c5292bc57bde735eb424e26ad63385a8dcbec14a82ed56985add5c18ba02e4a41574cf8d71ab7218a25841251494c99afb7c25aebb9e14dd13c662d96dda65b5bba2d0288b0c3c6e618fec5e2c6b397c15d6d9ce5b70780043498addc1dfc36a043ee963352cd1055fff2bd07face32d0cd917a1d281efbd6737766b295b4dc655c8c51d293540e600b3e7a111074d04369693e33168bbcb4dd1cf43c0a495868dc56895fbdcc8bedf24863ea39a62077ca24e06589d098c345b61d4570a8996e5f94cb80aef4c250f0eca3a49c884d9035a4ec0f40c1a3a1ea8a3670c6c89fc4a3a37d9a5a09ffcaaed520358334fe7f44327ea479ec02200cff725948d134c54dcc0a846f3b77b55776c1537fa13b088a8aea92c92da3e1f6ca5da4a3947fa07782f6b81abff1eaa98b5810f2777aa5decdfbd7e2ab9cb60c09bee210e3de37cb873c3d330831054ab508256d5b971352aa2f3f8f79b9d207dc7847a67c463843894088940dbcc70699f8f209f2935b80e43688c247199d179510ec49a5ca831d55d42d4445d7b2c8cfa6375608f9f42a86bc6eab64a3ad9e0af442bef82127352c31d13fca8f64c1a32ed24fd1ca42079b5b139dd588c15a4fbe7a35a39f021d34c727a0000587b9446a059bf0eaa0762bd770bb145168f984a09c24feb3acb10c419f1ce875969cf44844f45744f054447cf39b02a6df6cff8af03c4ed431601a9aa64b8d69b219b094e1572443a62ff8553bbf820c8a5c91f1d874ab4cb4a8301bbeb8acec185a862aa683f82df349d28b748e36d0ec9814e2d71ecb5a6af0ff1141908820f907d3b06fafade06584a624899e86a9f541708d7116e966da5e7b9f9afdeaac16c6fab5a1e595ce03e44b66f78f8990724fbc449007824889b9bb22c3b292e916ddaa202358cb9a8a66033d525f570945d3641eed2d96185fd998c5d5babd4d1694429108540cd40b029bc87e5262f5333791023d1901610c57b5147df0b1ec4e048e6dc4d942455c560937041790a1ced1668b95a0c36d00a62c060f2073009116847b9fe403c602580cac1518664013a7135f872fd59607d07238dbc5b5b24c3af08571e235c86c5db1bcff316ff976d14a576c96559e1baaf5b251a39b2ce4eb4fd2451562d3e06334efa75c4afd94f4458995897373cc56468e8f297e67066fc4240930f6542ea30be0d28ca1f6caf36adc2a974ce626438816f5a23503249e14280bf54918363db89354b57a64fc728ac7862944cf181bcb8145758b92afee3d36ef3b98074db1894eea1fa05275c1c20bcc2c4025772818540decbfda84e184f24d961295a5ca72669ae20eef01fc5cbc09ae00291a7c2f2349e6b7604fab2bd84f4880adb6247b904e2dd5cb1b57aaf0045bef133e09980d313c41c4f1dadeff7dda00b03c92e8a4b547a07426227eb173ea6157c33dda3d207f7951aa04e56564193f2cc13f95863a7d16652526e076d729205c506531f924f16074a2f236b3a9e76ad177522794049f2f73b796222f54d2a12d78206fcbc68d4f52e69b9c7bbf7e4a14e4c5de96d577d2962f55e15d088a528de505cc37053f78e52d017aa0683338c5297cd9819b2500ae2cbb23ed4c8037be5a3ccb4339f941cd28918bd8351708ba4ce869399b9affe0706629461891d1ced209e7fe93c7c0f0afd437e358b293ceca1cb0da6f8a4fb7fefea84ea2a6c7f1a8491debca8f3a040e24008475949ac47393143a797c4eb67fee01adb49467d174a58d915acea6cc5c6c7a5d575727f330eb4e958ba4071e2c08efeaee66cce4565dcd2bf13b5722f2789ded4a97e0c1d6cb5b50f99dcbef8b754a42615ec71261d1e43ce1148b701b9d750705eb67853d50316d4a6003f62826676248eb903dc0402f63c98485351e69b80f4f957d08397ce3e43b1abcc7e4e96f46f4ea48df2242676bc26a5fc0b1741bc1d74177bd402f27004c168e3c386da6ef746516becf0a794d2c54d0f99a9c844460bbb3901a1cdd45e7c8599f0eb9a3e7c1498051b8d999e7938f991286c917427a9d3de141e205d10776063c10bd1684a511daef03b6c345839cb49659cbf85a1acb9eb237da8d44c2bab828db905c3bebd8f1bb59005b34d994f35918c50558e66e610437e48dd704825eccd76319b0937e3abd975df85f9ef1e8550c67b7b39d60d35fa4537dc33ae44bb4a5a17b6966cdc2b04cfc489d56131e4e74c57b3dc3d85e997fea55d27b477e132d693b9db5c508e4213331d672d1eb9611740e04dc1aa086538573eaaab4cdd326099fb4cac8514ff749144cac2213c3eb8b32893b14e2e300b0ff7110ad423e443051b6418343ad2b3eb6fcf858883129a98b650dc2bd77c0b99c2915bb7c2b41b2e01a40d25fd0da9d712431e648c5746e71c91afe2b8fdd731cac0b548bca2309abb1f0ee0e6babbe712e246bf4cab26f05951807c9d197a4114fccb66ad43a373ccd3d639d5927cc79306980d46b4ae208b5497b8bbb6b5334f4790a8625303c10fb9532c335bc2ce96ae97ee0fc6f93d833b0b5af93001cf9b01f18fda82e6f4c907092ba18ad9ad2c5bd89d803704504a8bd39f4b73ec56a483ad977b4d01b7b30dd474181ab61b4c60993c86f4c12d8acf364e03147806ce20361e44723ba1a3924aa82c52ebfdd19ac9a3c7f58e95957e0052edb4c5e86677e9b462d6511008177685248e35f8437c310032842890125f77f73eccd82519433886aca1301d706e541b0fb08a4671e1c182843691c881231600ad93de03811ee8a8a034c47907fa9aa1a8a0443ee333d66b0cba30feaf54423f80f03bc179c76138cc81327989b1a5c512b38941f57e03585652da860e010fe9b87a8584ce639fd3f929c5d0433f8f5ac1b852eb16a2229b3bc3456ee97e2520d0138d96c497bf77ccf303b22626dca8acc909539254649d3fff86987fdea59d13392729c105b15bb6c6b1078fd4e4b705aaf80d0c00c6495c4c9731351dbce92119266da7e735e79ace97a356b29b43f2fab3a8131950024c7e4a85acccc62a2a4744135d482e542d6743a325bf0a7a2673b4b62a2fc8dd4c458eb4991eb5daa472c56225eb92fd3c429a1cf63ae2aa41375cefb8c6de79a678cc6e6afb6ffcd47ffc4d7564310e0bfd08e754286aa68c61ed32f21b4777f65d31c8e0d86f65b2c19989e26537647092313ac6936c3da9763ef7350d5c57b68441f6c4bd51b17ca32ec409a43c5587aefeb58f6e5c683bbbb10ccea4783f1121b1b9790a2f520c2d324bf2a6f0c6c3c4e60e496324b45f2dd6160b9d4529dc6a93ab615ced2c6fdd179aa04885c84fb548613b3e1733b38e5262d0b492c19284b3fb4689ad0091aa488b9ff169a4677e3479aa2c4266763edc9ee679af8fbaacd80a481bc08b2f882130f532a1c5d634a3207b1c9f74d56cb6e9b7278fd864bb60064d3bc27b24741345158f8eac14fe9351af2f319258b12e0f2db8be3c81010406533f7c97f0e6d4b3733890770c2a034ff27685605f7a66ed3e89ceba4286f73297c45261e77c5d73de0289e47b711209552dd9896dc45c9095850275ccf42540614cf3581db579205fb3577d460cbd966d89bcd653b4161db1e20b57136cdc4829be303ce5d7d0807fbda5a0a2ed4418c8030b515cc72e2c6599391a58baf90ab8bed170158f5fea9cab8520a8b60a70101498b35d663102af2e59d2866f71cac745241680e4251722410607d5abf72342129f4f991dd5e5cfcd5684b166fc7eb303dae4168aa4327d5d42de6d9c29d9c2b0a8bd0500317a6dd65cddabe82dfc3c14b08892e7cb176247bae2a223694aa152211faed5b7ce346c160c3c4e8530157e0f19822f0c803f131a475f22c21521f72b0908aa9a1cb390f7006626ea65e887335c0bebbe8130d8ce244b545bfa65ec1b883704bc788d71cb362d866c016df24ed8cd57592d20fbd7ad3f777e98ccadfb19fe10686ab828caae800d7375c4c3640dffa34c5e814f818071edacf87cc1694f63f97854c576d7abbb8b594e3d8875d7b63dd7e9ed5b271993616a5b56b03f7c69a28366ede696004ae92a08af96e2684c4aaa01585959309ec96f1e93487ceb92b7c3041ef5bbcb526296c38f8c6dcc071a768a5e58abbd46cb2270ca3228eb71d33988fdc52e16edf4a99c2f36360b97f08589750764a1b7102677153eab4500c450b1ec427b961300a8ce204df7b80505c6a321c9697508ccfcfbebfd03c8517614f907cca00582d5406c90e8318c45292d7c8348bcba08a5a8869f8da68572bc7b0c08c54e4cfcdbad01e667a081e7d9e783d1a9bb72c54aeaadbf9d43c0bdd00c30913874ac2b58521526e3e9b18068656eeea057043cb68080b6b3ba67b7411782a7774452f3f4601d370fa4b34a85dc00f984a20704e3ce11386df56ccb69b18184171263e801623ee96e55ebede96ff10895e4fd10ba1be3da8e480ad99faad7fd9c6a3ea473e5c83132be67caf1c1147c1e0f08fc0b479cb97e002027a896724d87b7155070f2cb0266a333e0bd4dc15b213a5f1cce8a74081e40a05dba3798f9edb1ae138a73b6cc187908de83c2e1c8ca1ea72e67e800ee236a5db95f2b21ec879be77117bf2dceb7d30608607300ac3995181ffe577fe08971ef95aa29f82d69e9b41cbd2d3ca87c1ccffa863b9267138ad730ebf249981a1b3c84af7c9861338d98237d683b90e385c018a05aeeb4370d2759801b217c6d6b0d3cd397a445463e3ba955ab614a2b2c028bab745bba085c81a6d00f5e16cee016f93884e235a29886484af3da2961281b2934c44694fff13511299a92a802e5a886f7f4031e82ea325c027d8180231bffb81a51adfa31f949f9a58f55595d0560549b4a79823d96ac40ba81a293fa9e334a7264d7ac8129da6d5994552a2ec006b8c31d99e19851a31502f869efae226549c51fa3ac438dd0d83153122b0c096d840a32a9b3a491e8d12b6a66ec49b43320a0c33a8679ab02807e1aa8434b46e0c2b2720885346504382919e50d6f87e862e597f776d902e194dbc821a75d82a693f9dabe9459bbe7054e67989b9b5e1d174acaba796254351b454471a1a8f3c36150352dea07cfac2216d4fe9e4e815fe9c975ccc166280a625c9d5e8ec2235ba6229d1d948dc3c4b1d01c9d79a7dd959939d3f268dce828782b848d0504a9e11c7a08d811c2d7a96db13786870ac8a436c75ac3ae4869bacaefd462b79a9e6f5d09ed19f176e5c2ea0e5db843893e6a382845c8ebacdd776a712e287ba7175cade2fbed24fa6b9011601252cd71b4f59d80690d6b8d636a57d7a660474fa958818869e12869c82132ad2ee47bfc5ba63250ba5cab28a0fb9bb70e80ab0a9e3d1052c6a1c2affb153a86ffe449d6d96d00f0a91985fe75abfc80e7956a198754b37b8123ac6407e0ac4bfa061ad441627d1d7a4c6570d3ad5345ac05fb6262e599ce7cef26097aff5a62618519e6a69237cc2996fdc5ad2b5f6871a7b1410144adff525e6ba0432f837f5989691f7cb6cb679d96da61d605587026c62e92c22167f5047db735582feaa0c4953bac025e6a1a5cb4b4a9c04f68359090922e4a3b9184bf84f287b7098932107035d394c96695075ca2fdec8ffedde07be0d85501dfd8c2a0934dd86961f417f07573521a595024bf7365ba1548074ee887bc335763aea23ed06dc441a6c6ad4a8f7abc88dac14ad125de457a4a69d4441e769781f65b38858596b23a36a130d26ba32c94e5ca6d5a49c4ad7eaf91a8e42a68da15e855dcc4ef36b59cabc9db1adc30db3bc95f38f6c771adb5c280658af4d01402d39661c295ae2dd4982025f2c91cf7d85795277030e00b0db550f0a8767adef8ac39d2e9cbef178d7fcc914bee671a2b9efb2c8d0e488ca64ebcd654349e8349594b9c9683081e6501a12e8bd1990b3278a708ddb6362d2aef38f6ead934163e3238140c2f736b974b544a1e31d401da55391c7e3e9d4bc22a8865ce359a0503bd237948dd96c45345fd279305a6bf1e4ee78ad2455324d6bd94994b65375311f72acbf82b5c1d5d89a2ac6fcab54adb5918271800f6bd4e93dbb5e1ba6277b0b0e7088dc5bba044428b8952daad2888cd92db72c355bb793f5568fb4914078943e004855f7782f1717bb6b1c6df27d63921e1325755d28de86cc46f8da8b355dbed41b4acf10797f749d002d83f157f98d9ccd48a744a64d7289864de9a225713b6b0a8ea4d3cc3012726da5959069aad298b836eb1cf23351efaa5947f87df2458057713d539ae2a6f4bb3177997e95099d55131115831ed0df357b06eb6244f6d33228afcb49f376505e8fe13a580afdb58c64ea76d2d928ace74bd05e96d2cfecb721d25fc1fae06abd2c356ff2175752c002d9e0aabc9a4d0182b9c458cb5a76455829d8fb57a5e6bff1b1be552afaabe9257ed5482dbaab956a361d3ee492d55a4c27b961e6189158d24d2d5490435c761268573173912406a80891d2a22c90f72d7b8a1d5669612379a5e67f7878d1da641a12ae0885abd3429a46b519f4e4d2ab78ffb61656a8953e05", - "0x3a65787472696e7369635f696e646578": "0x00000000", - "0x3c311d57d4daf52904616cf69648081e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x3c311d57d4daf52904616cf69648081e5e0621c4869aa60c02be9adcc98a0d1d": "0x20dc8b457d69477f29e5900b87ff546906bd6f1ddfc2805686ec571d905973883670b8271aa09a079120109444b69dbc16ccb9d11e205a77fe9aef105f00bfff4b8012cebd357b832321efbff52414503d834c38a806e496eea2b6ba93ed945d62b447c01b893738ad904fc7e6cde03268859354a7cb7622b5363787d85e57d55d040c2f09c4b32fd4ecda945acdd3a4bcf801557462020991f9231972fe04367684c41f0a7bf06c05d59c2dd733b82eff492211e9374ba640b95f48cb346cdf71b0e52b6106bc95f25285c8613dc39ac76cedb7671d0607a4f850ba81b1e9e50e8eb69560436bd1ee7c172144350591e743d3dae6ea0d6985dff5b3ebf93e9b18", - "0x3f1467a096bcd71a5b6a0c8155e208104e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x45323df7cc47150b3930e2666b0aa3134e7b9012096b41c4eb3aaf947f6ea429": "0x0100", - "0x57f8dc2f5ab09467896f47300f0424384e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x57f8dc2f5ab09467896f47300f0424385e0621c4869aa60c02be9adcc98a0d1d": "0x20dc8b457d69477f29e5900b87ff546906bd6f1ddfc2805686ec571d905973883670b8271aa09a079120109444b69dbc16ccb9d11e205a77fe9aef105f00bfff4b8012cebd357b832321efbff52414503d834c38a806e496eea2b6ba93ed945d62b447c01b893738ad904fc7e6cde03268859354a7cb7622b5363787d85e57d55d040c2f09c4b32fd4ecda945acdd3a4bcf801557462020991f9231972fe04367684c41f0a7bf06c05d59c2dd733b82eff492211e9374ba640b95f48cb346cdf71b0e52b6106bc95f25285c8613dc39ac76cedb7671d0607a4f850ba81b1e9e50e8eb69560436bd1ee7c172144350591e743d3dae6ea0d6985dff5b3ebf93e9b18", - "0x7474449cca95dc5d0c00e71735a6d17d4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x79e2fe5d327165001f8232643023ed8b4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x7b3237373ffdfeb1cab4222e3b520d6b4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", - "0x913b40454eb582a66ab74c86f6137db94e7b9012096b41c4eb3aaf947f6ea429": "0x0400", - "0xa42f90c8b47838c3a5332d85ee9aa5c34e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f308ce9615de0775a82f8a94dc3d285a1": "0x01", - "0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x0000a0acb90300000000000000000000", - "0xcd5c1f6df63bc97f4a8ce37f14a50ca74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb301fd292232dae2b570b8271aa09a079120109444b69dbc16ccb9d11e205a77fe9aef105f00bfff4b": "0x70b8271aa09a079120109444b69dbc16ccb9d11e205a77fe9aef105f00bfff4b", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb32696ff9dd5b58170b447c01b893738ad904fc7e6cde03268859354a7cb7622b5363787d85e57d55d": "0xb447c01b893738ad904fc7e6cde03268859354a7cb7622b5363787d85e57d55d", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3326eefc9623d0bbf8012cebd357b832321efbff52414503d834c38a806e496eea2b6ba93ed945d62": "0x8012cebd357b832321efbff52414503d834c38a806e496eea2b6ba93ed945d62", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb34c18773c813024fd8eb69560436bd1ee7c172144350591e743d3dae6ea0d6985dff5b3ebf93e9b18": "0x8eb69560436bd1ee7c172144350591e743d3dae6ea0d6985dff5b3ebf93e9b18", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb34eb162433582a2de84c41f0a7bf06c05d59c2dd733b82eff492211e9374ba640b95f48cb346cdf71": "0x84c41f0a7bf06c05d59c2dd733b82eff492211e9374ba640b95f48cb346cdf71", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb382c4e1e553751ee4dc8b457d69477f29e5900b87ff546906bd6f1ddfc2805686ec571d9059738836": "0xdc8b457d69477f29e5900b87ff546906bd6f1ddfc2805686ec571d9059738836", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb39b36fc39f221acaf040c2f09c4b32fd4ecda945acdd3a4bcf801557462020991f9231972fe043676": "0x040c2f09c4b32fd4ecda945acdd3a4bcf801557462020991f9231972fe043676", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3b147d8162826a908b0e52b6106bc95f25285c8613dc39ac76cedb7671d0607a4f850ba81b1e9e50e": "0xb0e52b6106bc95f25285c8613dc39ac76cedb7671d0607a4f850ba81b1e9e50e", - "0xcec5070d609dd3497f72bde07fc96ba04e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950144e983536ef57cf617572618084c41f0a7bf06c05d59c2dd733b82eff492211e9374ba640b95f48cb346cdf71": "0x84c41f0a7bf06c05d59c2dd733b82eff492211e9374ba640b95f48cb346cdf71", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19502162d00a2134b03661757261808eb69560436bd1ee7c172144350591e743d3dae6ea0d6985dff5b3ebf93e9b18": "0x8eb69560436bd1ee7c172144350591e743d3dae6ea0d6985dff5b3ebf93e9b18", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19505ca51ea81516ba7c6175726180dc8b457d69477f29e5900b87ff546906bd6f1ddfc2805686ec571d9059738836": "0xdc8b457d69477f29e5900b87ff546906bd6f1ddfc2805686ec571d9059738836", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19506fc79dfcf079cef16175726180040c2f09c4b32fd4ecda945acdd3a4bcf801557462020991f9231972fe043676": "0x040c2f09c4b32fd4ecda945acdd3a4bcf801557462020991f9231972fe043676", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19508512e4feed3e68ac6175726180b0e52b6106bc95f25285c8613dc39ac76cedb7671d0607a4f850ba81b1e9e50e": "0xb0e52b6106bc95f25285c8613dc39ac76cedb7671d0607a4f850ba81b1e9e50e", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d93963836399023661757261808012cebd357b832321efbff52414503d834c38a806e496eea2b6ba93ed945d62": "0x8012cebd357b832321efbff52414503d834c38a806e496eea2b6ba93ed945d62", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f66f3d370e6b72dc6175726180b447c01b893738ad904fc7e6cde03268859354a7cb7622b5363787d85e57d55d": "0xb447c01b893738ad904fc7e6cde03268859354a7cb7622b5363787d85e57d55d", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950fec98f6051cef823617572618070b8271aa09a079120109444b69dbc16ccb9d11e205a77fe9aef105f00bfff4b": "0x70b8271aa09a079120109444b69dbc16ccb9d11e205a77fe9aef105f00bfff4b", - "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x20dc8b457d69477f29e5900b87ff546906bd6f1ddfc2805686ec571d905973883670b8271aa09a079120109444b69dbc16ccb9d11e205a77fe9aef105f00bfff4b8012cebd357b832321efbff52414503d834c38a806e496eea2b6ba93ed945d62b447c01b893738ad904fc7e6cde03268859354a7cb7622b5363787d85e57d55d040c2f09c4b32fd4ecda945acdd3a4bcf801557462020991f9231972fe04367684c41f0a7bf06c05d59c2dd733b82eff492211e9374ba640b95f48cb346cdf71b0e52b6106bc95f25285c8613dc39ac76cedb7671d0607a4f850ba81b1e9e50e8eb69560436bd1ee7c172144350591e743d3dae6ea0d6985dff5b3ebf93e9b18", - "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x20dc8b457d69477f29e5900b87ff546906bd6f1ddfc2805686ec571d9059738836dc8b457d69477f29e5900b87ff546906bd6f1ddfc2805686ec571d905973883670b8271aa09a079120109444b69dbc16ccb9d11e205a77fe9aef105f00bfff4b70b8271aa09a079120109444b69dbc16ccb9d11e205a77fe9aef105f00bfff4b8012cebd357b832321efbff52414503d834c38a806e496eea2b6ba93ed945d628012cebd357b832321efbff52414503d834c38a806e496eea2b6ba93ed945d62b447c01b893738ad904fc7e6cde03268859354a7cb7622b5363787d85e57d55db447c01b893738ad904fc7e6cde03268859354a7cb7622b5363787d85e57d55d040c2f09c4b32fd4ecda945acdd3a4bcf801557462020991f9231972fe043676040c2f09c4b32fd4ecda945acdd3a4bcf801557462020991f9231972fe04367684c41f0a7bf06c05d59c2dd733b82eff492211e9374ba640b95f48cb346cdf7184c41f0a7bf06c05d59c2dd733b82eff492211e9374ba640b95f48cb346cdf71b0e52b6106bc95f25285c8613dc39ac76cedb7671d0607a4f850ba81b1e9e50eb0e52b6106bc95f25285c8613dc39ac76cedb7671d0607a4f850ba81b1e9e50e8eb69560436bd1ee7c172144350591e743d3dae6ea0d6985dff5b3ebf93e9b188eb69560436bd1ee7c172144350591e743d3dae6ea0d6985dff5b3ebf93e9b18", - "0xd57bce545fb382c34570e5dfbf338f5e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xd5e1a2fa16732ce6906189438c0a82c64e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xe38f185207498abb5c213d0fb059b3d84e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xe38f185207498abb5c213d0fb059b3d86323ae84c43568be0d1394d5d0d522c4": "0x02000000", - "0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000" + "runtime": { + "system": { + "code": "0x52bc537646db8e0528b52ffd005844d8023a5443ab5620d0ba4a075a9f151f05dd81c3978c0677fad5133d27a7814bf49e9d61daa9fabb0e7c6c761c13f4eed9b4fbbffb2c93b4b961bacff04e6f9db0e7fce82bd44b87e0b37d1765514949232458fb7b6f42e4de32c99452cd0bbb09970a5d74aad0a9a273858e153a5f74b8e880a143039d2d749cd06942e7091d2674b2e85c898511f3a233a593450c8b8e94ce173134b1333951724c104b236704392488bd11bb41ec2ae646ac8d181b3133b135626ac4ac626562646268c4c6c4cec889cad12127871c1c729ce4dc90d32487490e54ce921c253949724490d3430e929c233936e4d490c343ce0e3921c8f921162606264646ac2a36464c8c980d62596235884dc5bac460107b416c4a2c04311c70d0e09cc10983c305ce163853e02481b3040e0c705c8023050e11b0387092e0d48063038e12581b30366066606be890010b032303060646051b03530386066c0b2c0b18169817b02bb02f6034809900f6034c08d80960516050604f6040c04a00d30176032c0758131c305e66bcaa5e6fbccebcc8e0a0f12ae355e585c6cbcaab8ad7d52bcc2b06af285e53bca07849f1bac1cb8957921712171b2e33ae355c6ab8d27055b96ce0c2c295c695c54586ab8b8b8bab8aeb0dd7942b0cd710ae285c317041e192c2f5844b062e290084c0645869260da6151ee312e265c34b87570e374e806440344027e00d2e282c38624aeca860470a48065886978677860d0e2011e010ad273d4ef41c61e325968567c6860bbfc24ae3e68c24e2e60d100a59826d0a1533a5f8526083022f0ccfca13c37b80c1e1a1c12a9827b891ba89c14c62270cd814ec0bac0c8e414d152e12bc6aa8a102bdc0ac280a280d6e9a68219a88cf0ceb0b96172e275c4d7c3f7c3e7c623ea88fc9b7e46bf229f99c7c377c636a588033e635b573a526096fccc7c407859760281809568289e026780a8e17dc0266011fc1427863f0101e158c08d612638265e051b02c312a5e81eb3013a34609cf6116c60303220195f0131f153088591c332170c8dc488133c543c02e6018c82a66542c319c093bc126988d5133a5e608af8c1919ee04070997c00bd39384a7702898168e438d0b6a5ef08a83bbf850e037300a6a5a30bbc22f984dd5185183044f94efe04d6627e009014bcd58c05138053323680fde971692d691960dad12b46a60c50172692581598925a1a3050b0a568d6503ab069a86c6e1dae2e6c9cd911b263750373fdce07063829b206e4a7003e586043740dc8ce0e6861b1d6e94dcf0004a7113821b24373bdcf870e3e4a6879b26e014a01428033006374b6e72b84972137523021b343670d89c6135792df182c14b89d70b5e2e7825f19af242e2d582d7112f235e2c78ade0a58297945711af14bc50f022e235c44b88d7095e516223c08192637096805074045c19ee0c6e0c8706fd8123c3b1417de0acb8366265bcb27066e810db1307c3bf3817700ad804988497c085f020a818d40c3a066b0c1c2158606ed2b890b86a140d7ac6fc610e319f4818482a72896f071c1e3e1eb62536273626641152ca26033a45bda059be223e2c1e1b5f163565d48ca909e32a83ebd223c69706c74a0fb165d9b6e0f4106bc213e355b1117c028e0296060c05385fb014ac2fb120c02e5b148f8c0e16130dd6191d1bcc32f20699837432c9380f128759141717134b4d2dc6055c4279d0d9a2e3050e125e991d11b81a738aa7c60d14730c98e4260a0ec25b631686c3c05fe0556225e0243c32e418b20c9c2a3a586240c076c0618347873e01e8835422f6c43383e585d5a5a7065618302c2415a721c5708d000483f5065bc930180de9a59580506417161a2ec36a301ccc0417315b308fd8aa6021008ff89289c40d952dcc14c35470da904c7804740a4d226605ce1157028b9a67dc3cc140b0148f8b6ce275016d006bd8c8987de1798981b1951123410c0a9360013c14a0420a46094040253a80015e47041064c2082e2fd38d8eeb72f785d512a9880f0e1c0df181f4c2d151c712c812d2d1516b86a9f1233f8e84b4b0c443494908029a7e20292909410000dc862da294e4a30909c81112520b20780d2ba485a5a4a30e3021c540e42869486d5a4282a1033e1ef05e5ba41f4b42968e7c1c250da9483f968438a0692906213f7ed41e990688901f48403a90716c910e2005392a52a403482b2c09492a52044902a1846367481a529990823009b1000ba144b3484d3e802429f990e1082906a41820300120482eb8e06302009067b648901f482ffc78638b342d213121bdb094f4f2064b492df0c8abfd9154642989a9c908d2510794860cf171c4840444292986a2203f842815cda41b0bc3918f261f407c342135e046b6e18124251f494d494b4938928d0df2438812078e909a62f8816404c925cd2c1293100478728d2d8294d494c424e485a6187cbca41abb2424a9c907530c408e9a842815394a1a527d30c5507196919438e0a3692986168e9a7e20312501594a3a3ad2894d275c142b4d9ed47dea56aa56abfc2475b67935af7808738e0029a544400264021020a54400a53953f62d9a73b666d3288d79a240dde76477a734a7ce94a9531aa5514a27754aeb3951604add9d2953673a9d3a6d4ea693a9bb333375ea3ee59ccc3d594e9d67fbec5dbabbbbcca2edb3d54ca9fc80d256cb5b939dd6f8646e4a27339d9252cad475ccb93cddbbf68e9b93762d9fd27d6bb5b8065b2d564dd38e35e7c69a4e67bb579e9432a59469134daf716fb9b740e0d6ec11da9d29059a937bce964eddb935d9b9bbdba7b733738b9d76bbd3397d8630db9967f39ceeeddc92cc9272b76ce6edd9744a2a67cfdea694cea52da6eedc6ab950c7ee0e76ab6b58ade6c056d7757436e7d39936a5216dcd39a9942c4aa9a4947600034cf9416bca16a535d37dce59809d947e925267dab2a7f40fba5948484808047db27bcf5dcf73e79d4e1746009d393d97ce5232b3f4c9debbdc726eb5585d63d3ddf29ed2bd351b9ccc94e63e5b73720ef7d96a7d9e3bbbefb6cbbb2d4f4a5160ca949d4e14a6ef000104f7392953e78fbd1c3c9e730fbb4f9e01b45c870e771deb3ba72f77d4d979bbe93d999777636fa7b435e49aee1fbb33fd5ad6b45a2daed5cd93993de6cec1cc3448b6fb74973d5b3d73f8746ff756cb855ace519fb30329a5d36b9e3e5db6eceee63866f656abd56acd56b7d7d4744d4db773dc9cad5677f79c94ced9ad39bbc535d73d7db67c7e1f6d9a4f8ee338a639d8d963f779c23481190808885d0025903029a5bdec4074fa0c726766a7ee943af36cb5b85b5cabd5ea39674b3ac264e600b83b7b1c737ff001f5e9be5f0f33730ef7c9ec72669e944673ba747d7a7bbb7f9e3bacd50cd422b8b38bd0dd72e6783965a6cc0c007739cd7d99ba7308ad9f6db578d23c97b3e7f439198496b77c4e77a6ceb5fbfa3acf769fdc07d30573a61eb88f334f760ebccfb9e5eec5a84f67f61ccc2e864d29a573ba4fca94dda7b333bbb3cf9deeb3a7773d9bebd9edd3ddbdf329e974caeebeeb3d60f474f91e23484096928e96927cbcf0a3851684880f0489090908939023a1134a404a626a0a6161e0250189a9852326214d3e7e085152f2318321a969290626b1a785a6187a905e386a5a4a621a72f4a348120c3310603adf4e901f3e38a0a42424840e7638e080039dd9ac5b1292d4f4c34791251f4c4d474d4930c020849623f6f0c09690860cf1313341a8c78890199a38103aa184998e1248382a0129880f250e1cb9b094f442111f2f3c920c484a47467cc0d001cf92e08210a5231796925c704188928e009494928204ed140141674b68122284265b127c2031e52005396a3282b424424e13920b20c49684224d45928c208580b32518496a01896948108cc90792d28f2324177c3009692a72044429e9851f474d4a31f8680109c84fd7c4e4a3a90808259080d4e483096909c905a6221eb8b6042048458a20310d8141c88f2326241984fc40623af25104c80fa4231282089d50c2901f484586b6177e34f9e0c0d10b459296925aa0c9b084246f9684a32521494598906438ea400b494c48321c0d8084134e280108d29190a6211d60fa71d4640429870c4b48f2b5dd0126213020c1b0c9b0842443f8a668777ae2a493f758cee969ce27a7eeb1ad1eebb4393d6d4e4e4f4f9cd3d313e74fd4c9699ff8699d9e640f272727d9e349f670e21e4fecc43dd6c9e9c9493a3939790f2776ea1e4eece4e4247bac9353f7787262a727d9639f688f7d62f5d8a727ae87133f710f27767aea1ebbb3c713778f7dda7a3cf1f6d8eef1c44f4f4fb2c73e3d3d3d798f7de21e4ffcc43d8c641bbcbb0c43111f1b2fd4f9ae24db29d24da4352d0b907fa44dda3a95b96c6349465a8db22a7f5cabeaff821ce2de457e52e58f4a6c65c603b95655c7ae3d6171748aaafc1c073832d4c856d5ddeb2e90ff7e10e8a2953fe35655175b89adaa7f87d4453002b28813bb4afec827ea0d0ac83f76adca5fab3a768d7a205b51b69256d22a09955bda66a87f7ff6cbe9fd5bfd657f77ffc7a35f8afe24999f38e8ef3d44bdeafe05e84edd9ff3e9cf4dfff929c03d9fcfef217b15ac3ecaaabbcf7054f22aaf87a3e7fcfb1971f3e7bf1f0f173d0ac264dc9e7bb3fd8b6e7dc6202a6912942b87e450a714c4c50b7f7fe677e1eecf48abf3e79c33a8ce2160f5194483aa8beed44fb465189c150d51d2aafa7315d24a5a59c9325feda3aad5a495b4e2acb66e3d4ab91f6975306028933ff2bb8ef3f65381bf7f863d7bcec96de43c82959bc50d89ece6228c1303e41f4139bd06509fdee4d5bd7d4ab73e1d535056e7bf7ea4b97e0cbaf951c756b9dfbee342ba541fed258eb420973806e9b811471dad07c591765fc312c7af23f8899e4cd6892d71f78752fabbac1f6595ee0feb29abc7d370fca6adce6d6ed5a3eae678da9cfc8993b30b314ca8d407aafc09127fe24fbef80fb46ea24be1c0b81497e24ffc09957a98ec9bbcceefad1bac3d5bdc4222ebd3f36f8ab26e4ad910eb475ae76c7230acd009acd56a35141d31ff6990f95c8f1be07cdaedf4a001e76fdd5e7e46dbf62960b9f2c7638a9ecf91863af7e3e175fa66e4dde4db6fa20c5ea7875ed7473af1d3d613889d7af9fd4800ef47134498c17c3a48fe6c21d1d2e607cdcfeb66d00c9a54d42955e77e9d3dbe4e75ec67cc6ebea4ac1fc1bab57e7708943f4db3cee7c480db6fdfda9eb53ddd7a547fc9c2cfba719b0c334888ed23ec49cfb7e72ddce68f3729cceac664cc6f05ea2db45374eb33f2144e047fdc61f36309353f86f0fdf8ddef0eadfca13f82756e3fca3a5fdc2130dc1ddecfa72bc4da1dad9fcf8b02037884a5a2725c1890e39ea84139f48020393484018c023be111e483a00d5823ca3e719475e208d631a8527113c7aee35ea9dbb742aeacd097367f881ca2fb335f3e3b61147647a0ffb26935d7aacadfddb10b3476a53f761dd94995ff0039c451f2473ea53b257f46d928abe34e55f99d1772e5a8ee653210dc9f91d6ee475a478eaa72a7a83306ef8961278ee206c23a8fe6c7e35bbcb4393f1e5eb7ef38deae592a8ebc11c975ba542c15536a9856c154557e4741708455f9a3570aaa01fa8fb47ae0828151efe9c956c5b15514b4a95334d234ba82bdf23aee15f5c0adda2aa6caa15b2190d6ed6da654f9ddc8d57f77c77c17474f03f47717e94e8f1b20a745dd7ebca9f23be9adfc8cbcc5d1c89491cd80fe44b243256eaaf67bd8b33a458e6a81e413359f01f233711d39aa2aa7cf6d1395b8a9eab4eee7fe2e2e7153d5668a64d2adcf08eedcfda638729defbb636b9275fed230c0f9fe44eddf0a5d37d11768fbed89db7c7371a4c18924f7f2e5d3c9cd2936c9ba719b0c126c32baf51957aa4ab069b06e3e8753369be148ab2c3b1c956095fbd9356d3e8723ac4e0ea708864424f744bd1c58e510287f3af7f663c1f9336a717caa9c387295356df4ea7c7077f8cff9de432f7fe44f715482d5f9e00c9b0d70fe08aa006b9afc29ca5e0e05c91ff9f2b7853871a4b59b1e17caf80b6a9a7c07805ed3e4f38f4155fe7eb469d2c30272e721d76e5bee1a177d81e613f538ebfcc016eed2e6fb67b4fdce4d1c69a8febc557e3cbcf61335d8425b95cf855b378e1395605ef79b22cf0afdf3a7b804ab2ef6af54dd1c4f93e70af89558b592aadafdb2ab9ddd4e8f1b20cf0afcf2e5f3fbcf979fd15c679e41b72e2a70a59254d559572a49545dd7137301e69c73fe7c6a66312477bb02b8df029eaa3f51b3f8c49c000a74db42ec1ecae7b05f8673861ebaf4e4a702577fef50b6d78eba6eb94a29ee7736449cea5e606786cedbb419cadf2f05aefd549b3b97fb19c9276a0f99b6108f8b2970f57791368d7f86417aae44224e957f94df2c6ed3b891ac10e8d5ab9dcd3625cb97ef7353a15f3e516f0bf1a4d02f5f6ecfef2d34ce0f22df7fdb9eb6501b6d5e256a96ea7605b0b3f14f82a42e8bb469fefe9d4d1111a7eaefcf4644b8bac8816e5b3eedf7df16f2fe8c5c3e7f0ad8caf5895903ddb6504b8faaee6f88640a0995fe9156295fca97522281aa524a29e5af8f8401cc912b47a2be85fafb692d347aed7e9f16e2da3670a9fd5e0fc9a2aea308b5eb38abfddb1f34a45b571870a56c00a2ae54ed4a0075a56a98aa1f51fff6fbde42dcd7fd8e0bb76e21d76e8540aedc4b8f3fa38d014fdc77fcf1d89e13c7edb7effae301d6edf7f3a6f9ef67349fa8b7df4f76fb51717caaf4b970a4dc13492e1cbd72bf9f11fd8e0bc70454eebbfd58e268a4b29e0bc795aadc6fe1b84d3332e4851e17a8dc8fdbb4f10195fb715380dcc2adac90884c9326cd55dd9e0b470254ff8e3d2ef46781ab1c0d8970751347ae9c4884d3a44993a68e4f756e4d92f9475865ca324db73941b4ba758901ae540d5275a475a56aa052f7bd1ee2a27d590bad54edaa6e1d67757f7d96a85b113ae4ca21576f21feddea2dd4bfdf71c71e7fd7def20d0f28244ddb2adfbf5f7e462deedef08072d2b4adfc1e6ed33ae4da1fff7e52f4fd8c68d37a6b875cf773c07214ddd6feede71ff7bbeddf97fd41568afbd40c818e9f43570d40a91a551dbdf6537e4a570e6dff8c60e51fc1eacc4064b79452ca5ac85f7e27e74b9f53f4906b8b63bf1c023b9bf519bff66f0bb5107fd8ad10b8ef4debe7cf68c56dda488db669fd447d02c8df2f6b211972055ba81fd6422ec3adfbf913355173c8b302adfcb4b2c8b3827c7ef92c367175f1a53872e527eaf56931c8d7cdf124999fe8b6aecf08d6fe6e5b68e497efbfd3e306c83f7ab5b769fe2580fc2cf00791e236cdc591d67d0eddaacae0b2618fc3ae525586edeba4b7bb837f944f5b68e42a7fbf932109a0fcfdfd54d8a68d5ef7a5489bb64fd49df43894f59361f3a8aa0c5ecdee60e25a257280cadfdf1f0b5eab557efe7880b5caefb5d0d6fefd7870adf213f5863e2d0601ebe67892dc61baed6e7f40fefd65751b00907f7f59dd0281fcfbcbeaf8b785c67d16b769fbfb4fcc38dd4ad5a2d4e5bad501f2ef2fab070c76228e255a3d597ac6e899eaa1d2f3440f133d2d98d9d053ebb18107cceccbec881918b3256649cca6ccc8cc5a3073c14c899d33b325b32333243334664cccc4cc68301b6246c4ccc90c87591bb31c78d0983199dd306b3283e23963a66456038f193c61666978c8e0896316c5836696c5ccca0c8e19169e333c543c69f058cdaaccaa6666cc42c09366569bedc0a3068f183c70f094e1196307cd2cc94e1c3c5f786aaf253b6eec70d9a1daf1b2d365478b9da91d2e7656b043829d1f74c0e88ca123860e954e183a5e74a4d009610755fbbbcd63855bb485aeba5df5d0367f55cd0a4a5e45d59e5477a8ca3f7251aa8b3d6e80524a1d3dca959534aaf273e1ca9fd19f6ca14d0553476944ed9f21b83b66b2e7c69c2fb5895237879364af69d26d95ca3ad6dd89287f2a6c5454fe294a55d6d134666f5b88bebf0fad855acf2f420bc9e737a185baf73c5184a6b542ea35ad5faca102f277d7deb69009efd300505f440dc0127d68dccf90e3880ca9db73bf1f0fb0528e2302562a8e4366c805e17efba8082dc4893c7f3f1536714511a40caafc320439c9553df9f0c5136d584146131e94180a62aa07294796b8720515212b422019830c2ae068e204234f3c2089c1161fa25460821a9890021d8e20c1151938944c11809136ae585245072492c8e282128cd0c240b1840b291c68f00609337481a2c5064feca0461041335029e34b1c265802c5ca04232839628583551146f46044003c29cf051e1015a0628225d41023268e24403833bc66d82c56664055a140c992232200a165872b6cf0218a1b006064ea8a2c4cc8e088114f3409c188074cdcd0851753392cf99161026d10d143933367a4e00b6d860754e17215458c183e34016186a71bd0105104972353cabcf1c1185692cce0055610c102280f6248c820e1860e6f90c1e233c39a71a40b1914c4808c1ab420c7134d6c50c20609d83862073188323e0c31954409c26011babc00f70a3154d49bba5798d145955566a1d11bc1ea5c5db63dd43f8a50f769fc19c98f0901cee79fb5d0e853c7292af9541ac70e3cad2fc89401bdae54133167c0565da92654dba48b26394b9da2a0091664409bba524da0d8c42648e000ab6a32c41a4d7ee8d280605da9264b3c28c01c2b2f09f87de9c264ca09d0ab2bc5848aee056057578a491346303162e510287ff899b968f4ea9c524c4e50e77bdf50341fd6435e34ff7747abfa301a2cca5a00baea4a31d1a11507f8428305a8f3a55302a460cc00845dd10203fc9ca802bf23bc1a18ab2b05f5436b0910a7ae14940d95bf5506f8d5955ac246e507e59017314b2d29a37a759755a2266a198221ac7ff8633a805c5da92561d4aeaed41231d587a7133fb1645d8122451b5d08d1c40830a27823ac229644d1a0066a8819a38319f60c1251643943860b17553830f28113b8c00625980a02aa4bcf0c4cc6c491e4cc1b4bca283333f224ca1448a8a2cec042043c46464852658c2ba60c21032d76664840185a5ca191aa0295864e1216f080450d2eba605181cc4806b264d1061333a4be3822270425620c31c6042b980195d80c4e362023831a7001a3a50b9c7e6ac205424cf1e26a8d358c2882d5116436d2adcfee0eaffba37fad56b3a188283604c83f9a50f7570ed1227e2a87b856abd5a08af8693de445fb4b4139546408328668a2862790a815bd6affd7fd7a7db8999be8564a91549ec8a8baef73e3a8532a9be9c6d1cddb7029abd579ee79b2d9f36579dbeabcafc66b6a6473cdaef7ade76db8355675bfabb1b1f1361c656dc3b1a9eafe8dcb5d2ed9ecda52f7a95469291da56b1d655555650b159ec2511c856b57bb45baacda2ae2b85295bba5749f9b6f9b6cdeb8a5749f73e39ce36433e773db388e5256cb5b2dd9dce2288bd56a759df7f9f7c9e6afd579def7d5d4d8800e82b219fc3caef1d8c6c66310f4f8c6f5f2d74b36bf5cdebebc856d38821b8b799b2373994c36cb6e3c0e5d1e87afaffbdd0b06f3381c83ea3ecea702d76d5a87e37118fb54e06e733c274736e7d01aba40dc365d36e3d01a2032ddfa8c5e54edef2498a6b5acaa2da916a87fbf07d0ed975be490ff166d5125550f715cfaa71f4cd5182b33f28a43537b7f47da43455399bc8eb487da5dc45dd30438fa545e9fa6f18efc955be48f147bdc001daa8e0e55d5cf51c9a12dea91b3aadd95bfb3b14a41d61a2640de2287ba48d66d9a17553787f320dee06b67d36fd401073d339e1d1d594e0c07f672dd8036359fd7b55894dba6cbe605dadf8f08a7a945c8276a5e5efe513624c5dd1ffefd5ad9899fbabb8b94521cf7e7fb8ffb1f0bfb41a694522e9be97685dc65d31685fe71bfeee3600176dd15b80659717984fda76616787b1647ea4fdb9d86ebce713f15bd6efff2168ebcfdd2794526af4db28500fd86071418f9fd748ef3b769eef37d36cddddfbf6bf6ea6210b08ae3e873db8f9472949b348c4efe8a23aceebb5600f6ef50612b114e53a97fc7210e16bd0b3482db8fd42b7dff8e869412f5e6321c95605bfc571cc1bae2c8cffda43f72cff173df9c7703b07ff4aa7caf85785f3e0d5788fbb139c4c102f4ca5f83f01335e7fccb62ba9fb435ba305c9a0775fab782d74dfc059a1fae531aadbae8687899793233f39c1b23516273c2861326bb6ddbe673dbb66dfba9c5b662d050b9051332bcba890ed534f9e014f5c0add2b17bf4993fa3ed25d7e23817b7906e5bd762cd9f3deaf6f3896437bdf9ed9bc873ce27164b333ac92f59e8e7ef3864d19b269be8a228fd7ed441c24f589d7aabc3fd282322c019a007ca88e4d005e48ffc4fe689a36c3b9628b505f42f85ae9ca864c5962a7f734783876f9300046063298c0d4a6d6ce49c73e3388ee366dd449a4d191a6d526143874d6e3e43af1d7bfeb1e02f7f0ba737f50a526ceada4f44b6336351c51866666c86a452b831a448994e4559ad8d4e3ae59c739b2de7dc441d330a1d3eeec34da7656ed6a3acaa582dfdea14bdf685616565c567ca584937984ddd44234d934f6b4b3d7097afd86ddb422559ddb6b96d1ced8a37cb642ea5ab9b2b8739bfa04bdbdeab1b0d3f9b6f4628b74d6ece8ddbbac16cefe1b6f1f6cccc2c829341b05bcf3f238ec5a2bfcddf9ea322f71dc782ff0cb9f7cf8893dc26ee96857f46fd735b17c7ad52fd69228c3eeeaee4b340ed537b721c37c57d9d9bce078d0ea4600775d4d1411dc1caf500ad97af430ef9d81df29ef5bb42fe43e49027726dfb8cbe1ab6ea9043bb3ab6f7a3ca3d7deee3f1b5fb8e6e5b27fa13c96ef3c6adaaf259e1b860aa7c1a8e6ec489f333eae77e9b9c8f4ff5a6b9b8ace66e406b66e41518d20c0d50f2ea4a5e815e9da2438135702887a21e7875559dd674a0544ba98c0abd96267ff4a9fee10a81ffb42e2f2a5f268774c81ff95447955bbfeba84e80ea3b05d236186d994ef102373700f9471d55caca89e37a41a334aaf90347154656799161fafdf90660d55215ba3a4579b540aea82b79b54eabaaaa73544cba6034546aa151b61fbd26e595ac925b56caa1aa64f3655256657594d54d56fd89541d1d6aabbb40a39107acfc19e5161a80a84e4394ea50c0918628dbb4298e343ca9fed2c35156d5f91d8e4a0e55fda7e89ccce24f467f0205553d8a133fb99c49d01ddbcf67ed0e96f705122541457405301f097d255fd46a39b5c26d0530a95357ff8ec512e756a777db26faa4e1ee09737a756e73c963277e9aee3574dbddb3bb7b4eafe3bcede322e8f33781afd56ab55a1115b9cf683a1ab65aab363c90fb2de45ad3b8f7df42dfb6d9ddb37f6e38d23a371cbdcef9d39bb63d8744e4f644adb4893e4546d2b40903ae715ce3b6722bb6aac1ba8b23adfacf64cbcc23acfab685a357ef24efeef6cd1db737c36e2eb7f49a5da0fe11567b6b7179db96fb11acce7a5e181b2bb44b1b6daa4d1dc159a7485b20f9366468eb14e6b0994615312805c15146e5104755c603b744a18202f21b20ff7e11d8a2953f23ad54b5dfbb8b38515a2521ad681da595a49254dc14124b37086c24d8a807aac066dd3759752703ba83f39b5b9fe218dc6ca6e598ba2fad786c55822ea9a04cdf685f716c0548a9d75e9359018ed4c6fbfa08cc46069bd97c2a70056f5c2fd7eb067cbd5eaf974e0dcc88915636c091d66eee9a6d1aaf08aeccc0f0b71b65c336badd70d634269c6be7dcf2371c5d68806b851727445289a8dd97906168c5891329209d9501f2afd7f1b76fb4e595714695d5b8e2b0a1f2aa42854ea12099ee96920a753137665cd6b45695358de3388ed20e8bce6bb55aadaef32648c49c40e14d89721205889c0d8c2b740af57e90f9151d2792cacc15b8c3d595729266cacff0784d36eba2e0a0c49d4c6d607854f4dc5085ca9a168bc56239393818413f23ba133c0b0b0f8a9055570a072c5e68440f8c076e417188c2a10a9d2f39b6df1728072e39089183131cac9a82e1e3048cac2be584caeb4a39b9f2b02b3cb8014d57570a8728603630dc890f3c0e55d8da710bbaae156290a83216771728f4056a4d05e52095039533a8d0ba52374cf1ddb13b56d6b4300c43518cfde081e7e3e3e3e38107340f84cf88eb5a2146892a6b1a081f11af207c4644384d652d503f089f0ab46f9f43ae1b12e134959fb640fd3bae31e04add0086b53be8ee5879e3354dd6b4159b04187816cfe29e454b992e5ddcc1c8e259ac68f12ccc5eb45861f6a2c50a73192b5eb460b1a2058b15cfa2c5b36c995826162ccc58269689058b4f2146e1593c8b7b162d65bc787107238b67b1a2c5b3307bd16285d98b162bcc65ac78d182c58a162c563c8b16cfb265629958b03063995826162c4e8567b9c18b96325acaf8cc32bdf02c65ca94914efcd49ec38630c24801ac3210a7e8767793bace488bae5b2eddfa8cae5a18709c532dd90a70e33aca6a75de576303deb85e309c58ce4ca6e3ed773b3cde4e95fce9ef6645301555ed2bab99d7e3f1169ee2a91e0e64b0cfc88a83fdae838f7d88c354e15681395c87e52af2a7a7c852cc45aaf6777533a505cfccf3c0c5fc15c151e44f3f47a99a54f20a19959caf089ec2537a38f8e0a683f7764e4daa0fbe2b10586eb0acf6596bec50d75867bad6b5497585e8311430874f0863ea38a9bac6b29a54e0543f03f1e4c977e5e381f779d5f2e41e388aa3aa52e87ac58fc75042f024959121563920171cfb8ae05a0800d0a28e93aaab12a64a1700d8ef446069e0025b80f4a052faf95e00f226d0b4a6f5ef54edef02e06d0b496702e8d0910022290634ad5f844f014debdf2ab5bf1bc19343735a2d4faafde5a149c53ffd63d7dd217f7f8ec1f2679c545d6b902cd00c8278be2268342912e134d5d504e4ef46f0180a18e44daa5ed2b5655981a9fd7d6487e6d4d83754593353b1ac6a7f57f2878b39257b4e7d24781c062ce14bf35d7d6776886535d6b08a2695fce18265c5b23292565d091e97010ac0db9106d5f51f9ff65d81e05704953f53df951c9a7413a73882558aa3acee7c29789d545b40fe7152e97c4578530230a14d38814ff084bc9d616a3fefd0a4da9ffef96587be2bf9d3df3ca37e575620fff85dd5fe8e67e6aa49cfb1040c186ac4972f32287cd7777cd7414f8b8e9432e92e3dc7777d9b316e8c0d47ba4b0e463d4f0b3fc1b902721d3dcfa3e4cf3e51cf97a785a32c178b725568d7baf13acfb94daaee04af3e2c9ee7320b9b2add6557f3b9bbfbac52e33519c751a92bb300f9b74f5ab9a785fba62b7d7a950b9d76bb3b5abeeb2ed6cb77dd65bfb78573eac929b9dfa6f102adb86dd25de67c89cdd1a5bbdcaa7ee678e01520bff45d9f724bdd9758a4cbbc294fcbb8dfadeffa16b4a3d33c3bdccddc9d474a7f39f3914137ceeadf7593d5490f043d97ebb56270532f983fa9fb7d0587ab52f73be6755f8e4d0d087a71e3c95c372f8f757060b170cee935d98e275f6e95e128adeabec402641e4955f77bd6e331071dc8f7e4f37695e1e873be8ff2e777329cd5eb7edbcbb0eb36c3916bc781e7614fd781e7e1c82b1ca03bf4c4cf6845cfc36f0599264d0e6fd3a4d9e694524a39e79452ce2dcce1815e80fcd3ddc519763e5e107f01f27b5d7cf0010820d0dc9d26bfa3f1ece8c8726238b097eb06b4a9f966cdc3820880200b0c0cc9df07e59014bf59782ccd35cc6d6e73cab748361fa172687611953ffd1ef26c51177959b6b7483e81dd4e5d38cefeaf762b999777ab1983d47d9cba329cb5c3b13b975740fefe8cf6e5f3c8c383797878ad56abd5fdadce2a79ac54dd91ebd5cb67df36357881e67c76aaf2999919062c738bce9d7fe57e7b0f4d994cfef47733a4c99f7e991c32a17ffafbbf1476aa14839ad6cf5a63b96b76aadcf721af7f7a360538ca6acb2111faa7bf694c689d7bf3e82fbdae946cd9060a4d9081f2d2250837b80c600a299498220656f0e8dce8d51d7554135ac89f0b5daa56abf95034ceeae653b75f39c4230495346590d00283a9221d75dbaa70b245dda6c805dccaebb2aed4122e606fa98243617984d15d55fef250ad55e5370fc92b7e8387baef9775e1f2cfc843cb3f2d19963e325546b73ee36b4a1590b93ab47d2c709508a709bb96ee6da11cd33ffd5eabe6033df093a2ac7275e3eeeefaeefa2efd399fe2785bd8edeee0a9bb63a74af92098e3b17607ad72777055d29773776c3bfcf7ca435e20fe2d9c5559e5fb0ad1974fd75ba1f972687b49af24fd8c5c945b9ad6cfc1014a33acaf6aa1312dd4fa7e69d5422eb6585f39ea2def991ddac02a3b9607b6108f3f5759a57c2a87b69c33c4a815c99f379f919caadbf7790d823657bca4bc9e70ed3a722f205e515e4480b0d76724c734addd5f86239b01e5134919ce7729ad9ad6b2aa69fdaecf486e59a0fede021ce555edefb6b4505745de6087a8bcda1d5bbbbb327653b57fc76e8b6ab33ffd72cbee586923d3503924aff6e78c77c4eb5a2cca7d35527c4d71e227771711ddfa8cdd14db80c5a8fddc16cac475e414beca22b765816a00abfa87bc7ff8b700476e4b6dabca6de16d59d34db1986ebb8dfce7affb86de4292fb8e86740559e75323ae27ad5aec8f523e4be96ef305e4f75d2abdfd561c3f70354a2c207fa8e45075bf3fa3fd76f7ada37c1c2c7865f37acdca2dadda3dca64b316029f433a058e146ca1910e6d5c832d24c5fe513e6d5a8760d39a3d1972f590b5407481f8e553af87c096adda519cfbd11d070b766ed16bda6ebf237fe49edb9e7b0ec26d2c5289e5084b17fd9dd1fcfdfed17b7f58d3fa3d6c1009d8fd596c096a34414192e7f6ddbff3b96fff514956b9a74b9ad67ecac9c095455f92d54d0ce2ef4bb21a44bed7348e7b49c7bdfce6ede78f4db3f615c871a20cb36e62902952b19554e138407efe52b0a98ba6ee839d444c95e6953536deb4fea1dba6b10805e47e8602fa6744e766b3cf2df3331a9079653b3a33733333bfac6a8f7294d2ed6a7681f63f2d6ca2c821d68f5c1529517ef4a8baa3cb9fbd85359515b6ace44f15192239825fc917b19e0b39294f68075559610b4d9fd0baaabcd10df49a6cce2d046be71e5b013214f0a6ee70535c95da4f39a9dacf45f5102745fef4d327fd4cde41852d34fdd3ad2b0e0e70b489aafd63ebaaf6db00d142a352540bf5d042dbf7db3cf18d4ed5515e49a92daba4b7855fe5a0b66ddba270f19a315b8d55eddf6aaa1e5043257fba73d2b4eea26a17d54175fbed3ef37315203f91e4d07f432569556734e4a22d7c55a2f63a28f9d33fa354f6b69690a8646a982b23350b428866466620000009331640302820120cc7237a202af20314800f70944e545026164623a118c86118c4400cc430c6108008300419641c6264360180381b45eca1e095fc8927e9af412af5625bc53816059fcb725559bcc2904e5bfaa2521c68ba2ae94bcfe067ee4c820f64d6d1e31607446acd0360794df23572b5192353a9bdf30af7540f389a1034250cf8a4f37e499709eb22cb633536f009c042ff6c043cb0128201b571d654b8e3b53a6da8a97cbcd4fe16d8fa21277cc899819a8220285a2f6bde2b48cb3bcd3d07c9a2e9b56ec09bb28cec8af1144acc58d42c7511c68e8840e9fa1f8672baeab351cee973fa0daf2ac9f0a22eb95010ea73e7f0f776e9d09174d6a25af5c6aa9bfeaca2b229f84e07952ebbd9fe5fc86774144aed8f9601d3232c267bc27241eb81278fd9a6dec4c4881f0f65b19c17c1b71d67279970f44341f8c44c75356a308b64da7b7107369d8254a5307f038f4644cc8cccc78240bfa1ca9fa2a3995b1eb8db5796567aa1db1b1b177ddce219e9b1db3af69f5d39a6f29dc5f6bb0d8f915a149a1f48099719e5518fea284fd4dd46da67ff14cca4527b9b8de8eb56b95fb549143de744d3a3a9dced50cc0e6a5c12b250a60202e0bb0059a5574f94f2c09eadf4fc84f587209a04798b73acb72bc0d18b4bf72609883b7df704933e17b92659ec2a27744d610c3f32bf7803c2b57e4419d8110e4b54b62c5ae94d2183ae48780e8a7058b19fad4d3f3f1bb25eddb585a216d63c4a8986bd2d45b3b7248a95a9e98f06e3e1bccbe3eb21d32489c1e6369fabeb6b4a5c8a1349cf075224af9c30965a7693c33f60ec98a7c19302715205782fdd39fd10131f907198bb2d5ea04822a77284f0a44d9126531a7f8303cfe53700e7f32fc18bcbc4e9459436a4014b4ca9b28fbf5ea3a15775ffe6036a99e5f01725653daf90fad96838bd5278739b7c501230868f995edc7d02c28a2db5c3846460c8e34f444c9df8ad25d5410152968805347e1bd35681758d86400e499d76e639b3def4bd214207c16ca9cb5f06e933bf0c66d10e261c6ebc4d9ce10dba04f069e39ce03c1f89c5eb159d841b8c896c91cb59d801b65f7e357a40f59aa823c9168732d0f11d22e52ac712873a88d512189c786227d82623a4882ca18aeb26fbc8861fb4a566c9cb05c8801188092e0fe102578817d2135988c39f185e8905d25428739851dea35e3647830d7d4300cb735692a19536c123f317bde7d9a9342b1db66067329961b9baa018b24683f0679faeaeaad7e49a1c4b574dd52b9f331a8a6aa11d0bcfc0c742779fa0e3856680e83d414fb9cf1064174ccb440e1fdb007f0e0ed0c22d8dcc99c5ada785c44db35dc4f728d4728e636f2dd7d1673471a3df16f0bd22cab55b19d86f0b15188a76dbd282a2c45b8f463b441361429d21a0acb44339e5f0270ace1c48a1d266b36303b853a015f4bc4b48f5a911a4b932c26b427220c25834fe5c7418f64b525f7a3cd126373c2bf7612ced6724563a3814851cc8b23a88067b19ec6f0b15088a766df982a6c45a8b861d441361a2ae21a0acb4433972f8270a8e1c4a516967b36203b829f035b4bc4aa0f2a911d2ba32c26b822a2d91a148ab5af4ab43b2f2924b43d4fea27ab2af230f0b516c546af8a82695a5762470ab2327eba4aa23934e28e6753119bdd163c48798009be4ef9c1b02a958fa0568df8a5ded06b3ef43b01c958e9e3b2d9fd1839d71eea3edc967318a70495102e4e2ca0728cc73f968ff71ccb05bb60dc3e9f4306a1bbc746218d0a89d8010b369ad34a01108de190dadfa2b246a74bdac52257579fa3ab6226c24c7f29e1be69926bacd4ef4ac41e9650f5e7db45077d0b1062f4d64e0701407e77316ae8204841c144232327a5283d5f8c530b66bb5c10cbedac3b656090db0cf2a2b9491165347a60f1921cbc7b9a362560a7f7ea989835e202ed4c49c55838d38d41ebeaa7d1fb08188f11783a8af1a2d757028c20b89804c7b5a908d815534ed131ce9a2d2583a9af1b2531ee54360da9ab04b9f0467047986c57d4e00f8920a68ac4483a4b48c09c9b89410004fd9537061f007da58568e4fae0ae9a905a74e1a14ac284bbc71297f165ae1ee4bc170d96381bb4df59922fbe735450b6d867dfed1cfd9c7c63cded7f6f548aab414cbe5ccfc5753b36499f2990b8f1a164dc30f9ac8a315da00bdaf3f368ee762aa520cc7ee549f8d05fbfbdc1fa5ae1ecbe6c1e36e69bd8d1ecbf283e21f55521f6fc3ef11fefa4b2dbbe0c3c805bbc5070272be5672f971c6e08754884aff3f8c7c233080add570b2d0040969f6d2759b3b52802925d5da40750ae04ee6868eb477626fa9e2e8e38ae58eb938d2a6c12a61a4b872f949d299f141710f1a62a2cb1d5ecacb20b0aaf6f91c002b4de1b54b612e9359d1025af0c9810ce56da523fbcedb9eb630a55d99b8140c89731929c6fd753a597dbb16665504d755eca86c10114bd0c9281d2b2d57b9380a54251c311659b3c67d2416313857cf5f44de444518435b3c868206a82c977146984a589541269d1ad9743098fa89fbf9474e65699161bf046b6549d2b3a81c4b5f7351341b11d85a8107767c7ba3c9a06745c5b2d1c127faad728c85b818e3028bc82c8a76eefe5c60788703d1eb89123789ed993242e179cd6637ed35c94f47dfc1532ee25e0e5e5fe8e9bafb7242662fe96a8d8c1a6f1d84d14f2d252261df16e8dec0d9f53b73cb05a29da9e9aa7a647cde4f4fd8de515d1fb902a6a4dff0cc8c749259ee159e18402a60c62a01e8e6a11ab7917b861be113f0c222f1ec1e9317a4af5aa73db23cfb9c13e0d1739bfc310842806e78d5a1a5c1dc05017a33f18633fb359a285d0c5cc8690ebb43740d6bd30398198053a8660515309afe0deeeb366f8b503b2095d171a01ce9e066049b0003d188a11837ed1a60995cd8ba78a63172b28938fd081bb27b002647c2c5e9250802923d06e5c6a832728dd32002a754418cd43f173d13e326748244b9c0e1faeb2634fd44f010bb37d18d24fd5af921e9e463b8aa8e64627fd177430a43cad526942f1854b95af0b8da812b9b3b2eaa91e5363980c0daeb24149fb015f79a6a7c448de466a45ecbaad48a420a745053b124ca5722e70c778e781c1b540e3b3e796fdffd66de3fe8d753e07a1c7feb52d1869e8c1bab1379cdaeae7f180dc2140d8cc78cf0b989534953edc20ed92801aea59a0f07b80a781e27ce79512e525354d539e9d3079a113dc1e05ad35c0807528d1b2a17a65d15d57b2141b257efe4e68256a73e19b01e01453aaaafc8741a183f329cb87302907a9115780ef0644331548b1046a44057d991d6786c7e3a5313c22bc3e47ba06784133f85819bcf6b3630cd54e82ca8105c869b85db87e7a8f71325ce83d465deda927f78491fc6b1ffec50774f0a252817de5ec20b0d224293511ec751ff6347a01b6619bcde9cf7072657e9c0a38f4139adf428ae9e6bad76e0d583307a2f09aa4b5a087baeb2b699240bf1d3c23858a289c833c26ebc9f38d5731bb61fb75f5a14db69b6f99f5aa6749ae2006575743eb8744fbbf0badf62a5f856593427d1069ea4cce7dd1da167f6c89be17b62b935f0e039dc3eb60854d55042857867560968430fbb36f9932ded93f55bd6fd00e1f8573d8af6206469e2ceb4fdc5d47ca3bc7148daf847249aca6281dd7836fd01ab902e92c48c2206fc888e38fea2f8a95086ad6251eb478e5ad058049f94df0651752dd004452055a29cd3ae3cb2f93216b7d08d212f48ce09911397ec07a782e8c8b58ced4c152422b548c1e49c24300b21b0ccf8854e7f703991496f2785af6ac06d0185d198be88cf0cfd9d732da93d0cb6ea7c06a802dd9d889fb80c7466f9c5d8c9a547a149b9d6a2cdd209237c6052be0ca715b8170d8a28137282ac72f2148b7219de1fee3e28ac7d5ad8e0516e3f72a659a313e963d3efe59d409908426b8b0cf40fda5b37f369dadc7b8f4ff59bce7672f6bcb86b85b5174245a8ec60ca2a74ead222f52914906d90d870860c56ef368841c5ae0cab5f273c8767486b83603c251d92a03818ab08c6edfb9e5ccab1c22ccafbe953ae988b6e01d7a884ac92f6ecc426eab2b49f3280848fe9ae1b7b4e251c8379e908ec38ca5c1fdaefa00d1eeea6396c5fc51aa042d9ceb1268b77264cba71dab64eb47b19661128b81396f502acff0107781bbe263cc4015e83a7c395c14d5cbe680f63ea480c2c2e95cce656fa519cbd5711196f8be522385843f173a8d18224bb4b8c2de45775f156ab0a88fb73730034361bed4103fde435dd46c26b4282495fcc7c1a7c06e52a1c25593d79d6980c07ddfb981d8795edde21f958e98d450e2174b4c3801bd924d7852cbb586307076a29ee268645526170709c52c54d0ea7094733c8d1078961afdb8deb8f8bacd10ef7f49de2feb74c7e8dd6073936c75fac95a2c5da108059e8a0c5b20ad4e827149e74b0938231b270ce9899971077c075940c6ae5788400c17d56333aa20b5eeef6f9c0823e40b10056b19e0ff0f45784450ebd25bc1361f6e0fa76d39521cc18e3a4dd60e6d1b24ea59c13b5845b4d52dc0aa9be62f2abffc1d05d150193a98559c6d2904e2377a22b9ce6db42da50682640e2e213050f1a371d0f2dd95d5c5bb4aa610d811a898b6001696d0914b425d32d49e8a4d9ec62feb6d89a05adf3c643bf1b94740253f45dd57909a5db71b5390e75d5ee9f6570dbe21fbcd147977701871f0a080f611784a6db6764f66a2b00332ea173362a70289cfceebfa4be6dbd6def6e4eb919831227997bd8ba44f370acdc5e53f951dfd30ec46f7f830983e6537d7cd6b0ecd77941c30c103a57995859b97d6b310b082ecee9e858038078230b4800b83635ce98205df8ea5286d037f6f896b2c7699e69c81a104f07d31189c4f5b8d6305d1d8d4ba72b9959115709ea7f80a8acbde05cfe052984ebf90ea17c507920b146185ca82c5abab68a4a880092a332a79017b1b5450b453df9cc4550620f91e6872994fd781cd84d2425107b7f6b234fad59419e9c008192a42c73ab145a271a1c86435c1511805eedb9b4f34f12612c2a6ae18b59e7ea26dc076c1e3b504ea8b568ba4ade91cf7aa9c147c458bb06432c507d8e41d3ee25ecff9b07b9554caea4624fb87a8543470d72ac2c079c0235007a6ad0a22725aadbb8406bff6ffdc46246ce62d51455c5455084f10c5a4e442b2687a2ba673b03bdf1c41a823c9d210f4bf09e16bc7582ce6524a18006f4d9c3dc355c9904d7a77c2716c6a7df9d1fe15db3cf84275cda6923b50842332ad8213a6d718a65b877d99744b3df423c1f630092d32fb0be69a21eabcd5e483bb449ad189cf79d04dc8133c14d5d219575ac5aa14e1d5ab773871e16358782aa63d9cf024195c96c096d66f710880670e016e19c049d16f4f29053361dbd5f26ca281e360742f572685ee3cac9f8e14f76c7f2fb16b6b90bbeb1bc6a48c88e675f15bec917bc5092a1b4d01eea0b63328017051c511681152258e737e20424b53dda9b0012e28e2edb7767fa9de29bb74acec2253d22d19eb8cbb1eb536c1512e04ff1f05948baab44adfd0fc7ee72b8f52837500d67da737223a92c63484a4e5e4e1e1812a78f9d5bf055ebfb400d5161f26e60ac81955ac0c6c21d0a4cf6d31088d1b9738099b08459e8bba7212c02e8fdcec6b499320b82474050f463cec74560327e4ef59b7507563af859eb2062c7236b8cf42af8c1bce7f16e709a3e42d6234352dfd9b6f5f58d3a9fb171bdbb8427ce81cc5a1774d3d7a01fdf068f8c5f713d411b08e2adf2185f4032966f600d91969f0f400a4c450fc240966f42ac9bc2b101970b74bd6e868019219e3d6a90c66dc888f2d1e08b9b1188ce385a312ee0916644e1dd1fb39ab78a8960866744a56aa108691b33214dd8e5cec4dda4824d14cfc6dc987d3eac4898e1c251efabb1fa19d812d926be5bec1c786ce65bb875a80e0525753b99733cf25f57134287593c1095e31610dc4cd22459d77c278a457e23083494ae318c1499d3127707d0daeaa890a7d174f0e57e80f20dca951cebbe1f6c0e823b2ac2541e1e232a33e45ecbbae8c82b10a3d761ea2dd1f12e32f8b534922d83172d945b0376ce32f705525c706ce70281fc8f8d72d5b449edf2fea405db0b7417802bf60c8483fa171fdefdf01fbca21d2edf811a7f689e012396f801724eb44e1d8348edc27eee4b514a00a92fd03f69ff1763d00a0d4a8afdcfce92a60916c8dbbaef0d3b6118da2554092cb52b130fe190dc1d539dff7e8817a4b21657571d78be7a785ee2b4e72b077a78a1ec9259625b732783869770e20627d4c0362ff78113a5815eaf6ae0b1aced869183cb18c49af3c1a15b1d3cc5b0c69ced2de7611fe46ecf5476214536820d60c6879f5f67331b4158f82ee72f812c079a22d9c65502927dc23db45f3d4b9da6de2bea9afa1d594b7fffa151aeded3e2106c675c1f029887835d68aa9cc7c0df29dc36d367b4abf810455a5077863a4ec9611ca25034fa41dc30fb8397d69a7700938d84e0f9e1a811492a562da33eef51c57430c7a855dbcb03d39b8dbb1372977bbd81bb6aafaff4b03376def93e011d7f3fd1bb1f5d36e9c872bdae50ba71a9115fb7f252a342d2059b4ab063e265a7f80f1a98b872822775c5d2d165c4b960782fdfac4bf18c7f12066f3f9b0b94854f1fe73295894f8ff60d8e5e2c664be2668f6e5ca9fbdbcef7eb915eccb65bc5a69dc3cb2f0289c3e12de7a555322570e81a5b1f35d79fb9c766443181a97565264025f073d77f26fce32232bd3b5c83f75e67270df5c0d43b2e9a4ad097e09a4ae2668913ee45271edc88655485ae68a2d459f7dcb9646f56b0c4858a4bb16202b6a28ca524c550648a33562000aef2fc91cd434af1712a1ec49876d2682c78e9bbbb77f9976876d2a056588db66dc8cad052c74d2aad45dfedda9aaa93e784978bcdf2eb43f3d15183ca07d6dc26369433a426b1b2f1058f94fd380094ccd05e590e03632e951499ea96fdf31b381eea5f8802a4afb4f2ff288a587e904f3a29f71a736386d0a64b2bec0b8fb19af88027a6ba0ee85bc3eb623a03229ee15bf2b5a05618bed9bbd6152cf17de95a01b0697bcb573d742a2a9f6e9e357618fc610ba2a2074aa27aad105df74a1c29018674107d440a82acc9927307a578a16d7d59d67bed095d4c51f297324cacdf4c2ba5c9b440385bb7fd5bbcd476a119360072d761dfc13d5e604ad0c63ddc805810ca0a20350c21144d804e9f39db5ace41957378ed07bc83d810c56fe88538e88aa19c4c10df334cfffab03b85aa08e2b6ee386af05db79ee353a02262c7feb3f615bd69e51c9a696eda6333d64c556ad6344e0231805e0daebbc1a104ff3227c2c19cb83c2090c221746bc8bf41f19f84b99040ee6a04c893ac1103f59a310423036a5d5e687b02d453c28dca2c82425f9d41e83afdd45e2c52e5ae78968fab23667ea9a164445cea43b64bd100b2fcae7d1c719d45426c209476e313672b2b03f7a1143bee9ea64682ccc1494f0a01f2e55e225e76278467f153252a21c080a45855984a8548b56e3eea584c354d84fafad84b9c4c49209bcbd3273402b1e963d2af5214a656054aead00c3ec28c3472cb2f04f1d065d44d91ee38388809254093df84ca418e839308feeb9acbe6aadcbf80c8335c8af92e7b90ada61088355efa7db2f1cd261a2bed36a4e524a6efe11895e10dc39caf7f3a5c4a0012fc234b44c62976c9daf7f8c209d378c60d8e7b2e0474be19834f8c5f418bb0e72454a0b41d8812fe8899ebf88de834ffa8132123e065623a3f99fbb3b26b7a3efa4d6475dde6574db7ef4e3d3cb2f491f10de0555b8213f09ee324e8189b2f5044614583d49881075d9cb1792a4afd8876d872b13a9f7228cc389ce7e9032b03e1886827261ac406a0de551082e90303c7749b5873a9c0abf77024b5d3487da49e4955fd5b0e782d3cfc61bdf88541f7c092e7f907fafac62fecd2a1aeabe5d78d7cd9796b659b1cf14a6791255b603fc5681170dd29ef18420b281f7c4b6324cf6b6154064d44ddf7b217d94f1acd7f62a1581a9e25a8b8a628738fd78900ffe3b68256f2c6e2ccfb4076f7812f9f3cfc41c30f46d4c876060e2ba14fd9288998f916f7d0c6fd8f91361082baa49c4d2a20a5cb4a2b2f90f228b544292d97687e08143b0aeb3b65112f95f6aa2976eea94747960711be3a703640c257473117607c8122252c810e13ed09f6f123f09aba11f6b4b4366eb4efc04f22ec7db3b17cfa10667ecb18b205f724410fe59fb7e1022a43a6e148e3c8e1c1af5b96e8a4e1229449c636c9bcb944570189951c612b97d7da672c26c4a5d55bf227f589e7e034ec213c7955394ffd7b155e0a0ba79ac0596f87eb77292c5ff4b7b93729140b968381a6b3aa82c39b70d21109f320d9376545a781517cdaf425d0ffacbcd82f2c9257af26425a2efc8903e3789f24cc5728db570b5dbea9aedf2cd19e644bd680347e4647b7513b2ff5d26629800d9d7fd8349f4657c661ff856633734b9021e9aed6ac68429127fd7ec819dd8fb44a1b265795c0b49f24e88a9f5b75aa20fb37f849db1f38c7edce0954a6c07927411ad901078277b15f29c89a916ee3fa5538d684f183909f09b7989a215dd11514c8d5582ab953b9351785465b3b849abb4f6ea3394c86e2bdf3760a9e3a2982114e6981d4b4e73295a4a6e1bf050e1c46819d603bb209bcaf344392d62869cba1e7fac8511e634dc616e0cebd49432e5b45ce2680cefc6de7d4546bf49e9ce8744b60e50fef3c42086a10b5fd97b6e3b4a98b2e1655961947c6ecca1f95977695a274442b198c785659e85b0e13d9c609a105b37f0c55515f2ae221d43803450a10be23b0f533d3195ba8147ad1f03a89a6e2af491acd815319a6d444309870044c8fb3901da061f80959f1c5d006ecb5172f17d31a79512c430a28048d0d9abfd7b13c22dec166c19602859fdacc515bf2783e7cc8252a7b605b17b986a0f7f791d5dd7f2a817148777ab44a698cdcb083297385342319280109e8a8900a026c91bbb80b0bffc3b73ec4b17ece12e50f44fa4e6269f02893ac633db65a004ec2ad0a311cbaf3ec4e7f9fde2a493745a75771e3c849418360f9300851097b6d2edef534e07ae478e7e6b42d0c560c1036b9ac855fe71e8baa1578cf4da4b5b8bddc6b97f685cbd2761366449ac16dbaa4c61cad8ef9c4778f2022858e49d9bd5b465b6f656ec283a364b75195f2afaf3d109b2210758f22835e347d1c633e8e03572f230bd912c4857e8e62623bcd82d038c2d63ab45dd163b3a42f85ddac08604489040801106b1e629a0cf5776e0e7f96230ee16d34b8bf332b2cba988c8099e3a1fa2b5fda77853925543d7a306bbfa262977616ff1ff12172f9ca0cd260d05db3d3fbadeca1b1bef3076df4cb72cd9af42f5de8cd2823501595d58d5d36ebde10afc5115ad7c7cf3db9fe89b10dd3de5439f91f41681cfc0b129cec510edd6f03b3efc3420c10778ea8aa997ca39b2074d806251cd7b83050ddb1881e36b606607e9cfaa64b3d5b373fcd9d8fdc20fbc781a409f4907e035003b0c82707d4338c752a1b91b3f18057453edac8cf199085ad937030c9809d12995e2d530a60d7ec7ea5fe98615c90571e1de8c09b2256b2efeee6abaf60d4a438ea6c42764e6a924214e3a9e79a61ebf68fa8c6cec85f15251e2c1be537f2fd5f5b7ef582d8cfcd475df5eba709fb7f0ca4324e62d2d0008aff0d258c339f5c72939573cac01821330d07b0b9b0be8e429b6afb01e044701f9d53a8c0d43d6ba8e591bda0201429761ca347acff0399e042620e84ddcc8879767890c608218fd1f977c8621e3702edcc474f7bb8c023d197accaa02fd2af80b6d4d6d846db85e2df5eb5ec81826d9d0c33d48596672d4de00eed76e039df1fcdd67b65f699633727615ad719b39e9b769bc45a07f9ead0750c5171dff7d601ee05cfff7542b268ec27e2b4150da6d67743a55099d46b1ae99c163b1129d88bf294632636394139cb34238af412d1c5df0245f6e8bd2e383ff9d487b53ecb210f9bef468732d28ea067d1ba346595fb1d43bf92392321b0baadb2f23c9e365542d15cb12a6bc2347b1566dd2822d607617174048ab7091d62995777ebf4cc3c144ee81555e980d0d9f5e58f03251208f7e62dc88725009425ad51d24fe5ba5b4097267ba8dc921695c1ead522b4048f844c0d873890cf1228f935e958fda65b2954d3c0422f7f88ba70fda89a38900bacc07ebe289a75656beb4be40606152209106775f9985085e1eaf2d73d15f7169666789df40435f243b8f6a0d91f07386787b577b72997cdcc052e9610da51cceb343fe74bc1e3fbf44ea41adaed572d0a84640c1a4b6b42680346fcb70308e54000d5a6c90bdd1f546b792790d33f86f1b0e45e2624f0fade9eb349af0b367e6497388373722bbd523d556aefd7467ca786da5e7d6edc74f0a2fdfd46e981c484edb0b7e47bdd86848d5274fd2405a30f12f150b35f09e28cb7bb334217a56d6fa89d15df9f816a07f58ac8e0f2a207ba26a70fa6b09c70058414e73469ecbc90017597657f1c9dea0ad14022c766dffff4396dbb6576cdd932fe57cd88b69d4ee4797e50c895bc216f446b6e5a629eb021f48358d83f39b8a14e985c6fc313a4f2e801767fb8cbc5bf5b68b84af4eac81cfd988c604e6cf0c5796683716e2028c7cd27a47bf3f758aa5a3de1fa7a603c7387ea0b72f081c8309ed3a8f8c7f4c482644c2d1a99a40376c9e1d1ba1f260b06138d7bbc79c744e237de699f2587bbf4d87fa6ad18954efe5ea9b93fbc48a1ba1940bbea00091bb07059cbb9c61b97295b6a0a57101afa87895cd7a0aab2b3c1677e55142f83eae920538266c2a8f80b13943b20304d52d1c34b44d6e0af1ca6672779b521b469d2f18a564d94cace60818508a348d45e2a076368c89ec0b3d0ba45bf3c424f952244d94881b7f0db7a39c9737b5f9370ccb9e7632ff79dc7d7d6eb021003c281e116341060a4025a0bc590630a7a2859dd6550e0936830142f3676863ac09f34eac5e0285b7d1d9f240abd248cd2398fc1800f06f928bc8729bba81aba3d2f62ccc3468dd207e43a5c8faf5ef382e1b93f9db7b61f5087b66e93fc67a4b7cc6ebb485934020c9e9e667744d80144c78e62e47e9f091da519d5103015319b5f94dbbe95906a306a71c2435f0a230e10a725b5963b805c2decb285efd0b32732458083ecf4ab9f7d528a53810dd14a9ce84bb4958c989bf317c751ccf3857cc23e416970cb2424b2412b80d32a67be09475a8e4619a817736fea25473f709f59e4b32b43b35333a8e241b8beffb95ee8197eb6f414345b0e3520f0254e58a6138f841a22e2156d463188ceacc1afd35a36b7e9866517403e6a23b45db4d41f213e02c4fdee13e0a3abc38d2315e8d1200fcf1f03313164ecd036647819674c31f6624dfc85d11d80b8af4951f9f68d144caac28faf97fa2d2c21f06f93f540cc3579f29e91fcd563bd2e4e5d7c784286de5207b97827fa023942b625b213cc4ea59a175d789faf1a401249c53ba5030df88eb92477e4409b04b113491bb3a5aaae346684f074fab67f20e9778106eaa19fd9849d56616230e5b2ceec70f5620e913d0edab5fc166427ab9ad43041950e0e334c38e29dc95638485030e4055a9e6c8086cbb90a806a7ac19454ab9149c3fd377b23561205ca390ad38f42d21d8a08dc36a5a0dbf657c9ed49bed7a6196d70a01d1808da5212eb746c25e77f8c388a2e3207ac81fd59fe3506c02c7c5d846dcae9c1b637bfa559fc883b0fa095fa60b5cb22837b63c1e4438dabca0fe6aaaee6ce69cd1a505fbae4d737a3ae0e00636924a918d351bcb493cba23629c7a20ca2f53cf1f2447f6968bf9ac662dd749892074f74e8b2121d9020fdd5ecce3212f7b8f38f1b090e00a2aa2548e70f6aca6643dda8fc1bfa13f3b46cfb34f76456a151523aad8107090c5e28c943cad75e80d0eeb27d4e98c0f60d3477a92b83bfd716281e1bb4d2982f2fcb82b5f0001afe734f6723b890d642178a3ad08f3bfbca70ac789fe024f54e872e17827c5014c2bf781a3cf2b8a2810ba159248fc7cf26e999a7835f356c4a93981cd6e15cd9f79f6d014fa6e3a0ae4b4f043f5b44b043b484c169489f2dd2767a77b2e1915ac084296c900e695e98b774322659e692fd43147a5fc8be75a16352ad240fbdb08a680c6cf42ee016ede041f67dba5f2797010e0962db3464cd722a1145e22c05b0168722a92da98337e224bf4f1d64360363d65560a572b4b1e5c9ca42b824651fd8687dd3c881aa184789ab56259dfe03e78d8ba75c64637c652ce375a1864a6edc14dddf5b6a60f2a53d9a648ae7723723aaa47c89aa2330807d082a9b3246684ac3979a92f6aeed893441be27777adae5a2b310ea4f85ecb88e7529b814ef73aa5b5ad8ec668e19846df1af292f86627ff883c9243a1d1c47d4eca472aacbe23a86822230374e0cd21a67ed29d77103c407443f53140cbcfb7cd06ca1ddd54fde1b104b97dbe7fcc1ea89031c31c8f258c3af09b5d93f11a4c4036000e95373b983b2948d8e6e0ca0fd9e9a2acb6e279faf0b182f25883ae5c46b021f651c28c683270bb87e207410ee200f94c1c98a2fc96544ac5088f4f37d0ff0136e7f553a5cb6031b44010a0b0780e4b7637423dc6ae8afd0385a2d3fd4e3826a517375ba9ff6c914a1d06038b4d96205b3fd72d52bf47b4e1ab1f7f5421d6a95b02db676fd19ee5d28855d0a3dda563a6c8284b3ddf17ba0f0f9f0860f1ffff854abe3eaa159773f990dce9e15ef942e7995f907f3549e412a6a1b6eccbae712fa3729e3c7463454d24e880835a5390ca7263984a186d4d30e1ef76c152a88f6589bde4d6f20454fd42652eceff7c43ee6649348a813211083848a621af82d2d3e12fb987a509829774984bbe0519dc74a0725e995a51bbcd009dbfe952b662dfc5f80aac0b5353443986a2f355b307e8d6d4792be1a91afc2609448e09028ca0f7034821bbc99ebd5cbde35f45664c5c9d25decf8f71587e5e6e89e3196fa604221987e5fb2a11d8ed4f5dcfb44f2943fd6132e52f4369b063f45620343b7a1ee743639d60ffb54abc82585b307adcc239ef29886695bbc0a91b927032845ab01766d003e768b204a3b2bd92e92ae49b9f8669810f5ebb3ffecc9d62381c463ec141020d3335686f1c1ddb3c2d24b54bf894b0da99ea01169fecb36365f7fe7d86ccd275e9d282fab4d8d914305a93bc0309adac476f9755de8bf1369b090f1247ab835b7cbde6c031dd2c57c201eda0d228aab80683a0487e46eb0d7c5681a6bdfbb5a18e24a4684b3680e60b80bf59b78e066f69d6f21a4c9f43322c7d01f16d24ca1aef54223f538ed818b04ec5238c2fc7f25d163c92fb094dafda6581943ff9b585dc8f47617238506a52ab8ad036b11b7a1a40657c47279d7cf39ff50a6d892b2d2b20001d42f75173b93de172d8ccf7d248ae435326ca0e67d2b977aec5211706fb1411608dc02d14bdfe961e4cd589a3ae54266c03c7860c1e3915182e7c5f348951d525e8601c62bd8126ac7fcc6d8deacb292281530386a1a1d62ed8622f63412998c578c8cee102f6d56913ede6e135876efea8a329b12dc6bd937386752a136147f846d68b50b23cef8db29f03331079f6c3b48cf86711e1d2fecd65b891128d2d244fb50dba8778428c5e0d429044c1ad884c19157aa09c1ea049c1deec6811dcbea257c776944d17e0edca581b61c82b628cd95451e5a36f011823d58065641a279118482621efe3fdd3e48d155b338b522c56fa3905e74a6483e780749d4422091e2730a5d6dea09c41c871d3bb0ed6d8988a9be898c109e002b8acd43b939f830c90150ccba212f8f1d00a99f00ccca55a65082f1923b2016e5ed396cb5d25d6d1e1b61996577fa2f6dbd0d6e2862db2a7a6de056237b02db4243dbaed7a0af5dc19b75050bc614b2d100ade5fc253848167fc3d4b073d40450f3cdd13140e94f98220a28ff5571454173a8dcc120984a000bebe00d340c17ce7ebe8e8add89511329fc5e7cfea6df37d853fff026cf0f114a0e79097e80a63ebd905fbb646076488345f00d153748045c752e73a5241abd70134d0e7f72321eb7233585abb9bbaf9aec16477575b489352f9bc8924d21ef45ef5cb7f4b825b9ae8baa150cb5ed40d2a64826f69186a357ba38a9174c5a0a9278848482e3269bca0642220296860dbc6adbd1cc3aafd039c706d01bfb0ddc8cbe368cb5c503419723e22908b181e703586cfd233d38b444c69bfc16c5e4c986174dc55692538fb493005144aef7d97492367fcf623a3d23f4fdafe64a2e7e0f16fe4c18471fe28fb91ccd4dd259925429a6c466b1f319119f8523792d0f7e5fc86e86d9f79223670601c81c73cc2168369ade2f71d211551457a528c81dbc9209d765e5448904a45de86ddc2ede5e623292517aa64656526528b7eaa96986c69c041c830870a11bb7b2f7bad5237b91248febee9314edb10b7e3e7f97751d66027d8642fa3e0669a9a636945c614009f84bed362100354063c0300c92a0ad49d35611b4224123ae29dd6d705abbd65c0a412ba12123ff3a4c59340409a8e02d4412300d998226859c30c2c06a0115f041ff8755453d2861583ff7f17e499f438768f74df3c4b20bae24e557e8cf872572301f028f82c7aea98d6e0a98a541c469dfe8061a78922d6fffe1adf093dd583700586e6f6099dc1a01d3b51764348a996111068e69795413e1acb8effe92dd3f9c81b6d0a4ad7dd829e84ba20fe3352b2bd0c9f2e976d1ba0a0a41d4e919ec9a826b5228f5486937254452240a02343471db59d656aaa9092977ab10ee5825e873c11e0e85d5ff2d6cef6c594b650ca05ea861942196acc1e64c1a9a57913f73d73aa260740ab1878af5e949e7d79e18c416a5c25123bee3b7436bd8fce14284fc2f75b29e8be0129e7ee24148f8730ea7ce955b814667d9e4b067c8255e11b3e99e4d050377311b56a6e0cb2505973fcf9c42fa60f64c61215423a4745bda23f06e8e81f9d5b50c4cac38772b7c75097f8f10b2c4e7d02dffa5d6a9dd7d9859e80a72a2055c50cebea48cb131be5d45779a50dedc230b170cf09da3561426fbf5d5efcd83f1abd2e43faf85cbea6ded7b977132d3c5da7f63cac6ad9fbdec24a9a7407b4ed11a0213c244584e67ecca9d0d6cd5bab19eeac95874b493bbec72c640ae53b4c3340832137d8b343823a0c4407eb1bfaae1f4c734a5ed2a96cd2cab110ec3858b1ae34e62b4c680c6df26252bf10c88d34db4dd7ee2cbe818b1116a5db367922cca8393f15c355d8a809c937309980e3e3859e765ffd0f067019823764ac496541302ca424b86a01db24cd44bccd36299c2f980cfacb70f9d889bba537974ded280ee3bcd9b122cd416df1087744254fb77e6bc277725792374bd327dd214ff11724a07bdc1af18d50addb6cf91ddc84ff05f93b68325d2c096a4ae4c6a0682d76d34e9e38dec94971e3397ffa5139dbe117a03650ed6e28a591f5dbf3c56202ed8603d3fec713801f12bdcac0c14726f75c67daea9af598da2263554c8174e454a0ec2ed2e02c11e80c47cfd1c7e96a01bd180cb3cca01de058c9c23c263bd81cdec15b332bcb086a436c963cea3358e930f2f4cb9d2f2798102b5267adc5f52eec9d0b520b07002069be6e369d6c46cf9a08caed4e25f91237bbfebc0519d896b2b85ef363f19bd6f4eb67539248e962841d481111663ff4ea37e9d3e2b068fdd1c04466d60c9c049ab67c5b88e507b4a6140b31c44c2ad300094e60368fe3f15dfad680cbb8a9b8a4341fb4c1ecd380713f70e1687e96ff53ffcddbf31ced7718ab17db7c95e2918b78bdd25c7ab9596d955b70745896607f4f3e657557515250339c7ca6e2606115b725f4a69430d654609397e5b770e2231fb74c652ec0faddd4070ad9108f71d2bc687738bae438ead6f51ee75874b02f157da5f9abf95c21cfdffd9eab1347d002ef316c1f675e5f32ecd5cc6c3cc3b9217b5e3c69ae91e402167d904436b96709aaefe7127552f8a5bb8341c8517b4ab5835beb175db2760ca9243156df5391a640f57a03d5074506c98647a22673872d7d1bf23b53e8b08d1aab173ce2d99e1c1b534331ed46eae780fdab4ad2cf9013ff420e291bc90394883b9e2d847ed7a262ae03dfc14d7b3b24487cd3402a307f91a4afa32e9dc2783c38a97383753c4f5b020203008b4dfade6355f3f7ceeacdeac855948eb776a357858262bcd3749bfebae9abfcc37f5dcdb83d3295fcfe33c0ab88d9848878439eeea4dd09121a5112c77c7f5343c74be94b041db7be6766703b44d64783604911b40870a9ca4e2197daf021df03ecb1e14f0a730c8eaf2974dd7dfde4c02e81f4ce9f3b5246fd6b5e9252fbd1ecb99994d64c1f0245cc65fdd09b6de60f603e70b003490e523ed034d5472e10b2acd6582731080d755e79b3e73c5c1dbeefb5d76a0b35b6d13f0608724ec088e8a4d2cdee36df0cc9db9a67841367d42c9328ab783984705b3d04a81378366c0c962a9c676c7b67bc35370028a4412db7042077c2b3c859dbb55c26d3859e8ad1ea7ff0bc7e093ab258cc2d6e725c3aa3f00cefddc1595f752674ca4573a070e3e833ac362216d85a1302f55bcd499c1b519866e9b33633f957df578660094964a828ed40513f459e52907236a942801305b4bb46ab5d7cd3e879e13108521385883feda5764ea4813b5680633fbcad7829f3bdca6399e634644da70a05d33055014cd7590538d761e38ec5f99730c9019364679afac5dad1e60ebb540e8c09e718919d36d4df647085f2fa0b269400c55b165597594032fb16b2e576bf63619016d6147c55d5989fb3c16d28d4c574c75c918b093f9ce9611500f208fd50a0baeb254ea3c8563ce198986fe6aa606ed62ec2668ad211774114b8894d86c42b212136c437d3db933df357ded62b002fba300d69459f41a17364b3551632259e5b85e481904462de20e5b62291841948f989ad895108d10ac96aa119954416cd0222aae922a6b652f2418e6773bbb030f5e918deb68aeba471fcb8105238623842aa98b4c6a20127fd5366efb62a39daf373d8d527500db6ebd60d808b3c70b2fe6e2fe4bcd80593464e89aa43462753e9b4957a14ef249a1532accf949ef1cd5be12e44c1453f6a7bc21640be6d4e9db27ec0fd46f031a4bdba356209e15a703695cda02fa82305b44d0b332a943de4c57cb6ce5209ac25680dc63e6d2569c26a9969b35002c7e1da0694245780f78129d6b7e8dc0585af7e144eca8444c4af00cf238b3e2a7256defb626f7de32252903f709020a1e0a6013d3a503f072312e365d9c13ba30a62be5a751005e94ebd96fcacfa35c5c6cbab858ca8f4b0f1a48af87694ed034cd0e9175f3ce7a5ee722111b40e9a3738f43debc3f1fa3d855f9221a229188f4fa19021a9a1340ad8996bdb44334df687f3e462f437e6708ba65419f15c0dbc99e5d76b2b883f4eea5ed190e053d7b2723c1e48683d69f4e21873c38649b836f9676a845edf5d7a326756fde79d7d5538d890294bf390b87ec31ac22d92b33b237260c3d7b3dc6b04ade481bf939489bb03b7c2efcced959baaeebc2ef62be93f9ce635ccdb8fc68bad653b992218829f62c9e5d64af0c109e3d646f8c0e9e9dda1bdae0d9397b3d06cf2b902678f66629ed75791361d8c11878250cd62b4aaf843df768eb599d19dac86de5ac0b29a18b2f97a5f5ec1d83b1df7c13d92b5fe45d27f29077a14ab90da07c910fd1945c941fb261b1cf0879c8e347130263ef45f1ec77c66b53009be0603f44f3cdb5d20dc03b7be20eb46edec5cf0707f3117ae9d4af1785a671d282aead09784d3dae37f5f4a03f7b220cdfd9f3ec334d4117c8e166bdc9d212492d8ce9dc53e4d2a528c485ea90766f6ad9bbeb954f7d0241051172918bec90908dcf75d31a9f7a1ccaf85d1392fc054dbb324fa7df98a737bc3e2ff8944ea7344698ed824cbce69b77f2230294bf6d533a27c51652e448d17a36fd36650610038030e5f534e396fe865ebae45c4afe6284d944a0843068e1630c6f067edb2ef5cda68beddb65a266c96bf7e5e390e9edb363e2cdaa55f95f8d30407fe95789fb32db0c5de4016cf6c99399468d20b088f643a4b74fe93188ca2b3f9fab145e99fc9ede9fbf1a39c56eaa91532935720aac9153f2d6fcd55c7a2792214532ba7a6b26dd4c4eb77ba20989ec45f2229f35fec42c060080d40d5d86977ce49d0cbf3ee3a7dfd24fbfa19fd369af4c277b5d9e7319f6ba7ca0afd01457b1269b62634ca1d892b531a6487664a36745950892a792887c3a2b7f341c14bff9ac975fec9afdc89ca0f0e724020510ee2f929a97b24794483fb591e371256b1a8b014ad734ae611127d209f29d879cc695c8bb520d24896aec947f74ed441d0c43d1a9addce62e3f243a57998889ecd3316a9a04a526656bde334a39a7a52060f0a5bdedd363d3f6d93e645a1a466fc6d9dd54ce969c051543e3b63935bf3db539a78cdafcd98618b718639c73c6186344c2dcb8397b72536eb6264173f9c379a6ea23fefc742cc2684ea37ddb34f91cb745ffe0c41d34678db9cadf498fb3b7e635cdb7fe79f6cdf9e6a7ebd4993e67378c7b9ea05fb471dad539bdd33d3eaf9d9d9d9d9d9d1d276266a1cc63272099c691e18062b25950b7fa66676767676767c70919191919a01d19de388777b8c7e7f50373b95c2e97cbb5b3b3b3b3b3b3e3449cc5599cc519e7ecb4269b05718b6f18875d2e97cbe572b9646c6767676767674716c42d7b7c5e3f30201973b95c2e97cb2563322663322663322663b2877e106d8137271c7785397287c53097cbe572b95c41aee75e312b6616ca3c76028a37be18c63086318c610c63587c318cf6aa29089e4eee61d8324c839be75e4556f42e8646fddaf1c423c51718ac5341e08c7af4d9d12a592deb950d8fe7a2cfd9bb09ab9e2022c778926fcede5c883b60007c2d441e46cedeb05e713d9de2b843a8b99e67873d77ecab9e87eaf65b0d3040cf372779b77d3424cff34e7a24cff6175bed261c86aac6f5f87ca8ceff6a7fc121006ecf44fdde46b2dd64e327d56e1261a48fea1345c0e7c24b6f2d441cb6ff3a512582a4f59ed5e92cc78d3617d5cd762cc2480fd5f89df45ac61deb94f4066275b3f6e69c73f2b75837e9d80e37378d33431757e028f6ed9386bd354fc3b99f5ee1e031e7ce56af7a67e2f40ac6a34f57af6ef0e81deb550e8fdeb25e851ebd67bde2e1d13ba8573b3c5e992df6f2363c2c2e1e3da657385cf3e8a75eddf0e8ce2af718e30e28df5cc61d52bef964550ddfec6582bbb2baa36ae3a8319d92da8bdfa8363c361c04cee2b1bec5bc56ef6c54cbe279a88afaeef3509506aaceb0a4d383409ec9047aa82ae3bb9287aa2b281eaaaad4b0222f3895e2a1aae93b9387aa293d3eaf1f1e23222b070aca4e8e1b3cef46c5435594195d270212c5443251a984831c4d01de8e898050b5f4a00c0fe766a767e4330341916809a7da6bd4f6e1d09b412f1055c1ef4ea4cf51452fd18f08d6a91387d3a92d886b71381a996ad4e029c00b76333c541d3d0e55e423c35bab3638dcb47276463d239f6d569ac5be0f87daaf96da3eb3f573a2e1a1eab7e2ed3754ce0553399c518f4fa7da79eca85bd04e37c977be77443ede26bd469d02e5a1aaf72c55a725478ddd5251b57b96aad3e22ed5f52a2d386ad78acd3c8f76353c540da12a4555ee6bb0b878bebd566d78745822485aafc33516dfbc86772c7ee3fb115fa66e54ed73d491ab53ed611de574aafd46b5f18013ad56abc5bae1394c32200ebb2e47dd82588776ad6eb34eb5b314e0dd66ef281c383aebb9549614bfedf3ed38aa28a853ed5e45320edb6f5451ac8a8062bd8a3cca893b6ca2d8b773084077a7d4c5857a6571179a2387163f9a1a953eaaceefaaa7d566bd68955936aa8ee6b6fa36eb95084804d43c624fe3dd4a1b5efc286561b1f1d16cd659ea8bb37c342fa91b9eba612b7dafd56dd4f8b6c68f9fb5acee06cb78638ebc56d76a64b5bc702a7543ead081c373a92c8eaaf1bb2e7e2ef6d6bc8ba350bed5bb81a0df9cd63b6f5ee47c03a25cb64b65715a6b38eaa3a981aa3b5a7c478b45326f583c2cde49af46a51f3f169b0355452fbf1e21971e2bf599a651d967d4dbb9befd546f28a35e5fa937e6efa6526f8ca95ed1ecdb53ea0d51ea1dd5eb60bd94542fd7faf6d156afa8c9b77bf58a9c7c7b579f98a27a4d7f45409c479f517e349c8ee6fce9dc384bb34838188b675656f4f88d621f6d20d16a18c9acd990c89a131259c334c717383f6950a2f1c69ca4d463ea99000961f00cd3e7a1c615656d88b2aa804eb6018c33ba8ee4813ee4afc0434307c0004d51506ef3b4c931c2b0e5d66c9653e2107d86b5982dd2de368e0b79d0d0301412893a1a230f1f1ca214a40991449df7bdbcd0443fa9010cd15289db4adaec12974a25094e4a3566cbf2cc92794a9f779aa46c8d9d432111d72ea6f3bc8feb057db0a7893c11897406f0c62e7e70b80577b4c89c148c302a80b7878fde799e9c11a6f3989979cee9fde43abd0f5c824f9e348d68684a2812858e6ecd8f21c700af177d1443ba351f238cb671f40b7da26ef6c772c4c919ae2e72d7915620a5162c994e0f8a1e0ef6446e383324cc9c7c90cc743a6d36e866a4537a92654b709a36209b2e31a404e5e6c9c290d5a04d9b4a624033d98f0f904fc80b8d4228a199ecc707c8473277cfb985b8a96d1bc7512a0a7d21100ca5844e2119a11baae862189c93ce4423b98b8fce71304abb510bbac9cc2c995932cb2337370864efa0ca4a9abbbbdb4632745d94520cb90690d7d053e34d3adb8052ca34ac01bc9452d12846185a82ae23c999ce5d8802227f888d09022f7dd9f302f0462026cf4824a144049cb8d1c9f3f098c821b5377ef1ec9ddc86689bc468084094528ef94b65422dca8174a259b16ddb36a715dddd564c59ebd9e70f5675d36d52ef3533d31ef290bdb23ac1612814aa457c1480436e16910e05874582b0aa9f524a435da3748a9cbd0bd22bc99a5108121c6e4e38c1210779620681c16011a60a397b017e84a24c13a71f32e547335d56393d073a3dca9e03c8aae638ceb72a39ce27c771939373cec96d9393b14792678fd6ac87e15f50b6344f0b73b6c44665a8d325647e74e0f39383255a8c60c9eff8a8051538dfa3070ed96594538b2167ef7ef44ab23a6e9b104138e41f4bb08afd89f93f9a52106c5025d303ab28a53e2b5764fa9032866a366abe7d34d5e350d32c8501f8c4fc0b7660af24cba3a2a747c54c13e14c21197b04c6b08a411004e32c54852eaec09077b36af24d9c027293648bacf8450b96660052bb61c1a7fc66d3f6583c9bc76f8821d2d99d79098e1837e366a42e485e908048b0d6730b17440a0337e3669c1352186400c1e5c68514e3669c13194070b9910104ce0bae0917e38038a42d971bda3a01c8c97000d11627c311d3b4c88989410378e3ebe6bebce732279691170306c9494ac440e1490e39244a0249a41a72b0f2ce1539601539a95ecec959a29dbe7ccb9b9c1b65f1b5d23a260719cd5eea356739ce2773fcc2e299d3678806f0d2ef9c2984a317736a73c7fbcb39cf3b39371c52c1320911c04b993265da39a2d02cb6386979d212f4cc1ea8a20a49bae2b91d8b676f528fb4ec812ab624323dfc808111c3aa6d234950daab39f528ccfeb60fabe22b0a4bfa270840bdc5e63754c29ba1af715825bf2439ac1a39149f93ac685459c621c79c8338eca0f86c9057e51772c6a10c8a31254bdaa77d56edc3dddbe61b18edc3213313c02b6f3c79c32a2aa48b55343bac42498fafc924cfecedd32b2562ece013f07a7f39f64d2ac7389449ef64d07f01f4976dd895e895bc61199bfc9575f64a9680de308a44d6682db202472905b8e04221ce43d44321ca51808b6deb4e43b756610c496600afcc4808608ce7d7a444a7d8edddc235809f7f4870c8af2850f1f1c9c7d7135adfb127bf1e3ce647a37d4ad8d8e779fc683aaf86fcab7cc35470c822f76aa7cdd377f5cabc0ccb9007abb4f77825339b3967ce2239b17834cdb59aefa4473203c8d3413140998f46b31e131e6bb48fe6c67b6e3ddf682f2d7b7fe3cc895a8453dc1a090164bf9199d9bb2535aa832ebe5c098b404828d9b92247e2709ca422ca969849b412d34a9f297d9ea54fa734242e4a52f157a2648edcb98243f6697afe68e4eb08e08db24b9148420956c9672a5ba2378fdbb4573e2a887ee9fdd25e140fd4cc6360fe908fa6ed0c875ca79c524a4df319a79cd15e275e1b327378761ea3184c27e411c04bb780c94e0812e73b92e7a17a5f3e34996b91df23df1d18a0fce963fa0c7773cd893af6a4a83951f85e9c2c4f4d4fa94fea9155380f7627b217a4fff2d465125c102ecf858ed8a9cd800b2ea650b5482fd2ab53dc05f0b6ccbe652623870423fdb84cf1ec5ccd935e97f47a66e23205cb56b927dcb01361d85d5aa4178989cf1b7054e1b52e8097b4f3a41d0ebba5ede5809cb03c91966f79e92e2f2d8d309f0f16d20d3b355e5a122cc2b06b2800493e1cb25f1d829e9d0423f9a85a4490b47a1cfa8bbcfbd2cf2f38a24eed0d025140424e725288faa5af753ec3db672ff89b67e3f692cdb43f27e38f66669626d8ee511adaec13f243a1a83df5f8f9a04e048831c618e3a94505f19bb54b70d85ef39a0567c415139c6a6f5fa257339d6a97360078f2ed37159d7cfbadef7e3a510aca52e490e90c87edb334adf7498e043013bd1ee531baaeeb4c1e6ca35050aed97a46d1c597abf504e914a701bcd26606de184382c66ddfbcdb6a900f80353fb78a0262af5452f31ca37af4732e9570c8ae840d873c6f9ebf2298a5b55ce08db12042906095dca28cd3a28298d2d6fc0ca380486f6f7b6b3ec6a79507879c06f0f2f87e1ea419a55a4bbaf8e7b59e6e2d055d54894e50fc76e4b7cd769c0740f9dd49af0920a594f6e945268e73caab90732e5f1fa2b6019246ce6e9c6f1cd73d46ccc78060c8bb9e5e24b2b79d7a472bd80150bee41996df9cf2bb7a1faa43dae7956fa23e79c539a531cfd5174eb166bd8d6e967218a37553d175d16fe7b705caf7e8a4af044b7ec6c7570960df69de5751403e1ff9c8de917f5ef3dd68e49c8f4695ff63ea5e6deff8ab3ee28f46f663fe7c7cce869f4ef937fe6cc8137d3dbe1a9ff253f75e7e3d6afc4ee47df5fa883f8489cd3fe7fcb34d7c349b8b3e1ace451f0d751f22efeced9cba7c424618ea45e6c708439dab433ae7bce7e5cbef220a17c0984518391f3ffea8b3a82036e79c73fad1704ef9934e443ef3c7cf0773a8c6f7eaadf910bf57e5181faa1749141f6a7d8826d4f9acf1bb4a44febc485ebaa8829b362906e8b38d12879a4f6e6220800b203e3033c5cc112e8040c205089a68356126034db89971820b0960a0091a78820b308908448c31c618bb79f6ecd9b3af29b20fba18638c31c618e5133a965272dc41d7dd8b438e4994524a29a59cd3b54dd35ee636a7895f9c46dbb4b96ddbb6ad01044fdc130cf0f2882fce932b00a5735f112156ec94b4d463e1509b736a939e3c11382713de34c94e21ca6d5a37bbebba8e65248d6ecdf3a5dcddddb23b8a46f748d75b84454fba18638c315aa0ebba686f6c220618bd8bd5e330f2f8e8cca3238d30d1a54c032131258f72e0c4e81e38e4c4006ff4e2a3cf6893e050f2a8fdebd1df5626c244cfe1c64f8b92f6bec8d869a01387d22d4a49278e64c2f450bd3d7cc8635c4dbf007889e237f5b2be9cf1529246a697ce79ec95c9c64ea1d8d8a9dbc36fde95aa7cef558cd1a3db1bf2eba5135849a34a39dcfcab1e879b7b15e470f3ae9a38dc5c546fcd8b5c6b5aef8cdf9ca5eca1e76c75b2e6434eeb353d05bbcfafe7f90579207924f9ed97d27ed5abd43def64eddcabd7ebce450e829d873ab0b39245f5d2274a23cfbf4e4af9a5d1e7795554e383f589911341d27ad03d567dde3949e49e77a18fa693528e6a8c305ff56a8c385c295fa435cba851df7cbefc7ad0506dae464d33b1787af6b7bdda95f876ea92ae38ae6e556a4048245d33598a814edaf53af1ed52457df390cfda691f4d68d210b51e8753ab2ca32d32235356b1cf1a2a7905244e49bfa6edd9b5e79eace2f901f089b98da4f6d14c4eca8e3bc452e9c4e22fddbdb09cb6a9b107d28ef36ee863e9a5dfd2c7192ffdce780979c4c89892f2451fcdfc64dbc8aa18a227b8a2e65b2e59a2c4f52445b4aef4083865a01cae5081062e2ad0c0b5c516f2e5dc1c0781f2356d8b59a24994458055b429c7711cc7c9980ac4147b14318c6886982536288057e2449c5e510a82a793e3bc382e28e7853383cd665f90cdda66e6c9ca00fb64b0d917727e46813383cd66b399f78528669dac9403f076305919609f0cf67ab92e3db1e5c5c5680c6396e22cb5bc6e1746490a013dc3aae87ddb21ec9ba380018caf157cf1db109bf392e79ceb95ff11117d3a6f16d51e593df0aca8f6f9252d80fe17dc3e66e10127c42c7ad083f822ed90189bdf1ab658a2795784ab1cc781af3953faf1f44af378c3b682551c054f4e70e85d7bf1e3accce1100a0e398e611c07fa0537eb0457a12003c815b150ac38d629cd6957f2ee9e52fc82f6966ce4b0b3310eb5bf1c23d94b9f4bb1177c0ec5ded3cb9d4e69ceb18c55b19f5e316c732cc00bd23002c8691efb905f9e495984d15ceef44afe744a73cd5e5ab29782f682e0cf49f36f07e0f4cbb308f49c4be7193be120567dae79b7da86559e6bde37ac1ab9e68dd38d6afb57dbb7d855da71d68382434df3191e2501457e69ab5792a5b9bc915474de858038ac89dcd75bf39cb4e150bbe916875a0ef7c40cd51b6a4eeb955dbcc6b52805c1d389b3dd7acd9d682858155ff327802f9a1dd224e94de18a152479d2c797eb051f51bac88ab375a2f747d3563a47db9a0ce0164bdad6b4a823246bba644d7b84c788c8e20092d884655bb109eb8820cc320d39c801ec77c084073e1f5f39f8e2a583264f59155f3c50f2a567ef48ed5d9b78f24cc4262f2db76d82086ebdb44db4450521dbc6266f9b884d5e36f959173bd9de35fe74ea3a37ce0a9d7815b293ae244bfa895721971e39e459593834712875369f75726a7a7f349af4fe7a70c719ee4a03229135cc44e8a490361c83e67a303735682f68e7507249e0bcd3c7c88aac927e5f2e8f1e38d52eab0c873e442fb33da1328631217a3abd740fc32e44c166cdca74aa725a8053c6aa1b67ff05ab6e0c7a277a35bd1d0a8f0b3f3f2fe8489d824e41a780468e0ac02ba251030c7007c4d9e9544b9bdda4f36622e23ac4ac4d9a11053d7e5cd7d97da0df669262efb6cdbb28254a6ce4f1f3367e91a86b3dbb2848347b76aae45b11018980508056ba601dd8b99a02301412752211e7f193ddf3128b97de499426285c959674e3d51150a75aa399ec5be124b8026390e340e7c0100d8568884234b46d73d421ba89b650a8c9b37728324ff61c7be4a178e1f1ebda4f779e7db472c5b3772b3ecd44e48508e8056e23b96d1e0d795d0518fa36bb22e547b3d205870c45cf879e842a131c6c0588c315180d18700b56603460404774ba9c060c3caf53008e7c86a318d463f7674488e5d9118c04e05d81a10081b509271ab57338310605456e7baeea90a424b99e475de0dc3cfb3792915a200a10b52318872c4c4440222f443114a05e919c7d04430122d9110c4502f08a4e5b57ee6945c941f92a4af579f6de793d3b0aecd963cf08c66404237d343aa218378f3a37ce12f90cc7b803ed2cca0e4b11c08b32823d8b8050be8f66b32840a3908f3e1a142f38642ee45c65a26728310e190588c31558846101784730a0671fc558755760cfb02e4640ace29c7de405ab2e139cb3afc0e20e91566ede043d7bf77d74f434722492c9e1a0a2d31c6c02d8c559327188921e933084d9b3a3a4edc13f3d268108b16f0f79b02abe70acf8e848448057b427be5000bb91498ccdc441c1ec6f84d94c9ef84a81093ece0a640a9c0a448a9c0a440a25aae8d14156451c1f3d3a0ec9837c913cb04726fc6529fd803754f9a84514aa7869afccc7d0df901fc8145670183f8b1e6ce14371d61ee83a525711639c72d3a28cdac6e27e3a9922c79730746739c518230e4069afd7557415336e48a6d309043d4aa547c1d97a09437796e81df3b6d90876d36c1b7b008c1ebb0af076108bfbcb93696a5a5701ca22e3008cf6769398e649df6441a404b94edbb82adbeb1380d2fb03c2fdcece47bf8d45732e7f7baec5f406c439b93c27fccd2fb7c35b17eb601dd016dc0ff73323730e0267693ea3a19f9c9d9ece85c5ebc0ded5e7398ee3e689eb397f36e3007c6256ed2f173493fd748a9d72b11e6e09a798f379025e520ee77305e75b0eab3625acea1d566dcdfd8055803bddce737739cf5c8c31c618638ced5cec947c9784c32fc8666fc7b81f8dc361d7f39d3b5e68a11cafe5774f386452d08f664938747515e0a57f3b978bf3b41a59a11a595ce57eda742e2c5c1cb22b0875d1ef388fabbd6953fed436c93537ba17f818617a5c70baf8721b274a58dca11461a64fe7c16bf5aa8675c18f37e675fd63f842a4c74e697c65ec279f7efa953030c24c376d0194b0e91268ba8c4def9b29653f65d04f6efde49b9f8cf3935d3f39e727fbfce4d74ffef9c93020d94f0efae9dd6928205bfb6651736a8da355a17bc26bfde6f1e5ced9b777c1de5663174900c2cdc724fcc027f631093e3adf3d7107698608d3de5a84a0c907e02312d0e0e43bcedb2a7f280d726e31e4ed32885bbdf2bcfde58c55ecd2d3e82724baa43ddfb75fdfde3d5487f3f821d1282122fffcb3473c2b631625e44867a5ccca1a560d6b863bed3b621a215921941091d31a96b7f9f6091139b547a88b6cec94947dfb95b3cf08c9e23c7e454856c89e3a357d86c34e4def668feca06f8f5ec342098947fa25a38c71b25ea136a71e59ed72d62bd46683883ce491d53d325425ad1cdf7c7ba90ba07ff7318b0e78e0a735b10b7cfecaa06fbfa19c459876d316c0eee9150a4c054d5aac8eacf67eb54f59af980d4b705aad562b0ad60f90c8091bc0d8a2c5ba1d6b59cf3aa815637fbb67a405149680d362dde9fabe33e7fb095d4081498b75e7ce771376f062ddd9e3f3f3ed77027d3bf705d1c918658f88c8311e054473d62ceaf42ca52d40ffdb3de0c72c3aa082d74a40a470c261fc97760edb5d00ce6a2a03c8af56ebb90bb01cb4e6eca30d245ccde411163a3ebe54f0f3a325e0f8f83a4114be2b82ccf1f1a58218bcf7f165021efc057dcea40c3025c6887ae972099b4fc984138b0a722468e2f1f1a582333cf8f1658219fc057df24ca4448233e4daa6692faca273e2e0205603d0eb220920c8640d38e0f9eb63c041ce5fd07b808311fcf52f80dec7170ea2f80b7ac8ce79fac9c38697adc821758fdeab49edc9042e017c7156cdf9821e7f197d7cf19481270c7f3d86d344d0c55eb147a79207f943089290c3fa01278b19ab638f2b4a081ff1c1e6c5625bc3ea2277c7d0e8d6e0400523b45848584ee074aa4277b3ec9b9beee64905cfdb3617962c5f72374f22984cddcd1d86a75357a1bbbbbbbb793a77b3bc024bdebab58d35d9dddddd2fddfcc2967bc6599c6926939461186551c6c138d86cd6b18e9d4e2f2f55b8b9d17ae841d380888991dabc993772462691c915a413e9e40a2d5b3e11e68cd3355d11280231b7b6fd9c45b61ed289b8cc28b4ec8d8bf4cb1ed289c8313429a920935d210c6362a6262b7d13ff80a483a4cee65d8bf4d374108b479bb6887c7905cf939be4298017d4bc33f10f4864583cd2d9411dee6964583c5bfbfcb6a8205a93b20a52fe8812e8227b5f7bfc2a1120da48c7debd79bbd4ba393f9ae64fb35302fde814fb4f90e9db83b85cae76cf3baffe400199be391428209bcfcd4a1b2b5b4248d7c72e7b2416d287552367974b58c5bd98c81fb9c591903d225bac621f55e9239930cd36b59095d44a1b8905874ba4e9bf7aa515cf118852103c9ddcc3302686fe6095e7ec42046195fc1eafc7ebf1ba598881091e2c0b3178e16f7bf13c6933d04d8c55977718c6aa988518963c3b77c1aab88513feb217cf5cfce526bcc3aaf862c115ac922378f66e4a669ed327f5aed3ca245553c221d350e9db6bdc217ef7ac53ce61d87eddc74b10a26f1b824800b72779fc689ee896aef894f6477379a72f2d797b4f972e915f8675121808eb55645116e8f1e3598461ef9c1e35012f6fc1ce5bd020a6454d8f8fe2d44a170fc02b5dec2875c691d35288763746d36ae7602535cfdab5daf957675b1a8632f115d32eb2211b8067bfbc922e4e314af3c8434cc481bd2df5f62f809beb704e5dfb82103db5ee2fbce26c642dc43cb756c1d216a0ff07b8f8b657ee3cb35ce93a71c87e9a69d3fea09b1e5f2e2ae7a564e24e264ccf795567736a86219f73ae79ccc47f4eaffccfe3f70d69ff2ccbe7afbd73a2c8730fe15c3e13cfe43edfce9b173f203139ea0d8f29c2618c16c0f61b3e8f1cf586c7c8e722a2dfc04133f26e547b07a0fc06238c1744e7239ff5c8741cdec51ec0f892c1cdc7079d468d20b048ffc8de9a1f79c982258f1f8d4e0ef776f12ea28801c6970c5c3f7217efdad3e611c091b7388a778b4ba7496892110cbc29b2ede30edb374aaf74782a65c6a17432026dce00de58903405a8c353507ce42e2e2ec156af8e48960e8b6af1c8d2e13a2ad829e92526a03fe963165244e16dd4000374f1167f79217d3f8658f191cff04b953fbf2046ee6251418cdcc55dec90154b471e676984726971930dab4c1ca25c6c0f7e97919b707a65d3aaf8caf9913fe3a59b6e4c2e53925594c22cbe6400f4d253825c5a461588144a5cacba602b09ab62135ebafc68804c61454b82ad0f89d0532ebf23449eb2d3a753327ef6a084e0f094a7ec91d9d329e938bc86d53c003980c3c3b9d3524b61451d71e38647567f3dfa372e40ea7ab9922de962557c95e08b974e93b02a3e4dc2e18866040190c5e571015eeada3e9a91e3a891d5dfe2339c8455232b9dba585572e99dcb17a58a1ab9fc91e7a8a891a539acd20cc014179b22e350fa04028862238723d98c30231b39747be77b386a648d2287a0bdde7bae0516623fe3a31658987dd073fe790c64dfde8d8a3a22fa117a2487b742ce811c1e8b88ac90779af701e19cfd468dae7d4544cfe137ea05e48f3cc547a451c94b5eb2773ee81d38c31e87a0530e41975fc947357e6455c9820e5aefa60a5006dd893039bd92aceab60a1074fe8a08b1e84ea7a48faa7c9ad3abc8920ed6ea3645465de0055bd773b546557efc7cccf75c11a608a0e77a49da99fd7402c829b294598a13ef73cda5cb8f08ce3f1b390c87606f1bf309a18e3a223a0ec76139303d7a64cd3447568e1a59b65e2aa35eeaf3d24973e7a5d77aa98d7a414e67f38e93a6daceb50767f2192ec25ee8d95b84dfe46d43223e22a49b9cab139cb3abc8545c3a17e1577193153aba08adb8d105151c4a2a7698b64851c1aabb05abd8aed8ec30e930fdb0eaeaa43cbc61d5d5c981c3aaab73c3f90787b75d69a9c0587575a6b35db94991fd70e9295f0071e9293303b8f4142741b8f494a017979ef2c4864b37b5ac4b37d954976e72b1ea06c07db8745312565d00788f1c565d1a5f712961d52d80af24e150ee20e00a237a8ac022888f2f7171e9a6578b4b37314171e92620565d9613c0a59bbc60d59df177e9a618102eddd4e407976e9211e1d24d5f1cc0a59b6643b8749313215cba29a8e4d24d4fc016c966e462d5edc17d48c2aabb83f390330025322e5d65875577c5a5ab5cc1aa2bc3a5abf4b0ea9e5cba0a16acba335cba8a0fab6e0dff5cbaca12565d16f75cbaca8b5517a5c2845597860a10abaeca572e5dc50b56dd1c5c0797ae1263d5c5c1635cba4a13565d18bfc1a5afe0f4eac86409c0a5abc8546afc2e7e2af6d6bc8adbfaf2006fa99e84936a8901def5ab463824dc860374d8f002e870f7a1c3fed0014447c986bd3fdceaf0a1a3002d0ed0e1f5013676b8f7d8414363007baddb08a2d2ecd841e3363cd6de1edc0fa7b146a80f7b69a80e1f3ddceab0f6be78d561abdbf0fcb0574787fbd841a3c30bb083a6006ec3d3c35eeb0678b1b77a106ec301ee2d3b76b4bcecb0b1e3c586dbf0b8bd3a3bbcc5013b1ce0a3c78bffb0e140dca501e10fd7c509608dd0d0860701a11161c943177b11e02de10f46941a103a4a122e296bc37309e06f8dd05b7220806871972028ef405823209802c26d785aec2580a358235c0b4a110e84354211602f10340c42006f095b5aec7547095b50dc86a7087b75420f920222f41fac1110881f5abc08b717c583b84b03de5e02b811a99293ac119a7a92a75c52f603363c6ec343007b7552fe0d28a59cd40002bc3b025cdc08076bdfb0363c57c895711fac117ac387d277007b1b24f97043c6de0478c91a016fc81c005c00e9868f1800e6b0363c9788cb03f561087b490e5a239e10231f78b0d7071f000f6ec343b257084e880fc01aa109b07700f4c6104238e90689646fc94737ec076c784823b7e11162afce0d1fc21a010760afcb5823e00064dc8647087b493e44c9de910be1e00288f003e4f081e638c0e7a51c608e12e8363c44d8ab93c30fb0001f72380f0bf08107b7e1f9ec2d3911f6827e00f778cc1bac114a85acbc9e5f1fb1b246c0a900219f35c2bdbd9ff774ae46b8d741c2c3616d786e02ae0e1e638dd0558c378379a583bd2b8fb146401c3ab4bd27ee089f316f7005582374ce3879cf6e9ecd6ec37384bd3ad36370dc307d068e981bdc86e7646ffb897d867bd608f73a3c642480be0e8e15c52164c565e0b057867bd688f7f603363c9fe7363c09b05707870be1b1b257e7c659385c076b04fc0fd8f0ac74701b9e157b3f5f9161afe7327ca611604411418838c01042046100203f7cd400788f0a00a7a93878012a8c13a0b2bece4896001c888a83ff5061dc87da030f75076609c007507170990ae3abaad2a1e670a45902b0363c01b02b381c4a00d8152b38941e5371b03a3cfc860ac3c3aeb83a257d47c5e13aeaf454c5e1619d9ea3e2b02bad4e49bf51a75db9e994f4975ac36d5416b715e5b5d270af35dca5b2784b45394aa5e1a55ac3c1cae2a48af251a5e15fad615566cc62559ca0ac4a100dabf28443e92a55f433ea56852896e0e44f9563c28d1576f0326aaf208a1f32fc4add4490c5ac0bffea917d7cbd8a4b15ab22638faf37d5f8312995c8c83fcfde9af7bceb95edf90c7fd507ffe8f3b65cafcbc9b4bf9bfbf66e22503c77bd4a847bce7984a34a448ef1edd922fc1ce7449a731519ab545c2a4e5482549efc4aebaed894fcaedc3c8adf152a5eaee0bc741a359e80dcfa980286184af76aca186228fd33c34b1fa5e1a593c278e9600a1b5e7a298a978e52630cafe90329b208237d86516afc528d0fd6f8a41a7f54a317bf04051070f197f6bcbc348786ad7328bda6cc3a255d646ae11c91ac14591797f0ca024e8b15aacda2751b410e2b7e34415264a525807e53642fa308c35f90e6bca44a38259de670289d55da424ee9631621e0792e8101f4bf29b2d1c72ca2f0e2d9de94a097293254ce0b1259b321a1353490748df43e045dd300941eb92eb26420289d5219a9a43d1dad6d737773b76f9123478e1ddbef89fa052f6df790bd9452dbb6c108231d5c02c8595b02bab9a04caf4a31d5b2bef44ec11e2c4141060481ecdbfe957999b8437cf9310b2954f02c787d7ce5e0c9113ebe56f0e4756438ec618643e95eb3643e01ec5b87b465e2ca484f42269e33a8e44bd675510f33a6d00c08460000007315003028140e0ac7a3b1248f036d1f14800e7f9a4c6a4a1ac7635116c3300a840c22c400030020000001323443430502809e240e7b273028cb9cfa7abafa8f94f3785a5f7f5f9ae4c797ba2f0a9ee60a11d611b88f3e380b77fa10ca33e5b894251a2eb17a3c88259c1adae6e7be465a458356b07cf87ec2535617daf6b7610201ff417363c0430d1f8a9dc8314f167feefa4bb8151f98804770a3b5012f4735bbefe1909f351f981a7aca3aa99a0c471daca85813d10a2702048d4dd2bb7d3b67e9daa4b65c3c651237bbdb19746fe966fde74ea7dc13766e9d6deeaa61aac924e3518324cbccabc37b230a35c1e98b912a63f89e2ce401f842ec44f958bb25e1a9c4ea394f81102312a6d7efeba2c288066c269e9dca8c58764a3b5535cc259d404fbbe5422a3a885f0102d360141f9b7030a79d2f1f7950d9ccf08015d6cccc02876ec8f18c26a814480566cfa5d90646e43d2f1f54f8243d2f9aee120034b0cb68c84d126750f84e801c2fb79562c031cd6009429a8f731a27c1b1b9d6f9f8b66d330205a252c488cca63e20e3885d84f7eb5c765e332358a0e4b237e93aee2505fe8a5c6c702c604c1f66ac02eab6f614d1da101d71cb98a25ac075e27410ae7959b0b6ec15bf59793188b1ea47eaa8747f8a9774083a04c6c6d0ed25d75e4039ffb110fab2f1f0ea80398104958d9ff57bbee2a01a830245a47f1bdc877a3f8f6bc9fa799f9c461688ee06ff133f33154976181e4175358147691997bec5c9630aba5954866a19e20f1124bac80f681a7ca7bd6d5e77a4c2ecd97e3eb7e6e3f72b0c9089c42390a4a9eb0c78c9eb23c2b42ecd2901d610c0acc0fa0b3f3c4cc02952760fb27a972d28609820348bd6ad7c797ebeed80237a255894e5af12e8d7529b8b4de731fa2ada1d89f9588aa68e5e22075e4ef7c1d3e113d31ecfcabab4a7f68198780f51b3801665125f5b14badce6336f84dd798ef4c14de5e1598ab35f8b09d03b519c5b7a2ab92baa0912053623ea139a714be31341956ecbf25535e83272ba138d5722e205eb28e9a5ae1c83e1275a31d35038c9b4c3b59cdf5480641a10bf11991f9059064cf7817c7ebd68d541d53e1e1fd60be2731910be8644dc47228a16947e330e7e6e9e0993d0e64436421fcb6d1773f614e8c7dd61693e32e818eea52e81bb1c38aadfc0605b5a2e29db75098bbce0f616ff1f0eff01c6762e894facefd7d58860bfd10bdad0eda62b80fd9260091489403c9f076c65d95c896efec9257afc9cc280a3f09a247c33fb99c46f70e5343c160b5f9ed4c41094bb5f0700351294b20a6331e61c23586bb6c6d810f8fc58255c5cc06e6ec2f260c5f418c3e63c9ea94a838e7316e23a5640ec898cbc2718bbe8b9b29b01afbb8af625763b0a3a8f5b0e783e8383507ec38b8c94d7fff2c50a7bad38d3011de1b5ee0454e164ae1184d257325e57b424082935ae0ef05845329f749c5e97d62c69aaa854c96affa5810d8f3f8cc640400a1bb2a7315e72233f490753dc523495ab60e7a26114fb087c63b45d69acaee1b08ba77c8d73199f037509c966a87c975c5f628c5e6acda9c5e488df01f44428108f738c3063f2910434537d3061d139af069d6770cf98b860626a53ea3a267f35a6aada4ba60b3d4e488b4c569b9ec77c03d8ac1afd38e29b731e780408eeb2e9d7771053e71e5534a06d944f261e291c64a7818b69c35fab0a8fff76a6a43a542adbf1780ab4df2e75cb67fe2b4fa28f2ac19aa259b42f93ccc665f663bf244d356ece7b0afc64921285188fe156459b65cc70c9eb565aa47d674864a6214ca41f0903efda5ce8ff2ac08d7b03c245b98d57d80913552433767388c0b090a0a64853919c06680df1cf0ad8a97956536549bed835791015801f7a6bd42a20eabfd73e721332faa617a5c732ff3b6231f3462351483c1e04e51a783d8ed7399686cba38fb4a91d21f093ae439f75ef99caa58afbc8061791376e2005b8418b6d5eaaca8ecbe2b5f5bd0fb1d1fed9c1a57e63cc2c72a03c67174d43a9860d18438f1a600c30705bf93882097fe66ced31b0d01c6133dfb52d6b4203dfa7c86d11acd54c2b80079ce99ba637de86f528cf691b5487a3e8538be9b1e0d569ffb601928a6609a16e55fe7fa918553e483cdcd6bdcb8756d53ecb35ffcc03620cab5fdfe8dd44446fd387329bb355967edfd058e0147687b755a130c461745be0d32b2a0c7a114a040947a621e18767b9bd5c6981b4a15332ed5a572594201dd962f21df160da67c2005ba51296c003430214e51cc2091a7672d976c9ffcbdfa67302cd2ea098887338c4628eaf4bd35a8633fab1d930dffc3a9957b5432f91213f778f3b8b98c7c7a59cb71e10bad2717ef5a05a18820012c7f35338cbf16e3b86bc89be8df7b93460e0b9e123189607f91214ef670aa6f9cdae21cf44d313dc9eb369fa111d7dd6b1777e7ae8dbcf36400a151b66b415ba5d12972a560e35c93c664a24eecf63bbb5f4fb7d73000c5cd3c344854c2441a8724a7777be5e1cb62d7e1cd495b8f63fff6e4882252827c697c937024d8c20a4c5100f6ea2e0933258e112349621cfae133ecdbdf5cbd406493cacb4d28ac1a6805f949f7694c88608b4e10de64fe69c3c99a323c26a4afac079df3e15066d950dbbc0ab961bb35048dbe1c7474e3b3fdf286c815202f5a34526215cf1cca73d572f5c3a810ed0409796f0d68295b893da01ae464f7757adf22a89d641eb5a18d0cad4ceec072f64b6b07d60d99e4ecfe61edf6b942fda110f7434f5e8a24081f1ad24c4bb43019e75a73ec70fb983c2ee787ae0e847316728d4d0fb1fade96a6778daa3311fea7ec84a4d265841ff1cf393742a578b0c6a8175edfb833a5136da1d32070071eda7302611b6e1e318b5b5ac5a6fa5233fc155e71bbdaefd73007a6e6ae5546c489db6f86488c8b33f7220ef218d68878c0339e4b6c092a904221938a0212c10bf821b559fb5e7bd7867e2d2cd19cef70e44ff3c6c072b16dc20100fab1019c48bacd007e0b81f5757acec2c1882759a5459bdc1f7a2e0a58974229d67ea4cd5b891deb660b43e192647e9ea3b700a5af5f1a218c4fe6c36214c8a947249480219c98dfcb5361200f4dfa8684a09e911195cd7cdf0eb190ca228ff4395e060185d707ef066909be04ad8e09cceed1f5c067338902f187d46eb7f3ec48f2fc81317912f62846e0ed3c6e13a6e696dad8b11a23c84e8057b9c669f3ea607f493a3f2b8f99649bc1ddbbb3faca517fcf293d66061ea88d8430d62ebf4716d6e5c524f7da675abf9f659fc67cbb52125e1fc41a8057e9ae460de41c895c7ab2e5f34e608c89cc2c6ef1fe23eba42a5ef9ff0bf51340d89fcc7e5174d7ac6629e9ba98727b9d090525ad8ea5dbe04c7ea255e21ec7121bcf5f92d678345b40fd1fcbf8992a14a0325ff2d7ead00b660dbd9921204d6c353e108ec8f3d6187cc8e4a07a0a7e784284777f4a34e363d0c77ad694e6064b4368503630d130aa917d56db09408f54cfa8b442898a04490a979a8d9e849bc444a4af289e6f7d3f91b958fca8b22a5f5dadd4f537973a08e101e9925135cd03561cee159f0c40cb0880ef0aea12678e62df434751e4838630d5a4735af0624417edd7ed0e2e4ba81371e77393252e9952c7c06830ee722f9bea2b87603723000dea28d0e02bd4d9d30611621e43971fd274f8ddef6f39916a9adcf277d9a3e725dc6f2280c6a74130c5fc4804616e5d78ea55abf0294fe76570cbadb890d4327dd72624ce3e21559dba363e2b72c6ba414ac3c66dba807152216b41bf4e8a07a19ab57dd6e0b62f5e9b9d9381a33e14ea797c10e04939f219b7341b2937c9732759e00ea220bacebb588fb49c2214d0c9b6e0b52ba300cc05364d131911f48d0ff35613d8384bb57ea8c98db50a4dcb1f43a1a6364725ef284bbc2aab752564c3a3ca9cd47c91ad8de805cfc3dbae548766f94a9adf8e9cb52256c6a2ce0492bbc79ecf229735668843b58ba5d28f1719b65f55f7a48eb48501fe959af661ee79b842a2c62849bc6c5c6dd0eceb0d5c9b7d9bf8e311d1614e489ce7d30745d6e06dcc4d6f64f7e0580b3ecdbf5f7bf0f28a61b5f08441917ff20b0e9c16a14a20b007ff2d7783a0eb8ffe54a1ceaac6c94dbc50d742db975a2c7dc51eef145dc4950b3f7504cbbd0f19f8fdbca4e0d818fcdd21d3e74a60dd643b86bd96a694a73b2d713062941fc4d1496934f0f83ee1ec1ef840e780b300b96e250466ac817ed2d77ab8aa6aa9c7a4f995dd4d44014a25c719db18db3439e052a5d03d70eecd11a47effafa138df44263eef0cbfde85f582dfdd6f70f152bac1286f7f55f8cccf61cf72cb123fa47af751f9a32d2c0db429e68dbe4342f40f46b0ca8c342228e44d213c3753bf7ca1c8031604c7d528456b3b06dd14f54ea31e5c0a26d7814db647ad12a0f3c4cba34e563cffd7fb3d882a7ea906cdf754e745a3a7959600ff5afa9b734f27d83842eca678ad1ec622ccdea8823c3f3176b8efb7115a05e93f0ad50fb7bbdc2e14895624dd18aaa35a7982ba641340a46115a234cfc353c2f3ab336c6dbb235179d2795823391c08c81616f4c1562273cdcc3953e44d68a3ac44324b9713975a9d9666018db023b767327221a197b372351a24effd980b2f79843c50ae1aa0a8973b25d54452f0b5e32d2c4d255be2e0826ed19e6935fd1a5f86b5873543097bf1a29f4d57cc30b8d8fc7dbf267a0ea907015b2de5e74da2d229729db0a126756aa208e4aea62a10c6002f7cb3d7ea953f9be3e910181139440cf6efa64bc77d83ef51da0956b0fa8d6a78ca2d1a881ae2ef19a1ddfa1daa0e0df668541cd1a610e1abaeefb716a6c41a5e91d1ef766b87db8d5c984873f21a4a2e3ffa1e70dc202d20c6e057413f53e0e3b165a6e8feaaa5d5959e90e19533512710b8ad009060237fdfe9ac1d18833c6433fcd360c4defd6216e0488da0d6ab156fd23c411eaba2a67c67daa8e61a82dfefc82eb6666112106d5ffc12ac5947ce14afea363a3dd18587b0fd5ad4f0864d038248e836ff29ec94eb42d1145aba7642f76effff1be747288c3bf95325e68c0d8db37e235012f0594144fed435d481c6e6071c585c515c2b7c52eafc6617b1c311d0e7e712907e0a6123b5add121b6bef703510ffc581af6cf215b6cf17e6312bed4ea02c502d4098e382062fb1e76ab251fea322a831835bca9360252b327a2d74b92ca0ce5b9e361e7b5b94f188a6c8c0db6343b938abe5ebc2393a56cde099717257df680af80bda3a3c137026753674766a877961d68df95dac7ff740e1b0e8c04d974be7a3b6bc26ba89c2e82ef09e16c943e505eaabc79f41787dae76b89e39fe537b18a2544108d30269339c5634cc1552b23bbfb9b305d2e840621c48924aff6cd9596a3f9967b038f4adbb4f56098986f5ee3c29798c1221c3d785ac70188b3469da04a8433aa4c7cde3a917406fd3fae23ada1a48f54656f79b39272e9739aedfb458deded0df9262375d4d4bd2ca67de5d0605cd3ba88ffd93dbf61acd05b80c2630fbb080770cb2f129dd642e9a0dcfe8a38d547b879454120296ca3d12c61ec35581988846555f2b083092cc13a85ced8bda97f6bcb1b7616011da6778619ae78ee017fb0c92b3a701a33043667a8e24d78e152325d1cc50141819436286990b197292fce22a26fa396c0828c486c154ed1cda8e9ae76b525161d05e0c8a00f92bb87d822e38d2b8e638966aa6288bf478cc802e84d1c0279c3284c6e2a33d93a8b5dfe980d1b17dda7bc8182d1afe2524c7736a28fedac880d3e2a8672d5e98818fdfe2dd2bbc8bcf994050363f6f2c146fb6286c408e3c7090c3d513eb82d687b8f244342ea1b1c72eb41562125eb46f73df31d05e88c8229b38743c801665012cca49255865c14aa39a95a4146e48aceac6453064e6dfd03f04cb075dd6822194c68336bea0400c1d7178157d5851ec45b2f17470978d022ff3f7a05e2e476bf494a79928509f286a1cae8876a8e454b92cae3564232877597626300cd44083a4e39b8ee40a3f388c2123f3e0db90f81f4dc16cd1d6463229b0e1cab1e10dea415a74e9d85e4c27edc97c6978eea14e94d413cf18646d82d19f878fa2578e4a83f562315e5295ed549d5cd21b4103a24b291f6d8943bff8752025c53baaf59bef097a794e50d07b8314993f8d3c8a394ff6ff45bcfdaa3855390ec23fa29a4351621a57b2936e411d0bd25ca9a137e1fcc8dbcd782f015bfa12daed274287ac03614ff1d7f2625e21c2a13b2229b2b17ef07a7ac77373999a8c66702ab970e927d7827f23569319de6813b7ce4f281ce6230b78758d8f40b1798c16b81b08b0cab9bc428b9db4e0f7ce05b4448cfda0f86ea49fcbbc64683e617115bd2a77b138e597a3a3c2112da629dea33e01577c731d4565292e9531f27afa3cd5f34ee87bde77a8d395b251f828688ba4bfee7a278ca47a3b1fa1bb0801c4edcea6cfddf3ebdb54f7f86ee04c769c3ee5a1af821220775aa1d710567eb8f5eb9bc859428be2adf4d3b15e33878db4af91a3352f1ab3deb99afcec144bd581a7421accb999e2e07a7db1d58075683b4e9c6a1df076d4a37ab5504be94a0aeb9befbc5c28506cabf43088ddcf6fe345df9b40666ad3f9d371b701e4a067160501ade5fb513119c29d91cea6233cda84a00e64419d8422f00e9ada659d2a3ca0012028a0b1da824eaf56cb4208d769a93fc346136ff6dc3515dc39f1a96be2fb81fc51c139d49f45455b0387e77c4df82c9aa60526bcab18f23209b163015d577364ce19dccc1adda7692c67f62296af3815432995fa87eae8297acba443292cec3b6693e580b5b757e3f9b905d4394183dcee753d5f33ea83128fdac645a9b5550a2412e163d88d04b326ebe7ac61d0e01a94d1bf7b5a1d0cd418cf7554031c8dbc874eca983d83735c5472c99ac4b4ce4350e6d31023666504cc97b908cf8d852ebc339b16dcc5faffdd2d1b021c4733e6a9c80f75d7f2b09990337101d522d2322da98b4686d59887d60b052ca1e01bd76ee881730fa8b012a1c239b74d71ebb8bec23225ebe3fd3adfe6f09b6f7366653003ea06fe0ab671622d4713990efc481912382a0f8c080dfa73b28b82b9b2545b8fce8ac4185c51321ebd0401a9588e6649d0b190e1601480fd6471c4b4c2e17850f72b9e81de177c2fb9058ae4c0d13f59c22c5666b485c703810e07a2b90e05b3224ee286f59bfe59fc8016a1434dda2aae7f11b364083c127c73d71f85b52fdcbf76f59796eadb974a67e81219f101c0cd734009baa7a8bbbeb39897c37648eca284f063890afa16bb556d97afe0b9f5e2b995fd2767a936a27220192684821976434a4bffc4d1cb87fbe57239a0e82579c565824f06e753233a990b2e216258af209262059a978196f54a3bcaf375b13f0455af40e410a096b020f032046cd22be7ca88337d2845e2da2389dcba5f093c8e45b5e5f54c2aa08c4766080416576d6516dc19ed8cbf4694b1905414f4a249e754530d13e96239b1716169118139b4ac9372372b17321442b7f3e007ebe031742c0d71603171e1f19f92368b1490a41addea0e659fac700a8d9d06bc8b384d576cbf1e6439e179e23ba2b45646b42181647bc455f878a66ba255a26cbc09b68680928c1ac6b6ed50e55c3a47a240efc690aa5a18b30cd5b265500a5b405095a75d626cbc742813f2d2bd9efc5f7d44c13bc4168772333d92acac92ba6e6a14c994838d5b4c01840751de368b344037c7c654a9a2b5c603028b5004f9376695ae9df52355432759bf17b7e90c478578ab33745d587dbfa7d960e234235dacc518511be34ec5a087afbde203b8da3a9d5dfcc03e3c8bc18bf36e97d182e0dd53aa1e72ae908f6ccdc3ce8f760e34a98dfb585ebffb211cf7c8ccdb3566f120caac6007e1d753cf3e0e3ae1bf11c5393997e62e9a84598363ed991a89a28c3b0709167c4b3e8395112b174d8e74cb3c7a5b7b5976791ffbb064ae1f4f68a27a30d5144f03af3fa5b41e14b080fe2090448d1c287f4d3d12f00224741df08135cdfa1e54409fb2f6bc7073dede047201bc66ac74368298a350adb1d922dfa76a0a908325a4c48c2942e838a875b55ba589cdf56a712fd2ffcf90e2ad92689dcd82bab0644db5c8e32b2350957732a37debd1431686a0789f5d3c29661c10bfc40a6ec2272787eb389b1818669b678f0cb4afa1ac610ffcb8010cc0f2b64b5f5de43aeaef0205d450e02b4bdd94cc47c6477f981d8556cfe77e12b8987572ff8fa4d698d297300231ae02a34cdd374c8d001d93db26791cedc04780540527f81b439e4491a983c6071692e7a915efa82d3175d7cb904ae4c80b3701a56ef469aaf144c33441d6b00dd61325513bb468e47d3fdf1f79718420f2850c04c0a7a8485d955e6121e57da7b5b8c9b705535309c00ce9fd0aa8a4239183e1f473b765a2b51646124863cc5a393e41b39bd6e261f66ed238c3a8adc5bbcf567fd42abe68396008ca25caf4281e7eb528910bc1292e8718722177566290cb728b5297f219486e00ae25c223d070379b1cbc31735a72a175f1040416a2e5a69537d86d1364b30b42dbe45aa2ada5804c6ff891b9a406d2ef5a622deeaa719f0e2ff1590953a4c9b246372de2d82f007e458d9c4dd1454b7f0a7bbe87bd08414f73fc20a3fa3afe71dada26bf54512093d3fa45c8a660020a8be8ae57236756c20e2bd9638ae22017dc6cc236d423e40758ccd85f87105e6e68f17fc8ee137005ca53eec5e62d1888a5d1e03ecf52c72f6128a1393ea257e816026d9eab7b8822979e6e4d3ca7d603659a90617610a974ed219bb8c071524b7187999d52ba129afb43bcf0afb5d7704001c0888d510981d8a1ac1420ae88159486c549573f956965442cb53f56612cf721f2e2e6969295400287b686832b81be48df362b3d691f0083a0255b4674b7cad2ab2e34d312d6d3322fb66e45f7275630cf85b6230e1475026331aa24118ef0877a4b5c48ca051ca6aa0df3c21f673e513d273a22cf139764db390a67969062d9ffbdea4c898010e1d84a18fbe20375a28fb086b1f90f69377741ecfb50d4cdcd2f292ba596fe5c5c113ba0e46dd4d854efa804c07e42b002e730b8486ebea45da9e4f5f4fc527afcf05cfa928ed21cf121d63076c921bd191776ec7b881037aed4a954b37beab1c32360ad18bbe2e1c11a6b000bb9590b20b6057738cfcd5eb0588204a3f4fc1d831cb550d4064b2ddfb150ee8ce95459fa3361050407008e5b3176ac43380b3754acdd8da8d8c4f474d864647367242ac13ce57724ab33bd822dffdc7607008152fddc28d405cef33ca9986df47421e3269d3a8f44a96c594df2182393c2c21c2a7a13ec388977a0e8195d39070f07afd812079f957865e361c9abb7fcee4680db27ebc2da76f7bf785a5d4b6ee17718db3e8ed6a3001edc00ab36bd96e27f1f34ce3bc21e6fa83cf4f543f2ca9519a918477a47c0cead2e6c6feb0ceeb412ba1bb32328cafe3a49becb488401c5fa6e7edc7873276948737904403f2f602dbaa8c8b847cb29cbf92e8ca105b83de761d4b5cda24cc79b89b050f7d6758cebbdb26d2050abee65872c1c44c34b81c28a7e246db610936670df3deebe3b3eb522c78f940b6eeb16d3f6bc968cc2bb0451634e901c2943ebc3163c67a81002b3d838d310e5ba881ed830afcefccf909f77825736d7a124614a7ddc0353990b88f1583aa58f2cbde201aca960e1ca1c9b8ddde932cc5bc5d051c38e5861b876ea7338343e02650e1b604b8ceee67420db0efb3ebd2daa5d916880160e577ef46df0957c66708e92de6f92bf720dbf9d0f24dee86c784cf52d829827d2fe5788e17335c9634dc5d3296bb810747b10430a6a5841d868d627662902af3cba5b85090bd0308e5708e82de033ce1b06819bda6228526ed24827cc8fb61c5b1026588ce4923ccb739906ab80cafe527c4935afe14a1398c54938c350478ea7bf41e10fb65e7549b5c2d7d58cf616dd3c7794ae103457ad3921b3edae534faf54c5fd9e6d68ddf0f3e4b41b221a8af34d08924fe3833ce88974795a2fd801d369b9db7b7ad53a2f8370ed11ce787acee7c43025faadff46c721d22836fc53a6e1d3b70cd20a30bf2a07f696ca1d798bab37bae6dd94b137d5332bf06a8e186447ba56e03987ab91b7f1750dbd911e099a4a69b42282f6d01cdbee7bd97ace855f37cb7c04eb2328421369ba2bae7936b6b72bcf5014d35ad97705f008e3bde60626f207197bf7573501c2124a451d225c8c6b077b81c5eb82076c2ae7967ad752c3d177d42d388b3d31607d86e82473ad1d78cee801a50873080652cb6bde701d7652b0a19e69809181ee6d05a41522805a843dfd3812318b1e9d5bae0369ecbec7515882f2e42043cd333d3f46aef3e4c85b4ae63ba797c891388c7bb2420b1c0200801c8a451cb06d97a3f5da7bd1fb7642da1e52805757dd168f2f588e36e20abde34e1e9fcb466895405933a73620626528d7c331da979dc7afe18af33eff5843c7afbfd0442ec3d0e5da81384de5df609f4bdf659c7f66e29646d5f148376a17d3925b55fc00f632f3184f966786848c01f38cb6e1c02fb3a9825c6c6fe171cfa031ecf3e656072da1b4680fd626fa937870c8d35138b56e6532e279f20c7abc4807f33d34a26443ccc8d9e37cb8bbd79fd599229dc5b2e450ddd45229fb408e99c2ec7aa598e53733b7bb42d281d40dfab01d20961db416cee17b9d0fa4a97bc8ec17d2e5800bcc7752c8ae8a6ef3539188a007bb6515f24946e1d2f1016489194f534e0355a0cc6f490882fdcb896c2cdaa2b719220c814406527ae1bb4af44bb98745cd0b5982ff28bb36bb5a103f873002990fa2540e922249670dc3f4a89f46dd397c62f20e2509887292095dd9324908ddc50245f3e777994d501c603f47abfda16be925a2fe4c9db91100560722bb5a9b9303befb010b72c0cc6189d7160f8abd578d508011d6c0ae87a3d19d7f13541f3e50037159bf5c8286604edf6f442ea096ec0168eb253eaf5410b39c30a2e04bb8dd4144a10762046821569055fb539f4208d0feef2192659f1734abd03277892ae29455a87cc921a836e15188e1fb8713dd24e12568449929ccb4b8608d09b3c7f6e8b1c73e1d05e59efe19c082c84d760235fd4131084cbe1f04ee4053769a0f972dfe3718e4d8464d97277a4c441b21a6a0cc502980d54cde0c204071417d4b16ebba638fa048662e4e08bd6d9c40bec96f184df22388571c28b51124839b63d9f0c949ff6c3fed24c4edb5555ccbed5af1c8aecc1952b30261df1560988de8b62ef2e217de28ea80a712b597a66b022aa12688c58f6d4769455b10ae6df45e82e9edbd034c4ddff5001df88df4a9d210b30c6ff9fc5f38dd5dd4c9c98281f069829825806344f2ac8b22325eb313405491a3d39009defd89e9c6c974f46d4f9c687fcc0c10470005e972d266604aba4c13b8dacd46bfce08c5662f5b0324e502e700addaa36fb237f4765832211ab8ff3adc3a4b4d00bcb0fad674870c4453c643a88e9969fae768124061ac95c2f81f647a7e50f7b249ff621d240153bf9bd40dceb873c62df9a35d32af42e254414a9b3a332f3408e8c811f620805b8c8265df26f000558ff1c8c52b51f1dd1b7ec194a3fbb8d4a3476802bff922677957446926381e7151da44185e4d374a3d7c910515a07fb573a3a8f9a42efce8a29ed22bf6d735bd5b7452b075edd79ab4524514944999ea9d6a027a3cee93c050e51eaa2a06c20c4adc83da7f11e416478aeeeb1bc4e22ea795b81ce195a982dcf4329a5a0026857ecbcbe3b65b008b2d3a341681b61d145729bd23c22f330f091a46a0b380c72468de105c13d7e6daea26090340c8c78f838ca4d154a2d02dc1471974f36e3d18d98a1333d059ddc60d6d86ac8b300f7c4e16bccab86c6560bf1c04142e1949b80c7243dc60cd68fbadb110548fc81ac943abc4befb33314e6f66f52cce6709b86b68157c66d9f4a28d4ae3e4b08bedf9e3625d3ca683386b71f263d5fe0a26b07d518795518028e84c107cff0156780de7245af19ee30bcca1e34cd34c5d5fde9b9a2c443e59b24bf9b543c3e9390f1b05a47288dd1a8beadab6c53fcc95de41736f3910fdba79080dc76c779de824738b40e88c0a8515f6e3493b544d4526a2451fe47b3f6f8543848185696918f6a372f97d0c4cea59360d41a84ad7c92680793e35bec91ae630d57d7a62128bdc79c82844535cc6ad370f3dba3332d3c5ec388204399faa4fdde3c41efdc4f30f09502206a7d4736959841bd68dc71fd4baf97e6b3b2d0602c0f78c58bb4f69f7273eff8fa59868c174d84f71204f186e4530aad987ebc5327b60bffe9ec1de5565f505d230d6caddc213962100fd2060616a712dac98215bd3aac9c2c449c49af7e44454ad24081b3c5879375aed6da3635ff5ac6def1088b75144732ed7a3037f3176e0f466eedf032e80dfcebe5a8e4f46213f0055b126141f1cd4c1009b9cfd9016a7171d0e74fdbdc8747463bfa4031d5dae58ec79ca46c81199dfe66b40d7a644d6d539d51e00d10d1e2a4b971a354321e09a27dcae6d3b2842448bb1a1711dc0c835b4fd6e613d370e13bc424340d9e24179a08b0cf68a682f9fa3b581bb7a15dc245a3b34291231752182fbdeeaf0ad701b5964612437b483291b8e5031ae8a7139ee1e9fd95ea02b5016b185c5930cc14fb59a6557f3d9656b87841a9c73d2631e41bbd626e98b474d7c05bf6cb2bbb8d947bb3c7d0a52e2433f24d5cf8cb4c1c25c291031630fb7d24cf9f67ea31619d7bb6ece7128151c8ea8dfe20532cde6bc7b94609dc15a6c6b14f438cbccf54048bd6bfd43adc4711066f2b12eefe784e67e74e04f412891660db4e4f360fbe2c49c037f166e74fc8a6b591277c7ecd498fdc3ce5628ba49899c440d74bb215abd00f6c990b05ee4f66895e350329876195cd02abd3072ecca6abc21ff45e4d1d7de028774edc2d51a1058185a88810f5f510f03b67a62268d03b0129d2231896ecd5f7be7f2c141cea791b0669035ff18098d1a824323f2af55336fd88dfae17afaad8fc62cd392b2a35d13f74c0f0c3bd413ede5f563a350c8d2ebac46d9ce49e8639c4fcc70ffc90734b9bc251489959ed79b6be7bb4318700612e34d4d88c7148ca13a1ae03db2f90736be5c922a05c622c27d67f9b6f55c1f91cc56932a36b740a8781ed3466c6179db00e1d5890edba24898d06a3c8d5653b395b924a8dad5b95195938cd2d84e5e27fa6674d44c71414b53931f12797c4090d90bb50b11fc6370d985988e0c476a135f9420c5d912f9137e4eeb3893794e3482684ceb560d3e372caa872231ef913d1291b8f6416a956a2bd10ea9c424c5b89e471183f5f8a9622db77643de0dd76599497e83fa8995841e455775d8e82bade94975f89d91040b206d420a0c9cec19359bb6f8b42b9fc39989278ae3d7e776e0deb6ee6c02919909a4ed89da247308cc15884ccfadb0698b1cde69a521025106363c97bd2523f9f05739982eb0957d5e75e8aca63897a54637666ed9631ec5854cbe97655f2b033c28dc6c76a2cd1ed651ade8118b271ecaf34896a1ef3222c344a06c0425c8d52dd20edb8344be1620ddea44beb80a39e66a6203fbd1d6bca57f503fd98dff73322a2078832fe09163803cd1410b1485f60ea3bae971f7f7001b0614aa7f90f838f619a382abaf7c0822da6857e2efb4ee4459ee2b71998f88821e1739a5e2960c8cfeead96ca798531089181c8061a47179090b23d1bccd40dfa7abda93d09281c9306a297e292ab0795a5ab069d1bd246769c1590c032c768da33028e009fe37895f443445e076b2c4e83472a3eda0a431245ad1115c397aa9e826651531a1066fc64e0fe7e80d2494913a7b7e1af0745ebae39c77e30e217b3481cb4e0f80d88f44b1b64870a1bbb920484b56375fd2d58a42016a5c3f26d6bac4939456c0945224b9663115f8a9bda32d189b5d0004325c85647155e9f8369686300d6fe49388e9d901e94608959232c6607842b82aaba4183ac9b1fad93876d2219c2a293f9658835eb7134e8483cdea2b6f64ac7e047439a10c2919e32ee37a00dd8152c4a9bb38d8a93b3afa6802b1debd8c1db9e8e646c1e6c225e53f99d9b3d904aca0ade3376fd9fb4ed7e8b716356ddb8f0906e3d7832033a41b07a895c2f49e18e5086f8c3caff827281a920850f2d130d967df6b11ca699b83f3b4a794718d1b4812b60f670a36ad084c675a19715205c6d9e4534e08a1bb529946afe6332db92c1c2da84cb46f0b148f27c24ad7355df3004eb080ab245484bd63288b4f45194954b390d21364065818988638b0387e40711775c62052b8158d55cc04e40f783bd901159356dce33c03776baeef32d84d44e0191a6d0de1f27694bb70498694bf83fab9cafafd570342026c09574fda25d4e14a38d3de76ed27f794677c44d89378b2063e56a5f94c49d080e0a880e50a5df8b56753d9740194c8d86bd98c6731300ad0d441d08407aea4d39d541d8a6c2acc2442427a8b481f1eb7d8f62f3022b1cc5b5ca82f385161d32cd192984dcd2ddb460003c0272c1c3a1a3ad2d7a1bf0d279f6198d21a8ce889d0778867b56e0749369abf441344e1d81f59be1a88ff6610a757deed061e524fb6720b90eac453de73abb525c9ecb1cadd4f1dacfcb097e6654a56c1624b48e51b5bbd5221e1080795ab84b6e248d7f1e3013b2793f7138d479bd49e9916d388354d1838dd7e2aba8e6576483d1f6df894bb62db5afe3525a9b6722b01dd1a2963995245046b1df8f4ee0297d051a4ee9361d7a4f139154a92aef26cc0f149e38bc366c64e743e733f3b5028fecdd72299a92e74bfc341f17a2e955365657b4ab4d658441dd55f84fda0ad73f4a913c37e5461014038ebabe42230f5a4b576f6579458db46ba4e90d422a8966aec45b15a86bed4a1286a1eb4f0aa22dd354d097ddf8e477188ddff4537efa28b842872b279b987aa7658f1b007d570ab1359e2503dda199158148c50340764e020385e55448b35ae0f662b4bc86acd10c1fdaf13ee952d5594080c1cd73d3e94b9eb848f6772ae0fb8446431865832727ff775c6dce9014bf79ac8074fcea82768bc5be04473e828a91c31ecaa9b2e81278f7a09247a80117b63e4004689b4d526e7be17f5d244b7923a4f8f3f713a850f7d6d3fb7904d5996c0560713c5ce58a65f76410481e5008a3b4013149864ba2967bae630b88610c5c6f4c891e5089dd7f73b2a58e7316706c5696938eba65871b07f1285248076d5d9c3cb512fb7fe49c785b9cf5118a7077580cfcc671468488c03cb68900f784a746910072022d67617b1dc3b8964851beb6dc2530c80747b7ba4f6a80ad5977abe350b193c8f7177cc0a40b0198b27b8d86a996eeab8edb8040a3b58252ff156bc826800fc6ab0224f1c81440895efed5148944c07c945aca865e7f3a80340883878758830ae7d72b59327defe294278616c4b919b88c5e7eeebd8bd6d0509affd48b83985fbe0265be456557197daca1e1d2a3fe0a033afa1d018c850b522d8067123ae9c5d083b5a0ac469ef687fc249544e24d748ab508daff3f074a30827bb694820af853f0816d76473f730733bf088070782f99d46dd938ca897290ad7e35078277208d2a44fdc686451293bc8d5d606784d954780eb44a0d02a86cf979583db73dc08ac3117587ec40c5d9c6ff51a092137070e826b480a7a1a3363857812496dc94387038a22e90e98f70e0c3878c0b007023cda36e2cf03bb9707aa4ed71b08c66006ebb1e40971903080ff90943ea8bdddc1c7001d5c7dd72fc3dc922c19b94943c80c8344ca00aefca14a6d327b0cb16ab903867bbf3ae67eb952304013c72f12c57d035dc5fd653206b9e40540b5c4b718345310d40c696ca1b023b3cdcdec6149257cee1e116865e0e7aef98492e8a6e82b6b22c28ed0a98541e18512a5a0a8500c454a4d7d760841e66fcc54145180c3aafa08f2e912b809c2b80d2d263d004419f8f1fad5e038bfb05ea1323f2146abc037e8adfe133bb1d06261302ee68599317bc83d30fd0b7612208f5c798ca94f00b0e0136951c1505a34f2aae5be9fb687de715575206c03366ccad3c67cda76fd64c4ef4b554897b10c98906dfb54c05d8d706d4dfd50a6bb11a88787510ead40d2d46eb7aa131425c02719366f0b3e0ea72ea0117892bb38e891aa7cef30902d09bfdbdcb8315dc7cac6f53319dc2c709f86f27846a12860d2f7ef20e9f747209066819ce2616848334556f60a59b98aa0212073ae8cef17087e5a4574548fea56900ac470f6f6584462b7c6288167f55e75378702d7323dc0098a1acebc0289fe3b636bf40a5589749445e2111e9231d850eda0bb3fedad31baefd4a5be0a52caefd4b926edfad88e7756d91c9d17fcdc3febd09df8938aa85c7aa73f297b9a8776ca5c6bec93f991626aee9ebe227db78c8972254b807094bb7b80423843dbaf7edc81301cc14400943da6d148da4148260d4a941b1196632e2b0d738837a9dbe8af36e13f8434464b3b625a926183339eb0fb10b8fc3187d03ec48cb48dc63112984fa9d6a8df2d7bd7c2a4914abb2aa9625f311f8e92a5427d0eb4392875e420bdf4f9f6f355a2b53a8acdec346d67948e906dc9c759bee3a6056806629b1df60d4c1b95be30489b66d2a201fa1696a5c4169c71c63193f26da6278340d928d380d739ae9f37509e3e5c087c411b64f0327fe4be62ce0f9d6323086f31e19513d6374494f8fd136b015ded1a69a59264b8b1845c723fbf0783122b40127ac3e148ecadc06de4aa6d391cced588cb60a3db1b872372f99c6da06d98a94d05676ffaacad59814264b96297f876695b085316da1137fa40bdaf37acd846d7945ec6e667ad67cf5921269fb89d1493aa9ec9f1c66584a908a03b7000bab0028026817119842b7dcd70d8ed32f02106001b7e1880b6c1c1007c51fabbddb270dd3a79fb97657597ae1e6a500bdc5ec4c8ad39589f27d343915bc238ca11c8f69e369c8e9f92d0941cd64a977c6ff38f307deacb4991cf17947c8b55193698c1f1a199dc22e186bb91d2d25c9459a03ea621bd1d31c6950161b023c32cd3bd11f8235e1463f2702fc0e00bcdbdb361c6845dfb8f6e89c991226e41d12aeecd86a60fb971d9fc57b4c5a5415257cfb677e0d47ace3f12458aa44f3d1871c936489658625044dc375d86f98c0f08dbcb7d275f52c75c16a00ef19e4560c339d4e64fb74bf6ff8e92a60cb52c7421eec975368f1a3a3abfd40b00333133e5048b89c403cd780f265f816731ebdec1c959c484fc79bac37cc58f28d07328d351407fae051d765113edaf60d147bd9a8a1a9f43e662a17427a4ffcd3fdc942c8a324472bea4c3cfd3e6b8af7085d14b56902d9e9c0bfc8baf0b0d7877fad178fe2828e85a7ce5c7005aaf4433e8c27cff05675d5ed56c431bdcf64736b35760fdeffd176eeeedf9708ce1932ea88b3eb3df486605f5da3a37d40341a716531a75b98b8c15da97bf729024c8beae373a58bdcb2f0ff66c202ef5a85e8e1d548130c79a00d9e4e1b5b823cf181c6b55fcb94b569be477ff57c69f36f5c45dcdd121104c12c320fb863cbccc178eb2fcf9e7de88a588d819f143fc899b003f07ad06316728649024d6fb2d20982fac8eae314209301898bade65b5f64263241df98f34e40a26c8b4de1ec4a4215a03a92ce49a44708880fa0d7165fe1ca47100ee52ba009d992182c1ede62a3a22881e6620495700015bdf1d3a3f911844a7239a280241b441c52df96b89d9aa850889b4235a97dff5fb1ff38e41146979f4cce975e1d48a71f8bfd004cee8599d39195e4ebcc2df8a3ba1f0a9ed019f6a6e9c7b20bee73e70655f43164f012d13f452f7c6c819a4010d36bfb8711e241c05baeee036405881a54be8bbf019f0f65cbf05845cc6ad07d7f71168247bad56c3d2162dcf88f01ba269d4ff8dbd560966e7a2282df5742544b79d0c9155326f163ca89afec3f6e86b18f55ad48a02e2e8e54fe8c90e8c7806a7f614ee3a4e73fa3a37f7f1d7a3798b5df46cb869e85399c43c7d763dded14e130ea1672e8fc02e0f71408b0533fa7c4ea81cd417bd46124b8e7a91d0478d431bf950db6804313ab1be18395d218f7af332e243fa8ab3315b6f86afa6f101bfa4843d9749eecc1597ea7db800e639d7d90aa6456081ca45eab1509040c1fcaf195d89f33b949d40c3f265bf3ce3cf7d957a4dd208a798f63c5759ff744d766d9c69122682f8c07e45d3c2c728dc1401c2933cad3a69fc0e75e56044102e3e098b4691a995637e4344a10c4cb7a1663161da2861395b4cfcf2e36d4ede5030ec36ba703da8201bd93f067a1180eff2574f6afb306d1755db964807886a34c25e5b48fe0e5fcd744963c0b66bccf479d7e965e4fceb2553e4aa05cd6d26d3017733ad6e766508ad313ed1981e45330fa0b3b70a8f70b31ddb6deb15719f860c6f4c90653eb4eee8f8065b73bdc70e10e14e60fe462c214ac85af9f60e900ad70e10a89a2ca1b9438c5ecbfaeca0898e7e8ce5c581dda9ff9cf6bcc5de8f11b4f9f27249a874adf6cdbf5d687e77a01d0038fc7274322cf90469a91316f0dcaf0b9e19540c060bf6a96ffd6127ba4c7440f2d4e32581070360fb4ea5a3d4cb0066d2ca31b7112f18fd32111a5b0ab600fc171fc0a3bf8e048a9a865d61e67a8ce1167d182472b9ef99424f6b0ad007747a1cae5d94bd8f44758a6ebb3046272621b2f9ae894adf0ed458d09af395c58c9730f428000897fcba520bd50ae2bd6f341cd5e32ebf7a0e21818e419d96bf3de2c1261406c246678b7d43bd6d6a8235cca04ec61c98d68b21c4b6852765d2a6852c17d8963c0d49c32318a518644463bed048a491584cf46a6faa21267ae150122bda7fa070f3587f4158e5714017c1151883b7186278385a5a76c48042ecffdcb2361c454ed163adb55183b52c8ccb4cc23fe05a067d6de73d5e8863038dc72a62be3e46a00f14ffda0881cb2e93685bb80b9744a3894b242551664a5e9cd31153502f3b8439a73134c8de46f1c36c2ed5a6754c0d875f4f15c72d38da812f9a528fbd0a16a94dbe214f147e87edf9b3aa94afb840d011f47fb2444c60e675f91096fc00d7021bffffe3f66985dde6d247e288afdb2c989343a8e4f8e126be960f30dd4606a8f80d50c44a10afc91d8c25bdb06f60af4f991eac698f67aedae0b043c11ade3f02431de9f9c801b8775fde41f28b39634d8bb9572543ee45c9d3fa722f2788fb9cc64e6db5d19904e723afa51e6cd7db2f86bcd303738bd08cbccc55f0926b4365406519c8619aaeff0294b68d52d748482c72fe6c5ecc2d2de8b390536b00477701535b97326a721966ee047b2c119c319936d4f145e2a21b13b6ac84813b9693026caf8bf277f856a8aa0d23d187cd65864a5020089ad8340ae1f152420c1782269798b675ef9bc8863da0208d6cb6e8ad5d08aab56806839ae2d57828b794d2d925a001ac4b11af02e4c45ecc552a8f6e5888083fd87a0f35747f2dbbfdf8690ec2186b3ef3354ee9312908e2ac9a65a6cfaa60f37de3f9c0915c94a0e7e3cb15438454592433f049218937c3cfa1598bf633c01472a373b96ce2977c8e7e9389161b7680549e41003782ddfb856c9962f66fad75797cf340f263fc0d8226eec440f2b2f46a68c964503fa038060887273e2b5964c4c867e59ea1ecec2ad4c912a7578ec6b3cce5eebd3bb15e8b9f991e36d4551c2417c70dd85f48c4c124a60ffe10f6a70887fee289b21073f88821837ad4116262e002c609407092cd79725628897924528e90709961cd01eb81d77773d6d5c06704f88ed2eea5ee6960f667993e7498e42f4c61c51545d663f7eb36e283f5e02ab0fc6871f4cff867a10ac5994fe7814d5035805f3ae4b61f0520a125fcf55c76834a8cc3c106f668cb0b9f6e13ace8871f249e819220588461a60748d6ffde284d015c874843771710446738f370644e16691c5a275581d949b25dde575fa33dffdab7d84f2066991b1f340abf3ccb5cdff848e799b15d2ddd32ff11962e94019dce5d5354b6052ba34fc8e458f9ad8539b6636dab8859ff32988537a46c1f8494fc17224647da507716a6a28d33e2054c9313da42e06208e2ff0aedf37fd103bfe20d6a188f9a42521e094e784be0b97695f9155992029ab7c3f666a2bf66cbc1e7d67a0dfd2538dec3b254378b333a03f384e3bc1eb167e7774cb81a0356c93e664587079eb2df28716e64acb412703e0d8abc6b7fdb535efc3875243f0a5fca2dc8172c728c18956c368c15af5c9a6f549717310706cb5b86111d3125bfe524425d0df92e4649436ce8610553f3ac871c38492df453c8cd9209e3073f50081e288201811f8424a3e5af625124e82587bcdf17a2f0c8a80185e882a572a1a6371a54c822f02e7e8dd4bf31ca132ac067d050ee59f93a139c1e848ab0cfbd4a9f4bc2cd861e52f9dd01bfc5b9114a5fac22f8b320f207b230de0b83f53e07b87ef67e96b0fb129b85a26231e83d85b0d6d341bf798b1a12a1d7bda88f555062f4fa5f9865140518d5c7ce606fd4b1b7fd3c186c03815a7adc436b00df54724750d40246c558863ec5ef91eaa53175343f74e27b212744f1f7091af063c76b367d6dd52349b3155559cceffc506c51ae888a59e7383e4505eadc8c287b8a90b709e26318f23e08f28e4f8f0c1035a48f91e98b724aed6679e6372c54c226f6abfcd6e9971b0ed1f3d309bea5f311545fee3bfe09d59cc395427b02ade9cbc6a213acd6beb2bc94b3cd36dbec33b638390c8a07ba11002585afcf13b55d8de881b3fe86882c5a288f086b062605cfa3c308987c139e567bf26a492c4851ffc93bd7e9044454dc42ee92d853e23633f9de2974f7443ec4f240ac1b90ef8c0b3ce0fe7f6b01b7e5db662ecb8b413dcfd4715b08c2ada7f8db45f885e3306868fe489ff26ebea1b79cf158f8c2c2d2ce36d3d9b398e14ccadb9032083a7f68e3872d465991b57311ddb631fab97ec7a77bf564d1729bda6d347efb460d159b206d2f3c9924de228955179ea36fbf4283c3a7edb8b458bd8532bee74a5c4665b94297840dbae25ceb1e4e1420fb4b263db4cec0e11f213bb2af13a3d53ca31a8a2372d4c668f782d3177beb289cfd2e3b6ee39d5ee6861ca9fc6cd97730449a8a2abe09e9fe8227476f6d2d4cd53dde3c83cca6c264f1846b7208b76cdea7bf6f42cd416a87ef61cff1b43493b199f7c0c04e19026e3cfc889972b2e58252fab0d5ae78f35c4715982cd614ea4cbf80baca4c6f16a86607ec12ee2e509b92339db3ac69d76ccdbb9502284ad5855f0c40c60ea4b1708daa53ab2dce1350a181a234b04081d40b5bfa060dcafdc45a2e550e33cdbff3799fc0ee35c8a89ccda0ea134832a18ab427a34d93cc431f93e7337d255597d7d710e1cba6630231a081a543403e5c73a300776fcca85ddf4a55be2b5a920a9425956cf04828349847a15fa8a12b7f78795e6b921eae9fca00242af27060bdf1456f7d383abaad85e4cb0db80ae206427d6f88e0263cad27b9805a304cbc925b020a0fed33f341df0fcfb3ee59106006f74dc164a9f80df78012dc6f0c34a3a932e5d7ca9833e86652195e202cd65ced84076729588be0dbe43a55cf77eb4054aeeb09701dce436e0e682ba95545460c1903245ec1cfd321efaca98e8cc5f27cd7ca34c9f781a48f6378452a5cb17e3c4f4191ac329a4199c1d67519ea255d7f5aff5141ca3aca8d280c399fd30ff751823c6f44763646c4200c1e083b091da7a67e9c514566eb02c0772ad402c7ad0c7f49c4b697be890bb20a241264ebabd300dfb340d89d7a8a84945b4568b6c2fe5f21d61f5df95a69316436f670fecde4093484db9bd90e5e85cbf9a02d4512a92afffeb7cce1c1ea22a8f256e87c5c06c218d166c0c30d06af34aecece1ab08e43e754b3de2932b1c595b3e3549072bd8f7e4bb249490c4d033f3bf19eb130feda39b44882ab31996a77a6776ddf645b6af2409d5340b8331b060917d622564cf17a0d7444c913f2d434a03987578b62ea9dd38e7ac20d79491a3fa726077b3a70f330a9d76005982db370cb27b818a8f21cc5968f5cfc1b2714b3b2fe71730478475d55c1e7c128d191d060058e5e24ed2873261f8cdc4c03ee88de299c5027c66784470f30f44d50f021f86170dfa7207057f55b57113e1a4bf09056fcfd866b6f67d39cf6e18f3d5ef4ed1cbe890477b91bea9c7775221b130cca2df48c0d394d7762272660df433e656875fe927be677167fbe82bac7220f747c7c24beef07b02f93ea411302e448c176f407e65dc4a40ec334891f9b3cb96b16ae61bb0a64d52b359ed546712081f5f9c9c3c9f06e11405b40da9380ebc900511184c38f280fb10b57035eb7c4bc07598013b805a4d13661c14c5c5a801c06557876a89596d5ff588c57b7ef230d8b58196a27f881d8b28418e7a5a61455f39b75b9896c5066ddef82856155b9fddfe1e5ebb156129fcb4df838cade301d73115e068aeac04bb63254ff2e8367e0ca160654f02a2a6477060ad15f6bc87b1d9823a97d103302317b2e8997f147c633a337c3d4ca2e9509ead0f097709890a2df0ea9e2de2eb5012e989e7fe700bdeaab96320df63542ea39e959e0c8921461adf5be8d8b9899459086b90ca6215574994de68247723022f84d887e51038f2a79635140b35393f5e40b2b20d21efebc5e9c7e2563c595cc599829202e95ab9f3ee469d51f9cf120461ba28dca06227b217248b043c00af3a5f9d8cfdf2c07b546fe1e4cd8589b939b39ce6e40a84ec5d0ae09e4e9ce0262f8bed37e26d33cd39d1c04bcdd8922cf970b62bf0578013b9e69f6e7aa8290dee2702d27a267f932e53076c68eda3e0f2051d88b9b1f755b0bec88cbc6bd0c334fa8a387d54792e5b02b0dc8ec577be888423ea456609fbccd4e35908efa7114f33625404715768906012ee8a79a0f8be89c1c490409663df32cf6e94b11c06831f5140eb7a010990d1951df883800b97224fe01afaaf1d00f4cb090e9788a75061d3bd017488ec70f289c7c087a57e8c0410d154095df2bb4e302e879a04b9872acf3877e01b3ce5368fb9c4390d91662655a5f1193ae066c6a4a3e4adb7f83760da01f821dbca6059a091833eba2eb17454816813eb1344bc41ccbf48fbb8e857d5ca9be2dba03078bb585a1805d04349ba746dd8c7cffdacc658dbf305f60cd18fe75c0d92d650242b0bd08b45f97f9ccbd46f00cad29b5bf7866035080e2bf500b716a2f994e6e4a2e5714e055b12c20011f0e9fbd0bf6470346b3046c1fe605b0eb90254675c9b0b08fcd08b6b0a9aa5a0239aded990c10b924e61b49eadd55ff50e0d4d421175d31dc88a52479d3ab603e5dadbc3ab9b109c73bc4f6b2de2e6ff8de606c2015ab205434ca091b46bd6c0456d573595185091b6bd1ebe44f19eb373d4ae54e127547365c70030a208dbd1c615509a7405ae3364c7abcc90aaeb9e1a6f5e7a1655164d529d6190a17f55b8ee198ec3ac03b9d6aa149fc88a527aad1e1859067eb125eb1087988b0bfe4d7826072be941f28fb7f46836bafdca0b1051026cdc972d0cb6a70e7279f04cf97ac5bfaf19f541341cddaeb73c6dafeb6812032a5ae3d87bbb4613ff18e5f65ed6c0bfcd9429d4208202d8f49e0a6370cfc295071e4b37d2767cc21e89207838c9b9d8497090cbec1507c8468dc14dcacbfb70a1e607c03c952d45735784b64e54eccf8e8662702446f3122d43ad075e81a61d2cd022045f9868efcb87e1341a8cade330311eb6178f65b0cd7595813e102101722b0270b2a29348c7e0bbbb0ef3cbf5caa03ba547d0aece59e12ebf2fa7c7ee56d83daa261382d1a4d2945dfba625e139ac139873c15acc64c3bbf18c47a5c2440238c09f3c7f41c605d84276e8f5b5e12ca7d891c552264a3498cdd7ae6119431ca4cec134427d11983dc2871bee8dcf42b8e6a99aeb9893bc639cd672d50f77b74d17ccbff26d075a9721bd5096430b25bb3242dc350d6fefb8b50e52660d1c78dd37193df208c9bf6861e6355dcb4482cfce8c144dce4dd70d3feeba794ee300537991eb8a9a84377ba7b8cdea6af972c95f2367de775ee77fb5392a109b7497486dba67b5fbdb46d6ac55d34bffaba2de85da04e41db546e66519d62b669dd44a9060aa491ba714583fd1963e35e89770e2a0d8866e0f515788c0511dbb45765a42bf035eee258d1fe66fc216b09af4deb75ae4d57851ef5c4370d61b8888e05426b537b4d606d5a0f84d5a6eb6da4dab4243666cb66d8fde23a885e68e23a52ef38c2ed503dc5d141969cab51fc87c462cac9e14d29a77674267e6bcd1bdaf28c3a3453eba71a822d6e8a48f61d8c5ce1163868e47753a6e5ce293ec40f89beba0df20c3f6d784254ba02d9ba0dba8813d616bd6ffc54a1b6d800386e3609f0d6911140a825ec6f9441bc8c1babcf1a59080cb2b23afa8f1e81fc2673170c0adf6fc2612ba943500c46ee72ca27bc489862f0132bab73c8b68ca80743659860f78fd9f08241c6df41b4ddd93980b4c845816e2a1143c18d2eb6c5e800b41084c3b693fa6770a5686e24883bb095d9f0617ae32be09560da1666f6705f4ea8d8f75c3d577ecf0b6de79464546d4a61f4548260c0fc3551fc748b6cf570016c34032a80c27b5a405616a50305f48768813b4ef3aa5156a5e2337c1358f2cc9112ce77c0a385543b3d16d3859678af08deb7da49b063ba00d341a4201f197aa8d3184e66b900f8f08d6faefabaa2a5fb4e5549d78a5648237b932df796292599028e078f07d507de9dc6921fe4f875d6d11f140ae5839220c6f8752567fcbab62e5ff0c4afbb904af02b860a06673c945fd592172816bffd0328aac5ef3621bb9f7949fc017e5d65d455e6c4e5821f14ec60e502221c99b2a3c40e3e4ce951e207233b0052220546a6e0b89060b021744f8a8d695008e193a140c2bcaa8450423645024005531c61f2854ce15575c4069a12497a551df1d1150a85ea013b12f418e62e18e68e6d1df6ba21e0ac8c22893952676574083b2bd3bdb349d2a05028222928a282a7646594497c2c0d272ba33fa5868214ace063bc2cb8bdaa54101479a07952cabfd72853a8c4bc5c15e3d7b51744a63153433d7496956c23bc52f3449f9d8487de3a7826202c03675f81a88730d56b3c747d683c549f5dc6436fe8edc5f3e6d912cdebd8d43d3f69fa67f390acc7c190ab67da16f22cb43d15c6bdd754ab85b61a3e412ddbde498553f770f7740fef63169aeda04b17483db5cfe699347a6a1e36fde059f53603cb40bfde75595a5031440a2b2da668e3e10b52f2b383329416543821ffb21e50cd96a6eacf4387618041f35ffc54283eba06dda10f1d48efccc0a676e83fd8e42c031dae1ec22f2447cb67f73cf497182fef9e2d5d8145d6a438d881de606c49552df879a840541ebace0e7ae82d05f66a761b0f1ff478599b8f1f9494a04307b225e841b6a43a80005b3490ec1aead5003af490ded0934c632211a2bfb749924b8e9ca3279130ddf1fe5d3ee3d3f8e366cb322443b7599a8b9b3a30f76bc3b8a9fd25c486b79943106d5b6239dc366665b65fae93d6695c553423ddf17cc55c64cb2f9021b7d96ce4bd8d4830a30ddb4422d7168d448e8ddc666311462e8a1247caed18a60839aaf2ec41b644da5c0a191df31e5bca9c1d862d859c3d7b3954be5de4d9d34623d10dcf443d90a21746a3d93fe2a6740888bc25c03490dae2abb5f88a7c406fb95220ba09b9a50249cab45ff6df67bda9e2c87abbe28f462397ba437f34f238dae40b234e6ed7deba43f307b48f5cb4d1d03ef2ac31bfe12af281790b372517c4e545dc6c0fc17b91b38c3691b728c3b415853c0be95b66d1382e6ed8d6f1a59d1d3edc5e9afb4162997dd71eedd9529b60581976d95c0f34a43fcb87fd3ce181ce1be0f589193cd6e5364bb22411a48fe668801edd664541843c74b67a62cfec96f74603bb10237c39660e3914070f799ed85b1e12424ed2878490df2b7ade304ce450e442e622e7cd5168f1494201859193b6b4bf6e03b3ee353d60588f614daf879f18d5af773ab6b48ec2a845453e1e8fc7e3797b7c3c5473ddd248fbd1c87b4b2c3e1a8db6a52247ae236f5972c3dff622fdb93e6f2f9273e1f1d09ffdfad847cb7b1268e13ec0725772a4edd466473dc816dd2cb9e14ff480961b2e9d657b69f1f72d0eb3ddbeb4b428211d0ac90ebd451060ff003fe109cfa26d723b7ecc12b75b1c48c8cd88f5cbd1fe36ebe5688f8ac3726ddb6610eda35bda58bf80712f0f7881aea717e8fd90f7e9f0206449828960229a208299e023a867cfd459565207cf74ad58a6674b16d01a68accaf8ede167fcb7bbcb127bb8053aaf8057558e95cf9ed649545230f9e584ecc3268c6c1789203da6b6c3d9cec876cc440819773828e47afb8c3a114912c8f1e5b3e31c9484fe68e8f8bab2ddcbd981443fe66ce96d171b8aa3b3181275d860b2a5795d893b5b9ab1c8b37344623d1ef3fdf6cbf17c39ebe57841521e71968b38db3d1e91c9cbc11e75b65b6e429c98b27cc6d4b3db6cd461f278e8b3f6789b4282687f79666d4ba25fd1a39135a5b60463929561cf1edcfa638a4d7d628f38110918d2f9c6eb131eb0f819799e596326e48cab5f3d2f9128653b8e603cbf5e96d8935dd98edbd88e21b01e519b7e2cb2a5e517dd40b6c79e2bcf7eb12145618b8f1faaacb6639f4ec8c93e6b43bfcfb32f177bd09033eaf43c7bd4e1a8f32aa5e258adfea1443f368a43434048f539f35dcc962c4b7dbbc7705ad02d9700a4c1f2de2e006ac829dfda60b43cb277ef06400df97cfb87b5395114d91886612c3ce68d45aca3f38561dcbc386eca6fc8b9caa8b7421e55552f004d8daabac793d4dceceef619999b72b9a832ea107e6ffdebb321d7afcbd057182cc1094408a1065758e185f64311af73008085f79a2db5f30fdda11c80df28bffe5ae879f61f355c01223f2c018c25786042c56965fdd4f1ec4ab3259f67464332cceb3fd5af95e351a57421c1608d757392846d2edb9991b29048c523d2180226595d4728c1481f0164f56084357644020a618295241752129d6601cefbee6e7f497058d924434998388279bb7333484c48ca168e5061bea21b4c927262bcb6d8ea4282912e49a47e4a8f5cc4d2e50aa5612f86615a1132f45d122896d17f0bb6c774332f00af2a9c25be5f552cd8e128d9d26cb73ab6db758f9163a4d952a4e19a2da9dbecf327ba81db0d67d966901b1ec3dbfb87e42579603c2534cfc9cb793c4ff5a43c1d25a5c9343a585028cc221667871b7bc61c99393247292564890e3b4003748d85c5339666699666e9569bb554758350130a5c8939d56e4a232e4e758ffc3a7122b390fd23cf58935948f823cf5a9359c8f723cfa026b390d78f3c0b6970d33487fe9a23738c9e458eccd16fb4b478d6b2cdf82dd26416925fbdd95f3a3aeb301328bfce3e5bd2376da87576b2257db20693e59d58afb644c62f1036fd609955e87f5c476494b2a5d92b55840281565b52e8d0a3b2e939fbac589d53af6a92796ca3c15cc796306f51130dcbac631e2586f913dd609179a53b5efbfc45859cedd364a849b68fee78df456820fcf6194724760289f9120bdb666c1f3659dc0be63ebc53939790c760f9f3e8efb4de3f6c7ac13c87cbd517e35e42dc049e5b1ec3cba109c6e5f0dcf21c9a442e868bd31c2cce0a096920f589131f5e426ec68bc8939f209e2427f8e1c4dcece24a871dd21c9d70c1824c62219f0e1a0ed02091c16b61bb90605e6ba6aa425996b1e8a6c5597433f20f64fc286431c618b90e79dcde87b897ccf71fb08f826fef331436ddcec533155160c8113b3b1c81082d9a84d18393aa0c0a1e37170e852db44d211f8adbc4e16f702e5b10ed5f46dec2c929b92deb85fd112773a276996b2644b435dff0d1bbcc57e4a33fe49a61ef490d48149eb5ca3466eeea39a361890e34a7269d8adae14604ba454308f8978c00bafec361c8097a6f73c8afc3ad874c4513e0a0eb96030a12198252e5e0a48af0b003ead4c390d39c79d655099e77d8978719089b9e172ac3eecd9df1eccb643cfbe33820a4de4ae404b9be1d3b36456adc559f91316b5f166cde5f9e4c6366ab6af036bc7f3e637a04c171e2a33b3607ca0219d901e37927d11ddbaa259868628934333333334f060ab28f1f330f1f6122580bdd34de1a59c65a50e13498ca8d2b725f554c54f9e7ca0224e895d32c387d92c1e40006073d40413d4054a8f8a0bd0c9602af32e4736e35d4db55f8141e8597126a86d96575642d8465da22d18dbaa68d0a82a3c884c969a8655956e7b04c3461d8d6485846af2baa3686157f222f6cbedcb22ccb820dbb68264342d8d3a825c928eadacc6d596c59accaaa7ced48891333804ff41b6265a21bd8f186f839880233a055a6b5c0283d056c12290a845c4499224a18ddce517a8730bb5811f47b55f9a077fd688f97c41994ed36ebf16165aa1f190fcb50d96e812e20dd8185ae46d23904f8672209e0991af5b85f149b80b68a0c8ba1c8bd2ccc49c50155067a26bab91cd620f211fff21ba2177c64b4e22dae9f4ce7f2914b62a6b5401150648937ba9b889aae2ec1ef8aaf5c2b3691385206c4a61dc8cd3833a0e6481c869cd74fbc118baccca24c59950c48d7925abc1153882a64401990e9fae1eb278ad5f543ba7e6e441462bc7e3603ca987f32a018593806bd1a60a10b11666eeee6e71a00921700323794ca9c1c35c77835736bfdb4539fcc6fbbb5325e6faacc7aa1a00bec8a16b66d1ae86ecc82ecafa143f6d710725f315e6170707b0916ec7782ad8313ec30de0d7659af4d65d663d464336303a32231bc1cb604e055c66770eec654659eac4136e4784384fb2c36414b2fcdba2ec8b3ab3e6cbafc39ffb0c9f2b7facbe7398865ae1e36adf7d5733df34a4f4b140cf95cf771508fbc7e78d989ec8ba7dd5ac66a37e4b61e436831e1db0baa0f42d6b6d3c7d6e56a41e6e2333367fb226bf7c22064aaddaedcded0c800d23432e47beab39d21841a912cd32d4df5b9f12fd84fc6ee6e3a8406bab02c9fa738a043e96eee063af47b8fa70be83d5cbce29e9e229357abaaef811c4b3170760c9cdf7d108cb7a17f2010e4dec5c3d3237797f5674bec5715178fea2e4e23f1de3b227db00603414e1706e223ef4578bd177fd0578c266291db847c5cdc1ef3dbf7debeb797cbee7befbdf7debef756eebe7defed7bbb2226fc03fe8100885c3f25cd74f9fea1bb3b0b2056df58d40008dfdc8c5c109a276d3725ba9060a44b93315ef4aa6a72839fd2896800084d773c57772e82e8e203f2472fa30d2c4b48816e6db37d5edc3146bf9883f07b832f649bd1a7e598c32d8bd84714ca7ac5386dbb86ef2acaacd55874c3dc42669bedd46f2cd1f1ea3b1b26cebcba0bafdaac3613328d795d5683452b54c326203c5d228ccefc0ddc680cf9208c8e611816319616c8f952d9f68c6c093a0ebc617160c9d15edbb4ed8cbc140fd2450261d30d5780c610811372bed4105b9acac6afaf3e260298ed48a4e83dd8f4485a84fe1e9012711a97cab80c3c8cd0c74bc5b8bf1ded85589003d5dfa6a21bb7144257058324e595854e0714eed8f4723872bb5b13c40a0988922040a4b65cbc1c36bd1d96d12dcd21a331e47c3baf09c5b1dee2444e0512b2a5f99a0012a409171964bbf59a7d48bace9d040424ea017a171ab13518a879ecd4865bb861ce8688dc18eda07732fce6da41851978f6e70f42657fde55a72093f18a2c73915826c68b6562a9d9821036c3557d570dcba86356e4f3e586b0dfec54553b96511f01413e089b5f0c1dc93e8befb21ac2b6342d69f376ac3b9655777725cb687c5513f478a9f7ce218ffda027c3222682a82a8389205ab07b79a4fea0632ad3f2ed01b83d958913fb160126f211b1edc530ec0a0f104d60a0469322b42864cbabaa890f9a0f127b55316942d6830cbdaa981c210cd9af2a264458435eaf2a26404c7e62ba19191ca1bf884f3a4df482e5a78e1da684742503259e1d13dd703c4d610119394834a97284cfe8a78ec9c2efee9eba8c6719f0b03dbbeadcf08f66a08a0191df27bf1eb58d01945f77512d714485df25b909d0488309448410450f4e637c0ba4dd4eaecf6845ceae639365829cd3731a36ede9b90d9b74f574ae78cee279c4448788ee370c855093a5e90efd8529cd6193c5c1149733616af48a03a6d8d4403492229e8578f609719e83443f188865427f5521274c017154818c511c54c8095340c0163cafe0190aa1f590b54c81e49f1d13f0ea32ca437b39ba9fe9c69369d7e962ed8d67aa7932edcf213743d043f23be4163705f053eaeb2c5f6e72af3d1e197839daf76b9e89c5db33f0785cde3e039b583cf3103705a039e4e68d9f2593c81f374308f8e73be5dbf595d62d6e723f4bdf07d01c4f14a3c6c98c23f58a6e966578cbdf363b910b214f716fefa6522ec0879cb505e95c801fe23ef09e604307e9def297e77d396c37b2bd3ceea5da5b72201f4f3bcb95f6a7baf69a82c4851a995aed2f96059d04e3e455d8a981121d5eb39aaa6209aa01153f2dd82a150edef211c410db2f49f989399825917e388d0cdbdee9c1863dc39524466c555045ca48155b6a6713b6a5e524a0946729ba23863b67c2543b54c586362882da52bbc7cb821d2f0bb6051bf60ceff24142232a880351dbce33d481390f913cbbae5280428376280f0bf5574782f17f8f857c62ebd8629b391663cc307f1816a1e80693c08b97635b3fe69967d876b9e6578c526adce521ac4f97b3e8065bd1cd25f211fd71ba81edac971f91652cff963524106e86ed2c67d9425aae31164783065991d9a02e24fef39707a85fbecfbfaf2316e84bb2a6a8e4a13f245b822e039b485192bcf3519feb39c9ae2de7a19295810e993cf42849dea90fcd43f290f490c4263d41d8d1d4a84e32b00c5c433e9eeda05b103acb164fa53113a29eddcad68a36faca96fab1aacad650e929afb9c0c4f012db970ebb6811468b8de83b333a5880e2dcb545040c9f294f7e5e775cce7e7a3cb604fd821bbc4ee0844777406f61fff94ce421bb302162888c8e3e3dc633cd72c5e102b9c3ed0c5de371f9c7303db3570f5bb110cb1c0251377640e30309acd8800a2cae084a82133c08da7f2de39d10be7d86e68a28574871b511a921462441032858787185052f38b519aa2baea8225d0ef0aa5279f1a157d5154dfc948e840cc60531062f382d3c36b07e3045e3014c4e0b151614162da4ba5edaf3d9e8bd78c5501412beaac6488112c628c2af531083089f7d3ba9ddb734f3ed9d184bf8f6199af69a2d01e05b258613bebd852d59df3d1e23060fc458fd741a4b88e8bc0f88eed01d0650a180768587c31249c213d4490706a84edaaeb0cf640d1e5c39e1f0d458ad56271d1090ea58ebed2586c6417148e1491524271d46ab53fb90d3f544ae30e3f786838e299814519d70d0e1f2d999f9e73af411785427dd1526cdbf7e6a91a1043380564a76390b302ea4d851c268cc4249aae1062a724a31e4d4202986d08234958f0a88955fd764c8409595114fcaaa678b1ec5b1de2a1bedd9b99ec8c74d5eb54a7d567b7674d5f3eb3f62e8d50ebdb3a5d6791d26343aa0b493c656202d2324af92d5d91cc53101c9a6f5fe61a03f4dd25bdbead52f1f72f27951ee650296438fc172e8ea90c3a189723140bf38d5e3d0c3f3eb434e434ead7385d4939eba058a637db6ceafeb0e0a6c23d93a4771ac5f4f247348687226cde7a458c6f2819c5d37d341bb16109107caaf6b2498191755fddb58762049bc4ae2fc97d0bd15b1bc5dba702b6bb3fbe0a76e57587f3872baa604d91591be2bacc7d8005f866d31263d430a2498e0a050a89c937654a4fe748bf42aa3021452df2fd06dd35353c3c3e4d759c8148605ad7171498a21c1f0f5054dc783f3eb33d22546c7eb15d65708393b26724ab9a4653839bbd9fd7633daa8164411d4d3413244e1d303069de282f3eb3333ec6f635655cdf2f9d915d6338d09525b829cebb33fd167ca96deaf4809393b28884dcb1365072d0f9b7a0b9559f7e2978c5f576e79ce782fe8e7fab04ad4043955e5f3eb362d409c18e5e5f0ce4e1455fcbacbcb794a9c288bceeaf06c0f932db1ef6c15bfaa97b3b32bacebb63a3b90cf5767db9d65f29aecec8ece76fbb6c7446777b6a45106f2e1f08e64d3265999f555f270648a091172c68f1aab6011b2224dac667eefbdc7a9b7f3ebb6db15d6ad27e4e3620f6698961c39492498ae260a25dd0c0b2c3ab2abf9992da9d34c167ed9a583819c24128c7459bd22a048576e8822f5eb38440de61581efe2c7fcf8f10ce272c52b5ef1baae8bd3f606548f9c519423677c38cd84ac880f7e6ab8e29f5d01685758c79220e70b122591ddc3a6f6d40be29f2bf3050559d9924a612a6ca50d23e45c2bdb5d79418ac36d767dd8d48fe31ffe79417c6aae7bac23e48cf00989c6c7637434fb8f4be7dbb57b778c0a3990d37d9c4d2a84215daa90d3a30be474274fc876373728332bbb2a54a85055593921a223e4d4a087ceae579ea5413f2f25143dbfee52839035ede91581814fdf7bfa9e3a5b6cb1c5cc0eb70fb06adbadc5cd87aae1864ddb10e244cef7f37eb634239535396a3d6af189ec9d344664848c48daf8f990cc45927aa99d5f7f46a206f386f8242115c8f5456d2fcfd537e78ba93e3da040f2eb302818eb3ef8a99d9d46c70c49f6d6e3c7aec0ce4c243ba74f9cc0f9fde1152021e515f0aa45113993f4351f2314a95fd74830332e4d5863963469bb5d611d4691ad6d8b1a455239729d95fc135596a47a22c9afc33869c3b4a7f51953e4a1d8cdf839b1e8f91055bc907d10f45b2d3e822892653e82c0e1ec699bb325ed39a2c8ebfbf841c996b4c708201f41e06ce9c5471038ff16894eb14f5cfdfab40f4cc121d684ad9a4a955f572bbf3b13a27ebda758f98d57309493227e4223bf92034ab2422ace76dc43e46cc74ab6e3cbd5593d6e27d56754d7b6b3f43d0ee22095617f5a547eda3a8da4713a67923a07e7d93b47674bb393bc922d4dc9e4b99374922da933077150eff868cc425c6419c932ec2d50e4f3e5b21fdb313f7ea82d2d17a3e4e89bda1eea15d98e9fefa658861e363f365004c80c4130ff500f15947a45aefc3c23cf33c823380c8eb59614e9032850a0a0b0eaeeeeb576bbbb6177b7d3482abbfb54aa76565577ab7840e4091428b06c90b11732aa378f649625f8f1181a1d5ad339cd763fb4783f550b171e8ff5158d0c3d316ca947a750e9e9a1f353ea8f12d243ed1a0a347c1033434de45a215777639f578ed019e872e8d97b4ffaecd6a2389edf981df87518373ded3c74eebad1839c51e7e9b248c5e18117b9207f9f4b1b18d6248360520f7766cdc3284fe03c24fd447942899f0ac51f4671f2f373e6a1f7db170a9202e68cf7bbbb8bc6a3d1f1de7bb1d79f947257eebe87ed0df65e0d0d8ca1861ff98f0a27c376ec8ffbb15d0a4c481731640d3f376c69aaeaea07b37c2838c6720b712f6f9fbb97afabe5ef3d4649cb9fe534bc18e3736c751d5bdf8beb41b31d7b67e344ae33333333abcc38c277196bb2f97975987e3ddcb2b1b61ecf2d779bede11ba305b71e36dba16678ab7dd9a647e72246f73553470b5b9ada860e1daf2a33aaf8497a22083fe3fbe0a7bb530c3bd59dea54a73ac526766f772fb176eb93a5bc3a6fa125d5d3dbf4bb1b45e38a63bde110082fa046d2a9eed475a575875e5a525d32b45b6f24bf382cb32996d915c8795dc9ae24ebd96e2ec4f7f0df8e6c70e185d77d0353294ba58a3b3ba3ae2227e7fcf3c9394040bf3b7fe58a4af5522f3575d5556428b2bcdfee86452f30f71487aeebabc885e5d2c876e45b02dd66f987c9602fb678ee71e8eb56cf4ffed9e2070064fce41ff9cb5efce41f7f3daacc978a835e78ddefbdee0dc974ba899c97cfd5a33896899c57cf4585cc76da88a4ed2c18f8fa24f5825f48c6f5faa487347eb95963796733fce5a324e424bd6545e51502335f7f4b32ee654fbd3296b7fc48b77838c1470b8a241f3281640fb95b334c2791ae6b0b39694b21b71c664537a12744f402fb071af09ec4a677c22c7fc1b06ec6ca5b2ec306d6a44ab05cc7965435c694b72c9ab7d65a1c9f1f5eab6265d5bce558bc2c2a6fbd65693710502a5613b24ca315cab46ecbb2ac1717308f1e5dbf7b091227af0d6e1987324dcb4211d01f8012e41402ff05f6ebc505f6cb2fd7b7367dd2967a5508ec35babb6384ecf1da5ed8d75fd8f55755571130a4f07470a738983953e1cd65def89ba6d91ffc9ed96ebbe70761777f368aaaaaa30b8a0bf0dfbf6daaf0d6e7ee6e737f27f73b9a010c1776bd17f782ef716a59584368c5683e9acff2e8665e216b96b56f5f0e6e0839ab21b418428550d7b2a06575db4108a1c516b42c784d219f776a6857e4f3b62c6859b06ffc30626646ad2fb1206ceb8ab0ad2bc2e0c7ba42d615d9801db22e36baa1854108ad2b5e3064b171c10b862c51a689b4acbbfb82218b8dc62cc805a69a83c3bcfbba2ed1cdd511f67b8f61731c49d2334dd3d8c8b6df8ba427fd357729a76c849a9bb9864108c39c2fe7887968838f45aed9c0960028c8d49f03cd7e057a1b7af4cb01519f0af4563fbc50d7e8606167021ee99174ccd0c42023f2d99174b0c2b8a2b61ee3ce902f033598afc750e360b8005fc4c9a038d675446eaa955f8b23e9e86e68611042eb8a9615b564cd5c355fc3323b26020ea0853218daa03fecc85dd6057d6e37b32ba3a6c5e822924f7358ae560e0fa3e801ef31bf2ceb75477d3c9ecfb534078c37ac76d02f918ffdb6460001fef6eb290eb83a5c9816e22bd3342ddb8ba45d8c2d1289b0bf38ac64953ae92f0ae0e2417a39d62714b1b0886e206b2b910f3ec6c5083fbe1a2a8f870534c7ba15ad8201c52183968450bcac90461e40122fe842b5842ea0f8291d8b2e9a8484d005123a90a2575517385da462ba198fe102c94fa72922eb2e35b7b01d3bec56b7385e4eb9a94f5e9db7d4bb3cd4774f2f87fa7bc5a1ccbc7057e7b6bbbb2b8178aa3856b986afc507971edfdb9ccf46faa3ae515221c1d0d4d8f4f0cf5bd8d28d7fde03861864783e03901abef8e7426ec02185f352f8e72f87897ffe946c29f4cf9fce962213275bc2fcf9e351f5bc150fc0d81200b634e551794012b0f284173b04e1044ac0e2f4fc5dd992f6e09f2f4a892d05e09f6f6a4b9a3f5f236bdae73bc49644fe7c916c818417796f69851789442e6fb0c48bdc458403d48b1c664b0678916ba21b91f3913554274df34c74a36559b64591cf74f0d916627ce6305b8a9ff5f07ce621d14dc60425a85328e498e826849911fd12dd4416fe8a52c45f6e896e2e2df95b10bab625251eba0bcc22e8a1c3402d7a4a0b8062e5a1aae96df144cea97b4b915d933b7876178672c4f316362842d57451718329d4a427d1cdcb79d10b1169288af891153b6051250135904fbef0020b25dff3450869f4e1ba823d11a2043d4f921871000f489ee800e1801d524f665002d4932a523f4fa0a41c80ca7922e587d31356242ea20b0946ba4841f253ba88093421c6ba0d29a678118423a4704216320ab144b2ac208b25cf497f3928142a8829764ec0036043eaea150b31a8bc36c515d91053dca08b29be908213e365c1986ec60a357050c54fa7b172541f9de1a8f40cd7653d2c15d18800004000f314002028100e098522b1503c4fe5ed0714000f80984e6c5017cab324086218a410328600420c00048000c00ccdcc28082d636b65f9deedbd57949df6abd2e669f4d6fc3305bf2addea4b43cb9def4170a7fd56502dcfd0435c40c3ee223966a3be56faf2c2cf296aebd855eefccb9cfb8581d3bd14e8b5e56d2d1db7b39ca3d93a213709bacb5ecaca3629ede587eeddb6209bbb141a5013c4e59a8db1a6f82a92546ecc00a7fac64b8655cff8ffa5674785ee1fb1f7331aee93e2808d8738968c725d25aafc3ac3cbd6cd8d67ee5e4ff822c620e3d4bdf9e9ee94a4fbe40e4f3ae81e5c52d1cabf0182f746ac89a96c20f91fc05fede07379303921281829b312f12476f7c8f6d0b3759d9367b0a34c9600f3ba83a8d6e3acada0d4d3dfe60ae48fb158a4b19d06a3c94ba9505a1d4ae8af35a4da3d8c682cfeeb53da5433d6998304a18a5f11dc3e16f0c040b3ae21f78e72a022ceea207d9d0606287ab0c0adfd59d437a095a7901666bf01b2f4085a94918e691c7e412bd85af0d2b0c094e22f9958e7715d415b226c3857172006ae2d4629f391676605f5259d37c83714c7286bd324fc38a10b3c7875d78654d86cf292b62cb0888bf1b01ad514b8d5000b53f1ebf564de95c0006bcd9a3004c2f74bce5a2f18df3348083f7e18ae43108844303a7cbec94d30aba69a0859af89620b81adb7ffd14461a3196300dd137941684ff304dce8996130fdb805a1308f79e155dac436d86c79d25698425379a4dbeae8e250a37167ca4e3b7bb9740242907856931ad74c0f888856a9b24916541ab016e4ad04a424b7a5d68cb702fc6fdb391e8f3fb50eaf440585b14da5d3dc582e45e93a02eb0b6c0a378237a3fcee37af7ee021d9c1836df6ef08e60ca81390869b97a558e705de492ebea259d4adfb50b2b321e1d42222ebbc855a856508f88f9b48c98faf925e0c6daf3101c0ae03cf967fd849ab690225e0548dad435cfba280959d28c4c8c9e93363070eb69c804bac7d6da8744c054284daf9b9b7fab428f30290d56a332727b0015eb5a26d020df72e0d0c058e721ba90bd9177cf4f7270e3f946d7e973e2c86a24def7129eda49725ca5215adc2c03d23cdb01c514a2750e08a4c687a592b996016275e83454b2df232b8c1cf1ff6f2341ac5c370dea8277f5364c508292ca1a4c221ac015e90b32af0cd120e712659b75d293da407770a88f5e6e87b03470b3a77f83313dc9f92e20149e851e4d84b60722a01457c14ead2f9bd3fb3f55e7af60fb5556b3497044f5bda72dc946ccf4181b1c0c1bc6e9e8ae70a16d14aa8c4a20033944be4b100c64cad09bd5a768f88d0b19a27d82b575aae340f02ce3528b45541f0bda5f21538ce37dfab9cde897b591c4e4a035dcbe95203070ea79b769d1f132b68b2c473c4b842c58892878d9bec09ade2088b80bd2b143a41a568efc5f6cb6523c1b69b8536fd5954cb2ae566412f854b5b7875b06be16d6cbbb2054823b086db67413b8cb8dd35d0a890cbc245976eda2afeeee4b8993941a546a14d5553b2bb66450dcdbdb1bf14ace27f553cde422bc6fc1e859a4d7ef5678db0eb1e8c7cfbcb77e64343195e01980c391312a66f182d7365e422c19d5cb82f76cf7c9c7433e32c9fbfcf93e9d4be08c1f73c4cb34b0c5420a7ff89cf2ef2e693160d15987571ae068fb281e414c2128b459ab55f34ed0150d149c10dddacf868aec849596a4e709e96176a80b68f2cf0f4aebfbe38d8e963fd28eb94bc008151164decc5db5b3289309237b7646fc5eefc2a152bad2944336b5ff4bee614e93ab4a1a10cf72b4f676a73a63e79012b10e9e72d1e5d238b751ed2d0f9133d9ac3b670aff6a8a788d0784b782874701531e29e8cae834e7121d23fc9368404235c27d6e59f85dde1626994c294dc483922a6392fc8656d3ee550280ea84bcf6e27043b60b9db66629123ef175d9891ab8561da92943008b078f55e8c5dac6290b0ef45a8e48746bf17145e5a79e2ed0de6b12567667fae12c2f94afd2951cc8d3e1a297e197cbc07ee0f5936fe143a584975b9d5c35b4762f748cb4736b54b853188f7c15249d2ca4b26a43f2c695b565121596f080aaa25d596fdba60d59bfa67846e05c3ae643ba20e9a5769d0841679dc5fe821b8e2bb77aa31fda565bcc9b0770fbeee65ad28754df0bd1381738aff807efe9e7b273ef8de9f7c3fe6ad3f4ddf0fd601d7daf7a39edff115ed8db47e5fe1fd1875c9b61f51134876cbd21574fc21fe16f3dceaf7534e4cb9357decaf1ecd6307c0424eb81425a05c13170b40aa25a0bc670f14d90a05ed839877312bef5cadb75992e690941b9ee96be870ac99dedf60d4592a63c2efc4d297caec35f7f926e5e784e10396e3faa7b8fc306727c86a771b87e795768aadd05d0a26b9ca7663deb50069b72d5a6f1ef78a816b76619b82a5b67e98f2d31885ce538c26e14b1981d3d3f9a79be5c9435ea8f4f515202228c6b2c981375a40d85941516e3ee14713fa084b5a95fe56fcd911c4d6c52e845b5af075792598e95dc24cf9565ade18a60d9833f664f02f7a657077cfa3e12f15f53a63dc1026502fcbbb5a84dabe9dadc8188bf824e6bd8d91d25f0a909fe09c7db9c7bd19ee7e8c3175f350212fd08e195f0a6c9541f12c0661eea5551dfb5dcafd4ecad3e5379efff3d5f6caa5e5b27d9548875891bc52a6ca694c366a11caab7e5fb8025e7ee824145c6e35d2cc73096e11880e80f2212b261e2c0759d91a209b654c89fb478e2b93fd0c5b2c1abb093e83d92d39a6828bb243b57db980a4d6e66fa6e1d4a9a34b8e4ba9db89c699dd812570e8a91f48854e91fb670b64d8964ac8c9835867ab82ade6ca10511d888180a93654e77ab9b638791b1f79c676d9eb0c042ec65d568f91b7ab729022f99f5d252b2c98d03cbbdc319998f8f6fa2cbf208f3006a235573b5d944c926affd3e31c17ba797714c9fafad8dc2a9a1e28edde943c0182f385bcb02c27efcf510584ac1f510eae09852c6fc7fc0971cfebabfd50f385fa72cfe52081e320728f682699f88932cfb1b72ea9a2b2652a4284be50d263479e7fca3f9d812556f68bec0336f1968401851197146033e454acdce2dd1d8fa17cb77e75cccd4dde28c69174bc550e21a4e568fd64576bbcc8bfac8c780d7d79af70431155dc8163fc158e98345e38d9d05fcbeb3a2e84576370558b31064ad107fbf2909949d371bf4fc1b277d708fd850e40ef05f690fcd7589919423a101fe965ddaa90cba2b65899d9e7e6ffb3c99ad1bdb6a8182f44c840a0defedf3f98eda1ebd1e945ca95303fe9cadeef14f81be7168d9fa2ce5176de1391b42315091c28605b0003e86c43e4c2223e254db08f581132f9ffca84bc10864bdf667bed6c10c9517f8d441a12d60fb4a5f911dd889dcb5e239ff06d93a06599f2ad8cc00cb7327b63caad73005d0415d44037550a890d20d2808f8e62adc42a76d02b167d36e890ff30c6da8ffa5fc6292d3a1a0b360343825aa35d657b641e5ceeabeb3d7bb964515be0ea8518fa109afcd30836940075bd0fa71bffaad7cfb280be22ed8e8c2314b22ad018436ab1867042ecc835ae71a11d36b9f76d1cdd005f384754a9079a009ccfe3b5fc714bb64b658dc4215ceb05e598583d995add72f7b892215f70b117ccb40c3aa35cd0286e98d0f09e34ca42a52e9ec016d260d4f7cb4161f97b682f8e7eb08ac5446460e8cda2c0b487515cc6511226d676a3524a2b785dd3320840e121c59bae2f29f4b6a2df571701374cf1ab840bbdda64f4da172e1da645f272118f03cdb9314dd0d9860980a3279888e394df6e29072d1ea211759ab6853e046755ad961fa9f381cef5d5827ae84f8810565a36529e60582f42440ddee7e0d17a0a566022faae8e2cc7f01f32a9a3c277613f627a124f2c8311b48cf09274f2ff15894a396eb20c24cd543f9067715ea65b7eb24579a4931e083e8ea8a122070f57c0479ee537838ff2a027ca4b9ea7b651acdc983ab27aac47f9c376103a8755784f835a4ff5798f842ba059ad315342bcadbe3cbed77af7cbcf576aeded3370615a7fe445b7262b536c9365d46bc37b4a988342aed0cbfe9a92bfe990064ca7da006e927e4308a33bd485e8243d4a10b8d47d7a773d35bd750b1ac84ae520cba9168ec43cca5f128584de6101e4a72ad34ca0bc514f481195d965fb8bb82c358be31a19a74eabc882678640e384f7f8ccad5ab6b7c495d75fe4406ceaf4b3e63fc6f552b7873a39500069c4597684b80745bd57ce88402afc27e6c71a6ffc295d62b96aab337d250623e9daec6747a3b874d0a4a6ecf7c6cb82247fa74806be67f72dcc0450744dd301adaf5769e66b637d264d5e3dab310624817c23661f52ace288bf53cba1d71c70cfb68327fb3e5b96bc947d5c1a024e3babe5c70634d83fc1ebc6b062e015835e44243f9aeaca0f18949fa8729929c211aa4dd77ba6fef5e7e19f7234d379b3816e8fd27ef1fc89abfa29e1f2daa9c67ce4f227b0463b3fffd6369c2e743993bfb6e2cc8193ef2b0aaa5d4c6dd54ebeae8f3170e674a3c8ffffad79b11787eb2c723c9f846b82a922cfc88676d37da014413ff12193c5e6b6fd753cb529e7470ebf9cbe67b028ae33d52314c75dbe79c5ae2d2798de5e5f7bd7dbc67392a235e0e4b6ed60e0f634bbf9207b9ac18d3d85bd63e8d5555ebdaeb6cd93ca114e0c4ecfdb248c998919e2504a5f9c2439681e0d9b135e202494b382bd36ced7d969fcd3c225b9345a1ca825a50ef4a9978690de31d8e150364f66c9773faf6a8c0db442d9409a6b16507def6ed777f3d976dfe9be4b2085729c79726003a2bd239866d8173c86137b75d9dae520612ff924695ba31f390ed82fd2e389785a03c4d488d2f65cf97658672f291087d907540c70b2fc979227db772bac7b8d196370440c3951921535183144c4c36eb556eb91c519cdaf8e84ec795713f0b4a3d0e4be5e9ebec79c17f542d8a66234b84451d47fd027b40f13292431ed6c7c2924c0e6e0a2982b20ea7f6af0628635d6826cf7ba749609ba4d0e96235b71fefa4c2c168d6bc7cd03b97e151d6b788672ed239cb02802f2560a84940cc811b4a05b95d1663d38553d598ed70a254869d19c5eca0d52e6534078bcd6d42b00613cc9592ce9c8188322985137ea98a64b3a264bae2e291e2cbaf905a8578875d24c6a8ec22bbcad4add43059b51453517c5daeb3827f72756c915df2274511c818b2c798a7a5eaed70428a8e5e3596681644c7ce5b3b803d28c5bc72c2c049c6b15932d857cc96b86641968b11c92ebc6ed0d1c07becda4fc01bc66a493b9a20b46c3a71f7c6a3abfa214321d78c461aba60858054668f03336373458a865b8f804df505afe53474c340d8adae4c9cc617413a10d0ac46b53472b4e0e81afd1739a611f8a881955f2631c979282332ec93a51d976103d7da742e89e7f882304a5cd3e4176a807eab17a527a28bd6821112b80217d9aa796523c8b6553fdc4f47bf9896ac069415e8251b2c5f45980378ca0374c78537862f74709f6e35650eb7442324a19ea2fe0c0fa477a450b45038eb18cfb0a59884589f58929c738cb008dce9a0b151ebfc05b5d70d13a38541bd4339283108efe1fb3adb91216a394028b203dda64f074dc184c2aa587a22daf4e740b341deb3e1432599ae3200e96c3be40358822cc523e4e00cd5167f7e8e9430c3d01be53254b7a62927640b283c8eac709c219da51cd806ba79266129c0b42ed6736c85f5cdaa03651af2a902ffff684c6f280517a2881e1538d878eb837b8ca44ff14c1e5cf100d4a7720e900585560ff6c97dfe8915545f3cb106576156354ba8a1b2f1efc8495a3c59eacf36914915a3c3f5081fb2e4a80c90a6c76d8300201862b0a41960c5877e2ffb83438aa56e2cf8ccbd69a7a5abc890f0626220c6b4fa397e191f51c709e2f084a602913aae19c4ac7ef9a9f5bcb9166fa1a8f89abd59c8c7a52358b315f54f414d7e6d34575201bd1a4a640f9bed2d2b54d33ee1642ffe777d4d059400fa7f2b50acb5e732afa16948a2aee3231475d67a85d72a052f1a51563e4bb641d562bbdd5a636b3c3c750119c0b11dc5110fccbc43877f9d853b836d206b766d969cd8270d6368cf828b3c87f8004bc7cd674e8b739e8a5462a874e4b0ab0e6797e9b9638219c2423083e5111bd47c173fb266ec8a02ed32a18a26ffda3f317fa6cb505bc689c6d93fb7113827fbf0d20a1e5c46148aa6eacb96171981a42ffdf41daf951bca5a7305ec14d00595d8d5584c5f395b5bfddacfb55925f40a322c5d80412cf79b088305ae52e8e782e862a7d707d6832e41c6e8c984f804e88438641704812ece4be3532aed6cbebfe0b1367bd83be0ab5b1bad84abed07be2f85d6c05c5dafbcc3064052a46ddc964fb86aa298c197a1dc1e16eb63cbc9da1da5c0a3b2bb8f75f59894d2b00619330b649b94e9fa0e08bf437e43f48f14409f1152739e89b154dd70af1d08b2cd777208d0930b3f2bb3d45929455ebe5dd3f8cfbe9b99db3118349b7520173b0e0e51c5abd72b88eca207fcb941daf8b89f8521607730f49733704899c39a683082a8f972ae331a7ead77e6360d32a07c12435830f6d6c582b0826e64241a324413e7cd498b38dbefef8dac596719d445bf2a9996ab10cee8b384f882c156e59247f2f9efbc49330513e1df6b61fb20222da2841c020a8a60ac6649f5807b7890c53b09fdb368d606843598e62b57601bf91fec5c7f347509c44c0b898ab00a3241f249c4c4f54419c526aac30143896814c88f8ab94ee39952f73ca8ae235ac251f8d1760e97d40bc823565e189245e8731c99cf877bc0cdbe4e3f68270a4335f9363c81580bbf930cb7086f5dafc0cdaac8af3d233b99b2d1cd276e689b031ab92566a8587de6c426a7f9cd6513e18374be575c47598741d81452b10652562915256372d18cecfcdd067cd004bddccf1849b846bae9e6f4f55aaf6669626c4ef74cb23e028e767ac2474def7e2b1ffe30d13421fe0e2004e7fab82355c1cd6d73fd10dc7e932d3bef32b70f5bbea64bbb462cda93cae13c254331e9652b61d4b51420dcd1a3491c9634700403828645dc9eff36018ad4fec30193c1ac1fab12e03d85c46657fe11abab4b4b1a4f5201c3d9498052e5ae554d21854ea14161c5367303d03b29adfc37478577841ee51b90ec64703d1ec225e75100bb8cf8a7f2021086dd8912ba1350c9cc744857bfdfc09e7d4d624768d72eab65928c0436910a544e8bf8118d93616b03c80636190bef6998bf1d0abb9f1aa031a6e94a9b8a4126606f41148f31be3837d3efa207176aa6c63ef180fc1ec6e8973532ae7ede5201519e22beed58e055ad0fd207af04e37c0ed40a3ffd4f1b851c3a0823b62669335d8e9e9f162efd86111e994e6357db66c5f888297b354c3ec9a761258ed21bcc4f7d83a0a601f46f5d2314b44c6c261c798e802a9ccb0856655ea96616360a3d89ee057b9fcb0f0e48505e8ef0669e89eb143bd3266c6230cdc1a2fb724a7cc87d2d5edac572436c22ce6816dea436dfff3669e0558a90a0c14546754a72ffa3619f272bda7974c86316601a97080318793b5fae067fa452913b5486212f6b8d2ec53c885eeb505d1459929a9baebeb8185445e67aaf220ab15e8188643acc570e09205d2f1233ccb13b7ef94a55aaa226d5438a6339b2afb9e14d10b64a64e3b7b9630f757e6d854066282b25db01946593f16fe5b743764871c091a433296f706b44ab97a1a0b755ffc00a2af384e6440c2258d33f11885f442560a884647199ec34b0ee47e1ce7e41044488b414605ab685125a4f2da50a70e73b395eb767e6ecaa044486b3cd72be14d27de408990c99c53438ddedc623ba09698e7fabd7f0fab477b0f5d44aa7738c5ba021145cd0d99b9ca891ecf2e3abbde09f7315a2c0b3d51d103e69261285e7d391ace595a4dd130c264b0a608904f389e6c0787ae71332fd7c7fc5943ca2b98f861c467e7bc517871b9a42de1683978c90e602dbdacbb5b5ad02fa2df31c7c7a50f83a9f5566bf26687a1aa49d2fb50d593795935c9540f15cc103756dc1093e79ca5de159d5a226c50686a40a35e19731296a6be8c808bc447d20cc389ba245ace28e0948e60e3024d6ef858ed3d0a1ba18a5373b90583ef7a4738e512c7f64146cdee440810532bce069d63e317bcead1adae1ef912acc720abff667b1c8631e6d798eaa51c3883a78a61b5dae17248f2edde92c22c9eea7ec3bb0c3f8d9d9cced7890d6e8a706950891ddbdd09780f1fe8cefa540af291a646a46360f57906c9cde32311a83269b4106c64aa8b1ce350c2199fa0d353be3ba41e47ad173fa6a98dc765694939616ce56da7e3e3ee182ed3dcb9afed410f30d1426803e8a24d4cb0761b79bef18637982974e303aee6bf4a8f9805f1c9e606e7a723dcafa7d8b7be398f1548d90eb244bf379aa8bdcef802af2ce777d494deb2f1bf0860b6ffeec8e5374fcc7240a22d351a55ff3ea193fbb6dd2af0b91d842d5f4aa0dcd5904ad9e4ab89ae9d70e98896267b51f87779dec0e4dc51d8f893ff1b80dcbead8def971f1b193d55f514d1f5e54b680542648428bd06b47461c12063272b498a4919a8e5c90f8c051bd1055345dc164b97ea33715668f5dbfeff934ef2b4a62c44d6c60b497a614bcd6df20dcca1a23af93512707a81f7a550322ae8b734cc3585fa9185ee81a1e67281bd430c638f20b81624dff320dad5ae20a0b8651972ba263a6cb4f3581aec95c9c8af1159f3bc0c6b70c6bcc9c939b51800d1ab09f1ef524f320560e0f6503e645d855232c7fab30d873aed6e526a58d47797f85d5524134dc4ad2a32027e165c2dc3698e0b3d427e02492f774b569373fe0f2fe200d1727a908968cfa53d22e0f620fff46a14919bb391b594894ec6fe8ec0eae3a695b39661139f2eb1aa22bd8aef38fb16d401eea1149c5da2340e0d2ac67dbaca984230b173120be04adc26938e933b971be79746641bb1dd8481d6a221fd28c1e6b84c2325c7f9e2c5e30a80441614cc1b5a1d35536f283904d28c3ff33d3cfccc0bae738adb53817a0c203a938d03f45e95a9207b9b396d421a22763507c6bb070a8b051acb1072dbe6bebf31f7707ccd99fcb171124c640d3df9a11f3e08b28200521007224d300db92150d953e7e9679b187e41c24728b6c228e0f0faf4c3af0dc330481151bef0fb407edf6b557e1d5437f9df6e090cc8ec73196eaefcea2d25f3392c4d263c41fc4fc7ce0f2dffa706f0938085a11fa646c75854f072eed0c5281efcb94d4b29ff967c50ccbd44d14ba29bc8ae4bdf0609d2e2c364f7df162bdde8e408f279514830610c391528fc11061d6a3c8abd6a288d538a7d8b78495547fa452bfc27a17021d15947abe07079cd64e8716b3d90caf23629af0e23dcf3b0a21be900a3a15178be54d40e00a982e2f5dd7d70ec202f1e77044df64640f5a10a356f714b57b8e8cb2de1df0e82a21a79570dd3ac40942acb1593592ce23ccf1834c622b0c70366522ade85612e5be99efd0f4bbed686760b7fa8bb684e362836490a1eeb3297f94e74f47b07d7314543370129026bae7fa244d3c1c3fd1f185e9396382ce1b8bc1e6902bd7850178cf405d48ed50851a392faf618ae1d4538e4288a18828cd5816b32f23d33b86c5189d362ee726e9d465932ac72f22bb4c30898d3ae6c9d57d4c6ba46e4dc2cea145e129481390a0f50e1450784ed1064c5224a0cc3a6d55877022568dcf8b3f41c2dd76468a240556d68c2938240b801f3b2ce624591edcde940114838325b240032b73a0fdb1c0ef7ec7bb00f13d0c2459152801305eab725eccb3391e778c2d7a1eee9b161ae28443d1c6c7d4c13053bd9782fa3f2c01b91d042617aad81a1c6845f950073c714e2ebf7b645e1a90745a7c9abfa9ee4fcbbbd37b4f9072c8b8135ca27c170677d0cd8dcb096d4e4743cb023bdc2b7b1a3ab8052875043ddb08b25ea8b1a429bd012caf6f99fca7442eb60a9b0bfa4498c70ebf7c1df7bc3f674742d338021ff1c7d9182298d60c1da6bb2283709fc3b5332e89c521b8ed8a83301cccc670458e427c20a1532ebc1314b4001487bc4391c20dc04585c9f8ab90742f845cde27f0799bf0b446316fe2b27d29d85c081b410309675cebc61c6e651b8d11c73e8b4ca97435a51e5cc5f4515b6e331ded9b8b6a5e5fa960b7c02b968a83cee0bf33b0e78f3d39c72c10e20ddcabd758eb08f2a167c1de10f70289e26708fc257a90d6941435385f3e643c5a7890f7f27d0a0cb6738f3b80ddae380b53858b41e71e0451aa135d1a16cf26c2badcfef89c75adaa1c385f4db3acebf00476703e92cc2e15bf02dc18f1d4a97df4cce5c51bdaeb871b0f9b10a7e8842ba32e3cab45e71083ae88f2d2b4585423364ea0c0135d5ff6f120d1debff8966c1919c390e3922ca323f160e676fe9005db4c81bc81c1f094a22e9f04954ea7f44ff38c6b19b64f9199e082e84ae18a3c2e1f7c8ff873516d382b6dfd6a8aa07173bb7685664c308152e26b84a838d74c0b41582f2722dc1532e147feefe724baa04642b384ffef511ad1f9e3bd31987964148b6619647fe10a5cc2c33e469b79a55d5fb8d57cef34d3ba4445d701108d1c9977eaeadcf8f1165e111d1e441f77c38629596aaa97db17952e9af73ef49409bff0d588e97e4a3ecb229d7a3a951c00167226e64f1edd719cb21b3faab93b017f3c3297553ddf833c3b9db9ff32a0ab599a164fa74425b2dfcd3c07650a362df9c252be59bb6b582fd867cb68e53141e8b8c6e5e7955a8fe8039a1306bb5d1e8e82c82ff5717ed8ad65456ee26991310cc3459f44fcaa82d0e1dd4ed15e93f28553a474efe83e0eb5c6d800cbf0d27ad520b48926daa29f5c4a94a8fafe9238fac31bd05c6c3126eb4bd8fc761a712c754f27887f54a8f546edae7b99e85a9ee1f1278ca88fa576aeeac4cba101f3b8be68c43f374fee1957d2fbd946f9203334c1fe845a2dedf40ce077571e92c06a571e38cc9843a0e2d81dfb72e2affd13abc1adbe59da3f9f65b03f866b27c168aa045540c2a6fb00d0bf2e6e67872133d4ea5af7c206fdd3930398eb65b98a26c8878f856c1c4f9a4377767e32e665f99797a617784a8432351f2b053ce6aa1a1eab752dfc56b0fd413acf48efdf19549e80688cb2f55ab222273f7d85b3633d56e072160d5202df7348de13f5a7e485a9d4973e518d8f15fa0b090e214970e46c1669d1ec0fba48c9498e20728756bb4151df1044b7f9063c88113132ac016017c2825984297695db30fe422e0b4ecb784a0cf234dd530b385b3f889d4f03938db0b04641d45f746fddad7894156d03b949808f04a3ed0593584a94d004f1858aa9908c720060473d462841b7daacab876741eba3ae7952bda29b44bf987164e05508fe0f7e4a5c9fb0cbe11ad2c06d30892fb74ef0008341c1415bdfe2dfaa52c190a5217d9a3d0418521d5a02cc0878b7c3bbdd5d1a93bd0cca63ec4e196ec909bccca1a791c8437368dd0f26f8368be5164d9ffc495ccb4d3cbac040bba30486d8c4a415c1e7cd053e9688843f817393c1f2c2029029c7c9508d70f82c64e86b972262908ba30a040c3decef16a797d69a3fe89efbc06320e91bb9f6db3dd7defcb8902e029beeee9f081275ea82e88a2401e529a4cda78ce32965b3f3ba64da14655b6725f3e92dee39e171c9c05eee486a0b971b12dd408ec7efd6033f22d3bffe875c3eefe9f0d5b478fc1cc111a4397c7bd92c284d2ac44abe8d9a1cb0f3bfeab315976995c56d6a39f4fd806e068140884cdfde50501adf9d00dff533b14ba273da2b31fab317ac174def4dc57556cf7921caff733f080327ad36cacd5e1a068c0a8b48002a4b8e4debc8c58f7d24fc804aba91402f747211af62170cf8e5b7d8caa3edceec3e44124b0dfb0d0394331cba99ec344cf2e47ca3391ab5076af2ea320f765a4c04c56d56f00e58479441752e26dae2d37861716220f73026645dab2c68570a039540bd7ac8360a091f99273d9346e0ceee49e731015c6bc381496bd830714dac4d1b4253aa533577d134f49cd231fa522704b5011d06e71713d2fde8f307b4e077a94103ca230806347c640444860630b18f44f034bd65186290e9352b0a157a8e2450fd575ff48104f8a30975e0445b6b68c68eb08dcb8b19300c3a01a79650469f29b8653fbea0c954e3d591d15712ae1a015688710e7120359e094cf18d4bc5299840bf6a58a80717daa19a1944eb4bc923329d92550bc79e5802cb4d1d300ca9abe8ec99868dabfb9ed150d93e2b5345696be4de50052a35b3e2396efefc12c50799e1298c29a7e7d67a9df51179db2f19a926854bf7c42fec93a275dbd80edf4b8acb0cd35603e1fd4b540346a1a81d363aa8df80b2d283e64018efc08f3d3af5dd11355426d014a2ac9f4ea4c54ca8c440adf0578fab9fabf955ca16bd054e7de6bfce1b29e6b21ed290300114bd0c2404966914d696ac5f238389af9e7a22ec20d341518a063dbb2703c786d0d8e46bbdd21a349be27bfde0f31ea77d8e9f97acc4f7e35485e285cafa8a825e1d4befe43959054b4f0b462525bfadb667e675accf11fb3151d753b729ef48b40f256323600bcf53d4f4d0ac28689cbfa8205cf97524f3fb1f4fdfcb1f12e1badc02d796c3645771699551260e5d173fe241f7a572b0035339e13942bee08c0ee07cf1fde6b4066cf471268dc90d1d3236ea709a19382dbecbbd5bb731781b6c6873e99f0735bcb61a911b475a06e325d0845552411a8eb89cb499f49a48baae83bb471fa617977c9f40daf71238bf1abb41ebc015b3fa0f818e6203c1f2aacd9427d3ab207fd56f5038b858429f0ab556c94035c9488284d08a78fb150910729f3711aa360adb29db85eaefe8c596a61020eccc7ff17cadd054e621a87afbad11f87709c77472240e3176ce1579dbd9920883dbde10b70f8d180205dc10dec95414c4fc7340d52d8945eeea3ed08806e5441e2a0ca6546e6cccc104432153d67792498a678ab0d511b325050d691e767a16642d243fe54bdbf6585e14cdb29b571820b8b705ddc7a3e1de5ae16a98c9020fff0386582e70393233e5bdea631a28d47c7190611bb11e0e634c651e1078a4760c624babfe3a6b394b923b8060d9a7e479d47f88d8c754411f2efced384c34bd13dde13493b74926bfa69f22e156406159fb36c6e1bb668202ca62f772f2d077868d44aee23bd4a1a2498af8b38874523367d957bed2e9ceec8c28e14bd43bebeecfc207c0c1d2ca5b4effc7421e890ede6ca22cddf3683cc68e64a1b2dd696357cb5379c2dc56e5bb658a5ed9dcb9f0fdc5896a704e0a3a16a5ddb29e8922ba0ecc217481d312bd686440f69740a342140ef1e3827dc490f5a0075c431619c2c81b21b3e68f13372bbf9eb3c83b1b0f529455a0e8afcebf3665cd2c7bcc882ef7aa02bd26d97fdca88ef089b9a30c5a7ba9179e8af2b4d58f5075df584d10d0c9722b83984cdb5996dd00a231c130f1614b044b9d38ec58ede7d993e507f0deda011a9d49943f81cffba678f403078470089e669631b65ab790202e7d616030d00400e48387a479fe0c270b1bf3e245af889c7a5f464c36efe63beb85c354e329786a095541c3a87407e82bded3ff8f5545d5b15fd8199fc9942b7e3ff704bb60ea3fb5012027ebee2dc645e16017de79dde8d2fdc3451d0c4963a0242043b161b479cdc4e9c9c69b815a220abc9133a74ad47077486e240b26fd4ef5ea014ae8200d33d10a5aea61bbd5df2943640cd8be40e13c0617d309771b8ac56a5fc40d4d2b92ae4dd2bf6f4a0912a761daba652bed351c7f7fb77d9015cfc0d11ff16c6e7d56e994b9d3e9b9a535397520b7b7eab3536b8ede81af676206228703101126ca3856f6d15d37a5cdc8c60778a16ef25489646f0b9cfc01adc5e590edca0bd94b65e8193873f502fc8ace70d48dc73c48dc356bf05801b1ac67ee81775cb9c6d405490dba3dced9b8a3392e0994332648f7f8c76830ccb6089dd890192c23655badc4ba3ee73e1ed4138a03da94fde87c24721fbc46edcf42f087d9f57403818c5016844ac6f3af66455b24cdcd8b7d9fa8d211ab6e78ac914cb249e91087133a0d9d0ea77a3da7d507a1112531e33337c34d2b0da4134feab903e33d7c536b43b1ec6d3750512b7a85832641aeed96d511df3a30dd4652ff20deec72bdf1cf8e8ba7838add156d5303ca1470ace055c263ef6ae300b1385e8fb9cf1c310e33ba941b1f8ff86f1aecce5be806185c73b52316315d3cde00fd9909649848bf3b2b11234bed850b286776e0a608a2b0b198f40320c8b14c7707675bb6bc8fddf39153d024120afdbe88164384576c705d2a1efe50609b7214b2684e8d22129c547daced52ee9d83bb5172698233b91c0215990880a3fbb4ec4a45c205a347c3b5d29ca45ac69ce7805270e3e689adcf9e96ad325f00aa90869e41804fb05873f1cc2aeb0f0df693001ed075465fcf042e2afee73f2bc133be8bd2c63533f1f31018870e66b17dd45beda74b0ad8419caee28399c7c88eedfbfaf01e3dd37a1f513867f75b9b54edf52c36980214206d8f01a87f60524ff51c012c2882c1f5625a9bfaddd4cdd2be07dfd7f55cbc22608205be56b434cfd26330ae385283d5d1f10be545778184c74a77d035211dcb0b42ed8f444c8442fbf332b9e5c1134bd773c105ccff556b52268fdef9afc654933abbaadac760434eee14e4030d909c1d91a330c5136afdf420faa09db4fdd2d77ffe89fbffd5bc87dba1752fb82eb61c17adddac016b2ea3fdf6a99ad25fd81d302b472d200acd436875cc3596603bcaab41a07c1c2b374241b32f37827cdf8bdfbf14cb336935437ab08e718872fb036ea0d913fc32d3d9d6e56661a539d4daa8e1ad4ea7c95c032391f5a4158dc32a59f5d2bf0fd88c58ade5826db1dd8135094468e6f1ac36c08d3ed9ce2c958e6ac81f1fd3e2296eb1d9fc882ea6e1f6ad0b128c11fbe9299730ad198a31e395d43adf92e324d5cf4fd141b16e697c14c43fbf6d22be6349836612e770ee0f70756f9092707c3a5b4274027289ca82951b560946ae6e80b3ecde60b194f5c2ff292b1d0bd986c0ffd96e5350597a2c40be8f24020549ad8705b2c0460a1c533d512c3138a4f846473f93c888708d591d14d94cb94750190ecc3f17aad80a424075ca435888e14d2b60ad8491135eba76b1e7daa6ec87b8f19e597b8b1f78719444723759f2a608cf3ec59b8b7584653e3311fced03fc61805884b3d0606a618383d5145e9a30c085d9d482baffc3476131f933b63a1b88f8f7104667d2b28457c42fdc34ff23e23e36dbf1103deaa1111b72e6832a3461ce17cd020d64809b526ead509f9588addb2b8ffe9eb51bf8b0786f6e0a6da650f6960b129f001a69bd499538ee0ebed6cb585d9eb1d56ad194736f3e21389089bfe72b2b1f31d37541ec2bbded7452fc083413631def304422655986ecac19555c224b1b1b7c0722ad379d7e7e15a8d916676e70ccb41c78c22b6c69065e78be41f532bcf7b204f8e9802a70930cd24576be5c0dc89e5c23d55b141318b71d4eb9ce369c8fffe5ec01826c2904ffc53e8d46a471c800274a29149b6086fa8d8c1a0c397ed685282843fc4a35f491f70a9dffe2c4f8edaaa808d02d984c90c1dadc3aff9ebced30772c285393329ca4cb79a295ba6b1c4834dc2ba628f981f712acfd98d20dbfa1e97c5001995d001d8a840a60fb06f3d402b26309d51b538253fcf5f1ef25949c90890b847992d9aceed4d1522807f5dd539d902af9d13c1d4103cf72d45059d9af2a6a90139860d3e736c52c542303d7cefbc66797066a6a4532a2c812155619df5633875c325efe4a557772f023bb92ea72c4a44b12c1934a8c6e1af196ffc9d7a434f1457494e8a567fa012b7a592a9809af5dd51ea307495be4031196b6afbf47106e5b9b3073e2b4ccbea232a913d08382d63a0362f03c0307e581c927d8594d228c6b0a2748c5260c0cbd535685d3ac304a2cef59b8c0a12a7fd77be35276d30e11a0ffbc1f3d09aecd8d29f4f7a01cd0eacc2fb0c52fc250283f3e877bca7ac813560f84e2789df495dfff0e330cf9dc66431d3a1f9f3cae6091e8810224e08c3bcdc1278ff40f72904165d901bd470ab01347e797fe20b810d3aa208a426d4c0fd1a61c169bea1e10ae4465894bfe5274d4a858a170e572c9637688ab5adb641b96120d2616815f567631ae4971c8bef7ac1378651a227506047e9af2f32c1c48910f8a258e2ebbcd2058a9655bd56fac6381469715a67f8459c501379bb47d888ff8453b5ed1f76d7cc5adc030b1e81876806d4115af28210580ea51069906dbf3e40cec3925e0cf4afc5f76d88eaa3e2503468b46986aee7105029e98a02532fbd086819921c438d2db4bb193a5b054d91256336484a65c048584caee22f833e1421cce20b0e13dcf1f16927625c9fbd1cdf6bd5db47bbaff3b3c9989cec607ec3fa049e5e2c4c84a875e287f87b62843c37555294dfee16c9da0457d36f3b7a48d12d765620bc2462060efd479e5525616c990e54e3da3406dd3e0f7afa872ecc4d4f50ff09f798148ef4f5ce2d9dae0ac96520f091b5d5a3204c0502e14ac617c91c51027be55d2b96a1077739b8ef88b16848aeaef2ddae67058bf45f053f0138da7bc5c0b98a244d740f49c13f927675f5bf3bde3fe7ce502bda68096fe7e96f8b3b3be09bd30f7c9f4ea1f538dc3cd8bf2bc3536ff9d172ec4df0d0f796bf92c62ce3de1d395b397d623a5f2c6e07e9d55d8f73a1a8a021f4f7e7c098b7d7b5b69eb7944ff7248467918702efe0a4efe8a460b60eadd5dbc8a262c8f959a8460dcab2520a450b36818e1cca75890a177a64c1b86f276c137c533515076c411c6a1d11f7f0c049351a45be1857034b35b2b3978a44907485f9a4c1bd1837fc74f0774ce4c085c1162df02451b2483a9b3394d249c5c63b75e7258d02618484ad5673600a1f0a0c60d616e120d325bc599101138b4eec64804d33e1126029114a17a810ce98e0f34c07917c0521496419de8687fe8c886ab734ed040502c960ddb27285380c04607c03ecdc9413c2ba40955e58aae80547cc382b869d23f15ab07b8b29983ff8819616eaeff5ab8168bcef231435a772402240812153bc21769d1854d935a55014914119f74367aba18ee68cda88718f9ec49f74bc08be6ed85badf19948da9e891c1cc4412aa29a2f1b951a1c3ba42e702eaec1c855504b29fe874295afdb38342fae937404f58d3ba38fc3500b628fcefaeb44511390a0ae32e2283ee95a5c7a853ab759fb0f8c5c8ba8a7047c9f08311930f0c1e1c46d049bdf04f737161e1da288bb4def1f03684f963d0d5aafd790f674a72e4a94dd6adac625e67779defd5e828bd4e2cbeae9712d9b78214ad953c10f7b77bb21acbd400498ab6af7adefc7cca990aed5e9129a1c21518df1df3d2c262580d1e575bb37ccf354b8d104923ea88be44fecab0282e13d2858682124594ee5371ffe10ae4fc21c0805ad8329118354769b9710967315daef3c217cf2fb0328301cea49a352eb66c64a6503d3881993b42a9b62c8f5701bbf235e0053310ab64f38b507e41871f6089f4d558a58279e1a89baa6bec99223d982fefdac35d0ea42080d2b4714bd201b837220c4b819557953f4f7683a2db7e035771f05bbdd94fc2162dc3c330394fc75538275d3f9a658cfb99c9a4661e7e5024501616654de947a2d0617549085d1851bec328396f55c126a3b0fe6fd502e555d7e2805a62a51643e0d627eb47c3565142c1bf01424219279a0bcf6e7ecd9ffec13808edd86931c2f09e8f428e7988b0c2d7cd4c7a6d24204f675f723fd37fe723502d8ba0d2c09512c8d1f5f57314e41e7da7c4d9b6c24ed9d8bd0ea95002396fd0bcdf9cea01789f9a6f8d0b78da3b4eff744b2a6e10aa21bf8457a883863fdf1d65d5a1667a7aff59fe0e7a1488890740f797a9213e402b47711f95a82eaf7a5e89c0fbc42fa68c73cb83a285c181ac9ff3e3a086b0a8928dfe9e9f26aea0a4592aa33fbe835cddc47be8f2bd8a490ff650fd45d83d2405fd71c8a24bb56151c2c97837d6e6efb72f54c910d33d59650245566241a3f4b8272ba897949ee67c0af1390d3b47f4c9d5e3e86cdfe138a64cbe830e0bcbc0625e48f204292c6729bc1ffbf2384c37d8c16fbf0b336b30ecc78c23facd5560b2dbb610ff06362078d700ee66cf3013321d385a5254aff75b38f6ec958c43a5e2ff6039b67e1e6649b1e818060dae458b7fea82b1ac0898a289db506b2a4f66fea9be7e6c1af95e164dedde469578b6728ff369265a3e07d60b0d36af569fdbb9b0754796a793814618304d567fdf4dda3ba20162c4774769fcbe92495f029601d33350c9fa8f2d6ae92654d331b456e4a2818b30d62530a30fb5449bc13495612477091fbb9558b2ac1c5488fb4da526853e1a4a9baae968e4bf07809533d0beaefe5008246b4ae649d6e3f72400219605d5199f743a3a9983011ca6a1c4804127fbdd2596c981f3c2b43cdea466f66497f981888a497f827f02be17c0169da9613f23b524aedcb06c5c1921136276f6f6c1186196b567a929eab674adf6795bfc692a5e3b665a2da03df9ccb894f4f0b3bd6ffb639d70274bbad3d2177517ca0b2714a046e7e49ed118c869f152cd2baae5f692dfba7a07e80b8cae6da0c5dd8541d104a56ae90a72207f5145719c88cdd6e6337e4b8edb39cf10b0a01dc858e4de50a5455669447d96765ba47982330d834a1809d3a61ef7f1490c84f8ee55d4af9599d53b2180467e4a289a9acf550e497a47e71ea3141672e1a3ff3401841f4bdc1bbc62e3405a4666affd2c805dee24a1d5e4d5a7fdfa666867f3ceebfe78ce1a926447d15de689dc7c4fd614660dffa5ac982db37428de95af6c4317a7eea3c3d89179759a0814e19fa3e9d8de1cdf41a43e162c80712b5e47a4dec3a2b96aec3a45d17166ea24242249b48ab0904b145a71f39ba14b6b8fc2fdc66b045c407bec3af451ba77b0d520ce43261b95b34f42f413f4658f6f95fad04e71647e5017a4e08dd501849cd69cc961e242a6d496e48bb4561030c9e0e76d20d835626a3de74f5f9f26b9cddec9af5892612625189fbd21b7d9a48a961c26a7e9420c2e5b289c66f2bf2080db0c4282589ff17bc4ea612a2c3a52da8396787d71a0062c6c54186d199f235d98a96a317636cfdd31cdc6d51645a743b7e0509f587d828eceb349591951e049d077cf0ccebb31b0c3bbbb0091c049cf06bb5a881d4c68e1b7481b3aec93b2ba08d2b0c96da13cebc5a6849a83f8ba7b61d820b69f391481c24fa58192b8dc73b9caa715731037d913226f09242ff7a357e75e5696447590a2e191c1b51a08ee15b4e48a18d4138630765a7da5613bd8b7e4aeb38e91f225970ab5a7f004cd588842cd2ae191bd303f5fdef385feccd8ee713b43dc68434448e234eb9c3193e63efdc77af2c07151d26d0fcc102b3c15c40e85c5fc939bad9d617cd1f671793ffd8a0f3bc70cc2083c3775a2dbf6ef3cd92397319aa263101c0a5c582c0402b19710556302945fe2dcb910edb4eee09d387cb3acffa21045c9c6f136f33702adc147422d59049bb094fc3271b5699305af2e8d27ee5dd521e2dada916a607f237a2574bb404c4b29be8c88a157d96533b5e32610d61980f1c2c4839ff82f047544b4f98a5a144cf6d2eb8ce8e1843b112de12dfb6571ae1fe0e42a624ac51491a3dcc68a105f059575242e6166f0c018d91a9c88ea2d7b5522439cfd7a21429107b5d1989a10b72a5e0aafe364eb2d689cab1b690dd724bcec804d187859e977002e18975fb3d13a4be88dc0f818f0c21014af9ab66ccedb29740b6d47233f3419e008c577586f8313a38ad770bb684b9beb6f5f5779198be549d72ed3759d1944bf16993caf70ad22f119df3393b90210174ca727cd8a052791e78c66765b9bff7ce70ed10b19bb45198b62d10dbc0b69730cebc8656ac4cba319d4d9af85ac80ac83456c395ce0a582b70e49a5296b2b2d49177912a21c834ec703c81b17b70610c3848c83dfe3d81193f3b7e35086a4ae0d6f5f3086210a6c4ac70d946c8646f7855ebe1f02f272d2921934addb97ca854db09ecb607c9650dc615a49165e9357984dde4436ff96600c887212d342e55f5232c61aaaf43125a3a9a9cfb52d062340cc9baad7f3664b867acd1e891f203a3520a91ce7f5371eb89728e71c2977e243b4a011e4bdeeef627898adf186728da2b1f9be9938354500c84a7c6232e9e7b4df368a6f3f6779248b03baa8194fe49715a17b5c3ab797eaaf03ead0a92da8381c279bae8acbba02be800e81abb1c586845a1c3cfe0513a688ee8b774e95dc7988b53f97a8360a2394b28c8997faaef979b97a3c9719f57b6dc0917518aa57220aabb8e3a1ed5708f09a4df5341e7e79b703d595d81db8e5abcdd869962cf5e9b2b4e7b077db67e4f1efcf5ce82599d0a40a0b311873c72a2853f6707f1f20be872eedbddcd2e22d8c1e9bf8dcd79254948993dfeae8058849517459c1da16d846623548bf97d5d696af8bdc0b291f487a70434f6d94dbf9a5d0c13127f71ef07577026a1e0119d1605446abffcc53a045b49c837c08349187a6b22f667e7f34e2efacaab56aeb3d57708656497bb49e238539278857620522920674b5315c1ee9fe35b6879547d484a22b2969d22aa5e5cb5765e726052f0f945783381245c4a5cfd05bf39b7587755e548670439d29e1e7d3bc1647c4992f0b8cf5218f247bd8b5f5fad8fe2580b9c27e23629e35235c46541a6421a531ffb12088af0087401ab708b7b3ffc4ee229bc33261808e9da6a600aecc5eb3451192705776407fe9daa5b488c841b0b92dc369e798ee9751dffc1753a1d169b80e4b49d1b6111ace0d20e6bb0dc3fb24a09a99de86db468779e460347adfd04204b30e6f78010c2fdd7d1563b42ea3f315474f807b1b2ee89424c1c7cb8a1cbffabe83d46488175e944218a04d099db51709a7adc7f0b6eab5ead2eef51f6a30ffd0aa1f90712053be93a848d5a60177f2099bb96365086b0eb023cb6f324afd931a1d24d5b843fa0ae177fc286af452d8f916d3b9aa24ae51b0ebc99405d8d6cc9214bd954db30ae65bd86c2fbf407e661fe9507302b4ea5c5ff6d3f3ae801b92e257505558325d06ab3949db258a5a054c9520d22b22b5e0a5da479d5d94499e1e7f32a07912e0f2e1e73cdc0d94782202efa0bdf60721cc17d7dcc6683233d2746d3873ecc3c986f1e6b8301dd6287dfbcc905b04e4e0d29cf5c963014c5fdc8bcc2937af95bb7a7b7f262a284c0d59c0cfc2c88d23661c542482f68e7d723bf8cbf41555bbd2fb269ad7d0d17df58630cb03a6a7e0b0b6fb2ec935ef3f409e3d2e7b4b7042709d12381fd2109c0bf7364c9e9f797cff9353257a73b8f1c9e3f2d6e7e13cfa7a8f36d205c01a5d99c852b1c57565f64fe590bc5a3160d90c8141bc5cca32b3482231c4878a7b9de71ae7857765ff551401f81cb5be6469de481593fa519b301b9a6b2ee0a50ae58748dd4b3bbf09315ccd8df881322ed05988da3f6ec4929687428aabb260537e869466ded336e61a0be87d6c34b071372f5f069517af468e805a47f38f48144a0f2499545ad8f19e36684d9b400826ccb158a6eb4c2be6c4c9eabd0937ce73f99baa2128b034d394e69244d64637e1f5efcf3be515c606acb6fedd79d8b2531d236a1cb9a83b01521233b523f3fb5a56dc66bd40a3cdd3a9b247f28c42b31c164a04232c811a8c95ef38674dba740026a2f3c7d4da4c21240514718aa73bb088f9cb7826a7a4dbe72cbe49ea9846181f112c61de114868c50c70b1a56b68f103d18955c85a32a28f0eb9ed80472647cc4f25de499d61b9a5fb12083504a71d4542806cf2a7fd6735f45094de6b44cebee1231d764a09697aaff0d8b259ecdc9b4575009826269ed69939b0354ae14aca08c535cbd4dfe08b9230044a8d4a6366cac13723ce91a5cf50b8ac3274ee31dd16d5c0930cbf495a094814ce91ac4e2b19b2bc2620d3b0037ba989915d089339fd0fed473c95511610a1a7c976eb883a152c8f667e3603153e9c5357a4a4de1e8818fb1507dc76960baa5370c21719ddcd770707c3a7958f2b1f3e298691bf676c7a0061c4992adf77fe28d53064cd0c3888a858481a87d89ea4edd8c36a640ef87c372a52e9e853c1f59259087e7a3baace3dfd6cd0c1f081f6e8e1adb3bdbfffde6ae2a0d4b8aecbc8ae6fc9fe83a304b655ef8bbaaeb4b1ece6491c44fdfc9733c08d740a01075882d1eaa5aeabc05aa6577aef0116eca34b3e1ced5e662d0b79ffb9deb5d83973255e976ffb2a81befb51a8475b5b0edd5149c51fb2a7ee063e7ed1178947a3f9729675fa0aab071014201239db158fe056bb3e34ccd5af9e9ec81a6920b240a2c63c7ec1b9cf5615282ec6fb5eb6c6b40831f2e4990e897fef3d1d0a07a739ad07464efc6fa3f8ca9a5375c4daea4b1ad758c8d45a882753944d0c893e0caa55fe3a00ff2f763076c08243108b9b6f1f0e41620309525cf43953fbe056263df1fcf11bd06ffc824388ec584bd49414eea8ca4aaa699d18e82ffd5215f4c55b0b9a212eb2c93d71880ed5447c90061851f46d0aeb55a1ec4dc0720b92f91e8fcf731c1c415fbb96919f5d99c906233723d1173efc9a346e0f11975956bf2387933fbf732abe0d3a095e1191bbc939380e3c384a3733f5481faccc8a81e0133f356317a0cf0cd20c15dfd25cc993b96a942a7ce90e338aa51f7c5bd280f2b3c982dc5258b37ca7ee23be4302c2b9b90576f4f495b46a5aaabe688e79ce70dc2468ba64901985589fc3422843bd7c4f0b78b56113a8eed389485d605e3df107aeb77dc42cbab641ea66b460b12c2946e5d5ba9af5e51e130908efc8ebebc776378405c33247c30285e605a66da7854834311be1d0b508f21db9766b0dbc8b92342075e0390d75964c8ee2cf38e19b0f96ebff928c10af5b7c358acb18cd0cf65c2f07aa2e77d56a9b6f71ecfad343463e875651ec9bbefc86c1ee59e6941a2292098c854ba2cc6a0cdebc80e01a462dd412fd977743d556ea4226a7c4416a45809c0fad55ea9fa38f944cb2d52832d0f7243bb2b523ec38891a14cb5a1392044d71e859e50383cd850979c35155c7ce01ced8dec8615fcf20767a8b8346de9dbe978e0cc63051b6be72c89a488025c6442552df2c20db1518be4279548f319bc178f591c800988c493fade7abc8b3953216dd12d58d4b5cc1369400a60651586beeec192ba9c95e5ac2b86b9315a3f4bc588f0aae42fcc5dbb8c20d505471b0e861be1b9fd33fbc5848f6d1d2e8c4f38f96b7e597ef9b601cbffe809631c1cc3f686a83cbe7d15a7af982bded1e9342958e56d8b42021f02895d52ba86317928e01fdcae84110c785604f011e0d3fdabf4dbf7c6220634f7e7a5d4e507d79414326da7567a7e246b28c4997b65a6254b0b2608cc1c5915e99e2a3972031254a8b673e8a12972bc15d6fe3ef4f2ed929f16286f06976ae3d03a20c10d821b398deee66fa16d838dab9e582529668cde72b13a7be3b594cefb47a2632c7505d32776aa78d84ccadb9d5d090314bae44bc1c10f0eca9d2dac77f08712a49dd2383e1ca4c7eafa354846101fb876e6068f00190d39878dddce6959e455830e05fcac1be5599d3c3a5a4dda91dec37beefc6a7462975c0cf302dd5141e2fb5017a54118c152eb822484230880344bac4d1ce6ad5121ee0d9c5f1146f159a0cc433a24ed478b4554f1d9efbb122bfc03059b03b87cb815c89293e1063fb21ab3c83b49c643409094be68e084d4d8a2cc58ed2a0fca6af9421d16b103c892dd43a41d33dd18d68831975f369e766186a2ced63a7dcdbcf47100df1f98ed0140d946b28ed3654cf3b1cdba4f0e07e2932b6b10c9ef2b8fb3c6d01b0f840d2715d90008f9c0f30fab068409312a8578d2062b1e933702bc085ddee30bba042d93e9a95e6f320b365ce451723580874eeb31bfb9def014787e96ac2120c730ec95f13b8f63bb9af2dccdc21938bc1b0e24dacdc7ce30b3ca688665fc1b68f3f3af7377bd5a86611a073010588a4ab9d23afa199b66f7e0a85f333028749775deda278d84246b681bbf9f59af6c93c552e8f666653129c781f34efa0b8515c8b0cb5b05a43a1039217fbc75d3ceda6b19121382256f58fd88f4a67e2fdb2dc10a6dfa1cb976f313f79dc80c66fb672b89137b9bac937bedac45444d8330ba4e9b59569aef83df01cf65d84520262a7bcbb2802a2f634a928c2f7d634fa80069a5768aa0d54b0691941d76a616f26535448ab11a45b49959602ccaed9806170a7af57cf649df5bbe5cf67c905d89084e48e31aa189af0462027079727b8de519b4403363d0299b84e95a9cebf06a23cc3821d8b71222e05cc168564e3c0278f2097fab095d7a2ded0e57ddbc69ca5029229f305c3e74c6c986fb855682464b46264b9d6e29c1f62d6e0b4f1334c8b7c1fa125321eb22bf01a601b664846e41da6a2f0bd7045dc99ab37439113f103464dfed1ccbd0b21c12008664b45d9d3c2741c45544e3709e59714f92b4e64cc723a9c42fec282a30e10333c0517435c94c98e2e991a107d0e10bd49f482618105eb3707615be5168b5e768f26da75af8b8edca3f731b39b7b7d95d705216576caa88a842fbd952c3c050c36ac3cfe1fea4fee1e0c2dad868896e8017e730474689782461ffeea45350aa85a296bed8c754c1f33bcae140e9e401793854a3f3272df4c38468026398ed83ab43253857a5f908aa42fe699da16074643c59ac9abd645f6ce56ffd387ce9425bbdd0904eb964535ef0264baa96a761127d9661fa9656b01dcedca5403684017c3cea522b9d0d7d2c1c5ce6705b3a229ea397ebbb6e739db9a633bba95245b066d97817abb59f1a2d0ae3660624a7546bdfdc595f569eff56a9092f91fb0174d3668c82cd6b7bd000b459b6e85525a13051fe79d9600a65076e8e6e8401a09f84d98a892cea509dbcc49dff007165c56a9a3dec4a836ae8cfe3a79d75cb9ea42c86cdbc65a02395f28d9c40d4af37c7fb230f89c4c7214e0ca64ef3dc8a1d018585af8cd37f1b3d02133d6fe80bcec3dd2e46bae80d079e19905d57755c19ef48fa631cd0ca9dff2ce59c3fbd106371b739ae23c11d2e4b5050df3aa57bc3ab110091e8f197d7ea7f982d7b6de1431ba17c016eb5c90c6488ef4af55d1c8e90b036442567f88cc22f09456b5392c1a01d7906f9c1ba1c60d56b02c32604b171d78d18a66c427a762bf343848bb470418517214a4955021b896f5c2491aa420e10ddd79d73504d43dc7f3d3a7cad4ee8800b79799c5087280eaf581739782871d9bd011e1bb99e680c12fc8ce5ec622805e369b70f9d3fbde89356f20134208bcc53f5685defc85562ccc6ef8e563512e2ef3903f69b351b27917cd40cb4755cc025b63e8ce8a119934ddb1a05f892de3104bc0eea57a79a1d11fd8793d3402519bcd547ac86d5d08844c8e0e06ed90712219973299ec61efbaf47fa228b9c3ac73ef0bdf392e8af9da1670deba8422424c79a1d409a36a7b5631d6ef8ea610f8aba85ef148444033a63aa785b4094aa4d0739ee113297af9f2e38a86863c0cda75e0178488e1f0af10ad4547106f833c1a240e531c6992493711981d1e786d5bb9f038b3ecc0152d0ada8e31e942f0cf0f417d8b27dbbb0bf8645bf6da146f6de5bee2d534a32054e078807ad07718a24a8ac4e35d890ad5c2724f16d609dd60909e8434a2ac2a836451c164631aabb4afadbe7234eb348ae7bd187c34518c544b606abf2a35fc832a8f20bb9882abf9083a85272922a9f3f10f83ccc0ba0e7e76f06ee41bf357e20f0f98e430f0a7d91089e91118741c94c8441f99dc738f2b767148392816022aa7c54957cc3a07c94a6dafc460b74aa7cb95ba37ddc9af91b72010db787046ddaeee9913df263116bda45011424a821e2a0ca88a4ca288320629129a3922a5feb9edb1a8ebb491fd07d7ff4f33131a01f81bc18d087a32a3f21ce3ffe9a27ebf4d644450b448a68f71702912306e5279f3f0fd8bebf180643dc4fcea344a0dc73fbf984b6aded8d4031557eb42f8c55fbeedbd35a7eac1f2fd6ee38d73caff2734413f6f9781269665f3857850a848cb0a68e6643bc21fa5603ce9f8badaab2732754c3f6c5438119ff971656c365c35b0cfa8750347ec8ad17f8b7cf33910b28260cd66d07872b843455fe9c916767fca59cdba679231fcc495af94b7630420d294fab9670fb589123682806b3f9412c0aaaf1bbade91ac3007c386afcc21b996a0a6e65c29943fb3db0f2639135813df3636b961475d8247caa8c32a832161183a8f243435019b8d41f8cf6fbe30330fdec829c1ab20b722ae8e9b603560ff2baf6a674f9fdf24340d0fe8ffb42fa759f03b804b37dac9c17b37924d233287f7a320ccafdd495228723d5bfe652f693cae0fd588382200fc8034a1918940c4a1918949fede0035cc23e199647062eedcc9947904740df7de8b7080d252a74048d01ddfd843c1e1bacc973a4aa4ae984d74da7ca28a5942fa5941fca9b2a41f2773048bebbfc8c8aadd9ce932829a87f2851b2c89a24a84a9632a892ca223a88aacadc89e0541c4911aab81a341c3915479286a7e169c8849a4d6d7742e3735c435f42b71a3acd872a7c0e92cc8a67fa99b009a45101ccf132a4981ac61583bf42634d31f44c89bf68258b2d816a7f64b2355ef9b78f44060d8217b5579f2bdb75615b118cdd22b268408eab8c0a30079762ed975fdc00cf740c0cf6c715c715a80d1ac6d59cab5e31d831b256d90e58f1f402bf7f51090de36aa5f9dc69a96a485b3b2f43f384e30f05424b58c2129670920f033d223f77118b7e6ddac3aff77500f300b4a6ee57f7a37b94deead89f8f4d4d7482b3fbca259a67accd2c622ca574d17159b9b06abbecd47ed9acad5e6c466bacea8b2455d6d025874b61a693e2521872d9e18cb87811a45d9ee096d09943d0d02515b2d953d7900d162c2d2b389d26aecf95e9c453a6d3335750fed025f5a2e3927299c19a3e5b13ab73fc7c2e337091a287bfd0c58957fc42171bb88484d4eed4ea4883862cadda5cceea68cd25a569fe2e2997255c5a2e52d8246d5c923869856c5c9460d97481225ff318b2d1417129e47242414244a2c70fead91a1d6ea74d2e35d81997d40a60d0680156f13da8cde9b8e8a036a753b52f7411c300994bca25555d74a48bc7e5845e6c382170f2f7e448688c359e78f4d4170f0fcb8d1323aa2f9620a20746aaa8ee921edcd425402a3192d455854184a6ae2a0c226a2894a186daff2055fad88786ecc343d334eeb70f79b12e97247dfae204a5bfbfb487fc1008d36f54b9ef2ab77db6d14de46d0d79b1723faa1d9bfc4443bfcf6d89d2d73e3d486063638343a59f8b72a0b16a8f711efd0d7994d2fdf0a0f43f3c44cf7527f2b40f79f497f364e5360ff414f4a19fcf711f1e73034dd03743df323843212f9ca18f1f1e30a1ef0559e9d3177da2a7def460e8c74a7ff340de11960f867eda0707b41379b1863c10cc173d17f234fa212f9c55f3b8e9710d41ac212814480d41ffa3abf42797b20f3df6ee516f2bfd3a06f7073424d598df3a6ec411a92110aea1e7bef3f8c3a37bfac138602bfd16b6d20f46f4337c38ac501817e8cfa73f5ff4dbdf50b5077921900afa9017c61a7a11f538ee42dee7f703fa1d1cf26ea820ef47573f5fb7432c00f79a177ae57e47efe0ce5b06b9c4a5ed4715c364b8cfb7ecb5e7626758c79f1cfa257efc44209eb29d6c277382ff841344a230db7122186c9c8ddb20ff1c08069bbfb05f47e4d73c3d13b6cbb5353c432e97941b2eadc904d71456b6d357786c5040bcb21d2e85345371290c654f644a42998bcf2082f6ef8d1cd6134470739b676bb647acacd5d1b3679abd6c75f4cbdadf5a98325653e1d2aa9abc6a7f2b48ed7eb984a8a1df04f9a8b44852639835948e52c39652b7869f63cf80f9a30bee4c83a086ea150424a89e469cbb433972e478d3cb3e1864ecdb47f7f7c3c020f7ca0ff77dac5781656d05b8b41f6ff615e8676f1f1568ec5b81a6b9bbbb979b9b8bc0cdf7628d3dc48f5e883d7ffc48db87747eb83df6336c7f44fb65d01ffb648f8debf61d41fd88a9e6c9f04c3ffdeccb413bd68de351bc05315cf2f78f1ec9091a7f670776638c31464dd334ede3b66d9ab67da1f6db73da16e316372dc6eeee66c36d62c01c342008e658ef4953d0102435751ecedd7df2cc66cf4cd3cc6e681b224733469565685450d190864605368d4ebd83d97bd00634fef66c17b732fde9a1eb0a67ed0af8d8a131f49cbd72b20158f46a7564c1711b43c590494854aa0b798486239984447121b9905cb04ae53a3af283e5e44c29041af64ddf4821700ee7f0f0e8f4f4c4ba1f1e5208349c73466c092751343e179242689c1f29c4a3518cf9b42071e0e2fb73214927b63e4e984bd88f5623d60e68e8a11f68385a71464509834ea98a41974568485574a5622f7b79590f832f5dab1515c0388423d60e96445eaf9ef1cf5ed844d13073c2a0b7aa3f334143ce49e5580c66ad393d6331a8d5112b7a3047b6cfbe9fe315c81d46ac51cbc553dddbd3688b1117cec3c7e8a667fc376f84d333feed654fd09bea2db7994374ad51fc50a03fcba4a021246874ee15b5a021a77a557f4ed5a6f8fedc6a6bacd81af9fe1cab4d194b455ded3ed0ad612aa4293466b4e219ffb0eba0b0ffece828c603a9e8a8a77a387ad5d18a1f7baa6a13f78d563de3bff117cef9a9ea8e56a31597bafa8f98702973c2a0ff68c5259652bd358252fd69e675adf6f76cca4b1dad98069406a7c147abeca533472b3984eeac0eff5e3955f58cbf0a86071a8e56aaea3285ea3fbfea8ff99c9476c6eaee248a0aa1ecde491550f9dcca8deca0b927c776577bcc0b7f681af63b18c4a2a41418e1688bea591db1aa87590dbb56f59741e8ce5f1d4e228d9888c0a023d668151242e387a3558ccdcb116e6578fba6713aa753ade9a23ca41768b3af54746dcfb4a128d2cde38039383145f30279de456a5116cd0add28d2f7cac3a0f167dfc470858c5b9cc3fbc23887a75392c73dea489ceec198c5a7e8c93032543c454f03f56a75c48f9f29dc9ed4d8ddf83a4fa8bad08b869edaf155f525fc890862d1d0534e7c8b3579103b6383357d56d948650fe2c90a5654a691a2ba13957142ae861e44e5946421c2ac8b98d0fd1cb0233484869efa14834b30c8aed053ae837dee2bef62a4781c53a833e1526a629f7da951ed2f85fdb29c547657e5f86d751e34cc27ed5cf4e2ca911bd41024af13d742ca70e2e6c479c499e2879e1327af48b9784e1cd652a20aeac4655634c941eac4cd0e4915d5090686ee82d545ead4dff60cef6ecb840723784ed159090e043de4f3f7f01efeb1d741e10db5de10e305a4440182390a81c6df6e66fe3c0f7dca60e9c18af7ee6eaf826e1363bc76570cd4b6d862b2e5fcdb98d4613f67ce811052aff8aafdfa54fefab53ae27f5c743f73a5b8fd95e911cfc48f1dafe87e48a30f1b7f77f6ddab48bf581d18f6cc7b52c5c822846efc361603c1d1f097237128dc091a2f3f822371278ec491b81387c2a1702338147e0437428f6710a4a19191891d819e9352feb4c0a31a468f8961fe16ba475c1dee2308d5a10559f9b985afc33e2d6012071ae3078715cacff1d323bca1720b73a706e297677012c37c7db35d2cfbf57ec497bbbf96caf65cd97ef38064803a6b1e10d600ed5cf5030c46d7646cc8038ee0a288114e48c13172460d49468048c2430b0b29372083085a182948b5681acc476ed0284910018a22a87001146490b164082dac9e358e14016709393c9f23a891460f4aacaef062cd18b9b377ef2ac075a8cc472a1307c2122492ec08c1c50f7c3885b47a193524557715aa3f0bfbae0a42aafa18dc035d056c39d4ca37e03adb1c0c82ddbd9fcc19743f16a19d15bab1633066d9fa8f2ec676d13041b1ba2a284e94a0a0251c9228ba1f2877033194b80225896d099d755550600006e82ed3dd8d49c6dabbddd77d334c66187bbb77776b2ef213dabb7dbbbdbfe69f53bab3bb3befee3a80c1edeef66ac60283fbfe3d0036237591492c9398ecc0c8366dfaa6cd4c82de9ad7d33377776d76d632759bbb3decb21dd0d8eedd340c7eddeab2d47da95bb7bdbbbd63c750a563984f20d28acc867ae06062f56a7f0422ab7f63b51febc0ee0b6f89c9b9bb32cedd53ba6f5d7c1efeed855d8e0ecbd4e8d576c340dd07f4e99a6cd1644ad904c3b0d9750c8934b5265846837ed1b61a390d8b71f3884da009f60102b732bd18a8fb80bc4f17b78e93a151818666c76705065798b3f36454da8a152bd77ddd397afb807187f4316c1f17be7e66d731249226b56e99ecf3de88411aa578f708d56943b3cf0b73a34c29fb30c70bf73e3a6edbb6b176766adce99dc6be27f7edead0b6afe58e0e346218b631c88c38dd73400448a264309f004149e5cf3e3cd801537ea0c2065d98a1841064643a90d1fb832a95dfe58d4f0d55a8417238124bee2c3f9052390a1de808edf40f825404d4ee700895269018c2c80e7690a2e5c0437ce22ac9684b683a9666858a6b45f9618e48ab6d5b556eae403d51014ae7090f3eb06085cd939c223a4f90ecc0f344072c60010bd693253db0b06a3d0163080b57f08c48314e439140e30228d8e0a25059a4864f73a8fb5043fa6408d1451445703950aeae2a0a2332608e05a11451fd73d0a89ad054553eb7597f86715056e0d2e142a7a7e0cc05bd779d33758f4d7e5083575371c39c04029fe72fec7efb1d1c72fc5ca47486b0fbcf03400f24d68e7a2d6ca5229187c34a1843a5dfc61ef69b0744d68e7bc871011f512565d4ea9021dd1e866e1d318a921894efa61018431f13e1fe96674206a2caaf4d3030f4873ef4d5d05f0db1c9132b38a71a6cd0ae589d5abe061b04803af5dbe029609d90803ef4379c628b077202e487bcf782760ffaf0fbd3dc43837f18c5608be435fcba3504dbcb8c446a83eba4cf0d086d7c406d80426d84a83b2f284d4045524a2912b14829e5e7b2b308896e741b2296918b74ef916ddc70e9641271b1688312915948263c99cba6c66d8f4d12a9bb6edf19cb284d3d12a160983b2834435db7dd32e7de55c452d7bd06ef952a6361d5f86956f554aac5634bd753e3a7d79b2c657169964e1ea1a1a75aba1bdc6198a7a212687c1a2ead4135ee462793a06b42473f3cbca77a8ac90b3387af41678e6cd114dccac43d2d6bceb852ca133fb149a9b2039c2a4930a9c2826d08f4061bdc16f453846e09fa7175395013ac688252277ea02c47a6a80104d7841a41362be8bcc201817e8e90a2120423a83ce96840b5ba2a2a2c2aabcd414ca3950628f2c4293cdc2d85c1293da572bb18acbfed22b99a0aead1e3d8c23a328362efd664317236bcf56c3dcdfb21d76d7563f3398d0620b3f2eaf0df7af3e2ea701bb4afffb1e79a79d1797548d91f258f64d181462c2e836273cb6f908a7302c90bc9e6e405831ad247e3d5821b2f22dccb7075552f1c6af83458175cdccf0e0d339cfd0ca7258c94990e97648d9f25a152e367ae296c8a3ae8644f1c414a8d384c6acc76b2568d99941a33cc71b81466a91a9758824b292e7d4604971a50e36f9819a9518bc8f5d01f19eb5b2bed990e6a9443e8aaa6a0bec8d9781127b038468e31f627c61837c6b8317631eec6e82d7f268a8631c6b831c68d5df7dbc7996270b65a5df7b3d47e61b644a99bddea3e9014900be4ea960bca05c5b2d32d908b65876587bb61d9e16ee604750be4ead6092c8e070e4710ba1d9dcb692928ce0897e272fa432e277e5c0e779303044c8d91ce9ee1010d297fc82636e156266471f5c7974268f3703882d010843de8c5257feca3c16bf652f7433fd010f46271c260a6245ba91894456896b1b0585a42a8fc908515060da0575440accc2344e58f12f4f2403d2dc8cab2434316160b8bc5093f77d3261818643cc90f06fb3dc9bfe134f903bd4054768a5c4025e901bd7468d8b579482e8c859a9be728af7bbc569bba795a41b884d52b6ec325e998ac2f4aad78a8d9d444a957b8a48016c216a0c7ca96e28298dbb4e9e5dd83752b0bdb25b1efea0c06a1923122b8950907a0aa1345f7b9dedd0f0fee254a0ae9fe70df71d1658c516e1e7be86e1f7737e9adec6295284a6de8f6994acaed777b6a43a7b6815cd486621c113464517d3cdf1466827e3d29d84814e55ea050a1fbd26270beb8a80df5ba363493281a825e5b0a3da480e25256670a3aa419d479449da1c8458b35a130c1a062d4f9b99851e75324a8f6da872eab14502eab36bdb4e277a379337e8eecfc97d60b14e65635baaca2cb2a8a6afcccc966adcd5c5ce2e11247172cd6f4f17c3c5dd4f9dd8747e46eb2cc49d6ca5c2caaef0a0974ea16a9d01f19ab6e2fbdaf87c1ed4bc1667e7f8ed09e998fbd68f8f5d4f9f57c575c557e8b4ecb8ecb6b6b3e55be0b152ec597efd263820d97b84a16848ea8724d2fad9d99bf55f9a19cad69a952baac3220ac2905d44b943a9f6940c38fa7cee73e3ca41c82862caa4c85fd0e8e91e2e3014d90abce9797168baa4e14747a26260a1a825e7208ba7d8882eb01f223151a825e753e8867fbf920295ce27efe4d9dd5850983d365c5e07cce65e5b28a51a5806ad3fc4c55e773a3e0c2ea44c1d533f3b91005579de14bab4e4ffb39b5cf65d533f3773013347459d59902aace5f99f9cd300095093b241a3f9ec1ed007c3882891d7c38627573043a240a4e0067a02abbbbbbd0022268d8a4a6a096b811fc86bb0e48aabbbbeb547e9f441852f93b229091020ff632786a0065082ba801a84330c308d59dc7cd68a2fafb6393827248e2eeb2554694d5a28c15f06027b278a9fe534af5efa49851fd476428a95e45f5ef501297b2536ff0f0493bf72bd57f05167c6c4d1c637e5284a8fccb599994d290133d7447a44057f0c0e17cc668ad601b9160a004064c3a1a6507cd088a1ba308452612af6d0c368a64a79c961645080fd84906aa1925081da4119e2cca0b70fc14831d2c4a133ef4c9884a4651826224561e85c90aa2112d235c340a182ba045a0ab9d90a069b046a418248071a305ac699a1290a05a420150578584233624d0afab42020e5d1114852859a0718510683831058d263628d01842070d225ea08142c32656faca41f51f915c63bc9a6883f322167185739eca79cedd91ce8644c77a9a39a9045303cbae90f2921f30327d051ffaa5d484a0fe3c23436d3051051355b4c4b216ab99c3404115c6903d665bac4809eacfb9f698a77df6690147c5b22deaf68d7da19cd5b1fd0e8e4a6818caa9dbbf6cbb3ab60fc71ad435ec632827fb5235867270546eb706009f167054f9196b6b70a050e3ab474c9538a4fc160555f370d9c708b2ef30a8c36033883f9859454ca8efb80e83432808b60acc5fa602839d6519cd0a0c760ed7f12498159406a755307fbec320d8998eef80edd9ccb22ccbb22ccbbe797e649e49af9b314250703a587bc6f5cabdca7e829cf94f4f1ec13e62ae6a2e0b6e7269270fed9f1cf7ebc9385c01c098c2e6b432b46350ded01f124575319136ae2538c73506c7725159ee8c333824705cc45c08755601650681a0ab8b00850a0485ea2b7524111a663a9de93433c85f7ab1eed6ce9230c8d9ce97e9d87412380e5bc235d86e73941826e796dc0c7a058dfb72bb0a1658a85458f0d0d151a9b0e09193d3d383050f89050f4f4f8f0c5288142299482162d475ae8a97119514e3bbbb7377777777777777e3ee2e1645e4b88b496f1548ac847dd84b190b1043f815931826a5dcd14cb16f7f5daa7f40640cb0f5300cc3b22cc3b2176cc48f51e60e63969344cabef9fd0b4efc52d973e86729a5bc8185c79f9f87fbef588d0e054bc80a88ccb59fa34c2c40c791ef8ca495997ff908cd0e1e7d414be1f7b373fc28831c4e2a6b386ba8fd936292277d712981b62cc1a62029e8483ffde17144caff7c44a2cf8efe78f4f9e3c2925141df0c9fdfca61deaef102326ce2a785971a5a15415922d1872da97056d18bbe503ead21a7fef87833c8076d3e50d94f9f6b0f069e894fe9e7230bca2da9e50803833e188c0f039b5cd53ec2ae87d7cf176231a8ea1094eafea13f0241aca31779b12e60c70e061b068e85a585f3b4efeeb9b259e0a64d9a181514e2662751b4432d18bc0714a725d526ed5b765a9ee012fdf8a2e77ab6a767e2733da15568257a6269e6a439b6a60654f42115795b475eac212fcc6a185ac996548b0d6afc168f85db96d4d6446075445761134217c060e4384f8b2fb8920313506dd23e827842df12bf45676b441fbf250997d803551c415c350cad4451f4d1296848b917799d14b4496dda9e5d155a513a8a1347a4bd48f4346dda5ef4fce1218a128011bdf6379c3e1f0f067f2d0cad4435706abc542767d11701ed145ac91818d0cfcb1ef9312fa09f97aeda3cd789212f6cd9094db889009f7c9c41439a05ec885b03ca959bcfcd19b5f821169736e4a49b78826a26d8f44cc76d5ac76d5a134c580cc6ef3e86536a1db769b1326150c56054c26094407f2c80bd7f3030780d379c385742e587cb0aad56314150aee18656ad659960c360dc534baa67b029d4556de2542aff9e36715fcb36a746694f8def49e8729cc76d907c6770da6c271fa33168d8926a49c56fd189dfb2137fe48a2daa1a5b5835b6b46a6c71d5d8f2aa717453e308a7c6514e8da3948eaac68def3df6249a423ff217d296d48bcb6f887c03673355e4efaeaf4be97dc2cb95d2bb73e066ccb26fc433912373153e67fc1d1c3f18893d0c5a3cc1c8ed51b0c90f06d3b4978f022472d31e0548fc8361d3bea658f6edd819feafb1ffbc0080c5e47f955f38c9c0418b092a86d8220cd629ec6f051a156822e6030d571524feb6699f3f6367429ef004a5377e41f4b75946cfbfc30797b2978f012e69cf39a952864b6f7ce11c7d21583fdff2859fe80b7da0ef03ae942a3fb9bdbfa6691fb5f5b2acab59f6eb81a0bb24b097aa27581df2c32ec116a004ab00c6a1caf7a87911882a3f437d48b03ae4c700fb92a0fefdafd337603d69c0ad4c88e5548f71524a22fd8320cd8721415731b4699b19b0edcbe289616b3609f049faaa4df2a3e9197fb0baec9156d6245bb2676be2937aa043240ed53ff324c027295b6d9a33942dd9fa0af68c6f5f38b3cf77a05c1c41d7d57a7457e88e6601eddfd511ce1906db1443cff8fb8cda871d1157adf9c7d0fd3d131fcb9156b8425ea2b6b814469c1a597c6235e2f354afaeaa474955f524a929d455ad31c58b9b7a80ba4b9c40b1024465716955568870bbe273a1b89f175066b1222a24692217868440e4d7907598071afe18d58ec11394508ea99d89aff3da51b14d188fa05837ade83a22040de3111abc1e91efde479c48049be4c74ebc58234ecc89cc129541bf79ec1114d5a656c59b56b5c9553164d6ab6e0c9bc5ca82702b137239d59fc311847aa68a9fca7b40c34cc53553b589dffbfd331697b8ba2771ec31ec69dad48fed601904cb321583ce35cc5435478b1f357bcd0b47557b6ece656d5773f9e01536bea6c519490f626470dccf13bed8d172a9a8fe1f1efed1dfe54e517d77f7c3e75d9a287949fddec49c118726599665bda33ad6ddfbb5bf8db14977b7dc6119b127f1b868e8d260cb01ea2f1fcba2a1a1915ee7c2d759dd5d62f1fca34ae7189ffb23c52fe8fc90c61fa31abf968bc707377f7345d3b5e8ccb8657bd3eeb946539a9de1a795431a1c5728cc0b0098a1bf86fdc1b850637f6095c1a2f41046116affee60eee2d758c272811a62a8a0ca89a9340065842d7218020f6c10441a2cc3ab891554809103173f9c18093ba0e1a460430919b061847413d83042c3c146aad9b861c3a6864f837519343402f814d64409f02f03e600737cc454703a43892ca0c829220934706050fd0bb5ef074d7577770fd5c066eb41159bc55440c40728dbcfa76ddabe1a8eaa1399d4884d75ed833231c93455a860340ca9428732525beca0015661a3fae7a081a9abaaf2a462755555baa8e1d7986950b65d57b86b5440fc69f7eeb8efe4264955ca5fae7bd3324cb6e4a4dc304d868830e766da625b47ea999e19ed9996717560ed5d1759d367cf34fd74bba63967d6ea1916cfd04b2c4b552ceb342bebbb4eb14681ca17d1bb2fc277777729dddddddddda574777797ceedee218c57299d3ee1296d328f4bbba091fbebe813e734e94ba0f1fd5986d0f8f21329c17560440d0ceabbd9bb6733c3aea0f1b11019beebed3de787ee3eb3afdddbbde59ae6cc24a645675c72df959815347ee7ee180bbb62bb3f56b02d9ecca8a46d5546452b158d8800000000c314002028140e0a8622a140280dd5791f14800c7b94427c521b8aa35190c3300c4206114388010400000c01a1a1a1e10401e983ce4a612bb7abf4b571a5eadbcbe7015879ffe8231666ae0086786053be3f38aab5257370cec2c695011eadb50640a97db3fab45c2045cf27117d8e43aaebf24938006dad624fb9fae99f6da2cf83e8583bc05634c1bc8adffd1fd4778e22de9b3d992d02631d5616977f525a6edab730a66003e5237e1d81414fc48e7e9d0e18728e5c718bc5edaa06bb7e23043d7bae8773e749086211280532662ecba64e1fb9a9319e8016e651f525ef0e62ecff85ad35a7eb5d14cedcdd668db44d44352b463136bce7dd7b641c5bca20481af63947911301f3e79c234e011a746a08ca48b171d2a0bab992366c55ed6151514ccc429fa8d3d99a3aa2dd4d1a0747d6b38790970ed1400adafd438c3e8e7fbbe1a172cb5aa5d3262b86bcc46a8bd548b5c037f1f04808867c92ff89fc5fd9d0ddf096d2ced9c33b6f8f038c5f5592ab69bae8881d1a416198029dc8672db87053c7c3aa30f90337e990caa2482ae7c32956d0f88ecd735a439e8f2b9c2853763b2d864d7b69ae726e2402b0fe968c5648e0378c863c37cda40c4fdb06e31a2e922da6186fbe3c0b05fd7282bf0f32e519c9bb1e4db1c9eb1a4b2cd74c0e8816673def172df64e8828505cab8fb6f9d44bd584221146948c9e64ae6f1e20e933b58825ab0939498fdbc91a7597a068b97fdc9137d6d2a3cfc79b1338f8fadb2d1b714a1309ad6cb366423df74f024df94aa5f2dbc450b1059f734962909002663d22399265f405177194a46f26b1347e7d189b543619d296f1693a600fd703092ad935dc1610e0519230a94dd80b54117bafb884a0420588997905b7a7fb71025c688bf6158ce3bed5899b8847f67f9f3b6591f2e4d66d58c30a7e0f47fc3a8b0b7f9d21ef3710ddd035999d290a6019dbf12d61c2c09446315b51571778d51b72f3336acc41445ff004ce046a23dd83f00c25f0402ba6bbacd4db6311109d94b302d00437f22dbe635a07a25a9f4d72e622cc4e640148ba9c39d0477cdb3f467090a260dd3b8fe4f73995f8181da62b96c74c913a048dda5d6ebdb1a412e2196ba7996b592f24045ae40deb859ed3a108a884e0868fe80881e46c32ecb16e576cb6a2d57f827af8454260f120ba075f2130b713e97c9588be24c0f74820043265611c30e8ce6ef221f67171a861c667d66db6a671571a4d7c8976d8cef2ba3619d248d6148b64116c7573e572ff81323fcbbbe9e969ae8620c0b14ec4cefdddb7ce8cb5fc61681c1a6df5e1a94c0a3bc7da83422ab25e5d4ebeb1e463703971bbefd202455f9d2decd6983216f82311fb0c1662e62c3a08167790500e344e8cdfcdcfb01629719df04811d8de3f1f2f42f5ae089ea5b6c8e93722d424740a23a92f85a34088b310a560ea1aed6ab8627945099d3969c70d2113c2400d1ce03418302a5ff7a094a7973ec890874050d80ca3bfaf0de7e6e5232610143cebfcd4df05c26fc7d2e9be5db5a7486629f9a529161f67427adcbd0d4947e1cbd83bf3414482bd562c2614d2eb7c119b51a94380502ab7987829d7d08afa3f3069745c96c3e60a239d63bb3fd1a011e684e4c99a524749c56aa5ebf023a7a0084b2d24b7c26886d675afe3c36bfd4b515591be86d319b00d254d3312568041da42d69f4e598238f5eabb8e224c90f574e961952e927a42f37d0331e22943bf67634915179befb1bd85e237c937face06f4314109d1e51931fff3cc015af25794d3f368af97addfa3d2c0729f90fae10f62cc22c342999243d1f20c43468bafd77d67850c39155ab685374f54042211e42f255e6c36f1fb3e919420d3c79f49f181ecfa0f9716be10d541736f5e950d8030bf7bf92ecde92e77b184c718450f22329482cefc344d20fff924ae289e0ce046e2478c8f6aa454c86b09e733011fc0d506464d04ab04a7e03a2a9c02406ce431186d3a655539904e30ae73cdee548781ce5aab0c0d87fdefa532610c067ff76d37f2bbe0fd8231e014dfd152580a4e1d1c84698eb3cf613cb5ea78e32c4cf3b101649096efd3439a946e7841cce35451f012d13f5c433c80956fcc4de55653dc3cee9cf84118cb42af4c9e48fcdca52891331ed8a91baf49353457f119380c467c13f27a974195a2ec5a8b190ba26ebe7264ad7a1016c04f66bf1200b3b6ed7e38484ad1f16fd8b72c546c025170668a1f531ba6a05397cc157d4ddad01d7e8cf4068d47617adad5fe3eb552fc22e71398cb824a888ce8c24e691244efd2e8d51f0709af78f9e04e17fb5fac8e78dfc85a1bb9718cd96b50fa76e2dcb65482af0d771d7dbf2a6ee11e100e45c937658339c834cec723b2da0f29e2d807a4e11c3bf5fac0dbdbb6bdb9d47a2376d6c9329c9839443c69529e2a3102193e2191a43413599b842bf1ea8f225cd201ccf1c6f005cfdbee4f91e106560225b6ad437135e1f7cd075c4ab8721ed112fb6b7b1ff1e8d22ba7a5a7b8e65935b0ea13b71f5d17d4618600ecdde294a9ef2432c068ff6d21304ef9fde2dd20e039cd0adfa7649afb03e4c9f6b8fb6d53a1586490d2ed7c4746615ef8eee200e532dda1ecb58ad0544c911fa46aa7c4a191fe72a3b5c9b093c7ca18221e4c39b4adc7f4a6f448af8921f0624ef2f037e98beef6edb94eb1fb66017d54610aa9c32c4bf4e05d1dcaa339f8dcd8ee645b5605a150c2c5bfae162064591ce2d5f57fdc288848b25f8ec3552cbf08b4d98f0e6f120fad2509110f1153070769e6617409fef9868b8b538a953f6b9a029e61b1391af099489a927a1a60eab2b2693c38ba8f708eb8a0e7e6887e0d7a13aaa40824d73fcb3875fa0c0dda95eb9ecbd715c5fe46017e3d2f3b3f3d2c99faf4a27c08662949eb81091eec0520601a8c3f7146781b7e32cb09bd2dec205655d05586a07a3f62806a870a466fc3e9cffaaf4080bdad0a6e9cce0dcfec4b79c0d7aeee25ed6a7464a130f1b4fc890aee223f44487fd354a3334c6aa031af351e30f366cee53610387e7476a264f8a296cc0b439023b23d3c954736444ed528b61c938b966b0d1861bf13557be668db291fa8bed60a537355fa2645a9bb3d05f2fe771adac4d3c25384a961b424fb8086291edac3dc3fb1fcbc2c7f5b91e880715bef623cc7079439f8f24de79009efd72356ecdeb65f24fc6fe8988cb80bd0c2504873231c22e18e590069143ad198c7ae545b3052e8af26740f34523f3a7ef348cb00a8d5f94dd3db892b23bf4c96790a17f8a191e73fcfe845a5a32ea5cf617c6bb6ace4c2f6e0d967bebe8050590a24e8392b75b3b297497463e418a79ba8af6af1898ea83aeb9ae3342105aed0a1d528513182c1138c5346f3f7c5732cb0be92e5d764c04d6059452bb0f5035d546a8a0354c0898397a00894461c3ba3b3a713d1b17cc771638e23a7e15b4ff8b529dce4e6eb8d10e9485a399bbe10de375ddae7f9d7d3b51ebb2a3da2dd8b3d78948ace0aefb7cb6dbae464a96faf2b280d16833d355ad70a426c59f10ebb1ebdac95827fdb50e9c83d1295b0181a3a25aba61a41f407dc1c1d53a89bdb570b854def04ba892110794dd3557dd51ba752f47acae29974429b495c0e7c71caf1b75f36234c5ac932bb32663b433f9e4822f8272f0b126b31f9995bcb10db2614d54a952e0c2a53d8be87a20009643f208c012cbf5f70b5b3c0b416d8179442b7f0c06b49a47bfb4d383a0fada0296f5b9592ca44ddca15fa1fd1982e61277dccb7d6de92aceb39878041988da1dbfe7a5911ac4be44679757d71923d3e92c838bc548018afd6828035022487fafbfe0fb6023c2d4067c77222621e8e8450fa36b546071a28d4def58309ce5ef0caa0f586230f05ee9a76a35348fbf18b1b8092b912765fcfbcd5b735fc9b7130b9f84776cbe5d5ac753b337e2a132f7e7b81aff8514becf81128417a6b2fa618c16c58b58163b25c72a9402da1b2ac4ec97ff4924bb392e33cd130ed6f87c53cc9796493a497df3c1bd7e818333c83212f92b6106ce3fcd563a4f00097d5c0131548348810b3dffd4bc545a3106735c9849ea51d4e89684c85912748d653d463e7331c00c429c1528d3381f397a776cb4185e1bd0da327e429e38ac727572b5ffc99d4d14a4c50cd452982d40102a2e7ec569ddb32b06e2e461ba198cf9160f8569b6d7bf886d6c4534a90c8c359b16fb8a5b0b95313c6b3ec754a6d71c3fded2a2a34c3422504cabcaa09646cd38d88856ecb5a4f6bcf0cbbc8af96cc49b9ecf37fdf733852ea52f2270dd774c093da7f1d5638f17360271e82347cce777595923972350c4fa609a666dcad1ab8ff5bd5a6d53728a7d96ad6dfcf6b62e2ed387a6ae846d33f4f41f746bfde5eeb9ab98ddf9901e4eaa19d5e2c7c3bba841a2b6d1ebda30d9e56aa1ce3440578f9123dcae6de9d38ea8b663f720a22ea795fe61d83b525ff0b4e09d1365807c3b342a400a587322e7a2df44f39eea45ec199b219f7e42c1a07b81c818ffda263c6546db434eb16e46ee479ee718a76c70f1a17fd91c50809ba34afb264e2cd3f3b0b67ea3b2e6f8552507ad558587d3f98320fb0d15603a85cab8e84c507a39f6ea6d52cd48017fbba7c6d3979daa97779c64bb5b14eeb1a43ad55c7814db431714c371b9a02217e3046f707da3b5292285aabb9c1681326424dbde4901a1269bdad18270f48521f8d627161790ed92565e55b02ae603dc4d07e844f6df358ea1d4018712c737cf467bf81ebf2ba1c8a0f891d83f2fe236cd8c6825d6cbad69ad64b8a30e6a64daa5596cb7d6164edebc744889e31de316322b2e5bada3e12eb16702e8e058f9f56c0034fd6646094aadbad86dc0f1c676b22ee7ff5cb182932d649c49e674140925fa59b0fa0fe2512ba3173426b62b0e062e54dc82d4de7b18f59ea364a44eea86bead66ea0d4edb8d36bdd72da5a0cce07aff9a1e1c6baa45848391261f294c9de95b90678c40095a0a197af1a49650c4b84d5ff26216fd90bf045aafbd09e21e149ae844745328e38635a1c825caf8b616fa76279363b09b0d4b6b3656dc76df3906c1b2699de32db3e41f234db3f834ed7869ae4cb675a712187605c9077f3c8ad8e96a98cb3c527d610a3ce964f739c205af6f8d52e50f4c66cebc912716b8e37739270f244c74e68a49eab004c3d27ee36fa3a10c084902bbefc7782fd0a94917ab34ed1131240bff2ddabda8d68217547257e39a4806e4cd82f4e158df5c701a79d847b6e931c4ff9837dc6710b929915bdd0c33d2468414ac5d0e84d653bee59b3ccfd9f7618419ff68763153020666a7aae1b6caf11103bbb56abe1995ca62145591e288e74e6b2575eefa46735473a47ae0963581acb042e176021ea84cbc9ae20aa0e5043da79bdd74260b20e4e3723b3778875b7ce126c7bf9e2c515d6aea2a5d0575db23515af83a76d2acc32674b8a0e554727d292c5348996cbcf33c3f1890c3f3f7e06371de462d29d8da90b6891310d2ed5323da0d235fe3518ef135c750e282492a1681da55dce8ab7e8c6595c5ee7dcdcae66e200b93e1c3f0e39861d0f9ab1a464b5e4a352701fea36e854728547420b281b95a52375450a6715d2a8811e698ce910403277c1b19a24cfbe71aa8ea8fd5d41219541bb88eb82bfbe3cb1f16714c82d7e5a6ed8eb16112055bf0d722bdb595672558b4c3b0f8ca8878f1a8365fb554203a7bf62f2cf2873eb642ddd04d15d7ade6aa728a7f5a4344339896ce6e2fac5d8db613f6c469b0a794bd402aa86ebf0a3c3b1cc6d7456a741d2b5082da36a9bcadcbe1f494df4d23820adb0325b80e7134b35946dfd4516f0fa8ea8a511c4bad8af11c656abcb1b7d8677c56f56000f46565c2a392da82c07f09bd702a4c0a165be362b2320ba9060faf2140e6414539e923b6097a79337861534f426b52429698e3757634c09a89e3c44027a27fe08854b634abe7dda607c8a725f1ce5ce61bbb526a1574f2332c2e91e5686d094f06e0ea255282d48566f548ac841a6ed628eae9f30a7f348b5798ec716e1e63e146bbe04ec69a5a92b70691821e4306dc3197fedfdafbf45d60a7d540b7dc06983562a254f91f3d971e0d461838c4f4663e5c48803f7ba934a7feefc92df8f723d771af2881cc0044b5182b1f094692343589c5c3ce6266b719646ec2033452631fb81ddfa735cadb7b5fb06e4c1ac46b238362c2f74b29161092031c1ea93812d64392b95ec841cda9f70e85d9afde7957c8c67c1b7ac622276d091f163e318de860612ace18ac7250a22dcb1ca3a6747a9d6d577eb625cd0d1864e6ac8bd917a17b9211c7e6b8cbe0b1601adbc75e0d37437e1b9f6fea88374cf954b29d057c45c1f599e78788e96debd386871dcf6e3ac77d3d952499c186ef771925e6c145b117b2947dc579b68852680da0cd5d210cc2dd92a535bd98998dccf716d512f41098ad9dfd6bee39c028ad516d4b864a352130fc2a390bc2ce6e28082e1c5d631f544ec6526b86b10a86831662bfaa3f4b6fa8e6a7d078c0c6c615761ad0610615a0ab913901fccebab4575b6dd5cdaaae089ac29779e3e7ec365cb43292bd57b18d4ff63953331587261a9a43628c81633da2c6c1917400293bc1836fad3d25cd36d1e4a6bb00d74134c924aa50e47a0d95557059560ac886bdf7baa6011dbbf4fc52d830dec9b9fa43b49f593d412e885b8e762b7871f856907ee0f5f13fb96566ffef0d718066111d112a813fcf6495e28f86b1b27fab02ad3402f7e94db45fff46e04785068081d15258251248b59ac3b61a8685a457a28015e3a25f3596b2f4591cee02ce02e55994066a2952dc62b0d262d02673170cd3e668e706fd68ea1bd4f550e6883891cc822be931693c924691d1c1e1d4f7d7f41723c1734502a4adee28618fd37187cc9eeeb3769885db90f15077649de0ad8004ebc9c7759ae0b1631e8b4342c45013b258df5ad9a70004c307e4b416c11db374c206c4cf6b138e97b6c8f1ed696881f03a4d929c8be5910997b27fd6dd0abd1c324c8b711eda062958e807290b1232b35591edea0458ecc2930c808f38f337d8b7873d07de16e1926859cf88397d263b74f85dc8fe116f164fbd55c7c9f0648e1efc661a58a182a41000247942f93a333a81d70b46f1dfd4dfaec0fe6e96df77318443d636818233b9a1aafd8a0918124f3968280b5e8db6d68d5fb76d0b757601591861859a30b41f7b864311dd77d64ec09e52b8a6200d5b96483ff1a08c64e1abdb53aa4c189bec174401364027322b1a594c4171c011fd9acbe685d13fafd1155b5d3731348744189c34c5a868ea5034d5ab76124a44453e7ae94e8b716648abd3313f2245fe75a518790ee6bd860d4110b4620ef99096f29bca515ec7a8a7e218efb24bcfe250e557a1b160daa4e839ae821299fba3c346e181ba6ee54ef50f62218191c2e646110c7fb9552613a754b6ef50829eb2c7acd6d7da258b980d6b79c68202992a525964545cac668f22201ccec1875d17c5400f6954336b07f5f6d9448bb4a56032916054331e39ff222329fe615d63d029c43c95b5b776a848f77b552177345d3a70c51132182a70b93ea3a35b5db59d93a874cf153ca06250b83d4e85ac4fd21f48f1d964c003d899cd06e67d868b910092b56856fc4beb8aa1d048058def25e544fcf0ad42edb2390f8d8b386be9ca38572f439313d554e0a644d818e801293250a5752568cf06bdf9d403a9b2581581e2b2620cef6817e2513d9d236062c4c7e71d47a2cdb96e2ae515b6138f6b7eb878da5f8f77bc3a47d40d74fa1870786a6d2d5aec1881e9ccc1b5b5382c61873206b30aa2de3b1cd2946eb9155a11eb75be095605a36fe24beca3f46dbf8200076565936a9bd07318ef951a56840d2760b5d3f06f5390652797e43d1804382304ca9cfdc1a520d2c6d16470406e7b00f5c1bf2ee865e265b57933c07e7ac49333b57ed6d2e987bf0648c3bebd10568f594a54fef63bbdd46ae06bea6c02e1361b26425dd313653747476642519fbafa0ca5c619ecd0d8d30536544bc764662ff785e47da3df2824bf13d3124000d93ac62b01e378b39e44339b14cb3f6f19e8de21e0db5d25fdc9f6b5425f0de23f7b133b1a0c2796081547af54364e5c780fc9b61b3030a368e0f0742a59ddd5ccd2db189427325b4e6108d824132fd0a0b23fa5eed64c0154de9447d8081e891ca74063a0f1c6cba14c6f1d01b72461be709b4225cec100126bb5b8cfeff18490f953011c59332fe5002a225906bd62bec6cc01ba57bb67c947405928ad1d409516e6cc2111a7f4b245ed93e33157d7aac60c29f5ac566a04a28d8ae912095c09e1d8a717195eed3400fa6b2a33857c25430d8e25cbb485a7734f23decfe4cb0136246d696d7bd5a8f7cb27d9e0e9f88e3d38e217f0932f622aabacbef167c12c5c2f45b577e565371c1aea455600e61d7746785dee841877ed4ab20ce73191eb755c71b1b5e87860bf360fe885172148413ed7c284c178886462c6c9ad96c36f9d58a8ddf4e7db5ad1c414036d614ab6706a055bb10b1024ad7b0ba9c09bc16855ff0b6a066a04116da4bee142b273415f387ad5ab2999af931fed38d15a5015c51e52eeac9adc4b1460e10bb53430db97b4c95801a6ee0064f9f4e04cc9348f17849ca2d9bf7fa0e54eaef7573a32c0759844aa6d28ee7c5ef3820b3c29d312e928793d14a8d767fab1c6cf70124da423957d6998b08d8e70fd1e9acd0448d62c4ec4ece6943059b5c311466988aac91a2a6000e0cf33c32c2ed938b24b688a4f47ec8f9ddde2529d0908db7ea33852b9508ee3df6bf4bafd63ca58c212c3b7c9c5dab7ee926103b0ff86755c750d42554a784b67cfab4149af0e84147862ecb33f3c2d4e6cb6d3f193016d57f9647e9f72632fdf109a9a03e6f33102644f2936bfd32c36132e3c732519f94f183439145d9aeff32c6b33f1f6d9ddf2782c7ff7cfe8315a58d583bd1da523b74bc197e425fd347455781657d21a604ea2d1c6a61498e7795011fb7cb9c9a0582e61dc235de60aca23336dd7c3919c8a60e40b2278759087bb27764f8ba442cb286006859b88895afa669777c957970595b0634849a644d3abb20743687f6224aee60217e063a984ff0041d3cd96427aded2c134c177835c94d979c500c7ebbd45c7e298c3024e87f2fae3cf9b387df1aff2debc4c36266a35abfafda06677ee4aed45ea1d162ea4b07ffe0d896b3251f3fd6f8b4ae8326341c22c80f67e96f8b69a2605b85f9c41aebe7c1726168061f9466f741d8dc2c2b9c7419afe0ad1ede1c63589d7ebf3c7367cf0e989410d99b1cb864bb89e530cda1fcf48140603b4e951025008a02d7f3f9fcbddde94c04116ba185ccaea1b612aa3b4e455c6a4313e25d355f1f19a4ebca2e838295b115369c9c29250f19602f14c6b0244e4c3cb24b2ce00c941a8041e75fda9162cb1ede9c952250f2e490f1d9ee8749f6a125c14528a91335c3586361713873f476bc0e95d9c3e63185597be638b303e0dd98410ac0ae2123d103c86f65a063575d65d966a1bb4f3989255a66f416e4c24fa0fb966400406cbdbe6f5c5e0cfcdc27aa29cac46a271ab15ea0edd8082bc2fe04e96a76b8de668367494d6faacd0f599f49a1b663b9b6d788d65b2a5d50806c2b61f14ad00e7109af9ae52f9e1a72baecc97105978cbccfd285039611c331721a1c5b03ceefc1d462466cc4c82b7118388381beaa33698df33dea7705a72313a0a11b1794cfdd34aa5c5193ae19d430e266f5d44b75e90d8687c5df4330b5d85a7fc2333b1f4de42e81f4010680e685460ef1ce6a69059c23cead98e7389fa73de605378ea7be2081e644893be419ada6587a5c49e5429ef3c71f9b5db7274a10e5d6395b5ce7a840fdc46a1dba8809ac298c9ae2fce712afd061268584647a2898d835c9b46a0a12313a1104733787ad0c5d6802643b91ff62acf2c82d77ed5132ca3285625090c1e8dae7eec8c7de3cd1a9fa2bb18e2fef8e027c81c605442e72202d737afaea1c9238d1c50e7a9521401a9adab010825ba62cfceaedfcb5caeb9f21d40698a7d1962e7ce6d4408558f08810790d35b41d08538af3a405f1c74c11c6fabc5a1b7873471fbaff66082cea7f23a77f0ac8b2750613001fa7b996e2506e68ce1342aff3707f7bc4121f1f4836702d2f9c2f72b0a3c31f12815bf6d85abbf801a1e8f0872c3a15949140dcf51aab5161b952f270a767bb4028b4355eb3c5df3ea566b519fae499b336dbdd0034d27e0412cd9bffa2e104e5ac111fc0af6829abe99e0dc69ace021fbde38884de330553da831f514f9620980d53bcc89e6fcb3f7aa069f7274e4d1fc423c3192d0762f3026d8059c93268166a3ed3226d87e8cae95f521d717d476df19c6c32b517928a497981816204b4da97c49a43d0df781361e537597294c62ec21b80fa33f0cf943d490cde9fd8caa75f047cc2846a06e3b0590bc61317cbf74557bcca8c5c1927917fbfe544ab58132483070fed596a803f145812c8451e061a0fd1cec5be1e0f3ea6a4eea431c73fb42b3f6e92cd8e6026e1c9e1d4f63b5eb577cbd1c4caae1abff084adc201354d66aa480b5b5ac09de92bd7453364b4d02e202bdf9414f209319fb9783bdc67dbac2a279d0841840224fc9f36e85ad20ab3ee48c4f727acca6d90c5e3e08e7f1c0d434ac31992067e52589bd70baf8f2bd1bcfb4cd05872ba2b8115cb4261c5d4f8561e99ea37e54f3b5628e0eab2c010a4be4d4e092eab06202e01b5d9fa330b80bebef90a93601529de5716a3117d6c21553cc7831f5d625c930af459030a6c6a6f19cb629730a10141ebb17f079a22695cb13b7eaeca37db1fc789c74e5dabf39d6f3e241bd10366ff7aa30c0adfc24ace38952d022c989cc49f3eae24ddbb76bbd5258308b788d5b514f1f55408c1a082f3228999069891d4ac10c4443dce6bccd78e2c0f922c021837a8fc394fb3d3dd276ca5761ba6992975a0bafe0921e02059bc8af0af858daea96088a5d8b705513da8abe3e195ce4e735d93918cf241bd939dcc29b0405342e14138ed38395ab5b7f11f47c2058611cd78fa78316230a44a318ca97a3c62ce9f51ad3567f5405537983805ed53a43263f8258a5c9a4bf4193aea2100516212dd099a17c8df11034c1c5799c2c3bf58965c0f698f2eaa5f7112e8aa3406fe720e24d32aa87623608bf199bddb26cd1ff61206386447a7ab103aa8533f7e85d82d8774d45b98490c49533b533e4fb07337c233c8b92713d60a399eb8fe2835fbae799ef466705fb509b1685db18a03bf4aeeffb3b8789f41fa07e582b62f09849afcfb38308591b8d039e06199bb7d379da4e00e2ca53a562d68f968b65f34848dd90323ee0b662ff43d96a80ae1836bb5782faa0ca1a85d764cb0b160fb1e52fcf4c9180e9918d0f592390d22d15c02e13b4f479c5d5cc7bbefc54516a0cd42c5b5c321fcd2e4f2342f6c2f23e372e2870049a4a5c34ed31f9681804b87f4a0d9a58382204a7cea0340052b2e04e79ab655b2c33e439aa1eb21440bda954b6299ac24ea2c2acec0e7a25fd946597a417b6ceeb362445101f3c1aca876831b90ab82f7c54f719020c339d4002dcabce40e53a0885c8ddeebf7a6076b20067d441abd189c73ca658d03b0ac75b8eeee3c0058cff9eecba2bb104f2dc58aa28de0b948f70d766c2bdca580fddab47c956f2ee0e7320c0f7240158e0a47740cac8135253114c320f0bcb5dcb0d255622bb829f1d336807c36d80300817fb4bde85e5b8ca934fc86761569d600868172fdc812dc691d05c8771a4af19205d0b2208a39817cbd4f27fd5e39654672c7c3dad964a4ba81997acdaa0da28b09d24e2edfabb076ea51a57db8f62d5856622aac54779df9e772e1950e7760f4c6a92d6097547851bca91341e00083c9f4bdd38ae9c0e35ee66c3a782c57a33ccba9ee290cb6d419028bbe604c94e5b3376c74c8674315f677cc3fdd9c911135be6c851c69a849b412aa9431b2df2c379161043b07958a2504981216c88c4a19958b24f12505ebac44a867e372b25564c8c6dd2bdf4107aeabb013d905aa9d8402e2f240c71843b3338d51bf0fea21c56384eccc21d851265d5b153c629fb42d61a7c44acf4a775cd51cb542092f1a7d277c0a8ed8faaf6ca757907baf79c4d27bc59dccab6b8aa013bb33e935aac0297b7ab84c3ef8424a0483a0514c666d4353269f1f337080255f4f6988711e7ef29540ae26fa8b6ea3e426b7fd1fcbafe8b0b9f8f32df2688fd4e12dadac434da654e79ffcdc7840f941ba79780e1b26eebe4900f90e568eaa00b4190b08137781db84e2f7e054b622d8947fbb61d9110ab1fa869511c3ac8fdef0ab9849e713c3afa2698579f5fe3fb00cdf675d01097db1e5e253c9ecf4b8865f26020b493a808fcba393e7639c1ba8823dd8a2544535ff8f631fe109b6e93e2ab866abb17d2facec2281ef5a8f44d4eaee616cc86e898821961d5c087ff70cb129e21d1ab9cd0bf2aa5f266a7db9773fc56941e7bbd0e2fdab9294b0017607d546ef1f207ad150db4d55bd2b692a6267b60060080f3a744d370d865a551f622f4cd33f30c41e4fb7ec890af5eb34833e2625bb6e6c6cc3731dc9454b6649992891d02b37d9e232518f9be80964a5b5f507d48f004c2572b691494912209bce16c6edc8a72c09384770937090c304a3de453f1068c5de2a46f5911e2e65b263beab8ca3d21eb5f687a182399c6dabcbbb5c7a606f61cb1ad273c12ba3193f6a3555b627e9267b7c8d54d4564357096134831a58b456c2f18759e5c30dd4f27ae12419711f06fed87f5e6373a97371addef54496d8a0b0c96f6ef3dbfd8fcdd996a38b5c28144ea25ab65d120b50164f271481de311bda1f0adacb7099c20b8f1f867ae79e7d3ef0989b95c00200ee8ace2b262f8e8cb24aeaf79236283d16a6046ee47d60910dc6dbc74986157c9dba197942cf88d1a4d67e834ca082254c518b5ace8e699d6a27830a9e4598b4bb8b847e443c9167cdd3d5e215d1fb87694655d02026bffa14c702070a35513ce47185dd84bcb2ccc312c86b138fc017a04047ca3ffa1cc1e04b0471a7df0cecd238f8b61045b5b7b85b2778e44c0400d26bc63e793a5e56dd818035414a8e1d1e9c20448b0285146a5ebcc8b9ff63fbd1eb9a18902861af74c263b495674d326d4f1b5ae24dc04235d6a5871e282cc6c3ca117b0ac0ab3fa9471a8ada79b98f6a7479546846354009887cf5a2b780c46c9e88fdc6f4d260b4f6bbb07055fc12f563ceb821d24a6001bdda50b8514b830dfeee4c0febdd52e3498ccca428447e7596251fda847449031dc08be8b1f11f31136b1f7c892d119ffc901369d78e4775486dbb1f808fa9a90d74f60f35af8b1ea6e30085cf5464162ff287a3cd9037db1309ab7e450ac951da4e144b979e7afdb6eb3c59c3e42c3c4eb4b7c46810138a84dad981f10fd45b2b0cecff61ca374e214391e3651d174f963a3c22edbbc2b4762be553992d823064aaadfdace5e3383e3342f7c28e790621370ad7e19fa8b6514dfb04afa1770fd3f625f37d92b42a0c2ac069fd52cc9ed1a4cc630ebfb903fa144e45fe2f2f269c9e42994e7880b660b6059b2f952316c952d1320cb2e904a6095fc03426c9e33d750fd49af5865802da8fbe05bb61e10e59e64ba7f22e33234c233067a9c902da28e705e8fce2632b2234d762d8427875ae20655a404e5189fd0c32cd198bd1e67cbe65776ec541f75725fdd595c0a38d819f57f0c865bdfef0a123fc932ae652846fb71329e4301403fed976f052fb366908101d1420cb5ab3a2e8a008e5b2e8ab10f7b54a4f157930783e4ee80b3b4e8b4351b7d96b1ca512a52e2777dde069aaaeabae1415234b755bbdf038b4c9c636f1781e0c9d5702619bffed4b1ee09ab492b2c2ae486141478c759ac8fbb8fdd708d88eaa37b93309361e14f149e8751b6e9cf0d21aaec2a4fd22424b030d1b711373378d3f2b108205bc89a0fc22d94a6caf89130e24a4b664e6482aaeab2071d7eb8447991e4998fb0a544ffc4e2236bd7132fdcdda54d5d287473e4d92b0a0f01ca0207ce22b5959845c1a37cf08a7876ca87a073df705bb6f097abfe25f69a3c0d28aa85f587235563171dba4017b05be22407833d8b888ce31ee2c7c49b70dde9330715f074d7fc99f13d2d4517dbfcadbd92d1a08e9de9c09894dcba5afa9a8496fa59c10369d02e1fa85f9cc92ab9a0bb569bb10644932719f5bdcf58f59b038c5f00844a71b212c983244e8e4d2f89992d7efa1e525514f8ac07add484109b0b505bddfa80ef11366ac550f3cfcae6505d398897e6e9774e34889d7e29062651a18dc9049de8fd8f728638bce4c7f4034f87af9fdc8f5276d7c92b95c5965370be9980fe5013f7deb40c3c99156c0140ffc692660e676f346d2fd250e891edec77a20d6ac865af5e16ef8f2d5c29a60122e24ed8ac078ce6a4774a16453e6c3515919a19e9a082cd38a234950bacdb7bb65940f5e49264adc169e6dbd166b9ebde956c105ef3eeeaf18f3db1e9fe6d01c8ef5d021fc6a5327a995ccd897101f80cbeb40403d29ac26c1238757ce5a1a20d53862eb104bd175d6a784d29452619a3df71509de1e6f1cabf1ac30c824358d0ef11de2bd2e1a4f622388de9359690ba68eb3a64ac585a6462100e33a8547e289aaf8dd0caa1f46a5d531b4bcbef302e3b89990e61bda4ecca0e8b21a04a14200b3bedf0bdd84ba6c8b0b555f6409df77d275a220b8b9ec24d6221ff2a41ab7f2a22e794074b32aaf49fbb64fba0d638d9a898bb53cea21a4aa0e9ff84b16a683a09b813d5806d77e0257e3c25e24403e5b9dfdbd085a0848d39bf06488230c2207e14559d14d5aaed34b2c329e2e976e3a89871c6e99454b47dc74bd644319ee318f16086d529ad4a0c43cacba8588dadb42787e7350346c1a756f850427d29d0ffdec9595d5c7781ce1bfb0b162d2316869d3b543797278f1b12fb4008544dde7b50f4037123fcce415959a57069de6ee7798652b2bd880ffe3ef5420a107ebda829520ae1485f39718f1e4c37a76c0f89d5ddb8c0e0151365c55a882af011f68f1ae2e2c234ab47de764e1a4f0e56d9875fc1285374a7c932a148e19d07f2b166100373d7cca9a35e84b853ab5a466883524aafa1ed5658def66d2c47d900958a0999aaf136d0dc2823c844678758319fe0ff8cf83606ce97803e2a8f2e17b91d8a32d578826b569971ceeb4ec02ee42bb33cc0e28dc11c31b0720bef887e1d5fb6ae55f4eb868cb08bf90af4b177cb2b87372d05c8a8e4e36b41272f5db78f588a00c41a03bc91cc2c36f99a34289fa8cf87d79849b02b65f60e86a86f99564ed68387b13dd1bdd03a46182898608e64a184cb5bd6595cde5a7640fdbd1bed3f31429a13b670c2c5cc560094ab5f33d0985d002c2073b4d6708a762866ac31e59cc85688880200f7b96c3ec3253b3ec0d4cb473cf64d086966c43ea795eeb3969a3206e04aa27c26b78608b792d58b28b6a00708f411f2866305c1366ec64073a9279b897130ae54d0c6613659337c18e24f898e5764ad4d0a5969405af3de882a36cb9db293fa708f06bd7e6ef564437495b323a059acbb6475c61ab6c790405c2b73d44b7e36b3817d50c205e683597a635e046dd05c7ab7f5f78af0bb56e20267a61588215a7c0747783b33c163c6826b63d16153a7c69bd85b0a0a5e774840686ee3e16a40c1c8d988141d38fc59961dd4ddbd070d2b6a821d5c2b5399bd5282a254991490794b29885002944bfdc2a5d20771c16e2159a1218245b9dce9fd7cd68e43a68f6adca3335f95d8f4f039110e35570596fa1bb337e5483c07cea00464c0f6340f2b745176a1cc27b1a1e475554e68745c707a7b1ac7d52d53c3a75cf473e373008d059e66a6af6e14efef834deb1e49c8363aea50c3128860a73108b8653051b7b1e92db628c0911205293157aa66742ee260d84aa97da890659795ff8fa3ea354233100f79661c877002a330269667e22abc6f6f402d03820e72b032dffa4176ca95388544e597ff450acb3768a3a6ff07a2ee61c022b280008dc3341cff227e82a92a48b73d4f1d6f94703bb6f6180ad372da8b700cfd304e00c673b00ea4c97d71207c3f715829bd40c52de64a26575c97194d987472c6bb0c0c3df644584bc3b2b150562c93c3e28e7c2994da751cf6c2e24a9a47299ee0e81064a86458fe45153fdc55ec7d0abd71e6041b94c968fb921e379638866031bcb6494e255086180486a00514cf3cbc211ccb7f9edec5c9b3cb00670064e2620fa6f7325ac078a723352b5c9c0aa3ca05bec01c8c0e0e4cc2bdbc084d97d202022022c6da2f0cfd9847b83e42e8efb1caf1bb12f58aff937c8b7071affae6f9770b294916f334f848594f47f1d80cdc5a8aa8066cae49ab879780c32be8dd184955bec8ad84c6314f0224bf62b8c273b4780acb813cfec13e1c2e54f46aae5b88395d0ea6ba0ab48a28fe254591e152981f6bbb7c499156f972a225890122309b26760760df423f1b2ee9a8c257355f6de3106032dfd3402bf5826624b21fc5f2795b8169d430b733828dbf3c9bc5058243247b3fd2c9ff7e3578b1ba42407a8ec77a0a616280ae656e2cb30a5602b9fc8cd0f31f05e81127a1ffd6122378bad9b7be1e5fb6d3add0a036c05d05cc8a7792ba6e393586225161338b0c5e73b1a8a8ae82676c5d90cc69ea8b41a7f8f622a419d523aeeba319ee25c182e84cb0a876f46e38dc927a6607249472599449c43cad37017edd06c44854f32c6a530a2ba1684afb5bb7f990683c25e0af842773ca1dc544664d9ea1a33a9c34d749e350437e28948d25fe8bce22205e9e64779965a90371e83f18070a0be16ca1c52a9e0942389612e78fe49197066b667bff481b5235a034ac3e20ff38397c234c9639b011580640fe2fa70d9d05b07103d48f5db969bb6ee9210cb22b9288894f5a1858c83d1fda6853dd465cd8746e9ae38b76b3ea6b26a12c807852e801755a3912eed950f8e9e6a8b2942811fa52a5694cfe43ba71842108c628c75d8e76d1565917349dab0f5de87d07ada48e63a86d5873d7041e2544c040addc9e4f24547190a1c37ebaa53f1d40f74e070affde7556a8455ab16f110e175c8c012dbceb8bf6c4fe01e6bb653d105c4a0dbbc0077f194fda64173a13b16a16285c322486a4686740b10f6edcc097de6b01b65a96a79e65806f1851588146f64c1147e91697e9d533f67659563ed5f532ef74255f5a3f0fb5d0fbd90c8df91f400f3ce1c0ad5d88b30507b91deaceabd55e2d7829e5cf48eadbcaa6049d675f187d54708400b6e25143cd806ae541d4ea1d75078e2629f8af197102a8704802f8cda3a3bbe9b42e42e42406afec569b68da2011f0b26f270771d1eacd0e1c51864849c35304f3b3675281381949c71af2defcba6573da0332552d5ab10700b10df5c632b44807397e502cd30e4453aaeac10a82bbcdb6d38bf6664d7923d161c5fd6893c1f27fe55ad050a6a85cd2d02b3afb01bc95d3fe53c8364cbce9f999b953b37e37211bf006a221b9d5cba4ef87cf1e7291801cdccce8151331ced351d958fe36157e3198df6f7006c0680c7c543c7444b59f1466620081cd43ea411948803fd2676471a475f185535f742f8e59ca83014c7e29a0b6457819cf97e58e2ee61818caaa0bfb9f91b9408421b3d52bef5e83b5cc09d14a6a882b59338c54387f814ab5b3a05b0350113f5f896e6b45d9a237bcf787512753835e730551328fb8847a3854c05070d8cbc7bb8d010678944c2cae247fa84a0506c6bb94f2b9ab0587092b8a0659a98d7746884568947620299e044056fa3874491c000a8f5565ef4aad64239eebd058661a007b3da4858b3829d328436f4c2ed70d4d34eb049f43134eb139e3721314321e05c38c7e03885225716bde74a31f1c1098520c43c16ce6e26e64b2bdf0473d2424a8189c56e5c775c79c748a0b262e6dca406946198cec722c2657160bfc70f5cf9f0842de350ca281c4a834a00e7d48243e10891d41236c203d409cde66bdbe819b14fe2ee1472a2081da8e12ac5d3649929042f7af67079de41709f5963eaaaf79e9f1594f165fffb4a57d045888440c94d9755307aa21d54f019e27d0c8216e3ab4bf117534fa427c7f1446312cb9c372755e2b66083c850e9d2001cc60aa974793f752a42b4557e4ec03640c22959418c919d3821fa258fc174ce09ae7250109ba504f1de5f7e79a37a52f914bfa5a7e0cefbd7154f5d0889ba72ac6aa4964d5bc9e58f48d3562d72b5297f64ff6750e123ac4e6acd28860023519840909fb43fada223b66311d388d094404322a6d81752ee818253a9475a2fb0b6b2ae3549f32b2811898298450f86ff0cb3fdc48f53bb8230702f67e12ed94b7ad29b8c917adc1306050403c989e093c80bce848b458a84a13f358877bf01f884de93e85512e2c7153e1ad916bf64c1df46668851f33a4bdcde32062c47cffe8a411aa31293889b08094b2ce29617d72e6e04ffcb778e5810608d2775c6788c49f3ccf212632cc670202d8cd64c836584edddbf866d5a0a1bc51401eff4cc7f351687cc147b15661266053ae7f6c8758d154d1f059bcf321eb6727e4ae69830d0b043e9d8f75ea822d4b700d0ba5e5fdab12608d61963078f0078fd33cb595f1300aa5ea9ce52296a2e039553ba9d8991e8f27c20e8816e6c1fb57e3157e301ba114ef298cb44f7fd4bb61d338feb444b042b57e7eedfb53ee0a3ab66f535a028bb72844cef7f5a0b8c22614c858bea2d218984b811260a63091f0aef29d9eeb7a11815f0c2905cf5eadb94e33714d9886953569ac27a6fb49e10f57571d9bafbb59e0a5d5621967e02475a8c2e75bf1ce78830441babba6eac0b78749ee37e7f0d68a7730c56dc53fe8eaa8ac4f48b90f7420ffc94eed65e7298b2d9fcbe137a03422cf1b724d06af5551c167a9f7a53f8a590381853a2d9a2ea00d2d50c025a428b41463159ef5cfe4c7984ba8db0e18d69d9cf0e72f6dfcf9e917b8febe5142629084316c0af9b2eaced12e01d56e8fd3d44f6e52f55936e5d97d6851ca352de91c81493f91fd0e64d93f3d6c7daf0a656f602c4b8081f0528030b13d18456ee6464e448f8c13cd3b331461eff815ad05d282e07149ad290b601d055f8e0111f93049a2954da61346a0fec500c8eadbcdfe0e0526d191cc2ea3be1fe87891c06b944c7b0b125a07fca4756f2baca4f08e4e56030db3349397af129be3fc727ca4bb8595889c6ec668213e8bc1ed7601ec83d3dccb74c98408e2fa004471da85a0006f66f129137092f1cdac0b76ebb385bcb05dd286d28b860576031f4cfa9e88f1048f3fb9cf46ccc22c59943d6d92ce16c059de43c51cef8609baccee8f78cea9af5a1273d3444b197fb00066485f965a7cf34029c64ee9f45c2060eb133ae04852df3418c4ea30864b06a977140c5a1c044fcfea0b6fe884108ebc68f7bccc8bff275ee807813e4de89913b1dee7782cbcf40ea551612d4b79302bacb1caffe4fffeb96de05a8854900b5ba20a5fb6bf1584be07c3bf0d02e5c812ad2d116ae18c23a1089e5affd38d0ac94707b71ef49fac74b0724f1211c6767ed483039a1410930a174526e59327a7f5e2f3ee385cfdf8e2da109c8d2876de7e698397bdf3850b84a6bd0016e7b09068f770f89b05b6a3dbba8e655024d92742890112a7b79d42e3bb80cd87fdf4175f1b579516260fc2e4192c67711a730a0f56db68958fe5d10bca0f12d0f76c9b1073818ccd3d9aee9487a7c5d856fd330c4fde9b739a8fad795cb67c55e2f12437b75fc936224bfea1f595484495d23c3d38511b4d9aa91314dd4db93640c24631901099ec6187349d5eb5a046337edc560176394477350dd4cfe8ddb7522552ec1e7eb27030b5d0eaf75916c871985d8a599455baea984c8509597bd51b0b394997e3ec15d0b8470f6b9c48323805a40d99ea0712ee671de2931f48d1c4ce2f678656c4272f546e417d4bb1ed47aeb9dd636f57e448effbe41ef4872ac6d4188ac656f06620d33684baf83ae163074f9c0b3bf89668a1938eeba77a9617225fa2a48f7d070530ea2b3870c738ca7d9f8d6bbdf50316c2b9feb501a7363c141db6f6f17085974c80a4bb6f113addfdb706abfee03fc750c0e7d5b839e99032044c39c00c6abff8630149cf357ef7e2e911688e86ad65d72623901887a88be3b5e57f352b2dd49f6017998e92d6f2293f96a9424dddac370d836728eeaa65b3dd9e291028da4c372102a4bcd78449a80e8a8065c9e1082af5c9822f7376f4144d2618735d662042b620d952883594c635fd48598c935a64ffae196a05363467158fab00ff2c46f0ed5bcb6c0d7694cbf3603eeaf4df65f57de22899fb2252a56ffd87334ea66c268fe4dee7691ff316bdb3e8f5d2068d03019e46d575624748de53eae6cf657e062f68b285dff153220dfbe8175298e486c8902c34e86a817486ab2b633665da1405b7e8049858838486c0f2bc9980a26dc256ab2b9b23f674edfa2fce7235d4359ea7658298f414f35cbd01640261e685d312c712108b5222968d3c3987024f1b2a13ed8d435b48a84964f13defb8c2d3e3298cdb00214e9256f6695d5e90eb07291830191623f0af066c90ee6d67e442f72d2b595d051eccd5dd13fea3f49bd8e59c8c14e54e07c69a4daf75c65d6a6d2fae2228c1b54becd429455926636a0ace266e5cf4f8858c594513daf01a9cabc4c0564558d66727d3072cceacf30b07f3e41001731226a910b6f8276d68b44a9d65ff07fe6bf78e6161bc560e7030658f74ca8b837e5e83bf40eef8f01580e61c01bc4ff4fb9331bb1afaa942c46aeca2954f37c91e34b09d336d8981d37b9f6f61b022d73c6b97a7974149990735b37f23909c0f09186d4158a94a58b36baf38f31732d504c915688541ac72b56c2c87b1a5fa209d10953532cada4a532da955deb38c9814f23dd2c1453f80c22f3c9c18b3421054ad533db055a0aae0e7aae0d5e951214edada2a811d1851ba1c8b7cabb5563d6056f5769aabe79506acd399fe2c875212435e645d02787b8e7d7fade0b24b4bde5b9e52b71e227e41d4b07f3430fcf261b8b99be508bea32967486ec4396a98e13b64bad948190c46aac272f97caf07ed42c51ec9776bbfcb3c4a699d73c2b80c885eca8e7463523a0b889de55d7185a86e9885e770afb57511084999f110c09b3c63a7f6cd78f01f42b069ca42bc9fa2d11fe1210ae06b41501874b81d31b006bac794b47a1d201387f46ca7e2e1167a5265b7f3e353366f14531bff649b245ebbeded86883ca460ec39f0860a5aa7281f847e09979cfafcf47f8006ad47d16524db1cbf1d310963ae63b1240d5f325aaa5026c4787616ac1a09f81f42c24d07ea2c05980f7c681cac3ac5e847e0414346aed0d876f7cc9c33c2a63c764e58fc93e4f7ae519d9b1974dced44df90761c450b14122b05f36092138d1aeec66293ac44530db8618f03d71ccbcd36c92d20b5e07c41e6253add0700279ef9b2d7cef8d4c3a923611012b10a89b80419e26544ca2fea672cc2c28e163542330a68908587ac90ac57adcc862c432134ef64b084392fb386aad160b4b703844c19d21804f2b98763f552238065ea0b7fd7186d1fe20f7d79f736ff1a05f9c2e06bb41ee331069e9404784803eb505bc46a8f24aa40338824c1fa000b77c9d44240c71d4d7b68b1ea24d264c7da65561c885d65671c103c7e56d801dec5127a3adb15e303839db0c82ee7ecd17ed56f2d0f20e06057ce49c57769103694b1010a433c147bd771e300378834c29198f197d8d0e9ffac14e907e436d1d8ae8624ef204eff905f469d5729333409bcfedacce25d0903d30ce8b54c7e76279adeebdb84cf8f5d66380a53006eea85a178a9cf05e129cc31f756f8893105df9953a6166a3c33351207e60432db7243c1ec41b3b73d601984a5a7f0ee4696610c95f373d4b8aa9caf945ea1791710abe924e452be6fc9dcbdc0b251f924bb820eb7e98833190365658e4293f1a5f6af0ff2f2e15fe9341e8849a4d6b70f2fc15a4824457cac95e7a2d30d39ba5560deccfcd58bd7a50b5c8855b769b5fe6e2c7b72ccef80220646beb053f334f22cf764e10dec45ccb17cd0c0540b2a97f8ea3741ef1db376b805527201b7645ef7faa321831c0b03d98259d82eb724e0cd2b0a138860b8acb35d5d9b9eb09de88b95fbfd7be3c1466e75bedb81a699c2d5889bb2554854abd8c9d1c189e6243dd99cb9d6c8b73ffabb7989c34b63b7887a3ac6928db3dca0fa63c8c56381a3fe0686887c0e47e645506c321425b54040c153e555231a09b9376a81e79de082b82a254f0a6693db3949fcebd7b1dbfc6fd33d321bf5f0d0353bece660bfa19d4fe1175da9f69e559682a219de1df66a5bab7e28a921014a9f8bfe681b583b0d702c90188ac48c1e9ccd5f3307889c4e2105e92fb2a0e018d613836e00e3571c32d4ff8f274cbc8a04c1c0904f06542e9336e08e1dc27a1519f1493dc9e73620b81ba39c593b322c67022931ac76765c0e6dd4a9940b9f59f24295e81dcb8d12e8a5863b7b54cb915579de039814d4c7adaf18099c5d668c724afcfe10b53132a61cc41ac3bc06aaeb1ee2c2c77c87035c1616fd62db4071a3d152df9a0b0d9177a6240975f44f56ab707943e36c17f189b5af8e73504a39d0dda3981f048c9ac48b4e5fc38a8d4176680e6f89069d7f71c789ac227b2de79c4e2efaaf1d1414787fc87ca298095c170fb3aea2f083818f3274d873b111dc7411d6208ead0d47d1d9be8d2b8076ce138704d7f60214f1d1daafebc96461478ed828977aeeb4204bac214d937098be2c02bcdc97bdbe28d6f46d4c23e9135a4a277cd71083b9159341509b3d4de4f0350229ff097076f753f06b1e66f89ca0e039ea6865b32227eb63b76c49ab9057873ff92c391da1ee4eefd8c029c51af368649cfcd8623e08e9fdb05055a838870b0abe6a4bda39a8aed0e5bb24601876032a741fa37852f0ef039bb4d455304f46c9644476b1d00b41c02381a3b9cc992b6ef9aad63473f53756d0537340e8d5642b1fa9e4196606c700fa70146945eacc5571e38c495859754dbc3232553d8f5c0699cfcfd4a5a35dd3511225cf8450642ba9f3321bde972e9351531e9bd9413844da740b8bf309f19e45a1610b4e176226b1169a670e826dc16d676ad84255e50844b413fc7ba54358fea8bb49d00625e6ca0c0ebeb282bb681705f83e8048130d6b18e91ed12b39dba076bc84b58ba4662e3a2e2532e6630ddf0a7acaf3910e9588875f7dda762d42824c8cb5ef7c91c72fc55b3da33dbae9e889d9b93172692ade1f5ce045f148dab01cc73776b06a7d3c3cd96da8234740bf7db378e6102309e6b8f0d86ddbbc4819bad68017438d0db7aec077aef7a0ddfad8014df250ac238a405e462996acc1a43d725d462c88bd1a175d717c1a6cf89966cdf1180b314116431543e5e4d40970fba20b1e48495278d860d9ffb443511023eddf5e048d6aca4a5272f4a6d592e937641c4b4f459df1330c850d078f8c0ce221a9f19b63c5a43c6b6664a141cf9ed8d00f23c0d37329b564aff1dac36a89f2d163327e7f4836759869728bba09862a666a3e05815ffadd58a714b00f158b87dc75ebe3f97282e2917ba40228bed2c9a203c042d40a950698de91388ea1c8a2b9e0d9033d841c033128e3ed30087cbd016357ee214d3e2f9514d6fe078b979ebda8c7bd24d56a2dcd4d6b6965352d3980705d8aae2c062e36b67a0c808b2ca59212cf4e8336e54804f0920662c18faf3065665067cfc5b082176fc9269c74f6030cf63ad2e2eb780a6bcb131f572dd14f16a6aa58862c7561b7c0d5d3025f54e31984535a99d7850359306ed70fc8e0c2e24d475a2552f3543c6b181f77a72b761d57955617905f75c041b9e9ae9db88b65e302844c1a07e888043ab5e2e9a78a0e1cdf373cc917b6b8945e7c931782a30da6f0111a1c1d90c94bcda1a77df52d099bec8402db00b8abb87b2b07808fbd728f9bbc3aff50260b602c5ab2af1324a9ddb96a52ef2eacc93801b4bd9a2700007c1bd444add0a132a0a0a0ba86fc5a05ca2c757a2a23b97eea31a38f80b07913250cb407f33b1baa77a34d92024cb275ee28e75903a3341fabdb9a12ad56308d0efae3ab4801f82816985621dbc7556f0c65aa6cd1586a9e52c5110242d65343baae0145546b39b702c4a1d569adb74e207bb743933f63e9413c512f94c64487e0b142521fea3c761813c05f4ebbe99ef18ca375a5fd5e04452779900d1c7522b8de91ce200fbd0c59faa87a81e548af11c18d2af48ea9c109212f7c679645a01332578b2d2242db7100a5eb8e0417f29f68fc8d164ff316b71aa416d9950cf7a29563f613e3f16672d967d62c24bc3b4c65b21cdef234a916ead7d8c1e9a294061427ceccca4d076e68e48e56ae01e8647b3c1f5ec022de731009d17f2813eefc80f16694a2e40e45b405b2d1fcd6b57296ddde3e18c6170fc189b8bbf3b048928ef7b2c601df936529917932e1e0c52a53ec169527e3a7aabbf1ad5bd99a37f50c9bbd59826c0981a4860e61f9a3b5368c3015b7b2637e451c1144b46997315ada4641ae75c9f17536f00ee9d1990d12db08d629a81c497f4846b3848eef90b9d7b67dd7c27727260e6a435e639d97fd15a07702654a0d1e831e8c451887b89ed8cf13f9dae7ff5566f404be0121650b965f0fb5c65812550484d95520764075359f4ac27497061432a090e94a0fc0ea218750d0bb567d8dd719a0375e0edfe92feaf5b827ba19fa1537951c905798cac56e09c3de108508439417fe50c3c94a08e63bce4dbe5a4d05b69d7accb6ad45ea35319c8b76c4fbe0179d380187c8ba1f838fed08deb2f8b202003743566e3b65c8d33c6288a8374eb0360091f98a642b48737ae2f6420da0ab5a1b1a3a6f19fd241716c56e951bf5ae5276caadfea6c1217dd341ca5646ce42734f97faad047be255d12ad393ea004e35f765c104e334ebb4f58dc8f2bb3bdaa20f2c0fd8e2274a1102785ee0bece23fd287fb7f08de82d8f227447ffc966aa6c79691a4b1cfff6c815fdb2aac31d6822f8d3f741774463953d2183f823b048f2cacc90b8aa3d096ca412cb493a83232d379b687b90c7614c7768022fc51845be31c018c2e0142122e4db06e546280327cb0f54b267516ae8a8bfd0083bb3011e938aaa404e3ae36eceed60cb012231528cde08c23755ab41cadf38dc00f968ff95bc66dc43e34ae366b560ba055b695e5b7f55fd76b38bc1d03583bd4198879a84f9758ee8c00d7414e807c36de7a2f1b0f326a01d41a01cb872e0ccd630c2b74a1f9da7d57b5d262152048d5352f15f535e9a9da88b6fdfc496440b870899a10d4320ead191deed54ea74da287c68e070d5189a4cbed827ebd794a0dcca362ad821a684b729e48bf08e6bf29523122cf60571ba80c3442d91c398fad4cd7263dcbc1cb2800f30a59a0da744a2cfc18c3c3436b94144e4f40b39ed86c524daa63669758c8a37c4e6ce59e6b6365153878b9c52c5d4308f04f761a5a17d3fa8491202d1fb7f9d3ad59695cc1b9cf7e6457fc8d695a8d56a9b7e7e00b48f9bfe7fb6f33c9f7bc9f1680f597543902a72e80fe45cee91102dbbb63d7985be4805a3ca15194736d14819c4e9a5d221acfe25677a54aa0a62235ed0459c7c8054ee379c0e77f7890dc8f5f73ad6b6238bcf4d1d4b6671a872e5c03e0caa50ac2dc316ef302825325d42e8505d842064cc2032889494ed272f680eb0b23fdee6fc00789772ea23c2548567496592a912667c9735e1c095f1f145bf52509e45ac1d8d48fda7ce244df0b6ae12c9563ef6b49c108573af7a268ba901c116fb399801325a5f2d1714746f1f24787e2bc9bfc9f5c5724f457dd8adf441f3afbe24b774d2056f4943caa088f328449b30c808c2d92511f3aec150614012a8ffecc2144eab0afd0d3add672a69dd8cc132451d8e663080753f9ef83222969b14c13c571d3b81b363fef25bb62d7311e8a9f4cb4f761e9c3edd77e076e725752be56b5f314d3d9347b09a9e96c092cd0f4a1ec3ec097d32ce72bd6fb68078730385c5831d5c3b0f8755b61be951e11546802a798a40372b4aef37f8b28d81dd4e3f168ca4f592c5f591ea7e4eeff1eb9e010af1bdfeb61bb6273d82d9557534c3e8a81a6370af7593625c017d34d00edf161f6d2e552c08773d73d1ab09aeee2f356efebd36937d22efdcc07e03f4e1c76d26075c03d72f9999d6940c6a0888b93c88bc4655dc77e164a37ed7f67a815ab1b9c70d976cfc2e031e26982cbd66748c4eab2d3b2cfdf62765b37cde94d7d2bac2e8c2d59bf9c529750cf3e78e7789f1de221757979fd9af9a1213b2933feb0bd25b5562d111f3c380d24f73c0ff63d60cee1508a963bb04b4e4e656780ef2b5b698b827b115f910cfbacd7816de0bcd22e2e6ef56ec7843d76d1e9a6c0f675f5679c6c0ed91eb91d92220d7b56e60c1598e124c34f0fb21301b9a43a5bd514c633e8600b73b57fe5052fb0028f685ed39632f0ee6f5fef163f051889171a1f7b87239c4c70c13c83f7f71adc86016dd486d40deb844d180cc6532bd5c221cd8382cfff4b2b44c002faf299625b408ec24d07a63688fad22bf043ab5c5c187ceaae8193f607f0691ba76d217fdd27fc45a196f82370fe87723ba0e012ddc817ccd51e8f2887ddaf844c49a1b45c0ba17ca7d2d202e2d465af90cf88a2ec4dfa93ddd6e49652a69452f805d8053906b1c2df7e761fabcedfba8f06a9a522ac1a7f9b9d7cad13227decb86e91be7f92ba1dbdea59b559a7b7a6f45864e8d76f63443d41542b465456b7a3554c6a6263530cf4b92e91952eb5022f9d2134dc3eed2c20911c7a71198c3a4352d06f675c53848eba44af9e3aa3ee101a195c38014d0b473c0c490146077e0d2d7183c2217ab9406f567587d254516bea0ea179d58fbe1fc9ea76eafa0158897025f8aadf842043747eb46a278b47ab9af5db25c6440ac25c2102315e2ee8bd2f9aaad3dda3071d4450c30b8a9e6892a676ac478c2d70c801cc13495c5dc65e41030e5ac400cc92277870359adacff2164f09b2bca0c40b8aa32f4ae0da337503301461051193166e08729181802c8e82c8b081872021d718750063ca583942872860f4e06a33b56555a7e1170d660c002d09164874810489255c9814456f28f5170080c4911f236237281c002c216141340350858fa38c1f6668a17ef46316395cf86051a424899433ae9e69508279e081e6af79aee567a5f6d757d1737941ded56fa305fd1dcac1ce258aa1df1a31185442a0c5c56f02878145a356c57ce8c730d210b26ac2cc42b7c2d8a57d0f9207c0d8955a2f45827fe9a2491a97f624c89f9e0a5484f8972e9cbc5cda4b2fb52f7f5d24683b3b3b3819f372695e6abd20f3b55fd7ba3eca0c73fee96cb8a027d4b0c0c884cd046f31cc796b7424b2ff756b2a04f7d61be20569150b09b24be79445d7b66491e2a86e96161ccda89b458a9e7afa22b26d1a8170d2227b5442ab360c2fef6e74ae8456b551152202bf18d60be8d7c00bfd180b6311837efc7a796bd670a5095f93f33e8a7a7ebd58f59b95f95579540dbed01f22f090a9b5208d9df4abcdf78ec725a59c7472a847996c389b5289a462a99a0b4f2655a9526302815193068d86314628e1151a3538ef52f2fd795cdb7492823f9fc7c5ccf3a7553d817808f19fde8e7b3abeeaf9337f3ac7490bb5f6a55b7406edaa9f6bcc1d76a7d47eba260ad440771387e2a4a9f49b348d407209b937837cd55dc3c68c9248ac7131ce19a18c124a19238c304219531cc9247f23994620b9e6901618e4ab8655a257a57acb8593c3130a7f5d906150c32af01b6ecf2a0eabe098a1f2359c3254be264b2610a20d6f1b366cd880bc36aa74643ac6eeeed831c618db3dc6f81d9d061a67ee8e31c68edddddddd104a8fb1bd638cdddd1d638c1dbbbbbb3b7677c7eeeeee8edddd1d638c1dbbbbbb3b76777777c7eeeea884fa73dede1d638c1d3b76cfd8dd7ea236b1db04828c31cad8de9e5624d9f3d998999bb999390061b53d22ecf138731532fe3c33c40d55cef86083c280a642a8f1a86b61882a9950a3d843f937c952c62e624c83cc0b8a000ca1c8c837389df3801a6fbc552e732398829894818f66b1d87db053da10421c14cac708ebf2b19563ccdcc5470a3e7cf8586ed24e384c5118ff8c78757776e7304eeaec66f3731cbc51e3028f2167e8b32dda2b5612a67ac7c12f8c857dea766286710f29ff639fba1ad4e04aef63c94ab497bf0c83cd4ad8a77320967ac33847e8c75aae57fb9095700ff6a9dda15ab53b34024fc29dd4ed04e3b3b807c949ddff8ca09cf83689cf83aadd6824ef650258c75c16f7584e00f770b249d4d9b5475bb55cab3c4042b76791b3ceeeb7a342b82301dc8341804eaa77340e19d5afabc416382861e4a5b2ea2a612465888c583540dda1318ef0a9dba98766d43ebef61fe753fb6f2a7f46b40a1b56293dad5461bf34f990af2d07e31ebdb59ff3c15219a82baa55dc43837888ab7495282c65e7c3bab5aee594700fae3e754dd0bb6e19dc5d3284504a97efd2a5bbfb426f27b60e9a80c4f8907d709a8a02a791df5ecac7d6f66c98f98cc4fa01aefdddff240c6e676766666666e631ccee0e7d32ce3fea067583e3eceeeeeeeeccccccccccecec1edddddd238450fec89470e8eeeeee349a803b2187e26e7748e10d24030251d4c72414369bcd24f3eb3884cf0e5be0fe106846b13973373373944e0859f27a4df430636294504ec8691ace3fea06758333e7e4267cdd50a91ee771d684628e296772f78f30caecbc516a63e333664076e6f7b6332216c528a2929824090e4551c427222c2a89b0088b4a6a9f02e21109da3c0e6a293bdc83a1b08efe662875cf745afff8aaff4bfdd80796d27194563114eec122581d3b700e2678cb5d5d23349f4d24b06b7a3b2bb834af4d2aa022f0540fa0aa11548ded4261d3d4e8c5159c077afcb231150d17e414ca20c182a231313082869e0a9fbebca8f06f503a5e4705e0d2240a3050b850c5071774a1c2d799555285ffc35b3c301c8922c4183060a14516176ca1c21fc242856f81ce8915c65475895e4abc84a81ffd325befcefebb56ce2f68bfeae351bbe1deec4a3eecb85dc98fddae4ad6cfc84e0810c76b9e108437a017c402ed3c6c3bc9d0afb355bb3d28ebe05f6f32e51ecf3af8b9b7fb8cd4dde19b5ef14e3a244647b9553cdc99d1cf4825b24f324580f424efdb87afe3cb35c21a2117f7bedff6b2fef24980af792a680f5f7a2a5011a2bd0af299f0ff9c52beeca8552c6b15ff9cb32be23197c97cd639cb9b93692d60aa54555d2d6060553b42b5e75408fbf3eb7a9f7b31bd2897c665bee2f79904368b1a5fd3d2398c926dc2c1816a20e0e840b5ff6610d26f91635310d2af0984203e84481eca57fc42d0fbf9cdda09c16fc1f7a359a9cb3e2d56b72a50dbd2f18a6da94ded4b6a7fa428e00f5f08842fbd1d085ffb1df752f1d7e59d77b07fb68f35939986d323229fb74951a8d73c227376df13d17eabe67dcc44e273add1143df6a6ce65eba762e0e0496d94a0fc8d9a1409faf563c1a0d48fbeeac76a1b1a40b75f22254eeaf6fb73772757a7cf8681abad1e2a722bcddf6efa76f17d3f7e45b68f1de94b5d693dceb8f9e611d9df4a5de9b7680221caf5844c2f4dd2132ab58f17553301d966073f76f3b90e48fce911d9f7875ed79f915a84abdbcbeebb01425a2f0564a68010716fa7b745b8ba79a9999a0febf4d68b2467aae67d1fbbc951129c571a46a9cd9df1050da3d496fa4a93b1ab8c5dbb602763086ae771efd8169fff87b7e6f3b8a6f647785cf0f763c7e34a5140fbf942b49fde0e152904a6dc9bd45756c0d058c1a17e5f61036d24271e7840bdd5ff3dabf28ecabf759167ac1276ed5a130841a6af7630417fb9b9c190a0c2cecd51347fea3a841036f4eeee7ee81042d8d0bb658f3c227b644f64c51d2c96dcc16a150ed9237b5ef67477b7ec913dcfff3f5fded264bedadff9aafb7c9a42777b8aa89f16abebd928437ffe6c5026f747e7e6d8ff20ded2f15517028c031750af423a876b1573d7da6d15d23929b0f3176f6e0efed9ec697aa2b012ddbb1d3b76dcf7dd85be4b37a7dd4b16f91be10c58773c917b895d0877631a8f3511aa6fee336a5e60bbb87b03e98d8aa1aa55436c8ef663574405c9e087346ccc5fa5f458d334cdfb1badf2879dca48acfbaa56e160175bb1a2f2afc760fbf855df84aaf2be4eb74e2f111219d48f0e21866fd3cb105ff174459bd92a117c48e758c00776d22d1fd240e7ec125ca2d4a39d557e71c1c2a6a025b608d58f7d2ad39c4f25a4739885ca437c4e4afd835609b5c762181615ff0c8a49b614ff8d661893edce00a3a6c90c6b284ae94d1c143317d4df0703d92caa7bdc09c98fecd18b9164189249641b372e8c2a954aa5da36ee628c1eb9771d274428922f3d944ab584721f6afaa38228e3a070a0bc055dfdaf920155c5b648d65386ed0f5ad59bf79550b71fa552c9d3f9a03312abce0f1f12a173dc7b9d1fff46e2f61cf3b6711b7f5f8d44fec9fa2963c03de9bf7eacd80de91c0d85627e9217a455ad692f04be6624d6186448b4808f524571a8520c343ef4a6f6f1db48acdacf19e37b989a0ae18baf793c959ba82da89e584c2ed94acf1b3397f8b7d297a18fe359b105b78352ed87ddce099be4ea37bf033c95fb8faba637bd29c22f6da9e3189f3b147c525aaa1408ba5520fedb973a22fedb6fde7969ebb852a9e4a54e4f84bff427fed2b3e9495fe36dab4c9cf7f97f806be9e3f3d4f9a56ebe4bad4bb90ce813c1c4085146fd58b568f6c0b3b7641a837e1522798be4cd923763f34ba881d5af06b6754382f8b036548c55ea9affbe964effa9aaac79daaafe42e3476d0b1bdbc2c0e26c07a59f04a82d46f6809257c2e67082aeaf50140a1a557bc9ec7dda7b11168e5ef5541979f98963280a055946d860614a4266aea40788014c510c4354940d1224104208a17b00ce70e952fb6f9a883e99e006910f50ed20d0a3040a2d4c00c5a70726b02708d31162d81f03644481c689155cf9a9f2037ba2ccadfc9c190ac312036001818a5203098c4d490a6c985f14955ad004288c930fc030225232d3d2f3f3e344c991941c927c10c68b879f0fbe9011c16085c9074746f5a70ad1922bb40ad64334413e241289442a23ebd59699cdd98bce60a8d9cfcf807ab52c343ed0e03be13413336364466666d6abad1f0a084a8406cd96cacfb1406dea0ea11153673082479a0e103e73fceef627d2120ae5f76f0e635b4839cbec7e6766a960cb82eeeeee6a4177777706babbbbfb023318daefdccc1dc6bd194ddc9bdc446c8cbbee857b052dc8bd68405b8a390e569830a1849929bab0c28b25362f5049400f689a8009fde033830c37498cd062742bac50e0282181e24b305814698aa012861831c89e22a8501c47b9ba8a10439040cc14a1218270c2675d5081bb3b6fd971021b5ef8c122cd0f6438c3e05848ef9b147a65a84851c3141ece60f941c9d60297fe30b59b0ba4be1fb4bb1ba165062a8a78c2ccd0172e7e6146fd761cd1d005bb59e04932d352032c8a0a6430050cee70a1769c0dbd49863ca986d09ae8a250ed356f8205ab436ad91cf2fd87c6d7de59b03d66bcaa7cad9bf1aadec476b05576bffad5afd2ec97fc8e798bf4f2dd49b74853aa5036336233bcf595d4a4bc513df99f63712dd0061a1f76156f7191afe4cf4929eaff53c9a22a532490fef4274f855398f6f2b916d446ea546881f4f477a89722e1f4f4a9a702fdd3af6b87f4d40b42f2a6af98a948c9411cc44127c8643ab3869a50533eb743bfee3ff2e5a4534b95ef5a8adc8b6cd352d272f3aafb1dab32d6393fde5a977c07f2168f4b3ea9e37179907cbf22a7f7a1b41ff8a23eaaba9dcc18b1557e39c60a808864a07941fec94f7108818689e69fcc4c7698eedb8d84320ab2319e3c71f24344191727a9fc373a6706a7c586f338db42082184ed9c9360db1b9b8c428bd81cf03f77225607fc8d39c042bfeea02ef296e9e17b4fb74c9e0a456dde86fa506f7d053d8752e345a9f08aff7490b7784e4a51a87f19940d0d0d0d0d0d0df10ffff0cf0ffffcf0cfe4e816631b9b1cdd58a5f797b738ef9b30420eb050f87e65484b8c74655ea9f0fd05f3168f0bbeffbc4bd90e98abf43ed4ab461e526f28d852a0af6db9bb53ddfb289c246afc1f42ba6563e806961ae329c6d8b74335afa12666eab74ea86afcde9c88a4c6ad5ce7b444c2232cca5bd24b51805d9b2241aa203d572c71c72d5b0a466685f9540eea6a4922ab5b731f9815052d4d19afeadfeef9120a7f738e4915d640e1a34c1458d7f455fcbec65265ae81f2f7936d7f6788a1fbfc6acd905122fefbf9f796ca9559a8eb7dfcaaf0b7fb4007e4c4f3c14f8550aad043e154f7b74b65d56fd3d4cfb7a3f1a2bd807d36a1f0b47a16a2253d75899e48a9457589643041dd4e7b83c78e9d151410f484914bfb15b68b172780b9a810d97e7eff8eeda06bd7fc67246e359d0e8faff9ed759abb8d33bd4eeb6ca78e796c907b1b6a4365cd7bc73d77a7e7d139a7aff993e7a3e66b5c1ce77d089a98ba797f230494558455a727a479ee00e992afc35f034bcde97f83cc3ba7183e0f138c74eb011f0c51fbb7bf8dd5dea13874864bfd760c7f84391f4ef391fae1a8cd1e0f0974c5892b340f94a424b695396c61ce5dcf7ce57fc2ca9c5ff4c7e74bbb827efc83b7560b132e7f2f0523b4d23ffde723a8ee4754ff1a63a0bf66b4b29df16bb25fa9ee4254f72913e63b54772fdc7fbec59bf81c89adb9d2abae7c42bf38ab4143d9134a09f138908252e1f7968cf9ca65cd10a59de6c2e6f03f751a0babc37fc2bca5f5f4ca6bbc8f831070de77533fed0573cda7460bba757a297095316fadc759f5e72f2a19dbe27625e31ebc3af8fd198ce5322b6b17aad78d9a36f788faf10fed1ae24a4e6c9c97ed0153219c2afc53855e0a0857f85ca1f7f1188155e89522815df2d9253d18e78adef4d5d26e81650cf9e3677e67ae7338044a68ff77a3f273b31e1356e66a9755bf412b492f49d7e2a780c085af294b4e22cd15b894f1a76318d943b77c9156d0ef4656217b2415920affa9cd26784bfe7275b78c1dd6d1bf35a494dea3fced0985011b163a9c000a8704f5a1b12ed1096cc04297d070021810941301ddbad862940466eba15a111704b53182238296aca88086418f7c41b9a02aa220c8548884846290a28c0c21e47a7a8011f990438908221f64d8c8104d29d304d1142e484034a54b1744539a989285680a124453ac104da902030a3ad95286d4c29824aa08832a2141081a85aa4b44822395465d221ebec0b2fd0761f0a7ee0d9ea81bb5bbdda33b3b843c81dcddddb51997567507d1b62331d4655a5d6f69335404323263e483ab42a4d7665a6a532fa8ca4d20ae6e46382f308a13080a94d059965ca894444d01ded0ce4831545bf69a93516d6de63259ed97b136d366da8c0619977d34c8b8cc8f220d32dbc19ec29c62b1d39852c9db707aa09fcbe877723ff299f45c165db6196d46d1a3d176b0db985e75257daa6d4c2f004bfdb6a34dd6aa9d920bfa4d2019a3fcd81581409bd10c286a314e206f919e144bcccccbcccb1ce366f49ae647da439fb96c33da8cbc3581269036816ea886c2919bb63b77e7082417c9db8c7cd58fd383cadddd519de4a49809bd09844306edb88d69553f0e994db619010101e11cd1ef143bc93a2716e664741ad3399f36e3228e344b5bf37293864c362b87387b42e7e6f013bc355b77a0ea4e805af5b339bc67be9a00ac0e5f46fd7a754fc3a2ccccabba4fe623daffccafd3903d9fb54a424167da51e7ec7cc140434ed100d8bbe27f260f602c57fcef0449eb80f85b19365dd2d3c2f4cab558ccf7e4458bb991cb9c8c7bb10a10b30bf06f37325941bfcdc8c88d649ca90afa6d469a0cf62079570f12ead25e7e8c69dd098b4580bfec4e2f5805f8c7ee44c52ec0df4f5e3687ffe6469a4c9bb999ea1f37a3cde16fb2827edae65acc0608eadd5de837b5eede65ad9fc650f73cc2a160b8ebdeb7b3fb3aeeee0e7721162cb8c8b62be8e7339fbdaca031df623640d0cf67b2ba7093ad7c017c41d876c0ff82d16634d705b47e1c7b1f945de414b2471e914fba4ce1821ef9a447f6c827f2883c22b9c8232ea0920bfd6637336f0a422943748b0145afd78b0517d1922ad57f3f7652dd7fc781aa3bb797a582b91041599a80c40a5fe8835e39c3aac356c14f0121114995bed43f4e3e20a0d4573c0479dae511db8c59942cb498619bb78b0a305832012c7cdc47782226030b1b7705d68f58263399c08c8111d8aa26db1cdd7e66a3593e46084f336094c5587608bd9772e1890266285280c2fd0766bf71d60bac6e5f1e2c16120a211cb212638cd17405e5871be37a8c4fb950fe58c423d3e03debce5ef507c1f966102a68bb9bbef8f24c81c6779918db16b252118a1362044c04d58f724a68d7257a9243551d795da227383c5992c4b6db9abf4d4fddd264f7d4dae1171f7ad0bb57689ed87e24083aa32ed10d68aa17052b8b940af7460b54f55617cd20abfed07f2e51fdb9ced9aa3fbd41356941f5c7f928d5dd090caa6fa161081e1ee8f49caaff8f2675870154ff2116e81296a8fe1ae81c0daa13d56045f52f72820ed5df48e720a0fa83a0a8faef740edc4a640397ea5c7ea4545fa0ce5922a034d59fa138d10d5daa3f47e99c9aea52ea32b4f23bcc601e2433783283a22d8c0803c89b788d23990251eda1f88c941830b1040c28a63833834d4f13e8f22dba683b60269b437b4df2f0968d5f9cd47fff3cae1a29e805e9413d07cfe3dac04637e9b4f1fd361c05fb01aadad7459f5fe922239c0ee52bed531bc31ed51c745dd4756c7d055d5478832b745da91fe22bed7f878a900dbec6ef50d9a1228483efd71ee5ed501182fa94b7f3c357daa3be86b74345488d47793b3c6a6ce0ed68d95171e075918a870ba5bd8d31e8ba36f875a1bc14003c135aa5bd4946658a1414f1f37ab94ef095f63656141955ada749fd68b5b243dda0e397afb4ef8e4403fdbaa86a2921fd1b7cff061eff6c0eed6fc050edbb48fbf6a27dc7b48730edd7db4803efeb59d56ebccf5f34bccf6133bccf7f6cbccf81a8f779d0c9fb36a6d5789f5fa99ac9fb7ca86a9cf7b996aa6d9a7b21799f1b550d6af204b92c207cc8ae72ef05e0d3045b07707777e1b6480f7f7a949e48d09b2357c2aecbdfb6737fb891c6196c27f046aebca809631956bee882d684d96ee0b20dd19bba444c864a46505a97884995ca440ad1cf955dc7d1b2a6006b8a280616d636537b06b57fd7668aa0b56010ef879721f3090e5289685f8445224540f33e5699aea874ee353531ea14cd8800000000d314000020140a8844229140241e57b6f10314800b76924676541a4b845110e4388a52c81842082000000300103243334327089d468be4be765352a73dd5ed262642eae596a9725c95dca7054125919e68e3a3cc940bc95f5c8f91f97771b40249f677a9e9704ecf67ed24ff31a3d784e96706897c95934c7360d6b90e99f7f7d9ae0cb02eff6d3be1b40078aa9dbc0ce74ba6effca33574d15c33ab308fb3e186b4120c1287f08388d6d210665b805380457b04bc0b0905a8b4127cabe81854421bcf39245a825a188d4f9e4ec79544fb6a8a239f877bb05dec2c5709a30a92853f79cd9cc30953432b1356a17264ed65cba4015c2f4f8954133b6b96d3072df603e9f2d399495755285072e6e1a409f314c8e2b47a50e56b1397a7203ff554151538c5ab50b29444fd23f53d1e73ee33da0631f7c8164db75aa10e4acb4fd5af6acfdc2a19aa6ee639a6cbf897ac9de862103cf57abb70112e47aeee7cd94fc876f49088b019d71b1a7e4fd1aaa92c88fdf77367de7512329aa8f60d60bc049bf96da3dece087041e8357e2c3e25fe6fbc96378406544fc50a4eeda8d5fe5df1bc815af362af772ec70b1cbf24ee92091edc1641fdb788d99ed7e8d3fd894c2ebae832755322153daff39ffe3de63acab2e4938b146e932cd313151bf4f435d08b0f7a5a1c5a56568cd44b702cc62b5801921c7dec94faa3065019fb4878fff5313e8602e027ca77481fdb354d14409322bcd95c582c87c34a4e6ab8075346a6c56b94c5f1f2a29703ab2a3ac0d397d20328be874ea0fac8c07b0c3b8195fa14c78da6577adb8233ab4a6e4c27dd34bbf63629458b4a5c7c540c44c10511813db558e3e3a156ad12d54cd1e73d552fc0e28c31b6f4e53124ef7e51350682611627ab8ac03e2a88846306e6ef1873bf1956434541a516ecc108f914115adb91abc39f88a8a08f8112c5ceb2fdb483c8c68455a9175d2ad11ab8d7ca5aa0c65d96c8a8342919aaa072d09393a986ba297232e42434329867ef7c962d09cc9f12104343c7a33dab3931dcd8d33e1cd4f5d292635a7a534dcdfd6d6331c01fa821e45f9935f1a428b65a58792614e2fd65add6882ad0bcbb590734e5831c672d8e4960832b438a93b933800e458dd8482cae12ea52f94bb8b8c55f49c010c131d7ae1d09f39d1cffdc45e571976ce4f06f1d67701295f0fa093b047949c7017c7e45a68c2906c6303a65ee58765a658719a529e85d843c735b03c12e310ef3c719390d6e2fd8779f0e5b4a29c0701d1ccad155ed83740b476a8f73c970dea7c3a4f7dab3f76923cab0a34d4afe7ef4bf13f371a44b14d655c117e3877516ad9e1b25c6be3f2e782867974b31b13ee26991353b2f4263f01a9c856ee690f05c0405aea9d7b1b325e5cf875ef49615517dc50e828b0d27b28c68c54a73bee3fb129e022508e0e9ec06f1ecd8981d6607fcccd9e41a98dca96049207b527c467f0c71f42850dec2243511683aaaddc22da60d7d04a54da83e6280e1bcd25ad3fd499c966e0813bd2a0479ece3fb115f503c9900b7a1a329e255471b5ea55c29fed3e880c84a9efeb5c33205131c2d457581d6f9a2b12e523f6552d19b68253833bc4e9dd95240a83ac8c387de693e6bddffe03761595868b4e3b2c3b5b7d62fcc22d69591c8d1a08f9db1e396e61ec8a0b77234ea2aec4a8f43118b18b0ad36f6e68e90731f22e694911fcb9a9f675a36f2dfd9f06e4b629aeba8462f26175f1e252c71714ce67e30cb708d5ee94170ddc782c537d1d8fa01dd5e0495a154e45a8cb2ec513f3312c5932370823c4852220a53e4072bca48bf343be65217b7f6fc15d542f82d52f44ee7e47ad0aed11355bea84c924373565adff25ba0945359bc3fc6082641321dc25c42ded3eafc0ea668828760731d2f32b5e4ea95123752321d39a6972bcfdc92a8eb434e2b23090b90a8afa6953ad4b40ff19c11daa36b77e3667210fbc2be744b64d0e24d926ed184607c9b471e83bd0e45027a9650df2bd452bdc24b1064718257c7fd5ff7e3f0ba56a5bce115f0023c270b98891b72b444e5ba82df42e1820c2c0930392d7ea4a8a84362ce5a39c4896f4dbc30210997fc674fed0c25996c5cdca64683600f4fa9634ebe690709aac3c13a3b3afbd7f50a6e7e06ee61c10710cd0f97de0c55b73aa02b2fcc9bdbfabe47debef3e27a1a584f5b65bfec08814de69633117bc3f11ff4b149b24b3d3082d3c6c5262d2b579d4479209d86c01478b47a8575e99d7c8b2563bec376b729cdb46d164f4abdda37dc6ec1071ec5d523d0cbc68e6246945c46ada35c8a763187c899c189c82fa0f8ad01e203f566c73ed7353051e0df45762ab5c8a188b6f67fdb74e4e6d917e0a44959c804b84e3ec19dba0a6e989193e664735b9d1c061443fef0298dad56a0704d5f54a2aa92ac7ce0b8e9dfab15beef972da607f8f0a600d674f325bbed2a4298c376d075a578ec6d0907e66c0f31074a285caeee7f0986beee279a715290f4963d68b8786691fb216f431d29e950a4161402c15aa902d5bd9f82ca739e5d2d11d8011f8e3460cc1ef0e827b13794f40947af72266211d03e3f8c5c002724600cf0430c4270990b5d2940abec8510abe8eb803d9cf33d21a72c883152b48bdbb6ab6c15251bf22d9b79dd9c40887c38303328eb2491158c2df97d2bed738a37cefc71860f62df3bddfa2b5f154bbe8d5fe506d1075987eef2a520b6cee262c363ef5734515ec61da71af9c043273838c64437aa7a321f9fc516b1a1d23bb0f41ecf07445a153a5c11d612b66351087b9b8969df19ac7fdb18611c6cca5a9bbe5f4db9ec05aeee7add44223e077301f6ce9be123c05060a528f6d7c54a160bd6f4a655deb7d0addd87c436deddeb1f9491d836fa1418e5ca9000456318106ffaba28bcfa945b866d22fdea8b21a2e343a465dac29c3fdfffb2a3657339d2b486cd3c490a29f11e225c8d65e1f9c75fd7c291ba7dc45b911c0cf0b8a4bc0820ea2019d0b40d8d0582038acaae9874085eb80fed52ddd30c5b3fed91a7fa1ed5d54974e691edca8c4e37eedf4c0c0e15c6605dad622fcf712ffcdcc98435e4d6bc0b9cb25be4f0680bfb68fc54cd0e61acd3d497565ae87c8dfd9a4ec204af576c1b9843ea6ce86e607e948d5cf434cd307491117748721811238aaa101666b135fc2ecc5179692eedf5b603be39af3ad305e12b8eb51dec118b3cfa84d1b7f06b4d39d160bb0a960e37031b6246fc0c7b880c45e0a4b9a9311f508008e96176a504328e878fba0d20837c4bf2f1e3156fd8d0680cdab23267ff44e4e4e4f5a472c2e684f4948e6469731d5ef8344feeea350ee42297a492d58eaecfcc8c0b142b885cab8050609133ef99a6e33d09c0a2f988a8181807dda500fd86a0127127b4240e643cc623727c0592608ec9e6341a75b04e6c50da29f92d0da2bf70fb8b157ea924f807f9ffa1c1354769d8680d19366cba8f1d2f8ddd855b1d9a9f039189d086de3cc6cb16669e364434a19cb682c620f3209f610ec31b7fd57a284736806f0809bf1072c3c57285654a793c7300425cd96f960c43dbe4d90e0e335de4e26915d408d1af0df3d9e42b6aa76c8993c59345aa8bfa8b46d875870d20eeb6ed6e30da6c547979a46bc61b7e5136391e38811ec43cb51c715ba512f4f251f145a1dcce0807a1e8ff2c58a7ef9686cad3d52068d6950fe22152c1a1ee86bd682c5f140fcbe1825dd6dfe1b99f90aafcd2cd9c663798806bbd563466ea4fcd466753529d35489d9ada72e593f6750ddb48dfb7a4a61c50fb36afdafb9dfb694252e8834bbc3a10e87d258a6f5ea33344583039078d056dd7f0d8a08cb736a9256678b7d0accae65e4b1357520284a2c9caec892eb9a0d980cc938196fd779a4b034596c566b2b47c62fc383da106ec6a738fd0e7f29fc205a352fce1ebbfe698650f0e4a1558c9237af033d6ac195b45dad555db8f62abeddac6c16ab5adec672833a5cd29e529dc903b6c788cd46edada86c90d0b6ab411492185275b2c2ceb48f6462496d558f02d37a444f7faf4e7de9cef057adedb94a79b44a162c3aa59c9190b6fef4b49ee2e24e78fcabf03b62e5633f955d3a0e1b33b38e84a2294ae844fc0bc1d7ae0f9f083b0c1ee8e1aa606e5640ed2d3824ceb14091e277bb60aaf66bfc8d9be00348715c64aa8eb5776ceb8089ea650d875c5e31e83d4834bcaa8a77016d8ef5e354383c96e464d0209a981933aa2b0cb72679aad1180d493c7c9949f83af251ab334545c3a36825071adeda622ad8b2df044a6d4340c944a0b683a16137b9b3f18ea8be3649c267388b8e831433f095e9da76c0312e9324432b84ac7259b23dd90212caf534a8346810e5eeae484b56d76b508161713dde5f1732bf009e17dde607d6fde1b13eb22fc181dcfe7241150dab927d341c1d694ddbe8ab5d47f83183d2556c659c0df1f635f79581ea9c83263f72cbef8f9ef6e0ee9d36b9c68f8f05b95c071555ca7f8c6f01c14d506ead5c368ebf446216883cc3d42da9d131d10ce2a2d4cb7adbe1e039fd1c3c9034ecef011d695cdb43f4310da96aff8d6843ebe1113e57a6e1274131dc56174263a9579017dcb67b58c0092419ba81b0efef6be03d98da4d2431b5698799246325798b3cdf9e57376b335dc8c3be458c46147f46663800aa4e4a237c5fb322644ffd0cc33d297156a967042550a9bc1ff65c7f6c5c0d7fd81b744be7358c253fc79222ee95d6dc1fa6ed875a4cec9f008945d15e558c1366cdd37f5884e3309f0ff38a0bbc793663edb01f2a47b1c7af644a12c6463344a471eea14fc053bc08e6a10534ef5365a635ea0a04c47a62c37299f2c31bd1865cf5ea07a034bbbb83bd884756e7350af0f5fc87da625c47313149fd942e1d0779246264855554586ff74d2c56d0abcb66efe148bd01c9852997e48a181fd0efccd46802749108710fff4de68e8af2d1fc5722a9b4e23d89dd5570bee57b4778ed5038da229fd839190b9be1ef8bda563a8df516e8de8288f9040587b7b342be5f42f4f8e7643eadb5b080f7565a06abf9551ccb888c19e1b8090a836e178e4ef9662a0630f79b9915793fc66f2fc27ff96f27a955f6a79b5cbcfc1fca2f16b86439664b443a4401e1084f7fff1afaa5ee9da7fe080b66c5f4923de68a7ccde4647bab9691c4dfc7c34a7971531a24f994beeb5a34473a45df9491b74ed750a11866543ae205a039a8f54c4f366cfab291e4252e134969b0ad7c99c678ba23172be2afb7cf4962ee73352b5e1074c193212562befa44f635dcd637063e58651b45b91d13e158cdc54987e4e1717e37aba0ca64f8802d837536d60f87fb12510e8859877c9c53ca04b9e7f1e3152040831fb7a1c4e94881e34499c2cc0b8211d7b8a42f3c894213c1608606f983e7b25a11091bd3b215210ed49923be2e0159deba1806eefd0a8b640d6df80f008a83076fdac8a2feb30eb3e624f04b673de1fb8d500e569423a253be543cd3a3f3fe64934c4dc98f6e43be1f1075ec559e54f97bc0014cdffb2e3e7ee166beef294c7df099b6ff4c8a44c76738535279dbc9ba0e593597cfdb20c8618ceac5d118d4cc1568e9b3760e89c7b3495a1bd1fe1bc5684800f97d9ebc742b2ef6ce320057c4027395fdc1d4356e90ec8f00c998039c19df618a879f377f5175eacda8576f6a299d302ed0b26ab58a89491c0130a945c77e8b70ba28f72775ebf08d5045c99958d2840d1a5152a74943d676e5dfccb54781ba9ab180d84817f6733467aab2e2675d0a5e7d881468f6c3af6a2c963d694d55c5a07ca96fba427686315c0c54d661409ebb5b658a621baaa5c6154d87dc7a3fd17f0a8091f77410dff36ce6872fa830fcff5b506a07eb05c684a739d0a0826089b9a71cbef2c288adc1e231bf8a6452e33b1893d4cfc3ff3cc9bf31ad2deff8c219236fd87ac2c25400e8ceb05c5cf52f30aff99db8e70389dd2dd8ddd2874a0d7adcc779ddf65b06296b6a4dd14ce722e5e7a6c95e0bb6846513232522cf9aa242009ab841ccf203502cc1774ce9d864eedcb689f5fa870081c0f8fb588f5fd0c12d97c7a94dee9cbfcdd0e583e43a5e1a8f53430a6057e6de3c5ae56528428dd1d70399f8c02039a6a52863cdddff01224587e16f37152d9a5204be9c0d8b705f7666d8d96c29fa6340d9d284353ae925b04dd92e455d30a17489c8dfb9d9918ea48a0d26431541277f344d6dcf6abdad4c7faa07acb5d51c329aa412122cad1424cc6a7e558c5f1c423bf06b14cfcb947d5a72e4ec07781d4123c17c002152a98d587db1b68dc3f65bae2094c843470546ec93909cb644875d33fab9c7ce442e2e7a5d630bb41342d470ac3ff76fd561008c6880b2b9d7b2eea6b07fc40cb9995363511d9d4cc557ba1210bef0f820a4d1c60fdaadf7206f7fada7aa8dd0243c853059b859a211d7b056ec68e13167876205dda4c79104423045d39998b639c4dfa167a91111c0a5161fbc1180e57d44eec3444ee6151015ebf8b6bfcaf0f51d05e93901854a49754b512031d008f5f846990d4cee1bfe4d42c47b126c41299e4783c992cbd977b96ce54169af2436ff3dd1b31d44ca9264ca42662b33313e1f34406fa6ca76258d441557268f14f1080fbd1ac2a2cbe31d5d2e83eedd4b08c834fc9a3996fa962117f906a4934f913e71f082583e67ce22b396e3e94d66d5e01ba08768ace1ff428c9912682ae49f3b4aabaad61d16f76dccd8f11bba92684ed34e76406d921766571212de25357189e790754414bbd63cb11bc042600472688a27ac436f68dd5d9235c9c1e8a36d2cd20d05b602d4f6745455eec19cc8e7d04ad88f02583719e17d3e19aaadb5025f4887ce8f2112d2f67fd9950e4932433a0915cc8fbffa87c5f2135230174924b9159ccd3b0e1fe68fe43f8183c4ea1f7c300b2145bdad9db0ee04459ce13ae286d2f0d3c006303854e0a8e2b81d2cd647e1abdc5661fef8f4f09c8db663ad1899585ebaac986e4e8e9b245ee3b30df1fe65c97a8246a01b339953b1754e908b1550105f9c35309525aa81a7c979916dd7e53a1128d44bd0594c827069152d27d3f670abb7c9e1a2c7e3bd2ee25fa82e79022a23fd940e015180d09119ff8d6bc650152b6f8e3633e52ca8c8f714a5906d7db9bffee6f4b6f5d374a8868365bce4ec26e7532c385f5c99b17d113ae12a414178d8e7d2624d67f8cfab050ce8c983cf143b9c9784f414b3b5e3c467587f86db44a5a6227c5d92ec1fe2b1e921c46911dfc8606a5fe0c274963fbe8878aa0cf624e131907fd27ab385944ed75992e1eb0c0266f309f89b1b31f9aef24be994d40ce3d3839b25fe65de12fe5c17b6013c0bf9ba72c8429c90b80cf520af7b67c126cc0d2a163b9e327420a7c3873a1487ec4cec3830988e5306279c06b5a9f79b0b47484bcb3c8a8b81284408b079a1901ef285629b89960aff95ec6c1a8329fa75c7b2369704eebc5affdb0418f7ee3fbe319759cd648437e9f3351a6281d1185df1330ad052492923742a231beaeff8df13cbf08a72a055795fcb09b3950aec024503c258133c05276b620ae1cc1eea1e4c226112238a3c4dc352c9ff5a5586b38bea9c9286ab3f973bccddb4c1a9cda6609b730ba69a3fbddaa1ef086e8260a4133f35d130ed69857cc2a93431e08614659205b41205c2f54359bc0d0b0d1294954890f6ab886d022e0d609089ce27db349be210d453524a56e0a75d296b81c2d25fd544f9264eb82f3207a46e6a426a2c083c0ce8ca50da08e482b7fd84a90a21e9c13d8219f88bcb17a8180fd7fad129601b3cb1be4ec9b77fb7fe2734c7e852ee4892f3b1cb4366faa77ddd59e83d3b309d3a81c3835e4270d5e961c17684a455d19cfead64363a03e50c78f9f252184d9013dfa47c07d1687ab808c2867668e0d882390346dd4e4da19f178744b86a8957ca7ebf60c00b6689ec280146b706c86b60fb991b282c21d2422881c1ae605bfa7f0897b6de9993d860ee009eb06a25f3266b8363a710f4a4b9bc3166482e36b5a54b9efa7c13a7785d3d6d89beee61436bee22c1687b50c2da168b10824f86a9e6e93575b782d9597e9f0624f544779818597dc867422b85d5c7b7bf3a8800b14cff05570cdd1e654339fc404943c16dbe5ee1f1d3f45dfd5c1875a5fa94dd6971c30931c2a77be5ac3591cd6beb8446c7f0a452d4aadac2f486c21e482f356a21ca3f30f1621b41ad34250b21f2cb84febd5840a27d56532bf022fa668d7bfafb08b832a8f3a75dbb543c0458281bc3f197eba1b1f7504ba073ebf6eb34a8f7aeff144bdf595c9642a88b52f492d77e9fe9c3ba54592344813e6c0bd80dec7a1ed7a40090170778d0ab7a73c53f3140eff586914f26bc102a92a2ef495dedf582886103c0846e4516ad0090b307e4d4a84da4a102f137e2f357226ae100249e6b85481c3165ce9c1a0b16d2e39a41fc3aeaaf73f48549c49344103e1e6591fc6382f701d6f95fc01cce112aecdea9a36f191b60a824ebf4c76d2b601836a5a23b9b2361d7d1978138eced9c7d22a85389052296b0b08d8f8bd3ba33c415dda683ce0df805bebc85816c40e785b9384913f32053b4afd8827dd2020a60470a3f7da2f23b056662cb6ca6853fb1f3296525fccf321a2c3412a7114dfc7f3c47927f69314e165968e4dad23c1899a603f3c16faf65b608387aff87a96de8b5461cefb854d57323d85dfa49ea2ed62dbe90bcb2bce6449f890e698ef0e050c011d481d659bb9bb7be54365e47a3163e2abb72bf21e0cca328ccbb68037ffd1f023c072cfcffa68eabd1586814fc0eab93b3ed6e96a5eb3b9aa3f4841724e509002ce09a29c5099ad13eb986c24f334b1fa49dd4c8fa2e17c48025c3e7bc3b4a69ee6ddafb508006733769134d14028cf2fb85bcb384add6cfc707b67620b5d7bc252c2468fecb027c295254d732829a8ea9018aac16303719536a3e0ac95c695b965a7da25d8337d9721d2b3a4ab6aaf9a77475177845e786b789c3afe0c0fa02a994925d345f492ff8056bc4ccb4f588fa16b58f2d497e4c3aa5bc2d2246258bf9f534317f5745b879c85b37aa6cb4d90ff01e7b950e0108163cadebe66011da4e50dfbfe02715103124a067870a5acc8e4c721cb1882d2a00ee81888a93c737670f7c9cbd11ce0dc284dfdf23d8e4fc676398598608507889ee357735770748b1656b65da0bdbd9636570cbf4b639df5f926032fd3f6ac04fe1e46c6153020edf0cc1bd1f5534aa3187e0f33d08c1ea7f01e197c60c781717daddd1fb656f3a5ae291e8aebda3deda97dbaca9a16817e4b0f6329d83b114bfd6b9a59ce364b215bff3a7a3957a6d8348c13396280bd5da7c42a18423b361ef5c0debed5eaaedfbccfcb2ce2912eec9cf115b2dbcca61bffe31e79f402caa492b2f39c2433eadd01cf15a601d634d8a2f3308a6596291a2dd5e428b583677c14c0fa5411c2f6228a34a162e3e525b275a68ccf283d1cfdb1c671dab75dc41afc7967c3da7f6f1357335377c61dcfad4ad56d2ed6479787763a7ef7537165858eb3f8f1e994597d5a0647ac14f24c5f1328974a21a53de7894a15926048d58e2dee9491b6a3c07851c556955537ed5e672043032cfa2456b2acfc5f96925abf273d2ba158d8e0e78fbe8d3cdda6ff3787778e309f98229ac8adb608f244cd8dc721fceaa7f678487b904ad98fc03bae7ed439e439838d4f78361e05f500c7cd189f084a4a4df5349291f4702de37105e4d0f2d03ff091ba8a74da3033dff71478ba6999745a35c13bacfe2c7808089e49b82be24dcc7afb193da0012a3b7a9261f318388296d461164e0b53d2296b6252d18cc4860acf58a8389e9d60e9f5065d0a16d3b04f816a07031b82c39179c8b3740eec5ffc5a103500c14e9367d148e323a619c75c24b7e18e630a8ca09101434b392c04f642f3b4c30f563d1205f184c130afda38e2c0a9a14037a634cf061cc2d164eb62992ce5b40a2ad86b15a142a5ca42fe087a9d5d391646127e432ced972ddd23c16236bc52c7e31862bf10ec710f1945c33cf104ca746a1defe9a44d1dab1c20f0bd27ad86e08867f2d37c51854bf743f85be48337576c5fc0389e05574f89780977e0a02eed4e0f4819abaf43de761efeef438bc038cebfbb9d6b99d63e323c97257b200fc35bb791ad7c035c2386cd3a20360e624e0d8b60a8b5d59d5a6d001397ba48df653ccd072612878993d4fdc72b39649c27d7dd02057145e42c78b137d5f7a932b5e145c7a5304a659d90bed42fbf7173beb6a58324cf4daf9f3e514320e756517d45cca23aff9af3e66e45c35de69b71df5db0f50b85590ec4d81e40ee067e5d75badc30a196c48bb4375c6299347d2f06b7db72300c0c03ef9d93eecef89019cbaf9024110ed22527f77b7bb0ec045e2b61ec435239d3fb77d2023e7f1e3c6d3b1cf679342395047ea2d25e064a75590535eae5ea7b105e55221fa4fe612e0752bbf76b42727429d6b0f5bdad01a4b86259c17c4851a958534228af66092a344fb64ad211e699328de8f65fd2591d19d86b0c88d7c003366100dde18d43cc66ac58ed6e3423c59769a891fd2fc46e806cbe749c3c715a03506336d64450ea32677475a86cafca67efc479d4cef6fe308d9ff80d4d5de4ac0e886abba94da86c074b9723d268434d3bdbe72b8429f65313e66e65470678268a1a5b1fb5a2ea6330fc7fc8aec927bcd2d1b9a1ae814551129dc98f410c7b38009d4fc566135fefbe4ea7cd62eca8363eacdf9e386c9959f0fd49ca0c27492c52f4e05d519841610d780a831efba7966d781931d84be7a47cab132a7d18291399952cf2d45c556004a8d8417d1166803d8e9a240810c42be041101c953de5cc43b406c695729a1210c792620afdb8ec25a526b07efda13f9850bc738f6427ee2fd3bc037d6ec49db799d77229e4b114f2be8bcc325c46fde28df6c6ecc341dcef1ac6279656e45b431162bbb806a88117247bcc78aa9b6d0ff6c6a0d8af3f2b43b61ee62fdd6faea09424fbe9bf0f403d429d94d24fd9ecfaf3cb71cd2ca04544a007519ad06f25c6a5e2fedaf07eaccc92aefebd9c45a69a162aae391893db947a6298ef1488f8eef3087e1e7abcdbcc761ca6a62dabb64504dee2ed57e0c272b9b4c30e7d88f69a5d34eec54dc3ee4e2d1adec1a1c374c441ae6307d3097a740c8d340609726b0d950609b6f762fad9048ae93484a2facbd02168d97914a6aecdf40131d268dc5fd2a5a19dee6ebd5fb76db349316603ea187dc4a2f97f77f1e3318dc8f1b13d09973ebb27833ccac3c134e1931a7a9e86b60c50bd880e9ab9586e56e70f373ef5f762a2e13ab10119086e8fc8d9fb592aff4b8b3e2e9edc575ff9b51f160e13ff207b6d5eff1fb790fb6e0c6255a6c028c51d1564523cca4c76f6e9486d99d7b03e126974f2ddbe8d1591d3e2eda566ca7c1214c8e4dfefd5ec3e15fe4838693db4a19a639a84001f6fa08f702b0d9f2691a8003307885f1e51f70337c23ee440c0d91f0f53e9e6046efe9cf610cea878e05a3ca828e3e17d4d59f7a07bf927f62c40b46cec9defe93c5360ea2e2273d0510d8b79d16a39c9d4c7867172cc3d24c0a2c1a76c3af9093f77dae2533b632d3afc1245044fb7ba6197fe7e205d098b68291f39da6410a7d45c4921d2346af9ed1ea57658f6a4283d245af6b056cd0a6bdc71ac3874d629177dc0e80b6f849dfbf3ce1aec3c798740fa1f6da3cab102aa7d1ab1eb539c2dc0d3691a255548c7ba4b103dd09c199485bfc25a45d903e9a81dee701d9eefb2a5b88a7473c5ae8b6fdd66678a45f42e86dc808ef5e7f300e3be5c0a3ad3e9b071490482481b6ee260da3c1eb0caec37f30a892e2fb95ee7b7c284d2244baa78d9dc1ca58932f416993a2c12a73ed89981754408b3edd21c5736682a45c874ba448334a0e97c0a55ee7bd890d595cae60a13cf36e78c0512598522175d6086d3c98119a19eb96046bebfecbf018fe9c488d90b13d72a8c0b9cef543462fd1f7c45d026174ecb58328d2895c14fa5ce7d3df845d30ae43f608313576857834bbd64a2dc63b6cd2566ff35af0853c50d4f8d9999d0d577b3e25461cf5854a053e6ea518b4ba1666847a649db99c0e277a6eaec35f4c9e0b165757bf487425c0de386987b8ec184adfc1936e561b425e951f30ba98d405cdf1f7a15931a0f483e6eef6739b154b6ff70f73567680c0ca52a5c3105bef34a26f2ea287649b6aaf8f789289344893a071eb1a95b9e2b446d647a9fddb6a948a1aea010aca943f381771f4132b75341426723265bd4c659e71af5f50e47004bbf6b1ac45c5069e75ba9e246d44e138615b33731cc26290bf66e760c8f81b714218b3e2a9bf38798fafe4f731329772b4c1c8d9e03d98968644304bc20ce66fbff20eaaeee63b87615cb0598e6474e3c40d5ebd84443d1f3111d390a1df953c8af788b6591590c908e70dd1df12855cf370b24cf9ff068a89688b0e811611fd5ed25c7eea59771412333368c0c54c31827c2098d71cd5d8ce8c1331fbd62f79ffe3091e8e71cec8f3c2755d093e3e3987b92a33196ad12f686d31ec9f1ccd91b19dfe84d18189171a4d2ce65134d86268f95b2c3f86b10ad9c33e7aebc544bdabd15c3fd8471fdd3a1d05b317c98286e25d5065634f690728b502d9fb460636f226847feba1d4de1b0c516ee0233722aef94332e4c707526e8d5e581b956d957877efccbcdfa90d79ae373ca481bacec873b70776cec22a0c78ab59b4c1b6a91a0a68d6d45d0c1a29d6b61be83cda63289ed933a1caec5fcca387c3167cf56de52375ba0f5686eb0f7a0531c1725b6b1b01d922a041b127a7a47e2e8f59b9751476fa3a2ad7083966dcc42c8e9c97d830b8b94492933519af3e0e24b75695e630f30750235179ecf5ecf215c7e8a9d037a2d03fa7543f556b4855c302e0e16b5c0b6c2f9f0d3d4c145a2e4a40c3454023e2eed7834ac55127d765073105518097e12ae00fba16ee71669c6f1b82b03ad6098be244e9280cf2c9d21eda4dec39bc279b764a07ec6c5f786dc6743feb1396c452f8cfb8aa7caa1630a0f980ac66dba1ced129f0291081e9213ce34c08b187505e85158a20259f38bb05241f9a15f612101fb729f499ea646211357b13d09f7206f8b8ac1bee12a76db95c12e4da6f1af1cc85f4689b93dacb23efbf1d79f9d3594120b5fc2c639706f7b951622d693110080ee39bfcaeeac8d9eedd059bbdc489d923a6b5bf65f5801e392e71ffa5838cf0a14d8b57e7a1a4939c9fdb8f89b9eb3f796eb8464055947162a9bae3ed48f58457b197439aff28523e2fc240a10fea6083da94bdbc7e86786d148763fcf4a84599a38adfc9c2a2dca1ca2304277aefc37baf6577b19f76cb87b2107aca6a947f6fc1b10e1ec02fa4bac77cbf9b83db74a47f7c367de1e6be77b41ce5c78d1ef599ad1119de2e13a1c7575792306aecc1ca7b4cb52eb44137ce1d20f371689aaa2b000687f0be373ebee6586515cd262d1507e7943d7ede3deed0c7c545083c8fbc9963ae07d85b2f40aae9c9e800faba05cb144bfd0209dd01f52f541132ca5e1b3b7d4ee4362c666bad2a0c8dc5a87c6a8b87c71930052ecb0d39dbf8c037211ee5bffd1a3d6d15b6015559b67a4acd1e9ce0fb2741cf0a4627838d752674470fdcf5ffb3e8e966782ebbd259b75df8ca5e46d157e5241a3944ca8d59623935884f445576dbd4f971b740647786727a3a504809b739186eea5ca0c12f6c7dd586f2ef70eda801cee5984bca8e4a399c772252dd9092f6618e8ebf44a132bb2e727e9c07fe56dfd093763d6a0c0218adc54e17795d95abdab986a2bca1d5158ae8ba2b04dabecab4fb68ef017ff321315ec635ab145cd0cd71e5706d78a555c8758c401d6affd30de2ac3b2fd70fdc97f06e83cb4ea7d5e547a0bead0e7f83eebe9620895792c6970fd47d8dc3a4141bebdeefaa3c97c02a4f85a823bd6cb183ba1b9b871cd96681a545c23f44733efd38ab8aacee93e7fcfbf2a5042434134d625caea1a87966937424ffbe3a5fbd25f933c293b5d20d3c0833f737577ac1327f0f776e379c19469c12e8d042e91faba6cf2d67ab89dccf1314706b87e1350d5ba344800b9f8480bbaa34567302a490bafe8cbb6d4855ef312c54ccb92b317a4de15a3c45c9dae8083de461643c8091c3bc9633043cf00bad89e76befaa63d217213b3ee8348dcdb9d16e4f9b953f06fe4f8db292cfd38bb08831194058995cb869a230178b364afcc12c88e0f8cd1be36332a7333ad98f12bbd1bf81a04ee63eadb78eb3707329982f9a4842e102bcfe0f394440487a82d4e57e805642c29ec283dcbe2e7ce7abcf7e44226b1e294af8a4281ec68a1d0608e09827449ccf84f5882a7a0711af2512064fefb5d96c09857cc01253b5eda9065de8afc5f4315d917d2ad0bd3af5d392b425dcf9bef2c7443ee3ded224d7b114634c302f2492fc606cecf97e098b651f7e089c12a487064f183d78f0846bf59f5072286a41b5342c46fff63189730e9a73ee43c282aadaf352563bb127e391b2ba311c836782108dcc3324df0bd60e2a69e0d5aa600bf1e8fefad47664e4bbeab7b955ac495d26653357d795747f9afb50a58850cf87ef7f17d39452a27dcd6fc4a94d497beb9b37d12d3895474400caf9bc66fd4cce470655c645e8bb9b84796ae1bae03e8bdc861dcf4d24ddb6838668f13b8ec3f29b56bb8cb337c6d9dc08dc7a37cd390e234e44ee03d9b31896bc13022b03f10ef0317e81d0dad119693aa16496eed55290b4e7228137389fce33c416aed94ab3cf95908f3a92ee2a07dd321d4a72beb7468ecaf738ea32ef6bf820025d5d79d67bd275d58988c0ccef5a409de74216e99786ff36853f3a4784c173bcf8637ad95720c69e54e7aa58180f88d00cb06dbbc66faf7ad915d22ac4b88347fcf487c7f7663dab296cb56e14bccba4921e32dcb69fc7caeba369bf20c5867389d344ee610176c916ddc865cfa332b28d2cfe911e8c1b16045c40ac2d6edb5d766f3a631cc34e23afe158ca0dadfc548c7bdbbbc224e3d101f29d7382a2a11b1076adfc1a1a6ef6164f5d6ec10068a1ef63c5050fe08f66de31a5d4d980379a7066d3832874de19babfb18b46b8f90d58786a58bdb5ab39a6fd9b82f228a36e7fadb696a4041e97a891a204c3e740f224df35796dc12a997ebe60a14f4017b13bf80f21e1b3b8cbfef513de9dfd18023e749dd9a6254a25516000d42b9634db7d12d37e6d47d89157359f4218431dc574147382401c1af2cd8e1445d65d33a1776e093b613a0c7a3c7249cba9405839e8d018b1ca50b720d13cc6a392865e31635b60de9f4f10ec40eea42a1a0dbcb2abdd70df909d2bfc88eb1c8683c78ee789fa33c74be264c1fc015b0da86122daf394162ed9e6e2e39539e4ba017a631d3709662d95b1a251cd2c333858e735db5158b7f4952ad06459712208c316b91a401637f68b88d1926fe1485588d71fea67bf78194c89e4c9c24a4b798015694fe84dccac33a73a6710cf42517b54d424c8a236f174f9dbec5c7ce9db1bd0166ecce8df03d116ccc6183a8935c646a67a704b98a2f98e67130343168c378c933efd6ee3e9a92ece5e6371ebf9ea5a16fb92e87e32541ae8b8ba31202cbeec7821be798d60f496a1d4307bb3a53c9e14006aff2117c498c341ab5466bfde49c46329089677e9d1b7e8e01da2c4439b66e44a119135d5edced3de7f2f4c231f334b04bc0cf6818683dde76ab6234a30bd20cec33f814ae38fab47a35fcecbf1d0d774497ac089dfdaaece168f2ef98ed4c664a2bd8e410724697a0122f38473b49ed66a6745a1ac654678951827d5203e862a10272188fc4e2308a326ce097c9e6c23db6f8f96bd55bda215f21c9c91472f887db5ec9e0471c60a7c4cf3e3775b760b3cb3a71101b180ea9ab5ce4387e5dff2bc14912fc6ac3b9914469efffd98f69cf1f5a9c4220805673dce33cfeb568ed443c92860e512c2f9ee11c189fb261ae09b07a0f742b571d08b6ede5d9f1b3c43f227df798561aa17db5b2dd0c5f4230e6fb6fb2e0c4015a59cba327dcd7f16523149f0cd6784eba4995ef0d42628d3a60a51a646c4741cae6f2bde451db8a33be0245c1a515eb1959de0d794651ee99580ccccc7fdad0b38de275c447ef509a11ec70b9fb09247b1a1e0f16ab605cfc30bdc95a69aeb0cf9f6c0c692ece0db1b66be74dfd99016b63b82c9d6a2a794a225a666275b0a21d07cd607a6d0c61f2901b83b0e8f74b815605db9b6a0d1b53866854ea78666a85f523bc2e8e061cd9fd632172a3e9524d47191c564ce264b9e1f589f58388430e5af8adcafbe2be09b49ca73275eb9d53ee8c5ea321dad47534f48e3f8279607007a679b9064b3dbeefa5da2fbc3ade63ede1d7c44ee414532a7983711aa43e57ffa855265f88793348ec8d2f515d83a16883695def7a05a2008c20a96028d4ec541b064e5ac430023c8bb49d764475058aaeed07da2f7b42be21b1b9fec700e5b2743caa6f75a45591dd92c858e7520b6d19fdbc09b00125e5715e3e96cf01912b786d0635745f28db22ab5f71bb1e20438497a91a92c158078658f09651e68fdd828be44e6157f579082535d64ba565d3b87514bf54ca10638bd0084b6e918df243ec0e86dcb8ed76894a94ea4edbca73ab8178355f7bec6ad86062a865c488b2d4e347a5665e6f25f1b5d8eb513d436d900a459adbc3fae92fb5aabdfff1f25ba50b0cfa24399a2b8708748428f69b4c02fd84131e7edd8c6f2428c0c1bfb79e9c32942d5a82b692d4928769ad34b802efc78463add301124cfdbb3125eec2c5191bfd8ca9e4f0c8cf2a3a7ed0ccb88b6339a25b48a8ba4b2e93464bcd915a8e1d1c5ced98312476c6d4d9d14f234c3144689b86310f2f52a91a9a180edb4f054f8996c6087eec83943d2991112945ecf31cdc41ada670b6e3a960b60b44105bcc57c11a769ba58515634557248faa9c0f2f91c214c0da67b2ed2ba9db0c9eecaccf145f291550d8fcedfd3b8ce8e5bc2820f913651aff08a243095c132933ec5f9d5cbd41f5141d9b85d8ec01c3899ea8c4b6789984bdbed8d11ed995bcac2cdc2e96278b5ea0bbad0a296a0c0adc84b0daea90e38d90c33d11597ed904e6bcaf35439f82247359d80b8c330a42996c726eaf76955d438f6cab109fab17c3d7b89d8398c174e52fa3f24ca1726778866f8d1ed996dc0654e755b3ff15eb12cb90a9ed26ff0f27fc92e22aef8c9756167c52415d23620d6a5e7da33241e81ce3a4bda7e31f33adb016d4cceee615ca0ffd300e5c82a982a01bb36e022fcba32345acf4eaa76c3168695bd3724a2e6d21fc4a6711a828cbbd9e0264092a64a78c85f8216857f53e8ff5c75c5a389334764627ae9e890793b1ea603c3382ab6e9fed04b5139d6f29285c7a5def72df4aed58591b7b8229b0b58780e5043465b59ef0caed0a814d129eabc66c515d227766ee28bec6dc4bf4be57f5b27021b556d48a5eb95cf29fdde9fdfa64363499908bb6ef07d5f0189a5f2d6bf66f3728a5d88d494fe7988532b82b7014819e2a18dff44d2c89b4d39c2042a8a94dc88ed6ef16737a814854225d216e7d720a211a3bc4cd9cc446b3d2d80a01e24b40e65ba9d31d8cdbd942b31de500b492a65f0856c8448805e47c3556509c3f35c1a8cea1d7afbfe1402ddfee41974b3d6e75a41adb360e67fba9d27bf93928ad88b1848a2b2ea136aace5460b8ea52e49c4acdf2c7591d328bb2a200d67b417114cf980b4453ea57380acfa45c72ea23e1443ee9bbdc418ef9524fa308f1f8222ee5efc0111ca92c8022218647c1505f7c3d6ac6f7dca6575ba498cc0849f59d0a7b5f80863c2ad78bf36d21207e8409f7fc13d06eb93052fc5c1973da5f18faeea53639f572bf2153aa19a49bd856446f6d1c7dbf38e4cb60e09711ab52b6aed8d7bef6764f72a6a7c0ba6437e76eff030d7cc0bc8f7c386d1cc191268527332f85adb36c4ece43183a40933e276ef87ec2e398f59ea3f75a57d1736050822df9e1d9186d4ebc7e9a28ceceb8e4f35c40875d12900e05fbbc10f0b2cc758240b4c160673e4567f04c02c603cce81bf8495b010d0efe11c6d36fda7759dfd981ea02225e96250321b6706d7084aa85e6306f398fa17513b72f48518ec4e1c0110c67040c8970c1974897f27ce53b884196eb79510a18210c29dba34befb05295cfd854a2cb131edf78959a05f25837278f92ee45c515828c3105bd1321a71de532051a42dea44c1f74e27e1753863f27122535947ffe5c99a3a10a2ad2e5b014adcdf768f9882c58de56d459445c27b6bcfaa997a77bae50b00c125ecc2055f38b715732b62ed3f7087f49e118224c676244ea600fda38ba018a1812b066ae40931bad1c2da21695a5b869aa7a3787fa4e6e432dc3b8b3ab04b1116fa7629375bfbfdf241fb087cbc3c8e31826ca3beab1070a8819b60efae6b41a28e6b21b05866664197d41a9c138572dea1ddfeb1932eb9a849511c5dccc2afbefa7b18b2912b50d420c219c91ee472830733ea1aeb6de150479b239f5514e15fc1597b6fdaed06dcf31260a7300bfe8b94e450e76ee7e1a596b7c42bc3919d341f33ddc53a8f6132b9b4369944ed19fb05391d62acdb66954671edc873a33b8aa93ebcc4318615c0659100a51703287fe3993420d8fb165e835898b203e215aa5cb1a0059bf95412c18820f13f33f34b8d443b5d307b0e27c6ac0182e55204021213ff0b3e586b227121ea8346ce3c222d7a4c206c90904d04401c9a7f0a39448209153c960d09f8ea8d5d97dfcc10b021c786faeef6b65f17dfc448de6c410f0fc7c68e1fc8e268e73bdc2456d868a31a91608188e8911e3ab8a1ae75cc2bb2e088259561cd4a35e55c28e40fc236fc44fe6da1da41629e6186ab8c89218f42f5a6d50e301c4349069c53ba9865a599ccf67756059350e759dc6b4b6d7546af168c0dd6f1d50d90bd5d0c81cbab9a065d6fb6443a215f59355a8dca27b65b869ce86bd408635287683d5ac8f83120cf5182a4b12d7c5e06676a19b401f953fda10d1d934985b286acb40dcf45f01cf3843669624e19458006ba54c38a9a7ba479e375c5d1a28f9d865c801203fe5fee8e0ea739e1cbf53bb48018d5fa38af8e04cbc909dcabedc796bc8362e645d7f551c46bbf94c571cd859e2b23d80da3aebc0b02bf5a6826a9d269145f142742e500b808ca8302c156d3324c52357ad4b64779983ec905dda34d8417880f1ce4cc4fd19200371bb856af42cc509df3311627ee9e9cf21a9d49f02c70f0b0b4b62073f4526cc14c33557b95485153d52c902607ec428be07ca7bc7123ecf6b684368c6dcaccb8c4f7e8f13aaf5b7025a73c1b9f7750f2013b61126a0f4d1cce1181c27354da901dbf83ffbaf27fe81d85ec93b97188ed8850a6c8303a14e1bbf1c0ee0d1cb4bf7b6b36bb28e0b5f9289c2c788e3a8bc50d50a6c03d0e4c3b75c8678342cf7b671a09dbf7165f8e1e7b063acbfc5bd35960e30221611d9f80bcf3038c0a787225fd3038f080f48031ce7039b86d31eb7aa4a9b701f9d44a3af9d1cf45c6d71b6d8e42b9633c8d1d546b5a486e7f9ae9e24d46f0ffbc6f6c7083889471c85ddf70a03283760eea35a0307f006720525967a16bd9967a1ef8a1fbcb4593b6c9030116fd583635b44ac308128c22ea6fe0f5acb1465124e001bba8191edd183194289f5c52c33ac4967f92b9967a2d202f76c1f2d5b9f978651b0d8dc755b5302d8670865cf3cb69c9e478b4d5bc670e551e0e4119a3781d5128be2546c9e018f0e6e40d8b7f734c2857d4d2190caabcf10df0164d08e3ec8625f73c69176fed57364bbd0d309251c9ccbe1e766cf30861b19829586ca16f36cdbd78f26aabb837607d1dc621140934713460a162eae3999113ed960096c050c9462bf68ee3da9beed52cabf72408eb85ff08b720281aafe234970a8b76cda24cead1605c8b8c8d3349cb41ec9562b6222d7976452995b9782865b86e96312bc8baf9998842a6d7ae2e6712cd9204e6a0eeed08995992c0f0487b648677e1d53ea3515a8fa90f7fb0216de20e8e6e9f57434bc0c818c92ccc2e13dcdafaf4052d66a5c6e48790e521ffa50b24be82d3685b00bd58231fa50a4984a577349d83ec93079bcc7d32c08bddf0e719fbc79895b22558de3a91a7c59bdfad8c4d24e4a5583d9464b30d388cfab0a3183bdf89985f916535cd151e9bcaac6cf31f27cd51b0132845a316845df20ec1b5df0ca2e1ba53f2c43ac40dd304a568f19953a0c1f867b1448f64838c3511820f5e710aa98a2f69afb504cab7fa786bf0bde2f1af52fcb7743632a23a5b66c4c0ce6f1f3c2ccbd6bf08b11cda48e69c154e9d47c15398d234dff854c87972dfbaf4a97e56a5e490020b81432add31d90e9fde15a359217d8745b133b3bf3e10d07697c4c915114e4709626722535fafd76e6081637cc17525681ef8fe6582d2bad4e2b8052c834c41f8e614219c95a33dd688d4b364aa43bb2a8a0623f777a200d4a98a18429a2a5a356cab4b7c3b2241d8058c830a118d0776d875332e855b8d845c9ca85307b4de1d9402411bf1a0e05aacd8fb9c4a8dead1f30e75d648617424e63c44599763aa7035174605344ef88fb06769f4f485fdf3b8d00e6aebae784d4ac8f72c24a036b3b7104cba00bcad7edfb1e4159cdd3d8b10e1efd23563ca6ef9461196a7d5649959fb545a59e297f60d75d00280364a2408229cf177f93f6b8fbab62a082a0c2cc269a1642f68bf11d02f0b264976bcd5528a1bfa4074265ab68b1c575e96cc3ace7a88797aeaf5261b0ba785f4faf9b2f327aa05afea5e7d576a64c9fabe20a3fce15d8ea80c5a4351d35bd2dd0e2a4a43567f1c097390e075c662d968b87a1c3e29aaa74eb9a6163ec92012d51a96bd008a3e16efeb29dcb11c93217305eb00f6ac59a91960535b822edde1e5e7b12ec164f1a65c6ee87a2593da49c6096ead7b50a4c866a9083904f4e94a0d6886b8a00df3466c7b64eb2902da456241c48a237ddeb9364f35201221ba86ca39c9fe4808f5508f1680040a261d128949eccd6a0380d559a7ae170bdd39025e36873ef5cc9a864aa8334bb50d10803fd7f5c63b3fc31d6317cd4681b61e45c2f89e499d37d424344017d77fd0bc1eac4d394f7ae76cb8be61f72c0c4aa2ddc9605910346c676a440d86b9083434c03768119d5a520b61f8081e5858a526ce37ab7f52c1c59aef26779b36416afb3ac36cd1e1478915a372e034cdba610a1c7610affaf3e300876ddb017c1ec01bb0c049bb0ed432b34f54a8fd523d1fea8848969d5b02e23c4b232a8268c74ebc591db4375f516337d8cba9e526a371f300386467d0a51854f997d66e824d5432263d1fdbd2108a1d6a5658229a86f30afca70d9631b56d5ca1a1b29df8b72601675bd659c07ea1312b6e904942a21d14c8abb96b41317702dbee9692143d762057fc888e9bdbc9cc4b5cb3e79c64ee8a0b810938fef5d0b011cdfbd5fbab1d76cfeae85e04f9b887f5ad46758da810a8c503423feefc651824a2bc1fe3060e8055a6192d1bfc74c6899a5daf93fef91d12f50c5420dfd0d10f568ba816532d33648d1476a6cd2dcfbff53b91e541e4f9bbbc0ef42bc0ae82cc9ebd7dea300ee6de1de7318f2b17fb6fed5055ffc430e4f88b50682080caf3c10007c3559e806bad12d0886b786018195166ce9846884600913b035019e3a29025d27f2f319deefcceac033b3431b8f49fa7ee29b6dfa2eced5100e944e9dd1a3060f2f924e73a6e6f23d4e2861a2955adc07bdd9d9f871502fd4435772f94a970b3066b626f5bda72902ad5f0cc6be7ae0b4b295706392109af0c1fe67fe52e2e053f93b6f53d5e8eeb25fc52e24ff97ba71b3c9fa6ae45baf77ea07acf182c6a46b80a4a0a3e1689773f9121c6f32110f8f1650d28a02860a3b066d5b021bddaedf8a524c7b1a116f7b58717ecd5afbd6eaf1ed960de901fe6bfe7b7802182b4b109e248bc80d09313fd3c43c6404f3cedef94fab99bdfe46ea098e4c4168d009cfb838215951f15c475f5d2e6478157bf4e1510e85c98832feac05a6725e8f7864eb2cdf30e00b318cf45668bee41dc7ab5e214294af11355e729e120de2b4b8ba01afbb2d0684d2b8bda823127c2742f51d3cc998ee55e45b60cebd45dff0e0871b5ad3d6f9f71040376143a35a043621cbedbbe92b04155f20c316f3a4846b069cb90c3a2559eded7dc5f6745a7bb467bcefe5b15dedc58eb7e51294995468babe80068aeca0ff922064dd4e95672afe5978d8c71df85742df558e888e2d744d2ffcd01fcc2a9889d91888e08bb0ded039170c3c3f719930578b4cb0a031e9ef0b5f7b594403467d3f0a8271934964c20f0de67be803c17ecd4ca8e846be89ffbd0481ca27d76b2a4ed1d7af79de0d6fc53ff2b9132e159cd0c8b9145d691ecd6f6c037ab49335260ac1f72b0dc49e543c8baaa4805d7061a3398374e8c7b9a00e191e7b7d2d9d97d6021251f193e2f841b03d5cb8385d06afcd76a8d0df43384c5651c59e640296ddb8ac7bc2a57fbfa028aa0739c13fdae4e07689c35582faab9e3935596f37975ca3febb31e92e14700718c3990c225c4f598e72449c2c37ad5f4116a35f0330960f374b2d85fd6ad045af70bdebed2612f139923bb074aaedeac0f6f95b0416dfb34ecfad729fa15bab08248b030a841a7e59409cd1360791e7a8662800b870566342397e40615c999f390da6b31194a703ec42183a8e4f3717c77de90ebfe85a31bef7bea5ed2fb0ef8019e4b3cc50ae006a9be7d2d95d74e500bfa71ab073aae3e56d77f7cade32c99464b707dc07d107afd2a4d9851010e48a8532225cd36b87fef9c87fb8c85724336797992f717e28af1a0911121f096e306005f2a79d7ca1052b5d80105ecf43d20508a3fb6150bb8c46be43769d9d20f6e7952e3eb0dce9211f78dcd979885dace721eba1d1431eb2b534e79c52ded01fec3fda46d2e0976f80dbf7f4827a674781b8d82e5a318586d111b4421baa718fbd0deeb1e7c7b0d7ba1b3c68bf3d96f91b3cf8e001fbec39ee7380e6ecf4b4566a58a008459ef4f61ab6bd564306bf0d4d06771fc03efb106021d07eeb2848c3f991c1bf7d0e503f25cd8f0cee647c80e4b3b7419275377c706723fbadbbc143e6b9cfecdfe0c1070fdb674f42f239401bbb21d9945c619f5596071f36b8cf3c0fd96fcf03f799eff936b6cfde4646c6ec3eb07df621d8ba10643a393b5c47bf0d8a9668090ad6a3e027d21105e747fb06d14f4a10b6a1a2f9d9be33191eb8e1c306f6dadfd83a393bd786d6ddc83aac939e0516570be9f12da4c8349c08e3d005154e66e86bbd7671b4f6cc589925581437350708385a39b13891216eff8f540baa0827c260cd717549b8f2d17da421fd414797df63688882b4857e74c7e5f79652d66aad46c33d457e14140ee75fa3f191384753bcc13f9c010c2a900f14141f89a34fc8651a0a729bc78dc73c613d4fb9fbc8437e0b05db93039b09d31d9ea2f5d4fcccc9856a8a291dab298ee338562d8acccab5cf5dfbb4921644dba1a289b45003a2811acbe5f7eeeeeebf4a7206b326ced7a1a7383ff3f903196876576976f82b12aca77d97b52f43632ac94fa791a6f80bbf0b7194189322d252ca4986cb9fd937bbd3dd457eacf2244376bbf393c87a1ef2d0fcf8113eaa4c849eb83e0a623d3f8dfcd422498a6d759bd212a5b444456a8406690aa4a9e9364ddda630b7e9e9367db9fd945b32fda6d682427d28bf9ea35a98d947281d1c2567b814e4873e812a394acee8928ba4a5f670b7a915540ab7dfa353dca6abdb74e4c2cad9a94eb0b4761b9220ac474b4fbfda69614b127602b4249920126f8f4af3436bb5d60ac17a34bc7d67474b46686907b73dac47bfdb4f6d40697081909e1c482a84fc98064d611cfa5b0cb7db57455c4749e799e1af26ebd1d295265af2509e38c9c51f34c57bdcfe76213414e4760359dd76256ed3944b4bb4c4366c2b6f6e0bb25b4a29533d7be35daa943ce166feae82f5ae544acef0cb57bafc400852ca6eac2fcf6b8b39e75cf9c85b66cc34324717398b875ce5f24f664e7e76b5ed3dfdec2129ced55c59447023a7a23b152d90c5085b22bab23e6b858e56cae5f7165bba5d9c1f17893b64d745cfef41c80f950245a1449e593ea45584cbd6112e5b515c7eeb06f2e3a72fc80f15511839a33541b03eb07670d99ac1657a864bc570f9bba3a88c184ea8cb6fb5582afda12498feb8383b627b482c96cb6fad583bac141a43c58cc95292383f54a4d1745ea5a4cb1a6b5d2211cca76237edb67e6e58d0ef32fae59d0ed31c8691d11d154ba2607dd5b9d89ccc683d2ad20113ae10d2d303e929427e3c9c1d11d3f0208c8317818a42242e4f39a3af48cee0cb926711d9e1e7a21ea13a2e8bf22413c47ad4452aba4a7336a1911b6416b9fc9e6267cce59f5a5cf620978a547411372ae101774d691fb5b7dc6e96522b912d9737d9b57eb02d35b7ab3c6939c5f7c25c8dcc12ac37479e23fb117e6dca98f33a5d637b52fa53552f2f282686f05f42da23a56062c8e54b5c0d41c7f5ae181291299b378d6577e6a539f216b1fd5a8b56113b45d9dd39a6aa8865c934b096e6c89b415da7f65cdcbd5e2e0b097239c875ba5046b84e9925d8d314278c569281ef3ab5c76346c3ed2e461516c695529088dc0190c15a55982f89740f2f1c0ed8870be3f2a614ae24d1b21b38dc4495d8f72cf800035cf9d26bc0952fbdcd95af611a4cc3eababe19ac4a898387c476927b1dda96bce4d8921e8c2b5f566b3d3024a7dff313393b3136afe47a1a18d22300c9e937919c7e18d7d3f4f5b6929737d3c819f2b634e9d01e9212ee68c8eb15200024575e9e172fdfa33fcc9f2afe29680ff7fd27a0df3f02ebfb3320694889c3f5fd25d8800e72867d4f6a21afb84eb8fd62dbbea493b3c3249bcc4600bd006dc38f558e8779269dcbefcd292ebf8b70f0a56da1eaa83aaa0eeb16b1365cb25e56edd86abce36e8af2a4a76a7642791206cb8f79d5ab252e96057cdf446333fc91a07e0410e0f64ba6313db4bb4180911c79677783b09238c8eb790db6eeec480c067ad1ebadee869d9d860189c716d6e3dcbf3616886e2488bd43c1ec88dc8d009ad3cf59c077fb456082fe3809023f08f50f84b89e14adb45c4f0eb9ddefec40d0a80f1bfed4676732c839084ddee0d90ba469922301f6b5bb913df60c03928dfa5977a33930d8fe666e5992f1647025b6a90fba3612c49be638e06f7528a01d73f1da5535adf655350290f2c4fb8b811b9ea383076c9460012875c69875629d1580bde1dffbd5184c2a2ad0c81c452396961913124b2a2230aab95acd18d36b5e525f867679735535adbe87295f7b6ab8fd3e9a9ffee140fa23bb709597dbefa2a96d326003d188c5e3f9e9f6730f6ebb1431bada57eeca4ae6678f82fada7bb576727ac9fc7e1959f5d02646736464dd0e7db394561541a4082235a040a03f299b0b11a58fe4c26585e56675863ca53dcc83dbef9a6f9313803ce1a79fbdd6f1c0bed69e13eb3ce42157c9defa8d07f65a7d0d6458e7dde9a741388ebaba90018d9910b945ac67229aa49ad32f482f46d6aba16b60afb7deab41a4894e2f7e90b2eb3ab5975159dd0bd215ac679232496554262f48a28caa065146558328a33a852c76bd8cbf97d13180913c7941b2c260bd397e477a417225ac67927a4132314999a436224a72054a6c16666ee76ed9c6f9a9d55acd481a4923c9034eb282ad55249550a3b812c5c6c6e0eece52cad56ad5b29a1f0741bb04286a2a2867b40f213fb487ecf46319154ca5c0a82c18b50546512b4cb1a22e4fd090867609d05732fcd0151ace0f5330a4a53074410633f8ca8725ec753d0741db623d47adc295cf1d1a12494818d64c1236150d290d698a12f9d1b4a587dce67e81f1a2c46a188c17d696683456e3703014e69e355c8f8638343f315e6ab6e4058c189dc3404179c1e194fcdb2eece4eca830d5b5a243bbcac5fec10d5442a01b38e4aa085308817c587f03c746c50e4220ed716c50180204f9a8efd9316cfae3b6a540443960120d7b60a58b1138b81e0d2bbf8339c893dee866d62758cdec70ecec88acc6f477e0e7deb91a4c3f733d6fb227a1dc06c33eeb64f0f365eaa1b7505247c3e6d48e8e3a0a5a1b796d12d6a394d3c06ca9c15940c809c116faf4d20e0228145ca121257561fb7a34d480f461275783051ee610de5173421aae7250390ebeac92268c4a42c21f234b29254b9652327b3747231e0a79881261ad6f1087628c34671c6ba86a21f291fb0835a4e5c4129a5e48406ebf8f46da388ea37134ba8b9aea2fafd1383fb5cba4c18edae3612ab75fce089986bf300e51dc4aa1b8fdd2a3449874892a5c4ca53de3fc788f3d4acd8f1f919dfe5410e368dc01ca93d24ba9f472e9888e2a26d2be0cca7a73d421e7e841ccf1ada9a9cccd19bcdc39ceb9aa9a355a96252d29a5e56f6dacafcdb12c4d0aa98e75c442ec0796828db01006622dd887ed60296518862f1d4e51280a45f47a2ea2948e1c8d8bea913a8a44d8113024dc7ecc0767909f6a9a9d4dcee022f8180541b3037b03133603509e68158673b17555c5e6c460dffc741d41d71184d86204f2ea28dc04e0cfeff25347f3f24d0577708d612c54c7e654538d698f57eb8885da93827d2a4c8385587b651460c0c2f5eaad638f8c4315cd4f75919dfe2942295851aa2679d25fc76aaae36d4dada3c692323d489672cac9cc73f2026ef09fd77aba8279e76f97c3c9dddd30ddcdcda0041dd468acd556dc2b07e747823428281c8e051dd5dde027aa40831408471686201f3c3b2ee4877efe83a5a3e434a2a7d9b1f8a9c73cb81206eb51d1faee4a7ba6383ff5fbe96a7ee87747c5f9a9b493c1dd155d832ddc470e360dac47433983f6d31ef243359a92925082c4011cb9ba1df8ad7701bd9d83205f9982f50ec8d0d08006d73b8f8e2cbf3d1e9591017af9e9e58e43397708d9e93fe2f63be88d726114c14519ae23d68b718d56918b0c171926382778f21716d3caa82424c452580a4b6129cd2e614bae87a5ac9b92339af9454dbd80b05e0d61291bbc0aeb3908824bd817d7c35256c68b410d35c7c3520e56f136966a4e6741acb0d929c352b73f1363bdcc74fb335467a86b79d85a4476fab9b8fd476ebf8e2a56f1f6830e3a98adb01e6a18cdcdca42ca6eae9a236a2acfcec839ce51c60ed79d8f5dee7a73cc6cb8b3d348d407b655a3469a59d8694356bbde1c4180814848be172992ef45aa86118c9c915d5a9f609be004190579f229c88f87ae0afd8a392747e37c7d66a89f586818a42f2be4c0a57b73c8de216ef1864272d8447a1c0a1f72797e5c09b2e356480e09892be172d536377078172513487b1c578a04f2d1afd56ad9553464f5b0977f76036da3db867503484178d9307a3dbf8fda43bf0357c743ebae972067e90ecbb89eefd5f90815a2a16e1a6a0f0f2101e90f8a48a53dd28525c8651fad5ca61f1d4d11cb161c4262c41eafc25c2ef13b4b85694f3f7f370db1eac8e5e71f441aa2a1519d56474644ad14a556eafaae1d16910e592a6bbc542cd13272fb294b2965ec905dbaaa2ba65058b75058a629cde168e84ace68cb922b2b75f9405a67901f2f5957901f4dce983508d687bc8aa0d981bdc135038d182e687dc1ea42b582b5de9960adf7bc246787350b85add7a32bba32b2aa2b0b85a5efd115e831b79fc248f1da60a5accf09eb5925ab346bb5d66282f5ac9497da235da0a0c5edb786584498865396e634a54356a9f9b1a0b56a2323d781f9cd3838a54c3c31b252d44add1da2e6a43427d41c95dbcf56ca4a854499294418cadd9da594222a7a612a9a1f2f79898abc242a75f6d87bd8080bd29ca64032f6eb1b79315af20e3b61be327968e468bc2484b52eaf3c6c74a5c93486db4f4dede13f512194312080e122213d3cb011d370184c09f971945f011ba58830bd546a5fcd0f0d820eb13a62d56345451a96b0392d2179f2390a6665870f3ec250dbcae9d49e4e7911d29d22723ab16c8d3ce9fa045b4373633d6f5cc8c9eafc5412054b3b0f7dd49cccd8df83091bf2d1a97be37eb2629c080d0d518d5445746626919cf432c771b43d52cab9cf51cef8b815768eae43ced082fcb8687652ede1c2234528893b3f623d1791f8c0e72673ab102b418d444a174d30854017f01ed673d165ce7f6eb2d4903f62ff75983a346feac77f74a7bf532ab6a175d1fc3813b2d3ff447599e23a29487fca539eb24dc04220787a6131ad8c4a42c21f20283bbe9a9fab7390e47abe3232e7ca411ae2717b76be92c2f24511e15028c2082424d370218cc31140aa843b95b46706353fce457fff0fb71f058277c75cf53ba9b9b81df435feebba2ecbb2b04ccbacccb2fa7a6cd68d9702b99a62c7cccc3ce7b451d89ed7368560fb22d21effc93f55dc0ab84b8a58ab9ba306e678e97cdecc3979724b645d8821b32887012ddbec12566b294f5809fb62a294d2d108ec1df2e4c5a218a6041636e73125dc0a12d3654913568ac2ed77eeb070f45120787848cff571151d310d8f71151dd151bdace78bd900881c08213f34343b4c83ae70d7a3a14f86ae877d5d528524ef418c4f1aa22b211aa22b25ccc41b164a8c1c70a54b12307703bd7a931812812b5d92601925b1a3bbd2a5c7ea6ee37644ceb0be3f0669e3388edb388ee3389fdbc693b36f767a2b42725af256044cf6cd8f53213bfd5e645281917edcc83cc967a50c48b5fedaf870bd75bf5edacd8d1ca0ebad8d97e35a7f5d9d0fd7f3c63baff210baf37598d75fb5762dd98fdb9f85cd8159a934221bce0a8b01690e368e77a3a9b894c5c4395dcef95c12c02f0910d4aaa5d29cee3c4da8393d95b07fbd2d55c3952e3ee0e07af6a6e6e7fa0d7c0e4a0e5e8ceb69a91e7603b5d4ecf4bf771ecaecbc1c4abaf8a2b875a5b7517366a8607b3c8c745358e7d5d47b1aeebc67e1b4dcfe4d4b5deec7edd7b42758d2fc6c5c4af5b65123619dc7edb8cdad6850b0b40c7605bcad34a72f202567c372a1cbccdd16b3c1c8c26e23006861b5980d1c723770035d422157bab4946e01ae74095b6ef6cdcf16c3a5886e3f0e4e5218f149f183172988285176154ec4d285d772cbc2c02a6c4dd521477c1ce8991fe2543851103f951c88f3e46a493bbd34a7c7f450f548b1c7a5dc7e1edf83aee7a75746a1052cae766db695ee30771bd89ce62e83b27cb9100d9eb81ef7dd760957ee36863b6eff16c37d9c4a3777db116e831105eb655f78c78bdb6008b1de067e2f896ce34a7f248804c6cea7fd95ab31b36f7eb020dde917525fec90b6b2eff6675f7bf8ad0d068403d69708b12657bafc0085cb1890e6f4db5081580f9ba20629171be70763e916717e301153690eb60323cd4f5555d1ae34a4fba9b6f1a6b85ceeb6cdc57adb665a6d1bbbc9c698d41360064fa5be1d4ec4873033b36ce6176666beb82d6b9c9f3aa43b0c43e48652f2c48a94944e92cd043393524e620c89d0e8323733333333f36c905b48325cb59ae77cf3f3a22ba9d55abb6934da7ff699fc335dc182982874f9e90f2129286770c54a2e269a1fbe44971f0b61298d7dbdf18fa4fb329dfb0ff273f66f84f1959b4efcd910736de66889bce21e5dbe350182a71716d3caa82424fc0182231ee09c9a4aa2c37a58c8fa15b80229490889240404455812b61f4896924acacca552a9343f3e1a9546a512e9d61f13b0328a5074e95b234ae9eaed74facccccc17bd38775e9b15b05dc2c2b89e8f463ae4a79e2416fe119a216c10f5f443146aada26641562fdceeb6b8fd3466fec7bf39d76b418ecbc13697d501fa562704cb9e97847432eaa9395dc285c6be3a8ea252ad6cb72634510459a61198b9fa56e6386573775b16a7d828ba042330d26da6ddf2a2c4f20b0062c020c97000e862d40ac35a128d0675053b42f5c85e5e0f46b1d1ecfa226c0706b6673ee360917cbfe84a3adb791a922e7344e5baad7367f60bd436be63e3a2946984b20823798ecc37115b8d63f82325a6bbbb9f626188bd60e1fcf86824676428d4fcd45a2b8642b5f4070b61426e63416e63406e877eec90b2b91d321e5d8f85349ec542b71d0b2f4b7b8c1761adaaaa5be082f442d5a2aa54b58b4bdf473e923398623d3026b0275c382c94275868d171e415a7450deaaa050585c3f9d768acadb5566b359a7f0e0705c54925ba23055e4a612e20ec849140587fcd512f97554cda46868dfada6bdd8df0c667418408ba81830405921d011cb3082650fd1c20fa4d61f29110162ad00d1c191a46201ffd377054c004f2613d8e468338ce18af8295cdf932d0b747b74560d667595f2908dd4155a82804424196cb6fc9a65ff70ba97442c9eee6a4c456b01d2addb14cb07c3d47592d28281c0e4943ca24cb2a20a1851308875b710255fe419e30f65961a53ca1ff5d7efacd5a5dec8df7fd19f63a4c19d6f3b51eab9dd5cd113463baf37df388ece858d110fd60e847bf119d991e76748729223f5ababbfb3d0cfda3d49d524aa97f9e12f2904824121961e75b545409f9d79c6efe986229974a324b29f92b4b13b248817064529c403e98375ec5385aa0260adb89f80f47b5b0b7733b9d9d8b98f6901d7e264a46ec90c913feed0aebcd718ea1aec07c0fc3b0c77ed946966859d9bb08b2b81198eeee7e2b6366abb5382872d75d1c633a14a25996dd9075679c6d366b73939f86901feefbb5f723ee679dd6895ce72192acf348e618ace7a653738a7031e66007d188f59c546a4eb684cdb2ec2dcdb2322d47965d9b5dc2721a6f5e09aea5bd6b9de7a6e6f8497bcf4d41b4ce4fdb660064b0d96bbfbd767135b62d7be634c069b859a93d1a4d6a4eca365eca3eebbce4225fc6ac1216dba4e086eb0e22955ca4a2b88db48e81056e9eec4edcf6509bdf4cd184a1c8091aaa717d7d154d020b5709e9f125a46708e34004f984d054a3b0529e58ef39d5f1832a08d510aa504893a23264644193d76048188a3418151758a448912cb2b87a90c54664923249d9f0d9b0c384880da1db6f32c4446532daa062229a18a119554695516554afd18df5d8c686acd6524ad94d231768af1e58e76a4c3ae96b4cb58c4ace689a510dc074fb5126abdb6f926acfc52629132226a209cced3751ddc6b0f6c1d2d76162d8d38dc990e6042b27b455c4ce5516aca769e135ce0ebf268ea22692a85823e205eab66ba076d25e34965ed1465a4913a285da8fdbef607b1c740dbc50de7956fb1312ac066a20bf40f5e50487ba8c89738a1998b16046388361cebecbd9ca656cbc9ca55c6eee97e983e470888afc6b0ee683f43810241d10b6af958f2e206a91aa05c9e1e7310d974f15c882184610fd1c208d6e648480a66a6976b8a2668759e462fbe79c734e0e73d10585f5b0101602356eadfa5409d6c3444c6c8f740143eaf2672a4c03a63fd9b38719b98cc55c7e2f4b611ce65fe3fc641da64376f86be7613f5cbeb0202c36c4e5c742f2845fbc4cd67311263663224f8bdb820c80ca8636b42922f647db164bb2273bc4966c905aadd568fe399c17bf359c9f3986ff359c63a83ef6589d366c8f75d910b361c52cc986cdb16125b11502d6900856ceceace168c316da30dcb6603d3bbafdf57a5b78fbed88a574db86b6a539f687250db19554c3e690d8c0cad9e11028b2a10d6d68435e0540c59db6d9c4756713d543af5830b6855f54898ab93401735dd0596bf21d01f70006b8ddf58dc75c675e4cbb91cc18579670b409cb3f6b48f6e7af55d46de3a6e0992d2c07e14cd647adcf2a5941ac1d4c62d165067219bc4c65778f66e7a5d60b08abf1a4a3f99955f3cfe1cc150feba29d0c1bd70d186313a38f7e1cad43045d9f03a459dddddda26f234193e3917d06653deb63427ee8c8325d7ec2fa2c1539835eb64874343fd657e9e8a33f803db86c89b2979c075cccf8e926bb17107b45613d2fc2e154690e8bbee65c461059dffc30a83bebb3bef648fad8d7d761caa07f599d0cdad11165b1accf4447d6677dd7b2be5e7126f7121f68f2068f8ec01bec0035841316d4ea392fd29c200f86e841b5d51be60266762d5189b0b9b4d260fdd49ee9298ddbb81958e6ae093b6dd57055689e425206da83c5aec88eb09ee790148bf919e9b11282b8871b984ab2a9d0a3082a50db60940610e481020b14e8c60c296248201c5c0e8e08635c7e49335e8eebf971041148561f16e041c408925f9946bb3471bafc020f06973b17ccebf284df7be8e1921cb1389a67125a3599ae7741bdd87b7d2d4d4ac97540fb6debb4b999779a6a0abb70f0e800ba20af8ead0bc88b95ae37b3b719b67941bdd74fd3fccc54ca3453a62b65df6a52f2e422d569f5c856b3344b72069940a669a626cc3ccd97db2f2f66d6a0501a45524754844038780c4288201ff37380bc56310a4aa7ec73967575da079490f9ee6e142a8fe06accc6b81afeb3fed5611b191a0adf0cca9a7adb1a35274fde6c604fd2dd2079ec35924d875d7fb3d33dba8080a32cf3bcb9196f025cb6b92e6a836b930229de4b0552bc2cdef9940a49dc79758d9a256bbd374bb3344b93fa0b1710ac3b64a4b09e8320088a191486612d6eca90b0af39a4f9e1c00c89cb90b80ce9f667bef9e14ab3d35f355e9252343f6e32611ff635478421224ffa839c6a9b325f0fd6c344d7e3655256dae371a5517bbc6dcca4b42763b2fd1b1aac877d5c89992bddff76930913b1c0af878930956de4400e09d9058e082f704548ce08e9e13f03078e1c388954b19ff341c8585d6e19ea126e9b41a6417a58235fb89ae4490d524f990ffb2a262aa59a3328d728a594d2d7e866aa8a88aca504eb49f17635642d89419f7653d59c6601cb1379d28f0202c954b5e9d6f6b047bafc60fe4d8ee626826be101d60907380f05542f743030705ef4b049a2005010a0d68ddb410d0e04003387c89f3a215757c6d86a15b24d76e5a8e0cc96599164365116b240f0f462b198ac9155b28458a1f58344a2244aa22f94dd8a91a16fe42c6125cd8fd76aad46f3cfe14c14140f641f9a1f064921493dee8fdbbe91973a213fd6c80a9370db22494145f2a49f44a5b0403aa261e8ebba916103fb8a7537b2901024108e4b04f9f0cf3a1f6707740119fd88fc786a764639833541d81f525407d89c5eb146cdf12cd002ad517b249802575898065bf447739a020149e0fc78c9024b6029864a22d7297599a24402491678639a63c4022d90c7d09506a013461328a5b4994eabad49329b7a6885ed4ddf306c161d31e59c3d5b4af98282c2e13cc949a5d2a925c8ba28a575353f56f79fd58a595b351aab7a807eb353e95b4fa728766f5a68a29aaaa96f472512aaaa3a622a55ac46b4203f354c7d8fe9b86daa47c2ca4558e4f612f2533f27444900a588c2ed2f59d94f19725353bc2151534537555315aca99ae22aba8ed8405b79c94ba2110fe240dc9482f1d34bc9457e34cc6cc56593924b3d88212e77a292c84b5eead56505e6ee9e1ba719f8589a23b9ab2a2b8acd74dbd9e90eaad2ddddef52a552a924ea2508f9f123dc35b5dc90c6482d06196c7fcae7b9e9b6a7a58b114126a8dfa33bc0ebc5b81efda653e1a9e670483e8545794427d21c517bb87355f3b0aada55842293f659f3b01ff6243cb0cdc37a3eaa7f49fe022c55df867ed7cadef2b07715b7a9f55d40ddd49eec5bcb324bc3dee34f330ba3f5db6db89eab4435341923a5946f55312cae3677c1865687fee6d876335925845cba7357554b29a564d933f8e589ddeaea4f409e504076fa8544f1f32301d9e977f170b8fd33872b6cf3cc81abc2cecf21075a639abbbbbbbbbb9bbbb9bbbbfba59bfdbf49d2a2408a09647d0ed0ec48dc61b779f6f4d5ec5827d8f6808bb3d35fc204ebef62735630cde99829ac874880b072763a1386d54684266fb0645856cf39e79c73ce39dfea3979cee91da248a8248e5407450bd58800004000002315000028100a874402a168442c4b8afb14800c7788448250a10a644990c2300c52ca10631c3100040060448066340a0280c7932054502e9c53bf2005f3f61a83cf1d9a062621cbc7dbb7ef09e3ec809cc1dec87e692b5094c0481f981b0f1c452ef0380461b1dd1ee04993023067948ee0663181101e7b5d9b09e33b55f7e15be30ddaa81759d2713b1dfdbc0f50dc30932582f06cac59ed6205eafdeb8b31ecb2800a526f42d309cb80d0c90fb3db22242d2df4dba7977c9ffdb1a427554cc580b4ce99f244be8fa45e8ac58e5a91d5a6c0cb5b43d9a4042e9749c8d7bef6a2ba5398044c0a28ea75b154eabb8e528487c3c24491a9d9b754aa1b279125286cbdae3e5ed85fa45ec48d630881d3f9afab62744ea6b7b330557dc53a2a5a520d995a812de4b8ec71f1098b80b110435c9e0e6f64832f0ce81e39b4545dfa2a0f3137e6219741c24933fd8a2e4c997186ca730f9bb5003af5bff8ed23746488156ef214a25c74791750ac3459b5d25a247f412ba46ea244305447ec6ec1fa75ee58915a50bc0208ee884dd709a9db262792cc455aa38e1c382a2bdc4ffbd74667bd07573bb928e2e459bf30d49e0e10464ebc074b1e1aa4bb01fef825884c5a8f171fae7ea9bbf88c26426a0bfaeb832166e18babb2bde5013b0a2782e986b98ce37523e8585f362841dff01085944994b14af8e62a4c5ac13945b63076e32b9f84e43a6a1b5be880c63d889f7f1f2022646a7598ebf08361d1381143a3c5e2319a11335c052798c67fd7e5856e62c9e666ff8714900909df056aa33cabc84a1cd53900eeb50f70e8c93fd0f692acdc7f1d2f4735934e8b027defa87aa68abe9bf59c0e886cdf0fa1552527301ef5102a1ad32813c8d6c3969568a91fb1d5db71d4ce6d6607c86771b13f6bf37f79306013a280dc701d7663971ac81e7306247e3a70a833edae80d5f78e9aefbe29d10b7e982e62b1b4761fe1a7f8e04b897e23e59c1c0ceba41b79d65da923eda41a2ecfb69badbcb5844a88e2b1fac6e372a866b4ba848b59b7bc8f9be1a48608a48c860b75a957a1cb5ec8681742b8d4597a50f869d0d3a3e0465b69689a4086d472b283dad138a63ef7dea04204ddfa1bcc87fc8b3076680a93cc31d10f0410643de8d820d15a2c5a70f9044353d9f9a00583003da8d034e81298922bb267f589279aa3b0d2333cb532ce42710035df28370adeb68e0e04303eaea1951e4825be4fdb3440ca47054dbb578ddfb186c31719459dfc9fda806b0e0e55b5a5774411463c4243f2f1eed73c8a77a9451ed794bdede391ca92552c877994eae22a39c7e36a9923711a259ef7b589f80b77128f6576938bb5897bbe68b62f4c54e3381b6b67ea850a94fdb8396c0473df04d66de2e93a8a4ad9e39202daf69a9afc72f974c484c2c09fc8662888006fe37286c2f541cdf436149b62a0756040db5a3e29c8c67603426c8f19a332b971811102d2bef48575959c3d73613d17535fc79b28f6695a3e31162a9dfc1a98f785c7b8d38edd3ad6b5be44c4184c01e174a183f269872d8d25bb8da0d54cd684668c5e34fcb8ed6226c66d4370e7e7f4da31a996d868470c7b26130b62a2183af2b678b719e9c697f6c8a3526060b52dd59108e976e24a9bd128a0dfd4ca3d7819dffe740abd0533102cc988f139261ad049d790d67f28a34c9cc655bc69bb793ce750c87cbe1685bc3085b0a0f71dbf3aed5e4a333c2c74d8fcb969cb10fe84c2ec3452119c5aa6281443268bb3172086b9b4e4e904985572c7b9bf72fadcedb01982fd682c3c531e97f4e848f8c14c8c7a8341a2b050b895d4ede4ea9d2c0f49a36f4d8c5714b1b08ea6d254ee3fa1630a2464c6ff817c3a2b13aa3615d6055a4633502f2789b063e32d3edb21f1cecee3f9c252873d81c3a44ff606d6c6d405df2ef5a277da2d37ee7f044c6ed967dc58663f64d974aa40d47bfea7cc0d1e6f4d79379a362ec9e868b5bfcb9c02a7ab74256a94ec8548f5a4baea3785f0996ff65b9f99c55077b7d11b7f921a1368cd9d3cc82321f9c2ab721f270d93ef0ca8082f859d9748894f040896295cbc148fade996cb808954eeeaead31677f5d78286bb60d152b1ed6412a0888c7011eceffe55363df5084a5a850126439bda71206ea3a96a355200f9dac53650d1f9a5e3e12e238f3f5470b41d6fa2867b46c9f1b2e362a7b0e0a2ff445e7019dd4a9f9e5d1b18aa33487e987be0302148817c29ac65c47da17d0786dafafff0d0eacbc503880f0d432d02b682c5cdfb1dd5118714108ac92ed49762c3670ae95ea8ae9f3050e28369b97daa2832be28a815a165c36427d3a262167fc7069d3a9189bf5696a64d1f21332f0d9dc8b473ff9a83072937645f47291f8169f23ddf142e73a86982213caca7cfef6ab801f91d90b7515603e691c7a086e805fc0bf4e1eb3b162b7e5bc65a95121ded129a941cced0757611b6058282105a682b11116da504a61fd9fe3394eec22df8172091ff40060c162942fc41790d9bbd8f47879b4e0588e6415ecb02beb0f43f22d449791eb8b1e657cf3573d6566ef50b1a43863b95e3ae2e2dcfc1b278c8f56d29c5764c9d5b9b9f0e0944c990842986259e6b876a9752b60de1c4d13316afeb897c0b74ea048eb942356e0d46ea50f53d8b6d46e2021c122648fa365c50e628f82a2d880a565f4cc63317bc49581a156d250c7a65473aa1c05c433df64be1a604fdb772bccf6d85b477666620c998ace9da13e24aa12aacae234e10d2622573dedff0fd600525c6b295137c52450f6dac5670051bece81dfe0f989240481d86d8bf916ef17b4b23ea2b52401cfc2c78fca489d717d24a1e6c3ea20b16216795c16dddd471dba6f2c1c90503f68fe7deb8ba973ff439f138cb92ad68ce1299a5182b577c57499934de90080a623819861d5c140f6148a5f2e13f546e60f6154cf837bb8aa02616f66f5ce6064f4d4a35a9e854eeadba012405cba2bcca72348e2b8e599a691fc73641f8df29d3f8d3f94de6d213773e335ce46efd1781fc061064bcecf4a435d6045a383ce8b0a01e784c258f483bfbaf506f42906c8630e27ba41c229958b483d50cc531ef0237c87a55a9d769a597418e400fe7c81dfe96748cf90d5cdfefc591b5bed321c82dd8f6c94869442e7260849941b52af5e5ac4666625cc8343c87daa2a732c1b50852b48992bd7283254ef9f7dd5a4f0a18a053cb29b08db9d02e584c2c33b99961a400c65060770c2dfc7bc29c382e0ac90be7239c37c83d8fd1e5daae09b77ac622939c57cadf356a4f45153199415326eb9ee26c6e6f51cdb7c701fc5018c7c45b12e12b6ea5ef5741e2fd10c82e1f2774e5fbfa303db9228fc1d928cea3c8c77801ff24c271e15a762054842cf5dd623d60b12b0ac9fc7874fa5256fba58ca398e991cecbc74ce8dffb123798772bd14ea427f009ec59ac33cef4d999dca50aa4bd54e8750f54ede3998108a782958c53e99a983596c1ba753bf419ef110f23bf79f289ba54747dc86c8e14e9f06d38d1dd72b70810e25ff2ce136b50bf2890d290ac7af7469b088a68e51c513d6462b2590624217886a685f14bd36aa4ba11d4d0e06ea6b678c27f68fc9d2002f4b9dcd7db065586e4530408b31f09d131204891c3fde482221f385aae35e908f9f1ee501ae162c8c8d0dfe358f3a39d3d922ea54782a028522b6821a7dc76df48c009ed8332c3f9bb799e922679129d851070dbed3f654ed4ba2f8b8066343a6cb207767d8e02d4a90afa9735885ff4f6952c49fb3876ae6306ca50b1ded14dd89ef58aac8412441e94beaecad23704aab68103d2c4c8ee296e33374822668b892b976e9ac62c8dcaf51b06c7f4c29279546df784f527c22a3dd461792269d5c8f7a17ed6e4fa9ed2af9ec15c81d7e3025a178874b121f1e97a6432a63b1301c33bdbf5f965c09d0aed4c3d56e19f61cadc9f1ba395a7b9e3fdf4e0e53639064a8cc017943e84e6d0ef19b7d2288d0df6f64fbd048f0ed13e4e1e5a13169c6f34c15c9239ed6527a1ad2f4b0d898bd8e503ecfbe3ae6abd18684b679594b075b1bdc44b9c4d8845489d010cc7ff8d60262dc210be76d5a2ed192e04859e30a41d0acb4dc488d4456b16fd06a7591ee15ee862ed9c577a2d2e9ecad9d5c836b69440a484ea556c644ff5bef8175c4f067d6601ae00dfa7e2d36d22626608e841e2f9731cc7616b6cd143add933d793efa8873766757407ec74714ef507e50e82464d8c3332dd699526ea11283165f35c87828c2a7d7b8d515de78a281231138740c300bb7a289dc8ef1573a66166877efaae5bdd5b4e4bd23adc2d3071ba9a9792db486b15b2a3f29eb3e4284272829d24b742cc448aa6b60109fa087cc470d71a8d1fe760b3d5d0158c1176718f4f35826461b5491c5609521d1a6320f6693a7fa60dc37bd99705f00e16bea46b063d73abae6975de91d3d49f57cd50eb9329779fda176e75ee74bb5f4c8bab2a25a1c630019d453b1a5c556552e34283b98c9ab295356304bbe4cb97c0de7281828944f06653fecdbdabb21d7e82cec5501cc3239c20e31e258846d09286195969a71bfe0605e172de10aa4dac9c27fdaba4b1128b6080b39520d04fc12da43a0c49ba22b2b221cee21f1ba2bb417935b9bf1b9e7cf297d4692a91ed633adc46549d06c93959d621cd2c6f9d17b32d124b16042ad079ce27a10de7fee524bb80bd904ed8d24bc015f952299ae5e61714de645573f20763fe08ecad1ced315300a39a4e0f1efe216964347a20792390a31f0d9029019346b68b40fcaa35bea6a82eaa21f6075bab80890cf8d400e4b7f5042b2526b58083a94131758adde0cc658ac8b091c18378d81a4ffc56ca5a040c2df74763b7f3847b5ee69d89291710fed33a0a28378381691d6e51fe4aed0ec5e293731a15141d8bc8a8bfe069c5e248c849a340a7f348814b3f3d8cef33174c6b89c1d01789b825e672033474ef380b9688172e282f70186c1b704b40efba1a588fa684a812d891e83398690c0aa2a2a533c77db44c4678537d77612a1a56421fb7e69898605c51c1170112e2b541d275db11a1ce3af90775c95f0729ea791e23e3259b4ebb81aa876e90755b956f22a78e2e7fe8e6acc275aac7c9c251c0cd4d8057061c8c88c9a03493f5c28e80e91a57b11b77cffcd2d4b89b145cf8ca15752a5a2648388a92cbe2083823825101220815a6a9ce5cdcf15e9dcfccd18010213b228c46c01a72f2cc62a58447b40a5a65b5465a2bd6af3e2fe5427322296874fd6e7aded1210c28c72a505a23c6b11ca1e63e79910c5a86ec8c4258463d61868e758ece0b8d392903455e52821c2eb33a1b26728c6e1dcc0d0751f3ff1fc1585792b159e4f164c7c3724ffe547f24e920917758ae503a1a2535c3c939df55aa2412435cd56a7993ee0f79b0b85e86e9458f331c5a919c48f5efdb7548e2aea6c09a67334fefebde102bcf2e17ab8b8e063201de840dc91f3bc70c9ad166a29e544499fea3229253f44f09af95771001e68aef4456031c031288b46a6dea0310dea586951af28aece5ba70667070256128b219a4417746d550e52a09d125f1220de0fbf14c6b72c31da6bc48662c2089ca193d50feda734239abfbf028f9541c1e392fb516895ec43701401034184dcadf9c972366cbd9f00298dfcd03255103a96f3d769493551082ce5e4ee190b4f1c4fe0fccda07c54cbf0cf4e2fb57191358ddcf09a39e3599db2401e43074cee9cc312db3060c50b65e12bd1558d2fc0459241139cc951d92b4bcf9119c4dd0676bec2f720ba6c7f4dcc586c425250c2149e82528ab2139a4fcb67f09b7e8406a3dda7bf89e28117f486c9381ba640d133190bef62c236a2b212049dc569ecea9a7c18ff600eee857eb637173984c962678c660028035d119349992bfc2fdcad5e6adff068b85230d87875a69220db701b7c70fc9aee8b0454168747c3aee4722c993f62a44a5f81088262c9d1f5d0b88547a43769a5d92c535743d1f9a893b5e85fa649d23edc7227ffe4cc379615cc57fbc041676f8809fe88fe7a69bd86692da91489e80c866a1cafc99eb6724fac5db86ee9f4a6868b58fa9fb09307c63d6267e4586caeddd6bd9fbea9dbf464c4ca7a50f8c83855fef853430b15af87019510c2925464fabe8cbb823a9e9462e30343c44f02247ed064170b59612ab0f9f5b3401b923158fb79a4e72f4cf0f330187fcdc4f099d5f76ca67aa5748140511f0642c4f0c9a8f3457b65bbc7c7c95758cce948fe25f450c4f7ed8b5ad4b130c44445b805a755951d72ef8987879c33222d033231dbe57b9442a723b055cbe8706eaad13b8ae4ea8f2cac5035d5f8d962e4bee97b6b0d4f1dc704ca6a5429b02f68b889e36e78ad57db0679e17e0f9ecce49d6a75f1eaf3de7fd9e0d9cfe2422d1b54eeedd9a323b02218749df3ef5de03c1620f8ff141540ad18640b7a063e06dea00c4fe7b9677e6b78ee8ac0e39eb4cd04aa4c75b115c1bc899bca4cd76b7d2de5a78492045bd8ae4e7f449c2ef464eef27c5a121c11f216ea539f5ab73b253ea70bd38256c2b285bff62d54b1f22e025242f32422ffb8bac209a6fe2b8de523d6e68db5809168453a88bf5c70a63a52db8f95464a7068ec6919c32a2688f48d9b5b091a9cd41e445905362154f8ac50d9543c906757be7968c973a6da85a184740b0a0d598e5295948d1547c303145aa33cd8e0235083e5165bcccfe4faaf55d2902054fcac2580dc58183d5dc80bbd21f7b1cea5d01cded894c0c35f57539713e221c7d37e34ce468a78f0785c41bbd711cf497824868450e1dfaff98a4af9e70b5ad08e446a58f63e1b4e3f510d0ca5a4c9fcf6b0c1a370e641c2a1c8986ad63ac7cc72c8d8114baeb5f1b94af02ca1b7b2289af8bebfb5756fd48186143f0f3ba73908e38995b26c68255086d3b4cc4ddbeefbc0e51c075ac57fb1a4f2d7bc31580f9e3dccc23b9061871ed07a1f3436b775fc826c291cb6fc22a2cb1be8daa52903dc689183f7a4a4148052970498874bf237449d2260688e2f839a4c2e323077cc75d56c2ac0a340d0f49921acf0ea905695dcb44fbac700badf74529ca295dc0f3f18e7688291b3edbe5645213de3dc17263b542b2e807e0acd6a2dc40b5ee2844304f4e9ac71d814c58481999a58a47575de4976d986eac463e0188901a44d4f1769c5983839084fa53c0651c831e8f2871894536ea45081a459e0d92122522e38bcd70453c48bab79fe7137e95e24b6d0c7ba7edf1e2c80f497ee369839eec850574d0aa87ec1c24088d5f7ee6a939fdd94073e6b4bd6b3292ae3c4580fb47ef433c5c6db538d460515b6de41577f5c0690e2027c1f246ae4357a27b7e3f8f0e7b0db4ea3f7c286e9c14849ff13b9273314f494b71b02f9367ed3d72bbec0cbf6d5ec404a554dd323246272e16426db9ae9095c750f6b7a52faec1bd3230190e13575730919837b62640dc27e520cf31eed00080c8d1f4df44c44a84929f0ff94a28d2ad646c642170e617572c6b638e18e9dea2955861ca29dbdc224b6078f60fb393da320d5af75d3764c667fcf8f23c2cb56ff699e751e532e77c5c9a70ddc9ef49f7de620a9e42476bb1b8b47071a128ca442d2a46c258114305d0dd5c9a05dcdbb025df615613ee130af9f615a7741dc6d48a571f982c35b4b2ff45300c2288c91fee834538fcc6331a7d0d8fe0eb48d1ff8910521f3635ef664e72b00ace4d4ae5e7384eb7b84b6ff2fc5a57a2e3a8d196b28c0236520cc84c621a15f4018c8521c4d56a45b30d0836df17ece905a52143155fd872806328da1944f6440273583c0f43cdb1d83a6666dcc73b4842de0916adae873a76a86e2695d3910ffcb16ab58b2b88a98fc35743e479ffee2275c025888bd05a6ab61defdc2e6f68268417a14a4d885340cd198b0cec13e8e869e53301583b7912f5b5c06fea5f3a4cf9e533140a8485b17140c1174301753133da51a86539fe46a1724edd05ce3948385e9b80ecf6eb8e52245958b069161197d5c2a5c6596e3498e55cecc723a9f306ff1d14bbe0c41e1a399d2545ba01548880bfe18309671502671e66c62f1a33c5ab067f650fc9c405c6346636ed89133e03dad7e96330185557e8bce471a871f5ef088ee84b4786157069e284dcbc7a56f6ed4da959737ca4c6e998f11c1212c8ee8b16f5ddfad1170704994a19e64c73def64ae671d3424956814f0192afb7793bb941d867b4bdf4d3f56291b7c29366dfa72d37cd506b4bfff0a984423860ffc87909591ca7fa710def943d891a824170b9802e1b8b4b20f0e658595f8f5f77880e2000923e9a3813b200e0e0d65f5e02fd3ff56adaa0e6e8ca19c7667f2fa546cc6249da1e44fd8a3eeb00682158135abd98c44427112dffc027c8612800b32d95a2f8fa9fa6f072ac7e23b8d270f6533f5e816c0cf0968e77856c4888af9e09634ca0f64fb1d599b63fc4cd9787c62f6863579d642815094dbf24ad9404cdbc339d7cadf6b36988af343def6e9e4f4a00377bdf8228f44d1f00e573fd7eaefe17c12b051a42826d0f5706283b2a93e087567e44a85937a7950c41b02fdddb9954b5c7dedcc48853183f3c7d6ef8a5586e574e2d6791b0d55f420acd2572e0ea96e7a4f7c17529730458665b793a90f6d3d49d0d5b951813ab9a2c359f3c43d7cc3ec1d3157e15825fc26ad6edac6aa499b881637734eba8ce23dc27eed681da6d0c787f89ddfa72b3220228142388eceeff2b7eac9d586dae3b245518bb4b37a14a9e536942718bf29194900ffb3dce973bbebb018c86429840d84556a73504de138500c18414b9f0b1e90bef422f5d11924f846af1b9e89906b1ec10361d68d8b4d6676bb22558ddebc2c87e453ea08967d0d0b5eab812c0d33376bb28ce6780fd1b55bc437efe9019aa22056cfc6ca70021e7b160c344409b2c990aad06850d839098d9e6c759609d90e051dbd895cb1160ffcdb8261925a45088b7a8d6c22580f974573b0c984ab505c697fd8070fa78b536ea65410b9138db98f701d90f6874458e5f97e476194b0680e49a4724f305f013bc1908ba7d7302ed01c3effe395bcb706d2189dfd6ed00fbd2de0dda679032b63bc786b2bcecf12040cb1027c8ff6311b8c5f33025a80b2d9659e032bf2465546aeac3f2fa93ca38093b1b2113b5e1afbc40f0367311cbaafd93847d24d0a00fb431cb854b0a6a7a66e94a6e25b8bfd9eedbac48e2b2e09ef6a94ca33d42b5392953e5d635e2bd952c3d2bfef7757ba011df15f7380cb31b318223b6449006595e23204cb6dd3b16935d272d564df49b2fc4f8ee54596fd06727565ee1570593aa3f9454329d6962e44627fe549bccd296150131d17b7406bff15480ad41acc0d61e9d27b94844c34567a6841a4c7077b9279cc6547591a9b8a3d39a0d69d5872daf280d59fecf9e940d9c7d12e32ec52051046a66e74436b57726fff955e839850024f77c8d193862ca460b74c7688651b873962d00ad3a50d45ce53cdba5f9cabce181de0bb44f574d4a7a99e6ab0771aea3242981f4368d15c131526c9603969a3bb2a777aebe2b05bcde535860fca20835b30079ead7b09d3bf66674fc730f978a40a5461345af20fdb9efb0439302402f16ff7dff49eb69f18e84ea2061fc6b58877a8165a6922a8f6750eee686c618f41facb9a36ac517c84be2f82b36425f80f1a26ffd77d24c109739b63457cd3de2ce89096e04e7e2304e7a3427c5ec841eabf419fdafd22622ae49c832d83a40f27ae7db0485dd6599f6f5c9fcf934fe0871345926f8b614c0cfc6c5e678a2293fb03cfe7416100c81aa56e3a11c9acd5bee81119a3416736f73210e9498031a8db72405f0026c2a09ba4d9e49c9aa8d973aaacd2f4aa0d0b77088d06090a74cef71634f1554269d3157bfda94ff6cfab437e676a2e17576a04e66bf1590cb02a5f0e7f963d7625df4d2a8a7c5a28f5aac40824764c174c5da3205e68d36be0c0afc2b628184f50ffc142952ee56bed54216b16ade1c69d2664d971dc091b993e5ec56beaf17cf0fdb7efb9eb233f8e1e39f1f2a6798400140296ec3c1b4b53b93fa6848c32e9534b0c2d72f91b900679e969d56f396bbbeb2e11d0e7a7217c9b83a86e26d021930ea49d9df907da84380f51cd61801331a55f94fa725f4f906b033865e63674691dec255f8e6ea42bcdc8332c86ce6d5f4c2c2d96e7f8e8e9d2b2335368eb2905e8d4f023b6811321b45905f2339951ed7c2eecd306822e155bd8db9636a8d90af5d82658b2411dbe762a058a767b9b0d21e3ba62761cdb9847e903c7bfc215129a5acffcd5b190f1bae8c245ffbf7318ed3b32fabee93d84055fd59f5d9b604b04339a5eebbb30f308c3a4f2d6653f60a5479a13b2a2f7484381a7bf2848355714c78a370bcbb4c0fc01b622363a66238227b03d0dc408140bb8b6f44149e7527311ae500207dc7b23097adb6d03cc5ee5c7f708140d504bc51438da64cc673731af23470ae7cfc3dbc41a24ccdfcaa43df668a7a1ed68d82b2c48cf68f354ede69978b15895e42dc68d0270e5c20facde2d3104dacbcc051222ffa6b82ec4f29bc299552f2ce322c99ddc788e081880cf94cdab68f0203a5457d5062b0e9112b0cc25b82549f2ab0ff261678005291ebf608b93e83d251fb9e7631074c97b4557f53ca5b1f8d4298cba41cec8099827a6dd5c8f9f1181d90b8e69bd520b462ae6ebfa73e712d4dac070d8211d0be05d6e84ee3e5ab7ada98537a9afd701151e94153134d5f7e76b45431c63a72bfddc84e0c289c2ad1951c400689195cc3a338a4ce901608c0cd8526a5c2973172d715083e896c52df0f6c7419dd4cfff461d6f2cb8d6df9f7423697377df78f84a1ef35c1a01952bac3c1686b36c6041adb74fef5c9ee474d1748ac4d3821eeb33935e3fe3b98a65b42b96561effe8f6e7a7ed8cdd74bdf02faf30a414ebf3c4501a9bf2e375750735ab797e6ca9ce550fcd53eeec930e7c9ded4620c07aeceefd85fce80881677685bceb688bf49bcc61515e6533c8ac534cc616a8734d3f6b572ac1417c0fa0a62fc311592bb143c41f0673ccc6c64a79cc686974e5102bf425212676e85c35e40bec86802ed186fe77b5eeb37a2ab1b87eff8d0e9d7a9d8195006bac7786ba1ec7773f6a90f456f8108499d1d3c0dcf36946314ddec2efde3c248e484fda99cf4b3fa87e87c4493291da8743df52c924c894523b3475855b8b220ac1d1ff3c27e3cec4226f60aa313ae436527c75fad2a1e7dd6f04a121b7c2c681f7c9f70ed7cf19aa413a4e6f02f1f19d9cf972942db5f9aecd56d13f7a6db6648fb35e4f45c6d3c648dfbda35ad6c09ed4db19db578922cfdd08c4126a2ceaac3898546d8b1871182a657f7a42ee86dfb19957b82893e5d14b0946b9d5692ed314e3d53f53f88aa49c793ecd721f0e364b445b88b63ec69af54388e5e56c39a01790c2b39349e0e2fe95d039429db0b0ef5bbe7b11643b61ef887567f5c9caf6d5a5388470900bfb68495016e0ed65c6a0e98a0968a0d65fb95d9d02494db6858eeb7b531464ee5bb8da05624bdc043d00b0dc9bd95f76a2ee68a58d15958ed8a85df73585d96670afd4b7ee23797887b435c736421ea8d6811bfe78bc64ed032fee46fed7c552fb48639a1e1e8eb5dc32e82530911f33d14fd0994b413423443c2d94d7ff13ea78f6f499c01cd6bdbd860090a2bd11334c5e7ce9f8ab35fa560a81256824ef38766796aae0f95c48df135b6fc3572c11faa029546389d5349752304b0c08790764433c24c4e3823d9008dd6468889fa406f01828e81bb4aa6bceb7fc8505b5f7c7520ffc91b08985618fdd816387c431014c950e4448d0de443cd4831502cf2656173bbbb667bc14a037cfd05a88ebd9f31e678e38dda0cdf3838099cd462a9fd17af6be9277c6872f047d07efef66b2ea879b3c989548e0a63e0f7faf3959a39a8ad910b755d2fabb8627a743310a720bf32e37ea4d1d0c8b8609ea7c0fd8e79ed084de7926ce0de3480374de83686439284fd513b84cec232a81754a8f8ea8c1a2f825147213978e5ff3c5ab9fbb725f499c455240900593634c3e421581d2e386738de9d2fdbee9451400feccea51f04275ec6a59a59d73b9336ce8fc61e1c5465dae2e339637ffb6a91641260427b98cde0792e819de2917d9d158904fb3f1769e1858813b2037f5a0cea192deb455ecad19dd65d3e3e6b4f877f1d91fe807aa07b8cb71662bf9bb24f65c6faadacd802f6464549973983637a14fed8a74715e60d9dc3d4d67c778cabf50f0327a2a4bf9e9ae2e5fec6810fead6e9ef4c967352aaf69c76cfaa182177cb89b42549d4d6400a3ad0a89abc51b43f5165e88ce0a04cc62be224d3a408390f14ee3cd0019969c74f30b298b15e146ee81f08477d67d027d6f92802a564297ae6b6484d5d08797776a0aa816927681b2e392b45780f3a5375dec6c493523199081752a54fc973868b8f953d39c6294ee3791ad1d8508fd8b1e31fbd5c32089b9f9561a5602f51ce108c12e5688b4787ab62f094af760bcff2372ee856011eb0651a89ecda4d45c4be221b9bde38d7b49700027bce48c460cb398101b0f47d7139e868cf4243d377b8b4518e62a04d9b7548f9f0f938ada9793687ad7cb66d896b68c0907e128623525a8bd68e7059a136f8d2ec7122e65de0d1ad11ed93ae8f76fc70a351237ebcd3d4df3e055d4bb4c4b52d3db5c891540bbabf8e695ef4eb0e113f10fe2b276d32a6cddf16c70fbedcc860e66010d10faf5c5309eaa92c1643c9e21cdf8aeb750566c2b106b382535e9b4f7236ca06ca20eb1c0c415da7df7ca7c6e2346308fe0573002cade0e7b49faa157d9c271ac76816434d32ba6686e516d1366d11e88f03fab9a8210fe11275080fadb8f30dd44149b1663af3d2931fed191b00bec84c4e0ed4d2cf082f075bac830115e9e8c17f7f88260766fb37b839729be6a277fc3203ca8672543dea7484dcf06f8287bdaf5d7a1aa87eb8e1ebe140eadd8df2e2911cd10186213d3acc5c1692a352323037d2889c882d814b010162e095cdc069661a20a5a297229f715749c60b82c9ddd94d381a281a2a2a1621cc083e829ff2798d9ebcb23d99fe197e59be675f369582130bd7a878202100ac20e6d0a7076e80102d42cddac635f3924d03da009091f96bb27fd0dd19b675731a690f6b9a275228d145cba9bffc3bac6674635e0d9b016b8b062dec647dbc0a8340785b720ad03a435e6b0e25b8d445ff0c8ff5d815d5c7ff7de261ac8bbda01e0d83a837f02e8bb25bca6b7c6bd061d20c208b448474c4addc1983312fafe5c32d10b6696acf51bad3a0c3acfc78b289f5268e5668f35b8b6fb9459b951d2343b3b67276cfa3e2b1baa5304b51713162044deb617be95bbad2fb54465e1857f227efa74f4bd529635c2f590ebe0deb10528870d1267dfcaca2477adeff0b734fc2a139383cfe3ab7e94ab04e54036d11f1c532e09888d73f29c1c46ab20c319823614024d377544cebc075d737540beecfc30f77ead54a5e7c9c833f651934eb24aa9037661418f9c074e5bb803f105c5577dc5db00b22023a57334bba66535dac6016529018ae030b2bd9a72ab5d37982dc6e79653a4b3b82b20a08155c268f307c4a7b0b9e91cdd26d61d242f0a02ae68a953c71d0ae662f1301eda8b05873782b1b6ba8ede59160d2b38cdc74639187449f4ebfd936ca32b11b693b4cdcb0358f29b891c206a52e94f3f18d749dd7c555f4c084c1bb888aaae6e15d7428395b91bb9825f45310a0408a43807e5a040187f1c92954464c6118aa557148c2086f2c23f822172ec8ab852821ff726cd3316db3bf25326d547666ba151fd09e147b15311bd49111233ecc0966a4165db0c46d841f61f40438af241daa80905f42fa7b044d1188e62bb81250445a41e4d880e1f8b077c3537a054ded8f5b09671c1eb88c9ba61fa6df4fe24e63c80e5cb33cc08e923163f66bc7c45ae200636e19e8aec4e1645bfd5b8a7910f2b5610c35896e65b822f93eb79161868077fc2fd3cafbf1415682243e2f8ea905dec1d53e31a300128a1a467768345049c6b0d474d460a2e1ac1474000a9cb2327b3259266f8bb508d5dfee44feb1b285c0858f8bffb703e35d2d2a75f5ad20cffbc952b93c9e8d77ac4ad742215e5263c83a3df0050cd379743a8db93f1c6335e1dc63241e7e7faf1e3b1f10f3a611d43b9958511e29997265565a2b5ebba6a118e71f059978ab4685fe3ee8bd941e5e2b0f65c6764cc2915eba4fbaefab9bec7172414e29673d7293d41e8f94293a90de0a7bb7f0142c4b34cdf7f69b50ef175f65bb0527b356e46daaf18b4239a70d7bb572b3fe60a815ec888a6593a12550f3a8da6c5a6b9504381b220c40e051bdfda7ccca63fd3dc126141315cbb23e5b3990687812dc76e8a682e4ab8600c453e2b4596f0decd92f97ec24ea0a2473eb2e3d29e6e62c734a278682f54c7188cd4d2a4087ddb8c9f1c88677f0dcf5dfd9f1114ab440dab4dbd02a561f511f94324c64206a55ea83ab6e20b05ce66eaae89aa89c2dba92aa1252b2489f022820a948bca04313cbd3b2066b56e3b74991d02a6667620d04fb0a2e8cc3053fb45278d7b155d6d25272ca1e1c048b896391a556a5beb0872ace2ded7ea110acd2415fb372e58a132149c35b472d1af3585f94db518ee8a4211a3dabc3c9d1ebb628ed89165385414d1592219ee00459c83832439425d5c56c67ef744a9e76b96d02fbca4307ecf6dae1f96324d2ab17f4ad9f72bd4289ec623a70073a612b9f1980aa59508ed08bbef9b07a24a744888e47c2c91b89a35f9bc41515a65869eaa9834e7bd02ae173008586d5cb03a29b8687263810af2da3f22a865b729ce42bd8d4eb4a58c0b0f9a3704cded78010898dc3ebb98ae2e9368a4773449b8c4ecd0683b3eb0c841e695aba70019965b8a46dfeba64f401720c1c28b93d032c882ab46d19536c40719f8c2c9966476a46e7e0e081d4ae8a5fbc0c6b088d35c320a6e2a3d5d0b52aa5935c2e77793b4b4326c73609ffc2de7ac9965efbf7321fcd56cd7da12e3af2a3bfe98d1ce7588caa96cd4265c1c9e5a547f94802a24f6f6277b906a364c529ca11d9b4e2e5916f87e6be721750e638a23bf6b0980528ccfa2cf0b0612a59ec3385f6f464d103d91ac8b516531e8eafb262d8946bd58a79af6f36d7d2c62bea11db905fa2470c5e5b0a30661c73d629761b7d2dabb1515c61d00ede0cdfa1efc3ff0ae1976ee23efdacc0f4bebdfea2e6214840a7d90fbd6fc5eacb474f2eb71180a2b3d9c5c8405c62b57c6778ee7497e74cfc514afe82c6a8037123a6cf9ef885c5f6241aceb646a69f3b8685b418228f2382fb580a67f0685ca1179decb1afdf8839f77b56165b385e40c24033312c914a27b365e8eb5299ee86b29262ba154bb51f61cafb06a77fdf6f67d44b9df3d63ef1c16a90598881ec5780de659768df2575b6cf499394e349a7ab6c89c23f91fca7174042f489969436fc7a6a486dcad7d010b2b6926d66798842dbb12ff74985593d04060f65aaa847b3fde62a893651c52bf532bd42bc4bc8586b1f6f57373db4973ec92ac7593612768784eaede420f1d7a10e038352e950f727fbc34df22b3318b69a36ff77b7dff2bfa4bce0f0f8cb70d9bb226acd103ee1ed40607c5f1c2ac2626736347f3e19f2c6f88dcae325b998189b6a3034fdffdeb92fc94c30a41cfe0913b9b4cd223aed55121661887b6f81f75fa03ef6d662e031e7de5952b9bec1d5b54a612cbcc9d30d9ea01878f1a0a1b88d7bccb3416f400b1e16c4f8dd356813664ae0c14a454c6c41697a4349810ba89e0c4f1c16e20b15b229cc5ffced28256471299d43740471be8007801a518969de0156ef0a4b02349bb5428e4d15c8d75c37fca3b37ec636977a52e1b6a9071c9ec611895b748e203b8d04aee3f02e4c8e25e49af60565968d2fef5206b291b46d096ee8b87a7de26410d6c8ef15ab142712246ed47bd0dd16e88944a23aa480b26b6d84c43b5a58e2628b37a8406c24a4928d2528c843edb7f70f306104f36b512bca1f57d56f7416ffb642f80a7e73db0f19c38a9e52d7c349f5012f024b88dd29e1d739d3fcc5fdb85339dc5bc24cbc9f84646ed6e86b8a2b97e7d84ff085ee6ff60e15b5d85f44930fe43f2f9f3f483089ac7d89f8494072962d5f71851ab019bd678eaa1f3760af050c268e510fd152cf9d8168fb0bf9415f84362932f6aa7066eced27535c6aac149c35f1e6a920c6111e64a3ad854ed9f5401190bd9ef29ab6975139e7aa10cdd9d76c9af9bb5077620ba8d1a1a7470c0996f596ac6164004619445e9869b77b485c32188a918cae47177295a717e80ff0c2229713211352d163c08f23014b2a078b149ec3573c05011745dcbbede69ea7af389ee7c6a44763828ac3fafcc8ee2f3862516c0009d33a093881a2ad4698f4c78d6d2230764161e53091fa57cc78ade606802c2417c4befe9821b03e5ae55da657c13f463f200314346ad8f09b3376a821be1f42d6980f3c77d8127d31580c428257c3692a7a20bf0f7b51efdaf0617bd4e260646f7dcd78e4f3610b4110fb529350ac6b807184414029985a95ffc52a78e6014554da8324d0c9e1bad8678a4473ec734eb0e83cc85ab25470084cb46756b0ec3b20bf0920024f8def5cb81b402c17407678215c8cc65de042599bc4f7a428aba6e848f03f29493a81bd9a0000289418c4f61eed48414f2e590b84e9490e75bb139a3720de104fa50e979b7664be282bf97b98b4b450ae608b9beb1dc4084ccb2a45379fbe2a392bb1b2b8e27d24ad196116006a8990fc261835a96e33b4fc0f568ecf391da586e5843d15de7d2a8c46fa5d775ecd179619e68a119aa8ef899b7d4862a30ecee2833921b47a7dbc4d82ac9f5537ebabe4fd97f827aa4a719b9c1eb081bbda1dd2615670651ddcddf805624e9ad21af152a7fac0cf7ca8770ea9be7edc83b2685581bbf42762b82169dad32c25b22f876ed036461acd23ad19a0e44d604fb3dd4c3f9071a219af9d03e7476ac473f89efbf3c6881ac65bfde430d251dae088ce2794932c7512cdc6072a45c0f88be8d65e4f03fd1068aec290b05effa38e12cc23a56322f55e901192851b1f43dd4b1f25498fa80bc121896908082be096145c495027c8d65ab79b920dfb06a50175a6066c660a25460d18f96b4d4e506ab8f83f5030654c1bc3aabf67f46424923aac1a60d19a86ed4ad432e380d21af2aa120223708910b307e92be48d1d150f15dabe3de78bebbc9c92169ee1f4459e77987e8270e4ad90935650c9e18a01eb5b6dee2416415f26cf5a62c3123c4af2589cc6d9ba23907d0265d771b6408c515452e71894ad906e9fc32f702c437374cba687c0aa4526326226e8b783b4f5fb735880a4802c23bcf0e1bf66f2557f12cf9e6edba500b6cf0833c855e8b669052d382b2ced3ce698b53a6476878d5fb5e868f27cbb6a509464da7023699d72c091f80d32ffa475cc6cc7791293d16f9201c57323ebf671d68ae4943cf79921caea7cade607d1a04cff152df2082de7694fd704e2612544f84a5aae3ba5ea43af36b25b6d60f0c9a671fa6d513e0be1a14b12be0488cd2a57dc2181916286dfe93fd641c752b9c9c4b65d10f39065ec3762af099bf1c5e7a27e05c8215a9c95695a1596636b39321fe68128d1635960d354df1f86bc8749287f0a61ac458af7bbdd3f4d03adeefb226dac4ccb0f400065fd8b74ee88715dd0686b89c686ee10f10a6bcb509e6a0f6c8285c23b6bcb166970cd6e707eb988360dd72607b9d15a45ec2a44dd03e28b0db1f1a207e028aa7fc80376920e3c49ca245a07fb1b33552038ed40090ae622a933c60916dfa51f1c7862630b76a29693944839d324c52ec074506ef8288c11211321a0e4614d39edd5dd7e82a568c5b79d59e85e3ad59832abef4e3e46974636ac7098ec49626041d1ee384f0d29a72a5e96e1b3fd8025a02339669ef0357decedf13400a3cd0af3f937aeab230c73a1f2fa409bc87a8caa6dea20259edea81877c350ef0f20661dff4ffc10c4c1379a6210fecdc7b45f1b456ea63720978a0a6062e44a97e66dd850c5a36815bffb083b8a77cbe572cc466f31ffbe6bbbdde8a6403bbf2d261b7802fc5405fdde21b19a3ea60a4b14383e068169653d2d09aabaacf192f259894cc2a797af6b928d8a3a626edf5578cb7f7cc5f6834816643ede862f2ff296794687768edbbc5870381df081f102e65a37f7480300815f06e8685b6fafc188634a88b0019ef572d351f82a655becfd0100da5c4b49f5df9b7d415c2cafc114255219585c8e462014e18342734396642fb6179ac5b0df4be49f2b5def1b502b354ceadbbc4190416c3161e5092787cc84eed4bd894822e74568d092cc9477d802aa206fdf6775263586ac80d553518100df07b6c57e1b241709da65afdcc7f99e7cc9c5ab4482e0123e2e1088ef9bb3b2973d29a16ba0adb70dc65a7de0dd0d735d3c656efacba83ef3006ed108370c499241ea3cdc00c2b93e63e5000767f7bc803a8c5c68068f02eccf16742e5f56b25025332a639e04d0a2048e18cbe146a7535ce9c9fdb48d8034e857be080737e1014a50309b5b85174736a2750c3ab5fe97e64d8009219c134d587df3d77181d6e0dac4d67c7d70dcb5262f9a0d702c002cdb8e698f91e4638d3424a81c625b6b39a5164d487d9758b2ca5075285942205ddf00b93e250d1cfc951b579eb591b3695c2ad7d74a0e80ece92d3db9e8954a393949b4356fb307d02af0f711622ab37b3a09329ad5fb9111fe84ba7cdae104d401a78134af9d5c0995c8182b0ee6692b1278d398259257eeba0758b487376f56fc3ed3b4b19491ccd45f3ca39e79414a0a69965a38b7e0f98ef5f656c69ce92bc800d7dab7b29971adba085c15f80f4eb801851365d601ab8faf2f2be33a2eb6b02d52a632797eceb01a863f335f217849c80964962e2f12cfd400222287a4ba98eb0e2ec919b19a3f4f668282131cadaa2a82f0bac1751a09fbbfb7e83dd940e932b0368e8421c7e4069a4759df359858d5fd5ce0107d331c06c1c3441cd0264073be21cd1f995dd8cf0c190d69f32746fe1a68398a88541ba1de2bc71ab3a2fad5fd3c28f4b4484068bb45f8c7be2f61d1671b9968b2fe03ef195fd219d891f89e51b1c785c3862d568bf19d5e46df0058326f01fe97fc736b639bb1b6a9053857ddab8d0608e7e20c2064452571846827e4a77d3586de17d89876b1976d5d328242967bd110a0b2342b453d64db85253ccca562a603e2ebab1cb781bbde441e1e3d3b23a19148486f94e9cfa786623d0a30c49baf8932d244287d31e125f69f500ae80439562062081bb16e02cffcc9d3c30f766146c22d9f4f106cf50b1297b3271b2a886b4e31e0da8f76d1baa3ce0bd4f1dcbcdc59a81039885398eb9d76e0e677a0021e7df3cd70adf57ca06cfd78b35fe2ccab1becf37c12b5d44ab2b751cc1d0560e7e0812960406529e340884da26d2f8d84ada410c34281c2186ac8a110b603ac42895edae01c3576910459a95b60d4c7b46113041eb3a3e68849eabf75c72ef384ca766a1610603f773368ad5cb19d2a0080c4297209268a24e77d9ae5022fa178036830b57474305f30a70ad854f7eed013743b2430bad7158640dcf8fe625f976b66bae118242ab70fe56cfdfc0513441a144f5fda125419881955bef5e96bf29e6a8e88883eb7c84bbe9c0d29691514afd93213d14aff18363a05c8e46fce73f47cedf174d276bcdf9e343bac213b4ca3738bc01b36054b1dbeed154c46f8580742e3a463d180fe79ac7c36bfbf9264ea7127bda6b319854c0bc6404decc40d7a8079b2fe4491b69dbe75c7a0048295272f18e8c035cbb5a780539f73f214dc07b8afccbb68e89c9648865aee048420bcd9256700a8c0ffa23afef661281caedf7f4244fad1e60618992801d200b222307c02b17116a41882aabc71959ab4178abb4900443dc0c133dfa43c43cee0664612df23d3a54929a780830e0af2c2efae20a097167ac12561c7a3c7a226bfb7d068bfd88c1109384ef83dbdf9fc4f4824f13a68f101f7fd9102a61702bd4ad99224e0c5c397bb5767e891044d76647769b77512e5e28c6c0770ce3eaef4e6ea9c2916d02caf82ff2a6398c327dbbd519ccc1403f75e721266c4ffa14a93d93b6bb064bf53c1f24bb51328f046f1ca3404229a12fbb0210dcb37b374608ede7ce272aa687e71a47991dce23f60e040e1a8e86bb596d40edebb9e7d3d930dcc37c6f5ecab19d82999a2b580ad072c282ee51e4258ec5aaa8b6911e4d1239bcce4ebdc65e56e70703c85749456ab61b02a276db749d907cb5cbf547b8b9df00d1c2f5fdbbd7d1883c1d79297bec550beffed378729c059d783242b118e1b00dbb2c31ca6d1a4e8286efb59b554829c1772b27b1e6335b42175486af92b97b3322460f8ff75d3979ab8ffdb8829bb5fe4a84c1d9f611c3faf4011ad6ed630750489a3cf17dee3643c422075bd8a304775f4486d88e62883f9f7fc740550a13f6fc4597d6de0d2faf040eade66649acb68bd1c24062a45c78821df8759f924fd428f22db95d0d475b6415953939848191ca3d928855a1d3444d9f0fcd4d3b0fe1265565108b7136c91debbc0b8c34fef8cad3bed899485380fc55991adb31f272be06f4556617a032f3a8eb4828b0e86989012ea3002b36c1562822ded8ced4a91eec6c8d1e80b21241e8f6de141b2c7419987e85d5cdeffe4171462ce827e10c84662283fd5e2872fb33d1d967f169d98ea7eb9a0b63199b692d412471e0f9dc0a30b3305ba6e94c5fc01357250ef2bb9427fcb719f6b4c5ab463996540b596504c8ede3899698b32c06f848ae17c7b82da88ba915527d29594767e08442fc25874f9c21296869498330619ffc1d948fc060513a162c46f4238f60ba343342edc608d92473b52569b6ba75e34038c926a92cc46cdef91db8b8bd9e35aaf9945664a9792dfef9bea69011392ebee119c8dede5f4736b83ddc24e8d0fac291bf9bc57a79812edb44f0ed70775be212de2aa2a966e2163296151a0ab5d2f052661ebe846239b8769cd7ed0727af63efb619debb0c5a86d4010dff2a61b11911768c132f7285686bc8dc961946774fe92c9e082cc04353b961592d891194d32ae29e08e6a1293665e85c0f2f719740f54df025d2ab46c346d5d98db846c9e1f262cecfcea2e5138831c42669d4e77a1eb09547045d2da81d4fe48c73b0a565a03e980c5c3477dd8f9f01120c25b611a5fb47f8e81303fc662d4a18c92c5054f64cade6038f82d5d5b4588428443d1264f3b3a9db1991653c2322e6199f241e5fbf1e9e3290c871d16535be3ad3f32ea5e0e4853a7b8abbb0d7718ebd2947503da0c7f3bb6193886cd4cda0c197070aa10bd2221ac68edbfd843c9182e47cb53a48181a4978037935bb7bd656988012de2f6a447f4f993c1c5dae449983dbb3775aa2eff174b5c3cf64fc4745329ed7a13725223ab85df23b136385b1dfb0c3dfb18a7c3e3c9bc73a2e64dd83c88d388fdbf674cfc315dc4a5517dd42d14230d624c759c20f72614eb403f754831c03bd13462698503de338cafff8fb7a0f6994935ef6f78cb16a3b159798cf6540970c9e14a1c110b5b2c4cd49a8b54a700d73a83f00d56f0a92cdd01ae4e6cacc520286a893c0d98e42c8c094eda002b4d5bae3d71200d4e2c1566857e4b031d52d9ab88a5a1abfc738460ac48b6a84a5ed6b8c6845ac47c04da1c03d7f3297c6603824fcaff6cd38d7ca2260438398800705232f211d0e63fdc8bdc08c04c442d7ca65e93044d7d19c4c495d96730cd263c82ad5810c49f7217cf707021b04450445fac44d73f5dabfa1936eba5963d32444e41b09591718834ea810d40460161939941782a004df83ab58537b8cc30a5d25263c6dd49288489874c3466bd3a63b3dacd8325a8feaf08380ff5b5fb91fc69d4e34c87b873479c32405c9e5add7384020ee33ca5d214db9d5d316b85f7f0de99d6dd59f16a83045c5d31ad7505fbc15784da7a946ec3203a46a90c214754d9478e70294756eb8be9d7f43aadaa00f494a0b7c09853796fbae6980e9904cc6b371ead79e09d22f54585150e2e4de9966ce0402a01869aae90a54f5409bac36b5f04e6aa8962d5680257883a5c3f2cb79d980c4c9f646a09c05f2df8160b2468e2ea2c7b1891c0fa11d612ec339615ddf5b1b0a5ff27f17c98051ee75ab19b5210d1deb02db70573f9c4fb21be813767e1538e22288e21dbe5355b92144b0669c260fca5e867ff31d14aaa2f15d9478068cba8a1fb934e82a0f0392ba702a0494977c681ffe0070ae317f9132f5a4d66818d9a60bbed3209fca10a882dc54a6c623c75e33bb7d2f5994a38e782f612c17482dd669c26cd2f3503a94095407e020e771e125796ec07be4c66927f1d4863d542cc9d7cff5f10c3b0e4e20144611a87e15bcaff67fac69ff6d173bf5a7e3da7fee73a0acc87d90927b61a5066f362ae1bc6f4b8ed1fd56111480d5dbb00a89b57edd6f0bf1f82e7996fa4d037e64494d9a170716fa199110050115d8b8ba4002680f6989aadef9c8e4b908b81f4b8f8d27a4647c208119e42873928e75e0828ef878a63accf42b966871281a4c2eacb01567aa8ba2b39e3130a2925514ee40a6dcf659b4e7dea79d4b3f1c73a3830e690424fcc2cbd1274262b569502a8f1db501361a959b8f687cd2587a3f79c072b7af7d70ff8a33e432143cb48e8b4c8cc4564c1822a4f77750f2cdacb0e16d6e32e4370b1a1638575373db44a98670a885cb9fc2279e40a86d89e505036bc950c8577f26bf831eb0854fab988de76d44c221d49101ed946e412a1ebbb166c0a02288bb9e8233d0b232acbfc3253198ee0a9096c4ddb8ec5217b060c7e4b559762815d4222c435e25e4e0d126080593af1229e3493db5112fb44d0352c4869c2524bfe5d2bb77d82b8c3a31e107027870f428c5ad09f88da16baaa6a46837a80313f9fd334d291710a30f5398340db6cf71b949400089b90ad892fa05dd601e6b6901553d341f37c8232982d3c5f1b0727e8c4a72a6d3b5960bc2e35a7c5576e05eae19345a68df29dcafe0747f36e4d6e7fc7ee73043df21da6bacf908fe72681f86e81b9a0bc7878bfcf3de804aac6b5e8959c87f327a46b513ef633d4a5070ca221151ef118019ce03e10767ee2fc385e75a830153adc0b29f685da8688b5244fd09ed6994ddc64be7cf9b9867b0aaa88b88797b2f064a510fb63e983008ff3913636fdeda18adf9be0c8aeb7182cb749b0ed59ae4bac29779f4350fa7c6065ce35fb950afdf334584c1c409bb8abd708f0ab2ee65e6792f182c43cf22fb0044cbe86dece4cc28348bda35cb96098cd135a9217772c11e04f538fffb253f77520d812e753b4d862f2001679e9bac034215dad532be0dab578ae1c29369fb246705b2765133f7d14d9ae82f5e62e45cbacacc22c00447f98b81a73e0802efb96ec31c10d988290a7651c7a912aaa4464ddf75c7e149622e2f61e11b216ffaeb2534ab674f9685880ea3f0b30acb420f31c9378302fc6e13b0912b5d92d6e1a5d46bf7eba01661c3406ff4fa9d631e73df184453c60a5f5d3f42e7b7bbf05ebdf84bf3fb9bba87d2eca34b0a8ed91524c9a44a7a59fd3da59529c23b405bb6bb91c41354740203c3ae0fbb7091090e913686ecb3e12214d9eaaac0a2e2e2a692dd8d1e9a2890d26534f5bfe4ab190c6a818bd7a514323249657b4a5f675c4bbf29cb437c1f34a4d4d008684bbb9f45830305362d05ecb2b3fa56a6b61a8649ae7df05ffab0ef9908cd53d54f33f8ef141880751af10888bb782550e162f9c892c7826b1709b5c8f82b59cddc6a0df89346345aadba4ebf291f61e20a62d326ff22f76de17b08f3a20c9cbe38f7d0d080efee4fc05074601e278db09c3a42273e44e6c458519f386fca2e24279823a40a183ffc12ab61cc91259f5bd7d9111e69d77282b0293e1aedca9e24f2a9dac227e52c49823f2a6874164ab489ef24b3a762e88f9ccf47a59b09737b71e4031092634b2a083f49feeb85d73f9251b6293988a12bec48cc7b912472f9b00628fd40b2f4e2a35ba4406e3958ec6999dbad17740aa918f03ffc922e2d780e4e22631e656672d8008d0d34d14ab5a7db2ca367844c8035f2b856a07e0ffd67ac0ca32e10afe74c6ee1903f511a581f0f9f94f13eb0a9b778ed47ab97362180bcbdcd882a87d30e164308cae82fcfb953e73e3748d9d4622a229e5d8f627790e021cd9d413760a77bf9372a5190410bfe7aebcf43f2c0aa1583359222e8d470e784290e25b75268deb5ceac9d098d46b399f5cfb1c0fdb421bac2d121ddea38a7988500d3dbdbec6f0805ac85b429f51125664d4333ae1f252cae9164438231016e6128e20beaee1e0b780819da8a410ee456526aa3422a3d8ec3c318adaad50882951ea48c5c9afced15a99a50024b8939a34cbe09a674a159dcc3f00157033e09a0a15f786a32fc63a0d3aed53677c2ed2532251a1778df5717a4b2a4a93e74c27379c798fec7d96e3a0194686def323dcdb695199af71bc8d26dfa00d8e16fd6e35d00fc4dde4f255a09a6f6eebd781756b34982d7a2454b1a81972550ab67a89fb7ba804540da22180ef4c13aa650ddea1ccf979df9277aadbbe8903840401e1bb86815a54837888bb847853450d80efa68373e2eaaccbd206c3c83d18c8489ae0748aa406671f4c8633670cf837332fa0fc7b1cb32bfa0298f2472708c2b1da1c83e419042c694e388435a5b6b4719c38da1d084fb2cf66198668fd28ded77b9162c6cef92788ad13f6e7233ca75b0b4ba41fe32750f7f05cd282b8e65cbbc51d5f196cb98cbe88db2ce75c11fe677e198f2132339ab844d1170634bb8fccc4e832c40e36804a78c4ac58cf05e5fd8fa14c85472e744bdfc6529a6c4c495c1e4762b06e72404ff38d0b960e6e1e211febf24994fca75fd5bd448d6a33fa318f1855345eb90f27f3e605ab166d7befbc63e6ceea157ae2e70afd078b5e903e7dcfb52182631d1b069ea255c8403b05f6ebfc0bd2315b5e2551fcab687e8c2c093214f12ee71e7c21ca040445b5e8e3e9556ba1b5ed5d49fff41aa844ce782cfe3ded80bae4abfc70cf2dcf012e9281d785d81802b7f7ce8a1f4f84e866839e96a1b002384c888029fb79fe463d1a4b3bf414b09f76f3fb4c573cf6d7e97d881bd40d791ce3b653ea807da0cae78947e854b2292db984c42bbd00216ce2270a935a6be8bd63d377e71e3c6eb1bd90f996108606c1bf8e07b5d051e0aecddbcfd2c419a5e6e06c2e8aff994aa8cf35d38f28d309c8ff59c2a375ef43570d10c899024ef55c0094bc4e0e7ecaef2b1f8ddb1d256b59806716ec66e95a5c45e3285a25536a0401f159337e12c75e7e542c90e08f6352b53564537ce80139d8f975dcdb3557acf60304e0978b1c49f61596b23f30609dbafe764928559cf914fe1df68bb1e27789bcbca64f2c19128f0897764929e1824aa5ec1dcd6baaab500f3e61bcc723a20f47b53990e9de7dda2d32654fa10cdee710cfcddb96df08e826cebb4f1b6d210ec05089dbcc033579b819b90e777d6efd57d7789860c459b5a95e7971815852fba5222b19c4dbdb326f17023d076c212b2285b0f6889534776c0c9b22bb01370d9378321c08ac082219b7258b3b59a907bce81d54d8c56c6cf67aa32142a3853ca51f4fb95de59031c5db7998e06e68f4bb08d4603009fa3f67209a80cb8ff17a9109fd1bb3cac7f8a10f5506332af402ccab34deda91d773e8a7c1bc0815eb25ce3a786b611787db51829b5eb8b243b037660cb6267fa72a7e0e2cffcb1ed61e4f37ee3129546651f0da97018322b694ccc7f3c48caac14d608badc58bcd5d50e30537c798d864411c69945770d4ca623a403fc455342ea2fd7913b406ce6151572a442dea91505917b6d8aa1477139ba26836876c189f30e7f7a8542e95f9692b723c8c5008f82fb672840cf6f15660d5eac6b652d511b988b75d22bc072c6b662e4e8def5059241d54f90ef114f63c28a4c34620fe1205ea90aff98921899aba0cfc397aa8ab59903720f33f903082cfde8529d5152428f7b0d158ecb5a88a14fb0f9348dc08fb3d5fb8cb68e77906828f59c114c35f32ea132af602f59b807a98a569b4489648ad9ab8d39432ed2c8dd23d179ed18a4ccd7606dfc49b66815bbb44d004cbb108083e9bfc257fa614b4b9bf174b0d66719e466d7db1fcd518ed24a07817175da13b95d61dba7bfe2ae8bc7eb9c676be04cc4323ee582fbaf959b2d3976d33321a8a0de119942c23f5ca882136564a12004596a453af46ff8db315e10d0c0d31f3c438cd61e792287f9a5d872b8d42c81a74c32512f21458bfb2fcc6431e0ab29ce6b96c8dd03d7a767c70484e063744231642803d0479adccc6cb1a8d247d338db605128a9650c0354f6dbe4294c08d61867d6f6d541b5e93e5cf3440df4232d434c94dfc4924dd05b013b06e932a0a5738e3c81c31835b3c7cefc84574efd7f44ccebbef905e946e69d02319b91f912fada3f46df24cce9eb63bda1761fb2ede049731c0f26f256929e9193dc82f3c409c544c5015374193af523694336c1952383d91416579e143786469aaccd060e0390130f9416d5d5e9fefcf35196936d28f82f189e347de54b596ab05e112000c85c4b28a1f005be0ca21a0fff7fcdb00a5aebf7af9d17fdae0d87dda8fbad2092da619a9fc4c1c13c9d5172e82b86608f8e8c8a0c264bc5b6ebac7372cb2082f7bea2c2d9f577bf96978997c25669ba84e578696c93e2e08ed62d3b14883f4e77dca15680dfa5447577a0aae987e5d95334c37fc432a1c196e0cd3e2ca135966c6cd150e2cbf014f6d5980a36a0163e0dd3d8157b155a5722e61066f211eb66d2b6d8ea3fb82c64f0e164c42ec40d945f517a114a8d8acc75d909154aca6b797ec1f7f9c7e8264a0f2cb194fdad5a1fd84a5bf7901a20b656337899af402d33978706593e09832c987892e09472138d46853c910a4e69f08bf0e11fd81c5a3c3271b099c85160168736e27c2612adaa368f8aff23c4487aa65627733042a7fd1c89afd2fb4967618908d7b3e07419ccacaae1765894917a59830a8b6c21a1a7551e0f2b5e29c0d2698ec3aaf3ceabd069573330e7e35d9992ec5578b2d8d0d7430f88dc25923fb0e4b20dbd0adfac0deb62305850fc32b991d107c4cd132c75459798e7803e0231b35193d3b9435b4307025b800b153473c09ba706b9dbc660f1abc42227b24374cd8ee497bb3cb667e68a35e1e130e636a8bd04f74ffc4899c4019af8738681269a4ef7e70f26b7e6c1c0d1b4a92c5b326575bc30bff580943c5ed8a9b249336344a6075995f8584da2a5e0056110ffa596bf1d48431b510160eef825eece201875b9b3e4bcd0fbd3faeda7fbb19dd06293bc8ead05d432c25a8bc1644beb7e8c1fa185f07f8f172b642bc7f3b35773c6422bc721c406d8aebb30b6cdab86f3fe46994b5b258c09eb2d6f441ad7946ee2fa43b20adce6b807031a97941b1f1b76977ea748dbbc0a6cfca7b3c2cd57a29ee8137a0f797120906d68af395b7dd4df0d6d4689f66ae9296b966d9ea1cee4d62227e600bc73629811619889367da81dddd2118effa81b2061a57b8f1539f3fa5134f9ecaf1653444c67200c332f64a124baa85727094de60831289783d998cb60d8aeeea253d705d1ff7cd7bf9f3d9b37db35887359e4079523eef70ad618220b1fb2be97002600d19a899b5921b488d1720717d9a4c2f1ff5b982296a6bff9cfb1248b846e5a38741afea0d9a1334b94c270b1265e8b3392a7c5cf5387014eb3d9a9439ef818180d3cb5cfa32a063851222879b54dad096144d10976f8f53749704f8fc615ad952049b950be11f06466217a2f3035e612dc4fd0333300bee1db01b2bbfb7fb08de55cc37a3c067413264ed61997784ac3844d67c5daec6d8ccbd98c62e5b29164e4ba751c02d62d2ee2b89095d73293e8843d58d2ff6423c909a00a56b9306ac6c58f5226c0607ecca7e736058f4800fa8fb1bcc58661867ca1ff5d897ff00239525eae547704520f0c112fc1c90deca5fd070d74ec22d6c5ef859082f82581a303cea8d3694486d8322193c3921ec4a57d601f260267fb9067e557adbc77526f4202dc5c2e2aad0f0926ecf7ca47ad36122a3713b3e0cb418a8d7f5c57cd62dc9463537ebf32bf9fb4377078a2c7e9b54f4000f42b67ecabcda6ba1b66579126a8e2387ca3878840edd0260363931ce5bcf63a105e4e7ca98969f4672a76a1cc9325c090142b429f8e9b170a1cf0ac1450c99551ed63b29a48953905a9ded680f8c6265c6034de7049bbdffd26137a50eb4e85fc16c5d1e6e07c0f97be7da6e18d2a6ff5475e66feb53e74dcea1fc575ddb8e49f614212ba425fd73a734fc36a669aa1fad223052f232a9f16e81aeb1d4753b658cd85e2e93cd008870cdee912cab174844a44ab98a9321e767b844ca20a2cfac6662660e267e4b1088262bacce3b37db66aaf7f94a0e12971d8eb3635b9f3c03a89a64ce49c903a03c3a1567dd71cb6be4c9b41c11fd9db93e422e303592027f56f6b2e86cb5b7fdd01d3b33cd36c3fccfc79fce947fb05afd25f867c367a04222b7f708023fcdfa6f01cc9a86c0f04e57ce4e23a7821589ba0fbf9f97ec2384a9e4f7f87a454459d4ad1b29dacff28fd7d29c3ed202fbc6799fb99077943220fee02f65f4ea62fc5612fdf51ffd0af367d6a881b14249f8c52df3a343383ffe74d885a6184e1e9f4d772b53a31d884c7d0e9df2f179ad28f5e766b1f010b201dad16399849db7ee080085a492691f8b34fc314a77aa394046f62aabb26e0dbb1147c641b7ff38f0bff47c47ac5ef2847b314ea1cd28107ab046c14a6a6f8172e1ddd3e4e30dd30506d52a4af0a1cf059eab9606739a17794975a3c97d83cdd77508693c485adb8aef239c1a56b26cb6db8caac6f7f37b2d2e3388c8651f6c6c73e8feb1963ec5f116752c90590276c1d0d4479524075796900fa176a633a2b8dbefa1ce2ddd72f6e78b0183fa0832ef631f48e8b8f5e435900fb7fb8f514739998006429df444ed609c2efc576770217be0c3ee1d5a4ef5fa9260f18b5437a58d772fc1f0e673cc5441c4289f26bd4debee1147b4901946bc9e8717e62f2b2333b3c2a5a7270c3688994ec09579a7013b8b1804a442e9ae7b0ed45516fadee5187f8da19636ea731f9c7478b640df28e5b70ffe1aba3d9da4496671c9a3725a5e4c05cb65f36e0869dcf54186555517ed0b8114d8e7c07d092d0038b0af3a3934b5038a685fb05510402939e955bd76b5ae70b2b3f509f747989f603fd14e0e67174a7eba8f6e36bac9e866e3bff7c7eaa71cad5b061e728b14dbdbfd44e2f60e2e318ae082ce19ba73023d72aa73044432a4d608516b8410b2f79632e20ae30a9a0a4b62a408d1209d628ea385e5532c38c6aa4d272ba6e5b36a33c64242424242eac64ba19026174996a5c45a624d41e3d032281d49d3f0bc7ed7631269a5abfbad989a9309ead8f9ee1f072e0162554af2d5c900c936aa947ac28857a5e45229d12b6420aaeea6c4cc502c9fe2e158187587d7b85c2e97cb1546cd18abc6aa856114ab1646cdd0037b59350f2c85fae118cbe34004c135e425b0aca8cdd80e0e92af4e414f224091105563815195dc76a23752f1c776631229ad4a898564e5bd6621495816263ad3c3245e9717d765b9d14e31c4ab5232e286cd1526b8a28857eca61079091d88cb8788c37268198a5bc0319552d4a15c4cb4fdf51ab866208aa1f4022bed8e6df4a94a6e65ccfb35a18e57f188ed237eb76d18e2cf136abb3b69d94ea5f4c27c373e69bbfdc8e49a6c53a52461ec8589d84818334f3ae5326353b22c266aaa64b7589ab5d21d5139d6d138484e1a22e9aa708cbbec8ab0f2dcc832a8479fda59912f493b122fc8443b4304996e4b31c9e93420ce71c78cf2fc05b23ce7afcfed2c73d0e4d7dcb8046621f37c4ac476d844ecfc5421c92d6d24c98df91888137d2ce57f2d276de176851e5be772bd24d327392e8defab55e8aad93b64a7685bfe7b49185572db1d6cd9fe66c1cb7a87ec1c3241851868c0e18723a42d4b636a6ca0da0b0963d523319fecba05baf25a00922f9f3104b310efbbefa084ad93b98691ddaea42d272db8ea279ebecb70850cd8d55f12f6ad40ff8d57da151d81ee93279888df9e93f6c6d972cad91b8b7b576f06c62122f235c442f379c4fb03bd7a4af506a859d4052d67d42b2412c4de97fd40f07bbd8686ac386652f0892e4137369f9393f7c536d442547538d5ec4f1f6c7bb4f57abd5e9ee50701b2f7653dd0e5fab7253c5537cdb4b8a9574fadb2c820f9ea46026af3e29747bb7fb23deb75e3eadbb8117c200df2aa22f690af97cb054ecb483c58c87b136e74b25a200b3dd55e2f19241f44c67a0a7c35524fc9d718622b6481df8aa562791d8bdb286bb264339116d5b1e6db802886f0b10d35444e63e6c8ceefa04a6e79e011e7132b5881135e8fbec2cb3195c646bbb1097df7cd8dc8d6b39b9b1e29c41e5cd7b5ed7aec9eb088b7a5d43d754f4a3d2cb310bd5777687bbba71c33ca773f2bcfb4c8f69824e908d955911f6f4996cf762c9fbaa14f948986b14293f2e28a9ad29634ee40b919c38424add49172bac28b521b0121470623449ad22b2cdf8b12354a430e54d3982c485375d8382d793992465172ce342565b1a3c3130b415ede642866a16f09104bfb345432026d1bab078b8fa912dd92c61d2837639826d2b45247cae90a2f52491aa52107aa694c6769a4291c988d0a2fa0af9b016de6eeee89ee1d944cab6465657799efff580e5fd86c8f4eda3e71c25cd80e5fe86c8f1703962a99a11295a51b774fd67d62e9e994dc746339e9ac0c39b043245d88a49b33f442256d6792ed4e3acf74d279e61684fd49025a7ab6520948596846b5659a659ee3b61791648303529452ba75146906c53aafa3b419c49d688326c2e14497dce8a494524a299d1c06a43a29fe4629a594cadba07d9f9b9e944e96309e21199339ae0383638eb38145ea9bb3674a0a725ba7f2561fc802bf70ced90a9170a72c0639ee36a8702a109be3388ee34419ce194302ee39e59c66a6f783679fe61cc19427231f28f66c44868642568f0d2ace4967d786cea62914a90deda6ef39e99ce2d1846843e57c5f8b0b830b83bb25ed5e205eea799e07522446810a01e84ec11db1cc6a2527a51ca4839dbdd18dc324a0f5c41450a419e3b25061058e81463348b20a40a319f368a09195520a1854b3f08b11231f28f66c44868642568f0d1ae4f512c549f37a74402810412e0cf1321b76b2d7a3b990a8a048ec44916816a6483ea1682344b2dd0041271b5244cfa3ed20821e920d293e06ba4356b2ddcee38f4ee95009e8b6512a670f94522244ba31d19f7d296976ea36594e96f3b652b5ad040307cdc731e2c2cecf3b4c5888caa53c579046761b9b1027978438df89409cb349bb37b1189f8b2cad346f46cfd51864bd41d8fb845aee3f4b5ac972db1c6f107672dce8a465b7f10b65a336b23368caf9ac197376677d721ba536fc206134090b4fbf5556c541c2b6d3d148d8894345b36d8e3f3078978fc1bb1c8110330f84bc378a9e4a9c45b3f631225f2b900ec91711f9a2f7b18578598a9f6c90b01aa5f44ca89c544e7aafcaaa3242bc2c65c38cc9d31944dffd749d0d3824b51719ab4c3d3c597ac45354d2cd035aec35c152914ecd223a3b321c17664e4eb59281bfd38d0de5efbc422a895e920784ea57e438aee366084315dfc671dc6ac5711c37aec083231020f85300f0e143f04c7fdcaf0996db42249c52c771dd83a636679d773a998684cd918e912f7a0547572042414141c917126592b3e6846a63da98a2ea6c671aaabdb0dd92a93b69c628a5928985da1bc522448f858678555bc648d8a552504cb4bd3df178545b24ecdb104554b942bd402229a97b4a26262ad5df682cd467da681c120b3979e1c5c6b43149a5cf0c2a61f75be228c76daf292b4869be6449f3254b4dc304176ea31e1addb2e91a2bbb9b6a6b3abc22de2d694b9a4a9a76e0b0a2baa56e09ca8b6e4c988ea973eae4744ddd155050505050505050524343af175454b7c4715242cd98e789a2cbf5bfeed09c126ac6c44bcf0c134a332082e83c2e609a89b92d45b0b2f51b64e5d82d55db49a8b9a4c35ed9dd755d87c484b41476d8db4169c6136f3fe630f45ef65d3f56189ef52482dd12cfa452ab5bfa74e8584262eaa492845ae26a12d6b158acb358ac8ef52e44d2b1584bbab3ce12c61ab926f992507cc55218daaf5e1922e9e6b0eb464e42754b50dd52b7c48af2f98007ac2c1dd194c6206de13632eae6c237e2a546974d29fbd4a88d8c7afb82529ae4c54e9ddeb2499692627672720ad3484e9fa474a8945419dc78585cc2a9a5ec846218cf7e1cc731333377283e215eeab4596a027a02ce82a90a9892a12dd8b68d632929f9797143c9ca56cbffb45a524a59474a29e55bdcdd341a8d46a379b4a1a1d70b4a8ed18c716ba446f4b3237e69d068348fe6d13c1a929ef116d91e513c73ebd765c5f1f6b7b35aa7ad564f55bd916cf583922fa94475956afca2e40b8a3869494a9f54eb4cad35d2a68fc6443d975e78e618ebe0f7d50fdb57bda78a9559486b4758c17a45578fbb019484c991b1233193a325cd70db26474754d1260f86d58c1b3d9a944793776e28752d3c524a29b9ddcca98bb4eab01f07c54c12f6b364066d1165e7f8338b2c947c45214d0a45c7801e85a24c509e274e28cab4854aa06e06ac93cef6d8b2c11a3383dddd7d069190be304b1b1586d15a5bc1afbe4a9c502faed3102f558d630b6cff02591006ba2cf8ca300ac5af3e08de9bb179f067a2efe0489daa9c2386bfd4692e8961124a5577907c4520b881971594524af02a9554813f22655589508838e83f0f54854ac2835f5531f25f58291b70a44f3ed050bd0b91a8a47ca24e33e6cd566087f25fa77a6c35d22c14e9055050534af6b7a65634f3ab5b22752c2c0c3e6ddbb66ddbb66ddbc6b227c8ec46aeba70cc3b3fdd8d690363e5bb53a619f3c62da91b936c4db254cbd2972ed4686539645285c8e4711cc771dbb6c99944b7cd7b5a196ddbb6b1e8862ed196684b51d3139758e8486d426d524b53cda98dc8d5bed1f56d6c5de9a634fa3344a4eeb03d6cac6c266c481b4dbe64eb48a45c70903c1d2b6b2e3b431a45ab7d627c5f57258c303a36619ca0abd28adaa4b68ded3458e79b0269e096ef0e7824b963b3b111af2737e68db7d619dbad26f9ea4f6ab69a66ec739235db9fd30c97b968522fd3b9f5721937d4cb786ca8b7a148a0dea612817a1b0b04ea6d2d0fa8b7bb38a0de06d3807a3b8a1aea6d3334d4db6918506f63b1807a5b0b05d4db7112506f7381807a9bce01eaed3266a8b7f1c850af8462807a259502d42bb110a05ea925867a659701d42bc108a05e19050cf54a334cea95695ea85762e142bd528b16ea957158a85772b142bd924e00ea95652ca957e251a1de094549bd934a927a271624f54e2d29d43bbba050ef0433ab774661eb9d668ed43bd3847c02edad1364275cde63a21f2e2f32910f26fc8626fcb67a58664209bf384af8d5b183652510fdfa20fafd51594644c22f10127e3d08621909467e858cfc0a1181654662bf4562bf3112581683fd9e00fb058065194c4d915f5eb3846545da10f9e52c6060199137437e19ce0c2c1b3267845fdea206968df08508bf0cc60d2c13618ca15f26c309cb86cc10f2cb6858806542d408e197f34061590852847e7b0a1596091111e4b7af606159102340f8ed23b4b00c84243ef86d2e5d58f6c11241bffd050ccb82c4bc7e1b8a2858f622e3c16f4f6186651e50d1c16fa349c3b20ed400f9ed3558b00c481ba0dfce420b9601bde1e0b7e1c461190773c6dfde820b968d5fd4df06830ecbea18ff6d32ba0c96dd8c1fbf8d46e361d90f3536f8ed3c5058b681141fbf720a1596f920a2c7afbc8285653d8cf8f995476861d94f123c7e25972e2ce3b1c48e5ff9050ccb768871fd4a28a260998b8c8e5f39851996e9a022c7af4493866539d4e0f8956bb060198e363ebf320b2d58e6f3e6c6af8413876537e6d8f8955b70c1321b5ff4fc4a30e8b0ac670cf1579221cb60996846eb57a221f1b0aca506eb57e681c2329694f0774ea1c2b29008f0775ec1c232d088ef771ea185655f12abdfc9a50bcb564ba87ee717302c5389f17e271451b0cc23d3fdce29ccb0aca382fb9d68d2b08cbb9c6ae61a2c58b6b5a1bf330b2d58462fdfccdf09c7ce382c9b7ff29662bc6205de518cd7d5c39b69bce7e10dc5785f3bbc9f18ef9093b798f11ad1e11d66bc5ca3c0db89f1b2530eef26c6cb4f137883192f43e1f05e1a2f4735797f192f4bdd3713e3e5a91bde4b8c97efd8f0f632de3692c05b89f1362d026f108cb79120f0ee32de4e7ac05b69bcade4803797f1f65203de1f186f33d5f04e62bcdd44c37bcb78bbc6803712e36da705bc3d30de7e52c05bcb781b2a01efa4f1761402de478cb7a50ef0eec0787b6a86b711e3ed3b32bcb38c571a19e05dc47825ad006f0e8c572211e08d65bc32298637d278a5d200de57c62b9704f0dec07825130c6f22c62b9b98bcad8c57d65e785719af7472e13dc478e5530b6f2ae395502cbc69e395512bbca78c574a05e02dc478e5d492b794f1ca3b2abc8fc63b8d94bca38c77d292bc3530de8984e40d65bc332985b7d178a7120a2f1aef5c9a3d88f14e26fb0c8c77361d3910e39d35001c03b25fc00223b3d00f9559c887ca2cf4a4029559a8071e2ab3d00e9559c8890e14c801caf6278043931b6c900092ed4720c9f621f08025db7740039a6cbf869aedd3e064fb0c580094ed2b200152b68f8003f41ddb9fc1c8f665a0d9be01906cbf00048861c9f607208026db87a166fb4c9c6cff05175a88b27d165698b2fd00c83bb6bfc4c8f655a0d9be1224db4f9264fb485258b27d14986c7fd664fbb666fb472ab3100064f5845668820e1c25fcf041e401101284081989158901e004126c1fb6464d1adb2f92451b2c6c9f089c375ad8fe902de6c4b1fd11c0f8820bdb17818c31e8d8fe101a669461fb42380fabc1786c3f84295284ae1041c5f6831c610416db07814b125a6cff832f4b74b1fd2028c480b1fdd71464a2b07d0fd05061c6f63b58a3268ded03c9a20d16b60f04e78d16b6cfc11673e2d8fe08c6175cd87e25630c3ab67f34cc28c3f67f749e56a3f1d8fe0653a440b17d1f5788a062fb3d8e30028bedff7049428bedf3f8b24417dbdf01851830b6ef9a824c14b6af030d15666c3fc71a35696c1f47166db0b07d1f386fb4b0fd1b5bcc8963fb36c0f8820bdbef21630c3ab62fa2614619b6df9279a41a128fedb3a6488162fbe11522a8d83e788411586cffe3928416db5f7d59a28bedaba01003c6f6bd29c84461fb1d1a2accd83eb7464d1adbdfb26843e1bcd1c2f6e71643ee9c53e4ce38b6e70a453f04514251532098f8e43ff964bea5644ec96f4b43be0c956c2d93f0e9c842f2df94538e3f49ec9cb365994f12f13c4b29a594a2b764e72513f529a54be6ec46e32c8a3eae1e5ee7796bd0e819b42986145ddc455589d199d7d6f33cef2d7aa3e779694230c77a9ef5c68b03901802371df86eb035817845d1c7d5c3f3bc8e7a51789e774fc23cb0de453cd653c37ae3edb88dba449f28bcb0577c156e2ca709e36483584e13c592f5e6276b4905b641248cbb096017b1df4306cd4fcfe50346bc2f3b5f4333c6cd6614494c4af615c444f2b6ad0c0fd0464646461b730c9f04a51c83bce46bfe96d75ce9396b92098f773c3a1e1d8f8ec7ef6dc7e3f76599d8afca21fef9f17eea156d6bbc380c0d316939f4ca7129608e712864c21b3787a807ba7a6c36bcf8b61f8c8c8ca058fa02e288f3a0d9820c346aa0c61a7966e0a3f44c4ad18cd6cdc0b1fb28e8495813eeabb7eb2c964bbae48e7f0df278e7ca6377fc538d975ad5b472da4eda4e86a763375e15ab88c97e5d1e1b52f14e3c3a3ed911566621d578e5c5775574e29d8726aabbde4475297aa2f7eea2eaaa8baad109f5fed363031fbfe1a3d5dac047ed512fb3b1adffd4cb6d6ccb75b63acea3ba2e9e43256d649985768cd735ca8b52bc0eb1e88ea8ba28feaa2e5e152e5175e7704967a5ca765edffb38442293f05064e5e99d84bf3f3cd96159bf1cb250244727e16f77f09449f8ee54beb3e0188539e876a313d6f8850a7829cff1f03407b30897db5879107c0e6f066d3d4343dcfeedde8ce500738c545c3329360e8e54bc99141c97227290fc8d4bf1b9949e4b192f0efc64c5fbdce73ddfce1ce4ce7f3f2271f854d70c9abf51a5d818815871e942468b11684ea0340b82a196d490e2c68b376b8899f58ce20c2a62b2df98a4c87a6fd526dcc35b64bfd3ea230d91f5ce636ff8ee1dc33ccf76d849b9b1c670fc02826310fc3413f3d59f25945a5a6fdb2712b8453687cef630ad5422efa4f3e459e25939feacd05dbe1b5b78d27635fee0d0d927d34a2624bb411146dc5ee0b8f1963928f282e0bacda7ced79f35cafc36cf560251748b2afd9c639479ae54ca299b76179e846ddb397ca1c9f67dbd711dd771455bb7755c6d22e5462de5b84dde2ba594f45bf76d3bb735d7719be43aaee36a130ee4ba8d485aca711b156aac3ebdfee657dff7afbdd70e5e0f6dfb9fbc6ab552ad56aa2d88e51e843b1dbdc93acff03c41d5bb1d53a5ea542a4ea51a2fbd5e585df65f7fb55a558e7b87dd65a55bb7f23eeffb5ab6c7a9549e4ae5755e5579aa95ca6ba2eaba52ad54aaafeed5262a956ac5712a95d78ddcd86408091aa45183ee3d65fb2b288cec376e755ed2efc6eefaf5b70377fa597be88fd6798f7aa7d41b0a5fa856fec89c54b65a72bc9e77f63e9b27cbc9b4de832499d61b3d16daeed540ecdef60e71ed7ab689ba6f4f8189e437eff78755a9542ad58724acc7c6b71b91b0ed5f4f05e52bbc8d2aca576863a4f215b2eed5db95ed138f93728a95db61b3ad7a55361cc16fa4f2f5bd3b8847c242ee9dfc42ec73f317e26ad5b28f30d1b42da1705d552c54e45527add0f63b597f56904dbccbb3fd3e0a72d88d5dbb55747a57bdab4d3c097a3d4622dbed294858f7cd93e3a5f649db6efc5932f3e4c93325154529a594524ae9134a2fd7eb89243b1fc4c844c2ce3462d2b0735e9f5a10013448c11370ce30c1a6ccacb758f921cecad339a21802519442bc9b9148b98897be40bc34e96e462d2868189b977e42819da71b6dbb9802bbdd47c26ed86dfb6bbb6b4b43c6d207769ef3de344143249b0d28e29d51e29c42ec5943bc52caf6c52b629845e49a702889961ee8256343f4ae1ef47cc50e49a20a1292a8819df791302076ba2c336c8211b99ac8a1113d15885e0ac4cd880323decd88ce8c66cc0bc188e1921866215e0e43644919d923725b7507715ad0c1a11b08c974a19ab27c7a837aad061faad1f8da32edba9847e3c20be1cdbcdfd606ddaf2a94758f79a685c8ef7d1d4c04da78ebaa1b513acfacbbd7a24d353c240d1791b751e71b1e22dfaa5f8d8582cef43c636537f976601987ed2e90d5c1b1d6f93f9888757e084c049e2f844bf8ceeff9e497f05ffdd27a4f9d7038485eac738d370b3f6bb3ab346fd66a1d45e93c33ef42783315eb127c09dfe5aabb3cb7ea64d5095567ad4ea73ab16021f25d3d12e233e621ab515569e2ac3b871dcd9b75236fb5b96603dbd701a77b166d9c87f431d0ccdb6c77b643db6d429bd02574094dd4444d4293d046da48c73ad6b08675912ed2449a480fe9213d428fd022b4083dd4432da48574081d420bb55007e9200d4283d01ff4071dd441fdea577bd01e7407dd410369200dd440cd4173d0638f5dbbf6fbfda37ff406bd41fb681fdda37bf44fff348fe6d13b7a47bbdad53a5a47e7e81c8da371b44ffbf48dbed136da46f7744f8b2d76ab5bcd6a56871d36d8607ffdf5aa57ad6a557bed75d75d73cdf5d65bd3a63dc7369105dedd77fd7f7de8467ee42a30910e14785f86d3c0441378df86ebf01fde466fda1be99dc4441150622208bc99de4d4cd40026aae1fd767a3fbda1de514ca480f7d4fbcea5d125ed12e932e952e972e992e9b2e9b276e974f9c4442f5c465d4a5d4e5ddef934faa47d227d267d2a7d2e7d3231110aefcf26269abd3f6b4c64df47de00787f423191ecfdeeeeeeee86bd8bbc89bc87bc47788bf01e7a0b7987f0167a077983f0fee01df47ebd3d7877f006f2067a73f01edff5fdf78ff7066f1fef1eef9f378ff78eb7ebade39de38de3edf3bef1b6f1ee798befd69bf50edfe0fb7b77777777997ad4d9de8a58a0b6fde691233f32c32397b0233ff8f0273c3033df4eb2ccccb7a12cdf8eb2ccb7ef5866e62b932c335fc96499af74b2cc574e59bef28e65be9366f94e24cbcc77d62cdfe964f9cea7b0cbfcb64eb83a2cfbb0fcc33210cb1e5816b22cc47211cb31cb27580680e518c798db588671112ec244780bcb43180ccb23f0082c028bc0433cc442580887c021b0100b71100ec2203008fc014361998ce5292c5361f9c56a2c7bc01d70070c848130106f61990306c3f2c82357ae7c3effe01fbc016fc03ed807f7e01efcc33fcc8379f00edec12e76b10ed6c1393807e3601cecc33e7c836fb00db6c13ddcc3228bdce216b398c546580e1964903ffe78c5505856b18a3df6588de58e39cec2f2c69b05ce57b1accb9cdfc3b213cedfc13213ceaf2c2be1fc2096119d2f02cb48389f04961939dfb22c76fe1296c1ce87816545ce9f816544ceaf816543cebf8165239cef8465229c6f01960d9d859c43380b9d839c41387f700e3abfce1e9c3b38bfb560199033d09983f378aee79f7f9c3738fb38f738ff9c799c779c5d671de71c671c679ff38db38d73cf593cb7ceac7378fed4c232f0fc9d5767d5d93b7767eebcbdc77cab479de7d2e85c3d6a35de6bbcab475d83771af7ea51e379d3e0aa7ad468bcef7c558fda8cf719ffea51cfe06de7603dea32de3278588f9a8cf7d459f5a8c778c7e0ad7ad462bceb5cac474de71dc67bea5183f196ba8d7ad45fbc61f01bf5a85ff0f6e23ef5a8b97877711cf5a8b778473d473dea396f175c473dea16bce5dc558f3ace9b05df518f1ace1bea3cea51bf79afe03ff5a855f076f31ef5a8b578a7e03eea5167f17efa06f5a8dbbc51f01ff5a84ff066f3d7a3c6e26d82d77ad46bde4e1feb51ab7997e01cd4a3b6e27dc581ea51a779577120f5a8d1bc6befa01e35156f12dc837ad423789ff9ab1eb599b7081e548f7a8a77d33fa84741ffe020d4230ffe7a907a04e41d5ca81e7170a087508feac70ba9473ffe0fd5231fdfe022d4a39ff7f808f568c7797c483dd271d789d4231ccff122f5e8c67d0eab473db7f1583d6a5dbc917a149e7512ead177f044f548f5d54ba847ddbd9b508f363a6287e01c32f17c20f32752bc0251bc07a6f300c57778e24ec45c8730a78013cfa1894f00cc71587a932fbf4cfc86256e83974b40894700048740973f40e90ee0f2067ce03524711ab69c01487c011eb802b43c014947c0113f40073e83119721cb0d50c40bc0811300cb6340fa00ae5c001b380c449c8995bf50e52e0cf116a89c05da5798f20008f12552aec2d1954479120d1c0994a7d04647a1320b157d56998582c80010974647de798e1c79af61df6a58fb4e63f6aec16cf6a6010a6f3c28a0f0be93c21b8d1452789f81e46d0612246f3b49de334892e42d0325ef329428794fa9f026430515de3158f21e63c992779d00bcc5084000de61acf0a6b3c20a6f2916de60b0c0c21b062dbcbf68a185b7172ebc5fe0820bef2e5e7873f1c20bef2826ef2d983079bb0086f71c186078cb11c0bb050210c09b050378c719c000de5031bce1c410c37b050478bf210001de6e0af05641010af04e8101de5a18c000ef2719de59c820c31b0533bcdbcc30c39bcd01de2738c001de2640c01b0b0420e0ed9480f79a0424e05d0205bcd5284001ef2b16f0b662010b7857c180771a0630e05da3e18d86061ade24a8e14d450d35bccf34e03d820634e02d82ca5cc4016f330e70c0bba9321779c07b8a073ce01f40e0411080c05f11b8071188c03b90c08148400207b2e11cd860c3c71b5e6fb8e1bfff71ef3768721f4d9abc070effc10187f398c0774c600277e5701d39e4f01c14380e0a50e03e3afc860e3adc8693f73871727187b776d8e12c1e1ef2c0c3c11efef5d0c35715b8aa0215b8f7e4dd9327457cf85639eb03b53efc3b52efd4028b2347a1daa7506747525178929ac295542457a126f992aae401a82a7c85bae42cd400bc85bac25da82cfc85dac29954170e437de102a84c3e800ac363a8023801ea005e801ac30d500970196a013e4335c00f50653802ea0ccf40c5c081a8177802ea01ae808a802fa026e00ca80a380d7501afa132e00da834dc01b5863fa036e010a80e7804ea032e810a81db5023f01baa047eab0d6f526f380ef57e02b5c973a8389c027502d7a1e670279502dfa1ea701eaa93f7507778052a0f7f527bb80fb5020fa202f1a29a81b7510de20da516bd3550dbe81da53694f7516d0dbca5d48ef216a2f6d17b4a6d296f5a6d21de546a4f790f519bf6ae529bcadb4aed21de44d4aef2de406d2bef2bb5897823d5dec01b4bed2b6f0ed4467a17511bcb3b4b6d0ebc8da85dc4bb03b5b3bc8fa86dc43ba97607de5a6a1ff1f640eda43712b5b5bcb7d4f6c03b89da48bc3f507bcb9b4bed24de4ab53ff0ee529bcb1b04b595de4ad4eef2f6521b04ef256a2bf166a2b697f797da4bbc976a33f10653fbcbbb89da4b6f276a837987a9ddc45b4c6d27de4fd40ef386a2b6983753ed27de51d486e22d456da63799da51dc02f587da656411f913641132b5437000d429abf384cab31f2a5b0bd4b614ce9b22521691f7a15ed5937a7b7accd87386d82118af672b50ef8e1eeaad3cd41bb443bd22d44b820ef5721a0ad4cb58e4502f6b31817a390e0e35f6baac3ccfcde5cd0ad6ec4c8fcba4948add67cf0629adcd20797a6f498a526eecbaaedb3ee946f976aded1c7b4c5043438ee51a0da6a4b024f0d2d49a07e9b65191167d594009934af2352fbdc8a0297fc0b3fd58ad1f0e48c27eba53db7dd54a3228fc1cc3f1878ed725c508efab6016ab6e0553d048affab089f2468e9141f35c954c634c3aa708613733dc797074a39ee442ec3aa674eb10942b7479f2e459c352d03583e6b72f498996d3cc41b268922ca771419375594e3347c97e1204a9e7f5202db7c922fa4297274f9e3c96ca1afda0f8c033d007d630499cff56bfdef779a01b4b6f240519f3948c8c8ca0cc689a336c2ca54f51f60e6d4a67d498c2c97edceafb2ab310f755bd3f30adbe74e76db50a917ce7daf7de40192ae9efa09c3d19645d0c5866a1ef6c3dafe32af3d336676f7d1922e919aac076ced73cfde5e863b367f33190284a97bc7c31b17cb6419af45ff245b73be1f89ee7799e373ae9ce8d972f0f8b2839a43d6e412e8f4eb8dffec6bdebe5f78f4c9e3d3ae9c62ff3dc38241ab9bfaf8d8920403d7c449708413e4c2ce8646e67ab8a420f44d18c7eab17a04ee6ef6aec84e8d9f78f3e0a1041e499d14b299ad1518af76f54051185f3cc683b66dcbbeae40b3752a1dfe848bfb514ea92b28de20c6ad758d4dddde604f71dac6137dbed8b028294d27b65c4db48361e0b6998e2eaaad65dfdbe6c657d1d38437a1b97adabde23fe6bf560c5eb60c573e802dbd6088415c7218f8c781ac6eba9c62bb6c6ebb2977bb0adb767637ced1945c9c4b6c2b3dd5867d528e081289ab16a94f04014cdc21104c177f5c06d030fd6f9d50ee4c1dc23ca17730f285fed7dd543970c6145c27ebcf73d2e810be4d836f2e89221868858a5d55459b1d1c4e65a0a47e8112dd48ecc22e5919d340d8f899a85e4cc42e575dca6f23a6ee3366e3b521323dea6d59ab24c6d63b630148a9fe8c6adb1fafc3eeb8adbb8cd68dea10121d16a4e43947bba91c6c7407753a9542a9514f1b692912d3a7409d4c87c1a6a0926698b122d4899a6eee9d261aa36caa9c4529930536dd464e7e7b72db2871509e4c566b14d5d421926329a9bd7711bf53a6ea374a31b35236eb449698d7545f471f5a0947a513cd125fa8822162b4e3d96def5571009eb869ef8e26c451350525df27881c414cd82125c7102d55f07fab9296ad4882237e002099e30e3ce9d1a9c2d3a4e098628c36d407f05a9c5b1d495a666a62686bd1fe2c6f8a8881748ca095296454c230f0a51fe05615ed0d4815d3391eadba9f77d2a90c71e32625f4e2421f7237282deb9da6db77faaea4407cb2ce4852dd8102ea1efd1c9e98ced17e86d902fae6377d85600b23dd2d056be4e464937f22563205e3965e5edbeba6cd25d757939c544df89bccb7f5e75d25abdab5f6deb852fa8ee39a971b22acfbbeab6b32429f516f9e2a6dc9ab26e916d24f912af8f9ddceb77b9362903dd81c988462b244e4367caf630f9c7ac4d973883e4dc7aba7355b008830b7b452b3f44640e2da16285e3daca197c0cf435a5cc3368e41f913da5837c4929a59452524a39ca518e8e1b6b4972f5e4eb229501d7adbe6fd5715b70ddeafb561d4746092fc65871d0b67a22b9aee3c0745cc7898053718d245ff20c400175f1cb63bbfa54dca6aa9b9d96ab9283b6772bbb6d392c11adf76f82aa2a2d77014b83c82039be7ab85c736b8134c80da28f1b6f7e612d3aaee3622075a8604804372052a739226b0b9bafcc17a74c1565ca38f1217dab8debbaa61903c7aea90b2ba35a085729bf54973eaaa8de367eb5eafa6069f3aba7b7cd6ef6e7c641754d3368f3d264e55d2b292dedcf8d72e3e6492fea8ba96293c23870ec681dcdc9a339755eb7f16b3b5755b4190b3968bbbcf75d6e38ecf6db217dde8ae3d7eac9fc5a0eb1dcc675ddc6417553e98d1d8d45292bf148b26179ae6833a8a3cd8e36c5710176bee9d82cb4c9e6cae24666a1ed1b1de9ea89a3ab21bed0cc102f065f23e594f21e0bf17f885c9879da59fa985655acd2706006ab27c4d5192b17889f186e4455175f1262f7b45a23f6a079126d287186e821b1720254a24c14b48b2162d308b4cb07542a88aaa65ed44694ead5f916e6c73cb30185d149670e49392a7070557c1ed42a74d32d9618737e5cbe1f57135278d4c86e35db30a8a28509c698f17dc6886d025b3482273450a60a0bd8ac51c1ec6e4a631877a6382171c1040b668d0513519bc3cb3651fdaeceddcfcdab7e64aec66d49be7adc94eae66509f131d967e161d8a665d3c262b1865879169494956729cd580e726a543ad0e58b1d373379d69284b553910792d89440a9060225dacce4596bac3cab36639b07a478c1115348c869c14c9e55022bcf7223612c2bcfd2c2304a87ce162bcf4a62a211ac3ccb8a8c51cacac232b2616dc654f040133058811431599a98c9874e12d66aac7cf8346331bc69c11466d2cc19c365261f4249585f61a54bce0698c2f880185ea898c9875212d65658f9704a3eb42361661846cd983963e5c32626fac0ca8761648cd6c2a419a34a61d48c51248a48a34d1d341c5063260f4a49585761e5c1a9192b12e20e0bbcb0d140131318b334563e349ab1a2326a8e88828402178860aa6b563e44920fb348581c86512c148b1c2b0f423151909507d924b9b1f2600d74b23246c41b33ea8051a74a9e993c4893b04663e541a41913d28239456cd1040dc07862269b04561e549a3186928325cf962a63c01c3193079724aca9601a03365db1f2e0990f0fc3261e3c694cc9987887895e961a7961e53fa5192bb2a2f4654b124bac81e68c99fcb724617d86e7542102323cf0e48406accce4bf2609eb1158f9af3663498cb278c102355858d1c54cfe7392b0168195ff9e68dd4cfed3c2b01927ce16183351b5f2ab3b3336a3a23ea3556dc6363a5b8e58a0e58a193833f9959384b5991288a001ad882eea8400895947cd18c389521bc2898a1564916626bf9292b09ec2caafa6244c7e6547c2cc306ca65985598d593531d1adfc6a8b8c4d2719d42b2f56721a130cd18604429cd1812a3379d51d09eb32567e653463322c45c4b1435303c6163332567e857486955f6591b1d54c5e158761b38b8a8dca8d0a8a897e587955d38ccda525556dc968c6188e16567c61461a12ac19c14cf6182bd988096304493580b26606b30ec18c711d19345144194a6d8cbecc5a0a2baf6212c3c3c3b039a1a451c78e84f11d26dac0ca7b5033366993163583b17559794f69c68a8838e3022b456c91c3549b31cd18d7ba68b3e45403830e9899bcd724615e6dc6f84d15a82ba4aea0428b9599f724619e1b2925e51949d998d7c4443a248ce53b3bf249a963c3b98162a21c569e9392b03b12c648302a9b9ab85a13b7d9b9c34438ac3c673463b6042b1043cd192bc8126626cfd124ac9fb0f21cd28c010983052880228618366c662dc6ca734a3306003370e2905933022a8e66f2dc928475182bcf3149983c3746c2ba19934a4a514565c450a38a295d98a9c11a33d94e5816e30452a4d0b860cc0ba6ccba0913c038538416a53388e862d660acfcf68466d3c230094542f1b19246db8c588d140ea4408a285290e1c44cf69265039441c118a42eb8987367d65fa6c8d891b09595a76618d65ad02626fa6caca1644b29edc8c3654d1934a820a366c6849548f2348b84d98075970935d9c8582f2db9e9a66e9a35f96934634557f07c9962c454139e2a66f2932661bd8495564861c419222883036b2c31939f4912d65eacfc549a3119cd0e9ea9139cc942652695b0f29309092b3fc74818aca934953ad2ce1d269a5636529384b19384f1931ba8103603c7d962e56592b4226334cca07e5416db77fa3012483863e5bb36634fb2e8428d242e508caacc6483004a6a4a4a8791316f26df63ba368fccc03015bffaf2aa3a8b84b5ac7c239dd1c5ca211584200d0aa0349569c14c2a59791d666c88121825bec0019344c54c7261010c2e43c0c00c9d28303329caa82943849167032420a2ca4c7ec0ca1384e00b284d8881a2a993b002089ff0a8a44b17094455889899010100000020000316000028140806c3e170602c8b5451f70114800d888c5e7046170844698cc2300821848801060000004144046068664600361bc90fc54ccc6f73f94ded1658190351bd2d5a70dca9c95f32f0333690455aeb2b00490be5b8980e8da8013d086950b11ec2e471a7f66c39fc3c46dbcca0647e3cbf1b1f34b6f6565bd91b3c7f66ecea2d2c8b2f680b11b2eb4337b4f931e0648a0f49b27d26e41aa33848f698a3cdd8a3f57805d99d11401927edf2c8b1d36e40052338c93c0754aae63196a18730b4acd69f31e8b6c8057186fa41b6fec2bbf854408c3382ac28c0a73a9e806d0093add63d7d4e27b82615c27c5136dbfb6d5d8eb74d21b4ecf7fd2a97c95c6258c528f6981c36d8e2af66f2d0f3d67c735cbd2d7ac11bdcbe67cf8dd61dcc8de4e4dd8947d0070bca6ad858f2af22194f5da6ea15e323b94e3643fb46e867f7c75084c5c3cca17248a923221892c814bc74cd5c0ecede8ba6be981d9354e56968dc9284c882aa93c0645def86e496cb88a1002301f954b71561f5e18ed002df49e27bf41782400b86940ce60b6e32999a4eca91a938f6c187973c86160f77af973e52ab90b7d2738b73d60996f5d852dfe60ea0116c90ef9dd15c5ed42781836203f821f20bcdfae753dda56904dd721ea8dac9d15d985be90ce8c54a2bacc3784364d4e17c16e8fda9ca534163bd870e8669861d9d99a717fa022000d57b4258df0ccd5451977943ca696b19d51fe5653a8fc6be837b0cd09cebd543eafdd1f3e3d6aa18359cc4c5967443fe1913aec4b28b6b81ab6cabdf6e6d36f24b563717ac0647b3f01f3dd7f5080318043f990c643a2ddd4df258ee283ebe378581455e0366b100dfbc05e895ed2cb1212996544e900463e0541281b3d781380a000414267fb388ab5aa9201a6aaddc73e8728ca33ff365f57edbd8e71eaccdd72a26848de3cd0e0591240510088006b37ffb5531119dd15bb68e7b760efb5921a6e8e2b4e78e911c1971136015a13be2e380a4e598ba6f0b49278bb89008ca85b9249e54ea3b568a1ea1023b632a6203b040a94d8216f4339f7664b41ae2587f49b0a0f6b5ab942094a1ec49e05260a56103f474b20323f417ddac61582ee55c5d42df8b373afa591a104ed3730a7d5cb4e6fcf8143f7f5e199755b2c3a3dbf4c60eab2017713416033e3e9fe7eac72edfb6f80182c83b089a261ac3b04cb05d602a29b5cd68997a6ca14afefecefac56b876adb73032f341205eb53f62ccf2ee4d0b411e3df5f31d0d7618ce276b693ba387620992fab45dadf370b9541c642ac6e129c4115b10d40789dc232ef233b732e6b1abea3c8721cd6154fedfd8a04c02388ac3fca5a19e307b70984cf008a9ea221a51bd2d57cf44a8339381dccc1b4c7123a0bdb082497dfd74f75ab1b8ec4005def07ea5caf507c755e35e074c5189c5d1d5db3670be19e3743f2894316cb7acae04c605038f180d11f794f5aa18a27ab8bc3670c9f7b8030340584b952945acc4dd0d01f33b99cdc2a213049a07c5eab21246367b806bff7bc7cd457eef6d3105c148dcbd1252827918d207ec0aff7ec9df93420324cd83fad6c20be12bbf2b01b9bb595788ed6861dcc0c8414f0a4f64c408019cd35009ae0ac913248386603a97e3c570c667e1b347c222be962566d9881fecd576b0006098aad58393a044166e15ce0378712d600ce033228da4ac2661279d67222fa0575d71a247ce21a6361d9a5e3c8f5fefcd332e58aee1571b1a52349d2cd20946bea39ae0ea448aaf6b8a321f60af11e1069dfdd4583a8ca68a9b5f4fb6d3032ddd35b641dc9e3a9a65bc783ee481cc06b030e56cb73c176f0511306e529fed41b913db13e11959f9ba75f54e77a04aec7c63fd91ab67587777d0c6483bdc75dd0fff083bba9f51680dc69c2f87d990f229b62670481558746859b24384a3d9a99d7b7daa59deba0bf6649eb6a8296ce95bfec8d539d3634dbeb0b085552b7ec18d14868d248ca46b8afba2af3812a488c8f142349eccb5305eeffd824231230f202d35fad30d24bc64694494e2026422901f9a718d7ece3c7f6fd08157401ce077b0e2c752cb53d15249cb72e654bb1caf3fe6178c235e4450e68f6b0415b69e03a74af88d253b1dd64023f9a03e6b517ae5e90adf489aa04bb82f571097d1401c7a218f692335860981c135cccec562970358710f268c66fae342cb7baf1e8d1194b27bc7429147a366d3123bb556fc0ebfe0887d384083b000a0e2dfe38759638a8102177109117088a0fbd4c6949c13e83c7dc661bd2275490569695c2ef2179f4b8be02a221b12c69eea14f3989c72a7783a1076de9c383b82db80c565677088adbbae745bbe509e7a45104ec6c987edcb16374f1167c1ae657672c9a90c6f780fa1443b616c1b5e81e8b69ca1cb43178954b55e2176ce541db81c1348b115415d300eb8af82402c65f3ff9485cc81cb723bc4c77f7f8b95fbc51675e0b1ede5ced55ef4f0c01e73134ca230a0fae9a5e324fcff84f6b2df8e07e237ae9a9c87817b2da642a6fb4d321a73439a45342d0897821fcb71526700ada0963f0d2e1694349d70be3fb2493cffab09f14547b13b8a72f30d4972bf422884b2cf921efb9bd8151445a0326e8a6f77549cf8fb67418f83acd65ab9bf4eed3007cd32650bb7bf2430a674a7ee34cd9360d3898ed608ad5ccb55ede1a88849f4f69c55888de418ef52c2ca3a0c2532fd41a494705290368b37a5be52aebedcc312ce5baaca8da39bbb9b3e0118b5d5a8dc90321bfa164c5827497822be7116045014a53d01c03442122a0db8006454d4c730aeab1453e776bde500bcd05855045e9f84701d73c34270934a1b8fe262ba08202e638e3080ecf5f9146b20ee02642bb83176152eec5a203f4dfeccded4fe0c47e893ae811f12980b0c750ab772d3414688d8fe67df95d2591d95446e23e79d3b8a261da3a215dea57d69ca8a7b1b997741d001e97727e8c3f4a74d52501ada13684bd3509adceccda86b21f34144b2a415fd8631ef86a0c4d0d32de425637263c48ec9d06fc3441cf36fa642101777b18199e49fa732bc03996acd81402c86fd5761d5ca01530592e4eac0d5d058840a3ee83d57d3d2c1b5fb2385ee9ce7d3f2ef2fb84b41400059c623f84caa6e43b16f25001cb90534c8275ab1ab9f0fda87db940f4a429ddfe05baa88ca24061f427a2e65f652334f5f27eb9a0c2ab0372ff9764ff787be6706c143ee8e143b7e9a05c89d7abeca4531289bb8fdee99b0f3d0a2fe914e61c353228f48634a6194ee78ac2739da4765353fe4daf891070c048fdf0c989d2eee423fa4716cb1408c0ed23c287f7d79208228ec084210ee3887ea85d6e26f043801c0b4b1c413dfb79936e9f1974a85c417df72904b1cdbc3679f104b6e9917eb672478433f143cbd70f6a9cdac6a63cc7be4c19d4503cade1ded0b25fae22fa422194154fe7db51caa829368f01e51f228568bb692d341aaf0400093fbb46033cdcd5fa64fb01984ef7a0f1196b9f0e9ac356d9e2ecab191a653595625f2a412c717f873c9b7f32f4195b3b9fed5718dad1606f50b53e716df61a16fb8576e4a6b906d828c575b251d88d1110f3961b3fb7e74008556ed50233bcae854f78e96837bb9c2777fbe314718d4759463e0a1d136dccc4e054cbb8c889b1c72846e6abb60b69ab3623c60406258b6469cdde28832b060e3f541dc24171a7c2fb9a4eb2f40ef628b79ad5ca6241f16bac76f4c8c6d752b0a3144fcd1b62a0db0fd4fc99147aa72e81650174f4d2ba19542a2ef2e5713874477722ba0fc5ff81cfccf0885b3a015ec400b12b769e2f469bbf5a78314af64f4c1f0460ab7a30e60f1e82bebefad895ae45a931daeeeaf2d0c519b6816c090d1bf1f373df338fdeca5bc567e5575ac8e1e75273afd52adc609b15b0e552fdf1b01ee6ee32f1996453eda38bb0c0c50300ed6866dba9281815000154fab51f248b10bec2b643dc32fc967c6b48fe21bd11f592b3851de809e10034df75cd0538c0ff178be88fcef82908a3fb83a8ae88e82b9b455e44311d9cfc70d0d9c9da2bc65fe53f054e98b8739860b004dce1ac54a952430d3207bc26c653c055b191a633d4dfba733c4e49418d4a29348acdf4bf79bf84e929bbf03b3812533968a3a96d9aa184172e9f8adac2af0a48a59f6dd7fd00b22e24858f36a0d9ae026d9e40afbc46f701a9aead557924ac6ccb5e1b4f5617d9fc9cdc3113ca6950d9068d6763b8feea4a98d39e009cacb1a129c103f951151d05a96c6267cbd8c1b4040a265f428e070a0e059025fa4ee733436441e4c416071c474cae3a839597ac7601da3512b2693905ef8fbfc49372c10d8935702b0829d46806d75d74dc59ed6ab6118f3b1978e79dbebf3a705e7ebed564f48e77f838379e9bd3c7b6f093b2a91d08e1230c88e10fdcd4bf28284091de464d6c09b5578786c1d07ee3e9104ed48bff99fe9e8f69dacbcfdef5f94c783a748be18620c1bf2c29d1d06909c6701c83f5d0d30a0a560762b83bc3bd362d83580ddc8500a622663d11eff243131ff48545fd73cdfdc100876950259222c9bfce8fc28f70bf04e2ec11964148439a2cd064b53c12bee17dcbccc7445466ba9e7ba2e9106673c9898d2e95dee0d645d73e9418e0d7258edbafa079da67a4ef663fb4d1168a977b01b85d67ffe36e52865d430dc2786c378487ba6e846e9bfc0ac8bb6fae5b25dc8a6e2279a3669b92de64609573118b10c051033eaa187a273c6ccc8488641b3119e9434fe17ef719b6a7c2534ae1847a8ceaaaf0e665e5fb3e1902ef303cc28526ccbb86bbd85ff495d5bc149f956be105457c77c879d66760cdd3140efe14bdb00c429822568c74bee0a5985038da6d2f7462a506a090ce637fcaaa940429ed3a2e7bc67fa04e065893954cf0890eff1b9df22f93dd6d1b389cd9d0bd1c9db58323785a586999e4401de03c53b8f9fbca20381aff7b6d5435575a9d6219a8428623460334fc499fc2db46d0c4897ef9e3fe5d13dd43209e6896752f87e846a3642515818d533b848bece6786a6a342b6074e5c23912f9dd4d38912366bf0baa8b085b1cc8b7100f68550c733d2b9b412c8ff9031f29d884fa33529b18859e36e89709392543fa31e035e4dd98b90d1c128059dfa572cbcf897de0daefc91e3beb0422ea402a8ad8324ad8afd9f96fa023e1091ccf58848c3fa1fd98eb0287d40132ab6af31c444aa56a4dd404154c58045fc3ab2100fe398341ffd4447725a2db79be6b5ae8ba4ba265055aa8582a69abf241c5416faf74f537a16bf1ab45e99ec30d8a8f78a4b4b59e6a4c00ae6dc0a3b2181b3dd707b2262b81230acd56b0a6a3a11f734acc6c044e2ad710b180ca40c493beca3b78ea2b3e88503749fa468d7bb89445baa167178c52f69802bf08ad7c0bbb711cbc67242ca8bc8e5e3b22400097af79d7171446daa115138a8acb9c756c4a4a9a0c4c0afc1ef70e7782326d8ee14c1f873f6d9a0e27ef845660f2354340317999aaba7c72353baccc05821c29829af1cf36e13cab2893e7296413c667b4fdb9e247c2de009762c61ba0727692cb0f76f90cecaea812add80aea8d7506c147798938c657347be5a1c8c40a3c7be480e686bbd35110d4209b07fc40a24f5168fdf85382533f27bda9e0f70363380ad823cec60db5efd9448af601c801f9232434ddf261a3677a73ce61d40c27535aae3e4c14eae0ea93386cd20031e3836bc27bffe9acc556972afdc523afca44562d66c1cccd5fae7a71ed8faa3dd3855c527623a934230bedcd390f5f38f03f15fd18c456e5bc9840c72db92d7c331f830fd180b7d5f22849786b9694c414492a87d27365484acb8a0f511cc54a39292628472dac94ab62b9c28632f16994263129313ee2282f82832b9135deacade795b5cae318751710dea6ea23ee61fc5014bbb384cfcfe531e0e67567b152667c1465218642c9b8f08909e357d029a1d200518d5a430d5baac6a68e796e3dd26037197d57e777e499329170d8e56bb119f3dd7dfeb30e9e22b76fb2bfe30e3a3e01dd8c70b3b90cf29a5ee361ac1d438257ae2b81b2f6638d83502d6e3e49534a80d206284501996253e351257c4a568ec617a74730219a69e2f80980d33b407ddba9be169e9ec67c2ad6a7734dfb7c417cb3fa7f1674c51ae3312352a1f390f1c62199a879c8a7371873d7965360e95b76c53a23520d1aa536aa72c18a0bf85dc414c4d2bfdf44815fed07306a410711cbd735383dcc010dff3a78ebffa88f755a5c82c96aed69efec07ff3702190ef6e619f299908b0e54cf68f02e5719fc3656374427b8413fe3ad39df85f5f75e42bde3385486a60213c025c122dfbe20bc65ea228696919c59f69b6feaa95d58fbd290c8f6398670599f40689a450e157096903413a893d41b7b08594ff67725f55bafa2703c64788a72d827b95339c26cf6ce1bf471be074f013b97b49535a94cee7736317de496e7a2a1c3dbf5b70912fed8fdd14cf412f7e9090d440973c744972a4dd9516bd921a57d3896ccb396762c294e484994bf96309476866244cd15c5ee05c1c53975a556573e2fa236a9e3882b91e75e3e777a26fe1b99ed2125559a14840c61a5bde10807d4daa79adb4ff8d08c8483735e3feed1a9f3946aac120f13d63dac04b0ccabc403c03b70ea1bbb3da0188d9159c2c6a5b78647d5e28f1bd0ec47ebefcee6862ef30537ba7d9b9bfcefcb324829319455a173d6fcefcaa52e619efe379808073e8a822be124c66a946c7a33683c447db4cab8783dd31691656c94d56114601f8b5c4b50ada84971737a0419956b5c251e77e9c5cc414170a00cd2a36e64109baef8aac8d39dc9da209766a40c9f646b661c5d9047788ef7a857b40b4f6437d818b5dd7882707de9bb8ff643bd7dfb3756a998442ba1ab438cac53701903f06b8122e8fed93b5404b70b964085f4bb2a5460108481e82d303ae214ee4d01596caebae0445281d4abeff00a527c275ded3579414503c38f7a82189a0d582b2e9f42afe3b84528c62a25a7e418b63c876ef84f3fdb1186baa986b4ceacc63d8226a68de07daa2e7da59086a021387ff4c0c9bf6a4746caf7a2334490cd475df4aa2324455b698095b270ba1dab491751c29899ea85239296e60e70124e274d5c3f7a1ae4aaa158f3c00bf7f6d13a7ece60316b1fc3ccedd87897f69c71cc3599948b322e653546594a926224114ab72fe51ad827df1d22509112903f25f5aff5d21cd58342f44bd775c006f88df50ffcb90ee5f8952c18db9cd39c168f83f0dbcb5000c08d9e1f60a50cf20d22a153b749e5b174adf9bd17fb8411ce078d8c84c22e2b350bef04872a97b49aac80ab134a809495f4bfccce32ef10a83d9fb74765e41c0d6d4b15fa50f15cd23d9557c2384e0f696ec85fe96faf1cbb58fe9c72ee0219999797b7c2992abd30a793ebb20b49b250e7a54732d72d0cfb411500a35ab32260ca0501ee27a04f8b081b6a04da0d583a0f17c6d4f291658dfba3085e022e519a1b17ee31c997d3874e48cbce1566b32174dc64b587eae45031acbc12f5b5be332ae03c93f987570d10dfb30d08ce1a7f2566aac08fab95d7900ac5cd88d0f703aac7342ac5917243485b2421dcd7538d8150bb0abfbff32dd93166fff91deb4b9fa0d7a8cddfa8e4dc9d82892d4c3db4149d87bb11f48705d0628ba9e409e80a15c991acefc05ed90bd6630cc4bf6358416b9e5a872871c8f8e9a37a9dff043dd0bc055e7033ec715b9ccb16dcd9ec190f4213f58467e50865e85ca358cfbe4bcb2c28cb174b5cff0da6de42a73b6d2353a605444e732f8664a81bd5b3571ca5c891e6be6b743b4f5489675c025aa9785e8da4a2d6ebb495d1562b78d0b802239e683c5188510b3f15e98ae99ab843a7fb8d467c85a036044febeb01a40212e9877e99e56cdbfaa6fee4f5593145cdadc8fd64a17904abf963e5168b3e51999510d4a2ae1652e5ad94989b8f3e1bd31a43376c8c9e4e87462fe35d0b51fcb580d38096b349617eaaf3d2bf3b2a09ab434eafe4f56b46869faf2024a493c5d1e0a34acead44b7142eeb7f924e239cd9adc458c15cdceab6b8e595ec4a418e75ce4a532bf54fff27c42518b2cc55a8f42d262a2cf183951e58d741e79c0853ddc63c39aee43a54151a48d1c1f1c270d8fbc0a288ce01a23f3c1aa84934291dd0c53e1a0e259968bd4c9319c30ee3747dd3653d3d5ad4537c38710f152fac83257ddf5ff51b82c018381d65f7cdd1ee1932fc2280e24f72f784d52ff1e577f69f477d48fc4b17fb6d10184386b616bd4f939c05d572511beba4ff5c7ceeac8a515356d22955564a16c21cf0e2a769d775d07c4250fb883fac6a101a04b6c80799253f598ab55738b51b160a0c4653e503c561d388a9bc0081d8fca412e1d018a6cf1482744b0403749aa93e6d0411a2d971bb870400a5c6490f2615295762689da1c9b25303088e598bc50b000aed5d66e92c00c3b45e8764068986860646bad696644a2160f3b34e0b450090be4b0bc42a518cf45325e2b1314c136904e99e0a068814a77dda49224483e17d0f29084a8d103e4c2a56afc410324793e5b7061010721d8b1f489128d00814f11e4556c7d7b5238df96064220644912d5791486811a35e64e7c648baad74e0bac6d1dfefd14a01a9ee42fa328ab4a68e547126e970f7cc52d9094a9354291922b952ea2f4b3cb925eb7497041540e06662fabb645af966aa4e9abede9ad66e9b2aff4d3f474e2b8f4e856ba7bf8fa795b3a7d2af4f0f21bbedfc40b9845059cd504c88285bae2851d0280e7a94e58d94189e14f758ca6a963025604aaa8ac06db1902d1b97d5900f7bf9699f3f6e31e75defc0153af10a6ce7a104542eb706e18410f40b7832debd9d4e6e9fa7ebe8f079b91cdc5e0f97a3ebf7723a3abd1e4e779381f841f806113bc688408584d729b12f9908be4e381a8a31679bcd446a9a8018a899480797a622324ae15efc3b231f9a0fb1032a10f7fef80dfbf05533f6eda04892199977fbc9d908baaf0ec00addbce3117baf2d621f6186b2654122c199008a48fc2c9b6c8e44a461d34449cadc26c46912e1cd954c50f211471ec994f0bbc1f1cc4a56df4ca065c9f354a214e312a62f31e448741113669518d35626fba65d9e4213010688b9d6e4cd83f43bdcc425339634e2a44adce10aa29359ed4e9cf424e751977d7df2ad259b2e409967502cdd1c14321412cd769f4491a1f300218ce2f628c957393724c52e0e873a550a134cb1c67644379b62417c55b5f314be503197aeed432acc985d3e399585565c9e52151488e9759b56716cb0926b56c84c4bbc205b5922b952c52b7fa55bddf02b2e112c14090baf77ab0f8a653d79ab65c882f6fc78d7ca528a9ae59b3fcb6a6f6a98e5dcca5df0f5500c50be429c9986348e0de17b3b5cb13c3cfe0651d20db1568744853e89cdbc13033a281a59f11161db478ab516491e84a41d49641a589161e847869ed0a8b0614992d18d044b4e828f3c9909186538949415e1a92c04adb23c109649305986a16f590f91cb32a62f8361c04c8516b31e77ccd2786626a29c59089e66186b95346358c20564b9eadf720133ce03a32ffd40eaa4007fa7062b9e32d8f62420e05300d84f19a29a4db504f53a701382ba50148c8652f012858251140932a308908d0280825406245208f24941a052aa8074a901064c15e03585c06eaa05ce53118c4f018043a50029aa0e5ea932584ca5204755003055034cac32f0b4aa03fe2a0928ac2050b36a80a05500db5630d05b69a0e9aac1b2ab04e65e09087d15800bd6044758167c62b500164b00842c0044b27ae09795606556e0a56b4f05b42af3a5bd619cf60497b50b34d71e80b33de32cd60454b71430de2ac1069706345c61d7b33d0ae5aa983ff794715a08a47551b0b02b766ab147e54943185911cd7804234dda87970ee24db202545d444aa944d5049b55f0548b1ee682897b6d85b0a3c898ac54560b3b5325a675a16b01e036fafd0d0620b7bed01d8ceca433bcca514fe9cad738fb85dc01298741984be1e27478764b94fc70b1aafca8708fec1c2803174bd20913e2a6b939725e17a5b97432796a51150eb7c37f37952b6554a1ac08fc13f065bdbb5d9e5e5fa7c3dbe7eb76bc7dfe0eb7b7d7c7e9f6f27ddd2e2f9f8fdbe5e949f82cbfd800b28f2764c9585f4d7a5b85a20dc3e0ba7a0b6c03a690746f18d8e6ff216d6e3cd8ce1c036c962db41d9802a4bd63689b9f0fb4bbf3601b660cb15bb6806de00a91f60683edfe3ed0c6cdc3ed9831806df942b6815140fa3b0cb6f1fb503b370f6c63ce10b66516d80e4e0169de30dcceef03dadc3db48d1906d8975b601bb0a140253190af32949b6f035863429e912cf2f45d6997b785981346b1b0cd7ae02a643ca15edfe7974a4ecfb731a1867af9882d805449fe826839efdf8a1c9cdbc9980ccd723c431a5eb93098d852b718ea104527810797a21072a0d8061fa66c32e309bbfae1bb665acba2ddeac65eac90d275499bc0aeabc87b07b6e4155b1b52164c3ff1b349bc1ddb7fb110e376c8fa202784aa0b418d7c802e3edbda70dedb1bfb66177cfb3563ddb91fef9636dc76f7c5bcbd13cf7e6d9877edc67fb305b77dbdb16eee8ebb4f1bb61defb63f304070ddc7e7d53f87c51d8f4a1c6fe29498c48a1f94d4fd5d1d268009f93121bbc96331df65f5fec4c2e2172719a98c4719f50870d497d2d57bed439dc03bf54759529cf5a652c54ef6a14600b6590089384af8a34ca58a7bec45cde0f7e9891a24b8d59b8ad53aec47f9a077e989e20471d6972295faed45a580f7e88d9ae4f1d5931a55bad98b8ac176e88ff2a471d593e21576da87228176ec9fda28e8f74abd082def439148ebf54e25c668ea454defebec498d24a3e98d8a6438ea4ff9aabbec41f10077ea8b2244f8eb4da58a7bec45cde0f7e9891a24b8d59b8ad53aec47f9a077e989e20438ee4369ebb5f4a58ee2abf44c118628eb43114ff5f6a652c263f4464df2f8ea498d2addec45c5603bf44779d2b8ea49f10a6077157703e8960d09a0d11b4e93c399239a68eee74fd4129cc879b59f790434254ad51a278295d689016b75374f74e97f9d3894e44bc4a7347d4cec4bdd17c4a7443e238e4aedfbc5ae04be222ea5e7436256eabf271e4af21171534adf26f625f705e2292d9f11a352f67df17e25eae1a38e58b13213c8fad98c4f40f3794bd2f062d77c3484f6e15afe7328721032e9cb7df1527a6a7a985ad20de9c3371be0f9387ab05185611dc879da7b2028bd5d9e68e49af4c367556286ee33142e817608988a5a8d10a726295ab31430c7de54f6811a6b22d71d54fee78b4fa5524e0810326d93f5991af62eae8fa9ad05e0d824f15806cb652635da6e60d5174bc6000374f1795f98ea65a912bc77df5e3dea0d1adfffc808ab330d878aea1c1d98a12027d183d84a6f121d849e2432a30b022e82395d38aeb6315bb4258126213af38a855a6e8fa5104c2ab13278422ee8d1a80054f120053846e6fee50da72cbedf3644783a25f4c16ae12059bb83710d8670cf342e4ffd105c3581685852104873a32046c140ca9fb60858720e80a22eea06270805391b0a84741cc618d070ffeb21e0ab66e26051b9a16d0b82f0ce06284efaae5f3d00d0d535498b873d5a10a1d420cd488bf3b10f01a022ea07a7c807b98d0b84f51ec63901a89275758e424153263724b68b4b4d5f92aaf9f2dd0e1471b31744f884fcc6f612aec318e1ddc983b5782ff6a777e8f7e4d613349df7ba758bb013ba27fb2694312fb4c639dcb201564363c86b95bf2417629950bac2ec2f897fae30c745b905268e3ce6f93f449daed8d867f666fbed18d620939acdec110ea645cceab8748d48aa3f5bd1f2fbd4b5524884bd5dc7f19f7c902fbc338042798c1f18b476d04e963502d14392834d48e6bab936a8a21560b9c71951e3b916b7167d5b967a1fb9f815a2cbef95a5edd0f138bc32aa4fd1808cafa0299518f58413d3e2e23f29da2391e0e63021a9c3e088789536fb69b877c30bf2099bf46a5f69f77172477b6eb70bd74da74482fbc91ecc7c254a0ed764c22f8f603c2d9d63ebef619ad59e78ada5d2d14e885c5a38fa0001cc380ef4c863e8cccd490037ef79dae9076aa579bfb3bf566d8b53cbb5e376dd8df4ca920cc8981e02f6b3de07079806a8df9e4a4fe4baa16de681a470bab6fd38c14a8c2e51fd211f0b765e04a1dfdc5d32e4dd6bb768d5382582f75e9238e99082f5a41496e606a20956e3db2a60e8f6f163b592489b1c1a89fe780c669f66556d01ae76960e21358f732be9f42e0c13f54bc93524bf6abd48f5101ae29138a478d84060ab2d6d5bfd2a994688c980ad382faeb983eabaa29e5fb1fac29c6bb941524103ce6d11be19e19a47c43ceafa194a670aab581a4f42ec66e4427742ee48e022055b244c90523ae9e88d82c298b810db5dc93dabad90d7f38c2768c1a2ced262a3869f9c01c6ceb08bcfb908ec7585c218b13ae665d00017c04661be2149eaf78c536c1fb11f0f15163e52b91a84a92c8617dc5f1a51617a67e53fc75b7b1a08c89942acc7a2a4855b64b8315d3438d05f46e2f3286583af2cd46c74e907a6e8bdf19e6b652bbebb25e25b52bbc90d9cc1e5bb51cbac50f51d7d873391d40da8d51ae03ec29c73a5e6ed79453d6902507c70627d9cd21c7257d3774f515af834bc95cb397862f285cd6ae45ca75489e0cd8a9c06d19c806b720a560c9c00fa74e2216cc40fd1233f6c9c525477afb997015b3d3fa20a45efd05e4e1f572470abc87b14ff418f974bd6dfad1491fef1fcf79dd07516850fe893dfa930f89d9c0ba6a61fc88b93417f2a5eb81ab79be5fddef779428f1b80e6f1adba3dfb410137c50d54d23738ac93a760030d7914767c851e7a8197a46062860e56a169ad4bc8d3a7414cbefe653701a15024f7e10153255bb097e84fac1a2291b5c8749ed90497d6f6ba2ef1d5b00809c26626cf37fdde48b6fbd5ddabdc28231fa3aab18546b5bffe5fee68ba0574f9fe703857195ce1365a247049531c01ce88bd8773259f0bf3a8e020a1ae6d7ab995fe632edcb6d87cc3e8054375bfd28a79514bdaf9e77c2c3c65501633b82e60e15c8ca691c676248f31d2e2d0be07960255a45b4800d093b2d23c35050259996252a35ad388c8afd3caea1ef8899c262b3185b9c25d2155797f455156ae70ac3552f8b01f4af3c121a0cc672a41aed59b57d02a1745a24b60316ca9dd6f02e5cc80d98ec45cee12fa86a35cfb9468f9f3bb5c3fa245a9b84f4db6ad84402570ad2c03c31c5bd8aabeca94b200cd7c9ec61f12922e29614045b1954e39001a74b202c2124417f04a04aaed8c7c219458f946890f2214f0e55dd73a30fb26d665cd83b496ab3cab83a9e8b4fcc2488b9ccbb66e070700c377d9668ac44e4df1ed689eabb2211c9c050e139d01d7e5db66e4eeeee01a5769165bf69dce06f31b50ea42658d453f2311e751a769232e7ecd68f90e63d2e60f04d395958287586ee37cd7f7a05b0e9e2d67085064005a2a81fac20a0a92036e95bcc1875f3b00d8e11405d1b921ae804d203118c9df4fe495106981f9e49f437d646a8dda1513ca3ad71b7a727a8869ce0d373e13cafa9b180c0a94df546d14dc8a5e062794b5c8857257f6bc035cce915f45a58c2394951a00a43a397f872f59f10f17ca1eec810d185672e26d6c6f3133f4f5e93f8c7355e53631741fa473b411b1a8c448c4b9b66c8ab95945d34b8a26898dbf6d5ae2be0e09030c27f69e9f97e0425083fed83f3ea34e007232d3799364f214cf30fffc455d02fe86b6ac8c5f437e3290e712cd336d2e2415bc0ae8ff492d1dbe98d043f2af4320b98c4182182805a45a669f370c0183321e8631d2b76a5958f144e379e48a955ff8c0533d4c9d54fb8efc8720d58bcec1a8a57aec326ed03d05b2a5f657735a9dbb1422b0032801b7ca82f649dc2b99bbd809a34b94d801f7b0d6c5eab28ebe5472c3a9ff7ac6ec91b2ee6a8affa968bfd1e9348d6fd319f05264fa848942c7966e45b431d796644e1bd7f1f3b721aede7db50c0fe7897c180e161c567e0d99ce26a171f8772669897c25911cfe0d54405c17a43cec60e8fa5f668149880d2ebbd2825e3a58cc6cdda8c6d10dc84c480971cf7d2415a9a9c3fdcc5ab2455ec50335c4115226aeef01154829f7841076863aaa7345a46ba8f2cfa0bb86cdf8b7fedb5af3141797572b8c74eaba3ff5ba3763ee3ec8f623fe10b172301a77dfab931c3f30d6bf2bfd8dc3cde9acc3b64c3f7df54888e3ceab3976a16d214a716afeaad3798797360e423dadba63bafdd586e5d2fd9d1bb011921935b24a0bf2a1835848995ff527bf8e593e01a3b80b09388bf81509589558ea6cd947c5e91517649f39347db76d47da0eb3da51d56c98fd2fe36be3e97a9fd431258e39023c3443851ddde026cb76caf8a780909cff3c556d7392b04e3f5bbf709a7953406b1658d86c3e759372da61e36af940983583504b7d6c9c5aa91842752aafd8d1a0482b44612c4a94162f5918a959baa92bf015bcd1cd4d66c40da0519cf87985041963a8a56472c6d5d966b8a497934ef279f052d420878c789d5700da812aa779d8406044ff068c8762492111fd62b4bdaa4cce6070c1bf979161cd5854655442111435b9d70565da6bdffbeb4fed996da58a46690f4cb336f49f63009f688a8c2ab318a28fefaedc8ee48ad4ea90ec8a36945e3106f8387941d2a8522b69c783d62964dea30cdd183a2df8d122d1c8caabe834cc4a54ed02c549d51d65806f2b25a57701ffe3af6084b3ff998556476f75ac59103558f2831aa73c6f052cd90ebb31252bcd1b5bac82dd16fb526a315d6cf40ed7d8f5d7dcbf178b764ea8aacd4919df54bab883dad176ded024a8a1dab5a7bd2f217806e80ea412a2bc6e8ddc9cb709786cebfe7133fa7417ff40ac8f57209c8083eee720ad6dadd2fac083eeadbbc0c2dc6ffdbe72748b72fc4294f24e0653bf2432ca020450717ce65f2a5f35d95ade716b2d547daa37a5cc3a7cd96b112e3064922fd043d4886f0ebf7f47eaa9904cbbeff230e2c2049b2123a0ddf57caa3afd31c35dd104cdf78db6454d0d4fef1b3d5fd206cea6215135328ff37740c2141be070fb2c5aba35814970b4839a345cbda187555c76c0753cfbd229f4e0b6e2482e125dad262ac51090202305a562a340dd4e5ab450bd72161fc8d61a899f5758ef50f8b5d9d5666b03b86d0ce8e6a0555ab7c157611085eb44ed23c2fa90df5799b7be69d8ef3d782a37e5c68c1f7fb987fa0d529b3e7afff86f1ea908b9a2b8dcc215bca87f03e06a26b01056ed13d04a2cc31192c65ee0e3054203b7c4be84bf0e88e43d874ff46607023ef425d0c60566dd1bfdb362acc3433aa690b8b08ae092aefc1623794498ca4b9d0cfb71d0080d031760e52d5c1d63ac067eff13224ec391dc16a2aba684da81c5f39a2c8c01fd83631f16106516d62a0cd0c9c2e176dc333ac4a81a293c756db166aa5784ccf42fe8f59d999883572993a07039a5c0282626277179a3a01e01effc84204f2ef5b02b26d2fb1a5a902f9e1cc7402f4cbe758465c2c0666d1ac1f6c1cf53cd47d394656854e59ce25881a90348746a2e5cd5346f35170e6b9adf9a0b714d97af39d89e67d2ca5de1c74ad00558dd5682708181add4dc3e9f4a0c04d156fb50ad69c4e078d3d6752473a9e2723ff30cea21741f58d7d8bce03cda24cf90316254a090f5b5ae71e308c78b063a08c299c2553d548975e100884afa9b8a3c7322b8d1d4ad6ce99a8551fb5e80309542840b4f059eb9d115cb3a9efe03a891260dd5b35edb0f8123336d301010bd362f2a5ccf72fda11d6a53b861c9126b40492573e256899949cc12b1fad906cb73880f6b6a16d6641411a5388d8e84a50bf8540734151fc9f8ac909e87233b6475981489892e32052ec5ca16b4c38668ee9eac990809ba0a252854800422166e03ac324429756cc6d73b1321a5a0e3eef8540d8750b57423e9293954b8daaab775fe71b538d850b9ea6ff426de4d45813a5313c621170a1a662964f2520c764b0531d4ea20ebfdbce53c1c4d1cbb352145d70bd51e95bbd9e93620111d121d6825a43e3174a4f4119af4c2a2819c46906d7486a621fe0946559a9847b65c4e6d0a0fa72ad46dab90172bf00d3c6c440c773e04b1fe97a8856eaa5175e8f488610320fe37b7babae768ad899cb9f3d07112d45e10b48b5e2aa37a74b34ae6fad2f11dfd4bed5fe714485c27c44f3f38a5da983df7f005433d494ba8a8cd095ac796154096dfaf1d9206429e9556b11ce1c66233e1f39d85e2363ff4643b772747bc7e33ce93923f2b075d954e5b8ad0d1cc1bc78884d45e0231dcc4c3011ae2c4a45129cf450940b6cab3f9e250f8a70af0ea69e04e85ff395d8f50cc3a53ec229fd3dd2e0add0caee00aad060a2c81d16266c428068df0bdc0a2f6530a6022fb75e46a676ef435123cb6fa3a4aeff571d8d256df8556a98f935d821a16c880fd34dd620006ad985ee7dd1cf7f547c77729e01a20db8e9643f283a5d00a79542d4c465dbad0b2b266aaacd74fa25d23268da5849436a0aaf6cdf456f3f561a8b2b8edf7e9a1936aa771852d7c47768ae88b0bd1ea96c2f8583bad27ade19a7482d763d371d32d4eb6c1ac951cb324d5e76820472ec26b0b86c2fd558e6eb731a1b199cc4dbdbc8bf4093baa52ffe367988734b306f1e72632354db70ebd7a98c9471507b6344e4cae206e1c68796853e022e6432f6bfb6f916537db46968543d6d0796d9220de2f723e0a7169a7bcccf6c63a96f029ba05f3b67fa567e6a98b9199bb23c80622abd2cc0d9234bc2c49cf67e1f922eabe14a46204dd4e5f378191f6f82e0e86bb51a6b71edfe2c449210031f6e4fbbc9cf99f6a8b0a96bdeab57c65d3365d77179d6f93b9dae1b193338a17e4d0a6f86464499646fcd3035075123f867654e6cfdb43c5db9cf4b640a91c94df7e1d6dc3275eb0125b8753633879f43ff6be28ab445b840b5f647218f7bac84f8d8800a220f045a1b7382f1ce1659d8d26dde52704f10f0f3b4442b74f135e07d025e82a8d0a283dc257d9087adf773567054f932bd1b241f54b22ee3b5220e7a1ff7da833184a5150a8148c4a6578d3db732de024b03e7edf77dd038284073416d201cc58dc9476f7b1ddb771cde246012a252cf909ab331de3ed67a6de273eaf81d6b84209ab0a779b7f4a5047603bd5d4a2da10d971a7cb917ba55f3e2bbf4c65ca4ad5f0efdd724cd4a01d9f5737a512fe155366d42d555e6fe297f61ba981fa6d8799529e7446e30b19ffdfe6a3409e584381b4b4d4042286b001ac114053f307fd03666efed038af32e1697786310c2e0e5cd4136a87423c9cce3056928351636f7aa77b10a3ffce918f4c9292b8ecd68cfb2f215594768e212d4e0f52d50a229ccd01d8fc7728acdbb56a2c27d011188a58a5012d685c064a19f32c2ad762e16a33c0f55c09f2f5ab7d30db742a351c0fbd37723a9a007d1e715420f5b577d45d6e7014bd8bb9b115b14c1659ceb6c29e4419b2b127cd3ba61bf12cda19009841c21db53cfaaac52e4f3e15431c64845b98758341e60cfd80bd8d61a50bb5851639cc86cf505ec63154f42a523f74b568422b11d72fbf14708246a9621aaa5255287e9db6f47c40a710df93459d850948ce90cde2f799f6c4a27df21474cf3111904750daf99dbd320f68b83ad02e8991f46465de9774e6cef2ca557a50eba0a97891da70398e309705a0ac2c31bd53e120e7852481b8c83bd8b61e238f5a4f22ecc14288b165e220e44e0f1c06d3421cb32b6e855eea59908c203ba3063b5332b47c3fdc79575ba122d6834bf3f52f4e131d0a7ae0faa90d5fd251e087f003a503bf47a6cb2306f9ed13abe804f558ecfb5606f44bb9cd81e4ffd0e94a7cca5e82c1dbd94eaaa0997e314ea867570a4416f1ed66888df1cb597612bfd4ad0aa3304bc34cb50fbf419393112803497005224a8d3b5fd07ad515b4d09ff23c384a85a8ec8855d8921ec92282ae263b0b3b12263ad343df9f532e2bd7c1048a7915bd39d9ff88172899fe09a3dc6505645ac482e368c8d781a73c4df29e8e0af6b696e2a918d1ce0a6134043f8f5ef8b151c1d856b68f67fa8733715c6a7b1b44decbc45f5feb0922cf8dda125209faae65f887620c63b7aceda27d1c03f56d8e43cbbe3d0486ec6fde318f8a0ff8a7863a19ffb254190f8cda86724a553ef00990ee2aff00e525346f5a96241ac4c8ca4175b3260f3a01293e207f7d5fcfb76474f0aa8266238fc6f4f88c818357490fba72d20bc9baf003587bef4e97bb470d187127882cfe95005389a6cdd77181649ad869f83256604d2712507c353ed04d3c3130a46c88f00adf21cc5d4c9018d0d9a77d05242c9b9f0b0e67012a3017baa6bdff3691ef4bc367e303d9141169f271fc4098222ecdbe5b231fc60ba4c9c4a5e193c67dd7a87da089f75f121949996fa1f991bed10551706e072abb0bb7d4f02ae70156913924a71b95f6f6a188b6006421ab3781bd001219660ad1576cb6ae70ce5ee5968672bdfb5b04926d125e4655924445837d8d171813894e5bf608543e8f1d3853c40bf4dd3f6dbec614383101fed99f5a01ddfb063586fd7ed0b26f40fe54f8e023ecaab8279ac15ea8ed63046382f279d7dce47dd5b8d8e56d9c99c05f427dc326c0b9e5c14c826489e5b6218af154f833de7bed3758f57dca67d5629b05889899225d2883e4510db2db200d9c4effbdd64b7b2771159e5eb40228bb9e37bd2b6e34ee7610f08c6cead879dd0c61420937b117d3dce2c56159333d595b7c2d78f8c199535c9f2126d402251aa5115cce52b3d30e12610624b6e251e7c0e9cdd02bdf137f96c9e1dde78f94cc4f08e3ad092501006d03aa88c27dbbd235a6ac3e94f730f06f8c9d1ee3bb9e1f37ccef4391b7380ebb379d7033033d35a6661110537a0ffd434bef75f05f80ebf89f5f07515111a667df964cb5cab84a402541d3a36330818b4180831f9ce72cfe19c8ef8dedacfc96cd69344b7d5a8c84aacf9db0f224718b56543b2354b80be9f8d9dff9fcd06af2820923967fa59b4f2d7e2a2381fa80e0f46c63c2f8ed2181f64e9e99fcbd836ccca51afdce3df244da96aff7955b0643d29378982dd8a6b3b4568799f70b790e8b54976cc709fb2d21cbf4562d3723a9879efa245709249129e68a2e9778c0501a47dd10205f2b125dea9e4d54385624b481b25a61675bcb32b7bc9ef3b864ed43fb2e8d77f089de1c1978ce72f2eae37e0e4d49d0ba7790bae58d18680b4028c9d28932f73fc685eac7db735e9ac9238291482b9c089b78bae73cb37a93fb2ddbaa8072c37367259ce6f10b492fa87c6dfad183cac987ad0529df118dbcd8821f0e479612eaba49c8ffdd94666b2eb773e1432d929183667d44ba5f80aaa0dc37e0518db51a80b55ece22af2d77f868fcd0a506c20a67eefbdb36b70974b8548376b8cfa5f3c0f13496c3e7a05dd919b952a8bd3cab308e8f0cb29cc9207c37df990619b167951a62a41926e4057432dbecb766650d5fae9004a9ec88d11544bb0064ff07a5665f3faa59fbefb57e610115618960de323f5d3bbc534ccaa97850881003cdbc3d21bd308cbeb1dd1779a5581f63bbff6cd9b9c6f565027615e285797ee6dbdcaee6e733beeeb59f2c43656e8552a8074303d4165a214fa918fdc16efeeef9d950363db441764122c60343c93a31e11b634dab351e35fad2f2d01930bf1bd037d738022a93fd06f15d81b275f79ccdad1555047bfc6cfcfe862e19d181a95c0279ce83e080defe46ac71a3af4855ea4ddfcfb6344a53f3a2e4bfa29648757a1eb9e5c9c52c1f40c7fb2da5a025cecf2a06c023fccea567fe521d8d9978ffbdce122923d63504442a6535f8c86a4b19f5d8c49c27076a145cd9bb1f2f80958fc005666be5751545624d5398b0fad8d191cc89a05396fe37b142c003dc77a076eb0e9ee2002798720ce66336d138d17ce5d6678177c8ad6f52a357f50bcf22c5c071ebdf0b268c7cedd61bf57a2ec5d607dae30efcc619373909684cee288f236a68b77e23c1680ca5047f47912a4dcdd848886f1dd118ddd2c58295a05c81b2a500ce8dbcfce65a6704bfe6a1f9094ae7c074032017ad306dc550960c924d74cf50887deab5c6ea8eef44d99043b3d53142dc42d8adc722263f1d43d1d0e68a233c25b97f38b61b68b6ee715e4874d03e70226de0b6b49c3ecea5fb6210e64295721453538d187b3bbabf2d974d8f7f38abb129d0703b8ff4ed38fec434f3857ce49db3d359030d633b02f219c0cc751f7499904c74185012006adaac4131de844287bc2e7b46c80a4314c5a9f61b41806a2858ed8e665a50d296358c39f727466a82442f37fdd556ae07b615720c0e9e7f4a55241e4941ca346953fd2853b6e8014c9e9e1b78be4a568be8480118cf1fb559c6f0141a54cef4311b878b7b41733ff64be58fe136ab9821b0953a2abab81e1a51df19773bca4930e2d267b9fc9492d257028fb72536e0d61a9f2dc1f5283c27e668e07da533857c9e2130bcadf6b23dabab588abca7bbb35cfe4ee59b768da6e013a2c11c65d2de29532726082339347db743e70a0d7ab17c28d62715e07bc451106c5d6555aa4e2c359b5e057198712ba0a9ed149321f4bc4debde59414ac18240255641069b6367ab9b15349d4f09bc1f6d0a927c6a4607047d45d454c23a4599424c70d3427dea15b496889dd5599b1085ce83b1e99af2613e38a7bb46e879cd35dbde6643535bf2ea61876fb76d72d6755a82b1615370aed8ee6b99fcd36645a4dda77045556b16683be759685af4be6a62a38d156c296f3b6240ad8e34080b739a5674b6eb3ec97ae127a6dcb41f7392392726126716e9010c2115ee8bbf6d0dda79d7d2d2a4f7fc7f45c6382f476f6a45ccdc04d6a1de030a50c4bbf9b67e43d702c3b5226e421e9f35e374c5d909e158ee34870ae37d87359f4be9ff8895039e8d1a147e233edbe537f1393119584b7c5ea40e03af700df603e8e5f54cc09cbae0d97a150ec56719ea421dd292914b9cefe90fdf331ffa20a9f9a7831d1eb667cd035acd5e360f4c6faffad8da3da9b0554ac0b1a3874a69a6e35135cf284dbe95b03d716a08722a1b2643b2ee895d2e8ddea05b92a7da6020d482064206072d175f9fc2d4098e02baff4f0f29bc99ed2b6615cad1ceb265bf55778d623dcf4078fabd22062da3d1944b81f35f40f7c306264648d1bee689f51e8a4fb8f0ff6ba2d92e5d1d20e0ec91c515a13a1fd591dba6041ef77b07c9c363d4006b01f10b8a025d6bb9c5910e0dc2f111f5298705aff0aca5894310fc5c7b19722b78641a7c16cbf2e2b73e0faad6f6a7b0aac997dda79a008f011dccecdf3dd607bae52aa895c74bce32c98b5b70d0c9b241be7d3cb0a0cdbc88b19001ce5d5e17356781b4f7fa3530184f084f3163a2398ada27bd966b8c6e92e46203a06edc8a8adb28fc3f0d70c54a41e3c14cb53b3df28a4b2556fcdae169b12cdc2609516305d5a6743f19955e29684ed910f600e6562700f5db7b4594390067f075714d94665e9ee0b028152108df0bdccad92cb5b74c1cc77e58a662af6f0e56b673926fdf6defc2cc1b2c8fa0fb8e30c1b167e1cd33a512a70ac1e81334006e6481911341c33a2741e59d7ef69d467b982f3017636ed6973b3e1581218cb9013a447b02f62813496a388ffb5c8d477969c867406c1167df8100c7e393a2799c14194d68d6392673536a4c3bd81a15c757cdbb64a4605a8d8a97cd7cca863f1f508451b1a505464f8afb9b53e793a9977e01b22f5a1ebaf1b4779753e315ee145ffe1382155fe760241a9b57dea5ee50c8832b5a4a91f91624ff23b416e96526aaa5f1ae2134e17f269a8dc9ced28e920c2f0de0e048661a5b1a4606e47344b37450e02d782d4780fd188598f12892f9c166809a75f082a6bbe5dd58aa59198d00d2599d84bfc1bca31186ae50c118569049d278cc6e6369f54bcc7216411a89cc942364097f03264b79a366a5302eac2de0e3fb04bc82123709da482912d8ca3661be1e3b4222270b0c742005504d47a8ef873434e5e484b23e21630ea656aea2960d4dc2ab907cd896a60e698aca24c4fa2b8d48bdde92fd93704b043460046c25debfa12e4a7fb0112f0325799c6b37b86c5febcb72acb71b155aa7c5ab582505c446464e524e2bed3f5b209697a0e2a40a835fa017192127a93bee1a2b367721086c60b0d68a86005e037e6aa0732b204bde4ebc4877c6753f47e4a2fcc1386b1d60e8bb6d2bd29329db813ffddd9a4924d3ece011487747904848470988adde7db9a01f98cc811bd23f4d323e1fd2518020079df253d0dfbf2acf39db5ef08bc32795a80862d7ae0d9b2cc66155c76c492b5abbfbcfc517790d5c2830d88206582a5ff711817d85c7356aada9eca9ebed680afbe535ec50ee0290e7d0b3476bf8e046c187c164f3b2eefb15f38b646f9dd4c1042306a765fd0b1ae307d37d152673a88f042403aa9481d14a8f54576cb769434bb24090c913ffa39e0a6d5e0dda80518c479562ff55c313ce4275835057f05d0d21f9770c3b19c00dac08ef2122531888e9d8438e53e017ace408b070b74baca8869eb4225a97bb3ed958d2a0ae3500fdf4531a23d1997bb0fb7923b7bd139fdb3c5a00509c121e5da12c44d1829c1067a42dc3d7abea09b2142d0936457dc4637f8b5bbe31e27b5a919aebf4cdd77e843cd932e2e4d614268b4a0d37d39955dacfab19c605a2764fc758e08b73078da522578b554e7c17c8c83fc45a415987853ad991e2a139eb789fef1fe61cb7d95a99b72429aad52ba1f3abe267645276009f4b54546f04413d0dfe57c4a544bf18021417a8920c355eab53953eaf7ee65a5db3370f194520abd2fb99584156fdae8055dc892e55fd72adac4be9fd457455b66d8c8f371d9b3a46a86f42c061dc5b0541b858b8e31ecb57e761cd1ba01f9aaef345ba33cece53433bb3c8f835242ba834616d06c3b6d75969756624281eb6059fe3c60683ca211358c8d3c8f6399d720588490fc59e3c9178397c4e2cbb7facdb1666f7c6eae04cbb08edbf8b80b86263dc99fd7e0273269a40bb6c44c8fe59e95024799fba17a3720d378103a7a002d68c99eaabb23330b586f5c2a1331ecd5bf799ed55ef49e770d4070884a2f7f28bb7e4720d4ae2b49f747090d4f04a483b137ffe3b9f8339426f68ea39b03b4f71b27fd0e6184c0ba8a99e2c800cfd6a6ac818922c0f8b65aa175826fc317dad0b1e4f03602e1ea331a52e3d6fa3e69154d223b16ed8e95df075fcb6e7b11dfaa8d261a8b75cac765c81139480087d02c6e66ddf58dbc86d2b6072136d7169804500c0f64cec47e84f315e1ed4e15c44b01a7a97773fd9d916738ed06beb897de8e8658e199bf6c3dc3cd97bf767e79a7291b937f22e97cb95b314791e992c9eb325c32c8ebb0a81f5073cb783548755cadf758773fa6eed12fb869ddb4176dbd74c9a71a46c44a88a11bb7f23f279a6e2919ea6dc03325413ced8fff3aa66ef7ed61f64af0a73e2cc1252a7906a7ec29fc755df1d74e8d1ba63dff436cbf53d0f148683da034d88baf31b682c51b9ad5174c1b9603c7f756942ce763ecf557acae10200ded9059d9f2f337bed276055b28a20ae621797bbd57a992db8961e8ac8df332e434583b3fe3f9848a6093d58279348fbab0d6215485e6755cf11c6cff5fd928f30e67f9b908102f7fcf7cec99bee70233a6b3782d58d3cb4b553e73f62ce14a15c3c1e826ecaa61148d3511ba1084db588c10aa385b7b877ac572e0162226b64b11bc4ed455cb33819dde332ad2ea60d26b349fb964ca38d87ebe7d49ca94f1c1057c85cf35f9c6ef31094534a64e24f561ab9fbf706cc4164960c286bcbcac5d4e98d2d19475bd2c7774ae211a01f93de9fb664b5b301a8ebab9f62158138fdc32f3b2374f14ab136a3ba839f7f095942ff74789b7ae0dfdba0b2db177ed7d651ed3b363bc96108cb108921102e2b31a93b1d6452c253188f923431013a283577fa344dc500b3ff0f1740d1022ad282d5a11e86bed58683807c97486f258cac3f8ba08eda568aa3556335a146499bccf78f34d5721963a08f3d000e380d38247a5171cc67030b73b12fd16642fa01cf1e8097f1821ec9a6e0b88757b1df42808287419b862f25aef848c45daca1d03d0e082bca82a1967176045870f008aa64bd119bef934cc987747f608e2077dbe13b7fd8ad6924fb3a5a22b9f5a770883a4521c7184d2e0e0c25bea6ff8d0f74ffd2d6ce29272ce6339db953b3c96d02a5c1d0de81d881ea3bc703c5f12d0f72606104964397818d50376053d220e1e4009c0d3a996d43a20d85a7002c1ca91915101198bd5735e794221267611d59379d5203ba3da6f9b502deed70cc930669ba33141e8914c000e264696886134b63651c33bc30130f8eb92671229ba7cfca9255faa55164f667a1594999ef477366833429fdbb7f4070b6005ee6fc73f3538c4882694f5bac8e7e3d5a5e74f5711e348479e16fb4c00b4bc9083548fa381d4c220f38bb53d0b540fde9b746a7e5419580757c78e6ed40a83385a442ae3c425205213fcc9b62721b4b2749bec6d56993b23c597dd3db0de52b7a6dfa22a39cdfa8713211ff1b98b6d7cde8aa776ba27348a7dcd6218c28046cace6779f284b5d7f352b83537e484b00bb3bde41af46b105fff152a1400f0ccac7ab5a340428b89d4db15f0790de0a5866933abe5564ec7de4a0244991fdb05a2b8006ac4cea019f36e42e8f160c2c084aa8b71ca41f5de42aacbdf921c5be7be8fc4919c4bb7c56a8f8519e3fb08dda2f123c8b9dcc80949b9c7788b503ffb80ce41df866f8516bf8b2ea2722c1632ce0854c4d7af186e40e8e55962dac76a5977aa920de7327aa8fbdc29b31aa2118622e17d5112f1d0937432a9b9aa639afd5441957f76402df3fd0c47b3dd0163e7021ae659c12ca6b21bc018e7b026d1bb406fa75037741976b19ba2bfdd83262a7083341f1469b5e6390604efd157c9b64006cbee9a9f6d11d8f19e896375a8e75f40d6f3e447806119b95d4886d83228caa97359b04de5ad15793802d29eaf5379ca51aa51f5394f8226a34fcb729a61b7fda493146e6786f916e51e08f503ee0e25f76c0676380f0d3cebf4708fc7644c1928fe1b2aca6bfb0bf405b65de3b28f381e4d81d825dc0c661c01c58ebe274f2b36a3212e2ab4d4f7fb70f5877484fd83a1a563cc749916dcbce5890ef6314aca041c88ba1430d9c79bd7ac4362da9e0baa9499684d6b6f370622bdbb65ce879db96898e56de8afe112c75fda7ce797ef0e83cd113d8b663b00763028ccb2a66995e9e205919e46e9923ef2da929938102dcb538aacc1080ed2eb33e62abf2c4eb5e2a0b1cc67b47458a4ee9d20b5578076af8718f96fbcd42c4453c79a6e6818241fadb1bae032bdb9da1b32bfc3aa856edc5d6e13a8e4dec08d1d98fb03df2f711d269f3286ed394ff8ce902edb91435e0d093f01007e00fcf07bfb1868d5cc41b768f06fca5d56ad3c349d082d34923763de7478401152887482b80662ebfa9f6261d64fb4ee8d46a47cea5e5c5ece50320e8ec97793a53e0419756b500d85958cb9b6c93afbd8813a1eebda4fcbc5121a7e5928d0ddb707b4df22fa98f29ccef861398ab41b8e5082a5fd85f0c634cdc28598f4545df39294b3f3764babc6f0232db5c9f0aaf3646be36da3bc453d71ac40a11b87029b380af08dd38b5e8772d4c8a1611f81f5736a8a68aa9cab234b0f428cd8bdb6a5475582d2be6457dd70769092c3c4d7b1a6faa023ef7f8e4d06b8621c4750656abf5552a87c1bf8a1a4aa501b466254e7326e8c6555aaf39693495ff8f391f63ea14d9bfd36d047d72c027f2c611b10f7e3548ef8cc2603a5f21c5feee0ade5048b17235875bc53a50816754bd0340f0064d7ea128ae197e0ee1f2e826f9ec1109810adfb2cc9b60490b0876a67b4e3815d43fbb9d2dc753df9f228e1a0645e900acb66f45de210172890a936975820d8039f5e93f4bc8c3897b2b66e0e683e49e282f37c0b17b5f406b2a368730e26008f6355e9596c764f64e3596dc9b8a30f135db96e24a8e5919cc85803e380f35951404f987876a309829d00d0a56612e27d908b4a6d233ab7d0e84184ffcc4051a52ce45fe7730e480aa17fdbe146cb7c391b8272f41f7a031f96e6502c1ba42655d08f46d3883c6d2a6768a9927079fb8a2cde2346eae4d257a8a1088fbcf7596c9e4cdbb1ac3266885e0c17d4da268e3b22ea3905888ab84fc1d80b244539f1a8f0d3c68dc5481d611ff4f28cd64b961db2e7688f5b73e17a9ea187d019a9d1cafbc84286f65d0f3ac5c6ced68449e6d4e16fec6451c5e706ed6005ce47eaaf23da6bee3f0e85b9f1feb2c560c9a1cb150df69cb8f3d08c6cfe8d060899f1235b2ee95d31ddf2c1409fa2ec2fa67ee65d2df26580a344c133a2bb111252e825401c86a19722001fc800e41d37780828acc73a1375aac2bfc56d02a1b57c02cc01fef234472f397f81704e3e082abcbfa6c6fb106f9a3ff093dd603f086c2b80e987a6b45ed690e2f8640ac2eed2d0a46106b05c16058999bc0153bd64d84c2592e6ec714895a973f6346029414033a5ec2765c40d855a503f9594dbcb836f0f782ddac1138a3a18c1ec762a9708a0254efe4431b48cdca032c42687673731dd80db7da7b8fb08de5cfd0bedbce85a3e316ac65151741f14ca5d3750b7b3d3b3ec941364424d97bcbbda59432c9246545076d076d07eed4e7ec76da0dbbf1a8bbac3bce786473f49ccdd9ee6963a3208a7eec6677a516e76e77977d5dc6c002430861cced22cf095ff017f193ffcd77779f5f37a54bf78fbabbfbe7d58010e2762f62423084104e3b63467d4a39a54b4f3664b9d309e784744e3827d4c25d3a75af743a719f7376d09db8573a7dbcd2e9844ea7d387ce4aa713af743a711f1f77e25ee9f4f14aa7932c7a832b0869a0d6ddd229c417773790efc72bbdbec71871224e0c41ee586154cd3969751c9a0d14c9001ccaa6676f2f19715eb031e0f0102100fe9b17221ecd0d0d45744ca744707062763b9ac873333bef686e349922ff30d20517a95123f2d88fd25247459c488371b8a3121c196188474017fa69129126ea401afd5107421af26550f512102c4ee53b8a5fea134a7ea90183846c73fc1c32ece8d3fcf8341891e3df5079e0845c97c8f5a926536d027890e484cad3499e109e0e800025ac0442c210678169955160310692040653b022891d04f9011640db155260a1891318d1f30397ec4a2015b900d97b8234911d89a4a1a1a1b9514205d995c8fe36c32513cb6b33b22fd1823c82ec5f23069806e49041872afbefe8136422fbd340810a04657f0cf409cbfe19c8aec411b26bd9957092fd7df46906cd136afa24c3c648f68f4222cf91ec4e24e230f143f68f44f80e1345c8fef1489f2015d93faafa047774b0939d07d93fee4087ec1f95f409ae6ca61005b05304d31113c10bb6ea41043ab0524230000b9c22411820a4a3faa1a504100cb022478a20543b3b47e081015704e51d26371b102f1fe4e9ebba749040a2029c65b88384121b20d113041254602d24b4600112449949aa5f9c60c2091dc46f5142933dc31d2776f2f72fbe046c5c82f2a58635e5902e3920840fd31290300859f6cc4ae594db133866393a13824eb7a6bf9fb9bbbb7be6d7357777f71b0f8766edf96b1977b1cb56df7a7066c30524b613f9d18fbde4b0ee87fcd9129b73ce88531fa6e79c73625b0ff0c72201185353639f3ed474603fb18bdb80add4660e755bcf3a60737c538ed1658c5d8bc43410bfe5bb440bd0e05afca4e4f7f603fc79053cf61ca2ba0fe1e3f8d88a04ea5f3f837dacfbd16fffea7e20d9d16fff87fca22ac678d9ca792cca89aa0802d82613441ffc253bc6bd48177716980cd0205dfc2d97e3be7056baf8cf280305fe609107faf4997c441ad75153737dfd1aeced5f1d97f380dbeab5e731322aaf2c306129c8c1dddd8bb8aeebbaec13bc480e16974cdf1294bf7fb13f5c38e79c2f35e6ece67c88b144f5d349e98c10876e497361cb676346e196f6b08fd87d98a694524a695349ffd2c7e85fb652dbdc1605a52b37f4e953f1c00628c556a2fae9afa8401b6e71da9da07f3da3407b9409b18364da20c8346e1163ec9baf712e6907264aa3ada41de0ebfd8340e567d3690f94f4255703c7445f85297d687b7a249c144e1a7bb04ec7c6c2110a888230d2a845a6d18a18844ce943dfd11eb51cfd4a03dd7c80bf48e9d30f864f9f3ee893e9d33e457ffa1006b4319ffe4513a5e5b9b00523811b5b9100fdfe1964fffd19e467df7fefed951b2b3c3ac3bc121f7b18d3dc4afceb614cc6adc4dcb658953a6cb5b556d833b8d77ef633d0a79f753f90ecb8dd4afcfb6325762b3ab2bf9f753f7c2099e107fdec7f20d9413feb56e2cf0712f3c37ef6f777647f3ffebd3f3b1f188c8131f661cc8d9a4cf7e0e18098fd7bc86caf63255a6e256a72e376b4077f5624903dfd19b2f9f77facc4b74f3ffb19eed7eec7ececd39fa1fefcd7fcde8cab924a18733918036364062ab035815b16484bd7812db245b6c816d9225b648b6c912db245b6c816c5872d97077f5eb63c38727609964f866cab9d254f72e3219fd3f81119e19779b2c52245fe5a240bee4aff4a7d9831acdb767dfdf5304dff93f6d3916bc7a388c308638411422881f4f41ebc61f6ce1173d63972b13bab049652ca187470e3c3dcdd57a7bd588772fc89f507d2e001c7d8c187dd156285f5d825f89345f5672872b27583ebcf1503351cfe4bf027575a784c937680e7d38f346a3aeadf8d8579b42948761064b7feeefe96736769cf9f72d3fd371ffcc1a1fc9fdd409f3e161bfa144f51478d7c6c2d4ec44418ee0c81a6a80918ee0065403af80918ee00d5e4fe4c052b77770e86c01a1d13ce7c209356da7d25aae1c84c32b6c0f4617bd6b637bbac3d20b63d6d663ebda1f3ecffe25722b224a5ab22507b92e5d3de11b80912d4a43e4984489fbec892421a15573d59fe27877c9047b64b93e9dff35e5ebec8e2a173ce3929a6efd4622ba555d92b7e7e32dc21c24ffe4c3f3ad92451912732d9a28585504927083d19ee04611559d147f6b4d792c90a509f3ef983aaa9ad9fa1050449548c41d5d81510689e340a45c5a44f70470835b93fb2e894722581fa14a9c8fd72d52b198984cce953aa4fb2a64f387da272c84d118eab3ef1f409eefc0c2d20c72947b0454a295dca77e9b78656ffe272b81ea3f47a88713e80c45c22904077bde468f7d979cd4ec6559fe44fae79fa34bf27fae4f8d36a4f36517b32fde407fc99be6ec59eb8aa0f8556b266b649067d8a45c83093b8191b9e9e51cf903ec52c32cc989bb11972836f88e85314ca308fb8191b22724839407d8a586498376ec60628082588489fe21519668d9bb12182938293a44fd18a0c73c6cdd824d129e928e9530cca305f6ec646c9cac54aa84fb18a0c33c6cdd8080dbd188234609eb161d2a748840cf3c5cdd8b0320c8d47cc33362c4803e69821133228cadf2c923348ce21e937eeb3ce5a5dd2b4d7fdc4ae74daeb4f02a6dd1775644e0df0d743f2a6077fb148a232a12189ca7e660b35ea4ad22e3f1275c59a2fd6c8d6b401b44a90a0f21a470f17f68936ceb57dc2d6a2dcd66f0959da718840ba65eada3ec5f852e3bd5abb6fbeff857176b3b3300688e3d0dd42dd1d21b616356dfdeeee865842d143c9880b03a4d1859e1d3dba30e505694c1c305b48c37d4eef2774df0db685fdb31c2710ee67e9ee0d616b71d3ca72c02844b853600d0a95265e9670af2dda5dba4b6babbb7497ed03d3bf6081ac954e57c97027892664cd1652ac5aa0ca8114383b4811847429bde7a4b0096dcf8d81f6a494d1bd2d36c1873bdedd33a248414a395dbabfb40767b47c52ba944e6d85912e50ca39a3e5a56bf7abca775a650b8b108e6f290cfee1185d802fa5745a91707777ace4561e1c1fd3efebfe152cb998bf95977ce5cf5ed8a71b66eeb730b6ec763967d4cc7a73f59a19f77573df7440739fcc2d65e7ee43e755e9bca4112655a062747a74f7b087eee3fa347907572d355e7899e18de8acf5c2bc5620d7f7899dc554c2d65daeebaad8e5dd75612423346e420fc3deeb3b867d20d7f70eda3aa90b2d299deed5d238804e298227b4c6455a2d33eb2f2f642c926240e8625d489c478343efbad7ed3e0f4078f96031993ab8c230ce192f2fd478e8e2d190b1cf3407d44cf1d6d9eec2302eda2bdbcc5ef6c22e369a257c1b3ff43cd79bd18bc445e8321a594da6e6ed2fe662be5b06bd656f783402d239e906d9757da4117ad7fc805f344e20ba0bf247679f693253dbe2d792fb61a6c9441bda451b21edc5547628bd35ea910e6dc22f5194e0c67fa9e1b3448b5f0189ca400a92d06471850f8d504c1c821424d87c986418608042d9e79c514021cf2676a218c2b4440e0d144d703b501c21cb67e9d3ff00069049963f8042962c27bc541c2cc1081398700fa4b08326a46864d3430644ce260410d7879406031eb0944da6a3c3f5c3d05dc2fa3084f9c0099b9aeab9a2008207561182e08166c70752f86107d50e3ef4a052810f3fdcc8a007213dac1c603c14b5e98994b52513cb8b1bd36572c410121cd1029d236ad08323928826531234785989a5686a2f9ae28c3109bb24071fae14fe4a570f76c9c5c3c5c375dfe1d6b2b21ddc28dfaa03fe60900ced750fb434f8832c1df273f429feecb21a3bdb9e8c4cda9391157ba280e3b74aa8c2c9c5cc390062713d734d66fb0b3515d8441556d8c4f8c0a10e2949713860d6be6a330a21f2448bf438502a5431483810b3cab7d6d7cc224ee9573604ff1783646b3cb0c701f3b57130df1b3b766e4d4546e53be6db19ed7c888a237bc8f5a1e3401a54601833d424460de561fa5a087158913f62c5d4a118d2fb58911f853842958a8142b0620a3d313820b1bf229f1269c5d02439311fce17cb02e63a8330d5ea39c0dfb449f9faf3a64f285fe7d377f1b3e4822bb968751231393fd23c4aeadb205cbf53b753d8d52929b38fb60afc491a2dcb324de67ea6c9647f214ce318ccadeca08f1fd3ce476472c54e0e7e1cea12866290d807121333b78028c731fd474110a3ce5686f1df24ca75163d01513aa4c8750e21d72c72fd89e4bfc944ae1307b94e1be4fa7307386dfa7473fd2904da6817cc14cc207235d518b5d65a697d98aed3a64a2d20ea25aa749fc94180b7c8f521d45e9890aba4b14fe0d8d3e483ac1de8902ef53bd97d266d06fa920673b011f0d51411f0075bddb16fee4e665128d7c749602c7f9fe1bd1ca77de894cb20d7a79da2e29334ac692369644da3f05b8b65181733fd5490fa5e57906b77d306d2a86f99e0942c6a289fc2f940b223e5694a57739055a8420c92c63ad5a751ae9f4ac763a63b7f1c307bedd5f78fc1cd68affefcc1712806b557fff360744038b02efed4875c11dc434850e0bee9547bae835f7cfd8b5d7f43a3f0d7df409fb2afaf43a25e74d346bad477d14169b18b428ad065fe9522dde43a5bbc19b1e78cb153b97a8e8dc2e180f92a42ea6c3e067717e79af62251d3a69ab0ff6c9e3ac09daadf43fa34fafa4d24c2d05fb5975aa7daab3fe27a487b55eb3e9bb32692eb5b205c7fdac8db7d164359df716afdd6220085b2fd6879642bbfa6cb932b93c0f13f8701fba32e94aca1c6eea3f9ebfbc7bf5ccd50bb2010f3d5458ee6a7587e91d9f665880b5b3ed3c7dc36bac12c2f51f07548d415c30b996a38b05cbb8734e85b26d83b1f4876d8bfde07921dfef67d5c9d8f8a8325184113633b1f56bad0f7b8440e4d0c8c41d281993f165adafbf6e86f51c0fd2c7d6a18247352f609ec3f9fa55d647ca1013b684caca27f9309dfd6419202cb2e4707d3de16050cff83aba6c209218c085b20ac075729b2144659a2e788d50c321d3056a4c80aa6d00321787a90cab907362dde8c276e80b8d7bdfdea68bbdbdb9fcb90060eb95b59eb25b6704bcae8044465a52872472625a0f68ae476f7e720aa71a27ce73eefcbe2d792bd947524aab7fbbe56dbf540d7bc05101589e29322727fb437c05f479ce8b0b7ca0dd9e065f931a8bd51965d048a114ab97d386455142e18b3d1e32771f8af8ffcc1a4bf31289348230eff68347a12f745a23c7a38eae28b92d193b627ed585193498f474fda9ef4b7667595f5e417ffb56059d470cc8f99f497c47d1130e93f5366694ffe0af0e75d425e9a48f2ca24920e7e4f3d00772ea4f31b9526b8861b626e826bc07f43cca4574102fe3cccb512ae75da9348c0dd726edded91bacf86489449ff7d2275df9eca73a80a531d686334e262a647d0d15f6c7447a36dfbd1b65d2ac0a4ff5cc77388720ada8030636f53570ab0e3b427df7594f489f4f27d056d6c2fffee901e937efb7b1f73f4459b21fdd66d2e9ef4518b00e95d5cccbd702fb4275d745e7bf431d7819871b7a33de944da93f123a4e63a9086fc8b08fe5aa51344946126fdc5b218351992cc9c23bdc67d9db57722fddbc3f48b776e7ba8911ea69d880be913cca5ab922ef2efe8e5371018bb0e0b2c984c18a7a08bfceae2257e59eab88bfda3e6a2b3c1cb38df51e67d223d894422919e8328d7812ef2494f8a21fd9531b694731b3de662cee48fb84ed29efc9195d7933c0948facf974879fba4cea6242aa5939d0c01c65d0da4c73f92a4c724eec6087776c4c12cbbcd1c66533d3c57d7e9313b9fb1e36a3590917421d476659f10616c1995706b90409c6574efe4c7517c37411ad663126e86329d634b8b0669e0689b1d47a75d191bca0d768c4410aac2c72f0c05f883ab8769408efbee6fb31af2457ad9fd62dcc6797b539b9172f6669cb767b1eba2dde740727b758576387fa51ce5123778dcb87123422b514876743e907c45fa67884ab0010f68fafb070e1d0e7389218cc4c88ea63b1c64bc809412626b51d4be95d259bc7329256c913ff16fb09a49e9000b2515c3300cc32e2edd8744fda45b2c685969036d408b311c9f6b7dece7df4c9399138031d7df58e4faca15b937cbe2e9c6783527c309866199c52c8661d85f8b59ac5e4ca85dfa47ba5c2cbb1986610fd3d9c55c50a4e6c3b5c3a5835d7209b155ece0c216e0071d629411c935611d2fb91fbee4f89dc527eef51b2d16b831eb19324a01e3d070fcccd81b8e1832bc71218dbddd780143f72dca282e11d825b60abbc42eb1555c422e2157cd25e412c155133b06517385a0b5e8337a6619e30f2a593cc950890c77b2d0c9376a38688edf9c0c2778ae20f798993e8134ba9b3eb123c0df4633379a3ec51b33c78f3fee2fffcb70369a1804d322498b6891cb0e4a26d82ae02fcbfae42581832496dc0bdbc32e8b5db6b978efbdf1c61b6fccb218b3786f37c39322fbce3e07b8fee7c1ee8e306b82e5d7bf90c09ff7f13d89b2d6629be95fdbb623c4482ded5d2fd046f6f46fc623b60c90e9bbf680feecafcff4675dcdeebddcccb5f2881d883976182703675d6509b56ba173090ded41a07cfd25674366cafa61a4e4a08c96e57b88ab04a3f855c8a08626a60019fe17e0e98550c2bcd9e992092c8864ba592c9bd483bf2dc36f850cb717212004b164b803049e3c454d863b44e849c97007082d558e9255fe0c5749d4206baadc4264275dcaebd2a59cfe73d659679da52844c621f3c8cd24929b883c6fdaeb160b2c14adb0428f0c193f2c2caa95151d1595a11831724ca6201830582f5e0459b970a12a957e52525a28283d24d20dc639a351d0b6e1689a4e96adee1d823660c61ee6191b16b401f3f5306f43e0cfeaf8734decca32b12c2a447fda6b0a944ba6773b27a63fee348832c18ab027d810d60423c286b02649e0ef0ec18fb6be1b1424747f80220c58939b036d9874746c4ecb23b9adc5d8f4de4ba44974daeb6f31657f539eb3c392f08898122810b5a0d01a72c29c42d29f643417507705b5e7c43dd77ab1dabb7ceecd6e184d91e5cb01333301cb975f69b2ff6de5a629b24f6e72669309a1df0297430b4f80395b784880169ed2f92db4d0420b2fb9d9827b0b2db86743329bf632211609fcd1564ea6ad3e7d9745d4a78f1ec9fdf2863229fab01e9f211963d2278cd5a7ef0ef9441884f4a907da803f9e5b67c50acaad211974f9604732a6b24fae9e9bef0eedfce4641a19ee4c5194e76cb5f864eebf3bd4f2274abdb7df03f8cf2480ff70005a7f2f9b246097d7d13dddf1d32fc000f86b5bd2e56bb4e7ff5f3519972e068fc3a596440da0fb4c02e85a5d005ab9bf8593e104d3b7dfd29203b66476e586771d03a50b8c0400f7c155c77d574deee7b81e9e9ffb6c13cb240bc96e3313a4499f22518699056e264893d61443f9bb433b5304a1e27d32849bfcd92128695464925b447d8a4ec830afc0cd04212aea229e3ec526649865703341787a648f4f9f221332cc2cdc4c109f1fff39d2a7d8ca30af7033418ea8a62a499fe21232cc2adc4c90243a5447a84f510919e618dc4c10a1a13a44449f621232cc266e260811393607a84fb14986190637130428e80a62d2a788840cf30b6e26081316c60aa2a44ff108196617dc4c1025415637c8ea489fa21619e6123763734495a97cfa148732cc29dc8c8dcf8ff6d3a44fd1081966146ec6a6496b6bf104488a28a288228e1c3972e4c89123478e1c3972a488228a28e2060b9b8cf3cdbabb1e6eaf2218b6a7434aef0efa5cff2b80ec28f786a125bae0ffcd6ed8d227fab33fe6e624f4688b53da929bbb628065ce470ee678448b392fc0d1a62927c3099e4fbf7bf69cb355d3c89d7fa1500d1310f6c161624b98e56bb93a38d265e2d34d4997ce9ec9b4719167f526e993567b6137d3b61126a1acf22db97801c31443658545c60a2c3cd765d97fbe2dd90694e7b7f8b437bfd3645a2da256006e0032cac97c53d6ae6ea502feb2562b236a54fdf9770019e53c93b82f6b65445cd692383795b55aadb8a202feb016d6c2885ad086cc1325aee26adbb62dc66fdbb66ddc6fdbb66d307edbb66d63f96ddbb62dfb6ddbb64de5b76ddbb66ddbb6cdf4dbb66d9bffb66ddbf6e2b76ddbb66ddbb68f495cfcb66ddbb66ddb564af98dfeb66ddbb66d1afe6d236d5fd264b66d658518cf828c182e8c70cfc20a3256626c294660acc480b1a11861598901632319c962c0d8326c4425068c2d1b1981b16577336282b1655733e25b763d33f262cbae5f2331bb1e31232eb2ebf132925d2fa55cd9bd7465873ae5b65ec315a8bd799b34a2d848c3b8a64fda4f9b9c5d94213779aea00d8903a75192c5ca61a95ebc7cf9a451d24ef9b2a84f2bbc7cf9d3287719e472c8a54f9f4a2f5f266994bb54e292c725932c5faafa14e3e5cb54a3dcde609c7c4279f9dd84a8f5a4256b86fa04a3a751339562a57e523c7dba2fbf8968d4b447721225597ee3f4c945a3a6b5c1f2e3933e01356a5aa1dc6ad2224a79f951a751d4ae704fa6964826e24896f425f6261b1c6972a3284bbacc37097d32348ab66ce8530f3cea713dae917a31b1e0d297a16aea5ba44abacc1ed9cb178026235759b6242ac32b9f9228acd54ab552ad549e188ba562a95813c31c73ccbd255198b5de4a49d4d56aa55aa9d675cd6b5e73b224eabae635af395b12755df39ad7b4ad56aa956aa5541265592c154bc552b124caaa542c154bc5cad3a6a4cb7c6b53f36b4aa26a4bbaccb716e3562acf7fc1451e954455968c9fb3aa5855a562f9cf84ed7c395a216bc96059e93e93a9fb30ee02b0955aa617ad52ab458bc132bd60955800c85030d58b12a642c154f3bb0b034bbd286129142c85a5f27c0ebbad124aebb6642bcfffcb05ab84c2ba2c399f051b55a64b65e7af5053ae14cabd52f24acd974169abd59af98b3cac186462759695e7afe460cf9f5c59d5b52a6955d4aaf06885e8499e44eda56e4ada14b5a9cb55e836843bd79644612ddb226d314aedcd0da85de66f4279c274654914d6b2b8b2f206c403079adc1dd69a4158cb84b530d6caf34d5a5cb537ff2a82fd31cca74fd8fcac2521bc1ea6b3ce240e66b9ead3b7b164cfec2c79286762613f7f03ead3fdf96d2e378523e79b4c18e3e469b1e9626ec455e8f56f5c8f986fb0b95db8336585e3733652d90267dff7592a4cc01ff6d75f4fbb1eee4300ba5591e77f2f99ba64fa1c446d2c4a23849700b26b24c0dce86b9c8d903c9f729187a54d37ae567165a170537366ad3ce9160544d99f1b15797ee46994ed6a079b499eacf6e6f7f06c4380e54fac8a61838a524a29a594524a29a536a0f429a594524a29a594524a99e0a6f65c47ee8f52daf092e1c796a13d6b313699decbd146ef0ee506587ecb90d90ff2d488e1e5056fc67f2ca51ceda11881539e04fab789258a4f32ac1192e1a908b6d92b8a62d6df296823663e58130c9169d72366235fcb8c79b5c4c89594eb95ebc76ee5fa16e8c119f0e45fff059eecd7a87d7bb1b5eb997495d8a7daa34f9dda10e0da15917f41148cfde1700cbfa1ff9172e7744ad617da853e8c44754abad03799308c91656ce993fd0a6d263519ebb27b21d5b7fed65311861fa08dfaf41b0878ca9e7e0b0151dad3118caf5315bad8cf38093d6bff72f631ce7eed5c6bb00e497d153aa5e5643891f269ad37feea5cb666b6e4c22b8630ccf6b6b438296bcffe37a04910431b0db35be7b2bb645780cdc7cc68796f17efee9632116ab3237d78be3f76ec514af944500dd10aa0a6699aa6699aa6699ae622e51f638c354dd3344dd3344dd3344dd3344dd3344dd3344dd334adf49af6a55249d3fedeac3519cdb314eeebbcbde310d12cd43e8573d17d316f9f524a29a57cd44a2958d3344dd3344d4b49d1344dd3344dd31e6a9aa6695f35194dd35048afa19034ad6a339af6303d1f73fe236edaf6b41f7150bbe11d6c0f4672306b9ccce436f9020558e8c09714420a299554aa2801f747f9f4bb5bfee4788c24572330dfe77b9e1dc88e8023507b30c2ee39b7165c6849105fc6b7a227b764b863051179488619ea7c963f3599197daa5fbb18f451089e4f236bc66a6d700d37c49c99a876a3338434a64a16f8b3de3c6013cb67d97db86b987f43cc157bfbf2bd17a08dab06ec2b02b21cc54cb508d4a79d515a1fa6aff91d8879f6bc50ce95fece315725388ff5c93106e812219c027f70f53954601ad0279f9a0cb576769c8c8c2db0ff0b95e1c47d46b91afac9f4e5b72af7dfe883d8d334402d5e149d39a8842c99aa82d4291a0106800002d315000030100c064422814096c7a922fa0114800c799a42725c1d49a3590ec528ca1963102186004080000000111a9a51003875e8b5b2974b7b89aad7caa94fe08db58213cb46cfc7ded1e1636de8b9d857f45c6c1d3798da8bd15eae562f8561dc1ac203a5ac6cd52632a0caa91f725cbe89c4ec7744e94b9181b89dcf3121fcacdc56d09830fc4f190fcbaddc8ed2f9e9b4cd009e49ea545ab955ff0fb91889b37c9241d725cac10d0c4be9354438779d041e52002c824a42718eb331150059d20175e5a70f22d18118d36670a4f035ab2056f5b1cf604e6d3aa16875fd2c2840868bf74419770abd730b7e70fcea5f6e217a44a4170d1b751ce76c3006be87d6d47eddf4528c88579a0ed4eed84265b24f89117a0c1a89d3c76360e6678813ae4e7caf3d3916889011f5a60a05df64607d21c83b29c31a5869529c9838e0685b0831df40c630a083d64e788afbde61f0713c18939e07f75c48c661fd3e749700579375511680b3b928c0c0bb7c15935a6b76a603c569739eb8072675ca71037782a6a873808c7a91afd7210ab6f7c25d7557d2d28600fa6fa2007703eee346ec0abffcc68191012032e897ef06898a680c74f545dca4cd1595baddfd2042627f3912e5f5fe4f1067f064b1077acb2da7dd3165e100fb2e3d9ea88faa11a038f4f017dda67eee82f807d3487367a6c00723f8386e2a8bae4544deb21fcce77169068f9771f97712e12d166dc38cc76a97488fa15026d2404f8f620dd2e467ee147c58444e66279648de65e55d2cbec7daf758793feb77b35cefd52cac9598215747a64c58790feb77b2fc3eebde63f51dcec2f4dd6b3856480d4170e1ef39d0c9433c1c0b19ae3122560ce047a19bdf69dcb1f252045c2699f83d8f151a38447173cd2575295b63283a4c63d7ac857a1ca08aae320191584f190f8a962935cadc2ce6638f80c2abf8f9e6d87197b125549d05f288fdb8c285ac325592b3cecf12f81182871ce3d0d0eab2386ae48a5c21b37c2c5ffb1ee6b489802ecd60984d5f4092d91079aa256fccbe57215c43d6f75a142430cf47892036302c84a8b2ec14a48a383b180c62a9986c0b528d1813004e441420f785a7468894991715c7efe9d36b5161dc14821a2164307c882822b5e13c8bc8293ab98c5ba75bb88660f50a8588463e654e9111af822ce1bfd8a28a04709c53a4c092f339a576032462b917b6349668ffb8fdbf872ce18c2ec77db9b9dc6328e17a2be74eb63961507c9933e8d75949ddabf2245c6d98e9bec92168ead225edcd3888f16ab99075f6715fbf937053e492bcb56152fb9653d0a9a34abcaf734ad87ab0d0bfcc3168ebd624e5e141f2abdcd12bbd21a8e554ab788fcc0f05ba6c3df8bcafbee03e893c90db80362520e8310190e0b015de98a2a1f17e6f54becefa4e4ce96e79b24b4bbb4cc4952b773ed36a90a458610d60969752135a86fea6947aff89af25892a273e0def14ee419cb9a9ab236d50d93b42523040b69a41f4460c8e88d80d648207934f9e23e2fe0a7fa6b2f02e42ca19a076adaa0d79261dbc86068bb036797921c58bb89599aa1d4039d930a421f6d9a4bc2021330c61c0fb0c2aed42e4bb680d5dcc0aea3e211d929941b099517f32a07271697d76fb07b72c838acb29810f22cd2ab3045c7d496640d1a3b0586741b75905d5a3b7496f1751ef22404d952e02f72cc14fc1e2d8d16807e78221d56d1f91254820e2a90c1213030529c298b76cace6150820c54081c0d0015a8774374151af1b8446f016627082b249b220dce6319f4c896a93fc0acdea7c438cd1cd47ba4a8486847517948422a8870971f2031402812d2042b019cda08d58f137c44ec21de9d8b48fd6d60409efd82c9a2a043202a369264f567ae2d44d0874798e7ae903408f30c5b3492da78ce00b0eae68b0bcc67da377889dd128c625547f60ecab455a24c30044afbc0ce50094c085038ab63a3d0677b5c52e32e392c635346fa5c712e4afbafb4cc1ade4a0141892d9650bebc2428d2a4773b1d7713797e866ac4a353eaa9c17fd54cf2d7f61d8cc85e3c00116972d7829844138073b7c39873958470be472622a9d9b26427d1ac89ced710ad5a2b495eca08be572b7c7ed2445a6f2fabcde2a92e27fc1f9a6219e8a28537af6ef23407876a5bbb93449e833e8f63e2ca4edb565591c0c1e0a0e8505a4b981648510e8eb9f4e471b58c089a84adf2ebc34108697747de3e696dcf7268d1ef5852164884312193af5fc413ddba42bb7d2a59054ec50122470260e703645a4f366ecef40ab6087ccc12a22863c9310824d715523ae57766572c5f5758475336724b9496127301a4515e01c8390b3c50480a048db635b21d6085dae4baaa93a762a511202681128183fea6b1634e589cf3c32a04f22e6da3d88685422cef206d70cf631df2b1d7a926992eb1d6c0436a38a5eb84f6005733584f9c380bf6476e4dc390ab45275c1847452932742c5ba4a08f58676201f04033ad695737d935a1093b012ab1745f5cba4037def88e52ba82b0ab15901bd9ad40ebd2caf64c09d275e953aaa35164e31cdca18cd29fdac35be5246a843b0b837296a95d2b10e04e51ea4bc6cec1657f05e4064f5d14b014b28a89fa5d478f16aebac00ea736b108d08e6941a5f5d3800dd0ab79e3c3277472170012963ce51115e8c63f4993e6e6dc90c9625735a9b4ff0a5f182a2e36b4c9ca42bbba0b5ea7ae2cf3757f53c8ccdd7b1d473aeed93f73a825c794d3bb1a7848a50ef38e2421bb1e7a9c117580e7ce16b0f1a2c0c680fc088456395faa3acb399f9ac3ac15521602a8373d9d820e903536acf2c31cd1121471d35494fce596cbba005becdace5aeec793f2b0b3c7aac556f89505c2b44986ae78eb41b3b8558c8901a44916fd3a9859d25c67648032abffb15379a3bbc5adab3804e0c90d004c4e54d07b90cdabc8253b95c769254f86054d01160b141316ff0709ece641ff18905c70d7d21640b12bc2032666cc588cab191c8bc37a4df83a2f8d734c2cc2ee51d1df8544a08f72028e1e6f93560c90f69c0a08c7db49266a5f431f6722510da77125141fd9b9a41ff7851173e8c7ec3766d7a8f203fa0bed45ef4e14f39c7c3ad93c71ec5a666376058fafb52a62d3a5738f2b84b0ed525b5137752430f18cd2695299300e1dc90c6cc5b6fb9a556ad6ce1859d1d44bddb6c0b0fbd4b217da8c000db9e6f9b65c7690346f66cc10221e4083758b00cbbcc915710bc0e1a2fe3984717279fd2dbf85900cdc6ac06ac8057fdca00ac44ef86a2bd5bfe2f53a251f7b6ba0bbe27a6c55fabbc306516f595fb754015907f37dbbbd28ade57f71c6be54a26a59b360b66adda8490e3a8af70f06b71a914c1cc6ec43b3d838bb40995f41ec44d42876fc42bed1e13f9df11f786b6f88f7e870b3ae356729ea7aa6c656c9f8e498a82b62d05567db27e5a20b39e740a0e55a019e793cab698be2dcf72e7cc105c0b22d907033df67a46c46981fc0ccba3d6cb7d16ce470b24d96b083c6d12ec72504ea205b22d825fbc082a5e4c14f277501f6ed91467c1b2d4662d91ffdcc82ebb2b994ae061f04c0c5e335381369822ce6070b265cda044ad1aa425a6d8d2559135593cbb2acf1a0d4284688e6293c34135fb0a12539b8d23d111cf0eefc7840eb8f5d47deb8bf7fb00f82958345fd89e203f907420b5924b92a21fd7ea7f4b8971b7bd853bf10e1dda2d06c4ff979617c17431c84a072391221de90b82563ae28557562148a2544370100e0f17635dd980b36f6e7f64c7f9770328488afe0e4f297fd3bd3aaa93a88039913c1e375ed6749d6ef3a5e72f1ebf2f16130e9160ed60265830f2b2cbde5b02b6ce628ca0cb262785205c2f00a242f3b517ef9caba4ac75673d10d6d94baa640c9fc69d6975d4f1c5efdc7b37afbff91bedbe1d6da5c49a1d5713e252a65ff867847b02bf0d80b1b495e783cf7a3ae0e0a1e736e0493602663ae257ed24340f03a5854b1be4a3c2033a9c891a56f1a3e4cf1ad5e3f4e7335f1732cc1ad20307208538bcb8f5e223488f4d20030065ca79bdb2f8db7bd6c0d523c282f34ed61bc14268d3cd74a0487836560a4b70d34f8c03ee9a5d7c656ec76dace14e6bb3a5f10830863cda5cf6bc84df634b0a544a1ab92d86a577ee4f1ee7ac7b2dfe4bcb2f99731e595a420ceeb66e7f1c21709610af928b2c8ed957d9d3e82b8867fb98cd985d5a7c4d0a6b688897c6397aa5f3d2a348836eb12211d77d755f43fb2cca819d5983d03d83fd6d5ad54c3724fc0fb896ad3c48e0d6088457d837a3d10d50b3f243849bc807575da6747e8b8d0e53f7b51904fe79e364efce4336a8e23317bb07d94f4e651419db5e8db2c3e46c6a698cd9af97430756abc43d0d55e734015fd2c8717df232db19821010019cba4a1f2c4d2d7b72c5c05bc5482b0f427cccc902deb475d1605be639ff9c629cae0afdfa8d4cfedbd4d2fd7e076d4549ea2ff67f64d617a8232e36d6a9bfca18ccc8fa0a7b05a0bada8931cebd16361cbcd626131df56c02ff6c23277b2140cc2981da1d7eb87ac0a9693e8de4f414cce08b88d4af5428d649df1ab71543a1cd5c58bc4a0c0e1e15c6ae0eb49676301ca965c872a5f49051e2170a71008aef87a977bce10697e35ba55397b6bedff7c2bbf1756d5e72f82dd79ac96651fc2e20c02ce8bc36fd7da6853141755a88469d9de9f9abc0a66b237722cb1af929d756b1c91d19aa19efd49df1b590415548aaee022257651fbd080c21d59b9943b57979d6c471832da50d708463882495c19ef7160f8272ec8f9f32f9e9a55c08f9ce88d5f00e923b3d945b7d2de91f042620c11a14e16861a50c733111b2be5bd67425a7efe46bdf8751ea16a0bbab0604f73c0206375c00549981c74b46de4d23a87ca16925ae9beccd84c35d60721e5490949d2c1e3c845c8616dbe029290bdabc13be3ec12257f21b7f18ab4d52ed69b402259db5b02bb1ac6fd982c5fc25f7a724a5f16d52f4438d5f004c573a6472146e77ee02ca3b129db922dcd0f458bcb91d9c9d6920ed79bce2dee71ae997381c6d2de70e5c9bf727c402d236c8fa61b4d92350017fb09e11d6e92086ced57cd7aebb6f492845c60b8a32734d65e140643511a754c8c1b15fa1a80f429b5081546cdbed54fdec2c5aafed643b744b0998dd87f8519b2f7b10ae3573100454fbadc8a4fbb7ed95c28340e01e60147a9719a65477878ca1241deee04f77916a83b52370305ce4b3876290268211b57a01a005595deaaeda07e2193c9beda4c280adccd224a407dd0211d253e8001a973fa4f6228d9fc0559d4231dc8af50ef01ed4b273c04b374f0b0fc7923684f740534b9735b06558039db9b83d7b7ce463a2826b3a79c98412fa8e000940f5f95351c01de81ab25a263378ee93271c350b90a0bf5d52db93ba78e0e21c64f5780a052e01485021c115f4abf86702b6cb15a1d0213da3b2bcfb019776ab1b01eb32d3837002c873e28d10e26ccaaac26369899f0a80c21da782fa452c12203c1af3a63d9f3100bad2949fd361c69ea5784c351b63029cd0f5f2369d49710719b9e2ec0206efd580020b63368000c093cd4e1307426d69262d84ca2e5e2a20b4d9009f9a695f3fe76125cda0b2a61d8b7fdd8083a98443f3e63272fa4a4b9a953cfdb7717cdc5713f4f172837b79b8b479087550222a05b255c856c94ef1b1a05ca62578b9cf7f083e8ec8fb9a3696228f2da4f624dbc55449675e7cdb4c43cc6f4ec8515d14a44a58a3ab03b87a04ede05de15abb1cfb9d409a130fb0ca321dd67954a8f89e08eb3efe418552f9bbb50147fdfd76efcff9e10b069298747bc1bfcd74462b69a3007ae92489cb6fc97482e8332a37e0631ea007d2f958b4865a6b66438c834aec9bede07de13cdcb1a14e72f67c6a3e497ff6f08d2b8e493412edd15083e6dbde28cb7bc86acc8ffd6700f948b7cef31bdcab0045bcf6f38d0ab826c0d906ce7acd450a69af131d064afbc6ef56d4e64d99f861ecb946492a57ba93a75688b3c020af5d81a2490976197831221843e416998235e2a723b327db8534bc659ffda1c3c7b786da4e25406891bf905c317f6cb6a47f06564b9beaa1b1b474203f54d7938b96dd67b641484444f13981d1cf003e890e2a4028c2f5b1f34f5307c064de18020baa5fdacc5aac3a4ac36e3d4a468b725c79443d9f94b777574523af3f0f9fc8e3719863cec627044f95a401c858bd9187d4499b79930c0b684e8c8d18a043b43a6be97719de5d4f81f314984e74eb78872d0b4a9cd03de5aa77faadde10111f43873afc026d31ab54aa0e20beb16c28c91bdac953134f94878ed737b00799816da71f05130ce285e9f258cfe58ab05d5c9d91126954244deb3c5d0ae3c8bc61057afd97fca7e4fd08b0c407577215e1d88e3ea5accae7933bf100fd711a9e37879cd8ce180583aab93f26e10af65fcf1d8cdb716682138aca457d78c4be525a891702dfb0113b95476963d9ea1445e859f5e02e0b5b3d3dbba0498176dd401755d40b0156017914239d6af6c7d05e4b2250bfb7fef593b9b8d69179c0ad3f7111ec0dea9bece9f2148862166ce702f9334118f7c4583d34fee60e26c08f1f01aed7dc21d56b74dbe906afcd81bbaf08ee00221a93fe23df212a018d18d78c2582ed376d5099e4b7a80824563ca18b723d520288dd7470c9222a8535530cdc7294e6818344b950086ef8c3a7208ebc53dd88c04d7bd8d9b47c0c6923b95a5775a59f55fcfcd39d9fe3ec2a30a0e3a64e610c935f2aa03a051f6a51b2db6b32cfa74ba2d48c002774ab977c6928fc930388094a96a6b10092149e95b6672ff3d9396331e9d6cf6f91809422f2be931a31eb13172a60dd2409aa4c6cc9786bc8bbf33d38892907ad4d69305b957087629e7e811a589132ed99220a2c912cdab8dc58a61e93e4400bb43e062625734f44007293cefcd87133d2219c944d295b888a646a19d27a1a8fe6b0fe98fa2c28e04060c3c2a460b0d7d0e4cca8b56eefb7841b4dc57c828c52d827c29f710ec0f0b00af78bc5c9db54f0deaf2dafbed2750e5433f36348feb8cadb1730613e1b7c0eca577e39b4869c7fc00e141f3acd97f12ff4e1765ff8966fbc04ac2d33a34d994057b17005ef1d9fc6e51637e623feef253c37a1112bcf105653e766e14660168b70356e2ccca2b10b644ce66771b4ea09eec5f1f96f09a20d08bcb4cd27abd7b442a933a0c2c2177621e6dc1f3c52552d5aa54d8add2b2902618571e023779df1d22ffa81026c9e6c70eb6298ae13703f81339d4e188ae2e71a85e7577aea2ab8be3f8fecbcb74e1425ca8cfce472d9a465bcacbe9ce2604a048a831af1740fa9dc7129cea8704b5a7f10ada12b9d9214ab0459a7e1caad30611644c16ed9a901c81682f1ebb92caa09f56bc75b1233b05cb0628ce97645bbc82587f161724816bb0940c19d83d497a8ff0b77921343e430034f07c2b223b60777a5d86bbe82924d5803afecebdb451e2307499990772f37f099d4e977a2324d0f04eab584c051fd8d07d2f04c9ce55218529a6f6bf04a187c2b8fa984217d6fdb7a56dea41919613ce43d7afd499c78349772fc00174be9ec7bbdcde6dd27d57a218a719dedfc892cc5745742e20de7a8d7397c6cc13c739cd6b11e360956178329527d9c70379b81056eb85180f5e8afc7922c70c929d55b051010732309a808325cf2a3b696ad3eced396cd5dc8a9764be5db58e71c0408c3d492aa31447e0e76eaf1bc2b49b0e1e080a89074d6ab915898c03cd65f6ab2a78c38b30fcae9ad15ed27a070716e5c13404d92a41c6cf956e42c8d20c39e30b221da15259a6081a28b9faa71dbfbf1803bef12c4256fae6a5c3c3f28520b34887da1e1648e8a6fa0cb54273760c09d8a2cc234966f760c1ecf002a95e7f290b5995ed99802f3a6a2a6bf64cf546b876eb191693a0bacea08344435ce13d516b9002386080b239230e385ffe36c7afe470086d92418618205b6681f65e71e61a76c4f83b289ee98656f5fc903d914dd686c16242d49498fd679a803fc88e0cb4ed0a8e54f86a9d9b25c1be26f4d6cf15ea8b253c5d9cf6b0e3b75c437e3943b1cc484ab72d37763cd724aa7ab84a3403d6e80c47d87b9715df80a488b68588c6ae01c0f9ba5578e441c192914eb6c1989a2c14699ce0de770142be3d5b1eb6e9399b1ba35782250162fb7abc3531e850104d9c94fef3253cf35b364813ab248b090b1b62220af5b18e3fc945f89cd482bc1e133b18fc4aed842c0a69489c919320cd70949d2d1b5e1e7f901fe65303e4bc7aa7fce219a8ec318931132a0059b1c6db649a5367bfa3a1a42c21d5064b5e18630de7f56b331783d74fe774252a6ed1daa18339563e114e8235e044b01b778072d3ff1b0773cdf18c122d39ffd515d572e998581935b320a0f059a89c57cac9226311cf949c8daf9825e58b941abdae3e28dfc958ded8d786769e64047971582d73fec64f6d31e294eccddabd3eac505deebac6de650919c67bfeea4f73f4a255722bcb529c795648413ffeac1f676850a70e07b2f4a230f729775ca7b6aeaf7686903f2886ab9f79b21c87d581b2416b1054e43d34c2e46c992a221ac71d3938343f6f65b316bd14bd2258cd14a7abdb01fadb6cf647a1dda352e13274a28f90c9c58c8102514b0bbdf8bd7abe6cd328a1f0f1f4eff2f06d87f79db7e939963e3bad19b6cda314ebb833264f2eed3443429ccd19854ae11849aacd1e94d3f853bea4fdc26a5ce67db4d3a961555071fe67acb462428f2492448d0923b47a6e860b06338cadd10373754e0de18bb016f33dd8bd788b54a1f1b6de8fb82db350680a954234a0d51bb8817ad28ea53d294b444f3e44d6e9d65a1153949225c5918505d3e3c427368631383243ddeb958cd87f679c280ab747c51359951685cc6571dd35dacb09ec46ab5cfd02a0d291df8e92f9d48b8039f769331fb8bab898766374218a458e329ac5181e5aaab9ea478064393e297bc48da25208f1735a4544ad31bb6507f98c7aae00106575be7865747d0f3ce8ed9a95cb27db298f66c7e0721a9566beb48026a90b4a4588e83bb50839c62bf88f5bba0329b7b6fc30b70a0159f4fd585f170e07ba4cbeaee74f2b8bcb531339bed6bcab3e599b955b907fcf2e7e1dabc556e0109f5d34c6fdb39ed956eabe29a1253817764fcbbf33d8324381a33552820a36c4ae909415006978089b999258f6260656db2a468bd631b67a815a457993ce7e158faa018a20d18f42db5512b4304e3c39b7c9dbc3ba816373b459a3062b5d51ae36fb10625041738aed873d4aa6a506162aa0be670e15721552b191f9194c26554316cd9512386addae77899839a1049674605877f38a68d40eec3cb36851aa4e4e6bb8308d316bed512f4d8136f345951e6bb91fbd65f0761b2208b537d01c71c1145773360bd1033a3cd21aa3dad2bec46a4afe9eb15c552bc7f64b0d47fbce7f0f3fa161158b8ba145c9c2737f21eac133ff230c8324da9d3b59ee3ba336b1170fb4e2793aa022484dfa41b75bb4cabd0bb0de6b53ef3f895e9c305df2e64249f7ef04387e34a20c116716ebd3947e029b3bffaae6ce28fbba7f8544284fc7a472508237e8330072c103eb65c0b4ff678eec8b6b849b64ab6c349bf1258057384d25e72fab8111496c46a002bcb06c900ca1db34d8f6cf983f8b20fc0860362c8ee3ab7299ff79b529961a7ecb4c6907dd22b1ecfa4a5f84405c0f1981af07663f7aa8930747b00311c731127bb83a91e00fdf5c96b773df0cbaf1d724b8c7d163e0af701ad35e52a711c718cc318f2ac0c7299a7e98ce368b29306dfc113630de2d0049f0dbeb2c7d98dcc4984150e9f7b67508e868790fcd1416fe634d9f13845d6e0c12be044e8411984e0df836ed6f1ee237882b0fee166ef8c0ca43004011bc455c3b955485019a93904fc77a6ba91e852d079ad28f915758ee6b5b8216603b5fb3945add080041b86cd2848c1ce09131108ab9f7448d21922eff4899cceb00c1b760742a7b2a9f71a41908854908bb05eedf1995735ed7813e4d88929ec6b62e0de29377683a28a72799514c5035418506dafd33d9966515223a8a76aef1bac1128a9934d1949f7f23b57906fb000520539b0b00f1e8588f94f94d4c1f55c9a2d92316731ee2d087c0e833520c7342782b283f0f694f7b6097e75bf8c267600f5cb575ee2c435c007f98256c4f882c4229c2589c686ca58eb0a844c6323758b9fc35479c738d006efae84de0a2345c72ce01092c5268b721d3b1e45299cc41e6887f7374eadb26d610b62eca056f5310a23d7529f6302d1c031bb45830fd2e4a0b1f179d07a67c6a3f38b4281ee089565b4694172bcf9e3611a7b037c00ea4e91e0792b7ab539da0582e8bfe410df66f10f1383d6415a3f71b7fba45363b008529336f01a252777932928d39b60d7d5185c5c190049307fcc81821275865288bde7cd2dfef52dfb4726252d604554fd82a9fc0b4cdf641e8d0001b2164111b4b47ee322f0b51dc68d0aa2f010c5b4452d8bc014bd338e82d8c80ac3cd51d825b7974560786d9ebb2e0c21a74ed498ea64e4d9f8dfda4eefa38510b0d0a8e5355d158cadb292f5ea467fb4192076521645ca24aed9b30a70e7cec7edb954f66ec3de65671712479d398c386ba02b0bfb4e59984e856a6db6a649f62880e8ce3c09252cf8317a39fffd69977d5ed01b526fbfddfa7fc7eb886e35f6252652dab31a909fe8a303585521b1c7cf5ff4ac76597d301131ff67fefe15a63832e513b05010cfa352c734064d9d68b6e0cd26ccdb2e5a0e76143829f1999781bf4a736c3b7466814ae64e00ed7e3b8e121b1da0983ec4893b6fad39a5f0b459cfb379da3f364902969a163f50db1a90dca915020c1904ce9d8f78a34929109fd8cc126fe322bf005c5fe49fdf63dde5bb9378a8906063aeb8f79e9f9aa5d440faf3a63f34339ff4786274b9f5f40d1e223358f5c8531d424447c418020f419e0fffd08e1daf07c66008e6b2c097126ed6510388f43cda197b1192cf60c8873e269f4d0b17fec3ecdb19bd14f322e569341830bdc7d5d311b1741a276b4c6782e96946ac4caf4bc46915c132ed7d4e0b427420519e6b0f6554d9a484ae389465c69592a4b228af2913a594c1a13c876d94aa8690725d6ba75de15d5b052e24a00546afc26ae3872dd9e5ca2c8a412c1deb1ed35ace47559f865dbbe5dd5c0a839d0facdfef56e9aec2a9cefa92d9d52c1ff7ec336337facab46241f6ef8ae1702fb9942ecac0db2c291fe2e5a1eee708bc0821ae408476217841bfa82729adcc3f9a83598c200ec5c4ac9c0206113d3b244796d10a7ca019abed7c02e3a03331e0104d9defd934cb60206738108b642e0dcc8b36cfd656f78d08e25a1968fdf55b5dd6db78e7d345436263e65be2b28223afc79acb0968bab1a85c5ba68ed7a9800fd6bdbb8b3f602f82aa8fd98e6419e4c86290042f7a23c32b2832f0b2dc9f2005f66af0504169d331ec9d195a8206fc7c85e99146d845ec79cb279c5c8c0981e3f8bd76ed6b98ba01c4adce425336a888d4663b6508c09a6861b8012b368123e16b26966b8852a73d6ec26f9964ba10e0795cd50323e0b79ae83ad40958a21f0f552d07791c1157ff315c0c5e04617f3e1d7ed6b0025a1b5ffaa7fb35aa4bcc012179fdb6df006a89142c668e093fc98c95b0021e81fe2075794906769d43fa097e36a484f0c0244569d33dd308732090dd8cae7a158e17829caa29da62f12f1e1126d29720597112fb511e285169beda042542d507e282c46f49889cf89152b0a3c4bfe5147f1b2133c62d6b26c128ec3a5554bd9d0183182a01e715f9374c584e66204e7b965127c03f9ef284b5098b2b2a1ff866d4bf37f260b955cb868dfb653824f72b0a96256c877f50c8c019d37ec7a958443ecd02d239173cb1c9acc45a72f30d628eb5b8202a11776e2d9e8a4e95d6048410e3b8b6287f1e23c131c0229b7871dacb9e982884407e49ad09b1a3c1ef15b7bf2c96c1fe55773a0c2eb54b4e8ffa81cc416bc7fbe6429e329a0a470938e657f7181873397329fe5b4b5d06f0d14c6c3939209b325489c24a37181a53c1109cd1202c449650d2de506f74574a3ba1866628b86a726c12ebf6259d699ec749d0eede4bbf19f67deddd5802dba006aba138ad3c25cca227e871b69dc4eab5483159a32d3fe51485f5e6ff9bb660e62f67528974e01bf3ce3ab9894ad24627848a804c4eb54de8b965509a706394da0c885e188a198028134ef27879a413ceb8dc21591fe3e0664d595ff1bf34a360f407d1c695f44fd74d38799d124835ee8526a0e4765d68d368317efea2ec568b198029ab42a85bbbc5ac2adaa74a0c97d00b4796d534c4227a7cc71924a730a523e981545e401a938da0ffb5232407eddab0bd283caa4ddad0aebf6a917b910473eb9d14d163c69d1bc7c7986c9c945af4eea62a965c640148b4c8d30129c6ab85f39e2a326d84bb295ffb85bba4adf2db17024784cb5e6eb5ef7e3178b1544b2f7fd05bd366705258ab378630f7eda5f0a246c0467d2c4b5d278932fcd824c0703c6ccdd67701ce923217b71ae9bbcfd2447289690fac045a57f4b906a04d279b34783266295e9ecdbc3992dc14e248eb84bc80ba8f6ea19dd0db83188330fe52b1f082ad4e4c001658ae03ee0c09c927da102acb9f5b51230fc48c58f7ab85bb2b170039fc9ba55c3959cdc7af8698c6adad6bfd5d796380200b6cd946c9be325a8d611e2e890c8dd5a2c6f6c6648dbdbe5cd52d62f62bd7aebdbab0ad7ac095993192c5623bc5f751a10138c90dd7b57f0b298e1c70786a390b6c67f210d92c941bef6635acbcfe490287fa717dc259218dfc18856d98a450deb9e63425e8f001875f6c4c47a2c04398e20bbc58da12844e65e9414289cb61c202abe9eded57a89661c69c26b2ecbb5192f3c80849918a71ac9f2fde82c319565d632262f4fabaf88e60dca3bffcad93783bab1b03c84adb814f94c55fb7a4f82d49f2878053c84788465a8c0dd58be9b3fbf6b53f58f695a986eb9e33754adf2bc4920d3bf6fc76527b77e49576a4ae02d186c491f3c1e000e20d257a1c79b255b22e4f9b061e34ad2706d5e3e728161a0b822ae1a2323f30ab6698681f77854a39ebc8797a40b4a4d15e1eba63eb7d49432943b3cf33bd3a9c8f3347b1404ce52480b339ade2270802805f5bca80eb0ab8fc3b1e3bccc3c20038c148c7e0270ae73151d078936ffbf092522f10a98abb89487b79b1291b88722bb10f4bd2cd80d94fe75af0279483fc910e23defb27c636826b9aa191abd14c69e04aae3998b7ff95c728f41e1205212d001ea05611200f030a1de11e60ebefdb83521203f5af31f1418cfe4389d9590522856e52a58099c19fd65360a7a4e01ef631c9ef3b1197d1fd973009f55a41477605bc42f41928a3b8a1e2f885478eba85b6c0b4116a5659d4d47f0a22c0fd21d507ccd76132b1f4e3ec90722876f5edf4050650cf288d31ade7fbef0933e3a530006addc6d82bd76c17763871cb188836e55f90f953ce010e30538f011606f5ab1f0252901eb90d2180d5e7f9553ee551eb4cfe8ef5307071118c87e0aa3894a82d894051e2b5e10dece4a3bb69cceea908cd5b169d35efb67e8fe4d64fc20b216b31da4b8df9df529589868e3dc8d68d698d1a6ff214deb8a9fb35116e34dc1ef249ef47a1ef19475d48a16eff2d73c0966550712a5fbb20b6d23effe869965855d90ffb0bd84f445907377b245b821081491e28a6b9571d407c5f2f45d8583f155d94a6fa6a34342940428a85a739c3e07314fb34c4c660db8028f0c50c3686699adbaa7d251c1a536b44e9f9ae2b9f983ed65cb27cac4757f0095571ddec284e37cfb441d2be2c0f7a489efdeccd271fa10db6b9c1d31adbf65dc2769c3a159950fc67b751fe330877f10b91127bb1755563d352162695d7a1494724fde4e2ba5708f133cdd3b0866986f9e63425cd20048e2a8736a930c6f2ad0de4fd705d7cf97c9a02493a44ced2734b8352ca6846943f6fe5546b7287bcd5a8547916832c228368c476036040279437ac4cef2e56a6e990eb906b25f1ba3898e09644df5bd79363076c571ff98df33240fbc4f5e672511312c14a9d7edb861a5cb2756f235f9075031a6c417b2c092364a49091c331b519252bfbfc0e14cdfa21d7aff5bd69c99182583279f15abffdeb030ffb68ee2553bad4eec1aa6f4eb18e3a978503b438c0bb79d22bbb4101423fb30af8ccb0a14aa1a4c7b33ac3ccba055ec310defb2e20c5280510f66a9caaad541d6da318b477239fd679cbb80ebb4b551f0d02cbb7e414e089779bd47d9887763805105cd3076bd46c4e39a107b075ee98bf8807305510c771f1319bf1c77417c4b430379087fec2f872a21e333fd2278c33798bba846bf1984da88a94bd533f227c4ce1f6b089b51ed370f633240c17818a507b705ed7155badc722c2e35661910cc1bc616ab07e9ff2050ad5ea3b0508537617f83836ac15cba8156de15b0a6b55aa19b964d3be159912263dab3e8f9d4f16473c5c4900f5e8a73a332785a9edef217b3196df8a05b75e6615edfb905d0ce3b7d2c02def5945fb3d0453bad3442d0b0547fd9fada8d7648866124aabbe6e07fe9838d1e97b3b7b268048bc0a3ec24c747ab58dca2c82952aef6d809f512716f2deee46a6cd55d1688b4b5b018c4eb3b63b7fc422deafaaa910a6f405c7a447fc952b3806e7f1d24b4126565660a09be3600d85619b1f61011d1493c06d6d2e012507f62121b2481f4145fe3f88422445a36cbe2e698301508c56e265d0276c4a6a7f7f456bc89b9bd04565a8704e6bbe1069c19c35426c76d505a9bb800a09bbb9491bb255c02e0050ce78f3e855860c1686c1dbe1e66f2de55dcd3c49556c827a245888ac97c531d76c180fb9a6868263e2c013f3e347ad8ff80a8c10b5bf78d01436cb9356a07ad258776de09c67fa57297fcec20d71951e5f331b93d4a56327ac350a80cb599b7fc579eaf17622dbb1589e35e5b2b1851697f59228b256861e9bfb41bb5ad963b0c5e58e150afddc476ec2e81fcef15dc6d47d86f4316a6f1e7123cecf542d3ccd082e4c4e6d2b212450e493975ddb89a29cd96693e5322da19d218c66cd54ba9ab2d28125d21cc644b78c05458231e2354cda7b9b48264a23656725f8cafcb2c3fca34f99d9221d25466fccdab1d14f311d2b4954b9db7fd42f921dd789b44a23b98bc24d950f15fe5105fb2ec2f098e9fb13804047249056cef2776ca7464d94ca4d43f11df3d35164c2282e0d8b2ff1a76cc2bcb5c59f0354ae280c1f7210ad1517efba2ec5719534156c9d0b0224f04833db4710049202bcd2896da80103dc2153c15e719644263e0794d89ff72c2b3b82a4b014fa4026d6e1ba260e37977620c74ffc864c319af1c04682b3d1219e80ae8d6c37b122cc6e6986e2bb75cfa0fd674e97b2dd8ab9600f50eb46e41f131d774b8de03101f7c8ea3ef7e652773df37299701c23804a5419ac188837415c0854ed3f0d5b9f50a710d7f0e55563128dbf9f3291591195a938c77bd0f91c9a311845e3169ea8876936e811b7fa672c510a29a3e04a24be0b09f823513fa48cd091062ee43ba6ab004a3dcc89cdab8fe22efbafc7bbd6b9f929b6992f246bbe9b91970c06495730863ec176a45b0bb0eb3f86fb11cc37b75d109e9f8c9d87be3a156ace227c711961e4d8a9b22bd2894652c6d1d7e4ef53c798b2f062521fcdb1e128f46f5d097ef1037e3890a148fd78de95105b54505729425158e4cc2525ada19f140035abddfb7cfe21731e35b6f8a13ecc215521d33e7b8c08f6c805722c046eee62f4a3f6958ea7c1691185ab6ea1a4600919ac2f08aadbe2796054353124027a8b5d899aa25168c8d7a1a26b3025332f13c04f5a8925b74278b337fdc852b4a8f0c22783d8745c12a3552693098ddaaf20e8b1a18b58159493914a5396828d9b061a59b004c6f01a9c7e5edcf56b7a2be8ce1da1e524a340cf789c2c27c80211b9b446d5c64f6f05054ac8edc0dde5008013bb22500a4258551959a2450442c0a2b71294a02c4d9d44305d566cbe90d34a1cda8ae7475634215d08742927fe7460836c66cba4aba249e581eaaea098dfa6aac0779f9250a27bd2f7270c2e343c7508873259f84c28d046d728286d1c97c25dfe0b9a80f45b69fdc50e4151febe9b459abe536a4198b58a1aad70261af924be7c3895698b4bf86aa1b6c6ad77ac7068c63cfb03736c41330370ede7a1f907ce0f7023ab49ed522cae580309cae92461d6cbd0e415a95009eae266bffb6e09c406e19a21c4e37ed32475245e1df2a9a7e883d5542d6b1271836dcbed50078202618c05f41ac48fc8e3eaf911b9180101d5fcb40a0c8c8b479257ffbff715ad22e68925b41ec301753c87044ed47fca7ffa74bcdbc40bfd989f8d75ed28f7794d0f45db7d34a9ebd54796942433bb40e488b813680f92a5a27136ba0c4c7a6a4821e50593e0e5b6780554ec2a548a0faa6297ca19bd846fbaf63ce9ac576013c22b3493810a7444164c54cbf5cef03d4b1d72f0d9025e8ff4c445bae1531d3efbdf2f3f1065d82d1fc16763c38bab5a8507e5d6007fbaf2fef33aac7fc22744fd012ec318d0adf87379bc74067d07b1e23070d047fdda82d471a26c395b9f63ac1203458377c4d74efc0aa48a158c586411992c67ad81dc7b3b10b0c2390a59ad5f4a45cac782e885049373be84e14c1d4e08ec237ae717793e13304047aec0a1e111e7194ec147edf14c12c12f4b5455696bc44f7122cfac12ac12d77b06ba92b69db9f96930911bd2846b39d427507c789c7692aa38beabfa828b4caa73360a42f6570c813bd609950d8bf73051b451b97eb4f988185adfc28931b3fbc51ed893a4ede7c77f291ac13a22aae28f5cf6050da3bc67a38aac63c3a1e56a933e228fcebcec44ca4ee92c6e777878389d8d42876069244729955dc15741568357f30bc700ac96f76eb4a11d40e5c882e22e6ed157fe5310ebbe53e439c2a4a9283718bb29bcb647e630c54de26358803895c6b1aa89016c14169bc11b2d0315745766ef75709a9fa1196830e445a5023e0652241d409934cf0ce6827639e2359a494cff156d2853817ea1d576bdfaffedac3aed08b5051c9dec746026ddd0b51564c5584fea1e4b820a5721f4ab6eb52119aca67cce3683793a25cbbd30e9670a17071eb81c09e419293dd1ae0581ee1e34b96128f1adac46f391ae35330d3c241f7b5c7374a0da8c85894d144d2767c49f140f04e6cc0fe968b87d28fc49001009b1d157dd41c362c9af2a2dde0d538e3b8089301d0321f87467249e2810b4358cd70681d62e59a47614719754de4eec593f05af4fd83031c5bf5c53b9d293d2bd59503d7b26a0ce4eac2ce2b821f4b022d8b2fdeb9ca361962995f8a6b1bf6993139b41cdfb75a5e38f6a145521feb7849e57dc0b9d3ec5a2310f4e1755540e6d0b1a0202314b6f408cd1ebc9074e0e0c85f978808b1eee0815a9b10f88c8347d070abb6089f7bb1636dfeca6e57acd95b63bd6ebc8f053560250c2a88cc8ae96da1afa9a90f2eccea482cb8c506eae8d92cace4a047f72aeb3c31dbcb0d2b47d454b286c8978305c93f44c968a298a6ff0c61586fe8defa6541eb64739dcb7df5d04769ab86edb4c005cf0eddd5ed6582ad551115b80319c5d41218aa68f57a1dddcaa302919f9ef9336b3873465e25450c1df1e4b91f45ae8b96e6c26028afaeeed0d4a3bb474e53c2b4f02b026bcb48a23ea0591da1dd00f0e0f812d2169be9541b87b6655448c2c0f321e44775d38ab5068b9b51de9f92a91909be8a2622d78f0a28566be2a437b528f253ea61411bfc3b05ce8170f8535ed4e8bfd26d059da2717c30819b9e5374fb630a0143b5850b8904ec6f1275cecd6b1f4fbd89dab8e63515c3fdeb68f494ba8486c9a72d94d07456080a9b6a53acc37bf444dec6afaaf20de0e4a12cb875816c0cb8fa7ea83b4f24d06b5520e8311121cf29cbf9585008a5665deeaa5bdcf5a58eecf7cadaba2a92c62d8fb9757f4221058b41df7c47aae0039e1aec2d7aa54989c250ca62a038e3f5ef60b48806e3a23e7943e92442449137649f87ce99133a809604b8288de67e1bfe7a9d92844318bec8ed31c5b4d999249a2d8db19b414dce408541dbb2a2499e249d2397b97a4e13ccb7e2e02ec66f094f6269ef84a741652c3af0c6baecb94e4cdaa49e510d342ec3436198ea0f7e8c376cf8d3f9cd4ddc498d1e35ae85b8c21db70c5a70f6ba30dd383682fbb4392b4fac7bb8e0c5591356c57648ebc09dfeaa88932f309b199963cfd4bf3944db74048d1819f19ea264c48ab5c4795085f6bf00e019a7bc5daaf61ea6c3a6a00faaa5639173839f4805175f6473a5ba97448bb26c596f5363580d8172d36ac7335a4471d4b0055097aef591f09c48984b81d7fd0fd33279dab6827ddc5d80a7023fab7ad26b8c3dab86f0cc0879b883858f72f664389c7e1b57951bfa63f0d4d1498fdd346530408ad758af8516a8a572e91633a0dcd716b08499b7442e0de97131ac2156a7a3671e185d48ab1f22130e8cb5665bf66655a10b1afd6d5f318394e8d84768bef4f64ffa8932d53486ab571f81868f073b164946267b97d465fd4bc89f10b0914f7191fd057ffb83b2796582c7b2ff4fa883ae1cc13b2d5c6e1c30480a93e6b95cf9574dcc238eba8b65481837cb08bcbcf9a219fbe5b1f65fee63e7a141be0de047d804d4c274882608f421bca37bdea909f1e31892a9deeba4a500f1cc8176d727685898c185c38e13ffb987323d63d47ec9555d873a73b82302e3e12b6b291701e5b4f8ed524da791c9ae9b9a0649a008708d37c4a4e14ac078316c5b357968ffa6cc7657d0ee7bc7bdfc829402013429013ab8495610794c88869d91d35038c1518cd1d50cfe2e5c98e696586920340eb7a9de3b4a12a46e92da5983431584a0ba42e043f70e6cb19586d778b717b432acd1f3f663dd611c1bbcaba199f995b282389cfee63fe80ba276018c4a52b1e88aa9eca544612eda6fb347978d872e420fba1862039b69c3247956cf60b905d259b6b960d07aa96cb9d59ce110ae728da9c1c5b26866e10e22cfe112b4850c1965cc000b42a0b52daa7bc341602d707034c898cddb755f017a994e1a33dc6b4796a8360817c042ea1b0c557d944fecba66a4bd9ca07f682ffc0aca618970399029b65b6324deab1e5bacc90f10ad0bed90514cda481da16ddd95d9f3b982c38c90022fb4b873b13a5956c8768aa56c17afa4bfe91258a0762c21fe6f4c58762496e6aba168c0490a947dee009601b4f627ed48aaee0195fb5f5520d36174c41332d2364bee2c738244b8e5a563c43dfccbd1de620250e9bb8fa1d13da5fd4307a049769a3da8368ebfaf3feef5d94796f288fae9c080f280241cd8932ceb4e6216efa22e896f151bcf0291c8ddde81d0587c959377d54981cd3c8c78d0ee4ba8c4f7a9ebfa98c184829b838e3a3505b1c4dd8238d71a846b225cbea8a2e3e904b251f6d3558ba408b534971e404839597c8d258cf9bcd9e53855a38d18070ec61c3495b3c4c86c4db3eb8c7f46f03b1d0f0d3e05ff24926f4d761390d7919bb799dd8bbf46325ece63e2b0718fdebdb96995294a69e877e777b5e4dc0388f0a806e8f0f4c7e05ec46f4b93d6377f2c2aef7ba517113219099a839e97523f311d0795beb2fd804d6a34747a57367d94dba901e92b96178472503991773735a1dfff33d956e3ab09ef0c66d0fc189d9b2e4db319117f86028bfa2e1c90d789b8d2d72ce16c8f9dad8689ca2fabaaf1a41711e8997fa29cff8984f592066dbd1cc8310164eff1bec7114b3c2f0efc51fd6793627371bb0e7fd282c6ac8bfc18fbdf0f6b42bac8cc4834bc5b1ca47890176ecfe01980d443adc0f57b882701a38ff065ce1b0d7c2151bfd4a9ef0f6a106a049fedf1211f00c0579208fffcd1127dc668fb14880fc02223feec403292676a06e746c9e8ddb53929d77acf585944eac7ab6cd8c7d2a24ce44a7a76d4d99225859e5b9bd3e53542b4f9eb72fb4ab0ac59958f5683b2f930856843cb74f58cbe7abbef32ead78be5d1f004b34a2e227977434c5fb7d48ea7d68818644c644d2454f8e7ca72e394322052c218763a89423c918086e0e1299fda825dc1c0408c65190758e372f8a8e31474157ab438ac6863ba2d17281c007639f39eee998ed49c719be8223ed71f90aa92eb2fc39393c5d1036704053f0978506c08b855880cc862940151f174ab2b60689c7dee7bce5349698026010fbc080b24c34bf3cdd4478c0ac08fac758bc2b106ab9fb26a9c998a69d15af84f61ae87bec1e8b9bb749e788eedc62a15df9e05c32fbf96da6e2fbf6586ca4232b5041445c1e5c4de2d77c6b14a0884e487481247b96bbea488e1805d5554389f8702169f39136020768251b6df481bba944594e6d6ff108764bc6ba2997bce48e301bd20389627309600f55e099395160162cb0b38226215392bc91fd8969350fb2d2c76b1f41821bda2e91d4c33a8c796634a9c96d7857e5f69ab5023db4c15e92979f7ee27a79979beb6299ee6e52eb4c6b8973e2c377c1f6bfe4fcc7de6ee94edd4e1175b691814d1da0d641d97e7560decc04b7f455bbf122b38e698ae0da89cc74d1a278251e57cfff494143b59998152caa795c7f3002879e6b1b4c522b01684a2028cffecc478fb8bf1d4640fa112b50d8729f7749b71fc357c7d85b4266ab51986f394edc65c40bc46b500dc407128d1903f8c5a6005a9321e3dc6f0632d00e435348ddfe1157d2a310e712a1d9fca90623c8e5f6a7a3ac1147c594e418b645ae5d1d3c1e326ce67c5921fabe9b1443faba441302c49bb93389c59b5ce7d328f72a0d8019e95312996ada084caea59347e6e1b625e616c1fcbb5d69125d1e4c679fb87b5bd38ab6b61c76ab89cb243ccc89a2ea8d22effa0e875d74ab2cd79f9b4653f4c58eb7e7854ae5759b8cf47c60e5345a98914cb151c7508e0630662346db2fe8ed083e982dda421e62d5b3d78f1fc718da91ae0bbc60bfaccd92e94ba0fbc9c4d006512add2c14ab4881118d014ddd0ac428d9aa225c5b28b77852f4ef14929102264ad60ff6566641c74390eceab590f993e76ae2fd111ced8be203023e6d4ec6fd7592ba08ee008340405db3a7e159117e28fb7215d2461e0ca47e61ea59ba0e9f54ae5f5d4fb137f8e89eeba8d66d438f27b00321c18f94f932195d2332d2410fce72b4f538c930247d2ce53b0a77db6c7ca284f3cae0f4651e3d6e7670d6c7b2b7c37994a5ec4672e07f1773dd9b49936cc62ed94428b4417319f5ab9407a78188b4720c4357dfd910ff8882175d73cd1d9460236da97b8e2107ce96c28ca6ed250ddee897547096e3c49dad9d84953a40643499af8e99c71ed89604459b5c8ae72dcc6f10899ab486cbc95da258c313b690dea3d3737c48d9548ccccd4a689c56c35a66004c2a6cbe89482a15bd438e351f2ad4ff21f85956f9d89241ebf3f0e06f53a091e9861f17b559d09c610aa0a4e896156f43c60d04ca539b2530c360e47f0392df0ddf971865bd0e1c7bc19316cca9e0e8de14ca239aa1ace175a8778c12595053065aeafbef499e9369bb21f0769986d0eb27bfc9f64023878bb8c33decee8919bc7cbf5a49253c4d9839179a4bb8a2da791c5c37e5979e1261f8ad04f00e4079c2b4ce1f76d2b3a9dafaf613680baa60594eb0c6110c62aa65decde9528c2d6f1e60527cf8cd3cbdc125b8d0f9265d984862b5b2bc565f7326b512828326219a453193fec1bc47500a5e788e4861439bdae1e87cfffeba9684cab09bcfbd921c8851729ce0aa15ce36257f0fa6ee02eec83ee8f3da877019af2198ebf8f085c6b9190f4cd5a076e3841991aa385e3128fb6aa2d6e38001094eee9a87ed1a7169148193ee121fddbb9990c3475ecda5000611061cac99669c8095cace984dd3cd9c7f19cbe913db010354e90ed5620cff1374bd78ce2439a65a77cb60b565ef5d64d87847119c4dd0e0a9a52d90775f48da932e11516306ef866bf1b142200da74d18b2259621e5fcf3acab4603ce61a3bd718816f33b0532270a0e3a0cda258e2764e2501da92e4fbf7cc7f1cc1e3c07319a161e471389c12365a685ba51141191f2b0f07ddda158db3d114b47383b3996eee3c4e246718e9271524038af52ceb05a049d44f4f76ea5a049c45bad1685ee1ba50e17ea566bdb91be0577fde0e9226b008ed099a37b2b4ce0d9ad26a142297f1d582734ffd9e63d96c7460f86a014570be4ba68244a7a92ca0484ee52be550a4f985dc460810d555b5df228ce8b8a8c25321ca9928259ca96dd829f31882f4ac2270a7ae0b7d445bd6e8430200c9ca57d28dfd3087f76c8fff0a5abc399663f7990afa37a5b7295bd4141b4e4bffced78e98751b642c3b7f1b85d1139676039c6c13a4a3795e086bd4b4f3cd79d6384cf421714bd3d97762f9e4a90422f12b4893d45f9f56e2ce78120a3fdd298e76c10ee36c99353a23579044b01f958ffd27e3b640f4289829f7b9680ba3da1aa2be7e156393542a3f3a006cd5cccd49e418f1b25779c1daca3c681910c4bdd55fb696b6980b9f14684ff7b6442ee264a62d5dfab72beda94eb00caff16888141e4c6202de5652c574fabdd698430e1f0a50338d61d341b5b23933c48966e81b7eced292e76c38da7ce4f940bb29190888ef27798c6ffd2e6a51774cc2b429226e0f845c2dba12612bc8140b6226eb8138e136e16b9918f13509bdd7a3c11e96750c391c4d504054552d66dab88581434d92631ea89aa83e7bac07baa6cbe07f9b703c9a91157f40561220903e61357e9a29ce11f7b2f80e270e39216a59cdda6f80a5d3ffa7fe8f191439bb87b4f97784aedc697685f2a41e3a897e47e1587877e25db50e951b7cf700568221227a7d01ff3001312d21b8e80caf70d5e99524c99a3105beac641d95b28c4e47380f2201b06b0c9415258ee94390035e206919600751a999afe1383d5eff9f5630bfe90b09491af8e01a1ac00472165294619a7db903616fc1c0463e21a5409a7edaa15511dc2d0b777fd37a0b40d7505a447c94869d4ba1972950691034aea6c539ed080344abc923a495827570601c44b64dc24e13f934d9838aa30f804435395e4fdb65bc911f4c3a43ca891cd4c33abb0630605866e8313c8ad88129b2ca7ed46ee027edb9508ef084e190466c2de11869cd9701b89a7a47d0a99181b601f8a636bf3bd948c9c24173737e3ddf3e8db25eaf855c93b033026cf8f00817e1439104fd114dae352132d0fba1cc3b9762918e4b42c59c1b615cece5338591450de8b5f77c92e765f1ced225c3205b0bdb9171babe3a606c539034eaa70a9a2221cbb3afa74fd5ba77e798b897d1bc524ecb2b55dca0c94bde51c96d53f630e280adeb7a300ee973c883bc5ddff5e8fc5f0f88aa720a454bb55e5cafaba6285b0a8ae2fb341b8b69906c26f8b1e624a1933d5b901a5365d4fcee7456517932448284bd3506f7ca58e97cda26d97e69d243ae09570f04d34bcea1349cff5ef12da7e728fbe69b3c1a96db2954eef79874893cecca13195af035a091c66efdaa386089983363e748ea6fd3a35b44f41f2eab35b308c87dfb152837f4ec3c0a9bda5134f9cdd6266aa3b3432382d79393efffeec16d96c6d412d40d9ec016a1ee1eb3fdae36c7b2556f4fba2d5fbfbe094db0475eedc4bafb5eed072788ade31689c9819049cfa6ed39edb548e90f183af1c16271aa7b547547578bea11a80149c7c2dd906987aed19fe33ea2d047b9e81c54c6995aac2a5483b46771c9d91505b2089c04b1cd65951b978230cb525ba41e204b267979aaf993754388c429b4278c96330288178531fd78b1b8f75d317e2b812ae4956c877b602344f753e88de0bf19b078b12a2b7d06b4a11d104ffb798b4b5c11263a34aba03e581f650885eec7f24835fac10d3ffdf132b7aade77addaf2228e1a2710bb56778d4f80f1aef1b90ef374553d95eb9d293dc6c021aee319a72bb20ba782819bc43ae1426e5ab79f02bd7a847da10e3656813ea6514cc9b355f25f4858f0e6f1606863761401517b7822a89c747cfebf148c7d9ad6642f2f77db3550bce82f4ede12c3cfea27578bc4bda2e997469a54c4c8bd360fd5f05b135ff286546dfdd977ee8fef6856f439a80190990545e5c72ec6d5456ce7034de229d6c47f682e6a8a50e555f28e8a43c6b6da29ca36aa8651fdbb840c5117f86953b89f9e47551a8d8811d97968ed51cbd9405df88e9049c17607aec5d1476957d23622fb361c4efe3a85f6b053552d6aba5137a65f8bd7fb69e1d3de5f424cf87ec1466dcbd84fb90dfb32e2291fa932f9b7c610005301d34cec92e09e1c0cec95e12cd4ab10da43ff86502f383074e3ef041396be4f77e6aa41ae11ba1f2f99cb7e8ba71ec0f1c0a854fb0c4c24d2a398e5340c399461649423a7ea7d2cb804d86aeb120bc6e2421a669a6dade65cb2c7eff0044999212b64e018c8a2a7f76ebd073428f2b0240425cf363fb7331ef79ce3b98dff307e559388443e252ea4e45b0d3127d04b5f24ec193b3fc181651dae6c693ea9daaa7112d1108fc2ec05fb21345ba9552e56cd0fd186ca96e9a5fc313b494025afef56359405a554d07c8bbbc99b976be40a95760b662685c32a1767ee038b887004852f0556d59798b989dc4fe17c36ec47bfa87aad6711bfdcaafa4b16b6a2df769f94d6f2596b064be974a70df5ef3f1ef55b37bef2df7de52a624657e06fd05f10551878d404d9ad1ca7e68e34f175fbe88df4041b88bea247dd08159c650491e7e8c0e3b1e48a03562925c52105eda9e9baace4297ebb71c70dbee5ab4146ec48db811f872fde65cb4d209dc36b7c80ec2977855ae875876d107be5c2f1ac7785d97ec78f9753d29cb6a1d8d26e94563ed4af8223f5a89a995389bff1dc3699e89102cd4e04c8a134e38a154d9d124f8fe432effa670c40c6510c2c15088d00f2ce136618c106758d881a110a116ee2e42a8e1f8e198c2a27164e1250a5de47bdfd96553549959b47816410891cd2bdd26672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276727672767276707424a6750a1102886301402c58ac80a02b984a69f951f7a89006882d98fb4b185e5111c1f5bedc0524c25b02ecc13c61a038e9f1be339519934025faead81250545c5c9906bad8df84a1c2b4f35b0d420c4d293828262234ef11e282d15272736621541273a4dc3f2893e8e40558b15d94ade307c13493339c4091cdfa320554f481f74e0eca1740caff4913f6089c5073e4b1c0f7c963c1db8e1fb650ea0c987213ecb1dc09987252038f0599e36f059d668e0b344d9ef773240930d213efb14b8df5b70e6c2521119f8ec4218f8ec452ef0d98da83ac686284053a409e2b34b2108ceaca46029d658e0b3f754e0b3ff50e0b30f617953c49940d7f0fd6e034b5147029fbd47043efb0f087c761cacf2fdae04344520203e3b0d9c1995e290199fbbf580cfbee387cf7e8a41d10234c5223e7c6e2eb0e04c0a102cc521199f3bc8019f9b488ccf2d448313d0d4343d7cee277ce08cc90d2c750d8ccfadf3e273a778e8ef1f1d73f2a6c669c0e7f6019c51f1fdcd03965a87019f9b6687cf6d8377744c8919a0a98174f81ccf7004ced4152cf590057c8e2c057c8e430978ef4d5dc4c5e74805159cf982c0520f993e479f99cf1108011f53910968729a08e3329f230f9ce160c96b4a9fa38f98cff1268798ee5b7c8e3330390e0e58f2027c86470c7080cf9106b3e8170134395084a929c2069cc1603e4316013ec3d50b10b0e443dcc5577c864e30799108e3eff219fa08e0b38b017c6e81fb5740a7affdf5a4cf01c001f8fca3daf2384093ac89307006963268923611868597b00f78e076e0fa104d189108e33f04101cb839f30ddc5c35706d4413a6120216c15219b839c3c0bd001ca289262c28889bdb3194056ece2a5043811a9c68c2782680a3e3a5ab25019d08e8404007289a301b20802ed58c210f18f2439168ba8cf8708b60bf321937670eb83168a2e90aea81a6c64b170ac6cdd98b1a1e6a70a2e9e269000ef6d96280ce0e3a5807289a2e1b1d80b04f95bb2c6088028624e01689a6e9a28b60ff1ef2d24cb94b344d2f4dc789a669ba333757045c191a5caa89c9a1a6058e6cb90b50344d9b0833c48b4493341261fc0fa063009d02e8b00082b9794480fb7257dcdc9eaa89261994fdb84d34499e08e303b82e80eb72493737002e0eb7e5daac3022d1e443d80a5b612b1fc288dcf0ff36e21bfedfdf87feffffb3834105876fc1a1e562aa51ad59a6b2d75e1bb1b5d65a6badbd2a2d7f43cb0d37fb916b1bbf6dbc61a9a0540a4b05d9b0b2b26223b66165656565656545c5fedbbfd955180ae3c150180a43613c2c35b0d46023666161616161616161b92aff36bc0d373b4f0db6f14a0bb369b55a988dca6834b211ab8c46a3d168345261f91596959bbd466544a5521941494149b111a3a0a0a0a0a0a0a0a05c9595575951b9b98ba4d8c623db78bb5241a9d495ba8268303131b111d360626262626262a282f22394d1cdfd83238a0775f19ca8385161233e3939393939393939b92aa3a76144c3cdfd43856d6cd2ba6c5aadd66553526bc425b5d65a6b5539799313939b7b87ca884aa532e27dde6723f63ccff33ccff3ae8ac997989434de662a28959aa92011c7452ce2388ee3384ec5fbead59b636aa226cf444dd4e4e948ba88bbaeebbaaeebbaab525f54ef8b8e8db956abd59a361b866118866118865d95eeb98ebb190ea98ca8542a2354a394524a29a5f4aa70bf71f74537c65241a9542ae892f292524a29257d8cde178d493fee124dd8cabdfdb76c66d98f97b276c92284c9deb3ef2c832f59673f2e329f9cfd04b9fb8a1ca0095b4518ffec073bd5a9fdd82afb59390cf28c5d017b0b38d309a04e3ce1e6169848d6f9a003cb57c530d48b847620c61a30c1fac1ed9f6d5dc49f22511ddf80e1cd36e2e9468e37aa86b0841086000408102040800001020408901c9c0b97d9c6d4de8867c02588ddc71b51aeb54f93e00b4af4117b74cf10b0f7209064ffe3be91b8cd764f93b0ae7d4a3e7ffd3c127536a2fc26097e33b2a934d979e43e82b196a2fb52bc69172cf718ba318433d9e73642f26eee225f72730b8d2a26c2bca7373750c9639f899e7eae4f3f4bef8eba18f5e688b8e4e67eed450dede9f700b8ed2191235135002eb34eda6eb49176f3c265d6f1cda5b3836f3ae651ba19f2fbc67174469d0c7b936ddd135551d53d70464a16c6be85b4100c978deabfcc567b732d6a5a7f0eb9bd66557433b4ef6e0e4de52a954a2557703c18fb15384dc2220dc620bc34e00bd63e2bb8ce4a6b03b26ac017ec4300613059b3dff8cd0a9621abce798330e962c83b8410ae1355dd63850b9d077b932ec67573444c6f7669671dcf9f9a168968128639cb57ddd3249f6b1d8dde5518c3d9ad803128b24c3f760f24b99af6f19e7431e8cdd4a49b315f8b249608e72c12bf0310f92452f69b2bd47e18fd35e29d5776282da766bfd15472487c230ef9fb8dc41886611886612a954a9559e01ee04c0d4f77b36874ba05ceb4fb07b1dd9bfb876812e6afc2be76312e0ac391bcd43dee823de97f84f55021354794350247c5df7bbfd91bd187e873e401aedd8ced5b24ea646cdfb9e469d45a47a312b743649f8d54802fd87b364e01c2603f2d89ed9eeee99e9e6dde20eae5ba187d73fc96d921ac1014557354d1802fd847159ce91e7bd8d9de81b18f538847bab8c2988cefd158bf62d17017cc6fda05fbcc65267565d4f22b52ac503354ddb84f935eeba13df5fae841c0b6c7fe51503caf219ce9ae4a0e89b7bf21c2db6b9f6def7533e8953922ee6eeecf6274dfb7467687d8ae100d5541083144cfcf10d54a4814405800180a89c207f60e86f654b3d1078e88456d451a0d129bd9cee61c5c68229be1173066a349d867191a2cd85ad981e5fec1d8b74fc77432be46261feb60f4ad416ff4d124ec7144dcddd823050aecb18fa88ed91efbd8a3637c744cbcd9b69b0dc3a1d102f763994f051a05c51b2f71d9ca6805f61b013869bbe739cb03887c247e87a8ea1cb0d72c8e88653c9edfef38ed820d01c2980fc63ec39e2018fb2c83311e8c7dca176af6d7ae11d271308c7631fcf69536629518164f0c832dd8ad21756a0aa28e298960c208491081085310415e1faff8fd91a5c2fe14899a5760f99bcc3a1e369a3dc4fa479322f48a50513423c903cb9691d87217f959d00116a0a97b4418f95956518002a9f9e59f5d0b583ed7fdc0755d8cf8975f1ee36f7fb9bbfb8a2679f41574914fe567cf5bb053588ed41afd8f21ceede3f60decbe991235fb101fd231415de2563837ac226d04ce6cf1bbfbdc52907cd7bd6633c9edae96e33bca87f770ce3a4ebbc847a5260cc79df22cabd547fe4ff2234652db8a7b1dda575ee26e77affc49beaa89d8699ad466c87e5a653fb9100dcb59233ff909d658d94158deddcd6aa10e026a1f1c644bdcdf1da449b28960d929f8221f06b586bf0f91ef371d83d3313c513a13767bedb279bb397a3723fe85ea62f4c7f71eee83a766f98e92abec5a70a10ed2d7c74ec54ec54ee5166ae934dfd2bee2fa473f6d9de6e918196dac8ff5950bc117195b45b07ce9588030f2a5943c6ab0949f5b7e0bcb2cc017f9b975e0859a7b958233d8cbef23d4e89e88f5c718b11c11fb8d36978d3ee4536c84c4f2860a8c23d6e015be922f49ffa39a92fef1a30c0267a047d9283076714793ba0cbe4879b38d1ffafd5e7fd92f0835ab71a3860bec5ef0a7df6bec0ab6130c3b0caf942b600d9ca2e63a7f7a3d82338d2f17d6876d8bd0f6d0a4eb61375f879ef7c57c7f9f0fa5f7d0311005420b5d6026b196ee4e428757454209a1aa6b015fe284f32291af4343082184f22ff872098982e6afefa16372f561e45926b19a42862adfb121178f1fde9dc119f9fe5ee5dce616594608658bc7203f7ecc0cc60e4663ad070c3ffa95d1860ceeb62390c1f0d6884f7f8b36cbe0d837cbc4da24ef21841042cf8a60bcb94f2bb95e1b3238de9f339e7a0067e2cfbf80101d93a30f9e3fb3c49b94579c1368d224fd8f46b7f6a8f183b0f361845bc6219ee01861e20f8499a72ebeccb89b6dc8e0d1142adc525a35c79f4363f8be0ffb1fb0ffb0ef7bd16f9fa8c4c4e4137dff5dd8a4922b7a1d5a45fef5f23dab22dffbefb74dda29330307fc25009668f8f9322ee08cfcd9c2a2e2f389cca4812ff33f3b4f4da2e14e25a0cb7c1527f33494e7a9a505b8e4f3f7f4374f0555e6a046fcbd0e5d628da85ff29b5b93a7b666dae069f2d29adc796a520b2eb1378ac0dfd71e799ef0fc799a349ff797c521717d179ef7592743bee779ffbd0e7d79b606c9e3885845460beebe7bed256bbea3a6644d583f7b1a3a18fe5996d53aafcf01c01bfc5e5aef3f9be5671fbb1752087b37b76029ad8d968aab15e1287bc097ec45b85a921609aeb60bea70b59c0e87abdd9c66c3d56a2c0d574b7d28ae366b1f19ae163b82e16a2fd585ab9d3c13572b638dc4d5ba0df892bd0edd838b6e0b7cc95e462cba2f544622209a3a08d33fe714614c1bcb26f56f2a5c5f574d7512f4600921e8d4744c2c12051168848c34f1d4a448c33397d915e50542e4c1f2b3ab65c7c479b2d12e72a7ce2b89930cb09438d826d2748c0e9a788a34dacb9025af8799376a929c71c6ef9aec081d3a383ec4b7c6f6a44ffb1bd86713cc7cf706ccd17edff77ddf7d585323867083db16b5ed33d5ee0decb7d7727cfa3a78f4d5bcdf65f2f5494c7eabd5e4b337b0cfde7fdf1d0ff2250f40f865813f0a74ecf0e2ea7880f085850c55f426304a5ef49b892dc938e05872ff06f6f9fb1c8e817002ef80f0eb7e8fe85e7eaffd67e97b19079caba8e3ee096507ff4d6bb9915d20f84dc2ff88b77e87709766413cc30e402e1aeed24e24c35512a31d8ea0e125e9fef2083fe288ea2e5e8497e4ad3a18de80a5a075c42962c1124d34b184b851d7b828e5f51cf79da669de57e9514e8bdfc5e7342d7b4dd3342d6e525e4eb5af7a4d504a29a55dc6695fedbc8ceb5ecbb8d7b48e8b9b949753ad2b69826a99573f8d769b4697a05d4729a5947ed5ebb2fa79dc77da679a5bf9979d9146ea24a7ce451aa9ab384efbfe94b8c5e8947b4da34d50aa518e524a29a5dd129da6691ac7957cf5b392ac7e9ec6699ac6d1cf2817b5295ff328a71238aed3344dd3bce4f344748926344dd338ae2bf9bcef4535fbec7df67995d2cf344ea323ca754ffb689a1228a59c4639fa1cd5a8c74de396d08926adebb2ab1d6bbe846794feb5627124dd3b47b9f7eee68898e466936e467cae9fd208315da252eea2d7755dd7755dd7755dd7755d97a6719cd6c1a0b4aed3b44e139188ba9e2c48057a52d791681a1755947baa048ea39a96691cc7699aa66954a39fd18c769c46359a699c0d9d0cedfb674629a594669ca6659ca6699a46356e5a20528b5e0aa20e293970848c59d682a3971a937dc986b2493e553efcf7121011c6a5cc70025eb76963c7ac03cfb9433ee1737ecf0b6a4648c7810da009cef4631f691c85723f39993fa84ff51bc0991cd551d1441f7bec461158bed6cdd8de9f6eef99cd810358ca321f8c86005930867dc7d69119f69687e83e508eba4e92fecc220f9cd1fe4ccaf939e299699aa4f3ca0b7f6cdb748d13f5e6c7a4dd8cf92d7fc89bac9331a7a3dafd1ada6cb061150205552250e649a40e9232bccde4a84ac0d0d42ff10623b510432336a4bcaeae7b5abf44f42dfaaafd25a5fcd6beebf9f4e76bbfbd5f42aea0c2f43728582a275adbb7cf0fb6c1fa4df69b4ce495d41e47d5e4eec9b04786e47317c15813e90ee2fce692dc7b6f0d1d0f7d43bbdf3ef76f37a2b2cbd2c5e8ef7efbbba292327a12cae84445f7c8745fbfe4bd875efa27f1d25fed66920d17b64b564390ca72b7d744d9df10e1ec7be56679923bbca572b30fe1940b516e96c1d96f4697869bab77efc9bd26b7bbdff5ea779f4bbe23a1df5d961c7dac7433ba17ddbc3d7d15c8653662ad7de08b8bec69a0279c80301809fbc748b547f5ef98c2d8efc87ba35a4d1555c74c22ab944e86dcbedf6fb24cd3ecec5a486c8d3c55ec311eae058b0d61ac881069a57ad2c86f7ca43d6ced6a4d60edb32ef98dbb60af691fa1a97b220cf699f6392416fd0d1116414cd2185bb990dce12d1f7228b25be1ebf6bee4e9e7f6f96e4a17a3e4e688d8f371837df7c48a5bbabbbbbbbbbb471d0f2db234743344df77c3c1710010a5f6e12ed35f351a527f3a188d69e85cd5042bc0526c792b3843f2d34796f363cb4bd715fd77453550f4dbcd5d033c5f23113d89c8bb24f73bdacdf0aef4cf647ad5a4d6e3d812b5ba94286af6d56ae5590ac7d9883feb73a393f21c4098f9d5b6d00e7ae0495a795d688173af5c89378314bd821d7f9c484b3c5bb4ea8f8c8c542fe22a1c5722d1ddba19a27755c7c0950cd195a26c9565243a4574786c2c4444ecc15508a0cbfc58238524864415fc90e10b8e4bec4f1cfa812ff33d3a81091006a8898c6688ba17f3bac837918b44ed23bba93aa3d4ebe88874747474b4d7a13faeb60e0f7c893f4cfcfc34918ec213464e2001cf7f51a3594d9a42b7572dd43ade369b27fec41f1d1d1d9d1e327f43e1361b71f5523716a04b579dda854c8ada66c0f3e711783e8d1470af5a08becc1428eafc1c5bb8c6f5f4b75b43f438223e125ba2dbab12ebd608d17bb7165ac8e698c251b1e85ba7079e3f79463878fe8ff9221ce0f91e6d80e74b4744bbcce73223bd3a8267af268d4a7b842a93648826cde71a471f38a3dd17f4e288f3331b312b650f493f003584a7fb753d142cd56f9a3cc2414897a8928711383258b3651273ccdd5dbabb4fd6759a2cd67cd61658d1d43f2f9eec3a5d3424dd8cebe577d74bec7a497f7201966018e61478badf489b796c27f1cf761c69d97242f5ffc9c2ec6c9aabeb93d7386a66b70176ecbbe6dda6938161d864cdbe9efe45b1c6b00cc3b20bcbb06b88440c4c5862094c58428cb11d93355e3548c0087d154651a84f804ec860170980a52c86e39c020c4f92932d62b20e96248b99b16e300c8642b2a0c21be5289d0f5710ca547f7799924158f00b36e649a652344a4c463c227da2469c65648874ffa8a68f2a48c6f538e1ccd3294b2132d5a4994ab1583e75d654cf10d1e71984b32248542781005132e52829aff2d083f094c192c5557a69694ebd68240bbab05a13aa56190b4f2028f353656458c84097f999f4a954ed9280a6c923c2e48983e7d3a8f4f2eca6b20ae1842d4f652aa72d56866522969347344939925284bd94dfd9efdd6699c23278e64a8242a1ee94ac08339fc747378f6abd19aba5badaf53c47495634394f84999fe249354bd5ad542aa552b55a1be57c62e080fbd434f27b1a5e6a958c97bae5a89ab55027479d5037e219b4dfa4f4bc0feb3aeff37e823449665f7f7e117046f4f3a70b9a078e012c45d60be03c4553f38830f37700a1b5033cc4039224119024dfb30d80241a3d4017f971c7a83594ad462a5593b4fbd91648927f91785ade62d1ead1a87a76f1fc705ddee7615df779988a57ad8af7f2bfdfbcfedaeb138ca68133decf6f25604b61ce39e97bf43def3f918501b1e8b7130d1b228834f10868062952dfc322be9fdd0fded3df3e6bc48ce13dbdb4d6dfbe2abadee469d27cfaa29f4f230470a6067def331caa3662ef6678ff79ff7d6f632a0ab93148ca166a8a172ac4f36d744c068778ba9b11bffb41ec4d25a00b8e147e3024073f34e8f9e8df2802d7cfa2ef7eeb44df3c05e1c7700949e0c11bfca650a530c43a300b15c511fc3d3685ea331519df7bdd6f94eb8e074db3df6f1a27fa29faeeb5df362e7630bef73eac93e1b58844572546e3ef7380400786f8bb39624f64bdffba96ee85f7dd3c6dbc3b4fb547f53eab76e338918dd8c32131fda6f15e7a2fffea64782fbd97de4b7b4384650974e098fa1e47cc3125b30e9c6193e48d3ff246f99fcd3c99c872d13c66d008a84656098939371209a110a110128b796a9789a56290a6e1f17e3707e0c526e2e81315c6d49c4880a5085d681a4f222851f09e90a7139367c7fc31a78d37bd875ef634e2842c1b15fb2c7399a2d49250db51cbe96cd46ad4526a336a316a2f6a27a536a8c9eaa7308242650214f25809ca94742fb613eee404f6c907cf27320af239b990c9e664c19407f14fa6be4c6590264d9962a466f7201d935bd52a38537fbea7b269535be611929f6f832b431870b722ccfc4cb998b3fadd5c47a3ff2cfc60128642b2e0036fb0218c9284fad4789a9f912a8b914ccf4f64c29341e69c382b21d24573f13862a4888af4f35086c5361a753170c0dd6f3d324d9aef02be4cf9d0c620cd7d76d234699e7c525e9ab30849e8898c82f07ca01489f43f1ad5536a6ef4a7c6204d9a1f534eccf9f3656abeec9142f0fc4c025892ac1a904634392ac2cc9f33982fa8842c587541f154cd084000002315000038140c0644a3c178288b535dcd0114800c81884672663a92474192a3200e0308110000000400030000080464860c00f15574c39282b5f117c87c884521baef4cd67316a23120203acc43381a1707cd4ebdff2ec356b11f98f8bb54870108f72e45faa5756116341a717da3c9d55f27fc7a2f2aceaf0df9b692974f426938c16ca663cd5f4ca4c56468759f92fb7abb801c47d1e8b4a43e76da9a72cd70ff5a9359fcbf7066ca3d845788994ef45a9b877cc2946109507e67876f59599423f3056b9490243415d456f44296e75faac4c4ba7dffa1816bd722ce29a58ecf9eae4391eb8d9e350d4e45348a915d86e9d1fd7d825f3ea9059a2508fbfb4ec901015443765a1ab8307b276dda42a338db62b9eb72f43c84b216790af1caacad850e8623b7ca5a146553aec69809828cc9e4770b857573223298304f2b1e600d12ab9a367c9254b1be39ced81a0e04225e6e0fdfe826ff4fc1b0efc84deaa3e6d6816b28b8d3880ab41f47d049b5367d03ab74ea5cf767cf05aecbb3f8cdfd0e4c2c85970729d663c06750bd946ea1d114f0e4ecc169a8c3a12bce618de48336a3624b188b9cb35bbb1ded9dcc7c0bfe23061eae79b3f4a3d294004b686243a9def891f9bb771a42c847f4edaf1d12b59675f156b87fc59bc0f575756c6054c8b837b5759da4ec37e7e2de5db361ba3fbf047bec875e96f20b9ad80e8e7f25f4ee6cec6816a1bf835c2ee5457167c0f7b2285b3428885444639aa1f4893c705058339ffefeb7a79b3e56b027b703459203b52683a83a0f75e9eb78e65c5bfd7d763f8f157618075428364bf79b1289a990db9daba20d3f2a0508272f78a5f2913f7784b3da612f4de8d2da67b8bb763738909e44417c523814736483e6c3c0083a3f469a494b57a0e88625844d5b2537ce115c309c7cf88ded6da10b53d0475686f48ac76194320d9adfdcf3f4a960c06f4db75c7fe1d0d17d81a2a168fdc799fb91ed22617d2b6833c947395aac1ddd6718fafc77673e2e5d5ba48cc57223569eadaec40dac37d075047a2abc4fc8c9d74d40c24102c3677dd5335533460c720517ccd61ae6490fb20de8cbe56bc01e4e84af591e3002f50532de8e34a8e4918d74a19e0f21d03352b60d24cd5fa36ef510a4fef2a629fbe4f4b4085466222212b7ce817bdbee963ed7b8fbb35c26f2afaf3aa02c7acba0517f1a811535e843f79a76d7c682e61d44219142c2420047b7885d429cd2fed3bd144f0e63163a33787e2954a373248afc0885e6c86f3ef8a1e16b7cf276119b81aedc842665ee1944418adb295f67b3a157e5542673d6ad0db6416fd0ea450a635798e37670c75e181ca342984a664e0ae883f14cbdb67951e6a473180acb8d2110316b89963683741b4f0cd10d1eae58ee3a34a55afd3eb85ba8625f2939743f496ad8b69fb4c61c12dbed15c13f1ee17bbc2f258ac69a24e77eeeeb7c1a6145729f8a157851a25bdead6186d0d855ac26852756910439de2241d3ff47c6fabffeefdcd59a2ca19a3041f7cfd6a7550077f487979d6c56987804987ac7067bb7965844b57c97d10266e0d6c98c406a98a538dd54c7b4678fe4ca176f939fcf027d38d86a2f99ee458988e23ba27ce11ba9eaaf02ba0dab4f621feb274cd7b61bf60ea510f4567a078dd9c517be2f2aee163f8c5f0fc2a24a0f3ab7f698a407c10895b36b01a5317cd4a1f44440e8844dac8ae1b92d7484dc387aa3ac0c664c9a6713652cbd799ae84b6307fdd33d854c37ece5a621b66901af377c3855c1fd109141a192bef12571297dd11b7393a5b7ca9c895ef746044c379cb468d92cbdbfc2505ca33b9d87111ee51da3b1fc42e857032d939e6073d973209f0163fee8c5e6b52657e4eeea9eea0539a88e6ee612ba73cc6061043cf72e125db9d123833d95686c229a596f2f80c06c71109e28cfb54de7fbe19dd205f697a9c0cf9133619d3313c38cd442051d05730533a16d174e0008563b4b84a9fdc6dd04422f5b0606b05896a142a63506cdb4eefe1bc55a61c087bea2bf01e4ec06f72bec2db940214c19db2fda092c6c8cf88a78837ca71eb483e2b33ffc5ef3ed2ab0bc0251b943a85ec18af93077a65455c4d05a19f1e916d4dc1d67302a8b1b7b7ca322afe4b4ff16edcac5e0aae3bdf3c36fa5dc93a4ee9fb4b9bf842d8cac7967ac702ccc59c9f27cef29ac1fa63a87c220893f90c4c2408425786b6812a21e32571b1f9298a74535a7b18761e054ef524ff2ede3ce4610ef34ee3cf529bfd97ec88d6514e1010861d643a3d937e15de87d6734b79200fe63716b64200de9a30d4e3bbeb9c8f5bb8a33efa876a4b00033824f5bc1f5f4dc8539160c8ed7850633d8ea346e43724675581fc0b9e66df1fa79b5e4d211672664f9c5ed49d383c15c2f30da6995a75d78f196dac1f2067dd73c84510f15b24301071a2ea9da0fd9b0937ab7e864faceb467b9ac13709d5b25086ff70b9886e46546ba96439161ce6b962ea74115960cafa01baf856c7abc03fde711141cb77a464209d8095313b4a1b52d5d06572b1dd95395d2514ba29f2525252f18b6baebb2ae77367ed75055af6c8e1d1422613e80be3bba82ad95fede01bff96ac4363001b980f5dc2fc097a266f64956638a5620cd0ce64f89eb2a5c768d99cc6c033b984540eef0ecf1f166adb0eae6fe094cdd6a56f25a1941ffedbf40c6967f0d56615f4191904974a1fa19a275855fcd2cadc306b50a82566867232444155d64cf1c9811e91f3118bc153fe50f8da3c73866c5cdde285eaeb674c72b588018e42ece0a2589db63862d71aab912e7786e6d46b1b5b18a1ea98ca40937a6812f050e74a81a0ee48a51c8b7cf1c4051f85373616427a307f23b7b892bd14f28c73778dc2801a8c97c2ab851b6f68253dd3c5b54367f21344e528f247b76846161ab81896570a57be2f9c0bbf7c3bddb0ec68701d78b573622d6df09a8e9e6265142994e285a9f94fe54479096ec302a05022903674e00bc557b6d2957f75edd734f82c020fbd7dbb9cacf967996c2f02ff98c8684aa45504fa3fb95589546c3095cb26c9251f11d82897c3c84b09dde6ad1ff43ef65619d9246d1c4e1aa8f58d3f0ef6c2cba0721fb5fa9a0109b179e988b6fedd1366da724f99f0f45df55f5878cfa4e39c52422be250485c636c12b9c6b8b4d140dbbabeae0583ddba0e7fe939a9c6345135f798bfbc675a97cc4fdd490cacadbb790a54a62db0f866c4b58fc2f950e00aa71c62e1a39d6d3b1d3fda1aef7e7dbf841a2a26c72b227e831c6988829b3bfc2df03be788d5183009510a01da47d123dd1e2762de0a22a3f399e400dc39e6da837d0e0afb94172aba35c7a16cdb9327d29d7f00b220fa6aa33eddf9a7bed9ff319fa9518cad20eeffdfedda82ff4f498877f4134ba4dafcf505e90b69c84bb78f7ee22f599e1382556fac8fd9f5f7ecd1e1ed39fc78228d79734f352f303500b3f29d2b028fe43a709ce96332928aa51ff7ba1dcd3ae1bd722f918a49f2965d94a67738a917dfb9db517b00fc4686ba7ac9b34fcb7182835925c26a03b6948d556568cda2d2badf8241b055015b5befa7bec815879a71d3edb348c26ee9ef659c5c65edef46f597f04962f8a74f31a64bec72fbd15f317f56fac8ea6799c72c744a992cf1e71f5855445516942a0417e136c0623b98e93f7a1ccaeec13a98ea3c873240272c97b12d14103437463d731abf0883fe71751f6368a5ab79f1f8011f33a6c9a4f6ea7fe4a65a0b13c7f450012657e75b0c29d23ca6ea182cf4ea94d2c07cb285c6b5eb667ea8e0cfac72077fd5cb351cf6c71f7c5909325c04a6e1f709c5c0c63451f120e0c45671f3e6f2160961e94ace87c18eec93633003ba2befac7a762d8282bdeb93774a49abd4761f28971fb2cab14bba48acd72b26acbcb5a2ec65db7a37507530f9ad5edf7a4516d8b42a832a0a507ad88b44afc08cddafb5fdd40a85e9ede0d9ac84e45fb33299b54c41aa94e9160e34051bdfd9bbd2670f17f622cbee8a6ee5738b5f165498232d2766da020bb07ee90d6fdbd21fd2a97080ad741bbcb80b64f29f418f60c62a6e7559e6448ab4df93a2ca045eb8c6ba75ce4a8e71755a0eecd4731c088d32ef89cc8e842cc8e615ccc04ed8e51310be083a52231d89637a121918503c3e8554bbd590843139c2e521de80d8c3da09b5eda2bf2cd25bb382b7acc3525823df6e971894dd33201b6a1e32a22d7235b2e529d743db841e98e7bf7edf2c4c429b5adf666c986ac2373e4d0b1f22a383c165aedc8b777327ceb26ac91b81728956ea783a538e040738414691550bbc9d5c250fe02d337ec6f32ee9a5c31866016969a6dad665d109be622704a2cfb362f2036feb59f0fb515e3466ce66d67eb6aaf658173e71cbe05a1f4fc73f90b02faeeebea1ced5d284019b2398ca1bcbfc4c067ea1c53f2f8eb34ba05da9f09c65ec139afacfd76d59083916229c84a276eea7e18e74c4a9e8ce43efb60543c4affcbaaa0d681b442bc809526282f79c956e68b5d5a009f557f6db5fc5593cbd124d0fbeec4dd7a530ebeecae98e7d82f7b744963018d394f366e38f3fa2b84457a74c911fce17f31471a9b3784ee91862a41c5cd09a558a1d186258c06bf7938705687a33024d93159c0b6f4555bb69806aed278eab7f6841292712dbe9edefdce870e66200a8c360b69858c7a4bd9896f401fd506ee45b553546ec89ea376992a44d5073af4c261c05a5111f7db4a847b95f77cbc3bcfa6a62a00b42121e6dc959ce32cd6c1e92e403e4dd1d9ab055dfd520c095189be2b2215bfce3cd6e8f0e576ebfec4e0ccb5035970c7988faff832b42b48faf936e3ad39ac12157b6c7adc6fd5e9b61079c9c91f14319c2b88e1aec790edb2cadec2530d16c31a4b6036a0040826bb06bbb0719f1a95152a5101e8312ba6eddb4e6c56403195b5ee817bf9551ef7cc1bb34e2a284b335ab025715b84076eb97c07ed7de576452ac51f06ed23649ae0f82372cd09f3bb056d71519a763be286bda420b43de0a8c51980ca7882388a846742d7e41d28a8fe8e152505fec7a8a723a8c3a8ea0f2eaa173e0100b58e3a147b608f8392713e60ceca22acce80454257295f9910a51618e3ae40f80d43e4b8c32f61bb3f89d7833e1816205a85c2b430dddd4cd38a46cf09a08b12a8864a18cae7cf8ab643bda57c31a71f6f9795a4cc0e8db3f2cdce80ca3b634039099cfe0daaebd5561c33c74698f36b3d8eb65d5317ad4ac958b354f5456c56f37ac3bb5f5457850a5c5668c6253122273c66f9713178683622e2566e185fdd88712a7a8a31d90b19839a8824edb57c90838c93ea930cd6444819ce346a19a3b58b19c42d573396de5c353983dcaa672c3c8ccc355c130d6ba4e17eb54a22151be417c23980882669be2f624609868903ab09011213eb0b3ac807512a0e32005fdb72e829438cb583ccc37b93402ec4fa0c0037bce6c4047644f4f5927f304a9e63145d4358d0a0848d2fcbfa54029355b885f4ff14068fdbb1b50f1311278836e8695b482fa64852d26e6a7116b3256d138ad986d34ba680b67a6b5ea9247c466a563c86f4bb0b535a323fdba89f3820d92fe06bf70c39d20aa079d074022fef1af042381df2936d2f8ceee67c1f36ee5dc7e2e7467044a273717ac78128dc6b0f45ff761620bb045de5ce14c022a75bb11d2db01ef710eeca04e05eba1562a0ac7f54e8c7c25ba27ea00482d4f1c0cefa0a8a930b6fd9886796717feff002e5635dd81602c9899f82b97cb05e87fb0ee8ceb52e75126a07f4fd4625dadb21cbff17f8c9d19702206c7057a82f47c502aefc85db4bfed1738ad0e79a3d145f031c67c0d19137aa52a690d0972e0c81b9aac918f89f84c246128cc0347d0851435312755b954367bedeb2a47c1122f196a55e4598fb628da19c5caac755e3987a1a9fed6672a90ecccfe8f39ee02b76d5c35334f0e2d7db30365a5feea4b85762eaef96672daa6ad137c4b047938b743d5336798984c4eee56e50e4759ba12e5815bb36df1672e083321fa00bf2f02e4cde9385f186abaa1a2724ca607aefc46b6af853c41f5d504c563999f3ed6015f0a260676ec381d999ef01b21c337ad76cd64681c0b36b6ae88830d1587c80441a899bb71aa9d783e66697927ada2950807b2013090340340c2096d309cbb7ed7f34d9f99a742415ca93e7463472f1fc4eac1e701bb5287f758ea6695d25b46fb44d840f2ab8db7accc145da5ff2eee7ee1730779d47b0de739f5270b8db1073b895a236a83c4b857b94ed39d813788fcb82486ed4d163bbd198cf4c3f1172fbfe2bb0c678729aab0994b53ec749d008d77ea1c9153dc71d7b4c61911ddd624b33bcb2f4897a82c7d6fbf76aa4843e25ae9dd239fcad4c451446eadf066504e7ff136fc77fef01bdc259a937637fe53ab632efcd3bd662e5d008da1e2ceb6015ea1606d004ae49089b3585c47f758a4bc6d5ef6240915dbcd6b288c64931cd3c2192e9e69617164fec8c812d4bdf22212867c04aea13e610edad3d316a58f7be73863ac1c9a7bdb545974443c01e67d492cccf66b1d71073aa78d9539d2059d8ea6b6fd8446693978227fa808940cd1e94eb67027444b02ca6f2e071983fa4e6cbb587ae0b8f9c52a49aa22ac4c1696d91e3684cf26fd32c1903d4a9e7439c8868748bb0ea29aa858995f3194698e6dad3e244bf7522ede5f8f69ea0f10984f2d9130bb22ac8f33228b6cb7256466f7b6b7fa6ec9dd74ef841f8582514cdc4ba51c6be2a788ad48fe4b1cbb033cb851f4b83e3d4382be8aa8d0e0e4be0dd5420d86a30d3a5e7575beaf8da06ee1d2465dc4e39e6a1df59ab078c0a9676ac189c589aec6cc7beee4036350a8ba37162adbe8dc431dc033cfa27b9fc5d4332d65cd59d63fe05d0e3c56d4c01f42a4ac586174f4a83402f3710e6807ce9a551873e9d255636318e5de5ef56cfd78e0192ae5f77e50f887333042112e9bd71f738c29c9507f83e25b3604a91fcbe31701c789e4fc544c0878646e16be31c909b316c152cb4fe5a6521493fa79af62d053965c32d464ec590d74532686a29b3687292623a25df38c4c8350c008223c2cf9a8a52a4b6e5baf3b2c56c9d8075fefd2d9da2262d0a629b02cd943d71a6be97e9579325d37b0b27b48413396da17f9e0a73b3149369be21cbc9f68e25b45a95b053b5ec29f9d94c42be943bd973c0a472a27d6725471e720ca8cba4a603accb9d2fa6dc58f8b52473510d99ee2a297e598d7b2751f27c3a1633004c1dda161493a616d224d3c994d136fbada6b4253bac3dd60e6809d149e332819e69526920190ddd801d032882a28e3f28efb9115a94371e0bb454fe4f6ad50671c84610d0069421aa3790689db7bdd3ec4c0cba8b1f3335e4fe285bccbb428d0eb6372bba73f36704dc25342dc6f07bbe7b314fb0bdd5257c9194ff2178a27790ea5a4f1a484902afce31217677b8940fecec37897d5cc32407f35fa3bb4ea148400338aafdbde323ac4c61d5608f8d88b4f108ae6deada15cc1f4791b4f5531a48926cb02bba4daa64281efd0173a0cfbe595a369ff51c2a4fec65ebf7b951d48279162af4d8889d66b81d0f2328e0c94b804e2c7362360ffc1ea4d95c2c7fd526a6697306f412b702df6ba47f5a210e0a9ee73dddbc49fd1446064516defa0e96fac6d2e5bd955d2cec0a7acb532fcc9f4c948be2d245e8a14853e05422437484137b8eef3dac68291ab9eb35e8973f42439f3b0034c9fae498f187a1e1966f34b3724b036c1b59eeb0f6a6bd806e4510186ecfee30d75bdbfb4abe33cfd4fdcfea1ebaf6f0cc8a90f726981d7e5a4b5df386fced8e422fcfd70af7ce11c88063c900f1be3ed01dfe8521a2a7003c10ee2cc5b221ab6a14404cade73e77bbe5cc81aa95778c4125e90eeb84b62c0fb8f7809cddc42a112cf04c955ab2af6a63d569b341fa5e437f61a993bb78c0c904b5ac2233286e2fd5b342567b87d1558195ac9e3e324eb40401a950bae283f3ac7e4699fde24b16ca38be938c731da8e4687b53d0fa318da4ba202bf44f5ec4f14ca96166f4b18e9160c3234a532fa3444558fcf39766ca170360fb1417626b4213762bc15fe53bbb3d464b77367bb79b977db313309e8a7f25083b767a44e7d45ec595e0e9751c460102b1081eebec6adc19ac8a18138eb066a8b1337aae87080defc44628ca70d6753575b96a3e7234999369f82286902a3c0526b3e725f6fab0ee4e147a10139df3f3dd45799b5cef0a187f7eb312ae9164e1d0c08cf37f0840370e334ae1bbf21627359217885b298a04631282e3a60910abfd0409452ca85aba2c835280548b9a3dfff84a1632f399af96cf914e6d5207ba21bf70187c8fd7395dba36c951577eec6559cbc49500042ebaad12a2b8f1d15da14bde7e29573e20a6e22a32dbb7abd084c8cb59f02a912e37c28f3cb46cf48f40d667810c6bae553a963279b9a917d545e28b55d32aa69bb32c7f2142a4bafd58e6a2e338d6b928d01334f78bd2c02959e31feac74b9da5a44f42605abf24ba647c117335bb3452d62b75e52770cb751d1ad2a19fbaf787d94ed3f94db31d693f04555ed3afbf0bcf85594c44df674040781a5865e04e8bbf9f4de16c27c062b299b130b80ea3a89c2e51914441432f76177702f95458f90f74193ce1ca69d5993938d17f39332e0745a1ad6778a081c754071fcdbc7e76dc7cd37489875ccbdb2964734f2c41ff0e6fed4277afe31c927ca140cd41a484a4e1866c7d7ea0ccfc31bd8df3eb64abd9d2575827b2414076c4f497d0a8829a57fae97b806913dd12105a27803a1b0a8b927d840f83994cee873e971ca699a8799a4619327f96c1f362b9b56c3d8547ba92459069390efdfdab9a647953ff04a096858f5ad19ad772fd0caf23ed6f8b683a3b14bd213752daae8c4b81b3adfe8345bf1d67bf3ac50016ae1cadfe9816f77a7da3f578fe0c2415ef6bf019b302cb97686dabfb9554225dab6f6b7bfd74bce05a84dbd49d962afe306505a07b434e999631d8e2ff8c15d8ca2ba86848095ca9a0885e3c7a169f1ddc10b0f4678369817eb0bfe1bf7f297fa0756690e2a1d9713d8d1db0d25212f85638aa742a2c5c2daed48a42d47a36d804207bd38e4259372a0275491c53816a4a70df953e9ae7f09314889290fb40a9e1930e21b00136551499c6aa53a6000535fb6de3138db560b855bfc5854211976db5e9ca1e6c92c1dd564bc4db09cc597037b4a49fafdc7ee6e6afda63b12b18a3bd63a0739947091021d7fa11d9ee0cf9f2ca9c6c3c069b8dde0611d9943572ff37a7daf2d812d59dfadf9cd25e1c5bb61e3268f54214b445693bddcfcad4610b9fabd6f14894c01e1d1da3fee20d36d1471c058b103d51a93538a93f42f9164c2458f1f4d9da519226ac4acc5d3e8e2211a41add6ee86eb33d0eeac80377c203d7ac1bac48ac56272bcec40fdb60218b74a49c799c6752b40af944840ce53b78d89628a92ace322214ab4187fca0745043d45849d73dc81ac9402e0c1c84a91c628a76096d65a82bdcba05b94a2cfab8cb89627ade6a3c3daf5d130bc1284acaec4fafb84345b41089180775ac9f61b909d30a842ef5e6179977bef020785365db17aebc2eb6f942165b3b374d092f552a3e72771a1257ca4d80e2717d2a491be1ec63fd623fd45a8c827027d1d29173e20812c1ef54ed075c2d42160155a26d565539069d4caca77987de3d369488fcf8e61d0c4c306c666754453e3256aa1aaca40930a2b454f5040931405280deaf11475dd14e6c5c6b7f42f9e72250472e52245415ea4ed78be3997555d0138c68d754a8ae9935cc4281d21b44524388d9cc8a654f1e88106f5fb7c3228b5e9f08bdfbe7ff934ca4b57be7b8e50bf3696cd00ff80a7b1390b9f685ed81ae97d7f2c192d49059026c2d31f55a26ec672a005855edea4cfe7728f271f3603a20cf188d64e772a9a60f489ba8b93f4152798289643e6bd41893c9816d5a4abfa4811cdb536a238a2a563f3145a39e328454a3a6caa85d164b7bfe6096d05740367701e2cc0a087799d8298ee97f7534bba15935cf5cf73adfc97a86c780f77736cf89a9a0cc62da5387457cd860bcebe58846af5a724c591583911e8e310298fb90948abed17c6b9101b576896aba07161187194fcdb7658756704429bbcec8724a108cd2124da64ddb392ffc09ea84b698d3bc597ad1d5f3f0e40a1d150339fd5e58e57717deaa7feaa646099e374ac5b8306be4bd2981c63e8e01661833cf7963f9ed18bd65b279965fac8abcbdf59d05330ae0f80e60621c5357292e47625226445d1d1aa31361acf5caa413b0635b675ac60c6fe2caf56f5432b9909e1b1c6ec67508c47621718f186dd42531b317ed27cd1b51298e3ee7cf4ac5008f6f937a8673e35cf3e73b7fce4c85e81a5491d1be85aa863d159147b0c2b0458f3c7d79e44954fc4ee4703e57744ef685b7349e3d654a25f45631de496dbe1d46860cf45220410a15f0b6ee12d4769740c8d8df9c1927414d2da171f84a0d6157b1d1fa59e4b4699f3651ff5645b521066f43010de5c90477e0394328cef650376a3fd99d69592d19ed60ae5e69b0fd2c1057ac1efe9e5ebc8a5f19ed6f31e1dd751f08ec3617a1f8762625fd41c5e33fba4f805c9109a2f8d72513a44667d9c4472343af20f896f223c5bd2989d27880366f5bf565588972f54197d239f546d7a595ab8890cb728c79fa274260d59a6ee7515a5cc8816eacb208401192990f2fd7f8c93fe6a11a89ecd0c5289298231282e610de805483da9a1cf819301e5a6f32c4a0604cb0bca5caf091d1b75537b7425e6b7468059a7ce3628bd0fd97b7fd628743af6ad13a2cbbc3b0679c2c8964696fd7200415eb59f25caaf4dd2e6baaf102a3486a243082f627ce82f083aa9c841324cd5add0c04c25260dea10b33649d77688ca47b795d219bdca171529d82f503262d210e509723f76686c04a965966d92629582829c240aeea0c05f3c124a362cbdaccef1b5351322ec4b92d59647179c790fc236168be90b36afebb3ce0fe65947a2bdcb4d4c0ce89a4408a67120a97218d20c91c8c969785f2c9674d468db8a68e7eaa0faff20559f74faaf7eb4e0950147ead0f407ea9b57edfe5b58ddc721d6df4c15b719efe2ee2bcd10adf0f07a3d911454354621f4132bd14e68d42c7767494a0e7786094e77555932db49ec0b043647e10fc665ee75a6a8b3f10c88335ce30c7224870000306e01dcb03522913273be1d750f56dcc384506c3034c6f9d461b65fff35778f09f3784769848972b952f605c7f4cf8bb317e12997267f190b77801ba54e8d113ac4b79ea8d714f846f6730c8e28924e50a32b9b8123289046204df779453341c9a05e05813c494b23998a228dc9aa498cb098b912449b3234aa307af70d7f9005afba312a4fa0512a69cabf305b554ec6e48fd497fe9edf872037e9a59b4414e1394741f8054bbbd4641f9642dca08049d14e7247e93f24012b9da9148bf3551f6d0200063c63b7d83ae04763085454e8a237431412d3c3929b028e28b668f1bb281d7376b21f6bd4181c7ca674fc4e59ca5ab200d1287300e88d0a816b47fc08f22d2a262215fae07649c92fe1ed383b92b310ffa1ed77c42b2b68e073a88545d7d245787fa55989f54bb416de462455d10f411a98a6a7cf24f96ff49b6d06eee9a7374964852ac1c9cce4d307affcf6252adf069035b6af568cd448f44d8aa7a5954d8807343f412a61f84359b67231de282fd8f2bc738bde6743fc8800741da92961da0104df4cb576723d4ee1a5ef241e27a349739d595188425f480c2ac9573716c606966fda62b81e6c2168655a3cead19675ce6099952facbbd70dc1757b8bfaf3a894a11fce0b9d9899065720f7c4c79223fececb3cd086cd934427564ba8c269f8d3a31eee14629d4bd70471ad80ab18f1421c50324ee97c9cbd8375ab1f1899e74db4fcda824e090ec6489b0a7540131895b3ca11461b2dbdd7bc0d7d8f039326871ae66fe4074bde6bf41a0e06367e25c604bd2603cb6b8234228188f9a71d488a7a50a74d0eae48a90e15f5ad968f517888265f16a450a64ae684b9229efcbfd3bc6b9d68ea91859fcd6e309223f889c71bdea373da2550dcb9a69215ddee73dcb0b38a2ba878959e603211f140d03431e01e4586877c832647260c22f639d34c75b3d7572d472ec7a2846a0a69aaa1437ee76e88502947b71e0b97109a2bd75c4619c7fc2d557a2882b17e9455f80a160bbf32e0acb3c22d6fe9ee88efbf3836d1c246b5c9731d94a196880f4e4c09c916b5a40a3897895b7c7c4830532b035fa5479ca6193c9213fb8f529795f309f4078d476207f33d201fdbd832f2020063bc631ecc00d2051fb1c729debc398c75578576e0934cb63e67f182d43a1cf19520bc4bbcff0f524f25151a39465acbc87d458a8aaff218b463b925c892852fef597866c2086bdf4a36b7a8fa05d23f38f40a5642b96bb97f8c88388a0d638f9c6133979b937955f22dc7582261d92eb1ef40389ed4f2c6bf818ee5c60118d0a179c17e2dad7bba8e685f7d3549df6e729433efa240156624c34f71016f2b7e5479036b3209e4d4e0f03207f35a1fcb16b8a67410855a1579533d6f35575dcb19444fd1e20a2dfa927424641df175c8a29cf695826202685a3c53b8346e3449f894c9fa6252bcdba92285064012652be64e3219ab991db436ef4c8b72a616da81942a5cc4933b1290dbf112383ca5a3666fe0785a2ed96d2318d27981ad2e01d6d9206016315cf08e04a9afcc5a2c9bfb020472e1a98bca5017410c65579da2019aae52f78cdd0cfe5dc3e66458617c46f9767588657e19804506c28d51045efaa90686146e599e02dae1abbfab0e087147244348631e4230cff24753e24828600a3149947111079831d4d78b18edf47bad25bf44d8bae2534c01dbe7d39845435d69cb7acc480ce3ad017a9d36f784ddf898ee3364d1c56c499313cc1b26fde218291c0ab0a0c581024d8483f585af7b8e853aa3dd488cd5db814452faadcaef1c19273887069b7f19aafbdb2446ff15b0872483deef982c0b69085d598a59d574fc7ebad6f7736095f0fe0c4126639259baf8a122d4f0f170025f0796c00c9a4541c48dbba94b6f3b80b2a4160daffd3cea21edf5455c4f098f76c1b90905a1e6f06c0ba36e22f3dfc70a21804027ea825065df2be8fe0f4eefdcc313dbde9ee467344b17dcc04315ed3c50990a9879b440cb8a7bd000d885e5f499da2440c308b5180f1f6a3049c3cf4c63fdcaa0658cae59cfe4c6fd8b5f28a39988517e0a13245f2563aadaedf9bb213ff563c425f5784744054cfd020a38849f261794abc30c5fa0ca84c21541437135506f8071906138d3d2abc2fbb6c7ecde8a26423d5a4250d1afc01ed81b7515c4c75825a84ed1737346360f3f2daa1adae99bc23d3bd38f1a45e346a6a388f9fd25a14a237f14709d79ec8f0c5894cb268bcf90896b8f2dc520cb2e9437bd00fa6f767cc8cceb50275a9eeb399dc35aa1c78c1eb1e4ef5f72a1b56e358b14465bf583a1befd8d37605e29355008118b7f18d4f3954290dc67416f39557580ef42fb9e35f24d1d469cde6b17061e286c5137099a82f3818a544d92619413e8f9cc15cd741199f3633a82d8977a5b52574f65c90acc8d65763505a0b943289958e2a8a708632ac415c2a9d9deaca7f2983ee1ca23ddb79bcfe74b11f8b3bcaf729c0c19f732920e6b864a76d82865ef5d1506796b518f0e2c15ada58eb606e56b5d133e5d5c31447087d01704b32ce0d66da1215a9747df1c4aabb29c2bb50fa2128b004df8b96dc96958ae85d3dd52743d6036b897da4160d67303ebebf58dfdbd32f0155e18a5d490ed81370bfb5dfaf9fc5c45ac40e1dfbfe6ed60acfab164c760e26328c68738ed7c5812ce9498ded59dbdd64f425cdec827e009fc15c77325001035f05c7b8fe0f9c74a62f005e59808cb3cfcfed242e843a4fb5b83153f016d05b7b9363a58505dfbf0e013ea9da9d2e448d8cf4b4e3fa9f6db018f22979a09671c4091690b62ee3e3da0a36a969ea1ad77f3291186b5347a308229c2ebaa609548b071653bb58ea2f5218480d57edada859dc3c3e6f092003610ed1e9ea2ac49537541fac198424c7dfd95b9c153f329045421c7ba24e86d37c19bd4b1589ad778e2e29b46e0615763aba4f81032e29bffa9674a26af8f172130bba438f526b8470b27b0866d1955a561b95b6012188de32aa42cc956c9d5f50a14e6f7613c376827174e9ce7424ff6f80be46dd7fb85723bd66f20b54b1c54044559454b0154f25fef75993264effa23d6ecf65dbd19f23db0f3997974c4298822c241efef7462d393e40d64b83286e44d65e9242cea185ab7ffd17e2361ee08cf09593f875a14f51159246040df2a6567c60d00b02d661c3d928fd859ea59f1b7ce5fd9a587e139aad58ec6ac220d5c9d8ad7b0a97ff8095d98b8328683393f7948a716dcb9090b847239baacf70659d113d4fd6a482dd97b2aef3eea4e31d71c4fde1f1831370b67061ec94ab8c1dd8ec0478ea090a4e4be01309c149012cc521107058e2a594ab4672ca250987402692f05255483b920204f0fa3c4c7e965b01d20c0382286ce3c6a9de21c14e94a484a18ed6091ccc7d43c58602b2a184a3f189f7470a15614528d20276d8202b45122d1404fbdc9a3c80e696abd84702ec54cb7024e5b32d159c98e26ac8f9c46b41588fe5498042a49734a95ed558d121e53400e0662999b0a1c93627f541eb4a81429d40091e24a9db45df10881e3d3c10c1a424296ff0e3c4e246273e0797dd31fb2164082af8ae4f416b13503c912b738747c1e83c40c4a42114dfb55de2e58884e50069e0eb1440d7de7d625d8f974488d34fc16cef8bc9dd01eed01fc447dfa378148cc4e23202c5774872cf67834c0132398f4d54b4c8fb76d17a46e32fc50fe891938afc26406aca3ef41c5060ad8ab9afa817ce9039e81471bf404bd5853302602192782fe27533b1228c94beea393cd10008217ed18fe6420ca0cb38b0f867a80fde3ca08bf018426f57a7a175feea45b4d6cfeca7296195e3017e9751ad6ac53aa0a0785356aa093c81b65a35aa06fb6e09f9725e0ecdffca03bf2088ac5bd952659db96cd577b8a6c52e0e6c8e06cf2bc07f4d0b620b9adffdb411ec2fb527b84677c22c3b1152328ac7ee4ddb51ac4771a39ec1920f71b2ebbc73a69fbea37e208e6507fc656a52f1f8beb0213189dacaec9ab779cbc411fb70d63f7dbcbdc906502a136e8aa0324e4b48abb3627a6a087e118777c822fa562aacdccd9f98349ce713490bb5cfea577cc10e5ae633a010f7d30437a089e486224be9bd3dc8e0b0a0baa60fcb85d81427a55322a996ebfad86bca9d145ca92a749c8abeb5ce75f20472f6e3cfc995e3248b6682a99c1ec95393e7ecae5baa430e9a6c41207932df9e60a9ef964af9590d13f9c9dcb34f40b7956f8f3685069c6c4c22d1a65087fcde6b6cf3b5216f0a5d707cbd8219a2e77b5075f380e50d03a261bf7ba0fa4ef3ce36a23ea2a2e8e2202f401fd0d4d896c2f95f29dd384f11d61c00c23290909d45324a4e92602e50c06b3b253e33c571bb1d6f101b6cee388c991585813d2b50ac5c45d3b11b1529353091ebf27b18f973673a099e25544b878a822ddcdbcd25b6697fbdaa0d4aa88706c23a38b0ce6493c37063d98585b78ab90dcec9db55b4938cb67608b946356e8c8589e4230766c999e2136811b96fed8b46bd8cc367be81fd0918d41549951a0a2a7941685e0e04a3b485218e77009a63d2160dd102c32209163795c27a297b517dcf5295b251164c1838d4b41b827a6ea558abaad1011ddb51d1a06e061dbc42c401b74768a61978db5b7d0a33ec2aa5e178a9dce0a948d1ce0b5670f9adb23afe554c0b0d1102257f30fa149204b449a8ebad40c88cfed556e6316753df439ec24aa14184ada382eed8875625edf034d0dc0dac76a22167b8ff62713250606cc27021a7fb6e7f84483d1ad0a19c8d48d089ebd8feef0a39ba045fb5ff97262068ae27c13131293d68f8d4ae5a9b64d0ea68833681ce0c8ddeb415d4a985a276d1a4d368c9681bcb029b5984d311da69dca15700342d9a0e9926d06402921972637ed5ba21cb4cc50ee25660191247d25574a27f1234818c534ba543a2c559b5e29eea0b399453a5dd17720dad0dfe3af7e10ce839d86b111721dae0b50f22791f965952a49793a71706221fb331a0a55e611df0d796efc5bce2dda8684419bf441a2c23405efe798a02f5d0c3f1672195225f7d8b012356585c6ac0ad69c64eb9712cbdfecf20a7b5c8756f04c2128066218d8a86a96045084566bd278a06bd0085f88d037dd4df371ea79930bc8f5ebbc5c365756a886e562bddbf8e867dff9f7e1725b06de63567ce786a284205d2b2864d1a922c77b2d7694a6e1ffc7279027c3188448b7509754e1a61dcde6263c74aa05c608e0989a4088b9348ec73282705fae615c4a1d8dde603b6996711dbfa6b3af5fe25d29dada993d9cd437a845f4bc00c6c15b7381a624c76f2a67a0b860dc8496a557c5c86b795e1f38f9474e239029269d6e5e2c8c9d143b51cac8df4b8d54e1fbc0d876bcc1b0503eb29b2b5835ee3a0217b8d1617992934a005ecfb4548a50ac02ebad1401b38809fd50b454c713d6864380cf33dc3822300a18711d538041c91a3f244cca3c076b74970088335d5034192e25c76f50ce81f1f8f685f4e5f1746d0e0b9ad7ccd115ccdbf1a98e1f03227a196b3a8ca5fca32171d5f0d4bb73ce9422da35e035401d9eec1b77a73cd6b8b379b87640cbb1ff4b907f2cebff9f19442f33877e858f11b815a602dd1d345f94501f5c8f22ea08963f1cf0fe6901a97a3cb333fd2022915011abd02e00be9423d80681251cfe9ad600d1fed5da7601ad4d7e7c8d9760b028d883f1f88e0a04222083c7d68d63d6727db25ffd2620d7295e0dd51b934d53d9f8010324c3569cec8f06403d06269eb9cf00c67f55b07b12409bda4476e747265a5f669ea7c7c29bcac658a6775cb8f41b6a065a29cb2d7c9729f1333f03c44b5549d269cbf1042519ee8126bae30597160d9cb260fac29f05e85b09a6cf7e771fedaeb1a31aa88e4abc216df535e6686c07a86a2e0bae76d80725a93b02e6931a7a5c34a912268c477da2818f0ff7966b4e6c8a49c229c2cb9907ce2bbb16c630af0677335a7a9c84eeb59a91e89e3cf2b192512f6b9b3f858516d7fc00a06dc239b009fe3e7a5e4ee7ce8912ef29398efba8ac4df4982337ed38c4f69be20a02ff95db2ebf999586e733c9b577c11998481ac64585243556cbc722d8091282efd1caa19e355d2eed1842ac99d8305b4870e781842731b8f688c87e26805680dac6a3504000e025b350d2401cac23c34824906c6c2e1f94523ec7160717240e46825f98e6aaa4c0ee8e229a4f5d0e0be1bc01c2acb387f4d631ff72b90d9c68783f8ec1abd4d769adc1688315572fd12960f31d60561a9dec5299b750bbd45376730b04a1a31b85d1a1eba9993247a243447fa804a125da0704497d024e8241447fa014d127da0714497d048d027348e740145129d4071442fa148d025748ef4015d2aa87d1a1eba9d93247a263447ba804a127da07244975049d02514477a014d12fd4073449f5048d025748ef4014d12bd4073443fa149d025f48d7401dd31fa187a70775166f4b22e1032fb0a8e5c5619ceca74068200460444b3da334382f14692dae483901dccabe3eae0bd31ddaa9af93596f8b5fb7493a0cd99362728251fb46d235d6c6871808b4910b162fb48ed666de3232c24508f918d6f8cd4de2c3179117fc0c958d60743b04e0c8e64f83887884a23404b2dae7f9177f05e322114363a216622c210e488d399d348988691394a2bc737a3db871a564e89865bfd40593a645023e475ff2edcbfc5ebca98b020a54aa958b9e2ba28e9cd01d73430772ce9c529992967820559f592d8b962bb29261c24eaa5628d247d949b24f581da2309df0c6543d443aa5d43ae6b2dd7876a97c9c0e711f18abf4da0bf1022aa4506431e40eb239a593059e6d993c7c06e371b21b17371c6b3e37da0c4895cbad783f19cac014c86f04b78ef075490e73d47633f084d38b4b381e899a8df1ab9d2f0750d50a81819cbc20a6de9c248ee7ea02650e8f2a9d5ccc9b0928db2f51dfe84a6ba19762ca1a2a17eaf014224ca715c40a564423000e5ac80f4b185c0abfcc0c4b771afb717149dd73057a42ecde5a82df8a9622294e3e923cd1fc7e6a6d7575947b8103492ad547d2c7047dec24f142e6365997330b278fc312cd599f1036e826834d075eaf1a052aa45d28ce381b275aed73f5e1168b06b518213858c38754080c3dfbdf34735c746d5ce0969c71624ba694e1db5507991367724a3e5adbfb5d0ff1c5f5802c7602268f7ab0454684b2f9dea80cabd65f758ae3ea27674cdd6874b4a9c241d5a82db6d16756e8ecb5c58950bbc5c8f9503779e414c78b0d81c6f9188ac79d68a05c78c3a496418a21ebda9d00a91da9b3d5b868c15a0c6fea2b303648d8dc2b5e7284ca01695c07d9d7e71c7158ef8755a945732f87558b545685078a3092c4344adfa66d4d035de30a0b8ad15e8ac869bf18fb18ed668bc49654286538c77b3f035909f6b348d75f4082028ef4c233e64d32b2e623d54d3fb17620704d0e316c16798cde9a4a4d8cee6a6e45ae239046a018497cedc6ba931c228b0272498ac7f10f0c85b5e3a335813f951aa48a7970c60eaf820573813a8e671cfb35445063f08c05ce3560f47ea0094d3354d80296bf2059c09e2719a6db3ce316ee0aafcf98c65c0bbbe32d4956ba23f20df2089784c5f9dc7f400c4cbc0d41648ea23768956adac880fd228a8e6379d2278863ea3ad7c008f2f4f6bbb553c8f153805b36b0d9a202071dddd3ad86d89411bdc5b2b1d0f327ed38bcd84d8f16c83a435113a98a9f61ab32de88036c078a53ac959e44d4786afc3eb9d8646cb05c59ae9a15c5ab4a67037a39f2ea484cbce7c000c3b3308ef51ca0fc8aae72904c8ed312344da1a025a61cc6f9fe3ee7df98473389531c0a7ad4c0227416fd30f9ba47a28d1d85e4b10a017e1389b9ef1c0dd66e0ca8f27ce38e0fbdc29b28ebb5d20ae6823be8d908d977f860dd369d1351a59b5e36932acd4cc5c0ab4f2780be91caa94e2301ee68d994e4a8e56332c3a40d9d4965e9e4b2506c7b492fd4c09d5877548692e56a0e6ae2b75c2b7e29bbc753bd3d146c5db5b6f00d45056ed8f823ef4b3335ea09f8543ec244431ac8f6d08e266b69333a269482285221033a8bec1e37feb9a6d1bcc0a74dd0103324462082d5d49e08c57119472df01bd1a394484057a32f95a7b5e0ab2f3faddbc35ecc31df755420c96e4144d9d2a84db012f309676b36562a870417d5b61c777d8180b2b31492367cab3bc8afcb83a3449a31fd587e5496249a3da2ba7cd939f4e169e78cac5f450a6b02022eebe8337afeb4e1831e1329369724a3dccabc0f3dba526156ea270f1c91e8e719d1246c2244e6ac6999a1c1df95861d9329b27861217ae27d3bc5d396ec8c0924ca5a91391695e22f9897c3900948b58510797610e70801cc4f3d35df952025b9ab5b774ec3efc73b6ec44250e290b728305f170e96bdc79bbf0120515bc750f0dfd70b6e4761d2f09ab9f4a9522a4441237ac7ddb8435cea3023904a9294d39554b57be7ec5ea5b544f11169a1ddfd52983182a5c54df5af8f13b6edcb19f1ee6e3e2bc861ac8075e8b5e2a7d016bea1f85697fd7c8500defaedc42a423f3fb93463f1c5a38539da7943c0ee6fa6b3b4b28f1689412018c83040222e3eec3b87375f5ae028cce2102a2bb2cbb8628655f16bf1c529f531d715cf37509ebf817a7cda8b07f5093af9913c5c153583be62d12b49d796dcae1e2c7339a656270e5f32ebc719ce38cf38f2bef028a7725658867502026eb691d165da29fc17002cb454387baae42d0af6d79220ed6c3e019712e5283edc4c1ff610e06aea4b2573e97dd0561cc9be8b019c416a0e5c1ac95cb8e2a11580ce6e3633d9a3d18f4b7415d31f4bbf5b29596c87cf3a9259327e1bd718eb43d34429d965b260c3871623f5f22b7426adb8c88bf803c5428903f7a5d9033795d6466fb89125a59bcdc16817f1687d540049c329e08093f819ef1a732598c490e960529ed3d327c580451e329230e34ca1e03b133bca0345230b41401f61d60912d6ac062ae71926df895a496eb7ee25c5ac8841685b4870992d50309c246284eb4fe681dcafb5f97a1aee85f672bc2f14f94c0463690c9c77749491a814980d6db5a1c6b039466347cdf249eb002578c4cd9ed26a840f59db547a699218fc3028577cc3bc5631bb2695a82612f4acf72c3e6951f040d8d839eba7bdf94936ab1813b149a5cce6022d5b5cbf09bf149558a04487c8f81008f8f1a4a334de9a3e188ff9aa0f3a38ba37d4d47a9d4b16d30e454b5969a74fbe7ae54c3a3137750d45feb377f31ff832a0ffedd36d45a4ab367751c60bf86e6bd9daf72966427b848113b8df0379987b1f78eca3d416ed70f5ce9eb47bed4e523afd4fa90577afdb095323012fccc031a10539656309c11b5c509d9130914c7b78e9b62e31c5596cdb934b3b85d8a94c5d7b95d3a37789af12d83a8e80f031033dd470009c70841d24d340cbf28e0769466a8914ffc568edc4b7dd034eca3511309b5c8761391c8eede01bc09da0880085d18220a90f201bc940743444182173e1fbc4b708895284c39903c1bd219218b9f9c735373ce20a8385ad9916777612301f7d4931a322587710e98438a39e65f9279b3326fa49cf147a4927d41842df306aa44988305b06545063b2ab10273f85037f551cf464f7ca9be903bf145ee4048c5e1f4aabffa24178f45d279a378e9095d041132042787880e4f8fcf8fb401723304278788ce0e129f9f6803e426480f12b8037520911c1904df84825cc868c80acecefb193d842920a31b5f098d9698629e7a474920f866a96649470749179145928e44961d4aa9a5d28d14648b47251d69477a827444dae2e5905e783ec02d1e0b7c232aed483a0f07dc11890e7da1b9933c32a89c704f338e5e268ac23814fa47234944fe50f8060f8ac23814f2c1793e3870483c4561dc3364f60c993d4366cf102a240689a7288c85f008813c4278280ae350e81f8de88a742381c816e9e6e6e6267443511888a40344d20122e9c0a0ce4c6d297792c88ea7b9934178368c50fe4c3c31e24871889c3dd4670a993991522412da48373bd26cc1007758ca9da45355d7d436d2a4f18439e77b46706771f0fcf9f1c1398d53c4fba097f4688708cb87744bd7bc44dd8d7436d49d19b0c5994b364e6489395e4c2216278e2c0e8d22b8a3904c247bf25463c02973c23f2dc6f0623f2dc6d8c1965904b50f9b65e310a4e14404bbca1e72577789314012879f0d354ddc3da6bd811904cb845da9955993c216517f3a22f0c2a62eb3883ab7a7d7c9ca6cad615397797a7dd42455cfba7a601b3ed3dc1df3d311c118fbf1d042fa1012783b6fa7879587a3c707f05a90802af3136577cf2714750745f09eeeacbd52e9a86189ddd93d794868c0a338a2f9f90c111f0e1e707e6e34f880708a28b9d9d3e238f17e6e98983869c0c1ee60147bca881359ba949cc8d28d884496ae075b45647945acd89301bbb346f64c892cf01807ceeb444551d484b1140ad17f8e462149e39725e08ea22c051370e34614648b09fe3255a2b4829c3ab88336ddf3993611fa002f6fc19787472b1535fdf43ac61879aa2f70076fa04d9cb480bbe7c383266e1fe803fc0fa9064aec83fae07bf0c1f7a02449f230f790f1e7d9d8c00b44204e2c1147b40a0c3f9b4051894ea79fd59c3d4e84e2a801510441438e0f91dde103a1d241f5d153fe2a831030d10226625013821b1bbc20470c57d8e0e06546110616610821348327d4208061051880e1058b83ef7e45c020436502a6fb1501430c9f1c93fd8a9841087bee57e40c61084315fb4664818739d8508b3044b1e17b48c08687a18fe2e14d7040cda46cfde61458ee57240c2a7617da46c071bf22614cb1573e23b4b2b2e3a978fc831dcf85644b07747a7eb490061468810811073b8621c58e3fc4996798dce06e148a61e840da905211548905f8fd4d55fbc1338e322560686dc0f0d93d13f65a7bad33515955f5fb775c2d6bfd5e67a25ef7d55e4b7f6f7f5fe70d9000a92255a8fc4b2aa549527a792aa994306aa1be94ee3ee04d165af0f3f2638a81cfcbbcd43e20174ae022e7e50715061b1105e8756af003212f3f261d9e178985289e40f2f2636201901ea2955a4481294fb588029a8a28305dfaa47df898fa07b6f332ff4382c2e7455ed23e7c50fd63ea7999fac503fc90aa8807e8ecfcd43e9ef6f1b28042163ef2352fa1788029a550e1211658fe3d092504824d09e58c17bdbf0d9f6da69e0d79ad8a9622601ed287cb34fab47fb1bedcf18800dc3e36d5433c22e0c3d0a65f89a377896a30d49722658cf70778f9ee03deb671e41263159c40c4eaec7429371e6502e2685e078d379e8df9996829253411714427d4507b4189a7325fc4cd401c4d1f1f48f1c0cb910295088243f8c91b0f87dcf3a31e228ba454ca04009d520e91141b471294a474490a3d23e2487a1c4977891d25c54bf2d26110192bcc68e0e52002fa205d7a061e0eead2b1241dfeecf844f8ac304178897e0a2901f6648b09ea99b0aa25bd526762a2a6e9b53a13544559d4ab3d1395adafac6ac9faea2b457a7a76a5e2e899953acb38e98c324629e35443233502154638811b86e0063758d6ed2d7bab161187c41ebc16fce29018840d0bb0e1bb78c4b21a2e7968a831c663b96629574508425df885ee833c4d440c859ed61d656922e2c83ad5d106fec4d161ae401255de8657f044cb3ef9f36c34813b99c39343af439dd9839363e4e1c86616db35ed37779ba6e7906c0e79d7c4f9be641b9e0d388758dafaa1288c6548fea31f9d5a11013f49439ec9233371e2084a114790da483987c89c21524c1c4a79201d892d92865ec02371042d4bcb9f6703cad8d3c09933adc8e199604c336ced59ee81edec2f775aa6eddd11ad757963ac24e0b6af57fe9e3212105a3a2d89232889c4117cccd28a6f8a44acb20d6e802d93a79b22984db040c6c1664ff3084f053e5a3d7f66ce121c733a89237320754288754bf7907bca892cd62191c862e111b9244e7f4a680617ed3e12e125844b7ee06565891359a014d10b1d259105ca20038e7a87bda5938032514729340ddcf630486481021ac9c9d18a3882531c1271e2a887c9a6b9f476897108140f87dd367c2cc18e9610d66db46c9ce8f52c11ab9f17d3fafcdb32682cc15db5e7e1185bd2883384663dc451f66b0f0f8fc01d982376017d808f38356c9e9ee521e2e8fd6608c4d1e3614f0fed09ef38244af170dcc34f1ed92221056748771436d15dc8e21c26afa4b0eda99b3c286c7b50b6e7b23dcef6988d6d5f6b6c7ba9235beae1a63b0a675aa5e62bbf0667db577a298f60882dfd6dabe64592a448c4b6bafe6d6b04f53e6a5eea69ee6ab27dcd4cd47725a0a5c76c754759b9fb80cdb6ee2225090712744bf68fde485aa9c8603e528f88227c449647df211027e0cde3cec4c66dd8b99b203b1338c3db3913686722d3b2ec9c094067420371d7b673db14f6dcb773d7fe560cb09f7cf2492fc48fc16777295cde322555e0b57ca9026ff3757b982f6bef755d6b0f6fa5b5effe502dfbc3a43bdc85b60c85a4d4d46f9ccea0c5112db438a2c5112db4000214a090050563d3197b7eb050cc172f391f8c5707827d84110a53bcbd7b3c3bef5eef1e110c4bfa2affaa94550970079fcd72c4c97257c9ce39afcbebf2baac56bd844f90197699a51735c350150e85ec1876895d561007062809d49148e04ef60e72b175aebb03fbd4892cd9cec3f182c03e5fabee64ea69e0c69f975d905b78396e279750f8072e893654c4f2c46a8ebbe224a87dfd0a9468454c8d3d7bc8f745185e0e79fafb705c3650077b7d56b39a7f98c72e19189d93461ce905676b864140c2c516458e304346c4c1c1b9aeeceeb82e83b8ae6b06cc1890bb9ed820118c27228fd4912a546eec1f852e91481c7164d4c15a86a223351d88a4833cf08b4d0f2f29df03db52bf5f77070ecf68848138e22c16d99824f2f0749127f2481da923039f6e45f8f7d931ec7a17da1826c23ae66aab3b23f674ec3a8581ba2cd3978e6919d0ed675236f62977999e49d9a0184d3f144d23b7c9437a9e681ab9b9d3cf2b042784c9f4cae5ee47c572866176ba9e1de3a653ecfe503f4d99d51d9d303a4d739aa6c9be5ec9bb57eee0be8e7367c4c6af2fcee042f85ac67670346fd732762eff4ad9f49426c0451e031d8838cab479f95008e3d89265592633d04ccaae7f57cbd4db0ce76e26e5cacf25debbc4ecef66d63ebb745763c44ef9c6bee98c4d8f8f717f9125b4e510b7e941d82905e9ed5cc65363aa9dfab55d2d93dddaec1604ca31dc3bdcdb6fee8cd8f43acdf75bc638c77d73a7699be5ce7e03359bfe629d113bfbcd3197c64e7307e9f15d6496bb99149cbb1f98b67f33299bfe7535f52e32c327ba9a1c235ecacb1420d0925fb93b625fc7b4acded2d6b15b6fbd47b85cb7f2abecefdfb3b4a6b37395c572cdbef269e8a42e0f92cf5eab94b2ea2ef42704e8326e97da4f2e75677221b2eaf7d52f73bdf79b94070581fdbeca568bac8bac5fbf14f5de115b6469acbb238e9036775295d6e5abee7a7c2721636fa0665bcfdd77b5b5beba7cad8ee5ce828076ecf40201b7f64ad31003bf4ef04600eeea95b255c66eeeee314d430c7cb5575a463ba665b6dfcbdc594d43b7a6e71604fc7dbc319ba6911bf4faabbb13a93b930ad2d2da7bad4b37666ef9eaf657ba31d25696eeea69e4ad32cacf2e60f9ead40e6b5bbf993a96bb233666dfa3b610a635cb55e62bcbf538eb11b582bde6b86fc63dbebea7419bd67417baf7ea8e864a6d6919ea550ca5bb1a1789659b65eeabfb776f55fd5addd57447ecaa830e39e44083c68c1922910c192828a1d0c989890908c471dba669598631865dd7bdd6d66a59d5aed596589d76a5b6cc28dd49bb5efb96dfb3a1e94edaf25796d97b362eddcd5d8fe55dff1e0bf62a6beeaed35bccd232f755755fbd7bec367747ecabb16c59dda5a59bbbaadeaaf7661a6dc0f0eaa8b77791140db5b9fbb12b1abaabee7e745dcdae2014e272847c529332c68834dba7b59be6a12dcf38ea1e45edf99a8df1676c8c1125c6508c49e8603745d150140dcd8c9db133162514638c31d298b0dcd02df790499e71445133d6d2ecfbed4a1a6ac6ce581a6ac652d48c9db146648026461ec8bffbc3be4c61b2ed00eb786cee75cea91dd31dd61d8f3d7587fdba8bb4f6da9f39197c38adfd8bf6d665eeb15b989d5c7efbea6ab61225fb25c0c89eaf60a862cf676f80c74ba2d8f8274fecf94c8c25f67cb5ee0f15d5f1d83472cb649f577722ea0a51a7c9657cea0ef4174732f831d6a7c58e75d703ef24441bffe60e77d4be5a04c4db568bb8cb68b7e7b4bd66e7e7ef5d24cef856eeecdf1f6012013a8ff316c4764c8bb8cf631117b588d340bc2dba2e639dfb659dbba5397d7ced36773c3636ed2520e036e9b06f9a861818d33b4c8eb58cc9352d73723c7387699ab94df43d09021e9fde9813fd449a46eefa7bac3b3d419a46eeecf7335e21aaee60861d8337466e8c81aded987b0ad1d977347267ba030165b3fb43f5b943ee794c4fade9ee9e46ee29f79d73ce49c11b6355d772c7636bafd8b153b125740c02d767c69e652e77297bd35dcdde8e758777a432ee19a7b95f7ffdbb31b2a336f7507eb185bb689bdfe6af9e97ee686eb58c75632aed22b5dcd14c4a880a1fde624392aa692c7798470b4a4be8f7dc51f28b2a9ceea88dfdc5630fe51755b00e74e9268f37266eab65f0ad5b7f3706df02e2a4da72c7639b68bfd77ecfddfe24cb687ac611f77bdd2467c7f296e5b8b7dc81f48473677d03355bbbadef46e06d11f7ebdc6dde7e33768dcbd8efb1df6fdafeca3298c63ae4ae686696bb1fdbbac7f7f857cf38c28eb14b773fb6f55bffaaae2e2195bb21f6fb94bb23f6fbecf1928031a00d4172bb011b80ace1670b60bf224ac2d8f11415638cb9fbb1a7ec66ec443bb8239e660b04fa00638c6d02fa204f0f03afdc00ccdb13e66da92728a7986f9a12ce19d1dbd4eee69e3f2b9061041ca4804314fbbd3308d9efeda82f523cd567f5392d94940a159ad1c986e6e0b5c02451253ec61fec481fdc100c890438fe559208e4a142a8109b4af374934d9238c236324a39271b0d79e228eb200f9038bd9b4cb0ab4f9bc8b2446401f270bc202a2a4f9a8a238a2707d51ac1934f3e09678806e8522ac96803e60190bf48388ee2ef0658c40d50ecaaa25edd7a8cd986d586f207f8fa666657561e8eb8a9138181c8224f7d008fa2a89e0e01b848f7b6d8d4a79438a20eb37e1c512bd45724758ab2288bb2e285f9ae5ee1ab2a285515a5659e0f1582942def49dd419b1b0496c4dc53f778f23dbefd06c0454b8b74e9723acd4b00a15e32106a22c18d97394d9388d243ccbf4d047ea11435691ed04767d6ce20a784f20b778929d18a08638442ad94c4f7946078e9105373ce19319f2d1fa6f3f3e35355f3d527b2c4fae3859436d5278ea44f5db2e56914c12b41b6942bd51830c502dc551fb944f54282bf4c01a788ef70a4f086271b52a10d639431db0db50d61164dd18cd9da10e6f9688067433e1fe0d9908ff96ea8835706f06cc816026c31c222e340792b766505aeac502b2b06386226b66c4412b0537d8edcd841928448ad3f4aea12ca623e71d6799302ec225ba87479295357fc0fc7ceafe505aac84b2cdc98c296ef06b0e5df73c296ef549ecbb3211f10e922437124a7684e177907c8f3f0115b3421af881a866c29a3942ff3b29b91227bd832346f661830fb06fc4e51f31d1ecef72015a74cd46f9fe051f9a894543eaa8592b189075160489ec4f9de7b99daefb5502929276d93466515b6b07ad97bed55310b5719a54d9bc451d03491ef9dc4f7a09412e5bd88129271c9786da11f182a155964506418b21fdc15a3228b0c941dda2792c906a9ccbb01eac6505be2f6b66b95ed5aabb53263bb5ed7ae9795f9ee8a556c65aebb6675b353b5eb56392bf3b42bc8ca2ced7a524faccc73d7909559ee8a6267a088645c7b7e60c7c3d1f4b1638435344a2ed4f7f26695f2bd37df9bd204f3cdf96484efcd48e3881ea955ca7864d3c42d4572ca8ec8a6891b3e1b9ad22ad9183f19c1f0f15d4e31d4f9a81d60783a299d53c6285d4658136442c2eb8953ce291fa501140e0e121387239afe424f05fe1d85250f45e79ca45b3a4e800bf928f5a8f7e8ebe113c628d497f2b9236a99296df07c8cfac5d19334cd738a7b3e781a8804bc28c336dc6ce9f83f292bd2674892f42d496fc722f82b9145fa230bdcd253546c3c1cd525eac796ba1b94ee01f785af6bc7ebb02bcce139e4b0e319b06bec5cb6c8fadb325964e92016b0a9235163b32b2d8a59c002767ccd12b64847dcd345937e7b6eb85d229114c0fd9a208632ec501cbd07611745c2a0024218631131928460646cb9136db694e87b3670090b56d410eb3ce2ad436bd344967bcb5ad7b2a2bd4b9cde7bef5959c9cf9687b0aa3e1d52aa7ad411c61861ece6b4a635ad39e39caf7c7680bb077d78289104f6d0602003d1c632428cf0bdf734bcf548c117df8b2fbe0769841042f828b57ea664f9544aa03e2267e0f160208eaa30e0eef1c024903a815ed772376331dd68f64a2f973b586fefed8ad05ef3cb7ecd5fec4fb6745b965dd755b3b5dc71dc86bf280bc213534a08d0a9c69c09a5713dcd17c330cdb2d7dccdecfa6e0cd5a2ebf4dbafe8baf65abb992dbaf486dd7ebaafd4d29c840e7b0335dbd64aa30d98aacf72674d9e9d567d2f5d39bb726692d5aa654c9e6919ee98c52e13eeef32a25c3d4ff02f3ea5186358c570c5300a630a5b0c9b79c8e4f8d564fbcd9ac968dfb8bb103edc214c03694e77185f8d6118762fdeaebb6d17fef44cc3b6cc5ebfd95ecb59c5b02bdf77dcbe10bb95da5737c371201d5010973bb8398aab34d3dc69be9452a8e1c360c7dcd67e43165475f7bed59b1d06d3d9bd87a91794bb9a0d3acd16a4bb90bdae9fd89095113a4131b1d82fee945edaafdfec6637cbb4c3604dd7ec4c8b62b46787d174a66bf675fa7b9dcb5df677edda2ee9f457aeaf15db57f6ab9dbbb88b1361ee30204ed76cac4531dcf161388db54d7f6557d534c4c0d7a565b68b72f73a9111fafd8562626dc8da7a59ecbab4cbd24cbbb22c5bdfb26685a81859b0eb0e6efcdf7b0f39d061b28334b7b9d76c1779f3769ce1c6d7c9c9c9af8b60328d5fb32f2d8ac17e1de6e4fdbad996bb194eabd5b256ad377733fb1e6bf74e8cb54fcde4d3af2dabf627d643a0cc85ac139b63b40b6f1904ea4cf40c57bf819a2dd22ec2e75eb3352d025d59fbcd57360373c55c1a468bd1f47bdb9ae13611a61de6d274cdc634ccc5d775401133744a9010e83d86d5ed945a78755c1abf5e099d4ddfd1f4bc4cbb1aa699a6b926e76a1cbd462d4ab5d310dd7e727a6ba5d929d63becebf1af4cc758fd4a7f7575bbbdf8ba747a9c31acf3216407d5227c7a2bc217611d437f9fdddb5a3f6d186b99ed7686e6ee6e7a6a4ebf90c9899e20ed573ba5af1abd2e4c31adbf8e35fa6b9dd2ab5e8a29b52ca5942a79f6375bcf32b9fd827e3512ee26af5cbeaff5d9a871f93aa6e92eee20dbc4c26d02ba9bd616d6d6ab95e56e46f25cb55ad6aaf517e7eec299861818e3cefaf4ccd65aafeb196671ceee223b4b53b5dedb9bfdcaf6183fcb31f6bac76e7edbaaffb12f6d75f7a39b913cfbc26d592e112aa104111f42a8e4799942fa703f600d94380db26e734eddc9dcebd667b6ba9a7d35f67a8476ecfae3084f8cb74b77355aeef03cd9b2ed84da3eadee649c6428a14d62b5cebba3defab55a74e9986ae9f779eb5aeeeadf1fc0599875ab7dce5bb7c7eab15bb5a56fb538cdb2b40c77ac6297b31996c938b93d8612da6eb7133d5fb779efb42aa6375b5d6d55dd59ccd6eaf7f2a84eded96d6df6ed35e3348b5dcbddb7bdf62f5aee8fa30d74b96d07e51955b6bfc872a2b90dab5aa6ba55593433cb60b72cac629835b906d2ae9b5cd61e64b156b50c6671bf793b9763b6f76bb57a2d5fb7195f59ad37d763b9e31153affd65b1cbba96f55d559f32d668329342d342efb63d9fbd1c0ffa304d3eb94fd0a7454d6de50bcfd768ed9cdbb6d5b9dd1e66b314c3aa4f8cabf5f3301584ed27beae1cb795e1a6b48c06734c6ce6ecf9306f9267287be53228e36763d6f9ea75dee27e72abe27ef213ce823e2f8a017d1e06a4f1fbbc37c3282dcf3cc36ded2e3294bbb8a3465140f3fe30e7047dcef8bb42a044eea24fddc9b8df7e8ffde6895daff8f5efeed87e61b88d6118d63a6a8e699aa669d6abc358afb26cc651566f4d8d9f8d3ae7df8500773c8f9dce09a2f6e6aafa767877542d9aafb78e7dcba279edd2a2a975d458fb9a737ec264530413bac96bf6bbf76ab7d6eff69012bbfedd395f3f7d4c2d8ab19f87b17a6aafd9170858717789db7cddc17d6a19ee58cb9c7c723b7756cf70bb1e3b8939d133348ddc28af9fba7b7aca805708d0e7df1502457770834018db6937ecf816a43b10ecb9e9aeda4a59baa22e51eab3aa71325e6f234be8f5f8e13879053dfbeb6faea08c61331b7b8dd5565ba909877d33b9897e7114b2f6f530f604c3afd8b3d7ecb841196e5086dbc21cb5e6ecf990c9c82f8e6a7694ec35944fb2ad15c3b0cbda7aee56d7834247f9bb18d7fc36e8dee4387494a3dc874e4e5e0f73f27ab5d7c368d724777353d583a8b6f567e55a5f71ad87b92a4c76edd6e2aa453ab6edf530db5571ad16572abf2458dbdccd70bb5e97ad75c3b84fc73909b8b58a7aa5038e61bfcde0dc511b7fcb1db5b7579b453ab2db3f1b1626d32fc63ae8ef5ed7b61de7cb3ae8a0ed96d5221dd7ed4531d7ed612e8d67b8cddac3607a666fba9be1ec6b76cd7dcdf81ab6e5b871ee383dc3edea52cdc6aff5e58ec259a4e33afeb381f5757c984b635db3e5dfb5d7b7dcc12d0a425fd7815f2f8ac1af87c11a3f1bd7abaed95a1483bd1e06bb6e9de16a2afc9c29627218450bf9cd5bee8cd81b07d2f4f54ab30c7ddcb54ec77297b2b1d768fb4bb5ee6a723686e5ed76073e10717465f4baaeeb9aa66bd34193e6b0119bd23f9ab7dca5ecee7d2665c36759a237a1e730ecda746eba09757fa8d344b953149353d043a7ba3be14eaf67bf4eb74ff8d38e7bfb0ba318c52846b1ab9f7e9fae8c7dcbddf5f707806e1f01ecf4d2f42b8377c7a445383fc01309a669f2624f3388c29e24499224c932811ab210c448167040c5a8a212c513555e0fe58391f013555e126ca28a64b9400a5f245183185b8cb1c4132f533cc29eb05042135555555535954092a42bc2b0a5699aa66942810fc610853158a0862a9e98424e16f8ed4495e700387414963ccf72c2081cc060640d4024133749783f2bd0c7c6c64605f0fdec87850c8efcec945f2300031a3a2a060ae042073837325043183b30021435f8e8297f55c30c8a3003249216b219e0116480061c1c0745c842054cc8c1633c01a88a22e010e630a656f0a2862a0871c20ee0d0f38648042e88015f6ea1bae05d410842728ad0040daa708358851324c801a4020ac902054ed838d03651b6502f73ce39a10a6255821eb614021250010b5458158d5fdc4895b729b5aaa989699aa698c489699a9840862eb0a0820abe427f10a7143c306a9086244a78820a2986c42134d1041c5010f3f3042cc030053604b98942b80289a4021d4350029227aef0c5156010042ca008d2840fa80842922445515f4ab7524dd234a53c8e6c0a02508630d83c818a230cc10a384e00810977092eb050640c2a7cf4944f2e3e7aca2f8de02131c2d304164780f0d1538e3f8120052d9e20831b98810652885498218b13a0e1ff0a9cb024612eb6cc17e9972449a2a6c7b5200d516ca1041a6091c58b04842d499244351561a033a51b1b1b9b18bc4ca7b8c8627d9aa669fa0475f663421750ec4967bbc42a73388e68133b40c282306e50248c28c429c8c0041e9ee3380a7981a577589a58aa4c694e4f4cd3b4c49eb09841177bc2020e3a7b92e89cf34f7faee058926fea420b6b0082900925317c72a818c7e0020e950be8c21a7e5ea4f86c508799d23aa6431fd27f4036b420bbc8d7e13d51cf2b171121f978b2e6c5455279c9a6e00eb93b7a9ad9436e4af7783541bad723e5e318638c31f37ae8a56ee6f5dc1fa8b6b7047573980398ca40ad5317547c7a8a9876262a68931636adb1c3a1a63eb2a5867e5165da41478ada0733eda45415dc29f5bde9daa54f3b9392e987fa5014f5a14a66a63e294f39f5a14a262e5ecbbc99b0b0e9e4854da7316cfa97f2144d95c428e6cd1373881353486449f97bad962a8923ea431de7d2631471f4a3840d946ecaebce64b9d0a7b1aaf4bb6ceb7728bb9b76262529efa69f69c9a64296d8d4c8747fd03edd1fa6a7e414fd0af3acb40ef84f178807754a1ce917293ded4c5dd4005bd7d6544464e9a29068c444a4e9b7a91805c614471c1c1c8baa2c3ded88727811304775fa0a58e0b1e81db61a1bb56dd7155563076d551235ed58afa60ea75e6bacc2469c69a767f2997e262fe004c6a464e29992d82186b8346648b18a2ae2441ce97556184ed9210583734e1d262f269ec832934c547fe69987c094bc6696fac4910dae0f1d05006fa971faa8135976220b8a1591e5864ec4080070c48938b18a98436386d6dd8ca5de03db94ceefa61d1d4e51941ee2d51337d5129125e5f41510d9b2c341d444326f2add51738959311a339e0e1de24aa80f8dd3ceb433753121d994c68cea2959ee90e592a8627224eae468248e6814a2a310ea7333bda33ea2e70c441cd13fd3c0ad8386c0b423fab433ed3c1c4a7ea625459c9c9c9c501acf21c72a228d2c9aa1bfeb8e6c2902091224221d7142efa61d94771167c2c2d44564813b91e54e3bf69685331741d3ce344d99c640606a55230a6f58e1c01ca88a082211d8835dc653299d883739d35de20473e2c88a9823cc1145ad237eea629e391a45a12465232903b2c5e4a05f930cca9434bd2974f24c8b37b02756f12e8600b621349d6849ba74e956866552ed0172443c228ea8b5a83ab3a80214e6162e23d7352190c802248ee8e98fa82a49ca7044e168430b0a0ccf5dfa133d63782df0e68928240e914e21fe067b1e0e2d65d308c5a6516caa67ac62534dc4cd1ab6f4a8d8f482374c6ce957dfc081a2b4744c7731041702356f47e99914238cb18838a2938e4906ea23a236e2ba30db0306263d8b4e4416098b5a04a326228ee893f2c47f45de7044e67461052462846620e44464e19080f197eea8d14a11b28522a20242b650fa4515498a44f6dbe1c7acb13f608d9c34c07815b35e6d4a4759cfe5e188db3a0668228bbcf5fd5a30b41e187b3ebcc5b9b01eef12df60c57e60ec57c40d3bbbc6a7044e7082503e295d9625fd15718315bb5bb10c1059acdf70f9ad6a67168a6559704667a34b6499521c1059a2b67ecbfa4bb1b40cb491c4b05ea925ace0a874198583430e617b127838d4d24e54e11ee1ac2419873afbc91d932e0716fd2e4a22d226c283a670789052533834743a8a087c4f12912dd28e2489549208a56aa89dc8226ae1419f075d4dad8f8cb0916d45aeb18b0d0377759758493b5217334b3bd5ab39458779ee485d44967c08ed0ed3060a37595c21fab4912d5348c8daba235b54aec3437fdc55327c2af0a35c5dbf5676da84de611b7c43b6846e3c2eb608bd22a1d973a3278e6e5822e470c59c73f64c30de0b71ba43c0a673d05da8d23a84b47d48bcb8b6a75bb9eeac55cd0267b1c5f4c2c4029e3d130c23189b9367f2c4113ded60b5666559eb2344880fade026b76dcbfa0db80bf984e2e8068490082cfa34048597c5a6576c7a51a62084a2d3cf882cf9740d1bfe065d41c8041b3e135d44a15002753793b24549cc0ddf03db507fee18a0bad649c0adffae0ead5f1c8974b7a2279238a25d60988c2fb045025c330ba768fefe30f53cf26094933ee9cab9833bcfb7fdbdedb3eaf0aef43c1247147339fc15818315f3c8cecf92c8d2cd6e26d93449749139bf9d43e6e268876fd366d3eba03b4adae1f491c8428447b6483b3b3c7a87cbc727331c474a36e5818787878787670708af89634efdae127d3e25b2e4cff7802355e88cc3fb038d87600e7d7a190f073cbde8b1e4536a83f006bd077ad6551e651ef2cc59942d12fc36d452a5e31b5216de1fa628d7989762a7fc71c0d939bc7abd281c690707675eda99b38767be9390cc6f58c90a82e18de01790078e21f54031241e78060909fc4215a92454105e0be4a15eec9e1eea0854116a8b4d5f419eea565ff6600926d19007f2ec9a694284682d446bad355543080e748d1ad73beca0c139e7d44940ca0a2291651aa1b29402278ef2679eb06a5bdea377283ca8a8e8e923557468a47978d04faaec401fde1bd5989e4a8d1aa7355ea3468d77df2952a2c21b4957787307e69076a43300f96253a90b9b4e614e61d3b8447c027ae1b548359ef22e3ab169102463e041c3a6126c43ca6bbc937600709708808da330094cdc5977337643fd7714ce8e1c5ec1ab035ea6d2322f8e74145a0618709524b2ec70faaa47b6f0f093579f36f99a077a00645923cb9c38a24fc9d28a797548970106dc491ed97349cb484ae2887eda48153a370ae7e1989b9eaa821e4639e1a397fe0e590e09bdbbb197c01fa824c324d306663d29f7197f963a641ab873d032898cdcc12de3d2a5704480e167d4790a87ea8242125966782155e8512894099364285d88235b42149e7a063d8563a923e044960baf20aee3505550390fc70be23afcb42e12e5b765e4b75132127077144e677717a23fa8348cb7b5454d15d58c000000b314000028140a07c482e16840ca2259f60d14800f8ba04a6e4c99c8c22487619432c618630001000000080080d0d0300020920a5694c3a3df35811a3266c07df9a64927ad46db93ba48650db7d00b97d9251a065bc4d39f0b9bc78751861155ee7172885b89267b1aed20da221d12422fcbc1f7ebd2dfa891fe21342c1a06150d62fefc68d6442c0d35346cc626ada7c341854b0b4dec8323bc66e620764598da3092af118ac061ac31970929d1bd82dd0f86096064f6d521332b114b69afed33b330d2bacf489e9cfd4289bf2ead9bc58d29230bb9fef87fc094c7eaba5d585e46e97d14bb594f4e55d4821bbc270e0efbbdadeb9848343024aea0bbb051b290ae3a375a71edbe65f481810f5f8ba3ed019760b3635dced0110b439b0466e99f9bd638dae9b61c8cddd5629303feb992f63c32ee93461353b9a1f14f890f35e713bab36088302a27adc00c62169c82519a9fae4e169ef07f4e4c33ca4bc57b05a33092e60b524662783db3cbb12408589af2e8b5befdeae0a827f07f3fb4d351b1399f845b1965e31abc854ee4b6c1f9160d441cdb18e55563b90423d4b0f61e0e3fa0c55ec646340bea621571fb5e7791e17e6d970c2daeaac587b5f2378020e52ac14c26b800f7fc450682aada486d5bbbf30c4d48ab8c5a64bdbc947606a76a69307b8ee283dc81b49c42e2e60bf19b1125dcbc3c8816825452d1acb6705436d4c39361939690ea07e0054c939f9df0de4adbe7d7fbdc7ee05a2a858aa1a0a18a6100d0c8fbfd892c85cdbee36b7ba85455b181f96a2d1ff548040181268462a4fb560aec65e0c490217d1b35f8180dbac248d3f0d76bf403b8493ea5d5b8cb884c708a48d88a66f94eba0c84a989f69c05c175d5cad1afc1161f3ae06b838d4289b0a3dcdaf3c4294102834de374b035c93e324879c43e26e9455283d3f3933e54dcb0ca53abe43c5f19862b18bd0d1905b3ea8732c7afbb46fa5a42fcd1d58d8e672c11c9bbe99e9e57b397cc20a41935d33feb61346f86170513ea996cbbfe3a20ef1176c5a8555d98335c2b55e10cc797cfd5cedf0631be9dbca84c06b6745a3ba75bd0625851e428e3a25f0165ad43b44d50a3f138d9025d3a65de0b26ac10a49321a73da809d7a0cd91efe27468042d74a3561837e68ba878f5a8f5184e056484268d2404eacf80c181304f874c7ad9b84fc078d10cc951bf70abede43d7d94a5b3cb2bb1ca02d56e7a32aa4cb06ab5d50abe77dd890d5fc3b11b97e477a97eab0208c6f9e10d5c2d004d2e253394b83f4c27dc2f974c12929b8952ce3ee6aa95f68f5024666ae53e1f7189a5692945ec0986d04bca0709f0c734d1b2fedcaaa3c4a728abd956fff45d7e6961efddbe42051c0e9718c8fe0ce34fdb4165cae2954ad10276ce7fff9528d78b2a70838544b39e3bb665212ffb10cd222ee5cd81515eb98ab386fce9109fa41e36db731ce8e7ab14f5b045adb3ca673c214ad0990f154a1cc9c14fb69f9613ba828284dc5c070b185c610522c9e18ff67669518fbfdcac1bc789f3da9643707b8766c9786dd6b57fe161e5dea173293280aef45733101a54f79d1aa34aa97fa81aed9eda5cfbabebfd374a652d07a3407069d28ae3f8ffaaace3b3a8c1f88a03ef66dbb63604a56e0825e64b4a53e10340d149b84bfbdd6a63efec352e08d71c54740249e42c6b23c85fd934a18c500a659f3bc121e8e68400857c905dd7ce0eab0461306fa70ccf6085873296371291883ef97eb01a2cd49057720298b19e6a1dc60c6b8baadb108722d9e0582cda27c5b021ebfe8607b7865cc10b1f63a01990235243a55ff87c00968f92130a29caaf260cd6375f83a9e37f62b4a1e55d6aaf9efa0db30a0d1f1b45e3f6063e7a6a2b68b7016086a12d947c04a344a079242068089caf36a4bbe93b1effe9e9da94b5182e5938478c2b31529967e6f615003b9462cf9328edc8c6f472d2620ae52dc4eeae38902a196f2637d0d8cca94e265575bbf7e106dc9e7f4351ac20ba27d55b9afd0f0b37f1e690a1298cbab094793bb8e01a9b637c294fcc264add20f7832dcd518b0ab64a96dab9df31efa5c2f079530bd04667ae3002995c33fc55a5e2c62164367b7756652edf00789885998719ce3f3f9c8443a486a4dd9668531d9ec1e54d35044819cc66f61cf6759e0b23e41f038c115f864ab3142bf7c00c2ccfac8978b38793436908d9ab881415d0fdeef6bc409197dbde424729fda602015c69600a97f73d38e83aaf4a3772dd06513f129e441a515e0160e127bd6e5a42aefc783d2a4e7aa222fd492f93edcfb62d569957352ac25ca0cef54b8423e2393dfc809e0f4e64075bb19c697afbef065c88e7a31e133ffb533510126d18ccb353f98841e16efb25aa87bd74ff7f0280b7f5898336bdced43a3351bd25710310a4291c40972e6d50f445e419f77e687c0e9f10203b259804a77c0c1aa3a018e48de56311dd2c373100adc6516428f55fd012748b605f5c44cef2c0126845ff4163b9839c3a5b3be58a78d47b6c9270fab941cf8050fa99d5d8b23339f6fabdf576202f96b8671f4ca4368f71942d476e98fbfd04068f43d9ad235ebf97fb2120691e15a426875a8cc0af1424e5bd4232115a24c7078e9eac15559e2f35219a714c2ae44d72a4f5d7622ab41e9bd88c1fb1cd1d3f6e99cafe47abbfed2ab917230ec642828f329509b96bdd37a07e240285c35957143e71fc7bd68b5294f346c5f93306f224163c0ed05ab53a55bafcf7fbc700977762b7a3e3310b433c48afdfca237b741beb1f0c2a30b8e556a373c3e63101cbd1601cdeabf3306f341a0f9a162fa7808daf4c435836ddcbd8edf17e2277c167e315e819c11b7f9dff5ff7f625caa1ec3b98a8f55feb9979522b600b67ccbd1c9f3791d9c7eb49b3421c992473f48e01e1c7efdf813c8a96b04f0de2dbc7629cc66c9f5120df7a8bb0534370c173417dec3e02f2abbe3012dbbc6a3ed3aeccf154acef74fdb276f9e890f9ffa5911fa3c310de3c653f87670e90f6d36cb4ed4085e20b6d66819f7569e3eb621cdf0ad170a22ac946db667f2f48fc46727409150fbbc4c39f169bc5f1bf8c353be22c337f254bcaf8a5bfcc58982de5112f665d392edbc63e74839fad6404990053294d1ab1112c820c3d0d574272bf7a70109f13dd0b346ab80f5fc20dce968c31097104e12d37021156627ef862b959ef0c153643bfc2227cce898f970fb86184cf2d3f10ac99f8feb14db3cf7f0169e7ba65bd6f109f5b6908dcbef609ea01785345c912058a436d5afa6d6a6f3524de829b96a7f655b2ea494e3e5ade2dae4da0ec3ddacc2dcefe6b7e78bc2deec026afb4072651e3227b3058537359f93d4abda60f5901c8dc04d0bfdd42a845eb495c0203b8789eb762ad8c8ff30378d99742c6c70efaebcbe30260b73246dc7e0b4dfbba830023020af617a1524177f79109fc9c3fb342230dce8431eb402650ad9593f31d969c6402bf9e2ace952601a75b6e10b7b25f4d5b99ca6f32e42efda58971f793d6d808f291d01e670c458df55b595cd81774a820449d94ef1984ba427385076b6563d491b100604b4a7bd67ef725147e0753646646b58d588b9389ddc0a55f2a131bf3ec82f5201d3d2b016c3d1381765504d9e0000aab408036a3a50a504ba906f07e33da343f0819405f742f111f2b75f7085784e60011aeedad6762f5b6e8364264d7dc485a48332fda5774bac54155fe47f647b40a91a914d2e83b81cdce7aa404cad8c954dd4897424ee9d4953ab01c53086b67d4d1a836033024b062a01b4f451d89bfeee1fd8ab9bc82d2cac6fc93adfb29cc3a812448625707b1c12981ee272c4c598ee611636075b97509178a686e845d39c65a2bec1ea0a2a34aa3d56ae30e19e82613c2f90a20ff6c4d3b24f61bb153f82c97a4eaa94e2d846e0556aafcd7cbb364393bf82067d8a69f9ca20c4e9892f1d744a5cf882a8101ec6aff062c5d688e43dc38a0b67f56342380ff98441c5855a6f547985cf87b0e5519b96ec9ff36df807a222a852f2a8f0771f3cf55d7042862176cf9da2cfb860b3e461784855fb7cba045ecb35af2cbc764e6edb55a31d7fd56bb0c3d8eae05cbb2de18f1d3ff5716491aabb23ae7f6dc87c0491662003c3a60ec22e24902a2bd93c701a70a89595a9baccee05a0c9020a84a1f8b8a45bb9a8cb05a24bfc0f0c948fa9b01aa6e3f2de4fd2cc122ded37b2cc191dfd5fcfd74031451f27a2e03f4769d021e407880426729bfcc66ae39eb22b03d9d7d73590dc6dd508132957db78412c5c6ba0dc259ddc5f6e7b210927fb3e069240c6af3eed610de34944ba0d400af8842dba19414b755c52a7a57aad8b7e05148421b16f80f792f9cc7c8216aee864c1cc43ce5fa1e6acfddb8f418b579d86af4dc06131e90c74874b786d87ea29bb462beecd95dddf61226f8d66752bd7f73bbfb215b494676351afcccfbbda75dbd8262fdb09d16ccb89201cbe0126f0bb44c6e96287b00848cfac648fd5c21a2f2532a2f65373fd1ab44a62db6120f66e87f75e5c2406c364092536b652509a8140434b1d016fca18317ee34dbeb09798b510876e4a5ee8e87777d6e55735c5c1585a064408a71ace37bcdb5d13a03ca5c9a897818825ecec936bf85adca365c6b0c0577f60efb218dfb3b2eca5b6cab639cf815b63534443a31fb0a4cb21379d1a22d66f3876db500dcff96c9011408405fac559e477199e1bba9ed368ee13f4a421912a1025a91a83d78c78e1e01856f54513ee1fe56332b8741b6572929368a1d7631a9cc63357efb70edea66e3b7a8a362b73495e723e4c7196eb2039455c8d4c9a934dd13fd374d00a3ad298b5d9a3a1ebefeb7cf48b43714c8e430419c082ba32fe947cee5a17a86703496aa4cbe2e855bf17e3a652c7a7df7c09997becedc3d8a423c2bb889cd63e2fe0cd031053f673652d7d69c0343685f744bf4d07bd6dacdd11faa2b9196aa4f2fc4d2a1541bdcae5d81564b79fbc499aa2256517bf6b40062479f1647448872e00b4b6ac2e0592190df582baa70930d1bee0d6fc3c1027e6a0e25d8e695f9b4ef57dd3c3272a6b6483212a6d8fad039b6208b8b2e3eb2d7c5cacd54aab74221def02f481c49a03925ef402404317338052b24a032e998cf3771db1484c32b961d04776c8c6a07b9cd5f868fd15f204f64778fd2e7f4f98376cb2c2dad16e9b8b7a95119de18ee3bda617787da3ed27c0bd0d78e3a829c00c39fc4f2797f3fa24541bf659995bd9c39501e51aa9c3058e6dfdc3df33e5ffdda0c752ad09274a9a52f0cd8a9005fffbf4022e8b53d2846851c8712bee422101546c267bd3cc763a8ea66c8c14ef3bb93a8650b640b7220736ae9061f87c907b4c4498107102f68889c3844f55dce74f2b758ea60b0129a696ec522f6b2a079328507d5f7bbed03c9a0a5aa9f6875f5b7caf7fdadb0a1698e3fd866eb506388bae8ea2af4963bfe42aa0c35bcf0d1d5e958f0b9b5d95076ef2f4e730a622c06adb93027ea67a67d68a50f42b71451a5b285acc3a577505e9f2f98c97e44e4d5840574ae0d7069a68d92d4f9b16733995e30a8fd4580871b9af5ae166d3a53962ad5304c288e151194ae352682ee7293ad1a88cbe3ee5799cdb44e571a53a4bf4a47bce41656e15719258797f36d02efa6e3551936158291e625ffa0813f14f06aa11d5636e4ac150d0e92d22ad978aec4aad20185570e6a006faf20da9d807baf2f8a7dbbe465d4f03d6059f115fd0790c756cf04b421a2da7d9bad04a2e07dbed8800fb754a6a18ef38aeec82f4f4b8bfb61a7ce2b78abc8f8194800af27d72ea4012803fc6d9129e3113b8bc19b85dbb26835f34d0ab80702b60dee16df9dc40fce30e65733f417e1154489a7582a6428eb787ec85e81e82d42e970649991e3464750c675c3f09e37abd8cd743c42fdd0720187cc051523ca294bf993dc54a9af491717901607c6be1480ce904123766aa2d865aca3737d2ef23eb7ed81a8cd21e0decd3a4a071274ba84a1c248cdedc74cc909569cbf6df039008320fe907102ea671b889af2c5c85aa0a1010f9d96cf960c132234b7843065a0600a55185ea0b9e6debca01b996a361ec5e907f7fee2e080de0fcf2d8c94611a6434a2533932c6b9135e29b088ae541faeec55a3af0ddb3ebc7f87e77656b7048d11e15bdb97fcee02c1e6289fb8eaef470320ff3cff4c40611114309aa0d3b60dd6124a490765bef5ee8235cabca83fdab3d7b72e76061e6dd6cea0ebe037fe53e6e89d14c803ce4d131ce4356ff5fcd2cecb8d208f4f0e6b3512e09fa016382ca1da9f2221bf8f759d8f88600124c6209f0862eb3cfe93c0a911152c9bf41efa87246ba209c7a2e416ac41ac6edd493155c7f49da7595aeeefde903c63507824ac2c1a47452b70a24cac17d8fef0116c7b95b5470730301417364103327b8234aac8cd1443c71c03a9d16ef50aecee4998db2ae5181c05b11c71e360a1affaa0ed0f6c8b43c192bf047d7aecb81248bf5ff87508a06f8f5c542feda21a672881595860c68664ad24752b680812243f0b3c5130c8e655d294dc8e3ba8dd426fa61d6297fb506f7f17c30e5796d80b3ad2a9d1630b9e8954402abb23f5cd96ab12767f935301f5144c76d0afa90ff879c13347cf2acaba2a058dcb585ec22e0299dcd0184b1a3cf7e4221562a2494921bc726978f60c435d728c5e5371b23b447976f57b3bbc1aee474981fbe712c3917a82b724afd27a13ff47190a23514a9dd48cf86415093ba0f08551ced409505a11a3dc416a12e2232151eb67e5f01a70e94897f483d4a6a098e007c73830850fa428ccd87943134400340c9e480cab0029a0f981b8c86d75a41df4b95c536ed68596830a96ac9aaf85e785169e868bfdc5167155e5bb5a147c8071bfa17dc99b6ab02b0a1e3684d5b8ca11e14b44cb117b1a713ff8cd2373a1e6d53e64870081b612acc03eb32056ab28b5a26da4ed8985cb3af51c0b6f7951d482adff584b6296947c74838a1065c4696bf0efdad4f31b75fa0c51ed73ceefd5391dd9a9bdca06be520f12ae3015f5d427a43e84a8de6303100b381aa7cb72beea74523eef111d3f33c0c1a88b631c995e540f9ba6a1189ed0693b8359e7b65a42bb52c02023c97caf64ee96afb83992064987737aae553544e84376c5130df32a2803b70a92287dba1a5e4bfbdcf59685367c913aabdb7fee148080d83ff5880079d013c8cec2e3f3a831de10883e160b2261627370789dc8b657aa43f1e10dcc4d4374c0081c8a4225e3e849265ab4c824ff8ab41080e2b8bf2e32940aaf411daf4d5b30343dc048e92e93cc48dc123cdb455220be644a1aa6f541d9829aad75a1d6e6cc41171a2fa209a3be2814069d05cbedde23ba19ef669761b6bc061af86d26f75a3b273dddf7365a908cda5b0ba97bdc2c612d47d8631c54875593ae5cca13b08f80619280fd410c818d09bd9b0bb8b24052c65c1f6429073852bde5d4d7cfc971906f2ef03b4160742a9a40ce71a1387812d44ccb4b58121a9d6541400e85c07c02c03742e3c7738572c1abcd5108a3c9dc7382339ef5ea6962941ca1e708cca6bb1a08162639ac5180ca4878fc4c7af7461bb05ea87ca17a36f06927fab9980672f2a73056566040616fa082ebcf8522e76cb9261c4cf5df89a4fa59bbc3b1082347ffd55c80fea1e1223f8d861251cad9450efc63d3254bd8234769cf7aa650a558f2ef8b6ab726aa5a66cb5d33756c1192048f305be0d19789a8806cc7ae39ca4a15a1036ad3a13412a5923cd73df0963cb89e9cedfc849041a838fc1199738db0e9323224a05de1d45fe4c230d30a0a7ec764e99551cffb24c62609ca8e778e926b518e53a78282fc5104bdde88f84ab28705705eb2600c9185a1fc2d8431cab96859e686c62476297c3f8b09ae58a0dcdb5362b018903ad26200ae76a685c49c2e281a7c085c6cedb2fab92f20b36e69388ee3adcffe32258db6bf1155a60024b7d9fb473937100fe3e1cebcb85ce86580e24cc259703fc9bac7b13e471af70344f8c35ccc02f410dfacf8c0c7e05154a35182998f693b48f2302564d67be83e045e0e3575e2970b3b03ab16e5d80c9900e2d18207f4e5a3b0066222e0c18c8c60e6f05d6d089e11cc800d0fbecf378d096267c348f7c4604e877700dd211614a70c351207be7e75e86b8c9e1ca604d7e1388d8190cdcf1f965b0dd9efea6516aa1c91bae347e8861126ece4cc5fbba1ccb3452fea09917ef829b809dc2536e04b05e74c3ba901ca2f83a420fa2e194a62068a008587d182e0d9649ce0462c3509365f4a6e98e32b4caa7dc13bc6836e2b707b4eb869ff698bec12e35211820f971f80bf42b9878384824df4c5b324fbf4edb48f52f26bc04a41b74c0a3d2c716edd08a821d40613560aa5fc2cdce3ccc4fae560c416ea9d95d080e83f326def8c9d5821a729f06c981320dc1dc6fc4c07a0c90572f3ac2c6cc1fbc2a9487eb91b8414b6fc473a816aa3c30c8753c87a23227521e4cdbe9df98e2366d67d72684712bf928cec970e89f99719e66d52426813df655a9625d935ca644abf974e690958ce834b2d0ff9c209d4545c91fcf31496bfb1bb89d0d3ef5ec81e5a148a9d94d92ca2d83eda6532fb33786b6bc838657884ab7a7d3bbc2b7fef6214707392bd5950ea2000d392bad4d170f7fdf12f0e00feb95a854d1e0bd822f1b08c62eaccaf59c785508b75db03858db4c34c2a39e83db654cd478c3e5cabb0e7c73d4a9a8208a04ac0d0d6dc7e6f871810f1a445f16e02e763d22b7a1d7e4142f7c362ee60e183820efe01fd0a6243a7d310ee819dc1d244b3cb79712e866692503466623e0c9820d1ba31d759be0010d4bc8e732b905af195a8706ece40dabfc5e85f2347596a03cc0d1be1a092373a2e5801e90c93371abdec861e3df4f3ae35c5e56ec3b46aa6882c9360076742129155bb19b584711951efda47b0281d58945e7c6b3f74b9b5483b2e0ec339375996190c6cfdb9d56dcaba0f5409649521278fcec896f154d45bebf5df3d8769c79452f200316a5f8c0b0cfc0046eec4c15f5bb90945e6a0e733ea49c6a7d94224e703a1a73e4f68526b158cafdc3ea21457a70b3c449cad3df8a07b2ff998179522ce6a6e0e83c1622a40c541f60f403e88e4d658f40581797a6116999a37d6c57b5783443b7f4c9f1b4ba1c4d85424e30cc7f4d88b6361efbcb9413f83d6ecee174549f0d1ddf95e7e48dcfe8449dcb9f8c3b07d50230355ff9dfe4c5d66e9a03bb669df19c7ce3cf9b3b87cbd33c655ba67b2e2f2929421a8afc8387d8f1bb4da114e4bb21b94699b6363c800e49a3d084608a84a227c21c891fd21c067420ab908605ead1c7e5514111d31c6802b336ff7353dabd52e0de5163ddd60ec0dd511befb7f494d3894456741e43ba55db5eefde71493dc177a00aec08cad8d20385cb3a1d49c19715614bd6ba1f9abb5d880ad04996bf20226d2c25b944f16642ad756a01d54bef4ce8259e532dedd0fab772911bcd0fa6191344beaa8e2c5a811b87025d96a18c9332d32c290c12fb832b6298ffd0b1b8b9968774dc3539ae9ca66cd36396e558d71a86f56e369a65fc6dc624fc6629a56d5dc1f286345b98cd033a7ea5b326c1b5d1a95c69bb51bdd1c7b4efffcca3ec7bc741ac9f91f65d3ec8fe001904ac0060e1158d08495bec70cdb6c11dd126673404ed2e752a4998034100452c4a662a46f5424305c1e7a5069f8d061fe6b962941dc3ee0901c6ae60233dc2b4434236f9426a5b5e21164effc0484379ae9324afa2eeec38f4201a53fbf50922b16c686de1ab2b2e2f25895b5992e605d8a299803b25b7d1555bfe98223fbe47532a212c3d9b7269e98261eec614114472cfdda39bf23eb67200f03572fce11534e2ca68ba9d2e1da1a59470c03daee802d630988d10e36d280031a3cd69f3ae1ff12b9675da2d3d2b1359dad3c9d9f30355aa870d43b2f3ecaf70c32fb1dd480cc7f2c974b3131d9fb71069ec75a47424e90e92c662b5503c8ca4e109ca7afb77115a81ee683c89249122385186e8345f2bb6825c0f515ca77d5c8ff2489294ce1f5bc8091039303a14c5bc4f067203a180464acf2be2919fb4003f36845d2c855ab605843ac77492ed6cd240cca26828f50b8ae7b9e9c2387498bd01499d12172acf5567271dd639937d408ceb3f6e9fd858a519479f73788e71c8001e0482b32afc397691001db4046bbdf7b3241b3dbfb4a9d3dfdb63079f2993caa9e188f593399e76d3f1b382b5a3b9b79265e2b8606725634e7ca18d89c4baead8c7aa769bd76681b06fa5bd823a6bd6843d8dd3af49e3c7ed537141e5b7006d10e066d26e562095b3116e6a0d36f4b147888ce13cfd66f433ed45a1ff83851462795700fd707adbb9b99b802579ec7d55f02279781411ddd188c91d36a81146f4574da6346dca06a15aa4334358c19096a01a8b6a994948b03289a405787c3e79f230e6abe716e79de25f6e834c3bf427e4d8d1763399364fd80092d8c7ff2d1879461c58ae08086795e24030b01c34d4c8ce2f18b4f28b6bdb8e2ebc30018309105bf2160f4e318f9f40928b7f9d4320f4ec471988eb53bf17ef6b254b523d94fcc12124ed3602b7720e99901d5c9941a86b57a8169b017d50c1fc3be03e5748aa32cb1639f35b8ce6e2442885b67973198172bc3aef85d11531a85ae2ca6deb7975e6d8de1fdc2651ac3a45c3d2a2e4246213dd61abd343f015d05fe8fecc4f7a592e69a041abf698bd98462268a79a008ade3918495cc8fd6cbcca49bd7ea10afc81d9b1e016e4321f4601ee422106e2405c3d6ea6dc18eb944df77707c830250d9c0e871630184763070907ebd624ba0518720764f6f999828b5c0c83b513e31d16a4103258a82c74ee0e15e3d8182bd1e2ecb593d3097d9d52d0c5ce2e6bfaaa061c17455784470922fd9c1df3aa8e37e98e671603064dcfb269a164d5e78bf6be97cb73339145ae6fa17892e5aa96b85c8758dd42a23cd199b11975277b5730a5cfa4f7e9b103f3bac22735578207a88024f60910576fed52f5ec394b5919c917fe7fa245538e926d2d6d4342195c0dc867a08ad0497d91fd4a0017fc30e7b992e282e25620fc861730edae9104610df6eeffb3d120895a1f755d0e350b09f74d79e9c8ae2e78b0cfc3961a9ef25c62b214136a656f3c9b058eecefda873b522399d750071514a5c4da1e4933f91b2ee14e473d0886db2e37328d094329dbf8fd606d3d6938a827cff5cd232e1d6d148048267ba7090e49c37832c631067829d10cb9c9e3087a9e281e82c533fb0c39c9f8865eb427b6301054cb511e688450cdf622b6d9a90d9257f8202235f68556f30ca98e5b71fab4870b68b9069ca3c3a446a9e67b240122cacccca92403931952b691c4592ecd23314a404627e424e52cb7ced7eaa636d3fa7f63aafc7bf65bf062d463fa22427a1011389371123e4abdaf4f09d698eb90e6b262ccd75d2f0ec680d502e7099b6a3f12aaa4389cf75aac3c961a1e7432374b4d84a6fc4085048ee2c55023856c3bd3793e9abd812d7e47595d66620aea3dd0c6e2195b0756e411ed1d1e2e8f456b44b7be31b847ea6f24d50d551238ac722ff574cd08019133c8e7c4aab3904e23004fec37bbfaafba289e23ef67663a0d1de1028739138217910c21f99f804f607cf8a4fedf3f09a01866ce7370b9def3d5ea618762f7084a12406429162590c56e7d1aec90484e518c2bbb53c61e64a472ddae02ed622c99468e80f9e666a310cc6cd9b28386537f317f933b8701c2ebdf7601624b4f6df79c4e06b1414615faca754659cf97223e0327d6191d48f486a5ad2cc24f5c6e0f89cdd1fc00b288be987443c932c745e5c245af448d6a36899d0cd60cf03f3107f7bceed4f160e3b8db1d0b4e15c1940f1058146c4611928e56ac3f01eec005feaa953393ae348918ea3cbe46d8c6a24f291d1c7aa90c5df32a3dbe9c4787458eb0620a411fcd9235524ba7d4f6682fad06e48a540c2e7bdff635976cca3cf90de85f6d877d5eabf94a63657b6a615e2f455835eb78b5766b22baa85e305243b50f654b70bae68a068dfbb2421fc96cc306cf72eaa2362122d3e125db542d977089c21c66ea35be3848e875fc36b10e3164f523854f38fe89dbf8232b291712e66fa44d9e27916db1611f822d1b3d5207a4fe2588ac1b2f187ee1da14f8c2f7ee106e40edb62600f70fe90a6083c1450947162e0a44f6296b9e84c0a03238be42b09e33db996cd02d6de896d16c9959c27c71192f748c90a8ff9f08961ee2b119e9e663c54434d0aeb170972e4edfced661fd3a27096b968b246b694c8c4e847df94043010df28037293012a1890dfea734d14179185899697d07c164f3df509827ec6714e4996c25b1da418294704e4b11353b2e2a328a614157c3642b4939b837ee0b6f64a5cfa1498a542222a3c3c9c4a5d9946c114660fe31959d5a21d1f812baeefa9ef20f015817345eac7d9b82077436424d7952d2b90bc031b2f6be67ad26940616ce68ea70b4bcd48aed597420d76514aae96286a2e0ffe9f0bca8bdf2d99f8a431f8706930c219f5b34c1a326be9609a38a4e736ee41923e1f3202eee17fc472e8729e234140f24f7751fa43ccd92ffca960e15024188d0390e34b5522f124586b3e0ed1b6648292d55d3e63be05cc38650a0de6ee462e16e04f499fce04f63439f1d04d48a9f36856d418325a1fa22bd4fd496394677988c675f4154799c9a2850f2e5288995106b24f649b80ae9b10b40c67e4ec2263ad35374c912a154325717c41a7820796b38299c1e43a02121f48acf3326f99031190b65eeb623b8bdfaadcaac8ec0ad974fc7189ae49a07b25831ab2f8bb3cb43145fc72badbf77fac217d4d55cc12e807d8e6d4af0fee45518489d594ec22bb76d7a321b897cd43a65b223c5f9436abeeda099b90d81555a1c42662b7f2b632b9d5587b7947203932caceab8c7a434e7b29276dfe55cfa17fb2e0f744983880454b85ab5c32bd14683f7a496c4c5bfbaa2d803c533d1a6b695fb367955fed964c01c9af8772b1b56444f7ddac201b348e8a30cac8f0cd06c92b258e52b47dd7e5a251f636c21af25f0f0cce80661b32bfcd020b5b3610438ad9b4f457905bfc13a7880832a07130ebb23e6cde5aeec5cd345da94b18be456ea5a128ea9b38609062dda05ebe2df9d25fdca442bb980a2219528ffc7919ec755813927ba61b9816e266ce4a85bb71e6675acd2899a5d2d3153107faa96fd7f760cc7617db80ce6c625e28ec080af0270139c2e0768c99ea484438f3525c8cf9c3911c64bfc235756b989dd1e4db5fdecf2be2c229f94591f0b7c6bc7408cd6c6e8f8117c9a0180e4325c1e0ba08dbb3a9958e628d3078b46da148a857731b2be7b06014007d79b7b702201aa277aa8d37c8f6aec9252f9f6667da52f8d2d813383f13604963a8b13e10f34def24fb2b7dbb612214f6fc96d12ec8c2654c0932277e20e39b7b7d441d2d421f6911c164cb4821c949fdd328cb9968300ac342d9074953fe61f119c4df7db8092247da7e42510fa258b4ad6be26d2f8e3eaea7fe1e6d195b9f16bf6d2429573fb874e85fa242a6bd0e8e064d35c16ad5739a91a4ccdfc3366619a8df80357d36b45cc6fe7251362cab354ab5b9b3278165dd9938f60648114b7ab0ac142bb01a43b2375f25b77f4993e951acdeefe7a2963faa1509534c3e2793d4865821f52314049c23134e554b2ae4589b3f75c075d3259eb9d3ced8baf811766e40fe5984ac1306da55190a99b3a0adaf2c25895ac5f897b4d859211e4693dedb3d9524981cc0cba6e96d8f179ddf1e9f57721a585eb65080a55969d1a22a3c0d61e0e46843ccf8b20249d341c67b8b596bbd0bfce8fd6eb921ae1f46e0128e905eac4beb8fcd675395bdc4d01522af95f075ac7e2b8e85502d1138c766f4fb5008f8db51b4e451520bd0f3f36fba7b0ef43d4a73d98d6d7c30b9819cbcbc9584bb574beea53eb9eb8b9980c65b8629abab9dd373c1b16299df106ff42d681a8534fa04de806d06f6ce694491b98f1e8bbc15c26b6c7022188e058e1897ed659c7e54392f6d5329031ddfabe912954645dc477932714acf8be2ded944bfe7a03f084214e2982460a6c9dd07eb7925a1c5d40e2b4ddc98acca63f8e0ab14cb1823ec56e51b811fafe9beb94eb8a15f75d4caa2080b8263754e21281ba91ee952c6ac7996828a70208d0c742dda9142e9c7120f61d5e2714e4ed5c862787217a571ad8631c24b29a8010405e82d587d3b0bf127065a8c39bbcd068a14f702b5adc7e2a767417a692841400bacc8bf520c95d3bbd44808c634fcced027a06838d7808088a50a9cd68f1a16b1a1a2bcfd6ce3c1dc4d179e4a3e27f6004d0b649a35325d2a5f4e95d7d2f6f67ad4b4606f8940a8b8e41d33789959e53fc3341ad36115a25ab943edda2beffcf4c13f83055069acc8b7afae750f3289b986f8436f3fa61b1cff73731cecdc8465d7f789f7622e10bc99b08f5a990ba8a4b870283db66c357f061a8dc6315c1c9b211739ed482a9fa15e4407938cca5b17a43f439af359aca317af6837f359a64f45637dbcf3bad9c1ca189c650783aa0693e7345368906407fb57bac86496423e64017e777ff301a26d28e4eca5f0e27831a7d0cf7c015f6e5612f87d7b329961c46aa2c70d1a55e46e05163c416e0db3947fccae8052c9a272f8435a10d3433318f34f4c2e3f061a5a858033f36bb60f622f064c2c12e9dabc6e050cbb1444652560ebbc84d32434200ef7ab8a5706ca6d6aa52ef2c462a90ec6336a5477cca9d64a0d6bc3d954cff06a0586a3b09806798085ce567af0351e58974174028b66c73ae727f5148998d014c7879dc806647faf5d159f45ccb88a54d435ae16834cbf5de97cb17fa72d85b0b34f8fd7b2e1c08ecc6c8b7a7cd176de4e76095ea9842b9240c7411811cbe824b0c5d205227fd69acd8834d053315b706b2cb0debc12457481cb75cb25300b0a1a311f50624eddaad7f2b8733160f97385e12bfc9a900e13965c675005c05698fcfcff0d1a97f485e66a3a7d19f810f11576d130f8b6b5a2094a70830e622fbc43b46ae9fdc672b8e95144ebb374c4263cf5251eccfc3a92c1b4bd21db2267bca6efb68dc212386029e7f7cb8ba110f5b385126010a32d0b22a9e15a3d727829cfe04bfdadb6de92209904017d969d4f96c07b900942134093f69a3147102ee824688baf64032d5f45ace92890cb8e7e40a022db35952647ae17ce88b36b71110613ad180951dd3b79c7c9fb84b561c2f22cd03436380897ff15d7e6d9dd4a9ceea60d6ba5e2e09b6e66b3acf93371ca830929240a8f772c9641c85235a377a51b3d6028d077d559a449e403940ed9795a54d8d38e9dd2422b1130c920229c3e731874335ba0b51d152aa6401d7107d81e39c9c88cefa40df024fe30fc2d89595fdce6ea1af1b3126a33c97168fc220497eb479b829dfdd0f2bb6bc9690be1d14683ce95cbc115b3a2a09d49dc4398eadc5f3caec085cd1958814a4bf4e9ace923ee9ceb21bcfbd1428fa33b44bdc5ef225bb909c9b11c0cffd2fcbddcac0c7a5eabfef6386a8a325c5eabdcb6046a25e5784d735148d91a0ffb18e030acab7aaa806d03e9109856647f9540a9af6a878dacc2f68789a347e3da5b892add4b802c2ddc4fc0ebd7a0e22c1a8e7587dcfa35b99f5d8165b44c26ed984f60d014fea2a5d9521ee29c81f699ff66f4c1e2e939e0728b142abd2a82aea114abd43cbcd57346cb458392d8acb208c010a8d31c74fdd1c1fa3ffe153b43d22c43334f2347f7f3e49c34ac3b5566333fd779463b16f7eca5975726895900b194256afc825ad61f9ea69e8387ec666b1ae3a6735069f3a9ccc110742a38c24962be7ac40b4321620d1890b248084ea264ce60882d49924fb2bfb99f4424cdfb2fcc46298985f5c77928983b1f53f74c5e6f70650b41f7928f41854bd5102ba8639a033f7530636862025e9a4147a16502a814078d40830150e9063196160660a41b741c0d66804935d838341a00916270636933011a947c51774560d62d39483d1ea86eabb744c6ab2132c088206af153f2fe3a4130dc71e95354478e745b0b02a8eaae439b11d16b2f146f3aae4316f208f12b61b139baa8972016e5c91604408c82ac7b726bd19e9675398b86d39c20752151c48cf2f7ae61dba23bf1885a5deab8e2cd40c370a473d59c60e39ae6c4f612cb3f9abb082bd91f3d9446fd59cec76e43e5fb30e7806616227838bf33fafd38986314d469184b6ac06bd46ced486f2ee9a82ea3bb1095ae6f9a46030f9986563ce3da45ea533a2b5106cb5090c85e0d6d84252a6eefe0bc1a15b492dc37ad07145a51df64597769806b84e54131fb1d4560791118201072e6dad4db0b0611cdccef7455122d1c899868e8b032278d995c982f0357c12a94c926d030fb82bfb743836011c1b756af696a9b4f6be5310b025140a09946176a18a4f803d6e25c348973e33813924c9881349dcec523094304ad34abd2f7a2d92180b6dc219c59b1232518b4c6626d651272eeec13f4c54a99589fb92826ff438a596d70140d8061f6223b34cdcaf72ed66f65a5b52247801e6817d029ff64aea0361edbd9589e307c59f1b2e541d661b0e0819421a334b30686001fd32b30ec89dd2d9c6c42b3e22d4bbf8cef0f84055e2738b13bdad6d389155bf316b9f80a4eb06a48661b0a469fd6e292661d4516c9ef6cc988700c0f9054f17cd6f1ac39c09a4b82c9106c329c52feaead4d80000a21a303a62602b5097edfb2f24ea2bf4ddb9cad8f48913ee0078d2eb28a13ea7bc7d1cf940c9d8728bf92fd9b6479779abb1f5a89e875fb2c7ed2af699cf265c8d41822b341780c27e83710192ce1a982e1d23ba47fc84bf3509471bb929ccab794ebd530448310f3933c0a77f0188d019baed0638a9876b324978c34d426b0234f3050febe941c163493863c759387221bc76d94a376404ac9240d0a18babbcf072fc10e76a7ad0082237f0abf5284196e7058061aff7c0f7b632c786bdabe68e6652b1017b62465e9c4f4e18870b63275dd902243929c65b7b7c738cd580b872d002cdc486903e2780ad865daedf76ebf621d45c3738fb643b52a2d995d45665568d7b0a21af2a83049613da86a254c44f15abad62ca174e41847d143ee797641a03ec4f85f1ac79d6d9bbd8cc0bed6866ae30279609ef0bbd2216651177fcbffb6f136e6037ac49c402800960a1a46d89c99b349e7a6582ab39003395a5f09d4023a99dc4426d0373ab825a1df78b19be206358a20ec18176c2816416c82865e6e395654ce88f15f3a1d6798d1e299890ca1bb901e0fb1c7f7118d05b1e5ffb55d380ad1fc87edd00eed728b5704ed0ba23aab1b501bab02ec3a71bf92ee50018f2dac78e8ca7fa003526924d175ab947af6ecca4dc5d2fd2af587e2b6f3afcb85543c6d9ebfd2413b043605d4406cef7bb92534bd3e2496394aad1b69356f36e6f6df83c367d1a88b213257ff8b06a70e3c7104a9b911980b0acbdf6c32d10174d663d77a97c70e70bb9a79d99f5be2c59a502b57944a4da8c4b10396aefd3ffa5b9055ecbf1a94f30a3ddb0ec1bfbe0202f1779d1e0213d2c31d727e43343beaaf0981fd5404449f7bb3ac3ced9250910cf0d5418f4f7e83772e4740d4b61a5965c85546571d01bae97201ca1c1e8b244e0936bfe374369f18abccdae0fc25a061789556963b852f5cad31dfc2072a572dcb8100e4bfb0833f73aa8ce9456282110764899be5a6c18302f0e931bbb4ea274f9adcc5637f7fc259e80d63375f5fee307e6705d7e45288c1b1643648391b4862fe03f165afd6489d013521869c797745ad75aea64e1e9859098c8e7fc46bf83453d21e200732004a5d937865bc183f80c3aa6aa061fe7138f66e3794629a0171c765a63ddae13980afb746e5c9d8d2df47f5cd0734fc045aafe1679d53f7a992024127bcafd1ddccd112c0bea3d7e03ef50ea71f6025a0a4b594dd83e405211cdffa97bd134e407253aa66df9490d76b2e844c04c45d7dc4b7c95d70532f50f432c4b7c6ec0047f708c863f4c538c73c47a46716afac09d5814b3c3726dfce788cfcc62ed09b01a29b8a620f2b338db21c01a207d6ebbd10b03472426ccfd9aa3983b1998078cae17bcd38386cd291206a637bfb9ffeacffde949464c91df15b6ea21ecb7d99e7fe47f0274374efe092dda2870727093d3fd6de405ad1c367f555b125a387ab72d7b7c441d54c595c4ab8c0057664713db2fbfaa8bbd18cd3e686bce993a66bb931b89e9e4edeae687d557f265a76964d1a65576508951bfcbc453b43287308f5db17580336d1c2bffb2bea1f8dd930e11c31b2c472fc3afde0e5a691e338be346ace794b344663cfe58b029bf6e5f929fbea221dd50a8362885d120fafaaa0b3a595ef5d9e454509564ef707a899bae4ad63e23d98c7d702c4385afd890193f67386f6a2c16d293ad0d93bfae6eac401afcc2eeea2144fe67a0aee3ca8e4d6c5d99f02e067a60e291bc64059e5f92ade00ebb86d319215400fd6812010684da1607e4562649306953b8036f210a8006e1019bad049d6c8e32cea469b3ba33bd9b39030c8ca9aff1e9b36763eedfdc3029afcbf2a1690c73b7bf492c3143377997165426aa44da207f1f2eb54ac21e8c37c020a1eaf515b9e6fd2fdee74506089366aae7d32335afada6a29c6c259d2bb73aaed2397fc19acfef998f20a5d361052baf363b7a67b466f43982bc134d1d795753fb6244fcfb43991500d84f68104fe77d99ed11bff8f7762674147e7c078b51a81580d5de685133ca4ae90c6a0e2658cadae2d3d4363e5e384696c2f4853fa0bc0786a6d2f62bdf45972a629025d731184ff32014c4e8df21dc5565999c9c472fb26fd637a12b9ddf05c627c8209117bf861b62ed67ae1ddcb29709d1042f529cae024c8ff1dfa56750449f7e173990fe838b3d3defa80c4fba2a85110e0975047efb1be6869eb459e8be8b49d215ff4d88a5b69eaef87f396ea45d7ee44f89a171d4ff8360bfb481d0e77d149cf9d319c1eb65754c78b0eadede220683a6cf8db1c256806ada5bceffe34f446ff0c8a2ad989765d53a83bd2890eaffbe411b49bd602534d363c4b8ea4052ed80ec448ddeef519900018efa043453f0dbacacb6fdff10bd373ffc0f47e16c7dfd61de1769c87736d386671e294db3fb44c51a1b0205285101454a119215a1f7a4267f496086e590fd23f718dc89b25cdd5634d6cea43615e4212de4f02d2fa01ab29b13ea2d54e00e7d9aae1ebb9bd2098062ace70ede86d3176b8ce78464123d2b6b6d233805e5a8bf6a58f8c84d86dabf3c7ecb782eb0e580c0a8187817580e455428b95926d6d250a92b6d5d7c64b5a46da5f892a7d82de41c15399c7a5392e7059214ae9c26fabc2c55ea6b290301b3224b7b6faa5c27b374bb24878eb8755dfe656bdb4fee324e70ca2544f89cd59116f26501cc2b994ca19c9815efb28cc5b8cac36913ffc62d05ede34e44556ec9697367d5a6662ccabd1a8a9c07af1dfaf272cb26a22f4730c8143c7accaf693cbba07e594d2adaf4f0a0f1dd170a21090d0509e601e2c767988fe5102a14a1fcc897f2ff4a8fb63b96cf6e8e6d7a09fa86f044f2820cfeef57876317b0d67da909bff7e80389f3fce385d2e0f2a2a25397465710278685f1d9c438e70940f9430b4e386be4ecd6f06a24cb49b7450d409c2e287a8ca90c9d8ad8aa23d29e0c8642671e2e2340b57df6028d25118863927d08fdcc1cc0ad07afaaf1a9ccac118ea99832ffae9abadd17676a7f2f0ec91d832dfc21caf2f4f94157cf2d07991d9c9766268c96d26fe249c2bb7df044d7443bed73c3f7a1c1766ab562ac921889980106f7e89ff4b55e2bc4937da4f621f2b0ad4e6033d7b47a280e6ecb1b5c46a2c013df9d7aeef11c07efe437cde5310d3a792d467e87b865ed093069b1ab8506d95e7a1fa0d24b74dd1b17ef8d243168857ad5cc6cb559fa44239e6fa097cd4edc3e20e3dbad52957d8faa89165f2b35504cbeb37f73f215d76c274858f234ef4f130bb8aecaa6121ab807ee270df145e5f008646eb8fd605cb399ba8a453d08a0ccbb4bce83f692a769f081c3e48927bcb76cf598ebca80892cc69c9743150b7925877ce1c6c76d8ae28c642d91772c21da09b4ea6f70c85353096f3e4597295158fc2b691d871690552b3a89068e366cde9e089019527710385943b2b9ee01cfe114741f2814dac82c91726e10a262f18ca28407e6009af207b81a53c05e90393710ba2070cc229805e3084154b40bc8a9279f306dcb5c6d4094fd7fc64083b18070656c0af692778125976667548f38c3caabadbdfd077c31eb512e4a67f8ad765744dde1907f185e8b6bfc7058a26509d243c4128726931291ce14355c436e8010b585c683ebb572414d89819247d1b22896e8904960312f1a05f30c1447eef358cc66f78f04657ad1e8250cb866cc14b933a2499b938fcb325a42137c699780e0ddd9afb86b20e82b79f07b823fafeac01674b03001ba30434ed8e7f18555f0835413b6b63c74374e602aaa102de5895ef832936c508aaafa069cdefd819c983e13532f371d6aa145c87e34ab9eb37e90712b931fe268c3cf129a58eade43f3b323e77def45e885314c937b9fef9d6c72ee3156b0ee833d13f52a434d3f8c03f94562dd9cbf59361b4f318cad3a91bd92be336878e55a906202596371b08c17b8462d2c7e553f5c56e6c556531bf079a20001268ab77ea5aae020cbdfdc2100c3f39faae4d6df8cffd18382dfb24caa59a288b370785fb54107e5405b0d5982bab7ad7e0592900835c23b59e960e2f4b54a6db9a01483cff57d0f47b92eeb6458b7100d00196e20021ce7f45a159777d4cf021280562d2b24356d913c7252a165cefd3a81192c5fb3f57e3e72d39cee7309bdf13e64f4e5622eb3859b850b0838e63da483f481a68f3c85ea3205f5c67fc42f0eef0e1933b7810c9f0e20058a566a5afa2dd7356f7b7b0eb9b8f7a17cbe04cd821749c76b0e8647f55aa370cebfcc64d38803c19f9055d36dfdce46e1cb4958bfc2bce9b81ab9ba045776dbc4101385dbdd99eaa6800cf14b021e42e71dc49d20da3a4c5f49c569efd6cf0d5823e236efcbae768fd0129c8b422e72d30cbbd84855eac84280dcfcf90577ebd6100b25600bd0323b113fabdaf382203f561592ad71d01da2bb08c8681085de230b456709a721a0f0189dc004952932fe86e9dbafeeb55f6ed9b1981f1fd63bff16fde0e689dbe24f241f0e1a20839de1d583daa8c56f26299c6cc1f7e981a02a61e89df640c507685acf14a179abc0fbc7df4453f00cfc62d9b684fa0e1338a320af9e305562c112d6a0b3f3e49e0a04294e8ea1fa1b91cb05b9c9cb323c43c380555854ffa7f6e683037aed8968e41a3640494ddff34cc9f38a1511a3d1a6cbae863c3b1f43789dffd6fe45f5480b71bfa25c9f76cfe02932fcdea38a0d167886583d9ba3c87edbea42c2c25e0e0492d8be527e4c475f5ae6445bc66eb7fc42f03d8ff5b468560050bc62da4abe5eda5227686c07d65ce818d756407b72fb898f2f0f90e73f1bcc04ba494b9b085fb4b24f082ea656b545194e4e8c0162a07e2d5f5edd978e84d579c98f038f1f809f148d101fb808beb361318c6fd89b61861afe44354daab991907bf41199799fff9024ef5c053b9b3140641e13d1b94c731e8e5811c792c52adcf0c8e761abb1c2fffd78267c1e31742eb99c644d3d2c514664029834cc8442632939530b2990632c8ccb2b8f8c334106a8d36d8e560237f506481b05e9aa49197fc7681028fb8f813c5368a94de4ea0fef29c68fc1552d360b169a6fe108b0cebb19275648fe2cf398bf7eac10b5035804235e6ef72e3afef9687308c838b89a2c40e099830ded4b968df01b4a7fc72f774323549147861720e9b1ef40b7f4aaa9c939c94fdd96d4d2a208009193f840b953032f5dd46e93b9f10d6bc48c66253a65152d92c93c14338c5787a2c699e5805fe020e0cfb9a3f8800c723492adb9cf455af7461d489d5d4ec57562595ed1066e4ad90db773ff97485c56bb95eae0ebecc831a2cd7e976f189470aa2c821c3e8f4001dda46bd6a47c4689f2220e71e4f230ff0f8e48b86906bcf4e0737a14dbec02b8b0113921cb20fec2203a535ca522e9997ec80fa50ecb53f41c2b4c03941723ef172f3e7793ea3c7ccd9c2a536f6b9d492eb084280e4967b76ef521126f1042f9ff6e8f8e6f1383904cc0b7c8adddb89bddc5de71f7ba006afaf8c2e3e9f1dc7749115a215aa0c79016f47e76387a8c032245f171b2d8274dc699d28ca4cf3a420d689f5e472cbd1a79eb275630e8d414194cc17bd1e73962a5f6996dc32851b4341923bfd7ba2ae8559715aeeecad94e7967b6a25ff6dcbcdb09be4ecd2114c68614bda6ac96fe5a82d644fbe8acbf50cae16744268482d122028503598fd18c6ea7ccf6eff6006485cd816080bf41efcee097a33672e5caffc874496f37436c91f59ddefa1d1d7e4bfe2852069c5d1b8040ee6c6c0c8056eda7162e0c1b77a001e57a54e1533128fa85199cc6ff6a906fc802400d15efcf872df2676e769547f805e50006bdbeb0d98512a2585abc67b56971229bfd3218e4cff9bee3e0df859083b8c5929b695dc4638371855ffe90b3c18685c772335fa062bcf916fdef6541a8d56b90c20184282be13df15a3ecedb1c62560b8945723bb95e7c1c3baa73a51a64b60364778a9cfd72a84dcb45aec05c68806eae7aac47b2e4029492d29e192d62736124ed451b2e80d867af56a9f74cc4da55927dde5fcda818edcf3d350aaaad603a60ba21f2a875a48a717ec88bd77871f7c41503f9471430d9f899f3fa25082fee6879330562372e082723b673f1be3e3a3225f306b1f8f8482a71389c77946489c0ce6330baa080c6bd6dcce48721ac7d06f19e6047fd78143602f7782458bcca449547f14ae01b7bfc393535950f5047dd049c1ddc5c337094d2ab6be6d9fcc381170ba78ccc19847fdc662db8f35d1e8abeef6a64d90d5c333d9431bf8039304d10a329b3268623a720fe8eaa28a2c8f0ba6e95cf9832dfd884e473bacbcef192b37ad012475728d4bdee82c32298e77687829a60a1235785de445fc2819175e2ff0066b7386b18a830d4faa13d203ed023e873b665b8ea1ace3cb90228aa7bf92591158aa974dd2ce83355333fcfe4da09f6df628340b47f0da85c04c70a6c3d6b2b5bc8893417b2e28c9890ec8473405dbe198eae208485d7e78d91ccf56647c30c32f03a6bee7868ffd20fe8e222221688810049a28d3b8d5e43aa45acbd337f66a8fdb41da3e24bb5544087fd4516abc1742c8fb1ab817222db5f808779b78e739c45277e1bbc0a3e5d7dfcc71fc96b294659b994410c03bf1a4e0a981c96182c8c4d80dbe862c8548944c9f6a770524792007d2c6a88463790b0752cf53420a0ca470b61d8bfc00847a21332ca8cf76fa124ada93933c2d54814d348056a9af2cca2754714357c9d195a31feddee3d9abb344ecc4dad2a65d7aa738d3e3acda45cc187f56d21b1e6c57264ac95c6e605277ecdf5e40cdec56a8140af8299e44bca8fde84063b343489935b21d99dd17b78962a9a45ac3e3fd46cffebe2c162bf1aefead779494cfa3b8fc35e414ecd1d1d4f67ee43431ca84545896de472c5b24e8b7c40155dbf7f6921555f454c923fb2fce14e2712acfcccea6cf6891f24bc0eb281bcbe5bae17211e38fa2935a87cd04463aa177d11b270912eb03efa615712b9bda797cbebcc4e1b4d23e0f158e7b94ddc4a3a572acf320f66360cf8614a2385d55117ba538a5e19be307a98e6206cec407404d441fbc0d330c4e8696b842b8653922152f222ac8cbb9f2864be58542daa02874e8db448f9daece7abc674059ae57a4dffeae30094f458d985cff558c5d0dbb45f2cbf986411872c868f1269c19b7d2ffdbdb843f4b06d387737b4ad6c93d184088c9afd16577d80c301bb582d79c140aad9c965ce8b62eef0b8cad900a43b5cb3f843b422a056361a1abd3acd0d64b7df644c6cfef632e9e0b86089f40773b42794b347d27773196d39e83a2a2904669aaa460465db41c354172491048a39caa70d188223dab6bdb2586043511258ff7c04badfe908517f977eaa835238ab3a1e5737100321aa3cb047a28245436e89b032ffdcffd8a75023c425197ee7cdb4763f11b13de513aa2f4b390271097e994b9fa47aadc96bc77200d2bd06799a0a4d2fe30fd66ca0e7ddcb57042480cab26040f6e849217140d9d7d71104495101746c754307016b0c30ea5a4f1a83447a7aeb87dbdc68b98eed9ad4ace74873a53a2f82f8ba3664045bea119ef457d1bdff5b8bf55d00a0b919311374fdca44bf2abca042b6f753530519bca1e83b65e2ca5d8852e0bd6b3ca73737f579d16910b40982d4b061052b8d59de564546728f1cbc77375d3b362adea7c4f1f83c62c5d9c0d4ddd57255638332e98ee8965b47e90f58cdaf03b9438081e62fbb73ca0a6bd164b4ff35e94d061252360a1b63a3f58cd785826b3d4fcc84023ccf57f62b3cf61e485c3b0a2bc741c09e42cddbf0f2bec85b4765ece041f563035b41adbfecca3c888caf6a5108671a26cb320242af1e9ccba8c21a9f4aadc97b0de7e5d0a8c3153a7c0a654c69db04893580dc00bc8dfae4e2761697c5379511e1d13425888270b466b8db0f44d92d4075c505651079f18af5b7573182d7f5642a88a32130e8531a5c1aae12d6c5a3e142d3ec24cbe4cbe44511403a37ddf937d5765daf4a85db34d598ba2dd3520216b0b19499f644fd2eb557a0b9a038fbd032ff121057d76f2ccfdd9e491169faab107f0b2ae5fd5889fd2bbae0cc5fbdfc5f734b3a7d5b5a6c6329d634a9919fde1815c601bcf2ec6590879550d5eec20a41e88bea3ffb7d46f68942231587aacd90f0e2efe9d0a5414144d681b90da30f27e5f3255167d0a09328d66be590a7d1f69c1ab086a7e451ee7ffba814402ad97002d42a87ea3859d1c58f23bfc66c1efc4fdd3dd98fbb074c32205c9a6dbd630bed5e1f3e50660c39d15df1dea191f5409669618ce4d20954ec5bbc2c0d0a81c12bafa71d10ea881118fdebb10949475ca01b5eb14bf67ff47a21170188b82bb90db29f29e8b9e976789d0a07fc6b2674186bedcee515f76828bd8fcca2326d19037afdadef6f2b0ed49d9849f21ac7d2c6e8d1f824bcb81b2e94d06c5f3f6ef5441f245f75326309382ad3c2f9ee655f0aa1081d02a2c0b3858f83083fe06a2fb376b106cb1590087aa1bcada0367f305282baa43acc36fee341b63b522eed1a27e438852b9bd8acba91084b3064a81b5f06e625d964e2f56047dd9874c2d565002c6933573917d0d2bfc0331acd8b8623228f5c10e857ac93fa927dbd3968169d12cce40745eede48d88b7fd5d5be1ec6ace220690f9514c7ac4c610141d790f6635ca61a83b6c6a900f12b604537d5a94620ea52615824799d3da22751baca2bcaa3fa17ec34ae3f89fec0fab5aa2dfa3ed553ea05bc8ae7672b991d4ada6d9b2c1a96ea5aafaeec39fd5b71617f0fa9b9ba435f03648e626b94d2ff7468353a52ef9115cbed71dbc1d0c3eb9f8a0237caa3de0fd18deae24d997b5818b210222230444ff5fe563d5a4f47df62495961a932585a2e1f01a626a536d935d4af49d9b862ec81a0281abc9c3d6b05548d534be8a6a1fcc933c1283c9e9b9a9e11fab7acc0a9c24db1e06dee52e23ef9db947ac7d0c6c915e01f2796324eadc218162ad124308d96fa96f18facfc959ccf34422e0f4c7ba0c0b4f521376f4a8f3fe5915a0263e3d34d733028d831f7eaba9b652d1b20bfd66325015190da2751f31f82938b48d856821c749595cdfcc064643eb90b41b9d6c067dfa47fa6c96a3ba14fa9591ba2a5db2466e328b745c45214807dde0890a8063264158a8aed8e50344afe501f7404e397c3efeffa3c21ba5877a1a0472b39d3d79e54d50921fcee9c87417b961454edabc0e9cc6573399bbfab05b2614036d6a0343693e622bd613f638a03d7a19c69347956378b8513fc1aa2a7285564602a6a4d2af0d70cf530e451855690b1d33fc18794d33231d6328eae3d9c583992594b438ba2147c7689f56009f4133c25cd41603da9a93e9e55cec95eba50b57c35212536c4002754bd9c6b4310adecd0d77252ce130d6a56c299eafe27a49faf0277721d1304823d9ed904d4c697fb86bdc6361cf38b503577fd50426d525c3a5eccd27dcc0987c362c415d9fd3cd6fac5752f28b203ef7e48b467e637a51b6f88ee193e0f770d207727fba5b4f9322a893b6e2e3dd4a21c55cee233ecbe7f60e0829c5669e95f57dd4d80bc49b594891f222a26b772336402171ae90c3574f7f85bac7709e98c60bdb54a81996ae217ce60d3a86da1583c9e0f72d38c0630cbe73223cd000f716cba5555505c846a1c719b8da09aebbd0751e013bccc1ac47b5330dff49aaa985a91ee480d887c88ed2dab7bb29289638c59761603cedbad646f64ef314f1d56d886a095c360089eb6ff81c4220c019902a2f5669bd1377a18254401ce0aa4edc3d4dc93bfeb743ff7595374c9769de505322a80136d3b390067e2033196bb98d77ae8d4c578d9ef8a2e11447977812c21ac339a85b2070909f3fd76b68c7aec54301093569b8d6069e6351a619a8c15afb4fb94d8f13cd294723aa5d4270b6e1f5413f27111d5408aeff05357ad81476029efc44bc0e644731b9a6f56297ea52cee83d76ed2e56d2b639da124269f7a5dd33f808150ce708ff5b08ae51ac0579d91c7d1cd13fc7400a9325d8324e7a4a5c4eceb115b13aa23607f62f743c24d4f349a3e380c7c12e3cf5f14c22173c4cbf987f210d5bf408492ad386b091836106abdc907946373e1c30105bcdf027aa1207ccc24beb1e4d9fb341be01b8d922bd3d03c6c857072674654f268364ec0fd23e3c78035c2715e7baa1096096451e049eeec904fc4970b41ff3899584cd91a82eb1f035e2cfe03c83e7461fa3c059e45a8d810d3c1706df5a2d4e609a800889f30c01b3cf8e3fa3a36b53eb2e4783b33c18c0ef39675e0379c4b2a58e77cec8dd04f5c9e6ed97b67765f6a2060d44fd4a87c82317335ce4ce6b353c2442d1987da5139f550053613331aca8dca6b0e79b93a7638085b55002624bf7f26046593b3d2a43ccf223a5d062de016137cc52e78d030927519b1f2ffc9831dc4b52cdaf1c3be91b95192317198152094c8413a2bd4687654f0548b43ed71d0667995a802db5d5b02f7204864ea2beb71eaa53c4a168e89adf7ed4e286d2fa5a51682f3520d6f3c0eeffdd05777fb3ba717d84442b2ecdefa9a1e97603648d27c236f6684f800b23444c8f6db8f312c7ed6dfb4934329d430eb79690a34f7beb001b1f226463ff98f4bbf221848286cc69f87d2d4f6eb5a54093b6b5b90f94952d1ee8ebc7d1bc3607b05172c6f8d7f18630a7485236d87357dd1f8eacaab692ee03a2a4bb1cfa9141267b0d72ce82f7a4e1eb98c4908fb93697f1c889ded4a7504ca77324176f6daeff72c6afea9e7d4771db053fa01fef9ff5e41d63df31e7e60cb6cff1bfcc66f16762dfac4ce85c1515692915a85c48e84b2a795b14252099de34ce9b978d1e32905de7cd12339185a54b1a74b2429bc9532b8ee4d2446aae10db333163f35b0886652ca52e94613cf1a280e3b908c79885c9f49d9690ea38de3d04733d0243ccd1b998680eb1666761f82036a5659fb3c7366fe281fade80ef78b9ee0c431ec84c5d48cc46f2d98a41c78e816c313ce4953f257b877f5fa2c3f7cfdf1aa6182567d41387ec5ddcbdc1212aac2502278ca6464d3f415706cd565c9e5886521898504178ca5105c80894732ceff3d0bf2cf351e23d902207208aabec434832b56d75dcb864fa8f1c02171d37205d1f7b254565f3c0aab954795ac24742d9f569d4a0df1e2476ff7473819f2271759cd02b8a139c484bb78f02ea8d0f84fd90695aca143431280142155a859267b5c71c6846d57ee83f9d2a051ed15f62ab1027ee1a46965a8141372b1202597114d1b05b64e8fdbc42a4914d6f61bd4634749ef8d72102759840288728e210f1876cf3b1dc8e1bc28f581befb79351a0d94b1bb5080cbedf3eae33750897d15e458cae073e3cbd5b2870f423601e09b955bdd65345c5d4dc1d80dabdccf77ad0cdbd8a3df074a0178d311cb26b6d47fdb9e574e8e51c59603e00e483a15a9290a730798558db5b0444dd0092788ef86617b279042218990ddaba4d87c7ac5d0a7704cb867ddc93c804e530c93b4e68daabd3d0821cf5b4a45578c9767e627647ee8c2d5ba34fa2bd71f0a7db9d78aba5da0dc474f01dd83cb5d48d3d7e2ae104152bd1843575dbbc2d29eb59ddae1153d00a08bbb6da2b896c4a8640064e14900fc3a4c79d59a2fdb86ad18621b03a11311d04587a1c4a92c3a413b4c8b5ac69656a9f4a8d203d5e828874a70b08a99eeee874d0ac03213040c2be180f1ac5b5cd2b847f1900606e41fc16983b6d77ae8ba2be0cfc278d7a886ddb7ce168b3e024e2dcea09a8122d89f5d0e80cc897b49ebcd5ac053edf7cf233582018384b780acefd7e1e03662dc88c7e8143fd74929921eddd3a7655435ba6555bed9ec754aac4e34a06e7a14375cb78ad55cc61ae00bb68c1d458e466c68a10f710f0956b75616b0605ece83da2f2214dfcbe8ae7ad5ec0c517877ced107f39e2e73bef4b2c7e99f95a447edb954e689ecf66f2b4913879c1caab883814222ea744a36afc0648102260e3859fd040ea2764f15f91231f3af9db4fc533d2b30913ffb072e8e318106880378ae6961134548dc28f3d788007f35ec4f36a519f3fac893f87c9cc4b25d4fe21fe7f833041e2966978c34acc4c7561e74f67d02dfa7365f582c2e22d31341784f255917fee069826fb751fa3ee1f8b6354cc2092613eb6b1e1cc42497d39e11a0d9807524f785a9a53222533a2ee302cf54aee11f966bd9118129beed07010bdcdbaa1ab0a15c51ea70c28ac3ebc957959326dd3c29f951bf96cb32d8d912360f0585900ac2580daddd83b737000a96cd9c0e42f18474423dbbdef3fef52fb3e8ac949b80f674fdb1e11216c76830ed706c1b036a9a6d75752fd0cbbbed274ed6829cd4fb4c11d846201162c03438260821501bc064a0f4b3ccbf63a413b1dacab5ffe1127600dc4aa02424b935074b0f399023e37575984019ff95319e1ea11940a6f2b8b7bab0b949c6262407f61949c16a4ea3d71c75aac42ca3e41cd1bbfa192577a5ad29fe7b1635224b98d730df869c849f34d2ccd2275ed69a4aa5c40f363e45eda892df7fb11b0c95f25ff9c46b3faeb29c275876e645ba0a6e65107e4fef97034605fb3d98c9d1d799060c89f37bda31a010642dc22a3cdf6bdada1ce8bbcede7ca85ac58c11c0d92e6544eefbad59c9e42c947138dc864ba873bb13e09e4ec242c8764c83cdc80a31bc76fb361925cbe987db68220383e3bf8cc439be83c84784ef23170be0ce92363562dc4dd240128251f8cd2c5809f7787d2110181f7694fa71aeed7b3e18a0180cb7d1f03026f3766420a46df839ddca64e5129428c6a315076130bb525502c967a5456a18514687c0b037b2a3321ff6d2320c4d876a4c28ccad81de4d6c86428e89f3dba6500eab9745880a3a2f76ca7aa6daa9cdc11abde75ea33b9cbb4583123f65dad98894b1f17097758d9ca13a195af8428c639c2e376b624f538a170709329172515e85973c01a7852a19531291532ddbd7143f85167e722ba9dcd65bd563db281b92f519e5c2a1185b9f4ecbaf3406eb63d4f4c6b180b4263186cc6382672131f0d4ba6177ff71d6f96b191c2007fe4e8feb59f2a3820b97a6d747e9a24e28fc9634af0ab74f583c0d3c09f6a93f81b4a8e46958eb9a7828c120b7b7682b0c56dc62ab0d29c0d1c98c80450999e87eed87e9c4b86fdb270ce5a0060fee3b952c11d8e5f6b40224bc19e3fd973c3664557209e539c84c797003e7c00f0052c89da95ac0250f79967f3ff1766edbe67a3d10a6188aac53a197118daeb9677dd0e974c054f068efc3a38a202a435011ad9cc2e54800e2d75a69300d6c428a4363a71d38041ec339a0c0cadf8943a1340024d0808d2b0a5005cfd4b8445dbbd354cc7309873149b336e97c568361364859baf5f43cd7ccdd0bd322289284849be0ed93b25b9b7dc3be902c802e1023b83fbffff3a2a5887bed4e40d9d9d8dd7985bcee9611d0ae4c809dede7fee29f43cb038b229e311e2b0e126803c80485e005d3d870f5183e7004a06ee7861e81ea5400a648213c0ea54eb4193c0a0a7ae10345f31cbab3543cc790001bc12177dd336add9103486b1a12f11b16488309c44e2eeeebec45475a8bbbb7b0adc1165fc901094431f294ab27e66b00b22924c2b58cfdebaeeee7e345475289b6194bc62b0c40053567ce012247e5ea4f6b76bfe151058501c99203e56702a616a5627ab9db62e3807f42c18a377aa56b9bb679d611dfaf6806dc78a60dbaace73774fb6a8719dc5c366cf9c72ebcb4aeb629d4c80be9d088b9a74a3e905a0e402102542a6931a21ad169a3c34f5e89bb6691d800fcf8850a22f864112693b694454aba020030c02969529473052480c9626b120d6b3bbbbfb86b7ddd06b3700db0dc176833027000a06c99a34b42c991e15923021605c5083bbc5fd0932f6c20f8bcb43b8e148a4932d9ad71089b1731bb7b7c67177777717d6b3bbbbbb6f3039dbd6dddd1dc56ef3fa63cc3fcafcc3dcf869def6ffbbbbbb6ff0aeffffffa05fc1d48093e6fc8e28732c7730d174ab81098608c0ffff4f08f703f02dfd903f667f550c7bdf97652dbae891aaa4e8665e3a1543270631ffccd25cd44a1e2d4df883aa686a6c35bf97d51054ab4409d9534406bdf8682c92599d1e78498f80473a99b408093833b357ac339bd6376dd35ad51baf22009cb80ad7b78e41fa90fda429cfb6d794b572c2be3bb7717b7f071849ae15967e69451a7c447256a2429b5ce9f953fa62f4e803a6efce4da74d672c6993a324948ade7825a9fd8b71cceaff7f074086d8ce6ddcdebcffa9d423efd4a68129ac0ca108c97418d61c8d4e889ca96e01d37cb560741137be28d9b2d4376dd3dae31f02b0644ab2250643ab288d052f888948609ca1f0aafa30f369f21a2ad64a5c70e0091815876508872fa2112522f6ce77f61b6d1ae76a2c3e901157392c63236758c4115292be699bd68e041c5151f4541dca66a809ac9169d357faa66d5a3b929aec69e6bdcb2c4820a694f9b9333d7cb2a2c82a66afe6042b6085876b66577bff36ffffdf30b10e6d668e1be7edc3d0fcbeff29d6a768e2d18438c39d4cc7f55d7bff36ffff2f39b10eed587ab25adfb44deb90ff4fa3dc77eaadc6c07a7677f77625cc75cfc109cc50ba964368214c6cf8134d124953c2cadd5da706eb500e9d1d56bbbbbb6f750d21b950d13c77ccf77d7de9d3458f4fe2ce6ddcde3fffffff424321a25051c828a4f45c6edbb66ddbbdc319995b4947007d43254c81b5501213e3039ad3773db10e0debe83a7b3bbc7aaabb7b075504b3174c19b01666364dfaa66d5aabab8d564fd876beeffb43c35c14f973bafff9ffdf84e9fe1a82b6583691264f7ae3d564b71a09719b256b6b561f2e1ed533f084392f487cdf9706075d34f996045dd42899e13dfc5350228c8c6b85b2175e1bcf44e24362148044d87e0c2b666a988cf07204637624666cb154d54c566115d0d513bcc1bb5588e2d7459337409c5be59b55447832fe953ff7d39214744628f5708a604c318d9c76b5f7ffff7fa451d5a16ced48432b009e060eeeef1dce39eeee4841ac438543e20652d14308081a69b1adbb3b8a2ea2bbbba325b10e455bb2684efa86e63cfbff577a621ddaa114c66aecb1731bb7b74a9241dcdddd31fb71f312b175e7366eef2f669168f82ae2eaa4c147ce9a4c8dcf05fe9a5159c166852d302caa70f3cecdc8d0927073dbb66ddbb66ddb5665a9e2a422a582a5d2a5328675be63dddd3d86eb3759835eb1654f7c222baeddfd667377f71243588726d9a576ba496dac5c17d63d4789310b8c6e06b8a61143cb3a9beeeeeeaa8b012ee2255b29afc9c173b636a4c7d2ce6ddcde2130385013c809f4040afbf4476f958a2b8d49e9d5de5f63188475e870881d26f56de4254adfb44d6bbdf1fa536bc99ddbb8bd7b1d58d130e9e0bc28655e281211b27799b74b71bbb9731bb7778df7a166d3ffa2144f5587b2ee03b6731bb7f7ffac90b1209887000d9209ca96488c4ce91cc99e205e90d87714c1a2c945774f77aa0b4e490c53dcdeb98ddbbb2541857c48af8b55c4cb8bdb1a40380831a5c365f204b3b5f12b5260a762eaea017559395b64ad3dde891325b8963ac7142a965f3e1d52fe570502563582092ba5056be7366e6fde8801269c230994c0e84189b20f4242ae9c2c0c038ac7f62d25d6a15b4c76aba9b79cb73da2e234719c384f9cb026ebd9ddddbded6074dd45925a8c2dc82b9813c4607262ce663e70e1ab9311365ec35c7fac677777676a3b98b4bbbb4fd58e4fa95d4af5b69e7b26a4a950430c4a39d1650574ffcb7d7777f7ffffff9e047088262fda4c89effb92a4685227e8fe375d8d2af7f54ddbb466657c8c6898bb678008621d2adc0031bca9383fb8aff91e45479b8c9c0fbf60aa01485383afb86b10f930024d7e9408d72767ee84effbb6fcffd7982e9a1461baff4c3739b5d50fb13e2900c521051a3a7a541134c404a4414c7cdf37054d832e8a7479d3a087307f6ce02180ac11a6039009b99e3d58f34a6d569e745e462f2e64e6bad4376dd3ba4a8196a8a227d5cbf3c0cfcc7cdf97277dba2812c6cbf36be7366e6fdf8e14ef97d65c7671a0b2c26d4e1ad2a2000a0d4c51cc4c0b67464d78eaa4b9d6dcc9545cf73585e6e30cc41717d20dd0ce6ddcde05ec34703b24f5c86d26221215898c444a2266fb39e7dce6d6ddddfdffff7fefbe8cb99130674c9b6e573c904b8f981f8b2c291a2b9a2dbd5794086492c029549902dff71571776f952e7a6c61cc7577feffffce6ddcde1e5613cd8c3466df072d5c44cd88ad78e049b14cda99d9b3697dd336addddd7b9eaa0e655777e7da4bf29424831e4047271b8e51b82e258151da02104d98852e7a1c3b13ba2d4fca7fcefcafc2fdbdc3eceb6b912529c0d79425200b151b11a66454889ddbb8bd0be0a5648ca4e0e1aa0398d7d61146a9b9845209aa3a94f59f916a08c3a6ec664608e5f1e5317656fb97136356faa66d5aef4b9f250821fdaa8d940d964d571b5596af8457c32be255f1ca68034b871c8e2ecdaebd7f9b73732737839a43faa60ed7a921ab05d40a6a09b5865ac49c734e1a4a4a262d939c92a492b05cbbde2b54eddbcfbef6b00e05068543cfe5b66ddbb6dd3b9cb75288d9e0a55534f195c2859886321d169f14392385cf8cabbbbb94ebffff4ba5aa43d9ffff8f9a61a9f1a8f0bcf0d4a8380ab29e5da74b674c07ad6d55dcdd89caba766b1411b733e8ecdcc6edfdff3ddbdb8c6ff24dbec937f926e7dcffeb9bb669edffff8fd71e20d75e85bdd09aeb8622d68b75680f186c3bb0843995f702e3eb4902433660c154c613238b61a985082305c2d2a01615dafcff4f74c23a548a8388956b2d4f29dd31ee287798b790ffa34cf306ef70ecb09edddd9db7c43ad4496a8387d5eea6c8ca12840298934543bbdafbffff071573903148a98398b76de5eeeefeffffcf02da72f6c333684830204d444d162e6fd26564d7b267dbce39e70f25d6a1cca6f3b9f111f6bb8c11257dd336ad599430f7414e60a820a821a824d412ca094aea77bbddedea2e5ea4514577577bee9e1e812829748f516ae75b3b5b417a0010b212c51f15cb09221e06db1adac242932c869e1a6bb20125a30b1727558b07fe4249a24af6c53a5b7e840131a30ad99ddbb8bdd51d9f3b033b9f7ae236eb823e50ec8583fc8873e58453458f49af93ed016a90509bee9e41fd79481608139062cfe7b54c85c3fdff5f233ab9fffaa66d5a9ba12f88aa0e55dddd05f0154f9eb8bd731bb77786d8faff9fb6d367e6786a9bd6376dd33ad81eb9882488ab98b2f6f2dfa51adbfc33dbb98ddb5be97eaba2495539ab75a8e0e444a5c3d2b2e889cb28009ea1ba74b68abc99d7737d001f934911db3d0994fb3bb7717b6b0089284e9c59ad003e01f196d9f1e5b547a9cffdb6be4f0e8ad4fb553d7618b3691ca41f0b684840421ead3118eaffffffffffff46a5c26cfaff6befffff1f8ebba8542c5faac8041800431a38040d8481284e049761031480091d4c50485e4c0c141a321c044443610000040380603018100000c180701810060693f3311a1b60225d48bb007f460bbc8c335c6466b4154565b464471169eb99a12bbd2cb476ff31f63d89cd9d90c7319c1a91d85a3a11d00273a1ca6ef73834a51f1efa1da1e2a2a0cb5bf19a0c946208c4df0f9221f7e786b92fc0e805b5d35295e8a11a7e55dbcb13aeb361c9f6af8106f7a1144990ffac9357fc5487352972b5d53590fb34b9c9741fa1ad9e83686747cc768ee45e386a7b2617adf0e2cdb27c5e7886a8bc6e75b20d57395644280e120d470460c33594433983f7648b9575cfb147bd3b5a4256bab73dd4ec2378da9d6a73931ab2143124770163b69888c11543795ba2a7fdce8513927fe36ca73beef4d32d4cbf941fcbc10e4b078a29b5deaf1baac2ed5fd83470ae53ebc8ad968968209f29f6410d2548dddf37346964bda5487db96fcf5bad3410210e23fc1aaf541f339463ffc2e785c1a6e8c4989e5afe0abda5c2590e8d40a043be1ae35b44445b9a8410071dbb5cb7adcbeab9e84659a07ebf69c68a9699916f9c0a6a5b2073dfd8c3ccf3821b03ab57a2356a30e84b1d98063b172034662565f6056790c48027fb7c9cb1095efc1322352da156436fc07d571e11197ce3ee2ac2e8fa40c3503957d4b7b4aa691a8f45184b3ece6e0447661b21b05a7b5d55330b9eddf5bbd87684078ec8fe280d72f6306661e77f1bef30a6a7232f704c8ca62569cfedd45c25faf6ed512a8240df29f28c9d581c20dad6fd3e54f1c5cabf1df810e0dc414fb709e3327ce28edcce4b3a97d0a9048c838e15028c67dc4e6f3b44fabf6844895c98c4f19b683a1968d6855b302461c6606a3c57d3105321fe022e643868cdbeac51d001df690e6473839c6d65adba51676bfd08641cac2ea6a02cdaba485ba0136b9c65f8b260f4834e3c2c9e980fc09305f7f950f0782c5206dceff97c61ec4d8db865e7c938d2f4e7d8dcaa3104ef37c9adb341e474c0072c1a780728b1d0a51e3fc1bcac09019b70f35e2b52c408b561a81060a45cac722e4d31448ed64385180702da6e457ebb6d98b00d09c15ba19e4eafcbe1bfb251b8372b4ba8f1b19858d189bc808260495151f86df2bc49b1c69fc5327e528518ae71c1c00ee0a24ac7ec84e2fe1810627091c1848e7e8edd1fbd7c93b76dda3bd54175f2a3ab3f7eda2d58285a3b4e5c4f0d19d4949bd1ec2230f8081c864b251924a820f1a007ad83748fee0b7ec70a5a0fec408083ee0e2f201f99d405ae16cd192273aee038427891b72d34ed28a892029b541ab456f716d8e4d4df95bd39e056e2e172e19c47a83b71ad8d9468ef882e2cc3e784d912e22c123d3404c7d31e8427f16bb6773c09d511544a9e6e90de15395ecafd027a7c12f9324971a5c8f99deb260004942950c8f441292e6d57124fe9d311b00650a816085b5272ce85497889899fe35bd0269a8f81b5f5a58b4638ac0a0bc3c5e987bc0e8be7ee0298a2c1ce0b7a3af960a8f831cf4192fae7470a53517a636787b4c45d81e5c04e29ca9ac031b2f1a63b7c7a3d22feb114679ef441d46bcbf906efb8fc4b33df68958868fef1c828dd64da2bdceabac5e4c0a7fe3c1897d2b72b074dd1ac2e8802a4d321a474276327c4cc02a0a1c709eb1a2d768b15fa3924ec5511b2b2efd06204c7e74b5e335389ef1146028e7d4799b16ef1c7e0cf1acb0519885dc7fc3d2a9c34235a18d5c22e1cd0f5f124810d7b1a5b7968e19bc14c422d6828eb2280a3d20de2cd6b9a5954a98dd268c7f624b20bb4a0f2d7f4378026c4c5f09d8262ecf184282a89836ddaca1605e9c5c7e9b2a2464de2f01ae6467ed088b5a77630a5bc36aa30b9495aa9a45af13e4d70c242278995ba59728a846eb3517cf8709eb0c5f082e007181ce3023290298b8c31dc75760796d3c3c6352e34ad4d0d4a9bd06add15aeb1cc1d050d3c28fced3808f1746a8ddf57ef64bd2a7cf47dc1034c5af05fc8589e3ea3a53064527de354170623cc8a25e50b2875c7ee08ddec50655393d6046ebb2e9cfa5551cc0421fda8fc11e1378ebeae28e39f53b86bf3439c4c69f1bf6b1bd77590f2fe915c900aceafc4e177c2c51d103ece852aa05f8023c211b242f7f575311291384648a79e2ff80bc630c9b3da6cc0b716f04145bea9406422a8b8058f91fed0e680e308250f4c13d79047675f031a530724c999516e6e887904341353af413a4f7aae7f4c6c8ec8c59ac5ef227368f663dfa4f938bf3fa58d3a59dfd626958f160fc6cf098a80712536e3db70254e63cd46f100c1cb44cf64e81f2935913aa87f4340e234535b1d0cda23ec008e68bf1d5981c96133f3885dbef64a69083f6611a686ed20da7ce9f9a100f1ec925021a8ac569876486113ea0064c60443c24a77d08fcd2097425410ac99f0e5881b6da292b8767e5396dcefa2cb1ad6502ea3af407c76d8521618b0039ca842b2836a0b1ad6033a81d3390757a1da34cdea03f9ae71052a4f301db0af967e289d79099b410af4448096b5aad58af48e736b67c321847760669ecaa4839a28217b2e00875ccedec490207f1b63ed8ed99ae0aaad9e4ac727a4f1d7da471cb6a5b194587ca25803b6358fe2d5520ce961aeecb4855f3becebe04ba121047da6d8e728993fa566fb870bcbcf0c149270c1ad6431bf569d31414a45c6d3baaa4f4da248329b4cb53dd885ed51dfe674a8fa316e3073ebbd22a3b8f4b0003cc3e3d2dd9bce1d17df3c17c812452d9ea412149d7f01db8395c5eb952b0624af1cc145f206b761ffcd312adb4dc3f767202fb0edb414b4f2fa04bcb72136ccdfbcbb91ab7ac39442717049309b3d6d6a2c0c1e9842f22892b1af2884c4848cb46111965c61110ae246e0762c06730b0ef04f9edeb30a9f64e082f76a4b14fbe3fbc87327a2eccc49444fd23964659a314e500ee08a23924d53087bd390424230093652251d7702503c1e6cc61554a168c39c3833d5ff7e9527ae6ef73a07108eaef325c35cb680927783e396cbacac6940192b93a0e3ec2fc4d63cf8163f49346a2d092f64ef9ce4a75a2c06f1c0aa933cfb46da64036acd92029d10e05a19a0f406eae8c4d176b613ffff071df56646223357257b90ac16ff051ea700fc66b5ced6619bd73c1b1fca9f4c700fc04788f3f5b805b3bf8ff6e0dad63c61044523374f0b44f247fa411095892dfe8b6d1af6325e7c4173a8e8ac86ed947783f8fb54df503a6bae6d3a5deb74fb408747aaa52e01b07b739f147c264993b97e44f6c59e1dc466c9a7cdd4a9b560dcb84698e19fc1a3420f078c4b1204e3463e7906edc2a41c5aeed839ccafb4fb98434684482f8374e6a76f9e92adb7b65ec52e02b382edf96dc0c46ec97258c5a3417210a37f9c48dabd2dc1b313f00c65f8c8f6bbaa1dc17f79ef28714e726a1a3c855c8c3d2fa87f3b73ce4b39bcc138bcea9177a98a7c8bf9a753fe4d14e52bb7cd872b6aa6f910e91075632e77485249fce0e56393fc19dd2f6a6541953b3e6a34d1e00c413a99a9e224fee0da6c3a014d36722f15f666395b8267f4192eb20e15d6431a2f245438fa5b548718f4a685c90c2b00bd737ad562c7f2559ed27259559a56be59bba61d5a68a00dc57a0fe93b6d26bba24c796b0dd422e8d528f2287065644e7eecbbbeb40b5ae4049a005943121a7124ae37026a08eafc11881417daae480f538d5bce51aef037c361bfac653c62b6274aa78656261880d6d3c6cc76ab5fc2561d268752b1b162500c7fc1b58ecc824c28ea9943a5aa0f3a324752ea9d11ce8b62a8e3e2b46cb6f7153cbe3356fce1a4860317102d315b0ee69f5798c694ff4a3c08266eb44244fe6b9f956b57bb47364eba976415112254b084ad24f7c15709357c35bb052d3d28ff231b79dee77f41c5cd02fdbbe6f5635b2c92497a57483268ab7c6fd9ff9e46da8a3e2f01569d9d6377ce2437b01a0ad61928432245fb5471407fbe9c72b9ba6744b4a2f205278335f39d3b06897d710d5fc5570fde0c50e3d81ba530648492054eaa9106665576469210b956187655546ef9c96088930c074a619f109fbee26663e39916d04a08c44684f68f23e8d2adeeb810a7a4406c668d5cc02207ba6cf853d792132f025e7e0b962c592b90bad91e2c03ec0a703373f534c6060c7702dc569fb5486f8c93d499aeae5d5b139899319b28b689f4e002ad7a197c70552d6162e09829aec9c23d63e54d1c46162ca542d5acd671c6c43a8d36f27ca6625b65d24774bb598722ee9e9730ebbe446ea9419422c4eae17e4412397f184c922fc1591bcaf0731ac29177b44dd1b8d805dd5061363d35a24693c71af798da75887e23dfbd7e5f66116089b92f2c21665eb26c6a072a3c3923c6fd873692cca612013bbdd9f568d168c441d645e21391f765c4145303b14764801b71b56a993183423b4f2c3ad308521fb9a5e510431e8df5e0990bf25171dc95cf08dcc8ece1c5e268aedf92c76562e847bf994ec6e3952d052d82445d5036cdd2a9c9e8a4ef5c55d79ed759a1aa4d5d8fe6297c8d91d6d85d899c0c8cacdaf19f2ae1ad8b2c40d4cb89903f249e792d25ac54126dedc8b08237eaae067f381442eba1af18b27f125dd8b44682ca8f604cda13d830fffbc203dda5dae0158b8afb94e15cefbef32c1db52a4e07657914995491ac3bff1151ebfc81e162f1f6765f047e31ab866bc060882ed7a07f263e6aba08c86ab09036775e5df9882dbe3b771eb93756b6fc8e0c70a85fee556ea63dfcd7df260834780ae3747f6c358ed097ca2b50f320fa686a46419c296a2e0c68d9d800858e2a822c283b7c55ee7d78ace683666ae6651f5269a27b11c494a040e7db027c7e12179c86355dea436e25ae475c4e3f4d5789e7006ce084668511f1fb74af68e1aab6afb6a8f00d70eccad0ac494b53775bdba1cd2e2a323234f37f82278c21b0893c993ce1248b6ec99979431558155986e0ae828f26f4784a6868d4fd32d1a10ca30f779e2c2d73f9a82de54752696f99b3363788f3bbc9d9e679f293cb03a0369011d1ad101a75a9810f76465225b81ce584712873f81a74faa91415919e4b5299fd51a87c9014e5ec7ecea8dc164522bedccb6d5513e1d518f6ec2017183d8834b22e308b10d29d67fe41f4a0619a759c654d4bf23642fb2de11b33e6d782dac356a49b0c6b057eca70a12884fa851913dbc29b5905c5d27e34c41b42014a3fe9c201240e8e249fb56f80cdd23ceb63b5a1aa69cca15b3a44620731b926a717d1355c84724378832b93c687a9614275a2ed0290de6901317a0164f9d60b934c2b80ad871f315cefd954066b73f0fec33b4ded139788f4a3c7f07cde01aa7a44542c7ded8b12d98bb5714719a186d1431ba07a2ed4da1777f784f193c57e087e12c480739f8f4274b5d6c29a6cf9f5063ea69550b741c3bf71082ca7b7b43a77a82e4b552e3808680835ed8c5e909b4abd9a18d9cdb79bc74c566f49ff6f4d206679ee1d43b8547f5cdc3fa266c4c341bca265857b1929a1ad99b75688926cc8658f5ae6bd0d103605244ba67aff3c8189840281ed3622d14c6bcc418d44942f25ba8b2e744779b28625148e1d1e7ee6c3040277f65194ed41b9a5de05bb0de663a3332863ca96ebc2fa6eaeb776114a2eeee86cc50a242fc0840c87564d92b10a96036fd48497ca0ed2b29b0a19eea2bff6c324c03f5f7dd7405f935c654d5d8c094e5ac757ab9ab850ce2e33ab5cb8ba9bfd59427f3a00ce67e7894ccccaa6621480b763ad29cae2a2423026e548e93077d51767ec716a935b580e5dc1485c5567024346c9fe7942a7b9339925b5b6dec6cd784c41a82cf921cb58c7a8cfa1e33108f20fb5eee47db41e90c14cbdbc0f6f9f01617b8b65f31669a92d047d1a68861096c2c3de95cce055971f7f33c4208c953ff9cc56fce5ac32628f8bc06c660ac3bc129e7e138865c0f17a3165697d8cc0594a3606f65022037fbcd3fef494e63dcdfd4049673d5f056ba02a323439efa343103e70ef7a1e1d6d80ea2544e6b06201efeb631cdaf9616b25be1d868d86293725fd29b9cc8cc7fc1a56d29af3b52ee129a7cd2ec3ccab9fa1c2582a3a4f77ad9c47e782729856fda4ea24ecc51440377222218875201c85acfbca75bd259af9ccebacf3ed51014758d29f8a306a098304ac528a43a90544ff396bfc8f4d3c3b8d52487887631900c269dd86496974f33c84d2cbbe23ee358b906232035933108303ed9ee5b8a48a5b76d0450f4631d6fcda3ee994cb5f757cb809381018954ad118b4bd8d44f647c9d29d453981f7bcb6d6d06d08adc163e82ebe9a75c239d5cb29463bbfa3a3b1491049e03bb0f97c6066e025678af232bdd3f46c7814e6b22be1e62380351d63f395f5dac4b789513c075e0bb6bda20a855505c323807e03b849ec5ab48e9690244d3cf7bf79915eb3dfd65c97fb1d623fb9bfc3e59a14d30c435cce00fcdce8517f6896f3fc66d68aedad7b3c0e81173eb8c5f4505d51c6dda72700dd4962e1c71502396f8384159ac4838d857f77ddd5254ae5c40034272bea5c11cf2261b50c99c5467a71f024d86591d47fe08b0a9a2ebdf413c4610b6bb652c8eff5331c004943dd2212656bb2127ef1306f28b1bfd92ca17f69cb1f39b124632d0cc708556674bd2127af2633f8e377c2e9364d4de0a2e9cbbc21d52c2101b22513bbcda5f04c3cdd17497be586c65c27108b0caa7400b370dfa13b87ca9733491967000914c7b21e2767dd2e57691065e4717ad9bcb80e1dc13e78fd03cc2b82e17fa50f9816b32b1c03afa737633d95348a27671de4686369303d12a44998f168986d4a51935c7342e2f06d4741dce067f4a6942fc6511bc4c927453214344beb4f24e4282fb231b40a45600a32f67ec9478c3223d9b45041f998302838d91f87c8463029a140be38ecd024548b41ccc4eef0914a7349a11943518fc71d85ee4293f8497114aaeda982922eca5a4fc904f40c74f5f68951a06537373774cb907e0618f6fa21ad7aca2b7a5b5ca77fc37da56e68a9b9a5e04ea66739c4361031705c9f79f5048c836b803412c50a5cff696ef324b41dcd9cfa1e1079a09edadbe1f2b5fa3b22d6f74943473c250686c1a6f4ca970b9401614494443b4112fa6a88256d42e53ad1addd3bfb70b808fc062eeaaac22fd3f07d68dafd329e6c9ab876226a10ffa78f1e8a89ad546b84162ea172faff5e0607d4addfd943cb38a00b695761a8c9534916f10430d158555eccccc05fcb02289f32f36040e7dd13699d95520bdb9d356661b3db0c363deab0bac017441f3ab010215bda966b3cd0db158b75df585de6fa6b0d1d62953262b60923d66744ab6dda12210434fde85c4a16df99e5d22064d1b16140874e67474cd22256a17ea4743b7007965b86893d2060213f5dd231f77eaf7f97143bd335baa05b14d04a354f17d334411c823a4a461ab9dd979d6630b8ef4ce32eacb88e585c51dbd2d3e623022b0755103c0a27042ce24a18b64c847664bc15fab1467262d7f82da92a63fd60f52e3e978dd58ce4072a5dd2da636edeb67aa6648728e0e40fb6306783cde4377b37d354ed4cd692315ea159ffe7c9d1ebf803c64469e6d2da100463e094571eda2e33813572f7fe8404891e6c0dace225e4d7fce36549a71237fc1b0361a992be2603006eb721c7b2a74fb32c5138ca83c9a29f6005b8477dd3c5e35139a3afd2384d01b1201c2d0cf6bd07ee4849c84c6c4050f947798758f115ea5ccf62b10274cdb5f01e55e2fd004e79f36aac8f102a612c744529b9171b0b4c330c3b1d07c3198112d178086375961be363d82ae3d41ac9c5b6c3574bab1b7154fe18c39cd0d3a4c31c468eae45f24a13652f8bc66192d9cc078dab9e017acd8e6743344c936a2bf172da47ff99c63ec4779455d6a7f551be6d84d4d7287df3f365ce2d7171e354e1f4facce89b272f693951394003be555eb83a8badfdf7684ee0b7f647bba157a89116b42292c391959460d32c858de06a94de3dfe180d6d7716dc7db3456fa889682333c758cb364c4888dca54e4705ad8128c43254bb7457af7c4117a6b69de626a83b0d735435485f018cbf8ec547ca9792aa86e6f6c9261587a419dccf908a1f3de6a664b338308c580cc1cce58a3fcdb068dc4bcd822a8fb294240f30a3e17b176b3aaa5309094545194a30bdbacabcd7f34e1ebb27fd54a58e8c561c9dd0f54d25823c81516321eb4b2c4dc2a3e72fdab4ed49f6d170a7eb805be699fc40f8dd638ee254bfa358ae105ffb0f5a344a67fedcbe4b3d7e8273547c99f4ca255b0f75bbc6749137e97e250e94938fe812d21541d7923bc99e9931111269b43a61b531a0157beeb6b5a610e7427d4d2010e35a0f0886f12d8897042f68bde487d3f82f006086e569b033ce7c7c0869b07f44cf34da36686e393c16f02ca58ebb814dc5369702584af2e47641fcd20ac2cfa81c1da3c44df0e2462f68d9b3d88cfadad330e75dc2a5e67a3b200d4bf9cb6d40b125368106a9b273c12302c9a2eea39abb8da85603eb9614d933b814882341b21263ce2c14712256a9c88a2136d48d42a886c6f95ad4ce2b769e8e296f0ba9a8dc69e5cf9b158bb04eae415ba4379f53d960886eaf4fbca618c327fd740e02d9078c20f1667f88912aecf5dc26718fa4276802f128b8c0a812bb22368be9463d1702b689fe46fa33582104c32ce792a1d7c7027c72e89adc68f6e79613588c5b21de3ec3890652e76bd1195339d17fd2c7f55931ca6d6f4cf36a6da12732766413f343b825b7eaebbe7e944e166752c5642cd731e5c765622954df9086139440efbc14a1c1a4ca5b6a8074949eaeb9921c14d8a3e66a424fbd8ae7d5641567970097e941bc6fb52c854fd3043ab3f137bce27694d34e3725c8f2f3d28656b62e68aae35f838e4262f48bdaccc5602a9f408742722e8962d1a60c432cccbeaaf9b28d422e93f159331ce47b4d3a48ccce3f50e7003ef9404a999e52c0b8837c0246d01744b85b47eb4bacf532a2eb68f6e333d4146d3e2135519c354e44a115b941eaa57322f5495e626b3494e53bd7bca43de753f4959fa7caa20716536c44eb4c1dbdb76517df03d457f347a5bd0b2d3dd1f1338a254da1477dda7dab4a67689ad181e4fdb51d843ca2a42880d4aa3eeaf48f90ce6d8e8182915f035a26908bb561508aece85f182d1abd584bb13c858af8c1c32fa14dd0d4fee7a5a8703ddfd7a672b95651aa70134d623338fccdbd3f51a5eb6f764991128191c90746524f7eeb56f1d695453026e20e2c60b2c8bf7f0b11bd8b42309d131267ecc7a975f55d9ec430dc721510a38cbb2a00b94a3af705c097f26e7c4304c70dbdbb8b9087b6259427ae47b1fb205c4e3e4932e9bdb9a3dbad2617646a82ba8af39a3a184206d1cd88833eb9ef4ee34a68f2edaf6782511e017638c32187faf93492e7b6e01b3063e70c3e1f50de7c8bba0f6a15ce904431b080968f69e10c5e9315738ae030a7e974303b99787d1863fea97c732373ca51b4b1c36fc5503403a5f5e5542a2342e097fe7fd8fced48b2b8402798ee2b48001ccbda8bcebaad5585669aed4b498e6a6490da28bddaaded2b588294c30e5d27874d6959c1f6813f2abbed091ac1812a9c78e40eb5178692155b5c08a149133c4d03ea48fe74592054ba4a070d9fea5354d55a7d86fa9d6e743ec04eecca6b062288e01bdd6810363e1d75ada643f41258c7eb45bfe3cb01c0404c003010683a4a34b68b4bf5d1ee61258feab8b578df351da9497513b17b6fb2e5de52a624536b0716071b0749add3dddd110acfa46e0fe7184e6932f56cead837da4b688c68bb8202c11584134dcb05e5e582e27a7224b53961547a0e67da43bae585601fee0c08a2093c84d06f14bfae2753bea9d4302625c526bc3f06c5b0c0203f41e2392a81b16d8ef48db121e4e0a85a9575a9e1aa480927994828520a6da9d4353869dfe6c067c33a5c2bf5b831320b1ef6effe662f44be83a12ae73d0c4b4adf6521f15b763f7271ec8e6efa42e437281d5c1c3c74b6670251a7bd974975836f300477ec4e3bcd96caf4eddc764776a279b40959cf7c81e8a3a209d13f6d77a2f4dda5339b3ba767eceb65fe9bed66ce9bb1532f4883363822d435b239c71851bf35c71ae5ddc92437b1df320edb28976d1a47fb3714a76d1b87e2b8ad53a17d511acd36e24081bbb34e5b67ae87285f94371de5024acbbc497ba4dcd6d14137333333373703b1ad6743536d6a646c8c7bce293d7f8dc6f88573ce89c9754cdafcb099dc2d846577638c2da758a5c531250d176ce6fcf53c30e9eab0dbece27840c639b1c9c36a972636a5e61a1960b08c0193c4874e050c13e90273e4a5fc40a2d6d1362d5f5e28d717a7a226077fbe34e580365c505e5ebe500c0b15642193831aa8503a9ad23118c0045ab69812250b235e3674cb0693368694524aed88173b78a9491db8ca0d5fe4804d97920c99745111f3f4d745e50b174694846e20a34910cabc645006004a5a4a29a9bc94524a69e5d3240e3d4cf1e249b3416af306894d8d0a10369a5f972b063f7f5d2e25ad0bab088c295e8cd1c310af222440c96a5555ee39a08d9803dad8c088a9a16abfae265e966affba9a68f1a1c750e7afab49175410ae26574c9903da20a189d24bb751491a9ad480f31cd5d1734a3ef415b6c4084f95254934f460c316621081daa870401e569c9452caf052d6b061c50f4c689aa66935316c112386a120235f14b1650745ba68eac264acc061c98a18603307b461238a2c2a1a5168f995e728f124fcbaa230fad0579226a5bcdc5005cc114ab872184201948c39aa81115b8c94896285100650c69532420082176348312508043022a524619d681882a18099a4605b2f4518020c92e081d11141f0e2a9c8c88ad017a22fa880c1cd8e2b4e961842073165e80084295e34b1610865305164a90b4bfe00a7071b18c5e084183192680289c53e78f6aa62e7294c32d87278c2889452da38e1c18992976ec37f5d4d86f0a85f57133278a09152cf8641579827ee4bad62b8a81b0e5c61a8708549728599011357981d362aae30457eb0e150bb2e3620d411ac4025551abfae2d9eb052bb5fd71646bc742501866b8b27dfbfae2d9c7c589d896d73c2ac6aa9fdaba5ceaaa5c6aaa572d5522507eec71cda258d25e2fb53233bfc8c30a8cef30b7dba1e36ba1fd04bf51f7a423bee82c4a6c141edfe429f6730fb328120026f7cc8cd6bf74c47513aa5a3b676944b6fba07846699461980494fc1943cb2d9d90119470f77a763b3654b1878cc8a8cbaae208e3e540551f42155e1809aefa3bc62d41332e2c3d23ee9439485fa683e73cd1bf2615147794246288bfa900f4bf36dc8bb6ca79e0ca2fa19c4900a07b491bd09528f791624fbf9b95079f0fb39b9994e64955829684f8194ae812e53867d7abcd9cf87f4f9616059f2eb06635b1e6e1ed92c7f85c4e71e5ba6cc6f7c666620ee1181df8f088e9a6ff7605e7be6f1c0bcb5cec1ed39d13eb9e190c77c9dba00c48f7d2ff4afd7bce491cd3262182624be740cc3b0e901f13b91fdf94c525f755d4c9edec5e4e8d9f75fbb02b7582e26452e26442ea3a79bccfb26fb5460f537e4c3ab06a5b31afb1d52b1da31efdfa1aa42f6fbbdd09a017e3f272968cfc1b2cb94e1cdc11a8800abbf6d9d65703b8b2b4ae69b966d5176fb349a124c1d0d0518b7ad20b52fee0973051be0becd37b00e0022d420fb447dc57c102b88c5d23f21cdabd0e6db3a28000ca106d9a707eac77c837eaa10b4a124d6f560c063edb38bf202633dbb5b7633f47b81833a93738a9b385d2e31b7c7a5255298b999dbb7ae80d89a48f4028985f9742391158503994fff6e12f0621149c08b456996aa776b1ffee05c4b983cf8eb02828c0b08307e5d5c20d9f975fd8083af8b23fe2aa9880829784862cb1856fb0fee235724755d3f5cf1d297a328d9b67ba260eefb2bc813a45c21b65aad16fde2ea48898267fa1d454e29bd28b39b52ca0d0c4509e2f32e801fc4a29a07896584a81b8912c4e7815a015e18a403634d6f5f7a21c330bb1e353f2dd0df8e75d78e512fca0b9c75379d33d9f702ffc4b04f622d7fd8a86f95a49f4c397313e2174aa6df2ed85980889c3c5830bd99aa1c7d7bd077a723e8dbfb0bf99b66bed18c7a8645efae02f38b3650d99679640cd265c8b43e4897291377674ef656ebb32f2e3857f002f390add6c74f08e640f48500d59f1ed784c91ebfbd5dca17300ecb3cfb82f407619197baa42b495c92b4480a53830fda0e8c6ca81edbb58485942fa80ccbb439bb286a9da54d029151abd5720125fab592840c11c526866118a6b95a4a1ec360b0648474583246107ef032e6b130ec544488c716104674f9f003158a4d8c5e216a9da523f40f0d4fdec41619142d2886a02082a2687a966559e6c36755556d6ac5b0225602927972949c9ee5d10d9670f9d0b30c9bd273401b4252a86855559b5a2546b76aa3fdba948e7c587d32d1aa3ce84147460d6dba57d7eac6e8c690cd5f74b126482675fa9c52dbb32a757ee13649e92c6677a4cbf6a49192ca2eb32cc3329ad18c6659967db2481acd5c514359248bba47b2e40d27e5d14b8c683ed96088b2fe45faa2e2c451c54c5b54887e3ddca5c89dc3addba876b9653f81e5e71756f0b7f2c78a1dbbd90929d81727a0d0ac8b7339d1456c8ebd2f06236fef6eef723bf3e4c99399f9db8edbbbeb13a6ae2351d7afa87c54d7bb1eea0d8d0ea66e4e0c8113ad8f31726143816dd9294cebd9b50328cf1f10ff09540fa4fae842949416474c61a9ebdbeca2464f5da9de6da0bf1b7679b302911bd6fc6ef8f3c10a6205b1b28f2936f1935214d31a22523a424a526252b50e7f345c28b5640f58f7c365ec0e7bd864ac095cc473f7d2a825a6546575d8b9a908cc0766d43afc335e6a288ddc08fc10337237525569443f7ebd3e266a7b8811f19cc14165f6e8430d31277e550619fb22199b81165f31f29ccc2846318ab9f9a35a9dc1a2fa1711e3671775fb38df3c88d579102bfaaa5bed4ef4f88a4fdc8ad1e8082949e9233b7d64311f5ffc34f4b12895a5ce5c5143fa9b97a2a26edf0df71131a18b95166bf32056108b3df6e6754054160aa926ab150a1f35d4a6793ab647f95639c286df4ec7f637d3d997698a57398391e7874393e555c489ef2ffacc0d2af37480f4e992729579b45903893ae75785500f0243eb51ae494f08507dd9fdccd9edc83c1396c11a4b35945f51ccf560db9c1b3e37506072f4b17932cfc993b9e5469b366ddacdcd5e7f91c90785cc9829495390a2d1bcb29286070d5c7e997890f2f30b57ef62a20926a4f4512da3ae6b09321f765112a22e629e752d91e4a3b792d8470d6506358c46dd03763e542140f59b8718ac09d143b009264d289932254ac1d8c3302ccb7444dad15a77c13082dde9e074b4f41c3cdb658d2eb5bfe9399abd7dcc67f743bf9b1ed3d9d9e7c731e8dde998cef3c3e12fa757333ac068780c91e97aa899cf80a972d63067c7d7f3367d8381e8dbd90be3ab8b76277aa7a486d1a8a8a57934ba40b3b46f570cf6f723be4a18e26d343c8e2861d0d5c4ebc368f4b18b22528cae269844291fbd8b28f6eacca9cf30e89ffeb0671ee605f13228fb03c2e086ab8fad84c155f7c41f5627ba104b7c5c4526a336ea19a71a067dec78a8db4836483057220953a2a8462a2941c50c91126350aee2c4cf9ad8dbbb5b81bfd609877cd77c0c22808f2b10f31d0e41fa1f59d326e697b65a343c507bfced7aa8bebf2f768c9bbd88588adb2a94f04102c060c660ce8f8f22a93265ca1481654394d44d1caa33283787411aa2229ca26fd7433e7dba5833ed0ee6ce60671485cc4e0d683e3f164cd7be1c7c036c1de972be740921f4d2e3d06cadeb28cc4b9f709d7ebf0871530e124988264f33cc73304f9803fa609ef0060acc13810f77e9a5d03fe0439c0f7d5e625efbf4d83d07bc8123dda8064bf4ee67e348ab2cf7761329c9cc719275e456a95c655c62b72ccbb2e99d61986318867d2186c5cc0b390c5b220aca5833229e7cb76f29246a749b248a7c1be0db51dd4f53e6498199190521869620a1450ea434c1457806330d4b9e9999190928df2e291257bedd86072d2e295ed4f876dafd34187568015143123dd021072dc39125d911413cbb9623c6f83c3bb6557434e820ca98c508323a443cbbac5cf70c56bea5777777b7cb08a26767d4d014323830b2238e304d31e254e50609e46094650709103db990b840228116bc6c543892064c5413a38db8a8210c09450d4d6c488cc678150d946c5438ae20c478f9eb4a020ca7a6a1295953cea6458dddfb448479427008838b433abbcef6ece0063c7b7966a32a7f7fa46077d877748f0aa20e3be7e0a586e78e32f01852326477587e405a6090999999a5f8528deafcf93173a5621e356fe721e612b2136b3197a616bc2cec8b5f0b3df400db433f46f229f9f610c767ede102bebd1ad57e21f2431efafe6961775a4c0c26d30ea9c4201383d3677373734f2f1229112d2561b0bd88884125a5b8d4c2163b4ac4adb43b2d250989c154911a4622249ec66ca881176098660ba78cd41d2d84477dcce5e723f3b8c4dd4ee3458d4c0cb6cb2f2a31d81ef250546ad7b6272ea5ffe57700b2b71e984708ca39a76ec45951fa4b87f9a4efbce6bcb82644df3c57f52d3a207e2fd0afdc03287ee63f3a4dd3344d437d1a55c50ee2ee1c6c9b6382b9ed4ebbb626344bf909910e445fdb9dfe613781f702bf34417c1eb2d5d2166c6f9f3dfa650cd22f3fba3b7dc363bef4f93fbf190b5711423af6a56f0e33f8c3607bbbb4c1b6399a5cb994524620361ad4c80282b5ecee55eafe646b4ed6267da338d29756a9a1bf6b58d4964d3de594435aa77d2275ad1ac62f4dbb63440d572947d434a21ac6a6a421dd13370e3d1119a20de15239259a6153d20c9b72ca293328358c4d2fc43d7129065d180113850f2d3247599a06d5abd56ad160448c6eae6a38786e6a3d3b3539dd7c53195a54a1e5390bd79627af7ad6b2e4d987468d235962b65268f1edd85661636487387db230f976496f08e207658cc4f8608cab8d2c938f0f668ebfda37b05cf976aeb3ecf0ddbe452a9aa5c148ea091554ba5cd1210057a4d800cb0ddb2bd5d0c8b104adfd5595332d5176d560c9f36b8a17fc17cfee39ccb3cf5314e19977c6a015a50492ac889206450ed811e58264fec4c0947de941166152104106fd33c3d364dac14818362a19907e6448629dfd9056a61e92fc083119f1829f22435e9c6c543834609aa9e1862447434009338413ae21aef8d07f552486dff670b56a5ef1184a9243ed7ab41766ca20f3159cb10f611e21eed92cbeb0af40f4fc92a2685d521409e0c3659191595720ba00665c01c960e661fcec8b99f496b2c3989c988872d0b1c3a44fcf85b91d8fe8f443e1e7e4326cb2185e7289ed62125b892373a48d94986c0ecb322c6e1832d32486a293fac47c17fb309b4afb892dd5458d55c69591e59c2d838d8dcde2e0b7e13caaa2474f79a90b4edfe9b139599b2e387f027d63b18b907229875df2527b7ab7d7d4baa02eb8db1cb5a0bdbb91599873c608343f7adcdde5311bbba02e09a9dd9aaaadd3d505b55d82deac9648e49c3e59a0fe32cbbe70cea640b3bb2511765725bb720c52398bb86ec3d2f9b679646ddd9639d76d996318e5b62c433986722b4f508a4279e8b35a9f2aaf658e510cc3be0582c61912b193ce3f925be89ecdd781740fe7280f7d2adb705f88f35d7316874639c039ea83e146039185f2c8427d431c8bf321c91242b911ca8aab00ea9b1759dcad2059dc67a4488a85726651cc23eadb5500e5aff29a5b79e231aff29917997dbac7c767b502417795aab7cad3202a8fade4b81d67a59c0db11181210abb9434547d644a575d597e41c60d5a2c9641518bd545557da4dfc473290aa21ffae840b1b5a552f0a464e6f639e7ccbc54179a9939f3ad665f08e43117da65e6409e7b4a6f7a0331183f20f9d837040852bde9c1ee57aaf75b4568ccb7db50c30502c43c4388ac28ad2a953b08ae56ab21622aed1ea0d7ab22098178d917cd13e62fac7163e2a6ed18d536c9c9c53cce40a5437612f96e23b6df95524a29a56c669eec5106e59c524a3228215c495b2af6eb721df161e5a6700d31e5ba9e44179118b1a394c2c767716464ec4ef45893626f652f1b1df8e4e81ddbb462f6b54fb115877ca2513c8a483149a9c949aa16a1d2b8cfc7cee3e298711acfc1130a1a9fb129f9ac4f3bdbd0f090fefa0ca7e1d978ebb3ab5f5f9d755943e3eba57c464dcd07843d8d73a783c669bc983d3118535ef6f20c1083ba23049aef64c859ecebd1516008f0ba1b206e06b8598f344dece1b04e9c410d9969780c85f1ecc53cdd27c730189d260772bada31f96d5bcbe9a9e9c52446e94b4b6988a9c849c999767d3c2f744a6bdd2dae8705e9a74104d0a930bf50f3cdb7efc6515e90761d8d01614f3f27fb65af6c0cebc4f8345464af3fb2c4a7fbcd9ae24421c9476f01887b56cb97149044a1f80589c96f4d607c949dbd9827b4c9c6304fcff0f1667d7c80cc0cfd3a4b43e2b09aa2ede50f5555716ca4af16872dfa6fbbdb1b9d73301106dbc7af7e3273d0ef8f1511065bc7b639987dfafc825ef3ad8428342ba1881ac697538faf9e73cbba9f49998b502a3be5ba1f27db763f32eb32b0accd87a8dddcbe183bf6e8c525069b881aee13a651afc72742b19113917c0b7d5715e8abf985a0fc92be9d7d861009a232a97b139dbe0d83219591dbc1b639dbeefad649a9eb5a22b302f3b80fda9479e63e59e6e00acb321b996fbb9b7959c6be3b99774fb2ce5204121be1f889eed43ad3297f4fddddddfd45290caa544f4fdd138d589de973faf41a1045a4dd99461051a7d3117b189fe2537c7a8a43d1697a08fed1d4be2cf384448a7df16977a66b55d41947d490b21185b24d1b0cce39e7d640677526b83bd3a5b3f00304b135c6c70a4d54e560f77ca00b70b2b03bd3e3ffb26943355280f32637e79c4d89a8ddbe69393da7e654db77b80fe6f1b183418c8bda4e0106311fcc83b90f0631e76ed5a0df1ded8379760705ba1fce786c7cc59cc8ed689d88247671f322120631df4131251f9fd52a0441fa85eed917aa5418e639dcb32ccc55388eb94ff72ccbc663a1ca732d91798e796a6cd284b06d0e73390c4e27282f01cbc0b25011f5c59ce9bd4abf01e6992b28fd7420334c8e1418dcd9dbd3e70453bbf8e9d9e76377a63fa9ec2d198653aa42fac1a044428a48dd2382a49731306d33a04491483212750f0bab135d0c7d3d11818079a44b6741aba27ec15cdbe648a9f3ab23b51d7c62cfb2e4929897ee433aed171a7443b8969c5eba7743d430475b9aad91d33d393ad3e12f3fda1da5bcc160af186cffa14adf2f9f02f36c1460a07c3b0bddb3ace5f2ed2558a9eca14b2868ddf2dd735c21beada842a68b152bba40f104fc4ec08bceb0526ad2497bc71d32cfdc4c0244709a5966962c3166995966962c185df29931a3c6866d80e08dd5aaa6c686461c1ac18810b0905824162cdd58241689058b9c554a508212d01063cea6d9d441c042629158b07463915824162c5129525444c2e21131861149caee34143a183644a31fc684c4269629b1c0229689833a513e3366d4d8b00d10bcb15ad5d4d8d088382a159649022c134b1c01896d73426e6751c76db1a8757e9c44a2a3d6895c1546f3884c8d9e8323d23cda388dc89027a1562b22e9e210d77940ddccb62c73cbd2b5b062287dea54a81f91acac0eea05ade3417bf4d32feecee414971634d9b03db368ce17bc36a40d6947f4b538a6b3d4868aa6124a863eadd0542bcd8c59c43c9a43cc8d48514a44a200d28e19dc760f4645eb797474d469515155f8cc985163c33640f0c66a5553634323e2a85439ee364c44a5a144445a1d7624b6873e4df9795459a85cc4be8964c84a0db5a1210d09f74c28f36804f3a8765bd7714d349ed8babb6777cb962d656f9518bd65efea88d213ee5df10e713b1e59486597d270a0bcb954126473727163772867d9a1bcfba2721dcaeb8692d29f5948f7a339ed50de955119cb32546f43ceeabc2609f7749db775eced9930e8b34d725cc665bbbb7277e52ee79917fee0382f3eaaa6552354a3715e4d8b41a21a21d661a29a560d370ae5e940755f541fd46bca8bbfa166bcc63011b56bd570339add663463cc8c578d109fc09ea21fd6b46a5a3544ad67af51c23c9913d524611eced96b8a6ad634e335e3a579f2eb8c373db3e66d5f3d27a9548d66437fa3c1655f3d94173d8975950446692a2e7ef59c6c9eaa297af699ae26099fc0de753ff2ab212253c3cda8868809f3600ea5763a502fbb326ab819a980f3f2db8cc294d177b619a9105f3ac79bc669f1f726dbc5a66c8d6e1c2bce4ce61ef72500e0a9665a5e48e6389f7dbb3bedd1eb293faa65349898d154a6629a369f1aa58452437c42d7aaa9969612c2b0d41083a9d68c31668c81a130f619632c0ea3eec95c1a15b50ecf9b18b26c358dd28cc3bc88426998f4f5288739d9bc3d9a31e1138ef80476b26d5d336190a56c97de8fac293bca8c184cb5362223e6214ac23c982b49b516c74e89d9a8bad9df9e93cda927b332354cb5b8eec7c996d10d531cd7fda076b50e5bcc0f39443b0cb4976ab553c68475f8cb8c1864c751aa1b11a33477c23ceca3978551b1ae5517f5481ff6abbff07c7d7bfb1b51aab565a9d6971926a2fe885a1bd146d47198a7cd7098477f7a290ef3b29f9e879a584635d4363343002ed84af0cdc9e15c73f6341cd77ed850d636e7405f52fda67afb082e696a4c4d39a1720b24aff3ebd2c197df683890eea9b13aebebaa75badba97c34a5998a92a0a224acd7f0548dd5320dc3b039b12cfb280935bc1b2b06a5d3f0c21f287cf42dc16b23eacd322869eb484ff98cd32c49faa93cf3526050aadca609db2ca99541cc298318095e3dfe08de0d093e82d3f06df332d73c1ace79e12ab9c0cedecca2da2c3d331106a503910be4867a83411630df5cfa063ac03c9c97f972d69d6fdd77a3a3db3ce8352f94210b5a0ddf4ec78f0f39e8d9fbf1280f687e8d6f01395ee591e009f9a9de6304a73163e3d578a12a8b495e3aaddea6d8673c05de56ddb302eb4897f206f72c8be68baaa15e50c37d819f4f51c37dc524ae7d7128741d34fd72f9758121f3dbb66dd7835d73ce738181743f9b77ae79dce61df785ec2fc4e77cdd79d3985dd334cd993d2006e510c99cec7e2a0f15257d0811f6d88b490cb26b5e07c93ec33222e60983f8260342bf9fcca503310fe612937304a611c605060ca63a9d37e9ddddddbe5e9095eb3b1aacbd5d60d6581b60ae7d21a5fc852a30663456ea0df529a5d43cc99ced609ed960f7f0581df62a9ec180ddb32cb963771864f2f2f20b7d9e5bdd548b5086b2c1d6017576a70fb0009a2d4d50dcd0758ef36ef3056d70f754665ad2714b688c48d668183a5854ffbef285ab88491ec418b360669ad16c4ac6264b2925c693b9fb6129254bc9bccb2d999953cccbbc748b8dbd1bfbd9ffecb5528dce547a573567942ca594734ed93342d41871a87be577c6914f57831abd2586459459763d90858afc214a6e777168a836a4be9cc58734c2c8c4c4e013d54822416bad5425552a5ff9aca28f8c947b683333ab987906183c33333373f9f6eece810fdf517cbbab6cd0ec0c5c84581c3868f2ed5200b4c6911a02804502b468fa7600302961063016074eeca2051009f8ce828a6fbfe97eba7a42634ab041162d40e10634f8f61a95060d64bcf876a9ea7e9a32df8067985986309e9999892495470009dd4f6344d840079d6766661fa1fbe14e480b0dd0498c6fb7e97e5a55e48a9a053821e100a718be7d46f7d3aa2d90fca0ca1128925899c286eab4a4a68eba14b185a6fb61ec490d2916313c008b27545d7678769cea0898e28a1fb608f13a92a5069aa1279b9ae20a259e7d2648480a27a7262172e892c391118ae0b05ced6c704510339ebddaa8703c07b4b1bac1e5cab3733e1c704268074c18d1011153865243aedd14b0a58c2cacc86205971f10f0bcc5cab3a3ba1f5e059e3ea8c48d36653d0a11d10000008002c314000020100c08842291402c20cd4171fb0114800b779242765a381287d31c876118c518640c2180184000200688313544c441005698e0c6b33aa5cb3dc42b0d2e9319bf9412f582b028ae05add4b65f46f1dcd741ba7500912cfee1b48f2d60f5e83360c5e7cb9e68c169390e586549073e5f21dc83043ad8bd2ee6a5176725a5153c8d378dba9231fe284fe409715195308128a6cf96924b2be48fa9470c7a87915e34ea3ee4753d3eb0aed907bfa131d6537ad18b78d5a02b59e347c9048f105a9438fb9b528a09ef15642e82d1485620027a574a03063aaa87e6688d6a34e5a2602fc4b30c080f1ab0bf205e218a123203942223b1930a3aa1d8c44802264dce1e9e0d8a3d3b5c4297509f2ec43e1e2cb8732d0e324a898a877db6cd819fa4515a22ed37b3dafffc972937452bae41ae0a9d72c62ad0310ade9a29153dbf8a54faca692c2d8f5902b2d70a8de91ad2b29c5b43a977031b71dfd2b522f6a3343c4bc0d5e26b5825df4bbe68515a6715b4d581f307d1982e0af42718e02c5908d58ad6a10664499a293cf3ee3f56b1b2f4cc52381560c5922e9cfe07a60a54287e3deb07829e6d9d714fe723e9a297631cd787892b334e94e40696c1139597406a50b80b9cd47bc83a958480d073c51c862a2c4a45c97cd9e2706f4fc6d380f73a169b362523724eecc48a38a111f8588c4b4abe605cf6c24fd94eb3c130029fc50011b6734bf853935979254c8e4bfbf4fb345287e9b8a0711fcd7e8d7eb1219d81f00b0c1eaad288f409c56731489d680745329ead0553efb7cc72b52eaf06f65d4473b821c5ca9bf4afa23a839fb2320e35a91e2f354273dc833795954476a8cc24e5cc9c3541df169b6c9429cd93d5d6bf85ebe7f07ee4b3f5721d79c2b1b28a614073e5de1fce7316922f36e89b51dfda17880617a953d36351fc4211eef837fe54c560b33d0b78670e57e143bfe8b13dec949b1b53e9311610289059babf6536294d5d0d4c65af6694074561129612575e8fd8356479051859c963e785c1293e020b16c6f0b6a23455c0b9d08f886b123c230803d5cb1d51d7e926c0954dd47b81ad86ef383b5a2a86a0d326f03031870f10778fc20d0d880c9a5fd17ff4b1309388bc8b8c29f164b07865cf847f613b940d4c227752514648c4052bca7af36d5c9a3735d3aa1d8a664aed3f2da4e959c056855f0315fd5eeca1b5693d5bd02ae1d74237a35d5a0497e28f0eaebfca4eeab72d41fd1378fc9a683c0f243be1de9d7fc17f0e9793e64cd86322288149a552b98d34ed2b2441b9af7a9199cd39042e3b98932d37aaf004f7a3b4c7f57421dcb32ae6596ac84a6f83bce91768ac6ff98ed351a0616d9aed2d2027c1b37eeaee1a186a34ed04802b117bc8beeb6cf5d00306b344174299c3bac90cff12e5b7ea80616ac9412d91050e2a1626c8ca50fd254cf6344f03b072750d7350e5cc46a474739263243d17c7e64a556debbc9875ab8e79f265a4109f21711c2c23561175aa5dbe55204b60c22cc722d720308b9ddcf67162b1bbecda5e64ea354176dbd18a25358f76fde2c3af50957b4122014534d1a23a4b4df20b7e36155eaf337df7d99c5dd0900343a9e5631c668f26b2566fe67c4d630e646b3e3389158c768835c08f733d034c9d7c30d4c04a6d088f1820f2f5930f2853e3f8710f7ab23bb7da8713b60a7936454c8985a766dc4b67ac4c064a0c3307bee7528d31c2ad37117ef470b54ac4e4a4a29239d5b47a2e52132ca2d65755d4917700f6d038b6e9cdacc136ed7283bb15762c21944a2d0e6fd8d62582457d152eed950c51e319032fdbfc708a13d54f340ac87a0504e7575864390ea752cf5d9e0eef0cda79473ae70cc9199e9aa0ff1be854003f0efd3aeeab92baddd6d84b4cb7ebfb63e9a5d5a057456d3ea11900b3d6126420bcc1b1b233c49714584d7fc42a6835a3a17872cac20e0966972722d5bb57e0f5b6f7555cf28f5ba79b718819d9e075b3532b23796da420416e6925a49b9eb11868069439afa97fdb679943e071d8e3662a922b4292738181db779aeb4702276ef77f9387a3cf7843ca3595f472cb14703132c904a85d24c83e8daf41438685881f87c60661c54623e69b54c89f336e00205b93431a15337a2110d09e8d25f485d8040139837d1b975a87b76ecb64f291ebec039ba3d01da00cd3b06fd55fcdbaf8def5c41b7a5f31335b682a25cbb647d92022a6973a73d01fc5fe11a1faaaf6dbfc35c390561823225f4a884fd732782732ab29e45afdad647ab3b9479fca70cf21fe326a2e1222c9232558c2f60991f460a04d9906d369b2199698f09fc701c9d4744b379304192faa60d7c52c68b5e131f73a3ffee16ec7d18d1ec94fccd76ebf72abee30a64b5744a0d55b320f0bbfd4f3667f7fd85636e236f5bf9f4d02521399b41b6a2a54b9c670cca72410147e8fe90a8a9d7e89e7b43c4ded644a6e2e03415a54040d8283be5252a45127b0ef4fb7a95a4d2d38d1b03982711e4b510b97e22c238a68bbfd25d0a85153fad251bb7ba76b4b0c7b3377535066d5ebc612853c618367f3b28c1bfe26f334fd30d96feacd75a8266ca9fc1444269ee9565f10696eb9119c1fa4190cd72c3299f052189c9dff2f7735720c48992a173dff4cc3d77fa9fa2f20732f711b31d37108c3c4ce4434a9dac8c95dd4c26aa5ee905457f64882b300846be113412ee46b85205eddc8ba08976caabf703d3ce8290495c7541474772c2da76014756640c45face25631d16f1311334dac102a9c9561a799be91f80e244bec9bada064efa309a2ff208beb956bf2ec423a433acff14aa74efa22293ce3dad979504d031e5fe2a9ea84be1caeba4467cc67ff8641afa963fd097de19cf64d5480fe462ae9443334e42a4d08f73252833bbfb9da8afa2f2a6b86868e6d3c2dc65e0834b0d5b9a0d52450b6bedf28b0329ef9f1c36d085afdb03a33a3fb424a3630bda050fbaa942e7fc8601a3d1f24f85ebc000120db80887aa6cca2a3f5ddbee2aaec431f48ad26afb29351273f068dec1a80e153b8c80301dc2cd9a1f5ab92491ac6aebc7a459e68b8f91250be6e42df3a978830c0ed90871425f79a879ccea0b501634229cb21a985ae00f656db127d41fa291cac9423ef86d1da25004f4d632eb8c688b7398b492dca06cf0e65692c79636bd41b593dcafd80a52f20aad6ae69dae1c32db6f3c6f215d6d418e3d82c10c6f7176a47004078fbf8382d6691c8188eedaf7560eb2a97223477d02afe33e9da6969fce571ecebaf860256684368f4f236759bd91f755cafa1bfce1e633327a8533b624854cd55af1dcbe953ece624fba5de3168e6f0f10e36e13b380d3c77cca6e589c8a2f51ca0e6ea70148984fb637a4b1b7d66f065d7f139b5736ef53eab444f9dd7699b6b90ddc7aef141d7a5ad61c2663e68ba3f21ccf4c6443d59af9cccb2c69b4d0cf595910d9782d1ef2bd144e1f632ef606b4766eda86f768eb6f6b7e857548d6d9c48ec2851cb2cf09ea28e9bed262addf63c170dbbc0ac57241c31b72b36b2121f4ffb5c1a5d7ad6b2026837c731a77d72951bbd8ae0db776fcd5022b2557ed22b8112b4cc5631df0037f5eebd235b1efe56709d8f369eff715560e4b2a1ee7624b64cc1bbb9b487e523ada1ab2e4ef2c92e627631d32aa4af5dc46ea14227ee92902fc61470290f3bac6e0d4c25f74c523e86ef77cbe8fd0c28b1d64cb3fb4103ec1ca02b3e76e87fcdaf228cdead443823d89e6c9405c23fae75c0a3c7ef4ef10544c1cfd64a11a2f8c348b95c95bc49e929825c6979d33f10bfb627d9e6c1d47fd2197aaa53567c2e28efa9970683902b82bb31788ce830cf0ddefb38941edd5a57c1f04313b1e95e6074883c9292df6dd9b846fa962f4060d03095bddbe3fb1c7b18ef29930bedae2f0f956715fde037f0b9e2628dceec73e77569a8a1fbc6f20d75d6506ede4832e86754a95d6721165927901366cf35205b1b407d0a648a2e16a214183ea4ce2f5ad8bb1c33a8066eef3d2fa0e72e019a9e5f282c269cc1c4327a959c48dcb1512e8dc2d73cee99ad81d9cfc28c6884a76fc80458b5a5bfa8a3f50fcea49479baf5b4465ad6b48fa57b9fd3dab8169e28e4c42b24bbc7857096520e69348a6be8e984afd2d6cf7ab439ace9f77a8886262dc6fa5ba3f5532aa230c21e7ed83a3c91c2f7342eeb14c68782b6040fa6128690c005f5290e5aeed1a1427c423bccc2dcb3a8c8091c12babda9404b7c84904c9d15dd86201deb246a0f3abac6421545d839752c294c3f7cf2e7fb1fdb45bf34cee68bb136bc50c94f2e3c8019e8456d05e54b5722b51f52f75ce5e6994dcb98d4e996494ce5fcf3a98b87ccf696dc204ae1fffd5350818f71aacfc8b13792ea9fc568603ba0a6a7573c59a12a35630d8a1ebec439109d02d4b6863225461e53cda6ae8a3cef435b1018da31f4fc593d1bf30cc626d49b4493ac8f4e8049628001f044fe9ce26e3a8ade88bd5283c5357c00324bec0c3984d18f662ca8cf77380b931c55a0cc5cc975ae19e4dc7621c836ba72b3862f7435b46a301cf53dd22fc1204f773df9690b6418c10dfdbc202c4a73da8adadbe9c00b7cffd40bec32b4ad4e70fdcedcf159a9855603176174f9a788754cf7a90a217bb70e90c79407c32f121d3c380c39d34998bc9f75548ca2e23cad8f7fa64273a0d21c83ff4470d20384ab53e1b4e04c6bb596c95e8e3061863268519c952a67c55d0ffd4a776004dafe6d75b48be477eb11984820696655cda5d5b0a35fd4808230da14bfc67666aaf44de97192570004b243ed5c87943ef050711fd3269b7df390758167f90277c4a6925ed95b63d5e894f1042482c615a4b49b68a4779db233c6b5f4a1786b511cc91b21dfc8d506566a3045bedf7de0790ad31ce49ff8850f8fcd7719b04c890e3c832fad91eeaf16b304dc56a35fbb7da24c192aebdbb6854df704442530168dd836cda519556109c3205124e0a2566cbcc356b29b999f58d2f83d689ca80567fd675495e64142bfe500585ccd006f5f0b37a582736d1951f87fc97926c678504a3c120d82963e80956ac685b4ae3b9c16253700844efcf70492964a797905eddbadfed870a39490df2fb41b6c1aae7bc879726f765398f158b7893577efb9640554d35ef5d4d0d2c6697e18656c4f2972766a64ca39d8ea7f873de91a82bfdaad8f99821ab881aab4326c3aef86f948e9cc9f223c0e18d5a108d65cb311a3a261b5ea06a0ff2a2b2b8658b752ac5d96baa8235e1a07a673a79820eb353073624bb7da6a7227c213fb0c3da51f1d2015abf3ca600a367635ddb904ceed4369b87a65412f5f3c9f6cb6595931e01515d01fd749d6d48e03cb02178d30c6656717d86476b3c747b7ccdca7fb1a0f2cdd961653a1f9516fa54f4174429d9fd9b353466ef1413b5d8614618d392da881065cc120d2d6966af6291f6770ef2a243ec97c73694bfac19a014759c5b6dbbf45dc21bb5d1eec5f3b8746f53f9224412997ffbcbe3082e6fd023d8064a88dbb199464ba5eb33b2f60326772cdf104a5188a0b164a036f5f3fc8ab1e8d14019537cfa3fd5d3d420e1fb8aeabe8a123bb092f9bd1ca8462c2cd9b00b11ec1934093a74c094e4f86fa1795125d2ebd9570fb7196030963d1b91787d61084d8e486150ac8c6e724899464b50be22d664f541dfe983149fb450424e62beb2ef138ed5233d8b5987cde37203155482f5bd16c68c29204b3e33cf8748a97054bc0160be961233655b11b49edc3beb86115c81bb2e9802c1032769a76bc2eb9f736efcf8e212a0f2f8954142cf086e716506a5854d0c8627e312490bc27e9100929a47719091e2e0a279b876923e1e339fc2c3c7af0aa864d312431f643b9b5605ebc6344213c3b13d0bd5c336853503d7704356b5a5890f0381e372c180e86a2d5ac814a5ac19a50c9a23029b8fbd34ec80440c6ab4d8258b3c1c739202dddf8d585b29b187f6b4ce8910fafa5a6cd558b84145ec63d2c80eeb68d046442a2d93d35e844c23d5244d99d264ab2c6d80d7f8302ae16905ac5a93260d9c6b5521d130917adbcaa883c068f6e64dc0af7cbd89d2a762309eaa025c94baef6dc5bb5f2a490dc7e4b2919e412c930b08f613289350c4053e4582ea79d5b7d2e34086d670a982b1f0aaf97be0e126de8965c2c70500af628778cd37de65bc125532177c78886a4d3a533a66376380b2f4eed778b65e6bd009c6377f0972d2b86aea947b754c8ab3be5cdda6524d5df71dc28e2ba230c9b0284750e5806450eb782a58e86aba2da446dbb51807d2f4bdb89a41c2077b3349a0a949ae5fd5ed4464aba7ca855bef53f02810b8137ebbedbfd815873a0a75ff811cac5c46fcbc0e3a2bedb65d583eff5657525d0f636db4b435ec0d7906bac067075c3dd55c1de8b351a0a7b42b4ccc9897eeb56ccb724a5320228f0a1f25c7122a5317e85edf05ca6e6423f6a7c8674e4c78609cb35ad41d2957a22328e6af3332c06c935bc06498835d8218768f9414e1a6f743226dbef8e3d78fa58b930990b50dadf9852936c899853f75a52e75ebdb31224b765b986b8801e97607a13bba229086daa1b5fae264a16ac9f2e9f9bc25343b9b35ae3983c97f89a481821a3051a3170b53e8cf9249a9c1a0bbbd101da5cda591c033604204222395b6f294ab90a884aa274b814dd1c1ae48606c74804dc59ce885522295aaff4512d3084cf02c9f12e423656fb81efcdf52c55416797a705d2f1b1e370e142073303e509764e95f35477d499d56b40dc59fba9d2471812a2e2931d3d39255f83d7c27529938b7c35de342006600514af6bda777c1136e261c1b51101055eca559c9e7a65b3bc52820249c721b00ffd5533b9a25adb83f4e23b808aec7cc2fa01a0b07acd0edc93b253e145edc9789c6834f3c2a79803b1ac45645f1d15ceb3539f60e7543999bc6e2e7950e38e04026731e300ef2b6efa91ea67527c4657c7cc299bae972e80931706782aca42267681acca41a5023de17f52963a9ab45b29bb51c9c58b064b8a80e00434e7291d05459bd0af3f5fee0200c17c9798128c9d97ec58ad3f1390ddbc1a4bc318a7c81406103639e31133e33dc8643256ab571dd858452581ad08d25c79ac5f0a6a54a860be0118829d87b14ad838323ad9760e0db91680adf55ef890cf053a2b2993ba4b4dab1223bc808f758183aa8daebc1202b204b55118e5cdb004f6ab3ec8f306527ef59ea0a1477de5e7d91f111e3339ae8abf212eebd3cd56c64538568f6009744fd2fab377ee50854314ec53659f44adb4bdfc8759e9be4e7593d142d1e2e971abb24baa56da1ec09399655f83a3f022a9a5e28927272fc099141921a819bcb70a0164fe8de2a2639ce3b5b1adcde900fc1316367c463034311663920e20ac275eea534d6e7c0cf9b0d225a1a09b6bd4300b502eedf8211506d5b9167a7976f486f374bc698e2b961ba043a62b7f536aec0d080ba67510077ea7b8f6cd585555b063e7a8526e23fbd36c8afe18bea869ea15a597749d50b5223589923ba6be0e6ec086576c34267b44befa27b4733edb37b8b686cad3efaf284df6b6e0016688f9f0cc6e48160d33db2fdc0e1a0d62a19bd681ffd2f53a7e3c36db306a5e04c9a3541b3e46a6021b975b92f5465bc767176be711cd09be540cad36efede24633cdf194369d457991d0daa57ab7b827d37de796d0dc7e7c33640cf5389a6874ea0a0e4024d70148ebded2e00e763a2007f1a8a50b1f32ac30e7f4edd3e00462ad1dd59d4641a160caec19aced3792839720456678d640b586fe0a54e26fd6446a3d98e6c91fc0dd40677bec04ca65f5e1262374d4919cfd5ec49d2125d06c169fa348fb0272645de60267c57e9750660e1fbda2f2508c94aac41879f27d9ec1126f647344a082fb28ff41672b54a9e1711da109322a0a4d40a37f08094fced5b6cf026f524ba8242a2c55e2c4f7224b7f9ab12a845facbe9f3cb5aceec0ad46c1f20c9cc177d9f108f7a1a7497312a2913a4cfdecd7aa90ac63586c217fbe084bf9184909c138e0d34e44bf782b3a1bd4ea75e05945da8404d0dc2a45b3b644341237f4385e5da940662257784f37344faf26027e02e64661efd94a8990e1fe6f93e2333a59cc69f2ee3a7b2fcb846a0cdac1a1b46e65a97e2be0e215f52b9325eccdc3da940280e700d09dd948a5c24731e2a924abbe95d51c9bf227291dea5d3d7b515b5e45605ddb5f2326d3bf35952f47bf5937ecb04c27940cdf01d4a737ed4b2419a323797265b148630a4c03e5145e37a8f17bb7406d8472d1debd5c99a8aa4278d27c46a885591dff8a89baef31319fb1e6e6cd2deb0b9e8659b0fd0e128c7c2e469e874fcbf8034af3f023dd0b8288604834f2b8b4dfb913b827c636a10970339414df97df99539089d16468144effe83c2deada7ed052b3ddf7ebe91c7080ea93eac2c376ba5f85aa3125cc7a9771890fbeb5976999df5f4e3feaed098e501a1ec0f19d4c0af262f77e60793e7d47990900ce5d22c63339e4febdc240c218c887c3c26fd9ff6c4930b967f4e3b488029f16b28280da5fd5bb81c683973f79fb06c8fc3c5e200acce4e2aab81a8e7ba909eb77bc33e9007758acbc2a6dcbb404d1a3ca05cd82bcadad1196377391b4d90664411cad309bc463af7f68745a2c24f683fbfae9e9d145b2ff1ea7322d84b55955f558ba19c56e3285f94dd81a0eb433f4aa877cfe8da4e6eb4f6e9e77ee45c318100affc37b4c4fb8bd54ca90c7acaa618a756151e22360e54fbef451f38132f22541fe0116f0a7f791e3c41d70a41240ca6ea7f1bd9ff0ebfeb3b976311744b12d1fbca5fbc252922761f48a6bbfbbeb7d8782eeb8fdf71272273e912a5ac098d07dc0f0b3d23eb289771f47adbcabfb9108039324f90b64a0553ed8079168482bfe99f3545e4d05e1dc5f1c22a52253023324b59deac3ff058a3e31115278e00b3b2bfffb0d53ebdf3c4a28870b9fd63b442c8031cd89d90a0d2cf76cb037a1deac99d75efc2f96bc332451256df30be07f4c5cac10b790e250472b4ade3823a4ee0c63034efa5b10ee0508284b7cfc2d2d7fbb1df10d93941552ec7e3429b79bf9aa941293262a11275eb22a95f472124237e266bd3ee11c81c646aa956fa704bfb3385a921706fcb6b139bcf312e0f465020c1d735a7cd6833e661ee83752ca6c81aa10e0e1f8ee842b916db99a7a1eee1b9a2ff53430ffdcfb097df25bf46e792884752ae8f8fbf887b6427ba117173ff62e10c4b4b8c85b8f1f173abc9acb89f22ae1e558d326925e92ff818f3f13cf7d70bfb8701bb3ea05dc63e7d44c1e75a854adbda6e836dde30d8aad80d078757762f55b22914907fde37c02d93f6c85614a5c6ba13608f46c08f0daa5d5db5c9b6562ed88da4377f8e918b12522a8752921bbbce06d974614aa837b603717450f19b1ce72449809f0d8925d14aedddcf3ec6bbe9abc2464f5b63b1b064ca660c984271600de0f499dd449955c087a8fd5fdea13ffeb8c1799fef56d426d17bed8bcdd8734c70a68ec616a4701164d959983f49141cec7a41d6968a6f9cd26f9bfe1875d38347a3c4cc0cd4efb8e119d63c0b1438d38de57b896680df65feb0094068fce554f741e449a871a4f86eed838ca486c32c36761e0b0005149aa8d4383ed8e8b8635a47b2ce4d0604bde3ca29e3e23aac4c4c7757924723c23429aec53d5238f607516ed62d3086a527889c56ea6aecb138fa0b9fa64a5f83825b8eca4a379acb1ade2386194803dc05681ff6aa397fdf9c0c646a666f252cd0bda0b8093c3dbb0d3e1cc8487ebf6ce10faad1c345abf88715437e50ac6e59ae3569ec6e9ad9d6f257cbcb02da5404e751be6e2b1f13ca2ca5c88c888f45d32fcf2522d0f607284151ae745540df86c081adce6305107893d96ae6e85af9c85674857794b47e4bc689358d7ff11590d178175a3b866bbece98649e865a735c191e3fa52b83ebb62a275b9902a093943da53f33bb0a6c39ed7e46d8f2a4abd66b676491119ee676456bd635f76ab184209adb6dc268c1b6708ceb4c8d79bf9574e56720da20da5d43e7238925b10bdd2ff0c2edadf0733355f139a94452f9aa789b3df7d454cfa5d31aa3288fcea1e8dfce527f81182fc77e3f52cb09332303a56ff89f5e832c9db9ab03fe8dda02dbecd5f723069e8aa07627afafe0bfa4e6a1909af3d1621f2193ea213dd88dd66a4b3cf459d12072836ba7fc8d704522ee7ed3cb1601ed54173c6e00e25eca7581b7c7cd7e17afd1b4ad36014cf4c3711fb349ee933e80ca75614201c1b890525ca2fa78e5d493a41a94ebd04a0dcd21318044ce650dbc7568914fa45e840c8cf8c801860f32f7e3430521533a07bf609eabeab99b01a4cb61cfd7b18db09e6c7bf9bb97b1d19686e253144a07de514b45af695cf0f4488f09ac138ce202bf0c1f0a5f5d57db717872992052216f98fd61c5910869ed36127d312e0d89b29772356074e450531440d415dd33dae8b1308ef1a73fe675e2bc1722c4409786f3c72ba63968c2da5b4bc868d0c3b7876ddc9c2b9542670706643125d6c560f7322ca1607b40e22840593bf02ab250f4cac7f769be025314b326b8992fa8550faa9cbc5035062c386f08ee4bab82b7eb13f9f3d9e4b31fa655b51f1d07444a820321f6b290e4cdf06f1728e206782af0c93de51c96198ea75244a77d828f3c0025b2c9f0fcc700c1e704193d8a9002c8567edebdb828780586bd4c29d142348bc33aedc3218bebfbc0524f2a566e87ada9872f0dea7060e0e404d9ccb32c29f4ce50ba44cbe70d1cb0cb763f65679c93b7a9b2292e17542fc028734eea7defd438a41101e413c5cfd7b1bb5b22f27813783976d3e507575b1c77499e0dc5a86e3a158f813f990b58adfa3d497b3de41dd13a1245be8e2952db660f511e513e10e7a62044d109e9fb5cc81a12e24f062c169a41face3110639c955c9374a130b1017c5542d5ebe9ef58a6964bc2c6958fb121fd534df230288ac1cfbf436f0694185475c4724ac04009588360f258e0b6ab67dd4950d15983919d7e33c1bc53dbfa7e59e1de258a5766f930c56f27dfb8bcd325807fc491205e5032de576593f9014c3dbf27d35912a63b27dc3b5fa3a78204df24194f0db9c84ba3fe5c62d9b4e35826a1898de814d5e8342658d8e1c889860f54c7fbb3470e720bbfda7a30f902cda0b52489d4e3f33a0bc7533fccb6e0cdaaffc0d6754858eea665233fea1ef3652c2d4e8d6560b516be7352e311f80803edb22e636f40382281334b90cd90af1da07e2cd4509bf0ac981d917b0373d393de87db9614eb786d00c71c52c8c53d77c3bc1ef8a9bde6fed6bb8a327c21623900c25e08760b05727cb03bcc6f0370e1701c27b5e8e6c96c46252057883605c58e473c1ab366cac6b8641d1949301033a36345c0ccbd29fba6e751c1b40d1819c282f9cabd3d25c9c95a662dd3ad4c73bab19eca7f1553642010f44227c23dc9600e62e76509b0564d9a2f851ac3e18c846986c7f1053089c4c5a2a2bcc29fc22cdda20ea47ecf3ad9d04d4815af97a96124a07ac128e0b25fdb6b6026f2d64321a7a8ce0c42be7c92c8c113a847b7d87b6b590bb9047252c400637d12ad8dfb5b8896acf86bed06957ae9aa53dc8d97a946769cc59f84e33fd417580ee9c4e8f55a8d3af754a985cfd4497af501a3b2874fe6af37a2d9cc880f1f94a80315c6cca3d16d7ef7781c5d8491946761f94c64e2ca4cb8a2fbdbb8880d238c97561348b7adaf839268fb9ebe1a635137ce08767d20e43e63ef63910c20a14bd5198070690f5d9f92ab6d9fc6583f04b313a370e98e7d6dd6d1a6712fff4f175085af614f5ced42e0457d4edc295c279b971d8522a50bf246f45102f0c6f171966bb31ab8503c6c181d6243f47e7f637d79ddb87f15fc9305d1d2b029aa66c58f0ad298b3b9d51382c1e45e3c42b821a92366cf4a46920726d30e035b998364f441ab0f404174f2afb845c8631cc99c32fe470cb260de33464c7293f60d86999de5bb6f4fa6760f14853d25f798759f88e4d0a9c3709565c54b87f05c38e0539fe399a62807d48cb73f7898bf56f21e120e9d2194a955e3b13f281bb1e1c6e5f15e4a8f87232271ae95725d181e078012660061a93394b40d24411e2b8c64c13bdce0e7a8d60487d7ff786bf19ab287da4887fe0426fffb37d3a5c0f29f589e8d25a691c4209597316c3f8e01a4383c6d6f1a196cd457157fece3a81acea6bb98e263c02293dfbaef49a9a5caea0bcafe146a08d7d5463e6d5940bbe20986b2cd83d9df32d9e2837ef2e0aa729f2001249daf924f8784a74dc2db955c81305a80f03506ec2dfea9fe8b928dbbc851980406c7c57482708d757551aa5279ad527f68231757688371af5482f90af33dae7f8a22048eed5dea5013cf3196a4a0a7bf9aeb103b1ac09c0df5f9879c81e8ce0a1c786a12840249864b1bb07e98bf3275a3a5471f708c461cce6e8299f4196f18e81e4bc4c81a9c140e8ff623031deecf037795cc5d86f719020c562875f6b3e53be2b1efc96574230c7ff0632e71b808897b9e4a4452fc4d739f65da69a233f08773483f82cdfd58d4e983d8efc57770eab510848b99fd3375115c8377e6fcf665353ffb0fae2ee1739a65c20a4438608d7a8a8691032daeaef82f628f68b3236f9d4036b61cedd569816b2311ef022683e2f0452393722bf43f026f592523a0cd056bda47dd70f0deb2511ad6e628ac666049ac384e6f7bd832e29a406cd56a67a3d407cf39231a8c45d39f8c56debae37446b720649c696612bc4522f446be4d4f9ed9f74aed7d882c29327ba70ef5e86e82acea22a0f7c3f3dc8c8891ad53be3d4e539316dfb9791d074604cac094c26103968eccb67d1e06ed947299bf55be1195a6cf5952843ea525d3fec49cb8b0fd44dba07ee0af7a8547067a39cd8cfa8c5b5dd11e5c2baa16989d22692f5fe728bf864e49a294b0d1a85eefc3661677d5b225f9eb1b94eb48d9de05198f1adc06e71b113860c30020d662c53b7697b39b15ca25545d4a60e5a9d87378c6f015e3d70a1ffa4e643c8e852dca007dc2c060250a0890cb0aa291f49e97bb74e59a0a3c42e4ce8884495cd6cf7a379012668db531155d3a84e706dbf33e5ed5221cdd1ec12be8c9a51e48451b3690a625eca7c55b77750d331df13ff7074542134bfc581d47a68d58d156e425edeaef011c65908aeb9af58d4fee7f717e29091376fe1a8fd3638cff02a8600d0feec95dc16a6f758df6ebf2454d3c72985a17174b868a218b168b52c36fe7f1f0a992483d886b4c9304de0231df356c6c9fa9a353acb455443b26833ca4f978428b6db0c0790f61abc5941c8dbe2a6394d3774dc6fe1d07388ef4b67fceefce2832cb5975305af0ea0e8dd3ad3836cd2385260d4aeb8211f349b52589bcc108656a6d3e337314c6f1e204ebf12e0adacce0d707387d6beeb4e3855810567a395d30c1791af92b49322f9c1c9d3ce1365b689b3e250f2fa6667d11600847515333abfa1238e956af046a9b85d11f575614451d055ce012714c7ca7a1e575d23d30cdfb4e7d67a60fc8c85552c7d64325dd048e0180fbdf50661e43f0eddc124db337f13b252e49545f1bac18480209614d3b10839766e0df6b60f15831e0049bfc3b1e6a4f87a36c0c224a95e1599c9c1b2ed91ccba5e0505e953c867eb098c57f2613d1fb594a85e08ad41fbdcc9fd39bb7fdbac31336680e914aaad7c79fff90b573c648ef282539fcd275d1d0f1927089062fd11e122da96f6bf6458ccf2f5424af20ee6164cf960a03e775313a29b02277a94571aab5bc01ca1cc62c88394e6c032ae8cf5e8cbe856a3d92088d50f45ce4e1f0c02305f14d2b59ce3387271ac28a03a49da1af1fbb4ce90c30b45ed85da61db1679c83a26df00c9491b683e184411b0d8b1a7ce1d859f1bf4673cd61575d4a75957e873d3a057561b3212a51bbc30aefa5933b9b36572e2ff66e30e007b92e9bb1ae93f4cd7f53c9035d454262a42051e8c031fed6c6a64ab599b5b233a29573efdf44eda844906c97b3e42a1c4dadf669c95b3be739ec938813ed183e902143eb66d39d3eb470acc4bfb12a607b626ce65356cc2a8f5fcaa382bbe1501fecb084bf3411a0b5e5b1768e47352155746bc21c360b356164b29e5e8ab61894fb39d02a63d53edfa05952c110ce3b18a6ba1d21efb41e62ccab407df86919fbddb939ebcacdc9e1ccb6dd520256f8f9075661e3b086c55550a168618c7527524e9375eb90283e40dd33b41512a6a49f4f8128286a558025eafaabb817f8361f73c3cab45d99cec08cbfd4384f08a7a9ed8356fb9a539b4081789935cf1cfe5eb2a84de36a0158c1333ba465fd4e0ec2dd0afe1b9d20c329d4188f072b58c546598730d2fc734003dac1d1426be39dc1b98fa113b87fde7ed24037166a116de0fb050b71b42d764e66ca6b85f94ac8b3e866f1c0a82e5292793d8ad4f5495997f5a12cb3d25ec6fb4e264f6629156117ad6fd81023c175a40c12e22927ef303d9dcb94d9dbeba388b3fa84e7d7a04ccad28b6a250f656cf4484967271544b2bf0c80a0a244c75b216224306f06a7a121ab2436d472483be67b460e466eb680aba05aada28099d431d776bac0ee22ba6f66ca14627ee6ecd22c6f3fc2d227f0374b59617d01d5ee7a72ba0cfa82190b03896319fba673822286145dae33bf6c82820b557ba0ca348362c28670ec28dbad559bee89013a9797816646618c72c142433f992e1ea091474fb34613d09e0bcf55566861f17ba4d16f020c1739b393afe71887c8b728e71124e88c1694cfbb046f339ee0b349327dae9cb8f694144fc0986bde1aadd92679c967f51b0a0403eca694f8c414ffc0afa88a3aab1b2a32a132297f427d3a8411fd0614c1d3a4781b2b583f4beec088205a1a6c8374fb4f637bc8702dbbe4d6a065aa9dcd5bb1b3fbe500519be8dd1fa9876d72ab0ca5f287a8cee695e89364b9a24ea883081ccd0709ff4646e61102b07412a241824fdc681c9998fe74085db512e1d4084a5d029fe025bf994c1d5873e1ebfd3677367c801b6761bc8161e3d3becafe0f435367da1483333bb803f67485b3496e0ac71c44455a51d85f54601715bacf95c9ed71aaf36b5ddd45c95e86dacddb9f41597d3d36f3cf6dc42a2c1001e33d06e9b8e3ac623dfe2ade676cccdc68f0928a36519716f2b694d26c7f14d149cb7453db35480439a2a53bea4a21318532edab20f52b9e13edca8398a620470fb8e3c9c5bd737bc5098926738c3250d89f984f0088ac6c4ce61c657c94594efdae3b6a3c8ac02b60eff847ed8c4ec99fe2a927e65605f05b5496237952a1d81960690789ec7de7ccc07d19f136a34a055245df5ddee97650d898f2ab3c2e9ce8bd38355c9439ecaa66e7ba35d0ce846b171081b74f78c73f3f0dc6f13063a3aca4581189601a127c733865d7089905a183210f771c1aa8fe804038057598e448da810400576dc75c140f40fcc7075442b511e78fc4b6afcf297d7b08e0f9d3f1a3faf3931315817a3742af5a8abf78218a4617ba9f8ad7303ba82051c055e9ea77aede02703c94f8d8fe8bb67586126f0795364ce4b77ad6decf390329c712d2f3117f5f59eda354dfacdaafd7369ca9a5ef054614e7f19589d4dc8a77f153f1d521f77e6cb251eacb7830ec7f374e9bd2736f8568be36591417d82b6ed1de3b6bd3ed8f8e247e191a3b9dd6dd32e30335e908dcc33ea34f193947a4b0da279e6dfcc0b74a1462783e4e602aba55da0f3c1ced86c8f20b1fd952647f12acf0b72806e32d40f8746c9cf9cc582c5ddf48955a803887328708e6096a43f55e44b0081b54dd9ceff58fbb74b334eee9ec601e0dd5871363e9554edcf73f5ea05f03dac65c8c051d2d65a28ba9e3b39453910682f0796fee3c691f63b6ba3587696c8c4936ed7583d9ba878b5fab4806027373e69d35dd1c3d6d986d54968ba10d2f2af6208c8279b9b0b0df1d9868ea9869f327fb598066d9d3da49a9933e45c2354466373f03ca77343ae403bb68676968f9f223ae5d93731b6d0d05441ddb6342facb349d2d077b1c362d45d66354b1c3a6b8fb02a8642a591d7719842e5659960a9e2c24ad468f627cee9054402e537ec49830bed83868e09593ea34160d285a275cbb9dd80e7b56fc936f517dc8f19274767314b390bec440c925fa0ddbe2ea143871a8c8b7b2c971d2e438ece11cd3c9515b23e2a7a8b7f24a42d7d875ae8c7a3ed17047c702284e45436ef181890e440e6b46a952f400715c5699915f5994a37f15e65abc20ad2a0ff46cefc06aa95e2154d8a322cf4f156ab47b6b9e850f7c3a16b38095d705fdb2056bf8e49e0d1dc2f5c7df9b1616120fed21d032c5a945449e9af294ff1426db42d2e7939545cdd1dec56d86129a82f0cd7e08c97e76b87b044abb3e8e9933e69fc39e603de0d1a0f135a693d6df900aa188fc1648823b5efe00c41241a26204c9be3639d2830eac732445043f533887c7971798b9acdfffd5a77cd8994d6efbeb0d31698df85d1226076e1b115839cbc927b2d77d4ff6cf9f5bcc37427dbaf5adba3d89a516ebd0afe09384187171672c2886b571caf8fae8cf18000d75a984835c037cbec110d00ca5f0587394bb24d3780f1a618052ac29ae132e6367031bfa7facf22e1019f78a8d4a80ca043f0ed2a0a62e5444dd6f184ca4adc81d8f5f369bf2c2785465149f0b8614c9099de1d879ae487c677c775546e5b337d5eff3cd8caba598c3a2be9be8e8b7d479f6138de94d5394473038601b601be8dcdeba3f6419dc2ea19fb522319b519404761a12ea8b447ec83e6fce0a17b5d1213314ede26217c59db0650fdb1593ea61cd6c39da15ad9275d977a7e8a26566b08f47255d24a59cd3dd0fec2857cf5d6e510660033177dd40e5f124ef849c137467191ea0e8bc60b308087f634eff261d9c0c198be68f26c5c1073e05bfb926d91e8c54b2b2f88587ff85debbfeb66955e115c9b1972bab2e0c27eebba0de07fcc31c565542274602051b7a63270a3a95579a3e3fcc0e9b3fdc7742ec3ffd6e903b0ae269565e465decf7cc509e862382cd224b596d4fd99138f9d542e41940a9f77a83192b5ae9a98fd8b1ecbf97872a4feac4167fcc2fddb85b835e2de05255d1d4333ccad2802214bf66544847e5e511f8a5c336458656aabee41c555d78b5559076311a16ab4d9408950bc106964909e485b5f56313c55a036f1294d6163fc7a113df7aef7fd5335bc058901c63995844ff3eb1d19173861aff782edb57f710960dfdea85e36739e3ed577340f57ae22f63cfc52e765455eee96bed8db70b5f0086d1f4e98aefe6a34b39c914eedb597ff65244ed01bc5ce137330655262452a9bec8fd7cb2482069e950e0c1d977c23c4ff52bb6edc593399333f47774e3129281829878991ab8d273e3bf74e63d64d18b1e8572975b29e08f30d3aa39ef8b457c10e277110894895934f5210856312f65e0d2b524365934d1f8c93d64ef16f260cc1d6bb9588fb38fe8222db84b12e167bb39d3b8f0680e74bfd64d87afa5136857b19a3db7889445ebd9107b81b1118016f3f6ce905c2646bdd9c2cd656f95c92d5119d0c04e09b4baf568257726e07536363ae198a6d85af0475adeb20190512321cf9a2194754784334ae420ece1ce21b42240f5945dd8311d3d0b15c6ca06e0064eb5d6b9ceecb1ab2d93a8e367b733362e31f7a51eb99ba024d00dd63385038499a5691653e2f3b7e61ced6c8356b3511617cb6a34686051140d139c98dff7aa8ed4b3fc8e5e194d300bb0a0195b7ab61e154b742af6e2f31eff3e383e104e2ecc6f54278bc8b37c1218c65b56c07c620f3ff6c352b52de3c396e4acbdb814f663ccf11417fd94ab7b9b6e8153039dceb56ad850caaf99efcaa1936234a2654f37de936a8ba62df22f10a8ecdb54db27536c4a3f55cbdd35ff282b1d7c385b4db36349fe66bca7cb9108ec7e602260a9c63c87f42213cde4f532466cae048fb6c06d5a8e3d6fc6585d47970a5b937549bbbffee5a77498c029a36e37de83a6c2189a0bc2c23f43187a71da475a854c9461a2beac4f228148b9220209d9b4e4f556d69ece8e69f1d331531414fba3c5bd11a4cc5eef7669a4ff8b5bebd545c55b44f5e1ffc5de951cc5d3cc14ea1acb355f538561dde127a5188c12fa7c65ad109a1130d8925d09f0f81e33ce0e83d184b51fec7dcbefd7767a500fb47c3d0023ebf3b1e36a2b96000446ad4ae48eb33e7bbb9c49886d0739587853d0a91548220ee032eb6185c325a215ab2b84edcffe46f280e199417d9baee47b55d49752f0b4574f4f53a5332b27d9198211fef8b1967901d65de7e468f98d7fc6580fb82024e189b220af85d2066fcba3513fef00b8b067c690147dae67b786f58fc25c400c5d1c0c2520ddda91185d7c33a39febbb984169c5e8c1b836a9846f991e42172614e832532087a8493970261602b19ca521c145933413c0dbc99b6e74b5dca38e46ded63226814ec815c795056ae2572c2d06cc143aafaecc6dea3dac84ba1c793101744b0e5ad59bec14c7f58dc44ad8bc197cb477f2a682e311d9c355b2eea3bcfb0f33ac5b87767908f31d208aa96f76e28ac7bf7576306560fbe1508b5d62eaa2b99dd97145aed65b0b6b8cfa37fbc9dc34a4d020243628f7747ea5b0fa85c936b44918aeac077a8f6b392a88eef88f0fb960ee0a4e0ff9a68182c67f5f2fcc7c45cf054735f1691380fb3f8ff6ce65db1313781a20cc5ca475eaad2401ef343c90888ff0297641dd82dd35aa1b25475d4c48e4263a34ffb9c2595555f4e795e9c2e8c74660af84e6e8f669256b40f9f8721f50875ad014880f325a03964cfd99b6225982bf96eb51160470d04ae65f51c9c036333f1440b06e7d3da0a96a65472e68fae3c94d411d2df3d047accadb6a2b237b15a6f6da859fb8083f32ea2283c95541fb82e139ce43c07febdba8637411969c264b124a67cecc0474f927fe8224c2d5bcc1b28a93ac0d6c251341a3d53572a1dfeeccc4a69c483bac847f27a0d67ebaaeaad3db0a3fa1ce6374713c80120a645ac77d157e7f9dfd16a1c27870094a4574e81c6aaadc196e31c5ec494eb452d45ecc9d34e6f7bfda3414acea42c04026266b269a6f17ae0926f8af06910edf73162d99e9502fd81064d5bd318a5567a2b10389d3eb69ed907eb6edbc71d8106b3ddeb9eb67c147bc0b77d3b24bed39f9f384b7a9b2ca607f23e0fd49a791b11f3c83c7da97c9092704b3255a5f73420e461446dd44917a95d45b54702b1547791f2834eaab4902ed2cca159b78c391c141c657e1ad70a84bca15a31eb4c052d9eab2f5ff0f336d1fd58ba903b0a5eba9ff03e90845319258830f6362ca0e0d68eb2118c9ac8dabd3f8666bea29d8d501a58758406c727189db3cb418f343532ce1604e486d5593e91e7b6b7cecdfea00514a72f3bf23e1578c73c405471735e9da9c697b56a8eea6f239586a19c7090939e4abf0ac9d52126241cf6ab2a3c230886cfac5f0479893a2201c2e427b2290fc11a08190f057078d4bbbde9e246f20148c753facf197250a51cc3b133d369f2587fba9fac4c84b0cc802bbb95e62ddc0554f22ea4e12527a97820d2fced949cf6f7d051004456c562f18cb7e41b550648fc8715fc212c1f51b2764c4b285a12f8a6091c85353bb6ea1422b1c3b307c9a5fbec6c749c07413b37ff96d7a28aa67622f51b0dcd730ed68738b3810d6fb4c157762b1a6d403ba5d7095ef8086d0043920b4b68b836aa8582809d1767e2d6ac6e92db5aae7c32dde51ec476170c424ceacffce30570034dc10185af1d6ed7446bab546ce4be2cc0ca6a570df373383fbf843847403ba9e87c29a0667e74296be61a12802eb12ea5a4f502bf5b3310415a93ec7efc0a277b061454626d6d4174cd5273cdbbc67eb74f53a601f535370f605d601bb8e106813b65a7a2cb3a058e261e485c3fb47c217c7c50f7fd94039cdabd943bb10a08286a2182fb3a08168c694b461b1c58b2537acbc2643d6f4e8026cc5fb073361e3d8062abb9eb9c22541336df217122a5254375742e30230d60892a05130c0c789875b3ea182e054fe415e9769f45a55a06b807fdaa382c73eea2aac55e9e128ea7282a5b06ea867c3d446313910182baa8671d89c9f6364e93f64427f88e6e297ef25ca15306040974086cca602a7942f6105493afe943b32c72ad2a87899e10e23a3f7d60f41f7588f38ab6122ac5dcb154bca32add1e340129fe0fca8a022676b6fbdffc6a20ebb43c7b1938215b14af31c1e5c671754bd2f0700588837d87a1404aa53400f5745f0bf15d03cbc46bd56e20bdd3d16f78252ce53e5e2ba339155ce81170842585665747f587abe8d0a97c72041bc4d93b4ed7304e5f64dcdcd960be4311b95f6c1a44378548f156a6d4770ce2d04f7d56b6edf8b007adae472212e9d2029d88cb617683b953164c1ae31126bcd3d9dd7668579824a30b8a431510f035d4d65151224c83ef63c5b9bf494fd762e401c95c490f4ac3687bd09f6b2b50bdc7938238edaafa729610f46c12c2d0020090780e3a955c00a74f76e9e991e5d5ae4828af7b124ea4c4817639e77251fe5765ae584e674b1ae12f7e83147a69c61c659ac6abe1a520d3bc6509674e147cd7b965bd7eba2a11366c1531301dd019ad87bc51d39ce7154c3f94629c9abc174fbbb6aba6b0098fa1ac8d1139044a87da492cc7f7e381fb0369824568bf3af57f89ae743c4c91abd5916bd25863c47b7f21d0617117cfc115c00eca01ec8b6f6028cabb5f715adfbab26e89042a500b24358c603f1e4a1c4e4e20598c8c3eeffea8bd0f8d62c891ba7740b8bf7e4476764ab973ce66b0c32be241f48f27a95bca3d1527ce142d8878c0bcd6442119f1cc7b3b6057cc9c125defb2b747a39f0c7194ddc5f03890adc82c6e913333a0adf1a9d0d283aec91c746b2af76137bb740661b22e159ec59ffe7b667ae719be7062de8a06223060dd3b554500835a07a16ce4a478e5380c88e28cc0ad2774a085d6c884a6433322004663a221d1d861e4d1c84e546feb62342d660dd0d4c4597b08aa9140850dedd9461e8e49f6c5d6072ed137e26a88de4ceb5e35e034c8c3e30b91b578c4d47e87c690452385a7c1453c21f2d011680d6ef5f37ca91b1791f2e9cd0563a4a6c8531ac784268cd741c326e47b71e47f30b0c0412209442c6fd84dc7165428ee30d5246c17c8ffaf2efe1f9a0df552bb3ae95abcce6cecb784c4e81cac7715c9d4ec3b2e8565b9b20899440f42bb95798d4a70408c8c5bedb918317eb03402b5ba35e5163a28e9985feb71115a1003ef1069394228d14d70618a649ed120b08fdb4fa9649de556c2c2c4941e232806fef7ad0151d0c9fa0c6074927550a21ea10cdb44401ac400211d98ddebe7ff5617c334227183a9c2a5dda03fb4c4fc4b21a05aeb038ffa028cd11d380681968063c223f82fac6399199a7fb072fa41d0db12ee99dc9f1723eb4b61a0867eecb1d4bc3d589536ea2aeb548a242fca8d912e2a8443f06279a806df39f4755109e3513a72e8b0d1c22d8b76d426bec434d0bdc284958f9eeff0c45d1b9136eb28a1b789dbb3aab5550fad0a68c27b98845709283673f1462dbbbae324830b6e4db38d8f916c50b1d697630dc6af4298e26b025ef88c56b2caa806c5c8256609f8ace0e07f18e35a36dabc53a006033628d278deb58946b28a54c1b90e61e12781169c27fc6348ca74b074c814e868e73218b702d6784776ad663c3dbb777ceebff3724f6e95077703e30ffc479c22cf0f297fe3c5bbfe285a99741dceb72f62ed926c541edbf1dcf674ceebb011d6357fe29a034d6e456f92e99c5de59d66aa319234ab2023c404c7f3c5b82617866fd2be8da834051404b9feb5bf95b81c8caaf552673f41c6206170b61eb69cfc8453d6cb7360734486c2621f17257ea4cb72b0552d8067eaa35ace7cf0160d8874191b8c5deae470e5f33fded98e5c017ec817ed36aa7545ef1e5739517303fb9628b87136b9e602df81860716582e1421d27a3fea94285a4bcec9e841a8d9513cf7d181b8fa71c032aebc82e58be3b24da3df573ab31024d4e0cddf8c870514844615218af1a4dab2873189b77c6eefefb4faf83821b2e19763b51ceb03709a4b94c1a715ba7c0655fb8b5f0eeffbc0edf59a39290c64cdb4339add5d0dfee39441acab5d82162cd8c2b44aa2f7f1d61cd056ea1dd12e2a14edceb1cc2cb0a01ba49304abdf02a3f0ef091a2d55119a12c46c30b9940efe6565a360746216793668c042e961d8d18e211ef190a766b6fbbd3e34f28bf5ac457b427d82e2e06a2ca7ef202877b032c528c0b072fccf9d47814003c17f11a6fb605dee1223bb9326a424b46c20e2941ee3e5fb0229f0d2adb1d7cd5fed0d1ef517f13f14aa8fc0a5eada639b41ed11ece506ec7f2cdc1f01bb5043b6d848e1c6d4ab90263666e115017eef34dd2e9a5f2220e6eeaf6e0e036c85fabbfa1cd7f2b0dfd20e2ffad06ff38f5e18905e9a540cf95316aa69e4ead59ce9268f19647b053ea9d8c70d184aff7a2991af53d80f6bd9c7d9ee5a808a2ff07eb06d4a387cd4f376b08c24fb0b78c2e2494e3d095ced0ed552a423eed35e66c10f74cf2659d132cbfe09538b4c4b6085bc56c1318a5500a9efbe89defe6b4618700cbbba96f5884adf51323f104b44adbe39ba9974028d472aa8962a9a47fa410cd7157537c11676105838f61347d1ae518ac7a431f110bd28860026de997fd5c626b56169df06396ea86958ed4fa30c56ee7656c88d98ad541355e1c485aca0334ac833f0f37784ea596aeefa58568518423fc3de9fd6fad2b7e8e1efd1bc89278ab3ccb122013653467dca6dc9ef4a5e43b3e0f4618b5f745aa18e9f162e4e4ef62d14c27fc7f443725f9ae00d15f91c11a3860f7219471fda33c12adc0447ded50662ee53c57a631c2312f9095de63692cae441024a4cef2414376b623e783cd30b5a63308f6dce5c6991303099a52ca5a4d2e0f2c46cea1063b9466d80b408bb873685e0e77961788952492473c227fbcf777fe9173a4e9366c272d256848588ff12aad3fff64ca50e45d5053d4c60227cc5f4d672792d6e8d7379da051484b83937b820f44e704fa4efaf2a023d4e1d679b82633203e1c9679cae0ffaf3509203b6b4e248937c0868caee391828de0b7f7091781eee4785310df7ebe6c2507b3a3731768cdb147a91dcdfeb0d77ed77f349e99a0c619513f2cc13315052d2b90abd9c8127910a0676f6dc736ca437c3b5af3142d8ce3f7f121ba186fbc56c62129ea81992b23f20dee7cf3e60e9630b9f2eb24abe2a6323262a7186528a288e241034121479328e684fa4176a27e7d873676f66ce466938e0737e166a776f230527ecbcbb825dc69f29d124e39b3b1f14b587b4dcb20c6d354f2c60b06901a5daac173192c0ba1cfa3dda8d5480688dd16e1355eb059287628aa8dcfd8fd0ec831905a91eda0643ba535c519e83a1471643c422ac1088f79b40d653c5d4aa22e0c447eeaa104021abe62ecea694560dae4e4d2027ccdd510a79e375a0c444bfcf05ae68c3efd6452921190a7fb9c695b60c6104bc61bdfb08fe9af0039c5af9265695f1697cf5028b3d12f23a65dcebd13dfb3a9b81744490ba163b139ff8794f83decdb357decf40130c8050edf5750c8a4100f3630e9b3a88138c41352ee4cb4d1a15525354fb4ce377443beacc7b0a1d510af29a6a856f30a5253356cccc0e2ee9fd685e37acf04d003f572082ad8e53329caa832bc047c02f8c2cf841b6ae3b95034a41ee468c6b1fea845b25079ea0b72581e70d7b2ca25d8b4e2783696e7faae82428e2b531cf69457f189b390df400cd1dffb7fad403854a1235198c26f2e9673b2c6b9906fbe38642b7d21b6ed8d48c38dfd9df5a6630b5c83e6485691783363bda965d9eed71707407079d34cf4466e6520911d91a0af3f99ce1e9568052985cf16733976662539c65eb4671a2f9850bb9cd6bb81c19542c60c60a38f929dce2e48a364283b876201d91106305502e9e02cc73d2114f7c4ae475f793887a01c3f54f27baf09e5353128b11c4681da57a4c09071104446ce84bbbe4298dea19a8fcb28a17e1ab3954498c80b4959aeb2e9c2e442e4636e4eb141cd50f95dee9a020845d3856a028efd1034f2b8c06e8ebdae92c62abbecba908d1ed0cd0d4b5de5993563e28a77859e8a2e5f99dfd4bc64f7a4c9dd5fab8dbd865bc549ea04a21807b19af9cff45ef11599b5be4fc99ab4a5458bdf62babe710dfa7f8d07acf3b54508b8278cec39fc7d3500bca0f5357a51881014d5dc9ce1d55e2fd2625ef195c9d10c0997a5a9e5003fbd6cc681577c55333b91de98f761bcc4f5fef12a2548008c4d956344b1f59b15e02aa8d6ea55772e916d47a016b804be5c3fa8e9bd37d75cd80316db53468cd1b02c613bd4c85289357667bfb2a77060bddc0087192afc13cbadf4a76e725392b3c809bd9a4922cbfbcd5b494945a2ee68b31659a62a3d48a195111ac4868e7039f075cbe77275a566aee028e73fa007a4f56cccf5dfac577c4a84076e884a56ec18155c3dc8e57395504160e2cbd86d27763709d7084d181bfbe2765c9451d64bc7c10fabb8a1e326c542bcbb1903ccedb39c63d0355fd10ea173e939d2989c2d0c45c23562d6e59ace68a70132ae1d9ae499c328a964c28837565c4551e1480942ee989dc1c11ea57c2cbb528309d74b93e689cf42e3b1ed40cc14f3f38b1cad0972105b32bc0ffff0cd52e3b5bee5c24a0cdd852f81eebf22f0de6d9b80fea8bf9d19528a7d6f9719810cc5bd1d5765aa9e57e87c34621ec33d42976310943ec4b2c4a666233e12d8836373431c8eafbe91a365c4420cfd822e45fcc39ce0b11484807d58780c5822c307c0302a2540daed86602d82f0938d45a6bc4f019aba492861cefa1c247b412d49c9048190309673d1036719ba1211d9ab2aa11c72d9525f9046cae48804c5ee7b8d6a2ed82bb77c657a1af2476b08fd67c9b66c28eb6fafa076a5b29299559d2ba8716b19f661367af23556a11788e90bd448456c84be1f8990f5d1a3ae9615e7c632bfb78342a06f59ebaf622e38f393e6d24429e18dabc156dea0c86ad716cd58cd0d22f2517917b5c419344ed24855668b9fea9e23ae89dc2aa2e6d2d09167b3caf989098bd1fa49b057700ccae3d783f9619eea3534d23cdaef486d14017017d3dda2794af736d869c2f34b9a1e6833209ed0b28ea4aaa802fc3c6d26f6a082b1604abe694b151474cbb15fb5a7a2074e3fad35bdcc8e3d9f0521596d4309f3082a8ce82c858fb6f9c11526a369ccfa266165ce1d026a1d8be0aab1bd452530b9de3fa7ca8e22e58b672c4bca72b04a1c75ce317cadb7b29a083002a73570828c84aefd424b8160bfa5a564de306547a21454d1ff46869208335d1f499aaa400d926b98628e134d6f97c6fee5246a5c3f261f613d33c4d4f05df4aed6275c9cf2bffccb8689d49c173d145ab3274dba315cd0c98a5e36d09afb29fafc54b07fa9a61f2f010d77fcf945da7e737895c15f595b848177316c13ff6ae1c3980b929ada4eb81a6f54808b0a691f4c239d5b510e27245c56470ad39e7596ee402d0d1d8265ddf894c9052521cc17920e6d858836a27fbd3d8a55725a4075b5fa8e64e5f5a1621ecb0b6da8feacbe0125df55d8e3547c366a83c0bf681d8d0f3284d834cc09fedcb2b3231cb644b037fb018c11c2a6558bf67e99b6f74763fe070981c88eb7eb096e7e834a81cfb90570c478482b4e9770d14891a30d494ef260c3f51707c7ed300d7212b78da16ab956fb9e1357fe8bb89435db63f42957ff05e40dcb691cc2e6a079cf50bbcfb89c812b5dd172bd8ae02dbc2bd108da4a1c62681b17a0780b33543b1a013b0e3f2626b08c6035bd5ab442284111a8899fd4f8c58bfb629cdc7d3862a681658703e5f43baeab754416123e79fe5065e0b592c44cefbbbf94c742ad13482e95e594268cc3726b00874f1b0f1a7eb63182c77b5d9658b36b14eae2827c7ed2de5ec21b42dfd9885bc08cd98a667ef6fd5f16a59ec829a23973c8dcca04cad40bdbff90e1a5d3ff2b9d8302b2adf318cefb1e9d5d947a04ff321ac835848a3bc299f042e82515698356e1fd57aa9a51f0caf04d01fe1bee01c61dd369ff3c482233648224bff9524d6d33df8157a0ef9a7bc39cb55b538d6b4120965d209d3eb542a0f6a7d4b4f347735d74c471eb99ae2ebfc347d595ddfba0b98df35ce39f8215e0f3eb0ca3601f929808a90a43c9c255bc0d5fe3c3269cb8cee7ea7c675a697869bc4d4ac048753f7c3eeaed6085c82715905115224678baee9c39de99a0fa62f5ab3adec262ed32bef06b26c30190bd8ac68bab2619e976f4402db2888b63178608d438fcf51e4c9f3f7d2bf211b7c53499fe22e9567b81646c984a682d24a565cfa882071bf4c19e9d907c77db57e5b3f351ba6e602a87d03c8578e75d022243b14d50b3765cf920da0326c542b082c03ada40b172237ac14ea05fcf91e9abdf3bc7a9158234b41d839653ba8d2048cc457f822cebbda45124c7cf9c00e162d117f4d8d6e9190e89fe4f2b9750243bba4af66c24ac6c72f02f12c07348fc99f88e4e409ec94ad42db8112f84a241e77c3f4ba655712fd8c5f7b0cd1d5b7a45b5a2e5a490d1088202298163b4e6963cc2a3ce420c5a2c2dd6329c24ad7074fe2c176aafc1e3ddd48146c3d432d40de45c1c8e9a3ab376f42fbf2e7bc516b7c9a55e54f5f75be5677508bdc3402db1ae00f235227c17ab536cd239c8ed354d0a2dcba4f8f4f9fd7010493a6db5534f5441ec3a9a49cad89e682553ec00be925236d81db80ab060da24aa6d0cb7a22b9c50d3802ed15be8d3f2b6542b87dc752e4964d4998de3dcdc95c00479f03542d3e15b276fa36101282d85fef76096aa9d662de5b1edb568861daf33ff41ada7ae7761b37bd4089140f1acb13b71a1523df4acc2050dc379317d2b96c20ee2e4bd005b6bd615d079d19de0053eeeaac643baccc0accc147f85368c3f45bb8a7023517571c9f666c7c8f7066d63426ee5408b80a95a169505d49d93013220dd18eb56f25ed121f59a50329c64043bf2085759cba1fb65722163468cd90c648cd695e6207915730b5499e4ebb1b37fd779d90fc0ffa05bb0044763199a06601e25dd9b3e9084b733ff78e2910b788fe56d7e4be1c73a859ad0411938f1143e6857f1e249a37061d68cbea2f323af6bcd4b774aad346715aad414376dd22b68227f4b9f25da29038a5ab4b35007f37bd81c15118e3d082b50d53119786afa15a3153255bacd6af860bbf940906e1140ca8234001645c034a50267359309c55a5038d3c5fa222d40987dbf50913abed0841f29446750a566eeaadbfa7ea238f5d3831089170b6418d701004910d868d701b7f4f58c3d425bdb7fef4d347cdbc5b06e4d25b908d408d104224d97b6fb2a59452a69464bc06e106420724894d38992117f921b79603763396d7470cc6947689ff22840edd6a0f210d7cfaf3bb0c52ed55ed9259fa9166b6e369a9d31f494d46eedc2bca0b21fc3ba1635eb790c5ac08a4ef498f550ef5e8570ed53a99633d1a8d6c9aa3d12229c68edf4d22bd0fae81fdec6c48b6ebab4d0deb38314bd3afbdfc0e93764ac99fc998f5dcceb1ef71e5cba27d5dc6733b1bef6cfe6dba01f1b18fe9965c97ed5c97d26236d3e5b434f1b197dfd56418bb0ef131395d4ed8f215d8006dd664f04eabd29edf5bc75f204f66752e94f165a6c33564b623e5ce4e863d299e3e7e57f31d8c59fceea153fec9421f18e5679abc1af76ec72bb97865d4302b9d8b7109e48149b44bf41ec8e32fd0272b712a4b2ab7ee9cf427cfe93fa9d53219adcdbc5afc66cdd2c49f9a6466d6b9dc1c65f7f8f80b85f033f9f3f27736f36abf699f516d56ee419bc93af34732a318638c31f3c136480a4b8ca2849f9bddd3cbd7b905b8ef481641f74816432ec6449a1cd5eb25db5e7257c6452efe88e3df4adaf618e6a3d1c8a69da3a1f24d2fe7bb7c9fa393e9a76cd49f2c6ab6c9f44ee34fbf6dd776e2dcf4905bc7e3f6b3fd1897ddf6364d63fa1eb7b9ceefe831ac93cf45b7b3694da6e33beafa9a9e37cca6ad4d5fd95dd36e69e49bbe6d67e3b6db74906f327d73fe94ed66bb1c246b3cc8f9dcb73b9bee98a86a364edf96a6dff4a453eddf4cbe83973b1bdf341bf269a6ed5893739ad80edeedb17ed476ba3f2ee6dc6bbfcd45f94c9b0edb30fffa8d931fe353ca9fff206f14eb6ab2c953beffb4ddf4c1353af97734b29db4dde8d9b28ddfcdd2581e75cfb6f12b5ffee4ac8afee8dbdf5f209cdf35355907ef68dbb1c14fb3d98e351eb2cbcfb23ddcacb6e2777eb3ed328073e7639647ffa02633bae2a5f2d24e0357fe06ae7c29ffd21cb03bfbeac13812b5842c7c8a96dc2417c67d47b4883e3009efe91f9675b8c6bbf16374bc83bd3fc36bd3ddb4367de773d4e2e70ae0be235af45c4c66acd960089fbf6cfeb27d6fdceb15dad564d9a576646bb20bbfabc9a06b3668e463b6e3182a4b6a4de6836b5c96663e7cf7cb43bc32eeb00fb6813f6be80419e974861eef7c520e4927c61184a387238841e897c34c2ba294b9371a5d1763178d5042d873f93b87b9fee959462f1963942d8830ca8f178d50621af52b492d528b94d32fd3b2679a26b3c4f5f49a17d534190c8e4654464aa3bb53888db4a22a5d687425b7c4f5d329fd4b93a17123e29ad7c5dc75a98cccd14b999b97729323b1989357724bf8478aa4be25fe822df1d6edaf3caf069e337c2147e0a3440742081fdba1cb44a624f51dc122e8a61a04d893d112bdb0e9558c9fe14073e2099ec1fb62a4e38e381befa27eab18ebf449f70c9ecbe8e39f6845c0e9637ac5e4e33f93ef7a858b7c6af794f4103719c7d15e618f01eca30d1b0cf42adef42a6e231d7f7927d68e84e013031182399b08d32b13c7d2d2abf818186287773328aa535aabb34e85dddd3a153ef6de0d2e98e6e229dac3b44b248d4630fe1d4b8b85e95551acdbc8f20fc74560f7df2ef29528d35ce42f71b35866b1778b3ddb8e455b0036ca8868322817b31ca457f19f9603ca75cb8cf1f38d81f42a7e092a74aded255451ee3b8205910b71b8b005cab83005c63fc07d05b8af06ad53b9ef01003290cd0229ca2c177d110b8c9b9aa8ddfbb9b143bf23582871e3eb88ef875911d52f08888f6220fe422b9da96a8b807092a8f58038ec275ec09e8c8e427805e12fd7c36725ef067ef8ac85f7d23dfc850b9b880b3b041736111ba383437a3c15bbc844af1c0e893dbee23cfc8dd0a7933e439c352512b5833ed2a721f4814a00e18153e014a924a8feef1941c1c714952ffda2314629b3f854be94111a8135057c341ad9eefad7fd75c137a5f5c8d9c4fbde6b2d30a614c21863b4d0a9cf688132deca7bfadebb9ebe17f9d13e5f81d51d1261517e37e79cb2abc9a0f580bbc7f7de83f0bd07df839c09de7b0fbef7de7bf0bdf7de7bef3df81e8431079b01c3485a4b6b692dada56da161416b655f684a6c8185d7ab27e1bf7b83c3c220e42294e9215a165a4b53426b694a645f645f6845d9175a165a11db1338c1094ec8ae10238cf1bd54139ad0842d60cc1c238430527ed90f4e428d1913baf7de93344229af18e57cefbdf84388be36cd26e01a42f0b589d8755d578c16c2499de5d684072184451fb7ac0ee1bd1763ac813a32c608a1bfd2bf4a218430c6d8a54ab54d25c64e995b51f9a14993791f21845a768ad155ba78427c42c4a8c4b226c15a6b94252f9512c00d3f4a6b8aff4877cbeecdb29396c5cd1fc6e8ee5dc55030144de6c5f85e15a5ecc4543aa1321413d4094a96d26452190a06237b314608638c30b40c86bf5b3725b901efc8164b5cefde0206b7bb572b3a25a7fa05b71f15b9149b4412b1077f7178192d7d75dbff11852c4e80840a44c861350b6e7fb51db5352c77d52bb642c66a46fbd8e28816c11648a06a95d147b628c1650984fd6b17c7febbebe96393d29fd4d2eb3bffd1e8aff7318e4de73aecdfe8ba14fb1127319bf56ac63bffe28af88b8e454a5ff7758dae6b74494ae5a4f4a76b32944a3929a553363fdf3a5e38e2a944119f5f54fe15f6e47bf21ad9ee1a8db0f7eee8d91df33eec7afa9099601be0536efea4d7755186ceed23864444315d0411918f1a940fa21f47802c2104b8b9e07bd5cda5527af51a658b4145b9fdef3a0a8459af1a087b32beb97e7ebdd9b7f86f45655a8ca8f051f735e73f9ebff8f0aeba14972686445023a3691411c5900d307ec8c96fc9bd20b05b72af05dac4396daf4c50fd9959f13108656cf85da368faae8c5ef5ffa6939ac1d2f26e4a5c5d4ba7a8abd50d6ab21fb8742ba05be342d77f6549119b6b46ab5771075dcd23024291e844923804843be69ddf6347b6e46172eb8086160d2d1a5a2b63a0a1756918b2e2c5ca92953154e112ba84ae2a2ea13bd2b9947055c13b3b3b3e762e17d1f1d1dddd3cb7bb8bc0828970134ce4721133c14d683c1a8fc6a315a1f15ced47dbd18ac022dbc97676b26ce76645329d97f9c06286ce0c9d193a333ec03644f9908b3374ee0c22337266b4667ca00afec37fd0f01fd78db0d0b80263bee0ec71258c7e052bee00ee3b5205255a0ede9caa9f896effb831edf0658cfb601b283716d37dfad3b7019f5a9ceb8e232d0d9cc81cc59b939952fa36dea5967770eee4baf98f732367e3175af6e14018f6b2d309aa9c4ef4742a3d0bd730f9d29b7c7c1a5cc38462258e7e89a3a512a5a5a7316ec2a9a89c4a4f836bbc5b7ad6644aa7120ba5414bf474a2416987c3a5ae0365aa4f839ee8a39ca45c46205009f7e924f8c69e2b59a2f51f2394e78f271fbf1b7d94291f553160d8aef4a7ef6a8ad5a1b2312c0cfb52d7eb48d9ef67311ca809d7997cfcf737d1373dca7629fa27ce26de93c95eafd9f43d7d8742ad76b234257bba5aae3cb136dd8d68d0e01a271d4e6c626dfa62d99768649106db10e324cdbfef1a4ded33ed5f74a0ec8fc996ec50ea66cfdc7c1d7ec9b8f2754829252f407b99fd831ce5b2ca92babea271e2a724625c02b9e04a3ac98df14a2ba56522269a2fa9b4d134fa877d499a4c26abbd69c524ad9b6c973dfc371a914a9c4a1715b3367e47a487b6441fde91a521d9d1fbd2b54373fd6834db763897a5a1d49aa4644ec61823954f29757901d48d9686fee86f887ce0fc9c724ed33391c9fa60661f44edc2d30733d1641d1f443ca70f78a58ff9a3bfaef7c76c87bab4fa8a937ca8bfd9ead7d315965c975d4a69579ffe131111f920f2116b105c7a16a780406ea4255f5ae4caa7d8531bb505f08dccb6ab6feade8fbe6aef1b655a7a7afde9f4f4df753dbf8953e9a2565b935d13b41dcbc87699651b34fcf09a2c4db526feadfe663b16ccdaf4adf2b989fa261d4cf3646dfa966c87532d0d7fbc7ed198a6111bc9c99199d9426ec7fb22a39945448a4a524a66826b989e76367d3a9978908f514e522a257d19e326ae546a8252229009d944d1a5dc8331c2d8726913314a8b4d6ef417f76e6d1759df5f48ef1ce925b73da671a4afdc5535fa92a3924a29997eadff6aa5cfdc8ef7c51231cd9a0dfa1b2471f32b773dc69974ed5993e9aa67931bfdfc2a537bc5931b71d7d3a73672449a903272a3688a02db385031148c31c60919c2676e87cf0b6437daec8fa88ec5ec065e31b2434d866164f115d77818d9f8d8e4628c5326c6b8e43a9c391febc0e71dc8dcb3109b198c96c55fa87d9681d1be1f51bddb6f6e7cc859c93ed806f830c623ce1df5b01bf11f17aaba1418717465df8e79c6fd4bce1403464a3f868de69c7394c5388a3f9ae1794e151a5c237b9e32a8c860bbbe934a4c4a1d99ca4f154b335f85716e9cc5dde776fd364da33259b2700def58e5fd69700dfea6df5d56fbf7a44b972ffd25b536adf2f2bbcbfeb8ed503a948ec395b66b159577cdda74cb658a7da5c136f00c56c5aab447fdf31316f61fdec9f0edacf2244631393d0dae21bf3beeed0cce32e8801463f99ced5a9e7bbd9a81860c9a8c6373cea96269b00dcdd29cc2759d7aa88a517a18b64ba56c8cafc02fa1d82e9532b128fb7ce5644dbe914a3abc6d2571cf57304abd69b4b4c4683b9b18af166d628f5eb6e7302d0db6c13b9b761deedac7581ab1e57636b1e58ea0a643d3346d2eb1691a34a0ffa0114733750489995f4abbb49452be941c3b8b367dd9d2f0670f69c38a4a5d8f3de6ae7f23089fc2a71472cfcdbec7850fa39467c73c4d314b333fab0d61d75dd3f9d97735990e19db0e721dbcf2470de01cf821eb5809a3d4341ba48796067ef6194956d8411ba41ff5c8c20fa6a7ff43357de93721b09ff4f54d9ce94bff43b5aa7ed43f16e94b6fb2aa36fd0ff54fff83e951f6e606063f92b458a63f591e424c5fed8d101cf34df626fefc1bd9ab2ed9e72b95dba29c1487207a7c747894e888811982f9e11e5492807ea2505f07ea2c2215b9fca422ede242bd622ba250bbd47d56f5e0140c821ddc9e41eda25a80dfcb3f85862e1371ae6405da9667519d4b2ecf22d28f0bc94967f8ef6a4a86ef49e19ef7f35cfc1938f9327027afc2913e853bbd8a3341fd738f85ddf0e79ed210eae8b1df822acfe0bda4b8a75d5cf05eb2772770709d8138c807665d8fdd9869cb3d303ea619c02fd27212ed04979355c03ddc93d2fecab05724276c94cf00a76090be9ff624d1b3495139c53d56ca5f585410fe4481f06f4e2c24d91cbee22fed0d132e085ff1477143f88affe9a259c5806058369619923f3d42edf83beed9d9fe0736e33772f8cb7c7fff21fc057b579231eb86bf3c5690d050919216c93e16dcc12748887f18e8fa1026c23d33377a75f585d3d41484417803c23ff90ee6fda870f453b8eb555cfd189ce96170d8a7b8d1a370da9f70d93f0d7502218410b265f941f543faf37fb85e5a1ef2af9ff6ba28fdc782cc3d0a21c3d6664e2eca975540afc087d6b245d1e010c2ada6562c30ef0765f219e01b4f6c4e4e7dfa39a6bfa2899596d2faf432fd85e2dec52e4ed59453b53d3d0e0b33519998a03e46014317be9c0c4152849015774238c4082bdc2c08090f076ef7b870a109aa53edf290182174e1c9de947e7e5b1cf22f7b437ac983f4f42bc743080e527dfa3c4a2452b5cf579ec43d16c6d96361dc636d8f359393a37d0e16e18d4cc3380a872084dd63c369b8c9a0f97d806eccf84b0af7b068cf3a2a5cfc146ebe8adb3e0647fa140c0d05857b2c8da7e786af385b18965203cdf972cee72181261010d00cca9c7607201a3c875783f769ca9476a8de877742b13939dbc7cf216d5254fe13f75852568b23be9c2f5fda1b92891302597ad5d2a3cb521ff38c856bb44ed45433f27d782c6955fd835b7105137c81c90c52f9f471c8a7dbcb6f8bc374437ad3e3b0a2e92b176f6b3b74e05b7a1f1e2b7e6b3331857f7ccaa4f6a0f6ed52dd83fcf83f987e3e2bc1a9dace3c56498bca40d8e7e43bf699c979be5252cda03e7edb696faaafa09e3e0eab72f0527f898f42fd0967c265bdea61cefa37a7477db53862b4b087f8f27f882fe7f338d9e72bd1fe30df6479d06763daaf666774942c192a12ba0134c47b344ef7c0705ad6211a45f5dfe1065480db182328b9fd949f60221cc56d46c2ed26c06d8a0adf816817fa8d53733d26e9b72623c47cfa98742961075a4a98903032112fd2cf45fc011f36c285db2d749bb768e2070b4d345016825ce88cc9dee4c7b86cf740f4aa26a54585b62a913e97fd9b1f8820fc855945e08ef785cb4cc4650ec1e5572423447cf840a9223154bca80fe8ba7dd4a7a5f0dd9cb3a3b4dde468abfe7df7e9e8a87cfed7edaa5755541605b48b3f118bf373243e46d01fc41f6bd9a6a89d44cc0d7f91c157ba9af25d4ae5bb8ff1dd4af51d4b07f3dd4f7c1938f92adcc9a770a88fc1a9a08a53b1529c0ac2e054aca7691fd333708f2503f7582adc63a5708fa5e21e2b06f75830b8c74a718f85a59ce7afb785616161ed9feafd107f52cb83befc495f5ad59b8f557a427d1d315cb803246ef77e6652905fe4bfef3296d13e7681f6d1604ad1597a37662382b603bea6a9faff69289c101f1e2b657372e29f7c8e7cd4639ca1708f856d52544dd576665a55ff7c1cd6bb38a855b555f5107f3e8ef8d3de0831f99b136b6271c81b94c561993821f11fab722a48e25470e372b2cf197d0e7df939d8e75c9f339fa571efc2941bbee25c8b0e05c57ceafda446381c71b807c5699a0d79af993529c8560a887882044fa0207aa0025cf820073a28c1149c80c2054f80e0899d931f4c1081144ea4200a413e50e01770122609600ba86002841042cc8b2b9899afbf2e1d2eaee0819f287e8c20a3c91650c42088b0051e58d193c516a6e02dd86208d97d47b668e262f71dd9a2063eba4cb763dc6e5ee97faf86c7eff5eb870369e6b03bf63fd8b2b9bdbdbddb8790f0fadf6b8e8ba0a85dea3227b9dcd1b0526150221beceeeece291f72251cc054fc323a968cdf7b0f8893fb4cf235c947d90ddb0584dbd9cbdf5927ea15cb707d50b9db0160453579c356bfff75b067b88d52faaed6279148241289f44fe357033f89f321edbafc590946df9129c6e567a91c8b7a07be67379640e3f9717f3f9a87484abb340a2e211c70cb619320db19f2026911444c14a4b3b92ecf8cd60c9d0e40589399203a13813508e26e55baa8424f83806ee42d05b583b7cba8fcc8915f8bbeb2a457ed435c8f34b47a15774c1ce8d007b13513a4c34410e5d6413bec6666d8318b1981c3957b10b79f631ad6a46ef734024624a29c0922523bd609520297c829bf10433120d06b262806b5631dec5d5b87135b2a55604f468411c612aa5f54bb38aa5dbad76edb0a57b40fb0289c18c1c006981352e8415683273020b40fb221a03841834ec929e94b18e3d54da8f006f0be2018485989acd042176c104208b72c84dcee57d11411463806122290b8fd19929691db0f4393e9540a09263a4ae014155f68e1f6a3d4e08b242e7cf82729f6e99acac1065578210b3e8e104317acee7d89dbad30d8ddddddcd25a8ef42134dc6b5b8308a30e800006110baf0533ec88548f0420c06b8f0595a60c4d0c4858f434c08a87847c660c585bf43bb68327004821d9c08008622b7df14a476758911ab0b9f664b7870e1854bc670e1a7b44bcb85fff065acbe90830b7f06fc82186e022efc922603619e167460fc80c21852df85b70b2a70b8fd5548173c48494128a1078ca0c938145ee8c2edd77ee53a80187b4106a914349971c54411ace006bb5ff6c68aa9ed689596056fc4c8442fb46e07e0f64f4da62b075210d48521b73fca256a576314d08522ae852610c2874a11800ba9545751eed08f16471811c4470d5e20830991f818c113ba82a563d9d161e9586e4baff861f876cce2303154bc602ec8e08654bdd85691aa35455b3b9175842173c708e8233b2e903081b38a002472618315741091a09f20a05e7917a6b820c211f04712f50817581851d42bcf084a7ae5dd8ed625a8540a920f083926f4c415bcf8c1086650b3fb8e24e9b9dd6341922871832437c8742abdef48122446ea76df912446187d51e57d479258f1823abaef48922b16f08120d47d47b0f002241fe88015b02703875e5149e90e41fc078912daa54b3111b76f38a5b57a4baf7a09689dad10e4c0b5022d1ab2407e2b7ff694afbc2a1972f43dc81d89b6a0e43e243b4566dc77640b462e4662953fbcfe2aef686a553f75c1d097fa5ed887e5bd786be6bdf0cf8db7fce53db743f48a67b8dcb2e2766f49bb8eb77a6581165cf83998aeb8b0ffdd1c3980c008126affeb098df40a7ffc429dd45bde7a37f013af06ee874a1806437c440b565cfe16d06556f7ab96cb82dede32a203c433450f127c9200848a214a20c2c5e3c265eeb8e316b4e0ddd0cf0e839deb3f526ee72d258278ab889129627095b89d5bd1add5edbcd5798b7d18880f90219c8222f9917d0891d60fb786682d192203ef064fa2aa667e567e5433f1e7d5d0721de7e9f156ebc781822e336ce95c6620975ffef80abfed9ce7328e1cfc3f58f00fd601075454f5a17f5aadab82ff62402e95d2ab540fef0647a2aa5ec6efd02eaad50c6e154b8b02da45058343dbae7aeb3afc711978b0f79c5222ba70dd629a0de6276c55bca220da85ad8aee782f3bbc95fed4900aa4bbbb9fc0c37b49c1acee7b265c87e9afe9f9018f8d15b7ff75c793c4ed7f53c6ee4df1887680c1ed17dc4ec67df639e03de1f6f56e1062017caf5783ab7ef0c73e65803deeeeae9101dfabc121a352290e3519523f46225151fb796cf1c748b285a5571dcbfb793fb51eae6edba5dcb74151bbcafcddfccd1b141b145714341dbcc7457404b93c240ec5cb0f044fbff08f9f1a252effb8fcbcb8fcb11fe4de0d62e4be7e43ed2e85a79a9132b4a445ed7f5647af80e815f7f773eb75da055a869052cb3adc62eee7d6fb08d906d12bd6d12b6e6ee574f3c48e3c95e945e28303fc727c70f93d9eeaf761ee9a4cd42a4fd5747840525cfabc3d7ced33bead71292337026ddda2764f284704a015193b15efa5ae663c29ffcd39bba7b69313f294990d57305d0b7f2311c10a6e97722bd46c3b40a16474c7afa3a52840757df641083726d487cfbeba5551df3d82a0776016202c3e294230846208a108a584de4f0a275fc5c58fc1d187c1cdcb84c39ec507080c0b4c8e991b4240da4d09274a160a43faf893f4716ba1d4a784522d2464d2342270430bf90372089d4c5192b64a7af81aea336032b13939f465b7c0db6de21e8b512429e9cb78e284c0d7b8d347cef4a509f8e7785fd082e6f24f8f43fec9646f48af9ad92ce9b5e8e0e969e9e48061e9150b0ff790922405f408f48a4936a4e79c768121942328f52c52e7e44d9cc9d32aa7aa63dac43d56cd112434946348670892c5808e9298a3a4e3b797dbf3306d5eb91bbef2862aca1621c02f9be59d2b9e161c021d7f9e82f97942a03ef5aced207dca3e6d07caaa5ac8c9eef0e1b172724e3e7e8ec9979e64b71702bfbea358491f477cfa28a577fb60ea16549904af53334039ca2f897530cf6a0faa5f2109bc170ec15bf1f78fc0bba1dfdddf17d759e7d5e04f91d4f8a57faf86d39bbe3eca35d5ccf63e3cd6666f84e030f9ed6fe49ffc666fb63779d50cb53742502c8ed2cfbf39b12af8f4da1b135bfa98469dea6fcfc3447ab97dc9f220d96753787e808610f101d2a3f3d3239ca6252afc700ae32f0c43a79532f96ef596c487c1d14f71f35138f926272813eeb150dc6369eece3c30546e13068583431837000c0c899a3613cae6e4c854ca7bdb4cdbe388bfcded377b234b42269722e3fabf544ad543fced7fa06ffa611ada608a7a785eaf60af5a9bc939bde95b53f5b06da5bf39fdf6258b83f4d2de989e44a29c4952cbc314a364a82848080806e682da901f14294ad3a99670f873917661a9bcbf219837340463e80d696fe8fdc8c0c93f811123b53d9606036488ebc831836dd474aa946230303191c77c2cee57ff86521fd351dec02fd10221a190c227a0e3d5e028529414e6fd00056d2824f9279f13df848442a53c313d8d4f7a92bd31b13c4c382c1ea6277d89e3210487c9aa9ef43c4e369fcfa8146ef66439eb100d0000000000e314000028100c078442d17030cb533d133f14000c88943e785a9a08b328486114838c418420620c21c0004360680a46ab200058a94c6615efff580384dabe2369e1b2f1f9793833fc1ce482b9fd9fbf693cae090b8e2bdcca7b8da570da1cc8910c942d6b96a3c8ebf3f12e1b9756310770a95f49881fbd48f4de0fbea466f076015ff961e44a74f62a3b6ff82abf5d6316edec222f6921385655e72653e354d987a4e85127e7c064a2519e33eaf90a97d795e6099861ac23dc964b4b6e63bb269c1d104f9aed8bc7b104bfe4d92c82638cdfa9515285cb9a266c27e170af4fd73f6e765e10334c2eddf90b2b0c9758f992b80c0f40d5fef28acd44531b79e52cff7ebf3805600c2b307405b21afb09657e31f157b5683589bc2f285ad043192a7c3f6154f2120aa240945cd06c14831a153b5594b56bf01c79a3fad2610a45621f78f3d8c5d71d6312eaae31a9e3c09901011a88b3f0dbef8cc0491d546a95cddeca5b2a42192c49fabcc42c65788a205785411ea7b4a8e6c02556bbc850e093980dc7a4a38515eaed460588be19a819aa3d108f4bc7456cbcb5551a6569505d3979d4849a0dd048fb193f37a33f9d549f8841ac4439f2123ea2a704a642b2ce180b8ace6874db99981e220691210145fc53efa76ea1dbc5ab0b4577bd1686d147ec4f70bd8c11e5223dde268d7e0fb2b77f44fa064794b75347b423ff3c431cb4cd058d3101d4d21cae95f562d8a8cfc4634266a70b91c240b9b838f2f9c8fbc839b2518da640e7ba2d28533685f2d072380b8be37b26e54a6957234d40aa1d156519e798d050b6d883f8c745ba3e8e94e51ef6c42ec1d952900cf2dfd53c684c399231fa60269bc86cd3581da3d568ceccaef62ad608530f98829d35bd7593699ee7cd9639ae74e9619536f2e16dcea9a86e791bb06be03032e82a28e07ead6b58190fc6f3efbc1b5cae9d654bf8c6c3900ca60c32d8df4c2ca889676abe67f81222b3765d42c7aa686f93a80130f2f34eba06fcc850a876cda36322386bc7a4e6d6e22c1f65cdee4addad071a6f9c7a4c7f7c07c37caf795693a53841a842a1be57dc8b82a7f3c45f3ad95e3e02b77cd4f842e87bb0abf1c44b61b240cd563942868183dc3b84983d2f69e6dc5a5602b9ba6ac245efce4c722717f64c6e96de12fa4897258dbd6c14bc1a1f3b52446d0f374b2d7ce79d5bb66f97ce1b1087847a1f1bd01598de42fc3dfd9b0dff75ac7552a252c2865cbe59d443625ffc0de7c0c515c980293cc93c3bdc3d9c11bf3caf71ba131665eb72a40a18bfa9fe1cddb56306843a493fd6d7a86f202b58dc0b31dca21e4f6561e06b3f5152d364ca4ad80248af4336af98594cdf8b026082e888f2574755f922a767926f86271011d129ad52d84833aa453752e8edcbc25a2b4924c75524bec891ffb18a2ff7c0da88e2c60c8bf7415f96d4bb8f73ba09f6b0c7405fc7d5de49223bad30c8739cd8cb4438ac7aba1f421cf6db29edc8c211cb88e33741af8ed9941652637b59414439907dadb17b5e7621c7ab276738f7e4e00d5912e9397056adcbe7f3bfc905ef365a0c5fbd4deb640c25a8875babfc266867c9dc776a3ecb540ee0b3027250ccfc59af037f7a86534c0e1339ebf0d2a3e2466f599397ac30488d1f49b17b3018ba7c1f5dce32222f21997e6703d56a80bce48ca3970c97f15ae3f337dabe0ce630804dfbb6234a1d900725ae99c77349c7cc8a0295c142dbbbfc6877d3ec0a1eba25831fa03a202ab3cfbbd4c13dcbec270d0410b02601b80d9130084ed5c5ebc8882ea0e211e760f05d3a2496e8ad7ccb2f6315280efb00b2d3113288ab5f8b5f3deb7205434fd05d834bcfea3062f41baed06acbbb747aced3fc8aaae3116e75699800a0a4080cf3bb642045d4c48a6ad77eb50c09f93e19249c086a187c4b059d0734f92f13a3bd65f8965cdc902e34ca716e7ed19352b2ad0cd1ff23756ea52be58cf51734aa1d7c005575f0be275497bd04163032244fc2e6697c3f438551455067d01843e1ba5d3cd6aaa5e002aa3ebf57ec65334c89c34cfc2f9e86b96dc0d3c0e0c41f365fce4962e28f436f1b7dd1d70ec1b8e157c79198594631807fc5b142d983d7ea8bda2e927c7e8d74bd402052d7eed0b1fd7824e026c30e49506f5dc217e5ce4a424326cfa7af2694e20c0e694e04102e8b49de14f947e7823a5de895084e589fcf50ba02a7786a69b843104a1a10ec4a2724d2fae2a41042ff493f539b2c0743889d4b5ddf8823ece20379c7c31ccd3a5e4683091c03889560195d9d92c68c704a426675ad9fdbdcc583fdab534c3455c5ada471d3ca8f465315d1b39e653679d6e3089bd62355348161d1a2387485a511d7588db67b7952edcca1e5782be21fbd1d13f5311a5e50de59d1f8e7a430dd2664e87ebafe228b4fc50dc27ea21d7b7b90de3e1c3151794d5dcd2f17ac97bbd03eb2bb4d6d2ea72860cf66875ac9b004d7752fbceb6efd7f3b926cf50024dc9003e971bf9749813fa23fc9261e8c34ce9e79bf8a7162c8fc1a52bb008cfc8bbba8728430bb6db3d43ee9492e5c69ee24c513f90cfb387153830f99127679ea76898f635487c82a84008c4ddcc7001372a5201108d6e36c4491151b133329c28083926930ee9a4b994d44a3529bd99b93bc098a48749b8bf805ebca66b83566b2436e553452b43e14198a609f30e47b0e5b901f25d447b3f7e069878485b385ec8e55f0b523cb3c76f28b36ebde6bcf7ef8c57cf35fe421dab6307aea233e9c020b22a02a5e90176e6e725a78b0d85b72348b6419161684e035068c2bb0c09b2f5d9461ce1ea33dcfc897de3e57b2846b66a7eb6d87dbdaf77090c81b38849d2bea403de2a8e0786d83f791bb01391ee310b7c68ee220f054342b15d92c2e374a0a7184c1f9299763e906c326afe2fa405f27d47be3e2aa813cd69fc0c1bcc641140872a5d4196db40609313ecc1c8085c4b0df65a4a12d64f36f270e96137b1d2bd17562a9ed4ee4f125a444fa38b15976d11668a3f2d0fb6d94b67b3d15009bb5018ee3d3df03dbae7db052f3458dacfaba2e213e5129109709137e042b90913cbd30e6a70bb753c118e00266458efe8e0c10d365cec09e83e7f675756b3b3215a77a4d25d748aed06fc32f8906b35c6da6114e794d0990a50540d7a53521349dd7b3359279c13dae4aa4c75308f451606cbf53c21be7dc6eddcf665bfb2837c5642dff9d7d91268613e30b32a3dbc5e2e6b47ed45eb9c7a0045a93a32a6a4553211493f6085dcf8f9ca702368d32bbda871f8a4b29c52301db0e6d494d1848f27531afc5b5b7843b57f351caa7a6482acfa3b50aa8c72a4106d0f916acfcf4990e93e6782b5469073d4b00a9adfaf1a765760202f2f7a47f060ee63b208a8b67ccf35cb302b344e14e545218cc42fdb89a0814e76f9de20650f13ee67fe3bd7be0a967b808ce0f8b3d962a0ec91ae79b1f887c4e676f3c00a221ce749f9514fe21c5f708f16fd0b0dbcced8214097657862be86678be569ac13e3cc4379fd1194394ac0234c15dd415b5727a5b4c17451f739a6b3c04f95aa324ba33bd0177a3bc6b11a258c59e7024bbc3dc5b28028722676861671e85381154a6885371ebd84ed0c35b62159e86bd89440d64eac39e83282694155c87c4012e0ea89e66e7972272740de11a0811bc8a1a83de7ab4bc6a533d9d833ff1faa6cd55df89141992e480be7dda1ce658f966eaffcf8bbaeb253d2462c13ad0944bd353a61afcca21155eacb85053da036a75d59181a05f21027e228a166f3034a8334f1d35cdaca74fa83d16c40c44b528adfd0ae1ae63f31446ad6e0a832f3aacc2e04250c672dd951131637423b0b2fe645e9d1ad704bb3c31704fe2cce19465e78d294f4ef23caa4c635710342c757273da01b7d3ae92447d7ebc0ea56ec381f71af563cf034e6bc1269ea53769e0a0764f7915ac6c08907c419edce569c5f0e5fcb40757f9d22f4a8aae23317dcd6414b21ff7c29a268c1d76c56b59b8ab7ea50f03ee1009f3eba53d3e11a255ca26c11e06caff4b3188d25e33eb21ab38ddfc11c8ca85fe5791148a483daf0b6b9508265a39e8e179b2084c4de499d7c0732df7646b534361bb9f4746c502335c268ad1c981ea4951bc8f244855fd92625834a9bafc0673d2637eb82e761661bfd83679b0478f115ec8e6d7cd4ba7de483be3e53ed11fc54409a3553dcd4b08cf8193882d51dee7528273a3243ee6d4b1bc3cadccac9284126f811d2f033c8bdcbd3d6b137f2bf4f0e29be28a971ed268f03d35e62a0773de442c3696b1e09e5e3394d87108e8625fba125ee2e51a7a85f25c4820d33769b4dad948c0bfbcb359ee34a6dcaea99c5a6b407c74db29e2fdee281866f8ffd12e725f73df4f61ded2849d15e3a9c05ac435730e83faa7141c75232e8a909042f9bd101a55c613ded7da971826d0ffd41a24e5469cf04e0714e3b998adee3bdd4102d15e4c3eeeb4284d6b4ebc8958b81ee9af9af3da8925d632f772da5f8c7253b5c7bdc692f1d7a9c9e4f67b888421a4712d49e843b3e42ee8082592f8f032e73822c06689d6fff4a843cef62585a1741621d0487d23fd90b144521908f3c0270a7cdeec4024f989dd150d6f3438e88b3f7a5c819af40a2be098999253862023151ebdc872e419f98dace0e76ae4493192f3b4e087202b5d3266f073b4f8bbf41b7d535d5e6020705ddd30f915ce78c8050a64c184226bf93c3ec8d8b0ae026734b2a802d413b53006d24d80ba4e7829f8998417cf606fa161e066008a6862e72cfa74efe55be8674a99409029b8fdced6c8f8aea84c7fd07655e86b3f566bcf771aed5fa18162f098e101ed8d0640d7b72a4b7c6a0de4d7fc7edddf78f62010ab1a19f0890c9c10a94fc11983bc44c143a2dee7e51de43d609383799b8395e22878b1605e9b9dc3f0d5279b9463e9fd6f5f2b73c2bb62c61033c8203436b07266e5b52f61c63529a80be87b9bd151918319a63c38089af684331ceacc08aad79586861a3dd39c894bf499c75300e71f37b8aa3ebd575b398d1d13dfd6e634e9c7eda8aa0c4fba4f21dc201710d61aba387a719a39e63f770ad90d1fcce0018a0d96a5a3177a84a08339e7115d4b1185d1bfcb1eacd82bee100c51c63734fc05ffb9699e073b3dac35f885f93a72d14baab08ea700bc025c5a1cf72ab8f99b99f5fb47103d6b1a82d86ecf89e64ef0044c033261e15b86bbf090ffa0a253df6cca0fe4075dcab6334ce586133af109978a27606c37c5074c44e6f3bec842183b6fdeeb4af970b9db335f631443926b61031be2559a09952552047a12ca8a4d5d48a1f65765677a93261f346921c935cc0542b31faca90e113bf2fb3e3bcb2fce30cb97f553cbd1c9237a4d6480eae8f132de54f8c33b85f456f8e0facf57493b712fdcaef292c8eb5567f0d383ca1a2abeaf56fafd0d088090edd4fb26e7fa0207fb03c05c3fb00ae2df58c54b638647cf21b6ef02217cb83bbbc82362d2e4542500bc1588700563a61f226135232a39844e7b0104739a2535a5a3b783e70b3006acf3bf1a9686ac75f6e2af6de374b2a399adba4cf0ad25e633784634ebea22ad3ccd0ed2b7319a0d44494498f789dc13b0ee07e95d15e91f71308a02b6c947491c9fd2ff1973622bffdcb1ec246fc2c701e9108b2259e359b9c9b1f7bc4954a340cb27c3b9ee079603feca15013b2008809bc96ed71f9243d5c10637b0729320dba6f09c505f6553244b39cceea296481a155567390d8448e8fb398d808b36ac0bc3d78b396724299abb27e92fb153889ef2e0f6db4cd9d672b87af9ae5d7bc7414f493737f1a699c588d6fc2908d8b18604e9a37d15e8bfef3050df21ccfa4a70b6f2656d62f717a391ae3de27c07120a3712ef01026d5612666fb15de203e90c192dfab65c77ce65201f1cc3625de490c7d2253d9ab7a7b5a13cd81f4c013058e1d2ff85d41b08671a81aa59292a66df5cc4f70b78363c656fa1ba8808f4be9570da94992677103c0390568813acfc70c4bb6eb58d3a7c8e46d45cf8d10481bca766aeb60ad3715351b42b566492f77f7ef491225b0f3dc220c56ce341cd82be4e786aec65d4cab81abfa6fd2b4239f115986473dddd14b7a1e6c052a0bf76dc79fb4c92496bbc476244ac91d7e91460c796ea8241f06c762e726fa072fdb07179832d39e37b14aee3d51de1cd0ff99603ff3b1a9a16a516fca19b7de8a883f73b3b91314d9fc4b84de45e0a894c9a382a79b65c9effbe3151870cb5c65dc0d038fd6127f643fd43ec533d8361ae3e0ca0b5f9d1b5149297447b6a812db9de51b94d95c924b46d29c93d5a20127d6e1d2534d899bd19e5816835e01c5cd7f01e0278554535f7215fc54a3fb6c15757b3f178d1fa50b0f08531c65fea8195bf8d0552034cac996ff8ad59c31f6a8873a0fd1f92c166a0550ddc376283fbb78cf01822c9a304d8b519a9730fdf058e3670bcb1a25cdc43513e41826cdb431b084a94713a19e65a3f5c7054192b47a430cca16edaceb5ca3ff69b7e8a0de27bd9802767bef135c6276ab35039136325cc9f601c4cb9d2ffc3618974b863f9dd40fa168597519aee1f8d6f427f03d0e2ec25bfffea39d09252f5751b5f5a0f0e160a4e67767a8ce1495028ef0b755ec914c8b7ab00d904d4d28a81ee1326d7b3cb52d16273e77bb3c1afc28b4248835f81f8be241bb5b3e2c5105f284c0da0b7ac24d2b6fb5963193cf99b8af601d04626d989fe0f3b1887fdb8383114e8e7cda770e16b20c62b33fd626a51fb74d233b17ec21d08a2f010f5bd41f18bce88b754125e6ff139abad2c08c059f2e79406326d62700a9da8d2d7673e42f07880e43bf84319e6ac74cf39f7e48b8593826780cc2a4ed20e389e3df4b0c0d6fd3c9b18ad2b271b4f9e620fcca152cb9bd2137255376cd3efab07b1159aae35ae066e1df466b01cb29dc4824ba865cc9fe0d268c5a7e52d97b65693215b244f3ce6f9ab2b33872f8162afac74ec3acb9fae550de179c7ce3e1e005b1444954262b012ee85981f44f4b26f7f6a74e5d884791c77e4af1894009da4bd7ee15ae13870c465a953b6ad2c4acf144bc9ca9028a5e78a085d4566454a06740a653010b6408fba1b24bec52ea1bfc0976faa2ec3481806d026ee0ee5137a6c624b6cf64fb7345ab90f5c466dcd5c4e630aeaa8e59efcb33d9c8b369cf08983d94799e8dcd44ccb4cab7877157cb0dfd9455cd4d707321efb4d0fcb376c229f6e5994aabae7e4b1a80c3c29a305e62affd4a14c1f109a862953f924b413d9e1256c5f3e8704c483cb92b92a832f33d2949ac9a69067b38fed433cd33345172f708484f2a106fdc22e7971026a59bddf900f33aeed3e0f21ba7d61c4b1412c78c911982264123c1410a51c34401be71ae56141b5fe3053f63cba098743c9f99947df70ed6f597beb54e9929321a93dedb3aa32691ac132bc49cba816c4662a87a56447d552c831faf3b29386078537ad17850d1f78defc6c21cb241cb01baa284a75b40ef7b8de061c72999a3cd3d49a8c6c79a29bf29445d3f196f831df2d844f7b40e0b1f05c0865c2b3dded0fd5010839b4cf99068eda27e16cf2501d1e1080dc106af4404f19164979fd575f9c48893fc01c1b12cc9b176e6ec03680e58ff8a7777cd558544905e17ef57297ef2c9bbe3a634a06ac14483b17530b4c0486fd0151e4985feeff420982fd29957037cc9920081ec1265c0b50dd53b76082cd679a5d2610908d963130ba3a02c26a68035aeafef27a88d072e268618049fd90c45c9cdf111954689b433967d85094a4be261143ae9a44bfa16ba3ce6255f470c5f819b102cc1ae1a4d810652279bbdae97dccb6e6b81a969205940c06eb451d28bb12c0a165f12512af9d7ba211fdfa4e7e806f1b079097fc20792f63eb6f34c9b30979687d2b1a227d46de925fa229c0689f111ebb108302f38e8ec5ee012b33ed7d32feceffc722abb9a0a9ec22a485c1a205e38806c6017d77b926eb7f2971ab9f44b079b676edcc6ce252fcfa51b236cd790baa405413e66e5c72741705bc2674206b9aa004357ce71874ead70d9512bb3072545a138a79430914355da8ec7636119654f9de0e905c0c5e5d67d22c1c8421cf9d695e619f44277a46ba3f2b54d5c53993355fa559c122068eccfdc2f610aef7c800851b7ee9c51eacf7f943131b6a4b974f6a9fbc21a85f386cfdd627badc57881e278813ab100d276312ae24b7d48fb61717339d42fd6bbf87d2580ddc77334b53d8cf65b4c5060e1262e846b46432fdbdc5dc449a4070bd5cf8c4ac1d1b4218f47964df4465230f25c8cf54c80297228d6b0eda2a9a36fb4b1391cb72d3356f4823f22343491ebc35570d0fd4f3830b4d441adb886db418768aff443d185c80d3d9fbadb5cdd03fe1447c3a867de6b341bd6c7c120d0166b1a6f7347f795f52aaf5273e6cd0616007159bc0935a2bbc0c6b6e8be400c581f31436d0c0ac803de55b7a0a1b3f2c68f8950271ebaee887e758fabdebb0d78384dad2c4937440fa810103e331c72c9bbbb42f2cc519b3b83e8ee83812039e340ccf23a53ad06942e30107fdb3f7cfb71da168cdf9484898e005aa92fe8bfe0df243ec92d792151d52ead5fc10c9daa3c6c4c0834b095a2458b3f1635c80fa55cc0c5b532cc0e00db4565ed330b7ef89aba3e634705b62da68252020241e769e99be36391f82466e92673552cf2412749e290904ab9851efa6f814b0bcc39c62535f4a72ce9f993dc882ab51516a44e405bff2ef65636ed8bd5091080a596ee205399e83e637cbc56af07d0ecbed4c0c8a0f2cfae91c90d6a12ab117584fbc4f44e4751d510c0aa0df09da42b0b957cd1a0830f3469c2d8d3c1dd2b5870b3f051d63b33f707359b9f6f0b2c56a4955872f651d4038c7b495189cdfd38221f0b528a39ab2b8c1c2e0a28fc9b46089822a0552bcced5d3e2c343d7c7f1ac8eb9540565144e4f891649144183e8b86a282e318129a0a28652ead76c6ac6344828805648ff5cf4367118f1eccd5d81d2ada8c2e011d02177b5d975a34e3b2a1705e4c9e060076b350c9e9ba7401bad57aeed391fbe9437fa74ff946440918a49866cbb4bd9d8fe148c9c3716a937bf1b446c1a7326491c9deb8f9d4b6dbb61eb5d056e6abf76eda2178cc5bfd85c72e4fe71233e63b62ef5a3e9299a46cb8c0981cd82c8b2f4dfd65e59ccce54b8ccd43457007c601f20d64dccd28b46572495d7a8026d0100794400940e202085d639cec0d61e6f98a1f078dcd5ad77bdbb98b46aef7de92a6c84fca34889d50bedf1ea751db9803252e0c57c097bc4dd6617f4ce7311e5b7ce01033499f25eaf8bc85f1694766db53b4ec9886157634df4806b53afd40dedee22f4ae4bd3a44115c156e79e743cf08c12d12428cf37fba37facc673305beb4322bc0370e740c7a02436246fc9076a4a76f8f4dfb08c0f69077aba97d8a549c0721472ec2f5665ae4e83c88cfcd19789490c8af21ddb5722eb2ce21d957612857cadb6b2dee878da19a371e84440e8d4c5cc36f0c0a33d5c719a205bac5d8defdd693d62c9bc4e8160ca40b95e206408b1f918cc900cbffb8198cacb92e568747890c017206ca4370ada2b197ddf4e843c1438f5f7d4996b4bf4f4df24f3dc2849a0c021719fdd9996ae87fc9560a817d0adae360fdeba1d81231fd4047c907982a30383b30ebcb3bf37f12096fcbf114a616faf4f83435040c1d017af3e8f5e5d8e11ff8787d5365e8f62bfd8301da3491964ebdf4e2badcb466bbf751e7204c60ba918ba533387ad5526e86738c941c427ef4fb5e7cfb401cc90107987cd1dcff077903cea60d642bdcbc0b268263ab58f386dbf5ad1abff328ba5996cac8bd38b6aa81387e3b285031f5826fb2b6b2a98e86fbd581040548af97425eb45fedacb3c08216994044a33c9ecea129838ae57a025ef2049748f284ba9fb039c9a9382735c213915b6edc3c96364cabe5b0fbecc5710dae181f357157fce3e2dbc10a0359bd7e04d0983416c3aa01e85b88b887d8687eb7d4d198ba711896017c0799ee2c83486b32458cf33dc9828351c5264975e9978f12cbb0999c3118da6bf590dc27aabb6ab1ed721948f653204b5b05713095fbd531d241ac7df16a358d1bcab85519e6035d1f846cc005f224d53aa4107a087d596bf291df8753143944737eb8ca258ba4d20910ef20d6bd2197e8bd1d164e1de2d7c50b0b0ce108c9ca64ac98c59d1943685e766923946943397a3ca4314ef70531fdacdb8afe89930e8be54d2481f924ae2709131026143b2143b1c1bee00a2deca44ff42b1db5030ccc4742ca6519cc881e21f699379a0d5f14aa480003dc3c0923da3556036e53a3e93b1664e4cc906cf0c4c43a45adf2cb717a94ed4337df6aed8e270c689cc32cc65aba6c2f228280918fa2f108f6b36af0c986fce05fd3075657fbbd174c9b0ce58bc75224e26990561d44ffabd839e594c9bc8c5a340d0ed96d0ecc61781cc164e3891e6cc2cea1b191b387c6600e7129a2a16e0c3636076ae8179fef1b1c7e46912f66126ed8bea43980f53dd24b98caccb3ea4d79e63e40c57b4b0dbdb20a30394a53fba358e212dc39ccfd2dd96653026e4b99c05c99a7278562746c3e5c90c104673a1778df455a66ed6a9b6da230b98509f901933916055b4b09612e6e01c58e5e5d25fa4ffc8ffd23f7bb54af56d688d2fd07f48551959c11ca7e64fa0cd2231af9a1610660e5a8af0bb68699c01aa534626841a7ffe462ced74cbd5f77fa2786665459c4be725045fb2479440685031d7f45011c5148bed003bc37e891eb1bab3c4d6a980e4324bed881d73c35e2462117bdbcdd0620878a164c5bab0bdb779bfe2e818f3d540d229f70990867da3792cb12940b1062841ad1d0b0bf5958d66a51fa645f54aa0fbe57e1480b9214aa4924724318665d0b379537c5768b2eb076ebc89610b2a8a37609e9fd5933b0076f38a8f602d536e94a96f1f87c09fb2053f989b1dcbe706a920301cab438b7c72907a9a0082d36bcf80d85f68314f54f91331e51d89cfdf5b1aff4edd1019f7164f2460c3ec16f5bfe6487752a613857f53a2aae4b28f89bfd16b568066d5242005c5df99f39b9a0c7effd2e6ac27eec6849cb69ae726402a882e6379cfa761fcb2e12437aa281c6f50ef326919db05cee753479f6e7561366c542262b185b6a0d5b149a751f85aa321a14fea16776321d598df5b40c471def14468c4532542152f0d37ea6c9fda0c4d399697ea740dd94fbad975675fa44403853865df013fd26452699b8fca2174c5d089ebac8281754eaaba475f3d8f3f42ef9789f076e3d29eca7ef30385ec617bbff7d8f4d6ddf05845829986bafb72bef278be1c644cfd0db6fd9b9f3d18ed16aef3855c3bc35c8362e4529d625cab141b7402f0ac141a4d4a81605930b813807183aa51c0981bf92662bd83fd6fb99911f1acdb9485160b00735f8ee7769557b668ea3b53fdb260d6ea68195fcfa2a6b5b7996d5fe856335bf8d8455e6cc00cfa929f445d59b449b5a38d27a5f389133163ff7fcfc70771b79dcc07c002666c63173a2fd1fe233f7b71d1ac80f47896017f1c777f341d9908b8aca2bf61ebd56f4f19688e246c93148c5dd00e20be2530713d3ef74cb34c63ad4bf8ba5824d7602edbb227bf59c73cb36fee3114d736f7410fe39a5cf3e02261178152f12219e4e05705ed14c4a57f5f5010e2501640a0f959c8e1a1a47b857ee91ef7a6bf1f9ec63011ba1882b464c89861aef7925b5fad7dcfce7d20498deadfe2591d4a8f24438bf495720d1973f321d144a3313e1f22ce484188292d4c58200674ab0bfa549003d2834efd22b8cb6a4233846505dfbff877d7df63bc5593119d99371bd8d8a094c5879a93f64acd2c28596e7c9e6cc161e9c9d978afacc5cba940f78eb095d38dddc5498a0a869b9726e08820c2d1c629651ddc9b80e0654d992c4bfc420367eb79b7770bb0157e2d41c76885a85170d6f487069038488b51665de1fcc463663340c6722a55e96e3d5c1b0dc1cb1a993caa1b42df3719c53b828ee54a96766f5c53063864765143577bb428bc1e2e8d44f0ba466e87c2842ced83fbfc5e80c6b052c7e0479f92aa501bb3601b427471d449595f1a073c3a5bac877be313785d2bb787744248fb4427bf07a061583126eb4cb25a15630ad7d00240436339e2f8e6b499ac837b23772dd766724e0dcf9eb46632ef3d681c578a403babebba450cbb2c60c8a4db191dbebb2261ad346dd7b8b331d101f9dd048dd14a30228ec4987d70f68dba8e6b1135179f9369beecea0f47c64fdf09c19409f7131cbdd455d0e3b5503c3fb18f48087a5a3601ef9ea0810fb90e14cae0b50a927fc6b4f20cb47136b063fc1e6e479877a60aece116e4553d19f7c6ddb19c4541aaf7553e52412e8854c295a11da78666f545619d1d77d751fd798d7c97d71fdb940ca8378c8912e7c9a57f0bbab79d8db63cbdfd1a04c26e3fcdc17429cbdaf4d099ec19c871cf1e4b07f46b9fb13a961e391c02e51d62c8b7cb6d7f5f3d0c961cb8968fb2784b719beb8da01ac590c7d5588d62619da50d8bebef22cb23a3ae0f65312abe9c8f5778570d0bbd2318a7e8100654f8686b5e1bcddb005e33637669c330b513fbd834d286393129e49295a8c11210a2c7accd1b8f25f583c38e54ea128542e5a65b00b48295d7a28a55b2016d6273b41cad2592a77801b86d6a85de5b8eb515eccab64444714e71289386999a943b1eda6805b530da328b9893b6ae0ef7a8a71d6828990e86cc59c01081ace9bee530e7d4e8cdd42acfe5aa456f1e1517f7965c1c4c68ef20d724b81e6ead753318b9e922908a11e44ba97fb7aa1ea722d0d28d5e7bf431df3bdf38ca22cf5f6db46f757cad655ea0d39a1bf2a8c4214135a666df1e6d869c298349c8ab1b40eeeb8f7dc2b1b9500fe28992af92e7fd2e4b6a9991072789f1ba75450b1c24be3563a1b7d3fff935cd12a29f7e9f0d05092824d657689b09229a6cb7622812cdd8d6a2ebf8f2eb5734d7e1c80e4a3c0146db36eb87b916e3aa9c7b9e680d4bd048e01fcf366e02b94a600f1318faa267e878ada0d724be87e92bd0035042f656638fe45ecca489cdf32ea6a64d2ff397d39f1c7829b6f20690d8c35c7a6b2b24d0687af63081454f082471ef55f480047a95be36ad8656b0f70a7a94ec5542af470f65d758bf8cbd58e613e9b1cfd6010e7e562732b94f092025aa6702b3b1c0bce806ceb55bc6d155f32946e1ecd9f66dd59414eb420ff066e2f63935ca7c8459e76175065dbe18b07d2eb0afe11169f39cf28adde70c656c2f1c772c094583d464af9983ccfd4168dd67d11d0914ed3e62f541efe90627b5a71a51583baab6ea6cf3d59511e07dda7325641b12bcddacd95347f8eb993e5dfc6e33f5d46cacea898b7e2f3e17e48fcb7ab50c99c9fb893edb00b42ed7b53fac5d719cac4fb1f05b6df67e90614f9801a45ddaf8e6ed6e21d40c7baeda87fbba0c56e7340c5c8774e5cbb027f5937671151d954b0b0fd88c57e40098e27a4a3a71989c903e0867d87344bcc0a4d81870f42762c211889eb1c81021e24d8f83d6b28f726adc694c0691d4508a9f176962293f33cbaa6a06d1f749badc63771223d41580b7d8c1b20cbc05cb97e9e397466ef0977af0d523a7129e4afb2039904f2b1ab50765bad2dc24869c315db3594a8abb041ff341d8ee2671b4e1931fa0d78cfdf01718aaf0c780b98df91b8ded5ba73a13fb23d91b501dc13eabab800883d4b08ac83a4b6b1d1356c450c3274597780aa7395c56797e434c5c9b49c10a15460e7a291c138004b39bf659ab9266fdd910a345fd7f19412292dc3ed3099458f093c857f2297a22878a2a9cc36686a6649cad48ed77c97cf600a947a7980691e284488b3b632ad625ef547e2c3ca0b7cc37352ad24f78efd83dab4deb6bd4836db5e44f545ff77f5dc16591964358f7204896895395c36f349e245a8fbf485b003bcc8d47730924fb4966e726617b867fabc304797518bcd8a7182d2754252b255982e287e60f4c757ba99d020a743fcaace752c9409ced5266bb89c6b60cfaacc9fa75361f677a232bec74a28a3e0aba25b6b8a8edcb8e7e290f94d834cd4e5a9991aad3ffc741b80c23b58d65d7a39012631f692cba3c9675eeaa49e7a0add0c5c08a9b9c37fecf5e95783dd8cfd576abcf586856ac053dd717c514b959bc748421d8d407a46b030eeacbe4dce12d0f49dde04faf2caa7eef6c58c7dc62a7186a60c59ada310bcc09068c5075354f88e9e2141ce74de466201663c43ebcd7bfaed2a22cec67e7eb8be55fcde240896c58c1da614faf3cbca328243cfb1565af9c20c60f766f91e98439c1b5bdccbc40f16b0b2864dd2d6c4a6d121329d7cad65919a12c75a39d7b3417b9dba360fa3e94a3420c3899387bcd5a8bd958b4e6a2012c3f793a07d72b22610fb7b931bb017cc5a3a3a11ba952e29ff0e58afc19853ed15b1ca3e8f07f5cfd43a51ca7a9d2865a8a4a5b732b3f6f9131151892a3a56c7064b23c09f0f0c3131f45958e39a29aa2cb2dd1f5a5764d80e8d28fe76f2800eef5f43b9ad87d29423cc6fce3b4d80040253bffdd87ffe55a0217312147965d1e9982b465c31be81c32796f04ab9857e06140470d8f669f312a0b9fdf71251abdb6c51aa4def3e402ebfb809f1bf246651b3e3bfa555f3318589e6d5e9921fa8c967a1e0f2f662d4f121cd2deee62f511dbfc41049bbfe1cf75950fed989dac5e2d926fcf507da855bbbf38435697f6c167d3446bccbcd663ec18e355e018a9444d4a22f670a15fd7aa08954a146825b0fc9448e803b65475f06081d3e0d5ee35c29b95c3055dcdc5ece25acaca2a59ee52dc9ddfd22aa00dc81d45b92e9cb816a5bba4cb41d13508e9e2c220f2a170a9b8b46d953f48a0071a1f1af06ca991d7a4e656340566d7da1123bd0181ee643485e56356102f7558d81705082276205e2ef102559474acba29c35b4c8f4d55f16305015c3a8a59bdef11c0a9168a659fae6b42794a96701a2b6a845dca0aa142659ca2ce1e86c36b3bf29da6b9bccdd3c3feebed10a01a8b4eef5c0db07720c5d944b3f3f195a98e7a2ea91265e825400b2aca234956c08eb1913d7af2f264f08380cb61c952c62bbc0edefe697b987f1fd57b43996ae83901458bfbbf470155fae318ebf23962b015d6775819d3b519a8328b525e83a9f2c0425794b5040904ae7265323e3c6696ee5a1dbf7a5dcbccad40ec6f9d1fc254eccf0968b4b0a3018a52853a38e3d42308206abbf4111f0c421586e1290e94403c4b5bb2b9b45585a45c2b75c471842f4bd6afa73c0f79dd5811a971444c88f0fd24e5434a1d779e0f3a3b6cb6ff742d53dfd9636d37828ebb5d875944a0d16b31a2f7832a14466bf307f4bd3366073330d7916fc4a103ca9d5ce606a3a2505789cc78e63a7dc10895aa53f47bd0e8263ffaa39a1052945eefe81ef474cb4ffd214d64a4160da5c43b09e6b4cf54d9d89929e9da76dcc35b6bfa00b61b4c815255806e0f0a50365ac91fbe77ca986abd12d2d0f85b4b33eb41110a5d9dd840e0cfda20cab6ee62a82641a5d47795c9f4833e9488b74eaed9f8eaa101bbed67a8672701d0a2e4dbbe67f6410dcaf8a1253ce7d9dcb0a6470318487b4aa7669f1dec280b5f090e13b911ccfd08cb57ea802215b87f7c605a16feae3cd507d95197afd4966088105c44d25553dd5dea00cf4930c3c85e20577b270b717f77f0f06a12b3ea22997d28f3505ed77c03e7eb2945ca77c07ae53fbc73885711bcf5ef92bf26db071ce34917bba36e491d357307d3c5324d7568c734b852af42fd569b763a13e00146a4c3d13920ba981d104a0ee74575eae16f57b6b60e28b2c9079e1b3f4c1b2c2a4c75740e6ae47b11282746d4781508985683054b139ad1ae5c05730cccb40d163b2a593e2b561f1234ac45896c12ff3fb3595847d60da4025fd1ef680882f7514d08627296b4ef943f433ae67d188706a8b71e501650e358f2fb4f975b8b106ba5de4fe1e049d545ed8941910101d07b3e886af0f493d91ca2022818bb6c0baf4c6d7513dee7e66c33a13bd66973aa69e846ac3fe72e3d8df12faf19a804d05b41774d6b4f52cf6866087f81c603507aad24dc147342dcdd818610d410de9351f5f1a8b38b7da63a530286ada80795bdf00e49184363d617679c37668d1c8a12f0e00ba7466e3cfb326907ebedd767459589ab7ddd7f9c8a59796437b8329e40225f70b6df13a3261f768a39f6f9571dd8b4b6df4bb5039b903ac214d20a1abfe69c324f67eed39c3753bc948475e04d7a27a15cf2a48f59bbd521b0d058afda5102914a63c55a8b44e329dda3227da0ffe252640d327e30d25b62773b8616062363d59a26cb3193494858ddbc89471e21eef9caeb5c9ab844223e5a89703165350f3b21505ad79ad09a304afc1fb5329de49c13e865727be49c3de54ccdc905c0a9b1ec19abe634cf4d21590bca40a01751b4c5e508589a0c4290e58d371fd32239a4ac41b1f1dc1b14241a21ca26e13bd1f89a193e2e2b06565ee75f7209d3bda5d26c1df98f81acf849954bc6f55cdae38a30c3283c6583acd24397636b460b0847e7bce99943177788fc3fe1bf53c163194c92716c3bf9f17036183d01208fd106d361ac08d10391f34114fc2b8d80058748496b58c2a6d497354864dcb81ca4631aa65729cf8f6db5043f225c98c5eea672d4ad51cf632d84127ec9bead032a774c2865b9fb3385cc03f113f0dc457050cb02493c1fbea785c8c8f16d418ed75e088be8f7313e68bc1b88c4a35fc39e503797d14803a01ac9d37870e952a90dc4522f63576a015844a99cf74741704e8749d945229cb357dd4e3ef3878a68f46a6bf51ca529d77c19971ea94d7e9d1fab14c031402cabf07aca65ea57b9d59b91acf91d7f18b7685781fc6238a626b731d13237d63666773955a1dd41571f4276ced6142beb74bcc15c57a0615c0b3b3e7ef3b3edc511d9da98836dc086b8e3077e2306ce37c8d3f8b8ce369a4f4505d2500557a1013ff431282ea858725fe1fa6f3eed49d52db8e72bd58bb16221c24957ce2c1b550d52647ed0f758d69dbcfd02c64b559924ef31bb34459dab6a42bebdaad3d1cea54d94725478f955493f53a9709e2a411c4ad2498c073cb14a426d76c3aad6f08459e22a856df1b6205ed613739d44059f9218c36b765c5991819811bea11aaef1ba95d879432f929d7b03762d106f5bbf9c4abab2c18d73ce8ac87fd40d7121b844a4d72ed2bcb2230013bdff42aa1fbba7c887407d2fd44244c178b01cb4c262313e86ff6ff27c53dc071d51ef96ee50360eef0631e31da2e024ad96c80337fd1b2f27ab847942befa32b191491a51d8144c4b86b324ac121275796827685d954382f662f95b39c0da7643b31396a6b9cb7181f232ad9e7283f7b24ca139cd3e35c4da865ba8a74c39a66668f6a56e4c0a4b75fd688e246fba48d9bda0ce41ad79d5d03cc2491b6015628445b6b9b2cd0acdc96bb0bd9de7d72d2e4273089c6029134b6f77fa5213749105456ed713218c144743b1aabc43950e4e03c087dadafd67fcacc0cf6022f639bf0eef14988bccbd125fed4bcea1a62a096a69e462a4a940f5e993e0ff7c82cad95c020aa67ac5dabf5d2761cdd313d2e6f4847ad6edbd383850cb853ecae5db125600c7313726a34fb7fe4fe2d9aa3be282729847a4bfc79dcf1cde6f23c323a64d134c5ad92c252a2f552baf014cca39a8ff6faac19c9b48b798f1c9c73650a3647bbfd596537a1bd9ae8163e10d83ffaa127df605e00e3fdc62b79863fa8e393d4f4b4ac281facb1fa587dd55c54466880cd459801b8addf0f205300ff31a8d9c3df5ca4d55040153dd1a25d1e734b51d9f446731e5bb541825e3a19af5a23a87d6a8c0c3ae55bb411ee5a5ce96b47a6c7eb7197dc184468035a9fbab1d6283012e6255594b45e56bb6227462bb5c7c4090a37702027267200d81ecad1c8ea5f3c47d9982851f86096070398ef503a69070654dbb82693b46372924730d74900f2c7fcf3763e13fcf645055fae30ba3e815bbd5e4897ad6e45c309576a6faacddd2163e9d10d0df06d21606c2df12f61a2e2b3f7bd29018e395d0a692c3b8540d3b142b847a30f96d0f319e820dd1acc98580abe8509a7ed409e467e753bdb69dcbc9e684a09ee2732f10a541212d1efa1d4208c17a42ad623f4eaf6abfe45c901015f97332d2a878a68c60095a6481d6ba3c7123bab0b1822be7ba1685d0c2bc1fdc1cb2be451c5a99d7476c67b6b129a600933e6e8851388fc5b06027b80a9d8949d4855cc5d250f832c9e01f66592a91af40403e79a326eba3c3810799e438a1b66c1fed61248a2444155b69996134059f4deacd0dbac108de722c1d6e1a50d741584077a12834c0eb76f4111f8d3ae85540539485271157d410245e6bda8cf483809106603ecbc633b4ac827b5588932fef68a4270c285e4d9b1c19e73455e5edb3895c2e090db2b1699e79d0320b1eee0be02bce4983a72a593ec7fba45bf1e74138b4ee4e3dbce35d5c131267b14d4ca490e2ff92dcb3f50c0190b18e0d96616ae710d31a073970231913c546c04047b38d08b0d0b393aeffc750b8970582106c749d7c021a7fe096585d2eb4e0ca28f77b12910fdb030963f7b18405ff20be2ec76e75269fcce4e458c93dbec1500e22a8361e9cf10f22f91171f0c7ba7e215b139ae4640cb405e8bcb2cc4fd9f65d80f3b7004b4e1a52490389c5f19681eab8012b81dba2ade793a8904af18d5f9ba6163550ab0d80cb3751dface1561faf717a8c113cc14f465b3c6f08075fe6eb4b41b6c8911a3c93d93dbf8d5df54dcfe6a9cd17550461f3d0a49923390dec98db6381bb31f5bb58607db3c404b809dd7cc349a2efdb0fbb752853a98741a4f33f92f30f20386547c841b9b9381e06eb002a4e5194cb92934d6349c15385adb5549ea298b564828bdc708a9fb0c263927dedc4de47dd0ef8d6752d1e53b2971fd3623afeb66fee73a0d1a666238701d1e746e1f9bd95ca5c7520c8694370073dc483d12955f767d5bc58c23f1151611528eea82c3d50277b205835016e2229c8616ac8d37feee01e4aacce959a21998141429b9027b088545473e1be1a0fe004815882a1a929857eb63937c839166e9a444919242aa1ff9487882c58a4a1c6058c92745d9bf4ddecf8ea1b40897afaa492c2ae7b72d618fa083017ed2523a07cb2a89a229f458a57586a4c0d9ef04cbb16f0a12a93dec5d525a5d52375f683e9305fc04b6e1e384d9c9e48363ba8dcab8ace1a89c69264b8a4905c786498d1f69f12c21c3b73a93b86a9c9f1d21a5d8ab420f7b42788978dddbb6e8407de23172d0b23ca99f2ef25755f82bb70f3501aaf6cf775bb6c34eeec5b88a20d3a28e613aec85f4ab6313d5f2238087f1f1c93d49c4e59bdc82b50262c05a75210c4fa88fa28599baefa3e1f14dfb05f4479c0b0870f5ab9b8a988c0c88f230855f822fd6a3a70a65c225269b37f185517fcd9da1a6993ab9810ab2f4e70ed3f0fa63232102a5e7a36906332715a729c5a9c18788a9c8a3b32e5322ba792ad05d2322b5efbc3e3f96bdcb14d61fadd32f74dbd4812bf5783ce0cd8b0f85e771c0914ef60da064c66122910f435d5ccdabd24a8f74085a3a90e950ef68ef8624ad063fbdaed262c029615a386e0f85554186ed149a13dc90bae864006ddb845f234f082fb36edc80db1d91b665936fc066a375990b0ae338cd9109f7c255decefdc6eb43b34de4149a23574d678fac01c0d57a673148c84403aede4e6d36643100ab90edd499b7eda42cfb8c16703c89d55a6d3a74992cb307a50b941ec9dcfe46d5ac96e8962911173c7e35e0bdd7e20d70d9254386741c246e31959e4917177e0fe26e0ec3a358e4f4fdaeb7a5d80498b7aa52aa16025ea553cc0470e759fd98cb3b439a9d33dd009d0949e88f6d38f80305b7a2a125145bf07fd43233312018aeabc9afe923713c985deb577c8e8201a128b2ceaebaa86497de491d8f9216fa957faa946741226e34062a0e809ba2206077dddb422acb36aa7597f05072cee1d54abaf7bba47a123c6c261a3d4fadab4c51143329c565d4871dc4d1c97c436b2ee80405f434cc1044a377e06e9272f7f3b84c7494b984b1ef3d0dcc38b1e1ea43e1a699e89a88d66be2223b80fb2d9df2e757bd2f329c719aaa4ab0fad47e1cabb8b030928bda52ad56dc478b1c4e281ad1ed306ec1a1537d68de8c720e5793392521cc28a009ba2a1a1294794fa213ffeea27118ba1ce92cea9d382354d89446f168b88948685b58e90902b736795eb9eea5b8b25d12db3604dd1fa69be195cda27b84ed51f0b49e7171885346ae2e184aa195d97130e71c9dfee70ffd6af293a9ad378b2e8ac6d44f38ff886d8dbceb83884e4ac4f4e6414286f90d24c75f810c97a778bcaba8887336370d030debfb443b12eea31ef3e796229c26514044c9efc8ba215f8eaa150bb83561087e0cdec5721b339942ab971d5a6b9538186c4f042b10ddd6e0233d63b4841cae560ec74c0a0dca4de251c567412ae3453d166d2f637cdff9ec2701d9d0f48baa0a6081c61ac0ed60c16cc8261f03ca11b7424eccad0f36d3662ca6e64970c2d63935b1aac8bdafe4743932b45a4aa7428f277335cb4d043475364c6642f091add0716ed37c4addff9644cfe1d919794eeda1acff0c4d0f42af5fe923404dba1f46b5e0dbd1f660ed0f1ba294c5ce4634c2486915efc4c13c3a458a221a38f915550974609418ac9a1f11e0b7a8f607462528a890cf9df3c978f3d95037742976c97bab2a1a6588c8d45c43fc538441248c7dc11e9ba0738427f962048be456c594c112079772d6dec4057cf3f18ac90bd5d2b8f260c3e2080f095d2e2fb01618192ecf86537ecc58e0cee204cf6167a33de1e0f9b220e5022fc618ae4ef57f0ee72a85e031cb67b7d31edf2e26a1ef57f93074e6c09e69673ee13680ef9896dbe496878796357789b6601d030de44dc6b95cd70bcca1962f6f5caf7a871624795d3945ebf7243a7f961936d3636186e265ebc8635279979f28c4a56b2f0707aae1ee7469417557740f55590bd49100e4f87bdadf54d8bb51512f05db42e8dad3e8e5a9ad4e1805b997b65df625a29b77719a06fbb05de559e2c7e8cd4be8dda79b491088eb7f56d6d845dc9f6a90d5c036c5ba2e46d00c1bbba98e57a9d3d45c7534cd3b9e18a00d8201003b66daa1f454d77b062f68da5448c0489cca7465469370a891681d3bbd3ad259c4a8f62a78fd7f00dc9cd4c04c4273997ca352cea3ec7827491c1886111642a94568d1a7f4cbae9be3531ab83e137dce3787967cec7fd6f2980da7adbdb888b1dba7f85fc440b1f4529b497188701887e7d07b6ff641602fdcbb50c9c916cc41c980ff5ab23a5b7214f4d7a1bf82580ad0f9db7adf19823f702143da8e9cada1290ac467d72d4dc86eb860747039c2dca0a6ca2b5b5f32dd43eb9e04e6c59c1b03958690f1773036a9f5728de58e515ca786bc1aa76343ad8cb0ccdeb9aae9f7694779f7051d4e015bee13107e36fc7eec298573402e223220536e3a9929ce584211e1a967d8c6d84b8b72f5d86ff8506b79c4c44cc64378e04718b2b532e8f3a00bacc8ee4e25963dd914fea107f57720c7ca89c90c9f141e3fe9b7554a72f545a892bce72a50c4f3522cd0749e25428003420c6c1db6bd162dea40ad516a7a883a14bd1e4a1c63df147058e1105f902f557807f57d15302c4c681c9ad9c646173324c7ce25caf50a1c1e9e1bac27e5c39198602029a45b3ae0368b6514169789b92fea2e08111256f96b26996aa95b62709df74fdef130441ce0c9fa86d1e683daac925ad62ff126129c4053353173581fd5d87e62769652d689b7478502b080b0e06401cf5c43f588627d1fff42789c3a33235187cd4d743b69551e7591038c17dfc8eb22243dd3a1818c82c1228a548e0b075d3614c41f56c453c5a706068adc44063342c8ac7d167785a24ceeb68621a4f68c1a290ba1a0ded9055e08bcb822aab7e1a6e52a8eb57cb2b698e2f44bd9f1f819c7aa1fa9f7e436231b69c8d0fb9c972482f475a569c08d210d339fc8ab4fe80f265b9dc5932f6ecb40649884f8ac8c50cc0599470a883f30edfdfba9f11cbd98daa113a603fb7d70357b1390e055a9236f907eb026bdc6f4631dfe129aec14c9d69488ac03513c5112ca5d42acfa210dd2c0e5e83b52f09e4efddc01f53695599f7bad5b9a8fb2d193526322ffffe2c70e0fc5c5c3c6d32d9cf40f01d00d30264d5168125ada8efdc0107b6259a65447c1ae53838c04ac5bc0c1bb3b02ef0964460b470de4230da456c81c4731908762b42f50c3693c3e6d65e79566576a48cfa381eec267781052d65c2fd5863cf18fc6d9038691fbe2e721c06543cf4555b00df5dfdc7d790145c1c344a565207bb0d4f57cb0a7ba2681f235b412b595e6328ec29e03bb55055ce753876b94c03a9b706ccf4f6c9a57b4d402b97d1fa606f3b0636007bec6f06f967bdcbf8bb92db69f73129f0c5ce19bc350851f4d62a87f4982d77285f86cd134e0047b05ac6ad9ece32b5aaca6a687cbd9bedba659199c12ceaab28b37f5f3b0b353e2b816e2d6ad0ef0a0832ca5c10871128ede41e486fa168e84797c5040ce9aa0698a9e5c12b35b76c27d722ac20895b3654ba039f91411f9337552bffbe3ee1f2df241c49bf481a3c5c7010862af380342d6bc8d65dfdec77bd90d01ef8067144b21caa7b0bd2ff931a10657a79235136a2a8cffa60b1de1d21efa19ea20ac7e30be43fd1243cc5b156252564179245711a9fb34478368a031396d2850d8868ee483ffc945799b686d51574fcb32c9782d3c15d585623383bdfea9549c958cdca53698f6410677291d525cb6480141ff1de03cad8c502c05db84ccfff1327527f7f77687bb1a503657877e37e5e1ad4f492813c760584bc88ab8e35b83216bdda280b4f3ffd5b416afcaae531ecbf68d54a2f78b0829a87114a54a69129cfab053653c1d42c9f4a23e8f869f6040fd4987ad00037d756de340d73e9fee30a8113953d515120875c6e3444372d0885be939454cf9aa93c49e93f227d74e1b124b6aca84a2e84140ffaacc833616930a4c1593d98d41c5ff3ae8817c9cb442cac52245bc4f021deaa8b5d1077b94baa0edd7baaaae6d15df935c8ca4f9d779fa3506abea693be21ba1422d309ad08a5e2ed4db2d67065bea67ae907240eae4eb9f40c19383b6d6c0c93ada661eb5c34910a50fa273179032fe9f035a4d328a05edfe515e4b730577a4f30bee8578a6d050e3d346add7901f7eeb345a55fd035c785026cd8786799f82a0892e0aa3f6e3a432347998c1e3ae791e5e8a0e5bfd048f5a43f57f81ad31485fd06fc19ed73bac8d9b8847b5969e1bb4c6ad0ace222aa03b5b963361bef3ed2ac4d714665597e6aff8d87573b73407b8908998a410700cdcd594a367cc51d1f449ae9d8bb2d7c39a007d3fcac4f5cd0aac262e17316016c7ad334e4bc17bf9bf540e8ff1364060c8145f88259d9134a8f98113a0d1860bce19d92113a52526c714de46ac09682e8d7766cee86c7162c7cb2bc42e58f3cb484c159f84a721866c9a14807ae69332026b5e0d620072b9ced2e1fde8d74d5bc8625e17b58a8227f3109d632ba07375e0606a08665e770a0dc8cb29cf17b938d71d205d8f17546208e4f65ef771dcc2483df9b46dae4f81295d97181427e3fe83fe0f7c27662776514379b23bd99e949ec0f8b142fd913bfe77cbc2efa9ea5c6be1953fd39d0f54a8bef8920befef2df5f50f2bf2039566e2e35323ecc8ad068e50021210774c1e318937b527b147d9b97e755bda925000753f6ce6e93b28f9fac963cc9e06d602ebe9641ba01336aa80c71f8ace4b0bd40ab6bef7a9f0a9496d0933fb186e9e6fc30401992873c5828cb687d10585ddd06b47551968daadeb55af2746ccd3281410adb0664b4bc4330f3b3609f725b6cdabd610509907c5c9ecae789d322c9e3e29e0d43008642ad2325823ca198ae0e5de17458aa258893e898756dce7dbba463270cc3bbc4bac557cc32e32bb760655e297f716862250855a91cda9194d08a864b4632286b450ea107f3916532986e3c80bc6b23390846884880c03e644f1959d3a21a9c9dc48d4bc8dba4f2ed35f14db3258496870c5cdb198e20ce440c7a7dce589a945601aa2885a513dc8c1e535f795fb55fbc21ee18332989013a30f686c8693e41a97c1640a1b0990caa0050868610094e6d11a86617f63b3674eebabac1301a6e5abc2f972a86f91a9bac1da9774055ed3b81d86b98c51a7a3e4395648b6bfe09e57038cc8057c6ddde8b94aef282bfc4e28f8d306162123d266a00de11e43fa9cc6b830ff592a71520c4b522c517e380bb7ddefa6bbce4028b63ab0f687f2f9be0a9895950932a7dd29032a2ca5932c08a76ef5412173bbc30d1a9298d5700288cbf87cba32c6c682eb7e72c592e3b05063c98c36f00e55b989eb2f68c99de50b869a7700d459ec2c201ee5c4c2b4abc8d3894f9979585d5786cb2491d508d54dd89d8a9263d2075368dc22752266d9883397963f82f35ad74ed316d8dabc19e52a4fe3c2cfec96edc0200ac9977c3f2d2740d9bdd9f26c22bc2ce6f12955e295d9db57e698bbf2c7117b2a5a1f513b5ab0f21cd4dc05e3b7b8233a16d336b2898df1002ec4a660544bf356236781052df20350194c2c36d534b66f9d03792098c030c97e4c341437c26a79fc4ab8101cd2612b8baa5b9200bc571afd60d414628b48fd48b5d6a6106855f4832762df3c390465feaab675891becea58952aa44573a1dfe522362e4da160d6ed8680a226ff443bd57a49c5885813d91463e8f6bda4da1d2444c444c9fa34e6ac9a3067e2023841bee124b9c50a9a44ba96fbbd7d3a817510b96d1dbe75d30dc7b887f43704377cbbc1e37d2a0ec7c988ad222a2ef6f5ea672c354b8c9be09c40c264a218a3633b2e17b809aee1fd158a2671b56b51e0cb4ca0a7684fa8b521850777b1a03087ef332bb9fcf9b7f33957ce24c25dd22b939c34db9519a098fe09e051c39269ba4ba2991b3d6666f4fb2073244b98599a51efe25b8ad896f6807d592b6a9d9b2c7c3b29198e01062a72dd821f24cea2abc039a347ccc0176f7678bd0cb1959e4b8c631a0abadb2a2a4b74290f7918bc50a57e4f65fc9ea3dc0360c256dd77fc96b2105dc20c811c2db941b8ba4843765509eab35b783060604b50a3b9d44193296ab7dec2c3443d0ce68c7dec6a21c768a472766b1c68251bcf058c4bbd1a42da5c9a0615f3a8f1e37eedbde08513f6971bbfc644237ea6bbc1f4f99209fa73f573c53b6d060c8423383ab088a06d1c8826361fdb16ece5cee32351f56ca1335c7e1404d7ddb54309ce291fc7671a90c65ee5bee939c11db1a846f0907547089d7a62b8b636b800f5e1bbc063d02724a8cef5db3ddd3eb10134edc649def795114a78f46944b25625a12048ed57d64f03305d157218fc556f2b844cc5ace5165efcc33ce5e592503d47d69ce6bd749791a7384f9d080155a8191cde34b1d297628373ef93f4de3a1a06c5554babc8a1c32e7f587749c11544099034abfcca898270e8536aaca94610460b28d52cf01272f7ca12201f844a7091ad2b1285acf009cc3930a76c8b82e2e43176bfa394f13a82d70707cd51638b2bf960b01ca598f6d4d012b217ec9247621fa9d75894aa8e856f6ce9c30c9e1f8cc85dd383178853d84678ef5563a5d12d547213507a2c3bea3dccc5d377f5b630834abf1306c380445107f1af497c04fce0bff060f4049f7c585543dff5677c4099c7e71ae715b17828649d13686bc47614aaa1109cd9835f2c8a2c1cf2722e0718b54a427ecf15f07d65640f7c96ec3e43181e484b206212530c3ae1c62f37b36d25461f6d57a19662da52a25d41b31e2248c347eeb98e4cf3168b2bb52cecd132aa7c21e9e454ab12f920c1dd3a2e746ebcb08b5f881afc97b32664a3ca969e02e78aaedaab92c5308331e03bf7822a29db0f4be66b75da2ce863f9c48956818a9a316dea1736994a0a101383d8bfa21f6163150919dcbe41dc30dadd2f9b0ee4c0a32c6c2e53c7d4e0cddc11ed7f365a60a223113330303b44b4bcf9024e2f91949ac4dea18727b1ebe4ce3de1f67d263c5b292b1b8dac8494ec5aac36f0d0681a1b9ae59c7fabcb498b0aa76a082f072fcf12811dc01b8af83676a00df07a1407891b37ad365b3d171d0bbc8dab7a42aad54dedc173d5731a784143ff6ee6cfa449c65e14ac2081e2f0406ac43ee40dec8a596b27bd4de1dcf542f21f4c7de9f7a0874b792c253494f0e0a00e1efb8918a17d4b1e8d8f9af826fbb656a71ec637541cfdd779d9385758922366692355f5d1a7f8979d6eb2a75c0bf00481d7478852f35dc3740190511e76ae7ca208f6a15f5328276eab0aa57d0b4e7f1c4c2cf7a82286e36695797f300dd687fd4e782bce2070bd73fbf9ce9093351f4002ea07b0547a835a55ff11164701d66f349169eba69b0e09f1a7c76af54d591037d83f68e1d893d8e139be80423711fc59a2b1f6b746fff4518ffb5c0c359343c37998215d8f08a334869c25d4d8a15ece72699321071c46e807bf0b944140d509b7ea76a265e5c33d88126a5991a7d78e002876093963ee76faa6616a2273fcf77391364eca86fb586f020d0f3d917b27643ac42bfc5d8e5a0076c6e357f9e0dba994b3fb0cd3c59592c1f17065c32917a67dfd942022554a5756874e811761d77043c0909a204e775563f89efddfabba8a1403aee9f67244053d98f91898b7833746d99a572423d6cb1b1129b4ff87dab854f0628f5d9ef43c269359cf2a18b6ddaf91dd7aa940f9d9b154dec92921b3c6ceb6d09746fb4e8a13bcd1d929af3f892a38993ecae71778d01e49f0b5ed1f9ac3cef7324f88a384b0f2a578585f321b9e5d2eeb84b5d7995b0fbb513ea377334e3155901d209181b41942ed8df7d3fcb144adb5ac8d64f8c824da1e27076d1a2c908620726c77475243d50b6c1ab26d785df9f2677e649e1ecc1ce7a96954ddbd3b8e6c24a8db15bee7f788d31197ea3587daf3906d38e7deb16ebdff4574af0bc36efbcaa270d3b57bb0a424df436c4101846f342b4abe1ad8de337199f20c31d98e79bcb6e2534b7ac8c1759586b31008dabacb7a7fd56ca8b11431c836415ec9d4fe49593e34cd6e06d565d0be96736398728f77051e936839e335208b9c6d7434859e9f8cdda145ac08ede05b5a922ae182a78a47a282247d1dd24a894fc90023a9b9bc5e94d21c7df0d633915f73b14f36815acd92557902b81f90afa98af661fdd085c5372a41907d4cda9e150aa5262ab03cbc195ae64305909dc70865b7a842943cb7468c365d11ba97b10289d207c8815e6d929436449a99853327391aead437905588811d3b7d75fb4c74e4eb0ffce43f96155041e1bc204e899050ad03613a5bffc678a6dbad5139ef51448c7c648bd748aee17a4d7131557b0632f5f8292b471c69e139f5788f8785a2b12836d0d6076d068725557bc5bd174e153437603c96baa4f912a8b904879cfbc87d829cc759711d02fb3ce7d7b09a4a734ceba2cd85da9dc275665a7dd19b4aa94a5c03e38d3afa803ced96bdfa34eeaf691c236f80d16ea409b30d4550d36bd56daaeb28163be792e77dc5e53b151464c8f0d88e85e593c4b4637231b921043f01784dfbc3a0d394d0041582108ec8da12b683690591d368fa976aace2dd36196e24c29d0d0d0538cf5c77ed6ec1ec6e28c5009a73145e6193431f060515615b61429bbead88e009926abb5ce0dc1cb948d61ab06444904338e218b36999c3411d726ac556e65a8254a5d13b7bd11221844be4fc9e7dbb1ad137f9aaabad6d8c622d1b03fd2ce64445633752a2a8c30c23d7c56b7d1d9b1f94f53707d23074ba887f093ca9da867ba9486b6cb9c8eed2b5e69f7d670c006c53dc487b27d152b3aec4b5d1aeb8d1316d388db5c568ac4dbff707ef0521a14b8d55c09ca3189debb1d2b1f8fd7fb2577e2c4d65badef7a65441eeff65c9015eccc3265455728a7cf5ccfc89e9fc75fd5c4de38474551947f19af4e04ee2c2b6c48796983273a1b7994fd68d90e8c32b4296d477399c8fac724f24198d2fee581e7e36032a4859bfa6fb88bbcaa78526ef937460aac5e03fa71ba7e5c301616a9037a5025507ef2ea23665adbfe6908923c526b7e0e6535da22ed7718f614db3eeabfce623b152a8f6f51a79b0af0f81ae6ec38c6d27c3da1a139ebb12f89228c88856b17a9bd04015a5843f94d08d9bbc9967b4b99929401a607d907c4076088086b9b4c2bdc566baddbea0e82d4bf0ffcbabb6d6db7ee21d847708f2528128d461f88473bc02548514a7ca31f30fdaaeac72edeee207cdf488bf932f201d3b723c0a5df3c4a8f72c093d672ac05943ef5a7eeee943aa594babbbfc0bbf3b8c0f47d94a1554dad0c569ca1556ddbced02e3bde8b7f2c397106195a5593a10233d8fe19dc855a05da45a717f485788e6d8b44088e6c914b6cabab7e0d15309fdc116cd236e02ac0dddf52965b07abd3afe1e62e85e4fa958e73f678e7ea3acafdd218a05f2259a995ed8358a5c40a72a9c3e4f506120d483608f92489dd6b395b695a56f83817517289493dc06560fa05b05dd7756fefbd5cf7f7bfeedafadcb5b7b39cadaa92c6c9fdfe4e0bffa28aa9fa6fdda80f24022842e06244442e716dfdcbbd5305c5dd69e1606fe8a0a19476dfa150d7f47e214a2fbd1ffa20de7f546cfa7d437f437fdf47e86f2814facffb2f44bf344dd847434f81c0337428e4ddaee36c15b1e5018d149a8640ab5c033d41203f2c305934ed6aef41af431ee007f1c0af2215638040930e7a1f04f4bcf7017a1e08820bf81e656895ff0fd83ef7fd27ea68d2ff8686e6090d1936c6b59da27bf906e9082e80640620b3a65216d0216e984f9863f878fe2ffd027fe547faa10fb2f2dfdb770f9cd346e7cb02b3675809f2fdcadb0fbd8f95ff3ef433d3b1c7ca88ea8185e83c0c1c71c09fb0ef6dba14fd0672f28cf701779eaff254fcd133def218fde84ba816484f1f7500d2d3e7417a5aa294e2d28cb16cfa9e8a28fa163d49cc009d221adfa60dd026274daed872d2f46ec28f7b84784e576f113c9f7e024260888a48c1ee744649fe74f6b3f66af2698b780b6a4fa3e39b2108babe2f140a7d5fd27cafe38340bbbc226fba77ce2f3f7f2357ea66f66efedf9fbee7af82b4f484c66928ed502804e6649bf69edeefc423ee971a5f510736d1dc4953ab1d94eec8ed8ab4cac9c0f7bba7e188193cfe9ac1638ae189f99a73081fcc9afa0ece1ad7410ee814d995c88e64ce785f017f74c6973e88caaf7c90195f7afb313860be68109e0d5b08055979950f52fa196f1fd5df63e555be47e9673c0c2baff23e56461c243d54481fa5d18511a76b02073488c1544613bd81123d3d7affa0ff7d87441a27609abfef75b4ca0f40ff13fb47e20ffafdd4661ab640f3e83f1ab6909379803ffad1381a512d887ef4281ea21f8d2f73451a8d9ec7cca3f1cb9a7bf4a1cfc958fc9e7e2f1243a73cfea2c149ff7b31a6a15de0386bd899359512f1dcf3ffbe102d4279280fe5a9f90b91aec0776ca9a27056355777d4a10dbaaee338b7550a8d2cdfb889a15d1aa0b4092626cb5fd48926fde94fcfa0186aa0410ae67e6678c44783bfbe918686864728c7e003a631b8e0f4c70a1c04498fd07b1fe4d69d4c803c81749a641a76ffdd1ce02048827c7fbfbfefc3fb100a86fbdffbb8ff8d38487a7cefbd8f50134e282206fb469726e009f3121c61069b30245d48b45102642ac9f46d6878e86895d3a7d1d1af1a5a5a4a359fbac2fc6dda35d2f00473634b252203d3af34db1d16dfc7852a154363f939f46e32cd39c9d0f7d80afdcc27d6605b3ada45c723dc7168e8de346b42d9bd1fcb23badb420c70cdf443ef893f3ce441a7e40cd029dff398f91bdb1b4bfa1ca0d97b2e24dea7ddd8d2a46b81ed88af480998da276aaa1bf567ad94ab1dd785375d73ad56a95aa5e3851e31d07722a5a4a30d8d8d116ead88afa3652a12754b4451606ab34dbac2a44d5d93aa6afea45dfd940655a1221a129fc584af373ea1289c326d02f797150499d61b746a0e99be7fd14518b3c6366b46ef4fc8f47d8c4c7d4aa6ce844c7d0999521723d3dbcca3b7699148246a95e8673845a2d7e637579e783bae432af9d4d1ba147cb55f1376a9756b6bad96eb1cbc5fbd5a02696e863cdf5226a6f9d3da5aad73b7db759ad3dad92a5badad0e1ee1fbe60c65c955afb5863cdfa758968098f27ceecbdafd5c9bb25b6b476ae39d58860700c5b27ed9dffd57bbee6b37de12c40098ed0804ccf3c59203bbecaa5b0ebce14d67ceaf577ab9c5727a9e9d5b2c2f0dda63e215d75ac7daaab68b00bea152598e9b007ef9e73acbe456265ea825c084d2914e55b5dfe9e06b4f07cdf4ee9fe9b0556d5703bea1b21cd701fcf2cf75b6c5d4dd5ac2def5c0b5b9b199d9c73955b4e2d4ebcdb9aa4fbb31ff72806f9e40398811c2010ef304cae1c937060ee50994c31640395cb1c3a89a85aec0a33c81729805619c27500e3e59958311275f5437fe2587582ebf657130e7a7307dfaf4c962f2aead2c26effaf5f69eb3a67d4ef790404b1312309d7e8ba86e9d21dbad9f46e9ef1813727f0f699d767ddfdf44fa7ba75db59f06f9eb27a7091f173c6189308c3cf101d6fe8212e4ee723f35d2230619fa6768d74aeea72188dcfd1ec0b92c1d96d82181143818b20258bb0b723fede9c27573bfa8ca10430b31be18c10b6244602dc8fd364ce47e039832f002db11536460451753606dc40630f79020729d4043a460d283154037f8a025cfb9c2ccdfdff0e6a3b79b183914fa2ebc09f51491690fc9ad13a3b723b8a4b7d38dbe0d4764ef3d1aa55d657d2f0abd512851ca4aa7927ce774a9d472575b21e021dbe04a60e0f26ff4a68ac5622198c56230fa559cfefabf22dbafed9ab9898680cbcff46f47a338495f5547d5979f6f4ed2131d4dd194ce59c779c7952aa6b70a68a53cfee8be9f1b5108680ef4e8fe33b471b1945d9c403bcc728b3494f27c2134a7773efbf5736039b0926c364322491151cb0de80723d8ee1334d0e78925b3d91345f099d12008081bde9a40020a26ae48c2c3fda2882783e28b1d24a0f86249121d2f566357f8849124766bcf0d9c0645134320c3f280ade83b188b28f60684c5ed4682da039405122eba271d0da807273e403d34e1eb012ac108785057b329580006adf37c6430b00149b6439acd6444642e00633399144a84cae049215686acf6947145282b438cf945685034b1d337289c88d5a05862c909f27c7056b3a26fb320d86ab320dc389f991070c8f3473116d03c66c4909b0a7450e2062f1c824d797e0b913c5fa6d9145f0c99c934a60af2fcd2bcdc146fe04dadadb37a0f152328307deb95ae9d9ddd82bb5f3ab5eeb6549a61ab9b46eadd71959bd5ad7badfe396dffcab9dbea2d15757f6955fdea5e3d95128c80307ddade95f30a4eced6aed60af6c096ea4b7593833ba8d5625bbf7b7e59bbcce5cfb35f77f7ba312a7530080cba6010a6f3d6f75abb7b345bf585d76aed8de2de7b6f28079f10e0eddc72dd15e27a4dbcd00c85beae3a570252fa3e0b5e1a08da0fbbea1cc7518eda2b44d874d62a0a45ee391085c224dd3636527c5f2772397ffd39d8899e3f0b7662e77abb5027f25973bb02cc970c55c810f2429cf74eeae06f4d5f2f544d2dff122a012995461ab8f1bfd539376127b1705f7253c1a622edfe0b81dcfd7e865842e21c2bfd4876b40902d39fb58ae85cd9cf9409180a85ba06cb60c2840913264c2865e26f278db6d73ad36ae9e89086a65ace5ffe6fa8545cd752dbe561d5410d47adcfe9a0cfe9d5a7bbbbadd3badb5a337d4e6fd508a800434abb26156028e9176dd7a4e20b2bb2dbd9aca920982b7f777beb77efe3396eecd1ef8d38383934cc5e90e146b3a9d526adc77deffbfba43184e2dee37cf47b6310effb47141704c585df02c31107ff1cdffb0ef793bcf771df1b8384cad603c2079f84228d9e88225d118fa8cf8c5869c4a1b21e1f596c468f9d599ae8c54ada33a2b8cf81adc8ee88e2c61786d078d3e7c06afc84e12fa98fcad39b93fe8f43ffbeca884343a11187d2c61b0e0e9d39edf328bd599ad8224af416251a5130f4d7ef416b5c1c8142464f2c061bbdca23e981bffbaefbd1f7e87e14cb4e1abb1bbb47d6b1aec763b55bac763389766669882be27492bbb5be793f63a5efc7dff9eb1000a6f2a31107498fd197469cd28ff08f469cd2d8b81b71da07070a53e9d957b6cf37a2489f03ebd04f58684491c617864c27457666694dcb8ef24161dd535887a4c7e843281842ff7d8f90e871fc433e3d428f471c97b9fb8cc69e99d76aa5cbee1804490faff49e26c08278234af4e0877f479468f431e22041bd709f011376471f5c14132061882196c462309f39e98fa3d3b0ef85841e1c513e3ad40bde5ff7c9fe2e64e00923dd891d9460c2e4492c069bb06f0c222434c6c21b921dd0a00959f7a5d3b2ff8a12f08e21b33cabc8a5d76aacea38e96e67b944bd101be519d6989dd558f6b733bbc4d2fcb928fed3ad2dbb73b1ec9c4e764e96ddceb27346b2733ed9b99fecdc6c4950e69c5c8182272c04a3b9f45b8ee5090021ddad1154c324c512401039010f38d0927447945827497431250820f0c0032328c1ed6044f757ce91b46a403902143a2c11842b909044b8832c9cc2faa046173d70420721ccca10e23603bbc30e4c5031e4e3de6d0410bc1d42d03742348aab7246cc1bacd005e3075caa54a616ac6ad788934d61018913cc8e48c20f4020051254d619c132f103ca12426881830c7820850cae0e40589942092540a243061547b0c1c76ed13c981a891a0baac1141cec000832f8028b18f8f073854bf7678d773f2109b38a1a5a5f45a23470d5d90c42c187224c21031290412b0306a1eb33d332995a70cbce76a8b13222a28b984ac89125c10230c0c0a107260c41628bbccc7ef79a0828068204b12060f013021ed8915c9a5e757be7360b68a99a99b72a014fd8c5a6b781560374a53a0089004a7f09ce7eaa059dd5e79cd3a953a77449a6ddac083c9fb6d3e944a67fe7f8a3c3d3fb814cc55bbf1aba304b4b2746e2a6b1e4c69ba9297b1eb57b8ea5fd43bbec585e7b6ba6de97f443e3a49452dad9daa2acfa34bcb196526b29b53473dc674aa79db6565b3fcad99cb05f494f6899a179b92b56b1fcb8f73cb14559b6b3ef2de05aeb71dc5bcb79997274baa8abd77441ec2fd91251e7fb8fc952045cd63c7f8b911005985354066d17be22d305da03154bad128fe01efb8b1bdfc96efba26a171d9f76f7a52bbb37e1ee47f75f7aa3eae9abbaf9b3edfcf9d56bcf8d56cd1fa3847ff4f8fb5fea83ee71c0e61f21076cfef06778130affc51ff8492a6ffa9268fa9cc2bb7c795f28903e051105714e92c6bb88739235e6a39e45fc311ff5df6c6141892d2c2c2c335ac672b2fc0925b2fc6419af492c3f976a8ce5bd78652c4db9344922fe92887f8658cec7b8069bf1f8ad6ad34bfdfa2f690bcc8df89a4ca63a8642684e68af0af03b0f7852a05604db340b807630a26798a6351202cfbeb767940b9218b89fd2bfd786d2ea73ce49a977d581534aa93b7577a794fa53a74ee90bb8ee47cff3ba11974c5d770b1078761794de3a0ac225c889a2c0a32bae37da62d4035c964641a2282c773ba765e006622d17de74a696735cd775375a2a105f10dfefbb91e77fb3bbf77a5e28f48537fff2228c7b04c39b6adbbbdbbbadbfedecb5ee95ab2d5cfa40300c455654e6e4502a2e67804ec9a4cf5ca59a8430348c34e2a4ffe866bab5cbb3bfe9461ae9ec52132d814bd36df5e3afeebf99a098a2b4abc6dad543dac57a7f161d1659bb5aefcfb2d32e199e22ed2aa25d3246da15f3fe2c4758926817aac7d4939c8a1153b55450abfc5b62ca49abfc5962aa498ae6f203dc4f533401fc5804ea4ba9fce0f224abc94e3b7e7b8c65fff246ee87f95ebd445b93feb46ce3ffe7770f23928c38b9126b39650f46ff1b4dc1f4734181822459bbb8d5b3b0bce9e6afd548d69af417850cf06030630a084cdfc69727198988b9f25f892423b7c68aa9c43243e54442b5b8a09082ad236f4a63b688483d73e54fbbf1de6cd6543132b571e30d5103540062796d882526450d549558de0088a5d75410cb159eec9f124bd24ff67f11cb959eec0f00b14c6991fd47512c5976b2ff8b650aa2ad4c39c9fe2e628b587a0d25965ecb25592b2f0b4956924464ff1a62e9371aa22dfbafb8d4b27f89ac9145647f95934c0395ac69a0e6d2742b7198a2954e2bbbdbdd29af4ed753763f993e6957d9414eda65dfd6ae59bf24f564b74fea6997cdfea42266d99f442339e9570dd291764da0217ab27b33520fc9c82cfb09a2c8256949f61330c925a9497692adde121a2d28a85d6557cb334f49bb1c08cca537f39a649f5a78b3ecab9b4848e7d8a874c78a6fbe7c1d386b66a61fce1a064c98f5012e6fb6dfb5fd20c635256e95fddb2a9bed7553cbbfa8fcd599fcd58d2d32824d2a9adc7223db1618023b7320f784b3200882604eee7e2ef4365d83678fe3de34c90e193061fe330c6d1d43082541516cd497b9aa7594cd7931aeb5d61e6774bccc52f54612848c0a2354cc269d2c14a901174230e207082aa6f8747aa82fb3659e11a480f822f75393028cfc2c81032448e8e20757f20dd101228bdcb966618258ce9127900964f508ee438004083cc9d9b6448540619c0c30007b680b01f6b4734df09a836ab1b09c165caddbe92e0870497dae678417a285be243dfef3813e788884cf6bb6e571db9343ef76deed44b52568115b44bb8a5cb7a2910ea6d1cc0d1556bd40356bb4273bed9935f6fd65a86190de784eac4093fe54948104ca30575b609e769557555fe56fc56953f8f966bb38c0e51f134f007c3d5f5fcb8f6628f2d774967fb4edb694ce48554c2b07cd8c00b5566f9faf561e337bf4d6eadece556be79cd3154ed5ac3e57eeddf59c7d29cd7789fbe52de5d24443d0f2958b7f4588eec7254a99b04b1081942638dc0a032078235aabb3dc4bd7755dd73d7d3a84e3387b39ae765dd7d9207e3c28ea0a5010537c4732982750103d950302e8072279023921ab224fa01f8a64d25c810337cf1a0e98722d996679020141c9b5f4402c16cb35986a52c825187635775fbbff3ab1ac23f7271729d8c71ffe9d67eebe3e37fef0af7ec7f2be11ddb71746537069ea4fa508f69f43e052f572c39db3e30dce0041f3058686b9cdc9aa936f5d147fdd5719a2ff76230a705973ad95b3b5becd5f0de386f8aa0d8a53971812c6129890d00d33e8c1a1439810050f4cc8d442466b2d7268d2036b1b644c88c1be0ab6d84fcc800735d867c1163bd683430fece3c016e7942c663218bde5a0841becbb3ec4c007f679608b738a2634198cc688111d188e10308b1f62302414a7633b42d0603842ba16cc601e111d536e1187862146184b6042463411d822ad82074a7a60df086c7186f1441536d8874798d4448ed468b01c2aa4db4dd0fdfd1eab55486713d21a62c80f0c09ea0034273b136ab62a8455860f4660b37194e09d619040093db0ea220e92eeb9c711e23121fe41848c31fb762c09a19ff6d3feeeeeeeeeeeee6e1cf4bf3973cc0a223b4a5c266013b0e0c6c4d3324be446cc49ee1a973da806af653774b2e8ae4d99abb5044a88c0dfe275efdc20c04ec01c57c71ec82836c0e505e241f902612346ab11d6d63999989a62aab24ee9280126b5457bce169369daa6258c5d7e3fbcd5bb97f6f1c3d9b37acf39a927f21a86eda775bdf18aa41a0af148e5a78a2844402877dd83ffcd2ebca1ffa2fabe8dc055c812afac658b3ad1fa4972c12492fc805f60faf32529c1dcddeb3d4d4257c8746c23702bb772d724497eb818f090e0a7bc798ec692e6127cd257efc3bf57349634444028df90c70d6f385c6a95bf29f4e10d47b92c0ac59212c916142ba5f4ade805a6449cea70bdefec87e1023e310c6f3c17aec8e5ce8e28d7034c05a64bf2fcd9edddfdc4d5d55adb4d96a6dd5ec7ee2faad7cad95a395b6bf531878fb3f6b9aed556f746f2957372d6ba6ff1dd4984afa35d296d253e0f0aa695560ac637db45bbbb85744e6dfa840e7ca803d83c9fcb73a473552715b9fc8db8fc4d6af39c739c5ccea914e79bb366d61c4ba90b3e1e33cf39e79c13680456985af544707fb24e70d70b7e5796727322edfe8a654ebe2038a27884ff037c7ff0fdc3b79f93a9588235e4d07f6248bf9c1c128180d91ba90ef4d6596fe7c009efb9ef4bcfe33c8fbba1e7aabbbbcf27d37598f3dde7fc2b76f33bfac4ddddbd4eb74c8c9a8cb2681b44518cb4f8685a453fbc99e30f94c82dc2e88726598cb018fd204514457884ef1bfd30d262a4c58836d2e2f230c262449b5448b18218ccd61e513dfaef1348f003ebff969d618e5404fcb9c4f9099c04af00cf6f317402d34a97409282270eb6dcf6e98f6618e5ef24a54da7982d99cd327d03f48bd226fd4d3f6c62d6aa0d9ffd46f5b07f41d2f44183c0a603eda024cf9087ffe046d401722320380a8e02a3627961eeb3f6d08bf952ae6ed9df3ec1250dcafea455cefd87654efa9f3249c6834b52cf9c1e66e07be23625d7d04f73870830e51e493d73d52ee33af1c8c8e0b031c02c012e2c89a9332d96141997cce3a0a11173b45aaf57cdfb7f35e2ccbfc499636a4c8d38f38b469c5945e5593c84819e644bc0a54b2da6c6d499168bd562b172b4ea4c4c4a462419211d79f9d2a546836266646aeb63aa8c58b6c69866b5582d1c2e19968b25c362c9e0687dff420f1a04826266aa0539d1e6af93cca5e6a28991f9ca7ad789e72493f92e5932ef4af180ce578a36499f00f8390190a291ac6f962d0525152525c535a3828e0a4454d811a388524428e24df442b4a164a8408a960a2279c85a090839c3b4cdc4e480d22e1cadd7fbf330e008b85f6439c94e474eb2d3cec9e7f4739a9d949cace81749762ae224fb9f7a4c3793946a0baa273a2a03b717e2ad5d5162de5f9432c6469d76a1627ee61cef3f126957cb76da55a4a75d38de7f2c623cd22e54eb35e2089a11a9cd4523a3c2734e52b5d1142cfa8f5e3a5dd48537a9a054939493148dacb9b4ac288ce9e634d3cda595b02a2b0aaa6d0c69978c0e111b3bed92b1c163a34811ed42d5f1d4733a1539f19c764e2e647992a1a80e254292ab15287487ca604493cdc900d8b0640fe953a326dab2e9e77489b6a9f237919fa2a582fc356143607e557fc71bf117aa8e281858f81def8385df310641d263f53b3e08ccb330fad8f12c3c0b6390d5ef183b23301a8485dff13ce274d2fb0197291a0b23cac78e877998df31763d4ec2882e35279b559bc5ea8fa2c0075056e4c87823428755dba5468570a9f90b660533ae6618c36aec8266ed3a65fa5fb792494642dc174a35a932c0291aa5618a667ff0ea61fe043132acff5a64bd0b172d1df332a2cb93b2b66246971a586b95cb935639abd6ca1a5d6a2eb656b9ed018b38739974016da110cf4e11db6c34faf9a9f96bf5f43d8fc895a568fe226b385dcd49fa302b91fa38590b6fc8da48b2c09c1a719224c9efb1bc55277f23d0658b1dbffaf2ee1861305e8db3bf49b2eff17f86379d13fcf7cb14cd5f2c3ccc97379f4ecf82986ad2a4cf2651789811852fafca8c9c3c5d50601acf12d4ae6eb175f2081495dc884b46e2287c417479e26253fd0c5d6a270a5bf171d205f0a54bad24495f9224591e4d59324f1965830054402cc4c80718557ab2a6123e160297c21646f9246b5514291d0de503e677fc8e31088aa5f62c303f61abb1a3754e6096209b8fd5c38ca6db938cc2e3ef1768b8dfa58e544e2c52f6276b79e545ab2ae9711d5982589cf48bc656b6769da2acbc68172ad62acf55d6ae51f6afe249d62a16607ec7d3a834768c2e35afa24fe15d6aa43a7ea5d797c29b155eaf1ca2ad569aaf6fd3a39e1a299a2c9335951f7f996e4ebae924136d346fd3b6099eb955c63c8be64b201ded6389a666028ef9cea5e9c6123bb7c4b23ecdc7d4114847cb35ef3f67cd74bd5c2b7c3f385d39be43b956d40e98f5df7591b5ab66ff0f05024c236b386056f8295af8e549b61a5334940eb8146dafaf2290aa9373bc4dbb78d12e54eb499e71a9b98b4d34d26a92453a9ee6a6009734333333332927a9a0144db4a5682f1c3968441d22298956f9d788a49f56b9fc6b851c2b2be10d4d8e1747dac89b9334723c8df08626c7b3c4b2e673fc0c6f5e6fd3a3293870fc688ceed6d79a61cdd46e36623322796b95abcebc3f09858cd2ae19f2898c487a31339236991609858c42d66cb84cd16c3c46ccf138c49a9ad7db740e9a170d1a34421e3493624452123f4eac9cec0d78f5304f3f4573b7f136dec697a64c73b24678e39a79168eb7e98fc6cccff0c6d55debf8a35fe63fea3232dfa3e916c3fa94173131a21a14276258d5742300eb6dba8aa61bab767777d7feebc2f25f0567be431c2f239633acb1fc4014d311b068aba4fa658ad68af99417ed2ac95a6d8d2d746ea568a9262bd93f754b45f15721a6c2107f1588f40b4c39a965ff54ad15534999ad5da568cb4fda4580ec4f7ad1ae0985d87f9289362930fd9ec1f1363de3c26162d55a59312ca01d0246b15ca4b4cb5528d6d84267964bcde54911d9dfc586420c051d7f0db13e35c8fe28c8dab5d3af21a32553bac8fe2814e95795b978d1aeb964ca4ef677b9b1aaab5cd9b2bf2fc9ee54645fd9da55a66807d06127a85d1447cb4c8b4c4b4b8b098cf919deb4a8073919f3a22d26e671c4fc4ccccbc4c4c4bcc7bc490a9098f78f69c5d4004fa71d56ad56a7b2582c11035527f7f8a33eeb3f96782a820a6f5a1fc3faeeee66354e0f6b2c717862c41248b543f0572a88c4e3af54edc433c39999af228e77e1028fc6e8fe6244d7b70c4b86f5acb7e9d10da76aa99b8c98aab5ca534d82524f52b676c97c931b993115d41267ae9d63c49959a24b4cd952b428987e49ae7e5a5fbe29b37eba6873d21ff541646d358a367fd56f8de547c9f563c6d274cbf559e3ac38c6539176b1c67266045275aaabf5fe279e76d527154132d2aa23adc23cb8f4b0bf503d560ff330230eccaf46dc63f53023ceeabf95e82d71d25722cc5bf101ab875975340ff81c41978481abb71227ac7b0339b947cf8a56cd49ebafc409bbc10d46f2bc810db73c803c6f3044083994b1b0fc67ba91467af496b07aff1696a096c912d4f2d35f2c414efab7bc684bd1da3580f7ff5cc0d194d11858646981010d83f99548612b25ab2573359babd50ff984b49d7e8664edc7c90188fd302285b104cde8193da367f40c295232e94b975a8f2226b00823368c65a755ce12e4f7626c32a158829a64fc0310c95aab7c35ae7e9c74d2c75fe28f9346fc3561e2ec273b9944abc89f0e9ef0a804ee75453d0a15d108040000003315002020100a86c562916828cd34598b3d14000d7090447658381408b328c7711c848c3186004200200610440819a29a6d10004073909c42480e7050358d50263a604c452821075c940437322dd99952a46a7484522e6e3200d29b0df7a963090655e0e05740e366b5289af79631aaf07468595ac7927e4b575a12971cde8a969a13f1d21a0a153f9e6f7cf10d6ed03662e64c26c2412e4bde605ae0ea2e2cad416fdba6b2ca8ad934a71c7754ca6505392dc5a8830aed8bee6440e08364dcdbb69903b22a042fa578e4521a25465894c88b1e98c5840b85f713f3b9a2f42d2efeb5f9a956b46934f10ec496c742584c8682b408e455de00a20edbde87ca3d622ed839f1b550f250b06a30fc805d5e2e55c3c6619425a9a0bfa3e0cb0464add7110763111e76e6f3a0a7f2b7ef4dfbc959a6d061ea396fda68c4041eaf06bd9912627441458a157fdccd57ec44cc83f3d925bd57df69f2535c3f349240947e5ea4338fbb9f2fa832b9277bdacb5e1e412a4fe9f54370ac8e6a794a8b12fd002dc5782f04b1c82895e57d18b8b9f92853f44fa33e137edfc685ac1dae082e9e9dfa1c84897d9f9614e645742e0f5285acc4323248baab2a2c3c5958f555f0d6835ccaa8f90aa42633d000a7c1fbf0b09a31418a82e37fb6ee8d6428acee2e4b9ed5046288514858cf3b2c26b07a8d06d197ca44c917609d4d5fd6d1f771708bcfceb3747395965a6078290fd94871133cfdb062b512ab28470bec4868610a839cc3b02ea15ed6079b4b8b61bb50ead3d666f765bdac3dc849c2b3fa9537d6b4400fabd86a568d1929a365b9c442fce702ff629d1015e782f6a559658dbd968f054c71fc31e9c46fd8933dc0a298fa1079181b466b3e47c6bbea82ec288fe1b5c076d586fdeac96be81e31e6377410118c3190c20b56835b1ccfc42e6d2183b3087494c1068610883142fab6352a8bb0fa48c9c92e2696e93dcfa8000f837418589994793f0a52cdd9570a3343f9c82a19b110b653e0d0359e00056483f341c98319d6daaeb6612c6326968b9b1407aff42c47f5f000bddbf13a8193cd5b1984a4950eecac403f6658c730639145b1272283b8ca1023c82e5622c34f2782160d8cbc30e96daf07dc79c10bd44681308b2a0b0007356d58ea1d47eeda68d1015b1986348a481a59d0a9dc18c1a1cbc9de4ee6624b32be0495519a15a471c3a42f045deca40ac0a53b629611b0e1f4437e058bca247fb32cc817fcc9a0b1dc6d7af41b22952f04c40bf9e84e476ddf7e9974957e64b0c3d32722a2f6b1f77e0c9b07c61664ccfbe1e7542515179e133cf954dee11c75ce261a3045f3a56736400e8a1cbcd7e64c1375298eab8f5459e85d4145550d97ec5b16c697eb103f44dc35f361003f665d62daef24f93929bbd99d7f9ee682b894effe52f7f1ab90c5e630c2e6fe00c3c7a8b4cc41e3ce49c0db3bbd9b1c59c62c48346ac07bbe9e0f2d228978d4754b5ee11d2218877ebbba08ed3c4719f78769a4b3039b0fcda94fd3678ee544060df31de564d82ffc53180915c0a1632c8230067ba70f874d897bc249749614effabeae8ed9d459af309617e31d49ba26639cc14468cc00c9e0da437b85a9c4d7709fc9a72084697c8fd411a9ffae66d9f5c192f906e329f46cb88d7482526b704185f22b5208771f86b6069129548dda23eab522fbca092d0a6bcac4908656449685f105b0e302e859000624e45b865eaf22cb744216b86b34778b8323a042933dea804b969c4b0aec4ab28235d083236f647b394960bb92698ec8ad05eb079eb29d2064eca3b54ed825af95a8fc55c1cb31324c72794880ea7fef1e64160d9c89b577e19254720655a0df6502896edb0f94eeb1c085bedb45664b438ae86a2aa89123219d8cdc28e1174aba6a16cb513936f73a014b8f2eb534ee3a0b2a2ae825b6a22a1bba40cac6beb5a0678bae520fa37331632957f9378082f19edbb35ac2e9f2adceb54b0a1e6040134c5f4819d4d0d708250b7d460a623492782ee6dc5d60e1be6561075ee963217badaaaec0f6b429de902347e94ffe035cd36b293402dc115d011c444a4bc83dbf129a6aecde7d89acfb6f72e7f8bf5d7a6be461bce49120ccafc7856a470e823b581f805ba8a515bb309892dce55197bfa4a99e44adb4528d98fce830ea4ade08bbe0f4dc295b2f9db8a9d9850a084d4d548cb9c35ae2e7143fac1de9f1cda5b7f561a78ba86f9357d43552d685a119defe8f4a5c8a99749b85a0a7029411e8cad61f117c2f7aca5676c8c64be5eba3c5225f9510b8522476d720eaa48175f05f175137cf327d890c9a33435c97e9f108a9a3e003001f9d4fd19c89a1df2479d2abd1253c18e529f4e0d011758d0ed125ff1b3006201f61f01fd64db4511b50be6674d45270e1987e703926333a83bb7f510ca2f485176b2d1ae4602c3c0ddfcd6d7607af623ed96c2bbe2e4f90dddb8b092114e874194bd919b2fa5e40f9ec9644770b0e000e2bbf5c2d12edb288c8022f56ce168a650e4f4ff9bdf1e32c292186771f8c0d5dad02dd9eb3895ae7075558760e9a9bbd8b4dade4f9ad8a693edb3a19061812ecc4d0355d6686d2c7e0f6610dd3399f13c8395fbe229d0d7246981319c478563cc79d6751e9926ffeea3dc40e4ba88bb9c0cc84d7e2873fe014db2576fa0fe9b2cec44e5da2a31b2d0c7f620f6b0f60840a0b4b20c03f28a767d04b918ccc8fc42370c2532bf20576d09d772fd02670e454934174d1a8bd2052b0edbfdeed38a8499498a41c65a6b5e1fd1ed11eebb1e8b676e10de1afa77428ecaf5bae40bf783f0e4b40cb53ca0a61de0540e68b98298a51319c7f12df8a54665ff6b5e98ec99d4466450c00df699fd340d7440bcb21827a042f488208b7bb2ac0829aac46fc9ca7daf93d21420a20b7884b83dc4222a25cd1db4c0df2c81df681febd2dfccb278331deffa0eb34f61abb1cc50af3e9a98cc76ded2d7190f0cd9606a266b6d72b39875f0f0c90b64d9123f68f7c1761dc3531a7bd1c4242d34bb296d4d72067abdfa6bf55eb48a92643561ac15ec9d9635b3000e2fea34744c1be592044ecabe84776f87fc69ac80317205419a6572618e20f47d9d243009572083e374368c0a8aabc6b356d24476dfe9a72446f4b22d08bd1e3c8415d600dc3f5ce32a0330e75c712d165524725f7df22c7c5ae1939b8fe565966e28e26ec3208f041ca06e7d193cb4fc93806e8830ad3b124b6d43b1e2316e994da3c116fac25aaf3d213dd5156e46cd5d0482d8f9b6fe0b0cd9f733a0614ae3b211a704151bec7b4adadf2b28e353096ec68b810f5ff77f4869e707e44149fba50c44fd14022370a35b7bcff292abfc596d4c0c4d1b0c9995b715b541eec2ae87a2f0208b7b6dcd15cb3df0c2a1d3dc123fd8fa8511cd915310da6467317a98d366ac30c7802c9f9ca4802fa1ff73302d60435211f5ddf2f9b2c4f1f858e95a02a722cdb6060bac65084e13a24846d5d52cda797b8228b4983934e64c4a618fb27d8f765104ec78652936ca9b65a9cd490af37483006907d92c2bebb3746615ad654a47b8361426f9cfb66de600a94f04953cb3f880edfaddc123d97128760170e4430a8bf84a58ff67058263755a44ba97f985446cccf18c644c04e41079672f00333cd4d5b9e99b4e9452d708c9a7f8849bb289129e916d4d784e42b3bb96f632476b96088ba7f78b61e0b9d81dbb7c5a23ba54e14ccfcbf2ca49cd20787b2fd7f43a7e6cc16e37e60eb740b88c4a8a8714979272bb9529b85342132d971a34a50f44c3a081cbce304adef5439d6845bceb99e7a250356cc24850b8ca91195213fd651d94342e24d67466c1533000e160719c43133c9816533a416aca3cc0af53559077beff520b32742e7eb8c2c71311e9fb0d02236dc03c13ea11591282c8fc04654fb6799395ee70bcb7d0292a1a8fb58a7f529cc8bb29e4133169e8fd8562ea622fa94d5bd3e1bfd045a819a010b331c2ad4e80f399fb8c328c988058db70d4e0bb62ea60ce8251fcad69c6acf3fa31a78f052638a66c90a3c09d568306a6b74f1db6861be2dca50b1421e1b79a0f3f118604fdd3b695441c344065bfb1d83352c0e1812f1abf18544bbd829119cda894ada195c12708de21ff26ab61b91895217ae1fd6d03d45acfcb8e26d8e4580921153c15a3d9c1664d59142706941e1a654fed72f7c0e8c7c82109852feb68e291ba19b3a6224ed77cc41e1cac0e011124857ab6e0b8c1703c588d898573d064c93a859ea2cc492a86f227274452031b066be11a58b2c6e9fd2ff7d5563eeee6f9d120b2624824ec3e269d5e7875ddf53244222f7ad07cded2535789b54db7842030d19436df1a141947db93aa6df76e0a19f3248aec946e3fd6fa217d6dce50564c35a1a4cb70c1c94c31a1898009a0a7698f5d099e20b37e957ff578a316d9fe798b20200132725b5eb72cc1678670c5408e5a73069fdfe0ebe72136736cc35ed2b72639780ff5e606789f622fa821390144584627cae9e5881e6fe059ae176785847215f1a8660c68a1058daacfd1c10c8429595039f13284ab64adb27796259fccca76d246ecfccd6ed3d7e91623e0d3941fb5ad34182ce9d415ddea6513fe5ba09fb75419f005e0ede853e360b9c0a1c7ce01aa8d13d633a955ce63386043ad73f11c170c2b188cbb722cbddf75b2031817a73087245441a4e784492d6c3cc70438e66ca38167ce29563796a7313e48fa3ff87168d8eef320a226af199b47c61839f94aa6c610694b33fe165831721cb65c900f342c7b383fd4a34565ee617037ae4483547279642a9177985695b7c992cb1b45e3781ddbb8703055879e5784b6c249e6255a0362b727b51b6cd1ee446c2032bffd70e73c913cd87fc572e7c087440470292f404643d0ef225de91d892dde0a53c3b872f57144835b5d6d26916c142024784afd64d3856d6136f30923eaeccd00b457e999cb2d960e516b51b16d3806eb0cc5842bc591db8fff717414bd64e83e8250bea75c4967b36c2fd92bfb1026b18fea7ae6aae5a9f899953968d682eb5f49618116aff151232e55a3664f61d95a4b7aa1e9eefe754568fba65b785fa9f7a47a28c44b85fa7b54f52b387fffff1a379b2fbdca6f80cb62157fe9eff175fda5d99bf6997d9598b97bb13754b486e8a4f8d498fb6ef571e5d104cdc7965cef444eed8b4ad316a79c17196b3c9fa7271d90a671dd661085994737d1385550b4360b211a30478a77b68897e083a3b139f2504d25ff1f655510614c4e6d465a695de5ece8c4330d77ec89d71d6349a8c2ddd74d00d8ebb4092d79c38cc5f2c0704c51423f608650dbc7c115af9b7ace8e718f81f9283d9e1c00dc13b9452de8fe290e153bd4900c5819d752c7f8da1efa27d7983f95bcdfbf433ccf55d3719df6875e47cb7d90c6d6d9a2490f0c5747818c8c5a62b9cf70543e824b52378f444066712daf8e1278ab272c6efb08fb7d7ff4d8589d7ea52fb2523092afea96d24fb642f234bcdb22bf5a728987b02ad58e781b5c8bb6b560df8dc71caf792bc08ea6ed186a876aeb2fdda5d200f75caebbc2b40133119959fd20fac1555dccbacfdc05ad69b2865916de46e7018cb7e633bb2a032a8a06d1166872d77c86b73954d1f79ad939e29dfa6cfbf8199fecb263b056301fccf7801f75be6e7ec44b001f370a073a46c3b1a579185e068b2a097def1866324f48ada1a415392a3dba08f7b965b52e87a51b00e5515c1ff50c466d3ff5406c937fa6f33d268e7e6c751219ded92485ace895d61d3d0c186ebdf7e1e926a068d8ec70903bd8fc25016db6e67a9d63754a9e797c187c761d0248626da4f946b3076a50d4672bd69f8c582873165dfbafc1eee9b3d508c0a52cfc9eb30634db788785020b80e7ed580c75064f9cedd6010e39e02105fef8531050bc4763a15e75c32c030ada15b8a14b4b9b374a922b2a79b66f7163d5447e6acffa37999df8115a083e54a4b0af09d06181b3c9b02266fd17427a96c724599caff13d4ea34b4e344b0576b23422a1f35bf081b378c0b1a38d20c1a00b5bac1790f4d6f5e4d5417aead3594dc3224dac1610c0ab0f691353bd733a215c685ddaa6a41a686a3210e8a48ab38c2671a7e47d2e1bf2a961426c7921c7a89755755f6aa671ccc9bb38ad2f2544fbd2ef5040443eb40c8bdf4ca371a649205ec8d44970562b2dc34bec1597adf268da01329c7515a5a9bd2d9a5281c52e461c51dd2a0f11bb8c6c974fe843e57f954a90fa10d13cf129002cfeface06c99a04b99144ebdd4bf73b96e5cf8945e5faea2860875185f7e3a824ee6a4bbdfd938d3b8a392fa5bced4c12d1e5a9249df1dcd710fcfcec34c168feba3764b76ef2113f151bd2f313458335c2e09a10b37a952c30319ca50ca2d7ca8002df4e632be9fb2460ff3472993d2da63d0f3ecf36ea92f3b6e834bab4ee1d10af9ddd1e40b90958219054e681470fbb690dde969399472e97b464c226687b58a6ff942f2fa1563ec63b4994e031ab822b6c81bb279be1c064b29d0e3769c957583ce8ba301a839cb1ade68d0723b5d436fde6e2e27a41f62a3612ed0293e99fbc32ca746a4f46e453cf9099b840f4b3dcfb608551f78b5552dc8c7a2fdf9304033eb4cc012cbd53b11e5c1fdc63ca86b3608c80b4990e2379d7ed5df36e3379c2c6815ae91e7a483044183e9b5eff18e4445b46a300238838d0aabef355ec183ff76c7fedb742226f0c0bf4b345f22a417c112e268e1d6fb19b9cbb75a6d13ef580108afe137d674f76b0752fca7bf9efc2031a297b1f788c9b521fc2896733c01d05659a9f34ef4c638c79ee545ce76b24ea03ad644ca1ab9259b38112578029057d3b966f03e5c5fb432795c6025f254de749ce5503e41b03330597423d8fb79fee7d672f6b7556c119cddf6aadf3a736ac60d6edaaa8d6a828d978a3d27630fd9513b34fd697d8d561c1ee39a7046e353ba2b14654c7dc0b942217345344d5487ebf8ef141e2adaea080bcc58868baab41c966e77ad4ca0623ea22e00c119687932dc471dde84af7e43b06400c091d905ac1af8db92f92e44101f028edb0684dc5263ff3d53884b8e92bd235d051e880a7e8fc97412b18341320bdffb759d124b02191b8df0bdc84e932a699164495f8a4d3fb5ced905ad1ca08b5cea9df995d775730c59dc44a92a4704ed1a37524a071c5d139c7f34fe0e9eb84a8b31452ea145ac6ab82c5e40e20dcbbc0749bddd1bebd44972afc434a3b01945ab4aad4f6a6b3df616559eaa5d124cd4ff1b1a8aafeceab7d9f6bcda397ccca7416267fe56220dae93e11561426846069887624ebb201623bf10dc1466f909ef8d13519f2b45d985375a4c096ad1c8a2a705915e00e62561c8707aded80fd94378d7a40e8803cc0d719805a8dff68da3bd4d07aa0a5e23ebd393c36fcc9446fa5d30e1d9ef4f12ba423042a6a9f41135300b2654cc50427556e9d65ddf8b3d65db2e6c8114be263274c3aac7f43b7e8c03bbe47421995be5200fa031f22ae414cf2b4e99d6d7cb08368a030d70a42c16ec37b1c5ddc150c138523cc224fa08ed9c5cd2221d64b2a2c7a68dc836ab2a1cb6f241e70f64a28f23471d5e4addc6e95be603355957c55203c031af0d7d6488d62116986237874813ad1401c52322cb7e46623f8cfda906253e526b1c0b16077bdac8229cd4cae958aed40e9b7beb03810476186d27fbbbacb8e9f73be0c29242f9a73d941528bff127a839e1ed30e48640cc063e924cd7e80457faa7319f8f3a2710d339d5a3df04fe04ad25d9c112b6f2244dd2626fc8c3783712a43d5b44a60af1b273251c8b27113dd85b713c5df0eaafd4cc84dbebea96e4f2308e147173c4a08fbdf5ba51b447d68f7d6d41476a841b22c71ebd61275a3964ad75c4150868b365a08bae31fa48acaf59044649af449f115400df1414947aaf0552e6896f1b673f0e5db2dcfde7a860aa57922296ccfdd0640eabb1c1d146c35e1ef4e21193257376c2e21d2ee5f27614abcfa6fea5671705d26ef224203f78da8a1edac6297e6b3f51231068660c3ab51e16198e02a38cb90529867e9af334a1f59649fbfbe348bb0611c0826df3a197df280742d8f0ee2c38e359c02da806011d61e4a1a508246df9a079d7b7db0dd4c74a3786145763d48368df5e4323d6894ca5fe1e06910c1171eef5ca954fcb4e9bc2fed495029185d1cfda86ec6794633d41df568c7dfc90e1d87c439368d850a7b74d3bb26042bff3909f0198b460df50ea8b96a14ea2ad8bfbc242c0b205e3ba68b0b35b62b4f44c13290e78850f32a17c60949a61566810b5cb322c192352d94d9eb7fcf395b8d9484c7d6e2e2020d11e14b1ff7b54ec559192975a5691fef489adfae4bff62e619b0b55b6fe635cbf5d82131e98f1e052fb14dfabc4a12625728e9443e6a6887ab3b5c06b7ae4e9183271b2e7bac3c68f4f1cb933e99543f4ad74ef85437a5b661a2b7d5c82183393031c1661b63a718d1ef3b216f461ce408f02603ccc77e590492564f138640a133584942f7d2d20a3b7e7f2f94bee67173dd5e3f9b5978d5a4a6c742bcd9dd2a56d57d26af630ba37128d73d7fba39decbffe94a9d998a988a81cbad609595215f6d5fb23b2cab43e6ae3e438633bbb8b39e09e0a05f071c7d579eff5db2a5ec1b7972893d0c87a35c482da94924f201c401131ee6be54b4c693ad835c3e414b563f3fa16080d71f2cb0a56a533be67bce6c81dd56c55e0b628e7f0e1a02c26c4fd293eea94760d041b0fb162c1c0d5befb878ee43dc7a583729c265b0eeec2467ed0f5122093e44e721aba0b4b2b79c3fe8ed2ad0da8f890b85b76b03fd7b5938c568230735b9a80ec06334af580e0221f09d74775ff335fbf881db434bd0ba5a53ab55dcd9d0a6e6f8f0b538e00fedcd3398fcaf05229e67e2d75de8da03fe15a1b08c55ec32fccfb1e05259e96852280eebbd2e74d2d997103a7a104808de6306879321d3c7cea5a5cab82b5a8ea53da65c769b6acbeb9c60aa290aab6481751d14e56e47e5814c0cd4c2dd78b9667090669595eb298b421154b25325a8a4495b9538538fc4c0d0032208f1e08c19c8a0902630ee14cab9c43012f0cc7ee453f69954cc6a3c56250b31756654d7765eca21cca66ce6f17380d2821fcd4f0e15fded2148da36011394d81fd4896f8d9e923a8e4df2bbbda253e0c59d70ea389ed5a8b7909a5e144baef00699daa1b5958f4f8362b11bcf21e8baf4390dd1d3529f86baa030a8a7d7bac3d44d919c4ddda6b89604eeca56018f003c1435e0b24df985e693d78e19c2977df667cc6b1aecf234bdc142c9f9e35306e603b3de2ce2ecb4334901aa6801bcfc1c5591eb107507533ecc51431d65fecd8c218f0b59bbbd9e44ac3506a7fdd1ce7203e6d956189283cb4a4f73f80c7572f148e6c5376b0202b70229e25d988cfa6a681b6c255273efcb33597f842bca0eb5404a7b66a091cce2592d068614627a2f2b521737a7a8c3b8008ceae9b494f9efa17d957fc3297ffcaf42b7e53620969aa6ea02d631cd3c2c423439ad7194bb3a86b604c69e58ed55da8a4e39434fc404fefa2641dd86965128b5e7b29ef383c2012e3c820268e2c4a7ffbdbc03d734039ef18534bbfdba8d80c4f11683cdf2e69f6469f3321c607c2954e44c6779072caaee60a9364535ae40637bc4136b92d2179ddb1c95fbe84c2d1fedd8e201cd51c07574d0ed042219299326f913f34645159488d45a04b36b04682f55d04a386745edcd15213d7f35be7c26ca6fc447ac3aeaa37b8564267208251c00af5f77d7f91a2a72a51bee3e23497efc387fd6298857178026962cc1c0411eba11d8cf692ac789e6d9a62906afad386cb79ed679e5df52f00f9d7530c051510fee5b8030ad871936c64cde71d41586ba9fc3a4bb6ac8692065e0e4944b89f9d540ff311600a536f53e45e08c87815cbd7b876e0cb4da4a183643dc9e492d1212c0a899debd028c783ac5bd4d110f618788e4d423d4955e5240b5d6547143a675fc1f4132445e0aaf0b07fce3e9324199b645abec9945c310c270ad72d5dbafd63eda583155e0f3d445bd56ba2efbd5112fee19d160f2655ba070c5847d3a191d121d0772df27f37c175a1977dacdd85ed9909779748ec33e1450658633c50ed265cf342f93b7d95dafe95a28452b3bb9a1535869e49e4a6280115288caa8b04d4670675f7fe1f92bd94403c08fbd5d7d2ada20c8398813b3223828b15235638abc28bc992e5094580de36786463b02fb7753580bcc9e62360621c384c93704d70c0622426660002e318d8c9c7be4d772b62d4a10f46504f345d1b189e46c9368d715f31cfb8de231c6a1907f6488dd6e75764d761f51409d2872e875e3539f22b1959a7c37d2a81f42702daf0ea9d4cbb19f50421c3f3c1b526d8eec89ce52d3e645f966ee06e8b986522f0531d6dd5b844ae45e3118d9df0ea1f214d4ce3c554fb7308ff72e33866035ec9a8217ee7c7343be5b25c694f3e9ddce704cd811139fbbe370dee8f32bcf6ac04f4ff37b22ab5b0e35b5aea9e6162214b3b619834f208693dfa0d8cd6dd630a3cb35ba4c0b50d551ac332929448665d04827f732830ea1023852901f2774383c3630c40a1c17690b748c0cf4a5cfb7693a20036c8a47826a9edf3744b107e07d420cc56447198d191072acca2405e5fbca7ff2a7454cc8506596da322a8489b4572f5563822c331880e5db4dfdf17eef23b767cebde091b480567ecaa69d09e6ee0c3c73ee706c97578cb6da3f88724e87767eb52f8d0f13cc526ab7a515d8261a724cf621ab7b4ea0dcd90121861c7c4d22c6563b8961ac724c5c7f7a40ff09e62c0697dc5ba805a6f85706a752896645d3bb8c0457cf160a773505743eceffbbcc4c1701bff752fbe933ea82dfbf498184b38f1456cd91e3f42e6116a18d00b414a7b4742b6e33edf48c6398c626202d4594fb2fbeedb0be113a22c128570e1dc732f4131b7e99887be2068559c8efb4a9af38da85a8db1540881a21d0fdd2bea0e26226f8a94defeb92ea61b2289503fd38715a3354be288e2103efd0658681a2bd6f1abcb8c0156c39d25a1ba96ae86944474418d8bffe9b33c1a89adb32ea009ab2e5af3f848680a87bc5fe38195bff8ecab903347505773964651de7d9a51d0035d270c50a8810695fc1a5379d0165bd68dbe0ce579aad864585774b0675172e805ee4535d2071205d609573df91558f6b2e7d07c0a60a2911a43efae6e4bfb5000c3e1316f09b7e300c3089668f0f2f8abd7533cee57ec64eddd807972f87604f3c205a0e031db9de6a124be1bcd3461259b6b8da41247c87ab73a70a7f6927ef2cd738647d3a9f81c983caa4a4fb376234f60a8d098bd25e843141adaadf7450b2a346a60da445b8ea8b782c0de0ec7ee0e774854dba29330d9181a0809b765f946dafd344f0c7f591bd37ffd1d636858821092841f8a57c21a0316b2e0062f30868670f25362686767fcf3985868bc7ed0e5e24a89488c2a495de7b190849cd832fc9241c4222a398e7d00e496f41cfc83893be7ba276eef46ec2fbb86fb7174f0e62909e2f6c48fde9a521f47190be2ec1c91bc09eff088955f4d7ea05e5439932bfa8fb85c46ca9f861ef420717f07a7038c0bd26df691f5ac564471556af3b3912b05487484f086592893358998e0cba259db0a7de0bd048ac1d09b25a88dd6f216e5e7fa5504ede726911a0a8a6def3c4e8b31b3e0666ea5636b8b6c9200e974aaf36610942241f635277b8a50a2ec854cb285d98652971b1439f8fd7ff6c9f1d5ff6ffe17f500c1d44fe5e13c62a45013c7330de333559985baac0525cb96f7e93a464243b42274f4d92298a5b08357def17e445c89cb1802031fa4b8aa66117ed6f505d5498c1fc8b20577c96768ca732b3a976fb86bd7075de85444d8c72d0ced2a04fa2580f8c0290418ff3090c26cf1130b53f083956d12213b472e892aca5ce29617861637c74e192f8c05983729c61f5bf115eb990475fe89c629fb59953d836a1cba2f086489d619a2b67945bd5466bf26ac87cf50d71361633efb2c7eaf2c9070544d7ad64c1d376423f45f5d3eab0df48b0c14d09bb9589ba29a2ca00069bb91fcb93f8d389755cf8d69313e583eb3891eb3fe5df45b60e84876fc86bd6ba62ef03a8e83b0a7a116f4689ad217edb901247d68141d1d6784a92cc76482b43b94b4a06736f5b404d864c0b18cc610b343ddee0733b4c08aec432c947150157155697206e90044de9a024910fb2005753cea7d096c69e41a5ae9e1f608715e263a52fafe8b148018e0708763e7319d86150f326a7dcfdcb94374b180a337864e2eebb400c0daa07f9547b2fd729abb465f9b01f655bb96535041ba142852fa78e5b8d3f95242aadc3f047c02a8f139ae1488bb9267a5cd01c03547309628e6f43650af34138ccf3a79b937618ca71a365bdaff4801148bd1f3a226e76915d0fc55d28abbdbed32bacb3c846a85e0aff43be98b4d77b33d6bd9613616d53ed45cb8b0a095b613c30434fab03ee6356f1a22081c9d7ba00ffe79e4d06d4b12470514d0c086d3bf0344f1a36bb72a4c4f7ce3d567ab6f2801406caa2dfb7f90e04100552d91bb1efcadc7038cfa750aaa4df2af972845ae750472c01eb71a32c82f5308f6cc7a1ab41523a3f50133579f941b761620c14afbf0163df16ef7a0a733660027d66d2c2fa3b079c0d610621f99ddae9d1fe1c91169faf9cd511d42b88e1732627066128e84187845656d5011e4a358f06d48be741016e0facde6f2e80e95d24564b716588f21e58a340c934b27be442479d70d7ad1d082a2f4d00724561028b634dcdfc5f195e2c190aacb61a3900d1bfb53fefbd8b2a11530bd28ae838a42cca09d645e941fdfd64cc9e2c170ed3e12308855bee598ebdc411233363201fde284631c221984572d3bc689894eae4024ac19da97c303e744114ab66e46b8b6766d8d3e22a46d5b12b9a79bb1ad1e144b1d9bf71fed9b448ecbcab7a5722e08032f550eacba884af3339121ff0dfec0f08e74eeff251ba2accff1e2397f09065c9d52cada3a4ffe9a75a6985115a304d47b21307795428cb8bac3cea5e8d45bcb98cbdda4818d17f6d8c90dae554e6ed38f5464287965aaff2b309611ae39b5867d53edcd30d39a762bcffa59e6909e3f42e78f5a1cae3ad010c2af504d2bc59c90ed8cf7b30a6395aeac92572ffd279ae1d92ec8e55dd4a68c461f1d926b20d354369283c8e170d09898286d464fc76191570a0f85ba43a9db64072a9e085691acf8fee165889d33154fed87fc9fb1ec3e5bf37c4714804c704b3264003b865ad1bf58a0656048d7e679b33e7cb4c57704e2f87d96f9526f0418bb24a9519dc522c1af940daeeb9f9575985849077f33556730f18e601b66414ea6c6985179423198f4ed01b5be4a50195f09e20e329b1ab817540a019b371b5f7fb060d17dc0055e687714593825425650c041dc351511e37b0c3a377243a8d121d09db5491c0fa0f1ceacee61e4451bba722396252ff310c66bd54f1a4326e316799b9b8a5bb9d76137096bc10b36bbee8a62144531bd769b7f3b81ad67de498f1e31a7e9a7a2c1d37e948b5572e8c109b1e2f6143482d07bb60cdda2aea3500dbd3aa40d2640bb0f97e094e1c164653b02760b0c6485a56c845c98a81a73d7efba5b5d2c6498ea97b3693527f8a3e33ecdb55324a9034f95e4917e8b4d2bba5c85494edb0bc6fdf34382ecc86a4c5d4aee8d1d390418f0a84a7203b2b018f10cbaf1ab47bed374184819b880f16a84689ee08fee0e081efc8dd44a1b7f7245c2d25bfe9639f91475b5421b39517f72a41557e7914b661692a3304afff1161ca735164eca72c22748eadd2023bda93685e4dd954fe96c968d1a3e48e019e44c8aedbea7133be7b184081dd3299af35f472ecebf4154116ac2d3a241bbbebb04ab4d71d1e0c96bbd4a06817392deb76a2e702cca2f3f222b8015388964b988e63dec3879ad67b01b4cc7b7e7e430c9ac8628eb0d1d609a93be69b967035161068e33723c55df6d974631ddaffb806f374de9d18dfba03ad9a7e479d194f679fa12d5e327e22ca71f02e9e18e382cd5557f9ff363dae8ffde1c09a834803d655234a225e16ebb5b46a3ea5c650c78c2f8bff30e6210c1ce91b6a9a6bf1d779b1d5aa95e709c2bc0c84a783571136b7b465fc9e0bf1ffc88a27e40f35cdeb0bd3320e13c58814174d913763d3f1fc0c9539821e130e8e3190fd614499eab795e03af46aa969bc8c9327049f0f14814c7435c0332421447e8d9126fa63ebbb4636d20423a8c5c2b8c94c2b1ff3f202c8ae68dd18c3e7f58aa42f1dcb2854157bcc4d2b639a950550fecfd75195a343d6aa3351c695df3753628225da46074e5c581239c230d09c1665015cac65c63aec61c86070add6622e82e0fa9c41b74c4824a75608e0b5fd3bd1898763899e8878224800a97c0151a1459a9d11ad8d8405542f4baa151d1d5670aacb20634bdd27a2db4ac96520667e356180a8d138d6826b7145063f45ecc741d828e8c5247e88c588b0df1b24a51ba2f0da5aa2b7d14c6e7cdf6e171fb5c53d82c9564eb135d278976c8d9afad5d92fe01e493f5833cd4b7f85d57cac16ebb31e23988a4ad358a7959ddd5f7a6d84a41ded0a247a0a4360effd77a1e3714bc4c64c94daa6bc4db6f88d608f59bc2d312580e6b390b2b78c71f1c5c7f529afb999b60741091a1282af4b091dc2a2759d6689b8c9263ea5e29bb986bf430bf720c00e4285cfbc57a2695bec4b675c86f7b22a0b87ce9bec3100b907758f44ba0c1162926d19782f393aa95518ae781f17f06617aa4fbaad710124d1f50ee847e978362def2ac339505fd0034a484062899a499d726fe38aeab0f4f98fc10049aaf299ef8aa88d0294ec4fc27df94d43f2aebefed2a20b9b2f246cb57409e97c1828139de4c3c90f92bcff8f6f2d16aa454102b311f889682547b55863c75b12277ae5cbf232c085b5b3543272dd3ae2a9e590256cf92ad4a14253842a265328a9e943804ea3a9851e00b94023d8086956f07b1db35efd187a5359acd940e2a34d2530e4dd39c6b73029c22def05b38508173b7bb3748542e91dc083c87825378e594325142942875091774ece691608c70dd89be55c4b69509e310334d38a8043ae26942b017b5a258c17be01763e90a848ac47c0a9abad890978c7f2a441fa30d51f795c370eb23a6f2be9499c38480eb1fbbc19e4ff59402354e2b77a552ba21dbef0fe56cf486a59cf351d2b47cf1c8717b439861eec22af05aba902df4996400852904c15549bb3d0c8366be6a3cd524d9981e132a9a42278656c3daff375a2ee045af3477af5521315b688611044a1c703bd0871af8c3cc10885e851a046f0151a50c415f553e0288d4121cfb840e4d2de6a1f849352010fdef91eb364e74be78cd8998322f07b54e9c8a0d4ae78304b7f83738dae4a6beb8ff134016bb5f85d802b45122e4cb3b4e657a0b944d16dd908a9af7f76d7894b861e91a25940901d809397b431c26cdaea90f625253f4a13f730e3a2f35c2749474181e66a56fd6227b1ae931bc8d9a4147f9004de831f6e2c75d88b731dc5050c50461b33276ae56ca202e41c00bd29f913b0770a5be90dea1116b0d3e3f7d01f4593d66f114ec51998f3b84892c2655915b5e87b60e61fe1dfc33592fbcfb0f4402ba36be5a32a21eb34c97c53574e9e1a6588d4c28f5f507d574dbddb05be9318b7eb8e8a590646addc2802bb6b91e6df4648f15169cbf98ee57e3a17245c407cf2ffa33c14cf006dc5ec9afe343dea7bbf50c3db047056a9b37eec6cd1b02364707b679591033010b006a547b64750cbd529f63dbdc1288e6869dcc26da66e1c8ce49930f9e9e165095c0d1a088fbe59b74516611c5ba66381de2eb9ae29632c9ff81d5c41ab19838bce6b1da513d6bbeb0f0350cafc154ab86e785ea1f07b22f842fda91379eeb4f5e90763e0c1a0e4be23081256965f2d7d745fe66198db4536bcb2ba8019454453e409a1c40e70174e053d36a3510ce479760fbd4dd046498ae998d6e6587af26535d420bd96882e270d3acfaeff8b9d2f1d430918dcdeb252985bc3f314c554c64463ad992f68de20ab0b48b67770484039a87110fb4b9c6d1926a88212caf281d00edf6c16239e55e675ffaf0db4e536012224387a675195eb1291919f06dd7f620b8b6f3b52881d1375f2df1538c4a7d32d4759895a2f4754c6d10e4c581bfdbd5b7148e34da03f0c1fdc32c379fd1a361314e37925249210a5b27af8940bf1ed39ae84b380d39e432359487a9e43edc9d566e3cf8896f51b037badab19a1ebcd4d29440ac64378601fe7c6879d23436c0dfdf5fc07ba0ebc2a2e237da33dd33217750a2827a25d59ba95e6f558b2455ccfbbfea1671b1db145c9eeffca3c9bf1158deb9f9d8e91bb8cc0cef6ebecbfdf958128250f3d13b7dc4e50cd330b1c95499c6a6b71a6ba716e45c032589ed61ae099c8464a2a50ca695fe984cb0eaf294c8e2b96691e1b0d96d595387d7be1547a0c571da7b1172cf3a75839856b262640ec73974a5d99a5488ede4f1880d641a07acbc5613cb5d783aaffe86716a4cf0fb632e432416f7896470e4f6f87f3633e3b4bbf6bfaa8f44054d966fae13ada011d710912a2224561d7ee4d336ba082bf0e69bea0d305fa15912fd2a4ed7cf27292f17423149af4d000b43bfead2246e4246493c85d6b0032112ac16a652de04dbae02c1a54e3ab58a4b9428e5caf742ef770123f1476ac0e785c345eba3f8d17eacef4c54dd17767be09d34d37898f6ee9809ddc07c4ba24fe51a86b9a7690723403fcb00ac7979a72e1c48112dca911dbe6cdd3e73b640481169d1077557e8d79033af1dc2f70b791f9a115f15a49102bc95ae01048b3be07c189e038d57274f05f44dd79aebeaf1d2324c54dbddb75c7f0f8190d9b6ed5ac56d1dbd38bc38118f9ec4e77d4615d58c12acbcaf50f19e4df0f904669b2df509b4fe2a31a6135dee7909708b9f3aa2d49ef0f61873be29c0f2122ee1476f32ac3ab6e19c4b6976ef3e1fac3d7df84f9c6d3720d0364338c1a778d9c2d2c879a515a5cfaa91470805148a28680d912facd7facf193a704d6cd8e89644f68f121021da47a73e20df14dbbc07059a43cca642338051b429e8b59d23eeb59a22ae346e7306beaac18aa97c8e0ec2933450fc9fd82345b91368a5a75fff06ce5c6cf269402c53c99dcd9bf60dfa57c14435d719c7fd3ab721c80697225e22c47d5ecdf0f6c2bb13d2b03856484a876f240d0ff01ad984670e54b4555b43491894336f4d53615912bfc0559935f5385781b47395a31cf05f36b3e89b615f7b8096acb415ecba89bf3cda2f2f16e66bd53f7b3af73cf435872cb166b4373a6cf0f08cfe31995d5ca5fe5e367905df533834a36191676516e8b5fb43330c1cf0a08ea9006e67d17a6391ab6c084756cc04a9acaa5cbdad9188e68da673279569208394669159cb76b1f34d435dfbab3f18f901cb3806e7cc645005207915f4bdab12189943a6332f26374f8525aaba4b64aef2f3e4cf0d77608c129aa8209ff34a1e2fb68415be3c2b82dfb774134932d796e9093698fe6374fe567e2302f29629598a0897e955726427f52c8605ec80f8a63493792b5ce65814904395ae63d04a8901c5197be45de6158622338b419561ce8f4a135d6ee296198315517de0649ebc3d4044d9f88c9d34fc509a8e15ace0f6ca2089f746f942c89e9624c77f42152e8523db8b482d6fc8d9929ce7f5e4e68ab6ad1ec6d3c4722b9bd296d43baa8fd91691d1c0803e3ebb18e3e4af0c7aab568a652b21b8fd5309a59036140436d5a4c73269d374aed2c2352fb2120fd3413354c706f49e23aa47c755ff36b8974af6aadad20f229c889d2e55b367f1951511aaedd76c585ac7b660bc6f113528078b057fb0723c0328534388c98c70f3676126573f386a19afdc35deb21910c567cd182d4beacf0c8503371a74ba9b4ab33c21b0c6132eea1c4c505312661555e97f630ac1b6103b857d9de70ba38185af39e76c73baffb22018790ce0a440c599bf8b982cd165800a7182d6b27f2e91de7a02b24d2fcb63c43b273ff41a8abb55c67d6816b230f2635e14d952ea84568fc9d5bb47f4951416db3d02b57344fdf1753ee629c413c34a66ffbb2e1bdc7cab0bff167eadd912c4c133f0db9410c4254fc422818a2f828b4d9884f654bf0b241bb4dd439b110e4e8c0e2a075152ec887a3a472a5d4b87797f3ee666b4d77d31ff6bd2aeec7a6e81df581952a56365085fce0288c9b9852bf167f7f668e60fe36d6e0f53a44824b304331d9380958da38f1c25161f0136faa9fe09561443001f6c76be6de9e28504926958cba2418b063457506b516c910794a1530674b718007a9219043cb9d8cd222804cf9ebefe1d0070ff7a05acd435d6078ca510b1b09941dfd1de267b8bfc7d8bab2ccb528eb6d864d3570b3804d2c6501290776512dff1ac5e78f843d6deb472e845b98458caf43a58e4a01bebc8a31822a519f24d5bf48acbc559e041198f1985082205a9ba23b46a3d833a1b82cb26c9c3e0e6ed35dd9daef704f9e21e00b5d5fa9822bd0252c636ce30bd368ada58d33facf8521e2c41c3b621864f55837e037856d9d0553db643863a180a710bb27095f82e92f464d351598948d76e2af268ace5ec194a7f5dda82479dd5cf39a764e372536aac96cd24997b526fe62c26887f456e9ef3672f8060ad4fefa69a250c5ab452520492169001c9b10a4082ff6deb9a8b60a965111e913b4371bac49daec591446b9af1023e0c299d96ee84d8f7c7e865f2e5ed0d7169f2fa49e15f158d13af616214c527e55c6c8b15c3a7a7692ad2fe5f6fe3f546b29389de3da31b5db06a8ac868389aae1d20c63dcd564cf33bb0fb9b9d8e700ea9a94b59e7c0897f3451b14e3c7f870102110fd02acb07947c2ed38109848128acf085b0f98331160f974896113310d4f02503615592f15528f165dff16a8f4b705e6664abc6b9cf6618d0e3ab7d5f00745b717ebe30085c2eeea6f5ee1500e8b3b8bec03cebc5815a1ec3701bae34f805395dd60ffeda0d22c433117b64ffe24d97688f188eeecabdc2ba10fafdc3fca56d69d0e16d95371bdba22a208906b361bdeb333813d6ecbcbc107744cece1cb29ca8fb51ca38bbb267e247b40fbc387d2e64a1ac6b37a0965dc441f26a6415581541e97867a38a581fe7c58bb02b32063dfcac5922439220f95937b60edd46d9dc393faeccaf0ba9cd4a2994a1e41b7e0894bbe0fe657c88916e60e87664a7dea4276302e448b8381bd09a9cc7f8294d8c872e9a7c43c32a438d311c9b8df729db41b6cab1a5b76aa3c6d5bab384df71ee0ce7d38db19496896e50c8b33d288c67125cab9284d11683d5cec0d2297bd2a1bc92d2ec3541093003004daa0f72f38b1a8c47276d2b88e0fda5f5706b1af0c6f93ed8c92b5c8d69979613a6cbba17ef335e0db6e4053e8932d3538a1d245c1af2264672f4c2a5441851ecf4cea07bbbe2d6d955f40aa0e1d164d88562b146eb09a3f3ebebd53718b2d030ae8a07acff115b21b68fce8308ad0c155a8c701951020975a38e8deda630ce13e231982b2aebbf62b8108bf7823f36119fb36757ba358e13302152e3a5360451da0155c9fff84c0345fe004284df2b669001856eac0865c82ce6d27c067808ade1e2606542ccb15f0a17c4faca777f45b3ed4718176f7e1786ec4d3d74629bdfdc3e12b390416ee9b85c24c80ed84b09ec3bcfe15e1b62e735a4c622fd0914919cefd22aa53f404b88b655735cbcbe6444717d43c2199b14222e1736169a227906c19b7e382dfb11d2eaec292b3360c098c63bda8436368f79598c1da17b8cb5a4b8cd9a91d22d8b4cfc87d69f76b33d10532395bb280a352e07381230378565d7161b23870853537a1158dc3e85d6da56dadb0b52d3199e59ab8089bed941b2cd06174406649a6a607b477855b22f70832205f3074b0e7eb70e61ac1e9ee4c6eca2fc3a020dc0ad215ed1eb7ebafaaba61df20e3cc10df39d8edf4f03814af84b07f2102ea0cfd54d8f2d618d5529ebd05ee7f3ecadc47f015feb0d44765af2a8848568e74060f9d51bbc663e4efb089f2d743a773d1e6df84af24534fcba89ae8f10750ea710f43bff882cf11520350438b8f030ec0246951d4c6b7206df5d5203c8506f0919246c92a92b7aee0bdde4c859840f54ae530cf73f7abf042c99b913fd8b084e0d02f34507fe327ef9d124b338259ab3a09429c8b97179656c927d972940be11c2160883905b4127978be1679b8b6eb4ac07168b5f3da129d077c6f930883ca7b9b6e8d7c80113644008691b458c884625d20663e8665a31de85369adb2ebdcd1556cb1e963c8e767445dedad4a5d78d9ecd7430735a6a6495489421a11ed94f713644ee6d4f4ee76585c906932600c28de680521eff20713cdc703a5b28d40d876b8053b8b92cba96fe8371133cca03af66f9e5618d9ea6ec5cd08c5518eeabb12aec65fd40fbb3b1a7b87270db43fe4ff8309a492408cbbbf6923a597d92739b51292feed5cd66fab2a6c44da38e8c707b972ae6b6744faff3e3e976f54d35c3a31f9d7d2cf045844355132711af4b0da892416c82b8314d3b57871413470e8efb6da99094c65e59b20849b253ec845c92110619f9a6cfa1ccd510a3a750fbed6a2c64f3d7ff63d99496b4e0d3105d84d3cfa9464c66d5d045c8b46bc8eb2b816d459d97a18564124f8aabfe5567d83f919a17971fb7c296d0edcd0618822b1902fbcb628bae0e3d5ef6c912c47ad1de134c88b894413f239a09b7b60d46cfe220c45b158d55ae66628d3a28df4c11c006c9898d405fb4bea36b3d0c2c0a3d9b5a2d40a721fcef176b29dc5ac869843959f168ba7d4709f97e3442e85485736368002cb6c7ad18f297e61bd3a492cc22adc59016bdfef687eb39120dd511db1a1cb8ff66df52f71c695b08a8c7f69d2b95d582937d1869aed7fda4bd33249206dafe150e00f594232e7d44f125500efad69a7892f6cf6ff00e6c400353630fb5b04531b92ade1f15f019efdae71f850a92a96becb142458b005d8d18af359bfd35f4524f2c336e28015df4e8cb78b28b5a1080c3d1b629635bc4dd0c7d446d6a551a50ab58ee647e59a8658f9b9bc222dd2707b394b1b69ab7cb586d54c92253a3d73c7551d88441d8e359975c31378418fef7d31ecf4200584944ff2324e7fc68ed800606bfd6778c043125d2e3af6011092da4c91948ee0267807bd9c619111d23f8b5a7b3e67b355b759783ecc29f5536cd0d747b91087763de961a9a151582f7a83dad5de5f244b0f5fd0f5a062efd70b6c22efeac744fd3a90ba15c856cf03c8dcc17007ba15ad4fba7a43651041f141d58e4fa1ed3b84aadfbf18d8f080161f15c9efcdc35b03222a5ae26bc23a889254b209e9752e47cb9a0479bb694e4f1a9214dac04e80ac112d12bbd10d9bc3bab61a5e88775342153e9273b84462b1849a2246adcf231b927a3450d6a3dad8aff40ef59ea467a716e26f3ff80fc53731237666d3439105d37c4a53c57cd84aadc90c3dc5504b683f6fbe8cc3906571b4c2b952a455d564c19af8d265d42bf906b9d46fc1729613160234bbc50465681c92793266b57ea3d131b0d05bd130bb1781782add9990e08f758c19939f4b3cf250e1736e59b2b07dd2af953dbcf2aff26db22313439b8a11653e235e06eb1becf72d3d16a328620d8a339aefb929f2fb4c93bd7d077f6a23daaf8e2f621a42fab2a29073ce05df22e29f5c84afd0c025d3020d27a198a112884071cebdcfc2d8318fadbdad4983745873a557b0321bcb7383901ef6e078d71efad65a1231d1c08129079f2d97029f8050dda7ceb689c663ed2201cafe0b46a9010d630996fcd2ae6b56b407a1c615b2fd2529a40609bc0aa048df2320b44e13f552aa64991c3090d8f8d2b71b5df7c8a8925598903d5af72283cfaa2d3efad6a3e2c5dd1ea289293189a509e3940a60ee8de0e0f43400eef90037539e0ce65cd7e50e386b053fa8db9db67c79939de77f6ce40202c56444ca16f0f4f97dc22403fa7e51c4d76a06735a4da167084125e3aa585451b2b2e20590001606352f8d10be680998f51f28299078473ef399233e5f3bea9f32502891f892977eaab311b3edb016200f774a39246bb45e8e9623678024e7c0e2a569ef1b65ed66f3fb685c33e1d781b5adf60690c890b3f8e48f470e063238cfe4e3ca932b7a83f906ea1ef1cb94ecc75e96d3f906e5adf65e92f0a9110855a0ea8e8c76f6d8082b73b89fc841ff4fb84c4ffdba3033d84a841fb80892ad661ff1c0f2d1fe9ef6043dc9c16a4721128c01fe78c26ab0d672641eaaacb24379ca94cfa0a02b72a2b407b4068822942e7b3c34f3a55b033b1bd118c9f98a39c11516a455f7487466b8663b5f37e3814c3934297f00ff43f620b837b4a98d03dd9e90cf0b35d944ae887d259c81af86fd0313186daa59859d4afe9a8d0ac7b57e3a49325ec7f6d9fad7ca555066b8e41579ac0baeb139255aec8c3b9c79e933dca824729bb83210eaab9420843cee1650320c7542290c2f0931098ae86ca864c002f8cb2bfc60c721fc6356455b6aa9f0b038519088ed4cc158f61133c0e3c9a31636c188806807098e21b4526e68e7e6f7570b9731eac1386829332b2e598e58b2d2445460702d7f21463ac026c3ddef92e0d7c236322eda9ea015a2fb06e16f4d1baa828a68bc9c7e6e873638ffc442084036320cd1c42a4806f94b024ff4eb67dff0acfed085cbdbe3f748b43eae9c4a1d8bc4d9ba7bf85b71c8bd169ed002a3466cff33f430792fc05d84702bf26df77c6a26bc9cb6e58b4de1c1c071c4850d837c173dbda0e2c62682d5062406cbe18ac397243c76da40dce2e036ffbfb83b30302b68b11209872dc75eac7c7d950cc3421bd7abb9e8b19032f0979aa889a703f52cd1c7908171ec50cb51b81dff3a4e8546daadc1c2229e823172de89d80f119f211d33e6499d1319d4207fd164e9abb4da04adb0160848d223a93359722d1f4acd8664965386c3e0a8e1349ebdfd5959ae25164d3bf15caf50bd11a93e090f80b54adfafc2036dd056c883160bff0b8023aca6e8e165c49b0aefd36086e97ef469c286ee45b11b104af5d1db4190392e557b7575073c672b97fc7400881d0940431a10e164e00a8a1d5fe1b41e0e278e9d436e7f5146a047871c0d34c6c3078a6c8f2a69f36857e1873095a4fac6aadb12685fb9fc0ef79cd819722f19895465434f3b401163467db1e0b6dddf4d06cd5e79cf4ca4d9409967b8e64ab12212d29fa5a1f88d623928cc98d28e6062856f643e732a94c1afd9289cd5f6ec5953e9230882f06488412e40479125f396826a13fdb01c38acc580e5e929328414d13222f3af2e3e34c4c51265411573849a865e88eb1af386a343b3fa8d5384ee38b4013beb462822108d87008bbd5d75384456411db3fe410ea92162d3cc11f46d5381c56b788352af83a5160c27b7b106542246e11a26432602714d1fe01f191bb2f54ae1309582f2481791077a246e94165cc733eea24b4e1de4ed412b6a3a625bdaf0fc49daf90b5ca18b90c405da020868e99b64cffd983ee11c0a7cac4853778b69e21a73341e32610b5b56221a0e12c3be4b0c7926aada337321980e86d13fb33a992a1c4bc89e38b24892b3f1b019b358cafca4d2374ff8130cc6cc6a68aac7b3e1b06266e80265c4513cad126564f4c782e3af7d44064d6d75035bd5e361480fcf7a63d0203e9197736fc431c27cc61ebfacc20a251f4f95f33dfe64e889b6bb789bee8e5f30909de52aa2e88bd6028e5b84add62b7e0f82627e556c6a6f8e2b8408d5430e4681d9cfdf79402a0feaaf720c074268b7c384a03b4fabbdb1afd3a1390aae3f37e88214c25a5bbede631581365f6c6b5802591e84449f05cb5b5ab7f0df4494ee4e7fc6b70ce5ae59d09b38c30d07159683515f5817e7fc12d68a4c8186b7e3fb5a6e61d6b2183523d7a1d08f9105d6fbac34dd403f50a5845ed0c3b343469c0ab23c00f80a0f458d51b67333afca2b0efada0eadcf77d3f26889b61d0fe514626a507e741643198854fd6560054082238dd1d17b029cc0b55d50a50cd585b7dac431785503207873db0ba66cdc01dc4ea3dab5acaaf0625ca8d41417e5470eceb397fa3d17a506db22700ec07eb0da3157e01f092c38127cead19a2bf0937f6a6df241c74e01e64e21f360550403a5da87515d46b9e4bec51a0ac8b7335fc9b45c6dbcf90eea6970ccf5f8054a10ab76f9b88f54087e7967cdfd29e0c85f30068549d00b8175c8acd6145731ab7808b571fa80e40eff0ca1d20772289ae4804764b2ed04159a6e46fd34edf28cbb60af8a346a0b3bcc826a2621fc5a60e5e8eb57615b1b204178dfc60197685d997da6a1e80d3fd6d768934bcd7f464669e585938ca68d64dea0e2b6be8ff2699738631aaa802c272e5f652321cd9e287cbd86a96179526876659a1a3ec714692c7d553969d8585cc2671fc5c6a1233f142f50c5bbda6704b51b53bb9c91c61aec6bc6f2609803ea48a169c4d7b711e89b415f3c2cffaed0c55e660732567c238c677406263bacd47722f7792544cdb95b1b977b34f9715e60162d0d87fc3bcf67df51a7c1264d593bc7cd62eff9b4a1856a5a7976b1571397574185f33abefca9ed6ac03537fadb5f2d74d7414e29a0e01ec52058bd7964ebd642ece8e38d71a539097c020ccea2b4464341a12fb250143e0a638028651e0af30f43b4d56668184cae3bcb2fe7c7f4f8b262c067b98418ffbee00ec3a8fb0f58a3a8955e29656c7ef720998db9d2fa09b3de71e944a6f32b3330f83259bc1f3d746147a5bfa19a638e95e81844fb09bcca391fe385936c360b8030a807a1e9697f9245a3ad76dad85c10ff091fd1a950d5f705f9b708f6b7c4086c8ca096c832ec94c03616d6e5f2a029103165f37333507fa9b5ff829efd2b9e62fb826fae7d5d71e967659fca3e7f691d570a2a0052243452fdd0ce097ed2dc83fd553eef79b67aa19b8bccd908787a0ad69f4049028cd208329b169d4b48f4b098879265b3a672297a5b13e6e7cac89b1e5986f1f831b693b7aa033fcc1ce59066890059d2af5ecd11b4317c895c6d9ce752176cf6413a4e2903912ae044418a309971e809e6c09439354da8a29121769f64f9c7384b55ca4c6bc691c3e7093e1cc1623a43e2a46dd172f95fee511db2d2fc84f7e3572826d5187cb7121a42df2f142e8f07d76f7b7a17f2297990f7701542374e00ef67aeea3294d0293adb1ad83a898de1ddc86d2c163c02f571b6d580d052161070764609bca58a65ba76386a9c769a18e4dd0092bfd375149f785b4f196a4b36161eeb85d5aec93a204479b072c93e436e4bba3195f694d4141fd10a2ded3f0b5dc1127e4738b193161da1f02bc4db056cc0268c420d67289a62f68e882c1478706b748e130465247aa0b359fd055e61e5ab5fe8b24d5fc1b457ae803c890e778cc0e8e2eddd2954298480cda781e82d1e54fcb15cf5b6887f36ec4bb39773258c75b0b4da199c2f0dbea3ca99a39458e80f832a8d74b886e4ad25fa5f61f8ada19df7786677593b7ddd6b19c40e44063c19030253abe9ca6535407f569c08557abd1350c5137db3f1c7c38394f49065f317c12a073b6e9bcc5b484d8856bec08a4ddc7b005ce3ae1c4f78b000c68aeeb1d18af7cdefa031bf7faf5050d4691350e8430c9003195b165713fcc8fda707d696eab22cb044036ff0004f9fe18bd2ba0f2a1679d60a49ca5a1b01e37e248654dc4df0b2286e0c424b90457dd256205c296b5243c10686b506c6c456c5df704844ed1bfdbfa45e6da646a04c0624a41180c25d8b5309ebd39b03e48d1af3a7d19318e30a1486f2663ec0af6ce7280c3b26685188285bb52dd243e3a57249d849010e1aa109a1e0f401a03cf679f52d5051e908ac08ff48c6927180ba09d47bb8df74271e1a6c5c4476006afb0b0da1838adf203f696f4e47ceea324e5bcaa35fb4eaad8bf03135064ca38f7debf6ead8768dc442e7d188040fa316b380d4ac204f15bb8217e2b1cb73e9bff5958aed53b3cb7eeec0287a708c08028070c1c87ef6ad544d66fed881da23d04103e35bb21c6f12922b0a0ccf680408e9458681ac2fdf7b8ba7e7c8868236bd6558e01786a46fc153133af0c34b548e25032a8e3a62d34b3777879002b1d0ae05a3e41b24444e788ab82b3700be9c542da8cb31091f75b389025903807b435958ebc102a48bcc741ae972098044b4bb8e24cc889cf9b1e760a2337bbd59181431bd1727f9259cf86b39ec5ea062177211b7bc94ed3a67e53653272525aa8fae66d1c2dd39c4c9ffd2d5e4345d00378276e80c3a5daa4d538467a9df95324a669b9a09899f55ad30cfdf1106c2ed4f1d02c9253c290f2461ecc9e87682b4951529172317313a4784151200ba4626a8d43ea3e3c8f08422b88d0707e70e146ebada575ea958edeb5728786d62a4e6032196910c869be28327654230bb71efe0af79709e50b1d2067d8cad42de94d108da355e2534a63461c8a9c61604421574f35d1ca314c86064ecf46515c8d6865370cd566117abdbc915a527ffc0491c2f6c176a231873a80cac9100fee0180b06030a960535810545f4685c15f0f4bcb3800d55500e490e608fd517e54f1a41f893048460f7d548f483f0427b6fffcb871bd58f083b602b7a7494226cea5a1ab354368c4897bcac7b88f58be38497c82db9b1d93713841e7aa8e73dde1fee7f9c26a7c933ce7a2eb27b28cc8545904029796c87174abbfb141ad6a3bdcace19a1c9deb3d99152bbf40cc7870a19cb9d6bfb46189cdf6bfe3d2e1a58c1f52a81e5e9c81f63f0dd02b935a77640e9df09088db85d54d10780d89a60e2339d44a5bbb09f28bb60225b517462c7a311c9d031ec28b0158ecb7ef26f900b47e2dc6a231845be00af0e6924211a9bb59cb52ba23a8e287de1dbda08b0512cb426c49d2a7d841f47c83df20f24516672cfdd6b92c1d52a5f138850378b354dc0609fed98f2e0457d8619006cef528952431dce4fd5be8a0b7db27c12a3aa302382cc390ab9665a898b9398acff823e09fb4f0eba4d0fae1af51018b15ae90e9e6295a52eedac22b6d9ce0ada48d3ca159f10ab590e2a3f442cbfe54dc3950788d3d0902e230a52611bb2cdbc70d927ebfabad9fc348e8afc3c84384b24404bc042f74690b16b992e71d667153cac471c72ceb1a76be90de09934e083639b584065cfc024af1ad615c40d619a7032ee93f588bc2b951c6019761daa4c6e0369ba7ad6100fde2a2001070906be43076a3b6bee9e30d1ab047d7e6959f273ad2d0bdfafa4534e64ba91bc3b29933d00b1d665bd877dc80dee28bffd2dade7b6f29a59429c9143806f705fe0591e40348882837becf1037c86e5419818120840d4c77b4844d25b9dd1fb79ba641fba474f0dadd1dc38322288106545442c06926bd759f000ab7bbbb8b60b1c2fd2a01ee67a38f275c638502b8fd35882b6ebf66493e4588dc862288276ef715d5d6fa3d13536bfd010a0e309660c1fce084167049582f400041a5d0040a061044707881e4870302891b5c9ae84901082784909c68bd00628a15b42441b90021041d5868d02201d1041d569058794b25f2c33eb16221821a3242925a21828447b46259224e72d894001a1129420eda133a22225aa0322774b615f080ad863419e070c5aac48c801216890e7589210c0738502484ae2a56306990aa506e904be45025a02036013465f08414f8133f53065d04a9b5564e052e80b7d65a2b1343fed55a8390c1ad2db0a94f2ad12454962b225a92fcb99f7d02acec8cacb16f9474523ab51c2c8ccb3e2cc02205f6058e1636dbc1b3ef830d9be52c892be2a30890e934ffb6c8a5da9b4c42a084e0c986b09a133be89083fbfd434a7d74a8e2d22036f3b21cc9e3525343816d21c2155a643fb65ef6d1a10b8c0896da80c46a41b426ac6c410f3d0cb1f1b28f901f341e4b2ffb0809828896cbf0954c840f1f227eec604104cef5f383939e1ca41040c3ffa58c96ee5eff9c0fe3fd0d8dc8606c781f8c7c86f1672645ce92aac6d96ae11159ffecba6f3bc9663f77cdcdccb5b9bb1d3ec3ede7eed3e4fb77b4d3a1ddeac5a64af85b24feec68f0cb77f6faa5cbe87d6c222b423e84b08b37cba447bb7a33dc7926c1fa920b9fd4f057b06ddd3a17993f97be991d34f8fad3e0db0f6bdfef39fad65c4c106b7a1c321af1fda78c9ed1ebf79c87890f6f7c124c746844c6a520d65fb60f710eff22f46707338bc4f7ae08ed607ac2fb597e861ca9b09c67454eb02c7bc5fe71085bdb042f8410da20ac3fdc5ce82b3dcb311cbb222e2cdc02073e495450fa627aaeac355766b54f302e474ce544f2a4b807282a52b8990fab49638e8947b5622a525424d194b449925857be922557be8c26adda24935cd28ad473e51320a4b423218170724a3a2377aaaeece15a7dca48296ea5e44a8e45e269932472e5cfae2fec7ac61895cf10251e67d0900b8e1497c9fd48545c7cb8470aea534b90ffcb6d11bab2eb640f4e25e145af2b83d1d17969bfe8509f3e8b23d427d8824ba21279ae0c48aefcd4950f434d62e373aa6e75e5cf1c6be33ee2bbca69fce5732ba7891e90b7a80004fb71249e2b3fc6047c2205714c8ed3b08d555df9a4568ad4e2b99284041f3706e7ca2f46e7ca18d4952421559f78e5fd5b5a4e5382d18b5e4e683f3e0cf6a35782232558f1d86d0bd0950f4374afb2f7b5fc5cc9a93895d38c3c1818441f3fbec86b69b94cec481cc72191cf0149e1922cb9925bb5ae7cfeb89f2b9f3f0eca84a4966c394d7cf9a49ce8c1c0105ff422af044ecaf148382e23bff2dc2fea64aed53e7197e326f40311396356a894ca75c0d30327481cc6e86540d990d3b08d779990cb64da9039e77cd869288d47fb6c68761a9194913ef135d226b9693c7d620da50dd17858afa95c463ea79a1dc76a138c0568e07abc0cc865e4f3b0919caa4d726ad96b4bfaf49184a6a6adfaf4d2fa813212f261e8cad77ab46c9284faf4712a52167df21c5cb9f371aa2b5f53554df5654b8688b486729a6a233f03f24ce5346c6344e309ca5a9eadbec883f5a173a5b6d595fd666030b98cfc1ca7a99e14b2fd5453f5495ee9f382d495af0169529ae6c2d192f4897d78845c293f6d75a5d6ba52fbb9528372a5d673e5d379fa6a52514844399191c89551e74a8fe9292589c10f74ef20d39c3edfe767b3fbdcfbdacbd133ba0b902174e71e3d04b1502c232f60ffbdea8a85c1353343e13e4e39a7ecc186b6dcf4e9018727953be794d17296e4038322c0e0c9fdecc71b64dc27a9c1cf606ec877fad5b5b9d5cfa41699051b03a00fb71ba519f2bdbb186f946477b767a3679779175f76d12bdd2c6a33e358afa7b2e38fa5cb9b0b03b8d373ec61273ffb20ec3e18b719cdddd42ed3e971e92b9c113d0b039b037ebb13768a9d62a7d829768a9d62a7d829768a9d62a7d82993893d823dc2a88a1d42bdac148b04fb91ec116c9451151bc546b1519cd828360a0c0e10c6ae59b4db98f705cddaca32c8a1c819698531ff1c47b230e2944ca6ff18ced942efd34655ac0baa8caab4b4b4b4c000c20e7dce52ba941e5972dcddd99da5a4ee524ae9d5dd99ddd9dd3577cfa4f0677fd2b57649d9adabdd1633c7c487d78d9663b8bb4b0959524063c4202d020f7ef4e087949107b28994b1073236f9914d66f99169b289b6450d34711b348f99d00f1d020acab9fd798b06b966a7b09431caaaa9899456a6f7056f590568b4e3a6b51658c164ba308a65f372e409a2413428d364ab564ddbe2cf0b2f6c2eb29a96a97090c2a40708d2408809caa587079dcb3fb8dcb34312b76b0093237afe5ad80078f9610f963fc2c4e8cc8491cb8cb598092297817a94b81f073161c5fd388be890adcbecc03dd8af421da1956a09eb090096a0e2e30325977d7cd0c49dd1f45eb7a301ef0e588527e34881f68ac8df72b0f10447e0cb18d9bb49a589956a15e2c0326b3527bbb0fa55ee1982aaa0e6f9719d49eb45ebc73d435005839aa77f26adb30e41150c6a1e39a9a4b3fbb86708aa82e6c7af0e4155942e87fc5950cddd1c7b5850ddddcddd5c45976a099614434b7812a0c48f14523c21f574104bf1518158215c875cdae2548d899fe32a136ccee73b7ab9692d85fd3ac7db5db469cf3bb05fe74020a894d5bc9721363ecc6c1643197c20cd8dcd6ef4d2838dded7421a48e7b449bea86b9d36b18e3072bf0eea13b38e20d2437d625611496e53b9d26b210c5bee2da569d8a6b3b8f2abfc9eca921067c69a462fe2362d9b1db15ef17038f7789c8b161358513a88fbff4c1d74e52711741b70d92789212efd8a83bd3a95e3341068e6a773feb23a47f33edb3d99f7cdc8ff4c6de44a08e4fdd5391d0e8e7143df9d5a283ae7a6dc7f66fe39ce6f4ad77b600b928c4b5feb5cc951200e6601babfd6f5d0febab68e061e369aa669da43da7d25c0b954fb7eadb1ccfb3679292788c746c8f509d287a192ca8bc28743f23ba7befc2089957432207c1df9e31d6bd3c7216977587758774bda545215b6b0ee53645c7a29a2e3534a6b866159c5bc1e9847af8b561a3d5523e491c59723b1848359902f6bd7a35e577dbeb3d65abbcbfbea9cb5ce6f856f93bc997074a3c762028acb9b8dd18df1868c4bb606f6b3d76d5f209b9f75edeeda1ffd58a594f12b918b80cb5138218bda7d3a90f030cb15967d90e85c1f243917be021a6e37b1934cb0f06514ecf5bc61e07a3964371bb555f6b35dbd0b6ef539ea20410863f47ee6e31e0803fbd52be32422631b8e4840694991237344163ad0d1810a9b693a299d198e5db9ec73448f2a6c0a52aab02e3ef0c16a526048ecf64410ac0a3e3461c48e0a8cc88962592efba8b4d842450416d8ebb28fca0a2558ecb28faa6552b1be54c4cffd7e466e91c518678dd1b386588cf2090b4b377a8cee750854cee81ee710dcdddda7cf4be36d4e9692e7cb8f33c638658cd13d466f0cc6e859f4185d13f58b1c32b619904f94ee9ca316f936a7d4643684c56b4e592fba9285853fe59cb2d37e64b669bcb9738c7506f9a59829e59c730679e7943fa79c536e1e277655ecaa34ba8b341a9d46ef39a594524e59e78457a551c239e58552b329008199994b52426f9fdef1bcd2a7e672def851c3649cd97623218dac6da2915d19d9159616927db1c2c2cc2d24ef7a74af85f4e2bab4b05c49d25cb61bf94e7a713d05935685bb7bee234e83e12577f717cd9d2ab1f0e58d0d63575a7e24099a90a009845a40a805845a504ab9a094724129e5a2499338251667cf9cb14762b3024d68133ac50ccb45eb552994d05f3699ef229b10b1f0659315ee898c4b1f9c742503315c58541b02fbc2858d449b569150e537d08383827542cde04adb4234b2975da92b2c9ae93b1840178e0e300d5cb94c3f0ab82add9e0efce118433676129031811a76bba92b2ef17a8c8ba9198e1a0005ddb887a38536f58f9890620cc7b27d9b3a966d6686c5855fb87cf1752bb0b31418b6c849db0d74c1e11cc7fc385c361b9f820bac7f578d59b61bbbb202e43cdcb926d868a1d0cd46fc5c6d149704bb68c101df037d6221f4642ee4627b20ab4f2e171e61c285a30b1ffec027303bf2e3664b6e76648a9bbdd6a7b79714351ae05223395cfa73bba1f32bd3b04decd300ae9cc10fa457b92d7433389560dff2d0e10951aeb0a2c8931358e14d72a20cc10401375f3feb4a4eb37926affe57ef8684fd6aeefb774d9f4a26d204faf47d0d53e9495ccc4b1036b6a9be7f5fff4284bd3cc6300ccbba529bb0dfba1edb8f44a28c061e36db6bdd7775a2df36afc7f65727daba2cdbb6abd33cec65f4b7092bb509f36aabc085f57e6e492232f61e6c6c130c95b1fb74cd1ae05cf67102c82dc0659f2440b7f6a908f6fe5ad4e8261f6ab3ab0f6bbd2952036773440777e35f7773615e39ebedf89dfcab93b77fd239e7c729a5bcb4a30d4e76266bf93c6af0dcdeddbde38bfe9f8c2b9f07c7901e8c8d075c7707c00300001068914814809b653cbfab5cd9c9ed463ec31cfcfd371e70dbab72b3d8dccc7d353169bd24e6360a5fcda2286e0e83005ceaed0840b6cdb07707149af1770704c2a08cb44d40a7a6519a65d0bba001abd46d86df6bbb219ff246019a790f3ff3c79e7a1f8f76e2625d8efa7caf2e87ec0b814bbd1d10b814c6f6280a415f11cc1bf25a42364f6029c03426ae61834fd200573e64d52800d3d424e0cadfa0b035a03771ecc75df9f283782e6b770cc35c83879c2b7f04d047d3c4ec3074e5262554f1b073a95cf9709a6ae4afe01b0566109edb37905e4572fed966859691dff3e195bf62042b93f0c16d1fcb3e4f38b9f3bf19e6ed8773358a317bd8c595df3caef655d68fdb8df9b00b9cfbd560822b9fbf1aaee67db07ef0aff7edc6fcac4a952bc33bc8c56a97837a3037e0e581c1c621631d108e7c60f96538ec20902ce3748c78084ab9dc4f80829cbca0845b2dd4ac305373b94b709b41d2eaa783bbf065c481e54222c169dcfb4050dfa3ac9e83e07e1eb30c7f23b81f7fdbdb1fe50ffff93fe2435e007fa48113c01fbb2f7acc07e0871b0d786de20d789b86f8feb2ba0c3ce232d2085a651ca44879f264c99224498c186181e2e3c4902b9fbf7657f9818c4b0f33d127fa391a59db7d3c7638b79783bf191bb2fff2597e71be3c1d1a3f7bf7d18757c43e5edd77c5177539e4777f5d1e86c58b7e845786d72ec70e1a6e7c1ddacdd1cfa28ec2d8a8da14fdd6b197833f7ebbc0d775d1af6e1ebc74b3d194fef65dddd77fb9c07fc9cfa2f7f5431deee5e067a9b197e38b0f67b8adc36df433cc8de718f34c876cf4ecee33620dcea31b42e1bed1f0867176cefd1bb041168b51153b8575810d1a55c182db42b12eb053d8292c11ec14168a25c2ea9d0197bf035c96b9b0ecbf4be4b1bb4c562b66ad7bef32cc02fc9ed238bdcb3db63d193e72707abcbda18eec782463be2e266aadb57e35d51905e418a00130870dd0ffc55001c8e5faebfbb2f7e9a831d51f587e1a2f439606e401733aba317b3378068f186ab5d699b14e852decf5145e32c85a63b3fa31d4effaf5eb021cc0513093ee2744410671cfe2d618bc7ed7faf5237cf6bea8c421cb9653f4dd4b12ec176f658f39467d39822d92536d5c462ba04f2bb4893f0613ff54feb93ec47ef4e1c7900166818b50ea719b8af8c72ee76dbc7940d75ee0f384108c262a14f11285aeaf0956ae902763e1c142161e602c626767676767676767676767676767676767676767676767676767676767676767676767c787f8f991710942202ab7df873a7ae7b48f180481dc95dc7ed9d373093472c5ebf2865715c1d49c35e79aa11fcb66d0a2a67943ad8a4080615aabb716188806bc34e06da14d5d33d2b61b19e20ad72c2d25d24603dee8125d5cbca14b15710d0ba5209015f66b179f15d34401f8fad3401d2434e438dccf38ca793ce52a5ff1d329a3d7d4d4d4d4d4d430c3c83416124c81c0d6d4d4d45420db415c0bfd900967ca542a954aa5baa6a6a66685a4bde0a6d050e3748e909050a75ad5abee6956b7f8654ca552a9540a042cc4422f52d060c048555dd91e8ef52dd34f0b020d551c9bc3e93c8a6726050453a9144c090d354ee7e8cca062abd56ab55adedd40a9542a954aa55e6054d0a28de3c01c863c178542a15028aed55a8e7b20b8823d90055bf00702c146a15028140a42a0570100da8c89b39555ab7d136aa606b65aad56eb51d7434d94444594a302a0592bec6bdd32dd19e71f06ea56e5388f7a9ef45a9e535feb34d7b196e3fe4da6999919d7f51c8eb183e7d40b14e1907555d8c2565b85b76e905974778fdea2c2c29f974be9312b42ac08319f4b73658819b18f1df61c7327e9cef9991096db24f21982916b1bb68b440f451e738cf995dbbc8fb39ae759378136f99b38ae46fd61e37fcceafa729f34981bf6d2b797de2814877acee81db3f83ab89b18a3f434b8456c1a1ff46d781bea1d91ef9d3ff46a9ba27c1ddc9d2fa79411bbc1ea90654341babba11051f65982e40c0d0d3573b70e6f9618502a82750642104249d2af69c1df03ee84c8f56777772992cef4c91f9aa0a6e6460376ce7e137c97734e034439df67bb9c73b6f4da2b12dfbd18af461cc9f20e720cb657d8affab8f8db6f91cb83610f86becd111960d3e7ae7a5fe97166b867afbf7f0d3877868ae37aa9fb080df7dd7d50a8f3e9f12efbf80cb932ea0b7e4d423ed3ecaccb7855ab61e5352081dca28fc7ad41f5d5a07363ba041b006fcb8134fc22ec325458f8e4c687397d8250e8ba57b3b07cd9728c1e16d6232ce1238921444164f5847a1fdc584a64719985e4e7d65c662961e4b252ab5b80cbac22436e144256d69bd95e88581f767ee571fdb4a9eea0f7aa372f32b07ceb853dc4300f0e69533fcf0b11cb32c49eb88592213cbd82cb3e370012858f164771d9474992abc4081cbd24613bc6f85da94dd775714b8bf3e53c922d5d8f9627b1b0b43c935ade5a966f69f17ab4bc772c5e4bc7dc22bfc5b32b8673fffa5ccaaeebbaaeecb7ebb3cd03be3d773ab81f89362048458985377a6dda5e90b0ad62e92c888631c60845f682048410d239e9f47a4cafdb3b42870d636c27d90b9297232c63ee43b6471d5c9b7cb489ff6565fb3f48e5e248c82463ffc17db031cbb8f435907d96e29a8ca422faadeb24dda3a44d70f58daa161bd244db4d7cd17623a2d77643afad06c31b6327a9df28972b52ae3cf57ac531e47f6f52524a690dbe9b0753bffe25ca44bf19b176b4aaacab6a90d5a8ebbd4675f0422316eb48a3ff2ce416d597d159ede0854152245fc8174ab7692fc3471d4bb7d2c900af49e260af57a311e98e7456149ad824819520ecd72809b449dacebe0d6f63ff45fa4ddc6e6aad32da3e0d34d86bd3be5e6a3b1fb517402b1793b5767926ef4b375828010b57b4fb4cab3e5d2faa2fc39d5932449304fac4ec411da7e94e22a5903e0d8110c28717ec607061b117fde821aa42213ada853a45f48a33390dcc01937fc9af50671bc27603b58b92ec4509cbf2244695f58fd15f0525cd62cf25aad1a71ba514fb09d0af4129a54f3f66ebba1795edc76aad15ebaeaec45b26dab6abcbb06ec3bacdd3baebd234ecca2a56af4a5997f665af6dcfbf75a5365daf75dfa6ebabd3883c93cb5c3ff290b0713481ebbaaeeb495ccca8eb5e8cb0f1356d7b51d743341a899e6f26faadd3bad18b4422d16bdd487b912612699b56babc1cdc5a12059218634cc246588a26809f753db2d7bacfb2ac83de573be30eca8d1f57504a5983efcb11db7c2f140a859228160ad52cc85a25596533ccc2065728d47cd8737d9497077b56ab4a39f873bb81b06705678cb00e594bfaf4d327faf161507c0214b34d835eab4f166539c2b220cb4296758b8a3ab6a2ae8e8140a02b3d272dc86a537c185c58f928d68d90ddb1c11229238c52ca28a594524a295f4a29a594f237958d2f656441c61e83249265c4ea32956be4d2aeed26fb6bbb710ca39c6570bba9b5668f751ce83c30da701461e15fbd69da76d3dd35f8560fa63f078c2103dbcde55980b7ed067a37d8f8429ff88536c50e7b199e75d7d7380dc61d6b568ab4d0343eaad8686fc3db681fbfa64fd856832f06b5ff3c703fec75705886410cf3664c264d0135c32a7683fd2c8e8c031cbbb05fcd8db76fac0f3b1999d7428d5f849d9ef470b023cc171dec679db7c8c4c63611c1f5697efcebad5f735e33e288717651ced95d75d63a699c317a560c71f8107a1cc7f0df8cd0e07e88824cc6b4ec8611421e64dc34d1da0048675acb6c1b1136bec7e89a111bfb47846d2b9d9eec68a188df922753eef85198c00584cd31a243b7a287ca659f24aa99cb3e3580121fba7b1fc7299b399301deaf063a0d0358267e8c31be6f46ac7fafd0a61958d30ab2fa9aed9328e37b89ba4ff417079d37a8146ed705b1746a06000820007315002020100c0804227140208b535d157e14000d78923c74549cca8349920439885188188308010010030c10304363322500f82043d765e8920cba2c639764d855197421f3ae64d6b52cc3d3a58cba90597740fff714deb8ab2a2e935dc8a82b997749665dc9b86b9975a18c5d91a9cb32ea9a0c5d7e32bd2ec87c17024b07f48f85033adc28146b1d6de489383c88c993bb80b27c4d2ce70504171a77cee98380b0e67af1c9f5325e3f1ae49c52d542725fe0eff8ab5ab60e8166cf5c3a40b119a552ded9f65ea2d0f6628325ce62f6405307451ff7c447d5de0caccd649849f1a41c557bd23ed14670cae9064af6e8cec6250fa488e7195144186b6e29dba106a1cd4a5d44e48d68668affb2dd1fb036643e12f430d9ae4544d9189993de02ee82227b9c1b18ce1cea5a6625da8f95d6fcd7a0c13c15b5addb89481bb429ced2cc4d848b0677a7d0fc1235c070415c58d00860baf7db2614e597bf15f1de5958b142c15d8adc8e4aa3146a0956f2c4e9cffdcd8d4ef693e3a4b1d8072337681d1997569404c94574ad9c7e48110463a34e9ac4e590fdf17e85d2304b5586720f3c62257c6f07afc8cc995ec592d052929d6d7b28941a6a7f613fbfbc5f7c57631f9de13c8a23ede9bf13ff578742fa4a1ebe5ebb18531b0e6791e04c4f7d3cdc18e565498e2e06adc75bb372b1d72c7be1564fb4c3fb27e72523fa7f39aa78cac8caecfa5f6db863eadcd68215b22fa7122663fa637b4442c4bceeff10f82375d0ac8d2eb18ec7d127d1a55a523eb5a3c9b3e6d1d1f4166f508953c09298cd65825c56e7e9e6cc3de5ad2de2effd1db9ed7c18ce099826117aa2f39ac7c33ee20c876689c1304e17ea169ea650b9b9fc45d35fae3d82407a7ff03414819c117db6f23febbd7041135761bb74c3d41841a0650aba9a7d226007468876388ae8bee26c55e0683df9025706c4ac0481c747992adab0a5c6cac5cce733d9e82616f3cc7c3d8fabec8ee3e6355b95686de5b369ad759a6e2aeb3dd5c54217e6ff8f8ecc44cc1ae82f1728469bb26365225eb556f4b6d60150e12378856a6895936ca9f88e8360ca442c43c1cb065b569b49b8f9a948e2a0816de22d79811b156d2f7bfa6b5f61a838e331a9c0924c6e50aab6390704d1cdca06b6857a2def07b08d51f4793322c60f2b000165d195655c6504eba71b6e10d6ba01b2e37178a44478b4a448dc8eb5c1e758f87c8b0ef750c8b06e3b9f20fe0bd73b16405a6da4916343d3c729aac7822929cb0cc459eb6923be3f45664f456e19824bbe4bb5d18305b4f7ace884f8660b37d53eb577be91e8d304ae91ba4f906834bf4f4a536a5b780d0657daec3704a692c7fb6f9afa927ec05af25346e5bf450377cb37a391e5c02d4c0ce251b2c87a76e484188b1697e017ec9bb97f6e57d56f157eebef3056512d455687d484391902f1b929234cb453617ca2dfe24a5760a51a01b4e204885cfebace24f7d99a008816f12c05e8631f700c359b2a1e1a087a652ba6378d9fc0866e732d67408c80837dae638214de6c8ec5ff914be5e400d693b84391ad59c8d2ec3283ad0df0009d8d8a2ee51fd79589081a7ef782aa012785e96f2b5a0881aa77b68505774046c92ae5bedd43b1d204949ef21199b6234b16c359546bf72b6d18a40f28ef90878ea449f2bd1d87ba40c3630edad4ae36b1ac69792cba883b513bec4b6bdb9c708061fd1a1c5fec699bc193b62cfb99eeca7d96399a046fc0b9b2064452d59c50898564a7ab03ecc0da9c1f21dd4c6debf604990d51ca90f5f460ced2d98338f3390a777c441187b98f84b10f80b4be5c10c92439d22222b49a03b8e60ba10e0c13fa95b9223180c63e2aa122de0cf82c46b7dfecae4890eabe21fb624083dc5a68430b1facc00eea2eacb0c26fe76a32835791f4cb37cc0a9c9ac332c105766abbed9aaecbffde61d3435081f478f8ac56493eecc460c803a0061f52109730e6ea589c731d27589763be69afa2e384cf4554f8ed9b1dab874006a9d8b48be8091ce6c3ca001ef9bb431d59c4b4b4befaebf8d2c0c6a63126fc02a6f9436f0cc4b1f02c7fa292f1e69f2abe6917fa9565885fc1506e6a9038aeb4d9021136894a9be15a3b0f088a4c6d4a559cbc3de8199894ce4d5d14922751623f5224a58b27712a94c2b8c9a44a748c28198e2e1e6fcbdc649368f48ed6360628e86170583c0ef6d4803492f5de2481095e586c2f23a56660dd911ca0a39ebd461d012ac2c9a4a26516de176da08db514d7c5d1f15101cbe2b5319a8997114547fe72ebad0eee21460d86df5065cb6ad84f4af4cf648ef0d5aaa08dda5a8c6236c598cc26a4f1ef38bb53df685a14d04ffe081f940c03b550784dcf9de5bd2628d9df99832e455a57095d341061f52080a0366d3f40ffdd8114ffeee785c6007f03c162c873c9787da07713851dd1871d326cf7611432a54004e74903b3a6bc73e5574ce4f40942b4e876a5325582eca8cb08540a1429d7ab0947447af4aafb1f4176a4ec1724a4897738d4bd612f2de49abf6eea630b05243e7a4ad355709e20e31a8a77214afa2d4d85f911043e97372d68473ace0a011d7d9ce0f749cf3d2be510033f3b4b34914d26a2fc3f1f17cfaa35a1b854aa659e83dedc6280345a973ff511635b795164f21401edd2db3ad90efb81d91278043d16bad540f759a8b19ac8df0754cecdf0385a33f46ffb250afc7e5cd559ff23a004046218933fd885c8c0fc1bc35a1f934c14379b923475cf22e6755a5ec1031dc0fe286c88f749357d888bc7eff6d10e84f0f35d87ea5830c7db4955e45ac27048689a3d1cfc27cf56055b00e34bf4b39158684c0fc52f7bf27accedb84f24e174c56e052fe5c54c973b1c7435e6f96d4e320b5c02e7d81b30baa77884933476abaf0cfe63edd3d64e49f41a7a86cf803f2e1d0d0c1712c58832aaa176afeecce2d2343494cde36ae52ef9a1e1542b25c55c08732f446a0be9b634af695e2f39567aa558f69ac1466789327c67f4dfabd00a90ba5b81d1fb99ae809d9d93590cba0056c8325d11476af0b596509dace02bbabd50682ee6d15a3ef34f1d9f8ab4a0fb7d25a93a504b3fdb040eac786f7d30cfeb67d44515522f8f6b74ba5e40425a97ac28536677cba367694840a2a44f672b68e2221ae672d59d36338f2aa32a72fd73680bc5d6c50ef9e1a326efbfb8220d525fc76f10646a56314feca396054419bc493d6bc507aac03b8b791720a2b37c1ac48844d244182f85433fcb2ad118c938fd22f0d1f28de221d5768383abc41ca98890b814de6b13a7da84e064d8bff4296e86ceb2f9aa1821f286fd6c4d3f9308c79d5ba6c29ff889412fba53f1decb0bc7049579b813d077da2402e1c5af4f53c39d27a664212c3ef6d2c027929ca1cf6f695d3dbc6edfdbfc071be665852661ad506d135826ba12f20659b30cb4a6c43eb52f404f93d1c32d8265ab1b728c27d8028cc05740997237b254160a6ce4054bae2fad5b4c588de51ab20b358c650efa41a96a3d54ca16a120f6798dc5f8a462830d67c4ca53c9525caa08a2d8a01506a2e2a66a1bdcb0118115bdafa30b6d949957105f5bb2fa05cf06310dd92525e506f8d3b168ad4cd43558c290cb02a50f27dc6e572bb60d7e72a4605bc788f3aa640d76dcd215ddd6c5b002630aab7b219f33e222faaaca6db338424b426a2706cebef345c3c78d36b43c78637d588b7775d54b0414e4a86bcbe2aab0c0d34ea3c6fe821a79c0860c5d3eac3c41c8c5043224486cf7f0d614623a7cfe46c40558a31e90e068e8491cca8032a3511fb0647c7106d5d70f61d23d3a99b6446246ffd4fbfa0c6dd36e0ce56738ec7d100ec856eaf454614429a2e862811d59dcd889cd29be398078e3b37f9e9e82cf1ae39fa9267f28d3cbb809d974215a2fe490282e6ae23910d50ed96d861f49d619a8662950db973a651e1d0f7301bf3869ed4a6748905aade15e87696f8db03517a032fd8dc596f4bbed334b2643297a845b48d0313797a1c91cdea51b6626c5a4f2f1ff4c93bfabf05233b7c0a5f82c29fc26414c87eba695468275b954945c3ee22f3bcaa055bff237e3f47768d6c54bbd8927781811cc8c14ff162229057b239e38cf70443b4a277907601cb840f0e2c4ac97e4028a32003560d9aeccb38b51e951c39c986e34d476d15b2e02471bbf31a425aabf8b73ba823e2ff03fecd23419bdde5721015c0cf3af5eb7e78b5e7939a830789e06bb3ca8f024c43a42c34ac12432830f691891ef728744ba766a2b937b2721a723b4aeae7ec45ba8d367bdb2a347bef5ef60c26cd8712b5d6c1dc9fc486f2e90d6e78ea602aaf67ad45eeb7c539bd2b16e50304ab52eb4851f401eed4c9db52aaa0a4e9a5a9d92155ff0ba47f9cb1c42fb2b531834e1910d473ad8324ab892b4fde66900479e035fbe019ce0f9170e119757cbcf469872d4ce21910ff78dcdc298d0a78489a4653eca822cd2d57560c12f68b17463125fd095bccf511754cad37371a586c2904ea9266f610a747dec6b47fef184cafc63ef5cb252f642facf34fcb739791b84da688f2e3d6dd9d20bb364d923821e18f52aad7f9b01fee798da74333fde46fdbe7eb71380197614b6db0201212280956de32907858c27b4961b2ddd5c74be0dabb5f3b49c94637ad89f65b4f3d32a3a9bdce5583abed2441b478fe0bca1ef19954b79e33282503ea8c6f69f926d1564ec241ec40a8ff93a8e59fac56855dd9c6b65596bd72d6a580228e2400640b026d1d19c41e8c425f61402e4dbe8f87e2064b89f2e9308f6a85da24287ae30a83ffe5e3c4d9238d13259967d45b30ae756e25ac24bec55e12bea306ea21f84852f5cfa1b4a2477d4d2af65c57a665ca01fc283486ad40c1c096b92ce7ebf00da4053313cb8b261c5df8512fd0647b3a09906210e94b62d233b04507c20bd98cf812e162c233da8476a137545d1706d5c73be4f8aa328d16d87678495296eae3343e8ca9c70e43386a5708b8e40c2ccfe45e444c587f6eea4ff9c963216a73a714273a919f839fb3ffad546acdf181eb27cc35ce7267bd0030a8d994e28900262794815c09736277a2ca28e41c18a44fc90d9cf0f0eac84280ce01235ba5ffe269995fad8612c1cc034016df7abc4c3e7566264d259141200782ad4f8e055cfaef1adccabe283ec0267ed02c6e070ab8fc547a6e5f1381c012e4f62a28ed33e248412c231287540739891ef79a65c5b842246efa89d5592e158bd54a2304be2645bd413eefeb3f22b1a6074402ad057983185a328679b8beab3210377c3b64fccc1dba40dbb36648e256b14f64c6d82b63d168d1109ab1c0bf307ddf8ae135e4fbb17a56041794d37fee36c238d9e7b5e534198677828381923cc49089164e74a29495b2c6d73bb9b7f3655d198dcbcb40e810022cfcd889e89c11c9b69f707ab97f5a5ba115dd2e759ea27881118e475b544a1a1b5b32f6d0e4f9327fa699ce631554d2b097e4f0d6bdd472f9bc075ddd7bdef1f4e94adb113b5948cabf53e039310a5ead42aa3e42083c79aa0540fc2acf7812404b1882a8eb4d9fef6276a80e8f67cafa36dec28086d15b7476e439c1d41724d13f48cb9de9e5fb33ac3e87135e7b794ced663c3adee6c9a39e0d3d4f77d6881a6e3ed5ef2062cfa3b60989fdb38b1a627ed7a4785b8c1be90f0cd4ac259f9183a2a90b8c93c459378db286b3d606d76606bec2a40871a26b00190463a4b9d716bccb6b72c727abcedecbba31275f00aee4e09066a148cc3337e562fc8c37bff4da1ed322f9cb72fd63a5c816046fbd3a31f01b8679149070b8a80081d7db37b75e5296c3adbd8f478a4dfd92cfdf476e149dde86d1b41b0c0863b6fa5ad5aaaa8ccd8dc09d983cd2b955ea3107bfe36637f107e78d835784ad42aa92ea8117351754a5d6ee4a010097aa0704723286bf95c0a4a1e64e1978370fb22ef483255b9fba42f5ad3f3b2d70508f862ca5fd7937e0ce55c3b8214e0990dc553f104ffe7af45e53fd5451ab40eb50dc1e2062d38d4ee02c9a6f065edc82c46ac008bca8ad38b0b4a05c7291617eb9c8c0fae9c6cbdb4db186304c6dda541858768bc170bcb62ddbc4debbbdd2e84f1d4b2c09fcb623646d11d4e5ba47b17baafc4ee9bb5cd6916cc994f0961a16cc9feec02f3f21557dde11f1017f969645d941faa17cf22d29018a0cba3993dc83cac81281fe50d930b34c5782057edf2dc793fe0a0f0568f4b65849da4636c5bfe900b39651bd835218b5134e1cd537b928e2063b235cc99a27818c0843af181edd8e0da5a07c969f680ed0156c8063ee7f2788e013181daf43945f045e34cc06e604ce36c7c6bf523a509f564863d01f3ea5c6bea576f0da9012ebf065fe4d098979f84f9036c3fd3f55eb7f9530904b963d5ae07f87de8d81b7ab77b56021597b390994c9523e0b0f48167284184aa154ab47b239f1b7226a778b83d541e71c38babd50f8d1ac48807ebdd15de3d5ed2c6001f73392449909aaffe6aef3eabdc29a3173a8a4d95fb036503dd23bd0ff4fc824596eda9be12849d40864f00f73843514d984ca2fbae00d4d28673a304507c31730ab91f0426e4d2618a1190a8ef6c6657579d9457bca8fabaccaaaf137bc8054b48d1c79756a54b3a45cc66eb4a8b8284ba12413150d0425c6009e513fcb9dc63526781ee479ba96c17fa0902d990446b5a3742c4775f213f00f72089976da2e06a96840da61fab624ede72c67dff8c859869c32956a46c293ac69a9955257ad9775f2f2ac72c721ae80fd2347e7fc413d42afb03599a9bdb05ba35b5b3d52e4892487b1b97fd33cb613a84d8372e2bf63d112af7532be8c46f189ed4495aba8d44032398b31ebba236611f2f7e84df7f1e12df87c24a59a5bac9776ce0c3b38cdf86ab6acccfb0c90585cafaae2697493313f191c00891d16d13a689902e7db52f96dd9ff40f1f266435caac5059671821af96597fc2675061587ef559c6083348575f6eac6fd3c75636f3b2dcdc7593973f20012a66cf01c8f26ff95cecb3549f8956f6fffae1f96fb865bb1584eddade0704dc9afdb34441cee887f88340013b9b8008f6d5013d78e0123bb83b0815e2335bad96129f3f68edbd1c86a1dd932ddecd688c59f16d0ed638008439eb1adef9dae087428090a05715d700e651b8e18368dfcd0cc4ebc37e0e33a48710dd97d0976e8da4573d8c8a061148a267eb3f6134436a851c2a873a32d44c21c33b8be14b26263e53157a4fb420b1d86c16fd1015b704383c41d6643ed09748b7be8baf573fa5d54ee679b7f9f6c3bc3d3ec37b868f3988d683b4132c5ec7cd7de8d8a4a2e25dffc69f02f96cd5d03223ca6c6941138932533960148a7c2270ea313dfdb87251bf9980dc582143219410d7bb4674691ff41f9463d3aabb8ef4a868968d1e95687009609822de09e603aa9d92aebb52aa3e863c23b5e5e4becc4146026ba84e93991316558e5ccc26378f262b64939e2279f8e27f2e3b271b7c542aac5bc0a7da6c7ff230738bfd877b92b547b2c24ac612f15c61e3294406b468e610e3f15ee1e475871ff87619037caf8a00015cf93ab1b7ca0f1ed6a2659a488942516c4c54ed823ccb2cde2332882e14be95d271b389c49abde45b03986704b642a0c0ff562b01bd40aff44bd4f0f31a56588eec765460dad4c9084c86a461eb04b6981571296359160cd6ed507256ea430cd97e74c2e67c67301a7d0b4191c7c4196d2de63ef9e39cdb2625d361781e0813fe9c2df6a3eb5b66bcc6a9fc807e562b3e94c281510afa29b18e7328f1385021d274977567522425a790ea80dcecc8bdddb88e8ea448b7ee22fb2b0a3a698ce017daa99dccd0fe123c96083ca83863cb8cb77628ab2fdeccc75f1a8ea1a650c90dc24ebad70dcea84c3924cc0d2e52017b4bf33ef0fa807c3a970b1830cbb96f74bbe5ad8c3782a8453bd5d8eb19d24e2dbf13e1e9b86f63cfd7d45ec834395734ec44bff8084bab5f622730d5f380daeabdd879876abecd74f9041b2ff19b681aba9c8b08275ad665560011de534f8a811905949e5fb0192f6532a4dcd17b1f1a942d39b5eabf2b126595f72b30b39e79d247e423c7aab9f391e28f4bbd33a5ec8ecb890a049fa9997cd2c4741e61bbefcc6c9809eaec12dedd12b26ac06370f87be0d945314d19c5fae8a0a591aaa73507d6ec44d22ae89b51fc5442dcadd891d1b2538ababe6a82625781688470338ac7cd363bbb45c3db1b0e4cd333317808f51199a88d430e0c93ea162af453c33eddfac419207e8dacd621b623a8d08f850f2a16abe7863cff28d70849cb147d7e374701dfbf945cdfc17e0fddc7bbad49c038caafe496dc0397f387b830a28bdcfedcdc4f831d2a6cd5f77e442f71937fe0baeaa343ccb57cdd131b3662f1f50866f9140543a153afcdfc3a2bc69052db2cc6f8a4b41601bc04e061b721188d1fa3f1d99754c479b0c5d99965d77d4a3411badeeaadb34c8ec2ecb7043b2e429c03e7fcfca58aeb5479c6eb619bc92c6a77e5847eb2966f379d96a8735aed61bac8a5a39ad554e570b91a394c109d403f152484cc32ad0e88c3255fc706a5cf12626b0f29e75b8425fbbdbe42e8bdbab3ce585532eb58026b692c4873526821642d606d2243da95888a08cca434c08e3f67430998600901f606056ea8627d082b40e0a6480a5d983d82aa4e5dc44708491363bd3fb9d60fab54353c9a80f4b8e74a736f8b76d97e9ad58f773f24f78919bda0a023431c351d091770554f6dac3429c578be6187c00d7d515f253dc394d45e48a41a14e6324e856b80a7682d15e13739fc26e57e18e4541d00ac3d0e0bb9ab3f7a3ffccda0d606f90a864f4f214e8ec2bc654785c158b43d43ce4afeeb79b13ebf2c2453b00749809e72fa2787367759dadbdbbdcc7d7cddc86ca87de27692aef5230b726c557fa20534029fb759e8361186cc6ca2c78902f0978af65b08a5ea87b39936ab36db72377ce67f427953ac4c5a8ad4566bda105f1be1774ead0a9e3382ae2279edb4208e20e3dc9be4426cc88a29340e37108f1998c30ccca36310df42b6a9a3fe205e2249c56d3f2b83ca40778239195e19bb60a9faa4ecc52358ddcbdede8878872dd60843b4501bbaf64fc6a1b0c478e505dd8eae7debdf1805caaa3cce117645ed9ef6ecd9900b11fbff6028835be25a39b53c4acc5d035c0b6a30306cdfa07a9efcadcb9600eae138e367bd51661382aa6bdc26ea4c2265530e93ab8697201d545e9d2e7eca7e008875431cab97492918929166e6a5c81692959afa220a6088c4bafc629681f4b95cb952fbbf4436cc7531cbc9bb22e1308132d3d62e65f005314324012e8b0b9d3248420e09d7f44e82a27672f20aa8e5034e2d2fdded1dedb77d7ebdebcc1cf980ceef509882f0783fd8403bb5c849b4b1db788cd93d79c4fbbdc3820699972349f85dd1649869117a6967cb320b4ba334e6c0ecb2f4b81eefd81ed12cbb893f3e575ced747aea999a5a9e70382aebdc4b285127d21842cf83867908fe737277d91968bd3c755176224f38173381cc54e5dea180d1e26432d8c1d704662a4398dc72e6214727bea01540231f4f785534871d2da971fad875aa88210b22c4df42446c0dc992c40f0367c251da215500479f7996318f8ed5464ad5b631bbdc566425ba70f71f7aa72b7a89e62d68d9fa0a2632b107ab8e7202e96a1e417d5ed60eee7b80f1c51baf5b4ba450942232c7fe18beaf5adf1f3661d2eae6c5bbe63df3c37a9a40ea57e7e2cd36d03ac6c97e710a8ec9552dad596d779ed49b4fb4852ae0bee82a354497d26a094364b2515624e483007069010429c20ce32748ef23404f7b2f92a139b8cb20c9503214694cf88239acf1352b98ec52a111e87b5e0cdad105afdcac0195f21aba59c900789086f95383b0ec85aa382bf023bd476f24e573c8d8c82055856d72d0a42129b3c799d3052b03a4bad98b56c1dfc2d872d11f3659799c8da6ac156bc3fd3e0e804f206e9cdc03d4810b97feed2e9070e2d4f038112abc0dcabe0ea0d9d9e89085138791afe44068782cbcf2282d0a33a2ebce6682aed85959626236fd72e310592b2230bbe1a5897b11b21c08eb85833ed598aed9e04dccc5ba8f7a891a8eaf565ae4d07fe503f7c813b4e27b0e9e5bdfc235dd81d80d72628ef50c0446513016835029b1dcf78f98bfbf23f50e438d40eb90161944cef1b3a2f8369329f95047850987a9c245cc3d38b4f4d4481b60902c56afc9770ff580c0783d972d346e59c7f95b9ea3bbf7ade64850b98ae572fce41222999f9430dcfdf4f4f2bc36046ee8bc0ab4fbec288fcaa5018d54d586df759e18e2ecdab9ce6782e33d395f2238872d0efe87216a76400ef59cf20aedb2d690655fbcd94f66dcef75099f0a7e9d330e3d41ebdf9f0d538b1fb50fb736ee35ca261c0d89f430b3f7548a42980c4231bd7bc2ff517f189ab3d07408e0afe1edcce90a74a79a019bbf7d0d99659731bb8a70878ffc55d86d90bb3436aad93b13c17850a42e8da99bbd33928997067bfae214673d54d98ca17ee03b652f37b00ccdef7c706c111f6ca0b5b4ab311b058335f2d90dde68c2e23d24f2036f4aaf54794a267e2c5ae4498ed33a9590f427eb299a48ea2155f2d7c69b91ceacf4a924a911cd29e0007d0c3e0eccfd7c439b1ed909b234817ec34f7d561ae375951b59581a611ff0cf68ec91a604a3ac1325858d9bde4504307214dd3e787ef5b2bc44244c733ca4bf547062de09f1dec868bfad9939f086a9ce405861cc6ef1508d3513a86d9882dab997883543ac7dabd215c20f8668c8b444c1cdde856d1e3795b11603be7196adddeea388b2d5c1e462424eb4697ff3141787c49faa797223f6c143d63dd7a1620b0b6b908966a55e4f06a82e37cd4d78c5d1ef29b43c42f4902c040749b95d602647397db1098b6c8514d3f30e7c45eddd4c99f0f0537629cb4e4b121204c5190d6124ed347ac0e3703d64be57578009607e26eb6a8680685f90acd6dd5806399da46e69dd2273be3e39be21119bac329ed22fc9b34e58ebc95ec9672933ab39beb80df85740f8ae712c81183a318463e5c4eead8ad1db87f10863e98a211843377640cca0d8a19ed72886504c9d58c2b1c5b171583ec198ba31046213c536e2fc4631846208c56e7d0f223d5df46de91ad3a3a087c6dfddb70d23d0ffbeda5dee1d5643263eb517f4e06f9b5e0cfc050cc49a4266e9bc509be2c46674d96578b7965700bdb482c723cf3d286f7e91a065dec6d1cb5285618ba55f07ec201ade32da6aee99e47c734bd5dabba7b354c4e8a2ed1495837bb9046f4c146208a397f67d93438cdeda4859a2b2b968a19a05a922c5fd5a540a2b66bd696f1c29ac2a1028681ff3951fdd4ba1acec145c55bd5f98265cf0c8ff1f8c309999d6f8e916df1213f653b1da8d3a9665b5f1a2219305e500c58c9e1621aef4722fe190d66c43dfb9cf405a67a9f046880c0ab45620249faaa61a3896d262a5285304c812e62ce7cd9357742dd96ca0514c62516012f7f9c592e58c28c4f62b6ce56f3688b8e4ca273cec2a330416f0efd8432d3eb5325abd3cc297ba29e14ba411385a92450b07af86fc88db655fa4e8595611b94fd4e070e79a9046e910d2e9a64710f436fe47ff6b7000a3808031950060a20036bd80343996298846be4eff84dd15c5e25eb200803803acb8dbe9aba603d1be54fd2d17f7d6bd8110383c0121692aac5059ff1fed51393cd3418ac28ae6bb7600ab71ad53a0be8c6e84243af4165a3afcf12d5131e1b2990a098ea0754320b0232104989239abd601a6ffc3bac6dd4824c5cca229e631d1ae6761dd25de5717a4e8ea9444b7ba21505607a25b754e469a10921a091212d9ff6210e9c7d7a7deb231e057bd66d91214f5dda97ad74dc01e9bd47b48d5459277f2026defe05c2d3da15daf1a74f76e25bd1be0f1c0a35be67763ed9282cb5771d1a6193b851478559346487f8362a180688b5d17b24ec3d7b856aecd6a430f7786305169f130d4af04569b3ebbce4938b67488f6e4d24a639129b43c321d05bf1d9c8a98276045f138079709dcc23614171ee03203b746ca73454ae88a545deb6a1457ba1c6d2561d2b8abb72b35e46f5bc5bc6b4d224bcc4480d8c1bcc3d3cdaf65ac7ae7c552719098a697bba3e9bd2668990b754c4f0e6ea3c00752de768a6b8db8e31b72b2acd3c84dc0c9559d99457b885e251c071d27b4e9d00a9d3567878e34041a9b59127789282207e655650123d58e4d899580b029ed6886da5a1d86ae76a3b5bd951e482a34ed043e3259e9ca34572a105da1d49a54d6374076d4cede9b7dcdfdca1090af706453596112be98e73489045689a74b4e5d3822fa34eb9c845f409f7a4c816dc6909d04bc3b0c95258523e1053c15777530a48abf1edc68f157c94290d8c19fa8ba0818fddd917f0045ea94063ddac47302250ccbc4164caf623b760833d7c1f65d45141fd50320542119c4cb0f47c8f3f75092f48adc3d4eacd6f8f5ae794db810b11c060b717c4c2bc485a2aa3ee659912412a48bcf5a55aceaa1d7177ac3d8e4dce2ce418e17c964e72025c42026e48be10e47b8c2c970b92c8b1a89c22634d2504c6c19066f2e7adff0f258d809600c86fe7b66650fc086bf91f9299edf432e8e9651bc4bd57ee7c1d8ed65e5941e3d3a4c56661e0112411963dae7cfcba28a6cbdb4dad488db4d566f62e82a0992293794d954104a821e9b98befca0e420083e9943aae07794e6444f040d8df6146e42f5877408e01bd2c06c44528d29f7803b76f33d5e143826224810c3a59019619d8e4a987f106af99dbe6314c61dd2c62877e3d1e9de4adeaaa4b7f921ef18711789138484e47b2d830290eb02362d78643663028e42fdcf544ef266c9ea645e7c6a39407f4c9b1215d9a30c188fbabfb2b6046b6a13f26861f1b69f221cb8a790a7ee2be6cbdba84cf73d08d1c8b58be39d7957f145ad87db8b20a5100bbe938239366bd3c333baabf55153fe1b26e30e2bd17b0544d65e266c7454b2c2a719656f9f0302af152210692f676343e71fc9695e2b1e9b6ca0bc00abf970c2dffd2923c005a30fbf1339b27383d8080b3942b8ecf4bb57fcaa468306e1ccf28d3442033b7682bd7a3cdc7a9845b27b18b458ea47e86ba5bf1786395dee18b75c832836349815ff249fc956e94766de967ed477046de403d91b92f8912337c98cbe41012deba5fd2c67630dfc8423268a4adc860d5c273d9d2f3ce6ae78080dc4394faa3a3fd49b1b574fcf95dc589063cd460a7e57b8945faf83871d6575c017fc5c876f42b75e85568ae271ff4a1d6ef2ba43fab018c4156b75d50c5351d9bf3897dca7329b84f7aa53d1f2134ddfd70c0694f9a6674ea5279d06e15522ef12b5fa6e48b526097f10c7444c10f054bbe17c6a110a1b466ce49415b6957b34e6c705cedccc4ec5e0904fc46062f67be88d979b6dda08615d16395879f6190436248dbfc5fed736a628fcfdc5b2f166b3638bafdf5019e64051b423da48c0a113717692fb3857950976cc86502d287f650f8bb0fba60df83a5d65130753a7f8e4004ac5afdef2a98136afdbeac96916faec8aa3b0769111f6c83a4ce9e831d821caf1e5980b3f1e34e46015f70012201cc42cd6ce89e8374cd74283ef07adc6ebcdcb458757a838a0a7ac43288e0a6dd23cdc145a3caf7ba4cd3ae833fe6461a2a465efa66d7c081b70f6f48fd1565e1bb7903d07409f7c78dbab59f96a09bbdc53cd6f6df4437c3954219f0dbd409d5e64ff3b128c03c3b68a4b8fa9452d544435bac231b6f51978c161e66c6b4cd9ec901cd4f31c95fd686466babb304f694551dc58d3a17f0e9908ab65deb507d9501d127d9c43e81a1b9cbed079bcd06575e3f720d0eb7d32a1b41591e3673e19e395e29f7de1a2e871d1108a797d2428cb40f137e2622ea16cdd5e283e48cb2e52d174d32f65fbea5fabc1b52f43945dee29310789e59d36ba4194caca65977a72e7d8517e4e2aa71d5119c78d38cce6efe11bd29399aad4bf912c5b0a6ba09fb4d4557e44c029be002898c5ca5255694b5af9f96598e5120a0b73797454bf3134c6da5fbce1506945bb435de8bec0a93db53020e0dc6a057f949e1668e02520289d4b3ed5262e6f25bd2ccc6c3d3355e08f96267ff22d11fb492626831b0dc805571cf826c778297693640ab5530cb1f06788af4e8bf95be705b98ab8fc43ff151549f8dba075fd808ca2c9105afce4e08dca11086451af22134bd748284357f184de2c58e70d50ffaa230d075531c254c76587f59cfd35f780c81452de6dde4954e3879a854b6cfcca296aad712654a61270e3b588d54c4e224c02036570c942e5c083d9cbda0d8326f67d3567259bfa1b3c71440dbe05625bd49bbb036b2d5414937b445f7c29e3a3b6b1f8141b015d6a736428b77ad898ae2cdc873113861b518057cd40560f7022fd76d24f3e610d881ab3be4b160f75fd8326dfedea11702a0cc9677dda844c9b63f5f67bf7814166da1c9db9bd4288bc65e2fe18ab3e8421d82118f0ccf9a3cc82690290c8a3179a94c84d18952a5697270440646d31fbe216c5308037b59b8148a9915bf965684973170429b0310f2f011ece2772a6ea7f98022d52323e59ad1f72e28453fc04521ebd13bd52a50e083ff39d685e59535126d375ef089f436de3619f3c4f7800da49f9588655ac47a4da87058745f4fe80ab14567cda1c22b3996f67980956a0ddb27e155ebc941ea0ac98d822c5e7662677d301d3978ce2b40855728ab23cde8fc5d59fc79aa3911dfd455db236748c1d16b1243a14bf162b303ac619f27819215843ccd8647976c12ff57dfee922c28e828e9975db833ac9084255510cc45c088503222e4df55878923323a5014a1c10ca6bc14a73b4b56137536aebac35ac75aa19ba2e5e37ab1f1fc3b06e0f0de988a3cbd0117e78557e83660aec544bff5201c505061225d8caa459d1b8d6a4b5a4dc9a7c0d23ea669ba5656f1cea31919ae8139fb0e584d296db804b030791813125712e94a17358810164e0d96a4cca6d369db8a5e553c3eeb1087b0c51c22050448ed208e67b591a14456e51c6507636d89a2560eafc5cf138cab807c93c0f3132fb0a12d25c1acd42027c2c3875344a3c0ce38a6d02ab1caeba29118916924b988eaecef87eb210a61ed3f3123622244b00359ae60c6f521a91ea1dfd03708e16b39e555a09cbb471e4651deff60f37e9e96dd2a0ab67df36541d82ae1ab39c8b30c6e9bfa5e89f8596a1c227215fc642c89f409a0acec05e7988361c170e89b1e70529e42470a13d8d78b42a8cb32db83e07ba8439e9062319bb13b6a78ddd427a485c5b3196062104f563f3ca818828fb1499165e1383bbf7c3b367319ee4befc90853f7e806433a3516e3adabe48bc5a6999a41dc1869a3c480d7b4d845a8cd3a9374e2200631b73231f10a3e65a15d5aa33c6d42fbaa2ecafc1c700a32567a8523feb2f4ee02f23620a0969b1e2331e62b43e59e401a91affc199150cc3470c75eec565ae0800f72a3baee4c3f692b14c5796f0422c3522d2c517bf92fc4c0484e4ad22dabf6b946d450210fd3d2c145174fd087e577ed435ce7382c5fbabcdf2eab8e29ac7ac2b435d347f41fb518ecce82ed109cb7ec6453c1fb90fcfe00e541a19dd3d36b1612e5161c4db01157407422a6f03756082bc8c38d87c1c1864076a42d6ef028515ac4212cadc484e14d9abe753e945f18ae9db64b4ebc5950fbf00b6ffe63b3efbf854ed8567be0c00b6c2483c60df8ac138ea9cc98b04c4ccdab66b50a6821227f4410677e58c0fa960cc7fe88c2c8d3ad72396902736504226cc0714ee54621eab632b6bf5716306b3cef924038c9e55f9bde12be63bb37fc0c67d9d884e34638f900199d80263fb8a044620df55f0c83ee7c0b5989900ce45b7931ecfbb8b0b78209120a1aff4c6ae8af0a8a1e5437c955da78e74a97053b4a2b309d8ab9eb367fb03e63250d6b5f5ec3c40f5658803ca0d0dc2392dec1c660941824c8a9b4d869d3891499560a2d6243080fd0190a41535199d0139cd1e5c196a709e4c5d794d45127699ac2dc5951c3af313654152b5edc798d415ac885918a66ef69799e2abfc86c6c446e64685ec8114d1aca5b0d99631fcd78d55977560ca480cfd0076a4ebc20228a1829e292aadb2b010c7a810dcb331fd0424547a9734396a7abf34c9b740f04b44a35f1d65235b3a6cdcb801376bcae724b306dd2ed47b6cc3eced671c5f40a11bb8d19c24e4ad592ab33740713ab69ce3da4938995b81443940db43104f109717aa7c816a93b24146232a512008c2238781587d2480e96f840f5df8d24d2e8e2aba2b34674c932566764a8ef69132d93e0f0e1c9328a984503380cf385e3f9b1d52f0afe8ef4b7acd50a54be9cbec95dca352ba01d072409a5322e1e121f703732e250ec1c928cd2aee94e0fc3d435b6780431e287e18010c9ae463ff2527da24384f8b0cd50a1ef91f5c507f15a3255cd739078067e56425fce6b3bf03ebc15467aefbd52e71e09ff90fe6785cc5d59f240e85a044ab408d1e818f3518ba6e2e0ff2c84a0e16731459eb7d155e7be02590efba8bc2644012a4088fcd03966b57fe57eb968f8e7a208a788d33e776de9b5226f3e2a1a3ce5d0dbc7f324b63209a3fdf7a9cb70c33ecacd1bf036d4b42dc71e84b39ec4bdb7c526e3fecd4e42148bfee8947328d181bb213f4bbae1495d3e465ba4eead97c114ad6b5648baad9cf8be9213bb701045db4b24548e9a27418cddf34cd5711ff873218bd2c1074a04c2b0a4b2fd03a17d0ebdbbf73901fc035d86507b78ece9b72346351b27427d3df29531292627d724cfdbb3208521f35725b07319633f6973f09645bbae8b68e4a6a1e0b4fbe271e75bde76ad058d27d488e4e19936c18e7f8e506246426cf6ef08213736ccb1d201dfa5b2f4bceda7b7e1508a8f90052ebff399ad9b923dee12306da6aca77945e372713470e8c40c4cf873020a54e6f39fa7a9000e0737b4c2a8a873c0423c37b890d2fb5cd8914115f0d703016e409e6f5f544cd6bd0e8c6ff9bcae1fa3fb5ea98e26512547bf574e1e6eb469afb6e791a1ff44e5754df31da557c180363796b6f81f33acb2363c770fa33a35519406b57e2c33024b98947d046b6030f3be12e72c4232078c5c55effea0df508a5a6a04fe58e0093dfff46ca1bfb1cfa8cd8e3ccee3b226c42d5b0e3e27c7fc4a465b354c061854f31e3defad7eee894426ec927b3ce565fa15d90240b937c461c6b8895ca648c493f6d8ed55b7c777fc120981647a2177bcd04dd0ff1ce427e545f497bf20006c08145fc6c96ef5ab6b6bc56d9d11c10cb9aa313212af82d79edc2792c2755461987a2e69c6fd3c1d433162d3adaeee6f3d12e374667505a55780370e558cd625d3405e0beecf100c8a9f57d2941338058f2fcf755d2efe41eeec68b1b3b624ebd9b3cd5fa523857ee46fa5373df87cc6d9d292ae8b295a9d8fe9242ef831b0d022fc350cf05b46ab8dde7d3d8aca5803839f22da26bee0d0925c14f83c44743933aca6d2a73b852ed672bca1e5a894154f8de42ccf771645f545360a5781ff4c7c7288a6ea4b13799639af8afdda0d768eeaa3183bc18bc3041900faa097376ef4205d20c71c4747d40ed3793fc29d290eb06d73dd8683fe21dfb1d902f7a89724649d23b78861bb8bdc427730e2542991cf813078b051a185768b8c879a95090584fad1c9101479618b2e8da024fc36401704b4a1870dc2c323018d225b216b80bfdec73b66c981d8bbe9b7ac77c8440104274a0428decd2a206a71e19efb96854d2688d3de6bd36a3fca41ee4cf69468fe4c6a544361ae0f63e449fec8e0fd567b919daebe85430e9be2dae4be787eda986417ef60f1d66243302df2c6dc0c118d3cf7667abee61852843ab2b85a5bd9007433226f4b856c63764a854882ca74e740ab8ffa364d62be831845bf194c61e149ec203b9ca1e0f796956206a92349fcba2a948246f80142e1dcf32c9913da750e6e3754fa0d54d2b1f9510154ef363276fa050725101f9490b1d6834aa316d165e818bc0a3e35afc807ab53784c59ed61508390a3c2146494c2ba4f981533011fe70d7e39965e141e1a1e994733f199ff5561aa004764e6691d94468fc6596d2da1a15f197e4398a881efe6ea9fa23764abaca0bd008429f2522e530f1a31f625d35a4def44e62bae569235ae9807dd0efced66d2ce72ce0c0e292cee6d7e4941a3aac6d64a59a57ff8f0d9775a93d68eb759341927201053dd445229016c0f1c5449879079b31598b73045f82428a14707aa4c4181b584b07df5e758f06852f9079b056cf5698b40305b90401e2fd658fffd3ce898bce35ea4bd4b9e0673fd7b914d1c76a4058c4a14132631249824f1c0bbb98db257a535e4c831a9ce5915e376b5135cb19f5f141114337223f955572fafed871ca4ebb0cc2430cb7dc0f735b516221fd307d16738637cac806a2c5c30c60932bb63db54b3fdc7a37edb9abf0d9d892c0d36f16e485e12567c83aa0725b8d272098935bf6dff3bbd8eecf6130713ac4300cf351fe2ff0d27c61c6b17ae362b6cc83d509b356b764ceba10049947aa05ccee8a6730b69dbb968e91af44350ead56b63f3d60daaa92c1772212f0adbf7d456a9759ea90af49e313e572ba34f9d24403f801a469510d9f7770bfefc75c100e4cec77c957ee23194bb8c1fb63253dcec90f89b1f01dfcb04bb050ed1bd79391aa02de8dbf5a9e82fefde4fcf827a9648f89cc3eaae7a02c9720d45a6a4144ca0e122adcc4a411e8c213f05b4e614e56cf8b10f0e79cfce4e00df884abf3851842fc62235a45a6388561405900bd91ce523dc244c49298886c1a7d34ba5060080f3b725c344ceb5fc0a4bdf61c5c03b4e4f309fbd6d8a6962b24e8174640c8e288e5d85294bd743c6175e6b966aa7162da743c5c19a0369d0dcbb4d44f9d610fa789d3a0cc80d785d1ac98c5c4d244b78ef04313a3015d8c4f9ac7843951d63fae39cf89801142e7fac128a43ab0500aab071cdc47adc253e92073d3f11112d4a11efd5289d6be8ed487c9dfb859242d7ff4d08555ef817d2f21fd667058eb2574510f794a3f753ce581f420d6e36306f2692148a48d1facf5b320fcac8aa00a42faa8eb3c3fa657faf9a83b0e94be7294c815a3fcad9aa5af33e16ec43cae6f7556aaba5d4776b13217d7eb24aba6d4d7a5816cd594f6ba6dd57891488642dd727f05b21be458436c1b62095f84fa1e7637e189c86bb83a444c521cbc4d91142ffb9d2f2384aa93a051d434ae36fe2a469e670cee8cad1420fac438ce542a3a9e31fb88e8ae2ff497660f205221408068dcf33df52d103160fe9e7093fede8eb686f7ab4f649543a85d43e681de453316deef984047df352b08ab3e5221f2c591c022874883e518f67b39018ee0f4ffe0e308b3eb7c6c85e55a2f6676c43ec995057b8e4feabf3e5c75cf10199394b9c671c1a474a70c63105b501fd0a31b12223e332d7984cd82588039176380bef583abcb5a3c3cb3ff43fc50adabbc552892b44c6226ec3784583cc6a6b2e3e151c8f382cfebfbb81cdfac6d2dada15c4bad4bac3069cc336ddfa51be2436d7935c2eb05526fda8759303aecbeeef0ccbab79f47a20b9fa7d04350855be72e46482f2dd98bda1077dc32464cc58bc7c45e4c1b38d67dfa40d46aa8f8d1de046e16f0016d2e244c23295965572ff88139f660d1b56ef640d47445441991dfbcf79262291e7a42f79b08a2f05461fd03ec048963667a0ff598435330c9e22151e5734413a26e8076c3b124f633fc74b6db0df9f0293a688e32fb2ecd23b09897b0336ee5f9c349a81154d11ce57e3c1fe4f6e2e47559e967a9b36a843af9b3aef54d6a56c0503500f8fabfd6481a874e19ce9ddb6f4bf193b04ba059af210ad023e2f882a4772bbbc740f8135d75664f899f04f17dbe7e1b53300aa1ba2bdcb68dd3957a9c562288c0ed8426c9ee557ea15d2f9224ffdb6acd44ad25b3a269fc528fd0476ba5730d07bf002268b5aa1c8de6cc4de1b1c379274860a9966ea11e6fba105adc31f01eb2d101db0af66bcac1c3e7960bdcfa32905e40a2444caf44d8f0067d861afe5b107dccc54a486c771e45de74804e18857ac47edcad8b0466fadb2344a38d5e709d4a5cc8397da8ddefcb9c364f3a8cdc160067a5381217bb3bc4dc293cd534c3f92dbbf83fc2794363a86692cc133eba6d8d8d27c4199bde4915c743df102cdd7164808e06c723b038b5e59b8c34284cccdb47c52c64d0d0d003cfa71991d09d8c70d75cedaa664bb2ac994d665a948da465e819d9213cfd322fc464e418ff7bd10f3daf072855e79437e11a165cc60937c56b012f9ef6e384d3a50625873d36bdda5fef0905309e07205d281aa6f487dc2529a93f12648ea0997d9d781ab7e18c76b331f3a8d2891627f39383869049c94f62bea207912c4af53575683e6fc363312725b766565f8ef0780d378768364226e1428c7f4d1694e0e89617bd455161fc871669391f792e22e40c369b098087e83d75da2e8d2b3ea43bd18b70b56101d58c31de84bb644d6874e0e6049cd0cd476566c6799fc2d5e7bff4f426945b4df284ecdaa0cc52d4213b0879adc1c9c209871b5ef604bd8c080cf557b210bab92df0fbad40b9a2e233f106e4037a7c72e737b8c2e14a30d87d835a38e56e186ec490066cb1b916d66180eae0398ed4be7a69aa0f518daf36df8ebe01f382f453456c3eba6d3907009a3b07e77dcf149fe71c806a1e646908ff14caffa9010508313444c027c2c507f57ad2ca4e45149e7433960e70957f7a64f72aac39a4cc483740b5ccf911fa5384ca4f6176a90354f9ce46e257311a6faa194505d4c90761f8ed1bd06acb7f497a0219ab6bb86c806bb99347bc4951c53969765504a2739c8df09fc2355e72b3690fb09a796684f61516b78419e93e40f974567e881194a85a7d979014f64cc459ed8126bbf39357786c136505e38b92f167fb4aaa34d0b615e2bfe83cf89a7d66f4a297adb70a39fa57b4f1269b597480f58c7323b4bcd37976df2846918b9df6592554b2e6b814de41d1374e26a40f80665534f2819cc506940ca9a310e43ab97f1f1db0426c58717235cf9238b1118d8213fc2e6a5f2671ee4bc98e76949e191676240bc5b2b63d2d300eb0a92073b9a2d97ac65b6819f17c09fb6b737c30eb0e6e3a469498fddddc1b6588caceed1d3994b9c3786b48bb91dd75c23ba7b59a5919b48599acc9818a980acf2fc1cd55990d6c7d801f1c13e36cf15359a12e92b3377052b1049cbbd8f18cfce5c94c56800ab806033fe769cac9942c20b22d08a93ab69e1345d92a2c80b2b8e111c5fb30e1feec6e70698a1d8ba6ab732d88b93198925d7af63bbc2999899a863a3938d8516817b37232df30dde743d60a45be8a6a12a060f7463ad30f3578d517e5271673fa7816350389fd439693b787ba0688486f127af540f2cec7564ce5aea7bb8ce8aff1df44c85d9a995485f81a04b9ef9980488e20e871312e034aa6d51de3620b1f31bd3c171c8304d06a67531e88a587aa8dfe8181035f6553f82e5189390955e5f63b99276abf69eaf2f29d5cd25465adf748dd573c65dc9fccbe215e3245bc7d987e5149fdb2296f271984f12491f48d7eb9611360afd73ccdf5df8a9e11a4387d99583d1ea2c610cc880ab6970d395467544cdd64fc6c85fd0f7b6ab28b65aa9412c01a7f23a4194ef8cea2952bc2235ad68f43b2fbaeaf31638e8b774da42ba16fe02d4a3337c9c4fdf4e98676cffcc963d092ebe8792469040f1df5904ea51e76e5d1a12dd0dbe0616414aa7c16d1e35e390c4c28100d1f24fb927cc6a627c157f2d1ac2a257afaea7fb8c3c55527348850ca631ad47d3a3fcf70a1412902add107e57b5f961cf871ed89206ec6843b3eedafbf1e50226077c8fe468f991ed6f23a03311cb52b54cd03888289f48746375671d5a649e12940bbced132ae744f858e1527b7b6356a4714f3a298e642891c2cdbee87ad13c2d46d1df5ff4943fce65fe08cc8a75bbbe5df2fd2970cdf80309a97024d04581f2622dd60310966ee31ccf59f37c8cc31ae40ce0e19869c77a3b58226c876332c0fe2109d4ee47308eeb6e36bc37493a4bf5e46144d6457b1285037c3bd1c02f944820bffa364fc6c1a03e86002a7c1ea7abcc7dc0de9003927fa629984705d609079150aefc7e5fd6ed3699f387f75a80411825a6a89c449d73292eb5de215bc21e3178d624db699c9223bb085831ccaac639401c19dfbe114d720fe2126eec7c990a113ade4c5523eb7f21e55cc8943a7716447e39449e395bb101effe5a2db3e47797f59f943d91a0634d20b4b6f1148a5a2409252113113c51021007c8e2c1bae3a8623681a6f964a5e6b8ee5d875dcbf6f5444ed0cc635eacd2a04aebcd369aa06a8fca37e1ca3ac36c220964139002c952d3e53130510d07bbdcaa5287d630340f5086d5c3c6dd876a5013a6b65f2583a076937514067004c055dcc86e2b98021d79efeb0ddcf2a0d1c6c28469c3d5fdb12a86ce5de09c8d6b279c8478c1612762258cac15eb7b13530d83f8cb21f09fd461335cead4eb477ccdd3162389b1181c91cf343df8f1f6c6274c1004ef8317407bfe56fd2958e62b332b1402391a6656cf35b8a62238e864c065f25a8ba55a985ad300def54c6a7205ac627aba697d1ba059048aef38865a6de006aee759aee1ee97afd3ad3fe855a8da4a2341339920e8cdc3568b3d07d88124fced21881b98deeeb0503f38fb87c7dc7613614b60a14641571c798d4b2cee3eac260d0e8848c7999b56679e53a1f32df7fcc814448979ca4da5235f65ab4387cbeeac0ff6e42d2621fe1a3618b418d54da9ee4470bdcbc7f50cf63aaf431430c125d1da0eec25c4a1b341a10054c09f6b4414984b499a5a3032818eddc83a4938e245a86b9f6319c9dccdad22f55a047fb066cdf9d330b71e88995cd94970705208ebf7f02584c818a9e3ab66e5fa61ea07a087b0561a40511598273f8db6a9ea3249ff26972b8c339d511b239ddda549f69ffe6b6405d737ba7e49f95f7c817c235ff1ebcd871b5ef84d602eac2ad652d9053c8bcae4efe046c52d1c9e13de1c68454d8d4f7d2b6bfe5972f56fe4d6cb65eae2212c6d99886071091e42944bff35c10b291ed47bf3799edca33a2ab90268550d078836364f8b80c003e177479644aed61e5d674355f40faa8fea05dd8185a67523676e53eeb9eee27b7f4c32df466db25bea3ef051b7de22215cce1d50bfec28a97c8b8a96dc44f8ebf1f3e01ae09a9f084ad489f9ad8c0d8d3ca364a08ff38141f444f65b6f42890086a49e154381895dc38a2f19ccae944e47dd85dc1cf3befd10eb86569c3e189c88af4935052323dc36b3f1c7f08edcc6e723adbf5bc74d33c612ab747fff81456498d4e817c17b384bbb811326c4d615bfac949f693e341afd87c95db6d4dc65081b35930ae1d7e88060233e547a99735a639b4d13ddd50d3a42b1cb3e723e3c0ca2caec8eeeceecf648b008e721cc72011dd6e312a708efd891e87dec71e4540db24ce5cc8d7815a749d3b15e37f7b43fa7968544b4202c81044009b13213452165f2cd83104d5bffab11a3d58ef1b7853c142a0b793ee7cb788c5a1458256e20372ea497488f56d68391bbb6ac70cb42ce2517b3f32d52027d49a28f09056fec6fa6659d342f1181b3bd94c036ad8af9c046b0fec41511dcd5f4287fc7b863688272596cd47d3524e1ce49353296ce6b4544ddc5b25391d28aca6f1d3f566f71fd226acfbe3990544df1be6ab500028f301843899dfef38d658746eb8006d895a487e4b65f969fcaf4987b3b747740b3487692d53243ecc401b94ef8b060e707cc9b15da17b3a42c2e471f4585a6e605c913e2abedffa1cc3639de0137284e6ebabc9764a1a7bbd8c2e48e9abb71877f195584fbc04d00c3d6de691e5e02262de61290eaee5a290a8ea3c00cd9ebeab478e5da5d82c4861ce1e144e069c055f961088c9a10a31ad775de30f6ef57ff8db6fb011d97faf16593ac42bfec6d67ef03b32c69a2156266a1e20da19fc9d1418797db7b39a509cf04e7d8c56686713aa5057343cb4dfeb32acd688a768433dfe00a8b9e3897cd686ba49dfddb862ca84b73fd6c26eee23e430c73694dda8308912594809560af3a082ffcbaf6b52824f4c595a95cf87d12b3d9a3614fb6071c884e196262cba657bad9eaec0962126cdb43bf277a590d2e2489900b63cf3974edfdbdc1cdb9635897b36228dabd495d27b93e2f9dac3d34d3e10b3ef0f80d305010402da2ceca8ecfd8117f6cd94dcc4756d5246895822c12c4b04e51b3c6762751288d663ccf31e842955e1e05f0da7213d6f308ae029e286412143d309100a5e06a2ea083b0384cc835ac509b04be5b1aa8f7836df236a7814b3944763d27c6a251049c82e5ffd5c93d30576fa9003e141187fb8a352ac8fb69d000f66762faad0bc2dc6db16805b9d359166b40a4a4f4baa4593165806edfe96f3aba7e0e20043e000349d6961f01499dfe6e39d0c06857d82e2e9609c6ed9a407a82a1d1c27c63edb32f78ddf9c4d4cf2c6e809afee12ca30bc3745876220077e4269e59f34a9cca72a13384ad5d08ff90a04743ead75e1d061d16ef1dd824d3f8f7edebeae3c251b2ca39ca03573ca710b2a63528ed40415dda98f5cdfb0af292e177c3ef99534958f0f777f6da2173a8572cdefd6e03340c5c8e4900f64d401ecbd0c01d010753b6c6dd02184a235bb0ba21fffc63537912ceaae5f3c047474132f20bcc8fc3d9c2f19e232ae54bc5f21928408272671b624395fc57456b2b93e47b724f2af24797819272c984e0274d06596221d6acd53d5e9bfd5c4a05b40dda2a5de6fe33b018dcc9e0aad7881aae5c494f524cdaa6d68e4512d628d4960222c0fdd487837a15936266fd679650358330dffe9b7b55cd0c5465a3f13983909d4a578ced5f34f8b90fd6703665c29b7517ee590c2c24f5a05b9447ec6f836100b3f67ea78bcf07336f35430042dbb6c7223997ab9860389e040700c35687af662b0f09373ede7537c26e89a072c967914ed859f7021993987c7aaa52de792a18e2812d75c40943b7a7a6ccad5f8948b465350020c3fec9ce5049fd560200aa500580f0c0e0c2f84d95ad3239a745009751fc7ec9c0cc8f0026c438d058e40ee2c933849289e1f3663d4ea930fb17d7e056ae02315f729bf4de855eb63dc79c84e37c6dd94764456141149c44cb3547c51c960487746a6f30c41b5b31200ef631915bbb68e8b0648dfb9eb0336db419e038fdc6bc25b805dee26f30bff1fa21f726950995742ab50e478a0aaa1ef7e76da3d1cff5be8c8038437221a32d4b587a858d48833a9b40a366083ea43370916f8cffa6247c1cd4115a952942487a2245b7e4c45a05f2cd07f3e9a027c5b00a6b1baf2dc223d139b877f997c016ccf014a21b5385a4018daa40375a44dd18862cada6c5d8d12c5adde8e64ae353f3184da8fdee79455b008ebbf8951aa046cff2efbc4f5669d2873405d83aafa3f432d90f1a76759dadb03775d8116f671351ecc945842e4de644bb2a59429a52465610374036c03586a94708e0738f519515d8e153c754e593d50c5cc1757d765f57bef59d18a6f4610b3207961aa2b94df6565592f5706c4c3821056cc7c71755d9feafa51b7203195dfe2cf6aff79cee42fb899be71c1bdd4e89ccd0dcf7893ae6c2351ef1b494956b67d9f3e39567b25cbf292e52577c3ea13cfac8da6fd934894fab55919e7709030978c82e6c4b65ad8f67c58b5afdad6dbba71606b8d1e5cb71feaa8be3ab957638c2bc4aa2cd6e8c1959f2b67db0fd5faf96c3d4ffa96186254eb2f9d16d4f91c46f556956afd14c3fa29a54aa5f5fa19aa2caceb0a5d807e7f8fb86af593826ab09ead677eebe7ccdec22c10a8c76cb14055f5a2ad662309745b9b6d12fa05723d7d110eebf7a78509b9ac0ffd856daf5a2fa26fd1b77e6e65594f5fc78aaeefe1d52bfbed0272bdf512e4a37aeb23a8c79591b220aafc8db44d2c6ca924e8ab9b97aeb77e93381cf35d090dfcf3e7e82d8c7a520ffe99b9acd6fc9585915c567b4de57802f4fb8db33240e65bbfdf372b13413edee98b5abdf50f4443f5568ff9d6759a2fa3ce9fcfc2e9d495bb31bf0b7a7dbf0c5bf92dac2b837c5cf5fa49b1ca8a29d579515d8e942fea9c51adf005dd5e25552b7841fb374ae45520bd825ba3e5b5360ed41146d5b9303a5bdb0f75b4cfadd01608ab303a1d00eab63632a4956d6db6769b8f81921bac8b1054a67f0b52b96c0f4159876eff3b823943595ab604ad91a7ef7aef32a3086018d9699d66f939bdb02f6ccf8953b7a8449cdd8f01f3f38e4118a3fb3c82cd24fbc2fe94f2cd59720fd235ec6abcdd27f3d449513ba78378f43bcb098ad92c852c506ca95a403cf843a027837aee09a326d6ac26e2a246c405a420170e878b35b186611c7361826e16cf2c59582c62614259e874ee8162166b569398dbf130581b7beec6fb0fa642255a01ed7fcd338561f63f18634ee45f201e91a7fa11ea9057b7592255a225b4be6c96422fd82c9e2a9fccd22cb93021ba71389cd50fa348d5c3648d34aa87c51a3d4608a9267d2c22dac49ad5f6146b9c4fa792e50ef2d7a1101d8d5a66cc2331c624abed2cad166bdc8d7d1727d0cde229d57dab6765b6585397e70b0b8be58495a979b1a76807f63fd191220823d35da12c6b85ad7cf17a6557fc5cfe4923d2487625bbf4a269eff22e2fa45016ea5cf5a873bbbb6e9d732e94856ea49615cc79cd1013cf091d010e218c112e6cb2557a7cf7a4d2b0a424e59474f9f948ca69f01863c718b321314629e376bcf276df7bf145814659e5bf9763615807ac877df0b537e441e80f427fefed2f840cdd4127af766cac3ee85eb10b2050b9918359976f07b31a91fafca1d0d16394517a8e85e177fedcb520fd77883f1159dddd801aa8ef3973a7ed530caaa1abf7b0d51d7bd6eec67accb47edd7e6562ceb5f02ed68811bef7de7befbdf7203fcf5eb84712295ef2119004747f1e79bf5f3de7dcabee76381295cebd75a2de0137231d4ccfca5044d0115477aea4bae3dc549f1f8cfae99e736c39798d83b91d336ae3ace62feb1b86a14850b7e3fdd63c7d6a9ed34e4f8f18aec4137ee4a6c76bb034f1599241ede11b9c272bb3f5ce133df02ed170eff0cce9f9eb01e56c48d74deba1f19775a3e1ae6e786514a67f0e163ba89f7f3f173443ff8ec915c718419f18c3924803fafd1cfbf049508c918a9410f7fc10a30cb3528b5fe3061779cc8c48d71af1bbc6186ac427d004e8904fbc86ceaa084150f277fb3b249432ca08dd31e76064dd57f1123656eb8f1e238cd0dd8e1d9267a49022f5bd101f5eb69893fea7f45d64c5379837ce39aa85a23a24d27c59e71ca45e4aa88366b57521a0af94150901e5a7d917ea1d4639e71cf5123a6ca355c26ce3a15212888c3fe58bb01913d32d44ba8e9efa39c262306df49b5667183910d53ebc1da1506f101e501e3210d0d0fbf04a27bab91e19bf2afc7e915722919cb3aeb75e5b19d20c8dc68f9ec2462312455134b08d48571a3ffae94675f434fe57c084381a3123124565201a44ff791d4bc2bacec06af8f83cf5b901f42a38e683bf0e86c9a1a3e7df9791c978191b4d5d6dc402bab99e222bd3f2fbcec11f25414719bbd54814ad14c5b657c490beb08daac1cf82cd0b744a32c487fff9fd5d6d65dcafb63d74a5322032abba3a16325186317253b79784677450d2f6c89b0582970a6569f9621cccfe6e31fcde7b06e4fd5797d5e8f1957f5f34194804255734a1f2ff4b075a5abe8508222425d111a51aa95b70e291e828c7ca14566eea46df89705c6c1066d4fd5f2eeaae115b448144931985912af281208713135270454e890b19ec602dea468bc4d030b608c20554d484cf1468cb8e0eaa545137fa39556c306a62225141cf082a27558ee4505942dde80f818a954a1b7abf683672a62c9143658bcad5e550d1024a81c07c3b335a987d2a23e0490256b2f0000a9e580245158a26298242a1aeb15002ad9b89923084128851e3c5079c500131b3919bd11574abb0a852574ad340497777c78005168afa7477ffa83f36949445cf88e4e2c4cba2e44180c2031d19a6f4e45c6145ce94253428a8441b16eabed4f981a9ee8f807044dd20d405c218350733f1cc61bdeca2306207b500d5e5a0c0c6c3a0ef9fb5cd684c256de826eb7bc18443d04dd601c4f774ac8381b09f83810e62a0f6bf08fd04ef70f8777fa8a8a385a164ec7ee89937dc9dc1837c30c807915749ab6dcf20ab733776b11a1ea02f0b651dd6f981fbb7fb1c40a594324a29a38c92a2627bcf7c10420879a18c104287d06770f5dd8d35022451ba1a7fbf7b0833e95ce688a0a47f61d8d1c5bd8ee5215d21bbd8a80cb1de205575f7c23cbdccd17d70f5773266cd33f237dbe037bd6218665feaaeac266c8e9b3b3f10ef7e66eee72548b8d9cec82825f77b7763e98211792610bbea8a81c0e80ebd63101428c928a54b8f2ebc189f9d1633509fe4da831b6aa0dbd9dd5877f77537f69903f53dfb5acfddd8ead3f739d856377cc2443a1d2913a0001b68ac9c78b088213d077cd54a826e3475c642826e4ee707cf2860c6e170fb9824714c798b79ee765039edbddf341d0ee6b5db78a8ebeeafea266cd5a4f4f292999999999999a5a49444fad7b4181a1aae017d921b67fdc5dd07c46bc7965bd8b56a864b6c76188293d4b9ad480f59f11536304ce261527ec484bc1542dfc7dde585d11d7ac72168980bd8798043e8c2a323e734af9c745a105ad59709f161bd620288582346876ddddddddddddd08e2d1efdcaef57a39a3eb5c1e0692728a8214f48aaa8848ead383a440179094a46c60a03e1b9a746802e835284a32333333335332b67330b462201ef314327a8c3042a7a1d1018a824a1ee3bd689a0d1c7470e15111a373aaa2c93cdf1e9377d934e320c20eb80ddac65fc64819e3420e4172740dcd698a9598ea621c09ba359366c255db34e7e0407a71d46544f331201e4e9cf433a8065a33ad025f0469c0fa7bfbd885e0524affe1fde046ee10e4d5bc2644de112c2fc963f28a80bee5a89b0bd586454724979db99eaf189eb1b21d18869f6370f087c1690740c0670d50f761702de4886119061c9b0c1f774903c30cf53defc009a8ef4924f736ece0192d6243d7fd9171932a594503a043f7e811ba07f2715548c357f886a0f0bddd7d0e775fa2266ead98e2caa95ed39d7ab0507fd42d883bc18771b66da054d77db7df4f7165a70aa0ba29b6c0a9cfbd6d82be8c3a51f71c83392fd112d112d112271203487f37a9afbe1c233c51e17b676b0413ccb76e2d977d5278cc3c78df63ee292559265b63c3a33d894a49a24fd23e46a369826b767667955825b060c1c179a557723aa226e846e3654476a9a77a7ff8f98d79aa33c0fc8d85501d11aa7b9111741ff4c12400b250f9fe55853df7aa0a65026ccc03b9ca9dfa43a90a958db3780a13f243a9cacc49cc76a2e5dfee39d82a9c6832b33b5c488eb7a8fbce0293bba090a0e305142a0956a7f305924a729ca48a1e1ce176dd8e1d6ce6f66ed7ede4eb6e1e85e8a885db753b275d39a0ef9db999fbc551476877ced1d83e627e6176ce5176ed64841445511425638c31c628a3845142caa9a65846296594d4524f822ce62896138aa264570129a79aa298a296a21e45554f4a45514ae8a28b2e409510dd2daf5cb932850fa45cba6e574de976dd0e56eedabddbbbdddfb5bbbbbb7f77bb77741516eeedde3c655c4abafba73ff250ee036ff7fe34533026fb8c47102999953f3bf7ccbe0f64c9484177772573865cc82b2050506555227a8544554b8b68e4dcf3e1101226a51f12c021871891a8655ffe6d685a4bcbe891a49046ee8edb7d8082082e7ac30d3788c670ccb362ee930cb3762671dc8d7d51084442ccaa79682a0a15056445b1fa87047098a24305ca61e79a144a1d8923a378337d3a499cae02fd43817c70edeca2a29676c611c2b94f51422166513b0be11c45d44283534c4bcb686d68da6824e34591e1ccccac423b67208a73671207491415b6858ae6b7dc5535e79cfd404f8659399338a22188b8eb39522acd203bf0d8f0e324011ca6e890c3ce943812e74351d64b32af199a229c3ed5a04fed83ee9302280db5c4f9c4a0e3093b2916664a9c18501a86592731312251cbbefcdbd0b49696d11bb990fad9b9c491124708da4e8ad5e4902945c6b4113d618059a3477ddd97cea57341b9a05c502e2817940bca05e5826232994c2693c96432994c2693c96432994c2693c96432994c2693c96432994c5040ea8848596f87a2282583b29c0809dd6844482811928f08c94784e42342f21121f988907c2e2a44483e17159f8b0a4c52371f2974aa256620032a4eb0a0b4ba1c2a2830019520aa1468d1a305162d4a4dd0ee6e6f8e81ad3d83f10178dd59ef5cc27432cad7dccdbb458ca4c11426950614f4fdbf8c511988266c029268a814ee598412b2190100002316000018100886c30171402c0a1461973e14800e65863872523695c8237114865118844108c2000cc3308831c6188090428a30ce06000b1e6ad3c152c456cbfb06f53a0f340760027c6795e9f1b79008d4d2a33f86830072a59292ddfb176bb028874a7c0fbf78a44d2a882f1488f356fdd68b06c38ad8dc336aa30b8939218825b27bc4176d91e7e3723826574741b76bed27485dd349cff550fba504b8cd6daa27600bdf6663e892c0cc5dfc5262ca5674d88371bd2ab9d017f2bd28de5bf73f3ac5bd58eee2d0f5c4db718a2b7c06a3d673e64b7d738fa3b1601e85760918cf6815709d1f508b8dec2947ee5b8d3a6897b2d91ebec6d1f0802a093059011b35814aba52465a090c72dc6bb122c544353f5ac056e7115ca2ba142bf727deb807d89202b4d232c75241f32173f52a3710a6782f656661a79458164600a6bd11d4f71910a3ef950956b6f904d888c3480adcc9a6d2b79d368b7c75c5a7614747f08a06dc1fc01276c5235f60ea44d0cae1bb41351839ce5b82d854ea8047f1c4260275e6e61df1653c4dfc4cbd9bed34b47c1612b6a5a7526547ec25531522a4de00cc4fcde5de2132b926e9b41fc7659cc9042e689418ae32ac8323625846a4170e63b18d5baf1845d967c78eb84ddffb993f3e610dd1916c82e35abdf781815efcfe0cf5391fa21d5defa0bd97e09c461d7fd78ca3c748e0df267966486ffa22056d9d135cdc21fdc3e4837e06fce52f8bf2b5d80e168b91a989002838306b58f8c3e156fa10e0784eed31a348dd1d11b251646412805e6a81a52770edd78e20f76ebc7372f0c2ac69c5c39d6053cdb1531ff70481312bc8e68b863c492cc7b7a2c03b26c43a07c9197f63b48db33937335d6c93df8d7d3e4ed5d8ddb486bb5aa34563c2f6205d4398771a79f6a997abca081844b4a307e43c62e8579d0d69e3518a8560e79aba6d83e787690ef012275cfb49ba5e38ec833d91be282d177cbaf872467f643ef223bca4a54f6723a31b2125d4809c79377e4483c7803a77e597b487146bd4b952ba81d92699dad499bade164151ff9a934d9d2d6bff819122233ce6be135679972c843bf8bb5b2acc938b958dc217a30b1449f6f9faa7c870fcc00431eaf301197d74d24dcac8347cbcee24e8d907a85b255a07d5d181779cfed6db59959653005b0beae5edd5aed9d92762865a5cdc992182ab020e5c05048030b1ed2dd4f8a02ad0714506cdbdca8a690fdbe60c851e2b3f8714c9238645cf92317506dabe543cb799edba22795c8fc10202d5a66aab097582ad01e9a3b4c07eaa997d8d2b0672a9f07d7c1ea1af93fc11845354ffa7a031af121407d281745065b9a634729b3d02134b95cf21c1ce91d0e0409d26a273e27e9fd88794fb39adda4c0885c68118c7f6149ab2e577465f93e9b2e23f362ee626d4c581803c53dce55365bbb6a815f9721d4d025282b279793d44f708de9624c4d22000260e54266130f4aac81755e9491ca8dd9ae185b32f256eaaba91a860172b26b579ca8553e6385724640dd057314c6b83e5855a6b32a8a9d983a0079558a26c9c438fc7a4ed26e733533e0c875de9f1505a5600da7d0e76607b50dfc9b7ff42c5251d1d22f78cc40e5a36484ce52bbf41561b85c168cfe85542f8a02d3983587b96602aa69a78285616ae2424639974c1ecab661ed44e9a960717765211fd05491f5cf141258af0af8f8930c050fbf309a8e991e0a34507d611df6ec857f477a20fa228662d19113b72986aa34335baf2b3d53050ee5d6f721926e9d31f44ca480e077b18798fb3dcc5b717d099b2cf5784072684bcc352609da3063f70d96f3dbd01b56767ff05c94ef3fa7c6246b03864d310273b8471e619ad04b4880f8d192cc7dfa21cd9eeb217297207350965bf1cf2408d04f3f7e4635d2fce580356d7dcb00cb8f50f8754ee9fa03b1259af567d84d4e6e2a9617d5181de2d11419412383d692d51636a514fcbddbea4d4e9e9b93012300e1e340d7e7bce0f24777d3c6614c4b62c64c6484bea7093441f955ed171292b37274479757b7b9437ef2467bbc68c8d6151c6af3fc09e8764248ca434a7409e956d76e443a33c57a94c4383dade8e4d33235363a01cc44283275d49bcdd07966b57f8f3f5c6ca6110e73cc3abec14d4332a52a2ec709a29e32ae64173960eb5e31027646eb2f3f082ebc13e79deb222adfae116cf364bf34a57e2ab384d53c3470876b633023c578290d9673b91755e8bb872a4b9cba210d784d218f616c2697b31e7fc5f0783724dcc1f51342e0629f3050a6c1d7d64da4eb5cfb60dc053060e0c3b0a4774018b30e807e95b66bb6d0f1666308fd325eac5cbb4189373fde4a8651a3af1a058897d31da930456d593fc88b5b30e4aa3126de2aefb27d727f6cd22a38cba469c617267cec363319a808d8a7da58abde289e89d6b797b4b89d9b0d88b2e5aed849b00ec5b6470552352f43f781c24bd901d0498223b0bc237e4c8ee589f9d055ea6217776601ec2a6b6d8a93fa762a2e2ab8a9c9d98d64f650e17fb2adb592de646b35668fe6ab09e11a4d9cfd6bd930b753a8aafa562c6ba9c6de9d425a806a578c8f03dc57ec9219d10a045ce2d776efbaf312f73ea18b6a5942daa3e3a49fa3fef7c72ee487e4d1e3ac557b8f2af7811256f9210329772fef1992b6884e916610d5c19ce515d5dd913125fbfcbfbfc0a7971e69b1c9db137dc4cb8e2bf6e00b5ebc2d4366fd0536d24b6903209068b7766ce43f90cc89d1648b0e13a73b58add9f011f95789903866930794d8066ffe9826f334411f9e2b46e90e7b2754c24d4e0375101fd4c2a71c1a1b5cc023b289faa458f8c42e19713fdc5444cf9de4ce1b6ecf821d1219742fb26c9d0f022be16844428460edf9db2d6f818715f3a3e6530dcaba848f909614af1a7a62a4c4cbd255c815414389370cc1fedb077a3f55722bbb2a0b1d287155090ce6facc981d0c155a04d2b3a569dc4ef2a2008a76e060a640741029e7651790b1e116fa5952daa3f38491540df4581a4fd9229707f35eb27725a016df4eed95fff89b963f49dca840297c5d5f6bd51a058fad606990528d015010956259b487684af5597c0304f3ee2ec3f91addb7e70c8ab53a7974b2ae25b350f0c0863756e92a5879e608e8e2425eb413934b049a2f6895badcc12bac39547424dcbacee13121d0794bdcf7f05f912ae90295cd128af0d211e6b14751b726ff62d524f82cff72fb6ba76338b3972ea395becff6bd2aac5e7078e9ebfe90187d29425c81e4b7d0e1db575cc3a5d9dcf5f9011ce725caae7b5fd96d9e2554e07459b0fad7a939608e1868eceef256ac825a7082d382a5125f9ca00b321612698fb088d1485b37a2ac00e2540b5cc9789286948c86f1820e021fc99cb11090e39c7f7e693161cfb6e8622e5c398087ae43c494fae76e296937c5a1a64575a784c45826a6326968c04eb106580a21fe6fca54a985f20dd6c8e719831e59c4dcdcdd40e0b210409ce1aa88bb24190dd75761790b3a288f6cfac3db21cdd48c92e572fc6ae17bf74518984cfbc6dafe8bd4152fe6ea6bf709abf28cc572d62fc02402ee51b5319fad635b5ef7d750f2118ebaa5c36c38498d232827c4041be2b563e42019d22edc7c0da849b88985a5e408934f727c408e13f5c0ac05747bbe0e120c9faec524c38e5cfc1ea6858c18718922c2b1327964227e898231f017bfb9047d87b9c958b1beb1f89e9ffc192100f6222e3bd929484def8b476779955c876bc2b0d2f81613e496bea2ae7c26caa9720387e8a112e09c989b8e96b755cd91da41f2c2f2790c41df12955a1660df8d62088dc1edb08523f3e88e629cbe87372a64b3dfb098d2d458caba31b5319693a1307ef649e5429e82d429e518b90a04b4478e636e8f931a5fab047c0a64b1014e99c069b6013a1d2353e0934ba5382d0222b0e778414740ec296c80423ea8c1e040de109eb5c044e57accd69dca0dc84ba184305de6f31d8fcc31e31fb3cfe8ac0626cf66021fea515e277ac3601bb9207011259c79b2b781094961bf100e20ec29eca451ac6f665736949ec202829e5364fee441d849d60324e8ed8b1ebce54b9b25a418a6045947db36e875b8b908ce383572ffc5bcc663c009e70e11f6146e2501f2798b78075c04b166583bb5fd4cff81eec78e1f9e244c6b760e785e7142730de38d0554d650d570f767fb3ec9bef1dae2c7267bc1e8cbe706ed12a63cf3b71d8fadcd58a3046bda75fbc992b3f287abde5c26d7efdf244b1957542a8f56705a3dfe4de7d7501d7fdb551f231f90869223fde7b97264b6f35d22bd5da977ef05320ca3bee59b31a430721267d595c8c19f9f4f2a4eb718fab9e50ae4f93704a3df9271558b572ff0b885c7f4896f508c8b8096af6f3f3463374d52fe857be6ba09ae32b33db6fd30c03368f2cdf05320d96c00b397c3c9676e98a0afbf40c6ba00a9b60aa2012b1ba5d9b8707322812c32b7879d740cbdba583078d25658e3fb72136649111bf9a8068dc8cc0bafddd6540d58897e1bb904d586de17e32b567411faf050fd201c7fc52462081e0ff8883f8bdcd0d1c7441d230a9bd8f892bccf3e873de10e4d300d456ee9a67878e80d55cc0013b09dc27f0986ca5fe81b4ce323681bb86ac06981431bd4b5138226e90be4e720716bd9cf0bc07c72d12020d7642b4571fedd7cb8d13de65744dcb31291c92e0b53c9a4e31eb7aa70afa61d3770645050fe45f074205346a95c416954753e7781ebd063feffbdbe8d813cfeb13c097763850c6abe634d6e71e6a342cb50e77dc54613c376402608cf036d26bc4e8dea2b0aeca06ede17fe8ac02611af3a09b694d58803228b83ea15b3e328aa5f9e779408555a4f890f0ea17487e069a26f31b55051e3750d869dfd70691005663d189c8053ef63a9e6a2d3d5e88873ab1c18bdb45afa142a9ee2e961752207dba9ab591024c36191f446ae3e61dc31a0e3274a76c71354b9c107a55a7e4836b5ca767d3a87ce69c3e33406f5c0d01cf239621dd668a359957c2636bb9b1238405699b3e759d2cf558e083eb7b1ec3d221f9ab7deee958c66f2693f211e2d58eb3d2c7ea5d5c93cc0fe2d5e3a4038c8507aa5c2a402e4cd6d2640ee200c1f58f1439e88784fd1b54120c974e3f250fe3d90996373afdbce406d79040afa82caf936d8bdecb44ff44bead8e5402c2013675bf2c412284ad2e79d7ee26d268a1727039aca16916a18a1d15a9593009e9aed14141b648a596286c46b7d71eb3979d2b00c99c2ddd0efeb434296b1d13c2bfb33c2763a5e0f266e73a61c2da4139cc2683534c1021642b45e448f1c7ca0d9c1f475102a640d7d447d0145e174c2928d678e9a1d9c0fb7d136b018ed12c4229c2176e3abd795b37c735fcd52324e80249da0c0cf04e21803babdc0aa7856c35c07b477f63de7376a004eac7bd7e6de4897bbcd0af46c7a031dffe3e1ad02b3a13b174bd600b576f91f3b7433dd865f6914364858e8f64a60fe45c81ca5720a4d6da5f5f866be280b17ced5fb2a08805785668b33beffafa3a4db2d0940f4ec69c44707e8bf76648e88857fcdd0893682b311ef0a36fa329138dff017a8cb4c5503eb835088aa653f030f51f9deb5388f0c1ddb3f46ade36c80afaa25dc301282ee37ea2f2633be0dcd38a53828570366ea37a17a3ad93e16e6fc9407f07a40cce7438bb1247fcab158b2347e291070d6f497f0b6dc6fcc4558165a7d01774a6f04e8badaf8397da5a8ec4bcd2ad3edb02d0dda08c4bf2608c5a92383afc58515b69503ba0f8d2e7e8f04cfdf2ea6eccced1855bda71b51117c711e7565dc4bfc024043e21fe9381c26513a66f12b51de281767941b856a4a59eb1c23a01a5b2da21180aee64615ed8562a9190b8e96d4cc2745284c4f446eafbe40e401cda55fb26997bb912ff528c4ff3c363e62c35bcb3a5f718ae6e27f211dd9c7188422470097073294b4c918f8fda5330ff8c5b132576dc11480c5cf818fa06a326a539ea632baa03ffe7f7cd88c8b165bd9e15830785fffbd349fc4eeeaf906ea4c7d8397e577d8c96f5d67524101fe724b419ece99b742ed4e7b07eb777dc55e4472101881f636d67c266229fddabd50c5e60da04eddd7446a7580fe411cb1979e2165efd0ab144c276b2e7492e8c12e9b75e5d2a1d0c6eb015146534a54af00e47eabb56a97e41555b65ba987bb812838bcef2a8e52d9facb5eeaeaf48e05ad333f80f19ed15392e2e03962281bf20f20d00d144873a663d4d14a6b675fa6ec7c3ed16a26d8664111f44c4477db245197748182f6c7b340399eb27f34034e67fff6db5aa1c7d1e2f3895d32d2fdcec58e9d02faa787f4a377ded1c893747478a7fa44425e59102b8cfaeb2eac306edb2d67409f35f07a3ff620e1192d66fabd80a688ea72d4ad8f5f4558667f28cb0551a66203d0ce731991b07466e0e06e346c15c10ca6336cf88ca2c36d27ac24abb7e7f84cde80728f0f3e645619cff635ea3ded2e1466a3a69e809748db27deb87fb180a5c51d4577e61b21715603d6f7fa85f8d73bbd58dafe7b27395c5ab26a8d700ccb707249664fee7d084612262b9d4e29f301096585247539d8d7860eb59fe9df2197d294c8501ad5419b6433610100a891511e73578b7252097998fe08c14f010c34f68c01115a0fd6bc7826fb9ae33b3f440bc09c43dca12f7f7c91c0b5850bba11b78c8408f2b92b928c7bea86171c56e5a6d2b4ef2bb30a07c94da98892a3ca5c86547d973236039711bc279d4a604ef41fec19c3e83ab905e27958e1445ded925b519b96ec42974bcda62414a9db9922b08114ed11039ce370269e6c75b6923a087e9fd8f37e51cc249dbbeb88c49b88541e739dc1b8ee93446a51a51e890f179eef3c06169e6452733e28f4b2724f4dc133f86d498fb3891be566e0016abe8e2530d2bf5e6a7d318ef5277a687895c6ce6890027cc9679ed7830cf02b4699d36cac1ff1f61dfe5b2a4f2618f36424d51d6956cfd350c89800bd2476cb16c4062ecc66c007882c90e90040ba201e99782c78438bae24813bd72b3e4e0440e49c29ba4ad01cd0112507236ab926a48102d05b4d1a4cead505dc84d7c4b01047b7c2dc305ec9db54fbce96da3c3820ec168d9cf65771460ccbf79943640e0bd9133dffedf575bda81a827b0ff3bc0bd4b28534b1e59762952537bedb891ebc7d85c5432ed385b3e6da970e71488d83cd899037c7209efd13da0bcc26d7a5718bbca341cb46628bc71d5e978667687c0fa59fa86d9040810ac7eb8755547dada3399aecce9462b1d73886f19cfb0cc0d23295ad22aba5a89f5d7f362051efc8e3f2b69eb3a595ac765c378e636ef0e8f4a004da1341400fbfc63b893c5d541e35fb287280d8722f46edb0a2912545709713f5b4ac270058ccac71232e127bc76595b09dbeee3bf764602034a8d3cebbf1dd3500116186417cbf2298b1b87b876712d782a076770fc2e7fd936360ef2830ccc25e385d36843349cff0cd73f97871486d8d72cba082d4c77890bb9535e9c60f9e5574f524336bfa51bf1ebd59321914d9750ac33949c4bf44eceb48ea52d215c4c69023ad090e29d532859afb176efbe8d8924d51be65fb9395e0dfe89ac8de5a8d31125906e3312e6ae3ac60feb58bd4e32dbb617c7398d47fceeaa7355b1ce87235597e49bcdce6daf906d777c3648ae357030da96f43fae3eeaa3004633115bb14d61754e213c78f200763c5129563731905be9dd2473df5be1f4907d5b50f3022e938b118f2e734b108f5310b2c8f253216ba9515eb47f5cf7dcc0eddd513897435429c013b9f01f996176b6368022db0e4de38548e77b89ff4bc5ad162cd2cac16c8cf42aa147b91b258d2a5d77e564bf4c95abd0b3f26409b1818974c87b86c444b68e49f1c0aed97cfbbcdd16903d38608072008c5e55f65066bfd6168b37802c086a711a62c4a1c3153b689bbcdaf07e5ba5bceabe41188333d7353fcba4132221eb8fff7ce41aa4b88056bb7dde5db10d26b222b06ba64c2ee1097373af5de8c7720f1af1418c6ca82fb8621beeb8f6f4e2251810850431670d12f62cf1a7dffbefd82db908d9e4d5c0bf59b1f429ad79811d20857b90a1047ad14d979c0407fe94ecfc469b14585b607b4dc1b469ac82ded0af100bb5670da6816f65d0f9f084ab8d717ea678b6e96ddaca608b9b44644e66eb771e0fb0268b31dc23ce9f146a605fc637f94befec9a14e0dfcd153db84d60e75c268b47017a9ecef45a16ccccd0b7c2381db27d08926f11cbf9c4140494c262db3a3627c17800537a21550136214af7ae987a3b9248dc8d45ac161a1bc109b73dcbb662a4333972159b549bbdcd54273e6f7e2717740be78d7cbb91c9487fcf8d654194c4b1358ed57a7373cccb1beaa035169f64a09ce6371c94f2be79ecd8ae1d07f9e6cd8d4ff81c3e3cc3872d06b532b3d648bb1970ec95c18f9236c5fffcfd85106f856d56d4e9d3906ce5d341cfbfcdcb2dd2cd8ee2c51d0af69a68c1058e3b03b2c35499a941994bbebb1110cfb07a4ad499b1f2ba63ff8b9173dbc71373b886430f1ac8a4f330726dc8defbc53c6c5e00d011ee1d8c763debf6e3b8a6b46f994cea1e03686543e4a61665dc17b2a3815cf993041bdd7e83d84502c7981998ee157ae3fe20bf344ae65821382ac1641b3b9004434874817b11f9057b327bad99a04bbaabd3b650b13fbdce48489e9bd9a98cf3ff9bfd32891200037a52ace7e8fcf22dd38a5a2f9557b928958cf04db50e03c0d6d440885235c7452946c6977f40d951501a6a32113521ec3114bcd462f787f082df05eb43ca812db34b76fb83989f164fa3212364b23e7a62ef36356df682d40a11ec2b22e75d1e3d0b4499d0d8c890142ebafc0005459d5940ff4290de4e126a873941d24544c849f47b98bfbde1719b6461bef4126f76d225d6f54fd8d26dd0e84c8fbf58a540d33b7cf5c912d74a7a711f6466b7fd17623b59bd0025ccf927cd48ec263ffe092ea5f0090429d98e3b07f4a9a003dd31180cf38429e268eb26e72808c73ec8883b07dc198738efff35e22083cf47d78be4a8a02c4083d89f1f670682c78ba4cbb87cca8fb05c6f17e1d4287c5817ad1ab21951e2404c67feb88b610335c38bcb3cc628bacbed9e02cc03d813b714278830886727cf6b4124d05e5fa5699931ef90b7662b5e61916db258153e8bfabb3a1a6ea16bc00ce4cdde2f6d21d08215d4817c00d2f90a76b40e3fa5d5b6985ce33bef84f7c1d8868d697bd8693da6988c45e2caeda3908123ee2e32422922dcca87b8807df20c403d7580c88992a595c6b1b6a6cbcda7794fd7e0607b57c007452b2111bcd02de65ace8a66f42a2200aa9ab1cfa80649aec647746d7fc30e41d715f692d4a92e73cc589e7330cec21293fe554f7a23ac1f4333e1936543a29452852f8e94db93131ba6eed8a048615de319a891a69b7730e804195264b6e9960829ca62bf4fa4f70fb989e29aac1d7523c6db2867cda869bd738f19b6289a754fb104008d9130cbc4b5c0cee599e2c3d737ec3433e700a17c60a590e90bf1e1fbf0335818567b985f32a32b2247799464aa2843ecca2898797730287119e45ebf88bbdecfbe444b9f985a62176481b6965be42423272f9b8a810d51c11ea9069f0c49dd67f0d3754586f309cf06cd0473c62106252c3a80a5dbb0ec641a3416dc0a7e1613930f82968fb06ccaa06cb246c4b4d8fbaba278291711423d59a49aacb310163e37467cd88de9ea4f77ccc41d329c31569f0100eeb0bf4b24a269ece6c1e6360d545d9dd968e8dd8fbaeec1b07cf22031e026c07c3fde4637ae79b2f84904e503f1a37b715f2ee72a75262aea108a207cd8fbb245b5af107236e3f349fa6388728cf79a5c2bac1db7ed0e007b1af9ecc3712a9d09f8de2c47352655169ca81c644b531d74a1b10e644d056eb939fc6bf8fef015ce3bbdb9c3dadb493734e7228579e99071d52c08a66778570eb8dfd127879332aca0f13f60e8d9b1cfdbd3446bcf138911bc2c8c9b2d99b046e19173009b15b9789011a581cd40d97e6bad18de104b079424005521c8e7720ab3770cd6ba0782162b9e138160086697653d5ea8e07c9268427a5f64274e8fb7d41b290947d523c741c540303ca625601303235491a06ddbf62dc3036d6bbda64e7400ed0348f5124f28a4044afb8c93e3736cdfa4240611a5c0e8857072ddfed0de95dc98b636df7e4817e8eda72a35e00c7b7f76ac8f13a3db79f4156bbd8eceae50150fb1b97a1bda54f9320590ca29968e83a609c9767c40961f2d46c5ce5fe53b4d27f55f544a7ebff37ab51a457aacbb258c26a70d71d19345d398112ca0a6e74259c0f0120de47538d7f11da0aa77c8c4b80cdb958541198c93cdb6ce37a0e94d912704e0dddc55c086e6c4ecbb625277f6adf9e884322899be688c3d20a257c3d9c6d803a33a99c09c3dcb667275c07adb34b0d2e4228e2fbaba6499acb4b13b1666f124003c20e1c11fd308d475405d068cba213000eb64b58ec89131788ea5e23cb6e4e8fa552f66ad549feb08ba07c03471231a482d751cb758b8052f8d1f27e6231ed0622a01ae0a5f2c86739490210c4141020c746b53abd37d99d22f0410240b8eb50b4635db152000e218b01e5b0e3f33da0c6fa80c2ae02ee20c7a8ad1ba4796f531e0872c761cec756cc098405f27b47810980a86bcaa2d48907ce6ae2dabddc65d1b8a95b55120b5e3eef73026c1f749497317ed55df61b9f1390959681b52817e4837e002d490436bbe59c3e2314390950104005593155d96d390fdba5f79c6cc91297e3d2889a026c961a3340208c691ce76b79170be9467ab0d3e1efa588499c1d767c300ba22a8f769c0f8a7b35ced877558bfeec86e61ea1ad42fe9b2e984fb3662de03747ed83c70c4baa1a01a07950f852699255dc16441098e5554db6f77d8a531304a40a3d56513cf0c7b8ceb96c7187f80e536c6f8e438963b39bfe4c43ba1dfd0d0aff795088d0bc37b62c5c9a205373ab1a16fae31dd1d864eb1a2a079acab1caf32ea240fe0326d279057aabb2a4412b37d86c7ea322eda1cf98563bc8f2859389f774590fd9c6357a9d89203f9810cc117551a942897eb9f516f30bcbc47206c00770e4de999e589b3a3f5985816f5067a6d9834c94a25db5c8e42ab6ebfd2cedc1d993cd1cc8479c8e46c94340ba54095f0823eea4d48c08a29b511117314fbaf5fd603180ed6e17e7ce4c5feeca6b13086202f47dc96be0dcf798e4adc925a856bd726ba130c2abb3e019dad99a60f4c196df8479d200fd694c5590c3efbf3ca330a6127e5aa80d819d412cb79208ece2c62fa11d8ade40b9ae83b8e35a8884e885d5298168dc1cd65b4476c12c2ac7b9f8e92c845c47511a2ca2b3baa9ac2f894bbc777790f8a320c8b697d1f63a8250d30ab600ef319aa710d221b70b57e50047a1da992e94fcace6037fa9c0692fdd45c58bfa4e67e6600ab12813c3e02cb355a64815edf82af84568854470868598b23061230555238e5231385b0dcb4c237445658ed82169ccd96592e42b2317e02cb40a5cf7c6887a3e72fa109aa57e64cebf27fc30f135383103ed05a87745fed569b3938a336b79ded521cce3348fcc3c03ff53b25dd8b4feae4c6f99b1dfbecb9241cda63d2816adc18f4ac691330ddc0e29eb08ccc5c3cdf68b1ff86932596d8d9fa10f083ad9bb4f513993653ea0a77aa831003f88355dd854fbbd2e5091cb04e3a8312f6194286e592e11b87c7202bc8743de03489232cb1e537a70a3e409199035a7a9adf39d45cf79de001d095b624f2b3c384edd495705b043f889b7cb664cf798c1728211110b5883ad56c4b9ffa2dcb3c11fea628b299c7f9362a93f0653fb060354db6b20f37ed068d0eeb1d019c811ceec8488af0e0ec738355e96b6939aea5601d76175e4eeab2574a5975b1a83bcbeadf0ca5ac5c3df406cdc66f059c76aceb2c77b081aea0c2c69e69c612a5f181184c8189a64c9056d4130665a27ff1712f7133c9b096e6e4b6dd70c156c531388f471e357e6adb7fde65b152747857a9689f14ad65dd9fd25dba9a27c821c0a1bd3bdfc30d1ee6e74f5468170ffbfc7c55cec2df822c196f4fecf00225effe6d4af35e887ac72237524a37f7ef163a3e0aca7b3216a77e7df5e6798c38f456debc08c1f00cdd242539ff4441f95aa714f4d68b083c8470a546362cac7611f240a391ddc6305f75e87335033024ea8daa200e031b42d438559622a3b70b73cb1dcec66735170883a567fe413c430ddaca988c05d3cd56661f5b19d057954a0f49eb6cb4b74634869a74d47c22fc0768729df23d80e7e4a801c762e3c41488a6bc10c028bfce5a992c6f4a7eaed6b2695653048b0c8a2e8deee9ebb8c7f1c5e764c500eaa9a9781eb0a64c7b620c91a937468a2f35618df8df6b23af4589e5822f9446372a0f2a944db1babca9fa938eca9848b85f1695ff925af04ff1ea5405af2cc7ec2f06fe821028dc393a0ac5c6dff562c11beec9d603614d0d91dd74766d383ad38cb9799dc173783da5c2439bbec895c328baffcc3d4315c83bb5451aa15f3c04e3d5988f74fbe158f17b8a16ab19d4af490571a74abdd6b94f2f6b124d05e25c52a862c3c545341726d4dfe7d1129f8d3e7026558d1efe688635ffa37b4403da3f073dc29f47212e630134ea38e8bd313e12306c6b957e261ca4d64d897405924ac08e74d11615f840d7fcf817c8f8bd5d5569197e876ce13c7c5ed725211261bea0158cffd7a06023745b0ede10b32e74ef393823b23142ea2a29f690bc03b05f3322f717e9b90fa1b590fb38376e0fddd7f97d1c3ae4b85e8ecfb4b09988fddc7f26d4feaab48de6073e9f4c5769a75a9a08666ee2712f6eb5c7ea8cc2035f55a9941c998046f3f8a270f48b6c3aa06358112eeab6630023577274ec021d35f2fbe0f68d42b723804d573d096ceb49bd03cc694da8d7179420f3405095f2a0c211836f0a849ea1d24bd84ed56a50c2c92e674c3d4352c31966f54601dd931974a59767748706c64e101ec9774a98b97096cb03c25502c2c817e3b0f309decef3215b3abaf44eba89907094cbf6a98498cb62c9ecbce9cf7f64abe07510eafd103020c6af7d6eb716dc7dcf2be5c476783d868c3fe7258e0f26c60fb419dc15adf3783adaa2b33052eb0665327a5736e1434c9ed62cbb9a50afc051f811131a6b272538533c17d14d30698a09a3e4165840a81c9b44d2af62077f5a71885c4f3f9e313255dcf387bd16a34d1a100f1b98b03680d82198d0e967cbf90cffe006a66344219d408eba31f59da1f32a4743070ccc865ec988c76101127bc06210f02c8eeae415f23db25dd1aadf81eb2f684a79adf84d1f10b4d71617fbce58af49533b16e14e890157fa26c9f28c76eb8e30632e7d355dbe81fc6b592f1b7c251a246b4b4fcc3dfc907620e2e8f77d895b06ddf6faf408d09cc509c015ee0865ad8f06cfab24c0fcf28a4eb2688148d01abc84ac1d1142283e25d331659d06731702c9a4fe4b3f57b4be48bb657a9a55d625ac9a21ae5a16b3b233a925c3f31cdac7c3a1f906038c7eee2ed427f200ebffd3658cfb5db042ecf0de4aed58f28de97d76c1d87b2b9530da56742026659c500c094cc2100071596534636b02bfa8814159fb5ef6e480cfaf089a229715142745740755b688edf122542ec6ffa9dce1725e87aaaf6f8b72a1d19c15323bb688c669d0328d67a33b00881d455a182122e167cff1364767efb5d66162d9a3d6f98b8ec0a145ab80e341dcc4cf5af2e89ee78a9d30d08f661f4d40693471e45918e6d18afc8052d03137040253be1fa6657e2c8c20b84ef178e325a2fd619071882e8af4f99f22543c8e3e136f4b4090c179574c25aad7843e698ff6505dc27bfa9856e427acd080becfd2b738003ac4068e32436948ab3104aad6ba6ed4112a1f17685c5e1617dce630cc8bfba4bb021960dd2f3c6c2369bea077a57f056458c07651145437f7cbd7bb5b835ce99dc8a0efc197d38fc797245b4416392b2fb71bc540b380f488814fa1d4012a534089cbe69cb6b77e9e98f6be3584570a620fc6c278c15e5e7ce51768360881530d35af4139641adce6cfa6b16a0c313ec601613fa4dd51d63b2aa63a29d79efeabd0bd8999e40497f823abe006652f79dd69337ef0c11f2e080518f5b8301044e8e4118e88f9506004ea50a4230bca65ce47812e98498d6ebc55ba8e43efec17a30f7515ba62df222710f72c84f3d6010bf1bb7fd5f58e713d86b35e8e68f83686550b75ece386cc47d7bf566bba532c3bf6751530580b7f662f6cc57756dece9be0cdef4d3a8568c2dcea52985e737bbde7e5e4cacbe157459d10bd9ab9d672e5d96072ff544e7cca2fc1aee0efb5ef53fa49d063f3af9784e965f3bf5b9b31709c8140a63990c4df6622b4ca64a79457507969561cd644bfc894ad0bcecaf2cbdf2f6e31d98345a28b6e134e881111c0ae465a92c02e2f75008ef22df4b774f23b0c7e17e86228f405c0b76ed656fd649324667f5e25b383e8535e5ff0574fc192cd267e9fe125a73859de9fb94fb706bacbad2f29dc9fa96b962efbc07b6a43b35a7fd8b0e59f244eec60953c44257d4d1397f947776e40e9f8e9b6cb835859c6d103db080c77c9c430bfc244b29dc033e1e2a6a09d050e09fd7dc0bbd0a467bf273e216d1b04b04e41a4c274f6d76fd1d6e960cd0380131f8c637761943bab896db2bbcac37a1d1e575b7eacc15bc14d8e7b5fa157e587460f4e20c95fd63c3be0bb4ec6d7838e6476b802c58ecabb0cc4f1d1789ac49f3de649c610b0f432efdabacc4ed2aba93a4da3623aaf28c99e2d103f83f2d5c65d1babe5503e9a28380229271626ef9b295c0c868b580451565ff51ba75c9b2939643d22333519a077f4255083c5174d7f1c3f82efb202e09f4b122bbcf71e35d4f170d375cde629d6e72480aac67527b5a8d87b3f1ce5736c00d7e1350813fc8412bad0b2a9a96a9e39282a25abfcc4c76983207f6e88b2184b8cd4683e97bf23fae5237bc384a5e62d1e8dcc7c2cdda42dd72dba44179429f408289de04f67cf566c922e54ffaf2bbb3782c9b40a2bb48483466b0afb97411e0e5ed22079454a86f056d7a009941a95c9d43785981bac1de86c9643a28a71260ab8553498bedb611d22c6f7d5a9c3b2b1af1811c3a83a14e99b616e05002dd748b4b3ab3f43ae90cea2c5b16cd8037d8e7efd19460f40758c6dfde88a756d63bc9017a68da9c0d2ed326bf75b298d76549b159a135e6227f39cb08e9a2ccd705f811a8525fd316f8a147152fe2772a3f3899ed642646c7abfba0f01f993fef6ac3e4020dfbe81a0be7d7be40b12c0c45e5ff3ed3bee4291bb66f8fdfc0548f0d8d1fa8e7fcfc293a86984ff98492c0a392dada056e88880a586bb5b8fa10d259ab4fa8e2127a6e96ed4a69c362544c15212f03cdc6db86187e4ec242f4ebfe95bf88cd0012d0a3f42fdab1de69432c40a529a5272905af3c96afc5914bb9a01490035620218e77a68bac0ee08d94b006d29837396872a0f4f5023eeba8a660df13e8a5d97f04bdb30fb16d9e4e7d1a6e6117819095b9b141b593bd8983d31c78e8d8146083f8337c7330bb481f86e511605090a048cadb7b4a0e90c4119253e640f36598322b606aa06145e034a7bee7e5b3052ba4a075a6849a309ef8d37911ada8af6325948295d4a6a0c6dd9cc242340648bab09552b3a58400fe7dfbd5b4a64d175b863106390ab5cb0f6d801ea4337a8c48d02e9f5f09fbd90fb068d180922237fefbdb794524a99640a7607b307c307d3e5925d0f5709622f2ed70bcd3c751944687bbac277902012be5927ba50c5e99d19845da8fe5c004710091f5927f6c79c23f64413889a9035ba0ce5100948e08275a13f273281a88967ce71bf10c87ea174ea9c0ff9d9fc8424f8f6d8d2b5c895c0e3997384eded3c5afe446f5fddf40e175a9e7a1c7d7292971b9e7af4bbde6137e38c33e218cec14e1b40d4c4b78b7370bb9e391f7da79727349e79c974a1d2058918247d61e5c31b3fe90b2537cf334f74592ac31863c601f9634927d9d4c09c4cd3b40ce3ee2cf6d269e9b7e26f3658afbdf7da4a7b8aa6dbe41d160b35df34c77cd3b66dd3325b691cc3c2019d39be22fb58528776cc7df8d999995d35257f7c3dfb32cc3b8b8f7df79b64201dbdf4cce58c51b5b2f1719879733e9aeba16961864d2a9d7126188d71428de925ed9dfa592c9db3592519a50bef92f42ea7e9a3c8e8669ec839f384d22a9fc40596ef4f88857ead06ac333344174aa62c328bd462cf96914bda12eb48e7a2e8426d49b3c255896ecaa5f959f974079db5a2597929955847bac65479606d5b8c3182dc3ce8a20fa53f1e084bce399b67641d1675e2d2b6e7d523493006d299e6689ecdb556611e7295f6d6927cfbcc9a7c7bed9cb09f7cbb6d24be8d7cb75257e9feae8bc9367da2b553d9dbb3023aebd2db1a6cedc3dc7ad7a717b27802617d873f7ef36683b1e98d3eed2c10bdb593d6cf28f3ca6a45e9f9cc35137dcb8f0522a208e40d4af939d6d37e7f0ac56fea3352689c6e8f34c609adeba76bad44859a71ceab4d58a7ba36ad75ce3a676302686ce1d4423a8d4198974e33a7d42d75bbf24d0b245efab65ab98dcceff5242d45cf543c276911c56b02f0b89ecd8542d818ccd922ef1040a409000e4eca6d709c5b26ede37ea2b51ee783730bd2d0d0d458afaed9388d57e3c5c761ad6b3ab5d61ac781e3c6cd0d4d8dd358eb98ddacb5d6db579bdbe07a363fb93680ad95c8d5aaeb6aadbee2e65183b556a6afbef2701ef9807704452fef5e7aa7230ad2a9970aa677c2f08e1fe9d4535f183fb4e129af5a7a27b4754bef00d95a5d53713f313b21739ae27c7035bef290a4cac3eb4892875bb7ab639eab5e83ebe9afd99ec643d6531aaf711baf3547bc8386579f49f08ecdab6b9b17747a1bafa1e1c5477128ac7c5bf9b6f9ca79340d8f9f3f9ba0f8d685ccdf3ce8f41b8d6f9eb79f3e2105885e74a7c7e6518d962e9c4540585aacd1828b76441f7b7296e1268d67bd391fd6575ee3f14b2e287e8d5b4f48fc9aed0b6df8e695c629e70354e3366af559d43b365f68e349efac3e201bbef2ea134aefd47cdcca37ce878d156b8bbca30768f31a2d6e0d0fbab08dcca31a5e81e29cd23bee1bf793f9758df311bf5583d469e48ccadcae411a1a4e7d0b407823d278ba857bba3da594fa507bf93747794231ac3e7c7519cff2e89a5a8df491de915e2b92cca95eeb173615ae36f9e91549f2541f3867ba0ac25594ae0ef1d36d45faa97d4754a4cc2321ba385bc90cef5fa6df952368371f3becc75ba7b752ba7db4abe88da131ce0fa2a37c0b2d8ff2936bbdb19432d487917efb4e1ecab3251d13e72177df4ff4c139eaf3e9d34fb31e3ab90596ef1e35e4bb2a1f9d3a8fdee9de42ca67ae6d0106db7830a077362b16b56d5eb91e1bea0bef95f372b9f33af5de4ace27e37cbaedf342ea9c967128748f3a7d21903fa97c82e298476928749ff3901bd0f60151713ddc4f74da930151dd6ee520eba70ea0f6ceb61a29bae940de396af30f373e7d9ce78ff2e26fdbb64d6ebb9b6f5ecdabdb5ccefbd3aed99c5c73edd47d9c17c6e722d703f5f530eb6cceacc3f909f3ce93f193c7bfd9fc709e79e6dcb67d34bb407c6a356831460ee32c67adc5ac732a7c3f1a8c2928d13df6951029fd84e20a422d6f852ce639bb428398b31ad48179c8f211e1d30182de60d0e9ad83946ed1512a6462200539aab9b576851fbd63a5ccb77da12afb7444a1e63c1d1e4b07dd6cb144d0d152a89f06f9704a23f609c51f0dde06a9cc922efba142057a07dbb80fc382ec7b21510a0d4615ea0af43ae659cfbc20f3b97f60a077ec2714bf7e3d660a325fbab07b99c8350102882ab014155db1020820aac0d2489fad644ee699671e9bd23aa39606330dfb7a4883998ecf62d34ee25abc72e79d77de46d260e698151de635469f3de433975e28d4034b5603fde2528399c72f2a3598795f894ad4336927364517eaf8cc1b49ef64e1aa9388f9ccbb49ef6416c967be9a7e6fd76559c638d907d448f64851d1152bae6bcc3632f9d91f7433deb879c452b71920baf0fed5a29638e3ec291314c7f4cefca216d762155dacb53a5383d7312c9df5e9e1653a8a58fe7a7c92d520bf08a5c1ebd9178b1abcde55c4a22b3179b129ae96dee1242624feb65f8f5c2218fa85dd6d2495ca8d3b3a4a0ea790fce839d098a7cb81981c4cf1da69f64ed8421d0ab1cf1efcb590fc803e1f27ccef631fa1f8debca213eaef911e245da85fba507f4ff985ed5bec1848292dd37b595ac93c27cff61cb0cffed843573b554b29a9ed06992ff5ee6eeaa4934ee903cd27e6ed01494d66ce9ecf67a33910f5761b1fd4dba9b5be7d3785eb9b43e0bad69f4dcff4761b1fd3db7da6f7e7aca365edb13d288e79671d79654e0b66864091310336d6a3ac51560cab326c46501cc332da29c39ead335774fdc2b3d3af6b3004b9257adf53e77676da9c09444dc8f662d6ae79e6f1620eb479a879731ce79c8d8fecb32fe88472c6e259286f392d6519e9d4b4b959cf9c76ce9f7941581f145f88507fe7329e4df78397f1fab5ce3c6e7a19196fbe6639b69cb6ca9cdc8c97917f92716d729c73ca9cb27c7bf14f5efba0aea639733e3c7a7225f0c8689665aeb9166eac23fd468e1da74c5fd14dd70bcfb9740df3247772291f73eee43232980bd597712d3ee69c1744c685ea9f9cb99f0b7c07e1c082e298680286b973bc28fb750dd6ef7bda591f68f2e4a37abd2ead5f6729f95a21f1ebf5fbf9d313ae94d24a29a5944143de77668cae9d9e6ca4f7b5b65d7a2cef5d01030d20ca719d475f0792577a10a1ed834810aa2f5daed08f81bff763ce213bbaadf123aad132a1b1446dabe9da742d727c51ddf4aaa4a0c521d97c873ec6f64834ad0d87e690b54136b607c98f41f30b85fa33ae077521dd0399ae173e6c0fb2625e18f3422e90d76d61bb10fb4177080c2f7c1021f5a30bb1cf02d173f50ed9ab508bf9e99f8d8f88f4d22352e809e99f9ca3bd56e71c0de0383465b7330b41b206c9972efd0b1aba4268e007dacc96ae6592b844f1e1fc8e317a0666b674d1c3e7bcbc9099ef477a2195dbe47342eac6f4423619de1124ba3e88848f284c1783d1a64b0f89bc2773a94566c9eeace3e37aecd757370db247ae07f3d8832faa6b3024f2306f7a42e2875148cca6943241f26d7ae4638e7dce3aecf1af17744fb88e7dbce266a276875e9bb2c306c8a0a1764cbe7c39334627bda55b4fe76b18a9c72f287e25c013d968af68ed335e3a20eb217c68bf78a4b738b201de1184f546ec44cc854767fee837a4884e8bba91542bfa54fdf49a1b62ba10c8b3b6f83184ce74e9a60fb1773287a8c54d4d58f0030b8e985cae1675cd234a20040c4130d11a5244a715dd48aa35a448b7aa1b59402b3af58c2ca035f443e6c81cea4351787c435152a01ebf219739d3e9c7320789c7904106465fd8c0081d5cb95146c72d221da260c2891327965220468b5bec212b0577b95af148ef8480640aa131ef085932f33aa787b26af1f30b9263c684179b20602de17520444978f9fa5d0fe5170efd94de9ce286bf9f11ad1ebaf061f4b03a10a2267f41a080214820e029907cf570043fef0702d6f2f5fb01e50505c00206930b95bf794ee2e2c31b0db1bb40d4a4658d5c34384822061eb85c2d3672ddb061882445418456602d6fe42a001630700951c010a4165c3c0592167b3882af9ce485152f14df0806d6d2b29f8bb5b4f81b627701044e80a8c10b625c435cae167fa1f4e62450002c9c182301940e7040c419318c19d3e212542f3f5a913439a717eda5d4a55fafa3b4ced8dcd40b15fcaa415a29523369ec523ae6b2faadd5a594b206efa09dc4a41eddc6662a61ebbcac23db8bc63e29ef88223448bd307a960cefcc962e73cda9dff40e751dbcc359e7769d7373569d739dfaaac6532f8c7c0d0d934f2ecaa53f27f100ccdf3478e3751b6b93e4c511cf495e14f1ab06afd7495987751869051acf4cd151e79605d078260a6f678f5c8f479f335e74ecd5bd76aed5bb7a94dc09957af4f6fa85318c99e601596776ebcc27602d0c81e105d707c99c05a20f0a45f00333c63c0bac0425090daf390b44af7d8c7d3ed9d75a29a5734e29657747d6b994eb896f29d7c3665f183feb09b3cce6c7da16de025d0f1afa50fe751eed61e5d1ed2789da9e93bc28fac94e7b302f6589407d1586a75b7484a7d4b7de892f68cc91396e40e3abf2a3c864bab55d3dd471758c605d051e6079eb15689ed9b2bcc455de82d171d33becd92d118cb7ab2facba8c6365121acfe8c0a5ec22cb4bc9f303b2cb16a66f1f1ad7f0a1db8ebebd53ad78477c125a72ec6409282de5eaa2c7e73e003bcb308d163bd4a44b4fc9b7e7681ed9ea10fc2d76627010209a82c50d53c2d0a10b2d35b498bbd275d216a5efeeae776418f1db9e93b6207d3ca2f1cc0ebabe9b00349eb141d71e3d287e87b1e4b339f5f65888d847592788c7f46c9e65af7d2158bdd08abadcbcb03a75ccdb37c75cd328e651274aec673ae69be6d1d324f7733dc6fe304cc8158a44357617479e3ef1f28c26ef4fcd10f31e149f3ab34ec84963aa7cfbf46c7ee81340d1432134a44f277a2134ace0f8a64f7cff3450fb8cd225a59f90f6675479a17e295dfa4bcf5f487b2f1a374f0a4fa0f8d0e70c211f3e14727180e9432124aea00f8576a0f4d1c31098e0250513d3472f4e3e88c78c39e375c400c6c71e334b5da3e039a969e9bbe839498c290f3e2785b1e5b999a54eaee039a90c261f919e93c2dce007f09c144686bf2ed710568ac2827d21fd1c08123f62d1c910daf5fd7de47a044d97abcb7318cf605ea35be57a38cb67798d69adb5ceae55c65aeb0565a2bff458ef4224ea9651c830d19e93ba4002c60b64f8610b2b46a0404a8b398deb21247fb68fd9e0e58b9a0d0ac9d7ac6631cc76aaedcbcfcd33b742f231d762739432b6f32e778e74f0e6f90bab4b26819b2f8a6389dae4fcc2f84171f50ef20ef9383c48a762e64a175e9ad485916fa6939ba1a28b8ed342349e91415237b946e3992a3330e82fc27cb165061a6f44b2861b9cf1427e91d20597f7a2f443052f5364972e927e79723715303064b66697308a4af8a1020656267c09f3d345681edaf2f2216301e3adcc2e93b27eba8fd1f5234bcf2d218bc53c4448badc708222aa28d1458b567b34c23cdb172e20038c1e7cf0440ce621f261075e3871c4888933a4609e0d3811c28a179223a868221635921a363f447aa51c226a596b3febedc9af6d74fb51dec13b2479de12534cba7de84266923cdcd4a54563a3ca5add3a87ba54d2cdd5948e2e806ed76337161ae384bc319539d486c524468373a68b8043e727b8518d521c218ea720751054029ffea03cbf90860fff10e867cbf4a7629de8ddc660f41b41554ff7dd3f690a3f1aa4eca51ed1b8b5283828f1c261895f35e801160f2cd66a87d58a06896e1a79e6c2054530e172658c2996b4d899c6f4e2de6ce288512acca904f3b494cea1545c702b8ee6399d3c174eaea596e8c23e9a51ba8f1aeb6eacfb0804afde478da597e6d13c9a52e61111e6d19b47534a12ccd3f512ed44cb00fba6942eea269589058ce2a9df2a4f7d7ed8d1f5a106a9b7a082e499453227f611e6dad19604efe83eea234a1df3b0979e660101eb9ed2474f7459f5a24f128f8000c22c6a81c370180ec361384c9c31c6183d471fc5e8de3cd5c0a9716b44afe19f27f97a38d14fd1678cd1371c3abe77d290b21d1d016089ca0daebbbb070429d811081784d39c20d0584da42af1624f1aa4452ee834bfe10070e94701e0c171eab37700e0d4e79c373c9c730660ce3955a939e754a5e6bdf1b08f68f89c930693728be43939751bd3e30d008e2a358b6866d12ceaa33e6a293d459502e1646f9cdf5784038757ae8f523d74d1ddc33eb2f1b08ffaa8b1f452efb853ef2c353335a89a1a9f1ea786681f7df4c8bf166e78d84700f090c3f41253faa8a5f494c7e1f103c0eb6e3ca393db78dc601f59cf86176e1ff6d15110fb212f09c5a7f199d02075956793faf8b5195477faa617950b9128a3200daf1baca49c4821bd8e84995c5e47b6bc6a10f3aa614b6a895709965e25509a30bc68008382c6adc52d328b94e262520ac924952493bc9209934c9e1223cb96540f5ddc22e78dd14b7be412b7c42d914bf4325dd58a967ac16495f1aa61e931f753631836b1c6fc48435ac5d884c66d834e355d7a0a8b2e3cfdf4d07fb6c78ebc8365a9b59dcad285fed67639c0b794525a5966441dd0a0a937f9065da75a492965cc62e2a00bbb9f9d6a524a61106b8fd415ab9bd0c1afd5b7dee9ac8dd1c67ac5adb50259b79f8d0feb4d5975efbd7eefbdf7621876bb8949a9a7aae842771cffd8b5f28086293f80e7170d47b610f3399e5f33283dfbd2950ec7e41a48c00a0b50ee9862eac2ee29a51b09b4aed3a20b4fdfddc72c40d07cf83995832e3a1b60bb0d4a2d13d01887b914966e426006a4c7797e19597aed54edb4f1413d3af5f8b5cb9ada810c6480d2c523524ee6a7c47427eb73d2f8c9fd8c4fa7ac4af9fc72e4007b07483a582368d6d03c8c5e8d1a343e3fc74999d13dca83e27f3154f97d41d3c31afee30b9a2ebdde1a5fe347e7abaffb1adffdccd63b33422d3820be1c5ae1e31752a71f10d603054d0fa30b916fb48d800b9a1ed2f8c23b31c7388e732299639fd71a5f10cd67b4f9fc6878fc2acf88f314e7d20b7f7cfd70b4cf888dd6f6cdb039110cc38810d91873229b6b4e24fb3a99c3ce3911edcb7c05c9c37d2c19675c47836ce9164f1eb2bea37b377cd0596735c84eadebb8414667fd14016eddfb09754e3bcaebbc20f44fdf0a355374e19d3daf7c1951922f2356364fcbbc49e9acd64eaf934ea75a7e3a4f4a27bb6089aa4c55994d78474f23349bf6fee136fb8a3eeae82fc5c429929a990d8922c3f9766ad7091e5fc6db6e6456bcb97456d2329e51e75c87f4d2d3fc657c4eee04996fbbd46594a452962d128ceb8892274754ac6061e2d22f7b4814ee723fdf6f3e9b5f46a63ce7db8facd2a0ea3b752ce84289d48ff9e47a04f161eb3eb15f66fb69e79cb91f1258e91dae7fe827ab34185f46a07c7be6dadca2cf965638ed0b8ad20ae5c89152994b82bf5f5094581af4a1a91fba502221f54e95deb1d23b4c91707d6130533a74d4a564b0d6d9e08eadf613eaaf42fa67af00098b8564b5ea8e148b115a518cacf7b09536451263dc0095ce1c731c01ab5bb9e38039b010fb1ca7c1ee066c49075f1ec3300c73c66e0ddc1b04efcdb01a300cc3bcabf298afa678ec0b81b01c741ceef92543101f3a4b0ca78e4c3a679122224aa46cb8f7da5be4defbe4af77477f5f455ef0f70b6d6a86d4912bbd4ef5928186cf9e5f32b83eecdc08160d2c165796d181acdefaada1efb3e4b95648fcf87d20587dfd80e63665903265e47ea59fcdcffccfe6a7975e44a0f8f0c713a08075fa4544097d7e1131410f3a4e3a03899fcf2f22367cfbc693f20e7e1191e1570d8a5971c1e5db6fba0363347db8f5a0cd50d16df439e90c2a32674e0fe143a24a3d9c5fe8c26bf1f53372b64643ec2e1025e1a5453f174f812484d722731408e1db0a2a7268dc3c321e5e2e63ae93e8338ff3eb11bda6699acdf553b8bd0c6b56d7eaf4aa694471c3304cd3e46bfe329a5f209b9f694ff6c79eec750dc3b2afe73ae698162c3f1da38e6d7ebdf858967d40d8c6a1307dfb306cfbc2a1dfbc7ae1945d84d900b13544c68b301ba07a6cf1909b1734f453ba8cc72ded7a3fd807c479a8b99cf50b39d73e1bcdad5377eeb3d1be9febd5af572f730b74affdb9f6fa988e7d6175cd351bccd906fb7aa83f1855b4de8032d7aa6fbe79f5f8b7e67a34d73ccd79c8c8a331b91501c61129050d64083fadac5156761e5dd99bba741bebfc525abfd50b360973ae34a0e8aa4b8fb68677d62a420ed75446dcf0e6d9466be3cab7eac3af837562ad4a7095af000ef3cde76810e7994550c58f7a0e967711c808cf3e5792abc81268a1ab56f45e672fbaa65a55e7fa711009daec0944c78d140b5b6b259dec92554e7446a89ce8a2472e342dbc1c399cf44645e9a4743aeba8a2d05a69ad5475441727956e29a56429a5e4962e4fa0dd59a382d285ac766128b6a80f45991e9d1915fd3e8fc6b90165e4e156c4811155de9f5f451891f23222865714d7eb08307ce3b7e1187520523bc89779bacee1197f4ee96d599abc8ed0f23a02899711625e4660791d71c4bbdb27addd7d738830024e5fbe5fcf7bef8d7c335d30c3bdf7429142e7aa534121a3c91226a922401c9068ea420547f8c03483300a03a5862428265372707224060a6070e2c904c2280aa32c92a07490468c88306241927be2611619b98c6e48b2e405e50a14268a9833aa9ccc39a7e482c5ea5625583204181b8e9e48e2031430349ab2f81acfaf27494ea60f54523f60e202197ce9820552e60f7cdd71c01c20e6e13898a3c4510d465cc03446d1fcaab0184378a1a28a2523a61ba60f31e0a6f2b112913774f9f2848821b43c19e3af6a09add43a55319973de996436b9c20696882a2f22a05025512da1f17aa23d89e167be7cd8f913960e2cd60e93c98fa0090c5f927eb0010c0b54bfe4196906527a0073c58b932a5aec4c2307550eb3e6098cc609b8c3300c0b424910506e1784917baf4c0c6590818a810b20c838c5000b23cba2c510b398a2061f3704a30208268098c1bdf75e1b6c70d9228b286890a4071b7a00e20803c288060577062a1b8a907ea84275a4338267d084e4c40d5e70a484134a8abe283203c3300ca3474ea002c51048621c3143063c146529d2412d821529155da19281c6f34b88256384b0c1bb4eb5bab9f6de21d1de7b5f42c0f0f75e55914e6583cac6f32b081efcf6fc0a228b0f3b6fb2521959ad58aa1958ac1d1e051ad000059227a0808196163bab706019428327905051658c0e2c161122447866eb56ff8ad42a850a8620562b29552e1c9c186bb052c5b05ab122a61ad275cfaf1f9878c7bed70f53884cd50b734ccdf3eb07275f9f5f3f28b12ec42babfe84d888db988fdddd3fbe732d723d30acbbdbbd970f605e3e209982c5911793a5d79229a92f2dc42348346e8dfd5afb854058777a767a964aa7b355b00496d4184d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4da931524daf265a5261bc9640498191222305460a4c2a0c97a452f44dee52bc5d7c8e8dd65d626e459ff706cc333ba7bd372d6e96067b498c2e8c4c4bdf41e6b773aa874ec615c5ab07a497121568a7d412a925524ba4bca4bc748acb93170f499e5f3b4079eda043aa4a8a4baa072f265b669720b524b5842887266ec0050a5e567c21c4bca185baaeb3b606897f9dcb8779e67a0455cc63a4214ccf9c35a1b33ea79c73decc7bbb6ed632a4941868d087ff5e5ae566b55a3186e2219dfabdb4a9ad3de96ca50ef503c3e2cf19b4d2aa4395d64ad408dd5dad68a573529e2c5740bbbb99b15bb1696bb593ca6fd2d9524ed952baaeb34e512aac6a6aedac656614c6485aa99c93ceba444a796fbdaa132a85063becf6cecc386cbb71521a3ba5225a69cf3c6231ccf6c0543228131aece6bc97bb5c6d3da3844631a0c12e9c7f6fb575525ae984c16446add01d979873ce792f4a030dfa703ba5d5da7ae3663dfa9c35ced9f40b2786d16aeba4b4cea4465520c3b42ccbb0ad41332616294575a041cddbdbe7adb5c6f73ae954723eaa67dfbc5da582b69414a5c2a4d3b5cbf598b5b677d6da681dc3acb591cae8734e9e74f67063b17e91527a86021bec1a9c7332563d9e714e1aa5bc9366c90109cea1c98a09e93463440169b06b90483af550a8b919b7f95d798f9e5f49c2fcf32bc92b49d1f34b0723bf7a7e25617aadb79694ce3985e49413c592fb9b52b49ef5669b4cc71c917841a2458cb1250d923927ad3588b0d65e8c86892ccb326dcbaae0384ee654b3e8baae43cdcc68914aa5522a1a2f1334d1d0d0d0d458cd186a361b366cd8a8b141c97063bbe17adcdcdc703ef1061714c77cf4d899e397095c1f1f7b7ee1a004c716bd170e40d000226987213a28799d9410816118d6052113a58b112b66e8f2820d6800a364c8bdd7060d4444dc108549982e6614399a33f040050f5ee4b09920070f527840ca21093cc0f30bc9099ee6f9854409142da41f6d7afa9f7a3dfd92461b1fcfa5d07de4e8779144e0a1230a114410a177248fb4020a2caa7045d1428a56fb8a79889228e1c00a0e2b50a205575aedce3c444c9cf8e00c2c456028c249ab1d649e08d04003248ee0e0062d28a3a565f28efaecd45e0c673a83d235ef8641e999b76215830c4ac9dcefe337ab57f5d27757caa0310e0f06a0ba549c892d29879bd6cdf5e0b27f017b00ebf4365fab1b23c0008cf3dc391c004e00e6ec21f08e8bea542a2fa1049b99148f6d2b810125a46cac8d4d1b913b33dfe6a184fa4f3c5cc2c965be70e8675c47efe8a8e1218bc643d06b3c9cbce3864ba7bce3c6a5d798001b975f08648497cef234e9e948d2491f11740c619df61b2f12619d761b2f16890568aff16cfc587d2158e3a3f9c255d33a039516d5962512581084120aca48c28915b4dae316e651804b8c2a9088b2640a16ad761e0ce89d948c534fa87f4b99a0e36f54e745979292d20f15bce8a4a7c43aed29283a576c2496528c91ca0c5c48b1620bd7122f584c1254aeb88e2881d214feb203122bb8018a962e3eb01524a8708939820692db9c7a6d846a1e338334c8e63ee66f2e157e44252c514b548a51461ebd438b8441460f5e988871a28928071ca078a10b9752d1510a3734717112440e8428630137602106941e6e208613ada206a3d31a9d8c332ab9240fb78c7c885561fb52caccc3bceb49d6913a92728ef41b1e68bc94aefa710a0d462b1189c6972e9deba8b42d1685350b152a120000001000d314000020140a8744029150281826daaefb14000d9094406a4e974743490cc3300a62083286114000310a1040081933345403445a04f33c0c1ee287358498db2ef5793266d3f48fa5cee9e013a9bac27d0d0b27c3107243f447589745d5020edbcb65b57673fa4323511c0c1e8bbd32ebfa2a2936a9f5f23998f9be5dc9ca9df374cf84d1b15702c5aa42b39955f83fe5fc443eac36533b3937676d52dd1f234118c032182a387c96eb0427ada3f169671f24cf85f3718d7f2f84da7740f5c3f9b196202a8fa47178a41308468360cbf00a613fd89c6e14de10d6959b8a80af0680116b508f00f96047b184f075540a9cf9dc7fe6210577ae874d160a75b7275b01ba365568cbcca1876eacfe7cd1ec4ddd422351521f4af412254d1678a12432448b45d9eed4dcca491932e9979906ca3c3c8b3118e60e0d70fccffa8355f61b13b09f9d12d1d424f4d15ffb0cf6add121df60f23719cafea3e22765f623c9f627f7540179cef6022e913b9cca2280110342cb48ae7728abb97b5d9291c8a7139eac6174570a6e5577151e83f7259d9c74acd3f2662d0b9572b4754906dd0ecf87c22e50708d0de20f932fe63b2bfb84eb8c3aee4390ec9e40696aaee828b075250341bd65f47dee5d51967f4f6b48584a362bcc47ea6b5c9657523f5012984bccf0ad608c910f70cdb7722ec7bae0e10b20a3a609c9a3a1458c37c6941656b383496567517927a35a5c8f02291523fc28f87889c40ff67ce7f7e2a557d5b59877ed608781e761ade641da164b39fb8944874d7b90b911625367504a860e4fa21d526ec88dd745b815644852e620bc50aa94e0532e3f1f2cf9657e1f1807271f96ae701c84d8360e277e489edaedfe1197572f6fd1ca3023b89e953b5ee7de79590d56eebb0e9acae82df5e1a47acdbd0095d49d2be1900266280eb50b81f3071ee4819303fa67557dfbeb2b07d83c296e5c519b54bbb6f0b6bde88998ac284f68f5511fdd0f9dc01eca71844958741f72948967a42f0ed97e2d905dbe4596311427dca822744f6f67ee4430175330d6851c8d3a772c297a0507ee58c6963bb5a4d31b745b032a603253a2d7f6a8943326ed47eb78b7badca915109f8c96612ee8f9ccbfdc364a6e7cc4317dcbeff9f9607e427ab067250d391689fcde257094ed789a0848212113b8134811e242ad4d591eaec96d3371f909cad517d568e2425f0ad1a00794697fa0fb9adcab668feaedc2014406f0f9ea9aff94e750268792ca1ac5ea3332f2e5e7d4b32f48b4a16aa2844359f41b31b788eac63ef8c99e3700cd91215251f415d058f319f1b0e362499f7c9666b584cc1972a61ddc070f2c3bbfc7f56f27bf80b9c2bb8b3ae17a229097f9d2f3b42677415913967eaabf941e6e1e69146ef3f8e6b48d42e1db60c56ce98a8e51738b6aa0214dcda2852b1e1aaf84e6e7fd695df16e1b67f63df89367d6971dcd36e6075eb0f0401a3a267a6da4c24dfe06f99ffe84ef0dba5323b9e64e128e4f64b7953f82c3d40f0e7f09ce32f9e345299ee45920a4b81c396321830bba951d9cef80e6c1dcdac2c47697151827de0a8227608b4141fed5f1c230a165fc2c7663fe0c872e02b1829dbb19fec7018be77a1271abc058b2fb89296da1dca0601fbf63a80c0bf3b6ba526dd72a3134e0d9a7197ea83163275e75ae4bc6ac5f4bedb8671fe15268d6a1df12fb1786246c3fec86ae32e1f9ec46606379872de85fc60f1ffe22b9978b084df804626994d97af79d594184b52ede078b61f77fa81f122e797f8d750721b9915f064955eecc6d588a7abd7442df869281d4581dc1013c2f07f0fdb375001903b99e9fa66cb152f952f17a2f0f4c6758ffb3436610749e17c131a0084a73d9904ceb157a975951c49adaa4c322426d2fdc7d8bf043766b4f21a30a68d8a82181eca87f97bd0c8429e7eae0e8c496388c85ab67ac72a825533f4f38319ad2eec8c7754d1338a209a3d2e0606120068da55e635b96004dd889536ba296ed19ccf73474f7cf8313b6a5dbf8313805fd95ff82d830abede56ea079b44ab7bce7ca5458d8077a65102a999712924de101a41668c95809c1c8c63421d8aed98533e305619f413fdafd71abafcfa840b19c417a67d61db44944c266e220e8e0c8c4301d8349ae0175b6eeca9961e74882bf060f55d79a7a55e904a3381bc4906d1a232315f5e27e1825b77d596f039d8430c21a9713cb0f7c2256f612304182b1e45796580a40feb9a00317f69924dd79ffe852a06bfd77d3ff3368c5a012645c1db990ba0ffb222950e506d50f6c9539116ee5a379cd1420a42ed0fd34886dafcbf0dec0750bb003ef4b568fe4b57a1c40316a8e1366ac36af990f8c55f38555ac741b5c5664f594ca22c2519b7afaf6f21e2eaf28f8e513e656618e8ba4fbc3508ceaa84348e5b993f1b10fc2fa65d53f255cc999b5228c682cc25fa243023d8cdeeaf5d068512f9a9b61882245fd45a42fd7f001dc188c880fbfe40b7417001ef12d9f78f2e7824aee5940f199bbfc5cd6f3d4e6017954ae5f4e1d7b40e71ed484c4652b0d3f289b504879d46ca3808b7fe02998e0b50cc2fd06c33f86261ea440b809ce81012d49e2d0d6ecd86cb142d0c4d49659847d8e0db7c2238f949031bb78a316880471c94679dfb260b3a36400ce0d36dec029be9855118bd1de8c2f221ebf979b201242e20b7ff38f4a5af132849863008bbb78473c367b8608eaa0adb0c96d750331219faacb228b69f46dbe17b410c481fe17622dce82761acd2ef213af428036dce4db4411da64b416002695527107760708918df6e0443b543ed05470f8a97dd5d2c79abf5cb9a41458ae386359f210185e4d1af50b10bf286910b554665d2a66783abd025ce6dd0afeb3f74110416685f5f55b5779434d12e89154d17562b7588f8d42745430b0cb62b0cb3c47428f43e52342bb81aa49de95f49fe495e19093954238233d265d66d126107ecdbe47e00621e4ed42ffd7f783fa411b228aa1ac177d1ecc046f4a73275fc5d76240e8c0f608bcd113ed39afd204ddd72b23790c0caec9417a4907d3b1c141bf0e5ef5a87182115408910324bbac99eae7ea4f974c3d553acd43b4f8188c24d75a1af1546fd6a9b2fccaa39171046ee309a2e2aa8c0125328af4ce47afa4c9271dc0912b30b36c8542464e54b691b3cfdac81b40c6d3f4512223d38d00ce50a11d53718c44463c3252e7fdfc58289151e72f9d1b75feecc751195dc1d7f70c293242f39f283d22dc6ec459d939f76d328b3f689fe10e00278b8cb48ec9d79091be9fc1d48945a669e8c2659acb0a276503402f11cb6eb4b1992b32c2fd0538e68539fcac308cdbabc1a4bfd862158dde0518dbf2e32881d163795ef18b9eeef32aea3f07deded25a707913af8a19d1b7183d9672d8c02aab4b9962a7c34cc1f4af3445ab8a541a1942a0bdd36f8e8cb4ed6a26585085457a373b9c0e0858a48d9d93c324ce7d85ce87caf295bb6de3b47b14534f4e133a99ea3b69449a73d4e1622edccb24bc4c10aed4bca2bcc5e76275456a6f51f7d31b3a705b29595ec027fe0e57d935fec3af748deff1283d0deef895b9467bb0e1fe95ffc63bba4aa7e1399cf2dff80eaf926bfc475ed91ad68361930efa0dbd57b9fc8468efdcddef5ee9d16959b12158b959482fcddeb6c62533c96a776ba527f8901c07b76fd7a076f3c5e9622f1d4773926f5a0655665c9c4b28a5316ad78813af5b6f653341bad923d799d97aafe1cac180e132d9983fdb507191b0be66e6c72ad9e5d038d0278f8336ea1aa2deebea1affe067e235fccc999f1d3ad38e755e641d710a234d5c9c9dd477cb774e2f12b5b046ab78dc6f4bdd3686c39e4ca54f00bb2c133471d349ef7f65a3a7d084eef38fa79b57826803545b577ab1d5cd4313876e859b300deec7a48968c638da5494631c6f3edab80e9811657c874c8c32b6c366d1ac318fc366a3e440bbcb0c329406e9ebdc85f8611f66cca339862366511ecf41b3a8c7edc06414e371643eba311d01266ff4b11df83a3d44180877d9a0296c11f13869f13b07033f18fc647ed4e31c35138d318e9b8be23887cd4719a70326a28cdfb136fba28de110d3e9234e40784b263ed0c3b774b8a50be1484ce503537adfdbd64c705789447d5f3690158475a4f7ee87e2d802750ab8283581551b00ab86cc90abc20d1da340ca9957de6922fd9424efc9c6d5111b05ed59b69d678687b5e4de6d2d05dcd80bbfc1d5c48daa4affab797e5ab40df4804b1ca463ae9dfc63313c241c7dbc8d854a4eca23e01f47d127e7f7b65296a5416fda9885ce48d114f27ad026efb91f2c966c01f28737386b2f46b6cd9b5aea7454df5e5667119751ddea298583388f0dacad8b5acb5617864767bd9a7b2839dabdedf1fcbf571c5d93cca58823df18503499f90abea8a41d1be00cdd5060aaec07e5aff3b29b8753a1d5161b363b0878fb23a96b1f5ab3e12200cd09258de88faafefa07a1dc8da5274bd7de4110f7c30a51d2fb2c3809d791f9e2102ed408fb15689fb4997ff7088ae7ebc84215447c809b06f4ffb6c2f2cfc8c2f5552233e41bff26961d79b5c198b8fcd8497df459caaba1718ba04d8ff91aafa0d2aa989250b5e06946f6a31d7928241e5ecc089371372bdf7b02e7f32a58fa5486f0200000ad839c6ff834e5142b18cc22838d314c43b87b6de9a1e5e40ba1095793251e511e481905420ceae168631e63ec373bcdb77eb32101c0b00a83bafe57b28847ae0fb0db1ecd66b697b00d1ca9352d40dce5be33679f86ba977219b2eda62119463e564acd16cf14624fe3f2bd26974d84a5187d1d4fc8d06f08f8e27f48beae5388b2a7020e7b6556fef95e051b5933b149a0d546b3201c7681323be81316578f740261bd117978f35945f2e6f25aa8281531027ec8055b08f228dc6c5b38011393f3985e8cf0bd07ed155f22861301e8a7cd67e92cced9a8b08027b5edb3a63b456b1ccf116bbb2ab9206a96f62715c99ef28c867972f0e2cd1a01ea87dac4f69b95a4e6a2b57c027b0c9416fc6d7e2a4e584688aacee56781572438cbb441345628dc6e99b860fcb559f76409ca6bbc82968e67684db412b4341950b2a8e6f6b59501be182e72508635d73b2e28272e5a1f152b798383e11e4934de179933304c2f2d3b2659d001db58795039545785560496bbd01935842435ae57d9b971699d765a0484aec18a05c0f27ba9893a0c14c1d7f310cee030a118d0419d6ba9635739532d071febe662c2b50acb63b832c73a6e1506f12175fdbda28a96bd24e048732a9425b2123213382dfb501a9467e90689b6a2f70c82a9b85af1665df16e093c42ff51780c7ff757b017e7be0cf9973a806058bd09906a7ffba130816755a42f0fdd48150de93b36ca4041c04e54d65894183b52a9534aa4848e5e0614632f713c5f883a7ccb79657fd999297b1d42a38d179c123274dfcc9d13bbcc26db9831ededeaeb0c97c1bc09547945cb4146e5f9d60d6b983dfc8a7a9ad9c6debcdaead240f212f1984b53aaba6a7c6c1624b0d61f416ee44c0bc1e5db488ef60b4f53b900bcda9c82ce66d14891b676e43539f3a95ad70442fb1cff014d3c053c1667bb4008893c1043ffea4b03c3a4ebdcb1ae7f75b397b8bf867aac36c7cae813290a1e173f8a3bf7ffe3fc69f32bd1f1e0efc25a7bad9601a2c5ce53a457c2f79d3534c04d46cf4cd16bbc2b95d7368f5a7c11b6fbcf597a7f6e95055fd015d2a2a1c68e25e4a060795d9d2b3b993b28ee56b8be2188d78a2ac9dd8d54f4dc247a206fcddc6910bedbbd8665ea8d069516b0dfaa32e7ccaa0a0c17add8fedb38c31e5574715a2f3e5cd2832d355f7dae50d0a6fe9814f78248880b009502a99616a1c8c475a65d2b0f6ad1a0d3684fe5e0c5fb6441a5dda5c9b6346b44ed25b03de58c507f3956fb02ac241155413b78d0d3c0f54137643909510739be38a962f926084b0b01522aa35781a83e84f70f89677f2a26653a05c00575b437a875cf311d5514b00831e52ca8b7a7e598505f631f34c333338edecfebe6f041b98f69675900d45619e0269b59af076d2a3485ba4d461817d6f5c716868e49cc51e661222913bbcd2713f7763b5bcb35d7713bdc2646db90ab285cb49d58e5aeed345a6d8d59740439f44e12000be562fb0c51ea16103864b0a179417b7f7949ec7463f5640d5f4d5a46f81ae314a49b6bca2c31a354c42a3e1ec1eb8f1cc149064196c97426826f3047122386c8ebaaf8b2abbb9b236778e818dcb6d79cf5b3bd158e1e80ac7369c2acde02121e66d889bb7be48cd678ae8a74ecb95dcde35c1d79b8e9ccb35432b2ad91f07045573467ad7f6bd0936b64fca298f3e91b703e5074a8a992de7836cc6c9235a40107482430ad9c30719c7183867657827090ef041e2290862dabdd63d44248c50906dd67e1bd2bb2d5e25002ba742e268f4a900e0314357c40cb8913b571381fc5b3df696328c142a131ab8fa45a94a2e06a93bfb62a1c31714dee7f2c30031f1c889ad167f9aa77eacfb7303b641c1e57a1b65c02082c4a41ebbb02fb1b240d33cf4ecf9330ccb8609023314d789ac024100b06a85f524e074c7af2f84c1f6644a613ac59192b111fdd3ab27e6d468222ebb88ead33754e9dd5e975acebc83501d4790510c5ef5ecbc5c01dd8b081f87cd3730146bf76f8f94e478e2adc22ef43e823213a6cd307b97ca8f27336ec688c09898f59855d9d53167d7118ea7c356d6029f395455f767ed343c61f94a6751815244a56e945ca08a5d606478d8a00b81aa6d8c01226057b19ecd7e0381b2bb80b57855f16fe79bb445f0a5ec050662b53e1522b30cc8a75253683a8b40251212240641f46b50d8d2a2e7000be64e3df4a5cece9df2c6f5ed1b40f9741e9bf0763af845c6ea142b26f64d8ea85e596c55eab7d66cab97be7dc3cbb9044ecef97191a11df0f2ca08995148745ca9c4385b8e2dbca9bde60119695daccdc1246f7ffd5aaf27a24c2be76b791b52584e1934470149f30010f09fe0e00f453d288ef327b26c0a7e5f1c857efb4d94d776ebad3987702f822e07398285ffb5b781eef65b84f86675a0e42849e41dc86999d9925d2c5cda8d1eda336981159b1b8b8a179da2ece6a9f1290f50b49cb1173c955f33d11e91d0e3e28943b1f0f42cbd0a592abe87773e72133df574f8619a1c89cb34c779061c2b6d396951063a58faeaf4a0ddd84a8ef1e978953dddae162470416cd81456431b6131d1f41d866438bb57143570ce9d9d83f1a1d729fb8e56549f97a99eadfce35ee8c17d2d3419383a9119c8326a8e204dc65d642db2842ffd02244b8b651cf1ef7c042fe1416213ede84a7d3fd58a34257993e65fb05058238c16edd69530a56721f77f3385c749645f91037c1d51ea4cbd0c27da745e815f760621c79649dcdc05437ab246bc12ff154389144bd8707ade87311ed09bbbc98955fcfad7cd0c43e20062024b9416e6f0acb64c7f670616056da7181d022198e4841bd8a07c8f1b13fe5e9b3089902f3873d5e10b410d4efe537cc701fbca11cf5a42d552862bbb01d4cb4ff8a473efc4f37f20348616f062f427ea5e44ca8f813652e178efe9c73014bdebb7a8b22c2a1af23cf21a252d170673f7cb2a2037c509eae537495cec997b8c7edd2d16956a2210fa6c7e9eacfd3ac9f70ffc8c282c0d2c645705bcea406be3072d4e8a7752f1d74e141ee3ab1d41333ef42d2f7c1625d1dd6041dee00d1b7aea1224820e3b32325f33028ccac4b2ee4e91a8dcd78c8763ef2de4d7731917c87272cd6e2868e0bc4c90d8fc3dd01d8143f2caa5438fa8242eff2054a7cb51648065ead0bb497add9b95885c15c4d1ecdd954957c85e861cba57e7dfdd914f1f03c507c39344f0215618a639dc9b663e7e638c5366fceef2bddf74278eeb92ba3c30eecc8afa3d8ee09cb4bc4c4968fafb5654e342be5b0e62f69bab429513efe5413fe7681cb32827767490d6e1bb4946aca02eda3b0efbbc2aa62020b877e322065295ee049574d59b71f01b0e4d8e4ff1c58b8ef4ecaf3a137d5c2aeaac69079bff7181be9d4a3b10aa9e9e5c245092e995296b0770f08b8f08a52f949ed155e8f3b876f5e8457e1de9614c2a066df1fa1ef96f2dd49730394081a97d128ab493469c6c6cd68f95df87944341cd1e17046509f2eb90d3761085314a873d64498b8dc3c3eba1fa51b6ad62b1c6315ce93f0d2f9c1d8f6160bbc6801066ed765a7045f4a33ae9a04ae223c9778396d85d39aa8fc8f3b6c51a84a1173a8c5abeb7a376862b07b54083d38c12097276a0ba738ab799b4076e553b0490cf160b291abe0af05ce83150c00a49c66662956110b6a575e14e51ee5952ecacbca28ef5acf2445e1ae49191e99b17c9639b26abeb59be0b9cc1d79fe50bd657dfa19807bd6ffa6e98e199ff7a6e23feda38ba925388da01aedd6000de4b65ea5db78ad7e3b27fa438baedbd98c7ccc1863aa30369a4c9f14b736d474e9f80a6c45d3e88b85abb0eaa0bceb94760f6fa04a6b064644cf855e6577862529673829b93032b55c5c65e25977f71f11d3f87655398266a44134e89f486061d4e6b408e15a97bab1c77209d0323f04d9c9d711ba1d28008d7804f88ef081cc5c5841292bc88ddf8a6d897de82a55f938b898e4a515b42f7970f13ff260b8e539a54ecfa624ea4a8c2ec1534ec00cfbd09c723c60ab8de78e3f2d0e39317957190f8de478e0b6d2a739bee858f6f55d65300ce598db0f2b541114ff57c6bb4a61d4007d7bac70f678900b2ef119535c1592b810df74551fe4aa2e22b302ca22d3b5c7c64d17fb97a317faa0ab0e3587582cc04aa945e7a3a906a9243ab844fe42ffb889d037c34e5f497a385d6e4461b9afaae8bf03625d946b4e8aa4f1c1736b5cd6de193aa37a06ae7e4f5c934186d6bcd21895c6bd114294a04c6bf2d0b64b52f237c668171c86b859cdc1207f557231b2e8f24c3710b2e2ca28253c1e8643532fe22b5a64ac7671d4384b199835371df124603c321bb9a00ad91e2655a627c5ba5fd48a7f87b7b1eee12865829ee8d0cfcb94932cb5cbc4d820242f05034aa281295ae89aa6174c96c4869bc8391001f4e9028a212ca2fd440d2574283f81a06cda854a3fd6a45863fabb0e70a4e8f63828c38ad9b8391e11c1ad01ea23819041664b882e1f51e8dcf8a4afeaf531dae637ab75356e4ceaa6c705292331f106ebd5b853c966640283025b39ce808ae5734d9d29b03e95195b82d591f7d515650ebb0e1f82b9a37bd681f5caf8bc50627ae17858bea5673caea7b7ff0213cb2203bef568916c4145fca543c8bbb4bff756573a99c92e6eed047862fcca742863e201aefd0b71e9d5ebdd50e590cacc536246d78c0dd10aa343682cd0bf630f3a1f52b861fe5243fde480513a625ff32478c1f34864c019f44134aec444af7aa6dabcf0a3a41b008f34c2ca79c383309258b8603892617381581a39dc012f028f83b0fd003bdec556b302924ee6ce0e0c4912a56da6d3151d270331e81a19de5fd1fd241383afa15c8b6ccfd3a979bc21021ad84d44aaa5e43d345e8bd8c51fd861a8b8cfb955cd8019eff9ecd5cbde8d28f2432054903e8a2dc7d3a20062e60bd31c6ce93da7dac27c1d4e8235d6dd2a650937b43d312b0a064b87d4e5809f4a6a235575890e0b8530908a0fbd9616a3ce558a20c3fa9bdc3ac38784b95a8377b7fcc0b1501d5715f08834af2f4177aef75a8a7a6e9d4e999475f9ed3e18fc345f4b43d0d923da3359dee309687d59eab6faafa54ccf82dc6e575789cd6e035baadb1b42f55fdf60ec426d574a6b9691310f096ce92c87d966323807033c1ccbd677a9d491009243c988281a73ba548c9609d22c65424c45435bff0d989f540841916cda246460d202380a1919436e0da079604bf3a67c82e982ae8668387d94ade5d82c440f864644ee3f06b6946999f1f830a85f4b0d8d456e8e8519483dca40d458daf467afa592b9854ecaa52c0db85ceb342894d29827665033a127c96e1070b6d56b69a6e222f2fcc36bdcfe5f7a2d0d026e21fca342efa2596b412a4818ee16bd0a67c250bbcdc485a9d7d249352b2fdb8c4307c090bda4a12bfd58d10793ae9089907a2db5bafe542c5a238b5e4b8b57284b557d3b46e61e6122c3d8f9d72ce56a50522cfb72eb31298e8be94cdd9f1c6811b102582438f2fda8adc7627a887a2d95b63046462401a9b3472b0b33839eda0a8e20596741a71ebe0e1ac1fac2d5ad60cc709d39ae031341043210860932362768b05bb263280cc7b5b4bc350f5d690f8ac2b2bad43431c9f4985f83ebaf95aea38e042628a9e23bc56b69919b90b36a192dcc5cc4b72cf26f44591a734507afb999696c1611801988be336e15ca8c277bc89ced923ef844e874c34491e1156c62774bcab6c6cf1be9e2098cfe13381776fa438647c44aa70452d48b8289d7d2d29f0c210834eb5ab92fadd2decb575ab9416e6cc825a58b326a24d987d1336e7a63ab561f7d391af95b458348f078d23c6f75994f02afa592bcc21639bbd6d7502caabb62e81181df05e8c76b8c406ea9e56aed7758428b9071d52499569c702970c4b6bfdc1ade2d2d351848f93a06b0171ef263f844249f26df0129d24623589473ec006bfb02122e1d20b7d848d31cfb89bf8d4d7f507fb7b4990f90847d65e9146fc273e0b6cd9781d02d358aa9c0a1a81dce9216f25a7ba582b390079332d1a619c510734b998d3b915fe6625e83b5b6e35ba61d07ad6d496de92b75ffb8d96f10ab7766e596cefd76fbe0b7a52f785dfc39ae097c2cdc36863752e596facc62c38c3b7652bbd9109afbec6294cd17bad27e30df7dd9087d08bd2809766a9781c985431144c3beaae0ecfd899558d04964284eebed33696705aa8713545453ca70875937f29c986dfa2be368165060ddfc17f6462ddda3bcf877f1b72f5a899642f7fbe1cf5ebb61be39852e2d5b0763e68193ee211db7b0923c695736c1bd76c765062d5b7471dfe1cfba40a3244a223a98e721812c5d63c6c4f0b51b3dec2ce286f972517267338c1f008916936fb9a114beafc4a764ce4187f19b741573feabab72defcf8bd89e0546fe8f244be76b9f14bd67ab6e80277edae8e471d49f2b51b5a91703efca7f59c4d1ad71661a98e0f68e9e91640f5b5eb0d4f70fc2763e9c14ff13bed361059f9f0b9555d859066488a53a6bedaf832abbd80844ec85ac546dcab7edb7c56ad7cccba354f43c581be29edab0d5985a1bc578bc0237d821845945c63d39ce3dc69a52e280b13b213bc5651607a7cb12f7a32b53c56a5bd8eb00729893b2355982193e611345e6c8fc79dd804e4501fd62629099ed8416b5d4145aea1a6cae02c4c7bf10dbb1a26c7fe3535b94dd3eaef880e85710d0ad18977298844710ad23a1349dc3a2d3dc8713bc065f2a7e6e8652e8e172d7bc05342f6ec5e7cd90e459325f38878db787b5b60097be028983bae5b668db448b5071198cb42617b1e2118160eaeedea2378bbe6c1664a672b4ffdfedfd992a5bdc39be69242157af1598fbe35ebc74bdef2cf3d749c636240cb641500480af28496052ff4b1172f86897ef25f580c86a3fa9a581fb5219ae640464c30e7e32a65eb0b266c723c2289c3afddca4630119761b941e5f4a7ab28e26b21a95843e010c251556bb7fff0f0258de703b56d12d3356b1ef4993fa709ab86edec48b9bcc5d4d057054c2327e6bc03514929e582116002356069ac3ec2baa620b38d60ab49f6dccfb04a94e8174d481cdaff0d5b900c199462d9dba5468567f23907f7b7d90980e659616c3e7110aa2e13ccb9224080bac0cda9ec6dd1a630cff397451e5cf17748f2ea16d8e93e4cf839bf015b5d504f3b57e3785e0fb1bbf026951511a0c6d373d14dc022c36f3fdb96c8bce069210b12ef3572392e6f305872830f4fce3c06f1d8e2de288f12ac85477616158c4e7d8cc875f7d99674de1ae1c6883e28207431b9577824cad219d27866e8ee06aada1114bd4ad599ec811730a494370c2f18187e4a1fb0a684a59aa2ae7e871333a6ff64f5db8142116dad6e9d7b0be7e761b6054d6938424bd110befee6743909b9d301a14e4982b2d299ac459679a77569f5c64c0f5f23e935398907b966c34589248cc1c4b68db744ca0c683da1b585fc8648507abc7e07e790a70f0f54d986f0c89dbdbd74d4dbeb9260ef7b9e649f26d51fa8343f0af2c2d79a57e2f18327a7ea02438ec04ddf3de23ec7b76393097aeeded9bde3c468cb1a74ba848e97514248481eb2d3a89136847abdb47246787202ce89bb36360167353b42bda449debd3e2a02d10d61a7f55f56898e2641567cf5581efe94fee0bbaff7332ea39a81cdcd4210159fc55d57f8daaae082bb3ca6a7c2bb7c2fc561a0bc08905371c10fc0a430ad3f3f2497a29ef9f4d7f1e835ad9ff31650019241f29b9cb7fe905654833828a12863554c6c2cefe931dd02ab84984572a08e010af963f6c2dd5c4d49603cda4036b3fb1d40d6291183a5991e61285b93ffc18c5cc18e83abeb7c3d12cb103ee50c4b22b23ae0c833ffb2a3d3ce0764163db187164575d4c90a675ad1d31b2e6e2643e87179bedd927a74171c32be03fb437338bd801048e9da72f5af318b52279e94928413f97ddaced1089825cc552de32e34409ae5fba6020d1e88769596febdb1aec2a686e7553ac1aa42d22e6f3c6c7e7618424fd0f4353ab9191d878a274c2763d6d121870ca81bb64cd877ce656fa778b6a0044dce5c9a507a19d217ed706d99e25f51ca25260c659942f01c0d2866adfa9e99b275a70229204292c62dd532b483b644d0dd8c5f1804246cdcbe99980870f97afaa32815b7b0a4fbb0948a048d59f35fdf2a3db0e97cf1ba3c5ad23ea4c8418521bb9da5c3a612c4544e6cd2c47373df9e5b10dcc44987fdc8709c25e789132af86f8ff93935569088e364e582c7e175f18091591c2ef1557984358e9ed6560523b3c424c42c313b2968116bdc9f82c181dd0eeaa4c0199bc74b4bbabfa9dcdf01b8340b9d023926e64dd68569611732a5155561cd73223debbbae11855846c48855fde0d0863224c71c9f4e18694371d485523233a717b3957ac2d52bd11b2823f026b023c7893628cb716b0fc4f20d11adf14c8c1aab80c9c066731ffb8e22a61da26d105e4bc1a73add08d7233e7812d94632946939a321510b1cd19ba45b570df10f41dfc0f0904211fed88f1bb08514a2c4a1b57821f78307e08262753c74bccf67e934c076e593fd001600931aef5127cb60beb42bcbef9e36035ac2553691e54e44c7668427c996a4d68a2296440825dd052ae9214579c6906c774b86bad5d3eda908ac4443080f013ed0efebe7d0f20f54681b6e52153cc7692b28db82fb38d4e8b168b90aa10274668274a3e4c9cf59a91f20f891111ada7c318bbfa86feeb7ffaa5db2b0dbfd328c3d453f92a63715ce6a03dc0a2c6e4fa366e1428298a75b0046b35117d6a73d59b95b1e9a6463eabe9150388ad4f16511ee80846461ae56d58a1dd9ba333cd7e5204c7637bc02eb81d86e5292af50472b13cd10e0bcc3b87ee3cf9f8f2884d9ca98603dde60c278573507462a23a862aa26ac798f6d9e27d84026ad1ac73196fdbe0a66a3a48ea2c23b40b306053da06b438a795b2e22b13d111ea2b0a75e17f9d8994e62d3358f1adf9317da0a9a2830d85aaa52fa737b771b77c95efe3cc827d0c9711e3f3bff9bc584fcffcc5e5a14fe58a8b6a27fbe07911bfe23d8875fceacd768ae3ae8cfcef0c9a6427dc0c1bacc2810dfe2d954b45f4cf070cb38d301e0cfa917edcf96c33e8af1aa9e60261a5f5513fcb51cd73a7290557daeacb93129a83ea1c1c176b49c2dcce70dc28bd6eab1b06ef86b5cdd7d21a9105dbe59aefcbd505fbfb9a64c38ad75cbee79fb302ef4af528168d8a056d1c8e55294bf376af7781f1111f7db507ac3a284e0aaa2639e54e3e2bd9a28f4b680ef4ce101a7bf4d876fd6a3b4ff5f047ce7f2c40b7d7714d75c62de0ecc84f21b1deaf8795cb6963b34738c8007887a4ce1828e920bb6b28b885083261f6cf38901fa3514d4294a8de561fb88b21605a1ae047f046504fa5c9f4956a98e9e4179399dea9170b3b7a6c9ae6faa0eb4f998a7dc4c4386a06213141f5b6252be7f0e401b0563039a79c3d6d42bf6cbd334366771665bcf28e6abc051c873243d283d900eb3da8d243d0d285cc220af3eabc465e415b295542745fdcd42b7113cb4c936e2359061ca2e813815d33a04502792ab953e0962daeb32cc3ee6814498aff7b5af7686ff4f3b1a3bc1386daa1b05408597f22a2c0a59c0da0b20cf1456ba32eb7fd850bb64429b8671c19dfdce0b159b0950474e02685eac871d52d60e33d25a7d2cb369587c1b8d147bec2c2b7d6d0e71b45037be9d392df196ccf839e021b3abcdba538efac37574ac56376da4629b5196d44b840e7557bf764b94546cd523fbc0544af4759a7561d8fa651db72c3bd16c59028ca0a5b51b213c696c97eb692e977438259f5cef678e104a09d48cb0a9512e8fe70d26130aa278ffff1906f240b241d6703ad69506441c964d3d63e490fae1aaf418246b5d6764b17e262c563be67588fa57d9f22903056cc6a865af857d228781238b5732647af0635ed133121f710d8b1e1616f1fea05b5ff0112844c18472c262381e6d3661396797ea3f225451fb43f73f76755044bd0180ec40424795c22551bb25b4728b4fc5b176cc20cf341579e4f3153f4cffee1ea18875d76234fa77ee231b20ca8eb8c36bcca8993c5384c72c9ae54f3f83e9d30e3059d8d0f2da08f454217337caec8fa1c0af17b1b3c47e47bd2986b4880332fd4fae05918cca01e12020cac814a069f98fe2e14da14ddfea6be27a282d2bc60671439a12306fd9945fc5a1c31ae4c66049c883bec70a059a42442349cdb4bb406a32d5ec0fe7cbd1d82d8652a85017cee5b0c844dd572bff36eb9b07b04210660524e1ecd90f3d082c8eed4eea446a43ece7e9d024b602f02b689f5a72874ea86f08be1e4a1c85bd662e606559fd059a67942757672b019e518a9157a564b2e9022c68f165229778159249888aa85492e0c651613ca1f4fd4d4e2ec6f48e61e49d8699a21e3aff671e09259785f1689638abe20360f73eb44b4d18831c3298081dee1fcfd80d7309257125dc9c9871bff5c7959ce2d6375346f772429e61f7a7dd7ed8f6f9bf322a9f5e7ab3f67320fcf775429a75af88eb6fdefc3a0e086964d250f770c6505361cc145828dc8e0fc5fec74b8f0859c4b239aafb87e0cef567b8600d7ae36d3ae2f74821f53dfbae5b077120a0af8f74231ef7ef79818a4264297fe8aa8e4fa1822189f2654cd5909041120c3f0b515f6c59cfb856acbdca8e6421c1446c682258d7dd6c70569d82012d604149ca163afbd0582544f3368f25ce6717d3e98a22ef6a52911b64e4c4e65191393914a2bc77c6c2e88e880cf1cd1ceecf5df5d12cfe872aa65fcd8b45d67f33bcf53aea9ff11ed70a6c47fc892bd1fdf370a25ab1666cad6a18d694cc60dd823cb9b37fcc3aaa01301e8f40617e7ab5905b6d0b346442701d64dc254036a1d675768915d0bdbf9a316e89bc063124ba500148623c7f1dc1e7fa31a024444518f2453ec60d3e3718697336de7eef26bdbcd3d18b1dc0d92bd5c72e5e26a790f2641756b7f3ef7c43c3d3eb50475e436ae586e0f0c17e01c349d2e84bbfbcce17fa253f7a3d9f13f87231e3377760473f72ad62a109a4c05a6965950b1857fc1f1c83ab5682ca5d166baf8cf817fcee050ef138974d803462b2f21406df191d06ef7bc3749947f9d3a01bead17444ec79db2951132f0c5cae574d1bf7562fc0ff91fc9f46552714fa8b8530f9d51d03025e9a9112819c65a12992cbf74f5a116684011bd57ce249e6250f13399fcd415d054f65d2346431a0ae7eaf29f91f70ad98e174f77c370d082635ead62ab7188257e43100a73f3761e3fd42a6db23dde509ea58c1cc45014da470da2d0cfd42642ac4cea32e09582e7476589d3c9b1f05ae45b34226b20247ca36c1b3684e1f960d5598fef29cd1e446bbd29e8693313be27f27c7dc851e607ccfe2a83523e2640fc462e8718c46be61a3a0f8eac4d1cf3cac9f1b7d42b20b9dcd69114c16ea75c59e849afdb5f8ac1454e8984b352077f834538ebdd607bad33243dc43627fd56e4b95fef9b0db5012507c70d4cd05c4b0644a4a2989f36c2786bf2e7138ef1d9f4acfd8cd64a5f7c07e0bbba1e3cd2d432db1a7919948e58ac4d02d7f973cb3a1da68bdf339c2822baa3b5542f29b281ef37297f4db23b96bd7f6ca253a28f15af26e302384bfca4039fa89ca0362ea5ab4ed1a082d239a53bca1aa00f8bbc846e07ad0b2223ea04bd492606daa0e0240ac4a45d694f4cff2b98c29b6d5777d49b35f7d8b4248d7533573d2f856077ed7e2af460d0d3f46655d94a4bc8c6e102ff253909429e607c4946d46bf7b2eb1ef718a245b32941e8e94ebaf2d86412c561549ced05ad1a67b47f8799f211515805580d41a384494165e480f052d128f186b930d5c0697d7ac9be852df6098e1fe40d54a8e06b71681d5dd886ed7821f873e609aa2c8d6dc5fee11deac1da18ddefce5d5984d1860fa799985e07a01b7d5d3632c24009863d405ef8b19de4e9214126714f04073f0dab82a5e32d9c084187d16e93db35a6c577e6f1ca96199fa4f209b2dd548e1e7412d2146920937f044ec4e07567aa7f170d3d22382ff2cb0c841bebdf565491e5c3e4421ab5ffd9640d927d10bb14b2a31f8a827f5e29a6a8dbc11381fe26e2651974cd0df383d80b19cb1e922e75cf65dd973476902e6843d9a6766f74ea1f4d0ff67a0a2348c8e10c9f6037d12a087eece0583e9ba7d97d7ec421c97211133364fad0348a38e85054c3ac017f01f4bc7093db2a8828605096473f38d6736e1cf69f781022950f103021495c8e950a97ca7da8bcc93194914006145135a7fbbe28cb2b1c6a0fd5da15899d43113c7d6c641caac053627418fba7954222cfa59f6e87d5edc9b4919c4136c99b8b2c432ccba2a3bf5d626bbbed4d532921763e69659a7171cf8fae2cb30a86458c3eb4fe7651695404e1044dcd55413712cfe80b9d97ab622d5965abee04fa85f99e1ae92af0746ff7b86e2167fafbf18deaadfbc82c41a4211d36c6d079c998b754858cd0d94cdbae933fcae35b5532c2766a5fc14123c0e23cd344c5a28c5f74d683e429cbfe146fca72473a4388da00f95a8a98f74eb5c090f0b6f3b1a4ba2df4f8b8c2c17539957a12bb6be19f80813814b6508515a10a6a00ba0f23644520630541ceeec537f0c2bb2669c598a0f8008cc6aecbcba4d89306cb2a6885e62c75c4d7361f1957ab56c9e8eb042b608b15de00b86a0bfd73050acf7d2e8d23a3be037aee778f5e2ae2a892df36fcd5a41251ef71667ecd336424b48d06fb8f00fa88966c72610813fd84b9c03fff437893241295f87cda2e2803cbd215b29fd23bcd54e3ff86b6a012a5998524bcf9673fabd7a5aae3df6ed660978fca7543b86e35570a1211b938722d17f31f161e344f7be2b522f6c6620ff61e111323fe61d13dee240329e9f7b7576ed01a560086d416ec6f5cc404ce3768d021a1458370405d6d7ff70c13c3d60ba41f21a17de241905acd18b5d28e63fadd37509c18b8361e0fc971be6ed51ee4de2a6adb2a2afacaa43e32933443c6928a24f76eac7fa547232c6828ad01ca8e80e4dfc675085d223c48a0ba7199ff69bdec89f5ad0e734fa032d2b8a4dc63ae16a07add9acf81beda718f5de5487aa84ccde4e300809a0d1f502179566e114c13fdec26cd4eed858387b87b4ad1901382d15db4d30314effa6c63459c8d016314ba4c9ffcdd26cb806415e5efefd32463e7c4d56d0acbe6170f72789e5acbedb8f6d4561fde20f7bb5120225eb4b2ac98d1ba22e7a90dad3d3d012b4daa3699a55bda8db8fddf45e7d4a584bbc111713090f8e830636c6e6007df4c9828cadd93ca2848c9240ae6709518c48bd65148e0e21c654bf6d6751cf23241306ba2283aae3099e9415991affdabf67b1e4bd88495dec3cbc3eb13fd6f2e242ecc56f4e62048bec880174b23040e8e7b52141424f8cb88d5d1f91890c61dbfc4f8d69d9208fbe662b36b0db2dda30a232f2e805c2fd1feba65183998d5b69910e7db7885b7c9de13b9f91f4e3a33b8be723a2d58e18cdc11a54ee506fd83a6c76e1f497e743972d0d78c466c909ee15decb55e24dd4f9d6ca77830885ef1535f79e58d1cfc4e5440338e1fb18c03cdbc24718aee180b2290b545a5b7cedd025f79b955738833f12a7a4a9b7dbbf0996fcb51a0072002eab143f4ba79d44c797c4284ad984e5da2828c9747a94b8d9fc8ee3e5f07f4fc5293bd3d97d39bdc4d71f1708897a389887d5f4f8cc966c60110f3be08b06774fc82b8369bfc9ed7d9a4c20fa5a76290480608137554c86f431f5d4c710df1ee11786d1548451a1d97af93370f81c654be5a84b7c1e085404c91069f03068cd4df29920becf0654c8be5f06ce91337a2b03bf730032d78d6d11c00f93824d5f44de8e2eac15a5ebe40dce76903bb7913071d7ee514f80787e23aa4813d738a1b724079502a8f57339b86febc1ebb29565783951a3f898268e0e1fc098338b924b1ae91dd58cdb9dd24140a0494132a3e0518037ad2631542809e9141cc151dc7e9989c8320d0bccaa07c71990eee5294a0a58d2deef7fc68b66f3876c969c80c55cc86675f96576ad7377abb704a786dc3cfb409db9198001e8b2dc1395a7188d39ab6e5693af8f656f77ef9334ecee14bbf98be763007444de1aa26218b5af1350f23c70f5ab44bfabeef23518cff471684800eef57b22209a094032a073f8a7892275ff77ee27416b325b34dec52a61df73b8b954eda104e4a09d85b08adbde6a01e51375f952c66edc13cffce7991a35469eb33e15edbb5e273d9fca93e3c7d859f7b5c58c18339e14b66d949d257a98f44b6e97b124f5b035864232c8a5c48731f9d73fc45de54e6be314ce1f0d98212816d7bcfa81a6838960f0e3de3fcf7563149dee9a0f335f005e2cd9fd7a6368b80820ce0c09bfa28d25173fbfd8de8224902001022b1c096c67f1e2d807a5a59ed21918470514436ceea27d25bb17f600122e8d7a8628881becc21a9e341db577886a71d17e25727141d4caf76f7d65726d131b2b70d5a765a2a407da2ffb1224b80209d7be72ea4e86636996e712dcd912251710a08cb2a54acdcbe5c45c3146c89eae0462464bc683bb77bb339d89af791ec91680700248df16ffc054722649abff22667f510b3498b73517a251e358bec101146dbe419891f6aea7c261e17d4830d4056b8f7fc4bcd9e2d1cc91d3f1e664ed4ffd613409bf85f39b2e483755f0b0cc922a8656bdc82e374ba54717479f3be3e88f79419d05332ed69910ee2d94daa2dffd3648bbf5793992884db861b7d9835508bd53018957d72c30666e817276315f45c354a8741f6206020cf723f374e9d4ef430ade860f7a5f5ad8f0fb9ce1f0b37253fa6bbb1ca80429346624c6181e14ef307457c6ee03982aaf180b6fb02628c2a70f0e7f124093b346cf84afd7b7d15ad44754493c7ee1fd60f5968051bbb89225b7b6a173955dc1d15f601ccdc87e55bff853a9961cacf9d9889842000aec8ce84b89e901912b38e217b56064341c0d375e49d00495049389581dfbda17020f4403abec0cceb74f960faa1030bcb86653dbd154838384120e4cb211a315ca1da642678a328c351fe0cc6a3b8df7b70871ae2c090f72da838fc4e29daa5e2adad4eee1fafd3eed26782dec9fbc1c01360ca751f7da202e41204858f4f928c55e34bca9a9ff1b408063fbd7044e34ef1491dc0fad3442c7799f0441951bb9d1e79eedcdfe65c1d93829979fb00a2cbc2b9f227f601764a231b8497b79e62285203a2f06b03cfb113ae089ee2eecc2dca0749f705f259e3c9801c03ad5255ab772994a34db5b464b7feb53540abb52ae2abc7fabfa90af04e924b1eac17a6c6e996d6315ec8ebba72a96abaeffc0bf5f1c892f058e1b412e2ecc20c9dfb7cc439099f98f6514e4f4a0d4f4d3720e8e5c7583af8b92da7d4c28800415297d73a5baae81cef339297c4c482b0471e8a7ee74cc10efec988b1b7783b7cb7167eca1dc6f27173e516cbcfc1d4433e7471f00d2bf236e497d28ecfe87ddee8129ebebff21e94d20d9fc29607f1de89f9df991de8aac71b7c872a45fda9c9407117ee36fe119687d862ba9b1d5cd552073247e367b21658ef3ead6dd60b3de67334edbec630815ed6ced8ff2ad3afd2f646a235e470b828ce7276c7f044f6bc9a6b84582232c701907f9cfc2ad37066c5e3ea64ca61671e20fab290a930c08aa0c5acb4061acdb2944d379b1ff41235185708001a4d050ea34d711362548e0881b2e50c7a423e71c09267cbbfde84c5b38319e17b6237ac14f175557bd5c7ffa71e5a7aceaed77700cce76242bab5c676a6bb759ed6c2c217fccdf01168e92b448aa265d09e82ee39589f93e00388ad65712d1d8fda697429a753b99e244e0e64d97ebc010b0d65dfb9b85d5c0bad261d761143fb6633a66edd4bd4e72e16512dbf4195af84eadb689714ea480baae261218ac8f4791479be0f7bacd9aca58f654af31bda89d5e79a4645638deef0d46eb8d0f0d21445eb45b3d815beaef8be9a1b0f5114a6c7ceab2a735a7eed1f62a02456b5aaebfced217d515a55f980c218ecadf0771890e24618b627a91d9d75eae61f5bf3f487bd9a68d0119864d6fe7eefe449fd07394187340433baf4e262ce571ba5d1852e0491b330f8a907648192e31c09fda2dae4d1b24d63cf666c0774698a4b9aafd84fff2670f83dd1992669d6cc5443f993745981992e837d2c59fe661ef77b94f2025f8c2f449957123c343a567e8275304ebe58d36a0c69e7c9070d14c0edb5db66c2e8a549ff8db1a64d67d32d18c82b8ccbd3b7597deb4ea29589208ecaaad40c30f167aace242bc8356704d0d3b775a66ecd640ff0f94fd772fb7fd0beb742561a158e79f6586b329da65b2e6f8e2102e6b64f2d4d5a6605184b6be2b857ea6e45515d17344780f2ea291b471d4b8c05ae21533cf0699b1b030e3892e7596b370127ed65d1ebf80fe47fc3baaef240a61af0bd5131836d4de92007311dd6b0cb10d92e2b05c6c943fcae9792a3e70d58eab19a89e206086f13f808a963fd3f4ada42b0cc3d50066e66b9a1393f89741df8e30251811d7215044dc45c23f780aa6d0c4271463108150c3c69aad4a97618cbe9917e2e82e29d2f57703b902888240ea38a2ab6abcfceb1984c2c3625d1ea8283a7c194a17a71319a5cd7efb313665cac0baa5fc91aac3dd8906db85b5084c9bba32f91ae8921a929ed9eb0a5f3470e0242f70a5abdd26017ede3c92ce3870252a361206324aeb1603daf016464270e5a0c8b9f63b46725cbd9ce8b20bcf317924ecf098a7fbb47c765ac9d745c64ac719691f13b32c1e50b8493f0b24ea616017063289b4344001c61573ead0ba550a9f3310d8c5a2ab64a7fc41ef9f1d2f269c1ceb2f47302cad0d9939db26a11db7cd4ca17bea6c28ee1bfa0a2cd88e1ed868013268fcd697f818a5f5b361957df573f7a935fa82023ac9e30c2c5d218edc72b9863e89fa0a083c30e2846fce84d59ca5aeed217e7ae524b29c0eb6af3b07a81366c090f614e197e19f5f47237f056f84a596ac13d9e6e307c9b1954be0bfcc1a78c5a78de4da327023463d71707929592a3d35143dc849972fc9dd6017533939a40d740270a5321566e666cc20f3532a86a8200e8cbc4babbeceb300d2434f3c525cc41fa8d49d5064c0815a94e247a2b4cc28dbded8ea078e2ea85a44507228d2fe1a7fd862c173662ae4a3b5b1f9d05276d2abd118c9f3848b9193bf9cbbbc1997eed5ba98bd924990a4a56048246e057505cf84a3684f9bd661338ea81fec30d50be4ccf1b36f4ba3841d3285d691a8178652020dc3006a87a16c1088617c3d62f86a96920e045a78883c16538e7448b35abbdc17d147551c2bd4022f84e92149234976e610d5ae032ef3148384ff9196dd9ec7457b3b5cda904206ac3bc376842a52764c156d850405557d43ea0b1b5b3a1940610b82a9c05e2ee4daab7884d18b60617ed010742fc479c49ac338c729c19c86f0517e1e3c68d4faf08cbec1eec372b136de459b61a525901833899c14ccf27b5705303f6f49e79e94f740dde241973179f479cd351bb701a8cf044bc2f9bf57f468806555b38c9e55eefd437acc8b1cd9b2ecfd9ba2f46f77fa7378e218256ad2e9ad40f509430220ecc6ab6f675cd1c28fef0e8c99d5f63dfc291527724786d1cac26b68ba629e917a7cdb7398a754632fe540b07d1d490c233f4a20896faedcd07d0e69565cc281962f3e6b05486000cec5d4132e809b3e759b547e0a005557aeb09d5e87727d812a797aac86953d71ecacf29730dc3cb24f408c9bb6970f168cdd9e63c0969c80babcb1e808da469069c6a5e1ee015987f04abd7417df1633afc9d0df47f9e563783d0d4e69ff43f36613fee40eaa1f8b5649b756673c59707e316f51fd378694391a746a22c72c401ba6b2445bab824f00f69dc9de8e7b8ba115d80e8f4029d8d8c6a7ecc94daf5924761f0fc00921fd6dd492ec52d21e85205c2dfda72ed09acab46db2422a94711989b394dae81c2e604633e1028de65e01a12fdd6b5e2e4f2c1e58e22c0304c45b9a9490e12b43381a32a25b4f34cc87ceed2621fb45923420193481fbd050ac93eda9982fd0fcce1b332c88041fd41e88859f04520e6bc78b63120629a0e3a5f9ed1702587b00071480242e44a007e911d3056e271bcafd03cb94146bba9c5ded8b29711af054d402e023feff6bb498ca1324c01bc223e859a988b3e21f1d9ad1bd8a7b8b82593240f0464641a6a586b9d2d4c93a2f47752ace9e2ad5b0298e33c4bf96f208045c00e3e8b63b6ea41efe851070f99b65e375e9d0f4975f3bd4d22baf4f2e1f8bda2371964bf0cdb724cd7a8c4a1a5157c2e8254d72d92c7b6adb48d5ce64a6f21b335541930abb681f9529118196047276f3a876e1b9c2a50912d2f3ab3471ccc30762bf0c3f0c9cfb52a57878ddcf2494813ccbfb0fcfc1fef336feced1abf5a1acf791fd69948d8f9c2dfaa41e621726306ce04a8e5b16e43cfd1aace7fd45730f14d324417c7c40fcee22240308ecd8c065f5dab86ab83b645a56f5666d209469086fa570ca3eb2e3ab4c947d69dd44ed13fa55aecd71a692c978642628c3b5424bba500ffcf28cb721fcff08fe8c573dd97164dfcc3048207f66e872e0d6b2fc8e013d789631e3505a5ba684311c1439bdbc2c4ad852b4cc0ce91fe6302d9329321aaebd480e4faf2539b7f11a569396f56aee7c6a8825501af023694dede57f995809fcfac82c9ca21edffe009a8ea344574f778000fa28f429778e8ced69fc830e0b0c73b760dd1909ec36ce2e9856ab43eb38f6d954f15d567fa7b62bf8622c57871d73f23d0a647420e548eed81849c1b1815b40fbdecaf095d57d5956ed28a159c5497790de88b69f78b51bc63034b15515f94128bc9133b3c687123cfad3f80103710d22be745193d1e32acfe6803fbf7d014219cfea985683d69d57b2b90abc55eb7ef64214f3155b37f253138535a6e2a7c2e8a22f6e22f4fa1659e4be99dbf4e97225acc60944b48b37ea7e55953eea273ca895f7b1b6fe2176ea71d73fd8529e6799e0e9b1937d4654e77bf1dd2e18d7f2b3ef644b23517bb34cad048aa2ba3d27faa725d5ba1fa008fdb272f77913b6f43a789210ca5c7980969eeebc18de0cb23369fe57f1ef99ede6ccbd342022652a159e1211bd0fbf10c931997fe18decac6bde0979fbf17a6c94675e586483a0fcdd535dde3bca7a19a0c9dddffb0617927b7ff28a6f619c4388ad19549063376292146df6f4203f8031c9897794b1381e44a822f180722c2781f40aeb4e61759582f42636667af96682ee9ad994f73475cd5a95230fe502488d9ecf5853416b1eb223e5b5d959778c7e3e7c049787f32f3d2955269cc210dc5a7b5ce683118566106985882e5bd62a6efca0e2f27b229e0b0e75508d46c6293ba9b2d79b6894ecc5a7b1954650a5cf53c4c309a3cee3c3df3099ebd80441bf4bcb69a824e0bc60c9bdfff28e6173ab5da911e7c4d15eac1effe81c0e1b570a50b5f7f432f48124a1a6016044ce33d511c292452f9d508c8f72ed044b46c4dde9dc52f4549d944d620c03a3887596c6b4f5fc261082498f595e0de231bc61cd9e989a1948721da1e589345a5698981ed959d0ef7cf811dbb740b07475bc5d1d2beb3bd20c6928e68772dce4ea5dc38f2048f8c149c3195a83020a1570317978afd6c8f3b65d432448b23b0e67c3642f29ed9acb145108eec8f87e831d324cd8e07bb790540c5f3b3001b8b60d38cdfb8da403b1de387584e1d537c8d03c2eda837b0eee7086aad26097f0964ee4f7ed84c48acb6f6b5a1a17f2a4e65a93bc42d4f210843166644366baed011bc4ebce8f39c23e026fe141d792ae41b7e087492883983a4ce6fa9592a92b01c7589e8d5c0d26e8e017f983dabfa9aa54b033f986cb2561b7a9f1bbd28ce7030fe21670335dbb18538fc569a6d8c26612953001d9ff1d7f2796777203f1a701eaea00b3171697a13768a44dc14c0a339df20c124717343169742eb56f25489515f0729c4c99cee8f64f9f48eb95af8e9d1aade340dfa47489958400e2830b0951d5c6d4cda29da882841c04437ad833d97d82f146a9f365a44df1f0a5cff66cf72f3482f76691676a3542be3b0dc791ca4a39df39e96e29e872689bde07f2d001c5bef8247927d9d487ace8156a43054a74abe1e4ee8d19c46e918ab6119ee5bb1727a8cb47ca37dc5d36050f999040a95bc1702594d554fa684c28d6677f366d4e777e3751fbb9662fef840a7eac45bee1962fe085b6cd5705bd7c6f003494950a32a183a8d9ee4bc4a4702a0d5648fc6e9bff9d2ca30301349497d0c2461721db9542a5bfe825015d8e5ba259cb06266581f94896e532ff3fb8e87c76c81b42bbf3d94af92b36b460cd92c0e791c95d996ebeb32a9672f283099484623afac60f73a0ede4e256a1dc6df6e5a8e741a1876324a2e22254a2d6f2b724b86929335c7089f3ca9d17037a6d836d69c9b5a8a4aca0b4edfda9892b962d807cea1c439324c1bb8959fec5732666fd7a5f7b69eb19443d7ba11ab62ede751ee155a2a218f30cf13718faa0eef3f538e2f33f4890616225652b305bf4430eb3b31efb0794c7c0090653df6c3ec8f22e1bcfa128d927277c35f5b330e229826f766ef93a14ce2b3c306a6239339c2151384444d19437067c47ab0b8f09e2dffcc31daed5e0247cede14db87a48f9b82ff8acb14307554e67c3bc0cb0d7c9d1d97b4e657a6d11ab00f3d3867f93daddc659048f90b8bb9365a79ee05001ec5369fb6d00dbfec7db0d0ae1e559e2bf4a29f4f19eea507ce1110948c1e9bbc396c30055a3673899593bf27a69e9b8bd12e4148989af1add1ef9972dbaf3c19b3dc9f616f36dfcd34d0dca143ecc923cc16ee05f5c5861d8ffe89892f450d2927fa62b416273b7987a361ba3739bb1477d528d21abf98cb0a8467476d0756fce2b3e40c8d2ccc285f67b299d7d46f228040c32f304c688d01c67e0cae4b5786f0ca5aa52e6f312d0ee9a15feea3d290dc2ad59c97f3db39220dd1b58291bb99610f2fc34f4ff44f56ac3e3a65184572d1d4cf206e8e9ab6726231b6330328a6883c9618645ca3bf06cd2cebff10391117178203e6b3d6a03ed93cf26e0c8c700e0327eded34f473bfde7d97c31e04c4d5ce3d307f6aaf2acfd7d19c5d34c24c5dc9fe1512bfaa67b326527f7b37dd3bde6d7d58248a1ad6ea465468be95072ee3855f92e40bab3cab122a0c4ea34140c066bfb6cc70ab091061423712789593db376786af79c4481f4b34932a77c1181745c81461e44b57778c887ce28809e1b42147ac1383a48896ab5b6acc16d38c67abbdefd74ce70b18aaa60ff07a78020864d7b56224cf8600f92ccf39220dd1b582916342a61b4eea9c5f7ef593c2e5a9dce490066baef8bd6b0cd2f6237deb94e4e428f2726c67e841cf617a33fb79cdf0e6b140bfe350072b73d727065ebae7011a8da948bac7c73223042d2adf210945fccfb03b2e8acf8555ddd9f9efa174a04afd96a703c9e31deed1920877323ecf36f2a6a835fca033c970dfeaf3b35768394827c5e25801ec37f76f24ebd1f5ae54469279a2896ffb618fc28d10069413e1a9190ae42fd74528ee75d8b7711abd25a305dd1b0260406d07fd8240ecaad612e521f479f55a20f951c9471940c7e61825c99f758ce95ce6457d1455e90c17531baacce11796f23fc405a0733b39953ceec7f0baf088005ce2e6a1a3653cb2468ce033a4a4c31b8771d1925f786ecd3bc98afea23a1fc9b51da33e1de92139375ff8211a6fd12bbcc94203034c555c5508ea728b67413f04fe523574604d28a68a5ad48c514d6ff310553f1db5e7db154da6c6570afe112db4b84868cf4ccbf0860f75ca9ca25f00fd77118ec89e1f9c2a6490242e310e69eb865bf6750c62c77e8ec96bbb15770c8236d84a302feb52beca12be7388a72427d5ee86d6fb16adaa98c3359d707126925a8469dff1805d29c8c1cfc65e27fc7afccea150165c3f3684ff3abe93040e479a4945f8845b015a150b00bdb8caa8bb0693e34a438954ec8e0945252c687d475ffb1f80a6ed94f502854dea6a37db9d65b9be428ded687a6e0cc4f84b669a5e7b4416170dc4e9e686f1b9799e0d8a0325b9f8ce39b4e898e86926c1b4ccb51c23607dd83b7a3e18adfd0e68697202aa1d51721d4e4777dcf13f1d3c971e40026938c2707084db095187810123b669f383bb6032510dcabd49cc0a7e04f5aac7c026bef1c1f9222a6665630212810f49da702c322696a17dde5abde9301396625ea1e44707851e8d8b9d9607d39c87f914ca5f9bd00d0dc419ee0ba46b7c5abb1d83077a445e383b13d625a092e8aa3955d393e030ff45913be6887eb8c4fd0ed815da6a2159e77b7550f9a2b17d52169242b9797f2ae69a986d59323cee2228095ee378c54822e104fad7717cd43883a8d3e9f134b7edc26a27528d8ede873246439c2a93575280457fa453b164717d4c7239d18804768f566917eb14c0154ed020af5e5655d300ed24a07d28e18257f64caf7b0dac85b482be946e3c72341cc14fd5dc6dc63d736870d9fa1902d41a303621bc2afbd08956128846b74ceef88bc84ca45876021bc5464c10130175172b92f1b76231c7e9384ecbdf796524a99a4940178067706ef052f84734a930a02a54aac8a97346b523bc6ac88e00b3da1832753a8286285128e5a7812a507fcaf77fdd72a2b4883af094f428a3021e4c8891529280f5594546192668def18b3b2829522255861058512acb83bc6ac0459a314c687342b20f68810179008a11243971c70a02ca822a44a0a693255baa24a0969d6548162673bc6aa8081c90006fbd47c9f0f5310712b7c285364850f618658e1c312265841bd35311f8af0018b3d4283060d9aeac3931dbdec18eb010a7b53fee0afdf0206e6095dbb7ef3357b66cf7c0cdac824cbec48b738bd27625488d832a96801428a9831307440494d0e6960986249540aa63099c2c3cd5ff672e6b216b28c264d61614a0c4f984ad20ef353232ebe179f6085fcdd4b8504fbde7befbd374c4eed18a342444c6c8a9a5d778c4d39d3c3162aa11a080948f1918278f0883f3507b6fc191b9e3ef383a4d458124d2985c8b62cde98cc355f5913d9bfbc77fd6f643c1b82284f9b466162d30ce36b6b0b241baa94995282982a8068932955c829503bef189bc2d405e60218ec53e2fb923c1d794904894d29e26534344111030f452041840a3a486142ca982ccbb22c3b42068dcb9318285e808cc1b12ceb0163dcad10d3746982099a294680f09283941aa4243da5a4b02045862731af7701910394233151b44059628cbb90811d6e58220463b4a449a23844391325cd939818941df6b6630c8a92a83ddf5b2287531271b0f581fda15b1ff85b9bc3293ad3e73ffe53025130fb0ffbbe492e0212e88748b0ef5fa926c1ea381510ca295bbebf954edfea56042450eb03fb0e731667b29c5172d298dcf1c996f5e77fe0f347fd49e7dfaba7aedfcaa144615567ef896842f0f101fdfa1ff8d7cf513f761fb43ea83fecd7568efbd8470eac8d80ae8ede23bf95237acf1011100940b1d3d1b23a87fcb863886af7ef43020673b966f5907072ff4d15a5016402bac42f44c490d44cd99c4e22311e80c478388ab1200496d21bf6fc2895d43a9d06159071c2b48b622a28b2a7d725cf77d9cf58b2f6716b2fff6a3788caad7632329ad9b8f76547e3a5ae0606040cf6c5be6ffac4e933df6a8c2db6d8628b2db68faf0eb238f419f623c5d32768fec5f75a5b2ba5ee73d2d0bf3ec6189c3f3f7641f3dd9f26b1c548a5044a428248d2972200ec184b7292a4e463cedec7e37d3cde7cd52a46377fd9cb39a359966519959de92bb8e9cb5ed2d1a5d40b2c662fb8884887234e78c195353b3ce9b0a4490a9a40c9b22ccbaa0a2688819035406a302a13842a6932439324576c93169ac070a5e9f5aea42245b1a42027ccdb044d0a4b530c69e284d7a3264094b0d4044b90a5a658132e9bee186b9265c6909e90c844b1c5d9c4040d93225e30c617e32018e326449a185d6902778c2145417272c39473cbcff45b37b694d47bb0620506b3e25971b9aac400dd617126468f31c8165d95fb0b723a7ced9b776431c9da67cfe197f7cc2bef6f3cbb7b8ed3dc9e52b61c3009f2806dc901d86f60e8dadbf621cfdebee973f35bfe2df5db8df72b30fcbdfa18be026f3c1c9cf7e11b477b600346255c98f774cd17c6da4b2d63d4f763f896d9a83995c1165ddbbdf75e7c6374da5107ddc7dbbd110c3dd833ce38e38c334e8f05597b5a238740b7be3152a743b6e8f2a044fbf2f35690a1605ec54a553ab14939a73ba5b5cad82c27ff7632bc26396a8f498e96871cbfa6bac9f946b59ae1e9137aad3a628fe108db5d8b01ec75a595ee3ad145a5434e9f3acf7c3975a7765e4f070bc2235d2f07c7a92fba88df63d32842b4628cb10db1906f51dc123ac1a11e42af3d9be4d2d46174dad303ea9247848a50d29d34c04bcaf263b4b65a5bf1520b1564f9f3f5eea5204beaae3d2959be87030f1878698bae942a620ca305e813b4a1d4e66717124ddf9d6c80d2eb07c6ecd140b9552990c52473efdd077620076ee07687e5703909b2ba93bfd83122073ba20bf9fb05a3c5f4e15e7bef79793ee4306f0ecbb089350f57535665ef915dc6817277208b494ea538fff13caf878d83317db2c79fbd7f039cfc6b6cdf384ef3f0802ec1ec9257daf5c3d7377f6a784f658d20df67b5905937e4398f28f197457a58ad6a90c524d7d81139d8bebea794c30805c205a60ff7b5e61e42218fd7960f983e97d3616cea645c2d44a593e882c52487f2e8084b7944a57e0fa16af5f449327d421e47d3e7c8f4b15f5f22f100468c8a358fb884e9f6264facf5a3d235da28e7e1e0524e2929952da86e6da4d7d20be280936c3168a5b5520f76d494564a2b8c0a783bd4fa723dc9f2eb4b199366d693ec94d2fa6195533c25edf0c9f6f7624828b9b6bfd53a8840b43db0c19e40f62df8dee3453d22c89fcf7a92a3f77898b78b403fa4da031b6cf9f25da9464dd3344dd3341b58cbb0165f04a28d27e8f9acf3a9bbfff49f58bbd7da5a29759f130cebdfcfb2d7344a3f86f54520daf46b266f095ab00489223b8c4a4a39b0ecd9b49a825ee0e75fc9e90a4cb64fe4f07ffafbea893c3f7c49a7c09c80c19ab8f8de1b3bc2867d2f13348aef8816bc04382b9265d9921392d30a32cda986cca904d90985d41735dc97289c1d634700d9e1c3322856517841e30585a8cf29cbb22c6ba5f065872f5bf4172317991c2f2b25160ef8f1cd5167440a4610592d118513d3d6d931e60483ce0802ec70044892154071668a28464c15196a78e107234878d9a20bb667485d73c25e4a2e2c2e17e7c59ff883992247543186e98b1440f379e2cf43a5b042112d2aa0b0022029a5119bfb36411cfe6d0e06d19f5ce73f411d34bfe5da06d126da4e9f9b60cbc67ce9208ef95287410e06d19f74be5fb1ada4c8e17ff8c977c15e3e9eaf4c399ab3e3ace4054e5a9cb030b18ac229e654858925a0603028a8ef83828a1ea3cb21df8bdc227469d5629715d8f75f99122a37d898eeecfeb595f6149139bc4ac281749181095dc070e9a2e568c5a58b148cb10973c7581728be436c6df9ab2f4d514d25188131be26e01f36f6026435c4170d768c7589a14b0b3bccaf82fa62be5c7e8475c9b1857318df0f298db6be5c2991a38ceec447c4f7c19860b0e84d1a2fae2ea0b24a292b15a3fa210169be9c14a493c6a32d30d89659575ba6cf07dd10a246410498bab9f5b7f689f6563b08c8355b6aae5b2de5b9b7cb61f00336564b99c698bb460ef0fff51b20d836e80eb25f27579dd618d3fe7b9e4faa8eee4363f4193b9831fafc187dc613d4a744346dfabe554a3f8073f5a77abace3ace9734407c229713862d99a07698b7071e54415365872ff68cd13eb53671beb8a79ff7542a829ae1377210b53acfd72ae64f564f563cac7458e5b082b282b2c261b5e487f9e4878d02ab64b2602d0b638e1809f1039216274056695b2e4ef64a490ddbacf6e20cc759edc5378699489c66b5d7c6596d8d686452984ae38e5109cd8cab2a92cea774c627c232231363f45a6badb6d6ea313a95814a9f2bbcf2e81e698cee91f2b05959278dd1a37b5ce1e0eed5dd7d8554bd56a71edd635512a34b77269224897131b281d5142e2c7049e15a25f9d1295c5088712982c97fd7ab05be18df1e32de3136841a2a4358f179f9f5ae21a8d8e1c3e6144794c0575286b8b28760f2c2102fbcb042015d2979b121846c89ba012aae6ec8f23dc4f2099625a7b4566b2fa618fb941867d5da7b31ce2ec659a66d38d3b46de3b82e954a651bc7755d2aa5ea5229952a671b7a73e353dedc646ad03861590a0306cb524a95b38d0d963dff66e9c697ecf9389ec4a39ee7537a8e248acc0c23e774a7b466cee6e60607c7f36e381ccf5bad58ac9c8f7e9f4ff979dc8ac5cac9f93e9d9cefd3d1d9d969f1501e1e9f92c77576765a2d9e261e161a500d34f02935884c3b5c8bc7795838a88117d180737003324fff7dcac7e2d4f4643a9949468e641e9940d4a0710a0306cb929244e2541ac9229288f49f617408cd5774d221e774a7b462ccf3a0d6000080cb150001500108c0a71400b6b9c1c1f1bcd58a954373727cca1c0c009cf297d39dd25a2dadd6de8b71a6514df32935ede22cd3b48deb68d7f9945da76d1cd775a9549752a972b6b1b9c1a138383e250e4eb6b9b9c1c1f1bc158bb2583e258bb562e5e47c9f8ece4e8bb65a3e65abb5ad380759b09ccf419d8e86dc3c3b7467c7a7dcd9c9525f74313f9cf25f45c971be5c6677a8092c896d51024366e524c7d816a8d816262d59c0ac5490636c4b524c0b546ccb123236d860c36a8658961c5634c4b2dc90454996255968d8f5c8cdd404595c58c9902585adaf50c1b124794ffccf2f389aff7ad70bca7bfeb34c08a79d655996bd2fb6648524e71d6342601142e9d610449520a6ecf061f8668940d000e2de5b83ac9c92a848a894209604c1e4098780c6100410efa956050b0414104e94000918dc2b0c94042438ba9244092f5c693ae10517ae44b9b2835c89206b3bc6ae2ca17105c95d8de0f5aea5132cc9b0c387113152c5d50a6668fca0a62b52b42482bd62613ef17d93aaf07dee2b14be5591efb362081543f0187c31b6122688153045415629ac4eb0524496ec7d3c2b2094523c24caa65409cda63ac469aeaddec7e35909c28a103466e5062b33ec3007419ac6db73253e22187f9f8b7502a52e9775efe677ad2930c4a9d46b291dd29d7a9c5781e16f1c2ec5b22187af17f55f2d60f5a5fd0d48e74b7b1bd09b2fed33f8d185f62ab00335199ab62f73e5e64bc9ad64a9c34ce767f3b116b3ac026563736deebdf76d3430fcad69391f7e5be3d99af61eebb5f7a6cfeab5d5cedbd87c0cb701573b3a3a3a3a1ff8009005c6f9b2f915c862d2005049ea61fe937fe24feaf0b78f3a7c6557e94d6b9628f32a450ce9e63a90e2346c8554a052406e367b2ba15e4ecff461a15487de9e990ea5751a378d513e738be822c79aac018c730e13a15e4ecf04833a9891400165c4055fa08a9428628771028325db6887cd76d0df6194bdbc675217d5de8b870524cb8f30fc44bf023b1cf494a8919c52ce59ed04adc62e1793f7b96a583f564db3fce9da5107fd44a5f813c444554e2e3b58254869c482180c88c49c9001ab496605a151af18b1a6416cf29d78ba3bc69cf0b2e7734e2c394166cf5964db549352ccd5f9b2421e058c991d634d346d04ec186be2051b840bb81ccb60ed90e37c6d19fae3a74332fdaa310b879c43c7f4911dc83d778c350166d34f9a1ccb84ac7dc8ed1d1609323717307fdba4512aa55b1fccef5e02f3bb27da1ca881e1081b673f3a5d4ffa1097dca21641caf021c16deb7edb01e9eb80f43dd04196917dbf75c3ff3ecf5f192d0743ff1cfa31bac0efaee50ffd3327fb3e6d22c9e6de7fbb9ced64b4dec16fc3913df7ae43a28ec67dd66720eb6fc020ee6f3e839ef72bb0d5fab8756c1e83add6ef7cdcb1a3c13dcf73cfa35b2d3d8368afbe7563e76d7e27763982482022311e00e7b32cfb9dd57f600e1874f33163e990fb6c057ada0562efa97f0306656f9335104650aad335d3f8673743db4490e0f62e14b5b510b417b27b83daae377fcd3ffb58134bfb3efeeb17cfc0fafeec52d1457d0ace17bbd6bfb922e5778939edbbbbcbea306058779fb3fef40f6f217729bfb084b84b272fa644d1a8285a8646ed8a849289b48c3432326222890b7430da5269c775bf8e75cb067efa34282d2304557a8af1b3f771e07c0dcc14c4db67a07cbbbd06e6e7c0f99beabbedb78dea905a7087bfef70b7bfc3ddfe0ef72319187435f7fa99fd8cdab876b5ee6b462fd5eeab2868a3bb90ba535a6ba532fc116e2f3483ba27615730f4bdeda0a13462bb97db4bfff07ead1a6bae85e6764dbfdbea7ff79283c0b5adfbf2b7faf5774c1fab65adaa0fa591aaa361bfeaa0fadda73a1cdca66feb6f54a54349f3ec3a1aa1e43a1c1cd5a14aca904a7b73bb2fa595de6e7b22d200f56b47c33efecdc61ddbcb94ecacb49d0ea2bfbdbd5af512055d43a1fa9b0ea29994990ee5b4b1c9a76fbbaf5fbf769ac5992ce45b6e5f3f7be2c0e83df58336ad3ded70705bdaec774c1fa38dadb5ba6624c86c6edbf78a640927506a369416a824504f7bdb5cd474450ef247a51a9e0b05508e7e074e07b3d7c01a35780dac2f77de82f341f80d588438ccaec16f1b77efbd60906ae3389e9757c5d132b283ce55be71aadf42588fb5d65a9d54a7fa3ee4f122e4f1e2d341f7556f3fa22112fc2999aafda99a9c49cdeca0693f2767ee9ca83d250b9bf6ecfa5127fe8c503f1c70569d13f27811f27891f3f543a159674493e323f80f7ee1bc715927f55196719eeffbfa1304caf3bf010bddd23950ee6fdfbe25233ba05176871bfcfc9046edaa83e4e778e5d13a3aa55b2acde43c55ebbc06e0175dd84f7534fc8354a9efdc5a6c7fb32cb495cfa35b5ac7e5a73ebb3f6ba57d89a3e64c4ac663bcfc4732711fe6e01a38bf4d0cff9149de435fa5439c94b399fc4786f11efa4caee9cd8738ccde87dfcfeac3677df882b90eabe6f16283acd7eabd0f4df41e7c7508db12fb8736202d8371cedf575d873c5e481527bfbe5f390295f7fbfe5faf11704eced5da69191e2f36f7218f175bf59ad0dcdc87748736835f7421b90f52713f82ffe848167a32c8e3c5be2f5a4676c0d13251b48c3480d57402a94429d73f7c69becf8a504a19ce7cdf1918ccfdccc72b5c6024892533208281704192159a2b9e9a36dd31964412f95287922651b45bd02b7bfe7b479f969e947684514a3fc60ae40e081f5fb0d6b0d66cf1468d136d29a5acaa6cbb1b730604ba1b16d0e00ea23febc4e193049b7c273bc6ce1ced173bc66260b47de41c636caa9899a82d34b78fbb4568516badb6d65a6badf5a66cad4db62e1721d1fa5a8973d925d086ff82dc7ce1cf39ca5bbe5f8454ed87588baeeaca39410e3f9e77bd2cf52c9fb0cd901bb7eebd17b39ec8b017303ca037efb055f5b7b95d84e43407869cbda834a16c3617214dff22a4f843fedb6e90a839521a63d49e8b90aa1ef240df54009843439656bc83280d10fef62accec183b43a4003bc6aa589a2de6cb9f35831cbe5e2d601fdf4aad84c6ce2cd9158cb1334ee6d4619b21b7ccf16e33e48ed9bf0849fe9007425ae5ee86cf5a6b9010f1bdd7cc399243bc7110ab8979647ff325a59cae654ad4669898d162e6893ad9e274313cd06b2bf539cd149911e7ec7d3c2d885171851921741e31c5e0c4ce62200391212aa8204505a61b7808c31443d6f294b56c0b8409270471d2449813c6a0e0062e45a8a0324411154ca8a8e1fbf27d302718ac09066bfa3e56d30cf2d46790164c61668a2147102142418a2a94666892822e2ad02d54b460440b62524421c50c64c822c55394145aa4208325cb8d129b22710426040cf605f17db1588c75250a48142eb096581881a989a72a98a89451d21265c4aac2ba32801d63514ea2987c56be0ff6030ca60483297d9f126c0a0c46250a2b4a1156024919a8288a5c9afd8fed07928e4dc73b84a423dbb6f9dbe3681da9773d243ff5d977cf224db6397bcf7dfa58fb6f93f52bd6733f84a4c3fbf94348ad08484a5f3e8ed691f3ae87fc73748ed54b3d045b3d4baff4500cad87a61e7aefb9efe9fb38f51db86d7a08090747ebd03e755fdbf4500fefb93f3fcbf4d4431288369a2ff5d010920ef9530f011942d291bdd44320643fd4bd0a963f02dd7c04ba361f81640402d2c00874030e21e9d8de460f49a0edb9cfe08fecf1abc01f483a322d9178cf7dfc3f2250c7220da7372d9390ecfb2caec8fac71092042210d63fea47a05026edfb19188162501c6d9d1d635024cdd47f20812a905422612392f4e2c0ea818cd198242c1fc824614961f530a6688c0c31e00c110366873bc6c43ce11d63629a6262ccd013b63837fa3ee2cb2a750836b41c9b7e08ef4392507dd8098966d8f4a5129bea185db80cafac224f346df9f1a9035ad07710876ef9d3185fd15b98726ed95e9ba57edddd350e2be599af39e9a44edf411f0c883c3edd65ac26a0fe298cb9fb99cdb2ec661acf177e7b310679b8f06f9b04af94944a1f0cb8af5d189c06992ea8a56ad9eeb05ec835fc07e39cbfefb11c1d914ba68fdc1ec0542304f768fa4c22ac1c72fc501e4d9ce7744d9f0ce47e8b1d966098b7fcf6ed9e5e99b7cf787cfbcacb738bc0a1ec7db782313c03abb5b682747e943678be24b7428e2e554a5d675dfb0707df2de78cfa9e4fe59a6c6ad87cbdaeb49b460eeaa696523c9f87f3e60f8f377d78e6cbad4441e4206ecab3fd43a0fe39ecb1b399b93de79641b96d5460ca661b0786dcb674dbde47dcb4375f5986f1b46004a38ba6e65d618bfe03042884451caa48dfff93564616921cc2b00b69a129f102ec8734c4d66e5672c0b583e44f1732cb088b868c67a5b4fab36ce0a1f9ed0c98a27a084dbc244fda23852cf70d89e876105bd09b3d84e64f9e727eac2539fc670a33637435a49452c2d8f463a0907bd03fa24f8d44171cc5a90ff10e954ac78ef9ca315f527e1fd3c7346b609cefebf0f582ddf9d3feec600021b90d0963631a581ad9f35948aca21c02dde1e7d269d47c39cf95d153df7c4d18dff765423cb1b4ebab3cc87d3e88fe7d1bd7856cc07cc9387d62e4407291832a5949b20bc67cbdf0a082fe5ce44004ff8b31e843aec1a0a67d96dd17b23b0b41c39fdd8f9d03ae0e6b572386ec6644e7a28b17d14598da52868de8427e2542d57159b66defe1485d0bd53ddf070326514ace2b5415df9c7959e420b3cf812cce64ee33954a0b398dd4fb487d74219f033d2559a3bbba9d1df51f0ab4a1c09a216329ebae0f5e30831c80edaa8360b26953d94881d9f3586ffa6023dbbf75237bfffc18ffe67d8c2e7070c030fbec6fc2ecf1134eb6bff744925d39dcc9b09f81dd7bdce397a1f7f3e97b87c3dfd3990e53dcec64bcc4f918336bd94f656ff3f96fc010ff7c1bb075a37efefa59b7ecb76ea45efbd46baf653f5ff5415c9bc0a8742d3845a974886800000000008315000020100a8703e270482898c6ca683e14000c788a3c82549809439120c7501404310cc420080311400c20c618c39c72c878009e3a49d06b239f4e6fc96794c4007ede770ffc09b1fcaadb95003a04b996ae8d0baf0977c373246d66ac1161ec605bc92043f7d8a4035843593d1aa5860ca9588e6beaefda424f6f9b554961eac8568a0b46adc95e8999120512214d29c8b1aac2f8309859aa3a49863cf3b1ce3f6358dbb7d4f40fc95c9cab2779e30eafaaa72c6c4782e48b9be2f833e3ac433339182465060eb76accf559521ed0d0b0226c46eb9bca082550985091107008fad6f59b027e52c1646786578beb5a2e97eb0e08fee0c24640195be0a26b2b898d4a396952d72571825e2d818bba389ec1bc3dfb6a1b0bc7d7c6019cf4486af3a10bfae6537c0f0853db4955f7b8efb6d80bbc79c5052f98a2969faf74c9a8b7a0ab83b773d8388c8014a87effc74a6c4ebda745dd59e635f045ce9a89f4c8a79a2cb43e0b3c74957bf9d39581b1ee12a15d81113e299ab0e905b5a0f994e82b359fedee9680b7f2d9426b7b78852656dcf74c9666b539e3742e564db2433602bb7ea33c60f036a8e23c442665922247eaa738711599a85a2839de3f42dce24b12b8c8c233a7cdf23b273a7227f664ac0d5ade691b789dc989212728d3ad1ea250e450b90f20086aad042cb3599e90e24d95a465ade152b632247139de59ccb8511a875b27b4bb66a314bb4ffbe7b21e4a3947b5a358b7abd78338bfadadf890366abd1b36b2abc7384b0b4bf606195eb949645c9c937fedf650ce1c7ea4eb6dcb3636001c0aca08c1200812cb2f3efaa2282b436e48c30af1b1df1b1d86a59cb18454e29dc0a4602b9b20f6508dca4f02a077f6f7eac732d06a4fac8d97654f2e0bd63eb7bd96d68f30c6142f093c54fec4305ae8470593bf4812142cfeda5ed362c53ab9cbffd0a1fe46fa6039dd805c96233a012b3a606fb9498384b10ccb4d46ccedc28e70f33c185aa7295905047328d50f08965be34b4e911c99f2fea067817ac89352ad1ec55a4a56a90fec443ad19215bc8c83810931b8d82c64dc599bb68e8e952a0ad4631b4e554bded344e9ac82ce677a9945ae28e09a30fe9a7178404112632e6a05ed5f7ff96c25ca8a373745a5b41bd402138d2288e108c014df897c325b664c9d37ac67d6590865f431774242bf91bdfe89afda21a9c2e0b5b1ca27601e0eecc5e594e6a6b236cec0c61a4c1b196f7c2f2f2ab3b948a87382dd6b2f45a10236777cd4ed93d572b1b85fe9a11db6a7d3850c5983065a6a6691cbeb3c76ec37ca9614101026ebfe7434b4ac730264ebb0665191a7b003cc0717fd9a0edf607ffb75a4e81c4be5065dbfdd18475b4fb407508d4bfded94cd11bee42e86d6cbcfd9d4438acea487213526c877d6650ee0525060523cca66236bae5cb3cb618e585ce7985e6cee6ef4381088c90d1be4e8302ec90a688a3bd417f9f26b0e1f74a94752d8e2eb1c5d744186d65007081b2239c4e1244b21d013c35072969058735232b442184bb8b1d0d1117b5976c29b5b5da8d7b35574fc181d6522762c40e2cf14807dad980e5e2419845fbc22b0be2bb5e59b45742f9f1dc36dab6bfd3096a04be62ca14b7619cab65e2dbb1efa6935d333099de01f1164654cbfac39aa1c80cbcc54831df49d3e3f3360f5615c829ec4514297ec6e886dc58d762274f3a63a11c78d34c0e8593f894f509a4c86af02ed161083c4655ef64eb31ae50325d6f4d3b03ea529f4666480d97c3c588b29053184fa9da9c779892f3720971415307b9e1cfbe4f39e5695c4f0a020d4791e1fd30c3cd2ae075151c5a561649fa2d8143315fee20d256be9908c280feb60b764a1c32a7dcc6dab9c129bd1d98fade83a5c363fcd413be3a605082fac8d618afa0dd3619c983cb57d8f4c48882f12ac4c900aaae11ec72afcf48922ac759983881f176ee38f5363b560cbcedec7a38d4646d4087b215f3e85d988dc7fb859187d19c6bc501b0a887c153da50a89dd6ce0f61804a1a5e35cd2cc845ed68b8f238b198610954c60f618edac8587e57e3dc4108c8f92b1bca59a6884d21e5a658ea887e94f576100da9d70121fa5ce7d5236d590d42be5bdf7121b423d5ddfa63f3b42610fdd15bc77ee53b78fc8ecdf7f34dd45d907e210f439162543b19cec88d00562290174558d166d1ab5240d229e0226e38770e68b38742579947e7542b64e1cc836fecabf2b943f584b4e61d6c4213aa40ad5679b54ebf406a921aab35db28b332d9f2a23d4bfcec65e3dbbbb76a506d3a9996e86674cff1a13beff720f054260f34dc476d93ee8319f69c863c24431ac8b6852b7d806574a6992fcb8280df933bb14ca9b0a8e883b124391ed3444d3a9b548f274c807d141503a907340a43d1ce0c0510341e1188879d4f2f224ec3b22a49a893e5e4b59853baa85e361cfd4545a53b3b5c4445aabdc31a7837580298e98e6e434b811f33fa68aaa76c2523d42374af45dcafbcaa65c9608c744206fa8c6d46c025d0013e5232db209b3e00a0ec0ef7ca71380673010ef2fd8877a4f0bf4cce566338b107f45218a74ff281b14a135351697a08d1a72ce98a49db45f5820f4905f2b4755f916a03e446ce6094d4ab029bc03e39965f5ed3ae24164a252609f56c820971ca464928e297d1fcf1b7e11336657d652693b2844930277a759cf54bce1dd17ba2c0f181463294f8c86ee3d79a25569e736d6c57db1cb58ff2a3f060a56252de31f5e188f0a1caf05d9945d085d9151a730e745a2c7b6ca7af4e9310091c49e062b999cc9b01e41a8eb4a90ef324a8aba37a90993a4b8cae5d4b4d832a17e7ed540bddd6f91d9878fbdb169a48b29b55769bf45d4263e72bcdf88dae08069d478eaa2b1fe0906b42385d81d84e983bd28681532645639acd4a046408dc77701b4621f313bd0b47c52217155fa3893b0109a96cd2c5c26e58ced380ebdd98284d1edc6ec49a397b66616a142913440c7f1ec38d1384128e3776b317692386f5b60be00caa95f14356c383f51d207f19856288e8c1e93cd727cd5e8b3d6f000231723107257168fd15a7fe591706d728049b1d18b8f90969a6a51cb6230c15501a822f0e02f5e2ea481cbb96af30a8ef34905cee87bd5fa4f595986ce0e339716408576e1d5ca05ec7f845a8aebe9b24b5177c6b208c663adad9ea96f122c902833496505b1ea15185fdb4d4d7616c541b5248d27e7c23d61e194476dd8c087dfa7c017b8605d0d33c9a14aeb2201709c24d13db449d41bb9f6bd002b407fe39158e3877f413538bd4d8d712a3df1e06e13865d18a0a6e08ee22201c8f46b22a549e1a07522125352e003573658e93d7aa90e7f2af9668e9378ac8c050f8489beb744efa75698e0802009f30173e102a3a4bcb29aefb2c9521229e89d1549c4d3949202b4f9446edf125d82800329408548d1fc2e60da39be98e48cc1046875476c2940b3f82ea5b8bb70d14e5b9b232a0bdebf4a7545ab5579bb00f9fd8e6ba9724747950fe7a330edddccebedd1a06ca51ee039cc0633d68b9e6ac028155be29e1a86c5f6accd2c095413ba36e23a98dc415199e23fa4057e1c180a848c5d7b6a1b8918808337f725723802a0a30873e6cd103214310ccd228ed7ab9f788a36d5b1c89de2c55153e9fd9891408700a3024e41d4432e1472867f881ed98f7cdc0f7d5068c65e51a5506fb0278fa57a9b2a09b1ec3f8512aad6a5aff93444deca039a67c46a40eff7d2ce1c3ef4ce080a12752355c37c9a71b792184cc584235fab2504ab9f4081c046656f3b03fc17c4fc8a22f2ac30e0b142a6aa00b4c3d6879cf185dcfb1d7395bc23fa6848e78e67d1fcb427492a38ab4828c9db329def85dbf98f60c13bda7cbf8233aec078945a8cba49013e96790f8c7010bbea3e42c59ea58ca7c7db9ba49da488bcb08df31dc7773b4aacde56297a82dca57cd26588b6a4cf542c3e005a2560717a8f07e078c44d6a16a4c1334e04dddd9cfbf0e3c3ec64924c03f12db8b7890d48d99b2e3a6f7b3a92214c0dbbcc1e9e1eb13bc6e966fe57cc28b20205973b0e365a31a9dc0c3281984f4701dbfbb4e401279e26b0f0c30391776e07a482861ec3c52f5005f58c27153585fb8460831203afb76812fc88d7d2e25660839e80e7fa26ce0f89db362c8c03da6d054914053519c4c15bb56503221c647936a5179743e1300e08405292f7bfa901776f32b9263c0c5e68e6ae6f2f49a5e6e20add4dfa1ca0c0bb4be4a6023d134420f341a1c98d166e3ba63e60ad7d7268f6d5814180154f4c8114f4a091ea7bd94ec7e86bc503fc41d7fbf474906b13935d897d7137d7700ebf7d509802258adba6f9186bb0309e3fd6480e57cf09087d41eff6822359f4fe1f6ff95c40703fd153e3596f89a591fa9ba07d3a9373f2d3497eab65ddc6b7a68473978d34b4ce234b6f3cb724bd87e42406a4c0dbe52af90bde4cd93aa10bad2d8f4c4556714594bb167058aa73d0d33c85d4a262471899b102d0c03ffb3087eeecbf180c0d3e2e92ac60cd841157cec0a170e850753dd24f70210c5fc21cd8394480d777206617e9b465422861f24cb6d104f69c310c824dcaf9eb659c24ad0940a021e5adc73008230eee4f4cbd604915f7d5da2110e0eb5a00cbf02466406022c2574d3dee0be3cb58c545dbc899138f6445139b463320692a483c5f360ae7acdd7b8c8d57f924dee442c67ea7739318cdbaf7c101f3cfa8cab89917aac6e0cd29771d0b773fd9935cf91fcaf5dc47d7ca90d93ba8a4fe23a3d13f3e7793070ea1072d97462e093d1b37550b15806fe41a4052169c7b0e447e928e72a9af63a05aa3511f71a8a132f18968a189b3427dbcb509eb34777d6cee9b5c43baeae89379ee85f1a470363e613666c427974b9fa5a2aeadf286c998d7ce2b25c3608e86a07c426e0d309423dadeda397cc0d2213d3d07ea638edb75f17a10234852db46dcbf200442b6627a67819fe61f614c19071dc7efb0cc3b2bd7f87544655c8762831f8a29208a45b22eb3abe440e54572d48a23f5786d9d0e9f779d404428992bb9438f1ee14985eaf20c1458ebdd9f9074d08c960a0012f2143925c7a3e6ee9b016f606806cdaa66c25fea44146fce439ce174e52a7d10906795f7cddca5ded10ceb78fd2c0fce16a94f089aa81b0ebe31a48f718e5eee96013262d132d73646ba57064ecb93e8c07aab53a831a578a982dce273391f48f55ab6c0cde71366eb7aaadc0c34b54bd9e1d46234a766c130161b0e7d2cfe411976177a58d552c58a3a66b5a57f0a285540b156a9d44141fb4931b9ff333a4445c5a4083730b902b6d0bd35f76935a03d0a3d4ef6e58ad58089ce8ec1f7847b9628ea5f51abe816895782741b3d41bc2b3d44aa31bc4340736c61a776cd6a063d15b28326f43d6232a12b580df8cfe7f9c4eec0beda98a1872df102fac440057f12d9643c556620bec80274ffced8193648aa5b051f15b67e20621a0f8b32387e1e03b48b83e4a8de77feb410f4d02de5adad155b8077516c614c2079bb7aa730d58ecf3fd9eb2cb952d14cd9bf0b7e97b034c07108e0f6004cf093a27ad64a0586657c64578732ebd896cb530665740daba5281542b66794f000c593546b89f0409b46d5d4d4be4f1f7cdeafdd6145c19c6afe6aaf286a62e47ba019ea3f840673e85c824ae12b69ce1a38b58f1c77843769a4078dcacb7ddcf5c1ca9bab2e893bd4330afa4ce4b2e966b61056ea3278c9de879dc2c3b1ce9c57b9aa57149dc9220d8ad14ddfe81285f9b6ffa9550147bcd7a2d79680e9ff24cbce045e28cfd65ff34fcc7946ac517a243af5142accd4cae01e735abe13deea7c001b96e2a6c57089abaa93a3b671e9a9253c88eac49236aa2e097c5effac0f92b1ff484e82b3ea08ad47292e8efb71d80bbdc98a235cc847ae4d2f6eb52582978dcba61d8333bcbe9fbb576aa00e7c1405159119f1c0af8134a18d8ba80309e63dda8c0fe05d4ea8bcbc19f034a027d7f663dc3422a7973edbc341de4e40d6d812fed46a9022c663fc10cb2275b45f8da4af80b08163c4c72dde40f9d3e89032f1823b97a5b975da9065e0dac265ca8be6d6a990ac47de172e61f529c9a330e24c4d461d8155032fb8389f370fd0cd018cd864c1aed51355f2f777a0367041c7c6ee223f3d9c8a266040c612b37f388139a8752da2084ab1d5cd78ef60f1aece08e894b55e70f411300f86829363060754fc09ee3a39102b879d668aac64e19f9984f6de80883e6cfe8dba28e56605e2378c0ea689c9ad5b1fc1fdf782da0f54233771c2b43425d7416d9578f704045aa6bd7a07c6b6b9b2b2d87ee056788b0ecb43be8afca4569383c2e269f2b6fbbeb21661457264bebecd44ba6fc8f52d8757e43663108429c1639e58a3d8b9ea0fe10e481b1d77d0fb27756cdd104cd2b96c31467be106e5b371a031395f94991e7b360c76a01710e1157f49ded9216b23d003fffb76b87d31e45e753eb6a69656995957f6876abb37032f2d9e4449e2d575e1515aa7bd1ed5164330a411445035f83b43c53149ba2ad61edee20064b7cd208ce5ae0e874e23fc405dd03041b5b7bd86db449fa159f1c21b4afc538a77db44543c27f4b6ffd82c751972664312f7729f8ffe058e03ee4f5b729f8366e13d52a31c7a328d4ef086e60f6cd01c3d420b22d9cbd63e9c0d224827779628825f66451e58db502e611edeb249f2eedbfb3bf232f82596c2b0d66461e5c2cb320f8e3bd6215a33962e8a82bae605284a565528af80b0825781bfa5837076092104425b8f6c22d3929f844285df30b1262eff116ecc7d31a0b18d5c62bd7dc138b5462fed37025e14a8c5cd52f6c77d5c0577053a291070dd604f25316048410df82c74b79aaddaafe539b1201c8216bed90e31f24e851df926df50ca37004c94515c26c7175146a1c8d52a2a2582918f75723ddf27c61dccf6d63c50eb52badd92707d719c8d575bb6ca19db761f2f874d573147eac19ee263b2baaa214b54855a3342ee3c4f040deaba1eff87b248223bfa1b390d534d233f1bfe2cea30bfbee52c6633d4a23b996b1d9da3a440f55876d4d7bfa43d54a0f2450b95004055405e5133eab9a1db3311061fecfe2dbf9d91c4b4e694c08661c91611f156a7a360f3817f6f15a58798d1ab10de163cbb22a5fd9ecbd741248ecf9a37fd7c1516738ffa48e05eb42cb7f08e5757bd005954f431f1bebf49c2425b16142805bc31a6e5c3647c18b38942d7320d30d59ddf9d1ad149b3a7aa9fd14d3d69e1189ce1f03bdf091b62fb9dc9733adafe7bcbd68931d222a213c34bc031ff1d47fcc65b98c7ac72e9c806bbfc921068003b71d71b2086b121ceb5ae40af754885ad5b89ed28170c66746276a00114f31b98b4b08cd1e1210860698629511e3a2543ef3886ed118ee2cce0e9299b545c3f0e2b121420e4fec777d19654fd912a825d199764442d9693445428941e313452c9ad99f0532cec05e45b2d42ae0439ba0c386be20e7b6b6d7e641ecdc1e03594353eee90f57a5ac246fddd45eb55dda63ef112d23a4b9f4eae580078710aba23f607cfab2e1ca64581b507c9c20c80488f14b003ea5b64fbf9af249d7fa43047f6ff127d1b64c15ba20ac42480d016bd32507ae731f895506970a40b3990e8a0fc8bde0ced26725d31972d9817c759068fbad8a5545a9c43f09b4330a8462889d164a10c3eb8ceb36b34147bdfb5708939dc7a65ce969993b96ff25ace26f345f0130ec5012dc5cc2d03b07ac7a8168752f4f05c384d5c29548c521b8d5ef8cc78ef4c8090e86e28bd7ee74417aaa14891f1309b4eb2370d00814a784b452ea2763dc380063662ba282b13ee89bcce724bbccb5b8abbdf65e066ec1de33acfe84e366f81dac6aff808360c81b847a2772d5b5ae13b1937ace60b5f4385ec84b09f839472e6f946596dbde1b08fef3aa44195695db3be31bc72442d22506f3273ad9dcca1d65d9360310781f08e7ed604c6905e38c41d30ceba634383752f7d91086a7aad3d07375be0f3aacb52deec21dec0f2c7d855d9d59620e2d37106bbd7487a742aa1d23cd851751933e80de3af8300a83074a13d1444312f8036d9f2e4256b6579bebba7672d0de46849bded2f48170c77b530312324b0249d2854ccb7df5e1ed697eb8fab4102090bf48b103dce625149bcc154849f751e82d03209c7188c306c7f4328ea51729cb558d1200599b5690079b6d5c8b6bfb69c9e009b1f16d41a8078dc1df14c8f20068fa246f75a7ae2304ace0d447121b83197e328831b953cd39f9344aaa8c50ffc806c70aefdc0c19d385bf78c0d29a9c87a94b3233bc6882249f81275f426e268ddc045a0f4a9ec206b61b6ded41b68ce8eecee4a903ab51d4cc7dfab9e87d5659b3b3d010034124ae467a363a371a43f7762733ea6082401149d6b68ecf5bed99c6e952716e6a6cffdbf7a3ccd53949410662549f0cbd5d89cdcf71534e7afbf6acdbb403c921c35f052e99cac04abf12767f02cc44dde369677fd1ba8ba95d719ab3d2afe300cb884a2f4eb9d5f835e072da4e9269419e03faf2d397e07bd8ed5dc1dfef70e2d7c10deab30114fc13b2c57e2394760edbaed8976e887fac0723054f1a3b7ba29b10eb61588a3cbf2aaefb3363f617b40ee0443b21c4ba5825749c78dab0209ab12f5df184df5ed6f8fc788816079394a55269a19457ac99f86bb8da5d2766b1fca1aee6ddc2b9decb59961e4a0f9925b9f6839fb67bba687128e4a1da3783649e6443bfde3f7d6173f32cabe3d2e335f6cb1ab970eb37b9a27ac7499ae5809aa5340a63aef294da64886b484811c351f5a099e63af2e5112523ef24fc0c3058d2cefae1dc53ee9edf0156d282a58ce7026c0d108c93d1bd2a801b1336e828d5c644054addab07eef509a662dae4c891328f17fc7faed91869aaa6280eeb16a4558bd6d7b85267c23f5f1cb1e14a34beb98dff0a3aa9642e978864808af94a645df95da37de95dab2ff279c3b313074531010907e2c0ed30da51fdb7b6e97c532179d5855c7a16bab1718bb4c09dfadabb30f4e62b949971ba86629f69d1fb9ebc601299698de33fe1b9b32ba3a3657f9a9338d58fe8c6cea67a8c4f3bec7320d306fb5fd022e895cdde67bace28e631416f0e198671d91ef782ff012efc9adf3998ffd554940003bcaebc92da7e6640f0e316a0617dd5a7868821eeff5af720c4012e686818cedd6bed7f23b735c80c4599e42ac419c832490bf1f60f12726f4b5fc626e0debd9d438a9e53a61e129b836b9b542e88138225277a692221ab4eb10d1e4e249b70e3a62691e64614e00a8aa7328c28f022954ca2bab62670ec45a563e6203f24ad0ba1cce71d8ae81d225b2019dc7c5cabfd94ba7bc2751b5b9d5a0b6705ece4c118ed26c9cb5385c8ad5f82b74de51e35cf9aae607ea47853f209352742c8a4656a5af0eb7fb81b088fbfe36e4ca2335c5e3248e23c6aedc34a683079288b3842550c611a0e526da7a050d1a4fd9fff28259b0f12aa1bec6895bc82009d36908aa3002b0a22dee98d66a2a003a8de487612a41d5ab31283d558835e29d8dee91de408c00419317939aea041bdcf06c1a8de43cead5ad0107d382fecfc4ea5ba8466bd2bd2a9b9912efbe9a202b7a8009340a5cadb59b09d1fc0109bb47d760d3393d962187f55ddc25aba1be53aa56fc1b08725ec9e83c156bfc0a1fdbc40d4a653b6f07621d74537c1ee8a6d6426f0c7f8e0f351bed1a67da1b9130d07ac0ff297a7ac2ad3fd3ab22695f75c26ded60a06ede5f09f44da195ebaed6d4ae5f614330703ac5ccfc9e140276cc84c62e9682ac5bb82e8658c180e37929c882e46c4186b4be19792a7bf0860e5e90b5614fc15eaa85c4d8b4ddcc394104627bd7dd5d5b53c3ba9cb9ef8853f47d2a055711d5f5c49668d95516310008b5c4f1f36e4541e87b3a2b9de45b70b4e6a5202e5af4f14a6519fc5ccd1e77652467b362f3938c37df243383cdbf92c3b1b2691e56d93b69be814e859a7dccfb6c3233a8f646e47d3d2a033b64f7f9dc427e43bd5f3b90b4ded87216fe2ff05ebe28c613836cdf30b71274e015b32ae0407ef1327c12586a0b24e4b961eb3c09cd7a364e999815f49d8870f21dbe35312b5df88046528cf6c8ebf4e5a86ee6ca3cbd762b16de2897362e1520016549755c8f4ed35a5b0fe9a5924e99a089a8ac7ae897f0aa438076e0503aa0cbd2cfc064ffbf741d3ad674464eff019e7424e229ab25083fc826b83ad606cd5a65471b7acebcda11032fbda7bea4b81e05b649983fe2030202fc94537cae88be4a6006b8fea2ba96152b2fc048c83ec8ccdbd546aa71a65847e8020621737de63a1616e35cbeb78ea1081ad632c2aadad5262edaf1fc8afeb28a02efe4e8ccc4e2b32caa57a54cded2b99cf48d14efc53d896fe665c79232f92034735bcd09828538efa9f40d8f5e0238c1b5c6c2bcc485f816cacb387a1c18f538c299ea9bc5feffcff3057098c067d6b7cc522208a35d92997a40a9b658e19fa775b90f9b7bb02d05276c185eb20b99833ac0f06855e39e7f6cb9e3bf9d689ac92fb1da4ed527c82e343aebc5493b70ccb0e2d0fa268267646bb22dff0eaaec208bed6606ae2d5a5aacc523d9d15361f3b321c30a93aa7586e549e84a5b62add0dba0dbfec5c48ea8c522ff3871759e6fc7e38e0c2a3d68efbae4f6b78414925f294a3eca1b270ee7888f9c503925718ff15501066d5cf596b90fea0f79627c22c43f211e1a1c83ef5e25a4fe096df4f3174ecc300af0466d4ca75848bb9b309d61310a38701f55d47154c6bf0318ab1f12a2d0f6917e7cbe80a0e60880fafbdcbeaf2a4d2c68ee63c43415304e925a87b48d0257b6eacac3688e6316545dedc7fc04d538ab3a99af405b75fc00dd71a6d21e58a15cb8fd7217362ffc44b9c7b86d2702d8175241f48e7b9e015767ea60e54b193575620d347dbd4fccd995bc36d9002d84c656a48eab359cb09295b3676f2da9b45aab9346af02ec4e2454dd060d850a8799fbdd9fc45df8110b6090d41332a3eb472332336c14257237150633338348ad092ce4bfdef00ce468f0f0891fb5fbfb6d727ea4583e148a79d20e772be98436a7f591eaffdbd293a3616c84ba323f8efc94fffc423c8c194c029e2a9bb6a86a07994f4f2514834fc09ec7932150a8bab55e55f3f78dbe88f40cc2453c97b63b6382ab2a959729815b3008d15d6d31d84af7dba237c0b44689bf62cb66e92aedd882da966a94e9dadd8a4ee699cdabea32bb16b3941085aa1cd77608ad4a244320af799509ae97435d021dfa1c027ca9f6374028951cd54ebf730f67608bbc3ee8a9b03d59121107e0510dd633b88654a1ecba6286b8e11cf6181aba45a3c196d99809b9a2e1668ca2ed0382b4812b5e3d7d2cd4fa890a3c725db5f90d36ab91e6d60df7d033cb344ccb8f06c33ad8adc5c94a67dca7553a569a55086a376e0398482aefc17eb4320caa90263b694efa0380a558155c8ad78468e384e5ba1cbd4010b61a335ca7b3b0eed8358ec2d5f7b96af7f401f3279eab9861ab938b56abe302f44592c19540b80532c0dc0284e151e5208b525c01b55a71e2a9417ea23d6edb8d358c70050e8223a87729d8ee6a05644212f854c9e2570506cb29405975d026af131cda706ec3bc2fad9bd34f8eefeaea63e6444abfff5d5ca587635ba708df63ac989a596767262573a45cbf51cd1e7ab4996b8586019ce9015153daf65b281679aa2c1ee1af6df90a4bba060fb33eea1999bfb584fcc1caeeec362c91907bd50ef361f7a2b75bd95e23f0a4da1509d8eda3bdb9f6ea64cb95ce3e08607ce7602dd0b5900f7d93fb984fad9e481ad46dbc83d284dc12d70ff9b693bbbb6dab1839fa7f7ce025584cde5349e2b3d3476812e6a2031c83de8e3bfe881b821825c59b03cab6ab752f06a9a30a7b65de4ab21336e42582e486c8d48c2da06f1a28ad314d4b177cbf51856e91580e8f4212f8d6d1334d709fde222f8181404b553be5a2660601c71a031bb6151b5e03d44ffe32937e9b8446826c5da200bf76d4b97e657ec5ae824e240532fd6dc723d3ffe25ed82447275cee2b16490ae89fb63e225d1794a77615d0ff743003c1254540de8c828e219ef227a7d556b51f9f3fba54bbf4d0081dac5f9369e940b9f31b2f4866580a50dd5ab9247ec4189ae0e401d85516a2534e002082702aae996527744b7db7a13e67d5d639e0c0d084aa323ec8331c75220fe16205411482da3d1e019827ce8fa109158198857ca736122193e8be6e608869dc76a25efd2715a31eba1c9118bf84d61f06f23ac6971d4e809c713ae185f6c4c3d80907e17098b739e615f0c8dceaffe8d346ec9348280cbfaec969d577aec1845980a3801a01b30032b52888d91a89c803f3d0fdaddcce2508e0452d80a71d28793d856d5d68e192b650a4f7a8006774739d203be4d08401843c0e8d974e6122b9ddf380ebf0c6f8d88d74619053a3a61deb9b9e14b170a88fd0080668e0f4518dd19a45671bfd6ba5bebe79bc486296723110693d09a35b3987c2c24a3c811e48327c1d68b7817dc4fdb9bbbeb1b3761262039a8dce37b52aad64b281dd2a016d6f60fb061173698dfd8d141859a3d896b9bf3736334600f23476c5098feb64513a539e5c3b37d1c7a739a827118b2dc9c3e0784a9a8ebbd4d33542cff285eebb95997db777e237138aebc7ac1cb6c5328101fb96681d2a2210ef63190223d909e2b1bcac4790ef748d5acecde4e0f7cbf243c3772a37b48c64ba6d435a47ebfe4fb9cad537fe49d4ba07b24e51fa1b0f1fa15d304773c41b422a893346246de80ca71bf3e91b5f968f6c9951419ec1849c92a86bf9fa69383019a11dc9e7e5a240d66efb76c31decfbeda93345b0dd395069d54d50a0a24ae401bf5132d85f252b358219613d4cacf7ae0227ec9aa5c32c8f304d8bc38124dae220e6ac7cdc14b17b44b1f1df61526638a1cb9a289a3578cefa650173c594f8eefa99d20f9447748389574108718098969bc2f03fbb94e3ae0ff6e26ad6a774b2e606f16f0f5eaf6235bf1adeab6a898100f1ef08639e018353d015bf9430f222bebf6bdea7625d180fdbc6c159ec2e99ce2b607d827dab9aca8d82d6db302cdd23784d8002d50381a76e772b0eda0952d8d943918ba06a22ddb3028217a07514dee8d4926486994896d31b334497da11aa28aca62499ac8d20fa0181672e057d6ad4ec7d5e92dc4ccc5d5168fb69ed4927422597ede5a4a1bcbdf6235f4768aadee99972e5c740d82784c1268735e830001033345de1ee965080f35e6668047b215da61b228af3955d0d3b2afe68c4a1c2d823e229bd0aa41568f084571eb4e175003b8b502390b628ee22102ca746a05dfbdac3b65e0c9fe3ef901935e3662f4223e432afffda521d27e39fa585e2bcb4de3ee496daefebe35951a642f22fbd06915f7f3d20855e89891656f95397582e1b8aee9aec7dd095133e45cc0b246e4adc52f71926aa0df1fc00e221a420e7b3e3cd19743c55514331e034388cc0ed3b66ca00b8c4cc573c5da5c0a0e29ee675e55006fccf03dcb4603c595f106c3dfe1a7f0c2ae038a936d32baae170d13716b3dc99f14b73f8277eb01b47ce3295bcad7cf25d7a549bc1187cfbb639dfbfd38392f6a0c425e6e0ce38d4650176458fd2cd6bb9a7041c81e53239d723331bc2da7133fe43664970341b52259c5e78e498e91fdf8aaa3094ef26cc0da971fdc4705be042651b252e5cd9faffb0ec4fcad2ae5b27147e723c9f079412aa69eec1863935d95d89203e3aed25924cb82e023e94b9a290ed16ecb0c4b6520563d101447413a2daf17b139a489cd7f34fbab38c811013ed83dae56fb7a085f9ab3379c86799ae0f84115853e7f614d62496d5bc29a62e3fc4665090244357176e5c65770ff50766962e886a72811d7e55cca0c3078c28fca0393ffc62988f58ba5745d72eee1fea3ebb22f1e83f40e712cc7c6305079ea6ca14299cb8e7db69ab6dfcd818497e01082d3bd4095e3b449e44c9f595383e3e1a42b220ee1bfcefee013e9a79a9b064a55c0e5ae851f4d2717dd6a02f0e27a2de44d8d7dbd4a8658a10e6b5fda32dc96a7d804d7744982be6e022cb2afcbc84dcf03f50d0c65d36bd4a7e665ca3ec52711c39599cce7bf1b03bd4178a6308efd531556e0f9d0fd7f74a487205e40090c8aec51dfc793a002195dc2e6188508362aeb34801c9bd3dd972ba1ac8f35c8ef334fbc293767ad0e1db06b69ce67691a16a1a5dcabee11bf218e36420b4935099d3609f7d7672ba95205b9c454911ffb7382db9b6ef7dc89d140390d24244106e3f3cbcfec265125fa15bfab0885025197b3f3c81b0f945810bc09d6f9393b30765cfba890030b4b7a00081bc068fd2b6f7e8bf9f971b50d036d391787e1cf8f3c97ef463e80589ec0155d48ccdf58608ea5ec0358e4a7efff6d7f7bd947cdc184b0fc9c22723e404ef915c035766e379cec645e6333ca0e2060e9eec14fa19655c6072c2130a6c64ca7c2a32c9551e5dc6786f913f03b77111f524af3f02dfda3562b5d46689031250778bddb48453a623096cdc0f67f7b4cd67cb95453b7dc622beb9d12d1f3f25410180b732eb9dcf6cc6c6d5b51878e476be95bc87df06d91728344e23897953a97414796f275000b9eb7f11e089dad1e3230722aba960128e47289563fda6d4ce1878ce3b1d8d8b07e95b76490370b9d45374ba0fc60dba5dea6b58462989af71908d794cc1d186f8808b077b1f4db582849812cdd38fc88adb81e86caa723eada2214179177c231e4aa42f4feca9629aac4d6fd45ccffaf145843731acb4113399c828ceefeeeca441aa6a2d68e8935282c02d903989393ee3067c130da2678a3908636bbda463f9ecbc0aad564bdfc4a460f5c9216c5699904346eea36ecee92f6bb1501a931f1ee19ea1152ea16cc4696e914c169a1bc70af06e169e05b99d056867aa155c41cdd26a37ee6e66ec4b53bf68e4fabed90932d7e240d1df92de2ee8926b22f4693344607207ae65c9e1ca986f7989eba6becff6d8c9e037e047fd95c7f5c77a86842845a1ae7c7855d584d72978bb094d8918b8c8f8e223329cca9e9af5cb4bccf66cd7215042a664041795451e10078d9d2cf735de32c24a4e7d6b1771962138c16c967a578469c9e0e2ae9b65ba095e4e17d9e44da139bf5fc41963be7e3d4419a30e954dfca49feb01727a710c4c82535078cdcd5d0de29370b1b4a5e242c67a6bc2cfb9f67caeb567fbb59999e39b9f0d6f61b90f45733c5ea4858b149e7d9a32c65fcb338461445820ae61c87b9364787ebe329f9b404850e1046cd380b36c7202226b55a9d2229c91808cd1679da2b80aa73137bca3535cd05f239a5c084895c29b23a8943d9d00eccddffd5b4859054c6f982e06bd4e8002795471c75b0363bf64e91a0a1d7770660177e9d90a7edcfde30bf721baeb5091173484a9f95e38e36d83acc9739326575cf70e4fd31610a795d55c992182fca28904b9594a09ffcedb4866bb2a23ac601ba1bea2f6a827bc55b0357956e750f05df09621dbc407c3dd636fe4607e1ee22c5755a3e3f83750f22592be26932cb32fa353670421922e4997e0c17e8bb1a606dd1607e0ba3600b8b0452080d6ddd1a6095bd5677790d8bf9eb103a24c22b1ad41e77b67f4ffec11c917ca10917162b34b4163cb7e4deedb6a674db396b5a5e1e54a1efa8f389da4d94e7eeafb7ed6dc694c04785ed5d4f8d6f51bd2643c22b20600a5a4d06c0efa8b4c3a1356a8987505db433711971d8c100a1f143c382e3b40acbb3f4dcc08061fbcf068dea547840c01c7ca885440c7298deeea68ec73c881049fbb517578da74d8f09825f2f55576da1f3fae2585bd013904e60c20b1f68cfe42d14394b90d214efab774964f57c2235d7a900c4ef0a26c5ceadd243304a9a8f773bd92c2ec5af7248e36c39be141840c49a37c703e98ec6cddab97ef15e85121c5677fe4454b940741cda6595c4ca762126e0ed559ff3789f986db23866e3f3d8f1de2154ca45fd30b31928a48ee18b3918b60b291cc232b903444d57d667ca5ed09433ead018aa31a3caa41e610e66d75a9e388328a59433e9b8db6cb8e0adebb52f91fb3f5848dba5f05f45f8d370c746399a94948d344ba8961fa72ad3a580c45e5d4ff394f293518e3308aea2f2f7ef2ab82a0a9a19e062f95be60454c83619e6e997b00b9d77ade6ceb7ab1f889af7a995bf77d03bf6880309b81def61f05d965b56f89d7cd85b82a7c62d7336e20fc17ed110b8cce3006921b3843e1b189f5ec328e57cfb13099004433d2ca48de41a41bf70ec8a986771a45b70fc16446ad2775cd3564f896845b151177abaf2aabdde14c0f7a12dd69d7d350e52d4c8e3989c6edc6398ee36cd8d2de624eb2a53d68d11ebb47641c347ac13e5794b54a7a3d719c14158d13ba424217fead28a72edb4ec378da6597907cf497ab8a7f78bb09ee5161916eb942c30c7587ef0d9564114fc1a1d51d1fcfba0836f7bbdc9dfed63589c48b2e9ee7efdf07b95486cfb8f4282b119a2f2f2084d4b97cde54c628b75ffe0e5c19b3e74383e1f89b4dcfd194677a3c6fb087d9b2b4de2ce384c39029c9aebdfa60b8635ffbfebf007d7ac7e3e4c86e94a67bbf488830e27bd08377e0f252706df0c557a7d78fb44adeb1bcb8489fde21ebaf43678fd28f7e957347d180efc1e42cf57f9e2099e8d0f09b5653d053ba8bb25582f530505b834c3f961d8f9b8a093d31f78c78ba8129a323531315aeb5b65b433ec95c11ffaf901077bd0ae21409758cb2d5c499ab2a861f7cf1abc8d663b753653cd7f2dd523c9f81af131b3e5ab8fa0b1552d7a7293004d0ea9d00f7e37dc82033a53369cdc6014cf51e7d9bbd769060e44f27669c466f2d241a6462895dccf6883e54277bb32a99c0f6625ea82b2eeeab5636d25a535fdbdbc333f024e1e8dc516f17128c3c69f8483db83bf062fb748689136ec437e589d58026b2f536a352a70b5920ff89e92bb964b110d7f1467588c9f6ddfbcca98eb3fa2f66c2f92ed4184bf698cacb29fb088c7a8e5274d1e4feb437eaf6d3748ae99429fb8d8c0e758599aa017233db8d2c1d3afe60165b57a031417dea11a0d0ee9ba3d70af2797ec130ed1d2c0955f5f12e72fdb830d90c9022d5bc41839182a39c9d980764f56f2ddda917fdef9009d2e0004bb17fb5bafad869f2be5e92d4d893b0b7661ab3bc8764761e4ce77e2d359e317600bf18dae87c0fe5954eafe0bf96621b760ce3940028071e2dd1f927ad766abbe4d3dc50cef5bb8a385a04678e0037fb08e7c360a03f5a326056d623232424f78fce65dfa24f13665dd12ca1177d1b74b63b4fe98d485dfba385a0524beac389dbc33b9efc7fab9d0f67cc07e598c3e42f77dfb0b0376785370ccb7df4a1ed273c0cf72729dd9b9f538099555ae882a3fe1b06e40765c632242163e686178fa517d029fa2051da816d5e11e5cfded2c5b7796802259c1a10b620658eb9461d85e0eef133db967d914f05479dff0d555a7237c9d38ac3d4b35135dcb67e6842ace1cab9f0321c0d5b178663f49ed65817be14a2c07480fa4895623e73fc816a4595a7f440a27030abf6d8b3047e0c36186de872b9246f71672c6fa4544a046e4790a958d8aa7a47d458c2b09a1089f11091a858a513b17f454ffbbd6dd3099072d2efab79885d5d46ca74b50531d218eea0d35ba4c30b400bdf3bbd21e4cd149e171e4ef88b45fc2a987aa801952db9d8007f4372ab805f07e4d0510cc4442e8cdf477e12bd9879a7661d00ee207e1fe95c405644a450bde0e2764ac4f2e4d8426af96a81faa1f78a8a54d164da04b9a5fa68a6b8c91dd04ce835ca403fe4fbc30561b261220e9c36497de1e735a58da203edfa808a1d3d5fd5f6cbfbd234d75ecba7a04ed314e2844479426f050f7793f6fa0571b4fa9dbcb50d251b7dfebe72cd0c3d6f0009f7f3b2e18ac6cdd09e1ed233b62216aaaac170d3d86418ac9f80b78cec8478ba57bd83e7d98be276bac7b48f092b30158ed37893dd7d616b802300a54ee84c6bc391735ffaadc808a210f30aca2e140306c171e85428fb85165d00a896026eebad59f77ae78ca7420a6b0b509505914ce4de2f6e49c574cc1ffb45ea1f198e697976a1f31b417b91e278b04d161d7e2221334e97f473c842e2e3ace5c6394fa49e42d8cc01e3c8208173740347b751c083bc6f51cbef46113464e7559eba343c73c46909f343c2f42b779c43bb5dfda93180cc62a1a37e07b00cc2305747ef3c371ab27015088276c6e71f4c72fa1b99fc3b34af8582aff0787ba861d2cd959269b8dbf9d2eb4fc513f44b96e1eb955b2ea93b84301199321ad575e9aeba6d1d9058dd5d12818da99c43047c6d38ec3cddfab03d190023a256981e2117f5845b4b980183491ec30c3434779e602619a255c2abebebd8d7718f8605b1a59416bee0dd78db8b6e9071e63133df69ff44ad9da466d8a50d4a034eb80869bec8bf65b9d4b97a8e04cce82860bcf19dc09fb3a00c519911c07ebd7fec10a7c0ed32d76033d082b053776b3c1a9d80db379060ebdf27ab659a18925b4e5a76a71baada13c698c669b3635c0ae1a8c1afd4318a60ebeb469bfda54ff16c61b981ca8ce1f621e9e73b40d7bf4bfd71957b7d6fe82e046b081d9158c4892de7aa4451337dc7380db0e54502bd5eef258be43f9fc5bc128fcf288987c003b83d0cb9c2618378f113f3901742a4e3fecbb682ee39834224f30eb7277e5a6514546fe2d454e055bc2e04d8fa0784da5c5957fa79846d1fe7b765aafd554c5766790ebca2a1f167f50f6ef411e2f9c60041254bdffcc8a4fb90b230b082d733aaacc97ff42e28fe33bceb00d7c916bf328cd529560574ea3c8740f51f0e21c365539b861a4da12a5e73927116a96adf7ac95016542dba9e5446b09a376d068db2b1b60da2539ffba1955061700782cfd2afaa72dac2a9fa4a7a4ccda5ead8daecee2b3214b06ca7bf9c8eddfb54a987783097241d2f05a47f327cd7bf6eb9eac9005df6cf0012fce5a1820f6d60587f921af7b0e5a1415d08c334b49e87b966ca3ac7b51719d658ad8b4fa00299e6ebca315c2061dc001249cb8be2a53a3f3cd724c20c451c11559ae41b9b391c831a360a96cdc574d7bf863c907397055f6574aa1ad02cb88162442a8ca6b19dfe244db4c63e3c3d71e246a572d8704009134a3cbd6a5c8a54c89ce300af9636373c910034762efe80d2044bcb16b98bc9ef3075e73e902453d2d951859caa553b905558b7693d50a9046b4b5174bab40b8fe88168f627234bff79e60e37867760b5c46d0cd3cc2ece7271a9b62f3a9775d9c6170d867b33bc1fb61941b24fa1a84e5c9da3fe10f3338f44187d2c3f3faa93aafce2420300cf003e5c0ce81d5b144e4e1131d624086fb212f5195cbe00a28f912f42843d2db70b5e166edb355f2e5643f56be8a17353cc1f917d7614672a219bf0f9c84110cd0ebae1e6f40d5dd84beaf594317962e1a95f627fd2af1873a57fba24d5e976cf77ba3016d305cc9bceaa7ec5f397ae12343c2bcb249631582680b3beb2a4f8967c80616c3643871503307577000ee16561ed64a4057c321e21ff258a797952375f7f052eebc4e67a14d6412c000e25c4f42d3ade106ae7772ae38aa293a78c6838f6c4773211eed8a53de7d30a5575209b8e8b8be55b409c03460733c53907bee0c8af473c79a3df9c134851bc476fb4ff247046c2d3c51506f91ef113d42e90d7d9641e52bb28b9639c44666c526612410c97137b31d4a0ef5b02d92ad195037d27403797045335f685049c4659babcdc0283c065768057c23a70ec5e0af87a4ac6805e1d4814a940f91ca07a3bdf2f05a36abd4703d770517bd4289ed4550f6a8b3bbd3a2ce40ec055c37422be3203a38e0d48ac1c0413ae74bdc5d694be13a9297d192db938789b3a4e6071eb395cd2a27f3761ae38da3e3a21124f6fe7ec67b4f449dab019a138e5c0629676af46484f70ebcc00ab40959815fe7cb3677d122e2239ddcb82081ad34b2841c5453231ef6b3b44aec98990b964848a4b733eca97c525f162d615b563e5f7c5ec63cf274ecb9bb54e3ff873883143fb74e49ac0982f566c7d0b09d3b8ac7d70239edc109da148868a3fc3dd44113c0d6704b3143b1e315cde031a9828ab27da665d35afdf48747ec091d33fb3ab43cad11bb2d8c59c42218369ad1263358c734c46e8934b3c717b526c3f8af06714fb37cfe1bc8f68c5ad4b6d4e8aca03c34d982431990bb007e3dc09e167dfe309b4cbe79d728622cb9fe6e611b251af214f7d0050359651223a8659b019d6e106ebe776e08b6f3b07565f9c160b8b98d7635c7bc9b0c6d5ba78023dc8022716832121e01b7236be5d8d9adeab3e46c2f34141efb2d9c4ce92472f92a53981c005f73fca32baa6b06dad563c20b32112fcd0c08fe08474aa192fe22350b1334e81b1fd3bf48bfae520af1f2589251e9829180646b6be40a8425a17310e6aa3d63bfc22fad3229b994697b31aeb74714028ade89cd9ceae04db4aad355383fa46c9f14b19f687972dabd46827161eeaf7bc699909ec60d5685f91ea8de29f26a64e8dbb497bd10e3c054526a170ca890f53b2127ea6eb289b8a3ad2addd7ba0f689cb6023eb5f0862a8b9a7c36bb1241cb97dee3e5e60eba21a9ce38ce4e59c8e939d91cced00a3e056eb43a3b497e63415c318a2deebc68c24faf8a5c039cff455a68a4e5f9be83cdbef03189dea07be516e353ef99d22e1ecc9f3a28ceaf1d1289e3094db1946d3b34fe426ba6600d75a0c198477ea64a6613ab712f8a6ffa4ff97f3688e12d47cea890a1db4f5045d715968120cb6bb291fe9451908dce6f404768e309f4fc776e25d2a9dd263105d21602178f5c046019de8543fa39492d0aadc672927da7c95200401bb00593e442aca1b3fd4c9637992e99d3139c776b6daa3dc2557e078c7b628dbd526b9240b8901404c916b97bd390590d6075b2cef26643a98eba23293470eb2e542c4f6bb56dc39a9d88d19cde1e410a111c5f6e646a1886c01100e073aababa56e2ffa8a87296d0f6a56845a3676917801b83a2e8a1b3d895e37d3f9d59ca3184949f15c295a85d577b2e9e5625fe9f1a104e6aafbb3616744773f48772548250e9a0eb9f5b3084a5cf26feb746a822bb5fbb7465d133e3435c614d05d86d574e1fb7c84a7209361c5e4c9335e1c53619a6066b3beadec2046e9e9a60aaf2e16f349fa1f693b44ed4479e68d211965ac643f8d2e60fd5dc00d5fce1612289fbe0e7a00e6689df4aecddfe453fb1d3a50d304c8b2f4c17223d9c85e38979a7745f119a9f0e71d6ea9120d2e6fd7530590e50891fc0514fdecad542cd3baaa7a00184172552fac9749a69bf7f6f63ee34f4c05c342521df69bbc34a0f4f7def17ea2f0830a55872515929f4605cf3508cc8c48d7960bc49f168cd801f76133c2080b1cc5be98bf8644b651fad74ab6c1a8c4b2cd15596c720641174f5abc9305e8f51d7d07e3f0ce3431a4b2df71a6047acb28a802ca2cb54560066f60f93025c87dc41a29744838239e116b25b351010c482aab3c05c19d4593604223fe6f845cf6c22d6ce1e2452cbd1c19163889e4b3f1adac55af085c1916cf7286b6681db47f53172eb865ca039819877c86316d655fe17c5544ad3a6902c46f333851252c9e57033b220539459cc370657e5406d34490a1c5a33cabb0fdee41c8d387cf643a60f1d52b176f5f1031359faeb2b29ea9220bf1a69c127751960ec80b6dfc01e61927e2854e6af457b8e4273e8940a2d6944b8e5711c4c7312a8a204174ddd5c545a3b3330087a3b4f11763e7ada0ebdedb90ceacca92ded66d828542d42f916bc79796abadc63276763d15da9744311fd4ec9e88d11b08a7105cb7962ff109eaa695b17c0ba6a9988290b1941a15282d875e2cd84651a77c568283bba4815dad6b8a76ac92279a6c7f95cfac51515b3ad3811a8209817ff523e8f81a3e3626fb66d96da1713eecfe534eb7cc42af1534779c8acccda32fb5b4078825a45f886bd9cbc7bedc6b2944c38d603ff75dec371d6c97c081b579de215e541ea5effa0c1d59a2a371168848ff6d9a6f80249c4016e700d17541a87e20abcd8733f927c44dbc5066ff40c68dcf3044679f333b9b7353234dff479d065335bbe9f089d6653a73cfd7c86744e546f64593858a5a2b5e2f42c4e24f6deb81bbe32938aef92e45245a1cf5aec8a85f1f5b1134be5afa21e3aa345b511416de19e32f8d17ccba3ec432a8894f00e75a14c7ae64698cd6ef91b7163d3888705ffc206336621616d00846fb5b41b3a361b5916f3822b24bc1551242192a2e91c176b2ba502c68386ae8461294da7524603d5434aac857de59ac5b59c8d621a5b2673af10e1c19a62f1213a9bb8b1aaabbe0d651aa3639868bb4ac4b4ae928e516731a829b38eaa097ea733bb1fc7297bc1c72c66027306eac99ee305bd1f52a6a340f578512a38d2d5f45811f1ed4b80769c1b2ee67607c840a631455ac3f21f880e2c22a2c1c49df475b83e2524c869bf155f8adef1564fbaba5940bbab3774a299b8835a5e4479f26a148e5df77314bf02ebcae32b8bcf8f0940ad847feb42f397227e6a3d51b562c83baaf8e5c038e87341557dea23b082b3f5f04f432b275feb46c00527e2426e90a9d21e86ff9f29290f1312bceba49257111271534d0a18e7508f5d1ad8bc3912e39da6ca36a8024a03b0376711301b6f2253f6bbd9f19002717e9b4b7c27f04bc7ac2eb9a55e80ba76b208c7a4807a35063ae9d7451bc24daaa0a752128c29c40880a9297dc414d39dfbe7180f5e18b26b1bc1ab6a8f8ae62086397d775f23d3495d979e04d9e6d4dfd50296a75c632e2b5246de87f6df2b8b0df35a038c72e6eaa1878d337dfd514fc2e2a7af9d10bbfca90f7925b41317eceeac3260093358c378f06af6f4a92a5e833b9c19963fe1587f5bb23e2c054e2fa38e23319aad264ee5af38aa7a8353eaf3787ac40fd1bc616f06dc9a362726a503abc2aba858292da11af494b2ddab8c26ce59e724b67b07e14217ac8bf2d67ed240c1582e18d615c6009e5c72d6a8ef82c86600d36e40dc971f0c7ef2dc88404d38daac2242b64654bcdbf862d9ff4e9e836666aa9a76f470d1455c4a8df81711ffb5de7f5ab475eba13383e06bfb7652d16ec7c37ce95270ba8710b68a402adae54498fc5e6e90f87e1caaae6becd217149af1b0e3d71ee0d60c4a3c0ece0b38cd8048a510f63c31f3ab9eb55fccef56c600d465283899dd63f042950d0a03b9684e98ad0162e07ab5d2afcb94c25b7baba54fae4295b097a85fcd740f2ba1d4fdc05e61b36a0910f313101bfb2ae1d201882274d4065c7b8aab76f0ff1a8219f4a05e37425b5761234842fa06b2f4ee542e93e7d8f20aecc82b792698476243e1856fedaeb8a7f5f152a2b0a2a8169573c3f4a0a0479595bf4111c99a8e2954ebc9b60e1d90e14ec83a2ec5e78ef7523dfc98507762cdc5dd7e78dd6190b818040ba9d2f01401fd304b203cfcaf3680127c65e8eaa51ac9d076c02cad8a8748197774f3e4548c33b7e586d973fae53a4df9502a543082dc8bf01e24b6d11a5663aea5aca6edf7a82d06c1c4e57286482661e25d865463cb6162268426da1ced0790f15f06a030234c3fcef95582014d6211d3bacf5da8a8eda61786189ac5148946db0b0c3902c3f680fece487dc6973a9725dc88f6c50a899d1336a46bfa59556848452dff88c108eb7be8ef802cd26664348cb097cf4ceaa7e9b646a2ce0dcd1223c2396f49ca0e82a0604120cb068bea222cad16ab6243bc533a4fe11c07a5b5120ed110414af8393c04d3e4f5ae5b29c4882f68cc00ca94abb18684ed7eaf766d485aec99e464ff666ab9705ae365e5c76a9a9e58da902cb091f313ba84b9a4a7a1882d2a65ff7de1df7418055f4d899513f214c0cbd7e262858de1b45940f35f39756e381e79173c34de8156fa87b627832ef63afe9109fd91f03d35270f2f4aca1116931372ca85360ead62cc29adf5a067c6eebcf47f8ad2d143fc75249c2c25f4b0d1dfb633e3dafe01649d8b456973979e23dbfae11b834e84605ea1df7a3402835cf901126f60abfcefc52744a1bd7220b2bee83b200c7d0892aa491befa37ef704261a29a81b0fb8957843f0cd1247620460ed7ba9214dd09b982dea13d9d4f27a23890065e074e6216807db2836a92038c6491c1941c3e8873e98690a29da5639670cb2d450debb4e6f5c1e3819f9cf2d067ca6a606be6ce0c7d6a5b57555fed45ecb002c541125958946bc029c3e392a2019dd8cb4cdc3adb61df303981d731cee39587116afa307c8c5b07812f97dcff6d59f168f2d78951e31f07d4d4e6d5c83ee534eb8e9a76a07081c14c05bcae01fa2a094060508c694d073258b0cac25c05c01967486bf61e6ffcae842eddb4f7dbff6e99f09daf1dfe75811d9582d0d1cc45772b51ec6e10580fa30000000044c8301cf5a44217559ab0fdd870a5a2ba08c546d41db6b52ada425a93b29bdc7b6f29659201260456048e039bc65aad564beb8c81a9805bcf965bcf15baa222e4e2c643240be2eaf3c6e3434422d544e68ae8027774a7664c75d1976b71a782a668a2904f44b2750d8e0e5bd02d6c174b7d0769afcfdb4e1011898ef19b559fb71d1f9dd5e76d67a8931c67079c14eca9ea5cc0c0439847109f1d4011869b0f939b0f944f148f50df371ea2bee7057878bcaa2d566e3b4eb79d19bedb4e922370521393c60020aef08928882970b47e801b9686a85e382a62443eb7a4b5d62a99735a1a7b266f0408389e791e3fb09ce32b2c30420499b36ce8e4b119819b62f6d85400fd0cfb2a09ca6f40cc6d30bec16f332b5f6191885ef1cb3b9d5ba361a47e0f0a3843b0a40cd2ec540412fdafc28dc8099c74ef8af1d79a1a8e8a277003685192a8e99afd2e13a845292fa8d5c0bc90c142f93b6c28b99404a0a95d994da21250fb22ddd37c5272b52fc645810a9411bc8c911204a4efe031a6dc3556ed996655d10a3a6ce8f15e6ee5ac024549091755b34b6d6a8418250d251101d482286f78212e33886610d3896dd53e8409e57dcc2ccf03131d7a88617af119b3844259a69c824309abf54c1760e408da11a6050f199052290750ad1fcdbaaeebbaaeeb3a1eff03e8811881809a0fe5eb306b78c00e4a254ecdca9772fe60a654408d06a47440cd05116ae616aa2665046a38ccf038a264e86a73ca4b9967861800cb016a7fe386a9728a812a19500b9a609094260420c99272872425044c54806725e6abcc909194b876653e4da9b20035a372c68f13aae01083069825495e18e93d9aa2f450fe8c0ba4e810228b121a12e527866ee401e5ec4cb928235484ca141746dde8c8938fe19316509b4d93872c357c90a166a41cfa1d1aa54d0d0633a50ae5d4624188da87f1c8bc15259306593997d4cacc1cb490a1928254c9a4acb5b0964329a2e67ac156de1917d8b88490c2cc8626193e656674a3b1c654ce3035d4b6b450fe0f0c2505784eed0b102595d2c9d74e285fb5149ca0754035eb910313a232555ccf14956e444259c2e7544aa0c6a25641ed6ddcd4e60bffc3c4e2746b40ed8fa44cdb192148509ce7f1744fea4b67adb65686e7793b4ba4a23e089518a4138568dbd1104cfa6be500a551ead94a27fd2cb6521f0060467f65599e35f81cc09f7382167682feb08f769c8d1960ec730919a63e0300ce39573419bca8a2b149e648ff0e014d726ccd9021f2f3e64b5065b92e6bf05f3950b9e5381637d2bea27b9a039c7409199e9af3e19f262c8d593b8ea0e3fcce7559878ff408be779cf3f11c05b5cf51d02d16e3fa7d5acf0268ca672531a21b79684373b40bc733a905555b8ee3382e64317e218bf92af0119000377af2d90d6084713d2d2880f9d14ac700e8e7340260057a5a10d358c7c352db686e03b5d65a6bad754408f5c66687489adcdb86dfc444e8370366e0bbb8f5b42100b4e62981fb700b7cd4020a819a9bef7b3d00dcdba541007e1f8d0e4b97cabab7b77793a8ac77fccbf9cb63c7f3ec4ffc489260cc33cff332adafeebd37cfaceb45dc0045264d451634e5f3c6d227429a37a2222d2276d3e9be11f13cf971449df65702be6b4a8b4bf67603861b2cd818938ac70a3b104902c60521dc0d2929a9aaaecfdb8da539ffe7ffd7d071246dfabcdd409af373fda729f4cf18ed355730a56bad1c05a55d174b3f127ff9c8fff951ae5a1859f9ffff7fb56bd27a73d6de6e04756bad75bae113fab8d1627399126de82eddde869c86985425f071702ea8961a6912a772fc4915377de33ce03624a4d73e6f4327f4f0470fcd24c218a13343412a0cb5d853bbca4b98430fa10e39e80065d3e064db600ab9a88014642b49f2d1218e6043cc51c21852f2cc40b50398b02a4b68260a880d3f326c2c4a6847422d436a9020c28eeda4dc446a31c2a89a4f7843102910838316a51d361051f68ba63069c90f0b620d14c41d20418e786e8434d8903165e367039d49610cd50f3b569448d9456ac00186508c4d29053b8709a10d3c421f70e8a021c2a801b459a811c29e21153e750965e041dc818308e4b47b9a84532e84608a8835a51de523449223a452838a906c4b09ed6c13ca84247ce981e54685e969470ce10a49b6cdc81321210b235015ed16b5ed038d99e882468f28a32a1c214c68820f5ba6431194183483f8e2051b565881080a3ff617a34dc290d40c5a0f335c943113a60044105bc45409c7dc008606d1e886a48532296c2825402185588836d28c5d838c17473258843190115970d9e1cabe61ca2e9f846498882520d9b254e484137a846144d85e8444192d28e4416b115a99da495ef6ac872d398834284b9cf860aa4185a320e12da98a0e3336c2c480b193c4e03142157e01b363c892254a880dfb8a0ce1192544fa1e7941df2122cf8f0dc3d1e681481ca211be300b0aabcc76f614aa2061c212b48c50c587941e4f441d4d760ca6adc54868648828f4a3c951988588050d2118414360ec6c2b545dc28837b4ec1eaa389122f63c097968121261125b18c131247cf263473932220242630fc9829ac876c424aa508530a14dcb5eaab289a4883d9ec0d0e40653e8c5c86632a4851fe109479b07d1121a620841413b84a01d17a8c432cc9e41cbfe51450422255c7ab24b68b261308960048521a2093f9c8ea410854c686c324041bb0868274c01151061b696304a952629628c27529a845798ba18d94786842efc08a18e441c443f68fcf022489cbdd8a1412523cc0e427f5a764d7f55441e53c22350c21f64d8429688346c220945a6fc08e9248e0c3f7a98e407a993383838b5d6fa83a3d75a712a025aa0a005e5cf3fa8fcc71122f8fa1ea0e307b6ea7f80c90c2aea45abcf9b4f969eaaa0ce850f07c30ec9aa9d3e3c7c82fcf8147111c46e5db3eaf3e663eba4e64250b438436f1f2da375a3872388f321c38eb1fda46fd30baa7ba2c8f4fe7aaef4d818bfc97dde76649de438d706b5dd77cb7dde788afc3fad566e3c50d65aaebbf154f188e91bd623eb1bc491697cac562b10b4f52cb56ed3c37aa2f43f1868eb5cbf31464a46453ba4b0f406f479db41c4abb5e31ed45af557f9ecc63a33ad7650fbfc3868e7f3999f4f1d8ecffe7335e7bfb52399853860efbdf7fbcd351781b9089d53707c6539a62e9c31c699e316a594ba5c2eeae22c976b246946dd62d18cc1d103afaff26ceb5f91ed55a2946959966999a6f47596525949785a73eab978cdbd2359d36f9953c33f1e023629895b039b94c40bb677d757c6da9bcaf6ceb33ccbb33cab4a9a7a4c3b908aaa8ab67403f4792b4a5244a43ba0cf5b118ba2eec1488b659d7cf2479276fc7d23fef9139f4e071ff42f83fab57f32f2470f2889f9ccf813d1cac9fcb2a8394f1b29c5948ee4ffb038f5f8d36a8e8b7be3c7b5a6e11873176c5212342369bb66b1bcee81377b9f53aceec59563a03ff18d3acf3dde719a3378ee75a30660e76a91a6dd982334ab1fa86e3938ab9af4e6e056d7d6d7e93adda7d7cbcb20e5bceb74ad5ca73be53e5da85e3535d1e21d6df2bab17efd68936d82e2e03ed58ce4e7a2b94ede85fa0be55da8fefc5e1a9afbf4259ed626d66bec78e55eefd17cb0dae4791d0f5179cd586db6da68c6fbb4fab94fd76976562d22b114f526140bdad46b4e2d2afa5b11ac02293dad74cfbb4f5ce6f87daabca8e67c45f6b134e57040da902aa6951a2c9ac632e740c5b4529b2cbf4f7fe2efd385ba4f35ca456d4670516a5b515a54acfb7fce5b755d47499ad547699dabd5d66a57a3f5eaf7f18f4fba5a511925298e8e613a1e07a15b1a4a31a7980aad68461dccbd1aded9101bd48c24a594f6728d765c61ee594edace76e3881506e0cdc0722afb139677238a4a734ee1e276c47983bfbce6f5e2a44d41f306b8538ec16b242da5b3ffa7b60e62d8ec2b4c29a674e55118957d89e71f07b334303a8be9bdf76a35f598b1d53a96efcced080fa7e66070c32b4eaad85f4eb1e23a78bc2b8e41c5b33fb1ba239d7d098eff533aab2bc0ea9a92c4d9bc740bfabce958d2f1d3637dde7244e9283b9869dd3675fb48fce65bf195868508c1bd5549ab3749d7f33cefc27432d7e2b8cbf1fbdecdb3f7ee67f072aff7dd4f6996d18c83d22cfb13340b557083cb29bd9996f44f7937d6ee41ded1aabf766fbf3c1b49ca2bade6d82216a5619b6534d33ed33ae5ab157d8da4aea11ca7cffdf71dafa9dc2ed5d738922ab6ce334a69b675f0decbf18ecb60e559b67ace16dd24d5a4b74bb668a9e87e77e719a59cf4c0eb97d351c5ee39c35e5f2aeb977e9e7d89ab625f4faa9334c92e556d9702bcc23e1ab318539eede77f98b70239981884aedcf29b58c56295e65f0f590f9e0dcc9a31780dcc3e62b5baac4a29ebe361eb3724a86e39de5d0a8f3e65ad78cec0f7cfd258adb15e0db056b0b6480c701cc771dcf3f8e51f5fe141ef3e8fe43837aac0ddd62a20cde1f6cb3fe2729d8ed7cef187d9af36a1f457fc7b0ef2150b966276d6cc1db0ac9104398bc562f18ec53bce1a3f3e5774905f1415afe817a662f76fccb3eae115e0531deed3c7711f77c7112966bfe3e5f672bbe295afe81c8cc41e746f767ce6baa27b3015b8776fe5cba292cb34cfb37154c6ddcff2eb8d644d07c12ccb33229d5bea5f02f1790684ad13017c6b4713502ca3318f528e13514b6cedf8d5e3dc37daf1e74bd84fea1548a7483456f997a2184df9072307f4252c87c5e889237f4a2ea24a1c23b5e1ef075b929b932627283bbde86ab3699bb6692e365b929b932627a82c54a12ad4942ccb33305ad76c9b1b1e137fb8dc05a375cdb6b9e1312efa6bb6cd0d8fe55916b2e9265dc36d49b42dcfb24cdb4a5db9cd56a90d83b6bdda3acfa29680f685fa8ff7f38f355a6fc11c7cf047fce5bf5aa7d845eb5cce75f29796a88915f778ed9c50134dd40438621aafb77af3c0ee35b0fd3e9024d82b7d123561f92b51131fffcbbd123501f2cac52dcf2f7747318cfef8ece416bbe8ef36fc2686833bf99d1c318dc63ade413d73e69603c727919f74cb21d42bb749d22b27ea75de4490ca790bfc12c63f5fa2837ae6cc5e922dd51c6fe9c191fcd56a5cea35a9e6d491fc3a18ae4df888e6c23fb874b93897cbc5f18f0b972e17a6b95c2e2cfb1fedfa1f8d35cdd769b44bd3600c8481301006b2658e9cfacbe8f36664b3e4ec977b718cbdc7de63efb1f71e7fc174c88e7f1c84fe30b2768cbdbffc3fee690c5b759c97f1485aad5f98bff4eba55f2ffdc2fca5398aaa359f1debd748aee8afae356f8d282a7e8d28280de62c16d7af166f751c6f912defc547f26968c696d57cd249f548babc174b73974b734b63f5f3d6e87116d600ecab91ecf8e52328ffbc8ed3ffe9a0b5386e61a056abc5f14f0b97ad16fec1b456ab8565ffd3d23887d5d2b3e6600c8481301006f28e20d1fa01fabc1d59e9600bc37440e8d7cb59ebfc91b6e7d9bd5c5faeb3e6f9729dc98c4307e4f55e9c39be6307b56b1284ae7339c867de00e499a3a01a733c5259c7bcd3917c166bc4ad9c716e699b6e7be6ac91d63c858df61bc95187221996e11f5ce21f4cc3328c8b68ceb8c5bdfce239e7170cd30f9108a8f44b9a935246a301000843170000280c0886c342410e0421164cee0314000c689a365c4026250d23511445510cc3300cc33008820008020008c02010c61802723d000a6a9b8dcc186e4bffe3fb4fdfaf9bca47bf4bcd91320bf9f1d0f5f159fa5ad8101ba38f2655d947b54f5d5e9ed3ae7f46cb0f7a3d2c5ac7158a3e99e2c1489b2f256d0ca989984cb813f5fa1c3d8ba414903c4d52524125f03e21e45c2eb89e75be867eba8d3541ea07d1ce73dd85949fdbb973b91812de62398ae7091aa09990b5426d1120221a3a707e1c8d8fcf47c239bb71105da9cbe53dfedd9f28eafc73b801ad076fd6b188f75756c702279fd3974351200aa8ef3361ea1263f4269c9ff05427289479fd78a3e321899542385a781b8857f42b1091bbdf6936d9d9e42824d1af065bfc393cc0003f66a0abac4d51d9e3e5ca8b0d8beeb09b027c1267a0a17661621a1b39a45f746aa9942c8d284597a3b666cd37d71a97b19699878710460018e6f3f66b9d4a384589404288ef7438ed1bf4fc85ee145c911a6c771876aa64fac9ce98903af46075c31cd862b8b1b733ff4de750b87c227894653dc09248cdd004af27ef299c81fbaa3e98815bfedfd1b48bb6f0420682e8430af8b953dab3406ac809f71525eb24213336854504be296a4e76dfc2799702a856e6a01114aea6e2293a1a5bf1d55f0b7b92c5a0f46fbc2319826ec663661891fae9b195847c95839e6036b081b56669729f08d34f7c822bcba9a91105047b5280955ecebfe43c2e8316002fa1b1646a4ed8e107c79e1cf0321aa517ba67f9d19151b6c46dcb6c8f8689d877b2f9bc69a148799db2e71b2e2d59766feeb6651912049309fe8e903016c9cff78c4ec40c19cd473ab158038e012ad1f94196475b1fc4469fb5d6718c3b9a0b7f02322b176a5f05f2d47f4ea038c9565a7a56c7077d2241eea8b4b8956b15ba593d00d137e744df6b1f11677877979614e9db64095adcc0cd8b9ec6121f9f37bd870b2af094ff4b7922cb67667951cd0b121009a39a61ebb8df0213196a6c9feae3f749f125956b92eb944edb2ae4fea8740273d78b7c1b8f07db27dd667502b4807b548a67fcbbc3c76bca12f6b6e5bf0998393c5cf0b42abb7b9c3f409d87a09703ed125e8b21a6c794aa794adc63657f3096f0301e3d2a307f035b0f099a6d8261e1d1b018513fe2fad02518982a8d4b5a55425ed685a4cffff87592ff7d9e5e53e1acc48705bafbf117d953213dfe9dccd4783a19f86cd39d5837b5ad6d275bf8a6f543ed949d92a0186053588ce380363ab655bf01d4501a8dbe8841327b1b5e7cd6829f89aae5cfb4985693f003db4b096e6408094d8aafca98d3c1030494a8d9fe0b9ac08443a78e764b7068f97ae767aedfd174236c6895c5a3adc79f261cfcbea4908bed05aa1ad9ef5a6e8361ecf67412baa8fd780280789c9daaf834a94a3b8e398745db7cbb6d338c5d589170423ab5d7d7063c1e0ea3c34161d7bea59afac356102d409200cf4a51537098635f47cf340531e732b96b8d26437c504b4c7ea0b7af91000b6bfed34bcd724ddffd1266bb1d8accbd94c952f6431f335d9a4294b9511247e73fc91b4d65446308fa67f1068f2283e5cd4ff2a3cf84671deb422ddfea0a916cdb93651553b33698954892afc1fbeb76d7cdef3b6198aff353173f59bb14caac93f1c2390d62206a1c8276bedf510cabc12c362986f7c90a8457e666a54f65bc26726ccfef864f4e161004781b4aa4aa470c5553a30879eee947bfd4f05f1cd383105d4a4f471f853818c49339d792e5e297c3af0826da51fc440418ddca167314e778cdfbff1ea1b5d4790d754a5b3c31a07bc4160db0b59c849efa43eaef11c3a64d5b9b3b1a4dd18e36927251006c4eecb92c762935552bc6c1de1798000c3a89a99ca518e094c8a589eb428b0b6e9b0568a79119d0502b980f0d71d584f2f693570621e0e0e448743d28fcce3182bc7573a4fd1d4099589b2f475443f5329b3721c41b18e8a53311a0bee939b4b0a3d978ec54cb0df71d33eb4504ad7ab0b983f6d28326b9546d154d0339b2467e890eb5e765932af06c5aedfd3de27c5f3bfbef8f7ca57aa2eaafaf699fbc89817cd9bd9bd47c61fbc623e24689d4f899b649dd31f7283069d4ee65ca4b1d4f48460dec0c2db0f38d3429809ebfa9456f60ef0287f58871575a0938b082cb7057bc1282bd981b9e9902f2b4577b88d017b13ebd5d2c377f014de0356a6022ca19e503f8818b58b895f5588aa20d33d2cd84cdf0e112b1af278bfa0186cdbdfef40c82139b6e4b5b0370f04c2d605f8bc70a541cc3c2e4fb773c24a81a6e29f556c8b1d3423589ba10302d55724a0e130df0a3676edbb73d4585155013fb6d58c8197733b8e6c2d6a39fceec87c70970ad58d404ea36f5f998242b9d6d8046745631dc84f0a77d7496f73ab586cb0e2855ac4fd4014aada02ca73f6f2bee9724345c4384771fccc976cc9e7decf29e9fdda1575b26dd05401a564f4a690bb971ff7d66d5ff1aabe0737e7eb7c9b4fbbdf8cd12dc8f060672e89ea2b46260ddfbff7a42e84f0cf250cd46024b30d1e2f5b1e21752b08e03877e4a88c1681b9b5fb7f5bb8282ac90f694b79345c1cfc15f13b87688a30dbe84ecb856eda06b707b8df589e6b54d4c2d51939b49fe0bce30dc4a899e79ef6bac3ee8722353a99ef01510f0d1dc4b5bd5ced8f6efb50492f95ddb3ad0ca8065ee4d17731fe4a618a83c1151afd8eb2476f99e6a621856477b804873d38f60e58e5ac03147388b7b63aa80017317421a1a8dba202db9fff721436bd18a5501a068c87df9b72819fea6e87aee222b1100b9a3b50ee85543b9d6e38f96b60d04d25b8841dce2e68833ec68c358ba953ff3bce1724fdf561405193df4d1571e32e6dcd71d51e706c69002dd98a7cdbde2243e9c8eddcd12334b9b6286c7083edd27f2648e3ccfcfbd8a48f5ac89f9c70f557a2a9dc72e8f6630b8fc0887e758890998478626bca34f7520bdc26110f8b7f15759476c8a8f6ddef1d83a242f51b6a00935230d5e77860b62fcdafaf027bc8ef430f8418cc9126e5aed0a0a934aa1cec7471a03e71bfe63da8184089bab18e7f14bae240428f3cc57d801d24395d4ee20a7239e59d1369208942929da3a8936e4c490fcad53c17a40b8c87f38706d64a04b922560ae86063268ba4309132f121b6490b32be37d0b8803641d396ce97656a933634f8201076a80ba20b572031758af09b267250e8dc568709882b29224db6907ad046bb45a03488623742b9c48808323dbcf6085d45611d8d3275d144cdac88cf302be21ac4ea61908c871e96022041ac067819cac2160469b3984a464522afc5ee4f80cd0d2b2a573450233a10bec21580f0313be0c02cfb0b6e346acf24613c5dbd2a9b64f64073ca05540601ab118e81e1c4149bcd64ce68e267268c96e3c5b1688c1b73b2cd009ff71bbd66c39777921cba5cf284cae8f62073115e21a924156dc83a385e4499b44bdcc85843a70bcf0a28906288294c79294eaa11eda3dd594e04541e9cb8a44f206a3083c2d9862c131ddf97029a53deb0008d4dcd054ee09500ffb1c08902d77ebe21888cd69a9d74613d499af2f110a1313450113ee21eaa1d805a7ae3feb4bc9424403fdb19f2d7481841fc213a1531fdfd0420a5ff8526e0f11320b1e6be37a1927356146232310fe9139351799c08e9a1475f2d1b5393f809a8f70e1cc85a610c523470024b831297e77e8646fe4d25d7cfe0f1aa83f0294225c7c2747f0e0db7c7f3ea2cf48a45c16fdba2540dd8132626e8931b88fd0641e3c306816c6b78a2d924e24b342e848798b68b0bacf741f42e0b831b95860453d1607778ab4ddf95e5cf42b11778a306620dcbd64b6bcf230f44da233f151efe2fcc258bed0668635e5f7513c45462f587bd4f645d657ac6f30e31514044dabfb788afdf4c4eea0de145abcc19dfc764eda1a715241cf2e0ab045fba8e294bb8a6c92160ee79b567a8c75a1819a9fcfb1f526958fb362ab1279e3921a46d360a56e41569ffe46ec7c8ca638747df6c25cf39e35366be10d81834602b2f516cbc13d6f54e2ae8ab1abe53e81b1ecf5d6cab6114fda37a60bff3693542ccafc88bcd7a02276c3397ecb0c682dad6c270d90008a0b8e3ca759ffb04cc827c135829772637977247a37e9dca834dbb683bb5b353b3fc240bdbb4452750113f960b5cb5057328779c66d416a0656ec6c7ee4720d5efb0c9f0faf50cfcb08987d035cf89c7f67b708616fb8ab45249de58e56fc598ac96f5c4cfb915ff9becce5bdcdcd1a1e40d6f0dec1e4c2ef5e52c21742d5dc3bd3574861c18aafd3d0e428e5ca33cd530f1a7b54c9908295312e5160cf002441e2f0b4f5398dbc4d1ca668362b96bd3277d582159ad7f306920fabeb24013de9c5c18eac2b286172908ff52aa78a7aecef18c2637a396ff98ee0735fc2fb144b052fea8b6b1805bdce0b828b682fc851e576bcfdd0b560472afc80b982682f1a03b920bb3cb2a4f60b0548ff90c1f1a41f7d4039a8cb2c52129dc061a68e91073ca020f1460ec0fb6b7b472bc4275567031680327176fc67961120b5e057c8ac0b859b032e2f22958e644d2fdceb5eb000064c36d00690bec8b08f6ca55be3be353b50baf84473ae7b1a8d32df8e44c1fd754fc33a3910b1aa5231003e09ba8ab826b30beef378e38000b8d6bb21437986684941b6524e7631f45362e31c062d05d8ad075b8cc8780491978a9a5164bdaa9c7394ab010b3d2b7e497dd66b9373fc8fb2ffcf396a3f34b00d2636e867b9600a06b2bdeb888d11e06f72685e3919b1819bbbb8b675a77f1f8cd95131d41cacb37fca570d6fab714757ec419ac71c6ddecb1c75d633473d7798a7e8e93d6b88544742e1b08d3b78b5860d52c053695a36e85c9163a095f5c60d01d31a3419585d394a18e0d6488e6eb776ef128df541bb1976309a760d342ecb2608ce89a8e957dc701ccd58504b7e7a8f5bc4452e6a76b11a171b4b5e1a4736daea1447edcab95ac120cbd803016a2e9a4f3810093be3665029c3d1a5f545d88cf069fc19d3d79cbf2d5070d4c2f0c25b9851625af763ef578f1c2480c96becd733a0d100f2460be854abfd46852e9b2aa6f51aec5310063dc99831e1530035db07a20102a17919e5fffe46b1c06b9720af43b63577a15dedc472c2bb5690a00020185fa39668068cba2828992290e08afb2f2b47b84e0b267b21e1e445e8bec2a7dc1c89005e5aa06e0e8eb030344c28a820401c6848a1001aa839b8ccd6b979efabd679bc85d92cdab851d2430230f9d6cb950c85e6095bb53c2ab620134434040608aa73af85ef8ef2cfd6cbc293fcfa9f14274a89973262a7dd61f5c11f3b0b7a899e136351aa3fbab414359cf59251c37c62362352e6fcd812f4271dc110d0cbf23df41fcbf5d828cffc0bc556e1812dec335eb17f2683a4af90795188bbc646c9a9613db35a545983f311ca0fe768bab1f9e418fa4708d89605afd05702f1ed081ca820f9602e9d42289fb6ef238dd08c2b6f30b52ed54e2f4e0869915e798f01c3149eae1a257ff54ac1d075dc88ca768a2881e0bc38712b3d561d883e5b0b9f1af543640ede3cbeab58a951c846cfe0ffbe7867a4119f7f1b245fd988d3373783862f9066c2529aabab0dc9a02454101d88f79cb4d5f60dc32cd907feab74acf441012288d9a5128650ab576bcba1a3244c9d92a36d659f33a1a8d90e7decb282efd121b7afe86a3110c7d66f5b2c9d95e89db185baf538b8de3d21fc004ad5437cf7b8b97fb6fc06ab91a5fad80d1806402f9b3a90f60ffe8ca0507f9a3265c680f40c075b2802f487b65821078d4f98a07088f980e1151439e0d74e2b6194b2a08361502b4ab49361c914f2029d3b299c21b634a7e7960c907e0b25e34f4448d2800f6d27e2797dfd40b9c766257d3c66031f4bc6df74dcd8da04551b133a0a757828c49cfd98e8325e8787fb7a282defd0f32bb2a1ceda2b2e8b60f1a3890edc7844cf25dc50439087bb2fe790e82a7741173d76ef805ddc1ba31bb4f88a78c0ddaf8be0e127f059c3bfeb110c1fcfb402d7126007b425a1582c40e1e110341721eee38ead5eef1e6f1db0bd02bc363fd0a8f0756610a792bb96da8f11f91b2823e2e3b3f2f63533b66906bbc7a19a06d8f72a7a0a854c60d21245de2fc9a9bcd429c166587d5f346019a418677e04cf4cddf01e3c1d735ea237133297a86bafcc7f29a1f12b9968a885b4d0c141ac6a209cfc54683ededbee3d24d2f770d0bda23947e82417b43f1a874f63de8f0ecc3f397da24b0842724121dd7f309d6682909a312bfb58112eb7a0880c13b954e01f2763ac06870acdfa7c7fbe9cfe91328d85d33cda84611ea3a7b8a4d0267856fd0926b8613893df5850d4bac7c50b4966f0906cb56ad42d1b003a7f2bd38763c2b0bdb65afa50c6596fb2d38c31af8a099726e5d7c79054251cee9f0f949fe32b908ff6029dc1c82624fd2f73f563631077810637cde1240d87197908613e843fd6901cb4deb42598b2be0a0ae0371167478550f8701ea63415c214a9031e383d4a3821d3a3aeecb3a56cd2fa5e3bc68759f6828961f32a684effb617319f289411475f2465deecbabeeb1789ea79ccefc05503c41ffb0dc1fd85e831cb6d793c706a8a437c5a935382d5fa1c09fc1658f46d82122a9f310e154037e0851b68fcc170c08ea2cbe77c77fb2b56a4cba7ea2b6db61770c400ae952c83478c5df3583e69ca65470b36ea9cace60e91d4e990b0555df73b08b94276a390374f6328acb77bfebe018ed981ec00297f792c9f851960266bb30b67481e89c3420ba85ed22025fbcbe4f8c5d7b795633d77efe41db3581efc3e4f063c880ddafa299f7e7da5977959a56d77f050b7e8533e39310cfb54721a6d08f6b24e72f700e8aa6f29412669eeb87bfb94cfde97634930b89d4c307014a56756b6424ab15786394404fd7fa027f96cda173870b784914ba0fa506cb8b8c1fe38c55c74dcbd99094f5ce9828d133ed19045ce2b9139f2f3e81ae9eb3a5fd022a7c7715e1690c7e34582995a554c04c946d266b5ebf5ec21270c235f2079c8c9a70d4b6202ddb71e50db00f96c6c4c6b7398dd4325d1f8769ca18cc71f64dac6e92b0b17b7e33366707b4606228b37e1cb2fe67f1bfaedf8248d8ed6a8fed3a1bc03c4871604f0fdb0338e4309922e80ee6b7c9e7a307051d628d1d297ebaef1a9b837f8ce758d894010b56fb4a9c5dd19c3aef1d94fb8c41e369e2139ca750ae2b7e3f379dbc0f2b84d6fa1c3dfe51aef8c0ecf96c6f8ec7b68fa509f413525dadfa1c1d46fc4971f3e63422ec469c68a4f4b59ca06587201a0c649ee38f129ae30d71120a7b74fe2b09088c00b44824ff7a10821ea3269f8a9794ec3905916d768da784c1ed96bd5a978f05f4e783e7c229aebeb55b0575428d9f44f3a0a832acc97cd3a7da4d2f63daf408b51bec6b03010e6d8f0b9140b34a02b0782af9f52bde144ca08eb86982f7d274e5e85cf45e480462501096838872a7c16044800dbe0c53c43fe5f8aa5f5c2228c3aecd0be94c75b2fa1dd64fc8dceef5179fb20921fc05d0d43e10e62b28f736c8d1c3830f5b2df3be0c7b49feefbd737fd14b940af7f8718490f0be2222810d889d4103545f1b1b9d5533c4178c7c486b3a0fafebbd7a740b0e94c0005f34da5fb807c87f9667b0bec78faa30239d88b1365b98099b0360201a9da6a1ad990df6209471c8d582a468625cef97ece84dbb1a34135ccc2f0fbccd88448f80cbe5e885ee3559282348adcf6f3d549a49b05e054cf963d0af5566902a1c2184645134a479219eecbf8154cb6f6c068c365a4989da7d8d06aee6dee65af5cfce5159b8201fbe90eca055fa2b544f964df80047877195ebc0a33804b4571339014883212309ab378af90e9cd86b77c3cd720e82da6f8935b980185259f9d068a3649e0ea01cc4c7a3e8c756b20690bd39c7ec972f8620809146ee58af297dcc31301d36150026645a433f14ef21d7f465d38c2883b2c4ea29400d10f86130b579a51e5f132564d4990008375b1fa1677ebf762943c144547172148b34a6904b8bdad3c5a02805c4e5991e46ad05c860f984941fd509fa40371b534c91de018e68ec9d8a592f2b32b7973916fac2fb4702eb613cb2a60b0a3f852fa78942e2fd3fa16028237098f769accd613f542ca94387185de2a647cb758310f69c93b6b281f2315a47188d5b9d8f16b3dbe04ecb4cc53fb6078be38992828a64d7aab40e4103d2a656da24bdc0075977ad8622f82011435f050ac8f9e947cb54a6abe89af0eb0b9f654d2e7c2cc660fb7f3bc2e577c3256645b27d43544dc0086c15df556f2b97c97107d9865c3a0c13016df578182f24ba307f2c5079ac087c36a588744c23a322a7ebe4a3e4c7d01f7eccaed7daacedca4e01b47c631d84e9e9730b789c57622501ad648a2b3d48385bcdd3534f456300820a8457f20051d84b5cf978232d2f0c71a9d173d89c71a6cb799a3ebc7282516fae5cc7eda21ead7edac638437c4b3027e9f8387d3a8549363bc6b8ee5b59bba7b5094cd6b2797cc0b47e9f03385478fc9de48ae2b186bccb8ef2231a4192efc559423128cf85363bb8ab5fdbd508358223ebbee8303a78be23ab9b8db77de115b75f21cd3e1349c6fdd8217b208bbdf43a5c7f57c7c4a5081b4524292149a8179bb39a7ba2716b37dcaf58a844d55a70a898648d5e8057988ebf9fa0dc3126911d5eb1b8b1a1cca7a469420981b56d466164caae9beb8c0fdbc90496f33395ab4c3de7a98565282384e192812f66adf1ea04548d8e32a4a0a84b8615d6d6301c701af539357955eafbdb1d82660c47f9792b6a999e3fde7f50d5e4a7120b708bdfe9f035e322ca3bbe2554a9ba62c52d6553e83d9adaf5b311b857bdbee70048222f35ba6f219cc6e7dd5ebbb03eeffef75475131f4aeea500f7271396e728bf0819dacf37500b4c64df73d1b9867d9535e6a290282d6ccd272811dfa7d435026eda4325f956a16b19b4d439408139cd891248602f9b07c8bfa5aab979e911a030899de8ea7f17410b8cf9a34c6683c16fa727ccdf1e8389e0db4a6fa3787ac5c044772b7386c531a394c691cc71a4ca07405953201308723504489e9edeef22cef82d7e9db16b3a8d91ce6b030c2e05d35c7b7050b2cb5376e507f13b39f74d9edd1c2f78093b0b9afb96c5c6ff44fe038f7cbcd6414bc1a721181d59e93ee8b3c4e56da0e5abc8906ab03f01e0ebbcca990c473ea4deefaa3f25c0349bb98df20becf945284062b969d18affd93b1232b0ab5c44a4db4bb89f19ff3fb05864210c0566a2696156006232171408e09c0320e12aeb34f5b75b09e3dc6e637635cd357e015d7ebdcc50e23c03b4b02bab5e42e074ed80ce550982842ddccc10e5a843a4cbc71ff982c210f7d386f60f0ed58e3dae42389cad953aa67fe4e0b4ffe3858b6a6352af75ea65a4dc536501a6d79088f43952a1b52c37d764141affdf03c84f956e881a0fd783c2029dbcb8216437de99a886cb044dd4473d7cea2aeefb07f377b166243bf3e1e2d46d0d4c2920906d3ed194fe33f11a185e230622856118c0edcda8236b37fe10d41c33574d51a9190f935c3f7a5d927f804a68f6d4e5439d38d041bbff16d3c9ca5d0472d42ccd5b099822551c5365e07caa7774ae615f6b09942286b621b1fa8ac1855d66db532e0f567d0d5f49b68ad4b1999b4b47c05088eec0c9d95e5a770ba9abc954117c6674932d6ee67234e50e074e00814614a3d67f1acfb69a22d662d2423526b89c2d243485fb48ad42e0e13bc5416ae0c692007994f4e08676e87dd4b6bd655213ca743fcc6edc9d3d3235e62cccc4260928c33cb591bb390a160976f800d1991b18eeecfad9b411d96306b7a06891f0cb6b7ed760f76421bbcb11995b15f4e0368e3c32e3849137003d2af8fb1a2f927d28f306b113096e71f0c8011c1eba609289319d2953d7df1e37e08a150d9f3a1b6ed64a8b9fc2f248742950bfb1686aee6cd612088602a67708cd6823c6103b6ef3009f6746f830f0b11ee2899a068522660d30a2c2e1756731ae62338a7dd838c7524b38d7e05e5111222ddc61c815ea31ed593de09b225fc6c14ff565de4fbe97b568addd63ae123128aa0c359c2e4eac06565dfa06e44c6f89474508499b578a978903035e2e53627706d78f77d9c45570b040304c029e0e8771da083e5bf88506d4ebd489aba9b21aabfd4588c951251552a9cd1608141bee7d4e62f7741bb9b6edcfb50a70139958bc23d580c03697fda6aef932b363e621c8eb12e078306801a4d0cf172aff583423a86dc213a8f0561a804767b0d9c3173c6305df725ab41683d05df6cfc5072de6cd3d2d651addf5e76a8e8da9f28756f237a77741435753e9e887d461eade37aa6940e169b093d773d111738ab6bdd5c971403002f5f49662e7db4e9f3c6ef946b6690381c62bd42fcfd3e9c94d098063a5f81d438c5cd322e05d0141b818a645b26a94afcbdf91b0ed8d716c1f8b184ba2e527e0b8661da6e0d6f8e1464c5cbe50adb3b370e8f610a65427d741ebbde65c4e01a48c8f4c0ff62dbed149b615ef022b90c963b9f438a33ba416a06e4499d8e53c8589638a9c37cb23e0281c28f42384e36bd1eb07b731cd2e264e12355af1796470b72970487234dc1d8b4875a1173fd35876c05b91331f0d8aeebd57a677059cf9f415b8b1c76b0a45d1f7147f286052351209f2d7c0b5a0b34f6a42b370e48a468b4a73a12a2a95b81bd0a1b1c5236b868c890e2dd6ae89088aaab34a7487757668167b11b8b0e362959b37a8bc1f6242839db23484c8def2a38fc24757754e946bb4d66f1bc528c366dfdfd480c9bbd0af4a78699d8b1aef05a48b1ff2684ed476452a3d195442ba5b260e71f99859191e086b248638b4488c64143ba5883ca4ee2d57457fc2dc616ab16288b050b2e15ee5a744491f06ffb16bf85b882629162b1a4c2bb253564e8e6a13f2779b99d85c858745848f7eda07292548ed01536d824437637ea24986b5d516b71b6d85b70abe85401a9f0f45305dc32374f47480e9af20abe15a22ba857a0592c2d3a16af05b48ab416260b9d85755a74a41bca57bbd13c1d0eb9a4953bda026a7692221b079d14e75855d42d9a2d90ae85a1a11bda721a15889e4a2226e906bd5106254cfa9a3bab627731da57fca64154df4262b6c016542ad215b4a8e0b4b809be491b1eb7d00224647237f624e4ad5ec5bea2c3a21e0ba85124ef358e1d12841bdde2862e298936a805540b297b378e4e92ca41cae27616d2271a478d04ee5a2cea15e62b7416d56da1c68b7499c6412485716d0bfa9293b66cf159d4a8428dca24674d6905df0af112d3e957fc1635aab0414972d0942d9a67d1214662deae6f01b59fa4aac68126dd3859159fb3f0544bb2756515388bdd58a4a79d94745db778f22e29b9452b2e4b5e8db798555c5be0a9a8b56055f863d1a97192321b87ecc1a879e1713d15332aea02b21a2137685e2149c6e0f2e01da17a4a4cd4c75d4220507a9215f1d8916f284a72eb78317667b5605b8b8e6187f94a7e7a1a0788168fed7f3d1131c986326d0db4a21f761c9149b8b4859652f246a782fa0aa8b924636d7605bec5c6a265f1b7105b34c5e2069a24e0bcad40c1428d6712c1360e3652cfd9cee2c63fc9d72e0d34e9769bad287cc5530dc96e9355c0b1d054c1b2f0af1859545ba4aaf065491a27bb462983486ab89d159f85b845c52265e197161d1c2418dd537312796d1c1cd2ad9a0d14c9ec5d1a72d27fb71a9d24754b5b3ccb621bfea475933269b959ed0f82309220a2414593a08deb9093bc699dc5cb2e416dc3cd305f4742724db7e8d893906f835808f69ae4d5f88a9aade0b890beddee2d3a649380e94ea82321ba7a85eca18d027276d7989584a68d83fd5e4b81cf1a9914426c6ed60aadb509b6cf0f772a10f1c1a332a30d15dd0ec3396877cfb0224d9d5f05aa16b54f2191a071b890fa9ded4bd000c289b87d3dc9f066839d945f9b7e851aff24950d5d45bb0adf626ca9e17c5f61c34752d1d02db0aaf02cc41694168f2a750c1cbe2c91ebb75d54960babd6d0fa307015aae2bfe80bcd4dcbef9545ce8d82d2f9780f5cfe02926333a10bcb883ddc716c005d7caeec8480216844abe5c1dff28dd24b1dc4a7ce30c6eae0d02184106e595ce952ff17f34fc491ff22b700e8e77539dd5f4f42a5cfe516ca700c7cf6ee5de4eacd224949947c3a41143494369ddfcb1d84e93fc6f9187baf5053b5fe42c820e91692043e20ace6e0761081bf8a536965ccbc79ec5b56f921e3744bc46824c710fe6b801ce303407ef7f78835c8f0bda98c4541c1ec9d9922df90876d5a03b094d5388002682b5f84988a40de5c8118c44162bee7a13467b4fc81f3e6da5a587887923445c2fea0b5983cb1a141fe2e4717afc59a13ac3c5ffac785653a1a0eea9f3128af83d290836c588693cccc699939e999c2a457fec8f64cdd4618736f906d462a3f607d814b5f81b3f13d66d59c0d2f1a91d402d47b1581cbdef453c6c586462161351a96a56345cd4077f3750d9a45a43959bc64fe9bb1d0a0929358a9871944cc804bebd2410a4e91acc020acd57ea716fccac0e79c284aec52f43dfdc42a01a334746429c49bae726a347f282b8eb46eb6f51f54a298e72a4f213e7b80a10e80075330fbc564f8df3eef71a92fb20415b902cad31bf4553a84c7f160a1ddeb1deec17ffd59a0117c33d2df4602b111c80f95309a284960ac0ab6e6f6aaf4daf2ee426c5c6408c1c87c05b24421a481f897f259fe1a9e72aa87d1682203d6ed190953217041754e9092af5182c74311809c27e1be9a67eb506b5b74165cf173755817819e9023aa5e779fca90c7a8c3197e3703a750d5b61e0514bf0ca3d342649f0ccf69386803d54fed7d90858d77b2a87051b40535cb9ea3b544cab124cda817ecb738bd04c8d8e50d6ef0d1229ee3084b517fd40b89ad2829f18bdc179f82dfdf2692102091c282df3aa0841350eb3c71b0d7b2089ba38928a1d3e2ab076519d90666079dfd41f65469a0eac9e3073d6cb3539dfcbd128bfcf5d218f40bec2545785a498910641dcadfd6442828c9847741d6ac548724a509efdf950fa603362e126cad60c78231eb6bec6c0b8a52916358a5244abd7078940abde6d037730cc6f310f113bca2f0ed9807a5bad2237f6da1c266c45c1f2e4b693d7f49d52afe4c672a8d7ed506ea3d1918a122c8561816374d8abcd98467c95ff22c43a0ccdf87d1e2044f400e531fb7c2e2c32df694c96feadda4c79dbfad6645731b3677775ee846e599ebc14874aaa5f94c1d21aad8566b2a405c2fab6abe603a73c6f7341e48b73052cc376c1fe8e617109daf7378c653df7b6b8be8f433713c139d7e66305a241828029bee1145465de43e5308ef2149cb1909a55618a700871b8a767f07bfe08ea5fde832cb3fec1dac4c1d58ab8bfb416b82a96d147ca0ce8b45de704ed47723b8483166f748b2adfb4596f1b838fa3d8c0c4e03fa215a6a5c4016d6a60d9d35c27473b419ed92b0dd585d575cc045bb3b66a6a966ac657422f1f607453175ce6863968a35c7bc9777f1736cbdfc80543257a998c6c1e70b2088150167b40dcbc088ffb54548c0426b5434b196104224b27b73e50e7e0694068c06b387a6ff6b5d39ede0120ded1217e4025cdfde79e7bd57c313fb994d3cafe7b3eb66d98cf69fcfe769a0fee49493afb97ff257a7f31ecfc907777017447b3a09e8ce96656fc3352ccb762cdd7b6992f82023205965add5567949979aedafebaa15c7482446095c1fef154b75462a670d30100b707dfbdb7befcedb81a2684a23608661da73279e9e538b5dcde7b70cdb4e7610dd79bacd743e45c6d7dcc7fe3ef6323e0b42447f6474309e749e871b3ee982e84f27018d3ddb964d6ddbe0679d0b5fe0cfbcd2bfd4e17ca832778841a25792945242e8c15a83e8e936644627a57452297330d6f0532247d3b711640459e263cfa284c408c402ac816280e13f9e0fa36108e6ff29a31094524aa5ec48d99112bf863bb2133bb2d3e9c80e9d9183e73bad156a6bbf73e7f6747d1b5ee3679226c9c1c979018e86df115ce8794416a84a6107ec435fe1362cbd0e4499eb2b110132ef0ba537233b09a597836d605f82a406488aa0ecd390c9477d1aa9ebcc6a75ec7134c006ac66d96758ad58ad17eb30c730af8efd25cae8a061b3629473aae786ab972ed41fa5e2ea412932fb5005857535488fc2482f3e8db4ddc6de6a31cab7e106e952ebd3408d7d2663ccda6b91ce2bbdecb34c6615467a18f695824080af8cf35791527635a3d169b41be7306b902e1bd7fa344a9610197d128e066458f658d623eb2a50c56ac9e751924272d329722252b236241e44db0f1d7a5400070ad8e00d3f56a6693283b244b33b9d73c648639ca50f8710b0a4b6f9670f8a19f6fe11cb8cdc8f1decba1c12332c62d8e390731c026569db7248c44adab36c843764c5c741cec49fc1a40d86fdb015c0210c1c9a2f6d0858acea2727582119a2a3151a7e3350a233090a02efebb307d7001cd24382443c7d8898e290483a19754087fb2e29e0374060fbd706e0e8c131e007bc43299e678c9dc7a6cc3edd8e272d1f66dd0c9e0e7e0f6809ecb903dadfc8d5237f2b9ccddde98c13e74ece39f3f8f46d47a40ef201d3b7e12fa11c66e86f3af3c55eebe836a3514ae9e3d9ed1f7a8a74e73dd83dddf6709b50cfcd8d5c1fb11c922e565e1b3de07d658a3fd4fb3acd349bd97fdb6143362b64816ffde4071664f271bfde4eea0c440df2017bbe87a66fed3cfd3bafe766cd1f74034c3f43e168d88713a35896659e14fc359eb78fb37dcff541f4bd9e4e0ba2b7ae87a6350cce0dcbb3466b43f488cf25def8d70f89727ddd66eed77b6fbc571663846f7febb2eebad16e3331deec6117df6af76f47358c30d26d067617c2ace3af9cc10e34c23ff4868ff76f950cbe6639140d6dd6304809de346a682a3d4a51e40bc4d765461878c3148a7cb1e12bf4e96f189d27087bfb0d506511c757977b3dbd386e246156d870830622026fa892807471678900e7cb2a2809867f63fe0f89a2e908df6197b197298375b75215d097f5af6b5f7615d65a3fab7546beac9dcd3aa8cd8fc3e0388ee38208228319449a734e381d44c2fbd290906a199d9041f9c560a5e10783d60703283e1920f1c9c046d3344d73bfaecdb9cd6079f7d0b40eba600ccb1a6e9d7675d8a5fdd651ad7136dc068137a7df632086fe68f8c500474b193a82446e33f1b71b20206a56b5209abef75ffac578d8c7b285d005d7c7d29335a39c00cfcb04064834fd0f06456030e46297587aae49cf2776ecffd2d05c83d5dcc79ed28c37c7cd88ce494e079c9c5b9b770df6f73b62c9114a7c5fbdd1d01cd8cbefa8be179cfa4a971ca4be3006662cd6486cda1bf5674c400e516bdf74c031c6d0d7d3941cf192ba6e396e1735d6499dcd8c074ce9eb33ecc62d47d431cf28b0cd8e5991417984066805d8aa6c33d2b7fa1746b12e7c81ef753954b12d90b08746350d339419a804f86509cb0fbdceb3d3f303514a996be4cf0932018610c226b0b4d045601009709e3106159c101a68365a53024a410689349b2f6c401fb021c285920f054ff85280c447448c23454040a4a2117b8d5ec6d22ccb1b890e118b44226e3b24667c81771c423b0f72c5e3103006465118d453f3872254bad3f02b020993f6cf20cda8fc48b366236f0f9788a78b5b176d641cc91952c03bf6a05dc33dbcddb66dcb299dafd99e7e677bfa5bd57ee8acb369590f4d63d9de0ca549935e850caa641804c201de9e9ef3358cc26d1ad8bd7f5d97e76ba847765bd3527b0cf374577a327bb86941b4d6f5d074765f6236fcba241f018889983140829ac09b0bd5c0cda06174cac614f0e6e07358e54a803e106d4c30638c93870309992e60c2880d0ea49448f85c20c6870228ae26f3e1cdb2ee422d035a481cf9b2256f24121803b5dcf3d2e9d947d424193280e25b52848a1ac74186a3e7cb1e7c7abeec014acfa73d58512d7651673be4cb07e2c36a4dbe3ffd8cfef061f5852cf1bd6e3be84fe931de8dc77c99c3214bfcd9c4c69fa025607f286be83b01cf8fb376d85f9d0f0f9677bcf62b8d3356810bedef592cd1f1ab121dbf2e19a25fd0f09bc20bbd7fc4eb77fcfbd98d353e8e51fb5b3f76da5fa8c1abdbd7cfeb3331b43fa7451acfd7f7749db71df6377bdb798ff6d78df88eed205367baeda8105a38fd6b4dfcfa36ef48b71cf16b9dfe90c6da8fdb8d1ad283ff23d6f0e1d1f1e6400c225a0a9b8f8b2c96488144e6a9215d760dedb30d675fb36e7bcfd76e7bcfd6a968addb94d6ac5a0c080dfd83d3dbff981a731b0dee4296ed6fd7f9acc39fcedf4ed4d8b6e37aadc3b61df5f3dd519fe60fbe301893830f0cd4f73c90a92bd5326d47ede87b687dfa9ecfe85f4a61e729842cdb67ddf59eee3eedb6ef742a7acb706e3bead5a477a1a6144b927d363abedc018d5d0dad4686fb837cfd0877d435f2e9571e33d7c41df165ae21bd28a1c085ce1a7e3bf852e80399da87474f38afcfae88451aed15ff66a8a26b4817aae918a33b087680d2311a7e51883185165350a1614c0ef12164a95ff30ea2b7fd2aedd4f16b85428570d6802cf099c88f39e6dba79937a286f0696276887d103d3390c883d659738d4bf943ad13cb344dfb2d4a6cc62d4bd9344dc37ed3321df5319a1a5bdcf811b57dd011f09d7fa3e022cb2696bd16b128e3bc91a23d90b9b38fd8bdf72f1f71479681c49981444dbf6e9e6fc0aff18ad1d68f30ba10e4fb14565abee7687945ed1e180335cc3448b2afac7947cd6342ffe9f9ca20f3faf0a4fde716252dffd2c148fb4f28723cf7fdefdb8d2605c8c43ec2f7e1d130675f371ef46ddecea33ecc40a2def573c8817506e45f6faf9797ddf57fe4141d7ebddc41c76e6e39e67b9e578cfa6e3e3c3a03908587f3907f4d2071bbd9e61af9b986fa887ae68bc579832cceb72b6dbf42f1418133b57b31e6b890f44258d3108f1874cc33804061e010132c85f6cb090d57fc370d311ac4d025be5f68e9c663fefd995d0f72e10b7cd129339028a50b5fc418eecb2e47fdfbbed9bc2590b8e347d4b326c9a074f111415de02dff0289daf39500164238220858d090459321543431f283228e788208fe44160ec2e2cb8192cf092620216c35c8c125e38915dcbfb30726c6c8c20745aa9002264432d791219e40c1133f686330410c2300b1e4cb8115a0205c10164f50f104147a7f485be29e6409668004245418c20623900235c25dc171ab261cd724146ac25dc9022414911773202aa80b54bc1af231f739f18920831a680a1cf5c3f7dc0e32c1839ea1e1c784496754dbba941cdb77b24ea7937aeb6860a675fe99dc3a1aa8cd4ede9c66a3829e7f2bc4b61bdb6b52c7ed06a66ddda681baa647fdeded6ff902f52db6cd6c340eb3bf1f738890e5fe8fa92164b9f6958c74d4df0d7234d459bedb8cfdbbcddc97716a710c7d757b072139a4087652d319f59c7b071d1fb3f302b95a66185b826cb14e21c48350880349c1712dc0411125251d4c492595b17b0a9a02cb5905863f1f04043c5d36fd0bc65c3f7f8331765f4db9a8a9a53536e5661d0bd0d4d25f80960fc7f82620265f13453e269280a8c0842802153a40c2a90a4d44461441f235c104e80331f996c8d19a86df125c44110a45c171d1dda3478135e752baf41897c822091531c627e2d76f41d79748ee0de00ad4dba3e943f88223091270056a28700b1a6e392ca0a3f46d86cad8828e119492d261266d2449c3995134944158f9504212b49e5554b4195be00d3f1c11067e94281e65a7428385c50c26ac804a12bcaa70873db68d113e9d50bac0951890935a457a51b4042ce5298efc45832bed1d476a02cb3edd482279f3c6f5ed6f3652c21312356e94807764e9f83b4299f831caf8a194a45468481b1469b305f11e4b075f12221f8a043370dce348b38150d220a474e934082025384eea0c3404a3462bd8b7888c73043de88203f503f4a0deaebd0a385e4425f12607c6c41c0d7fa5e187e4d3d0090d3f258668efb074f11b604cd4fe72bb01b278763c2975779f3ea7bbbbcfbc64088c89930ae805cc74e9fe6eafd59c9ccf90e3e754a807f512221ef9a016e0a84142602d640efd968da595f4621645e0fb201260491a01de1247e2482ea44b2bc6eb772c7935429757458063fc8f713aa8088e9a158378b51b51514944c51bcfdac7d66694cb769cf4ead7bf3aaaabe6990677dff39728133f3483b5d7aaca5a63487a1587fd98c3f46d46be0713bf460d3ad6f7fe6e41e93a7fd2dd8717bce0052f785dbf5b503acf9f74d757ec770bc420063188410c7e30e6b87fcf832d2d28d87f3e9fcfe7f3f9ddb2427769944e463ee93e9e0eb26c1d4eb672028c24b630e20a98962db49041c3cf8a1b197b70495b5abc97991dc9aefe65f7b55744554a0f302625c7189ae62d79c8141df3a996db8d4bcfcfa609fb89844d777d0629a493529791629d99e708b278f6293d6099c3c4ba3d8b6827ed79b367f62fd74c1bd2d6afb986667d95b0eeeeeeeeeeeeeeeeeeeeeea89bc21fa75ab1704237dee94d5e1ab96ac5c26979303ff2d1bd1873dc3f942a19599fe5382d0d45a452c9643a9d6e6e501aa6345cb134841042082584104208a3a99583d362e1ac58aad5a7faa0c3b02e0e6e7132e7378c76c780349dee0d4671a9ff5aaae9a7f8ad538e8e7e92a393249d6489ca4496bff8a36e0a7f9c2ab258baba2c89ee0893b8284b27eb5235f2975608c763fd8a8bf872f839ef43deedd86ca4ca5019aa9041955d5508f87d67f88d0ff09bd3d400d4d334e42dbf6f017e6396df5c8ddf4f80dfde00ec8af5ac006c006c0c56c5c2f0fbe6dfb8fbcdfdefd7d7d337a4ef45e3f5b53d7d85f415d2d86b0cdb5863107be8218d7f7b3a7b9d71d9ca5fa6df0b7fb819dfed150dbd09f857fe4540de17cf9037e60e900d7065b83a94a7c857e45f5c80bc31c79237f735f27e8f00797b03c83ba475907f57f2bed8cb1b7302c89bfb00e4fd316495bc437ab67c45fe8521ef8b73de98ebf2e63edfdcbc80e32ff4e42bf2af0b795f4c236fcc710fcafb6770798728cb57e4df16f2be9885bc31b742dedca3e4fd9e8cbcbd95bfd4d027ef9087f3f6feb94ede9c56b393fc5e8c39ee7ffbed6db9456f27c9f857ba267ce26e1ee5c94c11a5222aa2222aa2a290969928bf17638efbf7bc1d9a32b3e52fb06567cbce969d2d3b5b76b6b4cbd0d3bdf474e9e9d2d3a5a74b4f5abe94a12cf9a190e7fd731cc6176569995af27bb15ac22af6254fef5af25aba57c7ffd25a7721cbbde2dfb8d2b1aa642880121954d91a49bb15260dbf2a78d003d0f0ab62889e3ec0974bf2398231d7378142257173e46484898892764f11e273a3b9f495ed25b5b478de3fc7e1f936a47f294270fc991202bcb31569a4fdb395ffbd1873dcbfe785fc9de42f33ee4b1ad92bb45f293c60bf7a1b991a894a20f07ce81bcd7cea49afbe27bd5068daed019cafd4e76aa534b26e2e808151b4b52a74a3e1a457ed461321cbd4ee3663030f21c021b8be427566350cdb68aab6d9a5691aa66d1bcd46a3d1cfb4281d4e8a423fd3b48d066f345706d176a3d1f6b30b5e515e1dfb347646560804f68fd275901babe9e5ac17d3228c22c628e59c935221586befcd02c3b02c1bc2b66d9d0e0b63fcf91821c6181fa27c4dbeaf89164d92a0254a1819880a4d4c4d4a4d464d8468f99a155e80209b30ef2ab47f840289fff542fb472d80f8b09a066491d7cc368351a280f76bfdd265a3a878d23d8b5fdfc68d35eff67dbaedb81ffd47a40fbb1df7b563ee8876dbb1ed883fb7990b84221a42adbeed229d3ce2fba34817687fa00289861f93151324f4c4999c3e3aa0b7f3f0809e3f8ba8f53131c448a9aa5841ac06d3112bf615d36e482d371d396ebef7e97dd7108a0b97a4e45fff9b83da94fb37a496fadeaff7ab2a0b2ea6e06f6db4fd6bfffa53faf573f2f9601928db8d98d2f7ea6a3e9b8e782fae34a7607f1fde90da7e26b50db7186a9c4aa8061c37e0d043071e484490481729374dbb2e0b1a7d5973dffee6767db9e9881f1322dadfdac772dcb70f377cdd48b3cb19a1d34eaa9353858eefc50f7406371df0ebcbfbd7efa8f7a5adbe1ed357760ac487d510b2f8fff0616fde7207b63be8083fbe9441151a6ae8032db2acc3de359c61d97f5eb8c67f7ad43e3cd2ab4fb37fe6f9c2b9df49725543a5f2d148499496f42164894fa5921be98244a2a412d7dcb3a9cd5cf8a1f2e6fabaddf7a7bee9f09f28e92991dea5a2e174a821a5a13fb354223d9923064db3bc919efc2b07aa638eccf117c9922c95cf0ac380670481cb5cd7e4bb5fb1c27b4f862a420008d100049817603415365c48e5608283c6e700950d29aa08fc0002a0d5047c80c30c96057a50010ec7c7120cb4d0d2c0143ab0007384f040b482c80729462823213e920c12113b289d948c88c2f4311dd1c1099f9280e2c67393e4095407e5440e525b4a0a273eed63925265aa2b9a5861ab58042622eb8aacb8050e702e4e1790452a69d95604e30631a7c61c214b88a8c887247a3485802c92e42425608c24a2244b368031d208136491358031f20864912f4fa016de92c50a578ca82428144a060a85ba99567bcd155064b868d6cb29a594525a6badb5566badb5d6de7befbdf7baae6b659bb9590dcd4218cd539ec49338e24638111abe0b015f9c04efeab2300ed77a99e389423e42a5be297292936826d54cf22baf1051178ca8568b063b08534478fb37450a5899eabdf68331ebf7e61b3f18b3323aadf776d1fab4700b6b5d2d7b73ee07633630f7de5d61e1d26aa5f06f05ff50fcc3fc73ff26adf6c2dcdddd7dce39e79c94524a29adb5d65aebbdf7de7bef9571f2c10508f907533e7221607421b79045b802bedc6857d2a43a9d4ea7d3e98442a15028144a2412894422d1c5f2bdf7e5baeee9c8e9743aa1e0e0e0e0e0e0e06032e2cdcdcd0d2a090a8542a14e74f049abbd3f4530e6122212894422d1754d5aedb5d65a6bedc90763d1462a954aa5523268f7005225857422491247347c69047cb121ab34e1dc16cee1443ff248215942a53ed5ea743a9d4ea7d36ca15028140a85b2015330e5163e41cbf7884422914824ba17c6ba3eabd56ab53a1d399d4e272c4d2693c9648a1e29c327ad28187393a05028140a75eff549ab5dad6aadb5d67af2c157d661060d762e11c7244b42481fa4103030f8710bf8a283539c9b8bc229ee7b95b772d6e9743a9d4ea7d96ab55a3a5c1b8d68f91b2a5eb5544bbfbb9528128944229108bbe1dff77ddff79d8e9c4ea7d3dde44aca38f1495b30c6befcd9c56ccdd66ccdd66c596bad4f5a4522914824a294524a29ce585edd7c73737373731359f10a0d2313299cd0137e4c02bec49b3965ea15e11147fa9267a2acd3e9743a9d4e3757689a37fee0bf6e2311b47c9796cf1ab1930fbe2118ed445997c62ec61cf76f73cc228cf9a42718538f9c4ea7d3e9547355d55aab4f7777779f73ce3927cefb8a44379b4c2693c9648a38110746a3414b11d5a049533c4123221150080da30f508886af01e832f05e8c39eedf8b386e8b80b7d85c176068f9d7105a7e96002d4584efc598e3fe639e2d8c05638a405994455994455994524aa94f777777bf355ff96693c964329968d062b414119671f21f8cd5128c992fbf12015faeab85bc3f9f1933b26ad7d29c7664473863d973cd1bdbccfa9b63a694524a69adb5d65aadb5d65a7befbdf7deebbaaeebba12a081c6c03156c3c8b0d2cdd0f0822f9e87efc995095c91dfb9eef6c1da8cd5aeaa956b75f3f61eb48cb9aa9280b7ad2a140a8542a1502291482412f917a38950b375a2ac12680c6c47f762ec76a4adae2a7fb97756d5acaa595594524a29a52ccaa22ccaa22c3b5bd7755dd7856118866118dcee0559ae6b2b9d309a7f17d23882e3db140d7239c502755330e726e298320f0cdb03ae4ca6a281182a9dded91b0840865d777636070440338f6b8185155064d4cef6c0ca03e0051768a4806c67ef3080154f0001884105867c3b3b88ce08105fce11a484e19fa6fd55c36af7b3db712ca7f080218dfb46a33df5a4e730d33fab95baf6d9d4bc6a557b6da3a1da671567f0eb4643b5f699d5ae4bd3a457b5cfae866197966598a66d34db775edb681c4689cdce0ed2e9b08d46cb343617c0c0da6f345ade6e5c0f6a1b4d8597f63664dc720a10b8e68dcc8fd8a6a1f7bd3a65978002a5962204d31aaacc5172c025432fcb5762378b687f6aa2d5a6ded044ed1b85a4fdef4613b58d7694142178e394486f8c85ad46d8a37294930ff6a8608ca5b9341e8db6af700acac40ecb4b1d969b3a2c3f75587ed361a13aac548795f2947c85757170cb53caf1945ce429f9a8e4248f4a9e503c2a7923c3a3429d7854afddf3a856235f712ccafb4958c6a38c47ee2bf795fbca7de5ee2bf7955bb76eddba75ebd65530663e4e394e394e394eb9e314b6f2421eb6d238e52bfe598a0deeb05625edd153b272254d2aedd2a31a69773ca21127de4c5f4d195bd24e6dc9736cb7714afbd7141bdb6d6ca5fd2b944149754e9a64584b7b8a10bcad29e5071cdf864c1101de765f6bf297f9fe79db9376933561ad784371561f4a3422954ca7508ed77a1c8e8557572533a1359d6e50290cdc8846a412bd41a5e22ab252a211a9643a95ae54b94aa5ba1d9a8d4c87a9e2d21a6802680ca581c2d097df2d302673794f86972618a37d7c082f073d027cc481315b0cbf5bbce7f005c0ef160f761cbef1468719bf5b2008a6401ad005f802e47eb7e88ff7faf3c1f0f336600cfe78618c8c156a48400c0d302f79b7b82060860318a025d45200961a2d0358f104108016151872f72d2fb8402305d4d2d2020b8e72b24287727272727272e2a493936ebb103abe7f1225fb938e7eada22aaaa22aaaa2fabba5d3fea4ab6fadb5d6dadf2d28ddf6279d7df9f7de1ba28fa8d46e97243154430300140013160000281008860322c1609aa639a22a1f14800d6f8a546a58389288c4491083680c116314000240440000640430180501b8b2935b6114a098675414a452b03a0b9e18d70fb96bb191ec9d658996b6ac4f2cdcff62544b18c96e63ef707a2f08fdd292ec19ac8f873cbc63be8814209b51034ae06241c526b0cdb929bad1e04c3fcd9d14c3b37b991eb48c14231864be600a5e8318863b747faa28fd6ba2c7e7af2ffde5e5727a549c939b7bddcf80af4b4ad1651a2923fde6e5e7de1224ff86fb9b72c63b59dcdb174d061a943ffce41816c6a4b6a9b1de67a4816b577a99a59aaec28750ff8664e90a2d272a119532cb9536eea7f1ee3708ce6cbb974a6c3a19f771dcc3db92048016d6a8b7d2121369baf5be992c75c92ed197f805774ddd359657e6e5be7dac1ad96acf34c28aa8ddd94bc303b5937f68d245d5e4bd4bf1d662a1c4ca3a04b10c0e2156ad21c412339458118626dab7504226e5866dcf88a8e1f34a713eb926820f1b9cf9e9b7047d5c8330c3e9cdb2dca264c4193530e1c74ef4345cb11d6f2d097e29d298f00bbfdccec39d34c4e5f4c801ae2fafd937f08dd11313aeb92b0dfbe3662b96c15cde2713f047a812088b894cae7289cba7489f0af661f348c53fa02adb2fc727c51e714a2fd6804445cc261434ae421641a0ecc2bdd68cccb6474389569747390d0ef146bdafc2acd2ef012a7e1a6eb8d936712fe9927870910590ff096634c566451bf876c2eddf0e97054565235918e76406fc905c1505561b4a4f24acc40935398376901b790c120e834be5133ccee9557670a21483f7f32921c69b2fe18920cb52c6849f29cd0f302caa57f29aa2cd7afbd472de7689000aaf96e533ac99914fd5801a27c4488ea7113da8cd7e4ba5a269a1dad664998e1c621c4cac2030a4517d2c41637d7516e4808d3088c80bba387fa411acec3b9c104ea30c4682d5252272838cdc86e04f72434187462e6aa0a10ba62759e681066bb84bd695034b8077bf6127c98689f3903548ff1eb375cbf6364df2c6668885e1a68999017ceb24abc9041cffb177020e08c98902c923c03485993a13a1efa1ad3cf5c50814f71e32e78cc03bb43d43932549a9d55d0f2b59a080a4c304b35e8dfacfee6cc04e0f570d34afd0fbb03ad0037eb06fd11f9339a999dbddda73ae7272be654a302d0a71cb419dc1544a543206258eb09d04d31a4cc2c9341cd030c58f2ed1e8be1c612897fbda7f1e6fe4fc721d967e06fa5fa38a5c246d17d83dd591f7c22456ddca2faca6d51b824194bcc87d188426d68bc50063b36e95515e2ee7a5dfe4c790bbcfafee7732482ad7eb4902aa68f9c963ab740d504ab092e2a1e46ddebf2f7f3db24c2b9c66bc7157ee1eb090a681c58f1eb5205804d11092be56d55bea4206e4b00790a6db9a7b1c153105229c71e4f2f283f8c491ed6c0f0b0c475f393c7030384ae713577df81156044bd152b3166b2582da72c8dc09a471e6a49330645ee331d591af04759014f2edaf9685f9eb6a3e6d57d0c7371054482adfb1ea77fcf65e0e93d93a00c80926d245369449b29975b2d11b654fab730a5bd973ca2133f3ff0f1a35e50800b0e5e98468a7891908d0dfb211d93bede1c003ac2e7f821effae34bbc3f12e86242a8758f6dfe12c2a625be165ee50ef158b1637cbd82c49fb3c0fd191fabf143405f141042448595c4a82324e694a804b3e3da92f426df221e07a6765ce34d78be2c23fbd1d6fee39907ce4d9070131f6b376e9c5ae0837a84f8b3d0add3f232568b5454a9263c919570156dcf1f276bf25d1283603c67e9a4df2872df3a704910634363de75eebd5cb23e4f9bfb2cccf3fc2464a7f67587b3fc79a278355b49615c609cc726e288fbc6a5f514e5096b9c1f3c88bd592734399a8139c59c2debcdc5891f826ba6361e97b533f160dbfc5362149fd2ddec85a04b82a4bb6c535ab6bbf7839ee0bfcf0394e564b61c46a2db0acd64093d51a68582d266f1af8de16514cd3d98e5c74c60cce3431f620e8ef99959d76beeb3b955632ec7b5991eb0230702673647503bbd22b541df854c61936c6c1f9527adc5bbf5a66f7f9701ea375450f8c7c1a6fa5418d6d3e8d74d2bc97b1599a4cbf1ba475356cd36c7935f556862ec3d2e532ac34ae87bee0eacf82ac7c852e5ae182bb1ef7f364fad7014a389d025935e6f97b82608c01a925d6f8a0c75cf9fbac785f916143e98434f166fd74e68a6137f8ec97139b4ede4d7e3e05d26b7d71673d3af7d553163bcc6dceeb8a72272f2502136332fdc031946690a86c4ada129c922f089722b0125c4a12fed7b559f6cb5e77274411b7e0e1d2cf1fc307c4124239805882dae83ea834757a3a256cd63adece2c12be68c900abc504a4ad2ac8deb20f5e562dd22a43ebe98921ea31561608a5ac52d341e312182f12f0af84788d1a3778d6fc744d9a67c23fa9fe4c518533dd0fb9d26191384f200f78ae6433d31a5a333740a4f7961a79f668897612e8d2c8c3603acf6ccd3041ad7293a687ef00ec0c7b41a12f074ec9913e8e9fdb956b722eecaf532e80500364104ac00c428981eb8dd7970a84ea85c6550700650fc0dc63fe8179dc01cb8f5ceadd4b664d85a7e26082255b0b6f628878017c714d4cc71bcfca28d3989665a63bf31a1cca06a28f96b0be8fbe6e30a61500f99c031c9e58f554725f18bf6cfdc83e62d9ed6fe6f347b25a08170c2573ab8ad77ce950323e4ebff112743cdb9ee9de7c46d69dd2cfc761921607aad3d4345d4018cf4828dd9c10070dcb0a0736c28cae7d545cdc9e7b5c8b9a35357fe7641fd63db71956f5c044886ff92582c82adb6737d2eb23b63ad0274db685ac2a2d59f641d9e06b5992bd50999cd16db1a79fb102cb5997fbe53106d04e7ce57a62c8941b62c96117442aadee7e7b3f7b45135156b41359d55235ba3a795fc1dc86a48cbafc482ce73ff694c59990ce516cf9691529fd754d5630c3f285c74e80519c575d02b0b63515a991ed13d3bb79cde84e864ace72334939368fe1c2cfc068c4383d2871c7c0ec65a7042b504979496bf4ada18f8d0be97aff1c38032bb00abc905694f33deffc4b04a0b6e3f3e963a03c8d467ad4041cf87749068c7d70cd39090f844cdbb2517bdc8d1021c09193458e0cf1d39193a51d39f06a51a4d96d9ddfeb704108696661330649adabf924718cababb11e716c53979b2bf65f3b1e21f54aeeea638faf2fb0f6db6f388775c3f2cc0d8cf6bde546963558e3ee0447376f4333728136ba2023a90e299805e0b8b0a0623542a268dce5c25d8e10b4750a9a6bd5acc434e6b0c699d742b14dda9d4daeda58b2d355313253f9c0c20219777360304f088ddd074460141a8bea90bec774eb548b37abc94a69059d5bad41aa49db72102b5f508c2ea6d2a685f3cd4574e1aca29bc7adbd0c5a9c51422a0318c2510a8e64ff4a6618cbf68ccd74944ee0795a16cd849e3658034fc82408bc832516d788845ec3218f764d15f6f35e637a6ace2692c00a071fb8b78dc50bc63eb489affb0823e4a341d4d8ca97797eeb400124e00bc1c6c80ae6457078742a71b672786251a6a875531aa0d5a3a0f4fe1ea797b7f0134a786f1b42f7c64745804b408dd86148be7d8ad0d6d44390e8cc94247b3ba5627c2eadfc94433e314ba32c7f4ccad0179837015e82542bfa911740f26daff0f92a9368e3d4682a3bd59d90075878f6a24a0629e140139358d0a5e629ac4178bfa6602bb0cd99c5e51f5c390e4e8a7173752ed37f668c980ee44959ed6b286fc8d3a9f56907980b33b47e31630fd25def6324cb01a37008983dcc1f20c71de13cea02847c5db3196b172e51ee01e998dbb615a940d3dda7e04319d6d0602d7115d8d2dc8e910aab471be9292164dcf95b655bf98450fd219ad3501d9300246deef30da25c5d2b51d292a8966bf55405d5927c289572561ca2126062a6b24fb00e955a66401cdb8cbd34fbeece68fdb2c1be7f5371854da80d3532bc004c82558f404091aeca805e7fa3288fa1a9463d3c2f38b863d5111691b66eb077241a5485a49eb184819cd7584dfb8f6371fe19b7841a4816c46a1da20e2c79afc0d5f11981fe20dfc8e3fd9f7b07fe2dbb47056fdfd941c4e8ead7d8dcba9423cc555e182077caaf220dd3f2f49a91a4de35116fcf596e0543e9802229a0f9507581201dca996a755135f9aadad3aa2c5fb13a66e90bd6be00969a2af6e77a36266e861a0f363593765f7f23b0d07f02c3c01cb805caa210c01661eefc7758f60e496b833fb2f6eb597845d42f8e1c4e5e30c90023e51e39c067a34cc388223650cc483752fae0d7f8f133d2a735a6634652ae4673401bd0e2cffbf2bee506ce2658739d40c8ef2e9db156a135e50621bd77d989678fad991b18d57f4b8d2c6bb4c6bb0986686af376f4726d77793612dd6f4c508ed0867a572c01cddde8c80bd1e5270664576484e6e5bff4841a739f70a30e5e7364e187bdd3755a978fffa7049cc994ec0004efc2502f5a44a9cd402f3a8340a0a738ec38c3605e9428f4e9a178050253501e931d610d0a06ec5e14f757485ea9ff9d1abee70d3f2cdb6887639a8ebc54f9b04fa880ce3aa88f5cb6ab1aa86ac462eaef03d2f33efef8ac5acbea9366ea2760de5310638340639cf4037810a20a38db16491b471fe4b79d1eda17697358fc20f4bd921e5d510325d47fdc3c4ecb1305e7b95bfec4eb21899f9f73699f9be0b938a31530735c152d729dbd1e2d0357eb6e924fcf999a21a577afa9abb278695e82a6b930758c8f64c08ab7f5da296031b82b0971c4930b476c8b84230e1a1cf1ca65845760e5084880e5d5957bf3d45457f5ce1a486c9a59d9b6493d30020b682ab96d1308d91a1e686f00e51ded26375fada91dbf0c5dd25d2f95008bb0ac619e4635811551ff251dc80535ba01a449f53fb9702eace8ac609ad0fa8e04d2c4472bbdcfaf4d53a4424daedb56a4bff8739c263e810326a4c4776c499c06457ecf3a515a414b7e48310bcafd156ec4624aaad277009e4d6f9f8384a8dac43346eab7cd81b25046040b94451911fa2213ad354d3a4e27e76b379f0fed979ee48bea59df3e7e6517d35d68ce1f88879a75e6a50669c1fc1c4b7fce5000d0b147eebb7638ac95671b613c385cb2d60e0073c405ca92ee4162fcccb5f4532aba7fad621976704a96930705c9bf77805f2dbeca71b996c3edac5dc724af3e0deb6a6829a6ed6ec97731d345f72fe09518d518fd6b8c3a585c73f0b7ba9aa2a56fd615d19adc6e66ab2d35062345dcc87a7228c1d28aa34d0451948b53a53ab6ea47a0efd84fb81f3fc9090b8850e40e601e41d87f1642f2af1e1fb9d78945fc91bf237cde3ed63129e79bd5b4410ec3be685b86bf994169284bb7e48b44e65c62fb1ba8fe97dde0d1ad45b5cf7ab3fd851852d9ec873c9a991bbb3e519066d0f108edde2da17cc9096e204c1c644675c2814d6d224014045f9e4614b350be902866238313459082eb4c752d0ab8b306e4f62daa81a890c4e07373ef0ce8ae720c5483b872ba0e672d9c270e26a64e7b791ccf3dc86d2ccfd1ecc14ba3cec519c71789d9dfdbc1555aee88355b0b40d3384e88bd7cc6f0318e34bc52f137c7157718bd290fec98f904900736d81b4ff3fb389ed7ef4804df1c5f7762113188986ab74fb802ca2934193d3e2a1048278f6cfe82a148f07200daf0b8774030a0d7808c1eb96ce18db254ae8eb2742057e696c2f4226c0999b56101a14f5fd21da08a4e07f20de41f9652bdad33e1343a1ae47453716701cc88e83fd609724ce2319193bb2ba129928ddab7292110083409189b98a272a5f9173ba0b1b9e60371db2793d9820737bf2c7e56bf4a62fb69196f73bcd9b392e5a4977ae5125fede1a1d00a7a44d24b541b831b728dbccdb6940e843111a2bdcc7d9c18c987f7b89891cd04f670fe303af0752a7bee1c655ac9bca4e0859f8289f57a0d9bd5ad116c5f3561d4b0997e466ac6dfd3d47ab212bef4cc36b403b6d47713d86424874a19ca11b7e1ae1f1d5d10c1ab8df55b8fced81ab944339f7ed889f3345eec2f78579278ee781790db847f723c8f58c0f29b351a0ec0e72a96834494b94e04d18a842f0939a0d6a36ad788008adecd5ee81a19184326be2195946934a4b09fd29c844f2b5ee846bedef700040b00478b6e27549b038828b38cef5aacfd6b9461a429ba3e943e4ea025cf2eea80c5eeb04a053156cf252b7c6a421f801468253a70ca5cb888b6887d2248b35240e11c1f4dbea8c1258bd3210d4ca5beb45d58c1f042a5de9d5473d05f1902ed9383dba997b29cc264f6d8c54ed6610f083fb37b74491f1e6b83f2ad63ae9e5c85232ee8d4d8272ac25daca99b8ed2d366a6ade6c6f3cee072d8772a0a03159471984b5683574167a8e9e466735904f8be3b0a8888faa8f37d9d53c660446cb596bf672881343469c4faec11340f5a5e575708def15f93a4f7fb960c793d38bc960814d71c908cda98f4fb542f21265fff6961b2b77a70b8251144794741e5ce884f2a7c3f26f1417359688827d38558af784e29340676f738d4b753e496f7b213a80f39b910082d756e9f7dedfb64f5e0b6607f3728eed42964d923c7cedb4aaf7e412f76f9c44e22a70d4defc9fca35a1d3d2c241a517914638514d1adced6978707d8aec77a0b56883e9bc2a68a186429b807dc6a5d43b6ca92d674c5c0a4f19b0837fe3e0c9ae2fb9cafab62ff2f6f92efb88c3d2e6abdc3dadb91d30f70603882f5f37f4152f6313c98248c8167de28c9e899ee32ac4c01f60aa806dcc6557bde7c90222c23e698e105ae3edc3d0e798ee35fd650f48646b178dcaf60c76739131e03bf79dca1ecb156e76341a4c58a6998b16ada792e78905cd05b3361e5659533ad547ea7956438129a158a2db4a523c932d4d133e93e43476063f865570dec50fd1730b1719cbbc1aea08e993da6f7e17e6bb9bf7833e815c4534b40d2de069f790275f56e2a5d0c8b9299ca6ef5d9342e304145a138aed156975d86c9c0d185dd401967ca5359f902f44eeb9e57e5e850bbe24eb5e0a7a03b6902a822ccf621d94e7bc44d6e3cde9fcdce1b1891464200c1dbc6c52f72344f5447006e1ae437fe8d27b52d35764e6a1f29d04d82f4d52c6b21e5d2092946d538ebc18c1a41a3f0811148150af970f804c5289dc0ffd32614a16502708a43dfaa06559f0d5ecbf457e9368f54e64c9c54ab47395493190a867be40f4ce3ca68e044dc88fa5135791fdf112ed3f49620ddf39e3304e9d21756807b74e92f4da165cf7a1efa02e0ae87a894fe62908e68244bd901287451efc8d2363672683943dac3895877b7a9ee194c779e53dad76ca42c01721a9d6e8ffd8260eae459ab829ddb94c59d3ca9e67ec1bcac1b29cb008e4647c78f9f533075fc8603fae73ee5e071eb9cbb8424eb278d2a4b06a0b2a394150d75515d951408a6cd44294895768ede0a409754db8692377c0750dfe87c4a0cb53c4d76a13963447f81196860a965527d2da6d61d76e000e75d151f17869e2a199423aec14e87d555c185fe827b2a4dac71750c2b0b400be505f6568a5863ca0f2b6bc416fa05ec538aa8063b85528da316fa2a8ea3836121943ba8fb900307b931a614d6e6cafd4ead4a7427848624e8a9de7350fc354062fc7e780521cbcf93431008fa39f205c2ab9f9b6f408cdd73e703889f46f127c1cba0ff40a5eaee21a04eab4af7221da76354fc12fd4b880ad28f4c4822a562201420d4d293e065dcb8546a3700d2d6edff4f9d8a3cb54ba080b9a22dd7ddc8ea918715c5ac12e06169fc36259ca669cbbb58e717d432ae95ae14ab19c24a8bae0919d764b7090d9ea63148b3ae1eac7eb8e4aba6059c9cd24684ee14341f23b57399ea0c5317728d5f77435d38c071f45ad50d153e4045763bdd303daeca4d554fb0345afd00525256b01dd0c4bd96b9cd760795335e8a081022ecf1d78e2e491629e655dca554b5dfad6eefa3ef1ee45e7aa78d217269e93d8c6cf217a5668d19f489b1f51666c1a488f35f61871522c99f71bfe035f21a9abcf53afa4811f27d99b646fcd0e5fe207d4425eff2352ae42aaeff362a9e9b8121880e6b5bec1b65ea12cb67e5ca4e686c426229d2254aad44fa5d69bdfb3813e95b7fdc69c108453a3b3a15a248cb331f900ae980f2822c6d5d1917d5a55c7670ed97f87af322bf57b29ed05947776016e2d2c3f22fa8be611d521732b9558ca1ed3897075c81f89756cb61aa6a85400151ac7ea92c037c5f5de43022a252e39dc21a250482a190b2d946927a38e06117f95c5306f734c8b0b7efbb403738c6bace37fd089189c61d7cf8324a6a07108c81dc49858d66f6c19b529cb82c650a89f948eac71cc0fe6592f24f752aa25b002c7ae74859cfff9d9160bc292129f627d305cddcebfe397bd14bf482ba9c56278869d3d4345b99833426660cd58b0c4a8952304d1e91861387d1584f1e2c6479b2509179bccec089cc7c66024b500b945f2890df45455b444b06563c17c8dd9012dcfd10ce3e825c1da14ca7080e1f1111c121006a31a43a0410376b65a778a6820192c6cc47e85e7574572514650c5a50c7a1de7446ca289cb87d0edfc277e02683235de381212a1679e79316e231eb2bed0624a2a92c2f0532e4ccb796c9df48863eb1141ea88d6e22d40740d2f535153319826959d4658a22bb901874f0743d1269a8b9c8832a68b81aac9801108fee695c172f5c5ddde72aca9cec8ec18214b5b0df8b866a91156d27ede32c6367fb61dbccbddb9dd27d6a3fb822d38593c2723f6f2ca44ebaae772212d86e7dc84c3155dc90260b24c26d0aa8d5c2229c14b9165025c279616de7d5e8cebabd3275c20bdc2977b937e3dea9fa14742d0d025f1e6f9a790481c4a933cf3dd3db40f3c94a5181d1545c74b3c734b5ef69eda9a9a1b30fb201fa4b9f4e1bf0980be6a4041eaf099c5e31f045ba75f003df6a9520a25cf303f5e6e918e07412da37b719d5d6d9f2c68c5f022d85be6d8547fb9e744540d75bdda81a6453f73312b532b260ed2f3bf198f0e0118afc0686daec710a18225009f5384d4b13085a64771d4c4398e1ed319d21347afb8a7a84d2f8a644692c80df6ab1cc2ffaefcb8374ad14ae513b3da4d994c7002d1c85c790887a0774a078d95632c9266b4c82283d18801b2228d5ac576fe942550ee9fce8c185211000ca06ed0d31cfd6d792ec28a6ccb3b2de0a2caa64911f4ca48d5ea0b4a7c1f9cd31cd990bacfb84767ed278ce5c45fdaba8671bdbb78010bde0c263e9e9e845ec140ed222b6a4f3cf48d2cfa53175d3195d0b0b1fb9002094b7a1d17239270cc55e1771cfc373658b409294d5f195be8e8968de38eccfa74d4fbd3bd270190ec6bba79c9af64d258d5f1bedb59e493ee4a602519c7ac0a91c44686a8c0bcde257278c95183415ec99f51bbe8545b1a1bd51e313ef5b8dd9205cb4e4927c73c7952fca105fcddc7a9bcec432bb744c3a993408ae4e16830207818df2a87e2d6fab70319bb052d221c4072a448116b2e653340ed97371e936000fa9cc0ca5510027037c9b86666f1b4b938ef3e0fdcac5bb95618291be1257871758001b2dc0055c22bbf49dc279a11d0e05f6e8c812f3b4def78492b29c010e03767e67b6aa671a114db11c739448a45f280acb09e9924963e9f3ce31aa465772499443e545afd3c1e4134cb3a5ebb8bd75e9b44b253e19ea626859be5479950df1023de528f44ea9912b0587307f441d4d59377169c0b068350151f780d53be78bc6b73e9c90b3279b6d6fad6abed65dd21f968bddc59bf5d0c93e1ea9933ceab3849cfe307a0bd901a5b459ca14954a8dd8e0a5a2a1c720f6a10e3c1ac8530bce6bd528410ec152b981deec47bc57c38a8d54b889c2250aeee1060131884360ab4ecb7d10394324ccc7753a2c62611d62c30a51bf16aad7203d8682f262647a23a7cd7b7db26291bf8a947d3fe490be72326944593c43928def31d0554c49cc8ce240b48ab136d5dc735c872cb48708af447f5f7394e488edaae3e253b54bbf4192b33414c4a0280645d186a281d1b23a203dd1b507acb8f134eaa32dfa3f02017c36cad74190ec0dc17a5863b457d0dbc8e5c1d5817c015c0d00bc7cc1f596cb767f8d7b53b9d5dfc01adbf6b883b74f1e413c83c90c802be4c7e1357bc5e2eb0bef26e330e2010242b3d51cbe5242a355029984cecbcf32493f48874a43716bb379bcaf5e84168f56397e3a892d89d14db75bd0b8ab8932212576346f55399447ff01042cda16e132c5330709a839331ff8806eef84082c08e152996d9a9de69806d5c38918f93d5aab5dbb922e0b8a2cf826a1fe04afa0f26c52b3afb534671e03e4cabde8d99bd4d242a1a00004b49b50b31a8dc5185290e3f5e1242c1b6de1444697773b27225a5619481b67e291761354754d6da30ed01db5a8d355dbc5b4b698f6f17416c5fc167f4fbf7e6b1b53c5fb55e6e33cc99a4285b37fdd5706e0cc3342073a7943950dba7d00b64c8826e3cd545d0f38fa53da8cc81fbdca0ab04c0fc078b14b897fb910ca0dcbb6fd8e401ec6c14ba507218fc1f02ab3cc9de44bda15c7ad62f340d40e8f372f6ade9723858883acb9afc4eb60a4a0522acb5e7eb29fd20a0e1743a03a9f69733c13e4a5cbdeb5285813215060f250aabe37dd954261bbdfd1d9cd88b174b6c505abafa34d261d22a7f947c4f5459111eb5db62e18f25c9592a5754b49eddedfd7a3910281356fcf0cb9688bb4d331c6ca6303f7fa8108bfb5dafc9d57f0bd679a8ea30dd66865fb384554c284a51f58992d3da2dc6cfa909b623d506e52f287701d89ba8095d4bab38846b604cf487fe607e540ac6cd30c1d17d736f1548c4c608373212b71dc963dc586d06d1a72ae0f5a11010f8f38b0203dc11b5573acda71298ac9b399704a231050fe29fa088645fc300ae8b4b8cf80295a4251fa325fe519f23024c1b2953d7abe8ae4af27ddc5cf7a4e626a3a15235ada78d4c0dc5800b5eb4db3d592ecc9e3005d3aaa34fc0964b847e3dbf32ad872e6d7239a4082f6146a0e205fdfb8e7d2a85bda4c7dec9c10644e5bc349b407b7cf152951054b610822d6cdcc3a3f93a3c3e4f1b7c5a1e94f1e1e41964060c1ba5f3fe9e449bf30cf8cc911bdc5ea9161adff801f64f37cee571dfcc235109dbf2f061a6949a635bd9a5a9609f961e2f2b55217a1a87d00cf4455dc8d7502275f1970e66453cfe45639f99d120cbeed50cfb10c6bf5a0a8dc05ae195abf5187c16ddc889b71636ea7b8e91eea3b72050b4d46d3070a811307b9917ffa0478c0c0d95cbc44dd050a9dcc5c79392800d701c7b8e53b3b1dc2872e331777a38a52b14ead0fffc48b8b659d7fba97f152108d80867a1f2e8a47508ae2fea00bcc84af8fe55081abde8fc3f13019050afcd3adb290fb56b954ec5776e1db782c80c45686d35dc315a92977e10cc57e5c1a0f7890989c4eb75f4d8da35cbc352bbaf07cfc6af093a575a1ee101ce9a0af8f6383af1ea43f44b9c9955c846d97fcdd13401d01cb9191293b77e2a82871226e7ea92aca5b3ea20d64faf5b59d3f0bee2d2c1885c4bc68d36a9a800fe4a8d4402cd3270c4f754cd38d110af840af80a6d182e199e6bb1aadd1c866ceedf7bc2e8166bca2c8578e645098ee7a843623c14a744879e5fff2171fc08644628d02cf331e735e9720d18538e00c831a1b73136dd45b8399bb57f7d535c742c695b66286584f55807ee08f0097cf3c9090b453d5f1c9a21c3609d2e483aaa6b51952f9b9ae3be5430118b09cc1081ac75dccd144a9e50f8837137f07f2d98c0757e09136b7ab2f06853a37a7fce7a6349966f7ae1f39e1c3d1999405939904a5d64538e92f7d62284218dfa766f910e9a128c37ae643fd851c3a005f74396121b18098b2653e01dfd165ed2569c7d1679530ea575a6ecd47a70472b19a0460c47e57f903a3d2670b0ebe7a901d6d43a1a4857679a42f0aff0c51905b72f68ccdc6934de3cf2554b0f5045aa603f015522a158bfdad225d7bc2dc8b52271777855b9457b20bc1cbbb763565dc0a9055e572866ae2b2a01e0b246b882ee92ff459d929b32e430e4324eb2331f0bf927e489de282639d8c5752610baf597d6414610a96f59e465697b4003857313d4a5a3ce151d069ba17f9c44bbb349ee41ca853767adcd6ba3cde0579f76560cbe7303a8912e321ebab312524009b165450cb4b3e7eba4a7ca19d548cb09232446cc68df41548390fae45991231d078de707388249698b5a8e7f54540b7894e8ae173f1ed7d786eb2d81c0849c06af2d2a35d4d691c65499d51ad16735d9d8e66db88366ab15d72b26d948b9ae50ac41f680ff61780064006cce98f60f70c8aba881950dfd6de0d5fa03d855caab097f59738ea4976ad7344382dd37ce82146b7d4a78e611b4a39717e1a064ca9615b231ed32e5b01d80ae0685bf4719ba23249c81477fc559247672ac49b61b34a27067eb0d452b61422f3ae1bf77aa7b42d8de02dab2f1865afbc943c893782822bfa67f9d8f416e8621dbbdaefcfa43138dea3a45d06333cdf44bdf573fbe66359381db6bb5518e7548b5d01b4eda74c1d6b233a2d0047aa715ab40a309c00606d5364bce6b8b23163c953610da36171dced34bb58ca390c58baefa068364e66dcc88df569146378633a5d404608a8ab5d7f591c29c210b9cc554c21877c02d917a8c2bcbfe59b6e69322ce67fb181ce083414dfa56af112678c348261afd39c8272c40e8e124dac519d7f21ca8660d24c32695da0ed4301cd57bccff34cef4545750091b1d08f8b930023e7f449a8020415bb4a526e7a17f4f55e43711d60e30da0e83bfb43995b6a24e9748f4214b13bc7552b47ae0f76a48600dad9289d7c9469867fb3f58b86c46b5c96d4890fa728086604ebe03e851989f012881cefdf2c0665f41efc5d1aa7651be78c077916d1753397d3626961ec85b1c76796f6c9a9ef4056ce294a2e0b6ee07bccf271b1516d86f5b33244b46c587334e57545161ac67c305bf34015c86527c4e21c3fb2d44351cda5684110566bf72166851d028189f276dc64270af9514715b8530b60b36d33048404878d9c56af17b243337c1a17d45e3eb7b83c494cbcdb0d9210efabcc5005b50edb853847ae3251361d89b66c542cf79217e7c0042e08a4147034d4e83480a916d15e686cefdc0691313b49343fa083bbf8129a184639ae037a75e200c632d2776aa3986b64ad077f18d89344f2c4927b01228728284f3caef858f62cf7fe2ca73fa929e8eecce9d8c512404c75d032b8e8e5d5d89cf27f2d67bde1f748ec854483060c60c7f95255a5da00ca0e77d026239c26d10ef055f1b9469baa67ea675cf2af359b97376d4e6530e717e5a7f50ba7a0b414c2be2b0dd9dcffb6e064d6fd09242998d48a3818edfd1579844a8e6f90490ce6ea220a675bfbbcc563f02300197d4b668853c6ac9a35d6f21d546f9d065e1016d6aca19475607deb38d0c2b8b070cdbaac03ea7ac7c856431810ac798320634e327e25cf6ddd3324a0b9d46406f874809469cee2bdb21a712cd3878e751463b51c12a2bf152de95dc5d09dd485a42ac0aac1bb89e29eaf0e1a76df6d8047acfa21656610b5347bdeb76e2c756744bf444d2797f23a6bf4eb188b020eed71ba87c009900ebab1dc364af103b2fd5687be36b0eb1441d8600a55b4bb600f55dc8c5d4908b321c008ed817c84302c7654fe2aeb4c44d8909253dddb457a2622a0fc55d612b6d700cfb197bf8bb2cca1465833eb3e2af6cd4267370db5d2e7fcb4d9e7b48d66a29b61b29df95f86c27b48555d3f607337ae007d9145388fa45b3d6d61f7b0cfb08e066e9a3bae105d0cfa1fac0c34bde32454ec037c9b84c86787dd8a908bf47d4ecc1352c01582e57216c1482b9249c9547fced42f4e6f1b0eb157ae92aca29919a8b344229f76ac5abd16e811dc2f2e676e7d79f5e32ac2020398ca521b5d1389b2b3e1687ca4752ae0a951c389d7f91219c3d30c822a0d19f0f2b2b09736e9d5b242f9091777e6c3648b9ee3e14ded94e673a44d57f83f28654df0259daf57094ca0f1b7900855bae439f16848468e3d0c554c80d4061ebd48dc233d14c9deca9a266a573129a90353a015144300247a1a1961e3593c8758158605559a26a3db8812e8317d4ecee7537601de31528f0d5dffd9a6ad6af139ed6064b6ac3a19214b0283b87890c503e6821564ad08a6a5f638d67a628e42f7faef00534a2d62e5dae1f63328f3b6ae6b5844538a960442df15bab7ea9d731e20452835633d6a94ccdfb0ef2d7d2555f5224fc2b5b28376591ca0d60e6e4a4feb544d11924ae4b8130ce0bbea47e64bd7852b7aa5f4763aa6a72f0c3a2d43a04ded6ca3fc1cde2376896b5ee9e36d328eca74f3fcd9a9ce4bd92668690e879d6a48b28bc0b037c004a5a5749ff5037fe3bb4e7d387f1d3a29b20d1b20cc0998c8c3bc901e5dea8490de551f165d2d888db4b9cac9bc14d853693da52a588ede37751a877854b0814d09884e9a1e821d88fe4a9369fda302d7aeb6286a08734e77d1f3b47fc3fad29dd3b37c7111bd3131c0a7eeff1893ed00852b3f48dc754a386dd863f80eb2894ec21f8597323977d5e4efebfc5a7f8fb6d7f5e85bb8b0734072bc35f151d8dff16f5e60d7fb0f73a70a771d42411ae6f000f4f0a02022336d7501ae24e405a1d94ca14faecd9529c8ac1178e5149403d1578d65f57aeea6aeeb24f09999745ac7c85b8acca6a14372a2ccfe38bf7b2337deb6404dcbc235cc9a462b328ba13dc80bdb6b63ec45a5c83f11f4188264c95a57693cd3b0757425afc24a47996264d681e26940b34acf964662667b436b155b6ee9e6e2101a5601b68bbcca5174267e30331e8f62fff2364de0ebe8ba8330b7de4fc443d6c278d2e99d3f784e8076d28ce65c8c3acd00bd96b0fde1eada652e99cba830007d8cf14a78c8a4f653894513882afba88bd1526e873f73c94c4b0a5d1df615a0d14ff0612fd3d0bac14c4858179830f83596de989ede088055ed45501d5d0c239e27aa1971774ca0c2af8a9f54890c888587eae6aab7cdf44801443be6b5ade03554fa797c50c32f9a5f24801d28acb2dee21e0920725338a542baf9b779ab0c59f6cb91e652dc3fe03e50d43d49cfe0f364760590a1a8f2a4252c57631b3dedab0790135be781dd592723d933670aeea084c806091c2a46e54d1636ca0bff1b27fef158534d5d4bd4fa476e4f3d8503e6a61eb98a72a83313284573fc25d0c9c9ed906dc9e177251a6433d15d53b918b6ccfc67dde221acde358d88725ac384944e4b7c69ce84fec073e37e704418b0c8bc0b544375f23c4a47a9f44f633287a324acfa53b4e3c1e773ac0f0781456099124b1967f446c08c085737fc29de9d0d0bd19308b3c1dc3af26359deea17b91241b5aa6f81bc080ac9daff6b6503ed111e2586d2b89f57e0d0b84f4b3ab5e09172f5a45c24af129c172a97d5ee80b9b116c4eafb82bf2b4295c9e95fa3a35285ee6215751e04c7971d01796ca29625736517494bbebe44cb0630001952bc08d5369481475562ea14e0d10470efe601ccba8b64e00d8cf3da27eed162a8edd4c275e72c1ec24f599038ec39e79eba331d87b6661b8b4e65c2cda2c1316f97ce66068f813c2d41971efe1e9d4d3eab24e1e21cef8c09bcba0e250f71dded47bbdfaabe82321ae6bb5172ec9435abeeba8db46bf4dc93393e112f955142ea85ed7f77b8991c7c67114fdc484dcada16e584fc3bf610dc26cc962fbad8fcfa28ca2804981bdea9ec6235767dbb0e5ef12a268513e214cb793525382536bfe4c24c6dd5ac5c5a2d89db413c87450d0c8442953ed40574b12457e794a60bee336740bfe93b90dc6f0c4e0fbf9488028dd43e24568c9c6f30d925213cba02d9930f08e4f840fb1a87016de3d12cdd57c04ee8db1549625fd1c4c94080512831cbcc062302ce5d34524f298bb8237cca1cbb3dfcbc0ada7e7286985e45310169217813e5ac2ec3a0a086eff738540c34d21bf689538f4406ae31a3d58d1cf23ae0c40561325f8f2246123338403156ea237f3fe58751a044e8074bcc07a88909bfb6d58f7adf3681249e9e083b549e2b576a2f828845e0d24fc248dcb7861c685e8e376782069aa3313efe597ca6b9d831cd2c929bfa483695592bda123fa582caac07c123de39e686e5074e28a2066023a79dc9cfa178b18e512c3b8ab68e76dba277d6abefdaa0d08e2a63a1bcc6c1c571bf39b380eaee26e80f718b4632db449591965bfeea7e2679871176786386fa7c42aa333a8fb413f9e84c4efb625c8e6fe9d35a85ac46af99e337c7798546ac22995141ec1b833e7e4f208ea4dcf03029b2965dd7e2037cd98f239f71e890648fcdd118d75e614c313c0e5e609b2592d50e7f1484aa8e130bee0ea0b7448234dba773b15815a9e82f4231cc4e4cd736796890b1ac628c9d1036699c689938eee694ae16dd132d3a4c2c0168e80ece61d33ffa0d82733ea06478e5085f7c87f5eb47ccba9011b05bc132ece5b9ab8c7bd106ca769fb91f581745f6017cfd7a4bb2921a56751837660e192bd4c7407f6962d69f731c39d88e17beebbffbfaf5f9846ddeca9cc5bac43036a3050fdbddb7d3f76d1f6dd7fe1f5c2940e189b1d35dcc2708baeec122e2b0aadce79abfceadef858ded6fc3883f77133f84122651a00f7b6a9b6fc5e5b127270dbd76dd5ed00a95f906c400a08dc58f15aa71e6b51c77e507f44290714c4db8f6a7eb88e17f87861c9d83b8186698c937f4224c4d29e4246eae1512b3aa2e201c0ceace12769d769d71bb62febf11c2362af58e87defb4f2c0cf5b5cdad1f30be3bb637783717f38aff0d25cbcb1beae0dab718f99f954ef9b9ae4a04fec85c73777a42ed2a90929fcbeaf69399b7eb120a85a47c00b214ba78bf9ab10273530d781c0064c7bd7c8eb70616e8c7affda2fbfd7f7644f66fc5fe7f799585b75a62b08eeafa4f8edcc76f3de33e380853687d467a74d38c6dc7714f15b12ee675dc5affaf872813938955d711f8308e09864942e2fd2f6121941ad227567f804f2362a1e8a17de016cb04445297777bfc2eceef7622408a81f5d6d8b01aef73fa97819240e90d80f01beb4a43d7a5887a1f3a974260bd8f3beadbeb4d09bac7258e9b3beb50a4bb4b972e994a8216bf644d4c7c63e90dd03b6c5fe70d9b9d38e2e5d09f7776f97446087ad95bf999380935de9add302b08c68487bb31dd6445066fcc9e84df98330ffa13e5c83d667d2ce7305a3ac5cac47dd4654811d661551884c6090b8a902b13fc8e044c37ab40bd08923ca0ad1b1235cb122ff84e5b54dd1669716bd2e00d12c535630f3a7276844e96708ce1b846d96ef112aa00d89d31975ba3454e386da3642ca1a732e46195d1da0b8e46badf475155e6ce8af436e6d51463be0a43ce8e7d629e89204af9b03c2907bdf74c78708b916f35dee070fcc9b945c3fe1ad75399cae361e2c03b25e58855856423da2974b9c3c0842d81b61ec057fc2d2462fbd2258610768ecebbe6464c78b9177b928148e496b84b542ead516fe00667c8ceb0226695a9edbb2f13176c1d1605895e5cd7a04de012cf640a247150dcbd464a1afb67730bf3de0b32b827fc1b681fd6f2fc46df2e210eeec892652c46ba4300bc3f63910bf7648efbb5fdcba0f4ca5da0cbfbddfedca95262e4a8c06a32038f35b084c3428a3ca055c18c0058c20b5bdba9448fb76c914b615a96e17c96b63f75e4f574f6ae0784a42e6583fbfa292feb0e8ab91856af2843b01c405c8f189ca71466448fab481a62daf4a1c7041bc2b28418c4d55f6ff2ca31e94205446303cfbf695549389a92d84f11c578a146d6388d2c4dbbc1a662e8b9969938c5f3ed3a63f41683a30e6e487a3fd2a88c23533b14e4ab98a3390f01413ee76a3cb472bace30aa1f760c96e85543ee002e585fd87115f1c7ec357eb7b76b8f03d27f9666b7ae766140c6d4950eed40fc80e531a4f221d49c13fa2c5d4933e2c5326ff40c9d4bfd583f7ecf4de8e94ac158bdad006dd9c2d5826f61b3ff5ec5fd30bf52ffda3dd26c1519df8d9ce528dec1d8a8edcc257d2cb149301aa669094a0f7d981d9eb9dd3f71ff801aa6711df2efbc7d1efc902763e61ae8391dfb3dfd910ef1bed27f517d3cf2a37ed44143455544939ab69979c363a5456b308ea3eea3792cafcb133a38623619114e207aea126e451fed4de103cd1c59b52ad46c3a64a66c94e1c84b5222bc5eb2907142b18079fc730ce9f29866e956d0f7b012fb1a7b6e183ee5406e5efde5b3ea54280bff65cd013224c059d61ef4c0c2559150a1e35f3d980e4f82e6ea65c32ff3b64334ca5fd93d06508c1cc049280f746cd2065b64c03c513b937d1b751feff8bd2b93ee8de12851a1cc086470967f4a1b3da2152c783590e21390fab330b1a0d6e11dc3dca9de5e9bf151167ccefbd57c1925e12077e2ac2f2a7a090b24a4c363dfe7fddbd7978e1483520c19ee09495b5972dbc397aec4f1cf8c05662c87ead5b4934987e4cc6109649c03f4623c8fbc5ef29382bbd0fa0e63ba39393f0132435492fdf7e17ab52116e54721aae96ac930692755ef9bfe05cdcc98a8d753244548dfe5fd88204d2f04148615f94d7132ff9e2ce88b3d5d8db73b7c95dcd956d1dc4d83ea65073194a9ec82fa778729b0e8e0e2401db88fb85a86198f16a53a01ed2a8e4f10d19d51622ce1a71ccfd00a3ebec0d2ead09311b7df06772cad4f271fc3bef5b05c13e2b93074503ed5a955d1c7c4a8f448a4ae8a1258d05dba2c58451a4e1ef3296421e85c7de5e86eb42a2896bca3da7f9eb258b8f648855a9cbd167fe464e632e546733d91a784330f94be1f452aa7c29eb7006268ba6171be7ebbf3fa869aec67604ed3a4757a2eba1a57dc0b3ff26304ca276c52197f18308c773c032fb601903dcd003bef629eee2ec0d1d31719bac42071f57c4c97e82a6f651ab4f829381c2c698c7a10ed629e8b8c9f06f0d09e835a71875ba3fef25c57157cf5d8e98ae5ee69eca3e74e12ed899627e1c1036699a0c686d688f44a2a45de0eeb4a4e25fc557bd99bb3261cf0cbbafbcb93c5793c924ef2fbf297b519e768e4bd1e58dcea9150cedeb625fa93c8fa82114ab97e470dd19cfbb3f68d5da12560107ac1c4b9c70d72a4eb8d11e112a18f9cb141fa8e5108545e73d004b56260cd5264f20c5b71a517eace05a9db7af051e6eedcc6303330e05a45159c3143e952b9279d582fc7c9c334856c5fca0119ceedbe5e38f324c12854b33fff7c09b8b281aa3cd6ee6eda174b7ead099757282d24c0b87f6e434a6ac946ab583741f350a382e681fd7dad35afdc9e829ea50fbff638008cc4dcad550c46e83c36eecce6917f4393ad671cfee03a976596a4f0e7e7b93f1262927e7f8dd8e0c71a961b69a387fc00eb5b1e35ed422a4f974a95be6148463f26c19aec5d959800e89e1f5a27ed7452b9736d7c89c0945e8bb6c378cffe7f1f58836b8c9e9a7c043ae024171f14ef27bd47859373eed0334983a2365199c567080009436eb9dd6ea5f0428a4c4e5db683cf92ac86f0aca11c71c026e09e4c92e348681a714b5d974f00f10636f689b0c141e1f188959109534031631e098a02fac1516a46493264a138483001a1272d165c0ae52a6e44f9ae8112b9ceda027fb93a232ea42c46b580aa8bdf084f7e50ddae41414c5707dcf8463c3dd2396e0c8d783c65ce1d7b87a5599ce4c230564b8b34a7994490af7577e1f48151bc0c862676248d242460ce75c1741d6022832a3d6cb34b5d5dab51bc41581d7f554930006cb4987eaa56ff4288a2361cf909066dc928488b11d47ce29f2ec52df659aae58ba9c93ce910522a5d6a4daf3d6f82049df8e4e322d99f25767cd9686eaf9d2ad7c6261398290c20fc64f171da5e83220668f1715c09368570a12a8b35e01f39e8591cbe815bd9ca3e852579da56bea1af22bd196a433b83d0bb837506f08cc8c8a5f99241de3637043acd355255d93b57d7a0bdbd79dbf56c4d76363dfd42a6cce1b3643c2a1369c6562197fc4f3ea33f246576e1e0929aa38da16d8fab881516a3e6f23448128c84c1e618ddaee01c5711ad8675b30056a5b3146a8695e7e7c565d656e03dffd66b286462c6f2ce7dc13e1e8cd8d7d3ca79f2786210ebf5e2db9d71635a74cd3af8938659146530e4f9cbb7c3aaf8afbc52059ac2039013878541eb9894ca35804c5fa0e87c550a48776b422e207d78923007e959818871b7b2323f99b9205836f3c29e0ec753affcf831272f2a65cce9a04e085b041c5268ed7226080e7fd90b1f7a3e82e7bbae24ea1e4cb163d1015905bfbed36e3674883341dbe22bdbf29d7ef7b95a42ad63b84b71729746477933c95bb52feac84506995a0b88e47e4afcae66ad49b712ce3a9e512469d9e614245ae62434127789f7744861874e20872050fbf949c60d3aea5823d5a53a76bd9459d86a100f305d90456f5e505a7a19346866a1280622409e0429fb3202c9dc65f40c1d5ee11c8acc52c13766b28e2ddc2b0a7fd68cae3363136f2faf9d8b6bc76473082e6f606463d21742a935c1c540b7d02746c4640d2dc15eba963826bb5c6e199713849464299e70db4147ef8605ebc5823059b242821ebc3ef9c10330bd2864b1821b351bb81af060bbbb186dcbb1882e0fc938316754c36b8e11292b5d641bb91b784b7108c83183760f4e74191ca097d8ea062e65071fa7aab4699c727149531e2f42f74b39c2ac0d0ef747d23291613f6bc9e8b5e20e7b2f18eeaab005d843a1eff1782bac48da841670938d045df3a7942c5162fdf4f2b6f80ba6c65dab20ea26170390563fa4bc48dd3c9f0ee14a7dd356128c9a55305a60dce4fcea95d841cf78c126509ae3fbafe9493f5951898762ebcb94cb1a8785c49f22863745741403def0d9dcc86e18117e548dc6baf8e14601f63ce92e5870e529f33652355def93f7bf3696b37936dbca80194fa61866c1e7eaa47057095a4a387cafd1212fa79ebfb15b3262451f6d74badaad823722bc51486ab74714c5b856d9ad6939785b0296b86946b5601a05f45722caa778b65a5701a6f78d5ca2cd26b87391cace01fa3fd17f1f9031d0c17ef706cc66ffefe7f7486a761984fce0a984b75bf6db86f9b8d6b0f36ca8e192e97a853fbd6c48a8e1d5f9d23d03da2100a636bc205957aa80259d1da33465a60be9c09b4bd5aa6bfec513c6e112f7b8970fd83ef0a7cc5729c637f3b0af22a2e118e35ca8fbc274ec70c5fba7e4f71c571d4e11c19a7bbd9375e581b598735fc8fb6934e1f953cb78ac6984529c77c955eaf359820dcba5c3031a88141e338f7f81962828dd58204cb8bcab9b058aa76f234f3488824eaf54435b404244cb6df0c31b28820dc8307bca46e321817b8e5bf0da6f36d08a3ff54f85af98293cc784f2a70893ed945c5fd24ec83d5db7346a05df76b83ccd9d5c9ed57b78ebd01938c923fa63233c58e34153026f09b65d3bdd2c2a6e92b24a6ba9571caebab33925352ccca18bfdc904b11416924f7b8545fccb7be4b570a56e3228c41283238a6da5e1f2453a2706538f64bc723ca12d3d62c8c08ed223bcfc758c00c64c0d302fe76084b6358cadc38dbe4b9d998707b4b56acb70b37574242f602d7f269361e87c40ee8409e579b19ab948397c6d398b62bdcaee159f293f771a0720bd2655d50c67c292e8d0674a127afd07641652b26aa1461ecf927a3152b418a066038dffd2e9bf3d7854420dc1e9a23040fc4fc1d81f2c55c51609fd5cda0c8d4aec9489f640902585816176acd564ddc6b80e5424bff2ac339853d5059ee026f0e0d719d405b2935108389fe46104efcac2490ffaa742d473512fbcca325b3319e1f98eb3eab868a7a8606de71bb59db82351c2eb179bec0d604193ace31dac48253b90e7333bec911a83357f52a5984bf38867ea69de4d2755afa09a6dacfd96a2bc5123bc662af22144ef8477e7e015d32caae045955df4dc8d3f26794c1b88fa649375ebc1f2cab2c1cf5a36105cd254b0792ad8e4874bf974ceb04e2888ac03bf3ee76d37b586169faa939654e293010b94aad986c4ebec8e47845015a41e28879a89b52ca6cecfb8215597464fddc096ee0e2fea60cc4f52020b56378fd898aa8b36478f4781b512565d3f46e8bd0b094c39e355ff21e5524e11cde4c42d1d2bd802d2a0e6caa2cbf1d9a7e2dbc980e88e8259d2de50a7d510f887b62db722771ae051569448da7072397b567613e68b1183c3aa42cb38f60e476352b1b458cbc74764dd7a64da2c56cd44f0e4fed76043daae3a87483751106a05d1cbf010116841f79e5838144f713c0f6191d2de376b6b89f91f4990f9233021fb542ea78c660f0e6026177a969010182a54a96b207b04104fa9892dc488a097adc65ce1da2ba21a4403d0eee579315ffd88658aef34b73724c4e03b23bb22743f2fffc0d827614042d11ea35bcabf3a32c3afe568503ea01a3a2e7552801195d39213e1c642b4b23c70720332dd9eec7eee08aa6cae79a88502818f782f285740824a685c8fa34f08e1368ae4a3e6e2601c293b17f5599b2ce826503b5d737012367245582b045c4936d81549826253e1a9b6aabd58ab226b23e7802124a9a9823e409c9142cde16f48206661a97acd04647ac6db6e10964ca9da7ab6784e16e0801f9b45694a5731057070aada6fd414c3a07f7b400f5b7d724d9208755794804c724c321942adb6b9262ac1ddee91e849600ee3959c660fb6c1e228fdcfc543163e59d3ff671d7c09072ae630f06dd106eb83ca2d4484498ac4167343db829e9db12003d093866a0a350005592d575f6b3717bb818aedcd756a9b73e77abdc3e5bbb3f1f1942517af3447c24a6b90968934833f9442927a157c5fdd09bf3a40992971960c7805e93b656e9d78aa4894ce663c6adeea73af3f79447a51442a5f70680c3b0b7a1b09abb3b0a6121e8e8f7ed8037c1104ca932a73073ecdf6217f038d3a1391ed750e74a1bad8d96a4874b3254741ae0ef3edd35467dae3dec20e26a9a8e02254a6c4b739ea73761a464389bb244681051635ea862990ee6f516c713e539253c951fe394174c30e8a294a49be673d657a4fd4657277931b58e515a994a1a8b991eaeffa6751b5e7f42f89c644fa9067d71f3ad435023002bfed92bc6af2de5f6b1ac3e63ce5c226919540d3d53e487c29ec811327b9ddad96c2f0706b4f65a8028e63713d0d1da3c058bbd100fe01e39fa71f0c22278ca5460486bb705a1e77736268ae1fc68b7747e8d5fd127207594cb294eaae6a8cee9683d0babbe02492f71e8a795485f836b94d57940805291e612ca8d9f88c1f9eb5308cf01876b574577f90526be4565f4e4dcda73b6232deeadc53eaffc05a2b30a4a8103b655da00ceb526a0b4a21f0bd63421eac856f4e1f99f609d45c43a4c78045337b7a52dcb322e08e8810d19f09f969d7260a8e0dd731fe8e7191a118b5b50aed28dcabde0f140b4df449d8fb6847281a4c971b7b1234b90187ee6c165db11c730091e6745c969c66721015cc0616a44798f5211c886ef56dc9ecef9dcd10c3630fb3d00592c1d4634bf76dad52d1247d5ce4d1e8eb6db1df1d5ac492bf6f38a4a8565ebc918e00cc928b1db275e2bced9a173562ea336f304695f767eb27d63167377423133f7dad480be22e81ca91b95425b40d2c5eea57941a7326b0fddca94f5e0c079c600313e3ca9425c10671a798349236135b505e8d8025894026a864980573a93dfac1daf70748b38eb0297f5854d003323d5cbd5b1729401035e7e29098007d18a1cf16dc9676e1835d106ff3638621b072e7ca5e231382e8bcb2d3df044fb8b94face986b770351558d3340d4bd4f47207d05a3492e94b9098373049cd0aa54a94b254127c6ff5af440e30a0432d4b8edd51f0bb7a39c9eb7979fd7c6ada37f629fbdeaa4ebbff44c714837b40d016f90aedb789f8263b6c3076431d262e7f452e566c0a0b68cdc5c7d2b2676c5d920577a524030c9f0c64fcff52b264c9f2e9fcb979ed09cf0451fb543ee3fc185c09a19a6e662e60cf982e41f1ff47ead6c45f661d1c542b33372c03506071269b9c19e7560e93af690ceeea83a4d40ec8647312332f1c8aa7993da4461f28bd589c82deb66eb107ee0e68b87b312a40e3aa5d359131835f104ff5a6bf69de2158c149d337108c4a34d734805b880b8040571554853a91c4f8b39bd3f32841d708529b0e036617d7459d55005d8f2a89b95017e3a4da812748e5cc334382913047daae0bb6e6da1cf06307b49e79b54a551f7206ea5b07a7393a883b2b5454654392437db9abf09a746fc2235e3f1cbad4d582009c581c37635ce1eb5a73344e0672907a21f92131935b337625099a73b4b19b238735b771531c91718be21c918468b65b859700e8093c44c3cb0377708eb0dd9cb123e7e2b069803909f2af5c56019a0c7be49d8c2bdfa2586ccb4a3abe01f8744f5d1337b02e5dd44bf880c580e3dfbc47564ea620d9cd183a3e73b67a6c3fa6280089e87ece5b484f3a7e8bb3713641f9d2d733fd32af0f1a622f3c0568e09a017b25ddd8de2f5ee62875e81d72bed337d5d37c3d28d434a889d068bccba6ef92a675d2bac1ae7a43598c254a79660941d1179344f50ad4b6f578530f32109fc00f44c6d235cdc2cc6bf13d24bb2bd67dbd425d411721805e293b0e286123cc054b81c88689cae25213b24379047b71602c9855d8b0084b2b7d1f062c2dc71369d67091075fc8ad9e4c356e5a3be5ee4e2b0ebd409227fc5797221b3c2788092d53161fa472e8201195c288be2e4e98f96c8560ba9d99dea13b098fdc5c35d98300d9fb0bf82de521f02d3507855d800d23a5e431783e092294e97b72e9fb23c2f460b548c95f225772e08bacd631975fa64f1d32acb36ab2b0f4d0f866f579b61d6ed9090278760b6762ccc0c88898646939e9b520e6daee5bb118b0aa7e5f32f89f9b3e9f5e9a1f406cecc6b0621d11e54f90303cae686c4c1aa28bf690ddffb0f4965ced2c5ba06261a5193dcbe2568f6be719a9aab54a195cd4225f31ae92f9386927d20d4e86c464313412932fd6486aa54626d0b12cea25859560e9aeac4f13b0fa71001c8916593c706628c05c33598a7099c8d50a70a1b2a447f41a7cfb12710c93f18ac0e8f552985b5062850172dfcbfa76dccd8937d26304751343e6c4a533ed14122288870d333f012609d1ac17fb3fd06d4804ca85ac3d51261318fa16840cfb901d77fe93cadee73870f93f73c2c450746122e6a6a91cf138d8f722e8894b1a5ab91452ecf661e26ee29d6b21d86b44f7dd4182f4a832d9a3b41aea4132d8827c792c62104f445c1024493f3a47bd7a15d2d2b637675a1b97193c221fca896b45eb5015155466530ab80de515128837c469a1540894f9fc09f4681f365eb17da9473d3121081d4f88da3399be5eeeb2dc3872cfd29e27b3b5bd5eb299d34898338b9f1910f444fa6dea1799d62f01e97d0e16563818fc3b76536d96f728c72ee9254195ea4c85c00618ca204e937cf789bea8110e07913b047110da07c1e732bb3e5263aa05356c2dc83360e0225b39e95dc84b94c551da5653926ab7c9a6d4bcfb9299a0804f039d4a400e73d6ad494e7f3ec67b78c47681869f7e7e0b18b582b99a521c2c081d0b21ebffc419b86dc2e23d24551cc9f2086ac804ffb5a2a739a895bfc01c8b960490c7f03e5831ee0072c88d592c4ced204ab9df5d4f10e15a0615f31c9948c020eb21d007b717a478634ef7051504ef6b1201750799d7c7c3a9b46be4d633761e2d08ff7536d350196a166558b86a9fc51f830066ce6459670ff41ce6e40413feed238ea91fbcc69303352e92b5e40e61afaab20710f6f39713113fd349a10b2ace7f0d26354595947f3a368bd3094ca1c635e7d041bc4fd69d4e22fb6639e085e4cd3bf4aac0761fe2b7c6e34037ea48e99841780b6593ec7aa560d1e074d2a324534acdb20953edc1a6a8a30d6de9004a772d0d11ff2a6f06bdf2eabf28b692e7e2b1be24805150aedb44707427e64fef2e1dc206cd44bb104c9c4cf28ada283fa1540957f745e65d9572765fc2a310e55ff1583ef0f34474853dd1d163bbd2c0e81b88cfd4088b689695da0c3f30d220b98a75cb317179220c7c7e21ebe6c71ac947455c6aea11404655b6e75611d8d7095b78bbd7aa10271a3993e89c912b998b5041ddad20b2a729177158a1c6f5f4742ca783b165217c4814a474841d5b20acd4d59bb44bcfde204e1c4f6a6f87c124be1b2f82a2d38b1e82ac5b5c6fa992bd2a151f4157fa2fd146dceb84e60dd84327bc72d80195930ef7a2f12dcd6e7be3b450a25797f84022b5ea904d860e44a8a765b37c1928a611766fc7c7e93e6011b57765595edd63811f52da96fe91491df6988ba2e772490f7cd500ceef92cce111aec704ba55b7e2fe7695988b5cc4628246759a30d5263a6c612377cc7402595d7e42431dd5986510e3e124691a9e1c36305c5e6e84f1644ce8e3a5544b37b4e95ee8e80e3980bdc19c89cdb1b9669bb1647a2bff771c3819a1abe1c53bb6989915320b71dcc840749013227d795ff080e398694071152a363198bfa66c91eed344855f25111d1073407cb1ea3f2adec049b21debf9b4cb9c38bf576c411ef6859bcdc31f543ed8cd2ff4ecc56ea2094144d80e1444dfb396dfbc38e64ccd62e5dc10660c06fa21d64af86868e4efcc540895a4a3348cd0720920162615a892d757fe009f7f0501684c2451aedc8458d10bac20da535dd4d70b89c472c5530deaf7739a5763d21e615edbc540d33a2cf7c0ad3118209a2f7182855590a7830acea9fbeb7029b1c30d7302917569e61bef5ef8600722fc5f1db9af88a7ebb02e75f7e1d457d3992c0dbaa2bda188ef82d5752a2dd31805a2203d9d881838acbf5f76fc3326ac447c9509cb026d7188dd4af17aa0808b9745e8dec2dd2b0f46fccc08d25018c19d831144fcff3e81955a29b3c68fcf9e0a94dfab12bf8da41b2a1fd0ba74d14ab59e90509ac03869ef2c8b76e00d76d5ed76013112248142d603e1c0397be2dc150c283eb75acd89cd7f07359c70b7a7b299040aa03ccf04f659d88752ce7e3cfc80fe96d8dd3d92113bc65f974ebcfcdf128f0e431d50e29928bdc04055cbc38f4f8d525702c628ecebf5e12c2dbdb12f5b485b5af969447c12bc0f314a2e4417ec6ed2c3c29d89c7a729f1e4f8f48fdbc9a5e2e04cd2611016061823191beadcaea2b7e6ba475a3b495bb3c48c0a7cbefade57ae82209aa7da9c4279f20745941130f0e6f3385b69a60a54000ef0d98810d7a31e16ab0e98f8c1deea67b78158dbabe8a30f8ec9dc922aaf6f06b846c7e0c55dc7299a09a177f8624f96759c89a5b369b12882ade105f9c43b08d88732a152dcbf850c39abbec719944fb364a98112f25f4e9cd404c2399cfb0fa7f92048651f6fade5b552a73803bd5dfd7d1cf2fc9eeb21135a937951ed0ae166aad5ffbeb4aca57b39fa710685ed2363765297083da179cf385f71f3933d57fe21e276463cb3ca262892aa88988b13aa2619a5120a976dc6e821dd90b35f8b55d10cb628fd6608524e567d2e7523a2c9c60bcd6059b0a462993ff0d60b554002b4b43d2adf7505be7c0139ba834b4848aeefe3174a3d1f28caf30659b23a77acf77439056466c54521bacb200989a5e3ebec72f441c87b3dcc31f84bbbe372c87b825020f9631e7854a43f69db9ab61f9d5d66318db7464b1dec24ca80417c24242d96b2f35e546e719c01606ee134810d7b4718e99a3f292213c8cfbd57cef4f86beed349200fbef70ec645246dbf70a267b82f335e81b6c5e6a02db6bc2e710662b290eeca9387fcc1abac9985f0bb00fb7022f598afd81cf672d04e3a8697276565d5ca1a2f9b1e0d4c5b6e6157400bdc037e45213807de2979a776a48a3716003b7642d57a57dc1d7ceea907325736d4d71d240c4ae00a7062fc377e267d246b36b3e8af6b2d98cce012c1b7175029c9cbf44b778389141abc626d54e1feebe3357ea6c2977a04a2aa04d0bda1cc7785ce51e0a500dc4cfee0b565be31a75f364f0b08a94cbb1360acd931f3ad78334da363c8a4d1441c4d6ff4c01deb102a51bf04a221d828b19efc8361569f3f99414b929f7cdbed412544181e8e7f1d7addba4a652ebd1128dd9c11e9a65c1f994025b967afd1bd1d6af4374b1dd750b57bae1fc6895ed4a034dc9694574f25550fce2147e58450ba92b6a0a9a3ae0822365024719ed09c4f8107f9276b6c0616e8202b5089f65cf9f0c9762a503dcba82f0408d62b0df6b656d480396f12f40dbe41c884ba1d8485011ae6982e55809615758dcd43b0791007985caeff8f7930a247763a96d171fd03771cc0825f391d4cc3567b24dd810610e2332f87a8ff2494ea3f04535dd0142bc25db9017ee85125b1a4a4215fcf6fdc12bb9bc894929452ca1db702940212031ecce7eeeeee16638c31c6ffffffef2eae162fd996d3962cd059ed6dc78f69341a8d466b7d9446a3d16818638c31feffff7fd78731aeeeeeeedefa7038738b16414c8434c3e06816aab990e6d793f016d20c6b2117d6858b4aa70b17f8d4e549ab6dd94e4833ac565d74fbcc1a27007c6ad925491cffffff2f93c964325aabb5f7f6ffd37f7981f960f27769dda5d12eac61d561187697f8ab6b71f9f0b73efceac21f5d1f167fc2bef9315f002f607c0574659744c7a4af0d3b1a3a6bea40d7b27a61b5abaf66decc97f298ca81a4acbce63a2a9ec36f50192b4346a553860c7cb26066117aacd27830d634a0653deb1d2679a384341b7073ab0354bef9b2e9584833027d830b694ea0898c4fc55493024b15ab26cda5a1b195d2d0e0d3253b023a5cc224c8ca3f55beeed280429a597e5858aca090e6969b24a4d96bf9ba97cdadd5ccf0ea5c1a021f6e3b764f92244992a41d478b046dd934d53c7695558a4f5caa5298094992a493aa14e85f69b4b22ccbb26cd80c7fef80ef71b575369bcd66b34109696ea9f6f64f4f81258c11484006c984244992c429d0deee6eb01b638c31c615666117e6d28f3dd7f7b6855048f34bd00b0cccf7af6c8df2f72f1bfb13d2fcb23e300b83553a61307cb2e3379d756559966559d2d98c0611d29c31f6ae7ee5934c48922449f253a56a2f14655996657953edf8bbbbbbdb4551144511e30ab3b01917bf2eb0309c90661732173131b49066002c10003efcb2b1b190e600eccd0bfbe245a5f3c50b7cb2341ff659eb1c0390024b3e33aba986644292244992b384a22ccb52559629b054adca2a45656f3beeeeee6e777777ffffffff1438e303f8fc7581f55e7cfe92216560c0f004f8fc653340921836468c4a678c18f8f4dd4047036bac31ffc8d86ad0388ee3388ea2288aa228fefcfc0830df5360c91b7f77bfdadb3f5360c9c96a6fffe31458c24e7f062e263cc018eff020fae136221db6db102e25ae2588a88551bc2ec6c6bbbbdce7a019ccd9c4b153cc0083f93f34976edd03347f5d1353031d0134e33973777777ff5cb2f0ec9205689ae1359c71777777b7e9048238151553680e7ac3964c4c5c37934cdbbc09cd71eecc5a4700cdb89fd58631c6ffeac26e74fcddeeed76bbdd4a184c0c72b95c2ed7ef9f62c1521d898ce3388ea3bdd65a6badfdffffafd56ab55aade6b9640153a3b55aad56abd96b55d6df3ec618638c71b88ac3e170b813985279ca5a6badb5222896c42a8a62adb5d65ac1d4ccce66b3d96c468348b16dadb5d65a5b8ee3388ee3288aa2288ab5d65a6b4a754bb6d65a6bad305d6d361bc618638c6badb5d6fa62adb5d65aff4e39d30cd3f47ef6eeeeee81a94f456ff44948f38a962a51486ac4c2277aebe69c73b5f209695e1959581488d228103af3ffffac366bdb276ee26aabeab66396159515bef8de7befbdffffffb3d96c369bcd66d471c9f37f556a1cc7711c4711144b6215ad288a258fdeeaed76ab364cd55ebff7de7befedae561445511445eff3db0d964a6badb5d65e511445f1de7befbde3388ee338b6ebbbf7de7b6f5b6badb5f6aa3ed38cb932cdc01863ecadbe9515568b8b8b2556511445511c426ff376bbdd66b557956ac72c2b2aabc76f5db2a8365aa1f8ab52607777779765398ee3388ea378af78c52b5ef18a576caf9e024be3388ee368c7711c478b44777777bbbbbb3b49922449628c31c6b82ccbb2eceeeeeefbffffff18638c31bef7de7bef8a6946374d1dad6fade8b15a5aae162f301606a6d20903d375b4ab9ded463a8ee3388e2fede2c4e28ba228da2134dab3aca8bcaf52548ee7cf558a2ae5eeeeee0e96aabd7d9b567bdb31f66a6fffffff7f777777575b96a5bbbbbb638c31c6f8ffffff03b74891cd1ec9f99c7d52d4c4e218a5b4561c5b1ae1dedb6d34beceffe392d1cd94a3869dede806eb74b47314833dcd6e771454c424348a62f42406f59d4ea7130a75b4000b45c46b1531738c4c8c189918fe3214dd72a501c16c140bdd4196b788c0d2083e3a36231b11f00b3b9b116e083c859ded689604f4c2ce7604247444cad8906ec20f3bdb5194d026cf94ad23b62224477028f2e9a9960ea140f308094daffb0e3f39e408f16e14502c129b0f3faebbbb7b777777b7bbbb7b774f0f0839d69da7bbbbbbdddddd79aaa8366c361f34baef0e3faa8dd568022949121a357cf0820e4341e0286ac1a7fb4ecf38438e90128a74dce8ee3288bd3dc0ae4556d8415a1f78dea0431045717777f7eeee6e779e3c8371a8eedddddddd3c3c47b3e290a1c38d9013215c5062490e484c501b3848538070058d1e383d807a8696b49125eecee8a37df4bd512c31654e50f2739301881bdb13385c115cfc60042ea6038622166e20aa517b547724361f66c811d243e82d72ebb1c3dd57d841be7b4ff7f474f7f4dc668f904475e428da61050e1551a008717f888afcc87f6d0c8a1a55f820c3121a78d8704b2aa2862b8809585c21850ab9216e0db72124119a4867babb3bd8eeee0e448312da0165e2d3d7ddddbdbbbb9bc773e00fc14891cc861e1c724a8e7c3044c28da2dd799a87a79b8747083d3264454ef7f5196a2188ede93c73a7781bd7c8123b7ee4f8edeeee28c21ee2eeeeeedddddd3d3dddddddeeeeee7906fbb0f0a3babbbb777777bb7b4f9eb144f3de2261671085db8e9a0a8d5b0e3e46e86e222082d4e86e433d41de9da77978ba7978f24c89b4d17d890c2199b3529113391ce4f420c3e28e4ba628f58d063937129ce881c409204cb8340cdd28019bca70839274a3bb83288acd347677f7b6b6bdebeeeeb69e6d724cfe9bc19c15e8c0c80e209c5c5104504fce79e65b8875444436b0814511409c48826788051d28dde919dd3d70afc288189c2881040f280ef80ca1df7242177239702969a500b672b8bd40a46334041210d9d201b666201147dcb884326b05e62c936370d8d9885022b4c93348ae256c4b481b114e025d68a90b0778bb93a043170ed0e6df447988b71615a0cd875fcd315c8ed25a5a58c54ae3e162b9fa8961ad2fd22805d4018779b70aa366970da0cd1713431b1bda2f16d6fcc5a80c4a657c61ed4c3535673fd7595108af234d13549cba536bf5c7a7ca9a44c9e1704dc849abb5f776fbed76ffc7fe8f71a9e4e152c9f3becf34bdef33994e2754974fb9130aec3a4a76047499ea00fd0425a1354a7b426fd058ee49e92314f4e3431afdf88cf366e24cd914bb2ed3da65db45d09d68add6dedbf676bbff637f8c4b25cffb4adef7994ca713ca7442a1403095528129952a2565b5525159616161b15a5a5c668cb0cb2ba69a19caacb0b07cb3cbac2ee3f05a117461976bbab0eb26ec611f6a3027035ecd852d27e0ac945627a0cdb769867f5528acd95b4ec0cefbda7fefd451994ae9a44b3c5c3873474e60636373279c99d668adb370ce2ac33589926b42567b6bdabffd658f4d35b8f42a05799fa9e633a12c0a55e944fde9339d6a50e02b8502533f2995a94695b27aa5d028e1cc2b9a5ba9acdc8493a509ad511d0a447f68104da24369b927e1a4b12754a6e349f9e32314e4431af98cf366e24cd9a44d20f3668a13826baa99a1ad63557bbbfd1d974adee7994ea8130a44a55429aa9495a94626c50481ca0acb0a0b8ba5c5a5e56bb95abc986a64582b045eafeed5c25423e33241b0ea5e30a69a19be7c39b4af57a5f3f527983f7599763e3b241d91f444f8ff4352ce060e481021b401f3121227b4c96012492b81ec094222217ba841068536790689073008a4015c014c1aea4026c72089a024d647205c9c07168a161160528e9b241d6ec4841a188947ecff5f067648230d21cb025740a191ab8343ff501667d6f7591ac3ff430de6ac46781d4532216421f1a094d66aef0fa4d15227bc1613aa14666a870e0993746c520e354928e9879934e438afa5c42bb9de51e342d63791a0b0d6de9b2456e1eeff4834a41fa5a41c9787d7c275266ae37a5ffd5751312d54c22e833495aa19a49f875209a9a98341c19839e7cc5d57410e944fa8748f5bbba101048000a3190000002114858138cbb25049d80314800b26524a407632202a3a26924802413a1063281061000601180418830c428c3184652d72b8d54c76d73db0cee0fe7d9f5d3fb5f3e4f5fc1dbefcccc7088a44dc784af9ae9f93e91b5017e84586f0eca1dfcaf36287d334ae5970484ab91740695e20571ebbf66ceb7424ba793392972f06bec0345e01abfe02d3d7bb6b2365085b06a68977d7c64d39cca07305371076baeab87989577fd434dc15cf8fb36315afeda338d2507a11c9d894e12e83d07dfc38a652c59cf22f082444b417ad9cb4f6d54d65586b4cf8c649d82cb6f21236ebb2cf1b62e20e4597ae95de774f68a6dd0735a988d57b251ac2573d16a331e125866302fda0856d7242657c006bc496adf0f6c57188b34b23510bf7c0876730a56a61e296e166e39691afbda3e42d28821a991ccc30c091e48fc0f7244eb259220f8f1a35becb84cc05c9198eb70aac904474457b3635e8d13fab48d9749b43e16443d3651413f2c8d626632d2b03412803be32de01a7049c941af3013c9b023ee0413952759c383a52e83e1ed7dc28395efb77f07b2ff7c533f4fc0cb910cb2aacfb528361180834b4ae8dc30dc35c62b1f167ff3a2fc6379a0fcdee69cc221b41b3ec552db3babf16564c96f762a02fb7ae9bc4c26a2b1feb7a30f342675756789ac6a7819c08d2c44a99572afaecd952448328744eeeabc731ed8dad8a9f45bcf80c31b228f34aa83f198f8975edc23a88c4bebb7163268ef818856251f6badc64ecb87fef148f3bddc414222e5c6e5ed14179634368c777af519096a9a90221ea5ddbacd2712c28360ff2ad8fde90ee55375f45feaf6117cd5e43f391839eab58dc27c80fbd240568adc1b6ab0e760991fd0f4062beffc0cf3009bfb5647772324118a42fabca70bf468c3f211568851f52ccfe039431ee3f70be4cc2ae1ad91d18491026e6cbaa23bcad31c34b480552be8cfec0ad57be6ccd9171bbdd675eebd353387fef188bcb2fb3d4ad8d55976663a1d9324c29b8cf4f788ee770a94efa2af265314a32e294cc912ed546d8cf17571c35fb0173370e72d6d9b2f44861d4594f12baf9de7d14df111c80fbb92b2bf4f617c3bf964a9034de1c98b93d4ba83830a25499c571789d21d77f3cd8d4825a6a735cb6ed7ff3f44d85b42dedbe229e57f7f45bbbf96d25b66543517ada592ce13cb0197fd06ce12e7d15e2c55600c23c1d73660d357c9a9eeaf492205fa8da7fbcd3b71a0aef5c698840123f7cb6876b9ea82adaf33d76cc4632f4d45deaa060687068dc754c0bdfb1eac12c85050cd5a154c0eac67ad9f2f52842d76af6ad4f47c4259b02bea2697b5e5bc1cca882ff7aa29bea8c85c833c0b4e5e3259806f2bcd25a45c1b0572ba5eda7f823b852b5f229a57c261bd2b08aea4a1563e7da12b701fcd822f31a2015e7ef4f11c682740b93dbe8e3770d9b049e96f98a856df9fbed729833afbba53d7e7e966bf9332eac970a4d8c135f859c642b8516720779c7eae0acfdaf76c134f081322c7b859264eb699f48e1d2c93f4dfe34551d5ce2a35b803e50ed729c06309ae2638d143afbdf5ec23ab02e9d9e8372538eb58f0f918cffd69b3f649ba7ef1cc258d7fff7d3615e5a696bcbd56c966b42e085c8a8543dae4d8d7e2c81293db0bebddcda23d8df0f9b62806bf9a9c4dda6120ea71d990769197d746061a653afd40700e37d6aaa0b350a4b016db159ceb7288870d5ffe657a2fcbab1a9add1ecc624f7df44f1cd918a56a40a3f593b976ccbf85d53f131d4993c00d86805275a8133fd21ba1d451923f945f8141ac2e3ff2f37584a2a4850504ef6054758cad51f2bbe75a5a0192291c08cf1e70decc9a94cd3bf40812589585295acde0cc9271a32d5110b6cbb0fd437b2f25d35ce4de3e73ab1b008e6903b3bdafff65ae0446f1d92fa345a10db3564a709989d108d1ef358026eee0364699f0839554b3d07bbcd4147cbb930d0a86d64e57d42763ffd708fd96ee35b670831a4ff54969c538c7d1f8b9c8c09886ba94c9f9be09248997b6aaa3d35308c9e70d9df176f8608c455af51b53e0d2374f17eda6ae66eb19bba16d517ae213c85752cd1535ff6079867b7a2b9788b08a17d71862611478fa3c5d78a102c33e09ec504f3f46280533fdc15c54d0360a43afc384317548a85040fe6a7366fcded381d3c95940fb430ff8604589ef0c70f807f9441eb2ec304c5787ea00039575646f4ef6757564ab7399595fc3bdbd2ab7b2bc370de2a1dbc1bde5b1906a2737fabdb4d28797983ecadd2c409fcc452ff58e5399a1364dc9601388b2ad8f02c733eceb0a628722001854523d9a1c6fd99430d8fd99efc6bd80666f54bc6b79d6116f2cbc64a7c6eb8a11b93bd9cae44a6139d73e0c30f63386f54ae5a0144a0504fea498612942fc051141cc8e2cdcfff992e846252e50c303b99a5aafca1955ec7827ab9e0a7c86791380326673227692d291ada8add0be650b67d1f312793c656716a04b5495a94fa8aa7b8cb806ca4b6a3c7229ed43c1fb0a9161a30831a6d1c000f7db4512d4bdaeb73420968012fb84738d37cfa187a8b4f2e5edae4f01586a1ebfb4cea3a113b772fdda99e319b8b9f61e8892b1a09bc864064fdcfa54595de4fca517b5ce4b8dc1667d79929f23271e7055a53cc1e29e4d7c8ea0935ffbc9cdaa532e601e10982676485ce62ecb013be71653fa13cfc17acb6a05ff2752b98ee1a7879236bb32385bc97965a441355b137b6877db345a946d79b3d9d5112cb225ce4adb5d41fd46831e425313fb8afdd1290ac0f51c9b88ca0fbb709b8b9b13771df0a299cbf6ec7fc767d004d2b410aeef7a8a3aa281de8bbadda7aa8b9e23feb59acc1c07c4427d697796420d49ab71d0df60360dbb26b9efb955d8136ee04120e2baed7d3414fead29bc40d71af1784dde8878cbf58f1e0e1b350b9b618926a65ee2f62d337bc1e9d5eb1ea86495700665cf63e347fde6755e9fc51b799bb92c162ff9985c7734be70182c00f062aa263d9970dd1dab2279554a9ca0f61d675ad65c0d76afa2d8645c0b1bcd98ae42368e2a7cad669995f959be8bf5e1fd28a9d3dc6ae453646e3eb82403746cd446743ddcdeef6d2c96c586c1c193474baffd2059b9c00db15c2d1176a13d6b7726893cd50c6bbe93a6477b4225d6b872a140b086d0bc7c9358a39f621d1a0e8760571122e47586eb51a519adac2a1f3281307a2795d94f77d78a80712305085a12056ddfc081ee38bb83e12a4a0f25472e50f832d0c2feb2e3c37d4e2a7ca95ff7c5eaca6d981945008798022288efe93bd12ccaa01186a0b3d8a6aab59cf854d64f1861d78aceb3be76b959b0ce81a9402074a7ec74aea0908e900b8276c4645bcfcc1f59ad835c77261aed8ab7d2c6fc8352cb59b0902050754eaddf7a602d2390428757380aa3c4bf4397198b64e3fd13c6a4ce19f1d471351869a8af9677fa9b66e2bfce9b75a98a403b929a9a6ef91908fd8bc800d310853db1310baa37339bcdd775c4d92fb8461421eb451051c8893e22045ef97736de3eac8ddcc8c6455ad822dab3d0320051b26c7755ef77d095f064f3e56a3619ce1d47306dc8492e80d02d6c4ad485fe0a3f33ffbaf6416431b3573306ba190108a9f33842293480fb1194c750fbc6c48242ecd3b8e9c06252f0324b142abe57af26cd8183f3cd7ede6ad49b76e03f66863cef5e489963e6d49706b274f048992a05adf117a0c06d5b792a8a6adbafbf4aa96d60885afeb65dbeb18b7c70193ff3521576047eaa8ed57258cac82e879a215363c0b5afebf88a0121466ee2a13f2e6b65344d0424c9d3a52e3480161214f6fcb62d8af22d4153b52f2bef23a34e51c350b98b23168e152e3940c756200740d45c546937377df52d007e7b2bbf13f8d5e995d3313d11113c201b657350cd22c2c2e1edb354a001288e1df45d1862d822677aa0ca0b9320da2612d4710ca229632133de4e777c37f3bf868b8238c73380a80a26a02a91c4f4ccd6b260df9a8baee05da9b60543b6100e94a05fcfb33c65a9c2df7dd0293d61c288dcf7a7004a7a163e1c0f6489616dbe781e048ff1aaf73f676b3d3c67eb9996cac5a8bb20b923590d8d93d1581dcccc20d6ed1b86db26d2a8688199a341a33596c0a6aa8733faebae434ba27addc2a2a03499dc2827a71687d60e77bcb6bc0211c698d5ada47a4a4455365360842df58d26bcd0d71a9f52e500c6a8a2d2a091914e3faaa29f534cd782bbe401946c7f762795d62d466a1cef8b5f509fd8d41b9cb2fd6effeb87be5966adaf34683439aec99046e35d25e22cd5fb6f53fe8c41d0773a17430ab640ade5c8b8c8d4851f2fad6498585cc16a721936c6dfac82789b89060149fd04aaa8babbe5be2d5bf82fabd3865b395b1b9511ba2f7aab0ff23d9b86d6eb9f1a3d42490f57b8835f34b8815820b19704e45586969bfe92b0f0bb7480d2be1327cf261b2d3cc2e0bc341a2edb2aa6275b1cd89b8c43d2011501a1f40471e9f16208be9a52156751abd1c5c7e9cdbbf20d2b23d0a9cb88c64e0ef7a1ace61d111fd2916a428301801d1ec00e7c64d1e5510609daf634ab8599e19674c33d3b0b743146496524999b62455020c3a2db264bec2273cb7be9e511706e19af04dc3da2f21eacfe6788516ccfb0a47ba16341037298f43976528cb6d57429885f03365554cb64de0640550db9ba7fa71c1183c4b57a8f909142083e0f7d038f2c9b9b84cc7ae4e3c6116ffaadd942b79e5bc75417030e62cacdbec41ccee065ed39debae0a41e85192c69075fe78ff286a6d6cc1706a2a9e702a4a9f0f5db6079a3033fb80e24a77f7aa96e3c51bf95ab12c79e7655dc79ac569714f76e93ddc7baff6aedfdfb7eed01312f4313e38116b4dc0eb74b2e8b9c35e714635586b981650c2760d91341ab6d20cd0f78305c726f940b48965e53822eeb29705e018e918a94909471ae8299d3ca92b91c473c8e24aff8249ebc3aad4f9e0f0493b1165bf3f0075ff052d9a676eda94bd239145b32368e1e609133326cd142488eea5fc931cba1dbf3be3912bc29d8b5a28768c1d39ffb89e1728b813f7a245c40a73e30e7251a96c1149094d9946b66b91c50efde0ffff4f150f4f8b962d2b4961147370ea922ded5732756944638a6d49aa00aab6260ea150b2559f312a437b35634a8322627a54b880ead39ed5ecd2af41be46c19f9876be60208c97b21685858c51b92b4136d6a081f50e76bcd81d89e3efac0b009c23dc715083cf68671421112524a8501b67d16862c6b23d5ba68b3e92ae2c2c94e724fe2dddd0d41f494e334aac28292ba28a511eecf88ed2b9a4023cf262f7c23ca29a121bc8c863893bec292c28cbcd0e9a5580e2f58c58244d56ac1253cf36c90da245acab2f1131975d16c01764c3484d4ab8b197504268214b402ff9a1366666b54008f9e8b290172190e1595076140da26af688e19a06a9e51bc24edbffedf9d0164ed3a7de1a8f916091f585676262bf815665284dc3292598190ba6ad5c600c19e7654438112706596a0ab93a373ac855ba41ca08b3131f17df474a964c047cd077267a14923828f667876a6bf9b746cc5b5d6682e4a0315578357a62a3bf020e484f531434c9ed86ef91850ec3b3a58fb854b9ef121691cc6a9881e506feb3d8cbe54a9b07d9d627f7e41d10713776dac6230ae71f42bf6144f7caa0e1226454ee03e61a6627042a5026bb5a1eb8f902765d27dc44e40325610acfed099c243c1fe3e676aaeaf85840e99e3e35f82abc9fd45f658c028a0fea14f6dcc365ea83c5c041e26247f4a0a67e7df12c63e5eb6131cb6d92e31b5a1c41eb03a04ee6f04bdbe6352b3d2aa80ff3bce79c1b8a86dc3abd5d745a7c5f9e831825de1b1542d86f4abc0f827a5c9d6476c18dae75222d28aa0601a3b97092f4ee33db579f5bf838e5745930087208d8f833cbece0521d21c7ad544d9f99e5de4a7fa1dd76942e1897321dbace50fe951eb7874de9e129ea6a6b7026339486930bc4ab28eb9bfbfc9d3cde069494ddcb78a3fc8301cfe3eda03b8b51c01c4702bc0d1686f1b4ae858b0505fb5bb37d8120644fc2892804c76ea462b28fd60c8b9687fcf615a4c5ab4458e454913b0d8994234d519466ee89f9e24490f916bb1ac4d500491463f6b880857cde93151ea22c912b15e206554f1743940a77bc9b3868c491d3b664cba8def02ec12dd05b9803b62be7a2835f625f5d449e6aa987d88621cb63ab35a8d4b8ec9689d95012d18935b1dae908af41c62c90a90d87c2eeda951217a24901ccbf6b075fb5a964b9180d21517c289af6e11cfbc209a33a430243d6edea10da9b0651c3cc9ed10ba8289554fce84fbcbb86a270e410709d71405cbc8ad404e5a706f785a504726665660cb59ce406273522d64a6c123f606db9501c8e12a5ae39e27bc32b04aa46ec7f492969729d5acfc880d8b4597b5c0daf8aac10a53c5a6aaaac746c91a1cedd86ca5bc3aaae20f37bc28ac5f043752f1796141ece9c1a3d811a234fe4413459aa8345974393c74c4344947b697a2ce0b887095c4aa24296227190b000bf8a811a433f92481d3dc0c9c535b4c00751247ca01c7b6a71ca450ea4061742943de46556701174400ea0eeec2157646fa6696bb72fa79bc4bac85e3330638a2da6a32edf62d2c868d015adea3e697066109d7ef8eeebb02d4ba04a3556341e6b2877b8f18086b52e4caa5a7c3b1a1bc0e13d46ee78a87317b48e75b1ba0e49a0995e1257c7a37e31bcae94a0472f949dfe25ba8317785ffe6e52cd195402b8d03f982a3a3ecb14bf5186869ae102bc80c27b2b7227bae75a48103a4282018e4028860a9d0f840f3be54b682a67bbab0c1a6f25cde7954106f253c5a26e65d3cbebb1446e075609e748a1d87281efe5a3db795bec00c0d0225484b52ae46527b010de2d165a935608af9aea1ef5afcc13c5e9d0875291e871557463d361707a3369baa2aa2f4032499f8739879521544f482a7d5bd0d473298f24587d8453b7a60fdf00c092f87818783e073e41fa136687c85a70c3cb235818171d08e1f7c2b5d3f7ce7b46d23587b0cdc6e0c11981c06ea1fc4a20e8eb6fa2a945c0d3245a9a21360fb4e9275d11e3ef1e28da7eca8c419f9453d06fd39bb5f426213fe47909df7a82b1190f0b51dda427bcf39eefee73918721320708c8df87d3958fd08c7bbeba2f8ae4603cfd6935ce1b7c18a9010e234006736823b837fae44a848b29485d79c88a880f1dc168bed12b09844a0ccf7d8b1124b88de288e0bca8c6efd5d02b0c852d0d668f019620535d3a5bfa87e80db55760c206f163168d44485c6a611429a410dab99b62d1752d8540433674562d333aae380d0abe0c29731d7c7e7a0dcb98d4cd27856e28961e01ad94fdf4753f211242b02aa1733a8f8255ca7aa0b5a926c157f3535801c0f8955559858f57265731812a1559d93dc678bdd76459e0a7650a13b9427dbeec95b847e998693a1d414369470ca4e111141439e650fa689868b7c525f57b9a07b0e5b32903d70dad878f996aff6c7c1929c3d78c3ce67489acef24a52227539dd5744f1462424a0611821114c38cefa4c72901a00bddd7d02730e34756a0ed3128a4feaf37e9bbc6703446ade058cbc3618da6ea6f73e5bec7b23840878d4b8fc7cfc620d1bc3e65c0e1e8fbd2b3f078caa165e121f29b02b5972dcae2e873164c9460b20122725c2a9d3bdd9c59d8832b29dbb87f4be823ad31c0bcfee18395b2562ee0a5a39c7a64510acfc8555b6383493d4b9f8ad6a909915698f52a659b80d3c9ec8e82b7f35b8e707697ebc4fb68e6e489f793b7c403d50df148fff9117af9cb365efed098ea7e2e5e3a560e02437196e9b26e58dfb99a2e3771cf8addc25bf6cb42459c67a66e6daaa1c8f495786d166cf23bb77b0eb6fa5063b9baf973e8649cecb2367a3a09cdb324a363857943a74ec9a735232ba23da71025279e23851d2730c7f0a3695a2b87ef0898fd292259f03b2aaa92cab481c352466966e902bd575a83ee263efd4f199c1ea64d1743da3ba1f93bb23dcd4afcbe24f0eac366d3774b33595d4f66ffe6d6beee6b7f839b45db8a55d9eab6ea0703ac2aa61b26702d865cf07b590763c61eb9103cd47f429a3167654fda2bd7d5743fc4d5d4404a1e537993440a3d6209abb76a6cd2c25ca514cf2d620a55e1199a74980018d49957f2fe1147a50054262b74af08e0e65ef1a92b70a26eb5ad2ffa0eda39269c73021e3c0353186ac812e4cbe24ef25cce85bd34e9c5b0efc493fb2994258986feca93d4360c29524de17384ac1822be64281c3ad7ba7fd4a12505c309605c4b5762ecbc6a7d1e7883f7dd9d2bb3fe8b8b5c14a88d2d3aa904648a147463a0cc5e560afe32161524d845428779e5807d4a98389027a2979ac3f1f7c15b081d8a178b0df2a12612c6a646fdbc2e84acfde098e041c9df56c78a74d570dcfad2ec3a4a883f6bbe2af51c81b0aaf4f821d5a258caae6cd64ef0c041a109911cf3465c08565abb8b8d27382e0b42feee4ea7ec7a061184594c89304030866208a34a000792a66459a1ad88e9b7d40250f1fbe30ae56cfb41dcc7f86f35682a4e9d8fca836a9cfee623a1f1d966cc199fe661a5b2c9b18aaea7159ba9f86064d275a84e7fe7feaad4fdafc86be2fd1276545150b87ca956324097f22081164593f5c754715821a8090ee5c5c363bfbfcf6672078477438c3bffd47a03772cf603443cb2208850af4dd06b458d0f9357c405cb4b560a6d33a0a77a905e2bac0a24610621452383f01165106644144c0da854d001234a79e3e6d6a650aa232d13a3222ae782fead859eb24aa22c0db3d1861eac866e52a21b768028601595a6209c578ef3b4801f9aaece43244f58cc539977bd8f71695c20544e62bfcc51a5e56e4c71d7779e114d4cffb257e6f9c5026098c78b23a68a75a8aa12136eaa188f135572029e8aea244de5237600cb85901c477c826cc55c9135a3e735d091cf531add507165c58b17dd9fcc3c1bd3fa6fbc054348ca5ebcfed2f7af3f1e209429da7731e169321888374e23c6327e8995129e98376b8ae9e2ac98d6881643e957846bea6cf7d2ecb972c39bdb3a98c6afe5427e70f7a5fc4861d48d671d961e21445f6ce45b64834d1b510906388671540c998d2dfcc6accc6e4d309b8ad7ff775d00be77709a07e06470a96630b387a9486626b3bef45d8bacb1b3f8e0b2df4487b6df1df828bce6fd17ef82859dacf42bf69c76d6e3bc63f432b21e696b6264b6a8acc4c6f14a0def75cfc2057f21867f3ae18f86920413ff140c62122739be9cfcb3a6c8b3228a4c6210978a4ac99c80d25fb7c843a69f00fbe88185242fda1a175234ad6b24eb2873166224849363516b7911c2098a2afa0810ed24ed27215886b7d83128a98526e756cee491936c43c5c4b38264b9f713cacdc84a32b7d077f7144aa496fcef9b417e29b29fa4041e0a599bfee344baee935c57091fe517782ec1e4b0ac9a92e937dd27f40243b9adf4941e6016c359caa4f9d94b9c1305cd0f1356c6155a53de0f111a0a1e2bc5e1a0eccdc0a66b74a09bf31529c237c3e77fbfa4461381fefd2fb9282a2ac0c018a9b08536e85b8c070b21a2982653919ece341099d2f33b47d18802e3665e6f08d8a17e36199099bb31dfb82886160e8baa77ffdab2d3b9036fd18a4255ba706b3d46a3108314b1f468939560e4720c957c1afc995932bac77b5db7622bd5d0d54991a19df281028d1835e756295a14496761136b18b147b8a4ec9119cb1e8924003eda88b81f13d3f88d224922e16c2cc42f0980c6c4c9133571bb208d6c2d13964ca46e76502a626e3a089b32843d980dd8c372d1f7f19483dadf01742eace9fcd183c21af755f174b7a52c8ccf5a424c2d602183cc9c48baea3d63990328ba9e9a1f50254aefa093334f07fa3928e32ad0c9fb5b9bb83af31861c29b20c1335eea2321210d8260bbf69919f99661e49809f36596f72527e5b5abeb19dc47c8024ba25a50388a0b340977c128d6c3c817409de217f8ffbb1b2b19f8f90dbf5728187599e1138996054af99686b92a9151827ded7c4118317f8ea948cce8bdd186872550cfa5383549a0e5f333be428a28e424c8b73dfbe50a20c2c612f16a10e3b61fcd5b012b66d6ae46fa29000245d357b30352e469c4ab013d7f50ae09b28c5668611544dbe016817520ba497730794b5d2d221580f347b5894175e11b46500489100c61f8a155e196d37b63f0a421f082c5c6cce44b9267c8ed5599bf50082289957a4c37fedd87814c72559521d309f569ce3cb416f785890aee6826d5583baa4290a8a061bca81f9e18be205aa5fbc30ada591106584f940d2c26bab64047b9b6df8ad1ba969804cf6efd38544b1cc8a61c972556ec11560127b2955a92b9b1b2ff740b0eed8f6598ed4d16d99e96d504e43076b52e90155815b3cc9c481bfe8252caf882af526adaa14e06515d60a34aa08bb59a7d185f22caafbda190090801c4088e9042fd2783e34967162afa614579702e06f2329002db756c31a75827224ff0cd05ad858ff6c0f8aeaee39e6b9dae75509e2d156c54ce09b77fd4a8836e6f6745030d277170469ae1f6508388d301554d56345128d36a61c4a6c81e9b0275800de30705c63d07799d6e91f7380c816e83cda2dacb7d7c9ff709a822a234b6c35b9c5b1a04919be37e31f11089c52cb708f2e8ba3526413466358c0ab34ec7efce588ac154b560a89da766f65d23ddf28710a34140943cd2e5ca46b955cce2fced06c3dd480da279d92f25222cf0fe7c68ab85bfe2248221ba4881223e43c0ad0f127e2ad0f1847dc097e16de66f118c0e9eb2b1cf6018ee8ccbafcd45164199685c73dd214fba8179f8414f40bb788c8433290a8e06ca0095670f7e32e4aa39a09b7c46bcaea09624df6309ce6103060d870ffa3ee7e79a69700411234085fdda2b73541748efb84d031f45a0192a469250432299de9db5f74c6aff06602759b6c182b3a483c50966f29981d474ce842efc2642d0187463698e5de5b435e89940151f2ae042bb8d02e8d11da12156d533945f18f859325a083727e2c8942f1416b48389ee4eaec6c93dbc4cee10b0996f42c9e192380ba6ca9f9923730a135ad4f61c3be1e42103bbb6858f91fbf26cb67ec69d9fdea5b3cff49ce3216b66b5c500a376ecf7bda06cfa3d8aca5a39279dd002f23b7105cf7ca13907c893cb4b7a9f514c58b2b11257d06840c9b91d329e43664683e8dd86019a7e6a94812d83fba878a86de648850a4867afd6d30168a0532ea7022996e50eb1f7ffa52ffa9239405f195681f75a0ad798e5d46af1bd82891b498ed736f5024516f64301b218c1ffd9f13e8eae41c2583cf98cd53f8990f138005d133b77a66218699517e359a1e1a6f8cb157b72b8ccd078b357c892c122463f7b404d0fa634aaf7ae5a0174cf9324c73d6d9ee83fc62faee041361136bf22959a4ea14710667acd8d99b17fce732ca2406b1e44c0ca5ed28a947d7dce5ec1f949ce107fab84868b5840828064b99e2bf24d26a4334188f8603f4826540fc28f6e44e01cc4e1352224410da3b70af91d5584d1f5d8b61d45113b0a5b580d3a360f4d2e685e10a13ed7afd800588284b1d406a04e5aa1d461d0ea81566fb89256e2d1ecc7557695b0cab90ceecac6c3e168f87cb25dd15c896e8ea5c5a2e32c5ed7041d6f4c4476b50474574a407791047ca5a3cc6fb6616f9c1b1247693451f98f6081bb4ad7ac16bcd89c97a61cce01d2c5cfac00740f42e6ca4bb624dc099c10ea7ca608ed890af2fe0d2f019d286bd502b4270815d7379860815f8b1378c26c252fcefc506fe71d5f99aab7f3c25e3998b7f34eaf4c793b5f0ee7080ab5ef04489fbd36a915a9422a8ef20e242f5d1ed9be3eef62f06f444557d58223ddd4d4bcc0d6199e66ada3e8daf9e8d8bbb6d3897d302a6d3a69afc8fe4d99397380d2922fbf5651b5e039774ab6fa27aca885faceb1a55754375af706b44e15b9e9fd896af73fe319fc63556a6fcbf3cd10eed733062e43e3f539c06c22ddcd1ab9deb645da4d22576e68a3dcb635a936f2872456d8382f60203e59dde9b48e9a8aefdb6d42e15265febd82393c680785a534431eafc3b2ec5de4acc789f85b395428efc97311552726d9dc0f0f0533675f9924d7691ea6e1b9dcb410fe92a2e8db8983833927173c27d2c1b336e2947fc8147b2b8fa6592d874b7c6975d88eb48389a63d64d9512411f7df45aa8ef8d34e472113394444510a9e931e82a8882abef95b179243ddb8cdad5c6dd2c0923e0dac6c5d9efb394d66042a70504a66d41398f874ce4af8bfd82a8ec49709c99bc1f53216c372ed3ececeab6d6f32b00122966be2e3115b1793c71b9ddad14e038b72af2ba4b6c903c99451030947f4023f403e991736c9033eb385ed94a157372c1a3af2a2cb177f34deda91ae1ab524c0c47d3bb87e22cc1994c29f14ac0e6de0bac104ab3719ccbcf260e11d09d34912e0ae8126374650bb2fa3c4cdcd3fc9e788e0330ad15f62d3eb185e48adff71beb9bc28defd29a0a0ac5c5a4ab43b72828bf4a5fa1805aa2ad79cda7381a91d1794da9f9421f70c66e6380465b2af6146b3089d33544c05ead5de0d514e5d5fb1831ab78f30649a438a6a08fc6c27aea81533f4de46237a8f7b64a859887c2a7bbd1502804f2318072ef88ac525615f91cf06cfdf6b36d0d34a70564a7659451061aa9865950aae695021e1773624490039f312ee8fe91b434fba38cfacdc0e09f36f61cc441beae399435d0aa6e78cc4bdb6480608957597819e029622cd9cdcf4d529711c544817376941df57bdd4db44cae3f0c0b7f80320d720f7d85945910c6030a169aae9f90204cf6a8644983f9644e10f305b3996cbeb1e89840655a8c33ccb491092f009bba4fdff85e0de78c16c3cddac88fd3b179deb4b51bfc14010551dfeb1f1716e9dd18ef790fa8e1c771b14101bf2b39fea98d63151d05d85542897f13437a75ac8cf80f21cb3946986394005f069c9289b748227dc1903d1ea03c70874007ebd0deccf9481c14117881dad4d0580c1064c8378ab22a5658116f7d59720a7e5348845a2eb72786f912c42c67f54814be72b2cd3c51058f567b135b2af70be79d15f543000e5fe735a7fb43030001096fa66cd5d950a43ee3c5aa04f07b14c1939a526e818bc8abf574edc595c716034e1aa27065b9b42fd78fa32c64f15f5d03e1d414efd852c0f0c33052cc9017a0b89365e801211b10ea8bee70d8a94aacf8ae8ee4e1ab252b4aebba4e42ff3799e001077a83de30a04f416639d2c5a413367dca04094a5aa11466f29b7fb1c06c5bb4f5f025706ea503d0943b8aab0f78db124b54835701bc5c02fb7513699a494014903490362037ff9a992b02fa24057129a0cf777dc7eb33077d4b2df32992c53f77661ba31dbe2e82fee877d11988eb13386d8bef16e7f7143b00e28e812bbf7de6bebbd321fd98dd716ef77ff7ddd98f768ed14465b49841849159e1747ec1bbb116f11232ce4f98e5102b59288000ca2ddf19b672c094916ddf724d9bdc655ae0439dadde96c184c37fa1631b218c5b184c58fe377ff4f8ebf7108a87b24f5dbdd7d646754117e0a23c6ef10418608498eb15a15cacb194b58747fe20a228820429cdfba311489445b2412eded62ba11138944e077bfd9809f01372009d28d38d375a3dddf582f4df71d69b7d6546ede54794f9b8a303ff94a02d85af1dc4abb7a60b01b0dc3842ad2a0ed5b1c622b8f96004ecff3bc8df7791ef8f6451abacdd78d9beffbbeeffb3ecff33ccff3369b71fbcff33ccff3bccd88f9cff33ccff3bccdc8fde7799ee779de66ccfce7799ee779de66d4fce7799ee779de66d4ff799ee7799e0792dfe891dda8ed28f88007a04b088890c30e7c40b9a0e4c4070cf8aea80f17d89c5d511f549820a28828228a8822a28828228a8822a28828228a88d203f1443c114ff0756c658c0676658cb1851d3b76c78e2f76c78ead630739895d1f104d4413d14434114d4413d14434114d4413d164b5aa2aa209564deea697fc4c31a9a42b173dc84903409de9006e3e534c2ae8c9344dd334cdf33ccff33c2190d6f4964eb754a6699aa6699ee7799ee7a9324f930a7a42d994699aa6699a366553299b32324dd3344d73059282549f0a51fa743a9daaca3d6198d6e18340445397d8b50078d9fc371ff1fd0b0281808c5c171cc3b4f6125814ebfd10b3602b09ab85121d43f58f7defc8258a40831837e286be7f2dc702b6c98b1bc92a5692ec6b3521bbd8c5d86575a1f81e78f3101da3319c65d8414a38f7b594315105e3d16a8bb92a091b97c70df96b80fc5f57a8dbef88b12a36e1856b47a5c8047df106b17ad0c40f683f85f245dafed6d18e0ee8d235451b74e9a88996989842d7c7f5de6b3da3a5ecbd4ae8810225b6d9a59e00b6ab0e9d1446881d2242707036e0e775fa12c1e7755a93e1309b966157b6300d1e34190eb36919cec0952dfc43490d569f5271006b30141f941521dd98050a43051b7f00404014c6686750bbd4ef3d60ec3588b97b03b6add60a0a2693c9945de414b7322aab6474dfaf79259bb295e7c52385253af38abc22d7905dec9c6bc836e4157925a7e4151f9325e268a2344dd3344df39971c82af99457724a5e91cf7c86962805ccc599a8a10ff42e9b3b285005aad2344dd3344dd3344dd37cba8865029df9747c793ef399cf7ce6339ff9bca8c78647e59607c9b3f210798c3c4a3c693e3f387c583029f3b4785a3c303c36b6a7e58678ef81e1f1c1d3e251e251795a3a284cc2240e91069dcf7ca6699aa6699aad4c2693c904aa36251bd186b44101a6600d50c5a19e94c7b3baee31f228f1a83c2d9e5467a29ed4e7fce0f051f99c3e2b9f94cf8a8fca456ca863a393bea8f3828d6527d561b9a0db41852617b1a10e0ac3b40ec3ffc7e4947d4dd4503ef39966ab2bd561c8c956d98ae4f25b8e39349b30ad39c8320cff03551ccaa196c87a675aa00ad33a0cff412011a8ea4cffe84c8c8a5c768c91a00a7b522e82d1abc390c49e14a8f2a44095382289237144964f1247a1c93fa78b6012a67518fe8340d9189afc6309baf4a452ef49ed16b2efa05cc4519893a5d6982cc3f01f04eaa0c4917fd86c5f3b6f0b7f5cf8d6ac979f8fcadebefca0e5e7b47df959f99c1f93c5d8f6a45c380181bf46b0634305e659c0188b1bb1de6f355b395feb19cb603f123ba80eaab343c708df6141b141980eaa7c8f2cb10eea737ecebac23566fbda795b78f4a1cc971f175b7ff97ef7a7868f0d9600dfdf07096b01f4e73440f959d99f94cfb9afdd9f1537c4fb8b6d70cc2a09cdaaf09ed4c44afa0c5353aa624a612a9d862f02894e2c459b4295176df4a2fb3e265d4cdaf71d75513b6455b0a18203965d778c2d2b632be7ebc2b0ecc2b24cd3b60da36d180cc765321a2ea3d168dd759eee3ceffb4070b3e17070846188102236186ce43c070706f3c0c610185649d0a0b1169ee41f1886611f9a442c53805f644983be756771b4ef93fce386a61169df0f4d7585d12785492eeb9a690c965dd124882c8d5dd124a45ba9f493f7757bbf3957a28550a4211cfde41ff64515bad454254d5557e8debee6525748e1ed6b3f580270bc7dadc60df9defe26729112169d106f7f1bb9088b118f012cc421dd904d8acdbc21e0dbd75217114574bcc6e1db0f47cc3f6cf7dd08aab017998deb85ff56b76cdbfcda6dcb32f7c71ce7a9751075d8154575d07e9160fb0b0299081dc3ee86c90e20742986a18f54d2926cdc8191d9ea18b1ef80faf72b499273e8006204ff7d8d4b00266d107b73f7bf306012bf39049b0d626f1aebd3149360cb8d5cec7223ae71fe4d635924dbe24672c6fa9cc90e17fcef2f00fb92189cac1f0346fae3b748158ec791baad8b1c714367d2ba206bc286ee357143d7dd84872ec61887ae655996151a73ce39e790355ed7755dd715ba6eba994addf39e696a325991155594145de88c338185ee6f9a8a4b5a98458e64926457ceea48407eebed26d99563219375b3988bc71ac2985423b668d1e2c2b4d0db4d6bcb0e2fa8022143c60cd6daeb2a268cb19565a0649caeebc23219a90c95a6691b66c6688688e3b84c66c68c940d874d7c81b5324ebc438d193084b0892d7049e1e2019719760bb65bad55915427acb5f7a2334aae2a552fc226ae40f5427542a9545433d8e1059dc864c83206d4c0e4860e2728d016a18c879dc1b8b4cdac66df6698cdb22ccbb26f5774460eaa16c020460d13c458020862a44388e10415316c902006104788b152890185182fa80c0e6c6e575486e893daf7fd74939b4e4a5d54758c2d2be7cbcaf9ba30ecc2b02cd3b40d9369dab66130dc86c1705ce6acaa8aaa60b83425f2e84ce83d6f29bda454859a50269b624b56b4b2d7b1a5c160d85733dba10b035c3b6f0bfbd677872dc21b2c01fcef87a6d014b2ec50250b4da18b1b7261bf309b96751f462499a821f0054cdde236e646b419711bd20605b80a4d9d0b445267762b1d87822ab006580374015f3658e386780fba803f80353628c014acc1a15ea8c2c178680255a02a5b752bba925bb943bb94ce943b95ce4577822aae857bc96777d29d7426dd8add9ddc10ef3b936e04dd49e7a22b7527397f21064c71677a3ecff3ecccceecccceecccceeccccbb17027b7b81597e2545ccad5e0509da9a5d0567c4e6e855be174c0b16c6ee58678cfe980db01b7c2a15c0deec4ade49c73ce9f13ec4a1ccab570292ee56a70276e8513813151431cea229e148843fdc37128877228877228875e0d8526722bd54e8da499a956d24eb41187661c324b9abd642fd90d0dc5ce5e6e88f7d98d0c0ad98b76a289b29734dd642b2d8546d24ada8926ca5eb255b64ad3344dd354c470a77d4dd4d0e7fc9cd90a94add2344dd3d4d39cb355b6ca56d92a5b65ab6c754d01bb7e7511ebc30f2f15b96efb22b55c1066cca1bbbbb65376e9290c463a6a83d62ec2658ec276769576493c6320365cdf5a6b6db5d6566bfdb15fe213ee0dfdaa2b78dc1cb67a512944a02205fa8b010ab4dec1097e3082e9879406344e208186c9d62b3ae0346e90e16a1a39386169a0252094061168acecf2417a7010901d76f095afdcdd1dbfbbfbe5c1c3c3dd8a40b87884473cc840d7a0f5aea84b8b8b0bcce5052e2fb0cb0a0eb4cb0c2740efe1a242754206ab2a8d5c44bbd47f826518967900c358c0011ef80045097a10c2583686852d282c9a853eed0bf40cfada159df172036d037d997ea083a04df40af48c140dcc6801831cd8ab19b1fe3ad93182df3ec946807f7d3b03a75abf44932e2f5434692ca241713feefbd56c9a91872a3dd4b5628de8755b2debba36a919d94033b222fec24f1724b2a02bd7e97a8131a764adb4ec9c5bc8d855ad940b3624ca40677f65648a9dff4291359bb57bb3e6ee59c318e3ac5996655959cb39e79cb37695dc54a572ca3d57a98ac91a59d169e7bf381107396bbf69ae42233b1290fdf523d985daf9affc24fb00f722f1c87aaf1bbf8047f65ebb89b76aad65fc99cc39e7edeab0a11f8047db01f92bb0c21c068f5c04e47080258df92806413b66fcc0918b5ccd7390a3cd2141b0b473876b6387ffe6495e443654398e158773fe009763fc5a3ed50569501a1eb9c8adfea13f864f93e27c302a08749ff3dbc564cec407a37edcd7ec503fee733487f3fe7bce6f1626e346dcd01cffb5b08c7c1ca486c3f98f436adc840d6d326f398ed5d8e102fecd2f00ff465bc0e637d202db6fb69506e55f6ad4c6ea1fe00cb47fb9ad368fff43b9c8c696e1b62bffb8dd6b4e2e827291edafee204b6c6b2d822c5db5cbed5ae50f419658cecf4196617e0eb9dae4f25395b6dc5615586debbb725b6d4f77b97de9be9fe158ed1b5e2254f50f6d2c5fc0a3ed2edc10261d35e284f6bfc87a4372ad781462e1255c146530dc4b0383cd069aa57cc12d39b27bb35b6cb1e1addaebb88a98ebebd7ec2a4c6f6cacd64f1597b070cc5b6309063ec4627b1638e52b5fa1fb3eea27b7a40d5dd9b2175bc7999202dbc98de47e1961c3e20dda5fbc41a35ce486f055ea9041e3bf4a99bce4551a3b36a0ef3bd6d2abb2951871438b3a9410894ca69494a824d22fc790a91100000050006317000028140c0a44519885388e04827c1400095482426a6a38134d4471398c433186c418220418600c200400cccc0c910902919c1103bf40d0a12b72231362628c88420e07be6394428bdcec76158e1eb20c8b3c85649c37600d5403999316df13106f3719e503945c14072a79aa864c8a5ed70b4ae9e74c125f9a1e03e7a75b2b2c833b987ddd6f534aae089ec40930cafa62f5cbbcb0887a5ea8bd4411e2f8c0653f06592e29d40e315d22498fc186e4852830488e5fc9e9ed08d661f638d1f230a7c63413ac45c82ee43790f7a008ab22990ecef63be756104db94c971b1f8cd2bbd36109d1367250e1d2275cdfc7753394743c4430ab6549aa4111f43d2ce0803fafb27709692ec1d3bda9b3e385e062f765068cbd35bbc58dfac10652110cbb9e2caa6ece72ade85720860ad45422e1212216cba2ef0b286326f604af0717fc3e5cdd6f186b91a26cd339d690533b27af8d8ac4e3022ead05976b6ca0217d7b703d7f883873c95821f4204572d8d856b985039a0412151ff815e7678cdea1a438974b092609b6aa6a722446b10aaaf19e4c6a52d5c587d6240f0de50148888e0cea47f982a704460f4bce7304ec6579c9c1ff136d973233c4533239e889a5b31e04700b2469c0d8af1cda264c2ba4c13ccfdbdb3ae85ca6b71e1e314ed5f3def7d26f59e900f5dfd52a6635977ee3268db84ab26b66296662543333c29e140096615443cc71e20aba947483a7fda419a39f4f76b91d9239ead9a3a16de772e5ca88f89e3ad483e8b500330f94d8d27e5193730d64308d9fb5053e761b466b21207a8ed4d6a16a88fc4ba2fb94ca904695eefedb982ded61e2db8be0353e0014145f70fd7d0e319d3344515fb75e5698f1e1d60d6e6882ebad5227a271f7b4fb0dc79db5f86b74e4f14635536864c9c3a46b73a30e8a574d4e16ce65ebc5f6c741a953ef82cb9dc07fa7d677ca3b12ccee7ac11d70fb0911ddeb05aa462e1debf637913267e2d49b476dc35eda3747e6d9595aef602b843f72449cdc2ae0a56e0cd85efa9a8cac959c5ee75eee0f7da03dbb8459fd1b8569d59b8de01ed6f68834aea2285d10acf0d300c36feb716f7cdaeafcb3dbd07fe6fb116077b702d519f72d9a7dc407bf232e4f5a39096597441800eeafcde8453fea85ec6ea36372408a809eb4d64dd2d8d48434cd79c5e6bc41c153c17320d5d2dc3480e47c83747607b598d17e1ccb5869c3a254520d12b0d60068341b4400fc3703fc49f5ab49581ff248fa492d2f7e297976a908acd85b9f292da67776c32160c78aed53581cfa8e36e6d969d346c08aedcf2f655f4c2e695831be9401001b924c5a436435b45915f556d7ec1f0f9f12ddfc0a937ca037667bbc96f02112279eceb37aa2df71218d8c7e6e4ea34281ef24b2e0b41b060e7a3602918d3ae53461d1b335aa558dd2e26c7f56b126ba867d2300459836aa7e60317e1aa04a2d3e67e596c322305ebd163066b6c59d277eb63a7023d8602de81eccf91577d0c1c8e7fa55561e2b1239daf424adef0743da9c1d0e117658a923da62085c2c052823af76e5b0eb2068f96ddf8264235d3018293068663a40361256c976c7a2cba100ddf2dc60cf4b04f3c8849ff52c24d23d6f5adc79bd26d51de2897ea30453194fd6149c22d1436cc8509c4a22b54d26d818560b1321906a77db7e583b93b8c8e7a35ad10217239b04d37c912f47b5a2002e402619d248214abe1a7556e89b803cb2e44936392dd7c9a84d3ebf84c8264f8614c9a03ee533161569e19778469518eff424bbec91fe04396cd0421b5325caaba019e46e26845281a2fef431b6890026d837d19bb756c082a83d16475ade722a9d92c6ed49a32f6a89b18eb5c6cfe98124eaf17db09d72882f73d5f0908c3a2e7b289faeb38e6a67274c6b8d7f21bac674d428fb75d020f4f1a23c1970ee2253a552de6c3bb1e1887d0b3c7b8f6030cb1abdf3c60e5f4a0154294228318eae9c1e209fe9c84887e871938481f2d91149c16813a8c2d4aaaf9c4b6f22363fb3f0d619b38f6c13e32450a3221413eb4440500eb4e59bd3c462003ebe991d7252146975572aa17b5b1d93fc8e4ea63309808691a901bc8cb2087ee7bccfac9aebbcc653ad15d1b8d82b06b392994b138d8c3f681c053f4b7ed4aceae9bf80408c0f97fcbba7ef31b5e008a88fc3b7b1d7cabceb1449c8923010c63cede7fa8bbb20946629303aaf01cea64b4f363f195330cb5f57cf1e039df23d6731008c9007828e4ed8cc2aeb811c95f01656d9c8a66e23a14787c7a0f440a529afa1369756eb33b5114c36d4208ebc867260def48394efccdb1709034de4c41f1f9c016b6d108e85561712c5aa8348e3dccde12936747da8b47ce3b91a1a86b941cda95db949453382cfc4ec8217703ced06d7d26445d2f9fd6b6d2480a767502256c1c7fe7a410d6be8bfe0737bec7997886608fc0e134b8113a7b63a540d52285d4821d4ffc253ee711a3f2528b97010c93e9010ff4c1a580dc22152b332f28959bfd2392c1c503f972eeae079303a742036bdb8962df60541aa394398432f4ad10932c400f3ffc7a54e89b47740c2a18034d396175bc75a53d045558c279375e6bcbb88a9bf4d95cbeba85f1690112f11dfe7cf25fe71e157b97a40f58b4e26f854f3625728cab52b2225dc25e209b3bc8f82b88ed4a52d8d44b6e6fa40b2d5c55d66c91ffc3132063196c44644f3b74b778e08163d1cf2cecca4a43eacef9176eb478694f8aba419bf924ec3583b5c8d03cf670043ff8d4ef674c0e0ac2d702d6b38acf18e5a81b752cd954e0c907aaa8c9b2f729d9a763c74b9240c460ca401b8fb3cbb388cf6771c5014cd0068fb4fe776822a0b19fd3fbb8fc2b45f39ca8718841ad2190cc4614d050d394d4fd4212583cd8363edc09f6dc6323e69e09064b312e3e434e4e6835f6896e379e91c6f6daa17c5e0eb63f4f6d015e8783080a111a78b2313e5660aad138419df54f6e77709a3622caa987cda8e30ae807ab3ff5489d2660e4f6f02099f55d6e140793f0c1f146215356fdd92c6dc79ed11708a8c76cd6aa468c7d4ea2603af0542ef9f5d762132b86975f11cf6f8254bed96812282105eeaeb6e852e98a0b81b4d1cb1a57672f9933849758b12b4c8422be3c0de9f0efebc47a5cc4d2236e335be99a80422efced1cd66e12c4eba521d9a91b5ed94ffe014f4fa0241b1d5b657e65e95c42e0b9a853a5f54de691fe363d85aa96eeea85ded1543cbc0a392daa0fff4782619ca7a1eec7807b9e1c63378752defd9085825a45ebb9dec3a332527ed3818037dd3e18197d5ad9efe304a47ffb017310ad0ee6f0ca15feab5adc60ba39aa6e08a08d0a6497833219b9bd6dc1c180c9bbb6af630d6b94e343eba719379dab1220ce88964211fa232210bc7e64a928af9f9662a92d918760f60e61ea28bf71025e384a62029942356d56c6c4035b83ba353ba53b007e17a9f5a19f2a30ed55bdab0aea864e0acad6c46621a7712870edd0043c6c7e4b2fddf70e6d81de9d4d548705e2ff1196e453b80fd79cdffc81c3eabe324454efd3974a71e159c520b53840010b06a9276400cc7acbeea516731ce4ec7c8440681a2f5df222932f9c61811596455075f480a090bb413c521936ca242c871edc0a593f34292e753019b1e7c09c6a2685956909484c5575311fa06db4fae0e9ebd4c14f7c0228e13262ff9b90805e651010d819ad7f8311a6e40c7b0942f36bbec0affa3fb9669a2af6ecd49363ead09f1a1b3826020337578c962c80e934aab906bdd74d12aacd89646677a4838605bd51e6f9b52a0752c56b854610be6283a00106940abdd9de3089de7047949469bfb7ab94d5782f659e17eb995706839827450b20a2f055bdf4570e7ac3b32f15555b183b3f2cd96acc054450d62563b6488f74245bcddb36bf31d3495c7896cd4526785079d15468d91487588aed8908db13ad924a73ff216f164615678a5357ebc12bc34be93e7ca88e2b9c77f2937d27c0dbbe39deeacab8196fa95d21db94310346c57505d394da9d607b06d2222edfb04b4cde1ef621313b2dd1b33b0f8d9ef9cd5e50965fa3d712cde2841cb78c4eb811a05b8d57e1dcf42bad02b604c645057f8d63f139b8a64f46c81a554df87d1130af26da85b9b4284d183c321b60ba382ca92b7659f4fbd32eeb7911cf387d213b82950c994bddc9b42d101c346f6c039afb6bc476158d7c1d0703566d2825ecccec71812a15c33fe47a2034e229259382e75d9f69d1c453d5fe6f8f5a154871730c49cc719a770f2f0cef222fbe507a9e9e6ce9ed973d37b0081e403beca82a756953a35a5eaed56d437634c56d4ddefe350f2eaeacefb575435bf2b56096052f7097637926e6058616fe028e70d89c11b2a4eff4062807f7af2801cbc85fc74946395c778a429714820d7f303fa272f3eb41e29ca819a730e1e38778388c27473df01f4b886b25393527aeb1eb772f03360dad3e379c5fb84767b7ec3f7db895b0e72cfdae78d7126bae225185cb037131bf39cefb3ef9d89e1100c980ae6c35f2f151c3fe0472a2bd05924c44a6860bec559dadbefe55fd82ef65538b4906fe46c83be1d1cf8aa062c7dbb65fdb3afc2358f447b055672b991a7f3c2350a1de0fb07103fe31560c9ef569ea6fa040681245a2af0a5b7db65ba2e3dbca79e9d8d5f1b243352012e7def82b01bd59f3737a328fdfcf352a5ad323d70658eae001c134f6b7f536d3961567c7506390b1b20a7938754ae6579c5d522bd672de0d41188ebcfdf7bac1bb59f649d932549a5e2f54662a4576b55fdd7416c8eb5c643481fda9b757256096bffbccccce5b6b208c2f055676a3cb1f2ed3f52eff948233031c108fc448056885bf1b4386e8d8d465b686ba16288b7d580a57d5eae6886969024b27423460c4f9fd2ef94c6f17584bddc628bd689d685679b04f4a6f0a4a4c6a08afa1bea8a3ead8f5834d229103cfd4d32a06c3b9daef7d99517077509ec2d975217438987c4694247e1a9336e5b16cab2a21dd4c1cd289b967e1dab063e4c163dde0d15ae82e58039088e9e0115a2b4c3421e7ab734550dc51eab54acb73cfcb779ea04c289050d9816dd4a07d70cae326c94d1a94ce41fdc471f421df013c2f1cf512a27c6cd82593e0d9703e7680a5ec37db067267030d1dde8b77bf188864203bf6ce3e1018c8f2082bf8b5db5df3f43eb7df38f60cf782697b520389543b6794d189a1945c1e971004d8e2eab3d48cd419d1024703cb902bc442396830c28d69e04dde4c1a6e8ecf925e385e68969d5bc50977473f0e9304bd5d1a031e9d56c2963226742f12a873ef39a3073642c21a990d5f364c3d958b25dfb0c275d3b23573fa8a720a9206038f87c23febc7f5e34cc9053fb4c5a769b2ff8191e94095e8d4e3192771b055e6f3d006dd375f54b37ab01e69d714ad4481b83238779ee6292295c1c78984d5f7fe4fc8e7d8b91d662bf0b170d5a1f43d92790830deee6be57cc76bf8b6dbc838619ab6380059c4fbabf7ad5cfc0566c9cdaeae071f4a53eeaf12953955590d03cb27209efdf42fda66929098a0a1472120d04cd339e65e7cb8f3b22be9377e6e5aa747f9f7c08d8e599fbffcb4e0ba58400612405455c3869e3bfb8ce8d1a2543ba34cd2736c4dba1da59e3f360630eaabcd694b7e6e80a357b7dcff18ca909bd040062bd1b4c692685b56ba552ba330b509deeffc273c75b8a7f1176e428ce9e5e8b7f112054a559b43acdd647688ea6f07c6af99d734f4e7dc9bd99b75348fbf689491d7315b2fd7c50aabf1a9157b2b562499b87b927e4ec85a3d46744415dc5d9537d9790071b2f6ec41e8c021832bc4342e62c9fa4f2d99a08097d0a2b8bac83c7ce7b3fa2d76cdd452284646a932b687e4ced264a8fe34a05da65063d99be1902cb7a0d36792263fbafb0d06c88a00829b5520fa8f35ee5e2ba135122f23b9402cbfb443c82d892224117e61aee5dd07745a19e8436c80cebe6e99f88678f36c1655e8b4e84e862c0956a3817e04205c2594dac5c210409d287f043b7409f709192480e589c08eb2d48da62971545d4e372d501cda3fb60bd2261d61d41388bd3f9abae2a81b5b9d4b29059c5f32699a8a923e924ad0e4cb2cff35004deee0a8db20418396112862e9127603e0d1f5d71b564155911e8d395df40374a49e5b73351a328bb6447fc4a8c20de92a822ec786c43238812981d595948e75000d87173844318ea7b3baa6130a64f1a5629ec07a66b581db0c10266fcb1638dcb3ea5fc10d9841fa7004b861d656d30b2a1ad8b1cfa8781e7765c41dbc99ecfb37ba51405584f700d465a88c8a46b4cff0cdb2ba9bce346c919ed94bbda6871557fac406847efb28bd6ea44548491bf26c27c9e7c8e7dc30b73b1c259fbc564507a22f9c800021fe091314846921394d45b852f4b5437058dc51de6cd1b84475f1dadc289bc66c023d1c51a6c38a8eb6491d2fa90af82fc82de31cb7b7f962f66acd25092c61bf1481689219e19c3e8abe18d58e978ca5e1288f692a1aedaff6005d3fa6816a200df50a7d313cd34a808a717ba15fa2aa7a0dcc63462502f83502b4ca12b3543588e435154884248683e0642ca820f72d4a7be9709adf9b4c5a7e92daeb571329c10d71a8000eed555f6a8d3333e3fd8617321d9b982eccd67f0630a9f1df0f0ae150bebb99a2acfc91cfd63dd0919eac9fe8e6326481aa3e74715d4d1aec08011ed0973a3ecb44fa8e8d1e668ffa22ac000628df61fa582f30f6b683f79e4cf96ca796e53ab7ea4467b6f961a25197c2830926dacd35eca05dbd27412e90721f1018526edbf361ebab1dd481af0cbf073daaf536e92e6e661aa25fa845843320d063de8dcc47d015be36449018b45b7321ef862785eb6923ddd471b2deeeacf4802b4e7935b05fe5388abc437fc6ecd43a7af890daf0cb6c6b2a8232b91430ec6f3aad930015b740a680ccdb6bd2f100352e4af861770fae59ea71cd9c8a75f2d96deec8db657f20320d7676728dbfb2e0e74d946d74460a8f107e0e8fbc26cc522fa22c11eef52b7e788b6df908f041bf8237d45ac9b1d8236b5c29dd51586bf20e1349b90f2da2eb1d2b021741e0d4139dd7d5ef8c7b46a78946c95d0f5221cd984ea082c5cfb65688891d0b0741bfab0eae8911896d267e07dd500bc7f83f0490eb4945c3f84e31b2c7b8707be4ea1d1654801324005cd7cc8876cc933e1942f52963fa9317f248e0fbc19d7488aad0c2a74cfad705f6101fda185f02a175a68a1f1b98631d2f6aa925328412dccf7d75d04da303e5dd0fadd0b382dc2062994d887616a36480a9e7b0f03dbd5282404d281df5018ffe25542afae2d0f032a7747cca7621ae2a198f4a054d49fcff3610e6740c6f725722e99d525b0d5b0f5abd041888a28a2f60d7c1031ddc30847e12c27ce308e848420db33923f4f1fc69f8c35729251ac141fd58711ce39116b34e06150d16cab1a027c98d4106a5817084054bec8344a3fcc8f92ed00be7d122a0974e4f630792e26a42f2302fa8c1425ebbb874170c3a20df8c624f001a3ba3fcc84c926af6cb21a2f237dc18871e9c03bc9d14e74da39beab1258a071cbd0af28ff24656d34b86bdf0c0278989f59d86176a12370fe1ed08ec80c528f9e9a19050267281334f811312f35ab666815917f9869feaf23a6445012522161dd58b33d97f7ab04c353a0099541dcbcf423c6128fc9e69cd7a211c37531e04a359c0b70a182b437d98f6c576930b4d2c6904af0766ce2f26431622cacbfeb6ea0df399da785f44ce42dd0687f86567c520345f79c99e34ff43ed1211085176730cfc94d2807cc31581c181973023705a16c19b72be1c3e646ad1dcfa16710c901318e2e6765175c6497f3210165c7851d2e296601050d97ee5ba562503f03ec852671321ac1a13483c769a813095a0642c89174c539ebf4a5af494179fd26c8f2389e3356a0d2c0ed3784db1f23eebddab8782772e329cab510022a4fe9974415af520af6cf57bfcfd50469da442874ec3497dc31ee15cf50b7fa475024817ac9e4a325dc3679786ae69799f7fb85e893a12cf6b08cce0248c1136fc980bffb8784c09c3c8dc2809174afa95b6acceb76a791ed62c92e6898099ad9c96de68da9a6a9d7c980cb771fd023c91131f8ef170d40cf25c7760e04179f47ef9103e792a15fa29359fd881f5c12416bd0a9d9999a53f6854f4eda9c2e4e3f94003855d736c3ddc72f4bd6f422bf743f45bab3a484c0925932d11b03ddd8dc511af865f8e992ad61ed04cb4d533b66da07185f1419c8423cf8c42de12cab44e263c98a26cb8f9dca837ed62bada1b641ff411b0dee22bf440f4be6f35f76d356e58af0fe3615042d2ade51480a1ac8a7aa816c6a137a8e3f27d2c036022122e888994d2a341922883929a2ea61bad9fb8b9bb32cdc9344770118ba59929a2c7f0e9d04ce2ed564d6e9dd72c63a35d6c8a14fa51975f71e69191a99e6468eec1b89e81c9bc95a18273659ae8518cd0d650695603c6f898abb3059423013f51736616ffa61daae2a8c3f41c6283ba46a531cf70499ed1628955270ec8f09e30d5cec1cf138576cb116b02191ad984e47dbc49e03eeb5c4252f303c7ab5105b2595247cf18e4e0589ea9b2cdd970bbf1f0b644135ce705964b08d4db861b862d683a889a70dfd88a6a60bc65b9798a45d74c277d98c78a15e246919089523b82bb6b55a0fe2632b3266f8105c9cea36c309cdd1b6f4e21a51782f8361cdb3c3ce5710037f482c5ea1580ba9079ffd837c9a0e16ea62fea85b8ea92f813482a4b2b1f1696372332d781c165e7d03649292ed4ffc1df43926b3088a0daadd096285b70badb535f7947afc6bee56c35de0c4f53d39f1f885c00b651e0ebd1e7f126db97df34891df7299e1c9659aed345a128239fa8e245cf85f5f2600ba66ffbfcc79c656698cfd6dd3c309c3520cc4d7593ee61330f99d740b32c52415fd1062db3138b69739c72433d06eb10d60bef27b345ec9540971996ae03428eee1ccd499f3cbcced66460c1be7cb14d356885a6a45142a2cab10e2a799e2bbe0042ed36808986c13a5d03b6a21cb2f53d4c56ce9a38bcc5e27b1bcfaf832d16c18bd615caa84becca8d1977970a2c90b4ea1d2cc430f3095281ac8903c1e0a5fa06bdda0245c66d1309b080355128f9484a1e62c950aeeda7fc10d2ef307168e3ae0a9a0ffd3face18f13c775adb7c662249503d2aa3bc43ce1f22feefa8572e6766739014520ad00b5a8dfa61ec7379044d46434063bc7969cd4c4b3ca6cd29af513393eb63a02f6db8ac024309da9c59bf82f82463411f690b2a613eaf45ba2bd9c84c04dc643535e207b8e3d746976906c489b33f5bd374c8a6facf645e32d10c2867a16a14cb9d3031c50642b555863921c1542b54a5291ce3c29c6d16844aa371f6070957360786acf53ab198e807a866860a062abeff81b4ec67f272cca5e78a57486453c80f82f2ffa52b5133656f01421e6106234faf6ba97f320179ffe1b41caf03b61945361964fbc2493c4109de20a4fc0a5b0d3e5bedff020bdae03572e8006f809e12c58242f3d4d6a8af624ce4aeb80d201b58151050869560bbd08e1ba1c64d3a08b6029028892221eca48800ec898a502b7084fa4912ce9325a86df80c756956949814906d158c99c61aa890e016037089c1cb4be93b19763183ac8319b8010b42e02af4cde3cb70e875c2441dcb37b3e00a911834fa26cfa31a4cfe111af9ac9cfc3065fa9fd4f259a79f092ad08ab7d6fd231b1e8ee8dc0dc221814afc2d2180cb0e10fcd31269ad9dc4124ef69fbd2457d14fdb665606fee21cf5c9508fbbd270682285a7c9a337bf0249a7e15ad0c1f2b22091ec942457700acf2245cf60d3f37325b60c3b58c30a93ef0e0d52013d3a881ce9082a49f215170a5307af3206924303e4e8e2e22b8bb28587cefe4eb911ebfbbddaace48a5ef89705425e548044e98368e7fc1a5fa008a2dc66330739748a9effe2e571ccc091c35ba1fbb44ca322dd150b051edde59a0ee1908d3c6a8b6869598dbb0769e999e00fa385acbb641611a74f23e198b02550453c33d144b34a7588b09e87937c23767635e0889c977a3ecc36e2720c6612683de818a1bc4839135c6ed2edcd21b5b765d5e9e2493db9747d14fd4a3d02025e9f365ef8455f7753c98b21d604e8a1f207056b08b73681aaafb18245d69b893d8ca2656f738a94651b696da5f6fe3b3220b01da67ea07a7a5794dc2605502827d3feed0a48df33091081fc82713fcd08347996970e9c5a3c9ba30d5b70f1aec8a9136caa5413eced88b1151b003290a244d45465e7cd8239fba06e84292af205a86ab5f4fc717d2ef26e71554ade0839204b850f4a0c06e347ca5585a92d838f1e202f9486caa607eb7804c242a440287845e5203d2aa86ea366bbd6c8eef1ccd24d2f0d9c78c0139bdbcec3c0f33146fa45bb003eb06fb930917a9ae8ad36f78d6700b6d283413f7e704a555e117ce1a61a69853dcf3065bdd6555a9792da241566ccaa65c11e06c4ba6209fc1afc01c03bbf946b9c2ff7c1877d7dac46286b90b87f0c665f54c88e39abc40b845429ea2162e30801d6687c7175f16fe759928f818461e1922e6f2625b3836e2ace29c0be533e4902f1ef06405b0df0db6a0d2e9ccd7472673c0d8a2b9cf8f7c7fef8dcaa3fb9f2ab7503f495c8d50c2615106028e74f2ff805a7bb441d3c6af626d9bfa82785eae4c3e99aaf0bdc7eabe1b4969dc4fce6a6ccb43a24ba920d51535e5345242be6b5c37f485f025425056d36c9cce42cd939dcf82528e4f7d513b71685a8f6bddfaa4493df1fda26e13e2af123586272e7db66a4dc1887121937b6e93e1b2ff951ee0da5a0b3dae17eb88a1a4c82ae5297c4330a537d3d7308244f84dae6e5c56087d4bbd2b1696feab1c5d055e42272ac9217690168f453768981fe3e1072165d8c83ba22d9681ad139efc72e4b7142c279941fe21362c062ee55f3efca2c9028b46b884d81d8161541b625204b37109b6bcd09cf9e2cd2fac356f370ed8cbff061a30c49931f7fb4eeed9c98c41a982f278f5f449d1d7644bb59d1ab16fccc64f8e86635c7dae1dd72d8155603da553c891316c1135c7882583b97779dd581765447e684453422f32ecd1dded579ad5818884b08ca9a3a2c1b72b71e1ce64822726d480c44174ef060178f10bd7b96e91887311df182f624e6113bba5ee5336cf8934fe16e3c79b3de7a448482f394054138751d7cb6ee00f1a215b519435690f0a703d1b6826a0116789f8026fab499bf3a8e78adc489deb7e4be78ff2ea48024e2f639013f08a78814ee702189229ee2577b993667ae6611b7cdf96982ad5e261eaf1b253c88ac9d4ce037e931268278dd2891c7bf044dbd78b4ae4c77425c5367a3248971428048dd16dd9d95bfd6daaa4ed8be216a171dfa6bbe044834046eaaf6a86516c5ae044aae00c35031563ff088f72a5b1d0adb39791c89b43b475154af4801ff80a05a017483f0cd28c56fbaab76812db6a9a1645cab29dc01bad2534772d767a415c8182ecca488b85d14c8c2acd802893159b870a1ad84e452dcfa3aab45bbb2501f1cc0a6412d3cb23f6aac2f1820e35896bd19ec8ce48d72ddaf88e74700d5c772b4660e61c42fdf00a38d4229bf9ad109f1f0dd9171c373927a670d8082f99abfbb72ad18ced25af02d12fda57b2f1f57fb37682bcaccfb92dfb48896ae331cd7a8981ed97fcfa29b5434589d400a69c09a18f4ed1537a8d71290f3be1b1fd5472e94610b65b4823cf2c30c808955a2f0ada249af4b2543ea6116ffd30b340e4889c2250a1718a46a5980f88ca9531d18be332083b685447c33aad61bbf67a89c27e5b970f073edf53ff639afc0d250940fff21199a99e1e94f5271f860a5f5f22e610d301bdcc862eab433fcc77603fa5b95e3a9b94c745659c685e609893de5b64a6ba81e98086130e214d93a81839f889fd364ab570458f32d335f4429e2028210f3985ebe23f5fee94597be6ede50426fa319410cb05a193cce49af35cfaf19e601471f80908345e4ce756765b808df961388fe42a4c02dbab5f9f201c9fe83a7112a43d4fbc308e8d7fffba56be02cce3714f7744ca72f38e8638f560d23143b4a7f1927a6103243f2408d1249872c06ebdb5e01d59e15d47089fe582fb16605aa4f4c8a23e63db7c5ea6a2f893a6eb44a566414ea6ea60c228d7666a09bbe68c607056c6ca27e02a522364f9b3afd62cde94e4eab12c9d9f119632e97f0aeefd16f2e636147bfcbec0985f1cb7171028279639d0e9661992023d2720edf5e15a82f93a7321232085d215041a87fe680e0113f178445c4f665be4f2b5c186bed1fbc9a390b4312c43add649359fe3b7cb866b34fb0bec239199905de27435c017606315eb67ba53c6a97d1b86797fa19edde0b7d89846ff5e2000f0c523b71f1e71645c2f6fee8c86b1d91b31b6c42fda69dafcd78f29f400e32b8a44db9a8893902f01687cc78f0c77e9a1932f3ab874be6bcfb922c81ca081668cd30366ac46fff003116b1e81b3a785ebb52f206d0d033cc90c1c395eb0e11f207d0d033c8b0a1c319539f7b04dc18bb91483cdd782b8e3d026f8cdd48148f6eb8957913a837590c5dc346034cae04d2d53f60d0b0d18045a0697c9d838679b0a28f45e1753cdfa1480b8428e863f50d11871cfde3abfc353d9affa89b8a54a452c97769f45ec469bac875df1d7517398d4974b3e48e94927929335a74ff9b3a12ddd86c92f7464b808cde38287892b8a2d777c8241ac41306e169ab06889ce55a04f88fec4468b12098ee466ef967fe432a00bf68779c0f1275f64cb1c246460a132c2561db3c483967a92568e814f0f30151c6eecaac389c479f6802a9645432c4c9560568f423d58894e240760b34dcfc3ec967b4857a00c03bef2642968b0804cafc8dba5786ca0c5a1fb8514dbc03818afb6164d5a1958fd4c7f80096680ccd1c71fcea788b61dfe960c11bce1f95633362afc9a4bcc3185b8a4bcf7c7824c510d8e6c3f78590783befb77eba5418a6d5ca0146f4d4a6360205c4c133ecde2dbcdb96ad1d047353b50ea0185389d05ac130bd1bb9f19ff98f5002fca2dd711f4cd4dab31051615e8b0e68a2609ef09158b442456851ccb16c4203faaba3d6f428a66a37766ce85c4c752ff4eace96599829109ffb900dd44dff1f56ab69f0cd69d51bb0958197df855d29d5ef10020f49d8baf6f029a8b94f35e79654098198d59ad359ae390b107e5645d0e63dab89781485970cca44e2aa73480fcbab9ef2908896a06f92ab06c30db8bad02fc984d5ce87c2d44842fcebc1dc56987122c4b996a8a1c3c00225377cfc2291d9dbabc69ce9c35276fc6ff0bcc80329ac74ea71dcbb7955ec183c249c4f508f15166a49bdb668d912b7964b62ea5caa8ad8327b40cadf1c7d9da25ab7085b46f3dbc7bb6b89f1c36be908e4b5acac2e7d16e7db11cf14dcd1cce2638f0e85ca2e0eeb39e6513db740dfc571d921c1246f58053b261e92d46d8066154fae49971c9c57841468e2e81b387800744b81667c355a98172c47f0f4cd0fd896b5119055b8c7a4a98485f3355c0bc3338b2208f20f08e7a51fa8a73eb04f7aa09ef0a09b37b50c4853194b266fac1872665be191d4a900a45ff351aab7fa281194fb2809f385b79c20eb693340a1408db5c15386cc98668bf7ed0d17bb4025789d3ba5f9329bd28150d30a66034bc9eb0c9ea91dd8c65abf4719eb1d3e64d06060d2468874643a5df63d9d5cc7f142ba3f5c03bff071f8163eb95affa49c277c826ade8bcf2c59315d169e444cd6f4bcf9c4e98134982475e37192d43ba0dda456d3665bcc2ceff63cfd54df60dd9e6e3064f6e4131a409278abce7aeadf3c622ca092f25acddd0f430645b189547306cb505fd062b6a2130393cdae8ca7bd6c8b30ef27bc5671d08e4c9a1281a2708de63f63bc7ff0eddbd235cfefd1a4ce98dd95bb702275c37ee1f66b47c91e1dc1a209e26399bedb2b49b1264ba8092757d792b177b44ab5276d895c41cc65348f76b69208efb1260f090efc23e603c6b1357bedbaf39717a71e7fdbda71da0901d4cb8dca27e45c7290f5484700d3c268f88043dd7aa681208446aaf0011b473859e5e4c8021e5f30328a1cd98ac66e2c24c4223a55b5388283069ccd39a1160bf48b3a9e7adc186ee5c9de33f92fa00b28f1b81852f45a4a8dc752e943e828bdcc14084a6bf832758352324e4c1b1d93386a66b9c0a8bf9f6d8cf15256185f7f37f0c0b5467432af99dc95e84b75c39d75b12e8a2f61e6b0ce623d0017dce3ae1e858bb24c4594df4eac802101bb28b2cd89c764c12c7849d0bc72a010ce7604debb764cb760d217dea3030947e6857ec16e05b0de9b464f502e65ead0a3a3b693759290aaab1f0f604ec3e51bd90e1a0431eb4560894e786e9af30acf406e786301c6c682448d56160908dad75bd673a898c70daeb062baf92386b01d249d9c65b083613cd46b314e0a7a206a1d30182a10515388a992bf84f9de058095dca759cb14e4e31f471b4e299265fb86b39018de0ffd59b1ad71a371c5ba266cd7172e31966f667e0fc415fcde5f721cf594a244bda3d768bb16cad77c01a16d94a1acdd1ff327b13ab69857c30015f8f9b1e4907b5e5b5ef56047c7938e73b43eaf12a4b70d2387f03bae9d2d7b54f8a4bb4ff08185dc500ae35bd334cf06a8ba33449683101c02c8569be59de4d5011882630b9240f8dc0b7e8384d047a48a2afd0d6927e574c570b65add898e2ba8833df977f52e961682f61487cc3f99587f4d3e1dee086378a3df07b2d48f47240ab1841265f328efbea5dc5ba01c07e1ff7fdc4856f7f454dad92b064e390dc41628e4431aca29d7b6957e9fb953b557067276c424909b92be8a4147bdc65525fa0e01f1fb135e5d5a2b6f8fb5c5bd0aa876c7e7e44dea99a8a6dc282154c8ddc6139d59f692932e78f36a532b4f5b719d1ffebceceaf643160d3e00af095aca2c55329a5762eaa965512e9257222b1b71716fef6b37ce9adda889bac9e8740fbcb7ec975a12db7ea1fb6cf0dc8cc27c5a11a484efc90da3941d6e11071ddefd7a3d89f66d01af0d6f2448c4f9d22ac24b38898e0277a8b6ca177f8e8953ea380a4a1c45e13c50cb87b406afd7f04d93a917a6392c65ef701cbabe4c27d151c259b4c43219f751ea2c5a8a1c6c6ce1908db2401404fe391bc7d10f9dce4cf729521edc01deb1e40f054e08e89d8143d72e59029c158ff32892044f0676471161bc993c91d230fc137c43e69aa986249006000249a933919cf8278811cb7c02079960c5728f390019f443b0151307c988a6c1ccd75feeba64e646da8583231372d4f4860a7295318684c2fc2b41fc2cfcb18a92d20f12974d8a4217e4004161fc41575c3efa51b62fefa6cf0598ee9dad1886f63b02fec52af0124c1a62630b0c6d59f037a74957dd1ef5a13041245ec27cd263193c04d00fe80650b1e2f003fc10ad5495734f4c506c09f2a4d9898b54600ffb81265078b1effd0ecd3c9bf2ddeed009e41c0e8e8bce389f63ab747402bab861565b7016514d1b389217d7805ff0c1770b6062ac8b96f00820ccc07ec8626830a19401239c97fd48cb87fbfbeb81f24694d3f12df698d0b898d00cd3972da234f29630049cf23b2858e497a532c6052c7d33b39b88904d2485b6e4ca1da20515054605f649a27cf8171140e8eb65966599d691f2ad0750daf39ebc59c815142dff661dfb9d0d7fb65d2dd36b676fb76d5fcab79b8920609dfd7d12b758b8a0c1e6ed425fff2c1c70f47bba6d0ebcaf38ca15f902d26cc8aafe50840f628cee1ffd4a45dc545555515a844d113bb2109c7a3875301d8a23780a82a66918cbd3114aa79b13121f1e1e4271f4f1f1f1010272b2911efa958c8801c32d4288a6841296144c84e85732c20aa24e0700187a0840a8068fc1501cc12dc7126e0eac2807f85ee79d88fff03b61d2dbc40e99c03a0f015047fc4ab10545fc8002187c3082500cb0670845dca0e0e305451c51c40e1650083e3db4786250824e0e58701076d08ea04376ba51c13d2191028c8713d81798e08a9102ab0824a84a300135420a3a544658a1053347d783ccd1030bfc55f972d4c0258711489063092ba51c35f4d4af94030a2139885470947e9eeb14f0965dc8961d4ad31978dc1b94037ecbeea601bf1d47c56f3fb9691499303280378aaf7ffb0bc96f8761c06f9759c06fa751c00cbf234e3c459477297efbca489431402c11e063cb00de33e97700fd46fa6dfceebb037203b28abc3101de005e3cc5019c14bfeabc2b4966405e4056404e80c95360c049f16bc508c81b87427f80dce22920cc2c459802e4ce5344978ac653441b142846a3ff5008e318b28d4d75f214be426150a0188dfe43218c4fb5621c0afdd75cd7dbce0655c8168fff489638127afcf1250f201f5feaf0660041791ee663f378cf56691cfa4fa886260ed9a0309d134815a8f071edb1e1507e71f4d99e8e3a0452052a40fd01facef6c93040196f387bb6a755c8154fd172dd9f7745f6d57d77c5855adba0c69a7c912f2ff245bec817f96232994c269369b6cc96d9325b66cb6c992da5d2cd2cddccd22cddccd22cb9788a8ac649f13b97cea573e95c3a975a310e85bea2a94e4e8af4549d56aad329743a55ea35d46ba8d750afb126b880df676f5faabb6c69d2114a13bd89302d3ac6d95245983d4b3afa2ccd134da7a3ec24cdae68749c158deb6cdbd549c7eb4d700153986cdb1446c7bf1bd4efdd9c37b49bff650077b972a39f005050b880d60544714a72422a954aa552a9542a954aa552a9542a954aa552a9542a954aa552a9542a95faf0803afb93dea303d4a0a819e1d75ebe9bd51f8f8fdf7933787c947152046900e4e3873c1f3fdfb37d3c68ab34c8c767dff9dbf978fbd1f9c8b34383ca5019a93fb61a7e733d26f76cef9d00e9e4174720b1e3e104670268831a647bfae3c693617cf2cda0ede94b634f31a3957203d05f8f8fef343edef3f1dd090f011bc09a096f06fc8ed3f9e8369bc777b64a7b3c1effc75f8f0f8fbf1e1f1e263adbf47c801ce7a5f620c0fe0b0af97defc49601179d27eafbde09fc9161773adae3734119c6a7a2d9fd9bdf3bd1d9de8579d56ee329e275e975d1d6ef91e3f88d1ab7b15e83c2bbe24c2c7588c5ee0aad93d55ab1ec66ffbabd0c633ebdd35d40149f201d32f00b7613e20c80820296f5984d1c39c05f9004caaf9e80a19e31daabda7cc915ed5badc14a71648f84c04a3afec84738058624f0bd68124f216b9c14670dce8a125bc017709436818fc997359e027b71527c982a4313aad1f1436a705c85cc180aefd1ae353a6ecca4e347eca65a55e8747ce9f34becc0da8db6909a2ad4d75b9baf7f5088b2827a05d3d6bbd12491246eecea60d113d330639d14f0d6503abe86a2262745acd3119312d41d61a1c718e10aacd54c18f1301347e0ed37464c59d58882268ec01bd78ac92e64e208bc2b366285891c6fc20818403d9c4ea7d3f3017c27dc1f0b3a58c815ed1e442e8289214c98620eb4070cfafdfb300103a1030e21e0f801870f100710f10720601ee028601c2d3fc0f142ef47c1851ba51b3537704a374c3f278e0e85a32509fba20e6cb003981b2fd03764a0f7a38853c84208bce2d0e169018916986fa8a8946ea8a07483458a40eaa96dc4e8ab349c93f44ec424dce8f8f684131072292cf0bab895eb026d2214ae573eb1b495374aad9c4a0857282eb024914a824612337401f42b25d19255b512e928a5282d4828524a84c522a14829919489c25bea57fd16e96aad740bb1d56f166ec5af79dbbc47259dd9bfd666dfc96cf616672bb398cdfbca27525b39845d44944b5697da69caad4c9fdc8ac5add0fca813ebba6467696a59d939154ec56b7744121dca842aa15e502d3b6a50196d45910ed67fdbc611ab1e6b8c22dd25d2dd571ad9bc5bfef5b36d64a3abf5781b9dc810118a859b342d6fcbadbfd6e7cb59b849d3ebabf74bbe65b97c87a41c528ecbe827002b2b176890a3e156b4bdb0d749968dda87e987d88b5510a6d00cab3284f4257c492b2b9b482c7bf89c8a35ad8c6656b5ed8b613bf34669c1755c8ac5bdd0d7bbd0536252cfe73a2e05ce203f72957503c6a9c019b2af629c1ab7a22b8bfdccfbc4cae25f310257954b44aee352b8953927b7a2a1f6339bdc1b302d5f836fed7c4a4ba055d99f4fa17cae8b2392a3b92e29a7bc32fa5c0a8963b2258edc6dce594d28a5cc5ce729edefd85394a76e7c4b9bc81ba0d581d2fe9c0a9ca1b2ac6ade1bb094de5687f6c7b6138b53e154a00cf3ade73aebe55d61712b9c0afec18e148d69d057323b84d8f142236103091948e8d05643914e67367ec37560badd0ddecfe0d7fb78f3ef6cf243acb76ea3b5d6469a5555fdf8a454b559f6b5da14f4f4833da8669f8f55fd6493f8d8d3af282de8c3147d28c2a2f7fd93f879179a5a128a941249b9d57e1e5e4b23a5f924ea8a7ef514f8e9c73f89d9a4facfd3df778b74fa8e6c34cdfb7ee8fd3ca4d5fa2d35a570b3c825b0877fad1ae89350f549293803fd2ad2514af749dc229d867f6df896803eaf81a065d1bfa017edc0d73de883ee9bd4bce1adaaf5dac6e256f441f04928196da3c668f5f4739f948232d0af6e49adde23a1ac6d3a2a8e78280c0d3dbf62f561c5ee572b6f520ef57cf51427526e98b349659fd2fa968e4a1ade1a2efc0ae612d66b4fe79372e00cf5e989d4f0f789d4f7b1dfa392d6b2680766719fe24dab8fd17b034643ef2ba5e767a49cfad8db27a1ec57778515e9f435b5655549ca8132d05c339b88621dc4837defbdf7de8c38366e503a4e1342392b5a51ebbd6a59082f8bdd875d4dc39df71146948e930c1a3635326e6ad4c8a081d15dca392b39ab8ad25a2d5a2debbaacc52e8b61f7669976334dc3b8d3f1783c1ec87b3084000107582687165c90630b39bca062adf6de8bfe830c9ad20c87f921e2b8947356159d554569ad16add5b2aecb62d675598b61d762d8bd59a6c51b9ee29db7380b8c4008a16134451a91068828938a2d5d2abe441f629742cda8612acdc0b1519a510359a04c0cd80259e0caa3f1503a9ec906c6e82e258cee524e39ab8ad25a69b5acebb297c5b07bb3ec669a8671c7f301813c3c3e3e40e07f507c401e09f08851d3e27bfe7c6631cb9004fb62d8f2457ef6d6ca1d92f7f5d79a64f8baa4cc9ebe99c76bbd7d09c0af54c40b2dff53448a0e1dfa7a10226c68f9181134b4fccf5b4b31782300b57c1ce567797f7cb5e1f3526aeff1326fd0d78cafcffefadb7989b3bf4aaebf36cbcbfe7bedf1b55d577665dfe9dcb79f7d672b81330dd7dbcedb8bc43bda93444f16edc059662157b4bfb289f6389b806c72db99966f06f9f7d23fb2bff2f6c8329fb8c63efb786dc0fe9337dc2e740df6afb7d766af0bbbb0960faf0dfbbefd7de21acbfb035ad6e0dadebcb33ff12b6b29b365a513b0943366dc1b2e6d330fa1a193374adeb8a4457b1e7b30c6375f355879b3b0c1d2013566510caa0af9f13d6618d2632ef118eb0b6b5f8c1686c14b5f3903f00b5b763696b0d66dc4917f7daf114715f48f12fbac2512bb7c085d4ba2b6f8b51741f6f7e92d3101fcda57006b15c8eadfecf5ad9559c7e0bd017bfb170d98cd6e7a27ae2c6a018ef4eb93f8d3f4c4d2337343687f1712c58a3208b5457690722bb4aa62fec8a5545c4cd1f3655ed1b58ba3a9021c658a5ca92d73051607ca29af975576c012e92a4b56524e6bcefc293aa3b4d11a2ae3343a66932805387e0ab09bbc86df546a23e5b4c918ef60315b02bca50b4c85912e1546bab060130ba6c2d41855a6021147aa2aa3d6c4115b2a0961339772711da7c275d587ea525f5ce288fc9738421f5eb3be8876807fcd2b5f26902e3160645830943ec817f9430c18194e8563a92e71644b974a13477675912ed20798ea4385a931a44b85e154aecca5585ce7c2a96c1c502a942e9c8a8da5615f0c8e33a1bd4218eb90fdbd591591006f3f790a6a72927fad58c403355d6aa235e80db51147aa1bf414472e0a95aa4f4a411950a49c4c85a0a58ddad0521c914f6de2087d684d6a23d2c19a96a805d37fb424e201437d721d8ef2944c5949d15b40e94d4f1a278e6c5af2d349fbbb8eee8817ed4f85a0a638f24a5ba8e1276a22e5905295843a698795422bd7bc71407198f7f6132947d68e3a0683b7a21db009fda92bfad5ccdc0a06aa2a595522155cbd77a27a92d8c55195626b68f9cfa44f589ae49287505a7342e85c47a9bb731d9d93fe9c16a494c29ac2a9702bb4b6685971dd932da2237055b568f87293ef28970bac7d188494ceac7a92484241586155ded3a431d6524cd5c3ad82b0d2b62ca3104239453a38e753ea35da453a6093fa73eafafe189aa875d70c445d4f71e43a5c74f573bee884270bc7d1f5028ea351a938aa77b332165213868972e04d4d222330f5902da157d41447aa0885ad6a3b8eaeefa9ecf5afafd5d268b74cda3f93f8dc2aafaa696b2cc774d0a1dc0ad771295cc7a9702b9d0ed7712a9af65c8af65cc7a9702b7144e33a4e05748210d614e864e2b403e8c4a978742094c70ab702d2014a79a4804e9c0a4b1c4998242401ef2a035f88380ad9c4910c95de09f9a013d691c24f123194968fe9d0f2f1163ac5510a053af140ca8a464807e844a3868d1b3a7e8081e15464d7e2f262e284c958fbb02db81c81041da3bc35b8fe885b5c119f84ba443a10100b3e7c128a9422a1483922dd24716bfbf877577c5c978dd5e3adfa1747aaa7f19350a41c6cdf754bb1e7293c2008e67d222fa795465c41e9c35ca2942a7521a52dc4443a6013f853ebcf4d1cf998e208ccffc18923343e35e2888d3822ff631347ea8b54b0952e222170f62221f0ae2b5ac2076d9df7d83ca21e60a8a5687c40603c85e7e585c17c6c3cb6122d4e92dad6525afe6703a18923f99e0d04660391d112fb8dc17c6ce248be4807b82ae1a2650c2dff6e1b4486968f7d6cb4fc1a2302216386105abe65716991ebbf7b6d149dfd24a3fc122f2ee29d181118be065fd3e06b58d328d6264a0b4c7b128a94c2341116ad83f346911eed3d22299ac793e77bbef3d55380be93f789c45ae73d0f7292a743b146ca21e59072483911458b540b321af6a05f890b3ee00e7c29b9171d296987fe49d4554e94169dce73291de9e974b88e63e9749e247a6447a3f869276f68c9e75438154e855391a9ebee8ecd99cdcf22a7827dcc322e258b5a9663e4bac8b164c0b59861dc8ae537db10fbbb619953e1543895ae1a42176e74a1465bcddd5d9b73def91723e59072505a5c12ea3e29754558b0ccda4828ec3591947bb1ab8974f3b5acf3998675e67bd51b07ec318c9443caa9f4cd0daabb63feb0f2870edf436901fd3de45ebcd716b563c1a1ffc3110581e116f221749c2f185a18514954129544315c6affde461111b0b6d11a27d9cf4adabe7d0d48ed3871047b6be7a5378bd02b401c6c739c3872bfc2937e85aad67aeffdf8d66efb95753d7d59343f15960741f354ed506f67e656240cde89f82f9b7c71c15bc280e58584c143c0d372c50518ca952a1387b02f864d6b3269594f4544c02a424438b07ca7327144060582d2e8f910abfcaeb87faf69bba9058c45d171cba41c6bdb239a3a7f73d38b614a5f827d1f2222025716b9a259fc637c51776dd15b761dd4b40635bd1344687101deb26b91126e2b5986bc441cefe1eba146947d31bceb04583e2efe03fc41f171fc076908a1b5bdea3dcfc1da701c4d44046c59d6c7a774d39fee36427c80440c2456b48559a47b27fc452bc09b6a8b4deb2dc0d87693beae9f15455f6e9a55962df14684027fa1a3f441c78f21343ffe14fd20ca02dea35a310e8d467a8fa0ef20f2210810cc0822071ad10b4439984002103140d9c92e4503b2a6bcebfd45607dbddebf0257ae80b5257419a3acee1357b74462d5969d0f5132315ae75b6bde50fd7cd10eb0ec42628864e08d759296666666666666666666666666666666666666666666666666666666666666666666666666e2f653d5af565a4324832549b4a13520f5f6530d1d55f8298e447d8231663bc0db4f34c42812029e5f553ff909ca171abe48081886bf05a20a87ef4f78efbdf7de7b3041e4f0a27368b1f40b2287141d44a723888e8850101d154a98a044032525250fc2c0947c8c2850402f8114f05b12a534e1255e52f234ac443588100a3131313131313131313131313131313131313131313131313131313131313131313131312f86a93d864d0fc9db7ed679bb61dadb3ca7f674a6557ecd07cdbfd67e68fe9d0f9a8fb55a79e827fe8f9f797b7cbd365cfbdadbcf3c3f3bb6c47e866512b79b7d0ffe8edd2cfeecabf9d6934b747ebe2dd179ecb5f76c253a9906fbd8636fdff3989dd4e24f66e138f86d36c1dfc926a1b7f6e7b6359c65e8df4bbf3584b4b779bf2c3df289ebfbdac76bc37d509e77621b66a7edccecb1b777be660396b34ededab43e5f6403c791dbbf30cd433c79a3e4dd097dbeb369efd9eea7d3f91deae4cdc271323ba7b53f352d7b6dcb5ed37e87f0d3ef78b06c32dfdaf9b6858bfefc276f16efb12dd3be3333f69eadf3dad6d938b3709ca9bdc55c4433c0f3336de264a21960cc3acef5247e529271d14f45741cd9d1506202f4e55780bea438383750c6eaf8e16f1f423fafdcf4627429a59c73caaaaa2af9966271a394525a61c080010386dc44302c18160c0b8605c38261c1b06058578c7705847185fb0a29e58a39e75c51555555ad10d1608588063737a7130d8d8806d8d69a95c4d869428b63967543768b4e7bdef72f0bd3fcfeb34eac2b9fac3936b47f278786f6b7f0b19c191a7b8f1c20b4bfcdf941fb77a27d07fdebbce7eaf1fef19ff7bc3dffe25f9e1dc3015e96ff85bdb66debdf43e0e3b5278912c0fcb12dfbec6f2ea1bd3ff6d7dfad84f6d6df125a16c90063d8e3b7b6dd82c427f6f1f7b32cda81b16cf2f15a36f178ccd2379f58fa234b8f1abcb3b3f4e413d7d706fb9dbca1b6efdb7661b1cdc21cd3fcadc7b2bd7f6599f7752cdac0fef1c50b8df17b08bc346879a364f7493cfb6bb3152219e09bf78985e52b9bd4b7aa75f9bfebf0ad9c146dbddf1632fe25714cc3fed65bbfed161d7ef8f8ba2ceb7140d1f72febdb6ed1896480fdd270eb76219201de2796c6f276b14fac0a4fba0e74bb45956e7d06dc03663b443610bd886c00e332ad50f2c24ae98897189f0663747729a59c73ce595555555554857cab8962109808a8344eb576b1753513000401c315000030140e878322914092c469968d3e14800e838a4a6c4c9749a3d21c48519051921062082006000000c0ccc8cc2611004d78b15e92695fa2c4ab911704f200c20f008b99a4688ce6017528ba74e8ff27f705b50c3db9bb3a1673d9ea59c06d02e65aa872dc27152c911ec067a1e8ef4ad0f5f083a97d2861aceab3e937365e31e4c96ad81701a0d3792b23d6f71c7924c8872464e491c20a1255e491c23fa911e9086625729386f85a5fee4f30b19e999ead3b64fede7816e8467ab3498541db33fbd211e373d0a0eecf3b454d9ba6c3d5a3638820aaa867f040d20a102458c714ee37889964bf21c35c56c9239b99e682c5eca24ad59cd3c41bb5e22f70a33f07ba8a8432c2201e5e25941f930b23bab0f388c4b8a53ca5f673d386779f10793269e0dd7ded17c6a9de77a1ac43789c5c843a94eb9b73c27960ed922d6d04bb47dd5816597cb7211c4bc509189217475a4700a2f3eaac684a7f84b8e50bd7f1c3fa7549ea8578ee172e1075dfaf3890bf0c7eb6c47afb2588a63c879c555b80e7d80ecc83ced46304c30f659566c818b0ac00fffb2db32a4326482f6a6f2ebbf2a05f5626449f4d2629e64e82f2720966cecd32ccbb6a4eb0a4d693cfb3e40847f1e1f38c4495e1565814c0f9e3184f67668734306cadb36feb8e59d7809678695d2cef0e09e393d407c5f07387751f32996425c9dc623b60d6c36c050eca2d1e78dd0a9c656680bd1dd98d06dfeea51b5b01cf9bf6e59f8c224fbb0ed4500d85b4c92c7c3d1531714ca095ef78a9845293e514a49a22cac29cbadeda5a03e044a927c775472895b663405d83a6d83a68e7cb4bf61abec5364141b3019f0fa9636b8d299f73646013011ab041f58e0e0bcf5de8cb912ab661c1961c570ca0e445b4f77ee8cf93cc9dbaed2372861b3fee3587d26421ee85087421772f0f8c8d8520e474a8560d01f767eeaf2fd95cbdd92ffd29903a4f172a9de3d0b18c9a81532024daa579a6710c63d8b971327cbce079d4611b080bc0b16f4070df22db5e5e799afd29a49fac91b5607203b7e0a7b95de70bdcf6a3a8f0c5c397e0fcc5a889d8868e5de4bc06ed9ec716ea2ae5721bf2d732050f4d6bf9f3a0e536e5ac0325c53e6ed07a079333986afb0349d37d5f01c0b8231f114335be3d2728d1813ef4bc2410793d0500e65b3d891af07bbfdd5aafab04f598a8d0d993ad39e9a70fbf3b48deaaba662cae422463f891d466274edd0945fcda48e685eeb0a304644dfaf8f923bef6d68cc55a7d6e802fbcd97690eca7ea4756a86ea601e0b67d39e846a9186200aadd5ccd94b32b83a7eb88791a4a3e959bd9408a9bf890084e57dc1b2b6c1008ec995b95d691a66aa18935d4770d36df2f19bfb99a76519aa2df288a3f6d70ef67d468fcc35dd69db0cbaa0c9c202d82e504d06a92b1c0ec39d0c7a29b53ecb30ede2fd4afde790c313d54c70cd2b9b2345e49a0722be179ed821a1dbde0ee0cc6687ab33d3a6de9d153ffb73d653f58997523899a062d5ddae81a4cee1ac3f8cd0a4be946b128ac4cf65c488c8a3f787d5a3531ef3b1802888d180cd251826d90fa46d087e0395b5f8abe67fc6f0edddb630bc003dfd8484e7e891e5ec9d9aa94d22abb9e5735954688239be7dc49ffaa717c64ed204f7885b7372d6b4f457d20153f788317b3acf114dba362a5fd089a00f7403d646d3755e238218b0e3c26f9750883c2b7000c7ff6263a0bbbc9490a59eb3e79d20f83d2348caba181b5cdeea66cb9f722b5475bd94549e44c412e2a22d9f9485776bcccd303c84d30d4cddf114ea26c2d494166765fda4ae27a644aa4e178bd18724e4eb97e98899f472f72ae965c9f06dfebcf6ea61595113d562a009252313fd13fe14ef71b3833676a70cb08ca3eebc8bb97edc3e18b251e06f1f953bb8f337c9cc6853a425a81444e8b4c8f988bba47525debc531d49dc69d9fae015e66b05f9675422d2eab615a4695c0c5bb34d96fa2646124d7b36921ca10cf133190fc3024d8543816a84f6b549d354284bb3731028e0450b2fe2a9f48d6f4969ea24cbdee9d00151415e4d2664b960bc4c8b48e974e857bbfb30c6673c053d7707d19d3748109e5cd4d90ed5b914cc7ed364f7537fce0198649580f3e699a3475d3331003acd3a1048c48d117ff04bc94bfa42a9a0fd0079960865fa02955921a6b28596545056bf62c5363c39615ab5459b060cb3a4bca58d8b3c6ce262b6a58b366cd8a0d4b61e56248eb3758062c36099df1c2058f2cc5a33252dc76e3bb0fbc7b033b9a91c6c58351db84d843e137784a20ae8ea5afc90f317839f86c90221abaf6eaa8f697b5ac344a9a56a2d210efcade284abc4e3dc05c71da2b50d30922cee7f751a202fc8e62763d6464fd83b08ab814f4129e0eea318933beac9cd52974dba00753461dc01b0e9c09fa8125567fd8826befb50b9a005651e7345028fef554965de6e7f5495a2a4a2083413f901248644663c04daef8ae586e00fc5946381405cb8ebb2c9b676726b7cd21008ccdc5e84a4ca3979df020da2a667941c7c0c835b151ec62ebe3a1511f5236d3a069984371d4907be9dc2ff5a601f6bef788fbfd8b071e1b05a515987c05f38671318d513e4d9c8490b05c91174e2117f1390168eccfa02f655e000ed63ff5324b3ab436bcfbbe50b6495a8cb60064903ad1d68a804942806cd4007c3f9f355fa8acf30dc0070662263fcbb102aa01d82f696a5c5fc96e53b9cc4d0d7b0e5ba43735a27e53ab3fadd6b1eb724827811303504e3c7ff57249a22e70ea1a0f2a197343b7654e8d736be644c4d200242d225eb4b446a44e2b6a8a2969884c3f3dbd74a2534a4d315d3ad1d3a74d2925757a51534d4b253dedb49e0617e371dc07d6d6f582353c4a3eedc2e2eee1e0e4138dd6c1b4b01018031f34a6f125e165019a5823ea879914ce8f7e797b06083ca8eb9c45830b945f822f05d5fb0165c737683ff0c582fc94c5bb338a6968c3385053580abf401012a814aafca6b3fa7ba751685246ddfa1b7ef3c5604b62ac5159d283f652f8c2d04fdc4f37692cee1a60f8115269fb44772bfcb28b6b5a0f774c379af511f9c70406692a7f6a8fcf33cc5154ba58c01a841a03badf8d0eab1c255b971610439f531f95723df996084dab904fbe399e130497423efb33d53bc13e609c8ef7d1d6af502034104527d8a357682fa3ee7fc5c38e74f418b967b91d77ab125fcce7086b300aaa47845e0db8e1f4fefd8c40c4e192de7a20d759160e4d1be0db8e48be189f8ded17f9bc57a211b3b7b313810f17cda6617b9708e023ca5356fc27e3b12e5ee74fcc5296f787746f76e0b4245100c02a98f0c560d2e8052dfbd049dac9676f9f4cc986fc08a40320403399f6eb6d327fd26913551549b8aef1fa993f9d20b8fa4240c581a16438b05a34014df0372b049058f946ef41f6ff13d2a2c3fa1728af14a60d018483663c12cf9797986defd07b81db5fa0118dff64e34a34febecb6721e22b246a8a5f67e930475d54df45af8bba7c0a48b1949b5fa037b577363a89e78b41eabf40776daf4052c8eacc9c02c586e04d30509e457727c8ef748d2d92638d5be40296d4dc9700be5893af6bfa15e2dad20ee7bf2edae76b0e2755dbbbdc99b13b3f906de44f77966c27c9d6b973382faa3623c99d691e32f454e3ceee1ad5ff6d883bddb7cdc167744d6f3234c551bff5cadebe9de4942c85dbd98cdea02332a4ed868298d100befea4b6bff9f0ffc8ff6cbaa834183fe1cbbf6ad4a7dd56d93f2b156e916704364ee30d4d3ec45f91271db8385248a60d14fe66459e2b33e2cccaf8e5177b1e4d621579f27a082b6cac39fb1779562f9afa1e3372dc781b35352bd3248b3c5391331442043dce93e23afd916ae1a5cf65231e787e07ba19bc41feddc90360456fe20639094c11c5b1ad67a89295c1f33703b479d9ee19ca0b1e30ed10aff92518a5568d5fb7cdda859c3161ee5252e71530edf485cf57c340c9e60700bdaf9cdb15f1c4e66006867cbca2ef7c85fc350245cd432f0aed5ad0083fc589d6ac990ac42e926b464c6767d7102ab9204540282070bb7852ac9e7ecd3bb2a396548380051f5dd0e8a366f2585b4a1115aa0f46fac835ec90fd8204cddddab49c8250e97c628541c76119eb687d83b0e4c564295329453fe3bd6c9874857d0f6a434c0a65513783b0e6e687f0c7d84f3ac632b35a7696bbf7f3da29ac1ac8fd25d41daab049f9e66983c8984bcdc3e93bda1e165d3d439a9d398fb541508a377620aa20bdb9477d2ed806ec8ffa74a9c3f65232e8bb4861110e9685751d1dfd9c048932fe111d88514177770c2ae2cc4d57322e67541eae48ff6b0cf4a8c2cd69743c7914c075e49e7c830e320fb943bd69a6ee1c4afc410ccffb032bd390934c109fe011132ecc83a0e9426abca49bc61092deffd1ca4a928f0963317f1cd4e10ad61631fa82a8a19094bbe6dc2c8aab1b9a474b67cd83f6c46c7fea0a6a9e45ab11cb43ec57b45bc6bf6ec51220dd11cf838c8562dd45f465fb54ed7fa3961615c8726d91a8abc220b61b88b1640909921d9f8cd6ba1b5bc47a65de5457ec416acedb5460a88d054e1e0f8116d2d418c37d0af2149fe5b385323efa9f4ff8679907dd820635fb493e453d64da304c7cd20a5dfab3fc617c23cd95b14388185725a2ed34bdfc109a4306f19b8e879072c93e5f3dfa47757c0fa10dc72ec1bff86e12cd7ba4fbf4788cc3291b836e3446b8deeedcc2696b8cb23f5ad5ed11daec3f84249e444e7960fee9015d27092f9e7b8fff9d0676405d6ed6a7c36e6c8cae6461f49498e2f890c2ad20d84b8a622a0051759ef723289aa3b8c36f88ec85a54a9ab1af8e08fb0bff297155c7513e28ebc1d59b813e781b648fc71cd9764d08e09ab8f5dd756d6809c1eca0f1ca029bdae99e79cee6afb09590bd11ca3eb318e917da0b25d14e9ea3c5de5ac2edf66e98e6236e158ede180da7b9930abac58a8a57005a3ac94816d5534ae9b106b6521ae10e2e1a806c661d90fb4a8ff5fff78a4a2dd8283228a1678209b255392c48fb5b251a47a503c28b1cbd3aac9cb2dc03d1985b3318c42b29425d0b80eb7d63efbf30ccd14e2684b7c7620c7d239120a4e961530f4b863fff41d75a51865fbcf946a23e4883812d5d2cacb072f2b31efc6164b20c921e222ddee32cb5e53242fdc1d1398507dfa5b4c76d5894ed926ad8ec6120dd08d793711d2c65427b397d353528836a042819e17bc4fc30004e4648bf650fbd57f7f867ba0bb8f39d4a6c978704767ff6773d6d24741be9c535636cde99b234cdc364b651fd10ca4105456d9c135e3320b57628acac2ab6fa3f8be4416927c19e4a8d2d777e8b5de8fb455e0419d5328a92466c6c02b3c8b566c7380b19c753dd6324a474277aab9f7827a375f521e34fe80907b8f237ffda63b74416de7bf41ee41cf3e372c6137eee11138f2df8c0e591ed71bd35420fcf7171e9ea08430931ca00254c4167dd6f2a4dc7cf4ed910a60af9259577e90e23ecab5a9413e49010bad336cbf2a3d89cd8bde392a8c25ade42720fccdca48eb473e0c1d49a601bf08a0612a943d4d1fa8c2bb919cd81874e8b5e400ceeffb5c2de362fd8a009565e6783d7dc89b91b0ad76eebb4df81a4c7de733ce0f98318ecaf002f7211b43ff1bdb9303072adf12f4cd3557bc8ea931236955abb701118343bd911cbbf3f40e44d2b06f6d3d6ea9544a9d27e18d6a78916fa8ad39a287add458cdeb71cb391a34103aab56fd815ea598d9c13bf736afaff9330f695579575df15b981953f985640ae8fd5d7803042f68deb7ad130a6413889dbe37a8bb38de5156b286dc51a170d71643450bae2c58fc6d67e81f7cba615ac0c0b5792d2350b3ae7bb03c844d1c1aa7e6a603a12907d0edced7fd99f300f4acaca03912f6423b9b9f05b28ad66282c4377349aede4a49ba1a0d8d7d80394c735d518edbd4278acce510b71904d52031a5193a9311a3b0ddf313e6cdf45766c5a429ede090023d9e5dc5193a82a72cedeecdb3b01f7b260abcfdcf28e16a34752918054392a7d24a2f99d3db94705e809997d4b6320dc873d363dc2317cdf293e45c314e31c3de1ea0c251a4a96fda447119da5c54d467d8f54720da871f165966f77f63ac4adb307dee735c53283235aecd7bd1366f1dabe31f6f34425d1ea9f07fe11667411b0f790145d7efc8c4326cd9eb4b47d8514c9c01d785d6a762b79192357e32aad1420e5a0325d062b66e8f1a50c86caa22091650f6cd014c1c290402be5e19893f616e878e0e083a872494f5a7d1526e660666a6697c0028810c3d9a09aaaa35a9131cc592fe66f7994343aab9f7dd6060922b6828c73cb555d9a2892f05211d616b5361a4d6d243bf3fa3c94b7bd6a49619879ba7553454cbcc4295b7bcec03844a3cb6a7c44553fdb8d320b6b96cf9c329c1d30195acd4f898722597f1529a5a54d45fd4ca4f2d83968eec4126d5704bd68efc355f8337a9209c6dc6dad51186a26440359f71d6aae14b39733e1eb256ef7e4738dd64174a2c2df58bac9b8eae991de400c8508d0cebc0721e3b3ffb7c9fef3cc4fbbabea79169196ea616f6ecb5845912b5dbf9ba0c7170cac943c2f22ce345d85b2ad45bb8ce9ca5dc0441d09106d665ce8b9b7b34d695400fc0447821cfacae8016a44e5fdca68da6a5ebac3b2321a9255466f45abf5f5af2c2e2766d9b541769302a7f3bddc490416f662dec2d14c1da6599612899d3a2f37a38f10bbb11a470c6da79e0beb4e8d362c481a4dfbe1809701313572290823725433d43efd2740683030cacc0185de351abc49379f92180114d804a1786fec7b98a569d575279df6362f97779abea567d50535cafd9513cfc8e207ae7119fdeffe6e44b76d3d895b626cf932ea84cab42cedf1d5a3b92da7398402defae46507a05fbf0a7dfa0e0c4508308dd8004396304d98bc846c1ca247b359fca79fe18ae52c9448d24dad1d0dcf9646f4b2149dc68484cd44b4308e1bc4dd3c901701fb61db76669352b46fd1e6cd9bca498ef888633235a1c2d3616de9d53837270ca539d2516b07a13bb9c753c1e875f4ccaf981614a24814446b7c584625ead3534cfd1454b67630b8871a9684e11477e8606a922387b9560ad1f0b9d99544f1d69eaedabe3d59cb9d7924f4fa844a00991c2d065428fb748b86536f9739dce0a4451b43d0f06359ae9741300972301813e54822e3d015a8f0f00f4c5a42159d2b54052d2a82f097f465152c6155faf1b53363a338a6b87c7977d898e6ebebc7048f12a5385bfc7709f4d97cbedcc96c8e45feccd24f1dcfafab804e62b2633ac43680a8a79f397891dd11e7e8d3d44f202113b1e0e94a52ccd09584064d298fd3b039523a5c2347c1049232f18cc427831ccc5e843b174e80e6388b20d352585f926445dc46290f980b515b5802b59f26700a8b6573eadf58253c189ed76e8e9b0db933db77ea61556d0fb7ddcaa4f223a28153b493073cd0ec5977a43638a1bbabe71302c34317a9341d3996d055d84d1bc9cdc1b46886929e91634e6eaca609c1071b0cb3d1abb0f44daf82b4971932b0d9ec8332422b3309f5b9bc5cf9c8cd8c3446585664e14de404b938504bf2e0bc5b20302e225a8e2c83f086c4909c5b7750d3c77e66f4b93d740c31b3df9951047213dcca252808217771e1c24ebd7f297e6665e9dad1a5becdbf9a27fa1aa2083b55a1d92cdc5aeb661dad86246bc4fb9f778b7b6477b47e510af18d3b04d246cef66aa44c003347a82fa0c7a7ad612fb3ea50ca904d30e95357cabc6a5cefbb8da2cc07c974eae77ac3d71996456b6c41bca4250bff744ffac7c7d62a1847018d10e7387cd373462c7b46e2f71ac515338f54814f0797f41930bba91d804904701089dcb7dc0a0240311ca86420f500157ca9d64fd96cd25a8d6c28227748c8f48d0536d39e5149b60c123be407859efeb0468683a7afa73289dc0c032467c40dc6dbb71391aa58f6630258e0a8bd4193579967f49ec10bd4b85d02eb11924ae6f592cac92f6797568716502750d637392cffd0dca2145781ae158ce427a787ab466fef6880549dd33452144dfff84932882f56a0fea439b23295cb24f3789873f0f561b38f49967a8fb042253b2dfef013c322e30ae0bab6d81d1bb190db0f074eeb2f61141fdbc2adc0eca65baccc085c2948c22013c0b923cdda082d1f9a79484049008cc87a5651e5edce0f679a98a98d5a13c2235faec9387804239a0ad06b83eb89639081d553f4e228a2ace32fc35af03b54aa9d0c5951a0347da145c6934d7ac0f436572756d6901a62877faffb031c0d5d9d2c5fe61cc734f4bb316e14bae8adf2e8c88cf765b92e67b4f3a0d049d2ab9f09efc198f2a96fae9fc3cdfb05d9090ac72b066da5495685961a9816a9371672e93ee66c5a3c5b40d49855f2c121749c7338a5b484a85042386847e74271a7ff483964c64f7b2b503844ff6fdb8303845c08bd4213c7bcff8bdb59fd803aae6b1ae106b9c09b73ca05c280b5e365a8c08f5294d602d71fe8de34c7945b27be9dd50ddf1c02ac52fb7ab48f4697a35acd30a4fd63351b3da996a03157d13b601f73f15a000b185c09e952e5d6666640642328da7a3de822c2aa264560bcf101ba561e55825c521755ad07261cf7828c7a91192508160e0f573ced51a7237b1916c36515c911ca3adc91daa39af651b72e7c4428f135b79b96139fbd18b541343e906ad49c9da66ecbb040998b2aa2546ee4f7bf10a75b7cc55322961d6a44d2541ef86d27bb266e25e9e13ea9ffc825a172e68031551451cf6b7726cb3ae3a61626b13cd097eed4da4c5f4c7b7333681a6ef459e2add8ef11bdcd9d994010566fa15e7f3edfb2938dc6014e093e4b8bffcf56ac57d11d317890458962128395979290680fa420a26110f968ecef4b9f02684d6b704fa2f6e0ab9775c34ff58d9fac57d46f9b3b9e81b79fceced2281b380a0d28c094ec0c7464318eac9408dbb442e102f871210c14b520455b35f378bc13f2bb98575ee8ec53d9c5bc48a29b53e43f14e04700e450f49b3ab71937890c4fbd1bd30da8326f9e97ce623244fe9de77d0d3d000ef542974b5a48746c9bc91e4ed8772c7726465b2c9175e9d7158a475352634e3ad82bd479e10b190b73a13074b3c36909850af5374aa1d4f93ce0e5628140aabac52c07733d582588861d87824db7036ba26f857db1cb1ea9df1851b6cb827689d92b06e9d648419e817b3501e85fd9454977e442636020d8e56b9b92956932b630d11f2022bce958bd08ecf2842ac74918d3527de0afdfea7519203464bc2e171766e275b92f5705dc11a2ab35f5e4bd3c4b779cf2d532085085765d06ff6ed68bd55d65ed6c7660ac88d60142ac509d955de8cf0bd7201b1251ebd2b8d0ca55dbd9b3ed7ab4f2375170455e4a5fe3b17008fa9878cbf1b1f9300399bc434557e68b81efd7659600f3e0ffbc0da836c1d4027a098f10f4340b8fb7db10bdaba17a6c3bcbe99b166328c26efb7fdc31732cead76f5b550fdfd94a92e5a147f9467fa81c3323221e757b2872ceb25987a157efbe1e9aa9d868a5e02ce06b55977b285edf69dfd03c9fc55150a9f89ac5e0a06a219899cf2409cb3bec78955bbf4ee45d011ea0bc2d5e7cc1fc65838c059decf8aa0a13efb23e9e3ecea4d5c55f9e28c4ac8fe1b263c72a6e539ee29a4d240c83ffc357413567711afeb2ea94f25ffaa169418a6c25a6f1f8adf7cb80ae37f95a6fba5f3e397c915d9d1fa4ee97f994aed665946619261b42cd3541d9e386c2bee10252ce75e17ef99422c9bdb7ef7496ff043583c0b532fc7af87e8cdaa3b5e52de5dca92a986fe251e1375797eabd44181a8f1a0713549fc83509051b4a62cdc7771e4e243eae9269e18c9f3f65b36e583e9180570ecb6061535521e52f3eaa6af3a17864d13324567237e88bcacbf32989d407a97081ca2f67ed5b194933f8c0f38214dd53bfc3a0bb8ad63b2b75ccfaed73c5e554758d2ccc327afe06f486de856a8a14ebbeee1f7bda551afedcb54ad4c424ecfde40329ae37d1d8723ab7117d2c231fb7af563c6d856bdf603de1206a6802441cac410f9727c9c588dbdb8dfe67e34b06684d1e1097833ca32a9255a67a415a85ee3c9fe3ae250bed6ca326020eb1a4601994655326416050d1482b72a693c96b3f59a69b6bc070ac3c67da442455f6722f08cbc87164929e56552c8bcd8ae444cc999d309a2c47da8633bf1c1031d34c8e09fdff10730066fa513c1e553ac40c567af24e17c0285e52b1f983cd748d0a0066262b69c436510cc6f22c6adca8ed0ea76709e9bbe5311102cd5d585242c61c6d15f5d534579d832bc44cbfc227a2ce1436f5c4029a6602e18610f5e067a9be245f36729753607d498b33dff35b621b0c4a153f723192ce3ada564139c9d9a0d4002d77402ce43909b89519b8fad074b0da627389494e6945c0902c738e99acbe0ec981935f167df71ea5f0a07c08124a3444d5017839e32bbd858058ac54295520f8b1484f26635fb5f9703a0ed833fead453bbc68167c64294006cf44028bcf1a9d787fc0160c3eec6e0e7c0a3d84e2c5af9859a98ddcf2e5a8cd847a7997ced2383fbd3c6046fb0a8a99e5f7b64163e0aa46e33d91484af0d58c8aaba5d0c86040c5efea77540462e6a544df4cf307b563612722c739efe73a35a4f9a556973d42dcf3100d6614f02046b809b67c297723423aa0990efb96caa878c1439bdd6e4743f2d00ed2c0b9e0a11053690f25f783a3b9d743981d47fd21cc3ba0d0d6f3197d0659b4ad662789ac50e11c9b1937f36a7bcc741a35e088b4fe81ae96d2d57b1264b57cd0cd1cd45805ae9ac95ac7da749520c1d4bba71002d5ab293ea8c43c23432d4b40c94317d30b686171fbc0ef6bdf051433127e232ce8e8b54cdcf5ae6f7b7040ccd30bb56720a572d7cd29400c7b3fb63dacb1330e1d7ed18eafc95677ae2c1c7f26db6b9c6c1f875a454d4cc899fc5095a6cd2e6591bceef8cbe6ee4aae41e9f6a80325919b24e8e08d4b918862686258002e73c7f372fb4f09c4c57bc1444ffd82fc3b5620a399a2e0c484fd739cac22c71fba8a390124c28be23e1e93a2143b85ee9752ce537c8bfdb6c929feba56f9619ea06d1c79dcd337e992cb9d203f4ce1b408752e16b316e1e84f1504256bf606392280c6cbe7858e76c60fc3e92a8a5c79ec14a205de85988cd38c661a3a6397c36f5f9543d3a95c8c8f39b24c0dbc53ed4ef143f5855619713e4441e4d1ce87adb639583a1fda80b459d25e795229815511076aacbc28aad3ee56a37181988eda023103d32c831ef5773f195ca7aa22ed5d133e5014df5481789076df32c893f2fe1b0ced578457011bc4001cd3bd75233ca4eee5021d552066a68d4b64e0a5caa5b492c21488b90775df796d812d43ee956cd7574ebe06623a9f7dea6f6f71ffb08ac26c0585ed81b6795f380e961b7d006ea4c3eaa2a6135ce8cf9da40f98b83d74af089ab3046b082f25b1d4e324596b0289da77d932e5396e39d0ff2ca0f40a215a5de9a059d45b8e20d9a88ec64963a789ec6788e9450a11c322b36cece61d72e8ba3a415201306623438ced4742827fa575597a7a314097110d71f746d8d631317e7a3fc2d5380baaab5be556abd1486c06d34d36eaf8bf64f8fe8903e80ef86e1d58440e9457a72a24a512e3c12a2aa9f9c27488570c2c02c35162639d8996855c39136719b69ca2837eabc399305e7b9c70564431386c175405dbfb613790a7b08171865c96979d9a857f5e12f175b80809a07c53b60f5b49282fd726d6e363f66b2ae1cdc4f37b0e17e5723c9ade4f0f82cd14c09d60f8675636c212a3fe989d0068485fe6f0e7df908e6bd68a56136a770e17fff2a87d271911a9d307b5bab8cd3ce41919ed7d0993d188421a41a0d9b3f745191f282501495ce4238053588bac0b0a0079c5a95ac43c2171119b21590b06a8ebd982de3131449a4e37fc4b48bbec4dfcc67e5e968254e13bd79e3f666fc2e21cf7aab4a4862107ea7563d159b8b1bcca1ab127d2934322dfa40926b42b06328f40c7423ef0ef1513089818b63b779d540f0f7b63b8a5c5a87f06705333851935b294d23ef26a510800ef43d052d0b608af50be48f271776aa78ef7b0d66ac95f88d8fb61d14f7c745931ee0615bbd0424bcc4a0b6af270d80aad4278a1dcceb1a8403308c6d41c8de8d5e93da623c4a668d0749e3cb8c899d80dd8a83e501c546d8813009983601b541c936314e9b56143a841d1a39b8c697e2af5d1318a56c831262685d47dd65cd7332b02ef1695563baace442043efe13cc907b93ffdf2b891d3a3834be70f9281da2255179d1248cada16d634aa72a7c94949cc5819d0919d6eba08c5323332ca695723a8c37c36336801eafc29b55d19a59739c43952863a81b439b0600f7170d72d604ac8a1e696c86ad4278159b7bf6afda5d4983d1afc166ef990246e1a9466bb76ec906ac027fb67e0341f3ff07271b0cc1b83e7daf8781638ac842dbb2da1e040ca4dd427d0296b29ea4fefe6570f62031a7d050574d66fa4afa783fe683fcd64d49c1b7c691c5ad32f76eb971c46fb8b94f3c3ffe7ed13997291b3e98f35f34d7f8dfc813a045f992378e2c4e5da0419b5d718ced10cefdbacfbe5de2bf92b9a516197c3578eccbf009269e083042aa925e03d2f81b90d1c155f474f0fffae7786a065dbaa43252734f19ac7df282826d5c583170303a4c4bcd37f7a85248e3a60cec54807af17202f0e47c2e7546262206f1065459a249c05100390997998ff34667d464953cc47ed12bf7fdb409180f4afdd72b9e36f7cef97f94535b2f28f97d04c8a658e5f86b0fd8d914c1a9d5ad52ba23dee8b3166e319b47aa8bcb91c990faa0126f858a3de779603052042ac7c17a7f96af2e826550b932c701cca41bcffcba05103e8b5ab8c715f398b512259521097a31437ed5e80cd2c38f2cfc8ac34c41010107fbe943e5355e8ca797dc42345fe70045f817031f306587f7b0258b77259782abe9c599c5ad380c11bb8f6111f0a28c65e6a30a13c8b26a658877e897485e2248f9d50f76bef27f9cb61b9558e1139b2ed0ebc5ed957e5a0486aa0980129cfcf662bdd869a599546e060da1e33f873aaa27d0e01a25d78a929b7303a67b6e566b5829e505c429baf0e04148da1dd39a901bf6c95675e964a4eb976850d6353aea033271c38b4b5ca190064e8aeebf5de832957d2da8b2f097a26a103777a20846829f7f8537d69cd2ae580850fb371e0815fbfd64f2e3b29574b84d2ccfa05e007529f51d1f24757317c24f3bef3f7aa16049f9b9aac980481cf82381596c674cd8f79d404627f934c4800e100d9b822e0a30e6223d2c9213a6f0cf884c36ec7a0fb3511ad7794c2cb1e852a82b59a7e1e80aa81e5b91473981a1630905844832eb4a2d01a6369ea5fd5a71a8881a561fd5c4dad5512163cb4f56bee0156c4d47fa3ba01b5ba084c6bf027b7f19a7cf97433cef27efab79f2159999b4001551f06e957d0f156030a61eab7fed9068113d0d64253b74786d53be5fdd91bff2fb56aaacd393d606d8a8395a0185e912626d564d06eb3e0f93f6edf6c003dc9bec134de55755e459337dfcc515be361cc6a3b58d54a934bad836bcdd4f86b5d6a93e027b5444c54ceaf1c5a6d1d57fe5f9acde2a7c4dbbb2b90f1c89138c5845f965c97999157312318fc86aa0da22beba22fdb3fb109f821a6a7b3f528d94ea6d631779a8ba85018387a0bc53da295cb01003fc4e49ba142f81adc62069e27ceb4b4658230b92588536f1cdd4b3f6dfa8d56fa5d69656d9dd8d830490323ce65a438d287a10f74e6d22636299c110978c5c66142a1e9231eaa289bade1b84427ed115c2deb45ef34413d80656392784527937dc63e870f68c8a45b39c66dd40374954ac10369b471493869afc970b31a893c19de5e8da00bb2052d9a6b1e11c48d4efc428151b3a479bc6ec9688378ae294596ee435bd78f058d6361ac5434f33e67da862efc65196e8ebbb1e32b4dc924b22b0054f27d0c12576e8c99e3003a5854a86461e1b895ba0b57006ce65b2347fcae46c4a686f8d4650f59c4c3cafb2ed294f33f605195338b9d02c60d9993be7c9746181ac23c51c6abf3c393bcec978ef001903cd26c65a55470f315826427290e829e236d3b0e4f25ef108b1a6c38e2c33440a331bb83ea3b39a7824d6e5f2a6d3e87c918275ab8be95b9c21149d45e20462865e402e2c893cdb0f8969e0d2df8084eaea639eafec9ea514ee3d2593208b8a43b4e470e0a9716d7edd7bcc147b12ac44e025806d2bcd63a4359c484ce1072bc0fa99ab145f31c6e73e5020242b4b952b3f58410ffc34252dbd25bfb836d13b0e61730019c2b698a4ea53cc779f9dbb8d737572e3e690cc82caae315f320d36122e7762d2db5a0a9e7ca823cc176073b64f6f7fd1d813020f647159179ce24142804b5accd9505eb59da5ca98512fd46ffc1ca94dd1cd28dcf49a2525a3f93b4ad3c8b29deacbb90fc01e449ebfb1a960d2abdc8e1cac63dd0b81a546a062621bee2dad272c37e05dbf069d74e868c3fea0fb600ca34264cb80e9a17c3cca7b8751dfe105802ef1f3e253bc944eae316009b17d7198f206494d09c30022e34310880f69840577f4a1a2f2c810350b117711ba40385cb3d56b292c604f41661c125d84ef321a35cda215844e1bfd54b35cd132b626dcb719eb2cb224ec1aa70684c79e6543dbb9144ddbd10cce1f6b25b53cd42d288d1c2eaf16da0e345b5f4a371d4953afe63b11e42d4ff1fcc92de1377ee5102866c105a556130232d3fd7b356fd5b949ccde19931f36d02c45499a24691dfaa7e7798a67d2a2573c6827adf589987147f5226098b52ed7754d9b1e8556755b49aaea4594079de038bb850d6a1d9844bd51dd632235accdc92ea214c79a56130572dde142f31a2f89b3d02ce6dee2fee809fc3f88ec31fef4b8c00722a34dfd0216b0f8c685ac266bbef4fff79c229f156025558b007ef0c98354bdc1a249f735aa7ed3c3f3aec6ef8112a7c06755ecc3a12bc6dd544458443e3f9c12583c12b872b3459baac3c16107fbcaaddc26ebca9b649c86645d93cdb81c455fe8d5d73f26b5cb5c237c8834fdf1ae0a97643621af102e8df1793d574ce9260cbc75c12a5776c4c2b99da16f6748719f9c4c68984cd99b4ee250951207e3a7aec247be86c72053c9b6b8bc3e3a6de2c62faaa2eb9c1c8fbe58638b9f4effd134c064472c0d9b8c2c9fa398eabdae1cb6990f4d3d5c0da5ea15b3deb56b11f61511150c26068388f69082d18aac41cd338aa39e561a35cec048bdcbfaee1a6ac7e871036c29a8b51efd78a75b495549b74506ba53ba601e28d768ac5900fad99313c23843e76e294ce8443bc825e7e7cb04eb9ccbced3a821fd6d2d10cfae236465428c2d7bf7736b9b4667048a6c10d176ab3ed4856c129dc95cc70848ce00d6e7db3381a4330d391de2c8bc612dca5b3d28c1b125382b9804be14c32f02952d66a4085e5ec9c031ab6023ba3e11c87cf3bd9f6c6d5cac9dc48958eac422da20a97d81d724924531927aa714b822bc7df4745ca4cede2609a1e35f2413d8bea6dfc2223cdbb327130d6de629fc2b8f247d116b634724086e83e6b4175ccc4bb7eaf1725f33de02b80888cd9735ceaead8044e34a1244e25603f9041b456a16e98ed954362f32b26e3e093e20441be02c06a8dc2e324d652598650e8aa324cf0706aacaa82fedb532a981be4b52088534459205255404cca9584e20f0c717d159894757e30097cc7c1a4210df806931a106417068a54be69d413378e03b156546c8992524284b5ba662985d10a26692607c9c2c4f1ab95ee5da48e891263167ee76ab528acc483ab95863152bf5bad4c9591cad156ab4f715eb5400d69b512e401e4b46d22be8a28dfb512bf99a442ad95fc19a953b95ad1a79152786a75c55a068341ad34312669d1b4d27e237533214f3c6d3e916a15ef182936aad5b772287b51adc230d62014aa95be17e119a856b4f918ea7f6a458aae4c93aad5dd2f0c78e439d9514818a75a1db3cf8667aa95865b203b94cf9d3c9e37e48236c7e4130d98892bbeb3f92f1c6018f66dbf2362e4f3829afb670761ed56974c62fae4cd671554421307d2dd131b413798b2d7241db0d91118a45d04d855dee12f0ed8237b7229f76f9b429f83707bd46467a1e8bfe41393f17921b03b6f58a693637c7be1e44491662a21085b3cf2a448c0bf27ceaec80858786207c01241357d1da4acf221c676747462722549fe1aa41210aea4502cd734728095e808905b495fde004fcb1170bc92fe3647f73e1de6f25d41e1fd8c8308065849c69ca06864a86860257d28014653218060257d32023c293549e54280c9120404aca4ff7e00170e08f05a491f75005bc207f85a493f9e003b7f0f80b5927e96007f7a0f90b5927e1b014eea1e4096597d090196e01e602db3faf3012cae3dc0ee4afadb0160d06fa646ee9f716256d12251625654e7fcc4ac42884913b35a8ddd7d9534b0af8e7a56eb0933cfef33460c203b6407c02ab3caa2cf2d3418566615ac048862a6c5b756924207186a9816f7aea41e8402d4702694ad6116fe7f9574369026667555a697985554413c312b2a19ef57490d6e6a1a809d72528279f038a8be1d367230ef53ea67f0e0ebbe97d567ae898528e403251d781f5ca9fea6559dd581ed038e1b9aad8b7157e1060530ced82b81bd97d06cdfb49cc831a2b674ec179c6994d267f53202cc4661cb75d9cd4de880310d260e5a7f9c180c95c2da16862b41253b6543fca9a7c8ff7059dbaec0c896e1c2eab0b382a8c35adcce4d8b8b223fb1ca4e71d541e195dd9021ac0c2457e1408324450c0faa2647347f598c5cf65871e1782d0c68582716117cd9b3219cfed048ac192a312ad91215ea1dddb67150a1dacb0749d55c54f8a1881fbcd6bf17847a0f22e7b469539ff2a6dbbc04e7a1e0c0e63168441beffc11d63cf1d4058585ef023e187aee2d37f183cc0b26355c859c17599ae018c7773807ba93b14cca2499c8bc8c1e5f99e698c0fc268fc944deac967fb3addafba9b19597f57eb128f9da710f6a8d8d4480ee5c4957b3373d944293fdb16a55fcacb490d19b74dd4a29f9265b587881721210ea3a8281ac94be341ea948c6d28b2700ca36f38b8ea730ef7e24cd0c8925f0f70fd7a994c794ff1f95e445850b55e88330d2b2250bdd954f975934c550bc1adeacda19c73dbe8ab87aeef2616a9b45a583735088c5532c2bcb6af235e213c67a9ba5b7820001c1f0739b005d3044748067794e365ebf1924d36d8e57565306fae7c1869055a8dfd48d34e48b119a1fbe7547dac3bd256b2a4a7798e6ef90e30f0db2250062af8fe4fbb107b92bdfcb6055c28047918d81a892d54fc3d2912c996d57a484c79a4d88db05684a27be658d7a90c4fd767973c01d18f780837e2d4f0726b611b0b2852114a2a7c87eb7a5958f5491e559b5cfcafad7f4782cab6371dd378d7dd8b362f1abd875d3c58b846e9a977603a3ecaff2003d8f0400903467f26e9296a37df1aea8494a3fa5913c1dbc36a73e2c383c1d3751d0f6ea0a7e7b420b48d4ef1327591d45df669bbf7ae0e8dbcefefc2334cf300f5e1f2520bbd0a730f484f4d2907ff320a4f569a5de70503131f14d9a4554aa4b7afec590dd1b05477aaf64fea36d28d5962d31517c566b564be7e36e7201e4df195ba8add8598cad82a75aeff22ee7888829d6ec088fff38b55c58a2f0ab5c10b8b3525e3d4b1e26e9cb701cf166721788cb155c1531e1100a6a33a86ec76b9f10f2f4f27001857077ab10e8686022582b3cce7ccd48b1b4dbad6a219d1c5e9ec991a3c44a44dea58848d510bf10afd871cac3ad7668c2bac543f230d62b20cdd75c04266a2555c74d18bb321a93b2cf2c3dbbe869adf28bc5ba6923c6a4e2e2cdb3512826c2bb31f17e5e63eb1611172d59a34cddb1e2ee09ffac505ae9166afac41bcf6be664f08792e4757c6155c89248723c8fbf40314c6ae09bef63b2c46a76832ded8a639e16d0d4d03a11dfec22690805a13a5bbb37c7638cf934323ad7096f2419fac7c9ca7a905d4ea6c6f3ed38b22ace8a106a6c733ce58d1c4553f279411f0cf9972e35a48baec55d24cac87c5f1b77f7329216874ad4ed4c75058f204684482b42fff8cb38781d5bfb0c2327a80f4352b8c25ccf2cf8cad9322244e16ec4507e59cf67f459a987fc1642b9113e9901bd3e90994f1786746433b889a8db63b0d2d419625fb1cc42336e97bffbf72d466225e6347da96345d66b2f410fb3f8535a89ca61ae2ac819c2d58fd5a2120efbe4c4639e076c501eb7362d59462ded4405e3d6d56af3989eb23bb1bf816ad5b941f67c85c60871d6ad078d05d40ade0d575a6e17c779345a12338bfb9790cdde60141aa39edc125ed0dce46e008766ff2a2f58be49819c05d3c3fb22aa34d9ec60d0ab0b0631e005cb625583e5af174cefd8649b6b5c79eceaae94013c3ef0f6a593f5d57bf1c8e71a7d2314bd5b68fd95d8c8f016ca3cb75ba6ff0d0ee1dd8840fd3d8801daca7b268e0fe0f2cd58bc24f7293b6d83eab70445a452bda4041d6f6822f3a36073d05f63cbf16d5a3ee0e21f195f19cb0ca05916e1941953df97c222cde9634a2149b0d4a73adb4ad79cd1113505aa253ce7f30a9e42d37984cd0e54e286d3bb959f0a2ef63ec0610f9a216ea751504ea7e0e468abd93aa8c487977482ced5ddae16bd4ed3c3224f60ce034b18db53d030d54668af72f59586b638bd484537fdceb58728bab201f092b5c22e25975ef53960501228e2c51782925ae0248a0a5f95141ae288a7c004973ff100d450c285de9848cbd24a6cd898086c3175e498f01f0b56148f09250403726c96a38d14e611d22dc8435bee90685f4cccf59760913cb66d1054b43972082373242e42bdecc643bf76f03725c7e210b6e951c5484ac0790fae98a854549021ba6348aea59e67cb6f898c7828f8fad9bd3d6de2a9547b833c1f6f68e64a87e47c7a5f9d8b0926bd909abc27b59fe2f7fbd42c7a3b8aebcd0c7c907099a1bb4af46ccc5fdf3a9cc09930b6fab39ce549450b9ba7e84fb8ca6546bd1c7a72d6c8daf094522a38e349a7372f61e70577de8ad24b5ba4c79bb18230637d276f2fd53d4e2058b083c348a8f55df5ec078ec53c4e141fe9c7309612a137bb62b2e753313f5094981c860e0f10395e5311b460dae31b188f13f7abb39df76f748852f1a337e049fbc6f4d7e3e66d005f5208120931c07dce29e9a051c85d65825226881614aea76444b2e09b76a7ac4e8b9b61c472d62034e765d1c80d9289644d8b64c227bd474a8904d52471af8a3d2a1093440a0ac725f828b8868447999040a030c8ba7373e8383193804549c03eb0feb68dd8c7a3bfdd3fd1878b04774ded80c0c00e52515947f3acddc2a08a0e23c1a897c2e57d248fc86056b1a0a3d12d11d8c492d37f57ff31f3d8230ff441e0c0b475883db19117b7046178cbf6251c0b22dab56581454e98173a8481fbef68a2ede3afb8e0c1314dc1d038569c3cf50141a26b0e2e265b880af3b554fa91db643ccc86f70dc752347ddbb4d8fad141f0d8c0d8772c23a1bfd3b18e8f3ed8f10bcb7bc052d631d0648a09fa5821f17b8143df1a6791712c41160f6af14d40df679a81637a8c5d7472da4b4e2d61c724964ed0477521edf333150212795c341ee31e617cbbcccb8d5ad4213c9256ff8084fd547460c5f99cc8210d316b023cc19b630a734b017c09e80609464f0bdb442aea6e0b9eefb489548c5a582d1513695b08231b527e673f97c3f3eb2ca272e1610225e9b7612e8b5ee2e27705b7109cf14f6ad8cb7e88892b5c470532419048ab2a88ec33b7330381fb12318790b560ec720d59510f71a5a53a93e01f1754d7416d2a5fec336fde80aca50a05859f0f74da8470bda7e0bee88dd946844bea112d11da82cb83602c10c515e384709604e739cc8500b93b9e8f7c3c0faa0f3456ee86a8aa3fe3cc7cef5f80c0cb6846fa4fbdfb649eff15661ce4e2d9635c3221d7eab8b538f79b09ed0b5414eed1ae0da1598faf631cf98922733fbe86de4baa972dfcbb908f6bb14fadd2d7f2fdce28049200bb1bf7a8097409d1f77146b012564c33079cf9033fc60763764310fb9c5e80d9983b4c64baae31be209b58164413dcada85c0ddaa314f4150bd1c42ea99d5539c1c4f40c706c795a700c3d289e270422c79b1086fcc5df3a3856f04b85115d38d2e04eadffe95f273bec714e2c011c6eafd09247fef4bea67cb66e0f1c43c0b15cc0d76f97d92adaaea339e44e3d6b3f8b30022d4ac2cdcbdc54e272a50e853b83d5e427644eb901649a042e2f44b20d54107066351d800341213804af51aa801208e32914855229a72804c1711e0d2e61ed8436b15b4ab22de5f65fba91b4bbc94d986ee9f081874b267c7e5fb5a5756afcb632d029e8546022fcd0f83a26e65ab4de64a7360f380c1c0de20fbd117df093849f29b6e4f7bcd17dfc49f263eca2cd1bce3265522dcd607933ae3ea238797818b55a237834824dba15d0dd39dd7153baf3d1b3e62da70ece2f8a93d4e96eef8e8b82337e190d5d9c8f7d26295dfe2249b3588e1ed6d216d94cd0dd47ba2b6de96e1cbae37afcbeec4ed1a7dbec4595de19769b3d7c7a8774c0188c870e1d3d7cc4660c06448720030079c4e68f1e3d401d80c08080af2304127b1f3b7a04993a60c6e5d5b9dd2dd45de902f87a302aeef078783b58f8730da6d3834710f007000b0730001e3f40f077b0460b7ab07296a9ac7633a6b2bf3a567627a8733f146909d3f9d1ce74f2b5b0d9dd32babbee8ed1dd32f44c77cb74774c77c37437aabb5f5ea6d0e8aee49da94862fff2fc6474b771d12d4e9e1add6d5374774d775b13cdc37d5c6977c3e83ed9d832be5e68471df08db6eeb6263bdd3d4377dbaabbeb8b2ec41fe6a158da197695639af2a30f2bf537b2e3df173969b84bb0eeb6e96ee31a5f2f8fb16bef7dafd3c3afb7cc7fbd5a9a67ae3fbe488ed4339d37bbacd29ce7786dcc67e9d4dd3574d748dd4dd35d3bd1dd342bc6ee1b59af650a4e7282f87ae01bbd68f3ea8017eb805614a74eedce0ba36277bb7497bafbc499babb44002958b8c0050580a941050a150c7cf024680935188a11c10715664422291c2904a9328386f2c0c0c4163fa2039c800992a302c18e2a33687880c791b807070210211d31029411601a2045a6a94489e26a0ee6015374dbb6335384112577c98952f2cd717a4746c651322f302687294931b98c6f3845a07c2ba166a044c14182003b9cc3e04841da76384782003b3f987cc68738198fc1e99d9919878971a46d07468a0c4a8a8ccff88653048c6fa8cd8b8871199cde8189c199b9f1e204701571fe44ade42e335262dc0547ca8c23e13b30becde444e17cf32d474a1146700e931385938284efcc38070308ce67708a3082f3989c289c977e18e2bc34038383b4edc0380a0769db41790c8e142408b003e348db4e8ccbe0dcf8c1e4330e04e732ee822305c504cace4c4e11510cc5f8e645c0384e1131be790f9c0b4eefc0e0e02011c5b6f385eb25a7e8895ac99fa899dce4dc8d1f4c4125df600499dc4f50361717149ddc94d32e28dc660099369d505216a080ade425d3e60299deb6a2cd4dcee16c3026938948c961fc05657a8131712f2f309c6f30a89c22ce64329938cef48468330014d78b0f2677796254ca1cd19313777a823ae564ce005050ce9d8a4e394425df5038452f272ff9e652c8949c3bc178fb707ecac1b9d9e42e39462577f1138e131b57918bb72b26c7c913178c97709cd8b85c7232e782f10d8691cd85e25c303944262742e53879e27ac9e1dcc585e35c45ed1dc35572d456ba01aa7b67c3414232494142c20605ec94709088c209015c4898a42045e18400aecd9130e544e184002ece9b8a8b632283e2803c796244c939376273938b3f9182e43ba721183fb911288ff1ce798284ef9c729e18e1e2313948bec3394c8e11a81c24dfd98c70d9fc94c379bb112e5b95b161013644b9f902c5a94e6e0303b64d0817db16ba9294238ee00ac021a1539b73311c12623ce6e60b27578ccba0bed0c5784c4e4c0c872587c372a385cd63884c515c31be798c0b8e09c9940491498aabe49c9b904c51601481c9312561427a9942c965b62ebae862ebe2a68b2851a8a0a28b2953bab8e9627369d1420515446ebad8b64d054b74443578134e4c8181e2742382ae51eeee2e45c90afdd22fa617d32aca0a89151211ca944429d5a6244c4c2075442629b6dea294548dea128e290994140d40828b23b2bc6871712f39a2b8bab435d72e2eed27180540394cabb6a8c690230a0c220d8383c2e1b44099a234a02b39920d0e4b49d59eb2c2844a59c101d9bc9d2855c5d539375ee84ebe715abc683955114247b449b9094257641b22e2380f924207c565bae1e3e22f4e6c378a70ae17df9cf84aa99294520ac9758a92a523eaa4cd65db729e389d4c505ccea54aa9552945b472955c2bd429ca4d968e0865c5490a0c74513a2d3a84d075900ca3630adde67af1514a959c8bde5c5a4a3f5c72885a0b14aaeb6c6cdc75f8682e4ea753149729474b7321840ea565089d1657898b192d5c6871e5cc68a9428bab8483abb4a1b4cca009974c8cd28c53957c0be98242a15059665110b76df36deb98d83627b6263ad031d135f1f282738a42d45b8e7acb4ce4b09480b8c0f8064513ae2d36284a279fa1524a9576d09ddca506e9a5344325277440f795522517a2942a6d2eae44e5880312850372f2d2290a1514165412d1cc0c9528418204091224488d248e83d142c94ba51b2a74250ecb1525202f59945425d722cb165ab878f1224a2fe12a212d51da3121e1e0da1a07242e07290b0724498babe43741e8362ff58c125c154a5b89e360385329e70859b2dc4081e3361f1c81c50747f4c007475001a493e10bb88201493180f8cd0eba195ee38e330367a689192a34b849896e2d112343a6460ca7e1260af40e319cdb5054361714150e08aa0aa7e2505c0d1c193132dce4362e23c365626464c8c839b5aae433b2a0aa7040382dadea969191c32575aa94a5779462702e19385c5277ca1443864c8d19a6d229c7e6031d0c279a69829b99320345a924030d8d93175769c6899929a514374385060e11a704171a7088562e6eca35d1f84c13251ae77cc6899929353433546c9b8dcd56ba1142131f25a7d2415895525c1057c955723591b9f94127d340e84a7e3ad580b273c36b7ce886d7d4f88d9c52ce500d7ec36fe43cb9e135e440d98911c4c5d5f80d270ae22272259628fd80e1363887aa12a4f42386732ea487265036e0d0f806e3c589669a082204460e0e37706e94fcc66bf01a9c1ba59c1b3fd4f80d5f5283dff80dafa901e7064e0d0eaa03a514876aa294e2504c348b3351096252820372c339140ac5255141d5e050e92188063a0ed5440dcf28d70c9ca33a40830de71cc50467e3338ed240ef60e3dc4c13311e84064e0d1b35bce434d000a3060d354a35336c6cd030d3c44c13346c6cd030438d19336ad8d8a081069b276a7c861aa7513323088d49868c1c27db174432706e36d0999ca673184e8303c5558281e2808bd31203e35c16130e1cd79d6c6040e686085dc965ba534e11510cb9b80c5ec4c963382aa7081797c1512eb3ddf8e1e4311c8893c7c801c2c5517873c538e785290ab7a5591c91f3a0e3b6e4984c318e42c5981cc6e42893f7c0714938a59713924ce3406493749ac198999999999999114d45332e830c3ee325199443d9e1bc3920308ef2211847c170a59ca11a8771989c2730507664500e5345e9c7e944c34f369cc64d584c3549382fbe790f2513161a3438262ca55416a6241a3082a4dcf4a0231224a5c669f01aaff1225039373847b98ddb7829a708989c1b5cce8d1f6c1ce54b6c50bea4a6c66b72aa205243a5943a79a9868a669dba2494141c10183f75326460a9a1a2c4838ea84b72956aa8e080c0c040e254279f314326a76b9260207139449c16a28ec60c381c0c2233b84c0ce7445d928cbfbcd4e0a0b84a3568b80c0def819b0187064c0d0c4e4d0e87855395905c307c860c2213961957378303c363e06c527236a42d4a2945840e95e43293d4753636251848441b0c24170c120c2418a49a18278241828144844a4225698182794125a1925e3822744435495d854a475493942404ee492ea54e47262c594a3f4a2f38642975326551fac17992ebb4856b564a9d5ec452eaf4522a954a3754e85e9c7bd9904aa9d316a5943a71a746fd50da41e5a06e96d06d2520286f189c99920af5827323848e0806e925c70585eaba524d92094be9c78b277157b8883a534c151d110c120c52e947124cc04c29fdb8513ac12011c174000669862be1dc044186a8b3eca043d9c092e43a113d918253a14e5e93a445894694d28f1b2514514d92ebe42f2527e272505b14ee74229a71895b6c4a314694a0702f375e70c1c201d976fa250ba7dafc458b6bcbd22e3336924e377eb0e1337cc8c68c9c214ee6b4256d7e4384cec4040c93121ae8367ff19817295164948b468d6fce6591512e1aba35e31c127a871abe350744c696a384ab0667062fe1b8b868c031426d6e6363b2e1b628a54edca97b4bab4ece995c3538dc169da281638472cd90c365e9d4c965e048e1b4f48e9333c088283b325c869b0187cb42038e11ca6593c369d1a993cb986c70382d9a753a39e784d639cd701a384f20a17666784d0e97e5c42535cb756384ee0443061964f0120e1187e566035dc94f1d0c37c580812ac12002c329c1c58812941826981cc898fc460859e8665cdecde1cc70eed29dcbe42ab96e6ad0b58b977eb8985c870fa219213139352e1797e92587339db65045072f53925ea8c821e29236e71cca8ecb9673e30793733e64722ee74914a61cd4d08c9bdc94f3c4e4333736e8aed0716e9a223345e947bb0c14ae928c14a617177fc11284d34946464606e766039d8b13bd547932e5e43138505cdbcba94f2f59e0bc5c514abd6039bd54e19270701002e71ce72693e948e987c94d28940b8753729d70da7583838e68e626075ab8e478079552dc02b498895995bc942afd184311ae1b24742eee330e65e7e59473e307199ff121199fc97912c5c99fe40ce53c91c981b263c2d2b938e735a5944b4ee73720e860728c702eeee2f2e28293e374429d4e279759a9861908ba6be29ce370724431f550fae1d26466e448e9e5a4a3072fb970701fedada53443812b57ae5cb972e5ca952b57ae5cb972e5ca952b57ae5cb972e5ca952b57ae5cb972e5ca952b57ae5cb9c1e2068b1b2c6eb0b8c1e2068b1b2c6eb0b8c1e2068b1b2c8e707385152b56ac58b162c58a152b56ac58b162c58a152b56ac58b162c58a152b56ac5829c97407dd10a16b6f1e6a24b938992a64a8c850d12cce6f88d0d9b8d14129c60c2a382031a890498a219314432629864c528c18fe22f3f2f2f2528a913423890a0e08979494258b16a21949584e319238153723892846928b93499a91342329694612a7e272886624b938ef1a495b89c31283ae944394616e3cb0422ac116979b1874442287e5a60339a2705b38184ee3e28292e19b0c2f2f3164a0b8c0e1b6f8c9a55d2ea6929f648081d3a1545b3614ca73a06670b69c19207439a2a8c68072140704c66de0c4c00092b9f141f7e2a6ada41a831125282e9c4b0e641a48d70512175818508593c941c5c8109313e328183ec4b86662fc0546015e4c4a2cc1449f4e2e3088ccc89c4e2ea7189d0c9a538cee743a9d6464e0d0c4f02e46c965885921f112835482412406c6f4836e85544a41e1c28a18d38c69850417e3a7182019574c4e0c8e8b8be3a2f423c60b33ce6d51fa3133136306870aaecd61b4e0dadac509aecd5f38174785ac5c7fac4df2f51a0206d8bc5fc5d2a8d2577e1cfea5f8c3577e1c560b7bd5c019d2b04ef0953195e54a5f6f345fbc7f1f885aa6e2ccd72229027fc653ed63d6b5e4bcb48e072de4bc34b779f2e8de7ee0210abe5eede6fa3ae41c75fe6f86e9e06a6946ddfda952e4bcb45ab65a405ff8347baf857da618f64cc4abe4c13aa928e2d28a25595e10c7e8d1dd0e170c08a9811027bce51b1072d4dd13c0e9070889d13895c6789ad6ed6044eff076b0c46a2f35aa3fc3d3c8acd502e9fd70be1191ce2248c297d53954bf680e3dbe1ff6d4c2a7b5705625b9be906b004b188010fd0abfacbdc06b637f3f16d6c741800c89e2e4a985f3938ce0d12bac8f811ca1035265e5afcfb6a6bad34105edad6b635eadce97cd8c1de320823aa6abf0a7e779ffe3d1a3fcdcb3d9bf888a347f9a7b31ebe38fd7c62af5a739ae0ffef58ced288a4f733c7d754beb7f671eed8dd118cdb6867ffd8de64c145dee39161d9796666bd191d2c3bf1f525c2d8884a709febeda9fafd26c2daaa563eaa1c72c129e26ee367b8f7b2a519c9ea7e31db84c79f824f9b04bf18f34bb77e9245df57d1efe2ae531eb3f74e0e13cbe688a30ff59ed7d700f93f366f7a73f1bc29fa738ceeab376df8848f7fc5b95fc2deb0b857f3f8bb4c88bb05995bc08a33ed9fe549af1f7d4323912b97606d6f949b2ad75f2e070ee544b33697f421bab948575741461048f583a72e898d101828e0eba4b32e81cc1d7cb475f299d31b7f98848778f2296514cb35822c1f7e90be1fcb23b876a319aed0f6e27ddad43771e108d133e3845f26fed0e858fadc813f684aef0b35d12be8f87316c52a3397b987fb6469ec572c63efc4ac7fbf943c7a4f8b31fe9256bb094c51efeb5197b77c6dc62c7eec92ab532ebf8b35de21e8e4c3d467d35c37326ce32832ef7b0cf9fe139cbf68722f96c97d4c43b89583b848f04c9aabd4c382ed810b4b2c10991e480841c50900313eda9527ef458957277daff18a996e2199e46c6cf3eb59b2b91eede418e1ee47822c712f87a3a16b75ad7be728e592bdb0ae6f001da23932ea932faf78dac5097a33b4856a908a3423356dda9aaf0707dd2563a6fcf0a72e8ee19bca0bb71ba7b04dd1da5bb9417f87af975f02b7c1bbe911d6162aab5d8fdeb8b9e676d8af78d80bcba52479a478ff0ab8c0aa5bcdf88e6f9835d95ce194f6d8a9f045f4f07bc983582473a2378a4e3031604880e1f03d009f23ce6fb781d42203c62417ae8f0c1baff1ac1a36a297ee18875388e747b2bacb4c857def2fbb8bc4f9642d81526094357c8e30a5f001ee86e01dc04804a7777901fdf4f1168c59def9be169e4f3d5f7799d2e4ff5630748c95a4e61eadfe7d36755566b53fc90f523cd4147138927ca2ac5fe342b8ad363762c477a34c798f5547dd153a5bc1c9c478fcf8b66feaecde02c22abb4fe8ce62b5cce86dcc3f4e8597fc94abf276b431f5867c6959622e93c7ab8acd2300c3f0ca7d78e2cf978ee78a18fabf645fea91eac539c3ba9987d2228fe88a0d8c81fdb19cdc7cf549cd5d24cc3707a9d7e6d0cd31a88274c55fba294d77e96e73886e2cf3cd7d28e329b7d7527163f743c67e444e29e3fcef627db9f1761b32a11c9b2878ef783ec4f5895d48eec0d8a892f647f5eafd7ab468aa11d5ff87a3a00a80000aa177e069fc47fa9fb9316c45ea95f9bc137f2e931ebb32cab2f0a0d816ff47a15cda7b55ae19318fc253b45f3993c58edcf7dd8f8e32b3ffecfd6e8b1154171624bda4bbedec85e929c98863648d11da4bb277063047cbd114f1a3863ac6abd7ed1cce25ca2530bc3597b7a642f894b3bd6aaadf3258ab4e873fd31834ff4377cb096b6d6f9aa1dd94b7637b79960daa5698ad084a6294296a629c2154d530424d4f044142df8aae1eb6e2cd2993f7cfdc7ba1a8e74db58adc147773f586d7de55a5a109c35d88416fcf0c696eec6b52f7a554b317efcfaa4be5f742ded158bd91b3aa896e6d7e70945e3ee9ed1dd0d251ae7faf7679576378eba2b8dddf8fa55134972763782669ee1cc3f7637821041c51bdeddafbfd175b59d0d2f1a3fcdb4e4d3d970a2b391447787af6c45dcd920a2bb6f7467e3e5ad901ad94bfacc33f45c92957a3877f0f5583a5807cf3b49911ce92bdb701689967c812f8a16ecee1bbaa3c18a760f7f86a7883dbfd46c8eba3bdf37aa1624c92f86699e18bf0d3d87a0cb2a7d983f59cb5eabd3f125dd5e708ebec37734471c5c88ab8ee688838e9394481f741d77f2e1eb6159a5b3fcba4fd2fc63dba0bb0fd09dcd4c77e3dbc3fbe1e960fdb5e02bacf376b71041749b82d8907457a336bede2cd33b7530695529d2da9f566b87d1fdf002fdabd51ac1a3f0430b56223da15025428e60935c5f084978278d5452249c3be1dc11e92c82f1836029d4ddb3ee686c81818189093f673abe07e13f1b82818189c9f58d887818094f934a5d56e9686fccc3774c3d08094f93fc7f63229d46d3f3d1d7e9f845586943b75874b9f77de1b5e05fbf6ff48ebfcf2735f2f0bd268ab3ac73acfd2cbb48732d9d9c636d66ecf865610973f7a3397af8e13f78f4201d67ad8558b437570b7a09e2ea72afbe1195f9f44a737dec0f734b276d3aa6fe97fa97373ba62e5a0bab328abd96e9b5f492ac998cce7c7a581f7f7d3c41afd443c7d477f86a3d4faf54f630c7e21cafad7e6dec07f7f0f899ba0e3d74d0e1c7fd3cffcadc56a7d92b73fc6389f1f467e2de07f4f95704f44d7f98675c8efeb796c9117f9e20f5fab3ec2b71964e1e3f48c34addd2b28f7bb9b49ef11433be34e62fab74b4e0c3c26bbd526755ab13facc3b83fc3ef930af89d57e9eb2bf32d9f4710f835e292ef3cc421ed617b24323d8249c3b471f561fa070ee643ad223f78d80badbeb8e26d5ed2b52a4b348973ae0a39b63c279347473acce8aeef616129e26ac20243c4d5c5629c60fda1bd4dd01e82e11b1d1bd85217c27be43f81997448ee70eb54c8eef0febee9b6e0e08fda3bb0ed5edc92a25497b43af89b9be48b17b5ea9fb1361bd55801f9f9f242e26dd3d761723020d030313e3e5174518189818950e0be7fa468f411bb22a9da38ea59e87411beae8b43099f32c35040ec2479b71c903030313d3c5f0d1dd1e4871a5371fbdd7298a13f487799de08bb03903f324310d739df44e23ff6a1d573a73b53ca23879bc8f66ebe77f6dec61feedf01c1c7ffe77922c717e98ebfcd1319d0db957044e98e3214c67d92bf5fcd8a7ff7ddafd59fe1913f78a402bc262d65d8e671015a751f5c92f846b7522b1766826a346ac1d0a3f2c45b0fad4c2f95774bd085625a10814fe8360891dd7264d9c2e8a94e6efb4af3e5d56e90c97a45b8c63d6efc3c6b28675fa2afcb09616e6987e7d99df277d622afacff26682f0f39d19fbd3bcce5976ff6b479f654a73b2f4b0be671c7582fe3497555acb4bfafd1c9bdb94eefeba43f13416b6982dcd8553778bddcdb03aac5f044e58a533708eaccf33631dfc4634d3915e327c5bc127f1eb28cb867c6468ba6b300f1f7f321aab96e7737f5c4ef061ee3fcb1eb39eef241d530f62912378f4e5974e5eb814cbb1046388d0dd367417b3822e86ec62e8f7b991bf6c5e9bb1e7faf796a06323ff3eaf74ce405605724ff59e23cf6474cce13390ce6829c7e2acf773a58eff4e11fcd07d025464a1890d3c015f4fa7d5c2d5525c3f1f7dabf51a3fe31aee6050d0edaddab57986758e1ece9dfb46f6f52035baffaf113c0aeb93b8c4a4bde158e2bfa16867f8ef2cd726f8e12b83f466fcf725ceb2d2d7d11c5fe4081ebd3ecf902c8f869850fcf50b003e295404fe8c474747871ee0f40102d1d9c163ea00d203f411f6e8e123888e07c2fa3c6fc6b012ebe05cda22f067a04ea6b2568ba4337ced2c97f395af25c912b37e9c37d66afd48732def4b17daaf8d5d191ddd563fa2034fc02f82b57ce5c7dd6def13e135987f488d68e8367b26c7cf797677f72904ddfdd3dd8bd88daf773f539d07a988ff5ad0003e4644718219dbf195e7ebd2d249019eace5972582e2d7cb26c63fbe8ee698eb5392827fef87f5f1b5456a775290c6be3eacbb89bc8ee678df88ca6e77f7f4081e75370ffeb0bb77321da9f8ea6e17fe8f75770f04c85f04d2dcdd43707e8c679ec9e8d35ef77534c7eee621a4afdafdd249770be91d5ab82aa996e2fb4b1e462f8861a51039d229f21cd1b03e49baf20bdd17c33a8dbc102e45f29642612d639fa45a9a4bf08f88d4ca1d59a5a1688d7c9e34d3ea23ab73061e11b9f65e2249c2fa20fe9e4a65f402ddf9228fac526c459ef033f920e8c25f3af924f54920f16b9d331edaff90e33592c1793f86ebbc438fab25f127a9dd2f7f083f5f4b7e3c7af80e41ca2068d08180090f6f87c783f5e204f10cfaa1030f234354292123d8640850abd56a8de0d1b5f71219c12641cad0e703f4033a3c90e401a41e42085fadb258e29a9831f51cbe077878a0460770d001b17b08215621ad962ca7cdab3b6d073c0e8c8103528034cfd1e672d69f0d71c0080e040d21c42a0821bc3a853850da00141b68d2dea7f255e8f319cd5919fac376f84471f27c1ba8a1812d3d84102b1768e0eba9811a98d802131d58e13963e24806ba30820c0865a03100457b5606b397ac6f54ef1b59992371af26c228c696f49f655cdafbb23a43552eadcd1ecebf9ef2d21bffd6445c5a8a69f58711c1c0033a0c34e99e4e9260e006064cdd3d84102b3c69ae0b30e10253f41042e472d22e90800bfc2cb1a58710c27b7c5673a47d1dadc59316ba96c8c1122358e248af42ea4108e189e2046d7d7dd1ccdfcce10ceb5c8286ce0255ba8710621584102e0b4cc002b8bb957467011b2a60c5104278487d1584105e2ead87d7fa2af44933f5556dd6c2f7e93330cf31f40a90dd8d597f2b6024d7c715e8308e8e0254bcf0f35ff21bea2870d4f4fb7c880241dddeb5310a787b147851428aee8e59af4d9adbbac293a6c4874b3ccb943aa63bba53c2bbbd5a9da35b3bd44d204b7b0f4e008a090c757f2c56c2c049628f592f02a7e8139373763fc83d95acd25cdaeb36749bbdf768caeddf9f0d75b74d7713587577507712c8c2535df2887a32ef53feb3a1214386a852438688e2e469b586e09a90e3e94342848c6093e7d1a3cc74a447866021477667889023bb93f1874c92a8411260123f10d802010f40c00210e8a183c04c777bd673fc68718e176b628827ad9623db9ac33115cb18c62eefc339da0a7afe59c6d452d8677fbc9a284e9aef24af7d911c6578fc6698ba579717fe4a9cfe009cee06eace01561c80030790ed3dad26e63bebbc2fab56745b9374f70fdd215d00a9eceea2ee9062904a0d80a201430de8babdc77306de9244c2d364c5fa6cc7bf2caf3691780dcc45985ecff3615e9b238df97cb54a96bef2907000123f90481dd1832352d0ddb0ee8e3822a50bdd0d7627c502527ca4d4d0dd4dba63800eba7ba83b06901d037c58c016cf6b936cb1bcffd824ebb33c1e3d62d65ddefa3e6779a91d4d6cf64fa5f2bc94af523c9a7cfe301745cac43d9c8fbef565fc6158a7c72c39413cbde2ff55f8b52cf17fccaf8d7de367fafa8f7d31fbe10f53ff2f12de49bb16fb0218d02d00c90286747792ee14b0457bf8fb90f034f99ce5618a84a789c7ec4c56da3bcb3e41904e51b4f98888028c1490f266209dd197d579a7ecafe3d26b36fbf422ec8aa282281880324577b3ba8b42bb7b4977516674b717565f21e169d2fa3e6779d9da2448bcf57dcef25433cf592a36b1d0105590d25741ca949087d5e6984bfb23cda2b5b017a637cf232da3c596d147b48cae62092da3655a46f368197d04080d1c8eb36d465459552107dd1591d4b53a63311afa0cff6beddaf1c769450be2d26b30ff6beb9643f796a366cc79868f29f84cba3755f796da0240831e9e5069b22cb25644d26d84d63d4935bedeebe9cd09e0e2e9cde3fc9bb13fbdb97bc3b109600b80c9012624d3024c504c46984a5997001b9dee36d25d00223480aff779caa8d1acaa1411473c979688547713f152fba29664b3afbc35da1bab51d1ddb45a086a11f0969dd17c85af97c919ce570d3cc2e2884a9e33daab4ef088088d0a2f0f874fcbdddec2a288319e22cffda07b89140111194a52cb4646f47ef8c25314e70bcfd70ccc1306623aea80988e47dd953d5867067eae657a27a9e3795e7f3c5f247d87f0efcb64f4e637a2b87eec439f65aa2b53ddde42fd404a151828d0a091c680d4dd4d33c593190c0f2b8200b1c1f2c50d9e69e3ebe197acd2abf3a5930f5fe01b75a99666bb9400878b8e0b134f56eda5f98f56c83d0c2bf10cacf3eeb82841c91204adc75ee1e3d2064e86890baad40b539cee0da77bf32e5e8072693f53b7d857199706e8de00d0bdd9b0dd746f35740145778574f787b6fea5fd0f086ea562a5feb0eaa1ad2e83cec9146f5e1bfb5aadf02b0de843fbf309e16a29acf0d9d2dd220c46eb86640322a75af02fe9a19de51fbd06db3250e204d0bd5de9ee21ba236b3a0b58580290eecec21ed13a03db8d2e6458509510131f3b0f423ca4a3b7f014613397634d0dcad6deaed6cc8c58c629ba7b06e6397ac651371bdd1b0ddd9b4df756a37b9ba17ba3d1bdd56c32ba379aeeadebde62746f32746f30bab799ee4d6683e9de50dddb4bf7e6d2bd9d36ae7b2b756f5b7fd1dd63e86e3174b717dd1d86ee0643777fc10bdddd85ee3675218641c4d2dfe734039df844f8b8d54a42ca37f30c5faffcf8eb360280ee8aa8b4f7b794556a79788a96e8199edd423a9c3f73b207d01535be1eae4af21caf2d42fba389c4c39e692d3dd52a958ad91cdc8738419fd73af6faa41dfac1e2b43f31a05c02e1a7d7669ffb950694ed4fa596fc910ed1ec91a38924fc6bf38495988a349742374ff2935425a150c6f648c6654ff8341b5622310fc46ebe073e4713493d72349178d5d2f0bd267ab63fee79e47f38165d4bcb5f75783a3c1e462f14fe387fdc0bebea71f853087bb5ee628bc810d08f7b35b15afc7d3e1d3f2e71edce0f2996552b4eff3ec72b1c8bd90fe7cdf8470be672c7bdef2bed018a701f3244c8ccb3c75737c8574384b45a31f185848c7426444e24ce83ffb559c8dd13e0ad96fb8b941c2d68ebf77d44fc06f7aacd5824c779f4feb35c624c1d675a4b1767b619d7320d69e984e6fa14a4b15889abcf1b51d145fefbf06219fe0c14922d2132bf071781f6c8ccb3e7d60f7d669e3dafee758517145e56ac56defafc17ac36dd9dbaa1c6eceee5a36b5ff4122768c56e09b40310f084ce6b048f5aad6ac7d182affbf4de0943400d773cc493ee577e6c44c5f922ff8b445146f18ed70bcf17d8322104d0e5080b9fde8c613a412c0173da6862ecf4c065e90ea95d725f14278f4552cb54a45949cf0836e119c126414744e62d5df3962e215710b6b1ea2384a5bbaf1ca1bbb1e8ee2b806084eeb652842add4d842174d72ebe59a746ba78c407ebe4a9f6a7565d07b0e9c6c100ddbd1d40064679b05a808205aad0dddb1411982068c60cac00d2dd1b012a100490120ef04015ddbd41c00a0050dd9310147477e90811024401023820e085eee6684ca00a1632c0441556badb650317d8b25dd11a430fddbd69d105059e7891012800e96e1307be170dcc8040d484eedeae80f1d881101170b2846e5c7b1f8460cc3c4377eed42449b6e2fcdb0d44c7640adabc3c76783a5895662f6c86e78c8912d967781a316d32587413e1a43d904577c7ba5bd28489a93dd0edcf922aa1053dd7f7960ddddd80ee66d2dd4f04c00f2df812024c07a1bb4d40e816c5f24714278f0e0d8c18c8d8ce7aa340b5747be243774349b4cb16c057b58cb991fda985f367d3adcccbde6eccda4bba7b6d8a7fb726422ee8849ad03d679e3d9d900fdd5de9944dc745778e33b03ecc6b79bdb435df61c887f8d11c439f57922a49729004a9bb55a9e9d8c8552977cf3fcf9166fc6e731257921949ba083f04e9c6e2a4b97ee9e4b1d77f5a7e980f092dbd1f349623ad1489900b564a84ee7e7517a44477ebe82e280b0d561b0e91e3cc38ba0bfafa06f50479bbafbcf5aa95b0560b2be92eada0bb11d01d900ea02b0065d101c90048054014f0167e2a8a936645f163bef216be31f7d2d62f9b24397fd6fad102e3eb7d68ab0ecf070f4f070b16b29ede8caf87040ced79d6bee8958fbeb65a488a80448af696e7e9aa55ed8b52cd6da0bbbf3b2441bafb024b74ab523c96ec58a263c9081ed119f45fa45aea614cd20c4e72a4fe5424c7f934cf25cc57df57ad87e458c2bc965fe62b2be4de47d26cb1381d3f154972fa7dfa335cfad3fcc14a71b63ffe7d9fefa0cac177f01c9e83ffc75e34e53c3849f32bbfb8838aa439058a137cf1e09e5fbcb688ebe8f85f5b6574957179bfef73cf7f96a9d760be529134bbad290f9f088a5935f14e918eb5bcac5ced8d7d3f9fcfece31e2e417182532c657feb574bd22cced9cc30eb36fbf71f7b7d46dfe797626b73489a2f35caf1cf25395af01327d097a9588efe1f7397fb00c0c6aacf0fed69ff63848702d0a0004bb4633164a85b9c3853b1c47f49ebe41c5f31cf88d6c4cf93863f8ef4fb1cd7e93f5ad0e622ee65f0efb520ce437c471349ab158457fca23fec431afea519cf23eeb9ab7c55cbb496e368c154f84734e62b8a695fc4da2125d9fee0d0274f0a5a8c5df627fc24d9fe74d1dd39baeb9942ed7d087b42b0ce12631f71663b8479f45012b3f606656c8dfc486fd0cb6650b6a25058ed0e4f488ed7c8b5e18bb089690fed7fc46969123c8fccf034125a1ea10f2d4f7ea190f6e09e0fe9c5e11351bb6f64414c7b669e3de17c23f783f0bf582629ba73bc9f271372bc46669e3dd5d22598878ae47f917cf43faefb8fe72ca8d26c4ff84a92643c8ff02809690fcdfe7c9e59485669aed3e8c54fd283c3f9464027489c8c3d19cf23a1cf0836f9d814aa7f048ba28b8950aea5e5897d9217497a87e695914abafbd45d0f2ae86e55773d207183e7e98ec7c778ce9b8f88fc2df3ac322a84ff86a1ab24127e55f2b2f78978555bc7be9302fa9ce591a5e792f46b551f0f17e2a90f7bd73a0064d000a06de8820d36a0b1e1c8866b430ddd1d035ae5c039f0d10c0a4a017939fc46a6862b6af0410db8061d35bcdcc0e2c6076ec4686ef8d0d8f0c2091b1cb0c143c316342c4143830f5fa0b1f981cd91cd0d3435aa34eec1527d3b82be948b7446abd5c9232805f4b9efc4807a38ebf395b752cec3593c825e3647fa97dc11f47d8c95aad4773e1e419e83eff01c7ce7969f0fe7810757a586f0e8510a69b562f6f585f36fabf5b239a991f3b8f7790e5e98c37fac264eb0c4d5d20b9bb1796dfd988f17d639c3b4d298db5c83d5c831c3173433d080668618ccf03433cca0a165c9e71ffdd8f497dd390361a5907bd562ea93e6d1a0c18486860f355da0a909024d8d12ddbdd3e3397c2eab34e8fb907c1ee439f837630032b2d0c888a2bb659a46860864fc74f7a96964f8d0c8b8c10a342da001010d0d066868461a9bae0add1234dd0368ba9d18588881849aa689b1039a18962606101a19a44023030fbe5aa77d0d45bb6306cef76b634648f01784f3a70a72577da63705f4f9ea5321d9e971d61744fbeadf8f2a7c168b8559a168fd43f2e3397810921b6ef0c05ac3f9656219fb3bc1af565dde101ffe82f09fe55c5a07a9cc8ab259e768c4fafc67437e834771fe7aae12b27c856288fd7fa4e183b4faef78a57dfd9ce591748603d7660debe3af4d1994a0984686264d9d46061ddd5e28838d4703438b07c38aa698d2c060a2bb457068884dd3c00062c88f1649ab3544b37506023309a099b98146e68a0868642a4023b343230323860a9a981178de971fbf66feaaf6f32f9ab9d5fa3c6653be63547daa1db02fbf5005fa52eef37d5f0de673cef09c91d5d23ca783b44ed27dee93e11759a34a6595ca2a8d09a289f15206a3a56960a4e876d1c090210d8ce3681a9496f6b0eaaf1d535eab13c54437100d2a287fcd572e1a54d79ef86077fbd0342f54744fdafdb0962e9a97284dfb18cd4b93f6ae751e2fa86e98671c7507a771a16287d246c154a443342e41de8cc6c506e6299d4c1268c810212607d0987a684c291ad30b0d4785ee66d2345c0568b849c3cd74125f793256b5bea2292580a6a4034de98566eb01cd7644b3e1f0d5fe783c40a4803c9282ace93e5f2ce10b157c1181ee0b295f00f9c2c462a9c4f00031b8bcf8c215bc188217485ee8e0850d2f640843953070200c621870008311c020050c3f80810730b87c61055f08e20b34b60c610b145b685b6ef08210bcc0022fc0bc00c30bdd85157421d68556175e74f1042ec52067a9bebf36e3cf6334e57835441042eead9d1e67798e1c9ce68f51d171a675357ec62d96c7f23eef6801e9f838cb5309c9ac9802fa523e03ef7cecb53b2b157a917504041029a02f6605e0e2acc11cf4fc139a650bf3d50ae3495ecbaa5689b3bc4f258a93c77370203c07175a8914d36a81dcfb767c5e135f9c46b474e2cdbbfabec7655853fefd6885bedcfab29dd15c9572dc12c5077ddcc31f2e45d257f4f396f7bdbe1dcef2cf6336463d633a7d8890fa339a10f097cc6b6dfebfb1d1de98107e71c1052e9a206b19bf382b2de271d1c4662e7070010bb6a2e7d2ae7209e30213cd85a3e742eab790e4a9301dfddad816a6747bdd16a2587bb7d083a70a539326b4854e2787eeb480c5b53065470bb3c62e33722d04e9a6332d5ba61629b440c0bab539a47dfd529c46add6d0ff8dbd685fb380832ce42cec6c81050d6081070b37ae60852b28e10a0fb8428f2d94b0c5115bf4f40dee5ec697621cf77139ffbaeacb9b53fe4694fc2f72b7d96bf78dde558fc5194be13973519caff9a2b52cec79607e5fbd6cdeafd55983917fc9d5cffbb095eafb927e5efffe17d5895f2fc2a67bf5b7e8aca0457b4340404978bc07614aacb084155c560052052ddacb25cc595ef8344661e02d2d3e7a3183f38808158e40051750c1082ae0c852258b07b20865e92960610a495358620a760a35a460450a2590024c0a3851d8a2db1b777adc56b7b8522067b9e3e9b549f3ef0b6b29ce8ccb9e24df8bf6f5556dab45fb9f0ae4d86667b97bdfab4ef0f539cbbd95c42bfda8c6ecf47196f7427e9fb42b718234d35bcaeeec719677ed0ac7fdbc28241105044401480b2fbc1bc431cf3ccf5b23cd0118c0008a3cdb3a87f8be207e9c425a44408b1f2d60a040032818412189b5f7734c555fcaffae9e66c56b9de6e3d54452f57d292f31a6dee7619dffb7c837bd24b85a3cff82988eff37569f087b63afff58486ba238c3214f20bdfc582cef136c54f8b14e0a0b39c18abed40964f8f9c50ff187ee851f3ac126294bbb92a4486ad29d645304d2a2266069c294226ef390ee9af035a107af09364cc072951c49a2e4081398604290f7e1a389e4638277b635c912b27c18c9d144f2fd2cc18af696d04477376d094dba9b2e41c7126e1653b288d2dd338ba06e2f0bf169cc6b5324310d9550a53d8ca9387ef6518212ddedd9ac84991252fd4a8091042ada0b1fe6d78a4f1bffc3247cf4e6af799893a0a35b86842dddedc9c292c8436b656e6b2d631c48a0d29e2ae5a1572468c0e637a20d19e2e3ab212131a0f1b38f10f0978494e7c5f20ea989e21c224e6cc921437c84601131161ddd5eb51e7eb64657a2f0832b2ab842b637946dbdefe1f04e0babf68a91ee6e91c8159bf17dfcef39c2963e8214dd4710bb08a43e1cc13b820b1653747b5eccaea8af7cf5d54471be3e7f6279736961d37f0916140beff6feed57af268a2e4be4f6475be968abeb8a2c5c31c5cb8ff1d74c9978d888e6150cd39e2b1a70858ef6fed25ca963ec5466842c2ef762e2e38795424658c2abcdaf85a1cb083eac70e1857f2979f44ebf0773fdf1f54654f63d58430febfc4bf35f5f4dc72e2b505869d2edd1ac28fa0c3facef78ceacafa65bb9a15b2caff7f8f0b85091201fa77d15af92227cd143f091ddc113fc2545004011ba0a145586aa7044b88208503a2218f13e58895fe1cf6fc563470e0f0ae7675ce9a762d5d04b5bcb60696be1b36a89ebc77cbc4eefaf37d6aa0dcbc7a4873f84150c61034358c010123004030cc1c653a5f07cf9b45a439e03136779aa9d1eff0ae42c0f87f36ff8cef2543b5240cef25ed9da242f7fd80b6114828d1d04a116041c3e1eff592e63f7692e8a1fce71f585ef3303f3dcf97e96ebf4951d720f8f25782958a97740800284cfcb6479338e6a7155e2fd40053f28e20702f001161f28c007a00f6e5891d41e8f8a2705f41511c5c9f378eeb45a93acc170ca3df04e4c633e9eca739d19d3947fad5ca7675b453a45d15ed1ce68a3cdd38a29f6c78a285f14be1541dde3e3e18f876b5fe423758cc3888aef430fb2f84ab33de0a107347890041e4cc103920742ba1d74b1832a7ae5318bf3bbbc0fd7bee85f680734e8400b3a78810e22a0031d74d0e5a08a1c7c0e3a1c24e12005dd5fed7df8bc1552af7d510b7fa69709acc759dfeac3b5f7211ffdcfe7ab2f0614fad0a1cf5b389c9f04d6e32c4f95c2217dd5bea8d5c2b5f7a1d51ac2617df243cfd8824fd6543b789ce5a9667866ec54258af6ce94acd2e918478f8f1b3dec33f8b1d8ab70aaf645b52ace213ba365b17c3d0e52dddd0db2dc8005dd0d8ebabd59a6b4af37e8a1bd9a98c11bf8a4b9a85479d98bd4885ef2f31427889f878a1262aed6e69528529951493595eeae36c0523bf2309c8e147eb6410f8ce3c95a9ee468c14a5d3f7694435aada1199e464471f20c191212033a726477447182add6500d64d0a00a1a34d1edd55be6dae7fa63155734ae22a79b411466d08119f4ccc0a6bbbd3c65ef35d5f7a5f0a5d5ba2a4c4dafc190783218c014627081181489814b0ba8f8a8f8018324181801060a80c15077e339cbdfd02b1ffde72c8ffccf594378925e13efe7acf9304a9b247e010a5e007b4190f6fe5d507301ce145e98c20a5330d1ddb83c3a7a219cc2def7cd4f14670bb4d082285a208487abfdee5b16408005cf022444ba6301aa5bc10e562083153859410e5250410a12482184142715e8a0bd5690b3bc96cb592def739617b31e13ab1d59ad20ef13e7df8be7ce37473a3f92cea6bbfd5be632c69a612ac2caa0144c210529e8528094021f29d089228b2882104519054e141c1452402104142e284a2898a27b87cb2a45e22da01ea0212fe613dfcf3fce3bc9d538f10ad3af8867ef13e1a1a5f7491d75d2322e89bebf384a5bab4adc537ddf8f13af8e3e2c6514364e4cc3cf591e8c1ebd18b3d9ff8d48717a6f6459def77d1eb3993aa63458aef3ce5236c37f633ebdd2262984829c1304e104b413f49ca046777baaa0d46332470e2f632b622c8aae1c39dc7b11462b0dfd67f9ab0d3d466976e6abeff31accadf77a615a9588f3ef0c4f23a238c1d90c4f23add6d00ccfd9db58f5c1a1cfd0ac4d60849c7f5d2648b53e13d427c939f30a34054bf7a4b9a64ce9ee764d0992dd92747b9f08561dea9ee0c2135474b7b7e4bb9647142748896470de7cf4459e803d81c3389fe81248e1e50b7e083ed99520fcd18278ce420ad2526848ed8b86d4de0721e02f11450abb1f547b1f7cfc283fb42009923ad3f14990c4892f9cd88213217042891342bcda7d23d5d76a59fa2271ca3f95500ae8f396cdaffcf85527f879ece813fa843c071f81134690c4081630823b821f46e089208b7ba258c6fee6b0beb7c3599e2ae59fe9a5ed70967f3c1fcd3f158ff77d68c12ff621ed3b1150e96e4f044988408a088810c1d74384f80d9f6a470ae873d610217e835774e7f8f78b261211d8747be4fc99631c5e73c19ec90b85c08a982b044d74b76cbe5008749a7042131ee8f66e09827fef87b5745cfb2258894bb7395b9ba426fef567e23972e4c8e11dd1d85fd2070c52d266228fe72ce8f19c9118df1f4b5c2d88efcc339c9748ab35f4ca2569ed7d0d191202fe9221414a21e02f098f3eac43e8e03144a389a8e4efaad7a99e059d424423a2010200431100203020168c478462d9704a89caee1480037ac85c904c9b49b330c729440c41c4100000000010000084410001d4430040b59b41698cd39138229bd43c3125ab1b7187a0399ae379821afb001729652652c303328dabc4df413e69ecb0b89e51127fae4883f5fb04ec9952bd58b11dfde5609c2ecfa7c0162ee9312791709cee7e4ad0e101ce8d81e8474108e19169e85ebd5ac9972f6ae5d8392aee7c27730bc707ee12ad0c876ff670428c7f13f25a64e6b1bffb2ff8ebfca1d9c75c26e23e643e6dfca3cae320781fab8735f630b4bf75fe61907b2c74900fbee792bdc54b827b4c7c82adf64a82f1a595abe05d9be3829c2d4f18269c20ee4974ecd0bddb5a56188a5b194d46896994c9e4f041e98baa91c6b01500afba8b323007336cc45214391eac7808591385b5a906526455ae465445279e2a298dcb020b37dbda388f10d6201b23eed9089ea264c0c422530bc8663a31ef01381b614a9d344bcb8b9568dddf3088fc6779bacd8f1f7bee529ccb2d2ea676ea1da348621d2112ee9dd1dfcbc11c58aa6f6fd00f2f502eff5bd07db3102a04c9c46ae5c765a03b7024630e9c712c4be8fe2dd01a86f4bda6a98bb439d42c3b4b8167e3870955a26153f01c84ea8e0676c8614ab438d2a65f7e7dd4cc4381b07dca81cc6725f13654e688d05049414c9b1e08c8e2779c2cb765d82029b1e2e1a6dc8119886a39c21bc819302c9e588c856db05f91b5aa08925b5393d52423c3ddd3b6a8f903632ca34ac30a655ce7b07e32bbfe84b43943bd11032128014947fdd2f11f7658845ef1fbdd2b427e7cd26c5ad6023255e2d65b37db9fec93e08c4c3ec9554f153952802f0eb316c3132030047880e8f66e39829cd893b4f43f175d2f5934fb03c078332bcf8137fe53e90286252545af6142610ce025d6e9959bdac97e77bab650124b6d51443e55e2ec608371faaeb44ce4741ead369fdbe1656e8e865f35f7af61ff189ad963ae02d4bd99bc5bc6c970f0fb4f22cbc13641cee172597afa3f15b3ca545c667ec432ed2e904ec43493b4b0b010ade5b87ba35e869a5bce7ad27a215c67feab1269d37bd59d4355c8ae2913095d95f89984c77d66cf209fdaaeb92fd966a073540477c1f0996cde4b6703e180cec319d9f834c73fcdd1d0347ea2e709c03f37a8de3af2f82922696117e9b2a9f78697c568c41d05d9c5ac9fe431df029f667d0736e7396edd91bbfd15d60def24406a2f5f136ce4a9b4c2e875ad912b949f4501d428caf180251ceccd1f8d4111543598b451d4564d7d21c7fc64cd4af6c834aac34ee021862f1fcb40a4cca07cefcbdd13a29740df9cebddf185a1a2726cded036952996199763ac01f53a40dd436c728c733709701d99d3a300646058c5ba28bae1d39857d668e775ed2ac3638a61aa1969b28d35731ad6c20502c775ecea9efd4506a70e84aafe64e493b8d17b4c41aeb49377538b615a1476c11edfa329ea5e94991294eefd8770e80b35845f357f87f0589798aa0e63eb84b4ea9203f65591d66ce78d9c9eebae08ff157e9c8ae9e44aaac45f814542385b3eccef02de7c2fc975ca4cf95520b89fd5fa7df3e206519ad821730d00c319cbc0c65086e1554de67a02c4f462e99c968e6cf8cdc683c013ca0498489fccd7b8d6593661638598adf0f2fa729b812c05b34d7589cf4f3bce3898010e08e659e4874a7bf61ee7bda68727c952abfd072e40221c9ce8bf0e749724de524cb08f96fddb6b4e1a9686bc43322da7bcf1591e605f9090de95734edfc9b30816249561d2d11580dfb9d2a3936b2701206fc146d9b60a0f9585031e3f1c1dcff6daa6ef08c199ad26f4e30fb99652f929a076da07ce47b0d000fef0e50f00b20b0986135e25239a5407921f1cafb08921ae9a0cf282889544163877bdb98e668211ea9b8833a827abd1211590b49036b0fcfc5f4caffc13a9faa0e70310b24a036ae97f900ffb5b9d05f178936e67267174125260af13ad0da4d6c70baca51dd0b988268c32f936cc33a488ac9473d5c73a7318adc5be55f58cefadc996bf9c03e72f7ea9f27a209e48cc9d5a97af7426e6482da73acb5c4da8cbd91e4f8ce700686e13c119b73bab30b4c84e3ef79a3d883c501957a56bd0ded52c08bc9cf4b0a7819bce8d75d5c3c5def229560d0c09bcf99188fe0619e63975b67032ffa3fe03c2f267dde6488b33e5f4dfa65474a78165dcd877788c9c30d6d9c27eac92e38838bc48d5560d66dfbe948e1ee313a543cfaa9af3eef17f313f0d36910051713a80e52ad2eadead110a3929da5deedad8214d20a4a49ae9bede14cc43d6360241b44585eb146d64dd47e3b9497612849a5f51122002783dcea407a6bbb9d155587a1639f7515061aa8d12a1888d3228f54507c011dffc6e1823ad15d5b7409ce7d36f6e822464d09bfbfbb7cf925caa68fbb27ec4ecdbec2ed63150d07239527babe0367c36026396fd49f1919204f78802ca55733fb043a4bc76a9b401bdaa660c8457a50876f6357acf3968ffac192ff0fd725490363fb70d5589a6c5681df2ae8bef667f3c7c45f64c0ae08f404e504c3b6028bd4a9a7de4fb0a0b7e52a1af52261f4cab4f66ca740576da9a5d4995fa958e973eed1af75a3a03daf9ee98d8f452eced374c0756a10eaca34d77615037d7b569c97ff820d3201d895ee1a588e49f1d342c3ea83cfdafc1a8422856471433a5c88e8e4bb53125128b99240818ab1330c111869805c67b701cf41bd8ece0a59b134e3749f2b2d06708dfd72e4cf5d9971b9171b77d6e36c3ad2ee2ea127a111fbee1ab7ff751fa3be05f91bd43a0c9aaee47edd80174ca7efa44e192f8eb4327a05d4891437333a4b8e937e73c223b8b97ddacd20049a289a3ccc8f1291698ee6ae89e23267451b8f112836d42b962ea9c31f90e7d1690ee609cc5f8bc90ef2811b8c70cbc3913fd92e24f78d43718950b8550181ea53a5f79a4e81af012a2a2a9a55e3781cd5ff79f118f8ca435ca3d644b27ac5d9d07a68749e2cd84df9d78e6940b622e98bd92269f53a84b8bd91dbf19f3d3db55b18303edfff8d241b14b8bd2631571ba60668066769684f3aa598ef43925f7966498acb0923c1ae60fd3f08b197231421b9373e0a60ec5e5d3d155d32b601655b8e585ef319af6c7d5816c78c043eb88a156051881842574a1121072263163421fff9ca25d221b8ee5baab2468cb04cd688a0bc989e707429ab4232dbfea5614b6fe348e696d79a9d33684f31496891233ad336bd515954c6ad0fbe8355e1262cdd438b8ab79013c642ff1a6c68d617cd6a3453e9b6f1d86d8c24f692adea1eb4deff5dc516a8c9159e81d8ab35f99936b898383a4a18fe9f17fe631caaf9247e77fbdc20be8f81519215fcc82fb97a567d5db9734fd93ae4e3314f4a86b2a77ea32bf5ebdc59a10780ff88ec7dbf126545aa981272106a335769489af2f1f20c2e654dbfaabd60a95cde7b2dcf1c62894b8d16f11716048c9b7832393d54f34e6dbf0952c3e402e6e8b32469fb134221ceb1a2f8ae4749e3a3bce35aaa713369319a7b1beaf36bf975c2c9c85d01999be8d6e9b217f49ac1da655896bbb95f7724770875db02cf144f6f62aa73fa3e5904522de89bf9cbcb8aaadd5cd8d00c1d4ee89ab4d296001e340941a290a77de10d97c41fe90ab1127eac089b6be1a7da138715768d0ce3127212c194086801cb8b28ab3750f62dcf71c9b58b80d6bf13c048d0d8cafaf796332875e8c13bbf406027674e7b4dc17e855749b426aed7622b21158d91b211f11904c5661bb9b21c6dd8d96755900ebb09bd7da6a8d6b41dfbeff9b174117f06cd22594623641540cd86a5f8b635121ea1d8f279b26bb62da52dafa01bc8267e85bb592985269dd12b5324bbb81621008b2904faab1cac18b947511ca9272758ca414737f66fe0f6f67c9afd2e436ffa0d7349bb7ee07f242a0a0a5345cbeecc43d61dc03d1d63340fa0e7591b3da4b23408d7f8068e840b21a08be617ce04adbcb57334a4c90b33a3c8ef4c38f37bae2b309afe12f4c5df8b50388cdefeb33c62897c149c48b735fa80ecfd0074b9e54f1fc67dcd6c49f7a3a22c2c59e1915256ff04d7b79b64857d61a4b8493845b3a8ab905320f4a4f20377e1c6beb27198977d0112ef391ed7d540f748260696e2dcdc6efaf952874ef71c620bad516a43a0bc57173512b09caf1f79a62957cff04d7d9b14d3fce64a51e35aa9b549e1bc4955bc420108d40b7189b43f3ea2f6b4f3dd34e4ed681887216d6e48d51466f460dac63fa82588890b386941c6d846e9d7ae642b6d353a52d104a5190b09120ff43e8eab3125460f1c50247471a269c629679ca6865ddfc50c06ae1ae8c79dd3657986262ded226f9813b6868c46056c1edba61fb71f5585021c59cbd219fac94f9a520b707e165a99607cf493fa3e8d15f4be03b97fea6c3c372cec686f4d1c76cef25ce52d99be7bd07a0174f8817e200091ff33e3fd09e675a52e1727b52f64c04f21a1b4019505f8f12bf85a8ccc8aa407e13764b6f63c14ec5c48872ba456cab454660705da1d29f07273a56b4d384e0eee0e98b189d25776440e961319c21c743341f7dc21c697d074f0dc9b0b3b18125718e34b49509538789eb09c284e5322bdcbc64d181be8a09d7314d82366cd85ce12a1abd687b7e83f801588b76d0207c92d23f1d128460ba8cf83b107bad61fbfd966f50de177ee290b21741d2349bf7137577e2be89261b6709014509ce72bdd85778159cb83fc2f3909df811fa57d19ebc565bc3d7387b605c53394cddc1cffae7649279b1f4c2c158ba7df20262815f8a76f061d8db64fab80d147eb2c20b7a658c9f606d1b362821bb2cdb027fa9552cde24ca085640ef475469d841ee1463674be609c58baa64d673d9d951878b7282389b67792007c38e55eca9cd9a379b9fcbf2c8e321c1ac6566b38c0f5b99c7f087e1e771800deb27e41c4ef6706470b4c7af0cb98dbbec7c8993f5a6ea04277b37c23be6656adb134303a952ae59a9b062ae31a7cdc365c8f0dc949805c20a31028f6730aece9c32ea533d7f26a44d448288e70b790d99d506c4cb03dda40f27442f740e56376f87562c51e716c2591e0f8013f1fa82887a8c4b60e78501f7802fc2d5b4040c079fb008d91aa8b775fc6e8879829ce9e6623c745607ddd36dfa27a0938b3e9c49a92d1989b07c11850a7f0ad67a432c4701f3696d6c5a502806d53d836443ada7246744fcb0354441c392bc26214341b925257b11116978650c653de232d0c4b7f4839934cebac619b4641ed205415eb51438c40d36f54e8a8bb166b5fb73820c49dcbb7e063b43e4e5d5119eb8e8492a92773728c12937e45cd9e1e2871f4989d9996dd3daeae41ec1d3001a2f50c1f4caa8d65f59e1653a0482eec5a3779e9c1f05f9efc5e7db0b7ce216a076333bb663c3668337387a0139cf4d3444c40bf445647d3b2ee0d236bcc289b8d0365822adc69a08f39f5adc97661e24c2516fbeadb0df1cbd84951787393e7ecdacdfe941540fbe8c0c4255c4a1fc041703980801eb2260e2fecd1159740a4a340e52da78e0d0b5b7204806404dfddba3140aaee55128c67d15f7b9d359004a46c15f5a9024b3c5741860057e1db93050666561419f21db971e3a6458757b0720db74d083b6fc3f677cd943e5ec2ea050e203f2241d0b8651df299e5d1d0a25fc938935ab5bef62e80ebd50d080bb9963ac46c5f086d360d193913293601d18f8e2a4c3e1dd32355c92111df445212f937aa94a821f108a7f624f730400ad3d4838d96153c518caffe7b92d0f64133765e6f04cebd97a64b80ffd015b656a7a3e7aeb2483bf8bc7dd4f5f8986ae52c20c999dc9edd573c9cfb516865907f6f5fc0c4176cc1a159e523ae9d67e771899bd5071f68bb97197c20a35d35491cf1bd460a1a63e0dfbab414086dcb8434b36a94c36ba403588cf026179609cf38d68cfef94742a34caf07fe0da6c1bec9af700b26ea1db810baf7ff8a2f0fb26073ee41c6a6657e4ddb0b766204c4c65fbee3a329f4d885d9e170116cce4e441ede7a02a6345d46c6580135739b4fd9ecfb2fd5f861787cfdccc5fe1334bfdc36210588a8e655e14fcc6c8df2d89c88b162e22297b43cde44e2dd6c07170357733a3814e08c55032a592a85fde5e9b16535444dad3c73ada77dade134fc90b8ae3dafd722807c8011ef4a94b3e8584c00dc36174d234c57381be86cd7cb79e816d3997170a2524fde460a8ab814bc8d41287a2d178b35434448c8e4cfd9291fcf83e58fc56d86d4ce30882833320ebc003c5cc6230f4b8847ab175311f43832537ad181734181c08dff18f6eb0fd689bcf074817883f64b3cba0c01379a673268837749a7c05bc3b8a1696b67561ced492c7cc8d3a6605434a47477581927c8d49b07bd0ad50a3104b2bff4687688db972dc6737d372d2c9c983ff27e4d80b92ab8cdf30170eb298d2756b30f79ccc0049d9e71632b1b32be022d0a08f4948be36673d9f7d88f2ab23b89b345ae959906fff400eded03875f39faab7127233dd8717b3a705a8ec6208aca66837a703939f26b72331482b7e1191ba8db3cc32be857b5db7d1216942b348975288f619214b30dbf62e84bc5ca520c45c145b44201b1d7c420306281f9c7017093c09c8515f6906c0cc776ac2d64d8f92e010937f779e6c9853415c087383553bbe8ab8ac29ef3daa83e0ee986e14b070d035b996725a564429f630acdbd4ef87a1db09b71fb4414a21ce76123f647ccea1598407d21bc5fe38d3b16277bca8c5d89dc9bfec63d57d02d851666a223907c84135b23685949340fc4b3e5af27492884a20b24536fca8eef0e41744fa9ee87d16972729d6e53241988e10ff09ee01acb9dbbe91fed3463e8fd5bec61e50513d2260b543c23653e0cdfc576f3f5bdda7cebe6d734e14b173860fe334ed7e3938d0793216ec646029accc668c67a89c8167f7b30e69cbd1b668c775c49251e087461cf229e0f9afb65d38460aebc5fc4cf75a0d149117bf61a4c9c1dd4e4a45700aa1d3d74ec9be996350f988a372d3d7e2cc5a71247b46d6e20f9e59f8d0cb9c2e745698d356c5d5813fef4f499d6af61b03032ec65f5b479553d1a267f08763795726c71139d0943f0a7feeeba3194d1218dbde799f4531c629c50d90efd4849a616f131c0a4e3e3b4aad86e143742a989bd8aa19858d2814e0356047967de595fafa6877332b66695feec06932d05a2240296b693c8a3eabae29519214261146ac3a427b38230922b129de48ee646ca4c601c9285f69737fb56c09dcd221f835210dbfee0395e90e55e2816a152024073a2df0199da0b7720c738bdcdd6c536f9406fe007f85960e10f5aa63779b5cfe45be0291e7a3cd7299bf2628bbd0538aea5252018569d41fa58e3b563297e37198a1c1211a5931383a01e090d9391b41576568353379cce2eea6a959bcd31a6d0fd8f51cfc5bcdd919636c966cb821f4f523c706eac5dbaa90f349e3409c5bf18b4d93e31833953b78c1979da46a784c792754423df2eea1edae268f27a8dc4622f5ab17bfe13d9dacf5128df7f41d4e698f41fd0d8d5236e6ad29b161124f821bf2dd75961762618b786c2eaf896afdf3f4fcf3189199d73f2dd274582bceb3be997ab8f12998ed9d9ee5b498f62654a69ec2ae05ac4c02750049ab699da51cfb00687ef245d2d92b029ae6dfe719371371f9dcb8be203d9df49a08cdd2486e54c650c74b7018a1c63e0e7c068277178e256460c3865747d6ab61c9385200e7c95aebb87bc9f7904ae198d10978ee4966697ffa54bc023320d492780e02e5139cb7f2ca9dba02f4599b11b89b4c583c27c830ea745ce7ffb4a23acf35efa5b03dc42d59ceaea691f3d9cea38e196f68bf50bf76169f313eef6f294eb7c8139eed09ff597774a496117110f7a7a52d42f871dffa2f3bf76957c9436e4331058e97f065137bc371a901bdeba5a0b5d4b0d84a3ac70c36e893531b5a4621851e3d2933dce9eb234854ccfee7c2ee6cb77abb88bb155a6ffebd5ef426dced57e8b34ba3ad7832e717862152a0fcb0aeba8823c411c6637ddbab380a9146e74f157b456ea55ebdf9bcc00a03e98a6f94be77e2920e9626e2adfa4702d789d26108f4f105f23075135abc5467de298e22e9e1c51b891e922c7afc63154d395ad9ca93496445ba613e2adda63204588df54fa2f6095f9b2e2aab68554c053c29653357e6f80a0626032f48ca6b5f2dee62bb19177d526db3a95655804d610583f8424657cc213c9adc9b2c851b58ed0f5ce2e0155d17b8735c28b62da95a7c40cd17a10c8ded6030f67bc2fc1b23e3f9243213ed14b1e6608cbe1f272464728cfe81a1249efc4eb025cc08d73eb8c46dbfbc19c7ddfd8ccb98bb726bb185c85027c41a24a091ed100585aa0ec38db61dc6a4c7ff676c49ce591b7ef8cb2b61de06bafe28d1f355362ac9b63352fb28f274d5b9565c07a714d13f2b2b0a68a1c9044e69ec70258a29d3f66fef007f08391e934219f3581a0ee402bb1c3f873d6f4463929ef87151fbb9de98a79f8925f2f9974b180555da0b1fd1c8d13ff40a40f3b80cf96ecd065a79d06888e0cc9ecf067d9e198892f6f348c8b6be82e8fc1b104198247819841163db7b415f737d11c698b791cb8415f27d5fd1a014d5105bee3184eba83f921f35e72daac3d9941edf555eda16025d5d13211fd77fb23ed0ecb5929fb20da1b54064b44c0216013a062222b49ae407274958ba9f6417b6df1ee9e12197de3f4b3c20d31ca697fed0cc44c2feb80e40218335b2bf4322e3a895111a5df6728bf30e51bc34bdb9669bd6ba4c673144e4290925ef9062ffa6b456ff604aa7eb9965b974b0549e55ceb679ff85802b8df50654b82f679997b5736b58d291807e25520dfd90fb6ef9ec236711bffcb7a3ad7f6ba1db1d6d7e8351e426bb2ebffc64ce5e12a279a802366c0db559027cf84f5c9d53cc2ab09e3da5b2de91c734b7224a5239b69f8a956e9ca8e513e58b6eb7ccd9a206286ddd7b1cb2c37b0db8688a4093c0989f537c1b45401b8a53fab88da9148493402c044895799e3ce94734b0a1501a3eea3b7110c929ed51a0f05f81fec98da8b74713cdc14c3fc3fa415c9c4c765853f1a6b7ed8d4791047ad9c9151c9ac066c9d09ef3d1ae4808273f391f78eccdddf81d3f58bd3eed7845b9243e64c456196479ead7aec5db9b456759bcf6eaba43ffe256216913ab5d52aee391ea13e9828ba078e70c0e3194a962505f69b5deb58385e8f3c56c29c78127157526e317354562dc779f4bdb8d0e62ed4c8ca89b1cb65e18d497b09bfbf91b2a1868e3737c9f5578277537fc9714a6c53bc9378e4cac16fa37ff7e9df7c53320d789f5070a455e5c660c352957a871c6f54bc3025d0c7708f3dd80c2d04dc3b8aad5cb6281e9a456e635dbe1e315ff42e75053d9b379cb9741cd42c2ef112ff7566e407912faf7dffac2026b64e7cfcbe7ce627be4449553a9a9332e7991443c6fcb46c4e072b9d83277b81fe1a72c3699cb4180fa7ae51c186d16fedb6127d5119587cf3d4a37155cb4dc57579b118ec247bfc963039c108061f5ff728e014b28127946cc179c4da2031fe5d3cb13cd527aa21d0b3ce4a3a3ddd6256b6ee869842e9985ccb3e54f02ffc1a0c12fec97cabb2e1b306284a7d6df906de5d3c39b8fdde23047341370f7922d4b41039ccfc555f486338f843bc8379c934df4907a972ef49a50d8043483bc0d78ad6ae492eb632fb06bf168a6720077f6a7fb6c314f1c8cc6ee1e8cf3a4a03410e70c6162a23c150c7da6330ee64bba23b58253c598419a8fb4ff5589d2cb328fca2b2102b98535b720615ed05e4eb4758da2398c4dbbe87a8e93a7e87ed0af4f25feebfba1e7195bfeda4cbad2ff81240eff0c157d325063ae9b21719d20ee7f1fce780cecc1d47da53abddaf33e95d756a176db713cf73387e2db7919707a711b57677ed79f1c5e66b23127cf36a317ad1d7e7eba52ef4c0f7cbf5321ed2b0cd6a60f39b76aa6c55300d159fbc8c3ac4879d70d24009a28882eb8fce680939e0b5b88e8949259a0c74b550b05680a088a0c3dc5ff19bd3f5706cb426669dc7b7a1a7b6f59d03a5313303fed6486d3f0d687a38de3cc2de2b15f859c3e3bcb3b686da8757c1374e6c5964fb6d17d61c1ceb31904117de7623d342df9c09718541119cc160a914e1d5f28c88bf9352df9bb347195306b8743e1ab2d82caac5c70e56212f0fea09429a08fd0706348fa38f1558d26f672d4d14c2d9e415a5d0e7015f66e426cd836f2fdde7b7663bd80a0bf86b1cbdcc27761466fbcb36e15d7cea1d9fbd32edd93ebfe62d9781e28cd6f23b578e2b9c3fd2ba054178c2f8ab29e2854aaaa9e789d95c2bf4c254b4f0903001b00823e79caab894c5720e673f56e404bfb877c82872bb0eed7263dc3fb96abca3bdba817d0538310290c98419849c60950affe4a6b84d37ec5f58f5815efa12fb524798af56c696e435370fa8c723947c7d5e5daaee86507bd908082a67b868867d66f7c5b4698802708fd0a2d00234b1fd3d3c50309568711d4be1aa831d05061c94231cb88a112c8e6cb4c2026fc252b39100ab2d384e54b730b137a54d018e5960ef4d0130cf6231c36e1910755170c77e0fa67b71d71500b390062ce8511b685a1b8a72ff43523d97fc56f23000c820fb97be4b031b3e491e9ba13edffd4dd63d9567e718ead717f7e9f71dec372451ee22887b6eb0e050fa70d04a4bcb9b15d94479c1fd80586ed487472e6532ace0626cb7f4f11c4046d76c6d107db8a97dd61431dae824e18299b43bdb3c2cc4a721ade6a007b7b5624357e265595cd113552c9525ee575f39bd2f6121884b378d48d50af813e8f1a98418061d670aaf2a9598c798f0e4a834056f964318b4f0f305b0ee6283e960140392c5022d3d0c73303fc8b34e355844833ad01b5c1a48db9025bae15946e0b19a7141df339b9650a80ce13b47bdfab75d7ecadfbade89d8c7de3a523dd437600848d990b6db0dbf3d40b79d06a7bf876680770b58eec7ada595578cb1e1c7d4f327a61eb6f928784ca8f8613ea50a25ac54ea7c3c745f78c1207c23fcbf157d7fb15ae6924e995a1bc101dd046c63cc52e2ff9eb21cdebfdb688523fa07771f28f4cba6bd3fe82f80d34379e1d017da5cedcabd0a88b14a6b76e9cb41fec14a72c3230cf4e41311dca7b5479a1c98a8b06bb932b7683893c802c275c9002027115a534509cd421a701892300ef3f07a8ed78bf240186155010609d39f87ce4ed8eaabd15297d0af4fa353b1ccb8a68348f03bc73f7f2d9b8d9db4323b3e430a3f4fbd72ad70e10fbeed6553b7c499ae60f4122a6777075754793d058f326874cfd341f41e82029bf997575015ca5925d75717427c7d6f84bb29ce5bfebf1c2ddcdd793a2e92f63cd5c1d350986009879553724928371c60306c4d0562d8269f6e7f86a8671ed7fe09fb2ba82cf4e955a4fed8426d6039e9f4495b72804cab9e557ae41e8b2840d815bac02627a317792b732a6cfae2789c1c4f222e9f5c02b3f0b60bb02b7e3d70325fe50008d2f69561862fdec58ba68daef3644c0f2233055876f28bcb0f7ef78b41b9233a39b6557540c134c6bacf8a333d6415ec8a5334e1baa0e0cda3b0050e96091a34abd5c32475dde1b426a334f8911e561ad650f0e2e53853423054ae9810ea5b8395588941186bf4e497768c255c9526b800e52ea7d58b3f83be564811f01564aacf0535d7dbcca5ab2ea51f5e4ee7e9c0d1c151ab75bfdef0f2cb7ff43a6f2801ee36b4b9aedaf54caf49a829cc45117a00a6d0dd079e50893d6197e7f68a66c15e3926d8a9a470f6d5350a56ebc1ad174732ed29122588c9051ab1c7c13614398c164b9c255c5657e1e827394e4806bc62030174bd5f1bfb89a125c62b93ec992db0e455ecbecfd09617559bc30de041567c90fda6dfa73c7b124dac044ccd7b2637ca69e5f1bc4c2c703e3e8b635b85624e272362a773bf38eac8499911c0b870d0f7e267fee8cd7172de44dce4b26a7c6ed5831ae5cc8f9f8654520ae4326a7699339ab16b5ef4ea5e8bf4cfeca9978516a8b784b374eebe1aeadf1063f929ba5cfa02e0f6a680d38da0a48fe65910321f0c68d4ce9d99c034dd4a2fc60d887b332bf281db152eb39907ccc6e7b43b794bb7d5ba4ed1905a0e0732f1be980f84fbcccc23ad4e0c551a263dee45c7b1c66193eb787e8ad8d48f7a97edab4f8c008910623e3c524bff9d2213bc26e37c5a6ce24b88c16dbeb80208e72c4ef27358c8567000a4ee1a381aa7cc2d990ac043eadc9ef8626afc5942b42ee4572a89a0f1e5f6aff9a88cd80632455e5c7a40b17f1d73d8ed45707fd4c3b72df429da44b2e80024622421a096a30a9a0181892ff11b164af4f84ddefbc2241600ad833a2d6de7aabeb1a74e5aea47c19e6d63e7c0d205028e446e805653a4daf627e314eb3edb93d0673a63728bbf635730e6e618bdfded5d61159a2cc6fceb2dc7bdb3db7185f920349eaaac446af16c820c42132988b8bbb800ece575b47c14f0e0875440956d22915a11952c059f82a9d4f3aa4f135451a02d176621d1085b030a212f164d5f56f3f707ed963d78407a5d8aef7f2cf1d570a73c6303e9c87b9c79ccbb85feabc318486b8ac06ee1fb90adc90f2721919ca1f3eec41db8a072a85d00c1a3cac6e4369244fa38e69c6e75ec0ef1d30f05f82be2bd575611e42983ca34436bca095e744c19706f2d2b1f6c1c42a28a8129775810ecf0e533630f1571c7be8b49cdc441734ebad2aa65656450e4884e16c2ceed88008fbc8dd4ff9872b5c48fa23931efa13fe93b62d687c3318c83a4f6b005f365f30f5eaca6f0ce38031243445c65fdc1be7ec5109fec0efe4503938a3a0c8ba2deb4500299f748993735cf944020ae13be4c05c126cd074ca414965d008908ad92711e2030653e6443dfee6f3d4b10f5e8ae7c57a86f672b0db659b40d0878170d94118e44e8228a1979d08f94f3c88bc67a66d446c1d12a1e196f138bd386b066a87da434ec4b5debef30d7856e8073a33d7a76ce6be64ec02437897fdc4a11645cce863c6781b831980b2243dd4b36e53f04825bc83bc069acd5ea46deab0cd9916a34a544138835534ab23fd931fb26f0d4e69abe6f9a6bf3e347dc7f9b7679da15a4a37ad2f7d8be7f6e3fe4aaab5e42b4146df266373be42447012cf2b1210e757d179a829594a310b4c4b590ef5ab9be3467596c8e00bd5be0106c0b06da50aac0cb1450ed13fde4a9f3ba7ab6f1587ee6d1a611b169e175b7d625c0b47633081f7b6cd910381850482b879e0e6f37a64bbae739125e502961ea457963ed7b81d6c8136ab488aae71801cbab8af29dbc54fc1d9c761f720a1216f20da811ccd16c093349275798538608b8677b9a52ad956cc3a41820e32e112980df24ae5d75c853f71602dbe48febd55e29f416026276168067f0de10f542fb84ac68566eaa2b2515675be0b2438763d83ab29ce45eb17d8b1c8c0c114093d083839db40184e63b500f3b457064456e3307da9b91053112b90c07b33de3a0e3e0708f4887314480cfecec9e29157466055f10a33062956c4da531fcc59f9cb58a071f9da5f1df761bc0829f9525b80d3ac6ecf8eb04a0b2b58285b1407bc2cd3202a8a76872dded71edd1589f67ee46b574b7434f0ff6396ef8bc229b96ef70148ecc7fb9cbf3e47eff70ccdb5c0b3b2fdc77bb806b7cc2dd0f02195f6d8699fe18c782b386227fd85f1cc7202e20ccb903c5c34f51e46443840c2d24510bfac9da41f0fd4461736dee27b4579f5ee19c859678ac4b1df8b7cb1fd410f3209a10dad99f40286237fcd4f45004a1139a044b8498ad71a5f6820eba8bb6e7e8f18c912d2ccecc072896bc58e853c4f1380a14645a84e51b2b3bf98e78bb11fe8148bc667b1024c0f403d202a353e9be2eb93c1062c4078de3430511bac13085e9f29fe99706e2d71eb38bae9a4c63d2cb85a0a82d91497a3deae27ba3a8040a774fb447ce3aa9bfe38c4fbcb489323fed546945f499c6a297b303e49a5a4a977f44db5c846c0a85bb6ac697e45f92b53782f3020b21c55a85c88553830426b4d19f92a3730804cb4dd8c1160209e29c756b23ef3dd023fcefbede10104186e69e09f88fd60f6fdc57750293134399bc9f5d9e6992017c8328467df1fa224c24aeb969024a099deac706b66a2806d95c94efe6a89a098311d44915659cd69aa710957ff59914cb15acc9bd4435d92843bf7e547888c11ace521a18dde38b8128529c1d4790d24c1afc603f3a488991b9310a43049c264c5db23359351c9a3cbe7bde063dc881be092b89063059ba85d8a57c47b722fef8aa55c8ea3e360428f9df8b61df42fab37be627b98928cee76a2828fc2de8dc97672b7d43a60bba3d61dda693d0b7fa9956984193abfd7ea6ba373174b3c37ce63905efc4b9b5687e01e507d115e9d9749c381564108da740029a9bcef1d6125b6629e3904e4ed3bf4910e69104028acd87cea966629773eaaabfa13bef59dae42e69297f3de5b9a0e1208fc87eaf9deef96dd1181545a69938efbc70612abf2db344c872fc428eb0f4905c8defefbf85304348b10a953f94c28a390b093e715e25fb9014a14111633948a63366fbc13145a0b3421c06f53a7b1a45c093b0be28fdf36fc7baffbbf346abb741d1fdfc68fa1d38f21476f574cc80488b70a8663992f3aee1e60b2a2ce460085725b3c91edc5224ff19a9baab9c6ae191b0831b0ea0397682c583a0e107c7945f7d033f5a11f98b98208cdcc7ad5c20ee5ec59c12b064e4e1fcaeff073eae9d44e7e0bf2d34344845da36fb134a37eb039e71d0a8b69afe1ce6548487a5e373670a2f3fb6596b91dcad415035e39e83c76e833c3b4f86b58b2ce47cb97d902f04188cbe9e227be99b1a1125709f7f7490171289e388a09a2da2c4f709c79cc4bfaebc4089a7e3bbbff4510981f4f117e5e8ac95f9738b236506d80f6536ebe5484bbc8cacb38cc310ca7e974c5d11dd3410f918ea93478a2675eba9f71e1e2f39028289c932f68df5118f54cf5233431d364c6f56106d687ee9414c0bdf1bb4272eec16faa715d729818fa7487e1d8c24bb9b160435ecdca71119609a0e05d827b60918bb43a435cfb96cacd45ff9fd6f6e738641d836e74f11765f68ac45e81452ab0c64f0f0aaef4868692ca95169bd5d8c6f5579732121bb9afafda46e016fef6c749bfd42b669ebc62fbc99b4448dc611858a64a8b9cd2192731b681a495678ce4fc6bf85f15be7148fa98a863513c4e8d2cfd8a4786b2b0a37e62eaf5e280a5ac57a5366a5c463ef10b9b3d5cd17943786ed1cd370140f4f8a2408bdd3a1575dfd33449cd4c1b5479609de5f1787a0c7cf3e45cc46eb4c32ead5d33b3db7ecf33a996e508af8dc268725c107eb4d3e391c2e0019ef539df631b0da9e1802e3d07da7e4cce69d61afe548912327701ce3b1b2a813f19e001f8e698e68960092e6067931cd809b5c6b4ce71677fb2f7cc2c2bba18a302cff2fccd23e6a815f2646c80788335abb67f9f19c4cfd18af1424d2ffe25b15efaed5023848378aa2fad0c09cfadbc3c1bff38c3f8add7e1320486bbc89cc3694ae101f32bea26ddf52a5e1ea4aeaff6aebfb1e1a4aabf1c91f049c632ed57e7d9410d0e823b01cf84f46ef73561286786c1f0e87d86301485bb772024bef67c93a4d467e1ec24a227eb80e782fbc9d8e1c9369bc04f4ad13874c4920c7a4e5fd44cd811243aafaa7937d7f176bd20de91e41a80985aee13ee4d9cf776519bad2377a26ec35d4f6bda3240a67da315c9bc48f528222cb607381ccd37ad9b566a38011083ffc433d070eb12485c4aa55b3fe871b0b9704a7aa46adf36613701920bef1fb71f9795f7f273b87e9f205d6fba74ac44d6084fef0c0c79a9ee6ff555b016638e51569684c7e9a3d13d3a6337bd0137dbd8875a6d811c8e98d33487865a156bb93cb1a86137ddcf921e106208f28ae157e35042640d73f15df800c54d4d9dd78cac769bee700a05dffc269ce29dbc03a4ef979374514bc61a8271045a50bb5d5cfa7bf2ef3dce74a903fb6dd7f8942a7e43b185aa8f3dfa390c1f47dead53b021dd1d29a12d2e08c00b6e40191cac476ffcbef92e6ac22562bc0f424f826792b5485e43708b0ec78f6a61e52dc6810ad81ca8b73a82f20359d74833835222dd353cf481c8ceaf0447d941539e1f3b6a12c367c01c28ce8b4f9c062d81effe2280e20d266589c3c8142eb263dd7907899e28642b4ba10f64f5e4f0dbe0c8253c31553efd0e8f09371bb79883d6fb868967ec869f8f4c9c35e1c62f8c78c14902cb89c3bd48cb93244ce1781b750e51c025c592c1983a1e1b5c2fb2667c03c6d8d0c044fa4e7d252182357a823ef590196d2be4b1f8e994b996d3bdd431ff603e6c956fc986a59f16cbc28690253f3a84e8e7a2b4557a2c457c3d442bbcc52eef637572a17101349f68b434fc7a08f78499fc15cc58907eec415859bcff419a3b824b60661b2f14b7734c0559e86e5b80fb83e299e0766b70361ad7ae6210c19a1b7e26d7d138cb65f413b5356204c46d6ef36f91329855f8c0bd041d91a4a9d8249d4302f901bbdd3696eb81d6ecd9a79a5621a5d866dc1175d9a9dc20d47922c6add36fb5fa24df5c1687237de27486e8f501851d7c1569ed4c08742972e124a097c661e5beb161695929e2401c79e7cd49e2d082da3ed04e401d7cee4a7ddba81029007e931e2d9621f672f832fb0c60d68fef7ba411c4a6f0d0700be2d0a092e7a377277de649c698c8f99cc7050e23ebd4820493f3cbe76be637f8023c8836ca6a3b62255ebfd0fccfe7792d8ae16cf8b03b1ce82ebb9add6beeb3dafcd97ab2370740ba7e5e71330845ab4e9e7daa3a58325e74c4aab5c587eaba0527b0a6f240d7263c523d48532f20378b3a6687c3bb0ef64742fe43bc8124b06001dd565dc236b3137109ae96af2ee6c4dd409879c11b76e5b581df40dc0d11951e9acc86b99a416b7e6920cc67f2ca783f2c63f9b5038c4869ec68823ea13a7e6052805705cfa75bfe7d184bec2197b9efc31fd1b876cae8ed1d46ee850e51134ba63524df94327e5b16840d8f68e74464c93cfbc64aace6ace0755dc2afae946cda1fc3496a1e88f485841b05abf307a0c2a73f6b166c1248bc9f1a796aefb714025869ad6d1e72075ed436ecc9d9865e1d857eb8c914b9c9671c8bff33e73a7917e0eff939c6f25ffba07ebd9d9384175846fde9b99067450616275d3eee6c99d9bf8a0f99a504cd0303b981bb04488f3bb036b259e74480bf1332393a33f550baf2b4194c2de60c23f88b079599f255927fa65021e97f63b64fb95185bdfff9119693fc5ab998f6d9a00f9081c360e49f55c57eebf0f50feff983b640a6547af1931b967d915db39782bf6f950763006100eceb6761f416e5c3e7ca06ac6e71e789b2d71e5d29b63b802254800bba303bc8eee9d1385580cde8952101e201a09d9d607e6d38b7a012a47f217bb9d2d5b758b6905923046c47b5a569721dbe0d7d287d760b570c4b4763bbd3e5fc2c3140d45dc6cf17e0387ebc5934669d23bb3de377682b2b97ffba5e123e1b8d77417739f9a27df2ddd3d0b53cdd6a849abd1676933d7eed1c0b22623de842f89093310e3814d422e0043bed77fb1cd21fd5eec4e0558506c9bf38beb059f6f86dcf3132033b61451a9f103190931a2d88191aabc22a96de279cfb1434afb959c07274922f3de3717ad23f25add0c26bbb7826167eb8376141aac18ecf7b164018d116ffcc51a41145c8632a3bda1c05003a50238415cdc475ce941150ccb063ee178e7258afe9020e1072653e8c2e83ff63fda6e5ce2aa5d1b804bf0b95e1316308671ba5ad7d3d7a97a543c48fcf2bac8f5833af9f9a5d16ca2b3987e85b24ef71ade239f151a7540516d5e74148e6cb13032d72493ded5a8289cf010c147ca0d978ea3b614356c4ee74b81d92fa6e88142da23c18f498f215d6f61ccc43737c1831f47d90c325c01d276a6ff4961003176b4972c194be3c8eb331327e93f59c8010daf12eb00662f87ff1f1edb1676210e47ed12b9af234d580a79fe1b88682a94525e4d6dab7bbd2f0c9c0d618051b9098a13fb2967ecff64cd679b7679fafe9e65c8f3cc9ab92d32b01a3684c74aa151eaec1b2e7c324cd0ef95ff305683df46160ab2177010682b9d623996f414133b7a47241afa932a8f2aaef1e71a27967dd7c29a259155b84643e13884f58bd530f1784866e866c26119023f69000c25597da5b82834ed9d95499faa45367488ffabba35cf1a3845575773a08ac8679c8ac25fe3ceb206f71e63ee66fb8be6445fa8ae888a2fb736f659f2aa0d2f61a9d6f63e46bb23c7a28dfccaf41c31e66dc2cfd679c4f9407e22941e2afaaad138a876214086674ad4ad06db4ea26fc56e0bc9d0f15acb6e12f1e211cd7c798a3501cfa67ddf5b9f6362fea32b04ed88ebeab4ab230455043b9eb1c5586f3935d120dbfc96fdd93066cea2765ebf0332380383fff8d2037f41ffcdae059cbb90e9b5ee6a1c015e14bc99f14e798abd74ae6075f1af84d7fac8b3d37598fb4fe9fbdfe5689d1cf8674e5039157fcb0698de57bb4059fb35b5c4516b1ca7fbce564527529d10c191dbbe041de448a4ea1b813eef3ab7064a5bc8848eedf7189a26b2723fef1b5a99415d97ddf4a08773b6e339446c6d68b862d805dec0d32468bfa77d36fb2e0f3e015016b6709a608a2977832c85b9bfa3cd524df608a50a4460723254a90f38922e687f52471a4c370da07a79bbf192382364fd81fca3f9b27ef2dcb4ed8fbd50dd993cedb58374d532d17298214ccef3042db7f0e5ebc7451013475affcd04d1396c17090277593a7ae3614ae7a12172a107168854a813153d8312a6f290966d84a389829684d224e88c41bab0f98b0a8a249061efa37de28018bd38126e1ba90f61736ee8be8a2ea128094ec5804bd33a10759f0421849196037a30142f1de77bd28cd2563edd3da75a761fd73b4dc5aef1175a3769383590778337712df93e46b832ae40f63490534afe946b46a573af9f13a298377ccc301ac86cc3f4bcbdcc168f381881e1773f120567f527570ed15a8c6fb18f757f2dd6d008aa3d41f2deaaa01eaf24b59ad53820b91ff34d23167457b5847d9af62fa105357f298c7da198c3e96851cdcbc9bada59e4ab40d3c0951d198ea00c3908c56ef5174e14c84ac08dfe91210f2de94fc3312c75acb9acd8c2a00af89313e675dc24b377bdb382049507af6a793857ac651e224cfe2ab7fb5af5863cf3fb89f73a33443d5833eb71994a7b1e1b340f32fc53e8c5549a74780c4830549fbd9d1f63a213bcf4bec8c57a05fa79c969aad1c1082bdea9b188dc619205ce98b245c5889766670d70b08726b2150787f9ffcbb65642262dc4053e4b8364cccc66aceda35675ae213f5d2901b2b73cae1c9afb67260f0bafd2f84719b0dd08e1ecbc87e7c413be6c660b4fd0a25ac5a6cc84f2ba6e329786ad82eb7206e39acc2c07e7c18b1ad50e2f3619107bac81bcad6ad8fb6ba61fa5443fe849167e7c27d13ae8223a0ed9b579796a4372387a0eb0b1dc03119255b626053a360bdee8b997e84d4afa7c8ee602e53c3dbc3496466496e1e9d8fcdc0f2f0ce552d86634bc1a465f111e5853d87e67aadd2e9fbbf8ca2eb6c91b55db61ddd1d334ee4699138194c554f325cfe22972a2a471695f18714ed4faa4a36b3c02dd541aaa0d747cd49fa256690e4ee12ccf4490e4ad84951aa76a9b910fc9c17fe6c7a7084cf14d661f4f9c9b7778472a99ee42b95c0b05774b2fce073e9602c9261029e7d0e0bd08aa5c115c06eaad10f31bf4248086e25a2a56393129088dcc02d34e2382caee1b83cc1cdd2f17389141692ba999a1510128ecaea5405273098e5472d108d8e65b8f3b6f67376088d825fed8b7f3fe8d180f568e7dfe5cb2dbf07d8670778271cc27c1df3fd9cca6abc3a98196e5a922afc640917fc1f19a9a48f7a772b6cef6c6e51305977034ba8cca02cbfc1c2ac9acf21a02fbcd97479768f42786941326c9149c7eaa9dfdc1bb241a0805bc78fc57a2952f8896442d6a69982f9d02a7dcf1eac840eecc11ee61eec10c7218cf19d9c2c26c7cf95e78ab2a18a9511311636069307891e7cb88a9f3e49c3289cef0513bc643d16d0f447acc55323f283750fd2537fa2d0189c57a38731dfbc4787578f317444abfcc606b6e61e10296473457e230c24336e44e6a19248b848881cc6da9f06b5b1538a3ba8760bcdac4d7f95b517e5bc12afd2f67425cb2b267a4ab97c31cb19ce9eee1b5788f0e91fa9250cfcd092fdc294507396923207139704dd3f0f9b0c1b0fa92bd7a1cf978453393013bd56b6041c5b300da1e38751aef1f47fff0469d2206a4df1785398e5bb79be613147621eb92dad92aaa1d23f4b37c042e5a0dfcf200c7de92a21d2e9c90714d8e138cc2822c65f16b2e8c82f2573187d66ef4e1a9e0de534904f2837d208fe8aab42c7ef4c7f5971418caf4280e2a98b7632bb5fdabb96b313d36cecaf022b7d9d3aa845b475c0c41a64fb244fe14cd5c07502e7ead5f83b730fbd6c87f1a5779e668e3db8e371760fe6b5c87e54a367a574c3b99d8a81030ea6711ca6de76c7e24b3ac3d2b23dc8691613aaa878338a9ae154071dff797c5d385fb4a0ddcd8b4efefc795b4cd2d9d37632f2084b61a243245f24a34b08fbfaed18ca2d4b5abec1990f8144dceb923eec16dc46ca85ed4062ff46271d85770e672a2d192adae02023ebee9664904f7c90e617d390947a7bbc34eb00212c63ec2c42c13bcfaed0b059d94d96c469da7250e782908cce5a0bf0c063b530d2d6c1dbce29716cd850d6a1ddd391e1c2828b6dbecf82288556b23cf67ee41fdc4f38a8858d0b2f112551c27823546f862dc5c60171455aa4a03f5173a5b046a968682ba0553ef8b9777315408a42056fc857ee49a3defd683b14762dd2a1a349839e65ea5bec53c729ad093e334526a9b64df952abaf71c6238485a555458c89f5f4b7753a334b6925f22ba5608a5adec6121463f2d8c9e5b4923202d8a97b966c278e205639fa511c4f72c209a33d4cf6e78a5465d90b6c3195912c29349398517424626b645be0e81ed2e3c6dc1b99f1a78a789a240a3d8a15442f70d285d89edd8787785f5dda367f64c9957bae68b96f03048889ac0eb2a51666e198b77c2525ae6d27d412ce8021228ac598f3bef7dce9ebf31b032abc50131be8082ece720cafa4d4a0292c944e5b593322e533c9c05c931f3c52c2ddfbc4539adc74e01fd61c719ed5ebabb335bf6be8fae63224edd60d04ef5cd8749cbb1f4037cd124b338cdf009fddc0951cc3094e51ef2b79943ae3583a92ab9de03231cae763610edd8d8f432615a3481b1ea868122a9aa06860649483c0015b69bd2065eb694f887ead3eaa29bef13f86e9c1ca23d846d4cd118ed198b34c00f0340d92621f66936aa65f8358bdd6ef3751b3f1de43b96ef7f2ef91c93b6427b44609edecf4b7cb2bcc2efe5f125bc1ec447acfe9ff923dc14fa26b003019c70d7d18b48c3310ac8e22ce2c32c61b1f1ab659bca6d02f6640f4f3f9cbf4b591f34ddfd90c3feddf97373971f95d9e63faf92cffb498de854e0b029343a838b3e56246eaddfe6e9ce241855977f1cb0ad95371118bc231a1b11e9f48da2a007a1bbda9fd30c75bcecb08db3bfe4778cb85ab33f7a9dc2e01193002f4899b38c97a936a87aa466ebb21c4c9bf75ef08231493d76142c72b39f88fd8fbefd580154fb0c020c61e7b774c93f20948903462d8159d6b22de56b60f9dc325f6d0eaff800b16008cef50c8bdbb2a1a6c34a01a87ac5e4898d540c8c16873a2972f0eb0fcf7ff7c057a2eb7db318da7f42ae8aff8c4fffd6b573bd0f8583908039091ece267ba0b00f10f0189e5a259898b0c134cc235f722b074cba41ae2d8c4841289e0eba6c9620b44036ae133cd3780968f89302bab6004c6a130768d2c7486c188b89050732bba207b46a3a31e51bd9f66a33771c738dd136bfae35f5833e7e939ad34cf6f5be696ac544d50896eaf96f0322a1dac42b1297ac67ebeabebf4fdc7f0167d092842b203b4e0aa38558eba1cc7b498865d3e21793adfb49114e7fc6c655560e05ceb0b13136a6574e14e1edb23cfe7619794b366c23664ecbdd80f35697ddd24cf8d2e0c8a7a50d9007a19c609294ac70df450f68015db6cb6accfcdfc0dba386f6c71385400318c21396cf74e4cc95c219352a15fcbda656b646370c5fd3f124f942155e1ffed35b098669677d76eba7a93a015f5d9954fa0adc3d34f2f4b99fab8563e7af73056af1e27e8f41e8d0f23285da3027f496d0fb653f7206bd98b50fbf76b280fb9b7faf681022a8aa558857793c17096bd995216f10ee82ff6e8558d9d9aa8ffc060b4a07d7fd7837f5ad5af14e03feac52c5c693900baa040349fb662514d0f2d9da6985654ef542fb682ad4ff7588808745a79171d544a48ddfed98586d9b15ac3ee1233aabebe1e1d038f812a1317ffda3f88fdc0e968b5955498426c8115bb2b3fdf40b3fb108372c3cab8d839222a3ddc94ed7fd9161060295df476c4e74bca499c5fda6383e572832e425bc517e36e97140525a336327c8f16edfc23955c018ec4bf0da5026aa4088709f400c598893f5e89a189eb6c7b8268ec114c932fe2fbcb34b36cfe1d12942815c67f49033d12f95bd89038533beeae62cc2505f52556bae3b3cb89eaac18cdd0c03fea04215ae43458380306605b5235a2189d8e81e252ab85d8175faf27ea5d945c20217ed4b7a2cb63145e700aa338b3f8566cc1d542b846646ca502a656f283efbfae30511863fd3ea677677a2bb8e3c6eefdb0b145ba2c5f42556fe5dc17cb0b35dfc0ae4f829a982e3645206483ebff8869f996545fe39565e29a05d7d9e285467dbc621fd9bdd18027025db74b7d1b6d3cacabceeb51da8f476a80aa9be9b19c55c2dfa4f981c8c0f1373480d1e6a643aa380dc317e9decb632d7c541c3339ef39735a01af7a43500a7ccf250fedd000288fb651ff158ef4ead3fdd75479741fa687887edf05492fbf4c36ca1603008555ffc317fb6fe5df0f2ffe67a3158bcc81667e593f4aaabae605e18e3c2334cf5e5352e657da5275cde2dc85d1a734f8bff392bc7ca96791df99b6f48e3feb47b6a7f34d10a043cb789dfd5fc1df43796f5c9a7a03fafdf61221c97251ad805026f45e6eeb8a2c2c5f9afa416156506828806280fe86f0142f41876a9b126d11d3c891c494acc046f9188dd8e40edb71e8082f5e3122152faec87a5ddc3acd6946209c70edad638dd49d73be015093591e7f2786ed5a4b414ace50b8d2a541f17de069ab0fb26a41e408c44ebc53a0665a871274f866c22146ed8d82bf329c6daac78a52407a0999c21e38eb94180cff546c1df73ebcfc2944a6bcd212004f97fc2ae4db5268ff23a144885e823cfaf3bd556c40557fac31ee423a50967d13ba4960d0228db6b678fd9e391ac01fc94c6c1c9abc6d80e16b5a517fa4a862a86e021ed5bc6b525ca50fdea6e37458042002c743b0107ecf02b6ac837ea5cd6c5fea2bf352fe9cd4769d73ef8bf390c1b12046b8a8b454eafbb3a7b457cf0720438b7aa849bfcbc6cffb12230a0a2cce887f1b6c4c4d9b3864a8d839bf5e75bdade3a0230e53e7739c5dfc19851cff520bc1826b988102c5298e698aadacd37804f59b4e0f61407373437f60a79e2bc67c9f0184a2ee055553d24120e379eff269abf79f90f477c3a630be7b7bcd2c2774454df0c0b2ff460f3dc0406d0e4147187f23d66e66761f2cbe9c22a2404945aa172a8dcc634454831735719a2bbd322f583549fc8c0bdcd3ade5b49956532056d381aaea2617a3f48b4f76bd7e3129f75216118f79512a5b6b705381d300333e516595a528b37c81f5cdee7bfa5bf39a860fb0806e7d4ea0252cdd7ac448956d79c96d000cb65b3b4c05fe4de0c5d7829235afefcc5fb4f3d693134a53c9dee8f9f9f7c6584edfd3ad8447ef01e026cb92aa255993a590b73118c8df5625f9f192807b67189b64f800f1af4b425f9a38c47cecdd69fe205762b2e85bbd4dcbd39499c755737ddcf8f27c4bcce992711394ffce14a43fd7f191460d0bf6a22385cb1e4a92b62116db90babc79cb15ad8241f7be88e659d9e4ef59a7339ee338fbb4917d81eabdcf26573f279f7ca06046099c65dd78dd5ca1b520fdb349d73594fc3d01f5f7f0e07e3c516dbf977e60019d469d8008133dada766013509692aad2b1aac661cd70b857d5bec9fefa7225d382b475c9e97e565e60d8e1a85db2bdead22c8c03661f20ee5c09d850b642051aa79b7868eda4c4176be09d2fb2c5217e9a4457ab7b1dede5252308659199a443468cb538cca8adb27106a28f6bc9a4cc5be7a92769f8bcf13a23c9771729894c1e560c72c6701e9dc840d3c403d77956e8206421e561b426610ed38fc7eef24f8142239b425106597b8d3278dd373a20131811bf9a68e82eee1197ab8dfe4e60f7490d98fa01280c878cbd7b0f583c43bd415d67777c24b6fb6bdfdcc6600af5cf860a0f0783aa631323c8aa44a21ade3fc5cdb5bd77216d2b954227c45b38a2214ece129bb33512889d520d810e8ec9e8db679a47d17c3fc87c4e27963bf4cd2bdbc462cae07f6d724f1c8d1242eec9e5495be07cef1044620e677d2dba749dab7007f735d93a9bb355a731e9d88d49d173401aee0c43bbed7ffba5c2813e673139a7a4858a50aaff525ff61ee41394f1fe4dcf6f991e338b81860fa46480003a26d6cc6a313e897b5a7c677a1b18944f5e6f9726c0e1ff17f4137689cc778326475ff0be81af8c0279bfc202c9b8b7784f0cc4ae8506f0c25cd67c6b28939da85208393ec742b9ca9461680044279860caebe086dad866548b01944b6c476cbab8b484f584595fb2b9adaf9e9adb4e4a4c4fc7eceac0bbdc10ff62312d8377206290122fbb6af42d4e974a82aa9ea21811aac06b144ead456039ca2188f04077f666d5e4f18e946ad56952f6411db4a22e91956e38ea98be44e048a83e1280e0caeb044c16da93f93b5675a49a0c05f6d110764ca6d18afef4db07818f9b84b927859ca33937071dce151c043c111d9a07fdee6ea51c072390034c9bdeeaa47fae27ecc5ec3e2065dfaf8f53fc036a24d00f442832405f0caaa833ec116c4a2b6d7a3ea3cd044a00a4b70c1257424776f89c328d0b2475690c6c1359df432038d99b5fb23e7439f1897e98c02516a3f00ad32b63199c017339c6091c52d00b4edfb2f19f994b5fc780027126be061dd073353acf6b0484236004a1af20c2165bda11376b73613115fe904ce3a6f39717c7b22058affdc940e49e0798bbdc1ae822104b63ccc34b4a2b4a5c2c655b0bc03721169b1c6aa976d9e90b193c548fc38b393be5ee275be4336769e6aa42e6ca224288c741bc5eb5d518ebb36b4b28395f28ce0f35040ec90ce90c2913163e5debf69bb1f82a6dcbd2ceaafa9cf0fcd4400ec67f48202740681fb6022a5f1c08dfd44eef7f993426d100ec838e9b637116880c4b5ac7542e92586260570d2191bef0bd18db7760bdb176265b29de7380e8402c0c512c6e7c4b68bd1e6a3ed27775210793026797aa5bd5dbdfc414f21b8598bf569cd516dd43b4432819b329cee45c345e015025e51cd134aa540105d6735b72a5006663f0809f5861804c5ba02090531d8f5bfdc99935c7445f0cd2be09b1e7f2a828dc5fdc51a06a77ad192d4b3870b3696f94c2d6fa0389e096c25f595259e93ebfea6f89e673c16e73b8327815515d47d28740858f77eab1c540981562f433cf60e100b32900826601704f3ca2d389812b69fcd2319fd5502a4899823e44db0f74110067807a495b6f28c061d2ed613da70152e307b7783b2b819cdae5b3bb882c0c8a2f425b94b5ca445bdd70d6dfdc272f6eeaa1b8ec23f9ab2f3deb390445427419b8c9c4707a5b76a38bcd9a56ea3229c86871b35843ad5f065de791bbaae5115a0d3a22b3408e569814ea763f8d34a4a360b80fe0095acb358e3da0a4ec0cc7e2f48eb5b056343c414c2f2b3dd900a2e599066fae103127fd007fdc69488299f07c256101b024b76e8cabccc0c931609796dcf98c19e875d68f315065861b2cb077da0137cb75f2ad29135e2163a0a636306c26653c79c244ae1bc95bf304c84a0cbc888ea5105be571a3242701ef0b379190901917c9f59c74a089af13e83bc98109cc4d74a07e0ca57809487442422a1de0bbb2925a673d9a6f7020819dff40238ef845e6d0c0e031c67f4deb8ad669b2cfad589ce9aa723d8d8e337b144606e58af341cd06f22fb21a498f4813056bd39363a7f534c21ce790f3aa047422b8768109d48abae397c4e17a89c5b1ff3118727de6d56f7a09595fa61525204b657f5aa340d87782f350038a3ce0cb97721ae8636941cc4926ab15f0a31a0017e318299e331afbac14bac071d74d01b8212f3aff99ce37e6a2ce59cab996f0b9a2a50aecc078907775ebf4479845331c2d17926d55b7cad2481117d64c2a8164a28e4bc101b92d9d4398b7cf6455b9401f1a0bcaf501e0492309aa70a3e4590b5c8cd67ee51ace4039808a680359274ceb3131a627cc5ef46b822a5301d5604b874a11535bcecdbc40c2427eccc8bc40b3448ed14ec4e185add980868cef413b8117abf41587b69446b655562e405d52e572d362824d1c86254749ba9d17ea16f708b0a6465db96cefa57e0ccd9ebe726b1ef2bdc334c79abebf20d3a66e67a4f3f2a3d6fc60dc7e843372037820c3c5206fe4cca07af3daa37647acdfd50d17b5437f45b7a5f9dfdf4fd6af43d6d43ef3b105d29bf9225a9c90168004af10148dacbf31eba49f87815f1c877ef1f013568a0b7011b9d650f71cf0c75eefabf7bfb66361cf4f7a294194b59aa614940c1077837a01a6ba65781ada2a1b730f5c3882a71009b54485886f107601bb21ae334ccb93264895000830c81070ef102233acbc05d91847cb3005dc16518c47deb7d6d542717e2a92fdfe650bb1c22d2fad1c8c26c283c86f4a4914367fd17a00b289bbacd7ebe6e2cb638c0004df0fa705bac2c9af65c09393f17a00b03b24d5b25435717e2d56e7d814b00edfe6a5d22e854f8679122d8adab75d0f2b5df3c108b71b608e84846f4eec492016ccdfe40b74062fc15cf6904d056b2535468075bc38c6786656ba8910efd2fd4a4502129eeba3a6e256510c8256731c0ad18a0dc4b69813cdae4e7022be15a34870a1d5c8cd2b2473b9e22403caf07106c0c9cdf914f0dfe3c1c1fe41ca916062d5e131027c504dfceea166390b70f48e108256f7cca7d50b086b90618066825b6790e39af8b0be8047e2266fc85c301e23cd1b91a62219bede9e899a8cd7aaf33f9b3916fd9c35cc49a9d1c2abaa880638341ed0263ef5b3fe1ebd06b5b3d12e01ebba2cb47ae4733d4a3a4b97bae6e4ac4f3999ecb4c203879765046a52311020f95143848f8e0a1eebdbe10f7833b40936e3695a31def5bc74417400d45597e72e52006845f04e24ecb4d95a1373b69f04b30146ebcdaa27f1e102752b936e1cf0ae074e9fd1a0195fb7476e938f7e2c917ec140e0269dbc5fdcf29500bcbcb5618df0aef2835ac41fefca280d51131468c82586bee8379d03ca52389a6d0300452192bfab15b9fc9c50854708330b6e7531042faf22155b89226252bad5b3ce2183b9dafa3756a09e23ce6b05f30d1048f65a08e35419ef53aac74d6fa63abeba3481c2b6835dc15f5fa414e3ab881fbfae8dbb80a009f6be751a0a51c931190ccdf2440ee1fcc54b8ce4043d90d9e8e56e26621802348c6afb2f590db40a316bed4501ac056546aab32d0ccd6d4485a711f1b83c74c9ac03140f3fc71362b6712e10e0de928f1b34c7826cbce047d6030b8c805b431104c37814023bd6b2a007e8206d81ac6d2f5623678aff9e467eaf1f0ef555f6507b43d59e48ff24b14b4e022e5cf795c4c84887cfd0c4f129a3dfd6bdb3f98da93eba9f404e45f31b66033b7b79f5fd35d6ee8ec95c9078a31f9d7c50bb5ecb1a3da93c5a160645c7c8c2e5430e858b218acd2e9336edd981a7ff813a598e8fbb23dc298ab40221484b1c074def10beb70f39d51d71e83bd4746e731d9bc1043933597cbc86af2b26644ba2a4f8ee3bc444140a2d3b208963c63e020ef69eeaeb912a0baa48724594c6805fdb98e6e9de265cae550620778387a48899d337957b722158a2d2fa1eb9739e466ef78f7057f4fef156202bf0ed2fb690cf64def4849080c5679838f80be3e3e50bda49fb4849df623533687fcbf42b39bc8dd0815fc527261b3e1d2b4e80a6b4f2f48e5fa30fd49a305ed179f329ceb159eb640110c1da06603e54fdebe48c931c06d7cd1f48f1f183628bed66a1832a7a2e6c23eb4c7383b7bd23f91185df28031f756fa8f284500670390cc24e1122704c0f9b4c3419b7aabe237c196a8719bff50d7ac053644dfd96240bd14f5ebd71719614bb5339e5475d2b8a30d8b181b51d92f6785fcd98942ea1b5cbaab45d53af55b036186abcd5363811e23b1901e2d5668318601d120c6555ec40e73e8f45038897a879da857b5d0b8b2104a25da8084871c6ab968607c756896f1f122b332a7e44be3ffa3f012b319bb78254235d200d978c0ba246e00f3c44a3d295399bd9ccdcc385bb51d259af310b4734473db012eed66282ee277588211a32d3692ca564a6b595367cd23a92573441251262a210c2fc75cac78432a16c727464a2edce7588d470849203b13aeaa25355899e579eee90b017d9c6c0c56bb4914239279cfaa5896c80f9d130ff1152ad43d602136c835560854be98c8c0540d5a72b829d052ba92bca4dcf4d9f48832bcb33f62a396f113bf0d0db340eef0a2784672ffa3d71fda27cb842c3318ebd456d41cd8d24b4510a51fcea83a65ecca131335a80573bdf558ced5c0369045b2984a4110a031611156686dae224d4339196a90369b17c69570d1afc07646591850446749a6d108d2e9ae96c021e1be5bd591f2f5d62d5e85baaaf0589476bc5473a2c905593ef4820758070907b1c1a1122be7f6cad640974050626e3d4939e4e81acab794045171460dee07b101e10cd54fa35414e32f2b6fce386841dc6d8f06b849dbfe7b2840588f571602bc07d6ab0c6af92324e2f8e36fc9e337bfefb3d4ccb8f488992fbf012e096aa03db03d8c4ff36f129be939442bd1276e987d0fd6ab4f1700864b3e42255bc93e24e25731657a0916a9038255ef2b945d296df8766d035af39c9a3be40b8ce289d07411c1492022c8ee0324a12ad796c9c3f67c0ca13795329a016dfa60076a05b88161facf3bc879517f2ec4ab03ad99dc209afc248db66581e7f2dedfd0f5b6de41ad2d9f853f84680d3a5bca45304002479d783f42bc78e5cf8d081705c60bfafef714a0eb4d096d545c76236e84c68097ff62a0f2710a9c160b371bd31955c119d57b23e4e78103048a4807796de64f3eb174c29d576779ea97d1b9bbeca53f8a7f118b7a2a605f7142904197cda018b218b5b011a7991e00226fa2ac49ecd15b3017d49c2798f184eaa7f5bce32aa5561f800af4cda5163c7548296ecebf8b36f8da7659b6d85f4e23e86448be4dc6035d54b54ab829c6423b086cbdf5ad94dd43b212ccf4c66facc3fe4db9b482979da4fc35ec1ebc9e167ebdd2bd8b4c0c944c4f47a02b2c436e1d5637940081f89fd90975209657bd8e32cc39b444537456a570574b3bb9ca97458a5f8da924da2b5c377b8c0bb0e08b0b6218c27e58f0a20d5190e28a70c886d424511e4e15c019739446ad3ec8ba8fc958f5f004be2c3732e6c62258aa8b6082f43019d48cdcb39cad76c4a5e02af56ddc47ab2a4fbf88031ff0deb1a20f504e07594a0c91e194d6afb3d17882ede30e89d51acd924bcf613c4483f21d7f2736802bd723a29cbeba1e0c1cec920403760f6f5227b808e89b4bcefdd03926ef96e3450eb3df8ae94833078f2c2fcc8ff1f09c59945cb2bc57433d9148b71bd4e6bf47f07ec5f709b32b12efe1c25b4b8d58c9c20027de9fff425ab5053b389231e71832312b3e0b444b24faa459c4bce057cfc805ce8498efbd3a86aaba9b6fcb7494d43196cd3a67e6fd72c835b2cae337e6070e7aaf2c97d662b9983f7d99e956e4812661226c476eda0c82b76b69e0c1f8427aeeb77b0ee8891ad6c5945583e014304fd8a12067616cd55e88c48b02810ec8e7f9b91ee937971280dbac797c1540282773c973bb067227543fc0cc43f169b10091c372e1a408bf99f291fee8898f840778b36d24089f13d2e709b72b331d56444929bf16b3472d82e4c43b0b22a83876a38b11887627d77332ab6beb64fbcbdf66734263453b6983e7d07bcd5d58c9bb82aace2f6aeb345ff64d25912375304d9c70cf119b093d0acfa5cee20cfa16ba3aad6e69ffd99cf7b2cc27b0a292f9981fa4a2ab6a17de2021acf20ddccb73e655c59a8bd680556fbb4981fbfcb50b117d211690e3e4e8e1d715478599a9ff4145d474651474e524dbf3e7039d46d1e75c64b0cff146f65849dbd23db8e6104f414bd0c8395fd88dac2f0f00f115dd7622d6cfae44e2e94a99974c32380f57d97865362e401bd9d7786895ebf70fbaec09131644e92c5088f51ecaff35503761ecdee105266b64c28ac3cad35dabcd2f5b21eeeb41661dc5616383ac42ba3a38515814c72ccd288ca109bea6b57143b6d5d8212b984c160de6136328065c7d1b78d977581dcf437c5d11b173032207ff1864315c98400b761e790cae372a544f441a5027065d7fcd05c982b0b4377b5e40f1abea69b423bf6f2dfd773e5893313c41c24ce88cb3f36dd6edb60fed086f6e7f6c42eb59100ba95fcae70bd30c536ad5fc462ea65e382765660b347dc61a23b7d97adaa24f487c30dcbb32670373a6f5fa72a23195606405c32e27ad1c51b5702f7b61f641fb3656b8e772349d93df74e9aa3f175ea3b0395c9341a363152c173bcfecf462b7af63a00acb4e3fc6637fc33e617e668f00519ba3203594e616227f2f79090fbc6702ec6f27b76afb474b54a4b1ed9cf98c65360ef2bf758abb10cb4eb902528c30a4fb3334a9bba165bd74122fed4d4929cd24f2dd5939b12c74c9a0fd1c7a9781a345fe25a6dffde5685fc987f1042b145edd946c42b411a67d617e4a84991f709003ca0fc1e04815f1be81ce8199a0f19476a86c84f22aaf875e9025299587cedc17f68e6c8cfb2b4acdbf8aae7eafa8b5dfabd46e8842bc393791d978757a7e21a8b2559dbfeb4810821384e8c94342e8566f89a18390804887d4cdfb86104aea92ca7a696506b682d5012962c271c645e7a07fdada3b0745da42c21be97d748fc810fab636d98fe653794ae4312799ba9b0f4b1a8b1ed1c57e3c3f4c7d3e94bbdcc2b45cf588f4f37494709916f0bfcef593dc9b26c448394d6f9d555be23db2998862642e182561f56466686eec99c2872733fcc9b83d99a30fce15c43e99e14fc67dc4461ff04ce1f370c362d9e7e136cac43f02f7110b7f32ee237694897f04ee2316fe64dc476ce483961d80bf7f54777df7064b27fb09c70766cd2dc9fa7d6b2727d5b90f22f4ad6631627763f0729d5930c9ee439b9311154f03fda0041a90891bd0c8ec999e93043fb0a875ba5e6687f93bf45e0d69bfb314c4ee957e742fce3a45792fbd9d2bfcad31f6481955b9300a260a730d2e248ea6fc1f13f38767d9626446bf7c8edf3871786a3f32ab14cbe7f88d138767d9b1c514cde1fe5c65359ff62e83183abca13be94aba5b4f27bae9ae3947ef799dde5fe1b18b63d982d68be91dd3cbee1c50057977453496137b77d2b226746ec56a4917b4a633b45513fcbaa76d1520d1ba0e27a690e27782960aa85fc72bd98c7e844e4707d182c875b4964ab69107732941c18c1dfa88020c0fb54229aaffc09fdc02b91fb7798ebf59999b4196aa02bcb742662f2245d84012ef7f46ba532075402f919127e988721834b99526c25a656b0efa38a3563416855abc493c85deb74542cbac892a3ac2458df96daa0b7a49a8cdd16b58bc5791aeb42328b06e89013648da1d352061aea0a025a1b3b0727a492c219d27eac781e656606facda8b71591dc5bced878ec102ea4b8552bff43f6dd3eb06b84225e60852541f99738e50e2039a98fbd3bdee873e68bf920e29c9e0092684fb72c81714f479c56a444283ac63353ab32f99ab68fc27fcaf8ad43ef46adac4ec5c7c98f0381cbabad4ae82f58e38cbf3dc3a666fa16b1a9b4e7a3d96dd454474c005e8174483f804e39452fabfc5e4ddaf5587d8b98dacd4d6afbb7c9e6aca6bbc0f7e155a6a79fecd2b1a8cb549bd79e5fe4a717a148f15a679c895ab20580240d2dbd8dfae5ca7c2d669d1f97fe435b816450f57be587af40f707837d46ee21f53d78dcd8d4ae12d34061b0068213b9dbba8f85e35a1c197cc4af2afebd6d64eca974cdf02d75c4d166d45f645803597e480d669f88264b23059c8817cc9b5460f77c01b86c177abd58c4042c59db5016433264e111bda366ae19b2c1aeca359e896624b41a7ef19dddbdbea1c9e69b85a0db2630d00a9e3d4d3bcd225eff724ca94d7c24a8b21ae2d7d081c84a7b4d6057b7d7539d6b54ef7b73e54bc3baf1474209987a59ae4b1fe71aea8aec7c04047f4ef59396c19787af9575af41e62bc4df97c6ca010c84f1c65f3257b53d26c19b3bb72168fe2a746928417f091d7b128a6f70403a51320bf35082a425573a280d4da047e64f95b327cb036541fa134d6d5c79d4d57a56cf80f1785ea7d381b49dc62060246523df990b9c994b11e2b1e316b4006b125c0498fd268dcced5d57d2afb2f1cc891731dae907aa2410f58bde0ffa1e48e3797b3092ca35e788d4e84b72864eeff7535cee8a155d40a76f996198d1ff39b04b49fb7a5555a16c9d13d47bd8e141d8a405533bf00a52ebeea4b65381341f0ff963f1d773c35e1c5f8e59eee99c4ea6624c334ee1f6aa9691d47d140e439022b282a86319693acb8ff9ae0dba759da7d112d104211665986d2ca17e968e83cd4f8f4c89da6e52b53b646d7d87c7e3e6c494486ce044459045e0fc55a105010705a9303003088e5fb06d14304648c31495b2110e8924ad162519917daaf2dd96f48969876449d999929c75bff7bf5e52d283ed72d5aacae88888888a4e87aeac337fc5af0048a88989a594bc86e193b129c12df0d7244d143097b7be861041fc0e1461b6bcc60e543650b2d98241902c9d5524d60829121342ec8c4281180283b7be0600739d8210be845174444408e37d890810ad23043034648403c60d565c16d5270021e41e0c10e602082270c208025028025ca4e114d76d06106194e608227cc28c3000528e5808396daa10539e260e2a7cb1e7a50610a4b2831830ca33764100316a8208d117c200b2c125012401257a2ece8b0818318dc00055e3801c20fd8c0810c60a0821464e0020ba0420a27e0f1060f5490821380608a2ebeeb301905c1c38e3ae45803062628011a646c7185ef25012ca1c4151d26473222a3206ce0608d30bed8620adf0560844e132647b21682889e1d75b081031ac4c0042540e303647081c514598cd0417224bb3412113212bd3deca8230e1aac11031898a0041f20838b2db0b8628a2194b22c3184115216b0f0e408175a10020e5a58b1002c576005ae584010170ff8d823a4c795c70b16ae2bc87040b4818b8c4b0396bc62085aa41f45424284301976b870b06e88b1215483458368064b061f2f081112a211b910a4059a203600a9e1070e33231f31323031170ccccb4bc87acf0612c0973a6d2a23be6bfc945a3da1c613d440821a2fe8c16a30ec8471a7a04debf70aa0a9b1a99152a3e73d0cc90d5683e406d3924614d4d8410d18de7b5dd0ce42229194d0710263431a17486dbeebb4cac8d6a5a1d37842648934744843e6619dee34c6613a238003e3e2bb7f7404633c6e23191901d0083ab6697fd31db7bd67e9f19e95c77b5616a860d92102fcdecb11c3c1b66dc583c819e79b6dae99e699658e19e68c31bed8e28a299e58e28821ce17df7bedad97de79e58d17de6cb1bdd6da6aa99d56da68a1cd15d75b6dad95d659658d15d64c31bdd4d24a299d54d24821cd13cf3bedac93ce39e58c13ce2cb1bcd2ca2aa99c52ca28a1cc11c71b6dac91c619658c11c60c31bcd0c20a299c50c20821e402b98df4b34a19e97e7e1625666c6a666a0a801500230086d9ccd8cc10c0bac27b9615a8804614b0ac8d9e0da0210134ac40837bef61594f0f96cdd8f4f46059f73d0ac3667a8860ddf7a89a1e244890f08006942798cd90215adeb3aa40053466c842b04608c8781877f2286e05254908a6788f440a819610f451083a11ece6068b35980e365f14f12c18aec4d0c40202044bdc4882453a4ddb54de1fb15d795c705b7744c3f6cf6ae398c6b892d6a54ea50e34fac0933b7e70c60e1eb7c5b184f72c25bc6725e13d0b09ef594778cfbae38dce308dce58c232c27b5611e23883863380c421c38619aaf79ec482c0545aa5b965c77b561d4418021d735872c4312a438bf760c7adb4890b130fbc74808a0e901e7f6f0d32b4973a59d1a4685d476998dfb4d3160ef35bbaeeb46dd974ea8499b8e6409ba7824921a3c87bd9064658a729e136524fadb25269278a0e95294cac9498149133250a0f955229e3e24b7a5be9317e60757101137ce0c8cf09e3f496aefd1c09ea543f5e9fb64ea5755877e2e2b1f05d102ab5691ddfb59d244bfc69e3c17a4a67d9fe596d4aa0d080d6e9cd77272030f034de88bbe08df80ede88cff1463c8f37ea33bc51cfe18d7a7cefc9f0020d0d131f1e0d93ecd13041e2d130e98f86099747c3648a47c3a4018f8689041e0d130c3c1a262278ef0119f53c9a91f66846503c9a51158f66c4001a2133231b298fc6863f1a1ba047637380476383c5a3b111e3d1d878e0d1d8a4f1686c62f0686cde8001080d4d10213c9a20763c9a205678342dbc3c9a16468fa6051d1e4d0ba4f75e901684b8e0438047e3838047e3d3c5a3f1d9c0a3f151e3d1f8b8e0d1f8d4e0d1f8e8e0d1f814e1d1f860e1d198823c1a930e8fc664e4d19870de7b2ecc2024861ea047d343c5a3e9d1e2d1f468e0d1f49cf1687a5af0687a78f0687a90f0de73818699f75a78011bcd30f39e0f1bb6e86fb405f7465b58f1465b5ce08db608c11b6d818237dac28d37da428e37dae2096fc4c5cb1b7141c31b7141df880b9e37e2c2bf1117406fc405166fc40506de880b34de880b19bc11173d78232eea78232e98f0465c48e18db8d0e38d18f0e38d18f003cc0c58e41b6139f2465872de08cbce1b61f1efbd1f40de0f191aec008f06dbe2d160603c1a6c8c47837de0d160277834d80b1e0d6683f71e90179e0d415dde28c88a370afae28d82ca78a3a01abc51901d2d04792f427ec4fc68a2118f26627934913f9af8f36862138f2656f168a2031e4d8cc0a389207834f1058f26dae0d1c4373afd319fd28a508117a060059709d0b862c6bb3440e2d299563e18a6d234d4151f33240ec33addc4c70ce9e747e31af35bea07698b88f57478cf92f2acfcac17903012038627703095e6a52d3e65c1f7ac1c0964e1e174af529db68ecb7e38bde5e63dcb07ef5970583dc8a458847b20144aff70160fa630d9411bef8974d0c6b631e9c152397837f0f17e2c37da78ef3d800d6e234920237ce3b89486100611ef89c2108dc020e2bd178130addb561d437129bd759bf637afc2c000c2c41770bc6ed92f4c0f08a30854e17a611401d8b34567814014de3ba1a8bc32a680030230bcb7a4f79c1fdfe974af859f8ea0923a694604a150395bfc0ef7d33b4fc5a35653b6f89d2e84d045962e601ea987e3a2a170d1507e561cc9a3b46df32a128742e590304e777af3c1525a8a07db569d66da92839d388ff29d0654c4a7340ca54f3aa83b6dda00f44f91cdab561ce64d3ca8243a6da707a1503953b49ddee9ad082ee749a7ed703fbed3f149694f348d87eba955939eca59624450d735ad882b264e3bb1d2693b3a49ca039d8ae8b49d9dee394e4be9b41d6b678400d316ef3d26180f29ede4936881079669d1012dc8d0c28947c270301c1eae6841b18c07affad122940514b2b8e385c1e5bd770dc962e6f994b6d369da941516556071002c50232cfadb7cc90896756f842bd96091048b225886751aeb3e752afd702e9ccb15565c1134ba82e7bd47a484d258963a51b1e28e97d2be5f62e2b4930ec40af91e29486f2bbdadf468015a16a0f352abadc36cb4cd37c19d804e5d8f040479af891387d22b26bcafe3bd97e58d1450e43dadf340a7d42975d206a0859fb4f4ae4b25bdadb4de560888c1a88a9e2d1da8c21ba3030441a57f86704103d438c093d785e58267b5a0052c78cf5a810adeb352f09e8582f72c354ef09e65028b046abc67a5a13bbde447e1547ae3f951381f2d0589ee39fdc42775e241651ac5888bc712811456785c6a5b75259fd300fc861d81180e36e588eebba6440a2aa4c842458a1829b852a1923aad3446e25ec561a8ae8726b8725c0fb852a192f2c14845607b0989fb9a89d34e3a6eeb38df515a0df78341217119070486914c3d5c47a406f31c4a37c1483d3f3ad563ea308d8bef52fca44afd1e2236353d26ce7fcdffaffd70a7943671ff83e9adf3401e7542f1229dc9e784f2499df8499573a379fc5683611a0ad683c373d363ea4e5b7ebca9fb5a916ea5611a172d09462a923a61563429bfa3565d4fad30d2e66d9c60a49e1e2a1889083744a57f6a308cc4f9af612a0dc5a65ba950ba26c5839196e8acbeffd13bdcaba8a474341eae7bbfd3718d47c99294b6a36d3e00296da7fbf7b2814660e2b4695b693b3ee0e28211a0c185025c1ac0e50a2e5370d1465c7eb8a09e4ac388fc50630423f20366f30396a934cce6072c558361990d87655162c4c50a971b22353a0b6f8b099e37f52da955dfa2a17e152cdbb46df34f32265374a79768dfff68547c4adbe1b172844a43f17ee349320242a150a75f52715cb7d23cd7a53c902f597bbc6b889513cf2a41ecc58404074b7954a9fb1e55ea286d02523c519397f76046d0711d438204e31b3745978815418284e47dbabfb8116782f792e0d1519223254709768371e9a79c3d5ede680f1fde680f1fc4dbe1bd21efbd9cc7cd1be541e58df2c0c01be531c71be5b1c71be941e48df488f2467aa4de480f2ade488f0ebc911e76bc6785f12c2a44607cf1b252479d4c3c7bcf8a80ccb31a2085cb8fb635e93e769c7e129a001224d8b6e23d446ab46825ee4422c2614e102961365c0d104e6036a5a05d2a91b8d429c4a46f9a73a725394d469a1d23ad3f52d7de94653d4af4f4605fe3580e463a2dd1b690b668d31614ead455d9b690308e71409ac37a4a6b0db535bf85d35bf4a69938954e711a87d21d67a3376f3ae9cdff7893ca934e3fd8294b4f8f12dc89eb9b96d2c148284ea561a91cecb4759dcfd2d3a304e6ff698b4f7d0deb29a534bfb12c53715886695ce39ce728d4290b9325519464590985f25b94c8a204e64d9d4d11cd87f340279f1c8cd4fd0995d24e3a558292742fc5e79444d378723a6d874aa7ede4683b3d55850fd1532a75de67c78904ca32eec46d5e8a0a360cde7b3c046d27bfa930bf7fb42ea54d524a9cce163de53dcb8bf7ac2eacb01c20c67b5603de7b37bca037d272701bc9f394e7385f2271584ab3d1db2a07dbb42658ca6bd9346ec5a5bce73413c7b695960446e236ad52696cd5b54d85051184dee29360246e88cefbf4d3128c14821e21bc2406290855daa524de1b32a44b796cc810ac7b2dfc74c4a6355155e136529609408b478a4025ad2b41a02922b0b210007def69ccaa42008fd318c83283cd03511192c50ad2a6c9f2e49ac90264c9752d01c633b244cf7ba4ce6d24af0497a70494f70280c7eb3d5dc71fd1e3b5784d733da594d6b3698fe218d7799f94e61a87a9bc16ee81303f84f3a60eb3e1ae602793df984fea74e2a71f2da5718fe2c1301217e48fe841fe086d67e78a15ded39db6bd2b686cd15247580c78cfe2c2d2e23d2b8b37baa21a5de91616ef595758565cc1410aca03f9272a8dc70a1caf9fb42a55c54a17ef6159136e64656764058eaa346154e58e52a9afb852f74d9cb84ef97731a08a8f01a44edc9d339eb8206e23713c537896f0641eec61192f9dbadf94782d9ac7caf2dedbde884a188fdb4850cab9454fe93a5c7c4f8da6a8a1002904300572dae69be8daa330adc3fec9c45957a45848bcf1deeb9e09ec089c0290413f9b96d279ee0e23e891071233ef3da8d21df773eab820af25c86b29711ba9e3951449b348911f8e05b3b9d9b426a8ad67fa49b39265a55229e57b3f994a27952ea9380e277aaed34b5986c34fa8bd92a252e5683c59e63bbd711f304e637a5be5dce86da5716eb8b772dab413c779ff535aa9436993073af974db77eeadfc702e3838446a706eb86849b2ac7b2edaceb29e3a1d8173c3bd954deb70a004baf9e158b22c02f59f55aa54eada9b4a4cfcf425442c79a4ae048e1c255ef491929ead8b0469949297e48c51922eef3d6d2709f6b8ae3bed9349db543933786fb5adb81c2d1e298788f79ed661a31c1e8868e3a5561ba675a72ddc09dbaa138a882c8250276dc7c46993eef49221b030440846433c311a22cb1041709640f23f36244c75ea704880c3493d9a694bcf49ab6cbcff984d4f0e17fdd353da1e2101c20889132324f83d5290deb2f9748f753a87e4b795cfe963dcc9e7644aadb613d7d560be9f90d460375edc387924d426b26bba07d22622bae6067b8fb4b123691ce93992433683f7485c4f0fa6753d5cea04a507eb21a534cc03698ff27e49a9a7b4dd4f3899eabd9749c9e0cb68f0198fdcc67b5c16a3f3414b74b0cce56129cd55c95878f290f75e0a07e19aebc6c5e22671f123f560454858104aff643d3d5811cea6c06af1deeb569a118e34c5f6707aa34a826ae222f6b51c8c94d27c3a4effcd6fd150580ec9c4b58aab33548dd7c3f9a44e2aade3308e36194d248ca618ef917a8250dd899f502a2e1eeb5af3d91a2305a5f43c329a3c8ce409deebd9bca9db565fa56d5d363192354fc990f88258c6283a79af47ebb08ed2ba0e89006330820b78eff53782437a48bad34b7ab04dfb53fccf8fa67f3acd57dd6fde47abb855a74b5dca7338264e9b8ca861a4676484886f4486c4617a8a132c45c283443ae3bdd791b8bc4752ad4624295ab4110993ba4e322a824711385ed7498a2ce03d2959c63d5096f58e2ba9b8aee3933a75cfad4a5de7643303ae633ea9938de93d1277b2a9215541080b7027215a10226614440b82e86214841641e88c827081881c23222678ef91a260590fb72ad283653da420fdd3d383719c5639e9da0369aa1217fdb3532a65c14420098a122c35783c52cd0d6ac0789c0fd252a39a5d43f388d46043ce783a673484cb101e4640ccf11e89488f073a6929acfba09a0ed31e15b489d400a10569d3b6cd1f0142ca0f96f3031eef3d926a8571dd69d3f429e707387eb81394d10f6afca022d904a136ed79463f48793fd08c7c98c123713ddcd7b40f08e019f9d0e3037e231f6a781d03000e3d2c61d44309de7bf98d7a8062d4c3113de4c0031078f8000f2b1e9c8c78f081d900fb0253614a603f7640c268870ebc243fca4d4a3b4d8912b4fd14264e787498f818e4b594b28c3b490c098e0cda2bd44f9d306ef7100946b6ac9feff8a5a7716f0d4d59d66d599665484878f7fb71c5926a6f75f426ad94799e8a926a926559c6a9b45cc4d22ef99491f62e3387d09465280de44b1d973a599b3ae7f51f4e992df65c4753966d3e25c4c73b6fada5aeb05738a529cbb8ee3d57eabc4f96e1609ca63225cb4a3f5a4fe9cda46fb8204adc6a2b956c2082d5f430a4fb92ad3208207e74f861d33a8d830f3d00e077ab1c7a88256f2af1b0e96e0856c30e36e810440e36e0a0c30d35d880430d3534f430c30d32e01003b539c0c045dbd2e9f082ad520896b154d2266cc445ffec40134b1aaae4933af9f868a81a5c98b0056e4810d9691a90aefd56f3c366a6f33e437c442e08190963628908cc9017090051e98790fcd178c96fa552d462ab5471cfddab5463c552a954eab878003c1da690018b2158fe47a74432609184f71ee7815cc8b8934a9780585400f9f1d6508015392f0a28ba3c41802682b86c015a75dcc6844a4bfda0b40ce064f2f9bef3ad7b4a02c8b2841201b892b8b05c41e28de2c0e38de4e8b14208f8f1d6a8628a9c2744c90b33a0c27b2f482524c97bef6dab4e732594e63612370599f72e29e474621041847745e18282134a4f70c2db3423428640809021ba9775df693e386a08c1a9c982908d9193f09e9294ced6a5aaa050ab26a8ad3b6da7a334274f7c13272a1c133c54da96aaf273d228255ee3e1bc6fd2693b4c348d47a5379eaeed08b17734e1bd4b074c70a37b146ab5f3de7584c72de1bd4b074a7891ca0fc7e2af33debb92808423f8f7ae3b3aea740565841f0585ca79ef2a0277d9915afdf7ae3afae9bd8b081ea5edf4f7ae21743ce7fb8e83c7c5773ae81c0fcb61630e9e9c417a8b43085b432541a1563b188b1547d4e275cfc429a5753aa58f780edb29e27ffc164c7f94e77ab88d04817ee08347a486935698088166402bd1ca0fe7f2de05c71bef5d3de0c17b7276cf4f9a156e6bd271da3fe972b489c76f1a94ae73d2c16382d2fc943271cfe3814e3efe094a9ff8a9af8c8041a99cf7ae1bec40ff686e75c400debb7470e540ceee06b56d5c6c4019e48fb8ce40a170f0de7583207f04aa888e3a99945c36e836ad7aefaa413f6d2b9494f72e1aacf1dee3706eb8b722235096c1089465100887888d9c59c675d4e94a479daef8a4564d52abdfb3d888376ddb98749b9612d4b524dda6555d27a86b49b08c2bbc0af25aa85df553d7d9f9d152beff682939573838720a3185117ef34e2216896562a1582a168be56279ef0201c6926511e8fac07bd719667049a8ec44d1e151b253c58812961c28254b4810382f0271446adebbca78efc95c1e78ef0191e4190001419e20b2e489a0105273c77ba920eeea0007966031e1593fb04e80022135a21d86a86248e74366891020aa705981e601044f0ade0f4e08f901c8ce04240006185654514502a6a0828a0da70b727a5092a45227ec88c47ec0521e0531243c60298f7aef0901800c5014904cc10c0f2481801641bcf7b290f2ac0c218487391ecf164d898ac32beead7027550e7752699f144af573c286c0f38ac011821171821dd8e83c95aea584ec6084101dd0d041c97b4272c0e23d5589c3210f213864ef85e1854feab48003707eb38284d8607acf771eeb6e5839b0c07b2fe55551b41dcb6fdae74e9b8d0f1f3e7ccca47492a06e3b61394268a8820484d08085ccf0ae0af850b790a1a68b134f87189c784f771c057e20000c6d9484c0e0440c19bc1a84bc80434a889036de4988901e2142b0f7b8f494080a5b7cea251720b5848d0d121c2418112efd54d37dff24cbb628ddf74f300cc3524b1000e3d24f25efd37de90d0d64e0a50b1f243798104d442a10e28290166c20a40517debb2020864f693bfe47a32286902053bc774de0bd4b02ef5d613c21419600e3d92ab52d3c5e8b462541e9151328eda96c52f4e6f5c6a4d65a6bad94524a29a594ce39e79c73ce29a594524a29658c31c618638c5042092594504209259450429973ce39e79c33c618638c31c6f7de7befbdf75a6badb5d65a5b6badb5d65a2ba594524a29a573ce39e79c734a29a594524a19638c31c608218410420861cc39e79c73ce19638c31c618e37befbdf7de7badb5d65a6badadb5d65a6bad95524a29a594d239e79c73ce39a594524a29a58c31c618638c30667c6da55346283f3aef25f1de1bc01312e2f2dedbbc117eda7ccafb54d1361f80a024da8e3f2de9a89576658b86f24994f826b4adc97b1704366fea3a2d95ea3ac97b971753b41dae8bf7def580f72e074c09d24fb49df7ae065c0c78efe2620bcd75ce84c98f126ed3765239db8a732d9573023a2dd1a9953fed4e7329df84e738cd75dcc96f3e48a33094ee522b229cf77feb948edf56ddc64cdd76da1829a531d48ad3d8d62812e78ff89c38eccae2bd0b8bf7ae2bacc8c224003a544a4b982c89a2648749694a9429539894983ca9b2240a9412961c28599693f25a341e8f5a750d0ac6f9f19d8e8f86f2a9934f8a89122c4c61d3760e46f25840e3bde7e35d0570e23d2235d67b6fb3c6b8c20bb88d14b44b1ca7555d4aa74e3fa78d73a78efdac521ee37e38bd05d39c70ef5d56debbaaf02ce97ed3b68d094a77bac97b179529ddfb4deb54411b97b3d36aa9156678ef69ae734fedaa0a516828aed350544a2a95ceb2928acbb156b97154c80096b18a4c1853b0c17b54c83ede53bdd114869c3696b1c46d5e85f226395758c6951444906525151745c97bd711a86d63c235142a270a4600c016852844210a50d001148078ef5179efd229e2058d9e30851376f05a183d8106ad3212d475dc6a0af6e3e339ccd469158642e564d97b9793ab08110e3cbc78f162851396e0f182d7842d2f8b9c4c20c1c34258890944308188f7b8c0032c6105a5d112c0580256c20c94d001291228cb704c9c76e2c3a5b6681da569bcb4994a3fab949cab2fe45ce1e015125ee0a86c0d95a433f9e1587ca7794a53d275b2ec8623c8f0b88d7452e9521749bc926755607487ea873b649e119c3032421bef3d0cc90d86653d3d58c76915e6794a03719c9bf7ae21de8583e48763e9a828a91cce53f13ebaa35204931d4ab0a38c9cee7f7ca7d39daed4f1c61bd581005d0726c21d8f8469227044d8deeb72ae88408720c77b244e63363a182988f349a495544eb4b2c5ef8c8680e9b8c1888e27481de77d7c561ca74d3bb0044bd20a2cc152b4c2f92928540ee74e50bc6f4285a79f94442bd04a96c9b93271da64e2b409080707db1b39ab745c4a5382d9e0d50db52bdf358e33c78ff71e0a95e3511a0c9603c87bcf7fac874bad4a405a7a4e5b9120afe5bd1b4994048bf868a87acd378aa30e19070fde7bda4fe904a154aa1ccf6993141e9fd469eba86419f75de372ae704a9b5771d13f28dd69dd0d17fde339bdb9e81f94e609c213384ea3b2ccea001066f0b8d3919ed2a6957a92701b89eb4e3f4580a0e53d13a74da61ff4bcd76d9a89c334adcb3cb77920bf5d1f6481db48fd880fac78afe37caab4f9ee54fad1b66f847ba0910f5446501a8e2d8f4422f1536a48e7519df69b0fc6a13c5086f2401e55ca9ef75b9394d7a2753fa50325484be17c12da4ed77ee382b414ef7f890bd22a8ed3284eedea8d1c2e207eb072f9008027814a3da0400fb4788f0856fa7eabe9c10e6f07637813a79de0e0dca07497d2704a59e64f5b5752713edc8fee74df917395832a1e0ab56aa2ede84e2fe15027ddf9255aa2c8b9d2a8124ad37689f33844301b36ea78416c2cc186e8bdc703376584032f4638e86e90850b86f7ae172e2137e0327a3668c3063d1e87884f3f6d3b07b3e93a37dc5b2122e70ab3917355c399f82931f1d34735c05b6840c60d6fcbd5c2688d138cd6c0f1399da675eda7a0744751f14d9ca8a474543f9b13254c543f9b93f7ae201790ebc77b254f6509187821083c18a20247b0638d317c70a3440c304fc8886066240236b6c04cd0c49582c20870a082086afce002154f20c0831641a403c240038d224fa0e10134e08007642c31400e781480240e98910c4ca3185871c5bc77c15ca22b34828113231838c90215485ab8d6366d0788173841ea3c87d24c5c60c6d39d5ea23bbda4a7fce6bd8f96326ac10bdef5523e2794f64d04e9270f8f2e3d2fe627e68990582fe6bd8cac98e782f52283d582252345f7851a20d221e692917911852cebcd7091def52c244443582fe6c8cbbb9e6559a1cb8965c558976585609ab8accb8ab9649862593056ccbbac20a4d0050353338359a2eb126961892ceb9ab1a470593ede8b25ba42deb2067059d62553e5bae1b22e18d16525e1b22c98cb42c29ac1b242978c0b5e42312d583258560c32214b0c0be6b2ac2b54b22ed18c0f7a01b17064ac171f4248ac98eb12c5d0cc7559445cb0160144f10704ae277a17062c51a846f47259a1f7e2006b08d6bb1e0d0dcdb39e25b22e8b0996cc1584655d2fd715b2ac6919b1642c20d7755d304aac21d725ba2c1822fda84106082b88101bae2eac97ab064b6485ac7749b9b0194bf4ae13ccc37aac2b428f0717588f88185c210bc612c55841ac9017d72593852c1cb2ae4b845d407cd4582f961503457107685d333032976559568c6565d67501210463f9b8442120ab876b6559a122968f1f972513635d445c3a5c3a5c39845ee8592e5830d7650511d18444570dd775593096e85b3e7cb07ebc5cd68bd5c2b52ccbb26eb88c80f9e1e3b2b60c9098cb42c292b1acd065892c27560e57be70b87e5c31d78b15b22eebfa71c588acd04bc8b2ae15b26a2c1f1610cbb28e583a5c33a1184b46645d969559168c0c170c96e8b25e4456be7e58a14b072b14ba2ed125b2f27559365c33960f4b467459969559395c3331214b2423b22ceb62160d41c8dc848478b142960f4b4483e5c347f643891b74b00020b2ae0be68af1164d0cf08713cbbaaccbb2ac222fe6a9de953d2c3caea41e66858e3bdab0428121945145d301a9d031c79bc2c30f1e121470c323a1d9785228708230a4f0a0458942c700f078c2830e5028820e1c60a6000d46b26e8103978e203e5c1e662c4b879587edd9430216d3e3917ab0a043919e312e9b3932a0d960300821c4b069c20e3d18901db019843c315ec8f27a5eb67898488af742efbd67ed71e58814b80133c5cc0f35e8e223464606666606e6e54728071f31a197500c4078a0d8e941a6066646068b80b8608980c42401a40b0509d1bcc0214504bac0b470c5f810d904c90197d165c60a902eb269018a8bdef0524564c1dcb4a00b92274b46525ca219d1132254e832c714d64b36da8108282e910da1223ce822041d5d769032450c2e24a1225404145574a9c1c715203044a04b93185432dccc14badc743e8ae8e18226c64728c88b165102ac804246340a15995018a1023e82e8c1143255e8a285ebc70b11a3982c3ac22b7146142fbcd4cc349901026609511031390a1250a08828dcc8c2c81441f81305bca0cb8fd5ff428a20d2052b8d2e355828666232cc8c4c0ba1ab5344288799263150e804a122e3e406264d667c380142a5df90a0cb0c221b3b0393bd100466e607931e0490812e33324e74d80be8f212a279b1609080997939021344ce103f563e86c838819989a921c8121f3e88767ccc00030e40d820431032353b538080624686143383ccab2325068828c686972c647d00110dc18888f111332332f27284081361bddc10e2e14506e843868732932334c8ccc8e0e342a164e70795a911f920f20166035d826841b4e44588171d7cf820c2c18518ca218a2e242356e8878a88422f04e841000cd0526694d1c60ace3063031750c01305e0c269f99ef70860890060b152858a94274638c9f0ac01e2070060a218c0608f2628c10843e0fcd0830d35c48871031b68200348301922cb2106203f605e70821278600c0d5cc0021410238c2a35438c90be88c01e5988c20e401398a08292c64516a78f736426668c2db4b83e7c0007196364d9ce00c38f1999181c6e4863044bf81e65c7089d264c24804502aa103247458119656ce0892b56aea50106911b6d40c10a0e12eb2306e603072801082af000062c800013908004b288b283736408100b0bd715ae2a88f0c09870dd2132c245c7cb1cd60fae37ae1ef8e001901d5c6e5c6c5c2708997169110dc0f2412687171c82d470cd70c560c1307ae145c835b268442d5c3f5e662e1f3232574ccccb25b2429605f382b810ba2194822ea22bba889ec00481593152808226035d5e5e80c400f10328441488a219805c8003300ae8227ae24386191c6890a28b8f24440108e9f0a3830122d34406c3cc848ed030f352832e326a74816109287cdc50184f00224797973dbabc00b1a1075d80743da4a08b0f1a5ab8628ebc187969000262f85143175188ace8e2020f2ef0102a32322243c3688f285e8490c13137211742373217e81282128dc0ccc074a04be8078c0d229b1f31648980886c669abc081193048c0d3033300300020310187cd0e043869824427944016343e88c285e66d0e58701887eb0d20f398832202ec08c4456a8484889484a101960ae982b3137c4ecbcc4d08205f323f42202120a85ae504c4826e46306075128a64a8c1017a4cc8c626062ac508c888a8c882c991a423740e16387170e7469a103508c604437c82c894214b6e60fbb0a7ccfdf6a8a65ae9e6bca533023dd5cc3a8e38f5a7b14505fabf6db62de21fc729f20ebff35e531eeef23d5d80411e359e1b4b5622ebfbe2590ba67cbaf9f74f66c3909348e52d67d7bdf95436ad5e071ff7921bfdb477b314d8376ac29f7b24e4f7fa67304bd6e6bf1fcd6eaceab9422e0f1cf8f35e411fbdc6b442353db7187956f0eebec2188b77abe75dd18430d3708fcecf9631d2df7b0620d7178ae0f60abe9cd3bd33eef9d5a9f41e3fef0de7ca7197f46b8f1a7d56218bdc4654ce8b7afba66ddb997df037ce6c9a3943552c8b7b71db8926b88b98d599a7054dab6c4c9c581eeed8ff26f196fbe7d6f00fbfa69d738eaebabd5990cbba18716626827859eda31b4e4f37e5e3194f8432d35b077dc9c7bbe2d9c96e2d8e4ca00d41542fa25fe1ec37927940b03145aee2bbd74e68ce1f4179810c67f73c4944789a3b6008ddbfe6e7bcc106abf6192ab02d4736d31f535e31bf3c7445c14c0fd475da7d5114eaf693565e151e226cb7a2e317a8c11e6bbf59f36fbea27c0a18d555a6e3b9d326209dc3b3db4356e3d3f853787b16fc630eadcbdc63a6330b096dcc208f9aff2c78bbff0bdeb2829fdbdea787704e6aef4677bff9512e64b21c0af8f704778e1de965368ca321c1c1c1dab8acb8b9c279df6f318ffedd3ea2ee8d7d1ca8fb1971e73291f702b85fa732c67ad5edf68eafce6802a35ecf6d78f23cc50479391ab0153c2497dacb45f79bfd5a62cbb18e061ef34767cb5f51bd7dae4e282620b7ff77c7ebdb9967f8b5b219e74e7daf5ad7d622db09db7560fbbc6f9563d955c5970697ba5d1db1aadc41e0bc9e59f9ed34877f4d8da2bfe9ddafba969bc73ce1b2f2b24cfd8634af9b711e70caf05583b758434d73ce3ff325fb914a02bb53f632a259656ff4ae54a40ed5b56d9fdadbc478cb909c7a7349412242e04c83fe98f3edfef738c5266190ef756ba2cd3c2b529cb88b8aaf0ffd238e1ef34f3d0eb003fc77d21dd3d6fcfe9a7918a3d6bcd9dc33e35c73573f8af29b8ceb5724eebe6b4d7ef995c52f408f39f3857af77be749bb20ca7ca1585d772d6f93be737cb2baf12171413e6c8618edfef58e3fe3d57976cefee734a6ab9be3f475396e16c6b8f8bfbc5bb7388e9d4512c3da2b6706faf33c5d5d7a86d1b932ccba34308bdbcd57b99a5b63166a157ff25c6d7636eebf4446ab00031c7197f9ff9be9d6348c5ba82bfd37b3b7ddf52fa3c21b442fd3c671cab97f0fbf869095661e62df1bcb0527d39a6b3894585ff71ce14c30b2fd4145f130e8e9cab52add2dbc8d9756e7e7ca753e5867b2bd60eac29688c7df4f17a08a38fd943296cabbfbcffc2782b94159ab2cc5b51a8316fbbabdfda574be1ca8282853f5b2fb5d5f6dfecfb13e4dc5947eeadef96ffba9d00fb9f72564bedc6f37a8d07ee73dba96f84b576cc7113f8b593434e3fc4945acf84deb9c6777bdaa1cf99cf25ec6e2bcdb9cacd67c65e9a707c56db2fe101e2065a4ac015639d7fbfbec71d234f42ef37fe18a3defe4b3b2d1220b45457c96bd5fbc61d8f10f1be927258358ef2d26bca329c27d61d7b7f19a7ce38e7db25ce502c23dc1c39fc1d42ee7785379bb20c07c72a4295995e9a2796dbf7eb61cab2034ebe71df1cf3ecaf87b40e3be3b67b570cb5cc986b22482a2f9793c2d9bbcff90ee1465c21ce5bd23971d694098b0ee9e3d5d6636b23fcf2fb3978a6f376fffdad36ca8ee5e8196efd7b977b6a2e7d1c53d75a61d493fa7ae18edf1242c7f656f837bd3a625f7910fccd9b529f798cd3fa798110f9b432dbed6de694caff03ee39e736f389a9ef965a1ff8bc2dfcd1f64dadc6757a0b0e2c6f9f15db5a2b9c51da37beee957f3e77ce50ef1997b07a50bdf6f9c36b6fec5e57cd03eef7f4b7eabce1d776df92b503aa2bb49ddb08e7bf306a1ccdd2c1b593f34d6da754e26abba05d32712b5596e5e0c65865c551f6cfb7bdde8d68b984ff7f18fbaef8661c93d5869f1f6f0fa3841243f9331b5c6eb839e5fc760d658f4f583880bdda1a719470f3dde7bec1e655db1c31957c6aefb129cb7088c02936100994eae754f228d5aa2b3961d9005b5db385755bfaada6bd06d4f3e9a7de15d6ada3bda61f6d6b32854583de67e730779c2bb69377130e0e0ecfcde63b1dad4be9d8f0dcf494efb830e15e4525cb726c6e2c29ac352e86725b0c6dfd5c67db4d598653ca62cdc046ef2da77142b8a9c7560637777e3bdff4525d7da6a62cc39962c5e0eacfab87137f88e7bdd5946538482c184cd82396d1d2ffe996389ab22c68ebb20c27cb7eb4ad49d0c693dda8ac1774fb7d97f56b4c79ff1836b1a962a373a3d2503a8d6a926529df751af537cb0595d748eb8f3d734a63ff2df0f8fb3de187fff26ef16781867a6f783f95bd437aff0a7aedd456ede1e774d7ee5550e1ed57662ae3febd739f0219f384d77fce27de3c7b14e06f278dfe4a197feed89f007e5965e7d97ead658ede04fada9965c4b64e4a2de72598dccfcca99efad65fff2681cc9bf36db98c9ffa5bb51a784fbc3d8e597b5d35d469f8bb37d6327a7fadfd368fe05fbf3df7546b4eedac5904fed22e35f5b77a18a9cc68481cf1c5b262bc33c63187c0cecbaff75cde2e3fec170496db4d319472faa861bf1fe8bee74c27dc96538af93dc3e28aa7949446e8e9dfd60c0c3dce7a53ea6ff6bbd73268b711f2b973f45b4a5c3db0ebd591fa0ab3f533d7da812e2bf47b52eb27d6bf530e7c6fffdcb66bbbafde7f6e607bedafe59eeb1c35f5930ccf7bae33d6e87b8531c252b7c6d053725aefc497eec9e7d440c4b3768c79cc1c76ce3310fb9e3153893b8d78660c70acb1dffae208bfd6585e60db9b7bc61bc6caa3ee16d839d22b73c53f57fe7705a4b7705b5f25cf36d61b2960ad95dd57796fc6f87e31bcb67dd708bbcc594a3f01df25ec5a6b59bf8e504309c47c23e6d7475d71ed1886b1e1c77e73fefda7df5e0e06e61d5ec9218cd75639370eb7be8074d36e6dacd3ca6bff34e11049629353a30ae2c150aa9fd34d9671252b5604aa965b62ad7bd550f7a94d5986c365d98e05816aa5c5fd66dba3cf5b4b532acb70b20c27894dce4d96a54e3acb36df9d6e5096171f676d37c698d34c3feee2726b6f8497cb8d71beff0137fe0c73c49d6e0f6dbf3818a7312c3746580ed059dae86184fe4f6f236f80a5516a2a2bbdd794655a571ac262c0a7bfde78ebac35f37ca329cb98dc585ce069ff8fddf7cb399e329ab22ccb9828b1b6f8596f8cb5bf5ce7eaf3d7627e3d619d194fa873cd3c8b5c37e7de5a4a3fd7ff5e2c2cdefbfaa9fbae57631db554e90a6fe18e10e76bb5aeda5b216bf5936f6a2ded58f205cc4cb7fc1feb5dfb9c5b01fefe3c29f5345ad8614d40fcda767aabee55ca1d3f022aa414dbaf73cf37c35ec5e537c7eff5c772d6c90fc0a59ef7d38d37e4964f2abcfdbc5bcc679f9d72e9a7f810c78feb867edf7ebf145fdeae318f5562dfa58e42533c27bd5ff60c7785c2d20dfbf676f3da2bcdddea02addf73e3ca7d94b2df2728a79bee4b61ef3f7edb0db0b3b792f3acf38c18db02e01c6bb670ffada7e6923b41b9d452728fa7fe3d7f02e08ae196f5d36ae7cdbd09993b8f98e62d27cd7807cd4bf3b5b5f7cd21b5984bc4135ffe61bdfacb29b74cebe38c585adbbbbf7103794cf1ee16674dfdfe7e15b59610f61d7bbf98f38e73db3dfcb4532b69d45ce49bfef969ed7c738937aef9f7deea0e2dae796a263ecd5c436eebe5f6daacca32d20aede79e6b0db156a7ffb3ee1939ced1de9484b95bacf18756565ff34fa5f672dda7fdb64af851bbc7bbabc7f7d24ab3d632f9b55b5a8e7196b9533c0079fdde1a6e6fa18614df93debe5e6df7b5167b8b4d38ce5e29d5d97278f7b43e104a2ffb8e79f3ba61fe7963bfe3c7fb4ffcbfaf72c6ec69b713cfcbbbdc9077d8359e1c7b89b9e49ad68d279ff3ea5f77ef31ffeaf3d7f6df19abc6d74b3d2fbd3e5b597d8fad386ab927ad1e67de4b707e5b27a7d14fea631600ce5b5e9fff8cfe6349b37cac37bf784ffde7e4932ef16d8779ef7b6b8d547725eae433d28aa9c51dd21c005ffd873cebfd3dddf92651359e9ace0de3aed2532cd4434837cd7043aee995cd29a5dd479c63ed724e2bbdfa6b7fe5d3f6da2d9755f2ae3e624afdf5dc7b1e5d719d17739eef8c9b539918e60ae7c6f157bc659c727f9ed06b9ceb95757624ecd47eebfd2bb533532b05df0eebc51bea1823ac304abf567fecb9fe1befcaed4eedd2ea4efdd5b0e72fa129cb521e55e21ea86719cf4aa51c287e7efbb7ddd6caccfb3cfd92d6959e705ea3e4f84eacb7b75a9ab26c87233abf14decf3be67dfa6e63c4ecd36b7a2fa7f6d7dca9df483a7c73bbb9a6f06e3c3fd626ae88939a2d9c5cc34eabd67be2de355a44b5587a1eb7f534fb5a61ef9a6d92ef86f2e38c21977477ddbb56996cba3f9ff252bb3d9498d62596ea98ef9697533a77f557c9beb2cefbb1e53b421ba5492691d0763a31be3aeafcabd57eb44d657320ddd7ca2a2db61cceff4d59a6d2b66e4304ae3eef0bb59dbe5b0ca9a9a475a421e4acf9f3cb67e4f243be4d59e6531a8a97f8a9d31d97654570e4f7f9dabbe7be5ed638ffd74add09a5e272904c1da1cd94d2ac71eef8de400be19e944ed9699f70e31c899a6ffa69859d7e9be534655929cb9464f45aedf5f5b0d70aa7fda62cfb21ff685ac9672b9564f0ccbb7eb97fed54c329ad29cb4af4daaeb59d1ac3bd65c4f59ba6dd53fa2bbfa5345fdc3d3765d9166df321d5eb2dd63163ae7fe5136b53966d1d4765e5f0ca0fef8dd4fb484dd9dc16f74879b4f56bed3f3765594fe992d6b36c476ebfb3b6337e9f7bc7389bb2ccc4ad54a54dfba52cc3c9b1d9a2a764191191660f73e6b5ef4f7bc7d394659b36f15296e16459f7f3af60ddea07889b239052befbcd714a9efbf7d09465387805c44d2975cab2ad53c177fc7c23ae31c23ab7b5d91a21c71c39adfb4b5dbdefb508f0e60d21c619431f7d851d755aed2cc3b18620b2c3c6cfb7c65df66f7187515447ceb0c3bfa594d24a4d271130e497438e31a77cfa3c042b33af3edbb975d533563a26febd6be9219e1a571aaf10cda12dcd3aeeeae5e75d632f0795f26b1abfce59fe48a1024471f038e18d7ac379a5a6989ab20c47c7e6089110baadf34748bd9c11f30883202dd57e5f38e1d41553da4504841c2f847ac30dad8db8a4f52ca21f780871af5e5bd927fd306a4025ad2f21f281ad5af7dc358f5acb8b79e77d522238ee8dfedb8fe7be79c36eb588dee0f7fe5aabef91e6a9af366559f73de835637cfb8757d29d6737659949c4831d682f6fcf3b632cfddf979bb28cd3543e221dc02fb3ae7067df4d3710e5a0de3d6def7072bcb5f6fe0b911b70de9eb186b2db9dfffe6dd4bb23e7f95ffeebdcd012a974ca68039978946ac55373639d216283ce5deb19221cf09b61c734fa6e7bbd4159868313c50607af541a8af500d10d748539c619b9b772527cbb10d9c0737c3d9e1dea2cebaef3860c510d62863d7ac871bfbd7fde6d6e3220a241e55dd7da399cfc4e8913e526cb6e2c0888d6d8d1f399e3e450e2e96d9e019f18664b67d6dad27ab30c74fef7fa9b69cd300679c33cebd6b2ff4839e7a62c838194374a2fbdbf2f8898f6ca3dff9fca8ca17641c694e39cf1fc15c21d730bf2f4b2ce8ca1b5d4decd827ba9eddfc72fe3fc98c215609e73fddef20fbddcdaaaa05618a3c591f74cf7d733052214d09be7ae5e6accbddf1146407402d9a99471471b79cd326bd19d17221344f83fb6daf75bbba7599620d3c933fd31ea183bc49304ff5edcfb84fd5fc92bdc6ae8fbbbcfb6c2e869e6719ab2acf33e5d88d2d8fbde3eebcd384a2a3d1f0196d8573bbda618735ab108b086f5737babcfba56fdd1b89647ebe1fcbe4e0bf71485605feb3986dc5efbb3f63775d21c170dc52615c5a6a74e47d8f8154a5bb1913206f9236ce2e66fc4108160525a7b8dd9eaabe7bcf60319c279add4d0eb5a7790d7522aa94467e4eda994dd46effffe549bb24c55c229c28a8d3cc2261e71a3d250a878d4de340788ccc0fc66cc7daf7c471f2b2f43e48149edff58e309bbbd954b539631014412206e98602245f5c3451d80ba7adc739d5d577d2f356559c6248a88037362fa65f61b7f5d63ed36106d60f60871ff96de7a6de6119151f3c4307f9c719c11de3d46c593c6dcf7ad7ceeae2b14220dc47d75d41fe27dfd863367a043c8a3941ef3cf75951b0392cb1f77ec5156ef79a6a20becbee7dd76f219a5f53f1b406481fb2dc71877bd258dd4ca0af04ca7b6b5efaf6f94b44721a2c0dff47bfd6bbeffdac8411189d1e9fcf8fb9af3ed95e2b94434810bb9e510ea4cabbd7fd7954802fcebd9a5dc764351183d762ca5e75a5e8b25c526244460507dffbcfb573c4d3d75fa59864345f4c5fedc46aafdc6fc5b696704f2af7b7b8e21854e8820f0a3e43d623b29c45ac26885c88b4fa7bf7073396b13a22eb2ce79464cbdbc14de9c653829edc4dd1840f400286ff67e479ca39e1e662a440ed0facf1c75ddf6f74bafb52a206a40fed556692fed1c63adb3e72930440c9097cfeff3aef14668e7e7c272b97faf7652bbe3cc5bcc1e21dd724b9f3dedb06bb135d752567b33fdf5739ec59f73d6bf7d95127a593716926ab929a717c66fe3d7574c9afbeebed77ba5fd305b01efc77d42293bc5b6e705d05c318637768da9b4b82aa0d36ae9e4fd6e9b7fa63401b26a7ea5c49ddaba7384088872d7cd67c51beb5921e6f1a22ab684557e3a7b9c3b579b6d4c9c76626361213a0085d4ef3badb53c4f1e21151b9e9b2cbb4189a8f877d3fa35af78d2c93ddd229a42fb291d254a84104931441445e9a4ca918289a038a9723c4f693988baec10da830bf25a7808e97152e55c89c243280f1f1fcd2344280b1c16b81216bac20d212b9470085501ca284485184253d0c235d4161292029050145e0841a17452c5107ac294b1c6d97da7bfe67cad29cb747cfc4e96e1e004712537555251b2ece7a4faf13c369ce7dc046d2b4efb8d47e3b9b9901072c2975c5e7fff87dd63ec3d1edecbedb7afba476e879a702bce344fbfa3e59c637db3448809d44afea18f787e6e25c5a62cdbbdf4356d93c224b4045ab1cc387e19bbdef87f53112125f48e21a7dcfeccbf97309ab24ca57fb20c27cb0e7684478920bd6d5a8692502584844ee795d672c8f186184b2e89d0119408ddb14346a83bf25fe58d35631d3fec382062a808d18e2ca13a4244b05f5fcb299cbc4708ff265273034343b0f2ef1a37c5dfd3e171f41042ac3b87b26a3d47f7d2563a73b7dc46cdad1c527f0ea9fe1c4ea923ae7174aa21d5dff64caddc740ae1c6d8adbf70e33e37a53d08726e7e3bdddc47e83dc74098f5536a39b47f6a79a1fdc19e15d70c25deb67f3c6350c807537f5d2395704269a1e7706c9c69eeb6c24aa5f711bfd16fed19f6ef2daf747adb83100fa68478cb4a6bd51ee61d81423bf032f32fabec114fae6bd581e47dd27ced96d5df98650e309f79cfbfab8f12568edd88dc7e0a7186b9db7eff6fc3eeb9e9b4f1738eb9ff4f84d8889ae23af1fef3f7a87bc4c1a6f5761ae3f632fbde6f806dd77dee19e586f3cb1e45c80653f2ae2ff511eb1d799d0808d5a057cdb78e1a5a8f6bbf34e8df434dfbcdb7fa1f235fe3ee5ee5bc5042d9f39eb83b119a41bf71e33bb3fcbec399ad0c4231c890db6fffa7bfef1cb9244008067ef688fdeeb3734933ec2f88bbfede31eede7baaf776419594c30fa5cfb1cb7e6f0ba09dd75fecb7d5f1db0c2d2a422ce850ff4d6f8497ce8dbffc406805b2cbaaefde924a6cafff2ad8747699a5b418c3ade94d41965ede3dabec917349231b2114444d6d96d2c21c69b5f082113a41c45d7f8ba5ffd57a1bed172113744bf1b73febde39a5df97a0da0a3dd65c768afdacd48b100966c774d27aafcfde66e9bb94075283f3a9a3fe32faecabad1789501a157e986b9efbfe6ead855984466073b53c632dffbebafe8c45480431d6ccf9cf9fd3b9efdf213472b47eee5df5fcffff5e4d591602ddb7a7f7622ea7ce796b5396a17a2a150201f435dadae9fd57daadad29cb362765843e60e39cd55aaee5f5fe7f6fcab231426740334265503fa3be77eeeb4d59f6c3b1f494a7622120e4811f61dc98d36b758c3a625396dd843ae07fd652e65ae7f7d9d21be200e692f7c92f9e36e7babf0d946203a3d8c01d1b08c5063ea9b1b0086d205a7831bfbee33a73aeda94653a213234d69fd3fd71acfdf31a9f088dd16ddf76e7ff3fcd77d36a80900636de75d289f7cea62ceb364df5732af594ce321c2da10cd0fae3957e729ef5bf369bb20c6715c280f693deabfbb59afeeae1054217e052ebe8fde6dbde5bfb3765d918210b50eb7da53272bda3ce389b7c97d23e5242158830e3d9b7a7b2dfedb72f410951a0df5ea3c5127a7ab1c4db9465abef242446ec36ef5db3bd38729c532bad88d004a4a598d7eea5a694f7da4d599624cbb2ccff947ca7734212c09f7f08bbf7dbfb2d51fd8473e3515dc7022314469ef24e88f1d557cb3a2f1891e35b35975bce3d2185a62c43e98d6f5e4a962d097db1bdb4956b6efdd4b1b1627344f7dda65151adba5f5252adbaef59968050046e9c7f563ef9ed93634b4d59562aa1b64e55e1220401fce7def7e73d799f196a2fa084ba083de052dc6d9d9bf7cb44c801b75b0db19f1d6ea827a5a62cc38992659c164d335955841a1062c04e888b1965af9d625b79b67ff7d016ddd73b6f8e17577dfddea62cb312d28246bf358553ceebb3fcd894657e53052094859cfd7fb879dc9ac20e61b7811016d9ce0a7dcd7ef69ffdb413085dc1f3a799c6bd219cbce70a84aca0f5fb0c39bfd35e083db4ce082d004aaae985d976ceed96500112ea5de9ec53d20da7f7a85002aea69cd65829dfdbde6eb59fd2f14564d94d014208a8d45bf9effedc7fcef5af2267da2bc697e3ccadbdfb0017c758bbbe515be86dcd54dc6abfe4b94a2d6b841b4f11ed95de6e59adb73bcf2b059d90e2b923fcddc61d05d7bd432b65c7fdeeca2d14f7f2ede7bcf0d74c73aea12eb5538ce1ec53c2dde7a47b64eda3a6d667e979f577ea51b18edf576c3bc5dfd63cb8c55b5fda71849d7e2ab3d033aff7479f25f6356e2cf43825ffd9e26ea39cf50afbe7f8a1de387adae98c56e091da6b7bee315b9a7315fad75bff4cb19c3ad70b772e2ac0aaabb6b6431a7596fb4f81c38a739cbc73b9e3fc5c0af9625d67b693f73b29e551b0fb4b4fefffbdd75cbd8642a5317bde71b690572cf313fc85fc6f5a21adf97b7e9dc039e7dd6b4ef1eddad28bc7ff39e22e398fd7fbeb6d132abd95f3b8abdff0636b9930af9cf6f2ba2b851dfbba045be3d73b5ea9efacb45725709ceba5fdda24eccaf9be9efb6fa1afb522816a2c219db2f6de67f447b8327b19edcf9fde18f31d9372eea3e658726da1a446a81566af778554fa997911fa85b943de71f696663aed98bf668f3fd7f84ecaeb9878d73a63cd90f76a8940fbc4985f0a37debeee2148e8a1bcb463d9b79e938e1a79fe9c66bb73fd1fca39628d54ca6b3de774722f07d6f9f3f8bfedd056cce3e8d9fa7c3fdc19d70db710babd9063d9edecb9df1c83c065d5f87f69efa79057205ce86bc5bc7a6b21edf407bf5beae7e7d56eb8a184445c3e88374e5b29c6345f3c778703ca8ce1dcd366ce33f4d69465a953c977fac8f506c7b766a92fff7c5e9af1d503dba1fef4d39fbf9f527f1e60ecebbe30d7ca6b9df8ef20779fb1a697672c65fe5d075957a861f733e22f2be539f0136e0de3a437f61d297743f78f27e7967fedf5cdbb8d4b73941cd73ce5b4916b36a2f7b6ef7e6b86146aaa71e03fce5bdf4f67ef5ff27c037925f57e6ee9e5f69a631b5cfb35bdde6a3937f5fed680c7be65deb577bfbfed970650f69c79bc7ac635f28db16abde1e7f8773e8359efdf1af7bbffeef85619c4a9bdb4355aecfdfe98c600eeaaabf7f67faafbce30f85142b825ad5af71af17cc1f69a7e9d3f9676729ca50bbcfc9c7b2f3bbcf963c9af16fc6bb9cff44a783b945aebec8b0578472971cc7ef2eca35f81edb8560d6f0d9c45a8347169c59994c328c610020061291a0100007312003048241e8dc582d1905cb691bb001480014c8c6ab44c2e954983b11c85411404410c8340000084186400214649c6b207a5e84a4baf2e4dbb773186425f343b46284b55f1c9f21b886bb008b38f7d08ac36da0b9b2ddcccf4626a462c3321d4c0a5e907996084247703f2563bcc669aeb9d820fc2d01f4f3d2ec45cdc4b1dd1addfbc9d4540101631ed342da08654c64a3cd2aa43f32a011268a733781105e54ec87e1012ea6a2010a35e4dc1e5f48590b21f8c13d7c8d813cffa9761380a90f9ade8e748b6fca7e817c810bbdff1d0c0574eb00664067eee8114798bb792fd313f41cc0c3ffcb6c0c88d100cef1dbbdf2e2ea3087dc36a3a3bdeb0e73c199b6325f1546c2864b24bae768e9372faf7db8eeb0265e490328516ade0d230a22bb277bb6ae45c6b4936bc946b895e379b8c516fba82afd5d83e1d4b92286c458a7eba4909414a92a32ebd161e74733df7192d49bde98f25774a3e18c401f59dea3ca4021ba0e18e660a50f3212a7db52534d9cb47584105ee9269629d41ea95899d4c0da4657b898e08f00f8bd7be30d6516a27b1d2a9d802ea16929b27f190cd8f2308d461c755516b29724404d358113e20573fb7d42feddc2a0d2bd3d3361896ab13ad0c8a1ee4fe3f8cb792ebf2ccf73c6f1b9ffffffeb816393df14870b5e0ffd1731d01b43925847d740bd3f3af2fc2ad08a18b72d456cf59bd09846a598ad0314420143a9b6ddc9f8bd0eeed0a8aefafcfa6368e8b13f762f7c810dfcffbae72e179ce3356119abd2beeef63615dbcdfc8a4defccf5da55f44efaff42eff60d9b7c952fa11b1f47f94f3db7863678a40c898bd08e76c595423fe4159475df1c41c4df7131c99b3202107efb1818a0134eee626fd50ac14c4bf2e88d5c4b77994bcc860f5e083ded4726bc2db8c356f50c6dda8bcdf70fccc2bfdcdfb0cc9b9decc4f9c71857f9f8d0f4594810f4acbeb8e5fa254748bdd4a12e1188f6f0abcfe49bdab3cbcf7d81aeaf4beca0a1f2872e326a95bce12184c68464aaca381a13d2a88dd9a93c9f4d388df0f93b14f5a0942a1df1af61d6e7239685210eeec32e95126aa6fdd07bf90bcd60faf29bdc2005231873b8ceac2fb8766853079d8884604dd88959a2492d67c44ce0a47b02975e59bbb62a27cd61eaf32e700e5be0700e621484a58fd100cfd1cea9845443f6d2c43fa204a10891952715d05a0608ee588e839ccc4380b9907e68aabcb40e5113f65b94f97a280a17a5f17613a6aab440a22f57b8f42b682d832f5c3bef15a77e875b65a5946853250a1dc18b94428a0d292026c066c91c2624b707e6a72a3f10cadf55e1b64500427915942984ab1c41997a2e3cf43f173f57a3101adc9c6e539efbcff33a303a9687038eb31a624a2134339de4d6a6b430666d1b5dfd8d865627031d26c678371bf463d0b0ca1fba37145a1b12d15f33c1c58a7c8d76d13f31e7c82bdf6c7b535c40fac7e24e1b3c4a752bf4efe2eea1b6b9f277e29fda324df57c26f6028e21cbc94f1cb8e15e27ef9dbe0a20ffdd4885ddeb81ca9cc7b9f0c4e515316f569a725758065e530691fff7b3e673f83288686d032ecfec2c4d96dcde4c8cf4e4f0094a6ca7c34bd45bd20e185aa7bc44d52f3681dca9af9c7eb68e54b0b60b99a07ca669db7a10242b8df6a05bfd16eb69f0e77619dc60968374c49c7da6877fe1c9208d1681de868345d851aeda6f1aba163c4dc68d6a6592e1b7354e6f8d6745ceb088e4e81919a03c1555d44ae1e8ca68616a2e3c649d11fac461f60ec5d2fc3d31c36dbbd9a4536f483440aba0681664f9e5147bba825305267770cd0af99b6ce0dc9617b21fd429e3644712c12e3183d09d848099612c4dce3fce6aa2da1265f0e4a0a66af8300368ffe9c97800e022540a822bb5461a2f8f1f474bd416453927ab2f25148b24e654690c6f7472a066fcd1de881d6898a959f314a8e827fd4ef6f0c3ee6c4317cc6b5b8806724fcb17cddfe18ae2bd3db821f2501cc04b9e334a6fbf5a85e73f03a84f9fc9f22601b5e30feb1fbfb6eccca6697dd3d7dc9caa2a170dd5569f913b3c14aec7e8688b5248e28796267978cb8f1d5d6ad5127968ccca20d25684aff17c3a3febf7318df70d4d95bec770b33ff58b1a7c83745e2bee8a71297009acbaf97e970fda56eb9f0ce6d89b6eca0ebdc6d8343c93b35a36c472b129e9b327e341cfac8dfb19a9dd01c09799411f36e61dd1ba06b936d180679e2d2e1240cf432f88fd4e45b932c2783b6b92256a49747f23185b9b4c8204ce65bc7578d1de21e4506abb690dc7160f788718a6a2c34707838bed73b046e50ea2394707299c139a34230370cc0ae85dc4cccd1a24a1c7ee6d51928f44fd86d2ac56c37917142f1d173bddb6b9660656c3295b27cd63824d3e6f1682ae81de04a80e9ecdd3f1b96378ada8903d1335d8d60c336f8a38416b2d8bbf11709308fd6b0ec4ac293fd72a4065432d0dd53fd9323003469b7e20bc8e7f8b85bd768eb7aa061914420cbc788f8f9495bba5783af4d6c111f377de5560e2958cf66eacabf1de921422d40d801d1a4f6d832acfd62e2cb19a10f7753817400ef10344ff79077d52f3deee9e8f82fd5255c3fa37237c5e5abb836263653995b9b7be5da891f8b8cc8a44f8e6d0037956ab689ff1ab6624564e14772dc616a48062f8cce7cb323b92e3bc8d14d08616b025424c7e5e600741c9c4b2e09fcc1f6a70fd9f3c0906a72d3975e0f182bec51d200051f45a0856d99652e048876622e0ed5b2c07faa1888c749ddb9cce9a0391d300c5e94e5a49fd43560c8c2352ebd6aa416765b58531628145da39a7bd322605cf2f0061efced91b802e63d50382bc7d0856abd4f017813242b602f534a1bb4f03e90b9d413cd984115931088e805d7c0be2dbdaaa90adb341ddb1d3e801531ee124f332f53ae841f701089710c1e2ed219d8e4c863448a2f67ac4e72634710422847286d48bef2366b78f606ef3aed1ee3f56c2e44615b294fda7275833991081c525e11c4bf6e5f1d9fe5f77d03f76809872de4be4927593c6b64d0f554a3630b2277ef66cafa8e39cf6f7702ea0add7c13ce53013d2cd1ba5c8884a7483a426264dcd4887ff6d7b07469ec651d060842b44afe989f25010c96471a4df8948ef043f3770d3a22f421d61687e40774ec0d452b537cca76e657f0526e956494ba992b8b485f6aa22f38168185d158d23156b0d916bb8c5d62544d67a09aa92bd41b10ddff32922af77392dbb4c1f91863141b921ed0959ff2b53d1d8846f48454592b27206a3f6a4f04cdc1a7e34206f68108c0fe73cff22f829590ef3e61758a4d20c1b64e8c361b2ad539d14fb779cbe4d921b6da26b605eaecde9f5110ad29324faca5cf79869035924ea917f4f69625f55bbed36ab94fb16800f3255f353668565700a617e378e578bfdb9b19704c5ab5f6b67baf2d84c12b49a736f1feae2feb7db3d462be6b09bb09d0bb18c871333de939497339b017d99946dcbfc94266cb5e6deb46f53b7eb2deed2f642df66f5265afbbdfeadab977eac94879ff9a823a0fd0b08c9b2beff20e8a3e947e29e0a69047b18fa24e4aff947ba1ccb998385d6423c7bbd07006607ad4946c8722d3fbe7440dcd28371b346fd4346cc72133c14c0a9a9eef6c10d3c3a0e91be86ceaf7e7a60143b0c2fc67094ce811be0fd783cca5162bb5aec0d205ab4b2d506c91926565962ab4badcba45ac71d28c02cd9f3f62681c212f8512314427e895096d921ad4bf51cee2b3fb2d8e0dac0673529ee29b425140d3904490761043a5a5fbeaa8ec53ff1a2b47caf733653af4e95cf98efe36553a723f252d94b60ee7495096518e8caa46ec2ffc67f6186dbc9b73ace2ebe60ef4e14e6f15ceef95534dd4201024ea757bd9f95e9796d1ae33d184e76e93b9a5da10ddfaa63cc3ce799eb35a0ff234db89946f58f31b0b4c4a42e6ab4aeb0e87ac6536d43079be3b43e32fde7467756cc9ee5c16bb3c375ac75bdb650cc47713ae4379c9509965cc8763049d4d475fe5ff768bc3ea77cc12275a91949787e2d3db165c9596cdb55d5eed1b171f3473bc80f3470ef6a0fa4c5d3cab6733768ccd76fb64dba952c95e2563990e4d442d2875fb1b48b5067973e0c490ccceca915e163804246ac9d6daa740b6e5eaea0a0ff08b2791e596c3d2384236580b9f39b1622c58cdfed790f726071c8cb872fde1fc83f5d2e0b57b56cbb216a9f17fe08a9569413f61cd7529876bbd6941b80a553de28ce35a32409d412b0507d24f63c66fffa65321caa79d3ae7872a56155de729ddbacf99f39b485f3451b618d689eb5ccf3d8620741166b41bc1da3406401c9d1024831faa2d95e0c6042edf66c9928107ed3ea82b80783ba585e56eb5592bcc04234f97b6729ba6050acb159a186ef2b5814c248c0a2cd346c728fb0d4c7fda47336a1e9f24035bfbaf506a2592ab3ec849db155954846f9135ae0c1fdbe078b4b34042cf6402e21d67bdce431b8be6545a21953270f733fdf6cd5950e1132c841290bcd96913cfa0d5fb1bda346bde371536ee4e44ae27c4b42e53817dc6f9a291c4c8743695efcb2ae4ef2cec7a13ae3d5df1414b19005dc13d56a86a8403119f195de5aa47ca2a3b3533dd58cb15a8f8edeed650e7e792751da58225887c046ae3daa29e6ee23aad9767029bbacc1a923fa2874be82523c4aea85ea5a44dc4defd03811863f22216d4587a43be03a1a41af2c3985676b39b31d3ad452f36a8f651337268229c96554355c3bc5082169f04bd3eba4cbe19a48988f3bbe2697407a2d280f0b3535510f5d645070ca24e1ea0c2c2ccc89383bea5a2c3e719b84df9588283ee8f049f08fa2582bab5f9fbec701ca3e96c7281cd421747078242635ed6fb8b5eee90ee20e45d88e278ec811c6e087b497adfa6f01cb4edcefcb4cbcd96768010e4896083694a81309234e4d3d24b735eec2f184a8a1d5e4c7617c3bded87014fed40edd08b43affa796b16cd7f789b6793c4bedb4e1aa5c5aa49cc1d0c3738d1d341d0f80e880d5402ed72c8cba15484a8147ac5d02e415e06a54288ca41ef90396897425e0ea52244a540af643eb4cb909742a918a212f4caa05d087939948a4054cc30f44a401723a4e5133b5c3dc42ed75e8202c804103340770a6962a84d103883082164e62075520d754119ba8542c71216613ada9a2804e4822719eee007117b28e53a207327e4ab653afafe3423f801629f5d80931ebbdf1db53c4788da5cbaaf221df02b05be8720a38ee74150c4404dfaf6dde58188dd6bd2ee54ba54d43710bd3511214cb5b4ba2d9636c94b6144210ce99851d56215e5179ec891329405aaad67b10b045f3b80ae79d7fc4583acbbd8983eeed4f2b5f46af105a48bcc2e035e4a7eb578dde935c0974b57dacc2bd661d7be4611dd383dccc5e3e3e45304b20fca6e30eb109b622c32a9076737c83a944d611639eac1d80d643dce4a962228fbc2acfd28ee5129c8229f7a0fd9a8291bc56c43ec8db18649399c4d204b50f68559db510e6313902538fb1eb271caea9b72fda828633bc8ba3e3540d6a3ac74a7506223eceaee61fd265e28c6a761145cdb2b29e17a3c2807bbb3ea8325231e105c9a8cc02e5a243cc89841d170cf89c25010e655178540dea84d3915efdaa6c74bf99af6775bb86a9e02eb96dfbcca6b27d4fc72002b3481c94015b76d551e4771b7586cfab3b0a5958c2c124256d170899ec46db059b04e87d358d6ce8441624895dca4c8e117f9c40b72549d9d1c480bb189584054e11b786b80d9e543e87d37dd888cf60bb7d6c5ea23a78c58ce1d3d3fa90ccb5e4b1b6aff0b947d576aef7001ecc9e014881119df5672e3a56ad1b1d4b541a1e8e44aa2c48c0cb75db46ab03c92b667a194a8292e32d6a55675f5bf9cb10e838348c16b4ee8ee31865bb0525b01c61cad4b7a4c00ca170db011f3056ef7d2a9cf1117cf17a54dd9854d5a75755f97ea5a012b5daff5403a9bb27a5ce52cf500fcc4209aee76e1e881c3ca65dccf0c0256cdc5cb33733820c1922cf2c0de74ad71439c7cc700ed365a9b80466b86ad788709f3c0df47df32827e3d43e0930066820e10ec62cb015588cb6d970dc63c1f624904208121fe89e5874552478d33c3539e5c9e384318aa100c8fe1377aed30abb984a9df34bfa19639d02e05a61804625ef4a4c3304cfc202c4f283a6fe10c2024a5411a8a5261a17bdbdbbcb4149298850eced821602a4804c611ec07f6bd22ca9151253c7999144aaffc4b8ee9d220139deb787e6e2397008f153a7f8657e063d969067f9870037f90a08abd891e595cfe3fe6689335fb671435361907ca5901c620bdd72e7f2093ae821ca231d192aa388f134b8fc65c0deb56416b3be01f314cacc52cadaf64de5e402d2ca1ac11d1306b9a884aac884e0c035cd89fbbaf220a149c78c18abf802561df182d28208ccd1965333f559311be7156cc7e6c115aef44fb982b369ced12a1761e43e6917b5cd7c6a8be51468ed995e42b4afb1c5e390bce4ca88fcd019551c533f4bc94ce907791d4549db1f2f69b12048d53a1057c2299354d719cb5d2a55a218e0900962173b63518f0ef214feb70474ea6c17c9903a5f95ee475074b5699c278bfb4f205450b70fc6dbecea019155a4004ca7d77d1656cac4c0f58bd6d17e6740c4970ea09baaad5f51a479019663732e40c079e1bee21db47d5f3f87cbf57aa99fd1fa37893df853f73d16f31b62051e17ef5e2422b7acb67dbf2bb897deacaf308d48ce93d0ea62bfdb13a556182d57399fb3e5f915d82b5fd243138593d433556ad2dc414c766b35439efbd778083b3015da8285ff019c5f8ce9ec1c5ac104701c3056052624eff2174b2efe57773a7f05d54d5126557fe2dd6e57d258184fe5161990141d84f75d52bb6ddcde9344d9b7ed5f51ad16f25ae67e15801a9190b9070b6788d0ed5a803fa4d0f04c2a6686c6eecf252560889526b74cf027ec65cdef8d3578d36a04d75ccef31d4911baa4aaeca9f0c89f6f2ab818ee5eefd6047e622efa3ad70fc7bd1fb47942a64ce085dccb5cb50a912262bdc48adac52005f50dbd3b1d69e08f6ba2653dc09c282cfa0fa19cc6065ff5e75c7e963a9add3bb78bd19b038367bed94aaf6fa7c6789ff77d0183dd284b4cba069e12efbc36c03066caf7241f1b72bdeeb28b864fdda8ba9796b3c6cc185e7a76abb46f4a165db664e073d29249619d5af5935ef9c9492154f82243a9f2f466212cbd030abf72cd91346a405fa790d131b3f763087a13e55ab9683d607802535a71908e6709cfe89116d5af1a4137652e9ecc374e9f2a0fb7bf060572caa0a0fe55d097367ecde0b36ef30cadbd3b0e5619d837a74c96e54e750de95623cabb2b7930db7231c264d41be6cc02c0d889efd9e7ebad53c0e415d66f557e70b73a6305d97cb7c9fe79e3b868c58991ac030fad5fd0e96e8e42317b0b179025e39943fe6226b94dc488532b99eb0650460dc07412af3213a4665eb9785347345d004493ced526e8a30c008e1bff16ca18b164992b1f275ac201c6d1e559fe9c928200e235c74b21b90ad02b16b284734f2f4b198488fba7670bb61997e923cc3d74760670df3563a2bb0a2ebc90984f0117bfcadd0b0349ba2994175816540bf429ba4dc3ce0fcc5c2a23a37b2dcad2b27a3c85e99ea2e45c878bf94f27d46809ca75c54897c22f2cf9146baf0738788a6ad97ac5d1bb975036e949e0efe2561c20d83c28800b9d1d3ca525aaf3436d387d73590bb2c4e3efbe79e233e7a333e50c639ba07f116fee5f6f20c1e9fad2815d848c89289677525fcb9c21a662bcb7e70dce7d688ab492a732500c526b47c7068f59e2d1cf60bbc60b7e073496b7a5633e301e18bdc2f9c1528b6e4c50bdce3d0699dcf6b50a199711cea0de8b060c894fc8173de47e4e9f39f8a11086ee6948333ed7a1dab80e7254e963eee0a4cd300279040c1ab65e87b748634cc12d95e90d1db63afdd4a2677c7941dee18c91f2d60b925cf036670d85b6cf70fb960d105ffc4851de55f05ea8b9553f501ee8d4b8ff6d787f32b6e9ac1a287f31e4efa31fe3b065fe8580d8397f1b8fe7a1ce09c3275897b64d10f86e82799cbe34a5030e12b46f53d7874360c6ca23fe5c94c812a7af117f1ebcf81c0ba8edccffe3fa11f304cda6141f274dca1cafbc92d3ad9d9915d2239e5e23ab6f98d5663d278f57a0897e2a44587716e7ca993638decb3a9b46850993c005ad0449168d7714cb4a4ddf8f21590d1325843cf60ed1f955ec0edd5cacbba4fffc6945f6c30a5e378593b2d291df7d47eb48536cda03903d8e11025cf14c31309850e69da5db39fa66486f86727adcfaf3dcfd3eebbe13ae3f3f40935fd0715ea8340aa8ce5462c2384d5bbd97380fe612a90f572ac2123f1652026d168277eee51977d8f9ec0bbef5cf41d7f0eba7c33a1bfeecc9a375e0d3ae7f2a87e82ced72b3cd523b58e7fc8198d5067b23f1fd3ce4f4efc39b52a71e527998792ff06a8afa95ec28f113ff82fd9e9f078bc2bfa1c2fbb35441d854a59ed4ed0b6979b51fa850c7bda0ddedc14eaaa5dc26f9ca8780dbb9b023eca119d1105542e50645f217ff00838f4d901d22cd8dcb00c5c9e8fd4b66a6a4878c5501232249d138836ad0d31b9780b2679a915a65537c2f564181bedd77d8a95c7d42a74754264f8a491250f38adb64bccae2778cb269fc8c6d8ca991dd15e5812b174e1ff9ccaa7f63963fee46c0e49d63386a16d850ef0f40b5569a1e931292fc329cadf3f7152e635a1ffc6239c3cb6cb8d67a544dca7d6d0d7d062afb7b050fdf800da9be294e82c50402749be5341dee9fe9cc6b71f98be7a4d6c0ab4eec780e1b6a8bf9799d540da005b7e28ac067b13ba017c2af50b162f4fc2406e927427fa761b67b6e15f3e7d3eea1d8056f61d51cadbeec76739ffa6b64d9f25075638fdf5f17a9fb9d61f208f580e350c9fb53899fc8bebf7580b788dba697b248a8119251f5061ba614469cb3335f63c1ea128401420610bfd5e211bd86ca202abfa608f0702fdd17d0804f5094782364c728001ef3dfe78d07ede11d6f1f49eba3fded30707c3a024e4fccf7b653d0d4df627aab87d6fcb011ea1da6ebf2c3cc31d6f25a9d2356dfcff531bafad9f9c15069e24f4a1b186f8d01e3446dd7d542a9c690e3adb69667def8f147e99c0f85452fc37f31f8e6a6622cf58f787740e44e7e81863e9bf5d3102b66292b23997a74dbc6f0d830cc221be41e81be594b153af73b58b34663b957db8f6c8bfc64c89a619118f9fceef93827118bbaebe17dce2273183cf7a5eaf1bbfe2d993649a7021755c302a74a2c134f225afb3d08ea428763efd5fbb3626ffddd45dfb59f6bed167ce3fd5f91e7a9d53a218ee3373ae703111c54404e53fd367e825b89eab7ef0903ad8bf617f877c3372bfe8097f9b71b643cf94c0f94671f3d36775a63fce5f36d6d5bd0675d9d0f73892eb9a04bb261fdd6bc3554bda6568a7a31bef3caf6ba6db9d4dc9759e6738e26bee0790a7250330f67f863e433917fd91c0b56dda19893a4c1eee01d683c54e579a79c39b7e377d04a21ab39dd8e6aa2afdeee8e7c0eabd50afc3545107dcc663d7a17e958e5dd194d8d38b582cc55693c89513ee2713813356da0b47d9043c38661a89c32a5ca2e2bbbc45a7883f9976db1476123f6aea99f5cf881c8935ddf4f6d1bf496ad94547c8bdc9d7cc74ad31fee869ef6efb61687e216eff660a0ed27ce974192bd7f0fdd3b79964cd919ec8b599cfc6f07a33f6d8abed273d51d533f6cc113b17b5b8eaedd2bc93d5b7c50c917bcad499eb5f31f9d26bfa892da3bf93f4b20b8e107bb3eff949ad23ded195338fad90ba13eae8bad4a0a541b881dc36506d86b341846db86bc6b506546dfca859975d42e49de342fb718bd17c15d1c75ce170769709b67a10328ff471bd764676473072cc5ab9b1ba0d096fc834665b3f1cbf938605dc241b64ff99584dd30273d81df52fe758e02a0547ec3a1acf1bc7e0ad4531fea28b3336814e326144109ae2c189e3b0a62db3fca2d921c67fc226b26f16055e537a5b88679c10633d0f8135143e9b2e8b672f30ec841defd766fa955685cca188e448c3f82ed5960e84aa9787e1145ba19bd97d74e76da1ba7fb9de8d0ec184da7c0f8a20ea2ca0a7b51d5a77786b71defa251674eb089401d7622c4befea7cef43d2d734fc2854cb30aacfe307cdd868fdb29841f48934db6ae3ed18d1b36c1c05e38049b63b87305e22100cb34b383b67f068d3df3b1aeeaa4153e451834d3bf376a81a8ddec8a8c82c4b6c6a56ff94c142c1727635b45004badb22592a85235f9a6340d8e1734a6ea432a0cb0e2a462f6cbfdf11ed7ac2e4a73553c304124efc168df4cb76c620dfe131c8c329425245c5008306b881bfc503b76e508b8a9d0255a72d64750b6fd2c804246bea28b440569e48ae4d776905f0f5381e4357aaef7b301e1dd5759551703341051804fef7619da525830ad1a6d96582bfbfa0e53e82778c2849d581b36867b8f5962d712816527ca2e9ea456cd5ce0834b1e818527140c59bd0bfd8a30363411fa39ce54f029b9e07ea1453bc94d7f502e5cd14e32f6dbb8c28b6e8779a3ac6d25c0d3c8cb4fd4453a0de6ccd026d1388702191f60512567da2a4c58e552e32fcd858c26c756d2855c721fb53707c3530399064d317894a50d51dcb4358a69bca0258a54b2d00298804dc426531aec7c7ec3d6db78ee680bfcaae892ecd827df6d433a9f3c020c83a8dd08c4b689f9e876aadfec7f0d5112836b9dc7dd6144551ff2257d12c54b1dfee77cc83ab786c0e1487eab50fb168965fa99f89c870f662f284915e8a92cbd13b0670b13e099df5ff408f319d6637ef77f945f7136de9b9793f64393a52cd0d2223e25c5fc3ba77bb8b343dfe81be7765206a6418c76988f1ecab92133ba458b370f572bd8a32b02739d6c070c2b01359171293f1c81f370523de63ff099d4b676d1793e992e5246372c4bd7324c2686f9c8d57b5262876855793ab2f70fc0a884c774e9ec3f35b96e3fa9ebe6174318839ff2d41f482aba8b65d5e0e7c0a8aa94cf89bd75e119adad3b68c0e19d3b2879cb1cbbf88f85ac092bc6d68d106b7951a049746513bf5df984b513dec29387fb919bade65b73b91aecbc8ef99dd2a6cc1dcca60b902d69378395b8ed8789a1d68240d794c5a6edb6039ac041a1ec5377b2140e2d17fcb1f14d219f6c07f7570d7ee6c214d47f910f8a978efc83ab8dee9c4750b497ff4e7bacfe14c76f39593c0ab0d17c452ecda0b4da0c685969737fbf789270a2b076b35f032d31235d7c22ef36b261ff522ee74c84fe7f61f0ec51da8b4e3702ced1072b16baa38d5fdb201cc8b9c1aa1027378dc4b0f78f8c6b4fac28bb45aef95fed4b193ef71f184ff4190adec898be568b03dd61532c8eb6ace2999b7f7a4bca5fd58f14bc87077191c65388d0fcc312b77baf78386318258b14bd586cde2e47110936b0585b9cc47d2bc7a7f10d92feee367b2fad110d74d3cdcecf0402150f3e59288e697052c0570565ce3d8c08025440e0f2cb318324f636e8ba9e36ec66d82dcacde64b6b85321523f4321fab13cc7d7e0b82a9cbc19945a40610d95b4395537ec95adae98252f7d24ec7a41ad42499173efa71b7232be33b010a64280e9ac05d0dfa0af052d943c25114029a8d741ad523bcd9e96a44ace936f492f549fa6d5ff1bce77e67d1543e86b18905916854f1f95dd43f0b62e46350b532b589d8338d7c790095956dab88cc90cd84674e03e8cbb904cde1e3ab2d6bd97e8f9da08696717736abbf2b3d387c6ee9edff09fcefe33ea82fb27d8841b6aa6a3fbac33eb9da8d9043906832dde47bff7bd4e9f00c47a545133e28e7b1d481c581147e3f5c4da4abae8cce0b849dc419b45d788bac1d7fe194b0618ce301a7530b343f144dc2bf177e3aaa03b811c72094fedc967da5de43f370e63d99b1c1e8860503d197967abd62158e8bf18bc1023b5471ddd8011aabf45694c8f08cf27e03e20be8e094eb04a705b7a8c6ecf71130b964e0a8b710b48200a6425236341820a6de6654fe30e4fd8cad4342df56ebf9bfbfa3b78c3c5615458c80298fad83a6084a5a807cd51f2e4f42e83f7d6e90edf00a961d77a4902abd108ffd84cd76a7c921c5fa730e74641ce40ae96050dfa7e466e1282a0d20da3782098fb905312f54e0b109521e6b9370fd0031a20bd544b5616f629885edcd13241d61b50eefa1745dd18c501966fd3b48989540bb5b1de25462cdbd45353a2fe7030b6fd066dfd0fb0d5fea33b12fc3a632f13a821551e5cc27a695cf89bc483e01352d094837b3c50a65a96ef2f0b1a7f4fe100179d9ca8beb1793b1a65eb4180c74b8d2b7c3c01e2a8554ace7b20613b24e4aa3b856d386cfd3e7318ea108097a8c97699d0def0cb8b62def6231170e8bca3e51c198093e7d9799dd2adcc4c35995dc0a39e66459bd5afecef98d85c86d9db7a82ca9eb340c8a318338f549769da01756361c6663105987f3a740694d2e4c822b180adf34a8bbe4099dc7aa77905cd312a7ab828a97852e2d8eec16aff44fb618c3bda8d4ab889216961ec4ca7e1264c7f5d32d3a26efaf424a3d9a4495f131720ec5050f54638d23442e5d6f136ff5f893e6ef3b3d28dfad7fd7cae8e8a0ba2c93a073851aed5e88a1f91beb8f3afbc0e92a180ac9f98e35696e67b88ee43c660ebf51caf729a3e771942fb8e819f9efb8ad3d8154d0f71cadc285010fa81baf83a014ad337944f4ede666c2d061ee766a7557df2e1b7b3928fafd9d0a008e31c6e10e1d3f3c95fc3fd009e4503c4e1f2fe2dcfd830be5e615e4c67d5f69355c58e230c97043abed702ab8af1788ca0d4bb45cf663ce00ec1be736ec3b43efc0faf79482062dd07c58d9fa08d6feb50319de6fe25d7be58d8971e17f7a2e0a11ccba66144801a7efb1c5b2ceab3190f23fab44182cdd0b62c2507569ee5fe83e8d4a5734979b3eef8ef432b2b66289eeef77e2fe8413dbd720efb20bd1d0355f70cb71e3aaf5e2b388ac9f5ae3e2b8ae9eb108ecdcc2f86c572cf5eaf80810637d2421ebdf80d6e63c064b1011dc59fd2c08343efe6f88f9d1133b58991a2a87a5aa1dbf76eb26be09e7068009d541b5219a3120c380099f45f3476463e06812fc5d820488a429f2385068ed054b2de1c7804034cd8bb33b209fa798f6acee6a58c66b8a846e4bf4e95b164cae763ea5cabd495c4147aeed42d9529754f79cf450a61aa2b8c96cdc5b1902b0ecb2a168a803f63d2569be96d9ce2f64af09b52aafa83f42f16180a590388014f600a19a02da5824fb8f66f86d41c6119d724dbeb7214f06baef17f889765e7bbbb79e67b1000f059232223d31517585d2f47d3ceee75d1679439722a1e3854c14550473e1297011d13040d610452861e39225506d2c777467f6abfe41376f7331870a9d00d96c92ce3d620611e142417d2ff3178fab844f90ec0eda87ac23f72144953b5f06962f8b027377a77d37a07f18739b839b7db41cd62a5b971f9be17f70faecb972332a16d7863165ce1dc43ea61d0aed9a5f400ffbb1bbaa83db7b615f7c240c59de73908138ed2946d6de3f144f046404349d7962f51b13ea836e712467539e8b3861cdddabfef56bc5d39d873eab759fc690b3ac8edf77ccd1ff4dd9f73e59853c7595c39d50a9bfdf096d2ead66d508296f37144b3058b6a534c40f935e24d35a11f3cdc98d64d8ab8b213a0e15ba223317e4f22d4e833c902833b59ca4715f55d4a4674c7aad7f00a5bc12abfb943942c26aba1e976742f485d4ba9c7e1853142bcbc945983d7494e7dd8ea060f364f365036c2e018b8aee4d42909d81d69b540a1a144f6691309b0f5bb999953c6b871b8b0dd573061975e91029a29be6f2bf50aae7e91d030ab84f7a12d40907b6e23481754c1cf5ac6abe763c3fcfc00e2eea343a0b1569207d884cc03d3ff1956f9cb52a3b25224bb372e7643e4a64a33a648d58b21a21d7bc2c4c6405d40ce609d6de10d097a68b541bd054fe182d6f259458bc43f6ea23e3a02554c26418a6fa1f267489e0e043578cc06f3facaf55c429a35c0932e21bc8d8051c18d9c6f3c6621f397b76a9838d6ccad4a0cf94bdd7b80abd80b9d7a6d597ffc0ec60296e6f66964eebb1f71320ec7164fc030535d0db177b3250f71c84bd360eb238eb543d3a007692af60535a2b5cf0939de66d696575d44ae5a77c31ee4a7b9aeff5b3d67023caeccb33ff987876dc0b5be9e3ca954287369ec39484a520f67e3b7cd8d6a75b2f51b81173d5e831f84286b82842a6ed27e993acd9c8da3514ff1e463e47a21e32b2d2e7cece120948531ef905b25be4d0972444884d378f9cd8d5b7b44c5a519c680fff3085e5f5dcb5a4a7376334f21b30e02c5e34928e5579d720b73da7c7c34e3b58d011fb5f22e8eb5b305605e32fc98d953c2746ca89de1a49d8107cd9a00e749cfa84d9cabc80427334ed6208742cc0ea67e6094eaa1c01253107f871f9a9acf20c0742c333a2ab5d5d49e547b96d68d26d1e1adce22bfb2b37bf5b1c1d5a7d2e4f038efba092abace9e3d40e03244468781cf04155ba0b8b0d8b239849e99598331f794eadf09eb721575aae1351d7c37ab7fe7b416073c067ccf111a9d483c26601c8408dc2cafa62a2a34d7625bf413a8b3ecccef4fc96c6158b9a7a17a889855cbf09a8634fe85040f47d2e1b22511db9304873c736d4b86824d30315369c25836effc136ec4062553021e0276d2c5620ce8ceffc3989ffc9faf94f5a7d563b43c0365fe7296b8b92823625b19178df491d6730dd0f40ee20f205d01a9b3efb0ac2796198e9393da8fe189fc759203db41823017e573be77e4c8ec3ddd76a7f2ea7c12bfd700ab98b2ce338941cc8bfb60103a40a3f80d8be317591e53ae1241f2da01b72715aeb0f39ba72fd13c30bbd41c1d5347d363a0f49153f2c7878d3ab924b3e43279720af7de1ede2bdc6af63cd57b6fa221e0d8704c79e2d250a40989645fe3d2c34155883ba69aa071af94af989a118ba536456e4a07387dba36efe7dd5207ff677682aca151f3d6aae1ee2f0498fefb2a9ecb075cb3f9de8d0e26bde5bcef9e87a5377e10e9ea97689f9f2e1c12b6812972a5099f1a0c08d3790dcb4d4ae199bd2cbc21e58d5eb29da4e12a941cf958c6598f2cedf510bdd6bcc4bcb8dc1c4cbb7b78db6e5f334e0a1dd054beed0ee0bde50afeeb8423eee385b3d6dee8b0f1a7be1d4b15b5b42ab97ded68dea7e009162cc7d5d904d509082a26445405eb9af5dae352446de141043b21962a8ea4fbe66f1a9d5bac59b27f17c03ab7935cce7182bf373849dae0ff59533eab4e295264e61ca3f68be245d5956536d16b517d742961418151bcc6b531d740be1b0b5f062d5f7bbacecd9d8b1dfa08cf99b9acf2bf0c98945981d78179ae8e26c580674b305be76d6c622d9bf2da6af5b8e88b5504e722fd0d9d02d24f9e1b52c11c1d405c69b6c65b09e041a2538b18c9b359b9a1645cf7fb648b657d4cc3c178699dda0789f14aac0f430f552b19459f8388784fdcec533e6f9c7d3ef4fb86e92a4faec977679ae8616d5c3be23ba8f141fa685667e36589c16658fa89c07d7fdde08c833bb94f95fc717a24caa1a16cff639d39049dcfe56fb424b78ad1e344b2bb7c3cfa8f3e9bc49d5c9e30e7322ea6ebdae2c5f05f4219ec019df9636078886f1a86e3cade0f035c618c091914d261db5c3cb5287c05f4703724058bc8df0b5c89884e7b1bdd72328481537c95d18cdee446ff399544651f1956b32ae3912f3066eec5efaddfcd578f1bed8e563d044f9d3d3ec292e001580a9a7ba92d5c77f8f32b0ba24c8c5ce4c78a1ba92b472178d7b94739c519fca33a143e4c05e50d1bf0264f46d628ca6786c674323e0989b76eebf39cc42897ea23da4d544ff8a0ec8a4fb44d4ee751522ed652de048386cdf651a655fbc67388707c6c03290578c837db8f79aa37f3aea33b4a49074665196e75c97dbdac9808cf29cfd53b1f1d59fe701aff68f91924a02f67c1b3d75d68964ad62dc71bec056404fe80e96fe3019ea81bdc337e582e2c954ad8eb852b0795f39c204af63b8570ad88d4eb47460b797ef2195909ff2c792ec8277524fa0b3f5f9ef5497890338f7ced30b856fefe3ff8606da0fb1a92416629d5ba6b3f37bb54a0271918ae5afd0faa15aca23717bc2cf5ef1fb06f21b901a422913be8fc964973641e57045cf1d6339298247dd4d9fa0c391579bbb88ee80488be360e7af9f68734f4b5fea9ea39d8a527434a46da78e5ebfc783aa59969b5e4e7b5ba459d832b491b59eab717f8ba1c227b562851e26cf66fbbf6b5e9c53f697c6da00686f408568ab5dcc415622a1cfde465fe9e636f84cc94a839da3636c13a24c0b216df6630e1333512369c23e8c208f27400de1f467cf8996be50d5ee169f02f3e90b159f2c3531030a0f57031e4cd887a4cde7d3a87d83d17616b0a9e2e6178447b23a80dca11ea318e7e73ff7085fc27a31da077b1500ccec6e3e634b939b0dccbdc7d1cf9e0a533bdffbeb3872a53230e20fe823176249ceeede4ae16fa1392badb1d732bd803a93e2d8ff8949781f91849dbb0146ecd276e8e9ae9f5bffd30a75b8f97def07ec1fcf93a446650fa02811422ecbffae1b8d457f7cfa738585f05a197a6eeb523ebda9d1415d7cda62b7bd9c917d431478e7263dd8713db6d8af75c0698ee476850b9d707c4b4210474b0ab0c21b2423800803eafffd66cb7fbbdfb6526fe452b19e0adb16826f5acb09a2e6a9b0a3e04d21b5939b8731deee4bda41e081dc4a0dce2a11388139a2df4ea33131d34832479c1b2887d71019fe0d548cee042625df4d47500f70a517eb43282f29b4821183942bc1dccaca1b889941cd4c214d4c209318b99ac1c71ac7424aee55553c3c4dd71c365d137cf4a44c5d5b93ebe3eeef99308361aa1a6a6ba59b132c6fbac66be21b6ab3dffd74fe02ac6ee42fae30b28b824892407b08423b1588d9451605ecc1de724d8eb20b54e706f23a7ac78290e4abdd4e579b601346e35838225c3af6b3d3b26a343419ce5199f5e8b7f5573af014f7a50e9cf15cb3ccb522f6bf0e6ebd5f3174638d1d206e6434ab51d3e219b4ab64f86b76b367ec0bf97be1fb5c79d21a349df2d93f11ac1b5feabfe7fd4c21d8b763b76d82f5dff6477ea539a83348b812030ce44816f6055e9addfb77581f4f3f13b687b29dc34bd58f8c48a1ba2f1f39737908702bc35c1f99325d4fe0a1f4a5baf0dbdc78bbedbc14754a144f4f6127cbcc91f9056aadf772d8896234d77b05ad9178f9080a49f5f5a27fd48d464391941ae7e1e44e0986efa48efbc6f80eafc2872af25842a3d16188d151d8715180832a94447b170b3c016794c19738dfb7146a568fe833b61886676ab1822073ec8a59b58b4e9be47e5bf6230321f1400829ff1b9ae799352e96a5cb05034c7ed3b83d09bb12c9528b8d84967f91a94fb5ae1f89ebdcd222b470b816b004884a53c2b16b6a393d8ea4f116705d4ba881c21e8d09d09e3b4c05b0015fbc13a62c7edb6bd5f2704efd6576ec07d422af0f40129c4c41c0144b29ee06e88e3df3760f86cd242deaca3d121a2b571a2f68db03ab1c6ea20f5163b1e43a2d4363409a2b335847a4e767e66ffba6299cf6e20ca26f94d41f3834a0e9b67f384a0d0370568f1c60e52d092368ea2aeb925fbdf25a4b73151304175cedffa6422fdfa2131fc5f52b0ff427542bce83d3c3b8378466968f2ef7d9c3e2fc8320b1c0e53c350a9ed82ff194955358f40e03a60c80dede2a8e0eae44a53c87847ec7f126c4fcc05f0afeca9d96109a322f4039abe36dd81807c5963c4adc28399fba5e28ab16994688c98ba357cce0cdb0c469564604157d7134a8293b4098098fff09910cf91f901590151cecbe964c05e230ad8d07c913771b32a6bf14ed71730993d6e420413de0438fc60764ea21c3c57dfa600456a96b52a2f8bc6afcdc3270d15fd6d3649641192f31015d344d5d68311363c167b0a60dc25911473a30a1da09e89c57282f8b3265054aa815aa3745aee48b18feb2bb205349097a9aa642018275ce4c4b0ef4395783b61d624f5436bd7cb27a8007dae2dd379bba0cd6f164a1f674f280337f4a9b5149a13df4b3994e4fb83c36c34c9dae22991deb349c29bf807e78bf632cb49b955326eeafaa9ec527aa6a02f59426f1107d60afa3df206f8083182be626609235dcf4f8efa15d8a62821c14e0ed9c1171b474f13456681cca9dfa42aa34c1f9f1bb436008467a1d025c27e8ef064b94897dc696b48871ba4a82b47b601d91a50eecad0d888d7b744d0e96e2216eceb95b3f2c90409aba9e8e469c315b4b124bf82bc12f5a8d37fc4e858722f94d5e834d8d6ce11f88c83d686a6d931e312db72aced5e1e4bcd39127aa1b7dbc93f6a2ad3f1371af0396ff30b055760c7ddd61865b1df175ba7ddcd27eb2b99bb696e8765448a580b1cf8f2411babaee0deca60b29829b63ad6d87485607005328e662dd611675cf4e67f69701c33e1f4fbc732f81c43243cfdf7735a138316653c99e4a60968ed7c43d082cfe2dc23f8abc75396ef506ba7d130346d600b86472c490662752309f2e63110bf684436b161601abe8bb8666e931bd4f3591d5acb3daed88fd1d8d431d2b98c0496eae4a4aac335a954c7a0fa4b8d04203b5a96188847b666951d09989b4facd3b42ea194a48511c40fcce9bfb69502807549606cc9b69657cc0e7aa6d9e2f328b3bd94d0e29dedc8904253ec9448e274185eebdb529081538e9f1b0711d53e88e7294f933118c4ba0d9243109d60ae5a3a0f1bd1a31f2e8eb9936d9c5b7c6bfb0ead3510c326d838814e16c1aab65c92c09b1d08b80e83e019bec808a8b4c2e365161911db588f6c2a50d9c7340cee58ed3a89959c43373cbeb1a667b17dcb4441b3945b0b0577460afa2c148b79ba2a6fa5024fbc95b6d02338b63fbaefa876b9350b4b528b001fe9cac067ed922f5cf8350708da5c4e2055d3aee84f309d641227d0a2d13b383962c1cb8f62da5de0d7efac641bc25da71ec2b56f1334203f8a26a6e8c47ed63c52326ebd90e562efe8179c7d2f9167c3532ffe43dfe755c0f92c71b0e65a932673bd13ae26dbc4b6a9d814f9f0332300985756c0b4ee5617162e09db27552dfb1c7372cbd637e1cc21b0b846c6aab10a2db9916b029fd03522db1079f9c09ff17a2c25d066994ef93c523f1a14fd76b18fce5f1696e52a6d0215fe838899f3272823608caea61844c109889c561063aab13bad762586975a49f980feee1c18f110657da1e38e74534fbddd26ba791e03687123654caf61600f9a9368327ffd4c3cd18c6aa58fe99e76ce2e6d33e37a8fe5d937648c5381cef53243fd8df8fbcb626eaea7bf10ebb383339584973cffd2e6ab0819c7341f94b45c04ab514fdbd5896cdca086f722f48b5f86b76814f2de2d08d06035ba3155e29046ae49a3350fbb0e2dece5affce0ac6a4aa01494927ce5f2f129c4d8a8fe64d7173aed875b9cac7b2d8705a6c373a36ee18739d51eb3209c811bbe02d3b1314e1ed2d3163af23a33aaa00f2439e2302fec29f7b399479e975edaa630f4dbf68da5e0e6dc5619ff02fff9332fb155c55699361eb2ed6960eae5d457d42de25caf41726f32de3241b3d9f1dd17d5cd28ffae077c342dbc18c5ede1b403d65c85cb1a2127ac96dc22dc7c2eadf1a49dac232cfdb1cb6ccacb55402e25e016d4fe3a875d423b310817a51a34031d5e06f23b98984a538789a3aa07e00d51002c535f1504760e42d32308e497ae442318247df1fa1a8b2780dac5c497bed29810b93b484b419c9bba13ec689c076c795b6e465921dc8e63878b509cb26fb2b6a8159c797dc8aa65ae8bcd60ddc4341b230e85561485947dbdf5eee9df0d225f10f1065ce1b3bf400061dfd27d80f14123017e4ced1158713387edfc662b6d1675b32b6af5e5e258e95d5d91bcc058b248da7e1587fbb17f60ba17bde7a80191a8f83eeb516301914958f11fb3aba753293f85973e4cc6095758993be2130a9c3a6d23196a6e567714e4cb952168dc392bb09842b13a0dd669efcb590ac2f45365922deef14aead0703da9932aba739b14aedff179e783a430d974b92e352eb9e46d7f2fba1cc4083b1f128edc57652ea92470be2b78af11eddb02220a62bff3c88a53818aa2045b7d17887b88720a9107fabfa621aa6ebed73af14f78ecdca0f5aa1e042802ae9d2d0d35af0b1b5232588a69dc3b30e3d4f44374781ea21154d59f77108ac5ff360bee8fcfb7fa0a7713a05065541df969af0a02891830050a15fec2b6016cfd05ea103ffc1bee73995ca5ff74b157bb852700dfd44b387c18c0812168f5dfb21c36e2b1bd81ab6047ba6df3a565a0922054c870953f116fceb18c8384cb00bdbf565189332899924c907c4afd1e1940c743fec979ae809c93ea24d3eb5f37e5e3f22950a3f141572b077b6053ad5daefa2280b53ebf64cfcde8f304f09857ac3eb61aef7fc51035c39e02491a54fac70e87cb51cbc11875f5a360b37baaf9ce4926bf68707f43af603b820aebe1f5e7d829a682aab01d25599209e6781c42b900d3f3938e5b48385213327be0b9995a8d84a0a1874aadce107b39d2c722aed8a51a3e7edc90487f800298b220958f8dc4fc030b01d786a62ad84db3f14926906bb6f1ff14b6107b91549012a5c3b009f5411cf8a0f719209b742174491df15d09fad72746edf9477d81e498b4a32755de9e77a7c7e0db35f4df60c55b631098733becd52f18ae3fcbd8de11ddbb7c09218650afc15c689110120ca16694b4c70148cd51de211b826cc42e40c5c6eea41adac08eeda138bd2c0462bf177421b91f667d8c086488729869a287f0beb652242321f1322cb97a88d591ef947f2cfc5cac5ccedaadc240484d59b80e42bd9977246bd9cd637dc3a25fb1cf7fee553c37a14173e46cf5314be769908b3551520596344984c6cc8d0d95572f1a04a463effb9fa6ab74abe0c3e5222c654c5be458977c392064159f1c0e70762808acb85b72a5c0be70eab5f78c2468c2284b74ff3b699be85ed1cc95647302821d437785c67eb4d30f72b9b87c7c42db51e92d2a0f2e111b8c7db580670951b925432a5972006a30b890558530971b3131f4a6be9785d58c6cf7cbc5d7f2c166108c04863337c6273fcb1bb33b062e4de86b3a99289265d6113679a02e9ace4ca72d68dcd514d4fe2b3cf9c67c62e2a33b5d64fd1dc615800c15001effafbc7e8135b0c2e35ab92b67a72720ee9126b0a1b12670576bc105fac4aca34d84f2a0a02b48fcb6039ecb0e1d15d7fd24563caddcaf83b899f80d4537fbc7f9ad46396fb8944c7cb592951560c30b0df312709653e22bf679576bf39a7d82e3d81edffd59534eb4b5c007b9a18e2d842dea575d580745a871c63d0dafc377f83d981d2efa2f1dabacac6b80697c4d8b61878385f3791524f866e6c8bd6ebbc9d242fb2b507d01a45081b903373e58611af65099ddcd6268f9945998e0ea1e07f845556ce20aafc4ec9a999602aa10a7b3799ec44c4c5228c48df3e608754523ed846a114387a23aab1add4458dc30c5a137173ab0ebaf45f12390ec4274ace4b3a030f6538ce3beadb278f1dbdf740760292bfb728ffaaabbc459227e388eeff3d69fc5ce865deb93c0fab797a9233046e9ecf88de45e31f107b8e66923f843cfc6c6f8cf039d8d89c823b5ffa1ce59fbedf48f2c49e556d11dbe7184a035d2ca9e8b2ccb9017a39171fda83b20279948d2e3b24560ca9afa0148268228318280da2fff54f7b13cea8ded014749336cacd9f758d283178b67cd8e197f77a7a34c0e9b9ebf2f3423b120722766ff229a0a110dae02a0c8135a494613c26e3d51f1e819536f88b28be441280091f5f7f16282a659a117501e3c2d3c522c3f3b4956a3ed64103a8fd7051bc9f8ba97bb6b57491871a8e2c6191dbf47c5a3c0c05a25c2a714afecbd9fa1b0e4bb7af9276333581fe83c6ad71a87a44c90316122af10876149a1c921fb5409bc1452cfefbda08e03441a48ac5387451d919572628215d06972573f1dab312b48499d52a2e6900c5b13edff8199e738eae2098b10bdd11db83e6f288c71e81a93f581af731350612497414d9f7a9dcaa8dd0eb7f0fa194802767a24bbce8f5b9d3376bd2e57ce7f26a63fd8cafb022b0a3ec10347109c616be79b71b4b4e162d3abbb4dd98ca24687299f41e7a1a942ea27b1581a93a191c4926f6858244a3f18c72959a938eefc3e1fea0e63257dc17d2b21af87ca65361c17ee040dd4706ed6c3fd70f1c91f059f7d269e2f7652279a738f040b402b936e18e171e00032777135bf0e80ece8cb70c9f6812ec652681d2eec7808e0c1aa84afbca326baf3499a413f0fc0489b92560e1ec09214957a7752da9101fae5794b3c9e9599ce606043ffb0cb00a56011a72818b69d8df75a0ffdb35918f40851d94a2dc769772a73285375a54fca8c888a6a6192e09996160604d53a4aadb0a876029aee17051f3cb80789965bf188b780c598c6ea8857a3996f82809bcff23941cc4b3f2b5d11eb1fe4db22deba363e44912f162a1e3e210b59870349c05908b51f88f22bb19706dda0b4279be8ceb240a758eb8cecfda00467f75da4c62f7bb09dd92099576ab28cbe9bfbdd7d67a59d1188c80aa514bd672aa2dc717b89ea088ceabe69208400f5eb7a4399fd5ec64e52995fa7267ae7f75ffaedf87d51046bd7c3629dec153579bf339259926ca4661f7a510d165c34c9c3b79c9c90c62265ca6c988ec065896dd942980f72ce19e0bb28ee57de41e905655a3633f9e8b87e3d85cf2b166beb79588fa2f71341a022fa8d204f354e68e7f80712d9fe97a1e14868d8ac80c015e054904f0ed1ca5cc6699e9a3e43385c46afc696b8b07d5c4bd1a74eef9f547901d971947f52a9fa95395f3ebcdea2e55c464a01d3f70c9ffc0d912ea7e21d864aa40e1fed0c1faa6722db54580290c6fe0f236653a7e52d01724bc1dcf5a9f9b4ff76577861b241e9c48946f465b1239daa496fdf588ddfb2dc835a118d4d3d4337ef096312d22a87fd28385ffb3879204a301b94240af5c1269b91ab1971fc9f484b26585630c61d5714c889105265752bfe75123db9b92194261a1c90916bb58e4443d6899018543514d3d0928d41b470dee205901b5ec3eb83a547e8a9b76ba8b1e5e44c1722ed5c185d1b966b58dd80917a6a64dd43d2f6cc37c4f94bb61330d50c67ec8059357ed93a174481d479623196181bb8e37393dc8a3332af2ac5eb3dc540b3d013fec2f67203f45dd0e3dc0c48d6dcbe64616c50debcc154c79808ad1b90824aa671311f1ff052edb397f934426102868fe990fae7dc48c932fb8ca48b08303d21154ef4b1eba804d8097383f76f24fa3c8fdf3c4a9d9676641cbd8ad37df2d48c615e998af5b4c5e99179df42bb67daa3c05157041a2911aafb623c606fb58486f212ce3cf0b7d0704d55e033a1899a37cc9ecf2f3f740a9ba223c4c5e7b380f452b189c6e2ba5bb0fe2611bdcb2fa71159a38c4fe367aefecea2ccea4d47efa2b83b9bdc23345b213a0a915e366ee7da8224fe1c0779bb1a3ad473e93dc828d8da0535ace7ac01f5ee4fdbf02dc3562ad30df98e90b463ba8ab84f34b30b64f838c95639a44d850943d80d5f16b1f12d0335c21e9f903573a0f42e8b940350fbeedeb899c8ef0df1f6e089c82bb9871b8717bfce6dc774f218715d86b9ce34fda111af8881a56ca37b4cee29da85dbb9389a97e74caf86c1020aba77a131636586d4c805f36db57655793ab43cf8475dcd0a973ced973ebf7e9ccfd57a6eb2ebe584f9de403e8e3634f8c02ab7b2a0c08e78c34b16aea9ad94f5740593a8d83cce98e824de7e2550a2d785be928e093678c99fea016b255a7387fa9dae875d144dd7dc7015bd75b43d9b115180b47082ca3e29be3f37ae3ee4c3c30cb93ee61168ee758f7668953a81d95f6793eaf0dbbade40cfe37453f825016c1d5a58d981ca1a6902b8ee00650c05307914ef3ad7f8b211744690eec2024bb8695851daacb51c6f7a6d43752cdb702fa3e54c54cecc778a06c6fb62de7d741caf816288396c5b0893235fc00021644cd68488a352e592aa07d764b1f9bf51bbd2f5f5f25a2c5e795872fdc08fb7f857fc70090f5c8e579f376e4962c91d68d88e63214aa2db3cb4336a3589b62831bd31aab622342f75a557736cc6249db158a200cd444da2ae46cc32f00639e32388df4597d44f360d20359598e1de992cdb4e036b3d08f77ff85e04ee8e026b8e684d98d0c4e5994a388482049bee6059642d6109b8b2a5a8d10fd682c64f3c7077bbbef9d0e0ba1a12d5b25cf9765c9f0c8e2002b6afc82640570832ae3eed0cc907479a60db85140a86132c182ead419a6b2798b2b15687ebc7985cfd4cc0351f41b1bcda39f5d2fdeee74cb67a9cd11757ab2f071db71c2e7c37782b3c9ab22d256b36b8b45dba9cd4f32217975f7247d272456091d5c118f2a15b40fdb7b0a23429f2ed38956d4a87135f1281cbe426709280af505d6b65f2b1c2f1b959e6a4f676d43ac422db652c4054206cf5da7b21a1d18bfcdda6b690596aa3ac6c79e97387719bea86cfb77709c72abb3ffd762460ed0f1cc7d6c4c583c95137ec28632354d31af19f4a71925f5b737c4c1bb3dbddce712d8903f20d250394ec8845bf06b35dd5bda0f83f4e19b26c8f9752ee48a95cf724e164b6a4fd9bee67f38826b9ef13cb8d015796d21c061327c5b20010552d0c1375a502b2d8ea6bb8001ceb829a1e28c32f31dd795a1cdeaf74fa448dd39525af8c92a060e6976f2bd0b42fc13828e844ee5aee7d1ac111b90cfe79e90d0f8aa014cc6373a6933c3d58aa3094e289521d06c6680edeadf43ef739d738ff2bd02232c9b6f565cce33294051c15699276c300e1d65b7baf73c43e0b5c791fe644c55d4a41cd11ed7fd381ba1bc93487fc8cbe7f222d48093fda4aa2f134aeb95fc625d32524167cb687e90ec12bca2af2550d5e0b8cca6de823b3c79ecdcdcec698d283f8b8e9b88a117da3f7b93c0aef7c555764f9604ea9bccf8e81aede2af2c8d8482301b92a5a2ca7f6102729e8e3dbc063b395769de0b0ffa33be1d998263591aa2ad41f96ec59485c0040064f03185d96b43ebc5ae9f89009f6f0a7b7d2b055b0823af89d0cdc97809c7754d04fe2713c7cf3981839a35eccf9877ae0df5225bd4fe0d3f37648894f8bed92009416d535f00e933cb84f5f2e550e5863bca9ea793aebf50ca0db1e770e8e3a0179e885035cd5b39ef8e077a0298963120c11c99e21c627f4e00351a670ccfcff8f7149565a1f4fefd2eb3e4fecd933228217032e0ab32e38f4d845056064a25948f9c7f199844d24eecb5a0573daeeef157ccb41ca6dd6fd93b1d57851d1455004ce84051a1551e298cc05fccfcf6d886ca286c7c05d2c44fa6212be62019fc268312390ccaf8f4c29964123ba87a28dc0203fbf04ec2fc1826bc8da6defcd725b22b4b78a88f7290aabb7c221157ea6785d26be66ee3d8d778de170437f2899c69daadf99c39e4038c5f71e041d76d17c5f507e2b4cf612e14c013f97c0943acda07302b396f23bed05744c5550366cc5df0fd7637b579503b241653bba0fef2dd2c45d0e873913f5a6db93a0d6a19368e9c1328dbbdef245bf0377fa2e338345ab4039812fd0f29b98af87c937c9b17f1541658d17610fb8e57e7b3f19473e533b0cc97770a46144670aafb2b4bccd220263d82b9d5f3d1141f625c98f8ba2ab70f04c4ca8f569605d943690645007a08ff373459eac7775f8d9aec124459e14cc3dfb98650ef6119ee513a70b455be99f485e7a32f43a7db2b6586ab8ebfd69dd43e5f383be27cb10fb404fbc1bcf216c2160448be361002ae27f61238ada2f5acf54e850519300417b282e3e2e17e96bc2c05c765d94261448511fdd637e24db0b06dad8703836f1a792678f19592cf5ba146fac37ea588af2a790c4d8528e1dc4121e2e73a6ab604f3ce46282df6fa66d1e59792deadc357228d5fbaae491447245cbeec3e75402cb373cdf95c6f77f6087118675c2bcdb70162345f65befe7f953035bb559af631387b7b8cdd779a0b278abc62c6fe4e916c5c39268692fa1a3385e80167fb3352f29e25d8a43360603f9219e6426d8ea9ab5bd300dca2635b5787314d836d8225f18c753c34589e277d9fd49fbd18bca1e2ad6cfb6a372d204c4586b881aa9c1b7fb3fd3be4b2a58d48fb1004423e4405f26658443e4acc085bd3b8028603162ea5c08cf724965e5fc909d09fa74475585118721077bac4099b5284eade909cececf46259fad55024ceb020e4945c70d3a50ac26c90103c00030000c0003c00030000caa38fe5ae8af5453999b32d4048828e15b4bbb222252eedbeb010087510000000040e207faf8f94ae50d530ecf0c8cbfdbbee4f796dcc51dac132a2a25d75bedc20ef9aa09bb1bf11f2a8744223a0080882eea606c68cb9a133bfc4542177448f21ad77a13ae559f4361ac4a081fbdce5c0ead85c9f5395d4fb57178f7f2e47c2997c4281cae72cfab1b3bd46ef60de8d7df9bfbedc966dd906859e5a2c4d406ea4ed68f9627d225cb86634aa973ea4e26afaa6bc84266448923155fa36a48be3c4564d234f49792bc78c50f9ea3c1387eb924e146bf3f43a59a51dae629a58f19bc68ab2af38fe9da32b49aa49f9ed4e9960cebe5fca9613fae9531e89a443f4fad9f534e0c6c948ee5515ecec44c182a494ef7e46cb1d7070327e6d42016ee1a53ca17ca315e94dcf97cfaf18252f729254fbb4064ac9d145f72e18ccea0f5e516eaf23b498c575151d782256a56e612f4cfc35930c378fe3bdd146c462c707218cb1b5593ff825730af921452e9d337875638577e5d93990ebd6115ccc15a3e7f7bfb932015fccd268931a6b097d729901416d04514d0b72d413c7488d51c14d064ab621f92192bf7046b273d364997a4cf7342d572d6d59bae235e13f630bb1a7bf19bed9880b86a7fd0ec9660ea5dcaaa9d4ad14d0998fc1d2ec89564256b49307fb5a4bc716f52352460d1bace433e49a5b123dc316c45fb8f963f6346e8a2084f67ff50fd1dd522113c394f3272a9343304c5634e45ab965f2784fe4555c26312e5b620183ae45c46e7e6990c0877a67872ca26a942ff019b33db1a2a8587ec03538a789eaa98e7d383f36b85da7729a15c1e745963cebffcd889ee80b173f7cf705331aa2e74e08d5ffe6e9d8b2d89c16a738eba3de3c2181d294992f23829b7b02d99a429f753ca650bedca66c53b66c844b5b83bddc6f8668f2e2d4ac9a3a6cb8bf6a4cfe2bd4ef1c5a2eccd461666aecf29a6e85c6d89857dc25d0aff5d111116764c8274756ebe8892904824e48718328844c6d80cd478c5415a4454fda3c5898744221b8980b1e30c1f3fcaf0e6e1001d3edc023b9250c315754ae26e5c831aada8c10aca6f442e9e28d71e0e8944de7d3c2087037414e5a0c62adcdfbcceb13da63b1a12898001011d35a8a18ad39bf4df558c96442e418d54b0255ff83fc92e4ca6432211303490030239c2d001821aa828d786cc91269ad0ef9ea2ae1e1b934eea5039690af62d2a552da5b4180f0ee40843c70c6a948214a3c043d3594ffae99b4614c6c73371dec2754c01c00e6a8422f17553c9b7b61f75058596735bfe79ccb1800e0018a1c6272c6d89fd2ad74bb3a1a4862756d578ea6693c95dd389c2529e596d4a1d6585ec18638cdd11f2e3057eba0627d86e9bf9ccbe27a6b6c70f1e168000066a6c82d2ac194d08ab8a9fa48626ec98e9fa7eee4fcace84b122934d6cee7cb060a2bd750d9b97798811021d3d7ef0b0808e05d4b8440d4bd4a8440d4ad498440d49d488c4026a40a2c6236a38a24623f83129b8a9a6e6ae6480310107e8f8618606784c20a406236a2ca2d512f914a6e29ba58a2832685bc8d95a502311c5a81c2b8e8941d4f388304d78fa5789f2546287787d73e668d9bbf79421f0099373905bfd300b6a14c2ca5a4247c449f651e7518310e9c5134bacdcf4eb778c1a83f0a2b8ab64e793b6e282c0934973327da1a261204a721a957fbe35658b183500a16a9b5c99ec7d8d3ff45771f7637c7f09b91f0cad49e8a4be163cc614d4e8836952c7fed01cc4738f851a7cd8473d57a6f5434c6c0935f6b06abe9c43fc8d86664e50430f4962728987fb6492d31fa891873298b45e8cf3b94d432211ff61c60bc898410d3c7029d5a9b34a6a491b2bd4b84353c2a64959593185ac0a35ecd0f4e55652d5247bee52a85187b2749abaf01257e2a5436daee561f43ef83bcef0f1230435e650f8513191283d50430e74be9cbd6346fec7ab461cd00a9da16365cc24546ac0e17b759b2e9dced2ef0d5be80cf5b638de41e306f65467f457ceafa46bb4e1245b66b14ed241d584400d362c126635d7256e4c768d355019aace374dc99ee2851a6ac8356515adbc79ad7c1a52eda8bd9e5575fd45c3a993557a68a96469ce807d68afed1c9a21399a6fea49c9b65f86a2a4540d561e36858c0cea6ec6ed939593eb312454902ccff1ef3c586230ef8579ff4f1d93fc861a61d856366c35c34cb92524120143f595a7938934861a5fb804fb0cff69693567470d2f541a9f66426cd0f12d241261438d2e949baba52725ad774a482452460f34d4e04225058d2795bca6cef70079861a5b48ee3e134b91fda84c991904f0d1e30960060f0ad4d0821baebd7ce22c2503307c682012d1428d2c30b5d9fced3ebd430b89445cd01ea2c3c7e0cd420d2ca425d9eda8465914b5c615b0d7d2afd0bbed5ba1134f5cefe49b2ad4a002dd921a2cb6878f6656a8318534e5d12445935cb73d07e888449850430ae61c735f4d4cb9c763c288418d2860ded697e4fe637f5e50030a9468d1296fd45451fa271075e9335e8adf4fe24ee8b2ffd9dac598627a9a608b49962a675e13b6c3045330a9bbd54a33787a0949874af24d57ce9dc34a28bcf4669bd9749db349b082684fe7934542f1c2ad4432658b8d39025956f99759bf522a8d902cfb52d26f6b4ab71581fed35892f09fe3844584e7a4933ccfe4b4c933842fdbd967d90c76292484c2c7e624b72597d341d8c3ffc5f78ee13d0508357e50c3078a4929c7ae3576ca9d1e741f3ddcb8db87e834241221a3060fb0a0f9df13a126577690581653a7d01a2d945e43077ce676cf1f32cd3e85462e8c5d16acc2ebc999352e4ac1353fb2fa72ccf12dec922f3eaa6dfe4f638ba36fce484f9e1fafd5624d39494e12b9e64912335e408b4dfccd3673f5e777165c9b4931a7743b16d516d090452925e1d27ca4dec22716945a8e31a578c3424d51e1f42a37afe65eb14699f45e9613d53257dc9d2aa5533bc992a65a5170cb249e548dff95ec38c3c70f562c55d7799d319572c380c62a0af924c798f8af59351368a86213aa636aa6ec6be791038d54bc312769d3c34f2ac916030d5468728eb7922794b8bf14c831811c12c811811c10c8b1021aa7388b7b8e4fa9ef593105256f9d10a6d96726edf13c2cb0230c344a41b44dde9a1463d27092e220e937267d70cff293416314873dcb71b9188b9e432211ffd183470e31688802078d50289d9bab57275f2ce2410314cb89f9cfa7de3dc6cd27145ffdcc24ff4edde9893b76d42c4acc61d247021a9d30d4b5e4e217ac8f11442261d0e08439875f5a4b25b48935ee4a98e86a22c9040d4c2455986587097abbf225dc9d137d736c2b69244b5cd9f2afbb62b831f9c1637b45f0011a95c82cf6844ed3944c3443223b7cf48844c010410e0ce888443a408312573e9ddc24fce5381e1a9330cb78ef4b49a2572402460a948624ccec294fcc2565cc6f262134225146aaeaad56925445828467e69f1b2a76820ad07844d16a2b25ad2ce57c0ac03880014ee08810d068040d46d058040d45d0488469eec3c66d8c31bc29400311748814d030041502f774d2c56cbf2533134293f24a89712f2a9b86c620ccd99a52565df7f9bc20deb4dbc95d9b0cead141231009e69633eb7aa6ab3c20124f0e778dff1f32a99fabe898b2cfe3075ca44bc3626325ebfac0a4c9861e8ff18154aff99c613487a6f6705e2a39689c8d7b238644225ba0a107fa828dfe09591353f2041a79d8c3eefb77e79c84b19240030f55dc89fdeb77127632028d3b981d5db94a7c5940c30e9d9770b15d3c6b0a0934ea50d28aeb9e4ffcac27191289e418638c85400e1d0028020d3aa07de9f3758aae3b7f4824e23da031072dbca84949e23d853c2412f9e1637d9841430e69ee89ff0d5d7f731c8cfd295a6cc75250b50a34e090bc267eecb4513473f60d5e4caf296a9f5b4327051a6ed0b26a2ec94ed0bb126d8321b63bc8863c3dc10a89444040830ddb98f82af723b2b9b2062e099f45ead2e57e510dce6c9a9c9b33854e4b230d7ab0123cd2c4bddfca183e4290830734d090fab5e7ef20a992930e24d03883a92dd473adefece77140c30c58275593f7f2e5f7b60c2629f4673aa66e7fe90634c8a0b96ef419bda99263c660060d31d008030d309c3f7d666ffc2c99121ad0f802e227e7e50d992f74e80c1a5e7893e4e33154ca4bdae982319464c1921ce33ae5148106170a9b243c63b488125334b6c0c8c7bc6692c40c992442430b44e6106bda9fbac9008d2ca463b97a62ad57d41c0f332e40030b6ee6f8c7f709a9b38544223c765480c61568588146155c4d959b921cbeb9bd9048a4c7a14105c7e4ca277e1293f7851f40630a67a63026a5d41d3589c18086140e9f3676c2a4dd36e117d08842fb9924dd4ed5cab11ed0804226758e399dc62017cb27ecadb9357aafd459e604b3d533c5e093551f35c18f3b29a5fdc5cb4b1212899c317abc8006138e54b79061272fbf4886185b860f1a4b30b4c6d85c2759844e4309dcbaa7b85021ffad19d04882a9726e975acbb8cd85b0808718349090099a83e65c5e2eb7d33882261d65762dfec48f1b21a1624ac124b9643ee700392ecdc861ccc861cc30c005681481061176135b356e491a5af107680c6103348400021a41f83fe5a85bcd133dea011a4060d2de3f8da7f3ef93101e3d7e50be54ef49fde622341a3e38555a3386fc3c29fd212fe8e123029148193da8c4248fdbf4ab05cf5f40830775a885cf10f1359592d0d8015b71e3a1639e336b34748006fbce396ab3975f1310402e12f32dc9d9a73d76cac18531a34ef6a64c6ff1dcc229c9e4d8e28aacf7db683e22732d0e79e15d726f86932ab4507ebbebb4b2ca49e62cb28bbd7b628c25e624c922e935e6243973b61426b110002c04f00a01b88205d00a0d088015b48a0508401502488500502180537ce97d29f92575644000a630e7ca5f17bbee5b3a1304500a2a6a89d93d6d3fdc8714c6e576534bd198e1512494247d3eb18ed9ac440206cb4244704314648893b3567a2314c9bf2a72952463ba68106e80e2e89dbfa975ed7336156e7c6257db8a323bb6e2fd0d4fa8d9e454b7624c78ef831b9df8bedb9224db94d0dfcde0062738ff6ed91cd221d64b2047182db8b189ff2c9b7caf5b060b6e68223159bc7ecebc6e64e206268a153e3e6365676e7be3127a9949527a6c422211bc61892336665a4b25df4954c68d4aecff571772f343771912898ce00625c850391d27cabb7ef8fd0393384d12db4bcc399d9329c10d4958e5a6e936da891a321c043722d17df04ca2152db74972e00624ec9b4a41a6ba3bc594471c5e3c76348f92a3578ea0e49225af635790971b6165ae5effd4956f75317c84c188677dc3e2a4c9e31713024604427063115b4ee1352f378a38b2c7d44b7037391cc68d44101773cc5167ac529ec5308311b1b94fe5d08df325e70e9159c54e295ac8acad420cb1554a7ba3194d9c4e62e046214af25f67cea7593f9a10225dd37c9672f01ced0ee2f99252123b2fc7cc193d7cfc28c3cf0604b1d494a8bae7b5212a2191c88e1988f18120e4666633fbee330b08a65370cbdec152f22a2412f9c373eab1e35b82a49884a1e38783406ff8e1b28df274b29be5b57dd0d32f98eb7d788f9a0f59cc8ad9afc4c64fee8cd163c71ebad160e772e298dc181289fc583dec73a9d3f2c9eb1e1f3dc4d821811b79403f3337be096b1d3e78204d67cd7274cfab5d88036edca1964b9f3dab520e936be0861df8fe4ec256786a125375b8a4de9382f489ffd9840ec96f551626f97bf2650ee60fde2587d73bad0c10dc9043f17e6d26b2d6d33f71c864694fff6dc2cfd52170f0525aea9f6f8c31fa6f703bf47eb4da5482d66e28a5d7d849da8a4a761bdc12644fa8eca6d5dd026eb0e19ecbdf1bd768b25ad6f07d9a4929c9456506dc5083ea9ef1273d5e564d1a742f57d3f893a65502230368f0246dd47bbc36537c866f2cc5985ed54f2e49cc50124d716314bfdcaa96e1ddd81ebf637bde4fc9608acbace9333a86b2bf72f7538a9fd712c37163a5b0bf7031a7948f1e3bc0b81106f398e0167979e562320337c0e049f953ad6bce78921c1289b8c0bd8c1d3c3ce4c78e0edcf882b57175825bce59d332811b5ed8f2957872f7e5f04b8544223b7cf4d82183edc2b17bf7cf7e57aaabc80d2ee4499efda81773824a6114e0c616b21832d55b88544bab853c34b3e7fc379e52921e3fb2704ca7e1a35c7e69562d70030b7bd44fd1ad98addb0b29632b1052c686682047181fb871053ca35e28ff781687808e337cfce0210117f4fe00818f0878e086154a4928f9dab3cb36d9d1801b5550baf28e5a36b73c2f156831bf8ab410bd8f86ecd8c1e3779051c6ca60c78e1e3f1670630aab9f1c3435b2c413062e05cc24fb244a499139f6904824033a5c0c1f6168e04614921b50305da60917a1ff8e1e3f7664e0c613384bedf9a153499eb71b4ee8422463c79655e78c1d6359c0430c17b4183cb6dc6802277790509d33b17a64c10d26dc58c20d259ce04612f80612e80820b861841b45b841044c2fdf44c3eec92b86442225b83104f3bd3b8973d9d56d211ddc108296627e931c9f193b69702308c6f2d499dae277339e88e08c1b40b8f18314dcf08119377a60f624cde5a5720b91dde041e69bbfcb624ea2a6ce0eb6e91819a74a263d764307ae78a6fccef6a9f1f390de0cd8c88517f374dceac8062e9270919fbdee16ef8ec660e561a756dba2b08a91c944d10a366fc0462d0ed5e513265694ec9191011d3fccd040056cd0e212e2374af093c284fb430c1e6294b121703e63351089fc108387183cccd8e17cc692118990e16464c0c62c32604316975a9db9e9e7d8d4b1110b7d4d2e7b57b8974f12c236606149ddf59b92c6eb98ee1318838d5738d5619697935cc173aef04a32f7ce4884c9263a6cb482f45b19cf2727d1666745c99394c4fd84aa4df12a3041a7a23693fa9e50c1862aca9f2f6ac650ffe5978d5498fc8413edbdeeb3a78c600315859f1426d2298651e914a6dc5a5315639d078b0d532445cdac29e5246795dc0e6c940213af429f249fdac8860a3648516fe650e39bad75338a622c495dd484becc4a083644e15ffc24a7f07413431f0a2af7c450d6d920d800c55127d97c7ed6d4e2f9c4ba49b03bf14f88aacc13d8894992247736f5bb3b60a31398249f61d26ac9f2b11ad8e0849a241f2f312729a5f36d6c82bb349fe424f5e44860431399306dd88bea1d453bc711d8c0041997eeaa745ba32d021b97a0e4100d6fd5a51d16d8b044b77e19e6a6ef24eddd462516559fec6c273596131289f8581fa3043628416df08cf48b89de7e125ace4a62926a743a456d482229b6e7d87a6a2412bd84f7080b736727244c93a2f74bc6558ece234c1dd910bbb5996704820d471cb52b977491ba49f47cc04623dadfacacf1fcc2b262011b8c48361d3bab4b49d8136d2c8253998a9e3ac5063614714cd57e25f9b2ab5d861967878d44b89fcea6346fd64c794824620311f84c499f5d4ea80c246c1c623f49f5dfbcf0f738c286215c8f53b1faba9048e4f818bc3e066f256c14824a23221563ce889884304d74cadb60523a4bf1818d41b49b2e6a77da915c1098dc19d253aa277c272412c9838d40e49b64972fbbf0379a904884103600c15d0a1953dee6b57648243206f3b04024f27fb0e107553b548c7bf199732e241251838d3e983eb7da56f5dcc92963830f6ae5cae57d60544007080020041b7b6073964c4bf93161333d6cc0461ef8557b8b99e3f2e52436f0a09a58e733171f0d848d3b50567da2e6f63289dd0e6b5a4fa9888a8893ad43fa1b4aec68cf8e5ea1836ac2863a970c4d85fc104306dd230360d89843a331ebf9427806af42c0884464d0638c311c90e30c1e1e011d67f8088387878471060f8f402462430eb5eb54b81cc3574de54005747c2012a1818d3860b51a2e45f794a4b1e1e09b10a1157f4363d32120c821821c21656c052236de40b46eb86bda6a851f1289f42883470f084c0003392aa0e30111d0808e336cb821b913f35afe7cc2cc4a041b6df8444d4cb5ea11820d3618427f5b374d27d9cb21d858439f5d73564f1afa332e031b6ad035564d65b7db24e521395c0c1f611c000c30c030669c1e1be80f4422eda35d041b88440ca0231211848d34dc6ae2f569d9cb7d340367380622111d2db08186c7daa45d37f6e97a66d83803e749ce71c16ccbb22311e0c186193861d5e4254de8b33d453046fb7941197ab05106ccc773dff6c364b3c950308ffa175636efde43b031067d3ec554af269660ae18b87c62ca90f11573fe9a60230c9626f32454c893b33c146c80e14e92a0211e2d2bb6f2c0c617e8f64d5abbeda33a25c1861734c1cf76ab4dcad9dd0736bac0e55c5d41f3dada2609f9c0036c7041ab60ba317b5432670bafbbf527c9c4132ffb5a3844a23377ce63c2db5960cdbb525d5fc6b83116ceb06143e6fa5379642c8f48048c1e7f05fde2d66ffed86d726785b29689491acfe93cba21111b5568df4d92e47052126c508117fbb0e61219d59982eac12ecdf799a8e1337cfca0810d29785615a6ff5ae3a5310aa5925a37e77c52563cb00105cc7e4e52936578f42191888d2798e25ae54e1d321e4320d870c2fdd51de3a794772617828d26d4f291e51ee59e921912891cc0001a00e30006c871860f07e38c17c3878b40870e30cc580f7141f71883cbb811071b4c2873ce98ff1ca305dd2ca16499c16dd317e23e1a6043094a96fc67d8601d3713128994e163f0862183f5118930c04612927e6663928dfffa186d03098d544e5e3c93332ce708a8f8dd05132d79c6d6088cb7c7dfb41053932bc26fa1e9b33afb4a36229cde9d63eb5ba3bc830c1b43d02c3bf5573e93c91662430895cf5ee5cbb62f4b1204fc7b5f4fade4263d40e0c4fc3dff52524ee50756b2d5b0b396cd261682367ca06888cfe96c982448ce43063d76f4f811892cc0460f28cf0ca231fd630e8f1de30515d0d17e7a404087dbe0818d1d242bf351dd21277e116ce8e0cb9f743fd5bc885e5210c6097454a08b5c9825da83c64b21b752d9052e700d97933019dd92a8dd22ed58c296c966b9518544223bcef0f1e3bab04561d5c49b4fe2769f36461961e8681f0e88449ac719d4452dbaa04509ba98c509ba904517b1f0f6de5eed24643e1a8908a10b58b051d32a87b5f94b61081837b881fb30a38c1e63740d6a10899c318373361201e38718eb238c001ca18b57f09dfd996eb129c419128980d1862e5c918a65e8f9e5e4317d4222111474d18aaf82a8daf8ab9cdc219108182948228002c00023b12a1089e8383d361089f8e9c12312e173021c74c18a2e5661ac6426aeefabe2934a4eaafd1aefd949859562be127b432cd78d0a2e57a9ffcc673af14222911bdc800c3142ca48400c6a50830a74710aabe3dddd6fc65c96fd6186064a17a638e64f617d55235f9e904824e9a2148d26f5ef8f19f3342705776327768ae6132a338a840f9bc4ec68794e3751541e4f324952ceb691cee822149d74f2ac39a549080f28fc112fd9f2b098be7ec29534b38ff24de1e43cd14527fe3d51f3e6effb30931874c1092c49164ace7192e72ec142179bf82f67aea8daf949fc7474a109339b27394e8aeeb55e269edfacfa312553eda80b4cf43219bf4eea52df5c7671097ff34489bd1b12899cf511468e1c398e0572b84f408718bab004ea2ee9d51662ab5309b3798c663a13de6f4a9cb5a48c269918273393e8d3e5bc7ddee5952e09c2829fef57ea8ba34782d318d18d1e6ffa73489865fc56dff347d4f9b24eae92c92eb923ecce27baac6594d11bd1650d993aeb6b680f23aa7839bf999492a4bb08cba3c9d932e528e292720e5652760c194f224e4d594eb6fa9cb53a8840a5e72b776bf80c9dc410d445217839e1624c5f25779a10dc455d3be9132ac50c828a5b9fde4fdaca600ba2cfafcf7ed63fed09841e35aef37fc6cb1810f466ac9c0c19259691c3145dfc81cc731aaa37e34c7a3f64959314f2efdae93e58fd61528e4e95936788d0051f4ae69a72fecfe99caa195dec01bf0c2677326d2f131241177a38aa7c499eed440d16ee220f5e5e8c299d184bf493bbc04309fcc49bdc7b1d4acb2e4d27ed78e8d0814bcf9836f557a8f41cbaba7811b11c92becc3194892726e1385c152be84e94a678e14088a7c58d4af5297d83926973328b7183a65f52e6478d6199363467929d8bc906e37e9e18aed364b6863c57789e9aa8944e0d59d0502e9e3f2c6d69d0838ccae62bd91f0d865a341dd70d13277e86fe84e8a0b219303196760a76194cd5f162c65dd4d764b8d4ac464c760ca5b3acb1af37e64f1143aa22257166189a92b64b434db58b6028ee8cd69afc51f7173ee15363b494ada879210b271fe326c227eb82dd31ee3c9a1c2e1ca3677e4994705372b6d085454fdfb9164c711dd367935f2d9c8537a7eacd9d0b3e3216cca751db84b7af9050b59bea4eac60d1b6c2fe6d1ab332b763da5538a4c6971c5328b74d53814c51ccd3f465b8949ec2a12e26b97b978211963ef8a978a560145cc9ae3c9ea79b0205b353feecf172fd9ea0c6349375374858e784322afc4eba7cd142dd04baa5424ca887db30c1fc239e935c1974f32550e9f6f25446b7aa84e3b4db4459dd6c7292c0dea5ff999872dc1b098d4b6ce9edabe78f506aabb5aaffcdc84658c3092e59a563f12d4226e639297126936b8890249ebc96d1b4e26708c5a9872eef6e0fa710c85062c8935d3eda41686743a47aba7f3e2094d3a498d2db89afd90f8eca29e9bc5ab4b97ca046c5fdc9f6b361e21eb876f132ebb6739807d7e56fcc214334f63bb85657a6e35fe8609335ff2edada499d5ca0677672924eae17e362933b861234e6afe8dea21c63665b0a3fc135b6c024317db8122e67ce5ab4714dfa2a51ae2e498b2ae3c7c2e44a49e52cfe0a62f2395c5924bd6b4a9ae7a7f4db58e41ae773c52496696e61e1977b999462cc9e6c5fb18929a70ee6e1624deb0a53844b7e2569cda26dc5a2a31725ac983427cb8a725f3acafdab4828b35afb348fba2a4e1fe39438bdf7de49c5e9042b4136ab55dea8f8d2e54a42b8f6a69c02cfd96b326ffd86d614f988895ec45dcc4b51cc94eea3bac58a2a294e9ec3a56dbdb87c14b8ea89d9da7f6e445164e5f2d831a148d67c7279b02828f0d44c89ce27cc8a76314fa7f8d63ce1cb592ebbdc955aebc47352aecf7a498a9a13495216b6263474b43651e77839ad1b63d094263ad953846c4e0f93341377ee910ff59c3d4d1413e8bd9fe5bdc52fff12eea65c72f26837d95b228f1119be792594f1b6f1b0ee4a3925de96914c5f9b49a027e9d55ff6b20d1b496051a22475999e8c4d244e9deef324a571ad8104be1f5f974d4c55d53cc2ac529e9d72698951e388c7522e3fc534a26d4b8b373e1177318c304a73b4624c29a26216c169ce2a12fe317e1a452856d14f1c3d492e691241459e96381bad5c348830674d3c6263a482e610fe055d0b4b9bbecf186289381b2931954f640a61bd05b30d99ecbdc41022df9872b7561233ff412495c999faeb926d5e10f798a64b748d863d10a4266d51df4ef51c406cc1935dce4d5e61ffe1dc5592497b9b2bd77e502ac7bc244b89d9e13e9ce64dde642c5a74f960704fbfaaf3a1325bf670add9bc7492d3f55af4506ecd9d6ea62c845af29009699595fff2a5b4e0a174c2ad56ee76f24cb9c3792a45114b79d5946287a724a9648b1531b3943abc51d573d91635540a1daed8355f1baf3386650efc2539a6d0d40bbb15399c7c3ebc49716328b11287ec376c38986622ee7ca2e2a5f206475ba3b362099e4d8a1b12e53c7f4999c136496983653e7e2959be127c36e8a296d2a1b3e9f66b48aa9472f2cf13cb1e3598b1eb19b2a36677d3e0a7bcc6aeff286bd140dfbdc87ace7c5dcfa06b4a4b8f922b4b3543775e196931c4322d4352d29885b9907f1a32f49e2bfd7162e63263a8ba93dce9a6da7411032756783ab91286ea84194ba2892e6a82818d317f542b49cc5f7e810e936f39eea549985e703b55a478545a13cc2ebc63a627bae16c73c98523bc444f15992c77b9857c57bf04ef38bea9d442f561d7fb399f2b6516b8906526f49eba9a2416708f2aeaf2ee15ce925a82580aabd1add0547c088d774284a70afec968b4685625ca542876d96cea58629284a760bcb8a1af29f22f2b8583a674afc66c15d5281424c3d726ebb2325048fa8dfe74e713e8ae0fbf8c27d8974e28c5cfd22ca5cbf29a700cfea1116769b263c2ab59343c6a6b32b684e463fa2737aa4fa604a72429c25536947c12ecf827cd9c1412d0c9d8deca749b2a3c42e639469b8fca084ba94459e59aa8131681d3efbf0e33e76e824428471f1793e344e7ce10cc5e62b59712c2de39ae256ace9fc241a0df553ac9d96b1b20d49be6c4f18a3e17fd41e246cb8d3f9f63333ed8a3a4a5545f4fbe07c9d9abfc53ab870f0ff42425eff0269820ef00d3949473cb0074a05e447bc7e482d02cd55963876578b8304ae5f3cf47a457778b44cb5393b01a254b670b72b3a7e82d17aaf3b5b8fa7a3d7e4e25984f0ba3e5bce94cc1cffb59146c73672fb563e4b230e537d5dc27168ba789c59818d7c302d1f47956625c65fd0aabaec39f20bb82affc9db3b5565426fc58be9c537d31566839c8acb47b4c7bda2a8cae134e8cb3fe699a2a8e2d3529b35ca6312d157ba82cea6296a4933454fcfb35fd3326b88a760a4bb8c88b7f82be84668ac2db4bf3224d8c9a9522c99fa9bbbc8c971929c8f1247249ce280a9792580cee1f991605bfa963bf8576ac43518e6a2eefbc63515030a32a75b1963de513fd9fd027ab498c26eb095efe643d86d0fa742231a62476855e8929e584e16c72fbddabdd4d987d2dd2cf4cc8531325134ec37b69c99bc944492fa9645a0a13d889299f5096ba441a4d70cd26799858294b2c5e95251a1b7f2a5589d2be539e74b245c915259c8ab9f12fad6b8ed524d2a896cf52e79b182b49e4a37133a5962459ac22a1e6fdb4b61a5c3b2b4824d6b947d3cf55b8ea11858bb5693efe4aaaca11668ff9ebab3fceffd4884b46fce24d2ed97c6204beaada15db84f2382d023dcb139ec2dcde4e8a703b3ee8673a39859d12b175ec4db9ff728c7142445f5b52e668fd191e3ac41661154d0e29b31d32045aa1ef92501722513e4ea667b28999109cacc13377ce3c130f62fbae901f6edaea1504ebbed1c4e0a3e16b20ea3c61e355f874290a88e592446aa9da96fa877289966297462ea87e483c6dea54a51e2ca60fd54b69e793e2e4d0f081feaf91f1949d97b2072b548e116b99b356f4c0a6f7d7cb394985310f6e9233fb98f7c9ed111e08b1084f4ba20916a33bdc298772f3b6d854911df8124a3d7deee4724275d85b3cc5f384c5ced3a14dc994a657b6be9f4382fa469d6cbd6c8e1c28f943a714f9ad76c7418ba29abe73b3d78643153a4ce72fe63b7e43a2874af6a72f63af1bd0cad99226f92d54d306d3a6fcb24cc29b56d8a094dfef5996341d5c4397525d2eb152a58b6a587a62d37353f4bd347c967be282c614ebd0a0fa499a4bcef9fbb13324f98e7c753a1bd5cce058f40e1eb6c6f365a093943945ff3cc12743493368b6e8bd274c6378263fe7b2b23a411283a59f83668e997aa2303c267487971018ce37e9c9c8a81efd021d97e409ad34315e387dc99c20a3992b5d38fa7e969c3f4a4d922424128941245286088a175c7832dae7cc5dcfafedc5165aff24485e5732e801811178a1054c36e9434e30a942be9048c478918524f1ee4e4e713273c70b2c147cc3495e76035e5ca137ef150b96b4fcf4b35e58c19b28f97c39e6bbb75e54c17c9ee52262c122d790157841853f06a98d5bd51be90989442211304040c6ba8f1f65a0c08b29785379bdb14b7450c00b2968c08b28dcd99e243937099997175038a355563c85cef5e6c51312cdd7976b7ab6b613f4fb0cd3494a4c52b49b805c745ede4da5a82b134ebdb2e994c6e6374b58f6df44acce4efc8a1256bf987325493e8d79124aba37ea1b7d766e44c271a399611db5acb62394c376e61e934bad848cb0ed6849cdfe9895494824c2021f4e0602bc2802b7dd2d65ebd5a31e193e7a3c1822c881811cfe8233c2d0e12ce0b11ff8f50c44222cf08208fe9c7049c8f28bdfb91743c02d8d055fb9aee4792184a735db889d1c56e57a1184e20510bcf801ff297ec66d6b133bf5812e9ea14e2a786d6a767848bfc08c1d60782047067494c08b1ed8e27d5207139354375ef0a04bbbde9af33d1f3a2f764067467dca60f142074d8613eba3e887ec7c2e38a98c9ec77f63ad8b8ba3e424caf79c68c6945b6472bcdacdb9daa20d1bf75765ac05e3ba62de31ba9294a28526c79578e7b652d1c20119dc9845f1a7366ceaa8d4ad0471431664d8bdf093f6f9ac92e3878f1c3a1cb023103762d107c98e19de24692ee6062c92eddc52a8eb4f89d11baf58eee26e3d7bca98a219375cd14ac5f767af2e4bbf15c7cb762764500b75eb062b12724cf8fb2dc9365b53b8b18a43977cbaf29bd733a707375491f579a9a58c27afe95424f5ee6a31a4c4ddcb0f6ea042b9f419cbe1aab7ea5360c95693f49231aac6dc30c5f973537d3c75faa68970a314e9645b55cc9f374f38448706cad8518687f48f2503004bb8418a1ba3c8c2d3ed771c4bcb7c0c972a5b0ef5c0a2a8921edaf24df6b2bc22bb0a0bffea30ff0cc7400e1f1e52c656c01575254990d24a5ba168d8e9d2d8e89c151cac28687897300fc9988457b145eb5f7ed3cff3bd2a38c1d259aed7ac686a07385261e8f0964297d4e13e2a3ea1242c53be4bcd491ce038c57e639a25b9c76d9ca6303cefec9c766592523cc0518a73484d396be7b324896a000729f2f7fe9099ab3911e1188517e72cc96b65047088c224af6e6b87d911d5ccc0118ac2c79252897a6692f11f384051dc4a9dc4d9df4d5a0103c727dca84935ebb2675c3d51de1bdfdaf06db58e0c31c6e8045f49ac9b2a21638b1e128978000727682f295696cb581c9bc0a109a38f54ce497f2978161289ecc091892d5e8cd8933a211dc08109bd4cd37f4c7125e57b89d35fe5134e3a4322114b9457e953856bd84e7748250a2d26b7be9a64c594c82ef26a723dc99b7242229110e09844e94e9e9ece581279fa2e79d4e2e2538c4462d12413644acc122b1c90e83c3579c84080e311e5bb90717b2d273bdd11c6b7122cd964fa0d7a2336f9e7ad734aa6c40f23d6d73539ff36774367115cdad4f09b62be30e11f3c3c06ae021c8aa0a44df6b0a7aa41d7445067219f9225c95b1a44247dcc90ad394cc54987e87248af13dde03084f92aeb55bfcfc478fb29c4a3596d3c4569876547f310430438087149f1bab47d5bf7c459b028c031885a4b52324cf41a739c17ac0640b0e3b88f1e3fca30050e41709234bf66f1f2d16347e20884f6212f7c2cc43b833924a0830c1c80d02ede3b669a0c7d2f878e1ecfa30638feb09f94a424a59d2109c0e187f373bb4948542c31a70f38f850e9b7491b542dabc684f0d881630ffd599a8a16935f923afc038c21e0d0c31996ba83798e49bbffe8d1e30338f270aaeb3013664bca193c70f19349ec4e276d4adf819eec246ed4ec61826b872ea989b9e4e3ca73b20ea544589adb998b71a343df57b92b6b3ea1de9ac372a29847e70c337939381d26dcd692cb799238147d3c26d94aa9f8e90f70c0e1abd14d1634e5903fc1f186b4d5a7eb3c555d7b379c2f553586bcdf5ce26db8eb438ce7cb6103e335b9712be4bcd86b387fcec94b32ac86e44a974ffe2ffc4a9306b4645d194d6d51dd82862aa3462ffbda7237cf4064ce7cb8643daf55080e331c6347bc9abc61234338c05186fb84794dd22193894e86c3e72c6163593777d6078e31e8d1296d86c9a5b9490c78ac3df1f2ce30301f63496ccf83a1109dbaae515267927cc1d1b7ec0e2727c13aa6070e2ff8ab2126ed962ef82945b18d492b896a73a1ec396636d94c1237698b630b5976d52bef3f593e80087260c0003a7cf4f8b122c881011d3bc0a105cdf6c27530694f4c380b76a578f7715f2cdc26a58cfa7f8c31ad5730495bec3d8f66f2c658a17829996931a13459aac0c794dcb7fab1a98c0acb487ffd7ac820c3026ac03105c3b9f5a6760956f24b61cbb549d00cd96f4f147e4dd27dcc490a27c550784bb47099dbefb1fa13dc2c96379bd8dbc5dc0975aeae4fb97c667769c292ea39a3e61ad992c2842a666dcf67e199525bc2995af6ae235202995e2c4acbf2c97a12bc98f559b765010f31ce88c01d702041ffcc9ffcfb3e8217e34bf95427d52487eca0030e2360e25710db8ca9c7f245782acfc6d774255b5689706c782649b70df596212476b9cf8652fd4c08cc091ef2b9673d5512178c610603c0123882b07526cfead6f17e7220e06b163d4be426b7f507bd5eb4f714199eb5f9c08ea9b72ae75dbd6c8594e1c38c761f3b9c0547023fccd040007c80a3075b48cffa13f3cdfd8444226398f162fce0e163bc60c7f7d8c13b660086057c70e0d733904304393090c387bbc0c792f1fe8153e0e001b266514c68db69fb71ecc0934377879aa4d135c4a1032a76c9b1937c9ea6d90e905cd826c6cde96ed5ef1f128924082ef0b5942ce93ba9a72cc82d92c7ff52988e17cff3b638c63093da53c911d1d742cb31f64b8e8e16e530265a2a8deb64726661d6a85462cffc981495c55272a84ac79458a4596308f36cd2769282851ea3a535ff04f20abae44e1ffb7153ec9009405c01d20a105680ac02441520a9004105c82996fac9b01c3d668c38e405653400c414608094a258e2febf8798564b482f045c0c1f61e400e30cc74048195b811c8f002105c828404401128abc5536b6c3562ce54141869ccf5eaadb96ee273051d793675cbff2c813c5935c67563ffbe41331403a818ee79f1c724ea3ee9c2889261fe5af82fba89b48b0d1d89be731e9a568c291da144f281f2413c5b0196bea345fa70e01c1847eb12693d093e1fab9c4976747bc4b4fd47c1dc412556ce51e718d4a165525d81dd5ac52f9ea634e088412d6d988d96db2501a0e89444026c149163c86cc1b13df21c60e2580488268eb97133f73ba135f22804422d14a480fbf2327fb8644223f0081c429ddad76922cf3cec903904718fe39fd4458ba5f2c0610479ce264dc588d39fb6223fe689a317c95a79493308030e298ee244912be345c6b8b404f1253bb9ebc993279014411b8647dcca82645893a02904498620ceb3985150411df06bbec9a673f2c05e410c9e7342a57aaa9cf0a89440e0f07411b400c91da9bd431fa335bce844422659c01a410b46aa7689f192c193b7afc0fa700194008b16ef68dae5ff2687856001984d9267f8a915fa7eb4e01441059b42bab09d3ce5169024820deac9dc47aebf41425800002d7384136f64c877dfe70ce187fe65556b12a7ed08377aca871e39c1481f4e1347671db57c7524807081faaa8d0954cd65793fa3d9483543e3359cee3ba7a70bd829d7eaa943d2f1000c983514dde9cd8ec612ee321a136675647e8c7fce500e40e9acc742739c9fa71317000b1c3fb61fba4d04a622e31241299001b40eae055e59cad4e103a244a899a69aa1301640e4911e5266a789cbde40191431c8c258ce61493a161952f80c0a1acc184ee1bb1b5f8435200f206d7f2c6b4615b71352606206e285efcd292b2a38c33dc053b7afc1003a40d85f1cdcc65f2c99e3936f82e25f6c965c9fbacc178d27676d9f897581202a206b6baf723f27f4f4bdc053c5e009206bc53467c7449c9c78444220d8206b3e8699de4c99bbe9dc1947e3b77bebce627cc20660029c3275d12b27e5d2a3719b202103218d2f14c0acd2dc90bc818e858e9ae28a152be28881812dfee927ce7b53e1648180ab99a97ac70fd11a70002864cc2f7cadd837cce1740bc60de13268074e13ac1a32f49967d72b8501acf795ba962c9311812896ce11213aac2f698466504102d70f1b2f63d4f867141b2b0a650a2949ce358af068285b4d26235de258d7f8f1e21631c319c0072854bccf4ba463a49621f12891c01c40a7cf0d9501136d6d12404092055389c97ed094320e487182328638c311c9023c78f19f80f1e3d2090c36320461140a8003285bc22bb722c5924dea40b2052d0d34a305bcf71b4fe238044c110f1d4e8fe4e6332047254200708744840082050a02aba5f6892077942bb1596212c66e5392700e204422a95349fc1739a0ca409e87f3a51ad6b10265426e48969244dc6f2d1a301204bc0b25cdda492d537018812eebcf6d1e9fcbf630e89444092d0695cf8b42f7140c78e1c3b725860092048d8d4c468f92b5c4bde2e00720453bd546a7f3a29561f041023bc715a9f3ce684ec2863cb7000007a005284f3f633c63d314eba730042043fdcf37396879ae8e10064088cabc4c50f16635516c2714b922ae6d659cbfe062041e88470b9f8525a524e56200708744840070d408060b2b297ecb6785a412980fca01777adb463bbdfd611407c70872c9352fb9b31411f80f4e0fc1e4f6e1e4be52b203cd82fc79f7dad0c901d6c0044075fe4c24b9e799f24496aaf784824f23d768494b115b82f70f1f77a2ceb183d54fc849801060fbeb84569423febc439045ec60f3124f0852d5449b7934d4c9249f39ff1430c1e3dc420c317b53876dbc9f406bfa045d249b9e12fe5b38e3f8c59f8f1e6e46a5b2ce73418be90c566924ac7099b2e9a7c2cfecd1c9e520e3e96db2e7c018bfea35b861c8b5591f9e2159c24ad5fbc6adf5a8e2bacf469f3cbebe49cd75678521a938b7812432d168851c617acc83be6289299829df059859ee94da30679b1d6bf50c5fe19bc5389713ec3938a524531b1824e9d4679067e784ce10b54f4f1ace4133d750add2a2739c85b3690a3023a92f08529088ddccb1e6fa2a296c22f2bb9cf04c993aa26457b6197ffadaebf4a4661dafe4aed92a74dce4551d584c97d710f453909f3d7974992a663a028e54c2917e261cdac4f1c196ea67f53fe9c224f6c269add9909a21b4f66f045270e9ef33b69aeac6acf09d445bf921c19ce4a7e136a8961334b43f35f471385cf84d598a6cbce45f045267091acb74a1d3c9e184c1c4b54cf0ea3ddea9613beb8c41ab6e4fcb1c4f24a1f147c618953a44e924d4e315bc548040c00f8e08b4a64e9a77c4b653ca59e12cd2771a66b2e7cbde8e38b491c6791e13486dd664612a54d139ba4892271e612f6faa5c43cbcef1f80c1179068bcc34b9c6cc8becc23ee3ca2963d86924d8c99a231be7044276ec133423bcd2d667cd108efda3f562b0922ff09d9d1811f5f3082fb8dbb8cf166ee2da22d69ca84b874c16274a9084df0aa9ff7f413d24ec479cbd6f2af09de6b410453a231bcd44d4c387ff4be800c177c7188c2e74e48c99ae77d43acde95b2654f32fc422853bbd6eb6f1d3e8448d3d3de489f24d919841fbeac4c644198bf76b2740e9ac30d44755203e2cdf559bf12fa37fa877b2e5b9213dbd3523ff0d1fab52e9b654abf0f58d5b7c9696ddb449f0f64cc93d462a7cad8fc1e6ebbfef0acd1831d673a52c46a2de5f3a0b59494d484b83ccbe301db649b57aa6227f777e8926568918cfb63f27658daa4688de1a87410230261180a0582a140180800886a7c2600831308303044208d0563e1a05cdd7d0014000044321e504a2622261a1216121288c3a17030141005c38030201008864381906a10e76a62e305d72d1b211327c7bcf8ca84c08d040e1ae2cc94d42194d2169d7c484dacfe9d0c211dc1acb9e826198e76c5fcf9113288c78850643b891854103900fa3a02b39628ec340200dfa098f060433e91e90e826416daecd7233056d942e0c21329155dcf86002ab254246a4e64b4a5ef1e5adfefc5a05743283ea1268afc7d1ab3177c72f54f51292536d601df875dc1dc97399480e956ba1a712319615588a18a904dc18e27617a90ceabc86568f6750091a4d555bb7738da78049007eb138b9d0e6a900b8f98603088353bef28bcbcb107ea090bd91aa299828e8d69f14c89679de6c05c0940eac1cbf23859215fe5eca9b1003d2eb1438500e4568ea26e24e451256f747b71ddb996598ce06e344e38395cd7ede08f7fc3bfc88860606580a52e4da65449c3303118afa58ba4534e9c5546b7d391e0a15c14cb1d476cee12934bc4225b1d0e49e733bd4430bacd7b732ea0c89d2f54cb8d72f8ebb9ec5e70b0e88e63cae9510bd123d2e4b2cbadf2cf8796775f60f72268121323a01d530640daa954d1646f8aaaeec66f60e4674e544bfdc8097793e17bf807eea8e8c6fde7a978eabea8b0fc3f6a1aecd434ba0cd30dc54bc1e5892bc2d35af914c130bac09ff7274835308b64ae16e0da47549690e013ac02184ad4ee00d242ce8847342496f6bee0576244e99af3373d976cde4e19a42185693368592e5645922c865beab82d1bd969fab4064174188e4769d4784e41c19b7891cf706e88bb4ef074d55908754bfb812dc708ac3e8a8267d789a3b8eaa314f1a8446acf90fad7dd95177a064887b30f7a060985cc2a70ecd37093b53f64623793ca75d858fd164bbe9445ec20476c42209ce07d99d8652d5fed200d3e17f5bd66a4369de878ca3fa5efe59e9b32d0e5c11882605d8e13fa04b3a4660534a82c949331f8380fca014f1f28dac9aa8cd39fefbee0d3652a7486168c7aa4c92a71efae6fead18b151bbfef42d8a267b70328bb2b140acb3e1cdfb61e231b53532b89aa647e440ed2e193409a69e5b122dcce2b93b34cfb9c578a69b4a80685d677d8e5638ed4e8a1809f4ea3e011c881ac2f29e7260651cf20eb2d887a0af2f532203750c1bce16670f90e4ae04db83f8e1df1c65aee0d177aed726fb7d8fb167bb525bdd992bdd39642d416dcede5b4b05eb90b51d61e203f840e462d06993d7cdc94560924d0735312f12ceaa0a928e112dece640a1cc13d3897750f18a60ad6aae10e3b090ac954c4d04121d631165cf07b6a321591a928314da4732ce4a37c6443cd4547d7fd6a3f864b373efdc78bbe80901b8e481f12d7c848378f19534e6fbcf6f26f8ea9386c8d0b538690979f56c766ec21de8d715a966e6a9b84484d1b1089261bc8673abbfa3399f9e276a09b88110a52f3b0ee0ef1849f6190dab540ec392d6d9bd52540e6ec70d9097271c9e2a8a0abbdca200e4ccd948a50d5f0391881a23639763936860c13978ebf162c6d8cac2e907f4dceb20b0e9b36231d29734479da57d4479d9632ea458c7a844b9a7abaf494e9094403e569557994330df13ca904a7a4e9a8534b5230c15ccd373726ad1df80331bb474bebfbc3cede504e0ad936bc4cf3398167beb159aaf66c2998264d9294fdcb4632f895f5d2350a142e2868fa0d324dbc962bd797ccb6a0f6b1fd117af1b57e426ab14a9055775d6b2cd68062af9e97f2e63e6f1cb0e2fadc98d615c9101df28ff934fad23aa05b4994edfbe2d7103762db7dbd328553add2c39c488af4496fc0177aa22483907dd063298587c7c37ebfa157e335e88da74c503d6ac4ee9dee63a4637d14a592604c062e0d9426982abe230156c154ae5262c2659e6b5a30861baafdf1f0c56567b58e10136ce7bbab96b2ca049fa84fe7d9e0701471696aaed3b47794d5239463c769887fd2ac4293916816d87a7fbce8855265bd30e33c6ea32c544b698b2f559b75f957b2963b9f4d707bca2b1f02985a8169b47b57ae3846124b0f67ed003496c938a77632fba84d8cb29e4efc9591da43b0bd1945852dc63da9fc02e98a04dffccb81cadb6023700bfdbb5c95d3380d90a329f2efc3bbf0f35163c6ef39a783c6e645aa8c629b23c586c35161cfc817d055ea29b413cb6a9dc54a8853610897674357f0af27b2420d06c1fbb5b35c671fccd5d54de5683b59aa3decd1f034220ac33e1d4d4ae52d008a2013bdbb07d9a8b99f578951316640e3d447f4cd3a39c7205a3c007cbcb288f78a4a0a392ae9dd3d21cef3dc9987e8fbec9708314ab025dc1f5e512f6ffa842ecf7da0d129f530c728680b06c702a24c75d51a9d75e03d67b4196828ac2de15ba3b655091392d6a0dd22319199df13e63d36d728cb58700898732dc9fe68703b3136f36c125c41633387f9f085a61e05d2b26faee98c016538856b2b2a13048de0afd90421213cefd0a40d744b15a5f5d2bd9064fd06ed1c27afd38c4c9b100018091f3337c046c99e2a1fe362457afb949514f03e15a40d872358a9f1237f1fcecaba7ff3219074317d01495732e506fb772e02c551cf6e4b221331bf0a50af3c0849cc6e6290b90d47f1c1e58f0dfe3e5c8226eee096798b913d4967d90922b0b1f8d5a9ad3352a6c6b4ce30f5e3bcf797b1353cc5b47f7423219c0fcb1c82ffe09e1d324dccc39536eff5255021b12f7ead9f24584a948226f91280912a3eaf7f1d812a150b2609b3201b23ab058eeb858dc9533a6098806fa74c0d5c031f708db012d5affe4ac27cd68d97e9237fc28f5239ce6999c397287f2f55a2174d7e19e5480bbb55113ede2a7d4f8ed1be0720d97234e55957f4df582eea4d036703239de1a962b6b33cc4c4fef6d49b0b75574f7558ee1e3923deac039e443daa0b88b59fcd147deb23cff83f31790d016b49850215bc7783e8a77a03bd6b0dd29c1c4caab1ccc93c5302fcb2a2939dbc9956d56ab4e14c1a81850b3656498e283ae39e4859ab8853369ede65ad57074ce7aa4a3acd005298f33d9337ce78ca9a80a69af86791840850c41e0eaeaa2120de120598f0382fd029f082fc2446deed69a4a14bf76a38bd61d80f78f7a203c13f89173a0d03381c5f78c740566da12f0d00f485dec61a1d13b86d8594296ff65c45e6a6a7dfc63b78b47909eb958151198a9d32bf3935e06892b4db3c2d56ae870d1b8fdc9e31741cf1255e34fb0c7e776fe1382cd362ef73249118119fa8980f7f0f11c37f150105650e5c465b971104768adad7c5c20a4fae3d10e624548721590e534a72a26ae95bb52ca8c1505a61d82de060e87a84d8ea3792936a390d22ecf5b0a7a680ed19284d58e789a9305034c8721d2a719040a99c65c9b0ec959bb917905211a5db38593c3154ecce7bf3e274864cba75a21271a5da42c1d021f355c2b0a8c6d4e4a48978f08b34f0958d9ae8e6bcf36c04016d3dd24c2cf92554f06d02dc910c49152da55ccf4fdb4ba08875db45204c18bb6634ac6136a1508a121863e862cfa048239922026fca18e2e1814670922a4820318203e2fb22d3ab570a99353e95c6a8c52f305b2021cedd90753b3da4227871c27fa741a4e2a0c7c8af45ec87f18ca751730907535cbdabce24dcb24c027409462f61536840981f8a0c44389f323df77880f4f8cec41e49a137d679fc124ef4a2d3e284a9740b8db0dc75917a7e04a9ab6f6e847192bfc9929fafe189e3f900b023fc6886fc29d868e94104307c86b0aff9028adc1d8ee179bed3f9abdcfc8303c70a19227f76083da38d99a0455b102d209045b8dd56b8fc04bc1c941b2f054006ee841d85c31dd41d152682952db8f9fc5d873defe0617f35d645e42b3b9ad73d08bb5305c7cee13668202874d244a114d7f0dcb7936d5f42f5fa61a13c47753c60999446d6d570addda33258bfb6c6591fdcd86203d094ec8a04b768222174422f0a3ac3fff19d2ceca51297c02f338de2e00f9c3b64f0f69c9d666c352db68fb4cfd4ab4c6b06dc19bf89d1b5f1229920912acf1540f176ae4c4ab0b3eb1740ffcc0765f35046b5b420a6beface53ca3052889b04d7a1417486befdb5580e33355822bcb1ba83bc6b4408aa61fa2e4119beb7c4b862cf00fd2aeb9a637ac9338de99f6b31ec11bb2d311737cae334b14f06a841e08788bca1b20e20714bd4d67029ddfc3a31046a61106ab071f76106c3bcbc6f0e94dbae823d528eb7259585e792990cf0ea8892d9564f63115e07774794bca301f7a905f6fd458106901d02e12b549282003d085c624f648ff63a46ef7764b451a65488d046fa4843a5f3b50b4672ad46ef02025b21caea5fb71470efa3e6b186afa3ac6695ce0ede2cc6e4c2de512ee928b078f9ca847be35ba67ab5156b92f5f6902199c5aa3417e9255e58f564029156f38f66c961357dbe53ea14f8053b4fff9acdd63ccd54a18609b98f58d4542b50db8eda54fa756796fcb44be9318d81077f0f3f229cacaea2866dbe9a69d1610043a3dcaf9061eca116f6dcfd68b4df4f98b41624d9766dc981599bd36fc5f4d3c43e1954fd4c310e583e47f2747a9ad9ecb0a01e34ca9d3bc6cc7343bf818cd11e3256f12211d38e346ee59d735dc49f148fe41e4f28d3b55c406ac94ea0a4c548339b225096cad46fe58b2702043852c0f8260be559452012cc3efb5e484730c0720134c6a50b95e85fc84da43781c2d63743eed25f7269d34a5c06a5a62903fe0dd70469929e1f3428d35896ea423dc50dcb9e0d724d5f894853bbe29a99bedd9a2aa73613d8a24e45ca358f2f107809ee5a98805f23d4981d01c7e1c0f12f45017a64e7faaf1f0b83ff0b7a8d235a149d424f448be62d48ab6701b265f3c04a994b002b169f4bc8a3dd1043b7cfa33babfe36d71905aba66ce4fbf52bdbb475b70ecfe5a574c280198035e012549fe8f13c35c24c98b0c15773aa207d4ff59d74917897bb2649e4797236637bb31be66d98aaff1d29b79d648ca4fae5a8cdaa37b2341b63669e6f3e1d32a73f1f668a2c6464b6e81c425e1ddab0eab07c065fdabd7c08cfc96df6366670910cfde4f6f4d9587adb610142a753c59e01df713dff10cce8dd77820c0e6cb7d7ba6129ef2236392e1ad20dd438e458febe4c97528335454bbee476210080ba5715b4af00359e015cbd55b62d8e4d36ccf502704dabb01d07e3ab536cc854ed3bd7bf348defee9125c478df615b6ebe3b78796cc974c81638e7e249338668f792c5f60a7c4e20770f6adf25a75697e168ea045fdba81f4866882837e9eb63c567f53524e353b643e686a63cb9e9b6207884a0722e53240aa1ff98f88c97cbe3249801d18205ee68bb866e5e12b53bc4214beeb766cd7509fa4735e8ae6d778d9488159526f07fb071ded25919cf618a08c1cea20b50cb84df45fdc89ba751489ca6c192b50d1ae3cb09285dee383dfb411fa20e9447aa935ffbec3bee8f151dcb9be787f724c639647e050d023b9ac477aaf839c0020f27a21f049f2541939936aa7454e39ee0561aac2cb2ca1ef8fef7c9ac5f7daeb6e0ab12d51c0d2bb8da5601818f0fa51f41835b568c1eef83c261120748a7a4e76df806031d6943661459e8cedf493a77d40121665e8406aff8c97f68476585db25c6b40879c405f057139c9dbc2a5524734d6d92049dbe777819a16008191ac7d6dec4c42a14031443557072d959a3056435b9e4d2fb821b29e2cd917b3b8732e7180fb3460fd2498daf67d27639fd81ab129eca6a2529447f9f96c322aa953dbfb9d1fe4a11033a82d2cf84c409347f3ae7f378252c1f125143c2f7f4b92606410da9f08eb301d7c21aec7d193aa98b757f7939c2d6e34252080a0b4c60662bcc9ee4d5d583920d36d257d4bcada6ad5531321f17e9962f198de578e6896794915c59826ca580a1cee5cb2dab1e8e508fb587672ffae77e8c969c68a996b70d4ab304b932ae8c1ed78e0a90e558389c43fc49c240442d3d9d38f73004598eef51a0ea443ab29f2be4a81317458276782ce1dc3c730dde153823721fe162decdcc3224402a66d0450c8ded923924640d37f7ea60698e46678cb6b31a25d1010c984e39aa0e660afade5a84355d2bc46c48f2aa1ec3bb13fe485c7a6885638881205c510f1224e1c2bd85ab19b637e4d8c38f6030913b73c99c9bb8ae73a15b7cf59213027d4db348ac33b42a4a18d0455966f231381bccb7d96ea5ab8fc4ac7670cb4218ebb8d357d1d257bf315632cae2850aa256c9edcfdc6abfcea5ff3011329dc1e737c099f784a178b03ea3191f4c9cd82a4b056b180e4b998e2d047c1032af3050245b5b9eeebe0ba9abe6e027f0609ef442f5d88aa6e355da4664b939466f0cba42e9020ae84024b982438ea10f93967e8a380aade9be8e41fa953144b6d0e58a7fa85ec24ce632bc78ca3211ae0c4ff32573a143f3aab00e93d7d761c92231b2a2a74c2f63ca797653835ca393419c98f4650baad1da2a56b194e1800ffc42092616728be0ade4874f804e31180b39925c9203d2ec1af2204011c441e3490151e13c16b7297ddb103a20c54d65a6638796d2229443e228b6ec4b0a5d53a247aba7021219375105566a25920912847839975c8c37ea97ea7b4820bfc8ca9d133a6fa936d676127b29c727b108f2005a3c84bd1fba200f9dd2be4bd74aa95a815967b2655a2184e5680c4c6045101c0d5270193feb02ebfecdd4355090728272a6bb8f03853565f9b604d8c5614cf12d3a669ea2e9ae1109f888a6b5045a3af05e2a418c1db031c56110e181f867d7707ff22186c2d0811a706d052a97309b3a95d2036a10599bf5bfab1822ee3e4c54a0191730ce141d2bb65e76022c7ccd3532d4764d5c4253d53babc01d0ac9c93f2c847a1ba9154593db78bac759a578689e971ffea31c4ac8d770c3a95385bc7d14f2fcae8a04b5a60434cebfcb8d1f3bf56d79981807e79b67de3a20bbc2072e47a878a623732ca9ba19f48597c249486329339c671db51e640cf0fbee7b9e01c2fc70a32d95019cbbf255dee825b49a59b0132f60a946545228b3e982b33584998aa99228a3334cfd5d6cfa69a0aae97d9bc9fcae8352690f9ee564917fa214e365b839b86b2033235ca087f25d8d476143cb3ad6246d2759e481f0d08401014db3ec54e89b058cea9112501f6d4e999aadc1d16726a3f9f4ae06c42ae07e379c0a2d07045926c3de871aace863b55f87a7676fafa978d0d0eaaf112f98e9e2dc44025fc92544dd38a6ca291a5a0d52895607a022a4d775ca030ca4aa59fe64780a8bff786dd77af6f152db82ccb96c0bbad7879f511583d8b6ab97f3c8c1dc4a2263154173970ebe3c5a08c6965605b1865293c6854b605bb4430171bc53750c0bde1bb62d08cfd010c7c1c9fcf4e443edf91616456cd4391a2803496d6f8c2e1f153729e7594346690ccdf5291aa0064df8d90b2913f8b0a9bd38b063608b614959846da0ecdaa119825cc823585f557044cc1a285d6f1b4fb77f8ad8116d3fa11d7fa80e6112d2ea6407fc3ed8af5cb434d5b3409f70f9e751e5147ba13de84a502abdd683207379583aeb29d7466971f2cc93156fe6434fd136bd81c33719280b458e30c7db439ccee27f5c6cb9ba4391032e5f708cc04598ce95ed70bdef4b537c76ed6a88334af682adb91a2876a9cd70db3c29bb0d5c833189215d420ebcad8ea0e0be22e288e8cc1db074b9372772ec54458d25b18b3fc8bdf7a4eca871b2355537fc062197cae18ee2f989cb89b61ab9111565543df92fb31ec9988b8637cc93286a454dc226e3f01ead2d24fba1b37937f64db88d47243dbea33982b31123d37decef124a862ce55810eaf5771b5e702d5290cf96ec9c4243af5da908e3919ce0ceeac5fa3b1efb22e6029b2521b4dc016ee52c9547e547759455cdcd21b148b608b55022808f990218f1efaea44458f3fd36116a4e616ba28069e2a8d97157265b330567f7466eaa93184cab6aaeea0ab4eee2db981f2c1e720b9f13803d2395e3644d321540c1bcf0f2d8b197b588e28cbc2f38344f40bd34d9d1c9b95826897c43dcacc64529a9791f8a4a494c1d8d1816b4daa1458c9bddff24ba29e41db7c1877019894ce8e8b086b83b5241cb249ba50cc8cfa32fbce8d085897be9ca1a0ea48852319c3f60981a029ec1383833013435fd0c71e2f448097cbb04460ceb023dcc57da6e449dd1ceda35d80060dab3b5cb6234fefb8c0844446e33858e83f5702c2999a82cc475b7a28a259d6374c2e2292ca2965c7292fc7ef12fde28e04a26281623166ee91a237c92bbcae19075da3045cfec416ba5c6000d5b9abd9984765a5f0428b2efef04b791284190a53b6c7ae94b119d65a3196f65574b05dfd29ef2ac0d58a18058ed0213fb840640b5ded6a06c8239aa66c987c173f5ae40fbae9aaf3151d0870876c30109a1cd0ad791af057090ad6d2bde43cb095f4a88e4e301c25cdcce0841557a626dc31c6e514a761dd75247b8c2f3658f32fc12fe74c89c1b2c3c189c1cfe64f1630e1917e6c13a445865884042b11e4b9181b79b1b2fdb1afbb66608296f48f98f139579483dbd3ad825f7b0edc332d9249830cabeba1e3bd05885a8303aaa41a8fe0eb6b7af862cb408ddc76910ac4f3cb5c7813ce13416034b3e0ee8131062b7dea333db3e9bea4fe47951c57922e89d403cb0c722bf58b3cc5b9b887aca5500396c3f3847c0354d102d32f27a4f79ed405939a3487bd2f58e02da52e238ab2621268e3782788e9ab5bc19b186130779a92003f92882b7b2cb14ed930509150561026b16f65fba791aa483298602bc331aaa45327e65b0313be4175ffd3f9509123367f8e6075878cd2140278d0037c452d0092d1b2c668688b3fc900e67b0e91b46be16cdcd7edcb86ab26a0887a5844508bd7b49b23fcca749e4899bd0236b572293bf93fb43a0177a0f01a15278cc0d1da2b4fcb08798c73e4c3c86078eed4ba6acb7980039f3edbfdbea3dce951c88940fb9b64e0ca311423f2443328be296d46aebb6643facadc209f4ce857b0f479750968865441090c8e743d89df0207dd0b589e5232e47223847e8bbf7bab2b8dcd4e9c37eb2234c247f9857a229ee0b258f45f0591b3e2a7427841f5a5c889f27d6db38b0524764fb8eed8061fd9736823af47f35f8f98bdb50fa77c1d2c3d4f02a13ab11cfe06f4eb8c73b1bd757b49cc07dce24714228afc9eae6d730cfd14c90badedc299895ff69b01b4b362a36693d307e3d5eaa8ab52d66b1cad28e57f011d2c9d6c146da6e1754b6b36661dda3f3b3921e249a348933eaaf8841c98fbab00b54a403e1b635a88b5fdffac9dea3f0a54f28685d97291a18ac167ded10b9e212dd3a45c34059b4765cd4bb51d43f53e7afad1633cf21afdd4b9dae3e69ffe9f83c5b2f1350414d84b73123272d36cccd0f78b5bff95089024e7421b632b9bade492080f705f7d31f018a9b3bd10da6daeb80c3302543d73bb118aa60f6acf24f5b016aaa12f99f660f87dd2be59c83394b686ef244e668c4a247ff95a0617d56cbbae0a7a4c791e72c41ffc419a0d0057ce5cd618bb91c85a2b19479aef8b9f54d551128c3d8d0b6b9973e65873fe9adcf134e4c8762b5bf0bd9e4e889b0cc825d710b899d66d71efca6897d2b3d407cdf71fbab5a72dbdd9818b4cf17ff74ec97f9b251086c3f40b7bba8b4f61f11244a5ff463322b409c1c58e06df8b9ccf7c25b8bc2bc92c796c71a9271490c395a96412c73097dae31e23e2803d427c81b8f167d2ae7a2bfbaaa87068c95a11eafe6cbbbbf28ab2b292b73e565119d499da812e131a2ecca369b0b1d2228d19c6e1357745f7d1278fc92b5fb7a42f95060a6dba62995268b5a87a8914dd11542e15f93cd61b893b639323527475977dc24a1206876e20f1ee57d6c8fc5f93edbfb1703cf69cba5c88e12e133a9aa1a615b7a195bf237f3354a6a20528b0ea8f5f02db0d2aa0c6eb9c090a0a4d4960c54e799ef3dc49decd1abf18a1b2bab65d08ab7dbef26a9c1372aef23041f9ae59c1adc4351794e2e0ba5bf43524cdb9dcc9b024aaff40fd6ba4d5f86f5957eba3c7502d9dd00507bfb16bbc78ee0521ce6e38447738bde91c594861947771b5bcdeebe88a2fe6155cc04e417f737be578503616e690bfb0061b23286bade1eb6e4dada902c8e87acf2d7d9beec472c3fa4dcb9b90d67a46db71f9fa861de1a014e52c0f1a5e943dd634c99ac594843667429c9c1f8bbb68312776a0831f8ef0778add4db9818649bf77e8e2c37c34b7656cd064c0721f9f0b7641f19f02a3274f83df7165dcbc3e4969d555db704c23bd1f3246fb07375795dee9b6e32d858d131c92e251e21724073435f99d93453549e5685921843d8e88d25e340649f3f60ae5513461eabd1c20aa532e5a4c7849429304b526315c25845b14b37444e00b6e31cf6fedf73f1958099f70413e694241c00f67c83cdcdd28f1f12f0b8ca257d6d43c8fcf24d5b869232dffb948f1a7fe59b944404761f677f8fa2679110aaa3bedeed5e3cdae0742600e2af488d9d162825d4da9191f9655143d4b56859bf4ad0991568054ae03ff548d3f14789b80907349f02a8b494d5aa09bcdda2b0d00ea74b48fe1679dbb0f73111eb562b2406ce09b45ba240e4f927165a35f1806aa8200630f975c052050ae1abe319d7ce6e82cbb4d4c53ffec2ca497ed471bafb6a24a6af382b52724929246935cff9e7473dbf5822c3a0a2783fb7a2bb44cbc5ff7896cf7600947e6dfff440174d1eb446b23feaf51079c09a45765e068b364a7c3b8c2cf8b90438041466a8b67bb54f35b9f548b40d3e7b5d7b56ad0f5d716f57a88dcbd8e9b2ee95eb5f779e3137336175e73d9c9b6b1b8a2f9f638f327d3fe1524b38a8b257667d9ac924bc0f52b36358412f0ee9356c8bba19c5ac2d05d9ff4b4f9af98427ef35d4ef8edcb3c9a7767e25408c1f31d0a27a810b51dbcfc61829620b68de893115215682ff61e9a4c39cd52e0c058d272d916fa05e90c3378a2625a0f2383b95a1599574b2d4c05170fe67f817c28e4a9263815983be184a256df4d8b992322e3ec95a94ba15d602275ed4c6516a51f0c7240bb266151e7b716c0659839430d667a683410ea27bf15056b81bd8018c51456571fac3368c4c9a5ff11158b1882f2e1fe99db7a5bc1bbdeafc5974e075fa562b2bf24a94cead0b527c918f7046d8520b2fda86e08a2464fa2440c83b82499eac1797cf72d27e170be1288661151a8e9b5ecbd44e7d82c182575660a42e7b5b0ccc79f081c7585e47990618ed0153363fbb2804cd88c87e84abfc95e56b7b75aaff53b9a3addf7592d668d08fc68ea5ee96fe5d4aa07573938e484add69f24629b79bf25689e79b4e9212644953e0b214e9ade55795111cb23dc0011b38fbe9d9c5aade80b1a199f01dc106082ff8c392be67bcddf72ea6ba5960209e44bbbadbf540ee48c3a83d6abb9830b0412bb1c135ae5647a5fb9df9e09463a86365811a12432e8b65b73e055c044dd99527c308b3ef3cd02897d2b6e78b04c7b5e4c499fb67834de805d3d44183184b1900435f39a181a5ac068be224f4875de34d3de6e3b880302a02280d3dca08179fc32646dd44e98aede20d1216c2c01fdb991b7cf45fb87384eee469549a59dbee798ac2dea2a07ce3741215244e5ecb57492a60cddf552598d034cc9b528e48c25096b4a32661060cd35b1c4b2ee54b1ee8b25a598dac2e473fa7958d26f060a96008f09ebd9dd96576f33bd8cd761be756cf78af443e3e1a4a6764caa1c4f2912016cf4cc3292c23b0b3c2d709e5efd3e2bd72cc46a6bb99ddd93ee59fb14785e9e1a1081ec2ec60baa1eff45109f805b606a620b8c9532a1b746e5fbae3cb3345418d18b6676c206a08c2ccc4dd7774996700935f76092e7a05813bb0368f1ad9152a2ac07fe5b5f1bb8596458a213afd77b054ce0091e2e23d2a4ddb38e337d9728d078baba585a92dde8ad7bd6d4442dc0b6a1349dda4552f1b8849bcd726bdc456d24aaa109e8ae37e3cd339cfffde59ea1d65feade892a01703a93768c7db699458c8639701cbea8304184b4fb957375636b64758777c21b5e4415aba5b389bc16b765ff9b5953f687fded40e645e58df53b50a2cf3d426c4735e35601a8f025feae588751201e8dfa54e6935bf1ecb15f429aedf59dfdb52322951c42c446dc9524995c995a4902f7fcb82c85c8dfe2530e44a8b4333c7cbb3acde6757db032e4f96f2614ef3f2857a244006b5b86242e591f66e3f641e5d83ea90f545007d080f0f9e7624396a1d16491576c6d16e158db32df903eb7f233e7545a237ed7cb076425a75c01c66173aa600d0c43c9907e88decc2a45a563168f21f31d7edd2bbec8a2578df744dc0bf99f7ab44b6b6c13462d44b6f4667dda86a476309f427570f28dd20e74f376f1db407023ff1285ce0aaef4a257c5855872a48d9721cad247925a8d6f77ace2ab92c93eaffedc12ea5e1c6602eeccaed87f3e064030c749456f9aed2bdd0a635efabb5afe4ac07cf7a4278dea4e91e1ed1737470d36541284b2831cc71c8dd033aaa2bf404d8825b75ac53e80ab0756f4f94c064abc224fdafffd8051597d3248bfc50ed10e68440c2ef999067072cb2a54a782ca966ca984654ae3f99cddddd244666e8a46df053d698405601a0cea568115375e221e6e7d66b27d40c1ac7c5595c13c179ba0e563143848566a7d87961bd7df4457c267254f27ab6073b46f7630e1e1b4d581c2fd5b9616bd9f5a70358a80b4beb242020c5806e12d47cce56341767350892ba764fb4084322a383a59f757f1380e859f5189cc4c402c2222b7826e82e6d5d7052a0006608c4de509204b87c9d49aa9a8193fc1f7a62f8b3017af83daec101849f052881922c02455d78fc3aca286b93e854ce346535740a6eda202dd77fcdf2394181bf6a7829f9051d1455da4ca360ede755ef0de4727356de37ce17cbbcbcaf8b8212b443742a7ae23296365d3c0acd6770121688101e5b353db83fad635a7834fd8e65c80a553f21ad45854aa7e3f83abc29406f714425605732434d4ccfa2eeb39e83ff84e8db5fb04f4991345ce53d560b9aeb6ac2ce5b349a1c8a441e749eadfc8f5e8f0fb223e9fa25753804489876dd8e934609ee4902a40a705a7503c63ed26f72f2ed4a57ecccf4916790ff46fe9f0abbf29d1f3856eaf2a6dc830ade1cf15a2a25264ee96de8b5be1c5aa39b24f4291aaecc2277e5a57625a9862f5b230bf2956ce80e606222869f481d7b1314a3034133239e8d71c27d85df2f6fcf662751c931667f732cf65139b4082b1d13fa7bb24869d1c7321a1c97370a8bf442a6bfded79b25c76295241a15d1f5fc153cd94d018e538055f4843a4d13b571f5fa3e12e9bb034f3571516961d82534f450940d64a015e2fc6af0998a81ab53989ada7896cf1682aaa056a2b15e975808f07a2b1169f910cbed8aa0be7ff789ce739b7e327e3fc1edd293ac8d4c7aee21b31334132695adfea88a1b50980d1de600b5441e5354a8e145d3ba59251586f6945f4d71df71a747cdcd532032cf5bda9225ebb7bef18a1bd6a70ebf3c6194d13859d89b439bf1658ce5de35a5fbc731e6d018d64a06eccf387497200b469c56c13e3936414d50bc546dd0f0d4f9500aa53a590afc147166439a9bd35d26b931cd17641703eece45e70e3440aea69003033ccff33ccff33ccff3d819df570409bd3b2525c105da07554b4a922d5b041502665f6003cdfeff7fc17ec2890a02040f1e0fe90eb7a7f8d57292ad82b45c6e4d51bc889638a96392b5a5f02737c54fb775269f90e27edfd2a824c928b4da0da2959e2d8926a248cc635693523ab3c95070e55f529f78c28509419194fd7163e53bf90b7ee22bc16dd4a429b1b5f304df29ca86f25c270c3a5ad2eb6f68cec6893e732a648354a46c9b58f53cc6d52474c91ed30463f11aee2e9a3e6399284cee4d8247a765fe60c258ea9bf2ec32b3752ef10966f9377ed2287f59028ff927459b58e16255893d2bc58572effbb4a1c4193759d60c4d52d4cc244ec93de50df929749024c1e7d7ecbf28126cab6fb63651f919125efcb04b52863bd17bc431e5a4cd4c56371a47dca14dd68c2d4f67298de054b367e6a8bb49533d326083116b26bdb0986c2c42cf694d2b6f6efe9d4644d2f81124053614f15d12c5b385e8cf662326b09108ae843949d8bc41449967492a44b8fec687c824e55bca92ae6bb035e0041b8678727e767ee4263e6da3109410a6a1a2c48bbb2c21f49433d9dd4ac8cd19326c0c620dd33995a6d08620ba92f4c9cc7e201693d9ac492eae6d1410e71e9fb012cc3f6471a2c3f32559cf4b16d8f003b6e7264a8d8d7d0567a08218a8c0461f123ef4c526f19ecb5919d8e0c3d21e3cbf6d453f49923d989b97d5c349655e1d2036f4d0257dab50211b794033d6f677a3b5648307b23cd3642bc6a5fd55f0031b7758ee42fa6fae6dd8414d63be212eec99b6a50e5589ffb99fa43a474d0727b453b666f09eb750b131077f63873c4b9a5672921c4c42f4c60c2d6f15bf387c1d4ed8b8794a8ea1c1818e31ae728e11b71767c002e80d36dc60a30d5c122646f3e6b021d9ed45d24c4e986b0d67eeeec890e94fba940d35944cf490e12e5c3491478060230d47669993b59c4ada4643925cb9499aaad3c619b2dd0bb1d5f9fcc46bc48619c8d20dfd17438d7e090ed847ca50ff966c455f7bdac98888480f3690044934202202840cace6f8953ac93d7c70a4878d311c4eceb1f3c466ced41964f0600636c4a075bcd0912a9d31ad2322223db01186248d7aaac9b7a413346c80814d5207ddf51e4d511e11110162e30bd707b1da2a4912cc922322225eb84f784d1542a225a61111912e24c6d5899292a6eb587ed8e0421d3e229f625276ce16caf7ca870d2d7897bcb2de7420592835763eb1d6e536577260030be7fd98ac7246fb14f4326c5cc1eddc9ce9ad3c367d464444ac40d709766d975ee3d955382bff52fce6cb19aa1ad8a00226acaae76aaf1e19a7b087abb9a5fc9ce4b4e3c08614940bff19c777733c310a7994a84ae9c32423c306140c1adc73cfe6496c3ff2843edc9d14bd2bad47d706369cd06dcce5e5eba9c41c036942ff296b7d762ad32440c828c3839031c2831e41dc064c286e2ecf2699a53be1c4c6129a1ed32d29ccf6c99a12dcd0be2979eec94193842cc51c353ddfcb62030989317322b222db38c2bfb184db641d1b46e03a5512234a4ef8b247c828a38ce4cd204301368a70c7f84ee37539c78ebb0d2224573e09bff898d0e0860ca3967b0be5a7fa5af9910b8cf1830132081106561574a292c99df2d9c3db8719272418e57a8a7f861e18e798a41cd54ffe40c82fc81721bd08e185f26ff2a99ce7924493110a8c00493ca081905d5cc28925e5096dd72415a28b04b98b3ab35cb35e2e5a37d7cfd86fc9a4181774169ff4702715fade62eba0f7f526d7d9545b98b1692e874e6932adc5c1432beeacd7b7420b379c695d7a679de5233d7e0439c3c70f13320bb32abbb56aeddc47cda040882c8ae925c5fa13377bb623222269ec06426211028b905784b862435a11c28a0984acc2ee0ab249b0f89f0c5185f14c5c4bfab2dcc13292000a4945082a424e814688295ecd954d10138db7d15228a751734a6d95793f529cc5834bd66dbc7e276414f5a5b01e8d32e9045f14bb585ba84693343f0f452171974a2ef55c5382025171b9cd49d27c267e22afcab424a7784c2dc413e6d0bc1223ad3cdfea44a27a995ef4138b17e644a9f6fe4c0e1d4b737213cd9f60172a5f58b7146922c136dd4c26e9e4e3434c08c984ee56be9fd54bd83862c23a7963767989c1d58284904b789ace53453c689a6589904a109dfa3dcb9c249467005084104a248d99749d3b7dcacc43266196b4761a57cb1022094bd4f8a1736fc9a1f6911e3e82f470108444a2d8b0bc4ff5a36b9721041269bc4d29bfda63087944a1666ee346257cea1f6e86191f70800ac6e881770e7cfce0801f421c4157aa2ba411079796bff7123b9c68064218e19669ccd5b52f2164119a24ee6c0ebe9f6de30eae10a2885776fdbfa4f4cc2a552124118a7d7dacc949db2735c23d4210913c79f7717299f82e1016841ca26ecb2d49d66c374f7520c41049d9ae3eef718f200e64032185e85eaec4caf4022184e0c37f884ae9e69f6c4444444484021f320863b54f73ce37cc07472a102208a3cbfcad5289b173de0c218170329649456d9afb5b0b2180f8f72fc8f59a14b5da1f8e12fe2eb6dd42a6a81f9e8b9aad3e635627e1903e14a531a685ae9d861cc287f3b5e3e6f857624c1db287e37a554c42e798b358881e12db37254146d334e72179e8d393ac5f98a44975081ef8a0a36db3b796ab0ab903eed9db3aa2834cdd217638cdbea264fd42ea90647df617ad332793103af023a6f94dad4e8a61c81ce8f7d02dd29229351a111149a38c32921e40c80891439969794633c571130b89439b1697763e262b407a00494636040ea58f7fd2a61a4744448090518390375c425bb887d733dbb8a1d8b4bda3d5f13cc85e868f1f3dda50c8dd74fe7d7fa903848c1036906e62548e09bf31df0308196b48b078af90ee4dbddb87a86199540bbf25edddbe232222dd49481ad0107286effe44347d39222232460ed8056e76300600c0106286ad63e47fa494a8259721137f47e7c2774a0d3d21840cdb9a984b0aff17e1a990319472f09d8ad58e6f133150619e34f224e1e4670b094352126c636731e14aa3400e3cc8074444289046f2e3c7052e30c6183d063b0bca2823c9410a4444c6e0410818f21aa9fecb8ff52eb220e40b215ee84d3ebdfc960ce942081742b6d081102d942fb5492a7f5132e573c02e9840481612a52f3bea4dbce93c1a675820040b8de6a70f15d3a9b4845cc1109784d0eb8d1742ac60a8fa94d258ba4865ad105205ddc35a54e3433ae44b08a1c2952dac745647c7306720640ac692888cf9da05da0c32382022122285648d0f711fa6902814f79dd35212337841cc2063a487fb800c203e08814272876492d22b7cc7840368843c41f7cb8c3dba9b463641429c4096a471aebd0412d204747a3e8698af0cdd9980d4beba749be0fded12308f7d6238918d29a42d085102f3ed7731e7e53b3133e000178424c18dab7f9f0f7565d24828b4956eb29c34c670861c813e394bd4dd9d98311462844a66b5e2971c327815528433b985e474524b8b0921428d61f0225fc96367c9adbd8630fabd14e2f2332549b082b19fb879538e72b125a74727a10630ba9d0be17f1bb37964f4d81e1410110182010778608c203dd8408d5f3026c45c4e72a8862fb2974ea1f15dda537d468d5e9c3bdd634da6943d2abca8f2676b976f7ec69c5df449f64ed0cc1553ba75712c2d9d3d399b8b3236bea794afc4dc4970e19ce5acb868366626b738f97ab424f161d93a5bac1e4cd294e44f397d925a785671ca520ef71dd3824f297fdae4f7dbb3b32879aeb524768c8a5522224180b80dc868326ac8a29c3a2d8917357694198bc2f9c7531f71040d203dcca8018bdfce4fb82454dce82b0c95842c131719d15c71cce961fe613352d30a2dccc7d206b3ff4bb362170dbf71fd24e79157c18ea5ad2a3b37b15e557492fcb77392bcf2394c85593448caa59a4be64105e76d62a6fcdd299a4b424acd4ed7254906354cf17f8f584a6531f6fca5e03f894977c57facb3a450dfbc930917556c3a2fa8310ad2635cede59a94f8c6d8400d51d4dab999677c1568a046284c490ecfba15f4400d50945abeaa43fc26f1e4d4f8440d4fd4e8440d4e503a9636bd5bec586b6c626b686204353251031329a871891a96a851891a94a831092d444ba6640118a18624f6f4ae26566da64d91a83fc951cd5c531e17755103129c144c37c9f7a3521f06281111111169e2d9a90008a3c623ee0de6194accaeca51106a38224d3989291e4f73b9d688b453ee2ea16255a78a1189c9ab376a6846cb7a11c9df3979acb81a3c4720d450445b5567da131583fb89c87abc5ceaf7d2e7434451e52d658f99aa3c3f849bc32eac5518e44762821a8630346612c574f3e45f28e0831a85687d73de6039864d138d8888384044640c163820050ec841102068dca02fe0ce817644d42084694cec3831f5f6db0791860c3f9724614bba5d1089f717a5f285c5ce3810ecbf5c4e1219df1b06847a593fce43fb07f2dc733a398931733ef183f9e73f675d3b553ae903e6e15d296a273109257c28f77b65ce5eeb6e49f6a079fa18eba71e0c97d3c6964f8b0d691e703be97fb3968bfe89874cb2e8992edd6fbcf10ec95172e2ae8ca787ed700aa3ba31c77392d6abc359ade4f2b687757428b7b52449960b96f23687a36b062dc14c7d4a8e1c281d4d169d6bf3421387672f7cea8ff54e471135e050f4bac5142b2656ccdf409dfe5ef59cd470839a236d354aeab49ea4461b4cf5595ede5683af63d46043521e9150a9acfa8daec1f094e864fd9d573c3524853c978d5927c7aab750230d977e2e4d1706a98106caebe54b4a16262bc91914cb94a379864fcf9a19fccecded6ca1a9e25486af4ece2147dd5c3c4f8634c4e76c7af31832edf49f433a35c4d06494b6bbc78ae57518cae1175ba72e5b8a070c499ee2c6ca1dcf2ae22f9c755d9ea3bddc752f1026a6a4f9a1eb266e1756135df1d0b53279e542d29a4445da735ae8b750466ecab1552d94a04616ced20c7a99fd93540e0b35aea0776ffd8c4911420d2b605aa9bff4a4d09255c13cdd5cf558154502420d2a9439256f73132d7938853f6fec1469c2a546470acdaa87e5eadbf3e0d68842f9a772379e673767a0e0753e9d12243fc8983cc1202e6dd5b3f1d9a1130ada49be14bdc465c526783f2399744f7e5083095bfe6b7e7797eff0975067cea39ab48347754a404a736d4837edb72d099f64be75fde726a1470216d2e4ff937e4e74b3c611ea24974763de566adf08456b798494a0da9a1641cf39dc5cb387cfd4d42082d993f867e6f1b373c34818cd6a2568495d0e09a3afeef2a974d958371889afb261ed5a32b70b8c2b68364b4f51a36f4502017e714cd1ef43b389871b7d516c7bb599cdc70fb9175675c558df60e279f2e2fbb2b6bb789aa9c75d74f95ae51c8d1c7f7847a62bc5c6cf4843056904f1437193c96dc9c1377797a30f7c9c56be7e8f0a39f860b4859e19ab9876da1c7bf83d7f925cd34acbc51c7ad8ea93d86692a8e98236222272460f1f417ef830411a3f72e4c1fc2589dd59a493a5ff100b2a90030fe518735d8e7fe61c678e3b1cf2b397c9e92b8cc7cc48aa90c30e26d93acc78b4ec249639eac05d69cc7d52a7a4961fdac11472d0a1d196eedb78fb54e273b02f7ed7cb4a98f8b70772c881c84e098f69ba973c5d8693c10125e488437b65659e97d3f2db09193f1216a41104004ec8018775cd4f638ce75be97e83495c3d4b927a3d794e0739dc70b8d470f91b1f89418e3618175cfea73bba3e9d830d468bd6edd3299a753ac71a887eb11c3ffcdaa4d4600c655b52a98935ab9221471ada541d3f68673641939820071af64ed9f2cf5476db739ca1d4246566cf7eb3cf7398a150e2e67e665a0636c53cd5fd52410e326421773733bd9a145e8e31f8d953a62bf9a4cb9ee7104362aca0e331da74f270214718caa3f3275766127e2b58c80106638808bbf7a4296cfa0bc9a9a4a757f1b024e885dc5376c459122c74b80b073f4f726bbd5c304dcc8e25dbb485eda2d47f6b460babe87a5eca1aa7269385aba412f37cfb58d0a72fe564598cefe71572dfd8565552e7ec94127258c1cc49a622f38c428e2abc25a51376f523324950c84185a7a44de9d672eee4981c53a83b8913e1c1aa3bf423e490829dae6bc28a1a85c7d324db7299030a467d84c49998f75fccf184e3c6b7e5d8b9db258605399c60fc6871c3757a23f626147f59fedc42b78fcb04f4e244f7d51b49cd12e8b0254efb4709870d1eed7b3e772a4b427e2362b27b7220e192d0b6cc9aae536d24c871842b4cc60f390da9241b81d616ad4d621bff9a1c45484a4153446b98f34e92830885878bc12f598671b4cdf321d91d6f34611c2a2a3387a54f92e10886337d2f0e60e0c93b4d8d8f6892022bc0f18b34c599e5b64c3a1ac7e10bbc354bacbdae38276f70f4e2f4a956ef20d57125bc28d8546d7cca76a18b5c58d9152b72bdc72a830317b5e999b89b7370dc22d93dca788e3fbf9b9b000e5b2c1ef65bad5dcd4d08472db6932eef475687b611072df0d09ea34952ef963642c0310b3b7389b9566a34991dc0218b47acb2db7a16ed13138b3eaba7d4b93c94ab05072c3431f9337cc6385e710e25aa7bbf8ec315e7f9cdfd27599279c3d18ac535648e27a6a0177370b0823e9988cf796bf53c3856d16cecfed418aca7c48c6800872adad87fb71aa7474d3e15c5a451a3d52d6a668f0a435b434d93a7e0193fc59617433a33835ad9a638f3c94675e6122aa64b517d8eaba74fa1bd6252f82997873e39c5e0d78e82d58e21729d4c12cd44145645fb88096928ba7839cf5286cecaa03074e56d30f5f268e627923a4acda7f31ccff744e1bbfaba52ed44ec446927ae227d3b6b0a39918b96c7768ef2dad626369796f3dead93324613aecc5b4c92878f3766c25072e5af31ed5462840942e5e4d0bb6b9a3e9748f2cd8d7a62b650a9e0b0847ef627c7f7084d15bd018e4ab0e9b97f629079cff944e0a0845d413bbab24e7c24e9e1c3063d80806312491e6d2d4bc5ec26562322223d1222e090c451eb6d7ff25373ec8c888804014724cace41d39af4320e489c2e7ea6beac1f816da8bf8bfeaaa5f650010e471cf216e7e67b29646e2401381a41e660bee2597e5f3d8c384ce8978eef9b9e7811be5b6ee40991f69ea308f2d7735e13e924f9611c89a04b8c1bb5935827443810e1874eb914e5b26a26711c82ceefef5c29da48a7380c917431e55a594ba7cce028447135524ee2db63ff3808b1866ad83239bd76a7471c00081c83484a57961d3fe11084d966ee841283ad25393802d14e5abaf83d169d96077000e22fdd64ab17c2f187b36398cf992b9f2425191111e9212222820b60a00422e8000a70f8a198138fdd2598e059c3d1872b5734263964a9a59c0f898916ab744f2ae9a4e0d843a12ca7bcde1a3de43f6d31f7d46ef4110738f2d066f9d6c8afb8f5141ee0c04329fa7fce991c2adc7b872b4df766624b0c1db4831dc42f8a8672cdfba9c32966be4c79f33d96659081831fe0a083b1d337a7d706c13187b3f689277a5481c8e19839899c78551cce372ee96ede36610207bd35697f4a162038dee0a55ff10a11df70133470b8e1a43a6d96d7e4afcb7fe068c37267dbd1bc43060e369453cdd6ecdf6b284ac9c65cce9eb99b031c6a783ed33b6359dbdb9986e773f7a675fc7cf2674444e471a0410b15d359ffb464fa6c80e30cc9f93b8cae6a5a4a9f0dcc505b7774dc283943a78c348e326ca13289a9c2e8a5c546444480f818711c64308a9675c6dce118035349b29b170f87184e5373b2dd95901a33053c00003de008c31b2f47554c25edf63138c070b44af99d49f6c990491c5fa063f273efeae0f002f62166eafedb3e8aa30bf77c56faf052ae591c5cb832677a59ee3f3b7f0b6f6fe9690c570b6488cd6da7104716ea8ecf9ff973ada5c281854258989e9ed1ec1f8e2ba02af1ae73b17a43c76105c64fcfb29c45255909e0a8c29ac757c3ba26cf09a9d0f69cd0bd11ff572e8e2970aa953a45d5ffb89e21e09082b65ab26d118e2898ea511e3be6bf4c0a0e2858b379f753e6bd7be7094c9da75ae6121c4e386bfecc61b358bcba58004713d0607fd2559a92b25c389870a985ccb1e5e358026f1be3c768d5d86f7d0087128ce87b8d127912eeb8122c53c481044adea9edbfacbb6442011c47a02b85b0babcae1e5c12e030c21a5334754b0f13971c018e22a89a32858ba99e72da8c88889c8b000e22dcdf293a49f2592a95ac4044c4c70ff781193ecc20c18d61e021dbcccc3ff355f087a7e0479014888898718630d6d4a8a466f223222240c8c8410f33bc8c337c7030bca94e727d7ef408188826417253b67db0724444a402377ea16ff46c9bcbbcab9b6484c730377c617bafaa56a5201dc32040c6a01bbd40b4ce773f07dce08599664dd812db7d539a811bbba8e3caaaf38ea78cd60d5d186b293d25ad73711ccb917bbf8df5f2062edc363d13ecfa6398f3c62d4a132e65373b19b1051b3a967fca96cebd47e0462df4ceb1c755a79294ef1f36f0e48c20490e7ef8e080dda045ed5ac172d608bb943322229286d0e8112407df801bb3a8b3491f6a4cbaba74cfa1d1c381fc48ce9045c952899f323e496d4e2c4c16d95d662d2c1add90a788480a446ebce2dc9aac69df9cac6a4444c415ce499576aae7afb9c08d56309f9dd3ee7db678ba1313888800f9e129b8c18af38dc9397b9fb627fdc72a98943fa93446549779813134704315775a4d4d92955871bb54b0b17e5377d2d7c87e046fa0a2f4354bb75a3f39993d809c22d1a283d4acc9259a670a3b263a95c6d768934ab1f9fe44798e592c0cb8410ab4a3d4e9ab360aadc59220d96be2b896033244447280861924b8218aa43e5fadfd122faca168df3a7eeeb6427f0e8a2ec646e7af389bd46232cc484c30060a6e7c82faacd935f51ae9f1801b9e385acb7555082170a3135db6bc6de95df3f8991b9c687d2cd4c90f1bf4d8c4352e3e3efa9319dd480f1ba0b1de3dfc8c8481b88808057e2423dc3e4682780e44447e24237c431387a6abe76728d9e7f6c08d4c189f362b225e4d9ce806260ef6b71afda2e57d342222d269987101119134cc48e8c625cefeb768e9e92e21e086256e5402336dcd193eab2ae41ef4074444c600c10d4ae4155e2ed555489cfc24961bf5a8d614c2bd95046a172515eeb9965a24ee709d41e43e3720d186126fb3a27af6cf474444c6c88088483b1967f8e004f8b8f188630a8b3aff18644c331c03371c818d470b6f4f722c971b815f7994caf33de9638ce8dea42ff32a7f04a11b8b286795d6fd8b4c25c728825ff1f97fb31c2ba43fbc7ff8b0c08d44244972af4f59f28a332142f78bec8ffddfdb7ff430c3cbe8a1811b876063995fb987fc88cb888888218e1ffb46212eb92fb4a39d1c3509bbe00621740b7ba23925837873dc8b26e7f9687249c10d412c97eee55f6236f94c20ec907937348e5d8f090a6e00c29f2f2949e55e103446f087d44c14f90ab657158d8888a8e0861f1ccb1a37952407031a1803031a68e7e48c14a4e12128c18d3ed0ae2e799e53924d1d72c10d3e7c75b939c36e492e5e066eec61dbb312dd7f335db52322223c70336ee8c19cee2db7cee7461e4c13d6317b727633ef811b786864dfb5e27c0aafd911119105dcb8c3396c0cefa61e3327d934829c9103b74353721d63349ff3bdeb40577e56ae7cd241ab1caa4c8acd41dd4ea79926ecdf69e8861c722bb9f1de2c72e98b4325a6860d7926ccb9950429c3bb0137e070e30da564e749abf10d377c52d2eeeabcf95f62d0d0816b600337dae0776987ece828d96783daa1d22235e6c61a4eb9b2bb9a50dd50c38d344ce0061a6e9c6193e7d644cb29dbf7bf61062b499efc2b1f9541dbca6af184a8fa3811c20d32dc18c3b9fb4dda37b92dc9470cca9b9c73c44647fa0324b81186caa662092b13972d9be1e30637c070ec8d8f3b26674885cc8d2f1451f6ff9943bfc7df0b4fb5a711ddbad44ab9d105f272ecf5b7cf05eea42ceebd4929bb06c28d2da03b3da13b92b1bbd4029ac4848eaef39db7a471230b495317a32feeb22c8f05d5c4d7943db4956dee0a64d26072fab415ee4a2579a26c974945c68d2a2827c9c9d3e79cde3a4a854327d3a5cb583d710a8ec9da593fa53559298514dc8882313753dee6f3dbebfe06149cd6ef35314fbf49f92778a2cd6613a4b5e5351bdc70421bbe2d5c93e6dee534a1923afce4f8ece7280a3798e0654cbce5c877557f099406ff31f9183b7a2b3794704a3595c3c74e57a2e2841b496037c71ee99833ef9c48f04efd52ccb91b47b8373e4379c865704d176e18a17c2d958996db386f14a1dbfc124e4e69d9ac45e10611f8fca61bf382d4758c8d611463e36ff8c68926e64b604318b698b0c1f2c9631eb30bb0118c4cf44da2a7c4e6fbef061bc03047d728b117e6669367b0f10b254aed848bcf0c367cb1947d96a0e341fb62bd3098fc896dbfd9939c106cf0c2c62ebacc16c74e568b6a1aed030369b40f0c7c09d20842c60f1f37484600e4035fb0a18bc4a4986e1e55af76511bb928091e63b2f74646066ce0a2e4399cdb5594927eb2710bb425eaf472a6d795b630687e12a6ac4247ac5a2445d5379b9f12d70c1a67d0c24cd2b47f9e9db8e3cfe2123d4d983ed59c722f8b3da5b7d54cf499d36351bc2c6a9f938592731c1689264a6d45fd15a5ff080fb617615157601d6156c29fe798ba159a3457da93ad517956283a3d9226f468b8ab3885ffc669c5e89bc3aae83ee9a73d53b1540ae7d2d6a282527bb76806c9e6d39b400c2a988268cadf4d7258f2814c4193342731a7735238eaeeac56a85220461452936a2f06ab984b6606c480022126640917dede997a823b55a24b06dfdd11c57082727963963c254d3879e82467ae9c436f2e0613eedc1aef2eae8f592704622cc198f1977365992f4948036228a1b95c9264b82b3155b8013192b069e9a7b2eb943f392006121e3951db132d42ee801847e8241f932c2b7fd6d2474444ce8c11fe4b29dd83234092910f885104c2e414b3358979da1e3188507f68b6ec713da6941bec18069ec2bfe9954617bb760863d5f48e413f3f460c76042339d2846d998a59f2c00e6024d5a6a67aff707d5911111f64fc62954da13a35469ff97c41a69093c352896ba301e9c59b42744cf4a25e89f2420b92529ea2df85f9c49fcc51297f49c22bd8a10bd5be52dfacbb06b972518c1f43e79bce3377a560072e4ae2e7764f31a7fe2f5fb0e316b5c9591f22230a76d8a20ad14e62945cf761ac45425748c9e9774edc043b6851684bb158d65a9659f0e927c9e6fb9c4b7a9060872c8893b3c6b497e2d7a223222235d8118b04a98bc1ffc711119113ec8085bedd939f43752a497a4444a4870876bc82dbe8947b7b5f324e3b5cb156a5358beaec68052747ffbeaa32614a9a15bc274d692b136149cc2adc143ce7a48990f2fa023b54b19418c5eae75374149841da8e54ac6a397eb92a6dc20415f9479fb4b14f769ca2d8579aa2597efafc233b4c91c9276fbc0e36268ac7cff0c14030b0a31445f52593bdab2c1ff4c18216ec2085b5ee6963a3edc939368a76ee3dc6cf753c5a51a4d939db57baae2e83831da1386eb45bd44f69ed2f65ec00c515fd042929da66ecf884531eae5d3bc91b5bf384b92bc5faedea44e1dad5517beca7264eb8276da96a98cbdfd226ced9263f54cc5b59464d28e9d942b9949948b45cb17d82c5676730518aa11b276a697e7f893cc68d4887966edb96c8a7b62cc78b924f629530672c299524c5fdd0d70e4a309e71163f6c1262ea1d9328f58a9f667dc7f8c90448b3df608724ee4c62a936af417c9491821cec88045be9e1fa2df85709422239fd8995e35faad1ea116efa57f8609289976e479cc44dd95d3732891636c29cf94ab629d94c73ca08358ba5e69a0a9f6e2da294a3c465ebe31d8ad86476c66267546e34115a86aacfa4911ff34484fe9ff251bfa4ebe41ec2b4b1aff6d162564d3184de976309262741d35f85e82ec604ed6413a20da71317173753390832675ee7a32aef5304d159a79f9cf953c73809c49d5a3e5ee5ce6459020873ead7790cfe81abd41b2d4e97e417f3c321531c93cb739db104801176f4a1cedfe79de353f0243c2222b203325a0321d8c187e23a347994f8c5380b61c71eb8dc6d7337a3f9bdeed043d96a5e5bab2978bce48193a4ecb29304ed9b320320d881876f43e34b43848729f0811d77b073f5bc7b9ca8d9230810347ef400428688089032c8088246eeb083575749721313b3a30e599ed0a92eb3fac23be890fc2549b1257bfa1cdd1caa289725bce4a6f34a1a415060811d72304c7928094dd36a7d471cfac8983b7c9c5360831d70a8c44d733125b1fac3fbae013f230d15243bde909b7aee0a99ea5ebb1bae53e9f4f9c1edcbb3a30d9c4b75ace01fca2c638231829051c61929a0c10e36987f3774ff0793ea6e0dcb493a65326fb1f36584033bd490b8dfda7d096bb9ef1d697866f32c78417a9046d2021f3c50810476a001134da235ed9ea124e7d63be14cb69eca0e33944bb69370a26ebc4f193bcab0cf9f70f163395c98c990943e9a82c6a8bb4ad9310693a6ce147e532ecb80058821b92bbd24c9e58c69c3a069b69d4c093b1a27306c57b95a99a4cee48fa92f982b5612436f2c417edde1053d6783c5fe7e9a3449c18e2e94d17e42bc9bac69cf327cf8d815ece042dbd3b9e9f1a949aeb670a8e4f1637ca473857668c1941a2c58b69c6b5edd91852429fec44af7ce86754444a487193e7a04711bfcf0f122222fd88185d76635254a70c715aad3b98b724952596b87154ce28484ce88f49c35821d552023e5754a3629e76431c37360031f630715b04b8289276a9f58139b1d53b0d5c28479d17ef8e84101158cf1c333b0430a76b2def124f92341121388888c0449ce10114923c88e286826a74d51a2bd67d43d82fc20e347901f417640e14b67f2d459563bb17f0236b6b9bc72a86a779d60ca8ea7280b7de76a134c6269d2a7de4813333b9860d4ce398bc79790b9099a523831f52fdfa1844bd6fbd974525ab9b823096ece326a6a61a2fcdf8104b35334bb5ce9239416eee2c5ac3b8c704927d2d93e3db3293b8ae0c9aa58bbe7e99c991d44e0d3df65f4d87d1d2f3a8661a53799198f55d5be30d679edff97cfa4a709465ec2887b32314dc2a70318a7dec7244489c9793fbf58a3e6eb94a7a13d73be384b344c6dc6f4c2b8be3bb3f73d5162bc28ad7430d7cc39475776f1fe6fa67fde3d6ca043172639e5c5b4186e628af7c03df0c379e04304a523170957a29ba96c8a593f2eba984ede2dd9a38a949020881964f830c10b74dc22b768b136560e95abd1610b74c6364c4a928e5a24eaa7d16467426fedb4305f38d1aa68ce22d9c5d2e2671232643c093a64d15b4b4989be39c91da3041db1f8734e2bbe17ff4349ea80c52587cea1f63a62c2d8021dafd893d4d9e5dd84053a5c61598a4e7889584e738c76337c9491011191d6818e5664e7ee614dee74b0822faf1867ac5b0517edd69d664f10ab55e1ccbd8c7e4c97dc642a38b3b4dfd984fe2c295478c2a68e5315ab4ed3294e297b123654980a1337c5f9aaa5a33aee3a594a8106bf28d5f2e82045d7d1156e345a8e68758c823651e53fcb736ed245614af6a6a4dfafaf6528bc1c16c37375ca12962fe80045752544068930c1f6b3828e4fe8d57652bd0996fee7078ea0c313edb8ab6659b1093a3a71e8306fcdb1a7ca541d9c28d37f382bb19a0f3751479f8ba72b9bc79268c237213ecb7d9889c25da3a768cca4291d9838a2d2c68bb28cfad925f00ff64912f3abc3126c86dbfacbcf76925702d3cd2144ff3aeea39450b4427a524ff7dcce24daf3bba0db1f163949a22c265db9bc2a93f047c2368d96d1ad2f2ac6464444120d15e880c471e9355fcc8c92df3fe264177276498ef9d47684553a9deb4f8a043a1a8105bd60b94c8a283933810e4678b6b72925fd4d696d1d8b60935872e5c98707597528a2fc49db52ca1546fd2411e55776d6784ef1b9bb810e44e8aab6f5d1395ee936d2a3471034ce30e3033f7c00f9814606807890343000041d876035bad4ee49619f53f7011940d0f8800e439445e236ee422f874e54884a2c0b6352d684f0d36f4cd00ff14b2beb18c45a312726fb389e2e17046ad179a29ffaa7e804a2b0f13cac233f2a3a80d884e9682949795913fdc1b1101395c37a820e3f50139e3506cb4d9a1a1d7d7883bf86e53c81a0830f7f5ccfd456ff2eb5ebd8c3626539c9a9eec434d38321b764d14a7eb731a4230f9698a162495b999227c18391d39d476fc6f37750f7cdb269882701a4c30ea47c860af1de1bb175d4a1cf2bafdc8cc9df8d0f1d74c03409fe6e3926ef9cd331074cb3586e4979b30c02c4832422d02187c2ef04b77c313ae250b654d163653c4fe1d60187dcd34b0531fb0dc98974e4dfafc30d546e7e4b3dd136944b74d1f7ecf46c396c7835ee7aa5d4d7b057f470129b4fa898a9c1ab365fcf9a4c2eee693086c547cd98dc1a4b6ea0030df49f986ecdae34a5fc1912cb674bd5dbfb2e378319d2fcd7372a8339e547ef4a4f6fdf92c18d1735dc77f55878633886cfcffde311c31e3c46ff46eaefa784c1d9bd0c9ead3567d7c05094764dbfac693fc45f503556a95e0e7961731fd9cd77ed9bcc2e70628917b25e672a2f174e51355416d5fa924cb690ac57dda7e8b4f054cc262f13ff1db42c1865a97da6abd4333ab0a0e798b2ee437b73c53bd07185b28a9cac494a269b9d5670a3735af5c77454813a299a7472ec091b722a1c2cbb47d405fb6e7f0a7cb88fd7ef8ecd572285744ac8cddb4c92073d0aeb66a5d9937d12e88042394f9e379b8bb22beb7802e5fd751b7312b35cd4e1842c76b4bfee7b2ce96fc297f2c994fc25ece8a8830979942df92fcfa03ddd40c712c8f1244b74e7752861d7d7b0304bd1aa4e7424413529e1729e930f9b1d820e247c16ee6249f34a6b8e8e23a039e57c4c330f298d0e2350d1c49336ee454711dceca1e56e96e43b131d44306c5efbaf96c5df358ca22e4aae0d353b8b0b038df9b7a4d82f912ac9418e60fca395162ff3c0d8c2a7cbeec77ed12529e755f0cd17650b16a36bae62de7b91b86faf66d3a4397b7841fe9414a34d70a4c7193d7a3020c72ed0f8a8a16312f1b09932fe72e8a23b4b492b06cf33591b393972d1586e1354fe63650f4744446ce043040700921c2073e082de4f5249d5741bd8c08708cef0410211111bf8284302396ee1e776984b1dcbd24573d882f29c6d75edacad5120396a81550aafe1db3d62de1cb4c0463ce566c7149390e5608ccd318b3f655916c6c8d03d6262b148d4e4bae7b9d5f3c9c9018b4d922db69a58399724af38e693e24c37f304b5b8824dbd3661b3c9c39eb48250fd18ab1262c5f796cac3587efe93ed418e555c59f3335af4c9d1d3c8a18ae32b7cf6e3829f89e64805e3b9baa33295f67415e4400519362649a2a4b8d9570f729ce25c9d6e6b533822228201535829946c314b5aa5284c878ac7b0964f280024072992247d75fffcc4b31b8527de6ef93d5fb25ba2f0fdd2a3753299185d288c5223995b2d57a70814cfc6e8191f4e6c3fa14f1c1dfc3ddbc560f1724f9862887dd92739fa4f9d602cc95a576a0e4e7819ad84cda9dc52d71c9b48f0bb8b96951ef4a4736822e9c684ee36933e939709538c716d23ccee5208136e922429a1c265bbd4e5b8849d37a6e76a7da57a23222219c86109357649628d86f020191772542231aa53ee128ffdd721420e4aa49faa6b7669ebde24083926614e269f681dfaaec30824292303392461d20b7eb949aa50aa03492331418e4818a531d3fa3266caa91c9050e4845ded486790e311c9e935eb976b5c474768242087233c7945e3c46062703d0a391ae14d49e273b27c962c23de984bbc8b551a4ae54598f249954a2e8dcd495184257476d46f0c0df32622d16ece9327c9d01444046751bda17e94408e4378577662509bf29bd110578e3d93a3618e42f0167e5359fb84f8af4fb3ab6bcaee7910e5143266c959c5f27604816dea4cf23d26e58fc911883b8949b25d4d27db09fb1866e400049b367fe57c6594918cf1c3004948ce67629e2499b82f1e128c172e2a85b48c84057530c011ac746d3691e9fcc28911124deea63374bca7b508e598a149efd55e4dce0044b0e494b34982cca94589c7300c6e7d5752b6a6931e1428050f6158ddebbe71a354873e18b5c9e6f961ce1fce031f65f81969a8c00a3c80d10965c2fc7a8a9dcffd42b5132c4b7c5aa2c417f89944a75abca063f5e24e15c3a69b31bfa0e1c18b4c0ae9a541db63f2985db496c33e9ce749db0e70c0071eba40bc2bbe89279a0b3e3479b4f11739d9010e7a7ce265f4a0000558100237f0c0c51e5bf9f2b57e63bfb760aa2ec5ac4ca5296e83f6e6618bc23c9c14c6c39a5ce95adcfb316dcc9f112ed28888488f1af0a085791bbe9652acb7f6b3f8ec92744c668e8888c480872c2c297864ed89b12809953c7cda764c65241e04880dcc2003063c6061da05cde37bbfa2d0e17259ce2b155676c52a121df16bd28a572ca4d27c7bd2342b8e177d92d03e7ab25a3c5661d558af77accd5a29aa28ca82492789e6c13b4ac18f2040121ea9305bd2fa94a316ea5378a082cc2785889929b724798a742e83e895679362e7043c4cd1f99f14d7744e92c49412f028c5c13b87bc546b0a7890c2b09c5c4b925ceb67192ce0318a74d6efc48b16e463c54314e8c6b8d1dc4fde107e284a29e9b7af696aca37280c6e65728e316adcea7ca2f91825d77f33a85c3c3c71f449aa7f873c3ae1b5f84eb895eecb56041e9c68bbe64b8a9591a0a1032f234143071bc0018f4ddc953cba790ce21a0f4d6cb697d9534a77fbf68888080acae09109c3d87ec7545c860ef6e081092f4ff3ef7e8ea5bb59018f4be049ce2ed9b721621191e4c7064444921f8e3c2c618a48cfb1f3b77ee9088f4a9c52f2fd9996b3d9661e94784bfe8edb966f3ec6e7318937f3523ef788fbb61de02109f3aad42a3e2ce6d79491e080472454fd547234314d6b89360f481c2a661ebe922421b50d783ce2e4bd494d7fdaf7f32309303c1c614656dc901293feeb22221ae0d10872fd6eabd7deb26c466452f29cc9fe93c58b1671cede70ba6e9e53a5085d3f45973c9fe2560a8f44ace1b76d3ea34949d68c50e0fd876bc043c003119694b26fb3436a1cf3108cda788aea3c0f435c9e755fbbd7fdbdf12844ff490e91edccb0241202bf247b39e7247f09161e83a8dd4acc79622ff4f43c04f16670d168521acbea7804e2fe9610f70b2556ecdc0c3236073e584484072074d5a041ca3e4687cac81fb89462c5ce704f61353cfc704c32d2d773d61f551e7d386a53563473d74f2f0f3e1cec83e668bf9bc71e0e7149455cff6292e4f5a0448e985c92f4b9269e07afca4ef8d49d3f7742021e782849a2749f749736647d8753ca4e2f699ad33bda81f4b4f694e1c2a30ee78e95fd7c729e685278d081b7fbf46bf5caab180478cc41577f8d79b525efcba10e67b2b9751cfcd0b313d22439ae091cb029c9c3447d4d55df9054d94bca54dd607cf16cbaa627a5b6c1d0d997254afde2c986d2e5c9a5b9ccc1b53564996afe5316d5f2a8818f9262d0a824da6ed2b05ddeea58f2b5be060d649b701f3ea7249d9c014dd24b9b341b3b496f862da4442f3a5c4ea12fc3971a9de6c49001cb74223195f9c71e439edba492832d06faa4bf15f3e849c3906435975ad55ae382c1e05d929463af98e07ee136e1c3f49e78819293f3af4e0cd5245da8adfc4349a25c602f4df95aa9664fb76065df94a1452dd815b38d59f4cffab2d05ed818dabb93760e0be62b9363c89c5f614d8bcbaf5421bdb9154c318728f1afccae79150c9725d6c9c4509939155ad3ace9a88f3e954fc1ece4314e27974277bff66a278cf5517034465cc7f2bdbda150dc94502577d1357d42257c7b9a984453ef84773b2e7bcae136be26e4a9c2a2b38afbc530e1dc714343a96d892fe110f17d1a53c241b5e593863a0966ceaa26af3412eec93131d453defc1f41df1e0d2a5e266f845f63f4a6db7914e17ced9bf5a6d5e2e641845bb3c74cf1ee4eae876132cdefd8679772164665d1297abe2c266583a107c912e42401c6d253b133a7c9e9fa0b634b8c75ee1de3555f90a31627f5f3fa077b71c99e1dee355ed4513585cf10311ddb0527556dccf36fc93eba404ed0ca984bde1c4f2e36f10f2755258929830b3e75852679e25bac1f397d524c985fd816b665779cfb88320bd7c26b69352997450ba43b9f099ec349a6cf2249f7d89c2257f496c51ed3668a65ca3ee958944b9a79ff1a169a5758bdb994f5db576c5d826812db4336ea0a77ad3b9c099ee2275bc109369d84cf3e7382acb83d65a83e49b8f66f15a7dcf1b2ea946ce5a8e2cce3aff1747ee3a9e8b3b2797a8e37372accd615fc63730a3f097dff1b53fc96ad95b1346ac894c2935e4f4e5249cc9d14c7a5cc6cf796a96414644e9bb4dedf1c912896b034ea256543c1b9540ee182c22a0fef9997a4b0fe13961021259b30efb1f64497c49eb314dc737c3bb17d25b1a24a38818999c4f25c37c14d6870d998ee3daa092a53f87c5666c213ee52478d63ab494c50f115cd37599e944c2e81995ad8d82cb713134b5c1a53e70953492c4c2a816fa6a8923a7fa52da184d17aae3d3cc924acf866c2e7c6d968259248b828a7bd1dbc629544a214c5b4356f98852881c4e9b3c3d6f343e32579c479ad43760e558249491c714992c8ec6876664ad288feab4c537891dc9f11c5dd7d5459592ef945b82ef9c1a39820db2bc2e9b0599df5c2e47c22b23cffcf318f082eaa93e5d12477d00f910693d64ef4114b6143f45d95f37c2f4f302944a9844eb9bd2666af84d8375a32e9533ab9741064d068db252b51828228eea6eb92f1fb140c44995f92e42702a28c7d526eeba656ef0fc7d58d3639e927c9a37e3086e6944e4ab48b39da8752c8145af163a129e5831fce375b2add43d1ae715275bc4549f550f0d4896e4b5dfae7218dc88b131e65dde3a16abb5fafca517abfc3e92a5253743b64f919b3c22495933a30321e1bf33c9ec4743865bff98dc7dc53cea1ccfa0d4bea52ad1c8c29ae899d581cf2b89649f02ce14057ba13bb6ec5ef936f48d2cdb9169d74839a73b1e2d59caf26dbd05e66f6932b9de529d9806a051337c65d8bf935606fdaf1e29d901557439b7df66e3f2cd54e439227fb77c74fa6180d49e9b35c48545e74cf605c0e65bbef51c935c39aea92ac9a512d4aca90d89f4dcaea7176563270f2d58b56fb5a9b632827df3f31c978124a316042ae499bc478756218e8b5fcb37a8260286627d1fb84bff31cfc82993cc9619b553c58d00b7b4a29ef27f92eb8b21f374d997c1de78227e47b7e5e0c7bf12dbce6d983c9e95e096be1338ba9e07116ccf338f9a931f99260e170797165df83977a854ede5bd792c4c84bada04b6aba5adead18ad02726fb2e5db14fd2515ee7acb65625bbcf2a6406aced5a999140ef73497648fb9b8a250d8a731ddda24a5eaa0f04875104dbd69b3b92798f42fe59274d173e69c60b23f5bfde89a80a70bb2da6f41f5724c70f7b563ab7c72b3dc12e83bc132c7e83af62b2151353e2dc5e46d3f09867af95c7298389723a15815de363f82c133272977ac19d1087e45d5467ebda67011123627d3af9c3dc40520422edd31f9591b466995275f2d877cd68491e49673ca923eada8168cac3f362f7e88aece8091a51426a5e4999ec4ec17c52ce127e3ed6bcccc1747a7bb4fcf7a51f0963e170f1a4e0e2f7e493bd1dbbf525ab60bbafda362c911e619d3c591d9b2c2d88a5ac672518e51375d5b52521f175cf64af2e632b3a0dfc24c3153865f8fbbb52da864a2d5ab5d850cd782d050e298afee569816c6a0ea9e2932ccb2b3383bcd45b6e25497c8a24d616376990b25afb1385690f832fd0eb5c222e9fd779592d4f77c0575629597c7c5acd315a757c54ea12f9a5cb602cf4d214faa7c493f563cf6fb96af9d5594f5f156bd957b324715969860a772f56797930a4fb8b859d3725051b67cf18a29795dca3945736e173e9a8931e4a648f079ff68dd936d97224d3d3e9642a39b2c29d4d01323a2427d4f46c1469974264645415a387965baa7a2190a73f0ef3cff28a62528923cf24db4f38937a5dbf0bbcead95270c935da6a6f324a93a91e07b69d57739bc8613fdba7f74926a137a6be53eb9fb3ba794269293ece1f3fb99b8644bccd4f13f1913d8e4e68e758973bde524e6ff984c5b2259338485f954023b39b7b8b1987ba68441fde6d2633389844e49decffe245fd64842935f4a0ca196a49cc44482fb2417264a875b8981c4aba9dc73a7645b92e61175640cf19d6282891947a826a57c1f45ca3c338d68cf2ee550c9ae2b6618b126693cc87dcc228c490a255ffa2b9bcb2882cafb17aa59b3f2c624820a6ad597a454f13c22ae93cbc28c09e6a93f442b955d2f34f64636c439db9669f2ca3172218c529aefb62f782c2184521fed34c93f26940cc2cb5b226a42ab9a2a08672f63cae431d2c540d86f9a84125c635e1110858e1bd314d5b73b7f48c8d47c9a2a3fb469fd4e73ba856dfa704a72a5d2d928f788f870e757d77429ad2ea23d247e5cab545c0fc55ea6d8a99097fd3cb8991d76a28f87a478b131f97f52fa3b9c314f8b77c94ce47638e6f7c855374d61ae43219e2646534ae1b374387de6c6acab59373b87e28b65097afbb52772787e35dac6e370b8bafc999c9b32091c3ec125aba26db25cdf9028a15e7d49923e9a6e58835898c9b8283db6e19452d6ab1c73d42a366899227f728ee953660d4fe7fc9375f52f4e450c351ccade73ca39bed9a58891062c3f6a2ec1c3bd253968a03a8c6712b39c01b1f3dc147eb2538f6298e19c26899a92bf568c9b11111131ca9067c99673c57fb1b0c9a077bfd5aa948c21073e7c0c400c31b41964f0c00c346c88118643c6ca4ba12c4d3b2ba30c3242700331c060a8310b16ebee9953231110e30b6278014f0d1d4d88c8ed9bbb70bedc2f612bc74e192ee38c1c7c200d0c0001929840052222692c10c4e00261c1b635bc05a24f52ab4a92f1cf820f708003cec9f3400c2d7c56d933d56d23222239c8021f2265a2cd57979efc0f1f41122cd89bb15212770ba2962bd47772fc93db6ccefc206858215963fa9dc538b1a902de1d0d8dc3a894cee2a1c1a1482c1007c481300014b23c2b004313082040541e0c0623b168246aeb1e140000562c1c463e202024181220121009c3c16020100c85016130181408878381e06a9e86b1a0f321382943932685b316d3b89deeea1e35b62da4872d44e9014be98d0520430115105ce06db4bed536c8ef4910ab4e10f1e807afad1fc2607b13e892d5f4104481b8cc3551e1241a12bda36798d7fd1fc98b9f0f2a575d9ddbaa20c420554b99f463949f5792a651368dbc69eabbe8b8c571dfb1c096859c1aec77036ee11c2ec459637e885c46309546ccd52ce75b2cde47d7d988b93bb1b0a224b305ecc8b1faa84cd0e98b79e108d649bec69b7a51dd360b737bcc66811ae0f7786bc828c1d6b20f56f290018c23b58b71976022a6f09155d347e34c17ceec6bb04da2986986cd07e154aa9b6491bca55797a74f50560c8e1f4777f7d617b082f92d223b3a86ce6793c9959516497acc9a095c481e9d8e6351b6ea75bf0bbdf4c511a70900e9b93fe82a165726269eb3dd43ad46ff6cae6913edc19d5598b95b83c68725e6d2264181cb78d2e57af7f017e37297be88babd721615899b3ce61881211bd13f7df66d7f9b7243d59b296174d39fd26509917f1501ae8c1b4039179cd18194a05bda0084a0e023954fb6601b16c0fdb905ba617ec722307d9d2f13d253501de36613da5a05e5af05579f1b2f49ff96f0ab46c3e9edda2b381b7a79f265248fb807dff8148db979409dc2a20538c69534978162f027a60c3d6d472c4352925ec47e576b94ac36bce049efcb0a16346bf070738a71d0ab9a87671a571550b3b4a7fd675a687c71855258513a29030cd57604df50085341e823d93d5d34bf06b8543ab6cccca759dd3ae0b78885a22c6bf25efaf0a9e49ca416f2dc6a9773d9b03396714495d0f46d8991a6fc99be59db4afa23e290d272a56571bc146da35eca8b612fcb2e24cebb009b95355bbb8a96adb2791e881150586f0da9c94e4b4c85dc4bc7adb08d114cc5f58f82eb33f413d6cb32daba5fca832f220df42037a56c182ef4abeae3b846ca920aa909c014b78aabb2dbc61c9688696c40c8e523f9d3a85ea0bfe8f4b9cefda2843fb27efaee86f98bc6a3eaba266256ad582716d8f7bfdf9c5ea8a94f51f1d690de0d68f14d8c4948ed510a15859d2d01a75fc559e1460d9cd135ad882b3c765159cca94096101fcd90a732e90b81bd119750fa50cedaccd46252e2b808e5ce76a65fdf3fb2573da98fd03bcec835eacffdaa68ef40a1b325c3b42e6f369830fc39b98d61438f4b627db962ace7d92086f46bc1797b03aae835cea9ba583294c643d7a22613fe32e9f2bc76e1872534c4aafe6178b11a20b680c6b5b3f2762cceaca53745b53368b9a35ac0ce7661cd31bed32c0146d924f897e26ab3ec257d4ea3364ecf05b2dbf4cd99d54473eb772d7df3ee3eddf46fa7651afc05b3cace17d57da7abafcb5e22ce588800d47941fa79ac12b13918179d040685ea45b224e4601846591a6c17dbbd0ad001b481cd857aef365641847a5df5321dcf2a8f722a36031fb8af63fd7e68dfa77edd587d3ad6adb10dbfd035f0d61d9201298689eef14ace8c635455913a5c16b767e754f3965447cc5325d4c1911420f81a62e44949928e1072047af35fef3b16870c81a2c0a859a47babf3e508f5d67033ed4ef970c19f276693f47cb5bda9c1e7d5765ce1dfa9f5abd27fd3fa75b5f3690c9ab48a75336a3deccb718a827394c4164faead868fb54b6199a5341cc0eb567b921c643bc71eaf6fbf5aec56ce3ebb59ecf2d2ef3b276ec267950c8f86e74d72aec633d34feb3db4a292590b116d11bbd5f2b4b37a567c5f7c5443b119fbd07d9deaf5637b3ef3df39e41a5f1eeeac0566c9ce75db98092c41fdccbaef350c715f63e76ba8be27c5cc3395364086ae92a55bb2fb9cd23d8fd570958772f5f1fb4c36c898e2772bbdb42fb5e616dfc0f3b67aa1470b48652e225ac41195ae5f26e90e4052268c569b058bc60175694bf3e0577874ae6a4e23568b6d717530ccf5c518d7f3277de289225dbce9886a39a5066cc51c99832cf1ea78aaa03a2cd5d28c073d39f9fe01ef0737e01901f1891ce3a7ecc15e0bbde6fbbf90ed34a541cb15222d6b954844421564a8c7d9e159b1b0fe035cb5bbc1b427fb8d768afa69f441022c976b55a1b37c766375226fef68be7cbd99652cbb534a0457123dcf9cc387b2c576d051e68e4cf32a43f6755832c8158272b1e558f053b0120840a3d8042fc644a71454202f1a3858ea7013ce79dd9a9b2e7f2f47e6fd2f1f810f328a805d44aa01b32718c610b7aea189bc4216fb308827a762cfb482e3e3567cc3116b9d8a09f7c29e06c82b86f71b75ae95508781a95b124c1f9c2aabd8a2ab96f64bc5044245c62cad0dfe9b07b9cc2da1914eb565d8e49639be1ec34a492577b4cf1756c60fa539da8ba06e25f5e247c7a02528e1e72e6c0426aa7aed46429ff6073571d4c9fb3846b50e711f02bcb2fc1d7290c6a8ebe56c99b338c06c0907ecc62af3b24abb4817e5bb7662e331e80c57fe53863835f579de8a09172b4e28c058927d3655f7fdd7ffe62983496c2af84250ba9ddc33200a914129b50bf4b1661796750d123086b10593284c6d7158b130d0c2aa6500448b263319364d8429051a64dac2218c281397563f807c5be4609c352029a72e18d42236cd4a58b78ffbe6e995c95bb56c41e600a3325ea8f97f6a4130f1ab56ef3d0e9f0d721d3d52b48f54168bb63c22c7fc4d4d64fe2e118f7ee66c1a164f6cc5dce2787bb83b83a54a3056841736dd420117c17418ebadc8462a71f21f6b0671f2ebca612f5f53e831ed58fddd9ab8167d2f46e9dc238c784b01d9ea59ec0b1db9732a2ac882a0375eb73136d3d144bd7cc8a21bac4491381fcb55e487d47b677fe1632cad7d315826b9f61e9f7fc7c0559c7156374d1eb92ddfad936baa42782325f5dbc31502d17453c54e6f53e64bce18b85065b8e0b99f9710d64e1d5216c8629da440a4b35eeed7c13ffc6b2cdd04056f6874bdb24e756847c9264ec68f86f27ca62e937a9d2c8832e0d4a40bfca4a1356f8d5725f7ebdcbba65704560ab35f179997e2c3221707509c387389802a31ae650e845f937339e909ae2f156bb2177109a51ae0fdecb61a3e8edc2b7e3c51f1c7881293c0c852be80631470acc57ad2256dd5b217ad8691ff58945c0c93316dc1f184a114372d9f84df4d2d38d99a2175139f6c73f9d20b01fea09c4bfb9dce858c913449279b126c48749988a4681033a0cd06dbe202a03c3d3e29bdbad81ab963d6ef2a48e9ebd53ddf0b8e673d6925624c56f061843f2c67f5c803f4fc83f99f032bd44d4f4baa1904e671af07e7bc689e3f5de2b675da8132e2e89399aca60782dcf6aaedfcfcecd87c9b09dcb135ec426b82e642d56a0d30aa7431cf4ef6eaf680ebf1ee68cfa54b66396596b86759009480083bb66507864e93ab45205e5a1616711d16004db07ea757c3e200e19b4aca5104301d4146ee8274603f061fdb2d6cb39942533a50a4faf3e32671914228f69bd301881fe9c676293af18741e33611b928d82fdfea88b043de9b1ed6a6d2cc7162178b13a8fefdf1c4b7cd077547878993299a873e1fba144ea00f6c34df5b28d24b92141df6e0ebb7e044ed92a3a1b44f267a26e780e9ccb3350ffa4371261572335a185e0a4b9c37a15e88ec422e0c3839e44a80f5a47e8c2fbe37f95aa1f06d217a6db2fa5008162e953d49b977b21be60bbf8a7924e4cee9a270532f26544d4ec8c672f5f952ba416e72207701edf7bdc39fa0610ec3a1558f54295e7db6c5af7beb6b58714d94d78f0e49df704e6d8d3499004b8a5fd045da371f91b158da06ecac64dcbe48327019fcd90ad3c73c3b056b8a53a85e0f345d7867b5e9e84e6b932806650e2a5247396f03ea0c8ae89bc4952f40cdfff5a8b1075191c72b13995ec82da97df58fea95e43c46bce9a64a363dd3758455ea51ed2cf76f34c6a69da0fadb8f8a966322b462eca1aa9333016592d77ec9073c85293c36b0ddd3a1852574e8fcad0c2e468a59c2ea622a359fc91071c63eb57073a91e2cc967f046ed7799cb26803ed3a58a341bc7cd7dcb1baa24b8cce8dd91a69e4978a16e89e06f7213c46053e588a62c03e3cab02778e8be2950fcd7c87e881580208d55277884d16c53c89f154a1d1e3f18bad42d3490d33063dca7e639eaba30d4a2a117c7ad038b9884ae77f6e62fef21c1bee81f2380821ca0d3ef188fd5a42459e526f2a52e61c59af186272f1b07d2c4c529c7412c2ceb6b6c25b3f6d66537db56b2c784b0c4ebd5f00e009eb3b54e027e5254095259bf0892a0113c36541aa89c33fdebfdc69865545307478cf349d4c5b31eb0252b143f8de0d622812d71b6820bc842fea0322b630794639c9b6dec7ae70e0f9fe7b901e59de24311d74939d52626b896e4c7698bddb2a496593129f15913927068a74beab69d42d248d0c2aef82d8a62b95a5cf085444c1db33e2dbb170d9024de7eb462772beb02a96800c22a6d56ff1172336520630d6fb9fd4b17fff217b8f60a19f5f5f375b241f7553ddc6c6466a84c710cc502778818e508828763ce867e0a8b514027f2e8376e3c1c9e7739889fb76e643cbf6326d2cc6a8d8a2d1954fcd49a803184aedd1fec8701595c94c6f2ba8140f5916e65a0047e59d7fc76cfeb3de3d31ff1d2a681c074978a3a8a0be88d13abe73d7d34bfd9f0e932707f6d3b751c5dd773ab65caf6ae34af8f47b69b6dc6f0ecd883c72eb25f31dfd6c17a3fa44034567d611870f3ae94177aaedbe0839fc1c6e0e6b6de1ce24f0cf067cbe6d1418f41b904444abb2474c844e1269f8306765d1ebbc2b7251f03426180d8894f0a94f90cf7789eaf109da85349b89b0542171878c36c00ff420dbf1d1749715510a6cdb3017517b8538bd7d63155c3cb98814970782cf8427a174c777634c8dc43715003467d00909a65d40affd57481e7064bbbf592f1d92bef2ec0fe8dbfbf92baa51684eee88f24cb6aa082755902e0810838bc00d5a8cdb20044f637d0baf132f5b1be80ff09ca239322a1506d4e489768c93e83339d34ee3674d23a9eee2b16ac050209afcefa953a1603048d4c25f46325a08ff610c3722209c55998b628cbf2d71a505248fa72b93a21fc6dca31496f2426d7c53301af819a7e2d6cee1f23c98346d2d9aa6156145a2c9a8e3922c99edbcdcf3582cb506decac35b7468432258e7c811c9ae17014dba2d0e747c73fbeba8f2942691ab52b9330d9729ec2391657cb12f0c77238029502d13364c89ce974f1b292072d80cc34bf6dc989d785109d0e1b7fe8e2f06785233f94ff3ddff9a4b0b81d6ccd11ceac07d54ab2aa240fa610a886567b2e2b5a5e6f35dd4c34eb19e39638fa86e8a1c378ae83e3bfddc5031ddac03fd01dc649aaeaee22a86b63ea433462a3e0379cb66fa294526098efd0cd0818d0927cfd7ebe4205d2b660ae719af7d2d819ad4081f1fa1999b71bbe8d65af00d71b94fdcb307636c77683655ad028507c0f03980055081715124f93e14ebac08cd417f161daa2c33626673ee936d893d48f48c23463a70ae552aa017b20074861be9d11a30754113b28c18c7abe4fd34f0d46435a73f9c1169e9b2241a80fb50cec0caf24c1402d04ae3f3152719f560306d322e8e9ea4eb22573bf0e3946409aa4b3c55a18a606f6b69e3a61894ef9354358ba52778f690250fe7e9611c9117dc76f4defa10e31f4d179f61391110518cb5cba4d0edbc5bc14bb5d98eae08d84c3bb552f99ac355e682cb6d64b01944ae041419dbe72f5d06a0ce3d9f3d4f75ca8665e90325473b2557982929629a1393398a381f280bc6903d56c30766ccb036afb6d20d8eb0bac41b6aaf009386e3984915570e515e5420d49fc5b0323977449180e4c56a2007bbd6b065e6eb1563406c29938564a3ec6d5c0b0cefd6b1cabe652f02c01a2a29392c97dabe98e8caf217d09f109dda2d646e1d5dce4276b6f304794282be5b8e4b058e6838a5319876b89436030ded2dbd89e8608269d4812cffb0358cc45bd600a2c5852d0e7cb1195b615deb7c5eb5bfb03d13b17d7045cbdcffe85921a4215b24348fe7fb1fa718429465e8963eb9a4327012ea7d27da92b54ded76397bd0fe2611632bb3d1e700ac02cd06d3a0fcb13137b0571f868cae00f636010f9604dc06e69c5cc3ecd3d5e0141dcb7db708e0bb55757c9d909627eafd0cf56b1b918c9eb0050b0cbc92ca461eb3bf4339bd03949010a88c5bb4bfed7943a0f0df2e9d2f4bc79f5cbd35a8cdaeceb4b3215107ae6a77cfddb0b36af22d4ec1cb17ef5a1adfe07bd7a2aa2ecdd60fc186268361280adabf0d6c24df43423add2e922b6a68de1b4246d940d5bc24ad2db909756e24b522b84ad23b994e98646f5d66d04ffe9d8e5fdc9231d1129621f6c069e90f67ea86481b77258b1218216dba4dcb2441141fb61216e1da3586d0a81430233ed55f5b416148b493e07e5ae5ff7352fe3efab7898c2815bba205e7c558033294750245ecdbb64e75dfc3593ac25c0150c40517ea9f4ebc23bfc5484b63edd4fb99c9a5cdfeb3983ada01baad3f003255b3e866e9d3755a580f0c0d80b3901070e7b06f736712b4ac494e7357194a5000e5baa07ba3bfc80ae082a923975742e8e35ce886409a07dc8e9f542346dc530c2563828806d6126e210d9bf8aa8fe9ac58ad34599025532ab51626f194931fb30542d9013626932613f8d2b2257f4cd228648ae5814b46b510aeeb8c0f4fb22d43a54c1ba99aad0cfd2c43524b2165e70e2c2e926aba958fa0abd395999eee886a23b1bf76b63aa77ec75de0df77e5315390304b5201a55b1e1e8236fde6da7eac4e9c7ad41db2e81ea380551789fbee867c2970b2952b7a060d44d15e717e0f6a557500d7ea60ed86662e409fff19042287fc0e8732f280161587972d33f8142d4d912f373a727c27565706002e9ee41344c0e71a8f127672dc5074d3b8be0c14c3b6f045e714f5ff4115a50734ebe7672a3c5f006c0630277a2ac1488f55a60a176de723deb14b51ad1f8ae2266234b3e81df4d714d17733aedb18586ec43810b0e59546a3ee7cb93da21966aa03db07dd1d2563eae1761f9e172d78fc56886cf711aff27407c64a59b72fc79f824cfb5f166ba8ed29b9d0a9a14e1c0c803129b69560356a52642b39417882fda1f02c9d3c8e5702c199d24339bac1f9e238604998820f07d28786d0f719464a6b8f18ceed641bc20f6c7a2d478bf3b387928b6bdf86a226f25f3458d8a2b72555d3c53086253f7fa87e6117b680d91f7386993d6e46cc73c6cf56edeb892856afcadcae80eec15a5155e2f4a3dd31ac822d6b990132f38e908d81273ebe6b26fae17b46fe29eb1dc4d73c159c23d3f83ecf44e99f1a4ca0fc12e620fba7b52765efa77f1524f60f5c6be2f1a6adfe12da3efcb06c8b6e43fc907ce6df7a3edda3c0bc831776ddf2a08b0710641fd99895caaab3e6abc3716f86ab52651e97cedfa3909d39288baef5fee2e59a370b47c2f434faef9ef0166028271cfb7a946e945e80b395fa413ba35393372c6df2968269bac0c197bab01d6b326d33e10ed0cb267d9ea6b042fc02307ece29b3c67802df619eee6c60ce7c0a2a49860306117595dd40bfb12dc9803b0e0497acc951d605404879ea263d02c57cb63926029bb0a1238b12b3ee2e99adfa7255a887fb9afc9443fb4e36d4cb7132b26ec02ed625832a9aa6d172c9f9f28d0aef830c35cb8c7a94a5c17df4db8df653e7c0819a22867d8366b348f4d7aba6e835272ff96af12e2d174bd189a39b6c41e2f5eea66d0ae8a4e238f81209e18a22124726d6b5e35ebe5576ba45ba154f565367cf6cc5627084787d2cc5e8064c6619f11b5fc0477ba02539f669a49080c96cc8a86fb71bc2f880a19242c6197c9d31d7f603847a5ea3b6056519a8a94fa6b41bc3af71712f81248918a9181426249aa5f3502235a2fc7e2643f414e091c3143a8679efa0c795358b9e53d86331db70f8db8b1489114169d8e23dfb5808af84a0f3b21f407a8a0614bc6bb8fc894bfda2ae89cbb7efeb16399d51b469e9ade7179b6dd05d987274d72a653b3b49997c2a073b5f2a9e834381f78ad8bf3cd41f3efe63d59216909f9f986fee309ddb21a17dfafce3cfe12e236b63fc66a0f8cfe4d23c8edacff2106174ef373022d4f20053e782910c3c6c270f1d6861e6dfce10a5ca23cfc22d06b4e7a5404c806313475baf222bc4a50008c0f0bc7b469f9cc0799f72b5fd15af7eeffb9830e571449d06d937ac1f1349196630540f105943ecc68aadb354624759257f9e0b0703981e58717be48fe5248393aa7449086f3522db55c97ca934a3e6de72e9d0c9a3628e808dabd70033f61ea619efcdb841b9ec4e9e3f0c7268611aef43b0cbec896dd7f10807110a8f2f3cf439e56948cacfe42be06851054371d809897fe1e695d941d5ad4a2b78f0bfd26a108f2ec975c05d7d61cde0521d579a7a2574ad1335a8bdd0de184d903d09aff8627410f081e52de49c9cdb15770ea7f98ab53773193daba1cf8db4383ad97158732c9d0285d34dc2ef0b1913e94cf8281561c21e245aee6dc6fe989abf390db4a096be5e64e31453d519e4372b13d990fd7435dc97953debdc7930ee5eda23ed4c9d165e0b9dc5b2304be7df81ef164693c0c2a94af274f62d928b1802ac587937ca735f21f7073cc673e0ec6b7357f746fe5902c8036e025bf390c73243370eced38d75a5e6adbd2a21464f41ca2d2a9b2c99d08c89fa251ad7cd437e2e528cce8a903859e0fac35076b7ff084caabac03bf83ecb975bed5d03a1971d1c7b4ae3a50b28e10b293d58d1da14bf1476075750b4833579acb027effadf2cb6933163f57b963a8abdf9d2b6e7f47a3c5a5e51f04841db0bf5b302aa894d68c87a7843c873f49869f8f4cd768e0c5255f6b38199df465cbe281b05f5b4614e630896e4ebf41f11aa055fb56cf4a51db8a8acd2a5e46a3d3e9009fb9c08b33284c05ec54f40f571bd9796dc2b83e06a99356abcb7109109a8b64abfdf8aed6e9e6f34f72118ced25103aaf3cfd21e6a0002223e24288df8068892a0e809f70d68dec7f7566f2fcd5d56bfc032c442554baf2274a60e363541c855eab1dd56641eb81148779a0e90e6ffa068d20ee58c5899476d8b19379e7299b9ef7568c5ae1b0020c2c683688bfcc92c13550522c4d8a1dd44fdfab2ad30306d14129e89be90952e5ca4cc8932cf0ba224af7e1554a0b55af4e2450a7d2f02f957611f8c8e06c6e63eb5f8252fa32fd56b5969b2b13fdc09e246425a3bb20b01659d7743cded222fd81af44d55292982f5dce496391782b5a70054963712025c495a7cf91629ce06d99fd448977c2f78313684c6cad5312e0ccacca6ced253846d58726875cf4d729c651c9818e5b57fd2299bde6428c432dcc1da190731161a7afe59c329d0d2cf2d0decc72533b2224d8928d68a465c557a0561496f3d1185f0643b0e883124a571cb3591f189e3a613f02f05df76dfda008c5138a8f264da2a6c57fe0df0b411209ed8e5b7e2c8c5811f0dc7fdfea97d5f6e01d39a633c70e662ee61b9259c707565618a7797e8e87c08eeddc48d479e3110a6921072a9a417b8093298958d54356de3716091ed587515ac3b921eba5f880c4001dfee51a01361976578458b5555d996506afe40a2c82ec82d92c49793ebc2d3449b87226b155017c801d0f01c01c2eef4af242595cdfc1ab37ed745c3253cb1178803cf31c11da30e5ff1abfddc146b0d368a2a500070ac5d9f12c7f8af87fef7ee2b127f9cb4ed649f707e30c72190c15dd6ecfcfb0dc50069c6f489417717fd3c563f0c4bf567d3a5e76f5b76a3727bef7d373af418fd98955b14b472dfc89c39e7ce8d1172df58383ecb7c133abaf6b408119ee703c02bebc1c4268e2e1202ae61c6c1a1d29f938d39d9450ee2e9f3f2d5d1baeeb5cd7317fe9b18fa7405a0bb30bf6851e9fc4aa68b965b8e4a6a3bd84737862d1ea725023d285b4ed4b14240260462bc38d59eda7c75484d4a1ef53f29586704c80e7ed07e8e8995d31eeded9b015ea818cda1797d4d40efef13ee1fc2bc14e7712a59f279a8cc5208a6c1943f4f2d807f8c63cb96fc96cab6f3bb91b7d1a451ee230c085b6ce9f6c4e1b70e456344b4785b21a19849ccf186ea3849988a8d01f98c157a45c7c2dc8012d09119148af7396427c3e554044c5a3d5191fcdc244c79a0242d2d7b8a695027df393d19074db339ebbd4b9ec56d2bb7904e62b467ff107a9f1aff03e8ec9e8d61d95d308a5efb8eb5b99effeef53a06d8594a4683f980f8fbe5abcfaa15beb49d26e42ceca45966548dec1b84f5edc4388e2e672123c09852bb80c4c182d1ba4d4324675de4422dd2ee5a03c881e6b7d16e9e5b99b2f2d035424fe75fa511b7d4ea4505fc3722cb19247c9cce9483252841e173b89030c0040ea1cdd74f4d12ba2703e2f9c48973fb4c70dd02e17e1979b9b1a9fea555265fc07ed863ef26a9201f128ef37c90f622b680599b0b98a335a91082c3e445eac51b0c61938c59a7ba2eb0082e12efc39326d6bddd467a7b2ad00ab5641352684c2fd7dd3a79184b98bd8698c54e7006662c570d4aa86598698dd9bc394d370799f784fa53171b0d71ecaaee6be62a6919da2c4dcb46b5437bd77c60fb6c6577962554f859fa9a3a1f33297db5a8c6abdac2e702c55ea8516d312ebfe61c1d3b6d5325c76cb3347a43ed9c479c53e25837c912fd690a0893d213bddd91b0baad71038c34d2e308a5c2b91659e9141a839814f0aca6353beb9779fb4e8347699b0d139964f2bc787a0b03127e5c0efcf3cd87f6c5b942e15f5482623beb44f34e913f15aba358d1787bdb2a8cbca3edd34e895b738a379a5757a1c485da3f191a7e286aeccb56a22683aefda49b078f884e762ba90c6de17706a6771822d6225421da829f976f5160cdc75ce42dc1a926290bfd84105e02334a1b4ad312e25e53c30efbb9a433da7414f022f71e4fcc5fa1043e4d6115393a262550c976f9ffc4217038927d21cd0dcdbfc69a88e6ba48d110512ada2f6d0cf5141e4a02fbb6cdcf2d7dbcab105f5e576c00928974defec736369b7331ab4bfe5828407ebb76b4e3bf289bde93d171358508270ab432848fb9da5b854d2808af650ee2ecc3b2b35aa839cd14b95424bd7125f146dfa12167701fda193317c718d1e82b4ab84eeb40e96b35c141cede4e96292f037121b85826f1b08d31ebda52e7cea07fc217b8e073415a81a892f051eaf2e07caa08787cdf891a40d9bbdf18082ca1edb404e67d2b311acb72260c63679a7cc5e81385359aaff1e94009d45c81f3dcb8ebda8f38e223950f8a9f4a296abd26ba2d4c45f0fdda50b3df123b8d96bbddea882c37d043ddf8bf89ec7f48b2812f2d1136e2f100b87f279991f257195e319d4fdb0f0726b59459f330a33935417f1a685945a9173c25c139f6796890cb423b3674688a0f5d8abd105391b2cd4ae378ffa9e84257cc56e114711003c5d4efce54ec91a2a785dde35821723422988ec588c5226ecb819ee808091ce1a442ff17e748c3b353bb55d13fc28a3740964990d0e38eee0983106d9a269e5d194bfc5ec3045a1af626748a3437904c19015d6934be8c5aa5cf9a99b2c14f59e2b3da5c2464a976ff7a64e422a2890987ee09dbf9dad1121dcab8fae93258fa12d1d34a87faaa8cf9141f54e152ec4a30ec83006ed462c903f384be5843c8a91e807fb63411d0eacaad772f5c87afe1409885894047dc1ba7d102040b1bb96bb991871c5da472f5c0ca78544fbefb0e0d8ac0b68cd9fc3a263bcce26a1bfa43e5042accf070ba83870e78afbc36cc0178ec42a30d470212452e3c20bc08c42fd3e79ae7d0eb97894ad2495f8ea086705fc58fb29d29146289f0ac3237fc1bb39f98f12d71bd99ad2b6c6829f961718af78377b4ae9d3d9dd93b793f98d0dd94458971869c5ed51d31cc4ff8ec2bd65c84d337bcc507e69199090dc3e1318ba512974117fe26ca53834484ae7ca235be57a46752ec147d90b4381be448781dcd2b31f7ee96fdd5b525b0cab02d56a3e86cf4f48d1d2a9edff5960572c3c1b751f6798c0d97c05839479d7fac9966b5a32f094970b90f31a4d58915fa96c4715f01b616b273d45f945f2af5054843e9772a64a2511911aa45c91b03499b3adec69807445a1e12637282fe9ee70923b4a7bea50a2510a272850d7d6adc3038bd5bfc612ddbe61003b0280aaa296851a3dc856c28beebfd79e01c0472d30c0b0094331a8388a87f5772edb6dcd7a8d7659200e10df4a5d48830bb7d05358dc4b5a6d692afb71dafc5b5050c85a3f9d6dcf39e0601c905b36eaa9bbafa5e386b9ae007e6f1063b128a278c72bb3e0d13a42150d1a643fc9a26cf38d82e82f9d455bf0fc1684af54d7a907676443355eb31a42710190714d86a22616f0742daff1cfcdc4eb005249eab02873345814df6eb62458183c1ac1e6c3a89f91893f9adfa2a679b4a9b8c2606c198c22c8b15d6b05e509ac0d29c2359162c5bf6893413fd8dffbfdb495ed9f28c43705e32012e5da2d22209f86689407f2a56498d0dffd5e2f3379ec1479bee109cfd313f34d2444b11b0e139cfa5c169db120bf46e11b5ba5a09d758b39f50cf97a593baea00fcb6b12f66e016ae4b78ee1edaab492a76cf3b3307e9b6c62267ceb12591c94a0686dc1a548ddb1cce6610b2c7bdec910a61a571d87859adc19f40d7b7c889aabe87cb115b3ef08df15597ae3cc7c6e91f5fef6509ed26ebe74e6fbaf1016d5b28fe28385dd3cb52836dfc9867643367127d0c038b3d1377e1654548aa1f7b762f6799666ccff9b4d68a8814900beeec9837e8a62c89fba3040ee17ab66d26bf4866f163ee5d92aaeefe94e7d8cdf8f70813a43cb63277e833b6159307851a5016c7cab263e221004f0797fe9eade7ed1eda218c3e1f02d17f1b8bf72f6710421bb2d49af0ebdcc66bb9a536d78bea5034e686c227aed950c24a4c437d35eb38db46388c01541a5ba2453f7070d7e92a69bdee32bb0f561b2c88cb40564402b2129d4e6ee1114453d825c3152c7c07ff256aefd35fe9ebeb1362b4a5f3e36be62c03bdb20ca7c22e8f1c3d6ad8d15f62b38aa79f5252a6f35c28cee211462798bee1399cd71ef0ebcc353190e0018dbe4fa450fc09e92536cf722dae3cceb50e0691b3792e942a40183a1e66baa62bb2fe9e0d8fda3c0ac9217476b9bb72fad3a1999e80d159ffdfc590904d5168ccd2bcd190239fd698780ec45c921ae554c9ed5a24050ffc6df14f8f1fb12538ef4cf3aaa446f511e42ab1fe7f94685e985239246ca51cc46f1cc80c7d48418e2e292396a41ee578c134a716442ee9ce8780eea6e3870ba0b1b1d5e15d6f4e147c80c442233f6f71c54f8e8ee02a0239be34dcbec97ca74f36f4d137c09e02fe7839d8d8bf9dbfaffce28a3cbc983f97653751ffd26ec449831f219c6954280d539c085c132ba24fdbb49ca515e6ae350170622c8c622f0e1d4386dcc235b0bb129211dbda777293e750e3182a85f4da0c0b3ef8a60c488d8902b08e86b63bdc858b3cde2f634c42c6da5bfad9bb65971b6fa240c0602d56dd2d9c65d1b576c0317b09d5f21c60c1d79fb56dbabb4edc6b698dfa4736cdec47df5b6dcdb2666b666e92032c451e573357b44d9191707be01d3d2c43d7fa130345f25d1600df5467fc2d2ab04bb2cf03032b170b859e57c022b5f53b0afaa68f5fd11bd81e6fa8f6a263f5e3d875b69fc2795d7ecfd68c32a65db2c6c930925332988a9159137497e3542953b554892922e351045278d088d7862de46d81675c7096a0392c94e712354e636a6df5cf449775756e8ace752f692511b5d2144dd0d4b447f3900a8977ef518698131513c4c30713ee2c47a6fbee02a53f9ee16626b096497dfebeabeb66c3fe2d588ff330250a914598d20dfad5f9a6b3157341ab5a4cd5cdb59c90769c2a86e7173629541a60b3c7118f4364caa8ed7fbeca00a4418125d980e1ef77c7988173d912574018c01a515015ae9654f3650ae24c901cfcff033fc0c3fc3cff033711f11fabf087d42f021735332bd491553804f49b2256da0528702c06acd750b000000b2521fef04ba04d4046626715f6f3d414a74001831b8e4010d100103aaf098c596924bf6e7cc24a54a16dccd5654f7f4f9eb138b8428d19aaf5b0312b8a1811b9fe3010b4a92c49c623c6be6ccd9a041438cc5f17845afa169af2aa3862bd0904b57393f7cbe8f058f569c243954b4606d52ec30c78a0183072b4e1a3d2324530cb7a4e0b18ac7c259464fc971a62ae3860a1eaab0fa3f336e9c5708cd06182710018e11e4b821c6231586f3ae2cef168d1f04a35d05220840131ea848772643bf899939666ce43845628979bae0618aafd24dea34887abc67f02845656a72ee4aba393ffa82072912bc35df945cee713119638c4146e7b8d18f512c7a177ab36c1b354e20821c37fc218a44ff7431544cd2b9651b346880710211dc7884e224670cd90f1f3ddffe0728344bbf8bd0c814bbf3893e4ccaaf62954992b48287270a636299bab935a5a5824727486f2d490ef331d9e99c287a5434d1040b1695df846aaf6e25979cd4414d60ad67492eff3caf990953d0d4bfbe1126ae9bbcdddb0b19837a094dcaf61534bac9a66e09d33c6ed24fb933eff5e0510993ece13c7d44094e54cac4564d92a4ca63125e4a7b6ecf6dc1f3e721898305fd8c317ba7bbf688c49b1e97c9ea2fff49f280c49db39470827f8f4760192bacb36f6ed5ac2334a9d28cd1ba182f783422a9d5a498b346060fd7070f46545b62d6b9fa2292cef1a44d62ac0873c8edc8141ab5649388d3b4e593a05142878e88ae844ee1ee2fc54c8287583ecb49fb39b64a5d0cf1e6d458d3599ec287856826632bdd4d0841774e4d7e39ea06eb06a1668a964a9a3b00c64310b7cbc7f5f84134cb1488dbd5c42e59bc73a70610c6d1df0e5f7fb96efe439549aa0c156366932c7ed8ede4641932e46a82471f14937d7783e7ec489f0f5ccee2a1f355698c13123cf6b08951299ed7bbe43c2278e8610b6e7782c48496e77958f3cf5a2eb94d755b81071e1893ae3be935dac9dde30ec60ed50db1e36f96b643db274d5f788c9c9f6ce070336e781d28ed99e813f3e692e4d0a1fbdd6cd1f26bffa30c1e73504deaf8ef97c3d34be470a5989864f3d98d593078c481d1dbaafb7c154f1e1f70f0734e1a2696f882c71b0cb96f7d5a75c2698e1b922e55366e4dc1a30d5cf494d2cad53668d058c1830d9ac5fc1a4226e3835482c71a8e7b13736c68aad0c678a8c1e851dbe0f2193c7be391864eb69c72fe7e678ffa030d6a92429574827b8eb939c339a6c4b4daa525ff38dc060e6a6ce161066caf476c335450f994e1faac94e6277d8ef43668d0a0c1830cccdc96bc7ffeff92338682d5d749ee7be11b13c3499a0c5d52f0ac50d50d1c6c19fb08c35125e512bf23d35609860a5af000835e1bf6dd15eaa5ce2f24c45efac73c9eab752f909db26cba2e78a9e7e24ea5f34d9a0e3cb8502c295e56aa8d75cd630b68b4ccb40a3b2945c9430b776a55f579ef9185448bafb9c2e4246e4f36c2a8a1831b5bc36fd4c041468d143cb040bccc796e8d785dcbe30aa906cf99c49c7e58a14f52e85509bf9b6e03c1a30a986852cdc54691cbd90868d0a8f1a0c22e7d9b647de557330b50e03185e432f9723db7d3461f5238442b25393269755751f87373924b9e0a145e8ffba49fc34fe8c3de87137895b8b87cc184b9cfa309497256cc9ee52e554699b069be24f9a75b476e3696c079672a4b622765e84aa8aeadbc2e7892b09ef6d87f2c794cd60712e8e990e1545ef3e8477054d4d75ac34f760f8e8711f892d4932465621a0b9111a7cb4a39a1323a5e71926437394a345e9e6ad0e18a5678a2b525490cd7b1abf740072b928412e5c3fd0995ddb30acf54cbe5ebf3ec2fa40af44f663ca5cc96fa549c26c5ca9cfca9e72bb4810e54a8a9f7c4312d217bcc5314d333db751f961f7698a2f23519cd34be7549ce6000133a4a719bcb49f3d353b92d292ebff93ad0318a46cf2ac6287a6d53768822b1356f787d4f22f293d1118ad54e667366b2d1010a7a6ed3eb7a7ed7f73fb189c1c46a37c790d1f7041d1927c473f892f44eb8599ed22594568a73c29c67d7621bceecddc46bf3a929b49a30fedc4f68fee9707a268a6a61a4bc5cd63dc784153bc6a764fc126634bf8de2294e4e5a428f2b556252fe1faf129f6be7fa5c0e25feac9fd4453a935025634a93caa4b48e24fc78f213a9155172249428b9bc820809c7a44e19db7b44ef92c12a87da11e5e98e0e17ea461c34ab7ecc9ec9d3cc8ce8afa2f53d851791dc51fd4493a02b1f459817523b5abeada913c164e731e1241711e615d1981fe2dfca9a2fbd1a22394ccabb2b16c21013a16653532124c4196d378b6cef576510274136ffab8b4f452a08fb2d443ec67d0b4f209455cdb7613ee99980f844c33b6d93c9b9fd8134593e78949824e9c40f875aa7b534dbedf48136fdec71c345c6c287a2cec97aae96e48a720f666fcc641dc674f37af05737d8e807f370ccfda1b44dc4c3e59f1f932396cec33b589b529d31496515433b1426c4d96cfe8f4b5887d33eaddeb86f3e3974a8a34faaf41e56639d03121fa6521a8fe1bd9343496343956b170763b40b5b7b2a9725070777531893a5f23259ee0d89de79b3b92a99749d1b125736964979f196356d30850f1f63af6c68beddbf2fb69e46cd1a28d97c46befeaf47a386e345776bde0dba9a4983a12a77fc731acf914143a7b9259d669c6cf719aad18dad922709729b194c3b3b6fe265c04a78b994c25946930c768c5bedd4bdf3958d01b1ccf41b24e7245b0c7745ad1e59933050eaaa9b4a0483963263cc5b291734c9172c317b5ecf2f66cf122f383e9f633a29ba4fdf854f93f019e6399ee8295ce8243fabd30adada295b2844b44e36b7b440c6f4349d2bdea45859382dac8d4509160e99b62544fb2fa5ea0abd54fcc9ce29dbd35660a72f9b468f67265a85928da89c581b3f27a9806487bfbbe0714e6e0acc05d1147a518714126c24742c6e4af2af3be88842994af2784f21952aff830e281027ca9af831ef78025a194ff64b9b0018a1c309ca758c5464dc5039273b9ad0c18424d30993f22671d330722c81f8f46f1afb9ada7d184a2854a527d3d42a1dc771818e24984bbc8adbfc31e30619387e031d48487386314f33ff6953560c0a741ce1fd91880cbe69b2f58ea30c0d7418a1a4595749fcf24f5fe236729c5186053a8ab0864afe5152c36db06654a083082531495cde3c5f72ba876066938fb4d8c97c7331cac891810e2198d6627fde29cd59d18e20109fc4d10aefab030849258b49db65f2f8451dd3ea2d8baabb770f5fd8e9225d729eeb3069048f5ea0e1b9c65f462f75c38b2be956de548fad551ebbb8a2eea6942755e3a18bc3688ad96378bbe8a50d7de4a2f19eaa28b936a87b0f5c24e6789876fc8afc718b2c79a50d936a52f09f047ec810413d6c51dde68aca38ddc04d4083c60d1cc73f6a91f6465d5ed8899f6579d022640c1af3c9278416488961f9ca4467b1c67cf94a726fd55b21b210012416b0784539ee79d6726833ad5c911c6761937ad48a2b93d499673e9ddc291056f4a2feb2392c34570a64150595cdf1495315c674aa1e3459e80e995474b9375af55f3f5f0c828a246966a5be249101e41497247adfa5e9b0b5e90b404c619e2494e593b1c8b24b29c5e1db969645eae53a148090a27c25cc857eb2b23e29096414095d1763196c656fae12c59d31d346cfdef51f8784e290f1bafee2cc778762000185b9e27e7677b9fc97b200e413ea746da5f1db24cff8038827922d33e74c41cf33a5a9139f69ce5d9337837002b2092cdc764e6f6dadc40907104d249e1e3e553bd826e94c606296c27e0a236dc2983894bb79cca5b1d9ee259c34d18b2657209658cc43e4475f89b42c57c52be973a74e892e6bb6e5543efbb5491c2693662da182480293bcbe82680793b5038944af9d56ce3abec694f2000289c2a6a5fba7cfddaa90479c2c6992a63479f5ac038823f692b2efe6587177e39046ec27c78a9a26c9887b4acc97c4ba642f9645a0277beaf93c6537a11b4014c1babbaf2635cbc9e38303928852cef09b39fa398020a20e71e7277932041502b5a8412bce9f9016a7284008f159dafdcf91b7bf181b350671d699c5ee70712aa5b6c310a304104120ef299d49ee61f95e110112086eaba693b47a39649e0910406c6288dcfb68fc97493b80fce1d5932c6c850606c40f6ad2136d54c23e247d521e3fc93d2d3605e18319d37a7bafbcc99f7f00b2073de421e93439e51425bf29b201c183a1648dbfbf30c003903b9c736e75ec8f1edebb1d52cf9da28a8c75481236cb895bb962799c0e59e8f4888a2beb1803990361c1e3d45ccedd4ecb618bb15ed163300e27b153844474bba7050207adca728ad84f0f6a027983a7da26e655e6ccafb8214912cd3f26614e9ab0da7099d54e795aea0c081b8ab74e3165b856ee3010206bd04afeac24ef9a264b11440dc963d147b33c9ea7c3b841c68ded0d40d2405aa76aaf244d0082863caaad411a809ce19416f45ac4e7a40f310031431992da6edfe42d91b21e4206c8186cebb4e1bf6290de4a0d8818125d56bb4b0806903070e2fb540c92a22dfb42c000f94279a1ba505cd0378ba69c53df85a62b806c21bd986a6fb4e2df665800d182eaa511755aa167395950672be4539746454e21806001720533cb4ce89f3387054800b1423a369a621493a4f8da04902a502159637378ac163285bfcb3a564796426e17f6a6d52858a659552532a5ab640e2050803ce1ab0caba949d6c61910271ce3fae5566c4c39be0d4813204ca82de36d9d6674057709dfb5d7e5ea0ad7a32a81fd533d317c2da7924930c6fcbd34594173ee90c0e5587cf3db8eb0fa9dd86e494393746284e40f13bf7b290299bd7d35931411ba9c625ab7d455f186607fc689afc76930110297efc2f64c0409426af197573ee2a434438060760f6a969320a2e95f70217652cce4b8bfbd2fccd123fb3fcf5bcc6b2fa89256b6c48af2f9125e247c8e697f3d8d392d1dbb384b4e5e483bab1c950e5dd0f2e9c41ad5ed0fa93b72c16564b2bc1caa64773b706187c72713ad63123f07a3e316b7adc64a79e5c131021a34ca18e33b6c410697e8d82d75d4a2cc97c19264a7fffc5f408b7385c74a6289155f9f8e599416cb4b924f6551aa1265726cb6c43413c522c1528ca35ea1f29b58072c36290ec0028123089442650107dfad92dc062c8022502e02156933729c81830001d001432001003023c719261840009c067b060d6eac180710400e1c8e801000e04f495a0d15c6e4dbd846963a83068d311c478d1b84716a9c30dacbc80102050c81566bc9b513db9dcd86105ec9cf49d35a5f46b6a180201c3e5acdbdee3475aa2800085fb0a0d16673bcce0c31c238836be0a8c82f9230ccb84118c717491866e0b091438c1a351010e985199e8317491866886123c7d6a88180c82e921a350e10d1451963e4c26f40c61863f8180688e0420765f4183e460122b748c230e39031c619356a2020628baa05d1c25861d453cc9b434c27099159c8a2fc14da396b0eb67e2c60d1a5e42fbaf18ebc22eb3acd952d476e1e5de1c6f8d3f84fb5c2b43393b369e878f964857ec244e5cff874f32abcefec361193882a5251abed5a64b92631d5082ace49c64646e3c78aef2996540daf1eb64a3534853968f4f446568af24931f26f6166831a214572852f3d8b98ed0f23a3706dd66f4c3af136daa2b03a653777e3814828f8b0494e29c5ce5c6e8e611150109b52b62d66f8cb67e4887ca28a2925e9cbdbc46c02114f147f27eb52e5b4942f158874a23359cb344ab4d7ccdaa04143239c28ed6f9b9c327b1ad76dd0a091914d54a6d3e1cae40fe6711b7c460e1a34725020a2894e7c2c2599bd31f9ae48263051976883594ad1a4762f899225aa1294988424faee8a3a13f124b81c890426e533296ab2d662c786db60511081c4236cdd76f9dc2ee2882b9dece59e3fd2887e93143784c4554a7236c208fb63bc799efb786917416d7694949373b4d6228a8824a22288687e7b3ac99fa9eedf21ead6135aeb73fb55c5109618364b86ddbb4ff28530deefece325612aa508a1c91ba236f37ec71a07517b0cb32fcb392a78362282403327837eeadc64171b1b8804e2be95ad64678900e20f59b01cc6c32789f8c199fc1b7119ffcf5d1f3eedd5ecf1bca3678af0a19bb5b839a4b9873f7ad0db0ea31ef260b88a2f267c46d87df09064272639947e3ea1a4ef60873ad0e128f2298a6529f1d099831c164d694becf98ce676400234c0e12188c4010e89de6ed67862fe289f0e44de60875ef5f470b2f61e379c2f69e645bc8c56d6067c2fa5937dfa0e138cb0c13895dc6c25165903a9210d8486c8192a628632d87329bb09f7a7f769329cd4a3df26b39881838c1c913194dd4ccc9ac5124318280206ef6ceb53c61287c817ec1c2f6ad72f42f28343c40ba709237a93267c5eda85af2bc5cdf868e32f45b8f06a063f29670bdac5a429e7def3f92007225ae0d4c4948a7b6662362359486a5bf3e40ff5151d2c982b76bb87c944aeb066bbcd293bc98b3e6205f77e3454599f9fe045aa80fa6f86fa4ae1c3d30815cef9e5be96e66e3786139129246d8594bf9770994ac110715225f554ce256d9811468d00ac2212053f9cec7dbf1e359f5c040a98ac9bbac7ff3be1137942ee1e4bdc4c594389bf130e9e96c455b619449aa009a51a66c2af989832c1d553df38b1224b20ca4b9af831e924d288129a7af3cd14522afc154982ae75a9a4f57d77759140c6fd283932ee5fa5c811f8507a62b96a1b11daaf2d5aecfe1a448a60b9d9ec9cf4c6d8c973c34f702244a8e4fb924eecca4c114686101102ae7a29336b125c43c2402408d56a64ea8dceafe34780b05fdcce296b49da4c7e51458f7ec9b8f645df06c4179a7912be2d724ce83ca417c48b2a2426f6c31b80354076a10bbc36967df654e2dd950b5cbc412a09256ccaa50f728b34d7f64e995cc9dc93c00520b6d0c64ed670558266abb56844c20a852aa833976120864110055110832008629f3543135080b840180c46c3012d91663f13c0c0ca42d170280e8a420181300c463110053110835010c3401cc44044e224b3ac1bd1a3b4bb7862d3e55c44ae5e0b5dc3629e52e2d6b0480673e51de4bcc7f666fe27e6eb55dbcbbec433741adecc82357ed3a223bb8e58837bad264dc261d956e063aeb42b33186f49fda99e4347facc4d80688ec7d7458350310a38ffc72578f8e1a0ef2195131f5a30d5d47effc3644ac31b6eb58195ad1185a9755032ce6b0f7bfc4854445acc262d27c52b133f126f022dbade01c257af5fe2a1a8cc3963f8661b97c2c1e868121a49cf74f8b54b91cb24ab63361549521f874232b81958359b539d7e772b98b28420ebb1fa2c423c16803213309f88fc647f2a3b8154170f2a6bde166f60b5c6e0d7d078a82c206352e9ad3ef357e30620b69d274447210d9e71a495fbb9e33749f275ff9345652e9715cfeaeb2ace2200010b6c05db6fd8ae90e95955d3334adeca76c4e7e65b46071f245bfb96df60b37ec7be078000c94aa8fdd7f8be270c5706361a33694296fbf49bd35abf59792d843953325e5d9558a47384f12856efb4e0eddf5be58b5200a88bfac9959c89da14da347287413453eca907e02d294763cda4b3f4439991806b804917db384ed08c1534196cead8e94ccd788d7c53562d7267baadbc3a9bc2083a3764b6d3a2e78e834b0b95038fca587ad1546943e04591197967abd948364862b0603452052202ebe8034e11035397cae42c8ffc55134e86663f6c94b1264cb5b5ecdac72076a7ed829a6c9e88516cbb02f0e2f41ee4b8451ecf9ce1b08f7bfd800c0dbe61b24700258c1fd964aa2df4af91eb3e1a44f5549db0730eedd8514a63e1b77272ddc9f9b0728c8c0122bd44579c7e16d050c109419a43b709276f0374c13870d20ebd2dff536c312ed182d10187fa74f71b1fca900372737603b03f8bb970c899cd1ac2de8c816155aa74143ded8841f8e4814dd4009b9bc0ad064677bb5d6f1af9583d9f4646c7512eeb5ef04126125aeae72875b78568bb021699c7f4594c2fd158c500174dea61ee981d689efc28037aa9fe89bb68517ed26a484c604edc3519d115193796ba6099036accdbf1894eb8720b8beb56c4f7ee80ba25d6c950c9cfc428f2a56ac3e28cbf8c385342497225bf59f88c3b54cb94ac7f33121a8a3ed55792b259084d9829e9e7a42f80eecc23231789c8ee41778331403a55bbd137e5a02bfa7d9f3b7ecd50e1ec4341fed85b965bb5bb86b1cfadda7922a51c38b01feb6397eacc2771750ac086cd1daca1c0ee53a4e4b888bc2a114b5c34fa4de42db36e5366854bd99f090b450bd92a6e42e61ae312707d17009e025370dd58237a87c6cb44a338b35da5a2e0e2543c8633ed395b0867f7bc014057317047e6cc792d00a59e92d9b100fcd73f04e9ddaf4391a45e3d44f9ebb03bd9d783f2935ad1d78c2738e1c668ad1d99b0bafc8f29eea804f90ee37abde857561e150216e38775e961f24914135c6e2a5deb43e264ffc5b994b40b35fcace963c0a63a47af32c683c9a621143a94d9a36875526f79e59ecabcc9dffe528fb76300997ae1464eb586e179546b54189fc8e2e14085208dfb6672507c23514208bdfdeb70ef3fb22941d049a23be02c96c23a7788e58d00a00227c026ffa24d6629ce3d620d2b07be1c609a5fc1a8d4963701592f2382f93e27111304a9e385354bfd026ea5bc45a63f1685649531398964f5efe05bc1062084b8f6911521c8d7cdaf473f847c0677191b55ca7059d4ed8799f96d3c9faa13ccbc9d93661da50ae99bd93e3c57cb21f4b26d58788cc4515fa6134af11a2b29efbcd5c0b33b29cf4e65c09526fff27f6882d1cfcc1124d0df15737a85a09623bd4594795b6aef8a370f5e1ca16da384cea5dc3e295d7c27608332b7984139a48d1dc88f54bed80e45b9c4c50a40b030e937883c5aaac241d11205e2fa5d9c1d29ffe37a2cae7fddc58c73ef5d530c32606cd21dbefedbdf774d68d6d9b8ededd24887cc44588b591364a605116c21ee81652de57834ddf864949b3725a51192e530ebee788de475586014797b51c45e59c15d761133a9abe65b3ae5e07c04254cf62d8d93aef9c1d6d517a4b379b8624d9343e6f5ef8455344ea09c81f2b3735434220d0a6211843de10ed8f247d4b539585a06d396dca98d2f11619bfa94264d182c0020b7f726897b9f98c5c49adf0cfef1926e23cddabc2a7f69eb3273edb31eb1d3593b4de0a33b7ba01b45372a2685be4afa4fef228c9c9e2b3fbbbba8d5519ad108c6d21d25a133f1059cb68be3fa714e6b26655df3bdb0ea85ad4b308cc07ae9057fc0285e05f513366081247a71dd9dc6dd28bd78c3873e92161e0f1797a2934e8b36e93ce213fc760d03e876646a252ecade956b8f023afea30b608be4f2909af8655e8f4ddbbdeb919823597a4a43a0093e4efcb9cea82f4dd08c77f57c27989a08ad507d8a480b09ee37d9443008d4836a7b887beab566d3a080dfa0f2f0b2265957553e6f9327a29b577e907b80e59e9ecb7deb6b27655b243c2b301723d728fa7546426ee7a65e35081c7b68daeedb32802a5b9df058f058d7efd209e8a50b6268dfcb138de5c324c65baa14e425d534705f885c1c9f2eef6eccdae34f84f48e4d58f6d69a4134c619c8dcb9bad4c51a88f269275b462c2867b4362204af1c9241b11cc1d6afb36230df62eea6e82095b5fbbe4fb708ec5f81833a0981f3e384a1837d01ab3f5844a043a5b4e8e2bf3a3dd40553cc1c0b0a0da81cab1a7fcf56e3a87150eb664ac5b4b58a36f76a53933c32fb1a654c2236395b7f753d3c8e4fd2072c8f0f1987de535083774c10d5038ca0d50f6049c8690bad5853ec4bcd90227d88db44fde2996570e5936415923a4cbd2140e8ea99efffd48ced8e8bcbd5c77cf1266d799b7c15654f131d6937ed9351503f1c338921b0f8d53616c611f8fa71a087d18e8ebcd389884f36b17194f6ee7743dca03eb195223b90ad124e0abcf8b6ca6fd0a93f5b06b6a0f040b0ec74a7808c417431d0abc141ca159c35a338971dbcfb716c9457a2bf751535f7f0c3adaed15cd0adc31696d55caebfd603cd7fa15daeb07eed15b9f867c7980d49d9c216760de9dcca87b3f9b7c3d5e6d1cde609ad521baed2abc0b70f9188749d70fc04e22649a24577784e524704f3446a5e8d9219fc412029152cae13ee4b81f62c2f396ac8ea99594515d5c4f0f786f1cdf9d4df6376354f416ca32dacc510514c2a22923be7ddf7b0d579cfc4d8b1a53440312f4e3bc62a1110b1775121cb50df773a58238510dd4ff1ad27956d272624d6223dd2c1c9b3bd0f038971b0ba84b08f1a2550743406af8812b28b770ebb9bdfd5fbbef8d5afffda77fe5358f670e8dc3ba342bd43e164464155dd2bfbebdf7ffebbfffa5752effe3a18a850a0622a4855e6e4317e0a4edaa639cd299f1ed359ff84331b1f09250f854e75676486b4b154be20cf78f9f35df963bffde59fdcf08dd3b5e154a4be0c47435fb295c35cce65ee9d7747b76198475df03405e848189413f80695ebfb2f5109877604de82a23d6ce73a6bb6abf718ced8184ed4173d8d6471d69a852216c4fdc95e5372f0ef4a5198fbd7e76e6c69afbb94bc0ef54e5a9335c12bc271c208fb1bd8ca1005e8ec51a13e203744af8871daece8b57f2cd385cd83edaab80e9916b897fa9d9ac5e7142376cf8c48cdcb4a77ed6fab607e605c6229164fe82415a5ace5a5c9135cc0d0533559e606cda733cf2596e8f964374d6f16c853dddc583236b6e359829ffe8b513e2ff7cc18a08e669e97f892f1067762f40cfa711673a64f2695791917f0e13bf2e579bdf6bb87fac2caaa2b8438eb64f9e54a2e401d2983b868e503ca5e8239809a7fb12e3fa471ac7cb72a5f60de7d160d84402b0c2c02c6a01a4290e72bf6b8c22fa3cb6a394ddde3cb792c6428a21962b7c62485e20b577c4762781e203782f14a65b41008d1a81bd63db67ef3e01983d7a5b06908b58f0e365ff6001b796498fda6b9e7929da8ce0e9970de7a3b2a33c4ad95def7b9ad20abc0eb29c68493c5e663ad0562c9845af588d86dbcd13218c4c0a552b4c2fd2f1ca3efc9e2568f483dccb91c2c1d04e8279f4528daa56656e3cf687393ac9a0289685cf39568b5ba31390b885867f312b5747e98651bd9f7f8af63eb63397f7f8f88a0605695a43afbda70c218b08695385d4dde3db5e55917a68d8d16e09282191e46252bac10fa8ad6b590ae1f42ffb00f6b4cbc3f291eacf537c42c4283652d1fba90c71fd96c6a09799204144865866368b595c3063871677beaaa8651325c219a224c071e3ca901daed028f547e8dffdf6d8c637c2058db85c87034bfe1bdd1be75d9c964949a25c3f05ceb6023d72dd2496a09a08ba7b1d2331a2ee5f5cc7324bf3b79e7e254102157b6639982ccb17f823f154574594f4c3330244c38ff78dda9a1c5f0cc2d36fb1fbc5da228532d67ce05b0b0c80e8609e33b09f48b6002c88189c1836c3285c949809076ea8690a106aa7e9716b1269cfbb6bfcf210b7547ad0a99237b6bf37228e586c3f80ad3f8eb7f91cc6529b5ea5d092c15f0ed43ecdd78ce3e0f5aad7172ee2d4a3b65cff321b28a1b63c97ea6fd2a52c6176059f448f10bd1c3e24b277190d993e36555b4a7c32a7770e80cac33d96d64055b941856cac552f25bf8ec695ef2fd05a93382a9fbece87ec3f4be21e0344235f79c33466a2c77f045b95bea6ca690240eb8bf0f89e9b426b719c29e599f283c0824c9c3f331b509906c5770ec4dd2a81c493647a8b0492066d8f5f8f3ebf9859aad890e5ec20708657a8299955afc5d9d87ece8072f4e0fc3c80822af533492ab56454c01ad0ea9071b6386fc8b3013944934434427eab886ede78d9a2aef1134d175822a7cb178b710e57b2a6110584db2ee4e0dc445594b5f2c153a5a820c8533c70fc4ffbca131bc08e30b21cce1102868f647092eca610529e6090a03b1c74e475c7db706b78634e1c9c7984b2ff55c0595226fa27f2be5342ae7bf13666c4e59a2a9c86954862d7b3bc60d6b89debaf0db8a4f38f1f9ab63f2dc69e88235eb22125dce3b73b9691278784b70a7a5a7adc56f89c8bf887676ef09cae8279d12a432cf1a0e9df6ba903e1dfd291746aeec5df864fbdaf006ad580003952ddd4220e08c26eab5516f596bc1e9c66bc628368e23ea3498e310d0b6cec4b04f386ab628363726e68c4a669a860ec69ad2bc23150447debdd3849e58067ca1cbe04318b4735ef31f0289df26b03956e335" }, - "childrenDefault": {} + "parachainSystem": null, + "parachainInfo": { + "parachainId": 1001 + }, + "balances": { + "balances": [ + [ + "5EAajHa4vjcfXVdSuaWTuK3DzduMBgmu1XNMpqAprCaGcY3H", + 4096000000000 + ] + ] + }, + "collatorSelection": { + "invulnerables": [ + "5H3smGYCiPYHc74MCRaRYAybMykyF958fwdFdHqYJRVaFA2f", + "5EcVvc6C9sAJNJ2r5YEmMdPbSiCRpDsVFbsnU6oVwpfRzCzX", + "5ExdaDEdWMDCTKzgw919bHdG9khjHTtcwwwJ54tM4TAC21xQ", + "5G95npHNCgq7RhqoMA9v4c4M4XmhkGnieMi1ZVngfuuP3xzG", + "5CA1fhVhpwZ28zx8Ee3onLQbY6rwLKuVBWqG6h1nACBzSbyK", + "5F4nSN6iDqyAEwHZwnewhXhXvfYasKYWQ8sSU53u2rf64VEU", + "5G4eMyR7a6dBQ1TNUQzDGj568tg3zjfW2i7hM7qVy2yH1uRU", + "5FHpttSJKiru6PMTCrGCVg4Dvf2AKGUy86tRKszStseukeHS" + ], + "candidacyBond": 16000000000, + "desiredCandidates": 0 + }, + "session": { + "keys": [ + [ + "5H3smGYCiPYHc74MCRaRYAybMykyF958fwdFdHqYJRVaFA2f", + "5H3smGYCiPYHc74MCRaRYAybMykyF958fwdFdHqYJRVaFA2f", + { + "aura": "5H3smGYCiPYHc74MCRaRYAybMykyF958fwdFdHqYJRVaFA2f" + } + ], + [ + "5EcVvc6C9sAJNJ2r5YEmMdPbSiCRpDsVFbsnU6oVwpfRzCzX", + "5EcVvc6C9sAJNJ2r5YEmMdPbSiCRpDsVFbsnU6oVwpfRzCzX", + { + "aura": "5EcVvc6C9sAJNJ2r5YEmMdPbSiCRpDsVFbsnU6oVwpfRzCzX" + } + ], + [ + "5ExdaDEdWMDCTKzgw919bHdG9khjHTtcwwwJ54tM4TAC21xQ", + "5ExdaDEdWMDCTKzgw919bHdG9khjHTtcwwwJ54tM4TAC21xQ", + { + "aura": "5ExdaDEdWMDCTKzgw919bHdG9khjHTtcwwwJ54tM4TAC21xQ" + } + ], + [ + "5G95npHNCgq7RhqoMA9v4c4M4XmhkGnieMi1ZVngfuuP3xzG", + "5G95npHNCgq7RhqoMA9v4c4M4XmhkGnieMi1ZVngfuuP3xzG", + { + "aura": "5G95npHNCgq7RhqoMA9v4c4M4XmhkGnieMi1ZVngfuuP3xzG" + } + ], + [ + "5CA1fhVhpwZ28zx8Ee3onLQbY6rwLKuVBWqG6h1nACBzSbyK", + "5CA1fhVhpwZ28zx8Ee3onLQbY6rwLKuVBWqG6h1nACBzSbyK", + { + "aura": "5CA1fhVhpwZ28zx8Ee3onLQbY6rwLKuVBWqG6h1nACBzSbyK" + } + ], + [ + "5F4nSN6iDqyAEwHZwnewhXhXvfYasKYWQ8sSU53u2rf64VEU", + "5F4nSN6iDqyAEwHZwnewhXhXvfYasKYWQ8sSU53u2rf64VEU", + { + "aura": "5F4nSN6iDqyAEwHZwnewhXhXvfYasKYWQ8sSU53u2rf64VEU" + } + ], + [ + "5G4eMyR7a6dBQ1TNUQzDGj568tg3zjfW2i7hM7qVy2yH1uRU", + "5G4eMyR7a6dBQ1TNUQzDGj568tg3zjfW2i7hM7qVy2yH1uRU", + { + "aura": "5G4eMyR7a6dBQ1TNUQzDGj568tg3zjfW2i7hM7qVy2yH1uRU" + } + ], + [ + "5FHpttSJKiru6PMTCrGCVg4Dvf2AKGUy86tRKszStseukeHS", + "5FHpttSJKiru6PMTCrGCVg4Dvf2AKGUy86tRKszStseukeHS", + { + "aura": "5FHpttSJKiru6PMTCrGCVg4Dvf2AKGUy86tRKszStseukeHS" + } + ] + ] + }, + "aura": { + "authorities": [] + }, + "auraExt": null, + "polkadotXcm": { + "safeXcmVersion": 2 + }, + "alliance": { + "founders": [], + "fellows": [], + "allies": [], + "phantom": null + }, + "allianceMotion": { + "phantom": null, + "members": [] + } } } -} \ No newline at end of file +} From 926466aae25ccbd935f3fe881ab87615d65615b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Oct 2022 23:47:28 +0200 Subject: [PATCH 105/148] Bump proc-macro2 from 1.0.44 to 1.0.46 (#1708) Bumps [proc-macro2](https://github.com/dtolnay/proc-macro2) from 1.0.44 to 1.0.46. - [Release notes](https://github.com/dtolnay/proc-macro2/releases) - [Commits](https://github.com/dtolnay/proc-macro2/compare/1.0.44...1.0.46) --- updated-dependencies: - dependency-name: proc-macro2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- pallets/parachain-system/proc-macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2920c43e8f6..f492931ae3a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8460,9 +8460,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.44" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd7356a8122b6c4a24a82b278680c73357984ca2fc79a0f9fa6dea7dced7c58" +checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" dependencies = [ "unicode-ident", ] diff --git a/pallets/parachain-system/proc-macro/Cargo.toml b/pallets/parachain-system/proc-macro/Cargo.toml index 2c85c8e9975..6e9141fdd00 100644 --- a/pallets/parachain-system/proc-macro/Cargo.toml +++ b/pallets/parachain-system/proc-macro/Cargo.toml @@ -10,7 +10,7 @@ proc-macro = true [dependencies] syn = "1.0.101" -proc-macro2 = "1.0.44" +proc-macro2 = "1.0.46" quote = "1.0.21" proc-macro-crate = "1.2.1" From 8f67d0debc138188fa384cf3289419d31592a31b Mon Sep 17 00:00:00 2001 From: Dan Shields <35669742+NukeManDan@users.noreply.github.com> Date: Mon, 3 Oct 2022 03:41:15 -0600 Subject: [PATCH 106/148] Update README.md (#1683) * Update README.md * Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3a6712876ae..3d6a47fbba6 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ A set of tools for writing [Substrate](https://substrate.io/)-based [Polkadot](https://wiki.polkadot.network/en/) [parachains](https://wiki.polkadot.network/docs/en/learn-parachains). Refer to the included [overview](docs/overview.md) for architectural details, and the -[Cumulus tutorial](https://docs.substrate.io/tutorials/v3/cumulus/start-relay) for a +[Connect to relay and parachain tutorials](https://docs.substrate.io/tutorials/connect-relay-and-parachains/) for a guided walk-through of using these tools. It's easy to write blockchains using Substrate, and the overhead of writing parachains' From 7c8a9ff2aa80fd46ab6bc6cd77e7b1b3121df291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Thei=C3=9Fen?= Date: Mon, 3 Oct 2022 14:49:15 +0200 Subject: [PATCH 107/148] Companion: Remove contracts RPC (#1685) * Remove contracts RPC * update lockfile for {"polkadot", "substrate"} * Remove unused imports * Properly set a max proof size for cumulus test runtime * Properly set a max proof size for common runtimes * Properly set the max proof size for all runtimes Co-authored-by: parity-processbot <> Co-authored-by: Keith Yeung --- Cargo.lock | 550 +++++++++--------- parachain-template/runtime/src/lib.rs | 3 +- parachains/common/src/lib.rs | 3 +- .../contracts/contracts-rococo/Cargo.toml | 4 +- .../contracts/contracts-rococo/src/lib.rs | 2 +- .../runtimes/starters/seedling/src/lib.rs | 3 +- parachains/runtimes/starters/shell/src/lib.rs | 3 +- parachains/runtimes/testing/penpal/src/lib.rs | 3 +- .../testing/rococo-parachain/src/lib.rs | 3 +- polkadot-parachain/Cargo.toml | 1 - polkadot-parachain/src/rpc.rs | 5 +- polkadot-parachain/src/service.rs | 3 +- test/runtime/src/lib.rs | 3 +- 13 files changed, 295 insertions(+), 291 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f492931ae3a..198a6a37345 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -469,7 +469,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "array-bytes", "async-trait", @@ -506,7 +506,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -526,7 +526,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "beefy-primitives", "sp-api", @@ -535,7 +535,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "parity-scale-codec", "scale-info", @@ -1167,7 +1167,7 @@ dependencies = [ "pallet-collator-selection", "pallet-contracts", "pallet-contracts-primitives", - "pallet-contracts-rpc-runtime-api", + "pallet-contracts-runtime-api", "pallet-multisig", "pallet-randomness-collective-flip", "pallet-session", @@ -2747,7 +2747,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "parity-scale-codec", ] @@ -2764,7 +2764,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support", "frame-system", @@ -2787,7 +2787,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "Inflector", "array-bytes", @@ -2838,7 +2838,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2849,7 +2849,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2865,7 +2865,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support", "frame-system", @@ -2894,7 +2894,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "bitflags", "frame-metadata", @@ -2926,7 +2926,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "Inflector", "cfg-expr", @@ -2940,7 +2940,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2952,7 +2952,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "proc-macro2", "quote", @@ -2962,7 +2962,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support", "log", @@ -2980,7 +2980,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -2995,7 +2995,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "parity-scale-codec", "sp-api", @@ -3004,7 +3004,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support", "parity-scale-codec", @@ -3883,7 +3883,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "beefy-primitives", "bitvec", @@ -3910,6 +3910,7 @@ dependencies = [ "pallet-election-provider-multi-phase", "pallet-election-provider-support-benchmarking", "pallet-elections-phragmen", + "pallet-fast-unstake", "pallet-gilt", "pallet-grandpa", "pallet-identity", @@ -3976,7 +3977,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "frame-support", "polkadot-primitives", @@ -5315,7 +5316,7 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "async-trait", "dyn-clonable", @@ -5331,7 +5332,7 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "expander 0.0.6", "itertools", @@ -5369,7 +5370,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "array-bytes", "frame-benchmarking", @@ -5390,7 +5391,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support", "frame-system", @@ -5407,7 +5408,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -5421,7 +5422,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support", "frame-system", @@ -5437,7 +5438,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support", "frame-system", @@ -5453,7 +5454,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support", "frame-system", @@ -5468,7 +5469,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -5492,7 +5493,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5512,7 +5513,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -5527,7 +5528,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "beefy-primitives", "frame-support", @@ -5543,7 +5544,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "array-bytes", "beefy-merkle-tree", @@ -5566,7 +5567,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -5584,7 +5585,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -5628,7 +5629,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -5645,7 +5646,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "bitflags", "frame-benchmarking", @@ -5673,14 +5674,10 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "bitflags", "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-rpc", "sp-runtime", "sp-std", ] @@ -5688,7 +5685,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "proc-macro2", "quote", @@ -5696,26 +5693,9 @@ dependencies = [ ] [[package]] -name = "pallet-contracts-rpc" +name = "pallet-contracts-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" -dependencies = [ - "jsonrpsee", - "pallet-contracts-primitives", - "pallet-contracts-rpc-runtime-api", - "parity-scale-codec", - "serde", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-rpc", - "sp-runtime", -] - -[[package]] -name = "pallet-contracts-rpc-runtime-api" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5728,7 +5708,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -5744,7 +5724,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5768,7 +5748,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5781,7 +5761,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -5796,10 +5776,31 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-fast-unstake" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "pallet-staking", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", +] + [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -5814,7 +5815,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -5837,7 +5838,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5853,7 +5854,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -5873,7 +5874,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -5890,7 +5891,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -5907,7 +5908,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5925,7 +5926,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5940,7 +5941,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -5955,7 +5956,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support", "frame-system", @@ -5972,7 +5973,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5992,7 +5993,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "parity-scale-codec", "sp-api", @@ -6002,7 +6003,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support", "frame-system", @@ -6019,7 +6020,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6042,7 +6043,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -6058,7 +6059,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -6073,7 +6074,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support", "frame-system", @@ -6087,7 +6088,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -6102,7 +6103,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -6118,7 +6119,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support", "frame-system", @@ -6139,7 +6140,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -6155,7 +6156,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support", "frame-system", @@ -6169,7 +6170,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6192,7 +6193,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6203,7 +6204,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "log", "sp-arithmetic", @@ -6212,7 +6213,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support", "frame-system", @@ -6241,7 +6242,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -6259,7 +6260,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -6278,7 +6279,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-support", "frame-system", @@ -6294,7 +6295,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6309,7 +6310,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6320,7 +6321,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -6337,7 +6338,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -6352,7 +6353,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -6368,7 +6369,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-benchmarking", "frame-support", @@ -6383,7 +6384,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "frame-support", "frame-system", @@ -6401,7 +6402,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "frame-benchmarking", "frame-support", @@ -6954,7 +6955,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -6969,7 +6970,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -6983,7 +6984,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "derive_more", "fatality", @@ -7006,7 +7007,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "fatality", "futures", @@ -7027,7 +7028,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7053,7 +7054,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7094,7 +7095,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "always-assert", "fatality", @@ -7115,7 +7116,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7128,7 +7129,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "derive_more", "fatality", @@ -7151,7 +7152,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7165,7 +7166,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "futures", "futures-timer", @@ -7185,7 +7186,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "always-assert", "async-trait", @@ -7209,7 +7210,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "futures", "parity-scale-codec", @@ -7227,7 +7228,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "bitvec", "derive_more", @@ -7256,7 +7257,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "bitvec", "futures", @@ -7276,7 +7277,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "bitvec", "fatality", @@ -7295,7 +7296,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7310,7 +7311,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "async-trait", "futures", @@ -7328,7 +7329,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7343,7 +7344,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "futures", "futures-timer", @@ -7360,7 +7361,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "fatality", "futures", @@ -7379,7 +7380,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "async-trait", "futures", @@ -7396,7 +7397,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "bitvec", "fatality", @@ -7414,7 +7415,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "always-assert", "assert_matches", @@ -7446,7 +7447,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "futures", "polkadot-node-primitives", @@ -7462,7 +7463,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "futures", "memory-lru", @@ -7478,7 +7479,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "async-std", "lazy_static", @@ -7496,7 +7497,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "bs58", "futures", @@ -7515,7 +7516,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "async-trait", "derive_more", @@ -7538,7 +7539,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "bounded-vec", "futures", @@ -7560,7 +7561,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7570,7 +7571,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "async-trait", "futures", @@ -7588,7 +7589,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "async-trait", "derive_more", @@ -7611,7 +7612,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "async-trait", "derive_more", @@ -7644,7 +7645,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "async-trait", "futures", @@ -7667,7 +7668,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "derive_more", "frame-support", @@ -7708,7 +7709,6 @@ dependencies = [ "jsonrpsee", "log", "nix 0.25.0", - "pallet-contracts-rpc", "pallet-transaction-payment-rpc", "parachains-common", "parity-scale-codec", @@ -7765,7 +7765,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7780,7 +7780,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "bitvec", "frame-system", @@ -7810,7 +7810,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7842,7 +7842,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "beefy-primitives", "bitvec", @@ -7868,6 +7868,7 @@ dependencies = [ "pallet-election-provider-multi-phase", "pallet-election-provider-support-benchmarking", "pallet-elections-phragmen", + "pallet-fast-unstake", "pallet-grandpa", "pallet-identity", "pallet-im-online", @@ -7930,7 +7931,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "beefy-primitives", "bitvec", @@ -7977,7 +7978,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "frame-support", "polkadot-primitives", @@ -7989,7 +7990,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "bs58", "parity-scale-codec", @@ -8001,7 +8002,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "bitflags", "bitvec", @@ -8044,7 +8045,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "async-trait", "beefy-gadget", @@ -8149,7 +8150,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8170,7 +8171,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8180,7 +8181,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8205,7 +8206,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "beefy-primitives", "bitvec", @@ -8266,7 +8267,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "frame-benchmarking", "frame-system", @@ -8411,7 +8412,7 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8896,7 +8897,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9015,7 +9016,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9099,7 +9100,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "frame-support", "polkadot-primitives", @@ -9269,7 +9270,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "log", "sp-core", @@ -9280,7 +9281,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "async-trait", "futures", @@ -9307,7 +9308,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "futures", "futures-timer", @@ -9330,7 +9331,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9346,7 +9347,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9363,7 +9364,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9374,7 +9375,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "array-bytes", "chrono", @@ -9414,7 +9415,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "fnv", "futures", @@ -9442,7 +9443,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "hash-db", "kvdb", @@ -9467,7 +9468,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "async-trait", "futures", @@ -9491,7 +9492,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "async-trait", "futures", @@ -9520,7 +9521,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "async-trait", "fork-tree", @@ -9562,7 +9563,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "futures", "jsonrpsee", @@ -9584,7 +9585,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9597,7 +9598,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "async-trait", "futures", @@ -9621,7 +9622,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9648,7 +9649,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "environmental", "parity-scale-codec", @@ -9664,7 +9665,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "log", "parity-scale-codec", @@ -9679,7 +9680,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9699,7 +9700,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "ahash", "array-bytes", @@ -9740,7 +9741,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "finality-grandpa", "futures", @@ -9761,7 +9762,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "ansi_term", "futures", @@ -9778,7 +9779,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "array-bytes", "async-trait", @@ -9793,7 +9794,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "array-bytes", "async-trait", @@ -9840,7 +9841,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "cid", "futures", @@ -9860,7 +9861,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "async-trait", "bitflags", @@ -9886,7 +9887,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "ahash", "futures", @@ -9904,7 +9905,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "array-bytes", "futures", @@ -9925,7 +9926,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "array-bytes", "fork-tree", @@ -9953,7 +9954,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "array-bytes", "futures", @@ -9972,7 +9973,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "array-bytes", "bytes", @@ -10002,7 +10003,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "futures", "libp2p", @@ -10015,7 +10016,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10024,7 +10025,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "futures", "hash-db", @@ -10054,7 +10055,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "futures", "jsonrpsee", @@ -10077,7 +10078,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "futures", "jsonrpsee", @@ -10090,7 +10091,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "async-trait", "directories", @@ -10160,7 +10161,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "log", "parity-scale-codec", @@ -10174,7 +10175,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10193,7 +10194,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "futures", "libc", @@ -10212,7 +10213,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "chrono", "futures", @@ -10230,7 +10231,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "ansi_term", "atty", @@ -10261,7 +10262,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10272,7 +10273,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "futures", "futures-timer", @@ -10298,7 +10299,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "futures", "log", @@ -10311,7 +10312,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "futures", "futures-timer", @@ -10741,7 +10742,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "enumn", "parity-scale-codec", @@ -10817,7 +10818,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "hash-db", "log", @@ -10835,7 +10836,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "blake2", "proc-macro-crate", @@ -10847,7 +10848,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "parity-scale-codec", "scale-info", @@ -10860,7 +10861,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "integer-sqrt", "num-traits", @@ -10875,7 +10876,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "parity-scale-codec", "scale-info", @@ -10888,7 +10889,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "async-trait", "parity-scale-codec", @@ -10900,7 +10901,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "parity-scale-codec", "sp-api", @@ -10912,7 +10913,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "futures", "log", @@ -10930,7 +10931,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "async-trait", "futures", @@ -10949,7 +10950,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "async-trait", "parity-scale-codec", @@ -10967,7 +10968,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "async-trait", "merlin", @@ -10990,7 +10991,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "parity-scale-codec", "scale-info", @@ -11004,7 +11005,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "parity-scale-codec", "scale-info", @@ -11017,7 +11018,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "array-bytes", "base58", @@ -11063,7 +11064,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "blake2", "byteorder", @@ -11077,7 +11078,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "proc-macro2", "quote", @@ -11088,7 +11089,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11097,7 +11098,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "proc-macro2", "quote", @@ -11107,7 +11108,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "environmental", "parity-scale-codec", @@ -11118,7 +11119,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "finality-grandpa", "log", @@ -11136,7 +11137,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11150,7 +11151,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "bytes", "futures", @@ -11176,7 +11177,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "lazy_static", "sp-core", @@ -11187,7 +11188,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "async-trait", "futures", @@ -11204,7 +11205,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "thiserror", "zstd", @@ -11213,7 +11214,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "log", "parity-scale-codec", @@ -11228,7 +11229,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "parity-scale-codec", "scale-info", @@ -11242,7 +11243,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "sp-api", "sp-core", @@ -11252,7 +11253,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "backtrace", "lazy_static", @@ -11262,7 +11263,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "rustc-hash", "serde", @@ -11272,7 +11273,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "either", "hash256-std-hasher", @@ -11295,7 +11296,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11313,7 +11314,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "Inflector", "proc-macro-crate", @@ -11325,7 +11326,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "log", "parity-scale-codec", @@ -11339,7 +11340,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "serde", "serde_json", @@ -11348,7 +11349,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "parity-scale-codec", "scale-info", @@ -11362,7 +11363,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "parity-scale-codec", "scale-info", @@ -11373,7 +11374,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "hash-db", "log", @@ -11395,12 +11396,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11413,7 +11414,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "log", "sp-core", @@ -11426,7 +11427,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "async-trait", "futures-timer", @@ -11442,7 +11443,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "parity-scale-codec", "sp-std", @@ -11454,7 +11455,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "sp-api", "sp-runtime", @@ -11463,7 +11464,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "async-trait", "log", @@ -11479,7 +11480,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "ahash", "hash-db", @@ -11502,7 +11503,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11519,7 +11520,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11530,7 +11531,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "impl-trait-for-tuples", "log", @@ -11543,7 +11544,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11839,7 +11840,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "platforms", ] @@ -11847,7 +11848,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11868,7 +11869,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "futures-util", "hyper", @@ -11881,7 +11882,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "jsonrpsee", "log", @@ -11902,7 +11903,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "array-bytes", "async-trait", @@ -11928,7 +11929,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11938,7 +11939,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11949,7 +11950,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "ansi_term", "build-helper", @@ -12057,7 +12058,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "frame-support", "polkadot-primitives", @@ -12338,7 +12339,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12349,7 +12350,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12476,7 +12477,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f360c87073cb5f59b7b55cfbfef5d91a40d1a217" +source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" dependencies = [ "clap", "frame-try-runtime", @@ -13064,7 +13065,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "beefy-primitives", "bitvec", @@ -13088,6 +13089,7 @@ dependencies = [ "pallet-election-provider-multi-phase", "pallet-election-provider-support-benchmarking", "pallet-elections-phragmen", + "pallet-fast-unstake", "pallet-grandpa", "pallet-identity", "pallet-im-online", @@ -13153,7 +13155,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "frame-support", "polkadot-primitives", @@ -13436,7 +13438,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13450,7 +13452,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "frame-support", "frame-system", @@ -13470,7 +13472,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "frame-benchmarking", "frame-support", @@ -13488,7 +13490,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0e50e33b9622d1b8bf684340fb17eb59e4a4f987" +source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" dependencies = [ "Inflector", "proc-macro2", diff --git a/parachain-template/runtime/src/lib.rs b/parachain-template/runtime/src/lib.rs index fc0c354f7e4..3ad6a055e82 100644 --- a/parachain-template/runtime/src/lib.rs +++ b/parachain-template/runtime/src/lib.rs @@ -217,7 +217,8 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(5); const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for 0.5 of a second of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2); +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2) + .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); /// The version information used to identify this runtime when compiled natively. #[cfg(feature = "std")] diff --git a/parachains/common/src/lib.rs b/parachains/common/src/lib.rs index 478e405e79d..1ad4dc2f85c 100644 --- a/parachains/common/src/lib.rs +++ b/parachains/common/src/lib.rs @@ -92,7 +92,8 @@ mod constants { pub const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for 0.5 seconds of compute with a 6 second average block time. - pub const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2); + pub const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2) + .set_proof_size(polkadot_primitives::v2::MAX_POV_SIZE as u64); } /// Opaque types. These are used by the CLI to instantiate machinery that don't need to know diff --git a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml index bfd9bf2e9cf..be9fffaf7ed 100644 --- a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml +++ b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml @@ -49,7 +49,7 @@ pallet-utility = { git = "https://github.com/paritytech/substrate", default-feat pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } pallet-contracts = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } pallet-contracts-primitives = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-contracts-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +pallet-contracts-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } # Polkadot kusama-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } @@ -93,7 +93,7 @@ std = [ "pallet-balances/std", "pallet-collator-selection/std", "pallet-contracts-primitives/std", - "pallet-contracts-rpc-runtime-api/std", + "pallet-contracts-runtime-api/std", "pallet-contracts/std", "pallet-multisig/std", "pallet-randomness-collective-flip/std", diff --git a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index 6db76fb6367..8bbe2edec6a 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -505,7 +505,7 @@ impl_runtime_apis! { } } -impl pallet_contracts_rpc_runtime_api::ContractsApi +impl pallet_contracts_runtime_api::ContractsApi for Runtime { fn call( diff --git a/parachains/runtimes/starters/seedling/src/lib.rs b/parachains/runtimes/starters/seedling/src/lib.rs index bb5739f995c..84327c4dc7d 100644 --- a/parachains/runtimes/starters/seedling/src/lib.rs +++ b/parachains/runtimes/starters/seedling/src/lib.rs @@ -85,7 +85,8 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2); +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2) + .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); parameter_types! { pub const BlockHashCount: BlockNumber = 250; diff --git a/parachains/runtimes/starters/shell/src/lib.rs b/parachains/runtimes/starters/shell/src/lib.rs index f75a734c947..4eefd1befaa 100644 --- a/parachains/runtimes/starters/shell/src/lib.rs +++ b/parachains/runtimes/starters/shell/src/lib.rs @@ -92,7 +92,8 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2); +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2) + .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); parameter_types! { pub const BlockHashCount: BlockNumber = 250; diff --git a/parachains/runtimes/testing/penpal/src/lib.rs b/parachains/runtimes/testing/penpal/src/lib.rs index ecaa8a09b6f..0a18f70f0f4 100644 --- a/parachains/runtimes/testing/penpal/src/lib.rs +++ b/parachains/runtimes/testing/penpal/src/lib.rs @@ -230,7 +230,8 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(5); const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for 0.5 of a second of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2); +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2) + .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); /// The version information used to identify this runtime when compiled natively. #[cfg(feature = "std")] diff --git a/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/parachains/runtimes/testing/rococo-parachain/src/lib.rs index e5d75c3493d..ec6a08b0b42 100644 --- a/parachains/runtimes/testing/rococo-parachain/src/lib.rs +++ b/parachains/runtimes/testing/rococo-parachain/src/lib.rs @@ -134,7 +134,8 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2); +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2) + .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); parameter_types! { pub const BlockHashCount: BlockNumber = 250; diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index e5f35933f46..68b5830bd0c 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -64,7 +64,6 @@ try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "m sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "master" } frame-rpc-system = { package = "substrate-frame-rpc-system", git = "https://github.com/paritytech/substrate", branch = "master" } pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" } -pallet-contracts-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" } # Polkadot polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "master" } diff --git a/polkadot-parachain/src/rpc.rs b/polkadot-parachain/src/rpc.rs index cf2979bcc7b..8bd91075c4e 100644 --- a/polkadot-parachain/src/rpc.rs +++ b/polkadot-parachain/src/rpc.rs @@ -20,7 +20,7 @@ use std::sync::Arc; -use parachains_common::{AccountId, Balance, Block, BlockNumber, Hash, Index as Nonce}; +use parachains_common::{AccountId, Balance, Block, Index as Nonce}; use sc_client_api::AuxStore; pub use sc_rpc::{DenyUnsafe, SubscriptionTaskExecutor}; use sc_transaction_pool_api::TransactionPool; @@ -85,12 +85,10 @@ where + 'static, C::Api: frame_rpc_system::AccountNonceApi, C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi, - C::Api: pallet_contracts_rpc::ContractsRuntimeApi, C::Api: BlockBuilder, P: TransactionPool + Sync + Send + 'static, { use frame_rpc_system::{System, SystemApiServer}; - use pallet_contracts_rpc::{Contracts, ContractsApiServer}; use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer}; use sc_rpc::dev::{Dev, DevApiServer}; @@ -99,7 +97,6 @@ where module.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?; module.merge(TransactionPayment::new(client.clone()).into_rpc())?; - module.merge(Contracts::new(client.clone()).into_rpc())?; module.merge(Dev::new(client, deny_unsafe).into_rpc())?; Ok(module) diff --git a/polkadot-parachain/src/service.rs b/polkadot-parachain/src/service.rs index 3519133a5fb..45f14319749 100644 --- a/polkadot-parachain/src/service.rs +++ b/polkadot-parachain/src/service.rs @@ -1325,8 +1325,7 @@ where + sp_block_builder::BlockBuilder + cumulus_primitives_core::CollectCollationInfo + pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi - + frame_rpc_system::AccountNonceApi - + pallet_contracts_rpc::ContractsRuntimeApi, + + frame_rpc_system::AccountNonceApi, sc_client_api::StateBackendFor, Block>: sp_api::StateBackend, RB: Fn( Arc>>, diff --git a/test/runtime/src/lib.rs b/test/runtime/src/lib.rs index ea1800f0762..4ac173efef7 100644 --- a/test/runtime/src/lib.rs +++ b/test/runtime/src/lib.rs @@ -140,7 +140,8 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2); +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2) + .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); parameter_types! { pub const BlockHashCount: BlockNumber = 250; From 483b20c699a4bf0803f35c878a65c8dbc47541b8 Mon Sep 17 00:00:00 2001 From: Branislav Kontur Date: Mon, 3 Oct 2022 14:51:39 +0200 Subject: [PATCH 108/148] XCMv3 fixes (#1710) * Fixes XCMv3 related Fixes XCMv3 (removed query_holding) Fixes XCMv3 - should use _depositable_count? Fixes XCMv3 - removed TrustedReserve Fixes - missing weights for statemine/statemint/westmint [DO-NOT-CHERRY-PICK] tmp return query_holding to aviod conficts to master Fixes - missing functions for pallet_xcm_benchmarks::generic::Config Fixes for XCMv3 benchmarking Fix xcm - removed query_holding * ".git/.scripts/bench-bot.sh" xcm statemine assets pallet_xcm_benchmarks::generic * ".git/.scripts/bench-bot.sh" xcm statemint assets pallet_xcm_benchmarks::generic * ".git/.scripts/bench-bot.sh" xcm westmint assets pallet_xcm_benchmarks::generic * Fix imports --- parachain-template/runtime/src/xcm_config.rs | 6 +- .../runtimes/assets/statemine/src/lib.rs | 16 +++- .../assets/statemine/src/weights/xcm/mod.rs | 96 +++++++++++++++---- .../xcm/pallet_xcm_benchmarks_generic.rs | 91 ++++++++++++++---- .../assets/statemine/src/xcm_config.rs | 7 +- .../runtimes/assets/statemint/src/lib.rs | 16 +++- .../assets/statemint/src/weights/xcm/mod.rs | 96 +++++++++++++++---- .../xcm/pallet_xcm_benchmarks_generic.rs | 90 +++++++++++++---- .../assets/statemint/src/xcm_config.rs | 16 ++-- .../runtimes/assets/westmint/src/lib.rs | 16 +++- .../assets/westmint/src/weights/xcm/mod.rs | 96 +++++++++++++++---- .../xcm/pallet_xcm_benchmarks_generic.rs | 91 ++++++++++++++---- .../assets/westmint/src/xcm_config.rs | 7 +- .../collectives-polkadot/src/xcm_config.rs | 8 +- .../contracts-rococo/src/xcm_config.rs | 6 +- .../runtimes/starters/shell/src/xcm_config.rs | 7 +- .../runtimes/testing/penpal/src/xcm_config.rs | 8 +- .../testing/rococo-parachain/src/lib.rs | 2 +- 18 files changed, 515 insertions(+), 160 deletions(-) diff --git a/parachain-template/runtime/src/xcm_config.rs b/parachain-template/runtime/src/xcm_config.rs index c023a5a6e6d..03e090009e0 100644 --- a/parachain-template/runtime/src/xcm_config.rs +++ b/parachain-template/runtime/src/xcm_config.rs @@ -1,6 +1,6 @@ use super::{ - AccountId, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, - RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, + AccountId, AllPalletsWithSystem, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, + Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, }; use core::marker::PhantomData; use frame_support::{ @@ -180,7 +180,7 @@ impl xcm_executor::Config for XcmConfig { type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; type SubscriptionService = PolkadotXcm; - type PalletInstancesInfo = (); + type PalletInstancesInfo = AllPalletsWithSystem; type MaxAssetsIntoHolding = MaxAssetsIntoHolding; type AssetLocker = (); type AssetExchanger = (); diff --git a/parachains/runtimes/assets/statemine/src/lib.rs b/parachains/runtimes/assets/statemine/src/lib.rs index 44f96c1af66..d09394c8232 100644 --- a/parachains/runtimes/assets/statemine/src/lib.rs +++ b/parachains/runtimes/assets/statemine/src/lib.rs @@ -849,7 +849,7 @@ impl_runtime_apis! { fn valid_destination() -> Result { Ok(KsmLocation::get()) } - fn worst_case_holding() -> MultiAssets { + fn worst_case_holding(_depositable_count: u32) -> MultiAssets { // A mix of fungible, non-fungible, and concrete assets. const HOLDING_FUNGIBLES: u32 = 100; const HOLDING_NON_FUNGIBLES: u32 = 100; @@ -882,7 +882,6 @@ impl_runtime_apis! { KsmLocation::get(), MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(KsmLocation::get()) }, )); - pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = None; pub const CheckedAccount: Option = None; } @@ -892,7 +891,6 @@ impl_runtime_apis! { type CheckedAccount = CheckedAccount; type TrustedTeleporter = TrustedTeleporter; - type TrustedReserve = TrustedReserve; fn get_multi_asset() -> MultiAsset { MultiAsset { @@ -909,6 +907,14 @@ impl_runtime_apis! { (0u64, Response::Version(Default::default())) } + fn worst_case_asset_exchange() -> Result<(MultiAssets, MultiAssets), BenchmarkError> { + Err(BenchmarkError::Skip) + } + + fn universal_alias() -> Result { + Err(BenchmarkError::Skip) + } + fn transact_origin() -> Result { Ok(KsmLocation::get()) } @@ -923,6 +929,10 @@ impl_runtime_apis! { let ticket = MultiLocation { parents: 0, interior: Here }; Ok((origin, ticket, assets)) } + + fn unlockable_asset() -> Result<(MultiLocation, MultiLocation, MultiAsset), BenchmarkError> { + Err(BenchmarkError::Skip) + } } type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs index 7972667cf06..0ca8a414e44 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs @@ -62,7 +62,12 @@ impl XcmWeightInfo for StatemineXcmWeight { fn receive_teleported_asset(assets: &MultiAssets) -> XCMWeight { assets.weigh_multi_assets(XcmFungibleWeight::::receive_teleported_asset()) } - fn query_response(_query_id: &u64, _response: &Response, _max_weight: &u64) -> XCMWeight { + fn query_response( + _query_id: &u64, + _response: &Response, + _max_weight: &u64, + _querier: &Option, + ) -> XCMWeight { XcmGeneric::::query_response().ref_time() } fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> XCMWeight { @@ -104,19 +109,11 @@ impl XcmWeightInfo for StatemineXcmWeight { fn descend_origin(_who: &InteriorMultiLocation) -> XCMWeight { XcmGeneric::::descend_origin().ref_time() } - fn report_error( - _query_id: &QueryId, - _dest: &MultiLocation, - _max_response_weight: &u64, - ) -> XCMWeight { + fn report_error(_query_response_info: &QueryResponseInfo) -> XCMWeight { XcmGeneric::::report_error().ref_time() } - fn deposit_asset( - assets: &MultiAssetFilter, - _max_assets: &u32, - _dest: &MultiLocation, - ) -> XCMWeight { + fn deposit_asset(assets: &MultiAssetFilter, _dest: &MultiLocation) -> XCMWeight { // Hardcoded till the XCM pallet is fixed let hardcoded_weight = Weight::from_ref_time(1_000_000_000 as u64).ref_time(); let weight = assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()); @@ -124,13 +121,16 @@ impl XcmWeightInfo for StatemineXcmWeight { } fn deposit_reserve_asset( assets: &MultiAssetFilter, - _max_assets: &u32, _dest: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) } - fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { + fn exchange_asset( + _give: &MultiAssetFilter, + _receive: &MultiAssets, + _maximal: &bool, + ) -> XCMWeight { Weight::MAX.ref_time() } fn initiate_reserve_withdraw( @@ -150,13 +150,8 @@ impl XcmWeightInfo for StatemineXcmWeight { let weight = assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()); cmp::min(hardcoded_weight, weight) } - fn query_holding( - _query_id: &u64, - _dest: &MultiLocation, - _assets: &MultiAssetFilter, - _max_response_weight: &u64, - ) -> XCMWeight { - XcmGeneric::::query_holding().ref_time() + fn report_holding(_response_info: &QueryResponseInfo, _assets: &MultiAssetFilter) -> XCMWeight { + XcmGeneric::::report_holding().ref_time() } fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> XCMWeight { XcmGeneric::::buy_execution().ref_time() @@ -185,4 +180,65 @@ impl XcmWeightInfo for StatemineXcmWeight { fn unsubscribe_version() -> XCMWeight { XcmGeneric::::unsubscribe_version().ref_time() } + fn burn_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmGeneric::::burn_asset()) + } + fn expect_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmGeneric::::expect_asset()) + } + fn expect_origin(_origin: &Option) -> XCMWeight { + XcmGeneric::::expect_origin().ref_time() + } + fn expect_error(_error: &Option<(u32, XcmError)>) -> XCMWeight { + XcmGeneric::::expect_error().ref_time() + } + fn query_pallet(_module_name: &Vec, _response_info: &QueryResponseInfo) -> XCMWeight { + XcmGeneric::::query_pallet().ref_time() + } + fn expect_pallet( + _index: &u32, + _name: &Vec, + _module_name: &Vec, + _crate_major: &u32, + _min_crate_minor: &u32, + ) -> XCMWeight { + XcmGeneric::::expect_pallet().ref_time() + } + fn report_transact_status(_response_info: &QueryResponseInfo) -> XCMWeight { + XcmGeneric::::report_transact_status().ref_time() + } + fn clear_transact_status() -> XCMWeight { + XcmGeneric::::clear_transact_status().ref_time() + } + fn universal_origin(_: &Junction) -> XCMWeight { + Weight::MAX.ref_time() + } + fn export_message(_: &NetworkId, _: &Junctions, _: &Xcm<()>) -> XCMWeight { + Weight::MAX.ref_time() + } + fn lock_asset(_: &MultiAsset, _: &MultiLocation) -> XCMWeight { + Weight::MAX.ref_time() + } + fn unlock_asset(_: &MultiAsset, _: &MultiLocation) -> XCMWeight { + Weight::MAX.ref_time() + } + fn note_unlockable(_: &MultiAsset, _: &MultiLocation) -> XCMWeight { + Weight::MAX.ref_time() + } + fn request_unlock(_: &MultiAsset, _: &MultiLocation) -> XCMWeight { + Weight::MAX.ref_time() + } + fn set_fees_mode(_: &bool) -> XCMWeight { + XcmGeneric::::set_fees_mode().ref_time() + } + fn set_topic(_topic: &[u8; 32]) -> XCMWeight { + XcmGeneric::::set_topic().ref_time() + } + fn clear_topic() -> XCMWeight { + XcmGeneric::::clear_topic().ref_time() + } + fn alias_origin(_: &MultiLocation) -> XCMWeight { + // XCM Executor does not currently support alias origin operations + Weight::MAX.ref_time() + } } diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 6a9f36b7684..689c9a8220a 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -18,7 +18,8 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::generic` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-17, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-30, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm3`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemine-dev"), DB CACHE: 1024 // Executed Command: @@ -36,7 +37,7 @@ // --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json // --header=./file_header.txt // --template=./templates/xcm-bench-template.hbs -// --output=./parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +// --output=./parachains/runtimes/assets/statemine/src/weights/xcm/ #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -54,58 +55,59 @@ impl WeightInfo { // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) - pub(crate) fn query_holding() -> Weight { - Weight::from_ref_time(694_466_000 as u64) + pub(crate) fn report_holding() -> Weight { + Weight::from_ref_time(1_303_495_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } pub(crate) fn buy_execution() -> Weight { - Weight::from_ref_time(7_095_000 as u64) + Weight::from_ref_time(8_667_000 as u64) } // Storage: PolkadotXcm Queries (r:1 w:0) pub(crate) fn query_response() -> Weight { - Weight::from_ref_time(13_270_000 as u64) + Weight::from_ref_time(19_292_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) } pub(crate) fn transact() -> Weight { - Weight::from_ref_time(16_375_000 as u64) + Weight::from_ref_time(37_996_000 as u64) } pub(crate) fn refund_surplus() -> Weight { - Weight::from_ref_time(7_319_000 as u64) + Weight::from_ref_time(9_076_000 as u64) } pub(crate) fn set_error_handler() -> Weight { - Weight::from_ref_time(3_515_000 as u64) + Weight::from_ref_time(6_410_000 as u64) } pub(crate) fn set_appendix() -> Weight { - Weight::from_ref_time(3_501_000 as u64) + Weight::from_ref_time(6_412_000 as u64) } pub(crate) fn clear_error() -> Weight { - Weight::from_ref_time(3_459_000 as u64) + Weight::from_ref_time(6_311_000 as u64) } pub(crate) fn descend_origin() -> Weight { - Weight::from_ref_time(4_319_000 as u64) + Weight::from_ref_time(7_355_000 as u64) } pub(crate) fn clear_origin() -> Weight { - Weight::from_ref_time(3_511_000 as u64) + Weight::from_ref_time(6_389_000 as u64) } + // Storage: ParachainInfo ParachainId (r:1 w:0) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn report_error() -> Weight { - Weight::from_ref_time(13_284_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) + Weight::from_ref_time(23_020_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: PolkadotXcm AssetTraps (r:1 w:1) pub(crate) fn claim_asset() -> Weight { - Weight::from_ref_time(7_985_000 as u64) + Weight::from_ref_time(13_613_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } pub(crate) fn trap() -> Weight { - Weight::from_ref_time(3_515_000 as u64) + Weight::from_ref_time(6_457_000 as u64) } // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -114,13 +116,13 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn subscribe_version() -> Weight { - Weight::from_ref_time(16_657_000 as u64) + Weight::from_ref_time(31_677_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) pub(crate) fn unsubscribe_version() -> Weight { - Weight::from_ref_time(5_622_000 as u64) + Weight::from_ref_time(9_613_000 as u64) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: ParachainInfo ParachainId (r:1 w:0) @@ -130,8 +132,57 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_reserve_withdraw() -> Weight { - Weight::from_ref_time(878_786_000 as u64) + Weight::from_ref_time(1_588_580_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } + pub(crate) fn burn_asset() -> Weight { + Weight::from_ref_time(497_452_000 as u64) + } + pub(crate) fn expect_asset() -> Weight { + Weight::from_ref_time(38_502_000 as u64) + } + pub(crate) fn expect_origin() -> Weight { + Weight::from_ref_time(6_427_000 as u64) + } + pub(crate) fn expect_error() -> Weight { + Weight::from_ref_time(6_303_000 as u64) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn query_pallet() -> Weight { + Weight::from_ref_time(25_510_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } + pub(crate) fn expect_pallet() -> Weight { + Weight::from_ref_time(7_909_000 as u64) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn report_transact_status() -> Weight { + Weight::from_ref_time(22_949_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } + pub(crate) fn clear_transact_status() -> Weight { + Weight::from_ref_time(6_491_000 as u64) + } + pub(crate) fn set_topic() -> Weight { + Weight::from_ref_time(6_527_000 as u64) + } + pub(crate) fn clear_topic() -> Weight { + Weight::from_ref_time(6_440_000 as u64) + } + pub(crate) fn set_fees_mode() -> Weight { + Weight::from_ref_time(6_426_000 as u64) + } } diff --git a/parachains/runtimes/assets/statemine/src/xcm_config.rs b/parachains/runtimes/assets/statemine/src/xcm_config.rs index ed04677be4c..4841ee7c518 100644 --- a/parachains/runtimes/assets/statemine/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemine/src/xcm_config.rs @@ -14,8 +14,9 @@ // limitations under the License. use super::{ - AccountId, AssetId, Assets, Authorship, Balance, Balances, ParachainInfo, ParachainSystem, - PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, + AccountId, AllPalletsWithSystem, AssetId, Assets, Authorship, Balance, Balances, ParachainInfo, + ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, + XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -202,7 +203,7 @@ impl xcm_executor::Config for XcmConfig { type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; type SubscriptionService = PolkadotXcm; - type PalletInstancesInfo = (); + type PalletInstancesInfo = AllPalletsWithSystem; type MaxAssetsIntoHolding = MaxAssetsIntoHolding; type AssetLocker = (); type AssetExchanger = (); diff --git a/parachains/runtimes/assets/statemint/src/lib.rs b/parachains/runtimes/assets/statemint/src/lib.rs index 151259f839a..df2425d3667 100644 --- a/parachains/runtimes/assets/statemint/src/lib.rs +++ b/parachains/runtimes/assets/statemint/src/lib.rs @@ -878,7 +878,7 @@ impl_runtime_apis! { fn valid_destination() -> Result { Ok(DotLocation::get()) } - fn worst_case_holding() -> MultiAssets { + fn worst_case_holding(_depositable_count: u32) -> MultiAssets { // A mix of fungible, non-fungible, and concrete assets. const HOLDING_FUNGIBLES: u32 = 100; const HOLDING_NON_FUNGIBLES: u32 = 100; @@ -911,7 +911,6 @@ impl_runtime_apis! { DotLocation::get(), MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(DotLocation::get()) }, )); - pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = None; pub const CheckedAccount: Option = None; } @@ -920,7 +919,6 @@ impl_runtime_apis! { type CheckedAccount = CheckedAccount; type TrustedTeleporter = TrustedTeleporter; - type TrustedReserve = TrustedReserve; fn get_multi_asset() -> MultiAsset { MultiAsset { @@ -937,6 +935,14 @@ impl_runtime_apis! { (0u64, Response::Version(Default::default())) } + fn worst_case_asset_exchange() -> Result<(MultiAssets, MultiAssets), BenchmarkError> { + Err(BenchmarkError::Skip) + } + + fn universal_alias() -> Result { + Err(BenchmarkError::Skip) + } + fn transact_origin() -> Result { Ok(DotLocation::get()) } @@ -951,6 +957,10 @@ impl_runtime_apis! { let ticket = MultiLocation { parents: 0, interior: Here }; Ok((origin, ticket, assets)) } + + fn unlockable_asset() -> Result<(MultiLocation, MultiLocation, MultiAsset), BenchmarkError> { + Err(BenchmarkError::Skip) + } } type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs index 1a0ffcdb229..512be255779 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs @@ -62,7 +62,12 @@ impl XcmWeightInfo for StatemintXcmWeight { fn receive_teleported_asset(assets: &MultiAssets) -> XCMWeight { assets.weigh_multi_assets(XcmFungibleWeight::::receive_teleported_asset()) } - fn query_response(_query_id: &u64, _response: &Response, _max_weight: &u64) -> XCMWeight { + fn query_response( + _query_id: &u64, + _response: &Response, + _max_weight: &u64, + _querier: &Option, + ) -> XCMWeight { XcmGeneric::::query_response().ref_time() } fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> XCMWeight { @@ -104,19 +109,11 @@ impl XcmWeightInfo for StatemintXcmWeight { fn descend_origin(_who: &InteriorMultiLocation) -> XCMWeight { XcmGeneric::::descend_origin().ref_time() } - fn report_error( - _query_id: &QueryId, - _dest: &MultiLocation, - _max_response_weight: &u64, - ) -> XCMWeight { + fn report_error(_query_response_info: &QueryResponseInfo) -> XCMWeight { XcmGeneric::::report_error().ref_time() } - fn deposit_asset( - assets: &MultiAssetFilter, - _max_assets: &u32, - _dest: &MultiLocation, - ) -> XCMWeight { + fn deposit_asset(assets: &MultiAssetFilter, _dest: &MultiLocation) -> XCMWeight { // Hardcoded till the XCM pallet is fixed let hardcoded_weight = Weight::from_ref_time(1_000_000_000 as u64).ref_time(); let weight = assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()); @@ -124,13 +121,16 @@ impl XcmWeightInfo for StatemintXcmWeight { } fn deposit_reserve_asset( assets: &MultiAssetFilter, - _max_assets: &u32, _dest: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) } - fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { + fn exchange_asset( + _give: &MultiAssetFilter, + _receive: &MultiAssets, + _maximal: &bool, + ) -> XCMWeight { Weight::MAX.ref_time() } fn initiate_reserve_withdraw( @@ -150,13 +150,8 @@ impl XcmWeightInfo for StatemintXcmWeight { let weight = assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()); cmp::min(hardcoded_weight, weight) } - fn query_holding( - _query_id: &u64, - _dest: &MultiLocation, - _assets: &MultiAssetFilter, - _max_response_weight: &u64, - ) -> XCMWeight { - XcmGeneric::::query_holding().ref_time() + fn report_holding(_response_info: &QueryResponseInfo, _assets: &MultiAssetFilter) -> XCMWeight { + XcmGeneric::::report_holding().ref_time() } fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> XCMWeight { XcmGeneric::::buy_execution().ref_time() @@ -185,4 +180,65 @@ impl XcmWeightInfo for StatemintXcmWeight { fn unsubscribe_version() -> XCMWeight { XcmGeneric::::unsubscribe_version().ref_time() } + fn burn_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmGeneric::::burn_asset()) + } + fn expect_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmGeneric::::expect_asset()) + } + fn expect_origin(_origin: &Option) -> XCMWeight { + XcmGeneric::::expect_origin().ref_time() + } + fn expect_error(_error: &Option<(u32, XcmError)>) -> XCMWeight { + XcmGeneric::::expect_error().ref_time() + } + fn query_pallet(_module_name: &Vec, _response_info: &QueryResponseInfo) -> XCMWeight { + XcmGeneric::::query_pallet().ref_time() + } + fn expect_pallet( + _index: &u32, + _name: &Vec, + _module_name: &Vec, + _crate_major: &u32, + _min_crate_minor: &u32, + ) -> XCMWeight { + XcmGeneric::::expect_pallet().ref_time() + } + fn report_transact_status(_response_info: &QueryResponseInfo) -> XCMWeight { + XcmGeneric::::report_transact_status().ref_time() + } + fn clear_transact_status() -> XCMWeight { + XcmGeneric::::clear_transact_status().ref_time() + } + fn universal_origin(_: &Junction) -> XCMWeight { + Weight::MAX.ref_time() + } + fn export_message(_: &NetworkId, _: &Junctions, _: &Xcm<()>) -> XCMWeight { + Weight::MAX.ref_time() + } + fn lock_asset(_: &MultiAsset, _: &MultiLocation) -> XCMWeight { + Weight::MAX.ref_time() + } + fn unlock_asset(_: &MultiAsset, _: &MultiLocation) -> XCMWeight { + Weight::MAX.ref_time() + } + fn note_unlockable(_: &MultiAsset, _: &MultiLocation) -> XCMWeight { + Weight::MAX.ref_time() + } + fn request_unlock(_: &MultiAsset, _: &MultiLocation) -> XCMWeight { + Weight::MAX.ref_time() + } + fn set_fees_mode(_: &bool) -> XCMWeight { + XcmGeneric::::set_fees_mode().ref_time() + } + fn set_topic(_topic: &[u8; 32]) -> XCMWeight { + XcmGeneric::::set_topic().ref_time() + } + fn clear_topic() -> XCMWeight { + XcmGeneric::::clear_topic().ref_time() + } + fn alias_origin(_: &MultiLocation) -> XCMWeight { + // XCM Executor does not currently support alias origin operations + Weight::MAX.ref_time() + } } diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 7af8b8b280b..6ed0d1adff2 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::generic` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-25, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-30, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `bm3`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("statemint-dev"), DB CACHE: 1024 @@ -37,7 +37,7 @@ // --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json // --header=./file_header.txt // --template=./templates/xcm-bench-template.hbs -// --output=./parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +// --output=./parachains/runtimes/assets/statemint/src/weights/xcm/ #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -55,58 +55,59 @@ impl WeightInfo { // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) - pub(crate) fn query_holding() -> Weight { - Weight::from_ref_time(682_639_000 as u64) + pub(crate) fn report_holding() -> Weight { + Weight::from_ref_time(1_305_689_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } pub(crate) fn buy_execution() -> Weight { - Weight::from_ref_time(9_272_000 as u64) + Weight::from_ref_time(8_843_000 as u64) } // Storage: PolkadotXcm Queries (r:1 w:0) pub(crate) fn query_response() -> Weight { - Weight::from_ref_time(17_084_000 as u64) + Weight::from_ref_time(19_216_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) } pub(crate) fn transact() -> Weight { - Weight::from_ref_time(20_265_000 as u64) + Weight::from_ref_time(22_708_000 as u64) } pub(crate) fn refund_surplus() -> Weight { - Weight::from_ref_time(9_422_000 as u64) + Weight::from_ref_time(9_040_000 as u64) } pub(crate) fn set_error_handler() -> Weight { - Weight::from_ref_time(5_545_000 as u64) + Weight::from_ref_time(6_222_000 as u64) } pub(crate) fn set_appendix() -> Weight { - Weight::from_ref_time(5_450_000 as u64) + Weight::from_ref_time(6_411_000 as u64) } pub(crate) fn clear_error() -> Weight { - Weight::from_ref_time(5_519_000 as u64) + Weight::from_ref_time(6_222_000 as u64) } pub(crate) fn descend_origin() -> Weight { - Weight::from_ref_time(6_398_000 as u64) + Weight::from_ref_time(7_112_000 as u64) } pub(crate) fn clear_origin() -> Weight { - Weight::from_ref_time(5_498_000 as u64) + Weight::from_ref_time(6_340_000 as u64) } + // Storage: ParachainInfo ParachainId (r:1 w:0) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn report_error() -> Weight { - Weight::from_ref_time(15_784_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) + Weight::from_ref_time(22_943_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: PolkadotXcm AssetTraps (r:1 w:1) pub(crate) fn claim_asset() -> Weight { - Weight::from_ref_time(11_861_000 as u64) + Weight::from_ref_time(13_178_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } pub(crate) fn trap() -> Weight { - Weight::from_ref_time(5_462_000 as u64) + Weight::from_ref_time(6_333_000 as u64) } // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -115,13 +116,13 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn subscribe_version() -> Weight { - Weight::from_ref_time(18_997_000 as u64) + Weight::from_ref_time(31_798_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) pub(crate) fn unsubscribe_version() -> Weight { - Weight::from_ref_time(8_684_000 as u64) + Weight::from_ref_time(9_728_000 as u64) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: ParachainInfo ParachainId (r:1 w:0) @@ -131,8 +132,57 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_reserve_withdraw() -> Weight { - Weight::from_ref_time(883_121_000 as u64) + Weight::from_ref_time(1_583_652_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } + pub(crate) fn burn_asset() -> Weight { + Weight::from_ref_time(497_448_000 as u64) + } + pub(crate) fn expect_asset() -> Weight { + Weight::from_ref_time(38_383_000 as u64) + } + pub(crate) fn expect_origin() -> Weight { + Weight::from_ref_time(6_308_000 as u64) + } + pub(crate) fn expect_error() -> Weight { + Weight::from_ref_time(6_327_000 as u64) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn query_pallet() -> Weight { + Weight::from_ref_time(26_011_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } + pub(crate) fn expect_pallet() -> Weight { + Weight::from_ref_time(8_008_000 as u64) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn report_transact_status() -> Weight { + Weight::from_ref_time(22_963_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } + pub(crate) fn clear_transact_status() -> Weight { + Weight::from_ref_time(6_378_000 as u64) + } + pub(crate) fn set_topic() -> Weight { + Weight::from_ref_time(6_313_000 as u64) + } + pub(crate) fn clear_topic() -> Weight { + Weight::from_ref_time(6_324_000 as u64) + } + pub(crate) fn set_fees_mode() -> Weight { + Weight::from_ref_time(6_336_000 as u64) + } } diff --git a/parachains/runtimes/assets/statemint/src/xcm_config.rs b/parachains/runtimes/assets/statemint/src/xcm_config.rs index 16720f6fefc..bb9d82680fe 100644 --- a/parachains/runtimes/assets/statemint/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemint/src/xcm_config.rs @@ -14,8 +14,9 @@ // limitations under the License. use super::{ - AccountId, AssetId, Assets, Authorship, Balance, Balances, ParachainInfo, ParachainSystem, - PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, + AccountId, AllPalletsWithSystem, AssetId, Assets, Authorship, Balance, Balances, ParachainInfo, + ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, + XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -31,11 +32,10 @@ use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, AsPrefixedGeneralIndex, - ConvertedConcreteId, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, FungiblesAdapter, - IsConcrete, NativeAsset, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, - SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, - SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, - WeightInfoBounds, + ConvertedConcreteId, CurrencyAdapter, EnsureXcmOrigin, FungiblesAdapter, IsConcrete, + NativeAsset, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, + SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, + SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, WeightInfoBounds, }; use xcm_executor::{traits::JustTry, XcmExecutor}; @@ -179,7 +179,7 @@ impl xcm_executor::Config for XcmConfig { type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; type SubscriptionService = PolkadotXcm; - type PalletInstancesInfo = (); + type PalletInstancesInfo = AllPalletsWithSystem; type MaxAssetsIntoHolding = MaxAssetsIntoHolding; type AssetLocker = (); type AssetExchanger = (); diff --git a/parachains/runtimes/assets/westmint/src/lib.rs b/parachains/runtimes/assets/westmint/src/lib.rs index 1f1d86e1e7e..a227572609a 100644 --- a/parachains/runtimes/assets/westmint/src/lib.rs +++ b/parachains/runtimes/assets/westmint/src/lib.rs @@ -838,7 +838,7 @@ impl_runtime_apis! { fn valid_destination() -> Result { Ok(WestendLocation::get()) } - fn worst_case_holding() -> MultiAssets { + fn worst_case_holding(_depositable_count: u32) -> MultiAssets { // A mix of fungible, non-fungible, and concrete assets. const HOLDING_FUNGIBLES: u32 = 100; const HOLDING_NON_FUNGIBLES: u32 = 100; @@ -871,7 +871,6 @@ impl_runtime_apis! { WestendLocation::get(), MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(WestendLocation::get()) }, )); - pub const TrustedReserve: Option<(MultiLocation, MultiAsset)> = None; pub const CheckedAccount: Option = None; } @@ -881,7 +880,6 @@ impl_runtime_apis! { type CheckedAccount = CheckedAccount; type TrustedTeleporter = TrustedTeleporter; - type TrustedReserve = TrustedReserve; fn get_multi_asset() -> MultiAsset { MultiAsset { @@ -898,6 +896,14 @@ impl_runtime_apis! { (0u64, Response::Version(Default::default())) } + fn worst_case_asset_exchange() -> Result<(MultiAssets, MultiAssets), BenchmarkError> { + Err(BenchmarkError::Skip) + } + + fn universal_alias() -> Result { + Err(BenchmarkError::Skip) + } + fn transact_origin() -> Result { Ok(WestendLocation::get()) } @@ -912,6 +918,10 @@ impl_runtime_apis! { let ticket = MultiLocation { parents: 0, interior: Here }; Ok((origin, ticket, assets)) } + + fn unlockable_asset() -> Result<(MultiLocation, MultiLocation, MultiAsset), BenchmarkError> { + Err(BenchmarkError::Skip) + } } type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs index 5f6bf034fdc..56852eee6ab 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs @@ -62,7 +62,12 @@ impl XcmWeightInfo for WestmintXcmWeight { fn receive_teleported_asset(assets: &MultiAssets) -> XCMWeight { assets.weigh_multi_assets(XcmFungibleWeight::::receive_teleported_asset()) } - fn query_response(_query_id: &u64, _response: &Response, _max_weight: &u64) -> XCMWeight { + fn query_response( + _query_id: &u64, + _response: &Response, + _max_weight: &u64, + _querier: &Option, + ) -> XCMWeight { XcmGeneric::::query_response().ref_time() } fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> XCMWeight { @@ -104,19 +109,11 @@ impl XcmWeightInfo for WestmintXcmWeight { fn descend_origin(_who: &InteriorMultiLocation) -> XCMWeight { XcmGeneric::::descend_origin().ref_time() } - fn report_error( - _query_id: &QueryId, - _dest: &MultiLocation, - _max_response_weight: &u64, - ) -> XCMWeight { + fn report_error(_query_response_info: &QueryResponseInfo) -> XCMWeight { XcmGeneric::::report_error().ref_time() } - fn deposit_asset( - assets: &MultiAssetFilter, - _max_assets: &u32, - _dest: &MultiLocation, - ) -> XCMWeight { + fn deposit_asset(assets: &MultiAssetFilter, _dest: &MultiLocation) -> XCMWeight { // Hardcoded till the XCM pallet is fixed let hardcoded_weight = Weight::from_ref_time(1_000_000_000 as u64).ref_time(); let weight = assets.weigh_multi_assets(XcmFungibleWeight::::deposit_asset()); @@ -124,13 +121,16 @@ impl XcmWeightInfo for WestmintXcmWeight { } fn deposit_reserve_asset( assets: &MultiAssetFilter, - _max_assets: &u32, _dest: &MultiLocation, _xcm: &Xcm<()>, ) -> XCMWeight { assets.weigh_multi_assets(XcmFungibleWeight::::deposit_reserve_asset()) } - fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> XCMWeight { + fn exchange_asset( + _give: &MultiAssetFilter, + _receive: &MultiAssets, + _maximal: &bool, + ) -> XCMWeight { Weight::MAX.ref_time() } fn initiate_reserve_withdraw( @@ -150,13 +150,8 @@ impl XcmWeightInfo for WestmintXcmWeight { let weight = assets.weigh_multi_assets(XcmFungibleWeight::::initiate_teleport()); cmp::min(hardcoded_weight, weight) } - fn query_holding( - _query_id: &u64, - _dest: &MultiLocation, - _assets: &MultiAssetFilter, - _max_response_weight: &u64, - ) -> XCMWeight { - XcmGeneric::::query_holding().ref_time() + fn report_holding(_response_info: &QueryResponseInfo, _assets: &MultiAssetFilter) -> XCMWeight { + XcmGeneric::::report_holding().ref_time() } fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> XCMWeight { XcmGeneric::::buy_execution().ref_time() @@ -185,4 +180,65 @@ impl XcmWeightInfo for WestmintXcmWeight { fn unsubscribe_version() -> XCMWeight { XcmGeneric::::unsubscribe_version().ref_time() } + fn burn_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmGeneric::::burn_asset()) + } + fn expect_asset(assets: &MultiAssets) -> XCMWeight { + assets.weigh_multi_assets(XcmGeneric::::expect_asset()) + } + fn expect_origin(_origin: &Option) -> XCMWeight { + XcmGeneric::::expect_origin().ref_time() + } + fn expect_error(_error: &Option<(u32, XcmError)>) -> XCMWeight { + XcmGeneric::::expect_error().ref_time() + } + fn query_pallet(_module_name: &Vec, _response_info: &QueryResponseInfo) -> XCMWeight { + XcmGeneric::::query_pallet().ref_time() + } + fn expect_pallet( + _index: &u32, + _name: &Vec, + _module_name: &Vec, + _crate_major: &u32, + _min_crate_minor: &u32, + ) -> XCMWeight { + XcmGeneric::::expect_pallet().ref_time() + } + fn report_transact_status(_response_info: &QueryResponseInfo) -> XCMWeight { + XcmGeneric::::report_transact_status().ref_time() + } + fn clear_transact_status() -> XCMWeight { + XcmGeneric::::clear_transact_status().ref_time() + } + fn universal_origin(_: &Junction) -> XCMWeight { + Weight::MAX.ref_time() + } + fn export_message(_: &NetworkId, _: &Junctions, _: &Xcm<()>) -> XCMWeight { + Weight::MAX.ref_time() + } + fn lock_asset(_: &MultiAsset, _: &MultiLocation) -> XCMWeight { + Weight::MAX.ref_time() + } + fn unlock_asset(_: &MultiAsset, _: &MultiLocation) -> XCMWeight { + Weight::MAX.ref_time() + } + fn note_unlockable(_: &MultiAsset, _: &MultiLocation) -> XCMWeight { + Weight::MAX.ref_time() + } + fn request_unlock(_: &MultiAsset, _: &MultiLocation) -> XCMWeight { + Weight::MAX.ref_time() + } + fn set_fees_mode(_: &bool) -> XCMWeight { + XcmGeneric::::set_fees_mode().ref_time() + } + fn set_topic(_topic: &[u8; 32]) -> XCMWeight { + XcmGeneric::::set_topic().ref_time() + } + fn clear_topic() -> XCMWeight { + XcmGeneric::::clear_topic().ref_time() + } + fn alias_origin(_: &MultiLocation) -> XCMWeight { + // XCM Executor does not currently support alias origin operations + Weight::MAX.ref_time() + } } diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 80aff062d20..042e0b3a974 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -18,7 +18,8 @@ //! Autogenerated weights for `pallet_xcm_benchmarks::generic` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-08-17, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-09-30, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! HOSTNAME: `bm3`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westmint-dev"), DB CACHE: 1024 // Executed Command: @@ -36,7 +37,7 @@ // --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/cumulus/.git/.artifacts/bench.json // --header=./file_header.txt // --template=./templates/xcm-bench-template.hbs -// --output=./parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +// --output=./parachains/runtimes/assets/westmint/src/weights/xcm/ #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -54,58 +55,59 @@ impl WeightInfo { // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) - pub(crate) fn query_holding() -> Weight { - Weight::from_ref_time(676_316_000 as u64) + pub(crate) fn report_holding() -> Weight { + Weight::from_ref_time(1_324_853_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } pub(crate) fn buy_execution() -> Weight { - Weight::from_ref_time(7_030_000 as u64) + Weight::from_ref_time(8_533_000 as u64) } // Storage: PolkadotXcm Queries (r:1 w:0) pub(crate) fn query_response() -> Weight { - Weight::from_ref_time(12_574_000 as u64) + Weight::from_ref_time(19_435_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) } pub(crate) fn transact() -> Weight { - Weight::from_ref_time(15_764_000 as u64) + Weight::from_ref_time(22_656_000 as u64) } pub(crate) fn refund_surplus() -> Weight { - Weight::from_ref_time(7_200_000 as u64) + Weight::from_ref_time(8_900_000 as u64) } pub(crate) fn set_error_handler() -> Weight { - Weight::from_ref_time(3_310_000 as u64) + Weight::from_ref_time(6_255_000 as u64) } pub(crate) fn set_appendix() -> Weight { - Weight::from_ref_time(3_260_000 as u64) + Weight::from_ref_time(6_268_000 as u64) } pub(crate) fn clear_error() -> Weight { - Weight::from_ref_time(3_277_000 as u64) + Weight::from_ref_time(6_304_000 as u64) } pub(crate) fn descend_origin() -> Weight { - Weight::from_ref_time(3_913_000 as u64) + Weight::from_ref_time(7_279_000 as u64) } pub(crate) fn clear_origin() -> Weight { - Weight::from_ref_time(3_354_000 as u64) + Weight::from_ref_time(6_297_000 as u64) } + // Storage: ParachainInfo ParachainId (r:1 w:0) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn report_error() -> Weight { - Weight::from_ref_time(13_028_000 as u64) - .saturating_add(T::DbWeight::get().reads(5 as u64)) + Weight::from_ref_time(23_025_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } // Storage: PolkadotXcm AssetTraps (r:1 w:1) pub(crate) fn claim_asset() -> Weight { - Weight::from_ref_time(7_739_000 as u64) + Weight::from_ref_time(13_001_000 as u64) .saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64)) } pub(crate) fn trap() -> Weight { - Weight::from_ref_time(3_351_000 as u64) + Weight::from_ref_time(6_266_000 as u64) } // Storage: PolkadotXcm VersionNotifyTargets (r:1 w:1) // Storage: PolkadotXcm SupportedVersion (r:1 w:0) @@ -114,13 +116,13 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn subscribe_version() -> Weight { - Weight::from_ref_time(16_051_000 as u64) + Weight::from_ref_time(31_348_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(3 as u64)) } // Storage: PolkadotXcm VersionNotifyTargets (r:0 w:1) pub(crate) fn unsubscribe_version() -> Weight { - Weight::from_ref_time(5_477_000 as u64) + Weight::from_ref_time(9_534_000 as u64) .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: ParachainInfo ParachainId (r:1 w:0) @@ -130,8 +132,57 @@ impl WeightInfo { // Storage: ParachainSystem HostConfiguration (r:1 w:0) // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) pub(crate) fn initiate_reserve_withdraw() -> Weight { - Weight::from_ref_time(874_435_000 as u64) + Weight::from_ref_time(1_558_814_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } + pub(crate) fn burn_asset() -> Weight { + Weight::from_ref_time(496_802_000 as u64) + } + pub(crate) fn expect_asset() -> Weight { + Weight::from_ref_time(38_299_000 as u64) + } + pub(crate) fn expect_origin() -> Weight { + Weight::from_ref_time(6_354_000 as u64) + } + pub(crate) fn expect_error() -> Weight { + Weight::from_ref_time(6_234_000 as u64) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn query_pallet() -> Weight { + Weight::from_ref_time(25_150_000 as u64) .saturating_add(T::DbWeight::get().reads(6 as u64)) .saturating_add(T::DbWeight::get().writes(2 as u64)) } + pub(crate) fn expect_pallet() -> Weight { + Weight::from_ref_time(7_969_000 as u64) + } + // Storage: ParachainInfo ParachainId (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + pub(crate) fn report_transact_status() -> Weight { + Weight::from_ref_time(23_099_000 as u64) + .saturating_add(T::DbWeight::get().reads(6 as u64)) + .saturating_add(T::DbWeight::get().writes(2 as u64)) + } + pub(crate) fn clear_transact_status() -> Weight { + Weight::from_ref_time(6_366_000 as u64) + } + pub(crate) fn set_topic() -> Weight { + Weight::from_ref_time(6_422_000 as u64) + } + pub(crate) fn clear_topic() -> Weight { + Weight::from_ref_time(6_405_000 as u64) + } + pub(crate) fn set_fees_mode() -> Weight { + Weight::from_ref_time(6_392_000 as u64) + } } diff --git a/parachains/runtimes/assets/westmint/src/xcm_config.rs b/parachains/runtimes/assets/westmint/src/xcm_config.rs index a9d80012619..4f55696c69e 100644 --- a/parachains/runtimes/assets/westmint/src/xcm_config.rs +++ b/parachains/runtimes/assets/westmint/src/xcm_config.rs @@ -14,8 +14,9 @@ // limitations under the License. use super::{ - AccountId, AssetId, Assets, Authorship, Balance, Balances, ParachainInfo, ParachainSystem, - PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, + AccountId, AllPalletsWithSystem, AssetId, Assets, Authorship, Balance, Balances, ParachainInfo, + ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, + XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -198,7 +199,7 @@ impl xcm_executor::Config for XcmConfig { type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; type SubscriptionService = PolkadotXcm; - type PalletInstancesInfo = (); + type PalletInstancesInfo = AllPalletsWithSystem; type MaxAssetsIntoHolding = MaxAssetsIntoHolding; type AssetLocker = (); type AssetExchanger = (); diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs index 1e7b17de09a..2cb82656c37 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs @@ -14,8 +14,8 @@ // limitations under the License. use super::{ - AccountId, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, - RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, + AccountId, AllPalletsWithSystem, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, + Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -31,7 +31,7 @@ use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, CurrencyAdapter, EnsureXcmOrigin, - FixedWeightBounds, IsConcrete, NativeAsset, ParentAsSuperuser, ParentIsPreset, + FixedWeightBounds, IsConcrete, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, @@ -151,7 +151,7 @@ impl xcm_executor::Config for XcmConfig { type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; type SubscriptionService = PolkadotXcm; - type PalletInstancesInfo = (); + type PalletInstancesInfo = AllPalletsWithSystem; type MaxAssetsIntoHolding = MaxAssetsIntoHolding; type AssetLocker = (); type AssetExchanger = (); diff --git a/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs b/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs index fc0b834c4a3..4f53eca6dbc 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/xcm_config.rs @@ -14,8 +14,8 @@ // limitations under the License. use super::{ - AccountId, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, - RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, + AccountId, AllPalletsWithSystem, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, + Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -149,7 +149,7 @@ impl xcm_executor::Config for XcmConfig { type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; type SubscriptionService = PolkadotXcm; - type PalletInstancesInfo = super::AllPalletsWithSystem; + type PalletInstancesInfo = AllPalletsWithSystem; type MaxAssetsIntoHolding = ConstU32<8>; type AssetLocker = (); type AssetExchanger = (); diff --git a/parachains/runtimes/starters/shell/src/xcm_config.rs b/parachains/runtimes/starters/shell/src/xcm_config.rs index 6706c6af6bb..acc02df42af 100644 --- a/parachains/runtimes/starters/shell/src/xcm_config.rs +++ b/parachains/runtimes/starters/shell/src/xcm_config.rs @@ -13,7 +13,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -use super::{AccountId, ParachainInfo, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin}; +use super::{ + AccountId, AllPalletsWithSystem, ParachainInfo, Runtime, RuntimeCall, RuntimeEvent, + RuntimeOrigin, +}; use frame_support::{match_types, parameter_types, traits::Nothing}; use xcm::latest::prelude::*; use xcm_builder::{ @@ -67,7 +70,7 @@ impl xcm_executor::Config for XcmConfig { type AssetTrap = (); // don't trap for now type AssetClaims = (); // don't claim for now type SubscriptionService = (); // don't handle subscriptions for now - type PalletInstancesInfo = (); + type PalletInstancesInfo = AllPalletsWithSystem; type MaxAssetsIntoHolding = MaxAssetsIntoHolding; type AssetLocker = (); type AssetExchanger = (); diff --git a/parachains/runtimes/testing/penpal/src/xcm_config.rs b/parachains/runtimes/testing/penpal/src/xcm_config.rs index 62ae7fc3a95..e8f70c20e63 100644 --- a/parachains/runtimes/testing/penpal/src/xcm_config.rs +++ b/parachains/runtimes/testing/penpal/src/xcm_config.rs @@ -22,9 +22,9 @@ //! with statemine as the reserve. At present no derivative tokens are minted on receipt of a //! ReserveAssetTransferDeposited message but that will but the intension will be to support this soon. use super::{ - AccountId, AssetId as AssetIdPalletAssets, Assets, Balance, Balances, ParachainInfo, - ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, - XcmpQueue, + AccountId, AllPalletsWithSystem, AssetId as AssetIdPalletAssets, Assets, Balance, Balances, + ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, + WeightToFee, XcmpQueue, }; use core::marker::PhantomData; use frame_support::{ @@ -337,7 +337,7 @@ impl xcm_executor::Config for XcmConfig { type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; type SubscriptionService = PolkadotXcm; - type PalletInstancesInfo = (); + type PalletInstancesInfo = AllPalletsWithSystem; type MaxAssetsIntoHolding = MaxAssetsIntoHolding; type AssetLocker = (); type AssetExchanger = (); diff --git a/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/parachains/runtimes/testing/rococo-parachain/src/lib.rs index ec0fd38a3ed..80d97def583 100644 --- a/parachains/runtimes/testing/rococo-parachain/src/lib.rs +++ b/parachains/runtimes/testing/rococo-parachain/src/lib.rs @@ -417,7 +417,7 @@ impl xcm_executor::Config for XcmConfig { type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; type SubscriptionService = PolkadotXcm; - type PalletInstancesInfo = (); + type PalletInstancesInfo = AllPalletsWithSystem; type MaxAssetsIntoHolding = MaxAssetsIntoHolding; type AssetLocker = (); type AssetExchanger = (); From f5b18604c9be5669cca98377423c914031536d20 Mon Sep 17 00:00:00 2001 From: Kai <7630809+Kailai-Wang@users.noreply.github.com> Date: Mon, 3 Oct 2022 15:00:53 +0200 Subject: [PATCH 109/148] only register MaxCandidates-1 candidates initially (#1714) --- pallets/collator-selection/src/benchmarking.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pallets/collator-selection/src/benchmarking.rs b/pallets/collator-selection/src/benchmarking.rs index f5467fbd09a..2f4043092ae 100644 --- a/pallets/collator-selection/src/benchmarking.rs +++ b/pallets/collator-selection/src/benchmarking.rs @@ -147,7 +147,7 @@ benchmarks! { // worse case is when we have all the max-candidate slots filled except one, and we fill that // one. register_as_candidate { - let c in 1 .. T::MaxCandidates::get(); + let c in 1 .. T::MaxCandidates::get() - 1; >::put(T::Currency::minimum_balance()); >::put(c + 1); From 5c962b385cf45020066abd0e0e33a6b34603c558 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Oct 2022 09:39:22 +0200 Subject: [PATCH 110/148] Bump smallvec from 1.9.0 to 1.10.0 (#1723) Bumps [smallvec](https://github.com/servo/rust-smallvec) from 1.9.0 to 1.10.0. - [Release notes](https://github.com/servo/rust-smallvec/releases) - [Commits](https://github.com/servo/rust-smallvec/compare/v1.9.0...v1.10.0) --- updated-dependencies: - dependency-name: smallvec dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- parachain-template/runtime/Cargo.toml | 2 +- parachains/runtimes/assets/statemine/Cargo.toml | 2 +- parachains/runtimes/assets/statemint/Cargo.toml | 2 +- parachains/runtimes/assets/westmint/Cargo.toml | 2 +- .../runtimes/collectives/collectives-polkadot/Cargo.toml | 2 +- parachains/runtimes/contracts/contracts-rococo/Cargo.toml | 2 +- parachains/runtimes/testing/penpal/Cargo.toml | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 198a6a37345..17b6139822e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10762,9 +10762,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "snap" diff --git a/parachain-template/runtime/Cargo.toml b/parachain-template/runtime/Cargo.toml index 650f71b30d5..5e9b88e2f17 100644 --- a/parachain-template/runtime/Cargo.toml +++ b/parachain-template/runtime/Cargo.toml @@ -19,7 +19,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -smallvec = "1.9.0" +smallvec = "1.10.0" # Local pallet-template = { path = "../pallets/template", default-features = false } diff --git a/parachains/runtimes/assets/statemine/Cargo.toml b/parachains/runtimes/assets/statemine/Cargo.toml index cddf0ee5145..7c47a42a4fe 100644 --- a/parachains/runtimes/assets/statemine/Cargo.toml +++ b/parachains/runtimes/assets/statemine/Cargo.toml @@ -10,7 +10,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -smallvec = "1.9.0" +smallvec = "1.10.0" # Substrate frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "master" } diff --git a/parachains/runtimes/assets/statemint/Cargo.toml b/parachains/runtimes/assets/statemint/Cargo.toml index 2af1955a013..127bba217ac 100644 --- a/parachains/runtimes/assets/statemint/Cargo.toml +++ b/parachains/runtimes/assets/statemint/Cargo.toml @@ -10,7 +10,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -smallvec = "1.9.0" +smallvec = "1.10.0" # Substrate frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "master" } diff --git a/parachains/runtimes/assets/westmint/Cargo.toml b/parachains/runtimes/assets/westmint/Cargo.toml index 5003cf39eff..b8b06231155 100644 --- a/parachains/runtimes/assets/westmint/Cargo.toml +++ b/parachains/runtimes/assets/westmint/Cargo.toml @@ -10,7 +10,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -smallvec = "1.9.0" +smallvec = "1.10.0" # Substrate frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "master" } diff --git a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml index 7549366aee7..4a6939b7c0f 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml +++ b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml @@ -10,7 +10,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -smallvec = "1.6.1" +smallvec = "1.10.0" # Substrate frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "master" } diff --git a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml index be9fffaf7ed..1d4b48b415a 100644 --- a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml +++ b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml @@ -15,7 +15,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -smallvec = "1.9.0" +smallvec = "1.10.0" # Substrate sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } diff --git a/parachains/runtimes/testing/penpal/Cargo.toml b/parachains/runtimes/testing/penpal/Cargo.toml index a082c69c999..7aa20c46320 100644 --- a/parachains/runtimes/testing/penpal/Cargo.toml +++ b/parachains/runtimes/testing/penpal/Cargo.toml @@ -19,7 +19,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = hex-literal = { version = "0.3.4", optional = true } log = { version = "0.4.16", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -smallvec = "1.9.0" +smallvec = "1.10.0" # Substrate frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } From c6f1f46e9f5543079cf2de0361d70ba401c29af8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Oct 2022 22:49:55 +0200 Subject: [PATCH 111/148] Bump thiserror from 1.0.35 to 1.0.37 (#1704) Bumps [thiserror](https://github.com/dtolnay/thiserror) from 1.0.35 to 1.0.37. - [Release notes](https://github.com/dtolnay/thiserror/releases) - [Commits](https://github.com/dtolnay/thiserror/compare/1.0.35...1.0.37) --- updated-dependencies: - dependency-name: thiserror dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- client/relay-chain-interface/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 17b6139822e..7f1315eb52a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12075,18 +12075,18 @@ checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16" [[package]] name = "thiserror" -version = "1.0.35" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c53f98874615aea268107765aa1ed8f6116782501d18e53d08b471733bea6c85" +checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.35" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8b463991b4eab2d801e724172285ec4195c650e8ec79b149e6c2a8e6dd3f783" +checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" dependencies = [ "proc-macro2", "quote", diff --git a/client/relay-chain-interface/Cargo.toml b/client/relay-chain-interface/Cargo.toml index 8dd6771f20a..a6ba721fbeb 100644 --- a/client/relay-chain-interface/Cargo.toml +++ b/client/relay-chain-interface/Cargo.toml @@ -17,6 +17,6 @@ sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "mas futures = "0.3.24" async-trait = "0.1.57" -thiserror = "1.0.35" +thiserror = "1.0.37" jsonrpsee-core = "0.15.1" parity-scale-codec = "3.2.1" From 558af3e0632bce612e48f6ec148da48ea31cf5c1 Mon Sep 17 00:00:00 2001 From: Wilfried Kopp Date: Tue, 4 Oct 2022 18:18:26 +0200 Subject: [PATCH 112/148] Fix target of some Matrix notifications --- .github/workflows/release-10_rc-automation.yml | 10 ++++++++-- .github/workflows/release-30_create-draft.yml | 12 +++++++++--- .github/workflows/release-99_bot-announce.yml | 4 ++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/.github/workflows/release-10_rc-automation.yml b/.github/workflows/release-10_rc-automation.yml index 740b1860e12..1357df0c532 100644 --- a/.github/workflows/release-10_rc-automation.yml +++ b/.github/workflows/release-10_rc-automation.yml @@ -9,6 +9,12 @@ on: jobs: tag_rc: runs-on: ubuntu-latest + strategy: + matrix: + channel: + - name: 'Cumulus Release Coordination' + room: '!ZrLPsivsytpkdJfVaa:matrix.parity.io' + pre-releases: true steps: - name: Checkout sources uses: actions/checkout@v3 @@ -67,11 +73,11 @@ jobs: assignees: release-engineering filename: .github/ISSUE_TEMPLATE/release-runtime.md - - name: Send Matrix message + - name: Matrix notification to ${{ matrix.channel.name }} uses: s3krit/matrix-message-action@70ad3fb812ee0e45ff8999d6af11cafad11a6ecf # v0.0.3 if: steps.create-issue-checklist-client.outputs.url != '' && steps.create-issue-checklist-runtime.outputs.url != '' with: - room_id: ${{ secrets.INTERNAL_CUMULUS_MATRIX_ROOM_ID }} + room_id: ${{ matrix.channel.room }} access_token: ${{ secrets.MATRIX_ACCESS_TOKEN }} server: "matrix.parity.io" message: | diff --git a/.github/workflows/release-30_create-draft.yml b/.github/workflows/release-30_create-draft.yml index 2869aa5344e..68d0a383523 100644 --- a/.github/workflows/release-30_create-draft.yml +++ b/.github/workflows/release-30_create-draft.yml @@ -271,11 +271,17 @@ jobs: if: ${{ github.event.inputs.notification == 'true' }} runs-on: ubuntu-latest needs: publish-draft-release + strategy: + matrix: + channel: + - name: 'Cumulus Release Coordination' + room: '!ZrLPsivsytpkdJfVaa:matrix.parity.io' + pre-releases: true steps: - - name: Internal polkadot channel - uses: s3krit/matrix-message-action@v0.0.3 + - name: Matrix notification to ${{ matrix.channel.name }} + uses: s3krit/matrix-message-action@70ad3fb812ee0e45ff8999d6af11cafad11a6ecf # v0.0.3 with: - room_id: ${{ secrets.INTERNAL_CUMULUS_MATRIX_ROOM_ID }} + room_id: ${{ matrix.channel.room }} access_token: ${{ secrets.MATRIX_ACCESS_TOKEN }} message: | **New draft for ${{ github.repository }}**: ${{ github.event.inputs.ref2 }}
diff --git a/.github/workflows/release-99_bot-announce.yml b/.github/workflows/release-99_bot-announce.yml index 4a12bdb1fde..155b4500c0e 100644 --- a/.github/workflows/release-99_bot-announce.yml +++ b/.github/workflows/release-99_bot-announce.yml @@ -18,8 +18,8 @@ jobs: pre-release: true steps: - - name: send message - uses: s3krit/matrix-message-action@v0.0.3 + - name: Matrix notification to ${{ matrix.channel.name }} + uses: s3krit/matrix-message-action@70ad3fb812ee0e45ff8999d6af11cafad11a6ecf # v0.0.3 with: room_id: ${{ matrix.channel.room }} access_token: ${{ secrets.MATRIX_ACCESS_TOKEN }} From c06dea341adb71f528590252c125ca6ccd992b62 Mon Sep 17 00:00:00 2001 From: Chevdor Date: Wed, 5 Oct 2022 13:01:58 +0200 Subject: [PATCH 113/148] fmt (#1731) --- parachain-template/runtime/src/lib.rs | 3 ++- parachains/common/src/lib.rs | 3 ++- parachains/runtimes/starters/seedling/src/lib.rs | 3 ++- parachains/runtimes/starters/shell/src/lib.rs | 3 ++- parachains/runtimes/testing/penpal/src/lib.rs | 3 ++- parachains/runtimes/testing/rococo-parachain/src/lib.rs | 3 ++- test/runtime/src/lib.rs | 3 ++- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/parachain-template/runtime/src/lib.rs b/parachain-template/runtime/src/lib.rs index 3ad6a055e82..a52b4982636 100644 --- a/parachain-template/runtime/src/lib.rs +++ b/parachain-template/runtime/src/lib.rs @@ -217,7 +217,8 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(5); const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for 0.5 of a second of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2) +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND + .saturating_div(2) .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); /// The version information used to identify this runtime when compiled natively. diff --git a/parachains/common/src/lib.rs b/parachains/common/src/lib.rs index 1ad4dc2f85c..c192d6e2a7e 100644 --- a/parachains/common/src/lib.rs +++ b/parachains/common/src/lib.rs @@ -92,7 +92,8 @@ mod constants { pub const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for 0.5 seconds of compute with a 6 second average block time. - pub const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2) + pub const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND + .saturating_div(2) .set_proof_size(polkadot_primitives::v2::MAX_POV_SIZE as u64); } diff --git a/parachains/runtimes/starters/seedling/src/lib.rs b/parachains/runtimes/starters/seedling/src/lib.rs index 84327c4dc7d..67cc9dede21 100644 --- a/parachains/runtimes/starters/seedling/src/lib.rs +++ b/parachains/runtimes/starters/seedling/src/lib.rs @@ -85,7 +85,8 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2) +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND + .saturating_div(2) .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); parameter_types! { diff --git a/parachains/runtimes/starters/shell/src/lib.rs b/parachains/runtimes/starters/shell/src/lib.rs index 4eefd1befaa..2d91a0c015b 100644 --- a/parachains/runtimes/starters/shell/src/lib.rs +++ b/parachains/runtimes/starters/shell/src/lib.rs @@ -92,7 +92,8 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2) +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND + .saturating_div(2) .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); parameter_types! { diff --git a/parachains/runtimes/testing/penpal/src/lib.rs b/parachains/runtimes/testing/penpal/src/lib.rs index 0a18f70f0f4..dddb71773f6 100644 --- a/parachains/runtimes/testing/penpal/src/lib.rs +++ b/parachains/runtimes/testing/penpal/src/lib.rs @@ -230,7 +230,8 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(5); const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for 0.5 of a second of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2) +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND + .saturating_div(2) .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); /// The version information used to identify this runtime when compiled natively. diff --git a/parachains/runtimes/testing/rococo-parachain/src/lib.rs b/parachains/runtimes/testing/rococo-parachain/src/lib.rs index ec6a08b0b42..21d784aae65 100644 --- a/parachains/runtimes/testing/rococo-parachain/src/lib.rs +++ b/parachains/runtimes/testing/rococo-parachain/src/lib.rs @@ -134,7 +134,8 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2) +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND + .saturating_div(2) .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); parameter_types! { diff --git a/test/runtime/src/lib.rs b/test/runtime/src/lib.rs index 4ac173efef7..786590b8b91 100644 --- a/test/runtime/src/lib.rs +++ b/test/runtime/src/lib.rs @@ -140,7 +140,8 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for .5 seconds of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND.saturating_div(2) +const MAXIMUM_BLOCK_WEIGHT: Weight = WEIGHT_PER_SECOND + .saturating_div(2) .set_proof_size(cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE as u64); parameter_types! { From 4635068280868158110a9cd122cab14d293b4044 Mon Sep 17 00:00:00 2001 From: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> Date: Wed, 5 Oct 2022 14:39:41 +0200 Subject: [PATCH 114/148] [ci] add fmt check (#1733) * [ci] add fmt check * fix name * remove gha from branches --- .github/workflows/fmt-check.yml | 37 +++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 .github/workflows/fmt-check.yml diff --git a/.github/workflows/fmt-check.yml b/.github/workflows/fmt-check.yml new file mode 100644 index 00000000000..844dda46b8b --- /dev/null +++ b/.github/workflows/fmt-check.yml @@ -0,0 +1,37 @@ +name: Rustfmt check + +on: + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + quick_check: + strategy: + matrix: + os: ["ubuntu-latest"] + runs-on: ${{ matrix.os }} + steps: + - name: Install Rust nightly toolchain + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: nightly + override: true + components: clippy, rustfmt + + - name: Cache Dependencies & Build Outputs + uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-${{ matrix.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + + - uses: actions/checkout@v3 + + - name: Cargo fmt + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check From 95b8a21c910fcdff43d50fdd4255f86a65d745b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Thei=C3=9Fen?= Date: Wed, 5 Oct 2022 15:59:26 +0200 Subject: [PATCH 115/148] Companion for contracts WeightV2 (#1726) * Remove `ContractAccessWeight` * update lockfile for {"polkadot", "substrate"} * update lockfile for {"substrate", "polkadot"} Co-authored-by: parity-processbot <> --- Cargo.lock | 622 ++++++++++-------- .../contracts-rococo/src/contracts.rs | 3 +- 2 files changed, 352 insertions(+), 273 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7f1315eb52a..675a857bb7c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -469,7 +469,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "array-bytes", "async-trait", @@ -506,7 +506,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -526,16 +526,17 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "beefy-primitives", "sp-api", + "sp-runtime", ] [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "parity-scale-codec", "scale-info", @@ -588,9 +589,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitvec" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1489fcb93a5bb47da0462ca93ad252ad6af2145cce58d10d46a83931ba9f016b" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", @@ -2747,7 +2748,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "parity-scale-codec", ] @@ -2764,7 +2765,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support", "frame-system", @@ -2787,7 +2788,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "Inflector", "array-bytes", @@ -2838,7 +2839,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2849,7 +2850,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2865,7 +2866,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support", "frame-system", @@ -2894,7 +2895,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "bitflags", "frame-metadata", @@ -2926,7 +2927,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "Inflector", "cfg-expr", @@ -2940,7 +2941,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2952,7 +2953,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "proc-macro2", "quote", @@ -2962,7 +2963,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support", "log", @@ -2980,7 +2981,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -2995,7 +2996,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "parity-scale-codec", "sp-api", @@ -3004,7 +3005,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support", "parity-scale-codec", @@ -3883,7 +3884,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "beefy-primitives", "bitvec", @@ -3906,6 +3907,7 @@ dependencies = [ "pallet-bounties", "pallet-child-bounties", "pallet-collective", + "pallet-conviction-voting", "pallet-democracy", "pallet-election-provider-multi-phase", "pallet-election-provider-support-benchmarking", @@ -3925,7 +3927,9 @@ dependencies = [ "pallet-offences-benchmarking", "pallet-preimage", "pallet-proxy", + "pallet-ranked-collective", "pallet-recovery", + "pallet-referenda", "pallet-scheduler", "pallet-session", "pallet-session-benchmarking", @@ -3939,6 +3943,7 @@ dependencies = [ "pallet-treasury", "pallet-utility", "pallet-vesting", + "pallet-whitelist", "pallet-xcm", "pallet-xcm-benchmarks", "parity-scale-codec", @@ -3977,7 +3982,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "frame-support", "polkadot-primitives", @@ -5315,8 +5320,9 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "orchestra" -version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aab54694ddaa8a9b703724c6ef04272b2d27bc32d2c855aae5cdd1857216b43" dependencies = [ "async-trait", "dyn-clonable", @@ -5331,8 +5337,9 @@ dependencies = [ [[package]] name = "orchestra-proc-macro" -version = "0.0.1" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a702b2f6bf592b3eb06c00d80d05afaf7a8eff6b41bb361e397d799acc21b45a" dependencies = [ "expander 0.0.6", "itertools", @@ -5370,7 +5377,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "array-bytes", "frame-benchmarking", @@ -5391,7 +5398,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support", "frame-system", @@ -5408,7 +5415,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -5422,7 +5429,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support", "frame-system", @@ -5438,7 +5445,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support", "frame-system", @@ -5454,7 +5461,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support", "frame-system", @@ -5469,7 +5476,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -5493,7 +5500,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5513,7 +5520,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -5528,7 +5535,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "beefy-primitives", "frame-support", @@ -5544,7 +5551,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "array-bytes", "beefy-merkle-tree", @@ -5567,7 +5574,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -5585,7 +5592,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -5629,7 +5636,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -5646,7 +5653,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "bitflags", "frame-benchmarking", @@ -5674,18 +5681,19 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "bitflags", "parity-scale-codec", "sp-runtime", "sp-std", + "sp-weights", ] [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "proc-macro2", "quote", @@ -5695,7 +5703,7 @@ dependencies = [ [[package]] name = "pallet-contracts-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -5705,10 +5713,27 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-conviction-voting" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +dependencies = [ + "assert_matches", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-io", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -5724,7 +5749,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5748,7 +5773,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5761,7 +5786,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -5779,7 +5804,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5800,7 +5825,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -5815,7 +5840,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -5838,7 +5863,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5854,7 +5879,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -5874,7 +5899,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -5891,7 +5916,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -5908,7 +5933,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5926,7 +5951,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5941,7 +5966,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -5956,7 +5981,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support", "frame-system", @@ -5973,7 +5998,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5993,7 +6018,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "parity-scale-codec", "sp-api", @@ -6003,7 +6028,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support", "frame-system", @@ -6020,7 +6045,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6043,7 +6068,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -6059,7 +6084,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -6074,7 +6099,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support", "frame-system", @@ -6085,16 +6110,52 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-ranked-collective" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-referenda" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ + "assert_matches", "frame-benchmarking", "frame-support", "frame-system", "parity-scale-codec", "scale-info", + "serde", + "sp-arithmetic", "sp-io", "sp-runtime", "sp-std", @@ -6103,7 +6164,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -6119,7 +6180,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support", "frame-system", @@ -6140,7 +6201,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -6156,7 +6217,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support", "frame-system", @@ -6170,7 +6231,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6193,7 +6254,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6204,7 +6265,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "log", "sp-arithmetic", @@ -6213,7 +6274,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support", "frame-system", @@ -6242,7 +6303,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -6260,7 +6321,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -6279,7 +6340,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-support", "frame-system", @@ -6295,7 +6356,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6310,7 +6371,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6321,7 +6382,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -6338,7 +6399,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -6353,7 +6414,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -6369,7 +6430,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-benchmarking", "frame-support", @@ -6381,10 +6442,25 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-whitelist" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "frame-support", "frame-system", @@ -6402,7 +6478,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "frame-benchmarking", "frame-support", @@ -6955,7 +7031,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -6970,7 +7046,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -6984,12 +7060,12 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "derive_more", "fatality", "futures", - "lru 0.7.7", + "lru 0.8.0", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7007,11 +7083,11 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "fatality", "futures", - "lru 0.7.7", + "lru 0.8.0", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7028,7 +7104,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7054,7 +7130,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7095,9 +7171,10 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "always-assert", + "bitvec", "fatality", "futures", "futures-timer", @@ -7116,7 +7193,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7129,12 +7206,14 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "derive_more", "fatality", "futures", - "lru 0.7.7", + "futures-timer", + "indexmap", + "lru 0.8.0", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7152,7 +7231,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7166,7 +7245,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "futures", "futures-timer", @@ -7186,7 +7265,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "always-assert", "async-trait", @@ -7210,7 +7289,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "futures", "parity-scale-codec", @@ -7228,14 +7307,14 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "bitvec", "derive_more", "futures", "futures-timer", "kvdb", - "lru 0.7.7", + "lru 0.8.0", "merlin", "parity-scale-codec", "polkadot-node-jaeger", @@ -7257,7 +7336,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "bitvec", "futures", @@ -7277,7 +7356,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "bitvec", "fatality", @@ -7296,7 +7375,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7311,7 +7390,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "async-trait", "futures", @@ -7329,7 +7408,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7344,7 +7423,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "futures", "futures-timer", @@ -7361,12 +7440,12 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "fatality", "futures", "kvdb", - "lru 0.7.7", + "lru 0.8.0", "parity-scale-codec", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -7380,7 +7459,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "async-trait", "futures", @@ -7397,7 +7476,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "bitvec", "fatality", @@ -7415,7 +7494,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "always-assert", "assert_matches", @@ -7447,7 +7526,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "futures", "polkadot-node-primitives", @@ -7463,7 +7542,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "futures", "memory-lru", @@ -7479,7 +7558,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "async-std", "lazy_static", @@ -7497,7 +7576,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "bs58", "futures", @@ -7516,7 +7595,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "async-trait", "derive_more", @@ -7539,7 +7618,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "bounded-vec", "futures", @@ -7561,7 +7640,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7571,7 +7650,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "async-trait", "futures", @@ -7589,7 +7668,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "async-trait", "derive_more", @@ -7612,7 +7691,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "async-trait", "derive_more", @@ -7620,7 +7699,7 @@ dependencies = [ "futures", "itertools", "kvdb", - "lru 0.7.7", + "lru 0.8.0", "parity-db", "parity-scale-codec", "parity-util-mem", @@ -7645,12 +7724,12 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "async-trait", "futures", "futures-timer", - "lru 0.7.7", + "lru 0.8.0", "orchestra", "parity-util-mem", "parking_lot 0.12.1", @@ -7668,7 +7747,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "derive_more", "frame-support", @@ -7765,7 +7844,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7780,7 +7859,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "bitvec", "frame-system", @@ -7810,7 +7889,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7842,7 +7921,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "beefy-primitives", "bitvec", @@ -7931,7 +8010,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "beefy-primitives", "bitvec", @@ -7978,7 +8057,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "frame-support", "polkadot-primitives", @@ -7990,7 +8069,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "bs58", "parity-scale-codec", @@ -8002,7 +8081,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "bitflags", "bitvec", @@ -8045,7 +8124,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "async-trait", "beefy-gadget", @@ -8057,7 +8136,7 @@ dependencies = [ "kusama-runtime", "kvdb", "kvdb-rocksdb", - "lru 0.7.7", + "lru 0.8.0", "pallet-babe", "pallet-im-online", "pallet-staking", @@ -8150,7 +8229,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8171,7 +8250,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8181,7 +8260,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8206,7 +8285,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "beefy-primitives", "bitvec", @@ -8267,7 +8346,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "frame-benchmarking", "frame-system", @@ -8412,7 +8491,8 @@ dependencies = [ [[package]] name = "prioritized-metered-channel" version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382698e48a268c832d0b181ed438374a6bb708a82a8ca273bb0f61c74cf209c4" dependencies = [ "coarsetime", "crossbeam-queue", @@ -8897,7 +8977,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9016,7 +9096,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9100,7 +9180,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "frame-support", "polkadot-primitives", @@ -9270,7 +9350,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "log", "sp-core", @@ -9281,7 +9361,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "async-trait", "futures", @@ -9290,8 +9370,8 @@ dependencies = [ "libp2p", "log", "parity-scale-codec", - "prost 0.10.3", - "prost-build 0.10.4", + "prost 0.11.0", + "prost-build 0.11.1", "rand 0.7.3", "sc-client-api", "sc-network-common", @@ -9308,7 +9388,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "futures", "futures-timer", @@ -9331,7 +9411,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9347,7 +9427,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9364,7 +9444,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9375,7 +9455,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "array-bytes", "chrono", @@ -9415,7 +9495,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "fnv", "futures", @@ -9443,7 +9523,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "hash-db", "kvdb", @@ -9468,7 +9548,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "async-trait", "futures", @@ -9492,7 +9572,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "async-trait", "futures", @@ -9521,7 +9601,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "async-trait", "fork-tree", @@ -9563,7 +9643,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "futures", "jsonrpsee", @@ -9585,7 +9665,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9598,7 +9678,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "async-trait", "futures", @@ -9622,7 +9702,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9649,7 +9729,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "environmental", "parity-scale-codec", @@ -9665,7 +9745,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "log", "parity-scale-codec", @@ -9680,7 +9760,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9700,7 +9780,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "ahash", "array-bytes", @@ -9741,7 +9821,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "finality-grandpa", "futures", @@ -9762,7 +9842,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "ansi_term", "futures", @@ -9779,7 +9859,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "array-bytes", "async-trait", @@ -9794,7 +9874,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "array-bytes", "async-trait", @@ -9816,7 +9896,7 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.12.1", "pin-project", - "prost 0.10.3", + "prost 0.11.0", "rand 0.7.3", "sc-block-builder", "sc-client-api", @@ -9841,7 +9921,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "cid", "futures", @@ -9861,7 +9941,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "async-trait", "bitflags", @@ -9871,7 +9951,7 @@ dependencies = [ "libp2p", "linked_hash_set", "parity-scale-codec", - "prost-build 0.10.4", + "prost-build 0.11.1", "sc-consensus", "sc-peerset", "serde", @@ -9887,7 +9967,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "ahash", "futures", @@ -9905,15 +9985,15 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "array-bytes", "futures", "libp2p", "log", "parity-scale-codec", - "prost 0.10.3", - "prost-build 0.10.4", + "prost 0.11.0", + "prost-build 0.11.1", "sc-client-api", "sc-network-common", "sc-peerset", @@ -9926,7 +10006,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "array-bytes", "fork-tree", @@ -9935,8 +10015,8 @@ dependencies = [ "log", "lru 0.7.7", "parity-scale-codec", - "prost 0.10.3", - "prost-build 0.10.4", + "prost 0.11.0", + "prost-build 0.11.1", "sc-client-api", "sc-consensus", "sc-network-common", @@ -9954,7 +10034,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "array-bytes", "futures", @@ -9973,7 +10053,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "array-bytes", "bytes", @@ -10003,7 +10083,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "futures", "libp2p", @@ -10016,7 +10096,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10025,7 +10105,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "futures", "hash-db", @@ -10055,7 +10135,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "futures", "jsonrpsee", @@ -10078,7 +10158,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "futures", "jsonrpsee", @@ -10091,7 +10171,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "async-trait", "directories", @@ -10161,7 +10241,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "log", "parity-scale-codec", @@ -10175,7 +10255,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10194,7 +10274,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "futures", "libc", @@ -10213,7 +10293,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "chrono", "futures", @@ -10231,7 +10311,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "ansi_term", "atty", @@ -10262,7 +10342,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10273,7 +10353,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "futures", "futures-timer", @@ -10299,7 +10379,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "futures", "log", @@ -10312,7 +10392,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "futures", "futures-timer", @@ -10742,7 +10822,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "enumn", "parity-scale-codec", @@ -10818,7 +10898,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "hash-db", "log", @@ -10836,7 +10916,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "blake2", "proc-macro-crate", @@ -10848,7 +10928,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "parity-scale-codec", "scale-info", @@ -10861,7 +10941,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "integer-sqrt", "num-traits", @@ -10876,7 +10956,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "parity-scale-codec", "scale-info", @@ -10889,7 +10969,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "async-trait", "parity-scale-codec", @@ -10901,7 +10981,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "parity-scale-codec", "sp-api", @@ -10913,7 +10993,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "futures", "log", @@ -10931,7 +11011,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "async-trait", "futures", @@ -10950,7 +11030,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "async-trait", "parity-scale-codec", @@ -10968,7 +11048,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "async-trait", "merlin", @@ -10991,7 +11071,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "parity-scale-codec", "scale-info", @@ -11005,7 +11085,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "parity-scale-codec", "scale-info", @@ -11018,7 +11098,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "array-bytes", "base58", @@ -11064,7 +11144,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "blake2", "byteorder", @@ -11078,7 +11158,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "proc-macro2", "quote", @@ -11089,7 +11169,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11098,7 +11178,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "proc-macro2", "quote", @@ -11108,7 +11188,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "environmental", "parity-scale-codec", @@ -11119,7 +11199,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "finality-grandpa", "log", @@ -11137,7 +11217,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11151,7 +11231,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "bytes", "futures", @@ -11177,7 +11257,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "lazy_static", "sp-core", @@ -11188,7 +11268,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "async-trait", "futures", @@ -11205,7 +11285,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "thiserror", "zstd", @@ -11214,7 +11294,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "log", "parity-scale-codec", @@ -11229,7 +11309,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "parity-scale-codec", "scale-info", @@ -11243,7 +11323,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "sp-api", "sp-core", @@ -11253,7 +11333,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "backtrace", "lazy_static", @@ -11263,7 +11343,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "rustc-hash", "serde", @@ -11273,7 +11353,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "either", "hash256-std-hasher", @@ -11296,7 +11376,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11314,7 +11394,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "Inflector", "proc-macro-crate", @@ -11326,7 +11406,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "log", "parity-scale-codec", @@ -11340,7 +11420,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "serde", "serde_json", @@ -11349,7 +11429,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "parity-scale-codec", "scale-info", @@ -11363,7 +11443,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "parity-scale-codec", "scale-info", @@ -11374,7 +11454,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "hash-db", "log", @@ -11396,12 +11476,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11414,7 +11494,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "log", "sp-core", @@ -11427,7 +11507,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "async-trait", "futures-timer", @@ -11443,7 +11523,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "parity-scale-codec", "sp-std", @@ -11455,7 +11535,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "sp-api", "sp-runtime", @@ -11464,7 +11544,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "async-trait", "log", @@ -11480,7 +11560,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "ahash", "hash-db", @@ -11503,7 +11583,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11520,7 +11600,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11531,7 +11611,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "impl-trait-for-tuples", "log", @@ -11544,7 +11624,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11840,7 +11920,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "platforms", ] @@ -11848,7 +11928,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11869,7 +11949,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "futures-util", "hyper", @@ -11882,7 +11962,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "jsonrpsee", "log", @@ -11903,7 +11983,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "array-bytes", "async-trait", @@ -11929,7 +12009,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11939,7 +12019,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11950,7 +12030,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "ansi_term", "build-helper", @@ -12058,7 +12138,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "frame-support", "polkadot-primitives", @@ -12339,7 +12419,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12350,7 +12430,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12477,7 +12557,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#37664fe5b3513eb996225f016eceaf74963b8133" +source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" dependencies = [ "clap", "frame-try-runtime", @@ -13065,7 +13145,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "beefy-primitives", "bitvec", @@ -13155,7 +13235,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "frame-support", "polkadot-primitives", @@ -13438,7 +13518,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13452,7 +13532,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "frame-support", "frame-system", @@ -13472,7 +13552,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "frame-benchmarking", "frame-support", @@ -13490,7 +13570,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#3dbe51576a82c1297be7b43601dd97bc57693316" +source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" dependencies = [ "Inflector", "proc-macro2", diff --git a/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs b/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs index db59f925276..dab23f07b78 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/contracts.rs @@ -9,7 +9,7 @@ use frame_support::{ }; use pallet_contracts::{ weights::{SubstrateWeight, WeightInfo}, - Config, DefaultAddressGenerator, DefaultContractAccessWeight, Frame, Schedule, + Config, DefaultAddressGenerator, Frame, Schedule, }; pub use parachains_common::AVERAGE_ON_INITIALIZE_RATIO; @@ -55,7 +55,6 @@ impl Config for Runtime { type Schedule = MySchedule; type CallStack = [Frame; 31]; type AddressGenerator = DefaultAddressGenerator; - type ContractAccessWeight = DefaultContractAccessWeight; type MaxCodeLen = ConstU32<{ 128 * 1024 }>; type MaxStorageKeyLen = ConstU32<128>; } From 62e9c425e27801d6a3171cf072d64fd0e6a8d9cb Mon Sep 17 00:00:00 2001 From: Wilfried Kopp Date: Wed, 5 Oct 2022 12:16:05 +0200 Subject: [PATCH 116/148] Add protoc --- .github/workflows/docs.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index b2888f12471..ce9c6ec48f3 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -11,6 +11,11 @@ jobs: runs-on: ubuntu-latest steps: + - name: Install tooling + run: | + apt-get install -y protobuf + protoc --version + - name: Checkout repository uses: actions/checkout@v3 From f836f83c876c8266bb9d443f0b91d0a9e799191f Mon Sep 17 00:00:00 2001 From: Chevdor Date: Wed, 5 Oct 2022 12:40:57 +0200 Subject: [PATCH 117/148] Update .github/workflows/docs.yml Co-authored-by: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index ce9c6ec48f3..a7c87b1a8d6 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -13,7 +13,7 @@ jobs: steps: - name: Install tooling run: | - apt-get install -y protobuf + apt-get install -y protobuf-compiler protoc --version - name: Checkout repository From a668de357d27acae9f1eeca77a5830bb585e452b Mon Sep 17 00:00:00 2001 From: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> Date: Thu, 6 Oct 2022 10:13:40 +0200 Subject: [PATCH 118/148] [ci] check fmt on master (#1734) --- .github/workflows/fmt-check.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/fmt-check.yml b/.github/workflows/fmt-check.yml index 844dda46b8b..8f68be7a4ad 100644 --- a/.github/workflows/fmt-check.yml +++ b/.github/workflows/fmt-check.yml @@ -1,6 +1,9 @@ name: Rustfmt check on: + push: + branches: + - master pull_request: types: [opened, synchronize, reopened, ready_for_review] From 30900e0e3c9bc501942815f62077f04e54190a25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Thei=C3=9Fen?= Date: Thu, 6 Oct 2022 10:41:13 +0200 Subject: [PATCH 119/148] Companion for Adapt to new contracts runtime api (#1736) * Adapt to new contracts runtime api * Compile fix * update lockfile for {"polkadot", "substrate"} Co-authored-by: parity-processbot <> --- Cargo.lock | 596 +++++++++--------- .../contracts/contracts-rococo/Cargo.toml | 2 - .../contracts/contracts-rococo/src/lib.rs | 14 +- 3 files changed, 289 insertions(+), 323 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 675a857bb7c..be498e906c8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -469,7 +469,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "array-bytes", "async-trait", @@ -506,7 +506,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -526,7 +526,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "beefy-primitives", "sp-api", @@ -536,7 +536,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "parity-scale-codec", "scale-info", @@ -564,9 +564,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.59.2" +version = "0.60.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8" +checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6" dependencies = [ "bitflags", "cexpr", @@ -982,7 +982,7 @@ checksum = "fa66045b9cb23c2e9c1520732030608b02ee07e5cfaa5a521ec15ded7fa24c90" dependencies = [ "glob", "libc", - "libloading 0.7.2", + "libloading", ] [[package]] @@ -1168,7 +1168,6 @@ dependencies = [ "pallet-collator-selection", "pallet-contracts", "pallet-contracts-primitives", - "pallet-contracts-runtime-api", "pallet-multisig", "pallet-randomness-collective-flip", "pallet-session", @@ -2710,9 +2709,9 @@ dependencies = [ [[package]] name = "fixed-hash" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", "rand 0.8.5", @@ -2748,7 +2747,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "parity-scale-codec", ] @@ -2765,7 +2764,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support", "frame-system", @@ -2788,7 +2787,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "Inflector", "array-bytes", @@ -2839,7 +2838,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2850,7 +2849,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2866,7 +2865,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support", "frame-system", @@ -2895,7 +2894,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "bitflags", "frame-metadata", @@ -2927,7 +2926,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "Inflector", "cfg-expr", @@ -2941,7 +2940,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -2953,7 +2952,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "proc-macro2", "quote", @@ -2963,7 +2962,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support", "log", @@ -2981,7 +2980,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -2996,7 +2995,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "parity-scale-codec", "sp-api", @@ -3005,7 +3004,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support", "parity-scale-codec", @@ -3020,18 +3019,6 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ebd3504ad6116843b8375ad70df74e7bfe83cac77a1f3fe73200c844d43bfe0" -[[package]] -name = "fs-swap" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03d47dad3685eceed8488986cad3d5027165ea5edb164331770e2059555f10a5" -dependencies = [ - "lazy_static", - "libc", - "libloading 0.5.2", - "winapi", -] - [[package]] name = "fs2" version = "0.4.3" @@ -3597,9 +3584,9 @@ dependencies = [ [[package]] name = "impl-serde" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4551f042f3438e64dbd6226b20527fc84a6e1fe65688b58746a2f53623f25f5c" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" dependencies = [ "serde", ] @@ -3884,7 +3871,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "beefy-primitives", "bitvec", @@ -3982,7 +3969,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "frame-support", "polkadot-primitives", @@ -4002,9 +3989,9 @@ dependencies = [ [[package]] name = "kvdb" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a301d8ecb7989d4a6e2c57a49baca77d353bdbf879909debe3f375fe25d61f86" +checksum = "585089ceadba0197ffe9af6740ab350b325e3c1f5fccfbc3522e0250c750409b" dependencies = [ "parity-util-mem", "smallvec", @@ -4012,9 +3999,9 @@ dependencies = [ [[package]] name = "kvdb-memorydb" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece7e668abd21387aeb6628130a6f4c802787f014fa46bc83221448322250357" +checksum = "40d109c87bfb7759edd2a49b2649c1afe25af785d930ad6a38479b4dc70dd873" dependencies = [ "kvdb", "parity-util-mem", @@ -4023,15 +4010,13 @@ dependencies = [ [[package]] name = "kvdb-rocksdb" -version = "0.15.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca7fbdfd71cd663dceb0faf3367a99f8cf724514933e9867cec4995b6027cbc1" +checksum = "c076cc2cdbac89b9910c853a36c957d3862a779f31c2661174222cefb49ee597" dependencies = [ - "fs-swap", "kvdb", "log", "num_cpus", - "owning_ref", "parity-util-mem", "parking_lot 0.12.1", "regex", @@ -4057,16 +4042,6 @@ version = "0.2.131" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04c3b4822ccebfa39c02fc03d1534441b22ead323fa0f48bb7ddd8e6ba076a40" -[[package]] -name = "libloading" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" -dependencies = [ - "cc", - "winapi", -] - [[package]] name = "libloading" version = "0.7.2" @@ -4600,9 +4575,9 @@ dependencies = [ [[package]] name = "librocksdb-sys" -version = "0.6.1+6.28.2" +version = "0.8.0+7.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bc587013734dadb7cf23468e531aa120788b87243648be42e2d3a072186291" +checksum = "611804e4666a25136fcc5f8cf425ab4d26c7f74ea245ffe92ea23b85b6420b5d" dependencies = [ "bindgen", "bzip2-sys", @@ -4858,9 +4833,9 @@ dependencies = [ [[package]] name = "memory-db" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6566c70c1016f525ced45d7b7f97730a2bafb037c788211d0c186ef5b2189f0a" +checksum = "34ac11bb793c28fa095b7554466f53b3a60a2cd002afdac01bcf135cbd73a269" dependencies = [ "hash-db", "hashbrown 0.12.3", @@ -5377,7 +5352,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "array-bytes", "frame-benchmarking", @@ -5398,7 +5373,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support", "frame-system", @@ -5415,7 +5390,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -5429,7 +5404,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support", "frame-system", @@ -5445,7 +5420,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support", "frame-system", @@ -5461,7 +5436,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support", "frame-system", @@ -5476,7 +5451,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -5500,7 +5475,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5520,7 +5495,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -5535,7 +5510,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "beefy-primitives", "frame-support", @@ -5551,7 +5526,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "array-bytes", "beefy-merkle-tree", @@ -5574,7 +5549,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -5592,7 +5567,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -5636,7 +5611,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -5653,7 +5628,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "bitflags", "frame-benchmarking", @@ -5669,6 +5644,7 @@ dependencies = [ "scale-info", "serde", "smallvec", + "sp-api", "sp-core", "sp-io", "sp-runtime", @@ -5681,7 +5657,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "bitflags", "parity-scale-codec", @@ -5693,30 +5669,17 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "proc-macro2", "quote", "syn", ] -[[package]] -name = "pallet-contracts-runtime-api" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" -dependencies = [ - "pallet-contracts-primitives", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-runtime", - "sp-std", -] - [[package]] name = "pallet-conviction-voting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "assert_matches", "frame-benchmarking", @@ -5733,14 +5696,16 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "log", "parity-scale-codec", "scale-info", "serde", + "sp-core", "sp-io", "sp-runtime", "sp-std", @@ -5749,7 +5714,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5773,7 +5738,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5786,7 +5751,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -5804,7 +5769,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5825,7 +5790,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -5840,7 +5805,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -5863,7 +5828,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5879,7 +5844,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -5899,7 +5864,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -5916,7 +5881,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -5933,7 +5898,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5951,7 +5916,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5966,11 +5931,12 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "log", "parity-scale-codec", "scale-info", "sp-io", @@ -5981,7 +5947,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support", "frame-system", @@ -5998,7 +5964,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6018,7 +5984,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "parity-scale-codec", "sp-api", @@ -6028,7 +5994,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support", "frame-system", @@ -6045,7 +6011,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6068,11 +6034,12 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "log", "parity-scale-codec", "scale-info", "sp-core", @@ -6084,7 +6051,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -6099,7 +6066,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support", "frame-system", @@ -6113,7 +6080,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -6131,7 +6098,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -6146,7 +6113,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "assert_matches", "frame-benchmarking", @@ -6164,7 +6131,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -6180,7 +6147,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support", "frame-system", @@ -6201,7 +6168,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -6217,7 +6184,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support", "frame-system", @@ -6231,7 +6198,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6254,7 +6221,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6265,7 +6232,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "log", "sp-arithmetic", @@ -6274,7 +6241,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support", "frame-system", @@ -6303,7 +6270,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -6321,7 +6288,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -6340,7 +6307,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-support", "frame-system", @@ -6356,7 +6323,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6371,7 +6338,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6382,7 +6349,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -6399,7 +6366,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -6414,7 +6381,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -6430,7 +6397,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -6445,7 +6412,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-benchmarking", "frame-support", @@ -6460,7 +6427,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "frame-support", "frame-system", @@ -6478,7 +6445,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6697,9 +6664,9 @@ checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" [[package]] name = "parity-util-mem" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c32561d248d352148124f036cac253a644685a21dc9fea383eb4907d7bd35a8f" +checksum = "0d32c34f4f5ca7f9196001c0aba5a1f9a5a12382c8944b8b0f90233282d1e8f8" dependencies = [ "cfg-if 1.0.0", "hashbrown 0.12.3", @@ -7031,7 +6998,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7046,7 +7013,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7060,7 +7027,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "derive_more", "fatality", @@ -7083,7 +7050,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "fatality", "futures", @@ -7104,7 +7071,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7130,7 +7097,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7171,7 +7138,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "always-assert", "bitvec", @@ -7193,7 +7160,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7206,7 +7173,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "derive_more", "fatality", @@ -7231,7 +7198,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7245,7 +7212,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "futures", "futures-timer", @@ -7265,7 +7232,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "always-assert", "async-trait", @@ -7289,7 +7256,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "futures", "parity-scale-codec", @@ -7307,7 +7274,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "bitvec", "derive_more", @@ -7336,7 +7303,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "bitvec", "futures", @@ -7356,7 +7323,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "bitvec", "fatality", @@ -7375,7 +7342,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7390,7 +7357,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "async-trait", "futures", @@ -7408,7 +7375,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7423,7 +7390,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "futures", "futures-timer", @@ -7440,7 +7407,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "fatality", "futures", @@ -7459,7 +7426,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "async-trait", "futures", @@ -7476,7 +7443,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "bitvec", "fatality", @@ -7494,7 +7461,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "always-assert", "assert_matches", @@ -7526,7 +7493,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "futures", "polkadot-node-primitives", @@ -7542,7 +7509,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "futures", "memory-lru", @@ -7558,7 +7525,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "async-std", "lazy_static", @@ -7576,7 +7543,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "bs58", "futures", @@ -7595,7 +7562,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "async-trait", "derive_more", @@ -7618,7 +7585,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "bounded-vec", "futures", @@ -7640,7 +7607,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7650,7 +7617,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "async-trait", "futures", @@ -7668,7 +7635,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "async-trait", "derive_more", @@ -7691,7 +7658,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "async-trait", "derive_more", @@ -7724,7 +7691,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "async-trait", "futures", @@ -7747,7 +7714,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "derive_more", "frame-support", @@ -7844,7 +7811,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7859,7 +7826,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "bitvec", "frame-system", @@ -7889,7 +7856,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7921,7 +7888,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "beefy-primitives", "bitvec", @@ -8010,7 +7977,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "beefy-primitives", "bitvec", @@ -8057,7 +8024,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "frame-support", "polkadot-primitives", @@ -8069,7 +8036,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "bs58", "parity-scale-codec", @@ -8081,7 +8048,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "bitflags", "bitvec", @@ -8124,7 +8091,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "async-trait", "beefy-gadget", @@ -8229,7 +8196,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8250,7 +8217,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8260,7 +8227,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8285,7 +8252,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "beefy-primitives", "bitvec", @@ -8346,7 +8313,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "frame-benchmarking", "frame-system", @@ -8477,9 +8444,9 @@ dependencies = [ [[package]] name = "primitive-types" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28720988bff275df1f51b171e1b2a18c30d194c4d2b61defdacecd625a5d94a" +checksum = "5cfd65aea0c5fa0bfcc7c9e7ca828c921ef778f43d325325ec84bda371bfa75a" dependencies = [ "fixed-hash", "impl-codec", @@ -8977,7 +8944,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9038,9 +9005,9 @@ dependencies = [ [[package]] name = "rocksdb" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "620f4129485ff1a7128d184bc687470c21c7951b64779ebc9cfdad3dcd920290" +checksum = "7e9562ea1d70c0cc63a34a22d977753b50cca91cc6b6527750463bd5dd8697bc" dependencies = [ "libc", "librocksdb-sys", @@ -9096,7 +9063,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9180,7 +9147,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "frame-support", "polkadot-primitives", @@ -9350,7 +9317,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "log", "sp-core", @@ -9361,7 +9328,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "async-trait", "futures", @@ -9388,7 +9355,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "futures", "futures-timer", @@ -9411,7 +9378,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9427,7 +9394,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9444,7 +9411,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9455,7 +9422,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "array-bytes", "chrono", @@ -9495,7 +9462,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "fnv", "futures", @@ -9523,7 +9490,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "hash-db", "kvdb", @@ -9548,7 +9515,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "async-trait", "futures", @@ -9572,7 +9539,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "async-trait", "futures", @@ -9601,7 +9568,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "async-trait", "fork-tree", @@ -9643,7 +9610,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "futures", "jsonrpsee", @@ -9665,7 +9632,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9678,7 +9645,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "async-trait", "futures", @@ -9702,7 +9669,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9729,7 +9696,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "environmental", "parity-scale-codec", @@ -9745,7 +9712,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "log", "parity-scale-codec", @@ -9760,7 +9727,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9780,7 +9747,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "ahash", "array-bytes", @@ -9821,7 +9788,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "finality-grandpa", "futures", @@ -9842,7 +9809,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "ansi_term", "futures", @@ -9859,7 +9826,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "array-bytes", "async-trait", @@ -9874,7 +9841,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "array-bytes", "async-trait", @@ -9921,7 +9888,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "cid", "futures", @@ -9941,7 +9908,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "async-trait", "bitflags", @@ -9967,7 +9934,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "ahash", "futures", @@ -9985,7 +9952,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "array-bytes", "futures", @@ -10006,7 +9973,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "array-bytes", "fork-tree", @@ -10034,7 +10001,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "array-bytes", "futures", @@ -10053,7 +10020,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "array-bytes", "bytes", @@ -10083,7 +10050,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "futures", "libp2p", @@ -10096,7 +10063,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10105,7 +10072,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "futures", "hash-db", @@ -10135,7 +10102,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "futures", "jsonrpsee", @@ -10158,7 +10125,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "futures", "jsonrpsee", @@ -10171,7 +10138,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "async-trait", "directories", @@ -10241,7 +10208,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "log", "parity-scale-codec", @@ -10255,7 +10222,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10274,7 +10241,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "futures", "libc", @@ -10293,7 +10260,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "chrono", "futures", @@ -10311,7 +10278,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "ansi_term", "atty", @@ -10342,7 +10309,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10353,7 +10320,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "futures", "futures-timer", @@ -10379,7 +10346,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "futures", "log", @@ -10392,7 +10359,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "futures", "futures-timer", @@ -10822,7 +10789,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "enumn", "parity-scale-codec", @@ -10898,7 +10865,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "hash-db", "log", @@ -10916,7 +10883,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "blake2", "proc-macro-crate", @@ -10928,7 +10895,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "parity-scale-codec", "scale-info", @@ -10941,7 +10908,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "integer-sqrt", "num-traits", @@ -10956,7 +10923,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "parity-scale-codec", "scale-info", @@ -10969,7 +10936,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "async-trait", "parity-scale-codec", @@ -10981,7 +10948,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "parity-scale-codec", "sp-api", @@ -10993,7 +10960,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "futures", "log", @@ -11011,7 +10978,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "async-trait", "futures", @@ -11030,7 +10997,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "async-trait", "parity-scale-codec", @@ -11048,7 +11015,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "async-trait", "merlin", @@ -11071,7 +11038,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "parity-scale-codec", "scale-info", @@ -11085,7 +11052,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "parity-scale-codec", "scale-info", @@ -11098,7 +11065,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "array-bytes", "base58", @@ -11144,7 +11111,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "blake2", "byteorder", @@ -11158,7 +11125,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "proc-macro2", "quote", @@ -11169,7 +11136,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11178,7 +11145,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "proc-macro2", "quote", @@ -11188,7 +11155,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "environmental", "parity-scale-codec", @@ -11199,7 +11166,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "finality-grandpa", "log", @@ -11217,7 +11184,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11231,7 +11198,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "bytes", "futures", @@ -11257,7 +11224,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "lazy_static", "sp-core", @@ -11268,7 +11235,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "async-trait", "futures", @@ -11285,7 +11252,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "thiserror", "zstd", @@ -11294,10 +11261,11 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "log", "parity-scale-codec", + "scale-info", "serde", "sp-api", "sp-core", @@ -11309,7 +11277,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "parity-scale-codec", "scale-info", @@ -11323,7 +11291,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "sp-api", "sp-core", @@ -11333,7 +11301,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "backtrace", "lazy_static", @@ -11343,7 +11311,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "rustc-hash", "serde", @@ -11353,7 +11321,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "either", "hash256-std-hasher", @@ -11376,7 +11344,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11394,7 +11362,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "Inflector", "proc-macro-crate", @@ -11406,7 +11374,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "log", "parity-scale-codec", @@ -11420,7 +11388,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "serde", "serde_json", @@ -11429,7 +11397,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "parity-scale-codec", "scale-info", @@ -11443,7 +11411,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "parity-scale-codec", "scale-info", @@ -11454,7 +11422,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "hash-db", "log", @@ -11476,12 +11444,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11494,7 +11462,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "log", "sp-core", @@ -11507,7 +11475,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "async-trait", "futures-timer", @@ -11523,7 +11491,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "parity-scale-codec", "sp-std", @@ -11535,7 +11503,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "sp-api", "sp-runtime", @@ -11544,7 +11512,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "async-trait", "log", @@ -11560,7 +11528,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "ahash", "hash-db", @@ -11583,7 +11551,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11600,7 +11568,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11611,7 +11579,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "impl-trait-for-tuples", "log", @@ -11624,7 +11592,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11920,7 +11888,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "platforms", ] @@ -11928,7 +11896,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11949,7 +11917,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "futures-util", "hyper", @@ -11962,7 +11930,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "jsonrpsee", "log", @@ -11983,7 +11951,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "array-bytes", "async-trait", @@ -12009,7 +11977,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "futures", "substrate-test-utils-derive", @@ -12019,7 +11987,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -12030,7 +11998,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "ansi_term", "build-helper", @@ -12138,7 +12106,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "frame-support", "polkadot-primitives", @@ -12212,9 +12180,9 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.4.3+5.2.1-patched.2" +version = "0.5.2+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1792ccb507d955b46af42c123ea8863668fae24d03721e40cad6a41773dbb49" +checksum = "ec45c14da997d0925c7835883e4d5c181f196fa142f8c19d7643d1e9af2592c3" dependencies = [ "cc", "fs_extra", @@ -12419,7 +12387,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12430,7 +12398,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12557,7 +12525,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#7a8de4995715cc6cd11a79eb262bf41e5b190943" +source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" dependencies = [ "clap", "frame-try-runtime", @@ -13145,7 +13113,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "beefy-primitives", "bitvec", @@ -13235,7 +13203,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "frame-support", "polkadot-primitives", @@ -13518,7 +13486,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13532,7 +13500,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "frame-support", "frame-system", @@ -13552,7 +13520,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "frame-benchmarking", "frame-support", @@ -13570,7 +13538,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#df4a1c3cd919c727c1c1c3676229193de1134380" +source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" dependencies = [ "Inflector", "proc-macro2", diff --git a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml index 1d4b48b415a..4bd3715fe49 100644 --- a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml +++ b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml @@ -49,7 +49,6 @@ pallet-utility = { git = "https://github.com/paritytech/substrate", default-feat pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } pallet-contracts = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } pallet-contracts-primitives = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-contracts-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } # Polkadot kusama-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } @@ -93,7 +92,6 @@ std = [ "pallet-balances/std", "pallet-collator-selection/std", "pallet-contracts-primitives/std", - "pallet-contracts-runtime-api/std", "pallet-contracts/std", "pallet-multisig/std", "pallet-randomness-collective-flip/std", diff --git a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index 8bbe2edec6a..92ddbaf7adb 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -505,22 +505,21 @@ impl_runtime_apis! { } } -impl pallet_contracts_runtime_api::ContractsApi - for Runtime - { + impl pallet_contracts::ContractsApi for Runtime { fn call( origin: AccountId, dest: AccountId, value: Balance, - gas_limit: u64, + gas_limit: Option, storage_deposit_limit: Option, input_data: Vec, ) -> pallet_contracts_primitives::ContractExecResult { + let gas_limit = gas_limit.unwrap_or(RuntimeBlockWeights::get().max_block); Contracts::bare_call( origin, dest, value, - Weight::from_ref_time(gas_limit), + gas_limit, storage_deposit_limit, input_data, contracts::CONTRACTS_DEBUG_OUTPUT, @@ -530,16 +529,17 @@ impl pallet_contracts_runtime_api::ContractsApi, storage_deposit_limit: Option, code: pallet_contracts_primitives::Code, data: Vec, salt: Vec, ) -> pallet_contracts_primitives::ContractInstantiateResult { + let gas_limit = gas_limit.unwrap_or(RuntimeBlockWeights::get().max_block); Contracts::bare_instantiate( origin, value, - Weight::from_ref_time(gas_limit), + gas_limit, storage_deposit_limit, code, data, From 8db577e34263872a4853dc37c60dcf6506432e72 Mon Sep 17 00:00:00 2001 From: Wilfried Kopp Date: Wed, 5 Oct 2022 17:03:20 +0200 Subject: [PATCH 120/148] Fix protoc install --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a7c87b1a8d6..b9f73c2a359 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -13,7 +13,7 @@ jobs: steps: - name: Install tooling run: | - apt-get install -y protobuf-compiler + sudo apt-get install -y protobuf-compiler protoc --version - name: Checkout repository From fde36ad4f909799358fca41aa9c8a35e5249c00d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Oct 2022 23:04:47 +0200 Subject: [PATCH 121/148] Bump syn from 1.0.101 to 1.0.102 (#1746) Bumps [syn](https://github.com/dtolnay/syn) from 1.0.101 to 1.0.102. - [Release notes](https://github.com/dtolnay/syn/releases) - [Commits](https://github.com/dtolnay/syn/compare/1.0.101...1.0.102) --- updated-dependencies: - dependency-name: syn dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- pallets/parachain-system/proc-macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index be498e906c8..5ed50bdc72c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12020,9 +12020,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.101" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e90cde112c4b9690b8cbe810cba9ddd8bc1d7472e2cae317b69e9438c1cba7d2" +checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1" dependencies = [ "proc-macro2", "quote", diff --git a/pallets/parachain-system/proc-macro/Cargo.toml b/pallets/parachain-system/proc-macro/Cargo.toml index 6e9141fdd00..0bedb8660ee 100644 --- a/pallets/parachain-system/proc-macro/Cargo.toml +++ b/pallets/parachain-system/proc-macro/Cargo.toml @@ -9,7 +9,7 @@ description = "Proc macros provided by the parachain-system pallet" proc-macro = true [dependencies] -syn = "1.0.101" +syn = "1.0.102" proc-macro2 = "1.0.46" quote = "1.0.21" proc-macro-crate = "1.2.1" From 7612d616e01e8cb1fee57937f2cc7a85c32d367d Mon Sep 17 00:00:00 2001 From: Sebastian Kunert Date: Mon, 10 Oct 2022 09:06:26 +0200 Subject: [PATCH 122/148] Enable collation via RPC relay chain node (#1585) * Add minimal overseer gen with dummy subsystems * Fix dependencies * no-compile: only client transaction pool missing * Remove unused imports * Continue to hack towards PoC * Continue * Make mini node compile * Compiling version with blockchainevents trait * Continue * Check in lockfile * Block with tokio * update patches * Update polkadot patches * Use polkadot-primitives v2 * Fix build problems * First working version * Adjust cargo.lock * Add integration test * Make integration test work * Allow startinc collator without relay-chain args * Make OverseerRuntimeClient async * Create separate integration test * Remove unused ChainSelection code * Remove unused parameters on new-mini * Connect collator node in test to relay chain nodes * Make BlockChainRPCClient obsolete * Clean up * Clean up * Reimplement blockchain-rpc-events * Revert "Allow startinc collator without relay-chain args" This reverts commit f22c70e16521f375fe125df5616d48ceea926b1a. * Add `strict_record_validation` to AuthorityDiscovery * Move network to cumulus * Remove BlockchainRPCEvents * Remove `BlockIdTo` and `BlockchainEvents` * Make AuthorityDiscovery async * Use hash in OverseerRuntime * Adjust naming of runtime client trait * Implement more rpc-client methods * Improve error handling for `ApiError` * Extract authority-discovery creationand cleanup * RPC -> Rpc * Extract bitswap * Adjust to changes on master * Implement `hash` method * Introduce DummyChainSync, remove ProofProvider and BlockBackend * Remove `HeaderMetadata` from blockchain-rpc-client * Make ChainSync work * Implement NetworkHeaderBackend * Cleanup * Adjustments after master merge * Remove ImportQueue from network parameters * Remove cargo patches * Eliminate warnings * Revert to HeaderBackend * Add zombienet test * Implement `status()` method * Add more comments, improve readability * Remove patches from Cargo.toml * Remove integration test in favor of zombienet * Remove unused dependencies, rename minimal node crate * Adjust to latest master changes * fmt * Execute zombienet test on gitlab ci * Reuse network metrics * Chainsync metrics * fmt * Feed RPC node as boot node to the relay chain minimal node * fmt * Add bootnodes to zombienet collators * Allow specification of relay chain args * Apply review suggestions * Remove unnecessary casts * Enable PoV recovery for rpc full nodes * Revert unwanted changes * Make overseerHandle non-optional * Add availability-store subsystem * Add AuxStore and ChainApiSubsystem * Add availability distribution subsystem * Improve pov-recovery logging and add RPC nodes to tests * fmt * Make availability config const * lock * Enable debug logs for pov-recovery in zombienet * Add log filters to test binary * Allow wss * Address review comments * Apply reviewer comments * Adjust to master changes * Apply reviewer suggestions * Bump polkadot * Add builder method for minimal node * Bump substrate and polkadot * Clean up overseer building * Add bootnode to two in pov_recovery test * Fix missing quote in pov recovery zombienet test * Improve zombienet pov test * More debug logs for pov-recovery * Remove reserved nodes like on original test * Revert zombienet test to master --- .gitlab-ci.yml | 29 ++ Cargo.lock | 51 ++ Cargo.toml | 1 + client/cli/src/lib.rs | 8 +- client/network/src/tests.rs | 2 +- client/pov-recovery/Cargo.toml | 1 + client/pov-recovery/src/lib.rs | 12 +- client/pov-recovery/tests/pov_recovery.rs | 41 +- .../Cargo.toml | 4 + .../src/lib.rs | 16 +- client/relay-chain-interface/src/lib.rs | 25 +- client/relay-chain-minimal-node/Cargo.toml | 49 ++ .../src/blockchain_rpc_client.rs | 463 ++++++++++++++++++ .../src/collator_overseer.rs | 274 +++++++++++ client/relay-chain-minimal-node/src/lib.rs | 223 +++++++++ .../relay-chain-minimal-node/src/network.rs | 384 +++++++++++++++ client/relay-chain-rpc-interface/Cargo.toml | 3 + client/relay-chain-rpc-interface/src/lib.rs | 11 +- .../src/rpc_client.rs | 304 ++++++++++-- client/service/src/lib.rs | 17 +- parachain-template/node/Cargo.toml | 1 + parachain-template/node/src/command.rs | 6 +- parachain-template/node/src/service.rs | 10 +- polkadot-parachain/Cargo.toml | 1 + polkadot-parachain/src/cli.rs | 2 +- polkadot-parachain/src/command.rs | 6 +- polkadot-parachain/src/service.rs | 11 +- test/service/Cargo.toml | 1 + test/service/src/cli.rs | 2 +- test/service/src/lib.rs | 20 +- test/service/src/main.rs | 3 +- .../0006-rpc_collator_builds_blocks.feature | 17 + .../0006-rpc_collator_builds_blocks.toml | 46 ++ 33 files changed, 1944 insertions(+), 100 deletions(-) create mode 100644 client/relay-chain-minimal-node/Cargo.toml create mode 100644 client/relay-chain-minimal-node/src/blockchain_rpc_client.rs create mode 100644 client/relay-chain-minimal-node/src/collator_overseer.rs create mode 100644 client/relay-chain-minimal-node/src/lib.rs create mode 100644 client/relay-chain-minimal-node/src/network.rs create mode 100644 zombienet_tests/0006-rpc_collator_builds_blocks.feature create mode 100644 zombienet_tests/0006-rpc_collator_builds_blocks.toml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 00c414693a4..38bccdb91bf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -635,6 +635,35 @@ zombienet-0005-migrate_solo_to_para: tags: - zombienet-polkadot-integration-test +0006-rpc_collator_builds_blocks: + stage: integration-test + image: "${ZOMBIENET_IMAGE}" + <<: *zombienet-refs + needs: + - job: build-push-image-test-parachain + variables: + POLKADOT_IMAGE: "docker.io/paritypr/polkadot-debug:master" + GH_DIR: "https://github.com/paritytech/cumulus/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests" + COL_IMAGE: "docker.io/paritypr/test-parachain:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" + before_script: + - echo "Zombie-net Tests Config" + - echo "${ZOMBIENET_IMAGE}" + - echo "${RELAY_IMAGE}" + - echo "${COL_IMAGE}" + - echo "${GH_DIR}" + - export DEBUG=zombie + - export RELAY_IMAGE=${POLKADOT_IMAGE} + - export COL_IMAGE=${COL_IMAGE} + script: + - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh + --github-remote-dir="${GH_DIR}" + --concurrency=1 + --test="0006-rpc_collator_builds_blocks.feature" + allow_failure: true + retry: 2 + tags: + - zombienet-polkadot-integration-test + #### stage: .post # This job cancels the whole pipeline if any of provided jobs fail. diff --git a/Cargo.lock b/Cargo.lock index 5ed50bdc72c..c5ab759922a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1692,6 +1692,7 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-overseer", "polkadot-primitives", + "portpicker", "rand 0.8.5", "sc-cli", "sc-client-api", @@ -1959,6 +1960,7 @@ dependencies = [ "async-trait", "cumulus-primitives-core", "cumulus-relay-chain-interface", + "cumulus-test-service", "futures", "futures-timer", "polkadot-cli", @@ -1966,6 +1968,7 @@ dependencies = [ "polkadot-primitives", "polkadot-service", "polkadot-test-client", + "prioritized-metered-channel", "sc-cli", "sc-client-api", "sc-sysinfo", @@ -1997,6 +2000,48 @@ dependencies = [ "thiserror", ] +[[package]] +name = "cumulus-relay-chain-minimal-node" +version = "0.1.0" +dependencies = [ + "async-trait", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "cumulus-relay-chain-rpc-interface", + "futures", + "lru 0.8.0", + "polkadot-availability-distribution", + "polkadot-core-primitives", + "polkadot-network-bridge", + "polkadot-node-core-av-store", + "polkadot-node-network-protocol", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-primitives", + "polkadot-service", + "sc-authority-discovery", + "sc-client-api", + "sc-consensus", + "sc-keystore", + "sc-network", + "sc-network-common", + "sc-network-light", + "sc-network-sync", + "sc-service", + "sc-telemetry", + "sc-tracing", + "sc-transaction-pool", + "sc-transaction-pool-api", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-runtime", + "tokio", + "tracing", + "url", +] + [[package]] name = "cumulus-relay-chain-rpc-interface" version = "0.1.0" @@ -2012,6 +2057,9 @@ dependencies = [ "polkadot-service", "sc-client-api", "sc-rpc-api", + "sp-api", + "sp-authority-discovery", + "sp-consensus-babe", "sp-core", "sp-runtime", "sp-state-machine", @@ -2119,6 +2167,7 @@ dependencies = [ "cumulus-primitives-parachain-inherent", "cumulus-relay-chain-inprocess-interface", "cumulus-relay-chain-interface", + "cumulus-relay-chain-minimal-node", "cumulus-relay-chain-rpc-interface", "cumulus-test-relay-validation-worker-provider", "cumulus-test-runtime", @@ -6484,6 +6533,7 @@ dependencies = [ "cumulus-primitives-parachain-inherent", "cumulus-relay-chain-inprocess-interface", "cumulus-relay-chain-interface", + "cumulus-relay-chain-minimal-node", "cumulus-relay-chain-rpc-interface", "frame-benchmarking", "frame-benchmarking-cli", @@ -7747,6 +7797,7 @@ dependencies = [ "cumulus-primitives-parachain-inherent", "cumulus-relay-chain-inprocess-interface", "cumulus-relay-chain-interface", + "cumulus-relay-chain-minimal-node", "cumulus-relay-chain-rpc-interface", "frame-benchmarking", "frame-benchmarking-cli", diff --git a/Cargo.toml b/Cargo.toml index 487fc124da8..cacb7bea7f1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ members = [ "client/relay-chain-interface", "client/relay-chain-inprocess-interface", "client/relay-chain-rpc-interface", + "client/relay-chain-minimal-node", "pallets/aura-ext", "pallets/collator-selection", "pallets/dmp-queue", diff --git a/client/cli/src/lib.rs b/client/cli/src/lib.rs index 9fea382a7ee..6afe0c53b66 100644 --- a/client/cli/src/lib.rs +++ b/client/cli/src/lib.rs @@ -264,7 +264,8 @@ impl sc_cli::CliConfiguration for ExportGenesisWasmCommand { fn validate_relay_chain_url(arg: &str) -> Result { let url = Url::parse(arg).map_err(|e| e.to_string())?; - if url.scheme() == "ws" { + let scheme = url.scheme(); + if scheme == "ws" || scheme == "wss" { Ok(url) } else { Err(format!( @@ -290,9 +291,8 @@ pub struct RunCmd { /// EXPERIMENTAL: Specify an URL to a relay chain full node to communicate with. #[clap( long, - value_parser = validate_relay_chain_url, - conflicts_with_all = &["alice", "bob", "charlie", "dave", "eve", "ferdie", "one", "two"] ) - ] + value_parser = validate_relay_chain_url + )] pub relay_chain_rpc_url: Option, } diff --git a/client/network/src/tests.rs b/client/network/src/tests.rs index c2093c75ada..cef327b8763 100644 --- a/client/network/src/tests.rs +++ b/client/network/src/tests.rs @@ -174,7 +174,7 @@ impl RelayChainInterface for DummyRelayChainInterface { Ok(false) } - fn overseer_handle(&self) -> RelayChainResult> { + fn overseer_handle(&self) -> RelayChainResult { unimplemented!("Not needed for test") } diff --git a/client/pov-recovery/Cargo.toml b/client/pov-recovery/Cargo.toml index 5bc5adc87da..530e3340ec9 100644 --- a/client/pov-recovery/Cargo.toml +++ b/client/pov-recovery/Cargo.toml @@ -31,6 +31,7 @@ cumulus-relay-chain-interface = {path = "../relay-chain-interface"} [dev-dependencies] tokio = { version = "1.21.1", features = ["macros"] } +portpicker = "0.1.1" # Cumulus cumulus-test-service = { path = "../../test/service" } diff --git a/client/pov-recovery/src/lib.rs b/client/pov-recovery/src/lib.rs index aeff69d56c5..3327d4bb86b 100644 --- a/client/pov-recovery/src/lib.rs +++ b/client/pov-recovery/src/lib.rs @@ -181,7 +181,7 @@ where Ok(_) => return, Err(e) => { tracing::debug!( - target: "cumulus-consensus", + target: LOG_TARGET, error = ?e, block_hash = ?hash, "Failed to get block status", @@ -190,6 +190,7 @@ where }, } + tracing::debug!(target: LOG_TARGET, ?hash, "Adding pending candidate"); if self .pending_candidates .insert( @@ -233,6 +234,7 @@ where None => return, }; + tracing::debug!(target: LOG_TARGET, ?block_hash, "Issuing recovery request"); self.active_candidate_recovery .recover_candidate(block_hash, pending_candidate) .await; @@ -301,7 +303,7 @@ where Ok(BlockStatus::Unknown) => { if self.active_candidate_recovery.is_being_recovered(&parent) { tracing::debug!( - target: "cumulus-consensus", + target: LOG_TARGET, ?block_hash, parent_hash = ?parent, "Parent is still being recovered, waiting.", @@ -311,7 +313,7 @@ where return } else { tracing::debug!( - target: "cumulus-consensus", + target: LOG_TARGET, ?block_hash, parent_hash = ?parent, "Parent not found while trying to import recovered block.", @@ -324,7 +326,7 @@ where }, Err(error) => { tracing::debug!( - target: "cumulus-consensus", + target: LOG_TARGET, block_hash = ?parent, ?error, "Error while checking block status", @@ -346,6 +348,8 @@ where /// This will also recursivley drain `waiting_for_parent` and import them as well. async fn import_block(&mut self, block: Block) { let mut blocks = VecDeque::new(); + + tracing::debug!(target: LOG_TARGET, hash = ?block.hash(), "Importing block retrieved using pov_recovery"); blocks.push_back(block); let mut incoming_blocks = Vec::new(); diff --git a/client/pov-recovery/tests/pov_recovery.rs b/client/pov-recovery/tests/pov_recovery.rs index bd93d00dd4c..dd8be634896 100644 --- a/client/pov-recovery/tests/pov_recovery.rs +++ b/client/pov-recovery/tests/pov_recovery.rs @@ -16,6 +16,7 @@ use cumulus_primitives_core::ParaId; use cumulus_test_service::{initial_head_data, Keyring::*}; +use futures::join; use std::sync::Arc; /// Tests the PoV recovery. @@ -34,12 +35,13 @@ async fn pov_recovery() { let tokio_handle = tokio::runtime::Handle::current(); // Start alice + let ws_port = portpicker::pick_unused_port().expect("No free ports"); let alice = cumulus_test_service::run_relay_chain_validator_node( tokio_handle.clone(), Alice, || {}, Vec::new(), - None, + Some(ws_port), ); // Start bob @@ -90,10 +92,25 @@ async fn pov_recovery() { .build() .await; - let eve = cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle, Eve) + let eve = cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle.clone(), Eve) + .use_null_consensus() + .connect_to_parachain_node(&charlie) + .connect_to_relay_chain_nodes(vec![&alice, &bob]) + .wrap_announce_block(|_| { + // Never announce any block + Arc::new(|_, _| {}) + }) + .build() + .await; + + // Run ferdie as parachain RPC collator and one as parachain RPC full node + // + // They will need to recover the pov blocks through availability recovery. + let ferdie = cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle.clone(), Ferdie) .use_null_consensus() .connect_to_parachain_node(&charlie) .connect_to_relay_chain_nodes(vec![&alice, &bob]) + .use_external_relay_chain_node_at_port(ws_port) .wrap_announce_block(|_| { // Never announce any block Arc::new(|_, _| {}) @@ -101,5 +118,23 @@ async fn pov_recovery() { .build() .await; - futures::future::join(dave.wait_for_blocks(7), eve.wait_for_blocks(7)).await; + let one = cumulus_test_service::TestNodeBuilder::new(para_id, tokio_handle, One) + .enable_collator() + .use_null_consensus() + .connect_to_parachain_node(&charlie) + .connect_to_relay_chain_nodes(vec![&alice, &bob]) + .use_external_relay_chain_node_at_port(ws_port) + .wrap_announce_block(|_| { + // Never announce any block + Arc::new(|_, _| {}) + }) + .build() + .await; + + join!( + dave.wait_for_blocks(7), + eve.wait_for_blocks(7), + ferdie.wait_for_blocks(7), + one.wait_for_blocks(7) + ); } diff --git a/client/relay-chain-inprocess-interface/Cargo.toml b/client/relay-chain-inprocess-interface/Cargo.toml index e2c38c87de7..80afe12228d 100644 --- a/client/relay-chain-inprocess-interface/Cargo.toml +++ b/client/relay-chain-inprocess-interface/Cargo.toml @@ -38,3 +38,7 @@ sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master # Polkadot polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } polkadot-test-client = { git = "https://github.com/paritytech/polkadot", branch = "master" } +metered = { package = "prioritized-metered-channel", version = "0.2.0" } + +# Cumulus +cumulus-test-service = { path = "../../test/service" } diff --git a/client/relay-chain-inprocess-interface/src/lib.rs b/client/relay-chain-inprocess-interface/src/lib.rs index d713ab9cf38..70df07ad478 100644 --- a/client/relay-chain-inprocess-interface/src/lib.rs +++ b/client/relay-chain-inprocess-interface/src/lib.rs @@ -50,7 +50,7 @@ pub struct RelayChainInProcessInterface { full_client: Arc, backend: Arc, sync_oracle: Arc, - overseer_handle: Option, + overseer_handle: Handle, } impl RelayChainInProcessInterface { @@ -59,7 +59,7 @@ impl RelayChainInProcessInterface { full_client: Arc, backend: Arc, sync_oracle: Arc, - overseer_handle: Option, + overseer_handle: Handle, ) -> Self { Self { full_client, backend, sync_oracle, overseer_handle } } @@ -171,7 +171,7 @@ where Ok(self.sync_oracle.is_major_syncing()) } - fn overseer_handle(&self) -> RelayChainResult> { + fn overseer_handle(&self) -> RelayChainResult { Ok(self.overseer_handle.clone()) } @@ -288,7 +288,7 @@ struct RelayChainInProcessInterfaceBuilder { polkadot_client: polkadot_client::Client, backend: Arc, sync_oracle: Arc, - overseer_handle: Option, + overseer_handle: Handle, } impl RelayChainInProcessInterfaceBuilder { @@ -378,7 +378,9 @@ pub fn build_inprocess_relay_chain( polkadot_client: full_node.client.clone(), backend: full_node.backend.clone(), sync_oracle, - overseer_handle: full_node.overseer_handle.clone(), + overseer_handle: full_node.overseer_handle.clone().ok_or(RelayChainError::GenericError( + "Overseer not running in full node.".to_string(), + ))?, }; task_manager.add_child(full_node.task_manager); @@ -425,10 +427,12 @@ mod tests { let block = block_builder.build().expect("Finalizes the block").block; let dummy_network: Arc = Arc::new(DummyNetwork {}); + let (tx, _rx) = metered::channel(30); + let mock_handle = Handle::new(tx); ( client.clone(), block, - RelayChainInProcessInterface::new(client, backend.clone(), dummy_network, None), + RelayChainInProcessInterface::new(client, backend.clone(), dummy_network, mock_handle), ) } diff --git a/client/relay-chain-interface/src/lib.rs b/client/relay-chain-interface/src/lib.rs index 91cfb531b73..4505ac70973 100644 --- a/client/relay-chain-interface/src/lib.rs +++ b/client/relay-chain-interface/src/lib.rs @@ -23,7 +23,8 @@ use cumulus_primitives_core::{ }, InboundDownwardMessage, ParaId, PersistedValidationData, }; -use polkadot_overseer::Handle as OverseerHandle; +use polkadot_overseer::{prometheus::PrometheusError, Handle as OverseerHandle}; +use polkadot_service::SubstrateServiceError; use sc_client_api::StorageProof; use futures::Stream; @@ -58,18 +59,34 @@ pub enum RelayChainError { WorkerCommunicationError(String), #[error("Scale codec deserialization error: {0}")] DeserializationError(CodecError), - #[error("Scale codec deserialization error: {0}")] + #[error("Polkadot service error: {0}")] ServiceError(#[from] polkadot_service::Error), + #[error("Substrate service error: {0}")] + SubServiceError(#[from] SubstrateServiceError), + #[error("Prometheus error: {0}")] + PrometheusError(#[from] PrometheusError), #[error("Unspecified error occured: {0}")] GenericError(String), } +impl From for ApiError { + fn from(r: RelayChainError) -> Self { + sp_api::ApiError::Application(Box::new(r)) + } +} + impl From for RelayChainError { fn from(e: CodecError) -> Self { RelayChainError::DeserializationError(e) } } +impl From for sp_blockchain::Error { + fn from(r: RelayChainError) -> Self { + sp_blockchain::Error::Application(Box::new(r)) + } +} + /// Trait that provides all necessary methods for interaction between collator and relay chain. #[async_trait] pub trait RelayChainInterface: Send + Sync { @@ -155,7 +172,7 @@ pub trait RelayChainInterface: Send + Sync { async fn is_major_syncing(&self) -> RelayChainResult; /// Get a handle to the overseer. - fn overseer_handle(&self) -> RelayChainResult>; + fn overseer_handle(&self) -> RelayChainResult; /// Generate a storage read proof. async fn prove_read( @@ -233,7 +250,7 @@ where (**self).is_major_syncing().await } - fn overseer_handle(&self) -> RelayChainResult> { + fn overseer_handle(&self) -> RelayChainResult { (**self).overseer_handle() } diff --git a/client/relay-chain-minimal-node/Cargo.toml b/client/relay-chain-minimal-node/Cargo.toml new file mode 100644 index 00000000000..6c9cb255363 --- /dev/null +++ b/client/relay-chain-minimal-node/Cargo.toml @@ -0,0 +1,49 @@ +[package] +authors = ["Parity Technologies "] +name = "cumulus-relay-chain-minimal-node" +version = "0.1.0" +edition = "2021" + +[dependencies] +# polkadot deps +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-node-subsystem-util = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-node-network-protocol = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-network-bridge = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-node-core-av-store = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-availability-distribution = { git = "https://github.com/paritytech/polkadot", branch = "master" } + +# substrate deps +sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-network-sync = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-network-light = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } + +# cumulus deps +cumulus-relay-chain-interface = { path = "../relay-chain-interface" } +cumulus-relay-chain-rpc-interface = { path = "../relay-chain-rpc-interface" } +cumulus-primitives-core = { path = "../../primitives/core" } + +lru = "0.8" +tracing = "0.1.25" +async-trait = "0.1.52" +futures = "0.3.24" +url = "2.2.2" +tokio = { version = "1.17.0", features = ["macros"] } diff --git a/client/relay-chain-minimal-node/src/blockchain_rpc_client.rs b/client/relay-chain-minimal-node/src/blockchain_rpc_client.rs new file mode 100644 index 00000000000..bf1a3c9a38c --- /dev/null +++ b/client/relay-chain-minimal-node/src/blockchain_rpc_client.rs @@ -0,0 +1,463 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus 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 Cumulus. If not, see . + +use std::{pin::Pin, str::FromStr}; + +use cumulus_relay_chain_interface::{RelayChainError, RelayChainResult}; +use cumulus_relay_chain_rpc_interface::RelayChainRpcClient; +use futures::{Future, Stream, StreamExt}; +use polkadot_core_primitives::{Block, BlockId, Hash, Header}; +use polkadot_overseer::RuntimeApiSubsystemClient; +use polkadot_service::{AuxStore, HeaderBackend}; +use sc_authority_discovery::AuthorityDiscovery; + +use sc_network_common::config::MultiaddrWithPeerId; +use sp_api::{ApiError, RuntimeApiInfo}; +use sp_blockchain::Info; + +const LOG_TARGET: &str = "blockchain-rpc-client"; + +#[derive(Clone)] +pub struct BlockChainRpcClient { + rpc_client: RelayChainRpcClient, +} + +impl BlockChainRpcClient { + pub fn new(rpc_client: RelayChainRpcClient) -> Self { + Self { rpc_client } + } + + pub async fn chain_get_header( + &self, + hash: Option, + ) -> Result, RelayChainError> { + self.rpc_client.chain_get_header(hash).await + } + + pub async fn block_get_hash( + &self, + number: Option, + ) -> Result, RelayChainError> { + self.rpc_client.chain_get_block_hash(number).await + } +} + +// Implementation required by Availability-Distribution subsystem +// but never called in our case. +impl AuxStore for BlockChainRpcClient { + fn insert_aux< + 'a, + 'b: 'a, + 'c: 'a, + I: IntoIterator, + D: IntoIterator, + >( + &self, + _insert: I, + _delete: D, + ) -> sp_blockchain::Result<()> { + unimplemented!("Not supported on the RPC collator") + } + + fn get_aux(&self, _key: &[u8]) -> sp_blockchain::Result>> { + unimplemented!("Not supported on the RPC collator") + } +} + +#[async_trait::async_trait] +impl RuntimeApiSubsystemClient for BlockChainRpcClient { + async fn validators( + &self, + at: Hash, + ) -> Result, sp_api::ApiError> { + Ok(self.rpc_client.parachain_host_validators(at).await?) + } + + async fn validator_groups( + &self, + at: Hash, + ) -> Result< + ( + Vec>, + polkadot_primitives::v2::GroupRotationInfo, + ), + sp_api::ApiError, + > { + Ok(self.rpc_client.parachain_host_validator_groups(at).await?) + } + + async fn availability_cores( + &self, + at: Hash, + ) -> Result< + Vec>, + sp_api::ApiError, + > { + Ok(self.rpc_client.parachain_host_availability_cores(at).await?) + } + + async fn persisted_validation_data( + &self, + at: Hash, + para_id: cumulus_primitives_core::ParaId, + assumption: polkadot_primitives::v2::OccupiedCoreAssumption, + ) -> Result< + Option< + cumulus_primitives_core::PersistedValidationData< + Hash, + polkadot_core_primitives::BlockNumber, + >, + >, + sp_api::ApiError, + > { + Ok(self + .rpc_client + .parachain_host_persisted_validation_data(at, para_id, assumption) + .await?) + } + + async fn assumed_validation_data( + &self, + at: Hash, + para_id: cumulus_primitives_core::ParaId, + expected_persisted_validation_data_hash: Hash, + ) -> Result< + Option<( + cumulus_primitives_core::PersistedValidationData< + Hash, + polkadot_core_primitives::BlockNumber, + >, + polkadot_primitives::v2::ValidationCodeHash, + )>, + sp_api::ApiError, + > { + Ok(self + .rpc_client + .parachain_host_assumed_validation_data( + at, + para_id, + expected_persisted_validation_data_hash, + ) + .await?) + } + + async fn check_validation_outputs( + &self, + at: Hash, + para_id: cumulus_primitives_core::ParaId, + outputs: polkadot_primitives::v2::CandidateCommitments, + ) -> Result { + Ok(self + .rpc_client + .parachain_host_check_validation_outputs(at, para_id, outputs) + .await?) + } + + async fn session_index_for_child( + &self, + at: Hash, + ) -> Result { + Ok(self.rpc_client.parachain_host_session_index_for_child(at).await?) + } + + async fn validation_code( + &self, + at: Hash, + para_id: cumulus_primitives_core::ParaId, + assumption: polkadot_primitives::v2::OccupiedCoreAssumption, + ) -> Result, sp_api::ApiError> { + Ok(self.rpc_client.parachain_host_validation_code(at, para_id, assumption).await?) + } + + async fn candidate_pending_availability( + &self, + at: Hash, + para_id: cumulus_primitives_core::ParaId, + ) -> Result>, sp_api::ApiError> + { + Ok(self + .rpc_client + .parachain_host_candidate_pending_availability(at, para_id) + .await?) + } + + async fn candidate_events( + &self, + at: Hash, + ) -> Result>, sp_api::ApiError> { + Ok(self.rpc_client.parachain_host_candidate_events(at).await?) + } + + async fn dmq_contents( + &self, + at: Hash, + recipient: cumulus_primitives_core::ParaId, + ) -> Result< + Vec>, + sp_api::ApiError, + > { + Ok(self.rpc_client.parachain_host_dmq_contents(recipient, at).await?) + } + + async fn inbound_hrmp_channels_contents( + &self, + at: Hash, + recipient: cumulus_primitives_core::ParaId, + ) -> Result< + std::collections::BTreeMap< + cumulus_primitives_core::ParaId, + Vec< + polkadot_core_primitives::InboundHrmpMessage, + >, + >, + sp_api::ApiError, + > { + Ok(self + .rpc_client + .parachain_host_inbound_hrmp_channels_contents(recipient, at) + .await?) + } + + async fn validation_code_by_hash( + &self, + at: Hash, + validation_code_hash: polkadot_primitives::v2::ValidationCodeHash, + ) -> Result, sp_api::ApiError> { + Ok(self + .rpc_client + .parachain_host_validation_code_by_hash(at, validation_code_hash) + .await?) + } + + async fn on_chain_votes( + &self, + at: Hash, + ) -> Result>, sp_api::ApiError> { + Ok(self.rpc_client.parachain_host_on_chain_votes(at).await?) + } + + async fn session_info( + &self, + at: Hash, + index: polkadot_primitives::v2::SessionIndex, + ) -> Result, sp_api::ApiError> { + Ok(self.rpc_client.parachain_host_session_info(at, index).await?) + } + + async fn session_info_before_version_2( + &self, + at: Hash, + index: polkadot_primitives::v2::SessionIndex, + ) -> Result, sp_api::ApiError> { + Ok(self.rpc_client.parachain_host_session_info_before_version_2(at, index).await?) + } + + async fn submit_pvf_check_statement( + &self, + at: Hash, + stmt: polkadot_primitives::v2::PvfCheckStatement, + signature: polkadot_primitives::v2::ValidatorSignature, + ) -> Result<(), sp_api::ApiError> { + Ok(self + .rpc_client + .parachain_host_submit_pvf_check_statement(at, stmt, signature) + .await?) + } + + async fn pvfs_require_precheck( + &self, + at: Hash, + ) -> Result, sp_api::ApiError> { + Ok(self.rpc_client.parachain_host_pvfs_require_precheck(at).await?) + } + + async fn validation_code_hash( + &self, + at: Hash, + para_id: cumulus_primitives_core::ParaId, + assumption: polkadot_primitives::v2::OccupiedCoreAssumption, + ) -> Result, sp_api::ApiError> { + Ok(self + .rpc_client + .parachain_host_validation_code_hash(at, para_id, assumption) + .await?) + } + + async fn current_epoch(&self, at: Hash) -> Result { + Ok(self.rpc_client.babe_api_current_epoch(at).await?) + } + + async fn authorities( + &self, + at: Hash, + ) -> std::result::Result, sp_api::ApiError> { + Ok(self.rpc_client.authority_discovery_authorities(at).await?) + } + + async fn api_version_parachain_host(&self, at: Hash) -> Result, sp_api::ApiError> { + let api_id = >::ID; + Ok(self.rpc_client.runtime_version(at).await.map(|v| v.api_version(&api_id))?) + } + + async fn disputes( + &self, + at: Hash, + ) -> Result< + Vec<( + polkadot_primitives::v2::SessionIndex, + polkadot_primitives::v2::CandidateHash, + polkadot_primitives::v2::DisputeState, + )>, + ApiError, + > { + Ok(self.rpc_client.parachain_host_staging_get_disputes(at).await?) + } +} + +#[async_trait::async_trait] +impl AuthorityDiscovery for BlockChainRpcClient { + async fn authorities( + &self, + at: Hash, + ) -> std::result::Result, sp_api::ApiError> { + let result = self.rpc_client.authority_discovery_authorities(at).await?; + Ok(result) + } +} + +impl BlockChainRpcClient { + pub async fn local_listen_addresses( + &self, + ) -> Result, RelayChainError> { + let addresses = self.rpc_client.system_local_listen_addresses().await?; + tracing::debug!(target: LOG_TARGET, ?addresses, "Fetched listen address from RPC node."); + + let mut result_vec = Vec::new(); + for address in addresses { + match MultiaddrWithPeerId::from_str(&address) { + Ok(addr) => result_vec.push(addr), + Err(err) => + return Err(RelayChainError::GenericError(format!( + "Failed to parse a local listen addresses from the RPC node: {}", + err + ))), + } + } + + Ok(result_vec) + } + + pub async fn import_notification_stream( + &self, + ) -> RelayChainResult + Send>>> { + Ok(self.rpc_client.get_imported_heads_stream().await?.boxed()) + } + + pub async fn finality_notification_stream( + &self, + ) -> RelayChainResult + Send>>> { + Ok(self.rpc_client.get_finalized_heads_stream().await?.boxed()) + } +} + +fn block_local(fut: impl Future) -> T { + let tokio_handle = tokio::runtime::Handle::current(); + tokio::task::block_in_place(|| tokio_handle.block_on(fut)) +} + +impl HeaderBackend for BlockChainRpcClient { + fn header( + &self, + id: BlockId, + ) -> sp_blockchain::Result::Header>> { + let fetch_header = |hash| block_local(self.rpc_client.chain_get_header(Some(hash))); + + match id { + BlockId::Hash(hash) => Ok(fetch_header(hash)?), + BlockId::Number(number) => { + if let Some(hash) = HeaderBackend::::hash(self, number)? { + Ok(fetch_header(hash)?) + } else { + Ok(None) + } + }, + } + } + + fn info(&self) -> Info { + let best_header = block_local(self.rpc_client.chain_get_header(None)) + .expect("Unable to get header from relay chain.") + .unwrap(); + let genesis_hash = block_local(self.rpc_client.chain_get_head(Some(0))) + .expect("Unable to get header from relay chain."); + let finalized_head = block_local(self.rpc_client.chain_get_finalized_head()) + .expect("Unable to get finalized head from relay chain."); + let finalized_header = block_local(self.rpc_client.chain_get_header(Some(finalized_head))) + .expect("Unable to get finalized header from relay chain.") + .unwrap(); + Info { + best_hash: best_header.hash(), + best_number: best_header.number, + genesis_hash, + finalized_hash: finalized_head, + finalized_number: finalized_header.number, + finalized_state: None, + number_leaves: 1, + block_gap: None, + } + } + + fn status( + &self, + id: sp_api::BlockId, + ) -> sp_blockchain::Result { + let exists = match id { + BlockId::Hash(_) => self.header(id)?.is_some(), + BlockId::Number(n) => { + let best_header = block_local(self.rpc_client.chain_get_header(None))?; + if let Some(best) = best_header { + n < best.number + } else { + false + } + }, + }; + + if exists { + Ok(sc_client_api::blockchain::BlockStatus::InChain) + } else { + Ok(sc_client_api::blockchain::BlockStatus::Unknown) + } + } + + fn number( + &self, + hash: ::Hash, + ) -> sp_blockchain::Result< + Option<<::Header as polkadot_service::HeaderT>::Number>, + > { + let result = block_local(self.rpc_client.chain_get_header(Some(hash)))? + .map(|maybe_header| maybe_header.number); + Ok(result) + } + + fn hash( + &self, + number: polkadot_service::NumberFor, + ) -> sp_blockchain::Result::Hash>> { + Ok(block_local(self.rpc_client.chain_get_block_hash(number.into()))?) + } +} diff --git a/client/relay-chain-minimal-node/src/collator_overseer.rs b/client/relay-chain-minimal-node/src/collator_overseer.rs new file mode 100644 index 00000000000..6efb1a9ce2e --- /dev/null +++ b/client/relay-chain-minimal-node/src/collator_overseer.rs @@ -0,0 +1,274 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use cumulus_relay_chain_interface::RelayChainError; +use lru::LruCache; +use polkadot_availability_distribution::{ + AvailabilityDistributionSubsystem, IncomingRequestReceivers, +}; +use polkadot_node_core_av_store::Config; +use polkadot_node_network_protocol::{ + peer_set::PeerSetProtocolNames, + request_response::{ + v1::{ + AvailableDataFetchingRequest, ChunkFetchingRequest, CollationFetchingRequest, + PoVFetchingRequest, + }, + IncomingRequestReceiver, ReqProtocolNames, + }, +}; +use polkadot_node_subsystem_util::metrics::{prometheus::Registry, Metrics}; +use polkadot_overseer::{ + BlockInfo, DummySubsystem, MetricsTrait, Overseer, OverseerHandle, OverseerMetrics, SpawnGlue, + KNOWN_LEAVES_CACHE_SIZE, +}; +use polkadot_primitives::v2::CollatorPair; +use polkadot_service::{ + overseer::{ + AvailabilityRecoverySubsystem, AvailabilityStoreSubsystem, ChainApiSubsystem, + CollationGenerationSubsystem, CollatorProtocolSubsystem, NetworkBridgeMetrics, + NetworkBridgeRxSubsystem, NetworkBridgeTxSubsystem, ProtocolSide, RuntimeApiSubsystem, + }, + Error, OverseerConnector, +}; +use sc_authority_discovery::Service as AuthorityDiscoveryService; +use sc_keystore::LocalKeystore; +use sc_network::NetworkStateInfo; + +use std::sync::Arc; + +use cumulus_primitives_core::relay_chain::{Block, Hash as PHash}; + +use polkadot_service::{Handle, TaskManager}; + +use crate::BlockChainRpcClient; +use futures::{select, StreamExt}; +use sp_runtime::traits::Block as BlockT; + +/// Arguments passed for overseer construction. +pub(crate) struct CollatorOverseerGenArgs<'a> { + /// Runtime client generic, providing the `ProvieRuntimeApi` trait besides others. + pub runtime_client: Arc, + /// Underlying network service implementation. + pub network_service: Arc>, + /// Underlying authority discovery service. + pub authority_discovery_service: AuthorityDiscoveryService, + // Receiver for collation request protocol + pub collation_req_receiver: IncomingRequestReceiver, + // Receiver for PoV request protocol + pub pov_req_receiver: IncomingRequestReceiver, + // Receiver for chunk request protocol + pub chunk_req_receiver: IncomingRequestReceiver, + // Receiver for availability request protocol + pub available_data_req_receiver: IncomingRequestReceiver, + /// Prometheus registry, commonly used for production systems, less so for test. + pub registry: Option<&'a Registry>, + /// Task spawner to be used throughout the overseer and the APIs it provides. + pub spawner: sc_service::SpawnTaskHandle, + /// Determines the behavior of the collator. + pub collator_pair: CollatorPair, + /// Request response protocols + pub req_protocol_names: ReqProtocolNames, + /// Peerset protocols name mapping + pub peer_set_protocol_names: PeerSetProtocolNames, + /// Config for the availability store + pub availability_config: Config, + /// The underlying key value store for the parachains. + pub parachains_db: Arc, +} + +fn build_overseer<'a>( + connector: OverseerConnector, + CollatorOverseerGenArgs { + runtime_client, + network_service, + authority_discovery_service, + collation_req_receiver, + available_data_req_receiver, + availability_config, + registry, + spawner, + collator_pair, + req_protocol_names, + peer_set_protocol_names, + parachains_db, + pov_req_receiver, + chunk_req_receiver, + }: CollatorOverseerGenArgs<'a>, +) -> Result< + (Overseer, Arc>, OverseerHandle), + Error, +> { + let leaves = Vec::new(); + let metrics = ::register(registry)?; + let keystore = Arc::new(LocalKeystore::in_memory()); + let spawner = SpawnGlue(spawner); + let network_bridge_metrics: NetworkBridgeMetrics = Metrics::register(registry)?; + let builder = Overseer::builder() + .availability_distribution(AvailabilityDistributionSubsystem::new( + keystore.clone(), + IncomingRequestReceivers { pov_req_receiver, chunk_req_receiver }, + Metrics::register(registry)?, + )) + .availability_recovery(AvailabilityRecoverySubsystem::with_chunks_only( + available_data_req_receiver, + Metrics::register(registry)?, + )) + .availability_store(AvailabilityStoreSubsystem::new( + parachains_db.clone(), + availability_config, + Metrics::register(registry)?, + )) + .bitfield_distribution(DummySubsystem) + .bitfield_signing(DummySubsystem) + .candidate_backing(DummySubsystem) + .candidate_validation(DummySubsystem) + .pvf_checker(DummySubsystem) + .chain_api(ChainApiSubsystem::new(runtime_client.clone(), Metrics::register(registry)?)) + .collation_generation(CollationGenerationSubsystem::new(Metrics::register(registry)?)) + .collator_protocol({ + let side = ProtocolSide::Collator( + network_service.local_peer_id().clone(), + collator_pair, + collation_req_receiver, + Metrics::register(registry)?, + ); + CollatorProtocolSubsystem::new(side) + }) + .network_bridge_rx(NetworkBridgeRxSubsystem::new( + network_service.clone(), + authority_discovery_service.clone(), + Box::new(network_service.clone()), + network_bridge_metrics.clone(), + peer_set_protocol_names.clone(), + )) + .network_bridge_tx(NetworkBridgeTxSubsystem::new( + network_service.clone(), + authority_discovery_service.clone(), + network_bridge_metrics, + req_protocol_names, + peer_set_protocol_names, + )) + .provisioner(DummySubsystem) + .runtime_api(RuntimeApiSubsystem::new( + runtime_client.clone(), + Metrics::register(registry)?, + spawner.clone(), + )) + .statement_distribution(DummySubsystem) + .approval_distribution(DummySubsystem) + .approval_voting(DummySubsystem) + .gossip_support(DummySubsystem) + .dispute_coordinator(DummySubsystem) + .dispute_distribution(DummySubsystem) + .chain_selection(DummySubsystem) + .leaves(Vec::from_iter( + leaves + .into_iter() + .map(|BlockInfo { hash, parent_hash: _, number }| (hash, number)), + )) + .activation_external_listeners(Default::default()) + .span_per_active_leaf(Default::default()) + .active_leaves(Default::default()) + .supports_parachains(runtime_client) + .known_leaves(LruCache::new(KNOWN_LEAVES_CACHE_SIZE)) + .metrics(metrics) + .spawner(spawner); + + builder.build_with_connector(connector).map_err(|e| e.into()) +} + +pub(crate) fn spawn_overseer( + overseer_args: CollatorOverseerGenArgs, + task_manager: &TaskManager, + relay_chain_rpc_client: Arc, +) -> Result { + let (overseer, overseer_handle) = build_overseer(OverseerConnector::default(), overseer_args) + .map_err(|e| { + tracing::error!("Failed to initialize overseer: {}", e); + e + })?; + + let overseer_handle = Handle::new(overseer_handle.clone()); + { + let handle = overseer_handle.clone(); + task_manager.spawn_essential_handle().spawn_blocking( + "overseer", + None, + Box::pin(async move { + use futures::{pin_mut, FutureExt}; + + let forward = forward_collator_events(relay_chain_rpc_client, handle).fuse(); + + let overseer_fut = overseer.run().fuse(); + + pin_mut!(overseer_fut); + pin_mut!(forward); + + select! { + _ = forward => (), + _ = overseer_fut => (), + } + }), + ); + } + Ok(overseer_handle) +} + +/// Minimal relay chain node representation +pub struct NewMinimalNode { + /// Task manager running all tasks for the minimal node + pub task_manager: TaskManager, + /// Overseer handle to interact with subsystems + pub overseer_handle: Handle, + /// Network service + pub network: Arc::Hash>>, +} + +/// Glues together the [`Overseer`] and `BlockchainEvents` by forwarding +/// import and finality notifications into the [`OverseerHandle`]. +async fn forward_collator_events( + client: Arc, + mut handle: Handle, +) -> Result<(), RelayChainError> { + let mut finality = client.finality_notification_stream().await?.fuse(); + let mut imports = client.import_notification_stream().await?.fuse(); + + loop { + select! { + f = finality.next() => { + match f { + Some(header) => { + tracing::info!(target: "minimal-polkadot-node", "Received finalized block via RPC: #{} ({})", header.number, header.hash()); + let block_info = BlockInfo { hash: header.hash(), parent_hash: header.parent_hash, number: header.number }; + handle.block_finalized(block_info).await; + } + None => return Err(RelayChainError::GenericError("Relay chain finality stream ended.".to_string())), + } + }, + i = imports.next() => { + match i { + Some(header) => { + tracing::info!(target: "minimal-polkadot-node", "Received imported block via RPC: #{} ({})", header.number, header.hash()); + let block_info = BlockInfo { hash: header.hash(), parent_hash: header.parent_hash, number: header.number }; + handle.block_imported(block_info).await; + } + None => return Err(RelayChainError::GenericError("Relay chain import stream ended.".to_string())), + } + } + } + } +} diff --git a/client/relay-chain-minimal-node/src/lib.rs b/client/relay-chain-minimal-node/src/lib.rs new file mode 100644 index 00000000000..60b8a809a9c --- /dev/null +++ b/client/relay-chain-minimal-node/src/lib.rs @@ -0,0 +1,223 @@ +// Copyright 2017-2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +use collator_overseer::{CollatorOverseerGenArgs, NewMinimalNode}; + +use cumulus_relay_chain_interface::{RelayChainError, RelayChainInterface, RelayChainResult}; +use cumulus_relay_chain_rpc_interface::{RelayChainRpcInterface, Url}; +use polkadot_network_bridge::{peer_sets_info, IsAuthority}; +use polkadot_node_network_protocol::{ + peer_set::PeerSetProtocolNames, + request_response::{self, IncomingRequest, ReqProtocolNames}, +}; +use polkadot_node_subsystem_util::metrics::prometheus::Registry; +use polkadot_primitives::v2::CollatorPair; + +use sc_authority_discovery::Service as AuthorityDiscoveryService; +use sc_network::{Event, NetworkService}; +use sc_network_common::service::NetworkEventStream; +use std::sync::Arc; + +use polkadot_service::{open_database, Configuration, TaskManager}; + +use futures::StreamExt; + +use sp_runtime::{app_crypto::Pair, traits::Block as BlockT}; + +mod collator_overseer; + +mod network; + +mod blockchain_rpc_client; +pub use blockchain_rpc_client::BlockChainRpcClient; + +fn build_authority_discovery_service( + task_manager: &TaskManager, + client: Arc, + config: &Configuration, + network: Arc::Hash>>, + prometheus_registry: Option, +) -> AuthorityDiscoveryService { + let auth_disc_publish_non_global_ips = config.network.allow_non_globals_in_dht; + let authority_discovery_role = sc_authority_discovery::Role::Discover; + let dht_event_stream = network.event_stream("authority-discovery").filter_map(|e| async move { + match e { + Event::Dht(e) => Some(e), + _ => None, + } + }); + let (worker, service) = sc_authority_discovery::new_worker_and_service_with_config( + sc_authority_discovery::WorkerConfig { + publish_non_global_ips: auth_disc_publish_non_global_ips, + // Require that authority discovery records are signed. + strict_record_validation: true, + ..Default::default() + }, + client, + network.clone(), + Box::pin(dht_event_stream), + authority_discovery_role, + prometheus_registry.clone(), + ); + + task_manager.spawn_handle().spawn( + "authority-discovery-worker", + Some("authority-discovery"), + worker.run(), + ); + service +} + +pub async fn build_minimal_relay_chain_node( + polkadot_config: Configuration, + task_manager: &mut TaskManager, + relay_chain_url: Url, +) -> RelayChainResult<(Arc<(dyn RelayChainInterface + 'static)>, Option)> { + let client = cumulus_relay_chain_rpc_interface::create_client_and_start_worker( + relay_chain_url, + task_manager, + ) + .await?; + let collator_pair = CollatorPair::generate().0; + let collator_node = new_minimal_relay_chain( + polkadot_config, + collator_pair.clone(), + Arc::new(BlockChainRpcClient::new(client.clone())), + ) + .await?; + task_manager.add_child(collator_node.task_manager); + Ok(( + Arc::new(RelayChainRpcInterface::new(client, collator_node.overseer_handle)), + Some(collator_pair), + )) +} + +/// Builds a minimal relay chain node. Chain data is fetched +/// via [`BlockChainRpcClient`] and fed into the overseer and its subsystems. +/// +/// Instead of spawning all subsystems, this minimal node will only spawn subsystems +/// required to collate: +/// - AvailabilityRecovery +/// - CollationGeneration +/// - CollatorProtocol +/// - NetworkBridgeRx +/// - NetworkBridgeTx +/// - RuntimeApi +/// - ChainApi +/// - AvailabilityDistribution +#[sc_tracing::logging::prefix_logs_with("Relaychain")] +async fn new_minimal_relay_chain( + mut config: Configuration, + collator_pair: CollatorPair, + relay_chain_rpc_client: Arc, +) -> Result { + let role = config.role.clone(); + + // Use the given RPC node as bootnode, since we do not have a chain spec with valid boot nodes + let mut boot_node_address = relay_chain_rpc_client.local_listen_addresses().await?; + config.network.boot_nodes.append(&mut boot_node_address); + + let task_manager = { + let registry = config.prometheus_config.as_ref().map(|cfg| &cfg.registry); + TaskManager::new(config.tokio_handle.clone(), registry)? + }; + + let prometheus_registry = config.prometheus_registry().cloned(); + + let genesis_hash = relay_chain_rpc_client + .block_get_hash(Some(0)) + .await + .expect("Genesis block hash is always available; qed") + .unwrap_or_default(); + + let peer_set_protocol_names = + PeerSetProtocolNames::new(genesis_hash, config.chain_spec.fork_id()); + let is_authority = if role.is_authority() { IsAuthority::Yes } else { IsAuthority::No }; + config + .network + .extra_sets + .extend(peer_sets_info(is_authority, &peer_set_protocol_names)); + + let request_protocol_names = ReqProtocolNames::new(genesis_hash, config.chain_spec.fork_id()); + let (collation_req_receiver, available_data_req_receiver, pov_req_receiver, chunk_req_receiver) = + build_request_response_protocol_receivers(&request_protocol_names, &mut config); + let (network, network_starter) = + network::build_collator_network(network::BuildCollatorNetworkParams { + config: &config, + client: relay_chain_rpc_client.clone(), + spawn_handle: task_manager.spawn_handle(), + genesis_hash, + })?; + + let authority_discovery_service = build_authority_discovery_service( + &task_manager, + relay_chain_rpc_client.clone(), + &config, + network.clone(), + prometheus_registry.clone(), + ); + + let parachains_db = open_database(&config.database)?; + + let overseer_args = CollatorOverseerGenArgs { + runtime_client: relay_chain_rpc_client.clone(), + network_service: network.clone(), + authority_discovery_service, + collation_req_receiver, + available_data_req_receiver, + registry: prometheus_registry.as_ref(), + spawner: task_manager.spawn_handle(), + collator_pair, + req_protocol_names: request_protocol_names, + peer_set_protocol_names, + parachains_db, + availability_config: polkadot_service::AVAILABILITY_CONFIG, + pov_req_receiver, + chunk_req_receiver, + }; + + let overseer_handle = collator_overseer::spawn_overseer( + overseer_args, + &task_manager, + relay_chain_rpc_client.clone(), + )?; + + network_starter.start_network(); + + Ok(NewMinimalNode { task_manager, overseer_handle, network }) +} + +fn build_request_response_protocol_receivers( + request_protocol_names: &ReqProtocolNames, + config: &mut Configuration, +) -> ( + request_response::IncomingRequestReceiver, + request_response::IncomingRequestReceiver, + request_response::IncomingRequestReceiver, + request_response::IncomingRequestReceiver, +) { + let (collation_req_receiver, cfg) = + IncomingRequest::get_config_receiver(request_protocol_names); + config.network.request_response_protocols.push(cfg); + let (available_data_req_receiver, cfg) = + IncomingRequest::get_config_receiver(request_protocol_names); + config.network.request_response_protocols.push(cfg); + let (pov_req_receiver, cfg) = IncomingRequest::get_config_receiver(request_protocol_names); + config.network.request_response_protocols.push(cfg); + let (chunk_req_receiver, cfg) = IncomingRequest::get_config_receiver(request_protocol_names); + config.network.request_response_protocols.push(cfg); + (collation_req_receiver, available_data_req_receiver, pov_req_receiver, chunk_req_receiver) +} diff --git a/client/relay-chain-minimal-node/src/network.rs b/client/relay-chain-minimal-node/src/network.rs new file mode 100644 index 00000000000..a5237f5ea65 --- /dev/null +++ b/client/relay-chain-minimal-node/src/network.rs @@ -0,0 +1,384 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Cumulus. + +// Cumulus is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Cumulus 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 Cumulus. If not, see . + +use polkadot_core_primitives::{Block, Hash}; +use polkadot_service::{BlockT, NumberFor}; + +use polkadot_node_network_protocol::PeerId; +use sc_network::{NetworkService, SyncState}; + +use sc_network_common::sync::{Metrics, SyncStatus}; +use sc_network_light::light_client_requests; +use sc_network_sync::{block_request_handler, state_request_handler}; +use sc_service::{error::Error, Configuration, NetworkStarter, SpawnTaskHandle}; +use sp_consensus::BlockOrigin; +use sp_runtime::Justifications; + +use std::sync::Arc; + +use crate::BlockChainRpcClient; + +pub(crate) struct BuildCollatorNetworkParams<'a> { + /// The service configuration. + pub config: &'a Configuration, + /// A shared client returned by `new_full_parts`. + pub client: Arc, + /// A handle for spawning tasks. + pub spawn_handle: SpawnTaskHandle, + /// Genesis hash + pub genesis_hash: Hash, +} + +/// Build the network service, the network status sinks and an RPC sender. +pub(crate) fn build_collator_network( + params: BuildCollatorNetworkParams, +) -> Result<(Arc>, NetworkStarter), Error> { + let BuildCollatorNetworkParams { config, client, spawn_handle, genesis_hash } = params; + + let protocol_id = config.protocol_id(); + + let block_request_protocol_config = + block_request_handler::generate_protocol_config(&protocol_id, genesis_hash, None); + + let state_request_protocol_config = + state_request_handler::generate_protocol_config(&protocol_id, genesis_hash, None); + + let light_client_request_protocol_config = + light_client_requests::generate_protocol_config(&protocol_id, genesis_hash, None); + + let network_params = sc_network::config::Params { + role: config.role.clone(), + executor: { + let spawn_handle = Clone::clone(&spawn_handle); + Some(Box::new(move |fut| { + spawn_handle.spawn("libp2p-node", Some("networking"), fut); + })) + }, + fork_id: None, + chain_sync: Box::new(DummyChainSync), + network_config: config.network.clone(), + chain: client.clone(), + import_queue: Box::new(DummyImportQueue), + protocol_id, + metrics_registry: config.prometheus_config.as_ref().map(|config| config.registry.clone()), + block_request_protocol_config, + state_request_protocol_config, + warp_sync_protocol_config: None, + light_client_request_protocol_config, + request_response_protocol_configs: Vec::new(), + }; + + let network_worker = sc_network::NetworkWorker::new(network_params)?; + let network_service = network_worker.service().clone(); + + let (network_start_tx, network_start_rx) = futures::channel::oneshot::channel(); + + // The network worker is responsible for gathering all network messages and processing + // them. This is quite a heavy task, and at the time of the writing of this comment it + // frequently happens that this future takes several seconds or in some situations + // even more than a minute until it has processed its entire queue. This is clearly an + // issue, and ideally we would like to fix the network future to take as little time as + // possible, but we also take the extra harm-prevention measure to execute the networking + // future using `spawn_blocking`. + spawn_handle.spawn_blocking("network-worker", Some("networking"), async move { + if network_start_rx.await.is_err() { + tracing::warn!( + "The NetworkStart returned as part of `build_network` has been silently dropped" + ); + // This `return` might seem unnecessary, but we don't want to make it look like + // everything is working as normal even though the user is clearly misusing the API. + return + } + + network_worker.await + }); + + let network_starter = NetworkStarter::new(network_start_tx); + + Ok((network_service, network_starter)) +} + +/// Empty ChainSync shell. Syncing code is not necessary for +/// the minimal node, but network currently requires it. So +/// we provide a noop implementation. +struct DummyChainSync; + +impl sc_network_common::sync::ChainSync for DummyChainSync { + fn peer_info(&self, _who: &PeerId) -> Option> { + None + } + + fn status(&self) -> sc_network_common::sync::SyncStatus { + SyncStatus { + state: SyncState::Idle, + best_seen_block: None, + num_peers: 0, + queued_blocks: 0, + state_sync: None, + warp_sync: None, + } + } + + fn num_sync_requests(&self) -> usize { + 0 + } + + fn num_downloaded_blocks(&self) -> usize { + 0 + } + + fn num_peers(&self) -> usize { + 0 + } + + fn new_peer( + &mut self, + _who: PeerId, + _best_hash: ::Hash, + _best_number: polkadot_service::NumberFor, + ) -> Result< + Option>, + sc_network_common::sync::BadPeer, + > { + Ok(None) + } + + fn update_chain_info( + &mut self, + _best_hash: &::Hash, + _best_number: polkadot_service::NumberFor, + ) { + } + + fn request_justification( + &mut self, + _hash: &::Hash, + _number: polkadot_service::NumberFor, + ) { + } + + fn clear_justification_requests(&mut self) {} + + fn set_sync_fork_request( + &mut self, + _peers: Vec, + _hash: &::Hash, + _number: polkadot_service::NumberFor, + ) { + } + + fn justification_requests( + &mut self, + ) -> Box)> + '_> + { + Box::new(std::iter::empty()) + } + + fn block_requests( + &mut self, + ) -> Box)> + '_> + { + Box::new(std::iter::empty()) + } + + fn state_request(&mut self) -> Option<(PeerId, sc_network_common::sync::OpaqueStateRequest)> { + None + } + + fn warp_sync_request( + &mut self, + ) -> Option<(PeerId, sc_network_common::sync::warp::WarpProofRequest)> { + None + } + + fn on_block_data( + &mut self, + _who: &PeerId, + _request: Option>, + _response: sc_network_common::sync::message::BlockResponse, + ) -> Result, sc_network_common::sync::BadPeer> { + unimplemented!("Not supported on the RPC collator") + } + + fn on_state_data( + &mut self, + _who: &PeerId, + _response: sc_network_common::sync::OpaqueStateResponse, + ) -> Result, sc_network_common::sync::BadPeer> { + unimplemented!("Not supported on the RPC collator") + } + + fn on_warp_sync_data( + &mut self, + _who: &PeerId, + _response: sc_network_common::sync::warp::EncodedProof, + ) -> Result<(), sc_network_common::sync::BadPeer> { + unimplemented!("Not supported on the RPC collator") + } + + fn on_block_justification( + &mut self, + _who: PeerId, + _response: sc_network_common::sync::message::BlockResponse, + ) -> Result, sc_network_common::sync::BadPeer> + { + unimplemented!("Not supported on the RPC collator") + } + + fn on_blocks_processed( + &mut self, + _imported: usize, + _count: usize, + _results: Vec<( + Result< + sc_consensus::BlockImportStatus>, + sc_consensus::BlockImportError, + >, + ::Hash, + )>, + ) -> Box< + dyn Iterator< + Item = Result< + (PeerId, sc_network_common::sync::message::BlockRequest), + sc_network_common::sync::BadPeer, + >, + >, + > { + Box::new(std::iter::empty()) + } + + fn on_justification_import( + &mut self, + _hash: ::Hash, + _number: polkadot_service::NumberFor, + _success: bool, + ) { + } + + fn on_block_finalized( + &mut self, + _hash: &::Hash, + _number: polkadot_service::NumberFor, + ) { + } + + fn push_block_announce_validation( + &mut self, + _who: PeerId, + _hash: ::Hash, + _announce: sc_network_common::sync::message::BlockAnnounce<::Header>, + _is_best: bool, + ) { + } + + fn poll_block_announce_validation( + &mut self, + _cx: &mut std::task::Context, + ) -> std::task::Poll::Header>> + { + std::task::Poll::Pending + } + + fn peer_disconnected( + &mut self, + _who: &PeerId, + ) -> Option> { + None + } + + fn metrics(&self) -> sc_network_common::sync::Metrics { + Metrics { + queued_blocks: 0, + fork_targets: 0, + justifications: sc_network_common::sync::metrics::Metrics { + pending_requests: 0, + active_requests: 0, + importing_requests: 0, + failed_requests: 0, + }, + } + } + + fn create_opaque_block_request( + &self, + _request: &sc_network_common::sync::message::BlockRequest, + ) -> sc_network_common::sync::OpaqueBlockRequest { + unimplemented!("Not supported on the RPC collator") + } + + fn encode_block_request( + &self, + _request: &sc_network_common::sync::OpaqueBlockRequest, + ) -> Result, String> { + unimplemented!("Not supported on the RPC collator") + } + + fn decode_block_response( + &self, + _response: &[u8], + ) -> Result { + unimplemented!("Not supported on the RPC collator") + } + + fn block_response_into_blocks( + &self, + _request: &sc_network_common::sync::message::BlockRequest, + _response: sc_network_common::sync::OpaqueBlockResponse, + ) -> Result>, String> { + unimplemented!("Not supported on the RPC collator") + } + + fn encode_state_request( + &self, + _request: &sc_network_common::sync::OpaqueStateRequest, + ) -> Result, String> { + unimplemented!("Not supported on the RPC collator") + } + + fn decode_state_response( + &self, + _response: &[u8], + ) -> Result { + unimplemented!("Not supported on the RPC collator") + } +} + +struct DummyImportQueue; + +impl sc_service::ImportQueue for DummyImportQueue { + fn import_blocks( + &mut self, + _origin: BlockOrigin, + _blocks: Vec>, + ) { + } + + fn import_justifications( + &mut self, + _who: PeerId, + _hash: Hash, + _number: NumberFor, + _justifications: Justifications, + ) { + } + + fn poll_actions( + &mut self, + _cx: &mut futures::task::Context, + _link: &mut dyn sc_consensus::import_queue::Link, + ) { + } +} diff --git a/client/relay-chain-rpc-interface/Cargo.toml b/client/relay-chain-rpc-interface/Cargo.toml index fe2f9570100..d694862d219 100644 --- a/client/relay-chain-rpc-interface/Cargo.toml +++ b/client/relay-chain-rpc-interface/Cargo.toml @@ -11,8 +11,11 @@ polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "m cumulus-primitives-core = { path = "../../primitives/core" } cumulus-relay-chain-interface = { path = "../relay-chain-interface" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-storage = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/client/relay-chain-rpc-interface/src/lib.rs b/client/relay-chain-rpc-interface/src/lib.rs index f295c693ecd..1d35ec4e747 100644 --- a/client/relay-chain-rpc-interface/src/lib.rs +++ b/client/relay-chain-rpc-interface/src/lib.rs @@ -44,11 +44,12 @@ const TIMEOUT_IN_SECONDS: u64 = 6; #[derive(Clone)] pub struct RelayChainRpcInterface { rpc_client: RelayChainRpcClient, + overseer_handle: Handle, } impl RelayChainRpcInterface { - pub fn new(rpc_client: RelayChainRpcClient) -> Self { - Self { rpc_client } + pub fn new(rpc_client: RelayChainRpcClient, overseer_handle: Handle) -> Self { + Self { rpc_client, overseer_handle } } } @@ -118,15 +119,15 @@ impl RelayChainInterface for RelayChainRpcInterface { } async fn best_block_hash(&self) -> RelayChainResult { - self.rpc_client.chain_get_head().await + self.rpc_client.chain_get_head(None).await } async fn is_major_syncing(&self) -> RelayChainResult { self.rpc_client.system_health().await.map(|h| h.is_syncing) } - fn overseer_handle(&self) -> RelayChainResult> { - unimplemented!("Overseer handle is not available on relay-chain-rpc-interface"); + fn overseer_handle(&self) -> RelayChainResult { + Ok(self.overseer_handle.clone()) } async fn get_storage_by_key( diff --git a/client/relay-chain-rpc-interface/src/rpc_client.rs b/client/relay-chain-rpc-interface/src/rpc_client.rs index 71014b18e0e..3422248735f 100644 --- a/client/relay-chain-rpc-interface/src/rpc_client.rs +++ b/client/relay-chain-rpc-interface/src/rpc_client.rs @@ -17,8 +17,13 @@ use backoff::{future::retry_notify, ExponentialBackoff}; use cumulus_primitives_core::{ relay_chain::{ - v2::{CommittedCandidateReceipt, OccupiedCoreAssumption, SessionIndex, ValidatorId}, - Hash as PHash, Header as PHeader, InboundHrmpMessage, + v2::{ + CandidateCommitments, CandidateEvent, CommittedCandidateReceipt, CoreState, + DisputeState, GroupRotationInfo, OccupiedCoreAssumption, OldV1SessionInfo, + PvfCheckStatement, ScrapedOnChainVotes, SessionIndex, SessionInfo, ValidationCode, + ValidationCodeHash, ValidatorId, ValidatorIndex, ValidatorSignature, + }, + CandidateHash, Hash as PHash, Header as PHeader, InboundHrmpMessage, }, InboundDownwardMessage, ParaId, PersistedValidationData, }; @@ -37,9 +42,11 @@ use jsonrpsee::{ ws_client::WsClientBuilder, }; use parity_scale_codec::{Decode, Encode}; -use polkadot_service::TaskManager; +use polkadot_service::{BlockNumber, TaskManager}; use sc_client_api::StorageData; use sc_rpc_api::{state::ReadProof, system::Health}; +use sp_api::RuntimeVersion; +use sp_consensus_babe::Epoch; use sp_core::sp_std::collections::btree_map::BTreeMap; use sp_runtime::DeserializeOwned; use sp_storage::StorageKey; @@ -253,8 +260,6 @@ impl RelayChainRpcClient { Decode::decode(&mut &*res.0).map_err(Into::into) } - /// Subscribe to a notification stream via RPC - /// Perform RPC request async fn request<'a, R>( &self, @@ -300,10 +305,69 @@ impl RelayChainRpcClient { RelayChainError::RpcCallError(method.to_string(), err)}) } + /// Returns information regarding the current epoch. + pub async fn babe_api_current_epoch(&self, at: PHash) -> Result { + self.call_remote_runtime_function("BabeApi_current_epoch", at, None::<()>).await + } + + /// Old method to fetch v1 session info. + pub async fn parachain_host_session_info_before_version_2( + &self, + at: PHash, + index: SessionIndex, + ) -> Result, RelayChainError> { + self.call_remote_runtime_function( + "ParachainHost_session_info_before_version_2", + at, + Some(index), + ) + .await + } + + /// Scrape dispute relevant from on-chain, backing votes and resolved disputes. + pub async fn parachain_host_on_chain_votes( + &self, + at: PHash, + ) -> Result>, RelayChainError> { + self.call_remote_runtime_function("ParachainHost_on_chain_votes", at, None::<()>) + .await + } + + /// Returns code hashes of PVFs that require pre-checking by validators in the active set. + pub async fn parachain_host_pvfs_require_precheck( + &self, + at: PHash, + ) -> Result, RelayChainError> { + self.call_remote_runtime_function("ParachainHost_pvfs_require_precheck", at, None::<()>) + .await + } + + /// Submits a PVF pre-checking statement into the transaction pool. + pub async fn parachain_host_submit_pvf_check_statement( + &self, + at: PHash, + stmt: PvfCheckStatement, + signature: ValidatorSignature, + ) -> Result<(), RelayChainError> { + self.call_remote_runtime_function( + "ParachainHost_submit_pvf_check_statement", + at, + Some((stmt, signature)), + ) + .await + } + + /// Get local listen address of the node + pub async fn system_local_listen_addresses(&self) -> Result, RelayChainError> { + self.request("system_localListenAddresses", None).await + } + + /// Get system health information pub async fn system_health(&self) -> Result { self.request("system_health", None).await } + /// Get read proof for `storage_keys` pub async fn state_get_read_proof( &self, storage_keys: Vec, @@ -313,6 +377,7 @@ impl RelayChainRpcClient { self.request("state_getReadProof", params).await } + /// Retrieve storage item at `storage_key` pub async fn state_get_storage( &self, storage_key: StorageKey, @@ -322,10 +387,191 @@ impl RelayChainRpcClient { self.request("state_getStorage", params).await } - pub async fn chain_get_head(&self) -> Result { - self.request("chain_getHead", None).await + /// Get hash of the n-th block in the canon chain. + /// + /// By default returns latest block hash. + pub async fn chain_get_head(&self, at: Option) -> Result { + let params = rpc_params!(at); + self.request("chain_getHead", params).await + } + + /// Returns the validator groups and rotation info localized based on the hypothetical child + /// of a block whose state this is invoked on. Note that `now` in the `GroupRotationInfo` + /// should be the successor of the number of the block. + pub async fn parachain_host_validator_groups( + &self, + at: PHash, + ) -> Result<(Vec>, GroupRotationInfo), RelayChainError> { + self.call_remote_runtime_function("ParachainHost_validator_groups", at, None::<()>) + .await + } + + /// Get a vector of events concerning candidates that occurred within a block. + pub async fn parachain_host_candidate_events( + &self, + at: PHash, + ) -> Result, RelayChainError> { + self.call_remote_runtime_function("ParachainHost_candidate_events", at, None::<()>) + .await + } + + /// Checks if the given validation outputs pass the acceptance criteria. + pub async fn parachain_host_check_validation_outputs( + &self, + at: PHash, + para_id: ParaId, + outputs: CandidateCommitments, + ) -> Result { + self.call_remote_runtime_function( + "ParachainHost_check_validation_outputs", + at, + Some((para_id, outputs)), + ) + .await + } + + /// Returns the persisted validation data for the given `ParaId` along with the corresponding + /// validation code hash. Instead of accepting assumption about the para, matches the validation + /// data hash against an expected one and yields `None` if they're not equal. + pub async fn parachain_host_assumed_validation_data( + &self, + at: PHash, + para_id: ParaId, + expected_hash: PHash, + ) -> Result, RelayChainError> { + self.call_remote_runtime_function( + "ParachainHost_persisted_assumed_validation_data", + at, + Some((para_id, expected_hash)), + ) + .await + } + + /// Get hash of last finalized block. + pub async fn chain_get_finalized_head(&self) -> Result { + self.request("chain_getFinalizedHead", None).await + } + + /// Get hash of n-th block. + pub async fn chain_get_block_hash( + &self, + block_number: Option, + ) -> Result, RelayChainError> { + let params = rpc_params!(block_number); + self.request("chain_getBlockHash", params).await + } + + /// Yields the persisted validation data for the given `ParaId` along with an assumption that + /// should be used if the para currently occupies a core. + /// + /// Returns `None` if either the para is not registered or the assumption is `Freed` + /// and the para already occupies a core. + pub async fn parachain_host_persisted_validation_data( + &self, + at: PHash, + para_id: ParaId, + occupied_core_assumption: OccupiedCoreAssumption, + ) -> Result, RelayChainError> { + self.call_remote_runtime_function( + "ParachainHost_persisted_validation_data", + at, + Some((para_id, occupied_core_assumption)), + ) + .await + } + + /// Get the validation code from its hash. + pub async fn parachain_host_validation_code_by_hash( + &self, + at: PHash, + validation_code_hash: ValidationCodeHash, + ) -> Result, RelayChainError> { + self.call_remote_runtime_function( + "ParachainHost_validation_code_by_hash", + at, + Some(validation_code_hash), + ) + .await + } + + /// Yields information on all availability cores as relevant to the child block. + /// Cores are either free or occupied. Free cores can have paras assigned to them. + pub async fn parachain_host_availability_cores( + &self, + at: PHash, + ) -> Result>, RelayChainError> { + self.call_remote_runtime_function("ParachainHost_availability_cores", at, None::<()>) + .await + } + + /// Get runtime version + pub async fn runtime_version(&self, at: PHash) -> Result { + let params = rpc_params!(at); + self.request("state_getRuntimeVersion", params).await + } + + /// Returns all onchain disputes. + /// This is a staging method! Do not use on production runtimes! + pub async fn parachain_host_staging_get_disputes( + &self, + at: PHash, + ) -> Result)>, RelayChainError> { + self.call_remote_runtime_function("ParachainHost_staging_get_disputes", at, None::<()>) + .await + } + + pub async fn authority_discovery_authorities( + &self, + at: PHash, + ) -> Result, RelayChainError> { + self.call_remote_runtime_function("AuthorityDiscoveryApi_authorities", at, None::<()>) + .await + } + + /// Fetch the validation code used by a para, making the given `OccupiedCoreAssumption`. + /// + /// Returns `None` if either the para is not registered or the assumption is `Freed` + /// and the para already occupies a core. + pub async fn parachain_host_validation_code( + &self, + at: PHash, + para_id: ParaId, + occupied_core_assumption: OccupiedCoreAssumption, + ) -> Result, RelayChainError> { + self.call_remote_runtime_function( + "ParachainHost_validation_code", + at, + Some((para_id, occupied_core_assumption)), + ) + .await + } + + /// Fetch the hash of the validation code used by a para, making the given `OccupiedCoreAssumption`. + pub async fn parachain_host_validation_code_hash( + &self, + at: PHash, + para_id: ParaId, + occupied_core_assumption: OccupiedCoreAssumption, + ) -> Result, RelayChainError> { + self.call_remote_runtime_function( + "ParachainHost_validation_code_hash", + at, + Some((para_id, occupied_core_assumption)), + ) + .await } + /// Get the session info for the given session, if stored. + pub async fn parachain_host_session_info( + &self, + at: PHash, + index: SessionIndex, + ) -> Result, RelayChainError> { + self.call_remote_runtime_function("ParachainHost_session_info", at, Some(index)) + .await + } + + /// Get header at specified hash pub async fn chain_get_header( &self, hash: Option, @@ -334,6 +580,8 @@ impl RelayChainRpcClient { self.request("chain_getHeader", params).await } + /// Get the receipt of a candidate pending availability. This returns `Some` for any paras + /// assigned to occupied cores in `availability_cores` and `None` otherwise. pub async fn parachain_host_candidate_pending_availability( &self, at: PHash, @@ -347,6 +595,9 @@ impl RelayChainRpcClient { .await } + /// Returns the session index expected at a child of the block. + /// + /// This can be used to instantiate a `SigningContext`. pub async fn parachain_host_session_index_for_child( &self, at: PHash, @@ -355,6 +606,7 @@ impl RelayChainRpcClient { .await } + /// Get the current validators. pub async fn parachain_host_validators( &self, at: PHash, @@ -363,20 +615,8 @@ impl RelayChainRpcClient { .await } - pub async fn parachain_host_persisted_validation_data( - &self, - at: PHash, - para_id: ParaId, - occupied_core_assumption: OccupiedCoreAssumption, - ) -> Result, RelayChainError> { - self.call_remote_runtime_function( - "ParachainHost_persisted_validation_data", - at, - Some((para_id, occupied_core_assumption)), - ) - .await - } - + /// Get the contents of all channels addressed to the given recipient. Channels that have no + /// messages in them are also included. pub async fn parachain_host_inbound_hrmp_channels_contents( &self, para_id: ParaId, @@ -390,6 +630,7 @@ impl RelayChainRpcClient { .await } + /// Get all the pending inbound messages in the downward message queue for a para. pub async fn parachain_host_dmq_contents( &self, para_id: ParaId, @@ -399,15 +640,7 @@ impl RelayChainRpcClient { .await } - fn send_register_message_to_worker( - &self, - message: NotificationRegisterMessage, - ) -> Result<(), RelayChainError> { - self.to_worker_channel - .try_send(message) - .map_err(|e| RelayChainError::WorkerCommunicationError(e.to_string())) - } - + /// Get a stream of all imported relay chain headers pub async fn get_imported_heads_stream(&self) -> Result, RelayChainError> { let (tx, rx) = futures::channel::mpsc::channel::(NOTIFICATION_CHANNEL_SIZE_LIMIT); self.send_register_message_to_worker(NotificationRegisterMessage::RegisterImportListener( @@ -416,6 +649,7 @@ impl RelayChainRpcClient { Ok(rx) } + /// Get a stream of new best relay chain headers pub async fn get_best_heads_stream(&self) -> Result, RelayChainError> { let (tx, rx) = futures::channel::mpsc::channel::(NOTIFICATION_CHANNEL_SIZE_LIMIT); self.send_register_message_to_worker( @@ -424,6 +658,7 @@ impl RelayChainRpcClient { Ok(rx) } + /// Get a stream of finalized relay chain headers pub async fn get_finalized_heads_stream(&self) -> Result, RelayChainError> { let (tx, rx) = futures::channel::mpsc::channel::(NOTIFICATION_CHANNEL_SIZE_LIMIT); self.send_register_message_to_worker( @@ -432,6 +667,15 @@ impl RelayChainRpcClient { Ok(rx) } + fn send_register_message_to_worker( + &self, + message: NotificationRegisterMessage, + ) -> Result<(), RelayChainError> { + self.to_worker_channel + .try_send(message) + .map_err(|e| RelayChainError::WorkerCommunicationError(e.to_string())) + } + async fn subscribe_imported_heads( ws_client: &JsonRpcClient, ) -> Result, RelayChainError> { diff --git a/client/service/src/lib.rs b/client/service/src/lib.rs index 269112b1622..067ca1c83f3 100644 --- a/client/service/src/lib.rs +++ b/client/service/src/lib.rs @@ -18,7 +18,6 @@ //! //! Provides functions for starting a collator node or a normal full node. -use cumulus_client_cli::CollatorOptions; use cumulus_client_consensus_common::ParachainConsensus; use cumulus_primitives_core::{CollectCollationInfo, ParaId}; use cumulus_relay_chain_interface::RelayChainInterface; @@ -108,8 +107,7 @@ where let overseer_handle = relay_chain_interface .overseer_handle() - .map_err(|e| sc_service::Error::Application(Box::new(e)))? - .ok_or_else(|| "Polkadot full node did not provide an `OverseerHandle`!")?; + .map_err(|e| sc_service::Error::Application(Box::new(e)))?; let pov_recovery = cumulus_client_pov_recovery::PoVRecovery::new( overseer_handle.clone(), @@ -149,7 +147,6 @@ pub struct StartFullNodeParams<'a, Block: BlockT, Client, RCInterface, IQ> { pub announce_block: Arc>) + Send + Sync>, pub relay_chain_slot_duration: Duration, pub import_queue: IQ, - pub collator_options: CollatorOptions, } /// Start a full node for a parachain. @@ -165,7 +162,6 @@ pub fn start_full_node( para_id, relay_chain_slot_duration, import_queue, - collator_options, }: StartFullNodeParams, ) -> sc_service::error::Result<()> where @@ -193,18 +189,9 @@ where .spawn_essential_handle() .spawn("cumulus-consensus", None, consensus); - // PoV Recovery is currently not supported when we connect to the - // relay chain via RPC, so we return early. The node will work, but not be able to recover PoVs from the - // relay chain if blocks are not announced on parachain. This will be enabled again once - // https://github.com/paritytech/cumulus/issues/545 is finished. - if collator_options.relay_chain_rpc_url.is_some() { - return Ok(()) - } - let overseer_handle = relay_chain_interface .overseer_handle() - .map_err(|e| sc_service::Error::Application(Box::new(e)))? - .ok_or_else(|| "Polkadot full node did not provide an `OverseerHandle`!")?; + .map_err(|e| sc_service::Error::Application(Box::new(e)))?; let pov_recovery = cumulus_client_pov_recovery::PoVRecovery::new( overseer_handle, diff --git a/parachain-template/node/Cargo.toml b/parachain-template/node/Cargo.toml index a1b1408936e..6db0087fffe 100644 --- a/parachain-template/node/Cargo.toml +++ b/parachain-template/node/Cargo.toml @@ -70,6 +70,7 @@ cumulus-primitives-parachain-inherent = { path = "../../primitives/parachain-inh cumulus-relay-chain-inprocess-interface = { path = "../../client/relay-chain-inprocess-interface" } cumulus-relay-chain-interface = { path = "../../client/relay-chain-interface" } cumulus-relay-chain-rpc-interface = { path = "../../client/relay-chain-rpc-interface" } +cumulus-relay-chain-minimal-node = { path = "../../client/relay-chain-minimal-node" } [build-dependencies] substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/parachain-template/node/src/command.rs b/parachain-template/node/src/command.rs index 7f7bfd140af..ee497b413f5 100644 --- a/parachain-template/node/src/command.rs +++ b/parachain-template/node/src/command.rs @@ -4,7 +4,7 @@ use codec::Encode; use cumulus_client_cli::generate_genesis_block; use cumulus_primitives_core::ParaId; use frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE}; -use log::info; +use log::{info, warn}; use parachain_template_runtime::{Block, RuntimeApi}; use sc_cli::{ ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, @@ -304,6 +304,10 @@ pub fn run() -> Result<()> { info!("Parachain genesis state: {}", genesis_state); info!("Is collating: {}", if config.role.is_authority() { "yes" } else { "no" }); + if collator_options.relay_chain_rpc_url.is_some() && cli.relay_chain_args.len() > 0 { + warn!("Detected relay chain node arguments together with --relay-chain-rpc-url. This command starts a minimal Polkadot node that only uses a network-related subset of all relay chain CLI options."); + } + crate::service::start_parachain_node( config, polkadot_config, diff --git a/parachain-template/node/src/service.rs b/parachain-template/node/src/service.rs index a4dda555749..91d8d54244d 100644 --- a/parachain-template/node/src/service.rs +++ b/parachain-template/node/src/service.rs @@ -22,7 +22,7 @@ use cumulus_client_service::{ use cumulus_primitives_core::ParaId; use cumulus_relay_chain_inprocess_interface::build_inprocess_relay_chain; use cumulus_relay_chain_interface::{RelayChainError, RelayChainInterface, RelayChainResult}; -use cumulus_relay_chain_rpc_interface::{create_client_and_start_worker, RelayChainRpcInterface}; +use cumulus_relay_chain_minimal_node::build_minimal_relay_chain_node; // Substrate Imports use sc_executor::NativeElseWasmExecutor; @@ -176,10 +176,8 @@ async fn build_relay_chain_interface( hwbench: Option, ) -> RelayChainResult<(Arc<(dyn RelayChainInterface + 'static)>, Option)> { match collator_options.relay_chain_rpc_url { - Some(relay_chain_url) => { - let client = create_client_and_start_worker(relay_chain_url, task_manager).await?; - Ok((Arc::new(RelayChainRpcInterface::new(client)) as Arc<_>, None)) - }, + Some(relay_chain_url) => + build_minimal_relay_chain_node(polkadot_config, task_manager, relay_chain_url).await, None => build_inprocess_relay_chain( polkadot_config, parachain_config, @@ -365,7 +363,6 @@ where )?; let spawner = task_manager.spawn_handle(); - let params = StartCollatorParams { para_id: id, block_status: client.clone(), @@ -390,7 +387,6 @@ where relay_chain_interface, relay_chain_slot_duration, import_queue, - collator_options, }; start_full_node(params)?; diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index 68b5830bd0c..356662560f6 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -83,6 +83,7 @@ cumulus-primitives-parachain-inherent = { path = "../primitives/parachain-inhere cumulus-relay-chain-interface = { path = "../client/relay-chain-interface" } cumulus-relay-chain-inprocess-interface = { path = "../client/relay-chain-inprocess-interface" } cumulus-relay-chain-rpc-interface = { path = "../client/relay-chain-rpc-interface" } +cumulus-relay-chain-minimal-node = { path = "../client/relay-chain-minimal-node" } [build-dependencies] substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/polkadot-parachain/src/cli.rs b/polkadot-parachain/src/cli.rs index c99e5459836..36a4cfd562d 100644 --- a/polkadot-parachain/src/cli.rs +++ b/polkadot-parachain/src/cli.rs @@ -83,7 +83,7 @@ pub struct Cli { pub no_hardware_benchmarks: bool, /// Relay chain arguments - #[clap(raw = true, conflicts_with = "relay-chain-rpc-url")] + #[clap(raw = true)] pub relaychain_args: Vec, } diff --git a/polkadot-parachain/src/command.rs b/polkadot-parachain/src/command.rs index 0c3fbe67026..fbffbc03c1b 100644 --- a/polkadot-parachain/src/command.rs +++ b/polkadot-parachain/src/command.rs @@ -26,7 +26,7 @@ use codec::Encode; use cumulus_client_cli::generate_genesis_block; use cumulus_primitives_core::ParaId; use frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE}; -use log::info; +use log::{info, warn}; use parachains_common::{AuraId, StatemintAuraId}; use sc_cli::{ ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, @@ -678,6 +678,10 @@ pub fn run() -> Result<()> { info!("Parachain genesis state: {}", genesis_state); info!("Is collating: {}", if config.role.is_authority() { "yes" } else { "no" }); + if collator_options.relay_chain_rpc_url.is_some() && cli.relaychain_args.len() > 0 { + warn!("Detected relay chain node arguments together with --relay-chain-rpc-url. This command starts a minimal Polkadot node that only uses a network-related subset of all relay chain CLI options."); + } + match config.chain_spec.runtime() { Runtime::Statemint => crate::service::start_generic_aura_node::< statemint_runtime::RuntimeApi, diff --git a/polkadot-parachain/src/service.rs b/polkadot-parachain/src/service.rs index 45f14319749..ca47af08eec 100644 --- a/polkadot-parachain/src/service.rs +++ b/polkadot-parachain/src/service.rs @@ -30,7 +30,7 @@ use cumulus_primitives_core::{ }; use cumulus_relay_chain_inprocess_interface::build_inprocess_relay_chain; use cumulus_relay_chain_interface::{RelayChainError, RelayChainInterface, RelayChainResult}; -use cumulus_relay_chain_rpc_interface::{create_client_and_start_worker, RelayChainRpcInterface}; +use cumulus_relay_chain_minimal_node::build_minimal_relay_chain_node; use polkadot_service::CollatorPair; use sp_core::Pair; @@ -267,10 +267,8 @@ async fn build_relay_chain_interface( hwbench: Option, ) -> RelayChainResult<(Arc<(dyn RelayChainInterface + 'static)>, Option)> { match collator_options.relay_chain_rpc_url { - Some(relay_chain_url) => { - let client = create_client_and_start_worker(relay_chain_url, task_manager).await?; - Ok((Arc::new(RelayChainRpcInterface::new(client)) as Arc<_>, None)) - }, + Some(relay_chain_url) => + build_minimal_relay_chain_node(polkadot_config, task_manager, relay_chain_url).await, None => build_inprocess_relay_chain( polkadot_config, parachain_config, @@ -467,7 +465,6 @@ where relay_chain_interface, relay_chain_slot_duration, import_queue, - collator_options, }; start_full_node(params)?; @@ -677,7 +674,6 @@ where relay_chain_interface, relay_chain_slot_duration, import_queue, - collator_options, }; start_full_node(params)?; @@ -1492,7 +1488,6 @@ where relay_chain_interface, relay_chain_slot_duration, import_queue, - collator_options, }; start_full_node(params)?; diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index 8d9c9c04fa7..bd3f4b9c90c 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -69,6 +69,7 @@ cumulus-relay-chain-interface = { path = "../../client/relay-chain-interface" } cumulus-relay-chain-rpc-interface = { path = "../../client/relay-chain-rpc-interface" } cumulus-test-relay-validation-worker-provider = { path = "../relay-validation-worker-provider" } cumulus-test-runtime = { path = "../runtime" } +cumulus-relay-chain-minimal-node = { path = "../../client/relay-chain-minimal-node" } [dev-dependencies] futures = "0.3.24" diff --git a/test/service/src/cli.rs b/test/service/src/cli.rs index 40b63798856..4cf4b925997 100644 --- a/test/service/src/cli.rs +++ b/test/service/src/cli.rs @@ -41,7 +41,7 @@ pub struct TestCollatorCli { pub parachain_id: u32, /// Relay chain arguments - #[clap(raw = true, conflicts_with = "relay-chain-rpc-url")] + #[clap(raw = true)] pub relaychain_args: Vec, #[clap(long)] diff --git a/test/service/src/lib.rs b/test/service/src/lib.rs index c211ece81d6..9e9f5883f97 100644 --- a/test/service/src/lib.rs +++ b/test/service/src/lib.rs @@ -38,7 +38,8 @@ use cumulus_client_service::{ use cumulus_primitives_core::ParaId; use cumulus_relay_chain_inprocess_interface::RelayChainInProcessInterface; use cumulus_relay_chain_interface::{RelayChainError, RelayChainInterface, RelayChainResult}; -use cumulus_relay_chain_rpc_interface::{create_client_and_start_worker, RelayChainRpcInterface}; +use cumulus_relay_chain_minimal_node::build_minimal_relay_chain_node; + use cumulus_test_runtime::{Hash, Header, NodeBlock as Block, RuntimeApi}; use frame_system_rpc_runtime_api::AccountNonceApi; @@ -183,8 +184,9 @@ async fn build_relay_chain_interface( task_manager: &mut TaskManager, ) -> RelayChainResult> { if let Some(relay_chain_url) = collator_options.relay_chain_rpc_url { - let client = create_client_and_start_worker(relay_chain_url, task_manager).await?; - return Ok(Arc::new(RelayChainRpcInterface::new(client)) as Arc<_>) + return build_minimal_relay_chain_node(relay_chain_config, task_manager, relay_chain_url) + .await + .map(|r| r.0) } let relay_chain_full_node = polkadot_test_service::new_full( @@ -198,12 +200,15 @@ async fn build_relay_chain_interface( )?; task_manager.add_child(relay_chain_full_node.task_manager); + tracing::info!("Using inprocess node."); Ok(Arc::new(RelayChainInProcessInterface::new( relay_chain_full_node.client.clone(), relay_chain_full_node.backend.clone(), Arc::new(relay_chain_full_node.network.clone()), - relay_chain_full_node.overseer_handle, - )) as Arc<_>) + relay_chain_full_node.overseer_handle.ok_or(RelayChainError::GenericError( + "Overseer should be running in full node.".to_string(), + ))?, + ))) } /// Start a node with the given parachain `Configuration` and relay chain `Configuration`. @@ -367,7 +372,6 @@ where // the recovery delay of pov-recovery. We don't want to wait for too // long on the full node to recover, so we reduce this time here. relay_chain_slot_duration: Duration::from_millis(6), - collator_options, }; start_full_node(params)?; @@ -473,9 +477,9 @@ impl TestNodeBuilder { /// node. pub fn connect_to_parachain_nodes<'a>( mut self, - nodes: impl Iterator, + nodes: impl IntoIterator, ) -> Self { - self.parachain_nodes.extend(nodes.map(|n| n.addr.clone())); + self.parachain_nodes.extend(nodes.into_iter().map(|n| n.addr.clone())); self } diff --git a/test/service/src/main.rs b/test/service/src/main.rs index b87a8ed191d..93be592a472 100644 --- a/test/service/src/main.rs +++ b/test/service/src/main.rs @@ -78,7 +78,8 @@ fn main() -> Result<(), sc_cli::Error> { }) }, None => { - let mut builder = sc_cli::LoggerBuilder::new(""); + let log_filters = cli.run.normalize().log_filters(); + let mut builder = sc_cli::LoggerBuilder::new(log_filters.unwrap_or_default()); builder.with_colors(true); let _ = builder.init(); diff --git a/zombienet_tests/0006-rpc_collator_builds_blocks.feature b/zombienet_tests/0006-rpc_collator_builds_blocks.feature new file mode 100644 index 00000000000..558e65f96db --- /dev/null +++ b/zombienet_tests/0006-rpc_collator_builds_blocks.feature @@ -0,0 +1,17 @@ +Description: RPC collator should build blocks +Network: ./0006-rpc_collator_builds_blocks.toml +Creds: config + +alice: is up +bob: is up +charlie: is up +one: is up +two: is up +dave: is up +eve: is up + +alice: parachain 2000 is registered within 225 seconds +alice: parachain 2000 block height is at least 10 within 250 seconds + +dave: reports block height is at least 12 within 250 seconds +eve: reports block height is at least 12 within 250 seconds diff --git a/zombienet_tests/0006-rpc_collator_builds_blocks.toml b/zombienet_tests/0006-rpc_collator_builds_blocks.toml new file mode 100644 index 00000000000..9414532682a --- /dev/null +++ b/zombienet_tests/0006-rpc_collator_builds_blocks.toml @@ -0,0 +1,46 @@ +[relaychain] +default_image = "{{RELAY_IMAGE}}" +default_command = "polkadot" +default_args = [ "-lparachain=debug" ] + +chain = "rococo-local" + + [[relaychain.nodes]] + name = "alice" + validator = true + + [[relaychain.nodes]] + name = "bob" + validator = true + + [[relaychain.nodes]] + name = "charlie" + validator = true + + [[relaychain.nodes]] + name = "one" + validator = false + + [[relaychain.nodes]] + name = "two" + validator = false + +[[parachains]] +id = 2000 +cumulus_based = true + + # run dave as parachain full node + [[parachains.collators]] + name = "dave" + validator = true + image = "{{COL_IMAGE}}" + command = "test-parachain" + args = ["-lparachain=debug,blockchain-rpc-client=debug", "--relay-chain-rpc-url {{'one'|zombie('wsUri')}}", "-- --bootnodes {{'one'|zombie('multiAddress')}}"] + + # run eve as parachain full node + [[parachains.collators]] + name = "eve" + validator = true + image = "{{COL_IMAGE}}" + command = "test-parachain" + args = ["-lparachain=debug,blockchain-rpc-client=debug", "--relay-chain-rpc-url {{'two'|zombie('wsUri')}}", "-- --bootnodes {{'two'|zombie('multiAddress')}}"] From 45ed36f3b88b02cf22ead5e7bc24db78d721ccb5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Oct 2022 10:08:40 +0200 Subject: [PATCH 123/148] Bump tracing from 0.1.36 to 0.1.37 (#1740) Bumps [tracing](https://github.com/tokio-rs/tracing) from 0.1.36 to 0.1.37. - [Release notes](https://github.com/tokio-rs/tracing/releases) - [Commits](https://github.com/tokio-rs/tracing/compare/tracing-0.1.36...tracing-0.1.37) --- updated-dependencies: - dependency-name: tracing dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 12 ++++++------ client/consensus/aura/Cargo.toml | 2 +- client/consensus/common/Cargo.toml | 2 +- client/consensus/relay-chain/Cargo.toml | 2 +- client/network/Cargo.toml | 2 +- client/pov-recovery/Cargo.toml | 2 +- client/relay-chain-minimal-node/Cargo.toml | 2 +- client/relay-chain-rpc-interface/Cargo.toml | 2 +- primitives/parachain-inherent/Cargo.toml | 2 +- test/service/Cargo.toml | 2 +- 10 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c5ab759922a..b19778cd672 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12394,9 +12394,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.36" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if 1.0.0", "pin-project-lite 0.2.9", @@ -12406,9 +12406,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", @@ -12417,9 +12417,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" dependencies = [ "once_cell", "valuable", diff --git a/client/consensus/aura/Cargo.toml b/client/consensus/aura/Cargo.toml index 9e3118c846c..9dd29d950ba 100644 --- a/client/consensus/aura/Cargo.toml +++ b/client/consensus/aura/Cargo.toml @@ -9,7 +9,7 @@ edition = "2021" async-trait = "0.1.57" codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ] } futures = "0.3.24" -tracing = "0.1.36" +tracing = "0.1.37" # Substrate sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index 42fa2fb53b2..3f898ba7c5c 100644 --- a/client/consensus/common/Cargo.toml +++ b/client/consensus/common/Cargo.toml @@ -10,7 +10,7 @@ async-trait = "0.1.57" codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ] } dyn-clone = "1.0.9" futures = "0.3.24" -tracing = "0.1.36" +tracing = "0.1.37" # Substrate sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/client/consensus/relay-chain/Cargo.toml b/client/consensus/relay-chain/Cargo.toml index 7f4b07db86c..86caa856ed9 100644 --- a/client/consensus/relay-chain/Cargo.toml +++ b/client/consensus/relay-chain/Cargo.toml @@ -9,7 +9,7 @@ edition = "2021" async-trait = "0.1.57" futures = "0.3.24" parking_lot = "0.12.1" -tracing = "0.1.36" +tracing = "0.1.37" # Substrate sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index 76b75fbd575..e24e30b7fd4 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -11,7 +11,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "deriv futures = "0.3.24" futures-timer = "3.0.2" parking_lot = "0.12.1" -tracing = "0.1.36" +tracing = "0.1.37" # Substrate sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/client/pov-recovery/Cargo.toml b/client/pov-recovery/Cargo.toml index 530e3340ec9..d892b889a0b 100644 --- a/client/pov-recovery/Cargo.toml +++ b/client/pov-recovery/Cargo.toml @@ -10,7 +10,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "deriv futures = "0.3.24" futures-timer = "3.0.2" rand = "0.8.5" -tracing = "0.1.36" +tracing = "0.1.37" # Substrate sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/client/relay-chain-minimal-node/Cargo.toml b/client/relay-chain-minimal-node/Cargo.toml index 6c9cb255363..10022c05672 100644 --- a/client/relay-chain-minimal-node/Cargo.toml +++ b/client/relay-chain-minimal-node/Cargo.toml @@ -42,7 +42,7 @@ cumulus-relay-chain-rpc-interface = { path = "../relay-chain-rpc-interface" } cumulus-primitives-core = { path = "../../primitives/core" } lru = "0.8" -tracing = "0.1.25" +tracing = "0.1.37" async-trait = "0.1.52" futures = "0.3.24" url = "2.2.2" diff --git a/client/relay-chain-rpc-interface/Cargo.toml b/client/relay-chain-rpc-interface/Cargo.toml index d694862d219..22c1e26c9af 100644 --- a/client/relay-chain-rpc-interface/Cargo.toml +++ b/client/relay-chain-rpc-interface/Cargo.toml @@ -26,7 +26,7 @@ futures = "0.3.24" futures-timer = "3.0.2" parity-scale-codec = "3.2.1" jsonrpsee = { version = "0.15.1", features = ["ws-client"] } -tracing = "0.1.36" +tracing = "0.1.37" async-trait = "0.1.57" url = "2.3.1" backoff = { version = "0.4.0", features = ["tokio"] } diff --git a/primitives/parachain-inherent/Cargo.toml b/primitives/parachain-inherent/Cargo.toml index ebe971a116d..fb6f3b19731 100644 --- a/primitives/parachain-inherent/Cargo.toml +++ b/primitives/parachain-inherent/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" async-trait = { version = "0.1.57", optional = true } codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "derive" ] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -tracing = { version = "0.1.36", optional = true } +tracing = { version = "0.1.37", optional = true } # Substrate sc-client-api = { git = "https://github.com/paritytech/substrate", optional = true, branch = "master" } diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index bd3f4b9c90c..b58fe264bf6 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -17,7 +17,7 @@ jsonrpsee = { version = "0.15.1", features = ["server"] } rand = "0.8.5" serde = { version = "1.0.145", features = ["derive"] } tokio = { version = "1.21.1", features = ["macros"] } -tracing = "0.1.36" +tracing = "0.1.37" url = "2.3.1" # Substrate From 445440400e16d21a8e5951c62e40e35757c69643 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Oct 2022 10:58:33 +0200 Subject: [PATCH 124/148] Bump tokio from 1.21.1 to 1.21.2 (#1698) Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.21.1 to 1.21.2. - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.21.1...tokio-1.21.2) --- updated-dependencies: - dependency-name: tokio dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 5 ++--- client/network/Cargo.toml | 2 +- client/pov-recovery/Cargo.toml | 2 +- client/relay-chain-minimal-node/Cargo.toml | 2 +- client/relay-chain-rpc-interface/Cargo.toml | 2 +- polkadot-parachain/Cargo.toml | 2 +- test/service/Cargo.toml | 2 +- 7 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b19778cd672..3c977f51482 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12297,9 +12297,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.21.1" +version = "1.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0020c875007ad96677dcc890298f4b942882c5d4eb7cc8f439fc3bf813dc9c95" +checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" dependencies = [ "autocfg", "bytes", @@ -12307,7 +12307,6 @@ dependencies = [ "memchr", "mio", "num_cpus", - "once_cell", "parking_lot 0.12.1", "pin-project-lite 0.2.9", "signal-hook-registry", diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index e24e30b7fd4..73dff3703e6 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -31,7 +31,7 @@ cumulus-relay-chain-interface = { path = "../relay-chain-interface" } [dev-dependencies] portpicker = "0.1.1" -tokio = { version = "1.21.1", features = ["macros"] } +tokio = { version = "1.21.2", features = ["macros"] } url = "2.3.1" # Substrate diff --git a/client/pov-recovery/Cargo.toml b/client/pov-recovery/Cargo.toml index d892b889a0b..4653f7af379 100644 --- a/client/pov-recovery/Cargo.toml +++ b/client/pov-recovery/Cargo.toml @@ -30,7 +30,7 @@ cumulus-primitives-core = { path = "../../primitives/core" } cumulus-relay-chain-interface = {path = "../relay-chain-interface"} [dev-dependencies] -tokio = { version = "1.21.1", features = ["macros"] } +tokio = { version = "1.21.2", features = ["macros"] } portpicker = "0.1.1" # Cumulus diff --git a/client/relay-chain-minimal-node/Cargo.toml b/client/relay-chain-minimal-node/Cargo.toml index 10022c05672..de7958d5340 100644 --- a/client/relay-chain-minimal-node/Cargo.toml +++ b/client/relay-chain-minimal-node/Cargo.toml @@ -46,4 +46,4 @@ tracing = "0.1.37" async-trait = "0.1.52" futures = "0.3.24" url = "2.2.2" -tokio = { version = "1.17.0", features = ["macros"] } +tokio = { version = "1.21.2", features = ["macros"] } diff --git a/client/relay-chain-rpc-interface/Cargo.toml b/client/relay-chain-rpc-interface/Cargo.toml index 22c1e26c9af..db5e7808f80 100644 --- a/client/relay-chain-rpc-interface/Cargo.toml +++ b/client/relay-chain-rpc-interface/Cargo.toml @@ -20,7 +20,7 @@ sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = " sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-storage = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -tokio = { version = "1.21.1", features = ["sync"] } +tokio = { version = "1.21.2", features = ["sync"] } futures = "0.3.24" futures-timer = "3.0.2" diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index 356662560f6..a871294aad9 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -92,7 +92,7 @@ substrate-build-script-utils = { git = "https://github.com/paritytech/substrate" assert_cmd = "2.0" nix = "0.25" tempfile = "3.3.0" -tokio = { version = "1.21.1", features = ["macros", "time", "parking_lot"] } +tokio = { version = "1.21.2", features = ["macros", "time", "parking_lot"] } wait-timeout = "0.2" # purge_chain_works works with rococo-local and needs to allow this polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "master", features = ["rococo-native"] } diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index b58fe264bf6..1d4648d378d 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -16,7 +16,7 @@ criterion = { version = "0.4.0", features = [ "async_tokio" ] } jsonrpsee = { version = "0.15.1", features = ["server"] } rand = "0.8.5" serde = { version = "1.0.145", features = ["derive"] } -tokio = { version = "1.21.1", features = ["macros"] } +tokio = { version = "1.21.2", features = ["macros"] } tracing = "0.1.37" url = "2.3.1" From 466725aad1c2e1274296d65889b1c57166b887fb Mon Sep 17 00:00:00 2001 From: Aaro Altonen <48052676+altonen@users.noreply.github.com> Date: Mon, 10 Oct 2022 14:38:54 +0300 Subject: [PATCH 125/148] Companion for paritytech/polkadot#6117 (#1749) * Companion for paritytech/polkadot#6117 * Fix code * Fix trait * update lockfile for {"polkadot", "substrate"} Co-authored-by: parity-processbot <> --- Cargo.lock | 513 +++++++++--------- client/relay-chain-minimal-node/Cargo.toml | 1 + .../relay-chain-minimal-node/src/network.rs | 72 ++- 3 files changed, 328 insertions(+), 258 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3c977f51482..19577f50878 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -469,7 +469,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "array-bytes", "async-trait", @@ -506,7 +506,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -526,7 +526,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "beefy-primitives", "sp-api", @@ -536,13 +536,15 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-application-crypto", "sp-core", + "sp-io", + "sp-mmr-primitives", "sp-runtime", "sp-std", ] @@ -2004,6 +2006,7 @@ dependencies = [ name = "cumulus-relay-chain-minimal-node" version = "0.1.0" dependencies = [ + "array-bytes", "async-trait", "cumulus-primitives-core", "cumulus-relay-chain-interface", @@ -2796,7 +2799,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "parity-scale-codec", ] @@ -2813,7 +2816,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support", "frame-system", @@ -2836,7 +2839,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "Inflector", "array-bytes", @@ -2887,7 +2890,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2898,7 +2901,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2914,7 +2917,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support", "frame-system", @@ -2943,7 +2946,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "bitflags", "frame-metadata", @@ -2975,7 +2978,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "Inflector", "cfg-expr", @@ -2989,7 +2992,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -3001,7 +3004,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "proc-macro2", "quote", @@ -3011,7 +3014,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support", "log", @@ -3029,7 +3032,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -3044,7 +3047,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "parity-scale-codec", "sp-api", @@ -3053,7 +3056,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support", "parity-scale-codec", @@ -3920,7 +3923,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "beefy-primitives", "bitvec", @@ -4018,7 +4021,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "frame-support", "polkadot-primitives", @@ -5401,7 +5404,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "array-bytes", "frame-benchmarking", @@ -5422,7 +5425,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support", "frame-system", @@ -5439,7 +5442,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -5453,7 +5456,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support", "frame-system", @@ -5469,7 +5472,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support", "frame-system", @@ -5485,7 +5488,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support", "frame-system", @@ -5500,7 +5503,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -5524,7 +5527,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5544,7 +5547,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -5559,7 +5562,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "beefy-primitives", "frame-support", @@ -5575,7 +5578,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "array-bytes", "beefy-merkle-tree", @@ -5598,7 +5601,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -5616,7 +5619,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -5660,7 +5663,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -5677,7 +5680,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "bitflags", "frame-benchmarking", @@ -5706,7 +5709,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "bitflags", "parity-scale-codec", @@ -5718,7 +5721,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "proc-macro2", "quote", @@ -5728,7 +5731,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "assert_matches", "frame-benchmarking", @@ -5745,7 +5748,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -5763,7 +5766,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5787,7 +5790,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5800,7 +5803,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -5818,7 +5821,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5839,7 +5842,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -5854,7 +5857,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -5877,7 +5880,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5893,7 +5896,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -5913,7 +5916,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -5930,7 +5933,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -5947,7 +5950,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5965,7 +5968,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5980,7 +5983,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -5996,7 +5999,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support", "frame-system", @@ -6013,7 +6016,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6033,7 +6036,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "parity-scale-codec", "sp-api", @@ -6043,7 +6046,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support", "frame-system", @@ -6060,7 +6063,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6083,7 +6086,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -6100,7 +6103,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -6115,7 +6118,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support", "frame-system", @@ -6129,7 +6132,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -6147,7 +6150,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -6162,7 +6165,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "assert_matches", "frame-benchmarking", @@ -6180,7 +6183,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -6196,7 +6199,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support", "frame-system", @@ -6217,7 +6220,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -6233,7 +6236,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support", "frame-system", @@ -6247,7 +6250,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6270,7 +6273,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6281,7 +6284,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "log", "sp-arithmetic", @@ -6290,7 +6293,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support", "frame-system", @@ -6319,7 +6322,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -6337,7 +6340,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -6356,7 +6359,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-support", "frame-system", @@ -6372,7 +6375,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6387,7 +6390,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6398,7 +6401,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -6415,7 +6418,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -6430,7 +6433,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -6446,7 +6449,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -6461,7 +6464,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-benchmarking", "frame-support", @@ -6476,7 +6479,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "frame-support", "frame-system", @@ -6494,7 +6497,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "frame-benchmarking", "frame-support", @@ -6958,18 +6961,18 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", @@ -7048,7 +7051,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7063,7 +7066,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7077,7 +7080,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "derive_more", "fatality", @@ -7100,7 +7103,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "fatality", "futures", @@ -7121,7 +7124,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7147,7 +7150,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7188,7 +7191,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "always-assert", "bitvec", @@ -7210,7 +7213,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7223,7 +7226,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "derive_more", "fatality", @@ -7248,7 +7251,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7262,7 +7265,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "futures", "futures-timer", @@ -7282,7 +7285,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "always-assert", "async-trait", @@ -7306,7 +7309,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "futures", "parity-scale-codec", @@ -7324,7 +7327,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "bitvec", "derive_more", @@ -7353,7 +7356,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "bitvec", "futures", @@ -7373,7 +7376,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "bitvec", "fatality", @@ -7392,7 +7395,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7407,7 +7410,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "async-trait", "futures", @@ -7425,7 +7428,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7440,7 +7443,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "futures", "futures-timer", @@ -7457,7 +7460,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "fatality", "futures", @@ -7476,7 +7479,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "async-trait", "futures", @@ -7493,7 +7496,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "bitvec", "fatality", @@ -7511,7 +7514,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "always-assert", "assert_matches", @@ -7543,7 +7546,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "futures", "polkadot-node-primitives", @@ -7559,7 +7562,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "futures", "memory-lru", @@ -7575,7 +7578,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "async-std", "lazy_static", @@ -7593,7 +7596,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "bs58", "futures", @@ -7612,7 +7615,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "async-trait", "derive_more", @@ -7635,7 +7638,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "bounded-vec", "futures", @@ -7657,7 +7660,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7667,7 +7670,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "async-trait", "futures", @@ -7685,7 +7688,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "async-trait", "derive_more", @@ -7708,7 +7711,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "async-trait", "derive_more", @@ -7741,7 +7744,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "async-trait", "futures", @@ -7764,7 +7767,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "derive_more", "frame-support", @@ -7862,7 +7865,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7877,7 +7880,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "bitvec", "frame-system", @@ -7907,7 +7910,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7939,7 +7942,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "beefy-primitives", "bitvec", @@ -8028,7 +8031,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "beefy-primitives", "bitvec", @@ -8075,7 +8078,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "frame-support", "polkadot-primitives", @@ -8087,7 +8090,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "bs58", "parity-scale-codec", @@ -8099,7 +8102,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "bitflags", "bitvec", @@ -8142,7 +8145,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "async-trait", "beefy-gadget", @@ -8247,7 +8250,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8268,7 +8271,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8278,7 +8281,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8303,7 +8306,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "beefy-primitives", "bitvec", @@ -8364,7 +8367,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "frame-benchmarking", "frame-system", @@ -8995,7 +8998,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9114,7 +9117,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9198,7 +9201,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "frame-support", "polkadot-primitives", @@ -9368,7 +9371,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "log", "sp-core", @@ -9379,7 +9382,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "async-trait", "futures", @@ -9406,7 +9409,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "futures", "futures-timer", @@ -9429,7 +9432,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9445,7 +9448,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9462,7 +9465,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9473,7 +9476,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "array-bytes", "chrono", @@ -9513,7 +9516,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "fnv", "futures", @@ -9541,7 +9544,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "hash-db", "kvdb", @@ -9566,7 +9569,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "async-trait", "futures", @@ -9590,7 +9593,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "async-trait", "futures", @@ -9619,7 +9622,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "async-trait", "fork-tree", @@ -9661,7 +9664,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "futures", "jsonrpsee", @@ -9683,7 +9686,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9696,7 +9699,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "async-trait", "futures", @@ -9720,7 +9723,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9747,7 +9750,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "environmental", "parity-scale-codec", @@ -9763,7 +9766,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "log", "parity-scale-codec", @@ -9778,7 +9781,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9798,7 +9801,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "ahash", "array-bytes", @@ -9839,7 +9842,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "finality-grandpa", "futures", @@ -9860,7 +9863,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "ansi_term", "futures", @@ -9877,7 +9880,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "array-bytes", "async-trait", @@ -9892,7 +9895,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "array-bytes", "async-trait", @@ -9939,7 +9942,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "cid", "futures", @@ -9959,7 +9962,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "async-trait", "bitflags", @@ -9985,7 +9988,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "ahash", "futures", @@ -10003,7 +10006,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "array-bytes", "futures", @@ -10024,7 +10027,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "array-bytes", "fork-tree", @@ -10052,7 +10055,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "array-bytes", "futures", @@ -10071,7 +10074,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "array-bytes", "bytes", @@ -10101,7 +10104,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "futures", "libp2p", @@ -10114,7 +10117,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10123,7 +10126,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "futures", "hash-db", @@ -10153,7 +10156,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "futures", "jsonrpsee", @@ -10176,7 +10179,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "futures", "jsonrpsee", @@ -10189,7 +10192,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "async-trait", "directories", @@ -10259,7 +10262,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "log", "parity-scale-codec", @@ -10273,7 +10276,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10292,7 +10295,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "futures", "libc", @@ -10311,7 +10314,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "chrono", "futures", @@ -10329,7 +10332,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "ansi_term", "atty", @@ -10360,7 +10363,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10371,7 +10374,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "futures", "futures-timer", @@ -10397,7 +10400,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "futures", "log", @@ -10410,7 +10413,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "futures", "futures-timer", @@ -10840,7 +10843,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "enumn", "parity-scale-codec", @@ -10916,7 +10919,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "hash-db", "log", @@ -10934,7 +10937,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "blake2", "proc-macro-crate", @@ -10946,7 +10949,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "parity-scale-codec", "scale-info", @@ -10959,7 +10962,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "integer-sqrt", "num-traits", @@ -10974,7 +10977,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "parity-scale-codec", "scale-info", @@ -10987,7 +10990,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "async-trait", "parity-scale-codec", @@ -10999,7 +11002,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "parity-scale-codec", "sp-api", @@ -11011,7 +11014,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "futures", "log", @@ -11029,7 +11032,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "async-trait", "futures", @@ -11048,7 +11051,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "async-trait", "parity-scale-codec", @@ -11066,7 +11069,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "async-trait", "merlin", @@ -11089,7 +11092,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "parity-scale-codec", "scale-info", @@ -11103,7 +11106,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "parity-scale-codec", "scale-info", @@ -11116,7 +11119,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "array-bytes", "base58", @@ -11162,7 +11165,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "blake2", "byteorder", @@ -11176,7 +11179,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "proc-macro2", "quote", @@ -11187,7 +11190,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11196,7 +11199,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "proc-macro2", "quote", @@ -11206,7 +11209,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "environmental", "parity-scale-codec", @@ -11217,7 +11220,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "finality-grandpa", "log", @@ -11235,7 +11238,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11249,7 +11252,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "bytes", "futures", @@ -11275,7 +11278,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "lazy_static", "sp-core", @@ -11286,7 +11289,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "async-trait", "futures", @@ -11303,7 +11306,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "thiserror", "zstd", @@ -11312,7 +11315,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "log", "parity-scale-codec", @@ -11328,7 +11331,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "parity-scale-codec", "scale-info", @@ -11342,7 +11345,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "sp-api", "sp-core", @@ -11352,7 +11355,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "backtrace", "lazy_static", @@ -11362,7 +11365,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "rustc-hash", "serde", @@ -11372,7 +11375,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "either", "hash256-std-hasher", @@ -11395,7 +11398,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11413,7 +11416,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "Inflector", "proc-macro-crate", @@ -11425,7 +11428,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "log", "parity-scale-codec", @@ -11439,7 +11442,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "serde", "serde_json", @@ -11448,7 +11451,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "parity-scale-codec", "scale-info", @@ -11462,7 +11465,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "parity-scale-codec", "scale-info", @@ -11473,7 +11476,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "hash-db", "log", @@ -11495,12 +11498,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11513,7 +11516,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "log", "sp-core", @@ -11526,7 +11529,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "async-trait", "futures-timer", @@ -11542,7 +11545,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "parity-scale-codec", "sp-std", @@ -11554,7 +11557,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "sp-api", "sp-runtime", @@ -11563,7 +11566,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "async-trait", "log", @@ -11579,7 +11582,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "ahash", "hash-db", @@ -11602,7 +11605,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11619,7 +11622,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11630,7 +11633,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "impl-trait-for-tuples", "log", @@ -11643,7 +11646,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11939,7 +11942,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "platforms", ] @@ -11947,7 +11950,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11968,7 +11971,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "futures-util", "hyper", @@ -11981,7 +11984,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "jsonrpsee", "log", @@ -12002,7 +12005,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "array-bytes", "async-trait", @@ -12028,7 +12031,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "futures", "substrate-test-utils-derive", @@ -12038,7 +12041,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -12049,7 +12052,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "ansi_term", "build-helper", @@ -12157,7 +12160,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "frame-support", "polkadot-primitives", @@ -12437,7 +12440,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12448,7 +12451,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12575,7 +12578,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f447beec6eefbf452520b90cb0d199eaaf114342" +source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" dependencies = [ "clap", "frame-try-runtime", @@ -13163,7 +13166,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "beefy-primitives", "bitvec", @@ -13253,7 +13256,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "frame-support", "polkadot-primitives", @@ -13536,7 +13539,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13550,7 +13553,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "frame-support", "frame-system", @@ -13570,7 +13573,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "frame-benchmarking", "frame-support", @@ -13588,7 +13591,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#d12042f1a0a0e34ca274de9035ea35b6c016783f" +source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" dependencies = [ "Inflector", "proc-macro2", diff --git a/client/relay-chain-minimal-node/Cargo.toml b/client/relay-chain-minimal-node/Cargo.toml index de7958d5340..cbc9bff9016 100644 --- a/client/relay-chain-minimal-node/Cargo.toml +++ b/client/relay-chain-minimal-node/Cargo.toml @@ -41,6 +41,7 @@ cumulus-relay-chain-interface = { path = "../relay-chain-interface" } cumulus-relay-chain-rpc-interface = { path = "../relay-chain-rpc-interface" } cumulus-primitives-core = { path = "../../primitives/core" } +array-bytes = "4.1" lru = "0.8" tracing = "0.1.37" async-trait = "0.1.52" diff --git a/client/relay-chain-minimal-node/src/network.rs b/client/relay-chain-minimal-node/src/network.rs index a5237f5ea65..fa18418f620 100644 --- a/client/relay-chain-minimal-node/src/network.rs +++ b/client/relay-chain-minimal-node/src/network.rs @@ -20,14 +20,21 @@ use polkadot_service::{BlockT, NumberFor}; use polkadot_node_network_protocol::PeerId; use sc_network::{NetworkService, SyncState}; -use sc_network_common::sync::{Metrics, SyncStatus}; +use sc_client_api::HeaderBackend; +use sc_network_common::{ + config::{ + NonDefaultSetConfig, NonReservedPeerMode, NotificationHandshake, ProtocolId, SetConfig, + }, + protocol::role::Roles, + sync::{message::BlockAnnouncesHandshake, Metrics, SyncStatus}, +}; use sc_network_light::light_client_requests; use sc_network_sync::{block_request_handler, state_request_handler}; use sc_service::{error::Error, Configuration, NetworkStarter, SpawnTaskHandle}; use sp_consensus::BlockOrigin; use sp_runtime::Justifications; -use std::sync::Arc; +use std::{iter, sync::Arc}; use crate::BlockChainRpcClient; @@ -59,6 +66,16 @@ pub(crate) fn build_collator_network( let light_client_request_protocol_config = light_client_requests::generate_protocol_config(&protocol_id, genesis_hash, None); + let chain_sync = DummyChainSync; + let block_announce_config = chain_sync.get_block_announce_proto_config::( + protocol_id.clone(), + &None, + Roles::from(&config.role), + client.info().best_number, + client.info().best_hash, + genesis_hash, + ); + let network_params = sc_network::config::Params { role: config.role.clone(), executor: { @@ -68,12 +85,13 @@ pub(crate) fn build_collator_network( })) }, fork_id: None, - chain_sync: Box::new(DummyChainSync), + chain_sync: Box::new(chain_sync), network_config: config.network.clone(), chain: client.clone(), import_queue: Box::new(DummyImportQueue), protocol_id, metrics_registry: config.prometheus_config.as_ref().map(|config| config.registry.clone()), + block_announce_config, block_request_protocol_config, state_request_protocol_config, warp_sync_protocol_config: None, @@ -116,6 +134,54 @@ pub(crate) fn build_collator_network( /// we provide a noop implementation. struct DummyChainSync; +impl DummyChainSync { + pub fn get_block_announce_proto_config( + &self, + protocol_id: ProtocolId, + fork_id: &Option, + roles: Roles, + best_number: NumberFor, + best_hash: B::Hash, + genesis_hash: B::Hash, + ) -> NonDefaultSetConfig { + let block_announces_protocol = { + let genesis_hash = genesis_hash.as_ref(); + if let Some(ref fork_id) = fork_id { + format!( + "/{}/{}/block-announces/1", + array_bytes::bytes2hex("", genesis_hash), + fork_id + ) + } else { + format!("/{}/block-announces/1", array_bytes::bytes2hex("", genesis_hash)) + } + }; + + NonDefaultSetConfig { + notifications_protocol: block_announces_protocol.into(), + fallback_names: iter::once( + format!("/{}/block-announces/1", protocol_id.as_ref()).into(), + ) + .collect(), + max_notification_size: 1024 * 1024, + handshake: Some(NotificationHandshake::new(BlockAnnouncesHandshake::::build( + roles, + best_number, + best_hash, + genesis_hash, + ))), + // NOTE: `set_config` will be ignored by `protocol.rs` as the block announcement + // protocol is still hardcoded into the peerset. + set_config: SetConfig { + in_peers: 0, + out_peers: 0, + reserved_nodes: Vec::new(), + non_reserved_mode: NonReservedPeerMode::Deny, + }, + } + } +} + impl sc_network_common::sync::ChainSync for DummyChainSync { fn peer_info(&self, _who: &PeerId) -> Option> { None From 92956a3b89e257ccd708b97def1311b6295a994e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Oct 2022 23:36:52 +0200 Subject: [PATCH 126/148] Bump lru from 0.8.0 to 0.8.1 (#1751) Bumps [lru](https://github.com/jeromefroe/lru-rs) from 0.8.0 to 0.8.1. - [Release notes](https://github.com/jeromefroe/lru-rs/releases) - [Changelog](https://github.com/jeromefroe/lru-rs/blob/master/CHANGELOG.md) - [Commits](https://github.com/jeromefroe/lru-rs/compare/0.8.0...0.8.1) --- updated-dependencies: - dependency-name: lru dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 19577f50878..5af051e7b71 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2012,7 +2012,7 @@ dependencies = [ "cumulus-relay-chain-interface", "cumulus-relay-chain-rpc-interface", "futures", - "lru 0.8.0", + "lru 0.8.1", "polkadot-availability-distribution", "polkadot-core-primitives", "polkadot-network-bridge", @@ -4760,9 +4760,9 @@ dependencies = [ [[package]] name = "lru" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936d98d2ddd79c18641c6709e7bb09981449694e402d1a0f0f657ea8d61f4a51" +checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" dependencies = [ "hashbrown 0.12.3", ] @@ -4900,7 +4900,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce95ae042940bad7e312857b929ee3d11b8f799a80cb7b9c7ec5125516906395" dependencies = [ - "lru 0.8.0", + "lru 0.8.1", ] [[package]] @@ -7085,7 +7085,7 @@ dependencies = [ "derive_more", "fatality", "futures", - "lru 0.8.0", + "lru 0.8.1", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7107,7 +7107,7 @@ source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec dependencies = [ "fatality", "futures", - "lru 0.8.0", + "lru 0.8.1", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7233,7 +7233,7 @@ dependencies = [ "futures", "futures-timer", "indexmap", - "lru 0.8.0", + "lru 0.8.1", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -7334,7 +7334,7 @@ dependencies = [ "futures", "futures-timer", "kvdb", - "lru 0.8.0", + "lru 0.8.1", "merlin", "parity-scale-codec", "polkadot-node-jaeger", @@ -7465,7 +7465,7 @@ dependencies = [ "fatality", "futures", "kvdb", - "lru 0.8.0", + "lru 0.8.1", "parity-scale-codec", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -7719,7 +7719,7 @@ dependencies = [ "futures", "itertools", "kvdb", - "lru 0.8.0", + "lru 0.8.1", "parity-db", "parity-scale-codec", "parity-util-mem", @@ -7749,7 +7749,7 @@ dependencies = [ "async-trait", "futures", "futures-timer", - "lru 0.8.0", + "lru 0.8.1", "orchestra", "parity-util-mem", "parking_lot 0.12.1", @@ -8157,7 +8157,7 @@ dependencies = [ "kusama-runtime", "kvdb", "kvdb-rocksdb", - "lru 0.8.0", + "lru 0.8.1", "pallet-babe", "pallet-im-online", "pallet-staking", From 882a892b60e25449903052b946d25bd3a00f30eb Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Wed, 12 Oct 2022 00:36:03 +0800 Subject: [PATCH 127/148] Migrate Weights properly to v2 (#1722) * Migrate Weights properly to v2 * Add missing on_runtime_upgrade implementation * Fix benchmarks * Apply suggestions from code review Co-authored-by: Oliver Tale-Yazdi * cargo fmt Co-authored-by: Oliver Tale-Yazdi --- Cargo.lock | 1 + pallets/dmp-queue/Cargo.toml | 2 + pallets/dmp-queue/src/lib.rs | 55 ++++++-------- pallets/dmp-queue/src/migration.rs | 101 +++++++++++++++++++++++++ pallets/xcmp-queue/src/benchmarking.rs | 2 +- pallets/xcmp-queue/src/lib.rs | 33 +++++--- pallets/xcmp-queue/src/migration.rs | 76 ++++++++++--------- pallets/xcmp-queue/src/tests.rs | 28 ++----- 8 files changed, 199 insertions(+), 99 deletions(-) create mode 100644 pallets/dmp-queue/src/migration.rs diff --git a/Cargo.lock b/Cargo.lock index 5af051e7b71..91795e97bac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1752,6 +1752,7 @@ dependencies = [ "cumulus-primitives-core", "frame-support", "frame-system", + "log", "parity-scale-codec", "scale-info", "sp-core", diff --git a/pallets/dmp-queue/Cargo.toml b/pallets/dmp-queue/Cargo.toml index 5f423e84fc3..dda503be7af 100644 --- a/pallets/dmp-queue/Cargo.toml +++ b/pallets/dmp-queue/Cargo.toml @@ -6,6 +6,7 @@ edition = "2021" [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ], default-features = false } +log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate @@ -32,6 +33,7 @@ std = [ "scale-info/std", "frame-support/std", "frame-system/std", + "log/std", "sp-io/std", "sp-runtime/std", "sp-std/std", diff --git a/pallets/dmp-queue/src/lib.rs b/pallets/dmp-queue/src/lib.rs index cfcae5f3ad8..75ebe2c395f 100644 --- a/pallets/dmp-queue/src/lib.rs +++ b/pallets/dmp-queue/src/lib.rs @@ -21,6 +21,8 @@ #![cfg_attr(not(feature = "std"), no_std)] +pub mod migration; + use codec::{Decode, DecodeLimit, Encode}; use cumulus_primitives_core::{relay_chain::BlockNumber as RelayBlockNumber, DmpMessageHandler}; use frame_support::{ @@ -31,7 +33,10 @@ pub use pallet::*; use scale_info::TypeInfo; use sp_runtime::RuntimeDebug; use sp_std::{convert::TryFrom, prelude::*}; -use xcm::{latest::prelude::*, VersionedXcm, MAX_XCM_DECODE_DEPTH}; +use xcm::{ + latest::{prelude::*, Weight as XcmWeight}, + VersionedXcm, MAX_XCM_DECODE_DEPTH, +}; #[derive(Copy, Clone, Eq, PartialEq, Encode, Decode, RuntimeDebug, TypeInfo)] pub struct ConfigData { @@ -78,6 +83,7 @@ pub mod pallet { #[pallet::pallet] #[pallet::generate_store(pub(super) trait Store)] + #[pallet::storage_version(migration::STORAGE_VERSION)] #[pallet::without_storage_info] pub struct Pallet(_); @@ -121,6 +127,10 @@ pub mod pallet { #[pallet::hooks] impl Hooks> for Pallet { + fn on_runtime_upgrade() -> Weight { + migration::migrate_to_latest::() + } + fn on_idle(_now: T::BlockNumber, max_weight: Weight) -> Weight { // on_idle processes additional messages with any remaining block weight. Self::service_queue(max_weight) @@ -141,17 +151,18 @@ pub mod pallet { /// /// Events: /// - `OverweightServiced`: On success. - #[pallet::weight(weight_limit.saturating_add(Weight::from_ref_time(1_000_000)))] + #[pallet::weight(Weight::from_ref_time(weight_limit.saturating_add(1_000_000)))] pub fn service_overweight( origin: OriginFor, index: OverweightIndex, - weight_limit: Weight, + weight_limit: XcmWeight, ) -> DispatchResultWithPostInfo { T::ExecuteOverweightOrigin::ensure_origin(origin)?; let (sent_at, data) = Overweight::::get(index).ok_or(Error::::Unknown)?; - let weight_used = Self::try_service_message(weight_limit, sent_at, &data[..]) - .map_err(|_| Error::::OverLimit)?; + let weight_used = + Self::try_service_message(Weight::from_ref_time(weight_limit), sent_at, &data[..]) + .map_err(|_| Error::::OverLimit)?; Overweight::::remove(index); Self::deposit_event(Event::OverweightServiced { overweight_index: index, weight_used }); Ok(Some(weight_used.saturating_add(Weight::from_ref_time(1_000_000))).into()) @@ -744,49 +755,31 @@ mod tests { assert_eq!(overweights(), vec![0]); assert_noop!( - DmpQueue::service_overweight( - RuntimeOrigin::signed(1), - 0, - Weight::from_ref_time(20000) - ), + DmpQueue::service_overweight(RuntimeOrigin::signed(1), 0, 20000), BadOrigin ); assert_noop!( - DmpQueue::service_overweight( - RuntimeOrigin::root(), - 1, - Weight::from_ref_time(20000) - ), + DmpQueue::service_overweight(RuntimeOrigin::root(), 1, 20000), Error::::Unknown ); assert_noop!( - DmpQueue::service_overweight(RuntimeOrigin::root(), 0, Weight::from_ref_time(9999)), + DmpQueue::service_overweight(RuntimeOrigin::root(), 0, 9999), Error::::OverLimit ); assert_eq!(take_trace(), vec![msg_limit_reached(10000)]); - let base_weight = - super::Call::::service_overweight { index: 0, weight_limit: Weight::zero() } - .get_dispatch_info() - .weight; + let base_weight = super::Call::::service_overweight { index: 0, weight_limit: 0 } + .get_dispatch_info() + .weight; use frame_support::dispatch::GetDispatchInfo; - let info = DmpQueue::service_overweight( - RuntimeOrigin::root(), - 0, - Weight::from_ref_time(20000), - ) - .unwrap(); + let info = DmpQueue::service_overweight(RuntimeOrigin::root(), 0, 20000).unwrap(); let actual_weight = info.actual_weight.unwrap(); assert_eq!(actual_weight, base_weight + Weight::from_ref_time(10000)); assert_eq!(take_trace(), vec![msg_complete(10000)]); assert!(overweights().is_empty()); assert_noop!( - DmpQueue::service_overweight( - RuntimeOrigin::root(), - 0, - Weight::from_ref_time(20000) - ), + DmpQueue::service_overweight(RuntimeOrigin::root(), 0, 20000), Error::::Unknown ); }); diff --git a/pallets/dmp-queue/src/migration.rs b/pallets/dmp-queue/src/migration.rs new file mode 100644 index 00000000000..cfd8a1f78e3 --- /dev/null +++ b/pallets/dmp-queue/src/migration.rs @@ -0,0 +1,101 @@ +// Copyright 2022 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot 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 Polkadot. If not, see . + +//! A module that is responsible for migration of storage. + +use crate::{Config, Pallet, Store}; +use frame_support::{ + pallet_prelude::*, + traits::StorageVersion, + weights::{constants::WEIGHT_PER_MILLIS, Weight}, +}; +use xcm::latest::Weight as XcmWeight; + +/// The current storage version. +pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); + +/// Migrates the pallet storage to the most recent version, checking and setting the +/// `StorageVersion`. +pub fn migrate_to_latest() -> Weight { + let mut weight = T::DbWeight::get().reads(1); + + if StorageVersion::get::>() == 0 { + weight += migrate_to_v1::(); + StorageVersion::new(1).put::>(); + } + + weight +} + +mod v0 { + use super::*; + use codec::{Decode, Encode}; + + #[derive(Decode, Encode, Debug)] + pub struct ConfigData { + pub max_individual: XcmWeight, + } + + impl Default for ConfigData { + fn default() -> Self { + ConfigData { max_individual: 10u64 * WEIGHT_PER_MILLIS.ref_time() } + } + } +} + +/// Migrates `QueueConfigData` from v1 (using only reference time weights) to v2 (with +/// 2D weights). +/// +/// NOTE: Only use this function if you know what you're doing. Default to using +/// `migrate_to_latest`. +pub fn migrate_to_v1() -> Weight { + let translate = |pre: v0::ConfigData| -> super::ConfigData { + super::ConfigData { max_individual: Weight::from_ref_time(pre.max_individual) } + }; + + if let Err(_) = as Store>::Configuration::translate(|pre| pre.map(translate)) { + log::error!( + target: "dmp_queue", + "unexpected error when performing translation of the QueueConfig type during storage upgrade to v2" + ); + } + + T::DbWeight::get().reads_writes(1, 1) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::tests::{new_test_ext, Test}; + + #[test] + fn test_migration_to_v1() { + let v0 = v0::ConfigData { max_individual: 30_000_000_000 }; + + new_test_ext().execute_with(|| { + frame_support::storage::unhashed::put_raw( + &crate::Configuration::::hashed_key(), + &v0.encode(), + ); + + migrate_to_v1::(); + + let v1 = crate::Configuration::::get(); + + assert_eq!(v0.max_individual, v1.max_individual.ref_time()); + }); + } +} diff --git a/pallets/xcmp-queue/src/benchmarking.rs b/pallets/xcmp-queue/src/benchmarking.rs index 5ac78bee763..5d34d499dbe 100644 --- a/pallets/xcmp-queue/src/benchmarking.rs +++ b/pallets/xcmp-queue/src/benchmarking.rs @@ -22,7 +22,7 @@ use frame_system::RawOrigin; benchmarks! { set_config_with_u32 {}: update_resume_threshold(RawOrigin::Root, 100) - set_config_with_weight {}: update_weight_restrict_decay(RawOrigin::Root, Weight::from_ref_time(3_000_000)) + set_config_with_weight {}: update_weight_restrict_decay(RawOrigin::Root, 3_000_000) } impl_benchmark_test_suite!(Pallet, crate::mock::new_test_ext(), crate::mock::Test); diff --git a/pallets/xcmp-queue/src/lib.rs b/pallets/xcmp-queue/src/lib.rs index 22d1d4c1bb6..6745e192212 100644 --- a/pallets/xcmp-queue/src/lib.rs +++ b/pallets/xcmp-queue/src/lib.rs @@ -54,7 +54,10 @@ use rand_chacha::{ use scale_info::TypeInfo; use sp_runtime::{traits::Hash, RuntimeDebug}; use sp_std::{convert::TryFrom, prelude::*}; -use xcm::{latest::prelude::*, VersionedXcm, WrapVersion, MAX_XCM_DECODE_DEPTH}; +use xcm::{ + latest::{prelude::*, Weight as XcmWeight}, + VersionedXcm, WrapVersion, MAX_XCM_DECODE_DEPTH, +}; use xcm_executor::traits::ConvertOrigin; pub use pallet::*; @@ -130,11 +133,11 @@ pub mod pallet { /// /// Events: /// - `OverweightServiced`: On success. - #[pallet::weight((weight_limit.saturating_add(Weight::from_ref_time(1_000_000)), DispatchClass::Operational,))] + #[pallet::weight((Weight::from_ref_time(weight_limit.saturating_add(1_000_000)), DispatchClass::Operational,))] pub fn service_overweight( origin: OriginFor, index: OverweightIndex, - weight_limit: Weight, + weight_limit: XcmWeight, ) -> DispatchResultWithPostInfo { T::ExecuteOverweightOrigin::ensure_origin(origin)?; @@ -145,8 +148,9 @@ pub mod pallet { &mut data.as_slice(), ) .map_err(|_| Error::::BadXcm)?; - let used = Self::handle_xcm_message(sender, sent_at, xcm, weight_limit) - .map_err(|_| Error::::WeightOverLimit)?; + let used = + Self::handle_xcm_message(sender, sent_at, xcm, Weight::from_ref_time(weight_limit)) + .map_err(|_| Error::::WeightOverLimit)?; Overweight::::remove(index); Self::deposit_event(Event::OverweightServiced { index, used }); Ok(Some(used.saturating_add(Weight::from_ref_time(1_000_000))).into()) @@ -222,9 +226,9 @@ pub mod pallet { /// - `origin`: Must pass `Root`. /// - `new`: Desired value for `QueueConfigData.threshold_weight` #[pallet::weight((T::WeightInfo::set_config_with_weight(), DispatchClass::Operational,))] - pub fn update_threshold_weight(origin: OriginFor, new: Weight) -> DispatchResult { + pub fn update_threshold_weight(origin: OriginFor, new: XcmWeight) -> DispatchResult { ensure_root(origin)?; - QueueConfig::::mutate(|data| data.threshold_weight = new); + QueueConfig::::mutate(|data| data.threshold_weight = Weight::from_ref_time(new)); Ok(()) } @@ -235,9 +239,14 @@ pub mod pallet { /// - `origin`: Must pass `Root`. /// - `new`: Desired value for `QueueConfigData.weight_restrict_decay`. #[pallet::weight((T::WeightInfo::set_config_with_weight(), DispatchClass::Operational,))] - pub fn update_weight_restrict_decay(origin: OriginFor, new: Weight) -> DispatchResult { + pub fn update_weight_restrict_decay( + origin: OriginFor, + new: XcmWeight, + ) -> DispatchResult { ensure_root(origin)?; - QueueConfig::::mutate(|data| data.weight_restrict_decay = new); + QueueConfig::::mutate(|data| { + data.weight_restrict_decay = Weight::from_ref_time(new) + }); Ok(()) } @@ -250,10 +259,12 @@ pub mod pallet { #[pallet::weight((T::WeightInfo::set_config_with_weight(), DispatchClass::Operational,))] pub fn update_xcmp_max_individual_weight( origin: OriginFor, - new: Weight, + new: XcmWeight, ) -> DispatchResult { ensure_root(origin)?; - QueueConfig::::mutate(|data| data.xcmp_max_individual_weight = new); + QueueConfig::::mutate(|data| { + data.xcmp_max_individual_weight = Weight::from_ref_time(new) + }); Ok(()) } diff --git a/pallets/xcmp-queue/src/migration.rs b/pallets/xcmp-queue/src/migration.rs index bedd5ffd6ea..e44a053b761 100644 --- a/pallets/xcmp-queue/src/migration.rs +++ b/pallets/xcmp-queue/src/migration.rs @@ -17,25 +17,30 @@ //! A module that is responsible for migration of storage. use crate::{Config, Pallet, Store}; -use frame_support::{pallet_prelude::*, traits::StorageVersion, weights::Weight}; +use frame_support::{ + pallet_prelude::*, + traits::StorageVersion, + weights::{constants::WEIGHT_PER_MILLIS, Weight}, +}; +use xcm::latest::Weight as XcmWeight; /// The current storage version. -pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); +pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(2); /// Migrates the pallet storage to the most recent version, checking and setting the /// `StorageVersion`. pub fn migrate_to_latest() -> Weight { - let mut weight = Weight::zero(); + let mut weight = T::DbWeight::get().reads(1); - if StorageVersion::get::>() == 0 { - weight += migrate_to_v1::(); - StorageVersion::new(1).put::>(); + if StorageVersion::get::>() == 1 { + weight += migrate_to_v2::(); + StorageVersion::new(2).put::>(); } weight } -mod v0 { +mod v1 { use super::*; use codec::{Decode, Encode}; @@ -44,8 +49,9 @@ mod v0 { pub suspend_threshold: u32, pub drop_threshold: u32, pub resume_threshold: u32, - pub threshold_weight: Weight, - pub weight_restrict_decay: Weight, + pub threshold_weight: XcmWeight, + pub weight_restrict_decay: XcmWeight, + pub xcmp_max_individual_weight: XcmWeight, } impl Default for QueueConfigData { @@ -54,37 +60,35 @@ mod v0 { suspend_threshold: 2, drop_threshold: 5, resume_threshold: 1, - threshold_weight: Weight::from_ref_time(100_000), - weight_restrict_decay: Weight::from_ref_time(2), + threshold_weight: 100_000, + weight_restrict_decay: 2, + xcmp_max_individual_weight: 20u64 * WEIGHT_PER_MILLIS.ref_time(), } } } } -/// Migrates `QueueConfigData` from v0 (without the `xcmp_max_individual_weight` field) to v1 (with -/// max individual weight). -/// Uses the `Default` implementation of `QueueConfigData` to choose a value for -/// `xcmp_max_individual_weight`. +/// Migrates `QueueConfigData` from v1 (using only reference time weights) to v2 (with +/// 2D weights). /// /// NOTE: Only use this function if you know what you're doing. Default to using /// `migrate_to_latest`. -pub fn migrate_to_v1() -> Weight { - let translate = |pre: v0::QueueConfigData| -> super::QueueConfigData { +pub fn migrate_to_v2() -> Weight { + let translate = |pre: v1::QueueConfigData| -> super::QueueConfigData { super::QueueConfigData { suspend_threshold: pre.suspend_threshold, drop_threshold: pre.drop_threshold, resume_threshold: pre.resume_threshold, - threshold_weight: pre.threshold_weight, - weight_restrict_decay: pre.weight_restrict_decay, - xcmp_max_individual_weight: super::QueueConfigData::default() - .xcmp_max_individual_weight, + threshold_weight: Weight::from_ref_time(pre.threshold_weight), + weight_restrict_decay: Weight::from_ref_time(pre.weight_restrict_decay), + xcmp_max_individual_weight: Weight::from_ref_time(pre.xcmp_max_individual_weight), } }; if let Err(_) = as Store>::QueueConfig::translate(|pre| pre.map(translate)) { log::error!( target: super::LOG_TARGET, - "unexpected error when performing translation of the QueueConfig type during storage upgrade to v1" + "unexpected error when performing translation of the QueueConfig type during storage upgrade to v2" ); } @@ -97,32 +101,32 @@ mod tests { use crate::mock::{new_test_ext, Test}; #[test] - fn test_migration_to_v1() { - let v0 = v0::QueueConfigData { + fn test_migration_to_v2() { + let v1 = v1::QueueConfigData { suspend_threshold: 5, drop_threshold: 12, resume_threshold: 3, - threshold_weight: Weight::from_ref_time(333_333), - weight_restrict_decay: Weight::from_ref_time(1), + threshold_weight: 333_333, + weight_restrict_decay: 1, + xcmp_max_individual_weight: 10_000_000_000, }; new_test_ext().execute_with(|| { - // Put the v0 version in the state frame_support::storage::unhashed::put_raw( &crate::QueueConfig::::hashed_key(), - &v0.encode(), + &v1.encode(), ); - migrate_to_v1::(); + migrate_to_v2::(); - let v1 = crate::QueueConfig::::get(); + let v2 = crate::QueueConfig::::get(); - assert_eq!(v0.suspend_threshold, v1.suspend_threshold); - assert_eq!(v0.drop_threshold, v1.drop_threshold); - assert_eq!(v0.resume_threshold, v1.resume_threshold); - assert_eq!(v0.threshold_weight, v1.threshold_weight); - assert_eq!(v0.weight_restrict_decay, v1.weight_restrict_decay); - assert_eq!(v1.xcmp_max_individual_weight, Weight::from_ref_time(20_000_000_000)); + assert_eq!(v1.suspend_threshold, v2.suspend_threshold); + assert_eq!(v1.drop_threshold, v2.drop_threshold); + assert_eq!(v1.resume_threshold, v2.resume_threshold); + assert_eq!(v1.threshold_weight, v2.threshold_weight.ref_time()); + assert_eq!(v1.weight_restrict_decay, v2.weight_restrict_decay.ref_time()); + assert_eq!(v1.xcmp_max_individual_weight, v2.xcmp_max_individual_weight.ref_time()); }); } } diff --git a/pallets/xcmp-queue/src/tests.rs b/pallets/xcmp-queue/src/tests.rs index 1b6303ddaf1..1586e313b5a 100644 --- a/pallets/xcmp-queue/src/tests.rs +++ b/pallets/xcmp-queue/src/tests.rs @@ -96,7 +96,7 @@ fn handle_invalid_data() { fn service_overweight_unknown() { new_test_ext().execute_with(|| { assert_noop!( - XcmpQueue::service_overweight(RuntimeOrigin::root(), 0, Weight::from_ref_time(1000)), + XcmpQueue::service_overweight(RuntimeOrigin::root(), 0, 1000), Error::::BadOverweightIndex, ); }); @@ -109,7 +109,7 @@ fn service_overweight_bad_xcm_format() { Overweight::::insert(0, (ParaId::from(1000), 0, bad_xcm)); assert_noop!( - XcmpQueue::service_overweight(RuntimeOrigin::root(), 0, Weight::from_ref_time(1000)), + XcmpQueue::service_overweight(RuntimeOrigin::root(), 0, 1000), Error::::BadXcm ); }); @@ -187,15 +187,9 @@ fn update_threshold_weight_works() { new_test_ext().execute_with(|| { let data: QueueConfigData = >::get(); assert_eq!(data.threshold_weight, Weight::from_ref_time(100_000)); - assert_ok!(XcmpQueue::update_threshold_weight( - RuntimeOrigin::root(), - Weight::from_ref_time(10_000) - )); + assert_ok!(XcmpQueue::update_threshold_weight(RuntimeOrigin::root(), 10_000)); assert_noop!( - XcmpQueue::update_threshold_weight( - RuntimeOrigin::signed(5), - Weight::from_ref_time(10_000_000) - ), + XcmpQueue::update_threshold_weight(RuntimeOrigin::signed(5), 10_000_000), BadOrigin ); let data: QueueConfigData = >::get(); @@ -209,15 +203,9 @@ fn update_weight_restrict_decay_works() { new_test_ext().execute_with(|| { let data: QueueConfigData = >::get(); assert_eq!(data.weight_restrict_decay, Weight::from_ref_time(2)); - assert_ok!(XcmpQueue::update_weight_restrict_decay( - RuntimeOrigin::root(), - Weight::from_ref_time(5) - )); + assert_ok!(XcmpQueue::update_weight_restrict_decay(RuntimeOrigin::root(), 5)); assert_noop!( - XcmpQueue::update_weight_restrict_decay( - RuntimeOrigin::signed(6), - Weight::from_ref_time(4) - ), + XcmpQueue::update_weight_restrict_decay(RuntimeOrigin::signed(6), 4), BadOrigin ); let data: QueueConfigData = >::get(); @@ -233,12 +221,12 @@ fn update_xcmp_max_individual_weight() { assert_eq!(data.xcmp_max_individual_weight, 20u64 * WEIGHT_PER_MILLIS); assert_ok!(XcmpQueue::update_xcmp_max_individual_weight( RuntimeOrigin::root(), - 30u64 * WEIGHT_PER_MILLIS + 30u64 * WEIGHT_PER_MILLIS.ref_time() )); assert_noop!( XcmpQueue::update_xcmp_max_individual_weight( RuntimeOrigin::signed(3), - 10u64 * WEIGHT_PER_MILLIS + 10u64 * WEIGHT_PER_MILLIS.ref_time() ), BadOrigin ); From e695dd905d62fec2e2cb9ba333f56310920cf685 Mon Sep 17 00:00:00 2001 From: Aaro Altonen <48052676+altonen@users.noreply.github.com> Date: Thu, 13 Oct 2022 13:02:39 +0300 Subject: [PATCH 128/148] Companion for paritytech/substrate#12480 (#1758) * Companion for paritytech/substrate#12480 * update lockfile for {"substrate", "polkadot"} Co-authored-by: parity-processbot <> --- Cargo.lock | 582 ++++++++++-------- .../relay-chain-minimal-node/src/network.rs | 2 +- 2 files changed, 332 insertions(+), 252 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 91795e97bac..0462b5b6e67 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -469,7 +469,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "array-bytes", "async-trait", @@ -506,7 +506,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -526,7 +526,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "beefy-primitives", "sp-api", @@ -536,7 +536,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "parity-scale-codec", "scale-info", @@ -2409,6 +2409,12 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "downcast" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" + [[package]] name = "downcast-rs" version = "1.2.0" @@ -2791,6 +2797,15 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +dependencies = [ + "num-traits", +] + [[package]] name = "fnv" version = "1.0.7" @@ -2800,7 +2815,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "parity-scale-codec", ] @@ -2814,10 +2829,16 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fragile" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85dcb89d2b10c5f6133de2efd8c11959ce9dbb46a2f7a4cab208c4eeda6ce1ab" + [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support", "frame-system", @@ -2840,7 +2861,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "Inflector", "array-bytes", @@ -2891,7 +2912,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2902,7 +2923,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2918,7 +2939,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support", "frame-system", @@ -2947,7 +2968,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "bitflags", "frame-metadata", @@ -2979,7 +3000,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "Inflector", "cfg-expr", @@ -2993,7 +3014,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -3005,7 +3026,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "proc-macro2", "quote", @@ -3015,7 +3036,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support", "log", @@ -3033,7 +3054,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -3048,7 +3069,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "parity-scale-codec", "sp-api", @@ -3057,7 +3078,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support", "parity-scale-codec", @@ -3924,7 +3945,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "beefy-primitives", "bitvec", @@ -4022,7 +4043,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "frame-support", "polkadot-primitives", @@ -4961,6 +4982,33 @@ dependencies = [ "windows-sys 0.36.1", ] +[[package]] +name = "mockall" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2be9a9090bc1cac2930688fa9478092a64c6a92ddc6ae0692d46b37d9cab709" +dependencies = [ + "cfg-if 1.0.0", + "downcast", + "fragile", + "lazy_static", + "mockall_derive", + "predicates", + "predicates-tree", +] + +[[package]] +name = "mockall_derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86d702a0530a0141cf4ed147cf5ec7be6f2c187d4e37fcbefc39cf34116bfe8f" +dependencies = [ + "cfg-if 1.0.0", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "multiaddr" version = "0.14.0" @@ -5200,6 +5248,12 @@ dependencies = [ "version_check", ] +[[package]] +name = "normalize-line-endings" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" + [[package]] name = "num-bigint" version = "0.2.6" @@ -5405,7 +5459,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "array-bytes", "frame-benchmarking", @@ -5426,7 +5480,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support", "frame-system", @@ -5443,7 +5497,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -5457,7 +5511,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support", "frame-system", @@ -5473,7 +5527,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support", "frame-system", @@ -5489,7 +5543,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support", "frame-system", @@ -5504,7 +5558,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -5528,7 +5582,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5548,7 +5602,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -5563,7 +5617,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "beefy-primitives", "frame-support", @@ -5579,7 +5633,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "array-bytes", "beefy-merkle-tree", @@ -5602,7 +5656,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -5620,7 +5674,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -5664,7 +5718,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -5681,7 +5735,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "bitflags", "frame-benchmarking", @@ -5710,7 +5764,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "bitflags", "parity-scale-codec", @@ -5722,7 +5776,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "proc-macro2", "quote", @@ -5732,7 +5786,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "assert_matches", "frame-benchmarking", @@ -5749,7 +5803,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -5767,7 +5821,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5791,7 +5845,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5804,7 +5858,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -5822,7 +5876,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5843,7 +5897,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -5858,7 +5912,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -5881,7 +5935,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5897,7 +5951,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -5917,7 +5971,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -5934,7 +5988,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -5951,7 +6005,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5969,7 +6023,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5984,7 +6038,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -6000,7 +6054,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support", "frame-system", @@ -6017,7 +6071,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6037,7 +6091,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "parity-scale-codec", "sp-api", @@ -6047,7 +6101,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support", "frame-system", @@ -6064,7 +6118,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6087,7 +6141,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -6104,7 +6158,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -6119,7 +6173,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support", "frame-system", @@ -6133,7 +6187,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -6151,7 +6205,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -6166,7 +6220,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "assert_matches", "frame-benchmarking", @@ -6184,7 +6238,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -6200,7 +6254,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support", "frame-system", @@ -6221,7 +6275,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -6237,7 +6291,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support", "frame-system", @@ -6251,7 +6305,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6274,7 +6328,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6285,7 +6339,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "log", "sp-arithmetic", @@ -6294,7 +6348,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support", "frame-system", @@ -6323,7 +6377,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -6341,7 +6395,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -6360,7 +6414,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-support", "frame-system", @@ -6376,7 +6430,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6391,7 +6445,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6402,7 +6456,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -6419,7 +6473,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -6434,7 +6488,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -6450,7 +6504,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -6465,7 +6519,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-benchmarking", "frame-support", @@ -6480,7 +6534,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "frame-support", "frame-system", @@ -6498,7 +6552,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "frame-benchmarking", "frame-support", @@ -7052,7 +7106,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7067,7 +7121,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7081,7 +7135,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "derive_more", "fatality", @@ -7104,7 +7158,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "fatality", "futures", @@ -7125,7 +7179,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7151,7 +7205,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7192,7 +7246,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "always-assert", "bitvec", @@ -7214,7 +7268,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7227,7 +7281,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "derive_more", "fatality", @@ -7252,7 +7306,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7266,7 +7320,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "futures", "futures-timer", @@ -7286,7 +7340,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "always-assert", "async-trait", @@ -7310,7 +7364,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "futures", "parity-scale-codec", @@ -7328,7 +7382,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "bitvec", "derive_more", @@ -7357,7 +7411,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "bitvec", "futures", @@ -7377,7 +7431,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "bitvec", "fatality", @@ -7396,7 +7450,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7411,7 +7465,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "async-trait", "futures", @@ -7429,7 +7483,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7444,7 +7498,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "futures", "futures-timer", @@ -7461,7 +7515,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "fatality", "futures", @@ -7480,7 +7534,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "async-trait", "futures", @@ -7497,7 +7551,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "bitvec", "fatality", @@ -7515,7 +7569,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "always-assert", "assert_matches", @@ -7547,7 +7601,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "futures", "polkadot-node-primitives", @@ -7563,7 +7617,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "futures", "memory-lru", @@ -7579,7 +7633,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "async-std", "lazy_static", @@ -7597,7 +7651,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "bs58", "futures", @@ -7616,7 +7670,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "async-trait", "derive_more", @@ -7639,7 +7693,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "bounded-vec", "futures", @@ -7661,7 +7715,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7671,7 +7725,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "async-trait", "futures", @@ -7689,7 +7743,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "async-trait", "derive_more", @@ -7712,7 +7766,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "async-trait", "derive_more", @@ -7745,7 +7799,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "async-trait", "futures", @@ -7768,7 +7822,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "derive_more", "frame-support", @@ -7866,7 +7920,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7881,7 +7935,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "bitvec", "frame-system", @@ -7911,7 +7965,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7943,7 +7997,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "beefy-primitives", "bitvec", @@ -8032,7 +8086,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "beefy-primitives", "bitvec", @@ -8079,7 +8133,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "frame-support", "polkadot-primitives", @@ -8091,7 +8145,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "bs58", "parity-scale-codec", @@ -8103,7 +8157,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "bitflags", "bitvec", @@ -8146,7 +8200,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "async-trait", "beefy-gadget", @@ -8251,7 +8305,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8272,7 +8326,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8282,7 +8336,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8307,7 +8361,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "beefy-primitives", "bitvec", @@ -8368,7 +8422,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "frame-benchmarking", "frame-system", @@ -8477,8 +8531,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5aab5be6e4732b473071984b3164dbbfb7a3674d30ea5ff44410b6bcd960c3c" dependencies = [ "difflib", + "float-cmp", "itertools", + "normalize-line-endings", "predicates-core", + "regex", ] [[package]] @@ -8999,7 +9056,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9118,7 +9175,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9202,7 +9259,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "frame-support", "polkadot-primitives", @@ -9372,7 +9429,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "log", "sp-core", @@ -9383,7 +9440,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "async-trait", "futures", @@ -9410,7 +9467,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "futures", "futures-timer", @@ -9433,7 +9490,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9449,7 +9506,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9466,7 +9523,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9477,7 +9534,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "array-bytes", "chrono", @@ -9517,7 +9574,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "fnv", "futures", @@ -9545,7 +9602,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "hash-db", "kvdb", @@ -9570,7 +9627,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "async-trait", "futures", @@ -9594,7 +9651,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "async-trait", "futures", @@ -9623,7 +9680,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "async-trait", "fork-tree", @@ -9665,7 +9722,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "futures", "jsonrpsee", @@ -9687,7 +9744,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9700,7 +9757,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "async-trait", "futures", @@ -9724,7 +9781,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9751,7 +9808,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "environmental", "parity-scale-codec", @@ -9767,7 +9824,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "log", "parity-scale-codec", @@ -9782,7 +9839,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9802,7 +9859,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "ahash", "array-bytes", @@ -9843,7 +9900,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "finality-grandpa", "futures", @@ -9864,7 +9921,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "ansi_term", "futures", @@ -9881,7 +9938,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "array-bytes", "async-trait", @@ -9896,7 +9953,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "array-bytes", "async-trait", @@ -9943,7 +10000,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "cid", "futures", @@ -9963,7 +10020,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "async-trait", "bitflags", @@ -9989,7 +10046,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "ahash", "futures", @@ -10007,7 +10064,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "array-bytes", "futures", @@ -10028,7 +10085,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "array-bytes", "fork-tree", @@ -10036,6 +10093,7 @@ dependencies = [ "libp2p", "log", "lru 0.7.7", + "mockall", "parity-scale-codec", "prost 0.11.0", "prost-build 0.11.1", @@ -10056,7 +10114,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "array-bytes", "futures", @@ -10075,7 +10133,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "array-bytes", "bytes", @@ -10105,7 +10163,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "futures", "libp2p", @@ -10118,7 +10176,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10127,7 +10185,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "futures", "hash-db", @@ -10157,7 +10215,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "futures", "jsonrpsee", @@ -10180,7 +10238,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "futures", "jsonrpsee", @@ -10190,10 +10248,29 @@ dependencies = [ "tokio", ] +[[package]] +name = "sc-rpc-spec-v2" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +dependencies = [ + "futures", + "hex", + "jsonrpsee", + "parity-scale-codec", + "sc-chain-spec", + "sc-transaction-pool-api", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-runtime", + "thiserror", +] + [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "async-trait", "directories", @@ -10225,6 +10302,7 @@ dependencies = [ "sc-offchain", "sc-rpc", "sc-rpc-server", + "sc-rpc-spec-v2", "sc-sysinfo", "sc-telemetry", "sc-tracing", @@ -10263,7 +10341,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "log", "parity-scale-codec", @@ -10277,7 +10355,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10296,7 +10374,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "futures", "libc", @@ -10315,7 +10393,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "chrono", "futures", @@ -10333,7 +10411,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "ansi_term", "atty", @@ -10364,7 +10442,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10375,8 +10453,9 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ + "async-trait", "futures", "futures-timer", "linked-hash-map", @@ -10401,8 +10480,9 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ + "async-trait", "futures", "log", "serde", @@ -10414,7 +10494,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "futures", "futures-timer", @@ -10844,7 +10924,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "enumn", "parity-scale-codec", @@ -10920,7 +11000,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "hash-db", "log", @@ -10938,7 +11018,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "blake2", "proc-macro-crate", @@ -10950,7 +11030,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "parity-scale-codec", "scale-info", @@ -10963,7 +11043,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "integer-sqrt", "num-traits", @@ -10978,7 +11058,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "parity-scale-codec", "scale-info", @@ -10991,7 +11071,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "async-trait", "parity-scale-codec", @@ -11003,7 +11083,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "parity-scale-codec", "sp-api", @@ -11015,7 +11095,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "futures", "log", @@ -11033,7 +11113,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "async-trait", "futures", @@ -11052,7 +11132,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "async-trait", "parity-scale-codec", @@ -11070,7 +11150,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "async-trait", "merlin", @@ -11093,7 +11173,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "parity-scale-codec", "scale-info", @@ -11107,7 +11187,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "parity-scale-codec", "scale-info", @@ -11120,7 +11200,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "array-bytes", "base58", @@ -11166,7 +11246,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "blake2", "byteorder", @@ -11180,7 +11260,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "proc-macro2", "quote", @@ -11191,7 +11271,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11200,7 +11280,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "proc-macro2", "quote", @@ -11210,7 +11290,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "environmental", "parity-scale-codec", @@ -11221,7 +11301,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "finality-grandpa", "log", @@ -11239,7 +11319,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11253,7 +11333,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "bytes", "futures", @@ -11279,7 +11359,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "lazy_static", "sp-core", @@ -11290,7 +11370,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "async-trait", "futures", @@ -11307,7 +11387,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "thiserror", "zstd", @@ -11316,7 +11396,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "log", "parity-scale-codec", @@ -11332,7 +11412,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "parity-scale-codec", "scale-info", @@ -11346,7 +11426,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "sp-api", "sp-core", @@ -11356,7 +11436,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "backtrace", "lazy_static", @@ -11366,7 +11446,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "rustc-hash", "serde", @@ -11376,7 +11456,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "either", "hash256-std-hasher", @@ -11399,7 +11479,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11417,7 +11497,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "Inflector", "proc-macro-crate", @@ -11429,7 +11509,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "log", "parity-scale-codec", @@ -11443,7 +11523,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "serde", "serde_json", @@ -11452,7 +11532,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "parity-scale-codec", "scale-info", @@ -11466,7 +11546,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "parity-scale-codec", "scale-info", @@ -11477,7 +11557,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "hash-db", "log", @@ -11499,12 +11579,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11517,7 +11597,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "log", "sp-core", @@ -11530,7 +11610,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "async-trait", "futures-timer", @@ -11546,7 +11626,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "parity-scale-codec", "sp-std", @@ -11558,7 +11638,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "sp-api", "sp-runtime", @@ -11567,7 +11647,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "async-trait", "log", @@ -11583,7 +11663,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "ahash", "hash-db", @@ -11606,7 +11686,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11623,7 +11703,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11634,7 +11714,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "impl-trait-for-tuples", "log", @@ -11647,7 +11727,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11943,7 +12023,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "platforms", ] @@ -11951,7 +12031,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11972,7 +12052,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "futures-util", "hyper", @@ -11985,7 +12065,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "jsonrpsee", "log", @@ -12006,7 +12086,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "array-bytes", "async-trait", @@ -12032,7 +12112,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "futures", "substrate-test-utils-derive", @@ -12042,7 +12122,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -12053,7 +12133,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "ansi_term", "build-helper", @@ -12161,7 +12241,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "frame-support", "polkadot-primitives", @@ -12441,7 +12521,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12452,7 +12532,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12579,7 +12659,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#0c1ccdaa53556a106aa69c23f19527e435970237" +source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" dependencies = [ "clap", "frame-try-runtime", @@ -13167,7 +13247,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "beefy-primitives", "bitvec", @@ -13257,7 +13337,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "frame-support", "polkadot-primitives", @@ -13540,7 +13620,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13554,7 +13634,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "frame-support", "frame-system", @@ -13574,7 +13654,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "frame-benchmarking", "frame-support", @@ -13592,7 +13672,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#f479d1ead57ec3e2963163c4c6ed51fb507f6759" +source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" dependencies = [ "Inflector", "proc-macro2", diff --git a/client/relay-chain-minimal-node/src/network.rs b/client/relay-chain-minimal-node/src/network.rs index fa18418f620..b765b9123cd 100644 --- a/client/relay-chain-minimal-node/src/network.rs +++ b/client/relay-chain-minimal-node/src/network.rs @@ -255,7 +255,7 @@ impl sc_network_common::sync::ChainSync for DummyChainSync { fn block_requests( &mut self, - ) -> Box)> + '_> + ) -> Box)> + '_> { Box::new(std::iter::empty()) } From 25811e427d51190178e7c1535ff64aa8a734445b Mon Sep 17 00:00:00 2001 From: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com> Date: Fri, 14 Oct 2022 13:01:29 +0200 Subject: [PATCH 129/148] BlockId removal refactor: Backend::state_at (#1760) * BlockId removal refactor: Backend::state_at * corrected * update lockfile for {"substrate", "polkadot"} Co-authored-by: parity-processbot <> --- Cargo.lock | 504 +++++++++--------- .../src/lib.rs | 6 +- 2 files changed, 254 insertions(+), 256 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0462b5b6e67..845bf9b93b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -469,7 +469,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "array-bytes", "async-trait", @@ -506,7 +506,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -526,7 +526,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "beefy-primitives", "sp-api", @@ -536,7 +536,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "parity-scale-codec", "scale-info", @@ -2815,7 +2815,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "parity-scale-codec", ] @@ -2838,7 +2838,7 @@ checksum = "85dcb89d2b10c5f6133de2efd8c11959ce9dbb46a2f7a4cab208c4eeda6ce1ab" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support", "frame-system", @@ -2861,7 +2861,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "Inflector", "array-bytes", @@ -2912,7 +2912,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2923,7 +2923,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2939,7 +2939,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support", "frame-system", @@ -2968,7 +2968,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "bitflags", "frame-metadata", @@ -3000,7 +3000,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "Inflector", "cfg-expr", @@ -3014,7 +3014,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -3026,7 +3026,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "proc-macro2", "quote", @@ -3036,7 +3036,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support", "log", @@ -3054,7 +3054,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -3069,7 +3069,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "parity-scale-codec", "sp-api", @@ -3078,7 +3078,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support", "parity-scale-codec", @@ -3945,7 +3945,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "beefy-primitives", "bitvec", @@ -4043,7 +4043,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "frame-support", "polkadot-primitives", @@ -5459,7 +5459,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "array-bytes", "frame-benchmarking", @@ -5480,7 +5480,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support", "frame-system", @@ -5497,7 +5497,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -5511,7 +5511,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support", "frame-system", @@ -5527,7 +5527,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support", "frame-system", @@ -5543,7 +5543,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support", "frame-system", @@ -5558,7 +5558,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -5582,7 +5582,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5602,7 +5602,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -5617,7 +5617,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "beefy-primitives", "frame-support", @@ -5633,7 +5633,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "array-bytes", "beefy-merkle-tree", @@ -5656,7 +5656,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -5674,7 +5674,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -5718,7 +5718,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -5735,7 +5735,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "bitflags", "frame-benchmarking", @@ -5764,7 +5764,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "bitflags", "parity-scale-codec", @@ -5776,7 +5776,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "proc-macro2", "quote", @@ -5786,7 +5786,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "assert_matches", "frame-benchmarking", @@ -5803,7 +5803,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -5821,7 +5821,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5845,7 +5845,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5858,7 +5858,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -5876,7 +5876,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5897,7 +5897,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -5912,7 +5912,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -5935,7 +5935,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5951,7 +5951,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -5971,7 +5971,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -5988,7 +5988,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -6005,7 +6005,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -6023,7 +6023,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -6038,7 +6038,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -6054,7 +6054,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support", "frame-system", @@ -6071,7 +6071,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6091,7 +6091,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "parity-scale-codec", "sp-api", @@ -6101,7 +6101,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support", "frame-system", @@ -6118,7 +6118,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6141,7 +6141,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -6158,7 +6158,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -6173,7 +6173,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support", "frame-system", @@ -6187,7 +6187,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -6205,7 +6205,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -6220,7 +6220,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "assert_matches", "frame-benchmarking", @@ -6238,7 +6238,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -6254,7 +6254,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support", "frame-system", @@ -6275,7 +6275,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -6291,7 +6291,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support", "frame-system", @@ -6305,7 +6305,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6328,7 +6328,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6339,7 +6339,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "log", "sp-arithmetic", @@ -6348,7 +6348,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support", "frame-system", @@ -6377,7 +6377,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -6395,7 +6395,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -6414,7 +6414,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-support", "frame-system", @@ -6430,7 +6430,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6445,7 +6445,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6456,7 +6456,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -6473,7 +6473,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -6488,7 +6488,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -6504,7 +6504,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -6519,7 +6519,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-benchmarking", "frame-support", @@ -6534,7 +6534,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "frame-support", "frame-system", @@ -6552,7 +6552,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "frame-benchmarking", "frame-support", @@ -7106,7 +7106,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7121,7 +7121,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7135,7 +7135,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "derive_more", "fatality", @@ -7158,7 +7158,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "fatality", "futures", @@ -7179,7 +7179,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7205,7 +7205,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7246,7 +7246,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "always-assert", "bitvec", @@ -7268,7 +7268,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7281,7 +7281,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "derive_more", "fatality", @@ -7306,7 +7306,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7320,7 +7320,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "futures", "futures-timer", @@ -7340,7 +7340,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "always-assert", "async-trait", @@ -7364,7 +7364,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "futures", "parity-scale-codec", @@ -7382,7 +7382,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "bitvec", "derive_more", @@ -7411,7 +7411,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "bitvec", "futures", @@ -7431,7 +7431,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "bitvec", "fatality", @@ -7450,7 +7450,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7465,7 +7465,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "async-trait", "futures", @@ -7483,7 +7483,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7498,7 +7498,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "futures", "futures-timer", @@ -7515,7 +7515,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "fatality", "futures", @@ -7534,7 +7534,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "async-trait", "futures", @@ -7551,7 +7551,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "bitvec", "fatality", @@ -7569,7 +7569,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "always-assert", "assert_matches", @@ -7601,7 +7601,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "futures", "polkadot-node-primitives", @@ -7617,7 +7617,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "futures", "memory-lru", @@ -7633,7 +7633,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "async-std", "lazy_static", @@ -7651,7 +7651,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "bs58", "futures", @@ -7670,7 +7670,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "async-trait", "derive_more", @@ -7693,7 +7693,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "bounded-vec", "futures", @@ -7715,7 +7715,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7725,7 +7725,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "async-trait", "futures", @@ -7743,7 +7743,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "async-trait", "derive_more", @@ -7766,7 +7766,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "async-trait", "derive_more", @@ -7799,7 +7799,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "async-trait", "futures", @@ -7822,7 +7822,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "derive_more", "frame-support", @@ -7920,7 +7920,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7935,7 +7935,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "bitvec", "frame-system", @@ -7965,7 +7965,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7997,7 +7997,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "beefy-primitives", "bitvec", @@ -8086,7 +8086,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "beefy-primitives", "bitvec", @@ -8133,7 +8133,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "frame-support", "polkadot-primitives", @@ -8145,7 +8145,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "bs58", "parity-scale-codec", @@ -8157,7 +8157,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "bitflags", "bitvec", @@ -8200,7 +8200,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "async-trait", "beefy-gadget", @@ -8305,7 +8305,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8326,7 +8326,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8336,7 +8336,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8361,7 +8361,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "beefy-primitives", "bitvec", @@ -8422,7 +8422,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "frame-benchmarking", "frame-system", @@ -9056,7 +9056,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9175,7 +9175,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9259,7 +9259,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "frame-support", "polkadot-primitives", @@ -9429,7 +9429,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "log", "sp-core", @@ -9440,7 +9440,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "futures", @@ -9467,7 +9467,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "futures", "futures-timer", @@ -9490,7 +9490,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9506,7 +9506,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9523,7 +9523,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9534,7 +9534,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "array-bytes", "chrono", @@ -9574,7 +9574,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "fnv", "futures", @@ -9602,7 +9602,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "hash-db", "kvdb", @@ -9627,7 +9627,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "futures", @@ -9651,7 +9651,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "futures", @@ -9680,7 +9680,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "fork-tree", @@ -9722,7 +9722,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "futures", "jsonrpsee", @@ -9744,7 +9744,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9757,7 +9757,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "futures", @@ -9781,7 +9781,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9808,7 +9808,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "environmental", "parity-scale-codec", @@ -9824,7 +9824,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "log", "parity-scale-codec", @@ -9839,7 +9839,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9859,7 +9859,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "ahash", "array-bytes", @@ -9900,7 +9900,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "finality-grandpa", "futures", @@ -9921,7 +9921,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "ansi_term", "futures", @@ -9938,7 +9938,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "array-bytes", "async-trait", @@ -9953,7 +9953,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "array-bytes", "async-trait", @@ -10000,7 +10000,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "cid", "futures", @@ -10020,7 +10020,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "bitflags", @@ -10046,7 +10046,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "ahash", "futures", @@ -10064,7 +10064,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "array-bytes", "futures", @@ -10085,7 +10085,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "array-bytes", "fork-tree", @@ -10114,7 +10114,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "array-bytes", "futures", @@ -10133,7 +10133,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "array-bytes", "bytes", @@ -10163,7 +10163,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "futures", "libp2p", @@ -10176,7 +10176,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10185,7 +10185,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "futures", "hash-db", @@ -10215,7 +10215,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "futures", "jsonrpsee", @@ -10238,7 +10238,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "futures", "jsonrpsee", @@ -10251,7 +10251,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "futures", "hex", @@ -10270,7 +10270,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "directories", @@ -10341,7 +10341,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "log", "parity-scale-codec", @@ -10355,7 +10355,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10374,7 +10374,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "futures", "libc", @@ -10393,7 +10393,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "chrono", "futures", @@ -10411,7 +10411,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "ansi_term", "atty", @@ -10442,7 +10442,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10453,7 +10453,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "futures", @@ -10480,7 +10480,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "futures", @@ -10494,7 +10494,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "futures", "futures-timer", @@ -10924,7 +10924,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "enumn", "parity-scale-codec", @@ -11000,7 +11000,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "hash-db", "log", @@ -11018,7 +11018,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "blake2", "proc-macro-crate", @@ -11030,7 +11030,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "parity-scale-codec", "scale-info", @@ -11043,7 +11043,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "integer-sqrt", "num-traits", @@ -11058,7 +11058,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "parity-scale-codec", "scale-info", @@ -11071,7 +11071,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "parity-scale-codec", @@ -11083,7 +11083,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "parity-scale-codec", "sp-api", @@ -11095,7 +11095,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "futures", "log", @@ -11113,7 +11113,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "futures", @@ -11132,7 +11132,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "parity-scale-codec", @@ -11150,7 +11150,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "merlin", @@ -11173,7 +11173,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "parity-scale-codec", "scale-info", @@ -11187,7 +11187,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "parity-scale-codec", "scale-info", @@ -11200,7 +11200,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "array-bytes", "base58", @@ -11246,7 +11246,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "blake2", "byteorder", @@ -11260,7 +11260,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "proc-macro2", "quote", @@ -11271,7 +11271,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11280,7 +11280,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "proc-macro2", "quote", @@ -11290,7 +11290,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "environmental", "parity-scale-codec", @@ -11301,7 +11301,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "finality-grandpa", "log", @@ -11319,7 +11319,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11333,7 +11333,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "bytes", "futures", @@ -11359,7 +11359,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "lazy_static", "sp-core", @@ -11370,7 +11370,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "futures", @@ -11387,7 +11387,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "thiserror", "zstd", @@ -11396,7 +11396,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "log", "parity-scale-codec", @@ -11412,7 +11412,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "parity-scale-codec", "scale-info", @@ -11426,7 +11426,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "sp-api", "sp-core", @@ -11436,7 +11436,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "backtrace", "lazy_static", @@ -11446,7 +11446,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "rustc-hash", "serde", @@ -11456,7 +11456,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "either", "hash256-std-hasher", @@ -11479,7 +11479,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11497,7 +11497,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "Inflector", "proc-macro-crate", @@ -11509,7 +11509,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "log", "parity-scale-codec", @@ -11523,7 +11523,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "serde", "serde_json", @@ -11532,7 +11532,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "parity-scale-codec", "scale-info", @@ -11546,7 +11546,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "parity-scale-codec", "scale-info", @@ -11557,7 +11557,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "hash-db", "log", @@ -11579,12 +11579,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11597,7 +11597,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "log", "sp-core", @@ -11610,7 +11610,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "futures-timer", @@ -11626,7 +11626,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "parity-scale-codec", "sp-std", @@ -11638,7 +11638,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "sp-api", "sp-runtime", @@ -11647,7 +11647,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "async-trait", "log", @@ -11663,7 +11663,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "ahash", "hash-db", @@ -11686,7 +11686,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11703,7 +11703,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11714,7 +11714,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "impl-trait-for-tuples", "log", @@ -11727,7 +11727,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -12023,7 +12023,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "platforms", ] @@ -12031,7 +12031,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -12052,7 +12052,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "futures-util", "hyper", @@ -12065,7 +12065,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "jsonrpsee", "log", @@ -12086,7 +12086,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "array-bytes", "async-trait", @@ -12112,7 +12112,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "futures", "substrate-test-utils-derive", @@ -12122,7 +12122,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -12133,7 +12133,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "ansi_term", "build-helper", @@ -12241,7 +12241,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "frame-support", "polkadot-primitives", @@ -12521,7 +12521,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12532,7 +12532,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12659,7 +12659,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#983b6b0e5d93a3f7d99d8b3d3a8bb398af3ec045" +source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" dependencies = [ "clap", "frame-try-runtime", @@ -13247,7 +13247,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "beefy-primitives", "bitvec", @@ -13337,7 +13337,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "frame-support", "polkadot-primitives", @@ -13620,7 +13620,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13634,7 +13634,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "frame-support", "frame-system", @@ -13654,7 +13654,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "frame-benchmarking", "frame-support", @@ -13672,7 +13672,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#0398050920f818d4b7c2b47cf751b37bb498560f" +source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" dependencies = [ "Inflector", "proc-macro2", diff --git a/client/relay-chain-inprocess-interface/src/lib.rs b/client/relay-chain-inprocess-interface/src/lib.rs index 70df07ad478..22e888757c7 100644 --- a/client/relay-chain-inprocess-interface/src/lib.rs +++ b/client/relay-chain-inprocess-interface/src/lib.rs @@ -180,8 +180,7 @@ where relay_parent: PHash, key: &[u8], ) -> RelayChainResult> { - let block_id = BlockId::Hash(relay_parent); - let state = self.backend.state_at(block_id)?; + let state = self.backend.state_at(&relay_parent)?; state.storage(key).map_err(RelayChainError::GenericError) } @@ -190,8 +189,7 @@ where relay_parent: PHash, relevant_keys: &Vec>, ) -> RelayChainResult { - let block_id = BlockId::Hash(relay_parent); - let state_backend = self.backend.state_at(block_id)?; + let state_backend = self.backend.state_at(&relay_parent)?; sp_state_machine::prove_read(state_backend, relevant_keys) .map_err(RelayChainError::StateMachineError) From 8bb691c68828e57683a0e6ca52a0bd9d66653eb5 Mon Sep 17 00:00:00 2001 From: Aaro Altonen <48052676+altonen@users.noreply.github.com> Date: Mon, 17 Oct 2022 10:49:55 +0300 Subject: [PATCH 130/148] Companion for paritytech/substrate#12489 (#1766) * Companion for paritytech/substrate#12489 * fmt * update lockfile for {"polkadot", "substrate"} Co-authored-by: parity-processbot <> --- Cargo.lock | 506 +++++++++--------- .../relay-chain-minimal-node/src/network.rs | 16 + 2 files changed, 270 insertions(+), 252 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 845bf9b93b5..d4a98807fcf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -469,7 +469,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "array-bytes", "async-trait", @@ -506,7 +506,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -526,7 +526,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "beefy-primitives", "sp-api", @@ -536,7 +536,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "parity-scale-codec", "scale-info", @@ -2815,7 +2815,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "parity-scale-codec", ] @@ -2838,7 +2838,7 @@ checksum = "85dcb89d2b10c5f6133de2efd8c11959ce9dbb46a2f7a4cab208c4eeda6ce1ab" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support", "frame-system", @@ -2861,7 +2861,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "Inflector", "array-bytes", @@ -2912,7 +2912,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2923,7 +2923,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2939,7 +2939,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support", "frame-system", @@ -2968,7 +2968,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "bitflags", "frame-metadata", @@ -3000,7 +3000,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "Inflector", "cfg-expr", @@ -3014,7 +3014,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -3026,7 +3026,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "proc-macro2", "quote", @@ -3036,7 +3036,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support", "log", @@ -3054,7 +3054,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -3069,7 +3069,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "parity-scale-codec", "sp-api", @@ -3078,7 +3078,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support", "parity-scale-codec", @@ -3945,7 +3945,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "beefy-primitives", "bitvec", @@ -4043,7 +4043,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "frame-support", "polkadot-primitives", @@ -5459,7 +5459,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "array-bytes", "frame-benchmarking", @@ -5480,7 +5480,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support", "frame-system", @@ -5497,7 +5497,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -5511,7 +5511,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support", "frame-system", @@ -5527,7 +5527,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support", "frame-system", @@ -5543,7 +5543,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support", "frame-system", @@ -5558,7 +5558,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -5582,7 +5582,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5602,7 +5602,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -5617,7 +5617,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "beefy-primitives", "frame-support", @@ -5633,7 +5633,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "array-bytes", "beefy-merkle-tree", @@ -5656,7 +5656,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -5674,7 +5674,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -5718,7 +5718,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -5735,7 +5735,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "bitflags", "frame-benchmarking", @@ -5764,7 +5764,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "bitflags", "parity-scale-codec", @@ -5776,7 +5776,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "proc-macro2", "quote", @@ -5786,7 +5786,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "assert_matches", "frame-benchmarking", @@ -5803,7 +5803,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -5821,7 +5821,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5845,7 +5845,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5858,7 +5858,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -5876,7 +5876,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5897,7 +5897,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -5912,7 +5912,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -5935,7 +5935,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5951,7 +5951,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -5971,7 +5971,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -5988,7 +5988,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -6005,7 +6005,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -6023,7 +6023,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -6038,7 +6038,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -6054,7 +6054,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support", "frame-system", @@ -6071,7 +6071,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6091,7 +6091,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "parity-scale-codec", "sp-api", @@ -6101,7 +6101,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support", "frame-system", @@ -6118,7 +6118,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6141,7 +6141,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -6158,7 +6158,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -6173,7 +6173,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support", "frame-system", @@ -6187,7 +6187,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -6205,7 +6205,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -6220,7 +6220,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "assert_matches", "frame-benchmarking", @@ -6238,7 +6238,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -6254,7 +6254,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support", "frame-system", @@ -6275,7 +6275,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -6291,7 +6291,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support", "frame-system", @@ -6305,7 +6305,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6328,7 +6328,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6339,7 +6339,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "log", "sp-arithmetic", @@ -6348,7 +6348,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support", "frame-system", @@ -6377,7 +6377,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -6395,7 +6395,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -6414,7 +6414,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-support", "frame-system", @@ -6430,7 +6430,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6445,7 +6445,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6456,7 +6456,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -6473,7 +6473,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -6488,7 +6488,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -6504,7 +6504,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -6519,7 +6519,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-benchmarking", "frame-support", @@ -6534,7 +6534,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "frame-support", "frame-system", @@ -6552,7 +6552,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "frame-benchmarking", "frame-support", @@ -7106,7 +7106,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7121,7 +7121,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7135,7 +7135,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "derive_more", "fatality", @@ -7158,7 +7158,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "fatality", "futures", @@ -7179,7 +7179,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "clap", "frame-benchmarking-cli", @@ -7205,7 +7205,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7246,7 +7246,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "always-assert", "bitvec", @@ -7268,7 +7268,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7281,7 +7281,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "derive_more", "fatality", @@ -7306,7 +7306,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7320,7 +7320,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "futures", "futures-timer", @@ -7340,7 +7340,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "always-assert", "async-trait", @@ -7364,7 +7364,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "futures", "parity-scale-codec", @@ -7382,7 +7382,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "bitvec", "derive_more", @@ -7411,7 +7411,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "bitvec", "futures", @@ -7431,7 +7431,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "bitvec", "fatality", @@ -7450,7 +7450,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7465,7 +7465,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "async-trait", "futures", @@ -7483,7 +7483,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7498,7 +7498,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "futures", "futures-timer", @@ -7515,7 +7515,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "fatality", "futures", @@ -7534,7 +7534,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "async-trait", "futures", @@ -7551,7 +7551,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "bitvec", "fatality", @@ -7569,7 +7569,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "always-assert", "assert_matches", @@ -7601,7 +7601,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "futures", "polkadot-node-primitives", @@ -7617,7 +7617,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "futures", "memory-lru", @@ -7633,7 +7633,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "async-std", "lazy_static", @@ -7651,7 +7651,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "bs58", "futures", @@ -7670,7 +7670,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "async-trait", "derive_more", @@ -7693,7 +7693,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "bounded-vec", "futures", @@ -7715,7 +7715,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7725,7 +7725,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "async-trait", "futures", @@ -7743,7 +7743,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "async-trait", "derive_more", @@ -7766,7 +7766,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "async-trait", "derive_more", @@ -7799,7 +7799,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "async-trait", "futures", @@ -7822,7 +7822,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "derive_more", "frame-support", @@ -7920,7 +7920,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7935,7 +7935,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "bitvec", "frame-system", @@ -7965,7 +7965,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7997,7 +7997,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "beefy-primitives", "bitvec", @@ -8086,7 +8086,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "beefy-primitives", "bitvec", @@ -8133,7 +8133,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "frame-support", "polkadot-primitives", @@ -8145,7 +8145,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "bs58", "parity-scale-codec", @@ -8157,7 +8157,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "bitflags", "bitvec", @@ -8200,7 +8200,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "async-trait", "beefy-gadget", @@ -8305,7 +8305,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8326,7 +8326,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8336,7 +8336,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8361,7 +8361,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "beefy-primitives", "bitvec", @@ -8422,7 +8422,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "frame-benchmarking", "frame-system", @@ -9056,7 +9056,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9175,7 +9175,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9259,7 +9259,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "frame-support", "polkadot-primitives", @@ -9429,7 +9429,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "log", "sp-core", @@ -9440,7 +9440,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "futures", @@ -9467,7 +9467,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "futures", "futures-timer", @@ -9490,7 +9490,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9506,7 +9506,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9523,7 +9523,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9534,7 +9534,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "array-bytes", "chrono", @@ -9574,7 +9574,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "fnv", "futures", @@ -9602,7 +9602,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "hash-db", "kvdb", @@ -9627,7 +9627,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "futures", @@ -9651,7 +9651,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "futures", @@ -9680,7 +9680,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "fork-tree", @@ -9722,7 +9722,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "futures", "jsonrpsee", @@ -9744,7 +9744,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9757,7 +9757,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "futures", @@ -9781,7 +9781,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9808,7 +9808,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "environmental", "parity-scale-codec", @@ -9824,7 +9824,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "log", "parity-scale-codec", @@ -9839,7 +9839,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9859,7 +9859,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "ahash", "array-bytes", @@ -9900,7 +9900,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "finality-grandpa", "futures", @@ -9921,7 +9921,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "ansi_term", "futures", @@ -9938,7 +9938,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "array-bytes", "async-trait", @@ -9953,7 +9953,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "array-bytes", "async-trait", @@ -10000,7 +10000,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "cid", "futures", @@ -10020,7 +10020,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "bitflags", @@ -10046,7 +10046,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "ahash", "futures", @@ -10064,7 +10064,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "array-bytes", "futures", @@ -10085,7 +10085,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "array-bytes", "fork-tree", @@ -10101,6 +10101,7 @@ dependencies = [ "sc-consensus", "sc-network-common", "sc-peerset", + "sc-utils", "smallvec", "sp-arithmetic", "sp-blockchain", @@ -10114,7 +10115,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "array-bytes", "futures", @@ -10133,7 +10134,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "array-bytes", "bytes", @@ -10163,7 +10164,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "futures", "libp2p", @@ -10176,7 +10177,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10185,7 +10186,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "futures", "hash-db", @@ -10215,7 +10216,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "futures", "jsonrpsee", @@ -10238,7 +10239,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "futures", "jsonrpsee", @@ -10251,7 +10252,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "futures", "hex", @@ -10270,7 +10271,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "directories", @@ -10341,7 +10342,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "log", "parity-scale-codec", @@ -10355,7 +10356,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10374,7 +10375,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "futures", "libc", @@ -10393,7 +10394,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "chrono", "futures", @@ -10411,7 +10412,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "ansi_term", "atty", @@ -10442,7 +10443,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10453,7 +10454,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "futures", @@ -10480,7 +10481,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "futures", @@ -10494,7 +10495,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "futures", "futures-timer", @@ -10924,7 +10925,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "enumn", "parity-scale-codec", @@ -11000,7 +11001,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "hash-db", "log", @@ -11018,7 +11019,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "blake2", "proc-macro-crate", @@ -11030,7 +11031,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "parity-scale-codec", "scale-info", @@ -11043,7 +11044,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "integer-sqrt", "num-traits", @@ -11058,7 +11059,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "parity-scale-codec", "scale-info", @@ -11071,7 +11072,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "parity-scale-codec", @@ -11083,7 +11084,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "parity-scale-codec", "sp-api", @@ -11095,7 +11096,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "futures", "log", @@ -11113,7 +11114,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "futures", @@ -11132,7 +11133,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "parity-scale-codec", @@ -11150,7 +11151,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "merlin", @@ -11173,7 +11174,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "parity-scale-codec", "scale-info", @@ -11187,7 +11188,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "parity-scale-codec", "scale-info", @@ -11200,7 +11201,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "array-bytes", "base58", @@ -11246,7 +11247,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "blake2", "byteorder", @@ -11260,7 +11261,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "proc-macro2", "quote", @@ -11271,7 +11272,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11280,7 +11281,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "proc-macro2", "quote", @@ -11290,7 +11291,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "environmental", "parity-scale-codec", @@ -11301,7 +11302,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "finality-grandpa", "log", @@ -11319,7 +11320,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11333,7 +11334,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "bytes", "futures", @@ -11359,7 +11360,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "lazy_static", "sp-core", @@ -11370,7 +11371,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "futures", @@ -11387,7 +11388,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "thiserror", "zstd", @@ -11396,7 +11397,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "log", "parity-scale-codec", @@ -11412,7 +11413,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "parity-scale-codec", "scale-info", @@ -11426,7 +11427,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "sp-api", "sp-core", @@ -11436,7 +11437,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "backtrace", "lazy_static", @@ -11446,7 +11447,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "rustc-hash", "serde", @@ -11456,7 +11457,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "either", "hash256-std-hasher", @@ -11479,7 +11480,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11497,7 +11498,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "Inflector", "proc-macro-crate", @@ -11509,7 +11510,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "log", "parity-scale-codec", @@ -11523,7 +11524,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "serde", "serde_json", @@ -11532,7 +11533,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "parity-scale-codec", "scale-info", @@ -11546,7 +11547,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "parity-scale-codec", "scale-info", @@ -11557,7 +11558,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "hash-db", "log", @@ -11579,12 +11580,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11597,7 +11598,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "log", "sp-core", @@ -11610,7 +11611,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "futures-timer", @@ -11626,7 +11627,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "parity-scale-codec", "sp-std", @@ -11638,7 +11639,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "sp-api", "sp-runtime", @@ -11647,7 +11648,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "async-trait", "log", @@ -11663,7 +11664,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "ahash", "hash-db", @@ -11686,7 +11687,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11703,7 +11704,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11714,7 +11715,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "impl-trait-for-tuples", "log", @@ -11727,7 +11728,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -12023,7 +12024,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "platforms", ] @@ -12031,7 +12032,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -12052,7 +12053,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "futures-util", "hyper", @@ -12065,7 +12066,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "jsonrpsee", "log", @@ -12086,7 +12087,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "array-bytes", "async-trait", @@ -12112,7 +12113,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "futures", "substrate-test-utils-derive", @@ -12122,7 +12123,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -12133,7 +12134,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "ansi_term", "build-helper", @@ -12241,7 +12242,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "frame-support", "polkadot-primitives", @@ -12521,7 +12522,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12532,7 +12533,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12659,7 +12660,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#f3139874cb50f9028ecba9bdbd3004e7f3f228f5" +source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" dependencies = [ "clap", "frame-try-runtime", @@ -12679,6 +12680,7 @@ dependencies = [ "sp-runtime", "sp-state-machine", "sp-version", + "sp-weights", "zstd", ] @@ -13247,7 +13249,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "beefy-primitives", "bitvec", @@ -13337,7 +13339,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "frame-support", "polkadot-primitives", @@ -13620,7 +13622,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13634,7 +13636,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "frame-support", "frame-system", @@ -13654,7 +13656,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "frame-benchmarking", "frame-support", @@ -13672,7 +13674,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#efcaa57d5f9d72c1c3fa79dcd929da9cced3af74" +source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" dependencies = [ "Inflector", "proc-macro2", diff --git a/client/relay-chain-minimal-node/src/network.rs b/client/relay-chain-minimal-node/src/network.rs index b765b9123cd..bd4b0889a89 100644 --- a/client/relay-chain-minimal-node/src/network.rs +++ b/client/relay-chain-minimal-node/src/network.rs @@ -26,6 +26,7 @@ use sc_network_common::{ NonDefaultSetConfig, NonReservedPeerMode, NotificationHandshake, ProtocolId, SetConfig, }, protocol::role::Roles, + service::NetworkSyncForkRequest, sync::{message::BlockAnnouncesHandshake, Metrics, SyncStatus}, }; use sc_network_light::light_client_requests; @@ -92,6 +93,7 @@ pub(crate) fn build_collator_network( protocol_id, metrics_registry: config.prometheus_config.as_ref().map(|config| config.registry.clone()), block_announce_config, + chain_sync_service: Box::new(DummyChainSyncService::(Default::default())), block_request_protocol_config, state_request_protocol_config, warp_sync_protocol_config: None, @@ -420,6 +422,14 @@ impl sc_network_common::sync::ChainSync for DummyChainSync { ) -> Result { unimplemented!("Not supported on the RPC collator") } + + fn poll( + &mut self, + _cx: &mut std::task::Context, + ) -> std::task::Poll::Header>> + { + std::task::Poll::Pending + } } struct DummyImportQueue; @@ -448,3 +458,9 @@ impl sc_service::ImportQueue for DummyImportQueue { ) { } } + +struct DummyChainSyncService(std::marker::PhantomData); + +impl NetworkSyncForkRequest> for DummyChainSyncService { + fn set_sync_fork_request(&self, _peers: Vec, _hash: B::Hash, _number: NumberFor) {} +} From 220bc559f064d38485d5a21e2ba91a8a237e9d16 Mon Sep 17 00:00:00 2001 From: Chevdor Date: Mon, 17 Oct 2022 16:19:09 +0200 Subject: [PATCH 131/148] GHA updates and pin (#1768) * Pin checkout to v3.1.0 and update srtool-actions to v0.6.0 * Pin GHA ruby/setup-ruby to 1.118.0 * Update and pin GHA deps * Pin all external GHA deps --- .github/workflows/check-labels.yml | 2 +- .github/workflows/docs.yml | 2 +- .github/workflows/fmt-check.yml | 8 +++--- .github/workflows/release-01_branch-check.yml | 2 +- .../workflows/release-10_rc-automation.yml | 2 +- ...e-20_extrinsic-ordering-check-from-bin.yml | 2 +- ...e-21_extrinsic-ordering-check-from-two.yml | 2 +- .github/workflows/release-30_create-draft.yml | 26 +++++++++---------- .../workflows/release-50_docker-manual.yml | 4 +-- .github/workflows/release-50_docker.yml | 4 +-- .github/workflows/srtool.yml | 8 +++--- 11 files changed, 31 insertions(+), 31 deletions(-) diff --git a/.github/workflows/check-labels.yml b/.github/workflows/check-labels.yml index f0f5556ebed..e9d0cf061df 100644 --- a/.github/workflows/check-labels.yml +++ b/.github/workflows/check-labels.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout sources - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.ref }} diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index b9f73c2a359..ddbfd733b95 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -17,7 +17,7 @@ jobs: protoc --version - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 - name: Rust versions run: rustup show diff --git a/.github/workflows/fmt-check.yml b/.github/workflows/fmt-check.yml index 8f68be7a4ad..9d2af9bb2cf 100644 --- a/.github/workflows/fmt-check.yml +++ b/.github/workflows/fmt-check.yml @@ -15,7 +15,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Install Rust nightly toolchain - uses: actions-rs/toolchain@v1 + uses: actions-rs/toolchain@b2417cde72dcf67f306c0ae8e0828a81bf0b189f # v1.0.7 with: profile: minimal toolchain: nightly @@ -23,7 +23,7 @@ jobs: components: clippy, rustfmt - name: Cache Dependencies & Build Outputs - uses: actions/cache@v3 + uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # v3.0.11 with: path: | ~/.cargo/registry @@ -31,10 +31,10 @@ jobs: target key: ${{ runner.os }}-${{ matrix.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - - uses: actions/checkout@v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 - name: Cargo fmt - uses: actions-rs/cargo@v1 + uses: actions-rs/cargo@ae10961054e4aa8b4aa7dffede299aaf087aa33b # v1.0.3 with: command: fmt args: --all -- --check diff --git a/.github/workflows/release-01_branch-check.yml b/.github/workflows/release-01_branch-check.yml index a39c635af39..f65e45e47b1 100644 --- a/.github/workflows/release-01_branch-check.yml +++ b/.github/workflows/release-01_branch-check.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout sources - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 with: fetch-depth: 0 diff --git a/.github/workflows/release-10_rc-automation.yml b/.github/workflows/release-10_rc-automation.yml index 1357df0c532..64b55a78075 100644 --- a/.github/workflows/release-10_rc-automation.yml +++ b/.github/workflows/release-10_rc-automation.yml @@ -17,7 +17,7 @@ jobs: pre-releases: true steps: - name: Checkout sources - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 with: fetch-depth: 0 - id: compute_tag diff --git a/.github/workflows/release-20_extrinsic-ordering-check-from-bin.yml b/.github/workflows/release-20_extrinsic-ordering-check-from-bin.yml index 442f7793f4c..16424ba03d0 100644 --- a/.github/workflows/release-20_extrinsic-ordering-check-from-bin.yml +++ b/.github/workflows/release-20_extrinsic-ordering-check-from-bin.yml @@ -79,7 +79,7 @@ jobs: continue-on-error: true - name: Save output as artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0 with: name: ${{ env.CHAIN }} path: | diff --git a/.github/workflows/release-21_extrinsic-ordering-check-from-two.yml b/.github/workflows/release-21_extrinsic-ordering-check-from-two.yml index 7956aff2498..a8d9a3bcc39 100644 --- a/.github/workflows/release-21_extrinsic-ordering-check-from-two.yml +++ b/.github/workflows/release-21_extrinsic-ordering-check-from-two.yml @@ -108,7 +108,7 @@ jobs: cat output.txt - name: Save output as artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0 with: name: ${{ matrix.runtime }} path: | diff --git a/.github/workflows/release-30_create-draft.yml b/.github/workflows/release-30_create-draft.yml index 68d0a383523..ffd33d6f1e7 100644 --- a/.github/workflows/release-30_create-draft.yml +++ b/.github/workflows/release-30_create-draft.yml @@ -62,13 +62,13 @@ jobs: runtime: rococo-parachain steps: - name: Checkout sources - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 with: ref: ${{ github.event.inputs.ref2 }} - name: Cache target dir if: ${{ github.event.inputs.release_type != 'client' }} - uses: actions/cache@v3 + uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # v3.0.11 with: path: "${{ github.workspace }}/runtime/${{ matrix.runtime }}/target" key: srtool-target-${{ matrix.runtime }}-${{ github.sha }} @@ -79,7 +79,7 @@ jobs: - name: Build ${{ matrix.runtime }} runtime if: ${{ github.event.inputs.release_type != 'client' }} id: srtool_build - uses: chevdor/srtool-actions@v0.5.0 + uses: chevdor/srtool-actions@v0.6.0 with: image: paritytech/srtool chain: ${{ matrix.runtime }} @@ -93,14 +93,14 @@ jobs: - name: Upload ${{ matrix.runtime }} srtool json if: ${{ github.event.inputs.release_type != 'client' }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0 with: name: ${{ matrix.runtime }}-srtool-json path: ${{ matrix.runtime }}-srtool-digest.json - name: Upload ${{ matrix.runtime }} runtime if: ${{ github.event.inputs.release_type != 'client' }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0 with: name: ${{ matrix.runtime }}-runtime path: | @@ -114,18 +114,18 @@ jobs: asset_upload_url: ${{ steps.create-release.outputs.upload_url }} steps: - name: Checkout sources - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 with: fetch-depth: 0 path: cumulus ref: ${{ github.event.inputs.ref2 }} - - uses: ruby/setup-ruby@v1 + - uses: ruby/setup-ruby@eae47962baca661befdfd24e4d6c34ade04858f7 # v1.118.0 with: ruby-version: 3.0.0 - name: Download srtool json output - uses: actions/download-artifact@v3 + uses: actions/download-artifact@fb598a63ae348fa914e94cd0ff38f362e927b741 # v3.0.0 - name: Prepare tooling run: | @@ -177,14 +177,14 @@ jobs: - name: Archive srtool json if: ${{ github.event.inputs.release_type != 'client' }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0 with: name: srtool-json path: | **/*-srtool-digest.json - name: Archive context artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0 with: name: release-notes-context path: | @@ -228,14 +228,14 @@ jobs: runtime: rococo-parachain steps: - name: Checkout sources - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 with: ref: ${{ github.event.inputs.ref2 }} - name: Download artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@fb598a63ae348fa914e94cd0ff38f362e927b741 # v3.0.0 - - uses: ruby/setup-ruby@v1 + - uses: ruby/setup-ruby@eae47962baca661befdfd24e4d6c34ade04858f7 # v1.118.0 with: ruby-version: 3.0.0 diff --git a/.github/workflows/release-50_docker-manual.yml b/.github/workflows/release-50_docker-manual.yml index 0da9e0c4f7e..487b104a1a1 100644 --- a/.github/workflows/release-50_docker-manual.yml +++ b/.github/workflows/release-50_docker-manual.yml @@ -25,7 +25,7 @@ jobs: steps: - name: Checkout sources - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 with: ref: ${{ github.event.release.tag_name }} @@ -91,7 +91,7 @@ jobs: ./docker/scripts/build-injected-image.sh - name: Login to Dockerhub - uses: docker/login-action@v2 + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} diff --git a/.github/workflows/release-50_docker.yml b/.github/workflows/release-50_docker.yml index 9f8eb3c91ac..fce5e929d96 100644 --- a/.github/workflows/release-50_docker.yml +++ b/.github/workflows/release-50_docker.yml @@ -20,7 +20,7 @@ jobs: steps: - name: Checkout sources - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 with: ref: ${{ github.event.release.tag_name }} @@ -90,7 +90,7 @@ jobs: ./docker/scripts/build-injected-image.sh - name: Login to Dockerhub - uses: docker/login-action@v2 + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} diff --git a/.github/workflows/srtool.yml b/.github/workflows/srtool.yml index 85d3569ed8f..82b8585b358 100644 --- a/.github/workflows/srtool.yml +++ b/.github/workflows/srtool.yml @@ -48,13 +48,13 @@ jobs: - category: testing runtime: rococo-parachain steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 with: fetch-depth: 0 - name: Srtool build id: srtool_build - uses: chevdor/srtool-actions@v0.5.0 + uses: chevdor/srtool-actions@v0.6.0 with: chain: ${{ matrix.runtime }} runtime_dir: parachains/runtimes/${{ matrix.category }}/${{ matrix.runtime }} @@ -68,7 +68,7 @@ jobs: # it takes a while to build the runtime, so let's save the artifact as soon as we have it - name: Archive Artifacts for ${{ matrix.runtime }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0 with: name: ${{ matrix.runtime }}-runtime path: | @@ -106,7 +106,7 @@ jobs: tee ${{ matrix.runtime }}-diff.txt - name: Archive Subwasm results - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0 with: name: ${{ matrix.runtime }}-runtime path: | From b24d7285e8cf6b90e78b29475fa84293671cf886 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Oct 2022 09:31:07 +0200 Subject: [PATCH 132/148] Bump proc-macro2 from 1.0.46 to 1.0.47 (#1774) Bumps [proc-macro2](https://github.com/dtolnay/proc-macro2) from 1.0.46 to 1.0.47. - [Release notes](https://github.com/dtolnay/proc-macro2/releases) - [Commits](https://github.com/dtolnay/proc-macro2/compare/1.0.46...1.0.47) --- updated-dependencies: - dependency-name: proc-macro2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- pallets/parachain-system/proc-macro/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d4a98807fcf..0a5146faafb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8620,9 +8620,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.46" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" +checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" dependencies = [ "unicode-ident", ] diff --git a/pallets/parachain-system/proc-macro/Cargo.toml b/pallets/parachain-system/proc-macro/Cargo.toml index 0bedb8660ee..0620702e427 100644 --- a/pallets/parachain-system/proc-macro/Cargo.toml +++ b/pallets/parachain-system/proc-macro/Cargo.toml @@ -10,7 +10,7 @@ proc-macro = true [dependencies] syn = "1.0.102" -proc-macro2 = "1.0.46" +proc-macro2 = "1.0.47" quote = "1.0.21" proc-macro-crate = "1.2.1" From cf9d6bb43c8ca36d2149315030c09187400cfd7c Mon Sep 17 00:00:00 2001 From: Muharem Ismailov Date: Tue, 18 Oct 2022 11:24:29 +0200 Subject: [PATCH 133/148] Runtime release checklist template update (#1762) * Runtime release checklist template update * Apply suggestions from code review Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Squirrel * remove check * xcm 50% * xcm config check update * post release * update post release check * update post release check Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> Co-authored-by: Squirrel --- .github/ISSUE_TEMPLATE/release-runtime.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/release-runtime.md b/.github/ISSUE_TEMPLATE/release-runtime.md index 8ebce6ff153..055326f0a11 100644 --- a/.github/ISSUE_TEMPLATE/release-runtime.md +++ b/.github/ISSUE_TEMPLATE/release-runtime.md @@ -6,6 +6,10 @@ title: Release Checklist for Runtime {{ env.VERSION }} # Release Checklist - Runtimes +**All** following checks must be completed before publishing a new release. +The release process is owned and led by @paritytech/release-engineering team. +The checks marked with :crab: are meant to be checked by [a runtime engineer](https://github.com/paritytech/cumulus/issues/1761). + ## Runtimes Release ### Codebase @@ -13,19 +17,17 @@ These checks should be performed on the codebase. - [ ] the [`spec_version`](https://github.com/paritytech/cumulus/blob/master/docs/release.md#spec-version) has been incremented since the last release for any native runtimes from any existing use on public (non-private/test) networks -- [ ] previously [completed migrations](https://github.com/paritytech/cumulus/blob/master/docs/release.md#old-migrations-removed) are - removed for any public (non-private/test) networks -- [ ] No migrations added in the last release that would need to be removed +- [ ] :crab: previously [completed migrations](https://github.com/paritytech/cumulus/blob/master/docs/release.md#old-migrations-removed) are removed for any public (non-private/test) networks - [ ] pallet and [extrinsic ordering](https://github.com/paritytech/cumulus/blob/master/docs/release.md#extrinsic-ordering--storage) as well as `SignedExtension`s have stayed the same. Bump `transaction_version` otherwise - [ ] the [benchmarks](https://github.com/paritytech/ci_cd/wiki/Benchmarks:-cumulus) ran - [ ] the weights have been updated for any modified runtime logic -- [ ] the various pieces of XCM config are sane +- [ ] :crab: the new weights are sane, there are no significant (>50%) drops or rises with no reason +- [ ] :crab: XCM config is compatible with the configurations and versions of relevant interlocutors, like the Relay Chain. ### On the release branch -The following checks can be performed after we have forked off to the release- -candidate branch or started an additional release candidate branch (rc-2, rc-3, etc) +The following checks can be performed after we have forked off to the release-candidate branch or started an additional release candidate branch (rc-2, rc-3, etc) - [ ] Verify [new migrations](https://github.com/paritytech/cumulus/blob/master/docs/release.md#new-migrations) complete successfully, and the runtime state is correctly updated for any public (non-private/test) @@ -41,6 +43,10 @@ candidate branch or started an additional release candidate branch (rc-2, rc-3, - [ ] Check that [build artifacts](https://github.com/paritytech/cumulus/blob/master/docs/release.md#build-artifacts) have been added to the draft-release. +# Post release + +- [ ] :crab: all commits (runtime version bumps, fixes) on this release branch have been merged back to master. + --- Read more about the [release documentation](https://github.com/paritytech/cumulus/blob/master/docs/release.md). From 00626c01835e7324a6c6204cbe9f08e043ca14dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Thei=C3=9Fen?= Date: Tue, 18 Oct 2022 11:56:17 +0200 Subject: [PATCH 134/148] contracts: Reduce session length and enable unstable interfaces (#1748) * Reduce session for contracts to 10 minutes * Build pallet-contracts with unstable interface * Set `MinCandidates` to 0 to allow only invulnerables as collators --- parachains/runtimes/contracts/contracts-rococo/Cargo.toml | 8 +------- parachains/runtimes/contracts/contracts-rococo/src/lib.rs | 7 ++++--- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml index 4bd3715fe49..2e6f65ceacb 100644 --- a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml +++ b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml @@ -47,7 +47,7 @@ pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-contracts = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +pallet-contracts = { git = "https://github.com/paritytech/substrate", default-features = false, features = ["unstable-interface"], branch = "master" } pallet-contracts-primitives = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } # Polkadot @@ -131,12 +131,6 @@ std = [ "cumulus-primitives-utility/std", ] -# Make contract callable functions marked as __unstable__ available. Do not enable -# on live chains as those are subject to change. -contracts-unstable-interface = [ - "pallet-contracts/unstable-interface" -] - runtime-benchmarks = [ "hex-literal", "frame-benchmarking/runtime-benchmarks", diff --git a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index 92ddbaf7adb..579801078a4 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -58,7 +58,8 @@ use frame_system::limits::{BlockLength, BlockWeights}; pub use parachains_common as common; use parachains_common::{ impls::DealWithFees, opaque, AccountId, BlockNumber, Hash, Header, Index, Signature, - AVERAGE_ON_INITIALIZE_RATIO, HOURS, MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, + AVERAGE_ON_INITIALIZE_RATIO, MAXIMUM_BLOCK_WEIGHT, MINUTES, NORMAL_DISPATCH_RATIO, + SLOT_DURATION, }; pub use parachains_common::{AuraId, Balance}; use xcm_config::CollatorSelectionUpdateOrigin; @@ -269,7 +270,7 @@ impl parachain_info::Config for Runtime {} impl cumulus_pallet_aura_ext::Config for Runtime {} parameter_types! { - pub const Period: u32 = 6 * HOURS; + pub const Period: u32 = 10 * MINUTES; pub const Offset: u32 = 0; } @@ -303,7 +304,7 @@ impl pallet_collator_selection::Config for Runtime { type UpdateOrigin = CollatorSelectionUpdateOrigin; type PotId = PotId; type MaxCandidates = ConstU32<1000>; - type MinCandidates = ConstU32<5>; + type MinCandidates = ConstU32<0>; type MaxInvulnerables = ConstU32<100>; // should be a multiple of session or things will get inconsistent type KickThreshold = Period; From e960589cf92951fc9bcdfe3dd953adc25205229e Mon Sep 17 00:00:00 2001 From: Sebastian Kunert Date: Tue, 18 Oct 2022 13:30:22 +0200 Subject: [PATCH 135/148] Update clap to version 4 (#1745) * Bump to clap4 * Adjust to clap 4 style * Remove two more deprecated occurences of clap macro * Remove "deprecated" feature from clap * Update cargo lock * Fix group name * More skipped group names --- Cargo.lock | 1102 ++++++++++------------------ client/cli/Cargo.toml | 2 +- client/cli/src/lib.rs | 26 +- parachain-template/node/Cargo.toml | 2 +- parachain-template/node/src/cli.rs | 12 +- polkadot-parachain/Cargo.toml | 2 +- polkadot-parachain/src/cli.rs | 14 +- test/service/Cargo.toml | 2 +- test/service/src/cli.rs | 24 +- 9 files changed, 451 insertions(+), 735 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0a5146faafb..dacb281d13b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -332,9 +332,9 @@ dependencies = [ [[package]] name = "async-std-resolver" -version = "0.21.2" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2f8a4a203be3325981310ab243a28e6e4ea55b6519bffce05d41ab60e09ad8" +checksum = "6ba50e24d9ee0a8950d3d03fc6d0dd10aa14b5de3b101949b4e160f7fee7c723" dependencies = [ "async-std", "async-trait", @@ -469,7 +469,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "array-bytes", "async-trait", @@ -506,7 +506,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -526,7 +526,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "beefy-primitives", "sp-api", @@ -536,7 +536,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "parity-scale-codec", "scale-info", @@ -549,12 +549,6 @@ dependencies = [ "sp-std", ] -[[package]] -name = "bimap" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50ae17cabbc8a38a1e3e4c1a6a664e9a09672dc14d0896fa8d865d3a5a446b07" - [[package]] name = "bincode" version = "1.3.3" @@ -662,7 +656,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ - "block-padding 0.1.5", + "block-padding", "byte-tools", "byteorder", "generic-array 0.12.4", @@ -674,7 +668,6 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "block-padding 0.2.1", "generic-array 0.14.4", ] @@ -696,12 +689,6 @@ dependencies = [ "byte-tools", ] -[[package]] -name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - [[package]] name = "blocking" version = "1.1.0" @@ -992,23 +979,33 @@ name = "clap" version = "3.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750" +dependencies = [ + "bitflags", + "clap_lex 0.2.2", + "indexmap", + "textwrap", +] + +[[package]] +name = "clap" +version = "4.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ed45cc2c62a3eff523e718d8576ba762c83a3146151093283ac62ae11933a73" dependencies = [ "atty", "bitflags", "clap_derive", - "clap_lex", - "indexmap", + "clap_lex 0.3.0", "once_cell", "strsim", "termcolor", - "textwrap", ] [[package]] name = "clap_derive" -version = "3.2.18" +version = "4.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" +checksum = "db342ce9fda24fb191e2ed4e102055a4d381c1086a06630174cd8da8d5d917ce" dependencies = [ "heck", "proc-macro-error", @@ -1027,12 +1024,12 @@ dependencies = [ ] [[package]] -name = "cmake" -version = "0.1.48" +name = "clap_lex" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a" +checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8" dependencies = [ - "cc", + "os_str_bytes", ] [[package]] @@ -1370,7 +1367,7 @@ dependencies = [ "atty", "cast", "ciborium", - "clap", + "clap 3.2.22", "criterion-plot", "futures", "itertools", @@ -1519,22 +1516,11 @@ dependencies = [ "cipher", ] -[[package]] -name = "cuckoofilter" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b810a8449931679f64cd7eef1bbd0fa315801b6d5d9cdc1ace2804d6529eee18" -dependencies = [ - "byteorder", - "fnv", - "rand 0.7.3", -] - [[package]] name = "cumulus-client-cli" version = "0.1.0" dependencies = [ - "clap", + "clap 4.0.11", "parity-scale-codec", "sc-chain-spec", "sc-cli", @@ -2160,7 +2146,7 @@ name = "cumulus-test-service" version = "0.1.0" dependencies = [ "async-trait", - "clap", + "clap 4.0.11", "criterion", "cumulus-client-cli", "cumulus-client-consensus-common", @@ -2529,9 +2515,9 @@ dependencies = [ [[package]] name = "enum-as-inner" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" +checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" dependencies = [ "heck", "proc-macro2", @@ -2815,7 +2801,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "parity-scale-codec", ] @@ -2838,7 +2824,7 @@ checksum = "85dcb89d2b10c5f6133de2efd8c11959ce9dbb46a2f7a4cab208c4eeda6ce1ab" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support", "frame-system", @@ -2861,12 +2847,12 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "Inflector", "array-bytes", "chrono", - "clap", + "clap 4.0.11", "comfy-table", "frame-benchmarking", "frame-support", @@ -2912,7 +2898,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2923,7 +2909,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2939,7 +2925,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support", "frame-system", @@ -2968,7 +2954,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "bitflags", "frame-metadata", @@ -3000,7 +2986,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "Inflector", "cfg-expr", @@ -3014,7 +3000,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -3026,7 +3012,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "proc-macro2", "quote", @@ -3036,7 +3022,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support", "log", @@ -3054,7 +3040,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -3069,7 +3055,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "parity-scale-codec", "sp-api", @@ -3078,7 +3064,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support", "parity-scale-codec", @@ -3462,12 +3448,6 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" -[[package]] -name = "hex_fmt" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" - [[package]] name = "hmac" version = "0.8.1" @@ -3631,9 +3611,9 @@ dependencies = [ [[package]] name = "if-watch" -version = "1.0.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8f4a3c3d4c89351ca83e120c1c00b27df945d38e05695668c9d4b4f7bc52f3" +checksum = "065c008e570a43c00de6aed9714035e5ea6a498c255323db9091722af6ee67dd" dependencies = [ "async-io", "core-foundation", @@ -3945,7 +3925,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "beefy-primitives", "bitvec", @@ -4043,7 +4023,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "frame-support", "polkadot-primitives", @@ -4134,9 +4114,9 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] name = "libp2p" -version = "0.46.1" +version = "0.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81327106887e42d004fbdab1fef93675be2e2e07c1b95fce45e2cc813485611d" +checksum = "ec878fda12ebec479186b3914ebc48ff180fa4c51847e11a1a68bf65249e02c1" dependencies = [ "bytes", "futures", @@ -4144,12 +4124,8 @@ dependencies = [ "getrandom 0.2.3", "instant", "lazy_static", - "libp2p-autonat", "libp2p-core", - "libp2p-deflate", "libp2p-dns", - "libp2p-floodsub", - "libp2p-gossipsub", "libp2p-identify", "libp2p-kad", "libp2p-mdns", @@ -4157,49 +4133,24 @@ dependencies = [ "libp2p-mplex", "libp2p-noise", "libp2p-ping", - "libp2p-plaintext", - "libp2p-pnet", - "libp2p-relay", - "libp2p-rendezvous", "libp2p-request-response", "libp2p-swarm", "libp2p-swarm-derive", "libp2p-tcp", - "libp2p-uds", "libp2p-wasm-ext", "libp2p-websocket", "libp2p-yamux", "multiaddr", "parking_lot 0.12.1", "pin-project", - "rand 0.7.3", "smallvec", ] -[[package]] -name = "libp2p-autonat" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4decc51f3573653a9f4ecacb31b1b922dd20c25a6322bb15318ec04287ec46f9" -dependencies = [ - "async-trait", - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-request-response", - "libp2p-swarm", - "log", - "prost 0.10.3", - "prost-build 0.10.4", - "rand 0.8.5", -] - [[package]] name = "libp2p-core" -version = "0.34.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf9b94cefab7599b2d3dff2f93bee218c6621d68590b23ede4485813cbcece6" +checksum = "799676bb0807c788065e57551c6527d461ad572162b0519d1958946ff9e0539d" dependencies = [ "asn1_der", "bs58", @@ -4210,17 +4161,15 @@ dependencies = [ "futures-timer", "instant", "lazy_static", - "libsecp256k1", "log", "multiaddr", "multihash", "multistream-select", "parking_lot 0.12.1", "pin-project", - "prost 0.10.3", - "prost-build 0.10.4", + "prost", + "prost-build", "rand 0.8.5", - "ring", "rw-stream-sink", "sha2 0.10.2", "smallvec", @@ -4230,22 +4179,11 @@ dependencies = [ "zeroize", ] -[[package]] -name = "libp2p-deflate" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0183dc2a3da1fbbf85e5b6cf51217f55b14f5daea0c455a9536eef646bfec71" -dependencies = [ - "flate2", - "futures", - "libp2p-core", -] - [[package]] name = "libp2p-dns" -version = "0.34.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cbf54723250fa5d521383be789bf60efdabe6bacfb443f87da261019a49b4b5" +checksum = "2322c9fb40d99101def6a01612ee30500c89abbbecb6297b3cd252903a4c1720" dependencies = [ "async-std-resolver", "futures", @@ -4256,57 +4194,11 @@ dependencies = [ "trust-dns-resolver", ] -[[package]] -name = "libp2p-floodsub" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a4b6ffd53e355775d24b76f583fdda54b3284806f678499b57913adb94f231" -dependencies = [ - "cuckoofilter", - "fnv", - "futures", - "libp2p-core", - "libp2p-swarm", - "log", - "prost 0.10.3", - "prost-build 0.10.4", - "rand 0.7.3", - "smallvec", -] - -[[package]] -name = "libp2p-gossipsub" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74b4b888cfbeb1f5551acd3aa1366e01bf88ede26cc3c4645d0d2d004d5ca7b0" -dependencies = [ - "asynchronous-codec", - "base64", - "byteorder", - "bytes", - "fnv", - "futures", - "hex_fmt", - "instant", - "libp2p-core", - "libp2p-swarm", - "log", - "prometheus-client", - "prost 0.10.3", - "prost-build 0.10.4", - "rand 0.7.3", - "regex", - "sha2 0.10.2", - "smallvec", - "unsigned-varint", - "wasm-timer", -] - [[package]] name = "libp2p-identify" -version = "0.37.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50b585518f8efd06f93ac2f976bd672e17cdac794644b3117edd078e96bda06" +checksum = "dcf9a121f699e8719bda2e6e9e9b6ddafc6cff4602471d6481c1067930ccb29b" dependencies = [ "asynchronous-codec", "futures", @@ -4314,9 +4206,9 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "lru 0.7.7", - "prost 0.10.3", - "prost-build 0.10.4", + "lru 0.8.1", + "prost", + "prost-build", "prost-codec", "smallvec", "thiserror", @@ -4325,9 +4217,9 @@ dependencies = [ [[package]] name = "libp2p-kad" -version = "0.38.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "740862893bb5f06ac24acc9d49bdeadc3a5e52e51818a30a25c1f3519da2c851" +checksum = "6721c200e2021f6c3fab8b6cf0272ead8912d871610ee194ebd628cecf428f22" dependencies = [ "arrayvec 0.7.2", "asynchronous-codec", @@ -4340,9 +4232,9 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "prost 0.10.3", - "prost-build 0.10.4", - "rand 0.7.3", + "prost", + "prost-build", + "rand 0.8.5", "sha2 0.10.2", "smallvec", "thiserror", @@ -4353,16 +4245,15 @@ dependencies = [ [[package]] name = "libp2p-mdns" -version = "0.38.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66e5e5919509603281033fd16306c61df7a4428ce274b67af5e14b07de5cdcb2" +checksum = "761704e727f7d68d58d7bc2231eafae5fc1b9814de24290f126df09d4bd37a15" dependencies = [ "async-io", "data-encoding", "dns-parser", "futures", "if-watch", - "lazy_static", "libp2p-core", "libp2p-swarm", "log", @@ -4374,25 +4265,23 @@ dependencies = [ [[package]] name = "libp2p-metrics" -version = "0.7.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8aff4a1abef42328fbb30b17c853fff9be986dc39af17ee39f9c5f755c5e0c" +checksum = "9ee31b08e78b7b8bfd1c4204a9dd8a87b4fcdf6dafc57eb51701c1c264a81cb9" dependencies = [ "libp2p-core", - "libp2p-gossipsub", "libp2p-identify", "libp2p-kad", "libp2p-ping", - "libp2p-relay", "libp2p-swarm", "prometheus-client", ] [[package]] name = "libp2p-mplex" -version = "0.34.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61fd1b20638ec209c5075dfb2e8ce6a7ea4ec3cd3ad7b77f7a477c06d53322e2" +checksum = "692664acfd98652de739a8acbb0a0d670f1d67190a49be6b4395e22c37337d89" dependencies = [ "asynchronous-codec", "bytes", @@ -4401,16 +4290,16 @@ dependencies = [ "log", "nohash-hasher", "parking_lot 0.12.1", - "rand 0.7.3", + "rand 0.8.5", "smallvec", "unsigned-varint", ] [[package]] name = "libp2p-noise" -version = "0.37.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "762408cb5d84b49a600422d7f9a42c18012d8da6ebcd570f9a4a4290ba41fb6f" +checksum = "048155686bd81fe6cb5efdef0c6290f25ad32a0a42e8f4f72625cf6a505a206f" dependencies = [ "bytes", "curve25519-dalek 3.2.0", @@ -4418,8 +4307,8 @@ dependencies = [ "lazy_static", "libp2p-core", "log", - "prost 0.10.3", - "prost-build 0.10.4", + "prost", + "prost-build", "rand 0.8.5", "sha2 0.10.2", "snow", @@ -4430,105 +4319,25 @@ dependencies = [ [[package]] name = "libp2p-ping" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "100a6934ae1dbf8a693a4e7dd1d730fd60b774dafc45688ed63b554497c6c925" -dependencies = [ - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-swarm", - "log", - "rand 0.7.3", - "void", -] - -[[package]] -name = "libp2p-plaintext" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be27bf0820a6238a4e06365b096d428271cce85a129cf16f2fe9eb1610c4df86" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "libp2p-core", - "log", - "prost 0.10.3", - "prost-build 0.10.4", - "unsigned-varint", - "void", -] - -[[package]] -name = "libp2p-pnet" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f1a458bbda880107b5b36fcb9b5a1ef0c329685da0e203ed692a8ebe64cc92c" -dependencies = [ - "futures", - "log", - "pin-project", - "rand 0.7.3", - "salsa20", - "sha3 0.9.1", -] - -[[package]] -name = "libp2p-relay" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4931547ee0cce03971ccc1733ff05bb0c4349fd89120a39e9861e2bbe18843c3" -dependencies = [ - "asynchronous-codec", - "bytes", - "either", - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-swarm", - "log", - "pin-project", - "prost 0.10.3", - "prost-build 0.10.4", - "prost-codec", - "rand 0.8.5", - "smallvec", - "static_assertions", - "thiserror", - "void", -] - -[[package]] -name = "libp2p-rendezvous" -version = "0.7.0" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9511c9672ba33284838e349623319c8cad2d18cfad243ae46c6b7e8a2982ea4e" +checksum = "7228b9318d34689521349a86eb39a3c3a802c9efc99a0568062ffb80913e3f91" dependencies = [ - "asynchronous-codec", - "bimap", "futures", "futures-timer", "instant", "libp2p-core", "libp2p-swarm", "log", - "prost 0.10.3", - "prost-build 0.10.4", "rand 0.8.5", - "sha2 0.10.2", - "thiserror", - "unsigned-varint", "void", ] [[package]] name = "libp2p-request-response" -version = "0.19.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "508a189e2795d892c8f5c1fa1e9e0b1845d32d7b0b249dbf7b05b18811361843" +checksum = "8827af16a017b65311a410bb626205a9ad92ec0473967618425039fa5231adc1" dependencies = [ "async-trait", "bytes", @@ -4537,16 +4346,16 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "rand 0.7.3", + "rand 0.8.5", "smallvec", "unsigned-varint", ] [[package]] name = "libp2p-swarm" -version = "0.37.0" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ac5be6c2de2d1ff3f7693fda6faf8a827b1f3e808202277783fea9f527d114" +checksum = "46d13df7c37807965d82930c0e4b04a659efcb6cca237373b206043db5398ecf" dependencies = [ "either", "fnv", @@ -4556,7 +4365,7 @@ dependencies = [ "libp2p-core", "log", "pin-project", - "rand 0.7.3", + "rand 0.8.5", "smallvec", "thiserror", "void", @@ -4564,48 +4373,36 @@ dependencies = [ [[package]] name = "libp2p-swarm-derive" -version = "0.28.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f54a64b6957249e0ce782f8abf41d97f69330d02bf229f0672d864f0650cc76" +checksum = "a0eddc4497a8b5a506013c40e8189864f9c3a00db2b25671f428ae9007f3ba32" dependencies = [ + "heck", "quote", "syn", ] [[package]] name = "libp2p-tcp" -version = "0.34.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a6771dc19aa3c65d6af9a8c65222bfc8fcd446630ddca487acd161fa6096f3b" +checksum = "9839d96761491c6d3e238e70554b856956fca0ab60feb9de2cd08eed4473fa92" dependencies = [ "async-io", "futures", "futures-timer", "if-watch", - "ipnet", "libc", "libp2p-core", "log", "socket2", ] -[[package]] -name = "libp2p-uds" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d125e3e5f0d58f3c6ac21815b20cf4b6a88b8db9dc26368ea821838f4161fd4d" -dependencies = [ - "async-std", - "futures", - "libp2p-core", - "log", -] - [[package]] name = "libp2p-wasm-ext" -version = "0.34.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec894790eec3c1608f8d1a8a0bdf0dbeb79ed4de2dce964222011c2896dfa05a" +checksum = "a17b5b8e7a73e379e47b1b77f8a82c4721e97eca01abcd18e9cd91a23ca6ce97" dependencies = [ "futures", "js-sys", @@ -4617,9 +4414,9 @@ dependencies = [ [[package]] name = "libp2p-websocket" -version = "0.36.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9808e57e81be76ff841c106b4c5974fb4d41a233a7bdd2afbf1687ac6def3818" +checksum = "3758ae6f89b2531a24b6d9f5776bda6a626b60a57600d7185d43dfa75ca5ecc4" dependencies = [ "either", "futures", @@ -4636,12 +4433,13 @@ dependencies = [ [[package]] name = "libp2p-yamux" -version = "0.38.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6dea686217a06072033dc025631932810e2f6ad784e4fafa42e27d311c7a81c" +checksum = "30f079097a21ad017fc8139460630286f02488c8c13b26affb46623aa20d8845" dependencies = [ "futures", "libp2p-core", + "log", "parking_lot 0.12.1", "thiserror", "yamux", @@ -5051,7 +4849,7 @@ dependencies = [ "digest 0.10.3", "multihash-derive", "sha2 0.10.2", - "sha3 0.10.0", + "sha3", "unsigned-varint", ] @@ -5077,9 +4875,9 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "multistream-select" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "363a84be6453a70e63513660f4894ef815daf88e3356bffcda9ca27d810ce83b" +checksum = "9bc41247ec209813e2fd414d6e16b9d94297dacf3cd613fa6ef09cd4d9755c10" dependencies = [ "bytes", "futures", @@ -5147,9 +4945,9 @@ dependencies = [ [[package]] name = "netlink-packet-route" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "733ea73609acfd7fa7ddadfb7bf709b0471668c456ad9513685af543a06342b2" +checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" dependencies = [ "anyhow", "bitflags", @@ -5173,23 +4971,24 @@ dependencies = [ [[package]] name = "netlink-proto" -version = "0.9.2" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8785b8141e8432aa45fceb922a7e876d7da3fad37fa7e7ec702ace3aa0826b" +checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6" dependencies = [ "bytes", "futures", "log", "netlink-packet-core", "netlink-sys", + "thiserror", "tokio", ] [[package]] name = "netlink-sys" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c9f9547a08241bee7b6558b9b98e1f290d187de8b7cfca2bbb4937bcaa8f8" +checksum = "92b654097027250401127914afb37cb1f311df6610a9891ff07a757e94199027" dependencies = [ "async-io", "bytes", @@ -5200,15 +4999,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.22.3" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" +checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" dependencies = [ "bitflags", - "cc", "cfg-if 1.0.0", "libc", - "memoffset", ] [[package]] @@ -5447,19 +5244,10 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" -[[package]] -name = "owning_ref" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce" -dependencies = [ - "stable_deref_trait", -] - [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "array-bytes", "frame-benchmarking", @@ -5480,7 +5268,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support", "frame-system", @@ -5497,7 +5285,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -5511,7 +5299,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support", "frame-system", @@ -5527,7 +5315,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support", "frame-system", @@ -5543,7 +5331,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support", "frame-system", @@ -5558,7 +5346,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -5582,7 +5370,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5602,7 +5390,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -5617,7 +5405,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "beefy-primitives", "frame-support", @@ -5633,7 +5421,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "array-bytes", "beefy-merkle-tree", @@ -5656,7 +5444,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -5674,7 +5462,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -5718,7 +5506,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -5735,7 +5523,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "bitflags", "frame-benchmarking", @@ -5764,7 +5552,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "bitflags", "parity-scale-codec", @@ -5776,7 +5564,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "proc-macro2", "quote", @@ -5786,7 +5574,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "assert_matches", "frame-benchmarking", @@ -5803,7 +5591,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -5821,7 +5609,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5845,7 +5633,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5858,7 +5646,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -5876,7 +5664,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5897,7 +5685,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -5912,7 +5700,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -5935,7 +5723,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5951,7 +5739,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -5971,7 +5759,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -5988,7 +5776,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -6005,7 +5793,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -6023,7 +5811,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -6038,7 +5826,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -6054,7 +5842,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support", "frame-system", @@ -6071,7 +5859,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6091,7 +5879,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "parity-scale-codec", "sp-api", @@ -6101,7 +5889,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support", "frame-system", @@ -6118,7 +5906,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6141,7 +5929,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -6158,7 +5946,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -6173,7 +5961,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support", "frame-system", @@ -6187,7 +5975,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -6205,7 +5993,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -6220,7 +6008,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "assert_matches", "frame-benchmarking", @@ -6238,7 +6026,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -6254,7 +6042,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support", "frame-system", @@ -6275,7 +6063,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -6291,7 +6079,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support", "frame-system", @@ -6305,7 +6093,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6328,7 +6116,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6339,7 +6127,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "log", "sp-arithmetic", @@ -6348,7 +6136,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support", "frame-system", @@ -6377,7 +6165,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -6395,7 +6183,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -6414,7 +6202,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-support", "frame-system", @@ -6430,7 +6218,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6445,7 +6233,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6456,7 +6244,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -6473,7 +6261,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -6488,7 +6276,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -6504,7 +6292,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -6519,7 +6307,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-benchmarking", "frame-support", @@ -6534,7 +6322,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "frame-support", "frame-system", @@ -6552,7 +6340,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "frame-benchmarking", "frame-support", @@ -6581,7 +6369,7 @@ dependencies = [ name = "parachain-template-node" version = "0.1.0" dependencies = [ - "clap", + "clap 4.0.11", "cumulus-client-cli", "cumulus-client-consensus-aura", "cumulus-client-consensus-common", @@ -7106,7 +6894,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7121,7 +6909,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -7135,7 +6923,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "derive_more", "fatality", @@ -7158,7 +6946,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "fatality", "futures", @@ -7179,9 +6967,9 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ - "clap", + "clap 4.0.11", "frame-benchmarking-cli", "futures", "log", @@ -7205,7 +6993,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7246,7 +7034,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "always-assert", "bitvec", @@ -7268,7 +7056,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7281,7 +7069,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "derive_more", "fatality", @@ -7306,7 +7094,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7320,7 +7108,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "futures", "futures-timer", @@ -7340,7 +7128,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "always-assert", "async-trait", @@ -7364,7 +7152,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "futures", "parity-scale-codec", @@ -7382,7 +7170,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "bitvec", "derive_more", @@ -7411,7 +7199,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "bitvec", "futures", @@ -7431,7 +7219,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "bitvec", "fatality", @@ -7450,7 +7238,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7465,7 +7253,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "async-trait", "futures", @@ -7483,7 +7271,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7498,7 +7286,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "futures", "futures-timer", @@ -7515,7 +7303,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "fatality", "futures", @@ -7534,7 +7322,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "async-trait", "futures", @@ -7551,7 +7339,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "bitvec", "fatality", @@ -7569,7 +7357,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "always-assert", "assert_matches", @@ -7601,7 +7389,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "futures", "polkadot-node-primitives", @@ -7617,7 +7405,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "futures", "memory-lru", @@ -7633,7 +7421,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "async-std", "lazy_static", @@ -7651,7 +7439,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "bs58", "futures", @@ -7670,7 +7458,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "async-trait", "derive_more", @@ -7693,7 +7481,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "bounded-vec", "futures", @@ -7715,7 +7503,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7725,7 +7513,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "async-trait", "futures", @@ -7743,7 +7531,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "async-trait", "derive_more", @@ -7766,7 +7554,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "async-trait", "derive_more", @@ -7799,7 +7587,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "async-trait", "futures", @@ -7822,7 +7610,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "derive_more", "frame-support", @@ -7842,7 +7630,7 @@ version = "0.9.300" dependencies = [ "assert_cmd", "async-trait", - "clap", + "clap 4.0.11", "collectives-polkadot-runtime", "contracts-rococo-runtime", "cumulus-client-cli", @@ -7920,7 +7708,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7935,7 +7723,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "bitvec", "frame-system", @@ -7965,7 +7753,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7997,7 +7785,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "beefy-primitives", "bitvec", @@ -8086,7 +7874,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "beefy-primitives", "bitvec", @@ -8133,7 +7921,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "frame-support", "polkadot-primitives", @@ -8145,7 +7933,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "bs58", "parity-scale-codec", @@ -8157,7 +7945,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "bitflags", "bitvec", @@ -8200,7 +7988,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "async-trait", "beefy-gadget", @@ -8305,7 +8093,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8326,7 +8114,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8336,7 +8124,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8361,7 +8149,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "beefy-primitives", "bitvec", @@ -8422,7 +8210,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "frame-benchmarking", "frame-system", @@ -8643,37 +8431,27 @@ dependencies = [ [[package]] name = "prometheus-client" -version = "0.16.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1abe0255c04d15f571427a2d1e00099016506cf3297b53853acd2b7eb87825" +checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" dependencies = [ "dtoa", "itoa 1.0.1", - "owning_ref", + "parking_lot 0.12.1", "prometheus-client-derive-text-encode", ] [[package]] name = "prometheus-client-derive-text-encode" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8e12d01b9d66ad9eb4529c57666b6263fc1993cb30261d83ead658fdd932652" +checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" dependencies = [ "proc-macro2", "quote", "syn", ] -[[package]] -name = "prost" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc03e116981ff7d8da8e5c220e374587b98d294af7ba7dd7fda761158f00086f" -dependencies = [ - "bytes", - "prost-derive 0.10.1", -] - [[package]] name = "prost" version = "0.11.0" @@ -8681,29 +8459,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "399c3c31cdec40583bb68f0b18403400d01ec4289c383aa047560439952c4dd7" dependencies = [ "bytes", - "prost-derive 0.11.0", -] - -[[package]] -name = "prost-build" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae5a4388762d5815a9fc0dea33c56b021cdc8dde0c55e0c9ca57197254b0cab" -dependencies = [ - "bytes", - "cfg-if 1.0.0", - "cmake", - "heck", - "itertools", - "lazy_static", - "log", - "multimap", - "petgraph", - "prost 0.10.3", - "prost-types 0.10.1", - "regex", - "tempfile", - "which", + "prost-derive", ] [[package]] @@ -8719,8 +8475,8 @@ dependencies = [ "log", "multimap", "petgraph", - "prost 0.11.0", - "prost-types 0.11.1", + "prost", + "prost-types", "regex", "tempfile", "which", @@ -8728,30 +8484,17 @@ dependencies = [ [[package]] name = "prost-codec" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00af1e92c33b4813cc79fda3f2dbf56af5169709be0202df730e9ebc3e4cd007" +checksum = "011ae9ff8359df7915f97302d591cdd9e0e27fbd5a4ddc5bd13b71079bb20987" dependencies = [ "asynchronous-codec", "bytes", - "prost 0.10.3", + "prost", "thiserror", "unsigned-varint", ] -[[package]] -name = "prost-derive" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "prost-derive" version = "0.11.0" @@ -8765,16 +8508,6 @@ dependencies = [ "syn", ] -[[package]] -name = "prost-types" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68" -dependencies = [ - "bytes", - "prost 0.10.3", -] - [[package]] name = "prost-types" version = "0.11.1" @@ -8782,7 +8515,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dfaa718ad76a44b3415e6c4d53b17c8f99160dcb3a99b10470fce8ad43f6e3e" dependencies = [ "bytes", - "prost 0.11.0", + "prost", ] [[package]] @@ -9056,7 +8789,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -9175,7 +8908,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9259,7 +8992,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "frame-support", "polkadot-primitives", @@ -9280,16 +9013,16 @@ dependencies = [ [[package]] name = "rtnetlink" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f54290e54521dac3de4149d83ddf9f62a359b3cc93bcb494a794a41e6f4744b" +checksum = "322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0" dependencies = [ "async-global-executor", "futures", "log", "netlink-packet-route", "netlink-proto", - "nix 0.22.3", + "nix 0.24.2", "thiserror", ] @@ -9408,15 +9141,6 @@ dependencies = [ "rustc_version 0.2.3", ] -[[package]] -name = "salsa20" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0fbb5f676da676c260ba276a8f43a8dc67cf02d1438423aeb1c677a7212686" -dependencies = [ - "cipher", -] - [[package]] name = "same-file" version = "1.0.6" @@ -9429,7 +9153,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "log", "sp-core", @@ -9440,7 +9164,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "futures", @@ -9449,8 +9173,8 @@ dependencies = [ "libp2p", "log", "parity-scale-codec", - "prost 0.11.0", - "prost-build 0.11.1", + "prost", + "prost-build", "rand 0.7.3", "sc-client-api", "sc-network-common", @@ -9467,7 +9191,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "futures", "futures-timer", @@ -9490,7 +9214,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9506,7 +9230,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9523,7 +9247,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9534,11 +9258,11 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "array-bytes", "chrono", - "clap", + "clap 4.0.11", "fdlimit", "futures", "libp2p", @@ -9574,7 +9298,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "fnv", "futures", @@ -9602,7 +9326,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "hash-db", "kvdb", @@ -9627,7 +9351,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "futures", @@ -9651,7 +9375,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "futures", @@ -9680,7 +9404,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "fork-tree", @@ -9722,7 +9446,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "futures", "jsonrpsee", @@ -9744,7 +9468,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9757,7 +9481,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "futures", @@ -9781,7 +9505,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9808,7 +9532,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "environmental", "parity-scale-codec", @@ -9824,7 +9548,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "log", "parity-scale-codec", @@ -9839,7 +9563,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9859,7 +9583,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "ahash", "array-bytes", @@ -9900,7 +9624,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "finality-grandpa", "futures", @@ -9921,7 +9645,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "ansi_term", "futures", @@ -9938,7 +9662,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "array-bytes", "async-trait", @@ -9953,7 +9677,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "array-bytes", "async-trait", @@ -9975,7 +9699,7 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.12.1", "pin-project", - "prost 0.11.0", + "prost", "rand 0.7.3", "sc-block-builder", "sc-client-api", @@ -10000,14 +9724,14 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "cid", "futures", "libp2p", "log", - "prost 0.11.0", - "prost-build 0.11.1", + "prost", + "prost-build", "sc-client-api", "sc-network-common", "sp-blockchain", @@ -10020,7 +9744,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "bitflags", @@ -10030,7 +9754,7 @@ dependencies = [ "libp2p", "linked_hash_set", "parity-scale-codec", - "prost-build 0.11.1", + "prost-build", "sc-consensus", "sc-peerset", "serde", @@ -10046,7 +9770,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "ahash", "futures", @@ -10064,15 +9788,15 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "array-bytes", "futures", "libp2p", "log", "parity-scale-codec", - "prost 0.11.0", - "prost-build 0.11.1", + "prost", + "prost-build", "sc-client-api", "sc-network-common", "sc-peerset", @@ -10085,7 +9809,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "array-bytes", "fork-tree", @@ -10095,8 +9819,8 @@ dependencies = [ "lru 0.7.7", "mockall", "parity-scale-codec", - "prost 0.11.0", - "prost-build 0.11.1", + "prost", + "prost-build", "sc-client-api", "sc-consensus", "sc-network-common", @@ -10115,7 +9839,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "array-bytes", "futures", @@ -10134,7 +9858,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "array-bytes", "bytes", @@ -10164,7 +9888,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "futures", "libp2p", @@ -10177,7 +9901,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10186,7 +9910,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "futures", "hash-db", @@ -10216,7 +9940,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "futures", "jsonrpsee", @@ -10239,7 +9963,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "futures", "jsonrpsee", @@ -10252,7 +9976,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "futures", "hex", @@ -10271,7 +9995,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "directories", @@ -10342,7 +10066,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "log", "parity-scale-codec", @@ -10356,7 +10080,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10375,7 +10099,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "futures", "libc", @@ -10394,7 +10118,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "chrono", "futures", @@ -10412,7 +10136,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "ansi_term", "atty", @@ -10443,7 +10167,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10454,7 +10178,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "futures", @@ -10481,7 +10205,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "futures", @@ -10495,7 +10219,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "futures", "futures-timer", @@ -10801,18 +10525,6 @@ dependencies = [ "digest 0.10.3", ] -[[package]] -name = "sha3" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "keccak", - "opaque-debug 0.3.0", -] - [[package]] name = "sha3" version = "0.10.0" @@ -10925,7 +10637,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "enumn", "parity-scale-codec", @@ -11001,7 +10713,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "hash-db", "log", @@ -11019,7 +10731,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "blake2", "proc-macro-crate", @@ -11031,7 +10743,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "parity-scale-codec", "scale-info", @@ -11044,7 +10756,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "integer-sqrt", "num-traits", @@ -11059,7 +10771,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "parity-scale-codec", "scale-info", @@ -11072,7 +10784,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "parity-scale-codec", @@ -11084,7 +10796,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "parity-scale-codec", "sp-api", @@ -11096,7 +10808,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "futures", "log", @@ -11114,7 +10826,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "futures", @@ -11133,7 +10845,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "parity-scale-codec", @@ -11151,7 +10863,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "merlin", @@ -11174,7 +10886,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "parity-scale-codec", "scale-info", @@ -11188,7 +10900,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "parity-scale-codec", "scale-info", @@ -11201,7 +10913,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "array-bytes", "base58", @@ -11247,13 +10959,13 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "blake2", "byteorder", "digest 0.10.3", "sha2 0.10.2", - "sha3 0.10.0", + "sha3", "sp-std", "twox-hash", ] @@ -11261,7 +10973,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "proc-macro2", "quote", @@ -11272,7 +10984,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -11281,7 +10993,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "proc-macro2", "quote", @@ -11291,7 +11003,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "environmental", "parity-scale-codec", @@ -11302,7 +11014,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "finality-grandpa", "log", @@ -11320,7 +11032,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11334,7 +11046,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "bytes", "futures", @@ -11360,7 +11072,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "lazy_static", "sp-core", @@ -11371,7 +11083,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "futures", @@ -11388,7 +11100,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "thiserror", "zstd", @@ -11397,7 +11109,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "log", "parity-scale-codec", @@ -11413,7 +11125,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "parity-scale-codec", "scale-info", @@ -11427,7 +11139,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "sp-api", "sp-core", @@ -11437,7 +11149,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "backtrace", "lazy_static", @@ -11447,7 +11159,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "rustc-hash", "serde", @@ -11457,7 +11169,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "either", "hash256-std-hasher", @@ -11480,7 +11192,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11498,7 +11210,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "Inflector", "proc-macro-crate", @@ -11510,7 +11222,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "log", "parity-scale-codec", @@ -11524,7 +11236,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "serde", "serde_json", @@ -11533,7 +11245,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "parity-scale-codec", "scale-info", @@ -11547,7 +11259,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "parity-scale-codec", "scale-info", @@ -11558,7 +11270,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "hash-db", "log", @@ -11580,12 +11292,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11598,7 +11310,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "log", "sp-core", @@ -11611,7 +11323,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "futures-timer", @@ -11627,7 +11339,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "parity-scale-codec", "sp-std", @@ -11639,7 +11351,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "sp-api", "sp-runtime", @@ -11648,7 +11360,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "async-trait", "log", @@ -11664,7 +11376,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "ahash", "hash-db", @@ -11687,7 +11399,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11704,7 +11416,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11715,7 +11427,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "impl-trait-for-tuples", "log", @@ -11728,7 +11440,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -12024,7 +11736,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "platforms", ] @@ -12032,7 +11744,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -12053,7 +11765,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "futures-util", "hyper", @@ -12066,7 +11778,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "jsonrpsee", "log", @@ -12087,7 +11799,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "array-bytes", "async-trait", @@ -12113,7 +11825,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "futures", "substrate-test-utils-derive", @@ -12123,7 +11835,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -12134,7 +11846,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ "ansi_term", "build-helper", @@ -12242,7 +11954,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "frame-support", "polkadot-primitives", @@ -12522,7 +12234,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12533,7 +12245,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12610,9 +12322,9 @@ dependencies = [ [[package]] name = "trust-dns-proto" -version = "0.21.2" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d" +checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" dependencies = [ "async-trait", "cfg-if 1.0.0", @@ -12624,30 +12336,30 @@ dependencies = [ "idna 0.2.3", "ipnet", "lazy_static", - "log", "rand 0.8.5", "smallvec", "thiserror", "tinyvec", + "tracing", "url", ] [[package]] name = "trust-dns-resolver" -version = "0.21.2" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558" +checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe" dependencies = [ "cfg-if 1.0.0", "futures-util", "ipconfig", "lazy_static", - "log", "lru-cache", "parking_lot 0.12.1", "resolv-conf", "smallvec", "thiserror", + "tracing", "trust-dns-proto", ] @@ -12660,9 +12372,9 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#30a7a5b4b71f23971742684889f9fdec5f5854a9" +source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" dependencies = [ - "clap", + "clap 4.0.11", "frame-try-runtime", "jsonrpsee", "log", @@ -13249,7 +12961,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "beefy-primitives", "bitvec", @@ -13339,7 +13051,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "frame-support", "polkadot-primitives", @@ -13463,15 +13175,15 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.29.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac7fef12f4b59cd0a29339406cc9203ab44e440ddff6b3f5a41455349fa9cf3" +checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f" dependencies = [ - "windows_aarch64_msvc 0.29.0", - "windows_i686_gnu 0.29.0", - "windows_i686_msvc 0.29.0", - "windows_x86_64_gnu 0.29.0", - "windows_x86_64_msvc 0.29.0", + "windows_aarch64_msvc 0.34.0", + "windows_i686_gnu 0.34.0", + "windows_i686_msvc 0.34.0", + "windows_x86_64_gnu 0.34.0", + "windows_x86_64_msvc 0.34.0", ] [[package]] @@ -13502,15 +13214,15 @@ dependencies = [ [[package]] name = "windows_aarch64_msvc" -version = "0.29.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d027175d00b01e0cbeb97d6ab6ebe03b12330a35786cbaca5252b1c4bf5d9b" +checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" [[package]] name = "windows_aarch64_msvc" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" +checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_aarch64_msvc" @@ -13520,15 +13232,15 @@ checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] name = "windows_i686_gnu" -version = "0.29.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8793f59f7b8e8b01eda1a652b2697d87b93097198ae85f823b969ca5b89bba58" +checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" [[package]] name = "windows_i686_gnu" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" +checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_gnu" @@ -13538,15 +13250,15 @@ checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] name = "windows_i686_msvc" -version = "0.29.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8602f6c418b67024be2996c512f5f995de3ba417f4c75af68401ab8756796ae4" +checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" [[package]] name = "windows_i686_msvc" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" +checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_i686_msvc" @@ -13556,15 +13268,15 @@ checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] name = "windows_x86_64_gnu" -version = "0.29.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d615f419543e0bd7d2b3323af0d86ff19cbc4f816e6453f36a2c2ce889c354" +checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" [[package]] name = "windows_x86_64_gnu" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" +checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_gnu" @@ -13574,15 +13286,15 @@ checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] name = "windows_x86_64_msvc" -version = "0.29.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d95421d9ed3672c280884da53201a5c46b7b2765ca6faf34b0d71cf34a3561" +checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" [[package]] name = "windows_x86_64_msvc" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" +checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" @@ -13622,7 +13334,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13636,7 +13348,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "frame-support", "frame-system", @@ -13656,7 +13368,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "frame-benchmarking", "frame-support", @@ -13674,7 +13386,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#828fa9ee95115989ca98463ab113f59cbb16aa9a" +source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" dependencies = [ "Inflector", "proc-macro2", diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index 4f20e564ddb..968d19e8000 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2021" [dependencies] -clap = { version = "3.2.22", features = ["derive", "deprecated"] } +clap = { version = "4.0.9", features = ["derive"] } codec = { package = "parity-scale-codec", version = "3.0.0" } url = "2.3.1" diff --git a/client/cli/src/lib.rs b/client/cli/src/lib.rs index 6afe0c53b66..ae7943f99aa 100644 --- a/client/cli/src/lib.rs +++ b/client/cli/src/lib.rs @@ -40,17 +40,18 @@ use url::Url; /// The `purge-chain` command used to remove the whole chain: the parachain and the relay chain. #[derive(Debug, clap::Parser)] +#[group(skip)] pub struct PurgeChainCmd { /// The base struct of the purge-chain command. - #[clap(flatten)] + #[command(flatten)] pub base: sc_cli::PurgeChainCmd, /// Only delete the para chain database - #[clap(long, aliases = &["para"])] + #[arg(long, aliases = &["para"])] pub parachain: bool, /// Only delete the relay chain database - #[clap(long, aliases = &["relay"])] + #[arg(long, aliases = &["relay"])] pub relaychain: bool, } @@ -131,15 +132,15 @@ impl sc_cli::CliConfiguration for PurgeChainCmd { #[derive(Debug, clap::Parser)] pub struct ExportGenesisStateCommand { /// Output file name or stdout if unspecified. - #[clap(action)] + #[arg()] pub output: Option, /// Write output in binary. Default is to write in hex. - #[clap(short, long)] + #[arg(short, long)] pub raw: bool, #[allow(missing_docs)] - #[clap(flatten)] + #[command(flatten)] pub shared_params: sc_cli::SharedParams, } @@ -214,15 +215,15 @@ impl sc_cli::CliConfiguration for ExportGenesisStateCommand { #[derive(Debug, clap::Parser)] pub struct ExportGenesisWasmCommand { /// Output file name or stdout if unspecified. - #[clap(action)] + #[arg()] pub output: Option, /// Write output in binary. Default is to write in hex. - #[clap(short, long)] + #[arg(short, long)] pub raw: bool, #[allow(missing_docs)] - #[clap(flatten)] + #[command(flatten)] pub shared_params: sc_cli::SharedParams, } @@ -277,19 +278,20 @@ fn validate_relay_chain_url(arg: &str) -> Result { /// The `run` command used to run a node. #[derive(Debug, clap::Parser)] +#[group(skip)] pub struct RunCmd { /// The cumulus RunCmd inherents from sc_cli's - #[clap(flatten)] + #[command(flatten)] pub base: sc_cli::RunCmd, /// Run node as collator. /// /// Note that this is the same as running with `--validator`. - #[clap(long, conflicts_with = "validator")] + #[arg(long, conflicts_with = "validator")] pub collator: bool, /// EXPERIMENTAL: Specify an URL to a relay chain full node to communicate with. - #[clap( + #[arg( long, value_parser = validate_relay_chain_url )] diff --git a/parachain-template/node/Cargo.toml b/parachain-template/node/Cargo.toml index 6db0087fffe..6c4fb545711 100644 --- a/parachain-template/node/Cargo.toml +++ b/parachain-template/node/Cargo.toml @@ -10,7 +10,7 @@ edition = "2021" build = "build.rs" [dependencies] -clap = { version = "3.2.22", features = ["derive"] } +clap = { version = "4.0.9", features = ["derive"] } log = "0.4.17" codec = { package = "parity-scale-codec", version = "3.0.0" } serde = { version = "1.0.145", features = ["derive"] } diff --git a/parachain-template/node/src/cli.rs b/parachain-template/node/src/cli.rs index 949ce489d6e..99bb0a96bc9 100644 --- a/parachain-template/node/src/cli.rs +++ b/parachain-template/node/src/cli.rs @@ -32,7 +32,7 @@ pub enum Subcommand { /// Sub-commands concerned with benchmarking. /// The pallet benchmarking moved to the `pallet` sub-command. - #[clap(subcommand)] + #[command(subcommand)] Benchmark(frame_benchmarking_cli::BenchmarkCmd), /// Try some testing command against a specified runtime state. @@ -40,16 +40,16 @@ pub enum Subcommand { } #[derive(Debug, clap::Parser)] -#[clap( +#[command( propagate_version = true, args_conflicts_with_subcommands = true, subcommand_negates_reqs = true )] pub struct Cli { - #[clap(subcommand)] + #[command(subcommand)] pub subcommand: Option, - #[clap(flatten)] + #[command(flatten)] pub run: cumulus_client_cli::RunCmd, /// Disable automatic hardware benchmarks. @@ -59,11 +59,11 @@ pub struct Cli { /// /// The results are then printed out in the logs, and also sent as part of /// telemetry, if telemetry is enabled. - #[clap(long)] + #[arg(long)] pub no_hardware_benchmarks: bool, /// Relay chain arguments - #[clap(raw = true)] + #[arg(raw = true)] pub relay_chain_args: Vec, } diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index a871294aad9..bb06fa08f96 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -8,7 +8,7 @@ description = "Runs a polkadot parachain node which could be a collator." [dependencies] async-trait = "0.1.57" -clap = { version = "3.2.22", features = ["derive", "deprecated"] } +clap = { version = "4.0.9", features = ["derive"] } codec = { package = "parity-scale-codec", version = "3.0.0" } futures = "0.3.24" hex-literal = "0.3.4" diff --git a/polkadot-parachain/src/cli.rs b/polkadot-parachain/src/cli.rs index 36a4cfd562d..b5df0b83643 100644 --- a/polkadot-parachain/src/cli.rs +++ b/polkadot-parachain/src/cli.rs @@ -20,7 +20,7 @@ use std::path::PathBuf; #[derive(Debug, clap::Subcommand)] pub enum Subcommand { /// Key management CLI utilities - #[clap(subcommand)] + #[command(subcommand)] Key(sc_cli::KeySubcommand), /// Build a chain specification. @@ -52,7 +52,7 @@ pub enum Subcommand { /// Sub-commands concerned with benchmarking. /// The pallet benchmarking moved to the `pallet` sub-command. - #[clap(subcommand)] + #[command(subcommand)] Benchmark(frame_benchmarking_cli::BenchmarkCmd), /// Try some testing command against a specified runtime state. @@ -60,16 +60,16 @@ pub enum Subcommand { } #[derive(Debug, clap::Parser)] -#[clap( +#[command( propagate_version = true, args_conflicts_with_subcommands = true, subcommand_negates_reqs = true )] pub struct Cli { - #[clap(subcommand)] + #[command(subcommand)] pub subcommand: Option, - #[clap(flatten)] + #[command(flatten)] pub run: cumulus_client_cli::RunCmd, /// Disable automatic hardware benchmarks. @@ -79,11 +79,11 @@ pub struct Cli { /// /// The results are then printed out in the logs, and also sent as part of /// telemetry, if telemetry is enabled. - #[clap(long)] + #[arg(long)] pub no_hardware_benchmarks: bool, /// Relay chain arguments - #[clap(raw = true)] + #[arg(raw = true)] pub relaychain_args: Vec, } diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index 1d4648d378d..2e9c07f7718 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -10,7 +10,7 @@ path = "src/main.rs" [dependencies] async-trait = "0.1.57" -clap = { version = "3.2.22", features = ["derive", "deprecated"] } +clap = { version = "4.0.9", features = ["derive"] } codec = { package = "parity-scale-codec", version = "3.0.0" } criterion = { version = "0.4.0", features = [ "async_tokio" ] } jsonrpsee = { version = "0.15.1", features = ["server"] } diff --git a/test/service/src/cli.rs b/test/service/src/cli.rs index 4cf4b925997..31829a66d26 100644 --- a/test/service/src/cli.rs +++ b/test/service/src/cli.rs @@ -24,30 +24,30 @@ use sc_cli::{ use sc_service::BasePath; #[derive(Debug, clap::Parser)] -#[clap( +#[command( version, propagate_version = true, args_conflicts_with_subcommands = true, subcommand_negates_reqs = true )] pub struct TestCollatorCli { - #[clap(subcommand)] + #[command(subcommand)] pub subcommand: Option, - #[clap(flatten)] + #[command(flatten)] pub run: cumulus_client_cli::RunCmd, - #[clap(default_value_t = 2000u32)] + #[arg(default_value_t = 2000u32)] pub parachain_id: u32, /// Relay chain arguments - #[clap(raw = true)] + #[arg(raw = true)] pub relaychain_args: Vec, - #[clap(long)] + #[arg(long)] pub use_null_consensus: bool, - #[clap(long)] + #[arg(long)] pub disable_block_announcements: bool, } @@ -64,11 +64,12 @@ pub enum Subcommand { } #[derive(Debug, clap::Parser)] +#[group(skip)] pub struct ExportGenesisStateCommand { - #[clap(default_value_t = 2000u32)] + #[arg(default_value_t = 2000u32)] pub parachain_id: u32, - #[clap(flatten)] + #[command(flatten)] pub base: cumulus_client_cli::ExportGenesisStateCommand, } @@ -80,11 +81,12 @@ impl CliConfiguration for ExportGenesisStateCommand { /// Command for exporting the genesis wasm file. #[derive(Debug, clap::Parser)] +#[group(skip)] pub struct ExportGenesisWasmCommand { - #[clap(default_value_t = 2000u32)] + #[arg(default_value_t = 2000u32)] pub parachain_id: u32, - #[clap(flatten)] + #[command(flatten)] pub base: cumulus_client_cli::ExportGenesisWasmCommand, } From 5e63a1dce7d7016fb78e1e53e3388a386ba64922 Mon Sep 17 00:00:00 2001 From: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com> Date: Tue, 18 Oct 2022 16:34:14 +0200 Subject: [PATCH 136/148] BlockId removal: refactor: StorageProvider (#1770) * BlockId removal: refactor: StorageProvider It changes the arguments of `Backend::StorageProvider` trait from: block: `BlockId` to: hash: `&Block::Hash` * update lockfile for {"polkadot", "substrate"} Co-authored-by: parity-processbot <> --- Cargo.lock | 505 +++++++++++----------- primitives/parachain-inherent/src/mock.rs | 5 +- 2 files changed, 255 insertions(+), 255 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dacb281d13b..47ff65325de 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -469,7 +469,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "array-bytes", "async-trait", @@ -506,7 +506,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -526,7 +526,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "beefy-primitives", "sp-api", @@ -536,10 +536,11 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "parity-scale-codec", "scale-info", + "serde", "sp-api", "sp-application-crypto", "sp-core", @@ -2801,7 +2802,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "parity-scale-codec", ] @@ -2824,7 +2825,7 @@ checksum = "85dcb89d2b10c5f6133de2efd8c11959ce9dbb46a2f7a4cab208c4eeda6ce1ab" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support", "frame-system", @@ -2847,7 +2848,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "Inflector", "array-bytes", @@ -2898,7 +2899,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2909,7 +2910,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2925,7 +2926,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support", "frame-system", @@ -2954,7 +2955,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "bitflags", "frame-metadata", @@ -2986,7 +2987,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "Inflector", "cfg-expr", @@ -3000,7 +3001,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -3012,7 +3013,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "proc-macro2", "quote", @@ -3022,7 +3023,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support", "log", @@ -3040,7 +3041,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -3055,7 +3056,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "parity-scale-codec", "sp-api", @@ -3064,7 +3065,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support", "parity-scale-codec", @@ -3925,7 +3926,7 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "beefy-primitives", "bitvec", @@ -4023,7 +4024,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "frame-support", "polkadot-primitives", @@ -5247,7 +5248,7 @@ checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "array-bytes", "frame-benchmarking", @@ -5268,7 +5269,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support", "frame-system", @@ -5285,7 +5286,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5299,7 +5300,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support", "frame-system", @@ -5315,7 +5316,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support", "frame-system", @@ -5331,7 +5332,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support", "frame-system", @@ -5346,7 +5347,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5370,7 +5371,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5390,7 +5391,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5405,7 +5406,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "beefy-primitives", "frame-support", @@ -5421,7 +5422,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "array-bytes", "beefy-merkle-tree", @@ -5444,7 +5445,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5462,7 +5463,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5506,7 +5507,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5523,7 +5524,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "bitflags", "frame-benchmarking", @@ -5552,7 +5553,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "bitflags", "parity-scale-codec", @@ -5564,7 +5565,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "proc-macro2", "quote", @@ -5574,7 +5575,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "assert_matches", "frame-benchmarking", @@ -5591,7 +5592,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5609,7 +5610,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5633,7 +5634,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5646,7 +5647,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5664,7 +5665,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5685,7 +5686,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5700,7 +5701,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5723,7 +5724,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5739,7 +5740,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5759,7 +5760,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5776,7 +5777,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5793,7 +5794,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5811,7 +5812,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5826,7 +5827,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5842,7 +5843,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support", "frame-system", @@ -5859,7 +5860,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5879,7 +5880,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "parity-scale-codec", "sp-api", @@ -5889,7 +5890,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support", "frame-system", @@ -5906,7 +5907,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5929,7 +5930,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5946,7 +5947,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5961,7 +5962,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support", "frame-system", @@ -5975,7 +5976,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -5993,7 +5994,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6008,7 +6009,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "assert_matches", "frame-benchmarking", @@ -6026,7 +6027,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6042,7 +6043,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support", "frame-system", @@ -6063,7 +6064,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6079,7 +6080,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support", "frame-system", @@ -6093,7 +6094,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6116,7 +6117,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6127,7 +6128,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "log", "sp-arithmetic", @@ -6136,7 +6137,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support", "frame-system", @@ -6165,7 +6166,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6183,7 +6184,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6202,7 +6203,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-support", "frame-system", @@ -6218,7 +6219,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6233,7 +6234,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6244,7 +6245,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6261,7 +6262,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6276,7 +6277,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6292,7 +6293,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6307,7 +6308,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6322,7 +6323,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "frame-support", "frame-system", @@ -6340,7 +6341,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "frame-benchmarking", "frame-support", @@ -6894,7 +6895,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -6909,7 +6910,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -6923,7 +6924,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "derive_more", "fatality", @@ -6946,7 +6947,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "fatality", "futures", @@ -6967,7 +6968,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "clap 4.0.11", "frame-benchmarking-cli", @@ -6993,7 +6994,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7034,7 +7035,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "always-assert", "bitvec", @@ -7056,7 +7057,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7069,7 +7070,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "derive_more", "fatality", @@ -7094,7 +7095,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7108,7 +7109,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "futures", "futures-timer", @@ -7128,7 +7129,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "always-assert", "async-trait", @@ -7152,7 +7153,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "futures", "parity-scale-codec", @@ -7170,7 +7171,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "bitvec", "derive_more", @@ -7199,7 +7200,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "bitvec", "futures", @@ -7219,7 +7220,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "bitvec", "fatality", @@ -7238,7 +7239,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7253,7 +7254,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "async-trait", "futures", @@ -7271,7 +7272,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7286,7 +7287,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "futures", "futures-timer", @@ -7303,7 +7304,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "fatality", "futures", @@ -7322,7 +7323,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "async-trait", "futures", @@ -7339,7 +7340,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "bitvec", "fatality", @@ -7357,7 +7358,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "always-assert", "assert_matches", @@ -7389,7 +7390,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "futures", "polkadot-node-primitives", @@ -7405,7 +7406,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "futures", "memory-lru", @@ -7421,7 +7422,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "async-std", "lazy_static", @@ -7439,7 +7440,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "bs58", "futures", @@ -7458,7 +7459,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "async-trait", "derive_more", @@ -7481,7 +7482,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "bounded-vec", "futures", @@ -7503,7 +7504,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7513,7 +7514,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "async-trait", "futures", @@ -7531,7 +7532,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "async-trait", "derive_more", @@ -7554,7 +7555,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "async-trait", "derive_more", @@ -7587,7 +7588,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "async-trait", "futures", @@ -7610,7 +7611,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "derive_more", "frame-support", @@ -7708,7 +7709,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7723,7 +7724,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "bitvec", "frame-system", @@ -7753,7 +7754,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7785,7 +7786,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "beefy-primitives", "bitvec", @@ -7874,7 +7875,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "beefy-primitives", "bitvec", @@ -7921,7 +7922,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "frame-support", "polkadot-primitives", @@ -7933,7 +7934,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "bs58", "parity-scale-codec", @@ -7945,7 +7946,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "bitflags", "bitvec", @@ -7988,7 +7989,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "async-trait", "beefy-gadget", @@ -8093,7 +8094,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8114,7 +8115,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8124,7 +8125,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8149,7 +8150,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "beefy-primitives", "bitvec", @@ -8210,7 +8211,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "frame-benchmarking", "frame-system", @@ -8789,7 +8790,7 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "env_logger 0.9.0", "jsonrpsee", @@ -8908,7 +8909,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -8992,7 +8993,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "frame-support", "polkadot-primitives", @@ -9153,7 +9154,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "log", "sp-core", @@ -9164,7 +9165,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "futures", @@ -9191,7 +9192,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "futures", "futures-timer", @@ -9214,7 +9215,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9230,7 +9231,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9247,7 +9248,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9258,7 +9259,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "array-bytes", "chrono", @@ -9298,7 +9299,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "fnv", "futures", @@ -9326,7 +9327,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "hash-db", "kvdb", @@ -9351,7 +9352,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "futures", @@ -9375,7 +9376,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "futures", @@ -9404,7 +9405,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "fork-tree", @@ -9446,7 +9447,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "futures", "jsonrpsee", @@ -9468,7 +9469,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9481,7 +9482,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "futures", @@ -9505,7 +9506,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9532,7 +9533,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "environmental", "parity-scale-codec", @@ -9548,7 +9549,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "log", "parity-scale-codec", @@ -9563,7 +9564,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9583,7 +9584,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "ahash", "array-bytes", @@ -9624,7 +9625,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "finality-grandpa", "futures", @@ -9645,7 +9646,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "ansi_term", "futures", @@ -9662,7 +9663,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "array-bytes", "async-trait", @@ -9677,7 +9678,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "array-bytes", "async-trait", @@ -9724,7 +9725,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "cid", "futures", @@ -9744,7 +9745,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "bitflags", @@ -9770,7 +9771,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "ahash", "futures", @@ -9788,7 +9789,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "array-bytes", "futures", @@ -9809,7 +9810,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "array-bytes", "fork-tree", @@ -9839,7 +9840,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "array-bytes", "futures", @@ -9858,7 +9859,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "array-bytes", "bytes", @@ -9888,7 +9889,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "futures", "libp2p", @@ -9901,7 +9902,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -9910,7 +9911,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "futures", "hash-db", @@ -9940,7 +9941,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "futures", "jsonrpsee", @@ -9963,7 +9964,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "futures", "jsonrpsee", @@ -9976,7 +9977,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "futures", "hex", @@ -9995,7 +9996,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "directories", @@ -10066,7 +10067,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "log", "parity-scale-codec", @@ -10080,7 +10081,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10099,7 +10100,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "futures", "libc", @@ -10118,7 +10119,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "chrono", "futures", @@ -10136,7 +10137,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "ansi_term", "atty", @@ -10167,7 +10168,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10178,7 +10179,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "futures", @@ -10205,7 +10206,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "futures", @@ -10219,7 +10220,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "futures", "futures-timer", @@ -10637,7 +10638,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "enumn", "parity-scale-codec", @@ -10713,7 +10714,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "hash-db", "log", @@ -10731,7 +10732,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "blake2", "proc-macro-crate", @@ -10743,7 +10744,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "parity-scale-codec", "scale-info", @@ -10756,7 +10757,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "integer-sqrt", "num-traits", @@ -10771,7 +10772,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "parity-scale-codec", "scale-info", @@ -10784,7 +10785,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "parity-scale-codec", @@ -10796,7 +10797,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "parity-scale-codec", "sp-api", @@ -10808,7 +10809,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "futures", "log", @@ -10826,7 +10827,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "futures", @@ -10845,7 +10846,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "parity-scale-codec", @@ -10863,7 +10864,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "merlin", @@ -10886,7 +10887,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "parity-scale-codec", "scale-info", @@ -10900,7 +10901,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "parity-scale-codec", "scale-info", @@ -10913,7 +10914,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "array-bytes", "base58", @@ -10959,7 +10960,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "blake2", "byteorder", @@ -10973,7 +10974,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "proc-macro2", "quote", @@ -10984,7 +10985,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -10993,7 +10994,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "proc-macro2", "quote", @@ -11003,7 +11004,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "environmental", "parity-scale-codec", @@ -11014,7 +11015,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "finality-grandpa", "log", @@ -11032,7 +11033,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11046,7 +11047,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "bytes", "futures", @@ -11072,7 +11073,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "lazy_static", "sp-core", @@ -11083,7 +11084,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "futures", @@ -11100,7 +11101,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "thiserror", "zstd", @@ -11109,7 +11110,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "log", "parity-scale-codec", @@ -11125,7 +11126,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "parity-scale-codec", "scale-info", @@ -11139,7 +11140,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "sp-api", "sp-core", @@ -11149,7 +11150,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "backtrace", "lazy_static", @@ -11159,7 +11160,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "rustc-hash", "serde", @@ -11169,7 +11170,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "either", "hash256-std-hasher", @@ -11192,7 +11193,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11210,7 +11211,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "Inflector", "proc-macro-crate", @@ -11222,7 +11223,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "log", "parity-scale-codec", @@ -11236,7 +11237,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "serde", "serde_json", @@ -11245,7 +11246,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "parity-scale-codec", "scale-info", @@ -11259,7 +11260,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "parity-scale-codec", "scale-info", @@ -11270,7 +11271,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "hash-db", "log", @@ -11292,12 +11293,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11310,7 +11311,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "log", "sp-core", @@ -11323,7 +11324,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "futures-timer", @@ -11339,7 +11340,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "parity-scale-codec", "sp-std", @@ -11351,7 +11352,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "sp-api", "sp-runtime", @@ -11360,7 +11361,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "async-trait", "log", @@ -11376,7 +11377,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "ahash", "hash-db", @@ -11399,7 +11400,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11416,7 +11417,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11427,7 +11428,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "impl-trait-for-tuples", "log", @@ -11440,7 +11441,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11736,7 +11737,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "platforms", ] @@ -11744,7 +11745,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11765,7 +11766,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "futures-util", "hyper", @@ -11778,7 +11779,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "jsonrpsee", "log", @@ -11799,7 +11800,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "array-bytes", "async-trait", @@ -11825,7 +11826,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11835,7 +11836,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11846,7 +11847,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "ansi_term", "build-helper", @@ -11954,7 +11955,7 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "frame-support", "polkadot-primitives", @@ -12234,7 +12235,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12245,7 +12246,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12372,7 +12373,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#415648d87848dfa02955e3bea73f55503b852bc1" +source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ "clap 4.0.11", "frame-try-runtime", @@ -12961,7 +12962,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "beefy-primitives", "bitvec", @@ -13051,7 +13052,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "frame-support", "polkadot-primitives", @@ -13334,7 +13335,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13348,7 +13349,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "frame-support", "frame-system", @@ -13368,7 +13369,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "frame-benchmarking", "frame-support", @@ -13386,7 +13387,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#8e57f2ce9a85951f3476069de2711a3f9a500ac6" +source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ "Inflector", "proc-macro2", diff --git a/primitives/parachain-inherent/src/mock.rs b/primitives/parachain-inherent/src/mock.rs index e4ca16414c1..1793f6d4e8d 100644 --- a/primitives/parachain-inherent/src/mock.rs +++ b/primitives/parachain-inherent/src/mock.rs @@ -20,7 +20,6 @@ use cumulus_primitives_core::{ relay_chain, InboundDownwardMessage, InboundHrmpMessage, ParaId, PersistedValidationData, }; use sc_client_api::{Backend, StorageProvider}; -use sp_api::BlockId; use sp_core::twox_128; use sp_inherents::{InherentData, InherentDataProvider}; use sp_runtime::traits::Block; @@ -116,7 +115,7 @@ impl MockXcmConfig { ) -> Self { let starting_dmq_mqc_head = client .storage( - &BlockId::Hash(parent_block), + &parent_block, &sp_storage::StorageKey( [twox_128(¶chain_system_name.0), twox_128(b"LastDmqMqcHead")] .concat() @@ -131,7 +130,7 @@ impl MockXcmConfig { let starting_hrmp_mqc_heads = client .storage( - &BlockId::Hash(parent_block), + &parent_block, &sp_storage::StorageKey( [twox_128(¶chain_system_name.0), twox_128(b"LastHrmpMqcHeads")] .concat() From 18c01ee3d6c1f66d5cc951dbeecbccae195ba2f4 Mon Sep 17 00:00:00 2001 From: Davide Galassi Date: Wed, 19 Oct 2022 09:58:29 +0200 Subject: [PATCH 137/148] Reduce parachain template cognitive complexity (#1777) * Removed some not required generics * Type aliases for some verbose types --- parachain-template/node/src/command.rs | 27 +-- parachain-template/node/src/service.rs | 300 ++++++++----------------- polkadot-parachain/src/service.rs | 224 ++++++------------ 3 files changed, 166 insertions(+), 385 deletions(-) diff --git a/parachain-template/node/src/command.rs b/parachain-template/node/src/command.rs index ee497b413f5..837cd15abf5 100644 --- a/parachain-template/node/src/command.rs +++ b/parachain-template/node/src/command.rs @@ -5,7 +5,7 @@ use cumulus_client_cli::generate_genesis_block; use cumulus_primitives_core::ParaId; use frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE}; use log::{info, warn}; -use parachain_template_runtime::{Block, RuntimeApi}; +use parachain_template_runtime::Block; use sc_cli::{ ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, NetworkParams, Result, RuntimeVersion, SharedParams, SubstrateCli, @@ -20,7 +20,7 @@ use sp_runtime::traits::{AccountIdConversion, Block as BlockT}; use crate::{ chain_spec, cli::{Cli, RelayChainCli, Subcommand}, - service::{new_partial, TemplateRuntimeExecutor}, + service::{new_partial, ParachainNativeExecutor}, }; fn load_spec(id: &str) -> std::result::Result, String> { @@ -116,14 +116,7 @@ macro_rules! construct_async_run { (|$components:ident, $cli:ident, $cmd:ident, $config:ident| $( $code:tt )* ) => {{ let runner = $cli.create_runner($cmd)?; runner.async_run(|$config| { - let $components = new_partial::< - RuntimeApi, - TemplateRuntimeExecutor, - _ - >( - &$config, - crate::service::parachain_build_import_queue, - )?; + let $components = new_partial(&$config)?; let task_manager = $components.task_manager; { $( $code )* }.map(|v| (v, task_manager)) }) @@ -204,17 +197,14 @@ pub fn run() -> Result<()> { match cmd { BenchmarkCmd::Pallet(cmd) => if cfg!(feature = "runtime-benchmarks") { - runner.sync_run(|config| cmd.run::(config)) + runner.sync_run(|config| cmd.run::(config)) } else { Err("Benchmarking wasn't enabled when building the node. \ You can enable it with `--features runtime-benchmarks`." .into()) }, BenchmarkCmd::Block(cmd) => runner.sync_run(|config| { - let partials = new_partial::( - &config, - crate::service::parachain_build_import_queue, - )?; + let partials = new_partial(&config)?; cmd.run(partials.client) }), #[cfg(not(feature = "runtime-benchmarks"))] @@ -227,10 +217,7 @@ pub fn run() -> Result<()> { .into()), #[cfg(feature = "runtime-benchmarks")] BenchmarkCmd::Storage(cmd) => runner.sync_run(|config| { - let partials = new_partial::( - &config, - crate::service::parachain_build_import_queue, - )?; + let partials = new_partial(&config)?; let db = partials.backend.expose_db(); let storage = partials.backend.expose_storage(); @@ -255,7 +242,7 @@ pub fn run() -> Result<()> { .map_err(|e| format!("Error: {:?}", e))?; runner.async_run(|config| { - Ok((cmd.run::(config), task_manager)) + Ok((cmd.run::(config), task_manager)) }) } else { Err("Try-runtime must be enabled by `--features try-runtime`.".into()) diff --git a/parachain-template/node/src/service.rs b/parachain-template/node/src/service.rs index 91d8d54244d..0980bb2cf78 100644 --- a/parachain-template/node/src/service.rs +++ b/parachain-template/node/src/service.rs @@ -3,14 +3,9 @@ // std use std::{sync::Arc, time::Duration}; -// rpc -use jsonrpsee::RpcModule; - use cumulus_client_cli::CollatorOptions; // Local Runtime Types -use parachain_template_runtime::{ - opaque::Block, AccountId, Balance, Hash, Index as Nonce, RuntimeApi, -}; +use parachain_template_runtime::{opaque::Block, Hash, RuntimeApi}; // Cumulus Imports use cumulus_client_consensus_aura::{AuraConsensus, BuildAuraConsensusParams, SlotProportion}; @@ -30,17 +25,15 @@ use sc_network::NetworkService; use sc_network_common::service::NetworkBlock; use sc_service::{Configuration, PartialComponents, TFullBackend, TFullClient, TaskManager}; use sc_telemetry::{Telemetry, TelemetryHandle, TelemetryWorker, TelemetryWorkerHandle}; -use sp_api::ConstructRuntimeApi; use sp_keystore::SyncCryptoStorePtr; -use sp_runtime::traits::BlakeTwo256; use substrate_prometheus_endpoint::Registry; use polkadot_service::CollatorPair; -/// Native executor instance. -pub struct TemplateRuntimeExecutor; +/// Native executor type. +pub struct ParachainNativeExecutor; -impl sc_executor::NativeExecutionDispatch for TemplateRuntimeExecutor { +impl sc_executor::NativeExecutionDispatch for ParachainNativeExecutor { type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; fn dispatch(method: &str, data: &[u8]) -> Option> { @@ -52,59 +45,29 @@ impl sc_executor::NativeExecutionDispatch for TemplateRuntimeExecutor { } } +type ParachainExecutor = NativeElseWasmExecutor; + +type ParachainClient = TFullClient; + +type ParachainBackend = TFullBackend; + /// Starts a `ServiceBuilder` for a full service. /// /// Use this macro if you don't actually need the full service, but just the builder in order to /// be able to perform chain operations. -#[allow(clippy::type_complexity)] -pub fn new_partial( +pub fn new_partial( config: &Configuration, - build_import_queue: BIQ, ) -> Result< PartialComponents< - TFullClient>, - TFullBackend, + ParachainClient, + ParachainBackend, (), - sc_consensus::DefaultImportQueue< - Block, - TFullClient>, - >, - sc_transaction_pool::FullPool< - Block, - TFullClient>, - >, + sc_consensus::DefaultImportQueue, + sc_transaction_pool::FullPool, (Option, Option), >, sc_service::Error, -> -where - RuntimeApi: ConstructRuntimeApi>> - + Send - + Sync - + 'static, - RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue - + sp_api::Metadata - + sp_session::SessionKeys - + sp_api::ApiExt< - Block, - StateBackend = sc_client_api::StateBackendFor, Block>, - > + sp_offchain::OffchainWorkerApi - + sp_block_builder::BlockBuilder, - sc_client_api::StateBackendFor, Block>: sp_api::StateBackend, - Executor: sc_executor::NativeExecutionDispatch + 'static, - BIQ: FnOnce( - Arc>>, - &Configuration, - Option, - &TaskManager, - ) -> Result< - sc_consensus::DefaultImportQueue< - Block, - TFullClient>, - >, - sc_service::Error, - >, -{ +> { let telemetry = config .telemetry_endpoints .clone() @@ -116,7 +79,7 @@ where }) .transpose()?; - let executor = sc_executor::NativeElseWasmExecutor::::new( + let executor = ParachainExecutor::new( config.wasm_method, config.default_heap_pages, config.max_runtime_instances, @@ -153,7 +116,7 @@ where &task_manager, )?; - let params = PartialComponents { + Ok(PartialComponents { backend, client, import_queue, @@ -162,9 +125,7 @@ where transaction_pool, select_chain: (), other: (telemetry, telemetry_worker_handle), - }; - - Ok(params) + }) } async fn build_relay_chain_interface( @@ -192,74 +153,16 @@ async fn build_relay_chain_interface( /// /// This is the actual implementation that is abstract over the executor and the runtime api. #[sc_tracing::logging::prefix_logs_with("Parachain")] -async fn start_node_impl( +async fn start_node_impl( parachain_config: Configuration, polkadot_config: Configuration, collator_options: CollatorOptions, id: ParaId, - _rpc_ext_builder: RB, - build_import_queue: BIQ, - build_consensus: BIC, hwbench: Option, -) -> sc_service::error::Result<( - TaskManager, - Arc>>, -)> -where - RuntimeApi: ConstructRuntimeApi>> - + Send - + Sync - + 'static, - RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue - + sp_api::Metadata - + sp_session::SessionKeys - + sp_api::ApiExt< - Block, - StateBackend = sc_client_api::StateBackendFor, Block>, - > + sp_offchain::OffchainWorkerApi - + sp_block_builder::BlockBuilder - + cumulus_primitives_core::CollectCollationInfo - + pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi - + substrate_frame_rpc_system::AccountNonceApi, - sc_client_api::StateBackendFor, Block>: sp_api::StateBackend, - Executor: sc_executor::NativeExecutionDispatch + 'static, - RB: Fn( - Arc>, - ) -> Result, sc_service::Error> - + Send - + 'static, - BIQ: FnOnce( - Arc>>, - &Configuration, - Option, - &TaskManager, - ) -> Result< - sc_consensus::DefaultImportQueue< - Block, - TFullClient>, - >, - sc_service::Error, - > + 'static, - BIC: FnOnce( - Arc>>, - Option<&Registry>, - Option, - &TaskManager, - Arc, - Arc< - sc_transaction_pool::FullPool< - Block, - TFullClient>, - >, - >, - Arc>, - SyncCryptoStorePtr, - bool, - ) -> Result>, sc_service::Error>, -{ +) -> sc_service::error::Result<(TaskManager, Arc)> { let parachain_config = prepare_node_config(parachain_config); - let params = new_partial::(¶chain_config, build_import_queue)?; + let params = new_partial(¶chain_config)?; let (mut telemetry, telemetry_worker_handle) = params.other; let client = params.client.clone(); @@ -360,6 +263,7 @@ where network, params.keystore_container.sync_keystore(), force_authoring, + id, )?; let spawner = task_manager.spawn_handle(); @@ -398,19 +302,12 @@ where } /// Build the import queue for the parachain runtime. -#[allow(clippy::type_complexity)] -pub fn parachain_build_import_queue( - client: Arc>>, +fn build_import_queue( + client: Arc, config: &Configuration, telemetry: Option, task_manager: &TaskManager, -) -> Result< - sc_consensus::DefaultImportQueue< - Block, - TFullClient>, - >, - sc_service::Error, -> { +) -> Result, sc_service::Error> { let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; cumulus_client_consensus_aura::import_queue::< @@ -441,88 +338,81 @@ pub fn parachain_build_import_queue( .map_err(Into::into) } -/// Start a parachain node. -pub async fn start_parachain_node( - parachain_config: Configuration, - polkadot_config: Configuration, - collator_options: CollatorOptions, +fn build_consensus( + client: Arc, + prometheus_registry: Option<&Registry>, + telemetry: Option, + task_manager: &TaskManager, + relay_chain_interface: Arc, + transaction_pool: Arc>, + sync_oracle: Arc>, + keystore: SyncCryptoStorePtr, + force_authoring: bool, id: ParaId, - hwbench: Option, -) -> sc_service::error::Result<( - TaskManager, - Arc>>, -)> { - start_node_impl::( - parachain_config, - polkadot_config, - collator_options, - id, - |_| Ok(RpcModule::new(())), - parachain_build_import_queue, - |client, - prometheus_registry, - telemetry, - task_manager, - relay_chain_interface, - transaction_pool, - sync_oracle, - keystore, - force_authoring| { - let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; - - let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( - task_manager.spawn_handle(), - client.clone(), - transaction_pool, - prometheus_registry, - telemetry.clone(), - ); +) -> Result>, sc_service::Error> { + let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; + + let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( + task_manager.spawn_handle(), + client.clone(), + transaction_pool, + prometheus_registry, + telemetry.clone(), + ); - Ok(AuraConsensus::build::( - BuildAuraConsensusParams { - proposer_factory, - create_inherent_data_providers: move |_, (relay_parent, validation_data)| { - let relay_chain_interface = relay_chain_interface.clone(); - async move { - let parachain_inherent = - cumulus_primitives_parachain_inherent::ParachainInherentData::create_at( - relay_parent, - &relay_chain_interface, - &validation_data, - id, - ).await; - let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); - - let slot = + let params = BuildAuraConsensusParams { + proposer_factory, + create_inherent_data_providers: move |_, (relay_parent, validation_data)| { + let relay_chain_interface = relay_chain_interface.clone(); + async move { + let parachain_inherent = + cumulus_primitives_parachain_inherent::ParachainInherentData::create_at( + relay_parent, + &relay_chain_interface, + &validation_data, + id, + ) + .await; + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); + + let slot = sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( *timestamp, slot_duration, ); - let parachain_inherent = parachain_inherent.ok_or_else(|| { - Box::::from( - "Failed to create parachain inherent", - ) - })?; - Ok((slot, timestamp, parachain_inherent)) - } - }, - block_import: client.clone(), - para_client: client, - backoff_authoring_blocks: Option::<()>::None, - sync_oracle, - keystore, - force_authoring, - slot_duration, - // We got around 500ms for proposing - block_proposal_slot_portion: SlotProportion::new(1f32 / 24f32), - // And a maximum of 750ms if slots are skipped - max_block_proposal_slot_portion: Some(SlotProportion::new(1f32 / 16f32)), - telemetry, - }, - )) + let parachain_inherent = parachain_inherent.ok_or_else(|| { + Box::::from( + "Failed to create parachain inherent", + ) + })?; + Ok((slot, timestamp, parachain_inherent)) + } }, - hwbench, - ) - .await + block_import: client.clone(), + para_client: client, + backoff_authoring_blocks: Option::<()>::None, + sync_oracle, + keystore, + force_authoring, + slot_duration, + // We got around 500ms for proposing + block_proposal_slot_portion: SlotProportion::new(1f32 / 24f32), + // And a maximum of 750ms if slots are skipped + max_block_proposal_slot_portion: Some(SlotProportion::new(1f32 / 16f32)), + telemetry, + }; + + Ok(AuraConsensus::build::(params)) +} + +/// Start a parachain node. +pub async fn start_parachain_node( + parachain_config: Configuration, + polkadot_config: Configuration, + collator_options: CollatorOptions, + id: ParaId, + hwbench: Option, +) -> sc_service::error::Result<(TaskManager, Arc)> { + start_node_impl(parachain_config, polkadot_config, collator_options, id, hwbench).await } diff --git a/polkadot-parachain/src/service.rs b/polkadot-parachain/src/service.rs index ca47af08eec..2f38da0bd5d 100644 --- a/polkadot-parachain/src/service.rs +++ b/polkadot-parachain/src/service.rs @@ -69,6 +69,10 @@ type HostFunctions = sp_io::SubstrateHostFunctions; type HostFunctions = (sp_io::SubstrateHostFunctions, frame_benchmarking::benchmarking::HostFunctions); +type ParachainClient = TFullClient>; + +type ParachainBackend = TFullBackend; + /// Native executor instance. pub struct ShellRuntimeExecutor; @@ -153,45 +157,33 @@ pub fn new_partial( build_import_queue: BIQ, ) -> Result< PartialComponents< - TFullClient>, - TFullBackend, + ParachainClient, + ParachainBackend, (), - sc_consensus::DefaultImportQueue< - Block, - TFullClient>, - >, - sc_transaction_pool::FullPool< - Block, - TFullClient>, - >, + sc_consensus::DefaultImportQueue>, + sc_transaction_pool::FullPool>, (Option, Option), >, sc_service::Error, > where - RuntimeApi: ConstructRuntimeApi>> - + Send - + Sync - + 'static, + RuntimeApi: ConstructRuntimeApi> + Send + Sync + 'static, RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue + sp_api::Metadata + sp_session::SessionKeys + sp_api::ApiExt< Block, - StateBackend = sc_client_api::StateBackendFor, Block>, + StateBackend = sc_client_api::StateBackendFor, > + sp_offchain::OffchainWorkerApi + sp_block_builder::BlockBuilder, - sc_client_api::StateBackendFor, Block>: sp_api::StateBackend, + sc_client_api::StateBackendFor: sp_api::StateBackend, BIQ: FnOnce( - Arc>>, + Arc>, &Configuration, Option, &TaskManager, ) -> Result< - sc_consensus::DefaultImportQueue< - Block, - TFullClient>, - >, + sc_consensus::DefaultImportQueue>, sc_service::Error, >, { @@ -292,54 +284,38 @@ async fn start_shell_node_impl( build_import_queue: BIQ, build_consensus: BIC, hwbench: Option, -) -> sc_service::error::Result<( - TaskManager, - Arc>>, -)> +) -> sc_service::error::Result<(TaskManager, Arc>)> where - RuntimeApi: ConstructRuntimeApi>> - + Send - + Sync - + 'static, + RuntimeApi: ConstructRuntimeApi> + Send + Sync + 'static, RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue + sp_api::Metadata + sp_session::SessionKeys + sp_api::ApiExt< Block, - StateBackend = sc_client_api::StateBackendFor, Block>, + StateBackend = sc_client_api::StateBackendFor, > + sp_offchain::OffchainWorkerApi + sp_block_builder::BlockBuilder + cumulus_primitives_core::CollectCollationInfo, - sc_client_api::StateBackendFor, Block>: sp_api::StateBackend, - RB: Fn( - Arc>>, - ) -> Result, sc_service::Error> + sc_client_api::StateBackendFor: sp_api::StateBackend, + RB: Fn(Arc>) -> Result, sc_service::Error> + Send + 'static, BIQ: FnOnce( - Arc>>, + Arc>, &Configuration, Option, &TaskManager, ) -> Result< - sc_consensus::DefaultImportQueue< - Block, - TFullClient>, - >, + sc_consensus::DefaultImportQueue>, sc_service::Error, >, BIC: FnOnce( - Arc>>, + Arc>, Option<&Registry>, Option, &TaskManager, Arc, - Arc< - sc_transaction_pool::FullPool< - Block, - TFullClient>, - >, - >, + Arc>>, Arc>, SyncCryptoStorePtr, bool, @@ -488,56 +464,40 @@ async fn start_node_impl( build_import_queue: BIQ, build_consensus: BIC, hwbench: Option, -) -> sc_service::error::Result<( - TaskManager, - Arc>>, -)> +) -> sc_service::error::Result<(TaskManager, Arc>)> where - RuntimeApi: ConstructRuntimeApi>> - + Send - + Sync - + 'static, + RuntimeApi: ConstructRuntimeApi> + Send + Sync + 'static, RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue + sp_api::Metadata + sp_session::SessionKeys + sp_api::ApiExt< Block, - StateBackend = sc_client_api::StateBackendFor, Block>, + StateBackend = sc_client_api::StateBackendFor, > + sp_offchain::OffchainWorkerApi + sp_block_builder::BlockBuilder + cumulus_primitives_core::CollectCollationInfo + pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi + frame_rpc_system::AccountNonceApi, - sc_client_api::StateBackendFor, Block>: sp_api::StateBackend, - RB: Fn( - Arc>>, - ) -> Result, sc_service::Error> + sc_client_api::StateBackendFor: sp_api::StateBackend, + RB: Fn(Arc>) -> Result, sc_service::Error> + Send + 'static, BIQ: FnOnce( - Arc>>, + Arc>, &Configuration, Option, &TaskManager, ) -> Result< - sc_consensus::DefaultImportQueue< - Block, - TFullClient>, - >, + sc_consensus::DefaultImportQueue>, sc_service::Error, > + 'static, BIC: FnOnce( - Arc>>, + Arc>, Option<&Registry>, Option, &TaskManager, Arc, - Arc< - sc_transaction_pool::FullPool< - Block, - TFullClient>, - >, - >, + Arc>>, Arc>, SyncCryptoStorePtr, bool, @@ -686,17 +646,12 @@ where /// Build the import queue for the rococo parachain runtime. pub fn rococo_parachain_build_import_queue( - client: Arc< - TFullClient>, - >, + client: Arc>, config: &Configuration, telemetry: Option, task_manager: &TaskManager, ) -> Result< - sc_consensus::DefaultImportQueue< - Block, - TFullClient>, - >, + sc_consensus::DefaultImportQueue>, sc_service::Error, > { let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; @@ -738,7 +693,7 @@ pub async fn start_rococo_parachain_node( hwbench: Option, ) -> sc_service::error::Result<( TaskManager, - Arc>>, + Arc>, )> { start_node_impl::( parachain_config, @@ -820,31 +775,22 @@ pub async fn start_rococo_parachain_node( /// Build the import queue for the shell runtime. pub fn shell_build_import_queue( - client: Arc>>, + client: Arc>, config: &Configuration, _: Option, task_manager: &TaskManager, -) -> Result< - sc_consensus::DefaultImportQueue< - Block, - TFullClient>, - >, - sc_service::Error, -> +) -> Result>, sc_service::Error> where - RuntimeApi: ConstructRuntimeApi>> - + Send - + Sync - + 'static, + RuntimeApi: ConstructRuntimeApi> + Send + Sync + 'static, RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue + sp_api::Metadata + sp_session::SessionKeys + sp_api::ApiExt< Block, - StateBackend = sc_client_api::StateBackendFor, Block>, + StateBackend = sc_client_api::StateBackendFor, > + sp_offchain::OffchainWorkerApi + sp_block_builder::BlockBuilder, - sc_client_api::StateBackendFor, Block>: sp_api::StateBackend, + sc_client_api::StateBackendFor: sp_api::StateBackend, { cumulus_client_consensus_relay_chain::import_queue( client.clone(), @@ -863,25 +809,19 @@ pub async fn start_shell_node( collator_options: CollatorOptions, id: ParaId, hwbench: Option, -) -> sc_service::error::Result<( - TaskManager, - Arc>>, -)> +) -> sc_service::error::Result<(TaskManager, Arc>)> where - RuntimeApi: ConstructRuntimeApi>> - + Send - + Sync - + 'static, + RuntimeApi: ConstructRuntimeApi> + Send + Sync + 'static, RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue + sp_api::Metadata + sp_session::SessionKeys + sp_api::ApiExt< Block, - StateBackend = sc_client_api::StateBackendFor, Block>, + StateBackend = sc_client_api::StateBackendFor, > + sp_offchain::OffchainWorkerApi + sp_block_builder::BlockBuilder + cumulus_primitives_core::CollectCollationInfo, - sc_client_api::StateBackendFor, Block>: sp_api::StateBackend, + sc_client_api::StateBackendFor: sp_api::StateBackend, { start_shell_node_impl::( parachain_config, @@ -1048,32 +988,23 @@ where /// Build the import queue for Statemint and other Aura-based runtimes. pub fn aura_build_import_queue( - client: Arc>>, + client: Arc>, config: &Configuration, telemetry_handle: Option, task_manager: &TaskManager, -) -> Result< - sc_consensus::DefaultImportQueue< - Block, - TFullClient>, - >, - sc_service::Error, -> +) -> Result>, sc_service::Error> where - RuntimeApi: ConstructRuntimeApi>> - + Send - + Sync - + 'static, + RuntimeApi: ConstructRuntimeApi> + Send + Sync + 'static, RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue + sp_api::Metadata + sp_session::SessionKeys + sp_api::ApiExt< Block, - StateBackend = sc_client_api::StateBackendFor, Block>, + StateBackend = sc_client_api::StateBackendFor, > + sp_offchain::OffchainWorkerApi + sp_block_builder::BlockBuilder + sp_consensus_aura::AuraApi::Pair as Pair>::Public>, - sc_client_api::StateBackendFor, Block>: sp_api::StateBackend, + sc_client_api::StateBackendFor: sp_api::StateBackend, <::Pair as Pair>::Signature: TryFrom> + std::hash::Hash + sp_runtime::traits::Member + Codec, { @@ -1131,28 +1062,22 @@ pub async fn start_generic_aura_node( collator_options: CollatorOptions, id: ParaId, hwbench: Option, -) -> sc_service::error::Result<( - TaskManager, - Arc>>, -)> +) -> sc_service::error::Result<(TaskManager, Arc>)> where - RuntimeApi: ConstructRuntimeApi>> - + Send - + Sync - + 'static, + RuntimeApi: ConstructRuntimeApi> + Send + Sync + 'static, RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue + sp_api::Metadata + sp_session::SessionKeys + sp_api::ApiExt< Block, - StateBackend = sc_client_api::StateBackendFor, Block>, + StateBackend = sc_client_api::StateBackendFor, > + sp_offchain::OffchainWorkerApi + sp_block_builder::BlockBuilder + cumulus_primitives_core::CollectCollationInfo + sp_consensus_aura::AuraApi::Pair as Pair>::Public> + pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi + frame_rpc_system::AccountNonceApi, - sc_client_api::StateBackendFor, Block>: sp_api::StateBackend, + sc_client_api::StateBackendFor: sp_api::StateBackend, <::Pair as Pair>::Signature: TryFrom> + std::hash::Hash + sp_runtime::traits::Member + Codec, { @@ -1302,56 +1227,40 @@ async fn start_contracts_rococo_node_impl( build_import_queue: BIQ, build_consensus: BIC, hwbench: Option, -) -> sc_service::error::Result<( - TaskManager, - Arc>>, -)> +) -> sc_service::error::Result<(TaskManager, Arc>)> where - RuntimeApi: ConstructRuntimeApi>> - + Send - + Sync - + 'static, + RuntimeApi: ConstructRuntimeApi> + Send + Sync + 'static, RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue + sp_api::Metadata + sp_session::SessionKeys + sp_api::ApiExt< Block, - StateBackend = sc_client_api::StateBackendFor, Block>, + StateBackend = sc_client_api::StateBackendFor, > + sp_offchain::OffchainWorkerApi + sp_block_builder::BlockBuilder + cumulus_primitives_core::CollectCollationInfo + pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi + frame_rpc_system::AccountNonceApi, - sc_client_api::StateBackendFor, Block>: sp_api::StateBackend, - RB: Fn( - Arc>>, - ) -> Result, sc_service::Error> + sc_client_api::StateBackendFor: sp_api::StateBackend, + RB: Fn(Arc>) -> Result, sc_service::Error> + Send + 'static, BIQ: FnOnce( - Arc>>, + Arc>, &Configuration, Option, &TaskManager, ) -> Result< - sc_consensus::DefaultImportQueue< - Block, - TFullClient>, - >, + sc_consensus::DefaultImportQueue>, sc_service::Error, > + 'static, BIC: FnOnce( - Arc>>, + Arc>, Option<&Registry>, Option, &TaskManager, Arc, - Arc< - sc_transaction_pool::FullPool< - Block, - TFullClient>, - >, - >, + Arc>>, Arc>, SyncCryptoStorePtr, bool, @@ -1500,17 +1409,12 @@ where #[allow(clippy::type_complexity)] pub fn contracts_rococo_build_import_queue( - client: Arc< - TFullClient>, - >, + client: Arc>, config: &Configuration, telemetry: Option, task_manager: &TaskManager, ) -> Result< - sc_consensus::DefaultImportQueue< - Block, - TFullClient>, - >, + sc_consensus::DefaultImportQueue>, sc_service::Error, > { let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; @@ -1552,7 +1456,7 @@ pub async fn start_contracts_rococo_node( hwbench: Option, ) -> sc_service::error::Result<( TaskManager, - Arc>>, + Arc>, )> { start_contracts_rococo_node_impl::( parachain_config, From 98425f144b8b78f5b01c3fca53f97ec845d7eb38 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Oct 2022 11:18:48 +0200 Subject: [PATCH 138/148] Bump clap from 4.0.11 to 4.0.17 (#1778) Bumps [clap](https://github.com/clap-rs/clap) from 4.0.11 to 4.0.17. - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/v4.0.11...v4.0.17) --- updated-dependencies: - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 24 ++++++++++++------------ client/cli/Cargo.toml | 2 +- parachain-template/node/Cargo.toml | 2 +- polkadot-parachain/Cargo.toml | 2 +- test/service/Cargo.toml | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 47ff65325de..8d1c5da8bc7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -989,9 +989,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.0.11" +version = "4.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ed45cc2c62a3eff523e718d8576ba762c83a3146151093283ac62ae11933a73" +checksum = "06badb543e734a2d6568e19a40af66ed5364360b9226184926f89d229b4b4267" dependencies = [ "atty", "bitflags", @@ -1004,9 +1004,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.0.10" +version = "4.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db342ce9fda24fb191e2ed4e102055a4d381c1086a06630174cd8da8d5d917ce" +checksum = "c42f169caba89a7d512b5418b09864543eeb4d497416c917d7137863bd2076ad" dependencies = [ "heck", "proc-macro-error", @@ -1521,7 +1521,7 @@ dependencies = [ name = "cumulus-client-cli" version = "0.1.0" dependencies = [ - "clap 4.0.11", + "clap 4.0.17", "parity-scale-codec", "sc-chain-spec", "sc-cli", @@ -2147,7 +2147,7 @@ name = "cumulus-test-service" version = "0.1.0" dependencies = [ "async-trait", - "clap 4.0.11", + "clap 4.0.17", "criterion", "cumulus-client-cli", "cumulus-client-consensus-common", @@ -2853,7 +2853,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.0.11", + "clap 4.0.17", "comfy-table", "frame-benchmarking", "frame-support", @@ -6370,7 +6370,7 @@ dependencies = [ name = "parachain-template-node" version = "0.1.0" dependencies = [ - "clap 4.0.11", + "clap 4.0.17", "cumulus-client-cli", "cumulus-client-consensus-aura", "cumulus-client-consensus-common", @@ -6970,7 +6970,7 @@ name = "polkadot-cli" version = "0.9.29" source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" dependencies = [ - "clap 4.0.11", + "clap 4.0.17", "frame-benchmarking-cli", "futures", "log", @@ -7631,7 +7631,7 @@ version = "0.9.300" dependencies = [ "assert_cmd", "async-trait", - "clap 4.0.11", + "clap 4.0.17", "collectives-polkadot-runtime", "contracts-rococo-runtime", "cumulus-client-cli", @@ -9263,7 +9263,7 @@ source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818 dependencies = [ "array-bytes", "chrono", - "clap 4.0.11", + "clap 4.0.17", "fdlimit", "futures", "libp2p", @@ -12375,7 +12375,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" dependencies = [ - "clap 4.0.11", + "clap 4.0.17", "frame-try-runtime", "jsonrpsee", "log", diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index 968d19e8000..9fcbb96a80a 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2021" [dependencies] -clap = { version = "4.0.9", features = ["derive"] } +clap = { version = "4.0.17", features = ["derive"] } codec = { package = "parity-scale-codec", version = "3.0.0" } url = "2.3.1" diff --git a/parachain-template/node/Cargo.toml b/parachain-template/node/Cargo.toml index 6c4fb545711..c482ff18787 100644 --- a/parachain-template/node/Cargo.toml +++ b/parachain-template/node/Cargo.toml @@ -10,7 +10,7 @@ edition = "2021" build = "build.rs" [dependencies] -clap = { version = "4.0.9", features = ["derive"] } +clap = { version = "4.0.17", features = ["derive"] } log = "0.4.17" codec = { package = "parity-scale-codec", version = "3.0.0" } serde = { version = "1.0.145", features = ["derive"] } diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index bb06fa08f96..d57894c225b 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -8,7 +8,7 @@ description = "Runs a polkadot parachain node which could be a collator." [dependencies] async-trait = "0.1.57" -clap = { version = "4.0.9", features = ["derive"] } +clap = { version = "4.0.17", features = ["derive"] } codec = { package = "parity-scale-codec", version = "3.0.0" } futures = "0.3.24" hex-literal = "0.3.4" diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index 2e9c07f7718..bef0c60ec75 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -10,7 +10,7 @@ path = "src/main.rs" [dependencies] async-trait = "0.1.57" -clap = { version = "4.0.9", features = ["derive"] } +clap = { version = "4.0.17", features = ["derive"] } codec = { package = "parity-scale-codec", version = "3.0.0" } criterion = { version = "0.4.0", features = [ "async_tokio" ] } jsonrpsee = { version = "0.15.1", features = ["server"] } From 7273afa5f23a5fbc56e6dfdffc2611db7f822fb0 Mon Sep 17 00:00:00 2001 From: Andronik Date: Wed, 19 Oct 2022 12:02:29 +0200 Subject: [PATCH 139/148] pov-recovery: try connect to validators (#1711) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * zombienet/pov-recovery: do not setup reserved connection for collators * connect eve to dave * REVERTME: diener update --polkadot --branch ao-recovery-try-connect * REVERTME: cargo update -p sp-io * REVERTME: cargo update -p sp-io and hope for the best * pass reserved flags for eve after -- * Revert "REVERTME: cargo update -p sp-io and hope for the best" This reverts commit 0d66b70e5ccedc7a35bcf1b30a070e68cd6a8ccc. * Revert "REVERTME: cargo update -p sp-io" This reverts commit f8d16c375afd41b8e0c84b59fe62019b86ba95b9. * REVERTME: cargo update -p sp-io * Revert "REVERTME: cargo update -p sp-io" This reverts commit d48e1e6aa2134591b285e284077a063356d44eed. * REVERTME: cargo update -p sp-io * REVERTME: cargo update -p sp-io * try some logs and flags * apply some suggestions from Sebastian * let Charlie produce blocks * Revert "REVERTME: cargo update -p sp-io" This reverts commit 02838a656eadfcbd26520e6b60ee21ffd8b27afd. * git checkout master Cargo.lock * Revert "REVERTME: diener update --polkadot --branch ao-recovery-try-connect" This reverts commit 8ae8d5347b787ce5e08d6fdb5e7f266299fd70dd. * zombienet/pov-recovery: 4 validators * REVERTME: diener update --polkadot --branch ao-recovery-try-connect && cargo update -p polkadot-primitives * Revert "REVERTME: diener update --polkadot --branch ao-recovery-try-connect && cargo update -p polkadot-primitives" This reverts commit 3cc918220de5bf8ca5368586e55556464d106afd. * make sure it is not due to backing group connections * clean up flags * try no-mdns on collators, limit out-peers on validators * try no-mdns on validators and bob * fix bob flag * try 7 validators (3 chunks needed for recovery) * reserved-only on validators * reserved-only on alice and charlie * explicitly pass log targets * rm default_args * parachain=debug and cumulus-pov-recovery=debug * try another idea * try 13 validators (4 chunks required) * bump block height to 20 * Register parachain after 20sec, increase block target to 20 * bump zombienet version * remove debug * bump zombienet * update lockfile for {"polkadot", "substrate"} Co-authored-by: Sebastian Kunert Co-authored-by: Javier Viola Co-authored-by: parity-processbot <> Co-authored-by: Bastian Köcher --- .gitlab-ci.yml | 2 +- zombienet_tests/0002-pov_recovery.feature | 25 ++++++++---- zombienet_tests/0002-pov_recovery.toml | 47 +++++++++++++---------- zombienet_tests/register-para.js | 9 +++++ 4 files changed, 54 insertions(+), 29 deletions(-) create mode 100644 zombienet_tests/register-para.js diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 38bccdb91bf..dcb7de25f2e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -29,7 +29,7 @@ variables: CI_IMAGE: "paritytech/ci-linux:production" DOCKER_OS: "debian:stretch" ARCH: "x86_64" - ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.2.59" + ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.2.80" .collect-artifacts: &collect-artifacts artifacts: diff --git a/zombienet_tests/0002-pov_recovery.feature b/zombienet_tests/0002-pov_recovery.feature index fa9836e264b..0b4d0a81de8 100644 --- a/zombienet_tests/0002-pov_recovery.feature +++ b/zombienet_tests/0002-pov_recovery.feature @@ -3,11 +3,20 @@ Network: ./0002-pov_recovery.toml Creds: config -alice: is up -bob: is up -charlie: is up -dave: is up -eve: is up -alice: parachain 2000 is registered within 225 seconds -dave: reports block height is at least 7 within 250 seconds -eve: reports block height is at least 7 within 250 seconds +validator-0: is up +validator-1: is up +validator-2: is up +validator-3: is up +alice: is up within 60 seconds +bob: is up within 60 seconds +charlie: is up within 60 seconds + +# wait 30 blocks and register parachain +validator-3: reports block height is at least 30 within 250 seconds +validator-0: js-script ./register-para.js with "2000" within 240 seconds +validator-0: parachain 2000 is registered within 300 seconds + +# check block production +bob: reports block height is at least 20 within 600 seconds +alice: reports block height is at least 20 within 600 seconds +charlie: reports block height is at least 20 within 600 seconds diff --git a/zombienet_tests/0002-pov_recovery.toml b/zombienet_tests/0002-pov_recovery.toml index fc62d94595a..a9117dd82c6 100644 --- a/zombienet_tests/0002-pov_recovery.toml +++ b/zombienet_tests/0002-pov_recovery.toml @@ -1,44 +1,51 @@ [relaychain] default_image = "{{RELAY_IMAGE}}" default_command = "polkadot" -default_args = [ "-lparachain=debug" ] chain = "rococo-local" - [[relaychain.nodes]] - name = "alice" - validator = true +[relaychain.genesis.runtime.runtime_genesis_config.configuration.config] +# set parameters such that collators only connect to 1 validator as a backing group +max_validators_per_core = 1 +group_rotation_frequency = 100 # 10 mins [[relaychain.nodes]] - name = "bob" - validator = true + name = "ferdie" # bootnode fullnode + validator = false + + [[relaychain.node_groups]] + name = "validator" + count = 13 + args = ["-lparachain::availability=trace,sync=debug,parachain=debug", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] [[parachains]] id = 2000 cumulus_based = true +register_para = false +add_to_genesis = false - # run charlie as parachain collator + # run bob as a parachain collator who is the only one producing blocks + # alice and charlie will need to recover the pov blocks through availability recovery [[parachains.collators]] - name = "charlie" - validator = true + name = "bob" + validator = true # collator image = "{{COL_IMAGE}}" command = "test-parachain" - args = ["-lparachain=debug"] + args = ["--disable-block-announcements"] - # Run dave as parachain collator and eve as parachain full node - # - # They will need to recover the pov blocks through availability recovery. + # run alice as a parachain collator who does not produce blocks + # alice is a bootnode for bob and charlie [[parachains.collators]] - name = "dave" - validator = true + name = "alice" + validator = true # collator image = "{{COL_IMAGE}}" command = "test-parachain" - args = ["--reserved-only", "--reserved-nodes {{'charlie'|zombie('multiAddress')}}", "--use-null-consensus", "--disable-block-announcements"] + args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug", "--use-null-consensus", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}", "--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] - # run eve as parachain full node that is only connected to dave + # run eve as a parachain full node [[parachains.collators]] - name = "eve" - validator = false + name = "charlie" + validator = false # full node image = "{{COL_IMAGE}}" command = "test-parachain" - args = ["--reserved-only", "--reserved-nodes {{'charlie'|zombie('multiAddress')}}", "--use-null-consensus", "--disable-block-announcements"] + args = ["-lparachain::availability=trace,sync=debug,parachain=debug,cumulus-pov-recovery=debug", "--disable-block-announcements", "--bootnodes {{'bob'|zombie('multiAddress')}}","--", "--reserved-only", "--reserved-nodes {{'ferdie'|zombie('multiAddress')}}"] diff --git a/zombienet_tests/register-para.js b/zombienet_tests/register-para.js new file mode 100644 index 00000000000..c080904aefe --- /dev/null +++ b/zombienet_tests/register-para.js @@ -0,0 +1,9 @@ +async function run(nodeName, networkInfo, args) { + const paraIdStr = args[0]; + const para = networkInfo.paras[paraIdStr]; + const relayNode = networkInfo.relay[0]; + + await zombie.registerParachain(parseInt(paraIdStr,10),para.wasmPath, para.statePath, relayNode.wsUri, "//Alice", true); +} + +module.exports = { run } From a53703ee3ee02a97a38902c4cab822484d25a7c8 Mon Sep 17 00:00:00 2001 From: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> Date: Wed, 19 Oct 2022 16:31:42 +0200 Subject: [PATCH 140/148] [ci] Split .gitlab-ci.yml (#1701) * [WIP][ci] Split .gitlab-ci.yml * comment unused includes * fix typo * fix needs * add all stages * exclude zombienet from check --- .github/pr-custom-review.yml | 1 + .gitlab-ci.yml | 583 ++---------------- scripts/ci/gitlab/pipeline/benchmarks.yml | 61 ++ scripts/ci/gitlab/pipeline/build.yml | 113 ++++ .../ci/gitlab/pipeline/integration_tests.yml | 2 + scripts/ci/gitlab/pipeline/publish.yml | 117 ++++ scripts/ci/gitlab/pipeline/test.yml | 79 +++ scripts/ci/gitlab/pipeline/zombienet.yml | 101 +++ 8 files changed, 517 insertions(+), 540 deletions(-) create mode 100644 scripts/ci/gitlab/pipeline/benchmarks.yml create mode 100644 scripts/ci/gitlab/pipeline/build.yml create mode 100644 scripts/ci/gitlab/pipeline/integration_tests.yml create mode 100644 scripts/ci/gitlab/pipeline/publish.yml create mode 100644 scripts/ci/gitlab/pipeline/test.yml create mode 100644 scripts/ci/gitlab/pipeline/zombienet.yml diff --git a/.github/pr-custom-review.yml b/.github/pr-custom-review.yml index 18e2482b2a4..99155388877 100644 --- a/.github/pr-custom-review.yml +++ b/.github/pr-custom-review.yml @@ -29,6 +29,7 @@ rules: check_type: changed_files condition: include: ^\.gitlab-ci\.yml|^scripts/ci/.*|^\.github/.* + exclude: ^scripts/ci/gitlab/pipeline/zombienet.yml$ min_approvals: 2 teams: - ci diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dcb7de25f2e..933c0eb196c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -11,7 +11,8 @@ stages: - benchmarks-build - benchmarks-run - publish - - integration-test + - integration-tests + - zombienet default: interruptible: true @@ -31,7 +32,7 @@ variables: ARCH: "x86_64" ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.2.80" -.collect-artifacts: &collect-artifacts +.collect-artifacts: artifacts: name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}" when: on_success @@ -39,27 +40,21 @@ variables: paths: - ./artifacts/ -.rust-info-script: &rust-info-script - - rustup show - - cargo --version - - rustup +nightly show - - cargo +nightly --version - - bash --version - # collecting vars for pipeline stopper # they will be used if the job fails -.pipeline-stopper-vars: &pipeline-stopper-vars +.pipeline-stopper-vars: + before_script: - echo "FAILED_JOB_URL=${CI_JOB_URL}" > pipeline-stopper.env - echo "FAILED_JOB_NAME=${CI_JOB_NAME}" >> pipeline-stopper.env - echo "FAILED_JOB_NAME=${CI_JOB_NAME}" >> pipeline-stopper.env - echo "PR_NUM=${CI_COMMIT_REF_NAME}" >> pipeline-stopper.env -.pipeline-stopper-artifacts: &pipeline-stopper-artifacts +.pipeline-stopper-artifacts: artifacts: reports: dotenv: pipeline-stopper.env -.common-refs: &common-refs +.common-refs: # these jobs run always* rules: - if: $CI_PIPELINE_SOURCE == "schedule" @@ -69,29 +64,29 @@ variables: - if: $CI_COMMIT_REF_NAME =~ /^release-parachains-v[0-9].*$/ # i.e. release-parachains-v1.0, release-parachains-v2.1rc1, release-parachains-v3000 - if: $CI_COMMIT_REF_NAME =~ /^polkadot-v[0-9]+\.[0-9]+.*$/ # i.e. polkadot-v1.0.99, polkadot-v2.1rc1 -.pr-refs: &pr-refs +.pr-refs: # these jobs run always* rules: - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs -.publish-refs: &publish-refs +.publish-refs: rules: - if: $CI_COMMIT_REF_NAME == "master" - if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 # run benchmarks manually only on release-parachains-v* branch -.benchmarks-manual-refs: &benchmarks-manual-refs +.benchmarks-manual-refs: rules: - if: $CI_COMMIT_REF_NAME =~ /^release-parachains-v[0-9].*$/ # i.e. release-parachains-v1.0, release-parachains-v2.1rc1, release-parachains-v3000 when: manual # run benchmarks only on release-parachains-v* branch -.benchmarks-refs: &benchmarks-refs +.benchmarks-refs: rules: - if: $CI_COMMIT_REF_NAME =~ /^release-parachains-v[0-9].*$/ # i.e. release-parachains-v1.0, release-parachains-v2.1rc1, release-parachains-v3000 -.zombienet-refs: &zombienet-refs +.zombienet-refs: rules: - if: $CI_PIPELINE_SOURCE == "pipeline" when: never @@ -100,540 +95,48 @@ variables: - if: $CI_COMMIT_REF_NAME == "master" - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs -.docker-env: &docker-env +.docker-env: image: "${CI_IMAGE}" before_script: - - *rust-info-script + - rustup show + - cargo --version + - rustup +nightly show + - cargo +nightly --version + - bash --version tags: - linux-docker -.kubernetes-env: &kubernetes-env +.kubernetes-env: image: "${CI_IMAGE}" tags: - kubernetes-parity-build -#### stage: test - -test-linux-stable: - stage: test - <<: *docker-env - <<: *common-refs - <<: *pipeline-stopper-artifacts - before_script: - - *rust-info-script - - *pipeline-stopper-vars - variables: - # Enable debug assertions since we are running optimized builds for testing - # but still want to have debug assertions. - RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings" - script: - - time cargo nextest run --all --release --locked --run-ignored all - -test-doc: - stage: test - <<: *docker-env - <<: *common-refs - variables: - # Enable debug assertions since we are running optimized builds for testing - # but still want to have debug assertions. - RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings" - script: - - time cargo test --doc - -check-runtime-benchmarks: - stage: test - <<: *docker-env - <<: *common-refs - script: - # Check that the node will compile with `runtime-benchmarks` feature flag. - - time cargo check --all --features runtime-benchmarks - # Check that parachain-template will compile with `runtime-benchmarks` feature flag. - - time cargo check -p parachain-template-node --features runtime-benchmarks - -cargo-check-try-runtime: - stage: test - <<: *docker-env - <<: *common-refs - # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs - needs: - - job: check-runtime-benchmarks - artifacts: false - script: - # Check that the node will compile with `try-runtime` feature flag. - - time cargo check --all --features try-runtime - # Check that parachain-template will compile with `try-runtime` feature flag. - - time cargo check -p parachain-template-node --features try-runtime - -check-rustdoc: - stage: test - <<: *docker-env - <<: *common-refs - variables: - SKIP_WASM_BUILD: 1 - RUSTDOCFLAGS: "-Dwarnings" - script: - - time cargo +nightly doc --workspace --all-features --verbose --no-deps - -cargo-check-benches: - stage: test - <<: *docker-env - <<: *common-refs - # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs - needs: - - job: check-rustdoc - artifacts: false - script: - - time cargo check --all --benches - -#### stage: build - -build-linux-stable: - stage: build - <<: *docker-env - <<: *collect-artifacts - <<: *common-refs - variables: - # Enable debug assertions since we are running optimized builds for testing - # but still want to have debug assertions. - RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings" - # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs - needs: - - job: check-rustdoc - artifacts: false - script: - - echo "___Building a binary, please refrain from using it in production since it goes with the debug assertions.___" - - time cargo build --release --locked --bin polkadot-parachain - - echo "___Packing the artifacts___" - - mkdir -p ./artifacts - - mv ./target/release/polkadot-parachain ./artifacts/. - - echo "___The VERSION is either a tag name or the curent branch if triggered not by a tag___" - - echo ${CI_COMMIT_REF_NAME} | tee ./artifacts/VERSION - -build-test-parachain: - stage: build - <<: *docker-env - <<: *collect-artifacts - <<: *common-refs - variables: - # Enable debug assertions since we are running optimized builds for testing - # but still want to have debug assertions. - RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings" - # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs - needs: - - job: check-rustdoc - artifacts: false - script: - - echo "___Building a binary, please refrain from using it in production since it goes with the debug assertions.___" - - time cargo +nightly build --release --locked --bin test-parachain - - echo "___Packing the artifacts___" - - mkdir -p ./artifacts - - mv ./target/release/test-parachain ./artifacts/. - - mkdir -p ./artifacts/zombienet - - mv ./target/release/wbuild/cumulus-test-runtime/wasm_binary_spec_version_incremented.rs.compact.compressed.wasm ./artifacts/zombienet/. - -# build runtime only if files in $RUNTIME_PATH/$RUNTIME_NAME were changed -.build-runtime-template: &build-runtime-template - stage: build - <<: *docker-env - <<: *pr-refs - # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs - needs: - - job: check-rustdoc - artifacts: false - variables: - RUNTIME_PATH: "parachains/runtimes/assets" - script: - - cd ${RUNTIME_PATH} - - for directory in $(echo */); do - echo "_____Running cargo check for ${directory} ______"; - cd ${directory}; - pwd; - SKIP_WASM_BUILD=1 cargo check; - cd ..; - done - -# DAG: build-runtime-assets -> build-runtime-collectives -> build-runtime-contracts -# DAG: build-runtime-assets ->build-runtime-starters -> build-runtime-testing -build-runtime-assets: - <<: *build-runtime-template - variables: - RUNTIME_PATH: "parachains/runtimes/assets" - -build-runtime-collectives: - <<: *build-runtime-template - variables: - RUNTIME_PATH: "parachains/runtimes/collectives" - # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs - needs: - - job: build-runtime-assets - artifacts: false - -build-runtime-contracts: - <<: *build-runtime-template - variables: - RUNTIME_PATH: "parachains/runtimes/contracts" - # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs - needs: - - job: build-runtime-collectives - artifacts: false - -build-runtime-starters: - <<: *build-runtime-template - variables: - RUNTIME_PATH: "parachains/runtimes/starters" - # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs - needs: - - job: build-runtime-assets - artifacts: false - -build-runtime-testing: - <<: *build-runtime-template - variables: - RUNTIME_PATH: "parachains/runtimes/testing" - # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs - needs: - - job: build-runtime-starters - artifacts: false - - -#### stage: publish - -.build-push-image: &build-push-image - image: quay.io/buildah/stable - variables: - DOCKERFILE: "" # docker/path-to.Dockerfile - IMAGE_NAME: "" # docker.io/paritypr/image_name - VERSION: "${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" - script: - - test "$PARITYPR_USER" -a "$PARITYPR_PASS" || - ( echo "no docker credentials provided"; exit 1 ) - - buildah bud - --format=docker - --build-arg VCS_REF="${CI_COMMIT_SHA}" - --build-arg BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')" - --build-arg IMAGE_NAME="${IMAGE_NAME}" - --tag "$IMAGE_NAME:$VERSION" - --file ${DOCKERFILE} . - - echo "$PARITYPR_PASS" | - buildah login --username "$PARITYPR_USER" --password-stdin docker.io - - buildah info - - buildah push --format=v2s2 "$IMAGE_NAME:$VERSION" - after_script: - - buildah logout --all - -build-push-image-polkadot-parachain-debug: - stage: publish - <<: *kubernetes-env - <<: *common-refs - <<: *build-push-image - needs: - - job: build-linux-stable - artifacts: true - variables: - DOCKERFILE: "docker/polkadot-parachain-debug_unsigned_injected.Dockerfile" - IMAGE_NAME: "docker.io/paritypr/polkadot-parachain-debug" - VERSION: "${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" - -build-push-image-test-parachain: - stage: publish - <<: *kubernetes-env - <<: *common-refs - <<: *build-push-image - needs: - - job: build-test-parachain - artifacts: true - variables: - DOCKERFILE: "docker/test-parachain_injected.Dockerfile" - IMAGE_NAME: "docker.io/paritypr/test-parachain" - VERSION: "${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" - -publish-s3: - stage: publish - <<: *kubernetes-env - image: paritytech/awscli:latest - <<: *publish-refs - needs: - - job: build-linux-stable - artifacts: true - variables: - GIT_STRATEGY: none - BUCKET: "releases.parity.io" - PREFIX: "cumulus/${ARCH}-${DOCKER_OS}" - script: - - echo "___Publishing a binary with debug assertions!___" - - echo "___VERSION = $(cat ./artifacts/VERSION) ___" - - aws s3 sync ./artifacts/ s3://${BUCKET}/${PREFIX}/$(cat ./artifacts/VERSION)/ - - echo "___Updating objects in latest path___" - - aws s3 sync s3://${BUCKET}/${PREFIX}/$(cat ./artifacts/VERSION)/ s3://${BUCKET}/${PREFIX}/latest/ - after_script: - - aws s3 ls s3://${BUCKET}/${PREFIX}/latest/ - --recursive --human-readable --summarize - -#### stage: benchmarks -# Work only on release-parachains-v* branches - -benchmarks-build: - stage: benchmarks-build - <<: *docker-env - <<: *collect-artifacts - <<: *benchmarks-manual-refs - script: - - time cargo build --profile production --locked --features runtime-benchmarks - - mkdir -p artifacts - - cp target/production/polkadot-parachain ./artifacts/ - -.git-commit-push: &git-commit-push - - git status - # Set git config - - rm -rf .git/config - - git config --global user.email "${GITHUB_EMAIL}" - - git config --global user.name "${GITHUB_USER}" - - git config remote.origin.url "https://${GITHUB_USER}:${GITHUB_TOKEN}@github.com/paritytech/${CI_PROJECT_NAME}.git" - - git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" - # push results to github - - git checkout -b $BRANCHNAME - - git add parachains/* - - git commit -m "[benchmarks] pr with weights" - - git push origin $BRANCHNAME - -benchmarks-assets: - stage: benchmarks-run - before_script: - - *rust-info-script - <<: *collect-artifacts - <<: *benchmarks-refs - timeout: 1d - script: - - ./scripts/benchmarks-ci.sh assets statemine ./artifacts - - ./scripts/benchmarks-ci.sh assets statemint ./artifacts - - ./scripts/benchmarks-ci.sh assets westmint ./artifacts - - export CURRENT_TIME=$(date '+%s') - - export BRANCHNAME="weights-statemint-${CI_COMMIT_BRANCH}-${CURRENT_TIME}" - - *git-commit-push - # create PR to release-parachains-v* branch - - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} - -d '{"title":"[benchmarks] Update weights for statemine/t","body":"This PR is generated automatically by CI. (Once merged please backport to master and node release branch.)","head":"'${BRANCHNAME}'","base":"'${CI_COMMIT_BRANCH}'"}' - -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls - after_script: - - rm -rf .git/config - tags: - - weights - -benchmarks-collectives: - stage: benchmarks-run - before_script: - - *rust-info-script - <<: *collect-artifacts - <<: *benchmarks-refs +.git-commit-push: script: - - ./scripts/benchmarks-ci.sh collectives collectives-polkadot ./artifacts - git status - - export CURRENT_TIME=$(date '+%s') - - export BRANCHNAME="weights-collectives-${CI_COMMIT_BRANCH}-${CURRENT_TIME}" - - *git-commit-push - # create PR - - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} - -d '{"title":"[benchmarks] Update weights for collectives","body":"This PR is generated automatically by CI.","head":"'$BRANCHNAME'","base":"'${CI_COMMIT_BRANCH}'"}' - -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls - after_script: + # Set git config - rm -rf .git/config - tags: - - weights - -publish-benchmarks-assets-s3: &publish-benchmarks - stage: publish - <<: *kubernetes-env - image: paritytech/awscli:latest - <<: *benchmarks-refs - needs: - - job: benchmarks-assets - artifacts: true - variables: - GIT_STRATEGY: none - BUCKET: "releases.parity.io" - PREFIX: "cumulus/$CI_COMMIT_REF_NAME/benchmarks" - script: - - echo "___Removing binary from artifacts___" - - rm -f ./artifacts/polkadot-parachain - - echo "___Publishing benchmark results___" - - aws s3 sync ./artifacts/ s3://${BUCKET}/${PREFIX}/ - after_script: - - aws s3 ls s3://${BUCKET}/${PREFIX}/ --recursive --human-readable --summarize - -publish-benchmarks-collectives-s3: - <<: *publish-benchmarks - needs: - - job: benchmarks-collectives - artifacts: true - -# Ref: https://github.com/paritytech/opstooling/issues/111 -update-parachain-template: - stage: publish - extends: .kubernetes-env - rules: - - if: $CI_COMMIT_REF_NAME =~ /^polkadot-v[0-9]+\.[0-9]+.*$/ # i.e. polkadot-v1.0.99, polkadot-v2.1rc1 - script: - - git clone --depth=1 --branch="$PIPELINE_SCRIPTS_TAG" https://github.com/paritytech/pipeline-scripts - - ./pipeline-scripts/update_substrate_template.sh - --repo-name "substrate-parachain-template" - --template-path "parachain-template" - --github-api-token "$GITHUB_TOKEN" - --polkadot-branch "$CI_COMMIT_REF_NAME" - -#### stage: integration-test - -zombienet-0001-sync_blocks_from_tip_without_connected_collator: - stage: integration-test - image: "${ZOMBIENET_IMAGE}" - <<: *zombienet-refs - needs: - - job: build-push-image-test-parachain - variables: - POLKADOT_IMAGE: "docker.io/paritypr/polkadot-debug:master" - GH_DIR: "https://github.com/paritytech/cumulus/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests" - COL_IMAGE: "docker.io/paritypr/test-parachain:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" - before_script: - - echo "Zombie-net Tests Config" - - echo "${ZOMBIENET_IMAGE}" - - echo "${RELAY_IMAGE}" - - echo "${COL_IMAGE}" - - echo "${GH_DIR}" - - export DEBUG=zombie - - export RELAY_IMAGE=${POLKADOT_IMAGE} - - export COL_IMAGE=${COL_IMAGE} - script: - - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh - --github-remote-dir="${GH_DIR}" - --concurrency=1 - --test="0001-sync_blocks_from_tip_without_connected_collator.feature" - allow_failure: true - retry: 2 - tags: - - zombienet-polkadot-integration-test - -zombienet-0002-pov_recovery: - stage: integration-test - image: "${ZOMBIENET_IMAGE}" - <<: *zombienet-refs - needs: - - job: build-push-image-test-parachain - variables: - POLKADOT_IMAGE: "docker.io/paritypr/polkadot-debug:master" - GH_DIR: "https://github.com/paritytech/cumulus/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests" - COL_IMAGE: "docker.io/paritypr/test-parachain:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" - before_script: - - echo "Zombie-net Tests Config" - - echo "${ZOMBIENET_IMAGE}" - - echo "${RELAY_IMAGE}" - - echo "${COL_IMAGE}" - - echo "${GH_DIR}" - - export DEBUG=zombie - - export RELAY_IMAGE=${POLKADOT_IMAGE} - - export COL_IMAGE=${COL_IMAGE} - script: - - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh - --github-remote-dir="${GH_DIR}" - --concurrency=1 - --test="0002-pov_recovery.feature" - allow_failure: true - retry: 2 - tags: - - zombienet-polkadot-integration-test - -zombienet-0003-full_node_catching_up: - stage: integration-test - image: "${ZOMBIENET_IMAGE}" - <<: *zombienet-refs - needs: - - job: build-push-image-test-parachain - variables: - POLKADOT_IMAGE: "docker.io/paritypr/polkadot-debug:master" - GH_DIR: "https://github.com/paritytech/cumulus/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests" - COL_IMAGE: "docker.io/paritypr/test-parachain:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" - before_script: - - echo "Zombie-net Tests Config" - - echo "${ZOMBIENET_IMAGE}" - - echo "${RELAY_IMAGE}" - - echo "${COL_IMAGE}" - - echo "${GH_DIR}" - - export DEBUG=zombie - - export RELAY_IMAGE=${POLKADOT_IMAGE} - - export COL_IMAGE=${COL_IMAGE} - script: - - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh - --github-remote-dir="${GH_DIR}" - --concurrency=1 - --test="0003-full_node_catching_up.feature" - allow_failure: true - retry: 2 - tags: - - zombienet-polkadot-integration-test - -zombienet-0004-runtime_upgrade: - stage: integration-test - image: "${ZOMBIENET_IMAGE}" - <<: *zombienet-refs - needs: - - job: build-push-image-test-parachain - - job: build-test-parachain - artifacts: true - variables: - POLKADOT_IMAGE: "docker.io/paritypr/polkadot-debug:master" - GH_DIR: "https://github.com/paritytech/cumulus/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests" - COL_IMAGE: "docker.io/paritypr/test-parachain:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" - before_script: - - ls -ltr * - - cp ./artifacts/zombienet/wasm_binary_spec_version_incremented.rs.compact.compressed.wasm /tmp/ - - ls /tmp - - echo "Zombie-net Tests Config" - - echo "${ZOMBIENET_IMAGE}" - - echo "${RELAY_IMAGE}" - - echo "${COL_IMAGE}" - - echo "${GH_DIR}" - - export DEBUG=zombie - - export RELAY_IMAGE=${POLKADOT_IMAGE} - - export COL_IMAGE=${COL_IMAGE} - script: - - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh - --github-remote-dir="${GH_DIR}" - --concurrency=1 - --test="0004-runtime_upgrade.feature" - allow_failure: true - retry: 2 - tags: - - zombienet-polkadot-integration-test - -zombienet-0005-migrate_solo_to_para: - stage: integration-test - image: "${ZOMBIENET_IMAGE}" - <<: *zombienet-refs - needs: - - job: build-push-image-test-parachain - - job: build-test-parachain - artifacts: true - variables: - POLKADOT_IMAGE: "docker.io/paritypr/polkadot-debug:master" - GH_DIR: "https://github.com/paritytech/cumulus/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests" - COL_IMAGE: "docker.io/paritypr/test-parachain:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" - before_script: - - ls -ltr * - - echo "Zombie-net Tests Config" - - echo "${ZOMBIENET_IMAGE}" - - echo "${RELAY_IMAGE}" - - echo "${COL_IMAGE}" - - echo "${GH_DIR}" - - export DEBUG=zombie - - export RELAY_IMAGE=${POLKADOT_IMAGE} - - export COL_IMAGE=${COL_IMAGE} - script: - - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh - --github-remote-dir="${GH_DIR}" - --concurrency=1 - --test="0005-migrate_solo_to_para.feature" - allow_failure: true - retry: 2 - tags: - - zombienet-polkadot-integration-test + - git config --global user.email "${GITHUB_EMAIL}" + - git config --global user.name "${GITHUB_USER}" + - git config remote.origin.url "https://${GITHUB_USER}:${GITHUB_TOKEN}@github.com/paritytech/${CI_PROJECT_NAME}.git" + - git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" + # push results to github + - git checkout -b $BRANCHNAME + - git add parachains/* + - git commit -m "[benchmarks] pr with weights" + - git push origin $BRANCHNAME + +include: + # test jobs + - scripts/ci/gitlab/pipeline/test.yml + # # build jobs + - scripts/ci/gitlab/pipeline/build.yml + # # benchmarks jobs + - scripts/ci/gitlab/pipeline/benchmarks.yml + # # publish jobs + - scripts/ci/gitlab/pipeline/publish.yml + # zombienet jobs + - scripts/ci/gitlab/pipeline/zombienet.yml 0006-rpc_collator_builds_blocks: stage: integration-test @@ -669,7 +172,7 @@ zombienet-0005-migrate_solo_to_para: # This job cancels the whole pipeline if any of provided jobs fail. # In a DAG, every jobs chain is executed independently of others. The `fail_fast` principle suggests # to fail the pipeline as soon as possible to shorten the feedback loop. -.cancel-pipeline: +cancel-pipeline: stage: .post needs: - job: test-linux-stable diff --git a/scripts/ci/gitlab/pipeline/benchmarks.yml b/scripts/ci/gitlab/pipeline/benchmarks.yml new file mode 100644 index 00000000000..03aedd03960 --- /dev/null +++ b/scripts/ci/gitlab/pipeline/benchmarks.yml @@ -0,0 +1,61 @@ +# This file is part of .gitlab-ci.yml +# Here are all jobs that are executed during "benchmarks" stage +# Work only on release-parachains-v* branches + +benchmarks-build: + stage: benchmarks-build + extends: + - .docker-env + - .collect-artifacts + - .benchmarks-manual-refs + script: + - time cargo build --profile production --locked --features runtime-benchmarks + - mkdir -p artifacts + - cp target/production/polkadot-parachain ./artifacts/ + +benchmarks-assets: + stage: benchmarks-run + extends: + - .collect-artifacts + - .benchmarks-refs + before_script: + - !reference [.docker-env, before_script] + timeout: 1d + script: + - ./scripts/benchmarks-ci.sh assets statemine ./artifacts + - ./scripts/benchmarks-ci.sh assets statemint ./artifacts + - ./scripts/benchmarks-ci.sh assets westmint ./artifacts + - export CURRENT_TIME=$(date '+%s') + - export BRANCHNAME="weights-statemint-${CI_COMMIT_BRANCH}-${CURRENT_TIME}" + - !reference [.git-commit-push, script] + # create PR to release-parachains-v* branch + - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} + -d '{"title":"[benchmarks] Update weights for statemine/t","body":"This PR is generated automatically by CI. (Once merged please backport to master and node release branch.)","head":"'${BRANCHNAME}'","base":"'${CI_COMMIT_BRANCH}'"}' + -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls + after_script: + - rm -rf .git/config + tags: + - weights + +benchmarks-collectives: + stage: benchmarks-run + extends: + - .collect-artifacts + - .benchmarks-refs + before_script: + - !reference [.docker-env, before_script] + script: + - ./scripts/benchmarks-ci.sh collectives collectives-polkadot ./artifacts + - git status + - export CURRENT_TIME=$(date '+%s') + - export BRANCHNAME="weights-collectives-${CI_COMMIT_BRANCH}-${CURRENT_TIME}" + - !reference [.git-commit-push, script] + # create PR + - curl -u ${GITHUB_USER}:${GITHUB_TOKEN} + -d '{"title":"[benchmarks] Update weights for collectives","body":"This PR is generated automatically by CI.","head":"'$BRANCHNAME'","base":"'${CI_COMMIT_BRANCH}'"}' + -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls + after_script: + - rm -rf .git/config + tags: + - weights + diff --git a/scripts/ci/gitlab/pipeline/build.yml b/scripts/ci/gitlab/pipeline/build.yml new file mode 100644 index 00000000000..86081e6a46a --- /dev/null +++ b/scripts/ci/gitlab/pipeline/build.yml @@ -0,0 +1,113 @@ +# This file is part of .gitlab-ci.yml +# Here are all jobs that are executed during "build" stage + +build-linux-stable: + stage: build + extends: + - .docker-env + - .common-refs + - .collect-artifacts + variables: + # Enable debug assertions since we are running optimized builds for testing + # but still want to have debug assertions. + RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings" + # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs + needs: + - job: check-rustdoc + artifacts: false + script: + - echo "___Building a binary, please refrain from using it in production since it goes with the debug assertions.___" + - time cargo build --release --locked --bin polkadot-parachain + - echo "___Packing the artifacts___" + - mkdir -p ./artifacts + - mv ./target/release/polkadot-parachain ./artifacts/. + - echo "___The VERSION is either a tag name or the curent branch if triggered not by a tag___" + - echo ${CI_COMMIT_REF_NAME} | tee ./artifacts/VERSION + +build-test-parachain: + stage: build + extends: + - .docker-env + - .common-refs + - .collect-artifacts + variables: + # Enable debug assertions since we are running optimized builds for testing + # but still want to have debug assertions. + RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings" + # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs + needs: + - job: check-rustdoc + artifacts: false + script: + - echo "___Building a binary, please refrain from using it in production since it goes with the debug assertions.___" + - time cargo +nightly build --release --locked --bin test-parachain + - echo "___Packing the artifacts___" + - mkdir -p ./artifacts + - mv ./target/release/test-parachain ./artifacts/. + - mkdir -p ./artifacts/zombienet + - mv ./target/release/wbuild/cumulus-test-runtime/wasm_binary_spec_version_incremented.rs.compact.compressed.wasm ./artifacts/zombienet/. + +# build runtime only if files in $RUNTIME_PATH/$RUNTIME_NAME were changed +.build-runtime-template: &build-runtime-template + stage: build + extends: + - .docker-env + - .pr-refs + # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs + needs: + - job: check-rustdoc + artifacts: false + variables: + RUNTIME_PATH: "parachains/runtimes/assets" + script: + - cd ${RUNTIME_PATH} + - for directory in $(echo */); do + echo "_____Running cargo check for ${directory} ______"; + cd ${directory}; + pwd; + SKIP_WASM_BUILD=1 cargo check; + cd ..; + done + +# DAG: build-runtime-assets -> build-runtime-collectives -> build-runtime-contracts +# DAG: build-runtime-assets ->build-runtime-starters -> build-runtime-testing +build-runtime-assets: + <<: *build-runtime-template + variables: + RUNTIME_PATH: "parachains/runtimes/assets" + +build-runtime-collectives: + <<: *build-runtime-template + variables: + RUNTIME_PATH: "parachains/runtimes/collectives" + # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs + needs: + - job: build-runtime-assets + artifacts: false + +build-runtime-contracts: + <<: *build-runtime-template + variables: + RUNTIME_PATH: "parachains/runtimes/contracts" + # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs + needs: + - job: build-runtime-collectives + artifacts: false + +build-runtime-starters: + <<: *build-runtime-template + variables: + RUNTIME_PATH: "parachains/runtimes/starters" + # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs + needs: + - job: build-runtime-assets + artifacts: false + +build-runtime-testing: + <<: *build-runtime-template + variables: + RUNTIME_PATH: "parachains/runtimes/testing" + # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs + needs: + - job: build-runtime-starters + artifacts: false diff --git a/scripts/ci/gitlab/pipeline/integration_tests.yml b/scripts/ci/gitlab/pipeline/integration_tests.yml new file mode 100644 index 00000000000..a884361aa7c --- /dev/null +++ b/scripts/ci/gitlab/pipeline/integration_tests.yml @@ -0,0 +1,2 @@ +# This file is part of .gitlab-ci.yml +# Here are all jobs that are executed during "integration_stage" stage diff --git a/scripts/ci/gitlab/pipeline/publish.yml b/scripts/ci/gitlab/pipeline/publish.yml new file mode 100644 index 00000000000..5773bc2b066 --- /dev/null +++ b/scripts/ci/gitlab/pipeline/publish.yml @@ -0,0 +1,117 @@ +# This file is part of .gitlab-ci.yml +# Here are all jobs that are executed during "publish" stage + +.build-push-image: + image: quay.io/buildah/stable + variables: + DOCKERFILE: "" # docker/path-to.Dockerfile + IMAGE_NAME: "" # docker.io/paritypr/image_name + VERSION: "${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" + script: + - test "$PARITYPR_USER" -a "$PARITYPR_PASS" || + ( echo "no docker credentials provided"; exit 1 ) + - buildah bud + --format=docker + --build-arg VCS_REF="${CI_COMMIT_SHA}" + --build-arg BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')" + --build-arg IMAGE_NAME="${IMAGE_NAME}" + --tag "$IMAGE_NAME:$VERSION" + --file ${DOCKERFILE} . + - echo "$PARITYPR_PASS" | + buildah login --username "$PARITYPR_USER" --password-stdin docker.io + - buildah info + - buildah push --format=v2s2 "$IMAGE_NAME:$VERSION" + after_script: + - buildah logout --all + +build-push-image-polkadot-parachain-debug: + stage: publish + extends: + - .kubernetes-env + - .common-refs + - .build-push-image + needs: + - job: build-linux-stable + artifacts: true + variables: + DOCKERFILE: "docker/polkadot-parachain-debug_unsigned_injected.Dockerfile" + IMAGE_NAME: "docker.io/paritypr/polkadot-parachain-debug" + VERSION: "${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" + +build-push-image-test-parachain: + stage: publish + extends: + - .kubernetes-env + - .common-refs + - .build-push-image + needs: + - job: build-test-parachain + artifacts: true + variables: + DOCKERFILE: "docker/test-parachain_injected.Dockerfile" + IMAGE_NAME: "docker.io/paritypr/test-parachain" + VERSION: "${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" + +publish-s3: + stage: publish + extends: + - .kubernetes-env + - .publish-refs + image: paritytech/awscli:latest + needs: + - job: build-linux-stable + artifacts: true + variables: + GIT_STRATEGY: none + BUCKET: "releases.parity.io" + PREFIX: "cumulus/${ARCH}-${DOCKER_OS}" + script: + - echo "___Publishing a binary with debug assertions!___" + - echo "___VERSION = $(cat ./artifacts/VERSION) ___" + - aws s3 sync ./artifacts/ s3://${BUCKET}/${PREFIX}/$(cat ./artifacts/VERSION)/ + - echo "___Updating objects in latest path___" + - aws s3 sync s3://${BUCKET}/${PREFIX}/$(cat ./artifacts/VERSION)/ s3://${BUCKET}/${PREFIX}/latest/ + after_script: + - aws s3 ls s3://${BUCKET}/${PREFIX}/latest/ + --recursive --human-readable --summarize + +publish-benchmarks-assets-s3: &publish-benchmarks + stage: publish + extends: + - .kubernetes-env + - .benchmarks-refs + image: paritytech/awscli:latest + needs: + - job: benchmarks-assets + artifacts: true + variables: + GIT_STRATEGY: none + BUCKET: "releases.parity.io" + PREFIX: "cumulus/$CI_COMMIT_REF_NAME/benchmarks" + script: + - echo "___Removing binary from artifacts___" + - rm -f ./artifacts/polkadot-parachain + - echo "___Publishing benchmark results___" + - aws s3 sync ./artifacts/ s3://${BUCKET}/${PREFIX}/ + after_script: + - aws s3 ls s3://${BUCKET}/${PREFIX}/ --recursive --human-readable --summarize + +publish-benchmarks-collectives-s3: + <<: *publish-benchmarks + needs: + - job: benchmarks-collectives + artifacts: true + +# Ref: https://github.com/paritytech/opstooling/issues/111 +update-parachain-template: + stage: publish + extends: .kubernetes-env + rules: + - if: $CI_COMMIT_REF_NAME =~ /^polkadot-v[0-9]+\.[0-9]+.*$/ # i.e. polkadot-v1.0.99, polkadot-v2.1rc1 + script: + - git clone --depth=1 --branch="$PIPELINE_SCRIPTS_TAG" https://github.com/paritytech/pipeline-scripts + - ./pipeline-scripts/update_substrate_template.sh + --repo-name "substrate-parachain-template" + --template-path "parachain-template" + --github-api-token "$GITHUB_TOKEN" + --polkadot-branch "$CI_COMMIT_REF_NAME" diff --git a/scripts/ci/gitlab/pipeline/test.yml b/scripts/ci/gitlab/pipeline/test.yml new file mode 100644 index 00000000000..0db2bb554b0 --- /dev/null +++ b/scripts/ci/gitlab/pipeline/test.yml @@ -0,0 +1,79 @@ +# This file is part of .gitlab-ci.yml +# Here are all jobs that are executed during "test" stage + +test-linux-stable: + stage: test + extends: + - .docker-env + - .common-refs + - .pipeline-stopper-artifacts + before_script: + - !reference [.docker-env, before_script] + - !reference [.pipeline-stopper-vars, before_script] + variables: + # Enable debug assertions since we are running optimized builds for testing + # but still want to have debug assertions. + RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings" + script: + - time cargo nextest run --all --release --locked --run-ignored all + +test-doc: + stage: test + extends: + - .docker-env + - .common-refs + variables: + # Enable debug assertions since we are running optimized builds for testing + # but still want to have debug assertions. + RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings" + script: + - time cargo test --doc + +check-runtime-benchmarks: + stage: test + extends: + - .docker-env + - .common-refs + script: + # Check that the node will compile with `runtime-benchmarks` feature flag. + - time cargo check --all --features runtime-benchmarks + # Check that parachain-template will compile with `runtime-benchmarks` feature flag. + - time cargo check -p parachain-template-node --features runtime-benchmarks + +cargo-check-try-runtime: + stage: test + extends: + - .docker-env + - .common-refs + # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs + needs: + - job: check-runtime-benchmarks + artifacts: false + script: + # Check that the node will compile with `try-runtime` feature flag. + - time cargo check --all --features try-runtime + # Check that parachain-template will compile with `try-runtime` feature flag. + - time cargo check -p parachain-template-node --features try-runtime + +check-rustdoc: + stage: test + extends: + - .docker-env + - .common-refs + variables: + SKIP_WASM_BUILD: 1 + RUSTDOCFLAGS: "-Dwarnings" + script: + - time cargo +nightly doc --workspace --all-features --verbose --no-deps + +cargo-check-benches: + stage: test + extends: + - .docker-env + - .common-refs + # this is an artificial job dependency, for pipeline optimization using GitLab's DAGs + needs: + - job: check-rustdoc + artifacts: false + script: + - time cargo check --all --benches diff --git a/scripts/ci/gitlab/pipeline/zombienet.yml b/scripts/ci/gitlab/pipeline/zombienet.yml new file mode 100644 index 00000000000..fcd0a9b669d --- /dev/null +++ b/scripts/ci/gitlab/pipeline/zombienet.yml @@ -0,0 +1,101 @@ +# This file is part of .gitlab-ci.yml +# Here are all jobs that are executed during "zombienet" stage + +.zombienet-before-script: + before_script: + - echo "Zombie-net Tests Config" + - echo "${ZOMBIENET_IMAGE}" + - echo "${RELAY_IMAGE}" + - echo "${COL_IMAGE}" + - echo "${GH_DIR}" + - export DEBUG=zombie + - export RELAY_IMAGE=${POLKADOT_IMAGE} + - export COL_IMAGE=${COL_IMAGE} + +# common settings for all zombienet jobs +.zombienet-common: + stage: zombienet + image: "${ZOMBIENET_IMAGE}" + needs: + - job: build-push-image-test-parachain + artifacts: true + variables: + POLKADOT_IMAGE: "docker.io/paritypr/polkadot-debug:master" + GH_DIR: "https://github.com/paritytech/cumulus/tree/${CI_COMMIT_SHORT_SHA}/zombienet_tests" + COL_IMAGE: "docker.io/paritypr/test-parachain:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" + allow_failure: true + retry: 2 + tags: + - zombienet-polkadot-integration-test + +zombienet-0001-sync_blocks_from_tip_without_connected_collator: + extends: + - .zombienet-common + - .zombienet-refs + - .zombienet-before-script + script: + - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh + --github-remote-dir="${GH_DIR}" + --concurrency=1 + --test="0001-sync_blocks_from_tip_without_connected_collator.feature" + +zombienet-0002-pov_recovery: + extends: + - .zombienet-common + - .zombienet-refs + - .zombienet-before-script + script: + - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh + --github-remote-dir="${GH_DIR}" + --concurrency=1 + --test="0002-pov_recovery.feature" + +zombienet-0003-full_node_catching_up: + extends: + - .zombienet-common + - .zombienet-refs + - .zombienet-before-script + script: + - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh + --github-remote-dir="${GH_DIR}" + --concurrency=1 + --test="0003-full_node_catching_up.feature" + +zombienet-0004-runtime_upgrade: + extends: + - .zombienet-common + - .zombienet-refs + - .zombienet-before-script + needs: + - !reference [.zombienet-common, needs] + - job: build-test-parachain + artifacts: true + before_script: + - ls -ltr * + - cp ./artifacts/zombienet/wasm_binary_spec_version_incremented.rs.compact.compressed.wasm /tmp/ + - ls /tmp + - !reference [.zombienet-before-script, before_script] + script: + - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh + --github-remote-dir="${GH_DIR}" + --concurrency=1 + --test="0004-runtime_upgrade.feature" + +zombienet-0005-migrate_solo_to_para: + extends: + - .zombienet-common + - .zombienet-refs + - .zombienet-before-script + needs: + - !reference [.zombienet-common, needs] + - job: build-test-parachain + artifacts: true + before_script: + - ls -ltr * + - !reference [.zombienet-before-script, before_script] + script: + - /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh + --github-remote-dir="${GH_DIR}" + --concurrency=1 + --test="0005-migrate_solo_to_para.feature" + From 4e87fdbb9d64aa11d9606cf7d1563d996f7e6aeb Mon Sep 17 00:00:00 2001 From: EgorPopelyaev Date: Thu, 20 Oct 2022 18:15:50 +0200 Subject: [PATCH 141/148] Update dependencies --- Cargo.lock | 697 +++++++++--------- client/cli/Cargo.toml | 10 +- client/collator/Cargo.toml | 26 +- client/consensus/aura/Cargo.toml | 32 +- client/consensus/common/Cargo.toml | 16 +- client/consensus/relay-chain/Cargo.toml | 18 +- client/network/Cargo.toml | 38 +- client/pov-recovery/Cargo.toml | 24 +- .../Cargo.toml | 32 +- client/relay-chain-interface/Cargo.toml | 12 +- client/relay-chain-minimal-node/Cargo.toml | 54 +- client/relay-chain-rpc-interface/Cargo.toml | 20 +- client/service/Cargo.toml | 18 +- pallets/aura-ext/Cargo.toml | 14 +- pallets/collator-selection/Cargo.toml | 32 +- pallets/dmp-queue/Cargo.toml | 16 +- pallets/parachain-system/Cargo.toml | 32 +- pallets/session-benchmarking/Cargo.toml | 12 +- pallets/solo-to-para/Cargo.toml | 12 +- pallets/xcm/Cargo.toml | 12 +- pallets/xcmp-queue/Cargo.toml | 22 +- parachain-template/node/Cargo.toml | 74 +- .../pallets/template/Cargo.toml | 12 +- parachain-template/runtime/Cargo.toml | 66 +- parachains/common/Cargo.toml | 34 +- parachains/pallets/parachain-info/Cargo.toml | 4 +- parachains/pallets/ping/Cargo.toml | 10 +- .../runtimes/assets/statemine/Cargo.toml | 82 +-- .../runtimes/assets/statemint/Cargo.toml | 82 +-- .../runtimes/assets/test-utils/Cargo.toml | 20 +- .../runtimes/assets/westmint/Cargo.toml | 82 +-- .../collectives-polkadot/Cargo.toml | 78 +- .../contracts/contracts-rococo/Cargo.toml | 80 +- .../runtimes/starters/seedling/Cargo.toml | 32 +- parachains/runtimes/starters/shell/Cargo.toml | 36 +- parachains/runtimes/testing/penpal/Cargo.toml | 72 +- .../testing/rococo-parachain/Cargo.toml | 56 +- polkadot-parachain/Cargo.toml | 82 +-- primitives/core/Cargo.toml | 14 +- primitives/parachain-inherent/Cargo.toml | 18 +- primitives/timestamp/Cargo.toml | 12 +- primitives/utility/Cargo.toml | 12 +- test/client/Cargo.toml | 38 +- test/relay-sproof-builder/Cargo.toml | 8 +- .../Cargo.toml | 2 +- test/runtime/Cargo.toml | 40 +- test/service/Cargo.toml | 68 +- 47 files changed, 1138 insertions(+), 1125 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8d1c5da8bc7..cf8ea5259cd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -469,7 +469,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "array-bytes", "async-trait", @@ -506,7 +506,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -526,7 +526,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "beefy-primitives", "sp-api", @@ -536,7 +536,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "parity-scale-codec", "scale-info", @@ -1085,7 +1085,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-runtime-common", "polkadot-runtime-constants", "scale-info", @@ -1181,7 +1181,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-runtime-common", "scale-info", "smallvec", @@ -1647,7 +1647,7 @@ dependencies = [ "parking_lot 0.12.1", "polkadot-client", "polkadot-node-primitives", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-primitives", "polkadot-service", "polkadot-test-client", @@ -1768,7 +1768,7 @@ dependencies = [ "lazy_static", "log", "parity-scale-codec", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "sc-client-api", "scale-info", "sp-core", @@ -1881,7 +1881,7 @@ version = "0.1.0" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-primitives", "sp-api", "sp-runtime", @@ -2073,7 +2073,7 @@ dependencies = [ "pallet-balances", "pallet-transaction-payment", "parity-scale-codec", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-primitives", "sc-block-builder", "sc-consensus", @@ -2802,7 +2802,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "parity-scale-codec", ] @@ -2825,7 +2825,7 @@ checksum = "85dcb89d2b10c5f6133de2efd8c11959ce9dbb46a2f7a4cab208c4eeda6ce1ab" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support", "frame-system", @@ -2848,7 +2848,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "Inflector", "array-bytes", @@ -2899,7 +2899,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2910,7 +2910,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2926,7 +2926,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support", "frame-system", @@ -2955,7 +2955,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "bitflags", "frame-metadata", @@ -2987,7 +2987,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "Inflector", "cfg-expr", @@ -3001,7 +3001,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -3013,7 +3013,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "proc-macro2", "quote", @@ -3023,7 +3023,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support", "log", @@ -3041,7 +3041,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -3056,7 +3056,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "parity-scale-codec", "sp-api", @@ -3065,7 +3065,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support", "parity-scale-codec", @@ -3925,8 +3925,8 @@ checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" [[package]] name = "kusama-runtime" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "beefy-primitives", "bitvec", @@ -4023,8 +4023,8 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "frame-support", "polkadot-primitives", @@ -5248,7 +5248,7 @@ checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "array-bytes", "frame-benchmarking", @@ -5269,7 +5269,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support", "frame-system", @@ -5286,7 +5286,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5300,7 +5300,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support", "frame-system", @@ -5316,7 +5316,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support", "frame-system", @@ -5332,7 +5332,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support", "frame-system", @@ -5347,7 +5347,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5371,7 +5371,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5391,7 +5391,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5406,7 +5406,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "beefy-primitives", "frame-support", @@ -5422,7 +5422,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "array-bytes", "beefy-merkle-tree", @@ -5445,7 +5445,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5463,7 +5463,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5507,7 +5507,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5524,7 +5524,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "bitflags", "frame-benchmarking", @@ -5553,7 +5553,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "bitflags", "parity-scale-codec", @@ -5565,7 +5565,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "proc-macro2", "quote", @@ -5575,7 +5575,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "assert_matches", "frame-benchmarking", @@ -5592,7 +5592,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5610,7 +5610,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5634,7 +5634,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5647,7 +5647,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5665,7 +5665,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5686,7 +5686,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5701,7 +5701,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5724,7 +5724,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5740,7 +5740,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5760,7 +5760,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5777,7 +5777,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5794,7 +5794,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5812,7 +5812,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5827,7 +5827,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5843,7 +5843,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support", "frame-system", @@ -5860,7 +5860,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5880,7 +5880,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "parity-scale-codec", "sp-api", @@ -5890,7 +5890,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support", "frame-system", @@ -5907,7 +5907,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5930,7 +5930,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5947,7 +5947,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5962,7 +5962,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support", "frame-system", @@ -5976,7 +5976,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -5994,7 +5994,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -6009,7 +6009,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "assert_matches", "frame-benchmarking", @@ -6027,7 +6027,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -6043,7 +6043,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support", "frame-system", @@ -6064,7 +6064,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -6080,7 +6080,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support", "frame-system", @@ -6094,7 +6094,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6117,7 +6117,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6128,7 +6128,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "log", "sp-arithmetic", @@ -6137,7 +6137,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support", "frame-system", @@ -6166,7 +6166,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -6184,7 +6184,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -6203,7 +6203,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-support", "frame-system", @@ -6219,7 +6219,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6234,7 +6234,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6245,7 +6245,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -6262,7 +6262,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -6277,7 +6277,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -6293,7 +6293,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -6308,7 +6308,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-benchmarking", "frame-support", @@ -6322,8 +6322,8 @@ dependencies = [ [[package]] name = "pallet-xcm" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "frame-support", "frame-system", @@ -6340,8 +6340,8 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "frame-benchmarking", "frame-support", @@ -6461,7 +6461,7 @@ dependencies = [ "pallet-xcm", "parachain-info", "parity-scale-codec", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-runtime-common", "scale-info", "smallvec", @@ -6722,7 +6722,7 @@ dependencies = [ "parachain-info", "parachains-common", "parity-scale-codec", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-primitives", "polkadot-runtime-common", "scale-info", @@ -6894,8 +6894,8 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -6909,8 +6909,8 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -6923,8 +6923,8 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "derive_more", "fatality", @@ -6946,8 +6946,8 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "fatality", "futures", @@ -6967,8 +6967,8 @@ dependencies = [ [[package]] name = "polkadot-cli" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "clap 4.0.17", "frame-benchmarking-cli", @@ -6993,8 +6993,8 @@ dependencies = [ [[package]] name = "polkadot-client" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7034,8 +7034,8 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "always-assert", "bitvec", @@ -7056,8 +7056,8 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7069,8 +7069,8 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "derive_more", "fatality", @@ -7094,8 +7094,8 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7108,8 +7108,8 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "futures", "futures-timer", @@ -7128,8 +7128,8 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "always-assert", "async-trait", @@ -7152,8 +7152,8 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "futures", "parity-scale-codec", @@ -7170,8 +7170,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "bitvec", "derive_more", @@ -7199,8 +7199,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "bitvec", "futures", @@ -7219,8 +7219,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "bitvec", "fatality", @@ -7238,8 +7238,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7253,8 +7253,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "async-trait", "futures", @@ -7263,7 +7263,7 @@ dependencies = [ "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-util", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-primitives", "sp-maybe-compressed-blob", "tracing-gum", @@ -7271,8 +7271,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7286,8 +7286,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "futures", "futures-timer", @@ -7303,8 +7303,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "fatality", "futures", @@ -7322,8 +7322,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "async-trait", "futures", @@ -7339,8 +7339,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "bitvec", "fatality", @@ -7357,8 +7357,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "always-assert", "assert_matches", @@ -7370,7 +7370,7 @@ dependencies = [ "pin-project", "polkadot-core-primitives", "polkadot-node-metrics", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "rand 0.8.5", "rayon", "sc-executor", @@ -7389,8 +7389,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "futures", "polkadot-node-primitives", @@ -7405,8 +7405,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "futures", "memory-lru", @@ -7421,8 +7421,8 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "async-std", "lazy_static", @@ -7439,8 +7439,8 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "bs58", "futures", @@ -7458,8 +7458,8 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "async-trait", "derive_more", @@ -7481,13 +7481,13 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "bounded-vec", "futures", "parity-scale-codec", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-primitives", "schnorrkel", "serde", @@ -7503,8 +7503,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7513,8 +7513,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "async-trait", "futures", @@ -7531,8 +7531,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "async-trait", "derive_more", @@ -7554,8 +7554,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "async-trait", "derive_more", @@ -7587,8 +7587,8 @@ dependencies = [ [[package]] name = "polkadot-overseer" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "async-trait", "futures", @@ -7610,8 +7610,8 @@ dependencies = [ [[package]] name = "polkadot-parachain" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "derive_more", "frame-support", @@ -7708,8 +7708,8 @@ dependencies = [ [[package]] name = "polkadot-performance-test" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "env_logger 0.9.0", "kusama-runtime", @@ -7723,8 +7723,8 @@ dependencies = [ [[package]] name = "polkadot-primitives" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "bitvec", "frame-system", @@ -7732,7 +7732,7 @@ dependencies = [ "parity-scale-codec", "parity-util-mem", "polkadot-core-primitives", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "scale-info", "serde", "sp-api", @@ -7753,8 +7753,8 @@ dependencies = [ [[package]] name = "polkadot-rpc" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7785,8 +7785,8 @@ dependencies = [ [[package]] name = "polkadot-runtime" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "beefy-primitives", "bitvec", @@ -7874,8 +7874,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "beefy-primitives", "bitvec", @@ -7921,8 +7921,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "frame-support", "polkadot-primitives", @@ -7933,8 +7933,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "bs58", "parity-scale-codec", @@ -7945,8 +7945,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "bitflags", "bitvec", @@ -7988,8 +7988,8 @@ dependencies = [ [[package]] name = "polkadot-service" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "async-trait", "beefy-gadget", @@ -8035,7 +8035,7 @@ dependencies = [ "polkadot-node-subsystem-types", "polkadot-node-subsystem-util", "polkadot-overseer", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-primitives", "polkadot-rpc", "polkadot-runtime", @@ -8093,8 +8093,8 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8114,8 +8114,8 @@ dependencies = [ [[package]] name = "polkadot-statement-table" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8124,8 +8124,8 @@ dependencies = [ [[package]] name = "polkadot-test-client" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8149,8 +8149,8 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "beefy-primitives", "bitvec", @@ -8177,7 +8177,7 @@ dependencies = [ "pallet-vesting", "pallet-xcm", "parity-scale-codec", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", @@ -8210,8 +8210,8 @@ dependencies = [ [[package]] name = "polkadot-test-service" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "frame-benchmarking", "frame-system", @@ -8223,7 +8223,7 @@ dependencies = [ "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-overseer", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-primitives", "polkadot-rpc", "polkadot-runtime-common", @@ -8790,10 +8790,9 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "env_logger 0.9.0", - "jsonrpsee", "log", "parity-scale-codec", "serde", @@ -8802,6 +8801,7 @@ dependencies = [ "sp-io", "sp-runtime", "sp-version", + "substrate-rpc-client", ] [[package]] @@ -8887,7 +8887,7 @@ dependencies = [ "parachain-info", "parachains-common", "parity-scale-codec", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "scale-info", "sp-api", "sp-block-builder", @@ -8908,8 +8908,8 @@ dependencies = [ [[package]] name = "rococo-runtime" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -8959,7 +8959,7 @@ dependencies = [ "pallet-xcm", "pallet-xcm-benchmarks", "parity-scale-codec", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", @@ -8992,8 +8992,8 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "frame-support", "polkadot-primitives", @@ -9154,7 +9154,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "log", "sp-core", @@ -9165,7 +9165,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "futures", @@ -9192,7 +9192,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "futures", "futures-timer", @@ -9215,7 +9215,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9231,7 +9231,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.0", @@ -9248,7 +9248,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9259,7 +9259,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "array-bytes", "chrono", @@ -9299,7 +9299,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "fnv", "futures", @@ -9327,7 +9327,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "hash-db", "kvdb", @@ -9352,7 +9352,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "futures", @@ -9376,7 +9376,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "futures", @@ -9405,7 +9405,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "fork-tree", @@ -9447,7 +9447,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "futures", "jsonrpsee", @@ -9469,7 +9469,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9482,7 +9482,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "futures", @@ -9506,7 +9506,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "lazy_static", "lru 0.7.7", @@ -9533,7 +9533,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "environmental", "parity-scale-codec", @@ -9549,7 +9549,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "log", "parity-scale-codec", @@ -9564,7 +9564,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9584,7 +9584,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "ahash", "array-bytes", @@ -9625,7 +9625,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "finality-grandpa", "futures", @@ -9646,7 +9646,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "ansi_term", "futures", @@ -9663,7 +9663,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "array-bytes", "async-trait", @@ -9678,7 +9678,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "array-bytes", "async-trait", @@ -9725,7 +9725,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "cid", "futures", @@ -9745,7 +9745,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "bitflags", @@ -9771,7 +9771,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "ahash", "futures", @@ -9789,7 +9789,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "array-bytes", "futures", @@ -9810,7 +9810,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "array-bytes", "fork-tree", @@ -9840,7 +9840,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "array-bytes", "futures", @@ -9859,7 +9859,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "array-bytes", "bytes", @@ -9889,7 +9889,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "futures", "libp2p", @@ -9902,7 +9902,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -9911,7 +9911,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "futures", "hash-db", @@ -9941,7 +9941,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "futures", "jsonrpsee", @@ -9964,7 +9964,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "futures", "jsonrpsee", @@ -9977,7 +9977,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "futures", "hex", @@ -9996,7 +9996,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "directories", @@ -10067,7 +10067,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "log", "parity-scale-codec", @@ -10081,7 +10081,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10100,7 +10100,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "futures", "libc", @@ -10119,7 +10119,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "chrono", "futures", @@ -10137,7 +10137,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "ansi_term", "atty", @@ -10168,7 +10168,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10179,7 +10179,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "futures", @@ -10206,7 +10206,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "futures", @@ -10220,7 +10220,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "futures", "futures-timer", @@ -10637,8 +10637,8 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "enumn", "parity-scale-codec", @@ -10714,7 +10714,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "hash-db", "log", @@ -10732,7 +10732,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "blake2", "proc-macro-crate", @@ -10744,7 +10744,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "parity-scale-codec", "scale-info", @@ -10757,7 +10757,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "integer-sqrt", "num-traits", @@ -10772,7 +10772,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "parity-scale-codec", "scale-info", @@ -10785,7 +10785,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "parity-scale-codec", @@ -10797,7 +10797,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "parity-scale-codec", "sp-api", @@ -10809,7 +10809,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "futures", "log", @@ -10827,7 +10827,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "futures", @@ -10846,7 +10846,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "parity-scale-codec", @@ -10864,7 +10864,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "merlin", @@ -10887,7 +10887,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "parity-scale-codec", "scale-info", @@ -10901,7 +10901,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "parity-scale-codec", "scale-info", @@ -10914,7 +10914,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "array-bytes", "base58", @@ -10960,7 +10960,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "blake2", "byteorder", @@ -10974,7 +10974,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "proc-macro2", "quote", @@ -10985,7 +10985,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -10994,7 +10994,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "proc-macro2", "quote", @@ -11004,7 +11004,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "environmental", "parity-scale-codec", @@ -11015,7 +11015,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "finality-grandpa", "log", @@ -11033,7 +11033,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11047,7 +11047,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "bytes", "futures", @@ -11073,7 +11073,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "lazy_static", "sp-core", @@ -11084,7 +11084,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "futures", @@ -11101,7 +11101,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "thiserror", "zstd", @@ -11110,7 +11110,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "log", "parity-scale-codec", @@ -11126,7 +11126,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "parity-scale-codec", "scale-info", @@ -11140,7 +11140,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "sp-api", "sp-core", @@ -11150,7 +11150,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "backtrace", "lazy_static", @@ -11160,7 +11160,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "rustc-hash", "serde", @@ -11170,7 +11170,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "either", "hash256-std-hasher", @@ -11193,7 +11193,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11211,7 +11211,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "Inflector", "proc-macro-crate", @@ -11223,7 +11223,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "log", "parity-scale-codec", @@ -11237,7 +11237,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "serde", "serde_json", @@ -11246,7 +11246,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "parity-scale-codec", "scale-info", @@ -11260,7 +11260,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "parity-scale-codec", "scale-info", @@ -11271,7 +11271,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "hash-db", "log", @@ -11293,12 +11293,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11311,7 +11311,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "log", "sp-core", @@ -11324,7 +11324,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "futures-timer", @@ -11340,7 +11340,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "parity-scale-codec", "sp-std", @@ -11352,7 +11352,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "sp-api", "sp-runtime", @@ -11361,7 +11361,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "async-trait", "log", @@ -11377,7 +11377,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "ahash", "hash-db", @@ -11400,7 +11400,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11417,7 +11417,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11428,7 +11428,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "impl-trait-for-tuples", "log", @@ -11441,7 +11441,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11535,7 +11535,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-runtime-common", "scale-info", "smallvec", @@ -11599,7 +11599,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-runtime-common", "polkadot-runtime-constants", "scale-info", @@ -11737,7 +11737,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "platforms", ] @@ -11745,7 +11745,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11766,7 +11766,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "futures-util", "hyper", @@ -11776,10 +11776,23 @@ dependencies = [ "tokio", ] +[[package]] +name = "substrate-rpc-client" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +dependencies = [ + "async-trait", + "jsonrpsee", + "log", + "sc-rpc-api", + "serde", + "sp-runtime", +] + [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "jsonrpsee", "log", @@ -11800,7 +11813,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "array-bytes", "async-trait", @@ -11826,7 +11839,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11836,7 +11849,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11847,7 +11860,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "ansi_term", "build-helper", @@ -11954,8 +11967,8 @@ checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" [[package]] name = "test-runtime-constants" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "frame-support", "polkadot-primitives", @@ -12234,8 +12247,8 @@ dependencies = [ [[package]] name = "tracing-gum" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12245,8 +12258,8 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12373,11 +12386,10 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#e34b840b8818856a5bb8dbfe91d5b8a918e44fb8" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" dependencies = [ "clap 4.0.17", "frame-try-runtime", - "jsonrpsee", "log", "parity-scale-codec", "remote-externalities", @@ -12394,6 +12406,7 @@ dependencies = [ "sp-state-machine", "sp-version", "sp-weights", + "substrate-rpc-client", "zstd", ] @@ -12961,8 +12974,8 @@ dependencies = [ [[package]] name = "westend-runtime" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "beefy-primitives", "bitvec", @@ -13017,7 +13030,7 @@ dependencies = [ "pallet-xcm", "pallet-xcm-benchmarks", "parity-scale-codec", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", @@ -13051,8 +13064,8 @@ dependencies = [ [[package]] name = "westend-runtime-constants" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "frame-support", "polkadot-primitives", @@ -13104,7 +13117,7 @@ dependencies = [ "parachains-common", "parity-scale-codec", "polkadot-core-primitives", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "polkadot-runtime-common", "scale-info", "smallvec", @@ -13334,8 +13347,8 @@ dependencies = [ [[package]] name = "xcm" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13348,15 +13361,15 @@ dependencies = [ [[package]] name = "xcm-builder" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "frame-support", "frame-system", "log", "pallet-transaction-payment", "parity-scale-codec", - "polkadot-parachain 0.9.29", + "polkadot-parachain 0.9.31", "scale-info", "sp-arithmetic", "sp-io", @@ -13368,8 +13381,8 @@ dependencies = [ [[package]] name = "xcm-executor" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "frame-benchmarking", "frame-support", @@ -13386,8 +13399,8 @@ dependencies = [ [[package]] name = "xcm-procedural" -version = "0.9.29" -source = "git+https://github.com/paritytech/polkadot?branch=master#6e1baff5de3246dc14548c8f3b17633077ba8f6a" +version = "0.9.31" +source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" dependencies = [ "Inflector", "proc-macro2", diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index 9fcbb96a80a..3858f08fe86 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -10,8 +10,8 @@ codec = { package = "parity-scale-codec", version = "3.0.0" } url = "2.3.1" # Substrate -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } diff --git a/client/collator/Cargo.toml b/client/collator/Cargo.toml index b8e05fd37c5..291a293c47e 100644 --- a/client/collator/Cargo.toml +++ b/client/collator/Cargo.toml @@ -11,17 +11,17 @@ parking_lot = "0.12.0" tracing = "0.1.25" # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-node-subsystem = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-node-subsystem = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } # Cumulus cumulus-client-consensus-common = { path = "../consensus/common" } @@ -32,12 +32,12 @@ cumulus-primitives-core = { path = "../../primitives/core" } async-trait = "0.1.42" # Substrate -sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-node-subsystem-test-helpers = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-node-subsystem-test-helpers = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } # Cumulus cumulus-test-client = { path = "../../test/client" } diff --git a/client/consensus/aura/Cargo.toml b/client/consensus/aura/Cargo.toml index 9dd29d950ba..71a12326a4a 100644 --- a/client/consensus/aura/Cargo.toml +++ b/client/consensus/aura/Cargo.toml @@ -12,22 +12,22 @@ futures = "0.3.24" tracing = "0.1.37" # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-consensus-slots = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-consensus-slots = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Cumulus cumulus-client-consensus-common = { path = "../common" } diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index 3f898ba7c5c..dcf105630df 100644 --- a/client/consensus/common/Cargo.toml +++ b/client/consensus/common/Cargo.toml @@ -13,15 +13,15 @@ futures = "0.3.24" tracing = "0.1.37" # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } # Cumulus cumulus-relay-chain-interface = { path = "../../relay-chain-interface" } @@ -30,7 +30,7 @@ cumulus-relay-chain-interface = { path = "../../relay-chain-interface" } futures-timer = "3.0.2" # Substrate -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Cumulus cumulus-test-client = { path = "../../../test/client" } diff --git a/client/consensus/relay-chain/Cargo.toml b/client/consensus/relay-chain/Cargo.toml index 86caa856ed9..0f5fdb96ac2 100644 --- a/client/consensus/relay-chain/Cargo.toml +++ b/client/consensus/relay-chain/Cargo.toml @@ -12,15 +12,15 @@ parking_lot = "0.12.1" tracing = "0.1.37" # Substrate -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Cumulus cumulus-client-consensus-common = { path = "../common" } diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index 73dff3703e6..a37c8874f03 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -14,17 +14,17 @@ parking_lot = "0.12.1" tracing = "0.1.37" # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } # Cumulus cumulus-relay-chain-interface = { path = "../relay-chain-interface" } @@ -35,18 +35,18 @@ tokio = { version = "1.21.2", features = ["macros"] } url = "2.3.1" # Substrate -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } -substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-client = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-test-client = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-test-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core" } diff --git a/client/pov-recovery/Cargo.toml b/client/pov-recovery/Cargo.toml index 4653f7af379..b61cecfe416 100644 --- a/client/pov-recovery/Cargo.toml +++ b/client/pov-recovery/Cargo.toml @@ -13,17 +13,17 @@ rand = "0.8.5" tracing = "0.1.37" # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-node-subsystem = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-node-subsystem = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core" } @@ -37,6 +37,6 @@ portpicker = "0.1.1" cumulus-test-service = { path = "../../test/service" } # Substrate -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } diff --git a/client/relay-chain-inprocess-interface/Cargo.toml b/client/relay-chain-inprocess-interface/Cargo.toml index 80afe12228d..a7def2bc322 100644 --- a/client/relay-chain-inprocess-interface/Cargo.toml +++ b/client/relay-chain-inprocess-interface/Cargo.toml @@ -10,21 +10,21 @@ futures = "0.3.24" futures-timer = "3.0.2" # Substrate -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "master", default-features = false, features = ["cli"] } -polkadot-client = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", default-features = false, features = ["cli"] , branch = "release-v0.9.31" } +polkadot-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core" } @@ -33,11 +33,11 @@ cumulus-relay-chain-interface = { path = "../relay-chain-interface" } [dev-dependencies] # Substrate -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-test-client = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-test-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } metered = { package = "prioritized-metered-channel", version = "0.2.0" } # Cumulus diff --git a/client/relay-chain-interface/Cargo.toml b/client/relay-chain-interface/Cargo.toml index a6ba721fbeb..860b2cd327b 100644 --- a/client/relay-chain-interface/Cargo.toml +++ b/client/relay-chain-interface/Cargo.toml @@ -5,15 +5,15 @@ version = "0.1.0" edition = "2021" [dependencies] -polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } cumulus-primitives-core = { path = "../../primitives/core" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } futures = "0.3.24" async-trait = "0.1.57" diff --git a/client/relay-chain-minimal-node/Cargo.toml b/client/relay-chain-minimal-node/Cargo.toml index cbc9bff9016..dbaaec8233a 100644 --- a/client/relay-chain-minimal-node/Cargo.toml +++ b/client/relay-chain-minimal-node/Cargo.toml @@ -6,35 +6,35 @@ edition = "2021" [dependencies] # polkadot deps -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-node-subsystem-util = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-node-network-protocol = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-network-bridge = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-node-core-av-store = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-availability-distribution = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-node-subsystem-util = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-node-network-protocol = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-network-bridge = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-node-core-av-store = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-availability-distribution = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } # substrate deps -sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-network-sync = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-network-light = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-network-sync = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-network-light = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # cumulus deps cumulus-relay-chain-interface = { path = "../relay-chain-interface" } diff --git a/client/relay-chain-rpc-interface/Cargo.toml b/client/relay-chain-rpc-interface/Cargo.toml index db5e7808f80..fb06ea97cdc 100644 --- a/client/relay-chain-rpc-interface/Cargo.toml +++ b/client/relay-chain-rpc-interface/Cargo.toml @@ -6,20 +6,20 @@ edition = "2021" [dependencies] -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } cumulus-primitives-core = { path = "../../primitives/core" } cumulus-relay-chain-interface = { path = "../relay-chain-interface" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-storage = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-storage = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } tokio = { version = "1.21.2", features = ["sync"] } futures = "0.3.24" diff --git a/client/service/Cargo.toml b/client/service/Cargo.toml index e705364a1c8..2d87540c222 100644 --- a/client/service/Cargo.toml +++ b/client/service/Cargo.toml @@ -8,17 +8,17 @@ edition = "2021" parking_lot = "0.12.1" # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } # Cumulus cumulus-client-cli = { path = "../cli" } diff --git a/pallets/aura-ext/Cargo.toml b/pallets/aura-ext/Cargo.toml index 7801039cbf3..d7e91d9bdab 100644 --- a/pallets/aura-ext/Cargo.toml +++ b/pallets/aura-ext/Cargo.toml @@ -10,13 +10,13 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-application-crypto = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } [dev-dependencies] diff --git a/pallets/collator-selection/Cargo.toml b/pallets/collator-selection/Cargo.toml index 557d894fb12..4b924ecae2b 100644 --- a/pallets/collator-selection/Cargo.toml +++ b/pallets/collator-selection/Cargo.toml @@ -18,25 +18,25 @@ codec = { default-features = false, features = ["derive"], package = "parity-sca rand = { version = "0.8.5", features = ["std_rng"], default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } -sp-staking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } -frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } -frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } -pallet-authorship = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } -pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } +sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-staking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +pallet-authorship = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } -frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "master" } +frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [dev-dependencies] -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "master" } -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "master" } -pallet-aura = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +pallet-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [features] default = ["std"] diff --git a/pallets/dmp-queue/Cargo.toml b/pallets/dmp-queue/Cargo.toml index dda503be7af..af67db94d5d 100644 --- a/pallets/dmp-queue/Cargo.toml +++ b/pallets/dmp-queue/Cargo.toml @@ -10,21 +10,21 @@ log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core", default-features = false } [dev-dependencies] -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } [features] default = [ "std" ] diff --git a/pallets/parachain-system/Cargo.toml b/pallets/parachain-system/Cargo.toml index 8b203135610..9e6bd91b917 100644 --- a/pallets/parachain-system/Cargo.toml +++ b/pallets/parachain-system/Cargo.toml @@ -14,20 +14,20 @@ log = { version = "0.4.17", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-externalities = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-externalities = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, features = [ "wasm-api" ], branch = "master" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, features = [ "wasm-api" ], branch = "release-v0.9.31" } # Cumulus cumulus-pallet-parachain-system-proc-macro = { path = "proc-macro", default-features = false } @@ -39,10 +39,10 @@ hex-literal = "0.3.4" lazy_static = "1.4" # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-version = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-version = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Cumulus cumulus-test-client = { path = "../../test/client" } diff --git a/pallets/session-benchmarking/Cargo.toml b/pallets/session-benchmarking/Cargo.toml index e30b460161f..60bd4f6fc78 100644 --- a/pallets/session-benchmarking/Cargo.toml +++ b/pallets/session-benchmarking/Cargo.toml @@ -14,12 +14,12 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] parity-scale-codec = { version = "3.2.1", default-features = false } -sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } -frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } -frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } -frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "master" } -pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "master" } +sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [features] default = ["std"] diff --git a/pallets/solo-to-para/Cargo.toml b/pallets/solo-to-para/Cargo.toml index 090ea3660d1..61abdc8a15f 100644 --- a/pallets/solo-to-para/Cargo.toml +++ b/pallets/solo-to-para/Cargo.toml @@ -10,14 +10,14 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus cumulus-pallet-parachain-system = { default-features = false, path = "../parachain-system" } diff --git a/pallets/xcm/Cargo.toml b/pallets/xcm/Cargo.toml index c90a3fd8245..0070f6ea6db 100644 --- a/pallets/xcm/Cargo.toml +++ b/pallets/xcm/Cargo.toml @@ -8,13 +8,13 @@ version = "0.1.0" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } cumulus-primitives-core = { path = "../../primitives/core", default-features = false } diff --git a/pallets/xcmp-queue/Cargo.toml b/pallets/xcmp-queue/Cargo.toml index 8c7aef6a354..f3b21daa623 100644 --- a/pallets/xcmp-queue/Cargo.toml +++ b/pallets/xcmp-queue/Cargo.toml @@ -11,30 +11,30 @@ rand_chacha = { version = "0.3.0", default-features = false } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core", default-features = false } # Optional import for benchmarking -frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "master" } +frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [dev-dependencies] # Substrate -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "master" } -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "master" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } # Cumulus cumulus-pallet-parachain-system = { path = "../parachain-system" } diff --git a/parachain-template/node/Cargo.toml b/parachain-template/node/Cargo.toml index c482ff18787..5757bcecf6f 100644 --- a/parachain-template/node/Cargo.toml +++ b/parachain-template/node/Cargo.toml @@ -20,44 +20,44 @@ jsonrpsee = { version = "0.15.1", features = ["server"] } parachain-template-runtime = { path = "../runtime" } # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master" } -frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } -pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["wasmtime"] } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-executor = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["wasmtime"] } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["wasmtime"] } -sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-session = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" } -substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "master" } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "master" } -try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-cli = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-executor = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-service = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } +sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "master" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus cumulus-client-cli = { path = "../../client/cli" } @@ -73,7 +73,7 @@ cumulus-relay-chain-rpc-interface = { path = "../../client/relay-chain-rpc-inter cumulus-relay-chain-minimal-node = { path = "../../client/relay-chain-minimal-node" } [build-dependencies] -substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "master" } +substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [features] default = [] diff --git a/parachain-template/pallets/template/Cargo.toml b/parachain-template/pallets/template/Cargo.toml index ca574f6c8d5..460bd1ebace 100644 --- a/parachain-template/pallets/template/Cargo.toml +++ b/parachain-template/pallets/template/Cargo.toml @@ -16,17 +16,17 @@ codec = { package = "parity-scale-codec", version = "3.0.0", features = ["derive scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } [dev-dependencies] serde = { version = "1.0.132" } # Substrate -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } [features] default = ["std"] diff --git a/parachain-template/runtime/Cargo.toml b/parachain-template/runtime/Cargo.toml index 5e9b88e2f17..e4ad07c0997 100644 --- a/parachain-template/runtime/Cargo.toml +++ b/parachain-template/runtime/Cargo.toml @@ -12,7 +12,7 @@ edition = "2021" targets = ["x86_64-unknown-linux-gnu"] [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } @@ -25,40 +25,40 @@ smallvec = "1.10.0" pallet-template = { path = "../pallets/template", default-features = false } # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus cumulus-pallet-aura-ext = { path = "../../pallets/aura-ext", default-features = false } diff --git a/parachains/common/Cargo.toml b/parachains/common/Cargo.toml index 300f8683d87..beee138420e 100644 --- a/parachains/common/Cargo.toml +++ b/parachains/common/Cargo.toml @@ -13,33 +13,33 @@ codec = { package = "parity-scale-codec", version = "3.0.0", features = ["derive scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -frame-system = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -pallet-assets = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -pallet-authorship = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } +pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } +pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus pallet-collator-selection = { path = "../../pallets/collator-selection", default-features = false } cumulus-primitives-utility = { path = "../../primitives/utility", default-features = false } [dev-dependencies] -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [features] default = ["std"] diff --git a/parachains/pallets/parachain-info/Cargo.toml b/parachains/pallets/parachain-info/Cargo.toml index 79e9a9ad017..91985cdb83d 100644 --- a/parachains/pallets/parachain-info/Cargo.toml +++ b/parachains/pallets/parachain-info/Cargo.toml @@ -8,8 +8,8 @@ version = "0.1.0" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } cumulus-primitives-core = { path = "../../../primitives/core", default-features = false } diff --git a/parachains/pallets/ping/Cargo.toml b/parachains/pallets/ping/Cargo.toml index 544a43ebceb..2671524222e 100644 --- a/parachains/pallets/ping/Cargo.toml +++ b/parachains/pallets/ping/Cargo.toml @@ -8,12 +8,12 @@ version = "0.1.0" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } cumulus-primitives-core = { path = "../../../primitives/core", default-features = false } cumulus-pallet-xcm = { path = "../../../pallets/xcm", default-features = false } diff --git a/parachains/runtimes/assets/statemine/Cargo.toml b/parachains/runtimes/assets/statemine/Cargo.toml index 7c47a42a4fe..1dec52a1f92 100644 --- a/parachains/runtimes/assets/statemine/Cargo.toml +++ b/parachains/runtimes/assets/statemine/Cargo.toml @@ -13,47 +13,47 @@ scale-info = { version = "2.2.0", default-features = false, features = ["derive" smallvec = "1.10.0" # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "master" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "master" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } -pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-uniques = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.31" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.31" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } +pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } +pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-uniques = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -kusama-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +kusama-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -68,7 +68,7 @@ cumulus-primitives-utility = { path = "../../../../primitives/utility", default- pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } -pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", branch = "master", default-features = false, optional = true } +pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "release-v0.9.31" } [dev-dependencies] @@ -76,7 +76,7 @@ hex-literal = "0.3.4" asset-test-utils = { path = "../test-utils"} [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [features] default = [ "std" ] diff --git a/parachains/runtimes/assets/statemint/Cargo.toml b/parachains/runtimes/assets/statemint/Cargo.toml index 127bba217ac..69da88352b1 100644 --- a/parachains/runtimes/assets/statemint/Cargo.toml +++ b/parachains/runtimes/assets/statemint/Cargo.toml @@ -13,47 +13,47 @@ scale-info = { version = "2.2.0", default-features = false, features = ["derive" smallvec = "1.10.0" # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "master" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "master" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } -pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-uniques = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.31" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.31" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } +pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } +pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-uniques = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -68,14 +68,14 @@ cumulus-primitives-utility = { path = "../../../../primitives/utility", default- pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } -pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", branch = "master", default-features = false, optional = true } +pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "release-v0.9.31" } [dev-dependencies] hex-literal = "0.3.4" asset-test-utils = { path = "../test-utils"} [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [features] default = [ "std" ] diff --git a/parachains/runtimes/assets/test-utils/Cargo.toml b/parachains/runtimes/assets/test-utils/Cargo.toml index 52ce1d2d9a8..147343a3686 100644 --- a/parachains/runtimes/assets/test-utils/Cargo.toml +++ b/parachains/runtimes/assets/test-utils/Cargo.toml @@ -9,15 +9,15 @@ description = "Statemint parachain runtime" # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Cumulus pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } @@ -27,7 +27,7 @@ parachains-common = { path = "../../../common", default-features = false } hex-literal = "0.3.4" [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [features] default = [ "std" ] diff --git a/parachains/runtimes/assets/westmint/Cargo.toml b/parachains/runtimes/assets/westmint/Cargo.toml index b8b06231155..496292a0916 100644 --- a/parachains/runtimes/assets/westmint/Cargo.toml +++ b/parachains/runtimes/assets/westmint/Cargo.toml @@ -13,47 +13,47 @@ scale-info = { version = "2.2.0", default-features = false, features = ["derive" smallvec = "1.10.0" # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "master" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "master" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } -pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-uniques = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.31" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.31" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } +pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-uniques = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -westend-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +westend-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -68,14 +68,14 @@ cumulus-primitives-utility = { path = "../../../../primitives/utility", default- pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } -pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", branch = "master", default-features = false, optional = true } +pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "release-v0.9.31" } [dev-dependencies] hex-literal = "0.3.4" asset-test-utils = { path = "../test-utils"} [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [features] default = [ "std" ] diff --git a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml index 4a6939b7c0f..216f410062b 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml +++ b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml @@ -13,46 +13,46 @@ scale-info = { version = "2.2.0", default-features = false, features = ["derive" smallvec = "1.10.0" # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "master" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "master" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } -pallet-alliance = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-collective = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.31" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", optional = true, default-features = false, branch = "polkadot-v0.9.31" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } +pallet-alliance = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-collective = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-proxy = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -72,7 +72,7 @@ parachains-common = { path = "../../../common", default-features = false } hex-literal = "0.3.4" [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [features] default = [ "std" ] diff --git a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml index 2e6f65ceacb..24acb0fdeb7 100644 --- a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml +++ b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" targets = ["x86_64-unknown-linux-gnu"] [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } @@ -18,47 +18,47 @@ scale-info = { version = "2.2.0", default-features = false, features = ["derive" smallvec = "1.10.0" # Substrate -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-randomness-collective-flip = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-contracts = { git = "https://github.com/paritytech/substrate", default-features = false, features = ["unstable-interface"], branch = "master" } -pallet-contracts-primitives = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-randomness-collective-flip = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-multisig = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-contracts = { git = "https://github.com/paritytech/substrate", default-features = false, features = ["unstable-interface"], branch = "polkadot-v0.9.31" } +pallet-contracts-primitives = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -kusama-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +kusama-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } diff --git a/parachains/runtimes/starters/seedling/Cargo.toml b/parachains/runtimes/starters/seedling/Cargo.toml index 620a32f0e05..3dab0e0b6ef 100644 --- a/parachains/runtimes/starters/seedling/Cargo.toml +++ b/parachains/runtimes/starters/seedling/Cargo.toml @@ -9,21 +9,21 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Cumulus cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false } @@ -33,7 +33,7 @@ parachains-common = { path = "../../../common", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [features] default = [ "std" ] diff --git a/parachains/runtimes/starters/shell/Cargo.toml b/parachains/runtimes/starters/shell/Cargo.toml index 2588990a382..452d3063e46 100644 --- a/parachains/runtimes/starters/shell/Cargo.toml +++ b/parachains/runtimes/starters/shell/Cargo.toml @@ -9,25 +9,25 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true , branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false } @@ -37,7 +37,7 @@ parachain-info = { path = "../../../pallets/parachain-info", default-features = parachains-common = { path = "../../../common", default-features = false } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [features] default = [ "std" ] diff --git a/parachains/runtimes/testing/penpal/Cargo.toml b/parachains/runtimes/testing/penpal/Cargo.toml index 7aa20c46320..56c30916eeb 100644 --- a/parachains/runtimes/testing/penpal/Cargo.toml +++ b/parachains/runtimes/testing/penpal/Cargo.toml @@ -12,7 +12,7 @@ edition = "2021" targets = ["x86_64-unknown-linux-gnu"] [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } @@ -22,43 +22,43 @@ scale-info = { version = "2.2.0", default-features = false, features = ["derive" smallvec = "1.10.0" # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "master" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, optional = true, branch = "polkadot-v0.9.31" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-authorship = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } diff --git a/parachains/runtimes/testing/rococo-parachain/Cargo.toml b/parachains/runtimes/testing/rococo-parachain/Cargo.toml index d16847a8cd3..fc64be057f0 100644 --- a/parachains/runtimes/testing/rococo-parachain/Cargo.toml +++ b/parachains/runtimes/testing/rococo-parachain/Cargo.toml @@ -10,35 +10,35 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -54,7 +54,7 @@ parachains-common = { path = "../../../common", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [features] default = [ "std" ] diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index d57894c225b..e7a7881f001 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -29,47 +29,47 @@ jsonrpsee = { version = "0.15.1", features = ["server"] } parachains-common = { path = "../parachains/common" } # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master" } -frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-session = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["wasmtime"] } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-executor = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["wasmtime"] } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["wasmtime"] } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-serializer = { git = "https://github.com/paritytech/substrate", branch = "master" } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "master" } -try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -frame-rpc-system = { package = "substrate-frame-rpc-system", git = "https://github.com/paritytech/substrate", branch = "master" } -pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-cli = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-executor = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } +sc-service = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-serializer = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +frame-rpc-system = { package = "substrate-frame-rpc-system", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "master" } -xcm = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } # Cumulus cumulus-client-cli = { path = "../client/cli" } @@ -86,7 +86,7 @@ cumulus-relay-chain-rpc-interface = { path = "../client/relay-chain-rpc-interfac cumulus-relay-chain-minimal-node = { path = "../client/relay-chain-minimal-node" } [build-dependencies] -substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "master" } +substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [dev-dependencies] assert_cmd = "2.0" @@ -95,7 +95,7 @@ tempfile = "3.3.0" tokio = { version = "1.21.2", features = ["macros", "time", "parking_lot"] } wait-timeout = "0.2" # purge_chain_works works with rococo-local and needs to allow this -polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "master", features = ["rococo-native"] } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", features = ["rococo-native"] , branch = "release-v0.9.31" } [features] default = [] diff --git a/primitives/core/Cargo.toml b/primitives/core/Cargo.toml index 9a67cac16c5..a25100ce74c 100644 --- a/primitives/core/Cargo.toml +++ b/primitives/core/Cargo.toml @@ -8,15 +8,15 @@ edition = "2021" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "derive" ] } # Substrate -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } [features] default = [ "std" ] diff --git a/primitives/parachain-inherent/Cargo.toml b/primitives/parachain-inherent/Cargo.toml index fb6f3b19731..56864cdc0c0 100644 --- a/primitives/parachain-inherent/Cargo.toml +++ b/primitives/parachain-inherent/Cargo.toml @@ -11,15 +11,15 @@ scale-info = { version = "2.2.0", default-features = false, features = ["derive" tracing = { version = "0.1.37", optional = true } # Substrate -sc-client-api = { git = "https://github.com/paritytech/substrate", optional = true, branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", optional = true, branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", optional = true, branch = "master" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", optional = true, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-storage = { git = "https://github.com/paritytech/substrate", optional = true, branch = "master" } -sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +sc-client-api = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.31" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-storage = { git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.31" } +sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Cumulus cumulus-primitives-core = { path = "../core", default-features = false } diff --git a/primitives/timestamp/Cargo.toml b/primitives/timestamp/Cargo.toml index 88414029883..31343666c81 100644 --- a/primitives/timestamp/Cargo.toml +++ b/primitives/timestamp/Cargo.toml @@ -10,9 +10,9 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = futures = "0.3.24" # Substrate -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Cumulus cumulus-primitives-core = { path = "../core", default-features = false } @@ -20,9 +20,9 @@ cumulus-primitives-core = { path = "../core", default-features = false } [dev-dependencies] # Substrate -sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Cumulus cumulus-test-client = { path = "../../test/client" } diff --git a/primitives/utility/Cargo.toml b/primitives/utility/Cargo.toml index 6278025e1db..e3925d667d8 100644 --- a/primitives/utility/Cargo.toml +++ b/primitives/utility/Cargo.toml @@ -9,14 +9,14 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = log = { version = "0.4.17", default-features = false } # Substrate -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus diff --git a/test/client/Cargo.toml b/test/client/Cargo.toml index 490730b7519..546b3302834 100644 --- a/test/client/Cargo.toml +++ b/test/client/Cargo.toml @@ -8,27 +8,27 @@ edition = "2021" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "derive" ] } # Substrate -sc-service = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["wasmtime"] } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-block-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-executor = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["wasmtime"] } -sc-executor-common = { git = "https://github.com/paritytech/substrate", branch = "master" } -substrate-test-client = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", branch = "master" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "master" } -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-service = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-executor = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } +sc-executor-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-test-client = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } # Cumulus cumulus-test-runtime = { path = "../runtime" } diff --git a/test/relay-sproof-builder/Cargo.toml b/test/relay-sproof-builder/Cargo.toml index 32e12ee25cc..6d78db44498 100644 --- a/test/relay-sproof-builder/Cargo.toml +++ b/test/relay-sproof-builder/Cargo.toml @@ -8,12 +8,12 @@ edition = "2021" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "derive" ] } # Substrate -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core", default-features = false } diff --git a/test/relay-validation-worker-provider/Cargo.toml b/test/relay-validation-worker-provider/Cargo.toml index 8d1be981559..fb6fe87bcc6 100644 --- a/test/relay-validation-worker-provider/Cargo.toml +++ b/test/relay-validation-worker-provider/Cargo.toml @@ -8,7 +8,7 @@ build = "build.rs" [dependencies] # Polkadot -polkadot-node-core-pvf = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-node-core-pvf = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } [build-dependencies] toml = "0.5.9" diff --git a/test/runtime/Cargo.toml b/test/runtime/Cargo.toml index c0383a7235a..45036a6628b 100644 --- a/test/runtime/Cargo.toml +++ b/test/runtime/Cargo.toml @@ -9,25 +9,25 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate -frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-io = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-offchain = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-session = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Cumulus cumulus-pallet-parachain-system = { path = "../../pallets/parachain-system", default-features = false } @@ -35,7 +35,7 @@ cumulus-primitives-core = { path = "../../primitives/core", default-features = f cumulus-primitives-timestamp = { path = "../../primitives/timestamp", default-features = false } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [features] default = [ "std" ] diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index bef0c60ec75..caf29821cb0 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -21,39 +21,39 @@ tracing = "0.1.37" url = "2.3.1" # Substrate -frame-system = { git = "https://github.com/paritytech/substrate", branch = "master" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-executor = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["wasmtime"] } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "master", features = [ "wasmtime" ] } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-arithmetic = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "master" } -sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" } -substrate-test-client = { git = "https://github.com/paritytech/substrate", branch = "master" } -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-executor = { git = "https://github.com/paritytech/substrate", features = ["wasmtime"] , branch = "polkadot-v0.9.31" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-service = { git = "https://github.com/paritytech/substrate", features = [ "wasmtime" ] , branch = "polkadot-v0.9.31" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-arithmetic = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-test-client = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-test-service = { git = "https://github.com/paritytech/polkadot", branch = "master" } -polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-test-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } # Cumulus cumulus-client-cli = { path = "../../client/cli" } @@ -76,11 +76,11 @@ futures = "0.3.24" portpicker = "0.1.1" # Polkadot dependencies -polkadot-test-service = { git = "https://github.com/paritytech/polkadot", branch = "master" } +polkadot-test-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } # Substrate dependencies -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master" } -substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } +substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } [[bench]] name = "transaction_throughput" From 940a6f4016f4b8b9ec60f3cd196a6f8fcbb92ffa Mon Sep 17 00:00:00 2001 From: EgorPopelyaev Date: Thu, 20 Oct 2022 18:16:26 +0200 Subject: [PATCH 142/148] Bump crate versions --- Cargo.lock | 2 +- polkadot-parachain/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cf8ea5259cd..edf7b6c14fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7627,7 +7627,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" -version = "0.9.300" +version = "0.9.310" dependencies = [ "assert_cmd", "async-trait", diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index e7a7881f001..8ab166ec977 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-parachain" -version = "0.9.300" +version = "0.9.310" authors = ["Parity Technologies "] build = "build.rs" edition = "2021" From a63ca3a370d0b1c2743b7d6fac4690a8a9ccff2d Mon Sep 17 00:00:00 2001 From: EgorPopelyaev Date: Thu, 20 Oct 2022 18:16:31 +0200 Subject: [PATCH 143/148] Bump spec_version to 9310 --- parachains/runtimes/assets/statemine/src/lib.rs | 2 +- parachains/runtimes/assets/statemint/src/lib.rs | 2 +- parachains/runtimes/assets/westmint/src/lib.rs | 2 +- parachains/runtimes/collectives/collectives-polkadot/src/lib.rs | 2 +- parachains/runtimes/contracts/contracts-rococo/src/lib.rs | 2 +- parachains/runtimes/starters/seedling/src/lib.rs | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/parachains/runtimes/assets/statemine/src/lib.rs b/parachains/runtimes/assets/statemine/src/lib.rs index c17ebf8282d..bc981fa18c0 100644 --- a/parachains/runtimes/assets/statemine/src/lib.rs +++ b/parachains/runtimes/assets/statemine/src/lib.rs @@ -87,7 +87,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("statemine"), impl_name: create_runtime_str!("statemine"), authoring_version: 1, - spec_version: 9300, + spec_version: 9310, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 8, diff --git a/parachains/runtimes/assets/statemint/src/lib.rs b/parachains/runtimes/assets/statemint/src/lib.rs index 2f3a308ace5..e042a4a81f1 100644 --- a/parachains/runtimes/assets/statemint/src/lib.rs +++ b/parachains/runtimes/assets/statemint/src/lib.rs @@ -117,7 +117,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("statemint"), impl_name: create_runtime_str!("statemint"), authoring_version: 1, - spec_version: 9300, + spec_version: 9310, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 8, diff --git a/parachains/runtimes/assets/westmint/src/lib.rs b/parachains/runtimes/assets/westmint/src/lib.rs index d9770aef14d..e02e75a694b 100644 --- a/parachains/runtimes/assets/westmint/src/lib.rs +++ b/parachains/runtimes/assets/westmint/src/lib.rs @@ -85,7 +85,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("westmint"), impl_name: create_runtime_str!("westmint"), authoring_version: 1, - spec_version: 9300, + spec_version: 9310, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 8, diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs index 4b18df36fe1..5134bd6f566 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/lib.rs @@ -102,7 +102,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("collectives"), impl_name: create_runtime_str!("collectives"), authoring_version: 1, - spec_version: 9300, + spec_version: 9310, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 0, diff --git a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs index 579801078a4..0d65a811473 100644 --- a/parachains/runtimes/contracts/contracts-rococo/src/lib.rs +++ b/parachains/runtimes/contracts/contracts-rococo/src/lib.rs @@ -117,7 +117,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("contracts-rococo"), impl_name: create_runtime_str!("contracts-rococo"), authoring_version: 1, - spec_version: 9300, + spec_version: 9310, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/parachains/runtimes/starters/seedling/src/lib.rs b/parachains/runtimes/starters/seedling/src/lib.rs index 67cc9dede21..22b03670086 100644 --- a/parachains/runtimes/starters/seedling/src/lib.rs +++ b/parachains/runtimes/starters/seedling/src/lib.rs @@ -65,7 +65,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("seedling"), impl_name: create_runtime_str!("seedling"), authoring_version: 1, - spec_version: 9300, + spec_version: 9310, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, From 7290787bf307b9162d0698980cccd0f7191f6aae Mon Sep 17 00:00:00 2001 From: Branislav Kontur Date: Tue, 25 Oct 2022 13:50:19 +0200 Subject: [PATCH 144/148] Avoid consuming XCM message for NotApplicable scenario (#1787) * Avoid consuming message for NotApplicable scenario * Avoid consuming message for NotApplicable scenario tests --- pallets/xcmp-queue/src/lib.rs | 5 +- pallets/xcmp-queue/src/tests.rs | 85 +++++++++++++++++++++++++ primitives/utility/src/lib.rs | 106 +++++++++++++++++++++++++++++++- 3 files changed, 192 insertions(+), 4 deletions(-) diff --git a/pallets/xcmp-queue/src/lib.rs b/pallets/xcmp-queue/src/lib.rs index 72f1c12011b..2fdedd3e306 100644 --- a/pallets/xcmp-queue/src/lib.rs +++ b/pallets/xcmp-queue/src/lib.rs @@ -1138,19 +1138,20 @@ impl SendXcm for Pallet { msg: &mut Option>, ) -> SendResult<(ParaId, VersionedXcm<()>)> { let d = dest.take().ok_or(SendError::MissingArgument)?; - let xcm = msg.take().ok_or(SendError::MissingArgument)?; match &d { // An HRMP message for a sibling parachain. MultiLocation { parents: 1, interior: X1(Parachain(id)) } => { + let xcm = msg.take().ok_or(SendError::MissingArgument)?; let id = ParaId::from(*id); let price = T::PriceForSiblingDelivery::price_for_sibling_delivery(id, &xcm); let versioned_xcm = T::VersionWrapper::wrap_version(&d, xcm) .map_err(|()| SendError::DestinationUnsupported)?; Ok(((id, versioned_xcm), price)) }, - // Anything else is unhandled. This includes a message this is meant for us. _ => { + // Anything else is unhandled. This includes a message that is not meant for us. + // We need to make sure that dest/msg is not consumed here. *dest = Some(d); Err(SendError::NotApplicable) }, diff --git a/pallets/xcmp-queue/src/tests.rs b/pallets/xcmp-queue/src/tests.rs index 1b6303ddaf1..595bd8ca33b 100644 --- a/pallets/xcmp-queue/src/tests.rs +++ b/pallets/xcmp-queue/src/tests.rs @@ -247,3 +247,88 @@ fn update_xcmp_max_individual_weight() { assert_eq!(data.xcmp_max_individual_weight, 30u64 * WEIGHT_PER_MILLIS); }); } + +/// Validates [`validate`] for required Some(destination) and Some(message) +struct OkFixedXcmHashWithAssertingRequiredInputsSender; +impl OkFixedXcmHashWithAssertingRequiredInputsSender { + const FIXED_XCM_HASH: [u8; 32] = [9; 32]; + + fn fixed_delivery_asset() -> MultiAssets { + MultiAssets::new() + } + + fn expected_delivery_result() -> Result<(XcmHash, MultiAssets), SendError> { + Ok((Self::FIXED_XCM_HASH, Self::fixed_delivery_asset())) + } +} +impl SendXcm for OkFixedXcmHashWithAssertingRequiredInputsSender { + type Ticket = (); + + fn validate( + destination: &mut Option, + message: &mut Option>, + ) -> SendResult { + assert!(destination.is_some()); + assert!(message.is_some()); + Ok(((), OkFixedXcmHashWithAssertingRequiredInputsSender::fixed_delivery_asset())) + } + + fn deliver(_: Self::Ticket) -> Result { + Ok(Self::FIXED_XCM_HASH) + } +} + +#[test] +fn xcmp_queue_does_not_consume_dest_or_msg_on_not_applicable() { + // dummy message + let message = Xcm(vec![Trap(5)]); + + // XcmpQueue - check dest is really not applicable + let dest = (Parent, Parent, Parent); + let mut dest_wrapper = Some(dest.clone().into()); + let mut msg_wrapper = Some(message.clone()); + assert_eq!( + Err(SendError::NotApplicable), + ::validate(&mut dest_wrapper, &mut msg_wrapper) + ); + + // check wrapper were not consumed + assert_eq!(Some(dest.clone().into()), dest_wrapper.take()); + assert_eq!(Some(message.clone()), msg_wrapper.take()); + + // another try with router chain with asserting sender + assert_eq!( + OkFixedXcmHashWithAssertingRequiredInputsSender::expected_delivery_result(), + send_xcm::<(XcmpQueue, OkFixedXcmHashWithAssertingRequiredInputsSender)>( + dest.into(), + message + ) + ); +} + +#[test] +fn xcmp_queue_consumes_dest_and_msg_on_ok_validate() { + // dummy message + let message = Xcm(vec![Trap(5)]); + + // XcmpQueue - check dest/msg is valid + let dest = (Parent, X1(Parachain(5555))); + let mut dest_wrapper = Some(dest.clone().into()); + let mut msg_wrapper = Some(message.clone()); + assert!(::validate(&mut dest_wrapper, &mut msg_wrapper).is_ok()); + + // check wrapper were consumed + assert_eq!(None, dest_wrapper.take()); + assert_eq!(None, msg_wrapper.take()); + + new_test_ext().execute_with(|| { + // another try with router chain with asserting sender + assert_eq!( + Err(SendError::Transport("NoChannel")), + send_xcm::<(XcmpQueue, OkFixedXcmHashWithAssertingRequiredInputsSender)>( + dest.into(), + message + ) + ); + }); +} diff --git a/primitives/utility/src/lib.rs b/primitives/utility/src/lib.rs index 1e93aa7d792..5cededd7b46 100644 --- a/primitives/utility/src/lib.rs +++ b/primitives/utility/src/lib.rs @@ -75,10 +75,10 @@ where msg: &mut Option>, ) -> SendResult> { let d = dest.take().ok_or(SendError::MissingArgument)?; - let xcm = msg.take().ok_or(SendError::MissingArgument)?; if d.contains_parents_only(1) { // An upward message for the relay chain. + let xcm = msg.take().ok_or(SendError::MissingArgument)?; let price = P::price_for_parent_delivery(&xcm); let versioned_xcm = W::wrap_version(&d, xcm).map_err(|()| SendError::DestinationUnsupported)?; @@ -86,8 +86,9 @@ where Ok((data, price)) } else { + // Anything else is unhandled. This includes a message that is not meant for us. + // We need to make sure that dest/msg is not consumed here. *dest = Some(d); - // Anything else is unhandled. This includes a message this is meant for us. Err(SendError::NotApplicable) } } @@ -317,3 +318,104 @@ pub trait ChargeWeightInFungibles Result<>::Balance, XcmError>; } + +#[cfg(test)] +mod tests { + use super::*; + use cumulus_primitives_core::UpwardMessage; + + /// Validates [`validate`] for required Some(destination) and Some(message) + struct OkFixedXcmHashWithAssertingRequiredInputsSender; + impl OkFixedXcmHashWithAssertingRequiredInputsSender { + const FIXED_XCM_HASH: [u8; 32] = [9; 32]; + + fn fixed_delivery_asset() -> MultiAssets { + MultiAssets::new() + } + + fn expected_delivery_result() -> Result<(XcmHash, MultiAssets), SendError> { + Ok((Self::FIXED_XCM_HASH, Self::fixed_delivery_asset())) + } + } + impl SendXcm for OkFixedXcmHashWithAssertingRequiredInputsSender { + type Ticket = (); + + fn validate( + destination: &mut Option, + message: &mut Option>, + ) -> SendResult { + assert!(destination.is_some()); + assert!(message.is_some()); + Ok(((), OkFixedXcmHashWithAssertingRequiredInputsSender::fixed_delivery_asset())) + } + + fn deliver(_: Self::Ticket) -> Result { + Ok(Self::FIXED_XCM_HASH) + } + } + + /// Impl [`UpwardMessageSender`] that return `Other` error + struct OtherErrorUpwardMessageSender; + impl UpwardMessageSender for OtherErrorUpwardMessageSender { + fn send_upward_message(_: UpwardMessage) -> Result { + Err(MessageSendError::Other) + } + } + + #[test] + fn parent_as_ump_does_not_consume_dest_or_msg_on_not_applicable() { + // dummy message + let message = Xcm(vec![Trap(5)]); + + // ParentAsUmp - check dest is really not applicable + let dest = (Parent, Parent, Parent); + let mut dest_wrapper = Some(dest.clone().into()); + let mut msg_wrapper = Some(message.clone()); + assert_eq!( + Err(SendError::NotApplicable), + as SendXcm>::validate(&mut dest_wrapper, &mut msg_wrapper) + ); + + // check wrapper were not consumed + assert_eq!(Some(dest.clone().into()), dest_wrapper.take()); + assert_eq!(Some(message.clone()), msg_wrapper.take()); + + // another try with router chain with asserting sender + assert_eq!( + OkFixedXcmHashWithAssertingRequiredInputsSender::expected_delivery_result(), + send_xcm::<(ParentAsUmp<(), (), ()>, OkFixedXcmHashWithAssertingRequiredInputsSender)>( + dest.into(), + message + ) + ); + } + + #[test] + fn parent_as_ump_consumes_dest_and_msg_on_ok_validate() { + // dummy message + let message = Xcm(vec![Trap(5)]); + + // ParentAsUmp - check dest/msg is valid + let dest = (Parent, Here); + let mut dest_wrapper = Some(dest.clone().into()); + let mut msg_wrapper = Some(message.clone()); + assert!( as SendXcm>::validate( + &mut dest_wrapper, + &mut msg_wrapper + ) + .is_ok()); + + // check wrapper were consumed + assert_eq!(None, dest_wrapper.take()); + assert_eq!(None, msg_wrapper.take()); + + // another try with router chain with asserting sender + assert_eq!( + Err(SendError::Transport("Other")), + send_xcm::<( + ParentAsUmp, + OkFixedXcmHashWithAssertingRequiredInputsSender + )>(dest.into(), message) + ); + } +} From 1ca9da1ebb4ec518762bc8b3b9192aba6e58db94 Mon Sep 17 00:00:00 2001 From: Artur Gontijo Date: Wed, 2 Nov 2022 13:29:38 -0300 Subject: [PATCH 145/148] [XCMv3] v0.9.31 --- Cargo.lock | 1953 +++++++++-------- client/collator/Cargo.toml | 10 +- client/consensus/common/Cargo.toml | 2 +- client/network/Cargo.toml | 12 +- client/pov-recovery/Cargo.toml | 8 +- .../Cargo.toml | 10 +- client/relay-chain-interface/Cargo.toml | 4 +- client/relay-chain-minimal-node/Cargo.toml | 18 +- client/relay-chain-rpc-interface/Cargo.toml | 2 +- client/service/Cargo.toml | 2 +- pallets/dmp-queue/Cargo.toml | 2 +- pallets/parachain-system/Cargo.toml | 2 +- pallets/solo-to-para/Cargo.toml | 2 +- pallets/xcm/Cargo.toml | 2 +- pallets/xcmp-queue/Cargo.toml | 8 +- parachain-template/node/Cargo.toml | 8 +- parachain-template/runtime/Cargo.toml | 12 +- parachains/common/Cargo.toml | 14 +- parachains/common/src/impls.rs | 15 + parachains/pallets/ping/Cargo.toml | 2 +- .../runtimes/assets/statemine/Cargo.toml | 18 +- .../statemine/src/weights/pallet_multisig.rs | 38 - .../assets/statemine/src/weights/xcm/mod.rs | 3 + .../xcm/pallet_xcm_benchmarks_generic.rs | 3 + .../runtimes/assets/statemint/Cargo.toml | 18 +- .../statemint/src/weights/pallet_multisig.rs | 38 - .../assets/statemint/src/weights/xcm/mod.rs | 3 + .../xcm/pallet_xcm_benchmarks_generic.rs | 3 + .../runtimes/assets/westmint/Cargo.toml | 18 +- .../westmint/src/weights/pallet_multisig.rs | 38 - .../assets/westmint/src/weights/xcm/mod.rs | 3 + .../xcm/pallet_xcm_benchmarks_generic.rs | 3 + .../collectives-polkadot/Cargo.toml | 16 +- .../src/weights/pallet_multisig.rs | 38 - .../contracts/contracts-rococo/Cargo.toml | 16 +- parachains/runtimes/starters/shell/Cargo.toml | 6 +- parachains/runtimes/testing/penpal/Cargo.toml | 14 +- .../runtimes/testing/penpal/src/xcm_config.rs | 19 +- .../testing/rococo-parachain/Cargo.toml | 10 +- polkadot-parachain/Cargo.toml | 10 +- primitives/core/Cargo.toml | 6 +- primitives/utility/Cargo.toml | 8 +- test/client/Cargo.toml | 4 +- test/relay-sproof-builder/Cargo.toml | 2 +- .../Cargo.toml | 2 +- test/service/Cargo.toml | 10 +- 46 files changed, 1194 insertions(+), 1241 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index edf7b6c14fa..487867da936 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -33,7 +33,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", ] [[package]] @@ -68,16 +68,16 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.3", + "getrandom 0.2.8", "once_cell", "version_check", ] [[package]] name = "aho-corasick" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" dependencies = [ "memchr", ] @@ -88,6 +88,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbf688625d06217d5b1bb0ea9d9c44a1635fd0ee3534466388d18203174f4d11" +[[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 = "anes" version = "0.1.6" @@ -105,15 +114,15 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.51" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b26702f315f53b6071259e15dd9d64528213b44d61de1ec926eca7715d62203" +checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" [[package]] name = "approx" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "072df7202e63b127ab55acfe16ce97013d5b97bf160489336d3f1840fd78e99e" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" dependencies = [ "num-traits", ] @@ -159,9 +168,9 @@ checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" [[package]] name = "assert_cmd" -version = "2.0.4" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ae1ddd39efd67689deb1979d80bad3bf7f2b09c6e6117c8d1f2443b5e2f83e" +checksum = "d5c2ca00549910ec251e3bd15f87aeeb206c9456b9a77b43ff6c97c54042a472" dependencies = [ "bstr", "doc-comment", @@ -208,9 +217,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "1.6.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" +checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28" dependencies = [ "concurrent-queue", "event-listener", @@ -233,31 +242,31 @@ dependencies = [ [[package]] name = "async-global-executor" -version = "2.0.2" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9586ec52317f36de58453159d48351bc244bc24ced3effc1fce22f3d48664af6" +checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776" dependencies = [ "async-channel", "async-executor", "async-io", - "async-mutex", + "async-lock", "blocking", "futures-lite", - "num_cpus", "once_cell", ] [[package]] name = "async-io" -version = "1.6.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b" +checksum = "e8121296a9f05be7f34aa4196b1747243b3b62e048bb7906f644f3fbfc490cf7" dependencies = [ + "async-lock", + "autocfg", "concurrent-queue", "futures-lite", "libc", "log", - "once_cell", "parking", "polling", "slab", @@ -268,29 +277,22 @@ dependencies = [ [[package]] name = "async-lock" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a8ea61bf9947a1007c5cada31e647dbc77b103c679858150003ba697ea798b" -dependencies = [ - "event-listener", -] - -[[package]] -name = "async-mutex" -version = "1.4.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" +checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" dependencies = [ "event-listener", + "futures-lite", ] [[package]] name = "async-process" -version = "1.3.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83137067e3a2a6a06d67168e49e68a0957d215410473a740cea95a2425c0b7c6" +checksum = "02111fd8655a613c25069ea89fc8d9bb89331fa77486eb3bc059ee757cfa481c" dependencies = [ "async-io", + "autocfg", "blocking", "cfg-if 1.0.0", "event-listener", @@ -303,9 +305,9 @@ dependencies = [ [[package]] name = "async-std" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52580991739c5cdb36cde8b2a516371c0a3b70dda36d916cc08b82372916808c" +checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" dependencies = [ "async-attributes", "async-channel", @@ -322,7 +324,6 @@ dependencies = [ "kv-log-macro", "log", "memchr", - "num_cpus", "once_cell", "pin-project-lite 0.2.9", "pin-utils", @@ -347,15 +348,15 @@ dependencies = [ [[package]] name = "async-task" -version = "4.0.3" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" +checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" [[package]] name = "async-trait" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f" +checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c" dependencies = [ "proc-macro2", "quote", @@ -405,7 +406,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" dependencies = [ "futures-core", - "getrandom 0.2.3", + "getrandom 0.2.8", "instant", "pin-project-lite 0.2.9", "rand 0.8.5", @@ -414,24 +415,24 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.64" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e121dee8023ce33ab248d9ce1493df03c3b38a659b240096fcbd7048ff9c31f" +checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7" dependencies = [ "addr2line", "cc", "cfg-if 1.0.0", "libc", "miniz_oxide", - "object 0.27.1", + "object", "rustc-demangle", ] [[package]] name = "base-x" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" [[package]] name = "base16ct" @@ -447,21 +448,21 @@ checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" [[package]] name = "base64" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64ct" -version = "1.5.2" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2b2456fd614d856680dcd9fcc660a51a820fa09daef2e49772b56a193c8474" +checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" [[package]] name = "beef" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bed554bd50246729a1ec158d08aa3235d1b69d94ad120ebe187e28894787e736" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" dependencies = [ "serde", ] @@ -469,7 +470,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "array-bytes", "async-trait", @@ -506,7 +507,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -526,7 +527,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "beefy-primitives", "sp-api", @@ -536,7 +537,7 @@ dependencies = [ [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "parity-scale-codec", "scale-info", @@ -602,7 +603,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9cf849ee05b2ee5fba5e36f97ff8ec2533916700fc0758d40d92136a42f3388" dependencies = [ - "digest 0.10.3", + "digest 0.10.5", ] [[package]] @@ -648,7 +649,7 @@ dependencies = [ "cc", "cfg-if 1.0.0", "constant_time_eq", - "digest 0.10.3", + "digest 0.10.5", ] [[package]] @@ -669,16 +670,16 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", ] [[package]] name = "block-buffer" -version = "0.10.0" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1d36a02058e76b040de25a4464ba1c80935655595b661505c8b39b664828b95" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", ] [[package]] @@ -692,9 +693,9 @@ dependencies = [ [[package]] name = "blocking" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046e47d4b2d391b1f6f8b407b1deb8dee56c1852ccd868becf2710f601b5f427" +checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc" dependencies = [ "async-channel", "async-task", @@ -741,15 +742,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.8.0" +version = "3.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" +checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" [[package]] name = "byte-slice-cast" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c5fdd0166095e1d463fc6cc01aa8ce547ad77a4e84d42eb6762b084e28067e" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "byte-tools" @@ -782,15 +783,15 @@ dependencies = [ [[package]] name = "cache-padded" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba" +checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" [[package]] name = "camino" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d74260d9bf6944e2208aa46841b4b8f0d7ffc0849a06837b2f510337f86b2b" +checksum = "88ad0e1e3e88dd237a156ab9f571021b8a158caa0ae44b1968a241efb5144c1e" dependencies = [ "serde", ] @@ -812,7 +813,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" dependencies = [ "camino", "cargo-platform", - "semver 1.0.4", + "semver 1.0.14", "serde", "serde_json", ] @@ -825,9 +826,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.72" +version = "1.0.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" +checksum = "581f5dba903aac52ea3feb5ec4810848460ee833876f1f9b0fdeab1f19091574" dependencies = [ "jobserver", ] @@ -870,9 +871,9 @@ checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" [[package]] name = "chacha20" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b72a433d0cf2aef113ba70f62634c56fddb0f244e6377185c56a7cadbd8f91" +checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" dependencies = [ "cfg-if 1.0.0", "cipher", @@ -882,9 +883,9 @@ dependencies = [ [[package]] name = "chacha20poly1305" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b84ed6d1d5f7aa9bdde921a5090e0ca4d934d250ea3b402a5fab3a994e28a2a" +checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" dependencies = [ "aead", "chacha20", @@ -895,14 +896,16 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" dependencies = [ - "libc", + "iana-time-zone", + "js-sys", "num-integer", "num-traits", "time", + "wasm-bindgen", "winapi", ] @@ -952,7 +955,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", ] [[package]] @@ -966,9 +969,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa66045b9cb23c2e9c1520732030608b02ee07e5cfaa5a521ec15ded7fa24c90" +checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" dependencies = [ "glob", "libc", @@ -977,21 +980,21 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.22" +version = "3.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750" +checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" dependencies = [ "bitflags", - "clap_lex 0.2.2", + "clap_lex 0.2.4", "indexmap", "textwrap", ] [[package]] name = "clap" -version = "4.0.17" +version = "4.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06badb543e734a2d6568e19a40af66ed5364360b9226184926f89d229b4b4267" +checksum = "335867764ed2de42325fafe6d18b8af74ba97ee0c590fa016f157535b42ab04b" dependencies = [ "atty", "bitflags", @@ -1004,9 +1007,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.0.13" +version = "4.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f169caba89a7d512b5418b09864543eeb4d497416c917d7137863bd2076ad" +checksum = "16a1b0f6422af32d5da0c58e2703320f379216ee70198241c84173a8c5ac28f3" dependencies = [ "heck", "proc-macro-error", @@ -1017,9 +1020,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5538cd660450ebeb4234cfecf8f2284b844ffc4c50531e66d584ad5b91293613" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" dependencies = [ "os_str_bytes", ] @@ -1045,6 +1048,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + [[package]] name = "collectives-polkadot-runtime" version = "1.0.0" @@ -1109,9 +1122,9 @@ dependencies = [ [[package]] name = "comfy-table" -version = "6.0.0" +version = "6.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121d8a5b0346092c18a4b2fd6f620d7a06f0eb7ac0a45860939a0884bc579c56" +checksum = "1090f39f45786ec6dc6286f8ea9c75d0a7ef0a0d3cda674cef0c3af7b307fbc2" dependencies = [ "strum", "strum_macros", @@ -1120,9 +1133,9 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "1.2.2" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" dependencies = [ "cache-padded", ] @@ -1210,9 +1223,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "core-foundation" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6888e10551bb93e424d8df1d07f1a8b4fceb0001a3a4b048bfc47554946f47b3" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ "core-foundation-sys", "libc", @@ -1244,27 +1257,27 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.1" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" dependencies = [ "libc", ] [[package]] name = "cranelift-bforest" -version = "0.88.0" +version = "0.88.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b27bbd3e6c422cf6282b047bcdd51ecd9ca9f3497a3be0132ffa08e509b824b0" +checksum = "44409ccf2d0f663920cab563d2b79fcd6b2e9a2bcc6e929fef76c8f82ad6c17a" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.88.0" +version = "0.88.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "872f5d4557a411b087bd731df6347c142ae1004e6467a144a7e33662e5715a01" +checksum = "98de2018ad96eb97f621f7d6b900a0cc661aec8d02ea4a50e56ecb48e5a2fcaf" dependencies = [ "arrayvec 0.7.2", "bumpalo", @@ -1282,33 +1295,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.88.0" +version = "0.88.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b49fdebb29c62c1fc4da1eeebd609e9d530ecde24a9876def546275f73a244" +checksum = "5287ce36e6c4758fbaf298bd1a8697ad97a4f2375a3d1b61142ea538db4877e5" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.88.0" +version = "0.88.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc0c091e2db055d4d7f6b7cec2d2ead286bcfaea3357c6a52c2a2613a8cb5ac" +checksum = "2855c24219e2f08827f3f4ffb2da92e134ae8d8ecc185b11ec8f9878cf5f588e" [[package]] name = "cranelift-entity" -version = "0.88.0" +version = "0.88.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "354a9597be87996c9b278655e68b8447f65dd907256855ad773864edee8d985c" +checksum = "0b65673279d75d34bf11af9660ae2dbd1c22e6d28f163f5c72f4e1dc56d56103" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.88.0" +version = "0.88.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd8dd3fb8b82c772f4172e87ae1677b971676fffa7c4e3398e3047e650a266b" +checksum = "3ed2b3d7a4751163f6c4a349205ab1b7d9c00eecf19dcea48592ef1f7688eefc" dependencies = [ "cranelift-codegen", "log", @@ -1318,15 +1331,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.88.0" +version = "0.88.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b82527802b1f7d8da288adc28f1dc97ea52943f5871c041213f7b5035ac698a7" +checksum = "3be64cecea9d90105fc6a2ba2d003e98c867c1d6c4c86cc878f97ad9fb916293" [[package]] name = "cranelift-native" -version = "0.88.0" +version = "0.88.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c30ba8b910f1be023af0c39109cb28a8809734942a6b3eecbf2de8993052ea5e" +checksum = "c4a03a6ac1b063e416ca4b93f6247978c991475e8271465340caa6f92f3c16a4" dependencies = [ "cranelift-codegen", "libc", @@ -1335,9 +1348,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.88.0" +version = "0.88.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "776a8916d201894aca9637a20814f1e11abc62acd5cfbe0b4eb2e63922756971" +checksum = "c699873f7b30bc5f20dd03a796b4183e073a46616c91704792ec35e45d13f913" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1351,9 +1364,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.3.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ "cfg-if 1.0.0", ] @@ -1368,7 +1381,7 @@ dependencies = [ "atty", "cast", "ciborium", - "clap 3.2.22", + "clap 3.2.23", "criterion-plot", "futures", "itertools", @@ -1398,9 +1411,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.1" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -1408,9 +1421,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" dependencies = [ "cfg-if 1.0.0", "crossbeam-epoch", @@ -1419,22 +1432,22 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.5" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" +checksum = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348" dependencies = [ + "autocfg", "cfg-if 1.0.0", "crossbeam-utils", - "lazy_static", "memoffset", "scopeguard", ] [[package]] name = "crossbeam-queue" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f25d8400f4a7a5778f0e4e52384a48cbd9b5c495d110786187fc750075277a2" +checksum = "1cd42583b04998a5363558e5f9291ee5a5ff6b49944332103f251e7479a82aa7" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -1442,12 +1455,11 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.8" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" dependencies = [ "cfg-if 1.0.0", - "lazy_static", ] [[package]] @@ -1462,19 +1474,19 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03c6a1d5fa1de37e071642dfa44ec552ca5b299adb128fab16138e24b548fd21" dependencies = [ - "generic-array 0.14.4", - "rand_core 0.6.3", + "generic-array 0.14.6", + "rand_core 0.6.4", "subtle", "zeroize", ] [[package]] name = "crypto-common" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", "typenum", ] @@ -1484,7 +1496,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", "subtle", ] @@ -1494,15 +1506,15 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", "subtle", ] [[package]] name = "ctor" -version = "0.1.21" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", "syn", @@ -1521,7 +1533,7 @@ dependencies = [ name = "cumulus-client-cli" version = "0.1.0" dependencies = [ - "clap 4.0.17", + "clap 4.0.18", "parity-scale-codec", "sc-chain-spec", "sc-cli", @@ -1849,6 +1861,7 @@ dependencies = [ "log", "pallet-balances", "parity-scale-codec", + "polkadot-runtime-common", "rand_chacha 0.3.1", "scale-info", "sp-core", @@ -1936,6 +1949,8 @@ dependencies = [ "frame-support", "log", "parity-scale-codec", + "polkadot-runtime-common", + "sp-io", "sp-runtime", "sp-std", "xcm", @@ -2147,7 +2162,7 @@ name = "cumulus-test-service" version = "0.1.0" dependencies = [ "async-trait", - "clap 4.0.17", + "clap 4.0.18", "criterion", "cumulus-client-cli", "cumulus-client-consensus-common", @@ -2240,11 +2255,55 @@ checksum = "4033478fbf70d6acf2655ac70da91ee65852d69daf7a67bf7a2f518fb47aafcf" dependencies = [ "byteorder", "digest 0.9.0", - "rand_core 0.6.3", + "rand_core 0.6.4", "subtle", "zeroize", ] +[[package]] +name = "cxx" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b7d4e43b25d3c994662706a1d4fcfc32aaa6afd287502c111b237093bb23f3a" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84f8829ddc213e2c1368e51a2564c552b65a8cb6a28f31e576270ac81d5e5827" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e72537424b474af1460806647c41d4b6d35d09ef7fe031c5c2fa5766047cc56a" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "309e4fb93eed90e1e14bea0da16b209f81813ba9fc7830c20ed151dd7bc0a4d7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "data-encoding" version = "2.3.2" @@ -2325,16 +2384,16 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", ] [[package]] name = "digest" -version = "0.10.3" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" dependencies = [ - "block-buffer 0.10.0", + "block-buffer 0.10.3", "crypto-common", "subtle", ] @@ -2360,9 +2419,9 @@ dependencies = [ [[package]] name = "dirs-sys" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" dependencies = [ "libc", "redox_users", @@ -2387,7 +2446,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4d33be9473d06f75f58220f71f7a9317aca647dc061dbd3c361b0bef505fbea" dependencies = [ "byteorder", - "quick-error 1.2.3", + "quick-error", ] [[package]] @@ -2410,9 +2469,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dtoa" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5caaa75cbd2b960ff1e5392d2cfb1f44717fffe12fc1f32b7b5d1267f99732a6" +checksum = "f8a6eee2d5d0d113f015688310da018bd1d864d86bd567c8fca9c266889e1bfa" [[package]] name = "dyn-clonable" @@ -2455,9 +2514,9 @@ dependencies = [ [[package]] name = "ed25519" -version = "1.3.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74e1069e39f1454367eb2de793ed062fac4c35c2934b76a81d90dd9abcd28816" +checksum = "1e9c280362032ea4203659fc489832d0204ef09f247a0506f170dafcac08c369" dependencies = [ "signature", ] @@ -2472,29 +2531,29 @@ dependencies = [ "ed25519", "rand 0.7.3", "serde", - "sha2 0.9.8", + "sha2 0.9.9", "zeroize", ] [[package]] name = "ed25519-zebra" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403ef3e961ab98f0ba902771d29f842058578bb1ce7e3c59dad5a6a93e784c69" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" dependencies = [ "curve25519-dalek 3.2.0", + "hashbrown", "hex", - "rand_core 0.6.3", - "sha2 0.9.8", - "thiserror", + "rand_core 0.6.4", + "sha2 0.9.9", "zeroize", ] [[package]] name = "either" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "elliptic-curve" @@ -2506,9 +2565,9 @@ dependencies = [ "crypto-bigint", "der", "ff", - "generic-array 0.14.4", + "generic-array 0.14.6", "group", - "rand_core 0.6.3", + "rand_core 0.6.4", "sec1", "subtle", "zeroize", @@ -2528,9 +2587,9 @@ dependencies = [ [[package]] name = "enumflags2" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b3ab37dc79652c9d85f1f7b6070d77d321d2467f5fe7b00d6b7a86c57b092ae" +checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" dependencies = [ "enumflags2_derive", ] @@ -2559,25 +2618,12 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" -dependencies = [ - "atty", - "humantime 1.3.0", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "env_logger" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" +checksum = "c90bf5f19754d10198ccb95b70664fc925bd1fc090a0fd9a6ebc54acc8cd6272" dependencies = [ "atty", - "humantime 2.1.0", + "humantime", "log", "regex", "termcolor", @@ -2612,9 +2658,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "2.5.1" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "exit-future" @@ -2664,9 +2710,9 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" dependencies = [ "instant", ] @@ -2707,34 +2753,34 @@ dependencies = [ [[package]] name = "ff" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2958d04124b9f27f175eaeb9a9f383d026098aa837eadd8ba22c11f13a05b9e" +checksum = "131655483be284720a17d74ff97592b8e76576dc25563148601df2d7c9080924" dependencies = [ - "rand_core 0.6.3", + "rand_core 0.6.4", "subtle", ] [[package]] name = "file-per-thread-logger" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fdbe0d94371f9ce939b555dd342d0686cc4c0cadbcd4b61d70af5ff97eb4126" +checksum = "21e16290574b39ee41c71aeb90ae960c504ebaf1e2a1c87bd52aa56ed6e1a02f" dependencies = [ - "env_logger 0.7.1", + "env_logger", "log", ] [[package]] name = "filetime" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c" +checksum = "4b9663d381d07ae25dc88dbdf27df458faa83a9b25336bcac83d5e452b5fc9d3" dependencies = [ "cfg-if 1.0.0", "libc", "redox_syscall", - "winapi", + "windows-sys 0.42.0", ] [[package]] @@ -2767,19 +2813,17 @@ dependencies = [ [[package]] name = "fixedbitset" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "398ea4fabe40b9b0d885340a2a991a44c8a645624075ad966d21f88688e2b69e" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" +checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" dependencies = [ - "cfg-if 1.0.0", "crc32fast", - "libc", "libz-sys", "miniz_oxide", ] @@ -2802,7 +2846,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "parity-scale-codec", ] @@ -2818,14 +2862,14 @@ dependencies = [ [[package]] name = "fragile" -version = "1.2.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85dcb89d2b10c5f6133de2efd8c11959ce9dbb46a2f7a4cab208c4eeda6ce1ab" +checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support", "frame-system", @@ -2848,12 +2892,12 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.0.17", + "clap 4.0.18", "comfy-table", "frame-benchmarking", "frame-support", @@ -2899,7 +2943,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2910,7 +2954,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2926,7 +2970,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support", "frame-system", @@ -2955,7 +2999,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "bitflags", "frame-metadata", @@ -2987,7 +3031,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "Inflector", "cfg-expr", @@ -3001,7 +3045,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -3013,7 +3057,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "proc-macro2", "quote", @@ -3023,7 +3067,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support", "log", @@ -3041,7 +3085,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -3056,7 +3100,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "parity-scale-codec", "sp-api", @@ -3065,7 +3109,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support", "parity-scale-codec", @@ -3076,9 +3120,9 @@ dependencies = [ [[package]] name = "fs-err" -version = "2.6.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ebd3504ad6116843b8375ad70df74e7bfe83cac77a1f3fe73200c844d43bfe0" +checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541" [[package]] name = "fs2" @@ -3104,9 +3148,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c" +checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" dependencies = [ "futures-channel", "futures-core", @@ -3119,9 +3163,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" +checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" dependencies = [ "futures-core", "futures-sink", @@ -3129,15 +3173,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" +checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" [[package]] name = "futures-executor" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab" +checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" dependencies = [ "futures-core", "futures-task", @@ -3147,9 +3191,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" +checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" [[package]] name = "futures-lite" @@ -3168,9 +3212,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17" +checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" dependencies = [ "proc-macro2", "quote", @@ -3179,9 +3223,9 @@ dependencies = [ [[package]] name = "futures-rustls" -version = "0.22.1" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01fe9932a224b72b45336d96040aa86386d674a31d0af27d800ea7bc8ca97fe" +checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" dependencies = [ "futures-io", "rustls", @@ -3190,15 +3234,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56" +checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" [[package]] name = "futures-task" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1" +checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" [[package]] name = "futures-timer" @@ -3208,9 +3252,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" +checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" dependencies = [ "futures-channel", "futures-core", @@ -3244,9 +3288,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.4" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", @@ -3277,13 +3321,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.3" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if 1.0.0", "libc", - "wasi 0.10.0+wasi-snapshot-preview1", + "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] @@ -3298,9 +3342,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.26.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" dependencies = [ "fallible-iterator", "indexmap", @@ -3315,9 +3359,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "globset" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd" +checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" dependencies = [ "aho-corasick", "bstr", @@ -3328,15 +3372,14 @@ dependencies = [ [[package]] name = "gloo-timers" -version = "0.2.1" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47204a46aaff920a1ea58b11d03dec6f704287d27561724a4631e450654a891f" +checksum = "5fb7d06c1c8cc2a29bee7ec961009a0b2caa0793ee4900c2ffb348734ba1c8f9" dependencies = [ "futures-channel", "futures-core", "js-sys", "wasm-bindgen", - "web-sys", ] [[package]] @@ -3346,15 +3389,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5ac374b108929de78460075f3dc439fa66df9d8fc77e8f12caa5165fcf0c89" dependencies = [ "ff", - "rand_core 0.6.3", + "rand_core 0.6.4", "subtle", ] [[package]] name = "h2" -version = "0.3.9" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f072413d126e57991455e0a922b31e4c8ba7c2ffbebf6b78b4f8521397d65cd" +checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" dependencies = [ "bytes", "fnv", @@ -3365,7 +3408,7 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util 0.6.9", + "tokio-util", "tracing", ] @@ -3377,16 +3420,16 @@ checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" [[package]] name = "handlebars" -version = "4.2.2" +version = "4.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d6a30320f094710245150395bc763ad23128d6a1ebbad7594dc4164b62c56b" +checksum = "433e4ab33f1213cdc25b5fa45c76881240cfe79284cf2b395e8b9e312a30a2fd" dependencies = [ "log", "pest", "pest_derive", - "quick-error 2.0.1", "serde", "serde_json", + "thiserror", ] [[package]] @@ -3404,15 +3447,6 @@ dependencies = [ "crunchy", ] -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" -dependencies = [ - "ahash", -] - [[package]] name = "hashbrown" version = "0.12.3" @@ -3476,7 +3510,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", - "generic-array 0.14.4", + "generic-array 0.14.6", "hmac 0.8.1", ] @@ -3499,14 +3533,14 @@ checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ "bytes", "fnv", - "itoa 1.0.1", + "itoa", ] [[package]] name = "http-body" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", @@ -3515,9 +3549,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.5.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" @@ -3525,15 +3559,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" -[[package]] -name = "humantime" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -dependencies = [ - "quick-error 1.2.3", -] - [[package]] name = "humantime" version = "2.1.0" @@ -3542,9 +3567,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.16" +version = "0.14.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7ec3e62bdc98a2f0393a5048e4c30ef659440ea6e0e572965103e72bd836f55" +checksum = "abfba89e19b959ca163c7752ba59d737c1ceea53a5d31a149c805446fc958064" dependencies = [ "bytes", "futures-channel", @@ -3555,7 +3580,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 0.4.8", + "itoa", "pin-project-lite 0.2.9", "socket2", "tokio", @@ -3579,6 +3604,30 @@ dependencies = [ "tokio-rustls", ] +[[package]] +name = "iana-time-zone" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + [[package]] name = "idna" version = "0.2.3" @@ -3664,7 +3713,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ "autocfg", - "hashbrown 0.12.3", + "hashbrown", "serde", ] @@ -3679,9 +3728,9 @@ dependencies = [ [[package]] name = "integer-encoding" -version = "3.0.2" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90c11140ffea82edce8dcd74137ce9324ec24b3cf0175fc9d7e29164da9915b8" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" [[package]] name = "integer-sqrt" @@ -3694,9 +3743,9 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c3f4eff5495aee4c0399d7b6a0dc2b6e81be84242ffbfcf253ebacccc1d0cb" +checksum = "e6e481ccbe3dea62107216d0d1138bb8ad8e5e5c43009a098bd1990272c497b0" [[package]] name = "ip_network" @@ -3718,45 +3767,39 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" +checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" [[package]] name = "itertools" -version = "0.10.3" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] [[package]] name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" [[package]] name = "jobserver" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" +checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.55" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" dependencies = [ "wasm-bindgen", ] @@ -3792,7 +3835,7 @@ dependencies = [ "thiserror", "tokio", "tokio-rustls", - "tokio-util 0.7.1", + "tokio-util", "tracing", "webpki-roots", ] @@ -3900,7 +3943,7 @@ dependencies = [ "soketto", "tokio", "tokio-stream", - "tokio-util 0.7.1", + "tokio-util", "tracing", "tracing-futures", ] @@ -3919,14 +3962,14 @@ dependencies = [ [[package]] name = "keccak" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" +checksum = "f9b7d56ba4a8344d6be9729995e6b06f928af29998cdf79fe390cbf6b1fee838" [[package]] name = "kusama-runtime" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "beefy-primitives", "bitvec", @@ -4024,13 +4067,15 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "frame-support", "polkadot-primitives", "polkadot-runtime-common", "smallvec", + "sp-core", "sp-runtime", + "sp-weights", ] [[package]] @@ -4093,15 +4138,15 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.131" +version = "0.2.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04c3b4822ccebfa39c02fc03d1534441b22ead323fa0f48bb7ddd8e6ba076a40" +checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" [[package]] name = "libloading" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe203d669ec979b7128619bae5a63b7b42e9203c1b29146079ee05e2f604b52" +checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" dependencies = [ "cfg-if 1.0.0", "winapi", @@ -4109,9 +4154,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.1" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" +checksum = "292a948cd991e376cf75541fe5b97a1081d713c618b4f1b9500f8844e49eb565" [[package]] name = "libp2p" @@ -4122,7 +4167,7 @@ dependencies = [ "bytes", "futures", "futures-timer", - "getrandom 0.2.3", + "getrandom 0.2.8", "instant", "lazy_static", "libp2p-core", @@ -4172,7 +4217,7 @@ dependencies = [ "prost-build", "rand 0.8.5", "rw-stream-sink", - "sha2 0.10.2", + "sha2 0.10.6", "smallvec", "thiserror", "unsigned-varint", @@ -4236,7 +4281,7 @@ dependencies = [ "prost", "prost-build", "rand 0.8.5", - "sha2 0.10.2", + "sha2 0.10.6", "smallvec", "thiserror", "uint", @@ -4311,7 +4356,7 @@ dependencies = [ "prost", "prost-build", "rand 0.8.5", - "sha2 0.10.2", + "sha2 0.10.6", "snow", "static_assertions", "x25519-dalek", @@ -4463,9 +4508,9 @@ dependencies = [ [[package]] name = "libsecp256k1" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0452aac8bab02242429380e9b2f94ea20cea2b37e2c1777a1358799bbe97f37" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" dependencies = [ "arrayref", "base64", @@ -4476,7 +4521,7 @@ dependencies = [ "libsecp256k1-gen-genmult", "rand 0.8.5", "serde", - "sha2 0.9.8", + "sha2 0.9.9", "typenum", ] @@ -4511,20 +4556,29 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.3" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66" +checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" dependencies = [ "cc", "pkg-config", "vcpkg", ] +[[package]] +name = "link-cplusplus" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" +dependencies = [ + "cc", +] + [[package]] name = "linked-hash-map" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linked_hash_set" @@ -4553,10 +4607,11 @@ checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" [[package]] name = "lock_api" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" dependencies = [ + "autocfg", "scopeguard", ] @@ -4572,11 +4627,11 @@ dependencies = [ [[package]] name = "lru" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c84e6fe5655adc6ce00787cf7dcaf8dc4f998a0565d23eafc207a8b08ca3349a" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" dependencies = [ - "hashbrown 0.11.2", + "hashbrown", ] [[package]] @@ -4585,7 +4640,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" dependencies = [ - "hashbrown 0.12.3", + "hashbrown", ] [[package]] @@ -4626,12 +4681,6 @@ dependencies = [ "libc", ] -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - [[package]] name = "match_cfg" version = "0.1.0" @@ -4664,9 +4713,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memfd" @@ -4679,18 +4728,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "723e3ebdcdc5c023db1df315364573789f8857c11b631a2fdfad7c00f5c046b4" -dependencies = [ - "libc", -] - -[[package]] -name = "memmap2" -version = "0.5.0" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4647a11b578fead29cdbb34d4adef8dd3dc35b876c9c6d5240d83f205abfe96e" +checksum = "95af15f345b17af2efc8ead6080fb8bc376f8cec1b35277b935637595fe77498" dependencies = [ "libc", ] @@ -4711,7 +4751,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34ac11bb793c28fa095b7554466f53b3a60a2cd002afdac01bcf135cbd73a269" dependencies = [ "hash-db", - "hashbrown 0.12.3", + "hashbrown", "parity-util-mem", ] @@ -4761,31 +4801,30 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.4.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" dependencies = [ "adler", - "autocfg", ] [[package]] name = "mio" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.36.1", + "windows-sys 0.42.0", ] [[package]] name = "mockall" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2be9a9090bc1cac2930688fa9478092a64c6a92ddc6ae0692d46b37d9cab709" +checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" dependencies = [ "cfg-if 1.0.0", "downcast", @@ -4798,9 +4837,9 @@ dependencies = [ [[package]] name = "mockall_derive" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d702a0530a0141cf4ed147cf5ec7be6f2c187d4e37fcbefc39cf34116bfe8f" +checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" dependencies = [ "cfg-if 1.0.0", "proc-macro2", @@ -4839,17 +4878,17 @@ dependencies = [ [[package]] name = "multihash" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3db354f401db558759dfc1e568d010a5d4146f4d3f637be1275ec4a3cf09689" +checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" dependencies = [ "blake2b_simd", "blake2s_simd", "blake3", "core2", - "digest 0.10.3", + "digest 0.10.5", "multihash-derive", - "sha2 0.10.2", + "sha2 0.10.6", "sha3", "unsigned-varint", ] @@ -4898,7 +4937,7 @@ dependencies = [ "matrixmultiply", "nalgebra-macros", "num-complex", - "num-rational 0.4.0", + "num-rational 0.4.1", "num-traits", "rand 0.8.5", "rand_distr", @@ -5037,13 +5076,12 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] name = "nom" -version = "7.1.0" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d11e1ef389c76fe5b81bcaf2ea32cf88b62bc494e19f493d0b30e7a930109" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" dependencies = [ "memchr", "minimal-lexical", - "version_check", ] [[package]] @@ -5076,28 +5114,28 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" dependencies = [ "num-traits", ] [[package]] name = "num-format" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bafe4179722c2894288ee77a9f044f02811c86af699344c498b0840c698a2465" +checksum = "54b862ff8df690cf089058c98b183676a7ed0f974cc08b426800093227cbff3b" dependencies = [ - "arrayvec 0.4.12", - "itoa 0.4.8", + "arrayvec 0.7.2", + "itoa", ] [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg", "num-traits", @@ -5117,9 +5155,9 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", "num-bigint 0.4.3", @@ -5139,23 +5177,14 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" dependencies = [ "hermit-abi", "libc", ] -[[package]] -name = "object" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" -dependencies = [ - "memchr", -] - [[package]] name = "object" version = "0.29.0" @@ -5163,16 +5192,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" dependencies = [ "crc32fast", - "hashbrown 0.12.3", + "hashbrown", "indexmap", "memchr", ] [[package]] name = "once_cell" -version = "1.13.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" +checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" [[package]] name = "oorandom" @@ -5194,9 +5223,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl-probe" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "orchestra" @@ -5241,14 +5270,14 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "6.0.0" +version = "6.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" +checksum = "3baf96e39c5359d2eb0dd6ccb42c62b91d9678aa68160d261b9e0ccbf9e9dea9" [[package]] name = "pallet-alliance" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "array-bytes", "frame-benchmarking", @@ -5259,7 +5288,7 @@ dependencies = [ "pallet-identity", "parity-scale-codec", "scale-info", - "sha2 0.10.2", + "sha2 0.10.6", "sp-core", "sp-io", "sp-runtime", @@ -5269,7 +5298,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support", "frame-system", @@ -5286,7 +5315,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5300,7 +5329,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support", "frame-system", @@ -5316,7 +5345,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support", "frame-system", @@ -5332,7 +5361,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support", "frame-system", @@ -5347,7 +5376,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5371,7 +5400,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5391,7 +5420,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5406,7 +5435,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "beefy-primitives", "frame-support", @@ -5422,7 +5451,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "array-bytes", "beefy-merkle-tree", @@ -5445,7 +5474,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5463,7 +5492,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5507,7 +5536,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5524,7 +5553,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "bitflags", "frame-benchmarking", @@ -5553,7 +5582,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "bitflags", "parity-scale-codec", @@ -5565,7 +5594,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "proc-macro2", "quote", @@ -5575,7 +5604,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "assert_matches", "frame-benchmarking", @@ -5592,7 +5621,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5610,7 +5639,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5634,7 +5663,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5647,7 +5676,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5665,7 +5694,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5686,7 +5715,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5701,7 +5730,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5724,7 +5753,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5740,7 +5769,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5760,7 +5789,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5777,7 +5806,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5794,7 +5823,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5812,7 +5841,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5827,7 +5856,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5843,7 +5872,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support", "frame-system", @@ -5860,7 +5889,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "1.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5880,7 +5909,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "1.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "parity-scale-codec", "sp-api", @@ -5890,7 +5919,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support", "frame-system", @@ -5907,7 +5936,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5930,7 +5959,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5947,7 +5976,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5962,7 +5991,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support", "frame-system", @@ -5976,7 +6005,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5994,7 +6023,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -6009,7 +6038,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "assert_matches", "frame-benchmarking", @@ -6027,7 +6056,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -6043,7 +6072,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support", "frame-system", @@ -6064,7 +6093,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -6080,7 +6109,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support", "frame-system", @@ -6094,7 +6123,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6117,7 +6146,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -6128,7 +6157,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "log", "sp-arithmetic", @@ -6137,7 +6166,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support", "frame-system", @@ -6166,7 +6195,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -6184,7 +6213,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -6203,7 +6232,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-support", "frame-system", @@ -6219,7 +6248,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -6234,7 +6263,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6245,7 +6274,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -6262,7 +6291,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -6277,7 +6306,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -6293,7 +6322,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -6308,7 +6337,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-benchmarking", "frame-support", @@ -6323,7 +6352,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "frame-support", "frame-system", @@ -6332,6 +6361,7 @@ dependencies = [ "scale-info", "serde", "sp-core", + "sp-io", "sp-runtime", "sp-std", "xcm", @@ -6341,7 +6371,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "frame-benchmarking", "frame-support", @@ -6370,7 +6400,7 @@ dependencies = [ name = "parachain-template-node" version = "0.1.0" dependencies = [ - "clap 4.0.17", + "clap 4.0.18", "cumulus-client-cli", "cumulus-client-consensus-aura", "cumulus-client-consensus-common", @@ -6487,6 +6517,7 @@ name = "parachains-common" version = "1.0.0" dependencies = [ "cumulus-primitives-utility", + "frame-executive", "frame-support", "frame-system", "pallet-asset-tx-payment", @@ -6496,6 +6527,7 @@ dependencies = [ "pallet-collator-selection", "parity-scale-codec", "polkadot-primitives", + "polkadot-runtime-common", "scale-info", "sp-consensus-aura", "sp-core", @@ -6504,14 +6536,15 @@ dependencies = [ "sp-std", "substrate-wasm-builder", "xcm", + "xcm-builder", "xcm-executor", ] [[package]] name = "parity-db" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bb474d0ed0836e185cb998a6b140ed1073d1fbf27d690ecf9ede8030289382c" +checksum = "2c8fdb726a43661fa54b43e7114e6b88b2289cae388eb3ad766d9d1754d83fce" dependencies = [ "blake2-rfc", "crc32fast", @@ -6520,8 +6553,8 @@ dependencies = [ "libc", "log", "lz4", - "memmap2 0.2.3", - "parking_lot 0.11.2", + "memmap2", + "parking_lot 0.12.1", "rand 0.8.5", "snap", ] @@ -6566,7 +6599,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d32c34f4f5ca7f9196001c0aba5a1f9a5a12382c8944b8b0f90233282d1e8f8" dependencies = [ "cfg-if 1.0.0", - "hashbrown 0.12.3", + "hashbrown", "impl-trait-for-tuples", "parity-util-mem-derive", "parking_lot 0.12.1", @@ -6625,7 +6658,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.1", + "parking_lot_core 0.9.4", ] [[package]] @@ -6644,22 +6677,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.1" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954" +checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0" dependencies = [ "cfg-if 1.0.0", "libc", "redox_syscall", "smallvec", - "windows-sys 0.32.0", + "windows-sys 0.42.0", ] [[package]] name = "paste" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0744126afe1a6dd7f394cb50a716dbe086cb06e255e53d8d0185d82828358fb5" +checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" [[package]] name = "pbkdf2" @@ -6752,18 +6785,19 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.1.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +checksum = "dbc7bc69c062e492337d74d59b120c274fd3d261b6bf6d3207d499b4b379c41a" dependencies = [ + "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.1.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +checksum = "60b75706b9642ebcb34dab3bc7750f811609a0eb1dd8b88c2d15bf628c1c65b2" dependencies = [ "pest", "pest_generator", @@ -6771,9 +6805,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.1.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" +checksum = "f4f9272122f5979a6511a749af9db9bfc810393f63119970d7085fed1c4ea0db" dependencies = [ "pest", "pest_meta", @@ -6784,20 +6818,20 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.1.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" +checksum = "4c8717927f9b79515e565a64fe46c38b8cd0427e64c40680b14a7365ab09ac8d" dependencies = [ - "maplit", + "once_cell", "pest", - "sha-1 0.8.2", + "sha1", ] [[package]] name = "petgraph" -version = "0.6.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" +checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" dependencies = [ "fixedbitset", "indexmap", @@ -6854,9 +6888,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.22" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12295df4f294471248581bc09bef3c38a5e46f1e36d6a37353621a0c6c357e1f" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" [[package]] name = "platforms" @@ -6866,9 +6900,9 @@ checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" [[package]] name = "plotters" -version = "0.3.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a3fd9ec30b9749ce28cd91f255d569591cdf937fe280c312143e3c4bad6f2a" +checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" dependencies = [ "num-traits", "plotters-backend", @@ -6879,15 +6913,15 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d88417318da0eaf0fdcdb51a0ee6c3bed624333bff8f946733049380be67ac1c" +checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" [[package]] name = "plotters-svg" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521fa9638fa597e1dc53e9412a4f9cefb01187ee1f7413076f9e6749e2885ba9" +checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" dependencies = [ "plotters-backend", ] @@ -6895,7 +6929,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -6910,7 +6944,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -6924,7 +6958,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "derive_more", "fatality", @@ -6947,7 +6981,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "fatality", "futures", @@ -6968,9 +7002,9 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ - "clap 4.0.17", + "clap 4.0.18", "frame-benchmarking-cli", "futures", "log", @@ -6994,7 +7028,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7035,7 +7069,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "always-assert", "bitvec", @@ -7057,7 +7091,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7070,7 +7104,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "derive_more", "fatality", @@ -7095,7 +7129,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7109,7 +7143,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "futures", "futures-timer", @@ -7129,7 +7163,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "always-assert", "async-trait", @@ -7153,7 +7187,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "futures", "parity-scale-codec", @@ -7171,7 +7205,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "bitvec", "derive_more", @@ -7200,7 +7234,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "bitvec", "futures", @@ -7220,7 +7254,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "bitvec", "fatality", @@ -7239,7 +7273,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7254,7 +7288,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "async-trait", "futures", @@ -7272,7 +7306,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7287,7 +7321,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "futures", "futures-timer", @@ -7304,7 +7338,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "fatality", "futures", @@ -7323,7 +7357,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "async-trait", "futures", @@ -7340,7 +7374,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "bitvec", "fatality", @@ -7358,7 +7392,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "always-assert", "assert_matches", @@ -7390,7 +7424,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "futures", "polkadot-node-primitives", @@ -7406,7 +7440,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "futures", "memory-lru", @@ -7422,7 +7456,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "async-std", "lazy_static", @@ -7440,7 +7474,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "bs58", "futures", @@ -7459,7 +7493,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "async-trait", "derive_more", @@ -7482,7 +7516,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "bounded-vec", "futures", @@ -7504,7 +7538,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7514,7 +7548,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "async-trait", "futures", @@ -7532,7 +7566,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "async-trait", "derive_more", @@ -7555,7 +7589,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "async-trait", "derive_more", @@ -7588,7 +7622,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "async-trait", "futures", @@ -7611,7 +7645,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "derive_more", "frame-support", @@ -7631,7 +7665,7 @@ version = "0.9.310" dependencies = [ "assert_cmd", "async-trait", - "clap 4.0.17", + "clap 4.0.18", "collectives-polkadot-runtime", "contracts-rococo-runtime", "cumulus-client-cli", @@ -7709,9 +7743,9 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ - "env_logger 0.9.0", + "env_logger", "kusama-runtime", "log", "polkadot-erasure-coding", @@ -7724,7 +7758,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "bitvec", "frame-system", @@ -7754,7 +7788,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7786,7 +7820,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "beefy-primitives", "bitvec", @@ -7875,7 +7909,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "beefy-primitives", "bitvec", @@ -7922,19 +7956,21 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "frame-support", "polkadot-primitives", "polkadot-runtime-common", "smallvec", + "sp-core", "sp-runtime", + "sp-weights", ] [[package]] name = "polkadot-runtime-metrics" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "bs58", "parity-scale-codec", @@ -7946,7 +7982,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "bitflags", "bitvec", @@ -7989,7 +8025,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "async-trait", "beefy-gadget", @@ -8094,7 +8130,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8115,7 +8151,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8125,7 +8161,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8150,7 +8186,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "beefy-primitives", "bitvec", @@ -8211,7 +8247,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "frame-benchmarking", "frame-system", @@ -8264,10 +8300,11 @@ dependencies = [ [[package]] name = "polling" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" +checksum = "ab4609a838d88b73d8238967b60dd115cc08d38e2bbaf51ee1e4b695f89122e2" dependencies = [ + "autocfg", "cfg-if 1.0.0", "libc", "log", @@ -8309,9 +8346,9 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" [[package]] name = "predicates" @@ -8329,15 +8366,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57e35a3326b75e49aa85f5dc6ec15b41108cf5aee58eabb1f274dd18b73c2451" +checksum = "da1c2388b1513e1b605fcec39a95e0a9e8ef088f71443ef37099fa9ae6673fcb" [[package]] name = "predicates-tree" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "338c7be2905b732ae3984a2f40032b5e94fd8f52505b186c7d4d68d193445df7" +checksum = "4d86de6de25020a36c6d3643a86d9a6a9f552107c0559c60ea03551b5e16c032" dependencies = [ "predicates-core", "termtree", @@ -8345,9 +8382,9 @@ dependencies = [ [[package]] name = "primitive-types" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cfd65aea0c5fa0bfcc7c9e7ca828c921ef778f43d325325ec84bda371bfa75a" +checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" dependencies = [ "fixed-hash", "impl-codec", @@ -8418,15 +8455,15 @@ dependencies = [ [[package]] name = "prometheus" -version = "0.13.0" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f64969ffd5dd8f39bd57a68ac53c163a095ed9d0fb707146da1b27025a3504" +checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" dependencies = [ "cfg-if 1.0.0", "fnv", "lazy_static", "memchr", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "thiserror", ] @@ -8437,7 +8474,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" dependencies = [ "dtoa", - "itoa 1.0.1", + "itoa", "parking_lot 0.12.1", "prometheus-client-derive-text-encode", ] @@ -8521,9 +8558,9 @@ dependencies = [ [[package]] name = "psm" -version = "0.1.16" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd136ff4382c4753fc061cb9e4712ab2af263376b95bbd5bd8cd50c020b78e69" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" dependencies = [ "cc", ] @@ -8534,12 +8571,6 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -[[package]] -name = "quick-error" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" - [[package]] name = "quicksink" version = "0.1.2" @@ -8588,7 +8619,7 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha 0.3.1", - "rand_core 0.6.3", + "rand_core 0.6.4", ] [[package]] @@ -8608,7 +8639,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.3", + "rand_core 0.6.4", ] [[package]] @@ -8622,18 +8653,18 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.3", + "getrandom 0.2.8", ] [[package]] name = "rand_distr" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964d548f8e7d12e102ef183a0de7e98180c9f8729f555897a857b96e48122d2f" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" dependencies = [ "num-traits", "rand 0.8.5", @@ -8663,7 +8694,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" dependencies = [ - "rand_core 0.6.3", + "rand_core 0.6.4", ] [[package]] @@ -8674,9 +8705,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" +checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" dependencies = [ "autocfg", "crossbeam-deque", @@ -8686,34 +8717,34 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.9.1" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" +checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" dependencies = [ "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "lazy_static", "num_cpus", ] [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] [[package]] name = "redox_users" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.3", + "getrandom 0.2.8", "redox_syscall", + "thiserror", ] [[package]] @@ -8731,18 +8762,18 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.6" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300f2a835d808734ee295d45007adacb9ebb29dd3ae2424acfa17930cae541da" +checksum = "53b15debb4f9d60d767cd8ca9ef7abb2452922f3214671ff052defc7f3502c44" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.6" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c38e3aecd2b21cb3959637b883bb3714bc7e43f0268b9a29d3743ee3e55cdd2" +checksum = "abfa8511e9e94fd3de6585a3d3cd00e01ed556dc9814829280af0e8dc72a8f36" dependencies = [ "proc-macro2", "quote", @@ -8763,9 +8794,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.5.5" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" dependencies = [ "aho-corasick", "memchr", @@ -8783,16 +8814,16 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.6.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ - "env_logger 0.9.0", + "env_logger", "log", "parity-scale-codec", "serde", @@ -8820,7 +8851,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" dependencies = [ "hostname", - "quick-error 1.2.3", + "quick-error", ] [[package]] @@ -8909,7 +8940,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -8993,20 +9024,22 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "frame-support", "polkadot-primitives", "polkadot-runtime-common", "smallvec", + "sp-core", "sp-runtime", + "sp-weights", ] [[package]] name = "rpassword" -version = "7.0.0" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b763cb66df1c928432cc35053f8bd4cec3335d8559fc16010017d16b3c1680" +checksum = "20c9f5d2a0c3e2ea729ab3706d22217177770654c3ef5056b68b69d07332d3f5" dependencies = [ "libc", "winapi", @@ -9060,14 +9093,14 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.4", + "semver 1.0.14", ] [[package]] name = "rustix" -version = "0.35.9" +version = "0.35.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c825b8aa8010eb9ee99b75f05e10180b9278d161583034d7574c9d617aeada" +checksum = "985947f9b6423159c4726323f373be0a21bdb514c5af06a849cb3d2dce2d01e8" dependencies = [ "bitflags", "errno", @@ -9079,9 +9112,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.2" +version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d37e5e2290f3e040b594b1a9e04377c2c671f1a1cfd9bfdef82106ac1c113f84" +checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c" dependencies = [ "log", "ring", @@ -9091,9 +9124,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca9ebdfa27d3fc180e42879037b5338ab1c040c06affd00d8338598e7800943" +checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" dependencies = [ "openssl-probe", "rustls-pemfile", @@ -9103,18 +9136,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "0.2.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9" +checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" dependencies = [ "base64", ] [[package]] name = "rustversion" -version = "1.0.5" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088" +checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" [[package]] name = "rw-stream-sink" @@ -9129,9 +9162,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.6" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c9613b5a66ab9ba26415184cfc41156594925a9cf3a2057e57f31ff145f6568" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" [[package]] name = "safe-mix" @@ -9154,7 +9187,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "log", "sp-core", @@ -9165,7 +9198,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "futures", @@ -9192,7 +9225,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "futures", "futures-timer", @@ -9215,7 +9248,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -9231,10 +9264,10 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "impl-trait-for-tuples", - "memmap2 0.5.0", + "memmap2", "parity-scale-codec", "sc-chain-spec-derive", "sc-network-common", @@ -9248,7 +9281,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9259,11 +9292,11 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "array-bytes", "chrono", - "clap 4.0.17", + "clap 4.0.18", "fdlimit", "futures", "libp2p", @@ -9299,7 +9332,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "fnv", "futures", @@ -9327,7 +9360,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "hash-db", "kvdb", @@ -9352,7 +9385,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "futures", @@ -9376,7 +9409,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "futures", @@ -9405,7 +9438,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "fork-tree", @@ -9447,7 +9480,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "futures", "jsonrpsee", @@ -9469,7 +9502,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9482,7 +9515,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "futures", @@ -9506,10 +9539,10 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "lazy_static", - "lru 0.7.7", + "lru 0.7.8", "parity-scale-codec", "parking_lot 0.12.1", "sc-executor-common", @@ -9533,7 +9566,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "environmental", "parity-scale-codec", @@ -9549,7 +9582,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "log", "parity-scale-codec", @@ -9564,7 +9597,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "cfg-if 1.0.0", "libc", @@ -9584,7 +9617,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "ahash", "array-bytes", @@ -9625,7 +9658,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "finality-grandpa", "futures", @@ -9646,7 +9679,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "ansi_term", "futures", @@ -9663,7 +9696,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "array-bytes", "async-trait", @@ -9678,7 +9711,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "array-bytes", "async-trait", @@ -9696,7 +9729,7 @@ dependencies = [ "linked-hash-map", "linked_hash_set", "log", - "lru 0.7.7", + "lru 0.7.8", "parity-scale-codec", "parking_lot 0.12.1", "pin-project", @@ -9725,7 +9758,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "cid", "futures", @@ -9745,7 +9778,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "bitflags", @@ -9771,14 +9804,14 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "ahash", "futures", "futures-timer", "libp2p", "log", - "lru 0.7.7", + "lru 0.7.8", "sc-network-common", "sc-peerset", "sp-runtime", @@ -9789,7 +9822,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "array-bytes", "futures", @@ -9810,14 +9843,14 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "array-bytes", "fork-tree", "futures", "libp2p", "log", - "lru 0.7.7", + "lru 0.7.8", "mockall", "parity-scale-codec", "prost", @@ -9840,7 +9873,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "array-bytes", "futures", @@ -9859,7 +9892,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "array-bytes", "bytes", @@ -9889,7 +9922,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "futures", "libp2p", @@ -9902,7 +9935,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -9911,7 +9944,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "futures", "hash-db", @@ -9941,7 +9974,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "futures", "jsonrpsee", @@ -9964,7 +9997,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "futures", "jsonrpsee", @@ -9977,7 +10010,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "futures", "hex", @@ -9996,7 +10029,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "directories", @@ -10067,7 +10100,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "log", "parity-scale-codec", @@ -10081,7 +10114,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10100,7 +10133,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "futures", "libc", @@ -10119,7 +10152,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "chrono", "futures", @@ -10137,7 +10170,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "ansi_term", "atty", @@ -10168,7 +10201,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10179,7 +10212,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "futures", @@ -10206,7 +10239,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "futures", @@ -10220,7 +10253,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "futures", "futures-timer", @@ -10232,9 +10265,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "333af15b02563b8182cd863f925bd31ef8fa86a0e095d30c091956057d436153" +checksum = "88d8a765117b237ef233705cc2cc4c6a27fccd46eea6ef0c8c6dae5f3ef407f8" dependencies = [ "bitvec", "cfg-if 1.0.0", @@ -10246,9 +10279,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53f56acbd0743d29ffa08f911ab5397def774ad01bab3786804cf6ee057fb5e1" +checksum = "cdcd47b380d8c4541044e341dcd9475f55ba37ddc50c908d945fc036a8642496" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -10258,12 +10291,12 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" dependencies = [ "lazy_static", - "winapi", + "windows-sys 0.36.1", ] [[package]] @@ -10290,6 +10323,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "scratch" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" + [[package]] name = "sct" version = "0.7.0" @@ -10307,7 +10346,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08da66b8b0965a5555b6bd6639e68ccba85e1e2506f5fbb089e93f8a04e1a2d1" dependencies = [ "der", - "generic-array 0.14.4", + "generic-array 0.14.6", "pkcs8", "subtle", "zeroize", @@ -10315,18 +10354,18 @@ dependencies = [ [[package]] name = "secp256k1" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7649a0b3ffb32636e60c7ce0d70511eda9c52c658cd0634e194d5a19943aeff" +checksum = "ff55dc09d460954e9ef2fa8a7ced735a964be9981fd50e870b2b3b0705e14964" dependencies = [ "secp256k1-sys", ] [[package]] name = "secp256k1-sys" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7058dc8eaf3f2810d7828680320acda0b25a288f6d288e19278e249bbf74226b" +checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" dependencies = [ "cc", ] @@ -10342,9 +10381,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.4.2" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525bc1abfda2e1998d152c45cf13e696f76d0a4972310b22fac1658b05df7c87" +checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" dependencies = [ "bitflags", "core-foundation", @@ -10355,9 +10394,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.4.2" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9dd14d83160b528b7bfd66439110573efcfbe281b17fc2ca9f39f550d619c7e" +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" dependencies = [ "core-foundation-sys", "libc", @@ -10412,9 +10451,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.4" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" +checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" dependencies = [ "serde", ] @@ -10427,18 +10466,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.145" +version = "1.0.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" +checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.145" +version = "1.0.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" +checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" dependencies = [ "proc-macro2", "quote", @@ -10447,11 +10486,11 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.85" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" +checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" dependencies = [ - "itoa 1.0.1", + "itoa", "ryu", "serde", ] @@ -10465,18 +10504,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha-1" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" -dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug 0.2.3", -] - [[package]] name = "sha-1" version = "0.9.8" @@ -10490,6 +10517,17 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "sha1" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.5", +] + [[package]] name = "sha2" version = "0.8.2" @@ -10504,9 +10542,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", "cfg-if 1.0.0", @@ -10517,22 +10555,22 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.2" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if 1.0.0", "cpufeatures", - "digest 0.10.3", + "digest 0.10.5", ] [[package]] name = "sha3" -version = "0.10.0" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f935e31cf406e8c0e96c2815a5516181b7004ae8c5f296293221e9b1e356bd" +checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" dependencies = [ - "digest 0.10.3", + "digest 0.10.5", "keccak", ] @@ -10584,9 +10622,9 @@ checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" [[package]] name = "signal-hook" -version = "0.3.10" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c98891d737e271a2954825ef19e46bd16bdb98e2746f2eec4f7a4ef7946efd1" +checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" dependencies = [ "libc", "signal-hook-registry", @@ -10608,7 +10646,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02658e48d89f2bec991f9a78e69cfa4c316f8d6a6c4ec12fae1aeb263d486788" dependencies = [ "digest 0.9.0", - "rand_core 0.6.3", + "rand_core 0.6.4", ] [[package]] @@ -10625,9 +10663,12 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] [[package]] name = "slice-group-by" @@ -10638,7 +10679,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "enumn", "parity-scale-codec", @@ -10678,18 +10719,18 @@ dependencies = [ "blake2", "chacha20poly1305", "curve25519-dalek 4.0.0-pre.1", - "rand_core 0.6.3", + "rand_core 0.6.4", "ring", "rustc_version 0.4.0", - "sha2 0.10.2", + "sha2 0.10.6", "subtle", ] [[package]] name = "socket2" -version = "0.4.4" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" dependencies = [ "libc", "winapi", @@ -10708,13 +10749,13 @@ dependencies = [ "httparse", "log", "rand 0.8.5", - "sha-1 0.9.8", + "sha-1", ] [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "hash-db", "log", @@ -10732,7 +10773,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "blake2", "proc-macro-crate", @@ -10744,7 +10785,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "parity-scale-codec", "scale-info", @@ -10757,7 +10798,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "integer-sqrt", "num-traits", @@ -10772,7 +10813,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "parity-scale-codec", "scale-info", @@ -10785,7 +10826,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "parity-scale-codec", @@ -10797,7 +10838,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "parity-scale-codec", "sp-api", @@ -10809,11 +10850,11 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "futures", "log", - "lru 0.7.7", + "lru 0.7.8", "parity-scale-codec", "parking_lot 0.12.1", "sp-api", @@ -10827,7 +10868,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "futures", @@ -10846,7 +10887,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "parity-scale-codec", @@ -10864,7 +10905,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "merlin", @@ -10887,7 +10928,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "parity-scale-codec", "scale-info", @@ -10901,7 +10942,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "parity-scale-codec", "scale-info", @@ -10914,7 +10955,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "array-bytes", "base58", @@ -10960,12 +11001,12 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "blake2", "byteorder", - "digest 0.10.3", - "sha2 0.10.2", + "digest 0.10.5", + "sha2 0.10.6", "sha3", "sp-std", "twox-hash", @@ -10974,7 +11015,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "proc-macro2", "quote", @@ -10985,7 +11026,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -10994,7 +11035,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "proc-macro2", "quote", @@ -11004,7 +11045,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "environmental", "parity-scale-codec", @@ -11015,7 +11056,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "finality-grandpa", "log", @@ -11033,7 +11074,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11047,7 +11088,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "bytes", "futures", @@ -11073,7 +11114,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "lazy_static", "sp-core", @@ -11084,7 +11125,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "futures", @@ -11101,7 +11142,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "thiserror", "zstd", @@ -11110,7 +11151,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "log", "parity-scale-codec", @@ -11126,7 +11167,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "parity-scale-codec", "scale-info", @@ -11140,7 +11181,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "sp-api", "sp-core", @@ -11150,7 +11191,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "backtrace", "lazy_static", @@ -11160,7 +11201,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "rustc-hash", "serde", @@ -11170,7 +11211,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "either", "hash256-std-hasher", @@ -11193,7 +11234,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11211,7 +11252,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "Inflector", "proc-macro-crate", @@ -11223,7 +11264,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "log", "parity-scale-codec", @@ -11237,7 +11278,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "serde", "serde_json", @@ -11246,7 +11287,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "parity-scale-codec", "scale-info", @@ -11260,7 +11301,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "parity-scale-codec", "scale-info", @@ -11271,7 +11312,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "hash-db", "log", @@ -11293,12 +11334,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11311,7 +11352,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "log", "sp-core", @@ -11324,7 +11365,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "futures-timer", @@ -11340,7 +11381,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "parity-scale-codec", "sp-std", @@ -11352,7 +11393,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "sp-api", "sp-runtime", @@ -11361,7 +11402,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "log", @@ -11377,13 +11418,13 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "ahash", "hash-db", - "hashbrown 0.12.3", + "hashbrown", "lazy_static", - "lru 0.7.7", + "lru 0.7.8", "memory-db", "nohash-hasher", "parity-scale-codec", @@ -11400,7 +11441,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11417,7 +11458,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -11428,7 +11469,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "impl-trait-for-tuples", "log", @@ -11441,7 +11482,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11472,9 +11513,9 @@ dependencies = [ [[package]] name = "ss58-registry" -version = "1.29.0" +version = "1.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0837b5d62f42082c9d56cd946495ae273a3c68083b637b9153341d5e465146d" +checksum = "3ab7554f8a8b6f8d71cd5a8e6536ef116e2ce0504cf97ebf16311d58065dc8a6" dependencies = [ "Inflector", "num-format", @@ -11710,9 +11751,9 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.24.0" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6878079b17446e4d3eba6192bb0a2950d5b14f0ed8424b852310e5a94345d0ef" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck", "proc-macro2", @@ -11730,14 +11771,14 @@ dependencies = [ "hmac 0.11.0", "pbkdf2 0.8.0", "schnorrkel", - "sha2 0.9.8", + "sha2 0.9.9", "zeroize", ] [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "platforms", ] @@ -11745,7 +11786,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11766,7 +11807,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "futures-util", "hyper", @@ -11779,7 +11820,7 @@ dependencies = [ [[package]] name = "substrate-rpc-client" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "async-trait", "jsonrpsee", @@ -11792,7 +11833,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "jsonrpsee", "log", @@ -11813,7 +11854,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "array-bytes", "async-trait", @@ -11839,7 +11880,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "futures", "substrate-test-utils-derive", @@ -11849,7 +11890,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -11860,7 +11901,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ "ansi_term", "build-helper", @@ -11882,9 +11923,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.102" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1" +checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" dependencies = [ "proc-macro2", "quote", @@ -11932,9 +11973,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.2" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9bffcddbc2458fa3e6058414599e3c838a022abae82e5c67b4f7f80298d5bff" +checksum = "c02424087780c9b71cc96799eaeddff35af2bc513278cda5c99fc1f5d026d3c1" [[package]] name = "tempfile" @@ -11952,36 +11993,38 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" dependencies = [ "winapi-util", ] [[package]] name = "termtree" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" +checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b" [[package]] name = "test-runtime-constants" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "frame-support", "polkadot-primitives", "polkadot-runtime-common", "smallvec", + "sp-core", "sp-runtime", + "sp-weights", ] [[package]] name = "textwrap" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" @@ -12074,7 +12117,7 @@ dependencies = [ "pbkdf2 0.4.0", "rand 0.7.3", "rustc-hash", - "sha2 0.9.8", + "sha2 0.9.9", "thiserror", "unicode-normalization", "wasm-bindgen", @@ -12093,9 +12136,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] @@ -12128,9 +12171,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" dependencies = [ "proc-macro2", "quote", @@ -12139,9 +12182,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.2" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27d5f2b839802bd8267fa19b0530f5a08b9c08cd417976be2a65d130fe1c11b" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ "rustls", "tokio", @@ -12150,34 +12193,20 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9" -dependencies = [ - "futures-core", - "pin-project-lite 0.2.9", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.6.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" +checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" dependencies = [ - "bytes", "futures-core", - "futures-sink", - "log", "pin-project-lite 0.2.9", "tokio", ] [[package]] name = "tokio-util" -version = "0.7.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" +checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" dependencies = [ "bytes", "futures-core", @@ -12185,6 +12214,7 @@ dependencies = [ "futures-sink", "pin-project-lite 0.2.9", "tokio", + "tracing", ] [[package]] @@ -12198,9 +12228,9 @@ dependencies = [ [[package]] name = "tower-service" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" @@ -12248,7 +12278,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12259,7 +12289,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -12281,9 +12311,9 @@ dependencies = [ [[package]] name = "tracing-serde" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb65ea441fbb84f9f6748fd496cf7f63ec9af5bca94dd86456978d055e8eb28b" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" dependencies = [ "serde", "tracing-core", @@ -12319,7 +12349,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "004e1e8f92535694b4cb1444dc5a8073ecf0815e3357f729638b9f8fc4062908" dependencies = [ "hash-db", - "hashbrown 0.12.3", + "hashbrown", "log", "rustc-hex", "smallvec", @@ -12386,9 +12416,9 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#49734dd1d72a00b9d3b87ba397661a63e0e17af3" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.31#7a4e5163091384c4c10b6d76f5cb80dac0834f38" dependencies = [ - "clap 4.0.17", + "clap 4.0.18", "frame-try-runtime", "log", "parity-scale-codec", @@ -12423,28 +12453,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if 1.0.0", - "digest 0.10.3", + "digest 0.10.5", "rand 0.8.5", "static_assertions", ] [[package]] name = "typenum" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" [[package]] name = "ucd-trie" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" +checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" [[package]] name = "uint" -version = "0.9.1" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6470ab50f482bde894a037a57064480a246dbfdd5960bd65a44824693f08da5f" +checksum = "a45526d29728d135c2900b0d30573fe3ee79fceb12ef534c7bb30e810a91b601" dependencies = [ "byteorder", "crunchy", @@ -12463,36 +12493,36 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-ident" -version = "1.0.0" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" +checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" [[package]] name = "unicode-normalization" -version = "0.1.19" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] [[package]] name = "unicode-width" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "unicode-xid" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "universal-hash" @@ -12500,7 +12530,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" dependencies = [ - "generic-array 0.14.4", + "generic-array 0.14.6", "subtle", ] @@ -12557,9 +12587,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "void" @@ -12623,9 +12653,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.78" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -12633,13 +12663,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.78" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", "syn", @@ -12648,9 +12678,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.28" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39" +checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -12660,9 +12690,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.78" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -12670,9 +12700,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.78" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", @@ -12683,9 +12713,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.78" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "wasm-gc-api" @@ -12724,9 +12754,9 @@ dependencies = [ [[package]] name = "wasmi" -version = "0.13.0" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc13b3c219ca9aafeec59150d80d89851df02e0061bc357b4d66fc55a8d38787" +checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422" dependencies = [ "parity-wasm 0.45.0", "wasmi-validation", @@ -12744,14 +12774,14 @@ dependencies = [ [[package]] name = "wasmi_core" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a088e8c4c59c6f2b9eae169bf86328adccc477c00b56d3661e3e9fb397b184" +checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" dependencies = [ "downcast-rs", "libm", "memory_units", - "num-rational 0.4.0", + "num-rational 0.4.1", "num-traits", ] @@ -12766,9 +12796,9 @@ dependencies = [ [[package]] name = "wasmtime" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a10dc9784d8c3a33c970e3939180424955f08af2e7f20368ec02685a0e8f065" +checksum = "f1f511c4917c83d04da68333921107db75747c4e11a2f654a8e909cc5e0520dc" dependencies = [ "anyhow", "bincode", @@ -12776,7 +12806,7 @@ dependencies = [ "indexmap", "libc", "log", - "object 0.29.0", + "object", "once_cell", "paste", "psm", @@ -12794,18 +12824,18 @@ dependencies = [ [[package]] name = "wasmtime-asm-macros" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4dbdc6daf68528cad1275ac91e3f51848ce9824385facc94c759f529decdf8" +checksum = "39bf3debfe744bf19dd3732990ce6f8c0ced7439e2370ba4e1d8f5a3660a3178" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "wasmtime-cache" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f507f3fa1ee1b2f9a83644e2514242b1dfe580782c0eb042f1ef70255bc4ffe" +checksum = "ece42fa4676a263f7558cdaaf5a71c2592bebcbac22a0580e33cf3406c103da2" dependencies = [ "anyhow", "base64", @@ -12815,7 +12845,7 @@ dependencies = [ "log", "rustix", "serde", - "sha2 0.9.8", + "sha2 0.9.9", "toml", "windows-sys 0.36.1", "zstd", @@ -12823,9 +12853,9 @@ dependencies = [ [[package]] name = "wasmtime-cranelift" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f03cf79d982fc68e94ba0bea6a300a3b94621c4eb9705eece0a4f06b235a3b5" +checksum = "058217e28644b012bdcdf0e445f58d496d78c2e0b6a6dd93558e701591dad705" dependencies = [ "anyhow", "cranelift-codegen", @@ -12835,7 +12865,7 @@ dependencies = [ "cranelift-wasm", "gimli", "log", - "object 0.29.0", + "object", "target-lexicon", "thiserror", "wasmparser", @@ -12844,16 +12874,16 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c587c62e91c5499df62012b87b88890d0eb470b2ffecc5964e9da967b70c77c" +checksum = "c7af06848df28b7661471d9a80d30a973e0f401f2e3ed5396ad7e225ed217047" dependencies = [ "anyhow", "cranelift-entity", "gimli", "indexmap", "log", - "object 0.29.0", + "object", "serde", "target-lexicon", "thiserror", @@ -12863,9 +12893,9 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "047839b5dabeae5424a078c19b8cc897e5943a7fadc69e3d888b9c9a897666b3" +checksum = "9028fb63a54185b3c192b7500ef8039c7bb8d7f62bfc9e7c258483a33a3d13bb" dependencies = [ "addr2line", "anyhow", @@ -12874,7 +12904,7 @@ dependencies = [ "cpp_demangle", "gimli", "log", - "object 0.29.0", + "object", "rustc-demangle", "rustix", "serde", @@ -12888,20 +12918,20 @@ dependencies = [ [[package]] name = "wasmtime-jit-debug" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b299569abf6f99b7b8e020afaf84a700e8636c6a42e242069267322cd5818235" +checksum = "25e82d4ef93296785de7efca92f7679dc67fe68a13b625a5ecc8d7503b377a37" dependencies = [ - "object 0.29.0", + "object", "once_cell", "rustix", ] [[package]] name = "wasmtime-runtime" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae79e0515160bd5abee5df50a16c4eb8db9f71b530fc988ae1d9ce34dcb8dd01" +checksum = "9f0e9bea7d517d114fe66b930b2124ee086516ee93eeebfd97f75f366c5b0553" dependencies = [ "anyhow", "cc", @@ -12924,9 +12954,9 @@ dependencies = [ [[package]] name = "wasmtime-types" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790cf43ee8e2d5dad1780af30f00d7a972b74725fb1e4f90c28d62733819b185" +checksum = "69b83e93ed41b8fdc936244cfd5e455480cf1eca1fd60c78a0040038b4ce5075" dependencies = [ "cranelift-entity", "serde", @@ -12936,9 +12966,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.55" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" dependencies = [ "js-sys", "wasm-bindgen", @@ -12956,9 +12986,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.22.2" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552ceb903e957524388c4d3475725ff2c8b7960922063af6ce53c9a43da07449" +checksum = "368bfe657969fb01238bb756d351dcade285e0f6fcbd36dcb23359a5169975be" dependencies = [ "webpki", ] @@ -12975,7 +13005,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "beefy-primitives", "bitvec", @@ -13065,13 +13095,15 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "frame-support", "polkadot-primitives", "polkadot-runtime-common", "smallvec", + "sp-core", "sp-runtime", + "sp-weights", ] [[package]] @@ -13141,13 +13173,13 @@ dependencies = [ [[package]] name = "which" -version = "4.2.2" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea187a8ef279bc014ec368c27a920da2024d2a711109bfbe3440585d5cf27ad9" +checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" dependencies = [ "either", - "lazy_static", "libc", + "once_cell", ] [[package]] @@ -13200,19 +13232,6 @@ dependencies = [ "windows_x86_64_msvc 0.34.0", ] -[[package]] -name = "windows-sys" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6" -dependencies = [ - "windows_aarch64_msvc 0.32.0", - "windows_i686_gnu 0.32.0", - "windows_i686_msvc 0.32.0", - "windows_x86_64_gnu 0.32.0", - "windows_x86_64_msvc 0.32.0", -] - [[package]] name = "windows-sys" version = "0.36.1" @@ -13227,10 +13246,25 @@ dependencies = [ ] [[package]] -name = "windows_aarch64_msvc" -version = "0.32.0" +name = "windows-sys" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.0", + "windows_i686_gnu 0.42.0", + "windows_i686_msvc 0.42.0", + "windows_x86_64_gnu 0.42.0", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" [[package]] name = "windows_aarch64_msvc" @@ -13245,10 +13279,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] -name = "windows_i686_gnu" -version = "0.32.0" +name = "windows_aarch64_msvc" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" +checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" [[package]] name = "windows_i686_gnu" @@ -13263,10 +13297,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] -name = "windows_i686_msvc" -version = "0.32.0" +name = "windows_i686_gnu" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" +checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" [[package]] name = "windows_i686_msvc" @@ -13281,10 +13315,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] -name = "windows_x86_64_gnu" -version = "0.32.0" +name = "windows_i686_msvc" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" +checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" [[package]] name = "windows_x86_64_gnu" @@ -13299,10 +13333,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] -name = "windows_x86_64_msvc" -version = "0.32.0" +name = "windows_x86_64_gnu" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" +checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" [[package]] name = "windows_x86_64_msvc" @@ -13316,6 +13356,12 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" + [[package]] name = "winreg" version = "0.7.0" @@ -13348,13 +13394,15 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "derivative", "impl-trait-for-tuples", "log", "parity-scale-codec", "scale-info", + "serde", + "sp-io", "sp-runtime", "xcm-procedural", ] @@ -13362,10 +13410,11 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "frame-support", "frame-system", + "impl-trait-for-tuples", "log", "pallet-transaction-payment", "parity-scale-codec", @@ -13382,7 +13431,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "frame-benchmarking", "frame-support", @@ -13400,7 +13449,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.31" -source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.31#50c541c3efc0eb74a1ccfc01e1702fea3addeb2b" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" dependencies = [ "Inflector", "proc-macro2", @@ -13410,9 +13459,9 @@ dependencies = [ [[package]] name = "yamux" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0608f53c1dc0bad505d03a34bbd49fbf2ad7b51eb036123e896365532745a1" +checksum = "e5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5" dependencies = [ "futures", "log", @@ -13424,9 +13473,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.4.3" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d68d9dcec5f9b43a30d38c49f91dfedfaac384cb8f085faca366c26207dd1619" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" dependencies = [ "zeroize_derive", ] diff --git a/client/collator/Cargo.toml b/client/collator/Cargo.toml index 291a293c47e..038cbda7b9b 100644 --- a/client/collator/Cargo.toml +++ b/client/collator/Cargo.toml @@ -18,10 +18,10 @@ sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot- sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-node-subsystem = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-node-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-node-subsystem = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-overseer = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-client-consensus-common = { path = "../consensus/common" } @@ -37,7 +37,7 @@ sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = " sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-node-subsystem-test-helpers = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-node-subsystem-test-helpers = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-test-client = { path = "../../test/client" } diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index dcf105630df..cda8c9c23c6 100644 --- a/client/consensus/common/Cargo.toml +++ b/client/consensus/common/Cargo.toml @@ -21,7 +21,7 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkad sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-relay-chain-interface = { path = "../../relay-chain-interface" } diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index a37c8874f03..8c92b18546e 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -22,9 +22,9 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkad sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-node-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-relay-chain-interface = { path = "../relay-chain-interface" } @@ -44,9 +44,9 @@ sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polka substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-test-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-client = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-test-client = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core" } diff --git a/client/pov-recovery/Cargo.toml b/client/pov-recovery/Cargo.toml index b61cecfe416..33a32fef474 100644 --- a/client/pov-recovery/Cargo.toml +++ b/client/pov-recovery/Cargo.toml @@ -20,10 +20,10 @@ sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", br sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-node-subsystem = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-node-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-node-subsystem = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-overseer = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core" } diff --git a/client/relay-chain-inprocess-interface/Cargo.toml b/client/relay-chain-inprocess-interface/Cargo.toml index a7def2bc322..5499590ffbd 100644 --- a/client/relay-chain-inprocess-interface/Cargo.toml +++ b/client/relay-chain-inprocess-interface/Cargo.toml @@ -22,9 +22,9 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkad sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-cli = { git = "https://github.com/paritytech/polkadot", default-features = false, features = ["cli"] , branch = "release-v0.9.31" } -polkadot-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-cli = { git = "https://github.com/arturgontijo/polkadot", default-features = false, features = ["cli"] , branch = "trappist-xcm-v3-0931" } +polkadot-client = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core" } @@ -36,8 +36,8 @@ cumulus-relay-chain-interface = { path = "../relay-chain-interface" } sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-test-client = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-test-client = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } metered = { package = "prioritized-metered-channel", version = "0.2.0" } # Cumulus diff --git a/client/relay-chain-interface/Cargo.toml b/client/relay-chain-interface/Cargo.toml index 860b2cd327b..4d5d72966db 100644 --- a/client/relay-chain-interface/Cargo.toml +++ b/client/relay-chain-interface/Cargo.toml @@ -5,8 +5,8 @@ version = "0.1.0" edition = "2021" [dependencies] -polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-overseer = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } cumulus-primitives-core = { path = "../../primitives/core" } diff --git a/client/relay-chain-minimal-node/Cargo.toml b/client/relay-chain-minimal-node/Cargo.toml index dbaaec8233a..0ac96cfdd9d 100644 --- a/client/relay-chain-minimal-node/Cargo.toml +++ b/client/relay-chain-minimal-node/Cargo.toml @@ -6,15 +6,15 @@ edition = "2021" [dependencies] # polkadot deps -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-node-subsystem-util = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-node-network-protocol = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-network-bridge = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-node-core-av-store = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-availability-distribution = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-core-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-overseer = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-node-subsystem-util = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-node-network-protocol = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-network-bridge = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-node-core-av-store = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-availability-distribution = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } # substrate deps sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } diff --git a/client/relay-chain-rpc-interface/Cargo.toml b/client/relay-chain-rpc-interface/Cargo.toml index fb06ea97cdc..67fc4efbb59 100644 --- a/client/relay-chain-rpc-interface/Cargo.toml +++ b/client/relay-chain-rpc-interface/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } cumulus-primitives-core = { path = "../../primitives/core" } cumulus-relay-chain-interface = { path = "../relay-chain-interface" } diff --git a/client/service/Cargo.toml b/client/service/Cargo.toml index 2d87540c222..0c6bedaa4a1 100644 --- a/client/service/Cargo.toml +++ b/client/service/Cargo.toml @@ -18,7 +18,7 @@ sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot- sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-client-cli = { path = "../cli" } diff --git a/pallets/dmp-queue/Cargo.toml b/pallets/dmp-queue/Cargo.toml index af67db94d5d..67ac7e14f02 100644 --- a/pallets/dmp-queue/Cargo.toml +++ b/pallets/dmp-queue/Cargo.toml @@ -17,7 +17,7 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", default-features sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core", default-features = false } diff --git a/pallets/parachain-system/Cargo.toml b/pallets/parachain-system/Cargo.toml index 9e6bd91b917..b3bba4a2889 100644 --- a/pallets/parachain-system/Cargo.toml +++ b/pallets/parachain-system/Cargo.toml @@ -27,7 +27,7 @@ sp-trie = { git = "https://github.com/paritytech/substrate", default-features = sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, features = [ "wasm-api" ], branch = "release-v0.9.31" } +polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, features = [ "wasm-api" ], branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-pallet-parachain-system-proc-macro = { path = "proc-macro", default-features = false } diff --git a/pallets/solo-to-para/Cargo.toml b/pallets/solo-to-para/Cargo.toml index 61abdc8a15f..6eab3b3f472 100644 --- a/pallets/solo-to-para/Cargo.toml +++ b/pallets/solo-to-para/Cargo.toml @@ -17,7 +17,7 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", default-features sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-pallet-parachain-system = { default-features = false, path = "../parachain-system" } diff --git a/pallets/xcm/Cargo.toml b/pallets/xcm/Cargo.toml index 0070f6ea6db..0dd9655178f 100644 --- a/pallets/xcm/Cargo.toml +++ b/pallets/xcm/Cargo.toml @@ -14,7 +14,7 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", default-features frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } cumulus-primitives-core = { path = "../../primitives/core", default-features = false } diff --git a/pallets/xcmp-queue/Cargo.toml b/pallets/xcmp-queue/Cargo.toml index 83eb56854eb..341f3e33fa5 100644 --- a/pallets/xcmp-queue/Cargo.toml +++ b/pallets/xcmp-queue/Cargo.toml @@ -18,9 +18,9 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", default-features sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core", default-features = false } @@ -36,7 +36,7 @@ sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0 pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +xcm-builder = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-pallet-parachain-system = { path = "../parachain-system" } diff --git a/parachain-template/node/Cargo.toml b/parachain-template/node/Cargo.toml index 5757bcecf6f..23f56a24420 100644 --- a/parachain-template/node/Cargo.toml +++ b/parachain-template/node/Cargo.toml @@ -54,10 +54,10 @@ substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-cli = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-client-cli = { path = "../../client/cli" } diff --git a/parachain-template/runtime/Cargo.toml b/parachain-template/runtime/Cargo.toml index e4ad07c0997..dc7afd065fa 100644 --- a/parachain-template/runtime/Cargo.toml +++ b/parachain-template/runtime/Cargo.toml @@ -53,12 +53,12 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-pallet-aura-ext = { path = "../../pallets/aura-ext", default-features = false } diff --git a/parachains/common/Cargo.toml b/parachains/common/Cargo.toml index beee138420e..b40f99dba36 100644 --- a/parachains/common/Cargo.toml +++ b/parachains/common/Cargo.toml @@ -13,6 +13,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", features = ["derive scale-info = { version = "2.2.0", default-features = false, features = ["derive"] } # Substrate +frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } frame-support = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } frame-system = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } @@ -26,9 +27,11 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", default-features sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus pallet-collator-selection = { path = "../../pallets/collator-selection", default-features = false } @@ -44,6 +47,9 @@ substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", bran [features] default = ["std"] std = [ + "codec/std", + "scale-info/std", + "frame-executive/std", "frame-support/std", "frame-system/std", "pallet-asset-tx-payment/std", @@ -51,6 +57,7 @@ std = [ "pallet-authorship/std", "pallet-balances/std", "polkadot-primitives/std", + "polkadot-runtime-common/std", "sp-consensus-aura/std", "sp-io/std", "sp-std/std", @@ -58,4 +65,5 @@ std = [ "cumulus-primitives-utility/std", "xcm/std", "xcm-executor/std", + "xcm-builder/std" ] diff --git a/parachains/common/src/impls.rs b/parachains/common/src/impls.rs index c1158263da2..1785bf579ce 100644 --- a/parachains/common/src/impls.rs +++ b/parachains/common/src/impls.rs @@ -24,6 +24,7 @@ use pallet_asset_tx_payment::HandleCredit; use sp_runtime::traits::Zero; use sp_std::marker::PhantomData; use xcm::latest::{AssetId, Fungibility::Fungible, MultiAsset, MultiLocation}; +use xcm_builder::{AssetChecking, MintLocation}; /// Type alias to conveniently refer to the `Currency::NegativeImbalance` associated type. pub type NegativeImbalance = as Currency< @@ -97,6 +98,20 @@ where } } +impl AssetChecking<>::AssetId> + for NonZeroIssuance +where + Assets: fungibles::Inspect, +{ + fn asset_checking( + asset: &>::AssetId, + ) -> Option { + match !Assets::total_issuance(*asset).is_zero() { + true => Some(MintLocation::NonLocal), + false => None, + } + } +} /// Asset filter that allows all assets from a certain location. pub struct AssetsFrom(PhantomData); impl> ContainsPair for AssetsFrom { diff --git a/parachains/pallets/ping/Cargo.toml b/parachains/pallets/ping/Cargo.toml index 2671524222e..135528e8e64 100644 --- a/parachains/pallets/ping/Cargo.toml +++ b/parachains/pallets/ping/Cargo.toml @@ -13,7 +13,7 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", default-features frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } cumulus-primitives-core = { path = "../../../primitives/core", default-features = false } cumulus-pallet-xcm = { path = "../../../pallets/xcm", default-features = false } diff --git a/parachains/runtimes/assets/statemine/Cargo.toml b/parachains/runtimes/assets/statemine/Cargo.toml index 1dec52a1f92..311c9c0be80 100644 --- a/parachains/runtimes/assets/statemine/Cargo.toml +++ b/parachains/runtimes/assets/statemine/Cargo.toml @@ -46,14 +46,14 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -kusama-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +kusama-runtime-constants = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-core-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -68,7 +68,7 @@ cumulus-primitives-utility = { path = "../../../../primitives/utility", default- pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } -pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "release-v0.9.31" } +pallet-xcm-benchmarks = { git = "https://github.com/arturgontijo/polkadot", default-features = false, optional = true , branch = "trappist-xcm-v3-0931" } [dev-dependencies] diff --git a/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs index 51b8fa9f0ed..d3bbbd45865 100644 --- a/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/statemine/src/weights/pallet_multisig.rs @@ -66,20 +66,6 @@ impl pallet_multisig::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(43_149_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(97_000 as u64).saturating_mul(s as u64)) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - } - // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { @@ -93,19 +79,6 @@ impl pallet_multisig::WeightInfo for WeightInfo { } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) - /// The range of component `s` is `[3, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(44_799_000 as u64) - // Standard Error: 2_000 - .saturating_add(Weight::from_ref_time(96_000 as u64).saturating_mul(s as u64)) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. @@ -140,17 +113,6 @@ impl pallet_multisig::WeightInfo for WeightInfo { } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) - // Storage: System Account (r:1 w:1) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_complete(s: u32, ) -> Weight { - Weight::from_ref_time(64_260_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(151_000 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(3 as u64)) - } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { Weight::from_ref_time(53_920_000 as u64) diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs index 0ca8a414e44..93e12e826fd 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/mod.rs @@ -241,4 +241,7 @@ impl XcmWeightInfo for StatemineXcmWeight { // XCM Executor does not currently support alias origin operations Weight::MAX.ref_time() } + fn unpaid_execution(_: &WeightLimit, _: &Option) -> XCMWeight { + XcmGeneric::::unpaid_execution().ref_time() + } } diff --git a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 20fdd109ef7..e4b9da0b5ec 100644 --- a/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/parachains/runtimes/assets/statemine/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -185,4 +185,7 @@ impl WeightInfo { pub(crate) fn set_fees_mode() -> Weight { Weight::from_ref_time(6_426_000 as u64) } + pub(crate) fn unpaid_execution() -> Weight { + Weight::from_ref_time(3_111_000 as u64) + } } diff --git a/parachains/runtimes/assets/statemint/Cargo.toml b/parachains/runtimes/assets/statemint/Cargo.toml index 69da88352b1..c3cacbca25c 100644 --- a/parachains/runtimes/assets/statemint/Cargo.toml +++ b/parachains/runtimes/assets/statemint/Cargo.toml @@ -46,14 +46,14 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-core-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-runtime-constants = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -68,7 +68,7 @@ cumulus-primitives-utility = { path = "../../../../primitives/utility", default- pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } -pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "release-v0.9.31" } +pallet-xcm-benchmarks = { git = "https://github.com/arturgontijo/polkadot", default-features = false, optional = true , branch = "trappist-xcm-v3-0931" } [dev-dependencies] hex-literal = "0.3.4" diff --git a/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs index 8c22cfaa98c..e9a1e3f7965 100644 --- a/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/statemint/src/weights/pallet_multisig.rs @@ -66,20 +66,6 @@ impl pallet_multisig::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(42_052_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(109_000 as u64).saturating_mul(s as u64)) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - } - // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { @@ -93,19 +79,6 @@ impl pallet_multisig::WeightInfo for WeightInfo { } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) - /// The range of component `s` is `[3, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(44_006_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(106_000 as u64).saturating_mul(s as u64)) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. @@ -140,17 +113,6 @@ impl pallet_multisig::WeightInfo for WeightInfo { } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) - // Storage: System Account (r:1 w:1) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_complete(s: u32, ) -> Weight { - Weight::from_ref_time(67_374_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(152_000 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(3 as u64)) - } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { Weight::from_ref_time(54_556_000 as u64) diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs index 512be255779..bd6c9bbc097 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/mod.rs @@ -241,4 +241,7 @@ impl XcmWeightInfo for StatemintXcmWeight { // XCM Executor does not currently support alias origin operations Weight::MAX.ref_time() } + fn unpaid_execution(_: &WeightLimit, _: &Option) -> XCMWeight { + XcmGeneric::::unpaid_execution().ref_time() + } } diff --git a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 5e35b4084d0..14ff4bf0442 100644 --- a/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/parachains/runtimes/assets/statemint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -185,4 +185,7 @@ impl WeightInfo { pub(crate) fn set_fees_mode() -> Weight { Weight::from_ref_time(6_336_000 as u64) } + pub(crate) fn unpaid_execution() -> Weight { + Weight::from_ref_time(3_111_000 as u64) + } } diff --git a/parachains/runtimes/assets/westmint/Cargo.toml b/parachains/runtimes/assets/westmint/Cargo.toml index 496292a0916..34cb08ef25e 100644 --- a/parachains/runtimes/assets/westmint/Cargo.toml +++ b/parachains/runtimes/assets/westmint/Cargo.toml @@ -46,14 +46,14 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -westend-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-core-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +westend-runtime-constants = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -68,7 +68,7 @@ cumulus-primitives-utility = { path = "../../../../primitives/utility", default- pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } -pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "release-v0.9.31" } +pallet-xcm-benchmarks = { git = "https://github.com/arturgontijo/polkadot", default-features = false, optional = true , branch = "trappist-xcm-v3-0931" } [dev-dependencies] hex-literal = "0.3.4" diff --git a/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs b/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs index 57a2d8a94f0..f7fc8ad9290 100644 --- a/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/assets/westmint/src/weights/pallet_multisig.rs @@ -66,20 +66,6 @@ impl pallet_multisig::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(42_835_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(93_000 as u64).saturating_mul(s as u64)) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - } - // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { @@ -93,19 +79,6 @@ impl pallet_multisig::WeightInfo for WeightInfo { } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) - /// The range of component `s` is `[3, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(43_306_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(104_000 as u64).saturating_mul(s as u64)) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. @@ -140,17 +113,6 @@ impl pallet_multisig::WeightInfo for WeightInfo { } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) - // Storage: System Account (r:1 w:1) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_complete(s: u32, ) -> Weight { - Weight::from_ref_time(64_336_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(151_000 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(3 as u64)) - } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { Weight::from_ref_time(53_361_000 as u64) diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs index 56852eee6ab..8429b74f2ec 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/mod.rs @@ -241,4 +241,7 @@ impl XcmWeightInfo for WestmintXcmWeight { // XCM Executor does not currently support alias origin operations Weight::MAX.ref_time() } + fn unpaid_execution(_: &WeightLimit, _: &Option) -> XCMWeight { + XcmGeneric::::unpaid_execution().ref_time() + } } diff --git a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs index 18761aa0bf2..a5afa4783f5 100644 --- a/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ b/parachains/runtimes/assets/westmint/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -185,4 +185,7 @@ impl WeightInfo { pub(crate) fn set_fees_mode() -> Weight { Weight::from_ref_time(6_392_000 as u64) } + pub(crate) fn unpaid_execution() -> Weight { + Weight::from_ref_time(3_111_000 as u64) + } } diff --git a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml index 216f410062b..cbc1cfa714a 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml +++ b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml @@ -45,14 +45,14 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-core-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-runtime-constants = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } diff --git a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs index 2c14a8c971c..99ea95bf01d 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs +++ b/parachains/runtimes/collectives/collectives-polkadot/src/weights/pallet_multisig.rs @@ -66,20 +66,6 @@ impl pallet_multisig::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().writes(1 as u64)) } // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(38_845_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(75_000 as u64).saturating_mul(s as u64)) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - } - // Storage: Multisig Multisigs (r:1 w:1) /// The range of component `s` is `[3, 100]`. /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { @@ -93,19 +79,6 @@ impl pallet_multisig::WeightInfo for WeightInfo { } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) - /// The range of component `s` is `[3, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - Weight::from_ref_time(36_944_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(95_000 as u64).saturating_mul(s as u64)) - // Standard Error: 0 - .saturating_add(Weight::from_ref_time(2_000 as u64).saturating_mul(z as u64)) - .saturating_add(T::DbWeight::get().reads(2 as u64)) - .saturating_add(T::DbWeight::get().writes(2 as u64)) - } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) // Storage: System Account (r:1 w:1) /// The range of component `s` is `[2, 100]`. /// The range of component `z` is `[0, 10000]`. @@ -140,17 +113,6 @@ impl pallet_multisig::WeightInfo for WeightInfo { } // Storage: Multisig Multisigs (r:1 w:1) // Storage: Multisig Calls (r:1 w:1) - // Storage: System Account (r:1 w:1) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_complete(s: u32, ) -> Weight { - Weight::from_ref_time(64_311_000 as u64) - // Standard Error: 1_000 - .saturating_add(Weight::from_ref_time(164_000 as u64).saturating_mul(s as u64)) - .saturating_add(T::DbWeight::get().reads(3 as u64)) - .saturating_add(T::DbWeight::get().writes(3 as u64)) - } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { Weight::from_ref_time(51_181_000 as u64) diff --git a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml index 24acb0fdeb7..c01552820f8 100644 --- a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml +++ b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml @@ -51,14 +51,14 @@ pallet-contracts = { git = "https://github.com/paritytech/substrate", default-fe pallet-contracts-primitives = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -kusama-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +kusama-runtime-constants = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-core-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } diff --git a/parachains/runtimes/starters/shell/Cargo.toml b/parachains/runtimes/starters/shell/Cargo.toml index 452d3063e46..7e5d2a15fc9 100644 --- a/parachains/runtimes/starters/shell/Cargo.toml +++ b/parachains/runtimes/starters/shell/Cargo.toml @@ -25,9 +25,9 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false } diff --git a/parachains/runtimes/testing/penpal/Cargo.toml b/parachains/runtimes/testing/penpal/Cargo.toml index 56c30916eeb..f16d3f73d6e 100644 --- a/parachains/runtimes/testing/penpal/Cargo.toml +++ b/parachains/runtimes/testing/penpal/Cargo.toml @@ -52,13 +52,13 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } diff --git a/parachains/runtimes/testing/penpal/src/xcm_config.rs b/parachains/runtimes/testing/penpal/src/xcm_config.rs index e8f70c20e63..bc153fd7ada 100644 --- a/parachains/runtimes/testing/penpal/src/xcm_config.rs +++ b/parachains/runtimes/testing/penpal/src/xcm_config.rs @@ -43,8 +43,8 @@ use xcm::latest::{prelude::*, Weight as XCMWeight}; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, AsPrefixedGeneralIndex, - ConvertedConcreteId, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, FungiblesAdapter, - IsConcrete, NativeAsset, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, + AssetChecking, ConvertedConcreteId, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, FungiblesAdapter, + IsConcrete, MintLocation, NativeAsset, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, }; @@ -254,6 +254,21 @@ where } } +impl AssetChecking<>::AssetId> + for NonZeroIssuance +where + Assets: fungibles::Inspect, +{ + fn asset_checking( + asset: &>::AssetId, + ) -> Option { + match !Assets::total_issuance(*asset).is_zero() { + true => Some(MintLocation::NonLocal), + false => None, + } + } +} + /// A `HandleCredit` implementation that naively transfers the fees to the block author. /// Will drop and burn the assets in case the transfer fails. pub struct AssetsToBlockAuthor(PhantomData); diff --git a/parachains/runtimes/testing/rococo-parachain/Cargo.toml b/parachains/runtimes/testing/rococo-parachain/Cargo.toml index fc64be057f0..60acf63fc40 100644 --- a/parachains/runtimes/testing/rococo-parachain/Cargo.toml +++ b/parachains/runtimes/testing/rococo-parachain/Cargo.toml @@ -34,11 +34,11 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index 8ab166ec977..d15a904ebb6 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -66,10 +66,10 @@ frame-rpc-system = { package = "substrate-frame-rpc-system", git = "https://gith pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-cli = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-client-cli = { path = "../client/cli" } @@ -95,7 +95,7 @@ tempfile = "3.3.0" tokio = { version = "1.21.2", features = ["macros", "time", "parking_lot"] } wait-timeout = "0.2" # purge_chain_works works with rococo-local and needs to allow this -polkadot-cli = { git = "https://github.com/paritytech/polkadot", features = ["rococo-native"] , branch = "release-v0.9.31" } +polkadot-cli = { git = "https://github.com/arturgontijo/polkadot", features = ["rococo-native"] , branch = "trappist-xcm-v3-0931" } [features] default = [] diff --git a/primitives/core/Cargo.toml b/primitives/core/Cargo.toml index a25100ce74c..e31d23a2d9c 100644 --- a/primitives/core/Cargo.toml +++ b/primitives/core/Cargo.toml @@ -14,9 +14,9 @@ sp-std = { git = "https://github.com/paritytech/substrate", default-features = f sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-core-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } [features] default = [ "std" ] diff --git a/primitives/utility/Cargo.toml b/primitives/utility/Cargo.toml index c59d295aa12..6c9040dfeeb 100644 --- a/primitives/utility/Cargo.toml +++ b/primitives/utility/Cargo.toml @@ -15,10 +15,10 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", default-features sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "polkadot-v0.9.31" } -xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } -xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus diff --git a/test/client/Cargo.toml b/test/client/Cargo.toml index 546b3302834..7026404f0da 100644 --- a/test/client/Cargo.toml +++ b/test/client/Cargo.toml @@ -27,8 +27,8 @@ pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-test-runtime = { path = "../runtime" } diff --git a/test/relay-sproof-builder/Cargo.toml b/test/relay-sproof-builder/Cargo.toml index 6d78db44498..d4e13f0efc3 100644 --- a/test/relay-sproof-builder/Cargo.toml +++ b/test/relay-sproof-builder/Cargo.toml @@ -13,7 +13,7 @@ sp-state-machine = { git = "https://github.com/paritytech/substrate", default-fe sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core", default-features = false } diff --git a/test/relay-validation-worker-provider/Cargo.toml b/test/relay-validation-worker-provider/Cargo.toml index fb6fe87bcc6..81e0214b0f1 100644 --- a/test/relay-validation-worker-provider/Cargo.toml +++ b/test/relay-validation-worker-provider/Cargo.toml @@ -8,7 +8,7 @@ build = "build.rs" [dependencies] # Polkadot -polkadot-node-core-pvf = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-node-core-pvf = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } [build-dependencies] toml = "0.5.9" diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index caf29821cb0..7b30cd69dc7 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -50,10 +50,10 @@ substrate-test-client = { git = "https://github.com/paritytech/substrate", branc sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-test-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } -polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-test-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-cli = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } # Cumulus cumulus-client-cli = { path = "../../client/cli" } @@ -76,7 +76,7 @@ futures = "0.3.24" portpicker = "0.1.1" # Polkadot dependencies -polkadot-test-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.31" } +polkadot-test-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } # Substrate dependencies sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } From 75b0bc44456802e642cf5e2b12f31967fa6d5252 Mon Sep 17 00:00:00 2001 From: Artur Gontijo Date: Wed, 2 Nov 2022 14:54:08 -0300 Subject: [PATCH 146/148] [XCMv3] Adding NonFungiblesTransactor for Statemine/Penpal. --- Cargo.lock | 135 +++++++++--------- .../assets/statemine/src/xcm_config.rs | 43 +++--- parachains/runtimes/testing/penpal/Cargo.toml | 5 +- parachains/runtimes/testing/penpal/src/lib.rs | 82 ++++++++++- .../runtimes/testing/penpal/src/xcm_config.rs | 81 +++++++---- 5 files changed, 229 insertions(+), 117 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 487867da936..2845de6de77 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3969,7 +3969,7 @@ checksum = "f9b7d56ba4a8344d6be9729995e6b06f928af29998cdf79fe390cbf6b1fee838" [[package]] name = "kusama-runtime" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "beefy-primitives", "bitvec", @@ -4067,7 +4067,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "frame-support", "polkadot-primitives", @@ -6352,7 +6352,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "frame-support", "frame-system", @@ -6371,7 +6371,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "frame-benchmarking", "frame-support", @@ -6720,7 +6720,7 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "penpal-runtime" -version = "0.9.27" +version = "0.9.31" dependencies = [ "cumulus-pallet-aura-ext", "cumulus-pallet-dmp-queue", @@ -6751,6 +6751,7 @@ dependencies = [ "pallet-timestamp", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", + "pallet-uniques", "pallet-xcm", "parachain-info", "parachains-common", @@ -6929,7 +6930,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -6944,7 +6945,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -6958,7 +6959,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "derive_more", "fatality", @@ -6981,7 +6982,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "fatality", "futures", @@ -7002,7 +7003,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "clap 4.0.18", "frame-benchmarking-cli", @@ -7028,7 +7029,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7069,7 +7070,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "always-assert", "bitvec", @@ -7091,7 +7092,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7104,7 +7105,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "derive_more", "fatality", @@ -7129,7 +7130,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7143,7 +7144,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "futures", "futures-timer", @@ -7163,7 +7164,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "always-assert", "async-trait", @@ -7187,7 +7188,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "futures", "parity-scale-codec", @@ -7205,7 +7206,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "bitvec", "derive_more", @@ -7234,7 +7235,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "bitvec", "futures", @@ -7254,7 +7255,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "bitvec", "fatality", @@ -7273,7 +7274,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7288,7 +7289,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "async-trait", "futures", @@ -7306,7 +7307,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7321,7 +7322,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "futures", "futures-timer", @@ -7338,7 +7339,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "fatality", "futures", @@ -7357,7 +7358,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "async-trait", "futures", @@ -7374,7 +7375,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "bitvec", "fatality", @@ -7392,7 +7393,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "always-assert", "assert_matches", @@ -7424,7 +7425,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "futures", "polkadot-node-primitives", @@ -7440,7 +7441,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "futures", "memory-lru", @@ -7456,7 +7457,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "async-std", "lazy_static", @@ -7474,7 +7475,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "bs58", "futures", @@ -7493,7 +7494,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "async-trait", "derive_more", @@ -7516,7 +7517,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "bounded-vec", "futures", @@ -7538,7 +7539,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7548,7 +7549,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "async-trait", "futures", @@ -7566,7 +7567,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "async-trait", "derive_more", @@ -7589,7 +7590,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "async-trait", "derive_more", @@ -7622,7 +7623,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "async-trait", "futures", @@ -7645,7 +7646,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "derive_more", "frame-support", @@ -7743,7 +7744,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "env_logger", "kusama-runtime", @@ -7758,7 +7759,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "bitvec", "frame-system", @@ -7788,7 +7789,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7820,7 +7821,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "beefy-primitives", "bitvec", @@ -7909,7 +7910,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "beefy-primitives", "bitvec", @@ -7956,7 +7957,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "frame-support", "polkadot-primitives", @@ -7970,7 +7971,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "bs58", "parity-scale-codec", @@ -7982,7 +7983,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "bitflags", "bitvec", @@ -8025,7 +8026,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "async-trait", "beefy-gadget", @@ -8130,7 +8131,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8151,7 +8152,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8161,7 +8162,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8186,7 +8187,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "beefy-primitives", "bitvec", @@ -8247,7 +8248,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "frame-benchmarking", "frame-system", @@ -8940,7 +8941,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9024,7 +9025,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "frame-support", "polkadot-primitives", @@ -10679,7 +10680,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "enumn", "parity-scale-codec", @@ -12009,7 +12010,7 @@ checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b" [[package]] name = "test-runtime-constants" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "frame-support", "polkadot-primitives", @@ -12278,7 +12279,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12289,7 +12290,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -13005,7 +13006,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "beefy-primitives", "bitvec", @@ -13095,7 +13096,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "frame-support", "polkadot-primitives", @@ -13394,7 +13395,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13410,7 +13411,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "frame-support", "frame-system", @@ -13431,7 +13432,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "frame-benchmarking", "frame-support", @@ -13449,7 +13450,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#ddc2ee5b4bc67bd02ebf2c15bd9417648ab89f14" +source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" dependencies = [ "Inflector", "proc-macro2", diff --git a/parachains/runtimes/assets/statemine/src/xcm_config.rs b/parachains/runtimes/assets/statemine/src/xcm_config.rs index 4841ee7c518..7c0462cb36f 100644 --- a/parachains/runtimes/assets/statemine/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemine/src/xcm_config.rs @@ -16,7 +16,7 @@ use super::{ AccountId, AllPalletsWithSystem, AssetId, Assets, Authorship, Balance, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, WeightToFee, - XcmpQueue, + Uniques, XcmpQueue, }; use frame_support::{ match_types, parameter_types, @@ -35,10 +35,11 @@ use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, AsPrefixedGeneralIndex, - ConvertedConcreteId, CurrencyAdapter, EnsureXcmOrigin, FungiblesAdapter, IsConcrete, - NativeAsset, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, - SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, - SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, WeightInfoBounds, + ConvertedConcreteId, CurrencyAdapter, EnsureXcmOrigin, FungiblesAdapter, + IsConcrete, NativeAsset, ParentAsSuperuser, ParentIsPreset, RelayChainAsNative, + SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, + SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, + FixedWeightBounds, NonFungiblesAdapter, NoChecking, }; use xcm_executor::{traits::JustTry, XcmExecutor}; @@ -100,8 +101,23 @@ pub type FungiblesTransactor = FungiblesAdapter< // The account to use for tracking teleports. CheckingAccount, >; + +pub type NonFungiblesTransactor = NonFungiblesAdapter< + Uniques, + ConvertedConcreteId< + u32, + u32, + AsPrefixedGeneralIndex<(), u32, JustTry>, + JustTry, + >, + LocationToAccountId, + AccountId, + NoChecking, + (), +>; + /// Means for transacting assets on this chain. -pub type AssetTransactors = (CurrencyTransactor, FungiblesTransactor); +pub type AssetTransactors = (CurrencyTransactor, FungiblesTransactor, NonFungiblesTransactor); /// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance, /// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can @@ -128,6 +144,8 @@ pub type XcmOriginToTransactDispatchOrigin = ( ); parameter_types! { + // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. + pub UnitWeightCost: u64 = 1_000_000_000; pub const MaxInstructions: u32 = 100; pub const MaxAssetsIntoHolding: u32 = 64; pub XcmAssetFeesReceiver: Option = Authorship::author(); @@ -171,11 +189,7 @@ impl xcm_executor::Config for XcmConfig { type IsTeleporter = NativeAsset; // <- should be enough to allow teleportation of KSM type UniversalLocation = UniversalLocation; type Barrier = Barrier; - type Weigher = WeightInfoBounds< - crate::weights::xcm::StatemineXcmWeight, - RuntimeCall, - MaxInstructions, - >; + type Weigher = FixedWeightBounds; type Trader = ( UsingComponents>, cumulus_primitives_utility::TakeFirstAssetTrader< @@ -238,12 +252,7 @@ impl pallet_xcm::Config for Runtime { type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; - type Weigher = WeightInfoBounds< - crate::weights::xcm::StatemineXcmWeight, - RuntimeCall, - MaxInstructions, - >; - + type Weigher = FixedWeightBounds; type UniversalLocation = UniversalLocation; type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; diff --git a/parachains/runtimes/testing/penpal/Cargo.toml b/parachains/runtimes/testing/penpal/Cargo.toml index f16d3f73d6e..95befd3012a 100644 --- a/parachains/runtimes/testing/penpal/Cargo.toml +++ b/parachains/runtimes/testing/penpal/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "penpal-runtime" -version = "0.9.27" +version = "0.9.31" authors = ["Anonymous"] description = "A parachain for communication back and forth with XCM of assets and uniques." license = "Unlicense" @@ -39,6 +39,7 @@ pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } pallet-asset-tx-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } pallet-assets = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } +pallet-uniques = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } sp-api = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } @@ -104,6 +105,7 @@ std = [ "pallet-transaction-payment-rpc-runtime-api/std", "pallet-transaction-payment/std", "pallet-assets/std", + "pallet-uniques/std", "pallet-asset-tx-payment/std", "pallet-xcm/std", "polkadot-primitives/std", @@ -113,6 +115,7 @@ std = [ "sp-api/std", "sp-block-builder/std", "sp-consensus-aura/std", + "sp-consensus-aura/std", "sp-core/std", "sp-inherents/std", "sp-offchain/std", diff --git a/parachains/runtimes/testing/penpal/src/lib.rs b/parachains/runtimes/testing/penpal/src/lib.rs index 48d40c3008c..50ebfb3ce38 100644 --- a/parachains/runtimes/testing/penpal/src/lib.rs +++ b/parachains/runtimes/testing/penpal/src/lib.rs @@ -35,7 +35,7 @@ use frame_support::{ construct_runtime, dispatch::DispatchClass, parameter_types, - traits::Everything, + traits::{Everything, EitherOfDiverse, EnsureOrigin, EnsureOriginWithArg}, weights::{ constants::WEIGHT_PER_SECOND, ConstantMultiplier, Weight, WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, @@ -61,7 +61,13 @@ use sp_std::prelude::*; #[cfg(feature = "std")] use sp_version::NativeVersion; use sp_version::RuntimeVersion; -use xcm_config::{AssetsToBlockAuthor, XcmConfig, XcmOriginToTransactDispatchOrigin}; +use xcm_config::{ + AssetsToBlockAuthor, + XcmConfig, + XcmOriginToTransactDispatchOrigin, + RelayLocation, + SovereignAccountOf, +}; #[cfg(any(feature = "std", test))] pub use sp_runtime::BuildStorage; @@ -73,8 +79,9 @@ use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}; // XCM Imports use parachains_common::{AccountId, Signature}; -use xcm::latest::prelude::BodyId; -use xcm_executor::XcmExecutor; +use xcm::latest::{prelude::*, MultiLocation}; +use xcm_executor::{traits::Convert, XcmExecutor}; +use pallet_xcm::{EnsureXcm, IsMajorityOfBody}; /// Balance of an account. pub type Balance = u128; @@ -189,7 +196,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("penpal-parachain"), impl_name: create_runtime_str!("penpal-parachain"), authoring_version: 1, - spec_version: 9290, + spec_version: 9310, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -410,6 +417,70 @@ impl pallet_assets::Config for Runtime { type AssetAccountDeposit = AssetAccountDeposit; } +parameter_types! { + pub const UnitBody: BodyId = BodyId::Unit; +} + +pub type AssetsForceOrigin = EitherOfDiverse< + EnsureRoot, + EnsureXcm> +>; + +parameter_types! { + pub const UniquesMetadataDepositBase: Balance = 100 * UNIT; + pub const AttributeDepositBase: Balance = 10 * UNIT; + pub const DepositPerByte: Balance = 10 * UNIT; + pub const CollectionDeposit: Balance = 100 * UNIT; + pub const ItemDeposit: Balance = 1 * UNIT; + pub const StringLimit: u32 = 50; + pub const KeyLimit: u32 = 32; + pub const ValueLimit: u32 = 256; +} + +impl pallet_uniques::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type CollectionId = MultiLocation; + type ItemId = AssetInstance; + type Currency = Balances; + type ForceOrigin = AssetsForceOrigin; + type CollectionDeposit = CollectionDeposit; + type ItemDeposit = ItemDeposit; + type MetadataDepositBase = UniquesMetadataDepositBase; + type AttributeDepositBase = AttributeDepositBase; + type DepositPerByte = DepositPerByte; + type StringLimit = StringLimit; + type KeyLimit = KeyLimit; + type ValueLimit = ValueLimit; + type WeightInfo = pallet_uniques::weights::SubstrateWeight; + #[cfg(feature = "runtime-benchmarks")] + type Helper = (); + type CreateOrigin = ForeignCreators; + type Locker = (); +} + +// `EnsureOriginWithArg` impl for `CreateOrigin` which allows only XCM origins +// which are locations containing the class location. +pub struct ForeignCreators; +impl EnsureOriginWithArg for ForeignCreators { + type Success = AccountId; + + fn try_origin( + o: RuntimeOrigin, + a: &MultiLocation, + ) -> Result { + let origin_location = EnsureXcm::::try_origin(o.clone())?; + if !a.starts_with(&origin_location) { + return Err(o) + } + SovereignAccountOf::convert(origin_location).map_err(|_| o) + } + + #[cfg(feature = "runtime-benchmarks")] + fn successful_origin(a: &MultiLocation) -> RuntimeOrigin { + pallet_xcm::Origin::Xcm(a.clone()).into() + } +} + parameter_types! { pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); @@ -552,6 +623,7 @@ construct_runtime!( // The main stage. Assets: pallet_assets::{Pallet, Call, Storage, Event} = 50, + ForeignUniques: pallet_uniques::{Pallet, Call, Storage, Event} = 51, Sudo: pallet_sudo::{Pallet, Call, Storage, Event, Config} = 255, } diff --git a/parachains/runtimes/testing/penpal/src/xcm_config.rs b/parachains/runtimes/testing/penpal/src/xcm_config.rs index bc153fd7ada..a721bb9cffe 100644 --- a/parachains/runtimes/testing/penpal/src/xcm_config.rs +++ b/parachains/runtimes/testing/penpal/src/xcm_config.rs @@ -24,29 +24,30 @@ use super::{ AccountId, AllPalletsWithSystem, AssetId as AssetIdPalletAssets, Assets, Balance, Balances, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, - WeightToFee, XcmpQueue, + WeightToFee, XcmpQueue, ForeignUniques, }; use core::marker::PhantomData; use frame_support::{ log, match_types, parameter_types, traits::{ fungibles::{self, Balanced, CreditOf}, - ConstU32, Contains, ContainsPair, Everything, Get, Nothing, + Contains, ContainsPair, Everything, Get, Nothing, }, }; use pallet_asset_tx_payment::HandleCredit; use pallet_xcm::XcmPassthrough; -use polkadot_parachain::primitives::Sibling; +use polkadot_parachain::primitives::{Id as ParaId, Sibling}; use polkadot_runtime_common::impls::ToAuthor; use sp_runtime::traits::Zero; -use xcm::latest::{prelude::*, Weight as XCMWeight}; +use xcm::latest::{prelude::*, Instruction, Weight as XCMWeight}; use xcm_builder::{ AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, AsPrefixedGeneralIndex, - AssetChecking, ConvertedConcreteId, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, FungiblesAdapter, - IsConcrete, MintLocation, NativeAsset, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, - SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, - SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, + AssetChecking, ConvertedConcreteId, CurrencyAdapter, EnsureXcmOrigin, FixedWeightBounds, + FungiblesAdapter, IsConcrete, MintLocation, NativeAsset, ParentIsPreset, RelayChainAsNative, + SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative, + SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, + NonFungiblesAdapter, NoChecking, }; use xcm_executor::{ traits::{JustTry, ShouldExecute}, @@ -57,7 +58,6 @@ parameter_types! { pub const RelayLocation: MultiLocation = MultiLocation::parent(); pub const RelayNetwork: Option = None; pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); - pub UniversalLocation: InteriorMultiLocation = X1(Parachain(ParachainInfo::parachain_id().into())); } /// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used @@ -108,8 +108,28 @@ pub type FungiblesTransactor = FungiblesAdapter< CheckingAccount, >; +pub type SovereignAccountOf = ( + SiblingParachainConvertsVia, + AccountId32Aliases, + ParentIsPreset, +); + +pub type NonFungiblesTransactor = NonFungiblesAdapter< + ForeignUniques, + ConvertedConcreteId< + MultiLocation, + AssetInstance, + JustTry, + JustTry, + >, + SovereignAccountOf, + AccountId, + NoChecking, + (), +>; + /// Means for transacting assets on this chain. -pub type AssetTransactors = (CurrencyTransactor, FungiblesTransactor); +pub type AssetTransactors = (CurrencyTransactor, FungiblesTransactor, NonFungiblesTransactor); /// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance, /// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can @@ -136,7 +156,6 @@ parameter_types! { // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. pub UnitWeightCost: u64 = 1_000_000_000; pub const MaxInstructions: u32 = 100; - pub const MaxAssetsIntoHolding: u32 = 64; } match_types! { @@ -164,12 +183,12 @@ where { fn should_execute( origin: &MultiLocation, - message: &mut [Instruction], + instructions: &mut [Instruction], max_weight: XCMWeight, weight_credit: &mut XCMWeight, ) -> Result<(), ()> { - Deny::should_execute(origin, message, max_weight, weight_credit)?; - Allow::should_execute(origin, message, max_weight, weight_credit) + Deny::should_execute(origin, instructions, max_weight, weight_credit)?; + Allow::should_execute(origin, instructions, max_weight, weight_credit) } } @@ -178,11 +197,11 @@ pub struct DenyReserveTransferToRelayChain; impl ShouldExecute for DenyReserveTransferToRelayChain { fn should_execute( origin: &MultiLocation, - message: &mut [Instruction], + instructions: &mut [Instruction], _max_weight: XCMWeight, _weight_credit: &mut XCMWeight, ) -> Result<(), ()> { - if message.iter().any(|inst| { + if instructions.iter().any(|inst| { matches!( inst, InitiateReserveWithdraw { @@ -200,7 +219,7 @@ impl ShouldExecute for DenyReserveTransferToRelayChain { // allow reserve transfers to arrive from relay chain if matches!(origin, MultiLocation { parents: 1, interior: Here }) && - message.iter().any(|inst| matches!(inst, ReserveAssetDeposited { .. })) + instructions.iter().any(|inst| matches!(inst, ReserveAssetDeposited { .. })) { log::warn!( target: "xcm::barriers", @@ -233,12 +252,18 @@ pub type AccountIdOf = ::AccountId; /// Asset filter that allows all assets from a certain location. pub struct AssetsFrom(PhantomData); -impl> ContainsPair for AssetsFrom { +impl> ContainsPair + for AssetsFrom +{ fn contains(asset: &MultiAsset, origin: &MultiLocation) -> bool { - let loc = T::get(); + let (_, loc) = T::get(); &loc == origin && - matches!(asset, MultiAsset { id: AssetId::Concrete(asset_loc), fun: Fungible(_a) } - if asset_loc.match_and_split(&loc).is_some()) + ( + matches!(asset, MultiAsset { id: AssetId::Concrete(asset_loc), fun: Fungible(_a) } + if asset_loc.match_and_split(&loc).is_some()) || + matches!(asset, MultiAsset { id: AssetId::Concrete(asset_loc), fun: NonFungible(_a) } + if asset_loc.match_and_split(&loc).is_some()) + ) } } @@ -330,6 +355,8 @@ parameter_types! { pub CommonGoodAssetsPalletLocation: MultiLocation = MultiLocation::new(1, X2(Parachain(1000), PalletInstance(50))); pub CheckingAccount: AccountId = PolkadotXcm::check_account(); + pub UniversalLocation: InteriorMultiLocation = X1(Parachain(ParachainInfo::parachain_id().into())); + pub const MaxAssetsIntoHolding: u32 = 64; } pub type Reserves = (NativeAsset, AssetsFrom); @@ -350,12 +377,12 @@ impl xcm_executor::Config for XcmConfig { UsingComponents>; type ResponseHandler = PolkadotXcm; type AssetTrap = PolkadotXcm; + type AssetLocker = (); + type AssetExchanger = (); type AssetClaims = PolkadotXcm; type SubscriptionService = PolkadotXcm; type PalletInstancesInfo = AllPalletsWithSystem; type MaxAssetsIntoHolding = MaxAssetsIntoHolding; - type AssetLocker = (); - type AssetExchanger = (); type FeeManager = (); type MessageExporter = (); type UniversalAliases = Nothing; @@ -376,6 +403,8 @@ pub type XcmRouter = ( impl pallet_xcm::Config for Runtime { type RuntimeEvent = RuntimeEvent; + type Currency = Balances; + type CurrencyMatcher = (); type SendXcmOrigin = EnsureXcmOrigin; type XcmRouter = XcmRouter; type ExecuteXcmOrigin = EnsureXcmOrigin; @@ -393,11 +422,9 @@ impl pallet_xcm::Config for Runtime { const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; // ^ Override for AdvertisedXcmVersion default type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; - type Currency = Balances; - type CurrencyMatcher = (); type TrustedLockers = (); - type SovereignAccountOf = LocationToAccountId; - type MaxLockers = ConstU32<8>; + type SovereignAccountOf = (); + type MaxLockers = (); } impl cumulus_pallet_xcm::Config for Runtime { From 1b784118051d5c53bb5f3e3a46be083dc84da266 Mon Sep 17 00:00:00 2001 From: Artur Gontijo Date: Wed, 2 Nov 2022 20:09:27 -0300 Subject: [PATCH 147/148] [XCMv3] Using paritytech/polkadot --- Cargo.lock | 132 +++++++++--------- client/collator/Cargo.toml | 10 +- client/consensus/common/Cargo.toml | 2 +- client/network/Cargo.toml | 12 +- client/pov-recovery/Cargo.toml | 8 +- .../Cargo.toml | 10 +- client/relay-chain-interface/Cargo.toml | 4 +- client/relay-chain-minimal-node/Cargo.toml | 18 +-- client/relay-chain-rpc-interface/Cargo.toml | 2 +- client/service/Cargo.toml | 2 +- pallets/dmp-queue/Cargo.toml | 2 +- pallets/parachain-system/Cargo.toml | 2 +- pallets/solo-to-para/Cargo.toml | 2 +- pallets/xcm/Cargo.toml | 2 +- pallets/xcmp-queue/Cargo.toml | 8 +- parachain-template/node/Cargo.toml | 8 +- parachain-template/runtime/Cargo.toml | 12 +- parachains/common/Cargo.toml | 10 +- parachains/pallets/ping/Cargo.toml | 2 +- .../runtimes/assets/statemine/Cargo.toml | 18 +-- .../runtimes/assets/statemint/Cargo.toml | 18 +-- .../runtimes/assets/westmint/Cargo.toml | 18 +-- .../collectives-polkadot/Cargo.toml | 16 +-- .../contracts/contracts-rococo/Cargo.toml | 16 +-- parachains/runtimes/starters/shell/Cargo.toml | 6 +- parachains/runtimes/testing/penpal/Cargo.toml | 14 +- .../testing/rococo-parachain/Cargo.toml | 10 +- polkadot-parachain/Cargo.toml | 10 +- primitives/core/Cargo.toml | 6 +- primitives/utility/Cargo.toml | 8 +- test/client/Cargo.toml | 4 +- test/relay-sproof-builder/Cargo.toml | 2 +- .../Cargo.toml | 2 +- test/service/Cargo.toml | 10 +- 34 files changed, 203 insertions(+), 203 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2845de6de77..f35724d289d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3969,7 +3969,7 @@ checksum = "f9b7d56ba4a8344d6be9729995e6b06f928af29998cdf79fe390cbf6b1fee838" [[package]] name = "kusama-runtime" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "beefy-primitives", "bitvec", @@ -4067,7 +4067,7 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "frame-support", "polkadot-primitives", @@ -6352,7 +6352,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "frame-support", "frame-system", @@ -6371,7 +6371,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "frame-benchmarking", "frame-support", @@ -6930,7 +6930,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -6945,7 +6945,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "futures", "polkadot-node-network-protocol", @@ -6959,7 +6959,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "derive_more", "fatality", @@ -6982,7 +6982,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "fatality", "futures", @@ -7003,7 +7003,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "clap 4.0.18", "frame-benchmarking-cli", @@ -7029,7 +7029,7 @@ dependencies = [ [[package]] name = "polkadot-client" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -7070,7 +7070,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "always-assert", "bitvec", @@ -7092,7 +7092,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -7105,7 +7105,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "derive_more", "fatality", @@ -7130,7 +7130,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -7144,7 +7144,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "futures", "futures-timer", @@ -7164,7 +7164,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "always-assert", "async-trait", @@ -7188,7 +7188,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "futures", "parity-scale-codec", @@ -7206,7 +7206,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "bitvec", "derive_more", @@ -7235,7 +7235,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "bitvec", "futures", @@ -7255,7 +7255,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "bitvec", "fatality", @@ -7274,7 +7274,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7289,7 +7289,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "async-trait", "futures", @@ -7307,7 +7307,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "futures", "polkadot-node-subsystem", @@ -7322,7 +7322,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "futures", "futures-timer", @@ -7339,7 +7339,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "fatality", "futures", @@ -7358,7 +7358,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "async-trait", "futures", @@ -7375,7 +7375,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "bitvec", "fatality", @@ -7393,7 +7393,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "always-assert", "assert_matches", @@ -7425,7 +7425,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "futures", "polkadot-node-primitives", @@ -7441,7 +7441,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "futures", "memory-lru", @@ -7457,7 +7457,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "async-std", "lazy_static", @@ -7475,7 +7475,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "bs58", "futures", @@ -7494,7 +7494,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "async-trait", "derive_more", @@ -7517,7 +7517,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "bounded-vec", "futures", @@ -7539,7 +7539,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -7549,7 +7549,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "async-trait", "futures", @@ -7567,7 +7567,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "async-trait", "derive_more", @@ -7590,7 +7590,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "async-trait", "derive_more", @@ -7623,7 +7623,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "async-trait", "futures", @@ -7646,7 +7646,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "derive_more", "frame-support", @@ -7744,7 +7744,7 @@ dependencies = [ [[package]] name = "polkadot-performance-test" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "env_logger", "kusama-runtime", @@ -7759,7 +7759,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "bitvec", "frame-system", @@ -7789,7 +7789,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -7821,7 +7821,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "beefy-primitives", "bitvec", @@ -7910,7 +7910,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "beefy-primitives", "bitvec", @@ -7957,7 +7957,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-constants" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "frame-support", "polkadot-primitives", @@ -7971,7 +7971,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "bs58", "parity-scale-codec", @@ -7983,7 +7983,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "bitflags", "bitvec", @@ -8026,7 +8026,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "async-trait", "beefy-gadget", @@ -8131,7 +8131,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -8152,7 +8152,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -8162,7 +8162,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "parity-scale-codec", "polkadot-node-subsystem", @@ -8187,7 +8187,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "beefy-primitives", "bitvec", @@ -8248,7 +8248,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "frame-benchmarking", "frame-system", @@ -8941,7 +8941,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -9025,7 +9025,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "frame-support", "polkadot-primitives", @@ -10680,7 +10680,7 @@ checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "slot-range-helper" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "enumn", "parity-scale-codec", @@ -12010,7 +12010,7 @@ checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b" [[package]] name = "test-runtime-constants" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "frame-support", "polkadot-primitives", @@ -12279,7 +12279,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -12290,7 +12290,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "expander 0.0.6", "proc-macro-crate", @@ -13006,7 +13006,7 @@ dependencies = [ [[package]] name = "westend-runtime" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "beefy-primitives", "bitvec", @@ -13096,7 +13096,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "frame-support", "polkadot-primitives", @@ -13395,7 +13395,7 @@ dependencies = [ [[package]] name = "xcm" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -13411,7 +13411,7 @@ dependencies = [ [[package]] name = "xcm-builder" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "frame-support", "frame-system", @@ -13432,7 +13432,7 @@ dependencies = [ [[package]] name = "xcm-executor" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "frame-benchmarking", "frame-support", @@ -13450,7 +13450,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.9.31" -source = "git+https://github.com/arturgontijo/polkadot?branch=trappist-xcm-v3-0931#2748f8469e1b1840c33b088faefff80ff3cb17d4" +source = "git+https://github.com/paritytech/polkadot?branch=trappist-xcm-v3#de09d44483b7ad83e2e95cefce8ed1d2a243dab3" dependencies = [ "Inflector", "proc-macro2", diff --git a/client/collator/Cargo.toml b/client/collator/Cargo.toml index 038cbda7b9b..420ab3624ca 100644 --- a/client/collator/Cargo.toml +++ b/client/collator/Cargo.toml @@ -18,10 +18,10 @@ sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot- sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-node-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-node-subsystem = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-overseer = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-node-subsystem = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } # Cumulus cumulus-client-consensus-common = { path = "../consensus/common" } @@ -37,7 +37,7 @@ sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = " sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-node-subsystem-test-helpers = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-node-subsystem-test-helpers = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } # Cumulus cumulus-test-client = { path = "../../test/client" } diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index cda8c9c23c6..e2e8f492d7c 100644 --- a/client/consensus/common/Cargo.toml +++ b/client/consensus/common/Cargo.toml @@ -21,7 +21,7 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkad sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } # Cumulus cumulus-relay-chain-interface = { path = "../../relay-chain-interface" } diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index 8c92b18546e..111e5dc4bbe 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -22,9 +22,9 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkad sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-node-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } # Cumulus cumulus-relay-chain-interface = { path = "../relay-chain-interface" } @@ -44,9 +44,9 @@ sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polka substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-client = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-test-client = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-client = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-test-client = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core" } diff --git a/client/pov-recovery/Cargo.toml b/client/pov-recovery/Cargo.toml index 33a32fef474..47896494420 100644 --- a/client/pov-recovery/Cargo.toml +++ b/client/pov-recovery/Cargo.toml @@ -20,10 +20,10 @@ sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", br sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-node-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-node-subsystem = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-overseer = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-node-primitives = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-node-subsystem = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core" } diff --git a/client/relay-chain-inprocess-interface/Cargo.toml b/client/relay-chain-inprocess-interface/Cargo.toml index 5499590ffbd..8ec21b55bf2 100644 --- a/client/relay-chain-inprocess-interface/Cargo.toml +++ b/client/relay-chain-inprocess-interface/Cargo.toml @@ -22,9 +22,9 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkad sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-cli = { git = "https://github.com/arturgontijo/polkadot", default-features = false, features = ["cli"] , branch = "trappist-xcm-v3-0931" } -polkadot-client = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", default-features = false, features = ["cli"] , branch = "trappist-xcm-v3" } +polkadot-client = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core" } @@ -36,8 +36,8 @@ cumulus-relay-chain-interface = { path = "../relay-chain-interface" } sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-test-client = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-test-client = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } metered = { package = "prioritized-metered-channel", version = "0.2.0" } # Cumulus diff --git a/client/relay-chain-interface/Cargo.toml b/client/relay-chain-interface/Cargo.toml index 4d5d72966db..215eeb8478d 100644 --- a/client/relay-chain-interface/Cargo.toml +++ b/client/relay-chain-interface/Cargo.toml @@ -5,8 +5,8 @@ version = "0.1.0" edition = "2021" [dependencies] -polkadot-overseer = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } cumulus-primitives-core = { path = "../../primitives/core" } diff --git a/client/relay-chain-minimal-node/Cargo.toml b/client/relay-chain-minimal-node/Cargo.toml index 0ac96cfdd9d..7928cf371bf 100644 --- a/client/relay-chain-minimal-node/Cargo.toml +++ b/client/relay-chain-minimal-node/Cargo.toml @@ -6,15 +6,15 @@ edition = "2021" [dependencies] # polkadot deps -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-core-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-overseer = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-node-subsystem-util = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-node-network-protocol = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-network-bridge = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-node-core-av-store = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-availability-distribution = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-overseer = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-node-subsystem-util = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-node-network-protocol = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-network-bridge = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-node-core-av-store = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-availability-distribution = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } # substrate deps sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } diff --git a/client/relay-chain-rpc-interface/Cargo.toml b/client/relay-chain-rpc-interface/Cargo.toml index 67fc4efbb59..cd2b3b74afe 100644 --- a/client/relay-chain-rpc-interface/Cargo.toml +++ b/client/relay-chain-rpc-interface/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] -polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } cumulus-primitives-core = { path = "../../primitives/core" } cumulus-relay-chain-interface = { path = "../relay-chain-interface" } diff --git a/client/service/Cargo.toml b/client/service/Cargo.toml index 0c6bedaa4a1..5f3015699c3 100644 --- a/client/service/Cargo.toml +++ b/client/service/Cargo.toml @@ -18,7 +18,7 @@ sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot- sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } # Cumulus cumulus-client-cli = { path = "../cli" } diff --git a/pallets/dmp-queue/Cargo.toml b/pallets/dmp-queue/Cargo.toml index 67ac7e14f02..8b87ffe7e9f 100644 --- a/pallets/dmp-queue/Cargo.toml +++ b/pallets/dmp-queue/Cargo.toml @@ -17,7 +17,7 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", default-features sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core", default-features = false } diff --git a/pallets/parachain-system/Cargo.toml b/pallets/parachain-system/Cargo.toml index b3bba4a2889..acabcd791e4 100644 --- a/pallets/parachain-system/Cargo.toml +++ b/pallets/parachain-system/Cargo.toml @@ -27,7 +27,7 @@ sp-trie = { git = "https://github.com/paritytech/substrate", default-features = sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, features = [ "wasm-api" ], branch = "trappist-xcm-v3-0931" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, features = [ "wasm-api" ], branch = "trappist-xcm-v3" } # Cumulus cumulus-pallet-parachain-system-proc-macro = { path = "proc-macro", default-features = false } diff --git a/pallets/solo-to-para/Cargo.toml b/pallets/solo-to-para/Cargo.toml index 6eab3b3f472..72a345f3b64 100644 --- a/pallets/solo-to-para/Cargo.toml +++ b/pallets/solo-to-para/Cargo.toml @@ -17,7 +17,7 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", default-features sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus cumulus-pallet-parachain-system = { default-features = false, path = "../parachain-system" } diff --git a/pallets/xcm/Cargo.toml b/pallets/xcm/Cargo.toml index 0dd9655178f..9dd03435939 100644 --- a/pallets/xcm/Cargo.toml +++ b/pallets/xcm/Cargo.toml @@ -14,7 +14,7 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", default-features frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } cumulus-primitives-core = { path = "../../primitives/core", default-features = false } diff --git a/pallets/xcmp-queue/Cargo.toml b/pallets/xcmp-queue/Cargo.toml index 341f3e33fa5..9948f127455 100644 --- a/pallets/xcmp-queue/Cargo.toml +++ b/pallets/xcmp-queue/Cargo.toml @@ -18,9 +18,9 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", default-features sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core", default-features = false } @@ -36,7 +36,7 @@ sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0 pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -xcm-builder = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } # Cumulus cumulus-pallet-parachain-system = { path = "../parachain-system" } diff --git a/parachain-template/node/Cargo.toml b/parachain-template/node/Cargo.toml index 23f56a24420..b1791546f94 100644 --- a/parachain-template/node/Cargo.toml +++ b/parachain-template/node/Cargo.toml @@ -54,10 +54,10 @@ substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-cli = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus cumulus-client-cli = { path = "../../client/cli" } diff --git a/parachain-template/runtime/Cargo.toml b/parachain-template/runtime/Cargo.toml index dc7afd065fa..aabb286a4ca 100644 --- a/parachain-template/runtime/Cargo.toml +++ b/parachain-template/runtime/Cargo.toml @@ -53,12 +53,12 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus cumulus-pallet-aura-ext = { path = "../../pallets/aura-ext", default-features = false } diff --git a/parachains/common/Cargo.toml b/parachains/common/Cargo.toml index b40f99dba36..96a7763ae53 100644 --- a/parachains/common/Cargo.toml +++ b/parachains/common/Cargo.toml @@ -27,11 +27,11 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", default-features sp-std = { git = "https://github.com/paritytech/substrate", default-features = false , branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus pallet-collator-selection = { path = "../../pallets/collator-selection", default-features = false } diff --git a/parachains/pallets/ping/Cargo.toml b/parachains/pallets/ping/Cargo.toml index 135528e8e64..97315b9ce99 100644 --- a/parachains/pallets/ping/Cargo.toml +++ b/parachains/pallets/ping/Cargo.toml @@ -13,7 +13,7 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", default-features frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } cumulus-primitives-core = { path = "../../../primitives/core", default-features = false } cumulus-pallet-xcm = { path = "../../../pallets/xcm", default-features = false } diff --git a/parachains/runtimes/assets/statemine/Cargo.toml b/parachains/runtimes/assets/statemine/Cargo.toml index 311c9c0be80..9e637dca34e 100644 --- a/parachains/runtimes/assets/statemine/Cargo.toml +++ b/parachains/runtimes/assets/statemine/Cargo.toml @@ -46,14 +46,14 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -kusama-runtime-constants = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-core-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +kusama-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -68,7 +68,7 @@ cumulus-primitives-utility = { path = "../../../../primitives/utility", default- pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } -pallet-xcm-benchmarks = { git = "https://github.com/arturgontijo/polkadot", default-features = false, optional = true , branch = "trappist-xcm-v3-0931" } +pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "trappist-xcm-v3" } [dev-dependencies] diff --git a/parachains/runtimes/assets/statemint/Cargo.toml b/parachains/runtimes/assets/statemint/Cargo.toml index c3cacbca25c..7e61dd3ece3 100644 --- a/parachains/runtimes/assets/statemint/Cargo.toml +++ b/parachains/runtimes/assets/statemint/Cargo.toml @@ -46,14 +46,14 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-core-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-runtime-constants = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -68,7 +68,7 @@ cumulus-primitives-utility = { path = "../../../../primitives/utility", default- pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } -pallet-xcm-benchmarks = { git = "https://github.com/arturgontijo/polkadot", default-features = false, optional = true , branch = "trappist-xcm-v3-0931" } +pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "trappist-xcm-v3" } [dev-dependencies] hex-literal = "0.3.4" diff --git a/parachains/runtimes/assets/westmint/Cargo.toml b/parachains/runtimes/assets/westmint/Cargo.toml index 34cb08ef25e..e32d3f4765d 100644 --- a/parachains/runtimes/assets/westmint/Cargo.toml +++ b/parachains/runtimes/assets/westmint/Cargo.toml @@ -46,14 +46,14 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-core-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -westend-runtime-constants = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +westend-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } @@ -68,7 +68,7 @@ cumulus-primitives-utility = { path = "../../../../primitives/utility", default- pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } parachain-info = { path = "../../../pallets/parachain-info", default-features = false } parachains-common = { path = "../../../common", default-features = false } -pallet-xcm-benchmarks = { git = "https://github.com/arturgontijo/polkadot", default-features = false, optional = true , branch = "trappist-xcm-v3-0931" } +pallet-xcm-benchmarks = { git = "https://github.com/paritytech/polkadot", default-features = false, optional = true , branch = "trappist-xcm-v3" } [dev-dependencies] hex-literal = "0.3.4" diff --git a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml index cbc1cfa714a..03e3fff7cf6 100644 --- a/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml +++ b/parachains/runtimes/collectives/collectives-polkadot/Cargo.toml @@ -45,14 +45,14 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-core-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-runtime-constants = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } diff --git a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml index c01552820f8..b6c8d4d054e 100644 --- a/parachains/runtimes/contracts/contracts-rococo/Cargo.toml +++ b/parachains/runtimes/contracts/contracts-rococo/Cargo.toml @@ -51,14 +51,14 @@ pallet-contracts = { git = "https://github.com/paritytech/substrate", default-fe pallet-contracts-primitives = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -kusama-runtime-constants = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-core-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +kusama-runtime-constants = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } diff --git a/parachains/runtimes/starters/shell/Cargo.toml b/parachains/runtimes/starters/shell/Cargo.toml index 7e5d2a15fc9..b05a38cbd41 100644 --- a/parachains/runtimes/starters/shell/Cargo.toml +++ b/parachains/runtimes/starters/shell/Cargo.toml @@ -25,9 +25,9 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system", default-features = false } diff --git a/parachains/runtimes/testing/penpal/Cargo.toml b/parachains/runtimes/testing/penpal/Cargo.toml index 95befd3012a..12df8919782 100644 --- a/parachains/runtimes/testing/penpal/Cargo.toml +++ b/parachains/runtimes/testing/penpal/Cargo.toml @@ -53,13 +53,13 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } diff --git a/parachains/runtimes/testing/rococo-parachain/Cargo.toml b/parachains/runtimes/testing/rococo-parachain/Cargo.toml index 60acf63fc40..79afee7503b 100644 --- a/parachains/runtimes/testing/rococo-parachain/Cargo.toml +++ b/parachains/runtimes/testing/rococo-parachain/Cargo.toml @@ -34,11 +34,11 @@ sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -pallet-xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus cumulus-pallet-aura-ext = { path = "../../../../pallets/aura-ext", default-features = false } diff --git a/polkadot-parachain/Cargo.toml b/polkadot-parachain/Cargo.toml index d15a904ebb6..f508c03c6a0 100644 --- a/polkadot-parachain/Cargo.toml +++ b/polkadot-parachain/Cargo.toml @@ -66,10 +66,10 @@ frame-rpc-system = { package = "substrate-frame-rpc-system", git = "https://gith pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-cli = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -xcm = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +xcm = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } # Cumulus cumulus-client-cli = { path = "../client/cli" } @@ -95,7 +95,7 @@ tempfile = "3.3.0" tokio = { version = "1.21.2", features = ["macros", "time", "parking_lot"] } wait-timeout = "0.2" # purge_chain_works works with rococo-local and needs to allow this -polkadot-cli = { git = "https://github.com/arturgontijo/polkadot", features = ["rococo-native"] , branch = "trappist-xcm-v3-0931" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", features = ["rococo-native"] , branch = "trappist-xcm-v3" } [features] default = [] diff --git a/primitives/core/Cargo.toml b/primitives/core/Cargo.toml index e31d23a2d9c..b2373e08f3a 100644 --- a/primitives/core/Cargo.toml +++ b/primitives/core/Cargo.toml @@ -14,9 +14,9 @@ sp-std = { git = "https://github.com/paritytech/substrate", default-features = f sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-core-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } [features] default = [ "std" ] diff --git a/primitives/utility/Cargo.toml b/primitives/utility/Cargo.toml index 6c9040dfeeb..9856f6485b7 100644 --- a/primitives/utility/Cargo.toml +++ b/primitives/utility/Cargo.toml @@ -15,10 +15,10 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", default-features sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-runtime-common = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-executor = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } -xcm-builder = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-executor = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } +xcm-builder = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus diff --git a/test/client/Cargo.toml b/test/client/Cargo.toml index 7026404f0da..14a25edd6ac 100644 --- a/test/client/Cargo.toml +++ b/test/client/Cargo.toml @@ -27,8 +27,8 @@ pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-parachain = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } # Cumulus cumulus-test-runtime = { path = "../runtime" } diff --git a/test/relay-sproof-builder/Cargo.toml b/test/relay-sproof-builder/Cargo.toml index d4e13f0efc3..0bea5221b17 100644 --- a/test/relay-sproof-builder/Cargo.toml +++ b/test/relay-sproof-builder/Cargo.toml @@ -13,7 +13,7 @@ sp-state-machine = { git = "https://github.com/paritytech/substrate", default-fe sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", default-features = false, branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "trappist-xcm-v3" } # Cumulus cumulus-primitives-core = { path = "../../primitives/core", default-features = false } diff --git a/test/relay-validation-worker-provider/Cargo.toml b/test/relay-validation-worker-provider/Cargo.toml index 81e0214b0f1..616e28924a9 100644 --- a/test/relay-validation-worker-provider/Cargo.toml +++ b/test/relay-validation-worker-provider/Cargo.toml @@ -8,7 +8,7 @@ build = "build.rs" [dependencies] # Polkadot -polkadot-node-core-pvf = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-node-core-pvf = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } [build-dependencies] toml = "0.5.9" diff --git a/test/service/Cargo.toml b/test/service/Cargo.toml index 7b30cd69dc7..9dbb42ba5df 100644 --- a/test/service/Cargo.toml +++ b/test/service/Cargo.toml @@ -50,10 +50,10 @@ substrate-test-client = { git = "https://github.com/paritytech/substrate", branc sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } # Polkadot -polkadot-primitives = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-test-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } -polkadot-cli = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-test-service = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } # Cumulus cumulus-client-cli = { path = "../../client/cli" } @@ -76,7 +76,7 @@ futures = "0.3.24" portpicker = "0.1.1" # Polkadot dependencies -polkadot-test-service = { git = "https://github.com/arturgontijo/polkadot", branch = "trappist-xcm-v3-0931" } +polkadot-test-service = { git = "https://github.com/paritytech/polkadot", branch = "trappist-xcm-v3" } # Substrate dependencies sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.31" } From 4584d9a0a4f37703852e3ffa4944b9b1207a146c Mon Sep 17 00:00:00 2001 From: Artur Gontijo Date: Wed, 2 Nov 2022 21:22:29 -0300 Subject: [PATCH 148/148] [XCMv3] v0.9.31 + NonFungiblesAdapter --- pallets/parachain-system/src/relay_state_snapshot.rs | 4 ++-- pallets/parachain-system/src/validate_block/implementation.rs | 2 +- pallets/xcmp-queue/src/lib.rs | 1 - parachains/runtimes/testing/penpal/src/lib.rs | 1 - test/relay-sproof-builder/src/lib.rs | 2 +- test/service/src/lib.rs | 3 +-- 6 files changed, 5 insertions(+), 8 deletions(-) diff --git a/pallets/parachain-system/src/relay_state_snapshot.rs b/pallets/parachain-system/src/relay_state_snapshot.rs index 9f69dd94762..5b6a1ad3df9 100644 --- a/pallets/parachain-system/src/relay_state_snapshot.rs +++ b/pallets/parachain-system/src/relay_state_snapshot.rs @@ -20,7 +20,7 @@ use cumulus_primitives_core::{ }; use scale_info::TypeInfo; use sp_runtime::traits::HashFor; -use sp_state_machine::{Backend, TrieBackend}; +use sp_state_machine::{Backend, TrieBackend, TrieBackendBuilder}; use sp_std::vec::Vec; use sp_trie::{HashDBT, MemoryDB, StorageProof, EMPTY_PREFIX}; @@ -156,7 +156,7 @@ impl RelayChainStateProof { if !db.contains(&relay_parent_storage_root, EMPTY_PREFIX) { return Err(Error::RootMismatch) } - let trie_backend = TrieBackend::new(db, relay_parent_storage_root); + let trie_backend = TrieBackendBuilder::new(db, relay_parent_storage_root).build(); Ok(Self { para_id, trie_backend }) } diff --git a/pallets/parachain-system/src/validate_block/implementation.rs b/pallets/parachain-system/src/validate_block/implementation.rs index 10821744dbc..8c03f012be2 100644 --- a/pallets/parachain-system/src/validate_block/implementation.rs +++ b/pallets/parachain-system/src/validate_block/implementation.rs @@ -74,7 +74,7 @@ where sp_std::mem::drop(storage_proof); - let backend = sp_state_machine::TrieBackend::new(db, *parent_head.state_root()); + let backend = sp_state_machine::TrieBackendBuilder::new(db, *parent_head.state_root()).build(); let _guard = ( // Replace storage calls with our own implementations diff --git a/pallets/xcmp-queue/src/lib.rs b/pallets/xcmp-queue/src/lib.rs index 40981ca7866..229f77688d7 100644 --- a/pallets/xcmp-queue/src/lib.rs +++ b/pallets/xcmp-queue/src/lib.rs @@ -1164,7 +1164,6 @@ impl SendXcm for Pallet { // Anything else is unhandled. This includes a message that is not meant for us. // We need to make sure that dest/msg is not consumed here. *dest = Some(d); - *msg = Some(xcm); Err(SendError::NotApplicable) }, } diff --git a/parachains/runtimes/testing/penpal/src/lib.rs b/parachains/runtimes/testing/penpal/src/lib.rs index 4d09b779efa..50ebfb3ce38 100644 --- a/parachains/runtimes/testing/penpal/src/lib.rs +++ b/parachains/runtimes/testing/penpal/src/lib.rs @@ -510,7 +510,6 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { type ExecuteOverweightOrigin = EnsureRoot; type ControllerOrigin = EnsureRoot; type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; - type PriceForSiblingDelivery = (); type WeightInfo = (); type PriceForSiblingDelivery = (); } diff --git a/test/relay-sproof-builder/src/lib.rs b/test/relay-sproof-builder/src/lib.rs index da5e5d6ee60..5c2a1a1063f 100644 --- a/test/relay-sproof-builder/src/lib.rs +++ b/test/relay-sproof-builder/src/lib.rs @@ -104,7 +104,7 @@ impl RelayStateSproofBuilder { ) -> (polkadot_primitives::v2::Hash, sp_state_machine::StorageProof) { let (db, root) = MemoryDB::>::default_with_root(); let state_version = Default::default(); // for test using default. - let mut backend = sp_state_machine::TrieBackend::new(db, root); + let mut backend = sp_state_machine::TrieBackendBuilder::new(db, root).build(); let mut relevant_keys = Vec::new(); { diff --git a/test/service/src/lib.rs b/test/service/src/lib.rs index 3245bc8e3d5..9e9f5883f97 100644 --- a/test/service/src/lib.rs +++ b/test/service/src/lib.rs @@ -656,8 +656,7 @@ pub fn node_config( keystore: KeystoreConfig::InMemory, keystore_remote: Default::default(), database: DatabaseSource::RocksDb { path: root.join("db"), cache_size: 128 }, - state_cache_size: 16777216, - state_cache_child_ratio: None, + trie_cache_maximum_size: Some(64 * 1024 * 1024), state_pruning: Some(PruningMode::ArchiveAll), blocks_pruning: BlocksPruning::KeepAll, chain_spec: spec,